#!/usr/bin/perl

BEGIN {
    no strict 'refs';
    $main::fatpacked{"App/IndonesianBankingUtils.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'APP_INDONESIANBANKINGUTILS';
  package App::IndonesianBankingUtils;
  
  use 5.010001;
  
  our $DATE = '2017-05-16'; # DATE
  our $VERSION = '0.09'; # VERSION
  
  1;
  # ABSTRACT: CLIs related to Indonesian banking
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  App::IndonesianBankingUtils - CLIs related to Indonesian banking
  
  =head1 VERSION
  
  This document describes version 0.09 of App::IndonesianBankingUtils (from Perl distribution App-IndonesianBankingUtils), released on 2017-05-16.
  
  =head1
  
  This distribution contains several CLI's related to Indonesian banking:
  
  =over
  
  =item * L<download-bca>
  
  =item * L<download-mandiri>
  
  =item * L<list-bca-branches>
  
  =item * L<list-id-bank-cards>
  
  =item * L<list-id-banks>
  
  =item * L<list-mandiri-branches>
  
  =item * L<parse-bca-account>
  
  =item * L<parse-bca-statement>
  
  =item * L<parse-bprks-statement>
  
  =item * L<parse-mandiri-account>
  
  =item * L<parse-mandiri-statement>
  
  =back
  
  
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/App-IndonesianBankingUtils>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-App-IndonesianBankingUtils>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=App-IndonesianBankingUtils>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Finance::Bank::ID::BCA>
  
  L<Finance::Bank::ID::BPRKS>
  
  L<Finance::Bank::ID::Mandiri>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016, 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
APP_INDONESIANBANKINGUTILS

    $main::fatpacked{"B/Hooks/EndOfScope.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'B_HOOKS_ENDOFSCOPE';
  package B::Hooks::EndOfScope; # git description: 0.20-3-ge7283e2
  # ABSTRACT: Execute code after a scope finished compilation
  # KEYWORDS: code hooks execution scope
  
  use strict;
  use warnings;
  
  our $VERSION = '0.21';
  
  # note - a %^H tie() fallback will probably work on 5.6 as well,
  # if you need to go that low - sane patches passing *all* tests
  # will be gladly accepted
  use 5.008001;
  
  BEGIN {
    use Module::Implementation 0.05;
    Module::Implementation::build_loader_sub(
      implementations => [ 'XS', 'PP' ],
      symbols => [ 'on_scope_end' ],
    )->();
  }
  
  use Sub::Exporter::Progressive 0.001006 -setup => {
    exports => [ 'on_scope_end' ],
    groups  => { default => ['on_scope_end'] },
  };
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  B::Hooks::EndOfScope - Execute code after a scope finished compilation
  
  =head1 VERSION
  
  version 0.21
  
  =head1 SYNOPSIS
  
      on_scope_end { ... };
  
  =head1 DESCRIPTION
  
  This module allows you to execute code when perl finished compiling the
  surrounding scope.
  
  =head1 FUNCTIONS
  
  =head2 on_scope_end
  
      on_scope_end { ... };
  
      on_scope_end $code;
  
  Registers C<$code> to be executed after the surrounding scope has been
  compiled.
  
  This is exported by default. See L<Sub::Exporter> on how to customize it.
  
  =head1 PURE-PERL MODE CAVEAT
  
  While L<Variable::Magic> has access to some very dark sorcery to make it
  possible to throw an exception from within a callback, the pure-perl
  implementation does not have access to these hacks. Therefore, what
  would have been a compile-time exception is instead converted to a
  warning, and your execution will continue as if the exception never
  happened.
  
  To explicitly request an XS (or PP) implementation one has two choices. Either
  to import from the desired implementation explicitly:
  
   use B::Hooks::EndOfScope::XS
     or
   use B::Hooks::EndOfScope::PP
  
  or by setting C<$ENV{B_HOOKS_ENDOFSCOPE_IMPLEMENTATION}> to either C<XS> or
  C<PP>.
  
  =head1 SEE ALSO
  
  L<Sub::Exporter>
  
  L<Variable::Magic>
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|https://rt.cpan.org/Public/Dist/Display.html?Name=B-Hooks-EndOfScope>
  (or L<bug-B-Hooks-EndOfScope@rt.cpan.org|mailto:bug-B-Hooks-EndOfScope@rt.cpan.org>).
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Florian Ragwitz <rafl@debian.org>
  
  =item *
  
  Peter Rabbitson <ribasushi@cpan.org>
  
  =back
  
  =head1 CONTRIBUTORS
  
  =for stopwords Karen Etheridge Christian Walde Simon Wilper Tatsuhiko Miyagawa Tomas Doran
  
  =over 4
  
  =item *
  
  Karen Etheridge <ether@cpan.org>
  
  =item *
  
  Christian Walde <walde.christian@googlemail.com>
  
  =item *
  
  Simon Wilper <sxw@chronowerks.de>
  
  =item *
  
  Tatsuhiko Miyagawa <miyagawa@bulknews.net>
  
  =item *
  
  Tomas Doran <bobtfish@bobtfish.net>
  
  =back
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2008 by Florian Ragwitz.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
B_HOOKS_ENDOFSCOPE

    $main::fatpacked{"B/Hooks/EndOfScope/PP.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'B_HOOKS_ENDOFSCOPE_PP';
  package B::Hooks::EndOfScope::PP;
  # ABSTRACT: Execute code after a scope finished compilation - PP implementation
  
  use warnings;
  use strict;
  
  our $VERSION = '0.21';
  
  use constant _PERL_VERSION => "$]";
  
  BEGIN {
    if (_PERL_VERSION =~ /^5\.009/) {
      # CBA to figure out where %^H got broken and which H::U::HH is sane enough
      die "By design B::Hooks::EndOfScope does not operate in pure-perl mode on perl 5.9.X\n"
    }
    elsif (_PERL_VERSION < '5.010') {
      require B::Hooks::EndOfScope::PP::HintHash;
      *on_scope_end = \&B::Hooks::EndOfScope::PP::HintHash::on_scope_end;
    }
    else {
      require B::Hooks::EndOfScope::PP::FieldHash;
      *on_scope_end = \&B::Hooks::EndOfScope::PP::FieldHash::on_scope_end;
    }
  }
  
  use Sub::Exporter::Progressive 0.001006 -setup => {
    exports => ['on_scope_end'],
    groups  => { default => ['on_scope_end'] },
  };
  
  sub __invoke_callback {
    local $@;
    eval { $_[0]->(); 1 } or do {
      my $err = $@;
      require Carp;
      Carp::cluck( (join ' ',
        'A scope-end callback raised an exception, which can not be propagated when',
        'B::Hooks::EndOfScope operates in pure-perl mode. Your program will CONTINUE',
        'EXECUTION AS IF NOTHING HAPPENED AFTER THIS WARNING. Below is the complete',
        'exception text, followed by a stack-trace of the callback execution:',
      ) . "\n\n$err\n\r" );
  
      sleep 1 if -t *STDERR;  # maybe a bad idea...?
    };
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  B::Hooks::EndOfScope::PP - Execute code after a scope finished compilation - PP implementation
  
  =head1 VERSION
  
  version 0.21
  
  =head1 DESCRIPTION
  
  This is the pure-perl implementation of L<B::Hooks::EndOfScope> based only on
  modules available as part of the perl core. Its leaner sibling
  L<B::Hooks::EndOfScope::XS> will be automatically preferred if all
  dependencies are available and C<$ENV{B_HOOKS_ENDOFSCOPE_IMPLEMENTATION}> is
  not set to C<'PP'>.
  
  =head1 FUNCTIONS
  
  =head2 on_scope_end
  
      on_scope_end { ... };
  
      on_scope_end $code;
  
  Registers C<$code> to be executed after the surrounding scope has been
  compiled.
  
  This is exported by default. See L<Sub::Exporter> on how to customize it.
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|https://rt.cpan.org/Public/Dist/Display.html?Name=B-Hooks-EndOfScope>
  (or L<bug-B-Hooks-EndOfScope@rt.cpan.org|mailto:bug-B-Hooks-EndOfScope@rt.cpan.org>).
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Florian Ragwitz <rafl@debian.org>
  
  =item *
  
  Peter Rabbitson <ribasushi@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2008 by Florian Ragwitz.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
B_HOOKS_ENDOFSCOPE_PP

    $main::fatpacked{"B/Hooks/EndOfScope/XS.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'B_HOOKS_ENDOFSCOPE_XS';
  package B::Hooks::EndOfScope::XS;
  # ABSTRACT: Execute code after a scope finished compilation - XS implementation
  
  use strict;
  use warnings;
  
  our $VERSION = '0.21';
  
  use Variable::Magic 0.48 ();
  use Sub::Exporter::Progressive 0.001006 -setup => {
    exports => ['on_scope_end'],
    groups  => { default => ['on_scope_end'] },
  };
  
  my $wiz = Variable::Magic::wizard
    data => sub { [$_[1]] },
    free => sub { $_->() for @{ $_[1] }; () },
    # When someone localise %^H, our magic doesn't want to be copied
    # down. We want it to be around only for the scope we've initially
    # attached ourselfs to. Merely having MGf_LOCAL and a noop svt_local
    # callback achieves this. If anything wants to attach more magic of our
    # kind to a localised %^H, things will continue to just work as we'll be
    # attached with a new and empty callback list.
    local => \undef
  ;
  
  sub on_scope_end (&) {
    my $cb = shift;
  
    $^H |= 0x020000;
  
    if (my $stack = Variable::Magic::getdata %^H, $wiz) {
      push @{ $stack }, $cb;
    }
    else {
      Variable::Magic::cast %^H, $wiz, $cb;
    }
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  B::Hooks::EndOfScope::XS - Execute code after a scope finished compilation - XS implementation
  
  =head1 VERSION
  
  version 0.21
  
  =head1 DESCRIPTION
  
  This is the implementation of L<B::Hooks::EndOfScope> based on
  L<Variable::Magic>, which is an XS module dependent on a compiler. It will
  always be automatically preferred if L<Variable::Magic> is available.
  
  =head1 FUNCTIONS
  
  =head2 on_scope_end
  
      on_scope_end { ... };
  
      on_scope_end $code;
  
  Registers C<$code> to be executed after the surrounding scope has been
  compiled.
  
  This is exported by default. See L<Sub::Exporter> on how to customize it.
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|https://rt.cpan.org/Public/Dist/Display.html?Name=B-Hooks-EndOfScope>
  (or L<bug-B-Hooks-EndOfScope@rt.cpan.org|mailto:bug-B-Hooks-EndOfScope@rt.cpan.org>).
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Florian Ragwitz <rafl@debian.org>
  
  =item *
  
  Peter Rabbitson <ribasushi@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2008 by Florian Ragwitz.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
B_HOOKS_ENDOFSCOPE_XS

    $main::fatpacked{"Border/Style.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'BORDER_STYLE';
  package Border::Style;
  
  our $DATE = '2014-12-10'; # DATE
  our $VERSION = '0.01'; # VERSION
  
  1;
  # ABSTRACT: Border style structure
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Border::Style - Border style structure
  
  =head1 VERSION
  
  This document describes version 0.01 of Border::Style (from Perl distribution Border-Style), released on 2014-12-10.
  
  =head1 DESCRIPTION
  
  This module specifies a structure for border styles. The distribution also comes
  with utility routines and roles for managing border styles in applications.
  
  =head1 SPECIFICATION
  
  Border style is a L<DefHash> containing these keys: C<v>, C<name>, C<summary>,
  C<utf8> (bool, set to true to indicate that characters are Unicode characters in
  UTF8), C<chars> (array). Format for the characters in C<chars>:
  
   [
     [A, b, C, D],  # 0
     [E, F, G],     # 1
     [H, i, J, K],  # 2
     [L, M, N],     # 3
     [O, p, Q, R],  # 4
     [S, t, U, V],  # 5
   ]
  
   AbbbCbbbD        #0 Top border characters
   E   F   G        #1 Vertical separators for header row
   HiiiJiiiK        #2 Separator between header row and first data row
   L   M   N        #3 Vertical separators for data row
   OpppQpppR        #4 Separator between data rows
   L   M   N        #3
   StttUtttV        #5 Bottom border characters
  
  A character can also be a coderef that will be called with C<< ($self, %args)
  >>. Arguments in C<%args> contains information such as C<name>, C<y>, C<x>, C<n>
  (how many times should character be repeated), etc.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Border-Style>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Border-Style>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Border-Style>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
BORDER_STYLE

    $main::fatpacked{"Border/Style/Role.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'BORDER_STYLE_ROLE';
  package Border::Style::Role;
  
  our $DATE = '2014-12-10'; # DATE
  our $VERSION = '0.01'; # VERSION
  
  # currently this is still very Text::ANSITable-ish.
  
  use 5.010001;
  use Moo::Role;
  
  with 'Term::App::Role::Attrs';
  
  has border_style_args  => (is => 'rw', default => sub { {} });
  has _all_border_styles => (is => 'rw');
  
  sub get_border_char {
      my ($self, $y, $x, $n, $args) = @_;
      my $bch = $self->{border_style}{chars};
      $n //= 1;
      if (ref($bch) eq 'CODE') {
          $bch->($self, y=>$y, x=>$x, n=>$n, %{$args // {}});
      } else {
          $bch->[$y][$x] x $n;
      }
  }
  
  sub border_style {
      my $self = shift;
  
      if (!@_) { return $self->{border_style} }
      my $bs = shift;
  
      my $p2 = "";
      if (!ref($bs)) {
          $p2 = " named $bs";
          $bs = $self->get_border_style($bs);
      }
  
      my $err;
      if ($bs->{box_chars} && !$self->use_box_chars) {
          $err = "use_box_chars is set to false";
      } elsif ($bs->{utf8} && !$self->use_utf8) {
          $err = "use_utf8 is set to false";
      }
      die "Can't select border style$p2: $err" if $err;
  
      $self->{border_style} = $bs;
  }
  
  sub get_border_style {
      my ($self, $bs) = @_;
  
      my $prefix = (ref($self) ? ref($self) : $self ) .
          '::BorderStyle'; # XXX allow override
  
      my $bss;
      my $pkg;
      if ($bs =~ s/(.+):://) {
          $pkg = "$prefix\::$1";
          my $pkgp = $pkg; $pkgp =~ s!::!/!g;
          require "$pkgp.pm";
          no strict 'refs';
          $bss = \%{"$pkg\::border_styles"};
      } else {
          #$bss = $self->list_border_styles(1);
          die "Please use SubPackage::name to choose border style, ".
              "use list_border_styles() to list available styles";
      }
      $bss->{$bs} or die "Unknown border style name '$bs'".
          ($pkg ? " in package $prefix\::$pkg" : "");
      $bss->{$bs};
  }
  
  sub list_border_styles {
      require Module::List;
      require Module::Load;
  
      my ($self, $detail) = @_;
  
      my $prefix = (ref($self) ? ref($self) : $self ) .
          '::BorderStyle'; # XXX allow override
      my $all_bs = $self->_all_border_styles;
  
      if (!$all_bs) {
          my $mods = Module::List::list_modules("$prefix\::",
                                                {list_modules=>1, recurse=>1});
          no strict 'refs';
          $all_bs = {};
          for my $mod (sort keys %$mods) {
              #$log->tracef("Loading border style module '%s' ...", $mod);
              Module::Load::load($mod);
              my $bs = \%{"$mod\::border_styles"};
              for (keys %$bs) {
                  my $cutmod = $mod;
                  $cutmod =~ s/^\Q$prefix\E:://;
                  my $name = "$cutmod\::$_";
                  $bs->{$_}{name} = $name;
                  $all_bs->{$name} = $bs->{$_};
              }
          }
          $self->_all_border_styles($all_bs);
      }
  
      if ($detail) {
          return $all_bs;
      } else {
          return sort keys %$all_bs;
      }
  }
  
  1;
  # ABSTRACT: Role for class wanting to support border styles
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Border::Style::Role - Role for class wanting to support border styles
  
  =head1 VERSION
  
  This document describes version 0.01 of Border::Style::Role (from Perl distribution Border-Style), released on 2014-12-10.
  
  =head1 DESCRIPTION
  
  =head1 ATTRIBUTES
  
  =head2 border_style => HASH
  
  =head2 border_style_args => HASH
  
  =head1 METHODS
  
  =head2 $cl->list_border_styles($detail) => ARRAY
  
  =head2 $cl->get_border_style($name) => HASH
  
  =head2 $cl->get_border_char($y, $x, $repeat, \%args) => STR
  
  Pick border character from border style (and optionally repeat it C<$repeat>
  times). C<\%args> is a hashref to be supplied to the coderef if the 'chars'
  value from the style is a coderef.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Border-Style>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Border-Style>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Border-Style>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
BORDER_STYLE_ROLE

    $main::fatpacked{"Capture/Tiny.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'CAPTURE_TINY';
  use 5.006;
  use strict;
  use warnings;
  package Capture::Tiny;
  # ABSTRACT: Capture STDOUT and STDERR from Perl, XS or external programs
  our $VERSION = '0.44';
  use Carp ();
  use Exporter ();
  use IO::Handle ();
  use File::Spec ();
  use File::Temp qw/tempfile tmpnam/;
  use Scalar::Util qw/reftype blessed/;
  # Get PerlIO or fake it
  BEGIN {
    local $@;
    eval { require PerlIO; PerlIO->can('get_layers') }
      or *PerlIO::get_layers = sub { return () };
  }
  
  #--------------------------------------------------------------------------#
  # create API subroutines and export them
  # [do STDOUT flag, do STDERR flag, do merge flag, do tee flag]
  #--------------------------------------------------------------------------#
  
  my %api = (
    capture         => [1,1,0,0],
    capture_stdout  => [1,0,0,0],
    capture_stderr  => [0,1,0,0],
    capture_merged  => [1,1,1,0],
    tee             => [1,1,0,1],
    tee_stdout      => [1,0,0,1],
    tee_stderr      => [0,1,0,1],
    tee_merged      => [1,1,1,1],
  );
  
  for my $sub ( keys %api ) {
    my $args = join q{, }, @{$api{$sub}};
    eval "sub $sub(&;@) {unshift \@_, $args; goto \\&_capture_tee;}"; ## no critic
  }
  
  our @ISA = qw/Exporter/;
  our @EXPORT_OK = keys %api;
  our %EXPORT_TAGS = ( 'all' => \@EXPORT_OK );
  
  #--------------------------------------------------------------------------#
  # constants and fixtures
  #--------------------------------------------------------------------------#
  
  my $IS_WIN32 = $^O eq 'MSWin32';
  
  ##our $DEBUG = $ENV{PERL_CAPTURE_TINY_DEBUG};
  ##
  ##my $DEBUGFH;
  ##open $DEBUGFH, "> DEBUG" if $DEBUG;
  ##
  ##*_debug = $DEBUG ? sub(@) { print {$DEBUGFH} @_ } : sub(){0};
  
  our $TIMEOUT = 30;
  
  #--------------------------------------------------------------------------#
  # command to tee output -- the argument is a filename that must
  # be opened to signal that the process is ready to receive input.
  # This is annoying, but seems to be the best that can be done
  # as a simple, portable IPC technique
  #--------------------------------------------------------------------------#
  my @cmd = ($^X, '-C0', '-e', <<'HERE');
  use Fcntl;
  $SIG{HUP}=sub{exit};
  if ( my $fn=shift ) {
      sysopen(my $fh, qq{$fn}, O_WRONLY|O_CREAT|O_EXCL) or die $!;
      print {$fh} $$;
      close $fh;
  }
  my $buf; while (sysread(STDIN, $buf, 2048)) {
      syswrite(STDOUT, $buf); syswrite(STDERR, $buf);
  }
  HERE
  
  #--------------------------------------------------------------------------#
  # filehandle manipulation
  #--------------------------------------------------------------------------#
  
  sub _relayer {
    my ($fh, $layers) = @_;
    # _debug("# requested layers (@{$layers}) for @{[fileno $fh]}\n");
  
    # eliminate pseudo-layers
    binmode( $fh, ":raw" );
    # strip off real layers until only :unix is left
    while ( 1 < ( my $layers =()= PerlIO::get_layers( $fh, output => 1 ) ) ) {
        binmode( $fh, ":pop" );
    }
    # apply other layers
    my @to_apply = @$layers;
    shift @to_apply; # eliminate initial :unix
    # _debug("# applying layers  (unix @to_apply) to @{[fileno $fh]}\n");
    binmode($fh, ":" . join(":",@to_apply));
  }
  
  sub _name {
    my $glob = shift;
    no strict 'refs'; ## no critic
    return *{$glob}{NAME};
  }
  
  sub _open {
    open $_[0], $_[1] or Carp::confess "Error from open(" . join(q{, }, @_) . "): $!";
    # _debug( "# open " . join( ", " , map { defined $_ ? _name($_) : 'undef' } @_ ) . " as " . fileno( $_[0] ) . "\n" );
  }
  
  sub _close {
    # _debug( "# closing " . ( defined $_[0] ? _name($_[0]) : 'undef' )  . " on " . fileno( $_[0] ) . "\n" );
    close $_[0] or Carp::confess "Error from close(" . join(q{, }, @_) . "): $!";
  }
  
  my %dup; # cache this so STDIN stays fd0
  my %proxy_count;
  sub _proxy_std {
    my %proxies;
    if ( ! defined fileno STDIN ) {
      $proxy_count{stdin}++;
      if (defined $dup{stdin}) {
        _open \*STDIN, "<&=" . fileno($dup{stdin});
        # _debug( "# restored proxy STDIN as " . (defined fileno STDIN ? fileno STDIN : 'undef' ) . "\n" );
      }
      else {
        _open \*STDIN, "<" . File::Spec->devnull;
        # _debug( "# proxied STDIN as " . (defined fileno STDIN ? fileno STDIN : 'undef' ) . "\n" );
        _open $dup{stdin} = IO::Handle->new, "<&=STDIN";
      }
      $proxies{stdin} = \*STDIN;
      binmode(STDIN, ':utf8') if $] >= 5.008; ## no critic
    }
    if ( ! defined fileno STDOUT ) {
      $proxy_count{stdout}++;
      if (defined $dup{stdout}) {
        _open \*STDOUT, ">&=" . fileno($dup{stdout});
        # _debug( "# restored proxy STDOUT as " . (defined fileno STDOUT ? fileno STDOUT : 'undef' ) . "\n" );
      }
      else {
        _open \*STDOUT, ">" . File::Spec->devnull;
         # _debug( "# proxied STDOUT as " . (defined fileno STDOUT ? fileno STDOUT : 'undef' ) . "\n" );
        _open $dup{stdout} = IO::Handle->new, ">&=STDOUT";
      }
      $proxies{stdout} = \*STDOUT;
      binmode(STDOUT, ':utf8') if $] >= 5.008; ## no critic
    }
    if ( ! defined fileno STDERR ) {
      $proxy_count{stderr}++;
      if (defined $dup{stderr}) {
        _open \*STDERR, ">&=" . fileno($dup{stderr});
         # _debug( "# restored proxy STDERR as " . (defined fileno STDERR ? fileno STDERR : 'undef' ) . "\n" );
      }
      else {
        _open \*STDERR, ">" . File::Spec->devnull;
         # _debug( "# proxied STDERR as " . (defined fileno STDERR ? fileno STDERR : 'undef' ) . "\n" );
        _open $dup{stderr} = IO::Handle->new, ">&=STDERR";
      }
      $proxies{stderr} = \*STDERR;
      binmode(STDERR, ':utf8') if $] >= 5.008; ## no critic
    }
    return %proxies;
  }
  
  sub _unproxy {
    my (%proxies) = @_;
    # _debug( "# unproxying: " . join(" ", keys %proxies) . "\n" );
    for my $p ( keys %proxies ) {
      $proxy_count{$p}--;
      # _debug( "# unproxied " . uc($p) . " ($proxy_count{$p} left)\n" );
      if ( ! $proxy_count{$p} ) {
        _close $proxies{$p};
        _close $dup{$p} unless $] < 5.008; # 5.6 will have already closed this as dup
        delete $dup{$p};
      }
    }
  }
  
  sub _copy_std {
    my %handles;
    for my $h ( qw/stdout stderr stdin/ ) {
      next if $h eq 'stdin' && ! $IS_WIN32; # WIN32 hangs on tee without STDIN copied
      my $redir = $h eq 'stdin' ? "<&" : ">&";
      _open $handles{$h} = IO::Handle->new(), $redir . uc($h); # ">&STDOUT" or "<&STDIN"
    }
    return \%handles;
  }
  
  # In some cases we open all (prior to forking) and in others we only open
  # the output handles (setting up redirection)
  sub _open_std {
    my ($handles) = @_;
    _open \*STDIN, "<&" . fileno $handles->{stdin} if defined $handles->{stdin};
    _open \*STDOUT, ">&" . fileno $handles->{stdout} if defined $handles->{stdout};
    _open \*STDERR, ">&" . fileno $handles->{stderr} if defined $handles->{stderr};
  }
  
  #--------------------------------------------------------------------------#
  # private subs
  #--------------------------------------------------------------------------#
  
  sub _start_tee {
    my ($which, $stash) = @_; # $which is "stdout" or "stderr"
    # setup pipes
    $stash->{$_}{$which} = IO::Handle->new for qw/tee reader/;
    pipe $stash->{reader}{$which}, $stash->{tee}{$which};
    # _debug( "# pipe for $which\: " .  _name($stash->{tee}{$which}) . " " . fileno( $stash->{tee}{$which} ) . " => " . _name($stash->{reader}{$which}) . " " . fileno( $stash->{reader}{$which}) . "\n" );
    select((select($stash->{tee}{$which}), $|=1)[0]); # autoflush
    # setup desired redirection for parent and child
    $stash->{new}{$which} = $stash->{tee}{$which};
    $stash->{child}{$which} = {
      stdin   => $stash->{reader}{$which},
      stdout  => $stash->{old}{$which},
      stderr  => $stash->{capture}{$which},
    };
    # flag file is used to signal the child is ready
    $stash->{flag_files}{$which} = scalar tmpnam();
    # execute @cmd as a separate process
    if ( $IS_WIN32 ) {
      my $old_eval_err=$@;
      undef $@;
  
      eval "use Win32API::File qw/GetOsFHandle SetHandleInformation fileLastError HANDLE_FLAG_INHERIT INVALID_HANDLE_VALUE/ ";
      # _debug( "# Win32API::File loaded\n") unless $@;
      my $os_fhandle = GetOsFHandle( $stash->{tee}{$which} );
      # _debug( "# Couldn't get OS handle: " . fileLastError() . "\n") if ! defined $os_fhandle || $os_fhandle == INVALID_HANDLE_VALUE();
      my $result = SetHandleInformation( $os_fhandle, HANDLE_FLAG_INHERIT(), 0);
      # _debug( $result ? "# set no-inherit flag on $which tee\n" : ("# can't disable tee handle flag inherit: " . fileLastError() . "\n"));
      _open_std( $stash->{child}{$which} );
      $stash->{pid}{$which} = system(1, @cmd, $stash->{flag_files}{$which});
      # not restoring std here as it all gets redirected again shortly anyway
      $@=$old_eval_err;
    }
    else { # use fork
      _fork_exec( $which, $stash );
    }
  }
  
  sub _fork_exec {
    my ($which, $stash) = @_; # $which is "stdout" or "stderr"
    my $pid = fork;
    if ( not defined $pid ) {
      Carp::confess "Couldn't fork(): $!";
    }
    elsif ($pid == 0) { # child
      # _debug( "# in child process ...\n" );
      untie *STDIN; untie *STDOUT; untie *STDERR;
      _close $stash->{tee}{$which};
      # _debug( "# redirecting handles in child ...\n" );
      _open_std( $stash->{child}{$which} );
      # _debug( "# calling exec on command ...\n" );
      exec @cmd, $stash->{flag_files}{$which};
    }
    $stash->{pid}{$which} = $pid
  }
  
  my $have_usleep = eval "use Time::HiRes 'usleep'; 1";
  sub _files_exist {
    return 1 if @_ == grep { -f } @_;
    Time::HiRes::usleep(1000) if $have_usleep;
    return 0;
  }
  
  sub _wait_for_tees {
    my ($stash) = @_;
    my $start = time;
    my @files = values %{$stash->{flag_files}};
    my $timeout = defined $ENV{PERL_CAPTURE_TINY_TIMEOUT}
                ? $ENV{PERL_CAPTURE_TINY_TIMEOUT} : $TIMEOUT;
    1 until _files_exist(@files) || ($timeout && (time - $start > $timeout));
    Carp::confess "Timed out waiting for subprocesses to start" if ! _files_exist(@files);
    unlink $_ for @files;
  }
  
  sub _kill_tees {
    my ($stash) = @_;
    if ( $IS_WIN32 ) {
      # _debug( "# closing handles\n");
      close($_) for values %{ $stash->{tee} };
      # _debug( "# waiting for subprocesses to finish\n");
      my $start = time;
      1 until wait == -1 || (time - $start > 30);
    }
    else {
      _close $_ for values %{ $stash->{tee} };
      waitpid $_, 0 for values %{ $stash->{pid} };
    }
  }
  
  sub _slurp {
    my ($name, $stash) = @_;
    my ($fh, $pos) = map { $stash->{$_}{$name} } qw/capture pos/;
    # _debug( "# slurping captured $name from " . fileno($fh) . " at pos $pos with layers: @{[PerlIO::get_layers($fh)]}\n");
    seek( $fh, $pos, 0 ) or die "Couldn't seek on capture handle for $name\n";
    my $text = do { local $/; scalar readline $fh };
    return defined($text) ? $text : "";
  }
  
  #--------------------------------------------------------------------------#
  # _capture_tee() -- generic main sub for capturing or teeing
  #--------------------------------------------------------------------------#
  
  sub _capture_tee {
    # _debug( "# starting _capture_tee with (@_)...\n" );
    my ($do_stdout, $do_stderr, $do_merge, $do_tee, $code, @opts) = @_;
    my %do = ($do_stdout ? (stdout => 1) : (),  $do_stderr ? (stderr => 1) : ());
    Carp::confess("Custom capture options must be given as key/value pairs\n")
      unless @opts % 2 == 0;
    my $stash = { capture => { @opts } };
    for ( keys %{$stash->{capture}} ) {
      my $fh = $stash->{capture}{$_};
      Carp::confess "Custom handle for $_ must be seekable\n"
        unless ref($fh) eq 'GLOB' || (blessed($fh) && $fh->isa("IO::Seekable"));
    }
    # save existing filehandles and setup captures
    local *CT_ORIG_STDIN  = *STDIN ;
    local *CT_ORIG_STDOUT = *STDOUT;
    local *CT_ORIG_STDERR = *STDERR;
    # find initial layers
    my %layers = (
      stdin   => [PerlIO::get_layers(\*STDIN) ],
      stdout  => [PerlIO::get_layers(\*STDOUT, output => 1)],
      stderr  => [PerlIO::get_layers(\*STDERR, output => 1)],
    );
    # _debug( "# existing layers for $_\: @{$layers{$_}}\n" ) for qw/stdin stdout stderr/;
    # get layers from underlying glob of tied filehandles if we can
    # (this only works for things that work like Tie::StdHandle)
    $layers{stdout} = [PerlIO::get_layers(tied *STDOUT)]
      if tied(*STDOUT) && (reftype tied *STDOUT eq 'GLOB');
    $layers{stderr} = [PerlIO::get_layers(tied *STDERR)]
      if tied(*STDERR) && (reftype tied *STDERR eq 'GLOB');
    # _debug( "# tied object corrected layers for $_\: @{$layers{$_}}\n" ) for qw/stdin stdout stderr/;
    # bypass scalar filehandles and tied handles
    # localize scalar STDIN to get a proxy to pick up FD0, then restore later to CT_ORIG_STDIN
    my %localize;
    $localize{stdin}++,  local(*STDIN)
      if grep { $_ eq 'scalar' } @{$layers{stdin}};
    $localize{stdout}++, local(*STDOUT)
      if $do_stdout && grep { $_ eq 'scalar' } @{$layers{stdout}};
    $localize{stderr}++, local(*STDERR)
      if ($do_stderr || $do_merge) && grep { $_ eq 'scalar' } @{$layers{stderr}};
    $localize{stdin}++, local(*STDIN), _open( \*STDIN, "<&=0")
      if tied *STDIN && $] >= 5.008;
    $localize{stdout}++, local(*STDOUT), _open( \*STDOUT, ">&=1")
      if $do_stdout && tied *STDOUT && $] >= 5.008;
    $localize{stderr}++, local(*STDERR), _open( \*STDERR, ">&=2")
      if ($do_stderr || $do_merge) && tied *STDERR && $] >= 5.008;
    # _debug( "# localized $_\n" ) for keys %localize;
    # proxy any closed/localized handles so we don't use fds 0, 1 or 2
    my %proxy_std = _proxy_std();
    # _debug( "# proxy std: @{ [%proxy_std] }\n" );
    # update layers after any proxying
    $layers{stdout} = [PerlIO::get_layers(\*STDOUT, output => 1)] if $proxy_std{stdout};
    $layers{stderr} = [PerlIO::get_layers(\*STDERR, output => 1)] if $proxy_std{stderr};
    # _debug( "# post-proxy layers for $_\: @{$layers{$_}}\n" ) for qw/stdin stdout stderr/;
    # store old handles and setup handles for capture
    $stash->{old} = _copy_std();
    $stash->{new} = { %{$stash->{old}} }; # default to originals
    for ( keys %do ) {
      $stash->{new}{$_} = ($stash->{capture}{$_} ||= File::Temp->new);
      seek( $stash->{capture}{$_}, 0, 2 ) or die "Could not seek on capture handle for $_\n";
      $stash->{pos}{$_} = tell $stash->{capture}{$_};
      # _debug("# will capture $_ on " . fileno($stash->{capture}{$_})."\n" );
      _start_tee( $_ => $stash ) if $do_tee; # tees may change $stash->{new}
    }
    _wait_for_tees( $stash ) if $do_tee;
    # finalize redirection
    $stash->{new}{stderr} = $stash->{new}{stdout} if $do_merge;
    # _debug( "# redirecting in parent ...\n" );
    _open_std( $stash->{new} );
    # execute user provided code
    my ($exit_code, $inner_error, $outer_error, $orig_pid, @result);
    {
      $orig_pid = $$;
      local *STDIN = *CT_ORIG_STDIN if $localize{stdin}; # get original, not proxy STDIN
      # _debug( "# finalizing layers ...\n" );
      _relayer(\*STDOUT, $layers{stdout}) if $do_stdout;
      _relayer(\*STDERR, $layers{stderr}) if $do_stderr;
      # _debug( "# running code $code ...\n" );
      my $old_eval_err=$@;
      undef $@;
      eval { @result = $code->(); $inner_error = $@ };
      $exit_code = $?; # save this for later
      $outer_error = $@; # save this for later
      STDOUT->flush if $do_stdout;
      STDERR->flush if $do_stderr;
      $@ = $old_eval_err;
    }
    # restore prior filehandles and shut down tees
    # _debug( "# restoring filehandles ...\n" );
    _open_std( $stash->{old} );
    _close( $_ ) for values %{$stash->{old}}; # don't leak fds
    # shouldn't need relayering originals, but see rt.perl.org #114404
    _relayer(\*STDOUT, $layers{stdout}) if $do_stdout;
    _relayer(\*STDERR, $layers{stderr}) if $do_stderr;
    _unproxy( %proxy_std );
    # _debug( "# killing tee subprocesses ...\n" ) if $do_tee;
    _kill_tees( $stash ) if $do_tee;
    # return captured output, but shortcut in void context
    # unless we have to echo output to tied/scalar handles;
    my %got;
    if ( $orig_pid == $$ and ( defined wantarray or ($do_tee && keys %localize) ) ) {
      for ( keys %do ) {
        _relayer($stash->{capture}{$_}, $layers{$_});
        $got{$_} = _slurp($_, $stash);
        # _debug("# slurped " . length($got{$_}) . " bytes from $_\n");
      }
      print CT_ORIG_STDOUT $got{stdout}
        if $do_stdout && $do_tee && $localize{stdout};
      print CT_ORIG_STDERR $got{stderr}
        if $do_stderr && $do_tee && $localize{stderr};
    }
    $? = $exit_code;
    $@ = $inner_error if $inner_error;
    die $outer_error if $outer_error;
    # _debug( "# ending _capture_tee with (@_)...\n" );
    return unless defined wantarray;
    my @return;
    push @return, $got{stdout} if $do_stdout;
    push @return, $got{stderr} if $do_stderr && ! $do_merge;
    push @return, @result;
    return wantarray ? @return : $return[0];
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Capture::Tiny - Capture STDOUT and STDERR from Perl, XS or external programs
  
  =head1 VERSION
  
  version 0.44
  
  =head1 SYNOPSIS
  
    use Capture::Tiny ':all';
  
    # capture from external command
  
    ($stdout, $stderr, $exit) = capture {
      system( $cmd, @args );
    };
  
    # capture from arbitrary code (Perl or external)
  
    ($stdout, $stderr, @result) = capture {
      # your code here
    };
  
    # capture partial or merged output
  
    $stdout = capture_stdout { ... };
    $stderr = capture_stderr { ... };
    $merged = capture_merged { ... };
  
    # tee output
  
    ($stdout, $stderr) = tee {
      # your code here
    };
  
    $stdout = tee_stdout { ... };
    $stderr = tee_stderr { ... };
    $merged = tee_merged { ... };
  
  =head1 DESCRIPTION
  
  Capture::Tiny provides a simple, portable way to capture almost anything sent
  to STDOUT or STDERR, regardless of whether it comes from Perl, from XS code or
  from an external program.  Optionally, output can be teed so that it is
  captured while being passed through to the original filehandles.  Yes, it even
  works on Windows (usually).  Stop guessing which of a dozen capturing modules
  to use in any particular situation and just use this one.
  
  =head1 USAGE
  
  The following functions are available.  None are exported by default.
  
  =head2 capture
  
    ($stdout, $stderr, @result) = capture \&code;
    $stdout = capture \&code;
  
  The C<capture> function takes a code reference and returns what is sent to
  STDOUT and STDERR as well as any return values from the code reference.  In
  scalar context, it returns only STDOUT.  If no output was received for a
  filehandle, it returns an empty string for that filehandle.  Regardless of calling
  context, all output is captured -- nothing is passed to the existing filehandles.
  
  It is prototyped to take a subroutine reference as an argument. Thus, it
  can be called in block form:
  
    ($stdout, $stderr) = capture {
      # your code here ...
    };
  
  Note that the coderef is evaluated in list context.  If you wish to force
  scalar context on the return value, you must use the C<scalar> keyword.
  
    ($stdout, $stderr, $count) = capture {
      my @list = qw/one two three/;
      return scalar @list; # $count will be 3
    };
  
  Also note that within the coderef, the C<@_> variable will be empty.  So don't
  use arguments from a surrounding subroutine without copying them to an array
  first:
  
    sub wont_work {
      my ($stdout, $stderr) = capture { do_stuff( @_ ) };    # WRONG
      ...
    }
  
    sub will_work {
      my @args = @_;
      my ($stdout, $stderr) = capture { do_stuff( @args ) }; # RIGHT
      ...
    }
  
  Captures are normally done to an anonymous temporary filehandle.  To
  capture via a named file (e.g. to externally monitor a long-running capture),
  provide custom filehandles as a trailing list of option pairs:
  
    my $out_fh = IO::File->new("out.txt", "w+");
    my $err_fh = IO::File->new("out.txt", "w+");
    capture { ... } stdout => $out_fh, stderr => $err_fh;
  
  The filehandles must be read/write and seekable.  Modifying the files or
  filehandles during a capture operation will give unpredictable results.
  Existing IO layers on them may be changed by the capture.
  
  When called in void context, C<capture> saves memory and time by
  not reading back from the capture handles.
  
  =head2 capture_stdout
  
    ($stdout, @result) = capture_stdout \&code;
    $stdout = capture_stdout \&code;
  
  The C<capture_stdout> function works just like C<capture> except only
  STDOUT is captured.  STDERR is not captured.
  
  =head2 capture_stderr
  
    ($stderr, @result) = capture_stderr \&code;
    $stderr = capture_stderr \&code;
  
  The C<capture_stderr> function works just like C<capture> except only
  STDERR is captured.  STDOUT is not captured.
  
  =head2 capture_merged
  
    ($merged, @result) = capture_merged \&code;
    $merged = capture_merged \&code;
  
  The C<capture_merged> function works just like C<capture> except STDOUT and
  STDERR are merged. (Technically, STDERR is redirected to the same capturing
  handle as STDOUT before executing the function.)
  
  Caution: STDOUT and STDERR output in the merged result are not guaranteed to be
  properly ordered due to buffering.
  
  =head2 tee
  
    ($stdout, $stderr, @result) = tee \&code;
    $stdout = tee \&code;
  
  The C<tee> function works just like C<capture>, except that output is captured
  as well as passed on to the original STDOUT and STDERR.
  
  When called in void context, C<tee> saves memory and time by
  not reading back from the capture handles, except when the
  original STDOUT OR STDERR were tied or opened to a scalar
  handle.
  
  =head2 tee_stdout
  
    ($stdout, @result) = tee_stdout \&code;
    $stdout = tee_stdout \&code;
  
  The C<tee_stdout> function works just like C<tee> except only
  STDOUT is teed.  STDERR is not teed (output goes to STDERR as usual).
  
  =head2 tee_stderr
  
    ($stderr, @result) = tee_stderr \&code;
    $stderr = tee_stderr \&code;
  
  The C<tee_stderr> function works just like C<tee> except only
  STDERR is teed.  STDOUT is not teed (output goes to STDOUT as usual).
  
  =head2 tee_merged
  
    ($merged, @result) = tee_merged \&code;
    $merged = tee_merged \&code;
  
  The C<tee_merged> function works just like C<capture_merged> except that output
  is captured as well as passed on to STDOUT.
  
  Caution: STDOUT and STDERR output in the merged result are not guaranteed to be
  properly ordered due to buffering.
  
  =head1 LIMITATIONS
  
  =head2 Portability
  
  Portability is a goal, not a guarantee.  C<tee> requires fork, except on
  Windows where C<system(1, @cmd)> is used instead.  Not tested on any
  particularly esoteric platforms yet.  See the
  L<CPAN Testers Matrix|http://matrix.cpantesters.org/?dist=Capture-Tiny>
  for test result by platform.
  
  =head2 PerlIO layers
  
  Capture::Tiny does its best to preserve PerlIO layers such as ':utf8' or
  ':crlf' when capturing (only for Perl 5.8.1+) .  Layers should be applied to
  STDOUT or STDERR I<before> the call to C<capture> or C<tee>.  This may not work
  for tied filehandles (see below).
  
  =head2 Modifying filehandles before capturing
  
  Generally speaking, you should do little or no manipulation of the standard IO
  filehandles prior to using Capture::Tiny.  In particular, closing, reopening,
  localizing or tying standard filehandles prior to capture may cause a variety of
  unexpected, undesirable and/or unreliable behaviors, as described below.
  Capture::Tiny does its best to compensate for these situations, but the
  results may not be what you desire.
  
  =head3 Closed filehandles
  
  Capture::Tiny will work even if STDIN, STDOUT or STDERR have been previously
  closed.  However, since they will be reopened to capture or tee output, any
  code within the captured block that depends on finding them closed will, of
  course, not find them to be closed.  If they started closed, Capture::Tiny will
  close them again when the capture block finishes.
  
  Note that this reopening will happen even for STDIN or a filehandle not being
  captured to ensure that the filehandle used for capture is not opened to file
  descriptor 0, as this causes problems on various platforms.
  
  Prior to Perl 5.12, closed STDIN combined with PERL_UNICODE=D leaks filehandles
  and also breaks tee() for undiagnosed reasons.  So don't do that.
  
  =head3 Localized filehandles
  
  If code localizes any of Perl's standard filehandles before capturing, the capture
  will affect the localized filehandles and not the original ones.  External system
  calls are not affected by localizing a filehandle in Perl and will continue
  to send output to the original filehandles (which will thus not be captured).
  
  =head3 Scalar filehandles
  
  If STDOUT or STDERR are reopened to scalar filehandles prior to the call to
  C<capture> or C<tee>, then Capture::Tiny will override the output filehandle for
  the duration of the C<capture> or C<tee> call and then, for C<tee>, send captured
  output to the output filehandle after the capture is complete.  (Requires Perl
  5.8)
  
  Capture::Tiny attempts to preserve the semantics of STDIN opened to a scalar
  reference, but note that external processes will not be able to read from such
  a handle.  Capture::Tiny tries to ensure that external processes will read from
  the null device instead, but this is not guaranteed.
  
  =head3 Tied output filehandles
  
  If STDOUT or STDERR are tied prior to the call to C<capture> or C<tee>, then
  Capture::Tiny will attempt to override the tie for the duration of the
  C<capture> or C<tee> call and then send captured output to the tied filehandle after
  the capture is complete.  (Requires Perl 5.8)
  
  Capture::Tiny may not succeed resending UTF-8 encoded data to a tied
  STDOUT or STDERR filehandle.  Characters may appear as bytes.  If the tied filehandle
  is based on L<Tie::StdHandle>, then Capture::Tiny will attempt to determine
  appropriate layers like C<:utf8> from the underlying filehandle and do the right
  thing.
  
  =head3 Tied input filehandle
  
  Capture::Tiny attempts to preserve the semantics of tied STDIN, but this
  requires Perl 5.8 and is not entirely predictable.  External processes
  will not be able to read from such a handle.
  
  Unless having STDIN tied is crucial, it may be safest to localize STDIN when
  capturing:
  
    my ($out, $err) = do { local *STDIN; capture { ... } };
  
  =head2 Modifying filehandles during a capture
  
  Attempting to modify STDIN, STDOUT or STDERR I<during> C<capture> or C<tee> is
  almost certainly going to cause problems.  Don't do that.
  
  =head3 Forking inside a capture
  
  Forks aren't portable.  The behavior of filehandles during a fork is even
  less so.  If Capture::Tiny detects that a fork has occurred within a
  capture, it will shortcut in the child process and return empty strings for
  captures.  Other problems may occur in the child or parent, as well.
  Forking in a capture block is not recommended.
  
  =head3 Dropping privileges during a capture
  
  If you drop privileges during a capture, temporary files created to
  facilitate the capture may not be cleaned up afterwards.
  
  =head2 No support for Perl 5.8.0
  
  It's just too buggy when it comes to layers and UTF-8.  Perl 5.8.1 or later
  is recommended.
  
  =head2 Limited support for Perl 5.6
  
  Perl 5.6 predates PerlIO.  UTF-8 data may not be captured correctly.
  
  =head1 ENVIRONMENT
  
  =head2 PERL_CAPTURE_TINY_TIMEOUT
  
  Capture::Tiny uses subprocesses internally for C<tee>.  By default,
  Capture::Tiny will timeout with an error if such subprocesses are not ready to
  receive data within 30 seconds (or whatever is the value of
  C<$Capture::Tiny::TIMEOUT>).  An alternate timeout may be specified by setting
  the C<PERL_CAPTURE_TINY_TIMEOUT> environment variable.  Setting it to zero will
  disable timeouts.  B<NOTE>, this does not timeout the code reference being
  captured -- this only prevents Capture::Tiny itself from hanging your process
  waiting for its child processes to be ready to proceed.
  
  =head1 SEE ALSO
  
  This module was inspired by L<IO::CaptureOutput>, which provides
  similar functionality without the ability to tee output and with more
  complicated code and API.  L<IO::CaptureOutput> does not handle layers
  or most of the unusual cases described in the L</Limitations> section and
  I no longer recommend it.
  
  There are many other CPAN modules that provide some sort of output capture,
  albeit with various limitations that make them appropriate only in particular
  circumstances.  I'm probably missing some.  The long list is provided to show
  why I felt Capture::Tiny was necessary.
  
  =over 4
  
  =item *
  
  L<IO::Capture>
  
  =item *
  
  L<IO::Capture::Extended>
  
  =item *
  
  L<IO::CaptureOutput>
  
  =item *
  
  L<IPC::Capture>
  
  =item *
  
  L<IPC::Cmd>
  
  =item *
  
  L<IPC::Open2>
  
  =item *
  
  L<IPC::Open3>
  
  =item *
  
  L<IPC::Open3::Simple>
  
  =item *
  
  L<IPC::Open3::Utils>
  
  =item *
  
  L<IPC::Run>
  
  =item *
  
  L<IPC::Run::SafeHandles>
  
  =item *
  
  L<IPC::Run::Simple>
  
  =item *
  
  L<IPC::Run3>
  
  =item *
  
  L<IPC::System::Simple>
  
  =item *
  
  L<Tee>
  
  =item *
  
  L<IO::Tee>
  
  =item *
  
  L<File::Tee>
  
  =item *
  
  L<Filter::Handle>
  
  =item *
  
  L<Tie::STDERR>
  
  =item *
  
  L<Tie::STDOUT>
  
  =item *
  
  L<Test::Output>
  
  =back
  
  =for :stopwords cpan testmatrix url annocpan anno bugtracker rt cpants kwalitee diff irc mailto metadata placeholders metacpan
  
  =head1 SUPPORT
  
  =head2 Bugs / Feature Requests
  
  Please report any bugs or feature requests through the issue tracker
  at L<https://github.com/dagolden/Capture-Tiny/issues>.
  You will be notified automatically of any progress on your issue.
  
  =head2 Source Code
  
  This is open source software.  The code repository is available for
  public review and contribution under the terms of the license.
  
  L<https://github.com/dagolden/Capture-Tiny>
  
    git clone https://github.com/dagolden/Capture-Tiny.git
  
  =head1 AUTHOR
  
  David Golden <dagolden@cpan.org>
  
  =head1 CONTRIBUTORS
  
  =for stopwords Dagfinn Ilmari Mannsåker David E. Wheeler fecundf Peter Rabbitson
  
  =over 4
  
  =item *
  
  Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
  
  =item *
  
  David E. Wheeler <david@justatheory.com>
  
  =item *
  
  fecundf <not.com+github@gmail.com>
  
  =item *
  
  Peter Rabbitson <ribasushi@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is Copyright (c) 2009 by David Golden.
  
  This is free software, licensed under:
  
    The Apache License, Version 2.0, January 2004
  
  =cut
CAPTURE_TINY

    $main::fatpacked{"Class/Data/Inheritable.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'CLASS_DATA_INHERITABLE';
  package Class::Data::Inheritable;
  
  use strict qw(vars subs);
  use vars qw($VERSION);
  $VERSION = '0.08';
  
  sub mk_classdata {
      my ($declaredclass, $attribute, $data) = @_;
  
      if( ref $declaredclass ) {
          require Carp;
          Carp::croak("mk_classdata() is a class method, not an object method");
      }
  
      my $accessor = sub {
          my $wantclass = ref($_[0]) || $_[0];
  
          return $wantclass->mk_classdata($attribute)->(@_)
            if @_>1 && $wantclass ne $declaredclass;
  
          $data = $_[1] if @_>1;
          return $data;
      };
  
      my $alias = "_${attribute}_accessor";
      *{$declaredclass.'::'.$attribute} = $accessor;
      *{$declaredclass.'::'.$alias}     = $accessor;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Class::Data::Inheritable - Inheritable, overridable class data
  
  =head1 SYNOPSIS
  
    package Stuff;
    use base qw(Class::Data::Inheritable);
  
    # Set up DataFile as inheritable class data.
    Stuff->mk_classdata('DataFile');
  
    # Declare the location of the data file for this class.
    Stuff->DataFile('/etc/stuff/data');
  
    # Or, all in one shot:
    Stuff->mk_classdata(DataFile => '/etc/stuff/data');
  
  =head1 DESCRIPTION
  
  Class::Data::Inheritable is for creating accessor/mutators to class
  data.  That is, if you want to store something about your class as a
  whole (instead of about a single object).  This data is then inherited
  by your subclasses and can be overriden.
  
  For example:
  
    Pere::Ubu->mk_classdata('Suitcase');
  
  will generate the method Suitcase() in the class Pere::Ubu.
  
  This new method can be used to get and set a piece of class data.
  
    Pere::Ubu->Suitcase('Red');
    $suitcase = Pere::Ubu->Suitcase;
  
  The interesting part happens when a class inherits from Pere::Ubu:
  
    package Raygun;
    use base qw(Pere::Ubu);
    
    # Raygun's suitcase is Red.
    $suitcase = Raygun->Suitcase;
  
  Raygun inherits its Suitcase class data from Pere::Ubu.
  
  Inheritance of class data works analogous to method inheritance.  As
  long as Raygun does not "override" its inherited class data (by using
  Suitcase() to set a new value) it will continue to use whatever is set
  in Pere::Ubu and inherit further changes:
  
    # Both Raygun's and Pere::Ubu's suitcases are now Blue
    Pere::Ubu->Suitcase('Blue');
  
  However, should Raygun decide to set its own Suitcase() it has now
  "overridden" Pere::Ubu and is on its own, just like if it had
  overriden a method:
  
    # Raygun has an orange suitcase, Pere::Ubu's is still Blue.
    Raygun->Suitcase('Orange');
  
  Now that Raygun has overridden Pere::Ubu futher changes by Pere::Ubu
  no longer effect Raygun.
  
    # Raygun still has an orange suitcase, but Pere::Ubu is using Samsonite.
    Pere::Ubu->Suitcase('Samsonite');
  
  =head1 Methods
  
  =head2 mk_classdata
  
    Class->mk_classdata($data_accessor_name);
    Class->mk_classdata($data_accessor_name => $value);
  
  This is a class method used to declare new class data accessors.
  A new accessor will be created in the Class using the name from
  $data_accessor_name, and optionally initially setting it to the given
  value.
  
  To facilitate overriding, mk_classdata creates an alias to the
  accessor, _field_accessor().  So Suitcase() would have an alias
  _Suitcase_accessor() that does the exact same thing as Suitcase().
  This is useful if you want to alter the behavior of a single accessor
  yet still get the benefits of inheritable class data.  For example.
  
    sub Suitcase {
        my($self) = shift;
        warn "Fashion tragedy" if @_ and $_[0] eq 'Plaid';
  
        $self->_Suitcase_accessor(@_);
    }
  
  =head1 AUTHOR
  
  Original code by Damian Conway.
  
  Maintained by Michael G Schwern until September 2005.
  
  Now maintained by Tony Bowden.
  
  =head1 BUGS and QUERIES
  
  Please direct all correspondence regarding this module to:
    bug-Class-Data-Inheritable@rt.cpan.org
  
  =head1 COPYRIGHT and LICENSE
  
  Copyright (c) 2000-2005, Damian Conway and Michael G Schwern. 
  All Rights Reserved.  
  
  This module is free software. It may be used, redistributed and/or
  modified under the same terms as Perl itself.
  
  =head1 SEE ALSO
  
  L<perltooc> has a very elaborate discussion of class data in Perl.
  
CLASS_DATA_INHERITABLE

    $main::fatpacked{"Class/Inspector.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'CLASS_INSPECTOR';
  package Class::Inspector;
  
  =pod
  
  =head1 NAME
  
  Class::Inspector - Get information about a class and its structure
  
  =head1 SYNOPSIS
  
    use Class::Inspector;
    
    # Is a class installed and/or loaded
    Class::Inspector->installed( 'Foo::Class' );
    Class::Inspector->loaded( 'Foo::Class' );
    
    # Filename related information
    Class::Inspector->filename( 'Foo::Class' );
    Class::Inspector->resolved_filename( 'Foo::Class' );
    
    # Get subroutine related information
    Class::Inspector->functions( 'Foo::Class' );
    Class::Inspector->function_refs( 'Foo::Class' );
    Class::Inspector->function_exists( 'Foo::Class', 'bar' );
    Class::Inspector->methods( 'Foo::Class', 'full', 'public' );
    
    # Find all loaded subclasses or something
    Class::Inspector->subclasses( 'Foo::Class' );
  
  =head1 DESCRIPTION
  
  Class::Inspector allows you to get information about a loaded class. Most or
  all of this information can be found in other ways, but they aren't always
  very friendly, and usually involve a relatively high level of Perl wizardry,
  or strange and unusual looking code. Class::Inspector attempts to provide 
  an easier, more friendly interface to this information.
  
  =head1 METHODS
  
  =cut
  
  use 5.006;
  # We don't want to use strict refs anywhere in this module, since we do a
  # lot of things in here that aren't strict refs friendly.
  use strict qw{vars subs};
  use warnings;
  use File::Spec ();
  
  # Globals
  use vars qw{$VERSION $RE_IDENTIFIER $RE_CLASS $UNIX};
  BEGIN {
  	$VERSION = '1.28';
  
  	# If Unicode is available, enable it so that the
  	# pattern matches below match unicode method names.
  	# We can safely ignore any failure here.
  	SCOPE: {
  		local $@;
  		eval "require utf8; utf8->import";
  	}
  
  	# Predefine some regexs
  	$RE_IDENTIFIER = qr/\A[^\W\d]\w*\z/s;
  	$RE_CLASS      = qr/\A[^\W\d]\w*(?:(?:\'|::)\w+)*\z/s;
  
  	# Are we on something Unix-like?
  	$UNIX  = !! ( $File::Spec::ISA[0] eq 'File::Spec::Unix'  );
  }
  
  
  
  
  
  #####################################################################
  # Basic Methods
  
  =pod
  
  =head2 installed $class
  
  The C<installed> static method tries to determine if a class is installed
  on the machine, or at least available to Perl. It does this by wrapping
  around C<resolved_filename>.
  
  Returns true if installed/available, false if the class is not installed,
  or C<undef> if the class name is invalid.
  
  =cut
  
  sub installed {
  	my $class = shift;
  	!! ($class->loaded_filename($_[0]) or $class->resolved_filename($_[0]));
  }
  
  =pod
  
  =head2 loaded $class
  
  The C<loaded> static method tries to determine if a class is loaded by
  looking for symbol table entries.
  
  This method it uses to determine this will work even if the class does not
  have its own file, but is contained inside a single file with multiple
  classes in it. Even in the case of some sort of run-time loading class
  being used, these typically leave some trace in the symbol table, so an
  L<Autoload> or L<Class::Autouse>-based class should correctly appear
  loaded.
  
  Returns true if the class is loaded, false if not, or C<undef> if the
  class name is invalid.
  
  =cut
  
  sub loaded {
  	my $class = shift;
  	my $name  = $class->_class(shift) or return undef;
  	$class->_loaded($name);
  }
  
  sub _loaded {
  	my $class = shift;
  	my $name  = shift;
  
  	# Handle by far the two most common cases
  	# This is very fast and handles 99% of cases.
  	return 1 if defined ${"${name}::VERSION"};
  	return 1 if @{"${name}::ISA"};
  
  	# Are there any symbol table entries other than other namespaces
  	foreach ( keys %{"${name}::"} ) {
  		next if substr($_, -2, 2) eq '::';
  		return 1 if defined &{"${name}::$_"};
  	}
  
  	# No functions, and it doesn't have a version, and isn't anything.
  	# As an absolute last resort, check for an entry in %INC
  	my $filename = $class->_inc_filename($name);
  	return 1 if defined $INC{$filename};
  
  	'';
  }
  
  =pod
  
  =head2 filename $class
  
  For a given class, returns the base filename for the class. This will NOT
  be a fully resolved filename, just the part of the filename BELOW the
  C<@INC> entry.
  
    print Class->filename( 'Foo::Bar' );
    > Foo/Bar.pm
  
  This filename will be returned with the right seperator for the local
  platform, and should work on all platforms.
  
  Returns the filename on success or C<undef> if the class name is invalid.
  
  =cut
  
  sub filename {
  	my $class = shift;
  	my $name  = $class->_class(shift) or return undef;
  	File::Spec->catfile( split /(?:\'|::)/, $name ) . '.pm';
  }
  
  =pod
  
  =head2 resolved_filename $class, @try_first
  
  For a given class, the C<resolved_filename> static method returns the fully
  resolved filename for a class. That is, the file that the class would be
  loaded from.
  
  This is not nescesarily the file that the class WAS loaded from, as the
  value returned is determined each time it runs, and the C<@INC> include
  path may change.
  
  To get the actual file for a loaded class, see the C<loaded_filename>
  method.
  
  Returns the filename for the class, or C<undef> if the class name is
  invalid.
  
  =cut
  
  sub resolved_filename {
  	my $class     = shift;
  	my $filename  = $class->_inc_filename(shift) or return undef;
  	my @try_first = @_;
  
  	# Look through the @INC path to find the file
  	foreach ( @try_first, @INC ) {
  		my $full = "$_/$filename";
  		next unless -e $full;
  		return $UNIX ? $full : $class->_inc_to_local($full);
  	}
  
  	# File not found
  	'';
  }
  
  =pod
  
  =head2 loaded_filename $class
  
  For a given loaded class, the C<loaded_filename> static method determines
  (via the C<%INC> hash) the name of the file that it was originally loaded
  from.
  
  Returns a resolved file path, or false if the class did not have it's own
  file.
  
  =cut
  
  sub loaded_filename {
  	my $class    = shift;
  	my $filename = $class->_inc_filename(shift);
  	$UNIX ? $INC{$filename} : $class->_inc_to_local($INC{$filename});
  }
  
  
  
  
  
  #####################################################################
  # Sub Related Methods
  
  =pod
  
  =head2 functions $class
  
  For a loaded class, the C<functions> static method returns a list of the
  names of all the functions in the classes immediate namespace.
  
  Note that this is not the METHODS of the class, just the functions.
  
  Returns a reference to an array of the function names on success, or C<undef>
  if the class name is invalid or the class is not loaded.
  
  =cut
  
  sub functions {
  	my $class = shift;
  	my $name  = $class->_class(shift) or return undef;
  	return undef unless $class->loaded( $name );
  
  	# Get all the CODE symbol table entries
  	my @functions = sort grep { /$RE_IDENTIFIER/o }
  		grep { defined &{"${name}::$_"} }
  		keys %{"${name}::"};
  	\@functions;
  }
  
  =pod
  
  =head2 function_refs $class
  
  For a loaded class, the C<function_refs> static method returns references to
  all the functions in the classes immediate namespace.
  
  Note that this is not the METHODS of the class, just the functions.
  
  Returns a reference to an array of C<CODE> refs of the functions on
  success, or C<undef> if the class is not loaded.
  
  =cut
  
  sub function_refs {
  	my $class = shift;
  	my $name  = $class->_class(shift) or return undef;
  	return undef unless $class->loaded( $name );
  
  	# Get all the CODE symbol table entries, but return
  	# the actual CODE refs this time.
  	my @functions = map { \&{"${name}::$_"} }
  		sort grep { /$RE_IDENTIFIER/o }
  		grep { defined &{"${name}::$_"} }
  		keys %{"${name}::"};
  	\@functions;
  }
  
  =pod
  
  =head2 function_exists $class, $function
  
  Given a class and function name the C<function_exists> static method will
  check to see if the function exists in the class.
  
  Note that this is as a function, not as a method. To see if a method
  exists for a class, use the C<can> method for any class or object.
  
  Returns true if the function exists, false if not, or C<undef> if the
  class or function name are invalid, or the class is not loaded.
  
  =cut
  
  sub function_exists {
  	my $class    = shift;
  	my $name     = $class->_class( shift ) or return undef;
  	my $function = shift or return undef;
  
  	# Only works if the class is loaded
  	return undef unless $class->loaded( $name );
  
  	# Does the GLOB exist and its CODE part exist
  	defined &{"${name}::$function"};
  }
  
  =pod
  
  =head2 methods $class, @options
  
  For a given class name, the C<methods> static method will returns ALL
  the methods available to that class. This includes all methods available
  from every class up the class' C<@ISA> tree.
  
  Returns a reference to an array of the names of all the available methods
  on success, or C<undef> if the class name is invalid or the class is not
  loaded.
  
  A number of options are available to the C<methods> method that will alter
  the results returned. These should be listed after the class name, in any
  order.
  
    # Only get public methods
    my $method = Class::Inspector->methods( 'My::Class', 'public' );
  
  =over 4
  
  =item public
  
  The C<public> option will return only 'public' methods, as defined by the Perl
  convention of prepending an underscore to any 'private' methods. The C<public> 
  option will effectively remove any methods that start with an underscore.
  
  =item private
  
  The C<private> options will return only 'private' methods, as defined by the
  Perl convention of prepending an underscore to an private methods. The
  C<private> option will effectively remove an method that do not start with an
  underscore.
  
  B<Note: The C<public> and C<private> options are mutually exclusive>
  
  =item full
  
  C<methods> normally returns just the method name. Supplying the C<full> option
  will cause the methods to be returned as the full names. That is, instead of
  returning C<[ 'method1', 'method2', 'method3' ]>, you would instead get
  C<[ 'Class::method1', 'AnotherClass::method2', 'Class::method3' ]>.
  
  =item expanded
  
  The C<expanded> option will cause a lot more information about method to be 
  returned. Instead of just the method name, you will instead get an array
  reference containing the method name as a single combined name, ala C<full>,
  the seperate class and method, and a CODE ref to the actual function ( if
  available ). Please note that the function reference is not guarenteed to 
  be available. C<Class::Inspector> is intended at some later time, work 
  with modules that have some some of common run-time loader in place ( e.g
  C<Autoloader> or C<Class::Autouse> for example.
  
  The response from C<methods( 'Class', 'expanded' )> would look something like
  the following.
  
    [
      [ 'Class::method1',   'Class',   'method1', \&Class::method1   ],
      [ 'Another::method2', 'Another', 'method2', \&Another::method2 ],
      [ 'Foo::bar',         'Foo',     'bar',     \&Foo::bar         ],
    ]
  
  =back
  
  =cut
  
  sub methods {
  	my $class     = shift;
  	my $name      = $class->_class( shift ) or return undef;
  	my @arguments = map { lc $_ } @_;
  
  	# Process the arguments to determine the options
  	my %options = ();
  	foreach ( @arguments ) {
  		if ( $_ eq 'public' ) {
  			# Only get public methods
  			return undef if $options{private};
  			$options{public} = 1;
  
  		} elsif ( $_ eq 'private' ) {
  			# Only get private methods
  			return undef if $options{public};
  			$options{private} = 1;
  
  		} elsif ( $_ eq 'full' ) {
  			# Return the full method name
  			return undef if $options{expanded};
  			$options{full} = 1;
  
  		} elsif ( $_ eq 'expanded' ) {
  			# Returns class, method and function ref
  			return undef if $options{full};
  			$options{expanded} = 1;
  
  		} else {
  			# Unknown or unsupported options
  			return undef;
  		}
  	}
  
  	# Only works if the class is loaded
  	return undef unless $class->loaded( $name );
  
  	# Get the super path ( not including UNIVERSAL )
  	# Rather than using Class::ISA, we'll use an inlined version
  	# that implements the same basic algorithm.
  	my @path  = ();
  	my @queue = ( $name );
  	my %seen  = ( $name => 1 );
  	while ( my $cl = shift @queue ) {
  		push @path, $cl;
  		unshift @queue, grep { ! $seen{$_}++ }
  			map { s/^::/main::/; s/\'/::/g; $_ }
  			( @{"${cl}::ISA"} );
  	}
  
  	# Find and merge the function names across the entire super path.
  	# Sort alphabetically and return.
  	my %methods = ();
  	foreach my $namespace ( @path ) {
  		my @functions = grep { ! $methods{$_} }
  			grep { /$RE_IDENTIFIER/o }
  			grep { defined &{"${namespace}::$_"} } 
  			keys %{"${namespace}::"};
  		foreach ( @functions ) {
  			$methods{$_} = $namespace;
  		}
  	}
  
  	# Filter to public or private methods if needed
  	my @methodlist = sort keys %methods;
  	@methodlist = grep { ! /^\_/ } @methodlist if $options{public};
  	@methodlist = grep {   /^\_/ } @methodlist if $options{private};
  
  	# Return in the correct format
  	@methodlist = map { "$methods{$_}::$_" } @methodlist if $options{full};
  	@methodlist = map { 
  		[ "$methods{$_}::$_", $methods{$_}, $_, \&{"$methods{$_}::$_"} ] 
  		} @methodlist if $options{expanded};
  
  	\@methodlist;
  }
  
  
  
  
  
  #####################################################################
  # Search Methods
  
  =pod
  
  =head2 subclasses $class
  
  The C<subclasses> static method will search then entire namespace (and thus
  B<all> currently loaded classes) to find all classes that are subclasses
  of the class provided as a the parameter.
  
  The actual test will be done by calling C<isa> on the class as a static
  method. (i.e. C<My::Class-E<gt>isa($class)>.
  
  Returns a reference to a list of the loaded classes that match the class
  provided, or false is none match, or C<undef> if the class name provided
  is invalid.
  
  =cut
  
  sub subclasses {
  	my $class = shift;
  	my $name  = $class->_class( shift ) or return undef;
  
  	# Prepare the search queue
  	my @found = ();
  	my @queue = grep { $_ ne 'main' } $class->_subnames('');
  	while ( @queue ) {
  		my $c = shift(@queue); # c for class
  		if ( $class->_loaded($c) ) {
  			# At least one person has managed to misengineer
  			# a situation in which ->isa could die, even if the
  			# class is real. Trap these cases and just skip
  			# over that (bizarre) class. That would at limit
  			# problems with finding subclasses to only the
  			# modules that have broken ->isa implementation.
  			local $@;
  			eval {
  				if ( $c->isa($name) ) {
  					# Add to the found list, but don't add the class itself
  					push @found, $c unless $c eq $name;
  				}
  			};
  		}
  
  		# Add any child namespaces to the head of the queue.
  		# This keeps the queue length shorted, and allows us
  		# not to have to do another sort at the end.
  		unshift @queue, map { "${c}::$_" } $class->_subnames($c);
  	}
  
  	@found ? \@found : '';
  }
  
  sub _subnames {
  	my ($class, $name) = @_;
  	return sort
  		grep {
  			substr($_, -2, 2, '') eq '::'
  			and
  			/$RE_IDENTIFIER/o
  		}
  		keys %{"${name}::"};
  }
  
  
  
  
  
  #####################################################################
  # Children Related Methods
  
  # These can go undocumented for now, until I decide if its best to
  # just search the children in namespace only, or if I should do it via
  # the file system.
  
  # Find all the loaded classes below us
  sub children {
  	my $class = shift;
  	my $name  = $class->_class(shift) or return ();
  
  	# Find all the Foo:: elements in our symbol table
  	no strict 'refs';
  	map { "${name}::$_" } sort grep { s/::$// } keys %{"${name}::"};
  }
  
  # As above, but recursively
  sub recursive_children {
  	my $class    = shift;
  	my $name     = $class->_class(shift) or return ();
  	my @children = ( $name );
  
  	# Do the search using a nicer, more memory efficient 
  	# variant of actual recursion.
  	my $i = 0;
  	no strict 'refs';
  	while ( my $namespace = $children[$i++] ) {
  		push @children, map { "${namespace}::$_" }
  			grep { ! /^::/ } # Ignore things like ::ISA::CACHE::
  			grep { s/::$// }
  			keys %{"${namespace}::"};
  	}
  
  	sort @children;
  }
  
  
  
  
  
  #####################################################################
  # Private Methods
  
  # Checks and expands ( if needed ) a class name
  sub _class {
  	my $class = shift;
  	my $name  = shift or return '';
  
  	# Handle main shorthand
  	return 'main' if $name eq '::';
  	$name =~ s/\A::/main::/;
  
  	# Check the class name is valid
  	$name =~ /$RE_CLASS/o ? $name : '';
  }
  
  # Create a INC-specific filename, which always uses '/'
  # regardless of platform.
  sub _inc_filename {
  	my $class = shift;
  	my $name  = $class->_class(shift) or return undef;
  	join( '/', split /(?:\'|::)/, $name ) . '.pm';
  }
  
  # Convert INC-specific file name to local file name
  sub _inc_to_local {
  	# Shortcut in the Unix case
  	return $_[1] if $UNIX;
  
  	# On other places, we have to deal with an unusual path that might look
  	# like C:/foo/bar.pm which doesn't fit ANY normal pattern.
  	# Putting it through splitpath/dir and back again seems to normalise
  	# it to a reasonable amount.
  	my $class              = shift;
  	my $inc_name           = shift or return undef;
  	my ($vol, $dir, $file) = File::Spec->splitpath( $inc_name );
  	$dir = File::Spec->catdir( File::Spec->splitdir( $dir || "" ) );
  	File::Spec->catpath( $vol, $dir, $file || "" );
  }
  
  1;
  
  =pod
  
  =head1 SUPPORT
  
  Bugs should be reported via the CPAN bug tracker
  
  L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Class-Inspector>
  
  For other issues, or commercial enhancement or support, contact the author.
  
  =head1 AUTHOR
  
  Adam Kennedy E<lt>adamk@cpan.orgE<gt>
  
  =head1 SEE ALSO
  
  L<http://ali.as/>, L<Class::Handle>
  
  =head1 COPYRIGHT
  
  Copyright 2002 - 2012 Adam Kennedy.
  
  This program is free software; you can redistribute
  it and/or modify it under the same terms as Perl itself.
  
  The full text of the license can be found in the
  LICENSE file included with this module.
  
  =cut
CLASS_INSPECTOR

    $main::fatpacked{"Class/Inspector/Functions.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'CLASS_INSPECTOR_FUNCTIONS';
  package Class::Inspector::Functions;
  
  use 5.006;
  use strict;
  use warnings;
  use Exporter         ();
  use Class::Inspector ();
  
  use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS $VERSION);
  BEGIN {
  	$VERSION = '1.28';
  	@ISA     = 'Exporter';
  
  
  	@EXPORT = qw(
  		installed
  		loaded
  
  		filename
  		functions
  		methods
  
  		subclasses
  	);
  
  	@EXPORT_OK = qw(
  		resolved_filename
  		loaded_filename
  
  		function_refs
  		function_exists
  	);
  		#children
  		#recursive_children
  
  	%EXPORT_TAGS = ( ALL => [ @EXPORT_OK, @EXPORT ] );
  
  	foreach my $meth (@EXPORT, @EXPORT_OK) {
  	    my $sub = Class::Inspector->can($meth);
  	    no strict 'refs';
  	    *{$meth} = sub {&$sub('Class::Inspector', @_)};
  	}
  
  }
  
  1;
  
  __END__
  
  =pod
  
  =head1 NAME
  
  Class::Inspector::Functions - Get information about a class and its structure
  
  =head1 SYNOPSIS
  
    use Class::Inspector::Functions;
    # Class::Inspector provides a non-polluting,
    # method based interface!
    
    # Is a class installed and/or loaded
    installed( 'Foo::Class' );
    loaded( 'Foo::Class' );
    
    # Filename related information
    filename( 'Foo::Class' );
    resolved_filename( 'Foo::Class' );
    
    # Get subroutine related information
    functions( 'Foo::Class' );
    function_refs( 'Foo::Class' );
    function_exists( 'Foo::Class', 'bar' );
    methods( 'Foo::Class', 'full', 'public' );
    
    # Find all loaded subclasses or something
    subclasses( 'Foo::Class' );
  
  =head1 DESCRIPTION
  
  Class::Inspector::Functions is a function based interface of
  L<Class::Inspector>. For a thorough documentation of the available
  functions, please check the manual for the main module.
  
  =head2 Exports
  
  The following functions are exported by default.
  
    installed
    loaded
    filename
    functions
    methods
    subclasses
  
  The following functions are exported only by request.
  
    resolved_filename
    loaded_filename
    function_refs
    function_exists
  
  All the functions may be imported using the C<:ALL> tag.
  
  =head1 SUPPORT
  
  Bugs should be reported via the CPAN bug tracker
  
  L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Class-Inspector>
  
  For other issues, or commercial enhancement or support, contact the author.
  
  =head1 AUTHOR
  
  Adam Kennedy E<lt>adamk@cpan.orgE<gt>
  
  Steffen Mueller E<lt>smueller@cpan.orgE<gt>
  
  =head1 SEE ALSO
  
  L<http://ali.as/>, L<Class::Handle>
  
  =head1 COPYRIGHT
  
  Copyright 2002 - 2012 Adam Kennedy.
  
  Class::Inspector::Functions copyright 2008 - 2009 Steffen Mueller.
  
  This program is free software; you can redistribute
  it and/or modify it under the same terms as Perl itself.
  
  The full text of the license can be found in the
  LICENSE file included with this module.
  
  =cut
CLASS_INSPECTOR_FUNCTIONS

    $main::fatpacked{"Class/Method/Modifiers.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'CLASS_METHOD_MODIFIERS';
  use strict;
  use warnings;
  package Class::Method::Modifiers; # git description: v2.11-20-g6902f76
  # ABSTRACT: Provides Moose-like method modifiers
  # KEYWORDS: method wrap modification patch
  # vim: set ts=8 sts=4 sw=4 tw=115 et :
  
  our $VERSION = '2.12';
  
  use base 'Exporter';
  
  our @EXPORT = qw(before after around);
  our @EXPORT_OK = (@EXPORT, qw(fresh install_modifier));
  our %EXPORT_TAGS = (
      moose => [qw(before after around)],
      all   => \@EXPORT_OK,
  );
  
  BEGIN {
    *_HAS_READONLY = $] >= 5.008 ? sub(){1} : sub(){0};
  }
  
  our %MODIFIER_CACHE;
  
  # for backward compatibility
  sub _install_modifier; # -w
  *_install_modifier = \&install_modifier;
  
  sub install_modifier {
      my $into  = shift;
      my $type  = shift;
      my $code  = pop;
      my @names = @_;
  
      @names = @{ $names[0] } if ref($names[0]) eq 'ARRAY';
  
      return _fresh($into, $code, @names) if $type eq 'fresh';
  
      for my $name (@names) {
          my $hit = $into->can($name) or do {
              require Carp;
              Carp::confess("The method '$name' is not found in the inheritance hierarchy for class $into");
          };
  
          my $qualified = $into.'::'.$name;
          my $cache = $MODIFIER_CACHE{$into}{$name} ||= {
              before => [],
              after  => [],
              around => [],
          };
  
          # this must be the first modifier we're installing
          if (!exists($cache->{"orig"})) {
              no strict 'refs';
  
              # grab the original method (or undef if the method is inherited)
              $cache->{"orig"} = *{$qualified}{CODE};
  
              # the "innermost" method, the one that "around" will ultimately wrap
              $cache->{"wrapped"} = $cache->{"orig"} || $hit; #sub {
              #    # we can't cache this, because new methods or modifiers may be
              #    # added between now and when this method is called
              #    for my $package (@{ mro::get_linear_isa($into) }) {
              #        next if $package eq $into;
              #        my $code = *{$package.'::'.$name}{CODE};
              #        goto $code if $code;
              #    }
              #    require Carp;
              #    Carp::confess("$qualified\::$name disappeared?");
              #};
          }
  
          # keep these lists in the order the modifiers are called
          if ($type eq 'after') {
              push @{ $cache->{$type} }, $code;
          }
          else {
              unshift @{ $cache->{$type} }, $code;
          }
  
          # wrap the method with another layer of around. much simpler than
          # the Moose equivalent. :)
          if ($type eq 'around') {
              my $method = $cache->{wrapped};
              my $attrs = _sub_attrs($code);
              # a bare "sub :lvalue {...}" will be parsed as a label and an
              # indirect method call. force it to be treated as an expression
              # using +
              $cache->{wrapped} = eval "package $into; +sub $attrs { \$code->(\$method, \@_); };";
          }
  
          # install our new method which dispatches the modifiers, but only
          # if a new type was added
          if (@{ $cache->{$type} } == 1) {
  
              # avoid these hash lookups every method invocation
              my $before  = $cache->{"before"};
              my $after   = $cache->{"after"};
  
              # this is a coderef that changes every new "around". so we need
              # to take a reference to it. better a deref than a hash lookup
              my $wrapped = \$cache->{"wrapped"};
  
              my $attrs = _sub_attrs($cache->{wrapped});
  
              my $generated = "package $into;\n";
              $generated .= "sub $name $attrs {";
  
              # before is easy, it doesn't affect the return value(s)
              if (@$before) {
                  $generated .= '
                      for my $method (@$before) {
                          $method->(@_);
                      }
                  ';
              }
  
              if (@$after) {
                  $generated .= '
                      my $ret;
                      if (wantarray) {
                          $ret = [$$wrapped->(@_)];
                          '.(_HAS_READONLY ? 'Internals::SvREADONLY(@$ret, 1);' : '').'
                      }
                      elsif (defined wantarray) {
                          $ret = \($$wrapped->(@_));
                      }
                      else {
                          $$wrapped->(@_);
                      }
  
                      for my $method (@$after) {
                          $method->(@_);
                      }
  
                      wantarray ? @$ret : $ret ? $$ret : ();
                  '
              }
              else {
                  $generated .= '$$wrapped->(@_);';
              }
  
              $generated .= '}';
  
              no strict 'refs';
              no warnings 'redefine';
              no warnings 'closure';
              eval $generated;
          };
      }
  }
  
  sub before {
      _install_modifier(scalar(caller), 'before', @_);
  }
  
  sub after {
      _install_modifier(scalar(caller), 'after', @_);
  }
  
  sub around {
      _install_modifier(scalar(caller), 'around', @_);
  }
  
  sub fresh {
      my $code = pop;
      my @names = @_;
  
      @names = @{ $names[0] } if ref($names[0]) eq 'ARRAY';
  
      _fresh(scalar(caller), $code, @names);
  }
  
  sub _fresh {
      my ($into, $code, @names) = @_;
  
      for my $name (@names) {
          if ($name !~ /\A [a-zA-Z_] [a-zA-Z0-9_]* \z/xms) {
              require Carp;
              Carp::confess("Invalid method name '$name'");
          }
          if ($into->can($name)) {
              require Carp;
              Carp::confess("Class $into already has a method named '$name'");
          }
  
          # We need to make sure that the installed method has its CvNAME in
          # the appropriate package; otherwise, it would be subject to
          # deletion if callers use namespace::autoclean.  If $code was
          # compiled in the target package, we can just install it directly;
          # otherwise, we'll need a different approach.  Using Sub::Name would
          # be fine in all cases, at the cost of introducing a dependency on
          # an XS-using, non-core module.  So instead we'll use string-eval to
          # create a new subroutine that wraps $code.
          if (_is_in_package($code, $into)) {
              no strict 'refs';
              *{"$into\::$name"} = $code;
          }
          else {
              no warnings 'closure'; # for 5.8.x
              my $attrs = _sub_attrs($code);
              eval "package $into; sub $name $attrs { \$code->(\@_) }";
          }
      }
  }
  
  sub _sub_attrs {
      my ($coderef) = @_;
      local *_sub = $coderef;
      local $@;
      (eval 'sub { _sub = 1 }') ? ':lvalue' : '';
  }
  
  sub _is_in_package {
      my ($coderef, $package) = @_;
      require B;
      my $cv = B::svref_2object($coderef);
      return $cv->GV->STASH->NAME eq $package;
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Class::Method::Modifiers - Provides Moose-like method modifiers
  
  =head1 VERSION
  
  version 2.12
  
  =head1 SYNOPSIS
  
      package Child;
      use parent 'Parent';
      use Class::Method::Modifiers;
  
      sub new_method { }
  
      before 'old_method' => sub {
          carp "old_method is deprecated, use new_method";
      };
  
      around 'other_method' => sub {
          my $orig = shift;
          my $ret = $orig->(@_);
          return $ret =~ /\d/ ? $ret : lc $ret;
      };
  
      after 'private', 'protected' => sub {
          debug "finished calling a dangerous method";
      };
  
      use Class::Method::Modifiers qw(fresh);
  
      fresh 'not_in_hierarchy' => sub {
          warn "freshly added method\n";
      };
  
  =head1 DESCRIPTION
  
  =for stopwords CLOS
  
  Method modifiers are a convenient feature from the CLOS (Common Lisp Object
  System) world.
  
  In its most basic form, a method modifier is just a method that calls
  C<< $self->SUPER::foo(@_) >>. I for one have trouble remembering that exact
  invocation, so my classes seldom re-dispatch to their base classes. Very bad!
  
  C<Class::Method::Modifiers> provides three modifiers: C<before>, C<around>, and
  C<after>. C<before> and C<after> are run just before and after the method they
  modify, but can not really affect that original method. C<around> is run in
  place of the original method, with a hook to easily call that original method.
  See the C<MODIFIERS> section for more details on how the particular modifiers
  work.
  
  One clear benefit of using C<Class::Method::Modifiers> is that you can define
  multiple modifiers in a single namespace. These separate modifiers don't need
  to know about each other. This makes top-down design easy. Have a base class
  that provides the skeleton methods of each operation, and have plugins modify
  those methods to flesh out the specifics.
  
  Parent classes need not know about C<Class::Method::Modifiers>. This means you
  should be able to modify methods in I<any> subclass. See
  L<Term::VT102::ZeroBased> for an example of subclassing with
  C<Class::Method::Modifiers>.
  
  In short, C<Class::Method::Modifiers> solves the problem of making sure you
  call C<< $self->SUPER::foo(@_) >>, and provides a cleaner interface for it.
  
  As of version 1.00, C<Class::Method::Modifiers> is faster in some cases than
  L<Moose>. See C<benchmark/method_modifiers.pl> in the L<Moose> distribution.
  
  C<Class::Method::Modifiers> also provides an additional "modifier" type,
  C<fresh>; see below.
  
  =head1 MODIFIERS
  
  All modifiers let you modify one or multiple methods at a time. The names of
  multiple methods can be provided as a list or as an array-reference. Examples:
  
   before 'method' => sub { ... };
   before 'method1', 'method2' => sub { ... };
   before [ 'method1', 'method2' ] => sub { ... };
  
  =head2 before method(s) => sub { ... };
  
  C<before> is called before the method it is modifying. Its return value is
  totally ignored. It receives the same C<@_> as the method it is modifying
  would have received. You can modify the C<@_> the original method will receive
  by changing C<$_[0]> and friends (or by changing anything inside a reference).
  This is a feature!
  
  =head2 after method(s) => sub { ... };
  
  C<after> is called after the method it is modifying. Its return value is
  totally ignored. It receives the same C<@_> as the method it is modifying
  received, mostly. The original method can modify C<@_> (such as by changing
  C<$_[0]> or references) and C<after> will see the modified version. If you
  don't like this behavior, specify both a C<before> and C<after>, and copy the
  C<@_> during C<before> for C<after> to use.
  
  =head2 around method(s) => sub { ... };
  
  C<around> is called instead of the method it is modifying. The method you're
  overriding is passed in as the first argument (called C<$orig> by convention).
  Watch out for contextual return values of C<$orig>.
  
  You can use C<around> to:
  
  =over 4
  
  =item Pass C<$orig> a different C<@_>
  
      around 'method' => sub {
          my $orig = shift;
          my $self = shift;
          $orig->($self, reverse @_);
      };
  
  =item Munge the return value of C<$orig>
  
      around 'method' => sub {
          my $orig = shift;
          ucfirst $orig->(@_);
      };
  
  =item Avoid calling C<$orig> -- conditionally
  
      around 'method' => sub {
          my $orig = shift;
          return $orig->(@_) if time() % 2;
          return "no dice, captain";
      };
  
  =back
  
  =head2 fresh method(s) => sub { ... };
  
  (Available since version 2.00)
  
  Unlike the other modifiers, this does not modify an existing method.
  Ordinarily, C<fresh> merely installs the coderef as a method in the
  appropriate class; but if the class hierarchy already contains a method of
  the same name, an exception is thrown.  The idea of this "modifier" is to
  increase safety when subclassing.  Suppose you're writing a subclass of a
  class Some::Base, and adding a new method:
  
      package My::Subclass;
      use base 'Some::Base';
  
      sub foo { ... }
  
  If a later version of Some::Base also adds a new method named C<foo>, your
  method will shadow that method.  Alternatively, you can use C<fresh>
  to install the additional method into your subclass:
  
      package My::Subclass;
      use base 'Some::Base';
  
      use Class::Method::Modifiers 'fresh';
  
      fresh 'foo' => sub { ... };
  
  Now upgrading Some::Base to a version with a conflicting C<foo> method will
  cause an exception to be thrown; seeing that error will give you the
  opportunity to fix the problem (perhaps by picking a different method name
  in your subclass, or similar).
  
  Creating fresh methods with C<install_modifier> (see below) provides a way
  to get similar safety benefits when adding local monkeypatches to existing
  classes; see L<http://aaroncrane.co.uk/talks/monkey_patching_subclassing/>.
  
  For API compatibility reasons, this function is exported only when you ask
  for it specifically, or for C<:all>.
  
  =head2 install_modifier $package, $type, @names, sub { ... }
  
  C<install_modifier> is like C<before>, C<after>, C<around>, and C<fresh> but
  it also lets you dynamically select the modifier type ('before', 'after',
  'around', 'fresh')
  and package that the method modifiers are installed into. This expert-level
  function is exported only when you ask for it specifically, or for C<:all>.
  
  =head1 NOTES
  
  All three normal modifiers; C<before>, C<after>, and C<around>; are exported
  into your namespace by default. You may C<use Class::Method::Modifiers ()> to
  avoid modifying your namespace. I may steal more features from L<Moose>, namely
  C<super>, C<override>, C<inner>, C<augment>, and whatever the L<Moose> folks
  come up with next.
  
  Note that the syntax and semantics for these modifiers is directly borrowed
  from L<Moose> (the implementations, however, are not).
  
  L<Class::Trigger> shares a few similarities with C<Class::Method::Modifiers>,
  and they even have some overlap in purpose -- both can be used to implement
  highly pluggable applications. The difference is that L<Class::Trigger>
  provides a mechanism for easily letting parent classes to invoke hooks defined
  by other code. C<Class::Method::Modifiers> provides a way of
  overriding/augmenting methods safely, and the parent class need not know about
  it.
  
  =head2 :lvalue METHODS
  
  When adding C<before> or C<after> modifiers, the wrapper method will be
  an lvalue method if the wrapped sub is, and assigning to the method
  will propagate to the wrapped method as expected.  For C<around>
  modifiers, it is the modifier sub that determines if the wrapper
  method is an lvalue method.
  
  =head1 CAVEATS
  
  It is erroneous to modify a method that doesn't exist in your class's
  inheritance hierarchy. If this occurs, an exception will be thrown when
  the modifier is defined.
  
  It doesn't yet play well with C<caller>. There are some C<TODO> tests for this.
  Don't get your hopes up though!
  
  Applying modifiers to array lvalue methods is not fully supported. Attempting
  to assign to an array lvalue method that has an C<after> modifier applied will
  result in an error.  Array lvalue methods are not well supported by perl in
  general, and should be avoided.
  
  =head1 MAJOR VERSION CHANGES
  
  =for stopwords reimplementation
  
  This module was bumped to 1.00 following a complete reimplementation, to
  indicate breaking backwards compatibility. The "guard" modifier was removed,
  and the internals are completely different.
  
  The new version is a few times faster with half the code. It's now even faster
  than Moose.
  
  Any code that just used modifiers should not change in behavior, except to
  become more correct. And, of course, faster. :)
  
  =head1 SEE ALSO
  
  =over 4
  
  =item *
  
  L<Class::Method::Modifiers::Fast>
  
  =item *
  
  L<Moose>
  
  =item *
  
  L<Class::Trigger>
  
  =item *
  
  L<Class::MOP::Method::Wrapped>
  
  =item *
  
  L<MRO::Compat>,
  
  =item *
  
  L<CLOS|https://en.wikipedia.org/wiki/Common_Lisp_Object_System>
  
  =back
  
  =head1 ACKNOWLEDGEMENTS
  
  =for stopwords Stevan
  
  Thanks to Stevan Little for L<Moose>, I would never have known about
  method modifiers otherwise.
  
  Thanks to Matt Trout and Stevan Little for their advice.
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|https://rt.cpan.org/Public/Dist/Display.html?Name=Class-Method-Modifiers>
  (or L<bug-Class-Method-Modifiers@rt.cpan.org|mailto:bug-Class-Method-Modifiers@rt.cpan.org>).
  
  =head1 AUTHOR
  
  Shawn M Moore <sartak@gmail.com>
  
  =head1 CONTRIBUTORS
  
  =for stopwords Karen Etheridge Shawn M Moore Graham Knop Aaron Crane Peter Rabbitson Justin Hunter David Steinbrunner gfx mannih
  
  =over 4
  
  =item *
  
  Karen Etheridge <ether@cpan.org>
  
  =item *
  
  Shawn M Moore <code@sartak.org>
  
  =item *
  
  Graham Knop <haarg@haarg.org>
  
  =item *
  
  Aaron Crane <arc@cpan.org>
  
  =item *
  
  Peter Rabbitson <ribasushi@cpan.org>
  
  =item *
  
  Justin Hunter <justin.d.hunter@gmail.com>
  
  =item *
  
  David Steinbrunner <dsteinbrunner@pobox.com>
  
  =item *
  
  gfx <gfuji@cpan.org>
  
  =item *
  
  mannih <github@lxxi.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2007 by Shawn M Moore.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
CLASS_METHOD_MODIFIERS

    $main::fatpacked{"Class/Singleton.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'CLASS_SINGLETON';
  #============================================================================
  #
  # Class::Singleton.pm
  #
  # Implementation of a "singleton" module which ensures that a class has
  # only one instance and provides global access to it.  For a description 
  # of the Singleton class, see "Design Patterns", Gamma et al, Addison-
  # Wesley, 1995, ISBN 0-201-63361-2
  #
  # Written by Andy Wardley <abw@wardley.org>
  #
  # Copyright (C) 1998-2008 Andy Wardley.  All Rights Reserved.
  # Copyright (C) 1998 Canon Research Centre Europe Ltd.
  #
  #============================================================================
  
  package Class::Singleton;
  require 5.004;
  use strict;
  use warnings;
  
  our $VERSION = 1.5;
  my %_INSTANCES = ();
  
  
  #========================================================================
  #
  # instance()
  #
  # Module constructor.  Creates an Class::Singleton (or derived) instance 
  # if one doesn't already exist.  The instance reference is stored in the
  # %_INSTANCES hash of the Class::Singleton package.  The impact of this is
  # that you can create any number of classes derived from Class::Singleton
  # and create a single instance of each one.  If the instance reference
  # was stored in a scalar $_INSTANCE variable, you could only instantiate 
  # *ONE* object of *ANY* class derived from Class::Singleton.  The first
  # time the instance is created, the _new_instance() constructor is called 
  # which simply returns a reference to a blessed hash.  This can be 
  # overloaded for custom constructors.  Any addtional parameters passed to 
  # instance() are forwarded to _new_instance().
  #
  # Returns a reference to the existing, or a newly created Class::Singleton
  # object.  If the _new_instance() method returns an undefined value
  # then the constructer is deemed to have failed.
  #
  #========================================================================
  
  sub instance {
      my $class = shift;
      
      # already got an object
      return $class if ref $class;
  
      # we store the instance against the $class key of %_INSTANCES
      my $instance = $_INSTANCES{$class};
      unless(defined $instance) {
          $_INSTANCES{$class} = $instance = $class->_new_instance(@_);
      }
      return $instance;
  }
  
  
  #=======================================================================
  # has_instance()
  #
  # Public method to return the current instance if it exists.
  #=======================================================================
  
  sub has_instance {
      my $class = shift;
      $class = ref $class || $class;
      return $_INSTANCES{$class};
  }
  
  
  #========================================================================
  # _new_instance(...)
  #
  # Simple constructor which returns a hash reference blessed into the 
  # current class.  May be overloaded to create non-hash objects or 
  # handle any specific initialisation required.
  #========================================================================
  
  sub _new_instance {
      my $class = shift;
      my %args  = @_ && ref $_[0] eq 'HASH' ? %{ $_[0] } : @_;
      bless { %args }, $class;
  }
  
  
  #========================================================================
  # END()
  #
  # END block to explicitly destroy all Class::Singleton objects since
  # destruction order at program exit is not predictable. See CPAN RT
  # bugs #23568 and #68526 for examples of what can go wrong without this.
  #========================================================================
  
  END {
      # dereferences and causes orderly destruction of all instances
      undef(%_INSTANCES);
  }
  
  
  1;
  
  __END__
  
  =head1 NAME
  
  Class::Singleton - Implementation of a "Singleton" class 
  
  =head1 SYNOPSIS
  
      use Class::Singleton;
      
      my $one = Class::Singleton->instance();   # returns a new instance
      my $two = Class::Singleton->instance();   # returns same instance
  
  =head1 DESCRIPTION
  
  This is the C<Class::Singleton> module.  A Singleton describes an object class
  that can have only one instance in any system.  An example of a Singleton
  might be a print spooler or system registry.  This module implements a
  Singleton class from which other classes can be derived.  By itself, the
  C<Class::Singleton> module does very little other than manage the instantiation
  of a single object.  In deriving a class from C<Class::Singleton>, your module 
  will inherit the Singleton instantiation method and can implement whatever
  specific functionality is required.
  
  For a description and discussion of the Singleton class, see 
  "Design Patterns", Gamma et al, Addison-Wesley, 1995, ISBN 0-201-63361-2.
  
  =head1 PREREQUISITES
  
  C<Class::Singleton> requires Perl version 5.004 or later. If you have an older
  version of Perl, please upgrade to latest version, available from your nearest
  CPAN site (see L<INSTALLATION> below).
  
  =head1 INSTALLATION
  
  The C<Class::Singleton> module is available from CPAN. As the 'perlmod' man
  page explains:
  
      CPAN stands for the Comprehensive Perl Archive Network.
      This is a globally replicated collection of all known Perl
      materials, including hundreds of unbunded modules.
      
      [...]
      
      For an up-to-date listing of CPAN sites, see
      http://www.perl.com/perl/ or ftp://ftp.perl.com/perl/ .
  
  The module is available in the following directories:
  
      /modules/by-module/Class/Class-Singleton-<version>.tar.gz
      /authors/id/ABW/Class-Singleton-<version>.tar.gz
  
  C<Class::Singleton> is distributed as a single gzipped tar archive file:
  
      Class-Singleton-<version>.tar.gz
  
  Note that "<version>" represents the current version number, of the 
  form "C<1.23>".  See L<VERSION> below to determine the current version 
  number for C<Class::Singleton>.
  
  Unpack the archive to create an installation directory:
  
      gunzip Class-Singleton-<version>.tar.gz
      tar xvf Class-Singleton-<version>.tar
  
  'cd' into that directory, make, test and install the module:
  
      cd Class-Singleton-<version>
      perl Makefile.PL
      make
      make test
      make install
  
  The 'C<make install>' will install the module on your system.  You may need 
  root access to perform this task.  If you install the module in a local 
  directory (for example, by executing "C<perl Makefile.PL LIB=~/lib>" in the 
  above - see C<perldoc MakeMaker> for full details), you will need to ensure 
  that the C<PERL5LIB> environment variable is set to include the location, or 
  add a line to your scripts explicitly naming the library location:
  
      use lib '/local/path/to/lib';
  
  =head1 USING THE CLASS::SINGLETON MODULE
  
  To import and use the C<Class::Singleton> module the following line should 
  appear in your Perl program:
  
      use Class::Singleton;
  
  The L<instance()> method is used to create a new C<Class::Singleton> instance,
  or return a reference to an existing instance. Using this method, it is only
  possible to have a single instance of the class in any system.
  
      my $highlander = Class::Singleton->instance();
  
  Assuming that no C<Class::Singleton> object currently exists, this first call
  to L<instance()> will create a new C<Class::Singleton> and return a reference
  to it. Future invocations of L<instance()> will return the same reference.
  
      my $macleod    = Class::Singleton->instance();
  
  In the above example, both C<$highlander> and C<$macleod> contain the same
  reference to a C<Class::Singleton> instance.  There can be only one.
  
  =head1 DERIVING SINGLETON CLASSES
  
  A module class may be derived from C<Class::Singleton> and will inherit the 
  L<instance()> method that correctly instantiates only one object.
  
      package PrintSpooler;
      use base 'Class::Singleton';
      
      # derived class specific code
      sub submit_job {
          ...
      }
      
      sub cancel_job {
          ...
      }
  
  The C<PrintSpooler> class defined above could be used as follows:
  
      use PrintSpooler;
      
      my $spooler = PrintSpooler->instance();
      
      $spooler->submit_job(...);
  
  The L<instance()> method calls the L<_new_instance()> constructor method the
  first and only time a new instance is created. All parameters passed to the
  L<instance()> method are forwarded to L<_new_instance()>. In the base class
  the L<_new_instance()> method returns a blessed reference to a hash array
  containing any arguments passed as either a hash reference or list of named 
  parameters. 
  
      package MyConfig;
      use base 'Class::Singleton';
      
      sub foo {
          shift->{ foo };
      }
      
      sub bar {
          shift->{ bar };
      }
      
      package main;
      
      # either: hash reference of named parameters
      my $config = MyConfig->instance({ foo => 10, bar => 20 });
      
      # or: list of named parameters
      my $config = MyConfig->instance( foo => 10, bar => 20 );
      
      print $config->foo();   # 10
      print $config->bar();   # 20
  
  Derived classes may redefine the L<_new_instance()> method to provide more
  specific object initialisation or change the underlying object type (to a list
  reference, for example).
  
      package MyApp::Database;
      use base 'Class::Singleton';
      use DBI;
      
      # this only gets called the first time instance() is called
      sub _new_instance {
          my $class = shift;
          my $self  = bless { }, $class;
          my $db    = shift || "myappdb";    
          my $host  = shift || "localhost";
          
          $self->{ DB } = DBI->connect("DBI:mSQL:$db:$host")
              || die "Cannot connect to database: $DBI::errstr";
          
          # any other initialisation...
          
          return $self;
      }
  
  The above example might be used as follows:
  
      use MyApp::Database;
      
      # first use - database gets initialised
      my $database = MyApp::Database->instance();
  
  Some time later on in a module far, far away...
  
      package MyApp::FooBar
      use MyApp::Database;
      
      # this FooBar object needs access to the database; the Singleton
      # approach gives a nice wrapper around global variables.
      
      sub new {
          my $class = shift;
          bless {
              database => MyApp::Database->instance(),
          }, $class;
      }
  
  The C<Class::Singleton> L<instance()> method uses a private hash to store
  a reference to any existing instance of the object, keyed against the derived
  class package name.
  
  This allows different classes to be derived from C<Class::Singleton> that can
  co-exist in the same system, while still allowing only one instance of any one
  class to exist. For example, it would be possible to derive both
  'C<PrintSpooler>' and 'C<MyApp::Database>' from C<Class::Singleton> and have a
  single instance of I<each> in a system, rather than a single instance of
  I<either>.
  
  You can use the L<has_instance()> method to find out if a particular class 
  already has an instance defined.  A reference to the instance is returned or
  C<undef> if none is currently defined.
  
      my $instance = MyApp::Database->has_instance()
          || warn "No instance is defined yet";
  
  =head1 METHODS
  
  =head2 instance()
  
  This method is called to return a current object instance or create a new
  one by calling L<_new_instance()>.
  
  =head2 has_instance()
  
  This method returns a reference to any existing instance or C<undef> if none
  is defined.
  
      my $testing = MySingleton1->has_instance()
          || warn "No instance defined for MySingleton1";
  
  =head2 _new_instance()
  
  This "private" method is called by L<instance()> to create a new object
  instance if one doesn't already exist. It is not intended to be called
  directly (although there's nothing to stop you from calling it if you're
  really determined to do so).
  
  It creates a blessed hash reference containing any arguments passed to the
  method as either a hash reference or list of named parameters.
  
      # either: hash reference of named parameters
      my $example1 = MySingleton1->new({ pi => 3.14, e => 2.718 });
  
      # or: list of named parameters
      my $example2 = MySingleton2->new( pi => 3.14, e => 2.718 );
  
  It is important to remember that the L<instance()> method will I<only> call
  the I<_new_instance()> method once, so any arguments you pass may be silently
  ignored if an instance already exists. You can use the L<has_instance()>
  method to determine if an instance is already defined.
  
  =head1 AUTHOR
  
  Andy Wardley E<lt>abw@wardley.orgE<gt> L<http://wardley.org/>
  
  Thanks to Andreas Koenig for providing some significant speedup patches and
  other ideas.
  
  =head1 VERSION
  
  This is version 1.5, released November 2014
  
  =head1 COPYRIGHT
  
  Copyright Andy Wardley 1998-2007.  All Rights Reserved.
  
  This module is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =cut
CLASS_SINGLETON

    $main::fatpacked{"Clone/PP.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'CLONE_PP';
  package Clone::PP;
  
  use 5.006;
  use strict;
  use warnings;
  use vars qw($VERSION @EXPORT_OK);
  use Exporter;
  
  $VERSION = 1.06;
  
  @EXPORT_OK = qw( clone );
  sub import { goto &Exporter::import } # lazy Exporter
  
  # These methods can be temporarily overridden to work with a given class.
  use vars qw( $CloneSelfMethod $CloneInitMethod );
  $CloneSelfMethod ||= 'clone_self';
  $CloneInitMethod ||= 'clone_init';
  
  # Used to detect looped networks and avoid infinite recursion. 
  use vars qw( %CloneCache );
  
  # Generic cloning function
  sub clone {
    my $source = shift;
  
    return undef if not defined($source);
    
    # Optional depth limit: after a given number of levels, do shallow copy.
    my $depth = shift;
    return $source if ( defined $depth and $depth -- < 1 );
    
    # Maintain a shared cache during recursive calls, then clear it at the end.
    local %CloneCache = ( undef => undef ) unless ( exists $CloneCache{undef} );
    
    return $CloneCache{ $source } if ( defined $CloneCache{ $source } );
    
    # Non-reference values are copied shallowly
    my $ref_type = ref $source or return $source;
    
    # Extract both the structure type and the class name of referent
    my $class_name;
    if ( "$source" =~ /^\Q$ref_type\E\=([A-Z]+)\(0x[0-9a-f]+\)$/ ) {
      $class_name = $ref_type;
      $ref_type = $1;
      # Some objects would prefer to clone themselves; check for clone_self().
      return $CloneCache{ $source } = $source->$CloneSelfMethod() 
  				  if $source->can($CloneSelfMethod);
    }
    
    # To make a copy:
    # - Prepare a reference to the same type of structure;
    # - Store it in the cache, to avoid looping if it refers to itself;
    # - Tie in to the same class as the original, if it was tied;
    # - Assign a value to the reference by cloning each item in the original;
    
    my $copy;
    if ($ref_type eq 'HASH') {
      $CloneCache{ $source } = $copy = {};
      if ( my $tied = tied( %$source ) ) { tie %$copy, ref $tied }
      %$copy = map { ! ref($_) ? $_ : clone($_, $depth) } %$source;
    } elsif ($ref_type eq 'ARRAY') {
      $CloneCache{ $source } = $copy = [];
      if ( my $tied = tied( @$source ) ) { tie @$copy, ref $tied }
      @$copy = map { ! ref($_) ? $_ : clone($_, $depth) } @$source;
    } elsif ($ref_type eq 'REF' or $ref_type eq 'SCALAR') {
      $CloneCache{ $source } = $copy = \( my $var = "" );
      if ( my $tied = tied( $$source ) ) { tie $$copy, ref $tied }
      $$copy = clone($$source, $depth);
    } else {
      # Shallow copy anything else; this handles a reference to code, glob, regex
      $CloneCache{ $source } = $copy = $source;
    }
    
    # - Bless it into the same class as the original, if it was blessed;
    # - If it has a post-cloning initialization method, call it.
    if ( $class_name ) {
      bless $copy, $class_name;
      $copy->$CloneInitMethod() if $copy->can($CloneInitMethod);
    }
    
    return $copy;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Clone::PP - Recursively copy Perl datatypes
  
  =head1 SYNOPSIS
  
    use Clone::PP qw(clone);
    
    $item = { 'foo' => 'bar', 'move' => [ 'zig', 'zag' ]  };
    $copy = clone( $item );
  
    $item = [ 'alpha', 'beta', { 'gamma' => 'vlissides' } ];
    $copy = clone( $item );
  
    $item = Foo->new();
    $copy = clone( $item );
  
  Or as an object method:
  
    require Clone::PP;
    push @Foo::ISA, 'Clone::PP';
    
    $item = Foo->new();
    $copy = $item->clone();
  
  =head1 DESCRIPTION
  
  This module provides a general-purpose clone function to make deep
  copies of Perl data structures. It calls itself recursively to copy
  nested hash, array, scalar and reference types, including tied
  variables and objects.
  
  The clone() function takes a scalar argument to copy. To duplicate
  arrays or hashes, pass them in by reference:
  
    my $copy = clone(\@array);    my @copy = @{ clone(\@array) };
    my $copy = clone(\%hash);     my %copy = %{ clone(\%hash) };
  
  The clone() function also accepts an optional second parameter that
  can be used to limit the depth of the copy. If you pass a limit of
  0, clone will return the same value you supplied; for a limit of
  1, a shallow copy is constructed; for a limit of 2, two layers of
  copying are done, and so on.
  
    my $shallow_copy = clone( $item, 1 );
  
  To allow objects to intervene in the way they are copied, the
  clone() function checks for a couple of optional methods. If an
  object provides a method named C<clone_self>, it is called and the
  result returned without further processing. Alternately, if an
  object provides a method named C<clone_init>, it is called on the
  copied object before it is returned.
  
  =head1 BUGS
  
  Some data types, such as globs, regexes, and code refs, are always copied shallowly.
  
  References to hash elements are not properly duplicated. (This is why two tests in t/dclone.t that are marked "todo".) For example, the following test should succeed but does not:
  
    my $hash = { foo => 1 }; 
    $hash->{bar} = \{ $hash->{foo} }; 
    my $copy = clone( \%hash ); 
    $hash->{foo} = 2; 
    $copy->{foo} = 2; 
    ok( $hash->{bar} == $copy->{bar} );
  
  To report bugs via the CPAN web tracking system, go to 
  C<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Clone-PP> or send mail 
  to C<Dist=Clone-PP#rt.cpan.org>, replacing C<#> with C<@>.
  
  =head1 SEE ALSO
  
  L<Clone> - a baseclass which provides a C<clone()> method.
  
  L<MooseX::Clone> - find-grained cloning for Moose objects.
  
  The C<dclone()> function in L<Storable>.
  
  L<Data::Clone> -
  polymorphic data cloning (see its documentation for what that means).
  
  L<Clone::Any> - use whichever of the cloning methods is available.
  
  =head1 REPOSITORY
  
  L<https://github.com/neilbowers/Clone-PP>
  
  =head1 AUTHOR AND CREDITS
  
  Developed by Matthew Simon Cavalletto at Evolution Softworks. 
  More free Perl software is available at C<www.evoscript.org>.
  
  
  =head1 COPYRIGHT AND LICENSE
  
  Copyright 2003 Matthew Simon Cavalletto. You may contact the author
  directly at C<evo@cpan.org> or C<simonm@cavalletto.org>.
  
  Code initially derived from Ref.pm. Portions Copyright 1994 David Muir Sharnoff.
  
  Interface based by Clone by Ray Finch with contributions from chocolateboy.
  Portions Copyright 2001 Ray Finch. Portions Copyright 2001 chocolateboy. 
  
  You may use, modify, and distribute this software under the same terms as Perl.
  
  =cut
CLONE_PP

    $main::fatpacked{"Color/ANSI/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'COLOR_ANSI_UTIL';
  package Color::ANSI::Util;
  
  our $DATE = '2016-10-04'; # DATE
  our $VERSION = '0.15'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(
                         ansi16_to_rgb
                         rgb_to_ansi16
                         rgb_to_ansi16_fg_code
                         ansi16fg
                         rgb_to_ansi16_bg_code
                         ansi16bg
  
                         ansi256_to_rgb
                         rgb_to_ansi256
                         rgb_to_ansi256_fg_code
                         ansi256fg
                         rgb_to_ansi256_bg_code
                         ansi256bg
  
                         rgb_to_ansi24b_fg_code
                         ansi24bfg
                         rgb_to_ansi24b_bg_code
                         ansi24bbg
  
                         rgb_to_ansi_fg_code
                         ansifg
                         rgb_to_ansi_bg_code
                         ansibg
                 );
  
  my %ansi16 = (
      0  => '000000',
      1  => '800000',
      2  => '008000',
      3  => '808000',
      4  => '000080',
      5  => '800080',
      6  => '008080',
      7  => 'c0c0c0',
      8  => '808080',
      9  => 'ff0000',
      10 => '00ff00',
      11 => 'ffff00',
      12 => '0000ff',
      13 => 'ff00ff',
      14 => '00ffff',
      15 => 'ffffff',
  );
  my @revansi16;
  for (sort {$a<=>$b} keys %ansi16) {
      $ansi16{$_} =~ /(..)(..)(..)/;
      push @revansi16, [hex($1), hex($2), hex($3), $_];
  }
  
  my %ansi256 = (
      %ansi16,
  
      16 => '000000',  17 => '00005f',  18 => '000087',  19 => '0000af',  20 => '0000d7',  21 => '0000ff',
      22 => '005f00',  23 => '005f5f',  24 => '005f87',  25 => '005faf',  26 => '005fd7',  27 => '005fff',
      28 => '008700',  29 => '00875f',  30 => '008787',  31 => '0087af',  32 => '0087d7',  33 => '0087ff',
      34 => '00af00',  35 => '00af5f',  36 => '00af87',  37 => '00afaf',  38 => '00afd7',  39 => '00afff',
      40 => '00d700',  41 => '00d75f',  42 => '00d787',  43 => '00d7af',  44 => '00d7d7',  45 => '00d7ff',
      46 => '00ff00',  47 => '00ff5f',  48 => '00ff87',  49 => '00ffaf',  50 => '00ffd7',  51 => '00ffff',
      52 => '5f0000',  53 => '5f005f',  54 => '5f0087',  55 => '5f00af',  56 => '5f00d7',  57 => '5f00ff',
      58 => '5f5f00',  59 => '5f5f5f',  60 => '5f5f87',  61 => '5f5faf',  62 => '5f5fd7',  63 => '5f5fff',
      64 => '5f8700',  65 => '5f875f',  66 => '5f8787',  67 => '5f87af',  68 => '5f87d7',  69 => '5f87ff',
      70 => '5faf00',  71 => '5faf5f',  72 => '5faf87',  73 => '5fafaf',  74 => '5fafd7',  75 => '5fafff',
      76 => '5fd700',  77 => '5fd75f',  78 => '5fd787',  79 => '5fd7af',  80 => '5fd7d7',  81 => '5fd7ff',
      82 => '5fff00',  83 => '5fff5f',  84 => '5fff87',  85 => '5fffaf',  86 => '5fffd7',  87 => '5fffff',
      88 => '870000',  89 => '87005f',  90 => '870087',  91 => '8700af',  92 => '8700d7',  93 => '8700ff',
      94 => '875f00',  95 => '875f5f',  96 => '875f87',  97 => '875faf',  98 => '875fd7',  99 => '875fff',
      100 => '878700', 101 => '87875f', 102 => '878787', 103 => '8787af', 104 => '8787d7', 105 => '8787ff',
      106 => '87af00', 107 => '87af5f', 108 => '87af87', 109 => '87afaf', 110 => '87afd7', 111 => '87afff',
      112 => '87d700', 113 => '87d75f', 114 => '87d787', 115 => '87d7af', 116 => '87d7d7', 117 => '87d7ff',
      118 => '87ff00', 119 => '87ff5f', 120 => '87ff87', 121 => '87ffaf', 122 => '87ffd7', 123 => '87ffff',
      124 => 'af0000', 125 => 'af005f', 126 => 'af0087', 127 => 'af00af', 128 => 'af00d7', 129 => 'af00ff',
      130 => 'af5f00', 131 => 'af5f5f', 132 => 'af5f87', 133 => 'af5faf', 134 => 'af5fd7', 135 => 'af5fff',
      136 => 'af8700', 137 => 'af875f', 138 => 'af8787', 139 => 'af87af', 140 => 'af87d7', 141 => 'af87ff',
      142 => 'afaf00', 143 => 'afaf5f', 144 => 'afaf87', 145 => 'afafaf', 146 => 'afafd7', 147 => 'afafff',
      148 => 'afd700', 149 => 'afd75f', 150 => 'afd787', 151 => 'afd7af', 152 => 'afd7d7', 153 => 'afd7ff',
      154 => 'afff00', 155 => 'afff5f', 156 => 'afff87', 157 => 'afffaf', 158 => 'afffd7', 159 => 'afffff',
      160 => 'd70000', 161 => 'd7005f', 162 => 'd70087', 163 => 'd700af', 164 => 'd700d7', 165 => 'd700ff',
      166 => 'd75f00', 167 => 'd75f5f', 168 => 'd75f87', 169 => 'd75faf', 170 => 'd75fd7', 171 => 'd75fff',
      172 => 'd78700', 173 => 'd7875f', 174 => 'd78787', 175 => 'd787af', 176 => 'd787d7', 177 => 'd787ff',
      178 => 'd7af00', 179 => 'd7af5f', 180 => 'd7af87', 181 => 'd7afaf', 182 => 'd7afd7', 183 => 'd7afff',
      184 => 'd7d700', 185 => 'd7d75f', 186 => 'd7d787', 187 => 'd7d7af', 188 => 'd7d7d7', 189 => 'd7d7ff',
      190 => 'd7ff00', 191 => 'd7ff5f', 192 => 'd7ff87', 193 => 'd7ffaf', 194 => 'd7ffd7', 195 => 'd7ffff',
      196 => 'ff0000', 197 => 'ff005f', 198 => 'ff0087', 199 => 'ff00af', 200 => 'ff00d7', 201 => 'ff00ff',
      202 => 'ff5f00', 203 => 'ff5f5f', 204 => 'ff5f87', 205 => 'ff5faf', 206 => 'ff5fd7', 207 => 'ff5fff',
      208 => 'ff8700', 209 => 'ff875f', 210 => 'ff8787', 211 => 'ff87af', 212 => 'ff87d7', 213 => 'ff87ff',
      214 => 'ffaf00', 215 => 'ffaf5f', 216 => 'ffaf87', 217 => 'ffafaf', 218 => 'ffafd7', 219 => 'ffafff',
      220 => 'ffd700', 221 => 'ffd75f', 222 => 'ffd787', 223 => 'ffd7af', 224 => 'ffd7d7', 225 => 'ffd7ff',
      226 => 'ffff00', 227 => 'ffff5f', 228 => 'ffff87', 229 => 'ffffaf', 230 => 'ffffd7', 231 => 'ffffff',
  
      232 => '080808', 233 => '121212', 234 => '1c1c1c', 235 => '262626', 236 => '303030', 237 => '3a3a3a',
      238 => '444444', 239 => '4e4e4e', 240 => '585858', 241 => '606060', 242 => '666666', 243 => '767676',
      244 => '808080', 245 => '8a8a8a', 246 => '949494', 247 => '9e9e9e', 248 => 'a8a8a8', 249 => 'b2b2b2',
      250 => 'bcbcbc', 251 => 'c6c6c6', 252 => 'd0d0d0', 253 => 'dadada', 254 => 'e4e4e4', 255 => 'eeeeee',
  );
  my @revansi256;
  for (sort {$a<=>$b} keys %ansi256) {
      $ansi256{$_} =~ /(..)(..)(..)/;
      push @revansi256, [hex($1), hex($2), hex($3), $_];
  }
  
  sub ansi16_to_rgb {
      my ($input) = @_;
  
      if ($input =~ /^\d+$/) {
          if ($input >= 0 && $input <= 15) {
              return $ansi16{$input + 0}; # to remove prefix zero e.g. "06"
          } else {
              die "Invalid ANSI 16-color number '$input'";
          }
      } elsif ($input =~ /^(?:(bold|bright) \s )?
                          (black|red|green|yellow|blue|magenta|cyan|white)$/ix) {
          my ($bold, $col) = (lc($1 // ""), lc($2));
          my $i;
          if ($col eq 'black') {
              $i = 0;
          } elsif ($col eq 'red') {
              $i = 1;
          } elsif ($col eq 'green') {
              $i = 2;
          } elsif ($col eq 'yellow') {
              $i = 3;
          } elsif ($col eq 'blue') {
              $i = 4;
          } elsif ($col eq 'magenta') {
              $i = 5;
          } elsif ($col eq 'cyan') {
              $i = 6;
          } elsif ($col eq 'white') {
              $i = 7;
          }
          $i += 8 if $bold;
          return $ansi16{$i};
      } else {
          die "Invalid ANSI 16-color name '$input'";
      }
  }
  
  sub _rgb_to_indexed {
      my ($rgb, $table) = @_;
  
      $rgb =~ /^#?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/
          or die "Invalid RGB input '$rgb'";
      my $r = hex($1);
      my $g = hex($2);
      my $b = hex($3);
  
      my ($minsqdist, $res);
      for my $e (@$table) {
          my $sqdist =
              abs($e->[0]-$r)**2 + abs($e->[1]-$g)**2 + abs($e->[2]-$b)**2;
          # exact match, return immediately
          return $e->[3] if $sqdist == 0;
          if (!defined($minsqdist) || $minsqdist > $sqdist) {
              #say "D:sqdist=$sqdist";
              $minsqdist = $sqdist;
              $res = $e->[3];
          }
      }
      return $res;
  }
  
  sub ansi256_to_rgb {
      my ($input) = @_;
  
      $input += 0;
      exists($ansi256{$input}) or die "Invalid ANSI 256-color index '$input'";
      $ansi256{$input};
  }
  
  sub rgb_to_ansi16 {
      my ($input) = @_;
      _rgb_to_indexed($input, \@revansi16);
  }
  
  sub rgb_to_ansi256 {
      my ($input) = @_;
      _rgb_to_indexed($input, \@revansi256);
  }
  
  sub rgb_to_ansi16_fg_code {
      my ($input) = @_;
  
      my $res = _rgb_to_indexed($input, \@revansi16);
      return "\e[" . ($res >= 8 ? ($res+30-8) . ";1" : ($res+30)) . "m";
  }
  
  sub ansi16fg  { goto &rgb_to_ansi16_fg_code  }
  
  sub rgb_to_ansi16_bg_code {
      my ($input) = @_;
  
      my $res = _rgb_to_indexed($input, \@revansi16);
      return "\e[" . ($res >= 8 ? ($res+40-8) : ($res+40)) . "m";
  }
  
  sub ansi16bg  { goto &rgb_to_ansi16_bg_code  }
  
  sub rgb_to_ansi256_fg_code {
      my ($input) = @_;
  
      my $res = _rgb_to_indexed($input, \@revansi16);
      return "\e[38;5;${res}m";
  }
  
  sub ansi256fg { goto &rgb_to_ansi256_fg_code }
  
  sub rgb_to_ansi256_bg_code {
      my ($input) = @_;
  
      my $res = _rgb_to_indexed($input, \@revansi16);
      return "\e[48;5;${res}m";
  }
  
  sub ansi256bg { goto &rgb_to_ansi256_bg_code }
  
  sub rgb_to_ansi24b_fg_code {
      my ($rgb) = @_;
  
      return sprintf("\e[38;2;%d;%d;%dm",
                     hex(substr($rgb, 0, 2)),
                     hex(substr($rgb, 2, 2)),
                     hex(substr($rgb, 4, 2)));
  }
  
  sub ansi24bfg { goto &rgb_to_ansi24b_fg_code }
  
  sub rgb_to_ansi24b_bg_code {
      my ($rgb) = @_;
  
      return sprintf("\e[48;2;%d;%d;%dm",
                     hex(substr($rgb, 0, 2)),
                     hex(substr($rgb, 2, 2)),
                     hex(substr($rgb, 4, 2)));
  }
  
  sub ansi24bbg { goto &rgb_to_ansi24b_bg_code }
  
  our $_use_termdetsw = 1;
  our $_color_depth; # cache, can be set during testing
  sub _color_depth {
      unless (defined $_color_depth) {
          {
              if (defined $ENV{COLOR} && !$ENV{COLOR}) {
                  $_color_depth = 0;
                  last;
              }
              if (defined $ENV{COLOR_DEPTH}) {
                  $_color_depth = $ENV{COLOR_DEPTH};
                  last;
              }
              if ($_use_termdetsw) {
                  eval { require Term::Detect::Software };
                  if (!$@) {
                      $_color_depth = Term::Detect::Software::detect_terminal_cached()->{color_depth};
                      last;
                  }
              }
              # simple heuristic
              if ($ENV{KONSOLE_DBUS_SERVICE}) {
                  $_color_depth = 2**24;
                  last;
              }
              # safe value
              $_color_depth = 16;
          }
      };
      $_color_depth;
  }
  
  sub rgb_to_ansi_fg_code {
      my ($rgb) = @_;
      my $cd = _color_depth();
      if ($cd >= 2**24) {
          rgb_to_ansi24b_fg_code($rgb);
      } elsif ($cd >= 256) {
          rgb_to_ansi256_fg_code($rgb);
      } elsif ($cd >= 16) {
          rgb_to_ansi16_fg_code($rgb);
      } else {
          "";
      }
  }
  
  sub ansifg { goto &rgb_to_ansi_fg_code }
  
  sub rgb_to_ansi_bg_code {
      my ($rgb) = @_;
      my $cd = _color_depth();
      if ($cd >= 2**24) {
          rgb_to_ansi24b_bg_code($rgb);
      } elsif ($cd >= 256) {
          rgb_to_ansi256_bg_code($rgb);
      } else {
          rgb_to_ansi16_bg_code($rgb);
      }
  }
  
  sub ansibg { goto &rgb_to_ansi_bg_code }
  
  1;
  # ABSTRACT: Routines for dealing with ANSI colors
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Color::ANSI::Util - Routines for dealing with ANSI colors
  
  =head1 VERSION
  
  This document describes version 0.15 of Color::ANSI::Util (from Perl distribution Color-ANSI-Util), released on 2016-10-04.
  
  =head1 SYNOPSIS
  
   use Color::ANSI::Util qw(
       ansifg
       ansibg
   );
  
   say ansifg("f0c010"); # => "\e[33;1m" (on 16-color terminal)
                         # => "\e[38;5;11m" (on 256-color terminal)
                         # => "\e[38;2;240;192;16m" (on 24-bit-color terminal)
  
   say ansibg("ff5f87"); # => "\e[47m" (on 16-color terminal)
                         # => "\e[48;5;7m" (on 256-color terminal)
                         # => "\e[48;2;255;95;135m" (on 24-bit-color terminal)
  
  There are a bunch of other exportable functions too, mostly for converting
  between RGB and ANSI color (16/256/24bit color depth).
  
  =head1 DESCRIPTION
  
  This module provides routines for dealing with ANSI colors. The two main
  functions are C<ansifg> and C<ansibg>. With those functions, you can specify
  colors in RGB and let it output the correct ANSI color escape code according to
  the color depth support of the terminal (whether 16-color, 256-color, or 24bit).
  There are other functions to convert RGB to ANSI in specific color depths, or
  reverse functions to convert from ANSI to RGB codes.
  
  Keywords: xterm, xterm-256color, terminal
  
  =head1 BUGS/NOTES
  
  Algorithm for finding closest indexed color from RGB color currently not very
  efficient. Probably can add some threshold square distance, below which we can
  shortcut to the final answer.
  
  =head1 FUNCTIONS
  
  =head2 ansi16_to_rgb($color) => STR
  
  Convert ANSI-16 color to RGB. C<$color> is number from 0-15, or color names
  "black", "red", "green", "yellow", "blue", "magenta", "cyan", "white" with
  "bold" to indicate bold/bright. Return 6-hexdigit, e.g. "ff00cc".
  
  Die on invalid input.
  
  =head2 rgb_to_ansi16($color) => INT
  
  Convert RGB to ANSI-16 color. C<$color> is 6-hexdigit RGB color like "ff00cc".
  Will pick the closest color. Return number from 0-15.
  
  Die on invalid input.
  
  =head2 ansi256_to_rgb($color) => STR
  
  Convert ANSI-256 color to RGB. C<$color> is a number from 0-255. Return
  6-hexdigit, e.g. "ff00cc".
  
  Die on invalid input.
  
  =head2 rgb_to_ansi256($color) => INT
  
  Convert RGB to ANSI-256 color. C<$color> is 6-hexdigit RGB color like "ff00cc".
  Will pick the closest color. Return number between 0-255.
  
  Die on invalid input.
  
  =head2 rgb_to_ansi16_fg_code($rgb) => STR
  
  =head2 ansi16fg($rgb) => STR
  
  Alias for rgb_to_ansi16_fg_code().
  
  =head2 rgb_to_ansi16_bg_code($rgb) => STR
  
  =head2 ansi16bg($rgb) => STR
  
  Alias for rgb_to_ansi16_bg_code().
  
  =head2 rgb_to_ansi256_fg_code($rgb) => STR
  
  =head2 ansi256fg($rgb) => STR
  
  Alias for rgb_to_ansi256_fg_code().
  
  =head2 rgb_to_ansi256_bg_code($rgb) => STR
  
  =head2 ansi256bg($rgb) => STR
  
  Alias for rgb_to_ansi256_bg_code().
  
  =head2 rgb_to_ansi24b_fg_code($rgb) => STR
  
  Return ANSI escape code to set 24bit foreground color. Supported by Konsole and
  Yakuake.
  
  =head2 ansi24bfg($rgb) => STR
  
  Alias for rgb_to_ansi24b_fg_code().
  
  =head2 rgb_to_ansi24b_bg_code($rgb) => STR
  
  Return ANSI escape code to set 24bit background color. Supported by Konsole and
  Yakuake.
  
  =head2 ansi24bbg($rgb) => STR
  
  Alias for rgb_to_ansi24b_bg_code().
  
  =head2 rgb_to_ansi_fg_code($rgb) => STR
  
  Return ANSI escape code to set 24bit/256/16 foreground color (which color depth
  used is determined by C<COLOR_DEPTH> environment setting or from
  L<Term::Detect::Software> if that module is available). In other words, this
  function automatically chooses rgb_to_ansi{24b,256,16}_fg_code().
  
  =head2 ansifg($rgb) => STR
  
  Alias for rgb_to_ansi_fg_code().
  
  =head2 rgb_to_ansi_bg_code($rgb) => STR
  
  Return ANSI escape code to set 24bit/256/16 background color (which color depth
  used is determined by C<COLOR_DEPTH> environment setting or from
  Term::Detect::Software if that module is available). In other words, this
  function automatically chooses rgb_to_ansi{24b,256,16}_bg_code().
  
  =head2 ansibg($rgb) => STR
  
  Alias for rgb_to_ansi_bg_code().
  
  =head1 ENVIRONMENT
  
  =head2 COLOR => bool
  
  Can be used to explicitly disable color by setting it to 0.
  
  Observed by: ansi{fg,bg}.
  
  =head2 COLOR_DEPTH => INT
  
  Can be used to explicitly set color depth instead of trying to detect
  appropriate color depth.
  
  Observed by: ansi{fg,bg}.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Color-ANSI-Util>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Color-ANSI-Util>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Color-ANSI-Util>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Term::ANSIColor>
  
  L<http://en.wikipedia.org/wiki/ANSI_escape_code>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
COLOR_ANSI_UTIL

    $main::fatpacked{"Color/RGB/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'COLOR_RGB_UTIL';
  package Color::RGB::Util;
  
  our $DATE = '2015-01-03'; # DATE
  our $VERSION = '0.58'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  #use List::Util qw(min);
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         mix_2_rgb_colors
                         rand_rgb_color
                         reverse_rgb_color
                         rgb2grayscale
                         rgb2sepia
                         rgb_luminance
                         tint_rgb_color
                 );
  
  sub mix_2_rgb_colors {
      my ($rgb1, $rgb2, $pct) = @_;
  
      $pct //= 0.5;
  
      $rgb1 =~ /^#?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/o
          or die "Invalid rgb1 color, must be in 'ffffff' form";
      my $r1 = hex($1);
      my $g1 = hex($2);
      my $b1 = hex($3);
      $rgb2 =~ /^#?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/o
          or die "Invalid rgb2 color, must be in 'ffffff' form";
      my $r2 = hex($1);
      my $g2 = hex($2);
      my $b2 = hex($3);
  
      return sprintf("%02x%02x%02x",
                     $r1 + $pct*($r2-$r1),
                     $g1 + $pct*($g2-$g1),
                     $b1 + $pct*($b2-$b1),
                 );
  }
  
  sub rand_rgb_color {
      my ($rgb1, $rgb2) = @_;
  
      $rgb1 //= '000000';
      $rgb1 =~ /^#?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/o
          or die "Invalid rgb1 color, must be in 'ffffff' form";
      my $r1 = hex($1);
      my $g1 = hex($2);
      my $b1 = hex($3);
      $rgb2 //= 'ffffff';
      $rgb2 =~ /^#?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/o
          or die "Invalid rgb2 color, must be in 'ffffff' form";
      my $r2 = hex($1);
      my $g2 = hex($2);
      my $b2 = hex($3);
  
      return sprintf("%02x%02x%02x",
                     $r1 + rand()*($r2-$r1+1),
                     $g1 + rand()*($g2-$g1+1),
                     $b1 + rand()*($b2-$b1+1),
                 );
  }
  
  sub rgb2grayscale {
      my ($rgb) = @_;
  
      $rgb =~ /^#?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/o
          or die "Invalid rgb color, must be in 'ffffff' form";
      my $r = hex($1);
      my $g = hex($2);
      my $b = hex($3);
  
      # basically we just average the R, G, B
      my $avg = int(($r + $g + $b)/3);
      return sprintf("%02x%02x%02x", $avg, $avg, $avg);
  }
  
  sub rgb2sepia {
      my ($rgb) = @_;
  
      $rgb =~ /^#?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/o
          or die "Invalid rgb color, must be in 'ffffff' form";
      my $r = hex($1);
      my $g = hex($2);
      my $b = hex($3);
  
      # reference: http://www.techrepublic.com/blog/howdoi/how-do-i-convert-images-to-grayscale-and-sepia-tone-using-c/120
      my $or = ($r*0.393) + ($g*0.769) + ($b*0.189);
      my $og = ($r*0.349) + ($g*0.686) + ($b*0.168);
      my $ob = ($r*0.272) + ($g*0.534) + ($b*0.131);
      for ($or, $og, $ob) { $_ = 255 if $_ > 255 }
      return sprintf("%02x%02x%02x", $or, $og, $ob);
  }
  
  sub reverse_rgb_color {
      my ($rgb) = @_;
  
      $rgb =~ /^#?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/o
          or die "Invalid rgb color, must be in 'ffffff' form";
      my $r = hex($1);
      my $g = hex($2);
      my $b = hex($3);
  
      return sprintf("%02x%02x%02x", 255-$r, 255-$g, 255-$b);
  }
  
  sub _rgb_luminance {
      my ($r, $g, $b) = @_;
      0.2126*$r/255 + 0.7152*$g/255 + 0.0722*$b/255;
  }
  
  sub rgb_luminance {
      my ($rgb) = @_;
  
      $rgb =~ /^#?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/o
          or die "Invalid rgb color, must be in 'ffffff' form";
      my $r = hex($1);
      my $g = hex($2);
      my $b = hex($3);
  
      return _rgb_luminance($r, $g, $b);
  }
  
  sub tint_rgb_color {
      my ($rgb1, $rgb2, $pct) = @_;
  
      $pct //= 0.5;
  
      $rgb1 =~ /^#?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/o
          or die "Invalid rgb color, must be in 'ffffff' form";
      my $r1 = hex($1);
      my $g1 = hex($2);
      my $b1 = hex($3);
      $rgb2 =~ /^#?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/o
          or die "Invalid tint color, must be in 'ffffff' form";
      my $r2 = hex($1);
      my $g2 = hex($2);
      my $b2 = hex($3);
  
      my $lum = _rgb_luminance($r1, $g1, $b1);
  
      return sprintf("%02x%02x%02x",
                     $r1 + $pct*($r2-$r1)*$lum,
                     $g1 + $pct*($g2-$g1)*$lum,
                     $b1 + $pct*($b2-$b1)*$lum,
                 );
  }
  
  1;
  # ABSTRACT: Utilities related to RGB colors
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Color::RGB::Util - Utilities related to RGB colors
  
  =head1 VERSION
  
  This document describes version 0.58 of Color::RGB::Util (from Perl distribution Color-RGB-Util), released on 2015-01-03.
  
  =head1 SYNOPSIS
  
   use Color::RGB::Util qw(
       mix_2_rgb_colors
       rand_rgb_color
       rgb2grayscale
       rgb2sepia
       reverse_rgb_color
       rgb_luminance
   );
  
   say mix_2_rgb_colors('#ff0000', '#ffffff');     # pink (red + white)
   say mix_2_rgb_colors('ff0000', 'ffffff', 0.75); # pink with a whiter shade
  
   say rand_rgb_color();
   say rand_rgb_color('000000', '333333');         # limit range
  
   say rgb2grayscale('0033CC');                    # => 555555
  
   say rgb2sepia('0033CC');                        # => 4d4535
  
   say reverse_rgb_color('0033CC');                # => ffcc33
  
   say rgb_luminance('d090aa');                    # => ffcc33
  
  =head1 DESCRIPTION
  
  =head1 FUNCTIONS
  
  None are exported by default, but they are exportable.
  
  =head2 mix_2_rgb_colors($rgb1, $rgb2, $pct) => STR
  
  Mix 2 RGB colors. C<$pct> is a number between 0 and 1, by default 0.5 (halfway),
  the closer to 1 the closer the resulting color to C<$rgb2>.
  
  =head2 rand_rgb_color([$low_limit[, $high_limit]]) => STR
  
  Generate a random RGB color. You can specify the limit. Otherwise, they default
  to the full range (000000 to ffffff).
  
  =head2 rgb2grayscale($rgb) => RGB
  
  Convert C<$rgb> to grayscale RGB value.
  
  =head2 rgb2sepia($rgb) => RGB
  
  Convert C<$rgb> to sepia tone RGB value.
  
  =head2 reverse_rgb_color($rgb) => RGB
  
  Reverse C<$rgb>.
  
  =head2 rgb_luminance($rgb) => NUM
  
  Calculate standard/objective luminance from RGB value using this formula:
  
   (0.2126*R) + (0.7152*G) + (0.0722*B)
  
  where R, G, and B range from 0 to 1. Return a number from 0 to 1.
  
  =head2 tint_rgb_color($rgb, $tint_rgb, $pct) => RGB
  
  Tint C<$rgb> with C<$tint_rgb>. $pct is by default 0.5. It is similar to mixing,
  but the less luminance the color is the less it is tinted with the tint color.
  This has the effect of black color still being black instead of becoming tinted.
  
  =head1 SEE ALSO
  
  L<Color::ANSI::Util>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Color-RGB-Util>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-SHARYANTO-Color-Util>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Color-RGB-Util>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
COLOR_RGB_UTIL

    $main::fatpacked{"Color/Theme.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'COLOR_THEME';
  package Color::Theme;
  
  our $DATE = '2014-12-11'; # DATE
  our $VERSION = '0.01'; # VERSION
  
  1;
  # ABSTRACT: Color theme structure
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Color::Theme - Color theme structure
  
  =head1 VERSION
  
  This document describes version 0.01 of Color::Theme (from Perl distribution Color-Theme), released on 2014-12-11.
  
  =head1 DESCRIPTION
  
  This module specifies a structure for color themes. The distribution also comes
  with utility routines and roles for managing color themes in applications.
  
  =head1 SPECIFICATION
  
  Color theme is a L<DefHash> containing these keys: C<v> (float, should be 1.1),
  C<name> (str), C<summary> (str), C<no_color> (bool, should be set to 1 if this
  is a color theme without any colors), and C<colors> (hash, the colors for items;
  hash keys are item names and hash values are color values).
  
  A color value should be a scalar containing a single color code which is
  6-hexdigit RGB color (e.g. C<ffc0c0>), or a hashref containing multiple color
  codes, or a coderef which should produce a color code (or a hash of color
  codes).
  
  Multiple color codes are used to support foreground/background values or ANSI
  color codes that are not representable by RGB, among other things. The keys are:
  C<fg> (RGB value for foreground), C<bg> (RGB value for background), C<ansi_fg>
  (ANSI color escape code for foreground), C<ansi_bg> (ANSI color escape code for
  background). Future keys like C<css> can be defined.
  
  Allowing coderef as color allows for flexibility, e.g. for doing gradation
  border color, random color, etc. See, for example,
  L<Text::ANSITable::ColorTheme::Demo>. Code will be called with C<< ($self,
  %args) >> where C<%args> contains various information, like C<name> (the item
  name being requested), etc. In Text::ANSITable, you can get the row position
  from C<< $self->{_draw}{y} >>.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Color-Theme>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Color-Theme>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Color-Theme>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
COLOR_THEME

    $main::fatpacked{"Color/Theme/Role.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'COLOR_THEME_ROLE';
  package Color::Theme::Role;
  
  our $DATE = '2014-12-11'; # DATE
  our $VERSION = '0.01'; # VERSION
  
  use 5.010001;
  use Moo::Role;
  
  has color_theme_args  => (is => 'rw', default => sub { {} });
  has _all_color_themes => (is => 'rw');
  
  sub color_theme_module_prefix {
      my $self = shift;
  
      (ref($self) ? ref($self) : $self ) . '::ColorTheme';
  }
  
  sub color_theme {
      my $self = shift;
  
      if (!@_) { return $self->{color_theme} }
      my $ct = shift;
  
      my $p2 = "";
      if (!ref($ct)) {
          $p2 = " named $ct";
          $ct = $self->get_color_theme($ct);
      }
  
      my $err;
      if (!$ct->{no_color} && !$self->use_color) {
          $err = "color theme uses color but use_color is set to false";
      }
      die "Can't select color theme$p2: $err" if $err;
  
      $self->{color_theme} = $ct;
  }
  
  sub get_color_theme {
      my ($self, $ct) = @_;
  
      my $prefix = $self->color_theme_module_prefix;
      my $cts;
      my $pkg;
      if ($ct =~ s/(.+):://) {
          $pkg = "$prefix\::$1";
          my $pkgp = $pkg; $pkgp =~ s!::!/!g;
          require "$pkgp.pm";
          no strict 'refs';
          $cts = \%{"$pkg\::color_themes"};
      } else {
          #$cts = $self->list_color_themes(1);
          die "Please use SubPackage::name to choose color theme, ".
              "use list_color_themes() to list available themes";
      }
      $cts->{$ct} or die "Unknown color theme name '$ct'".
          ($pkg ? " in package $pkg" : "");
      ($cts->{$ct}{v} // 1.0) == 1.1 or die "Color theme '$ct' is too old ".
          "(v < 1.1)". ($pkg ? ", please upgrade $pkg" : "");
      $cts->{$ct};
  }
  
  sub get_theme_color {
      my ($self, $item_name) = @_;
  
      return undef if $self->{color_theme}{no_color};
      $self->{color_theme}{colors}{$item_name};
  }
  
  sub get_theme_color_as_rgb {
      my ($self, $item_name, $args) = @_;
      my $c = $self->get_theme_color($item_name);
      return undef unless defined($c);
  
      # resolve coderef color
      if (ref($c) eq 'CODE') {
          $args //= {};
          $c = $c->($self, %$args);
      }
  
      $c;
  }
  
  sub list_color_themes {
      require Module::List;
      require Module::Load;
  
      my ($self, $detail) = @_;
  
      my $prefix = $self->color_theme_module_prefix;
      my $all_ct = $self->_all_color_themes;
  
      if (!$all_ct) {
          my $mods = Module::List::list_modules("$prefix\::",
                                                {list_modules=>1, recurse=>1});
          no strict 'refs';
          $all_ct = {};
          for my $mod (sort keys %$mods) {
              #$log->tracef("Loading color theme module '%s' ...", $mod);
              Module::Load::load($mod);
              my $ct = \%{"$mod\::color_themes"};
              for (keys %$ct) {
                  my $cutmod = $mod;
                  $cutmod =~ s/^\Q$prefix\E:://;
                  my $name = "$cutmod\::$_";
                  $ct->{$_}{name} = $name;
                  $all_ct->{$name} = $ct->{$_};
              }
          }
          $self->_all_color_themes($all_ct);
      }
  
      if ($detail) {
          return $all_ct;
      } else {
          return sort keys %$all_ct;
      }
  }
  
  1;
  # ABSTRACT: Role for class wanting to support color themes
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Color::Theme::Role - Role for class wanting to support color themes
  
  =head1 VERSION
  
  This document describes version 0.01 of Color::Theme::Role (from Perl distribution Color-Theme), released on 2014-12-11.
  
  =head1 DESCRIPTION
  
  This role is for class that wants to support color themes. Color theme is
  represented as a structure according to the specification described in
  L<Color::Theme>.
  
  B<Color theme module.> Color themes are put in modules under
  C<Color::Theme::Themes::> (configurable using C<color_theme_module_prefix>
  attribute). Each color theme modules can contain one or more color themes. The
  module must define a package global variable named C<%color_themes> that contain
  color themes keyed by their names. Example:
  
   package MyProject::ColorThemes::Default;
  
   our %color_themes = (
       no_color => {
           v => 1.1,
           summary => 'Special theme that means no color',
           colors => {
           },
           no_color => 1,
       },
  
       default => {
           v => 1.1,
           summary => 'Default color theme',
           colors => {
           },
       },
   );
  
  =head1 ATTRIBUTES
  
  =head2 color_theme => HASH
  
  Get/set color theme.
  
  =head2 color_theme_args => HASH
  
  Get/set arguments for color theme. This can be
  
  =head2 color_theme_module_prefix => STR (default: CLASS + C<::ColorTheme::>)
  
  Each project should have its own class prefix. For example, L<Text::ANSITable>
  has its color themes in C<Text::ANSITable::ColorTheme::> namespace,
  L<Data::Dump::Color> has them in C<Data::Dump::Color::ColorTheme::> and so on.
  
  =head1 METHODS
  
  =head2 $cl->list_color_themes($detail) => array
  
  Will search packages under C<color_theme_module_prefix> for color theme modules,
  then list all color themes for each module. If, for example, the color theme
  modules found are C<MyProject::ColorTheme::Default> and
  C<MyProject::ColorTheme::Extras>, will return something like:
  
   ['Default::theme1', 'Default::theme2', 'Extras::extra3', 'Extras::extra4']
  
  =head2 $cl->get_color_theme($name) => hash
  
  Get color theme hash data structure by name. Note that name must be prefixed by
  color theme module name (minus the C<color_theme_module_prefix>).
  
  =head2 $cl->get_theme_color($item_name) => str
  
  Get an item's color value from the current color theme (will get from the color
  theme's C<colors> hash, then the C<$item_name> key from that hash). If color
  value is a coderef, it will be
  
  =head2 $cl->get_theme_color_as_rgb($item_name, \%args) => str|hash
  
  Like C<get_theme_color>, but if the resulting color value is a coderef, will
  call that coderef, passing C<%args> to it and returning the value.
  
  =head1 SEE ALSO
  
  L<Color::Theme>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Color-Theme>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Color-Theme>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Color-Theme>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
COLOR_THEME_ROLE

    $main::fatpacked{"Color/Theme/Role/ANSI.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'COLOR_THEME_ROLE_ANSI';
  package Color::Theme::Role::ANSI;
  
  our $DATE = '2014-12-11'; # DATE
  our $VERSION = '0.01'; # VERSION
  
  use 5.010001;
  use Moo::Role;
  
  use Color::ANSI::Util ();
  with 'Color::Theme::Role';
  with 'Term::App::Role::Attrs';
  
  sub theme_color_to_ansi {
      my ($self, $c, $args, $is_bg) = @_;
  
      # empty? skip
      return '' if !defined($c) || !length($c);
  
      # resolve coderef color
      if (ref($c) eq 'CODE') {
          $args //= {};
          $c = $c->($self, %$args);
      }
  
      my $coldepth = $self->color_depth;
  
      if ($coldepth >= 2**24) {
          if (ref $c) {
              my $ansifg = $c->{ansi_fg};
              $ansifg //= Color::ANSI::Util::ansi24bfg($c->{fg})
                  if defined $c->{fg};
              $ansifg //= "";
              my $ansibg = $c->{ansi_bg};
              $ansibg //= Color::ANSI::Util::ansi24bbg($c->{bg})
                  if defined $c->{bg};
              $ansibg //= "";
              $c = $ansifg . $ansibg;
          } else {
              $c = $is_bg ? Color::ANSI::Util::ansi24bbg($c) :
                  Color::ANSI::Util::ansi24bfg($c);
          }
      } elsif ($coldepth >= 256) {
          if (ref $c) {
              my $ansifg = $c->{ansi_fg};
              $ansifg //= Color::ANSI::Util::ansi256fg($c->{fg})
                  if defined $c->{fg};
              $ansifg //= "";
              my $ansibg = $c->{ansi_bg};
              $ansibg //= Color::ANSI::Util::ansi256bg($c->{bg})
                  if defined $c->{bg};
              $ansibg //= "";
              $c = $ansifg . $ansibg;
          } else {
              $c = $is_bg ? Color::ANSI::Util::ansi256bg($c) :
                  Color::ANSI::Util::ansi256fg($c);
          }
      } else {
          if (ref $c) {
              my $ansifg = $c->{ansi_fg};
              $ansifg //= Color::ANSI::Util::ansi16fg($c->{fg})
                  if defined $c->{fg};
              $ansifg //= "";
              my $ansibg = $c->{ansi_bg};
              $ansibg //= Color::ANSI::Util::ansi16bg($c->{bg})
                  if defined $c->{bg};
              $ansibg //= "";
              $c = $ansifg . $ansibg;
          } else {
              $c = $is_bg ? Color::ANSI::Util::ansi16bg($c) :
                  Color::ANSI::Util::ansi16fg($c);
          }
      }
      $c;
  }
  
  sub get_theme_color_as_ansi {
      my ($self, $item_name, $args) = @_;
      $self->theme_color_to_ansi(
          $self->get_theme_color($item_name),
          {name=>$item_name, %{ $args // {} }},
          $item_name =~ /_bg$/,
      );
  }
  
  1;
  # ABSTRACT: Role for class wanting to support color themes (ANSI support)
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Color::Theme::Role::ANSI - Role for class wanting to support color themes (ANSI support)
  
  =head1 VERSION
  
  This document describes version 0.01 of Color::Theme::Role::ANSI (from Perl distribution Color-Theme), released on 2014-12-11.
  
  =head1 DESCRIPTION
  
  This role consumes L<Color::Theme::Role> and L<Term::App::Role::Attrs>.
  
  =head1 METHODS
  
  =head2 $cl->theme_color_to_ansi($color) => str
  
  =head2 $cl->get_theme_color_as_ansi($item_name, \%args) => str
  
  Like C<get_theme_color>, but if the resulting color value is a coderef, will
  call that coderef, passing C<%args> to it and returning the value. Also, will
  convert color theme to ANSI color escape codes.
  
  When converting to ANSI code, will consult C<color_depth> from
  L<Term::App::Role::Attr>.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Color-Theme>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Color-Theme>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Color-Theme>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
COLOR_THEME_ROLE_ANSI

    $main::fatpacked{"Color/Theme/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'COLOR_THEME_UTIL';
  package Color::Theme::Util;
  
  our $DATE = '2014-12-11'; # DATE
  our $VERSION = '0.01'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(create_color_theme_transform);
  
  sub create_color_theme_transform {
      my ($basect, $func) = @_;
  
      my $derivedct = {};
  
      for my $cn (keys %{ $basect->{colors} }) {
          my $cv = $basect->{colors}{$cn};
  
          if ($cv) {
              $derivedct->{colors}{$cn} = sub {
                  my ($self, %args) = @_;
                  my $basec = $basect->{colors}{$cn};
                  if (ref($basec) eq 'CODE') {
                      $basec = $basec->($self, name=>$cn, %args);
                  }
                  if ($basec) {
                      if (ref($basec) eq 'ARRAY') {
                          $basec = [map {defined($_) && /^#?[0-9A-Fa-f]{6}$/ ?
                                             $func->($_) : $_} @$basec];
                      } else {
                          for ($basec) {
                              $_ = defined($_) && /^#?[0-9A-Fa-f]{6}$/ ?
                                  $func->($_) : $_;
                          }
                      }
                  }
                  return $basec;
              };
          } else {
              #$derivedct->{colors}{$cn} = $cv;
          }
      }
      $derivedct;
  }
  
  1;
  # ABSTRACT: Utility routines related to color themes
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Color::Theme::Util - Utility routines related to color themes
  
  =head1 VERSION
  
  This document describes version 0.01 of Color::Theme::Util (from Perl distribution Color-Theme), released on 2014-12-11.
  
  =head1 FUNCTIONS
  
  =head2 create_color_theme_transform($basect, $func) => HASH
  
  Create a new color theme by applying transform function C<$func> (code) to base
  theme C<$basetheme> (hash). For example if you want to create a reddish
  L<Text::ANSITable> color theme from the default theme:
  
   use Color::RGB::Util qw(mix_2_rgb_colors);
   use Color::Theme::Util qw(create_color_theme_transform);
   use Text::ANSITable;
  
   my $basetheme = Text::ANSITable->get_color_theme("Default::default_gradation");
   my $redtheme  = create_color_theme_transform(
       $basetheme, sub { mix_2_rgb_colors(shift, 'ff0000') });
  
   # use the color theme
   my $t = Text::ANSITable->new;
   $t->color_theme($redtheme);
  
  =head1 SEE ALSO
  
  L<Color::Theme>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Color-Theme>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Color-Theme>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Color-Theme>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
COLOR_THEME_UTIL

    $main::fatpacked{"Complete/Bash.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'COMPLETE_BASH';
  package Complete::Bash;
  
  our $DATE = '2016-12-28'; # DATE
  our $VERSION = '0.31'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         point
                         parse_cmdline
                         join_wordbreak_words
                         format_completion
                 );
  
  our %SPEC;
  
  $SPEC{':package'} = {
      v => 1.1,
      summary => 'Completion routines for bash shell',
  };
  
  sub _expand_tilde {
      my ($user, $slash) = @_;
      my @ent;
      if (length $user) {
          @ent = getpwnam($user);
      } else {
          @ent = getpwuid($>);
          $user = $ent[0];
      }
      return $ent[7] . $slash if @ent;
      "~$user$slash"; # return as-is when failed
  }
  
  sub _add_unquoted {
      no warnings 'uninitialized';
  
      my ($word, $is_cur_word, $after_ws) = @_;
  
      #say "D:add_unquoted word=$word is_cur_word=$is_cur_word after_ws=$after_ws";
  
      $word =~ s!^(~)(\w*)(/|\z) |  # 1) tilde  2) username  3) optional slash
                 \\(.)           |  # 4) escaped char
                 \$(\w+)            # 5) variable name
                !
                    $1 ? (not($after_ws) || $is_cur_word ? "$1$2$3" : _expand_tilde($2, $3)) :
                        $4 ? $4 :
                            ($is_cur_word ? "\$$5" : $ENV{$5})
                                !egx;
      $word;
  }
  
  sub _add_double_quoted {
      no warnings 'uninitialized';
  
      my ($word, $is_cur_word) = @_;
  
      $word =~ s!\\(.)           |  # 1) escaped char
                 \$(\w+)            # 2) variable name
                !
                    $1 ? $1 :
                        ($is_cur_word ? "\$$2" : $ENV{$2})
                            !egx;
      $word;
  }
  
  sub _add_single_quoted {
      my $word = shift;
      $word =~ s/\\(.)/$1/g;
      $word;
  }
  
  $SPEC{point} = {
      v => 1.1,
      summary => 'Return line with point marked by a marker',
      description => <<'_',
  
  This is a utility function useful for testing/debugging. `parse_cmdline()`
  expects a command-line and a cursor position (`$line`, `$point`). This routine
  expects `$line` with a marker character (by default it's the caret, `^`) and
  return (`$line`, `$point`) to feed to `parse_cmdline()`.
  
  Example:
  
      point("^foo") # => ("foo", 0)
      point("fo^o") # => ("foo", 2)
  
  _
      args_as => 'array',
      args => {
          cmdline => {
              summary => 'Command-line which contains a marker character',
              schema => 'str*',
              pos => 0,
          },
          marker => {
              summary => 'Marker character',
              schema => ['str*', len=>1],
              default => '^',
              pos => 1,
          },
      },
      result_naked => 1,
  };
  sub point {
      my ($line, $marker) = @_;
      $marker //= '^';
  
      my $point = index($line, $marker);
      die "BUG: No marker '$marker' in line <$line>" unless $point >= 0;
      $line =~ s/\Q$marker\E//;
      ($line, $point);
  }
  
  $SPEC{parse_cmdline} = {
      v => 1.1,
      summary => 'Parse shell command-line for processing by completion routines',
      description => <<'_',
  
  This function basically converts `COMP_LINE` (str) and `COMP_POINT` (int) into
  something like (but not exactly the same as) `COMP_WORDS` (array) and
  `COMP_CWORD` (int) that bash supplies to shell functions.
  
  The differences with bash are (these differences are mostly for parsing
  convenience for programs that use this routine; this comparison is made against
  bash versions 4.2-4.3):
  
  1) quotes and backslashes are stripped (bash's `COMP_WORDS` contains all the
     quotes and backslashes);
  
  2) quoted phrase that contains spaces, or phrase that contains escaped spaces is
     parsed as a single word. For example:
  
      command "First argument" Second\ argument
  
     bash would split it as (represented as Perl):
  
      ["command", "\"First", "argument\"", "Second\\", "argument"]
  
     which is not very convenient. We parse it into:
  
      ["command", "First argument", "Second argument"]
  
  3) variables are substituted with their values from environment variables except
     for the current word (`COMP_WORDS[COMP_CWORD]`) (bash does not perform
     variable substitution for `COMP_WORDS`). However, note that special shell
     variables that are not environment variables like `$0`, `$_`, `$IFS` will not
     be replaced correctly because bash does not export those variables for us.
  
  4) tildes (`~`) are expanded with user's home directory except for the current
     word (bash does not perform tilde expansion for `COMP_WORDS`);
  
  Caveats:
  
  * Like bash, we group non-whitespace word-breaking characters into its own word.
    By default `COMP_WORDBREAKS` is:
  
      "'@><=;|&(:
  
    So if raw command-line is:
  
      command --foo=bar http://example.com:80 mail@example.org Foo::Bar
  
    then the parse result will be:
  
      ["command", "--foo", "=", "bar", "http", ":", "//example.com", ":", "80", "Foo", "::", "Bar"]
  
    which is annoying sometimes. But we follow bash here so we can more easily
    accept input from a joined `COMP_WORDS` if we write completion bash functions,
    e.g. (in the example, `foo` is a Perl script):
  
      _foo ()
      {
          local words=(${COMP_CWORDS[@]})
          # add things to words, etc
          local point=... # calculate the new point
          COMPREPLY=( `COMP_LINE="foo ${words[@]}" COMP_POINT=$point foo` )
      }
  
    To avoid these word-breaking characters to be split/grouped, we can escape
    them with backslash or quote them, e.g.:
  
      command "http://example.com:80" Foo\:\:Bar
  
    which bash will parse as:
  
      ["command", "\"http://example.com:80\"", "Foo\\:\\:Bar"]
  
    and we parse as:
  
      ["command", "http://example.com:80", "Foo::Bar"]
  
  * Due to the way bash parses the command line (see above), the two below are
    equivalent:
  
      % cmd --foo=bar
      % cmd --foo = bar
  
  Because they both expand to `['--foo', '=', 'bar']`. But obviously
  <pm:Getopt::Long> does not regard the two as equivalent.
  
  _
      args_as => 'array',
      args => {
          cmdline => {
              summary => 'Command-line, defaults to COMP_LINE environment',
              schema => 'str*',
              pos => 0,
          },
          point => {
              summary => 'Point/position to complete in command-line, '.
                  'defaults to COMP_POINT',
              schema => 'int*',
              pos => 1,
          },
          opts => {
              summary => 'Options',
              schema => 'hash*',
              description => <<'_',
  
  Optional. Known options:
  
  * `truncate_current_word` (bool). If set to 1, will truncate current word to the
    position of cursor, for example (`^` marks the position of cursor):
    `--vers^oo` to `--vers` instead of `--versoo`. This is more convenient when
    doing tab completion.
  
  _
              schema => 'hash*',
              pos => 2,
          },
      },
      result => {
          schema => ['array*', len=>2],
          description => <<'_',
  
  Return a 2-element array: `[$words, $cword]`. `$words` is array of str,
  equivalent to `COMP_WORDS` provided by bash to shell functions. `$cword` is an
  integer, roughly equivalent to `COMP_CWORD` provided by bash to shell functions.
  The word to be completed is at `$words->[$cword]`.
  
  Note that COMP_LINE includes the command name. If you want the command-line
  arguments only (like in `@ARGV`), you need to strip the first element from
  `$words` and reduce `$cword` by 1.
  
  
  _
      },
      result_naked => 1,
      links => [
      ],
  };
  sub parse_cmdline {
      no warnings 'uninitialized';
      my ($line, $point, $opts) = @_;
  
      $line  //= $ENV{COMP_LINE};
      $point //= $ENV{COMP_POINT} // 0;
  
      die "$0: COMP_LINE not set, make sure this script is run under ".
          "bash completion (e.g. through complete -C)\n" unless defined $line;
  
      #say "D:line=<$line> point=<$point>";
  
      my @words;
      my $cword;
      my $pos = 0;
      my $pos_min_ws = 0;
      my $after_ws = 1; # XXX what does this variable mean?
      my $chunk;
      my $add_blank;
      my $is_cur_word;
      $line =~ s!(                                                         # 1) everything
                    (")((?: \\\\|\\"|[^"])*)(?:"|\z)(\s*)               |  #  2) open "  3) content  4) space after
                    (')((?: \\\\|\\'|[^'])*)(?:'|\z)(\s*)               |  #  5) open '  6) content  7) space after
                    ((?: \\\\|\\"|\\'|\\=|\\\s|[^"'@><=|&\(:\s])+)(\s*) |  #  8) unquoted word  9) space after
                    ([\@><=|&\(:]+) |                                      #  10) non-whitespace word-breaking characters
                    \s+
                )!
                    $pos += length($1);
                    #say "D: \$1=<$1> \$2=<$3> \$3=<$3> \$4=<$4> \$5=<$5> \$6=<$6> \$7=<$7> \$8=<$8> \$9=<$9> \$10=<$10>";
                    #say "D:<$1> pos=$pos, point=$point, cword=$cword, after_ws=$after_ws";
  
                    if ($2 || $5 || defined($8)) {
                        # double-quoted/single-quoted/unquoted chunk
  
                        if (not(defined $cword)) {
                            $pos_min_ws = $pos - length($2 ? $4 : $5 ? $7 : $9);
                            #say "D:pos_min_ws=$pos_min_ws";
                            if ($point <= $pos_min_ws) {
                                $cword = @words - ($after_ws ? 0 : 1);
                            } elsif ($point < $pos) {
                                $cword = @words + 1 - ($after_ws ? 0 : 1);
                                $add_blank = 1;
                            }
                        }
  
                        if ($after_ws) {
                            $is_cur_word = defined($cword) && $cword==@words;
                        } else {
                            $is_cur_word = defined($cword) && $cword==@words-1;
                        }
                        #say "D:is_cur_word=$is_cur_word";
                        $chunk =
                            $2 ? _add_double_quoted($3, $is_cur_word) :
                                $5 ? _add_single_quoted($6) :
                                _add_unquoted($8, $is_cur_word, $after_ws);
                        if ($opts && $opts->{truncate_current_word} &&
                                $is_cur_word && $pos > $point) {
                            $chunk = substr(
                                $chunk, 0, length($chunk)-($pos_min_ws-$point));
                            #say "D:truncating current word to <$chunk>";
                        }
                        if ($after_ws) {
                            push @words, $chunk;
                        } else {
                            $words[-1] .= $chunk;
                        }
                        if ($add_blank) {
                            push @words, '';
                            $add_blank = 0;
                        }
                        $after_ws = ($2 ? $4 : $5 ? $7 : $9) ? 1:0;
  
                    } elsif ($10) {
                        # non-whitespace word-breaking characters
                        push @words, $10;
                        $after_ws = 1;
                    } else {
                        # whitespace
                        $after_ws = 1;
                    }
      !egx;
  
      $cword //= @words;
      $words[$cword] //= '';
  
      [\@words, $cword];
  }
  
  $SPEC{join_wordbreak_words} = {
      v => 1.1,
      summary => 'Post-process parse_cmdline() result by joining some words',
      description => <<'_',
  
  `parse_cmdline()`, like bash, splits some characters that are considered as
  word-breaking characters:
  
      "'@><=;|&(:
  
  So if command-line is:
  
      command -MData::Dump bob@example.org
  
  then they will be parsed as:
  
      ["command", "-MData", "::", "Dump", "bob", '@', "example.org"]
  
  Normally in Perl applications, we want `:`, `@` to be part of word. So this
  routine will convert the above into:
  
      ["command", "-MData::Dump", 'bob@example.org']
  
  _
  };
  sub join_wordbreak_words {
      my ($words, $cword) = @_;
      my $new_words = [];
      my $i = -1;
      while (++$i < @$words) {
          my $w = $words->[$i];
          if ($w =~ /\A[\@=:]+\z/) {
              if (@$new_words and $#$new_words != $cword) {
                  $new_words->[-1] .= $w;
                  $cword-- if $cword >= $i || $cword >= @$new_words;
              } else {
                  push @$new_words, $w;
              }
              if ($i+1 < @$words) {
                  $i++;
                  $new_words->[-1] .= $words->[$i];
                  $cword-- if $cword >= $i || $cword >= @$new_words;
              }
          } else {
              push @$new_words, $w;
          }
      }
      [$new_words, $cword];
  }
  
  $SPEC{format_completion} = {
      v => 1.1,
      summary => 'Format completion for output (for shell)',
      description => <<'_',
  
  Bash accepts completion reply in the form of one entry per line to STDOUT. Some
  characters will need to be escaped. This function helps you do the formatting,
  with some options.
  
  This function accepts completion answer structure as described in the `Complete`
  POD. Aside from `words`, this function also recognizes these keys:
  
  * `as` (str): Either `string` (the default) or `array` (to return array of lines
    instead of the lines joined together). Returning array is useful if you are
    doing completion inside `Term::ReadLine`, for example, where the library
    expects an array.
  
  * `esc_mode` (str): Escaping mode for entries. Either `default` (most
    nonalphanumeric characters will be escaped), `shellvar` (like `default`, but
    dollar sign `$` will not be escaped, convenient when completing environment
    variables for example), `filename` (currently equals to `default`), `option`
    (currently equals to `default`), or `none` (no escaping will be done).
  
  * `path_sep` (str): If set, will enable "path mode", useful for
    completing/drilling-down path. Below is the description of "path mode".
  
    In shell, when completing filename (e.g. `foo`) and there is only a single
    possible completion (e.g. `foo` or `foo.txt`), the shell will display the
    completion in the buffer and automatically add a space so the user can move to
    the next argument. This is also true when completing other values like
    variables or program names.
  
    However, when completing directory (e.g. `/et` or `Downloads`) and there is
    solely a single completion possible and it is a directory (e.g. `/etc` or
    `Downloads`), the shell automatically adds the path separator character
    instead (`/etc/` or `Downloads/`). The user can press Tab again to complete
    for files/directories inside that directory, and so on. This is obviously more
    convenient compared to when shell adds a space instead.
  
    The `path_sep` option, when set, will employ a trick to mimic this behaviour.
    The trick is, if you have a completion array of `['foo/']`, it will be changed
    to `['foo/', 'foo/ ']` (the second element is the first element with added
    space at the end) to prevent bash from adding a space automatically.
  
    Path mode is not restricted to completing filesystem paths. Anything path-like
    can use it. For example when you are completing Java or Perl module name (e.g.
    `com.company.product.whatever` or `File::Spec::Unix`) you can use this mode
    (with `path_sep` appropriately set to, e.g. `.` or `::`).
  
  _
      args_as => 'array',
      args => {
          completion => {
              summary => 'Completion answer structure',
              description => <<'_',
  
  Either an array or hash. See function description for more details.
  
  _
              schema=>['any*' => of => ['hash*', 'array*']],
              req=>1,
              pos=>0,
          },
          opts => {
              schema=>'hash*',
              pos=>1,
          },
      },
      result => {
          summary => 'Formatted string (or array, if `as` is set to `array`)',
          schema => ['any*' => of => ['str*', 'array*']],
      },
      result_naked => 1,
  };
  sub format_completion {
      my ($hcomp, $opts) = @_;
  
      $opts //= {};
  
      $hcomp = {words=>$hcomp} unless ref($hcomp) eq 'HASH';
      my $comp     = $hcomp->{words};
      my $as       = $hcomp->{as} // 'string';
      # 'escmode' key is deprecated (Complete 0.11-) and will be removed later
      my $esc_mode = $hcomp->{esc_mode} // $hcomp->{escmode} // 'default';
      my $path_sep = $hcomp->{path_sep};
  
      if (defined($path_sep) && @$comp == 1) {
          my $re = qr/\Q$path_sep\E\z/;
          my $word;
          if (ref($comp->[0]) eq 'HASH') {
              $comp = [$comp->[0], {word=>"$comp->[0] "}] if
                  $comp->[0]{word} =~ $re;
          } else {
              $comp = [$comp->[0], "$comp->[0] "]
                  if $comp->[0] =~ $re;
          }
      }
  
      # this is a workaround. since bash breaks words using characters in
      # $COMP_WORDBREAKS, which by default is "'@><=;|&(: this presents a problem
      # we often encounter: if we want to provide with a list of strings
      # containing say ':', most often Perl modules/packages, if user types e.g.
      # "Text::AN" and we provide completion ["Text::ANSI"] then bash will change
      # the word at cursor to become "Text::Text::ANSI" since it sees the current
      # word as "AN" and not "Text::AN". the workaround is to chop /^Text::/ from
      # completion answers. btw, we actually chop /^text::/i to handle
      # case-insensitive matching, although this does not have the ability to
      # replace the current word (e.g. if we type 'text::an' then bash can only
      # replace the current word 'an' with 'ANSI).
      if (defined($opts->{word})) {
          if ($opts->{word} =~ s/(.+[\@><=;|&\(:])//) {
              my $prefix = $1;
              for (@$comp) {
                  if (ref($_) eq 'HASH') {
                      $_->{word} =~ s/\A\Q$prefix\E//i;
                  } else {
                      s/\A\Q$prefix\E//i;
                  }
              }
          }
      }
  
      my @res;
      for my $entry (@$comp) {
          my $word = ref($entry) eq 'HASH' ? $entry->{word} : $entry;
          if ($esc_mode eq 'shellvar') {
              # don't escape $
              $word =~ s!([^A-Za-z0-9,+._/\$~-])!\\$1!g;
          } elsif ($esc_mode eq 'none') {
              # no escaping
          } else {
              # default
              $word =~ s!([^A-Za-z0-9,+._/:~-])!\\$1!g;
          }
          push @res, $word;
      }
  
      if ($as eq 'array') {
          return \@res;
      } else {
          return join("", map {($_, "\n")} @res);
      }
  }
  
  1;
  # ABSTRACT: Completion routines for bash shell
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Complete::Bash - Completion routines for bash shell
  
  =head1 VERSION
  
  This document describes version 0.31 of Complete::Bash (from Perl distribution Complete-Bash), released on 2016-12-28.
  
  =head1 DESCRIPTION
  
  This module provides routines related to tab completion in bash shell.
  
  =head2 About programmable completion in bash
  
  Bash allows completion to come from various sources. The simplest is from a list
  of words (C<-W>):
  
   % complete -W "one two three four" somecmd
   % somecmd t<Tab>
   two  three
  
  Another source is from a bash function (C<-F>). The function will receive input
  in two variables: C<COMP_WORDS> (array, command-line chopped into words) and
  C<COMP_CWORD> (integer, index to the array of words indicating the cursor
  position). It must set an array variable C<COMPREPLY> that contains the list of
  possible completion:
  
   % _foo()
   {
     local cur
     COMPREPLY=()
     cur=${COMP_WORDS[COMP_CWORD]}
     COMPREPLY=($( compgen -W '--help --verbose --version' -- $cur ) )
   }
   % complete -F _foo foo
   % foo <Tab>
   --help  --verbose  --version
  
  And yet another source is an external command (C<-C>) including, from a Perl
  script. The command receives two environment variables: C<COMP_LINE> (string,
  raw command-line) and C<COMP_POINT> (integer, cursor location). Program must
  split C<COMP_LINE> into words, find the word to be completed, complete that, and
  return the list of words one per-line to STDOUT. An example:
  
   % cat foo-complete
   #!/usr/bin/perl
   use Complete::Bash qw(parse_cmdline format_completion);
   use Complete::Util qw(complete_array_elem);
   my ($words, $cword) = @{ parse_cmdline() };
   my $res = complete_array_elem(array=>[qw/--help --verbose --version/], word=>$words->[$cword]);
   print format_completion($res);
  
   % complete -C foo-complete foo
   % foo --v<Tab>
   --verbose --version
  
  =head2 About the routines in this module
  
  First of all, C<parse_cmdline()> is the function to parse raw command-line (such
  as what you get from bash in C<COMP_LINE> environment variable) into words. This
  makes it easy for the other functions to generate completion answer. See the
  documentation for that function for more details.
  
  C<format_completion()> is what you use to format completion answer structure for
  bash.
  
  =head1 FUNCTIONS
  
  
  =head2 format_completion($completion, $opts) -> str|array
  
  Format completion for output (for shell).
  
  Bash accepts completion reply in the form of one entry per line to STDOUT. Some
  characters will need to be escaped. This function helps you do the formatting,
  with some options.
  
  This function accepts completion answer structure as described in the C<Complete>
  POD. Aside from C<words>, this function also recognizes these keys:
  
  =over
  
  =item * C<as> (str): Either C<string> (the default) or C<array> (to return array of lines
  instead of the lines joined together). Returning array is useful if you are
  doing completion inside C<Term::ReadLine>, for example, where the library
  expects an array.
  
  =item * C<esc_mode> (str): Escaping mode for entries. Either C<default> (most
  nonalphanumeric characters will be escaped), C<shellvar> (like C<default>, but
  dollar sign C<$> will not be escaped, convenient when completing environment
  variables for example), C<filename> (currently equals to C<default>), C<option>
  (currently equals to C<default>), or C<none> (no escaping will be done).
  
  =item * C<path_sep> (str): If set, will enable "path mode", useful for
  completing/drilling-down path. Below is the description of "path mode".
  
  In shell, when completing filename (e.g. C<foo>) and there is only a single
  possible completion (e.g. C<foo> or C<foo.txt>), the shell will display the
  completion in the buffer and automatically add a space so the user can move to
  the next argument. This is also true when completing other values like
  variables or program names.
  
  However, when completing directory (e.g. C</et> or C<Downloads>) and there is
  solely a single completion possible and it is a directory (e.g. C</etc> or
  C<Downloads>), the shell automatically adds the path separator character
  instead (C</etc/> or C<Downloads/>). The user can press Tab again to complete
  for files/directories inside that directory, and so on. This is obviously more
  convenient compared to when shell adds a space instead.
  
  The C<path_sep> option, when set, will employ a trick to mimic this behaviour.
  The trick is, if you have a completion array of C<['foo/']>, it will be changed
  to C<['foo/', 'foo/ ']> (the second element is the first element with added
  space at the end) to prevent bash from adding a space automatically.
  
  Path mode is not restricted to completing filesystem paths. Anything path-like
  can use it. For example when you are completing Java or Perl module name (e.g.
  C<com.company.product.whatever> or C<File::Spec::Unix>) you can use this mode
  (with C<path_sep> appropriately set to, e.g. C<.> or C<::>).
  
  =back
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<$completion>* => I<hash|array>
  
  Completion answer structure.
  
  Either an array or hash. See function description for more details.
  
  =item * B<$opts> => I<hash>
  
  =back
  
  Return value: Formatted string (or array, if `as` is set to `array`) (str|array)
  
  
  =head2 join_wordbreak_words() -> [status, msg, result, meta]
  
  Post-process parse_cmdline() result by joining some words.
  
  C<parse_cmdline()>, like bash, splits some characters that are considered as
  word-breaking characters:
  
   "'@><=;|&(:
  
  So if command-line is:
  
   command -MData::Dump bob@example.org
  
  then they will be parsed as:
  
   ["command", "-MData", "::", "Dump", "bob", '@', "example.org"]
  
  Normally in Perl applications, we want C<:>, C<@> to be part of word. So this
  routine will convert the above into:
  
   ["command", "-MData::Dump", 'bob@example.org']
  
  This function is not exported by default, but exportable.
  
  No arguments.
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (any)
  
  
  =head2 parse_cmdline($cmdline, $point, $opts) -> array
  
  Parse shell command-line for processing by completion routines.
  
  This function basically converts C<COMP_LINE> (str) and C<COMP_POINT> (int) into
  something like (but not exactly the same as) C<COMP_WORDS> (array) and
  C<COMP_CWORD> (int) that bash supplies to shell functions.
  
  The differences with bash are (these differences are mostly for parsing
  convenience for programs that use this routine; this comparison is made against
  bash versions 4.2-4.3):
  
  1) quotes and backslashes are stripped (bash's C<COMP_WORDS> contains all the
     quotes and backslashes);
  
  2) quoted phrase that contains spaces, or phrase that contains escaped spaces is
     parsed as a single word. For example:
  
   command "First argument" Second\ argument
  
     bash would split it as (represented as Perl):
  
   ["command", "\"First", "argument\"", "Second\\", "argument"]
  
     which is not very convenient. We parse it into:
  
   ["command", "First argument", "Second argument"]
  
  3) variables are substituted with their values from environment variables except
     for the current word (C<COMP_WORDS[COMP_CWORD]>) (bash does not perform
     variable substitution for C<COMP_WORDS>). However, note that special shell
     variables that are not environment variables like C<$0>, C<$_>, C<$IFS> will not
     be replaced correctly because bash does not export those variables for us.
  
  4) tildes (C<~>) are expanded with user's home directory except for the current
     word (bash does not perform tilde expansion for C<COMP_WORDS>);
  
  Caveats:
  
  =over
  
  =item * Like bash, we group non-whitespace word-breaking characters into its own word.
  By default C<COMP_WORDBREAKS> is:
  
  "'@><=;|&(:
  
  So if raw command-line is:
  
  command --foo=bar http://example.com:80 mail@example.org Foo::Bar
  
  then the parse result will be:
  
  ["command", "--foo", "=", "bar", "http", ":", "//example.com", ":", "80", "Foo", "::", "Bar"]
  
  which is annoying sometimes. But we follow bash here so we can more easily
  accept input from a joined C<COMP_WORDS> if we write completion bash functions,
  e.g. (in the example, C<foo> is a Perl script):
  
  I<foo ()
  {
      local words=(${COMP>CWORDS[@]})
      # add things to words, etc
      local point=... # calculate the new point
      COMPREPLY=( C<COMP_LINE="foo ${words[@]}" COMP_POINT=$point foo> )
  }
  
  To avoid these word-breaking characters to be split/grouped, we can escape
  them with backslash or quote them, e.g.:
  
  command "http://example.com:80" Foo\:\:Bar
  
  which bash will parse as:
  
  ["command", "\"http://example.com:80\"", "Foo\:\:Bar"]
  
  and we parse as:
  
  ["command", "http://example.com:80", "Foo::Bar"]
  
  =item * Due to the way bash parses the command line (see above), the two below are
  equivalent:
  
  % cmd --foo=bar
  % cmd --foo = bar
  
  =back
  
  Because they both expand to C<['--foo', '=', 'bar']>. But obviously
  L<Getopt::Long> does not regard the two as equivalent.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<$cmdline> => I<str>
  
  Command-line, defaults to COMP_LINE environment.
  
  =item * B<$opts> => I<hash>
  
  Options.
  
  Optional. Known options:
  
  =over
  
  =item * C<truncate_current_word> (bool). If set to 1, will truncate current word to the
  position of cursor, for example (C<^> marks the position of cursor):
  C<--vers^oo> to C<--vers> instead of C<--versoo>. This is more convenient when
  doing tab completion.
  
  =back
  
  =item * B<$point> => I<int>
  
  Point/position to complete in command-line, defaults to COMP_POINT.
  
  =back
  
  Return value:  (array)
  
  
  Return a 2-element array: C<[$words, $cword]>. C<$words> is array of str,
  equivalent to C<COMP_WORDS> provided by bash to shell functions. C<$cword> is an
  integer, roughly equivalent to C<COMP_CWORD> provided by bash to shell functions.
  The word to be completed is at C<< $words-E<gt>[$cword] >>.
  
  Note that COMP_LINE includes the command name. If you want the command-line
  arguments only (like in C<@ARGV>), you need to strip the first element from
  C<$words> and reduce C<$cword> by 1.
  
  
  =head2 point($cmdline, $marker) -> any
  
  Return line with point marked by a marker.
  
  This is a utility function useful for testing/debugging. C<parse_cmdline()>
  expects a command-line and a cursor position (C<$line>, C<$point>). This routine
  expects C<$line> with a marker character (by default it's the caret, C<^>) and
  return (C<$line>, C<$point>) to feed to C<parse_cmdline()>.
  
  Example:
  
   point("^foo") # => ("foo", 0)
   point("fo^o") # => ("foo", 2)
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<$cmdline> => I<str>
  
  Command-line which contains a marker character.
  
  =item * B<$marker> => I<str> (default: "^")
  
  Marker character.
  
  =back
  
  Return value:  (any)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Complete-Bash>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Complete-Bash>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Complete-Bash>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Complete>, the convention that this module follows.
  
  Some higher-level modules that use this module (so you don't have to use this
  module directly): L<Getopt::Long::Complete> (via L<Complete::Getopt::Long>),
  L<Getopt::Long::Subcommand>, L<Perinci::CmdLine> (via
  L<Perinci::Sub::Complete>).
  
  Other modules related to bash shell tab completion: L<Bash::Completion>,
  L<Getopt::Complete>, L<Term::Bash::Completion::Generator>.
  
  Programmable Completion section in Bash manual:
  L<https://www.gnu.org/software/bash/manual/html_node/Programmable-Completion.html>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
COMPLETE_BASH

    $main::fatpacked{"Complete/Common.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'COMPLETE_COMMON';
  package Complete::Common;
  
  our $DATE = '2016-01-05'; # DATE
  our $VERSION = '0.22'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(
                         %arg_word
                 );
  
  our %EXPORT_TAGS = (
      all => \@EXPORT_OK
  );
  
  our %arg_word = (
      word => {
          summary => 'Word to complete',
          schema => ['str', default=>''],
          pos=>0,
          req=>1,
      },
  );
  
  our $OPT_CI          = ($ENV{COMPLETE_OPT_CI}          // 1) ? 1:0;
  our $OPT_WORD_MODE   = ($ENV{COMPLETE_OPT_WORD_MODE}   // 1) ? 1:0;
  our $OPT_CHAR_MODE   = ($ENV{COMPLETE_OPT_CHAR_MODE}   // 1) ? 1:0;
  our $OPT_FUZZY       = ($ENV{COMPLETE_OPT_FUZZY}       // 1)+0;
  our $OPT_MAP_CASE    = ($ENV{COMPLETE_OPT_MAP_CASE}    // 1) ? 1:0;
  our $OPT_EXP_IM_PATH = ($ENV{COMPLETE_OPT_EXP_IM_PATH} // 1) ? 1:0;
  our $OPT_DIG_LEAF    = ($ENV{COMPLETE_OPT_DIG_LEAF}    // 1) ? 1:0;
  
  1;
  # ABSTRACT: Common stuffs for completion routines
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Complete::Common - Common stuffs for completion routines
  
  =head1 VERSION
  
  This document describes version 0.22 of Complete::Common (from Perl distribution Complete-Common), released on 2016-01-05.
  
  =head1 DESCRIPTION
  
  This module defines some common arguments and settings. C<Complete::*> modules
  should use the default from these settings, to make it convenient for users to
  change some behaviors globally.
  
  The defaults are optimized for convenience and laziness for user typing and
  might change from release to release.
  
  =head2 C<$Complete::Common::OPT_CI> => bool (default: from COMPLETE_OPT_CI or 1)
  
  If set to 1, matching is done case-insensitively.
  
  In bash/readline, this is akin to setting C<completion-ignore-case>.
  
  =head2 C<$Complete::Common::OPT_WORD_MODE> => bool (default: from COMPLETE_OPT_WORD_MODE or 1)
  
  If set to 1, enable word-mode matching.
  
  Word mode matching is normally only done when exact matching fails to return any
  candidate. To give you an idea of how word-mode matching works, you can run
  Emacs and try its completion of filenames (C<C-x C-f>) or function names
  (C<M-x>). Basically, each string is split into words and matching is tried for
  all available word even non-adjacent ones. For example, if you have C<dua-d> and
  the choices are (C<dua-tiga>, C<dua-empat>, C<dua-lima-delapan>) then
  C<dua-lima-delapan> will match because C<d> matches C<delapan> even though the
  word is not adjacent. This is convenient when you have strings that are several
  or many words long: you can just type the starting letters of some of the words
  instead of just the starting letters of the whole string (which might need to be
  quite long before producing a unique match).
  
  =head2 C<$Complete::Common::OPT_CHAR_MODE> => bool (default: from COMPLETE_OPT_CHAR_MODE or 1)
  
  If set to 1, enable character-mode matching.
  
  This mode is like word-mode matching, except it works on a
  character-by-character basis. Basically, it will match if a word contains any
  letters of the string in the correct order. For example, C<ap> will match C<ap>,
  C<amp>, C<slap>, or C<cramp> (but will not match C<pa> or C<pram>).
  
  Character-mode matching is normally only done when exact matching and word-mode
  fail to return any candidate.
  
  =head2 C<$Complete::Common::OPT_FUZZY> => int (default: from COMPLETE_OPT_FUZZY or 1)
  
  Enable fuzzy matching (matching even though there are some spelling mistakes).
  The greater the number, the greater the tolerance. To disable fuzzy matching,
  set to 0.
  
  Fuzzy matching is normally only done when exact matching, word-mode, and
  char-mode matching fail to return any candidate.
  
  =head2 C<$Complete::Common::OPT_MAP_CASE> => bool (default: from COMPLETE_OPT_MAP_CASE or 1)
  
  This is exactly like C<completion-map-case> in readline/bash to treat C<_> and
  C<-> as the same when matching.
  
  All L<Complete::Path>-based modules (like L<Complete::File>,
  L<Complete::Module>, or L<Complete::Riap>) respect this setting.
  
  =head2 C<$Complete::Common::OPT_EXP_IM_PATH> => bool (default: from COMPLETE_OPT_EXP_IM_PATH or 1)
  
  Whether to "expand intermediate paths". What is meant by this is something like
  zsh: when you type something like C<cd /h/u/b/myscript> it can be completed to
  C<cd /home/ujang/bin/myscript>.
  
  All L<Complete::Path>-based modules (like L<Complete::File>,
  L<Complete::Module>, or L<Complete::Riap>) respect this setting.
  
  =head2 C<$Complete::Common::OPT_DIG_LEAF> => bool (default: from COMPLETE_OPT_DIG_LEAF or 1)
  
  (Experimental) When enabled, this option mimics what's seen on GitHub. If a
  directory entry only contains a single subentry, it will directly show the
  subentry (and subsubentry and so on) to save a number of tab presses.
  
  Suppose you have files like this:
  
   a
   b/c/d/e
   c
  
  If you complete for C<b> you will directly get C<b/c/d/e> (the leaf).
  
  This is currently experimental because if you want to complete only directories,
  you won't get b or b/c or b/c/d. Need to think how to solve this.
  
  =head1 ENVIRONMENT
  
  =head2 COMPLETE_OPT_CI => bool
  
  Set default for C<$Complete::Common::OPT_CI>.
  
  =head2 COMPLETE_OPT_FUZZY => int
  
  Set default for C<$Complete::Common::OPT_FUZZY>.
  
  =head2 COMPLETE_OPT_WORD_MODE => bool
  
  Set default for C<$Complete::Common::OPT_WORD_MODE>.
  
  =head2 COMPLETE_OPT_MAP_CASE => bool
  
  Set default for C<$Complete::Common::OPT_MAP_CASE>.
  
  =head2 COMPLETE_OPT_EXP_IM_PATH => bool
  
  Set default for C<$Complete::Common::OPT_EXP_IM_PATH>.
  
  =head2 COMPLETE_OPT_DIG_LEAF => bool
  
  Set default for C<$Complete::Common::OPT_DIG_LEAF>.
  
  =head1 SEE ALSO
  
  L<Complete>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Complete-Common>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Complete-Common>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Complete-Common>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
COMPLETE_COMMON

    $main::fatpacked{"Complete/Env.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'COMPLETE_ENV';
  package Complete::Env;
  
  our $DATE = '2016-10-18'; # DATE
  our $VERSION = '0.39'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Complete::Common qw(:all);
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         complete_env
                         complete_env_elem
                         complete_path_env_elem
                 );
  
  our %SPEC;
  
  $SPEC{':package'} = {
      v => 1.1,
      summary => 'Completion routines related to environment variables',
  };
  
  $SPEC{complete_env} = {
      v => 1.1,
      summary => 'Complete from environment variables',
      description => <<'_',
  
  On Windows, environment variable names are all converted to uppercase. You can
  use case-insensitive option (`ci`) to match against original casing.
  
  _
      args => {
          word     => { schema=>[str=>{default=>''}], pos=>0, req=>1 },
      },
      result_naked => 1,
      result => {
          schema => 'array',
      },
  };
  sub complete_env {
      require Complete::Util;
  
      my %args  = @_;
      my $word     = $args{word} // "";
      if ($word =~ /^\$/) {
          Complete::Util::complete_array_elem(
              word=>$word, array=>[map {"\$$_"} keys %ENV],
          );
      } else {
          Complete::Util::complete_array_elem(
              word=>$word, array=>[keys %ENV],
          );
      }
  }
  
  $SPEC{complete_env_elem} = {
      v => 1.1,
      summary => 'Complete from elements of an environment variable',
      description => <<'_',
  
  An environment variable like PATH contains colon- (or, on Windows, semicolon-)
  separated elements. This routine complete from the elements of such variable.
  
  _
      args => {
          word     => { schema=>[str=>{default=>''}], pos=>0, req=>1 },
          env      => {
              summary => 'Name of environment variable to use',
              schema  => 'str*',
              req => 1,
              pos => 1,
          },
      },
      result_naked => 1,
      result => {
          schema => 'array',
      },
  };
  sub complete_env_elem {
      require Complete::Util;
  
      my %args  = @_;
      my $word  = $args{word} // "";
      my $env   = $args{env};
      my @elems;
      if ($^O eq 'MSWin32') {
          @elems = split /;/, ($ENV{$env} // '');
      } else {
          @elems = split /:/, ($ENV{$env} // '');
      }
      Complete::Util::complete_array_elem(
          word=>$word, array=>\@elems,
      );
  }
  
  $SPEC{complete_path_env_elem} = {
      v => 1.1,
      summary => 'Complete from elements of PATH environment variable',
      description => <<'_',
  
  PATH environment variable contains colon- (or, on Windows, semicolon-) separated
  elements. This routine complete from those elements.
  
  _
      args => {
          word     => { schema=>[str=>{default=>''}], pos=>0, req=>1 },
      },
      result_naked => 1,
      result => {
          schema => 'array',
      },
  };
  sub complete_path_env_elem {
      my %args  = @_;
      complete_env_elem(word => $args{word}, env => 'PATH');
  }
  
  1;
  # ABSTRACT: Completion routines related to environment variables
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Complete::Env - Completion routines related to environment variables
  
  =head1 VERSION
  
  This document describes version 0.39 of Complete::Env (from Perl distribution Complete-Env), released on 2016-10-18.
  
  =head1 DESCRIPTION
  
  =head1 FUNCTIONS
  
  
  =head2 complete_env(%args) -> array
  
  Complete from environment variables.
  
  On Windows, environment variable names are all converted to uppercase. You can
  use case-insensitive option (C<ci>) to match against original casing.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<word>* => I<str> (default: "")
  
  =back
  
  Return value:  (array)
  
  
  =head2 complete_env_elem(%args) -> array
  
  Complete from elements of an environment variable.
  
  An environment variable like PATH contains colon- (or, on Windows, semicolon-)
  separated elements. This routine complete from the elements of such variable.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<env>* => I<str>
  
  Name of environment variable to use.
  
  =item * B<word>* => I<str> (default: "")
  
  =back
  
  Return value:  (array)
  
  
  =head2 complete_path_env_elem(%args) -> array
  
  Complete from elements of PATH environment variable.
  
  PATH environment variable contains colon- (or, on Windows, semicolon-) separated
  elements. This routine complete from those elements.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<word>* => I<str> (default: "")
  
  =back
  
  Return value:  (array)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Complete-Env>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Complete-Env>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Complete-Env>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Complete>
  
  Other C<Complete::*> modules.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
COMPLETE_ENV

    $main::fatpacked{"Complete/File.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'COMPLETE_FILE';
  package Complete::File;
  
  our $DATE = '2016-10-20'; # DATE
  our $VERSION = '0.42'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Complete::Common qw(:all);
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         complete_file
                         complete_dir
                 );
  
  our %SPEC;
  
  $SPEC{':package'} = {
      v => 1.1,
      summary => 'Completion routines related to files',
  };
  
  $SPEC{complete_file} = {
      v => 1.1,
      summary => 'Complete file and directory from local filesystem',
      args => {
          %arg_word,
          filter => {
              summary => 'Only return items matching this filter',
              description => <<'_',
  
  Filter can either be a string or a code.
  
  For string filter, you can specify a pipe-separated groups of sequences of these
  characters: f, d, r, w, x. Dash can appear anywhere in the sequence to mean
  not/negate. An example: `f` means to only show regular files, `-f` means only
  show non-regular files, `drwx` means to show only directories which are
  readable, writable, and executable (cd-able). `wf|wd` means writable regular
  files or writable directories.
  
  For code filter, you supply a coderef. The coderef will be called for each item
  with these arguments: `$name`. It should return true if it wants the item to be
  included.
  
  _
              schema  => ['any*' => {of => ['str*', 'code*']}],
              tags => ['category:filtering'],
          },
          file_regex_filter => {
              summary => 'Filter shortcut for file regex',
              description => <<'_',
  
  This is a shortcut for constructing a filter. So instead of using `filter`, you
  use this option. This will construct a filter of including only directories or
  regular files, and the file must match a regex pattern. This use-case is common.
  
  _
              schema => 're*',
              tags => ['category:filtering'],
          },
          exclude_dir => {
              schema => 'bool*',
              description => <<'_',
  
  This is also an alternative to specifying full `filter`. Set this to true if you
  do not want directories.
  
  If you only want directories, take a look at `complete_dir()`.
  
  _
              tags => ['category:filtering'],
          },
          file_ext_filter => {
              schema => ['any*', of=>['re*', ['array*',of=>'str*']]],
              description => <<'_',
  
  This is also an alternative to specifying full `filter` or `file_regex_filter`.
  You can set this to a regex or a set of extensions to accept. Note that like in
  `file_regex_filter`, directories of any name is also still allowed.
  
  _
              tags => ['category:filtering'],
          },
          starting_path => {
              schema  => 'str*',
              default => '.',
          },
          handle_tilde => {
              schema  => 'bool',
              default => 1,
          },
          allow_dot => {
              summary => 'If turned off, will not allow "." or ".." in path',
              description => <<'_',
  
  This is most useful when combined with `starting_path` option to prevent user
  going up/outside the starting path.
  
  _
              schema  => 'bool',
              default => 1,
          },
      },
      result_naked => 1,
      result => {
          schema => 'array',
      },
  };
  sub complete_file {
      require Complete::Path;
      require Encode;
      require File::Glob;
  
      my %args   = @_;
      my $word   = $args{word} // "";
      my $handle_tilde = $args{handle_tilde} // 1;
      my $allow_dot   = $args{allow_dot} // 1;
  
      # if word is starts with "~/" or "~foo/" replace it temporarily with user's
      # name (so we can restore it back at the end). this is to mimic bash
      # support. note that bash does not support case-insensitivity for "foo".
      my $result_prefix;
      my $starting_path = $args{starting_path} // '.';
      if ($handle_tilde && $word =~ s!\A(~[^/]*)/!!) {
          $result_prefix = "$1/";
          my @dir = File::Glob::glob($1); # glob will expand ~foo to /home/foo
          return [] unless @dir;
          $starting_path = Encode::decode('UTF-8', $dir[0]);
      } elsif ($allow_dot && $word =~ s!\A((?:\.\.?/+)+|/+)!!) {
          # just an optimization to skip sequences of '../'
          $starting_path = $1;
          $result_prefix = $1;
          $starting_path =~ s#/+\z## unless $starting_path =~ m!\A/!;
      }
  
      # bail if we don't allow dot and the path contains dot
      return [] if !$allow_dot &&
          $word =~ m!(?:\A|/)\.\.?(?:\z|/)!;
  
      # prepare list_func
      my $list = sub {
          my ($path, $intdir, $isint) = @_;
          opendir my($dh), $path or return undef;
          my @res;
          for (sort readdir $dh) {
              # skip . and .. if leaf is empty, like in bash
              next if ($_ eq '.' || $_ eq '..') && $intdir eq '';
              next if $isint && !(-d "$path/$_");
              push @res, Encode::decode('UTF-8', $_);
          }
          \@res;
      };
  
      # prepare filter_func
  
      # from the filter option
      my $filter;
      if ($args{filter} && !ref($args{filter})) {
          my @seqs = split /\s*\|\s*/, $args{filter};
          $filter = sub {
              my $name = shift;
              my @st = stat($name) or return 0;
              my $mode = $st[2];
              my $pass;
            SEQ:
              for my $seq (@seqs) {
                  my $neg = sub { $_[0] };
                  for my $c (split //, $seq) {
                      if    ($c eq '-') { $neg = sub { $_[0] ? 0 : 1 } }
                      elsif ($c eq 'r') { next SEQ unless $neg->($mode & 0400) }
                      elsif ($c eq 'w') { next SEQ unless $neg->($mode & 0200) }
                      elsif ($c eq 'x') { next SEQ unless $neg->($mode & 0100) }
                      elsif ($c eq 'f') { next SEQ unless $neg->($mode & 0100000)}
                      elsif ($c eq 'd') { next SEQ unless $neg->($mode & 0040000)}
                      else {
                          die "Unknown character in filter: $c (in $seq)";
                      }
                  }
                  $pass = 1; last SEQ;
              }
              $pass;
          };
      } elsif ($args{filter} && ref($args{filter}) eq 'CODE') {
          $filter = $args{filter};
      }
  
      # from the file_regex_filter option
      my $filter_fregex;
      if ($args{file_regex_filter}) {
          $filter_fregex = sub {
              my $name = shift;
              return 1 if -d $name;
              return 0 unless -f _;
              return 1 if $name =~ $args{file_regex_filter};
              0;
          };
      }
  
      # from the file_ext_filter option
      my $filter_fext;
      if ($args{file_ext_filter} && ref $args{file_ext_filter} eq 'Regexp') {
          $filter_fext = sub {
              my $name = shift;
              return 1 if -d $name;
              return 0 unless -f _;
              my $ext = $name =~ /\.(\w+)\z/ ? $1 : '';
              return 1 if $ext =~ $args{file_ext_filter};
              0;
          };
      } elsif ($args{file_ext_filter} && ref $args{file_ext_filter} eq 'ARRAY') {
          $filter_fext = sub {
              my $name = shift;
              return 1 if -d $name;
              return 0 unless -f _;
              my $ext = $name =~ /\.(\w+)\z/ ? $1 : '';
              if ($Complete::Common::OPT_CI) {
                  $ext = lc($ext);
                  for my $e (@{ $args{file_ext_filter} }) {
                      return 1 if $ext eq lc($e);
                  }
              } else {
                  for my $e (@{ $args{file_ext_filter} }) {
                      return 1 if $ext eq $e;
                  }
              }
              0;
          };
      }
  
      # from _dir (used by complete_dir)
      my $filter_dir;
      if ($args{_dir}) {
          $filter_dir = sub { return 0 unless (-d $_[0]); 1 };
      }
  
      # from exclude_dir option
      my $filter_xdir;
      if ($args{exclude_dir}) {
          $filter_xdir = sub { return 0 if (-d $_[0]); 1 };
      }
  
      # final filter sub
      my $final_filter = sub {
          my $name = shift;
          if ($filter_dir)    { return 0 unless $filter_dir->($name)    }
          if ($filter_xdir)   { return 0 unless $filter_xdir->($name)   }
          if ($filter)        { return 0 unless $filter->($name)        }
          if ($filter_fregex) { return 0 unless $filter_fregex->($name) }
          if ($filter_fext)   { return 0 unless $filter_fext->($name)   }
          1;
      };
  
      Complete::Path::complete_path(
          word => $word,
          list_func => $list,
          is_dir_func => sub { -d $_[0] },
          filter_func => $final_filter,
          starting_path => $starting_path,
          result_prefix => $result_prefix,
      );
  }
  
  $SPEC{complete_dir} = do {
      my $spec = {%{ $SPEC{complete_file} }}; # shallow copy
  
      $spec->{summary} = 'Complete directory from local filesystem '.
          '(wrapper for complete_dir() that only picks directories)';
      $spec->{args} = { %{$spec->{args}} }; # shallow copy of args
      delete $spec->{args}{file_regex_filter};
      delete $spec->{args}{file_ext_filter};
      delete $spec->{args}{exclude_dir};
  
      $spec;
  };
  sub complete_dir {
      my %args = @_;
  
      complete_file(%args, _dir=>1);
  }
  
  1;
  # ABSTRACT: Completion routines related to files
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Complete::File - Completion routines related to files
  
  =head1 VERSION
  
  This document describes version 0.42 of Complete::File (from Perl distribution Complete-File), released on 2016-10-20.
  
  =head1 DESCRIPTION
  
  =head1 FUNCTIONS
  
  
  =head2 complete_dir(%args) -> array
  
  Complete directory from local filesystem (wrapper for complete_dir() that only picks directories).
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<allow_dot> => I<bool> (default: 1)
  
  If turned off, will not allow "." or ".." in path.
  
  This is most useful when combined with C<starting_path> option to prevent user
  going up/outside the starting path.
  
  =item * B<filter> => I<str|code>
  
  Only return items matching this filter.
  
  Filter can either be a string or a code.
  
  For string filter, you can specify a pipe-separated groups of sequences of these
  characters: f, d, r, w, x. Dash can appear anywhere in the sequence to mean
  not/negate. An example: C<f> means to only show regular files, C<-f> means only
  show non-regular files, C<drwx> means to show only directories which are
  readable, writable, and executable (cd-able). C<wf|wd> means writable regular
  files or writable directories.
  
  For code filter, you supply a coderef. The coderef will be called for each item
  with these arguments: C<$name>. It should return true if it wants the item to be
  included.
  
  =item * B<handle_tilde> => I<bool> (default: 1)
  
  =item * B<starting_path> => I<str> (default: ".")
  
  =item * B<word>* => I<str> (default: "")
  
  Word to complete.
  
  =back
  
  Return value:  (array)
  
  
  =head2 complete_file(%args) -> array
  
  Complete file and directory from local filesystem.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<allow_dot> => I<bool> (default: 1)
  
  If turned off, will not allow "." or ".." in path.
  
  This is most useful when combined with C<starting_path> option to prevent user
  going up/outside the starting path.
  
  =item * B<exclude_dir> => I<bool>
  
  This is also an alternative to specifying full C<filter>. Set this to true if you
  do not want directories.
  
  If you only want directories, take a look at C<complete_dir()>.
  
  =item * B<file_ext_filter> => I<re|array[str]>
  
  This is also an alternative to specifying full C<filter> or C<file_regex_filter>.
  You can set this to a regex or a set of extensions to accept. Note that like in
  C<file_regex_filter>, directories of any name is also still allowed.
  
  =item * B<file_regex_filter> => I<re>
  
  Filter shortcut for file regex.
  
  This is a shortcut for constructing a filter. So instead of using C<filter>, you
  use this option. This will construct a filter of including only directories or
  regular files, and the file must match a regex pattern. This use-case is common.
  
  =item * B<filter> => I<str|code>
  
  Only return items matching this filter.
  
  Filter can either be a string or a code.
  
  For string filter, you can specify a pipe-separated groups of sequences of these
  characters: f, d, r, w, x. Dash can appear anywhere in the sequence to mean
  not/negate. An example: C<f> means to only show regular files, C<-f> means only
  show non-regular files, C<drwx> means to show only directories which are
  readable, writable, and executable (cd-able). C<wf|wd> means writable regular
  files or writable directories.
  
  For code filter, you supply a coderef. The coderef will be called for each item
  with these arguments: C<$name>. It should return true if it wants the item to be
  included.
  
  =item * B<handle_tilde> => I<bool> (default: 1)
  
  =item * B<starting_path> => I<str> (default: ".")
  
  =item * B<word>* => I<str> (default: "")
  
  Word to complete.
  
  =back
  
  Return value:  (array)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Complete-File>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Complete-File>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Complete-File>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Complete>
  
  Other C<Complete::*> modules.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
COMPLETE_FILE

    $main::fatpacked{"Complete/Fish.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'COMPLETE_FISH';
  package Complete::Fish;
  
  our $DATE = '2016-10-21'; # DATE
  our $VERSION = '0.05'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         format_completion
                 );
  
  require Complete::Bash;
  
  our %SPEC;
  
  $SPEC{':package'} = {
      v => 1.1,
      summary => 'Completion module for fish shell',
  };
  
  $SPEC{format_completion} = {
      v => 1.1,
      summary => 'Format completion for output (for shell)',
      description => <<'_',
  
  fish accepts completion reply in the form of one entry per line to STDOUT.
  Description can be added to each entry, prefixed by tab character.
  
  _
      args_as => 'array',
      args => {
          completion => {
              summary => 'Completion answer structure',
              description => <<'_',
  
  Either an array or hash, as described in `Complete`.
  
  _
              schema=>['any*' => of => ['hash*', 'array*']],
              req=>1,
              pos=>0,
          },
      },
      result => {
          summary => 'Formatted string (or array, if `as` key is set to `array`)',
          schema => ['any*' => of => ['str*', 'array*']],
      },
      result_naked => 1,
  };
  sub format_completion {
      my $comp = shift;
  
      my $as;
      my $entries;
  
      # we currently use Complete::Bash's rule because i haven't done a read up on
      # how exactly fish escaping rules are.
      if (ref($comp) eq 'HASH') {
          $as = $comp->{as} // 'string';
          $entries = Complete::Bash::format_completion({%$comp, as=>'array'});
      } else {
          $as = 'string';
          $entries = Complete::Bash::format_completion({
              words=>$comp, as=>'array',
          });
      }
  
      # insert description
      {
          my $compary = ref($comp) eq 'HASH' ? $comp->{words} : $comp;
          for (my $i=0; $i<@$compary; $i++) {
  
              my $desc = (ref($compary->[$i]) eq 'HASH' ?
                              $compary->[$i]{description} : '' ) // '';
              $desc =~ s/\R/ /g;
              $entries->[$i] .= "\t$desc";
          }
      }
  
      # turn back to string if that's what the user wants
      if ($as eq 'string') {
          $entries = join("", map{"$_\n"} @$entries);
      }
      $entries;
  }
  
  1;
  # ABSTRACT: Completion module for fish shell
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Complete::Fish - Completion module for fish shell
  
  =head1 VERSION
  
  This document describes version 0.05 of Complete::Fish (from Perl distribution Complete-Fish), released on 2016-10-21.
  
  =head1 DESCRIPTION
  
  fish allows completion of option arguments to come from an external command,
  e.g.:
  
   % complete -c deluser -l user -d Username -a "(cat /etc/passwd|cut -d : -f 1)"
  
  The command is supposed to return completion entries one in a separate line.
  Description for each entry can be added, prefixed with a tab character. The
  provided function C<format_completion()> accept a completion answer structure
  and format it for fish. Example:
  
   format_completion(["a", "b", {word=>"c", description=>"Another letter"}])
  
  will result in:
  
   a
   b
   c       Another letter
  
  =head1 FUNCTIONS
  
  
  =head2 format_completion($completion) -> str|array
  
  Format completion for output (for shell).
  
  fish accepts completion reply in the form of one entry per line to STDOUT.
  Description can be added to each entry, prefixed by tab character.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<$completion>* => I<hash|array>
  
  Completion answer structure.
  
  Either an array or hash, as described in C<Complete>.
  
  =back
  
  Return value: Formatted string (or array, if `as` key is set to `array`) (str|array)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Complete-Fish>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Complete-Fish>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Complete-Fish>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Complete>
  
  L<Complete::Bash>
  
  Fish manual.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
COMPLETE_FISH

    $main::fatpacked{"Complete/Getopt/Long.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'COMPLETE_GETOPT_LONG';
  package Complete::Getopt::Long;
  
  our $DATE = '2017-01-13'; # DATE
  our $VERSION = '0.46'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  #use Log::Any::IfLOG '$log';
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         complete_cli_arg
                 );
  
  our %SPEC;
  
  sub _default_completion {
      require Complete::Env;
      require Complete::File;
      require Complete::Util;
  
      my %args = @_;
      my $word = $args{word} // '';
  
      my $fres;
      #$log->tracef('[comp][compgl] entering default completion routine');
  
      # try completing '$...' with shell variables
      if ($word =~ /\A\$/) {
          #$log->tracef('[comp][compgl] completing shell variable');
          {
              my $compres = Complete::Env::complete_env(
                  word=>$word);
              last unless @$compres;
              $fres = {words=>$compres, esc_mode=>'shellvar'};
              goto RETURN_RES;
          }
          # if empty, fallback to searching file
      }
  
      # try completing '~foo' with user dir (appending / if user's home exists)
      if ($word =~ m!\A~([^/]*)\z!) {
          #$log->tracef("[comp][compgl] completing userdir, user=%s", $1);
          {
              eval { require Unix::Passwd::File };
              last if $@;
              my $res = Unix::Passwd::File::list_users(detail=>1);
              last unless $res->[0] == 200;
              my $compres = Complete::Util::complete_array_elem(
                  array=>[map {"~" . $_->{user} . ((-d $_->{home}) ? "/":"")}
                              @{ $res->[2] }],
                  word=>$word,
              );
              last unless @$compres;
              $fres = {words=>$compres, path_sep=>'/'};
              goto RETURN_RES;
          }
          # if empty, fallback to searching file
      }
  
      # try completing '~/blah' or '~foo/blah' as if completing file, but do not
      # expand ~foo (this is supported by complete_file(), so we just give it off
      # to the routine)
      if ($word =~ m!\A(~[^/]*)/!) {
          #$log->tracef("[comp][compgl] completing file, path=<%s>", $word);
          $fres = {words=>Complete::File::complete_file(word=>$word),
                   path_sep=>'/'};
          goto RETURN_RES;
      }
  
      # try completing something that contains wildcard with glob. for
      # convenience, we add '*' at the end so that when user type [AB] it is
      # treated like [AB]*.
      require String::Wildcard::Bash;
      if (String::Wildcard::Bash::contains_wildcard($word)) {
          #$log->tracef("[comp][compgl] completing with wildcard glob, glob=<%s>", "$word*");
          {
              my $compres = [glob("$word*")];
              last unless @$compres;
              for (@$compres) {
                  $_ .= "/" if (-d $_);
              }
              $fres = {words=>$compres, path_sep=>'/'};
              goto RETURN_RES;
          }
          # if empty, fallback to searching file
      }
      #$log->tracef("[comp][compgl] completing with file, file=<%s>", $word);
      $fres = {words=>Complete::File::complete_file(word=>$word),
               path_sep=>'/'};
    RETURN_RES:
      #$log->tracef("[comp][compgl] leaving default completion routine, result=%s", $fres);
      $fres;
  }
  
  # return the key/element if $opt matches exactly a key/element in $opts (which
  # can be an array/hash) OR expands unambiguously to exactly one key/element in
  # $opts, otherwise return undef. e.g. _expand1('--fo', [qw/--foo --bar --baz
  # --fee --feet/]) and _expand('--fee', ...) will respectively return '--foo' and
  # '--fee' because it expands/is unambiguous in the list, but _expand1('--ba',
  # ...) or _expand1('--qux', ...) will both return undef because '--ba' expands
  # ambiguously (--bar/--baz) while '--qux' cannot be expanded.
  sub _expand1 {
      my ($opt, $opts) = @_;
      my @candidates;
      my $is_hash = ref($opts) eq 'HASH';
      for ($is_hash ? (sort {length($a)<=>length($b)} keys %$opts) : @$opts) {
          next unless index($_, $opt) == 0;
          push @candidates, $is_hash ? $opts->{$_} : $_;
          last if $opt eq $_;
      }
      return @candidates == 1 ? $candidates[0] : undef;
  }
  
  # mark an option (and all its aliases) as seen
  sub _mark_seen {
      my ($seen_opts, $opt, $opts) = @_;
      my $opthash = $opts->{$opt};
      return unless $opthash;
      my $ospec = $opthash->{ospec};
      for (keys %$opts) {
          my $v = $opts->{$_};
          $seen_opts->{$_}++ if $v->{ospec} eq $ospec;
      }
  }
  
  $SPEC{complete_cli_arg} = {
      v => 1.1,
      summary => 'Complete command-line argument using '.
          'Getopt::Long specification',
      description => <<'_',
  
  This routine can complete option names, where the option names are retrieved
  from <pm:Getopt::Long> specification. If you provide completion routine in
  `completion`, you can also complete _option values_ and _arguments_.
  
  Note that this routine does not use <pm:Getopt::Long> (it does its own parsing)
  and currently is not affected by Getopt::Long's configuration. Its behavior
  mimics Getopt::Long under these configuration: `no_ignore_case`, `bundling` (or
  `no_bundling` if the `bundling` option is turned off). Which I think is the
  sensible default. This routine also does not currently support `auto_help` and
  `auto_version`, so you'll need to add those options specifically if you want to
  recognize `--help/-?` and `--version`, respectively.
  
  _
      args => {
          getopt_spec => {
              summary => 'Getopt::Long specification',
              schema  => 'hash*',
              req     => 1,
          },
          completion => {
              summary     =>
                  'Completion routine to complete option value/argument',
              schema      => 'code*',
              description => <<'_',
  
  Completion code will receive a hash of arguments (`%args`) containing these
  keys:
  
  * `type` (str, what is being completed, either `optval`, or `arg`)
  * `word` (str, word to be completed)
  * `cword` (int, position of words in the words array, starts from 0)
  * `opt` (str, option name, e.g. `--str`; undef if we're completing argument)
  * `ospec` (str, Getopt::Long option spec, e.g. `str|S=s`; undef when completing
    argument)
  * `argpos` (int, argument position, zero-based; undef if type='optval')
  * `nth` (int, the number of times this option has seen before, starts from 0
    that means this is the first time this option has been seen; undef when
    type='arg')
  * `seen_opts` (hash, all the options seen in `words`)
  * `parsed_opts` (hash, options parsed the standard/raw way)
  
  as well as all keys from `extras` (but these won't override the above keys).
  
  and is expected to return a completion answer structure as described in
  `Complete` which is either a hash or an array. The simplest form of answer is
  just to return an array of strings. The various `complete_*` function like those
  in <pm:Complete::Util> or the other `Complete::*` modules are suitable to use
  here.
  
  Completion routine can also return undef to express declination, in which case
  the default completion routine will then be consulted. The default routine
  completes from shell environment variables (`$FOO`), Unix usernames (`~foo`),
  and files/directories.
  
  Example:
  
      use Complete::Unix qw(complete_user);
      use Complete::Util qw(complete_array_elem);
      complete_cli_arg(
          getopt_spec => {
              'help|h'   => sub{...},
              'format=s' => \$format,
              'user=s'   => \$user,
          },
          completion  => sub {
              my %args  = @_;
              my $word  = $args{word};
              my $ospec = $args{ospec};
              if ($ospec && $ospec eq 'format=s') {
                  complete_array_elem(array=>[qw/json text xml yaml/], word=>$word);
              } else {
                  complete_user(word=>$word);
              }
          },
      );
  
  _
          },
          words => {
              summary     => 'Command line arguments, like @ARGV',
              description => <<'_',
  
  See function `parse_cmdline` in <pm:Complete::Bash> on how to produce this (if
  you're using bash).
  
  _
              schema      => 'array*',
              req         => 1,
          },
          cword => {
              summary     =>
                  "Index in words of the word we're trying to complete",
              description => <<'_',
  
  See function `parse_cmdline` in <pm:Complete::Bash> on how to produce this (if
  you're using bash).
  
  _
              schema      => 'int*',
              req         => 1,
          },
          extras => {
              summary => 'Add extra arguments to completion routine',
              schema  => 'hash',
              description => <<'_',
  
  The keys from this `extras` hash will be merged into the final `%args` passed to
  completion routines. Note that standard keys like `type`, `word`, and so on as
  described in the function description will not be overwritten by this.
  
  _
          },
          bundling => {
              schema  => 'bool*',
              default => 1,
              'summary.alt.bool.not' => 'Turn off bundling',
              description => <<'_',
  
  If you turn off bundling, completion of short-letter options won't support
  bundling (e.g. `-b<tab>` won't add more single-letter options), but single-dash
  multiletter options can be recognized. Currently only those specified with a
  single dash will be completed. For example if you have `-foo=s` in your option
  specification, `-f<tab>` can complete it.
  
  This can be used to complete old-style programs, e.g. emacs which has options
  like `-nw`, `-nbc` etc (but also have double-dash options like
  `--no-window-system` or `--no-blinking-cursor`).
  
  _
          },
      },
      result_naked => 1,
      result => {
          schema => ['any*' => of => ['hash*', 'array*']],
          description => <<'_',
  
  You can use `format_completion` function in <pm:Complete::Bash> module to format
  the result of this function for bash.
  
  _
      },
  };
  sub complete_cli_arg {
      require Complete::Util;
      require Getopt::Long::Util;
  
      my %args = @_;
  
      my $fname = __PACKAGE__ . "::complete_cli_arg"; # XXX use __SUB__
      my $fres;
  
      $args{words} or die "Please specify words";
      my @words = @{ $args{words} };
      defined(my $cword = $args{cword}) or die "Please specify cword";
      my $gospec = $args{getopt_spec} or die "Please specify getopt_spec";
      my $comp = $args{completion};
      my $extras = $args{extras} // {};
      my $bundling = $args{bundling} // 1;
      my %parsed_opts;
  
      #$log->tracef('[comp][compgl] entering %s(), words=%s, cword=%d, word=<%s>',
      #             $fname, \@words, $cword, $words[$cword]);
  
      # parse all options first & supply default completion routine
      my %opts;
      for my $ospec (keys %$gospec) {
          my $res = Getopt::Long::Util::parse_getopt_long_opt_spec($ospec)
              or die "Can't parse option spec '$ospec'";
          next if $res->{is_arg};
          $res->{min_vals} //= $res->{type} ? 1 : 0;
          $res->{max_vals} //= $res->{type} || $res->{opttype} ? 1:0;
          for my $o0 (@{ $res->{opts} }) {
              my @o = $res->{is_neg} && length($o0) > 1 ?
                  ($o0, "no$o0", "no-$o0") : ($o0);
              for my $o (@o) {
                  my $k = length($o)==1 ||
                      (!$bundling && $res->{dash_prefix} eq '-') ?
                          "-$o" : "--$o";
                  $opts{$k} = {
                      name => $k,
                      ospec => $ospec, # key to getopt specification
                      parsed => $res,
                  };
              }
          }
      }
      my @optnames = sort keys %opts;
  
      my %seen_opts;
  
      # for each word (each element in this array), we try to find out whether
      # it's supposed to complete option name, or option value, or argument, or
      # separator (or more than one of them). plus some other information.
      #
      # each element is a hash. if hash contains 'optname' key then it expects an
      # option name. if hash contains 'optval' key then it expects an option
      # value.
      #
      # 'short_only' means that the word is not to be completed with long option
      # name, only (bundle of) one-letter option names.
  
      my @expects;
  
      my $i = -1;
      my $argpos = 0;
  
    WORD:
      while (1) {
          last WORD if ++$i >= @words;
          my $word = $words[$i];
          #say "D:i=$i, word=$word, ~~\@words=",~~@words;
  
          if ($word eq '--' && $i != $cword) {
              $expects[$i] = {separator=>1};
              while (1) {
                  $i++;
                  last WORD if $i >= @words;
                  $expects[$i] = {arg=>1, argpos=>$argpos++};
              }
          }
  
          if ($word =~ /\A-/) {
  
              # check if it is a (bundle) of short option names
            SHORT_OPTS:
              {
                  # it's not a known short option
                  last unless $opts{"-".substr($word,1,1)};
  
                  # not a bundle, regard as only a single short option name
                  last unless $bundling;
  
                  # expand bundle
                  my $j = $i;
                  my $rest = substr($word, 1);
                  my @inswords;
                  my $encounter_equal_sign;
                EXPAND:
                  while (1) {
                      $rest =~ s/(.)// or last;
                      my $opt = "-$1";
                      my $opthash = $opts{$opt};
                      unless ($opthash) {
                          # we encounter an unknown option, doubt that this is a
                          # bundle of short option name, it could be someone
                          # typing --long as -long
                          @inswords = ();
                          $expects[$i]{short_only} = 0;
                          $rest = $word;
                          last EXPAND;
                      }
                      if ($opthash->{parsed}{max_vals}) {
                          # stop after an option that requires value
                          _mark_seen(\%seen_opts, $opt, \%opts);
  
                          if ($i == $j) {
                              $words[$i] = $opt;
                          } else {
                              push @inswords, $opt;
                              $j++;
                          }
  
                          my $expand;
                          if (length $rest) {
                              $expand++;
                              # complete -Sfoo^ is completing option value
                              $expects[$j > $i ? $j+1 : $j+2]{do_complete_optname} = 0;
                              $expects[$j > $i ? $j+1 : $j+2]{optval} = $opt;
                          } else {
                              # complete -S^ as [-S] to add space
                              $expects[$j > $i ? $j-1 : $j]{optname} = $opt;
                              $expects[$j > $i ? $j-1 : $j]{comp_result} = [
                                  substr($word, 0, length($word)-length($rest))];
                          }
  
                          if ($rest =~ s/\A=//) {
                              $encounter_equal_sign++;
                          }
  
                          if ($expand) {
                              push @inswords, "=", $rest;
                              $j+=2;
                          }
                          last EXPAND;
                      }
                      # continue splitting
                      _mark_seen(\%seen_opts, $opt, \%opts);
                      if ($i == $j) {
                          $words[$i] = $opt;
                      } else {
                          push @inswords, $opt;
                      }
                      $j++;
                  }
  
                  #use DD; print "D:inswords: "; dd \@inswords;
  
                  my $prefix = $encounter_equal_sign ? '' :
                      substr($word, 0, length($word)-length($rest));
                  splice @words, $i+1, 0, @inswords;
                  for (0..@inswords) {
                      $expects[$i+$_]{prefix} = $prefix;
                      $expects[$i+$_]{word}   = $rest;
                  }
                  $cword += @inswords;
                  $i += @inswords;
                  $word = $words[$i];
                  $expects[$i]{short_only} //= 1;
              } # SHORT_OPTS
  
              # split --foo=val -> --foo, =, val
            SPLIT_EQUAL:
              {
                  if ($word =~ /\A(--?[^=]+)(=)(.*)/) {
                      splice @words, $i, 1, $1, $2, $3;
                      $word = $1;
                      $cword += 2 if $cword >= $i;
                  }
              }
  
              my $opt = $word;
              my $opthash = _expand1($opt, \%opts);
  
              if ($opthash) {
                  $opt = $opthash->{name};
                  $expects[$i]{optname} = $opt;
                  my $nth = $seen_opts{$opt} // 0;
                  $expects[$i]{nth} = $nth;
                  _mark_seen(\%seen_opts, $opt, \%opts);
  
                  my $min_vals = $opthash->{parsed}{min_vals};
                  my $max_vals = $opthash->{parsed}{max_vals};
                  #say "D:min_vals=$min_vals, max_vals=$max_vals";
  
                  # detect = after --opt
                  if ($i+1 < @words && $words[$i+1] eq '=') {
                      $i++;
                      $expects[$i] = {separator=>1, optval=>$opt, word=>'', nth=>$nth};
                      # force a value due to =
                      if (!$max_vals) { $min_vals = $max_vals = 1 }
                  }
  
                  for (1 .. $min_vals) {
                      $i++;
                      last WORD if $i >= @words;
                      $expects[$i]{optval} = $opt;
                      $expects[$i]{nth} = $nth;
                      push @{ $parsed_opts{$opt} }, $words[$i];
                  }
                  for (1 .. $max_vals-$min_vals) {
                      last if $i+$_ >= @words;
                      last if $words[$i+$_] =~ /\A-/; # a new option
                      $expects[$i+$_]{optval} = $opt; # but can also be optname
                      $expects[$i]{nth} = $nth;
                      push @{ $parsed_opts{$opt} }, $words[$i+$_];
                  }
              } else {
                  # an unknown option, assume it doesn't require argument, unless
                  # it's --opt= or --opt=foo
                  $opt = undef;
                  $expects[$i]{optname} = $opt;
  
                  # detect = after --opt
                  if ($i+1 < @words && $words[$i+1] eq '=') {
                      $i++;
                      $expects[$i] = {separator=>1, optval=>undef, word=>''};
                      if ($i+1 < @words) {
                          $i++;
                          $expects[$i]{optval} = $opt;
                      }
                  }
              }
          } else {
              $expects[$i]{optname} = '';
              $expects[$i]{arg} = 1;
              $expects[$i]{argpos} = $argpos++;
          }
      }
  
      my $exp = $expects[$cword];
      my $word = $exp->{word} // $words[$cword];
  
      #use DD; print "D:words: "; dd \@words;
      #say "D:cword: $cword";
      #use DD; print "D:expects: "; dd \@expects;
      #use DD; print "D:seen_opts: "; dd \%seen_opts;
      #use DD; print "D:parsed_opts: "; dd \%parsed_opts;
      #use DD; print "D:exp: "; dd $exp;
      #use DD; say "D:word:<$word>";
  
      my @answers;
  
      # complete option names
      {
          last if $word =~ /\A[^-]/;
          last unless exists $exp->{optname};
          last if defined($exp->{do_complete_optname}) &&
              !$exp->{do_complete_optname};
          if ($exp->{comp_result}) {
              push @answers, $exp->{comp_result};
              last;
          }
          #say "D:completing option names";
          my $opt = $exp->{optname};
          my @o;
          for (@optnames) {
              my $repeatable = 0;
              next if $exp->{short_only} && /\A--/;
              if ($seen_opts{$_}) {
                  my $opthash = $opts{$_};
                  my $ospecval = $gospec->{$opthash->{ospec}};
                  my $parsed = $opthash->{parsed};
                  if (ref($ospecval) eq 'ARRAY') {
                      $repeatable = 1;
                  } elsif ($parsed->{desttype} || $parsed->{is_inc}) {
                      $repeatable = 1;
                  }
              }
              # skip options that have been specified and not repeatable
              #use DD; dd {'$_'=>$_, seen=>$seen_opts{$_}, repeatable=>$repeatable, opt=>$opt};
              next if $seen_opts{$_} && !$repeatable && (
                  # long option has been specified
                  (!$opt || $opt ne $_) ||
                       # short option (in a bundle) has been specified
                      (defined($exp->{prefix}) &&
                           index($exp->{prefix}, substr($opt, 1, 1)) >= 0));
              if (defined $exp->{prefix}) {
                  my $o = $_; $o =~ s/\A-//;
                  push @o, "$exp->{prefix}$o";
              } else {
                  push @o, $_;
              }
          }
          #use DD; dd \@o;
          my $compres = Complete::Util::complete_array_elem(
              array => \@o, word => $word);
          #$log->tracef('[comp][compgl] adding result from option names, '.
          #                 'matching options=%s', $compres);
          push @answers, $compres;
          if (!exists($exp->{optval}) && !exists($exp->{arg})) {
              $fres = {words=>$compres, esc_mode=>'option'};
              goto RETURN_RES;
          }
      }
  
      # complete option value
      {
          last unless exists($exp->{optval});
          #say "D:completing option value";
          my $opt = $exp->{optval};
          my $opthash = $opts{$opt} if $opt;
          my %compargs = (
              %$extras,
              type=>'optval', words=>\@words, cword=>$args{cword},
              word=>$word, opt=>$opt, ospec=>$opthash->{ospec},
              argpos=>undef, nth=>$exp->{nth}, seen_opts=>\%seen_opts,
              parsed_opts=>\%parsed_opts,
          );
          my $compres;
          if ($comp) {
              #$log->tracef("[comp][compgl] invoking routine supplied from 'completion' argument to complete option value, option=<%s>", $opt);
              $compres = $comp->(%compargs);
              Complete::Util::modify_answer(answer=>$compres, prefix=>$exp->{prefix})
                  if defined $exp->{prefix};
              #$log->tracef('[comp][compgl] adding result from routine: %s', $compres);
          }
          if (!$compres || !$comp) {
              $compres = _default_completion(%compargs);
              Complete::Util::modify_answer(answer=>$compres, prefix=>$exp->{prefix})
                  if defined $exp->{prefix};
              #$log->tracef('[comp][compgl] adding result from default '.
              #                 'completion routine');
          }
          push @answers, $compres;
      }
  
      # complete argument
      {
          last unless exists($exp->{arg});
          my %compargs = (
              %$extras,
              type=>'arg', words=>\@words, cword=>$args{cword},
              word=>$word, opt=>undef, ospec=>undef,
              argpos=>$exp->{argpos}, seen_opts=>\%seen_opts,
              parsed_opts=>\%parsed_opts,
          );
          #$log->tracef('[comp][compgl] invoking \'completion\' routine '.
          #                 'to complete argument');
          my $compres = $comp->(%compargs) if $comp;
          if (!defined $compres) {
              $compres = _default_completion(%compargs);
              #$log->tracef('[comp][compgl] adding result from default '.
              #                 'completion routine: %s', $compres);
          }
          push @answers, $compres;
      }
  
      #$log->tracef("[comp][compgl] combining result from %d source(s)", ~~@answers);
      $fres = Complete::Util::combine_answers(@answers) // [];
  
    RETURN_RES:
      #$log->tracef("[comp][compgl] leaving %s(), result=%s", $fname, $fres);
      $fres;
  }
  
  1;
  # ABSTRACT: Complete command-line argument using Getopt::Long specification
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Complete::Getopt::Long - Complete command-line argument using Getopt::Long specification
  
  =head1 VERSION
  
  This document describes version 0.46 of Complete::Getopt::Long (from Perl distribution Complete-Getopt-Long), released on 2017-01-13.
  
  =head1 SYNOPSIS
  
  See L<Getopt::Long::Complete> for an easy way to use this module.
  
  =head1 DESCRIPTION
  
  =head1 FUNCTIONS
  
  
  =head2 complete_cli_arg(%args) -> hash|array
  
  Complete command-line argument using Getopt::Long specification.
  
  This routine can complete option names, where the option names are retrieved
  from L<Getopt::Long> specification. If you provide completion routine in
  C<completion>, you can also complete I<option values> and I<arguments>.
  
  Note that this routine does not use L<Getopt::Long> (it does its own parsing)
  and currently is not affected by Getopt::Long's configuration. Its behavior
  mimics Getopt::Long under these configuration: C<no_ignore_case>, C<bundling> (or
  C<no_bundling> if the C<bundling> option is turned off). Which I think is the
  sensible default. This routine also does not currently support C<auto_help> and
  C<auto_version>, so you'll need to add those options specifically if you want to
  recognize C<--help/-?> and C<--version>, respectively.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<bundling> => I<bool> (default: 1)
  
  If you turn off bundling, completion of short-letter options won't support
  bundling (e.g. C<< -bE<lt>tabE<gt> >> won't add more single-letter options), but single-dash
  multiletter options can be recognized. Currently only those specified with a
  single dash will be completed. For example if you have C<-foo=s> in your option
  specification, C<< -fE<lt>tabE<gt> >> can complete it.
  
  This can be used to complete old-style programs, e.g. emacs which has options
  like C<-nw>, C<-nbc> etc (but also have double-dash options like
  C<--no-window-system> or C<--no-blinking-cursor>).
  
  =item * B<completion> => I<code>
  
  Completion routine to complete option value/argument.
  
  Completion code will receive a hash of arguments (C<%args>) containing these
  keys:
  
  =over
  
  =item * C<type> (str, what is being completed, either C<optval>, or C<arg>)
  
  =item * C<word> (str, word to be completed)
  
  =item * C<cword> (int, position of words in the words array, starts from 0)
  
  =item * C<opt> (str, option name, e.g. C<--str>; undef if we're completing argument)
  
  =item * C<ospec> (str, Getopt::Long option spec, e.g. C<str|S=s>; undef when completing
  argument)
  
  =item * C<argpos> (int, argument position, zero-based; undef if type='optval')
  
  =item * C<nth> (int, the number of times this option has seen before, starts from 0
  that means this is the first time this option has been seen; undef when
  type='arg')
  
  =item * C<seen_opts> (hash, all the options seen in C<words>)
  
  =item * C<parsed_opts> (hash, options parsed the standard/raw way)
  
  =back
  
  as well as all keys from C<extras> (but these won't override the above keys).
  
  and is expected to return a completion answer structure as described in
  C<Complete> which is either a hash or an array. The simplest form of answer is
  just to return an array of strings. The various C<complete_*> function like those
  in L<Complete::Util> or the other C<Complete::*> modules are suitable to use
  here.
  
  Completion routine can also return undef to express declination, in which case
  the default completion routine will then be consulted. The default routine
  completes from shell environment variables (C<$FOO>), Unix usernames (C<~foo>),
  and files/directories.
  
  Example:
  
   use Complete::Unix qw(complete_user);
   use Complete::Util qw(complete_array_elem);
   complete_cli_arg(
       getopt_spec => {
           'help|h'   => sub{...},
           'format=s' => \$format,
           'user=s'   => \$user,
       },
       completion  => sub {
           my %args  = @_;
           my $word  = $args{word};
           my $ospec = $args{ospec};
           if ($ospec && $ospec eq 'format=s') {
               complete_array_elem(array=>[qw/json text xml yaml/], word=>$word);
           } else {
               complete_user(word=>$word);
           }
       },
   );
  
  =item * B<cword>* => I<int>
  
  Index in words of the word we're trying to complete.
  
  See function C<parse_cmdline> in L<Complete::Bash> on how to produce this (if
  you're using bash).
  
  =item * B<extras> => I<hash>
  
  Add extra arguments to completion routine.
  
  The keys from this C<extras> hash will be merged into the final C<%args> passed to
  completion routines. Note that standard keys like C<type>, C<word>, and so on as
  described in the function description will not be overwritten by this.
  
  =item * B<getopt_spec>* => I<hash>
  
  Getopt::Long specification.
  
  =item * B<words>* => I<array>
  
  Command line arguments, like @ARGV.
  
  See function C<parse_cmdline> in L<Complete::Bash> on how to produce this (if
  you're using bash).
  
  =back
  
  Return value:  (hash|array)
  
  
  You can use C<format_completion> function in L<Complete::Bash> module to format
  the result of this function for bash.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Complete-Getopt-Long>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Complete-Getopt-Long>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Complete-Getopt-Long>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Getopt::Long::Complete>
  
  L<Complete>
  
  L<Complete::Bash>
  
  Other modules related to bash shell tab completion: L<Bash::Completion>,
  L<Getopt::Complete>.
  
  L<Perinci::CmdLine> - an alternative way to easily create command-line
  applications with completion feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
COMPLETE_GETOPT_LONG

    $main::fatpacked{"Complete/Path.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'COMPLETE_PATH';
  package Complete::Path;
  
  our $DATE = '2016-06-17'; # DATE
  our $VERSION = '0.23'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  use Log::Any::IfLOG '$log';
  
  use Complete::Common qw(:all);
  
  our $COMPLETE_PATH_TRACE = $ENV{COMPLETE_PATH_TRACE} // 0;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         complete_path
                 );
  
  sub _dig_leaf {
      my ($p, $list_func, $is_dir_func, $filter_func, $path_sep) = @_;
      my $num_dirs;
      my $listres = $list_func->($p, '', 0);
      return $p unless ref($listres) eq 'ARRAY' && @$listres;
      my @candidates;
    L1:
      for my $e (@$listres) {
          my $p2 = $p =~ m!\Q$path_sep\E\z! ? "$p$e" : "$p$path_sep$e";
          {
              local $_ = $p2; # convenience for filter func
              next L1 if $filter_func && !$filter_func->($p2);
          }
          push @candidates, $p2;
      }
      return $p unless @candidates == 1;
      my $p2 = $candidates[0];
      my $is_dir;
      if ($p2 =~ m!\Q$path_sep\E\z!) {
          $is_dir++;
      } else {
          $is_dir = $is_dir_func && $is_dir_func->($p2);
      }
      return _dig_leaf($p2, $list_func, $is_dir_func, $filter_func, $path_sep)
          if $is_dir;
      $p2;
  }
  
  our %SPEC;
  
  $SPEC{complete_path} = {
      v => 1.1,
      summary => 'Complete path',
      description => <<'_',
  
  Complete path, for anything path-like. Meant to be used as backend for other
  functions like `Complete::File::complete_file` or
  `Complete::Module::complete_module`. Provides features like case-insensitive
  matching, expanding intermediate paths, and case mapping.
  
  Algorithm is to split path into path elements, then list items (using the
  supplied `list_func`) and perform filtering (using the supplied `filter_func`)
  at every level.
  
  _
      args => {
          %arg_word,
          list_func => {
              summary => 'Function to list the content of intermediate "dirs"',
              schema => 'code*',
              req => 1,
              description => <<'_',
  
  Code will be called with arguments: ($path, $cur_path_elem, $is_intermediate).
  Code should return an arrayref containing list of elements. "Directories" can be
  marked by ending the name with the path separator (see `path_sep`). Or, you can
  also provide an `is_dir_func` function that will be consulted after filtering.
  If an item is a "directory" then its name will be suffixed with a path
  separator by `complete_path()`.
  
  _
          },
          is_dir_func => {
              summary => 'Function to check whether a path is a "dir"',
              schema  => 'code*',
              description => <<'_',
  
  Optional. You can provide this function to determine if an item is a "directory"
  (so its name can be suffixed with path separator). You do not need to do this if
  you already suffix names of "directories" with path separator in `list_func`.
  
  One reason you might want to provide this and not mark "directories" in
  `list_func` is when you want to do extra filtering with `filter_func`. Sometimes
  you do not want to suffix the names first (example: see `complete_file` in
  `Complete::File`).
  
  _
          },
          starting_path => {
              schema => 'str*',
              req => 1,
              default => '',
          },
          filter_func => {
              schema  => 'code*',
              description => <<'_',
  
  Provide extra filtering. Code will be given path and should return 1 if the item
  should be included in the final result or 0 if the item should be excluded.
  
  _
          },
          path_sep => {
              schema  => 'str*',
              default => '/',
          },
          #result_prefix => {
          #    summary => 'Prefix each result with this string',
          #    schema  => 'str*',
          #},
      },
      result_naked => 1,
      result => {
          schema => 'array',
      },
  };
  sub complete_path {
      require Complete::Util;
  
      my %args   = @_;
      my $word   = $args{word} // "";
      my $path_sep = $args{path_sep} // '/';
      my $list_func   = $args{list_func};
      my $is_dir_func = $args{is_dir_func};
      my $filter_func = $args{filter_func};
      my $result_prefix = $args{result_prefix};
      my $starting_path = $args{starting_path} // '';
  
      my $ci          = $Complete::Common::OPT_CI;
      my $word_mode   = $Complete::Common::OPT_WORD_MODE;
      my $fuzzy       = $Complete::Common::OPT_FUZZY;
      my $map_case    = $Complete::Common::OPT_MAP_CASE;
      my $exp_im_path = $Complete::Common::OPT_EXP_IM_PATH;
      my $dig_leaf    = $Complete::Common::OPT_DIG_LEAF;
  
      my $re_ends_with_path_sep = qr!\A\z|\Q$path_sep\E\z!;
  
      # split word by into path elements, as we want to dig level by level (needed
      # when doing case-insensitive search on a case-sensitive tree).
      my @intermediate_dirs;
      {
          @intermediate_dirs = split qr/\Q$path_sep/, $word;
          @intermediate_dirs = ('') if !@intermediate_dirs;
          push @intermediate_dirs, '' if $word =~ $re_ends_with_path_sep;
      }
  
      # extract leaf path, because this one is treated differently
      my $leaf = pop @intermediate_dirs;
      @intermediate_dirs = ('') if !@intermediate_dirs;
  
      #say "D:starting_path=<$starting_path>";
      #say "D:intermediate_dirs=[",join(", ", map{"<$_>"} @intermediate_dirs),"]";
      #say "D:leaf=<$leaf>";
  
      # candidate for intermediate paths. when doing case-insensitive search,
      # there maybe multiple candidate paths for each dir, for example if
      # word='../foo/s' and there is '../foo/Surya', '../Foo/sri', '../FOO/SUPER'
      # then candidate paths would be ['../foo', '../Foo', '../FOO'] and the
      # filename should be searched inside all those dirs. everytime we drill down
      # to deeper subdirectories, we adjust this list by removing
      # no-longer-eligible candidates.
      my @candidate_paths;
  
      for my $i (0..$#intermediate_dirs) {
          my $intdir = $intermediate_dirs[$i];
          my $intdir_with_path_sep = "$intdir$path_sep";
          my @dirs;
          if ($i == 0) {
              # first path elem, we search starting_path first since
              # candidate_paths is still empty.
              @dirs = ($starting_path);
          } else {
              # subsequent path elem, we search all candidate_paths
              @dirs = @candidate_paths;
          }
  
          if ($i == $#intermediate_dirs && $intdir eq '') {
              @candidate_paths = @dirs;
              last;
          }
  
          my @new_candidate_paths;
          for my $dir (@dirs) {
              #say "D:  intdir list($dir)";
              my $listres = $list_func->($dir, $intdir, 1);
              next unless $listres && @$listres;
              #use DD; say "D: list res=", DD::dump($listres);
              my $matches = Complete::Util::complete_array_elem(
                  word => $intdir, array => $listres,
              );
              my $exact_matches = [grep {
                  $_ eq $intdir || $_ eq $intdir_with_path_sep
              } @$matches];
              #use Data::Dmp; say "D: word=<$intdir>, matches=", dmp($matches), ", exact_matches=", dmp($exact_matches);
  
              # when doing exp_im_path, check if we have a single exact match. in
              # that case, don't use all the candidates because that can be
              # annoying, e.g. you have 'a/foo' and 'and/food', you won't be able
              # to complete 'a/f' because bash (e.g.) will always cut the answer
              # to 'a' because the candidates are 'a/foo' and 'and/foo' (it will
              # use the shortest common string which is 'a').
              #say "D:  num_exact_matches: ", scalar @$exact_matches;
              if (!$exp_im_path || @$exact_matches == 1) {
                  $matches = $exact_matches;
              }
  
              for (@$matches) {
                  my $p = $dir =~ $re_ends_with_path_sep ?
                      "$dir$_" : "$dir$path_sep$_";
                  push @new_candidate_paths, $p;
              }
  
          }
          #say "D:  candidate_paths=[",join(", ", map{"<$_>"} @new_candidate_paths),"]";
          return [] unless @new_candidate_paths;
          @candidate_paths = @new_candidate_paths;
      }
  
      my $cut_chars = 0;
      if (length($starting_path)) {
          $cut_chars += length($starting_path);
          unless ($starting_path =~ /\Q$path_sep\E\z/) {
              $cut_chars += length($path_sep);
          }
      }
  
      my @res;
      for my $dir (@candidate_paths) {
          #say "D:opendir($dir)";
          my $listres = $list_func->($dir, $leaf, 0);
          next unless $listres && @$listres;
          my $matches = Complete::Util::complete_array_elem(
              word => $leaf, array => $listres,
          );
          #use DD; dd $matches;
  
        L1:
          for my $e (@$matches) {
              my $p = $dir =~ $re_ends_with_path_sep ?
                  "$dir$e" : "$dir$path_sep$e";
              #say "D:p=$p";
              {
                  local $_ = $p; # convenience for filter func
                  next L1 if $filter_func && !$filter_func->($p);
              }
  
              my $is_dir;
              if ($e =~ $re_ends_with_path_sep) {
                  $is_dir = 1;
              } else {
                  local $_ = $p; # convenience for is_dir_func
                  $is_dir = $is_dir_func->($p);
              }
  
              if ($is_dir && $dig_leaf) {
                  {
                      my $p2 = _dig_leaf($p, $list_func, $is_dir_func, $filter_func, $path_sep);
                      last if $p2 eq $p;
                      $p = $p2;
                      #say "D:p=$p (dig_leaf)";
  
                      # check again
                      if ($p =~ $re_ends_with_path_sep) {
                          $is_dir = 1;
                      } else {
                          local $_ = $p; # convenience for is_dir_func
                          $is_dir = $is_dir_func->($p);
                      }
                  }
              }
  
              # process into final result
              my $p0 = $p;
              substr($p, 0, $cut_chars) = '' if $cut_chars;
              $p = "$result_prefix$p" if length($result_prefix);
              unless ($p =~ /\Q$path_sep\E\z/) {
                  $p .= $path_sep if $is_dir;
              }
              push @res, $p;
          }
      }
  
      \@res;
  }
  1;
  # ABSTRACT: Complete path
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Complete::Path - Complete path
  
  =head1 VERSION
  
  This document describes version 0.23 of Complete::Path (from Perl distribution Complete-Path), released on 2016-06-17.
  
  =head1 DESCRIPTION
  
  =head1 FUNCTIONS
  
  
  =head2 complete_path(%args) -> array
  
  Complete path.
  
  Complete path, for anything path-like. Meant to be used as backend for other
  functions like C<Complete::File::complete_file> or
  C<Complete::Module::complete_module>. Provides features like case-insensitive
  matching, expanding intermediate paths, and case mapping.
  
  Algorithm is to split path into path elements, then list items (using the
  supplied C<list_func>) and perform filtering (using the supplied C<filter_func>)
  at every level.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<filter_func> => I<code>
  
  Provide extra filtering. Code will be given path and should return 1 if the item
  should be included in the final result or 0 if the item should be excluded.
  
  =item * B<is_dir_func> => I<code>
  
  Function to check whether a path is a "dir".
  
  Optional. You can provide this function to determine if an item is a "directory"
  (so its name can be suffixed with path separator). You do not need to do this if
  you already suffix names of "directories" with path separator in C<list_func>.
  
  One reason you might want to provide this and not mark "directories" in
  C<list_func> is when you want to do extra filtering with C<filter_func>. Sometimes
  you do not want to suffix the names first (example: see C<complete_file> in
  C<Complete::File>).
  
  =item * B<list_func>* => I<code>
  
  Function to list the content of intermediate "dirs".
  
  Code will be called with arguments: ($path, $cur_path_elem, $is_intermediate).
  Code should return an arrayref containing list of elements. "Directories" can be
  marked by ending the name with the path separator (see C<path_sep>). Or, you can
  also provide an C<is_dir_func> function that will be consulted after filtering.
  If an item is a "directory" then its name will be suffixed with a path
  separator by C<complete_path()>.
  
  =item * B<path_sep> => I<str> (default: "/")
  
  =item * B<starting_path>* => I<str> (default: "")
  
  =item * B<word>* => I<str> (default: "")
  
  Word to complete.
  
  =back
  
  Return value:  (array)
  
  =head1 ENVIRONMENT
  
  =head2 COMPLETE_PATH_TRACE => bool
  
  If set to true, will produce more log statements for debugging.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Complete-Path>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Complete-Path>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Complete-Path>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Complete>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
COMPLETE_PATH

    $main::fatpacked{"Complete/Tcsh.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'COMPLETE_TCSH';
  package Complete::Tcsh;
  
  our $DATE = '2015-09-09'; # DATE
  our $VERSION = '0.02'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         parse_cmdline
                         format_completion
                 );
  
  require Complete::Bash;
  
  our %SPEC;
  
  $SPEC{':package'} = {
      v => 1.1,
      summary => 'Completion module for tcsh shell',
  };
  
  $SPEC{parse_cmdline} = {
      v => 1.1,
      summary => 'Parse shell command-line for processing by completion routines',
      description => <<'_',
  
  This function converts COMMAND_LINE (str) given by tcsh to become something like
  COMP_WORDS (array) and COMP_CWORD (int), like what bash supplies to shell
  functions. Currently implemented using `Complete::Bash`'s `parse_cmdline`.
  
  _
      args_as => 'array',
      args => {
          cmdline => {
              summary => 'Command-line, defaults to COMMAND_LINE environment',
              schema => 'str*',
              pos => 0,
          },
      },
      result => {
          schema => ['array*', len=>2],
          description => <<'_',
  
  Return a 2-element array: `[$words, $cword]`. `$words` is array of str,
  equivalent to `COMP_WORDS` provided by bash to shell functions. `$cword` is an
  integer, equivalent to `COMP_CWORD` provided by bash to shell functions. The
  word to be completed is at `$words->[$cword]`.
  
  Note that COMP_LINE includes the command name. If you want the command-line
  arguments only (like in `@ARGV`), you need to strip the first element from
  `$words` and reduce `$cword` by 1.
  
  _
      },
      result_naked => 1,
  };
  sub parse_cmdline {
      my ($line) = @_;
  
      $line //= $ENV{COMMAND_LINE};
      Complete::Bash::parse_cmdline($line, length($line));
  }
  
  $SPEC{format_completion} = {
      v => 1.1,
      summary => 'Format completion for output (for shell)',
      description => <<'_',
  
  tcsh accepts completion reply in the form of one entry per line to STDOUT.
  Currently the formatting is done using `Complete::Bash`'s `format_completion`
  because escaping rule and so on are not yet well defined in tcsh.
  
  _
      args_as => 'array',
      args => {
          completion => {
              summary => 'Completion answer structure',
              description => <<'_',
  
  Either an array or hash, as described in `Complete`.
  
  _
              schema=>['any*' => of => ['hash*', 'array*']],
              req=>1,
              pos=>0,
          },
      },
      result => {
          summary => 'Formatted string (or array, if `as` is set to `array`)',
          schema => ['any*' => of => ['str*', 'array*']],
      },
      result_naked => 1,
  };
  sub format_completion {
      Complete::Bash::format_completion(@_);
  }
  
  1;
  # ABSTRACT: Completion module for tcsh shell
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Complete::Tcsh - Completion module for tcsh shell
  
  =head1 VERSION
  
  This document describes version 0.02 of Complete::Tcsh (from Perl distribution Complete-Tcsh), released on 2015-09-09.
  
  =head1 DESCRIPTION
  
  tcsh allows completion to come from various sources. One of the simplest is from
  a list of words:
  
   % complete CMDNAME 'p/*/(one two three)/'
  
  Another source is from an external command:
  
   % complete CMDNAME 'p/*/`mycompleter --somearg`/'
  
  The command receives one environment variables C<COMMAND_LINE> (string, raw
  command-line). Unlike bash, tcsh does not (yet) provide something akin to
  C<COMP_POINT> in bash. Command is expected to print completion entries, one line
  at a time.
  
   % cat mycompleter
   #!/usr/bin/perl
   use Complete::Tcsh qw(parse_cmdline format_completion);
   use Complete::Util qw(complete_array_elem);
   my ($words, $cword) = parse_cmdline();
   my $res = complete_array_elem(array=>[qw/--help --verbose --version/], word=>$words->[$cword]);
   print format_completion($res);
  
   % complete -C foo-complete foo
   % foo --v<Tab>
   --verbose --version
  
  This module provides routines for you to be doing the above.
  
  Also, unlike bash, currently tcsh does not allow delegating completion to a
  shell function.
  
  =head1 FUNCTIONS
  
  
  =head2 format_completion($completion) -> str|array
  
  Format completion for output (for shell).
  
  tcsh accepts completion reply in the form of one entry per line to STDOUT.
  Currently the formatting is done using C<Complete::Bash>'s C<format_completion>
  because escaping rule and so on are not yet well defined in tcsh.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<completion>* => I<hash|array>
  
  Completion answer structure.
  
  Either an array or hash, as described in C<Complete>.
  
  =back
  
  Return value: Formatted string (or array, if `as` is set to `array`) (str|array)
  
  
  =head2 parse_cmdline($cmdline) -> array
  
  Parse shell command-line for processing by completion routines.
  
  This function converts COMMAND_LINE (str) given by tcsh to become something like
  COMP_WORDS (array) and COMP_CWORD (int), like what bash supplies to shell
  functions. Currently implemented using C<Complete::Bash>'s C<parse_cmdline>.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<cmdline> => I<str>
  
  Command-line, defaults to COMMAND_LINE environment.
  
  =back
  
  Return value:  (array)
  
  
  Return a 2-element array: C<[$words, $cword]>. C<$words> is array of str,
  equivalent to C<COMP_WORDS> provided by bash to shell functions. C<$cword> is an
  integer, equivalent to C<COMP_CWORD> provided by bash to shell functions. The
  word to be completed is at C<< $words-E<gt>[$cword] >>.
  
  Note that COMP_LINE includes the command name. If you want the command-line
  arguments only (like in C<@ARGV>), you need to strip the first element from
  C<$words> and reduce C<$cword> by 1.
  
  =head1 SEE ALSO
  
  L<Complete>
  
  L<Complete::Bash>
  
  tcsh manual.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Complete-Tcsh>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Complete-Tcsh>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Complete-Tcsh>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
COMPLETE_TCSH

    $main::fatpacked{"Complete/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'COMPLETE_UTIL';
  package Complete::Util;
  
  our $DATE = '2016-12-10'; # DATE
  our $VERSION = '0.58'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  use Log::Any::IfLOG '$log';
  
  use Complete::Common qw(:all);
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(
                         hashify_answer
                         arrayify_answer
                         combine_answers
                         modify_answer
                         complete_array_elem
                         complete_hash_key
                         complete_comma_sep
                 );
  
  our %SPEC;
  
  our $COMPLETE_UTIL_TRACE = $ENV{COMPLETE_UTIL_TRACE} // 0;
  
  $SPEC{':package'} = {
      v => 1.1,
      summary => 'General completion routine',
      description => <<'_',
  
  This package provides some generic completion routine that follows the
  <pm:Complete> convention (if you are looking for bash/shell tab completion
  routine, take a look at the See Also section). The main routine is
  `complete_array_elem` which tries to complete a word using choices from elements
  of supplied array. For example:
  
      complete_array_elem(word => "a", array => ["apple", "apricot", "banana"]);
  
  The routine will first try a simple substring prefix matching. If that fails,
  will try some other methods like word-mode, character-mode, or fuzzy matching.
  These methods can be disabled using settings.
  
  There are other utility routines e.g. for converting completion answer structure
  from hash to array/array to hash, combine or modify answer, etc. These routines
  are usually used by the other more specific or higher-level completion modules.
  
  _
  };
  
  $SPEC{hashify_answer} = {
      v => 1.1,
      summary => 'Make sure we return completion answer in hash form',
      description => <<'_',
  
  This function accepts a hash or an array. If it receives an array, will convert
  the array into `{words=>$ary}' first to make sure the completion answer is in
  hash form.
  
  Then will add keys from `meta` to the hash.
  
  _
      args => {
          arg => {
              summary => '',
              schema  => ['any*' => of => ['array*','hash*']],
              req => 1,
              pos => 0,
          },
          meta => {
              summary => 'Metadata (extra keys) for the hash',
              schema  => 'hash*',
              pos => 1,
          },
      },
      args_as => 'array',
      result_naked => 1,
      result => {
          schema => 'hash*',
      },
  };
  sub hashify_answer {
      my $ans = shift;
      if (ref($ans) ne 'HASH') {
          $ans = {words=>$ans};
      }
      if (@_) {
          my $meta = shift;
          for (keys %$meta) {
              $ans->{$_} = $meta->{$_};
          }
      }
      $ans;
  }
  
  $SPEC{arrayify_answer} = {
      v => 1.1,
      summary => 'Make sure we return completion answer in array form',
      description => <<'_',
  
  This is the reverse of `hashify_answer`. It accepts a hash or an array. If it
  receives a hash, will return its `words` key.
  
  _
      args => {
          arg => {
              summary => '',
              schema  => ['any*' => of => ['array*','hash*']],
              req => 1,
              pos => 0,
          },
      },
      args_as => 'array',
      result_naked => 1,
      result => {
          schema => 'array*',
      },
  };
  sub arrayify_answer {
      my $ans = shift;
      if (ref($ans) eq 'HASH') {
          $ans = $ans->{words};
      }
      $ans;
  }
  
  sub __min(@) {
      my $m = $_[0];
      for (@_) {
          $m = $_ if $_ < $m;
      }
      $m;
  }
  
  our $code_editdist;
  our $editdist_flex;
  
  # straight copy of Wikipedia's "Levenshtein Distance"
  sub __editdist {
      my @a = split //, shift;
      my @b = split //, shift;
  
      # There is an extra row and column in the matrix. This is the distance from
      # the empty string to a substring of the target.
      my @d;
      $d[$_][0] = $_ for 0 .. @a;
      $d[0][$_] = $_ for 0 .. @b;
  
      for my $i (1 .. @a) {
          for my $j (1 .. @b) {
              $d[$i][$j] = (
                  $a[$i-1] eq $b[$j-1]
                      ? $d[$i-1][$j-1]
                      : 1 + __min(
                          $d[$i-1][$j],
                          $d[$i][$j-1],
                          $d[$i-1][$j-1]
                      )
                  );
          }
      }
  
      $d[@a][@b];
  }
  
  my %complete_array_elem_args = (
      %arg_word,
      array       => {
          schema => ['array*'=>{of=>'str*'}],
          req => 1,
          pos => 1,
          greedy => 1,
      },
      exclude     => {
          schema => ['array*'],
      },
      replace_map => {
          schema => ['hash*', each_value=>['array*', of=>'str*']],
          description => <<'_',
  
  You can supply correction entries in this option. An example is when array if
  `['mount','unmount']` and `umount` is a popular "typo" for `unmount`. When
  someone already types `um` it cannot be completed into anything (even the
  current fuzzy mode will return *both* so it cannot complete immediately).
  
  One solution is to add replace_map `{'unmount'=>['umount']}`. This way, `umount`
  will be regarded the same as `unmount` and when user types `um` it can be
  completed unambiguously into `unmount`.
  
  _
          tags => ['experimental'],
      },
  );
  
  $SPEC{complete_array_elem} = {
      v => 1.1,
      summary => 'Complete from array',
      description => <<'_',
  
  Try to find completion from an array of strings. Will attempt several methods,
  from the cheapest and most discriminating to the most expensive and least
  discriminating: normal string prefix matching, word-mode matching (see
  `Complete::Common::OPT_WORD_MODE` for more details), char-mode matching (see
  `Complete::Common::OPT_CHAR_MODE` for more details), and fuzzy matching (see
  `Complete::Common::OPT_FUZZY` for more details).
  
  Will sort the resulting completion list, so you don't have to presort the array.
  
  _
      args => {
          %complete_array_elem_args,
      },
      result_naked => 1,
      result => {
          schema => 'array',
      },
  };
  sub complete_array_elem {
      my %args  = @_;
  
      my $array0    = $args{array} or die "Please specify array";
      my $word      = $args{word} // "";
  
      my $ci          = $Complete::Common::OPT_CI;
      my $map_case    = $Complete::Common::OPT_MAP_CASE;
      my $word_mode   = $Complete::Common::OPT_WORD_MODE;
      my $char_mode   = $Complete::Common::OPT_CHAR_MODE;
      my $fuzzy       = $Complete::Common::OPT_FUZZY;
  
      $log->tracef("[computil] entering complete_array_elem(), word=<%s>", $word)
          if $COMPLETE_UTIL_TRACE;
  
      my $res;
  
      unless (@$array0) {
          $res = []; goto RETURN_RES;
      }
  
      # normalize
      my $wordn = $ci ? uc($word) : $word; $wordn =~ s/_/-/g if $map_case;
  
      my $excluden;
      if ($args{exclude}) {
          $excluden = {};
          for my $el (@{$args{exclude}}) {
              my $eln = $ci ? uc($el) : $el; $eln =~ s/_/-/g if $map_case;
              $excluden->{$eln} //= 1;
          }
      }
  
      my $rmapn;
      my $rev_rmapn; # to replace back to the original words back in the result
      if (my $rmap = $args{replace_map}) {
          $rmapn = {};
          $rev_rmapn = {};
          for my $k (keys %$rmap) {
              my $kn = $ci ? uc($k) : $k; $kn =~ s/_/-/g if $map_case;
              my @vn;
              for my $v (@{ $rmap->{$k} }) {
                  my $vn = $ci ? uc($v) : $v; $vn =~ s/_/-/g if $map_case;
                  push @vn, $vn;
                  $rev_rmapn->{$vn} //= $k;
              }
              $rmapn->{$kn} = \@vn;
          }
      }
  
      my @words; # the answer
      my @array ;  # original array + rmap entries
      my @arrayn;  # case- & map-case-normalized form of $array + rmap entries
  
      # normal string prefix matching. we also fill @array & @arrayn here (which
      # will be used again in word-mode, fuzzy, and char-mode matching) so we
      # don't have to calculate again.
      $log->tracef("[computil] Trying normal string-prefix matching ...") if $COMPLETE_UTIL_TRACE;
      for my $el (@$array0) {
          my $eln = $ci ? uc($el) : $el; $eln =~ s/_/-/g if $map_case;
          next if $excluden && $excluden->{$eln};
          push @array , $el;
          push @arrayn, $eln;
          push @words , $el if 0==index($eln, $wordn);
          if ($rmapn && $rmapn->{$eln}) {
              for my $vn (@{ $rmapn->{$eln} }) {
                  push @array , $el;
                  push @arrayn, $vn;
                  # we add the normalized form, because we'll just revert it back
                  # to the original word in the final result
                  push @words , $vn if 0==index($vn, $wordn);
              }
          }
      }
      $log->tracef("[computil] Result from normal string-prefix matching: %s", \@words) if @words && $COMPLETE_UTIL_TRACE;
  
      # word-mode matching
      {
          last unless $word_mode && !@words;
          my @split_wordn = $wordn =~ /(\w+)/g;
          unshift @split_wordn, '' if $wordn =~ /\A\W/;
          last unless @split_wordn > 1;
          my $re = '\A';
          for my $i (0..$#split_wordn) {
              $re .= '(?:\W+\w+)*\W+' if $i;
              $re .= quotemeta($split_wordn[$i]).'\w*';
          }
          $re = qr/$re/;
          $log->tracef("[computil] Trying word-mode matching (re=%s) ...", $re) if $COMPLETE_UTIL_TRACE;
  
          for my $i (0..$#array) {
              my $match;
              {
                  if ($arrayn[$i] =~ $re) {
                      $match++;
                      last;
                  }
                  # try splitting CamelCase into Camel-Case
                  my $tmp = $array[$i];
                  if ($tmp =~ s/([a-z0-9_])([A-Z])/$1-$2/g) {
                      $tmp = uc($tmp) if $ci; $tmp =~ s/_/-/g if $map_case; # normalize again
                      if ($tmp =~ $re) {
                          $match++;
                          last;
                      }
                  }
              }
              next unless $match;
              push @words, $array[$i];
          }
          $log->tracef("[computil] Result from word-mode matching: %s", \@words) if @words && $COMPLETE_UTIL_TRACE;
      }
  
      # char-mode matching
      if ($char_mode && !@words && length($wordn) && length($wordn) <= 7) {
          my $re = join(".*", map {quotemeta} split(//, $wordn));
          $re = qr/$re/;
          $log->tracef("[computil] Trying char-mode matching (re=%s) ...", $re) if $COMPLETE_UTIL_TRACE;
          for my $i (0..$#array) {
              push @words, $array[$i] if $arrayn[$i] =~ $re;
          }
          $log->tracef("[computil] Result from char-mode matching: %s", \@words) if @words && $COMPLETE_UTIL_TRACE;
      }
  
      # fuzzy matching
      if ($fuzzy && !@words) {
          $log->tracef("[computil] Trying fuzzy matching ...") if $COMPLETE_UTIL_TRACE;
          $code_editdist //= do {
              my $env = $ENV{COMPLETE_UTIL_LEVENSHTEIN} // '';
              if ($env eq 'xs') {
                  require Text::Levenshtein::XS;
                  $editdist_flex = 0;
                  \&Text::Levenshtein::XS::distance;
              } elsif ($env eq 'flexible') {
                  require Text::Levenshtein::Flexible;
                  $editdist_flex = 1;
                  \&Text::Levenshtein::Flexible::levenshtein_l;
              } elsif ($env eq 'pp') {
                  $editdist_flex = 0;
                  \&__editdist;
              } elsif (eval { require Text::Levenshtein::Flexible; 1 }) {
                  $editdist_flex = 1;
                  \&Text::Levenshtein::Flexible::levenshtein_l;
              } else {
                  $editdist_flex = 0;
                  \&__editdist;
              }
          };
  
          my $factor = 1.3;
          my $x = -1;
          my $y = 1;
  
          # note: we cannot use Text::Levenshtein::Flexible::levenshtein_l_all()
          # because we perform distance calculation on the normalized array but we
          # want to get the original array elements
  
          my %editdists;
        ELEM:
          for my $i (0..$#array) {
              my $eln = $arrayn[$i];
  
              for my $l (length($wordn)-$y .. length($wordn)+$y) {
                  next if $l <= 0;
                  my $chopped = substr($eln, 0, $l);
                  my $maxd = __min(
                      __min(length($chopped), length($word))/$factor,
                      $fuzzy,
                  );
                  my $d;
                  unless (defined $editdists{$chopped}) {
                      if ($editdist_flex) {
                          $d = $code_editdist->($wordn, $chopped, $maxd);
                          next ELEM unless defined $d;
                      } else {
                          $d = $code_editdist->($wordn, $chopped);
                      }
                      $editdists{$chopped} = $d;
                  } else {
                      $d = $editdists{$chopped};
                  }
                  #say "D: d($word,$chopped)=$d (maxd=$maxd)";
                  next unless $d <= $maxd;
                  push @words, $array[$i];
                  next ELEM;
              }
          }
          $log->tracef("[computil] Result from fuzzy matching: %s", \@words) if @words && $COMPLETE_UTIL_TRACE;
      }
  
      # replace back the words from replace_map
      if ($rmapn && @words) {
          my @wordsn;
          for my $el (@words) {
              my $eln = $ci ? uc($el) : $el; $eln =~ s/_/-/g if $map_case;
              push @wordsn, $eln;
          }
          for my $i (0..$#words) {
              if (my $w = $rev_rmapn->{$wordsn[$i]}) {
                  $words[$i] = $w;
              }
          }
      }
  
      $res =$ci ? [sort {lc($a) cmp lc($b)} @words] : [sort @words];
  
    RETURN_RES:
      $log->tracef("[computil] leaving complete_array_elem(), res=%s", $res)
          if $COMPLETE_UTIL_TRACE;
      $res;
  }
  
  $SPEC{complete_hash_key} = {
      v => 1.1,
      summary => 'Complete from hash keys',
      args => {
          %arg_word,
          hash      => { schema=>['hash*'=>{}], req=>1 },
      },
      result_naked => 1,
      result => {
          schema => 'array',
      },
  };
  sub complete_hash_key {
      my %args  = @_;
      my $hash      = $args{hash} or die "Please specify hash";
      my $word      = $args{word} // "";
  
      complete_array_elem(
          word=>$word, array=>[sort keys %$hash],
      );
  }
  
  my %complete_comma_sep_args = (
      %complete_array_elem_args,
      sep => {
          schema  => 'str*',
          default => ',',
      },
      uniq => {
          summary => 'Whether list should contain unique elements',
          description => <<'_',
  
  When this option is set to true, if the formed list in the current word already
  contains an element, the element will not be offered again as completion answer.
  For example, if `elems` is `[1,2,3,4]` and `word` is `2,3,` then without `uniq`
  set to true the completion answer is:
  
      2,3,1
      2,3,2
      2,3,3
      2,3,4
  
  but with `uniq` set to true, the completion answer becomes:
  
      2,3,1
      2,3,4
  
  See also the `remaining` option for a more general mechanism of offering fewer
  elements.
  
  _
          schema => ['bool*', is=>1],
      },
      remaining => {
          schema => ['code*'],
          summary => 'What elements should remain for completion',
          description => <<'_',
  
  This is a more general mechanism if the `uniq` option does not suffice. Suppose
  you are offering completion for sorting fields. The elements are field names as
  well as field names prefixed with dash (`-`) to mean sorting with a reverse
  order. So for example `elems` is `["name","-name","age","-age"]`. When current
  word is `name`, it doesn't make sense to offer `name` nor `-name` again as the
  next sorting field. So we can set `remaining` to this code:
  
      sub {
          my ($seen_elems, $elems) = @_;
  
          my %seen;
          for (@$seen_elems) {
              (my $nodash = $_) =~ s/^-//;
              $seen{$nodash}++;
          }
  
          my @remaining;
          for (@$elems) {
              (my $nodash = $_) =~ s/^-//;
              push @remaining, $_ unless $seen{$nodash};
          }
  
          \@remaining;
      }
  
  As you can see above, the code is given `$seen_elems` and `$elems` as arguments
  and is expected to return remaining elements to offer.
  
  _
          tags => ['hidden-cli'],
      },
  );
  $complete_comma_sep_args{elems} = delete $complete_comma_sep_args{array};
  
  $SPEC{complete_comma_sep} = {
      v => 1.1,
      summary => 'Complete a comma-separated list string',
      args => {
          %complete_comma_sep_args,
      },
      result_naked => 1,
      result => {
          schema => 'array',
      },
  };
  sub complete_comma_sep {
      my %args  = @_;
      my $word      = delete $args{word} // "";
      my $sep       = delete $args{sep} // ',';
      my $elems     = delete $args{elems} or die "Please specify elems";
      my $uniq      = delete $args{uniq};
      my $remaining = delete $args{remaining};
  
      my $ci = $Complete::Common::OPT_CI;
  
      my @mentioned_elems = split /\Q$sep\E/, $word, -1;
      my $cae_word = @mentioned_elems ? pop(@mentioned_elems) : '';
  
      my $remaining_elems;
      if ($remaining) {
          $remaining_elems = $remaining->(\@mentioned_elems, $elems);
      } elsif ($uniq) {
          my %mem;
          $remaining_elems = [];
          for (@mentioned_elems) {
              if ($ci) { $mem{lc $_}++ } else { $mem{$_}++ }
          }
          for (@$elems) {
              push @$remaining_elems, $_ unless ($ci ? $mem{lc $_} : $mem{$_});
          }
      } else {
          $remaining_elems = $elems;
      }
  
      my $cae_res = complete_array_elem(
          %args,
          word  => $cae_word,
          array => $remaining_elems,
      );
  
      my $prefix = join($sep, @mentioned_elems);
      $prefix .= $sep if @mentioned_elems;
      $cae_res = [map { "$prefix$_" } @$cae_res];
  
      # add trailing comma for convenience, where appropriate
      {
          last unless @$cae_res == 1;
          last if @$remaining_elems <= 1;
          $cae_res->[0] .= $sep;
      }
      $cae_res;
  }
  
  $SPEC{combine_answers} = {
      v => 1.1,
      summary => 'Given two or more answers, combine them into one',
      description => <<'_',
  
  This function is useful if you want to provide a completion answer that is
  gathered from multiple sources. For example, say you are providing completion
  for the Perl tool <prog:cpanm>, which accepts a filename (a tarball like
  `*.tar.gz`), a directory, or a module name. You can do something like this:
  
      combine_answers(
          complete_file(word=>$word),
          complete_module(word=>$word),
      );
  
  But if a completion answer has a metadata `final` set to true, then that answer
  is used as the final answer without any combining with the other answers.
  
  _
      args => {
          answers => {
              schema => [
                  'array*' => {
                      of => ['any*', of=>['hash*','array*']], # XXX answer_t
                      min_len => 1,
                  },
              ],
              req => 1,
              pos => 0,
              greedy => 1,
          },
      },
      args_as => 'array',
      result_naked => 1,
      result => {
          schema => 'hash*',
          description => <<'_',
  
  Return a combined completion answer. Words from each input answer will be
  combined, order preserved and duplicates removed. The other keys from each
  answer will be merged.
  
  _
      },
  };
  sub combine_answers {
      require List::Util;
  
      return undef unless @_;
      return $_[0] if @_ < 2;
  
      my $final = {words=>[]};
      my $encounter_hash;
      my $add_words = sub {
          my $words = shift;
          for my $entry (@$words) {
              push @{ $final->{words} }, $entry
                  unless List::Util::first(
                      sub {
                          (ref($entry) ? $entry->{word} : $entry)
                              eq
                                  (ref($_) ? $_->{word} : $_)
                              }, @{ $final->{words} }
                          );
          }
      };
  
    ANSWER:
      for my $ans (@_) {
          if (ref($ans) eq 'ARRAY') {
              $add_words->($ans);
          } elsif (ref($ans) eq 'HASH') {
              $encounter_hash++;
  
              if ($ans->{final}) {
                  $final = $ans;
                  last ANSWER;
              }
  
              $add_words->($ans->{words} // []);
              for (keys %$ans) {
                  if ($_ eq 'words') {
                      next;
                  } elsif ($_ eq 'static') {
                      if (exists $final->{$_}) {
                          $final->{$_} &&= $ans->{$_};
                      } else {
                          $final->{$_} = $ans->{$_};
                      }
                  } else {
                      $final->{$_} = $ans->{$_};
                  }
              }
          }
      }
  
      # re-sort final words
      if ($final->{words}) {
          $final->{words} = [
              sort {
                  (ref($a) ? $a->{word} : $a) cmp
                      (ref($b) ? $b->{word} : $b);
              }
                  @{ $final->{words} }];
      }
  
      $encounter_hash ? $final : $final->{words};
  }
  
  $SPEC{modify_answer} = {
      v => 1.1,
      summary => 'Modify answer (add prefix/suffix, etc)',
      args => {
          answer => {
              schema => ['any*', of=>['hash*','array*']], # XXX answer_t
              req => 1,
              pos => 0,
          },
          suffix => {
              schema => 'str*',
          },
          prefix => {
              schema => 'str*',
          },
      },
      result_naked => 1,
      result => {
          schema => 'undef',
      },
  };
  sub modify_answer {
      my %args = @_;
  
      my $answer = $args{answer};
      my $words = ref($answer) eq 'HASH' ? $answer->{words} : $answer;
  
      if (defined(my $prefix = $args{prefix})) {
          $_ = "$prefix$_" for @$words;
      }
      if (defined(my $suffix = $args{suffix})) {
          $_ = "$_$suffix" for @$words;
      }
      undef;
  }
  
  1;
  # ABSTRACT: General completion routine
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Complete::Util - General completion routine
  
  =head1 VERSION
  
  This document describes version 0.58 of Complete::Util (from Perl distribution Complete-Util), released on 2016-12-10.
  
  =head1 DESCRIPTION
  
  
  This package provides some generic completion routine that follows the
  L<Complete> convention (if you are looking for bash/shell tab completion
  routine, take a look at the See Also section). The main routine is
  C<complete_array_elem> which tries to complete a word using choices from elements
  of supplied array. For example:
  
   complete_array_elem(word => "a", array => ["apple", "apricot", "banana"]);
  
  The routine will first try a simple substring prefix matching. If that fails,
  will try some other methods like word-mode, character-mode, or fuzzy matching.
  These methods can be disabled using settings.
  
  There are other utility routines e.g. for converting completion answer structure
  from hash to array/array to hash, combine or modify answer, etc. These routines
  are usually used by the other more specific or higher-level completion modules.
  
  =head1 FUNCTIONS
  
  
  =head2 arrayify_answer($arg) -> array
  
  Make sure we return completion answer in array form.
  
  This is the reverse of C<hashify_answer>. It accepts a hash or an array. If it
  receives a hash, will return its C<words> key.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<$arg>* => I<array|hash>
  
  =back
  
  Return value:  (array)
  
  
  =head2 combine_answers($answers, ...) -> hash
  
  Given two or more answers, combine them into one.
  
  This function is useful if you want to provide a completion answer that is
  gathered from multiple sources. For example, say you are providing completion
  for the Perl tool L<cpanm>, which accepts a filename (a tarball like
  C<*.tar.gz>), a directory, or a module name. You can do something like this:
  
   combine_answers(
       complete_file(word=>$word),
       complete_module(word=>$word),
   );
  
  But if a completion answer has a metadata C<final> set to true, then that answer
  is used as the final answer without any combining with the other answers.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<$answers>* => I<array[hash|array]>
  
  =back
  
  Return value:  (hash)
  
  
  Return a combined completion answer. Words from each input answer will be
  combined, order preserved and duplicates removed. The other keys from each
  answer will be merged.
  
  
  =head2 complete_array_elem(%args) -> array
  
  Complete from array.
  
  Try to find completion from an array of strings. Will attempt several methods,
  from the cheapest and most discriminating to the most expensive and least
  discriminating: normal string prefix matching, word-mode matching (see
  C<Complete::Common::OPT_WORD_MODE> for more details), char-mode matching (see
  C<Complete::Common::OPT_CHAR_MODE> for more details), and fuzzy matching (see
  C<Complete::Common::OPT_FUZZY> for more details).
  
  Will sort the resulting completion list, so you don't have to presort the array.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<array>* => I<array[str]>
  
  =item * B<exclude> => I<array>
  
  =item * B<replace_map> => I<hash>
  
  You can supply correction entries in this option. An example is when array if
  C<['mount','unmount']> and C<umount> is a popular "typo" for C<unmount>. When
  someone already types C<um> it cannot be completed into anything (even the
  current fuzzy mode will return I<both> so it cannot complete immediately).
  
  One solution is to add replace_map C<< {'unmount'=E<gt>['umount']} >>. This way, C<umount>
  will be regarded the same as C<unmount> and when user types C<um> it can be
  completed unambiguously into C<unmount>.
  
  =item * B<word>* => I<str> (default: "")
  
  Word to complete.
  
  =back
  
  Return value:  (array)
  
  
  =head2 complete_comma_sep(%args) -> array
  
  Complete a comma-separated list string.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<elems>* => I<array[str]>
  
  =item * B<exclude> => I<array>
  
  =item * B<remaining> => I<code>
  
  What elements should remain for completion.
  
  This is a more general mechanism if the C<uniq> option does not suffice. Suppose
  you are offering completion for sorting fields. The elements are field names as
  well as field names prefixed with dash (C<->) to mean sorting with a reverse
  order. So for example C<elems> is C<["name","-name","age","-age"]>. When current
  word is C<name>, it doesn't make sense to offer C<name> nor C<-name> again as the
  next sorting field. So we can set C<remaining> to this code:
  
   sub {
       my ($seen_elems, $elems) = @_;
   
       my %seen;
       for (@$seen_elems) {
           (my $nodash = $_) =~ s/^-//;
           $seen{$nodash}++;
       }
   
       my @remaining;
       for (@$elems) {
           (my $nodash = $_) =~ s/^-//;
           push @remaining, $_ unless $seen{$nodash};
       }
   
       \@remaining;
   }
  
  As you can see above, the code is given C<$seen_elems> and C<$elems> as arguments
  and is expected to return remaining elements to offer.
  
  =item * B<replace_map> => I<hash>
  
  You can supply correction entries in this option. An example is when array if
  C<['mount','unmount']> and C<umount> is a popular "typo" for C<unmount>. When
  someone already types C<um> it cannot be completed into anything (even the
  current fuzzy mode will return I<both> so it cannot complete immediately).
  
  One solution is to add replace_map C<< {'unmount'=E<gt>['umount']} >>. This way, C<umount>
  will be regarded the same as C<unmount> and when user types C<um> it can be
  completed unambiguously into C<unmount>.
  
  =item * B<sep> => I<str> (default: ",")
  
  =item * B<uniq> => I<bool>
  
  Whether list should contain unique elements.
  
  When this option is set to true, if the formed list in the current word already
  contains an element, the element will not be offered again as completion answer.
  For example, if C<elems> is C<[1,2,3,4]> and C<word> is C<2,3,> then without C<uniq>
  set to true the completion answer is:
  
   2,3,1
   2,3,2
   2,3,3
   2,3,4
  
  but with C<uniq> set to true, the completion answer becomes:
  
   2,3,1
   2,3,4
  
  See also the C<remaining> option for a more general mechanism of offering fewer
  elements.
  
  =item * B<word>* => I<str> (default: "")
  
  Word to complete.
  
  =back
  
  Return value:  (array)
  
  
  =head2 complete_hash_key(%args) -> array
  
  Complete from hash keys.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<hash>* => I<hash>
  
  =item * B<word>* => I<str> (default: "")
  
  Word to complete.
  
  =back
  
  Return value:  (array)
  
  
  =head2 hashify_answer($arg, $meta) -> hash
  
  Make sure we return completion answer in hash form.
  
  This function accepts a hash or an array. If it receives an array, will convert
  the array into `{words=>$ary}' first to make sure the completion answer is in
  hash form.
  
  Then will add keys from C<meta> to the hash.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<$arg>* => I<array|hash>
  
  =item * B<$meta> => I<hash>
  
  Metadata (extra keys) for the hash.
  
  =back
  
  Return value:  (hash)
  
  
  =head2 modify_answer(%args) -> undef
  
  Modify answer (add prefix/suffix, etc).
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<answer>* => I<hash|array>
  
  =item * B<prefix> => I<str>
  
  =item * B<suffix> => I<str>
  
  =back
  
  Return value:  (undef)
  
  =head1 FAQ
  
  =head2 Why is fuzzy matching slow?
  
  Example:
  
   use Benchmark qw(timethis);
   use Complete::Util qw(complete_array_elem);
  
   # turn off the other non-exact matching methods
   $Complete::Common::OPT_CI = 0;
   $Complete::Common::OPT_WORD_MODE = 0;
   $Complete::Common::OPT_CHAR_MODE = 0;
  
   my @ary = ("aaa".."zzy"); # 17575 elems
   timethis(20, sub { complete_array_elem(array=>\@ary, word=>"zzz") });
  
  results in:
  
   timethis 20:  7 wallclock secs ( 6.82 usr +  0.00 sys =  6.82 CPU) @  2.93/s (n=20)
  
  Answer: fuzzy matching is slower than exact matching due to having to calculate
  Levenshtein distance. But if you find fuzzy matching too slow using the default
  pure-perl implementation, you might want to install
  L<Text::Levenshtein::Flexible> (an optional prereq) to speed up fuzzy matching.
  After Text::Levenshtein::Flexible is installed:
  
   timethis 20:  1 wallclock secs ( 1.04 usr +  0.00 sys =  1.04 CPU) @ 19.23/s (n=20)
  
  =head1 ENVIRONMENT
  
  =head2 COMPLETE_UTIL_TRACE => bool
  
  If set to true, will display more log statements for debugging.
  
  =head2 COMPLETE_UTIL_LEVENSHTEIN => str ('pp'|'xs'|'flexible')
  
  Can be used to force which Levenshtein distance implementation to use. C<pp>
  means the included PP implementation, which is the slowest (1-2 orders of
  magnitude slower than XS implementations), C<xs> which means
  L<Text::Levenshtein::XS>, or C<flexible> which means
  L<Text::Levenshtein::Flexible> (performs best).
  
  If this is not set, the default is to use Text::Levenshtein::Flexible when it's
  available, then fallback to the included PP implementation.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Complete-Util>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Complete-Util>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Complete-Util>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Complete>
  
  If you want to do bash tab completion with Perl, take a look at
  L<Complete::Bash> or L<Getopt::Long::Complete> or L<Perinci::CmdLine>.
  
  Other C<Complete::*> modules.
  
  L<Bencher::Scenarios::CompleteUtil>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
COMPLETE_UTIL

    $main::fatpacked{"Complete/Zsh.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'COMPLETE_ZSH';
  package Complete::Zsh;
  
  our $DATE = '2016-10-22'; # DATE
  our $VERSION = '0.03'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         parse_cmdline
                         format_completion
                 );
  
  require Complete::Bash;
  
  our %SPEC;
  
  $SPEC{':package'} = {
      v => 1.1,
      summary => 'Completion module for zsh shell',
  };
  
  $SPEC{format_completion} = {
      v => 1.1,
      summary => 'Format completion for output (for shell)',
      description => <<'_',
  
  zsh accepts completion reply in the form of one entry per line to STDOUT.
  Currently the formatting is done using `Complete::Bash`'s `format_completion`.
  
  _
      args_as => 'array',
      args => {
          completion => {
              summary => 'Completion answer structure',
              description => <<'_',
  
  Either an array or hash, as described in `Complete`.
  
  _
              schema=>['any*' => of => ['hash*', 'array*']],
              req=>1,
              pos=>0,
          },
      },
      result => {
          summary => 'Formatted string (or array, if `as` key is set to `array`)',
          schema => ['any*' => of => ['str*', 'array*']],
      },
      result_naked => 1,
  };
  sub format_completion {
      Complete::Bash::format_completion(@_);
  }
  
  1;
  # ABSTRACT: Completion module for zsh shell
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Complete::Zsh - Completion module for zsh shell
  
  =head1 VERSION
  
  This document describes version 0.03 of Complete::Zsh (from Perl distribution Complete-Zsh), released on 2016-10-22.
  
  =head1 DESCRIPTION
  
  This module provides routines related to doing completion in zsh.
  
  =head1 FUNCTIONS
  
  
  =head2 format_completion($completion) -> str|array
  
  Format completion for output (for shell).
  
  zsh accepts completion reply in the form of one entry per line to STDOUT.
  Currently the formatting is done using C<Complete::Bash>'s C<format_completion>.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<$completion>* => I<hash|array>
  
  Completion answer structure.
  
  Either an array or hash, as described in C<Complete>.
  
  =back
  
  Return value: Formatted string (or array, if `as` key is set to `array`) (str|array)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Complete-Zsh>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Complete-Zsh>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Complete-Zsh>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Complete>
  
  L<Complete::Bash>, L<Complete::Fish>, L<Complete::Tcsh>.
  
  zshcompctl manual page.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
COMPLETE_ZSH

    $main::fatpacked{"Config/IOD/Base.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'CONFIG_IOD_BASE';
  package Config::IOD::Base;
  
  our $DATE = '2017-01-16'; # DATE
  our $VERSION = '0.32'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  #use Carp; # avoided to shave a bit of startup time
  
  use constant +{
      COL_V_ENCODING => 0, # either "!j"... or '"', '[', '{', '~'
      COL_V_WS1 => 1,
      COL_V_VALUE => 2,
      COL_V_WS2 => 3,
      COL_V_COMMENT_CHAR => 4,
      COL_V_COMMENT => 5,
  };
  
  sub new {
      my ($class, %attrs) = @_;
      $attrs{default_section} //= 'GLOBAL';
      $attrs{allow_bang_only} //= 1;
      $attrs{allow_duplicate_key} //= 1;
      $attrs{enable_encoding} //= 1;
      $attrs{enable_quoting}  //= 1;
      $attrs{enable_bracket}  //= 1;
      $attrs{enable_brace}    //= 1;
      $attrs{enable_tilde}    //= 1;
      $attrs{enable_expr}     //= 0;
      $attrs{ignore_unknown_directive} //= 0;
      # allow_encodings
      # disallow_encodings
      # allow_directives
      # disallow_directives
      bless \%attrs, $class;
  }
  
  # borrowed from Parse::CommandLine. differences: returns arrayref. return undef
  # on error (instead of dying).
  sub _parse_command_line {
      my ($self, $str) = @_;
  
      $str =~ s/\A\s+//ms;
      $str =~ s/\s+\z//ms;
  
      my @argv;
      my $buf;
      my $escaped;
      my $double_quoted;
      my $single_quoted;
  
      for my $char (split //, $str) {
          if ($escaped) {
              $buf .= $char;
              $escaped = undef;
              next;
          }
  
          if ($char eq '\\') {
              if ($single_quoted) {
                  $buf .= $char;
              }
              else {
                  $escaped = 1;
              }
              next;
          }
  
          if ($char =~ /\s/) {
              if ($single_quoted || $double_quoted) {
                  $buf .= $char;
              }
              else {
                  push @argv, $buf if defined $buf;
                  undef $buf;
              }
              next;
          }
  
          if ($char eq '"') {
              if ($single_quoted) {
                  $buf .= $char;
                  next;
              }
              $double_quoted = !$double_quoted;
              next;
          }
  
          if ($char eq "'") {
              if ($double_quoted) {
                  $buf .= $char;
                  next;
              }
              $single_quoted = !$single_quoted;
              next;
          }
  
          $buf .= $char;
      }
      push @argv, $buf if defined $buf;
  
      if ($escaped || $single_quoted || $double_quoted) {
          return undef;
      }
  
      \@argv;
  }
  
  # return ($err, $res, $decoded_val)
  sub _parse_raw_value {
      my ($self, $val, $needs_res) = @_;
  
      if ($val =~ /\A!/ && $self->{enable_encoding}) {
  
          $val =~ s/!(\w+)(\s+)// or return ("Invalid syntax in encoded value");
          my ($enc, $ws1) = ($1, $2);
  
          my $res = [
              "!$enc", # COL_V_ENCODING
              $ws1, # COL_V_WS1
              $1, # COL_V_VALUE
              $2, # COL_V_WS2
              $3, # COL_V_COMMENT_CHAR
              $4, # COL_V_COMMENT
          ] if $needs_res;
  
          # canonicalize shorthands
          $enc = "json" if $enc eq 'j';
          $enc = "hex"  if $enc eq 'h';
          $enc = "expr" if $enc eq 'e';
  
          if ($self->{allow_encodings}) {
              return ("Encoding '$enc' is not in ".
                          "allow_encodings list")
                  unless grep {$_ eq $enc} @{$self->{allow_encodings}};
          }
          if ($self->{disallow_encodings}) {
              return ("Encoding '$enc' is in ".
                          "disallow_encodings list")
                  if grep {$_ eq $enc} @{$self->{disallow_encodings}};
          }
  
          if ($enc eq 'json') {
  
              # XXX imperfect regex for simplicity, comment should not contain
              # "]", '"', or '}' or it will be gobbled up as value by greedy regex
              # quantifier
              $val =~ /\A
                       (".*"|\[.*\]|\{.*\}|\S+)
                       (\s*)
                       (?: ([;#])(.*) )?
                       \z/x or return ("Invalid syntax in JSON-encoded value");
              my $decode_res = $self->_decode_json($val);
              return ($decode_res->[1]) unless $decode_res->[0] == 200;
              return (undef, $res, $decode_res->[2]);
  
          } elsif ($enc eq 'path' || $enc eq 'paths') {
  
              my $decode_res = $self->_decode_path_or_paths($val, $enc);
              return ($decode_res->[1]) unless $decode_res->[0] == 200;
              return (undef, $res, $decode_res->[2]);
  
          } elsif ($enc eq 'hex') {
  
              $val =~ /\A
                       ([0-9A-Fa-f]*)
                       (\s*)
                       (?: ([;#])(.*) )?
                       \z/x or return ("Invalid syntax in hex-encoded value");
              my $decode_res = $self->_decode_hex($1);
              return ($decode_res->[1]) unless $decode_res->[0] == 200;
              return (undef, $res, $decode_res->[2]);
  
          } elsif ($enc eq 'base64') {
  
              $val =~ m!\A
                        ([A-Za-z0-9+/]*=*)
                        (\s*)
                        (?: ([;#])(.*) )?
                        \z!x or return ("Invalid syntax in base64-encoded value");
              my $decode_res = $self->_decode_base64($1);
              return ($decode_res->[1]) unless $decode_res->[0] == 200;
              return (undef, $res, $decode_res->[2]);
  
          } elsif ($enc eq 'none') {
  
              return (undef, $res, $val);
  
          } elsif ($enc eq 'expr') {
  
              return ("expr is not allowed (enable_expr=0)")
                  unless $self->{enable_expr};
              # XXX imperfect regex, expression can't contain # and ; because it
              # will be assumed as comment
              $val =~ m!\A
                        ((?:[^#;])+?)
                        (\s*)
                        (?: ([;#])(.*) )?
                        \z!x or return ("Invalid syntax in expr-encoded value");
              my $decode_res = $self->_decode_expr($1);
              return ($decode_res->[1]) unless $decode_res->[0] == 200;
              return (undef, $res, $decode_res->[2]);
  
          } else {
  
              return ("unknown encoding '$enc'");
  
          }
  
      } elsif ($val =~ /\A"/ && $self->{enable_quoting}) {
  
          $val =~ /\A
                   "( (?:
                           \\\\ | # backslash
                           \\.  | # escaped something
                           [^"\\]+ # non-doublequote or non-backslash
                       )* )"
                   (\s*)
                   (?: ([;#])(.*) )?
                   \z/x or return ("Invalid syntax in quoted string value");
          my $res = [
              '"', # COL_V_ENCODING
              '', # COL_V_WS1
              $1, # VOL_V_VALUE
              $2, # COL_V_WS2
              $3, # COL_V_COMMENT_CHAR
              $4, # COL_V_COMMENT
          ] if $needs_res;
          my $decode_res = $self->_decode_json(qq("$1"));
          return ($decode_res->[1]) unless $decode_res->[0] == 200;
          return (undef, $res, $decode_res->[2]);
  
      } elsif ($val =~ /\A\[/ && $self->{enable_bracket}) {
  
          # XXX imperfect regex for simplicity, comment should not contain "]" or
          # it will be gobbled up as value by greedy regex quantifier
          $val =~ /\A
                   \[(.*)\]
                   (?:
                       (\s*)
                       ([#;])(.*)
                   )?
                   \z/x or return ("Invalid syntax in bracketed array value");
          my $res = [
              '[', # COL_V_ENCODING
              '', # COL_V_WS1
              $1, # VOL_V_VALUE
              $2, # COL_V_WS2
              $3, # COL_V_COMMENT_CHAR
              $4, # COL_V_COMMENT
          ] if $needs_res;
          my $decode_res = $self->_decode_json("[$1]");
          return ($decode_res->[1]) unless $decode_res->[0] == 200;
          return (undef, $res, $decode_res->[2]);
  
      } elsif ($val =~ /\A\{/ && $self->{enable_brace}) {
  
          # XXX imperfect regex for simplicity, comment should not contain "}" or
          # it will be gobbled up as value by greedy regex quantifier
          $val =~ /\A
                   \{(.*)\}
                   (?:
                       (\s*)
                       ([#;])(.*)
                   )?
                   \z/x or return ("Invalid syntax in braced hash value");
          my $res = [
              '{', # COL_V_ENCODING
              '', # COL_V_WS1
              $1, # VOL_V_VALUE
              $2, # COL_V_WS2
              $3, # COL_V_COMMENT_CHAR
              $4, # COL_V_COMMENT
          ] if $needs_res;
          my $decode_res = $self->_decode_json("{$1}");
          return ($decode_res->[1]) unless $decode_res->[0] == 200;
          return (undef, $res, $decode_res->[2]);
  
      } elsif ($val =~ /\A~/ && $self->{enable_tilde}) {
  
          $val =~ /\A
                   ~(.*)
                   (\s*)
                   (?: ([;#])(.*) )?
                   \z/x or return ("Invalid syntax in path value");
          my $res = [
              '~', # COL_V_ENCODING
              '', # COL_V_WS1
              $1, # VOL_V_VALUE
              $2, # COL_V_WS2
              $3, # COL_V_COMMENT_CHAR
              $4, # COL_V_COMMENT
          ] if $needs_res;
  
          my $decode_res = $self->_decode_path_or_paths($val, 'path');
          return ($decode_res->[1]) unless $decode_res->[0] == 200;
          return (undef, $res, $decode_res->[2]);
  
      } else {
  
          $val =~ /\A
                   (.*?)
                   (\s*)
                   (?: ([#;])(.*) )?
                   \z/x or return ("Invalid syntax in value"); # shouldn't happen, regex should match any string
          my $res = [
              '', # COL_V_ENCODING
              '', # COL_V_WS1
              $1, # VOL_V_VALUE
              $2, # COL_V_WS2
              $3, # COL_V_COMMENT_CHAR
              $4, # COL_V_COMMENT
          ] if $needs_res;
          return (undef, $res, $1);
  
      }
      # should not be reached
  }
  
  sub _get_my_user_name {
      if ($^O eq 'MSWin32') {
          return $ENV{USERNAME};
      } else {
          return $ENV{USER} if $ENV{USER};
          my @pw;
          eval { @pw = getpwuid($>) };
          return $pw[0] if @pw;
      }
  }
  
  # borrowed from PERLANCAR::File::HomeDir 0.04
  sub _get_my_home_dir {
      if ($^O eq 'MSWin32') {
          # File::HomeDir always uses exists($ENV{x}) first, does it want to avoid
          # accidentally creating env vars?
          return $ENV{HOME} if $ENV{HOME};
          return $ENV{USERPROFILE} if $ENV{USERPROFILE};
          return join($ENV{HOMEDRIVE}, "\\", $ENV{HOMEPATH})
              if $ENV{HOMEDRIVE} && $ENV{HOMEPATH};
      } else {
          return $ENV{HOME} if $ENV{HOME};
          my @pw;
          eval { @pw = getpwuid($>) };
          return $pw[7] if @pw;
      }
  
      die "Can't get home directory";
  }
  
  # borrowed from PERLANCAR::File::HomeDir 0.05, with some modifications
  sub _get_users_home_dir {
      my ($name) = @_;
  
      if ($^O eq 'MSWin32') {
          # not yet implemented
          return undef;
      } else {
          # IF and only if we have getpwuid support, and the name of the user is
          # our own, shortcut to my_home. This is needed to handle HOME
          # environment settings.
          if ($name eq getpwuid($<)) {
              return _get_my_home_dir();
          }
  
        SCOPE: {
              my $home = (getpwnam($name))[7];
              return $home if $home and -d $home;
          }
  
          return undef;
      }
  
  }
  
  sub _decode_json {
      my ($self, $val) = @_;
      state $json = do {
          if (eval { require Cpanel::JSON::XS; 1 }) {
              Cpanel::JSON::XS->new->allow_nonref;
          } else {
              require JSON::PP;
              JSON::PP->new->allow_nonref;
          }
      };
      my $res;
      eval { $res = $json->decode($val) };
      if ($@) {
          return [500, "Invalid JSON: $@"];
      } else {
          return [200, "OK", $res];
      }
  }
  
  sub _decode_path_or_paths {
      my ($self, $val, $which) = @_;
  
      if ($val =~ m!\A~([^/]+)?(?:/|\z)!) {
          my $home_dir = length($1) ?
              _get_users_home_dir($1) : _get_my_home_dir();
          unless ($home_dir) {
              if (length $1) {
                  return [500, "Can't get home directory for user '$1' in path"];
              } else {
                  return [500, "Can't get home directory for current user in path"];
              }
          }
          $val =~ s!\A~([^/]+)?!$home_dir!;
      }
      $val =~ s!(?<=.)/\z!!;
  
      if ($which eq 'path') {
          return [200, "OK", $val];
      } else {
          return [200, "OK", [glob $val]];
      }
  }
  
  sub _decode_hex {
      my ($self, $val) = @_;
      [200, "OK", pack("H*", $val)];
  }
  
  sub _decode_base64 {
      my ($self, $val) = @_;
      require MIME::Base64;
      [200, "OK", MIME::Base64::decode_base64($val)];
  }
  
  sub _decode_expr {
      require Config::IOD::Expr;
  
      my ($self, $val) = @_;
      no strict 'refs';
      local *{"Config::IOD::Expr::val"} = sub {
          my $arg = shift;
          if ($arg =~ /(.+)\.(.+)/) {
              return $self->{_res}{$1}{$2};
          } else {
              return $self->{_res}{ $self->{_cur_section} }{$arg};
          }
      };
      Config::IOD::Expr::_parse_expr($val);
  }
  
  sub _err {
      my ($self, $msg) = @_;
      die join(
          "",
          @{ $self->{_include_stack} } ? "$self->{_include_stack}[0] " : "",
          "line $self->{_linum}: ",
          $msg
      );
  }
  
  sub _push_include_stack {
      require Cwd;
  
      my ($self, $path) = @_;
  
      # included file's path is based on the main (topmost) file
      if (@{ $self->{_include_stack} }) {
          require File::Spec;
          my ($vol, $dir, $file) =
              File::Spec->splitpath($self->{_include_stack}[-1]);
          $path = File::Spec->rel2abs($path, File::Spec->catpath($vol, $dir));
      }
  
      my $abs_path = Cwd::abs_path($path) or return [400, "Invalid path name"];
      return [409, "Recursive", $abs_path]
          if grep { $_ eq $abs_path } @{ $self->{_include_stack} };
      push @{ $self->{_include_stack} }, $abs_path;
      return [200, "OK", $abs_path];
  }
  
  sub _pop_include_stack {
      my $self = shift;
  
      die "BUG: Overpopped _pop_include_stack"
          unless @{$self->{_include_stack}};
      pop @{ $self->{_include_stack} };
  }
  
  sub _init_read {
      my $self = shift;
  
      $self->{_include_stack} = [];
  }
  
  sub _read_file {
      my ($self, $filename) = @_;
      open my $fh, "<", $filename
          or die "Can't open file '$filename': $!";
      binmode($fh, ":utf8");
      local $/;
      return scalar <$fh>;
  }
  
  sub read_file {
      my $self = shift;
      my $filename = shift;
      $self->_init_read;
      my $res = $self->_push_include_stack($filename);
      die "Can't read '$filename': $res->[1]" unless $res->[0] == 200;
      $res =
          $self->_read_string($self->_read_file($filename), @_);
      $self->_pop_include_stack;
      $res;
  }
  
  sub read_string {
      my $self = shift;
      $self->_init_read;
      $self->_read_string(@_);
  }
  
  1;
  # ABSTRACT: Base class for Config::IOD and Config::IOD::Reader
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Config::IOD::Base - Base class for Config::IOD and Config::IOD::Reader
  
  =head1 VERSION
  
  This document describes version 0.32 of Config::IOD::Base (from Perl distribution Config-IOD-Reader), released on 2017-01-16.
  
  =head1 EXPRESSION
  
  =for BEGIN_BLOCK: expression
  
  Expression allows you to do things like:
  
   [section1]
   foo=1
   bar="monkey"
  
   [section2]
   baz =!e 1+1
   qux =!e "grease" . val("section1.bar")
   quux=!e val("qux") . " " . val('baz')
  
  And the result will be:
  
   {
       section1 => {foo=>1, bar=>"monkey"},
       section2 => {baz=>2, qux=>"greasemonkey", quux=>"greasemonkey 2"},
   }
  
  For safety, you'll need to set C<enable_expr> attribute to 1 first to enable
  this feature.
  
  The syntax of the expression (the C<expr> encoding) is not officially specified
  yet in the L<IOD> specification. It will probably be Expr (see
  L<Language::Expr::Manual::Syntax>). At the moment, this module implements a very
  limited subset that is compatible (lowest common denominator) with Perl syntax
  and uses C<eval()> to evaluate the expression. However, only the limited subset
  is allowed (checked by Perl 5.10 regular expression).
  
  The supported terms:
  
   number
   string (double-quoted and single-quoted)
   undef literal
   function call (only the 'val' function is supported)
   grouping (parenthesis)
  
  The supported operators are:
  
   + - .
   * / % x
   **
   unary -, unary +, !, ~
  
  The C<val()> function refers to the configuration key. If the argument contains
  ".", it will be assumed as C<SECTIONNAME.KEYNAME>, otherwise it will access the
  current section's key. Since parsing is done in a single pass, you can only
  refer to the already mentioned key.
  
  =for END_BLOCK: expression
  
  =head1 ATTRIBUTES
  
  =for BEGIN_BLOCK: attributes
  
  =head2 default_section => str (default: C<GLOBAL>)
  
  If a key line is specified before any section line, this is the section that the
  key will be put in.
  
  =head2 enable_encoding => bool (default: 1)
  
  If set to false, then encoding notation will be ignored and key value will be
  parsed as verbatim. Example:
  
   name = !json null
  
  With C<enable_encoding> turned off, value will not be undef but will be string
  with the value of (as Perl literal) C<"!json null">.
  
  Turning off this setting will violate IOD.
  
  =head2 enable_quoting => bool (default: 1)
  
  If set to false, then quotes on key value will be ignored and key value will be
  parsed as verbatim. Example:
  
   name = "line 1\nline2"
  
  With C<enable_quoting> turned off, value will not be a two-line string, but will
  be a one line string with the value of (as Perl literal) C<"line 1\\nline2">.
  
  I<Turning off this setting will violate IOD.>
  
  =head2 enable_bracket => bool (default: 1)
  
  If set to false, then JSON literal array will be parsed as verbatim. Example:
  
   name = [1,2,3]
  
  With C<enable_bracket> turned off, value will not be a three-element array, but
  will be a string with the value of (as Perl literal) C<"[1,2,3]">.
  
  I<Turning off this setting will violate IOD.>
  
  =head2 enable_brace => bool (default: 1)
  
  If set to false, then JSON literal object (hash) will be parsed as verbatim.
  Example:
  
   name = {"a":1,"b":2}
  
  With C<enable_brace> turned off, value will not be a hash with two pairs, but
  will be a string with the value of (as Perl literal) C<'{"a":1,"b":2}'>.
  
  I<Turning off this setting will violate IOD.>
  
  =head2 enable_tilde => bool (default: 1)
  
  If set to true (the default), then value that starts with C<~> (tilde) will be
  assumed to use !path encoding, unless an explicit encoding has been otherwise
  specified.
  
  Example:
  
   log_dir = ~/logs  ; ~ will be resolved to current user's home directory
  
  With C<enable_tilde> turned off, value will still be literally C<~/logs>.
  
  I<Turning off this setting will violate IOD.>
  
  =head2 allow_encodings => array
  
  If defined, set list of allowed encodings. Note that if C<disallow_encodings> is
  also set, an encoding must also not be in that list.
  
  Also note that, for safety reason, if you want to enable C<expr> encoding,
  you'll also need to set C<enable_expr> to 1.
  
  =head2 disallow_encodings => array
  
  If defined, set list of disallowed encodings. Note that if C<allow_encodings> is
  also set, an encoding must also be in that list.
  
  Also note that, for safety reason, if you want to enable C<expr> encoding,
  you'll also need to set C<enable_expr> to 1.
  
  =head2 enable_expr => bool (default: 0)
  
  Whether to enable C<expr> encoding. By default this is turned on, for safety.
  Please see L</"EXPRESSION"> for more details.
  
  =head2 allow_directives => array
  
  If defined, only directives listed here are allowed. Note that if
  C<disallow_directives> is also set, a directive must also not be in that list.
  
  =head2 disallow_directives => array
  
  If defined, directives listed here are not allowed. Note that if
  C<allow_directives> is also set, a directive must also be in that list.
  
  =head2 allow_bang_only => bool (default: 1)
  
  Since the mistake of specifying a directive like this:
  
   !foo
  
  instead of the correct:
  
   ;!foo
  
  is very common, the spec allows it. This reader, however, can be configured to
  be more strict.
  
  =head2 allow_duplicate_key => bool (default: 1)
  
  If set to 0, you can forbid duplicate key, e.g.:
  
   [section]
   a=1
   a=2
  
  or:
  
   [section]
   a=1
   b=2
   c=3
   a=10
  
  In traditional INI file, to specify an array you specify multiple keys. But when
  there is only a single key, it is unclear if the value is a single-element array
  or a scalar. You can use this setting to avoid this array/scalar ambiguity in
  config file and force user to use JSON encoding or bracket to specify array:
  
   [section]
   a=[1,2]
  
  I<Turning off this setting will violate IOD.>
  
  =head2 ignore_unknown_directive => bool (default: 0)
  
  If set to true, will not die if an unknown directive is encountered. It will
  simply be ignored as a regular comment.
  
  I<Turning on this setting will violate IOD.>
  
  =for END_BLOCK: attributes
  
  =head1 METHODS
  
  =for BEGIN_BLOCK: methods
  
  =head2 new(%attrs) => obj
  
  =head2 $reader->read_file($filename)
  
  Read IOD configuration from a file. Die on errors.
  
  =head2 $reader->read_string($str)
  
  Read IOD configuration from a string. Die on errors.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Config-IOD-Reader>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Config-IOD-Reader>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Config-IOD-Reader>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
CONFIG_IOD_BASE

    $main::fatpacked{"Config/IOD/Expr.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'CONFIG_IOD_EXPR';
  package Config::IOD::Expr;
  
  our $DATE = '2017-01-16'; # DATE
  our $VERSION = '0.32'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  my $EXPR_RE = qr{
  
  (?&ANSWER)
  
  (?(DEFINE)
  
  (?<ANSWER>    (?&ADD))
  (?<ADD>       (?&MULT)   | (?&MULT)  (?: \s* ([+.-]) \s* (?&MULT)  )+)
  (?<MULT>      (?&UNARY)  | (?&UNARY) (?: \s* ([*/x%]) \s* (?&UNARY))+)
  (?<UNARY>     (?&POWER)  | [!~+-] (?&POWER))
  (?<POWER>     (?&TERM)   | (?&TERM) (?: \s* \*\* \s* (?&TERM))+)
  
  (?<TERM>
      (?&NUM)
    | (?&STR_SINGLE)
    | (?&STR_DOUBLE)
    | undef
    | (?&FUNC)
    | \( \s* ((?&ANSWER)) \s* \)
  )
  
  (?<FUNC> val \s* \( (?&TERM) \))
  
  (?<NUM>
      (
       -?
       (?: 0 | [1-9]\d* )
       (?: \. \d+ )?
       (?: [eE] [-+]? \d+ )?
      )
  )
  
  (?<STR_SINGLE>
      (
       '
       (?:
           [^\\']+
         |
           \\ ['\\]
         |
           \\
       )*
       '
      )
  )
  
  (?<STR_DOUBLE>
      (
       "
       (?:
           [^\\"]+
         |
           \\ ["'\\\$tnrfbae]
  # octal, hex, wide hex
       )*
       "
      )
  )
  
  ) # DEFINE
  
  }msx;
  
  sub _parse_expr {
      my $str = shift;
  
      return [400, 'Not a valid expr'] unless $str =~ m{\A$EXPR_RE\z}o;
      my $res = eval $str;
      return [500, "Died when evaluating expr: $@"] if $@;
      [200, "OK", $res];
  }
  
  1;
  # ABSTRACT: Parse expression
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Config::IOD::Expr - Parse expression
  
  =head1 VERSION
  
  This document describes version 0.32 of Config::IOD::Expr (from Perl distribution Config-IOD-Reader), released on 2017-01-16.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Config-IOD-Reader>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Config-IOD-Reader>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Config-IOD-Reader>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
CONFIG_IOD_EXPR

    $main::fatpacked{"Config/IOD/Reader.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'CONFIG_IOD_READER';
  package Config::IOD::Reader;
  
  our $DATE = '2017-01-16'; # DATE
  our $VERSION = '0.32'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use parent qw(Config::IOD::Base);
  
  sub _merge {
      my ($self, $section) = @_;
  
      my $res = $self->{_res};
      for my $msect (@{ $self->{_merge} }) {
          if ($msect eq $section) {
              # ignore merging self
              next;
              #local $self->{_linum} = $self->{_linum}-1;
              #$self->_err("Can't merge section '$msect' to '$section': ".
              #                "Same section");
          }
          if (!exists($res->{$msect})) {
              local $self->{_linum} = $self->{_linum}-1;
              $self->_err("Can't merge section '$msect' to '$section': ".
                              "Section '$msect' not seen yet");
          }
          for my $k (keys %{ $res->{$msect} }) {
              $res->{$section}{$k} //= $res->{$msect}{$k};
          }
      }
  }
  
  sub _init_read {
      my $self = shift;
  
      $self->SUPER::_init_read;
      $self->{_res} = {};
      $self->{_merge} = undef;
      $self->{_num_seen_section_lines} = 0;
      $self->{_cur_section} = $self->{default_section};
      $self->{_arrayified} = {};
  }
  
  sub _read_string {
      my ($self, $str, $cb) = @_;
  
      my $res = $self->{_res};
      my $cur_section = $self->{_cur_section};
  
      my $directive_re = $self->{allow_bang_only} ?
          qr/^;?\s*!\s*(\w+)\s*/ :
          qr/^;\s*!\s*(\w+)\s*/;
  
      my $_raw_val; # only to provide to callback
  
      my @lines = split /^/, $str;
      local $self->{_linum} = 0;
    LINE:
      for my $line (@lines) {
          $self->{_linum}++;
  
          # blank line
          if ($line !~ /\S/) {
              next LINE;
          }
  
          # directive line
          if ($line =~ s/$directive_re//) {
              my $directive = $1;
              if ($self->{allow_directives}) {
                  $self->_err("Directive '$directive' is not in ".
                                  "allow_directives list")
                      unless grep { $_ eq $directive }
                          @{$self->{allow_directives}};
              }
              if ($self->{disallow_directives}) {
                  $self->_err("Directive '$directive' is in ".
                                  "disallow_directives list")
                      if grep { $_ eq $directive }
                          @{$self->{disallow_directives}};
              }
              my $args = $self->_parse_command_line($line);
              if (!defined($args)) {
                  $self->_err("Invalid arguments syntax '$line'");
              }
  
              if ($cb) {
                  $cb->(
                      event => 'directive',
                      linum=>$self->{_linum}, line=>$line, cur_section=>$self->{_cur_section},
                      directive => $directive,
                      args => $args,
                  );
              }
  
              if ($directive eq 'include') {
                  my $path;
                  if (! @$args) {
                      $self->_err("Missing filename to include");
                  } elsif (@$args > 1) {
                      $self->_err("Extraneous arguments");
                  } else {
                      $path = $args->[0];
                  }
                  my $res = $self->_push_include_stack($path);
                  if ($res->[0] != 200) {
                      $self->_err("Can't include '$path': $res->[1]");
                  }
                  $path = $res->[2];
                  $self->_read_string($self->_read_file($path, $cb));
                  $self->_pop_include_stack;
              } elsif ($directive eq 'merge') {
                  $self->{_merge} = @$args ? $args : undef;
              } elsif ($directive eq 'noop') {
              } else {
                  if ($self->{ignore_unknown_directive}) {
                      # assume a regular comment
                      next LINE;
                  } else {
                      $self->_err("Unknown directive '$directive'");
                  }
              }
              next LINE;
          }
  
          # comment line
          if ($line =~ /^\s*[;#]/) {
  
              if ($cb) {
                  $cb->(
                      event => 'comment',
                      linum=>$self->{_linum}, line=>$line, cur_section=>$self->{_cur_section},
                  );
              }
  
              next LINE;
          }
  
          # section line
          if ($line =~ /^\s*\[\s*(.+?)\s*\](?: \s*[;#].*)?/) {
              my $prev_section = $self->{_cur_section};
              $self->{_cur_section} = $cur_section = $1;
              $res->{$cur_section} //= {};
              $self->{_num_seen_section_lines}++;
  
              # previous section exists? do merging for previous section
              if ($self->{_merge} && $self->{_num_seen_section_lines} > 1) {
                  $self->_merge($prev_section);
              }
  
              if ($cb) {
                  $cb->(
                      event => 'section',
                      linum=>$self->{_linum}, line=>$line, cur_section=>$self->{_cur_section},
                      section => $cur_section,
                  );
              }
  
              next LINE;
          }
  
          # key line
          if ($line =~ /^\s*([^=]+?)\s*=\s*(.*)/) {
              my $key = $1;
              my $val = $2;
  
              # the common case is that value are not decoded or
              # quoted/bracketed/braced, so we avoid calling _parse_raw_value here
              # to avoid overhead
              if ($val =~ /\A["!\\[\{~]/) {
                  $_raw_val = $val if $cb;
                  my ($err, $parse_res, $decoded_val) = $self->_parse_raw_value($val);
                  $self->_err("Invalid value: " . $err) if $err;
                  $val = $decoded_val;
              } else {
                  $_raw_val = $val if $cb;
                  $val =~ s/\s*[#;].*//; # strip comment
              }
  
              if (exists $res->{$cur_section}{$key}) {
                  if (!$self->{allow_duplicate_key}) {
                      $self->_err("Duplicate key: $key (section $cur_section)");
                  } elsif ($self->{_arrayified}{$cur_section}{$key}++) {
                      push @{ $res->{$cur_section}{$key} }, $val;
                  } else {
                      $res->{$cur_section}{$key} = [
                          $res->{$cur_section}{$key}, $val];
                  }
              } else {
                  $res->{$cur_section}{$key} = $val;
              }
  
              if ($cb) {
                  $cb->(
                      event => 'key',
                      linum=>$self->{_linum}, line=>$line, cur_section=>$self->{_cur_section},
                      key => $key,
                      val => $val,
                      raw_val => $_raw_val,
                  );
              }
  
              next LINE;
          }
  
          $self->_err("Invalid syntax");
      }
  
      if ($self->{_merge} && $self->{_num_seen_section_lines} > 1) {
          $self->_merge($cur_section);
      }
  
      $res;
  }
  
  1;
  # ABSTRACT: Read IOD/INI configuration files
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Config::IOD::Reader - Read IOD/INI configuration files
  
  =head1 VERSION
  
  This document describes version 0.32 of Config::IOD::Reader (from Perl distribution Config-IOD-Reader), released on 2017-01-16.
  
  =head1 SYNOPSIS
  
   use Config::IOD::Reader;
   my $reader = Config::IOD::Reader->new(
       # list of known attributes, with their default values
       # default_section     => 'GLOBAL',
       # enable_encoding     => 1,
       # enable_quoting      => 1,
       # enable_backet       => 1,
       # enable_brace        => 1,
       # allow_encodings     => undef, # or ['base64','json',...]
       # disallow_encodings  => undef, # or ['base64','json',...]
       # allow_directives    => undef, # or ['include','merge',...]
       # disallow_directives => undef, # or ['include','merge',...]
       # allow_bang_only     => 1,
       # enable_expr         => 0,
       # allow_duplicate_key => 1,
       # ignore_unknown_directive => 0,
   );
   my $config_hash = $reader->read_file('config.iod');
  
  =head1 DESCRIPTION
  
  This module reads L<IOD> configuration files (IOD is an INI-like format with
  more precise specification, some extra features, and 99% compatible with typical
  INI format). It is a minimalist alternative to the more fully-featured
  L<Config::IOD>. It cannot write IOD files and is optimized for low startup
  overhead.
  
  =head1 EXPRESSION
  
  Expression allows you to do things like:
  
   [section1]
   foo=1
   bar="monkey"
  
   [section2]
   baz =!e 1+1
   qux =!e "grease" . val("section1.bar")
   quux=!e val("qux") . " " . val('baz')
  
  And the result will be:
  
   {
       section1 => {foo=>1, bar=>"monkey"},
       section2 => {baz=>2, qux=>"greasemonkey", quux=>"greasemonkey 2"},
   }
  
  For safety, you'll need to set C<enable_expr> attribute to 1 first to enable
  this feature.
  
  The syntax of the expression (the C<expr> encoding) is not officially specified
  yet in the L<IOD> specification. It will probably be Expr (see
  L<Language::Expr::Manual::Syntax>). At the moment, this module implements a very
  limited subset that is compatible (lowest common denominator) with Perl syntax
  and uses C<eval()> to evaluate the expression. However, only the limited subset
  is allowed (checked by Perl 5.10 regular expression).
  
  The supported terms:
  
   number
   string (double-quoted and single-quoted)
   undef literal
   function call (only the 'val' function is supported)
   grouping (parenthesis)
  
  The supported operators are:
  
   + - .
   * / % x
   **
   unary -, unary +, !, ~
  
  The C<val()> function refers to the configuration key. If the argument contains
  ".", it will be assumed as C<SECTIONNAME.KEYNAME>, otherwise it will access the
  current section's key. Since parsing is done in a single pass, you can only
  refer to the already mentioned key.
  
  =head1 ATTRIBUTES
  
  =head2 default_section => str (default: C<GLOBAL>)
  
  If a key line is specified before any section line, this is the section that the
  key will be put in.
  
  =head2 enable_encoding => bool (default: 1)
  
  If set to false, then encoding notation will be ignored and key value will be
  parsed as verbatim. Example:
  
   name = !json null
  
  With C<enable_encoding> turned off, value will not be undef but will be string
  with the value of (as Perl literal) C<"!json null">.
  
  Turning off this setting will violate IOD.
  
  =head2 enable_quoting => bool (default: 1)
  
  If set to false, then quotes on key value will be ignored and key value will be
  parsed as verbatim. Example:
  
   name = "line 1\nline2"
  
  With C<enable_quoting> turned off, value will not be a two-line string, but will
  be a one line string with the value of (as Perl literal) C<"line 1\\nline2">.
  
  I<Turning off this setting will violate IOD.>
  
  =head2 enable_bracket => bool (default: 1)
  
  If set to false, then JSON literal array will be parsed as verbatim. Example:
  
   name = [1,2,3]
  
  With C<enable_bracket> turned off, value will not be a three-element array, but
  will be a string with the value of (as Perl literal) C<"[1,2,3]">.
  
  I<Turning off this setting will violate IOD.>
  
  =head2 enable_brace => bool (default: 1)
  
  If set to false, then JSON literal object (hash) will be parsed as verbatim.
  Example:
  
   name = {"a":1,"b":2}
  
  With C<enable_brace> turned off, value will not be a hash with two pairs, but
  will be a string with the value of (as Perl literal) C<'{"a":1,"b":2}'>.
  
  I<Turning off this setting will violate IOD.>
  
  =head2 enable_tilde => bool (default: 1)
  
  If set to true (the default), then value that starts with C<~> (tilde) will be
  assumed to use !path encoding, unless an explicit encoding has been otherwise
  specified.
  
  Example:
  
   log_dir = ~/logs  ; ~ will be resolved to current user's home directory
  
  With C<enable_tilde> turned off, value will still be literally C<~/logs>.
  
  I<Turning off this setting will violate IOD.>
  
  =head2 allow_encodings => array
  
  If defined, set list of allowed encodings. Note that if C<disallow_encodings> is
  also set, an encoding must also not be in that list.
  
  Also note that, for safety reason, if you want to enable C<expr> encoding,
  you'll also need to set C<enable_expr> to 1.
  
  =head2 disallow_encodings => array
  
  If defined, set list of disallowed encodings. Note that if C<allow_encodings> is
  also set, an encoding must also be in that list.
  
  Also note that, for safety reason, if you want to enable C<expr> encoding,
  you'll also need to set C<enable_expr> to 1.
  
  =head2 enable_expr => bool (default: 0)
  
  Whether to enable C<expr> encoding. By default this is turned on, for safety.
  Please see L</"EXPRESSION"> for more details.
  
  =head2 allow_directives => array
  
  If defined, only directives listed here are allowed. Note that if
  C<disallow_directives> is also set, a directive must also not be in that list.
  
  =head2 disallow_directives => array
  
  If defined, directives listed here are not allowed. Note that if
  C<allow_directives> is also set, a directive must also be in that list.
  
  =head2 allow_bang_only => bool (default: 1)
  
  Since the mistake of specifying a directive like this:
  
   !foo
  
  instead of the correct:
  
   ;!foo
  
  is very common, the spec allows it. This reader, however, can be configured to
  be more strict.
  
  =head2 allow_duplicate_key => bool (default: 1)
  
  If set to 0, you can forbid duplicate key, e.g.:
  
   [section]
   a=1
   a=2
  
  or:
  
   [section]
   a=1
   b=2
   c=3
   a=10
  
  In traditional INI file, to specify an array you specify multiple keys. But when
  there is only a single key, it is unclear if the value is a single-element array
  or a scalar. You can use this setting to avoid this array/scalar ambiguity in
  config file and force user to use JSON encoding or bracket to specify array:
  
   [section]
   a=[1,2]
  
  I<Turning off this setting will violate IOD.>
  
  =head2 ignore_unknown_directive => bool (default: 0)
  
  If set to true, will not die if an unknown directive is encountered. It will
  simply be ignored as a regular comment.
  
  I<Turning on this setting will violate IOD.>
  
  =head1 METHODS
  
  =head2 new(%attrs) => obj
  
  =head2 $reader->read_file($filename[ , $callback ]) => hash
  
  Read IOD configuration from a file. Die on errors.
  
  See C<read_string> for more information on C<$callback> argument.
  
  =head2 $reader->read_string($str[ , $callback ]) => hash
  
  Read IOD configuration from a string. Die on errors.
  
  C<$callback> is an optional coderef argument that will be called during various
  stages. It can be useful if you want more information (especially ordering). It
  will be called with hash argument C<%args>
  
  =over
  
  =item * Found a directive line
  
  Arguments passed: C<event> (str, has the value of 'directive'), C<linum> (int,
  line number, starts from 1), C<line> (str, raw line), C<directive> (str,
  directive name), C<cur_section> (str, current section name), C<args> (array,
  directive arguments).
  
  =item * Found a comment line
  
  Arguments passed: C<event> (str, 'comment'), C<linum>, C<line>, C<cur_section>.
  
  =item * Found a section line
  
  Arguments passed: C<event> (str, 'section'), C<linum>, C<line>, C<cur_section>,
  C<section> (str, section name).
  
  =item * Found a key line
  
  Arguments passed: C<event> (str, 'section'), C<linum>, C<line>, C<cur_section>,
  C<key> (str, key name), C<val> (any, value name, already decoded if encoded),
  C<raw_val> (str, raw value).
  
  =back
  
  TODO: callback when there is merging.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Config-IOD-Reader>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Config-IOD-Reader>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Config-IOD-Reader>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<IOD> - specification
  
  L<Config::IOD> - round-trip parser for reading as well as writing IOD documents
  
  L<IOD::Examples> - sample documents
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
CONFIG_IOD_READER

    $main::fatpacked{"Data/Check/Structure.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_CHECK_STRUCTURE';
  package Data::Check::Structure;
  
  our $DATE = '2014-07-14'; # DATE
  our $VERSION = '0.03'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         is_aoa
                         is_aoaos
                         is_aoh
                         is_aohos
                         is_aos
                         is_hoa
                         is_hoaos
                         is_hoh
                         is_hohos
                         is_hos
                 );
  
  sub is_aos {
      my ($data, $opts) = @_;
      $opts //= {};
      my $max = $opts->{max};
  
      return 0 unless ref($data) eq 'ARRAY';
      for my $i (0..@$data-1) {
          last if defined($max) && $i >= $max;
          return 0 if ref($data->[$i]);
      }
      1;
  }
  
  sub is_aoa {
      my ($data, $opts) = @_;
      $opts //= {};
      my $max = $opts->{max};
  
      return 0 unless ref($data) eq 'ARRAY';
      for my $i (0..@$data-1) {
          last if defined($max) && $i >= $max;
          return 0 unless ref($data->[$i]) eq 'ARRAY';
      }
      1;
  }
  
  sub is_aoaos {
      my ($data, $opts) = @_;
      $opts //= {};
      my $max = $opts->{max};
  
      return 0 unless ref($data) eq 'ARRAY';
      my $aos_opts = {max=>$max};
      for my $i (0..@$data-1) {
          last if defined($max) && $i >= $max;
          return 0 unless is_aos($data->[$i], $aos_opts);
      }
      1;
  }
  
  sub is_aoh {
      my ($data, $opts) = @_;
      $opts //= {};
      my $max = $opts->{max};
  
      return 0 unless ref($data) eq 'ARRAY';
      for my $i (0..@$data-1) {
          last if defined($max) && $i >= $max;
          return 0 unless ref($data->[$i]) eq 'HASH';
      }
      1;
  }
  
  sub is_aohos {
      my ($data, $opts) = @_;
      $opts //= {};
      my $max = $opts->{max};
  
      return 0 unless ref($data) eq 'ARRAY';
      my $hos_opts = {max=>$max};
      for my $i (0..@$data-1) {
          last if defined($max) && $i >= $max;
          return 0 unless is_hos($data->[$i], $hos_opts);
      }
      1;
  }
  
  sub is_hos {
      my ($data, $opts) = @_;
      $opts //= {};
      my $max = $opts->{max};
  
      return 0 unless ref($data) eq 'HASH';
      my $i = 0;
      for my $k (keys %$data) {
          last if defined($max) && ++$i >= $max;
          return 0 if ref($data->{$k});
      }
      1;
  }
  
  sub is_hoa {
      my ($data, $opts) = @_;
      $opts //= {};
      my $max = $opts->{max};
  
      return 0 unless ref($data) eq 'HASH';
      my $i = 0;
      for my $k (keys %$data) {
          last if defined($max) && ++$i >= $max;
          return 0 unless ref($data->{$k}) eq 'ARRAY';
      }
      1;
  }
  
  sub is_hoaos {
      my ($data, $opts) = @_;
      $opts //= {};
      my $max = $opts->{max};
  
      return 0 unless ref($data) eq 'HASH';
      my $i = 0;
      for my $k (keys %$data) {
          last if defined($max) && ++$i >= $max;
          return 0 unless is_aos($data->{$k});
      }
      1;
  }
  
  sub is_hoh {
      my ($data, $opts) = @_;
      $opts //= {};
      my $max = $opts->{max};
  
      return 0 unless ref($data) eq 'HASH';
      my $i = 0;
      for my $k (keys %$data) {
          last if defined($max) && ++$i >= $max;
          return 0 unless ref($data->{$k}) eq 'HASH';
      }
      1;
  }
  
  sub is_hohos {
      my ($data, $opts) = @_;
      $opts //= {};
      my $max = $opts->{max};
  
      return 0 unless ref($data) eq 'HASH';
      my $i = 0;
      for my $k (keys %$data) {
          last if defined($max) && ++$i >= $max;
          return 0 unless is_hos($data->{$k});
      }
      1;
  }
  
  1;
  # ABSTRACT: Check structure of data
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Check::Structure - Check structure of data
  
  =head1 VERSION
  
  This document describes version 0.03 of Data::Check::Structure (from Perl distribution Data-Check-Structure), released on 2014-07-14.
  
  =head1 SYNOPSIS
  
  =head1 DESCRIPTION
  
  This small module provides several simple routines to check the structure of
  data, e.g. whether data is an array of arrays ("aoa"), array of scalars ("aos"),
  and so on.
  
  =head1 FUNCTIONS
  
  =head2 is_aos($data, \%opts) => bool
  
  Check that data is an array of scalars. Examples:
  
   is_aos([]);                     # true
   is_aos(['a', 'b']);             # true
   is_aos(['a', []]);              # false
   is_aos([1,2,3, []], {max=>3});  # true
  
  Known options: C<max> (maximum number of items to check, undef means check all
  items).
  
  =head2 is_aoa($data, \%opts) => bool
  
  Check that data is an array of arrays. Examples:
  
   is_aoa([]);                          # true
   is_aoa([[1], [2]]);                  # true
   is_aoa([[1], 'a']);                  # false
   is_aoa([[1],[],[], 'a'], {max=>3});  # true
  
  Known options: C<max> (maximum number of items to check, undef means check all
  items).
  
  =head2 is_aoaos($data, \%opts) => bool
  
  Check that data is an array of arrays of scalars. Examples:
  
   is_aoaos([]);                           # true
   is_aoaos([[1], [2]]);                   # true
   is_aoaos([[1], [{}]]);                  # false
   is_aoaos([[1],[],[], [{}]], {max=>3});  # true
  
  Known options: C<max> (maximum number of items to check, undef means check all
  items).
  
  =head2 is_aoh($data, \%opts) => bool
  
  Check that data is an array of hashes. Examples:
  
   is_aoh([]);                             # true
   is_aoh([{}, {a=>1}]);                   # true
   is_aoh([{}, 'a']);                      # false
   is_aoh([{},{},{a=>1}, 'a'], {max=>3});  # true
  
  Known options: C<max> (maximum number of items to check, undef means check all
  items).
  
  =head2 is_aohos($data, \%opts) => bool
  
  Check that data is an array of hashes of scalars. Examples:
  
   is_aohos([]);                                 # true
   is_aohos([{a=>1}, {}]);                       # true
   is_aohos([{a=>1}, {b=>[]}]);                  # false
   is_aohos([{a=>1},{},{}, {b=>[]}], {max=>3});  # true
  
  Known options: C<max> (maximum number of items to check, undef means check all
  items).
  
  =head2 is_hos($data, \%opts) => bool
  
  Check that data is a hash of scalars. Examples:
  
   is_hos({});                                   # true
   is_hos({a=>1, b=>2});                         # true
   is_hos({a=>1, b=>[]});                        # false
   is_hos({a=>1, b=>2, c=>3, d=>[]}, {max=>3});  # true (or false, depending on random hash key ordering)
  
  Known options: C<max> (maximum number of items to check, undef means check all
  items).
  
  =head2 is_hoa($data, \%opts) => bool
  
  Check that data is a hash of arrays. Examples:
  
   is_hoa({}) );       # true
   is_hoa({a=>[]}) );  # true
   is_hoa({a=>1}) );   # false
  
  Known options: C<max> (maximum number of items to check, undef means check all
  items).
  
  =head2 is_hoaos($data, \%opts) => bool
  
  Check that data is a hash of arrays of scalars. Examples:
  
   is_hoaos({}) );         # true
   is_hoaos({a=>[]}) );    # true
   is_hoaos({a=>[1]}) );   # true
   is_hoaos({a=>1}) );     # false
   is_hoaos({a=>[{}]}) );  # false
  
  Known options: C<max> (maximum number of items to check, undef means check all
  items).
  
  =head2 is_hoh($data, \%opts) => bool
  
  Check that data is a hash of hashes. Examples:
  
   is_hoh({}) );       # true
   is_hoh({a=>{}}) );  # true
   is_hoh({a=>1}) );   # false
  
  Known options: C<max> (maximum number of items to check, undef means check all
  items).
  
  =head2 is_hohos($data, \%opts) => bool
  
  Check that data is a hash of hashes of scalrs. Examples:
  
   is_hohos({}) );            # true
   is_hohos({a=>{}}) );       # true
   is_hohos({a=>{b=>1}}) );   # true
   is_hohos({a=>1}) );        # false
   is_hohos({a=>{b=>[]}}) );  # false
  
  Known options: C<max> (maximum number of items to check, undef means check all
  items).
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Check-Structure>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Data-Check-Structure>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Check-Structure>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  Steven Haryanto <stevenharyanto@gmail.com>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by Steven Haryanto.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_CHECK_STRUCTURE

    $main::fatpacked{"Data/Clean.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_CLEAN';
  package Data::Clean;
  
  our $DATE = '2017-01-14'; # DATE
  our $VERSION = '0.48'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  use Log::Any::IfLOG '$log';
  
  sub new {
      my ($class, %opts) = @_;
      my $self = bless {_opts=>\%opts}, $class;
      $log->tracef("Cleanser options: %s", \%opts);
  
      my $cd = $self->_generate_cleanser_code;
      for my $mod (keys %{ $cd->{modules} }) {
          (my $mod_pm = "$mod.pm") =~ s!::!/!g;
          require $mod_pm;
      }
      $self->{_cd} = $cd;
      $self->{_code} = eval $cd->{src};
      {
          last unless $cd->{clone_func} =~ /(.+)::(.+)/;
          (my $mod_pm = "$1.pm") =~ s!::!/!g;
          require $mod_pm;
      }
      die "Can't generate code: $@" if $@;
  
      $self;
  }
  
  sub command_call_method {
      my ($self, $cd, $args) = @_;
      my $mn = $args->[0];
      die "Invalid method name syntax" unless $mn =~ /\A\w+\z/;
      return "{{var}} = {{var}}->$mn; \$ref = ref({{var}})";
  }
  
  sub command_call_func {
      my ($self, $cd, $args) = @_;
      my $fn = $args->[0];
      die "Invalid func name syntax" unless $fn =~ /\A\w+(::\w+)*\z/;
      return "{{var}} = $fn({{var}}); \$ref = ref({{var}})";
  }
  
  sub command_one_or_zero {
      my ($self, $cd, $args) = @_;
      return "{{var}} = {{var}} ? 1:0; \$ref = ''";
  }
  
  sub command_deref_scalar {
      my ($self, $cd, $args) = @_;
      return '{{var}} = ${ {{var}} }; $ref = ref({{var}})';
  }
  
  sub command_stringify {
      my ($self, $cd, $args) = @_;
      return '{{var}} = "{{var}}"; $ref = ""';
  }
  
  sub command_replace_with_ref {
      my ($self, $cd, $args) = @_;
      return '{{var}} = $ref; $ref = ""';
  }
  
  sub command_replace_with_str {
      require String::PerlQuote;
  
      my ($self, $cd, $args) = @_;
      return "{{var}} = ".String::PerlQuote::double_quote($args->[0]).'; $ref=""';
  }
  
  sub command_unbless {
      my ($self, $cd, $args) = @_;
  
      return join(
          "",
          'my $reftype = Scalar::Util::reftype({{var}}); ',
          '{{var}} = $reftype eq "HASH" ? {%{ {{var}} }} :',
          ' $reftype eq "ARRAY" ? [@{ {{var}} }] :',
          ' $reftype eq "SCALAR" ? \(my $copy = ${ {{var}} }) :',
          ' $reftype eq "CODE" ? sub { goto &{ {{var}} } } :',
          '(die "Cannot unbless object with type $ref")',
      );
  }
  
  sub command_clone {
      my ($self, $cd, $args) = @_;
  
      my $limit = $args->[0] // 1;
      return join(
          "",
          "if (++\$ctr_circ <= $limit) { ",
          "{{var}} = $cd->{clone_func}({{var}}); redo ",
          "} else { ",
          "{{var}} = 'CIRCULAR'; \$ref = '' }",
      );
  }
  
  # test
  sub command_die {
      my ($self, $cd, $args) = @_;
      return "die";
  }
  
  sub _generate_cleanser_code {
      my $self = shift;
      my $opts = $self->{_opts};
  
      # compilation data, a structure that will be passed around between routines
      # during the generation of cleanser code.
      my $cd = {
          modules => {}, # key = module name, val = version
          clone_func   => $self->{_opts}{'!clone_func'},
          code => '',
      };
  
      $cd->{modules}{'Scalar::Util'} //= 0;
  
      if (!$cd->{clone_func}) {
          if (eval { require Data::Clone; 1 }) {
              $cd->{clone_func} = 'Data::Clone::clone';
          } else {
              $cd->{clone_func} = 'Clone::PP::clone';
          }
      }
      {
          last unless $cd->{clone_func} =~ /(.+)::(.+)/;
          $cd->{modules}{$1} //= 0;
      }
  
      my (@code, @stmts_ary, @stmts_hash, @stmts_main);
  
      my $n = 0;
      my $add_stmt = sub {
          my $which = shift;
          if ($which eq 'if' || $which eq 'new_if') {
              my ($cond0, $act0) = @_;
              for ([\@stmts_ary, '$e', 'ary'],
                   [\@stmts_hash, '$h->{$k}', 'hash'],
                   [\@stmts_main, '$_', 'main']) {
                  my $act  = $act0 ; $act  =~ s/\Q{{var}}\E/$_->[1]/g;
                  my $cond = $cond0; $cond =~ s/\Q{{var}}\E/$_->[1]/g;
                  #unless (@{ $_->[0] }) { push @{ $_->[0] }, '    say "D:'.$_->[2].' val=", '.$_->[1].', ", ref=$ref"; # DEBUG'."\n" }
                  push @{ $_->[0] }, "    ".($n && $which ne 'new_if' ? "els":"")."if ($cond) { $act }\n";
              }
              $n++;
          } else {
              my ($stmt0) = @_;
              for ([\@stmts_ary, '$e', 'ary'],
                   [\@stmts_hash, '$h->{$k}', 'hash'],
                   [\@stmts_main, '$_', 'main']) {
                  my $stmt = $stmt0; $stmt =~ s/\Q{{var}}\E/$_->[1]/g;
                  push @{ $_->[0] }, "    $stmt;\n";
              }
          }
      };
      my $add_if = sub {
          $add_stmt->('if', @_);
      };
      my $add_new_if = sub {
          $add_stmt->('new_if', @_);
      };
      my $add_if_ref = sub {
          my ($ref, $act0) = @_;
          $add_if->("\$ref eq '$ref'", $act0);
      };
      my $add_new_if_ref = sub {
          my ($ref, $act0) = @_;
          $add_new_if->("\$ref eq '$ref'", $act0);
      };
  
      # catch circular references
      my $circ = $opts->{-circular};
      if ($circ) {
          my $meth = "command_$circ->[0]";
          die "Can't handle command $circ->[0] for option '-circular'" unless $self->can($meth);
          my @args = @$circ; shift @args;
          my $act = $self->$meth($cd, \@args);
          #$add_stmt->('stmt', 'say "ref=$ref, " . {{var}}'); # DEBUG
          $add_new_if->('$ref && $refs{ {{var}} }++', $act);
      }
  
      # catch object of specified classes (e.g. DateTime, etc)
      for my $on (grep {/\A\w*(::\w+)*\z/} sort keys %$opts) {
          my $o = $opts->{$on};
          next unless $o;
          my $meth = "command_$o->[0]";
          die "Can't handle command $o->[0] for option '$on'" unless $self->can($meth);
          my @args = @$o; shift @args;
          my $act = $self->$meth($cd, \@args);
          $add_if_ref->($on, $act);
      }
  
      # catch general object not caught by previous
      for my $p ([-obj => 'Scalar::Util::blessed({{var}})']) {
          my $o = $opts->{$p->[0]};
          next unless $o;
          my $meth = "command_$o->[0]";
          die "Can't handle command $o->[0] for option '$p->[0]'" unless $self->can($meth);
          my @args = @$o; shift @args;
          $add_if->($p->[1], $self->$meth($cd, \@args));
      }
  
      # recurse array and hash
      if ($opts->{'!recurse_obj'}) {
          $add_stmt->('stmt', 'my $reftype=Scalar::Util::reftype({{var}})//""');
          $add_new_if->('$reftype eq "ARRAY"', '$process_array->({{var}})');
          $add_if->('$reftype eq "HASH"' , '$process_hash->({{var}})');
      } else {
          $add_new_if_ref->("ARRAY", '$process_array->({{var}})');
          $add_if_ref->("HASH" , '$process_hash->({{var}})');
      }
  
      # lastly, catch any reference left
      for my $p ([-ref => '$ref']) {
          my $o = $opts->{$p->[0]};
          next unless $o;
          my $meth = "command_$o->[0]";
          die "Can't handle command $o->[0] for option '$p->[0]'" unless $self->can($meth);
          my @args = @$o; shift @args;
          $add_if->($p->[1], $self->$meth($cd, \@args));
      }
  
      push @code, 'sub {'."\n";
      push @code, 'my $data = shift;'."\n";
      push @code, 'state %refs;'."\n" if $circ;
      push @code, 'state $ctr_circ;'."\n" if $circ;
      push @code, 'state $process_array;'."\n";
      push @code, 'state $process_hash;'."\n";
      push @code, (
          'if (!$process_array) { $process_array = sub { my $a = shift; for my $e (@$a) { ',
          'my $ref=ref($e);'."\n",
          join("", @stmts_ary).'} } }'."\n"
      );
      push @code, (
          'if (!$process_hash) { $process_hash = sub { my $h = shift; for my $k (keys %$h) { ',
          'my $ref=ref($h->{$k});'."\n",
          join("", @stmts_hash).'} } }'."\n"
      );
      push @code, '%refs = (); $ctr_circ=0;'."\n" if $circ;
      push @code, (
          'for ($data) { ',
          'my $ref=ref($_);'."\n",
          join("", @stmts_main).'}'."\n"
      );
      push @code, '$data'."\n";
      push @code, '}'."\n";
  
      my $code = join("", @code).";";
  
      if ($ENV{LOG_CLEANSER_CODE} && $log->is_trace) {
          require String::LineNumber;
          $log->tracef("Cleanser code:\n%s",
                       $ENV{LINENUM} // 1 ?
                           String::LineNumber::linenum($code) : $code);
      }
  
      $cd->{src} = $code;
  
      $cd;
  }
  
  sub clean_in_place {
      my ($self, $data) = @_;
  
      $self->{_code}->($data);
  }
  
  sub clone_and_clean {
      no strict 'refs';
  
      my ($self, $data) = @_;
      my $clone = &{$self->{_cd}{clone_func}}($data);
      $self->clean_in_place($clone);
  }
  
  1;
  # ABSTRACT: Clean data structure
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Clean - Clean data structure
  
  =head1 VERSION
  
  This document describes version 0.48 of Data::Clean (from Perl distribution Data-Clean), released on 2017-01-14.
  
  =head1 SYNOPSIS
  
   use Data::Clean;
  
   my $cleanser = Data::Clean->new(
       # specify how to deal with specific classes
       'DateTime'     => [call_method => 'epoch'], # replace object with its epoch
       'Time::Moment' => [call_method => 'epoch'], # replace object with its epoch
       'Regexp'       => ['stringify'], # replace $obj with "$obj"
  
       # specify how to deal with all scalar refs
       SCALAR         => ['deref_scalar'], # replace \1 with 1
  
       # specify how to deal with circular reference
       -circular      => ['clone'],
  
       # specify how to deal with all other kinds of objects
       -obj           => ['unbless'],
   );
  
   # to get cleansed data
   my $cleansed_data = $cleanser->clone_and_clean($data);
  
   # to replace original data with cleansed one
   $cleanser->clean_in_place($data);
  
  =head1 DESCRIPTION
  
  This class can be used to process a data structure by replacing some forms of
  data items with other forms. One of the main uses is to clean "unsafe" data,
  e.g. clean a data structure so it can be encoded to JSON (see
  L<Data::Clean::JSON>, which is a thin wrapper over this class).
  
  As can be seen from the example, you specify a list of transformations to be
  done, and then this class will generate an appropriate Perl code to do the
  cleansing. This class is faster than the other ways of processing, e.g.
  L<Data::Rmap> (see L<Bencher::Scenarios::DataCleansing> for some benchmarks).
  
  =for Pod::Coverage ^(command_.+)$
  
  =head1 METHODS
  
  =head2 new(%opts) => $obj
  
  Create a new instance.
  
  Options specify what to do with certain category of data. Option keys are either
  reference types (like C<HASH>, C<ARRAY>, C<SCALAR>) or class names (like
  C<Foo::Bar>), or C<-obj> (to match all kinds of objects, a.k.a. blessed
  references), C<-circular> (to match circular references), C<-ref> (to refer to
  any kind of references, used to process references not handled by other
  options). Option values are arrayrefs, the first element of the array is command
  name, to specify what to do with the reference/class. The rest are command
  arguments.
  
  Note that arrayrefs and hashrefs are always walked into, so it's not trapped by
  C<-ref>.
  
  Default for C<%opts>: C<< -ref => 'stringify' >>.
  
  Option keys that start with C<!> are special:
  
  =over
  
  =item * !recurse_obj (bool)
  
  Can be set to true to to recurse into objects if they are hash- or array-based.
  By default objects are not recursed into. Note that if you enable this option,
  object options (like C<Foo::Bar> or C<-obj>) won't work for hash- and
  array-based objects because they will be recursed instead.
  
  =item * !clone_func (str)
  
  Set fully qualified name of clone function to use. The default is to use
  C<Data::Clone::clone> if available, or fallback to C<Clone::PP::clone>.
  
  =back
  
  Available commands:
  
  =over 4
  
  =item * ['stringify']
  
  This will stringify a reference like C<{}> to something like C<HASH(0x135f998)>.
  
  =item * ['replace_with_ref']
  
  This will replace a reference like C<{}> with C<HASH>.
  
  =item * ['replace_with_str', STR]
  
  This will replace a reference like C<{}> with I<STR>.
  
  =item * ['call_method' => STR]
  
  This will call a method named I<STR> and use its return as the replacement. For
  example: C<< DateTime->from_epoch(epoch=>1000) >> when processed with C<<
  [call_method => 'epoch'] >> will become 1000.
  
  =item * ['call_func', STR]
  
  This will call a function named I<STR> with value as argument and use its return
  as the replacement.
  
  =item * ['one_or_zero']
  
  This will perform C<< $val ? 1:0 >>.
  
  =item * ['deref_scalar']
  
  This will replace a scalar reference like \1 with 1.
  
  =item * ['unbless']
  
  This will perform unblessing using L<Function::Fallback::CoreOrPP::unbless()>.
  Should be done only for objects (C<-obj>).
  
  =item * ['code', STR]
  
  This will replace with I<STR> treated as Perl code.
  
  =item * ['clone', INT]
  
  This command is useful if you have circular references and want to expand/copy
  them. For example:
  
   my $def_opts = { opt1 => 'default', opt2 => 0 };
   my $users    = { alice => $def_opts, bob => $def_opts, charlie => $def_opts };
  
  C<$users> contains three references to the same data structure. With the default
  behaviour of C<< -circular => [replace_with_str => 'CIRCULAR'] >> the cleaned
  data structure will be:
  
   { alice   => { opt1 => 'default', opt2 => 0 },
     bob     => 'CIRCULAR',
     charlie => 'CIRCULAR' }
  
  But with C<< -circular => ['clone'] >> option, the data structure will be
  cleaned to become (the C<$def_opts> is cloned):
  
   { alice   => { opt1 => 'default', opt2 => 0 },
     bob     => { opt1 => 'default', opt2 => 0 },
     charlie => { opt1 => 'default', opt2 => 0 }, }
  
  The command argument specifies the number of references to clone as a limit (the
  default is 50), since a cyclical structure can lead to infinite cloning. Above
  this limit, the circular references will be replaced with a string
  C<"CIRCULAR">. For example:
  
   my $a = [1]; push @$a, $a;
  
  With C<< -circular => ['clone', 2] >> the data will be cleaned as:
  
   [1, [1, [1, "CIRCULAR"]]]
  
  With C<< -circular => ['clone', 3] >> the data will be cleaned as:
  
   [1, [1, [1, [1, "CIRCULAR"]]]]
  
  =back
  
  =head2 $obj->clean_in_place($data) => $cleaned
  
  Clean $data. Modify data in-place.
  
  =head2 $obj->clone_and_clean($data) => $cleaned
  
  Clean $data. Clone $data first.
  
  =head1 ENVIRONMENT
  
  =over
  
  =item * LOG_CLEANSER_CODE => BOOL (default: 0)
  
  Can be enabled if you want to see the generated cleanser code. It is logged at
  level C<trace>.
  
  =item * LINENUM => BOOL (default: 1)
  
  When logging cleanser code, whether to give line numbers.
  
  =back
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Clean>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Clean>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Clean>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  Related modules: L<Data::Rmap>, L<Hash::Sanitize>, L<Data::Walk>.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_CLEAN

    $main::fatpacked{"Data/Clean/FromJSON.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_CLEAN_FROMJSON';
  package Data::Clean::FromJSON;
  
  our $DATE = '2017-01-15'; # DATE
  our $VERSION = '0.38'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use parent qw(Data::Clean);
  
  sub new {
      my ($class, %opts) = @_;
      $opts{"JSON::PP::Boolean"} //= ['one_or_zero'];
  
      # this does not exist though
      $opts{"JSON::XS::Boolean"} //= ['one_or_zero'];
  
      # this does not exist though
      $opts{"Cpanel::JSON::XS::Boolean"} //= ['one_or_zero'];
  
      $class->SUPER::new(%opts);
  }
  
  sub get_cleanser {
      my $class = shift;
      state $singleton = $class->new;
      $singleton;
  }
  
  1;
  # ABSTRACT: Clean data from JSON decoder
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Clean::FromJSON - Clean data from JSON decoder
  
  =head1 VERSION
  
  This document describes version 0.38 of Data::Clean::FromJSON (from Perl distribution Data-Clean-JSON), released on 2017-01-15.
  
  =head1 SYNOPSIS
  
   use Data::Clean::FromJSON;
   use JSON;
   my $cleanser = Data::Clean::FromJSON->get_cleanser;
   my $data    = JSON->new->decode('[true]'); # -> [bless(do{\(my $o=1)},"JSON::XS::Boolean")]
   my $cleaned = $cleanser->clean_in_place($data); # -> [1]
  
  =head1 DESCRIPTION
  
  This class can convert L<JSON::PP::Boolean> (or C<JSON::XS::Boolean>) objects to
  1/0 values.
  
  =head1 METHODS
  
  =head2 CLASS->get_cleanser => $obj
  
  Return a singleton instance, with default options. Use C<new()> if you want to
  customize options.
  
  =head2 CLASS->new() => $obj
  
  =head2 $obj->clean_in_place($data) => $cleaned
  
  Clean $data. Modify data in-place.
  
  =head2 $obj->clone_and_clean($data) => $cleaned
  
  Clean $data. Clone $data first.
  
  =head1 FAQ
  
  =head2 Why am I getting 'Modification of a read-only value attempted at lib/Data/Clean.pm line xxx'?
  
  [2013-10-15 ] This is also from Data::Clone::clone() when it encounters
  JSON::{PP,XS}::Boolean objects. You can use clean_in_place() instead of
  clone_and_clean(), or clone your data using other cloner like L<Sereal>.
  
  =head1 ENVIRONMENT
  
  LOG_CLEANSER_CODE
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Clean-JSON>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Data-Clean-JSON>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Clean-JSON>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_CLEAN_FROMJSON

    $main::fatpacked{"Data/Clean/JSON.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_CLEAN_JSON';
  package Data::Clean::JSON;
  
  our $DATE = '2017-01-15'; # DATE
  our $VERSION = '0.38'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use parent qw(Data::Clean);
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(
                         clean_json_in_place
                         clone_and_clean_json
                 );
  
  sub new {
      my ($class, %opts) = @_;
      $opts{DateTime}  //= [call_method => 'epoch'];
      $opts{'Time::Moment'} //= [call_method => 'epoch'];
      $opts{'Math::BigInt'} //= [call_method => 'bstr'];
      $opts{Regexp}    //= ['stringify'];
      $opts{version}   //= ['stringify'];
  
      $opts{SCALAR}    //= ['deref_scalar'];
      $opts{-ref}      //= ['replace_with_ref'];
      $opts{-circular} //= ['clone'];
      $opts{-obj}      //= ['unbless'];
  
      $opts{'!recurse_obj'} //= 1;
      $class->SUPER::new(%opts);
  }
  
  sub get_cleanser {
      my $class = shift;
      state $singleton = $class->new;
      $singleton;
  }
  
  sub clean_json_in_place {
      __PACKAGE__->get_cleanser->clean_in_place(@_);
  }
  
  sub clone_and_clean_json {
      __PACKAGE__->get_cleanser->clone_and_clean(@_);
  }
  
  1;
  # ABSTRACT: Clean data so it is safe to output to JSON
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Clean::JSON - Clean data so it is safe to output to JSON
  
  =head1 VERSION
  
  This document describes version 0.38 of Data::Clean::JSON (from Perl distribution Data-Clean-JSON), released on 2017-01-15.
  
  =head1 SYNOPSIS
  
   use Data::Clean::JSON;
   my $cleanser = Data::Clean::JSON->get_cleanser;
   my $data     = { code=>sub {}, re=>qr/abc/i };
  
   my $cleaned;
  
   # modifies data in-place
   $cleaned = $cleanser->clean_in_place($data);
  
   # ditto, but deep clone first, return
   $cleaned = $cleanser->clone_and_clean($data);
  
   # now output it
   use JSON;
   print encode_json($cleaned); # prints '{"code":"CODE","re":"(?^i:abc)"}'
  
  Functional shortcuts:
  
   use Data::Clean::JSON qw(clean_json_in_place clone_and_clean_json);
  
   # equivalent to Data::Clean::JSON->get_cleanser->clean_in_place($data)
   clean_json_in_place($data);
  
   # equivalent to Data::Clean::JSON->get_cleanser->clone_and_clean($data)
   $cleaned = clone_and_clean_json($data);
  
  =head1 DESCRIPTION
  
  This class cleans data from anything that might be problematic when encoding to
  JSON. This includes coderefs, globs, and so on. Here's what it will do by
  default:
  
  =over
  
  =item * Change DateTime and Time::Moment object to its epoch value
  
  =item * Change Regexp and version object to its string value
  
  =item * Change scalar references (e.g. \1) to its scalar value (e.g. 1)
  
  =item * Change other references (non-hash, non-array) to its ref() value (e.g. "GLOB", "CODE")
  
  =item * Clone circular references
  
  =item * Unbless other types of objects
  
  =back
  
  Cleaning recurses into objects.
  
  Data that has been cleaned will probably not be convertible back to the
  original, due to information loss (for example, coderefs converted to string
  C<"CODE">).
  
  The design goals are good performance, good defaults, and just enough
  flexibility. The original use-case is for returning JSON response in HTTP API
  service.
  
  This module is significantly faster than modules like L<Data::Rmap> or
  L<Data::Visitor::Callback> because with something like Data::Rmap you repeatedly
  invoke callback for each data item. This module, on the other hand, generates a
  cleanser code using eval(), using native Perl for() loops.
  
  If C<LOG_CLEANSER_CODE> environment is set to true, the generated cleanser code
  will be logged using L<Log::Any> at trace level. You can see it, e.g. using
  L<Log::Any::App>:
  
   % LOG=1 LOG_CLEANSER_CODE=1 TRACE=1 perl -MLog::Any::App -MData::Clean::JSON \
     -e'$c=Data::Clean::JSON->new; ...'
  
  =head1 FUNCTIONS
  
  None of the functions are exported by default.
  
  =head2 clean_json_in_place($data)
  
  A shortcut for:
  
   Data::Clean::JSON->get_cleanser->clean_in_place($data)
  
  =head2 clone_and_clean_json($data) => $cleaned
  
  A shortcut for:
  
   $cleaned = Data::Clean::JSON->get_cleanser->clone_and_clean($data)
  
  =head1 METHODS
  
  =head2 CLASS->get_cleanser => $obj
  
  Return a singleton instance, with default options. Use C<new()> if you want to
  customize options.
  
  =head2 CLASS->new() => $obj
  
  Create a new instance.
  
  =head2 $obj->clean_in_place($data) => $cleaned
  
  Clean $data. Modify data in-place.
  
  =head2 $obj->clone_and_clean($data) => $cleaned
  
  Clean $data. Clone $data first.
  
  =head1 FAQ
  
  =head2 Why clone/modify? Why not directly output JSON?
  
  So that the data can be used for other stuffs, like outputting to YAML, etc.
  
  =head2 Why is it slow?
  
  If you use C<new()> instead of C<get_cleanser()>, make sure that you do not
  construct the Data::Clean::JSON object repeatedly, as the constructor generates
  the cleanser code first using eval(). A short benchmark (run on my slow Atom
  netbook):
  
   % bench -MData::Clean::JSON -b'$c=Data::Clean::JSON->new' \
       'Data::Clean::JSON->new->clone_and_clean([1..100])' \
       '$c->clone_and_clean([1..100])'
   Benchmarking sub { Data::Clean::JSON->new->clean_in_place([1..100]) }, sub { $c->clean_in_place([1..100]) } ...
   a: 302 calls (291.3/s), 1.037s (3.433ms/call)
   b: 7043 calls (4996/s), 1.410s (0.200ms/call)
   Fastest is b (17.15x a)
  
  Second, you can turn off some checks if you are sure you will not be getting bad
  data. For example, if you know that your input will not contain circular
  references, you can turn off circular detection:
  
   $cleanser = Data::Clean::JSON->new(-circular => 0);
  
  Benchmark:
  
   $ perl -MData::Clean::JSON -MBench -E '
     $data = [[1],[2],[3],[4],[5]];
     bench {
         circ   => sub { state $c = Data::Clean::JSON->new;               $c->clone_and_clean($data) },
         nocirc => sub { state $c = Data::Clean::JSON->new(-circular=>0); $c->clone_and_clean($data) }
     }, -1'
   circ: 9456 calls (9425/s), 1.003s (0.106ms/call)
   nocirc: 13161 calls (12885/s), 1.021s (0.0776ms/call)
   Fastest is nocirc (1.367x circ)
  
  The less number of checks you do, the faster the cleansing process will be.
  
  =head2 Why am I getting 'Not a CODE reference at lib/Data/Clean.pm line xxx'?
  
  [2013-08-07 ] This error message is from Data::Clone::clone() when it is cloning
  an object. If you are cleaning objects, instead of using clone_and_clean(), try
  using clean_in_place(). Or, clone your data first using something else like
  L<Sereal>.
  
  =head1 ENVIRONMENT
  
  LOG_CLEANSER_CODE
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Clean-JSON>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Data-Clean-JSON>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Clean-JSON>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Data::Rmap>
  
  L<Data::Visitor::Callback>
  
  L<Data::Abridge> is similar in goal, which is to let Perl data structures (which
  might contain stuffs unsupported in JSON) be encodeable to JSON. But unlike
  Data::Clean::JSON, it has some (currently) non-configurable rules, like changing
  a coderef with a hash C<< {CODE=>'\&main::__ANON__'} >> or a scalar ref with C<<
  {SCALAR=>'value'} >> and so on. Note that the abridging process is similarly
  unidirectional (you cannot convert back the original Perl data structure).
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_CLEAN_JSON

    $main::fatpacked{"Data/Dmp.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_DMP';
  package Data::Dmp;
  
  our $DATE = '2017-01-30'; # DATE
  our $VERSION = '0.23'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Scalar::Util qw(looks_like_number blessed reftype refaddr);
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT = qw(dd dmp);
  
  # for when dealing with circular refs
  our %_seen_refaddrs;
  our %_subscripts;
  our @_fixups;
  
  our $OPT_PERL_VERSION = "5.010";
  our $OPT_REMOVE_PRAGMAS = 0;
  our $OPT_DEPARSE = 1;
  our $OPT_STRINGIFY_NUMBERS = 0;
  
  # BEGIN COPY PASTE FROM Data::Dump
  my %esc = (
      "\a" => "\\a",
      "\b" => "\\b",
      "\t" => "\\t",
      "\n" => "\\n",
      "\f" => "\\f",
      "\r" => "\\r",
      "\e" => "\\e",
  );
  
  # put a string value in double quotes
  sub _double_quote {
      local($_) = $_[0];
  
      # If there are many '"' we might want to use qq() instead
      s/([\\\"\@\$])/\\$1/g;
      return qq("$_") unless /[^\040-\176]/;  # fast exit
  
      s/([\a\b\t\n\f\r\e])/$esc{$1}/g;
  
      # no need for 3 digits in escape for these
      s/([\0-\037])(?!\d)/sprintf('\\%o',ord($1))/eg;
  
      s/([\0-\037\177-\377])/sprintf('\\x%02X',ord($1))/eg;
      s/([^\040-\176])/sprintf('\\x{%X}',ord($1))/eg;
  
      return qq("$_");
  }
  # END COPY PASTE FROM Data::Dump
  
  sub _dump_code {
      my $code = shift;
  
      state $deparse = do {
          require B::Deparse;
          B::Deparse->new("-l"); # -i option doesn't have any effect?
      };
  
      my $res = $deparse->coderef2text($code);
  
      my ($res_before_first_line, $res_after_first_line) =
          $res =~ /(.+?)^(#line .+)/ms;
  
      if ($OPT_REMOVE_PRAGMAS) {
          $res_before_first_line = "{";
      } elsif ($OPT_PERL_VERSION < 5.016) {
          # older perls' feature.pm doesn't yet support q{no feature ':all';}
          # so we replace it with q{no feature}.
          $res_before_first_line =~ s/no feature ':all';/no feature;/m;
      }
      $res_after_first_line =~ s/^#line .+//gm;
  
      $res = "sub" . $res_before_first_line . $res_after_first_line;
      $res =~ s/^\s+//gm;
      $res =~ s/\n+//g;
      $res =~ s/;\}\z/}/;
      $res;
  }
  
  sub _quote_key {
      $_[0] =~ /\A-?[A-Za-z_][A-Za-z0-9_]*\z/ ||
          $_[0] =~ /\A-?[1-9][0-9]{0,8}\z/ ? $_[0] : _double_quote($_[0]);
  }
  
  sub _dump {
      my ($val, $subscript) = @_;
  
      my $ref = ref($val);
      if ($ref eq '') {
          if (!defined($val)) {
              return "undef";
          } elsif (looks_like_number($val) && !$OPT_STRINGIFY_NUMBERS &&
                       # perl does several normalizations to number literal, e.g.
                       # "+1" becomes 1, 0123 is octal literal, etc. make sure we
                       # only leave out quote when the number is not normalized
                       $val eq $val+0 &&
                       # perl also doesn't recognize Inf and NaN as numeric
                       # literals (ref: perldata) so these unquoted literals will
                       # choke under 'use strict "subs"
                       $val !~ /\A-?(?:inf(?:inity)?|nan)\z/i
                   ) {
              return $val;
          } else {
              return _double_quote($val);
          }
      }
      my $refaddr = refaddr($val);
      $_subscripts{$refaddr} //= $subscript;
      if ($_seen_refaddrs{$refaddr}++) {
          push @_fixups, "\$a->$subscript=\$a",
              ($_subscripts{$refaddr} ? "->$_subscripts{$refaddr}" : ""), ";";
          return "'fix'";
      }
  
      my $class;
  
      if ($ref eq 'Regexp' || $ref eq 'REGEXP') {
          require Regexp::Stringify;
          return Regexp::Stringify::stringify_regexp(
              regexp=>$val, with_qr=>1, plver=>$OPT_PERL_VERSION);
      }
  
      if (blessed $val) {
          $class = $ref;
          $ref = reftype($val);
      }
  
      my $res;
      if ($ref eq 'ARRAY') {
          $res = "[";
          my $i = 0;
          for (@$val) {
              $res .= "," if $i;
              $res .= _dump($_, "$subscript\[$i]");
              $i++;
          }
          $res .= "]";
      } elsif ($ref eq 'HASH') {
          $res = "{";
          my $i = 0;
          for (sort keys %$val) {
              $res .= "," if $i++;
              my $k = _quote_key($_);
              my $v = _dump($val->{$_}, "$subscript\{$k}");
              $res .= "$k=>$v";
          }
          $res .= "}";
      } elsif ($ref eq 'SCALAR') {
          $res = "\\"._dump($$val, $subscript);
      } elsif ($ref eq 'REF') {
          $res = "\\"._dump($$val, $subscript);
      } elsif ($ref eq 'CODE') {
          $res = $OPT_DEPARSE ? _dump_code($val) : 'sub{"DUMMY"}';
      } else {
          die "Sorry, I can't dump $val (ref=$ref) yet";
      }
  
      $res = "bless($res,"._double_quote($class).")" if defined($class);
      $res;
  }
  
  our $_is_dd;
  sub _dd_or_dmp {
      local %_seen_refaddrs;
      local %_subscripts;
      local @_fixups;
  
      my $res;
      if (@_ > 1) {
          $res = "(" . join(",", map {_dump($_, '')} @_) . ")";
      } else {
          $res = _dump($_[0], '');
      }
      if (@_fixups) {
          $res = "do{my\$a=$res;" . join("", @_fixups) . "\$a}";
      }
  
      if ($_is_dd) {
          say $res;
          return wantarray() || @_ > 1 ? @_ : $_[0];
      } else {
          return $res;
      }
  }
  
  sub dd { local $_is_dd=1; _dd_or_dmp(@_) } # goto &sub doesn't work here
  sub dmp { goto &_dd_or_dmp }
  
  1;
  # ABSTRACT: Dump Perl data structures as Perl code
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Dmp - Dump Perl data structures as Perl code
  
  =head1 VERSION
  
  This document describes version 0.23 of Data::Dmp (from Perl distribution Data-Dmp), released on 2017-01-30.
  
  =head1 SYNOPSIS
  
   use Data::Dmp; # exports dd() and dmp()
   dd [1, 2, 3]; # prints "[1,2,3]"
   $a = dmp({a => 1}); # -> "{a=>1}"
  
  =head1 DESCRIPTION
  
  Data::Dmp is a Perl dumper like L<Data::Dumper>. It's compact (only about 175
  lines of code long), starts fast and does not use any non-core modules except
  L<Regexp::Stringify> when dumping regexes. It produces compact single-line
  output (similar to L<Data::Dumper::Concise>). It roughly has the same speed as
  Data::Dumper (usually a bit faster for smaller structures) and faster than
  L<Data::Dump>, but does not offer the various formatting options. It supports
  dumping objects, regexes, circular structures, coderefs. Its code is first based
  on L<Data::Dump>: I removed all the parts that I don't need, particularly the
  pretty formatting stuffs) and added some features that I need like proper regex
  dumping and coderef deparsing.
  
  =head1 SETTINGS
  
  =head2 $Data::Dmp::OPT_PERL_VERSION => str (default: 5.010)
  
  Set target Perl version. If you set this to, say C<5.010>, then the dumped code
  will keep compatibility with Perl 5.10.0. This is used in the following ways:
  
  =over
  
  =item * passed to L<Regexp::Stringify>
  
  =item * when dumping code references
  
  For example, in perls earlier than 5.016, feature.pm does not understand:
  
   no feature ':all';
  
  so we replace it with:
  
   no feature;
  
  =back
  
  =head2 $Data::Dmp::OPT_REMOVE_PRAGMAS => bool (default: 0)
  
  If set to 1, then pragmas at the start of coderef dump will be removed. Coderef
  dump is produced by L<B::Deparse> and is of the form like:
  
   sub { use feature 'current_sub', 'evalbytes', 'fc', 'say', 'state', 'switch', 'unicode_strings', 'unicode_eval'; $a <=> $b }
  
  If you want to dump short coderefs, the pragmas might be distracting. You can
  turn turn on this option which will make the above dump become:
  
   sub { $a <=> $b }
  
  Note that without the pragmas, the dump might be incorrect.
  
  =head2 $Data::Dmp::OPT_DEPARSE => bool (default: 1)
  
  Can be set to 0 to skip deparsing code. Coderefs will be dumped as
  C<sub{"DUMMY"}> instead, like in Data::Dump.
  
  =head2 $Data::Dmp::OPT_STRINGIFY_NUMBERS => bool (default: 0)
  
  If set to true, will dump numbers as quoted string, e.g. 123 as "123" instead of
  123. This might be helpful if you want to compute the hash of or get a canonical
  representation of data structure.
  
  =head1 BENCHMARKS
  
   [1..10]:
                         Rate    Data::Dump Data::Dumper Data::Dmp
   Data::Dump     30417+-55/s            --       -66.2%    -74.0%
   Data::Dumper   89888+-79/s  195.52+-0.6%           --    -23.1%
   Data::Dmp    116890+-160/s 284.29+-0.87% 30.04+-0.21%        --
   
   [1..100]:
                          Rate    Data::Dump  Data::Dmp Data::Dumper
   Data::Dump    3712.3+-7.9/s            --     -73.9%       -74.9%
   Data::Dmp    14211.3+-4.9/s 282.82+-0.82%         --        -3.8%
   Data::Dumper    14771+-28/s   297.9+-1.1% 3.94+-0.2%           --
   
   Some mixed structure:
                       Rate    Data::Dump    Data::Dmp Data::Dumper
   Data::Dump    8764+-16/s            --       -67.6%       -80.1%
   Data::Dmp    27016+-36/s  208.28+-0.7%           --       -38.6%
   Data::Dumper 43995+-13/s 402.02+-0.95% 62.85+-0.22%           --
  
  =head1 FUNCTIONS
  
  =head2 dd($data, ...) => $data ...
  
  Exported by default. Like C<Data::Dump>'s C<dd> (a.k.a. C<dump>), print one or
  more data to STDOUT. Unlike C<Data::Dump>'s C<dd>, it I<always> prints and
  return I<the original data> (like L<XXX>), making it convenient to insert into
  expressions. This also removes ambiguity and saves one C<wantarray()> call.
  
  =head2 dmp($data, ...) => $str
  
  Exported by default. Return dump result as string. Unlike C<Data::Dump>'s C<dd>
  (a.k.a. C<dump>), it I<never> prints and only return the data.
  
  =head1 FAQ
  
  =head2 When to use Data::Dmp? How does it compare to other dumper modules?
  
  Data::Dmp might be suitable for you if you want a relatively fast pure-Perl data
  structure dumper to eval-able Perl code. It produces compact, single-line Perl
  code but offers little/no formatting options. Data::Dmp and Data::Dump module
  family usually produce Perl code that is "more eval-able", e.g. it can recreate
  circular structure.
  
  L<Data::Dump> produces visually nicer output (some alignment, use of range
  operator to shorten lists, use of base64 for binary data, etc) but no built-in
  option to produce compact/single-line output. It's more suitable for debugging.
  It's also relatively slow. I usually use its variant, L<Data::Dump::Color>, for
  console debugging.
  
  L<Data::Dumper> is a core module, offers a lot of formatting options (like
  disabling hash key sorting, setting verboseness/indent level, and so on) but you
  usually have to configure it quite a bit before it does exactly like you want
  (that's why there are modules on CPAN that are just wrapping Data::Dumper with
  some configuration, like L<Data::Dumper::Concise> et al). It does not support
  dumping Perl code that can recreate circular structures.
  
  Of course, dumping to eval-able Perl code is slow (not to mention the cost of
  re-loading the code back to in-memory data, via eval-ing) compared to dumping to
  JSON, YAML, Sereal, or other format. So you need to decide first whether this is
  the appropriate route you want to take. (But note that there is also
  L<Data::Dumper::Limited> and L<Data::Undump> which uses a format similar to
  Data::Dumper but lets you load the serialized data without eval-ing them, thus
  achieving the speed comparable to JSON::XS).
  
  =head2 Is the output guaranteed to be single line dump?
  
  No. Some things can still produce multiline dump, e.g. newline in regular
  expression.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Dmp>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Dmp>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Dmp>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Data::Dump> and other variations/derivate works in Data::Dump::*.
  
  L<Data::Dumper> and its variants.
  
  L<Data::Printer>.
  
  L<YAML>, L<JSON>, L<Storable>, L<Sereal>, and other serialization formats.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_DMP

    $main::fatpacked{"Data/Dump.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_DUMP';
  package Data::Dump;
  
  use strict;
  use vars qw(@EXPORT @EXPORT_OK $VERSION $DEBUG);
  use subs qq(dump);
  
  require Exporter;
  *import = \&Exporter::import;
  @EXPORT = qw(dd ddx);
  @EXPORT_OK = qw(dump pp dumpf quote);
  
  $VERSION = "1.23";
  $DEBUG = 0;
  
  use overload ();
  use vars qw(%seen %refcnt @dump @fixup %require $TRY_BASE64 @FILTERS $INDENT);
  
  $TRY_BASE64 = 50 unless defined $TRY_BASE64;
  $INDENT = "  " unless defined $INDENT;
  
  sub dump
  {
      local %seen;
      local %refcnt;
      local %require;
      local @fixup;
  
      require Data::Dump::FilterContext if @FILTERS;
  
      my $name = "a";
      my @dump;
  
      for my $v (@_) {
  	my $val = _dump($v, $name, [], tied($v));
  	push(@dump, [$name, $val]);
      } continue {
  	$name++;
      }
  
      my $out = "";
      if (%require) {
  	for (sort keys %require) {
  	    $out .= "require $_;\n";
  	}
      }
      if (%refcnt) {
  	# output all those with refcounts first
  	for (@dump) {
  	    my $name = $_->[0];
  	    if ($refcnt{$name}) {
  		$out .= "my \$$name = $_->[1];\n";
  		undef $_->[1];
  	    }
  	}
  	for (@fixup) {
  	    $out .= "$_;\n";
  	}
      }
  
      my $paren = (@dump != 1);
      $out .= "(" if $paren;
      $out .= format_list($paren, undef,
  			map {defined($_->[1]) ? $_->[1] : "\$".$_->[0]}
  			    @dump
  		       );
      $out .= ")" if $paren;
  
      if (%refcnt || %require) {
  	$out .= ";\n";
  	$out =~ s/^/$INDENT/gm;
  	$out = "do {\n$out}";
      }
  
      print STDERR "$out\n" unless defined wantarray;
      $out;
  }
  
  *pp = \&dump;
  
  sub dd {
      print dump(@_), "\n";
  }
  
  sub ddx {
      my(undef, $file, $line) = caller;
      $file =~ s,.*[\\/],,;
      my $out = "$file:$line: " . dump(@_) . "\n";
      $out =~ s/^/# /gm;
      print $out;
  }
  
  sub dumpf {
      require Data::Dump::Filtered;
      goto &Data::Dump::Filtered::dump_filtered;
  }
  
  sub _dump
  {
      my $ref  = ref $_[0];
      my $rval = $ref ? $_[0] : \$_[0];
      shift;
  
      my($name, $idx, $dont_remember, $pclass, $pidx) = @_;
  
      my($class, $type, $id);
      my $strval = overload::StrVal($rval);
      # Parse $strval without using regexps, in order not to clobber $1, $2,...
      if ((my $i = rindex($strval, "=")) >= 0) {
  	$class = substr($strval, 0, $i);
  	$strval = substr($strval, $i+1);
      }
      if ((my $i = index($strval, "(0x")) >= 0) {
  	$type = substr($strval, 0, $i);
  	$id = substr($strval, $i + 2, -1);
      }
      else {
  	die "Can't parse " . overload::StrVal($rval);
      }
      if ($] < 5.008 && $type eq "SCALAR") {
  	$type = "REF" if $ref eq "REF";
      }
      warn "\$$name(@$idx) $class $type $id ($ref)" if $DEBUG;
  
      my $out;
      my $comment;
      my $hide_keys;
      if (@FILTERS) {
  	my $pself = "";
  	$pself = fullname("self", [@$idx[$pidx..(@$idx - 1)]]) if $pclass;
  	my $ctx = Data::Dump::FilterContext->new($rval, $class, $type, $ref, $pclass, $pidx, $idx);
  	my @bless;
  	for my $filter (@FILTERS) {
  	    if (my $f = $filter->($ctx, $rval)) {
  		if (my $v = $f->{object}) {
  		    local @FILTERS;
  		    $out = _dump($v, $name, $idx, 1);
  		    $dont_remember++;
  		}
  		if (defined(my $c = $f->{bless})) {
  		    push(@bless, $c);
  		}
  		if (my $c = $f->{comment}) {
  		    $comment = $c;
  		}
  		if (defined(my $c = $f->{dump})) {
  		    $out = $c;
  		    $dont_remember++;
  		}
  		if (my $h = $f->{hide_keys}) {
  		    if (ref($h) eq "ARRAY") {
  			$hide_keys = sub {
  			    for my $k (@$h) {
  				return 1 if $k eq $_[0];
  			    }
  			    return 0;
  			};
  		    }
  		}
  	    }
  	}
  	push(@bless, "") if defined($out) && !@bless;
  	if (@bless) {
  	    $class = shift(@bless);
  	    warn "More than one filter callback tried to bless object" if @bless;
  	}
      }
  
      unless ($dont_remember) {
  	if (my $s = $seen{$id}) {
  	    my($sname, $sidx) = @$s;
  	    $refcnt{$sname}++;
  	    my $sref = fullname($sname, $sidx,
  				($ref && $type eq "SCALAR"));
  	    warn "SEEN: [\$$name(@$idx)] => [\$$sname(@$sidx)] ($ref,$sref)" if $DEBUG;
  	    return $sref unless $sname eq $name;
  	    $refcnt{$name}++;
  	    push(@fixup, fullname($name,$idx)." = $sref");
  	    return "do{my \$fix}" if @$idx && $idx->[-1] eq '$';
  	    return "'fix'";
  	}
  	$seen{$id} = [$name, $idx];
      }
  
      if ($class) {
  	$pclass = $class;
  	$pidx = @$idx;
      }
  
      if (defined $out) {
  	# keep it
      }
      elsif ($type eq "SCALAR" || $type eq "REF" || $type eq "REGEXP") {
  	if ($ref) {
  	    if ($class && $class eq "Regexp") {
  		my $v = "$rval";
  
  		my $mod = "";
  		if ($v =~ /^\(\?\^?([msix-]*):([\x00-\xFF]*)\)\z/) {
  		    $mod = $1;
  		    $v = $2;
  		    $mod =~ s/-.*//;
  		}
  
  		my $sep = '/';
  		my $sep_count = ($v =~ tr/\///);
  		if ($sep_count) {
  		    # see if we can find a better one
  		    for ('|', ',', ':', '#') {
  			my $c = eval "\$v =~ tr/\Q$_\E//";
  			#print "SEP $_ $c $sep_count\n";
  			if ($c < $sep_count) {
  			    $sep = $_;
  			    $sep_count = $c;
  			    last if $sep_count == 0;
  			}
  		    }
  		}
  		$v =~ s/\Q$sep\E/\\$sep/g;
  
  		$out = "qr$sep$v$sep$mod";
  		undef($class);
  	    }
  	    else {
  		delete $seen{$id} if $type eq "SCALAR";  # will be seen again shortly
  		my $val = _dump($$rval, $name, [@$idx, "\$"], 0, $pclass, $pidx);
  		$out = $class ? "do{\\(my \$o = $val)}" : "\\$val";
  	    }
  	} else {
  	    if (!defined $$rval) {
  		$out = "undef";
  	    }
  	    elsif (do {no warnings 'numeric'; $$rval + 0 eq $$rval}) {
  		$out = $$rval;
  	    }
  	    else {
  		$out = str($$rval);
  	    }
  	    if ($class && !@$idx) {
  		# Top is an object, not a reference to one as perl needs
  		$refcnt{$name}++;
  		my $obj = fullname($name, $idx);
  		my $cl  = quote($class);
  		push(@fixup, "bless \\$obj, $cl");
  	    }
  	}
      }
      elsif ($type eq "GLOB") {
  	if ($ref) {
  	    delete $seen{$id};
  	    my $val = _dump($$rval, $name, [@$idx, "*"], 0, $pclass, $pidx);
  	    $out = "\\$val";
  	    if ($out =~ /^\\\*Symbol::/) {
  		$require{Symbol}++;
  		$out = "Symbol::gensym()";
  	    }
  	} else {
  	    my $val = "$$rval";
  	    $out = "$$rval";
  
  	    for my $k (qw(SCALAR ARRAY HASH)) {
  		my $gval = *$$rval{$k};
  		next unless defined $gval;
  		next if $k eq "SCALAR" && ! defined $$gval;  # always there
  		my $f = scalar @fixup;
  		push(@fixup, "RESERVED");  # overwritten after _dump() below
  		$gval = _dump($gval, $name, [@$idx, "*{$k}"], 0, $pclass, $pidx);
  		$refcnt{$name}++;
  		my $gname = fullname($name, $idx);
  		$fixup[$f] = "$gname = $gval";  #XXX indent $gval
  	    }
  	}
      }
      elsif ($type eq "ARRAY") {
  	my @vals;
  	my $tied = tied_str(tied(@$rval));
  	my $i = 0;
  	for my $v (@$rval) {
  	    push(@vals, _dump($v, $name, [@$idx, "[$i]"], $tied, $pclass, $pidx));
  	    $i++;
  	}
  	$out = "[" . format_list(1, $tied, @vals) . "]";
      }
      elsif ($type eq "HASH") {
  	my(@keys, @vals);
  	my $tied = tied_str(tied(%$rval));
  
  	# statistics to determine variation in key lengths
  	my $kstat_max = 0;
  	my $kstat_sum = 0;
  	my $kstat_sum2 = 0;
  
  	my @orig_keys = keys %$rval;
  	if ($hide_keys) {
  	    @orig_keys = grep !$hide_keys->($_), @orig_keys;
  	}
  	my $text_keys = 0;
  	for (@orig_keys) {
  	    $text_keys++, last unless /^[-+]?(?:0|[1-9]\d*)(?:\.\d+)?\z/;
  	}
  
  	if ($text_keys) {
  	    @orig_keys = sort { lc($a) cmp lc($b) } @orig_keys;
  	}
  	else {
  	    @orig_keys = sort { $a <=> $b } @orig_keys;
  	}
  
  	my $quote;
  	for my $key (@orig_keys) {
  	    next if $key =~ /^-?[a-zA-Z_]\w*\z/;
  	    next if $key =~ /^-?[1-9]\d{0,8}\z/;
  	    $quote++;
  	    last;
  	}
  
  	for my $key (@orig_keys) {
  	    my $val = \$rval->{$key};  # capture value before we modify $key
  	    $key = quote($key) if $quote;
  	    $kstat_max = length($key) if length($key) > $kstat_max;
  	    $kstat_sum += length($key);
  	    $kstat_sum2 += length($key)*length($key);
  
  	    push(@keys, $key);
  	    push(@vals, _dump($$val, $name, [@$idx, "{$key}"], $tied, $pclass, $pidx));
  	}
  	my $nl = "";
  	my $klen_pad = 0;
  	my $tmp = "@keys @vals";
  	if (length($tmp) > 60 || $tmp =~ /\n/ || $tied) {
  	    $nl = "\n";
  
  	    # Determine what padding to add
  	    if ($kstat_max < 4) {
  		$klen_pad = $kstat_max;
  	    }
  	    elsif (@keys >= 2) {
  		my $n = @keys;
  		my $avg = $kstat_sum/$n;
  		my $stddev = sqrt(($kstat_sum2 - $n * $avg * $avg) / ($n - 1));
  
  		# I am not actually very happy with this heuristics
  		if ($stddev / $kstat_max < 0.25) {
  		    $klen_pad = $kstat_max;
  		}
  		if ($DEBUG) {
  		    push(@keys, "__S");
  		    push(@vals, sprintf("%.2f (%d/%.1f/%.1f)",
  					$stddev / $kstat_max,
  					$kstat_max, $avg, $stddev));
  		}
  	    }
  	}
  	$out = "{$nl";
  	$out .= "$INDENT# $tied$nl" if $tied;
  	while (@keys) {
  	    my $key = shift @keys;
  	    my $val = shift @vals;
  	    my $vpad = $INDENT . (" " x ($klen_pad ? $klen_pad + 4 : 0));
  	    $val =~ s/\n/\n$vpad/gm;
  	    my $kpad = $nl ? $INDENT : " ";
  	    $key .= " " x ($klen_pad - length($key)) if $nl && $klen_pad > length($key);
  	    $out .= "$kpad$key => $val,$nl";
  	}
  	$out =~ s/,$/ / unless $nl;
  	$out .= "}";
      }
      elsif ($type eq "CODE") {
  	$out = 'sub { ... }';
      }
      elsif ($type eq "VSTRING") {
          $out = sprintf +($ref ? '\v%vd' : 'v%vd'), $$rval;
      }
      else {
  	warn "Can't handle $type data";
  	$out = "'#$type#'";
      }
  
      if ($class && $ref) {
  	$out = "bless($out, " . quote($class) . ")";
      }
      if ($comment) {
  	$comment =~ s/^/# /gm;
  	$comment .= "\n" unless $comment =~ /\n\z/;
  	$comment =~ s/^#[ \t]+\n/\n/;
  	$out = "$comment$out";
      }
      return $out;
  }
  
  sub tied_str {
      my $tied = shift;
      if ($tied) {
  	if (my $tied_ref = ref($tied)) {
  	    $tied = "tied $tied_ref";
  	}
  	else {
  	    $tied = "tied";
  	}
      }
      return $tied;
  }
  
  sub fullname
  {
      my($name, $idx, $ref) = @_;
      substr($name, 0, 0) = "\$";
  
      my @i = @$idx;  # need copy in order to not modify @$idx
      if ($ref && @i && $i[0] eq "\$") {
  	shift(@i);  # remove one deref
  	$ref = 0;
      }
      while (@i && $i[0] eq "\$") {
  	shift @i;
  	$name = "\$$name";
      }
  
      my $last_was_index;
      for my $i (@i) {
  	if ($i eq "*" || $i eq "\$") {
  	    $last_was_index = 0;
  	    $name = "$i\{$name}";
  	} elsif ($i =~ s/^\*//) {
  	    $name .= $i;
  	    $last_was_index++;
  	} else {
  	    $name .= "->" unless $last_was_index++;
  	    $name .= $i;
  	}
      }
      $name = "\\$name" if $ref;
      $name;
  }
  
  sub format_list
  {
      my $paren = shift;
      my $comment = shift;
      my $indent_lim = $paren ? 0 : 1;
      if (@_ > 3) {
  	# can we use range operator to shorten the list?
  	my $i = 0;
  	while ($i < @_) {
  	    my $j = $i + 1;
  	    my $v = $_[$i];
  	    while ($j < @_) {
  		# XXX allow string increment too?
  		if ($v eq "0" || $v =~ /^-?[1-9]\d{0,9}\z/) {
  		    $v++;
  		}
  		elsif ($v =~ /^"([A-Za-z]{1,3}\d*)"\z/) {
  		    $v = $1;
  		    $v++;
  		    $v = qq("$v");
  		}
  		else {
  		    last;
  		}
  		last if $_[$j] ne $v;
  		$j++;
  	    }
  	    if ($j - $i > 3) {
  		splice(@_, $i, $j - $i, "$_[$i] .. $_[$j-1]");
  	    }
  	    $i++;
  	}
      }
      my $tmp = "@_";
      if ($comment || (@_ > $indent_lim && (length($tmp) > 60 || $tmp =~ /\n/))) {
  	my @elem = @_;
  	for (@elem) { s/^/$INDENT/gm; }
  	return "\n" . ($comment ? "$INDENT# $comment\n" : "") .
                 join(",\n", @elem, "");
      } else {
  	return join(", ", @_);
      }
  }
  
  sub str {
    if (length($_[0]) > 20) {
        for ($_[0]) {
        # Check for repeated string
        if (/^(.)\1\1\1/s) {
            # seems to be a repeating sequence, let's check if it really is
            # without backtracking
            unless (/[^\Q$1\E]/) {
                my $base = quote($1);
                my $repeat = length;
                return "($base x $repeat)"
            }
        }
        # Length protection because the RE engine will blow the stack [RT#33520]
        if (length($_) < 16 * 1024 && /^(.{2,5}?)\1*\z/s) {
  	  my $base   = quote($1);
  	  my $repeat = length($_)/length($1);
  	  return "($base x $repeat)";
        }
        }
    }
  
    local $_ = &quote;
  
    if (length($_) > 40  && !/\\x\{/ && length($_) > (length($_[0]) * 2)) {
        # too much binary data, better to represent as a hex/base64 string
  
        # Base64 is more compact than hex when string is longer than
        # 17 bytes (not counting any require statement needed).
        # But on the other hand, hex is much more readable.
        if ($TRY_BASE64 && length($_[0]) > $TRY_BASE64 &&
  	  (defined &utf8::is_utf8 && !utf8::is_utf8($_[0])) &&
  	  eval { require MIME::Base64 })
        {
  	  $require{"MIME::Base64"}++;
  	  return "MIME::Base64::decode(\"" .
  	             MIME::Base64::encode($_[0],"") .
  		 "\")";
        }
        return "pack(\"H*\",\"" . unpack("H*", $_[0]) . "\")";
    }
  
    return $_;
  }
  
  my %esc = (
      "\a" => "\\a",
      "\b" => "\\b",
      "\t" => "\\t",
      "\n" => "\\n",
      "\f" => "\\f",
      "\r" => "\\r",
      "\e" => "\\e",
  );
  
  # put a string value in double quotes
  sub quote {
    local($_) = $_[0];
    # If there are many '"' we might want to use qq() instead
    s/([\\\"\@\$])/\\$1/g;
    return qq("$_") unless /[^\040-\176]/;  # fast exit
  
    s/([\a\b\t\n\f\r\e])/$esc{$1}/g;
  
    # no need for 3 digits in escape for these
    s/([\0-\037])(?!\d)/sprintf('\\%o',ord($1))/eg;
  
    s/([\0-\037\177-\377])/sprintf('\\x%02X',ord($1))/eg;
    s/([^\040-\176])/sprintf('\\x{%X}',ord($1))/eg;
  
    return qq("$_");
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Data::Dump - Pretty printing of data structures
  
  =head1 SYNOPSIS
  
   use Data::Dump qw(dump);
  
   $str = dump(@list);
   @copy_of_list = eval $str;
  
   # or use it for easy debug printout
   use Data::Dump; dd localtime;
  
  =head1 DESCRIPTION
  
  This module provide a few functions that traverse their
  argument and produces a string as its result.  The string contains
  Perl code that, when C<eval>ed, produces a deep copy of the original
  arguments.
  
  The main feature of the module is that it strives to produce output
  that is easy to read.  Example:
  
      @a = (1, [2, 3], {4 => 5});
      dump(@a);
  
  Produces:
  
      "(1, [2, 3], { 4 => 5 })"
  
  If you dump just a little data, it is output on a single line. If
  you dump data that is more complex or there is a lot of it, line breaks
  are automatically added to keep it easy to read.
  
  The following functions are provided (only the dd* functions are exported by default):
  
  =over
  
  =item dump( ... )
  
  =item pp( ... )
  
  Returns a string containing a Perl expression.  If you pass this
  string to Perl's built-in eval() function it should return a copy of
  the arguments you passed to dump().
  
  If you call the function with multiple arguments then the output will
  be wrapped in parenthesis "( ..., ... )".  If you call the function with a
  single argument the output will not have the wrapping.  If you call the function with
  a single scalar (non-reference) argument it will just return the
  scalar quoted if needed, but never break it into multiple lines.  If you
  pass multiple arguments or references to arrays of hashes then the
  return value might contain line breaks to format it for easier
  reading.  The returned string will never be "\n" terminated, even if
  contains multiple lines.  This allows code like this to place the
  semicolon in the expected place:
  
     print '$obj = ', dump($obj), ";\n";
  
  If dump() is called in void context, then the dump is printed on
  STDERR and then "\n" terminated.  You might find this useful for quick
  debug printouts, but the dd*() functions might be better alternatives
  for this.
  
  There is no difference between dump() and pp(), except that dump()
  shares its name with a not-so-useful perl builtin.  Because of this
  some might want to avoid using that name.
  
  =item quote( $string )
  
  Returns a quoted version of the provided string.
  
  It differs from C<dump($string)> in that it will quote even numbers and
  not try to come up with clever expressions that might shorten the
  output.  If a non-scalar argument is provided then it's just stringified
  instead of traversed.
  
  =item dd( ... )
  
  =item ddx( ... )
  
  These functions will call dump() on their argument and print the
  result to STDOUT (actually, it's the currently selected output handle, but
  STDOUT is the default for that).
  
  The difference between them is only that ddx() will prefix the lines
  it prints with "# " and mark the first line with the file and line
  number where it was called.  This is meant to be useful for debug
  printouts of state within programs.
  
  =item dumpf( ..., \&filter )
  
  Short hand for calling the dump_filtered() function of L<Data::Dump::Filtered>.
  This works like dump(), but the last argument should be a filter callback
  function.  As objects are visited the filter callback is invoked and it
  can modify how the objects are dumped.
  
  =back
  
  =head1 CONFIGURATION
  
  There are a few global variables that can be set to modify the output
  generated by the dump functions.  It's wise to localize the setting of
  these.
  
  =over
  
  =item $Data::Dump::INDENT
  
  This holds the string that's used for indenting multiline data structures.
  It's default value is "  " (two spaces).  Set it to "" to suppress indentation.
  Setting it to "| " makes for nice visuals even if the dump output then fails to
  be valid Perl.
  
  =item $Data::Dump::TRY_BASE64
  
  How long must a binary string be before we try to use the base64 encoding
  for the dump output.  The default is 50.  Set it to 0 to disable base64 dumps.
  
  =back
  
  
  =head1 LIMITATIONS
  
  Code references will be dumped as C<< sub { ... } >>. Thus, C<eval>ing them will
  not reproduce the original routine.  The C<...>-operator used will also require
  perl-5.12 or better to be evaled.
  
  If you forget to explicitly import the C<dump> function, your code will
  core dump. That's because you just called the builtin C<dump> function
  by accident, which intentionally dumps core.  Because of this you can
  also import the same function as C<pp>, mnemonic for "pretty-print".
  
  =head1 HISTORY
  
  The C<Data::Dump> module grew out of frustration with Sarathy's
  in-most-cases-excellent C<Data::Dumper>.  Basic ideas and some code
  are shared with Sarathy's module.
  
  The C<Data::Dump> module provides a much simpler interface than
  C<Data::Dumper>.  No OO interface is available and there are fewer
  configuration options to worry about.  The other benefit is
  that the dump produced does not try to set any variables.  It only
  returns what is needed to produce a copy of the arguments.  This means
  that C<dump("foo")> simply returns C<'"foo"'>, and C<dump(1..3)> simply
  returns C<'(1, 2, 3)'>.
  
  =head1 SEE ALSO
  
  L<Data::Dump::Filtered>, L<Data::Dump::Trace>, L<Data::Dumper>, L<JSON>,
  L<Storable>
  
  =head1 AUTHORS
  
  The C<Data::Dump> module is written by Gisle Aas <gisle@aas.no>, based
  on C<Data::Dumper> by Gurusamy Sarathy <gsar@umich.edu>.
  
   Copyright 1998-2010 Gisle Aas.
   Copyright 1996-1998 Gurusamy Sarathy.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =cut
DATA_DUMP

    $main::fatpacked{"Data/Dump/FilterContext.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_DUMP_FILTERCONTEXT';
  package Data::Dump::FilterContext;
  
  sub new {
      my($class, $obj, $oclass, $type, $ref, $pclass, $pidx, $idx) = @_;
      return bless {
  	object => $obj,
  	class => $ref && $oclass,
  	reftype => $type,
  	is_ref => $ref,
  	pclass => $pclass,
  	pidx => $pidx,
  	idx => $idx,
      }, $class;
  }
  
  sub object_ref {
      my $self = shift;
      return $self->{object};
  }
  
  sub class {
      my $self = shift;
      return $self->{class} || "";
  }
  
  *is_blessed = \&class;
  
  sub reftype {
      my $self = shift;
      return $self->{reftype};
  }
  
  sub is_scalar {
      my $self = shift;
      return $self->{reftype} eq "SCALAR";
  }
  
  sub is_array {
      my $self = shift;
      return $self->{reftype} eq "ARRAY";
  }
  
  sub is_hash {
      my $self = shift;
      return $self->{reftype} eq "HASH";
  }
  
  sub is_code {
      my $self = shift;
      return $self->{reftype} eq "CODE";
  }
  
  sub is_ref {
      my $self = shift;
      return $self->{is_ref};
  }
  
  sub container_class {
      my $self = shift;
      return $self->{pclass} || "";
  }
  
  sub container_self {
      my $self = shift;
      return "" unless $self->{pclass};
      my $idx = $self->{idx};
      my $pidx = $self->{pidx};
      return Data::Dump::fullname("self", [@$idx[$pidx..(@$idx - 1)]]);
  }
  
  sub expr {
      my $self = shift;
      my $top = shift || "var";
      $top =~ s/^\$//; # it's always added by fullname()
      my $idx = $self->{idx};
      return Data::Dump::fullname($top, $idx);
  }
  
  sub object_isa {
      my($self, $class) = @_;
      return $self->{class} && $self->{class}->isa($class);
  }
  
  sub container_isa {
      my($self, $class) = @_;
      return $self->{pclass} && $self->{pclass}->isa($class);
  }
  
  sub depth {
      my $self = shift;
      return scalar @{$self->{idx}};
  }
  
  1;
DATA_DUMP_FILTERCONTEXT

    $main::fatpacked{"Data/Dump/Filtered.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_DUMP_FILTERED';
  package Data::Dump::Filtered;
  
  use Data::Dump ();
  use Carp ();
  
  use base 'Exporter';
  our @EXPORT_OK = qw(add_dump_filter remove_dump_filter dump_filtered);
  
  sub add_dump_filter {
      my $filter = shift;
      unless (ref($filter) eq "CODE") {
  	Carp::croak("add_dump_filter argument must be a code reference");
      }
      push(@Data::Dump::FILTERS, $filter);
      return $filter;
  }
  
  sub remove_dump_filter {
      my $filter = shift;
      @Data::Dump::FILTERS = grep $_ ne $filter, @Data::Dump::FILTERS;
  }
  
  sub dump_filtered {
      my $filter = pop;
      if (defined($filter) && ref($filter) ne "CODE") {
  	Carp::croak("Last argument to dump_filtered must be undef or a code reference");
      }
      local @Data::Dump::FILTERS = ($filter ? $filter : ());
      return &Data::Dump::dump;
  }
  
  1;
  
  =head1 NAME
  
  Data::Dump::Filtered - Pretty printing with filtering
  
  =head1 DESCRIPTION
  
  The following functions are provided:
  
  =over
  
  =item add_dump_filter( \&filter )
  
  This registers a filter function to be used by the regular Data::Dump::dump()
  function.  By default no filters are active.
  
  Since registering filters has a global effect is might be more appropriate
  to use the dump_filtered() function instead.
  
  =item remove_dump_filter( \&filter )
  
  Unregister the given callback function as filter callback.
  This undoes the effect of L<add_filter>.
  
  =item dump_filtered(..., \&filter )
  
  Works like Data::Dump::dump(), but the last argument should
  be a filter callback function.  As objects are visited the
  filter callback is invoked at it might influence how objects are dumped.
  
  Any filters registered with L<add_filter()> are ignored when
  this interface is invoked.  Actually, passing C<undef> as \&filter
  is allowed and C<< dump_filtered(..., undef) >> is the official way to
  force unfiltered dumps.
  
  =back
  
  =head2 Filter callback
  
  A filter callback is a function that will be invoked with 2 arguments;
  a context object and reference to the object currently visited.  The return
  value should either be a hash reference or C<undef>.
  
      sub filter_callback {
          my($ctx, $object_ref) = @_;
  	...
  	return { ... }
      }
  
  If the filter callback returns C<undef> (or nothing) then normal
  processing and formatting of the visited object happens.
  If the filter callback returns a hash it might replace
  or annotate the representation of the current object.
  
  =head2 Filter context
  
  The context object provide methods that can be used to determine what kind of
  object is currently visited and where it's located.  The context object has the
  following interface:
  
  =over
  
  =item $ctx->object_ref
  
  Alternative way to obtain a reference to the current object
  
  =item $ctx->class
  
  If the object is blessed this return the class.  Returns ""
  for objects not blessed.
  
  =item $ctx->reftype
  
  Returns what kind of object this is.  It's a string like "SCALAR",
  "ARRAY", "HASH", "CODE",...
  
  =item $ctx->is_ref
  
  Returns true if a reference was provided.
  
  =item $ctx->is_blessed
  
  Returns true if the object is blessed.  Actually, this is just an alias
  for C<< $ctx->class >>.
  
  =item $ctx->is_array
  
  Returns true if the object is an array
  
  =item $ctx->is_hash
  
  Returns true if the object is a hash
  
  =item $ctx->is_scalar
  
  Returns true if the object is a scalar (a string or a number)
  
  =item $ctx->is_code
  
  Returns true if the object is a function (aka subroutine)
  
  =item $ctx->container_class
  
  Returns the class of the innermost container that contains this object.
  Returns "" if there is no blessed container.
  
  =item $ctx->container_self
  
  Returns an textual expression relative to the container object that names this
  object.  The variable C<$self> in this expression is the container itself.
  
  =item $ctx->object_isa( $class )
  
  Returns TRUE if the current object is of the given class or is of a subclass.
  
  =item $ctx->container_isa( $class )
  
  Returns TRUE if the innermost container is of the given class or is of a
  subclass.
  
  =item $ctx->depth
  
  Returns how many levels deep have we recursed into the structure (from the
  original dump_filtered() arguments).
  
  =item $ctx->expr
  
  =item $ctx->expr( $top_level_name )
  
  Returns an textual expression that denotes the current object.  In the
  expression C<$var> is used as the name of the top level object dumped.  This
  can be overridden by providing a different name as argument.
  
  =back
  
  =head2 Filter return hash
  
  The following elements has significance in the returned hash:
  
  =over
  
  =item dump => $string
  
  incorporate the given string as the representation for the
  current value
  
  =item object => $value
  
  dump the given value instead of the one visited and passed in as $object.
  Basically the same as specifying C<< dump => Data::Dump::dump($value) >>.
  
  =item comment => $comment
  
  prefix the value with the given comment string
  
  =item bless => $class
  
  make it look as if the current object is of the given $class
  instead of the class it really has (if any).  The internals of the object
  is dumped in the regular way.  The $class can be the empty string
  to make Data::Dump pretend the object wasn't blessed at all.
  
  =item hide_keys => ['key1', 'key2',...]
  
  =item hide_keys => \&code
  
  If the $object is a hash dump is as normal but pretend that the
  listed keys did not exist.  If the argument is a function then
  the function is called to determine if the given key should be
  hidden.
  
  =back
  
  =head1 SEE ALSO
  
  L<Data::Dump>
DATA_DUMP_FILTERED

    $main::fatpacked{"Data/Dump/OneLine.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_DUMP_ONELINE';
  package Data::Dump::OneLine;
  
  our $DATE = '2015-03-25'; # DATE
  our $VERSION = '0.07'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Data::Dmp;
  
  our @ISA = qw(Data::Dmp);
  our @EXPORT = (@Data::Dmp::EXPORT, 'dump1', 'dump_one_line');
  
  *dump1 = \&Data::Dmp::dmp;
  *dump_one_line = \&Data::Dmp::dmp;
  
  1;
  # ABSTRACT: Dump data structures as single-line strings
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Dump::OneLine - Dump data structures as single-line strings
  
  =head1 VERSION
  
  This document describes version 0.07 of Data::Dump::OneLine (from Perl distribution Data-Dump-OneLine), released on 2015-03-25.
  
  =head1 SYNOPSIS
  
   use Data::Dump::OneLine; # exports dd and dmp
   $str = dd(@list);
  
  =head1 DESCRIPTION
  
  It now uses L<Data::Dmp>. You should use Data::Dmp directly.
  
  =for Pod::Coverage ^(.+)$
  
  =head1 SEE ALSO
  
  L<JSON> should also encode to a single-line string, but some data structures
  (cyclical, contains globs or other special Perl data) cannot be encoded out of
  the box to JSON.
  
  L<Data::Dumper::OneLine> strives to do the same for L<Data::Dumper>, but last
  time I tried it (at v0.05) it's still buggy.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Dump-OneLine>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Dump-OneLine>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Dump-OneLine>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_DUMP_ONELINE

    $main::fatpacked{"Data/Dump/Partial.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_DUMP_PARTIAL';
  package Data::Dump::Partial;
  
  use 5.010001;
  use strict;
  use warnings;
  use experimental 'smartmatch';
  use Data::Dump::Filtered;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(dump_partial dumpp);
  
  our $VERSION = '0.05'; # VERSION
  
  sub _dmp { Data::Dump::Filtered::dump_filtered(@_, undef) }
  
  sub dump_partial {
      my @data = @_;
      die 'Usage: dump_partial(@data, \%opts)'
          if @data > 1 && ref($data[-1]) ne 'HASH';
      my $opts = (@data > 1) ? {%{pop(@data)}} : {};
  
      $opts->{max_keys}      //=  5;
      $opts->{max_elems}     //=  5;
      $opts->{max_len}       //= 32;
      $opts->{max_total_len} //= 80;
  
      $opts->{max_keys} = @{$opts->{precious_keys}} if $opts->{precious_keys} &&
          @{ $opts->{precious_keys} } > $opts->{max_keys};
  
      my $out;
  
      if ($opts->{_inner}) {
          #print "DEBUG: inner dump, data="._dmp(@data)."\n";
          $out = Data::Dump::dump(@data);
      } else {
          #print "DEBUG: outer dump, data="._dmp(@data)."\n";
          my $filter = sub {
              my ($ctx, $oref) = @_;
  
              # to avoid deep recursion (dump_partial keeps modifying the hash due
              # to pair_filter or mask_keys_regex)
              my $skip_modify_outermost_hash;
              if ($opts->{_skip_modify_outermost_hash}) {
                  #print "DEBUG: Will skip modify outermost hash\n";
                  $skip_modify_outermost_hash++;
                  $opts->{_skip_modify_outermost_hash}--;
              }
  
              if ($opts->{max_len} && $ctx->is_scalar && defined($$oref) &&
                      length($$oref) > $opts->{max_len}) {
  
                  #print "DEBUG: truncating scalar\n";
                  return { object => substr($$oref, 0, $opts->{max_len}-3)."..." };
  
              } elsif ($opts->{max_elems} && $ctx->is_array &&
                           @$oref > $opts->{max_elems}) {
  
                  #print "DEBUG: truncating array\n";
                  my @ary = @{$oref}[0..($opts->{max_elems}-1)];
                  local $opts->{_inner} = 1;
                  local $opts->{max_total_len} = 0;
                  my $out = dump_partial(\@ary, $opts);
                  $out =~ s/(?:, )?]$/, ...]/;
                  return { dump => $out };
  
              } elsif ($ctx->is_hash) {
  
                  my %hash;
                  my $modified;
  
                  if ($opts->{pair_filter} && !$skip_modify_outermost_hash) {
                      for (sort keys %$oref) {
                          my @res = $opts->{pair_filter}->($_, $oref->{$_});
                          $modified = "pair_filter" unless @res == 2 &&
                              $res[0] eq $_ && "$res[1]" eq "$oref->{$_}";
                          while (my ($k, $v) = splice @res, 0, 2) {
                              $hash{$k} = $v;
                          }
                      }
                  } else {
                      %hash = %$oref;
                  }
  
                  if ($opts->{mask_keys_regex} && !$skip_modify_outermost_hash) {
                      for (sort keys %hash) {
                          if (/$opts->{mask_keys_regex}/) {
                              $modified = "mask_keys_regex";
                              $hash{$_} = '***';
                          }
                      }
                  }
  
                  my $truncated;
                  if ($opts->{max_keys} && keys(%$oref) > $opts->{max_keys}) {
                      my $mk = $opts->{max_keys};
                      {
                          if ($opts->{hide_keys}) {
                              for (sort keys %hash) {
                                  delete $hash{$_} if $_ ~~ @{$opts->{hide_keys}};
                              }
                          }
                          last if keys(%hash) <= $mk;
                          if ($opts->{worthless_keys}) {
                              for (sort keys %hash) {
                                  last if keys(%hash) <= $mk;
                                  delete $hash{$_} if $_ ~~ @{$opts->{worthless_keys}};
                              }
                          }
                          last if keys(%hash) <= $mk;
                          for (reverse sort keys %hash) {
                              delete $hash{$_} if !$opts->{precious_keys} ||
                                  !($_ ~~ @{$opts->{precious_keys}});
                              last if keys(%hash) <= $mk;
                          }
                      }
                      $modified = "truncate";
                      $truncated++;
                  }
  
                  if ($modified) {
                      #print "DEBUG: modified hash ($modified)\n";
                      local $opts->{_inner} = 1;
                      local $opts->{_skip_modify_outermost_hash} = 1;
                      local $opts->{max_total_len} = 0;
                      my $out = dump_partial(\%hash, $opts);
                      $out =~ s/(?:, )? }$/, ... }/ if $truncated;
                      return { dump => $out };
                  }
              }
  
              if ($opts->{dd_filter}) {
                  return $opts->{dd_filter}->($ctx, $oref);
              } else {
                  return;
              }
          };
          $out = Data::Dump::Filtered::dump_filtered(@data, $filter);
      }
  
      for ($out) {
          s/^\s*#.*//mg; # comments
          s/^\s+//mg; # indents
          s/\n+/ /g; # newlines
      }
  
      if ($opts->{max_total_len} && length($out) > $opts->{max_total_len}) {
          $out = substr($out, 0, $opts->{max_total_len}-3) . "...";
      }
  
      print STDERR "$out\n" unless defined wantarray;
      $out;
  }
  
  sub dumpp { dump_partial(@_) }
  
  1;
  # ABSTRACT: Dump data structure compactly and potentially partially
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Dump::Partial - Dump data structure compactly and potentially partially
  
  =head1 VERSION
  
  version 0.05
  
  =head1 SYNOPSIS
  
   use Data::Dump::Partial qw(dump_partial dumpp);
  
   dump_partial([1, "some long string", 3, 4, 5, 6, 7]);
   # prints something like: [1, "some long st...", 3, 4, 5, ...]
  
   # specify options
   dumpp($data, $more_data, {max_total_len => 50, max_keys => 4});
  
   # mask passwords specified in hash key values
   dumpp({auth_info=>{user=>"steven", password=>"secret"}, foo=>1, bar=>2},
         {mask_keys_regex=>qr/\Apass\z|passw(or)?d/i});
   # prints something like:
   # {auth_info=>{user=>"steven", password=>"***"}, foo=>1, bar=>2}
  
  =head1 DESCRIPTION
  
  =head1 FUNCTIONS
  
  =head2 dump_partial(..., $opts)
  
  Dump one more data structures compactly and potentially partially. Uses
  L<Data::Dump::Filtered> as the backend.
  
  By compactly, it means all indents and comments and newlines are removed, so the
  output all fits in one line.
  
  By partially, it means only up to a certain amount of data are dumped/shown:
  string longer than a certain length will be truncated (with "..." appended in
  the end), array more than a certain number of elements will be truncated, and
  hash containing more than a certain number of pairs will be truncated. The total
  length of dump is also limited. When truncating hash you can specify which keys
  to discard/preserve first. You can also mask certain hash key values (for
  example, to avoid exposing passwords in dumps).
  
  $opts is a hashref, optional only when there is one data to dump, with the
  following known keys:
  
  =over 4
  
  =item * max_total_len => NUM
  
  Total length of output before it gets truncated with an ellipsis. Default is 80.
  
  =item * max_len => NUM
  
  Maximum length of a scalar (string, etc) to show before the rest get truncated
  with an ellipsis. Default is 32.
  
  =item * max_keys => NUM
  
  Number of key pairs of a hash to show before the rest get truncated with an
  ellipsis. Default is 5.
  
  =item * max_elems => NUM
  
  Number of elements of an array to show before the rest get truncated with an
  ellipsis. Default is 5.
  
  =item * precious_keys => [KEY, ...]
  
  Never truncate these keys (even if it results in max_keys limit being exceeded).
  
  =item * worthless_keys => [KEY, ...]
  
  When needing to truncate hash keys, search for these first.
  
  =item * hide_keys => [KEY, ...]
  
  Always truncate these hash keys, no matter what. This is actually also
  implemented by Data::Dump::Filtered.
  
  =item * mask_keys_regex => REGEX
  
  When encountering keys that match certain regex, mask the values with '***'.
  This can be useful if you want to mask passwords, e.g.: mask_keys_regex =>
  qr/\Apass\z|passw(or)?d/i. If you want more general masking, you can use
  pair_filter.
  
  =item * pair_filter => CODE
  
  CODE will be called for each hash key/value pair encountered in the data. It
  will be given ($key, $value) as argument and is expected to return a list of
  zero or more of keys and values. The example below implements something similar
  to what mask_keys_regex accomplishes:
  
   # mask each password character with '*'
   hash_pair_filter => sub {
       my ($k, $v) = @_;
       if ($k =~ /\Apass\z|passw(or)?d/i) {
           $v =~ s/./*/g;
       }
       ($k, $v);
   }
  
  =item * dd_filter => \&sub
  
  If you have other Data::Dump::Filtered filter you want to execute, you can pass
  it here.
  
  =back
  
  =head2 dumpp
  
  An alias for dump_filtered().
  
  =head1 FAQ
  
  =head2 What is the point/purpose of this module?
  
  Sometimes you want to dump a data structure, but need it to be short, more than
  need it to be complete, for example when logging to log files or database.
  
  =head2 Is the dump result eval()-able? Will the dump result eval() to produce the original data?
  
  Sometimes it is/will, sometimes it does/will not if it gets truncated.
  
  =head1 SEE ALSO
  
  L<Data::Dump::Filtered>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Dump-Partial>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Data-Dump-Partial>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Dump-Partial>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  Steven Haryanto <stevenharyanto@gmail.com>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by Steven Haryanto.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_DUMP_PARTIAL

    $main::fatpacked{"Data/Dump/Trace.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_DUMP_TRACE';
  package Data::Dump::Trace;
  
  $VERSION = "0.02";
  
  # Todo:
  #   - prototypes
  #     in/out parameters key/value style
  #   - exception
  #   - wrap class
  #   - configurable colors
  #   - show call depth using indentation
  #   - show nested calls sensibly
  #   - time calls
  
  use strict;
  
  use base 'Exporter';
  our @EXPORT_OK = qw(call mcall wrap autowrap trace);
  
  use Carp qw(croak);
  use overload ();
  
  my %obj_name;
  my %autowrap_class;
  my %name_count;
  
  sub autowrap {
      while (@_) {
          my $class = shift;
          my $info = shift;
          $info = { prefix => $info } unless ref($info);
          for ($info->{prefix}) {
              unless ($_) {
                  $_ = lc($class);
                  s/.*:://;
              }
              $_ = '$' . $_ unless /^\$/;
          }
          $autowrap_class{$class} = $info;
      }
  }
  
  sub wrap {
      my %arg = @_;
      my $name = $arg{name} || "func";
      my $func = $arg{func};
      my $proto = $arg{proto};
  
      return sub {
          call($name, $func, $proto, @_);
      } if $func;
  
      if (my $obj = $arg{obj}) {
          $name = '$' . $name unless $name =~ /^\$/;
          $obj_name{overload::StrVal($obj)} = $name;
          return bless {
              name => $name,
              obj => $obj,
              proto => $arg{proto},
          }, "Data::Dump::Trace::Wrapper";
      }
  
      croak("Either the 'func' or 'obj' option must be given");
  }
  
  sub trace {
      my($symbol, $prototype) = @_;
      no strict 'refs';
      no warnings 'redefine';
      *{$symbol} = wrap(name => $symbol, func => \&{$symbol}, proto => $prototype);
  }
  
  sub call {
      my $name = shift;
      my $func = shift;
      my $proto = shift;
      my $fmt = Data::Dump::Trace::Call->new($name, $proto, \@_);
      if (!defined wantarray) {
          $func->(@_);
          return $fmt->return_void(\@_);
      }
      elsif (wantarray) {
          return $fmt->return_list(\@_, $func->(@_));
      }
      else {
          return $fmt->return_scalar(\@_, scalar $func->(@_));
      }
  }
  
  sub mcall {
      my $o = shift;
      my $method = shift;
      my $proto = shift;
      return if $method eq "DESTROY" && !$o->can("DESTROY");
      my $oname = ref($o) ? $obj_name{overload::StrVal($o)} || "\$o" : $o;
      my $fmt = Data::Dump::Trace::Call->new("$oname->$method", $proto, \@_);
      if (!defined wantarray) {
          $o->$method(@_);
          return $fmt->return_void(\@_);
      }
      elsif (wantarray) {
          return $fmt->return_list(\@_, $o->$method(@_));
      }
      else {
          return $fmt->return_scalar(\@_, scalar $o->$method(@_));
      }
  }
  
  package Data::Dump::Trace::Wrapper;
  
  sub AUTOLOAD {
      my $self = shift;
      our $AUTOLOAD;
      my $method = substr($AUTOLOAD, rindex($AUTOLOAD, '::')+2);
      Data::Dump::Trace::mcall($self->{obj}, $method, $self->{proto}{$method}, @_);
  }
  
  package Data::Dump::Trace::Call;
  
  use Term::ANSIColor ();
  use Data::Dump ();
  
  *_dump = \&Data::Dump::dump;
  
  our %COLOR = (
      name => "yellow",
      output => "cyan",
      error => "red",
      debug => "red",
  );
  
  %COLOR = () unless -t STDOUT;
  
  sub _dumpav {
      return "(" . _dump(@_) . ")" if @_ == 1;
      return _dump(@_);
  }
  
  sub _dumpkv {
      return _dumpav(@_) if @_ % 2;
      my %h = @_;
      my $str = _dump(\%h);
      $str =~ s/^\{/(/ && $str =~ s/\}\z/)/;
      return $str;
  }
  
  sub new {
      my($class, $name, $proto, $input_args) = @_;
      my $self = bless {
          name => $name,
          proto => $proto,
      }, $class;
      my $proto_arg = $self->proto_arg;
      if ($proto_arg =~ /o/) {
          for (@$input_args) {
              push(@{$self->{input_av}}, _dump($_));
          }
      }
      else {
          $self->{input} = $proto_arg eq "%" ? _dumpkv(@$input_args) : _dumpav(@$input_args);
      }
      return $self;
  }
  
  sub proto_arg {
      my $self = shift;
      my($arg, $ret) = split(/\s*=\s*/, $self->{proto} || "");
      $arg ||= '@';
      return $arg;
  }
  
  sub proto_ret {
      my $self = shift;
      my($arg, $ret) = split(/\s*=\s*/, $self->{proto} || "");
      $ret ||= '@';
      return $ret;
  }
  
  sub color {
      my($self, $category, $text) = @_;
      return $text unless $COLOR{$category};
      return Term::ANSIColor::colored($text, $COLOR{$category});
  }
  
  sub print_call {
      my $self = shift;
      my $outarg = shift;
      print $self->color("name", "$self->{name}");
      if (my $input = $self->{input}) {
          $input = "" if $input eq "()" && $self->{name} =~ /->/;
          print $self->color("input", $input);
      }
      else {
          my $proto_arg = $self->proto_arg;
          print "(";
          my $i = 0;
          for (@{$self->{input_av}}) {
              print ", " if $i;
              my $proto = substr($proto_arg, 0, 1, "");
              if ($proto ne "o") {
                  print $self->color("input", $_);
              }
              if ($proto eq "o" || $proto eq "O") {
                  print " = " if $proto eq "O";
                  print $self->color("output", _dump($outarg->[$i]));
              }
          }
          continue {
              $i++;
          }
          print ")";
      }
  }
  
  sub return_void {
      my $self = shift;
      my $arg = shift;
      $self->print_call($arg);
      print "\n";
      return;
  }
  
  sub return_scalar {
      my $self = shift;
      my $arg = shift;
      $self->print_call($arg);
      my $s = shift;
      my $name;
      my $proto_ret = $self->proto_ret;
      my $wrap = $autowrap_class{ref($s)};
      if ($proto_ret =~ /^\$\w+\z/ && ref($s) && ref($s) !~ /^(?:ARRAY|HASH|CODE|GLOB)\z/) {
          $name = $proto_ret;
      }
      else {
          $name = $wrap->{prefix} if $wrap;
      }
      if ($name) {
          $name .= $name_count{$name} if $name_count{$name}++;
          print " = ", $self->color("output", $name), "\n";
          $s = Data::Dump::Trace::wrap(name => $name, obj => $s, proto => $wrap->{proto});
      }
      else {
          print " = ", $self->color("output", _dump($s));
          if (!$s && $proto_ret =~ /!/ && $!) {
              print " ", $self->color("error", errno($!));
          }
          print "\n";
      }
      return $s;
  }
  
  sub return_list {
      my $self = shift;
      my $arg = shift;
      $self->print_call($arg);
      print " = ", $self->color("output", $self->proto_ret eq "%" ? _dumpkv(@_) : _dumpav(@_)), "\n";
      return @_;
  }
  
  sub errno {
      my $t = "";
      for (keys %!) {
          if ($!{$_}) {
              $t = $_;
              last;
          }
      }
      my $n = int($!);
      return "$t($n) $!";
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Data::Dump::Trace - Helpers to trace function and method calls
  
  =head1 SYNOPSIS
  
    use Data::Dump::Trace qw(autowrap mcall);
  
    autowrap("LWP::UserAgent" => "ua", "HTTP::Response" => "res");
  
    use LWP::UserAgent;
    $ua = mcall(LWP::UserAgent => "new");      # instead of LWP::UserAgent->new;
    $ua->get("http://www.example.com")->dump;
  
  =head1 DESCRIPTION
  
  The following functions are provided:
  
  =over
  
  =item autowrap( $class )
  
  =item autowrap( $class => $prefix )
  
  =item autowrap( $class1 => $prefix1,  $class2 => $prefix2, ... )
  
  =item autowrap( $class1 => \%info1, $class2 => \%info2, ... )
  
  Register classes whose objects are automatically wrapped when
  returned by one of the call functions below.  If $prefix is provided
  it will be used as to name the objects.
  
  Alternative is to pass an %info hash for each class.  The recognized keys are:
  
  =over
  
  =item prefix => $string
  
  The prefix string used to name objects of this type.
  
  =item proto => \%hash
  
  A hash of prototypes to use for the methods when an object is wrapped.
  
  =back
  
  =item wrap( name => $str, func => \&func, proto => $proto )
  
  =item wrap( name => $str, obj => $obj, proto => \%hash )
  
  Returns a wrapped function or object.  When a wrapped function is
  invoked then a trace is printed after the underlying function has returned.
  When a method on a wrapped object is invoked then a trace is printed
  after the methods on the underlying objects has returned.
  
  See L</"Prototypes"> for description of the C<proto> argument.
  
  =item call( $name, \&func, $proto, @ARGS )
  
  Calls the given function with the given arguments.  The trace will use
  $name as the name of the function.
  
  See L</"Prototypes"> for description of the $proto argument.
  
  =item mcall( $class, $method, $proto, @ARGS )
  
  =item mcall( $object, $method, $proto, @ARGS )
  
  Calls the given method with the given arguments.
  
  See L</"Prototypes"> for description of the $proto argument.
  
  =item trace( $symbol, $prototype )
  
  Replaces the function given by $symbol with a wrapped function.
  
  =back
  
  =head2 Prototypes
  
  B<Note: The prototype string syntax described here is experimental and
  likely to change in revisions of this interface>.
  
  The $proto argument to call() and mcall() can optionally provide a
  prototype for the function call.  This give the tracer hints about how
  to best format the argument lists and if there are I<in/out> or I<out>
  arguments.  The general form for the prototype string is:
  
     <arguments> = <return_value>
  
  The default prototype is "@ = @"; list of values as input and list of
  values as output.
  
  The value '%' can be used for both arguments and return value to say
  that key/value pair style lists are used.
  
  Alternatively, individual positional arguments can be listed each
  represented by a letter:
  
  =over
  
  =item C<i>
  
  input argument
  
  =item C<o>
  
  output argument
  
  =item C<O>
  
  both input and output argument
  
  =back
  
  If the return value prototype has C<!> appended, then it signals that
  this function sets errno ($!) when it returns a false value.  The
  trace will display the current value of errno in that case.
  
  If the return value prototype looks like a variable name (with C<$>
  prefix), and the function returns a blessed object, then the variable
  name will be used as prefix and the returned object automatically
  traced.
  
  =head1 SEE ALSO
  
  L<Data::Dump>
  
  =head1 AUTHOR
  
  Copyright 2009 Gisle Aas.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =cut
DATA_DUMP_TRACE

    $main::fatpacked{"Data/Format/Pretty.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_FORMAT_PRETTY';
  package Data::Format::Pretty;
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Module::Load;
  use Module::Loaded;
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT    = qw(ppr);
  our @EXPORT_OK = qw(format_pretty print_pretty ppr);
  
  our $VERSION = '0.04'; # VERSION
  
  sub format_pretty {
      my ($data, $opts0) = @_;
  
      my %opts = $opts0 ? %$opts0 : ();
      my $module = $opts{module};
      if (!$module) {
          if ($ENV{GATEWAY_INTERFACE} || $ENV{PLACK_ENV}) {
              $module = 'HTML';
          } else {
              $module = 'Console';
          }
      }
      delete $opts{module};
  
      my $module_full = "Data::Format::Pretty::" . $module;
      load $module_full unless is_loaded $module_full;
      my $sub = \&{$module_full . "::format_pretty"};
  
      $sub->($data, \%opts);
  }
  
  sub print_pretty {
      print format_pretty(@_);
  }
  
  *ppr = \&print_pretty;
  
  1;
  # ABSTRACT: Pretty-print data structure
  
  
  =pod
  
  =head1 NAME
  
  Data::Format::Pretty - Pretty-print data structure
  
  =head1 VERSION
  
  version 0.04
  
  =head1 SYNOPSIS
  
  In your program:
  
   use Data::Format::Pretty qw(format_pretty print_pretty);
  
   # automatically choose an appropriate formatter
   print format_pretty($data);
  
   # explicitly select a formatter
   print format_pretty($data, {module=>'JSON'});
  
   # specify formatter option(s)
   print format_pretty($data, {module=>'Console', interactive=>1});
  
   # shortcut for printing to output
   print_pretty($data);
  
  
   # ppr() is alias for print_pretty(), exported automatically. suitable for when
   # debugging.
   use Data::Format::Pretty;
   ppr [1, 2, 3];
  
  =head1 DESCRIPTION
  
  Data::Format::Pretty is an extremely simple framework for pretty-printing data
  structure. Its focus is on "prettiness" and automatic detection of appropriate
  format to use.
  
  To develop a formatter, look at one of the formatter modules (like
  L<Data::Format::Pretty::JSON>) for example. You only need to specify one
  function, C<format_pretty>.
  
  =head1 FUNCTIONS
  
  =head2 format_pretty($data, \%opts) => STR
  
  Send $data to formatter module (one of Data::Format::Pretty::* modules) and
  return the result. Options:
  
  =over 4
  
  =item * module => STR
  
  Select the formatter module. It will be prefixed with "Data::Format::Pretty::".
  
  Currently if unspecified the default is 'Console', or 'HTML' if CGI/PSGI/plackup
  environment is detected. In the future, more sophisticated detection logic will
  be used.
  
  =back
  
  The rest of the options will be passed to the formatter module.
  
  =head2 print_pretty($data, \%opts)
  
  Just call format_pretty() and print() it.
  
  =head2 ppr($data, \%opts) [EXPORTED BY DEFAULT]
  
  Alias for print_pretty().
  
  =head1 SEE ALSO
  
  One of Data::Format::Pretty::* formatter, like L<Data::Format::Pretty::Console>,
  L<Data::Format::Pretty::HTML>, L<Data::Format::Pretty::JSON>,
  L<Data::Format::Pretty::YAML>.
  
  Alternative data formatting framework/module family: L<Any::Renderer>.
  
  =head1 AUTHOR
  
  Steven Haryanto <stevenharyanto@gmail.com>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2013 by Steven Haryanto.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
  
  
  __END__
  
DATA_FORMAT_PRETTY

    $main::fatpacked{"Data/Format/Pretty/CompactJSON.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_FORMAT_PRETTY_COMPACTJSON';
  package Data::Format::Pretty::CompactJSON;
  
  use 5.010;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(format_pretty);
  
  our $VERSION = '0.12'; # VERSION
  
  sub content_type { "application/json" }
  
  sub format_pretty {
      my ($data, $opts) = @_;
      state $json;
  
      $opts //= {};
  
      if ($opts->{color} // $ENV{COLOR} // (-t STDOUT)) {
          require JSON::Color;
          JSON::Color::encode_json($data, {pretty=>0, linum=>0});
      } else {
          if (!$json) {
              require JSON::MaybeXS;
              $json = JSON::MaybeXS->new->utf8->allow_nonref;
          }
          $json->encode($data);
      }
  }
  
  1;
  # ABSTRACT: Pretty-print data structure as compact JSON
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Format::Pretty::CompactJSON - Pretty-print data structure as compact JSON
  
  =head1 VERSION
  
  This document describes version 0.12 of Data::Format::Pretty::CompactJSON (from Perl distribution Data-Format-Pretty-JSON), released on 2016-03-11.
  
  =head1 SYNOPSIS
  
   use Data::Format::Pretty::CompactJSON qw(format_pretty);
   print format_pretty($data);
  
  Some example output:
  
  =over 4
  
  =item * format_pretty({a=>1, b=>2});
  
   {"a":1,"b":2}
  
  =back
  
  =head1 DESCRIPTION
  
  Like L<Data::Format::Pretty::JSON>, but will always print with JSON option C<<
  pretty => 0 >> (minimal indentation).
  
  =head1 FUNCTIONS
  
  =head2 format_pretty($data, \%opts)
  
  Return formatted data structure as JSON. Options:
  
  =over 4
  
  =item * color => BOOL
  
  Whether to enable coloring. The default is the enable only when running
  interactively.
  
  =back
  
  =head2 content_type() => STR
  
  Return C<application/json>.
  
  =head1 ENVIRONMENT
  
  =head2 COLOR => BOOL
  
  Set C<color> option (if unset).
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Format-Pretty-JSON>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Format-Pretty-JSON>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Format-Pretty-JSON>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Data::Format::Pretty::JSON>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_FORMAT_PRETTY_COMPACTJSON

    $main::fatpacked{"Data/Format/Pretty/Console.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_FORMAT_PRETTY_CONSOLE';
  package Data::Format::Pretty::Console;
  
  our $DATE = '2016-03-13'; # DATE
  our $VERSION = '0.37'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  use experimental 'smartmatch';
  use Log::Any::IfLOG '$log';
  
  use Scalar::Util qw(blessed);
  use Text::ANSITable;
  use YAML::Any;
  use JSON::MaybeXS;
  
  my $json = JSON::MaybeXS->new->allow_nonref;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(format_pretty);
  
  sub content_type { "text/plain" }
  
  sub format_pretty {
      my ($data, $opts) = @_;
      $opts //= {};
      __PACKAGE__->new($opts)->_format($data);
  }
  
  # OO interface is nto documented, we use it just to subclass
  # Data::Format::Pretty::HTML
  sub new {
      my ($class, $opts) = @_;
      $opts //= {};
      $opts->{interactive} //= $ENV{INTERACTIVE} // (-t STDOUT);
      $opts->{table_column_orders} //= $json->decode(
          $ENV{FORMAT_PRETTY_TABLE_COLUMN_ORDERS})
          if defined($ENV{FORMAT_PRETTY_TABLE_COLUMN_ORDERS});
      $opts->{table_column_formats} //= $json->decode(
          $ENV{FORMAT_PRETTY_TABLE_COLUMN_FORMATS})
          if defined($ENV{FORMAT_PRETTY_TABLE_COLUMN_FORMATS});
      $opts->{table_column_types} //= $json->decode(
          $ENV{FORMAT_PRETTY_TABLE_COLUMN_TYPES})
          if defined($ENV{FORMAT_PRETTY_TABLE_COLUMN_TYPES});
      $opts->{list_max_columns} //= $ENV{FORMAT_PRETTY_LIST_MAX_COLUMNS};
      bless {opts=>$opts}, $class;
  }
  
  sub _is_cell_or_format_cell {
      my ($self, $data, $is_format) = @_;
  
      # XXX currently hardcoded limits
      my $maxlen = 1000;
  
      if (!ref($data) || blessed($data)) {
          if (!defined($data)) {
              return "" if $is_format;
              return 1;
          }
          if (length($data) > $maxlen) {
              return;
          }
          return "$data" if $is_format;
          return 1;
      } elsif (ref($data) eq 'ARRAY') {
          if (grep {ref($_) && !blessed($_)} @$data) {
              return;
          }
          my $s = join(", ", map {defined($_) ? "$_":""} @$data);
          if (length($s) > $maxlen) {
              return;
          }
          return $s if $is_format;
          return 1;
      } else {
          return;
      }
  }
  
  # return a string when data can be represented as a cell, otherwise undef. what
  # can be put in a table cell? a string (or stringified object) or array of
  # strings (stringified objects) that is quite "short".
  sub _format_cell { _is_cell_or_format_cell(@_, 1) }
  
  sub _is_cell     { _is_cell_or_format_cell(@_, 0) }
  
  sub _detect_struct {
      my ($self, $data) = @_;
      my $struct;
      my $struct_meta = {};
  
      # XXX perhaps, use Data::Schema later?
    CHECK_FORMAT:
      {
        CHECK_SCALAR:
          {
              if (!ref($data) || blessed($data)) {
                  $struct = "scalar";
                  last CHECK_FORMAT;
              }
          }
  
        CHECK_AOA:
          {
              if (ref($data) eq 'ARRAY') {
                  my $numcols;
                  for my $row (@$data) {
                      last CHECK_AOA unless ref($row) eq 'ARRAY';
                      last CHECK_AOA if defined($numcols) && $numcols != @$row;
                      last CHECK_AOA if grep { !$self->_is_cell($_) } @$row;
                      $numcols = @$row;
                  }
                  $struct = "aoa";
                  last CHECK_FORMAT;
              }
          }
  
        CHECK_AOH:
          {
              if (ref($data) eq 'ARRAY') {
                  $struct_meta->{columns} = {};
                  for my $row (@$data) {
                      last CHECK_AOH unless ref($row) eq 'HASH';
                      for my $k (keys %$row) {
                          last CHECK_AOH if !$self->_is_cell($row->{$k});
                          $struct_meta->{columns}{$k} = 1;
                      }
                  }
                  $struct = "aoh";
                  last CHECK_FORMAT;
              }
          }
  
          # list of scalars/cells
        CHECK_LIST:
          {
              if (ref($data) eq 'ARRAY') {
                  for (@$data) {
                      last CHECK_LIST unless $self->_is_cell($_);
                  }
                  $struct = "list";
                  last CHECK_FORMAT;
              }
          }
  
          # hash which contains at least one "table" (list/aoa/aoh)
        CHECK_HOT:
          {
              last CHECK_HOT if $self->{opts}{skip_hot};
              last CHECK_HOT unless ref($data) eq 'HASH';
              my $has_t;
              while (my ($k, $v) = each %$data) {
                  my ($s2, $sm2) = $self->_detect_struct($v, {skip_hot=>1});
                  last CHECK_HOT unless $s2;
                  $has_t = 1 if $s2 =~ /^(?:list|aoa|aoh|hash)$/;
              }
              last CHECK_HOT unless $has_t;
              $struct = "hot";
              last CHECK_FORMAT;
          }
  
          # hash of scalars/cells
        CHECK_HASH:
          {
              if (ref($data) eq 'HASH') {
                  for (values %$data) {
                      last CHECK_HASH unless $self->_is_cell($_);
                  }
                  $struct = "hash";
                  last CHECK_FORMAT;
              }
          }
  
      }
  
      ($struct, $struct_meta);
  }
  
  # t (table) is a structure like this: {cols=>["colName1", "colName2", ...]},
  # rows=>[ [row1.1, row1.2, ...], [row2.1, row2.2, ...], ... ], at_opts=>{...},
  # col_widths=>{colName1=>5, ...}}. the job of this routine is to render it
  # (currently uses Text::ANSITable).
  sub _render_table {
      my ($self, $t) = @_;
  
      my $colfmts;
      my $tcff = $self->{opts}{table_column_formats};
      if ($tcff) {
          for my $tcf (@$tcff) {
              my $match = 1;
              my @tcols = @{ $t->{cols} };
              for my $scol (keys %$tcf) {
                  do { $match = 0; last } unless $scol ~~ @tcols;
              }
              if ($match) {
                  $colfmts = $tcf;
                  last;
              }
          }
      }
  
      my $coltypes;
      my $tctt = $self->{opts}{table_column_types};
      if ($tctt) {
          for my $tct (@$tctt) {
              my $match = 1;
              my @tcols = @{ $t->{cols} };
              for my $scol (keys %$tct) {
                  do { $match = 0; last } unless $scol ~~ @tcols;
              }
              if ($match) {
                  $coltypes = $tct;
                  last;
              }
          }
      }
  
      # render using Text::ANSITable
      my $at = Text::ANSITable->new;
      $at->columns($t->{cols});
      $at->rows($t->{rows});
      if ($t->{at_opts}) {
          $at->{$_} = $t->{at_opts}{$_} for keys %{ $t->{at_opts} };
      }
      if ($colfmts) {
          $at->set_column_style($_ => formats => $colfmts->{$_})
              for keys %$colfmts;
      }
      if ($coltypes) {
          $at->set_column_style($_ => type => $coltypes->{$_})
              for keys %$coltypes;
      }
      if ($t->{col_widths}) {
          $at->set_column_style($_ => width => $t->{col_widths}{$_})
              for keys %{ $t->{col_widths} };
      }
      $at->draw;
  }
  
  # format unknown structure, the default is to dump YAML structure
  sub _format_unknown {
      my ($self, $data) = @_;
      Dump($data);
  }
  
  sub _format_scalar {
      my ($self, $data) = @_;
  
      my $sdata = defined($data) ? "$data" : "";
      return "" if !length($sdata);
      return $sdata =~ /\n\z/s ? $sdata : "$sdata\n";
  }
  
  sub _format_list {
      my ($self, $data) = @_;
      if ($self->{opts}{interactive}) {
  
          require List::Util;
          require POSIX;
  
          # format list as as columns (a la 'ls' output)
  
          my @rows = map { $self->_format_cell($_) } @$data;
  
          my $maxwidth = List::Util::max(map { length } @rows) // 0;
          my ($termcols, $termrows);
          if ($ENV{COLUMNS}) {
              $termcols = $ENV{COLUMNS};
          } elsif (eval { require Term::Size; 1 }) {
              ($termcols, $termrows) = Term::Size::chars();
          } else {
              # sane default, on windows we need to offset by 1 because printing
              # at the rightmost column will cause cursor to move down one line.
              $termcols = $^O =~ /Win/ ? 79 : 80;
          }
          my $numcols = 1;
          if ($maxwidth) {
              # | some-text-some | some-text-some... |
              # 2/\__maxwidth__/\3/\__maxwidth__/...\2
              #
              # table width = (2+maxwidth) + (3+maxwidth)*(numcols-1) + 2
              #
              # so with a bit of algrebra, solve for numcols:
              $numcols = int( (($termcols-1)-$maxwidth-6)/(3+$maxwidth) + 1 );
              $numcols = @rows if $numcols > @rows;
              $numcols = 1 if $numcols < 1;
          }
          $numcols = $self->{opts}{list_max_columns}
              if defined($self->{opts}{list_max_columns}) &&
                  $numcols > $self->{opts}{list_max_columns};
          my $numrows = POSIX::ceil(@rows/$numcols);
          if ($numrows) {
              # reduce number of columns to avoid empty columns
              $numcols = POSIX::ceil(@rows/$numrows);
          }
          #say "D: $numcols x $numrows";
  
          my $t = {rows=>[], at_opts=>{show_header=>0}};
          $t->{cols} = [map { "c$_" } 1..$numcols];
          if ($numcols > 1) {
              $t->{col_widths}{"c$_"} = $maxwidth for 1..$numcols;
          }
          for my $r (1..$numrows) {
              my @trow;
              for my $c (1..$numcols) {
                  my $idx = ($c-1)*$numrows + ($r-1);
                  push @trow, $idx < @rows ? $rows[$idx] : '';
              }
              push @{$t->{rows}}, \@trow;
          }
  
          return $self->_render_table($t);
  
      } else {
          my @rows;
          for my $row (@$data) {
              push @rows, ($row // "") . "\n";
          }
          return join("", @rows);
      }
  }
  
  sub _format_hash {
      my ($self, $data) = @_;
      # format hash as two-column table
      if ($self->{opts}{interactive}) {
          my $t = {cols=>[qw/key value/], rows=>[],
                   at_opts=>{}};
          for my $k (sort keys %$data) {
              push @{ $t->{rows} }, [$k, $self->_format_cell($data->{$k})];
          }
          return $self->_render_table($t);
      } else {
          my @t;
          for my $k (sort keys %$data) {
              push @t, $k, "\t", ($data->{$k} // ""), "\n";
          }
          return join("", @t);
      }
  }
  
  sub _format_aoa {
      my ($self, $data) = @_;
      # show aoa as table
      if ($self->{opts}{interactive}) {
          if (@$data) {
              my $t = {rows=>[], at_opts=>{}};
              $t->{cols} = [map { "column$_" } 0..@{ $data->[0] }-1];
              for my $i (0..@$data-1) {
                  push @{ $t->{rows} },
                      [map {$self->_format_cell($_)} @{ $data->[$i] }];
              }
              return $self->_render_table($t);
          } else {
              return "";
          }
      } else {
          # tab-separated
          my @t;
          for my $row (@$data) {
              push @t, join("\t", map { $self->_format_cell($_) } @$row) .
                  "\n";
          }
          return join("", @t);
      }
  }
  
  sub _format_aoh {
      my ($self, $data, $struct_meta) = @_;
      # show aoh as table
      my @cols = @{ $self->_order_table_columns(
          [keys %{$struct_meta->{columns}}]) };
      if ($self->{opts}{interactive}) {
          my $t = {cols=>\@cols, rows=>[]};
          for my $i (0..@$data-1) {
              my $row = $data->[$i];
              push @{ $t->{rows} }, [map {$self->_format_cell($row->{$_})} @cols];
          }
          return $self->_render_table($t);
      } else {
          # tab-separated
          my @t;
          for my $row (@$data) {
              my @row = map {$self->_format_cell($row->{$_})} @cols;
              push @t, join("\t", @row) . "\n";
          }
          return join("", @t);
      }
  }
  
  sub _format_hot {
      my ($self, $data) = @_;
      # show hot as paragraphs:
      #
      # key:
      # value (table)
      #
      # key2:
      # value ...
      my @t;
      for my $k (sort keys %$data) {
          push @t, "$k:\n", $self->_format($data->{$k}), "\n";
      }
      return join("", @t);
  }
  
  sub _format {
      my ($self, $data) = @_;
  
      my ($struct, $struct_meta) = $self->_detect_struct($data);
  
      if (!$struct) {
          return $self->_format_unknown($data, $struct_meta);
      } elsif ($struct eq 'scalar') {
          return $self->_format_scalar($data, $struct_meta);
      } elsif ($struct eq 'list') {
          return $self->_format_list($data, $struct_meta);
      } elsif ($struct eq 'hash') {
          return $self->_format_hash($data, $struct_meta);
      } elsif ($struct eq 'aoa') {
          return $self->_format_aoa($data, $struct_meta);
      } elsif ($struct eq 'aoh') {
          return $self->_format_aoh($data, $struct_meta);
      } elsif ($struct eq 'hot') {
          return $self->_format_hot($data, $struct_meta);
      } else {
          die "BUG: Unknown format `$struct`";
      }
  }
  
  sub _order_table_columns {
      #$log->tracef('=> _order_table_columns(%s)', \@_);
      my ($self, $cols) = @_;
  
      my $found; # whether we found an ordering in table_column_orders
      my $tco = $self->{opts}{table_column_orders};
      my %orders; # colname => idx
      if ($tco) {
          die "table_column_orders should be an arrayref"
              unless ref($tco) eq 'ARRAY';
        CO:
          for my $co (@$tco) {
              die "table_column_orders elements must all be arrayrefs"
                  unless ref($co) eq 'ARRAY';
              for (@$co) {
                  next CO unless $_ ~~ @$cols;
              }
  
              $found++;
              for (my $i=0; $i<@$co; $i++) {
                  $orders{$co->[$i]} = $i;
              }
              $found++;
              last CO;
          }
      }
  
      my @ocols;
      if ($found) {
          @ocols = sort {
              (defined($orders{$a}) && defined($orders{$b}) ?
                   $orders{$a} <=> $orders{$b} : 0)
                  || $a cmp $b
          } (sort @$cols);
      } else {
          @ocols = sort @$cols;
      }
  
      \@ocols;
  }
  
  1;
  # ABSTRACT: Pretty-print data structure for console output
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Format::Pretty::Console - Pretty-print data structure for console output
  
  =head1 VERSION
  
  This document describes version 0.37 of Data::Format::Pretty::Console (from Perl distribution Data-Format-Pretty-Console), released on 2016-03-13.
  
  =head1 SYNOPSIS
  
  In your program:
  
   use Data::Format::Pretty::Console qw(format_pretty);
   ...
   print format_pretty($result);
  
  Some example output:
  
  Scalar, format_pretty("foo"):
  
   foo
  
  List, format_pretty([1..21]):
  
   .------------------------------------------------------.
   |  1 |  3 |  5 |  7 |  9 | 11 | 13 | 15 | 17 | 19 | 21 |
   |  2 |  4 |  6 |  8 | 10 | 12 | 14 | 16 | 18 | 20 |    |
   '----+----+----+----+----+----+----+----+----+----+----'
  
  The same list, when program output is being piped (that is, (-t STDOUT) is
  false):
  
   1
   2
   3
   4
   5
   6
   7
   8
   9
   10
   11
   12
   14
   15
   16
   17
   18
   19
   20
   21
  
  Hash, format_pretty({foo=>"data",bar=>"format",baz=>"pretty",qux=>"console"}):
  
   +-----+---------+
   | bar | format  |
   | baz | pretty  |
   | foo | data    |
   | qux | console |
   '-----+---------'
  
  2-dimensional array, format_pretty([ [1, 2, ""], [28, "bar", 3], ["foo", 3,
  undef] ]):
  
   +---------+---------+---------+
   |       1 |       2 |         |
   |      28 | bar     |       3 |
   | foo     |       3 |         |
   '---------+---------+---------'
  
  An array of hashrefs, such as commonly found if you use DBI's fetchrow_hashref()
  and friends, format_pretty([ {a=>1, b=>2}, {b=>2, c=>3}, {c=>4} ]):
  
   .-----------.
   | a | b | c |
   +---+---+---+
   | 1 | 2 |   |
   |   | 2 | 3 |
   |   |   | 4 |
   '---+---+---'
  
  Some more complex data, format_pretty({summary => "Blah...", users =>
  [{name=>"budi", domains=>["foo.com", "bar.com"], quota=>"1000"}, {name=>"arif",
  domains=>["baz.com"], quota=>"2000"}], verified => 0}):
  
   summary:
   Blah...
  
   users:
   .---------------------------------.
   | domains          | name | quota |
   +------------------+------+-------+
   | foo.com, bar.com | budi |  1000 |
   | baz.com          | arif |  2000 |
   '------------------+------+-------'
  
   verified:
   0
  
  Structures which can't be handled yet will simply be output as YAML,
  format_pretty({a {b=>1}}):
  
   ---
   a:
     b: 1
  
  =head1 DESCRIPTION
  
  This module is meant to output data structure in a "pretty" or "nice" format,
  suitable for console programs. The idea of this module is that for you to just
  merrily dump data structure to the console, and this module will figure out how
  to best display your data to the end-user.
  
  Currently this module tries to display the data mostly as a nice text table (or
  a series of text tables), and failing that, display it as YAML.
  
  This module takes piping into consideration, and will output a simpler, more
  suitable format when your user pipes your program's output into some other
  program.
  
  Most of the time, you don't have to configure anything, but some options are
  provided to tweak the output.
  
  =for Pod::Coverage ^(content_type)$
  
  =head1 FUNCTIONS
  
  =for Pod::Coverage new
  
  =head2 format_pretty($data, \%opts)
  
  Return formatted data structure. Options:
  
  =over
  
  =item * interactive => BOOL (optional, default undef)
  
  If set, will override interactive terminal detection (-t STDOUT). Simpler
  formatting will be done if terminal is non-interactive (e.g. when output is
  piped). Using this option will force simpler/full formatting.
  
  =item * list_max_columns => INT
  
  When displaying list as columns, specify maximum number of columns. This can be
  used to force fewer columns (for example, single column) instead of using the
  whole available terminal width.
  
  =item * table_column_orders => [[COLNAME1, COLNAME2], ...]
  
  Specify column orders when drawing a table. If a table has all the columns, then
  the column names will be ordered according to the specification. For example,
  when table_column_orders is [[qw/foo bar baz/]], this table's columns will not
  be reordered because it doesn't have all the mentioned columns:
  
   |foo|quux|
  
  But this table will:
  
   |apple|bar|baz|foo|quux|
  
  into:
  
   |apple|foo|bar|baz|quux|
  
  =item * table_column_formats => [{COLNAME=>FMT, ...}, ...]
  
  Specify formats for columns. Each table format specification is a hashref
  {COLNAME=>FMT, COLNAME2=>FMT2, ...}. It will be applied to a table if the table
  has all the columns. FMT is a format specification according to
  L<Data::Unixish::Apply>, it's basically either a name of a dux function (e.g.
  C<"date">) or an array of function name + arguments (e.g. C<< [['date', [align
  => {align=>'middle'}]] >>). This will be fed to L<Text::ANSITable>'s C<formats>
  column style.
  
  =item * table_column_types => [{COLNAME=>TYPE, ...}, ...]
  
  Specify types for columns. Each table format specification is a hashref
  {COLNAME=>TYPE, COLNAME2=>TYPE2, ...}. It will be applied to a table if the
  table has all the columns. TYPE is type name according to L<Sah> schema. This
  will be fed to L<Text::ANSITable>'s C<type> column style to give hints on how to
  format the column. Sometimes this is the simpler alternative to
  C<table_column_formats>.
  
  =back
  
  =head1 ENVIRONMENT
  
  =over
  
  =item * INTERACTIVE => BOOL
  
  To set default for C<interactive> option (overrides automatic detection).
  
  =item * FORMAT_PRETTY_LIST_MAX_COLUMNS => INT
  
  To set C<list_max_columns> option.
  
  =item * FORMAT_PRETTY_TABLE_COLUMN_FORMATS => ARRAY (JSON)
  
  To set C<table_column_formats> option, interpreted as JSON.
  
  =item * FORMAT_PRETTY_TABLE_COLUMN_TYPES => ARRAY (JSON)
  
  To set C<table_column_types> option, interpreted as JSON.
  
  =item * FORMAT_PRETTY_TABLE_COLUMN_ORDERS => ARRAY (JSON)
  
  To set C<table_column_orders> option, interpreted as JSON.
  
  =item * COLUMNS => INT
  
  To override terminal width detection.
  
  =back
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Format-Pretty-Console>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Data-Format-Pretty-Console>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Format-Pretty-Console>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  Modules used for formatting: L<Text::ANSITable>, L<YAML>.
  
  L<Data::Format::Pretty>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_FORMAT_PRETTY_CONSOLE

    $main::fatpacked{"Data/Format/Pretty/HTML.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_FORMAT_PRETTY_HTML';
  package Data::Format::Pretty::HTML;
  
  use 5.010001;
  use strict;
  use warnings;
  use Log::Any::IfLOG '$log';
  
  use Data::Format::Pretty::Console 0.24;
  use HTML::Entities;
  use Scalar::Util qw(looks_like_number);
  use URI::Find::Schemeless;
  use YAML::Any;
  
  require Exporter;
  our @ISA = qw(Exporter Data::Format::Pretty::Console);
  our @EXPORT_OK = qw(format_pretty);
  
  our $VERSION = '0.10'; # VERSION
  
  sub content_type { "text/html" }
  
  sub format_pretty {
      my ($data, $opts) = @_;
      $opts //= {};
      __PACKAGE__->new($opts)->_format($data);
  }
  
  # OO interface is hidden
  sub new {
      my ($class, $opts) = @_;
      my $obj = $class->SUPER::new($opts);
      #my $obj = Data::Format::Pretty::Console->new($opts);
      $obj->{opts}{linkify_urls_in_text} //= 1;
      $obj->{opts}{interactive} = 1;
      $obj->{opts}{list_max_columns} = 1;
      #bless $class, $obj;
      $obj;
  }
  
  sub _htmlify {
      my ($self, $text) = @_;
  
      $text = encode_entities($text);
      if ($self->{opts}{linkify_urls_in_text}) {
          URI::Find::Schemeless->new(
              sub {
                  #my $uri = encode_entities $_[0];
                  #my $uri = $_[0];
                  my $uri = decode_entities $_[0];
                  return qq|<a href="$uri">$uri</a>|;
              })->find(\$text);
      }
      if ($text =~ /\R/) {
          return "<pre>$text</pre>";
      } else {
          return $text;
      }
  }
  
  sub _render_table {
      my ($self, $t) = @_;
      my @t = ("<table>\n");
  
      my $sh = $t->{at_opts}{show_header};
      unless (defined($sh) && !$sh) {
          push @t, "  <thead>\n";
          push @t, "    <tr>";
          for my $c (@{$t->{cols}}) {
              push @t, (
                  "<th", (looks_like_number($c) ? ' class="number"':''), ">",
                  $self->_htmlify($c),
                  "</th>",
              );
          }
          push @t, "</tr>\n";
          push @t, "  </thead>\n";
      }
  
      push @t, "  <tbody>\n";
      for my $r (@{$t->{rows}}) {
          push @t, "    <tr>";
          my $cidx = 0;
          for my $c (@$r) {
              if ($t->{html_cols} && $t->{html_cols}[$cidx]) {
                  push @t, "<td>", $c, "</td>";
              } else {
                  push @t, (
                      "<td", (looks_like_number($c) ? ' class="number"':''), ">",
                      $self->_htmlify($c),
                      "</td>",
                  );
              }
              $cidx++;
          }
          push @t, "</tr>\n";
      }
      push @t, "  </tbody>\n";
      push @t, "</table>\n";
      join "", @t;
  }
  
  # format unknown structure, the default is to dump YAML structure
  sub _format_unknown {
      my ($self, $data) = @_;
      $self->_htmlify(Dump $data);
  }
  
  sub _format_scalar {
      my ($self, $data) = @_;
  
      my $sdata = defined($data) ? "$data" : "";
      $self->_htmlify($sdata);
  }
  
  sub _format_hot {
      my ($self, $data) = @_;
      my @t;
      # format as 2-column table of key/value
      my $t = {cols=>[qw/key value/], html_cols=>[0, 1], rows=>[]};
      for my $k (sort keys %$data) {
          push @{ $t->{rows} }, [$k, $self->_format($data->{$k})];
      }
      $self->_render_table($t);
  }
  
  1;
  # ABSTRACT: Pretty-print data structure for HTML output
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Format::Pretty::HTML - Pretty-print data structure for HTML output
  
  =head1 VERSION
  
  This document describes version 0.10 of Data::Format::Pretty::HTML (from Perl distribution Data-Format-Pretty-HTML), released on 2015-08-17.
  
  =head1 SYNOPSIS
  
  In your program:
  
   use Data::Format::Pretty::HTML qw(format_pretty);
   ...
   print format_pretty($result);
  
  Some example output:
  
  Scalar, format_pretty("foo & bar"):
  
   foo &amp; bar
  
  Scalar multiline, format_pretty("foo\nbar\nbaz"):
  
   <pre>foo
   bar
   baz</pre>
  
  List, format_pretty([qw/foo bar baz qux/]):
  
   <table>
     <tr><td>foo</td></tr>
     <tr><td>bar</td></tr>
     <tr><td>baz</td></tr>
     <tr><td>qux</td></tr>
   </table>
  
  Hash, format_pretty({foo=>"data",bar=>"format",baz=>"pretty",qux=>"html"}):
  
   <table>
     <tr><th>key</th><th>value</th></tr>
     <tr><td>bar</td><td>format</td></tr>
     <tr><td>baz</td><td>pretty</td></tr>
     <tr><td>foo</td><td>data</td></tr>
     <tr><td>qux</td><td>html</td></tr>
   </table>
  
  2-dimensional array, format_pretty([ [1, 2, ""], [28, "bar", 3], ["foo", 3,
  undef] ]):
  
   <table>
     <tr><th>column0</th><th>column1</th><th>column2</th></tr>
     <tr><td class="number">1</td><td class="number">2</td><td></td></tr>
     <tr><td class="number">28</td><td>bar</td><td class="number">3</td></tr>
     <tr><td>foo</td><td class="number">3</td><td></td></tr>
   </table>
  
  An array of hashrefs, such as commonly found if you use DBI's fetchrow_hashref()
  and friends, format_pretty([ {a=>1, b=>2}, {b=>2, c=>3}, {c=>4} ]):
  
   <table>
     <tr><th>a</th><th>b</th><th>c</th></tr>
     <tr><td class="number">1</td><td class="number">2</td><td></td></tr>
     <tr><td></td><td class="number">2</td><td class="number">3</td></tr>
     <tr><td></td><td></td><td class="number">4</td></tr>
   </table>
  
  Some more complex data, format_pretty({summary => "Blah...", users =>
  [{name=>"budi", domains=>["f.com", "b.com"], quota=>"1000"}, {name=>"arif",
  domains=>["baz.com"], quota=>"2000"}], verified => 0}):
  
   <table>
  
     <tr>
       <td>summary</td>
       <td>Blah...</td>
     </tr>
  
     <tr>
       <td>users</td>
       <td>
         <table>
           <tr><th>domains</th><th>name</th><th>quota</th></tr>
           <tr><td>f.com, b.com</td><td>budi</td><td class="number">1000</td></tr>
           <tr><td>baz.com</td><td>arif</td><td class="number">2000</td></tr>
       </td>
     </tr>
  
     <tr>
       <td>verified</td>
       <td class="number">0</td>
     </tr>
  
   </table>
  
  Structures which can't be handled yet will simply be output as YAML,
  format_pretty({a => {b=>1}}):
  
   <pre>a:
     b: 1
   </pre>
  
  =head1 DESCRIPTION
  
  This module has the same spirit as L<Data::Format::Pretty::Console> (and
  currently implemented as its subclass). The idea is to throw it some data
  structure and let it figure out how to best display the data in a pretty HTML
  format.
  
  Differences with Data::Format::Pretty::Console:
  
  =over 4
  
  =item * hot (hash of table) structure is rendered as table of inner tables
  
  =back
  
  =for Pod::Coverage new
  
  =head1 FUNCTIONS
  
  =head2 format_pretty($data, \%opts)
  
  Return formatted data structure as HTML. Options:
  
  =over 4
  
  =item * table_column_orders => [[colname, colname], ...]
  
  See Data::Format::Pretty::Console for more details.
  
  =item * linkify_urls_in_text => BOOL
  
  Whether to convert 'http://foo' in text into '<a
  href="http://foo">http://foo</a>'. Default is true.
  
  =back
  
  =head1 SEE ALSO
  
  L<Data::Format::Pretty>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Format-Pretty-HTML>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Data-Format-Pretty-HTML>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Format-Pretty-HTML>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_FORMAT_PRETTY_HTML

    $main::fatpacked{"Data/Format/Pretty/JSON.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_FORMAT_PRETTY_JSON';
  package Data::Format::Pretty::JSON;
  
  our $DATE = '2016-03-11'; # DATE
  our $VERSION = '0.12'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(format_pretty);
  
  sub content_type { "application/json" }
  
  sub format_pretty {
      my ($data, $opts) = @_;
      $opts //= {};
  
      state $json;
      my $interactive = (-t STDOUT);
      my $pretty = $opts->{pretty} // 1;
      my $color  = $opts->{color} // $ENV{COLOR} // $interactive //
          $opts->{pretty};
      my $linum  = $opts->{linum} // $ENV{LINUM} // 0;
      if ($color) {
          require JSON::Color;
          JSON::Color::encode_json($data, {pretty=>$pretty, linum=>$linum})."\n";
      } else {
          if (!$json) {
              require JSON::MaybeXS;
              $json = JSON::MaybeXS->new->utf8->allow_nonref;
          }
          $json->pretty($pretty);
          if ($linum) {
              require String::LineNumber;
              String::LineNumber::linenum($json->encode($data));
          } else {
              $json->encode($data);
          }
      }
  }
  
  1;
  # ABSTRACT: Pretty-print data structure as JSON
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Format::Pretty::JSON - Pretty-print data structure as JSON
  
  =head1 VERSION
  
  This document describes version 0.12 of Data::Format::Pretty::JSON (from Perl distribution Data-Format-Pretty-JSON), released on 2016-03-11.
  
  =head1 SYNOPSIS
  
   use Data::Format::Pretty::JSON qw(format_pretty);
   print format_pretty($data);
  
  =head1 DESCRIPTION
  
  This module uses L<JSON::MaybeXS> or L<JSON::Color> to encode data as JSON.
  
  =for Pod::Coverage ^(new)$
  
  =head1 FUNCTIONS
  
  =head2 format_pretty($data, \%opts)
  
  Return formatted data structure as JSON. Options:
  
  =over 4
  
  =item * color => BOOL (default: from env or 1 on interactive)
  
  Whether to enable coloring. The default is the enable only when running
  interactively.
  
  =item * pretty => BOOL (default: 1)
  
  Whether to pretty-print JSON.
  
  =item * linum => BOOL (default: from env or 0)
  
  Whether to add line numbers.
  
  =back
  
  =head2 content_type() => STR
  
  Return C<application/json>.
  
  =head1 FAQ
  
  =head1 ENVIRONMENT
  
  =head2 COLOR => BOOL
  
  Set C<color> option (if unset).
  
  =head2 LINUM => BOOL
  
  Set C<linum> option (if unset).
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Format-Pretty-JSON>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Format-Pretty-JSON>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Format-Pretty-JSON>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Data::Format::Pretty>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_FORMAT_PRETTY_JSON

    $main::fatpacked{"Data/Format/Pretty/SimpleText.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_FORMAT_PRETTY_SIMPLETEXT';
  package Data::Format::Pretty::SimpleText;
  
  use 5.010;
  use strict;
  use warnings;
  
  use Data::Format::Pretty::Console ();
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(format_pretty);
  
  our $VERSION = '0.37'; # VERSION
  
  sub content_type { "text/plain" }
  
  sub format_pretty {
      my ($data, $opts) = @_;
      my %opts = $opts ? %$opts : ();
      $opts{interactive} = 0;
      Data::Format::Pretty::Console::format_pretty($data, \%opts);
  }
  
  1;
  # ABSTRACT: Pretty-print data structure as simple text
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Format::Pretty::SimpleText - Pretty-print data structure as simple text
  
  =head1 VERSION
  
  This document describes version 0.37 of Data::Format::Pretty::SimpleText (from Perl distribution Data-Format-Pretty-Console), released on 2016-03-13.
  
  =head1 SYNOPSIS
  
  In your program:
  
   use Data::Format::Pretty::SimpleText qw(format_pretty);
   print format_pretty($data);
  
  Some example output:
  
  =over 4
  
  =item * format_pretty([qw/foo bar baz qux/])
  
   foo
   bar
   baz
   qux
  
  =back
  
  =head1 DESCRIPTION
  
  This module just calls L<Data::Format::Pretty::Console::format_pretty> with
  C<interactive>=0 option.
  
  =for Pod::Coverage ^(content_type)$
  
  =head1 FUNCTIONS
  
  =head2 format_pretty($data, \%opts)
  
  Return formatted data structure. See L<Data::Format::Pretty::Console> for
  details.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Format-Pretty-Console>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Data-Format-Pretty-Console>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Format-Pretty-Console>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Data::Format::Pretty::Console>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_FORMAT_PRETTY_SIMPLETEXT

    $main::fatpacked{"Data/Format/Pretty/Text.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_FORMAT_PRETTY_TEXT';
  package Data::Format::Pretty::Text;
  
  use 5.010;
  use strict;
  use warnings;
  
  use Data::Format::Pretty::Console ();
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(format_pretty);
  
  our $VERSION = '0.37'; # VERSION
  
  sub content_type { "text/plain" }
  
  sub format_pretty {
      my ($data, $opts) = @_;
      my %opts = $opts ? %$opts : ();
      $opts{interactive} = 1;
      Data::Format::Pretty::Console::format_pretty($data, \%opts);
  }
  
  1;
  # ABSTRACT: Pretty-print data structure as text
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Format::Pretty::Text - Pretty-print data structure as text
  
  =head1 VERSION
  
  This document describes version 0.37 of Data::Format::Pretty::Text (from Perl distribution Data-Format-Pretty-Console), released on 2016-03-13.
  
  =head1 SYNOPSIS
  
  In your program:
  
   use Data::Format::Pretty::Text qw(format_pretty);
   print format_pretty($data);
  
  Some example output:
  
  =over 4
  
  =item * format_pretty([qw/foo bar baz qux/])
  
   +------+
   | foo  |
   | bar  |
   | baz  |
   | qux  |
   '------'
  
  =back
  
  =head1 DESCRIPTION
  
  This module just calls L<Data::Format::Pretty::Console::format_pretty> with
  C<interactive>=1 option.
  
  =for Pod::Coverage ^(content_type)$
  
  =head1 FUNCTIONS
  
  =head2 format_pretty($data, \%opts)
  
  Return formatted data structure. See L<Data::Format::Pretty::Console> for
  details.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Format-Pretty-Console>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Data-Format-Pretty-Console>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Format-Pretty-Console>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Data::Format::Pretty::Console>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_FORMAT_PRETTY_TEXT

    $main::fatpacked{"Data/ModeMerge.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_MODEMERGE';
  package Data::ModeMerge;
  
  our $DATE = '2016-07-22'; # DATE
  our $VERSION = '0.35'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Mo qw(build default);
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT = qw(mode_merge);
  
  sub mode_merge {
      my ($l, $r, $config_vars) = @_;
      my $mm = __PACKAGE__->new(config => $config_vars);
      $mm->merge($l, $r);
  }
  
  has config => (is => "rw");
  
  # hash of modename => handler
  has modes => (is => 'rw', default => sub { {} });
  
  has combine_rules => (is => 'rw');
  
  # merging process state
  has path => (is => "rw", default => sub { [] });
  has errors => (is => "rw", default => sub { [] });
  has mem => (is => "rw", default => sub { {} }); # for handling circular refs. {key=>{res=>[...], todo=>[sub1, ...]}, ...}
  has cur_mem_key => (is => "rw"); # for handling circular refs. instead of passing around this as argument, we put it here.
  
  sub _in($$) {
      state $load_dmp = do { require Data::Dmp };
      my ($self, $needle, $haystack) = @_;
      return 0 unless defined($needle);
      my $r1 = ref($needle);
      my $f1 = $r1 ? Data::Dmp::dmp($needle) : undef;
      for (@$haystack) {
          my $r2 = ref($_);
          next if $r1 xor $r2;
          return 1 if  $r2 && $f1 eq Data::Dmp::dmp($_);
          return 1 if !$r2 && $needle eq $_;
      }
      0;
  }
  
  sub BUILD {
      require Data::ModeMerge::Config;
  
      my ($self, $args) = @_;
  
      if ($self->config) {
          # some sanity checks
          my $is_hashref = ref($self->config) eq 'HASH';
          die "config must be a hashref or a Data::ModeMerge::Config" unless
              $is_hashref || UNIVERSAL::isa($self->config, "Data::ModeMerge::Config");
          $self->config(Data::ModeMerge::Config->new(%{ $self->config })) if $is_hashref;
      } else {
          $self->config(Data::ModeMerge::Config->new);
      }
  
      for (qw(NORMAL KEEP ADD CONCAT SUBTRACT DELETE)) {
  	$self->register_mode($_);
      }
  
      if (!$self->combine_rules) {
          $self->combine_rules({
              # "left + right" => [which mode to use, which mode after merge]
              'ADD+ADD'            => ['ADD'     , 'ADD'   ],
              #'ADD+CONCAT'         => undef,
              'ADD+DELETE'         => ['DELETE'  , 'DELETE'],
              #'ADD+KEEP'           => undef,
              'ADD+NORMAL'         => ['NORMAL'  , 'NORMAL'],
              'ADD+SUBTRACT'       => ['SUBTRACT', 'ADD'   ],
  
              #'CONCAT+ADD'         => undef,
              'CONCAT+CONCAT'      => ['CONCAT'  , 'CONCAT'],
              'CONCAT+DELETE'      => ['DELETE'  , 'DELETE'],
              #'CONCAT+KEEP'        => undef,
              'CONCAT+NORMAL'      => ['NORMAL'  , 'NORMAL'],
              #'CONCAT+SUBTRACT'    => undef,
  
              'DELETE+ADD'         => ['NORMAL'  , 'ADD'     ],
              'DELETE+CONCAT'      => ['NORMAL'  , 'CONCAT'  ],
              'DELETE+DELETE'      => ['DELETE'  , 'DELETE'  ],
              'DELETE+KEEP'        => ['NORMAL'  , 'KEEP'    ],
              'DELETE+NORMAL'      => ['NORMAL'  , 'NORMAL'  ],
              'DELETE+SUBTRACT'    => ['NORMAL'  , 'SUBTRACT'],
  
              'KEEP+ADD'          => ['KEEP', 'KEEP'],
              'KEEP+CONCAT'       => ['KEEP', 'KEEP'],
              'KEEP+DELETE'       => ['KEEP', 'KEEP'],
              'KEEP+KEEP'         => ['KEEP', 'KEEP'],
              'KEEP+NORMAL'       => ['KEEP', 'KEEP'],
              'KEEP+SUBTRACT'     => ['KEEP', 'KEEP'],
  
              'NORMAL+ADD'        => ['ADD'     , 'NORMAL'],
              'NORMAL+CONCAT'     => ['CONCAT'  , 'NORMAL'],
              'NORMAL+DELETE'     => ['DELETE'  , 'NORMAL'],
              'NORMAL+KEEP'       => ['NORMAL'  , 'KEEP'  ],
              'NORMAL+NORMAL'     => ['NORMAL'  , 'NORMAL'],
              'NORMAL+SUBTRACT'   => ['SUBTRACT', 'NORMAL'],
  
              'SUBTRACT+ADD'      => ['SUBTRACT', 'SUBTRACT'],
              #'SUBTRACT+CONCAT'   => undef,
              'SUBTRACT+DELETE'   => ['DELETE'  , 'DELETE'  ],
              #'SUBTRACT+KEEP'     => undef,
              'SUBTRACT+NORMAL'   => ['NORMAL'  , 'NORMAL'  ],
              'SUBTRACT+SUBTRACT' => ['ADD'     , 'SUBTRACT'],
          });
      }
  }
  
  sub push_error {
      my ($self, $errmsg) = @_;
      push @{ $self->errors }, [[@{ $self->path }], $errmsg];
      return;
  }
  
  sub register_mode {
      my ($self, $name0) = @_;
      my $obj;
      if (ref($name0)) {
          my $obj = $name0;
      } elsif ($name0 =~ /^\w+(::\w+)+$/) {
          eval "require $name0; \$obj = $name0->new";
          die "Can't load module $name0: $@" if $@;
      } elsif ($name0 =~ /^\w+$/) {
          my $modname = "Data::ModeMerge::Mode::$name0";
          eval "require $modname; \$obj = $modname->new";
          die "Can't load module $modname: $@" if $@;
      } else {
          die "Invalid mode name $name0";
      }
      my $name = $obj->name;
      die "Mode $name already registered" if $self->modes->{$name};
      $obj->merger($self);
      $self->modes->{$name} = $obj;
  }
  
  sub check_prefix {
      my ($self, $hash_key) = @_;
      die "Hash key not a string" if ref($hash_key);
      my $dis = $self->config->disable_modes;
      if (defined($dis) && ref($dis) ne 'ARRAY') {
          $self->push_error("Invalid config value `disable_modes`: must be an array");
          return;
      }
      for my $mh (sort { $b->precedence_level <=> $a->precedence_level }
                  grep { !$dis || !$self->_in($_->name, $dis) }
                  values %{ $self->modes }) {
          if ($mh->check_prefix($hash_key)) {
              return $mh->name;
          }
      }
      return;
  }
  
  sub check_prefix_on_hash {
      my ($self, $hash) = @_;
      die "Not a hash" unless ref($hash) eq 'HASH';
      my $res = 0;
      for (keys %$hash) {
  	do { $res++; last } if $self->check_prefix($_);
      }
      $res;
  }
  
  sub add_prefix {
      my ($self, $hash_key, $mode) = @_;
      die "Hash key not a string" if ref($hash_key);
      my $dis = $self->config->disable_modes;
      if (defined($dis) && ref($dis) ne 'ARRAY') {
          die "Invalid config value `disable_modes`: must be an array";
      }
      if ($dis && $self->_in($mode, $dis)) {
          $self->push_error("Can't add prefix for currently disabled mode `$mode`");
          return $hash_key;
      }
      my $mh = $self->modes->{$mode} or die "Unknown mode: $mode";
      $mh->add_prefix($hash_key);
  }
  
  sub remove_prefix {
      my ($self, $hash_key) = @_;
      die "Hash key not a string" if ref($hash_key);
      my $dis = $self->config->disable_modes;
      if (defined($dis) && ref($dis) ne 'ARRAY') {
          die "Invalid config value `disable_modes`: must be an array";
      }
      for my $mh (sort { $b->precedence_level <=> $a->precedence_level }
                  grep { !$dis || !$self->_in($_->name, $dis) }
                  values %{ $self->modes }) {
          if ($mh->check_prefix($hash_key)) {
              my $r = $mh->remove_prefix($hash_key);
              if (wantarray) { return ($r, $mh->name) }
              else           { return $r }
          }
      }
      if (wantarray) { return ($hash_key, $self->config->default_mode) }
      else           { return $hash_key }
  }
  
  sub remove_prefix_on_hash {
      my ($self, $hash) = @_;
      die "Not a hash" unless ref($hash) eq 'HASH';
      for (keys %$hash) {
  	my $old = $_;
  	$_ = $self->remove_prefix($_);
  	next unless $old ne $_;
  	die "Conflict when removing prefix on hash: $old -> $_ but $_ already exists"
  	    if exists $hash->{$_};
  	$hash->{$_} = $hash->{$old};
  	delete $hash->{$old};
      }
      $hash;
  }
  
  sub merge {
      my ($self, $l, $r) = @_;
      $self->path([]);
      $self->errors([]);
      $self->mem({});
      $self->cur_mem_key(undef);
      my ($key, $res, $backup) = $self->_merge(undef, $l, $r);
      {
          success => !@{ $self->errors },
          error   => (@{ $self->errors } ?
                      join(", ",
                           map { sprintf("/%s: %s", join("/", @{ $_->[0] }), $_->[1]) }
                               @{ $self->errors }) : ''),
          result  => $res,
          backup  => $backup,
      };
  }
  
  # handle circular refs: process todo's
  sub _process_todo {
      my ($self) = @_;
      if ($self->cur_mem_key) {
          for my $mk (keys %{ $self->mem }) {
              my $res = $self->mem->{$mk}{res};
              if (defined($res) && @{ $self->mem->{$mk}{todo} }) {
                  #print "DEBUG: processing todo for mem<$mk>\n";
                  for (@{  $self->mem->{$mk}{todo} }) {
                      $_->(@$res);
                      return if @{ $self->errors };
                  }
                  $self->mem->{$mk}{todo} = [];
              }
          }
      }
  }
  
  sub _merge {
      my ($self, $key, $l, $r, $mode) = @_;
      my $c = $self->config;
      $mode //= $c->default_mode;
  
      my $mh = $self->modes->{$mode};
      die "Can't find handler for mode $mode" unless $mh;
  
      # determine which merge method we will call
      my $rl = ref($l);
      my $rr = ref($r);
      my $tl = $rl eq 'HASH' ? 'HASH' : $rl eq 'ARRAY' ? 'ARRAY' : $rl eq 'CODE' ? 'CODE' : !$rl ? 'SCALAR' : '';
      my $tr = $rr eq 'HASH' ? 'HASH' : $rr eq 'ARRAY' ? 'ARRAY' : $rr eq 'CODE' ? 'CODE' : !$rr ? 'SCALAR' : '';
      if (!$tl) { $self->push_error("Unknown type in left side: $rl"); return }
      if (!$tr) { $self->push_error("Unknown type in right side: $rr"); return }
      if (!$c->allow_create_array && $tl ne 'ARRAY' && $tr eq 'ARRAY') {
          $self->push_error("Not allowed to create array"); return;
      }
      if (!$c->allow_create_hash && $tl ne 'HASH' && $tr eq 'HASH') {
          $self->push_error("Not allowed to create hash"); return;
      }
      if (!$c->allow_destroy_array && $tl eq 'ARRAY' && $tr ne 'ARRAY') {
          $self->push_error("Not allowed to destroy array"); return;
      }
      if (!$c->allow_destroy_hash && $tl eq 'HASH' && $tr ne 'HASH') {
          $self->push_error("Not allowed to destroy hash"); return;
      }
      my $meth = "merge_${tl}_${tr}";
      if (!$mh->can($meth)) { $self->push_error("No merge method found for $tl + $tr (mode $mode)"); return }
  
      #$self->_process_todo;
      # handle circular refs: add to todo if necessary
      my $memkey;
      if ($rl || $rr) {
          $memkey = sprintf "%s%s %s%s %s %s",
              (defined($l) ? ($rl ? 2 : 1) : 0),
              (defined($l) ? "$l" : ''),
              (defined($r) ? ($rr ? 2 : 1) : 0),
              (defined($r) ? "$r" : ''),
              $mode,
              $self->config;
          #print "DEBUG: number of keys in mem = ".scalar(keys %{ $self->mem })."\n";
          #print "DEBUG: mem keys = \n".join("", map { "  $_\n" } keys %{ $self->mem }) if keys %{ $self->mem };
          #print "DEBUG: calculating memkey = <$memkey>\n";
      }
      if ($memkey) {
          if (exists $self->mem->{$memkey}) {
              $self->_process_todo;
              if (defined $self->mem->{$memkey}{res}) {
                  #print "DEBUG: already calculated, using cached result\n";
                  return @{ $self->mem->{$memkey}{res} };
              } else {
                  #print "DEBUG: detecting circular\n";
                  return ($key, undef, undef, 1);
              }
          } else {
              $self->mem->{$memkey} = {res=>undef, todo=>[]};
              $self->cur_mem_key($memkey);
              #print "DEBUG: invoking ".$mh->name."'s $meth(".dmp($key).", ".dmp($l).", ".dmp($r).")\n";
              my ($newkey, $res, $backup) = $mh->$meth($key, $l, $r);
              #print "DEBUG: setting res for mem<$memkey>\n";
              $self->mem->{$memkey}{res} = [$newkey, $res, $backup];
              $self->_process_todo;
              return ($newkey, $res, $backup);
          }
      } else {
          $self->_process_todo;
          #print "DEBUG: invoking ".$mh->name."'s $meth(".dmp($key).", ".dmp($l).", ".dmp($r).")\n";
          return $mh->$meth($key, $l, $r);
      }
  }
  
  # returns 1 if a is included in b (e.g. [user => "jajang"] in included in [user
  # => jajang => "quota"], but [user => "paijo"] is not)
  sub _path_is_included {
      my ($self, $p1, $p2) = @_;
      my $res = 1;
      for my $i (0..@$p1-1) {
          do { $res = 0; last } if !defined($p2->[$i]) || $p1->[$i] ne $p2->[$i];
      }
      #print "_path_is_included([".join(", ", @$p1)."], [".join(", ", @$p2)."])? $res\n";
      $res;
  }
  
  1;
  # ABSTRACT: Merge two nested data structures, with merging modes and options
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::ModeMerge - Merge two nested data structures, with merging modes and options
  
  =head1 VERSION
  
  This document describes version 0.35 of Data::ModeMerge (from Perl distribution Data-ModeMerge), released on 2016-07-22.
  
  =head1 SYNOPSIS
  
      use Data::ModeMerge;
  
      my $hash1 = { a=>1,    c=>1, d=>{  da =>[1]} };
      my $hash2 = { a=>2, "-c"=>2, d=>{"+da"=>[2]} };
  
  
      # if you want Data::ModeMerge to behave like many other merging
      # modules (e.g. Hash::Merge or Data::Merger), turn off modes
      # (prefix) parsing and options key parsing.
  
      my $mm = Data::ModeMerge->new(config => {parse_prefix=>0, options_key=>undef});
      my $res = $mm->merge($hash1, $hash2);
      die $res->{error} if $res->{error};
      # $res->{result} -> { a=>2, c=>1, "-c"=>2, d=>{da=>[1], "+da"=>[2]} }
  
  
      # otherwise Data::ModeMerge will parse prefix as well as options
      # key
  
      my $res = $mm->merge($hash1, $hash2);
      die $res->{error} if $res->{error};
      # $res->{result} -> { a=>2, c=>-1, d=>{da=>[1,2]} }
  
      $res = $merge({  a =>1, {  a2 =>1, ""=>{parse_prefix=>0}},
                    {".a"=>2, {".a2"=>2                       }});
      # $res->{result} -> { a=>12, {a2=>1, ".a2"=>2} }, parse_prefix is turned off in just the subhash
  
  
      # procedural interface
  
      my $res = mode_merge($hash1, $hash2, {allow_destroy_hash=>0});
  
  =head1 DESCRIPTION
  
  There are already several modules on CPAN to do recursive data
  structure merging, like L<Data::Merger> and
  L<Hash::Merge>. C<Data::ModeMerge> differs in that it offers merging
  "modes" and "options". It provides greater flexibility on what the
  result of a merge between two data should/can be. This module may or
  may not be what you need.
  
  One application of this module is in handling configuration. Often
  there are multiple levels of configuration, e.g. in your typical Unix
  command-line program there are system-wide config file in /etc,
  per-user config file under ~/, and command-line options. It's
  convenient programatically to load each of those in a hash and then
  merge system-wide hash with the per-user hash, and then merge the
  result with the command-line hash to get the a single hash as the
  final configuration. Your program can from there on deal with this
  just one hash instead of three.
  
  In a typical merging process between two hashes (left-side and
  right-side), when there is a conflicting key, then the right-side key
  will override the left-side. This is usually the desired behaviour in
  our said program as the system-wide config is there to provide
  defaults, and the per-user config (and the command-line arguments)
  allow a user to override those defaults.
  
  But suppose that the user wants to I<unset> a certain configuration
  setting that is defined by the system-wide config? She can't do that
  unless she edits the system-wide config (in which she might need admin
  rights), or the program allows the user to disregard the system-wide
  config. The latter is usually what's implemented by many Unix
  programs, e.g. the C<-noconfig> command-line option in C<mplayer>. But
  this has two drawbacks: a slightly added complexity in the program
  (need to provide a special, extra comand-line option) and the user
  loses all the default settings in the system-wide config. What she
  needed in the first place was to just unset I<a single setting> (a
  single key-value pair of the hash).
  
  L<Data::ModeMerge> comes to the rescue. It provides a so-called
  C<DELETE mode>.
  
   mode_merge({foo=>1, bar=>2}, {"!foo"=>undef, bar=>3, baz=>1});
  
  will result ini:
  
   {bar=>3, baz=>1}
  
  The C<!> prefix tells Data::ModeMerge to do a DELETE mode merging. So
  the final result will lack the C<foo> key.
  
  On the other hand, what if the system admin wants to I<protect> a
  certain configuration setting from being overriden by the user or the
  command-line? This is useful in a hosting or other retrictive
  environment where we want to limit users' freedom to some levels. This
  is possible via the KEEP mode merging.
  
   mode_merge({"^bar"=>2, "^baz"=>1}, {bar=>3, "!baz"=>0, qux=>7});
  
  will result in:
  
   {"^bar"=>2, "^baz"=>1, qux=>7}
  
  effectively protecting C<bar> and C<baz> from being
  overriden/deleted/etc.
  
  Aside from the two mentioned modes, there are also a few others
  available by default: ADD (prefix C<+>), CONCAT (prefix C<.>),
  SUBTRACT (prefix C<->), as well as the plain ol' NORMAL/override
  (optional prefix C<*>).
  
  You can add other modes by writing a mode handler module.
  
  You can change the default prefixes for each mode if you want. You can
  disable each mode individually.
  
  You can default to always using a certain mode, like the NORMAL mode,
  and ignore all the prefixes, in which case Data::ModeMerge will behave
  like most other merge modules.
  
  There are a few other options like whether or not the right side is
  allowed a "change the structure" of the left side (e.g. replacing a
  scalar with an array/hash, destroying an existing array/hash with
  scalar), maximum length of scalar/array/hash, etc.
  
  You can change default mode, prefixes, disable/enable modes, etc on a
  per-hash basis using the so-called B<options key>. See the B<OPTIONS
  KEY> section for more details.
  
  This module can handle (though not all possible cases)
  circular/recursive references.
  
  =for Pod::Coverage ^(BUILD)$
  
  =head1 MERGING PREFIXES AND YOUR DATA
  
  Merging with this module means you need to be careful when your hash
  keys might contain one of the mode prefixes characters by accident,
  because it will trigger the wrong merge mode and moreover the prefix
  characters will be B<stripped> from the final result (unless you
  configure the module not to do so).
  
  A rather common case is when you have regexes in your hash
  keys. Regexes often begins with C<^>, which coincidentally is a prefix
  for the KEEP mode. Or perhaps you have dot filenames as hash keys,
  where it clashes with the CONCAT mode. Or perhaps shell wildcards,
  where C<*> is also used as the prefix for NORMAL mode.
  
  To avoid clashes, you can either:
  
  =over 4
  
  =item * exclude the keys using
  C<exclude_merge>/C<include_merge>/C<exclude_parse>/C<include_parse>
  config settings
  
  =item * turn off some modes which you don't want via the
  C<disable_modes> config
  
  =item * change the prefix for that mode so that it doesn't clash with
  your data via the C<set_prefix> config
  
  =item * disable prefix parsing altogether via setting C<parse_prefix>
  config to 0
  
  =back
  
  You can do this via the configuration, or on a per-hash basis, using
  the options key.
  
  See L<Data::ModeMerge::Config> for more details on configuration.
  
  =head1 OPTIONS KEY
  
  Aside from merging mode prefixes, you also need to watch out if your
  hash contains a "" (empty string) key, because by default this is the
  key used for options key.
  
  Options key are used to specify configuration on a per-hash basis.
  
  If your hash keys might contain "" keys which are not meant to be an
  options key, you can either:
  
  =over 4
  
  =item * change the name of the key for options key, via setting
  C<options_key> config to another string.
  
  =item * turn off options key mechanism,
  by setting C<options_key> config to undef.
  
  =back
  
  See L<Data::ModeMerge::Config> for more details about options key.
  
  =head1 MERGING MODES
  
  =head2 NORMAL (optional '*' prefix on left/right side)
  
   mode_merge({  a =>11, b=>12}, {  b =>22, c=>23}); # {a=>11, b=>22, c=>23}
   mode_merge({"*a"=>11, b=>12}, {"*b"=>22, c=>23}); # {a=>11, b=>22, c=>23}
  
  =head2 ADD ('+' prefix on the right side)
  
   mode_merge({i=>3}, {"+i"=>4, "+j"=>1}); # {i=>7, j=>1}
   mode_merge({a=>[1]}, {"+a"=>[2, 3]}); # {a=>[1, 2, 3]}
  
  Additive merge on hashes will be treated like a normal merge.
  
  =head2 CONCAT ('.' prefix on the right side)
  
   mode_merge({i=>3}, {".i"=>4, ".j"=>1}); # {i=>34, j=>1}
  
  Concative merge on arrays will be treated like additive merge.
  
  =head2 SUBTRACT ('-' prefix on the right side)
  
   mode_merge({i=>3}, {"-i"=>4}); # {i=>-1}
   mode_merge({a=>["a","b","c"]}, {"-a"=>["b"]}); # {a=>["a","c"]}
  
  Subtractive merge on hashes behaves like a normal merge, except that
  each key on the right-side hash without any prefix will be assumed to
  have a DELETE prefix, i.e.:
  
   mode_merge({h=>{a=>1, b=>1}}, {-h=>{a=>2, "+b"=>2, c=>2}})
  
  is equivalent to:
  
   mode_merge({h=>{a=>1, b=>1}}, {h=>{"!a"=>2, "+b"=>2, "!c"=>2}})
  
  and will merge to become:
  
   {h=>{b=>3}}
  
  =head2 DELETE ('!' prefix on the right side)
  
   mode_merge({x=>WHATEVER}, {"!x"=>WHATEVER}); # {}
  
  =head2 KEEP ('^' prefix on the left/right side)
  
  If you add '^' prefix on the left side, it will be protected from
  being replaced/deleted/etc.
  
   mode_merge({'^x'=>WHATEVER1}, {"x"=>WHATEVER2}); # {x=>WHATEVER1}
  
  For hashes, KEEP mode means that all keys on the left side will not be
  replaced/modified/deleted, *but* you can still add more keys from the
  right side hash.
  
   mode_merge({a=>1, b=>2, c=>3},
              {a=>4, '^c'=>1, d=>5},
              {default_mode=>'KEEP'});
              # {a=>1, b=>2, c=>3, d=>5}
  
  Multiple prefixes on the right side is allowed, where the merging will
  be done by precedence level (highest first):
  
   mode_merge({a=>[1,2]}, {'-a'=>[1], '+a'=>[10]}); # {a=>[2,10]}
  
  but not on the left side:
  
   mode_merge({a=>1, '^a'=>2}, {a=>3}); # error!
  
  Precedence levels (from highest to lowest):
  
   KEEP
   NORMAL
   SUBTRACT
   CONCAT ADD
   DELETE
  
  =head1 CREATING AND USING YOUR OWN MODE
  
  Let's say you want to add a mode named C<FOO>. It will have the prefix
  '?'.
  
  Create the mode handler class,
  e.g. C<Data::ModeMerge::Mode::FOO>. It's probably best to subclass
  from L<Data::ModeMerge::Mode::Base>. The class must implement name(),
  precedence_level(), default_prefix(), default_prefix_re(), and
  merge_{SCALAR,ARRAY,HASH}_{SCALAR,ARRAY,HASH}(). For more details, see
  the source code of Base.pm and one of the mode handlers
  (e.g. NORMAL.pm).
  
  To use the mode, register it:
  
   my $mm = Data::ModeMerge->new;
   $mm->register_mode('FOO');
  
  This will require C<Data::ModeMerge::Mode::FOO>. After that, define
  the operations against other modes:
  
   # if there's FOO on the left and NORMAL on the right, what mode
   # should the merge be done in (FOO), and what the mode should be
   # after the merge? (NORMAL)
   $mm->combine_rules->{"FOO+NORMAL"} = ["FOO", "NORMAL"];
  
   # we don't define FOO+ADD
  
   $mm->combine_rules->{"FOO+KEEP"} = ["KEEP", "KEEP"];
  
   # and so on
  
  =head1 FUNCTIONS
  
  =head2 mode_merge($l, $r[, $config_vars])
  
  A non-OO wrapper for merge() method. Exported by default. See C<merge>
  method for more details.
  
  =head1 ATTRIBUTES
  
  =head2 config
  
  A hashref for config. See L<Data::ModeMerge::Config>.
  
  =head2 modes
  
  =head2 combine_rules
  
  =head2 path
  
  =head2 errors
  
  =head2 mem
  
  =head2 cur_mem_key
  
  =head1 METHODS
  
  For typical usage, you only need merge().
  
  =head2 push_error($errmsg)
  
  Used by mode handlers to push error when doing merge. End users
  normally should not need this.
  
  =head2 register_mode($name_or_package_or_obj)
  
  Register a mode. Will die if mode with the same name already exists.
  
  =head2 check_prefix($hash_key)
  
  Check whether hash key has prefix for certain mode. Return the name of
  the mode, or undef if no prefix is detected.
  
  =head2 check_prefix_on_hash($hash)
  
  This is like C<check_prefix> but performed on every key of the
  specified hash. Return true if any of the key contain a merge prefix.
  
  =head2 add_prefix($hash_key, $mode)
  
  Return hash key with added prefix with specified mode. Log merge error
  if mode is unknown or is disabled.
  
  =head2 remove_prefix($hash_key)
  
  Return hash key will any prefix removed.
  
  =head2 remove_prefix_on_hash($hash)
  
  This is like C<remove_prefix> but performed on every key of the
  specified hash. Return the same hash but with prefixes removed.
  
  =head2 merge($l, $r)
  
  Merge two nested data structures. Returns the result hash: {
  success=>0|1, error=>'...', result=>..., backup=>... }. The 'error'
  key is set to contain an error message if there is an error. The merge
  result is in the 'result' key. The 'backup' key contains replaced
  elements from the original hash/array.
  
  =head1 FAQ
  
  =head2 What is this module good for? Why would I want to use this module instead of the other hash merge modules?
  
  If you just need to (deeply) merge two hashes, chances are you do not
  need this module. Use, for example, L<Hash::Merge>, which is also
  flexible enough because it allows you to set merging behaviour for
  merging different types (e.g. SCALAR vs ARRAY).
  
  You might need this module if your data is recursive/self-referencing
  (which, last time I checked, is not handled well by Hash::Merge), or
  if you want to be able to merge differently (i.e. apply different
  merging B<modes>) according to different prefixes on the key, or
  through special key. In other words, you specify merging modes from
  inside the hash itself.
  
  I originally wrote Data::ModeMerge this for L<Data::Schema> and
  L<Config::Tree>. I want to reuse the "parent" schema (or
  configuration) in more ways other than just override conflicting
  keys. I also want to be able to allow the parent to protect certain
  keys from being overriden. I found these two features lacking in all
  merging modules that I've evaluated prior to writing Data::ModeMerge.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-ModeMerge>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-ModeMerge>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-ModeMerge>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Data::ModeMerge::Config>
  
  Other merging modules on CPAN: L<Data::Merger> (from Data-Utilities),
  L<Hash::Merge>, L<Hash::Merge::Simple>
  
  L<Data::Schema> and L<Config::Tree> (among others, two modules which
  use Data::ModeMerge)
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_MODEMERGE

    $main::fatpacked{"Data/ModeMerge/Config.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_MODEMERGE_CONFIG';
  package Data::ModeMerge::Config;
  
  our $DATE = '2016-07-22'; # DATE
  our $VERSION = '0.35'; # VERSION
  
  use 5.010;
  use Mo qw(build default);
  
  has recurse_hash          => (is => 'rw', default => sub{1});
  has recurse_array         => (is => 'rw', default => sub{0});
  has parse_prefix          => (is => 'rw', default => sub{1});
  has wanted_path           => (is => 'rw');
  has default_mode          => (is => 'rw', default => sub{'NORMAL'});
  has disable_modes         => (is => 'rw');
  has allow_create_array    => (is => 'rw', default => sub{1});
  has allow_create_hash     => (is => 'rw', default => sub{1});
  has allow_destroy_array   => (is => 'rw', default => sub{1});
  has allow_destroy_hash    => (is => 'rw', default => sub{1});
  has exclude_parse         => (is => 'rw');
  has exclude_parse_regex   => (is => 'rw');
  has include_parse         => (is => 'rw');
  has include_parse_regex   => (is => 'rw');
  has exclude_merge         => (is => 'rw');
  has exclude_merge_regex   => (is => 'rw');
  has include_merge         => (is => 'rw');
  has include_merge_regex   => (is => 'rw');
  has set_prefix            => (is => 'rw');
  has readd_prefix          => (is => 'rw', default => sub{1});
  has premerge_pair_filter  => (is => 'rw');
  has options_key           => (is => 'rw', default => sub{''});
  has allow_override        => (is => 'rw');
  has disallow_override     => (is => 'rw');
  
  # list of config settings only available in merger-object's config
  # (not in options key)
  sub _config_config {
      state $a = [qw/
          wanted_path
          options_key
          allow_override
          disallow_override
                    /];
  }
  
  # list of config settings available in options key
  sub _config_ok {
      state $a = [qw/
          recurse_hash
          recurse_array
          parse_prefix
          default_mode
          disable_modes
          allow_create_array
          allow_create_hash
          allow_destroy_array
          allow_destroy_hash
          exclude_parse
          exclude_parse_regex
          include_parse
          include_parse_regex
          exclude_merge
          exclude_merge_regex
          include_merge
          include_merge_regex
          set_prefix
          readd_prefix
          premerge_pair_filter
                    /];
  }
  
  1;
  # ABSTRACT: Data::ModeMerge configuration
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::ModeMerge::Config - Data::ModeMerge configuration
  
  =head1 VERSION
  
  This document describes version 0.35 of Data::ModeMerge::Config (from Perl distribution Data-ModeMerge), released on 2016-07-22.
  
  =head1 SYNOPSIS
  
   # getting configuration
   if ($mm->config->allow_extra_hash_keys) { ... }
  
   # setting configuration
   $mm->config->max_warnings(100);
  
  =head1 DESCRIPTION
  
  Configuration variables for Data::ModeMerge.
  
  =head1 ATTRIBUTES
  
  =head2 recurse_hash => BOOL
  
  Context: config, options key
  
  Default: 1
  
  Whether to recursively merge hash. When 1, each key-value pair between
  2 hashes will be recursively merged. Otherwise, the right-side hash
  will just replace the left-side.
  
  Options key will not be parsed under recurse_hash=0.
  
  Example:
  
   mode_merge({h=>{a=>1}}, {h=>{b=>1}}                   ); # {h=>{a=>1, b=>1}}
   mode_merge({h=>{a=>1}}, {h=>{b=>1}}, {recurse_hash=>0}); # {h=>{b=>1}}
  
  =head2 recurse_array => BOOL
  
  Context: config, options key
  
  Default: 0
  
  Whether to recursively merge array. When 1, each element is
  recursively merged. Otherwise, the right-side array will just replace
  the left-side.
  
  Example:
  
   mode_merge([1, 1], [4]                    ); # [4, 1]
   mode_merge([1, 1], [4], {recurse_array=>0}); # [2]
  
  =head2 parse_prefix => BOOL
  
  Context: config, options key
  
  Default: 1
  
  Whether to parse merge prefix in hash keys. If set to 0, merging
  behaviour is similar to most other nested merge modules.
  
   mode_merge({a=>1}, {"+a"=>2}                   ); # {a=>3}
   mode_merge({a=>1}, {"+a"=>2}, {parse_prefix=>0}); # {a=>1, "+a"=>2}
  
  =head2 wanted_path => ARRAYREF
  
  Context: config, options key
  
  Default: undef
  
  If set, merging is only done to the specified "branch". Useful to save
  time/storage when merging large hash "trees" while you only want a
  certain branch of the trees (e.g. resolving just a config variable
  from several config hashes).
  
  Example:
  
   mode_merge(
     {
      user => {
        jajang => { quota => 100, admin => 1 },
        paijo  => { quota =>  50, admin => 0 },
        kuya   => { quota => 150, admin => 0 },
      },
      groups => [qw/admin staff/],
     },
     {
      user => {
        jajang => { quota => 1000 },
      }
     }
   );
  
  With wanted_path unset, the result would be:
  
     {
      user => {
        jajang => { quota => 1000, admin => 1 },
        paijo  => { quota =>   50, admin => 0 },
        kuya   => { quota =>  150, admin => 0 },
      }
      groups => [qw/admin staff/],
     }
  
  With wanted_path set to ["user", "jajang", "quota"] (in other words,
  you're saying that you'll be disregarding other branches), the result
  would be:
  
     {
      user => {
        jajang => { quota => 1000, admin => undef },
      }
     }
  
  =head2 default_mode => 'NORMAL' | 'ADD' | 'CONCAT' | 'SUBTRACT' | 'DELETE' | 'KEEP' | ...
  
  Context: config, options key
  
  Default: NORMAL
  
  Example:
  
   mode_merge(3, 4                         ); # 4
   mode_merge(3, 4, {default_mode => "ADD"}); # 7
  
  =head2 disable_modes => ARRAYREF
  
  Context: config, options key
  
  Default: []
  
  List of modes to ignore the prefixes of.
  
  Example:
  
   mode_merge({add=>1, del=>2, concat=>3},
              {add=>2, "!del"=>0, .concat=>4},
              {disable_modes=>[qw/CONCAT/]});
   #          {add=>3,         concat=>3, .concat=>4}
  
  See also: C<parse_prefix> which if set to 0 will in effect disable all
  modes except the default mode.
  
  =head2 allow_create_array => BOOL
  
  Context: config, options key
  
  Default: 1
  
  If enabled, then array creation will be allowed (from something
  non-array, like a hash/scalar). Setting to 0 is useful if you want to
  avoid the merge to "change the structure" of the left side.
  
  Example:
  
   mode_merge(1, [1,2]                         ); # success, result=[1,2]
   mode_merge(1, [1,2], {allow_create_array=>0}); # failed, can't create array
  
  =head2 allow_create_hash => BOOL
  
  Context: config, options key
  
  Default: 1
  
  If enabled, then hash creation will be allowed (from something
  non-hash, like array/scalar). Setting to 0 is useful if you want to
  avoid the merge to "change the structure" of the left side.
  
  Example:
  
   mode_merge(1, {a=>1}                        ); # success, result={a=>1}
   mode_merge(1, {a=>1}, {allow_create_hash=>0}); # failed, can't create hash
  
  =head2 allow_destroy_array => BOOL
  
  Context: config, options key
  
  Default: 1
  
  If enabled, then replacing array on the left side with non-array
  (e.g. hash/scalar) on the right side is allowed. Setting to 0 is
  useful if you want to avoid the merge to "change the structure" of the
  left side.
  
  Example:
  
   mode_merge([1,2], {}                          ); # success, result={}
   mode_merge([1,2], {}, {allow_destroy_array=>0}); # failed, can't destroy array
  
  =head2 allow_destroy_hash => BOOL
  
  Context: config, options key
  
  Default: 1
  
  If enabled, then replacing hash on the left side with non-hash
  (e.g. array/scalar) on the right side is allowed. Setting to 0 is
  useful if you want to avoid the merge to "change the structure" of the
  left side.
  
  Example:
  
   mode_merge({a=>1}, []                         ); # success, result=[]
   mode_merge({a=>1}, [], {allow_destroy_hash=>0}); # failed, can't destroy hash
  
  =head2 exclude_parse => ARRAYREF
  
  Context: config, options key
  
  Default: undef
  
  The list of hash keys that should not be parsed for prefix and merged
  as-is using the default mode.
  
  If C<include_parse> is also mentioned then only keys in
  C<include_parse> and not in C<exclude_parse> will be parsed for
  prefix.
  
  Example:
  
   mode_merge({a=>1, b=>2}, {"+a"=>3, "+b"=>4}, {exclude_parse=>["+b"]}); # {a=>4, b=>2, "+b"=>4}
  
  =head2 exclude_parse_regex => REGEX
  
  Context: config, options key
  
  Default: undef
  
  Just like C<exclude_parse> but using regex instead of list.
  
  =head2 include_parse => ARRAYREF
  
  Context: config, options key
  
  Default: undef
  
  If specified, then only hash keys listed by this setting will be
  parsed for prefix. The rest of the keys will not be parsed and merged
  as-is using the default mode.
  
  If C<exclude_parse> is also mentioned then only keys in
  C<include_parse> and not in C<exclude_parse> will be parsed for
  prefix.
  
  Example:
  
   mode_merge({a=>1, b=>2, c=>3}, {"+a"=>4, "+b"=>5, "+c"=>6},
              {include_parse=>["+a"]}); # {a=>1, "+a"=>4, b=>7, c=>3, "+c"=>6}
  
  =head2 include_parse_regex => REGEX
  
  Context: config, options key
  
  Default: undef
  
  Just like C<include_parse> but using regex instead of list.
  
  =head2 exclude_merge => ARRAYREF
  
  Context: config, options key
  
  Default: undef
  
  The list of hash keys on the left side that should not be merged and
  instead copied directly to the result. All merging keys on the right
  side will be ignored.
  
  If C<include_merge> is also mentioned then only keys in
  C<include_merge> and not in C<exclude_merge> will be merged.
  
  Example:
  
   mode_merge({a=>1}, {"+a"=>20, "-a"=>30}, {exclude_merge=>["a"]}); # {a=>1}
  
  =head2 exclude_merge_regex => REGEX
  
  Context: config, options key
  
  Default: undef
  
  Just like C<exclude_merge> but using regex instead of list.
  
  =head2 include_merge => ARRAYREF
  
  Context: config, options key
  
  Default: undef
  
  If specified, then only hash keys listed by this setting will be
  merged.
  
  If C<exclude_merge> is also mentioned then only keys in
  C<include_merge> and not in C<exclude_merge> will be merged.
  
  Example:
  
   mode_merge({a=>1, b=>2, c=>3}, {"+a"=>40, "+b"=>50, "+c"=>60, "!c"=>70},
              {include_merge=>["a"]}); # {a=>41, b=>2, c=>3}
  
  =head2 include_merge_regex => ARRAYREF
  
  Context: config, options key
  
  Default: undef
  
  Just like C<include_merge> but using regex instead of list.
  
  =head2 set_prefix => HASHREF
  
  Context: config, options key
  
  Default: undef
  
  Temporarily change the prefix character for each mode. Value is
  hashref where each hash key is mode and the value is a new prefix
  string.
  
   mode_merge({a=>1, c=>2}, {'+a'=>10, '.c'=>20});                                        # {a=>11, c=>220}
   mode_merge({a=>1, c=>2}, {'+a'=>10, '.c'=>20}, {set_prefix=>{ADD=>'.', CONCAT=>'+'}}); # {a=>110, c=>22}
  
  =head2 readd_prefix => BOOL
  
  Context: config, options key
  
  Default: 1
  
  When merging two hashes, the prefixes are first stripped before
  merging. After merging is done, the prefixes by default will be
  re-added. This is done so that modes which are "sticky" (like KEEP)
  can propagate their mode). Setting C<readd_prefix> to 0 will prevent
  their stickiness.
  
   mode_merge({"^a"=>1}, {a=>2});                    # {"^a"=>1}
   mode_merge({"^a"=>1}, {a=>2}, {readd_prefix=>0}); # { "a"=>1}
  
  =head2 premerge_pair_filter => CODEREF
  
  Context: config, options key
  
  Default: undef
  
  Pass the key and value of each hash pair to a subroutine before
  merging (and before the keys are stripped for mode prefixes). Will
  push error if there is conflicting key in the hash.
  
  The subroutine should return a list of new key(s) and value(s). If key
  is undef then it means the pair should be discarded. This way, the
  filter is able to add or remove pairs from the hash.
  
   mode_merge({a=>1}, {"+amok"=>2},
              {premerge_pair_filter=>sub{ uc(substr($_[0],0,2)), $_[1]*2 }});
   # {"A"=>6}
  
  =head2 options_key => STR
  
  Context: config
  
  Default: '' (empty string)
  
  If defined, then when merging two hashes, this key will be searched
  first on the left-side and right-side hash. The values will then be
  merged and override (many of) the configuration.
  
  Options key is analogous to Apache's C<.htaccess> mechanism, which
  allows setting configuration on a per-directory (per-hash)
  basis. There's even an C<allow_override> config similar to Apache
  directive of the same name.
  
  If you want to disable processing of options key, set this to undef.
  
  Example:
  
   mode_merge({a=>1, {x=>3}},
              {a=>2, {x=>4}},
              {default_mode=>'ADD'}); # {a=>3, {x=>7}}
   mode_merge({a=>1, {x=>3}},
              {a=>2, {x=>4, ''=>{default_mode=>'CONCAT'}}},
              {default_mode=>'ADD'}); # {a=>3, {x=>34}}
  
  On the above example, C<default_mode> is set to ADD. But in the
  {x=>...} subhash, C<default_mode> is changed to CONCAT by the options
  key.
  
  =head2 allow_override => REGEX
  
  Context: config
  
  Default: undef
  
  If defined, then only config names matching regex will be able to be
  set in options key.
  
  If C<disallow_override> is also set, then only config names matching
  C<allow_override> and not matching C<disallow_override> will be able
  to be set in options key.
  
  =head2 disallow_override => REGEX
  
  Context: config
  
  Default: undef
  
  If defined, then config names matching regex will not be able to be
  set in options key.
  
  For example, if you want to restrict "structural changes" in merging
  while still allowing options key, you can set C<allow_create_hash>,
  C<allow_destroy_hash>, C<allow_create_array>, and
  C<allow_destroy_array> all to 0 and C<disallow_override> to
  C<allow_create|allow_destroy> to forbid overriding via options key.
  
  If C<disallow_override> is also set, then only config names matching
  C<allow_override> and not matching C<disallow_override> will be able
  to be set in options key.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-ModeMerge>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-ModeMerge>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-ModeMerge>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_MODEMERGE_CONFIG

    $main::fatpacked{"Data/ModeMerge/Mode/ADD.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_MODEMERGE_MODE_ADD';
  package Data::ModeMerge::Mode::ADD;
  
  our $DATE = '2016-07-22'; # DATE
  our $VERSION = '0.35'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  use Mo qw(build default);
  extends 'Data::ModeMerge::Mode::NORMAL';
  
  sub name { 'ADD' }
  
  sub precedence_level { 3 }
  
  sub default_prefix { '+' }
  
  sub default_prefix_re { qr/^\+/ }
  
  sub merge_SCALAR_SCALAR {
      my ($self, $key, $l, $r) = @_;
      ($key, ( $l // 0 ) + $r);
  }
  
  sub merge_SCALAR_ARRAY {
      my ($self, $key, $l, $r) = @_;
      $self->merger->push_error("Can't add scalar and array");
      return;
  }
  
  sub merge_SCALAR_HASH {
      my ($self, $key, $l, $r) = @_;
      $self->merger->push_error("Can't add scalar and hash");
      return;
  }
  
  sub merge_ARRAY_SCALAR {
      my ($self, $key, $l, $r) = @_;
      $self->merger->push_error("Can't add array and scalar");
      return;
  }
  
  sub merge_ARRAY_ARRAY {
      my ($self, $key, $l, $r) = @_;
      ($key, [ @$l, @$r ]);
  }
  
  sub merge_ARRAY_HASH {
      my ($self, $key, $l, $r) = @_;
      $self->merger->push_error("Can't add array and hash");
      return;
  }
  
  sub merge_HASH_SCALAR {
      my ($self, $key, $l, $r) = @_;
      $self->merger->push_error("Can't add hash and scalar");
      return;
  }
  
  sub merge_HASH_ARRAY {
      my ($self, $key, $l, $r) = @_;
      $self->merger->push_error("Can't add hash and array");
      return;
  }
  
  1;
  # ABSTRACT: Handler for Data::ModeMerge ADD merge mode
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::ModeMerge::Mode::ADD - Handler for Data::ModeMerge ADD merge mode
  
  =head1 VERSION
  
  This document describes version 0.35 of Data::ModeMerge::Mode::ADD (from Perl distribution Data-ModeMerge), released on 2016-07-22.
  
  =head1 SYNOPSIS
  
   use Data::ModeMerge;
  
  =head1 DESCRIPTION
  
  This is the class to handle ADD merge mode.
  
  =for Pod::Coverage ^merge_.*
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-ModeMerge>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-ModeMerge>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-ModeMerge>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_MODEMERGE_MODE_ADD

    $main::fatpacked{"Data/ModeMerge/Mode/Base.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_MODEMERGE_MODE_BASE';
  package Data::ModeMerge::Mode::Base;
  
  our $DATE = '2016-07-22'; # DATE
  our $VERSION = '0.35'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  #use Data::Dmp;
  
  #use Log::Any '$log';
  use Mo qw(build default);
  
  #use Data::Clone qw/clone/;
  
  has merger => (is => 'rw');
  has prefix => (is => 'rw');
  has prefix_re => (is => 'rw');
  has check_prefix_sub => (is => 'rw');
  has add_prefix_sub => (is => 'rw');
  has remove_prefix_sub => (is => 'rw');
  
  sub name {
      die "Subclass must provide name()";
  }
  
  sub precedence_level {
      die "Subclass must provide precedence_level()";
  }
  
  sub default_prefix {
      die "Subclass must provide default_prefix()";
  }
  
  sub default_prefix_re {
      die "Subclass must provide default_prefix_re()";
  }
  
  sub BUILD {
      my ($self) = @_;
      $self->prefix($self->default_prefix);
      $self->prefix_re($self->default_prefix_re);
  }
  
  sub check_prefix {
      my ($self, $hash_key) = @_;
      if ($self->check_prefix_sub) {
          $self->check_prefix_sub->($hash_key);
      } else {
          $hash_key =~ $self->prefix_re;
      }
  }
  
  sub add_prefix {
      my ($self, $hash_key) = @_;
      if ($self->add_prefix_sub) {
          $self->add_prefix_sub->($hash_key);
      } else {
          $self->prefix . $hash_key;
      }
  }
  
  sub remove_prefix {
      my ($self, $hash_key) = @_;
      if ($self->remove_prefix_sub) {
          $self->remove_prefix_sub->($hash_key);
      } else {
          my $re = $self->prefix_re;
          $hash_key =~ s/$re//;
          $hash_key;
      }
  }
  
  sub merge_ARRAY_ARRAY {
      my ($self, $key, $l, $r) = @_;
      my $mm = $self->merger;
      my $c = $mm->config;
      return $self->merge_SCALAR_SCALAR($key, $l, $r) unless $c->recurse_array;
      return if $c->wanted_path && !$mm->_path_is_included($mm->path, $c->wanted_path);
  
      my @res;
      my @backup;
      my $la = @$l;
      my $lb = @$r;
      push @{ $mm->path }, -1;
      for my $i (0..($la > $lb ? $la : $lb)-1) {
          #print "DEBUG: merge_A_A: #$i: a->[$i]=".Data::Dumper->new([$l->[$i]])->Indent(0)->Terse(1)->Dump.", b->[$i]=".Data::Dumper->new([$r->[$i]])->Indent(0)->Terse(1)->Dump."\n";
          $mm->path->[-1] = $i;
          if ($i < $la && $i < $lb) {
              push @backup, $l->[$i];
              my ($subnewkey, $subres, $subbackup, $is_circular) = $mm->_merge($i, $l->[$i], $r->[$i], $c->default_mode);
              last if @{ $mm->errors };
              if ($is_circular) {
                  push @res, undef;
                  #print "DEBUG: pushing todo to mem<".$mm->cur_mem_key.">\n";
                  push @{ $mm->mem->{ $mm->cur_mem_key }{todo} }, sub {
                      my ($subnewkey, $subres, $subbackup) = @_;
                      #print "DEBUG: Entering todo subroutine (i=$i)\n";
                      $res[$i] = $subres;
                  }
              } else {
                  push @res, $subres;# if defined($newkey); = we allow DELETE on array?
              }
          } elsif ($i < $la) {
              push @res, $l->[$i];
          } else {
              push @res, $r->[$i];
          }
      }
      pop @{ $mm->path };
      ($key, \@res, \@backup);
  }
  
  sub _prefilter_hash {
      my ($self, $h, $desc, $sub) = @_;
      my $mm = $self->merger;
  
      if (ref($sub) ne 'CODE') {
          $mm->push_error("$desc failed: filter must be a coderef");
          return;
      }
  
      my $res = {};
      for (keys %$h) {
          my @r = $sub->($_, $h->{$_});
          while (my ($k, $v) = splice @r, 0, 2) {
              next unless defined $k;
              if (exists $res->{$k}) {
                  $mm->push_error("$desc failed; key conflict: ".
                                  "$_ -> $k, but key $k already exists");
                  return;
              }
              $res->{$k} = $v;
          }
      }
  
      $res;
  }
  
  # turn {[prefix]key => val, ...} into { key => [MODE, val], ...}, push
  # error if there's conflicting key
  sub _gen_left {
      my ($self, $l, $mode, $esub, $ep, $ip, $epr, $ipr) = @_;
      my $mm = $self->merger;
      my $c = $mm->config;
  
      #print "DEBUG: Entering _gen_left(".dmp($l).", $mode, ...)\n";
  
      if ($c->premerge_pair_filter) {
          $l = $self->_prefilter_hash($l, "premerge filter left hash",
                                      $c->premerge_pair_filter);
          return if @{ $mm->errors };
      }
  
      my $hl = {};
      if ($c->parse_prefix) {
          for (keys %$l) {
              my $do_parse = 1;
              $do_parse = 0 if $do_parse && $ep  &&  $mm->_in($_, $ep);
              $do_parse = 0 if $do_parse && $ip  && !$mm->_in($_, $ip);
              $do_parse = 0 if $do_parse && $epr &&  /$epr/;
              $do_parse = 0 if $do_parse && $ipr && !/$ipr/;
  
              if ($do_parse) {
                  my $old = $_;
                  my $m2;
                  ($_, $m2) = $mm->remove_prefix($_);
                  next if $esub && !$esub->($_);
                  if ($old ne $_ && exists($l->{$_})) {
                      $mm->push_error("Conflict when removing prefix on left-side ".
                                      "hash key: $old -> $_ but $_ already exists");
                      return;
                  }
                  $hl->{$_} = [$m2, $l->{$old}];
              } else {
                  next if $esub && !$esub->($_);
                  $hl->{$_} = [$mode, $l->{$_}];
              }
          }
      } else {
          for (keys %$l) {
              next if $esub && !$esub->($_);
              $hl->{$_} = [$mode, $l->{$_}];
          }
      }
  
      #print "DEBUG: Leaving _gen_left, result = ".dmp($hl)."\n";
      $hl;
  }
  
  # turn {[prefix]key => val, ...} into { key => {MODE=>val, ...}, ...},
  # push error if there's conflicting key+MODE
  sub _gen_right {
      my ($self, $r, $mode, $esub, $ep, $ip, $epr, $ipr) = @_;
      my $mm = $self->merger;
      my $c = $mm->config;
  
      #print "DEBUG: Entering _gen_right(".dmp($r).", $mode, ...)\n";
  
      if ($c->premerge_pair_filter) {
          $r = $self->_prefilter_hash($r, "premerge filter right hash",
                                      $c->premerge_pair_filter);
          return if @{ $mm->errors };
      }
  
      my $hr = {};
      if ($c->parse_prefix) {
          for (keys %$r) {
              my $do_parse = 1;
              $do_parse = 0 if $do_parse && $ep  &&  $mm->_in($_, $ep);
              $do_parse = 0 if $do_parse && $ip  && !$mm->_in($_, $ip);
              $do_parse = 0 if $do_parse && $epr &&  /$epr/;
              $do_parse = 0 if $do_parse && $ipr && !/$ipr/;
  
              if ($do_parse) {
                  my $old = $_;
                  my $m2;
                  ($_, $m2) = $mm->remove_prefix($_);
                  next if $esub && !$esub->($_);
                  if (exists $hr->{$_}{$m2}) {
                      $mm->push_error("Conflict when removing prefix on right-side ".
                                      "hash key: $old($m2) -> $_ ($m2) but $_ ($m2) ".
                                      "already exists");
                      return;
                  }
                  $hr->{$_}{$m2} = $r->{$old};
              } else {
                  next if $esub && !$esub->($_);
                  $hr->{$_} = {$mode => $r->{$_}};
              }
          }
      } else {
          for (keys %$r) {
              next if $esub && !$esub->($_);
              $hr->{$_} = {$mode => $r->{$_}}
          }
      }
      #print "DEBUG: Leaving _gen_right, result = ".dmp($hr)."\n";
      $hr;
  }
  
  # merge two hashes which have been prepared by _gen_left and
  # _gen_right, will result in { key => [final_mode, val], ... }
  sub _merge_gen {
      my ($self, $hl, $hr, $mode, $em, $im, $emr, $imr) = @_;
      my $mm = $self->merger;
      my $c = $mm->config;
  
      #print "DEBUG: Entering _merge_gen(".dmp($hl).", ".dmp($hr).", $mode, ...)\n";
  
      my $res = {};
      my $backup = {};
  
      my %k = map {$_=>1} keys(%$hl), keys(%$hr);
      push @{ $mm->path }, "";
    K:
      for my $k (keys %k) {
          my @o;
          $mm->path->[-1] = $k;
          my $do_merge = 1;
          $do_merge = 0 if $do_merge && $em  &&  $mm->_in($k, $em);
          $do_merge = 0 if $do_merge && $im  && !$mm->_in($k, $im);
          $do_merge = 0 if $do_merge && $emr && $k =~ /$emr/;
          $do_merge = 0 if $do_merge && $imr && $k !~ /$imr/;
  
          if (!$do_merge) {
              $res->{$k} = $hl->{$k} if $hl->{$k};
              next K;
          }
  
          $backup->{$k} = $hl->{$k}[1] if $hl->{$k} && $hr->{$k};
          if ($hl->{$k}) {
              push @o, $hl->{$k};
          }
          if ($hr->{$k}) {
              my %m = map {$_=>$mm->modes->{$_}->precedence_level} keys %{ $hr->{$k} };
              #print "DEBUG: \\%m=".Data::Dumper->new([\%m])->Indent(0)->Terse(1)->Dump."\n";
              push @o, map { [$_, $hr->{$k}{$_}] } sort { $m{$b} <=> $m{$a} } keys %m;
          }
          my $final_mode;
          my $is_circular;
          my $v;
          #print "DEBUG: k=$k, o=".Data::Dumper->new([\@o])->Indent(0)->Terse(1)->Dump."\n";
          for my $i (0..$#o) {
              if ($i == 0) {
                  my $mh = $mm->modes->{$o[$i][0]};
                  if (@o == 1 &&
                          (($hl->{$k} && $mh->can("merge_left_only")) ||
                           ($hr->{$k} && $mh->can("merge_right_only")))) {
                      # there's only left-side or right-side
                      my $meth = $hl->{$k} ? "merge_left_only" : "merge_right_only";
                      my ($subnewkey, $v, $subbackup, $is_circular, $newmode) = $mh->$meth($k, $o[$i][1]); # XXX handle circular?
                      next K unless defined($subnewkey);
                      $final_mode = $newmode;
                      $v = $res;
                  } else {
                      $final_mode = $o[$i][0];
                      $v = $o[$i][1];
                  }
              } else {
                  my $m = $mm->combine_rules->{"$final_mode+$o[$i][0]"}
                      or do {
                          $mm->push_error("Can't merge $final_mode + $o[$i][0]");
                          return;
                      };
                  #print "DEBUG: merge $final_mode+$o[$i][0] = $m->[0], $m->[1]\n";
                  my ($subnewkey, $subbackup);
                  ($subnewkey, $v, $subbackup, $is_circular) = $mm->_merge($k, $v, $o[$i][1], $m->[0]);
                  return if @{ $mm->errors };
                  if ($is_circular) {
                      if ($i < $#o) {
                          $mm->push_error("Can't handle circular at $i of $#o merges (mode $m->[0]): not the last merge");
                          return;
                      }
                      #print "DEBUG: pushing todo to mem<".$mm->cur_mem_key.">\n";
                      push @{ $mm->mem->{ $mm->cur_mem_key }{todo} }, sub {
                          my ($subnewkey, $subres, $subbackup) = @_;
                          #print "DEBUG: Entering todo subroutine (k=$k)\n";
                          my $final_mode = $m->[1];
                          #XXX return unless defined($subnewkey);
                          $res->{$k} = [$m->[1], $subres];
                          if ($c->readd_prefix) {
                              # XXX if there is a conflict error in
                              # _readd_prefix, how to adjust path?
                              $self->_readd_prefix($res, $k, $c->default_mode);
                          } else {
                              $res->{$k} = $res->{$k}[1];
                          }
                      };
                      delete $res->{$k};
                  }
                  next K unless defined $subnewkey;
                  $final_mode = $m->[1];
              }
          }
          $res->{$k} = [$final_mode, $v] unless $is_circular;
      }
      pop @{ $mm->path };
      #print "DEBUG: Leaving _merge_gen, res = ".dmp($res)."\n";
      ($res, $backup);
  }
  
  # hh is {key=>[MODE, val], ...} which is the format returned by _merge_gen
  sub _readd_prefix {
      my ($self, $hh, $k, $defmode) = @_;
      my $mm = $self->merger;
      my $c = $mm->config;
  
      my $m = $hh->{$k}[0];
      if ($m eq $defmode) {
          $hh->{$k} = $hh->{$k}[1];
      } else {
          my $kp = $mm->modes->{$m}->add_prefix($k);
          if (exists $hh->{$kp}) {
              $mm->push_error("BUG: conflict when re-adding prefix after merge: $kp");
              return;
          }
          $hh->{$kp} = $hh->{$k}[1];
          delete $hh->{$k};
      }
  }
  
  sub merge_HASH_HASH {
      my ($self, $key, $l, $r, $mode) = @_;
      my $mm = $self->merger;
      my $c = $mm->config;
      $mode //= $c->default_mode;
      #print "DEBUG: entering merge_H_H(".dmp($l).", ".dmp($r).", $mode), config=($c)=",dmp($c),"\n";
      #$log->trace("using config($c)");
  
      return $self->merge_SCALAR_SCALAR($key, $l, $r) unless $c->recurse_hash;
      return if $c->wanted_path && !$mm->_path_is_included($mm->path, $c->wanted_path);
  
      # STEP 1. MERGE LEFT & RIGHT OPTIONS KEY
      my $config_replaced;
      my $orig_c = $c;
      my $ok = $c->options_key;
      {
          last unless defined $ok;
  
          my $okl = $self->_gen_left ($l, $mode, sub {$_[0] eq $ok});
          return if @{ $mm->errors };
  
          my $okr = $self->_gen_right($r, $mode, sub {$_[0] eq $ok});
          return if @{ $mm->errors };
  
          push @{ $mm->path }, $ok;
          my ($res, $backup);
          {
              local $c->{readd_prefix} = 0;
              ($res, $backup) = $self->_merge_gen($okl, $okr, $mode);
          }
          pop @{ $mm->path };
          return if @{ $mm->errors };
  
          #print "DEBUG: merge options key (".dmp($okl).", ".dmp($okr).") = ".dmp($res)."\n";
  
          $res = $res->{$ok} ? $res->{$ok}[1] : undef;
          if (defined($res) && ref($res) ne 'HASH') {
              $mm->push_error("Invalid options key after merge: value must be hash");
              return;
          }
          last unless keys %$res;
          #$log->tracef("cloning config ...");
          # Data::Clone by default does *not* deep-copy object
          #my $c2 = clone($c);
          my $c2 = bless({ %$c }, ref($c));
  
          for (keys %$res) {
              if ($c->allow_override) {
                  my $re = $c->allow_override;
                  if (!/$re/) {
                      $mm->push_error("Configuration in options key `$_` not allowed by allow_override $re");
                      return;
                  }
              }
              if ($c->disallow_override) {
                  my $re = $c->disallow_override;
                  if (/$re/) {
                      $mm->push_error("Configuration in options key `$_` not allowed by disallow_override $re");
                      return;
                  }
              }
              if ($mm->_in($_, $c->_config_config)) {
                  $mm->push_error("Configuration not allowed in options key: $_");
                  return;
              }
              if ($_ ne $ok && !$mm->_in($_, $c->_config_ok)) {
                  $mm->push_error("Unknown configuration in options key: $_");
                  return;
              }
              $c2->$_($res->{$_}) unless $_ eq $ok;
          }
          $mm->config($c2);
          $config_replaced++;
          $c = $c2;
          #$log->trace("config now changed to $c2");
      }
  
      my $sp = $c->set_prefix;
      my $saved_prefixes;
      if (defined($sp)) {
          if (ref($sp) ne 'HASH') {
              $mm->push_error("Invalid config value `set_prefix`: must be a hash");
              return;
          }
          $saved_prefixes = {};
          for my $mh (values %{ $mm->modes }) {
              my $n = $mh->name;
              if ($sp->{$n}) {
                  $saved_prefixes->{$n} = {
                      prefix => $mh->prefix,
                      prefix_re => $mh->prefix_re,
                      check_prefix_sub => $mh->check_prefix_sub,
                      add_prefix_sub => $mh->add_prefix_sub,
                      remove_prefix_sub => $mh->remove_prefix_sub,
                  };
                  $mh->prefix($sp->{$n});
                  my $re = quotemeta($sp->{$n});
                  $mh->prefix_re(qr/^$re/);
                  $mh->check_prefix_sub(undef);
                  $mh->add_prefix_sub(undef);
                  $mh->remove_prefix_sub(undef);
              }
          }
      }
  
      my $ep = $c->exclude_parse;
      my $ip = $c->include_parse;
      if (defined($ep) && ref($ep) ne 'ARRAY') {
          $mm->push_error("Invalid config value `exclude_parse`: must be an array");
          return;
      }
      if (defined($ip) && ref($ip) ne 'ARRAY') {
          $mm->push_error("Invalid config value `include_parse`: must be an array");
          return;
      }
  
      my $epr = $c->exclude_parse_regex;
      my $ipr = $c->include_parse_regex;
      if (defined($epr)) {
          eval { $epr = qr/$epr/ };
          if ($@) {
              $mm->push_error("Invalid config value `exclude_parse_regex`: invalid regex: $@");
              return;
          }
      }
      if (defined($ipr)) {
          eval { $ipr = qr/$ipr/ };
          if ($@) {
              $mm->push_error("Invalid config value `include_parse_regex`: invalid regex: $@");
              return;
          }
      }
  
      # STEP 2. PREPARE LEFT HASH
      my $hl = $self->_gen_left ($l, $mode, sub {defined($ok) ? $_[0] ne $ok : 1}, $ep, $ip, $epr, $ipr);
      return if @{ $mm->errors };
  
      # STEP 3. PREPARE RIGHT HASH
      my $hr = $self->_gen_right($r, $mode, sub {defined($ok) ? $_[0] ne $ok : 1}, $ep, $ip, $epr, $ipr);
      return if @{ $mm->errors };
  
      #print "DEBUG: hl=".Data::Dumper->new([$hl])->Indent(0)->Terse(1)->Dump."\n";
      #print "DEBUG: hr=".Data::Dumper->new([$hr])->Indent(0)->Terse(1)->Dump."\n";
  
      my $em = $c->exclude_merge;
      my $im = $c->include_merge;
      if (defined($em) && ref($em) ne 'ARRAY') {
          $mm->push_error("Invalid config value `exclude_marge`: must be an array");
          return;
      }
      if (defined($im) && ref($im) ne 'ARRAY') {
          $mm->push_error("Invalid config value `include_merge`: must be an array");
          return;
      }
  
      my $emr = $c->exclude_merge_regex;
      my $imr = $c->include_merge_regex;
      if (defined($emr)) {
          eval { $emr = qr/$emr/ };
          if ($@) {
              $mm->push_error("Invalid config value `exclude_merge_regex`: invalid regex: $@");
              return;
          }
      }
      if (defined($imr)) {
          eval { $imr = qr/$imr/ };
          if ($@) {
              $mm->push_error("Invalid config value `include_merge_regex`: invalid regex: $@");
              return;
          }
      }
  
      # STEP 4. MERGE LEFT & RIGHT
      my ($res, $backup) = $self->_merge_gen($hl, $hr, $mode, $em, $im, $emr, $imr);
      return if @{ $mm->errors };
  
      #print "DEBUG: intermediate res(5) = ".Data::Dumper->new([$res])->Indent(0)->Terse(1)->Dump."\n";
  
      # STEP 5. TURN BACK {key=>[MODE=>val]}, ...} INTO {(prefix)key => val, ...}
      if ($c->readd_prefix) {
          for my $k (keys %$res) {
              $self->_readd_prefix($res, $k, $c->default_mode);
          }
      } else {
          $res->{$_} = $res->{$_}[1] for keys %$res;
      }
  
      if ($saved_prefixes) {
          for (keys %$saved_prefixes) {
              my $mh = $mm->modes->{$_};
              my $s = $saved_prefixes->{$_};
              $mh->prefix($s->{prefix});
              $mh->prefix_re($s->{prefix_re});
              $mh->check_prefix_sub($s->{check_prefix_sub});
              $mh->add_prefix_sub($s->{add_prefix_sub});
              $mh->remove_prefix_sub($s->{remove_prefix_sub});
          }
      }
  
      # restore config
      if ($config_replaced) {
          $mm->config($orig_c);
          #print "DEBUG: Restored config, config=", dmp($mm->config), "\n";
      }
  
      #print "DEBUG: backup = ".Data::Dumper->new([$backup])->Indent(0)->Terse(1)->Dump."\n";
      #print "DEBUG: leaving merge_H_H, result = ".dmp($res)."\n";
      ($key, $res, $backup);
  }
  
  1;
  # ABSTRACT: Base class for Data::ModeMerge mode handler
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::ModeMerge::Mode::Base - Base class for Data::ModeMerge mode handler
  
  =head1 VERSION
  
  This document describes version 0.35 of Data::ModeMerge::Mode::Base (from Perl distribution Data-ModeMerge), released on 2016-07-22.
  
  =head1 SYNOPSIS
  
   use Data::ModeMerge;
  
  =head1 DESCRIPTION
  
  This is the base class for mode type handlers.
  
  =for Pod::Coverage ^(BUILD|merge_.+)$
  
  =head1 ATTRIBUTES
  
  =head2 merger
  
  =head2 prefix
  
  =head2 prefix_re
  
  =head2 check_prefix_sub
  
  =head2 add_prefix_sub
  
  =head2 remove_prefix_sub
  
  =head1 METHODS
  
  =head2 name
  
  Return name of mode. Subclass must override this method.
  
  =head2 precedence_level
  
  Return precedence level, which is a number. The greater the number,
  the higher the precedence. Subclass must override this method.
  
  =head2 default_prefix
  
  Return default prefix. Subclass must override this method.
  
  =head2 default_prefix_re
  
  Return default prefix regex. Subclass must override this method.
  
  =head2 check_prefix($hash_key)
  
  Return true if hash key has prefix for this mode.
  
  =head2 add_prefix($hash_key)
  
  Return hash key with added prefix of this mode.
  
  =head2 remove_prefix($hash_key)
  
  Return hash key with prefix of this mode prefix removed.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-ModeMerge>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-ModeMerge>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-ModeMerge>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_MODEMERGE_MODE_BASE

    $main::fatpacked{"Data/ModeMerge/Mode/CONCAT.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_MODEMERGE_MODE_CONCAT';
  package Data::ModeMerge::Mode::CONCAT;
  
  our $DATE = '2016-07-22'; # DATE
  our $VERSION = '0.35'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  use Mo qw(build default);
  extends 'Data::ModeMerge::Mode::ADD';
  
  sub name { 'CONCAT' }
  
  sub precedence_level { 2 }
  
  sub default_prefix { '.' }
  
  sub default_prefix_re { qr/^\./ }
  
  sub merge_SCALAR_SCALAR {
      my ($self, $key, $l, $r) = @_;
      ($key, ($l // "") . $r);
  }
  
  1;
  # ABSTRACT: Handler for Data::ModeMerge CONCAT merge mode
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::ModeMerge::Mode::CONCAT - Handler for Data::ModeMerge CONCAT merge mode
  
  =head1 VERSION
  
  This document describes version 0.35 of Data::ModeMerge::Mode::CONCAT (from Perl distribution Data-ModeMerge), released on 2016-07-22.
  
  =head1 SYNOPSIS
  
   use Data::ModeMerge;
  
  =head1 DESCRIPTION
  
  This is the class to handle CONCAT merge mode.
  
  =for Pod::Coverage ^merge_.*
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-ModeMerge>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-ModeMerge>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-ModeMerge>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_MODEMERGE_MODE_CONCAT

    $main::fatpacked{"Data/ModeMerge/Mode/DELETE.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_MODEMERGE_MODE_DELETE';
  package Data::ModeMerge::Mode::DELETE;
  
  our $DATE = '2016-07-22'; # DATE
  our $VERSION = '0.35'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  use Mo qw(build default);
  extends 'Data::ModeMerge::Mode::Base';
  
  sub name { 'DELETE' }
  
  sub precedence_level { 1 }
  
  sub default_prefix { '!' }
  
  sub default_prefix_re { qr/^!/ }
  
  # merge_left_only and merge_right_only are a bit different: they are
  # called with $l only or $r only instead of both, and should return an
  # extra argument $mode, i.e. ($key, $result, $backup, $is_circular,
  # $mode)
  sub merge_left_only {
      my ($self, $key, $l) = @_;
      return;
  }
  
  sub merge_right_only {
      my ($self, $key, $r) = @_;
      return;
  }
  
  sub merge_SCALAR_SCALAR {
      return;
  }
  
  sub merge_SCALAR_ARRAY {
      return;
  }
  
  sub merge_SCALAR_HASH {
      return;
  }
  
  sub merge_ARRAY_SCALAR {
      return;
  }
  
  sub merge_ARRAY_ARRAY {
      my ($self, $key, $l, $r) = @_;
      $self->merger->config->allow_destroy_array or
          $self->merger->push_error("Now allowed to destroy array via DELETE mode");
      return;
  }
  
  sub merge_ARRAY_HASH {
      return;
  }
  
  sub merge_HASH_SCALAR {
      return;
  }
  
  sub merge_HASH_ARRAY {
      return;
  }
  
  sub merge_HASH_HASH {
      my ($self, $key, $l, $r) = @_;
      $self->merger->config->allow_destroy_hash or
          $self->merger->push_error("Now allowed to destroy hash via DELETE mode");
      return;
  }
  
  1;
  # ABSTRACT: Handler for Data::ModeMerge DELETE merge mode
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::ModeMerge::Mode::DELETE - Handler for Data::ModeMerge DELETE merge mode
  
  =head1 VERSION
  
  This document describes version 0.35 of Data::ModeMerge::Mode::DELETE (from Perl distribution Data-ModeMerge), released on 2016-07-22.
  
  =head1 SYNOPSIS
  
   use Data::ModeMerge;
  
  =head1 DESCRIPTION
  
  This is the class to handle DELETE merge mode.
  
  =for Pod::Coverage ^merge_.*
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-ModeMerge>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-ModeMerge>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-ModeMerge>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_MODEMERGE_MODE_DELETE

    $main::fatpacked{"Data/ModeMerge/Mode/KEEP.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_MODEMERGE_MODE_KEEP';
  package Data::ModeMerge::Mode::KEEP;
  
  our $DATE = '2016-07-22'; # DATE
  our $VERSION = '0.35'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  use Mo qw(build default);
  extends 'Data::ModeMerge::Mode::Base';
  
  sub name { 'KEEP' }
  
  sub precedence_level { 6 }
  
  sub default_prefix { '^' }
  
  sub default_prefix_re { qr/^\^/ }
  
  sub merge_SCALAR_SCALAR {
      my ($self, $key, $l, $r) = @_;
      ($key, $l);
  }
  
  sub merge_SCALAR_ARRAY {
      my ($self, $key, $l, $r) = @_;
      ($key, $l);
  }
  
  sub merge_SCALAR_HASH {
      my ($self, $key, $l, $r) = @_;
      ($key, $l);
  }
  
  sub merge_ARRAY_SCALAR {
      my ($self, $key, $l, $r) = @_;
      ($key, $l);
  }
  
  sub merge_ARRAY_ARRAY {
      my ($self, $key, $l, $r) = @_;
      $self->SUPER::merge_ARRAY_ARRAY($key, $l, $r, 'KEEP');
  };
  
  sub merge_ARRAY_HASH {
      my ($self, $key, $l, $r) = @_;
      ($key, $l);
  }
  
  sub merge_HASH_SCALAR {
      my ($self, $key, $l, $r) = @_;
      ($key, $l);
  }
  
  sub merge_HASH_ARRAY {
      my ($self, $key, $l, $r) = @_;
      ($key, $l);
  }
  
  sub merge_HASH_HASH {
      my ($self, $key, $l, $r) = @_;
      $self->SUPER::merge_HASH_HASH($key, $l, $r, 'KEEP');
  };
  
  1;
  # ABSTRACT: Handler for Data::ModeMerge KEEP merge mode
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::ModeMerge::Mode::KEEP - Handler for Data::ModeMerge KEEP merge mode
  
  =head1 VERSION
  
  This document describes version 0.35 of Data::ModeMerge::Mode::KEEP (from Perl distribution Data-ModeMerge), released on 2016-07-22.
  
  =head1 SYNOPSIS
  
   use Data::ModeMerge;
  
  =head1 DESCRIPTION
  
  This is the class to handle KEEP merge mode.
  
  =for Pod::Coverage ^merge_.*
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-ModeMerge>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-ModeMerge>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-ModeMerge>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_MODEMERGE_MODE_KEEP

    $main::fatpacked{"Data/ModeMerge/Mode/NORMAL.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_MODEMERGE_MODE_NORMAL';
  package Data::ModeMerge::Mode::NORMAL;
  
  our $DATE = '2016-07-22'; # DATE
  our $VERSION = '0.35'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  use Mo qw(build default);
  extends 'Data::ModeMerge::Mode::Base';
  
  sub name { 'NORMAL' }
  
  sub precedence_level { 5 }
  
  sub default_prefix { '*' }
  
  sub default_prefix_re { qr/^\*/ }
  
  sub merge_SCALAR_SCALAR {
      my ($self, $key, $l, $r) = @_;
      ($key, $r);
  }
  
  sub merge_SCALAR_ARRAY {
      my ($self, $key, $l, $r) = @_;
      ($key, $r);
  }
  
  sub merge_SCALAR_HASH {
      my ($self, $key, $l, $r) = @_;
      ($key, $r);
  }
  
  sub merge_SCALAR_CODE {
      my ($self, $key, $l, $r) = @_;
      ($key, $r);
  }
  
  sub merge_ARRAY_SCALAR {
      my ($self, $key, $l, $r) = @_;
      ($key, $r);
  }
  
  sub merge_ARRAY_HASH {
      my ($self, $key, $l, $r) = @_;
      ($key, $r);
  }
  
  sub merge_ARRAY_CODE {
      my ($self, $key, $l, $r) = @_;
      ($key, $r);
  }
  
  sub merge_HASH_SCALAR {
      my ($self, $key, $l, $r) = @_;
      ($key, $r);
  }
  
  sub merge_HASH_ARRAY {
      my ($self, $key, $l, $r) = @_;
      ($key, $r);
  }
  
  sub merge_HASH_CODE {
      my ($self, $key, $l, $r) = @_;
      ($key, $r);
  }
  
  sub merge_CODE_SCALAR {
      my ($self, $key, $l, $r) = @_;
      ($key, $r);
  }
  
  sub merge_CODE_ARRAY {
      my ($self, $key, $l, $r) = @_;
      ($key, $r);
  }
  
  sub merge_CODE_HASH {
      my ($self, $key, $l, $r) = @_;
      ($key, $r);
  }
  
  sub merge_CODE_CODE {
      my ($self, $key, $l, $r) = @_;
      ($key, $r);
  }
  
  1;
  # ABSTRACT: Handler for Data::ModeMerge NORMAL merge mode
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::ModeMerge::Mode::NORMAL - Handler for Data::ModeMerge NORMAL merge mode
  
  =head1 VERSION
  
  This document describes version 0.35 of Data::ModeMerge::Mode::NORMAL (from Perl distribution Data-ModeMerge), released on 2016-07-22.
  
  =head1 SYNOPSIS
  
   use Data::ModeMerge;
  
  =head1 DESCRIPTION
  
  This is the class to handle NORMAL merge mode.
  
  =for Pod::Coverage ^merge_.*
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-ModeMerge>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-ModeMerge>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-ModeMerge>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_MODEMERGE_MODE_NORMAL

    $main::fatpacked{"Data/ModeMerge/Mode/SUBTRACT.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_MODEMERGE_MODE_SUBTRACT';
  package Data::ModeMerge::Mode::SUBTRACT;
  
  our $DATE = '2016-07-22'; # DATE
  our $VERSION = '0.35'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  use Mo qw(build default);
  extends 'Data::ModeMerge::Mode::NORMAL';
  
  sub name { 'SUBTRACT' }
  
  sub precedence_level { 4 }
  
  sub default_prefix { '-' }
  
  sub default_prefix_re { qr/^-/ }
  
  sub merge_SCALAR_SCALAR {
      my ($self, $key, $l, $r) = @_;
      ($key, $l - $r);
  }
  
  sub merge_SCALAR_ARRAY {
      my ($self, $key, $l, $r) = @_;
      $self->merger->push_error("Can't subtract scalar and array");
      return;
  }
  
  sub merge_SCALAR_HASH {
      my ($self, $key, $l, $r) = @_;
      $self->merger->push_error("Can't subtract scalar and hash");
      return;
  }
  
  sub merge_ARRAY_SCALAR {
      my ($self, $key, $l, $r) = @_;
      $self->merger->push_error("Can't subtract array and scalar");
      return;
  }
  
  sub merge_ARRAY_ARRAY {
      my ($self, $key, $l, $r) = @_;
      my @res;
      my $mm = $self->merger;
      for (@$l) {
          push @res, $_ unless $mm->_in($_, $r);
      }
      ($key, \@res);
  }
  
  sub merge_ARRAY_HASH {
      my ($self, $key, $l, $r) = @_;
      $self->merger->push_error("Can't subtract array and hash");
      return;
  }
  
  sub merge_HASH_SCALAR {
      my ($self, $key, $l, $r) = @_;
      $self->merger->push_error("Can't subtract hash and scalar");
      return;
  }
  
  sub merge_HASH_ARRAY {
      my ($self, $key, $l, $r) = @_;
      $self->merger->push_error("Can't subtract hash and array");
      return;
  }
  
  sub merge_HASH_HASH {
      my ($self, $key, $l, $r) = @_;
      my $mm = $self->merger;
  
      my %res;
      my $r2 = {};
      for (keys %$r) {
          my $k = $mm->check_prefix($_) ? $_ : $mm->add_prefix($_, 'DELETE');
          if ($k ne $_ && exists($r->{$k})) {
              $mm->push_error("Conflict when adding DELETE prefix on right-side hash key $_ ".
                              "for SUBTRACT merge: key $k already exists");
              return;
          }
          $r2->{$k} = $r->{$_};
      }
      $mm->_merge($key, $l, $r2, 'NORMAL');
  }
  
  1;
  # ABSTRACT: Handler for Data::ModeMerge SUBTRACT merge mode
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::ModeMerge::Mode::SUBTRACT - Handler for Data::ModeMerge SUBTRACT merge mode
  
  =head1 VERSION
  
  This document describes version 0.35 of Data::ModeMerge::Mode::SUBTRACT (from Perl distribution Data-ModeMerge), released on 2016-07-22.
  
  =head1 SYNOPSIS
  
   use Data::ModeMerge;
  
  =head1 DESCRIPTION
  
  This is the class to handle SUBTRACT merge mode.
  
  =for Pod::Coverage ^merge_.*
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-ModeMerge>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-ModeMerge>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-ModeMerge>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_MODEMERGE_MODE_SUBTRACT

    $main::fatpacked{"Data/Rmap.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_RMAP';
  package Data::Rmap;
  our $VERSION = 0.64;
  
  =head1 NAME
  
  Data::Rmap - recursive map, apply a block to a data structure
  
  =head1 SYNOPSIS
  
   $ perl -MData::Rmap -e 'print rmap { $_ } 1, [2,3], \\4, "\n"'
   1234
  
   $ perl -MData::Rmap=:all
   rmap_all { print (ref($_) || "?") ,"\n" } \@array, \%hash, \*glob;
  
   # OUTPUT (Note: a GLOB always has a SCALAR, hence the last two items)
   # ARRAY
   # HASH
   # GLOB
   # SCALAR
   # ?
  
  
   # Upper-case your leaves in-place
   $array = [ "a", "b", "c" ];
   $hash  = { key => "a value" };
   rmap { $_ = uc $_; } $array, $hash;
  
   use Data::Dumper; $Data::Dumper::Terse=1; $Data::Dumper::Indent=0;
   print Dumper($array), " ", Dumper($hash), "\n";
  
   # OUTPUT
   # ['A','B','C'] {'key' => 'A VALUE'}
  
  
   # Simple array dumper.
   # Uses $self->recurse method to alter traversal order
   ($dump) = rmap_to {
  
      return "'$_'" unless ref($_); # scalars are quoted and returned
  
      my $self = shift;
      # use $self->recurse to grab results and wrap them
      return '[ ' . join(', ', $self->recurse() ) . ' ]';
  
    } ARRAY|VALUE,  [ 1, [ 2, [ [ 3 ], 4 ] ], 5 ];
  
   print "$dump\n";
   # OUTPUT
   # [ '1', [ '2', [ [ '3' ], '4' ] ], '5' ]
  
  
  =head1 DESCRIPTION
  
   rmap BLOCK LIST
  
  Recursively evaluate a BLOCK over a list of data structures
  (locally setting $_ to each element) and return the list composed
  of the results of such evaluations.  $_ can be used to modify
  the elements.
  
  Data::Rmap currently traverses HASH, ARRAY, SCALAR and GLOB reference
  types and ignores others.  Depending on which rmap_* wrapper is used,
  the BLOCK is called for only scalar values, arrays, hashes, references,
  all elements or a customizable combination.
  
  The list of data structures is traversed pre-order in a depth-first fashion.
  That is, the BLOCK is called for the container reference before is it called
  for it's elements (although see "recurse" below for post-order).
  The values of a hash are traversed in the usual "values" order which
  may affect some applications.
  
  If the "cut" subroutine is called in the BLOCK then the traversal
  stops for that branch, say if you "cut" an array then the code is
  never called for it's elements (or their sub-elements).
  To simultaneously return values and cut, simply pass the return list
  to cut:  C<cut('add','to','returned');>
  
  The first parameter to the BLOCK is an object which maintains the
  state of the traversal.  Methods available on this object are
  described in L<State Object> below.
  
  =head1 EXPORTS
  
  By default:
  
   rmap, rmap_all, cut
  
  Optionally:
  
   rmap_scalar rmap_hash rmap_array rmap_code rmap_ref rmap_to
   :types => [ qw(NONE VALUE HASH ARRAY SCALAR REF CODE ALL) ],
   :all => ... # everything
  
  =head1 Functions
  
  The various names are just wrappers which select when to call
  the code BLOCK.  rmap_all always calls it, the others are more
  selective while rmap_to takes an extra parameter permitting you
  to provide selection criteria.  Furthermore, you can always
  just rmap_all and skip nodes which are not of interest.
  
  =over 4
  
  =item rmap_to { ... } $want, @data_structures;
  
  Most general first.
  
  Recurse the @data_structures and apply the BLOCK to
  elements selected by $want.  The $want parameter is the
  bitwise "or" of whatever types you choose (imported with :types):
  
   VALUE  - non-reference scalar, eg. 1
   HASH   - hash reference
   ARRAY  - array reference
   SCALAR - scalar refernce, eg. \1
   REF    - higher-level reference, eg. \\1, \\{}
            B<NOT> any reference type, see <Scalar::Util>'s reftype:
            perl -MScalar::Util=reftype -le 'print map reftype($_), \1, \\1'
   GLOB   - glob reference, eg. \*x
            (scalar, hash and array recursed, code too as of 0.63)
   ALL    - all of the above (not CODE)
   CODE   - code references (as of 0.63)
   NONE   - none of the above
  
  So to call the block for arrays and scalar values do:
  
   use Data::Rmap ':all';         # or qw(:types rmap_to)
   rmap { ... } ARRAY|VALUE, @data_structures;
  
  (ALL | CODE) and (ALL & !GLOB) might also be handy.
  
  The remainder of the wrappers are given in terms of the $want for rmap_to.
  
  =item rmap { ... } @list;
  
  Recurse and call the BLOCK on non-reference scalar values.  $want = VALUE
  
  =item rmap_all BLOCK LIST
  
  Recurse and call the BLOCK on everything.  $want = ALL
  
  =item rmap_scalar { ... }  @list
  
  Recurse and call the BLOCK on non-collection scalars.
  $want = VALUE|SCALAR|REF
  
  =item rmap_hash
  
  Recurse and call the BLOCK on hash refs.  $want = HASH
  
  =item rmap_array
  
  Recurse and call the BLOCK on array refs.  $want = ARRAY
  
  =item rmap_code
  
  Recurse and call the BLOCK on code refs.  $want = CODE
  
  =item rmap_ref
  
  Recurse and call the BLOCK on all "normal" references:
  $want = HASH|ARRAY|SCALAR|REF
  
  Note: rmap_ref isn't the same as rmap_to {} REF
  
  =item cut(@list)
  
  Don't traverse sub-elements and return the @list immediately.
  For example, if $_ is an ARRAY reference, then the array's elements
  are not traversed.
  
  If there's two paths to an element, both will need to be cut.
  
  =back
  
  =head1 State Object
  
  The first parameter to the BLOCK is an object which maintains
  most of the traversal state (except current node, which is $_).
  I<You will ignore it most of the time>.
  The "recurse" method may be useful.
  Other methods should only be used in throw away tools, see L<TODO>
  
  Methods:
  
  =over 4
  
  =item recurse
  
  Process child nodes of $_ now and return the result.
  
  This makes it easier to perform post-order and in-order
  processing of a structure.  Note that since the same "seen list"
  is used, the child nodes aren't reprocessed.
  
  =item code
  
  The code reference of the BLOCK itself.  Possible useful in
  some situations.
  
  =item seen
  
  Reference to the HASH used to track where we have visited.
  You may want to modify it in some situations (though I haven't yet).
  Beware circular references.  The (current) convention used for the key
  is in the source.
  
  =item want
  
  The $want state described in L<rmap_to>.
  
  =back
  
  =head1 EXAMPLES
  
   # command-line play
   $ perl -MData::Rmap -le 'print join ":", rmap { $_ } 1,2,[3..5],\\6'
   1:2:3:4:5:6
  
  
   # Linearly number questions on a set of pages
   my $qnum = 1;
   rmap_hash {
       $_->{qnum} = $qnum++ if($_->{qn});
   } @pages;
  
  
   # Grep recursively, finding ALL objects
   use Scalar::Util qw(blessed);
   my @objects = rmap_ref {
       blessed($_) ? $_ : ();
   } $data_structure;
  
  
   # Grep recursively, finding public objects (note the cut)
   use Scalar::Util qw(blessed);
   my @objects = rmap_ref {
       blessed($_) ?  cut($_) : ();
   } $data_structure;
  
  
   # Return a modified structure
   # (result flattening means we must cheat by cloning then modifying)
   use Storable qw(dclone);
   use Lingua::EN::Numbers::Easy;
  
   $words = [ 1, \2, { key => 3 } ];
   $nums = dclone $words;
   rmap { $_ = $N{$_} || $_ } $nums;
  
  
   # Make an assertion about a structure
   use Data::Dump;
   rmap_ref {
      blessed($_) && $_->isa('Question') && defined($_->name)
          or die "Question doesn't have a name:", dump($_);
   } @pages;
  
  
   # Traverse a tree using localize state
   $tree = [
       one =>
       two =>
       [
           three_one =>
           three_two =>
           [
               three_three_one =>
           ],
           three_four =>
       ],
       four =>
       [
           [
               five_one_one =>
           ],
       ],
   ];
  
   @path = ('q');
   rmap_to {
       if(ref $_) {
           local(@path) = (@path, 1); # ARRAY adds a new level to the path
           $_[0]->recurse(); # does stuff within local(@path)'s scope
       } else {
           print join('.', @path), " = $_ \n"; # show the scalar's path
       }
       $path[-1]++; # bump last element (even when it was an aref)
   } ARRAY|VALUE, $tree;
  
   # OUTPUT
   # q.1 = one
   # q.2 = two
   # q.3.1 = three_one
   # q.3.2 = three_two
   # q.3.3.1 = three_three_one
   # q.3.4 = three_four
   # q.4 = four
   # q.5.1.1 = five_one_one
  
   # replace CODE with "<CODE>"
   $ perl -MData::Rmap=:all -E 'say join ":", rmap_code { "<CODE>" } sub{},sub{}'
   <CODE>:<CODE>
  
   # look inside code refs with PadWalker
   $ perl -MData::Rmap=:all -MSub::Identify=:all -MPadWalker=:all -MSub::Name
     use 5.10.0;
     my $s = sub {}; sub A::a { $s };
     say join ", ",
      rmap_code {
          sub_fullname($_),                       # name string
          map { $_[0]->recurse } closed_over($_)  # then recurse the sub innards
      } \*A::a, subname b => sub { $s };
     # A::a, main::__ANON__, main::b
  
  =head1 Troubleshooting
  
  Beware comma after block:
  
   rmap { print }, 1..3;
                 ^-------- bad news, you get an empty list:
   rmap(sub { print $_; }), 1..3;
  
  If you don't import a function, perl's confusion may produce:
  
   $ perl -MData::Rmap -le 'rmap_scalar { print } 1'
   Can't call method "rmap_scalar" without a package or object reference...
  
   $ perl -MData::Rmap -le 'rmap_scalar { $_++ } 1'
   Can't call method "rmap_scalar" without a package or object reference...
  
  If there's two paths to an element, both will need to be cut.
  
  If there's two paths to an element, one will be taken randomly when
  there is an intervening hash.
  
  Autovivification can lead to "Deep recursion" warnings if you test
  C<< exists $_->{this}{that} >> instead of
  C<< exists $_->{this} && exists $_->{this}{that} >>
  as you may follow a long chain of "this"s
  Alternatively use the "no autovivification" pragma to avoid this problem.
  
  =head1 TODO
  
  put for @_ in wrapper to allow parameters in a different wrapper,
  solve localizing problem.
  
  Store custom localized data about the traversal.
  Seems too difficult and ugly when compare to doing it at the call site.
  Should support multiple reentrancy so avoid the symbol table.
  
  C<rmap_args { } $data_structure, @args> form to pass parameters.
  Could potentially help localizing needs.  (Maybe only recurse last item)
  
  Benchmark.  Use array based object and/or direct access internally.
  
  Think about permitting different callback for different types.
  The prototype syntax is a bit too flaky....
  
  Ensure that no memory leaks are possible, leaking the closure.
  
  =head1 SEE ALSO
  
  map, grep, L<Storable>'s dclone, L<Scalar::Util>'s reftype and blessed
  
  Faint traces of treemap:
  
   http://www.perlmonks.org/index.pl?node_id=60829
  
  Update: various alternatives have appear over the years,
  L<Data::Visitor> has a list.
  
  =head1 AUTHOR
  
  Brad Bowman E<lt>rmap@bereft.netE<gt>
  
  =head1 LICENCE AND COPYRIGHT
  
  Copyright (c) 2004- Brad Bowman (E<lt>rmap@bereft.netE<gt>).
  All rights reserved.
  
  This module is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  See L<perlartistic> and L<perlgpl>.
  
  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  
  =cut
  
  # Early design discussion:
  # http://www.perlmonks.org/index.pl?node_id=295642
  # wantarray
  # http://www.class-dbi.com/cgi-bin/wiki/index.cgi?AtomicUpdates
  
  use warnings;
  use strict;
  use Carp qw(croak);
  use Scalar::Util qw(blessed refaddr reftype);
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT = qw(rmap rmap_all cut);
  our %EXPORT_TAGS = (
      types => [ qw(NONE VALUE HASH ARRAY SCALAR REF GLOB CODE ALL) ],
  );
  our @EXPORT_OK = ( qw(rmap_scalar rmap_hash rmap_array rmap_code rmap_ref rmap_to),
                  @{ $EXPORT_TAGS{types} } );
  
  $EXPORT_TAGS{all} = [ @EXPORT, @EXPORT_OK ];
  
  
  # Uses stringifying instead of S::U::ref* b/c it's under control
  my $cut = \do { my $thing }; # my = out of symbol table
  sub cut {
      die $cut = [@_]; # cut can return
  }
  
  sub NONE()   { 0 }
  sub VALUE()  { 1 }
  sub HASH()   { 2 }
  sub ARRAY()  { 4 }
  sub SCALAR() { 8 }
  sub REF()    { 16 }
  sub GLOB()   { 32 }
  sub CODE()   { 64 }
  sub ALL()    { VALUE|HASH|ARRAY|SCALAR|REF|GLOB }
  # Others like CODE, Regex, etc are ignored
  
  my %type_bits = (
      HASH => HASH,
      ARRAY => ARRAY,
      SCALAR => SCALAR,
      REF => REF,
      GLOB => GLOB,
      CODE => CODE,
      # reftype actually returns undef for:
      VALUE => VALUE,
  );
  
  sub new {
      bless { code => $_[1], want => $_[2], seen => $_[3] }, $_[0];
  }
  sub code { $_[0]->{code} }
  sub want { $_[0]->{want} }
  sub seen { $_[0]->{seen} }
  sub call { $_[0]->{code}->($_[0]) }
  
  sub recurse {
      # needs to deref $_ and *then* run the code, enter _recurse directly
      $_[0]->_recurse(); # cut not needed as seen remembers
  }
  
  sub rmap (&@) {
      __PACKAGE__->new(shift, VALUE, {})->_rmap(@_);
  }
  
  sub rmap_all (&@) {
      __PACKAGE__->new(shift, ALL, {})->_rmap(@_);
  }
  
  sub rmap_scalar (&@) {
      __PACKAGE__->new(shift, VALUE|SCALAR|REF, {})->_rmap(@_);
  }
  
  sub rmap_hash (&@) {
      __PACKAGE__->new(shift, HASH, {})->_rmap(@_);
  }
  
  sub rmap_array (&@) {
      __PACKAGE__->new(shift, ARRAY, {})->_rmap(@_);
  }
  
  sub rmap_code (&@) {
      __PACKAGE__->new(shift, CODE, {})->_rmap(@_);
  }
  
  sub rmap_ref (&@) {
      __PACKAGE__->new(shift, HASH|ARRAY|SCALAR|REF, {})->_rmap(@_);
  }
  
  sub rmap_to (&@) {
      __PACKAGE__->new(shift, shift, {})->_rmap(@_);
  }
  
  sub _rmap {
      my $self = shift;
      my @return;
  
      for (@_) { # just one after the wrapper call
          my ($key, $type);
  
          if($type = reftype($_)) {
              $key = refaddr $_;
              $type = $type_bits{$type} or next;
          } else {
              $key = "V:".refaddr(\$_); # prefix to distinguish from \$_
              $type = VALUE;
          }
  
          next if ( exists $self->seen->{$key} );
          $self->seen->{$key} = undef;
  
          # Call the $code
          if($self->want & $type) {
              my $e; # local($@) and rethrow caused problems
              my @got;
              {
                  local ($@); # don't trample, cut impl. should be transparent
                  # call in array context.  pass block for reentrancy
                  @got = eval { $self->call() };
                  $e = $@;
              }
  
              if($e) {
                  if(ref($e) && $e == $cut) {
                      push @return, @$cut; # cut can add to return list
                      next; # they're cutting, don't recurse
                  } else {
                      die $e;
                  }
              }
              push @return, @got;
          }
  
          push @return, $self->_recurse(); # process $_ node
      }
      return @return;
  }
  
  sub _recurse {
      my $self = shift;
      my $type = $type_bits{reftype($_) || 'VALUE'} or return;
      my @return;
  
      # Recurse appropriately, keeping $_ alias
      if ($type & HASH) {
          push @return, $self->_rmap($_) for values %$_;
      } elsif ($type & ARRAY) {
          # Does this change cut behaviour? No, cut is one scalar ref
          #push @return, _rmap($code, $want, $seen, $_) for @$_;
          push @return, $self->_rmap(@$_);
      } elsif ($type & (SCALAR|REF) ) {
          push @return, $self->_rmap($$_);
      } elsif ($type & GLOB) {
          # SCALAR is always there, undef may be unused or set to undef
          push @return, $self->_rmap(*$_{SCALAR});
          defined *$_{ARRAY} and
              push @return, $self->_rmap(*$_{ARRAY});
          defined *$_{HASH} and
              push @return, $self->_rmap(*$_{HASH});
          defined *$_{CODE} and
              push @return, $self->_rmap(*$_{CODE});
          # Is it always: *f{GLOB} == \*f ?
          # Also PACKAGE NAME GLOB
      }
      return @return;
  }
  
  1;
DATA_RMAP

    $main::fatpacked{"Data/Sah.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH';
  package Data::Sah;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  #use Log::Any qw($log);
  
  use Mo qw(build default);
  
  our $Log_Validator_Code = $ENV{LOG_SAH_VALIDATOR_CODE} // 0;
  
  use Data::Sah::Normalize qw(
                         $type_re
                         $clause_name_re
                         $clause_re
                         $attr_re
                         $funcset_re
                         $compiler_re
                         );
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(normalize_schema gen_validator);
  
  # store Data::Sah::Compiler::* instances
  has compilers    => (is => 'rw', default => sub { {} });
  
  has _var_enumer  => (
      is      => 'rw',
      lazy    => 1,
      default => sub {
          require Language::Expr::Interpreter::VarEnumer;
          Language::Expr::Interpreter::VarEnumer->new;
      },
  );
  
  sub normalize_clset {
      require Scalar::Util;
  
      my $self;
      if (Scalar::Util::blessed($_[0])) {
          $self = shift;
      } else {
          $self = __PACKAGE__->new;
      }
  
      Data::Sah::Normalize::normalize_clset($_[0]);
  }
  
  sub normalize_schema {
      require Scalar::Util;
  
      my $self;
      if (Scalar::Util::blessed($_[0])) {
          $self = shift;
      } else {
          $self = __PACKAGE__->new;
      }
      my ($s) = @_;
  
      Data::Sah::Normalize::normalize_schema($_[0]);
  }
  
  sub gen_validator {
      require Scalar::Util;
  
      my $self;
      if (Scalar::Util::blessed($_[0])) {
          $self = shift;
      } else {
          $self = __PACKAGE__->new;
      }
      my ($schema, $opts) = @_;
      my %args = (schema => $schema, %{$opts // {}});
      my $opt_source = delete $args{source};
  
      $args{log_result} = 1 if $Log_Validator_Code;
  
      my $pl = $self->get_compiler("perl");
      my $code = $pl->expr_validator_sub(%args);
      return $code if $opt_source;
  
      my $res = eval $code;
      die "Can't compile validator: $@" if $@;
      $res;
  }
  
  sub get_compiler {
      my ($self, $name) = @_;
      return $self->compilers->{$name} if $self->compilers->{$name};
  
      die "Invalid compiler name `$name`" unless $name =~ $compiler_re;
      my $module = "Data::Sah::Compiler::$name";
      if (!eval "require $module; 1") {
          die "Can't load compiler module $module".($@ ? ": $@" : "");
      }
  
      my $obj = $module->new(main => $self);
      $self->compilers->{$name} = $obj;
  
      return $obj;
  }
  
  sub normalize_var {
      my ($self, $var, $curpath) = @_;
      die "Not yet implemented";
  }
  
  1;
  # ABSTRACT: Fast and featureful data structure validation
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah - Fast and featureful data structure validation
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 SYNOPSIS
  
  Non-OO interface:
  
   use Data::Sah qw(
       normalize_schema
       gen_validator
   );
  
   my $v;
  
   # generate a validator for schema
   $v = gen_validator(["int*", min=>1, max=>10]);
  
   # validate your data using the generated validator
   say "valid" if $v->(5);     # valid
   say "valid" if $v->(11);    # invalid
   say "valid" if $v->(undef); # invalid
   say "valid" if $v->("x");   # invalid
  
   # generate validator which reports error message string
   $v = gen_validator(["int*", min=>1, max=>10],
                      {return_type=>'str', lang=>'id_ID'});
   # ditto but the error message will be in Indonesian
   $v = gen_validator(["int*", min=>1, max=>10],
                      {return_type=>'str', lang=>'id_ID'});
   say $v->(5);  # ''
   say $v->(12); # 'Data tidak boleh lebih besar dari 10'
                 # (in English: 'Data must not be larger than 10')
  
   # normalize a schema
   my $nschema = normalize_schema("int*"); # => ["int", {req=>1}, {}]
   normalize_schema(["int*", min=>0]); # => ["int", {min=>0, req=>1}, {}]
  
  OO interface (more advanced usage):
  
   use Data::Sah;
   my $sah = Data::Sah->new;
  
   # get perl compiler
   my $pl = $sah->get_compiler("perl");
  
   # compile schema into Perl code
   my $cd = $pl->compile(schema => ["int*", min=>0]);
   say $cd->{result};
  
  will print something like:
  
   # req #0
   (defined($data))
   &&
   # check type 'int'
   (Scalar::Util::Numeric::isint($data))
   &&
   (# clause: min
   ($data >= 0))
  
  To see the full validator code (with C<sub {}> and all), you can do something
  like:
  
   % LOG=1 LOG_SAH_VALIDATOR_CODE=1 TRACE=1 perl -MLog::Any::App -MData::Sah=gen_validator -E'gen_validator(["int*", min=>0])'
  
  which will print log message like:
  
   normalized schema=['int',{min => 0,req => 1},{}]
   validator code:
      1|do {
      2|    require Scalar::Util::Numeric;
      3|    sub {
      4|        my ($data) = @_;
      5|        my $_sahv_res =
       |
      7|            # req #0
      8|            (defined($data))
       |
     10|            &&
       |
     12|            # check type 'int'
     13|            (Scalar::Util::Numeric::isint($data))
       |
     15|            &&
       |
     17|            (# clause: min
     18|            ($data >= 0));
       |
     20|        return($_sahv_res);
     21|    }}
  
  =head1 DESCRIPTION
  
  This distribution, C<Data-Sah>, implements compilers for producing Perl and
  JavaScript validators, as well as translatable human description text from
  L<Sah> schemas. Compiler approach is used instead of interpreter for faster
  speed.
  
  The generated validator code can run without the C<Data::Sah::*> modules.
  
  =head1 STATUS
  
  Some features are not implemented yet:
  
  =over
  
  =item * def/subschema
  
  =item * expression
  
  =item * obj: meths, attrs properties
  
  =item * .prio, .err_msg, .ok_err_msg attributes
  
  =item * .result_var attribute
  
  =item * BaseType: if, prefilters, postfilters, check, prop, check_prop clauses
  
  =item * HasElems: each_index, check_each_elem, check_each_index, exists clauses
  
  =item * HasElems: len, elems, indices properties
  
  =item * hash: check_each_key, check_each_value, allowed_keys_re, forbidden_keys_re clauses
  
  =item * array: uniq clauses
  
  =item * human compiler: markdown output
  
  =back
  
  =head1 VARIABLES
  
  =head2 C<$Log_Validator_Code> (bool, default: 0)
  
  =head1 MODULE ORGANIZATION
  
  B<Data::Sah::Type::*> roles specify Sah types, e.g. C<Data::Sah::Type::bool>
  specifies the bool type. It can also be used to name distributions that
  introduce new types, e.g. C<Data-Sah-Type-complex> which introduces complex
  number type.
  
  B<Data::Sah::FuncSet::*> roles specify bundles of functions, e.g.
  <Data::Sah::FuncSet::Core> specifies the core/standard functions.
  
  B<Data::Sah::Compiler::$LANG::> namespace is for compilers. Each compiler might
  further contain C<::TH::*> (type handler) and C<::FSH::*> (function handler)
  subnamespaces to implement appropriate functionalities, e.g.
  L<Data::Sah::Compiler::perl::TH::bool> is the bool type handler for the Perl
  compiler, L<Data::Sah::Compiler::perl::FSH::Core> is the Core funcset handler
  for Perl compiler.
  
  B<Data::Sah::Coerce::$LANG::$TARGET_TYPE::$SOURCE_TYPE_AND_EXTRA_DESCRIPTION>
  contains coercion rules.
  
  B<Data::Sah::TypeX::$TYPENAME::$CLAUSENAME> namespace can be used to name
  distributions that extend an existing Sah type by introducing a new clause for
  it. See L<Data::Sah::Manual::Extending> for an example.
  
  B<Data::Sah::Lang::$LANGCODE> namespaces are for modules that contain
  translations. They are further organized according to the organization of other
  Data::Sah modules, e.g. L<Data::Sah::Lang::en_US::Type::int> or
  C<Data::Sah::Lang::en_US::TypeX::str::is_palindrome>.
  
  B<Sah::Schema::> namespace is reserved for modules that contain bundles of
  schemas. For example, C<Sah::Schema::CPANMeta> contains the schema to validate
  CPAN META.yml. L<Sah::Schema::Int> contains various schemas for integers such as
  C<pos_int>, C<int8>, C<uint32>. L<Sah::Schema::Sah> contains the schema for Sah
  schema itself.
  
  =head1 FUNCTIONS
  
  None exported by default.
  
  =head2 normalize_schema($schema) => ARRAY
  
  Normalize C<$schema>.
  
  Can also be used as a method.
  
  =head2 gen_validator($schema, \%opts) => CODE (or STR)
  
  Generate validator code for C<$schema>. Can also be used as a method. Known
  options (unknown options will be passed to Perl schema compiler):
  
  =over
  
  =item * accept_ref => BOOL (default: 0)
  
  Normally the generated validator accepts data, as in:
  
   $res = $vdr->($data);
   $res = $vdr->(42);
  
  If this option is set to true, validator accepts reference to data instead, as
  in:
  
   $res = $vdr->(\$data);
  
  This allows $data to be modified by the validator (mainly, to set default value
  specified in schema). For example:
  
   my $data;
   my $vdr = gen_validator([int => {min=>0, max=>10, default=>5}],
                           {accept_ref=>1});
   my $res = $vdr->(\$data);
   say $res;  # => 1 (success)
   say $data; # => 5
  
  =item * source => BOOL (default: 0)
  
  If set to 1, return source code string instead of compiled subroutine. Usually
  only needed for debugging (but see also C<$Log_Validator_Code> and
  C<LOG_SAH_VALIDATOR_CODE> if you want to log validator source code).
  
  =back
  
  =head1 ATTRIBUTES
  
  =head2 compilers => HASH
  
  A mapping of compiler name and compiler (C<Data::Sah::Compiler::*>) objects.
  
  =head1 METHODS
  
  =head2 new() => OBJ
  
  Create a new Data::Sah instance.
  
  =head2 $sah->get_compiler($name) => OBJ
  
  Get compiler object. C<Data::Sah::Compiler::$name> will be loaded first and
  instantiated if not already so. After that, the compiler object is cached.
  
  Example:
  
   my $plc = $sah->get_compiler("perl"); # loads Data::Sah::Compiler::perl
  
  =head2 $sah->normalize_schema($schema) => HASH
  
  Normalize a schema, e.g. change C<int*> into C<< [int => {req=>1}] >>, as well
  as do some sanity checks on it. Returns the normalized schema if succeeds, or
  dies on error.
  
  Can also be used as a function.
  
  Note: this functionality is implemented in L<Data::Sah::Normalize> (distributed
  separately in Data-Sah-Normalize). Use that module instead if you just need
  normalizing schemas, to reduce dependencies.
  
  =head2 $sah->normalize_clset($clset[, \%opts]) => HASH
  
  Normalize a clause set, e.g. change C<< {"!match"=>"abc"} >> into C<<
  {"match"=>"abc", "match.op"=>"not"} >>. Produce a shallow copy of the input
  clause set hash.
  
  Can also be used as a function.
  
  =head2 $sah->normalize_var($var) => STR
  
  Normalize a variable name in expression into its fully qualified/absolute form.
  
  Not yet implemented (pending specification).
  
  For example:
  
   [int => {min => 10, 'max=' => '2*$min'}]
  
  $min in the above expression will be normalized as C<schema:clauses.min>.
  
  =head2 $sah->gen_validator($schema, \%opts) => CODE
  
  Use the Perl compiler to generate validator code. Can also be used as a
  function. See the documentation as a function for list of known options.
  
  =head1 FAQ
  
  See also L<Sah::FAQ>.
  
  =head2 Comparison to {JSON::Schema, Data::Rx, Data::FormValidator, ...}?
  
  See L<Sah::FAQ>.
  
  =head2 Why is it so slow?
  
  You probably do not reuse the compiled schema, e.g. you continually destroy and
  recreate Data::Sah object, or repeatedly recompile the same schema. To gain the
  benefit of compilation, you need to keep the compiled result and use the
  generated Perl code repeatedly.
  
  =head2 Can I generate another schema dynamically from within the schema?
  
  For example:
  
   // if first element is an integer, require the array to contain only integers,
   // otherwise require the array to contain only strings.
   ["array", {"min_len": 1, "of=": "[is_int($_[0]) ? 'int':'str']"}]
  
  Currently no, Data::Sah does not support expression on clauses that contain
  other schemas. In other words, dynamically generated schemas are not supported.
  To support this, if the generated code needs to run independent of Data::Sah, it
  needs to contain the compiler code itself (or an interpreter) to compile or
  evaluate the generated schema.
  
  However, an C<eval_schema()> Sah function which uses Data::Sah can be trivially
  declared and target the Perl compiler.
  
  =head2 How to display the validator code being generated?
  
  Use the C<< source => 1 >> option in C<gen_validator()>.
  
  If you use the OO interface, e.g.:
  
   # generate perl code
   my $cd = $plc->compile(schema=>..., ...);
  
  then the generated code is in C<< $cd->{result} >> and you can just print it.
  
  If you generate validator using C<gen_validator()>, you can set environment
  LOG_SAH_VALIDATOR_CODE or package variable C<$Log_Validator_Code> to true and
  the generated code will be logged at trace level using L<Log::Any>. The log can
  be displayed using, e.g., L<Log::Any::App>:
  
   % LOG_SAH_VALIDATOR_CODE=1 TRACE=1 \
     perl -MLog::Any::App -MData::Sah=gen_validator \
     -e '$sub = gen_validator([int => min=>1, max=>10])'
  
  Sample output:
  
   normalized schema=['int',{max => 10,min => 1},{}]
   schema already normalized, skipped normalization
   validator code:
      1|do {
      2|    require Scalar::Util::Numeric;
      3|    sub {
      4|        my ($data) = @_;
      5|        my $_sahv_res =
       |
      7|            # skip if undef
      8|            (!defined($data) ? 1 :
       |
     10|            (# check type 'int'
     11|            (Scalar::Util::Numeric::isint($data))
       |
     13|            &&
       |
     15|            (# clause: min
     16|            ($data >= 1))
       |
     18|            &&
       |
     20|            (# clause: max
     21|            ($data <= 10))));
       |
     23|        return($_sahv_res);
     24|    }}
  
  Lastly, you can also use L<validate-with-sah> CLI utility from the
  L<App::SahUtils> distribution (use the C<--show-code> option).
  
  =head2 How to show the validation error message? The validator only returns true/false!
  
  Pass the C<< return_type=>"str" >> to get an error message string on error, or
  C<< return_type=>"full" >> to get a hash of detailed error messages. Note also
  that the error messages are translateable (e.g. use C<LANG> or C<< lang=>... >>
  option. For example:
  
   my $v = gen_validator([int => between => [1,10]], {return_type=>"str"});
   say "$_: ", $v->($_) for 1, "x", 12;
  
  will output:
  
   1:
   "x": Input is not of type integer
   12: Must be between 1 and 10
  
  =head2 How to show all the error and warning messages?
  
  If you pass C<< return_type=>"full" >> then the generated validator code can
  return a hashref containing all the errors (in the C<errors> key) and warnings
  (in the C<warnings> key) instead of just a boolean (when C<< return_type=>"bool"
  >>) or a string containing the first encountered error message (when C<<
  return_type=>"str" >>) .
  
  =head2 How to get the data value with the default filled in, or coercion done?
  
  If you use C<< return_type=>"full" >>, the generated validator code will also
  return the input data after the default is filled in or coercion is done in the
  C<value> key of the result hashref. Or, if you do not need a validator that
  checks for all errors/warnings, you can use C<< return_type=>"bool+val" >> or
  C<< return_type=>"str+val" >>. For example:
  
   my $v = gen_validator(["date", {"x.perl.coerce_to"=>"DateTime"}],
                         {return_type=>"str+val"});
  
   my ($err, $val) = @{ $v->("2016-05-14") };
  
  The validator will return an error message string (or an empty string if
  validation succeeds) as well as the final value. In the example above, C<$val>
  will contain a L<DateTime> object. This is convenient because the final value is
  what is usually used further after validation process.
  
  =head2 What does the C<@...> prefix that is sometimes shown on the error message mean?
  
  It shows the path to data item that fails the validation, e.g.:
  
   my $v = gen_validator([array => of => [int=>min=>5], {return_type=>"str"});
   say $v->([10, 5, "x"]);
  
  prints:
  
   @[2]: Input is not of type integer
  
  which means that the third element (subscript 2) of the array fails the
  validation. Another example:
  
   my $v = gen_validator([array => of => [hash=>keys=>{a=>"int"}]]);
   say $v->([{}, {a=>1.1}]);
  
  prints:
  
   @[1][a]: Input is not of type integer
  
  Note that for validator that returns full result hashref (C<<
  return_type=>"full" >>) the error messages in the C<errors> key are also keyed
  with data path, albeit in a slightly different format (i.e. slash-separated,
  e.g. C<2> and C<1/a>) for easier parsing.
  
  =head2 How to show the process of validation by the compiled code?
  
  If you are generating Perl code from schema, you can pass C<< debug=>1 >> option
  so the code contains logging (L<Log::Any>-based) and other debugging
  information, which you can display. For example:
  
   % TRACE=1 perl -MLog::Any::App -MData::Sah=gen_validator -E'
     $v = gen_validator([array => of => [hash => {req_keys=>["a"]}]],
                        {return_type=>"str", debug=>1});
     say "Validation result: ", $v->([{a=>1}, "x"]);'
  
  will output:
  
   ...
   [spath=[]]skip if undef ...
   [spath=[]]check type 'array' ...
   [spath=['of']]clause: {"of":["hash",{"req_keys":["a"]}]} ...
   [spath=['of']]skip if undef ...
   [spath=['of']]check type 'hash' ...
   [spath=['of','req_keys']]clause: {"req_keys":["a"]} ...
   [spath=['of']]skip if undef ...
   [spath=['of']]check type 'hash' ...
   Validation result: [spath=of]@1: Input is not of type hash
  
  =head2 What else can I do with the compiled code?
  
  Data::Sah offers some options in code generation. Beside compiling the validator
  code into a subroutine, there are also some other options. Examples:
  
  =over
  
  =item * L<Dist::Zilla::Plugin::Rinci::Validate>
  
  This plugin inserts the generated code (without the C<sub { ... }> wrapper) to
  validate the content of C<%args> right before C<# VALIDATE_ARG> or C<#
  VALIDATE_ARGS> like below:
  
   $SPEC{foo} = {
       args => {
           arg1 => { schema => ..., req=>1 },
           arg2 => { schema => ... },
       },
       ...
   };
   sub foo {
       my %args = @_; # VALIDATE_ARGS
   }
  
  The schemas will be retrieved from the Rinci metadata (C<$SPEC{foo}> above).
  This means, subroutines in your built distribution will do argument validation.
  
  =item * L<Perinci::Sub::Wrapper>
  
  This module is part of the L<Perinci> family. What the module does is basically
  wrap your subroutine with a wrapper code that can include validation code (among
  others). This is a convenient way to add argument validation to an existing
  subroutine/code.
  
  =back
  
  =head1 ENVIRONMENT
  
  =head2 LOG_SAH_VALIDATOR_CODE => bool
  
  If set to true, will log (using L<Log::Any>, at the trace level) the validator
  code being generated. See L</"SYNOPSIS"> or L</"FAQ"> for example on how to see
  this log message.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  =head3 Other compiled validators
  
  =head3 Other interpreted validators
  
  L<Params::Validate> is very fast, although minimal. L<Data::Rx>, L<Kwalify>,
  L<Data::Verifier>, L<Data::Validator>, L<JSON::Schema>, L<Validation::Class>.
  
  For Moo/Mouse/Moose stuffs: L<Moose> type system, L<MooseX::Params::Validate>,
  L<Type::Tiny>, among others.
  
  Form-oriented: L<Data::FormValidator>, L<FormValidator::Lite>, among others.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH

    $main::fatpacked{"Data/Sah/Coerce.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE';
  package Data::Sah::Coerce;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  use Log::Any::IfLOG '$log';
  
  use Data::Sah::CoerceCommon;
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(gen_coercer);
  
  our %SPEC;
  
  our $Log_Coercer_Code = $ENV{LOG_SAH_COERCER_CODE} // 0;
  
  $SPEC{gen_coercer} = {
      v => 1.1,
      summary => 'Generate coercer code',
      description => <<'_',
  
  This is mostly for testing. Normally the coercion rules will be used from
  <pm:Data::Sah>.
  
  _
      args => {
          %Data::Sah::CoerceCommon::gen_coercer_args,
      },
      result_naked => 1,
  };
  sub gen_coercer {
      my %args = @_;
  
      my $rt = $args{return_type} // 'val';
      my $rt_sv = $rt eq 'str+val';
  
      my $rules = Data::Sah::CoerceCommon::get_coerce_rules(
          %args,
          compiler=>'perl',
          data_term=>'$data',
      );
  
      my $code;
      if (@$rules) {
          my $code_require = '';
          my %mem;
          for my $rule (@$rules) {
              next unless $rule->{modules};
              for my $mod (keys %{$rule->{modules}}) {
                  next if $mem{$mod}++;
                  $code_require .= "require $mod;\n";
              }
          }
  
          my $expr;
          for my $i (reverse 0..$#{$rules}) {
              my $rule = $rules->[$i];
              if ($i == $#{$rules}) {
                  if ($rt_sv) {
                      $expr = "($rule->{expr_match}) ? ['$rule->{name}', $rule->{expr_coerce}] : [undef, \$data]";
                  } else {
                      $expr = "($rule->{expr_match}) ? ($rule->{expr_coerce}) : \$data";
                  }
              } else {
                  if ($rt_sv) {
                      $expr = "($rule->{expr_match}) ? ['$rule->{name}', $rule->{expr_coerce}] : ($expr)";
                  } else {
                      $expr = "($rule->{expr_match}) ? ($rule->{expr_coerce}) : ($expr)";
                  }
              }
          }
  
          $code = join(
              "",
              $code_require,
              "sub {\n",
              "    my \$data = shift;\n",
              ($rt_sv ?
                   "    return [undef, undef] unless defined(\$data);\n" :
                   "    return undef unless defined(\$data);\n"
               ),
              "    $expr;\n",
              "}",
          );
      } else {
          if ($rt_sv) {
              $code = 'sub { [undef, $_[0]] }';
          } else {
              $code = 'sub { $_[0] }';
          }
      }
  
      if ($Log_Coercer_Code) {
          $log->tracef("Coercer code (gen args: %s): %s", \%args, $code);
      }
  
      return $code if $args{source};
  
      my $coercer = eval $code;
      die if $@;
      $coercer;
  }
  
  1;
  # ABSTRACT: Coercion rules for Data::Sah
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce - Coercion rules for Data::Sah
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =head1 SYNOPSIS
  
   use Data::Sah::Coerce qw(gen_coercer);
  
   # a utility routine: gen_coercer
   my $c = gen_coercer(
       type               => 'date',
       coerce_to          => 'DateTime',
       coerce_rules       => ['str_alami'],  # explicitly enable a rule, etc
       # return_type      => 'str+val',      # default is 'val'
   );
  
   my $val = $c->(123);          # unchanged, 123
   my $val = $c->(1463307881);   # becomes a DateTime object
   my $val = $c->("2016-05-15"); # becomes a DateTime object
   my $val = $c->("2016foo");    # unchanged, "2016foo"
  
  =head1 DESCRIPTION
  
  This distribution contains a standard set of coercion rules for L<Data::Sah>. It
  is separated from the C<Data-Sah> distribution and can be used independently.
  
  A coercion rule is put in
  C<Data::Sah::Coerce::$COMPILER::$TARGET_TYPE::$SOURCE_TYPE_AND_EXTRA_DESCRIPTION>
  module, for example: L<Data::Sah::Coerce::perl::date::float_epoch> for
  converting date from integer (Unix epoch) or
  L<Data::Sah::Coerce::perl::date::str_iso8601> for converting date from ISO8601
  strings like "2016-05-15".
  
  Basically, a coercion rule will provide an expression (C<expr_match>) that
  evaluates to true when data can be coerced, and an expression (C<expr_coerce>)
  to actually coerce/convert data to the target type. This rule can be combined
  with other rules to form the final coercion code.
  
  The module must contain C<meta> subroutine which must return a hashref that has
  the following keys (C<*> marks that the key is required):
  
  =over
  
  =item * v* => int (default: 1)
  
  Metadata specification version. Currently at 2 (bumped from 1 to exclude old
  module names).
  
  =item * enable_by_default* => bool
  
  Whether the rule should be used by default. Some rules might be useful in
  certain situations only and can set this key's value to 0.
  
  To explicitly enable a disabled-by-default rule or explicitly disable an
  enabled-by-default rule, a Sah schema can set the attribute C<x.coerce_rules> or
  C<x.perl.coerce_rules> to something like C<< ["!str_iso8601", "str_alami"] >>
  (this means to exclude the C<str_iso8601> rule but enable the C<str_alami>
  rule).
  
  =item * might_die => bool (default: 0)
  
  Whether the rule will generate code that might die (e.g. does not trap failure
  in a conversion process). An example of a rule like this is coercing from string
  in the form of "YYYY-MM-DD" to a DateTime object. The rule might match any
  string in the form of C<< /\A(\d{4})-(\d{2})-(\d{2})\z/ >> and feed it to C<<
  DateTime->new >>, without checking of a valid date, so the DateTime object
  construction might die.
  
  An example of rule that "might not die" is coercing from a comma-separated
  string into array. This process should not die unless under extraordinary
  condition (e.g. out of memory).
  
  For a rule that might die, the program/library that uses the rule module might
  want to add an eval block around the C<expr_coerce> code that is generated by
  the rule module.
  
  =item * prio => int (0-100, default: 50)
  
  This is to regulate the ordering of rules. The higher the number, the lower the
  priority (meaning the rule will be put further back). Rules that are
  computationally more expensive and/or match more broadly in general should be
  put further back (lower priority, higher number).
  
  =item * precludes => array of (str|re)
  
  List the other rules or rule patterns that are precluded by this rule. Rules
  that are mutually exclusive or pure alternatives to one another (e.g. date
  coercien rules L<str_alami|Data::Sah::Coerce::date::str_alami> vs
  L<str_alami|Data::Sah::Coerce::date::str_alami> both parse natural language date
  string; there is usually little to none of usefulness in using both; besides,
  both rules match all string and dies when failing to parse the string. So in
  C<str_natural> rule, you'll find this metadata:
  
   precludes => [qr/\Astr_alami(_.+)?\z/]
  
  and in C<str_alami> rule you'll find this metadata:
  
   precludes => [qr/\Astr_alami(_.+)?\z/, 'str_natural']
  
  Note that the C<str_alami> rule also precludes other C<str_alami_*> rules (like
  C<str_alami_en> and C<str_alami_id>).
  
  Also note that rules which are specifically requested to be used (e.g. using
  C<x.perl.coerce_rules> attribute in Sah schema) will still be precluded.
  
  =back
  
  The module must also contain C<coerce> subroutine which must generate the code
  for coercion. The subroutine must accept a hash of arguments (C<*> indicates
  required arguments):
  
  =over
  
  =item * data_term => str
  
  =item * coerce_to => str
  
  Some Sah types are "abstract" and can be represented using a choice of several
  actual types in the target programming language. For example, "date" can be
  represented in Perl as an integer (Unix epoch value), or a DateTime object, or a
  Time::Moment object.
  
  Not all target Sah types will need this argument.
  
  =back
  
  The C<coerce> subroutine must return a hashref with the following keys (C<*>
  indicates required keys):
  
  =over
  
  =item * expr_match => str
  
  Expression in the target language to test whether the data can be coerced. For
  example, in C<Data::Sah::Coerce::perl::date::float_epoch>, only integers ranging
  from 10^8 to 2^31 are converted into date. Non-integers or integers outside this
  range are not coerced.
  
  =item * expr_coerce => str
  
  Expression in the target language to actually convert data to the target type.
  
  =item * modules => hash
  
  A list of modules required by the expressions.
  
  =back
  
  Basically, the C<coerce> subroutine must generates a code that accepts a
  non-undef data and must convert this data to the desired type/format under the
  right condition. The code to match the right condition must be put in
  C<expr_match> and the code to convert data must be put in C<expr_coerce>.
  
  Program/library that uses Data::Sah::Coerce can collect rules from the rule
  modules then compose them into the final code, something like (in pseudocode):
  
   if (data is undef) {
     return undef;
   } elsif (data matches expr-match-from-rule1) {
     return expr-coerce-from-rule1;
   } elsif (data matches expr-match-from-rule2) {
     return expr-coerce-from-rule1;
   ...
   } else {
     # does not match any expr-match
     return original data;
   }
  
  =head1 VARIABLES
  
  =head2 $Log_Coercer_Code => bool (default: from ENV or 0)
  
  If set to true, will log the generated coercer code (currently using L<Log::Any>
  at trace level). To see the log message, e.g. to the screen, you can use
  something like:
  
   % TRACE=1 perl -MLog::Any::Adapter=Screen -MData::Sah::Coerce=gen_coercer \
       -E'my $c = gen_coercer(...)'
  
  =head1 FUNCTIONS
  
  
  =head2 gen_coercer
  
  Usage:
  
   gen_coercer() -> any
  
  Generate coercer code.
  
  This is mostly for testing. Normally the coercion rules will be used from
  L<Data::Sah>.
  
  This function is not exported by default, but exportable.
  
  No arguments.
  
  Return value:  (any)
  
  =head1 ENVIRONMENT
  
  =head2 LOG_SAH_COERCER_CODE => bool
  
  Set default for C<$Log_Coercer_Code>.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Data::Sah>
  
  L<Data::Sah::CoerceJS>
  
  L<App::SahUtils>, including L<coerce-with-sah> to conveniently test coercion
  from the command-line.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE

    $main::fatpacked{"Data/Sah/Coerce/js/bool/float.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_JS_BOOL_FLOAT';
  package Data::Sah::Coerce::js::bool::float;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 1,
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
  
      my $res = {};
  
      $res->{expr_match} = join(
          " && ",
          "typeof($dt)=='number'",
          "$dt == 0 || $dt == 1",
      );
  
      # XXX how to avoid matching twice? even three times now
  
      $res->{expr_coerce} = "$dt == 1 ? true : false";
  
      $res;
  }
  
  1;
  # ABSTRACT: Coerce 0 to false and 1 to true
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::js::bool::float - Coerce 0 to false and 1 to true
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::js::bool::float (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =head1 DESCRIPTION
  
  Convert number 1 to false and 0 to true. Any other number is not coerced to
  boolean.
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_JS_BOOL_FLOAT

    $main::fatpacked{"Data/Sah/Coerce/js/bool/str.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_JS_BOOL_STR';
  package Data::Sah::Coerce::js::bool::str;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 1,
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
  
      my $res = {};
  
      my $re      = '/^(yes|no|true|false|on|off|1|0)$/i';
      my $re_true = '/^(yes|true|on|1)$/i';
  
      $res->{expr_match} = join(
          " && ",
          "typeof($dt)=='string'",
          "$dt.match($re)",
      );
  
      # XXX how to avoid matching twice? even three times now
  
      $res->{expr_coerce} = "(function(_m) { _m = $dt.match($re); return _m[1].match($re_true) ? true : false })()";
  
      $res;
  }
  
  1;
  # ABSTRACT: Coerce "true","yes",etc to true and "false","no",etc to false
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::js::bool::str - Coerce "true","yes",etc to true and "false","no",etc to false
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::js::bool::str (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =head1 DESCRIPTION
  
  Convert some strings like "true", "yes", "on", "1" (matched case-insensitively)
  to boolean true.
  
  Convert "false", "no", "off", "0" (matched case-insensitively) to boolean false.
  
  All other strings are not coerced to boolean.
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_JS_BOOL_STR

    $main::fatpacked{"Data/Sah/Coerce/js/date/float_epoch.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_JS_DATE_FLOAT_EPOCH';
  package Data::Sah::Coerce::js::date::float_epoch;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 1,
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
  
      my $res = {};
  
      $res->{expr_match} = join(
          " && ",
          "typeof($dt)=='number'",
          "$dt >= " . (10**8),
          "$dt <= " . (2**31),
      );
  
      $res->{expr_coerce} = "(new Date($dt * 1000))";
  
      $res;
  }
  
  1;
  # ABSTRACT: Coerce date from number (assumed to be epoch)
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::js::date::float_epoch - Coerce date from number (assumed to be epoch)
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::js::date::float_epoch (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =head1 DESCRIPTION
  
  To avoid confusion with integer that contains "YYYY", "YYYYMM", or "YYYYMMDD",
  we only do this coercion if data is an integer between 10^8 and 2^31.
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_JS_DATE_FLOAT_EPOCH

    $main::fatpacked{"Data/Sah/Coerce/js/date/obj_Date.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_JS_DATE_OBJ_DATE';
  package Data::Sah::Coerce::js::date::obj_Date;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 1,
          might_die => 1, # we throw exception date is invalid
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
  
      my $res = {};
  
      $res->{expr_match} = join(
          " && ",
          "($dt instanceof Date)",
      );
  
      $res->{expr_coerce} = "isNaN($dt) ? (function(){throw new Error('Invalid date')})() : $dt";
  
      $res;
  }
  
  1;
  # ABSTRACT: Coerce date from Date object
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::js::date::obj_Date - Coerce date from Date object
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::js::date::obj_Date (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =head1 DESCRIPTION
  
  This is basically just to throw an error when date is invalid.
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_JS_DATE_OBJ_DATE

    $main::fatpacked{"Data/Sah/Coerce/js/date/str.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_JS_DATE_STR';
  package Data::Sah::Coerce::js::date::str;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 1,
          might_die => 1, # we throw exception date is invalid
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
  
      my $res = {};
  
      $res->{expr_match} = join(
          " && ",
          "typeof($dt)=='string'",
      );
  
      # note: (function(a,b,c){...})() is a trick to simulate lexical variables
      $res->{expr_coerce} = "(function (_m) { _m = new Date($dt); if (isNaN(_m)) throw new Error('Invalid date'); return _m })()";
  
      $res;
  }
  
  1;
  # ABSTRACT: Coerce date from string
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::js::date::str - Coerce date from string
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::js::date::str (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =head1 DESCRIPTION
  
  This will simply use JavaScript's C<Date.parse()>, but will throw an error when
  date is invalid.
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_JS_DATE_STR

    $main::fatpacked{"Data/Sah/Coerce/js/duration/float_secs.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_JS_DURATION_FLOAT_SECS';
  package Data::Sah::Coerce::js::duration::float_secs;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 1,
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
      my $coerce_to = $args{coerce_to};
  
      my $res = {};
  
      $res->{expr_match} = join(
          " && ",
          "(typeof($dt)=='number' || typeof($dt)=='string' && $dt.match(/^[0-9]+(?:\\.[0-9]+)?\$/))",
          "parseFloat($dt) >= 0", # we don't allow negative duration
          "!isNaN(parseFloat($dt))",
          "isFinite(parseFloat($dt))", # we don't allow infinite duration
      );
  
      $res->{expr_coerce} = "parseFloat($dt)";
  
      $res;
  }
  
  1;
  # ABSTRACT: Coerce duration from number (assumed to be number of seconds)
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::js::duration::float_secs - Coerce duration from number (assumed to be number of seconds)
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::js::duration::float_secs (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_JS_DURATION_FLOAT_SECS

    $main::fatpacked{"Data/Sah/Coerce/js/duration/str_iso8601.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_JS_DURATION_STR_ISO8601';
  package Data::Sah::Coerce::js::duration::str_iso8601;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 1,
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
      my $coerce_to = $args{coerce_to};
  
      my $res = {};
  
      my $re_num = '[0-9]+(?:\\.[0-9]+)?';
      # js doesn't support /x flag, nor \A and \z. oh my
      #                                     #1=Y           #2=M(on)       #3=W           #4=D               #5=H           #6=M(in)       #7=S
      my $expr_re_match = "$dt.match(/^P(?:($re_num)Y)?(?:($re_num)M)?(?:($re_num)W)?(?:($re_num)D)?(?:T(?:($re_num)H)?(?:($re_num)M)?(?:($re_num)S)?)?\$/)";
      $res->{expr_match} = join(
          " && ",
          "typeof($dt)=='string'",
          $expr_re_match,
      );
  
      # XXX i need a trick to avoid doing regex match twice
  
      # approximation
      $res->{expr_coerce} = "(function(_m) { _m = $expr_re_match; return ((_m[1]||0)*365.25*86400 + (_m[2]||0)*30.4375*86400 + (_m[3]||0)*7*86400 + (_m[4]||0)*86400 + (_m[5]||0)*3600 + (_m[6]||0)*60 + (_m[7]||0)*1) })()";
  
      $res;
  }
  
  1;
  # ABSTRACT: Coerce duration from (subset of) ISO8601 string (e.g. "P1Y2M", "P14M")
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::js::duration::str_iso8601 - Coerce duration from (subset of) ISO8601 string (e.g. "P1Y2M", "P14M")
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::js::duration::str_iso8601 (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =head1 DESCRIPTION
  
  The format is:
  
   PnYnMnWnDTnHnMnS
  
  Examples: "P1Y2M" (equals to "P14M", 14 months), "P1DT13M" (1 day, 13 minutes).
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_JS_DURATION_STR_ISO8601

    $main::fatpacked{"Data/Sah/Coerce/perl/bool/str.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_PERL_BOOL_STR';
  package Data::Sah::Coerce::perl::bool::str;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 0,
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
  
      my $res = {};
  
      $res->{expr_match} = join(
          " && ",
          "1",
      );
  
      $res->{expr_coerce} = "$dt =~ /\\A(yes|true|on)\\z/i ? 1 : $dt =~ /\\A(no|false|off|0)\\z/i ? '' : $dt";
  
      $res;
  }
  
  1;
  # ABSTRACT: Convert "yes","true",etc to "1", and "no","false",etc to ""
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::perl::bool::str - Convert "yes","true",etc to "1", and "no","false",etc to ""
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::perl::bool::str (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =head1 DESCRIPTION
  
  This is an optional rule (not enabled by default) that converts "true", "yes",
  "on" (matched case-insensitively) to "1" and "false", "no", "off", "0" (matched
  case-insensitively) to "". All other strings are left untouched.
  
  This rule is not enabled because it is incompatible with Perl's notion of
  true/false. Perl regards all non-empty string that isn't "0" (including "no",
  "false", "off") as true.
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_PERL_BOOL_STR

    $main::fatpacked{"Data/Sah/Coerce/perl/date/float_epoch.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_PERL_DATE_FLOAT_EPOCH';
  package Data::Sah::Coerce::perl::date::float_epoch;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 1,
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
      my $coerce_to = $args{coerce_to} // 'float(epoch)';
  
      my $res = {};
  
      $res->{expr_match} = join(
          " && ",
          "!ref($dt)",
          "$dt =~ /\\A[0-9]{8,10}(?:\.[0-9]+)?\\z/",
          "$dt >= 10**8",
          "$dt <= 2**31",
      );
  
      if ($coerce_to eq 'float(epoch)') {
          $res->{expr_coerce} = $dt;
      } elsif ($coerce_to eq 'DateTime') {
          $res->{modules}{DateTime} //= 0;
          $res->{expr_coerce} = "DateTime->from_epoch(epoch => $dt)";
      } elsif ($coerce_to eq 'Time::Moment') {
          $res->{modules}{'Time::Moment'} //= 0;
          $res->{expr_coerce} = "Time::Moment->from_epoch($dt)";
      } else {
          die "BUG: Unknown coerce_to value '$coerce_to', ".
              "please use float(epoch), DateTime, or Time::Moment";
      }
  
      $res;
  }
  
  1;
  # ABSTRACT: Coerce date from number (assumed to be epoch)
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::perl::date::float_epoch - Coerce date from number (assumed to be epoch)
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::perl::date::float_epoch (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =head1 DESCRIPTION
  
  To avoid confusion with number that contains "YYYY", "YYYYMM", or "YYYYMMDD", we
  only do this coercion if data is a number between 10^8 and 2^31.
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_PERL_DATE_FLOAT_EPOCH

    $main::fatpacked{"Data/Sah/Coerce/perl/date/obj_DateTime.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_PERL_DATE_OBJ_DATETIME';
  package Data::Sah::Coerce::perl::date::obj_DateTime;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 1,
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
      my $coerce_to = $args{coerce_to} // 'float(epoch)';
  
      my $res = {};
  
      $res->{modules}{'Scalar::Util'} //= 0;
  
      $res->{expr_match} = join(
          " && ",
          "Scalar::Util::blessed($dt)",
          "$dt\->isa('DateTime')",
      );
  
      if ($coerce_to eq 'float(epoch)') {
          $res->{expr_coerce} = "$dt\->epoch";
      } elsif ($coerce_to eq 'DateTime') {
          $res->{expr_coerce} = $dt;
      } elsif ($coerce_to eq 'Time::Moment') {
          $res->{modules}{'Time::Moment'} //= 0;
          $res->{expr_coerce} = "Time::Moment->from_object($dt)";
      } else {
          die "BUG: Unknown coerce_to value '$coerce_to', ".
              "please use float(epoch), DateTime, or Time::Moment";
      }
  
      $res;
  }
  
  1;
  # ABSTRACT: Coerce date from DateTime object
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::perl::date::obj_DateTime - Coerce date from DateTime object
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::perl::date::obj_DateTime (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_PERL_DATE_OBJ_DATETIME

    $main::fatpacked{"Data/Sah/Coerce/perl/date/obj_TimeMoment.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_PERL_DATE_OBJ_TIMEMOMENT';
  package Data::Sah::Coerce::perl::date::obj_TimeMoment;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 1,
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
      my $coerce_to = $args{coerce_to} // 'float(epoch)';
  
      my $res = {};
  
      $res->{modules}{'Scalar::Util'} //= 0;
  
      $res->{expr_match} = join(
          " && ",
          "Scalar::Util::blessed($dt)",
          "$dt\->isa('Time::Moment')",
      );
  
      if ($coerce_to eq 'float(epoch)') {
          $res->{expr_coerce} = "$dt\->epoch";
      } elsif ($coerce_to eq 'DateTime') {
          $res->{modules}{'DateTime'} //= 0;
          $res->{expr_coerce} = "DateTime->from_epoch(epoch => $dt\->epoch, time_zone => sprintf('%s%04d', $dt\->offset >= 0 ? '+':'-', abs(int($dt\->offset / 60)*100) + abs(int($dt\->offset % 60))))";
      } elsif ($coerce_to eq 'Time::Moment') {
          $res->{expr_coerce} = $dt;
      } else {
          die "BUG: Unknown coerce_to value '$coerce_to', ".
              "please use float(epoch), DateTime, or Time::Moment";
      }
  
      $res;
  }
  
  1;
  # ABSTRACT: Coerce date from Time::Moment object
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::perl::date::obj_TimeMoment - Coerce date from Time::Moment object
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::perl::date::obj_TimeMoment (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_PERL_DATE_OBJ_TIMEMOMENT

    $main::fatpacked{"Data/Sah/Coerce/perl/date/str_iso8601.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_PERL_DATE_STR_ISO8601';
  package Data::Sah::Coerce::perl::date::str_iso8601;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 1,
          might_die => 1, # we match any (YYYY-MM-DD... string, so the conversion to date might fail on invalid dates)
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
      my $coerce_to = $args{coerce_to} // 'float(epoch)';
  
      my $res = {};
  
      $res->{expr_match} = join(
          " && ",
          "!ref($dt)",
          #                   1=Y        2=M        3=D         4="T" 5=h      6=m        7=s       8="Z"
          "$dt =~ /\\A([0-9]{4})-([0-9]{2})-([0-9]{2})(?:(T)([0-9]{2}):([0-9]{2}):([0-9]{2})(Z?))?\\z/",
      );
  
      $res->{modules}{"Time::Local"} //= 0;
  
      my $code_epoch = '$4 ? ($8 ? Time::Local::timegm($7, $6, $5, $3, $2-1, $1-1900) : Time::Local::timelocal($7, $6, $5, $3, $2-1, $1-1900)) : Time::Local::timelocal(0, 0, 0, $3, $2-1, $1-1900)';
      if ($coerce_to eq 'float(epoch)') {
          $res->{expr_coerce} = $code_epoch;
      } elsif ($coerce_to eq 'DateTime') {
          $res->{modules}{"DateTime"} //= 0;
          $res->{expr_coerce} = "DateTime->from_epoch(epoch => $code_epoch, time_zone => \$8 ? 'UTC' : 'local')";
      } elsif ($coerce_to eq 'Time::Moment') {
          $res->{modules}{"Time::Moment"} //= 0;
          $res->{expr_coerce} = "Time::Moment->from_epoch($code_epoch)";
      } else {
          die "BUG: Unknown coerce_to value '$coerce_to', ".
              "please use float(epoch), DateTime, or Time::Moment";
      }
  
      $res;
  }
  
  1;
  # ABSTRACT: Coerce date from (a subset of) ISO8601 string
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::perl::date::str_iso8601 - Coerce date from (a subset of) ISO8601 string
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::perl::date::str_iso8601 (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =head1 DESCRIPTION
  
  Currently only the following formats are accepted:
  
   "YYYY-MM-DD"            ; # date (local time), e.g.: 2016-05-13
   "YYYY-MM-DDThh:mm:ss"   ; # date+time (local time), e.g.: 2016-05-13T22:42:00
   "YYYY-MM-DDThh:mm:ssZ"  ; # date+time (UTC), e.g.: 2016-05-13T22:42:00Z
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_PERL_DATE_STR_ISO8601

    $main::fatpacked{"Data/Sah/Coerce/perl/duration/float_secs.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_PERL_DURATION_FLOAT_SECS';
  package Data::Sah::Coerce::perl::duration::float_secs;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 1,
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
      my $coerce_to = $args{coerce_to} // 'float(secs)';
  
      my $res = {};
  
      $res->{expr_match} = join(
          " && ",
          "!ref($dt)",
          "$dt =~ /\\A[0-9]+(?:\.[0-9]+)\\z/",
      );
  
      if ($coerce_to eq 'float(secs)') {
          $res->{expr_coerce} = $dt;
      } elsif ($coerce_to eq 'DateTime::Duration') {
          $res->{modules}{'DateTime::Duration'} //= 0;
          $res->{expr_coerce} = "DateTime::Duration->new(seconds => $dt)";
      } else {
          die "BUG: Unknown coerce_to value '$coerce_to', ".
              "please use float(secs) or DateTime::Duration";
      }
  
      $res;
  }
  
  1;
  # ABSTRACT: Coerce duration from float (assumed to be number of seconds)
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::perl::duration::float_secs - Coerce duration from float (assumed to be number of seconds)
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::perl::duration::float_secs (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_PERL_DURATION_FLOAT_SECS

    $main::fatpacked{"Data/Sah/Coerce/perl/duration/obj_DateTimeDuration.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_PERL_DURATION_OBJ_DATETIMEDURATION';
  package Data::Sah::Coerce::perl::duration::obj_DateTimeDuration;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 1,
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
      my $coerce_to = $args{coerce_to} // 'float(secs)';
  
      my $res = {};
  
      $res->{modules}{'Scalar::Util'} //= 0;
  
      $res->{expr_match} = join(
          " && ",
          "Scalar::Util::blessed($dt)",
          "$dt\->isa('DateTime::Duration')",
      );
  
      if ($coerce_to eq 'float(secs)') {
          # approximation
          $res->{expr_coerce} = "($dt\->years * 365.25*86400 + $dt\->months * 30.4375*86400 + $dt\->weeks * 7*86400 + $dt\->days * 86400 + $dt\->hours * 3600 + $dt\->minutes * 60 + $dt\->seconds + $dt\->nanoseconds * 1e-9)";
      } elsif ($coerce_to eq 'DateTime::Duration') {
          $res->{expr_coerce} = $dt;
      } else {
          die "BUG: Unknown coerce_to value '$coerce_to', ".
              "please use float(secs) or DateTime::Duration";
      }
  
      $res;
  }
  
  1;
  # ABSTRACT: Coerce date from DateTime object
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::perl::duration::obj_DateTimeDuration - Coerce date from DateTime object
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::perl::duration::obj_DateTimeDuration (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_PERL_DURATION_OBJ_DATETIMEDURATION

    $main::fatpacked{"Data/Sah/Coerce/perl/duration/str_human.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_PERL_DURATION_STR_HUMAN';
  package Data::Sah::Coerce::perl::duration::str_human;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 1,
          might_die => 1, # we feed most string to Time::Duration::Parse::AsHash which might croak when fed invalid string
          prio => 60,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
      my $coerce_to = $args{coerce_to} // 'float(secs)';
  
      my $res = {};
  
      $res->{expr_match} = join(
          " && ",
          "!ref($dt)",
          "$dt =~ /\\d.*[a-z]/",
      );
  
      $res->{modules}{"Time::Duration::Parse::AsHash"} //= 0;
      if ($coerce_to eq 'float(secs)') {
          # approximation
          $res->{expr_coerce} = "do { my \$p = Time::Duration::Parse::AsHash::parse_duration($dt); (\$p->{years}||0) * 365.25*86400 + (\$p->{months}||0) * 30.4375*86400 + (\$p->{weeks}||0) * 7*86400 + (\$p->{days}||0) * 86400 + (\$p->{hours}||0) * 3600 + (\$p->{minutes}||0) * 60 + (\$p->{seconds}||0) }";
      } elsif ($coerce_to eq 'DateTime::Duration') {
          $res->{modules}{"DateTime::Duration"} //= 0;
          $res->{expr_coerce} = "do { my \$p = Time::Duration::Parse::AsHash::parse_duration($dt); DateTime::Duration->new( (years=>\$p->{years}) x !!defined(\$p->{years}), (months=>\$p->{months}) x !!defined(\$p->{months}), (weeks=>\$p->{weeks}) x !!defined(\$p->{weeks}), (days=>\$p->{days}) x !!defined(\$p->{days}), (hours=>\$p->{hours}) x !!defined(\$p->{hours}), (minutes=>\$p->{minutes}) x !!defined(\$p->{minutes}), (seconds=>\$p->{seconds}) x !!defined(\$p->{seconds})) }";
      } else {
          die "BUG: Unknown coerce_to value '$coerce_to', ".
              "please use float(secs) or DateTime::Duration";
      }
  
      $res;
  }
  
  1;
  # ABSTRACT: Coerce duration from human notation string (e.g. "2 days 10 hours", "3h")
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::perl::duration::str_human - Coerce duration from human notation string (e.g. "2 days 10 hours", "3h")
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::perl::duration::str_human (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =head1 DESCRIPTION
  
  The human notation is parsed using L<Time::Duration::Parse::AsHash>.
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_PERL_DURATION_STR_HUMAN

    $main::fatpacked{"Data/Sah/Coerce/perl/duration/str_iso8601.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_PERL_DURATION_STR_ISO8601';
  package Data::Sah::Coerce::perl::duration::str_iso8601;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 1,
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
      my $coerce_to = $args{coerce_to} // 'float(secs)';
  
      my $res = {};
  
      my $re_num = '[0-9]+(?:\\.[0-9]+)?';
      $res->{expr_match} = join(
          " && ",
          "!ref($dt)",
          #                #1=Y            #2=M(on)        #3=W            #4=D                  #5=H            #6=M(in)        #7=S
          "$dt =~ /\\AP(?:($re_num)Y)? (?:($re_num)M)? (?:($re_num)W)? (?:($re_num)D)? (?: T (?:($re_num)H)? (?:($re_num)M)? (?:($re_num)S)? )?\\z/x",
      );
  
      if ($coerce_to eq 'float(secs)') {
          # approximation
          $res->{expr_coerce} = "((\$1||0)*365.25*86400 + (\$2||0)*30.4375*86400 + (\$3||0)*7*86400 + (\$4||0)*86400 + (\$5||0)*3600 + (\$6||0)*60 + (\$7||0))";
      } elsif ($coerce_to eq 'DateTime::Duration') {
          $res->{modules}{"DateTime::Duration"} //= 0;
          $res->{expr_coerce} = "DateTime::Duration->new( (years=>\$1) x !!defined(\$1), (months=>\$2) x !!defined(\$2), (weeks=>\$3) x !!defined(\$3), (days=>\$4) x !!defined(\$4), (hours=>\$5) x !!defined(\$5), (minutes=>\$6) x !!defined(\$6), (seconds=>\$7) x !!defined(\$7))";
      } else {
          die "BUG: Unknown coerce_to value '$coerce_to', ".
              "please use float(secs) or DateTime::Duration";
      }
  
      $res;
  }
  
  1;
  # ABSTRACT: Coerce duration from (subset of) ISO8601 string (e.g. "P1Y2M", "P14M")
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::perl::duration::str_iso8601 - Coerce duration from (subset of) ISO8601 string (e.g. "P1Y2M", "P14M")
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::perl::duration::str_iso8601 (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =head1 DESCRIPTION
  
  The format is:
  
   PnYnMnWnDTnHnMnS
  
  Examples: "P1Y2M" (equals to "P14M", 14 months), "P1DT13M" (1 day, 13 minutes).
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_PERL_DURATION_STR_ISO8601

    $main::fatpacked{"Data/Sah/Coerce/perl/float/str_percent.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_PERL_FLOAT_STR_PERCENT';
  package Data::Sah::Coerce::perl::float::str_percent;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 0,
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
  
      my $res = {};
  
      $res->{expr_match} = join(
          " && ",
          "$dt =~ /\\A([+-]?\\d+(?:\\.\\d*)?)%\\z/",
      );
  
      $res->{expr_coerce} = "\$1/100";
      $res;
  }
  
  1;
  # ABSTRACT: Coerce float from percent string (e.g. "100.5%")
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::perl::float::str_percent - Coerce float from percent string (e.g. "100.5%")
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::perl::float::str_percent (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =head1 DESCRIPTION
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_PERL_FLOAT_STR_PERCENT

    $main::fatpacked{"Data/Sah/Coerce/perl/int/str_percent.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCE_PERL_INT_STR_PERCENT';
  package Data::Sah::Coerce::perl::int::str_percent;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  sub meta {
      +{
          v => 2,
          enable_by_default => 0,
          prio => 50,
      };
  }
  
  sub coerce {
      my %args = @_;
  
      my $dt = $args{data_term};
  
      my $res = {};
  
      $res->{expr_match} = join(
          " && ",
          "$dt =~ /\\A([+-]?\\d+)%\\z/",
      );
  
      $res->{expr_coerce} = "\$1/100";
      $res;
  }
  
  1;
  # ABSTRACT: Coerce int from percent string (e.g. "100%")
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Coerce::perl::int::str_percent - Coerce int from percent string (e.g. "100%")
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::Coerce::perl::int::str_percent (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =head1 DESCRIPTION
  
  =for Pod::Coverage ^(meta|coerce)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCE_PERL_INT_STR_PERCENT

    $main::fatpacked{"Data/Sah/CoerceCommon.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCECOMMON';
  package Data::Sah::CoerceCommon;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict 'subs', 'vars';
  
  my %common_args = (
      type => {
          schema => 'str*', # XXX sah::typename
              req => 1,
          pos => 0,
      },
      coerce_to => {
          schema => 'str*',
          description => <<'_',
  
  Some Sah types, like `date`, can be represented in a choice of types in the
  target language. For example, in Perl you can store it as a floating number
  a.k.a. `float(epoch)`, or as a <pm:DateTime> object, or <pm:Time::Moment>
  object. Storing in DateTime can be convenient for date manipulation but requires
  an overhead of loading the module and storing in a bulky format. The choice is
  yours to make, via this setting.
  
  _
      },
      coerce_rules => {
          summary => 'A specification of coercion rules to use (or avoid)',
          schema => ['array*', of=>'str*'],
          description => <<'_',
  
  This setting is used to specify which coercion rules to use (or avoid) in a
  flexible way. Each element is a string, in the form of either `NAME` to mean
  specifically include a rule, or `!NAME` to exclude a rule, or `REGEX` or
  `!REGEX` to include or exclude a pattern. All NAME's that contains a
  non-alphanumeric, non-underscore character are assumed to be a REGEX pattern.
  
  Without this setting, the default is to use all available coercion
  rules that have `enabled_by_default` set to 1 in their metadata.
  
  To use all rules (even those that are not enabled by default):
  
      ['.']
  
  To not use any rules:
  
      ['!.']
  
  To use only rules named R1 and R2 and not any other rules (even
  enabled-by-default ones):
  
      ['!.', 'R1', 'R2']
  
  To use only rules matching /^R/ and not any other rules (even
  enabled-by-default ones):
  
      ['!.', '^R']
  
  To use the default rules plus R1 and R2:
  
      ['R1', 'R2']
  
  To use the default rules plus rules matching /^R/:
  
      ['^R']
  
  To use the default rules but not R1 and R2:
  
      ['!R1', '!R2']
  
  To use the default rules but not rules matching /^R/:
  
      ['!^R']
  
  _
      },
  );
  
  my %gen_coercer_args = (
      %common_args,
      return_type => {
          schema => ['str*', in=>[qw/val str+val/]],
          default => 'val',
          description => <<'_',
  
  `val` returns the value (possibly) coerced. `str+val` returns a 2-element array
  where the first element is a bool value of whether the value has been coerced,
  and the second element is the (possibly) coerced value.
  
  _
      },
      source => {
          summary => 'If set to true, will return coercer source code string'.
              ' instead of compiled code',
          schema => 'bool',
      },
  );
  
  my %rule_modules_cache; # key=compiler, value=hash of {module=>undef}
  sub _list_rule_modules {
      my $compiler = shift;
      return $rule_modules_cache{$compiler} if $rule_modules_cache{$compiler};
      require PERLANCAR::Module::List;
      my $prefix = "Data::Sah::Coerce::$compiler\::";
      my $mods = PERLANCAR::Module::List::list_modules(
          $prefix, {list_modules=>1, recurse=>1},
      );
      $rule_modules_cache{$compiler} = $mods;
      $mods;
  }
  
  our %SPEC;
  
  $SPEC{get_coerce_rules} = {
      v => 1.1,
      summary => 'Get coerce rules',
      description => <<'_',
  
  This routine lists coerce rule modules, filters out unwanted ones, loads the
  rest, filters out old (version < current) modules or ones that are not enabled
  by default. Finally the routine gets the rules out.
  
  This common routine is used by <pm:Data::Sah> compilers, as well as
  <pm:Data::Sah::Coerce> and <pm:Data::Sah::CoerceJS>.
  
  _
      args => {
          %common_args,
          compiler => {
              schema => 'str*',
              req => 1,
          },
          data_term => {
              schema => 'str*',
              req => 1,
          },
      },
  };
  sub get_coerce_rules {
      my %args = @_;
  
      my $type     = $args{type};
      my $compiler = $args{compiler};
      my $dt       = $args{data_term};
  
      my $all_mods = _list_rule_modules($compiler);
  
      my $typen = $type; $typen =~ s/::/__/g;
      my $prefix = "Data::Sah::Coerce::$compiler\::$typen\::";
  
      my @available_rule_names;
      for my $mod (keys %$all_mods) {
          next unless $mod =~ /\A\Q$prefix\E(.+)/;
          push @available_rule_names, $1;
      }
  
      my @used_rule_names = @available_rule_names;
      my %explicitly_used_rule_names;
      for my $item (@{ $args{coerce_rules} // [] }) {
          my $is_exclude = $item =~ s/\A!//;
          my $is_re;
          if ($item =~ /\A[A-Za-z0-9_]+\z/) {
              $is_re = 0;
          } else {
              $is_re = 1;
              eval { $item = qr/$item/ };
              die "Invalid regex in coerce_rules item '$item': $@" if $@;
          }
          if ($is_exclude) {
              if ($is_re) {
                  # exclude rules matching pattern
                  my @r;
                  for my $r (@available_rule_names) {
                      next if $r =~ $item;
                      push @r, $r;
                  }
                  @used_rule_names = @r;
              } else {
                  # exclude rules matching pattern
                  my @r;
                  for my $r (@available_rule_names) {
                      next if $r eq $item;
                      push @r, $r;
                  }
                  @used_rule_names = @r;
              }
          } else {
              if ($is_re) {
                  # add rules matching pattern
                  for my $r (@available_rule_names) {
                      next unless $r =~ $item;
                      $explicitly_used_rule_names{$r}++;
                      unless (grep { $_ eq $r } @used_rule_names) {
                          push @used_rule_names, $r;
                      }
                  }
              } else {
                  # add a specific rule
                  die "Unknown coercion rule '$item', make sure the coercion ".
                      "rule module (Data::Sah::Coerce::$compiler\::$type\::$item".
                      " has been installed"
                      unless grep { $_ eq $item } @available_rule_names;
                  push @used_rule_names, $item
                      unless grep { $_ eq $item } @used_rule_names;
                  $explicitly_used_rule_names{$item}++;
              }
          }
      }
  
      my @rules;
      for my $rule_name (@used_rule_names) {
          my $mod = "$prefix$rule_name";
          my $mod_pm = $mod; $mod_pm =~ s!::!/!g; $mod_pm .= ".pm";
          require $mod_pm;
          my $rule_meta = &{"$mod\::meta"};
          my $rule_v = ($rule_meta->{v} // 1);
          if ($rule_v != 2) {
              warn "Coercion rule module '$mod' is still at ".
                  "metadata version $rule_v, will not be used";
              next;
          }
          next unless $explicitly_used_rule_names{$rule_name} ||
              $rule_meta->{enable_by_default};
          my $rule = &{"$mod\::coerce"}(
              data_term => $dt,
              coerce_to => $args{coerce_to},
          );
          $rule->{name} = $rule_name;
          $rule->{meta} = $rule_meta;
          $rule->{explicitly_used} =
              $explicitly_used_rule_names{$rule_name} ? 1:0;
          push @rules, $rule;
      }
  
      # sort by priority (then name)
      @rules = sort {
          ($a->{meta}{prio}//50) <=> ($b->{meta}{prio}//50) ||
              $a cmp $b
          } @rules;
  
      # precludes
      {
          my $i = 0;
          while ($i < @rules) {
              my $rule = $rules[$i];
              if ($rule->{meta}{precludes}) {
                  for my $j (reverse 0 .. $#rules) {
                      next if $j == $i;
                      my $match;
                      for my $p (@{ $rule->{meta}{precludes} }) {
                          if (ref($p) eq 'Regexp' && $rules[$j]{name} =~ $p ||
                                  $rules[$j]{name} eq $p) {
                              $match = 1;
                              last;
                          }
                      }
                      next unless $match;
                      warn "Coercion rule $rules[$j]{name} is precluded by rule $rule->{name}"
                          if $rule->{explicitly_used} && $rules[$j]{explicitly_used};
                      splice @rules, $j, 1;
                  }
              }
              $i++;
          }
      }
  
      \@rules;
  }
  
  1;
  # ABSTRACT: Common stuffs for Data::Sah::Coerce and Data::Sah::CoerceJS
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::CoerceCommon - Common stuffs for Data::Sah::Coerce and Data::Sah::CoerceJS
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::CoerceCommon (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =head1 FUNCTIONS
  
  
  =head2 get_coerce_rules
  
  Usage:
  
   get_coerce_rules(%args) -> [status, msg, result, meta]
  
  Get coerce rules.
  
  This routine lists coerce rule modules, filters out unwanted ones, loads the
  rest, filters out old (version < current) modules or ones that are not enabled
  by default. Finally the routine gets the rules out.
  
  This common routine is used by L<Data::Sah> compilers, as well as
  L<Data::Sah::Coerce> and L<Data::Sah::CoerceJS>.
  
  This function is not exported.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<coerce_rules> => I<array[str]>
  
  A specification of coercion rules to use (or avoid).
  
  This setting is used to specify which coercion rules to use (or avoid) in a
  flexible way. Each element is a string, in the form of either C<NAME> to mean
  specifically include a rule, or C<!NAME> to exclude a rule, or C<REGEX> or
  C<!REGEX> to include or exclude a pattern. All NAME's that contains a
  non-alphanumeric, non-underscore character are assumed to be a REGEX pattern.
  
  Without this setting, the default is to use all available coercion
  rules that have C<enabled_by_default> set to 1 in their metadata.
  
  To use all rules (even those that are not enabled by default):
  
   ['.']
  
  To not use any rules:
  
   ['!.']
  
  To use only rules named R1 and R2 and not any other rules (even
  enabled-by-default ones):
  
   ['!.', 'R1', 'R2']
  
  To use only rules matching /^R/ and not any other rules (even
  enabled-by-default ones):
  
   ['!.', '^R']
  
  To use the default rules plus R1 and R2:
  
   ['R1', 'R2']
  
  To use the default rules plus rules matching /^R/:
  
   ['^R']
  
  To use the default rules but not R1 and R2:
  
   ['!R1', '!R2']
  
  To use the default rules but not rules matching /^R/:
  
   ['!^R']
  
  =item * B<coerce_to> => I<str>
  
  Some Sah types, like C<date>, can be represented in a choice of types in the
  target language. For example, in Perl you can store it as a floating number
  a.k.a. C<float(epoch)>, or as a L<DateTime> object, or L<Time::Moment>
  object. Storing in DateTime can be convenient for date manipulation but requires
  an overhead of loading the module and storing in a bulky format. The choice is
  yours to make, via this setting.
  
  =item * B<compiler>* => I<str>
  
  =item * B<data_term>* => I<str>
  
  =item * B<type>* => I<str>
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (any)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCECOMMON

    $main::fatpacked{"Data/Sah/CoerceJS.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COERCEJS';
  package Data::Sah::CoerceJS;
  
  our $DATE = '2017-03-14'; # DATE
  our $VERSION = '0.021'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  use Log::Any::IfLOG '$log';
  
  use Data::Sah::CoerceCommon;
  use IPC::System::Options;
  use Nodejs::Util qw(get_nodejs_path);
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(gen_coercer);
  
  our %SPEC;
  
  our $Log_Coercer_Code = $ENV{LOG_SAH_COERCER_CODE} // 0;
  
  $SPEC{gen_coercer} = {
      v => 1.1,
      summary => 'Generate coercer code',
      description => <<'_',
  
  This is mostly for testing. Normally the coercion rules will be used from
  <pm:Data::Sah>.
  
  _
      args => {
          %Data::Sah::CoerceCommon::gen_coercer_args,
      },
      result_naked => 1,
  };
  sub gen_coercer {
      my %args = @_;
  
      my $rt = $args{return_type} // 'val';
      my $rt_sv = $rt eq 'str+val';
  
      my $rules = Data::Sah::CoerceCommon::get_coerce_rules(
          %args,
          compiler=>'js',
          data_term=>'data',
      );
  
      my $code;
      if (@$rules) {
          my $expr;
          for my $i (reverse 0..$#{$rules}) {
              my $rule = $rules->[$i];
              if ($i == $#{$rules}) {
                  if ($rt_sv) {
                      $expr = "($rule->{expr_match}) ? [\"$rule->{name}\", $rule->{expr_coerce}] : [null, data]";
                  } else {
                      $expr = "($rule->{expr_match}) ? ($rule->{expr_coerce}) : data";
                  }
              } else {
                  if ($rt_sv) {
                      $expr = "($rule->{expr_match}) ? [\"$rule->{name}\", $rule->{expr_coerce}] : ($expr)";
                  } else {
                      $expr = "($rule->{expr_match}) ? ($rule->{expr_coerce}) : ($expr)";
                  }
              }
          }
  
          $code = join(
              "",
              "function (data) {\n",
              ($rt_sv ?
                   "    if (data === undefined || data === null) return [null, null];\n" :
                   "    if (data === undefined || data === null) return null;\n"
               ),
              "    return ($expr);\n",
              "}",
          );
      } else {
          if ($rt_sv) {
              $code = 'function (data) { return [null, data] }';
          } else {
              $code = 'function (data) { return data }';
          }
      }
  
      if ($Log_Coercer_Code) {
          $log->tracef("Coercer code (gen args: %s): %s", \%args, $code);
      }
  
      return $code if $args{source};
  
      state $nodejs_path = get_nodejs_path();
      die "Can't find node.js in PATH" unless $nodejs_path;
  
      sub {
          require File::Temp;
          require JSON;
          #require String::ShellQuote;
  
          my $data = shift;
  
          state $json = JSON->new->allow_nonref;
  
          # code to be sent to nodejs
          my $src = "var coercer = $code;\n\n".
              "console.log(JSON.stringify(coercer(".
                  $json->encode($data).")))";
  
          my ($jsh, $jsfn) = File::Temp::tempfile();
          print $jsh $src;
          close($jsh) or die "Can't write JS code to file $jsfn: $!";
  
          my $out = IPC::System::Options::readpipe($nodejs_path, $jsfn);
          $json->decode($out);
      };
  }
  
  1;
  # ABSTRACT: Generate coercer code
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::CoerceJS - Generate coercer code
  
  =head1 VERSION
  
  This document describes version 0.021 of Data::Sah::CoerceJS (from Perl distribution Data-Sah-Coerce), released on 2017-03-14.
  
  =head1 SYNOPSIS
  
   use Data::Sah::CoerceJS qw(gen_coercer);
  
   # use as you would use Data::Sah::Coerce
  
  =head1 DESCRIPTION
  
  This module is just like L<Data::Sah::Coerce> except that it uses JavaScript
  coercion rule modules.
  
  =head1 VARIABLES
  
  =head2 $Log_Coercer_Code => bool (default: from ENV or 0)
  
  If set to true, will log the generated coercer code (currently using L<Log::Any>
  at trace level). To see the log message, e.g. to the screen, you can use
  something like:
  
   % TRACE=1 perl -MLog::Any::Adapter=Screen -MData::Sah::CoerceJS=gen_coercer \
       -E'my $c = gen_coercer(...)'
  
  =head1 FUNCTIONS
  
  
  =head2 gen_coercer
  
  Usage:
  
   gen_coercer() -> any
  
  Generate coercer code.
  
  This is mostly for testing. Normally the coercion rules will be used from
  L<Data::Sah>.
  
  This function is not exported by default, but exportable.
  
  No arguments.
  
  Return value:  (any)
  
  =head1 ENVIRONMENT
  
  =head2 LOG_SAH_COERCER_CODE => bool
  
  Set default for C<$Log_Coercer_Code>.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Coerce>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Coerce>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Coerce>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Data::Sah::Coerce>
  
  L<App::SahUtils>, including L<coerce-with-sah> to conveniently test coercion
  from the command-line.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COERCEJS

    $main::fatpacked{"Data/Sah/Compiler.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER';
  package Data::Sah::Compiler;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  #use Carp;
  use Mo qw(default);
  use Role::Tiny::With;
  use Log::Any::IfLOG qw($log);
  use Scalar::Util qw(blessed);
  
  our %coercer_cache; # key=type, value=coercer coderef
  
  with 'Data::Sah::Compiler::TextResultRole';
  
  has main => (is => 'rw');
  
  # instance to Language::Expr instance
  has expr_compiler => (
      is => 'rw',
      lazy => 1,
      default => sub {
          require Language::Expr;
          Language::Expr->new;
      },
  );
  
  # BEGIN COPIED FROM String::LineNumber
  sub __linenum {
      my ($str, $opts) = @_;
      $opts //= {};
      $opts->{width}      //= 4;
      $opts->{zeropad}    //= 0;
      $opts->{skip_empty} //= 1;
  
      my $i = 0;
          $str =~ s/^(([\t ]*\S)?.*)/
          sprintf(join("",
                       "%",
                       ($opts->{zeropad} && !($opts->{skip_empty}
                                                  && !defined($2)) ? "0" : ""),
                       $opts->{width}, "s",
                       "|%s"),
                  ++$i && $opts->{skip_empty} && !defined($2) ? "" : $i,
                  $1)/meg;
  
      $str;
  }
  # END COPIED FROM String::LineNumber
  
  sub name {
      die "BUG: Please override name()";
  }
  
  # literal representation in target language
  sub literal {
      die "BUG: Please override literal()";
  }
  
  # compile expression to target language
  sub expr {
      die "BUG: Please override expr()";
  }
  
  sub _die {
      my ($self, $cd, $msg) = @_;
      die join(
          "",
          "Sah ". $self->name . " compiler: ",
          "at schema:/", join("/", @{$cd->{spath} // []}), ": ",
          # XXX show (snippet of) current schema
          $msg,
      );
  }
  
  # form dependency list from which clauses are mentioned in expressions NEED TO
  # BE UPDATED: NEED TO CHECK EXPR IN ALL ATTRS FOR THE WHOLE SCHEMA/SUBSCHEMAS
  # (NOT IN THE CURRENT CLSET ONLY), THERE IS NO LONGER A ctbl, THE WAY EXPR IS
  # STORED IS NOW DIFFERENT. PLAN: NORMALIZE ALL SUBSCHEMAS, GATHER ALL EXPR VARS
  # AND STORE IN $cd->{all_expr_vars} (SKIP DOING THIS IS
  # $cd->{outer_cd}{all_expr_vars} is already defined).
  sub _form_deps {
      #require Data::Graph::Util;
      require Language::Expr::Interpreter::VarEnumer;
  
      my ($self, $cd, $ctbl) = @_;
      my $main = $self->main;
  
      my %depends;
      for my $crec (values %$ctbl) {
          my $cn = $crec->{name};
          my $expr = defined($crec->{expr}) ? $crec->{value} :
              $crec->{attrs}{expr};
          if (defined $expr) {
              my $vars = $main->_var_enumer->eval($expr);
              for (@$vars) {
                  /^\w+$/ or $self->_die($cd,
                      "Invalid variable syntax '$_', ".
                          "currently only the form \$abc is supported");
                  $ctbl->{$_} or $self->_die($cd,
                      "Unhandled clause specified in variable '$_'");
              }
              $depends{$cn} = $vars;
              for (@$vars) {
                  push @{ $ctbl->{$_}{depended_by} }, $cn;
              }
          } else {
              $depends{$cn} = [];
          }
      }
      #$log->tracef("deps: %s", \%depends);
      #my @sorted = Data::Graph::Util::toposort(\%depends); # dies when cyclic
      #$log->tracef("sorted: %s", \@sorted);
      my %rsched = #map
          #{@{ $depends{$sched->[$_]} } ? ($sched->[$_] => $_) : ()}
          #    0..@$sched-1;
          (); # TMP
      #$log->tracef("deps: %s", \%rsched);
      \%rsched;
  }
  
  # generate a list of clauses in clsets, in order of evaluation. clauses are
  # sorted based on expression dependencies and priority. result is array of
  # [CLSET_NUM, CLAUSE, CLAUSEMETA] triplets, e.g. ([0, 'default', {...}], [1,
  # 'default', {...}], [0, 'min', {...}], [0, 'max', {...}]).
  sub _get_clauses_from_clsets {
      my ($self, $cd, $clsets) = @_;
      my $tn = $cd->{type};
      my $th = $cd->{th};
  
      my $deps;
      ## temporarily disabled, expr needs to be sorted globally
      #if ($self->_clset_has_expr($clset)) {
      #    $deps = $self->_form_deps($ctbl);
      #} else {
      #    $deps = {};
      #}
      #$deps = {};
  
      my $sorter = sub {
          my ($ia, $ca, $metaa) = @$a;
          my ($ib, $cb, $metab) = @$b;
          my $res;
  
          # dependency
          #$res = ($deps->{"$ca.$ia"} // -1) <=> ($deps->{"$cb.$ib"} // -1);
          #return $res if $res;
  
          {
              $res = $metaa->{prio} <=> $metab->{prio};
              #$log->errorf("TMP:   sort1");
              last if $res;
  
              # prio from schema
              my $sprioa = $clsets->[$ia]{"$ca.prio"} // 50;
              my $spriob = $clsets->[$ib]{"$cb.prio"} // 50;
              $res = $sprioa <=> $spriob;
              #$log->errorf("TMP:   sort2");
              last if $res;
  
              # alphabetical order of clause name
              $res = $ca cmp $cb;
              #$log->errorf("TMP:   sort3");
              last if $res;
  
              # clause set order
              $res = $ia <=> $ib;
              #$log->errorf("TMP:   sort4");
              last if $res;
  
              $res = 0;
          }
  
          #$log->errorf("TMP:   sort [%s,%s] vs [%s,%s] = %s", $ia, $ca, $ib, $cb, $res);
          $res;
      };
  
      my @clauses;
      for my $i (0..@$clsets-1) {
          for my $k (grep {!/\A_/ && !/\./} keys %{$clsets->[$i]}) {
              my $meta;
              eval {
                  $meta = "Data::Sah::Type::$tn"->${\("clausemeta_$k")};
              };
              if ($@) {
                  for ($cd->{args}{on_unhandled_clause}) {
                      my $msg = "Unhandled clause for type $tn: $k ($@)";
                      next if $_ eq 'ignore';
                      next if $_ eq 'warn'; # don't produce multiple warnings
                      $self->_die($cd, $msg);
                  }
              }
              $meta //= {prio=>50};
              push @clauses, [$i, $k, $meta];
          }
      }
  
      my $res = [sort $sorter @clauses];
      #$log->errorf("TMP: sorted clauses: %s", $res);
      $res;
  }
  
  sub get_th {
      my ($self, %args) = @_;
      my $cd    = $args{cd};
      my $name  = $args{name};
  
      my $th_map = $cd->{th_map};
      return $th_map->{$name} if $th_map->{$name};
  
      if ($args{load} // 1) {
          no warnings;
          $self->_die($cd, "Invalid syntax for type name '$name', please use ".
                          "letters/numbers/underscores only")
              unless $name =~ $Data::Sah::type_re;
          my $main = $self->main;
          my $module = ref($self) . "::TH::$name";
          if (!eval "require $module; 1") {
              $self->_die($cd, "Can't load type handler $module".
                              ($@ ? ": $@" : ""));
          }
          $self->add_compile_module($cd, $module, {category=>'type_handler'});
  
          my $obj = $module->new(compiler=>$self);
          $th_map->{$name} = $obj;
      }
      use experimental 'smartmatch';
  
      return $th_map->{$name};
  }
  
  sub get_fsh {
      my ($self, %args) = @_;
      my $cd    = $args{cd};
      my $name  = $args{name};
  
      my $fsh_table = $cd->{fsh_table};
      return $fsh_table->{$name} if $fsh_table->{$name};
  
      if ($args{load} // 1) {
          no warnings;
          $self->_die($cd, "Invalid syntax for func set name '$name', ".
                          "please use letters/numbers/underscores")
              unless $name =~ $Data::Sah::funcset_re;
          my $module = ref($self) . "::FSH::$name";
          if (!eval "require $module; 1") {
              $self->_die($cd, "Can't load func set handler $module".
                              ($@ ? ": $@" : ""));
          }
  
          my $obj = $module->new();
          $fsh_table->{$name} = $obj;
      }
      use experimental 'smartmatch';
  
      return $fsh_table->{$name};
  }
  
  sub init_cd {
      require Time::HiRes;
  
      my ($self, %args) = @_;
  
      my $cd = {};
      $cd->{v} = 2;
      $cd->{args} = \%args;
      $cd->{compiler} = $self;
      $cd->{compiler_name} = $self->name;
  
      if (my $ocd = $args{outer_cd}) {
          # for checking later, because outer_cd might be autovivified to hash
          # later
          $cd->{is_inner}       = 1;
  
          $cd->{outer_cd}     = $ocd;
          $cd->{indent_level} = $ocd->{indent_level};
          $cd->{th_map}       = { %{ $ocd->{th_map}  } };
          $cd->{fsh_map}      = { %{ $ocd->{fsh_map} } };
          $cd->{default_lang} = $ocd->{default_lang};
          $cd->{spath}        = [@{ $ocd->{spath} }];
      } else {
          $cd->{indent_level} = $cd->{args}{indent_level} // 0;
          $cd->{th_map}       = {};
          $cd->{fsh_map}      = {};
          # we use || here because in some env, LANG/LANGUAGE is set to ''
          $cd->{default_lang} = $ENV{LANG} || "en_US";
          $cd->{default_lang} =~ s/\..+//; # en_US.UTF-8 -> en_US
          $cd->{spath}        = [];
      }
      $cd->{_id} = Time::HiRes::gettimeofday(); # compilation id
      $cd->{ccls} = [];
  
      $cd;
  }
  
  sub check_compile_args {
      my ($self, $args) = @_;
  
      return if $args->{_args_checked}++;
  
      $args->{data_name} //= 'data';
      $args->{data_name} =~ /\A[A-Za-z_]\w*\z/ or $self->_die(
          {}, "Invalid syntax in data_name '$args->{data_name}', ".
              "please use letters/nums only");
      $args->{allow_expr} //= 1;
      $args->{on_unhandled_attr}   //= 'die';
      $args->{on_unhandled_clause} //= 'die';
      $args->{skip_clause}         //= [];
      $args->{mark_missing_translation} //= 1;
      for ($args->{lang}) {
          $_ //= $ENV{LANG} || $ENV{LANGUAGE} || "en_US";
          s/\W.*//; # LANG=en_US.UTF-8, LANGUAGE=en_US:en
      }
      # locale, no default
  }
  
  sub _process_clause {
      use experimental 'smartmatch';
  
      my ($self, $cd, $clset_num, $clause) = @_;
  
      my $th = $cd->{th};
      my $tn = $cd->{type};
      my $clsets = $cd->{clsets};
  
      my $clset = $clsets->[$clset_num];
      local $cd->{spath}       = [@{$cd->{spath}}, $clause];
      local $cd->{clset}       = $clset;
      local $cd->{clset_num}   = $clset_num;
      local $cd->{uclset}      = $cd->{uclsets}[$clset_num];
      local $cd->{clset_dlang} = $cd->{_clset_dlangs}[$clset_num];
      #$log->tracef("Processing clause %s", $clause);
  
      delete $cd->{uclset}{$clause};
      delete $cd->{uclset}{"$clause.prio"};
  
      if ($clause ~~ @{ $cd->{args}{skip_clause} }) {
          delete $cd->{uclset}{$_}
              for grep /^\Q$clause\E(\.|\z)/, keys(%{$cd->{uclset}});
          return;
      }
  
      my $meth  = "clause_$clause";
      my $mmeth = "clausemeta_$clause";
      unless ($th->can($meth)) {
          for ($cd->{args}{on_unhandled_clause}) {
              next if $_ eq 'ignore';
              do { warn "Can't handle clause $clause"; next }
                  if $_ eq 'warn';
              $self->_die($cd, "Can't handle clause $clause");
          }
      }
  
      # put information about the clause to $cd
  
      my $meta;
      if ($th->can($mmeth)) {
          $meta = $th->$mmeth;
      } else {
          $meta = {};
      }
      local $cd->{cl_meta} = $meta;
      $self->_die($cd, "Clause $clause doesn't allow expression")
          if $clset->{"$clause.is_expr"} && !$meta->{allow_expr};
      for my $a (keys %{ $meta->{attrs} }) {
          my $av = $meta->{attrs}{$a};
          $self->_die($cd, "Attribute $clause.$a doesn't allow ".
                          "expression")
              if $clset->{"$clause.$a.is_expr"} && !$av->{allow_expr};
      }
      local $cd->{clause} = $clause;
      my $cv = $clset->{$clause};
      my $ie = $clset->{"$clause.is_expr"};
      my $op = $clset->{"$clause.op"};
  
      # store original value before being coerced/normalized
      local $cd->{cl_raw_value}   = $cv;
  
      # coerce clause value (with default coerce rules & x.perl.coerce_to). XXX it
      # should be validate + coerce but for now we do coerce to reduce compilation
      # overhead.
      local $cd->{cl_value_coerced_from};
      {
          last if $ie;
          my $coerce_type = $meta->{schema}[0] or last;
          my $value_is_array;
          if ($coerce_type eq '_same') {
              $coerce_type = $cd->{type};
          } elsif ($coerce_type eq '_same_elem') {
              $coerce_type = $cd->{nschema}[1]{of} //
                  $cd->{nschema}[1]{each_elem} // 'any';
          } elsif ($clause eq 'between' || $clause eq 'xbetween') { # XXX special cased for now
              $coerce_type = $cd->{type};
              $value_is_array = 1;
          }
          my $coercer = $coercer_cache{$coerce_type};
          if (!$coercer) {
              require Data::Sah::Coerce;
              $coercer = Data::Sah::Coerce::gen_coercer(
                  type => $coerce_type,
                  return_type=>'str+val',
                  (coerce_to => $cd->{coerce_to}) x !!$cd->{coerce_to},
              );
              $coercer_cache{$coerce_type} = $coercer;
          }
          if ($op && ($op eq 'or' || $op eq 'and')) {
              for my $cv2 (@$cv) {
                  my $cf;
                  if ($value_is_array) {
                      $cv2 = [@$cv2]; # shallow copy
                      for (@$cv2) {
                          ($cf, $_) = @{ $coercer->($_) };
                          $cd->{cl_value_coerced_from} //= $cf;
                      }
                  } else {
                      ($cf, $cv) = @{ $coercer->($cv) };
                      $cd->{cl_value_coerced_from} //= $cf;
                  }
              }
          } else {
              if ($value_is_array) {
                  $cv = [@$cv]; # shallow copy
                  for (@$cv) {
                      my $cf;
                      ($cf, $_) = @{ $coercer->($_) };
                      $cd->{cl_value_coerced_from} //= $cf;
                  }
              } else {
                  ($cd->{cl_value_coerced_from}, $cv) = @{ $coercer->($cv) };
              }
          }
          #$log->tracef("Coerced clause value %s to %s (type=%s)",
          #             $cd->{cl_raw_value}, $cv, $coerce_type);
      }
  
      local $cd->{cl_value}   = $cv;
      local $cd->{cl_term}    = $ie ? $self->expr($cv) : $self->literal($cv);
      local $cd->{cl_is_expr} = $ie;
      local $cd->{cl_op}      = $op;
      delete $cd->{uclset}{"$clause.is_expr"};
      delete $cd->{uclset}{"$clause.op"};
  
      if ($self->can("before_clause")) {
          $self->before_clause($cd);
      }
      if ($th->can("before_clause")) {
          $th->before_clause($cd);
      }
      my $tmpnam = "before_clause_$clause";
      if ($th->can($tmpnam)) {
          $th->$tmpnam($cd);
      }
  
      my $is_multi;
      if (defined($op) && !$ie) {
          if ($op =~ /\A(and|or|none)\z/) {
              $is_multi = 1;
          } elsif ($op eq 'not') {
              $is_multi = 0;
          } else {
              $self->_die($cd, "Invalid value for $clause.op, ".
                              "must be one of and/or/not/none");
          }
      }
      $self->_die($cd, "'$clause.op' attribute set to $op, ".
                      "but value of '$clause' clause not an array")
          if $is_multi && ref($cv) ne 'ARRAY';
      if (!$th->can($meth)) {
          # skip
      } elsif ($cd->{CLAUSE_DO_MULTI} || !$is_multi) {
          local $cd->{cl_is_multi} = 1 if $is_multi;
          $th->$meth($cd);
      } else {
          my $i = 0;
          for my $cv2 (@$cv) {
              local $cd->{spath} = [@{ $cd->{spath} }, $i];
              local $cd->{cl_value} = $cv2;
              local $cd->{cl_term}  = $self->literal($cv2);
              local $cd->{_debug_ccl_note} = "" if $i;
              $i++;
              $th->$meth($cd);
          }
      }
  
      $tmpnam = "after_clause_$clause";
      if ($th->can($tmpnam)) {
          $th->$tmpnam($cd);
      }
      if ($th->can("after_clause")) {
          $th->after_clause($cd);
      }
      if ($self->can("after_clause")) {
          $self->after_clause($cd);
      }
  
      delete $cd->{uclset}{"$clause.err_msg"};
      delete $cd->{uclset}{"$clause.err_level"};
      delete $cd->{uclset}{$_} for
          grep /\A\Q$clause\E\.human(\..+)?\z/, keys(%{$cd->{uclset}});
  }
  
  sub _process_clsets {
      my ($self, $cd, $which) = @_;
  
      # $which can be left undef/false if called from compile(), or set to 'from
      # clause_clset' if called from within clause_clset(), in which case
      # before_handle_type, handle_type, before_all_clauses, and after_all_clauses
      # won't be called.
  
      my $th = $cd->{th};
      my $tn = $cd->{type};
      my $clsets = $cd->{clsets};
  
      my $cname = $self->name;
      local $cd->{uclsets} = [];
      $cd->{_clset_dlangs} = []; # default lang for each clset
      for my $clset (@$clsets) {
          for (keys %$clset) {
              if (!$cd->{args}{allow_expr} && /\.is_expr\z/ && $clset->{$_}) {
                  $self->_die($cd, "Expression not allowed: $_");
              }
          }
          $cd->{coerce_to} //= $clset->{'x.perl.coerce_to'} if $clset->{'x.perl.coerce_to'};
          push @{ $cd->{uclsets} }, {
              map {$_=>$clset->{$_}}
                  grep {
                      !/\A_|\._|\Ax\./ && (!/\Ac\./ || /\Ac\.\Q$cname\E\./)
                  } keys %$clset
          };
          my $dl = $clset->{default_lang} //
              ($cd->{outer_cd} ? $cd->{outer_cd}{clset_dlang} : undef) //
                  "en_US";
          push @{ $cd->{_clset_dlangs} }, $dl;
      }
  
      my $clauses = $self->_get_clauses_from_clsets($cd, $clsets);
      $cd->{has_constraint_clause} = 0;
      $cd->{has_subschema} = 0;
      #$cd->{inspect_elem} = 0; # currently not needed
      for my $cl (@$clauses) {
          # 0=clset_num, 1=cl name, 2=cl meta
          next if $cl->[1] =~ /\A(req|forbidden)\z/;
          $cd->{has_subschema} = 1 if $cl->[2]{subschema};
          #$cd->{inspect_elem}  = 1 if $cl->[2]{inspect_elem};
          if ($cl->[2]{tags} && grep {$_ eq 'constraint'} @{ $cl->[2]{tags} }) {
              $cd->{has_constraint_clause} = 1;
          }
      }
  
      if ($which) {
          # {before,after}_clause_sets is currently internal/undocumented, created
          # only for clause_clset
          if ($self->can("before_clause_sets")) {
              $self->before_clause_sets($cd);
          }
          if ($th->can("before_clause_sets")) {
              $th->before_clause_sets($cd);
          }
      } else {
          if ($self->can("before_handle_type")) {
              $self->before_handle_type($cd);
          }
  
          $th->handle_type($cd);
  
          if ($self->can("before_all_clauses")) {
              $self->before_all_clauses($cd);
          }
          if ($th->can("before_all_clauses")) {
              $th->before_all_clauses($cd);
          }
      }
  
      for my $clause0 (@$clauses) {
          my ($clset_num, $clause) = @$clause0;
          $self->_process_clause($cd, $clset_num, $clause);
      } # for clause
  
      for my $uclset (@{ $cd->{uclsets} }) {
          if (keys %$uclset) {
              for ($cd->{args}{on_unhandled_attr}) {
                  my $msg = "Unhandled attribute(s) for type $tn: ".
                      join(", ", keys %$uclset);
                  next if $_ eq 'ignore';
                  do { warn $msg; next } if $_ eq 'warn';
                  $self->_die($cd, $msg);
              }
          }
      }
  
      if ($which) {
          # {before,after}_clause_sets is currently internal/undocumented, created
          # only for clause_clset
          if ($th->can("after_clause_sets")) {
              $th->after_clause_sets($cd);
          }
          if ($self->can("after_clause_sets")) {
              $self->after_clause_sets($cd);
          }
      } else {
          if ($th->can("after_all_clauses")) {
              $th->after_all_clauses($cd);
          }
          if ($self->can("after_all_clauses")) {
              $self->after_all_clauses($cd);
          }
      }
  }
  
  sub compile {
      my ($self, %args) = @_;
  
      # XXX schema
      $self->check_compile_args(\%args);
  
      my $main   = $self->main;
      my $cd     = $self->init_cd(%args);
  
      if ($self->can("before_compile")) {
          $self->before_compile($cd);
      }
  
      # normalize schema
      my $schema0 = $args{schema} or $self->_die($cd, "No schema");
      my $nschema;
      if ($args{schema_is_normalized}) {
          $nschema = $schema0;
          #$log->tracef("schema already normalized, skipped normalization");
      } else {
          $nschema = $main->normalize_schema($schema0);
          #$log->tracef("normalized schema=%s", $nschema);
      }
      $cd->{nschema} = $nschema;
      local $cd->{schema} = $nschema;
  
      {
          my $defs = $nschema->[2]{def};
          if ($defs) {
              for my $name (sort keys %$defs) {
                  my $def = $defs->{$name};
                  my $opt = $name =~ s/[?]\z//;
                  local $cd->{def_optional} = $opt;
                  local $cd->{def_name}     = $name;
                  $self->_die($cd, "Invalid name syntax in def: '$name'")
                      unless $name =~ $Data::Sah::type_re;
                  local $cd->{def_def}      = $def;
                  $self->def($cd);
                  #$log->tracef("=> def() name=%s, def=>%s, optional=%s)",
                  #             $name, $def, $opt);
              }
          }
      }
  
      require Data::Sah::Resolve;
      my $res       = Data::Sah::Resolve::resolve_schema(
          {
              schema_is_normalized => 1,
              #return_intermediates => 1,
          }, $nschema);
      my $tn        = $res->[0];
      $cd->{th}     = $self->get_th(name=>$tn, cd=>$cd);
      $cd->{type}   = $tn;
      $cd->{clsets} = $res->[1];
      #$cd->{_intermediate_schemas} = $res->[2];
      if ($nschema->[0] ne $tn) {
          $self->add_compile_module($cd, "Sah::Schema::$nschema->[0]");
      }
  
      $self->_process_clsets($cd);
  
      if ($self->can("after_compile")) {
          $self->after_compile($cd);
      }
  
      if ($args{log_result}) {# && $log->is_trace) {
          $log->tracef(
              "Schema compilation result:\n%s",
              !ref($cd->{result}) && ($ENV{LINENUM} // 1) ?
                  __linenum($cd->{result}) :
                  $cd->{result}
              );
      }
      return $cd;
  }
  
  sub def {
      my ($self, $cd) = @_;
      my $name = $cd->{def_name};
      my $def  = $cd->{def_def};
      my $opt  = $cd->{def_optional};
  
      my $th = $self->get_th(cd=>$cd, name=>$name, load=>0);
      if ($th) {
          if ($opt) {
              #$log->tracef("Not redefining already-defined schema/type '$name'");
              return;
          }
          $self->_die($cd, "Redefining existing type ($name) not allowed");
      }
  
      my $nschema = $self->main->normalize_schema($def);
      $cd->{th_map}{$name} = $nschema;
  }
  
  sub _ignore_clause {
      my ($self, $cd) = @_;
      my $cl = $cd->{clause};
      delete $cd->{uclset}{$cl};
  }
  
  sub _ignore_clause_and_attrs {
      my ($self, $cd) = @_;
      my $cl = $cd->{clause};
      delete $cd->{uclset}{$cl};
      delete $cd->{uclset}{$_} for grep /\A\Q$cl\E\./, keys %{$cd->{uclset}};
  }
  
  sub _die_unimplemented_clause {
      my ($self, $cd, $note) = @_;
  
      $self->_die($cd, "Clause '$cd->{clause}' for type '$cd->{type}' ".
                      ($note ? "($note) " : "") .
                          "is currently unimplemented");
  }
  
  sub add_module {
      my ($self, $cd, $name, $extra_keys, $allow_duplicate) = @_;
  
      my $found;
      for (@{ $cd->{modules} }) {
          if ($_->{name} eq $name && $_->{phase} eq $extra_keys->{phase}) {
              $found++;
              last;
          }
      }
      return if $found && !$allow_duplicate;
      push @{ $cd->{modules} }, {
          name => $name,
          %{ $extra_keys // {} },
      };
  }
  
  sub add_runtime_module {
      my ($self, $cd, $name, $extra_keys, $allow_duplicate) = @_;
  
      if ($extra_keys) {
          $extra_keys = { %$extra_keys, phase => 'runtime' };
      } else {
          $extra_keys = { phase => 'runtime' };
      }
      $self->add_module($cd, $name, $extra_keys, $allow_duplicate);
  }
  
  sub add_compile_module {
      my ($self, $cd, $name, $extra_keys, $allow_duplicate) = @_;
  
      if ($extra_keys) {
          $extra_keys = { %$extra_keys, phase => 'compile' };
      } else {
          $extra_keys = { phase => 'compile' };
      }
      $self->add_module($cd, $name, $extra_keys, $allow_duplicate);
  }
  
  1;
  # ABSTRACT: Base class for Sah compilers (Data::Sah::Compiler::*)
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler - Base class for Sah compilers (Data::Sah::Compiler::*)
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(check_compile_args|def|expr|init_cd|literal|name|add_module|add_compile_module|add_runtime_module)$
  
  =head1 COMPILATION DATA KEYS
  
  =over
  
  =item * v => int
  
  Version of compilation data structure. Currently at 2. Whenever there's a
  backward-incompatible change introduced in the structure, this version number
  will be bumped. Client code can check this key to deliberately fail when it
  encounters version number that it can't handle.
  
  =item * args => HASH
  
  Arguments given to C<compile()>.
  
  =item * compiler => OBJ
  
  The compiler object.
  
  =item * compiler_name => str
  
  Compiler name, e.g. C<perl>, C<js>.
  
  =item * is_inner => bool
  
  Convenience. Will be set to 1 when this compilation is a subcompilation (i.e.
  compilation of a subschema). You can also check for C<outer_cd> to find out if
  this compilation is an inner compilation.
  
  =item * outer_cd => HASH
  
  If compilation is called from within another C<compile()>, this will be set to
  the outer compilation's C<$cd>. The inner compilation will inherit some values
  from the outer, like list of types (C<th_map>) and function sets (C<fsh_map>).
  
  =item * th_map => HASH
  
  Mapping of fully-qualified type names like C<int> and its
  C<Data::Sah::Compiler::*::TH::*> type handler object (or array, a normalized
  schema).
  
  =item * fsh_map => HASH
  
  Mapping of function set name like C<core> and its
  C<Data::Sah::Compiler::*::FSH::*> handler object.
  
  =item * schema => ARRAY
  
  The current schema (normalized) being processed. Since schema can contain other
  schemas, there will be subcompilation and this value will not necessarily equal
  to C<< $cd->{args}{schema} >>.
  
  =item * spath = ARRAY
  
  An array of strings, with empty array (C<[]>) as the root. Point to current
  location in schema during compilation. Inner compilation will continue/append
  the path.
  
  Example:
  
   # spath, with pointer to location in the schema
  
   spath: ["elems"] ----
                        \
   schema: ["array", {elems => ["float", [int => {min=>3}], [int => "div_by&" => [2, 3]]]}
  
   spath: ["elems", 0] ------------
                                   \
   schema: ["array", {elems => ["float", [int => {min=>3}], [int => "div_by&" => [2, 3]]]}
  
   spath: ["elems", 1, "min"] ---------------------
                                                   \
   schema: ["array", {elems => ["float", [int => {min=>3}], [int => "div_by&" => [2, 3]]]}
  
   spath: ["elems", 2, "div_by", 1] -------------------------------------------------
                                                                                     \
   schema: ["array", {elems => ["float", [int => {min=>3}], [int => "div_by&" => [2, 3]]]}
  
  Note: aside from C<spath>, there is also the analogous C<dpath> which points to
  the location of I<data> (e.g. array element, hash key). But this is declared and
  maintained by the generated code, not by the compiler.
  
  =item * th => OBJ
  
  Current type handler.
  
  =item * type => STR
  
  Current type name.
  
  =item * clsets => ARRAY
  
  All the clause sets. Each schema might have more than one clause set, due to
  processing base type's clause set.
  
  =item * clset => HASH
  
  Current clause set being processed. Note that clauses are evaluated not strictly
  in clset order, but instead based on expression dependencies and priority.
  
  =item * clset_dlang => HASH
  
  Default language of the current clause set. This value is taken from C<<
  $cd->{clset}{default_lang} >> or C<< $cd->{outer_cd}{default_lang} >> or the
  default C<en_US>.
  
  =item * clset_num => INT
  
  Set to 0 for the first clause set, 1 for the second, and so on. Due to merging,
  we might process more than one clause set during compilation.
  
  =item * uclset => HASH
  
  Short for "unprocessed clause set", a shallow copy of C<clset>, keys will be
  removed from here as they are processed by clause handlers, remaining keys after
  processing the clause set means they are not recognized by hooks and thus
  constitutes an error.
  
  =item * uclsets => ARRAY
  
  All the C<uclset> for each clause set.
  
  =item * clause => STR
  
  Current clause name.
  
  =item * cl_meta => HASH
  
  Metadata information about the clause, from the clause definition. This include
  C<prio> (priority), C<attrs> (list of attributes specific for this clause),
  C<allow_expr> (whether clause allows expression in its value), etc. See
  C<Data::Sah::Type::$TYPENAME> for more information.
  
  =item * cl_value => ANY
  
  Clause value. Note: for putting in generated code, use C<cl_term>.
  
  The clause value will be coerced if there are applicable coercion rules. To get
  the raw/original value as the schema specifies it, see C<cl_raw_value>.
  
  =item * cl_raw_value => any
  
  Like C<cl_value>, but without any coercion/filtering done to the value.
  
  =item * cl_value_coerced_from => str
  
  If clause value is coerced from another value using a rule, the rule name will
  be provided here.
  
  XXX What if value is a complex data structure where only some items are coerced?
  For example, in schema: C<< [date => between=>["2016-01-01", 1464337542]] >>.
  Only the first element of the value is coerced from ISO8601 string. Currently we
  set C<cl_value_coerced_from> to the first rule being used during coercion of
  value items.
  
  =item * cl_term => STR
  
  Clause value term. If clause value is a literal (C<.is_expr> is false) then it
  is produced by passing clause value to C<literal()>. Otherwise, it is produced
  by passing clause value to C<expr()>.
  
  =item * cl_is_expr => BOOL
  
  A copy of C<< $cd->{clset}{"${clause}.is_expr"} >>, for convenience.
  
  =item * cl_op => STR
  
  A copy of C<< $cd->{clset}{"${clause}.op"} >>, for convenience.
  
  =item * cl_is_multi => BOOL
  
  Set to true if cl_value contains multiple clause values. This will happen if
  C<.op> is either C<and>, C<or>, or C<none> and C<< $cd->{CLAUSE_DO_MULTI} >> is
  set to true.
  
  =item * indent_level => INT
  
  Current level of indent when printing result using C<< $c->line() >>. 0 means
  unindented.
  
  =item * all_expr_vars => ARRAY
  
  All variables in all expressions in the current schema (and all of its
  subschemas). Used internally by compiler. For example (XXX syntax not not
  finalized):
  
   # schema
   [array => {of=>'str1', min_len=>1, 'max_len=' => '$min_len*3'},
    {def => {
        str1 => [str => {min_len=>6, 'max_len=' => '$min_len*2',
                         check=>'substr($_,0,1) eq "a"'}],
    }}]
  
   all_expr_vars => ['schema:///clsets/0/min_len', # or perhaps .../min_len/value
                     'schema://str1/clsets/0/min_len']
  
  This data can be used to order the compilation of clauses based on dependencies.
  In the above example, C<min_len> needs to be evaluated before C<max_len>
  (especially if C<min_len> is an expression).
  
  =item * modules => array of hash
  
  List of modules that are required, one way or another. Each element is a hash
  which must contain at least the C<name> key (module name). There are other keys
  like C<version> (minimum version), C<phase> (explained below). Some languages
  might add other keys, like C<perl> with C<use_statement> (statement to load/use
  the module, used by e.g. pragmas like C<no warnings 'void'> which are not the
  regular C<require MODULE> statement). Generally, duplicate entries (entries with
  the same C<name> and C<phase>) are avoided, except in special cases like Perl
  pragmas.
  
  There are I<runtime> modules (C<phase> key set to C<runtime>), which are
  required by the generated code when running. For each entry, the only required
  key is C<name>. Other keys include: C<version> (minimum version). Some languages
  have some additional rule for this, e.g. perl has C<use_statement> (how to use
  the module, e.g. for pragma, like C<no warnings 'void'>).
  
  There are also I<compile-time> modules (C<phase> key set to C<compile>), which
  are required during compilation of schema. This include coercion rule modules
  like L<Data::Sah::Coerce::perl::date::float_epoch>, and so on. This information
  might be useful for distributions that use Data::Sah. Because Data::Sah is a
  modular library, where there are third party extensions for types, coercion
  rules, and so on, listing these modules as dependencies instead of a single
  C<Data::Sah> will ensure that dependants will pull the right distribution during
  installation.
  
  =item * ccls => [HASH, ...]
  
  (Result) Compiled clauses, collected during processing of schema's clauses. Each
  element will contain the compiled code in the target language, error message,
  and other information. At the end of processing, these will be joined together.
  
  =item * result => ...
  
  (Result) The final result. For most compilers, it will be string/text.
  
  =item * has_constraint_clause => bool
  
  Convenience. True if there is at least one constraint clause in the schema. This
  I<excludes> special clause C<req> and C<forbidden>.
  
  =item * has_subschema => bool
  
  Convenience. True if there is at least one clause which contains a subschema.
  
  =back
  
  =head1 ATTRIBUTES
  
  =head2 main => OBJ
  
  Reference to the main Data::Sah object.
  
  =head2 expr_compiler => OBJ
  
  Reference to expression compiler object. In the perl compiler, for example, this
  will be an instance of L<Language::Expr::Compiler::Perl> object.
  
  =head1 METHODS
  
  =head2 new() => OBJ
  
  =head2 $c->compile(%args) => HASH
  
  Compile schema into target language.
  
  Arguments (C<*> denotes required arguments, subclass may introduce others):
  
  =over 4
  
  =item * data_name => STR (default: 'data')
  
  A unique name. Will be used as default for variable names, etc. Should only be
  comprised of letters/numbers/underscores.
  
  =item * schema* => STR|ARRAY
  
  The schema to use. Will be normalized by compiler, unless
  C<schema_is_normalized> is set to true.
  
  =item * lang => STR (default: from LANG/LANGUAGE or C<en_US>)
  
  Desired output human language. Defaults (and falls back to) C<en_US>.
  
  =item * mark_missing_translation => BOOL (default: 1)
  
  If a piece of text is not found in desired human language, C<en_US> version of
  the text will be used but using this format:
  
   (en_US:the text to be translated)
  
  If you do not want this marker, set the C<mark_missing_translation> option to 0.
  
  =item * locale => STR
  
  Locale name, to be set during generating human text description. This sometimes
  needs to be if setlocale() fails to set locale using only C<lang>.
  
  =item * schema_is_normalized => BOOL (default: 0)
  
  If set to true, instruct the compiler not to normalize the input schema and
  assume it is already normalized.
  
  =item * allow_expr => BOOL (default: 1)
  
  Whether to allow expressions. If false, will die when encountering expression
  during compilation. Usually set to false for security reason, to disallow
  complex expressions when schemas come from untrusted sources.
  
  =item * on_unhandled_attr => STR (default: 'die')
  
  What to do when an attribute can't be handled by compiler (either it is an
  invalid attribute, or the compiler has not implemented it yet). Valid values
  include: C<die>, C<warn>, C<ignore>.
  
  =item * on_unhandled_clause => STR (default: 'die')
  
  What to do when a clause can't be handled by compiler (either it is an invalid
  clause, or the compiler has not implemented it yet). Valid values include:
  C<die>, C<warn>, C<ignore>.
  
  =item * indent_level => INT (default: 0)
  
  Start at a specified indent level. Useful when generated code will be inserted
  into another code (e.g. inside C<sub {}> where it is nice to be able to indent
  the inside code).
  
  =item * skip_clause => ARRAY (default: [])
  
  List of clauses to skip (to assume as if it did not exist). Example when
  compiling with the human compiler:
  
   # schema
   [int => {default=>1, between=>[1, 10]}]
  
   # generated human description in English
   integer, between 1 and 10, default 1
  
   # generated human description, with skip_clause => ['default']
   integer, between 1 and 10
  
  =back
  
  =head3 Compilation data
  
  During compilation, compile() will call various hooks (listed below). The hooks
  will be passed compilation data (C<$cd>) which is a hashref containing various
  compilation state and result. Compilation data is written to this hashref
  instead of on the object's attributes to make it easy to do recursive
  compilation (compilation of subschemas).
  
  Keys that are put into this compilation data include input data, compilation
  state, and others. Many of these keys might exist only temporarily during
  certain phases of compilation and will no longer exist at the end of
  compilation, for example C<clause> will only exist during processing of a clause
  and will be seen by hooks like C<before_clause> and C<after_clause>, it will not
  be seen by C<before_all_clauses> or C<after_compile>.
  
  For a list of keys, see L</"COMPILATION DATA KEYS">. Subclasses may add more
  data; see their respective documentation.
  
  =head3 Return value
  
  The compilation data will be returned as return value. Main result will be in
  the C<result> key. There is also C<ccls>, and subclasses may put additional
  results in other keys. Final usable result might need to be pieced together from
  these results, depending on your needs.
  
  =head3 Hooks
  
  By default this base compiler does not define any hooks; subclasses can define
  hooks to implement their compilation process. Each hook will be passed
  compilation data, and should modify or set the compilation data as needed. The
  hooks that compile() will call at various points, in calling order, are:
  
  =over 4
  
  =item * $c->before_compile($cd)
  
  Called once at the beginning of compilation.
  
  =item * $c->before_handle_type($cd)
  
  =item * $th->handle_type($cd)
  
  =item * $c->before_all_clauses($cd)
  
  Called before calling handler for any clauses.
  
  =item * $th->before_all_clauses($cd)
  
  Called before calling handler for any clauses, after compiler's
  before_all_clauses().
  
  =item * $c->before_clause($cd)
  
  Called for each clause, before calling the actual clause handler
  ($th->clause_NAME() or $th->clause).
  
  =item * $th->before_clause($cd)
  
  After compiler's before_clause() is called, I<type handler>'s before_clause()
  will also be called if available.
  
  Input and output interpretation is the same as compiler's before_clause().
  
  =item * $th->before_clause_NAME($cd)
  
  Can be used to customize clause.
  
  Introduced in v0.10.
  
  =item * $th->clause_NAME($cd)
  
  Clause handler. Will be called only once (if C<$cd->{CLAUSE_DO_MULTI}> is set to
  by other hooks before this) or once for each value in a multi-value clause (e.g.
  when C<.op> attribute is set to C<and> or C<or>). For example, in this schema:
  
   [int => {"div_by&" => [2, 3, 5]}]
  
  C<clause_div_by()> can be called only once with C<< $cd->{cl_value} >> set to
  [2, 3, 5] or three times, each with C<< $cd->{value} >> set to 2, 3, and 5
  respectively.
  
  =item * $th->after_clause_NAME($cd)
  
  Can be used to customize clause.
  
  Introduced in v0.10.
  
  =item * $th->after_clause($cd)
  
  Called for each clause, after calling the actual clause handler
  ($th->clause_NAME()).
  
  =item * $c->after_clause($cd)
  
  Called for each clause, after calling the actual clause handler
  ($th->clause_NAME()).
  
  Output interpretation is the same as $th->after_clause().
  
  =item * $th->after_all_clauses($cd)
  
  Called after all clauses have been compiled, before compiler's
  after_all_clauses().
  
  =item * $c->after_all_clauses($cd)
  
  Called after all clauses have been compiled.
  
  =item * $c->after_compile($cd)
  
  Called at the very end before compiling process end.
  
  =back
  
  =head2 $c->get_th
  
  =head2 $c->get_fsh
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER

    $main::fatpacked{"Data/Sah/Compiler/Prog.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PROG';
  package Data::Sah::Compiler::Prog;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  use Log::Any::IfLOG qw($log);
  
  use Mo qw(build default);
  extends 'Data::Sah::Compiler';
  
  #use Digest::MD5 qw(md5_hex);
  
  # human compiler, to produce error messages
  has hc => (is => 'rw');
  
  # subclass should provide a default, choices: 'shell', 'c', 'ini', 'cpp'
  has comment_style => (is => 'rw');
  
  has var_sigil => (is => 'rw');
  
  has concat_op => (is => 'rw');
  
  has logical_and_op => (is => 'rw', default => sub {'&&'});
  
  has logical_not_op => (is => 'rw', default => sub {'!'});
  
  #has logical_or_op => (is => 'rw', default => sub {'||'});
  
  sub init_cd {
      my ($self, %args) = @_;
  
      my $cd = $self->SUPER::init_cd(%args);
      $cd->{vars} = {};
  
      my $hc = $self->hc;
      if (!$hc) {
          $hc = $self->main->get_compiler("human");
          $self->hc($hc);
      }
  
      if (my $ocd = $cd->{outer_cd}) {
          $cd->{vars}    = $ocd->{vars};
          $cd->{modules} = $ocd->{modules};
          $cd->{_hc}     = $ocd->{_hc};
          $cd->{_hcd}    = $ocd->{_hcd};
          $cd->{_subdata_level} = $ocd->{_subdata_level};
          $cd->{use_dpath} = 1 if $ocd->{use_dpath};
      } else {
          $cd->{vars}    = {};
          $cd->{modules} = [];
          $cd->{_hc}     = $hc;
          $cd->{_subdata_level} = 0;
      }
  
      $cd;
  }
  
  sub check_compile_args {
      my ($self, $args) = @_;
  
      return if $args->{_args_checked_Prog}++;
  
      $self->SUPER::check_compile_args($args);
  
      my $ct = ($args->{code_type} //= 'validator');
      if ($ct ne 'validator') {
          $self->_die({}, "code_type currently can only be 'validator'");
      }
      my $rt = ($args->{return_type} //= 'bool');
      if ($rt !~ /\A(bool\+val|bool|str\+val|str|full)\z/) {
          $self->_die({}, "Invalid value for return_type, ".
                          "use bool|bool+val|str|str+val|full");
      }
      $args->{var_prefix} //= "_sahv_";
      $args->{sub_prefix} //= "_sahs_";
      $args->{data_term}  //= $self->var_sigil . $args->{data_name};
      $args->{data_term_is_lvalue} //= 1;
      $args->{tmp_data_name} //= "tmp_$args->{data_name}";
      $args->{tmp_data_term} //= $self->var_sigil . $args->{tmp_data_name};
      $args->{comment}    //= 1;
      $args->{err_term}   //= $self->var_sigil . "err_$args->{data_name}";
      $args->{coerce}     //= 1;
  }
  
  sub comment {
      my ($self, $cd, @args) = @_;
      return '' unless $cd->{args}{comment};
  
      my $content = join("", @args);
      $content =~ s/\n+/ /g;
  
      my $style = $self->comment_style;
      if ($style eq 'shell') {
          return join("", "# ", $content, "\n");
      } elsif ($style eq 'shell2') {
          return join("", "## ", $content, "\n");
      } elsif ($style eq 'cpp') {
          return join("", "// ", $content, "\n");
      } elsif ($style eq 'c') {
          return join("", "/* ", $content, '*/');
      } elsif ($style eq 'ini') {
          return join("", "; ", $content, "\n");
      } else {
          $self->_die($cd, "BUG: Unknown comment style: $style");
      }
  }
  
  # enclose expression with parentheses, unless it already is
  sub enclose_paren {
      my ($self, $expr, $force) = @_;
      if ($expr =~ /\A(\s*)(\(.+\)\s*)\z/os) {
          return $expr if !$force;
          return "$1($2)";
      } else {
          $expr =~ /\A(\s*)(.*)/os;
          return "$1($2)";
      }
  }
  
  sub add_var {
      my ($self, $cd, $name, $value) = @_;
  
      return if exists $cd->{vars}{$name};
      #$log->tracef("TMP: add_var %s", $name);
      $cd->{vars}{$name} = $value;
  }
  
  # naming convention: expr_NOUN(), stmt_VERB(_NOUN)?()
  
  sub expr_assign {
      my ($self, $v, $t) = @_;
      "$v = $t";
  }
  
  sub _xlt {
      my ($self, $cd, $text) = @_;
  
      my $hc  = $cd->{_hc};
      my $hcd = $cd->{_hcd};
      #$log->tracef("(Prog) Translating text %s ...", $text);
      $hc->_xlt($hcd, $text);
  }
  
  sub expr_concat {
      my ($self, @t) = @_;
      join(" " . $self->concat_op . " ", @t);
  }
  
  sub expr_var {
      my ($self, $v) = @_;
      $self->var_sigil. $v;
  }
  
  sub expr_preinc {
      my ($self, $t) = @_;
      "++$t";
  }
  
  sub expr_preinc_var {
      my ($self, $v) = @_;
      "++" . $self->var_sigil. $v;
  }
  
  # expr_postinc
  # expr_predec
  # expr_postdec
  
  # args: log_result, var_term, err_term. the rest is the same/supplied to
  # compile().
  sub expr_validator_sub {
      my ($self, %args) = @_;
  
      my $log_result = delete $args{log_result};
      my $dt         = $args{data_term};
      my $vt         = delete($args{var_term}) // $dt;
      my $do_log     = $args{debug_log} // $args{debug};
      my $rt         = $args{return_type} // 'bool';
  
      $args{indent_level} = 1;
  
      my $cd = $self->compile(%args);
      my $et = $cd->{args}{err_term};
  
      if ($rt !~ /\Abool/) {
          my ($ev) = $et =~ /(\w+)/; # to remove sigil
          $self->add_var($cd, $ev, $rt =~ /\Astr/ ? undef : {});
      }
      my $resv = '_sahv_res';
      my $rest = $self->var_sigil . $resv;
  
      my $needs_expr_block = (grep {$_->{phase} eq 'runtime'} @{ $cd->{modules} })
                                  || $do_log;
  
      my $code = join(
          "",
          ($self->stmt_require_log_module."\n") x !!$do_log,
          (map { $self->stmt_require_module($_)."\n" }
               grep { $_->{phase} eq 'runtime' } @{ $cd->{modules} }),
          $self->expr_anon_sub(
              [$vt],
              join(
                  "",
                  (map {$self->stmt_declare_local_var(
                      $_, $self->literal($cd->{vars}{$_}))."\n"}
                       sort keys %{ $cd->{vars} }),
                  #$log->tracef('-> (validator)(%s) ...', $dt);\n";
                  $self->stmt_declare_local_var($resv, "\n\n" . $cd->{result})."\n\n",
  
                  # when rt=bool, return true/false result
                  #(";\n\n\$log->tracef('<- validator() = %s', \$res)")
                  #    x !!($do_log && $rt eq 'bool'),
                  ($self->stmt_return($rest)."\n")
                      x !!($rt eq 'bool'),
  
                  # when rt=str, return string error message
                  #($log->tracef('<- validator() = %s', ".
                  #     "\$err_data);\n\n";
                  #    x !!($do_log && $rt eq 'str'),
                  ($self->expr_set_err_str($et, $self->literal('')).";",
                   "\n\n".$self->stmt_return($et)."\n")
                      x !!($rt eq 'str'),
  
                  # when rt=bool+val, return true/false result as well as final
                  # input value
                  ($self->stmt_return($self->expr_array($rest, $dt))."\n")
                      x !!($rt eq 'bool+val'),
  
                  # when rt=str+val, return string error message as well as final
                  # input value
                  ($self->expr_set_err_str($et, $self->literal('')).";",
                   "\n\n".$self->stmt_return($self->expr_array($et, $dt))."\n")
                      x !!($rt eq 'str+val'),
  
                  # when rt=full, return error hash
                  ($self->stmt_assign_hash_value($et, $self->literal('value'), $dt),
                   "\n".$self->stmt_return($et)."\n")
                      x !!($rt eq 'full'),
              )
          ),
      );
  
      if ($needs_expr_block) {
          $code = $self->expr_block($code);
      }
  
      if ($log_result && $log->is_trace) {
          $log->tracef("validator code:\n%s",
                       ($ENV{LINENUM} // 1) ?
                           Data::Sah::Compiler::__linenum($code) :
                             $code);
      }
  
      $code;
  }
  
  # add compiled clause to ccls, along with extra information useful for joining
  # later (like error level, code for adding error message, etc). available
  # options:
  #
  # - err_level (str, the default will be taken from current clause's .err_level
  # if not specified),
  #
  # - err_expr (str, a string expression in the target language that evaluates to
  # an error message, the more general and dynamic alternative to err_msg.
  #
  # - err_msg (str, the default will be produced by human compiler if not
  # supplied, or taken from current clause's .err_msg),
  #
  # - subdata (bool, default false, if set to true then this means we are
  # delving into subdata, e.g. array elements or hash pair values, and appropriate
  # things must be done to adjust for this [e.g. push_dpath/pop_dpath at the end
  # so that error message can show the proper data path].
  #
  # - assert (bool, default false, if set to true means this ccl is an assert ccl,
  # meaning it always returns true and is not translated from an actual clause. it
  # will not affect number of errors nor produce error messages.)
  sub add_ccl {
      my ($self, $cd, $ccl, $opts) = @_;
      $opts //= {};
      my $clause = $cd->{clause} // "";
      my $op     = $cd->{cl_op} // "";
      #$log->errorf("TMP: adding ccl %s, current ccls=%s", $ccl, $cd->{ccls});
  
      my $el = $opts->{err_level} // $cd->{clset}{"$clause.err_level"} // "error";
      my $err_expr = $opts->{err_expr};
      my $err_msg  = $opts->{err_msg};
  
      if (defined $err_expr) {
          $self->add_var($cd, '_sahv_dpath', []) if $cd->{use_dpath};
          $err_expr = $self->expr_prefix_dpath($err_expr) if $cd->{use_dpath};
      } else {
          unless (defined $err_msg) { $err_msg = $cd->{clset}{"$clause.err_msg"} }
          unless (defined $err_msg) {
              # XXX how to invert on op='none' or op='not'?
  
              my @msgpath = @{$cd->{spath}};
              my $msgpath;
              my $hc  = $cd->{_hc};
              my $hcd = $cd->{_hcd};
              while (1) {
                  # search error message, use more general one if the more
                  # specific one is not available
                  last unless @msgpath;
                  $msgpath = join("/", @msgpath);
                  my $ccls = $hcd->{result}{$msgpath};
                  pop @msgpath;
                  if ($ccls) {
                      local $hcd->{args}{format} = 'inline_err_text';
                      $err_msg = $hc->format_ccls($hcd, $ccls);
                      # show path when debugging
                      $err_msg = "(msgpath=$msgpath) $err_msg"
                          if $cd->{args}{debug};
                      last;
                  }
              }
              if (!$err_msg) {
                  $err_msg = "ERR (clause=".($cd->{clause} // "").")";
              } else {
                  $err_msg = ucfirst($err_msg);
              }
          }
          if ($err_msg) {
              $self->add_var($cd, '_sahv_dpath', []) if $cd->{use_dpath};
              $err_expr = $self->literal($err_msg);
              $err_expr = $self->expr_prefix_dpath($err_expr) if $cd->{use_dpath};
          }
      }
  
      my $rt = $cd->{args}{return_type};
      my $et = $cd->{args}{err_term};
      my $err_code;
      if ($rt eq 'full') {
          $self->add_var($cd, '_sahv_dpath', []) if $cd->{use_dpath};
          my $k = $el eq 'warn' ? 'warnings' : 'errors';
          $err_code = $self->expr_set_err_full($et, $k, $err_expr) if $err_expr;
      } elsif ($rt =~ /\Astr/) {
          if ($el ne 'warn') {
              $err_code = $self->expr_set_err_str($et, $err_expr) if $err_expr;
          }
      }
  
      my $res = {
          ccl             => $ccl,
          err_level       => $el,
          err_code        => $err_code,
          (_debug_ccl_note => $cd->{_debug_ccl_note}) x !!$cd->{_debug_ccl_note},
          subdata         => $opts->{subdata},
      };
      push @{ $cd->{ccls} }, $res;
      delete $cd->{uclset}{"$clause.err_level"};
      delete $cd->{uclset}{"$clause.err_msg"};
  }
  
  # join ccls to handle .op and insert error messages. opts = op
  sub join_ccls {
      my ($self, $cd, $ccls, $opts) = @_;
      $opts //= {};
      my $op = $opts->{op} // "and";
      #$log->errorf("TMP: joining ccl %s", $ccls);
      #warn "join_ccls"; #TMP
  
      my ($min_ok, $max_ok, $min_nok, $max_nok);
      if ($op eq 'and') {
          $max_nok = 0;
      } elsif ($op eq 'or') {
          $min_ok = 1;
      } elsif ($op eq 'none') {
          $max_ok = 0;
      } elsif ($op eq 'not') {
  
      }
      my $dmin_ok  = defined($min_ok);
      my $dmax_ok  = defined($max_ok);
      my $dmin_nok = defined($min_nok);
      my $dmax_nok = defined($max_nok);
  
      return "" unless @$ccls;
  
      my $rt      = $cd->{args}{return_type};
      my $vp      = $cd->{args}{var_prefix};
  
      my $aop = $self->logical_and_op;
      my $nop = $self->logical_not_op;
  
      my $true = $self->true;
  
      # insert comment, error message, and $ok/$nok counting. $which is 0 by
      # default (normal), or 1 (reverse logic, for 'not' or 'none'), or 2 (for
      # $ok/$nok counting), or 3 (like 2, but for the last clause).
      my $_ice = sub {
          my ($ccl, $which) = @_;
  
          return $self->enclose_paren($ccl->{ccl}) if $ccl->{assert};
  
          my $res = "";
  
          if ($ccl->{_debug_ccl_note}) {
              if ($cd->{args}{debug_log} // $cd->{args}{debug}) {
                  $res .= $self->expr_log(
                      $cd, $self->literal($ccl->{_debug_ccl_note})) . " $aop\n";
              } else {
                  $res .= $self->comment($cd, $ccl->{_debug_ccl_note});
              }
          }
  
          $which //= 0;
          # clause code
          my $cc = ($which == 1 ? $nop:"") . $self->enclose_paren($ccl->{ccl});
          my ($ec, $oec);
          my ($ret, $oret);
          if ($which >= 2) {
              my @chk;
              if ($ccl->{err_level} eq 'warn') {
                  $oret = 1;
                  $ret  = 1;
              } elsif ($ccl->{err_level} eq 'fatal') {
                  $oret = 1;
                  $ret  = 0;
              } else {
                  $oret = $self->expr_preinc_var("${vp}ok");
                  $ret  = $self->expr_preinc_var("${vp}nok");
                  push @chk, $self->expr_var("${vp}ok"). " <= $max_ok"
                      if $dmax_ok;
                  push @chk, $self->expr_var("${vp}nok")." <= $max_nok"
                      if $dmax_nok;
                  if ($which == 3) {
                      push @chk, $self->expr_var("${vp}ok"). " >= $min_ok"
                          if $dmin_ok;
                      push @chk, $self->expr_var("${vp}nok")." >= $min_nok"
                          if $dmin_nok;
  
                      # we need to clear the error message previously set
                      if ($rt !~ /\Abool/) {
                          my $et = $cd->{args}{err_term};
                          my $clerrc;
                          if ($rt eq 'full') {
                              $clerrc = $self->expr_reset_err_full($et);
                          } else {
                              $clerrc = $self->expr_reset_err_str($et);
                          }
                          push @chk, $clerrc;
                      }
                  }
              }
              $res .= "($cc ? $oret : $ret)";
              $res .= " $aop " . join(" $aop ", @chk) if @chk;
          } else {
              $ec = $ccl->{err_code};
              $ret =
                  $ccl->{err_level} eq 'fatal' ? 0 :
                      # this must not be done because it messes up ok/nok counting
                      #$rt eq 'full' ? 1 :
                          $ccl->{err_level} eq 'warn' ? 1 : 0;
              if ($rt =~ /\Abool/ && $ret) {
                  $res .= $true;
              } elsif ($rt =~ /\Abool/ || !$ec) {
                  $res .= $self->enclose_paren($cc);
              } else {
                  $res .= $self->enclose_paren(
                      $self->enclose_paren($cc). " ? $true : ($ec,$ret)",
                      "force");
              }
          }
  
          # insert dpath handling
          $res = $self->expr_push_and_pop_dpath_between_expr($res)
              if $cd->{use_dpath} && $ccl->{subdata};
          $res;
  
      };
  
      my $j = "\n\n$aop\n\n";
      if ($op eq 'not') {
          return $_ice->($ccls->[0], 1);
      } elsif ($op eq 'and') {
          return join $j, map { $_ice->($_) } @$ccls;
      } elsif ($op eq 'none') {
          return join $j, map { $_ice->($_, 1) } @$ccls;
      } else {
          my $jccl = join $j, map {$_ice->($ccls->[$_], $_ == @$ccls-1 ? 3:2)}
              0..@$ccls-1;
          {
              local $cd->{ccls} = [];
              local $cd->{_debug_ccl_note} = "op=$op";
              $self->add_ccl(
                  $cd,
                  $self->expr_block(
                      join(
                          "",
                          $self->stmt_declare_local_var("${vp}ok" , "0"), "\n",
                          $self->stmt_declare_local_var("${vp}nok", "0"), "\n",
                          "\n",
                          $self->block_uses_sub ?
                              $self->stmt_return($jccl) : $jccl,
                      )
                  ),
              );
              $_ice->($cd->{ccls}[0]);
          }
      }
  }
  
  sub before_compile {
      my ($self, $cd) = @_;
  
      if ($cd->{args}{data_term_is_lvalue}) {
          $cd->{data_term} = $cd->{args}{data_term};
      } else {
          my $v = $cd->{args}{var_prefix} . $cd->{args}{data_name};
          push @{ $cd->{vars} }, $v; # XXX unless already there
          $cd->{data_term} = $self->var_sigil . $v;
          die "BUG: support for non-perl compiler not yet added here"
              unless $cd->{compiler_name} eq 'perl';
          push @{ $cd->{ccls} }, ["(local($cd->{data_term} = $cd->{args}{data_term}), 1)"];
      }
  }
  
  sub before_handle_type {
      my ($self, $cd) = @_;
  
      # do a human compilation first to collect all the error messages
  
      unless ($cd->{is_inner}) {
          my $hc = $cd->{_hc};
          my %hargs = %{$cd->{args}};
          $hargs{format}               = 'msg_catalog';
          $hargs{schema_is_normalized} = 1;
          $hargs{schema}               = $cd->{nschema};
          $hargs{on_unhandled_clause}  = 'ignore';
          $hargs{on_unhandled_attr}    = 'ignore';
          $hargs{hash_values}          = $cd->{args}{human_hash_values};
          $cd->{_hcd} = $hc->compile(%hargs);
      }
  }
  
  sub before_all_clauses {
      my ($self, $cd) = @_;
  
      $cd->{use_dpath} //= (
          $cd->{args}{return_type} =~ /\Afull/ ||
          ($cd->{args}{return_type} =~ /\Astr/ && $cd->{has_subschema})
      );
  
      # handle ok/default/coercion/prefilters/req/forbidden clauses and type check
  
      my $c      = $cd->{compiler};
      my $cname  = $c->name;
      my $dt     = $cd->{data_term};
      my $clsets = $cd->{clsets};
  
      # handle ok, this is very high priority because !ok=>1 should fail undef
      # too. we need to handle its .op=not here.
      for my $i (0..@$clsets-1) {
          my $clset  = $clsets->[$i];
          next unless exists $clset->{ok};
          my $op = $clset->{"ok.op"} // "";
          if ($op && $op ne 'not') {
              $self->_die($cd, "ok can only be combined with .op=not");
          }
          if ($op eq 'not') {
              local $cd->{_debug_ccl_note} = "!ok #$i";
              $self->add_ccl($cd, $self->false);
          } else {
              local $cd->{_debug_ccl_note} = "ok #$i";
              $self->add_ccl($cd, $self->true);
          }
          delete $cd->{uclsets}[$i]{"ok"};
          delete $cd->{uclsets}[$i]{"ok.is_expr"};
      }
  
      # handle default
      for my $i (0..@$clsets-1) {
          my $clset  = $clsets->[$i];
          my $def    = $clset->{default};
          my $defie  = $clset->{"default.is_expr"};
          if (defined $def) {
              local $cd->{_debug_ccl_note} = "default #$i";
              my $ct = $defie ?
                  $self->expr($def) : $self->literal($def);
              $self->add_ccl(
                  $cd,
                  "(".$self->expr_setif($dt, $ct).", ".$self->true.")",
                  {err_msg => ""},
              );
          }
          delete $cd->{uclsets}[$i]{"default"};
          delete $cd->{uclsets}[$i]{"default.is_expr"};
      }
  
      # handle req
      my $has_req;
      for my $i (0..@$clsets-1) {
          my $clset  = $clsets->[$i];
          my $req    = $clset->{req};
          my $reqie  = $clset->{"req.is_expr"};
          my $req_err_msg = $self->_xlt($cd, "Required but not specified");
          local $cd->{_debug_ccl_note} = "req #$i";
          if ($req && !$reqie) {
              $has_req++;
              $self->add_ccl(
                  $cd, $self->expr_defined($dt),
                  {
                      err_msg   => $req_err_msg,
                      err_level => 'fatal',
                  },
              );
          } elsif ($reqie) {
              $has_req++;
              my $ct = $self->expr($req);
              $self->add_ccl(
                  $cd, "!($ct) || ".$self->expr_defined($dt),
                  {
                      err_msg   => $req_err_msg,
                      err_level => 'fatal',
                  },
              );
          }
          delete $cd->{uclsets}[$i]{"req"};
          delete $cd->{uclsets}[$i]{"req.is_expr"};
      }
  
      # handle forbidden
      my $has_fbd;
      for my $i (0..@$clsets-1) {
          my $clset  = $clsets->[$i];
          my $fbd    = $clset->{forbidden};
          my $fbdie  = $clset->{"forbidden.is_expr"};
          my $fbd_err_msg = $self->_xlt($cd, "Forbidden but specified");
          local $cd->{_debug_ccl_note} = "forbidden #$i";
          if ($fbd && !$fbdie) {
              $has_fbd++;
              $self->add_ccl(
                  $cd, "!".$self->expr_defined($dt),
                  {
                      err_msg   => $fbd_err_msg,
                      err_level => 'fatal',
                  },
              );
          } elsif ($fbdie) {
              $has_fbd++;
              my $ct = $self->expr($fbd);
              $self->add_ccl(
                  $cd, "!($ct) || !".$self->expr_defined($dt),
                  {
                      err_msg   => $fbd_err_msg,
                      err_level => 'fatal',
                  },
              );
          }
          delete $cd->{uclsets}[$i]{"forbidden"};
          delete $cd->{uclsets}[$i]{"forbidden.is_expr"};
      }
  
      if (!$has_req && !$has_fbd) {
          $cd->{_skip_undef} = 1;
          $cd->{_ccls_idx1} = @{$cd->{ccls}};
      }
  
      my $coerce_expr;
      my $coerce_might_die;
      my $coerce_ccl_note;
    GEN_COERCE_EXPR:
      {
          last unless $cd->{args}{coerce};
  
          use experimental 'smartmatch';
          require Data::Sah::CoerceCommon;
  
          my @coerce_rules;
          for my $i (0..@$clsets-1) {
              my $clset = $clsets->[$i];
              push @coerce_rules,
                  @{ $clset->{"x.$cname.coerce_rules"} // [] },
                  @{ $clset->{'x.coerce_rules'} // [] };
          }
  
          my $rules = Data::Sah::CoerceCommon::get_coerce_rules(
              compiler => $self->name,
              type => $cd->{type},
              data_term => $dt,
              coerce_to => $cd->{coerce_to},
              coerce_rules => \@coerce_rules,
          );
          last unless @$rules;
  
          for my $i (reverse 0..$#{$rules}) {
              my $rule = $rules->[$i];
  
              $self->add_compile_module(
                  $cd, "Data::Sah::Coerce::$cname\::$cd->{type}::$rule->{name}",
                  {category => 'coerce'},
              );
  
              if ($rule->{modules}) {
                  for (keys %{ $rule->{modules} }) {
                      $self->add_runtime_module($cd, $_, {category=>'coerce'});
                  }
              }
  
              if ($i == $#{$rules}) {
                  $coerce_expr = $self->expr_ternary(
                      "($rule->{expr_match})",
                      "($rule->{expr_coerce})",
                      $dt,
                  );
              } else {
                  $coerce_expr = $self->expr_ternary(
                      "($rule->{expr_match})",
                      "($rule->{expr_coerce})",
                      "($coerce_expr)",
                  );
              }
              $coerce_might_die = 1 if $rule->{meta}{might_die};
          }
          $coerce_ccl_note = "coerce from: ".
              join(", ", map {$_->{name}} @$rules) .
              ($cd->{coerce_to} ? " # coerce to: $cd->{coerce_to}" : "");
      } # GEN_COERCE_EXPR
  
    HANDLE_TYPE_CHECK:
      {
          $self->_die($cd, "BUG: type handler did not produce _ccl_check_type")
              unless defined($cd->{_ccl_check_type});
          local $cd->{_debug_ccl_note};
  
          # XXX handle prefilters
  
          # handle coercion
          if ($coerce_expr) {
              $cd->{_debug_ccl_note} = $coerce_ccl_note;
              if ($coerce_might_die) {
                  $self->add_ccl(
                      $cd,
                      $self->expr_eval($self->expr_set($dt, $coerce_expr)),
                      {
                          err_msg => "Cannot coerce data to $cd->{type}", # XXX include error message from coercion failure
                      },
                  );
              } else {
                  $self->add_ccl(
                      $cd,
                      "(".$self->expr_set($dt, $coerce_expr).", ".$self->true.")",
                      {
                          err_msg => "",
                      },
                  );
              }
          }
  
          $cd->{_debug_ccl_note} = "check type '$cd->{type}'";
          $self->add_ccl(
              $cd, $cd->{_ccl_check_type},
              {
                  err_msg   => sprintf(
                      $self->_xlt($cd, "Not of type %s"),
                      $self->_xlt(
                          $cd,
                          $cd->{_hc}->get_th(name=>$cd->{type})->name //
                              $cd->{type}
                          ),
                  ),
                  err_level => 'fatal',
              },
          );
      }
  }
  
  sub before_clause {
      my ($self, $cd) = @_;
  
      $self->_die($cd, "Sorry, .op + .is_expr not yet supported ".
                      "(found in clause $cd->{clause})")
          if $cd->{cl_is_expr} && $cd->{cl_op};
  
      if ($cd->{args}{debug}) {
          state $json = do {
              require JSON;
              JSON->new->allow_nonref;
          };
          my $clset = $cd->{clset};
          my $cl    = $cd->{clause};
          my $res   = $json->encode({
              map { $_ => $clset->{$_}}
                  grep {/\A\Q$cl\E(?:\.|\z)/}
                      keys %$clset });
          $res =~ s/\n+/ /g;
          # a one-line dump of the clause, suitable for putting in generated
          # code's comment
          $cd->{_debug_ccl_note} = "clause: $res";
      } else {
          $cd->{_debug_ccl_note} = "clause: $cd->{clause}";
      }
  
      # we save ccls to save_ccls and empty ccls for each clause, to let clause
      # join and do stuffs to ccls. at after_clause(), we push the clause's result
      # as a single ccl to the original ccls.
  
      push @{ $cd->{_save_ccls} }, $cd->{ccls};
      $cd->{ccls} = [];
  }
  
  sub after_clause {
      my ($self, $cd) = @_;
  
      if ($cd->{args}{debug}) {
          delete $cd->{_debug_ccl_note};
      }
  
      my $save = pop @{ $cd->{_save_ccls} };
      if (@{ $cd->{ccls} }) {
          push @$save, {
              ccl       => $self->join_ccls($cd, $cd->{ccls}, {op=>$cd->{cl_op}}),
              err_level => $cd->{clset}{"$cd->{clause}.err_level"} // "error",
          }
      }
      $cd->{ccls} = $save;
  }
  
  sub after_clause_sets {
      my ($self, $cd) = @_;
  
      # simply join them together with &&
      $cd->{result} = $self->indent(
          $cd,
          $self->join_ccls($cd, $cd->{ccls}, {err_msg => ''}),
      );
  }
  
  sub after_all_clauses {
      my ($self, $cd) = @_;
  
      # XXX also handle postfilters here
  
      if (delete $cd->{_skip_undef}) {
          my $jccl = $self->join_ccls(
              $cd,
              [splice(@{ $cd->{ccls} }, $cd->{_ccls_idx1})],
          );
          local $cd->{_debug_ccl_note} = "skip if undef";
          $self->add_ccl(
              $cd,
              "!".$self->expr_defined($cd->{data_term})." ? ".$self->true." : \n\n".
                  $self->enclose_paren($jccl),
              {err_msg => ''},
          );
      }
  
      # simply join them together with &&
      $cd->{result} = $self->indent(
          $cd,
          $self->join_ccls($cd, $cd->{ccls}, {err_msg => ''}),
      );
  }
  
  1;
  # ABSTRACT: Base class for programming language compilers
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::Prog - Base class for programming language compilers
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::Prog (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 SYNOPSIS
  
  =head1 DESCRIPTION
  
  This class is derived from L<Data::Sah::Compiler>. It is used as base class for
  compilers which compile schemas into code (validator) in several programming
  languages, Perl (L<Data::Sah::Compiler::perl>) and JavaScript
  (L<Data::Sah::Compiler::js>) being two of them. (Other similar programming
  languages like PHP and Ruby might also be supported later on if needed).
  
  Compilers using this base class are flexible in the kind of code they produce:
  
  =over 4
  
  =item * configurable validator return type
  
  Can generate validator that returns a simple bool result, str, or full data
  structure (containing errors, warnings, and potentially other information).
  
  =item * configurable data term
  
  For flexibility in combining the validator code with other code, e.g. putting
  inside subroutine wrapper (see L<Perinci::Sub::Wrapper>) or directly embedded to
  your source code (see L<Dist::Zilla::Plugin::Rinci::Validate>).
  
  =back
  
  =for Pod::Coverage ^(after_.+|before_.+|add_var|add_ccl|join_ccls|check_compile_args|enclose_paren|init_cd|expr|expr_.+|stmt_.+)$
  
  =head1 HOW IT WORKS
  
  The compiler generates code in the following form:
  
   EXPR && EXPR2 && ...
  
  where C<EXPR> can be a single expression or multiple expressions joined by the
  list operator (which Perl and JavaScript support). Each C<EXPR> is typically
  generated out of a single schema clause. Some pseudo-example of generated
  JavaScript code:
  
   (data >= 0)  # from clause: min => 0
   &&
   (data <= 10) # from clause: max => 10
  
  Another example, a fuller translation of schema C<< [int => {min=>0, max=>10}]
  >> to Perl, returning string result (error message) instead of boolean:
  
   # from clause: req => 0
   !defined($data) ? 1 : (
  
       # type check
       ($data =~ /^[+-]?\d+$/ ? 1 : ($err //= "Data is not an integer", 0))
  
       &&
  
       # from clause: min => 0
       ($data >=  0 ? 1 : ($err //= "Must be at least 0", 0))
  
       &&
  
       # from clause: max => 10
       ($data <= 10 ? 1 : ($err //= "Must be at most 10", 0))
  
   )
  
  The final validator code will add enclosing subroutine and variable declaration,
  loading of modules, etc.
  
  Note: Current assumptions/hard-coded things for the supported languages: ternary
  operator (C<? :>), semicolon as statement separator.
  
  =head1 COMPILATION DATA KEYS
  
  =over
  
  =item * use_dpath => bool
  
  Convenience. This is set when code needs to track data path, which is when
  C<return_type> argument is set to something other than C<bool> or C<bool+val>,
  and when schema has subschemas. Data path is used when generating error message
  string, to help point to the item in the data structure (an array element, a
  hash value) which fails the validation. This is not needed when we want the
  validator to only return true/false, and also not needed when we do not recurse
  into subschemas.
  
  =item * data_term => ARRAY
  
  Input data term. Set to C<< $cd->{args}{data_term} >> or a temporary variable
  (if C<< $cd->{args}{data_term_is_lvalue} >> is false). Hooks should use this
  instead of C<< $cd->{args}{data_term} >> directly, because aside from the
  aforementioned temporary variable, data term can also change, for example if
  C<default.temp> or C<prefilters.temp> attribute is set, where generated code
  will operate on another temporary variable to avoid modifying the original data.
  Or when C<.input> attribute is set, where generated code will operate on
  variable other than data.
  
  =item * subs => ARRAY
  
  Contains pairs of subroutine names and definition code string, e.g. C<< [
  [_sahs_zero => 'sub _sahs_zero { $_[0] == 0 }'], [_sahs_nonzero => 'sub
  _sah_s_nonzero { $_[0] != 0 }'] ] >>. For flexibility, you'll need to do this
  bit of arranging yourself to get the final usable code you can compile in your
  chosen programming language.
  
  =item * vars => HASH
  
  =item * coerce_to => str
  
  Retrieved from the schema's C<x.$COMPILER.coerce_to> attribute. Each type
  handler might have its own default value.
  
  =back
  
  =head1 INTERNAL VARIABLES IN THE GENERATED CODE
  
  The generated code maintains the following variables. C<_sahv_> prefix stands
  for "Sah validator", it is used to minimize clash with data_term.
  
  =over
  
  =item * _sahv_dpath => ARRAY
  
  Analogous to C<spath> in compilation data, this variable stands for "data path"
  and is used to track location within data. If a clause is checking each element
  of an array (like the 'each_elem' or 'elems' array clause), this variable will
  be adjusted accordingly. Error messages thus can be more informative by pointing
  more exactly where in the data the problem lies.
  
  =item * tmp_data_term => ANY
  
  As explained in the C<compile()> method, this is used to store temporary value
  when checking against clauses.
  
  =item * _sahv_stack => ARRAY
  
  This variable is used to store validation result of subdata. It is only used if
  the validator is returning a string or full structure, not a single boolean
  value. See C<Data::Sah::Compiler::js::TH::hash> for an example.
  
  =item * _sahv_x
  
  Usually used as temporary variable in short, anonymous functions.
  
  =back
  
  =head1 ATTRIBUTES
  
  These usually need not be set/changed by users.
  
  =head2 hc => OBJ
  
  Instance of L<Data::Sah::Compiler::human>, to generate error messages.
  
  =head2 comment_style => STR
  
  Specify how comments are written in the target language. Either 'cpp' (C<//
  comment>), 'shell' (C<# comment>), 'c' (C</* comment */>), or 'ini' (C<;
  comment>). Each programming language subclass will set this, for example, the
  perl compiler sets this to 'shell' while js sets this to 'cpp'.
  
  =head2 var_sigil => STR
  
  =head2 concat_op => STR
  
  =head2 logical_and_op => STR
  
  =head2 logical_not_op => STR
  
  =head1 METHODS
  
  =head2 new() => OBJ
  
  =head2 $c->compile(%args) => RESULT
  
  Aside from base class' arguments, this class supports these arguments (suffix
  C<*> denotes required argument):
  
  =over
  
  =item * data_term => STR
  
  A variable name or an expression in the target language that contains the data,
  defaults to I<var_sigil> + C<name> if not specified.
  
  =item * data_term_is_lvalue => BOOL (default: 1)
  
  Whether C<data_term> can be assigned to.
  
  =item * tmp_data_name => STR
  
  Normally need not be set manually, as it will be set to "tmp_" . data_name. Used
  to store temporary data during clause evaluation.
  
  =item * tmp_data_term => STR
  
  Normally need not be set manually, as it will be set to var_sigil .
  tmp_data_name. Used to store temporary data during clause evaluation. For
  example, in JavaScript, the 'int' and 'float' type pass strings in the type
  check. But for further checking with the clauses (like 'min', 'max',
  'divisible_by') the string data needs to be converted to number first. Likewise
  with prefiltering. This variable holds the temporary value. The clauses compare
  against this value. At the end of clauses, the original data_term is restored.
  So the output validator code for schema C<< [int => min => 1] >> will look
  something like:
  
   // type check 'int'
   type(data)=='number' && Math.round(data)==data || parseInt(data)==data)
  
   &&
  
   // convert to number
   (tmp_data = type(data)=='number' ? data : parseFloat(data), true)
  
   &&
  
   // check clause 'min'
   (tmp_data >= 1)
  
  =item * err_term => STR
  
  A variable name or lvalue expression to store error message(s), defaults to
  I<var_sigil> + C<err_NAME> (e.g. C<$err_data> in the Perl compiler).
  
  =item * var_prefix => STR (default: _sahv_)
  
  Prefix for variables declared by generated code.
  
  =item * sub_prefix => STR (default: _sahs_)
  
  Prefix for subroutines declared by generated code.
  
  =item * code_type => STR (default: validator)
  
  The kind of code to generate. For now the only valid (and default) value is
  'validator'. Compiler can perhaps generate other kinds of code in the future.
  
  =item * return_type => STR (default: bool)
  
  Specify what kind of return value the generated code should produce. Either
  C<bool>, C<str>, or C<full>.
  
  C<bool> means generated validator code should just return true/false depending
  on whether validation succeeds/fails.
  
  C<str> means validation should return an error message string (the first one
  encountered) if validation fails and an empty string/undef if validation
  succeeds.
  
  C<full> means validation should return a full data structure. From this
  structure you can check whether validation succeeds, retrieve all the collected
  errors/warnings, etc.
  
  =item * coerce => bool (default: 1)
  
  If set to false, will not include coercion code.
  
  =item * debug => BOOL (default: 0)
  
  This is a general debugging option which should turn on all debugging-related
  options, e.g. produce more comments in the generated code, etc. Each compiler
  might have more specific debugging options.
  
  If turned on, specific debugging options can be explicitly turned off
  afterwards, e.g. C<< debug=>1, debug_log=>0 >> will turn on all debugging
  options but turn off the C<debug_log> setting.
  
  Currently turning on C<debug> means:
  
  =over
  
  =item - Turning on the other debug_* options, like debug_log
  
  =item - Prefixing error message with msgpath
  
  =back
  
  =item * debug_log => BOOL (default: 0)
  
  Whether to add logging to generated code. This aids in debugging generated code
  specially for more complex validation.
  
  =item * comment => BOOL (default: 1)
  
  If set to false, generated code will be devoid of comments.
  
  =item * human_hash_values => hash
  
  Optional. Will be passed to C<hash_values> argument during C<compile()> by human
  compiler.
  
  =back
  
  =head2 $c->comment($cd, @args) => STR
  
  Generate a comment. For example, in perl compiler:
  
   $c->comment($cd, "123"); # -> "# 123\n"
  
  Will return an empty string if compile argument C<comment> is set to false.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PROG

    $main::fatpacked{"Data/Sah/Compiler/Prog/TH.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PROG_TH';
  package Data::Sah::Compiler::Prog::TH;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  
  extends 'Data::Sah::Compiler::TH';
  
  # handled in compiler's before_all_clauses()
  
  sub clause_default {}
  sub clause_ok {}
  sub clause_req {}
  sub clause_forbidden {}
  sub clause_prefilters {}
  
  # handled in compiler's after_all_clauses()
  
  #sub clause_postfilters {}
  
  sub clause_name {
      my ($self, $cd) = @_;
      $self->compiler->_ignore_clause_and_attrs($cd);
  }
  
  sub clause_summary {
      my ($self, $cd) = @_;
      $self->compiler->_ignore_clause_and_attrs($cd);
  }
  
  sub clause_description {
      my ($self, $cd) = @_;
      $self->compiler->_ignore_clause_and_attrs($cd);
  }
  
  sub clause_comment {
      my ($self, $cd) = @_;
      $self->compiler->_ignore_clause($cd);
  }
  
  sub clause_tags {
      my ($self, $cd) = @_;
      $self->compiler->_ignore_clause($cd);
  }
  
  sub clause_defhash_v {
      my ($self, $cd) = @_;
      $self->compiler->_ignore_clause($cd);
  }
  
  sub clause_v {
      my ($self, $cd) = @_;
      $self->compiler->_ignore_clause($cd);
  }
  
  # temporarily use temporary variable for referring to data (e.g. when converting
  # non-number to number for checking in clauses, or prefiltering)
  sub set_tmp_data_term {
      my ($self, $cd, $expr) = @_;
      my $c = $self->compiler;
      #$log->errorf("TMP: set_tmp_data_term");
  
      $expr //= $cd->{data_term};
  
      my $tdn = $cd->{args}{tmp_data_name};
      my $tdt = $cd->{args}{tmp_data_term};
      my $t = $c->expr_array_subscript($tdt, $cd->{_subdata_level});
      unless ($cd->{_save_data_term}) {
          $c->add_var($cd, $tdn, []);
          $cd->{_save_data_term} = $cd->{data_term};
          $cd->{data_term} = $t;
      }
      local $cd->{_debug_ccl_note} = 'set temporary data term';
      $c->add_ccl($cd, "(".$c->expr_assign($t, $expr). ", ".$c->true.")",
                  {err_msg => ''});
  }
  
  sub restore_data_term {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
      #$log->errorf("TMP: restore_data_term");
  
      my $tdt = $cd->{args}{tmp_data_term};
      if ($cd->{_save_data_term}) {
          $cd->{data_term} = delete($cd->{_save_data_term});
          local $cd->{_debug_ccl_note} = 'restore original data term';
          $c->add_ccl($cd, "(".$c->expr_pop($tdt). ", ".$c->true.")",
                      {err_msg => ''});
      }
  }
  
  sub gen_any_or_all_of {
      my ($self, $which, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
      my $dt = $cd->{data_term};
  
      my $jccl;
      {
          local $cd->{ccls} = [];
          for my $i (0..@$cv-1) {
              local $cd->{spath} = [@{ $cd->{spath} }, $i];
              my $sch  = $cv->[$i];
              my %iargs = %{$cd->{args}};
              $iargs{outer_cd}             = $cd;
              $iargs{schema}               = $sch;
              $iargs{schema_is_normalized} = 0;
              $iargs{indent_level}++;
              my $icd  = $c->compile(%iargs);
              my @code = (
                  $icd->{result},
              );
              $c->add_ccl($cd, join("", @code));
          }
          if ($which eq 'all') {
              $jccl = $c->join_ccls(
                  $cd, $cd->{ccls}, {err_msg=>''});
          } else {
              $jccl = $c->join_ccls(
                  $cd, $cd->{ccls}, {err_msg=>'', op=>'or'});
          }
      }
      $c->add_ccl($cd, $jccl);
  }
  
  1;
  # ABSTRACT: Base class for programming-language emiting compiler's type handlers
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::Prog::TH - Base class for programming-language emiting compiler's type handlers
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::Prog::TH (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(compiler|clause_.+|handle_.+|gen_.+|set_tmp_data_term|restore_data_term)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PROG_TH

    $main::fatpacked{"Data/Sah/Compiler/Prog/TH/all.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PROG_TH_ALL';
  package Data::Sah::Compiler::Prog::TH::all;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::Prog::TH';
  with 'Data::Sah::Type::all';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      my $dt = $cd->{data_term};
      $cd->{_ccl_check_type} = $c->true;
  }
  
  sub clause_of {
      my ($self, $cd) = @_;
      $self->gen_any_or_all_of("all", $cd);
  }
  
  1;
  # ABSTRACT: Base class for programming language compiler handler for type "all"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::Prog::TH::all - Base class for programming language compiler handler for type "all"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::Prog::TH::all (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PROG_TH_ALL

    $main::fatpacked{"Data/Sah/Compiler/Prog/TH/any.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PROG_TH_ANY';
  package Data::Sah::Compiler::Prog::TH::any;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::Prog::TH';
  with 'Data::Sah::Type::any';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      my $dt = $cd->{data_term};
      $cd->{_ccl_check_type} = $c->true;
  }
  
  sub clause_of {
      my ($self, $cd) = @_;
      $self->gen_any_or_all_of("any", $cd);
  }
  
  1;
  # ABSTRACT: Base class for programming language compiler handler for type "any"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::Prog::TH::any - Base class for programming language compiler handler for type "any"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::Prog::TH::any (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PROG_TH_ANY

    $main::fatpacked{"Data/Sah/Compiler/TH.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_TH';
  package Data::Sah::Compiler::TH;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  use Mo qw(build default);
  
  # reference to compiler object
  has compiler => (is => 'rw');
  
  sub clause_v {
      my ($self, $cd) = @_;
      $self->compiler->_ignore_clause($cd);
  }
  
  sub clause_defhash_v {
      my ($self, $cd) = @_;
      $self->compiler->_ignore_clause($cd);
  }
  
  sub clause_schema_v {
      my ($self, $cd) = @_;
      $self->compiler->_ignore_clause($cd);
  }
  
  sub clause_base_v {
      my ($self, $cd) = @_;
      $self->compiler->_ignore_clause($cd);
  }
  
  sub clause_default_lang {
      my ($self, $cd) = @_;
      $self->compiler->_ignore_clause($cd);
  }
  
  sub clause_clause {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      my ($clause, $clv) = @$cv;
      my $meth   = "clause_$clause";
      my $mmeth  = "clausemeta_$clause";
  
      # provide an illusion of a clsets
      my $clsets = [{$clause => $clv}];
      local $cd->{clsets} = $clsets;
  
      $c->_process_clause($cd, 0, $clause);
  }
  
  # clause_clset, like clause_clause, also works by doing what compile() does.
  
  sub clause_clset {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      # provide an illusion of a clsets
      local $cd->{clsets} = [$cv];
      $c->_process_clsets($cd, 'from clause_clset');
  }
  
  1;
  # ABSTRACT: Base class for type handlers
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::TH - Base class for type handlers
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::TH (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(compiler|clause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_TH

    $main::fatpacked{"Data/Sah/Compiler/TextResultRole.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_TEXTRESULTROLE';
  package Data::Sah::Compiler::TextResultRole;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  use Mo qw(default);
  use Role::Tiny;
  
  # can be changed to tab, for example
  has indent_character => (is => 'rw', default => sub {''});
  
  sub add_result {
      my ($self, $cd, @args) = @_;
  
      $cd->{result} //= [];
      push @{ $cd->{result} }, $self->indent($cd, join("", @args));
      $self;
  }
  
  # BEGIN COPIED FROM String::Indent
  sub _indent {
      my ($indent, $str, $opts) = @_;
      $opts //= {};
  
      my $ibl = $opts->{indent_blank_lines} // 1;
      my $fli = $opts->{first_line_indent} // $indent;
      my $sli = $opts->{subsequent_lines_indent} // $indent;
      #say "D:ibl=<$ibl>, fli=<$fli>, sli=<$sli>";
  
      my $i = 0;
      $str =~ s/^([^\r\n]?)/$i++; !$ibl && !$1 ? "$1" : $i==1 ? "$fli$1" : "$sli$1"/egm;
      $str;
  }
  # END COPIED FROM String::Indent
  
  sub indent {
      my ($self, $cd, $str) = @_;
      _indent(
          $self->indent_character x $cd->{indent_level},
          $str,
      );
  }
  
  sub inc_indent {
      my ($self, $cd) = @_;
      $cd->{indent_level}++;
  }
  
  sub dec_indent {
      my ($self, $cd) = @_;
      $cd->{indent_level}--;
  }
  
  sub indent_str {
      my ($self, $cd) = @_;
      $self->indent_character x $cd->{indent_level};
  }
  
  1;
  # ABSTRACT: Role for compilers that produce text result (array of lines)
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::TextResultRole - Role for compilers that produce text result (array of lines)
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::TextResultRole (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 ATTRIBUTES
  
  =head2 indent_character => STR
  
  =head1 METHODS
  
  =head2 $c->add_result($cd, @arg)
  
  Append result to C<< $cd->{result} >>. Will use C<< $cd->{indent_level} >> to
  indent the line. Used by compiler; users normally do not need this.
  
  =head2 $c->inc_indent($cd)
  
  Increase indent level. This is done by increasing C<< $cd->{indent_level} >> by
  1.
  
  =head2 $c->dec_indent($cd)
  
  Decrease indent level. This is done by decreasing C<< $cd->{indent_level} >> by
  1.
  
  =head2 $c->indent_str($cd)
  
  Shortcut for C<< $c->indent_character x $cd->{indent_level} >>.
  
  =head2 $c->indent($cd, $str) => STR
  
  Indent each line in $str with indent_str and return the result.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_TEXTRESULTROLE

    $main::fatpacked{"Data/Sah/Compiler/human.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN';
  package Data::Sah::Compiler::human;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any::IfLOG qw($log);
  
  use Data::Dmp qw(dmp);
  use Mo qw(build default);
  use POSIX qw(locale_h);
  use Text::sprintfn;
  
  extends 'Data::Sah::Compiler';
  
  # every type extension is registered here
  our %typex; # key = type, val = [clause, ...]
  
  sub name { "human" }
  
  sub _add_msg_catalog {
      my ($self, $cd, $msg) = @_;
      return unless $cd->{args}{format} eq 'msg_catalog';
  
      my $spath = join("/", @{ $cd->{spath} });
      $cd->{_msg_catalog}{$spath} = $msg;
  }
  
  sub check_compile_args {
      use experimental 'smartmatch';
  
      my ($self, $args) = @_;
  
      $self->SUPER::check_compile_args($args);
  
      my @fmts = ('inline_text', 'inline_err_text', 'markdown', 'msg_catalog');
      $args->{format} //= $fmts[0];
      unless ($args->{format} ~~ @fmts) {
          $self->_die({}, "Unsupported format, use one of: ".join(", ", @fmts));
      }
  }
  
  sub init_cd {
      my ($self, %args) = @_;
  
      my $cd = $self->SUPER::init_cd(%args);
      if (($cd->{args}{format} // '') eq 'msg_catalog') {
          $cd->{_msg_catalog} //= $cd->{outer_cd}{_msg_catalog};
          $cd->{_msg_catalog} //= {};
      }
      $cd;
  }
  
  sub expr {
      my ($self, $cd, $expr) = @_;
  
      # for now we dump expression as is. we should probably parse it first to
      # localize number, e.g. "1.1 + 2" should become "1,1 + 2" in id_ID.
  
      # XXX for nicer output, perhaps say "the expression X" instead of just "X",
      # especially if X has a variable or rather complex.
      $expr;
  }
  
  sub literal {
      my ($self, $val) = @_;
  
      return $val unless ref($val);
      dmp($val);
  }
  
  # translate
  sub _xlt {
      my ($self, $cd, $text) = @_;
  
      my $lang = $cd->{args}{lang};
  
      #$log->tracef("translating text '%s' to '%s'", $text, $lang);
  
      return $text if $lang eq 'en_US';
      my $translations;
      {
          no strict 'refs';
          $translations = \%{"Data::Sah::Lang::$lang\::translations"};
      }
      return $translations->{$text} if defined($translations->{$text});
      if ($cd->{args}{mark_missing_translation}) {
          return "(no $lang text:$text)";
      } else {
          return $text;
      }
  }
  
  # ($cd, 3, "element") -> "3rd element"
  sub _ordinate {
      my ($self, $cd, $n, $noun) = @_;
  
      my $lang = $cd->{args}{lang};
  
      # we assume _xlt() has been called (and thus the appropriate
      # Data::Sah::Lang::* has been loaded)
  
      if ($lang eq 'en_US') {
          require Lingua::EN::Numbers::Ordinate;
          return Lingua::EN::Numbers::Ordinate::ordinate($n) . " $noun";
      } else {
          no strict 'refs';
          return "Data::Sah::Lang::$lang\::ordinate"->($n, $noun);
      }
  }
  
  sub _add_ccl {
      use experimental 'smartmatch';
  
      my ($self, $cd, $ccl) = @_;
      #$log->errorf("TMP: add_ccl %s", $ccl);
  
      $ccl->{xlt} //= 1;
  
      my $clause = $cd->{clause} // "";
      $ccl->{type} //= "clause";
  
      my $do_xlt = 1;
  
      my $hvals = {
          modal_verb     => $self->_xlt($cd, "must"),
          modal_verb_neg => $self->_xlt($cd, "must not"),
  
          # so they can overriden through hash_values
          field          => $self->_xlt($cd, "field"),
          fields         => $self->_xlt($cd, "fields"),
  
          %{ $cd->{args}{hash_values} // {} },
      };
      my $mod="";
  
      # is .human for desired language specified? if yes, use that instead
  
      {
          my $lang   = $cd->{args}{lang};
          my $dlang  = $cd->{clset_dlang} // "en_US"; # undef if not in clause
          my $suffix = $lang eq $dlang ? "" : ".alt.lang.$lang";
          if ($clause) {
              delete $cd->{uclset}{$_} for
                  grep /\A\Q$clause.human\E(\.|\z)/, keys %{$cd->{uclset}};
              if (defined $cd->{clset}{"$clause.human$suffix"}) {
                  $ccl->{type} = 'clause';
                  $ccl->{fmt}  = $cd->{clset}{"$clause.human$suffix"};
                  goto FILL_FORMAT;
              }
          } else {
              delete $cd->{uclset}{$_} for
                  grep /\A\.name(\.|\z)/, keys %{$cd->{uclset}};
              if (defined $cd->{clset}{".name$suffix"}) {
                  $ccl->{type} = 'noun';
                  $ccl->{fmt}  = $cd->{clset}{".name$suffix"};
                  $ccl->{vals} = undef;
                  goto FILL_FORMAT;
              }
          }
      }
  
      goto TRANSLATE unless $clause;
  
      my $ie    = $cd->{cl_is_expr};
      my $im    = $cd->{cl_is_multi};
      my $op    = $cd->{cl_op} // "";
      my $cv    = $cd->{clset}{$clause};
      my $vals  = $ccl->{vals} // [$cv];
  
      # handle .is_expr
  
      if ($ie) {
          if (!$ccl->{expr}) {
              $ccl->{fmt} = "($clause -> %s" . ($op ? " op=$op" : "") . ")";
              $do_xlt = 0;
              $vals = [$self->expr($cd, $vals)];
          }
          goto ERR_LEVEL;
      }
  
      # handle .op
  
      if ($op eq 'not') {
          ($hvals->{modal_verb}, $hvals->{modal_verb_neg}) =
              ($hvals->{modal_verb_neg}, $hvals->{modal_verb});
          $vals = [map {$self->literal($_)} @$vals];
      } elsif ($im && $op eq 'and') {
          if (@$cv == 2) {
              $vals = [sprintf($self->_xlt($cd, "%s and %s"),
                               $self->literal($cv->[0]),
                               $self->literal($cv->[1]))];
          } else {
              $vals = [sprintf($self->_xlt($cd, "all of %s"),
                               $self->literal($cv))];
          }
      } elsif ($im && $op eq 'or') {
          if (@$cv == 2) {
              $vals = [sprintf($self->_xlt($cd, "%s or %s"),
                               $self->literal($cv->[0]),
                               $self->literal($cv->[1]))];
          } else {
              $vals = [sprintf($self->_xlt($cd, "one of %s"),
                               $self->literal($cv))];
          }
      } elsif ($im && $op eq 'none') {
          ($hvals->{modal_verb}, $hvals->{modal_verbneg}) =
              ($hvals->{modal_verb_neg}, $hvals->{modal_verb});
          if (@$cv == 2) {
              $vals = [sprintf($self->_xlt($cd, "%s nor %s"),
                               $self->literal($cv->[0]),
                               $self->literal($cv->[1]))];
          } else {
              $vals = [sprintf($self->_xlt($cd, "any of %s"),
                               $self->literal($cv))];
          }
      } else {
          $vals = [map {$self->literal($_)} @$vals];
      }
  
    ERR_LEVEL:
  
      # handle .err_level
      if ($ccl->{type} eq 'clause' && 'constraint' ~~ $cd->{cl_meta}{tags}) {
          if (($cd->{clset}{"$clause.err_level"}//'error') eq 'warn') {
              if ($op eq 'not') {
                  $hvals->{modal_verb}     = $self->_xlt($cd, "should not");
                  $hvals->{modal_verb_neg} = $self->_xlt($cd, "should");
              } else {
                  $hvals->{modal_verb}     = $self->_xlt($cd, "should");
                  $hvals->{modal_verb_neg} = $self->_xlt($cd, "should not");
              }
          }
      }
      delete $cd->{uclset}{"$clause.err_level"};
  
    TRANSLATE:
  
      if ($ccl->{xlt}) {
          if (ref($ccl->{fmt}) eq 'ARRAY') {
              $ccl->{fmt}  = [map {$self->_xlt($cd, $_)} @{$ccl->{fmt}}];
          } elsif (!ref($ccl->{fmt})) {
              $ccl->{fmt}  = $self->_xlt($cd, $ccl->{fmt});
          }
      }
  
    FILL_FORMAT:
  
      if (ref($ccl->{fmt}) eq 'ARRAY') {
          $ccl->{text} = [map {sprintfn($_, (map {$_//""} ($hvals, @$vals)))}
                              @{$ccl->{fmt}}];
      } elsif (!ref($ccl->{fmt})) {
          $ccl->{text} = sprintfn($ccl->{fmt}, (map {$_//""} ($hvals, @$vals)));
      }
      delete $ccl->{fmt} unless $cd->{args}{debug};
  
    PUSH:
      push @{$cd->{ccls}}, $ccl;
  
      $self->_add_msg_catalog($cd, $ccl);
  }
  
  # add a compiled clause (ccl), which will be combined at the end of compilation
  # to be the final result. args is a hashref with these keys:
  #
  # * type* - str (default 'clause'). either 'noun', 'clause', 'list' (bulleted
  #   list, a clause followed by a list of items, each of them is also a ccl)
  #
  # * fmt* - str/2-element array. human text which can be used as the first
  #   argument to sprintf. string. if type=noun, can be a two-element arrayref to
  #   contain singular and plural version of noun.
  #
  # * expr - bool. fmt can handle .is_expr=1. for example, 'len=' => '1+1' can be
  #   compiled into 'length must be 1+1'. other clauses cannot handle expression,
  #   e.g. 'between=' => '[2, 2*2]'. this clause will be using the generic message
  #   'between must [2, 2*2]'
  #
  # * vals - arrayref (default [clause value]). values to fill fmt with.
  #
  # * items - arrayref. required if type=list. a single ccl or a list of ccls.
  #
  # * xlt - bool (default 1). set to 0 if fmt has been translated, and should not
  #   be translated again.
  #
  # add_ccl() is called by clause handlers and handles using .human, translating
  # fmt, sprintf(fmt, vals) into 'text', .err_level (adding 'must be %s', 'should
  # not be %s'), .is_expr, .op.
  sub add_ccl {
      my ($self, $cd, @ccls) = @_;
  
      my $op     = $cd->{cl_op} // '';
  
      my $ccl;
      if (@ccls == 1) {
          $self->_add_ccl($cd, $ccls[0]);
      } else {
          my $inner_cd = $self->init_cd(outer_cd => $cd);
          $inner_cd->{args} = $cd->{args};
          $inner_cd->{clause} = $cd->{clause};
          for (@ccls) {
              $self->_add_ccl($inner_cd, $_);
          }
  
          $ccl = {
              type  => 'list',
              vals  => [],
              items => $inner_cd->{ccls},
              multi => 0,
          };
          if ($op eq 'or') {
              $ccl->{fmt} = 'any of the following %(modal_verb)s be true';
          } elsif ($op eq 'and') {
              $ccl->{fmt} = 'all of the following %(modal_verb)s be true';
          } elsif ($op eq 'none') {
              $ccl->{fmt} = 'none of the following %(modal_verb)s be true';
              # or perhaps, fmt = 'All of the following ...' but set op to 'not'?
          }
          $self->_add_ccl($cd, $ccl);
      }
  }
  
  # format ccls to form final result. at the end of compilation, we have a tree of
  # ccls. this method accept a single ccl (of type either noun/clause) or an array
  # of ccls (which it will join together).
  sub format_ccls {
      my ($self, $cd, $ccls) = @_;
  
      # used internally to determine if the result is a single noun, in which case
      # when format is inline_err_text, we add 'Not of type '. XXX: currently this
      # is the wrong way to count? we shouldn't count children? perhaps count from
      # msg_catalog instead?
      local $cd->{_fmt_noun_count} = 0;
      local $cd->{_fmt_etc_count} = 0;
  
      my $f = $cd->{args}{format};
      my $res;
      if ($f eq 'inline_text' || $f eq 'inline_err_text' || $f eq 'msg_catalog') {
          $res = $self->_format_ccls_itext($cd, $ccls);
          if ($f eq 'inline_err_text') {
              #$log->errorf("TMP: noun=%d, etc=%d", $cd->{_fmt_noun_count}, $cd->{_fmt_etc_count});
              if ($cd->{_fmt_noun_count} == 1 && $cd->{_fmt_etc_count} == 0) {
                  # a single noun (type name), we should add some preamble
                  $res = sprintf(
                      $self->_xlt($cd, "Not of type %s"),
                      $res
                  );
              } elsif (!$cd->{_fmt_noun_count}) {
                  # a clause (e.g. "must be >= 10"), already looks like errmsg
              } else {
                  # a noun + clauses (e.g. "integer, must be even"). add preamble
                  $res = sprintf(
                      $self->_xlt(
                          $cd, "Does not satisfy the following schema: %s"),
                      $res
                  );
              }
          }
      } else {
          $res = $self->_format_ccls_markdown($cd, $ccls);
      }
      $res;
  }
  
  sub _format_ccls_itext {
      my ($self, $cd, $ccls) = @_;
  
      local $cd->{args}{mark_missing_translation} = 0;
      my $c_comma = $self->_xlt($cd, ", ");
  
      if (ref($ccls) eq 'HASH' && $ccls->{type} =~ /^(noun|clause)$/) {
          if ($ccls->{type} eq 'noun') {
              $cd->{_fmt_noun_count}++;
          } else {
              $cd->{_fmt_etc_count}++;
          }
          # handle a single noun/clause ccl
          my $ccl = $ccls;
          return ref($ccl->{text}) eq 'ARRAY' ? $ccl->{text}[0] : $ccl->{text};
      } elsif (ref($ccls) eq 'HASH' && $ccls->{type} eq 'list') {
          # handle a single list ccl
          my $c_openpar  = $self->_xlt($cd, "(");
          my $c_closepar = $self->_xlt($cd, ")");
          my $c_colon    = $self->_xlt($cd, ": ");
          my $ccl = $ccls;
  
          my $txt = $ccl->{text}; $txt =~ s/\s+$//;
          my @t = ($txt, $c_colon);
          my $i = 0;
          for (@{ $ccl->{items} }) {
              push @t, $c_comma if $i;
              my $it = $self->_format_ccls_itext($cd, $_);
              if ($it =~ /\Q$c_comma/) {
                  push @t, $c_openpar, $it, $c_closepar;
              } else {
                  push @t, $it;
              }
              $i++;
          }
          return join("", @t);
      } elsif (ref($ccls) eq 'ARRAY') {
          # handle an array of ccls
          return join($c_comma, map {$self->_format_ccls_itext($cd, $_)} @$ccls);
      } else {
          $self->_die($cd, "Can't format $ccls");
      }
  }
  
  sub _format_ccls_markdown {
      my ($self, $cd, $ccls) = @_;
  
      $self->_die($cd, "Sorry, markdown not yet implemented");
  }
  
  sub _load_lang_modules {
      my ($self, $cd) = @_;
  
      my $lang = $cd->{args}{lang};
      die "Invalid language '$lang', please use letters only"
          unless $lang =~ /\A\w+\z/;
  
      my @modp;
      unless ($lang eq 'en_US') {
          push @modp, "Data/Sah/Lang/$lang.pm";
          for my $cl (@{ $typex{$cd->{type}} // []}) {
              my $modp = "Data/Sah/Lang/$lang/TypeX/$cd->{type}/$cl.pm";
              $modp =~ s!::!/!g; # $cd->{type} might still contain '::'
              push @modp, $modp;
          }
      }
      my $i;
      for my $modp (@modp) {
          $i++;
          unless (exists $INC{$modp}) {
              if ($i == 1) {
                  # test to check whether Data::Sah::Lang::$lang exists. if it
                  # does not, we fallback to en_US.
                  require Module::Installed::Tiny;
                  if (!Module::Installed::Tiny::module_installed($modp)) {
                      #$log->debug("$mod cannot be found, falling back to en_US");
                      $cd->{args}{lang} = 'en_US';
                      last;
                  }
              }
              #$log->trace("Loading $modp ...");
              require $modp;
  
              # negative-cache, so we don't have to try again
              $INC{$modp} = undef;
          }
      }
  }
  
  sub before_compile {
      my ($self, $cd) = @_;
  
      # set locale so that numbers etc are printed according to locale (e.g.
      # sprintf("%s", 1.2) prints '1,2' in id_ID).
      $cd->{_orig_locale} = setlocale(LC_ALL);
  
      # XXX do we need to set everything? LC_ADDRESS, LC_TELEPHONE, LC_PAPER, ...
      my $res = setlocale(LC_ALL, $cd->{args}{locale} // $cd->{args}{lang});
      warn "Unsupported locale $cd->{args}{lang}"
          if $cd->{args}{debug} && !defined($res);
  }
  
  sub before_handle_type {
      my ($self, $cd) = @_;
  
      $self->_load_lang_modules($cd);
  }
  
  sub before_clause {
      my ($self, $cd) = @_;
  
      # by default, human clause handler can handle multiple values (e.g.
      # "div_by&"=>[2, 3] becomes "must be divisible by 2 and 3" instead of having
      # to be ["must be divisible by 2", "must be divisible by 3"]. some clauses
      # that don't can override this value to 0.
      $cd->{CLAUSE_DO_MULTI} = 1;
  }
  
  sub after_clause {
      my ($self, $cd) = @_;
  
      # reset what we set in before_clause()
      delete $cd->{CLAUSE_DO_MULTI};
  }
  
  sub after_all_clauses {
      use experimental 'smartmatch';
  
      my ($self, $cd) = @_;
  
      # quantify NOUN (e.g. integer) into 'required integer', 'optional integer',
      # or 'forbidden integer'.
  
      # my $q;
      # if (!$cd->{clset}{'required.is_expr'} &&
      #         !('required' ~~ $cd->{args}{skip_clause})) {
      #     if ($cd->{clset}{required}) {
      #         $q = 'required %s';
      #     } else {
      #         $q = 'optional %s';
      #     }
      # } elsif ($cd->{clset}{forbidden} && !$cd->{clset}{'forbidden.is_expr'} &&
      #              !('forbidden' ~~ $cd->{args}{skip_clause})) {
      #     $q = 'forbidden %s';
      # }
      # if ($q && @{$cd->{ccls}} && $cd->{ccls}[0]{type} eq 'noun') {
      #     $q = $self->_xlt($cd, $q);
      #     for (ref($cd->{ccls}[0]{text}) eq 'ARRAY' ?
      #              @{ $cd->{ccls}[0]{text} } : $cd->{ccls}[0]{text}) {
      #         $_ = sprintf($q, $_);
      #     }
      # }
  
      $cd->{result} = $self->format_ccls($cd, $cd->{ccls});
  }
  
  sub after_compile {
      my ($self, $cd) = @_;
  
      setlocale(LC_ALL, $cd->{_orig_locale});
  
      if ($cd->{args}{format} eq 'msg_catalog') {
          $cd->{result} = $cd->{_msg_catalog};
      }
  }
  
  1;
  # ABSTRACT: Compile Sah schema to human language
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human - Compile Sah schema to human language
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 SYNOPSIS
  
  =head1 DESCRIPTION
  
  This class is derived from L<Data::Sah::Compiler>. It generates human language
  text.
  
  =for Pod::Coverage ^(name|literal|expr|add_ccl|format_ccls|check_compile_args|handle_.+|before_.+|after_.+)$
  
  =head1 ATTRIBUTES
  
  =head1 METHODS
  
  =head2 new() => OBJ
  
  =head2 $c->compile(%args) => RESULT
  
  Aside from base class' arguments, this class supports these arguments (suffix
  C<*> denotes required argument):
  
  =over
  
  =item * format => STR (default: C<inline_text>)
  
  Format of text to generate. Either C<inline_text>, C<inline_err_text>, or
  C<markdown>. Note that you can easily convert Markdown to HTML, there are
  libraries in Perl, JavaScript, etc to do that.
  
  Sample C<inline_text> output:
  
   integer, must satisfy all of the following: (divisible by 3, at least 10)
  
  C<inline_err_text> is just like C<inline_text>, except geared towards producing
  an error message. Currently, instead of producing "integer" from schema "int",
  it produces "Not of type integer". The rest is identical.
  
  Sample C<markdown> output:
  
   integer, must satisfy all of the following:
  
   * divisible by 3
   * at least 10
  
  =item * hash_values => hash
  
  Optional, supply more keys to hash value to C<sprintfn> which will be used
  during compilation.
  
  =back
  
  =head3 Compilation data
  
  This subclass adds the following compilation data (C<$cd>).
  
  Keys which contain compilation state:
  
  =over 4
  
  =back
  
  Keys which contain compilation result:
  
  =over 4
  
  =back
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN

    $main::fatpacked{"Data/Sah/Compiler/human/TH.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH';
  package Data::Sah::Compiler::human::TH;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::TH';
  
  sub name { undef }
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      # give the class name
      my $pkg = ref($self);
      $pkg =~ s/^Data::Sah::Compiler::human::TH:://;
  
      $c->add_ccl($cd, {type=>'noun', fmt=>$pkg});
  }
  
  # not translated
  
  sub clause_name {}
  sub clause_summary {}
  sub clause_description {}
  sub clause_comment {}
  sub clause_tags {}
  
  sub clause_prefilters {}
  sub clause_postfilters {}
  
  # ignored
  
  sub clause_ok {}
  
  # handled in after_all_clauses
  
  sub clause_req {}
  sub clause_forbidden {}
  
  # default implementation
  
  sub clause_default {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      $c->add_ccl($cd, {expr=>1,
                        fmt => 'default value %s'});
  }
  
  sub before_clause_clause {
      my ($self, $cd) = @_;
      $cd->{CLAUSE_DO_MULTI} = 0;
  }
  
  sub before_clause_clset {
      my ($self, $cd) = @_;
      $cd->{CLAUSE_DO_MULTI} = 0;
  }
  
  1;
  # ABSTRACT: Base class for human type handlers
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH - Base class for human type handlers
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(name|compiler|clause_.+|handle_.+|before_.+|after_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH

    $main::fatpacked{"Data/Sah/Compiler/human/TH/Comparable.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_COMPARABLE';
  package Data::Sah::Compiler::human::TH::Comparable;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::Comparable';
  
  sub superclause_comparable {
      my ($self, $which, $cd) = @_;
      my $c = $self->compiler;
  
      my $fmt;
      if ($which eq 'is') {
          $c->add_ccl($cd, {expr=>1, multi=>1,
                            fmt => '%(modal_verb)s have the value %s'});
      } elsif ($which eq 'in') {
          $c->add_ccl($cd, {expr=>1, multi=>1,
                            fmt => '%(modal_verb)s be one of %s'});
      }
  }
  1;
  # ABSTRACT: human's type handler for role "Comparable"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::Comparable - human's type handler for role "Comparable"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::Comparable (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_COMPARABLE

    $main::fatpacked{"Data/Sah/Compiler/human/TH/HasElems.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_HASELEMS';
  package Data::Sah::Compiler::human::TH::HasElems;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::HasElems';
  
  sub before_clause {
      my ($self_th, $which, $cd) = @_;
  }
  
  sub before_clause_len_between {
      my ($self, $cd) = @_;
      $cd->{CLAUSE_DO_MULTI} = 0;
  }
  
  sub superclause_has_elems {
      my ($self_th, $which, $cd) = @_;
      my $c  = $self_th->compiler;
      my $cv = $cd->{cl_value};
  
      if ($which eq 'len') {
          $c->add_ccl($cd, {
              expr  => 1,
              fmt   => q[length %(modal_verb)s be %s],
          });
      } elsif ($which eq 'min_len') {
          $c->add_ccl($cd, {
              expr  => 1,
              fmt   => q[length %(modal_verb)s be at least %s],
          });
      } elsif ($which eq 'max_len') {
          $c->add_ccl($cd, {
              expr  => 1,
              fmt   => q[length %(modal_verb)s be at most %s],
          });
      } elsif ($which eq 'len_between') {
          $c->add_ccl($cd, {
              fmt   => q[length %(modal_verb)s be between %s and %s],
              vals  => $cv,
          });
      } elsif ($which eq 'has') {
          $c->add_ccl($cd, {
              expr=>1, multi=>1,
              fmt => "%(modal_verb)s have %s in its elements"});
      } elsif ($which eq 'each_index') {
          $self_th->clause_each_index($cd);
      } elsif ($which eq 'each_elem') {
          $self_th->clause_each_elem($cd);
      } elsif ($which eq 'check_each_index') {
          $self_th->compiler->_die_unimplemented_clause($cd);
      } elsif ($which eq 'check_each_elem') {
          $self_th->compiler->_die_unimplemented_clause($cd);
      } elsif ($which eq 'uniq') {
          $self_th->compiler->_die_unimplemented_clause($cd);
      } elsif ($which eq 'exists') {
          $self_th->compiler->_die_unimplemented_clause($cd);
      }
  }
  
  1;
  # ABSTRACT: human's type handler for role "HasElems"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::HasElems - human's type handler for role "HasElems"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::HasElems (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(name|clause_.+|superclause_.+|before_.+|after_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_HASELEMS

    $main::fatpacked{"Data/Sah/Compiler/human/TH/Sortable.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_SORTABLE';
  package Data::Sah::Compiler::human::TH::Sortable;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::Sortable';
  
  sub before_clause_between {
      my ($self, $cd) = @_;
      $cd->{CLAUSE_DO_MULTI} = 0;
  }
  
  sub before_clause_xbetween {
      my ($self, $cd) = @_;
      $cd->{CLAUSE_DO_MULTI} = 0;
  }
  
  sub superclause_sortable {
      my ($self, $which, $cd) = @_;
      my $c = $self->compiler;
      my $cv = $cd->{cl_value};
  
      if ($which eq 'min') {
          $c->add_ccl($cd, {
              expr=>1,
              fmt => '%(modal_verb)s be at least %s',
          });
      } elsif ($which eq 'xmin') {
          $c->add_ccl($cd, {
              expr=>1,
              fmt => '%(modal_verb)s be larger than %s',
          });
      } elsif ($which eq 'max') {
          $c->add_ccl($cd, {
              expr=>1,
              fmt => '%(modal_verb)s be at most %s',
          });
      } elsif ($which eq 'xmax') {
          $c->add_ccl($cd, {
              expr=>1,
              fmt => '%(modal_verb)s be smaller than %s',
          });
      } elsif ($which eq 'between') {
          $c->add_ccl($cd, {
              fmt => '%(modal_verb)s be between %s and %s',
              vals => $cv,
          });
      } elsif ($which eq 'xbetween') {
          $c->add_ccl($cd, {
              fmt => '%(modal_verb)s be larger than %s and smaller than %s',
              vals => $cv,
          });
      }
  }
  
  1;
  # ABSTRACT: human's type handler for role "Sortable"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::Sortable - human's type handler for role "Sortable"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::Sortable (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(name|clause_.+|superclause_.+|before_.+|after_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_SORTABLE

    $main::fatpacked{"Data/Sah/Compiler/human/TH/all.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_ALL';
  package Data::Sah::Compiler::human::TH::all;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH';
  with 'Data::Sah::Type::all';
  
  sub handle_type {
  }
  
  sub clause_of {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      my @result;
      my $i = 0;
      for my $cv2 (@$cv) {
          local $cd->{spath} = [@{$cd->{spath}}, $i];
          my %iargs = %{$cd->{args}};
          $iargs{outer_cd}             = $cd;
          $iargs{schema}               = $cv2;
          $iargs{schema_is_normalized} = 0;
          my $icd = $c->compile(%iargs);
          push @result, $icd->{ccls};
          $c->_add_msg_catalog($cd, $icd->{ccls});
          $i++;
      }
  
      # can we say 'NOUN1 as well as NOUN2 as well as NOUN3 ...'?
      my $can = 1;
      for my $r (@result) {
          unless (@$r == 1 && $r->[0]{type} eq 'noun') {
              $can = 0;
              last;
          }
      }
  
      my $vals;
      if ($can) {
          my $c0  = $c->_xlt($cd, '%(modal_verb)s be %s');
          my $awa = $c->_xlt($cd, 'as well as %s');
          my $wb  = $c->_xlt($cd, ' ');
          my $fmt;
          my $i = 0;
          for my $r (@result) {
              $fmt .= $i ? $wb . $awa : $c0;
              push @$vals, ref($r->[0]{text}) eq 'ARRAY' ?
                  $r->[0]{text}[0] : $r->[0]{text};
              $i++;
          }
          $c->add_ccl($cd, {
              fmt  => $fmt,
              vals => $vals,
              xlt  => 0,
              type => 'noun',
          });
      } else {
          $c->add_ccl($cd, {
              type  => 'list',
              fmt   => '%(modal_verb)s be all of the following',
              items => [
                  @result,
              ],
              vals  => [],
          });
      }
  }
  
  1;
  # ABSTRACT: perl's type handler for type "all"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::all - perl's type handler for type "all"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::all (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_ALL

    $main::fatpacked{"Data/Sah/Compiler/human/TH/any.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_ANY';
  package Data::Sah::Compiler::human::TH::any;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH';
  with 'Data::Sah::Type::any';
  
  sub handle_type {
      # does not have a noun
  }
  
  sub clause_of {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      my @result;
      my $i = 0;
      for my $cv2 (@$cv) {
          local $cd->{spath} = [@{$cd->{spath}}, $i];
          my %iargs = %{$cd->{args}};
          $iargs{outer_cd}             = $cd;
          $iargs{schema}               = $cv2;
          $iargs{schema_is_normalized} = 0;
          my $icd = $c->compile(%iargs);
          push @result, $icd->{ccls};
          $i++;
      }
  
      # can we say 'either NOUN1 or NOUN2 or NOUN3 ...'?
      my $can = 1;
      for my $r (@result) {
          unless (@$r == 1 && $r->[0]{type} eq 'noun') {
              $can = 0;
              last;
          }
      }
  
      my $vals;
      if ($can) {
          my $c0  = $c->_xlt($cd, '%(modal_verb)s be either %s');
          my $awa = $c->_xlt($cd, 'or %s');
          my $wb  = $c->_xlt($cd, ' ');
          my $fmt;
          my $i = 0;
          for my $r (@result) {
              $fmt .= $i ? $wb . $awa : $c0;
              push @$vals, ref($r->[0]{text}) eq 'ARRAY' ?
                  $r->[0]{text}[0] : $r->[0]{text};
              $i++;
          }
          $c->add_ccl($cd, {
              fmt  => $fmt,
              vals => $vals,
              xlt  => 0,
              type => 'noun',
          });
      } else {
          $c->add_ccl($cd, {
              type  => 'list',
              fmt   => '%(modal_verb)s be one of the following',
              items => [
                  @result,
              ],
              vals  => [],
          });
      }
  }
  
  1;
  # ABSTRACT: perl's type handler for type "any"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::any - perl's type handler for type "any"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::any (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_ANY

    $main::fatpacked{"Data/Sah/Compiler/human/TH/array.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_ARRAY';
  package Data::Sah::Compiler::human::TH::array;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH';
  with 'Data::Sah::Compiler::human::TH::Comparable';
  with 'Data::Sah::Compiler::human::TH::HasElems';
  with 'Data::Sah::Type::array';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      $c->add_ccl($cd, {
          fmt   => ["array", "arrays"],
          type  => 'noun',
      });
  }
  
  sub clause_each_index {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      my %iargs = %{$cd->{args}};
      $iargs{outer_cd}             = $cd;
      $iargs{schema}               = $cv;
      $iargs{schema_is_normalized} = 0;
      my $icd = $c->compile(%iargs);
  
      $c->add_ccl($cd, {
          type  => 'list',
          fmt   => 'each array subscript %(modal_verb)s be',
          items => [
              $icd->{ccls},
          ],
          vals  => [],
      });
  }
  
  sub clause_each_elem {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      my %iargs = %{$cd->{args}};
      $iargs{outer_cd}             = $cd;
      $iargs{schema}               = $cv;
      $iargs{schema_is_normalized} = 0;
      my $icd = $c->compile(%iargs);
  
      # can we say 'array of INOUNS', e.g. 'array of integers'?
      if (@{$icd->{ccls}} == 1) {
          my $c0 = $icd->{ccls}[0];
          if ($c0->{type} eq 'noun' && ref($c0->{text}) eq 'ARRAY' &&
                  @{$c0->{text}} > 1 && @{$cd->{ccls}} &&
                      $cd->{ccls}[0]{type} eq 'noun') {
              for (ref($cd->{ccls}[0]{text}) eq 'ARRAY' ?
                       @{$cd->{ccls}[0]{text}} : ($cd->{ccls}[0]{text})) {
                  my $fmt = $c->_xlt($cd, '%s of %s');
                  $_ = sprintf $fmt, $_, $c0->{text}[1];
              }
              return;
          }
      }
  
      # nope, we can't
      $c->add_ccl($cd, {
          type  => 'list',
          fmt   => 'each array element %(modal_verb)s be',
          items => [
              $icd->{ccls},
          ],
          vals  => [],
      });
  }
  
  sub clause_elems {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      for my $i (0..@$cv-1) {
          local $cd->{spath} = [@{$cd->{spath}}, $i];
          my $v = $cv->[$i];
          my %iargs = %{$cd->{args}};
          $iargs{outer_cd}             = $cd;
          $iargs{schema}               = $v;
          $iargs{schema_is_normalized} = 0;
          my $icd = $c->compile(%iargs);
          $c->add_ccl($cd, {
              type  => 'list',
              fmt   => '%s %(modal_verb)s be',
              vals  => [
                  $c->_ordinate($cd, $i+1, $c->_xlt($cd, "element")),
              ],
              items => [ $icd->{ccls} ],
          });
      }
  }
  
  1;
  # ABSTRACT: human's type handler for type "array"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::array - human's type handler for type "array"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::array (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_ARRAY

    $main::fatpacked{"Data/Sah/Compiler/human/TH/bool.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_BOOL';
  package Data::Sah::Compiler::human::TH::bool;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH';
  with 'Data::Sah::Compiler::human::TH::Comparable';
  with 'Data::Sah::Compiler::human::TH::Sortable';
  with 'Data::Sah::Type::bool';
  
  sub name { "boolean value" }
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      $c->add_ccl($cd, {
          fmt   => ["boolean value", "boolean values"],
          type  => 'noun',
      });
  }
  
  sub before_clause_is_true {
      my ($self, $cd) = @_;
      $cd->{CLAUSE_DO_MULTI} = 0;
  }
  
  sub clause_is_true {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      $c->add_ccl($cd, {
          fmt   => $cv ? q[%(modal_verb)s be true] : q[%(modal_verb)s be false],
      });
  }
  
  sub clause_is_re {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      $c->add_ccl($cd, {
          fmt   => q[%(modal_verb)s be a regex pattern],
      });
  }
  
  1;
  # ABSTRACT: perl's type handler for type "bool"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::bool - perl's type handler for type "bool"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::bool (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(name|clause_.+|superclause_.+|before_.+|after_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_BOOL

    $main::fatpacked{"Data/Sah/Compiler/human/TH/buf.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_BUF';
  package Data::Sah::Compiler::human::TH::buf;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH::str';
  
  sub name { "buffer" }
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      $c->add_ccl($cd, {
          fmt   => ["buffer", "buffers"],
          type  => 'noun',
      });
  }
  
  1;
  # ABSTRACT: perl's type handler for type "buf"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::buf - perl's type handler for type "buf"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::buf (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(name|clause_.+|superclause_.+|before_.+|after_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_BUF

    $main::fatpacked{"Data/Sah/Compiler/human/TH/cistr.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_CISTR';
  package Data::Sah::Compiler::human::TH::cistr;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH::str';
  
  1;
  # ABSTRACT: perl's type handler for type "cistr"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::cistr - perl's type handler for type "cistr"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::cistr (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(name|clause_.+|superclause_.+|before_.+|after_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_CISTR

    $main::fatpacked{"Data/Sah/Compiler/human/TH/code.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_CODE';
  package Data::Sah::Compiler::human::TH::code;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH';
  with 'Data::Sah::Type::code';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      $c->add_ccl($cd, {
          fmt   => ["code", "codes"],
          type  => 'noun',
      });
  }
  
  1;
  # ABSTRACT: perl's type handler for type "code"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::code - perl's type handler for type "code"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::code (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_CODE

    $main::fatpacked{"Data/Sah/Compiler/human/TH/date.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_DATE';
  package Data::Sah::Compiler::human::TH::date;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH';
  with 'Data::Sah::Compiler::human::TH::Comparable';
  with 'Data::Sah::Compiler::human::TH::Sortable';
  with 'Data::Sah::Type::date';
  
  sub name { "date" }
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      $c->add_ccl($cd, {type=>'noun', fmt => ["date", "dates"]});
  }
  
  1;
  # ABSTRACT: human's type handler for type "date"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::date - human's type handler for type "date"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::date (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(name|clause_.+|superclause_.+|before_.+|after_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_DATE

    $main::fatpacked{"Data/Sah/Compiler/human/TH/duration.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_DURATION';
  package Data::Sah::Compiler::human::TH::duration;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH';
  with 'Data::Sah::Compiler::human::TH::Comparable';
  with 'Data::Sah::Compiler::human::TH::Sortable';
  with 'Data::Sah::Type::duration';
  
  sub name { "duration" }
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      $c->add_ccl($cd, {type=>'noun', fmt => ["duration", "durations"]});
  }
  
  1;
  # ABSTRACT: human's type handler for type "duration"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::duration - human's type handler for type "duration"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::duration (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(name|clause_.+|superclause_.+|before_.+|after_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_DURATION

    $main::fatpacked{"Data/Sah/Compiler/human/TH/float.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_FLOAT';
  package Data::Sah::Compiler::human::TH::float;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH';
  with 'Data::Sah::Compiler::human::TH::Comparable';
  with 'Data::Sah::Compiler::human::TH::Sortable';
  with 'Data::Sah::Type::float';
  
  sub name { "decimal number" }
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      $c->add_ccl($cd, {
          type=>'noun',
          fmt => ["decimal number", "decimal numbers"],
      });
  }
  
  sub clause_is_nan {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      my $cv = $cd->{cl_value};
      if ($cd->{cl_is_expr}) {
          $c->add_ccl($cd, {});
      } else {
          $c->add_ccl($cd, {
              fmt => $cv ?
                  q[%(modal_verb)s be a NaN] :
                      q[%(modal_verb_neg)s be a NaN],
          });
      }
  }
  
  sub clause_is_inf {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      my $cv = $cd->{cl_value};
      if ($cd->{cl_is_expr}) {
          $c->add_ccl($cd, {});
      } else {
          $c->add_ccl($cd, {
              fmt => $cv ?
                  q[%(modal_verb)s an infinity] :
                      q[%(modal_verb_neg)s an infinity],
          });
      }
  }
  
  sub clause_is_pos_inf {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      my $cv = $cd->{cl_value};
      if ($cd->{cl_is_expr}) {
          $c->add_ccl($cd, {});
      } else {
          $c->add_ccl($cd, {
              fmt => $cv ?
                  q[%(modal_verb)s a positive infinity] :
                      q[%(modal_verb_neg)s a positive infinity],
          });
      }
  }
  
  sub clause_is_neg_inf {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      my $cv = $cd->{cl_value};
      if ($cd->{cl_is_expr}) {
          $c->add_ccl($cd, {});
      } else {
          $c->add_ccl($cd, {
              fmt => $cv ?
                  q[%(modal_verb)s a negative infinity] :
                      q[%(modal_verb_neg)s a negative infinity],
          });
      }
  }
  
  1;
  # ABSTRACT: human's type handler for type "num"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::float - human's type handler for type "num"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::float (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(name|clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_FLOAT

    $main::fatpacked{"Data/Sah/Compiler/human/TH/hash.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_HASH';
  package Data::Sah::Compiler::human::TH::hash;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH';
  with 'Data::Sah::Compiler::human::TH::Comparable';
  with 'Data::Sah::Compiler::human::TH::HasElems';
  with 'Data::Sah::Type::hash';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      $c->add_ccl($cd, {
          fmt   => ["hash", "hashes"],
          type  => 'noun',
      });
  }
  
  sub clause_has {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
  
      $c->add_ccl($cd, {
          expr=>1, multi=>1,
          fmt => "%(modal_verb)s have %s in its %(field)s values"});
  }
  
  sub clause_each_index {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      my %iargs = %{$cd->{args}};
      $iargs{outer_cd}             = $cd;
      $iargs{schema}               = $cv;
      $iargs{schema_is_normalized} = 0;
      my $icd = $c->compile(%iargs);
  
      $c->add_ccl($cd, {
          type  => 'list',
          fmt   => '%(field)s name %(modal_verb)s be',
          items => [
              $icd->{ccls},
          ],
          vals  => [],
      });
  }
  
  sub clause_each_elem {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      my %iargs = %{$cd->{args}};
      $iargs{outer_cd}             = $cd;
      $iargs{schema}               = $cv;
      $iargs{schema_is_normalized} = 0;
      my $icd = $c->compile(%iargs);
  
      $c->add_ccl($cd, {
          type  => 'list',
          fmt   => 'each %(field)s %(modal_verb)s be',
          items => [
              $icd->{ccls},
          ],
          vals  => [],
      });
  }
  
  sub clause_keys {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      for my $k (sort keys %$cv) {
          local $cd->{spath} = [@{$cd->{spath}}, $k];
          my $v = $cv->{$k};
          my %iargs = %{$cd->{args}};
          $iargs{outer_cd}             = $cd;
          $iargs{schema}               = $v;
          $iargs{schema_is_normalized} = 0;
          my $icd = $c->compile(%iargs);
          $c->add_ccl($cd, {
              type  => 'list',
              fmt   => '%(field)s %s %(modal_verb)s be',
              vals  => [$k],
              items => [ $icd->{ccls} ],
          });
      }
  }
  
  sub clause_re_keys {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      for my $k (sort keys %$cv) {
          local $cd->{spath} = [@{$cd->{spath}}, $k];
          my $v = $cv->{$k};
          my %iargs = %{$cd->{args}};
          $iargs{outer_cd}             = $cd;
          $iargs{schema}               = $v;
          $iargs{schema_is_normalized} = 0;
          my $icd = $c->compile(%iargs);
          $c->add_ccl($cd, {
              type  => 'list',
              fmt   => '%(fields)s whose names match regex pattern %s %(modal_verb)s be',
              vals  => [$k],
              items => [ $icd->{ccls} ],
          });
      }
  }
  
  sub clause_req_keys {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
  
      $c->add_ccl($cd, {
          fmt   => q[%(modal_verb)s have required %(fields)s %s],
          expr  => 1,
      });
  }
  
  sub clause_allowed_keys {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
  
      $c->add_ccl($cd, {
          fmt   => q[%(modal_verb)s only have these allowed %(fields)s %s],
          expr  => 1,
      });
  }
  
  sub clause_allowed_keys_re {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
  
      $c->add_ccl($cd, {
          fmt   => q[%(modal_verb)s only have %(fields)s matching regex pattern %s],
          expr  => 1,
      });
  }
  
  sub clause_forbidden_keys {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
  
      $c->add_ccl($cd, {
          fmt   => q[%(modal_verb_neg)s have these forbidden %(fields)s %s],
          expr  => 1,
      });
  }
  
  sub clause_forbidden_keys_re {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
  
      $c->add_ccl($cd, {
          fmt   => q[%(modal_verb_neg)s have %(fields)s matching regex pattern %s],
          expr  => 1,
      });
  }
  
  sub clause_choose_one_key {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
  
      my $multi = $cd->{cl_is_multi};
      $cd->{cl_is_multi} = 0;
  
      my @ccls;
      for my $cv ($multi ? @{ $cd->{cl_value} } : ($cd->{cl_value})) {
          push @ccls, {
              fmt   => q[%(modal_verb)s contain at most one of these %(fields)s %s],
              vals  => [$cv],
          };
      }
      $c->add_ccl($cd, @ccls);
  }
  
  sub clause_choose_all_keys {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
  
      my $multi = $cd->{cl_is_multi};
      $cd->{cl_is_multi} = 0;
  
      my @ccls;
      for my $cv ($multi ? @{ $cd->{cl_value} } : ($cd->{cl_value})) {
          push @ccls, {
              fmt   => q[%(modal_verb)s contain either none or all of these %(fields)s %s],
              vals  => [$cv],
          };
      }
      $c->add_ccl($cd, @ccls);
  }
  
  sub clause_req_one_key {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
  
      my $multi = $cd->{cl_is_multi};
      $cd->{cl_is_multi} = 0;
  
      my @ccls;
      for my $cv ($multi ? @{ $cd->{cl_value} } : ($cd->{cl_value})) {
          push @ccls, {
              fmt   => q[%(modal_verb)s contain exactly one of these %(fields)s %s],
              vals  => [$cv],
          };
      }
      $c->add_ccl($cd, @ccls);
  }
  
  sub clause_req_some_keys {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
  
      my $multi = $cd->{cl_is_multi};
      $cd->{cl_is_multi} = 0;
  
      my @ccls;
      for my $cv ($multi ? @{ $cd->{cl_value} } : ($cd->{cl_value})) {
          push @ccls, {
              fmt   => q[%(modal_verb)s contain between %d and %d of these %(fields)s %s],
              vals  => [$cv->[0], $cv->[1], $cv->[2]],
          };
      }
      $c->add_ccl($cd, @ccls);
  }
  
  sub clause_dep_any {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
  
      my $multi = $cd->{cl_is_multi};
      $cd->{cl_is_multi} = 0;
  
      my @ccls;
      for my $cv ($multi ? @{ $cd->{cl_value} } : ($cd->{cl_value})) {
          if (@{ $cv->[1] } == 1) {
              push @ccls, {
                  fmt   => q[%(field)s %2$s %(modal_verb)s be present before %(field)s %1$s can be present],
                  vals  => [$cv->[0], $cv->[1][0]],
              };
          } else {
              push @ccls, {
                  fmt   => q[one of %(fields)s %2$s %(modal_verb)s be present before %(field)s %1$s can be present],
                  vals  => $cv,
                  multi => 0,
              };
          }
      }
      $c->add_ccl($cd, @ccls);
  }
  
  sub clause_dep_all {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
  
      my $multi = $cd->{cl_is_multi};
      $cd->{cl_is_multi} = 0;
  
      my @ccls;
      for my $cv ($multi ? @{ $cd->{cl_value} } : ($cd->{cl_value})) {
          if (@{ $cv->[1] } == 1) {
              push @ccls, {
                  fmt   => q[%(field)s %2$s %(modal_verb)s be present before %(field)s %1$s can be present],
                  vals  => [$cv->[0], $cv->[1][0]],
              };
          } else {
              push @ccls, {
                  fmt   => q[all of %(fields)s %2$s %(modal_verb)s be present before %(field)s %1$s can be present],
                  vals  => $cv,
              };
          }
      }
      $c->add_ccl($cd, @ccls);
  }
  
  sub clause_req_dep_any {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
  
      my $multi = $cd->{cl_is_multi};
      $cd->{cl_is_multi} = 0;
  
      my @ccls;
      for my $cv ($multi ? @{ $cd->{cl_value} } : ($cd->{cl_value})) {
          if (@{ $cv->[1] } == 1) {
              push @ccls, {
                  fmt   => q[%(field)s %1$s %(modal_verb)s be present when %(field)s %2$s is present],
                  vals  => [$cv->[0], $cv->[1][0]],
              };
          } else {
              push @ccls, {
                  fmt   => q[%(field)s %1$s %(modal_verb)s be present when one of %(fields)s %2$s is present],
                  vals  => $cv,
              };
          }
      }
      $c->add_ccl($cd, @ccls);
  }
  
  sub clause_req_dep_all {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
  
      my $multi = $cd->{cl_is_multi};
      $cd->{cl_is_multi} = 0;
  
      my @ccls;
      for my $cv ($multi ? @{ $cd->{cl_value} } : ($cd->{cl_value})) {
          if (@{ $cv->[1] } == 1) {
              push @ccls, {
                  fmt   => q[%(field)s %1$s %(modal_verb)s be present when %(field)s %2$s is present],
                  vals  => [$cv->[0], $cv->[1][0]],
              };
          } else {
              push @ccls, {
                  fmt   => q[%(field)s %1$s %(modal_verb)s be present when all of %(fields)s %2$s are present],
                  vals  => $cv,
              };
          }
      }
      $c->add_ccl($cd, @ccls);
  }
  
  1;
  # ABSTRACT: human's type handler for type "hash"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::hash - human's type handler for type "hash"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::hash (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_HASH

    $main::fatpacked{"Data/Sah/Compiler/human/TH/int.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_INT';
  package Data::Sah::Compiler::human::TH::int;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH::num';
  with 'Data::Sah::Type::int';
  
  sub name { "integer" }
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      $c->add_ccl($cd, {
          type  => 'noun',
          fmt   => ["integer", "integers"],
      });
  }
  
  sub clause_div_by {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      if (!$cd->{cl_is_multi} && !$cd->{cl_is_expr} &&
              $cv == 2) {
          $c->add_ccl($cd, {
              fmt   => q[%(modal_verb)s be even],
          });
          return;
      }
  
      $c->add_ccl($cd, {
          fmt   => q[%(modal_verb)s be divisible by %s],
          expr  => 1,
      });
  }
  
  sub clause_mod {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      if (!$cd->{cl_is_multi} && !$cd->{cl_is_expr}) {
          if ($cv->[0] == 2 && $cv->[1] == 0) {
              $c->add_ccl($cd, {
                  fmt   => q[%(modal_verb)s be even],
              });
              return;
          } elsif ($cv->[0] == 2 && $cv->[1] == 1) {
              $c->add_ccl($cd, {
                  fmt   => q[%(modal_verb)s be odd],
              });
              return;
          }
      }
  
      my @ccls;
      for my $cv ($cd->{cl_is_multi} ? @{ $cd->{cl_value} } : ($cd->{cl_value})) {
          push @ccls, {
              fmt  => q[%(modal_verb)s leave a remainder of %2$s when divided by %1$s],
              vals => $cv,
          };
      }
      $c->add_ccl($cd, @ccls);
  }
  
  1;
  # ABSTRACT: human's type handler for type "int"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::int - human's type handler for type "int"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::int (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(name|clause_.+|superclause_.+|before_.+|after_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_INT

    $main::fatpacked{"Data/Sah/Compiler/human/TH/num.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_NUM';
  package Data::Sah::Compiler::human::TH::num;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH';
  with 'Data::Sah::Compiler::human::TH::Comparable';
  with 'Data::Sah::Compiler::human::TH::Sortable';
  with 'Data::Sah::Type::num';
  
  sub name { "number" }
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      $c->add_ccl($cd, {type=>'noun', fmt => ["number", "numbers"]});
  }
  
  1;
  # ABSTRACT: human's type handler for type "num"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::num - human's type handler for type "num"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::num (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(name|clause_.+|superclause_.+|before_.+|after_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_NUM

    $main::fatpacked{"Data/Sah/Compiler/human/TH/obj.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_OBJ';
  package Data::Sah::Compiler::human::TH::obj;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH';
  with 'Data::Sah::Type::obj';
  
  sub name { "object" }
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      $c->add_ccl($cd, {
          fmt   => ["object", "objects"],
          type  => 'noun',
      });
  }
  
  sub clause_can {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      $c->add_ccl($cd, {
          fmt   => q[%(modal_verb)s have method(s) %s],
          #expr  => 1, # weird
      });
  }
  
  sub clause_isa {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      $c->add_ccl($cd, {
          fmt   => q[%(modal_verb)s be subclass of %s],
      });
  }
  
  1;
  # ABSTRACT: perl's type handler for type "obj"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::obj - perl's type handler for type "obj"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::obj (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(name|clause_.+|superclause_.+|before_.+|after_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_OBJ

    $main::fatpacked{"Data/Sah/Compiler/human/TH/re.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_RE';
  package Data::Sah::Compiler::human::TH::re;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH';
  with 'Data::Sah::Type::re';
  
  sub name { "regex pattern" }
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      $c->add_ccl($cd, {
          fmt   => ["regex pattern", "regex patterns"],
          type  => 'noun',
      });
  }
  
  1;
  # ABSTRACT: perl's type handler for type "re"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::re - perl's type handler for type "re"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::re (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(name|clause_.+|superclause_.+|before_.+|after_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_RE

    $main::fatpacked{"Data/Sah/Compiler/human/TH/str.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_STR';
  package Data::Sah::Compiler::human::TH::str;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH';
  with 'Data::Sah::Compiler::human::TH::Sortable';
  with 'Data::Sah::Compiler::human::TH::Comparable';
  with 'Data::Sah::Compiler::human::TH::HasElems';
  with 'Data::Sah::Type::str';
  
  sub name { "text" }
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      $c->add_ccl($cd, {
          fmt   => ["text", "texts"],
          type  => 'noun',
      });
  }
  
  sub clause_each_index {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      my %iargs = %{$cd->{args}};
      $iargs{outer_cd}             = $cd;
      $iargs{schema}               = $cv;
      $iargs{schema_is_normalized} = 0;
      my $icd = $c->compile(%iargs);
  
      $c->add_ccl($cd, {
          type  => 'list',
          fmt   => 'each subscript of text %(modal_verb)s be',
          items => [
              $icd->{ccls},
          ],
          vals  => [],
      });
  }
  
  sub clause_each_elem {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      my %iargs = %{$cd->{args}};
      $iargs{outer_cd}             = $cd;
      $iargs{schema}               = $cv;
      $iargs{schema_is_normalized} = 0;
      my $icd = $c->compile(%iargs);
  
      $c->add_ccl($cd, {
          type  => 'list',
          fmt   => 'each character of the text %(modal_verb)s be',
          items => [
              $icd->{ccls},
          ],
          vals  => [],
      });
  }
  
  sub clause_encoding {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      $c->_die($cd, "Only 'utf8' encoding is currently supported")
          unless $cv eq 'utf8';
      # currently does nothing
  }
  
  sub clause_match {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      $c->add_ccl($cd, {
          fmt   => q[%(modal_verb)s match regex pattern %s],
          #expr  => 1, # weird
      });
  }
  
  sub clause_is_re {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
  
      $c->add_ccl($cd, {
          fmt   => q[%(modal_verb)s be a regex pattern],
      });
  }
  
  1;
  # ABSTRACT: perl's type handler for type "str"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::str - perl's type handler for type "str"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::str (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(name|clause_.+|superclause_.+|before_.+|after_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_STR

    $main::fatpacked{"Data/Sah/Compiler/human/TH/undef.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_HUMAN_TH_UNDEF';
  package Data::Sah::Compiler::human::TH::undef;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::human::TH';
  with 'Data::Sah::Type::undef';
  
  sub name { "undefined value" }
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      $c->add_ccl($cd, {
          fmt   => ["undefined value", "undefined values"],
          type  => 'noun',
      });
  }
  
  1;
  # ABSTRACT: perl's type handler for type "undef"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::human::TH::undef - perl's type handler for type "undef"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::human::TH::undef (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(name|clause_.+|superclause_.+|before_.+|after_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_HUMAN_TH_UNDEF

    $main::fatpacked{"Data/Sah/Compiler/perl.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL';
  package Data::Sah::Compiler::perl;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any qw($log);
  
  use Data::Dmp qw(dmp);
  use Mo qw(build default);
  
  extends 'Data::Sah::Compiler::Prog';
  
  our $PP;
  our $CORE;
  our $CORE_OR_PP;
  our $NO_MODULES;
  
  # BEGIN COPIED FROM String::Indent
  sub __indent {
      my ($indent, $str, $opts) = @_;
      $opts //= {};
  
      my $ibl = $opts->{indent_blank_lines} // 1;
      my $fli = $opts->{first_line_indent} // $indent;
      my $sli = $opts->{subsequent_lines_indent} // $indent;
      #say "D:ibl=<$ibl>, fli=<$fli>, sli=<$sli>";
  
      my $i = 0;
      $str =~ s/^([^\r\n]?)/$i++; !$ibl && !$1 ? "$1" : $i==1 ? "$fli$1" : "$sli$1"/egm;
      $str;
  }
  # END COPIED FROM String::Indent
  
  sub BUILD {
      my ($self, $args) = @_;
  
      $self->comment_style('shell');
      $self->indent_character(" " x 4);
      $self->var_sigil('$');
      $self->concat_op(".");
  }
  
  sub name { "perl" }
  
  sub literal {
      dmp($_[1]);
  }
  
  sub expr {
      my ($self, $expr) = @_;
      $self->expr_compiler->perl($expr);
  }
  
  sub compile {
      my ($self, %args) = @_;
  
      #$self->expr_compiler->compiler->hook_var(
      #    sub {
      #        $_[0];
      #    }
      #);
  
      #$self->expr_compiler->compiler->hook_func(
      #    sub {
      #        my ($name, @args) = @_;
      #        die "Unknown function $name"
      #            unless $self->main->func_names->{$name};
      #        my $subname = "func_$name";
      #        $self->define_sub_start($subname);
      #        my $meth = "func_$name";
      #        $self->func_handlers->{$name}->$meth;
      #        $self->define_sub_end();
      #        $subname . "(" . join(", ", @args) . ")";
      #    }
      #);
  
      $args{pp} //= $PP // $ENV{DATA_SAH_PP} // 0;
      $args{core} //= $CORE // $ENV{DATA_SAH_CORE} // 0;
      $args{core_or_pp} //= $CORE_OR_PP // $ENV{DATA_SAH_CORE_OR_PP} // 0;
      $args{no_modules} //= $NO_MODULES // $ENV{DATA_SAH_NO_MODULES} // 0;
  
      $self->SUPER::compile(%args);
  }
  
  sub init_cd {
      my ($self, %args) = @_;
  
      my $cd = $self->SUPER::init_cd(%args);
  
      $self->add_runtime_no($cd, 'warnings', ["'void'"]) unless $cd->{args}{no_modules};
  
      $cd;
  }
  
  sub true { "1" }
  
  sub false { "''" }
  
  # quick lookup table, to avoid having to use Module::CoreList or Module::XSOrPP
  our %known_modules = (
      'DateTime::Duration'        => {pp=>1, core=>0},
      'DateTime'                  => {pp=>0, core=>0},
      'DateTime::Format::Alami'     => {pp=>1, core=>0},
      'DateTime::Format::Alami::EN' => {pp=>1, core=>0},
      'DateTime::Format::Alami::ID' => {pp=>1, core=>0},
      'DateTime::Format::Natural'   => {pp=>1, core=>0},
      'experimental'              => {pp=>1, core=>0}, # only core in 5.020+, so we note it as 0
      'List::Util'                => {pp=>0, core=>1},
      'Scalar::Util::Numeric'     => {pp=>0, core=>0},
      'Scalar::Util::Numeric::PP' => {pp=>1, core=>0},
      'Scalar::Util'              => {pp=>0, core=>1},
      'Storable'                  => {pp=>0, core=>1},
      'Time::Duration::Parse::AsHash' => {pp=>1, core=>0},
      'Time::Local'               => {pp=>1, core=>1},
      'Time::Moment'              => {pp=>0, core=>0},
      'Time::Piece'               => {pp=>0, core=>1},
      'warnings'                  => {pp=>1, core=>1},
  );
  
  sub add_module {
      my ($self, $cd, $name, $extra_keys, $allow_duplicate) = @_;
  
      if ($extra_keys->{phase} eq 'runtime') {
          if ($cd->{args}{no_modules}) {
              die "BUG: Use of module '$name' when compile option no_modules=1";
          }
  
          if ($cd->{args}{whitelist_modules} && grep { $_ eq $name } @{ $cd->{args}{whitelist_modules} }) {
              goto PASS;
          }
  
          if ($cd->{args}{pp}) {
              if (!$known_modules{$name}) {
                  die "BUG: Haven't noted about Perl module '$name' as being pp/xs";
              } elsif (!$known_modules{$name}{pp}) {
                  die "Use of XS module '$name' when compile option pp=1";
              }
          }
  
          if ($cd->{args}{core}) {
              if (!$known_modules{$name}) {
                  die "BUG: Haven't noted about Perl module '$name' as being core/non-core";
              } elsif (!$known_modules{$name}{core}) {
                  die "Use of non-core module '$name' when compile option core=1";
              }
          }
  
          if ($cd->{args}{core_or_pp}) {
              if (!$known_modules{$name}) {
                  die "BUG: Haven't noted about Perl module '$name' as being core/non-core or pp/xs";
              } elsif (!$known_modules{$name}{pp} && !$known_modules{$name}{core}) {
                  die "Use of non-core XS module '$name' when compile option core_or_pp=1";
              }
          }
      }
    PASS:
      $self->SUPER::add_module($cd, $name, $extra_keys, $allow_duplicate);
  }
  
  sub add_runtime_use {
      my ($self, $cd, $name, $import_terms) = @_;
      my $use_statement = "use $name".
          ($import_terms && @$import_terms ? " (".(join ",", @$import_terms).")" : "");
  
      # avoid duplicate use statement
      for my $mod (@{ $cd->{modules} }) {
          next unless $mod->{phase} eq 'runtime';
          return if $mod->{use_statement} &&
              $mod->{use_statement} eq $use_statement;
      }
  
      $self->add_runtime_module(
          $cd,
          $name,
          {
              use_statement => $use_statement,
          },
          1, # allow duplicate
      );
  }
  
  sub add_runtime_no {
      my ($self, $cd, $name, $import_terms) = @_;
  
      my $use_statement = "no $name".
          ($import_terms && @$import_terms ? " (".(join ",", @$import_terms).")" : "");
  
      # avoid duplicate use statement
      for my $mod (@{ $cd->{modules} }) {
          next unless $mod->{phase} eq 'runtime';
          return if $mod->{use_statement} &&
              $mod->{use_statement} eq $use_statement;
      }
  
      $self->add_runtime_module(
          $cd,
          $name,
          {
              use_statement => $use_statement,
          },
          1, # allow duplicate
      );
  }
  
  sub add_runtime_smartmatch_pragma {
      my ($self, $cd) = @_;
      $self->add_runtime_use($cd, 'experimental', ['"smartmatch"']);
  }
  
  # add Scalar::Util::Numeric module
  sub add_sun_module {
      my ($self, $cd) = @_;
      if ($cd->{args}{pp} || $cd->{args}{core_or_pp} ||
              !eval { require Scalar::Util::Numeric; 1 }) {
          $cd->{_sun_module} = 'Scalar::Util::Numeric::PP';
      } elsif ($cd->{args}{core}) {
          # just to make sure compilation will fail if we mistakenly use a sun
          # module
          $cd->{_sun_module} = 'Foo';
      } else {
          $cd->{_sun_module} = 'Scalar::Util::Numeric';
      }
      $self->add_runtime_module($cd, $cd->{_sun_module});
  }
  
  sub expr_defined {
      my ($self, $t) = @_;
      "defined($t)";
  }
  
  sub expr_array {
      my ($self, @t) = @_;
      "[".join(",", @t)."]";
  }
  
  sub expr_array_subscript {
      my ($self, $at, $idxt) = @_;
      "$at->\[$idxt]";
  }
  
  sub expr_last_elem {
      my ($self, $at, $idxt) = @_;
      "$at->\[-1]";
  }
  
  sub expr_push {
      my ($self, $at, $elt) = @_;
      "push(\@{$at}, $elt)";
  }
  
  sub expr_pop {
      my ($self, $at, $elt) = @_;
      "pop(\@{$at})";
  }
  
  sub expr_push_and_pop_dpath_between_expr {
      my ($self, $et) = @_;
      join(
          "",
          "[",
          $self->expr_push('$_sahv_dpath', $self->literal(undef)), ", ", # 0
          "~~", $self->enclose_paren($et), ", ", #1 (~~ to avoid list flattening)
          $self->expr_pop('$_sahv_dpath'), # 2
          "]->[1]",
      );
  }
  
  sub expr_prefix_dpath {
      my ($self, $t) = @_;
      '(@$_sahv_dpath ? \'@\'.join("",map {"[$_]"} @$_sahv_dpath).": " : "") . ' . $t;
  }
  
  # $l = $r
  sub expr_set {
      my ($self, $l, $r) = @_;
      "($l = $r)";
  }
  
  # $l //= $r
  sub expr_setif {
      my ($self, $l, $r) = @_;
      "($l //= $r)";
  }
  
  sub expr_set_err_str {
      my ($self, $et, $err_expr) = @_;
      "($et //= $err_expr)";
  }
  
  sub expr_set_err_full {
      my ($self, $et, $k, $err_expr) = @_;
      "($et\->{$k}{join('/',\@\$_sahv_dpath)} //= $err_expr)";
  }
  
  sub expr_reset_err_str {
      my ($self, $et, $err_expr) = @_;
      "($et = undef, 1)";
  }
  
  sub expr_reset_err_full {
      my ($self, $et) = @_;
      "(delete($et\->{errors}{join('/',\@\$_sahv_dpath)}), 1)";
  }
  
  # $cond_term ? $true_term : $false_term
  sub expr_ternary {
      my ($self, $cond_term, $true_term, $false_term) = @_;
      "$cond_term ? $true_term : $false_term";
  }
  
  sub expr_log {
      my ($self, $cd, @expr) = @_;
  
      "\$log->tracef('[sah validator](spath=%s) %s', " .
          $self->literal($cd->{spath}).", " . join(", ", @expr) . ")";
  }
  
  # wrap statements into an expression
  sub expr_block {
      my ($self, $code) = @_;
      join(
          "",
          "do {\n",
          __indent(
              $self->indent_character,
              $code,
          ),
          "}",
      );
  }
  
  # whether block is implemented using function
  sub block_uses_sub { 0 }
  
  sub stmt_declare_local_var {
      my ($self, $v, $vt) = @_;
      if ($vt eq 'undef') {
          "my \$$v;";
      } else {
          "my \$$v = $vt;";
      }
  }
  
  sub expr_anon_sub {
      my ($self, $args, $code) = @_;
      join(
          "",
          "sub {\n",
          __indent(
              $self->indent_character,
              join(
                  "",
                  ("my (".join(", ", @$args).") = \@_;\n") x !!@$args,
                  $code,
              ),
          ),
          "}"
      );
  }
  
  # enclose $stmt in an eval/try block, return true if succeeds, false if error
  # was thrown. XXX error message was not recorded yet.
  sub expr_eval {
      my ($self, $stmt) = @_;
      "(eval { $stmt }, !\$@)";
  }
  
  sub stmt_require_module {
      my ($self, $mod_record) = @_;
  
      if ($mod_record->{use_statement}) {
          return "$mod_record->{use_statement};";
      } else {
          "require $mod_record->{name};";
      }
  }
  
  sub stmt_require_log_module {
      my ($self) = @_;
      'use Log::Any qw($log);';
  }
  
  sub stmt_assign_hash_value {
      my ($self, $ht, $kt, $vt) = @_;
      "$ht\->{$kt} = $vt;";
  }
  
  sub stmt_return {
      my $self = shift;
      if (@_) {
          "return($_[0]);";
      } else {
          'return;';
      }
  }
  
  sub expr_validator_sub {
      my ($self, %args) = @_;
  
      $self->check_compile_args(\%args);
  
      my $aref = delete $args{accept_ref};
      if ($aref) {
          $args{var_term}  = '$ref_'.$args{data_name};
          $args{data_term} = '$$ref_'.$args{data_name};
      } else {
          $args{var_term}  = '$'.$args{data_name};
          $args{data_term} = '$'.$args{data_name};
      }
  
      $self->SUPER::expr_validator_sub(%args);
  }
  
  sub _str2reliteral {
      require Regexp::Stringify;
  
      my ($self, $cd, $str) = @_;
  
      my $re;
      if (ref($str) eq 'Regexp') {
          $re = $str;
      } else {
          eval { $re = qr/$str/ };
          $self->_die($cd, "Invalid regex $str: $@") if $@;
      }
  
      Regexp::Stringify::stringify_regexp(regexp=>$re, plver=>5.010);
  }
  
  1;
  # ABSTRACT: Compile Sah schema to Perl code
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl - Compile Sah schema to Perl code
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 SYNOPSIS
  
   # see Data::Sah
  
  =head1 DESCRIPTION
  
  Derived from L<Data::Sah::Compiler::Prog>.
  
  =for Pod::Coverage BUILD ^(after_.+|before_.+|name|expr|true|false|literal|expr_.+|stmt_.+|block_uses_sub)$
  
  =head1 VARIABLES
  
  =head2 $PP => bool
  
  Set default for C<pp> compile argument. Takes precedence over environment
  C<DATA_SAH_PP>.
  
  =head2 $CORE => bool
  
  Set default for C<core> compile argument. Takes precedence over environment
  C<DATA_SAH_CORE>.
  
  =head2 $CORE_OR_PP => bool
  
  Set default for C<core_or_pp> compile argument. Takes precedence over
  environment C<DATA_SAH_CORE_OR_PP>.
  
  =head2 $NO_MODULES => bool
  
  Set default for C<no_modules> compile argument. Takes precedence over
  environment C<DATA_SAH_NO_MODULES>.
  
  =head1 DEVELOPER NOTES
  
  To generate expression code that says "all subexpression must be true", you can
  do:
  
   !defined(List::Util::first(sub { blah($_) }, "value", ...))
  
  This is a bit harder to read than:
  
   !grep { !blah($_) } "value", ...
  
  but has the advantage of the ability to shortcut on the first item that fails.
  
  Similarly, to say "at least one subexpression must be true":
  
   defined(List::Util::first(sub { blah($_) }, "value", ...))
  
  which can shortcut in contrast to:
  
   grep { blah($_) } "value", ...
  
  =head1 METHODS
  
  =head2 new() => OBJ
  
  =head3 Compilation data
  
  This subclass adds the following compilation data (C<$cd>).
  
  Keys which contain compilation result:
  
  =over
  
  =back
  
  =head2 $c->comment($cd, @args) => STR
  
  Generate a comment. For example, in perl compiler:
  
   $c->comment($cd, "123"); # -> "# 123\n"
  
  Will return an empty string if compile argument C<comment> is set to false.
  
  =head2 $c->compile(%args) => RESULT
  
  Aside from Prog's arguments, this class supports these arguments:
  
  =over
  
  =item * pp => bool (default: 0)
  
  If set to true, will avoid the use of XS modules in the generated code and will
  opt instead to use pure-perl modules.
  
  =item * core => bool (default: 0)
  
  If set to true, will avoid the use of non-core modules in the generated code and
  will opt instead to use core modules.
  
  =item * core_or_pp => bool (default: 0)
  
  If set to true, will stick to using only core or PP modules in the generated
  code.
  
  =item * whitelist_modules => array {of=>'str'}
  
  When C<pp>/C<core>/C<core_or_pp> option is set to true, the use of
  non-appropriate modules will cause failure. However, you can pass a list of
  modules that are allowed nevertheless.
  
  =back
  
  =head2 $c->add_runtime_use($cd, $module [, \@import_terms ])
  
  This is like C<add_runtime_module()>, but indicate that C<$module> needs to be
  C<use>-d in the generated code (for example, Perl pragmas). Normally if
  C<add_runtime_module()> is used, the generated code will use C<require>.
  
  If you use C<< $c->add_runtime_use($cd, 'foo') >>, this code will be generated:
  
   use foo;
  
  If you use C<< $c->add_runtime_use($cd, 'foo', ["'a'", "'b'", "123"]) >>, this code will
  be generated:
  
   use foo ('a', 'b', 123);
  
  If you use C<< $c->add_runtime_use($cd, 'foo', []) >>, this code will be generated:
  
   use foo ();
  
  The generated statement will be added at the top (top-level lexical scope) and
  duplicates are ignored. To generate multiple and lexically-scoped C<use> and
  C<no> statements, e.g. like below, currently you can generate them manually:
  
   if (blah) {
       no warnings;
       ...
   }
  
  =head2 $c->add_runtime_no($cd, $module [, \@import_terms ])
  
  This is the counterpart of C<add_runtime_use()>, to generate C<no foo> statement.
  
  See also: C<add_runtime_use()>.
  
  =head2 $c->add_runtime_smartmatch_pragma($cd)
  
  Equivalent to:
  
   $c->add_runtime_use($cd, 'experimental', ["'smartmatch'"]);
  
  =head2 $c->add_sun_module($cd)
  
  Add L<Scalar::Util::Numeric> module, or L<Scalar::Util::Numeric::PP> when C<pp>
  compile argument is true.
  
  =head1 ENVIRONMENT
  
  =head2 DATA_SAH_PP => bool
  
  Set default for C<pp> compile argument.
  
  =head2 DATA_SAH_CORE => bool
  
  Set default for C<core> compile argument.
  
  =head2 DATA_SAH_CORE_OR_PP => bool
  
  Set default for C<core_or_pp> compile argument.
  
  =head2 DATA_SAH_NO_MODULES => bool
  
  Set default for C<no_modules> compile argument.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL

    $main::fatpacked{"Data/Sah/Compiler/perl/TH.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH';
  package Data::Sah::Compiler::perl::TH;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::Prog::TH';
  
  sub gen_each {
      my ($self, $cd, $indices_expr, $data_name, $data_term, $code_at_sub_begin) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
      my $dt = $cd->{data_term};
  
      local $cd->{_subdata_level} = $cd->{_subdata_level} + 1;
  
      $c->add_runtime_module($cd, 'List::Util');
      my %iargs = %{$cd->{args}};
      $iargs{outer_cd}             = $cd;
      $iargs{data_name}            = $data_name;
      $iargs{data_term}            = $data_term;
      $iargs{schema}               = $cv;
      $iargs{schema_is_normalized} = 0;
      $iargs{indent_level}++;
      $iargs{data_term_includes_topic_var} = 1;
      my $icd = $c->compile(%iargs);
      my @code = (
          "!defined(List::Util::first(sub {", ($code_at_sub_begin // ''), "!(\n",
          ($c->indent_str($cd),
           "(\$_sahv_dpath->[-1] = \$_),\n") x !!$cd->{use_dpath},
           $icd->{result}, "\n",
           $c->indent_str($icd), ")}, ",
           $indices_expr,
           "))",
      );
      $c->add_ccl($cd, join("", @code), {subdata=>1});
  }
  
  1;
  # ABSTRACT: Base class for perl type handlers
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH - Base class for perl type handlers
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(compiler|clause_.+|gen_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/all.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_ALL';
  package Data::Sah::Compiler::perl::TH::all;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  # Mo currently doesn't support multiple classes in 'extends'
  #extends
  #    'Data::Sah::Compiler::perl::TH',
  #    'Data::Sah::Compiler::Prog::TH::all';
  
  use parent (
      'Data::Sah::Compiler::perl::TH',
      'Data::Sah::Compiler::Prog::TH::all',
  );
  
  1;
  # ABSTRACT: perl's type handler for type "all"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::all - perl's type handler for type "all"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::all (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_ALL

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/any.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_ANY';
  package Data::Sah::Compiler::perl::TH::any;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  # Mo currently doesn't support multiple classes in 'extends'
  #extends
  #    'Data::Sah::Compiler::perl::TH',
  #    'Data::Sah::Compiler::Prog::TH::any';
  
  use parent (
      'Data::Sah::Compiler::perl::TH',
      'Data::Sah::Compiler::Prog::TH::any',
  );
  
  1;
  # ABSTRACT: perl's type handler for type "any"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::any - perl's type handler for type "any"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::any (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_ANY

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/array.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_ARRAY';
  package Data::Sah::Compiler::perl::TH::array;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::perl::TH';
  with 'Data::Sah::Type::array';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      my $dt = $cd->{data_term};
      $cd->{_ccl_check_type} = "ref($dt) eq 'ARRAY'";
  }
  
  my $FRZ = "Storable::freeze";
  
  sub superclause_comparable {
      my ($self, $which, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      # Storable is chosen because it's core and fast. ~~ is not very
      # specific.
      $c->add_runtime_module($cd, 'Storable');
  
      if ($which eq 'is') {
          $c->add_ccl($cd, "$FRZ($dt) eq $FRZ($ct)");
      } elsif ($which eq 'in') {
          $c->add_runtime_smartmatch_pragma($cd);
          $c->add_ccl($cd, "$FRZ($dt) ~~ [map {$FRZ(\$_)} \@{ $ct }]");
      }
  }
  
  sub superclause_has_elems {
      my ($self_th, $which, $cd) = @_;
      my $c  = $self_th->compiler;
      my $cv = $cd->{cl_value};
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($which eq 'len') {
          $c->add_ccl($cd, "\@{$dt} == $ct");
      } elsif ($which eq 'min_len') {
          $c->add_ccl($cd, "\@{$dt} >= $ct");
      } elsif ($which eq 'max_len') {
          $c->add_ccl($cd, "\@{$dt} <= $ct");
      } elsif ($which eq 'len_between') {
          if ($cd->{cl_is_expr}) {
              $c->add_ccl(
                  $cd, "\@{$dt} >= $ct\->[0] && \@{$dt} >= $ct\->[1]");
          } else {
              # simplify code
              $c->add_ccl(
                  $cd, "\@{$dt} >= $cv->[0] && \@{$dt} <= $cv->[1]");
          }
      } elsif ($which eq 'has') {
          $c->add_runtime_smartmatch_pragma($cd);
          #$c->add_ccl($cd, "$FRZ($ct) ~~ [map {$FRZ(\$_)} \@{ $dt }]");
  
          # XXX currently we choose below for speed, but only works for array of
          # scalars
          $c->add_ccl($cd, "$ct ~~ $dt");
      } elsif ($which eq 'each_index') {
          $self_th->set_tmp_data_term($cd) if $cd->{args}{data_term_includes_topic_var};
          $self_th->gen_each($cd, "0..\@{$cd->{data_term}}-1", '_', '$_');
          $self_th->restore_data_term($cd) if $cd->{args}{data_term_includes_topic_var};
      } elsif ($which eq 'each_elem') {
          $self_th->set_tmp_data_term($cd) if $cd->{args}{data_term_includes_topic_var};
          $self_th->gen_each($cd, "0..\@{$cd->{data_term}}-1", '_', "$cd->{data_term}\->[\$_]");
          $self_th->restore_data_term($cd) if $cd->{args}{data_term_includes_topic_var};
      } elsif ($which eq 'check_each_index') {
          $self_th->compiler->_die_unimplemented_clause($cd);
      } elsif ($which eq 'check_each_elem') {
          $self_th->compiler->_die_unimplemented_clause($cd);
      } elsif ($which eq 'uniq') {
          $self_th->compiler->_die_unimplemented_clause($cd);
      } elsif ($which eq 'exists') {
          $self_th->compiler->_die_unimplemented_clause($cd);
      }
  }
  
  sub clause_elems {
      my ($self_th, $cd) = @_;
      my $c  = $self_th->compiler;
      my $cv = $cd->{cl_value};
      my $dt = $cd->{data_term};
  
      local $cd->{_subdata_level} = $cd->{_subdata_level} + 1;
  
      my $jccl;
      {
          local $cd->{ccls} = [];
  
          my $cdef = $cd->{clset}{"elems.create_default"} // 1;
          delete $cd->{uclset}{"elems.create_default"};
  
          for my $i (0..@$cv-1) {
              local $cd->{spath} = [@{$cd->{spath}}, $i];
              my $sch = $c->main->normalize_schema($cv->[$i]);
              my $edt = "$dt\->[$i]";
              my %iargs = %{$cd->{args}};
              $iargs{outer_cd}             = $cd;
              $iargs{data_name}            = "$cd->{args}{data_name}_$i";
              $iargs{data_term}            = $edt;
              $iargs{schema}               = $sch;
              $iargs{schema_is_normalized} = 1;
              $iargs{indent_level}++;
              my $icd = $c->compile(%iargs);
              my @code = (
                  ($c->indent_str($cd), "(\$_sahv_dpath->[-1] = $i),\n") x !!$cd->{use_dpath},
                  $icd->{result}, "\n",
              );
              my $ires = join("", @code);
              local $cd->{_debug_ccl_note} = "elem: $i";
              if ($cdef && defined($sch->[1]{default})) {
                  $c->add_ccl($cd, $ires);
              } else {
                  $c->add_ccl($cd, "\@{$dt} < ".($i+1)." || ($ires)");
              }
          }
          $jccl = $c->join_ccls(
              $cd, $cd->{ccls}, {err_msg => ''});
      }
      $c->add_ccl($cd, $jccl, {subdata=>1});
  }
  
  1;
  # ABSTRACT: perl's type handler for type "array"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::array - perl's type handler for type "array"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::array (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_ARRAY

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/bool.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_BOOL';
  package Data::Sah::Compiler::perl::TH::bool;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::perl::TH';
  with 'Data::Sah::Type::bool';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      my $dt = $cd->{data_term};
      $cd->{_ccl_check_type} = "!ref($dt)";
  }
  
  sub superclause_comparable {
      my ($self, $which, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($which eq 'is') {
          $c->add_ccl($cd, "($dt ? 1:0) == ($ct ? 1:0)");
      } elsif ($which eq 'in') {
          $c->add_runtime_smartmatch_pragma($cd);
          $c->add_ccl($cd, "($dt ? 1:0) ~~ [map {\$_?1:0} \@{$ct}]");
      }
  }
  
  sub superclause_sortable {
      my ($self, $which, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($which eq 'min') {
          $c->add_ccl($cd, "($dt ? 1:0) >= ($ct ? 1:0)");
      } elsif ($which eq 'xmin') {
          $c->add_ccl($cd, "($dt ? 1:0) > ($ct ? 1:0)");
      } elsif ($which eq 'max') {
          $c->add_ccl($cd, "($dt ? 1:0) <= ($ct ? 1:0)");
      } elsif ($which eq 'xmax') {
          $c->add_ccl($cd, "($dt ? 1:0) < ($ct ? 1:0)");
      } elsif ($which eq 'between') {
          if ($cd->{cl_is_expr}) {
              $c->add_ccl($cd, "($dt ? 1:0) >= ($ct\->[0] ? 1:0) && ".
                              "($dt ? 1:0) <= ($ct\->[1] ? 1:0)");
          } else {
              # simplify code
              $c->add_ccl($cd, "($dt ? 1:0) >= ($cv->[0] ? 1:0) && ".
                              "($dt ? 1:0) <= ($cv->[1] ? 1:0)");
          }
      } elsif ($which eq 'xbetween') {
          if ($cd->{cl_is_expr}) {
              $c->add_ccl($cd, "($dt ? 1:0) > ($ct\->[0] ? 1:0) && ".
                              "($dt ? 1:0) < ($ct\->[1] ? 1:0)");
          } else {
              # simplify code
              $c->add_ccl($cd, "($dt ? 1:0) > ($cv->[0] ? 1:0) && ".
                              "($dt ? 1:0) < ($cv->[1] ? 1:0)");
          }
      }
  }
  
  sub clause_is_true {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      $c->add_ccl($cd, "($ct) ? $dt : !defined($ct) ? 1 : !$dt");
  }
  
  1;
  # ABSTRACT: perl's type handler for type "bool"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::bool - perl's type handler for type "bool"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::bool (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_BOOL

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/buf.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_BUF';
  package Data::Sah::Compiler::perl::TH::buf;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::perl::TH::str';
  with 'Data::Sah::Type::buf';
  
  1;
  # ABSTRACT: perl's type handler for type "buf"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::buf - perl's type handler for type "buf"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::buf (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_BUF

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/cistr.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_CISTR';
  package Data::Sah::Compiler::perl::TH::cistr;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::perl::TH::str';
  with 'Data::Sah::Type::cistr';
  
  sub before_all_clauses {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
      my $dt = $cd->{data_term};
  
      # XXX only do this when there are clauses
  
      # convert to lowercase so we don't lc() the data repeatedly
      $self->set_tmp_data_term($cd, "lc($dt)");
  }
  
  sub after_all_clauses {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
      my $dt = $cd->{data_term};
  
      $self->restore_data_term($cd);
  }
  
  sub superclause_comparable {
      my ($self, $which, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($which eq 'is') {
          $c->add_ccl($cd, "$dt eq lc($ct)");
      } elsif ($which eq 'in') {
          $c->add_runtime_smartmatch_pragma($cd);
          $c->add_ccl($cd, "$dt ~~ [map {lc} \@{ $ct }]");
      }
  }
  
  sub superclause_sortable {
      my ($self, $which, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($which eq 'min') {
          $c->add_ccl($cd, "$dt ge lc($ct)");
      } elsif ($which eq 'xmin') {
          $c->add_ccl($cd, "$dt gt lc($ct)");
      } elsif ($which eq 'max') {
          $c->add_ccl($cd, "$dt le lc($ct)");
      } elsif ($which eq 'xmax') {
          $c->add_ccl($cd, "$dt lt lc($ct)");
      } elsif ($which eq 'between') {
          if ($cd->{cl_is_expr}) {
              $c->add_ccl($cd, "$dt ge lc($ct\->[0]) && ".
                              "$dt le lc($ct\->[1])");
          } else {
              # simplify code
              $c->add_ccl($cd, "$dt ge ".$c->literal(lc $cv->[0]).
                              " && $dt le ".$c->literal(lc $cv->[1]));
          }
      } elsif ($which eq 'xbetween') {
          if ($cd->{cl_is_expr}) {
              $c->add_ccl($cd, "$dt gt lc($ct\->[0]) && ".
                              "$dt lt lc($ct\->[1])");
          } else {
              # simplify code
              $c->add_ccl($cd, "$dt gt ".$c->literal(lc $cv->[0]).
                              " && $dt lt ".$c->literal(lc $cv->[1]));
          }
      }
  }
  
  sub superclause_has_elems {
      my ($self_th, $which, $cd) = @_;
      my $c  = $self_th->compiler;
      my $cv = $cd->{cl_value};
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($which eq 'has') {
          $c->add_ccl($cd, "index($dt, lc($ct)) > -1");
      } else {
          $self_th->SUPER::superclause_has_elems($which, $cd);
      }
  }
  
  # turn "(?-xism:blah)" to "(?i-xsm:blah)"
  sub __change_re_str_switch {
      my $re = shift;
  
      if ($^V ge v5.14.0) {
          state $sub = sub { my $s = shift; $s =~ /i/ ? $s : "i$s" };
          $re =~ s/\A\(\?\^(\w*):/"(?".$sub->($1).":"/e;
      } else {
          state $subl = sub { my $s = shift; $s =~ /i/ ? $s : "i$s" };
          state $subr = sub { my $s = shift; $s =~ s/i//; $s };
          $re =~ s/\A\(\?(\w*)-(\w*):/"(?".$subl->($1)."-".$subr->($2).":"/e;
      }
      return $re;
  }
  
  sub clause_match {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($cd->{cl_is_expr}) {
          $c->add_ccl($cd, join(
              "",
              "ref($ct) eq 'Regexp' ? $dt =~ qr/$ct/i : ",
              "do { my \$re = $ct; eval { \$re = /\$re/i; 1 } && ",
              "$dt =~ \$re }",
          ));
      } else {
          # simplify code and we can check regex at compile time
          my $re = $c->_str2reliteral($cd, $cv);
          $re = __change_re_str_switch($re);
          $c->add_ccl($cd, "$dt =~ /$re/i");
      }
  }
  
  1;
  # ABSTRACT: perl's type handler for type "cistr"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::cistr - perl's type handler for type "cistr"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::cistr (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+|handle_.+|before_.+|after_.+)$
  
  =head1 NOTES
  
  Should probably be reimplemented using special Perl string type, or special Perl
  operators, instead of simulated using C<lc()> on a per-clause basis. The
  implementation as it is now is not "contagious", e.g. C<< [cistr =>
  check_each_elem => '$_ eq "A"'] >> should be true even if data is C<"Aaa">,
  since one would expect C<< $_ eq "A" >> is also done case-insensitively, but it
  is currently internally implemented by converting data to lowercase and
  splitting per character to become C<< ["a", "a", "a"] >>.
  
  Or, avoid C<cistr> altogether and use C<prefilters> to convert to
  lowercase/uppercase first before processing.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_CISTR

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/code.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_CODE';
  package Data::Sah::Compiler::perl::TH::code;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::perl::TH';
  with 'Data::Sah::Type::code';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      my $dt = $cd->{data_term};
      $cd->{_ccl_check_type} = "ref($dt) eq 'CODE'";
  }
  
  1;
  # ABSTRACT: perl's type handler for type "code"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::code - perl's type handler for type "code"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::code (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_CODE

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/date.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_DATE';
  package Data::Sah::Compiler::perl::TH::date;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  use Scalar::Util qw(blessed looks_like_number);
  
  extends 'Data::Sah::Compiler::perl::TH';
  with 'Data::Sah::Type::date';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $dt = $cd->{data_term};
  
      $cd->{coerce_to} = $cd->{nschema}[1]{"x.perl.coerce_to"} // 'float(epoch)';
  
      my $coerce_to = $cd->{coerce_to};
  
      if ($coerce_to eq 'float(epoch)') {
          $cd->{_ccl_check_type} = "!ref($dt) && $dt =~ /\\A[0-9]+\\z/";
      } elsif ($coerce_to eq 'DateTime') {
          $c->add_runtime_module($cd, 'Scalar::Util');
          $cd->{_ccl_check_type} = "Scalar::Util::blessed($dt) && $dt\->isa('DateTime')";
      } elsif ($coerce_to eq 'Time::Moment') {
          $c->add_runtime_module($cd, 'Scalar::Util');
          $cd->{_ccl_check_type} = "Scalar::Util::blessed($dt) && $dt\->isa('Time::Moment')";
      } else {
          die "BUG: Unknown coerce_to value '$coerce_to', use either ".
              "float(epoch), DateTime, or Time::Moment";
      }
  }
  
  sub superclause_comparable {
      my ($self, $which, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($cd->{cl_is_expr}) {
          # i'm lazy, technical debt
          $c->_die($cd, "date's comparison with expression not yet supported");
      }
  
      my $coerce_to = $cd->{coerce_to};
      if ($coerce_to eq 'float(epoch)') {
          if ($which eq 'is') {
              $c->add_ccl($cd, "$dt == $ct");
          } elsif ($which eq 'in') {
              $c->add_runtime_module($cd, 'List::Util');
              $c->add_ccl($cd, "List::Util::first(sub{$dt == \$_}, $ct)");
          }
      } elsif ($coerce_to eq 'DateTime') {
          # we need to encode this because otherwise just dumping DateTime object
          # $cv will be unwieldy
          my $ect = "DateTime->from_epoch(epoch=>".$cv->epoch.")";
  
          if ($which eq 'is') {
              $c->add_ccl($cd, "DateTime->compare($dt, $ect)==0");
          } elsif ($which eq 'in') {
              $c->add_runtime_module($cd, 'List::Util');
              $c->add_ccl($cd, "List::Util::first(sub{DateTime->compare($dt, \$_)==0}, $ect)");
          }
      } elsif ($coerce_to eq 'Time::Moment') {
          # we need to encode this because otherwise just dumping DateTime object
          # $cv will be unwieldy
          my $ect = "Time::Moment->from_epoch(".$cv->epoch.")";
  
          if ($which eq 'is') {
              $c->add_ccl($cd, "$dt\->compare($ect)==0");
          } elsif ($which eq 'in') {
              $c->add_runtime_module($cd, 'List::Util');
              $c->add_ccl($cd, "List::Util::first(sub{$dt\->compare(\$_)==0}, $ect)");
          }
      }
  }
  
  sub superclause_sortable {
      my ($self, $which, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($cd->{cl_is_expr}) {
          # i'm lazy, technical debt
          $c->_die($cd, "date's comparison with expression not yet supported");
      }
  
      my $coerce_to = $cd->{coerce_to};
      if ($coerce_to eq 'float(epoch)') {
          if ($which eq 'min') {
              $c->add_ccl($cd, "$dt >= $cv");
          } elsif ($which eq 'xmin') {
              $c->add_ccl($cd, "$dt > $cv");
          } elsif ($which eq 'max') {
              $c->add_ccl($cd, "$dt <= $cv");
          } elsif ($which eq 'xmax') {
              $c->add_ccl($cd, "$dt < $cv");
          } elsif ($which eq 'between') {
              $c->add_ccl($cd, "$dt >= $cv->[0] && $dt <= $cv->[1]");
          } elsif ($which eq 'xbetween') {
              $c->add_ccl($cd, "$dt >  $cv->[0] && $dt <  $cv->[1]");
          }
      } elsif ($coerce_to eq 'DateTime') {
          # we need to encode this because otherwise just dumping DateTime object
          # $cv will be unwieldy
          my ($ect, $ect0, $ect1);
          if (ref($cv) eq 'ARRAY') {
              $ect0 = "DateTime->from_epoch(epoch=>".$cv->[0]->epoch.")";
              $ect1 = "DateTime->from_epoch(epoch=>".$cv->[1]->epoch.")";
          } else {
              $ect = "DateTime->from_epoch(epoch=>".$cv->epoch.")";
          }
  
          if ($which eq 'min') {
              $c->add_ccl($cd, "DateTime->compare($dt, $ect) >= 0");
          } elsif ($which eq 'xmin') {
              $c->add_ccl($cd, "DateTime->compare($dt, $ect) > 0");
          } elsif ($which eq 'max') {
              $c->add_ccl($cd, "DateTime->compare($dt, $ect) <= 0");
          } elsif ($which eq 'xmax') {
              $c->add_ccl($cd, "DateTime->compare($dt, $ect) < 0");
          } elsif ($which eq 'between') {
              $c->add_ccl($cd, "DateTime->compare($dt, $ect0) >= 0 && DateTime->compare($dt, $ect1) <= 0");
          } elsif ($which eq 'xbetween') {
              $c->add_ccl($cd, "DateTime->compare($dt, $ect0) >  0 && DateTime->compare($dt, $ect1) <  0");
          }
      } elsif ($coerce_to eq 'Time::Moment') {
          # we need to encode this because otherwise just dumping DateTime object
          # $cv will be unwieldy
          my ($ect, $ect0, $ect1);
          if (ref($cv) eq 'ARRAY') {
              $ect0 = "Time::Moment->from_epoch(".$cv->[0]->epoch.")";
              $ect1 = "Time::Moment->from_epoch(".$cv->[1]->epoch.")";
          } else {
              $ect = "Time::Moment->from_epoch(".$cv->epoch.")";
          }
  
          if ($which eq 'min') {
              $c->add_ccl($cd, "$dt\->compare($ect) >= 0");
          } elsif ($which eq 'xmin') {
              $c->add_ccl($cd, "$dt\->compare($ect) > 0");
          } elsif ($which eq 'max') {
              $c->add_ccl($cd, "$dt\->compare($ect) <= 0");
          } elsif ($which eq 'xmax') {
              $c->add_ccl($cd, "$dt\->compare($ect) < 0");
          } elsif ($which eq 'between') {
              $c->add_ccl($cd, "$dt\->compare($ect0) >= 0 && $dt\->compare($ect1) <= 0");
          } elsif ($which eq 'xbetween') {
              $c->add_ccl($cd, "$dt\->compare($ect0) >  0 && $dt\->compare($ect1) <  0");
          }
      }
  }
  
  1;
  # ABSTRACT: perl's type handler for type "date"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::date - perl's type handler for type "date"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::date (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 DESCRIPTION
  
  The C<date> type can be represented using one of three choices: int (epoch),
  L<DateTime> object, or L<Time::Moment> object. This choice can be specified in
  the schema using clause attribute C<x.perl.coerce_to>, e.g.:
  
   ["date", "x.perl.coerce_to"=>"float(epoch)"]
   ["date", "x.perl.coerce_to"=>"DateTime"]
   ["date", "x.perl.coerce_to"=>"Time::Moment"]
  
  =for Pod::Coverage ^(clause_.+|superclause_.+|handle_.+|before_.+|after_.+)$
  
  =head1 COMPILATION DATA KEYS
  
  =over
  
  =item * B<coerce_to> => str
  
  By default will be set to C<float(epoch)>. Other valid values include:
  C<DateTime>, C<Time::Moment>.
  
  =back
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_DATE

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/duration.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_DURATION';
  package Data::Sah::Compiler::perl::TH::duration;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  use Scalar::Util qw(blessed looks_like_number);
  
  extends 'Data::Sah::Compiler::perl::TH';
  with 'Data::Sah::Type::duration';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $dt = $cd->{data_term};
  
      $cd->{coerce_to} = $cd->{nschema}[1]{"x.perl.coerce_to"} // 'float(secs)';
  
      my $coerce_to = $cd->{coerce_to};
  
      if ($coerce_to eq 'float(secs)') {
          $cd->{_ccl_check_type} = "!ref($dt) && $dt =~ /\\A[0-9]+(?:\.[0-9]+)?\\z/"; # XXX no support exp notation for yet?
      } elsif ($coerce_to eq 'DateTime::Duration') {
          $c->add_runtime_module($cd, 'Scalar::Util');
          $cd->{_ccl_check_type} = "Scalar::Util::blessed($dt) && $dt\->isa('DateTime::Duration')";
      } else {
          die "BUG: Unknown coerce_to value '$coerce_to', use either ".
              "float(secs) or DateTime::Duration";
      }
  }
  
  sub superclause_comparable {
      my ($self, $which, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($cd->{cl_is_expr}) {
          # i'm lazy, technical debt
          $c->_die($cd, "duration's comparison with expression not yet supported");
      }
  
      my $coerce_to = $cd->{coerce_to};
      if ($coerce_to eq 'float(secs)') {
          if ($which eq 'is') {
              $c->add_ccl($cd, "$dt == $ct"); # XXX yeah we're not supposed to use == with floats
          } elsif ($which eq 'in') {
              $c->add_runtime_module('List::Util');
              $c->add_ccl($cd, "List::Util::first(sub{$dt == \$_}, $ct)"); # XXX yeah we're not supposed to use == with floats
          }
      } elsif ($coerce_to eq 'DateTime::Duration') {
          # we need to express this like this because if we just use the raw $cv
          # (dump) it will be unwieldy
          my $ect = join(
              "",
              "DateTime::Duration->new(",
              "years => "  .$cv->years.",",
              "months => " .$cv->months.",",
              "weeks => "  .$cv->weeks.",",
              "days => "   .$cv->days.",",
              "hours => "  .$cv->hours.",",
              "minutes => ".$cv->minutes.",",
              "seconds => ".$cv->seconds.",",
              ")",
          );
  
          if ($which eq 'is') {
              $c->add_ccl($cd, "DateTime::Duration->compare($dt, $ect)==0");
          } elsif ($which eq 'in') {
              $c->add_runtime_module('List::Util');
              $c->add_ccl($cd, "List::Util::first(sub{DateTime::Duration->compare($dt, \$_)==0}, $ect)");
          }
      }
  }
  
  sub superclause_sortable {
      my ($self, $which, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($cd->{cl_is_expr}) {
          # i'm lazy, technical debt
          $c->_die($cd, "duration's comparison with expression not yet supported");
      }
  
      my $coerce_to = $cd->{coerce_to};
      if ($coerce_to eq 'float(secs)') {
          if ($which eq 'min') {
              $c->add_ccl($cd, "$dt >= $cv");
          } elsif ($which eq 'xmin') {
              $c->add_ccl($cd, "$dt > $cv");
          } elsif ($which eq 'max') {
              $c->add_ccl($cd, "$dt <= $cv");
          } elsif ($which eq 'xmax') {
              $c->add_ccl($cd, "$dt < $cv");
          } elsif ($which eq 'between') {
              $c->add_ccl($cd, "$dt >= $cv->[0] && $dt <= $cv->[1]");
          } elsif ($which eq 'xbetween') {
              $c->add_ccl($cd, "$dt >  $cv->[0] && $dt <  $cv->[1]");
          }
      } elsif ($coerce_to eq 'DateTime::Duration') {
          # we need to express this like this because if we just use the raw $cv
          # (dump) it will be unwieldy
          my ($ect, $ect0, $ect1);
          if (ref($cv) eq 'ARRAY') {
              $ect0 = join(
                  "",
                  "DateTime::Duration->new(",
                  "years => "  .$cv->[0]->years.",",
                  "months => " .$cv->[0]->months.",",
                  "weeks => "  .$cv->[0]->weeks.",",
                  "days => "   .$cv->[0]->days.",",
                  "hours => "  .$cv->[0]->hours.",",
                  "minutes => ".$cv->[0]->minutes.",",
                  "seconds => ".$cv->[0]->seconds.",",
                  ")",
              );
              $ect1 = join(
                  "",
                  "DateTime::Duration->new(",
                  "years => "  .$cv->[1]->years.",",
                  "months => " .$cv->[1]->months.",",
                  "weeks => "  .$cv->[1]->weeks.",",
                  "days => "   .$cv->[1]->days.",",
                  "hours => "  .$cv->[1]->hours.",",
                  "minutes => ".$cv->[1]->minutes.",",
                  "seconds => ".$cv->[1]->seconds.",",
                  ")",
              );
          } else {
              $ect = join(
                  "",
                  "DateTime::Duration->new(",
                  "years => "  .$cv->years.",",
                  "months => " .$cv->months.",",
                  "weeks => "  .$cv->weeks.",",
                  "days => "   .$cv->days.",",
                  "hours => "  .$cv->hours.",",
                  "minutes => ".$cv->minutes.",",
                  "seconds => ".$cv->seconds.",",
                  ")",
              );
          }
  
          if ($which eq 'min') {
              $c->add_ccl($cd, "DateTime->compare($dt, $ect) >= 0");
          } elsif ($which eq 'xmin') {
              $c->add_ccl($cd, "DateTime->compare($dt, $ect) > 0");
          } elsif ($which eq 'max') {
              $c->add_ccl($cd, "DateTime->compare($dt, $ect) <= 0");
          } elsif ($which eq 'xmax') {
              $c->add_ccl($cd, "DateTime->compare($dt, $ect) < 0");
          } elsif ($which eq 'between') {
              $c->add_ccl($cd, "DateTime->compare($dt, $ect0) >= 0 && DateTime->compare($dt, $ect1) <= 0");
          } elsif ($which eq 'xbetween') {
              $c->add_ccl($cd, "DateTime->compare($dt, $ect0) >  0 && DateTime->compare($dt, $ect1) <  0");
          }
      }
  }
  
  1;
  # ABSTRACT: perl's type handler for type "duration"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::duration - perl's type handler for type "duration"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::duration (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 DESCRIPTION
  
  The C<duration> type in perl can be represented one of two choices: float
  (secs), or L<DateTime::Duration> object.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+|handle_.+|before_.+|after_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_DURATION

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/float.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_FLOAT';
  package Data::Sah::Compiler::perl::TH::float;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::perl::TH::num';
  with 'Data::Sah::Type::float';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      my $dt = $cd->{data_term};
      if ($cd->{args}{core} || $cd->{args}{no_modules}) {
          $cd->{_ccl_check_type} = "$dt =~ ".'/\A(?:[+-]?(?:0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?|((?i)\s*nan\s*)|((?i)\s*[+-]?inf(inity)?)\s*)\z/';
      } else {
          $c->add_sun_module($cd);
          # we use isnum = isint + isfloat, because isfloat(3) is false
          $cd->{_ccl_check_type} = "$cd->{_sun_module}::isnum($dt)";
      }
  }
  
  sub clause_is_nan {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($cd->{cl_is_expr}) {
          if ($cd->{args}{core} || $cd->{args}{no_modules}) {
              $c->add_ccl(
                  $cd,
                  qq[$ct ? lc($dt+0) eq "nan" : defined($ct) ? lc($dt+0) ne "nan" : 1],
              );
          } else {
              $c->add_ccl(
                  $cd,
                  join(
                      "",
                      "$ct ? $cd->{_sun_module}::isnan($dt) : ",
                      "defined($ct) ? !$cd->{_sun_module}::isnan($dt) : 1",
                  )
              );
          }
      } else {
          if ($cd->{cl_value}) {
              if ($cd->{args}{core} || $cd->{args}{no_modules}) {
                  $c->add_ccl($cd, qq[lc($dt+0) eq "nan"]);
              } else {
                  $c->add_ccl($cd, "$cd->{_sun_module}::isnan($dt)");
              }
          } elsif (defined $cd->{cl_value}) {
              if ($cd->{args}{core} || $cd->{args}{no_modules}) {
                  $c->add_ccl($cd, qq[lc($dt+0) ne "nan"]);
              } else {
                  $c->add_ccl($cd, "!$cd->{_sun_module}::isnan($dt)");
              }
          }
      }
  }
  
  sub clause_is_neg_inf {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($cd->{cl_is_expr}) {
          if ($cd->{args}{core} || $cd->{args}{no_modules}) {
              $c->add_ccl(
                  $cd, join(
                      '',
                      qq[$ct ? $dt =~ /\\A\\s*-inf(inity)?\\s*\\z/i : ],
                      qq[defined($ct) ? $dt !~ /\\A\\s*inf(inity)?\\s*\\z/i : 1]
                  ));
          } else {
              $c->add_ccl(
                  $cd, join(
                      '',
                      "$ct ? $cd->{_sun_module}::isinf($dt) && $cd->{_sun_module}::isneg($dt) : ",
                      "defined($ct) ? !($cd->{_sun_module}::isinf($dt) && $cd->{_sun_module}::isneg($dt)) : 1",
                  ));
          }
      } else {
          if ($cd->{cl_value}) {
              if ($cd->{args}{core} || $cd->{args}{no_modules}) {
                  $c->add_ccl($cd, qq[$dt =~ /\\A\\s*-inf(inity)?\\s*\\z/i]);
              } else {
                  $c->add_ccl($cd, "$cd->{_sun_module}::isinf($dt) && $cd->{_sun_module}::isneg($dt)");
              }
          } elsif (defined $cd->{cl_value}) {
              if ($cd->{args}{core} || $cd->{args}{no_modules}) {
                  $c->add_ccl($cd, qq[$dt !~ /\\A\\s*-inf(inity)?\\s*\\z/i]);
              } else {
                  $c->add_ccl($cd, "!($cd->{_sun_module}::isinf($dt) && $cd->{_sun_module}::isneg($dt))");
              }
          }
      }
  }
  
  sub clause_is_pos_inf {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($cd->{cl_is_expr}) {
          if ($cd->{args}{core} || $cd->{args}{no_modules}) {
              $c->add_ccl(
                  $cd, join(
                      '',
                      qq[$ct ? $dt =~ /\\A\\s*inf(inity)?\\s*\\z/i : ],
                      qq[defined($ct) ? $dt !~ /\\A\\s*inf(inity)?\\s*\\z/i : 1]
                  ));
          } else {
              $c->add_ccl(
                  $cd, join(
                      '',
                      "$ct ? $cd->{_sun_module}::isinf($dt) && !$cd->{_sun_module}::isneg($dt) : ",
                      "defined($ct) ? !($cd->{_sun_module}::isinf($dt) && !$cd->{_sun_module}::isneg($dt)) : 1",
                  ));
          }
      } else {
          if ($cd->{cl_value}) {
              if ($cd->{args}{core} || $cd->{args}{no_modules}) {
                  $c->add_ccl($cd, qq[$dt =~ /\\A\\s*inf(inity)?\\s*\\z/i]);
              } else {
                  $c->add_ccl($cd, "$cd->{_sun_module}::isinf($dt) && !$cd->{_sun_module}::isneg($dt)");
              }
          } elsif (defined $cd->{cl_value}) {
              if ($cd->{args}{core} || $cd->{args}{no_modules}) {
                  $c->add_ccl($cd, qq[$dt !~ /\\A\\s*inf(inity)?\\s*\\z/i]);
              } else {
                  $c->add_ccl($cd, "!($cd->{_sun_module}::isinf($dt) && !$cd->{_sun_module}::isneg($dt))");
              }
          }
      }
  }
  
  sub clause_is_inf {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($cd->{cl_is_expr}) {
          if ($cd->{args}{core} || $cd->{args}{no_modules}) {
              $c->add_ccl(
                  $cd, join(
                      '',
                      qq[$ct ? $dt =~ /\\A\\s*-?inf(inity)?\\s*\\z/i : ],
                      qq[defined($ct) ? $dt+0 !~ /\\A-?inf\\z/ : 1]
                  ));
          } else {
              $c->add_ccl($cd, "$ct ? $cd->{_sun_module}::isinf($dt) : ".
                              "defined($ct) ? $cd->{_sun_module}::isinf($dt) : 1");
          }
      } else {
          if ($cd->{cl_value}) {
              if ($cd->{args}{core} || $cd->{args}{no_modules}) {
                  $c->add_ccl($cd, qq[$dt =~ /\\A\\s*-?inf(inity)?\\s*\\z/i]);
              } else {
                  $c->add_ccl($cd, "$cd->{_sun_module}::isinf($dt)");
              }
          } elsif (defined $cd->{cl_value}) {
              if ($cd->{args}{core} || $cd->{args}{no_modules}) {
                  $c->add_ccl($cd, qq[$dt !~ /\\A\\s*-?inf(inity)?\\s*\\z/i]);
              } else {
                  $c->add_ccl($cd, "!$cd->{_sun_module}::isinf($dt)");
              }
          }
      }
  }
  
  1;
  # ABSTRACT: perl's type handler for type "float"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::float - perl's type handler for type "float"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::float (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(compiler|clause_.+|handle_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_FLOAT

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/hash.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_HASH';
  package Data::Sah::Compiler::perl::TH::hash;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Data::Dmp;
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::perl::TH';
  with 'Data::Sah::Type::hash';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      my $dt = $cd->{data_term};
      $cd->{_ccl_check_type} = "ref($dt) eq 'HASH'";
  }
  
  my $FRZ = "Storable::freeze";
  
  sub superclause_comparable {
      my ($self, $which, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      # Storable is chosen because it's core and fast. ~~ is not very
      # specific.
      $c->add_runtime_module($cd, 'Storable');
  
      if ($which eq 'is') {
          $c->add_ccl($cd, "$FRZ($dt) eq $FRZ($ct)");
      } elsif ($which eq 'in') {
          $c->add_runtime_smartmatch_pragma($cd);
          $c->add_ccl($cd, "$FRZ($dt) ~~ [map {$FRZ(\$_)} \@{ $ct }]");
      }
  }
  
  sub superclause_has_elems {
      my ($self_th, $which, $cd) = @_;
      my $c  = $self_th->compiler;
      my $cv = $cd->{cl_value};
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($which eq 'len') {
          $c->add_ccl($cd, "keys(\%{$dt}) == $ct");
      } elsif ($which eq 'min_len') {
          $c->add_ccl($cd, "keys(\%{$dt}) >= $ct");
      } elsif ($which eq 'max_len') {
          $c->add_ccl($cd, "keys(\%{$dt}) <= $ct");
      } elsif ($which eq 'len_between') {
          if ($cd->{cl_is_expr}) {
              $c->add_ccl(
                  $cd, "keys(\%{$dt}) >= $ct\->[0] && ".
                      "keys(\%{$dt}) >= $ct\->[1]");
          } else {
              # simplify code
              $c->add_ccl(
                  $cd, "keys(\%{$dt}) >= $cv->[0] && ".
                      "keys(\%{$dt}) <= $cv->[1]");
          }
      } elsif ($which eq 'has') {
          $c->add_runtime_smartmatch_pragma($cd);
          #$c->add_ccl($cd, "$FRZ($ct) ~~ [map {$FRZ(\$_)} values \%{ $dt }]");
  
          # XXX currently we choose below for speed, but only works for hash of
          # scalars. stringifying is required because smartmatch will switch to
          # numeric if we feed something like {a=>1}
          $c->add_ccl($cd, "$ct ~~ [values \%{ $dt }]");
      } elsif ($which eq 'each_index') {
          $self_th->set_tmp_data_term($cd) if $cd->{args}{data_term_includes_topic_var};
          $self_th->gen_each($cd, "sort keys(\%{$cd->{data_term}})", '', '$_');
          $self_th->restore_data_term($cd) if $cd->{args}{data_term_includes_topic_var};
      } elsif ($which eq 'each_elem') {
          $self_th->set_tmp_data_term($cd) if $cd->{args}{data_term_includes_topic_var};
          $self_th->gen_each($cd, "sort keys(\%{$cd->{data_term}})", '_', "$cd->{data_term}\->{\$_}");
          $self_th->restore_data_term($cd) if $cd->{args}{data_term_includes_topic_var};
      } elsif ($which eq 'check_each_index') {
          $self_th->compiler->_die_unimplemented_clause($cd);
      } elsif ($which eq 'check_each_elem') {
          $self_th->compiler->_die_unimplemented_clause($cd);
      } elsif ($which eq 'uniq') {
          $self_th->compiler->_die_unimplemented_clause($cd);
      } elsif ($which eq 'exists') {
          $self_th->compiler->_die_unimplemented_clause($cd);
      }
  }
  
  sub _clause_keys_or_re_keys {
      my ($self_th, $which, $cd) = @_;
      my $c  = $self_th->compiler;
      my $cv = $cd->{cl_value};
      my $dt = $cd->{data_term};
  
      local $cd->{_subdata_level} = $cd->{_subdata_level} + 1;
  
      # we handle subdata manually here, because in generated code for
      # {keys,re_keys}.restrict, we haven't delved into the keys
  
      my $jccl;
      {
          local $cd->{ccls} = [];
  
          my $lit_valid_keys;
          if ($which eq 'keys') {
              $lit_valid_keys = $c->literal([sort keys %$cv]);
          } else {
              $lit_valid_keys = "[".
                  join(",", map { "qr/".$c->_str2reliteral($cd, $_)."/" }
                           sort keys %$cv)."]";
          }
  
          $self_th->set_tmp_data_term($cd) if $cd->{args}{data_term_includes_topic_var};
  
          if ($cd->{clset}{"$which.restrict"} // 1) {
              local $cd->{_debug_ccl_note} = "$which.restrict";
              $c->add_runtime_module($cd, "List::Util");
              $c->add_runtime_smartmatch_pragma($cd);
              $c->add_ccl(
                  $cd,
                  # here we need ~~ because it can match against strs or regexes
                  "!defined(List::Util::first(sub {!(\$_ ~~ $lit_valid_keys)}, ".
                      "keys %{$cd->{data_term}}))",
                  {
                      err_msg => 'TMP1',
                      err_expr => join(
                          "",
                          'sprintf(',
                          $c->literal($c->_xlt(
                              $cd, "hash contains ".
                                  "unknown field(s) (%s)")),
                          ',',
                          "join(', ', sort grep {!(\$_ ~~ $lit_valid_keys)} ",
                          "keys %{$cd->{data_term}})",
                          ')',
                      ),
                  },
              );
              $self_th->restore_data_term($cd) if $cd->{args}{data_term_includes_topic_var};
          }
          delete $cd->{uclset}{"$which.restrict"};
  
          my $cdef;
          if ($which eq 'keys') {
              $cdef = $cd->{clset}{"keys.create_default"} // 1;
              delete $cd->{uclset}{"keys.create_default"};
          }
  
          $self_th->set_tmp_data_term($cd) if $cd->{args}{data_term_includes_topic_var};
  
          my $nkeys = scalar(keys %$cv);
          my $i = 0;
          for my $k (sort keys %$cv) {
              my $kre = $c->_str2reliteral($cd, $k);
              local $cd->{spath} = [@{ $cd->{spath} }, $k];
              ++$i;
              my $sch = $c->main->normalize_schema($cv->{$k});
              my $kdn = $k; $kdn =~ s/\W+/_/g;
              my $klit = $which eq 're_keys' ? '$_' : $c->literal($k);
              my $kdt = "$cd->{data_term}\->{$klit}";
              my %iargs = %{$cd->{args}};
              $iargs{outer_cd}             = $cd;
              $iargs{data_name}            = $kdn;
              $iargs{data_term}            = $kdt;
              $iargs{schema}               = $sch;
              $iargs{schema_is_normalized} = 1;
              $iargs{indent_level}++;
              $iargs{data_term_includes_topic_var} = 1 if $which eq 're_keys';
              my $icd = $c->compile(%iargs);
  
              # should we set default for hash value?
              my $sdef = $cdef && defined($sch->[1]{default});
  
              # stack is used to store (non-bool) subresults
              $c->add_var($cd, '_sahv_stack', []) if $cd->{use_dpath};
  
              my @code = (
                  ($c->indent_str($cd), "(push(@\$_sahv_dpath, undef), push(\@\$_sahv_stack, undef), \$_sahv_stack->[-1] = \n")
                      x !!($cd->{use_dpath} && $i == 1),
  
                  # for re_keys, we iterate over all data's keys which match regex
                  ('(!defined(List::Util::first(sub {!(')
                      x !!($which eq 're_keys'),
  
                  $which eq 're_keys' ? "\$_ !~ /$kre/ || (" :
                      ($sdef ? "" : "!exists($kdt) || ("),
  
                  ($c->indent_str($cd), "(\$_sahv_dpath->[-1] = ".
                       ($which eq 're_keys' ? '$_' : $klit)."),\n")
                           x !!$cd->{use_dpath},
                  $icd->{result}, "\n",
  
                  $which eq 're_keys' || !$sdef ? ")" : "",
  
                  # close iteration over all data's keys which match regex
                  (")}, sort keys %{ $cd->{data_term} })))")
                      x !!($which eq 're_keys'),
  
                  ($c->indent_str($cd), "), pop(\@\$_sahv_dpath), pop(\@\$_sahv_stack)\n")
                      x !!($cd->{use_dpath} && $i == $nkeys),
              );
              my $ires = join("", @code);
              local $cd->{_debug_ccl_note} = "$which: ".$c->literal($k);
              $c->add_ccl($cd, $ires);
          }
  
          $self_th->restore_data_term($cd) if $cd->{args}{data_term_includes_topic_var};
  
          $jccl = $c->join_ccls(
              $cd, $cd->{ccls}, {err_msg => ''});
      }
      $c->add_ccl($cd, $jccl, {});
  }
  
  sub clause_keys {
      my ($self, $cd) = @_;
      $self->_clause_keys_or_re_keys('keys', $cd);
  }
  
  sub clause_re_keys {
      my ($self, $cd) = @_;
      $self->_clause_keys_or_re_keys('re_keys', $cd);
  }
  
  sub clause_req_keys {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      # we assign to $_sahv_h first to avoid variable clashing if $dt is '$_'.
  
      $c->add_runtime_module($cd, "List::Util");
      $c->add_ccl(
        $cd,
        "do { my \$_sahv_h = $dt; !defined(List::Util::first(sub {!exists(\$_sahv_h\->{\$_})}, \@{ $ct })) }",
        {
          err_msg => 'TMP',
          err_expr =>
            "sprintf(".
            $c->literal($c->_xlt($cd, "hash has missing required field(s) (%s)")).
            ",join(', ', do { my \$_sahv_h = $dt; grep { !exists(\$_sahv_h\->{\$_}) } \@{ $ct } }))"
        }
      );
  }
  
  sub clause_allowed_keys {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      $c->add_runtime_module($cd, "List::Util");
      $c->add_runtime_smartmatch_pragma($cd);
      $c->add_ccl(
        $cd,
        "!defined(List::Util::first(sub {!(\$_ ~~ $ct)}, keys \%{ $dt }))",
        {
          err_msg => 'TMP',
          err_expr =>
            "sprintf(".
            $c->literal($c->_xlt($cd, "hash contains non-allowed field(s) (%s)")).
            ",join(', ', sort grep { !(\$_ ~~ $ct) } keys \%{ $dt }))"
        }
      );
  }
  
  sub clause_allowed_keys_re {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      #my $ct = $cd->{cl_term};
      my $cv = $cd->{cl_value};
      my $dt = $cd->{data_term};
  
      if ($cd->{cl_is_expr}) {
          # i'm lazy atm and does not need expr yet
          $c->_die_unimplemented_clause($cd, "with expr");
      }
  
      my $re = $c->_str2reliteral($cd, $cv);
      $c->add_runtime_module($cd, "List::Util");
      $c->add_runtime_smartmatch_pragma($cd);
      $c->add_ccl(
          $cd,
          "!defined(List::Util::first(sub {\$_ !~ /$re/}, keys \%{ $dt }))",
          {
            err_msg => 'TMP',
            err_expr =>
            "sprintf(".
            $c->literal($c->_xlt($cd, "hash contains non-allowed field(s) (%s)")).
            ",join(', ', sort grep { \$_ !~ /$re/ } keys \%{ $dt }))"
        }
      );
  }
  
  sub clause_forbidden_keys {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      $c->add_runtime_module($cd, "List::Util");
      $c->add_runtime_smartmatch_pragma($cd);
      $c->add_ccl(
        $cd,
        "!defined(List::Util::first(sub {\$_ ~~ $ct}, keys \%{ $dt }))",
        {
          err_msg => 'TMP',
          err_expr =>
            "sprintf(".
            $c->literal($c->_xlt($cd, "hash contains forbidden field(s) (%s)")).
            ",join(', ', sort grep { \$_ ~~ $ct } keys \%{ $dt }))"
        }
      );
  }
  
  sub clause_forbidden_keys_re {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      #my $ct = $cd->{cl_term};
      my $cv = $cd->{cl_value};
      my $dt = $cd->{data_term};
  
      if ($cd->{cl_is_expr}) {
          # i'm lazy atm and does not need expr yet
          $c->_die_unimplemented_clause($cd, "with expr");
      }
  
      my $re = $c->_str2reliteral($cd, $cv);
      $c->add_runtime_module($cd, "List::Util");
      $c->add_runtime_smartmatch_pragma($cd);
      $c->add_ccl(
          $cd,
          "!defined(List::Util::first(sub {\$_ =~ /$re/}, keys \%{ $dt }))",
          {
            err_msg => 'TMP',
            err_expr =>
            "sprintf(".
            $c->literal($c->_xlt($cd, "hash contains forbidden field(s) (%s)")).
            ",join(', ', sort grep { \$_ =~ /$re/ } keys \%{ $dt }))"
        }
      );
  }
  
  sub clause_choose_one_key {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      # we assign to $_sahv_h first to avoid variable clashing if $dt is '$_'.
  
      $c->add_runtime_module($cd, "List::Util");
      $c->add_ccl(
        $cd,
        "do { my \$_sahv_h = $dt; List::Util::sum(map {exists(\$_sahv_h\->{\$_}) ? 1:0} \@{ $ct }) <= 1 }",
        {},
      );
  }
  
  sub clause_choose_all_keys {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      # we assign to $h first to avoid variable clashing if $dt is '$_'.
  
      $c->add_runtime_module($cd, "List::Util");
      $c->add_ccl(
        $cd,
        "do { my \$_sahv_h = $dt; my \$_sahv_keys = $ct; my \$_sahv_tot = List::Util::sum(map {exists(\$_sahv_h\->{\$_}) ? 1:0} \@\$_sahv_keys); \$_sahv_tot==0 || \$_sahv_tot==\@\$_sahv_keys }",
        {},
      );
  }
  
  sub clause_req_one_key {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      # we assign to $_sahv_h first to avoid variable clashing if $dt is '$_'.
  
      $c->add_runtime_module($cd, "List::Util");
      $c->add_ccl(
        $cd,
        "do { my \$_sahv_h = $dt; List::Util::sum(map {exists(\$_sahv_h\->{\$_}) ? 1:0} \@{ $ct }) == 1 }",
        {},
      );
  }
  
  sub clause_req_some_keys {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
      my $dt = $cd->{data_term};
  
      # we assign to $_sahv_h first to avoid variable clashing if $dt is '$_'.
  
      $c->add_runtime_module($cd, "List::Util");
      $c->add_ccl(
        $cd,
        "do { my \$_sahv_h = $dt; my \$_sahv_n = List::Util::sum(map {exists(\$_sahv_h\->{\$_}) ? 1:0} \@{ ".$c->literal($cv->[2])." }); \$_sahv_n >= $cv->[0] && \$_sahv_n <= $cv->[1] }",
        {},
      );
  }
  
  sub clause_dep_any {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      # we assign to $_sahv_h first to avoid variable clashing if $dt is '$_'.
  
      $c->add_runtime_module($cd, "List::Util");
      $c->add_ccl(
        $cd,
        "do { my \$_sahv_h = $dt; my \$_sahv_ct = $ct; ".
            "my \$_sahv_has_prereq = List::Util::sum(map {exists(\$_sahv_h\->{\$_}) ? 1:0} \@{ \$_sahv_ct->[1] }) ? 1:0; ".
            "my \$_sahv_has_dep    = List::Util::sum(map {exists(\$_sahv_h\->{\$_}) ? 1:0} (ref(\$_sahv_ct->[0]) eq 'ARRAY' ? \@{ \$_sahv_ct->[0] } : (\$_sahv_ct->[0]))) ? 1:0; ".
            "!\$_sahv_has_dep || \$_sahv_has_prereq }",
        {},
      );
  }
  
  sub clause_dep_all {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      # we assign to $_sahv_h first to avoid variable clashing if $dt is '$_'.
  
      $c->add_runtime_module($cd, "List::Util");
      $c->add_ccl(
        $cd,
        "do { my \$_sahv_h = $dt; my \$_sahv_ct = $ct; ".
            "my \$_sahv_has_prereq = List::Util::sum(map {exists(\$_sahv_h\->{\$_}) ? 1:0} \@{ \$_sahv_ct->[1] }) == \@{ \$_sahv_ct->[1] } ? 1:0; ".
            "my \$_sahv_has_dep    = List::Util::sum(map {exists(\$_sahv_h\->{\$_}) ? 1:0} (ref(\$_sahv_ct->[0]) eq 'ARRAY' ? \@{ \$_sahv_ct->[0] } : (\$_sahv_ct->[0]))) ? 1:0; ".
            "!\$_sahv_has_dep || \$_sahv_has_prereq }",
        {},
      );
  }
  
  sub clause_req_dep_any {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      # we assign to $_sahv_h first to avoid variable clashing if $dt is '$_'.
  
      $c->add_runtime_module($cd, "List::Util");
      $c->add_ccl(
        $cd,
        "do { my \$_sahv_h = $dt; my \$_sahv_ct = $ct; ".
            "my \$_sahv_has_prereq = List::Util::sum(map {exists(\$_sahv_h\->{\$_}) ? 1:0} \@{ \$_sahv_ct->[1] }) ? 1:0; ".
            "my \$_sahv_has_dep    = List::Util::sum(map {exists(\$_sahv_h\->{\$_}) ? 1:0} (ref(\$_sahv_ct->[0]) eq 'ARRAY' ? \@{ \$_sahv_ct->[0] } : (\$_sahv_ct->[0]))) ? 1:0; ".
            "\$_sahv_has_dep || !\$_sahv_has_prereq }",
        {},
      );
  }
  
  sub clause_req_dep_all {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      # we assign to $_sahv_h first to avoid variable clashing if $dt is '$_'.
  
      $c->add_runtime_module($cd, "List::Util");
      $c->add_ccl(
        $cd,
        "do { my \$_sahv_h = $dt; my \$_sahv_ct = $ct; ".
            "my \$_sahv_has_prereq = List::Util::sum(map {exists(\$_sahv_h\->{\$_}) ? 1:0} \@{ \$_sahv_ct->[1] }) == \@{ \$_sahv_ct->[1] } ? 1:0; ".
            "my \$_sahv_has_dep    = List::Util::sum(map {exists(\$_sahv_h\->{\$_}) ? 1:0} (ref(\$_sahv_ct->[0]) eq 'ARRAY' ? \@{ \$_sahv_ct->[0] } : (\$_sahv_ct->[0]))) ? 1:0; ".
            "\$_sahv_has_dep || !\$_sahv_has_prereq }",
        {},
      );
  }
  
  1;
  # ABSTRACT: perl's type handler for type "hash"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::hash - perl's type handler for type "hash"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::hash (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_HASH

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/int.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_INT';
  package Data::Sah::Compiler::perl::TH::int;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::perl::TH::num';
  with 'Data::Sah::Type::int';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      my $dt = $cd->{data_term};
      if ($cd->{args}{core} || $cd->{args}{no_modules}) {
          $cd->{_ccl_check_type} = "$dt =~ ".'/\A[+-]?(?:0|[1-9][0-9]*)\z/';
      } else {
          $c->add_sun_module($cd);
          $cd->{_ccl_check_type} =
              "$cd->{_sun_module}::isint($dt)";
      }
  }
  
  sub clause_div_by {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      $c->add_ccl($cd, "$dt % $ct == 0");
  }
  
  sub clause_mod {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      $c->add_ccl($cd, "$dt % $ct\->[0] == $ct\->[1]");
  }
  
  1;
  # ABSTRACT: perl's type handler for type "int"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::int - perl's type handler for type "int"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::int (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_INT

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/num.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_NUM';
  package Data::Sah::Compiler::perl::TH::num;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::perl::TH';
  with 'Data::Sah::Type::num';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
      my $dt = $cd->{data_term};
  
      if ($cd->{args}{core} || $cd->{args}{no_modules}) {
          $cd->{_ccl_check_type} = "$dt =~ ".'/\A(?:[+-]?(?:0|[1-9][0-9]*)(\.[0-9]+)?([eE][+-]?[0-9]+)?|((?i)\s*nan\s*)|((?i)\s*[+-]?inf(inity)?)\s*)\z/';
      } else {
          $c->add_sun_module($cd);
          $cd->{_ccl_check_type} = "$cd->{_sun_module}::isnum($dt)";
      }
  }
  
  sub superclause_comparable {
      my ($self, $which, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($which eq 'is') {
          $c->add_ccl($cd, "$dt == $ct");
      } elsif ($which eq 'in') {
          $c->add_runtime_smartmatch_pragma($cd);
          $c->add_ccl($cd, "$dt ~~ $ct");
      }
  }
  
  sub superclause_sortable {
      my ($self, $which, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($which eq 'min') {
          $c->add_ccl($cd, "$dt >= $ct");
      } elsif ($which eq 'xmin') {
          $c->add_ccl($cd, "$dt > $ct");
      } elsif ($which eq 'max') {
          $c->add_ccl($cd, "$dt <= $ct");
      } elsif ($which eq 'xmax') {
          $c->add_ccl($cd, "$dt < $ct");
      } elsif ($which eq 'between') {
          if ($cd->{cl_is_expr}) {
              $c->add_ccl($cd, "$dt >= $ct\->[0] && $dt <= $ct\->[1]");
          } else {
              # simplify code
              $c->add_ccl($cd, "$dt >= $cv->[0] && $dt <= $cv->[1]");
          }
      } elsif ($which eq 'xbetween') {
          if ($cd->{cl_is_expr}) {
              $c->add_ccl($cd, "$dt > $ct\->[0] && $dt < $ct\->[1]");
          } else {
              # simplify code
              $c->add_ccl($cd, "$dt > $cv->[0] && $dt < $cv->[1]");
          }
      }
  }
  
  1;
  # ABSTRACT: perl's type handler for type "num"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::num - perl's type handler for type "num"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::num (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_NUM

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/obj.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_OBJ';
  package Data::Sah::Compiler::perl::TH::obj;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::perl::TH';
  with 'Data::Sah::Type::obj';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      my $dt = $cd->{data_term};
      $c->add_runtime_module($cd, 'Scalar::Util');
      $cd->{_ccl_check_type} = "Scalar::Util::blessed($dt)";
  }
  
  sub clause_can {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      $c->add_ccl($cd, "$dt->can($ct)");
  }
  
  sub clause_isa {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      $c->add_ccl($cd, "$dt->isa($ct)");
  }
  
  1;
  # ABSTRACT: perl's type handler for type "obj"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::obj - perl's type handler for type "obj"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::obj (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_OBJ

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/re.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_RE';
  package Data::Sah::Compiler::perl::TH::re;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::perl::TH';
  with 'Data::Sah::Type::re';
  
  # XXX prefilter to convert string to regex object
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      my $dt = $cd->{data_term};
      $cd->{_ccl_check_type} = "ref($dt) eq 'Regexp' || !ref($dt) && ".
          "eval { my \$tmp = $dt; qr/\$tmp/; 1 }";
  }
  
  1;
  # ABSTRACT: perl's type handler for type "re"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::re - perl's type handler for type "re"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::re (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_RE

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/str.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_STR';
  package Data::Sah::Compiler::perl::TH::str;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::perl::TH';
  with 'Data::Sah::Type::str';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      my $dt = $cd->{data_term};
      $cd->{_ccl_check_type} = "!ref($dt)";
  }
  
  sub superclause_comparable {
      my ($self, $which, $cd) = @_;
      my $c  = $self->compiler;
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($which eq 'is') {
          $c->add_ccl($cd, "$dt eq $ct");
      } elsif ($which eq 'in') {
          $c->add_runtime_smartmatch_pragma($cd);
          $c->add_ccl($cd, "$dt ~~ $ct");
      }
  }
  
  sub superclause_sortable {
      my ($self, $which, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($which eq 'min') {
          $c->add_ccl($cd, "$dt ge $ct");
      } elsif ($which eq 'xmin') {
          $c->add_ccl($cd, "$dt gt $ct");
      } elsif ($which eq 'max') {
          $c->add_ccl($cd, "$dt le $ct");
      } elsif ($which eq 'xmax') {
          $c->add_ccl($cd, "$dt lt $ct");
      } elsif ($which eq 'between') {
          if ($cd->{cl_is_expr}) {
              $c->add_ccl($cd, "$dt ge $ct\->[0] && $dt le $ct\->[1]");
          } else {
              # simplify code
              $c->add_ccl($cd, "$dt ge ".$c->literal($cv->[0]).
                              " && $dt le ".$c->literal($cv->[1]));
          }
      } elsif ($which eq 'xbetween') {
          if ($cd->{cl_is_expr}) {
              $c->add_ccl($cd, "$dt gt $ct\->[0] && $dt lt $ct\->[1]");
          } else {
              # simplify code
              $c->add_ccl($cd, "$dt gt ".$c->literal($cv->[0]).
                              " && $dt lt ".$c->literal($cv->[1]));
          }
      }
  }
  
  sub superclause_has_elems {
      my ($self_th, $which, $cd) = @_;
      my $c  = $self_th->compiler;
      my $cv = $cd->{cl_value};
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($which eq 'len') {
          $c->add_ccl($cd, "length($dt) == $ct");
      } elsif ($which eq 'min_len') {
          $c->add_ccl($cd, "length($dt) >= $ct");
      } elsif ($which eq 'max_len') {
          $c->add_ccl($cd, "length($dt) <= $ct");
      } elsif ($which eq 'len_between') {
          if ($cd->{cl_is_expr}) {
              $c->add_ccl(
                  $cd, "length($dt) >= $ct\->[0] && ".
                      "length($dt) >= $ct\->[1]");
          } else {
              # simplify code
              $c->add_ccl(
                  $cd, "length($dt) >= $cv->[0] && ".
                      "length($dt) <= $cv->[1]");
          }
      } elsif ($which eq 'has') {
          $c->add_ccl($cd, "index($dt, $ct) >= 0");
      } elsif ($which eq 'each_index') {
          $self_th->set_tmp_data_term($cd) if $cd->{args}{data_term_includes_topic_var};
          $self_th->gen_each($cd, "0..length($cd->{data_term})-1", '_', '$_');
          $self_th->restore_data_term($cd) if $cd->{args}{data_term_includes_topic_var};
      } elsif ($which eq 'each_elem') {
          $self_th->set_tmp_data_term($cd) if $cd->{args}{data_term_includes_topic_var};
          $self_th->gen_each($cd, "0..length($cd->{data_term})-1", '_', "substr($cd->{data_term}, \$_, 1)");
          $self_th->restore_data_term($cd) if $cd->{args}{data_term_includes_topic_var};
      } elsif ($which eq 'check_each_index') {
          $self_th->compiler->_die_unimplemented_clause($cd);
      } elsif ($which eq 'check_each_elem') {
          $self_th->compiler->_die_unimplemented_clause($cd);
      } elsif ($which eq 'uniq') {
          $self_th->compiler->_die_unimplemented_clause($cd);
      } elsif ($which eq 'exists') {
          $self_th->compiler->_die_unimplemented_clause($cd);
      }
  }
  
  sub clause_encoding {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      $c->_die($cd, "Only 'utf8' encoding is currently supported")
          unless $cv eq 'utf8';
      # currently does nothing
  }
  
  sub clause_match {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($cd->{cl_is_expr}) {
          $c->add_ccl($cd, join(
              "",
              "ref($ct) eq 'Regexp' ? $dt =~ $ct : ",
              "do { my \$re = $ct; eval { \$re = /\$re/; 1 } && ",
              "$dt =~ \$re }",
          ));
      } else {
          # simplify code and we can check regex at compile time
          my $re = $c->_str2reliteral($cd, $cv);
          $c->add_ccl($cd, "$dt =~ qr($re)");
      }
  }
  
  sub clause_is_re {
      my ($self, $cd) = @_;
      my $c  = $self->compiler;
      my $cv = $cd->{cl_value};
      my $ct = $cd->{cl_term};
      my $dt = $cd->{data_term};
  
      if ($cd->{cl_is_expr}) {
          $c->add_ccl($cd, join(
              "",
              "do { my \$re = $dt; ",
              "(eval { \$re = qr/\$re/; 1 } ? 1:0) == ($ct ? 1:0) }",
          ));
      } else {
          # simplify code
          $c->add_ccl($cd, join(
              "",
              "do { my \$re = $dt; ",
              ($cv ? "" : "!"), "(eval { \$re = qr/\$re/; 1 })",
              "}",
          ));
      }
  }
  
  1;
  # ABSTRACT: perl's type handler for type "str"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::str - perl's type handler for type "str"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::str (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_STR

    $main::fatpacked{"Data/Sah/Compiler/perl/TH/undef.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_COMPILER_PERL_TH_UNDEF';
  package Data::Sah::Compiler::perl::TH::undef;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Mo qw(build default);
  use Role::Tiny::With;
  
  extends 'Data::Sah::Compiler::perl::TH';
  with 'Data::Sah::Type::undef';
  
  sub handle_type {
      my ($self, $cd) = @_;
      my $c = $self->compiler;
  
      my $dt = $cd->{data_term};
      $cd->{_ccl_check_type} = "!defined($dt)";
  }
  
  1;
  # ABSTRACT: perl's type handler for type "undef"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Compiler::perl::TH::undef - perl's type handler for type "undef"
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Compiler::perl::TH::undef (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|superclause_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_COMPILER_PERL_TH_UNDEF

    $main::fatpacked{"Data/Sah/Human.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_HUMAN';
  package Data::Sah::Human;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any::IfLOG qw($log);
  
  our $Log_Validator_Code = $ENV{LOG_SAH_VALIDATOR_CODE} // 0;
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(gen_human_msg);
  
  sub gen_human_msg {
      require Data::Sah;
  
      my ($schema, $opts) = @_;
  
      state $hc = Data::Sah->new->get_compiler("human");
  
      my %args = (schema => $schema, %{$opts // {}});
      my $opt_source = delete $args{source};
  
      $args{log_result} = 1 if $Log_Validator_Code;
  
      my $cd = $hc->compile(%args);
      $opt_source ? $cd : $cd->{result};
  }
  
  1;
  # ABSTRACT: Some functions to use Data::Sah human compiler
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Human - Some functions to use Data::Sah human compiler
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Human (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 SYNOPSIS
  
   use Data::Sah::Human qw(gen_human_msg);
  
   say gen_human_msg(["int*", min=>2]); # -> "Integer, minimum 2"
  
  =head1 DESCRIPTION
  
  =head1 FUNCTIONS
  
  None exported by default.
  
  =head2 gen_human_msg($schema, \%opts) => STR (or ANY)
  
  Compile schema using human compiler and return the result.
  
  Known options (unknown ones will be passed to the compiler):
  
  =over
  
  =item * source => BOOL (default: 0)
  
  If set to true, will return raw compilation result.
  
  =back
  
  =head1 ENVIRONMENT
  
  L<LOG_SAH_VALIDATOR_CODE>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Data::Sah>, L<Data::Sah::Compiler::human>.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_HUMAN

    $main::fatpacked{"Data/Sah/Lang.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_LANG';
  package Data::Sah::Lang;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  our @ISA    = qw(Exporter);
  our @EXPORT = qw(add_translations);
  
  sub add_translations {
      my %args = @_;
  
      # XXX check caller package and determine language, fill translations in
      # %Data::Sah::Lang::<lang>::translations
  }
  
  1;
  # ABSTRACT: Language routines
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Lang - Language routines
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Lang (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage add_translations
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_LANG

    $main::fatpacked{"Data/Sah/Lang/fr_FR.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_LANG_FR_FR';
  package Data::Sah::Lang::fr_FR;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  use Tie::IxHash;
  
  # currently incomplete
  
  our %translations;
  tie %translations, 'Tie::IxHash', (
  
      # punctuations
  
      q[ ], # inter-word boundary
      q[ ],
  
      q[, ],
      q[, ],
  
      q[: ],
      q[: ],
  
      q[. ],
      q[. ],
  
      q[(],
      q[(],
  
      q[)],
      q[)],
  
      # modal verbs
  
      q[must],
      q[doit],
  
      q[must not],
      q[ne doit pas],
  
      q[should],
      q[devrait],
  
      q[should not],
      q[ne devrait pas],
  
      # field/fields/argument/arguments
  
      q[field],
      q[champ],
  
      q[fields],
      q[champs],
  
      q[argument],
      q[argument],
  
      q[arguments],
      q[arguments],
  
      # multi
  
      q[%s and %s],
      q[%s et %s],
  
      q[%s or %s],
      q[%s ou %s],
  
      q[one of %s],
      q[une des %s],
  
      q[all of %s],
      q[toutes les valeurs %s],
  
      q[%(modal_verb)s satisfy all of the following],
      q[%(modal_verb)s satisfaire à toutes les conditions suivantes],
  
      q[%(modal_verb)s satisfy one of the following],
      q[%(modal_verb)s satisfaire l'une des conditions suivantes],
  
      q[%(modal_verb)s satisfy none of the following],
      q[%(modal_verb)s satisfaire à aucune des conditions suivantes],
  
      # type: BaseType
  
      # type: Sortable
  
      # type: Comparable
  
      # type: HasElems
  
      # type: num
  
      # type: int
  
      q[integer],
      q[nombre entier],
  
      q[integers],
      q[nombres entiers],
  
      q[%(modal_verb)s be divisible by %s],
      q[%(modal_verb)s être divisible par %s],
  
      q[%(modal_verb)s leave a remainder of %2$s when divided by %1$s],
      q[%(modal_verb)s laisser un reste %2$s si divisé par %1$s],
  
      # messages for compiler
  );
  
  1;
  # ABSTRACT: fr_FR locale
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Lang::fr_FR - fr_FR locale
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Lang::fr_FR (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage .+
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_LANG_FR_FR

    $main::fatpacked{"Data/Sah/Lang/id_ID.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_LANG_ID_ID';
  package Data::Sah::Lang::id_ID;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  use Tie::IxHash;
  
  sub ordinate {
      my ($n, $noun) = @_;
      "$noun ke-$n";
  }
  
  our %translations;
  tie %translations, 'Tie::IxHash', (
  
      # punctuations
  
      q[ ], # inter-word boundary
      q[ ],
  
      q[, ],
      q[, ],
  
      q[: ],
      q[: ],
  
      q[. ],
      q[. ],
  
      q[(],
      q[(],
  
      q[)],
      q[)],
  
      # modal verbs
  
      q[must],
      q[harus],
  
      q[must not],
      q[tidak boleh],
  
      q[should],
      q[sebaiknya],
  
      q[should not],
      q[sebaiknya tidak],
  
      # field/fields/argument/arguments
  
      q[field],
      q[field],
  
      q[fields],
      q[field],
  
      q[argument],
      q[argumen],
  
      q[arguments],
      q[argumen],
  
      # multi
  
      q[%s and %s],
      q[%s dan %s],
  
      q[%s or %s],
      q[%s atau %s],
  
      q[%s nor %s],
      q[%s maupun %s],
  
      q[one of %s],
      q[salah satu dari %s],
  
      q[all of %s],
      q[semua dari nilai-nilai %s],
  
      q[any of %s],
      q[satupun dari %s],
  
      q[none of %s],
      q[tak satupun dari %s],
  
      q[%(modal_verb)s satisfy all of the following],
      q[%(modal_verb)s memenuhi semua ketentuan ini],
  
      q[%(modal_verb)s satisfy none all of the following],
      q[%(modal_verb)s melanggar semua ketentuan ini],
  
      q[%(modal_verb)s satisfy one of the following],
      q[%(modal_verb)s memenuhi salah satu ketentuan ini],
  
      # type: BaseType
  
      q[default value is %s],
      q[jika tidak diisi diset ke %s],
  
      q[required %s],
      q[%s wajib diisi],
  
      q[optional %s],
      q[%s opsional],
  
      q[forbidden %s],
      q[%s tidak boleh diisi],
  
      # type: Comparable
  
      q[%(modal_verb)s have the value %s],
      q[%(modal_verb)s bernilai %s],
  
      q[%(modal_verb)s be one of %s],
      q[%(modal_verb)s salah satu dari %s],
  
      # type: HasElems
  
      q[length %(modal_verb)s be %s],
      q[panjang %(modal_verb)s %s],
  
      q[length %(modal_verb)s be at least %s],
      q[panjang %(modal_verb)s minimal %s],
  
      q[length %(modal_verb)s be at most %s],
      q[panjang %(modal_verb)s maksimal %s],
  
      q[length %(modal_verb)s be between %s and %s],
      q[panjang %(modal_verb)s antara %s dan %s],
  
      q[%(modal_verb)s have %s in its elements],
      q[%(modal_verb)s mengandung %s di elemennya],
  
      # type: Sortable
  
      q[%(modal_verb)s be at least %s],
      q[%(modal_verb)s minimal %s],
  
      q[%(modal_verb)s be larger than %s],
      q[%(modal_verb)s lebih besar dari %s],
  
      q[%(modal_verb)s be at most %s],
      q[%(modal_verb)s maksimal %s],
  
      q[%(modal_verb)s be smaller than %s],
      q[%(modal_verb)s lebih kecil dari %s],
  
      q[%(modal_verb)s be between %s and %s],
      q[%(modal_verb)s antara %s dan %s],
  
      q[%(modal_verb)s be larger than %s and smaller than %s],
      q[%(modal_verb)s lebih besar dari %s dan lebih kecil dari %s],
  
      # type: undef
  
      q[undefined value],
      q[nilai tak terdefinisi],
  
      q[undefined values],
      q[nilai tak terdefinisi],
  
      # type: all
  
      q[%(modal_verb)s be %s],
      q[%(modal_verb)s %s],
  
      q[as well as %s],
      q[juga %s],
  
      q[%(modal_verb)s be all of the following],
      q[%(modal_verb)s merupakan semua ini],
  
      # type: any
  
      q[%(modal_verb)s be either %s],
      q[%s],
  
      q[or %s],
      q[atau %s],
  
      q[%(modal_verb)s be one of the following],
      q[%(modal_verb)s merupakan salah satu dari],
  
      # type: array
  
      q[array],
      q[larik],
  
      q[arrays],
      q[larik],
  
      q[%s of %s],
      q[%s %s],
  
      q[each array element %(modal_verb)s be],
      q[setiap elemen larik %(modal_verb)s],
  
      q[%s %(modal_verb)s be],
      q[%s %(modal_verb)s],
  
      q[element],
      q[elemen],
  
      q[each array subscript %(modal_verb)s be],
      q[setiap subskrip larik %(modal_verb)s],
  
      # type: bool
  
      q[boolean value],
      q[nilai boolean],
  
      q[boolean values],
      q[nilai boolean],
  
      q[%(modal_verb)s be true],
      q[%(modal_verb)s bernilai benar],
  
      q[%(modal_verb)s be false],
      q[%(modal_verb)s bernilai salah],
  
      # type: code
  
      q[code],
      q[kode],
  
      q[codes],
      q[kode],
  
      # type: float
  
      q[decimal number],
      q[bilangan desimal],
  
      q[decimal numbers],
      q[bilangan desimal],
  
      q[%(modal_verb)s be a NaN],
      q[%(modal_verb)s NaN],
  
      q[%(modal_verb_neg)s be a NaN],
      q[%(modal_verb_neg)s NaN],
  
      q[%(modal_verb)s be an infinity],
      q[%(modal_verb)s tak hingga],
  
      q[%(modal_verb_neg)s be an infinity],
      q[%(modal_verb_neg)s tak hingga],
  
      q[%(modal_verb)s be a positive infinity],
      q[%(modal_verb)s positif tak hingga],
  
      q[%(modal_verb_neg)s be a positive infinity],
      q[%(modal_verb_neg)s positif tak hingga],
  
      q[%(modal_verb)s be a negative infinity],
      q[%(modal_verb)s negatif tak hingga],
  
      q[%(modal_verb)s be a negative infinity],
      q[%(modal_verb)s negatif tak hingga],
  
      # type: hash
  
      q[hash],
      q[hash],
  
      q[hashes],
      q[hash],
  
      q[field %s %(modal_verb)s be],
      q[field %s %(modal_verb)s],
  
      q[field name %(modal_verb)s be],
      q[nama field %(modal_verb)s],
  
      q[each field %(modal_verb)s be],
      q[setiap field %(modal_verb)s],
  
      q[hash contains unknown field(s) (%s)],
      q[hash mengandung field yang tidak dikenali (%s)],
  
      q[hash contains unknown field(s) (%s)],
      q[hash mengandung field yang tidak dikenali (%s)],
  
      q[%(modal_verb)s have required fields %s],
      q[%(modal_verb)s mengandung field wajib %s],
  
      q[hash has missing required field(s) (%s)],
      q[hash kekurangan field wajib (%s)],
  
      q[%(modal_verb)s have %s in its field values],
      q[%(modal_verb)s mengandung %s di nilai field],
  
      q[%(modal_verb)s only have these allowed fields %s],
      q[%(modal_verb)s hanya mengandung field yang diizinkan %s],
  
      q[%(modal_verb)s only have fields matching regex pattern %s],
      q[%(modal_verb)s hanya mengandung field yang namanya mengikuti pola regex %s],
  
      q[%(modal_verb_neg)s have these forbidden fields %s],
      q[%(modal_verb_neg)s mengandung field yang dilarang %s],
  
      q[%(modal_verb_neg)s have fields matching regex pattern %s],
      q[%(modal_verb_neg)s mengandung field yang namanya mengikuti pola regex %s],
  
      q[hash contains non-allowed field(s) (%s)],
      q[hash mengandung field yang tidak diizinkan (%s)],
  
      q[hash contains forbidden field(s) (%s)],
      q[hash mengandung field yang dilarang (%s)],
  
      q[fields whose names match regex pattern %s %(modal_verb)s be],
      q[field yang namanya cocok dengan pola regex %s %(modal_verb)s],
  
      # type: int
  
      q[integer],
      q[bilangan bulat],
  
      q[integers],
      q[bilangan bulat],
  
      q[%(modal_verb)s be divisible by %s],
      q[%(modal_verb)s dapat dibagi oleh %s],
  
      q[%(modal_verb)s be odd],
      q[%(modal_verb)s ganjil],
  
      q[%(modal_verb)s be even],
      q[%(modal_verb)s genap],
  
      q[%(modal_verb)s leave a remainder of %2$s when divided by %1$s],
      q[jika dibagi %1$s %(modal_verb)s menyisakan %2$s],
  
      # type: num
  
      q[number],
      q[bilangan],
  
      q[numbers],
      q[bilangan],
  
      # type: obj
  
      q[object],
      q[objek],
  
      q[objects],
      q[objek],
  
      # type: re
  
      q[regex pattern],
      q[pola regex],
  
      q[regex patterns],
      q[pola regex],
  
      # type: str
  
      q[text],
      q[teks],
  
      q[texts],
      q[teks],
  
      q[%(modal_verb)s match regex pattern %s],
      q[%(modal_verb)s cocok dengan pola regex %s],
  
      q[%(modal_verb)s be a regex pattern],
      q[%(modal_verb)s pola regex],
  
      q[each subscript of text %(modal_verb)s be],
      q[setiap subskrip dari teks %(modal_verb)s],
  
      q[each character of the text %(modal_verb)s be],
      q[setiap karakter dari teks %(modal_verb)s],
  
      q[character],
      q[karakter],
  
      # type: cistr
  
      # type: buf
  
      q[buffer],
      q[buffer],
  
      q[buffers],
      q[buffer],
  
      # messages for compiler
  
      q[Does not satisfy the following schema: %s],
      q[Tidak memenuhi skema ini: %s],
  
      q[Not of type %s],
      q[Tidak bertipe %s],
  
      q[Required but not specified],
      q[Wajib tapi belum diisi],
  
      q[Forbidden but specified],
      q[Dilarang tapi diisi],
  
      q[Structure contains unknown field(s) [%%s]],
      q[Struktur mengandung field yang tidak dikenal [%%s]],
  
      q[Cannot coerce data to %s [%s]],
      q[Data tidak dapat dikonversi ke %s [%%s]],
  );
  
  1;
  # ABSTRACT: id_ID locale
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Lang::id_ID - id_ID locale
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Lang::id_ID (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage .+
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_LANG_ID_ID

    $main::fatpacked{"Data/Sah/Lang/zh_CN.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_LANG_ZH_CN';
  package Data::Sah::Lang::zh_CN;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use utf8;
  use warnings;
  
  use Tie::IxHash;
  
  # currently incomplete
  
  our %translations;
  tie %translations, 'Tie::IxHash', (
  
      # punctuations
  
      q[ ], # inter-word boundary
      q[],
  
      q[, ],
      q[，],
  
      q[: ],
      q[：],
  
      q[. ],
      q[。],
  
      q[(],
      q[（],
  
      q[)],
      q[）],
  
      # modal verbs
  
      q[must],
      q[必须],
  
      q[must not],
      q[必须不],
  
      q[should],
      q[应],
  
      q[should not],
      q[应不],
  
      # field/fields/argument/arguments
  
      q[field],
      q[字段],
  
      q[fields],
      q[字段],
  
      q[argument],
      q[参数],
  
      q[arguments],
      q[参数],
  
      # multi
  
      q[%s and %s],
      q[%s和%s],
  
      q[%s or %s],
      q[%s或%s],
  
      q[one of %s],
      q[这些值%s之一],
  
      q[all of %s],
      q[所有这些值%s],
  
      q[%(modal_verb)s satisfy all of the following],
      q[%(modal_verb)s满足所有这些条件],
  
      q[%(modal_verb)s satisfy one of the following],
      q[%(modal_verb)s满足这些条件之一],
  
      q[%(modal_verb)s satisfy none of the following],
      q[%(modal_verb_neg)s满足所有这些条件],
  
      # type: BaseType
  
      # type: Sortable
  
      # type: Comparable
  
      # type: HasElems
  
      # type: num
  
      # type: int
  
      q[integer],
      q[整数],
  
      q[integers],
      q[整数],
  
      q[%(modal_verb)s be divisible by %s],
      q[%(modal_verb)s被%s整除],
  
      q[%(modal_verb)s leave a remainder of %2$s when divided by %1$s],
      q[除以%1$s时余数%(modal_verb)s为%2$s],
  
      # messages for compiler
  );
  
  1;
  # ABSTRACT: zh_CN locale
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Lang::zh_CN - zh_CN locale
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Lang::zh_CN (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage .+
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_LANG_ZH_CN

    $main::fatpacked{"Data/Sah/Normalize.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_NORMALIZE';
  package Data::Sah::Normalize;
  
  use 5.010001;
  use strict;
  use warnings;
  
  our $DATE = '2015-09-06'; # DATE
  our $VERSION = '0.04'; # VERSION
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(
                         normalize_clset
                         normalize_schema
  
                         $type_re
                         $clause_name_re
                         $clause_re
                         $attr_re
                         $funcset_re
                         $compiler_re
                 );
  
  our $type_re        = qr/\A(?:[A-Za-z_]\w*::)*[A-Za-z_]\w*\z/;
  our $clause_name_re = qr/\A[A-Za-z_]\w*\z/;
  our $clause_re      = qr/\A[A-Za-z_]\w*(?:\.[A-Za-z_]\w*)*\z/;
  our $attr_re        = $clause_re;
  our $funcset_re     = qr/\A(?:[A-Za-z_]\w*::)*[A-Za-z_]\w*\z/;
  our $compiler_re    = qr/\A[A-Za-z_]\w*\z/;
  our $clause_attr_on_empty_clause_re = qr/\A(?:\.[A-Za-z_]\w*)+\z/;
  
  sub normalize_clset($;$) {
      my ($clset0, $opts) = @_;
      $opts //= {};
  
      my $clset = {};
      for my $c (sort keys %$clset0) {
          my $c0 = $c;
  
          my $v = $clset0->{$c};
  
          # ignore expression
          my $expr;
          if ($c =~ s/=\z//) {
              $expr++;
              # XXX currently can't disregard merge prefix when checking
              # conflict
              die "Conflict between '$c=' and '$c'" if exists $clset0->{$c};
              $clset->{"$c.is_expr"} = 1;
              }
  
          my $sc = "";
          my $cn;
          {
              my $errp = "Invalid clause name syntax '$c0'"; # error prefix
              if (!$expr && $c =~ s/\A!(?=.)//) {
                  die "$errp, syntax should be !CLAUSE"
                      unless $c =~ $clause_name_re;
                  $sc = "!";
              } elsif (!$expr && $c =~ s/(?<=.)\|\z//) {
                  die "$errp, syntax should be CLAUSE|"
                      unless $c =~ $clause_name_re;
                  $sc = "|";
              } elsif (!$expr && $c =~ s/(?<=.)\&\z//) {
                  die "$errp, syntax should be CLAUSE&"
                      unless $c =~ $clause_name_re;
                  $sc = "&";
              } elsif (!$expr && $c =~ /\A([^.]+)(?:\.(.+))?\((\w+)\)\z/) {
                  my ($c2, $a, $lang) = ($1, $2, $3);
                  die "$errp, syntax should be CLAUSE(LANG) or C.ATTR(LANG)"
                      unless $c2 =~ $clause_name_re &&
                          (!defined($a) || $a =~ $attr_re);
                  $sc = "(LANG)";
                  $cn = $c2 . (defined($a) ? ".$a" : "") . ".alt.lang.$lang";
              } elsif ($c !~ $clause_re &&
                           $c !~ $clause_attr_on_empty_clause_re) {
                  die "$errp, please use letter/digit/underscore only";
              }
          }
  
          # XXX can't disregard merge prefix when checking conflict
          if ($sc eq '!') {
              die "Conflict between clause shortcuts '!$c' and '$c'"
                  if exists $clset0->{$c};
              die "Conflict between clause shortcuts '!$c' and '$c|'"
                  if exists $clset0->{"$c|"};
              die "Conflict between clause shortcuts '!$c' and '$c&'"
                  if exists $clset0->{"$c&"};
              $clset->{$c} = $v;
              $clset->{"$c.op"} = "not";
          } elsif ($sc eq '&') {
              die "Conflict between clause shortcuts '$c&' and '$c'"
                  if exists $clset0->{$c};
              die "Conflict between clause shortcuts '$c&' and '$c|'"
                  if exists $clset0->{"$c|"};
              die "Clause 'c&' value must be an array"
                  unless ref($v) eq 'ARRAY';
              $clset->{$c} = $v;
              $clset->{"$c.op"} = "and";
          } elsif ($sc eq '|') {
              die "Conflict between clause shortcuts '$c|' and '$c'"
                  if exists $clset0->{$c};
              die "Clause 'c|' value must be an array"
                  unless ref($v) eq 'ARRAY';
              $clset->{$c} = $v;
              $clset->{"$c.op"} = "or";
          } elsif ($sc eq '(LANG)') {
              die "Conflict between clause '$c' and '$cn'"
                  if exists $clset0->{$cn};
              $clset->{$cn} = $v;
          } else {
              $clset->{$c} = $v;
          }
  
      }
      $clset->{req} = 1 if $opts->{has_req};
  
      # XXX option to recursively normalize clset, any's of, all's of, ...
      #if ($clset->{clset}) {
      #    local $opts->{has_req};
      #    if ($clset->{'clset.op'} && $clset->{'clset.op'} =~ /and|or/) {
      #        # multiple clause sets
      #        $clset->{clset} = map { $self->normalize_clset($_, $opts) }
      #            @{ $clset->{clset} };
      #    } else {
      #        $clset->{clset} = $self->normalize_clset($_, $opts);
      #    }
      #}
  
      $clset;
  }
  
  sub normalize_schema($) {
      my $s = shift;
  
      my $ref = ref($s);
      if (!defined($s)) {
  
          die "Schema is missing";
  
      } elsif (!$ref) {
  
          my $has_req = $s =~ s/\*\z//;
          $s =~ $type_re or die "Invalid type syntax $s, please use ".
              "letter/digit/underscore only";
          return [$s, $has_req ? {req=>1} : {}, {}];
  
      } elsif ($ref eq 'ARRAY') {
  
          my $t = $s->[0];
          my $has_req = $t && $t =~ s/\*\z//;
          if (!defined($t)) {
              die "For array form, at least 1 element is needed for type";
          } elsif (ref $t) {
              die "For array form, first element must be a string";
          }
          $t =~ $type_re or die "Invalid type syntax $s, please use ".
              "letter/digit/underscore only";
  
          my $clset0;
          my $extras;
          if (defined($s->[1])) {
              if (ref($s->[1]) eq 'HASH') {
                  $clset0 = $s->[1];
                  $extras = $s->[2];
                  die "For array form, there should not be more than 3 elements"
                      if @$s > 3;
              } else {
                  # flattened clause set [t, c=>1, c2=>2, ...]
                  die "For array in the form of [t, c1=>1, ...], there must be ".
                      "3 elements (or 5, 7, ...)"
                          unless @$s % 2;
                  $clset0 = { @{$s}[1..@$s-1] };
              }
          } else {
              $clset0 = {};
          }
  
          # check clauses and parse shortcuts (!c, c&, c|, c=)
          my $clset = normalize_clset($clset0, {has_req=>$has_req});
          if (defined $extras) {
              die "For array form with 3 elements, extras must be hash"
                  unless ref($extras) eq 'HASH';
              die "'def' in extras must be a hash"
                  if exists $extras->{def} && ref($extras->{def}) ne 'HASH';
              return [$t, $clset, { %{$extras} }];
          } else {
              return [$t, $clset, {}];
          }
      }
  
      die "Schema must be a string or arrayref (not $ref)";
  }
  
  1;
  # ABSTRACT: Normalize Sah schema
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Normalize - Normalize Sah schema
  
  =head1 VERSION
  
  This document describes version 0.04 of Data::Sah::Normalize (from Perl distribution Data-Sah-Normalize), released on 2015-09-06.
  
  =head1 SYNOPSIS
  
   use Data::Sah::Normalize qw(normalize_clset normalize_schema);
  
   my $nclset = normalize_clset({'!a'=>1}); # -> {a=>1, 'a.op'=>'not'}
   my $nsch   = normalize_schema("int");    # -> ["int", {}, {}]
  
  =head1 DESCRIPTION
  
  This often-needed functionality is split from the main L<Data::Sah> to keep it
  in a small and minimal-dependencies package.
  
  =head1 FUNCTIONS
  
  =head2 normalize_clset($clset) => HASH
  
  Normalize a clause set (hash). Return a shallow copy of the original hash. Die
  on failure.
  
  TODO: option to recursively normalize clause which contains sah clauses (e.g.
  C<of>).
  
  =head2 normalize_schema($sch) => ARRAY
  
  Normalize a Sah schema (scalar or array). Return an array. Produce a 2-level
  copy of schema, so it's safe to add/delete/modify the normalized schema's clause
  set and extras (but clause set's and extras' values are still references to the
  original). Die on failure.
  
  TODO: recursively normalize clause which contains sah clauses (e.g. C<of>).
  
  =head1 SEE ALSO
  
  L<Sah>, L<Data::Sah>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Normalize>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Data-Sah-Normalize>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Normalize>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_NORMALIZE

    $main::fatpacked{"Data/Sah/Resolve.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_RESOLVE';
  package Data::Sah::Resolve;
  
  our $DATE = '2017-04-19'; # DATE
  our $VERSION = '0.007'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(resolve_schema);
  
  sub _resolve {
      my ($opts, $type, $clsets, $seen) = @_;
  
      die "Recursive schema definition: ".join(" -> ", @$seen, $type)
          if grep { $type eq $_ } @$seen;
      push @$seen, $type;
  
      (my $typemod_pm = "Data/Sah/Type/$type.pm") =~ s!::!/!g;
      eval { require $typemod_pm; 1 };
      my $err = $@;
      # already a builtin-type, so just return the schema's type name & clause set
      return [$type, $clsets] unless $err;
      die "Can't check whether $type is a builtin Sah type: $err"
          unless $err =~ /\ACan't locate/;
  
      # not a type, try a schema under Sah::Schema
      my $schmod = "Sah::Schema::$type";
      (my $schmod_pm = "$schmod.pm") =~ s!::!/!g;
      eval { require $schmod_pm; 1 };
      die "Not a known built-in Sah type '$type' (can't locate ".
          "Data::Sah::Type::$type) and not a known schema name '$type' ($@)"
              if $@;
      no strict 'refs';
      my $sch2 = ${"$schmod\::schema"};
      die "BUG: Schema module $schmod doesn't contain \$schema" unless $sch2;
      unshift @$clsets, $sch2->[1];
      _resolve($opts, $sch2->[0], $clsets, $seen);
  }
  
  sub resolve_schema {
      my $opts = ref($_[0]) eq 'HASH' ? shift : {};
      my $sch = shift;
  
      unless ($opts->{schema_is_normalized}) {
          require Data::Sah::Normalize;
          $sch =  Data::Sah::Normalize::normalize_schema($sch);
      }
      $opts->{merge_clause_sets} //= 1;
  
      my $seen = [];
      my $res = _resolve($opts, $sch->[0], keys(%{$sch->[1]}) ? [$sch->[1]] : [], $seen);
  
    MERGE:
      {
          last unless $opts->{merge_clause_sets};
          last if @{ $res->[1] } < 2;
  
          my @clsets = (shift @{ $res->[1] });
          for my $clset (@{ $res->[1] }) {
              my $has_merge_mode_keys;
              for (keys %$clset) {
                  if (/\Amerge\./) {
                      $has_merge_mode_keys = 1;
                      last;
                  }
              }
              if ($has_merge_mode_keys) {
                  state $merger = do {
                      require Data::ModeMerge;
                      my $mm = Data::ModeMerge->new(config => {
                          recurse_array => 1,
                      });
                      $mm->modes->{NORMAL}  ->prefix   ('merge.normal.');
                      $mm->modes->{NORMAL}  ->prefix_re(qr/\Amerge\.normal\./);
                      $mm->modes->{ADD}     ->prefix   ('merge.add.');
                      $mm->modes->{ADD}     ->prefix_re(qr/\Amerge\.add\./);
                      $mm->modes->{CONCAT}  ->prefix   ('merge.concat.');
                      $mm->modes->{CONCAT}  ->prefix_re(qr/\Amerge\.concat\./);
                      $mm->modes->{SUBTRACT}->prefix   ('merge.subtract.');
                      $mm->modes->{SUBTRACT}->prefix_re(qr/\Amerge\.subtract\./);
                      $mm->modes->{DELETE}  ->prefix   ('merge.delete.');
                      $mm->modes->{DELETE}  ->prefix_re(qr/\Amerge\.delete\./);
                      $mm->modes->{KEEP}    ->prefix   ('merge.keep.');
                      $mm->modes->{KEEP}    ->prefix_re(qr/\Amerge\.keep\./);
                      $mm;
                  };
                  my $merge_res = $merger->merge($clsets[-1], $clset);
                  unless ($merge_res->{success}) {
                      die "Can't merge clause set: $merge_res->{error}";
                  }
                  $clsets[-1] = $merge_res->{result};
              } else {
                  push @clsets, $clset;
              }
          }
  
          $res->[1] = \@clsets;
      }
  
      $res->[2] = $seen if $opts->{return_intermediates};
  
      $res;
  }
  
  1;
  # ABSTRACT: Resolve Sah schema
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Resolve - Resolve Sah schema
  
  =head1 VERSION
  
  This document describes version 0.007 of Data::Sah::Resolve (from Perl distribution Data-Sah-Resolve), released on 2017-04-19.
  
  =head1 SYNOPSIS
  
   use Data::Sah::Resolve qw(resolve_schema);
  
   my $sch = resolve_schema("int");
   # => ["int", []]
  
   my $sch = resolve_schema("posint*");
   # => ["int", [{min=>1}, {req=>1}]
  
   my $sch = resolve_schema([posint => div_by => 3]);
   # => ["int", {min=>1}, {div_by=>3}]
  
   my $sch = resolve_schema(["posint", "merge.delete.min"=>undef, div_by => 3]);
   # => ["int", {div_by=>3}]
  
  =head1 DESCRIPTION
  
  =head1 FUNCTIONS
  
  =head2 resolve_schema([ \%opts, ] $sch) => sch
  
  Sah schemas can be defined in terms of other schemas. The resolving process
  follows the base schema recursively until it finds a builtin type as the base.
  
  This routine performs the following steps:
  
  =over
  
  =item 1. Normalize the schema
  
  Unless C<schema_is_normalized> option is true, in which case schema is assumed
  to be normalized already.
  
  =item 2. Check if the schema's type is a builtin type
  
  Currently this is done by checking if the module of the name C<<
  Data::Sah::Type::<type> >> is loadable. If it is a builtin type then we are
  done.
  
  =item 3. Check if the schema's type is the name of another schema
  
  This is done by checking if C<< Sah::Schema::<name> >> module exists and is
  loadable. If this is the case then we retrieve the base schema from the
  C<$schema> variable in the C<< Sah::Schema::<name> >> package and repeat the
  process while accumulating and/or merging the clause sets.
  
  =item 4. If schema's type is neither, we die.
  
  =back
  
  Returns C<< [base_type, clause_sets] >>. If C<return_intermediates> option is
  true, then the third elements will be the list of intermediate schema names.
  
  Example 1: C<int>.
  
  First we normalize to C<< ["int",{},{}] >>. The type is C<int> and it is a
  builtin type (L<Data::Sah::Type::int> exists) so the final result is C<< ["int",
  []] >>.
  
  Example 2: C<posint*>.
  
  First we normalize to C<< ["posint",{req=>1},{}] >>. The type is C<posint> and
  it is the name of another schema (L<Sah::Schema::posint>). We retrieve the
  schema which is C<< ["int", {summary=>"Positive integer (1,2,3,...)", min=>1},
  {}] >>. We now try to resolve C<int> and find that it's a builtin type. So the
  final result is: C<< ["int", [ {req=>1}, {summary=>"Positive integer
  (1,2,3,...)", min=>1} ]] >>.
  
  Known options:
  
  =over
  
  =item * schema_is_normalized => bool (default: 0)
  
  When set to true, function will skip normalizing schema and assume input schema
  is normalized.
  
  =item * merge_clause_sets => bool (default: 1)
  
  =item * return_intermediates => bool
  
  =back
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Resolve>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Resolve>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Resolve>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Sah>, L<Data::Sah>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_RESOLVE

    $main::fatpacked{"Data/Sah/Type/BaseType.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_BASETYPE';
  package Data::Sah::Type::BaseType;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  # why name it BaseType instead of Base? because I'm sick of having 5 files named
  # Base.pm in my editor (there would be Type::Base and the various
  # Compiler::*::Type::Base).
  
  use 5.010;
  use strict;
  use warnings;
  
  use Data::Sah::Util::Role 'has_clause';
  use Role::Tiny;
  #use Sah::Schema::Common;
  #use Sah::Schema::Sah;
  
  requires 'handle_type';
  
  has_clause 'v',
      v => 2,
      prio   => 0,
      tags   => ['meta', 'defhash'],
      schema => ['float'=>{req=>1, is=>1}, {}],
      ;
  
  has_clause 'defhash_v',
      v => 2,
      prio   => 0,
      tags   => ['meta', 'defhash'],
      schema => ['float'=>{req=>1, is=>1}, {}],
      ;
  
  has_clause 'schema_v',
      v => 2,
      prio   => 0,
      tags   => ['meta'],
      schema => ['float'=>{req=>1}, {}],
      ;
  
  has_clause 'base_v',
      v => 2,
      prio   => 0,
      tags   => ['meta'],
      schema => ['float'=>{req=>1}, {}],
      ;
  
  has_clause 'ok',
      v => 2,
      tags       => ['constraint'],
      prio       => 1,
      schema     => ['any', {}, {}],
      allow_expr => 1,
      ;
  has_clause 'default',
      v => 2,
      prio       => 1,
      tags       => ['default'],
      schema     => ['any', {}, {}],
      allow_expr => 1,
      attrs      => {
          temp => {
              schema     => [bool => {default=>0}, {}],
              allow_expr => 0,
          },
      },
      ;
  # has_clause 'prefilters',
  #     v => 2,
  #     tags       => ['filter'],
  #     prio       => 10,
  #     schema     => ['array' => {of=>['sah::expr', {req=>1}, {}]}, {}],
  #     attrs      => {
  #         temp => {
  #         },
  #     }
  #     ;
  has_clause 'default_lang',
      v => 2,
      tags       => ['meta', 'defhash'],
      prio       => 2,
      schema     => ['str'=>{req=>1, default=>'en_US'}, {}],
      ;
  has_clause 'name',
      v => 2,
      tags       => ['meta', 'defhash'],
      prio       => 2,
      schema     => ['str', {req=>1}, {}],
      ;
  has_clause 'summary',
      v => 2,
      prio       => 2,
      tags       => ['meta', 'defhash'],
      schema     => ['str', {req=>1}, {}],
      ;
  has_clause 'description',
      v => 2,
      tags       => ['meta', 'defhash'],
      prio       => 2,
      schema     => ['str', {req=>1}, {}],
      ;
  has_clause 'tags',
      v => 2,
      tags       => ['meta', 'defhash'],
      prio       => 2,
      schema     => ['array', {of=>['str', {req=>1}, {}]}, {}],
      ;
  has_clause 'req',
      v => 2,
      tags       => ['constraint'],
      prio       => 3,
      schema     => ['bool', {}, {}],
      allow_expr => 1,
      ;
  has_clause 'forbidden',
      v => 2,
      tags       => ['constraint'],
      prio       => 3,
      schema     => ['bool', {}, {}],
      allow_expr => 1,
      ;
  #has_clause 'if', tags=>['constraint'];
  
  #has_clause 'each', tags=>['constraint'];
  
  #has_clause 'check_each', tags=>['constraint'];
  
  #has_clause 'exists', tags=>['constraint'];
  
  #has_clause 'check_exists', tags=>['constraint'];
  
  #has_clause 'check', schema=>['sah::expr',{req=>1},{}], tags=>['constraint'];
  
  has_clause 'clause',
      v => 2,
      tags       => ['constraint'],
      prio       => 50,
      schema     => ['array' => {req=>1, len=>2, elems => [
          ['sah::clname', {req=>1}, {}],
          ['any', {}, {}],
      ]}, {}],
      ;
  has_clause 'clset',
      v => 2,
      prio   => 50,
      tags   => ['constraint'],
      schema => ['sah::clset', {req=>1}, {}],
      ;
  # has_clause 'postfilters',
  #     v => 2,
  #     tags       => ['filter'],
  #     prio       => 90,
  #     schema     => ['array' => {req=>1, of=>['sah::expr', {req=>1}, {}]}, {}],
  #     attrs      => {
  #         temp => {
  #         },
  #     }
  #     ;
  
  1;
  # ABSTRACT: Base type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::BaseType - Base type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::BaseType (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_BASETYPE

    $main::fatpacked{"Data/Sah/Type/Comparable.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_COMPARABLE';
  package Data::Sah::Type::Comparable;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Data::Sah::Util::Role 'has_clause';
  use Role::Tiny;
  
  requires 'superclause_comparable';
  
  has_clause 'in',
      v => 2,
      tags       => ['constraint'],
      schema     => ['array', {req=>1, of=>['_same', {req=>1}, {}]}, {}],
      allow_expr => 1,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_comparable('in', $cd);
      };
  has_clause 'is',
      v => 2,
      tags       => ['constraint'],
      schema     => ['_same', {req=>1}, {}],
      allow_expr => 1,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_comparable('is', $cd);
      };
  
  1;
  # ABSTRACT: Comparable type role
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::Comparable - Comparable type role
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::Comparable (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 DESCRIPTION
  
  Role consumer must provide method C<superclause_comparable> which will be given
  normal C<%args> given to clause methods, but with extra key C<-which> (either
  C<in>, C<is>).
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_COMPARABLE

    $main::fatpacked{"Data/Sah/Type/HasElems.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_HASELEMS';
  package Data::Sah::Type::HasElems;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Data::Sah::Util::Role 'has_clause';
  use Role::Tiny;
  
  requires 'superclause_has_elems';
  
  has_clause 'max_len',
      v => 2,
      prio       => 51,
      tags       => ['constraint'],
      schema     => ['int', {min=>0}, {}],
      allow_expr => 1,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_has_elems('max_len', $cd);
      };
  
  has_clause 'min_len',
      v => 2,
      tags       => ['constraint'],
      schema     => ['int', {min=>0}, {}],
      allow_expr => 1,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_has_elems('min_len', $cd);
      };
  
  has_clause 'len_between',
      v => 2,
      tags       => ['constraint'],
      schema     => ['array' => {req=>1, len=>2, elems => [
          [int => {req=>1}, {}],
          [int => {req=>1}, {}],
      ]}, {}],
      allow_expr => 1,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_has_elems('len_between', $cd);
      };
  
  has_clause 'len',
      v => 2,
      tags       => ['constraint'],
      schema     => ['int', {min=>0}, {}],
      allow_expr => 1,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_has_elems('len', $cd);
      };
  
  has_clause 'has',
      v => 2,
      tags       => ['constraint'],
      schema       => ['_same_elem', {req=>1}, {}],
      inspect_elem => 1,
      prio         => 55, # we should wait for clauses like e.g. 'each_elem' to coerce elements
      allow_expr   => 1,
      code         => sub {
          my ($self, $cd) = @_;
          $self->superclause_has_elems('has', $cd);
      };
  
  has_clause 'each_index',
      v => 2,
      tags       => ['constraint'],
      schema     => ['sah::schema', {req=>1}, {}],
      subschema  => sub { $_[0] },
      allow_expr => 0,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_has_elems('each_index', $cd);
      };
  
  has_clause 'each_elem',
      v => 2,
      tags       => ['constraint'],
      schema     => ['sah::schema', {req=>1}, {}],
      inspect_elem => 1,
      subschema  => sub { $_[0] },
      allow_expr => 0,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_has_elems('each_elem', $cd);
      };
  
  has_clause 'check_each_index',
      v => 2,
      tags       => ['constraint'],
      schema     => ['sah::schema', {req=>1}, {}],
      subschema  => sub { $_[0] },
      allow_expr => 0,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_has_elems('check_each_index', $cd);
      };
  
  has_clause 'check_each_elem',
      v => 2,
      tags       => ['constraint'],
      schema     => ['sah::schema', {req=>1}, {}],
      inspect_elem => 1,
      subschema  => sub { $_[0] },
      allow_expr => 0,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_has_elems('check_each_elem', $cd);
      };
  
  has_clause 'uniq',
      v => 2,
      tags       => ['constraint'],
      schema     => ['bool', {}, {}],
      inspect_elem => 1,
      prio         => 55, # we should wait for clauses like e.g. 'each_elem' to coerce elements
      subschema  => sub { $_[0] },
      allow_expr => 1,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_has_elems('uniq', $cd);
      };
  
  has_clause 'exists',
      v => 2,
      tags       => ['constraint'],
      schema     => ['sah::schema', {req=>1}, {}],
      inspect_elem => 1,
      subschema  => sub { $_[0] },
      allow_expr => 0,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_has_elems('exists', $cd);
      };
  
  # has_prop 'len';
  
  # has_prop 'elems';
  
  # has_prop 'indices';
  
  1;
  # ABSTRACT: HasElems role
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::HasElems - HasElems role
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::HasElems (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_HASELEMS

    $main::fatpacked{"Data/Sah/Type/Sortable.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_SORTABLE';
  package Data::Sah::Type::Sortable;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Data::Sah::Util::Role 'has_clause';
  use Role::Tiny;
  
  requires 'superclause_sortable';
  
  has_clause 'min',
      v => 2,
      tags       => ['constraint'],
      schema     => ['_same', {req=>1}, {}],
      allow_expr => 1,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_sortable('min', $cd);
      },
      ;
  has_clause 'xmin',
      v => 2,
      tags       => ['constraint'],
      schema     => ['_same', {req=>1}, {}],
      allow_expr => 1,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_sortable('xmin', $cd);
      },
      ;
  has_clause 'max',
      v => 2,
      prio       => 51,
      tags       => ['constraint'],
      schema     => ['_same', {req=>1}, {}],
      allow_expr => 1,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_sortable('max', $cd);
      },
      ;
  has_clause 'xmax',
      v => 2,
      prio       => 51,
      tags       => ['constraint'],
      schema     => ['_same', {req=>1}, {}],
      allow_expr => 1,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_sortable('xmax', $cd);
      },
      ;
  has_clause 'between',
      v => 2,
      tags       => ['constraint'],
      schema     => ['array', {req=>1, len=>2, elems=>[
          ['_same', {req=>1}, {}],
          ['_same', {req=>1}, {}],
      ]}, {}],
      allow_expr => 1,
      code       => sub {
          my ($self, $cd) = @_;
          $self->superclause_sortable('between', $cd);
      },
      ;
  has_clause 'xbetween',
      v => 2,
      tags       => ['constraint'],
      schema     => ['array', {req=>1, len=>2, elems=>[
          ['_same', {req=>1}, {}],
          ['_same', {req=>1}, {}],
      ]}, {}],
      allow_expr => 1,
      code => sub {
          my ($self, $cd) = @_;
          $self->superclause_sortable('xbetween', $cd);
      },
      ;
  
  1;
  # ABSTRACT: Role for sortable types
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::Sortable - Role for sortable types
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::Sortable (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 DESCRIPTION
  
  Role consumer must provide method C<superclause_sortable> which will receive the
  same C<%args> as clause methods, but with additional key: C<-which> (either
  C<min>, C<max>, C<xmin>, C<xmax>, C<between>, C<xbetween>).
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_SORTABLE

    $main::fatpacked{"Data/Sah/Type/all.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_ALL';
  package Data::Sah::Type::all;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Data::Sah::Util::Role 'has_clause';
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::BaseType';
  
  has_clause 'of',
      v => 2,
      tags       => ['constraint'],
      schema     => ['array' => {req=>1, min_len=>1, each_elem => ['sah::schema', {req=>1}, {}]}, {}],
      subschema  => sub { @{ $_[0] } },
      allow_expr => 0,
      ;
  
  1;
  # ABSTRACT: all type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::all - all type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::all (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_ALL

    $main::fatpacked{"Data/Sah/Type/any.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_ANY';
  package Data::Sah::Type::any;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Data::Sah::Util::Role 'has_clause';
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::BaseType';
  
  has_clause 'of',
      v => 2,
      tags       => ['constraint'],
      schema     => ['array' => {req=>1, min_len=>1, each_elem => ['sah::schema', {req=>1}, {}]}, {}],
      subschema  => sub { @{ $_[0] } },
      allow_expr => 0,
      ;
  
  1;
  # ABSTRACT: any type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::any - any type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::any (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_ANY

    $main::fatpacked{"Data/Sah/Type/array.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_ARRAY';
  package Data::Sah::Type::array;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Data::Sah::Util::Role 'has_clause', 'has_clause_alias';
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::BaseType';
  with 'Data::Sah::Type::Comparable';
  with 'Data::Sah::Type::HasElems';
  
  has_clause 'elems',
      v => 2,
      tags       => ['constraint'],
      schema     => ['array' => {req=>1, of=>['sah::schema', {req=>1}, {}]}, {}],
      inspect_elem => 1,
      allow_expr => 0,
      subschema  => sub { @{ $_[0] } },
      attrs      => {
          create_default => {
              schema     => [bool => {default=>1}, {}],
              allow_expr => 0, # TODO
          },
      },
      ;
  has_clause_alias each_elem => 'of';
  
  1;
  # ABSTRACT: array type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::array - array type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::array (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_ARRAY

    $main::fatpacked{"Data/Sah/Type/bool.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_BOOL';
  package Data::Sah::Type::bool;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Data::Sah::Util::Role 'has_clause';
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::BaseType';
  with 'Data::Sah::Type::Comparable';
  with 'Data::Sah::Type::Sortable';
  
  has_clause 'is_true',
      v => 2,
      tags       => ['constraint'],
      schema     => ['bool', {}, {}],
      allow_expr => 1,
      ;
  
  1;
  # ABSTRACT: bool type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::bool - bool type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::bool (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_BOOL

    $main::fatpacked{"Data/Sah/Type/buf.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_BUF';
  package Data::Sah::Type::buf;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::str';
  
  1;
  # ABSTRACT: buf type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::buf - buf type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::buf (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_BUF

    $main::fatpacked{"Data/Sah/Type/cistr.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_CISTR';
  package Data::Sah::Type::cistr;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::str';
  
  1;
  # ABSTRACT: cistr type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::cistr - cistr type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::cistr (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_CISTR

    $main::fatpacked{"Data/Sah/Type/code.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_CODE';
  package Data::Sah::Type::code;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::BaseType';
  
  1;
  # ABSTRACT: code type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::code - code type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::code (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_CODE

    $main::fatpacked{"Data/Sah/Type/date.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_DATE';
  package Data::Sah::Type::date;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Data::Sah::Util::Role 'has_clause';
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::BaseType';
  with 'Data::Sah::Type::Comparable';
  with 'Data::Sah::Type::Sortable';
  
  # XXX prop: year
  # XXX prop: quarter (1-4)
  # XXX prop: month
  # XXX prop: day
  # XXX prop: day_of_month
  # XXX prop: hour
  # XXX prop: minute
  # XXX prop: second
  # XXX prop: millisecond
  # XXX prop: microsecond
  # XXX prop: nanosecond
  # XXX prop: day_of_week
  # XXX prop: day_of_quarter
  # XXX prop: day_of_year
  # XXX prop: week_of_month
  # XXX prop: week_of_year
  # XXX prop: date?
  # XXX prop: time?
  # XXX prop: time_zone_long_name
  # XXX prop: time_zone_offset
  # XXX prop: is_leap_year
  
  1;
  # ABSTRACT: date type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::date - date type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::date (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_DATE

    $main::fatpacked{"Data/Sah/Type/duration.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_DURATION';
  package Data::Sah::Type::duration;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Data::Sah::Util::Role 'has_clause';
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::BaseType';
  with 'Data::Sah::Type::Comparable';
  with 'Data::Sah::Type::Sortable';
  
  # XXX prop: ...
  
  1;
  # ABSTRACT: date/time duration type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::duration - date/time duration type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::duration (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_DURATION

    $main::fatpacked{"Data/Sah/Type/float.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_FLOAT';
  package Data::Sah::Type::float;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Data::Sah::Util::Role 'has_clause';
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::num';
  
  has_clause 'is_nan',
      v => 2,
      tags        => ['constraint'],
      schema      => ['bool', {}, {}],
      allow_expr  => 1,
      allow_multi => 0,
      ;
  
  has_clause 'is_inf',
      v => 2,
      tags        => ['constraint'],
      schema      => ['bool', {}, {}],
      allow_expr  => 1,
      allow_multi => 1,
      ;
  
  has_clause 'is_pos_inf',
      v => 2,
      tags        => ['constraint'],
      schema      => ['bool', {}, {}],
      allow_expr  => 1,
      allow_multi => 1,
      ;
  
  has_clause 'is_neg_inf',
      v => 2,
      tags        => ['constraint'],
      schema      => ['bool', {}, {}],
      allow_expr  => 1,
      allow_multi => 1,
      ;
  
  1;
  # ABSTRACT: float type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::float - float type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::float (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_FLOAT

    $main::fatpacked{"Data/Sah/Type/hash.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_HASH';
  package Data::Sah::Type::hash;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Data::Sah::Util::Role 'has_clause', 'has_clause_alias';
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::BaseType';
  with 'Data::Sah::Type::Comparable';
  with 'Data::Sah::Type::HasElems';
  
  has_clause_alias each_elem => 'of';
  
  has_clause_alias each_index => 'each_key';
  has_clause_alias each_elem => 'each_value';
  has_clause_alias check_each_index => 'check_each_key';
  has_clause_alias check_each_elem => 'check_each_value';
  
  has_clause "keys",
      v => 2,
      tags       => ['constraint'],
      schema     => ['hash' => {req=>1, values => ['sah::schema', {req=>1}, {}]}, {}],
      inspect_elem => 1,
      subschema  => sub { values %{ $_[0] } },
      allow_expr => 0,
      attrs      => {
          restrict => {
              schema     => [bool => default=>1],
              allow_expr => 0, # TODO
          },
          create_default => {
              schema     => [bool => default=>1],
              allow_expr => 0, # TODO
          },
      },
      ;
  
  has_clause "re_keys",
      v => 2,
      prio       => 51,
      tags       => ['constraint'],
      schema     => ['hash' => {
          req=>1,
          keys   => ['re', {req=>1}, {}],
          values => ['sah::schema', {req=>1}, {}],
      }, {}],
      inspect_elem => 1,
      subschema  => sub { values %{ $_[0] } },
      allow_expr => 0,
      attrs      => {
          restrict => {
              schema     => [bool => default=>1],
              allow_expr => 0, # TODO
          },
      },
      ;
  
  has_clause "req_keys",
      v => 2,
      tags       => ['constraint'],
      schema     => ['array', {req=>1, of=>['str', {req=>1}, {}]}, {}],
      allow_expr => 1,
      ;
  has_clause_alias req_keys => 'req_all_keys';
  has_clause_alias req_keys => 'req_all';
  
  has_clause "allowed_keys",
      v => 2,
      tags       => ['constraint'],
      schema     => ['array', {req=>1, of=>['str', {req=>1}, {}]}, {}],
      allow_expr => 1,
      ;
  
  has_clause "allowed_keys_re",
      v => 2,
      prio       => 51,
      tags       => ['constraint'],
      schema     => ['re', {req=>1}, {}],
      allow_expr => 1,
      ;
  
  has_clause "forbidden_keys",
      v => 2,
      tags       => ['constraint'],
      schema     => ['array', {req=>1, of=>['str', {req=>1}, {}]}, {}],
      allow_expr => 1,
      ;
  
  has_clause "forbidden_keys_re",
      v => 2,
      prio       => 51,
      tags       => ['constraint'],
      schema     => ['re', {req=>1}, {}],
      allow_expr => 1,
      ;
  
  has_clause "choose_one_key",
      v => 2,
      prio       => 50,
      tags       => ['constraint'],
      schema     => ['array', {req=>1, of=>['str', {req=>1}, {}], min_len=>1}, {}],
      allow_expr => 0, # for now
      ;
  has_clause_alias choose_one_key => 'choose_one';
  
  has_clause "choose_all_keys",
      v => 2,
      prio       => 50,
      tags       => ['constraint'],
      schema     => ['array', {req=>1, of=>['str', {req=>1}, {}], min_len=>1}, {}],
      allow_expr => 0, # for now
      ;
  has_clause_alias choose_all_keys => 'choose_all';
  
  has_clause "req_one_key",
      v => 2,
      prio       => 50,
      tags       => ['constraint'],
      schema     => ['array', {req=>1, of=>['str', {req=>1}, {}], min_len=>1}, {}],
      allow_expr => 0, # for now
      ;
  has_clause_alias req_one_key => 'req_one';
  
  has_clause "req_some_keys",
      v => 2,
      prio       => 50,
      tags       => ['constraint'],
      schema     => ['array', {
          req => 1,
          len => 3,
          elems => [
              [int => {req=>1, min=>0}], # min
              [int => {req=>1, min=>0}], # max
              [array => {req=>1, of=>['str', {req=>1}, {}], min_len=>1}, {}], # keys
          ],
      }, {}],
      allow_expr => 0, # for now
      ;
  has_clause_alias req_some_keys => 'req_some';
  
  # for now we only support the first argument as str, not array[str]
  my $sch_dep = ['array', {
      req => 1,
      elems => [
          ['str', {req=>1}, {}],
          ['array', {of=>['str', {req=>1}, {}]}, {}],
      ],
  }, {}];
  
  has_clause "dep_any",
      v => 2,
      prio       => 50,
      tags       => ['constraint'],
      schema     => $sch_dep,
      allow_expr => 0, # for now
      ;
  
  has_clause "dep_all",
      v => 2,
      prio       => 50,
      tags       => ['constraint'],
      schema     => $sch_dep,
      allow_expr => 0, # for now
      ;
  
  has_clause "req_dep_any",
      v => 2,
      prio       => 50,
      tags       => ['constraint'],
      schema     => $sch_dep,
      allow_expr => 0, # for now
      ;
  
  has_clause "req_dep_all",
      v => 2,
      prio       => 50,
      tags       => ['constraint'],
      schema     => $sch_dep,
      allow_expr => 0, # for now
      ;
  
  # prop_alias indices => 'keys'
  
  # prop_alias elems => 'values'
  
  1;
  # ABSTRACT: hash type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::hash - hash type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::hash (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_HASH

    $main::fatpacked{"Data/Sah/Type/int.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_INT';
  package Data::Sah::Type::int;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Data::Sah::Util::Role 'has_clause';
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::num';
  
  has_clause 'mod',
      v => 2,
      tags       => ['constraint'],
      schema     => ['array' => {req=>1, len=>2, elems => [
          ['int' => {req=>1, is=>0, 'is.op'=>'not'}, {}],
          ['int' => {req=>1}, {}],
      ]}, {}],
      allow_expr => 1,
      ;
  has_clause 'div_by',
      v => 2,
      tags       => ['constraint'],
      schema     => ['int' => {req=>1, is=>0, 'is.op'=>'not'}, {}],
      allow_expr => 1,
      ;
  
  1;
  # ABSTRACT: int type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::int - int type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::int (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_INT

    $main::fatpacked{"Data/Sah/Type/num.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_NUM';
  package Data::Sah::Type::num;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::BaseType';
  with 'Data::Sah::Type::Comparable';
  with 'Data::Sah::Type::Sortable';
  
  1;
  # ABSTRACT: num type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::num - num type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::num (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_NUM

    $main::fatpacked{"Data/Sah/Type/obj.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_OBJ';
  package Data::Sah::Type::obj;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Data::Sah::Util::Role 'has_clause';
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::BaseType';
  
  has_clause 'can',
      v => 2,
      tags       => ['constraint'],
      schema     => ['str', {req => 1}, {}], # XXX perl_method_name
      allow_expr => 1,
      ;
  has_clause 'isa',
      v => 2,
      tags       => ['constraint'],
      schema     => ['str', {req => 1}, {}], # XXX perl_class_name
      allow_expr => 1,
      ;
  
  1;
  # ABSTRACT: obj type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::obj - obj type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::obj (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_OBJ

    $main::fatpacked{"Data/Sah/Type/re.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_RE';
  package Data::Sah::Type::re;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Data::Sah::Util::Role 'has_clause';
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::BaseType';
  
  1;
  # ABSTRACT: re type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::re - re type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::re (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_RE

    $main::fatpacked{"Data/Sah/Type/str.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_STR';
  package Data::Sah::Type::str;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Data::Sah::Util::Role 'has_clause';
  use Role::Tiny;
  use Role::Tiny::With;
  
  with 'Data::Sah::Type::BaseType';
  with 'Data::Sah::Type::Comparable';
  with 'Data::Sah::Type::Sortable';
  with 'Data::Sah::Type::HasElems';
  
  # currently we only support regex instead of hash of regexes
  #my $t_re = 'regex*|{*=>regex*}';
  my $t_re = ['regex', {req=>1}, {}];
  
  has_clause 'encoding',
      v => 2,
      tags       => ['constraint'],
      schema     => ['str', {req=>1}, {}],
      allow_expr => 0,
      ;
  has_clause 'match',
      v => 2,
      tags       => ['constraint'],
      schema     => $t_re,
      allow_expr => 1,
      ;
  has_clause 'is_re',
      v => 2,
      tags       => ['constraint'],
      schema     => ['bool', {}, {}],
      allow_expr => 1,
      ;
  
  1;
  # ABSTRACT: str type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::str - str type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::str (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_STR

    $main::fatpacked{"Data/Sah/Type/undef.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_TYPE_UNDEF';
  package Data::Sah::Type::undef;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use Role::Tiny;
  use Data::Sah::Util::Role 'has_clause';
  
  1;
  # ABSTRACT: undef type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Type::undef - undef type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Type::undef (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =for Pod::Coverage ^(clause_.+|clausemeta_.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_TYPE_UNDEF

    $main::fatpacked{"Data/Sah/Util/Func.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_UTIL_FUNC';
  package Data::Sah::Util::Func;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         add_func
                 );
  
  sub add_func {
      my ($funcset, $func, %opts) = @_;
      # not yet implemented
  }
  
  1;
  # ABSTRACT: Sah utility routines for adding function
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Util::Func - Sah utility routines for adding function
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Util::Func (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 DESCRIPTION
  
  This module provides some utility routines to be used by modules that add Sah
  functions.
  
  =head1 FUNCTIONS
  
  =head2 add_func($funcset, $func, %opts)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_UTIL_FUNC

    $main::fatpacked{"Data/Sah/Util/Role.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_UTIL_ROLE';
  package Data::Sah::Util::Role;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict 'subs', 'vars';
  use warnings;
  #use Log::Any '$log';
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         has_clause has_clause_alias
                         has_func   has_func_alias
                 );
  
  sub has_clause {
      my ($name, %args) = @_;
      my $caller = caller;
      my $into   = $args{into} // $caller;
  
      my $v = $args{v} // 1;
      if ($v != 2) {
          die "Declaration of clause '$name' still follows version $v ".
              "(2 expected), please make sure $caller is the latest version";
      }
  
      if ($args{code}) {
          *{"$into\::clause_$name"} = $args{code};
      } else {
          eval "package $into; use Role::Tiny; ".
              "requires 'clause_$name';";
      }
      *{"$into\::clausemeta_$name"} = sub {
          state $meta = {
              names        => [$name],
              tags         => $args{tags},
              prio         => $args{prio} // 50,
              schema       => $args{schema},
              allow_expr   => $args{allow_expr},
              attrs        => $args{attrs} // {},
              inspect_elem => $args{inspect_elem},
              subschema    => $args{subschema},
          };
          $meta;
      };
      has_clause_alias($name, $args{alias}  , $into);
      has_clause_alias($name, $args{aliases}, $into);
  }
  
  sub has_clause_alias {
      my ($name, $aliases, $into) = @_;
      my $caller   = caller;
      $into      //= $caller;
      my @aliases = !$aliases ? () :
          ref($aliases) eq 'ARRAY' ? @$aliases : $aliases;
      my $meta = $into->${\("clausemeta_$name")};
  
      for my $alias (@aliases) {
          push @{ $meta->{names} }, $alias;
          eval
              "package $into;".
              "sub clause_$alias { shift->clause_$name(\@_) } ".
              "sub clausemeta_$alias { shift->clausemeta_$name(\@_) } ";
          $@ and die "Can't make clause alias $alias -> $name: $@";
      }
  }
  
  sub has_func {
      my ($name, %args) = @_;
      my $caller = caller;
      my $into   = $args{into} // $caller;
  
      if ($args{code}) {
          *{"$into\::func_$name"} = $args{code};
      } else {
          eval "package $into; use Role::Tiny; requires 'func_$name';";
      }
      *{"$into\::funcmeta_$name"} = sub {
          state $meta = {
              names => [$name],
              args  => $args{args},
          };
          $meta;
      };
      my @aliases =
          map { (!$args{$_} ? () :
                     ref($args{$_}) eq 'ARRAY' ? @{ $args{$_} } : $args{$_}) }
              qw/alias aliases/;
      has_func_alias($name, $args{alias}  , $into);
      has_func_alias($name, $args{aliases}, $into);
  }
  
  sub has_func_alias {
      my ($name, $aliases, $into) = @_;
      my $caller   = caller;
      $into      //= $caller;
      my @aliases = !$aliases ? () :
          ref($aliases) eq 'ARRAY' ? @$aliases : $aliases;
      my $meta = $into->${\("funcmeta_$name")};
  
      for my $alias (@aliases) {
          push @{ $meta->{names} }, $alias;
          eval
              "package $into;".
              "sub func_$alias { shift->func_$name(\@_) } ".
              "sub funcmeta_$alias { shift->funcmeta_$name(\@_) } ";
          $@ and die "Can't make func alias $alias -> $name: $@";
      }
  }
  
  1;
  # ABSTRACT: Sah utility routines for roles
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Util::Role - Sah utility routines for roles
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Util::Role (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 DESCRIPTION
  
  This module provides some utility routines to be used in roles, e.g.
  C<Data::Sah::Type::*> and C<Data::Sah::FuncSet::*>.
  
  =head1 FUNCTIONS
  
  =head2 has_clause($name, %opts)
  
  Define a clause. Used in type roles (C<Data::Sah::Type::*>). Internally it adds
  a L<Moo> C<requires> for C<clause_$name>.
  
  Options:
  
  =over 4
  
  =item * v => int
  
  Specify clause specification version. Must be 2 (the current version).
  
  =item * schema => sah::schema
  
  Define schema for clause value.
  
  =item * prio => int {min=>0, max=>100, default=>50}
  
  Optional. Default is 50. The higher the priority (the lower the number), the
  earlier the clause will be processed.
  
  =item * aliases => \@aliases OR $alias
  
  Define aliases. Optional.
  
  =item * inspect_elem => bool
  
  If set to true, then this means clause inspect the element(s) of the data. This
  is only relevant for types that has elements (see L<HasElems
  role|Data::Sah::Type::HasElems>). An example of clause like this is C<has> or
  C<each_elem>. When the value of C<inspect_elem> is true, a compiler must prepare
  by coercing the elements of the data, if there are coercion rules applicable.
  
  =item * subschema => coderef
  
  If set, then declare that the clause value contains a subschema. The coderef
  must provide a way to get the subschema from
  
  =item * code => coderef
  
  Optional. Define implementation for the clause. The code will be installed as
  'clause_$name'.
  
  =item * into => str $package
  
  By default it is the caller package, but can be set to other package.
  
  =back
  
  Example:
  
   has_clause minimum => (arg => 'int*', aliases => 'min');
  
  =head2 has_clause_alias TARGET => ALIAS | [ALIAS1, ...]
  
  Specify that clause named ALIAS is an alias for TARGET.
  
  You have to define TARGET clause first (see B<has_clause> above).
  
  Example:
  
   has_clause max_length => ...;
   has_clause_alias max_length => "max_len";
  
  =head2 has_func($name, %opts)
  
  Define a Sah function. Used in function set roles (C<Data::Sah::FuncSet::*>).
  Internally it adds a L<Moo> C<requires> for C<func_$name>.
  
  Options:
  
  =over 4
  
  =item * aliases => \@aliases OR $alias
  
  Optional. Declare aliases.
  
  =item * code => $code
  
  Supply implementation for the function. The code will be installed as
  'func_$name'.
  
  =item * into => $package
  
  By default it is the caller package, but can be set to other package.
  
  =back
  
  Example:
  
   has_func abs => (args => 'num');
  
  =head2 has_func_alias TARGET => ALIAS | [ALIASES...]
  
  Specify that function named ALIAS is an alias for TARGET.
  
  You have to specify TARGET function first (see B<has_func> above).
  
  Example:
  
   has_func_alias 'atan' => 'arctan';
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_UTIL_ROLE

    $main::fatpacked{"Data/Sah/Util/Type.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_UTIL_TYPE';
  package Data::Sah::Util::Type;
  
  our $DATE = '2016-12-09'; # DATE
  our $VERSION = '0.46'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(get_type is_type is_simple is_numeric is_collection is_ref);
  
  # XXX absorb and use metadata from Data::Sah::Type::*
  our $type_metas = {
      all   => {scalar=>0, numeric=>0, ref=>0},
      any   => {scalar=>0, numeric=>0, ref=>0},
      array => {scalar=>0, numeric=>0, ref=>1},
      bool  => {scalar=>1, numeric=>0, ref=>0},
      buf   => {scalar=>1, numeric=>0, ref=>0},
      cistr => {scalar=>1, numeric=>0, ref=>0},
      code  => {scalar=>1, numeric=>0, ref=>1},
      float => {scalar=>1, numeric=>1, ref=>0},
      hash  => {scalar=>0, numeric=>0, ref=>1},
      int   => {scalar=>1, numeric=>1, ref=>0},
      num   => {scalar=>1, numeric=>1, ref=>0},
      obj   => {scalar=>1, numeric=>0, ref=>1},
      re    => {scalar=>1, numeric=>0, ref=>1, simple=>1},
      str   => {scalar=>1, numeric=>0, ref=>0},
      undef => {scalar=>1, numeric=>0, ref=>0},
      date     => {scalar=>1, numeric=>0, ref=>0},
      duration => {scalar=>1, numeric=>0, ref=>0},
  };
  
  sub get_type {
      my $sch = shift;
  
      if (ref($sch) eq 'ARRAY') {
          $sch = $sch->[0];
      }
  
      if (defined($sch) && !ref($sch)) {
          $sch =~ s/\*\z//;
          return $sch;
      } else {
          return undef;
      }
  }
  
  sub _normalize {
      require Data::Sah::Normalize;
  
      my ($sch, $opts) = @_;
      return $sch if $opts->{schema_is_normalized};
      return Data::Sah::Normalize::normalize_schema($sch);
  }
  
  # for any|all to pass a criteria, we assume that all of the schemas in the 'of'
  # clause must also pass (and there must not be '!of', 'of&', or that kind of
  # thing.
  sub _handle_any_all {
      my ($sch, $opts, $crit) = @_;
      $sch = _normalize($sch, $opts);
      return 0 if $sch->[1]{'of.op'};
      my $of = $sch->[1]{of};
      return 0 unless $of && ref($of) eq 'ARRAY' && @$of;
      for (@$of) {
          return 0 unless $crit->($_);
      }
      1;
  }
  
  sub is_type {
      my ($sch, $opts) = @_;
      $opts //= {};
  
      my $type = get_type($sch) or return undef;
      my $tmeta = $type_metas->{$type} or return undef;
      $type;
  }
  
  sub is_simple {
      my ($sch, $opts) = @_;
      $opts //= {};
  
      my $type = get_type($sch) or return undef;
      my $tmeta = $type_metas->{$type} or return undef;
      if ($type eq 'any' || $type eq 'all') {
          return _handle_any_all($sch, $opts, sub { is_simple(shift) });
      }
      return $tmeta->{simple} // ($tmeta->{scalar} && !$tmeta->{ref});
  }
  
  sub is_collection {
      my ($sch, $opts) = @_;
      $opts //= {};
  
      my $type = get_type($sch) or return undef;
      my $tmeta = $type_metas->{$type} or return undef;
      if ($type eq 'any' || $type eq 'all') {
          return _handle_any_all($sch, $opts, sub { is_collection(shift) });
      }
      return !$tmeta->{scalar};
  }
  
  sub is_numeric {
      my ($sch, $opts) = @_;
      $opts //= {};
  
      my $type = get_type($sch) or return undef;
      my $tmeta = $type_metas->{$type} or return undef;
      if ($type eq 'any' || $type eq 'all') {
          return _handle_any_all($sch, $opts, sub { is_numeric(shift) });
      }
      return $tmeta->{numeric};
  }
  
  sub is_ref {
      my ($sch, $opts) = @_;
      $opts //= {};
  
      my $type = get_type($sch) or return undef;
      my $tmeta = $type_metas->{$type} or return undef;
      if ($type eq 'any' || $type eq 'all') {
          return _handle_any_all($sch, $opts, sub { is_ref(shift) });
      }
      return $tmeta->{ref};
  }
  
  1;
  # ABSTRACT: Utility functions related to types
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Util::Type - Utility functions related to types
  
  =head1 VERSION
  
  This document describes version 0.46 of Data::Sah::Util::Type (from Perl distribution Data-Sah-Util-Type), released on 2016-12-09.
  
  =head1 SYNOPSIS
  
   use Data::Sah::Util::Type qw(
       get_type
       is_type
       is_simple is_numeric is_collection is_ref
   );
  
   say get_type("int");                          # -> int
   say get_type("int*");                         # -> int
   say get_type([int => min=>0]);                # -> int
   say get_type("foo");                          # -> foo (doesn't check type is known)
  
   say is_type("int*");                          # -> 1
   say is_type("foo");                           # -> 0
  
   say is_simple("int");                          # -> 1
   say is_simple("array");                        # -> 0
   say is_simple([any => of => ["float", "str"]); # -> 1
   say is_simple("re");                           # -> 1
   say is_simple("foo");                          # -> 0
  
   say is_collection("array*");            # -> 1
   say is_collection(["hash", of=>"int"]); # -> 1
   say is_collection("str");               # -> 0
   say is_collection("foo");               # -> 0
  
   say is_ref("code*"); # -> 1
   say is_ref("array"); # -> 1
   say is_ref("str");   # -> 0
   say is_ref("foo");   # -> 0
  
   say is_numeric(["int", min=>0]); # -> 1
   say is_numeric("str");           # -> 0
   say is_numeric("foo");           # -> 0
  
  =head1 DESCRIPTION
  
  This module provides some secondary utility functions related to L<Sah> and
  L<Data::Sah>. It is deliberately distributed separately from the Data-Sah main
  distribution to be differentiated from Data::Sah::Util which contains "primary"
  utilities and is distributed with Data-Sah.
  
  Reference table for simple/collection/ref/numeric criteria of builtin types:
  
   +----------+-----------+---------------+--------+------------+
   | type     | is_simple | is_collection | is_ref | is_numeric |
   +----------+-----------+---------------+--------+------------+
   | array    |           | 1             | 1      |            |
   | bool     | 1         |               |        |            |
   | buf      | 1         |               |        |            |
   | cistr    | 1         |               |        |            |
   | code     |           |               | 1      |            |
   | date     | 1         |               |        |            |
   | duration | 1         |               |        |            |
   | float    | 1         |               |        | 1          |
   | hash     |           | 1             | 1      |            |
   | int      | 1         |               |        | 1          |
   | num      | 1         |               |        | 1          |
   | obj      |           |               | 1      |            |
   | re       | 1         |               | 1      |            |
   | str      | 1         |               |        |            |
   | undef    | 1         |               |        |            |
   +----------+-----------+---------------+--------+------------+
  
  =head1 FUNCTIONS
  
  None exported by default, but they are exportable.
  
  =head2 get_type($sch) => STR
  
  Return type name.
  
  =head2 is_type($sch) => STR
  
  Return type name if type in schema is known, or undef.
  
  =head2 is_simple($sch[, \%opts]) => BOOL
  
  Simple means "scalar" or can be represented as a scalar. This is currently used
  to determine if a builtin type can be specified as an argument or option value
  in command-line.
  
  This includes C<re>, C<bool>, as well as C<date> and C<duration>.
  
  If type is C<all>, then for this routine to be true all of the mentioned types
  must be simple. If type is C<any>, then for this routine to be true at least one
  of the mentioned types must be simple.
  
  Options:
  
  =over
  
  =item * schema_is_normalized => BOOL
  
  =back
  
  =head2 is_collection($sch[, \%opts]) => BOOL
  
  Collection means C<array> or C<hash>.
  
  If type is C<all>, then for this routine to be true all of the mentioned types
  must be collection. If type is C<any>, then for this routine to be true at least
  one of the mentioned types must be collection.
  
  =head2 is_ref($sch[, \%opts]) => BOOL
  
  "Ref" means generally a reference in Perl. But C<date> and C<duration> are not
  regarded as "ref". Regular expression on the other hand is regarded as a ref.
  
  If type is C<all>, then for this routine to be true all of the mentioned types
  must be "ref". If type is C<any>, then for this routine to be true at least one
  of the mentioned types must be "ref".
  
  =head2 is_numeric($sch[, \%opts]) => BOOL
  
  Currently, only C<num>, C<int>, and C<float> are numeric.
  
  If type is C<all>, then for this routine to be true all of the mentioned types
  must be numeric. If type is C<any>, then for this routine to be true at least
  one of the mentioned types must be numeric.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah-Util-Type>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah-Util-Type>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah-Util-Type>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Data::Sah>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_UTIL_TYPE

    $main::fatpacked{"Data/Sah/Util/Type/Date.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_UTIL_TYPE_DATE';
  package Data::Sah::Util::Type::Date;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Scalar::Util qw(blessed looks_like_number);
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         coerce_date
                         coerce_duration
                 );
  
  our $DATE_MODULE = $ENV{DATA_SAH_DATE_MODULE} // $ENV{PERL_DATE_MODULE} //
      "DateTime"; # XXX change defaults to Time::Piece (core)
  
  my $re_ymd = qr/\A([0-9]{4})-([0-9]{2})-([0-9]{2})\z/;
  my $re_ymdThmsZ = qr/\A([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})Z\z/;
  
  sub coerce_date {
      my $val = shift;
      if (!defined($val)) {
          return undef;
      }
  
      if ($DATE_MODULE eq 'DateTime') {
          require DateTime;
          if (blessed($val) && $val->isa('DateTime')) {
              return $val;
          } elsif (looks_like_number($val) && $val >= 10**8 && $val <= 2**31) {
              return DateTime->from_epoch(epoch => $val);
          } elsif ($val =~ $re_ymd) {
              my $d;
              eval { $d = DateTime->new(year=>$1, month=>$2, day=>$3, time_zone=>'UTC') };
              return undef if $@;
              return $d;
          } elsif ($val =~ $re_ymdThmsZ) {
              my $d;
              eval { $d = DateTime->new(year=>$1, month=>$2, day=>$3, hour=>$4, minute=>$5, second=>$6, time_zone=>'UTC') };
              return undef if $@;
              return $d;
          } elsif (blessed($val) && $val->isa('Time::Moment')) {
              return DateTime->from_epoch(epoch => $val->epoch);
          } elsif (blessed($val) && $val->isa('Time::Piece')) {
              return DateTime->from_epoch(epoch => $val->epoch);
          } else {
              return undef;
          }
      } elsif ($DATE_MODULE eq 'Time::Moment') {
          require Time::Moment;
          if (blessed($val) && $val->isa('Time::Moment')) {
              return $val;
          } elsif (looks_like_number($val) && $val >= 10**8 && $val <= 2**31) {
              return Time::Moment->from_epoch(int($val), $val-int($val));
          } elsif ($val =~ $re_ymd) {
              my $d;
              eval { $d = Time::Moment->new(year=>$1, month=>$2, day=>$3) };
              return undef if $@;
              return $d;
          } elsif ($val =~ $re_ymdThmsZ) {
              my $d;
              eval { $d = Time::Moment->new(year=>$1, month=>$2, day=>$3, hour=>$4, minute=>$5, second=>$6) };
              return undef if $@;
              return $d;
          } elsif (blessed($val) && $val->isa('DateTime')) {
              return Time::Moment->from_epoch($val->epoch);
          } elsif (blessed($val) && $val->isa('Time::Piece')) {
              return Time::Moment->from_epoch($val->epoch);
          } else {
              return undef;
          }
      } elsif ($DATE_MODULE eq 'Time::Piece') {
          require Time::Piece;
          if (blessed($val) && $val->isa('Time::Piece')) {
              return $val;
          } elsif (looks_like_number($val) && $val >= 10**8 && $val <= 2**31) {
              return scalar Time::Piece->gmtime($val);
          } elsif ($val =~ $re_ymd) {
              my $d;
              eval { $d = Time::Piece->strptime($val, "%Y-%m-%d") };
              return undef if $@;
              return $d;
          } elsif ($val =~ $re_ymdThmsZ) {
              my $d;
              eval { $d = Time::Piece->strptime($val, "%Y-%m-%dT%H:%M:%SZ") };
              return undef if $@;
              return $d;
          } elsif (blessed($val) && $val->isa('DateTime')) {
              return scalar Time::Piece->gmtime(epoch => $val->epoch);
          } elsif (blessed($val) && $val->isa('Time::Moment')) {
              return scalar Time::Piece->gmtime(epoch => $val->epoch);
          } else {
              return undef;
          }
      } else {
          die "BUG: Unknown Perl date module '$DATE_MODULE'";
      }
  }
  
  sub coerce_duration {
      my $val = shift;
      if (!defined($val)) {
          return undef;
      } elsif (blessed($val) && $val->isa('DateTime::Duration')) {
          return $val;
      } elsif ($val =~ /\AP
                        (?: ([0-9]+(?:\.[0-9]+)?)Y )?
                        (?: ([0-9]+(?:\.[0-9]+)?)M )?
                        (?: ([0-9]+(?:\.[0-9]+)?)W )?
                        (?: ([0-9]+(?:\.[0-9]+)?)D )?
                        (?:
                            T
                            (?: ([0-9]+(?:\.[0-9]+)?)H )?
                            (?: ([0-9]+(?:\.[0-9]+)?)M )?
                            (?: ([0-9]+(?:\.[0-9]+)?)S )?
                        )?
                        \z/x) {
          require DateTime::Duration;
          my $d;
          eval {
              $d = DateTime::Duration->new(
                  years   => $1 // 0,
                  months  => $2 // 0,
                  weeks   => $3 // 0,
                  days    => $4 // 0,
                  hours   => $5 // 0,
                  minutes => $6 // 0,
                  seconds => $7 // 0,
              );
          };
          return undef if $@;
          return $d;
      } else {
          return undef;
      }
  }
  
  1;
  # ABSTRACT: Utility related to date/duration type
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Util::Type::Date - Utility related to date/duration type
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Util::Type::Date (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 DESCRIPTION
  
  =head1 FUNCTIONS
  
  =head2 coerce_date($val) => DATETIME OBJ|undef
  
  Coerce value to DateTime object according to perl Sah compiler (see
  L<Data::Sah::Compiler::perl::TH::date>). Return undef if value is not
  acceptable.
  
  =head2 coerce_duration($val) => DATETIME_DURATION OBJ|undef
  
  Coerce value to DateTime::Duration object according to perl Sah compiler (see
  L<Data::Sah::Compiler::perl::TH::duration>). Return undef if value is not
  acceptable.
  
  =head1 ENVIRONMENT
  
  =head2 DATA_SAH_DATE_MODULE => string (default: DateTime)
  
  Pick the date module to use. Available choices: DateTime, Time::Moment.
  
  =head2 PERL_DATE_MODULE => string (default: DateTime)
  
  Pick the date module to use. Available choices: DateTime, Time::Moment. Has
  lower priority compared to DATA_SAH_DATE_MODULE.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_UTIL_TYPE_DATE

    $main::fatpacked{"Data/Sah/Util/TypeX.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATA_SAH_UTIL_TYPEX';
  package Data::Sah::Util::TypeX;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         add_clause
                 );
  
  sub add_clause {
      my ($type, $clause, %opts) = @_;
      # not yet implemented
  
      # * check duplicate
  
      # * call Data::Sah::Util::Role::has_clause
      # * install handlers to Data::Sah::Compiler::$Compiler::TH::$type
      # * push @{ $Data::Sah::Compiler::human::TypeX{$type} }, $clause;
  }
  
  1;
  # ABSTRACT: Sah utility routines for type extensions
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Data::Sah::Util::TypeX - Sah utility routines for type extensions
  
  =head1 VERSION
  
  This document describes version 0.87 of Data::Sah::Util::TypeX (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 DESCRIPTION
  
  This module provides some utility routines to be used by type extension modules
  (C<Data::Sah::TypeX::*>).
  
  =head1 FUNCTIONS
  
  =head2 add_clause($type, $clause, %opts)
  
  Add a clause. Used when wanting to add a clause to an existing type.
  
  Options:
  
  =over 4
  
  =item * definition => HASH
  
  Will be passed to L<Data::Sah::Util::Role>'s C<has_clause>.
  
  =item * handlers => HASH
  
  A mapping of compiler name and coderefs. Coderef will be installed as
  C<clause_$clause> in the C<Data::Sah::Compiler::$Compiler::TH::>.
  
  =item * prio => $priority
  
  Optional. Default is 50. The higher the priority, the earlier the clause will be
  processed.
  
  =item * aliases => \@aliases OR $alias
  
  Define aliases. Optional.
  
  =item * code => $code
  
  Optional. Define implementation for the clause. The code will be installed as
  'clause_$name'.
  
  =back
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATA_SAH_UTIL_TYPEX

    $main::fatpacked{"DateTime.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME';
  package DateTime;
  
  use 5.008001;
  
  use strict;
  use warnings;
  use warnings::register;
  use namespace::autoclean 0.19;
  
  our $VERSION = '1.36';
  
  use Carp;
  use DateTime::Duration;
  use DateTime::Helpers;
  use DateTime::Locale 1.05;
  use DateTime::TimeZone 2.00;
  use Params::Validate 1.03
      qw( validate validate_pos UNDEF SCALAR BOOLEAN HASHREF OBJECT );
  use POSIX qw(floor fmod);
  use Try::Tiny;
  
  {
      my $loaded = 0;
  
      unless ( $ENV{PERL_DATETIME_PP} ) {
          try {
              require XSLoader;
              XSLoader::load(
                  __PACKAGE__,
                  exists $DateTime::{VERSION} && ${ $DateTime::{VERSION} }
                  ? ${ $DateTime::{VERSION} }
                  : 42
              );
  
              $loaded               = 1;
              $DateTime::IsPurePerl = 0;
          }
          catch {
              die $_ if $_ && $_ !~ /object version|loadable object/;
          };
      }
  
      if ($loaded) {
          require DateTime::PPExtra
              unless defined &DateTime::_normalize_tai_seconds;
      }
      else {
          require DateTime::PP;
      }
  }
  
  # for some reason, overloading doesn't work unless fallback is listed
  # early.
  #
  # 3rd parameter ( $_[2] ) means the parameters are 'reversed'.
  # see: "Calling conventions for binary operations" in overload docs.
  #
  use overload (
      'fallback' => 1,
      '<=>'      => '_compare_overload',
      'cmp'      => '_string_compare_overload',
      '""'       => '_stringify',
      '-'        => '_subtract_overload',
      '+'        => '_add_overload',
      'eq'       => '_string_equals_overload',
      'ne'       => '_string_not_equals_overload',
  );
  
  # Have to load this after overloading is defined, after BEGIN blocks
  # or else weird crashes ensue
  require DateTime::Infinite;
  
  use constant MAX_NANOSECONDS => 1_000_000_000;    # 1E9 = almost 32 bits
  
  use constant INFINITY     => ( 100**100**100**100 );
  use constant NEG_INFINITY => -1 * ( 100**100**100**100 );
  use constant NAN          => INFINITY - INFINITY;
  
  use constant SECONDS_PER_DAY => 86400;
  
  use constant duration_class => 'DateTime::Duration';
  
  my ( @MonthLengths, @LeapYearMonthLengths );
  
  BEGIN {
      @MonthLengths = ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
  
      @LeapYearMonthLengths = @MonthLengths;
      $LeapYearMonthLengths[1]++;
  }
  
  {
  
      # I'd rather use Class::Data::Inheritable for this, but there's no
      # way to add the module-loading behavior to an accessor it
      # creates, despite what its docs say!
      my $DefaultLocale;
  
      sub DefaultLocale {
          shift;
  
          if (@_) {
              my $lang = shift;
  
              $DefaultLocale = DateTime::Locale->load($lang);
          }
  
          return $DefaultLocale;
      }
  
      # backwards compat
      *DefaultLanguage = \&DefaultLocale;
  }
  __PACKAGE__->DefaultLocale('en-US');
  
  my $BasicValidate = {
      year => {
          type      => SCALAR,
          callbacks => {
              'is an integer' => sub { $_[0] =~ /^-?\d+$/ }
          },
      },
      month => {
          type      => SCALAR,
          default   => 1,
          callbacks => {
              'an integer between 1 and 12' =>
                  sub { $_[0] =~ /^\d+$/ && $_[0] >= 1 && $_[0] <= 12 }
          },
      },
      day => {
          type      => SCALAR,
          default   => 1,
          callbacks => {
              'an integer which is a possible valid day of month' =>
                  sub { $_[0] =~ /^\d+$/ && $_[0] >= 1 && $_[0] <= 31 }
          },
      },
      hour => {
          type      => SCALAR,
          default   => 0,
          callbacks => {
              'an integer between 0 and 23' =>
                  sub { $_[0] =~ /^\d+$/ && $_[0] >= 0 && $_[0] <= 23 },
          },
      },
      minute => {
          type      => SCALAR,
          default   => 0,
          callbacks => {
              'an integer between 0 and 59' =>
                  sub { $_[0] =~ /^\d+$/ && $_[0] >= 0 && $_[0] <= 59 },
          },
      },
      second => {
          type      => SCALAR,
          default   => 0,
          callbacks => {
              'an integer between 0 and 61' =>
                  sub { $_[0] =~ /^\d+$/ && $_[0] >= 0 && $_[0] <= 61 },
          },
      },
      nanosecond => {
          type      => SCALAR,
          default   => 0,
          callbacks => {
              'a positive integer' => sub { $_[0] =~ /^\d+$/ && $_[0] >= 0 },
          }
      },
      locale => {
          type    => SCALAR | OBJECT,
          default => undef
      },
      language => {
          type     => SCALAR | OBJECT,
          optional => 1
      },
      formatter => {
          type      => UNDEF | SCALAR | OBJECT,
          optional  => 1,
          callbacks => {
              'can format_datetime' =>
                  sub { defined $_[0] ? $_[0]->can('format_datetime') : 1 },
          },
      },
  };
  
  my $NewValidate = {
      %$BasicValidate,
      time_zone => {
          type     => SCALAR | OBJECT,
          optional => 1,
      },
  };
  
  sub new {
      my $class = shift;
      my %p = validate( @_, $NewValidate );
  
      Carp::croak(
          "Invalid day of month (day = $p{day} - month = $p{month} - year = $p{year})\n"
          )
          if $p{day} > 28
          && $p{day} > $class->_month_length( $p{year}, $p{month} );
  
      return $class->_new(%p);
  }
  
  sub _new {
      my $class = shift;
      my %p     = @_;
  
      Carp::croak('Constructor called with reference, we expected a package')
          if ref $class;
  
      # If this method is called from somewhere other than new(), then some of
      # these defaults may not get applied.
      $p{month}      = 1                          unless exists $p{month};
      $p{day}        = 1                          unless exists $p{day};
      $p{hour}       = 0                          unless exists $p{hour};
      $p{minute}     = 0                          unless exists $p{minute};
      $p{second}     = 0                          unless exists $p{second};
      $p{nanosecond} = 0                          unless exists $p{nanosecond};
      $p{time_zone}  = $class->_default_time_zone unless exists $p{time_zone};
  
      my $self = bless {}, $class;
  
      $p{locale} = delete $p{language} if exists $p{language};
  
      $self->_set_locale( $p{locale} );
  
      $self->{tz} = (
          ref $p{time_zone}
          ? $p{time_zone}
          : DateTime::TimeZone->new( name => $p{time_zone} )
      );
  
      $self->{local_rd_days} = $class->_ymd2rd( @p{qw( year month day )} );
  
      $self->{local_rd_secs}
          = $class->_time_as_seconds( @p{qw( hour minute second )} );
  
      $self->{offset_modifier} = 0;
  
      $self->{rd_nanosecs} = $p{nanosecond};
      $self->{formatter}   = $p{formatter};
  
      $self->_normalize_nanoseconds(
          $self->{local_rd_secs},
          $self->{rd_nanosecs}
      );
  
      # Set this explicitly since it can't be calculated accurately
      # without knowing our time zone offset, and it's possible that the
      # offset can't be calculated without having at least a rough guess
      # of the datetime's year. This year need not be correct, as long
      # as its equal or greater to the correct number, so we fudge by
      # adding one to the local year given to the constructor.
      $self->{utc_year} = $p{year} + 1;
  
      $self->_maybe_future_dst_warning( $p{year}, $p{time_zone} );
  
      $self->_calc_utc_rd;
  
      $self->_handle_offset_modifier( $p{second} );
  
      $self->_calc_local_rd;
  
      if ( $p{second} > 59 ) {
          if (
              $self->{tz}->is_floating
              ||
  
              # If true, this means that the actual calculated leap
              # second does not occur in the second given to new()
              ( $self->{utc_rd_secs} - 86399 < $p{second} - 59 )
              ) {
              Carp::croak("Invalid second value ($p{second})\n");
          }
      }
  
      return $self;
  }
  
  # Warning: do not use this environment variable unless you have no choice in
  # the matter.
  sub _default_time_zone {
      return $ENV{PERL_DATETIME_DEFAULT_TZ} || 'floating';
  }
  
  sub _set_locale {
      my $self   = shift;
      my $locale = shift;
  
      if ( defined $locale && ref $locale ) {
          $self->{locale} = $locale;
      }
      else {
          $self->{locale}
              = $locale
              ? DateTime::Locale->load($locale)
              : $self->DefaultLocale();
      }
  
      return;
  }
  
  # This method exists for the benefit of internal methods which create
  # a new object based on the current object, like set() and truncate().
  sub _new_from_self {
      my $self = shift;
      my %p    = @_;
  
      my %old = map { $_ => $self->$_() } qw(
          year month day
          hour minute second
          nanosecond
          locale time_zone
      );
      $old{formatter} = $self->formatter()
          if defined $self->formatter();
  
      my $method = delete $p{_skip_validation} ? '_new' : 'new';
  
      return ( ref $self )->$method( %old, %p );
  }
  
  sub _handle_offset_modifier {
      my $self = shift;
  
      $self->{offset_modifier} = 0;
  
      return if $self->{tz}->is_floating;
  
      my $second       = shift;
      my $utc_is_valid = shift;
  
      my $utc_rd_days = $self->{utc_rd_days};
  
      my $offset
          = $utc_is_valid ? $self->offset : $self->_offset_for_local_datetime;
  
      if (   $offset >= 0
          && $self->{local_rd_secs} >= $offset ) {
          if ( $second < 60 && $offset > 0 ) {
              $self->{offset_modifier}
                  = $self->_day_length( $utc_rd_days - 1 ) - SECONDS_PER_DAY;
  
              $self->{local_rd_secs} += $self->{offset_modifier};
          }
          elsif (
              $second == 60
              && (
                  ( $self->{local_rd_secs} == $offset && $offset > 0 )
                  || (   $offset == 0
                      && $self->{local_rd_secs} > 86399 )
              )
              ) {
              my $mod
                  = $self->_day_length( $utc_rd_days - 1 ) - SECONDS_PER_DAY;
  
              unless ( $mod == 0 ) {
                  $self->{utc_rd_secs} -= $mod;
  
                  $self->_normalize_seconds;
              }
          }
      }
      elsif ($offset < 0
          && $self->{local_rd_secs} >= SECONDS_PER_DAY + $offset ) {
          if ( $second < 60 ) {
              $self->{offset_modifier}
                  = $self->_day_length( $utc_rd_days - 1 ) - SECONDS_PER_DAY;
  
              $self->{local_rd_secs} += $self->{offset_modifier};
          }
          elsif ($second == 60
              && $self->{local_rd_secs} == SECONDS_PER_DAY + $offset ) {
              my $mod
                  = $self->_day_length( $utc_rd_days - 1 ) - SECONDS_PER_DAY;
  
              unless ( $mod == 0 ) {
                  $self->{utc_rd_secs} -= $mod;
  
                  $self->_normalize_seconds;
              }
          }
      }
  }
  
  sub _calc_utc_rd {
      my $self = shift;
  
      delete $self->{utc_c};
  
      if ( $self->{tz}->is_utc || $self->{tz}->is_floating ) {
          $self->{utc_rd_days} = $self->{local_rd_days};
          $self->{utc_rd_secs} = $self->{local_rd_secs};
      }
      else {
          my $offset = $self->_offset_for_local_datetime;
  
          $offset += $self->{offset_modifier};
  
          $self->{utc_rd_days} = $self->{local_rd_days};
          $self->{utc_rd_secs} = $self->{local_rd_secs} - $offset;
      }
  
      # We account for leap seconds in the new() method and nowhere else
      # except date math.
      $self->_normalize_tai_seconds(
          $self->{utc_rd_days},
          $self->{utc_rd_secs}
      );
  }
  
  sub _normalize_seconds {
      my $self = shift;
  
      return if $self->{utc_rd_secs} >= 0 && $self->{utc_rd_secs} <= 86399;
  
      if ( $self->{tz}->is_floating ) {
          $self->_normalize_tai_seconds(
              $self->{utc_rd_days},
              $self->{utc_rd_secs}
          );
      }
      else {
          $self->_normalize_leap_seconds(
              $self->{utc_rd_days},
              $self->{utc_rd_secs}
          );
      }
  }
  
  sub _calc_local_rd {
      my $self = shift;
  
      delete $self->{local_c};
  
      # We must short circuit for UTC times or else we could end up with
      # loops between DateTime.pm and DateTime::TimeZone
      if ( $self->{tz}->is_utc || $self->{tz}->is_floating ) {
          $self->{local_rd_days} = $self->{utc_rd_days};
          $self->{local_rd_secs} = $self->{utc_rd_secs};
      }
      else {
          my $offset = $self->offset;
  
          $self->{local_rd_days} = $self->{utc_rd_days};
          $self->{local_rd_secs} = $self->{utc_rd_secs} + $offset;
  
          # intentionally ignore leap seconds here
          $self->_normalize_tai_seconds(
              $self->{local_rd_days},
              $self->{local_rd_secs}
          );
  
          $self->{local_rd_secs} += $self->{offset_modifier};
      }
  
      $self->_calc_local_components;
  }
  
  sub _calc_local_components {
      my $self = shift;
  
      @{ $self->{local_c} }{
          qw( year month day day_of_week
              day_of_year quarter day_of_quarter)
          }
          = $self->_rd2ymd( $self->{local_rd_days}, 1 );
  
      @{ $self->{local_c} }{qw( hour minute second )}
          = $self->_seconds_as_components(
          $self->{local_rd_secs},
          $self->{utc_rd_secs}, $self->{offset_modifier}
          );
  }
  
  {
      my $float = qr/
           ^ -? (?: [0-9]+ (?: \.[0-9]*)? | \. [0-9]+) (?: [eE][+-]?[0-9]+)? $
      /x;
      my $spec = {
          epoch     => { regex => $float },
          locale    => { type  => SCALAR | OBJECT, optional => 1 },
          language  => { type  => SCALAR | OBJECT, optional => 1 },
          time_zone => { type  => SCALAR | OBJECT, optional => 1 },
          formatter => {
              type     => SCALAR | OBJECT, can => 'format_datetime',
              optional => 1
          },
      };
  
      sub from_epoch {
          my $class = shift;
          my %p = validate( @_, $spec );
  
          my %args;
  
          # This does two things. First, if given a negative non-integer epoch,
          # it will round the epoch _down_ to the next second and then adjust
          # the nanoseconds to be positive. In other words, -0.5 corresponds to
          # a second of -1 and a nanosecond value of 500,000. Before this code
          # was implemented our handling of negative non-integer epochs was
          # quite broken, and would end up rounding some values up, so that -0.5
          # become 0.5 (which is obviously wrong!).
          #
          # Second, it rounds any decimal values to the nearest microsecond
          # (1E6). Here's what Christian Hansen, who wrote this patch, says:
          #
          #     Perl is typically compiled with NV as a double. A double with a
          #     significand precision of 53 bits can only represent a nanosecond
          #     epoch without loss of precision if the duration from zero epoch
          #     is less than ≈ ±104 days. With microseconds the duration is
          #     ±104,000 days, which is ≈ ±285 years.
          if ( int $p{epoch} != $p{epoch} ) {
              my ( $floor, $nano, $second );
  
              $floor = $nano = fmod( $p{epoch}, 1.0 );
              $second = floor( $p{epoch} - $floor );
              if ( $nano < 0 ) {
                  $nano += 1;
              }
              $p{epoch}         = $second + floor( $floor - $nano );
              $args{nanosecond} = floor( $nano * 1E6 + 0.5 ) * 1E3;
          }
  
          # Note, for very large negative values this may give a
          # blatantly wrong answer.
          @args{qw( second minute hour day month year )}
              = ( gmtime( $p{epoch} ) )[ 0 .. 5 ];
          $args{year} += 1900;
          $args{month}++;
  
          my $self = $class->_new( %p, %args, time_zone => 'UTC' );
  
          $self->_maybe_future_dst_warning( $self->year(), $p{time_zone} );
  
          $self->set_time_zone( $p{time_zone} ) if exists $p{time_zone};
  
          return $self;
      }
  }
  
  sub now {
      my $class = shift;
      return $class->from_epoch( epoch => $class->_core_time(), @_ );
  }
  
  sub _maybe_future_dst_warning {
      shift;
      my $year = shift;
      my $tz   = shift;
  
      return unless $year >= 5000 && $tz;
  
      my $tz_name = ref $tz ? $tz->name() : $tz;
      return if $tz_name eq 'floating' || $tz_name eq 'UTC';
  
      warnings::warnif(
          "You are creating a DateTime object with a far future year ($year) and a time zone ($tz_name)."
              . ' If the time zone you specified has future DST changes this will be very slow.'
      );
  }
  
  # use scalar time in case someone's loaded Time::Piece
  sub _core_time {
      return scalar time;
  }
  
  sub today { shift->now(@_)->truncate( to => 'day' ) }
  
  {
      my $spec = {
          object => {
              type => OBJECT,
              can  => 'utc_rd_values',
          },
          locale    => { type => SCALAR | OBJECT, optional => 1 },
          language  => { type => SCALAR | OBJECT, optional => 1 },
          formatter => {
              type     => SCALAR | OBJECT, can => 'format_datetime',
              optional => 1
          },
      };
  
      sub from_object {
          my $class = shift;
          my %p = validate( @_, $spec );
  
          my $object = delete $p{object};
  
          if ( $object->isa('DateTime::Infinite') ) {
              return $object->clone;
          }
  
          my ( $rd_days, $rd_secs, $rd_nanosecs ) = $object->utc_rd_values;
  
          # A kludge because until all calendars are updated to return all
          # three values, $rd_nanosecs could be undef
          $rd_nanosecs ||= 0;
  
          # This is a big hack to let _seconds_as_components operate naively
          # on the given value. If the object _is_ on a leap second, we'll
          # add that to the generated seconds value later.
          my $leap_seconds = 0;
          if (   $object->can('time_zone')
              && !$object->time_zone->is_floating
              && $rd_secs > 86399
              && $rd_secs <= $class->_day_length($rd_days) ) {
              $leap_seconds = $rd_secs - 86399;
              $rd_secs -= $leap_seconds;
          }
  
          my %args;
          @args{qw( year month day )} = $class->_rd2ymd($rd_days);
          @args{qw( hour minute second )}
              = $class->_seconds_as_components($rd_secs);
          $args{nanosecond} = $rd_nanosecs;
  
          $args{second} += $leap_seconds;
  
          my $new = $class->new( %p, %args, time_zone => 'UTC' );
  
          if ( $object->can('time_zone') ) {
              $new->set_time_zone( $object->time_zone );
          }
          else {
              $new->set_time_zone( $class->_default_time_zone );
          }
  
          return $new;
      }
  }
  
  my $LastDayOfMonthValidate = {%$NewValidate};
  foreach ( keys %$LastDayOfMonthValidate ) {
      my %copy = %{ $LastDayOfMonthValidate->{$_} };
  
      delete $copy{default};
      $copy{optional} = 1 unless $_ eq 'year' || $_ eq 'month';
  
      $LastDayOfMonthValidate->{$_} = \%copy;
  }
  
  sub last_day_of_month {
      my $class = shift;
      my %p = validate( @_, $LastDayOfMonthValidate );
  
      my $day = $class->_month_length( $p{year}, $p{month} );
  
      return $class->_new( %p, day => $day );
  }
  
  sub _month_length {
      return (
            $_[0]->_is_leap_year( $_[1] )
          ? $LeapYearMonthLengths[ $_[2] - 1 ]
          : $MonthLengths[ $_[2] - 1 ]
      );
  }
  
  my $FromDayOfYearValidate = {%$NewValidate};
  foreach ( keys %$FromDayOfYearValidate ) {
      next if $_ eq 'month' || $_ eq 'day';
  
      my %copy = %{ $FromDayOfYearValidate->{$_} };
  
      delete $copy{default};
      $copy{optional} = 1 unless $_ eq 'year' || $_ eq 'month';
  
      $FromDayOfYearValidate->{$_} = \%copy;
  }
  $FromDayOfYearValidate->{day_of_year} = {
      type      => SCALAR,
      callbacks => {
          'is between 1 and 366' => sub { $_[0] >= 1 && $_[0] <= 366 }
      }
  };
  
  sub from_day_of_year {
      my $class = shift;
      my %p = validate( @_, $FromDayOfYearValidate );
  
      Carp::croak("$p{year} is not a leap year.\n")
          if $p{day_of_year} == 366 && !$class->_is_leap_year( $p{year} );
  
      my $month = 1;
      my $day   = delete $p{day_of_year};
  
      if ( $day > 31 ) {
          my $length = $class->_month_length( $p{year}, $month );
  
          while ( $day > $length ) {
              $day -= $length;
              $month++;
              $length = $class->_month_length( $p{year}, $month );
          }
      }
  
      return $class->_new(
          %p,
          month => $month,
          day   => $day,
      );
  }
  
  sub formatter { $_[0]->{formatter} }
  
  sub clone { bless { %{ $_[0] } }, ref $_[0] }
  
  sub year {
      Carp::carp('year() is a read-only accessor') if @_ > 1;
      return $_[0]->{local_c}{year};
  }
  
  sub ce_year {
      $_[0]->{local_c}{year} <= 0
          ? $_[0]->{local_c}{year} - 1
          : $_[0]->{local_c}{year};
  }
  
  sub era_name { $_[0]->{locale}->era_wide->[ $_[0]->_era_index() ] }
  
  sub era_abbr { $_[0]->{locale}->era_abbreviated->[ $_[0]->_era_index() ] }
  
  # deprecated
  *era = \&era_abbr;
  
  sub _era_index { $_[0]->{local_c}{year} <= 0 ? 0 : 1 }
  
  sub christian_era { $_[0]->ce_year > 0 ? 'AD' : 'BC' }
  sub secular_era   { $_[0]->ce_year > 0 ? 'CE' : 'BCE' }
  
  sub year_with_era           { ( abs $_[0]->ce_year ) . $_[0]->era_abbr }
  sub year_with_christian_era { ( abs $_[0]->ce_year ) . $_[0]->christian_era }
  sub year_with_secular_era   { ( abs $_[0]->ce_year ) . $_[0]->secular_era }
  
  sub month {
      Carp::carp('month() is a read-only accessor') if @_ > 1;
      return $_[0]->{local_c}{month};
  }
  *mon = \&month;
  
  sub month_0 { $_[0]->{local_c}{month} - 1 }
  *mon_0 = \&month_0;
  
  sub month_name { $_[0]->{locale}->month_format_wide->[ $_[0]->month_0() ] }
  
  sub month_abbr {
      $_[0]->{locale}->month_format_abbreviated->[ $_[0]->month_0() ];
  }
  
  sub day_of_month {
      Carp::carp('day_of_month() is a read-only accessor') if @_ > 1;
      $_[0]->{local_c}{day};
  }
  *day  = \&day_of_month;
  *mday = \&day_of_month;
  
  sub weekday_of_month { use integer; ( ( $_[0]->day - 1 ) / 7 ) + 1 }
  
  sub quarter { $_[0]->{local_c}{quarter} }
  
  sub quarter_name {
      $_[0]->{locale}->quarter_format_wide->[ $_[0]->quarter_0() ];
  }
  
  sub quarter_abbr {
      $_[0]->{locale}->quarter_format_abbreviated->[ $_[0]->quarter_0() ];
  }
  
  sub quarter_0 { $_[0]->{local_c}{quarter} - 1 }
  
  sub day_of_month_0 { $_[0]->{local_c}{day} - 1 }
  *day_0  = \&day_of_month_0;
  *mday_0 = \&day_of_month_0;
  
  sub day_of_week { $_[0]->{local_c}{day_of_week} }
  *wday = \&day_of_week;
  *dow  = \&day_of_week;
  
  sub day_of_week_0 { $_[0]->{local_c}{day_of_week} - 1 }
  *wday_0 = \&day_of_week_0;
  *dow_0  = \&day_of_week_0;
  
  sub local_day_of_week {
      my $self = shift;
      return 1
          + ( $self->day_of_week - $self->{locale}->first_day_of_week ) % 7;
  }
  
  sub day_name { $_[0]->{locale}->day_format_wide->[ $_[0]->day_of_week_0() ] }
  
  sub day_abbr {
      $_[0]->{locale}->day_format_abbreviated->[ $_[0]->day_of_week_0() ];
  }
  
  sub day_of_quarter { $_[0]->{local_c}{day_of_quarter} }
  *doq = \&day_of_quarter;
  
  sub day_of_quarter_0 { $_[0]->day_of_quarter - 1 }
  *doq_0 = \&day_of_quarter_0;
  
  sub day_of_year { $_[0]->{local_c}{day_of_year} }
  *doy = \&day_of_year;
  
  sub day_of_year_0 { $_[0]->{local_c}{day_of_year} - 1 }
  *doy_0 = \&day_of_year_0;
  
  sub am_or_pm {
      $_[0]->{locale}->am_pm_abbreviated->[ $_[0]->hour() < 12 ? 0 : 1 ];
  }
  
  sub ymd {
      my ( $self, $sep ) = @_;
      $sep = '-' unless defined $sep;
  
      return sprintf(
          '%0.4d%s%0.2d%s%0.2d',
          $self->year,             $sep,
          $self->{local_c}{month}, $sep,
          $self->{local_c}{day}
      );
  }
  *date = sub { shift->ymd(@_) };
  
  sub mdy {
      my ( $self, $sep ) = @_;
      $sep = '-' unless defined $sep;
  
      return sprintf(
          '%0.2d%s%0.2d%s%0.4d',
          $self->{local_c}{month}, $sep,
          $self->{local_c}{day},   $sep,
          $self->year
      );
  }
  
  sub dmy {
      my ( $self, $sep ) = @_;
      $sep = '-' unless defined $sep;
  
      return sprintf(
          '%0.2d%s%0.2d%s%0.4d',
          $self->{local_c}{day},   $sep,
          $self->{local_c}{month}, $sep,
          $self->year
      );
  }
  
  sub hour {
      Carp::carp('hour() is a read-only accessor') if @_ > 1;
      return $_[0]->{local_c}{hour};
  }
  sub hour_1 { $_[0]->{local_c}{hour} == 0 ? 24 : $_[0]->{local_c}{hour} }
  
  sub hour_12 { my $h = $_[0]->hour % 12; return $h ? $h : 12 }
  sub hour_12_0 { $_[0]->hour % 12 }
  
  sub minute {
      Carp::carp('minute() is a read-only accessor') if @_ > 1;
      return $_[0]->{local_c}{minute};
  }
  *min = \&minute;
  
  sub second {
      Carp::carp('second() is a read-only accessor') if @_ > 1;
      return $_[0]->{local_c}{second};
  }
  *sec = \&second;
  
  sub fractional_second { $_[0]->second + $_[0]->nanosecond / MAX_NANOSECONDS }
  
  sub nanosecond {
      Carp::carp('nanosecond() is a read-only accessor') if @_ > 1;
      return $_[0]->{rd_nanosecs};
  }
  
  sub millisecond { floor( $_[0]->{rd_nanosecs} / 1000000 ) }
  
  sub microsecond { floor( $_[0]->{rd_nanosecs} / 1000 ) }
  
  sub leap_seconds {
      my $self = shift;
  
      return 0 if $self->{tz}->is_floating;
  
      return DateTime->_accumulated_leap_seconds( $self->{utc_rd_days} );
  }
  
  sub _stringify {
      my $self = shift;
  
      return $self->iso8601 unless $self->{formatter};
      return $self->{formatter}->format_datetime($self);
  }
  
  sub hms {
      my ( $self, $sep ) = @_;
      $sep = ':' unless defined $sep;
  
      return sprintf(
          '%0.2d%s%0.2d%s%0.2d',
          $self->{local_c}{hour},   $sep,
          $self->{local_c}{minute}, $sep,
          $self->{local_c}{second}
      );
  }
  
  # don't want to override CORE::time()
  *DateTime::time = sub { shift->hms(@_) };
  
  sub iso8601 { join 'T', $_[0]->ymd('-'), $_[0]->hms(':') }
  *datetime = sub { $_[0]->iso8601 };
  
  sub is_leap_year { $_[0]->_is_leap_year( $_[0]->year ) }
  
  sub week {
      my $self = shift;
  
      unless ( defined $self->{local_c}{week_year} ) {
  
          # This algorithm was taken from Date::Calc's DateCalc.c file
          my $jan_one_dow_m1
              = ( ( $self->_ymd2rd( $self->year, 1, 1 ) + 6 ) % 7 );
  
          $self->{local_c}{week_number}
              = int( ( ( $self->day_of_year - 1 ) + $jan_one_dow_m1 ) / 7 );
          $self->{local_c}{week_number}++ if $jan_one_dow_m1 < 4;
  
          if ( $self->{local_c}{week_number} == 0 ) {
              $self->{local_c}{week_year} = $self->year - 1;
              $self->{local_c}{week_number}
                  = $self->_weeks_in_year( $self->{local_c}{week_year} );
          }
          elsif ($self->{local_c}{week_number} == 53
              && $self->_weeks_in_year( $self->year ) == 52 ) {
              $self->{local_c}{week_number} = 1;
              $self->{local_c}{week_year}   = $self->year + 1;
          }
          else {
              $self->{local_c}{week_year} = $self->year;
          }
      }
  
      return @{ $self->{local_c} }{ 'week_year', 'week_number' };
  }
  
  sub _weeks_in_year {
      my $self = shift;
      my $year = shift;
  
      my $dow = $self->_ymd2rd( $year, 1, 1 ) % 7;
  
      # Years starting with a Thursday and leap years starting with a Wednesday
      # have 53 weeks.
      return ( $dow == 4 || ( $dow == 3 && $self->_is_leap_year($year) ) )
          ? 53
          : 52;
  }
  
  sub week_year   { ( $_[0]->week )[0] }
  sub week_number { ( $_[0]->week )[1] }
  
  # ISO says that the first week of a year is the first week containing
  # a Thursday. Extending that says that the first week of the month is
  # the first week containing a Thursday. ICU agrees.
  sub week_of_month {
      my $self = shift;
      my $thu  = $self->day + 4 - $self->day_of_week;
      return int( ( $thu + 6 ) / 7 );
  }
  
  sub time_zone {
      Carp::carp('time_zone() is a read-only accessor') if @_ > 1;
      return $_[0]->{tz};
  }
  
  sub offset { $_[0]->{tz}->offset_for_datetime( $_[0] ) }
  
  sub _offset_for_local_datetime {
      $_[0]->{tz}->offset_for_local_datetime( $_[0] );
  }
  
  sub is_dst { $_[0]->{tz}->is_dst_for_datetime( $_[0] ) }
  
  sub time_zone_long_name  { $_[0]->{tz}->name }
  sub time_zone_short_name { $_[0]->{tz}->short_name_for_datetime( $_[0] ) }
  
  sub locale {
      Carp::carp('locale() is a read-only accessor') if @_ > 1;
      return $_[0]->{locale};
  }
  *language = \&locale;
  
  sub utc_rd_values {
      @{ $_[0] }{ 'utc_rd_days', 'utc_rd_secs', 'rd_nanosecs' };
  }
  
  sub local_rd_values {
      @{ $_[0] }{ 'local_rd_days', 'local_rd_secs', 'rd_nanosecs' };
  }
  
  # NOTE: no nanoseconds, no leap seconds
  sub utc_rd_as_seconds {
      ( $_[0]->{utc_rd_days} * SECONDS_PER_DAY ) + $_[0]->{utc_rd_secs};
  }
  
  # NOTE: no nanoseconds, no leap seconds
  sub local_rd_as_seconds {
      ( $_[0]->{local_rd_days} * SECONDS_PER_DAY ) + $_[0]->{local_rd_secs};
  }
  
  # RD 1 is MJD 678,576 - a simple offset
  sub mjd {
      my $self = shift;
  
      my $mjd = $self->{utc_rd_days} - 678_576;
  
      my $day_length = $self->_day_length( $self->{utc_rd_days} );
  
      return (  $mjd
              + ( $self->{utc_rd_secs} / $day_length )
              + ( $self->{rd_nanosecs} / $day_length / MAX_NANOSECONDS ) );
  }
  
  sub jd { $_[0]->mjd + 2_400_000.5 }
  
  {
      my %strftime_patterns = (
          'a' => sub { $_[0]->day_abbr },
          'A' => sub { $_[0]->day_name },
          'b' => sub { $_[0]->month_abbr },
          'B' => sub { $_[0]->month_name },
          'c' => sub {
              $_[0]->format_cldr( $_[0]->{locale}->datetime_format_default() );
          },
          'C' => sub { int( $_[0]->year / 100 ) },
          'd' => sub { sprintf( '%02d', $_[0]->day_of_month ) },
          'D' => sub { $_[0]->strftime('%m/%d/%y') },
          'e' => sub { sprintf( '%2d', $_[0]->day_of_month ) },
          'F' => sub { $_[0]->ymd('-') },
          'g' => sub { substr( $_[0]->week_year, -2 ) },
          'G' => sub { $_[0]->week_year },
          'H' => sub { sprintf( '%02d', $_[0]->hour ) },
          'I' => sub { sprintf( '%02d', $_[0]->hour_12 ) },
          'j' => sub { sprintf( '%03d', $_[0]->day_of_year ) },
          'k' => sub { sprintf( '%2d', $_[0]->hour ) },
          'l' => sub { sprintf( '%2d', $_[0]->hour_12 ) },
          'm' => sub { sprintf( '%02d', $_[0]->month ) },
          'M' => sub { sprintf( '%02d', $_[0]->minute ) },
          'n' => sub {"\n"},                     # should this be OS-sensitive?
          'N' => \&_format_nanosecs,
          'p' => sub { $_[0]->am_or_pm() },
          'P' => sub { lc $_[0]->am_or_pm() },
          'r' => sub { $_[0]->strftime('%I:%M:%S %p') },
          'R' => sub { $_[0]->strftime('%H:%M') },
          's' => sub { $_[0]->epoch },
          'S' => sub { sprintf( '%02d', $_[0]->second ) },
          't' => sub {"\t"},
          'T' => sub { $_[0]->strftime('%H:%M:%S') },
          'u' => sub { $_[0]->day_of_week },
          'U' => sub {
              my $sun = $_[0]->day_of_year - ( $_[0]->day_of_week + 7 ) % 7;
              return sprintf( '%02d', int( ( $sun + 6 ) / 7 ) );
          },
          'V' => sub { sprintf( '%02d', $_[0]->week_number ) },
          'w' => sub {
              my $dow = $_[0]->day_of_week;
              return $dow % 7;
          },
          'W' => sub {
              my $mon = $_[0]->day_of_year - ( $_[0]->day_of_week + 6 ) % 7;
              return sprintf( '%02d', int( ( $mon + 6 ) / 7 ) );
          },
          'x' => sub {
              $_[0]->format_cldr( $_[0]->{locale}->date_format_default() );
          },
          'X' => sub {
              $_[0]->format_cldr( $_[0]->{locale}->time_format_default() );
          },
          'y' => sub { sprintf( '%02d', substr( $_[0]->year, -2 ) ) },
          'Y' => sub { return $_[0]->year },
          'z' => sub { DateTime::TimeZone->offset_as_string( $_[0]->offset ) },
          'Z' => sub { $_[0]->{tz}->short_name_for_datetime( $_[0] ) },
          '%' => sub {'%'},
      );
  
      $strftime_patterns{h} = $strftime_patterns{b};
  
      sub strftime {
          my $self = shift;
  
          # make a copy or caller's scalars get munged
          my @patterns = @_;
  
          my @r;
          foreach my $p (@patterns) {
              $p =~ s/
                      (?:
                        %\{(\w+)\}       # method name like %{day_name}
                        |
                        %([%a-zA-Z])     # single character specifier like %d
                        |
                        %(\d+)N          # special case for %N
                      )
                     /
                      ( $1
                        ? ( $self->can($1) ? $self->$1() : "\%{$1}" )
                        : $2
                        ? ( $strftime_patterns{$2} ? $strftime_patterns{$2}->($self) : "\%$2" )
                        : $3
                        ? $strftime_patterns{N}->($self, $3)
                        : ''  # this won't happen
                      )
                     /sgex;
  
              return $p unless wantarray;
  
              push @r, $p;
          }
  
          return @r;
      }
  }
  
  {
  
      # It's an array because the order in which the regexes are checked
      # is important. These patterns are similar to the ones Java uses,
      # but not quite the same. See
      # http://www.unicode.org/reports/tr35/tr35-9.html#Date_Format_Patterns.
      my @patterns = (
          qr/GGGGG/ =>
              sub { $_[0]->{locale}->era_narrow->[ $_[0]->_era_index() ] },
          qr/GGGG/   => 'era_name',
          qr/G{1,3}/ => 'era_abbr',
  
          qr/(y{3,5})/ =>
              sub { $_[0]->_zero_padded_number( $1, $_[0]->year() ) },
  
          # yy is a weird special case, where it must be exactly 2 digits
          qr/yy/ => sub {
              my $year = $_[0]->year();
              my $y2 = substr( $year, -2, 2 ) if length $year > 2;
              $y2 *= -1 if $year < 0;
              $_[0]->_zero_padded_number( 'yy', $y2 );
          },
          qr/y/    => sub { $_[0]->year() },
          qr/(u+)/ => sub { $_[0]->_zero_padded_number( $1, $_[0]->year() ) },
          qr/(Y+)/ =>
              sub { $_[0]->_zero_padded_number( $1, $_[0]->week_year() ) },
  
          qr/QQQQ/ => 'quarter_name',
          qr/QQQ/  => 'quarter_abbr',
          qr/(QQ?)/ =>
              sub { $_[0]->_zero_padded_number( $1, $_[0]->quarter() ) },
  
          qr/qqqq/ => sub {
              $_[0]->{locale}->quarter_stand_alone_wide()
                  ->[ $_[0]->quarter_0() ];
          },
          qr/qqq/ => sub {
              $_[0]->{locale}->quarter_stand_alone_abbreviated()
                  ->[ $_[0]->quarter_0() ];
          },
          qr/(qq?)/ =>
              sub { $_[0]->_zero_padded_number( $1, $_[0]->quarter() ) },
  
          qr/MMMMM/ =>
              sub { $_[0]->{locale}->month_format_narrow->[ $_[0]->month_0() ] }
          ,
          qr/MMMM/  => 'month_name',
          qr/MMM/   => 'month_abbr',
          qr/(MM?)/ => sub { $_[0]->_zero_padded_number( $1, $_[0]->month() ) },
  
          qr/LLLLL/ => sub {
              $_[0]->{locale}->month_stand_alone_narrow->[ $_[0]->month_0() ];
          },
          qr/LLLL/ => sub {
              $_[0]->{locale}->month_stand_alone_wide->[ $_[0]->month_0() ];
          },
          qr/LLL/ => sub {
              $_[0]->{locale}
                  ->month_stand_alone_abbreviated->[ $_[0]->month_0() ];
          },
          qr/(LL?)/ => sub { $_[0]->_zero_padded_number( $1, $_[0]->month() ) },
  
          qr/(ww?)/ =>
              sub { $_[0]->_zero_padded_number( $1, $_[0]->week_number() ) },
          qr/W/ => 'week_of_month',
  
          qr/(dd?)/ =>
              sub { $_[0]->_zero_padded_number( $1, $_[0]->day_of_month() ) },
          qr/(D{1,3})/ =>
              sub { $_[0]->_zero_padded_number( $1, $_[0]->day_of_year() ) },
  
          qr/F/    => 'weekday_of_month',
          qr/(g+)/ => sub { $_[0]->_zero_padded_number( $1, $_[0]->mjd() ) },
  
          qr/EEEEE/ => sub {
              $_[0]->{locale}->day_format_narrow->[ $_[0]->day_of_week_0() ];
          },
          qr/EEEE/   => 'day_name',
          qr/E{1,3}/ => 'day_abbr',
  
          qr/eeeee/ => sub {
              $_[0]->{locale}->day_format_narrow->[ $_[0]->day_of_week_0() ];
          },
          qr/eeee/  => 'day_name',
          qr/eee/   => 'day_abbr',
          qr/(ee?)/ => sub {
              $_[0]->_zero_padded_number( $1, $_[0]->local_day_of_week() );
          },
  
          qr/ccccc/ => sub {
              $_[0]->{locale}
                  ->day_stand_alone_narrow->[ $_[0]->day_of_week_0() ];
          },
          qr/cccc/ => sub {
              $_[0]->{locale}->day_stand_alone_wide->[ $_[0]->day_of_week_0() ];
          },
          qr/ccc/ => sub {
              $_[0]->{locale}
                  ->day_stand_alone_abbreviated->[ $_[0]->day_of_week_0() ];
          },
          qr/(cc?)/ =>
              sub { $_[0]->_zero_padded_number( $1, $_[0]->day_of_week() ) },
  
          qr/a/ => 'am_or_pm',
  
          qr/(hh?)/ =>
              sub { $_[0]->_zero_padded_number( $1, $_[0]->hour_12() ) },
          qr/(HH?)/ => sub { $_[0]->_zero_padded_number( $1, $_[0]->hour() ) },
          qr/(KK?)/ =>
              sub { $_[0]->_zero_padded_number( $1, $_[0]->hour_12_0() ) },
          qr/(kk?)/ =>
              sub { $_[0]->_zero_padded_number( $1, $_[0]->hour_1() ) },
          qr/(jj?)/ => sub {
              my $h
                  = $_[0]->{locale}->prefers_24_hour_time()
                  ? $_[0]->hour()
                  : $_[0]->hour_12();
              $_[0]->_zero_padded_number( $1, $h );
          },
  
          qr/(mm?)/ =>
              sub { $_[0]->_zero_padded_number( $1, $_[0]->minute() ) },
  
          qr/(ss?)/ =>
              sub { $_[0]->_zero_padded_number( $1, $_[0]->second() ) },
  
          # I'm not sure this is what is wanted (notably the trailing
          # and leading zeros it can produce), but once again the LDML
          # spec is not all that clear.
          qr/(S+)/ => sub {
              my $l   = length $1;
              my $val = sprintf(
                  "%.${l}f",
                  $_[0]->fractional_second() - $_[0]->second()
              );
              $val =~ s/^0\.//;
              $val || 0;
          },
          qr/A+/ =>
              sub { ( $_[0]->{local_rd_secs} * 1000 ) + $_[0]->millisecond() },
  
          qr/zzzz/   => sub { $_[0]->time_zone_long_name() },
          qr/z{1,3}/ => sub { $_[0]->time_zone_short_name() },
          qr/ZZZZZ/  => sub {
              substr(
                  my $z
                      = DateTime::TimeZone->offset_as_string( $_[0]->offset() ),
                  -2, 0, ':'
              );
              $z;
          },
          qr/ZZZZ/ => sub {
              $_[0]->time_zone_short_name()
                  . DateTime::TimeZone->offset_as_string( $_[0]->offset() );
          },
          qr/Z{1,3}/ =>
              sub { DateTime::TimeZone->offset_as_string( $_[0]->offset() ) },
          qr/vvvv/   => sub { $_[0]->time_zone_long_name() },
          qr/v{1,3}/ => sub { $_[0]->time_zone_short_name() },
          qr/VVVV/   => sub { $_[0]->time_zone_long_name() },
          qr/V{1,3}/ => sub { $_[0]->time_zone_short_name() },
      );
  
      sub _zero_padded_number {
          my $self = shift;
          my $size = length shift;
          my $val  = shift;
  
          return sprintf( "%0${size}d", $val );
      }
  
      sub format_cldr {
          my $self = shift;
  
          # make a copy or caller's scalars get munged
          my @patterns = @_;
  
          my @r;
          foreach my $p (@patterns) {
              $p =~ s/\G
                      (?:
                        '((?:[^']|'')*)' # quote escaped bit of text
                                         # it needs to end with one
                                         # quote not followed by
                                         # another
                        |
                        (([a-zA-Z])\3*)     # could be a pattern
                        |
                        (.)                 # anything else
                      )
                     /
                      defined $1
                      ? $1
                      : defined $2
                      ? $self->_cldr_pattern($2)
                      : defined $4
                      ? $4
                      : undef # should never get here
                     /sgex;
  
              $p =~ s/\'\'/\'/g;
  
              return $p unless wantarray;
  
              push @r, $p;
          }
  
          return @r;
      }
  
      sub _cldr_pattern {
          my $self    = shift;
          my $pattern = shift;
  
          for ( my $i = 0; $i < @patterns; $i += 2 ) {
              if ( $pattern =~ /$patterns[$i]/ ) {
                  my $sub = $patterns[ $i + 1 ];
  
                  return $self->$sub();
              }
          }
  
          return $pattern;
      }
  }
  
  sub _format_nanosecs {
      my $self = shift;
      my $precision = @_ ? shift : 9;
  
      my $divide_by = 10**( 9 - $precision );
  
      return sprintf(
          '%0' . $precision . 'u',
          floor( $self->{rd_nanosecs} / $divide_by )
      );
  }
  
  sub epoch {
      my $self = shift;
  
      return $self->{utc_c}{epoch}
          if exists $self->{utc_c}{epoch};
  
      return $self->{utc_c}{epoch}
          = ( $self->{utc_rd_days} - 719163 ) * SECONDS_PER_DAY
          + $self->{utc_rd_secs};
  }
  
  sub hires_epoch {
      my $self = shift;
  
      my $epoch = $self->epoch;
  
      return undef unless defined $epoch;
  
      my $nano = $self->{rd_nanosecs} / MAX_NANOSECONDS;
  
      return $epoch + $nano;
  }
  
  sub is_finite   {1}
  sub is_infinite {0}
  
  # added for benefit of DateTime::TimeZone
  sub utc_year { $_[0]->{utc_year} }
  
  # returns a result that is relative to the first datetime
  sub subtract_datetime {
      my $dt1 = shift;
      my $dt2 = shift;
  
      $dt2 = $dt2->clone->set_time_zone( $dt1->time_zone )
          unless $dt1->time_zone eq $dt2->time_zone;
  
      # We only want a negative duration if $dt2 > $dt1 ($self)
      my ( $bigger, $smaller, $negative ) = (
          $dt1 >= $dt2
          ? ( $dt1, $dt2, 0 )
          : ( $dt2, $dt1, 1 )
      );
  
      my $is_floating = $dt1->time_zone->is_floating
          && $dt2->time_zone->is_floating;
  
      my $minute_length = 60;
      unless ($is_floating) {
          my ( $utc_rd_days, $utc_rd_secs ) = $smaller->utc_rd_values;
  
          if ( $utc_rd_secs >= 86340 && !$is_floating ) {
  
              # If the smaller of the two datetimes occurs in the last
              # UTC minute of the UTC day, then that minute may not be
              # 60 seconds long. If we need to subtract a minute from
              # the larger datetime's minutes count in order to adjust
              # the seconds difference to be positive, we need to know
              # how long that minute was. If one of the datetimes is
              # floating, we just assume a minute is 60 seconds.
  
              $minute_length = $dt1->_day_length($utc_rd_days) - 86340;
          }
      }
  
      # This is a gross hack that basically figures out if the bigger of
      # the two datetimes is the day of a DST change. If it's a 23 hour
      # day (switching _to_ DST) then we subtract 60 minutes from the
      # local time. If it's a 25 hour day then we add 60 minutes to the
      # local time.
      #
      # This produces the most "intuitive" results, though there are
      # still reversibility problems with the resultant duration.
      #
      # However, if the two objects are on the same (local) date, and we
      # are not crossing a DST change, we don't want to invoke the hack
      # - see 38local-subtract.t
      my $bigger_min = $bigger->hour * 60 + $bigger->minute;
      if (   $bigger->time_zone->has_dst_changes
          && $bigger->is_dst != $smaller->is_dst ) {
  
          $bigger_min -= 60
  
              # it's a 23 hour (local) day
              if (
              $bigger->is_dst
              && do {
                  my $prev_day = try { $bigger->clone->subtract( days => 1 ) };
                  $prev_day && !$prev_day->is_dst ? 1 : 0;
              }
              );
  
          $bigger_min += 60
  
              # it's a 25 hour (local) day
              if (
              !$bigger->is_dst
              && do {
                  my $prev_day = try { $bigger->clone->subtract( days => 1 ) };
                  $prev_day && $prev_day->is_dst ? 1 : 0;
              }
              );
      }
  
      my ( $months, $days, $minutes, $seconds, $nanoseconds )
          = $dt1->_adjust_for_positive_difference(
          $bigger->year * 12 + $bigger->month,
          $smaller->year * 12 + $smaller->month,
  
          $bigger->day, $smaller->day,
  
          $bigger_min, $smaller->hour * 60 + $smaller->minute,
  
          $bigger->second, $smaller->second,
  
          $bigger->nanosecond, $smaller->nanosecond,
  
          $minute_length,
  
          # XXX - using the smaller as the month length is
          # somewhat arbitrary, we could also use the bigger -
          # either way we have reversibility problems
          $dt1->_month_length( $smaller->year, $smaller->month ),
          );
  
      if ($negative) {
          for ( $months, $days, $minutes, $seconds, $nanoseconds ) {
  
              # Some versions of Perl can end up with -0 if we do "0 * -1"!!
              $_ *= -1 if $_;
          }
      }
  
      return $dt1->duration_class->new(
          months      => $months,
          days        => $days,
          minutes     => $minutes,
          seconds     => $seconds,
          nanoseconds => $nanoseconds,
      );
  }
  
  sub _adjust_for_positive_difference {
      my (
          $self,
          $month1, $month2,
          $day1,   $day2,
          $min1,   $min2,
          $sec1,   $sec2,
          $nano1,  $nano2,
          $minute_length,
          $month_length,
      ) = @_;
  
      if ( $nano1 < $nano2 ) {
          $sec1--;
          $nano1 += MAX_NANOSECONDS;
      }
  
      if ( $sec1 < $sec2 ) {
          $min1--;
          $sec1 += $minute_length;
      }
  
      # A day always has 24 * 60 minutes, though the minutes may vary in
      # length.
      if ( $min1 < $min2 ) {
          $day1--;
          $min1 += 24 * 60;
      }
  
      if ( $day1 < $day2 ) {
          $month1--;
          $day1 += $month_length;
      }
  
      return (
          $month1 - $month2,
          $day1 - $day2,
          $min1 - $min2,
          $sec1 - $sec2,
          $nano1 - $nano2,
      );
  }
  
  sub subtract_datetime_absolute {
      my $self = shift;
      my $dt   = shift;
  
      my $utc_rd_secs1 = $self->utc_rd_as_seconds;
      $utc_rd_secs1
          += DateTime->_accumulated_leap_seconds( $self->{utc_rd_days} )
          if !$self->time_zone->is_floating;
  
      my $utc_rd_secs2 = $dt->utc_rd_as_seconds;
      $utc_rd_secs2 += DateTime->_accumulated_leap_seconds( $dt->{utc_rd_days} )
          if !$dt->time_zone->is_floating;
  
      my $seconds     = $utc_rd_secs1 - $utc_rd_secs2;
      my $nanoseconds = $self->nanosecond - $dt->nanosecond;
  
      if ( $nanoseconds < 0 ) {
          $seconds--;
          $nanoseconds += MAX_NANOSECONDS;
      }
  
      return $self->duration_class->new(
          seconds     => $seconds,
          nanoseconds => $nanoseconds,
      );
  }
  
  sub delta_md {
      my $self = shift;
      my $dt   = shift;
  
      my ( $smaller, $bigger ) = sort $self, $dt;
  
      my ( $months, $days, undef, undef, undef )
          = $dt->_adjust_for_positive_difference(
          $bigger->year * 12 + $bigger->month,
          $smaller->year * 12 + $smaller->month,
  
          $bigger->day, $smaller->day,
  
          0, 0,
  
          0, 0,
  
          0, 0,
  
          60,
  
          $smaller->_month_length( $smaller->year, $smaller->month ),
          );
  
      return $self->duration_class->new(
          months => $months,
          days   => $days
      );
  }
  
  sub delta_days {
      my $self = shift;
      my $dt   = shift;
  
      my $days
          = abs( ( $self->local_rd_values )[0] - ( $dt->local_rd_values )[0] );
  
      $self->duration_class->new( days => $days );
  }
  
  sub delta_ms {
      my $self = shift;
      my $dt   = shift;
  
      my ( $smaller, $greater ) = sort $self, $dt;
  
      my $days = int( $greater->jd - $smaller->jd );
  
      my $dur = $greater->subtract_datetime($smaller);
  
      my %p;
      $p{hours}   = $dur->hours + ( $days * 24 );
      $p{minutes} = $dur->minutes;
      $p{seconds} = $dur->seconds;
  
      return $self->duration_class->new(%p);
  }
  
  sub _add_overload {
      my ( $dt, $dur, $reversed ) = @_;
  
      if ($reversed) {
          ( $dur, $dt ) = ( $dt, $dur );
      }
  
      unless ( DateTime::Helpers::isa( $dur, 'DateTime::Duration' ) ) {
          my $class     = ref $dt;
          my $dt_string = overload::StrVal($dt);
  
          Carp::croak( "Cannot add $dur to a $class object ($dt_string).\n"
                  . ' Only a DateTime::Duration object can '
                  . " be added to a $class object." );
      }
  
      return $dt->clone->add_duration($dur);
  }
  
  sub _subtract_overload {
      my ( $date1, $date2, $reversed ) = @_;
  
      if ($reversed) {
          ( $date2, $date1 ) = ( $date1, $date2 );
      }
  
      if ( DateTime::Helpers::isa( $date2, 'DateTime::Duration' ) ) {
          my $new = $date1->clone;
          $new->add_duration( $date2->inverse );
          return $new;
      }
      elsif ( DateTime::Helpers::isa( $date2, 'DateTime' ) ) {
          return $date1->subtract_datetime($date2);
      }
      else {
          my $class     = ref $date1;
          my $dt_string = overload::StrVal($date1);
  
          Carp::croak(
              "Cannot subtract $date2 from a $class object ($dt_string).\n"
                  . ' Only a DateTime::Duration or DateTime object can '
                  . " be subtracted from a $class object." );
      }
  }
  
  sub add {
      my $self = shift;
  
      return $self->add_duration( $self->duration_class->new(@_) );
  }
  
  sub subtract {
      my $self = shift;
      my %p    = @_;
  
      my %eom;
      $eom{end_of_month} = delete $p{end_of_month}
          if exists $p{end_of_month};
  
      my $dur = $self->duration_class->new(@_)->inverse(%eom);
  
      return $self->add_duration($dur);
  }
  
  sub subtract_duration { return $_[0]->add_duration( $_[1]->inverse ) }
  
  {
      my @spec = ( { isa => 'DateTime::Duration' } );
  
      sub add_duration {
          my $self = shift;
          my ($dur) = validate_pos( @_, @spec );
  
          # simple optimization
          return $self if $dur->is_zero;
  
          my %deltas = $dur->deltas;
  
          # This bit isn't quite right since DateTime::Infinite::Future -
          # infinite duration should NaN
          foreach my $val ( values %deltas ) {
              my $inf;
              if ( $val == INFINITY ) {
                  $inf = DateTime::Infinite::Future->new;
              }
              elsif ( $val == NEG_INFINITY ) {
                  $inf = DateTime::Infinite::Past->new;
              }
  
              if ($inf) {
                  %$self = %$inf;
                  bless $self, ref $inf;
  
                  return $self;
              }
          }
  
          return $self if $self->is_infinite;
  
          if ( $deltas{days} ) {
              $self->{local_rd_days} += $deltas{days};
  
              $self->{utc_year} += int( $deltas{days} / 365 ) + 1;
          }
  
          if ( $deltas{months} ) {
  
              # For preserve mode, if it is the last day of the month, make
              # it the 0th day of the following month (which then will
              # normalize back to the last day of the new month).
              my ( $y, $m, $d ) = (
                    $dur->is_preserve_mode
                  ? $self->_rd2ymd( $self->{local_rd_days} + 1 )
                  : $self->_rd2ymd( $self->{local_rd_days} )
              );
  
              $d -= 1 if $dur->is_preserve_mode;
  
              if ( !$dur->is_wrap_mode && $d > 28 ) {
  
                  # find the rd for the last day of our target month
                  $self->{local_rd_days}
                      = $self->_ymd2rd( $y, $m + $deltas{months} + 1, 0 );
  
                  # what day of the month is it? (discard year and month)
                  my $last_day
                      = ( $self->_rd2ymd( $self->{local_rd_days} ) )[2];
  
                  # if our original day was less than the last day,
                  # use that instead
                  $self->{local_rd_days} -= $last_day - $d if $last_day > $d;
              }
              else {
                  $self->{local_rd_days}
                      = $self->_ymd2rd( $y, $m + $deltas{months}, $d );
              }
  
              $self->{utc_year} += int( $deltas{months} / 12 ) + 1;
          }
  
          if ( $deltas{days} || $deltas{months} ) {
              $self->_calc_utc_rd;
  
              $self->_handle_offset_modifier( $self->second );
          }
  
          if ( $deltas{minutes} ) {
              $self->{utc_rd_secs} += $deltas{minutes} * 60;
  
              # This intentionally ignores leap seconds
              $self->_normalize_tai_seconds(
                  $self->{utc_rd_days},
                  $self->{utc_rd_secs}
              );
          }
  
          if ( $deltas{seconds} || $deltas{nanoseconds} ) {
              $self->{utc_rd_secs} += $deltas{seconds};
  
              if ( $deltas{nanoseconds} ) {
                  $self->{rd_nanosecs} += $deltas{nanoseconds};
                  $self->_normalize_nanoseconds(
                      $self->{utc_rd_secs},
                      $self->{rd_nanosecs}
                  );
              }
  
              $self->_normalize_seconds;
  
              # This might be some big number much bigger than 60, but
              # that's ok (there are tests in 19leap_second.t to confirm
              # that)
              $self->_handle_offset_modifier(
                  $self->second + $deltas{seconds} );
          }
  
          my $new = ( ref $self )->from_object(
              object => $self,
              locale => $self->{locale},
              ( $self->{formatter} ? ( formatter => $self->{formatter} ) : () ),
          );
  
          %$self = %$new;
  
          return $self;
      }
  }
  
  sub _compare_overload {
  
      # note: $_[1]->compare( $_[0] ) is an error when $_[1] is not a
      # DateTime (such as the INFINITY value)
  
      return undef unless defined $_[1];
  
      return $_[2] ? -$_[0]->compare( $_[1] ) : $_[0]->compare( $_[1] );
  }
  
  sub _string_compare_overload {
      my ( $dt1, $dt2, $flip ) = @_;
  
      # One is a DateTime object, one isn't. Just stringify and compare.
      if ( !DateTime::Helpers::can( $dt2, 'utc_rd_values' ) ) {
          my $sign = $flip ? -1 : 1;
          return $sign * ( "$dt1" cmp "$dt2" );
      }
      else {
          my $meth = $dt1->can('_compare_overload');
          goto $meth;
      }
  }
  
  sub compare {
      shift->_compare( @_, 0 );
  }
  
  sub compare_ignore_floating {
      shift->_compare( @_, 1 );
  }
  
  sub _compare {
      my ( undef, $dt1, $dt2, $consistent ) = ref $_[0] ? ( undef, @_ ) : @_;
  
      return undef unless defined $dt2;
  
      if ( !ref $dt2 && ( $dt2 == INFINITY || $dt2 == NEG_INFINITY ) ) {
          return $dt1->{utc_rd_days} <=> $dt2;
      }
  
      unless ( DateTime::Helpers::can( $dt1, 'utc_rd_values' )
          && DateTime::Helpers::can( $dt2, 'utc_rd_values' ) ) {
          my $dt1_string = overload::StrVal($dt1);
          my $dt2_string = overload::StrVal($dt2);
  
          Carp::croak( 'A DateTime object can only be compared to'
                  . " another DateTime object ($dt1_string, $dt2_string)." );
      }
  
      if (   !$consistent
          && DateTime::Helpers::can( $dt1, 'time_zone' )
          && DateTime::Helpers::can( $dt2, 'time_zone' ) ) {
          my $is_floating1 = $dt1->time_zone->is_floating;
          my $is_floating2 = $dt2->time_zone->is_floating;
  
          if ( $is_floating1 && !$is_floating2 ) {
              $dt1 = $dt1->clone->set_time_zone( $dt2->time_zone );
          }
          elsif ( $is_floating2 && !$is_floating1 ) {
              $dt2 = $dt2->clone->set_time_zone( $dt1->time_zone );
          }
      }
  
      my @dt1_components = $dt1->utc_rd_values;
      my @dt2_components = $dt2->utc_rd_values;
  
      foreach my $i ( 0 .. 2 ) {
          return $dt1_components[$i] <=> $dt2_components[$i]
              if $dt1_components[$i] != $dt2_components[$i];
      }
  
      return 0;
  }
  
  sub _string_equals_overload {
      my ( $class, $dt1, $dt2 ) = ref $_[0] ? ( undef, @_ ) : @_;
  
      if ( !DateTime::Helpers::can( $dt2, 'utc_rd_values' ) ) {
          return "$dt1" eq "$dt2";
      }
  
      $class ||= ref $dt1;
      return !$class->compare( $dt1, $dt2 );
  }
  
  sub _string_not_equals_overload {
      return !_string_equals_overload(@_);
  }
  
  sub _normalize_nanoseconds {
      use integer;
  
      # seconds, nanoseconds
      if ( $_[2] < 0 ) {
          my $overflow = 1 + $_[2] / MAX_NANOSECONDS;
          $_[2] += $overflow * MAX_NANOSECONDS;
          $_[1] -= $overflow;
      }
      elsif ( $_[2] >= MAX_NANOSECONDS ) {
          my $overflow = $_[2] / MAX_NANOSECONDS;
          $_[2] -= $overflow * MAX_NANOSECONDS;
          $_[1] += $overflow;
      }
  }
  
  # Many of the same parameters as new() but all of them are optional,
  # and there are no defaults.
  my $SetValidate = {
      map {
          my %copy = %{ $BasicValidate->{$_} };
          delete $copy{default};
          $copy{optional} = 1;
          $_ => \%copy
          }
          keys %$BasicValidate
  };
  
  sub set {
      my $self = shift;
      my %p = validate( @_, $SetValidate );
  
      if ( $p{locale} ) {
          carp 'You passed a locale to the set() method.'
              . ' You should use set_locale() instead, as using set() may alter the local time near a DST boundary.';
      }
  
      my $new_dt = $self->_new_from_self(%p);
  
      %$self = %$new_dt;
  
      return $self;
  }
  
  sub set_year       { $_[0]->set( year       => $_[1] ) }
  sub set_month      { $_[0]->set( month      => $_[1] ) }
  sub set_day        { $_[0]->set( day        => $_[1] ) }
  sub set_hour       { $_[0]->set( hour       => $_[1] ) }
  sub set_minute     { $_[0]->set( minute     => $_[1] ) }
  sub set_second     { $_[0]->set( second     => $_[1] ) }
  sub set_nanosecond { $_[0]->set( nanosecond => $_[1] ) }
  
  # These two are special cased because ... if the local time is the hour of a
  # DST change where the same local time occurs twice then passing it through
  # _new() can actually change the underlying UTC time, which is bad.
  
  sub set_locale {
      my $self = shift;
  
      my ($locale) = validate_pos( @_, $BasicValidate->{locale} );
  
      $self->_set_locale($locale);
  
      return $self;
  }
  
  sub set_formatter {
      my $self = shift;
      my ($formatter) = validate_pos( @_, $BasicValidate->{formatter} );
  
      $self->{formatter} = $formatter;
  
      return $self;
  }
  
  {
      my %TruncateDefault = (
          month      => 1,
          day        => 1,
          hour       => 0,
          minute     => 0,
          second     => 0,
          nanosecond => 0,
      );
      my $re = join '|', 'year', 'week', 'local_week', 'quarter',
          grep { $_ ne 'nanosecond' } keys %TruncateDefault;
      my $spec = { to => { regex => qr/^(?:$re)$/ } };
  
      sub truncate {
          my $self = shift;
          my %p = validate( @_, $spec );
  
          my %new;
          if ( $p{to} eq 'week' || $p{to} eq 'local_week' ) {
              my $first_day_of_week
                  = ( $p{to} eq 'local_week' )
                  ? $self->{locale}->first_day_of_week
                  : 1;
  
              my $day_diff = ( $self->day_of_week - $first_day_of_week ) % 7;
  
              if ($day_diff) {
                  $self->add( days => -1 * $day_diff );
              }
  
              # This can fail if the truncate ends up giving us an invalid local
              # date time. If that happens we need to reverse the addition we
              # just did. See https://rt.cpan.org/Ticket/Display.html?id=93347.
              try {
                  $self->truncate( to => 'day' );
              }
              catch {
                  $self->add( days => $day_diff );
                  die $_;
              };
          }
          elsif ( $p{to} eq 'quarter' ) {
              %new = (
                  year       => $self->year,
                  month      => int( ( $self->month - 1 ) / 3 ) * 3 + 1,
                  day        => 1,
                  hour       => 0,
                  minute     => 0,
                  second     => 0,
                  nanosecond => 0
              );
          }
          else {
              my $truncate;
              foreach my $f (qw( year month day hour minute second nanosecond ))
              {
                  $new{$f} = $truncate ? $TruncateDefault{$f} : $self->$f();
  
                  $truncate = 1 if $p{to} eq $f;
              }
          }
  
          my $new_dt = $self->_new_from_self( %new, _skip_validation => 1 );
  
          %$self = %$new_dt;
  
          return $self;
      }
  }
  
  sub set_time_zone {
      my ( $self, $tz ) = @_;
  
      if ( ref $tz ) {
  
          # This is a bit of a hack but it works because time zone objects
          # are singletons, and if it doesn't work all we lose is a little
          # bit of speed.
          return $self if $self->{tz} eq $tz;
      }
      else {
          return $self if $self->{tz}->name() eq $tz;
      }
  
      my $was_floating = $self->{tz}->is_floating;
  
      my $old_tz = $self->{tz};
      $self->{tz} = ref $tz ? $tz : DateTime::TimeZone->new( name => $tz );
  
      $self->_handle_offset_modifier( $self->second, 1 );
  
      my $e;
      try {
          # if it either was or now is floating (but not both)
          if ( $self->{tz}->is_floating xor $was_floating ) {
              $self->_calc_utc_rd;
          }
          elsif ( !$was_floating ) {
              $self->_calc_local_rd;
          }
      }
      catch {
          $e = $_;
      };
  
      # If we can't recalc the RD values then we shouldn't keep the new TZ. RT
      # #83940
      if ($e) {
          $self->{tz} = $old_tz;
          die $e;
      }
  
      return $self;
  }
  
  sub STORABLE_freeze {
      my $self = shift;
  
      my $serialized = '';
      foreach my $key (
          qw( utc_rd_days
          utc_rd_secs
          rd_nanosecs )
          ) {
          $serialized .= "$key:$self->{$key}|";
      }
  
      # not used yet, but may be handy in the future.
      $serialized .= 'version:' . ( $DateTime::VERSION || 'git' );
  
      # Formatter needs to be returned as a reference since it may be
      # undef or a class name, and Storable will complain if extra
      # return values aren't refs
      return $serialized, $self->{locale}, $self->{tz}, \$self->{formatter};
  }
  
  sub STORABLE_thaw {
      my $self = shift;
      shift;
      my $serialized = shift;
  
      my %serialized = map { split /:/ } split /\|/, $serialized;
  
      my ( $locale, $tz, $formatter );
  
      # more recent code version
      if (@_) {
          ( $locale, $tz, $formatter ) = @_;
      }
      else {
          $tz = DateTime::TimeZone->new( name => delete $serialized{tz} );
  
          $locale = DateTime::Locale->load(
              exists $serialized{language}
              ? delete $serialized{language}
              : delete $serialized{locale}
          );
      }
  
      delete $serialized{version};
  
      my $object = bless {
          utc_vals => [
              $serialized{utc_rd_days},
              $serialized{utc_rd_secs},
              $serialized{rd_nanosecs},
          ],
          tz => $tz,
          },
          'DateTime::_Thawed';
  
      my %formatter = defined $$formatter ? ( formatter => $$formatter ) : ();
      my $new = ( ref $self )->from_object(
          object => $object,
          locale => $locale,
          %formatter,
      );
  
      %$self = %$new;
  
      return $self;
  }
  
  package    # hide from PAUSE
      DateTime::_Thawed;
  
  sub utc_rd_values { @{ $_[0]->{utc_vals} } }
  
  sub time_zone { $_[0]->{tz} }
  
  1;
  
  # ABSTRACT: A date and time object for Perl
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime - A date and time object for Perl
  
  =head1 VERSION
  
  version 1.36
  
  =head1 SYNOPSIS
  
    use DateTime;
  
    $dt = DateTime->new(
        year       => 1964,
        month      => 10,
        day        => 16,
        hour       => 16,
        minute     => 12,
        second     => 47,
        nanosecond => 500000000,
        time_zone  => 'Asia/Taipei',
    );
  
    $dt = DateTime->from_epoch( epoch => $epoch );
    $dt = DateTime->now; # same as ( epoch => time() )
  
    $year   = $dt->year;
    $month  = $dt->month;          # 1-12
  
    $day    = $dt->day;            # 1-31
  
    $dow    = $dt->day_of_week;    # 1-7 (Monday is 1)
  
    $hour   = $dt->hour;           # 0-23
    $minute = $dt->minute;         # 0-59
  
    $second = $dt->second;         # 0-61 (leap seconds!)
  
    $doy    = $dt->day_of_year;    # 1-366 (leap years)
  
    $doq    = $dt->day_of_quarter; # 1..
  
    $qtr    = $dt->quarter;        # 1-4
  
    # all of the start-at-1 methods above have corresponding start-at-0
    # methods, such as $dt->day_of_month_0, $dt->month_0 and so on
  
    $ymd    = $dt->ymd;           # 2002-12-06
    $ymd    = $dt->ymd('/');      # 2002/12/06
  
    $mdy    = $dt->mdy;           # 12-06-2002
    $mdy    = $dt->mdy('/');      # 12/06/2002
  
    $dmy    = $dt->dmy;           # 06-12-2002
    $dmy    = $dt->dmy('/');      # 06/12/2002
  
    $hms    = $dt->hms;           # 14:02:29
    $hms    = $dt->hms('!');      # 14!02!29
  
    $is_leap  = $dt->is_leap_year;
  
    # these are localizable, see Locales section
    $month_name  = $dt->month_name; # January, February, ...
    $month_abbr  = $dt->month_abbr; # Jan, Feb, ...
    $day_name    = $dt->day_name;   # Monday, Tuesday, ...
    $day_abbr    = $dt->day_abbr;   # Mon, Tue, ...
  
    # May not work for all possible datetime, see the docs on this
    # method for more details.
    $epoch_time  = $dt->epoch;
  
    $dt2 = $dt + $duration_object;
  
    $dt3 = $dt - $duration_object;
  
    $duration_object = $dt - $dt2;
  
    $dt->set( year => 1882 );
  
    $dt->set_time_zone( 'America/Chicago' );
  
    $dt->set_formatter( $formatter );
  
  =head1 DESCRIPTION
  
  DateTime is a class for the representation of date/time combinations,
  and is part of the Perl DateTime project. For details on this project
  please see L<http://datetime.perl.org/>. The DateTime site has a FAQ
  which may help answer many "how do I do X?" questions. The FAQ is at
  L<http://datetime.perl.org/wiki/datetime/page/FAQ>.
  
  It represents the Gregorian calendar, extended backwards in time
  before its creation (in 1582). This is sometimes known as the
  "proleptic Gregorian calendar". In this calendar, the first day of
  the calendar (the epoch), is the first day of year 1, which
  corresponds to the date which was (incorrectly) believed to be the
  birth of Jesus Christ.
  
  The calendar represented does have a year 0, and in that way differs
  from how dates are often written using "BCE/CE" or "BC/AD".
  
  For infinite datetimes, please see the
  L<DateTime::Infinite|DateTime::Infinite> module.
  
  =head1 USAGE
  
  =head2 0-based Versus 1-based Numbers
  
  The DateTime.pm module follows a simple logic for determining whether or not a
  given number is 0-based or 1-based.
  
  Month, day of month, day of week, and day of year are 1-based. Any
  method that is 1-based also has an equivalent 0-based method ending in
  "_0". So for example, this class provides both C<day_of_week()> and
  C<day_of_week_0()> methods.
  
  The C<day_of_week_0()> method still treats Monday as the first day of
  the week.
  
  All I<time>-related numbers such as hour, minute, and second are
  0-based.
  
  Years are neither, as they can be both positive or negative, unlike
  any other datetime component. There I<is> a year 0.
  
  There is no C<quarter_0()> method.
  
  =head2 Error Handling
  
  Some errors may cause this module to die with an error string. This
  can only happen when calling constructor methods, methods that change
  the object, such as C<set()>, or methods that take parameters.
  Methods that retrieve information about the object, such as C<year()>
  or C<epoch()>, will never die.
  
  =head2 Locales
  
  All the object methods which return names or abbreviations return data based
  on a locale. This is done by setting the locale when constructing a DateTime
  object. If this is not set, then "en-US" is used.
  
  =head2 Floating DateTimes
  
  The default time zone for new DateTime objects, except where stated
  otherwise, is the "floating" time zone. This concept comes from the
  iCal standard. A floating datetime is one which is not anchored to
  any particular time zone. In addition, floating datetimes do not
  include leap seconds, since we cannot apply them without knowing the
  datetime's time zone.
  
  The results of date math and comparison between a floating datetime
  and one with a real time zone are not really valid, because one
  includes leap seconds and the other does not. Similarly, the results
  of datetime math between two floating datetimes and two datetimes with
  time zones are not really comparable.
  
  If you are planning to use any objects with a real time zone, it is
  strongly recommended that you B<do not> mix these with floating
  datetimes.
  
  =head2 Math
  
  If you are going to be doing date math, please read the section L<How DateTime
  Math Works>.
  
  =head2 Determining the Local Time Zone Can Be Slow
  
  If C<$ENV{TZ}> is not set, it may involve reading a number of files in F</etc>
  or elsewhere. If you know that the local time zone won't change while your
  code is running, and you need to make many objects for the local time zone, it
  is strongly recommended that you retrieve the local time zone once and cache
  it:
  
    our $App::LocalTZ = DateTime::TimeZone->new( name => 'local' );
  
    ... # then everywhere else
  
    my $dt = DateTime->new( ..., time_zone => $App::LocalTZ );
  
  DateTime itself does not do this internally because local time zones can
  change, and there's no good way to determine if it's changed without doing all
  the work to look it up.
  
  Do not try to use named time zones (like "America/Chicago") with dates
  very far in the future (thousands of years). The current
  implementation of C<DateTime::TimeZone> will use a huge amount of
  memory calculating all the DST changes from now until the future
  date. Use UTC or the floating time zone and you will be safe.
  
  =head2 Globally Setting a Default Time Zone
  
  B<Warning: This is very dangerous. Do this at your own risk!>
  
  By default, C<DateTime> uses either the floating time zone or UTC for newly
  created objects, depending on the constructor.
  
  You can force C<DateTime> to use a different time zone by setting the
  C<PERL_DATETIME_DEFAULT_TZ> environment variable.
  
  As noted above, this is very dangerous, as it affects all code that creates a
  C<DateTime> object, including modules from CPAN. If those modules expect the
  normal default, then setting this can cause confusing breakage or subtly
  broken data. Before setting this variable, you are strongly encouraged to
  audit your CPAN dependencies to see how they use C<DateTime>. Try running the
  test suite for each dependency with this environment variable set before using
  this in production.
  
  =head2 Upper and Lower Bounds
  
  Internally, dates are represented the number of days before or after
  0001-01-01. This is stored as an integer, meaning that the upper and lower
  bounds are based on your Perl's integer size (C<$Config{ivsize}>).
  
  The limit on 32-bit systems is around 2^29 days, which gets you to year
  (+/-)1,469,903. On a 64-bit system you get 2^62 days,
  (+/-)12,626,367,463,883,278 (12.626 quadrillion).
  
  =head1 METHODS
  
  DateTime provide many methods. The documentation breaks them down into groups
  based on what they do (constructor, accessors, modifiers, etc.).
  
  =head2 Constructors
  
  All constructors can die when invalid parameters are given.
  
  =head3 Warnings
  
  Currently, constructors will warn if you try to create a far future DateTime
  (year >= 5000) with any time zone besides floating or UTC. This can be very
  slow if the time zone has future DST transitions that need to be
  calculated. If the date is sufficiently far in the future this can be
  I<really> slow (minutes).
  
  All warnings from DateTime use the C<DateTime> category and can be suppressed
  with:
  
      no warnings 'DateTime';
  
  This warning may be removed in the future if L<DateTime::TimeZone> is made
  much faster.
  
  =head3 DateTime->new( ... )
  
  This class method accepts parameters for each date and time component:
  "year", "month", "day", "hour", "minute", "second", "nanosecond".
  It also accepts "locale", "time_zone", and "formatter" parameters.
  
    my $dt = DateTime->new(
        year       => 1966,
        month      => 10,
        day        => 25,
        hour       => 7,
        minute     => 15,
        second     => 47,
        nanosecond => 500000000,
        time_zone  => 'America/Chicago',
    );
  
  DateTime validates the "month", "day", "hour", "minute", and "second",
  and "nanosecond" parameters. The valid values for these parameters are:
  
  =over 8
  
  =item * month
  
  An integer from 1-12.
  
  =item * day
  
  An integer from 1-31, and it must be within the valid range of days for the
  specified month.
  
  =item * hour
  
  An integer from 0-23.
  
  =item * minute
  
  An integer from 0-59.
  
  =item * second
  
  An integer from 0-61 (to allow for leap seconds). Values of 60 or 61 are only
  allowed when they match actual leap seconds.
  
  =item * nanosecond
  
  An integer >= 0. If this number is greater than 1 billion, it will be
  normalized into the second value for the DateTime object.
  
  =back
  
  Invalid parameter types (like an array reference) will cause the
  constructor to die.
  
  The value for seconds may be from 0 to 61, to account for leap
  seconds. If you give a value greater than 59, DateTime does check to
  see that it really matches a valid leap second.
  
  All of the parameters are optional except for "year". The "month" and
  "day" parameters both default to 1, while the "hour", "minute",
  "second", and "nanosecond" parameters all default to 0.
  
  The "locale" parameter should be a string containing a locale code, like
  "en-US" or "zh-Hant-TW", or an object returned by C<< DateTime::Locale->load
  >>. See the L<DateTime::Locale|DateTime::Locale> documentation for details.
  
  The "time_zone" parameter can be either a string or a C<DateTime::TimeZone>
  object. A string will simply be passed to the C<< DateTime::TimeZone->new >>
  method as its "name" parameter. This string may be an Olson DB time zone name
  ("America/Chicago"), an offset string ("+0630"), or the words "floating" or
  "local". See the C<DateTime::TimeZone> documentation for more details.
  
  The default time zone is "floating".
  
  The "formatter" can be either a scalar or an object, but the class
  specified by the scalar or the object must implement a
  C<format_datetime()> method.
  
  =head4 Parsing Dates
  
  B<This module does not parse dates!> That means there is no
  constructor to which you can pass things like "March 3, 1970 12:34".
  
  Instead, take a look at the various C<DateTime::Format::*> modules on
  CPAN. These parse all sorts of different date formats, and you're
  bound to find something that can handle your particular needs.
  
  =head4 Ambiguous Local Times
  
  Because of Daylight Saving Time, it is possible to specify a local
  time that is ambiguous. For example, in the US in 2003, the
  transition from to saving to standard time occurred on October 26, at
  02:00:00 local time. The local clock changed from 01:59:59 (saving
  time) to 01:00:00 (standard time). This means that the hour from
  01:00:00 through 01:59:59 actually occurs twice, though the UTC time
  continues to move forward.
  
  If you specify an ambiguous time, then the latest UTC time is always
  used, in effect always choosing standard time. In this case, you can
  simply subtract an hour to the object in order to move to saving time,
  for example:
  
    # This object represent 01:30:00 standard time
    my $dt = DateTime->new(
        year      => 2003,
        month     => 10,
        day       => 26,
        hour      => 1,
        minute    => 30,
        second    => 0,
        time_zone => 'America/Chicago',
    );
  
    print $dt->hms;  # prints 01:30:00
  
    # Now the object represent 01:30:00 saving time
    $dt->subtract( hours => 1 );
  
    print $dt->hms;  # still prints 01:30:00
  
  Alternately, you could create the object with the UTC time zone, and
  then call the C<set_time_zone()> method to change the time zone. This
  is a good way to ensure that the time is not ambiguous.
  
  =head4 Invalid Local Times
  
  Another problem introduced by Daylight Saving Time is that certain
  local times just do not exist. For example, in the US in 2003, the
  transition from standard to saving time occurred on April 6, at the
  change to 2:00:00 local time. The local clock changes from 01:59:59
  (standard time) to 03:00:00 (saving time). This means that there is
  no 02:00:00 through 02:59:59 on April 6!
  
  Attempting to create an invalid time currently causes a fatal error.
  This may change in future version of this module.
  
  =head3 DateTime->from_epoch( epoch => $epoch, ... )
  
  This class method can be used to construct a new DateTime object from
  an epoch time instead of components. Just as with the C<new()>
  method, it accepts "time_zone", "locale", and "formatter" parameters.
  
  If the epoch value is a floating-point value, it will be rounded to
  nearest microsecond.
  
  By default, the returned object will be in the UTC time zone.
  
  =head3 DateTime->now( ... )
  
  This class method is equivalent to calling C<from_epoch()> with the
  value returned from Perl's C<time()> function. Just as with the
  C<new()> method, it accepts "time_zone" and "locale" parameters.
  
  By default, the returned object will be in the UTC time zone.
  
  =head3 DateTime->today( ... )
  
  This class method is equivalent to:
  
    DateTime->now(@_)->truncate( to => 'day' );
  
  =head3 DateTime->from_object( object => $object, ... )
  
  This class method can be used to construct a new DateTime object from
  any object that implements the C<utc_rd_values()> method. All
  C<DateTime::Calendar> modules must implement this method in order to
  provide cross-calendar compatibility. This method accepts a
  "locale" and "formatter" parameter
  
  If the object passed to this method has a C<time_zone()> method, that
  is used to set the time zone of the newly created C<DateTime.pm>
  object.
  
  Otherwise, the returned object will be in the floating time zone.
  
  =head3 DateTime->last_day_of_month( ... )
  
  This constructor takes the same arguments as can be given to the
  C<new()> method, except for "day". Additionally, both "year" and
  "month" are required.
  
  =head3 DateTime->from_day_of_year( ... )
  
  This constructor takes the same arguments as can be given to the
  C<new()> method, except that it does not accept a "month" or "day"
  argument. Instead, it requires both "year" and "day_of_year". The
  day of year must be between 1 and 366, and 366 is only allowed for
  leap years.
  
  =head3 $dt->clone()
  
  This object method returns a new object that is replica of the object
  upon which the method is called.
  
  =head2 "Get" Methods
  
  This class has many methods for retrieving information about an
  object.
  
  =head3 $dt->year()
  
  Returns the year.
  
  =head3 $dt->ce_year()
  
  Returns the year according to the BCE/CE numbering system. The year
  before year 1 in this system is year -1, aka "1 BCE".
  
  =head3 $dt->era_name()
  
  Returns the long name of the current era, something like "Before
  Christ". See the L<Locales|/Locales> section for more details.
  
  =head3 $dt->era_abbr()
  
  Returns the abbreviated name of the current era, something like "BC".
  See the L<Locales|/Locales> section for more details.
  
  =head3 $dt->christian_era()
  
  Returns a string, either "BC" or "AD", according to the year.
  
  =head3 $dt->secular_era()
  
  Returns a string, either "BCE" or "CE", according to the year.
  
  =head3 $dt->year_with_era()
  
  Returns a string containing the year immediately followed by its era
  abbreviation. The year is the absolute value of C<ce_year()>, so that
  year 1 is "1AD" and year 0 is "1BC".
  
  =head3 $dt->year_with_christian_era()
  
  Like C<year_with_era()>, but uses the christian_era() method to get the era
  name.
  
  =head3 $dt->year_with_secular_era()
  
  Like C<year_with_era()>, but uses the secular_era() method to get the
  era name.
  
  =head3 $dt->month()
  
  Returns the month of the year, from 1..12.
  
  Also available as C<< $dt->mon() >>.
  
  =head3 $dt->month_name()
  
  Returns the name of the current month. See the
  L<Locales|/Locales> section for more details.
  
  =head3 $dt->month_abbr()
  
  Returns the abbreviated name of the current month. See the
  L<Locales|/Locales> section for more details.
  
  =head3 $dt->day()
  
  Returns the day of the month, from 1..31.
  
  Also available as C<< $dt->mday() >> and C<< $dt->day_of_month() >>.
  
  =head3 $dt->day_of_week()
  
  Returns the day of the week as a number, from 1..7, with 1 being
  Monday and 7 being Sunday.
  
  Also available as C<< $dt->wday() >> and C<< $dt->dow() >>.
  
  =head3 $dt->local_day_of_week()
  
  Returns the day of the week as a number, from 1..7. The day
  corresponding to 1 will vary based on the locale.
  
  =head3 $dt->day_name()
  
  Returns the name of the current day of the week. See the
  L<Locales|/Locales> section for more details.
  
  =head3 $dt->day_abbr()
  
  Returns the abbreviated name of the current day of the week. See the
  L<Locales|/Locales> section for more details.
  
  =head3 $dt->day_of_year()
  
  Returns the day of the year.
  
  Also available as C<< $dt->doy() >>.
  
  =head3 $dt->quarter()
  
  Returns the quarter of the year, from 1..4.
  
  =head3 $dt->quarter_name()
  
  Returns the name of the current quarter. See the
  L<Locales|/Locales> section for more details.
  
  =head3 $dt->quarter_abbr()
  
  Returns the abbreviated name of the current quarter. See the
  L<Locales|/Locales> section for more details.
  
  =head3 $dt->day_of_quarter()
  
  Returns the day of the quarter.
  
  Also available as C<< $dt->doq() >>.
  
  =head3 $dt->weekday_of_month()
  
  Returns a number from 1..5 indicating which week day of the month this
  is. For example, June 9, 2003 is the second Monday of the month, and
  so this method returns 2 for that day.
  
  =head3 $dt->ymd( $optional_separator ), $dt->mdy(...), $dt->dmy(...)
  
  Each method returns the year, month, and day, in the order indicated
  by the method name. Years are zero-padded to four digits. Months and
  days are 0-padded to two digits.
  
  By default, the values are separated by a dash (-), but this can be
  overridden by passing a value to the method.
  
  The C<< $dt->ymd() >> method is also available as C<< $dt->date() >>.
  
  =head3 $dt->hour()
  
  Returns the hour of the day, from 0..23.
  
  =head3 $dt->hour_1()
  
  Returns the hour of the day, from 1..24.
  
  =head3 $dt->hour_12()
  
  Returns the hour of the day, from 1..12.
  
  =head3 $dt->hour_12_0()
  
  Returns the hour of the day, from 0..11.
  
  =head3 $dt->am_or_pm()
  
  Returns the appropriate localized abbreviation, depending on the
  current hour.
  
  =head3 $dt->minute()
  
  Returns the minute of the hour, from 0..59.
  
  Also available as C<< $dt->min() >>.
  
  =head3 $dt->second()
  
  Returns the second, from 0..61. The values 60 and 61 are used for
  leap seconds.
  
  Also available as C<< $dt->sec() >>.
  
  =head3 $dt->fractional_second()
  
  Returns the second, as a real number from 0.0 until 61.999999999
  
  The values 60 and 61 are used for leap seconds.
  
  =head3 $dt->millisecond()
  
  Returns the fractional part of the second as milliseconds (1E-3 seconds).
  
  Half a second is 500 milliseconds.
  
  This value will always be rounded down to the nearest integer.
  
  =head3 $dt->microsecond()
  
  Returns the fractional part of the second as microseconds (1E-6
  seconds).
  
  Half a second is 500_000 microseconds.
  
  This value will always be rounded down to the nearest integer.
  
  =head3 $dt->nanosecond()
  
  Returns the fractional part of the second as nanoseconds (1E-9 seconds).
  
  Half a second is 500_000_000 nanoseconds.
  
  =head3 $dt->hms( $optional_separator )
  
  Returns the hour, minute, and second, all zero-padded to two digits.
  If no separator is specified, a colon (:) is used by default.
  
  Also available as C<< $dt->time() >>.
  
  =head3 $dt->datetime()
  
  This method is equivalent to:
  
    $dt->ymd('-') . 'T' . $dt->hms(':')
  
  This method is also available as C<< $dt->iso8601() >>, but it's not really a
  very good ISO8601 format, as it lacks a time zone.
  
  =head3 $dt->is_leap_year()
  
  This method returns a true or false indicating whether or not the
  datetime object is in a leap year.
  
  =head3 $dt->week()
  
   ($week_year, $week_number) = $dt->week;
  
  Returns information about the calendar week which contains this
  datetime object. The values returned by this method are also available
  separately through the week_year and week_number methods.
  
  The first week of the year is defined by ISO as the one which contains
  the fourth day of January, which is equivalent to saying that it's the
  first week to overlap the new year by at least four days.
  
  Typically the week year will be the same as the year that the object
  is in, but dates at the very beginning of a calendar year often end up
  in the last week of the prior year, and similarly, the final few days
  of the year may be placed in the first week of the next year.
  
  =head3 $dt->week_year()
  
  Returns the year of the week. See C<< $dt->week() >> for details.
  
  =head3 $dt->week_number()
  
  Returns the week of the year, from 1..53. See C<< $dt->week() >> for details.
  
  =head3 $dt->week_of_month()
  
  The week of the month, from 0..5. The first week of the month is the
  first week that contains a Thursday. This is based on the ICU
  definition of week of month, and correlates to the ISO8601 week of
  year definition. A day in the week I<before> the week with the first
  Thursday will be week 0.
  
  =head3 $dt->jd(), $dt->mjd()
  
  These return the Julian Day and Modified Julian Day, respectively.
  The value returned is a floating point number. The fractional portion
  of the number represents the time portion of the datetime.
  
  =head3 $dt->time_zone()
  
  This returns the C<DateTime::TimeZone> object for the datetime object.
  
  =head3 $dt->offset()
  
  This returns the offset from UTC, in seconds, of the datetime object
  according to the time zone.
  
  =head3 $dt->is_dst()
  
  Returns a boolean indicating whether or not the datetime object is
  currently in Daylight Saving Time or not.
  
  =head3 $dt->time_zone_long_name()
  
  This is a shortcut for C<< $dt->time_zone->name >>. It's provided so
  that one can use "%{time_zone_long_name}" as a strftime format
  specifier.
  
  =head3 $dt->time_zone_short_name()
  
  This method returns the time zone abbreviation for the current time
  zone, such as "PST" or "GMT". These names are B<not> definitive, and
  should not be used in any application intended for general use by
  users around the world.
  
  =head3 $dt->strftime( $format, ... )
  
  This method implements functionality similar to the C<strftime()>
  method in C. However, if given multiple format strings, then it will
  return multiple scalars, one for each format string.
  
  See the L<strftime Patterns> section for a list of all possible
  strftime patterns.
  
  If you give a pattern that doesn't exist, then it is simply treated as
  text.
  
  =head3 $dt->format_cldr( $format, ... )
  
  This method implements formatting based on the CLDR date patterns. If
  given multiple format strings, then it will return multiple scalars,
  one for each format string.
  
  See the L<CLDR Patterns> section for a list of all possible CLDR
  patterns.
  
  If you give a pattern that doesn't exist, then it is simply treated as
  text.
  
  =head3 $dt->epoch()
  
  Return the UTC epoch value for the datetime object. Internally, this
  is implemented using C<Time::Local>, which uses the Unix epoch even on
  machines with a different epoch (such as MacOS). Datetimes before the
  start of the epoch will be returned as a negative number.
  
  The return value from this method is always an integer.
  
  Since the epoch does not account for leap seconds, the epoch time for
  1972-12-31T23:59:60 (UTC) is exactly the same as that for
  1973-01-01T00:00:00.
  
  This module uses C<Time::Local> to calculate the epoch, which may or
  may not handle epochs before 1904 or after 2038 (depending on the size
  of your system's integers, and whether or not Perl was compiled with
  64-bit int support).
  
  =head3 $dt->hires_epoch()
  
  Returns the epoch as a floating point number. The floating point
  portion of the value represents the nanosecond value of the object.
  This method is provided for compatibility with the C<Time::HiRes>
  module.
  
  Note that this method suffers from the imprecision of floating point numbers,
  and the result may end up rounded to an arbitrary degree depending on your
  platform.
  
      my $dt = DateTime->new( year => 2012, nanosecond => 4 );
      say $dt->hires_epoch();
  
  On my system, this simply prints C<1325376000> because adding C<0.000000004>
  to C<1325376000> returns C<1325376000>.
  
  =head3 $dt->is_finite(), $dt->is_infinite()
  
  These methods allow you to distinguish normal datetime objects from
  infinite ones. Infinite datetime objects are documented in
  L<DateTime::Infinite|DateTime::Infinite>.
  
  =head3 $dt->utc_rd_values()
  
  Returns the current UTC Rata Die days, seconds, and nanoseconds as a
  three element list. This exists primarily to allow other calendar
  modules to create objects based on the values provided by this object.
  
  =head3 $dt->local_rd_values()
  
  Returns the current local Rata Die days, seconds, and nanoseconds as a
  three element list. This exists for the benefit of other modules
  which might want to use this information for date math, such as
  C<DateTime::Event::Recurrence>.
  
  =head3 $dt->leap_seconds()
  
  Returns the number of leap seconds that have happened up to the
  datetime represented by the object. For floating datetimes, this
  always returns 0.
  
  =head3 $dt->utc_rd_as_seconds()
  
  Returns the current UTC Rata Die days and seconds purely as seconds.
  This number ignores any fractional seconds stored in the object,
  as well as leap seconds.
  
  =head3 $dt->locale()
  
  Returns the current locale object.
  
  =head3 $dt->formatter()
  
  Returns current formatter object or class. See L<Formatters And
  Stringification> for details.
  
  =head2 "Set" Methods
  
  The remaining methods provided by C<DateTime.pm>, except where otherwise
  specified, return the object itself, thus making method chaining
  possible. For example:
  
    my $dt = DateTime->now->set_time_zone( 'Australia/Sydney' );
  
    my $first = DateTime
                  ->last_day_of_month( year => 2003, month => 3 )
                  ->add( days => 1 )
                  ->subtract( seconds => 1 );
  
  =head3 $dt->set( .. )
  
  This method can be used to change the local components of a date time. This
  method accepts any parameter allowed by the C<new()> method except for
  "locale" or "time_zone". Use C<set_locale()> and C<set_time_zone()> for those
  instead.
  
  This method performs parameter validation just like the C<new()> method.
  
  B<Do not use this method to do date math. Use the C<add()> and C<subtract()>
  methods instead.>
  
  =head3 $dt->set_year(), $dt->set_month(), etc.
  
  DateTime has a C<set_*> method for every item that can be passed to the
  constructor:
  
  =over 4
  
  =item * $dt->set_year()
  
  =item * $dt->set_month()
  
  =item * $dt->set_day()
  
  =item * $dt->set_hour()
  
  =item * $dt->set_minute()
  
  =item * $dt->set_second()
  
  =item * $dt->set_nanosecond()
  
  =back
  
  These are shortcuts to calling C<set()> with a single key. They all
  take a single parameter.
  
  =head3 $dt->truncate( to => ... )
  
  This method allows you to reset some of the local time components in the
  object to their "zero" values. The "to" parameter is used to specify which
  values to truncate, and it may be one of "year", "quarter", "month", "week",
  "local_week", "day", "hour", "minute", or "second".
  
  For example, if "month" is specified, then the local day becomes 1, and the
  hour, minute, and second all become 0.
  
  If "week" is given, then the datetime is set to the Monday of the week in
  which it occurs, and the time components are all set to 0. If you truncate to
  "local_week", then the first day of the week is locale-dependent. For example,
  in the C<en-US> locale, the first day of the week is Sunday.
  
  =head3 $dt->set_locale( $locale )
  
  Sets the object's locale. You can provide either a locale code like "en-US" or
  an object returned by C<< DateTime::Locale->load >>.
  
  =head3 $dt->set_time_zone( $tz )
  
  This method accepts either a time zone object or a string that can be
  passed as the "name" parameter to C<< DateTime::TimeZone->new() >>.
  If the new time zone's offset is different from the old time zone,
  then the I<local> time is adjusted accordingly.
  
  For example:
  
    my $dt = DateTime->new(
        year      => 2000,
        month     => 5,
        day       => 10,
        hour      => 15,
        minute    => 15,
        time_zone => 'America/Los_Angeles',
    );
  
    print $dt->hour; # prints 15
  
    $dt->set_time_zone( 'America/Chicago' );
  
    print $dt->hour; # prints 17
  
  If the old time zone was a floating time zone, then no adjustments to
  the local time are made, except to account for leap seconds. If the
  new time zone is floating, then the I<UTC> time is adjusted in order
  to leave the local time untouched.
  
  Fans of Tsai Ming-Liang's films will be happy to know that this does
  work:
  
    my $dt = DateTime->now( time_zone => 'Asia/Taipei' );
  
    $dt->set_time_zone( 'Europe/Paris' );
  
  Yes, now we can know "ni3 na4 bian1 ji2dian3?"
  
  =head3 $dt->set_formatter( $formatter )
  
  Set the formatter for the object. See L<Formatters And
  Stringification> for details.
  
  You can set this to C<undef> to revert to the default formatter.
  
  =head2 Math Methods
  
  Like the set methods, math related methods always return the object
  itself, to allow for chaining:
  
    $dt->add( days => 1 )->subtract( seconds => 1 );
  
  =head3 $dt->duration_class()
  
  This returns C<DateTime::Duration>, but exists so that a subclass of
  C<DateTime.pm> can provide a different value.
  
  =head3 $dt->add_duration( $duration_object )
  
  This method adds a C<DateTime::Duration> to the current datetime. See
  the L<DateTime::Duration|DateTime::Duration> docs for more details.
  
  =head3 $dt->add( DateTime::Duration->new parameters )
  
  This method is syntactic sugar around the C<add_duration()> method. It
  simply creates a new C<DateTime::Duration> object using the parameters
  given, and then calls the C<add_duration()> method.
  
  =head3 $dt->subtract_duration( $duration_object )
  
  When given a C<DateTime::Duration> object, this method simply calls
  C<invert()> on that object and passes that new duration to the
  C<add_duration> method.
  
  =head3 $dt->subtract( DateTime::Duration->new parameters )
  
  Like C<add()>, this is syntactic sugar for the C<subtract_duration()>
  method.
  
  =head3 $dt->subtract_datetime( $datetime )
  
  This method returns a new C<DateTime::Duration> object representing
  the difference between the two dates. The duration is B<relative> to
  the object from which C<$datetime> is subtracted. For example:
  
      2003-03-15 00:00:00.00000000
   -  2003-02-15 00:00:00.00000000
   -------------------------------
   = 1 month
  
  Note that this duration is not an absolute measure of the amount of
  time between the two datetimes, because the length of a month varies,
  as well as due to the presence of leap seconds.
  
  The returned duration may have deltas for months, days, minutes,
  seconds, and nanoseconds.
  
  =head3 $dt->delta_md( $datetime )
  
  =head3 $dt->delta_days( $datetime )
  
  Each of these methods returns a new C<DateTime::Duration> object
  representing some portion of the difference between two datetimes.
  The C<delta_md()> method returns a duration which contains only the
  month and day portions of the duration is represented. The
  C<delta_days()> method returns a duration which contains only days.
  
  The C<delta_md> and C<delta_days> methods truncate the duration so
  that any fractional portion of a day is ignored. Both of these
  methods operate on the date portion of a datetime only, and so
  effectively ignore the time zone.
  
  Unlike the subtraction methods, B<these methods always return a
  positive (or zero) duration>.
  
  =head3 $dt->delta_ms( $datetime )
  
  Returns a duration which contains only minutes and seconds. Any day
  and month differences to minutes are converted to minutes and
  seconds. This method also B<always return a positive (or zero)
  duration>.
  
  =head3 $dt->subtract_datetime_absolute( $datetime )
  
  This method returns a new C<DateTime::Duration> object representing
  the difference between the two dates in seconds and nanoseconds. This
  is the only way to accurately measure the absolute amount of time
  between two datetimes, since units larger than a second do not
  represent a fixed number of seconds.
  
  Note that because of leap seconds, this may not return the same result as
  doing this math based on the value returned by C<< $dt->epoch() >>.
  
  =head2 Class Methods
  
  =head3 DateTime->DefaultLocale( $locale )
  
  This can be used to specify the default locale to be used when
  creating DateTime objects. If unset, then "en-US" is used.
  
  =head3 DateTime->compare( $dt1, $dt2 ), DateTime->compare_ignore_floating( $dt1, $dt2 )
  
    $cmp = DateTime->compare( $dt1, $dt2 );
  
    $cmp = DateTime->compare_ignore_floating( $dt1, $dt2 );
  
  Compare two DateTime objects. The semantics are compatible with Perl's
  C<sort()> function; it returns -1 if $dt1 < $dt2, 0 if $dt1 == $dt2, 1 if $dt1
  > $dt2.
  
  If one of the two DateTime objects has a floating time zone, it will
  first be converted to the time zone of the other object. This is what
  you want most of the time, but it can lead to inconsistent results
  when you compare a number of DateTime objects, some of which are
  floating, and some of which are in other time zones.
  
  If you want to have consistent results (because you want to sort a
  number of objects, for example), you can use the
  C<compare_ignore_floating()> method:
  
    @dates = sort { DateTime->compare_ignore_floating($a, $b) } @dates;
  
  In this case, objects with a floating time zone will be sorted as if
  they were UTC times.
  
  Since DateTime objects overload comparison operators, this:
  
    @dates = sort @dates;
  
  is equivalent to this:
  
    @dates = sort { DateTime->compare($a, $b) } @dates;
  
  DateTime objects can be compared to any other calendar class that
  implements the C<utc_rd_values()> method.
  
  =head2 Testing Code That Uses DateTime
  
  If you are trying to test code that calls uses DateTime, you may want to be
  able to explicitly set the value returned by Perl's C<time()> builtin. This
  builtin is called by C<< DateTime->now() >> and C<< DateTime->today() >>.
  
  You can  override C<CORE::GLOBAL::time()>, but this  will only work if  you do
  this B<before> loading  DateTime. If doing this is inconvenient,  you can also
  override C<DateTime::_core_time()>:
  
      no warnings 'redefine';
      local *DateTime::_core_time = sub { return 42 };
  
  DateTime is guaranteed to call this subroutine to get the current C<time()>
  value. You can also override the C<_core_time()> sub in a subclass of DateTime
  and use that.
  
  =head2 How DateTime Math Works
  
  It's important to have some understanding of how datetime math is
  implemented in order to effectively use this module and
  C<DateTime::Duration>.
  
  =head3 Making Things Simple
  
  If you want to simplify your life and not have to think too hard about
  the nitty-gritty of datetime math, I have several recommendations:
  
  =over 4
  
  =item * use the floating time zone
  
  If you do not care about time zones or leap seconds, use the
  "floating" timezone:
  
    my $dt = DateTime->now( time_zone => 'floating' );
  
  Math done on two objects in the floating time zone produces very
  predictable results.
  
  Note that in most cases you will want to start by creating an object in a
  specific zone and I<then> convert it to the floating time zone. When an object
  goes from a real zone to the floating zone, the time for the object remains
  the same.
  
  This means that passing the floating zone to a constructor may not do what you
  want.
  
    my $dt = DateTime->now( time_zone => 'floating' );
  
  is equivalent to
  
    my $dt = DateTime->now( time_zone => 'UTC' )->set_time_zone('floating');
  
  This might not be what you wanted. Instead, you may prefer to do this:
  
    my $dt = DateTime->now( time_zone => 'local' )->set_time_zone('floating');
  
  =item * use UTC for all calculations
  
  If you do care about time zones (particularly DST) or leap seconds,
  try to use non-UTC time zones for presentation and user input only.
  Convert to UTC immediately and convert back to the local time zone for
  presentation:
  
    my $dt = DateTime->new( %user_input, time_zone => $user_tz );
    $dt->set_time_zone('UTC');
  
    # do various operations - store it, retrieve it, add, subtract, etc.
  
    $dt->set_time_zone($user_tz);
    print $dt->datetime;
  
  =item * math on non-UTC time zones
  
  If you need to do date math on objects with non-UTC time zones, please
  read the caveats below carefully. The results C<DateTime.pm> produces are
  predictable and correct, and mostly intuitive, but datetime math gets
  very ugly when time zones are involved, and there are a few strange
  corner cases involving subtraction of two datetimes across a DST
  change.
  
  If you can always use the floating or UTC time zones, you can skip
  ahead to L<Leap Seconds and Date Math|Leap Seconds and Date Math>
  
  =item * date vs datetime math
  
  If you only care about the date (calendar) portion of a datetime, you
  should use either C<delta_md()> or C<delta_days()>, not
  C<subtract_datetime()>. This will give predictable, unsurprising
  results, free from DST-related complications.
  
  =item * subtract_datetime() and add_duration()
  
  You must convert your datetime objects to the UTC time zone before
  doing date math if you want to make sure that the following formulas
  are always true:
  
    $dt2 - $dt1 = $dur
    $dt1 + $dur = $dt2
    $dt2 - $dur = $dt1
  
  Note that using C<delta_days> ensures that this formula always works,
  regardless of the timezone of the objects involved, as does using
  C<subtract_datetime_absolute()>. Other methods of subtraction are not
  always reversible.
  
  =item * never do math on two objects where only is in the floating time zone
  
  The date math code accounts for leap seconds whenever the C<DateTime> object
  is not in the floating time zone. If you try to do math where one object is in
  the floating zone and the other isn't, the results will be confusing and
  wrong.
  
  =back
  
  =head3 Adding a Duration to a Datetime
  
  The parts of a duration can be broken down into five parts. These are
  months, days, minutes, seconds, and nanoseconds. Adding one month to
  a date is different than adding 4 weeks or 28, 29, 30, or 31 days.
  Similarly, due to DST and leap seconds, adding a day can be different
  than adding 86,400 seconds, and adding a minute is not exactly the
  same as 60 seconds.
  
  We cannot convert between these units, except for seconds and
  nanoseconds, because there is no fixed conversion between the two
  units, because of things like leap seconds, DST changes, etc.
  
  C<DateTime.pm> always adds (or subtracts) days, then months, minutes, and then
  seconds and nanoseconds. If there are any boundary overflows, these are
  normalized at each step. For the days and months the local (not UTC) values
  are used. For minutes and seconds, the local values are used. This generally
  just works.
  
  This means that adding one month and one day to February 28, 2003 will
  produce the date April 1, 2003, not March 29, 2003.
  
    my $dt = DateTime->new( year => 2003, month => 2, day => 28 );
  
    $dt->add( months => 1, days => 1 );
  
    # 2003-04-01 - the result
  
  On the other hand, if we add months first, and then separately add
  days, we end up with March 29, 2003:
  
    $dt->add( months => 1 )->add( days => 1 );
  
    # 2003-03-29
  
  We see similar strangeness when math crosses a DST boundary:
  
    my $dt = DateTime->new(
        year      => 2003,
        month     => 4,
        day       => 5,
        hour      => 1,
        minute    => 58,
        time_zone => "America/Chicago",
    );
  
    $dt->add( days => 1, minutes => 3 );
    # 2003-04-06 02:01:00
  
    $dt->add( minutes => 3 )->add( days => 1 );
    # 2003-04-06 03:01:00
  
  Note that if you converted the datetime object to UTC first you would
  get predictable results.
  
  If you want to know how many seconds a duration object represents, you
  have to add it to a datetime to find out, so you could do:
  
   my $now = DateTime->now( time_zone => 'UTC' );
   my $later = $now->clone->add_duration($duration);
  
   my $seconds_dur = $later->subtract_datetime_absolute($now);
  
  This returns a duration which only contains seconds and nanoseconds.
  
  If we were add the duration to a different datetime object we might
  get a different number of seconds.
  
  L<DateTime::Duration> supports three different end-of-month algorithms for
  adding months. This comes into play when an addition results in a day past the
  end of the month (for example, adding one month to January 30).
  
   # 2010-08-31 + 1 month = 2010-10-01
   $dt->add( months => 1, end_of_month => 'wrap' );
  
   # 2010-01-30 + 1 month = 2010-02-28
   $dt->add( months => 1, end_of_month => 'limit' );
  
   # 2010-04-30 + 1 month = 2010-05-31
   $dt->add( months => 1, end_of_month => 'preserve' );
  
  By default, it uses "wrap" for positive durations and "preserve" for negative
  durations. See L<DateTime::Duration> for a detailed explanation of these
  algorithms.
  
  If you need to do lots of work with durations, take a look at Rick
  Measham's C<DateTime::Format::Duration> module, which lets you present
  information from durations in many useful ways.
  
  There are other subtract/delta methods in DateTime.pm to generate
  different types of durations. These methods are
  C<subtract_datetime()>, C<subtract_datetime_absolute()>,
  C<delta_md()>, C<delta_days()>, and C<delta_ms()>.
  
  =head3 Datetime Subtraction
  
  Date subtraction is done solely based on the two object's local
  datetimes, with one exception to handle DST changes. Also, if the two
  datetime objects are in different time zones, one of them is converted
  to the other's time zone first before subtraction. This is best
  explained through examples:
  
  The first of these probably makes the most sense:
  
    my $dt1 = DateTime->new(
        year      => 2003,
        month     => 5,
        day       => 6,
        time_zone => 'America/Chicago',
    );
  
    # not DST
  
    my $dt2 = DateTime->new(
        year      => 2003,
        month     => 11,
        day       => 6,
        time_zone => 'America/Chicago',
    );
  
    # is DST
  
    my $dur = $dt2->subtract_datetime($dt1);
    # 6 months
  
  Nice and simple.
  
  This one is a little trickier, but still fairly logical:
  
    my $dt1 = DateTime->new(
        year      => 2003,
        month     => 4,
        day       => 5,
        hour      => 1,
        minute    => 58,
        time_zone => "America/Chicago",
    );
  
    # is DST
  
    my $dt2 = DateTime->new(
        year      => 2003,
        month     => 4,
        day       => 7,
        hour      => 2,
        minute    => 1,
        time_zone => "America/Chicago",
    );
  
    # not DST
  
    my $dur = $dt2->subtract_datetime($dt1);
  
    # 2 days and 3 minutes
  
  Which contradicts the result this one gives, even though they both
  make sense:
  
    my $dt1 = DateTime->new(
        year      => 2003,
        month     => 4,
        day       => 5,
        hour      => 1,
        minute    => 58,
        time_zone => "America/Chicago",
    );
  
    # is DST
  
    my $dt2 = DateTime->new(
        year      => 2003,
        month     => 4,
        day       => 6,
        hour      => 3,
        minute    => 1,
        time_zone => "America/Chicago",
    );
  
    # not DST
  
    my $dur = $dt2->subtract_datetime($dt1);
  
    # 1 day and 3 minutes
  
  This last example illustrates the "DST" exception mentioned earlier.
  The exception accounts for the fact 2003-04-06 only lasts 23 hours.
  
  And finally:
  
    my $dt2 = DateTime->new(
        year      => 2003,
        month     => 10,
        day       => 26,
        hour      => 1,
        time_zone => 'America/Chicago',
    );
  
    my $dt1 = $dt2->clone->subtract( hours => 1 );
  
    my $dur = $dt2->subtract_datetime($dt1);
    # 60 minutes
  
  This seems obvious until you realize that subtracting 60 minutes from
  C<$dt2> in the above example still leaves the clock time at
  "01:00:00". This time we are accounting for a 25 hour day.
  
  =head3 Reversibility
  
  Date math operations are not always reversible. This is because of
  the way that addition operations are ordered. As was discussed
  earlier, adding 1 day and 3 minutes in one call to C<add()> is not the
  same as first adding 3 minutes and 1 day in two separate calls.
  
  If we take a duration returned from C<subtract_datetime()> and then
  try to add or subtract that duration from one of the datetimes we just
  used, we sometimes get interesting results:
  
    my $dt1 = DateTime->new(
        year      => 2003,
        month     => 4,
        day       => 5,
        hour      => 1,
        minute    => 58,
        time_zone => "America/Chicago",
    );
  
    my $dt2 = DateTime->new(
        year      => 2003,
        month     => 4,
        day       => 6,
        hour      => 3,
        minute    => 1,
        time_zone => "America/Chicago",
    );
  
    my $dur = $dt2->subtract_datetime($dt1);
    # 1 day and 3 minutes
  
    $dt1->add_duration($dur);
    # gives us $dt2
  
    $dt2->subtract_duration($dur);
    # gives us 2003-04-05 02:58:00 - 1 hour later than $dt1
  
  The C<subtract_duration()> operation gives us a (perhaps) unexpected
  answer because it first subtracts one day to get 2003-04-05T03:01:00
  and then subtracts 3 minutes to get the final result.
  
  If we explicitly reverse the order we can get the original value of
  C<$dt1>. This can be facilitated by C<DateTime::Duration>'s
  C<calendar_duration()> and C<clock_duration()> methods:
  
    $dt2->subtract_duration( $dur->clock_duration )
        ->subtract_duration( $dur->calendar_duration );
  
  =head3 Leap Seconds and Date Math
  
  The presence of leap seconds can cause even more anomalies in date
  math. For example, the following is a legal datetime:
  
    my $dt = DateTime->new(
        year      => 1972,
        month     => 12,
        day       => 31,
        hour      => 23,
        minute    => 59,
        second    => 60,
        time_zone => 'UTC'
    );
  
  If we do the following:
  
   $dt->add( months => 1 );
  
  Then the datetime is now "1973-02-01 00:00:00", because there is no
  23:59:60 on 1973-01-31.
  
  Leap seconds also force us to distinguish between minutes and seconds
  during date math. Given the following datetime:
  
    my $dt = DateTime->new(
        year      => 1972,
        month     => 12,
        day       => 31,
        hour      => 23,
        minute    => 59,
        second    => 30,
        time_zone => 'UTC'
    );
  
  we will get different results when adding 1 minute than we get if we
  add 60 seconds. This is because in this case, the last minute of the
  day, beginning at 23:59:00, actually contains 61 seconds.
  
  Here are the results we get:
  
    # 1972-12-31 23:59:30 - our starting datetime
  
    $dt->clone->add( minutes => 1 );
    # 1973-01-01 00:00:30 - one minute later
  
    $dt->clone->add( seconds => 60 );
    # 1973-01-01 00:00:29 - 60 seconds later
  
    $dt->clone->add( seconds => 61 );
    # 1973-01-01 00:00:30 - 61 seconds later
  
  =head3 Local vs. UTC and 24 hours vs. 1 day
  
  When math crosses a daylight saving boundary, a single day may have
  more or less than 24 hours.
  
  For example, if you do this:
  
    my $dt = DateTime->new(
        year      => 2003,
        month     => 4,
        day       => 5,
        hour      => 2,
        time_zone => 'America/Chicago',
    );
  
    $dt->add( days => 1 );
  
  then you will produce an I<invalid> local time, and therefore an
  exception will be thrown.
  
  However, this works:
  
    my $dt = DateTime->new(
        year      => 2003,
        month     => 4,
        day       => 5,
        hour      => 2,
        time_zone => 'America/Chicago',
    );
  
    $dt->add( hours => 24 );
  
  and produces a datetime with the local time of "03:00".
  
  If all this makes your head hurt, there is a simple alternative. Just
  convert your datetime object to the "UTC" time zone before doing date
  math on it, and switch it back to the local time zone afterwards.
  This avoids the possibility of having date math throw an exception,
  and makes sure that 1 day equals 24 hours. Of course, this may not
  always be desirable, so caveat user!
  
  =head2 Overloading
  
  This module explicitly overloads the addition (+), subtraction (-),
  string and numeric comparison operators. This means that the
  following all do sensible things:
  
    my $new_dt = $dt + $duration_obj;
  
    my $new_dt = $dt - $duration_obj;
  
    my $duration_obj = $dt - $new_dt;
  
    foreach my $dt ( sort @dts ) { ... }
  
  Additionally, the fallback parameter is set to true, so other
  derivable operators (+=, -=, etc.) will work properly. Do not expect
  increment (++) or decrement (--) to do anything useful.
  
  The string comparison operators, C<eq> or C<ne>, will use the string
  value to compare with non-DateTime objects.
  
  DateTime objects do not have a numeric value, using C<==> or C<< <=>
  >> to compare a DateTime object with a non-DateTime object will result
  in an exception. To safely sort mixed DateTime and non-DateTime
  objects, use C<sort { $a cmp $b } @dates>.
  
  The module also overloads stringification using the object's
  formatter, defaulting to C<iso8601()> method. See L<Formatters And
  Stringification> for details.
  
  =head2 Formatters And Stringification
  
  You can optionally specify a "formatter", which is usually a
  DateTime::Format::* object/class, to control the stringification of
  the DateTime object.
  
  Any of the constructor methods can accept a formatter argument:
  
    my $formatter = DateTime::Format::Strptime->new(...);
    my $dt = DateTime->new(year => 2004, formatter => $formatter);
  
  Or, you can set it afterwards:
  
    $dt->set_formatter($formatter);
    $formatter = $dt->formatter();
  
  Once you set the formatter, the overloaded stringification method will
  use the formatter. If unspecified, the C<iso8601()> method is used.
  
  A formatter can be handy when you know that in your application you
  want to stringify your DateTime objects into a special format all the
  time, for example to a different language.
  
  If you provide a formatter class name or object, it must implement a
  C<format_datetime> method. This method will be called with just the
  DateTime object as its argument.
  
  =head2 CLDR Patterns
  
  The CLDR pattern language is both more powerful and more complex than
  strftime. Unlike strftime patterns, you often have to explicitly
  escape text that you do not want formatted, as the patterns are simply
  letters without any prefix.
  
  For example, "yyyy-MM-dd" is a valid CLDR pattern. If you want to
  include any lower or upper case ASCII characters as-is, you can
  surround them with single quotes ('). If you want to include a single
  quote, you must escape it as two single quotes ('').
  
    'Today is ' EEEE
    'It is now' h 'o''clock' a
  
  Spaces and any non-letter text will always be passed through as-is.
  
  Many CLDR patterns which produce numbers will pad the number with
  leading zeroes depending on the length of the format specifier. For
  example, "h" represents the current hour from 1-12. If you specify
  "hh" then the 1-9 will have a leading zero prepended.
  
  However, CLDR often uses five of a letter to represent the narrow form
  of a pattern. This inconsistency is necessary for backwards
  compatibility.
  
  CLDR often distinguishes between the "format" and "stand-alone" forms
  of a pattern. The format pattern is used when the thing in question is
  being placed into a larger string. The stand-alone form is used when
  displaying that item by itself, for example in a calendar.
  
  It also often provides three sizes for each item, wide (the full
  name), abbreviated, and narrow. The narrow form is often just a single
  character, for example "T" for "Tuesday", and may not be unique.
  
  CLDR provides a fairly complex system for localizing time zones that
  we ignore entirely. The time zone patterns just use the information
  provided by C<DateTime::TimeZone>, and I<do not follow the CLDR spec>.
  
  The output of a CLDR pattern is always localized, when applicable.
  
  CLDR provides the following patterns:
  
  =over 4
  
  =item * G{1,3}
  
  The abbreviated era (BC, AD).
  
  =item * GGGG
  
  The wide era (Before Christ, Anno Domini).
  
  =item * GGGGG
  
  The narrow era, if it exists (and it mostly doesn't).
  
  =item * y and y{3,}
  
  The year, zero-prefixed as needed. Negative years will start with a "-",
  and this will be included in the length calculation.
  
  In other, words the "yyyyy" pattern will format year -1234 as "-1234", not
  "-01234".
  
  =item * yy
  
  This is a special case. It always produces a two-digit year, so "1976" becomes
  "76". Negative years will start with a "-", making them one character longer.
  
  =item * Y{1,}
  
  The year in "week of the year" calendars, from C<< $dt->week_year() >>.
  
  =item * u{1,}
  
  Same as "y" except that "uu" is not a special case.
  
  =item * Q{1,2}
  
  The quarter as a number (1..4).
  
  =item * QQQ
  
  The abbreviated format form for the quarter.
  
  =item * QQQQ
  
  The wide format form for the quarter.
  
  =item * q{1,2}
  
  The quarter as a number (1..4).
  
  =item * qqq
  
  The abbreviated stand-alone form for the quarter.
  
  =item * qqqq
  
  The wide stand-alone form for the quarter.
  
  =item * M{1,2]
  
  The numerical month.
  
  =item * MMM
  
  The abbreviated format form for the month.
  
  =item * MMMM
  
  The wide format form for the month.
  
  =item * MMMMM
  
  The narrow format form for the month.
  
  =item * L{1,2]
  
  The numerical month.
  
  =item * LLL
  
  The abbreviated stand-alone form for the month.
  
  =item * LLLL
  
  The wide stand-alone form for the month.
  
  =item * LLLLL
  
  The narrow stand-alone form for the month.
  
  =item * w{1,2}
  
  The week of the year, from C<< $dt->week_number() >>.
  
  =item * W
  
  The week of the month, from C<< $dt->week_of_month() >>.
  
  =item * d{1,2}
  
  The numeric day of the month.
  
  =item * D{1,3}
  
  The numeric day of the year.
  
  =item * F
  
  The day of the week in the month, from C<< $dt->weekday_of_month() >>.
  
  =item * g{1,}
  
  The modified Julian day, from C<< $dt->mjd() >>.
  
  =item * E{1,3} and eee
  
  The abbreviated format form for the day of the week.
  
  =item * EEEE and eeee
  
  The wide format form for the day of the week.
  
  =item * EEEEE and eeeee
  
  The narrow format form for the day of the week.
  
  =item * e{1,2}
  
  The I<local> numeric day of the week, from 1 to 7. This number depends
  on what day is considered the first day of the week, which varies by
  locale. For example, in the US, Sunday is the first day of the week,
  so this returns 2 for Monday.
  
  =item * c
  
  The numeric day of the week from 1 to 7, treating Monday as the first
  of the week, regardless of locale.
  
  =item * ccc
  
  The abbreviated stand-alone form for the day of the week.
  
  =item * cccc
  
  The wide stand-alone form for the day of the week.
  
  =item * ccccc
  
  The narrow format form for the day of the week.
  
  =item * a
  
  The localized form of AM or PM for the time.
  
  =item * h{1,2}
  
  The hour from 1-12.
  
  =item * H{1,2}
  
  The hour from 0-23.
  
  =item * K{1,2}
  
  The hour from 0-11.
  
  =item * k{1,2}
  
  The hour from 1-24.
  
  =item * j{1,2}
  
  The hour, in 12 or 24 hour form, based on the preferred form for the
  locale. In other words, this is equivalent to either "h{1,2}" or
  "H{1,2}".
  
  =item * m{1,2}
  
  The minute.
  
  =item * s{1,2}
  
  The second.
  
  =item * S{1,}
  
  The fractional portion of the seconds, rounded based on the length of
  the specifier. This returned I<without> a leading decimal point, but
  may have leading or trailing zeroes.
  
  =item * A{1,}
  
  The millisecond of the day, based on the current time. In other words,
  if it is 12:00:00.00, this returns 43200000.
  
  =item * z{1,3}
  
  The time zone short name.
  
  =item * zzzz
  
  The time zone long name.
  
  =item * Z{1,3}
  
  The time zone offset.
  
  =item * ZZZZ
  
  The time zone short name and the offset as one string, so something
  like "CDT-0500".
  
  =item * ZZZZZ
  
  The time zone offset as a sexagesimal number, so something like "-05:00".
  (This is useful for W3C format.)
  
  =item * v{1,3}
  
  The time zone short name.
  
  =item * vvvv
  
  The time zone long name.
  
  =item * V{1,3}
  
  The time zone short name.
  
  =item * VVVV
  
  The time zone long name.
  
  =back
  
  =head3 CLDR "Available Formats"
  
  The CLDR data includes pre-defined formats for various patterns such as "month
  and day" or "time of day". Using these formats lets you render information
  about a datetime in the most natural way for users from a given locale.
  
  These formats are indexed by a key that is itself a CLDR pattern. When you
  look these up, you get back a different CLDR pattern suitable for the locale.
  
  Let's look at some example We'll use C<2008-02-05T18:30:30> as our example
  datetime value, and see how this is rendered for the C<en-US> and C<fr-FR>
  locales.
  
  =over 4
  
  =item * C<MMMd>
  
  The abbreviated month and day as number. For C<en-US>, we get the pattern
  C<MMM d>, which renders as C<Feb 5>. For C<fr-FR>, we get the pattern
  C<d MMM>, which renders as C<5 févr.>.
  
  =item * C<yQQQ>
  
  The year and abbreviated quarter of year. For C<en-US>, we get the pattern
  C<QQQ y>, which renders as C<Q1 2008>. For C<fr-FR>, we get the same pattern,
  C<QQQ y>, which renders as C<T1 2008>.
  
  =item * C<hm>
  
  The 12-hour time of day without seconds.  For C<en-US>, we get the pattern
  C<h:mm a>, which renders as C<6:30 PM>. For C<fr-FR>, we get the exact same
  pattern and rendering.
  
  =back
  
  The available formats for each locale are documented in the POD for that
  locale. To get back the format, you use the C<< $locale->format_for >>
  method. For example:
  
      say $dt->format_cldr( $dt->locale->format_for('MMMd') );
  
  =head2 strftime Patterns
  
  The following patterns are allowed in the format string given to the
  C<< $dt->strftime() >> method:
  
  =over 4
  
  =item * %a
  
  The abbreviated weekday name.
  
  =item * %A
  
  The full weekday name.
  
  =item * %b
  
  The abbreviated month name.
  
  =item * %B
  
  The full month name.
  
  =item * %c
  
  The default datetime format for the object's locale.
  
  =item * %C
  
  The century number (year/100) as a 2-digit integer.
  
  =item * %d
  
  The day of the month as a decimal number (range 01 to 31).
  
  =item * %D
  
  Equivalent to %m/%d/%y. This is not a good standard format if you
  want folks from both the United States and the rest of the world to
  understand the date!
  
  =item * %e
  
  Like %d, the day of the month as a decimal number, but a leading zero
  is replaced by a space.
  
  =item * %F
  
  Equivalent to %Y-%m-%d (the ISO 8601 date format)
  
  =item * %G
  
  The ISO 8601 year with century as a decimal number. The 4-digit year
  corresponding to the ISO week number (see %V). This has the same
  format and value as %Y, except that if the ISO week number belongs to
  the previous or next year, that year is used instead. (TZ)
  
  =item * %g
  
  Like %G, but without century, i.e., with a 2-digit year (00-99).
  
  =item * %h
  
  Equivalent to %b.
  
  =item * %H
  
  The hour as a decimal number using a 24-hour clock (range 00 to 23).
  
  =item * %I
  
  The hour as a decimal number using a 12-hour clock (range 01 to 12).
  
  =item * %j
  
  The day of the year as a decimal number (range 001 to 366).
  
  =item * %k
  
  The hour (24-hour clock) as a decimal number (range 0 to 23); single
  digits are preceded by a blank. (See also %H.)
  
  =item * %l
  
  The hour (12-hour clock) as a decimal number (range 1 to 12); single
  digits are preceded by a blank. (See also %I.)
  
  =item * %m
  
  The month as a decimal number (range 01 to 12).
  
  =item * %M
  
  The minute as a decimal number (range 00 to 59).
  
  =item * %n
  
  A newline character.
  
  =item * %N
  
  The fractional seconds digits. Default is 9 digits (nanoseconds).
  
    %3N   milliseconds (3 digits)
    %6N   microseconds (6 digits)
    %9N   nanoseconds  (9 digits)
  
  This value will always be rounded down to the nearest integer.
  
  =item * %p
  
  Either `AM' or `PM' according to the given time value, or the
  corresponding strings for the current locale. Noon is treated as `pm'
  and midnight as `am'.
  
  =item * %P
  
  Like %p but in lowercase: `am' or `pm' or a corresponding string for
  the current locale.
  
  =item * %r
  
  The time in a.m. or p.m. notation. In the POSIX locale this is
  equivalent to `%I:%M:%S %p'.
  
  =item * %R
  
  The time in 24-hour notation (%H:%M). (SU) For a version including the
  seconds, see %T below.
  
  =item * %s
  
  The number of seconds since the epoch.
  
  =item * %S
  
  The second as a decimal number (range 00 to 61).
  
  =item * %t
  
  A tab character.
  
  =item * %T
  
  The time in 24-hour notation (%H:%M:%S).
  
  =item * %u
  
  The day of the week as a decimal, range 1 to 7, Monday being 1. See
  also %w.
  
  =item * %U
  
  The week number of the current year as a decimal number, range 00 to
  53, starting with the first Sunday as the first day of week 01. See
  also %V and %W.
  
  =item * %V
  
  The ISO 8601:1988 week number of the current year as a decimal number,
  range 01 to 53, where week 1 is the first week that has at least 4
  days in the current year, and with Monday as the first day of the
  week. See also %U and %W.
  
  =item * %w
  
  The day of the week as a decimal, range 0 to 6, Sunday being 0. See
  also %u.
  
  =item * %W
  
  The week number of the current year as a decimal number, range 00 to
  53, starting with the first Monday as the first day of week 01.
  
  =item * %x
  
  The default date format for the object's locale.
  
  =item * %X
  
  The default time format for the object's locale.
  
  =item * %y
  
  The year as a decimal number without a century (range 00 to 99).
  
  =item * %Y
  
  The year as a decimal number including the century.
  
  =item * %z
  
  The time-zone as hour offset from UTC. Required to emit
  RFC822-conformant dates (using "%a, %d %b %Y %H:%M:%S %z").
  
  =item * %Z
  
  The time zone or name or abbreviation.
  
  =item * %%
  
  A literal `%' character.
  
  =item * %{method}
  
  Any method name may be specified using the format C<%{method}> name
  where "method" is a valid C<DateTime.pm> object method.
  
  =back
  
  =head2 DateTime.pm and Storable
  
  DateTime implements Storable hooks in order to reduce the size of a
  serialized DateTime object.
  
  =head1 THE DATETIME PROJECT ECOSYSTEM
  
  This module is part of a larger ecosystem of modules in the DateTime
  family.
  
  =head2 L<DateTime::Set>
  
  The L<DateTime::Set> module represents sets (including recurrences) of
  datetimes. Many modules return sets or recurrences.
  
  =head2 Format Modules
  
  The various format modules exist to parse and format datetimes. For example,
  L<DateTime::Format::HTTP> parses dates according to the RFC 1123 format:
  
    my $datetime
        = DateTime::Format::HTTP->parse_datetime('Thu Feb  3 17:03:55 GMT 1994');
  
    print DateTime::Format::HTTP->format_datetime($datetime);
  
  Most format modules are suitable for use as a C<formatter> with a DateTime
  object.
  
  All format modules start with C<DateTime::Format::>.
  
  =head2 Calendar Modules
  
  There are a number of modules on CPAN that implement non-Gregorian calendars,
  such as the Chinese, Mayan, and Julian calendars.
  
  All calendar modules start with C<DateTime::Calendar::>.
  
  =head2 Event Modules
  
  There are a number of modules that calculate the dates for events, such as
  Easter, Sunrise, etc.
  
  All event modules start with C<DateTime::Event::>.
  
  =head2 Others
  
  There are many other modules that work with DateTime, including modules in the
  C<DateTimeX> namespace, as well as others.
  
  See the L<datetime wiki|http://datetime.perl.org> and
  L<search.cpan.org|http://search.cpan.org/search?query=datetime&mode=dist> for
  more details.
  
  =head1 KNOWN BUGS
  
  The tests in F<20infinite.t> seem to fail on some machines,
  particularly on Win32. This appears to be related to Perl's internal
  handling of IEEE infinity and NaN, and seems to be highly
  platform/compiler/phase of moon dependent.
  
  If you don't plan to use infinite datetimes you can probably ignore
  this. This will be fixed (perhaps) in future versions.
  
  =head1 SEE ALSO
  
  L<A Date with
  Perl|http://www.houseabsolute.com/presentations/a-date-with-perl/> - a talk
  I've given at a few YAPCs.
  
  L<datetime@perl.org mailing list|http://lists.perl.org/list/datetime.html>
  
  L<http://datetime.perl.org/>
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime>
  (or L<bug-datetime@rt.cpan.org|mailto:bug-datetime@rt.cpan.org>).
  
  There is a mailing list available for users of this distribution,
  L<mailto:datetime@perl.org>.
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 DONATIONS
  
  If you'd like to thank me for the work I've done on this module, please
  consider making a "donation" to me via PayPal. I spend a lot of free time
  creating free software, and would appreciate any support you'd care to offer.
  
  Please note that B<I am not suggesting that you must do this> in order for me
  to continue working on this particular software. I will continue to do so,
  inasmuch as I have in the past, for as long as it interests me.
  
  Similarly, a donation made in this way will probably not make me work on this
  software much more, unless I get so many donations that I can consider working
  on free software full time (let's all have a chuckle at that together).
  
  To donate, log into PayPal and send money to autarch@urth.org, or use the
  button at L<http://www.urth.org/~autarch/fs-donation.html>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 CONTRIBUTORS
  
  =for stopwords Ben Bennett Christian Hansen Daisuke Maki David E. Wheeler Doug Bell Flávio Soibelmann Glock Gregory Oschwald Iain Truskett Jason McIntosh Joshua Hoblitt Karen Etheridge Michael Conrad Nick Tonkin Olaf Alders Ovid Ricardo Signes Richard Bowen Ron Hill viviparous
  
  =over 4
  
  =item *
  
  Ben Bennett <fiji@limey.net>
  
  =item *
  
  Christian Hansen <chansen@cpan.org>
  
  =item *
  
  Daisuke Maki <dmaki@cpan.org>
  
  =item *
  
  David E. Wheeler <david@justatheory.com>
  
  =item *
  
  Doug Bell <madcityzen@gmail.com>
  
  =item *
  
  Flávio Soibelmann Glock <fglock@gmail.com>
  
  =item *
  
  Gregory Oschwald <oschwald@gmail.com>
  
  =item *
  
  Iain Truskett <deceased>
  
  =item *
  
  Jason McIntosh <jmac@jmac.org>
  
  =item *
  
  Joshua Hoblitt <jhoblitt@cpan.org>
  
  =item *
  
  Karen Etheridge <ether@cpan.org>
  
  =item *
  
  Michael Conrad <mike@nrdvana.net>
  
  =item *
  
  Nick Tonkin <1nickt@users.noreply.github.com>
  
  =item *
  
  Olaf Alders <olaf@wundersolutions.com>
  
  =item *
  
  Ovid <curtis_ovid_poe@yahoo.com>
  
  =item *
  
  Ricardo Signes <rjbs@cpan.org>
  
  =item *
  
  Richard Bowen <bowen@cpan.org>
  
  =item *
  
  Ron Hill <rkhill@cpan.org>
  
  =item *
  
  viviparous <viviparous@prc>
  
  =back
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
DATETIME

    $main::fatpacked{"DateTime/Duration.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_DURATION';
  package DateTime::Duration;
  
  use strict;
  use warnings;
  use namespace::autoclean;
  
  our $VERSION = '1.36';
  
  use Carp ();
  use DateTime;
  use DateTime::Helpers;
  use Params::Validate qw( validate SCALAR );
  
  use overload (
      fallback => 1,
      '+'      => '_add_overload',
      '-'      => '_subtract_overload',
      '*'      => '_multiply_overload',
      '<=>'    => '_compare_overload',
      'cmp'    => '_compare_overload',
  );
  
  use constant MAX_NANOSECONDS => 1_000_000_000;    # 1E9 = almost 32 bits
  
  my @all_units = qw( months days minutes seconds nanoseconds );
  
  # XXX - need to reject non-integers but accept infinity, NaN, &
  # 1.56e+18
  sub new {
      my $class = shift;
      my %p     = validate(
          @_, {
              years        => { type => SCALAR, default => 0 },
              months       => { type => SCALAR, default => 0 },
              weeks        => { type => SCALAR, default => 0 },
              days         => { type => SCALAR, default => 0 },
              hours        => { type => SCALAR, default => 0 },
              minutes      => { type => SCALAR, default => 0 },
              seconds      => { type => SCALAR, default => 0 },
              nanoseconds  => { type => SCALAR, default => 0 },
              end_of_month => {
                  type  => SCALAR, default => undef,
                  regex => qr/^(?:wrap|limit|preserve)$/
              },
          }
      );
  
      my $self = bless {}, $class;
  
      $self->{months} = ( $p{years} * 12 ) + $p{months};
  
      $self->{days} = ( $p{weeks} * 7 ) + $p{days};
  
      $self->{minutes} = ( $p{hours} * 60 ) + $p{minutes};
  
      $self->{seconds} = $p{seconds};
  
      if ( $p{nanoseconds} ) {
          $self->{nanoseconds} = $p{nanoseconds};
          $self->_normalize_nanoseconds;
      }
      else {
  
          # shortcut - if they don't need nanoseconds
          $self->{nanoseconds} = 0;
      }
  
      $self->{end_of_month} = (
            defined $p{end_of_month} ? $p{end_of_month}
          : $self->{months} < 0      ? 'preserve'
          :                            'wrap'
      );
  
      return $self;
  }
  
  # make the signs of seconds, nanos the same; 0 < abs(nanos) < MAX_NANOS
  # NB this requires nanoseconds != 0 (callers check this already)
  sub _normalize_nanoseconds {
      my $self = shift;
  
      return
          if ( $self->{nanoseconds} == DateTime::INFINITY()
          || $self->{nanoseconds} == DateTime::NEG_INFINITY()
          || $self->{nanoseconds} eq DateTime::NAN() );
  
      my $seconds = $self->{seconds} + $self->{nanoseconds} / MAX_NANOSECONDS;
      $self->{seconds}     = int($seconds);
      $self->{nanoseconds} = $self->{nanoseconds} % MAX_NANOSECONDS;
      $self->{nanoseconds} -= MAX_NANOSECONDS if $seconds < 0;
  }
  
  sub clone { bless { %{ $_[0] } }, ref $_[0] }
  
  sub years       { abs( $_[0]->in_units('years') ) }
  sub months      { abs( $_[0]->in_units( 'months', 'years' ) ) }
  sub weeks       { abs( $_[0]->in_units('weeks') ) }
  sub days        { abs( $_[0]->in_units( 'days', 'weeks' ) ) }
  sub hours       { abs( $_[0]->in_units('hours') ) }
  sub minutes     { abs( $_[0]->in_units( 'minutes', 'hours' ) ) }
  sub seconds     { abs( $_[0]->in_units('seconds') ) }
  sub nanoseconds { abs( $_[0]->in_units( 'nanoseconds', 'seconds' ) ) }
  
  sub is_positive { $_[0]->_has_positive  && !$_[0]->_has_negative }
  sub is_negative { !$_[0]->_has_positive && $_[0]->_has_negative }
  
  sub _has_positive {
      ( grep { $_ > 0 } @{ $_[0] }{@all_units} ) ? 1 : 0;
  }
  
  sub _has_negative {
      ( grep { $_ < 0 } @{ $_[0] }{@all_units} ) ? 1 : 0;
  }
  
  sub is_zero {
      return 0 if grep { $_ != 0 } @{ $_[0] }{@all_units};
      return 1;
  }
  
  sub delta_months      { $_[0]->{months} }
  sub delta_days        { $_[0]->{days} }
  sub delta_minutes     { $_[0]->{minutes} }
  sub delta_seconds     { $_[0]->{seconds} }
  sub delta_nanoseconds { $_[0]->{nanoseconds} }
  
  sub deltas {
      map { $_ => $_[0]->{$_} } @all_units;
  }
  
  sub in_units {
      my $self  = shift;
      my @units = @_;
  
      my %units = map { $_ => 1 } @units;
  
      my %ret;
  
      my ( $months, $days, $minutes, $seconds )
          = @{$self}{qw( months days minutes seconds )};
  
      if ( $units{years} ) {
          $ret{years} = int( $months / 12 );
          $months -= $ret{years} * 12;
      }
  
      if ( $units{months} ) {
          $ret{months} = $months;
      }
  
      if ( $units{weeks} ) {
          $ret{weeks} = int( $days / 7 );
          $days -= $ret{weeks} * 7;
      }
  
      if ( $units{days} ) {
          $ret{days} = $days;
      }
  
      if ( $units{hours} ) {
          $ret{hours} = int( $minutes / 60 );
          $minutes -= $ret{hours} * 60;
      }
  
      if ( $units{minutes} ) {
          $ret{minutes} = $minutes;
      }
  
      if ( $units{seconds} ) {
          $ret{seconds} = $seconds;
          $seconds = 0;
      }
  
      if ( $units{nanoseconds} ) {
          $ret{nanoseconds} = $seconds * MAX_NANOSECONDS + $self->{nanoseconds};
      }
  
      wantarray ? @ret{@units} : $ret{ $units[0] };
  }
  
  sub is_wrap_mode     { $_[0]->{end_of_month} eq 'wrap'     ? 1 : 0 }
  sub is_limit_mode    { $_[0]->{end_of_month} eq 'limit'    ? 1 : 0 }
  sub is_preserve_mode { $_[0]->{end_of_month} eq 'preserve' ? 1 : 0 }
  
  sub end_of_month_mode { $_[0]->{end_of_month} }
  
  sub calendar_duration {
      my $self = shift;
  
      return ( ref $self )
          ->new( map { $_ => $self->{$_} } qw( months days end_of_month ) );
  }
  
  sub clock_duration {
      my $self = shift;
  
      return ( ref $self )
          ->new( map { $_ => $self->{$_} }
              qw( minutes seconds nanoseconds end_of_month ) );
  }
  
  sub inverse {
      my $self = shift;
      my %p    = @_;
  
      my %new;
      foreach my $u (@all_units) {
          $new{$u} = $self->{$u};
  
          # avoid -0 bug
          $new{$u} *= -1 if $new{$u};
      }
  
      $new{end_of_month} = $p{end_of_month}
          if exists $p{end_of_month};
  
      return ( ref $self )->new(%new);
  }
  
  sub add_duration {
      my ( $self, $dur ) = @_;
  
      foreach my $u (@all_units) {
          $self->{$u} += $dur->{$u};
      }
  
      $self->_normalize_nanoseconds if $self->{nanoseconds};
  
      return $self;
  }
  
  sub add {
      my $self = shift;
  
      return $self->add_duration( ( ref $self )->new(@_) );
  }
  
  sub subtract_duration { return $_[0]->add_duration( $_[1]->inverse ) }
  
  sub subtract {
      my $self = shift;
  
      return $self->subtract_duration( ( ref $self )->new(@_) );
  }
  
  sub multiply {
      my $self       = shift;
      my $multiplier = shift;
  
      foreach my $u (@all_units) {
          $self->{$u} *= $multiplier;
      }
  
      $self->_normalize_nanoseconds if $self->{nanoseconds};
  
      return $self;
  }
  
  sub compare {
      my ( undef, $dur1, $dur2, $dt ) = @_;
  
      $dt ||= DateTime->now;
  
      return DateTime->compare(
          $dt->clone->add_duration($dur1),
          $dt->clone->add_duration($dur2)
      );
  }
  
  sub _add_overload {
      my ( $d1, $d2, $rev ) = @_;
  
      ( $d1, $d2 ) = ( $d2, $d1 ) if $rev;
  
      if ( DateTime::Helpers::isa( $d2, 'DateTime' ) ) {
          $d2->add_duration($d1);
          return;
      }
  
      # will also work if $d1 is a DateTime.pm object
      return $d1->clone->add_duration($d2);
  }
  
  sub _subtract_overload {
      my ( $d1, $d2, $rev ) = @_;
  
      ( $d1, $d2 ) = ( $d2, $d1 ) if $rev;
  
      Carp::croak(
          "Cannot subtract a DateTime object from a DateTime::Duration object")
          if DateTime::Helpers::isa( $d2, 'DateTime' );
  
      return $d1->clone->subtract_duration($d2);
  }
  
  sub _multiply_overload {
      my $self = shift;
  
      my $new = $self->clone;
  
      return $new->multiply(@_);
  }
  
  sub _compare_overload {
      Carp::croak( 'DateTime::Duration does not overload comparison.'
              . '  See the documentation on the compare() method for details.'
      );
  }
  
  1;
  
  # ABSTRACT: Duration objects for date math
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::Duration - Duration objects for date math
  
  =head1 VERSION
  
  version 1.36
  
  =head1 SYNOPSIS
  
    use DateTime::Duration;
  
    $dur = DateTime::Duration->new(
        years       => 3,
        months      => 5,
        weeks       => 1,
        days        => 1,
        hours       => 6,
        minutes     => 15,
        seconds     => 45,
        nanoseconds => 12000
    );
  
    my ( $days, $hours, $seconds ) = $dur->in_units('days', 'hours', 'seconds');
  
    # Human-readable accessors, always positive, but consider using
    # DateTime::Format::Duration instead
    $dur->years;
    $dur->months;
    $dur->weeks;
    $dur->days;
    $dur->hours;
    $dur->minutes;
    $dur->seconds;
    $dur->nanoseconds;
  
    $dur->is_wrap_mode
    $dur->is_limit_mode
    $dur->is_preserve_mode
  
    print $dur->end_of_month_mode;
  
    # Multiply all values by -1
    my $opposite = $dur->inverse;
  
    my $bigger  = $dur1 + $dur2;
    my $smaller = $dur1 - $dur2; # the result could be negative
    my $bigger  = $dur1 * 3;
  
    my $base_dt = DateTime->new( year => 2000 );
    my @sorted =
        sort { DateTime::Duration->compare( $a, $b, $base_dt ) } @durations;
  
    if ( $dur->is_positive ) { ... }
    if ( $dur->is_zero )     { ... }
    if ( $dur->is_negative ) { ... }
  
  =head1 DESCRIPTION
  
  This is a simple class for representing duration objects. These
  objects are used whenever you do date math with DateTime.pm.
  
  See the L<How DateTime Math Works|DateTime/"How DateTime Math Works"> section
  of the DateTime.pm documentation for more details. The short course: One
  cannot in general convert between seconds, minutes, days, and months, so this
  class will never do so. Instead, create the duration with the desired units to
  begin with, for example by calling the appropriate subtraction/delta method on
  a C<DateTime.pm> object.
  
  =head1 METHODS
  
  Like C<DateTime> itself, C<DateTime::Duration> returns the object from
  mutator methods in order to make method chaining possible.
  
  C<DateTime::Duration> has the following methods:
  
  =head2 DateTime::Duration->new( ... )
  
  This method takes the parameters "years", "months", "weeks", "days",
  "hours", "minutes", "seconds", "nanoseconds", and "end_of_month". All
  of these except "end_of_month" are numbers. If any of the numbers are
  negative, the entire duration is negative.
  
  All of the numbers B<must be integers>.
  
  Internally, years as just treated as 12 months. Similarly, weeks are
  treated as 7 days, and hours are converted to minutes. Seconds and
  nanoseconds are both treated separately.
  
  The "end_of_month" parameter must be either "wrap", "limit", or
  "preserve". This parameter specifies how date math that crosses the
  end of a month is handled.
  
  In "wrap" mode, adding months or years that result in days beyond the
  end of the new month will roll over into the following month. For
  instance, adding one year to Feb 29 will result in Mar 1.
  
  If you specify "end_of_month" mode as "limit", the end of the month is
  never crossed. Thus, adding one year to Feb 29, 2000 will result in
  Feb 28, 2001. If you were to then add three more years this will
  result in Feb 28, 2004.
  
  If you specify "end_of_month" mode as "preserve", the same calculation
  is done as for "limit" except that if the original date is at the end
  of the month the new date will also be. For instance, adding one
  month to Feb 29, 2000 will result in Mar 31, 2000.
  
  For positive durations, the "end_of_month" parameter defaults to wrap.
  For negative durations, the default is "limit". This should match how
  most people "intuitively" expect datetime math to work.
  
  =head2 $dur->clone()
  
  Returns a new object with the same properties as the object on which
  this method was called.
  
  =head2 $dur->in_units( ... )
  
  Returns the length of the duration in the units (any of those that can
  be passed to C<new>) given as arguments. All lengths are integral,
  but may be negative. Smaller units are computed from what remains
  after taking away the larger units given, so for example:
  
    my $dur = DateTime::Duration->new( years => 1, months => 15 );
  
    $dur->in_units( 'years' );            # 2
    $dur->in_units( 'months' );           # 27
    $dur->in_units( 'years', 'months' );  # (2, 3)
    $dur->in_units( 'weeks', 'days' );    # (0, 0) !
  
  The last example demonstrates that there will not be any conversion
  between units which don't have a fixed conversion rate. The only
  conversions possible are:
  
  =over 8
  
  =item * years <=> months
  
  =item * weeks <=> days
  
  =item * hours <=> minutes
  
  =item * seconds <=> nanoseconds
  
  =back
  
  For the explanation of why this is the case, please see the L<How DateTime
  Math Works|DateTime/"How DateTime Math Works"> section of the DateTime.pm
  documentation
  
  Note that the numbers returned by this method may not match the values
  given to the constructor.
  
  In list context, in_units returns the lengths in the order of the units
  given. In scalar context, it returns the length in the first unit (but
  still computes in terms of all given units).
  
  If you need more flexibility in presenting information about
  durations, please take a look a C<DateTime::Format::Duration>.
  
  =head2 $dur->is_positive(), $dur->is_zero(), $dur->is_negative()
  
  Indicates whether or not the duration is positive, zero, or negative.
  
  If the duration contains both positive and negative units, then it
  will return false for B<all> of these methods.
  
  =head2 $dur->is_wrap_mode(), $dur->is_limit_mode(), $dur->is_preserve_mode()
  
  Indicates what mode is used for end of month wrapping.
  
  =head2 $dur->end_of_month_mode()
  
  Returns one of "wrap", "limit", or "preserve".
  
  =head2 $dur->calendar_duration()
  
  Returns a new object with the same I<calendar> delta (months and days
  only) and end of month mode as the current object.
  
  =head2 $dur->clock_duration()
  
  Returns a new object with the same I<clock> deltas (minutes, seconds,
  and nanoseconds) and end of month mode as the current object.
  
  =head2 $dur->inverse( ... )
  
  Returns a new object with the same deltas as the current object, but
  multiple by -1. The end of month mode for the new object will be the
  default end of month mode, which depends on whether the new duration
  is positive or negative.
  
  You can set the end of month mode in the inverted duration explicitly by
  passing "end_of_month => ..." to the C<inverse()> method.
  
  =head2 $dur->add_duration( $duration_object ), $dur->subtract_duration( $duration_object )
  
  Adds or subtracts one duration from another.
  
  =head2 $dur->add( ... ), $dur->subtract( ... )
  
  Syntactic sugar for addition and subtraction. The parameters given to
  these methods are used to create a new object, which is then passed to
  C<add_duration()> or C<subtract_duration()>, as appropriate.
  
  =head2 $dur->multiply( $number )
  
  Multiplies each unit in the by the specified number.
  
  =head2 DateTime::Duration->compare( $duration1, $duration2, $base_datetime )
  
  This is a class method that can be used to compare or sort durations.
  Comparison is done by adding each duration to the specified
  C<DateTime.pm> object and comparing the resulting datetimes. This is
  necessary because without a base, many durations are not comparable.
  For example, 1 month may or may not be longer than 29 days, depending
  on what datetime it is added to.
  
  If no base datetime is given, then the result of C<< DateTime->now >>
  is used instead. Using this default will give non-repeatable results
  if used to compare two duration objects containing different units.
  It will also give non-repeatable results if the durations contain
  multiple types of units, such as months and days.
  
  However, if you know that both objects only consist of one type of
  unit (months I<or> days I<or> hours, etc.), and each duration contains
  the same type of unit, then the results of the comparison will be
  repeatable.
  
  =head2 $dur->delta_months(), $dur->delta_days(), $dur->delta_minutes(), $dur->delta_seconds(), $dur->delta_nanoseconds()
  
  These methods provide the information C<DateTime.pm> needs for doing date
  math. The numbers returned may be positive or negative. This is mostly useful
  for doing date math in L<DateTime>.
  
  =head2 $dur->deltas()
  
  Returns a hash with the keys "months", "days", "minutes", "seconds", and
  "nanoseconds", containing all the delta information for the object. This is
  mostly useful for doing date math in L<DateTime>.
  
  =head2 $dur->years(), $dur->months(), $dur->weeks(), $dur->days(), $dur->hours(), $dur->minutes(), $dur->seconds(), $dur->nanoseconds()
  
  These methods return numbers indicating how many of the given unit the
  object represents, after having done a conversion to any larger units.
  For example, days are first converted to weeks, and then the remainder
  is returned. These numbers are always positive.
  
  Here's what each method returns:
  
   $dur->years()       == abs( $dur->in_units('years') )
   $dur->months()      == abs( ( $dur->in_units( 'months', 'years' ) )[0] )
   $dur->weeks()       == abs( $dur->in_units( 'weeks' ) )
   $dur->days()        == abs( ( $dur->in_units( 'days', 'weeks' ) )[0] )
   $dur->hours()       == abs( $dur->in_units( 'hours' ) )
   $dur->minutes       == abs( ( $dur->in_units( 'minutes', 'hours' ) )[0] )
   $dur->seconds       == abs( $dur->in_units( 'seconds' ) )
   $dur->nanoseconds() == abs( ( $dur->in_units( 'nanoseconds', 'seconds' ) )[0] )
  
  If this seems confusing, remember that you can always use the
  C<in_units()> method to specify exactly what you want.
  
  Better yet, if you are trying to generate output suitable for humans,
  use the C<DateTime::Format::Duration> module.
  
  =head2 Overloading
  
  This class overloads addition, subtraction, and mutiplication.
  
  Comparison is B<not> overloaded. If you attempt to compare durations
  using C<< <=> >> or C<cmp>, then an exception will be thrown!  Use the
  C<compare()> class method instead.
  
  =head1 SEE ALSO
  
  datetime@perl.org mailing list
  
  http://datetime.perl.org/
  
  =head1 SUPPORT
  
  Support for this module is provided via the datetime@perl.org email
  list. See http://lists.perl.org/ for more details.
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime>
  (or L<bug-datetime@rt.cpan.org|mailto:bug-datetime@rt.cpan.org>).
  
  There is a mailing list available for users of this distribution,
  L<mailto:datetime@perl.org>.
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
DATETIME_DURATION

    $main::fatpacked{"DateTime/Helpers.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_HELPERS';
  package DateTime::Helpers;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.36';
  
  use Scalar::Util ();
  
  sub can {
      my $object = shift;
      my $method = shift;
  
      return unless Scalar::Util::blessed($object);
      return $object->can($method);
  }
  
  sub isa {
      my $object = shift;
      my $method = shift;
  
      return unless Scalar::Util::blessed($object);
      return $object->isa($method);
  }
  
  1;
DATETIME_HELPERS

    $main::fatpacked{"DateTime/Infinite.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_INFINITE';
  package DateTime::Infinite;
  
  use strict;
  use warnings;
  use namespace::autoclean;
  
  our $VERSION = '1.36';
  
  use DateTime;
  use DateTime::TimeZone;
  
  use base qw(DateTime);
  
  foreach my $m (qw( set set_time_zone truncate )) {
      no strict 'refs';
      *{"DateTime::Infinite::$m"} = sub { return $_[0] };
  }
  
  sub is_finite   {0}
  sub is_infinite {1}
  
  sub _rd2ymd {
      return $_[2] ? ( $_[1] ) x 7 : ( $_[1] ) x 3;
  }
  
  sub _seconds_as_components {
      return ( $_[1] ) x 3;
  }
  
  sub ymd {
      return $_[0]->iso8601;
  }
  
  sub mdy {
      return $_[0]->iso8601;
  }
  
  sub dmy {
      return $_[0]->iso8601;
  }
  
  sub hms {
      return $_[0]->iso8601;
  }
  
  sub hour_12 {
      return $_[0]->_infinity_string;
  }
  
  sub hour_12_0 {
      return $_[0]->_infinity_string;
  }
  
  sub iso8601 {
      return $_[0]->_infinity_string;
  }
  
  sub _stringify {
      return $_[0]->_infinity_string;
  }
  
  sub _infinity_string {
      return $_[0]->{utc_rd_days} == DateTime::INFINITY
          ? DateTime::INFINITY . ''
          : DateTime::NEG_INFINITY . '';
  }
  
  sub STORABLE_freeze {return}
  sub STORABLE_thaw   {return}
  
  package DateTime::Infinite::Future;
  
  use strict;
  use warnings;
  
  use base qw(DateTime::Infinite);
  
  {
      my $Pos = bless {
          utc_rd_days   => DateTime::INFINITY,
          utc_rd_secs   => DateTime::INFINITY,
          local_rd_days => DateTime::INFINITY,
          local_rd_secs => DateTime::INFINITY,
          rd_nanosecs   => DateTime::INFINITY,
          tz            => DateTime::TimeZone->new( name => 'floating' ),
          locale        => FakeLocale->instance(),
          },
          __PACKAGE__;
  
      $Pos->_calc_utc_rd;
      $Pos->_calc_local_rd;
  
      sub new {$Pos}
  }
  
  package DateTime::Infinite::Past;
  
  use strict;
  use warnings;
  
  use base qw(DateTime::Infinite);
  
  {
      my $Neg = bless {
          utc_rd_days   => DateTime::NEG_INFINITY,
          utc_rd_secs   => DateTime::NEG_INFINITY,
          local_rd_days => DateTime::NEG_INFINITY,
          local_rd_secs => DateTime::NEG_INFINITY,
          rd_nanosecs   => DateTime::NEG_INFINITY,
          tz            => DateTime::TimeZone->new( name => 'floating' ),
          locale        => FakeLocale->instance(),
          },
          __PACKAGE__;
  
      $Neg->_calc_utc_rd;
      $Neg->_calc_local_rd;
  
      sub new {$Neg}
  }
  
  package    # hide from PAUSE
      FakeLocale;
  
  use strict;
  use warnings;
  
  use DateTime::Locale;
  
  my $Instance;
  
  sub instance {
      return $Instance ||= bless { locale => DateTime::Locale->load('en_US') },
          __PACKAGE__;
  }
  
  sub id {
      return 'infinite';
  }
  
  sub language_id {
      return 'infinite';
  }
  
  sub name {
      'Fake locale for Infinite DateTime objects';
  }
  
  sub language {
      'Fake locale for Infinite DateTime objects';
  }
  
  my @methods = qw(
      script_id
      territory_id
      variant_id
      script
      territory
      variant
      native_name
      native_language
      native_script
      native_territory
      native_variant
  );
  
  for my $meth (@methods) {
      no strict 'refs';
      *{$meth} = sub {undef};
  }
  
  # Totally arbitrary
  sub first_day_of_week {
      return 1;
  }
  
  sub prefers_24_hour_time {
      return 0;
  }
  
  our $AUTOLOAD;
  
  sub AUTOLOAD {
      my $self = shift;
  
      my ($meth) = $AUTOLOAD =~ /::(\w+)$/;
  
      if ( $meth =~ /format/ && $meth !~ /^(?:day|month|quarter)/ ) {
          return $self->{locale}->$meth(@_);
      }
  
      return [];
  }
  
  1;
  
  # ABSTRACT: Infinite past and future DateTime objects
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::Infinite - Infinite past and future DateTime objects
  
  =head1 VERSION
  
  version 1.36
  
  =head1 SYNOPSIS
  
    my $future = DateTime::Infinite::Future->new();
    my $past   = DateTime::Infinite::Past->new();
  
  =head1 DESCRIPTION
  
  This module provides two L<DateTime.pm|DateTime> subclasses,
  C<DateTime::Infinite::Future> and C<DateTime::Infinite::Past>.
  
  The objects are in the "floating" timezone, and this cannot be
  changed.
  
  =head1 METHODS
  
  The only constructor for these two classes is the C<new()> method, as
  shown in the L<SYNOPSIS|/SYNOPSIS>. This method takes no parameters.
  
  All "get" methods in this module simply return infinity, positive or
  negative. If the method is expected to return a string, it returns the
  string representation of positive or negative infinity used by your
  system. For example, on my system calling C<year()> returns a number
  which when printed appears either "Inf" or "-Inf".
  
  This also applies to methods that are compound stringifications, which return
  the same strings even for things like C<ymd()> or C<iso8601()>
  
  The object is not mutable, so the C<set()>, C<set_time_zone()>, and
  C<truncate()> methods are all do-nothing methods that simply return
  the object they are called with.
  
  Obviously, the C<is_finite()> method returns false and the
  C<is_infinite()> method returns true.
  
  =head1 SEE ALSO
  
  datetime@perl.org mailing list
  
  http://datetime.perl.org/
  
  =head1 BUGS
  
  There seem to be lots of problems when dealing with infinite numbers
  on Win32. This may be a problem with this code, Perl, or Win32's IEEE
  math implementation. Either way, the module may not be well-behaved
  on Win32 operating systems.
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime>
  (or L<bug-datetime@rt.cpan.org|mailto:bug-datetime@rt.cpan.org>).
  
  There is a mailing list available for users of this distribution,
  L<mailto:datetime@perl.org>.
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
DATETIME_INFINITE

    $main::fatpacked{"DateTime/LeapSecond.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_LEAPSECOND';
  package DateTime::LeapSecond;
  
  use strict;
  use warnings;
  use namespace::autoclean;
  
  our $VERSION = '1.36';
  
  our ( @RD, @LEAP_SECONDS, %RD_LENGTH );
  
  use DateTime;
  
  # Generates a Perl binary decision tree
  sub _make_utx {
      my ( $beg, $end, $tab, $op ) = @_;
      my $step = int( ( $end - $beg ) / 2 );
      my $tmp;
      if ( $step <= 0 ) {
          $tmp = "${tab}return $LEAP_SECONDS[$beg + 1];\n";
          return $tmp;
      }
      $tmp = "${tab}if (\$val < " . $RD[ $beg + $step ] . ") {\n";
      $tmp .= _make_utx( $beg,         $beg + $step, $tab . "    ", $op );
      $tmp .= "${tab}}\n";
      $tmp .= "${tab}else {\n";
      $tmp .= _make_utx( $beg + $step, $end,         $tab . "    ", $op );
      $tmp .= "${tab}}\n";
      return $tmp;
  }
  
  # Process BEGIN data and write binary tree decision table
  sub _init {
      my $value = -1;
      while (@_) {
          my ( $year, $mon, $mday, $leap_seconds )
              = ( shift, shift, shift, shift );
  
          # print "$year,$mon,$mday\n";
  
          my $utc_epoch
              = DateTime->_ymd2rd( $year, ( $mon =~ /Jan/i ? 1 : 7 ), $mday );
  
          $value++;
          push @LEAP_SECONDS, $value;
          push @RD,           $utc_epoch;
  
          $RD_LENGTH{ $utc_epoch - 1 } = $leap_seconds;
  
          # warn "$year,$mon,$mday = $utc_epoch +$value";
      }
  
      push @LEAP_SECONDS, ++$value;
  
      my $tmp;
  
      # write binary tree decision table
  
      $tmp = "sub leap_seconds {\n";
      $tmp .= "    my \$val = shift;\n";
      $tmp .= _make_utx( -1, 1 + $#RD, "    ", "+" );
      $tmp .= "}\n";
  
      # NOTE: uncomment the line below to see the code:
      #warn $tmp;
  
      eval $tmp;
  
  }
  
  sub extra_seconds {
      exists $RD_LENGTH{ $_[0] } ? $RD_LENGTH{ $_[0] } : 0;
  }
  
  sub day_length {
      exists $RD_LENGTH{ $_[0] } ? 86400 + $RD_LENGTH{ $_[0] } : 86400;
  }
  
  sub _initialize {
  
      # There are no leap seconds before 1972, because that's the
      # year this system was implemented.
      #
      # year month day number-of-leapseconds
      #
      _init(
          qw(
              1972  Jul. 1  +1
              1973  Jan. 1  +1
              1974  Jan. 1  +1
              1975  Jan. 1  +1
              1976  Jan. 1  +1
              1977  Jan. 1  +1
              1978  Jan. 1  +1
              1979  Jan. 1  +1
              1980  Jan. 1  +1
              1981  Jul. 1  +1
              1982  Jul. 1  +1
              1983  Jul. 1  +1
              1985  Jul. 1  +1
              1988  Jan. 1  +1
              1990  Jan. 1  +1
              1991  Jan. 1  +1
              1992  Jul. 1  +1
              1993  Jul. 1  +1
              1994  Jul. 1  +1
              1996  Jan. 1  +1
              1997  Jul. 1  +1
              1999  Jan. 1  +1
              2006  Jan. 1  +1
              2009  Jan. 1  +1
              2012  Jun. 1  +1
              2015  Jul. 1  +1
              2017  Jan. 1  +1
              )
      );
  }
  
  __PACKAGE__->_initialize();
  
  1;
  
  # ABSTRACT: leap seconds table and utilities
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::LeapSecond - leap seconds table and utilities
  
  =head1 VERSION
  
  version 1.36
  
  =head1 SYNOPSIS
  
    use DateTime;
    use DateTime::LeapSecond;
  
    print "Leap seconds between years 1990 and 2000 are ";
    print DateTime::Leapsecond::leap_seconds( $utc_rd_2000 ) -
          DateTime::Leapsecond::leap_seconds( $utc_rd_1990 );
  
  =head1 DESCRIPTION
  
  This module is used to calculate leap seconds for a given Rata Die
  day. It is used when DateTime.pm cannot compile the XS version of
  this code.
  
  This library is known to be accurate for dates until December 2009.
  
  There are no leap seconds before 1972, because that's the year this
  system was implemented.
  
  =over 4
  
  =item * leap_seconds( $rd )
  
  Returns the number of accumulated leap seconds for a given day,
  in the range 0 .. 22.
  
  =item * extra_seconds( $rd )
  
  Returns the number of leap seconds for a given day,
  in the range -2 .. 2.
  
  =item * day_length( $rd )
  
  Returns the number of seconds for a given day,
  in the range 86398 .. 86402.
  
  =back
  
  =head1 SEE ALSO
  
  E<lt>http://hpiers.obspm.fr/eop-pc/earthor/utc/leapsecond.htmlE<gt>
  
  http://datetime.perl.org
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime>
  (or L<bug-datetime@rt.cpan.org|mailto:bug-datetime@rt.cpan.org>).
  
  There is a mailing list available for users of this distribution,
  L<mailto:datetime@perl.org>.
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
DATETIME_LEAPSECOND

    $main::fatpacked{"DateTime/Locale.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_LOCALE';
  package DateTime::Locale;
  
  use 5.008001;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.05';
  
  use DateTime::Locale::Data;
  use DateTime::Locale::FromData;
  use DateTime::Locale::Util qw( parse_locale_code );
  use Params::Validate qw( validate validate_pos SCALAR );
  
  my %Class;
  my %DataForCode;
  my %NameToCode;
  my %NativeNameToCode;
  my %UserDefinedAlias;
  
  my %LoadCache;
  
  sub register {
      my $class = shift;
  
      %LoadCache = ();
  
      if ( ref $_[0] ) {
          $class->_register(%$_) foreach @_;
      }
      else {
          $class->_register(@_);
      }
  }
  
  sub _register {
      my $class = shift;
  
      my %p = validate(
          @_, {
              id => { type => SCALAR },
  
              en_language  => { type => SCALAR },
              en_script    => { type => SCALAR, optional => 1 },
              en_territory => { type => SCALAR, optional => 1 },
              en_variant   => { type => SCALAR, optional => 1 },
  
              native_language  => { type => SCALAR, optional => 1 },
              native_script    => { type => SCALAR, optional => 1 },
              native_territory => { type => SCALAR, optional => 1 },
              native_variant   => { type => SCALAR, optional => 1 },
  
              class   => { type => SCALAR, optional => 1 },
              replace => { type => SCALAR, default  => 0 },
          }
      );
  
      my $id = $p{id};
  
      die q{'\@' or '=' are not allowed in locale ids}
          if $id =~ /[\@=]/;
  
      die
          "You cannot replace an existing locale ('$id') unless you also specify the 'replace' parameter as true\n"
          if !delete $p{replace} && exists $DataForCode{$id};
  
      $p{native_language} = $p{en_language}
          unless exists $p{native_language};
  
      my @en_pieces;
      my @native_pieces;
      foreach my $p (qw( language script territory variant )) {
          push @en_pieces,     $p{"en_$p"}     if exists $p{"en_$p"};
          push @native_pieces, $p{"native_$p"} if exists $p{"native_$p"};
      }
  
      $p{en_complete_name}     = join q{ }, @en_pieces;
      $p{native_complete_name} = join q{ }, @native_pieces;
  
      $id =~ s/_/-/g;
  
      $DataForCode{$id} = \%p;
  
      $NameToCode{ $p{en_complete_name} }           = $id;
      $NativeNameToCode{ $p{native_complete_name} } = $id;
  
      $Class{$id} = $p{class} if defined exists $p{class};
  }
  
  sub add_aliases {
      shift;
  
      %LoadCache = ();
  
      my $aliases = ref $_[0] ? $_[0] : {@_};
  
      for my $alias ( keys %{$aliases} ) {
          my $code = $aliases->{$alias};
  
          die q{Can't alias an id to itself}
              if $alias eq $code;
  
          # check for overwrite?
  
          my %seen = ( $alias => 1, $code => 1 );
          my $copy = $code;
          while ( $copy = $UserDefinedAlias{$copy} ) {
              die
                  "Creating an alias from $alias to $code would create a loop.\n"
                  if $seen{$copy};
  
              $seen{$copy} = 1;
          }
  
          $UserDefinedAlias{$alias} = $code;
      }
  }
  
  sub remove_alias {
      shift;
  
      %LoadCache = ();
  
      my ($alias) = validate_pos( @_, { type => SCALAR } );
  
      return delete $UserDefinedAlias{$alias};
  }
  
  # deprecated
  sub ids {
      shift->codes;
  }
  
  ## no critic (Variables::ProhibitPackageVars)
  sub codes {
      wantarray
          ? keys %DateTime::Locale::Data::Codes
          : [ keys %DateTime::Locale::Data::Codes ];
  }
  
  sub names {
      wantarray
          ? keys %DateTime::Locale::Data::Names
          : [ keys %DateTime::Locale::Data::Names ];
  }
  
  sub native_names {
      wantarray
          ? keys %DateTime::Locale::Data::NativeNames
          : [ keys %DateTime::Locale::Data::NativeNames ];
  }
  
  # These are hard-coded for backwards comaptibility with the DateTime::Language
  # code.
  my %DateTimeLanguageAliases = (
  
      #    'Afar'      => 'aa',
      'Amharic'   => 'am-ET',
      'Austrian'  => 'de-AT',
      'Brazilian' => 'pt-BR',
      'Czech'     => 'cs-CZ',
      'Danish'    => 'da-DK',
      'Dutch'     => 'nl-NL',
      'English'   => 'en-US',
      'French'    => 'fr-FR',
  
      #      'Gedeo'             => undef, # XXX
      'German'    => 'de-DE',
      'Italian'   => 'it-IT',
      'Norwegian' => 'no-NO',
      'Oromo'     => 'om-ET',    # Maybe om-KE or plain om ?
      'Portugese' => 'pt-PT',
  
      #    'Sidama'            => 'sid',
      'Somali'  => 'so-SO',
      'Spanish' => 'es-ES',
      'Swedish' => 'sv-SE',
  
      #    'Tigre'             => 'tig',
      'TigrinyaEthiopian' => 'ti-ET',
      'TigrinyaEritrean'  => 'ti-ER',
  );
  
  my %POSIXAliases = (
      C     => 'en-US-POSIX',
      POSIX => 'en-US-POSIX',
  );
  
  sub load {
      my $class = shift;
      my ($code) = validate_pos( @_, { type => SCALAR } );
  
      # We used to use underscores in codes instead of dashes. We want to
      # support both indefinitely.
      $code =~ tr/_/-/;
  
      # Strip off charset for LC_* codes : en_GB.UTF-8 etc
      $code =~ s/\..*$//;
  
      return $LoadCache{$code} if exists $LoadCache{$code};
  
      while ( exists $UserDefinedAlias{$code} ) {
          $code = $UserDefinedAlias{$code};
      }
  
      $code = $DateTimeLanguageAliases{$code}
          if exists $DateTimeLanguageAliases{$code};
      $code = $POSIXAliases{$code} if exists $POSIXAliases{$code};
      $code = $DateTime::Locale::Data::ISO639Aliases{$code}
          if exists $DateTime::Locale::Data::ISO639Aliases{$code};
  
      if ( exists $DateTime::Locale::Data::Codes{$code} ) {
          return $class->_locale_object_for($code);
      }
  
      if ( exists $DateTime::Locale::Data::Names{$code} ) {
          return $class->_locale_object_for(
              $DateTime::Locale::Data::Names{$code} );
      }
  
      if ( exists $DateTime::Locale::Data::NativeNames{$code} ) {
          return $class->_locale_object_for(
              $DateTime::Locale::Data::NativeNames{$code} );
      }
  
      if ( my $locale = $class->_registered_locale_for($code) ) {
          return $locale;
      }
  
      if ( my $guessed = $class->_guess_code($code) ) {
          return $class->_locale_object_for($guessed);
      }
  
      die "Invalid locale code or name: $code\n";
  }
  
  sub _guess_code {
      my $class = shift;
      my $code  = shift;
  
      my %codes = parse_locale_code($code);
  
      my @guesses;
  
      if ( $codes{script} ) {
          my $guess = join q{-}, $codes{language}, $codes{script};
  
          push @guesses, $guess;
  
          $guess .= q{-} . $codes{territory} if defined $codes{territory};
  
          # version with script comes first
          unshift @guesses, $guess;
      }
  
      if ( $codes{variant} ) {
          push @guesses, join q{-}, $codes{language}, $codes{territory},
              $codes{variant};
      }
  
      if ( $codes{territory} ) {
          push @guesses, join q{-}, $codes{language}, $codes{territory};
      }
  
      push @guesses, $codes{language};
  
      for my $code (@guesses) {
          return $code
              if exists $DateTime::Locale::Data::Codes{$code}
              || exists $DateTime::Locale::Data::Names{$code};
      }
  }
  
  sub _locale_object_for {
      shift;
      my $code = shift;
  
      my $data = DateTime::Locale::Data::locale_data($code)
          or return;
  
      # We want to make a copy of the data just in case ...
      return $LoadCache{$code} = DateTime::Locale::FromData->new( \%{$data} );
  }
  
  sub _registered_locale_for {
      my $class = shift;
      my $code  = shift;
  
      # Custom locale registered by user
      if ( $Class{$code} ) {
          return $LoadCache{$code}
              = $class->_load_class_from_code( $code, $Class{$code} );
      }
  
      if ( $DataForCode{$code} ) {
          return $LoadCache{$code} = $class->_load_class_from_code($code);
      }
  
      if ( $NameToCode{$code} ) {
          return $LoadCache{$code}
              = $class->_load_class_from_code( $NameToCode{$code} );
      }
  
      if ( $NativeNameToCode{$code} ) {
          return $LoadCache{$code}
              = $class->_load_class_from_code( $NativeNameToCode{$code} );
      }
  }
  
  sub _load_class_from_code {
      my $class      = shift;
      my $code       = shift;
      my $real_class = shift;
  
      # We want the first alias for which there is data, even if it has
      # no corresponding .pm file.  There may be multiple levels of
      # alias to go through.
      my $data_code = $code;
      while ( exists $UserDefinedAlias{$data_code}
          && !exists $DataForCode{$data_code} ) {
  
          $data_code = $UserDefinedAlias{$data_code};
      }
  
      ( my $underscore_code = $data_code ) =~ s/-/_/g;
      $real_class ||= "DateTime::Locale::$underscore_code";
  
      unless ( $real_class->can('new') ) {
          ## no critic (BuiltinFunctions::ProhibitStringyEval, ErrorHandling::RequireCheckingReturnValueOfEval)
          eval "require $real_class";
          die $@ if $@;
          ## use critic
      }
  
      my $locale = $real_class->new(
          %{ $DataForCode{$data_code} },
          code => $code,
      );
  
      if ( $locale->can('cldr_version') ) {
          my $object_version = $locale->cldr_version;
  
          if ( $object_version ne $DateTime::Locale::Data::CLDRVersion ) {
              warn
                  "Loaded $real_class, which is from an older version ($object_version)"
                  . ' of the CLDR database than this installation of'
                  . " DateTime::Locale ($DateTime::Locale::Data::CLDRVersion).\n";
          }
      }
  
      return $locale;
  }
  ## use critic
  
  1;
  
  # ABSTRACT: Localization support for DateTime.pm
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::Locale - Localization support for DateTime.pm
  
  =head1 VERSION
  
  version 1.05
  
  =head1 SYNOPSIS
  
    use DateTime::Locale;
  
    my $loc = DateTime::Locale->load('en-GB');
  
    print $loc->native_locale_name, "\n", $loc->datetime_format_long, "\n";
  
    # but mostly just things like ...
  
    my $dt = DateTime->now( locale => 'fr' );
    print "Aujourd'hui le mois est " . $dt->month_name, "\n";
  
  =head1 DESCRIPTION
  
  DateTime::Locale is primarily a factory for the various locale subclasses. It
  also provides some functions for getting information on all the available
  locales.
  
  If you want to know what methods are available for locale objects, then please
  read the C<DateTime::Locale::FromData> documentation.
  
  =head1 USAGE
  
  This module provides the following class methods:
  
  =head2 DateTime::Locale->load( $locale_code | $locale_name )
  
  Returns the locale object for the specified locale code or name - see the
  C<DateTime::Locale::Catalog> documentation for the list of available codes and
  names. The name provided may be either the English or native name.
  
  If the requested locale is not found, a fallback search takes place to
  find a suitable replacement.
  
  The fallback search order is:
  
    {language}-{script}-{territory}
    {language}-{script}
    {language}-{territory}-{variant}
    {language}-{territory}
    {language}
  
  Eg. For the locale code C<es-XX-UNKNOWN> the fallback search would be:
  
    es-XX-UNKNOWN   # Fails - no such locale
    es-XX           # Fails - no such locale
    es              # Found - the es locale is returned as the
                    # closest match to the requested id
  
  Eg. For the locale code C<es-Latn-XX> the fallback search would be:
  
    es-Latn-XX      # Fails - no such locale
    es-Latn         # Fails - no such locale
    es-XX           # Fails - no such locale
    es              # Found - the es locale is returned as the
                    # closest match to the requested id
  
  If no suitable replacement is found, then an exception is thrown.
  
  The loaded locale is cached, so that B<locale objects may be
  singletons>. Calling C<< DateTime::Locale->register() >>, C<<
  DateTime::Locale->add_aliases() >>, or C<< DateTime::Locale->remove_alias() >>
  clears the cache.
  
  =head2 DateTime::Locale->codes
  
    my @codes = DateTime::Locale->codes;
    my $codes = DateTime::Locale->codes;
  
  Returns an unsorted list of the available locale codes, or an array reference if
  called in a scalar context. This list does not include aliases.
  
  =head2 DateTime::Locale->names
  
    my @names = DateTime::Locale->names;
    my $names = DateTime::Locale->names;
  
  Returns an unsorted list of the available locale names in English, or an array
  reference if called in a scalar context.
  
  =head2 DateTime::Locale->native_names
  
    my @names = DateTime::Locale->native_names;
    my $names = DateTime::Locale->native_names;
  
  Returns an unsorted list of the available locale names in their native
  language, or an array reference if called in a scalar context. All native
  names in UTF-8 characters as appropriate.
  
  =head1 CLDR DATA BUGS
  
  Please be aware that all locale data has been generated from the CLDR (Common
  Locale Data Repository) project locales data). The data is incomplete, and may
  contain errors in some locales.
  
  When reporting errors in data, please check the primary data sources first,
  then where necessary report errors directly to the primary source via the CLDR
  bug report system. See http://unicode.org/cldr/filing_bug_reports.html for
  details.
  
  Once these errors have been confirmed, please forward the error report and
  corrections to the DateTime mailing list, datetime@perl.org.
  
  =head1 AUTHOR EMERITUS
  
  Richard Evans wrote the first version of DateTime::Locale, including the tools
  to extract the CLDR data.
  
  =head1 SEE ALSO
  
  L<DateTime::Locale::Base>
  
  datetime@perl.org mailing list
  
  http://datetime.perl.org/
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime-Locale>
  (or L<bug-datetime-locale@rt.cpan.org|mailto:bug-datetime-locale@rt.cpan.org>).
  
  There is a mailing list available for users of this distribution,
  L<mailto:datetime@perl.org>.
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 DONATIONS
  
  If you'd like to thank me for the work I've done on this module, please
  consider making a "donation" to me via PayPal. I spend a lot of free time
  creating free software, and would appreciate any support you'd care to offer.
  
  Please note that B<I am not suggesting that you must do this> in order for me
  to continue working on this particular software. I will continue to do so,
  inasmuch as I have in the past, for as long as it interests me.
  
  Similarly, a donation made in this way will probably not make me work on this
  software much more, unless I get so many donations that I can consider working
  on free software full time (let's all have a chuckle at that together).
  
  To donate, log into PayPal and send money to autarch@urth.org, or use the
  button at L<http://www.urth.org/~autarch/fs-donation.html>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 CONTRIBUTOR
  
  =for stopwords Karen Etheridge
  
  Karen Etheridge <ether@cpan.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2016 by Dave Rolsky.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATETIME_LOCALE

    $main::fatpacked{"DateTime/Locale/Base.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_LOCALE_BASE';
  package DateTime::Locale::Base;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.05';
  
  use Carp qw( carp );
  use DateTime::Locale;
  use List::Util 1.45 ();
  use Params::Validate qw( validate_pos );
  
  BEGIN {
      foreach my $field (
          qw( id en_complete_name native_complete_name
          en_language en_script en_territory en_variant
          native_language native_script native_territory native_variant
          )
          ) {
  
          # remove leading 'en_' for method name
          ( my $meth_name = $field ) =~ s/^en_//;
  
          # also remove 'complete_'
          $meth_name =~ s/complete_//;
  
          no strict 'refs';
          *{$meth_name} = sub { $_[0]->{$field} };
      }
  }
  
  sub new {
      my $class = shift;
  
      # By making the default format lengths part of the object's hash
      # key, it allows them to be settable.
      return bless {
          @_,
          default_date_format_length => 'long',
          default_time_format_length => 'long',
      }, $class;
  }
  
  sub language_id  { ( DateTime::Locale::_parse_id( $_[0]->id ) )[0] }
  sub script_id    { ( DateTime::Locale::_parse_id( $_[0]->id ) )[1] }
  sub territory_id { ( DateTime::Locale::_parse_id( $_[0]->id ) )[2] }
  sub variant_id   { ( DateTime::Locale::_parse_id( $_[0]->id ) )[3] }
  
  my @FormatLengths = qw( short medium long full );
  
  sub date_format_default {
      my $meth = 'date_format_' . $_[0]->default_date_format_length();
      $_[0]->$meth();
  }
  
  sub date_formats {
      return {
          map {
              my $meth = 'date_format_' . $_;
              $_ => $_[0]->$meth()
          } @FormatLengths
      };
  }
  
  sub time_format_default {
      my $meth = 'time_format_' . $_[0]->default_time_format_length();
      $_[0]->$meth();
  }
  
  sub time_formats {
      return {
          map {
              my $meth = 'time_format_' . $_;
              $_ => $_[0]->$meth()
          } @FormatLengths
      };
  }
  
  sub format_for {
      my $self = shift;
      my $for  = shift;
  
      my $meth = '_format_for_' . $for;
  
      return unless $self->can($meth);
  
      return $self->$meth();
  }
  
  sub available_formats {
      my $self = shift;
  
      # The various parens seem to be necessary to force uniq() to see
      # the caller's list context. Go figure.
      my @uniq
          = List::Util::uniq( map { keys %{ $_->_available_formats() || {} } }
              _self_and_super_path( ref $self ) );
  
      # Doing the sort in the same expression doesn't work under 5.6.x.
      return sort @uniq;
  }
  
  # Copied wholesale from Class::ISA, because said module warns as deprecated
  # with perl 5.11.0+, which is kind of annoying.
  sub _self_and_super_path {
  
      # Assumption: searching is depth-first.
      # Assumption: '' (empty string) can't be a class package name.
      # Note: 'UNIVERSAL' is not given any special treatment.
      return () unless @_;
  
      my @out = ();
  
      my @in_stack = ( $_[0] );
      my %seen = ( $_[0] => 1 );
  
      my $current;
      while (@in_stack) {
          next unless defined( $current = shift @in_stack ) && length($current);
          push @out, $current;
          no strict 'refs';
          unshift @in_stack, map {
              my $c = $_;    # copy, to avoid being destructive
              substr( $c, 0, 2 ) = "main::" if substr( $c, 0, 2 ) eq '::';
  
              # Canonize the :: -> main::, ::foo -> main::foo thing.
              # Should I ever canonize the Foo'Bar = Foo::Bar thing?
              $seen{$c}++ ? () : $c;
          } @{"$current\::ISA"};
  
          # I.e., if this class has any parents (at least, ones I've never seen
          # before), push them, in order, onto the stack of classes I need to
          # explore.
      }
  
      return @out;
  }
  
  # Just needed for the above method.
  sub _available_formats { }
  
  sub default_date_format_length { $_[0]->{default_date_format_length} }
  
  sub set_default_date_format_length {
      my $self = shift;
      my ($l)
          = validate_pos( @_, { regex => qr/^(?:full|long|medium|short)$/i } );
  
      $self->{default_date_format_length} = lc $l;
  }
  
  sub default_time_format_length { $_[0]->{default_time_format_length} }
  
  sub set_default_time_format_length {
      my $self = shift;
      my ($l)
          = validate_pos( @_, { regex => qr/^(?:full|long|medium|short)/i } );
  
      $self->{default_time_format_length} = lc $l;
  }
  
  for my $length (qw( full long medium short )) {
      my $key = 'datetime_format_' . $length;
  
      my $sub = sub {
          my $self = shift;
  
          return $self->{$key} if exists $self->{$key};
  
          my $date_meth = 'date_format_' . $length;
          my $time_meth = 'time_format_' . $length;
  
          return $self->{$key}
              = $self->_make_datetime_format( $date_meth, $time_meth );
      };
  
      no strict 'refs';
      *{$key} = $sub;
  }
  
  sub datetime_format_default {
      my $self = shift;
  
      my $date_meth = 'date_format_' . $self->default_date_format_length();
      my $time_meth = 'time_format_' . $self->default_time_format_length();
  
      return $self->_make_datetime_format( $date_meth, $time_meth );
  }
  
  sub _make_datetime_format {
      my $self      = shift;
      my $date_meth = shift;
      my $time_meth = shift;
  
      my $dt_format = $self->datetime_format();
  
      my $time = $self->$time_meth();
      my $date = $self->$date_meth();
  
      $dt_format =~ s/\{0\}/$time/g;
      $dt_format =~ s/\{1\}/$date/g;
  
      return $dt_format;
  }
  
  sub prefers_24_hour_time {
      my $self = shift;
  
      return $self->{prefers_24_hour_time}
          if exists $self->{prefers_24_hour_time};
  
      $self->{prefers_24_hour_time}
          = $self->time_format_short() =~ /h|K/ ? 0 : 1;
  }
  
  # Backwards compat for DateTime.pm version <= 0.42
  {
      my %subs = (
          month_name => sub { $_[0]->month_format_wide()->[ $_[1]->month_0 ] },
  
          month_abbreviation => sub {
              $_[0]->month_format_abbreviated()->[ $_[1]->month_0 ];
          },
          month_narrow =>
              sub { $_[0]->month_format_narrow()->[ $_[1]->month_0 ]; },
  
          month_names         => sub { $_[0]->month_format_wide() },
          month_abbreviations => sub { $_[0]->month_format_abbreviated() },
          month_narrows       => sub { $_[0]->month_format_narrow() },
  
          day_name =>
              sub { $_[0]->day_format_wide()->[ $_[1]->day_of_week_0 ] },
  
          day_abbreviation => sub {
              $_[0]->day_format_abbreviated()->[ $_[1]->day_of_week_0 ];
          },
          day_narrow =>
              sub { $_[0]->day_format_narrow()->[ $_[1]->day_of_week_0 ]; },
  
          day_names         => sub { $_[0]->day_format_wide() },
          day_abbreviations => sub { $_[0]->day_format_abbreviated() },
          day_narrows       => sub { $_[0]->day_format_narrow() },
  
          quarter_name =>
              sub { $_[0]->quarter_format_wide()->[ $_[1]->quarter - 1 ] },
  
          quarter_abbreviation => sub {
              $_[0]->quarter_format_abbreviated()->[ $_[1]->quarter - 1 ];
          },
          quarter_narrow =>
              sub { $_[0]->quarter_format_narrow()->[ $_[1]->quarter - 1 ] },
  
          quarter_names         => sub { $_[0]->quarter_format_wide() },
          quarter_abbreviations => sub { $_[0]->quarter_format_abbreviated() },
  
          am_pm =>
              sub { $_[0]->am_pm_abbreviated()->[ $_[1]->hour < 12 ? 0 : 1 ] },
          am_pms => sub { $_[0]->am_pm_abbreviated() },
  
          era_name => sub { $_[0]->era_wide()->[ $_[1]->ce_year < 0 ? 0 : 1 ] },
  
          era_abbreviation => sub {
              $_[0]->era_abbreviated()->[ $_[1]->ce_year < 0 ? 0 : 1 ];
          },
          era_narrow =>
              sub { $_[0]->era_narrow()->[ $_[1]->ce_year < 0 ? 0 : 1 ] },
  
          era_names         => sub { $_[0]->era_wide() },
          era_abbreviations => sub { $_[0]->era_abbreviated() },
  
          # ancient backwards compat
          era  => sub { $_[0]->era_abbreviation },
          eras => sub { $_[0]->era_abbreviations },
  
          date_before_time => sub {
              my $self = shift;
  
              my $dt_format = $self->datetime_format();
  
              return $dt_format =~ /\{1\}.*\{0\}/ ? 1 : 0;
          },
  
          date_parts_order => sub {
              my $self = shift;
  
              my $short = $self->date_format_short();
  
              $short =~ tr{dmyDMY}{}cd;
              $short =~ tr{dmyDMY}{dmydmy}s;
  
              return $short;
          },
  
          full_date_format => sub {
              $_[0]->_convert_to_strftime( $_[0]->date_format_full() );
          },
  
          long_date_format => sub {
              $_[0]->_convert_to_strftime( $_[0]->date_format_long() );
          },
  
          medium_date_format => sub {
              $_[0]->_convert_to_strftime( $_[0]->date_format_medium() );
          },
  
          short_date_format => sub {
              $_[0]->_convert_to_strftime( $_[0]->date_format_short() );
          },
  
          default_date_format => sub {
              $_[0]->_convert_to_strftime( $_[0]->date_format_default() );
          },
  
          full_time_format => sub {
              $_[0]->_convert_to_strftime( $_[0]->time_format_full() );
          },
  
          long_time_format => sub {
              $_[0]->_convert_to_strftime( $_[0]->time_format_long() );
          },
  
          medium_time_format => sub {
              $_[0]->_convert_to_strftime( $_[0]->time_format_medium() );
          },
  
          short_time_format => sub {
              $_[0]->_convert_to_strftime( $_[0]->time_format_short() );
          },
  
          default_time_format => sub {
              $_[0]->_convert_to_strftime( $_[0]->time_format_default() );
          },
  
          full_datetime_format => sub {
              $_[0]->_convert_to_strftime( $_[0]->datetime_format_full() );
          },
  
          long_datetime_format => sub {
              $_[0]->_convert_to_strftime( $_[0]->datetime_format_long() );
          },
  
          medium_datetime_format => sub {
              $_[0]->_convert_to_strftime( $_[0]->datetime_format_medium() );
          },
  
          short_datetime_format => sub {
              $_[0]->_convert_to_strftime( $_[0]->datetime_format_short() );
          },
  
          default_datetime_format => sub {
              $_[0]->_convert_to_strftime( $_[0]->datetime_format_default() );
          },
      );
  
      for my $name ( keys %subs ) {
          my $real_sub = $subs{$name};
  
          my $sub = sub {
              carp
                  "The $name method in DateTime::Locale::Base has been deprecated. Please see the DateTime::Locale distribution's Changes file for details";
              return shift->$real_sub(@_);
          };
  
          no strict 'refs';
          *{$name} = $sub;
      }
  }
  
  # Older versions of DateTime.pm will not pass in the $cldr_ok flag, so
  # we will give them the converted-to-strftime pattern (bugs and all).
  sub _convert_to_strftime {
      my $self    = shift;
      my $pattern = shift;
      my $cldr_ok = shift;
  
      return $pattern if $cldr_ok;
  
      return $self->{_converted_patterns}{$pattern}
          if exists $self->{_converted_patterns}{$pattern};
  
      return $self->{_converted_patterns}{$pattern}
          = $self->_cldr_to_strftime($pattern);
  }
  
  {
      my @JavaPatterns = (
          qr/G/    => '{era}',
          qr/yyyy/ => '{ce_year}',
          qr/y/    => 'y',
          qr/u/    => 'Y',
          qr/MMMM/ => 'B',
          qr/MMM/  => 'b',
          qr/MM/   => 'm',
          qr/M/    => '{month}',
          qr/dd/   => 'd',
          qr/d/    => '{day}',
          qr/hh/   => 'l',
          qr/h/    => '{hour_12}',
          qr/HH/   => 'H',
          qr/H/    => '{hour}',
          qr/mm/   => 'M',
          qr/m/    => '{minute}',
          qr/ss/   => 'S',
          qr/s/    => '{second}',
          qr/S/    => 'N',
          qr/EEEE/ => 'A',
          qr/E/    => 'a',
          qr/D/    => 'j',
          qr/F/    => '{weekday_of_month}',
          qr/w/    => 'V',
          qr/W/    => '{week_month}',
          qr/a/    => 'p',
          qr/k/    => '{hour_1}',
          qr/K/    => '{hour_12_0}',
          qr/z/    => '{time_zone_long_name}',
      );
  
      sub _cldr_to_strftime {
          shift;
          my $simple = shift;
  
          $simple
              =~ s/(G+|y+|u+|M+|d+|h+|H+|m+|s+|S+|E+|D+|F+|w+|W+|a+|k+|K+|z+)|'((?:[^']|'')*)'/
                  $2 ? _stringify($2) : $1 ? _convert($1) : "'"/eg;
  
          return $simple;
      }
  
      sub _convert {
          my $simple = shift;
  
          for ( my $x = 0; $x < @JavaPatterns; $x += 2 ) {
              return '%' . $JavaPatterns[ $x + 1 ]
                  if $simple =~ /$JavaPatterns[$x]/;
          }
  
          die "**Dont know $simple***";
      }
  
      sub _stringify {
          my $string = shift;
  
          $string =~ s/%(?:[^%])/%%/g;
          $string =~ s/\'\'/\'/g;
  
          return $string;
      }
  }
  
  # end backwards compat
  
  sub STORABLE_freeze {
      my $self    = shift;
      my $cloning = shift;
  
      return if $cloning;
  
      return $self->id();
  }
  
  sub STORABLE_thaw {
      my $self       = shift;
      my $cloning    = shift;
      my $serialized = shift;
  
      my $obj = DateTime::Locale->load($serialized);
  
      %$self = %$obj;
  
      return $self;
  }
  
  1;
  
  # ABSTRACT: Base class for individual locale objects
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::Locale::Base - Base class for individual locale objects
  
  =head1 VERSION
  
  version 1.05
  
  =head1 SYNOPSIS
  
    use base 'DateTime::Locale::Base';
  
  =head1 DESCRIPTION
  
  B<This module is no longer used by the code in the distribution.> It is still
  included for the sake of any code out in the wild that may subclass this
  class. This class will be removed in a future release.
  
  =head1 DEFAULT FORMATS
  
  Each locale has a set of four default date and time formats.  They are
  distinguished by length, and are called "full", "long", "medium", and
  "short". Each locale may have a different default length which it uses
  when its C<< $locale->date_format_default() >>, C<<
  $locale->time_format_default() >>, or C<<
  $locale->datetime_format_default() >> methods are called.
  
  This can be changed by calling the C<<
  $locale->set_default_date_format() >> or C<<
  $locale->set_default_time_format() >> methods.  These methods accept a
  string which must be one of "full", "long", "medium", or "short".
  
  =head1 NAME FORMS
  
  Most names come in a number of variations. First, they may vary based
  on length, with wide, abbreviated, and narrow forms. The wide form is
  typically the full name, while the narrow form is often a single
  character. The narrow forms may not be unique. For example, "T" may be
  used for Tuesday and Thursday in the English narrow forms.
  
  Many names also distinguish between "format" and "stand-alone" forms
  of a pattern. The format pattern is used when the thing in question is
  being placed into a larger string. The stand-alone form is used when
  displaying that item by itself, for example in a calendar.
  
  =head1 METHODS
  
  All locales provide the following methods:
  
  =over 4
  
  =item * $locale->id()
  
  The locale's id.
  
  =item * $locale->language_id()
  
  The language portion of the id.
  
  =item * $locale->script_id()
  
  The script portion of the id, if any.
  
  =item * $locale->territory_id()
  
  The territory portion of the id, if any.
  
  =item * $locale->variant_id()
  
  The variant portion of the id, if any.
  
  =item * $locale->name()
  
  The full name for the locale in English.
  
  =item * $locale->language()
  
  The language name for the locale in English.
  
  =item * $locale->script()
  
  The script name for the locale in English, if any.
  
  =item * $locale->territory()
  
  The territory name for the locale in English, if any.
  
  =item * $locale->variant()
  
  The variant name for the locale in English, if any.
  
  =item * $locale->native_name()
  
  The full name for the locale in its native language, if any.
  
  =item * $locale->native_language()
  
  The language name for the locale in its native language, if any.
  
  =item * $locale->native_script()
  
  The script name for the locale in its native language, if any.
  
  =item * $locale->native_territory()
  
  The territory name for the locale in its native language, if any.
  
  =item * $locale->native_variant()
  
  The variant name for the locale in its native language, if any.
  
  =item * $locale->month_format_wide()
  
  Returns an array reference containing the wide format names of the
  months, with January as the first month.
  
  =item * $locale->month_format_abbreviated()
  
  Returns an array reference containing the abbreviated format names of
  the months, with January as the first month.
  
  =item * $locale->month_format_narrow()
  
  Returns an array reference containing the narrow format names of the
  months, with January as the first month.
  
  =item * $locale->month_stand_alone_wide()
  
  Returns an array reference containing the wide stand-alone names of
  the months, with January as the first month.
  
  =item * $locale->month_stand_alone_abbreviated()
  
  Returns an array reference containing the abbreviated stand-alone
  names of the months, with January as the first month.
  
  =item * $locale->month_stand_alone_narrow()
  
  Returns an array reference containing the narrow stand-alone names of the
  months, with January as the first month.
  
  =item * $locale->day_format_wide()
  
  Returns an array reference containing the wide format names of the
  days, with Monday as the first day.
  
  =item * $locale->day_format_abbreviated()
  
  Returns an array reference containing the abbreviated format names of
  the days, with Monday as the first day.
  
  =item * $locale->day_format_narrow()
  
  Returns an array reference containing the narrow format names of the
  days, with Monday as the first day.
  
  =item * $locale->day_stand_alone_wide()
  
  Returns an array reference containing the wide stand-alone names of
  the days, with Monday as the first day.
  
  =item * $locale->day_stand_alone_abbreviated()
  
  Returns an array reference containing the abbreviated stand-alone
  names of the days, with Monday as the first day.
  
  =item * $locale->day_stand_alone_narrow()
  
  Returns an array reference containing the narrow stand-alone names of
  the days, with Monday as the first day.
  
  =item * $locale->quarter_format_wide()
  
  Returns an array reference containing the wide format names of the
  quarters.
  
  =item * $locale->quarter_format_abbreviated()
  
  Returns an array reference containing the abbreviated format names of
  the quarters.
  
  =item * $locale->quarter_format_narrow()
  
  Returns an array reference containing the narrow format names of the
  quarters.
  
  =item * $locale->quarter_stand_alone_wide()
  
  Returns an array reference containing the wide stand-alone names of
  the quarters.
  
  =item * $locale->quarter_stand_alone_abbreviated()
  
  Returns an array reference containing the abbreviated stand-alone
  names of the quarters.
  
  =item * $locale->quarter_stand_alone_narrow()
  
  Returns an array reference containing the narrow stand-alone names of the
  quarters.
  
  =item * $locale->era_wide()
  
  Returns an array reference containing the wide names of the eras, with
  "BCE" first.
  
  =item * $locale->era_abbreviated()
  
  Returns an array reference containing the abbreviated names of the
  eras, with "BCE" first.
  
  =item * $locale->era_narrow()
  
  Returns an array reference containing the abbreviated names of the
  eras, with "BCE" first. However, most locales do not differ between
  the narrow and abbreviated length of the era.
  
  =item * $locale->am_pm_abbreviated()
  
  Returns an array reference containing the abbreviated names of "AM"
  and "PM".
  
  =item * $locale->date_format_long()
  
  =item * $locale->date_format_full()
  
  =item * $locale->date_format_medium()
  
  =item * $locale->date_format_short()
  
  Returns the CLDR date pattern of the appropriate length.
  
  =item * $locale->date_formats()
  
  Returns a hash reference of CLDR date patterns for the date formats,
  where the keys are "full", "long", "medium", and "short".
  
  =item * $locale->time_format_long()
  
  =item * $locale->time_format_full()
  
  =item * $locale->time_format_medium()
  
  =item * $locale->time_format_short()
  
  Returns the CLDR date pattern of the appropriate length.
  
  =item * $locale->time_formats()
  
  Returns a hash reference of CLDR date patterns for the time formats,
  where the keys are "full", "long", "medium", and "short".
  
  =item * $locale->datetime_format_long()
  
  =item * $locale->datetime_format_full()
  
  =item * $locale->datetime_format_medium()
  
  =item * $locale->datetime_format_short()
  
  Returns the CLDR date pattern of the appropriate length.
  
  =item * $locale->datetime_formats()
  
  Returns a hash reference of CLDR date patterns for the datetime
  formats, where the keys are "full", "long", "medium", and "short".
  
  =item * $locale->date_format_default()
  
  =item * $locale->time_format_default()
  
  =item * $locale->datetime_format_default()
  
  Returns the default CLDR date pattern. The length of this format is
  based on the value of C<< $locale->default_date_format_length() >>
  and/or C<< $locale->default_time_format_length() >>.
  
  =item * $locale->default_date_format_length()
  
  =item * $locale->default_time_format_length()
  
  Returns the default length for the format, one of "full", "long",
  "medium", or "short".
  
  =item * $locale->set_default_date_format_length()
  
  =item * $locale->set_default_time_format_length()
  
  Sets the default length for the format. This must be one of "full",
  "long", "medium", or "short".
  
  =item * $locale->prefers_24_hour_time()
  
  Returns a boolean indicating the preferred hour format for this
  locale.
  
  =item * $locale->first_day_of_week()
  
  Returns a number from 1 to 7 indicating the I<local> first day of the week,
  with Monday being 1 and Sunday being 7. For example, for a US locale this
  returns 7.
  
  =item * $locale->available_formats()
  
  A list of format names, like "MMdd" or "yyyyMM". This should be the
  list directly supported by the subclass, not its parents.
  
  =item * $locale->format_for($key)
  
  Given a valid name, returns the CLDR date pattern for that thing, if
  one exists.
  
  =back
  
  =head1 SUPPORT
  
  See L<DateTime::Locale>.
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime-Locale>
  (or L<bug-datetime-locale@rt.cpan.org|mailto:bug-datetime-locale@rt.cpan.org>).
  
  There is a mailing list available for users of this distribution,
  L<mailto:datetime@perl.org>.
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2016 by Dave Rolsky.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATETIME_LOCALE_BASE

    $main::fatpacked{"DateTime/Locale/Catalog.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_LOCALE_CATALOG';
  package DateTime::Locale::Catalog;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.05';
  
  1;
  
  # ABSTRACT: Provides a catalog of all valid locale names
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::Locale::Catalog - Provides a catalog of all valid locale names
  
  =head1 VERSION
  
  version 1.05
  
  =head1 DESCRIPTION
  
  This module contains a list of all known locales.
  
  =head1 LOCALES
  
  Any method taking locale code or name arguments should use one of the values
  listed below. Codes and names are case sensitive. The code starts with the
  ISO639-1 language code, and may also include information identifying any or
  all of territory, script, or variant.
  
  Always select the closest matching locale - for example, French Canadians
  would choose C<fr-CA> over fr - and B<always> use locale codes in preference
  to names; locale codes offer greater compatibility when using localized third
  party modules.
  
  The available locales are:
  
  =begin :locales
  
  
  
  =end :locales
  
   Locale code      Locale name (in English)                  Native locale name
   ========================================================================================================
   af               Afrikaans                                 Afrikaans
   af-NA            Afrikaans Namibia                         Afrikaans Namibië
   af-ZA            Afrikaans South Africa                    Afrikaans Suid-Afrika
   agq              Aghem                                     Aghem
   agq-CM           Aghem Cameroon                            Aghem Kàmàlûŋ
   ak               Akan                                      Akan
   ak-GH            Akan Ghana                                Akan Gaana
   am               Amharic                                   አማርኛ
   am-ET            Amharic Ethiopia                          አማርኛ ኢትዮጵያ
   ar               Arabic                                    العربية
   ar-001           Arabic World                              العربية العالم
   ar-AE            Arabic United Arab Emirates               العربية الإمارات العربية المتحدة
   ar-BH            Arabic Bahrain                            العربية البحرين
   ar-DJ            Arabic Djibouti                           العربية جيبوتي
   ar-DZ            Arabic Algeria                            العربية الجزائر
   ar-EG            Arabic Egypt                              العربية مصر
   ar-EH            Arabic Western Sahara                     العربية الصحراء الغربية
   ar-ER            Arabic Eritrea                            العربية إريتريا
   ar-IL            Arabic Israel                             العربية إسرائيل
   ar-IQ            Arabic Iraq                               العربية العراق
   ar-JO            Arabic Jordan                             العربية الأردن
   ar-KM            Arabic Comoros                            العربية جزر القمر
   ar-KW            Arabic Kuwait                             العربية الكويت
   ar-LB            Arabic Lebanon                            العربية لبنان
   ar-LY            Arabic Libya                              العربية ليبيا
   ar-MA            Arabic Morocco                            العربية المغرب
   ar-MR            Arabic Mauritania                         العربية موريتانيا
   ar-OM            Arabic Oman                               العربية عُمان
   ar-PS            Arabic Palestinian Territories            العربية الأراضي الفلسطينية
   ar-QA            Arabic Qatar                              العربية قطر
   ar-SA            Arabic Saudi Arabia                       العربية المملكة العربية السعودية
   ar-SD            Arabic Sudan                              العربية السودان
   ar-SO            Arabic Somalia                            العربية الصومال
   ar-SS            Arabic South Sudan                        العربية جنوب السودان
   ar-SY            Arabic Syria                              العربية سوريا
   ar-TD            Arabic Chad                               العربية تشاد
   ar-TN            Arabic Tunisia                            العربية تونس
   ar-YE            Arabic Yemen                              العربية اليمن
   as               Assamese                                  অসমীয়া
   as-IN            Assamese India                            অসমীয়া ভাৰত
   asa              Asu                                       Kipare
   asa-TZ           Asu Tanzania                              Kipare Tadhania
   ast              Asturian                                  asturianu
   ast-ES           Asturian Spain                            asturianu España
   az               Azerbaijani                               azərbaycan dili
   az-Cyrl          Azerbaijani                               азәрбајҹан дили
   az-Cyrl-AZ       Azerbaijani Azerbaijan Cyrillic           азәрбајҹан дили Азәрбајҹан Кирил
   az-Latn          Azerbaijani                               azərbaycan dili
   az-Latn-AZ       Azerbaijani Azerbaijan Latin              azərbaycan dili Azərbaycan latın
   bas              Basaa                                     Ɓàsàa
   bas-CM           Basaa Cameroon                            Ɓàsàa Kàmɛ̀rûn
   be               Belarusian                                беларуская
   be-BY            Belarusian Belarus                        беларуская Беларусь
   bem              Bemba                                     Ichibemba
   bem-ZM           Bemba Zambia                              Ichibemba Zambia
   bez              Bena                                      Hibena
   bez-TZ           Bena Tanzania                             Hibena Hutanzania
   bg               Bulgarian                                 български
   bg-BG            Bulgarian Bulgaria                        български България
   bm               Bambara                                   bamanakan
   bm-ML            Bambara Mali                              bamanakan Mali
   bn               Bengali                                   বাংলা
   bn-BD            Bengali Bangladesh                        বাংলা বাংলাদেশ
   bn-IN            Bengali India                             বাংলা ভারত
   bo               Tibetan                                   བོད་སྐད་
   bo-CN            Tibetan China                             བོད་སྐད་ རྒྱ་ནག
   bo-IN            Tibetan India                             བོད་སྐད་ རྒྱ་གར་
   br               Breton                                    brezhoneg
   br-FR            Breton France                             brezhoneg Frañs
   brx              Bodo                                      बड़ो
   brx-IN           Bodo India                                बड़ो भारत
   bs               Bosnian                                   bosanski
   bs-Cyrl          Bosnian                                   босански
   bs-Cyrl-BA       Bosnian Bosnia & Herzegovina Cyrillic     босански Босна и Херцеговина Ћирилица
   bs-Latn          Bosnian                                   bosanski
   bs-Latn-BA       Bosnian Bosnia & Herzegovina Latin        bosanski Bosna i Hercegovina latinica
   ca               Catalan                                   català
   ca-AD            Catalan Andorra                           català Andorra
   ca-ES            Catalan Spain                             català Espanya
   ca-ES-VALENCIA   Catalan Spain Valencian                   català Espanya valencià
   ca-FR            Catalan France                            català França
   ca-IT            Catalan Italy                             català Itàlia
   ce               Chechen                                   нохчийн
   ce-RU            Chechen Russia                            нохчийн Росси
   cgg              Chiga                                     Rukiga
   cgg-UG           Chiga Uganda                              Rukiga Uganda
   chr              Cherokee                                  ᏣᎳᎩ
   chr-US           Cherokee United States                    ᏣᎳᎩ ᎠᎹᏰᏟ
   ckb              Central Kurdish                           کوردیی ناوەندی
   ckb-IQ           Central Kurdish Iraq                      کوردیی ناوەندی IQ
   ckb-IR           Central Kurdish Iran                      کوردیی ناوەندی IR
   cs               Czech                                     čeština
   cs-CZ            Czech Czech Republic                      čeština Česká republika
   cu               Church Slavic                             cu
   cu-RU            Church Slavic Russia                      cu RU
   cy               Welsh                                     Cymraeg
   cy-GB            Welsh United Kingdom                      Cymraeg Y Deyrnas Unedig
   da               Danish                                    dansk
   da-DK            Danish Denmark                            dansk Danmark
   da-GL            Danish Greenland                          dansk Grønland
   dav              Taita                                     Kitaita
   dav-KE           Taita Kenya                               Kitaita Kenya
   de               German                                    Deutsch
   de-AT            German Austria                            Deutsch Österreich
   de-BE            German Belgium                            Deutsch Belgien
   de-CH            German Switzerland                        Deutsch Schweiz
   de-DE            German Germany                            Deutsch Deutschland
   de-LI            German Liechtenstein                      Deutsch Liechtenstein
   de-LU            German Luxembourg                         Deutsch Luxemburg
   dje              Zarma                                     Zarmaciine
   dje-NE           Zarma Niger                               Zarmaciine Nižer
   dsb              Lower Sorbian                             dolnoserbšćina
   dsb-DE           Lower Sorbian Germany                     dolnoserbšćina Nimska
   dua              Duala                                     duálá
   dua-CM           Duala Cameroon                            duálá Cameroun
   dyo              Jola-Fonyi                                joola
   dyo-SN           Jola-Fonyi Senegal                        joola Senegal
   dz               Dzongkha                                  རྫོང་ཁ
   dz-BT            Dzongkha Bhutan                           རྫོང་ཁ འབྲུག
   ebu              Embu                                      Kĩembu
   ebu-KE           Embu Kenya                                Kĩembu Kenya
   ee               Ewe                                       Eʋegbe
   ee-GH            Ewe Ghana                                 Eʋegbe Ghana nutome
   ee-TG            Ewe Togo                                  Eʋegbe Togo nutome
   el               Greek                                     Ελληνικά
   el-CY            Greek Cyprus                              Ελληνικά Κύπρος
   el-GR            Greek Greece                              Ελληνικά Ελλάδα
   en               English                                   English
   en-001           English World                             English World
   en-150           English Europe                            English Europe
   en-AG            English Antigua & Barbuda                 English Antigua & Barbuda
   en-AI            English Anguilla                          English Anguilla
   en-AS            English American Samoa                    English American Samoa
   en-AT            English Austria                           English Austria
   en-AU            English Australia                         English Australia
   en-BB            English Barbados                          English Barbados
   en-BE            English Belgium                           English Belgium
   en-BI            English Burundi                           English Burundi
   en-BM            English Bermuda                           English Bermuda
   en-BS            English Bahamas                           English Bahamas
   en-BW            English Botswana                          English Botswana
   en-BZ            English Belize                            English Belize
   en-CA            English Canada                            English Canada
   en-CC            English Cocos (Keeling) Islands           English Cocos (Keeling) Islands
   en-CH            English Switzerland                       English Switzerland
   en-CK            English Cook Islands                      English Cook Islands
   en-CM            English Cameroon                          English Cameroon
   en-CX            English Christmas Island                  English Christmas Island
   en-CY            English Cyprus                            English Cyprus
   en-DE            English Germany                           English Germany
   en-DG            English Diego Garcia                      English Diego Garcia
   en-DK            English Denmark                           English Denmark
   en-DM            English Dominica                          English Dominica
   en-ER            English Eritrea                           English Eritrea
   en-FI            English Finland                           English Finland
   en-FJ            English Fiji                              English Fiji
   en-FK            English Falkland Islands                  English Falkland Islands
   en-FM            English Micronesia                        English Micronesia
   en-GB            English United Kingdom                    English United Kingdom
   en-GD            English Grenada                           English Grenada
   en-GG            English Guernsey                          English Guernsey
   en-GH            English Ghana                             English Ghana
   en-GI            English Gibraltar                         English Gibraltar
   en-GM            English Gambia                            English Gambia
   en-GU            English Guam                              English Guam
   en-GY            English Guyana                            English Guyana
   en-HK            English Hong Kong SAR China               English Hong Kong SAR China
   en-IE            English Ireland                           English Ireland
   en-IL            English Israel                            English Israel
   en-IM            English Isle of Man                       English Isle of Man
   en-IN            English India                             English India
   en-IO            English British Indian Ocean Territory    English British Indian Ocean Territory
   en-JE            English Jersey                            English Jersey
   en-JM            English Jamaica                           English Jamaica
   en-KE            English Kenya                             English Kenya
   en-KI            English Kiribati                          English Kiribati
   en-KN            English St. Kitts & Nevis                 English St. Kitts & Nevis
   en-KY            English Cayman Islands                    English Cayman Islands
   en-LC            English St. Lucia                         English St. Lucia
   en-LR            English Liberia                           English Liberia
   en-LS            English Lesotho                           English Lesotho
   en-MG            English Madagascar                        English Madagascar
   en-MH            English Marshall Islands                  English Marshall Islands
   en-MO            English Macau SAR China                   English Macau SAR China
   en-MP            English Northern Mariana Islands          English Northern Mariana Islands
   en-MS            English Montserrat                        English Montserrat
   en-MT            English Malta                             English Malta
   en-MU            English Mauritius                         English Mauritius
   en-MW            English Malawi                            English Malawi
   en-MY            English Malaysia                          English Malaysia
   en-NA            English Namibia                           English Namibia
   en-NF            English Norfolk Island                    English Norfolk Island
   en-NG            English Nigeria                           English Nigeria
   en-NL            English Netherlands                       English Netherlands
   en-NR            English Nauru                             English Nauru
   en-NU            English Niue                              English Niue
   en-NZ            English New Zealand                       English New Zealand
   en-PG            English Papua New Guinea                  English Papua New Guinea
   en-PH            English Philippines                       English Philippines
   en-PK            English Pakistan                          English Pakistan
   en-PN            English Pitcairn Islands                  English Pitcairn Islands
   en-PR            English Puerto Rico                       English Puerto Rico
   en-PW            English Palau                             English Palau
   en-RW            English Rwanda                            English Rwanda
   en-SB            English Solomon Islands                   English Solomon Islands
   en-SC            English Seychelles                        English Seychelles
   en-SD            English Sudan                             English Sudan
   en-SE            English Sweden                            English Sweden
   en-SG            English Singapore                         English Singapore
   en-SH            English St. Helena                        English St. Helena
   en-SI            English Slovenia                          English Slovenia
   en-SL            English Sierra Leone                      English Sierra Leone
   en-SS            English South Sudan                       English South Sudan
   en-SX            English Sint Maarten                      English Sint Maarten
   en-SZ            English Swaziland                         English Swaziland
   en-TC            English Turks & Caicos Islands            English Turks & Caicos Islands
   en-TK            English Tokelau                           English Tokelau
   en-TO            English Tonga                             English Tonga
   en-TT            English Trinidad & Tobago                 English Trinidad & Tobago
   en-TV            English Tuvalu                            English Tuvalu
   en-TZ            English Tanzania                          English Tanzania
   en-UG            English Uganda                            English Uganda
   en-UM            English U.S. Outlying Islands             English U.S. Outlying Islands
   en-US            English United States                     English United States
   en-US-POSIX      English United States Computer            English United States Computer
   en-VC            English St. Vincent & Grenadines          English St. Vincent & Grenadines
   en-VG            English British Virgin Islands            English British Virgin Islands
   en-VI            English U.S. Virgin Islands               English U.S. Virgin Islands
   en-VU            English Vanuatu                           English Vanuatu
   en-WS            English Samoa                             English Samoa
   en-ZA            English South Africa                      English South Africa
   en-ZM            English Zambia                            English Zambia
   en-ZW            English Zimbabwe                          English Zimbabwe
   eo               Esperanto                                 esperanto
   eo-001           Esperanto World                           esperanto 001
   es               Spanish                                   español
   es-419           Spanish Latin America                     español Latinoamérica
   es-AR            Spanish Argentina                         español Argentina
   es-BO            Spanish Bolivia                           español Bolivia
   es-BR            Spanish Brazil                            español Brasil
   es-CL            Spanish Chile                             español Chile
   es-CO            Spanish Colombia                          español Colombia
   es-CR            Spanish Costa Rica                        español Costa Rica
   es-CU            Spanish Cuba                              español Cuba
   es-DO            Spanish Dominican Republic                español República Dominicana
   es-EA            Spanish Ceuta & Melilla                   español Ceuta y Melilla
   es-EC            Spanish Ecuador                           español Ecuador
   es-ES            Spanish Spain                             español España
   es-GQ            Spanish Equatorial Guinea                 español Guinea Ecuatorial
   es-GT            Spanish Guatemala                         español Guatemala
   es-HN            Spanish Honduras                          español Honduras
   es-IC            Spanish Canary Islands                    español Canarias
   es-MX            Spanish Mexico                            español México
   es-NI            Spanish Nicaragua                         español Nicaragua
   es-PA            Spanish Panama                            español Panamá
   es-PE            Spanish Peru                              español Perú
   es-PH            Spanish Philippines                       español Filipinas
   es-PR            Spanish Puerto Rico                       español Puerto Rico
   es-PY            Spanish Paraguay                          español Paraguay
   es-SV            Spanish El Salvador                       español El Salvador
   es-US            Spanish United States                     español Estados Unidos
   es-UY            Spanish Uruguay                           español Uruguay
   es-VE            Spanish Venezuela                         español Venezuela
   et               Estonian                                  eesti
   et-EE            Estonian Estonia                          eesti Eesti
   eu               Basque                                    euskara
   eu-ES            Basque Spain                              euskara Espainia
   ewo              Ewondo                                    ewondo
   ewo-CM           Ewondo Cameroon                           ewondo Kamərún
   fa               Persian                                   فارسی
   fa-AF            Persian Afghanistan                       فارسی افغانستان
   fa-IR            Persian Iran                              فارسی ایران
   ff               Fulah                                     Pulaar
   ff-CM            Fulah Cameroon                            Pulaar Kameruun
   ff-GN            Fulah Guinea                              Pulaar Gine
   ff-MR            Fulah Mauritania                          Pulaar Muritani
   ff-SN            Fulah Senegal                             Pulaar Senegaal
   fi               Finnish                                   suomi
   fi-FI            Finnish Finland                           suomi Suomi
   fil              Filipino                                  Filipino
   fil-PH           Filipino Philippines                      Filipino Pilipinas
   fo               Faroese                                   føroyskt
   fo-DK            Faroese Denmark                           føroyskt Danmark
   fo-FO            Faroese Faroe Islands                     føroyskt Føroyar
   fr               French                                    français
   fr-BE            French Belgium                            français Belgique
   fr-BF            French Burkina Faso                       français Burkina Faso
   fr-BI            French Burundi                            français Burundi
   fr-BJ            French Benin                              français Bénin
   fr-BL            French St. Barthélemy                     français Saint-Barthélemy
   fr-CA            French Canada                             français Canada
   fr-CD            French Congo - Kinshasa                   français Congo-Kinshasa
   fr-CF            French Central African Republic           français République centrafricaine
   fr-CG            French Congo - Brazzaville                français Congo-Brazzaville
   fr-CH            French Switzerland                        français Suisse
   fr-CI            French Côte d’Ivoire                      français Côte d’Ivoire
   fr-CM            French Cameroon                           français Cameroun
   fr-DJ            French Djibouti                           français Djibouti
   fr-DZ            French Algeria                            français Algérie
   fr-FR            French France                             français France
   fr-GA            French Gabon                              français Gabon
   fr-GF            French French Guiana                      français Guyane française
   fr-GN            French Guinea                             français Guinée
   fr-GP            French Guadeloupe                         français Guadeloupe
   fr-GQ            French Equatorial Guinea                  français Guinée équatoriale
   fr-HT            French Haiti                              français Haïti
   fr-KM            French Comoros                            français Comores
   fr-LU            French Luxembourg                         français Luxembourg
   fr-MA            French Morocco                            français Maroc
   fr-MC            French Monaco                             français Monaco
   fr-MF            French St. Martin                         français Saint-Martin
   fr-MG            French Madagascar                         français Madagascar
   fr-ML            French Mali                               français Mali
   fr-MQ            French Martinique                         français Martinique
   fr-MR            French Mauritania                         français Mauritanie
   fr-MU            French Mauritius                          français Maurice
   fr-NC            French New Caledonia                      français Nouvelle-Calédonie
   fr-NE            French Niger                              français Niger
   fr-PF            French French Polynesia                   français Polynésie française
   fr-PM            French St. Pierre & Miquelon              français Saint-Pierre-et-Miquelon
   fr-RE            French Réunion                            français La Réunion
   fr-RW            French Rwanda                             français Rwanda
   fr-SC            French Seychelles                         français Seychelles
   fr-SN            French Senegal                            français Sénégal
   fr-SY            French Syria                              français Syrie
   fr-TD            French Chad                               français Tchad
   fr-TG            French Togo                               français Togo
   fr-TN            French Tunisia                            français Tunisie
   fr-VU            French Vanuatu                            français Vanuatu
   fr-WF            French Wallis & Futuna                    français Wallis-et-Futuna
   fr-YT            French Mayotte                            français Mayotte
   fur              Friulian                                  furlan
   fur-IT           Friulian Italy                            furlan Italie
   fy               Western Frisian                           West-Frysk
   fy-NL            Western Frisian Netherlands               West-Frysk Nederlân
   ga               Irish                                     Gaeilge
   ga-IE            Irish Ireland                             Gaeilge Éire
   gd               Scottish Gaelic                           Gàidhlig
   gd-GB            Scottish Gaelic United Kingdom            Gàidhlig An Rìoghachd Aonaichte
   gl               Galician                                  galego
   gl-ES            Galician Spain                            galego España
   gsw              Swiss German                              Schwiizertüütsch
   gsw-CH           Swiss German Switzerland                  Schwiizertüütsch Schwiiz
   gsw-FR           Swiss German France                       Schwiizertüütsch Frankriich
   gsw-LI           Swiss German Liechtenstein                Schwiizertüütsch Liächteschtäi
   gu               Gujarati                                  ગુજરાતી
   gu-IN            Gujarati India                            ગુજરાતી ભારત
   guz              Gusii                                     Ekegusii
   guz-KE           Gusii Kenya                               Ekegusii Kenya
   gv               Manx                                      Gaelg
   gv-IM            Manx Isle of Man                          Gaelg Ellan Vannin
   ha               Hausa                                     Hausa
   ha-GH            Hausa Ghana                               Hausa Gana
   ha-NE            Hausa Niger                               Hausa Nijar
   ha-NG            Hausa Nigeria                             Hausa Najeriya
   haw              Hawaiian                                  ʻŌlelo Hawaiʻi
   haw-US           Hawaiian United States                    ʻŌlelo Hawaiʻi ʻAmelika Hui Pū ʻIa
   he               Hebrew                                    עברית
   he-IL            Hebrew Israel                             עברית ישראל
   hi               Hindi                                     हिन्दी
   hi-IN            Hindi India                               हिन्दी भारत
   hr               Croatian                                  hrvatski
   hr-BA            Croatian Bosnia & Herzegovina             hrvatski Bosna i Hercegovina
   hr-HR            Croatian Croatia                          hrvatski Hrvatska
   hsb              Upper Sorbian                             hornjoserbšćina
   hsb-DE           Upper Sorbian Germany                     hornjoserbšćina Němska
   hu               Hungarian                                 magyar
   hu-HU            Hungarian Hungary                         magyar Magyarország
   hy               Armenian                                  հայերեն
   hy-AM            Armenian Armenia                          հայերեն Հայաստան
   id               Indonesian                                Indonesia
   id-ID            Indonesian Indonesia                      Indonesia Indonesia
   ig               Igbo                                      Igbo
   ig-NG            Igbo Nigeria                              Igbo Nigeria
   ii               Sichuan Yi                                ꆈꌠꉙ
   ii-CN            Sichuan Yi China                          ꆈꌠꉙ ꍏꇩ
   is               Icelandic                                 íslenska
   is-IS            Icelandic Iceland                         íslenska Ísland
   it               Italian                                   italiano
   it-CH            Italian Switzerland                       italiano Svizzera
   it-IT            Italian Italy                             italiano Italia
   it-SM            Italian San Marino                        italiano San Marino
   ja               Japanese                                  日本語
   ja-JP            Japanese Japan                            日本語 日本
   jgo              Ngomba                                    Ndaꞌa
   jgo-CM           Ngomba Cameroon                           Ndaꞌa Kamɛlûn
   jmc              Machame                                   Kimachame
   jmc-TZ           Machame Tanzania                          Kimachame Tanzania
   ka               Georgian                                  ქართული
   ka-GE            Georgian Georgia                          ქართული საქართველო
   kab              Kabyle                                    Taqbaylit
   kab-DZ           Kabyle Algeria                            Taqbaylit Lezzayer
   kam              Kamba                                     Kikamba
   kam-KE           Kamba Kenya                               Kikamba Kenya
   kde              Makonde                                   Chimakonde
   kde-TZ           Makonde Tanzania                          Chimakonde Tanzania
   kea              Kabuverdianu                              kabuverdianu
   kea-CV           Kabuverdianu Cape Verde                   kabuverdianu Kabu Verdi
   khq              Koyra Chiini                              Koyra ciini
   khq-ML           Koyra Chiini Mali                         Koyra ciini Maali
   ki               Kikuyu                                    Gikuyu
   ki-KE            Kikuyu Kenya                              Gikuyu Kenya
   kk               Kazakh                                    қазақ тілі
   kk-KZ            Kazakh Kazakhstan                         қазақ тілі Қазақстан
   kkj              Kako                                      kakɔ
   kkj-CM           Kako Cameroon                             kakɔ Kamɛrun
   kl               Kalaallisut                               kalaallisut
   kl-GL            Kalaallisut Greenland                     kalaallisut Kalaallit Nunaat
   kln              Kalenjin                                  Kalenjin
   kln-KE           Kalenjin Kenya                            Kalenjin Emetab Kenya
   km               Khmer                                     ខ្មែរ
   km-KH            Khmer Cambodia                            ខ្មែរ កម្ពុជា
   kn               Kannada                                   ಕನ್ನಡ
   kn-IN            Kannada India                             ಕನ್ನಡ ಭಾರತ
   ko               Korean                                    한국어
   ko-KP            Korean North Korea                        한국어 조선민주주의인민공화국
   ko-KR            Korean South Korea                        한국어 대한민국
   kok              Konkani                                   कोंकणी
   kok-IN           Konkani India                             कोंकणी भारत
   ks               Kashmiri                                  کٲشُر
   ks-IN            Kashmiri India                            کٲشُر ہِنٛدوستان
   ksb              Shambala                                  Kishambaa
   ksb-TZ           Shambala Tanzania                         Kishambaa Tanzania
   ksf              Bafia                                     rikpa
   ksf-CM           Bafia Cameroon                            rikpa kamɛrún
   ksh              Colognian                                 Kölsch
   ksh-DE           Colognian Germany                         Kölsch Doütschland
   kw               Cornish                                   kernewek
   kw-GB            Cornish United Kingdom                    kernewek Rywvaneth Unys
   ky               Kyrgyz                                    кыргызча
   ky-KG            Kyrgyz Kyrgyzstan                         кыргызча Кыргызстан
   lag              Langi                                     Kɨlaangi
   lag-TZ           Langi Tanzania                            Kɨlaangi Taansanía
   lb               Luxembourgish                             Lëtzebuergesch
   lb-LU            Luxembourgish Luxembourg                  Lëtzebuergesch Lëtzebuerg
   lg               Ganda                                     Luganda
   lg-UG            Ganda Uganda                              Luganda Yuganda
   lkt              Lakota                                    Lakȟólʼiyapi
   lkt-US           Lakota United States                      Lakȟólʼiyapi Mílahaŋska Tȟamákȟočhe
   ln               Lingala                                   lingála
   ln-AO            Lingala Angola                            lingála Angóla
   ln-CD            Lingala Congo - Kinshasa                  lingála Repibiki demokratiki ya Kongó
   ln-CF            Lingala Central African Republic          lingála Repibiki ya Afríka ya Káti
   ln-CG            Lingala Congo - Brazzaville               lingála Kongo
   lo               Lao                                       ລາວ
   lo-LA            Lao Laos                                  ລາວ ລາວ
   lrc              Northern Luri                             لۊری شومالی
   lrc-IQ           Northern Luri Iraq                        لۊری شومالی IQ
   lrc-IR           Northern Luri Iran                        لۊری شومالی IR
   lt               Lithuanian                                lietuvių
   lt-LT            Lithuanian Lithuania                      lietuvių Lietuva
   lu               Luba-Katanga                              Tshiluba
   lu-CD            Luba-Katanga Congo - Kinshasa             Tshiluba Ditunga wa Kongu
   luo              Luo                                       Dholuo
   luo-KE           Luo Kenya                                 Dholuo Kenya
   luy              Luyia                                     Luluhia
   luy-KE           Luyia Kenya                               Luluhia Kenya
   lv               Latvian                                   latviešu
   lv-LV            Latvian Latvia                            latviešu Latvija
   mas              Masai                                     Maa
   mas-KE           Masai Kenya                               Maa Kenya
   mas-TZ           Masai Tanzania                            Maa Tansania
   mer              Meru                                      Kĩmĩrũ
   mer-KE           Meru Kenya                                Kĩmĩrũ Kenya
   mfe              Morisyen                                  kreol morisien
   mfe-MU           Morisyen Mauritius                        kreol morisien Moris
   mg               Malagasy                                  Malagasy
   mg-MG            Malagasy Madagascar                       Malagasy Madagasikara
   mgh              Makhuwa-Meetto                            Makua
   mgh-MZ           Makhuwa-Meetto Mozambique                 Makua Umozambiki
   mgo              Metaʼ                                     metaʼ
   mgo-CM           Metaʼ Cameroon                            metaʼ Kamalun
   mk               Macedonian                                македонски
   mk-MK            Macedonian Macedonia                      македонски Македонија
   ml               Malayalam                                 മലയാളം
   ml-IN            Malayalam India                           മലയാളം ഇന്ത്യ
   mn               Mongolian                                 монгол
   mn-MN            Mongolian Mongolia                        монгол Монгол
   mr               Marathi                                   मराठी
   mr-IN            Marathi India                             मराठी भारत
   ms               Malay                                     Bahasa Melayu
   ms-BN            Malay Brunei                              Bahasa Melayu Brunei
   ms-MY            Malay Malaysia                            Bahasa Melayu Malaysia
   ms-SG            Malay Singapore                           Bahasa Melayu Singapura
   mt               Maltese                                   Malti
   mt-MT            Maltese Malta                             Malti Malta
   mua              Mundang                                   MUNDAŊ
   mua-CM           Mundang Cameroon                          MUNDAŊ kameruŋ
   my               Burmese                                   ဗမာ
   my-MM            Burmese Myanmar (Burma)                   ဗမာ မြန်မာ
   mzn              Mazanderani                               مازرونی
   mzn-IR           Mazanderani Iran                          مازرونی ایران
   naq              Nama                                      Khoekhoegowab
   naq-NA           Nama Namibia                              Khoekhoegowab Namibiab
   nb               Norwegian Bokmål                          norsk bokmål
   nb-NO            Norwegian Bokmål Norway                   norsk bokmål Norge
   nb-SJ            Norwegian Bokmål Svalbard & Jan Mayen     norsk bokmål Svalbard og Jan Mayen
   nd               North Ndebele                             isiNdebele
   nd-ZW            North Ndebele Zimbabwe                    isiNdebele Zimbabwe
   ne               Nepali                                    नेपाली
   ne-IN            Nepali India                              नेपाली भारत
   ne-NP            Nepali Nepal                              नेपाली नेपाल
   nl               Dutch                                     Nederlands
   nl-AW            Dutch Aruba                               Nederlands Aruba
   nl-BE            Dutch Belgium                             Nederlands België
   nl-BQ            Dutch Caribbean Netherlands               Nederlands Caribisch Nederland
   nl-CW            Dutch Curaçao                             Nederlands Curaçao
   nl-NL            Dutch Netherlands                         Nederlands Nederland
   nl-SR            Dutch Suriname                            Nederlands Suriname
   nl-SX            Dutch Sint Maarten                        Nederlands Sint-Maarten
   nmg              Kwasio                                    nmg
   nmg-CM           Kwasio Cameroon                           nmg Kamerun
   nn               Norwegian Nynorsk                         nynorsk
   nn-NO            Norwegian Nynorsk Norway                  nynorsk Noreg
   nnh              Ngiemboon                                 Shwóŋò ngiembɔɔn
   nnh-CM           Ngiemboon Cameroon                        Shwóŋò ngiembɔɔn Kàmalûm
   nus              Nuer                                      Thok Nath
   nus-SS           Nuer South Sudan                          Thok Nath SS
   nyn              Nyankole                                  Runyankore
   nyn-UG           Nyankole Uganda                           Runyankore Uganda
   om               Oromo                                     Oromoo
   om-ET            Oromo Ethiopia                            Oromoo Itoophiyaa
   om-KE            Oromo Kenya                               Oromoo Keeniyaa
   or               Oriya                                     ଓଡ଼ିଆ
   or-IN            Oriya India                               ଓଡ଼ିଆ ଭାରତ
   os               Ossetic                                   ирон
   os-GE            Ossetic Georgia                           ирон Гуырдзыстон
   os-RU            Ossetic Russia                            ирон Уӕрӕсе
   pa               Punjabi                                   ਪੰਜਾਬੀ
   pa-Arab          Punjabi                                   پنجابی
   pa-Arab-PK       Punjabi Pakistan Arabic                   پنجابی پکستان عربی
   pa-Guru          Punjabi                                   ਪੰਜਾਬੀ
   pa-Guru-IN       Punjabi India Gurmukhi                    ਪੰਜਾਬੀ ਭਾਰਤ ਗੁਰਮੁਖੀ
   pl               Polish                                    polski
   pl-PL            Polish Poland                             polski Polska
   prg              Prussian                                  prūsiskan
   prg-001          Prussian World                            prūsiskan 001
   ps               Pashto                                    پښتو
   ps-AF            Pashto Afghanistan                        پښتو افغانستان
   pt               Portuguese                                português
   pt-AO            Portuguese Angola                         português Angola
   pt-BR            Portuguese Brazil                         português Brasil
   pt-CH            Portuguese Switzerland                    português Suíça
   pt-CV            Portuguese Cape Verde                     português Cabo Verde
   pt-GQ            Portuguese Equatorial Guinea              português Guiné Equatorial
   pt-GW            Portuguese Guinea-Bissau                  português Guiné-Bissau
   pt-LU            Portuguese Luxembourg                     português Luxemburgo
   pt-MO            Portuguese Macau SAR China                português Macau, RAE da China
   pt-MZ            Portuguese Mozambique                     português Moçambique
   pt-PT            Portuguese Portugal                       português Portugal
   pt-ST            Portuguese São Tomé & Príncipe            português São Tomé e Príncipe
   pt-TL            Portuguese Timor-Leste                    português Timor-Leste
   qu               Quechua                                   Runasimi
   qu-BO            Quechua Bolivia                           Runasimi Bolivia
   qu-EC            Quechua Ecuador                           Runasimi Ecuador
   qu-PE            Quechua Peru                              Runasimi Perú
   rm               Romansh                                   rumantsch
   rm-CH            Romansh Switzerland                       rumantsch Svizra
   rn               Rundi                                     Ikirundi
   rn-BI            Rundi Burundi                             Ikirundi Uburundi
   ro               Romanian                                  română
   ro-MD            Romanian Moldova                          română Republica Moldova
   ro-RO            Romanian Romania                          română România
   rof              Rombo                                     Kihorombo
   rof-TZ           Rombo Tanzania                            Kihorombo Tanzania
   root             Root                                      root
   ru               Russian                                   русский
   ru-BY            Russian Belarus                           русский Беларусь
   ru-KG            Russian Kyrgyzstan                        русский Киргизия
   ru-KZ            Russian Kazakhstan                        русский Казахстан
   ru-MD            Russian Moldova                           русский Молдова
   ru-RU            Russian Russia                            русский Россия
   ru-UA            Russian Ukraine                           русский Украина
   rw               Kinyarwanda                               Kinyarwanda
   rw-RW            Kinyarwanda Rwanda                        Kinyarwanda Rwanda
   rwk              Rwa                                       Kiruwa
   rwk-TZ           Rwa Tanzania                              Kiruwa Tanzania
   sah              Sakha                                     саха тыла
   sah-RU           Sakha Russia                              саха тыла Арассыыйа
   saq              Samburu                                   Kisampur
   saq-KE           Samburu Kenya                             Kisampur Kenya
   sbp              Sangu                                     Ishisangu
   sbp-TZ           Sangu Tanzania                            Ishisangu Tansaniya
   se               Northern Sami                             davvisámegiella
   se-FI            Northern Sami Finland                     davvisámegiella Suopma
   se-NO            Northern Sami Norway                      davvisámegiella Norga
   se-SE            Northern Sami Sweden                      davvisámegiella Ruoŧŧa
   seh              Sena                                      sena
   seh-MZ           Sena Mozambique                           sena Moçambique
   ses              Koyraboro Senni                           Koyraboro senni
   ses-ML           Koyraboro Senni Mali                      Koyraboro senni Maali
   sg               Sango                                     Sängö
   sg-CF            Sango Central African Republic            Sängö Ködörösêse tî Bêafrîka
   shi              Tachelhit                                 ⵜⴰⵛⵍⵃⵉⵜ
   shi-Latn         Tachelhit                                 Tashelḥiyt
   shi-Latn-MA      Tachelhit Morocco Latin                   Tashelḥiyt lmɣrib Latn
   shi-Tfng         Tachelhit                                 ⵜⴰⵛⵍⵃⵉⵜ
   shi-Tfng-MA      Tachelhit Morocco Tifinagh                ⵜⴰⵛⵍⵃⵉⵜ ⵍⵎⵖⵔⵉⴱ Tfng
   si               Sinhala                                   සිංහල
   si-LK            Sinhala Sri Lanka                         සිංහල ශ්‍රී ලංකාව
   sk               Slovak                                    slovenčina
   sk-SK            Slovak Slovakia                           slovenčina Slovensko
   sl               Slovenian                                 slovenščina
   sl-SI            Slovenian Slovenia                        slovenščina Slovenija
   smn              Inari Sami                                anarâškielâ
   smn-FI           Inari Sami Finland                        anarâškielâ Suomâ
   sn               Shona                                     chiShona
   sn-ZW            Shona Zimbabwe                            chiShona Zimbabwe
   so               Somali                                    Soomaali
   so-DJ            Somali Djibouti                           Soomaali Jabuuti
   so-ET            Somali Ethiopia                           Soomaali Itoobiya
   so-KE            Somali Kenya                              Soomaali Kiiniya
   so-SO            Somali Somalia                            Soomaali Soomaaliya
   sq               Albanian                                  shqip
   sq-AL            Albanian Albania                          shqip Shqipëri
   sq-MK            Albanian Macedonia                        shqip Maqedoni
   sq-XK            Albanian Kosovo                           shqip Kosovë
   sr               Serbian                                   српски
   sr-Cyrl          Serbian                                   српски
   sr-Cyrl-BA       Serbian Bosnia & Herzegovina Cyrillic     српски Босна и Херцеговина ћирилица
   sr-Cyrl-ME       Serbian Montenegro Cyrillic               српски Црна Гора ћирилица
   sr-Cyrl-RS       Serbian Serbia Cyrillic                   српски Србија ћирилица
   sr-Cyrl-XK       Serbian Kosovo Cyrillic                   српски Косово ћирилица
   sr-Latn          Serbian                                   srpski
   sr-Latn-BA       Serbian Bosnia & Herzegovina Latin        srpski Bosna i Hercegovina latinica
   sr-Latn-ME       Serbian Montenegro Latin                  srpski Crna Gora latinica
   sr-Latn-RS       Serbian Serbia Latin                      srpski Srbija latinica
   sr-Latn-XK       Serbian Kosovo Latin                      srpski Kosovo latinica
   sv               Swedish                                   svenska
   sv-AX            Swedish Åland Islands                     svenska Åland
   sv-FI            Swedish Finland                           svenska Finland
   sv-SE            Swedish Sweden                            svenska Sverige
   sw               Swahili                                   Kiswahili
   sw-CD            Swahili Congo - Kinshasa                  Kiswahili Jamhuri ya Kidemokrasia ya Kongo
   sw-KE            Swahili Kenya                             Kiswahili Kenya
   sw-TZ            Swahili Tanzania                          Kiswahili Tanzania
   sw-UG            Swahili Uganda                            Kiswahili Uganda
   ta               Tamil                                     தமிழ்
   ta-IN            Tamil India                               தமிழ் இந்தியா
   ta-LK            Tamil Sri Lanka                           தமிழ் இலங்கை
   ta-MY            Tamil Malaysia                            தமிழ் மலேசியா
   ta-SG            Tamil Singapore                           தமிழ் சிங்கப்பூர்
   te               Telugu                                    తెలుగు
   te-IN            Telugu India                              తెలుగు భారత దేశం
   teo              Teso                                      Kiteso
   teo-KE           Teso Kenya                                Kiteso Kenia
   teo-UG           Teso Uganda                               Kiteso Uganda
   th               Thai                                      ไทย
   th-TH            Thai Thailand                             ไทย ไทย
   ti               Tigrinya                                  ትግርኛ
   ti-ER            Tigrinya Eritrea                          ትግርኛ ER
   ti-ET            Tigrinya Ethiopia                         ትግርኛ ET
   tk               Turkmen                                   tk
   tk-TM            Turkmen Turkmenistan                      tk TM
   to               Tongan                                    lea fakatonga
   to-TO            Tongan Tonga                              lea fakatonga Tonga
   tr               Turkish                                   Türkçe
   tr-CY            Turkish Cyprus                            Türkçe Kıbrıs
   tr-TR            Turkish Turkey                            Türkçe Türkiye
   twq              Tasawaq                                   Tasawaq senni
   twq-NE           Tasawaq Niger                             Tasawaq senni Nižer
   tzm              Central Atlas Tamazight                   Tamaziɣt n laṭlaṣ
   tzm-MA           Central Atlas Tamazight Morocco           Tamaziɣt n laṭlaṣ Meṛṛuk
   ug               Uyghur                                    ئۇيغۇرچە
   ug-CN            Uyghur China                              ئۇيغۇرچە جۇڭگو
   uk               Ukrainian                                 українська
   uk-UA            Ukrainian Ukraine                         українська Україна
   ur               Urdu                                      اردو
   ur-IN            Urdu India                                اردو بھارت
   ur-PK            Urdu Pakistan                             اردو پاکستان
   uz               Uzbek                                     o‘zbek
   uz-Arab          Uzbek                                     اوزبیک
   uz-Arab-AF       Uzbek Afghanistan Arabic                  اوزبیک افغانستان عربی
   uz-Cyrl          Uzbek                                     Ўзбек
   uz-Cyrl-UZ       Uzbek Uzbekistan Cyrillic                 Ўзбек Ўзбекистон Кирил
   uz-Latn          Uzbek                                     o‘zbek
   uz-Latn-UZ       Uzbek Uzbekistan Latin                    o‘zbek Oʻzbekiston lotin
   vai              Vai                                       ꕙꔤ
   vai-Latn         Vai                                       Vai
   vai-Latn-LR      Vai Liberia Latin                         Vai Laibhiya Latn
   vai-Vaii         Vai                                       ꕙꔤ
   vai-Vaii-LR      Vai Liberia Vai                           ꕙꔤ ꕞꔤꔫꕩ Vaii
   vi               Vietnamese                                Tiếng Việt
   vi-VN            Vietnamese Vietnam                        Tiếng Việt Việt Nam
   vo               Volapük                                   vo
   vo-001           Volapük World                             vo 001
   vun              Vunjo                                     Kyivunjo
   vun-TZ           Vunjo Tanzania                            Kyivunjo Tanzania
   wae              Walser                                    Walser
   wae-CH           Walser Switzerland                        Walser Schwiz
   xog              Soga                                      Olusoga
   xog-UG           Soga Uganda                               Olusoga Yuganda
   yav              Yangben                                   nuasue
   yav-CM           Yangben Cameroon                          nuasue Kemelún
   yi               Yiddish                                   ייִדיש
   yi-001           Yiddish World                             ייִדיש וועלט
   yo               Yoruba                                    Èdè Yorùbá
   yo-BJ            Yoruba Benin                              Èdè Yorùbá Orílɛ́ède Bɛ̀nɛ̀
   yo-NG            Yoruba Nigeria                            Èdè Yorùbá Orílẹ́ède Nàìjíríà
   yue              Cantonese                                 粵語
   yue-HK           Cantonese Hong Kong SAR China             粵語 中華人民共和國香港特別行政區
   zgh              Standard Moroccan Tamazight               ⵜⴰⵎⴰⵣⵉⵖⵜ
   zgh-MA           Standard Moroccan Tamazight Morocco       ⵜⴰⵎⴰⵣⵉⵖⵜ ⵍⵎⵖⵔⵉⴱ
   zh               Chinese                                   中文
   zh-Hans          Chinese                                   中文
   zh-Hans-CN       Chinese China Simplified                  中文 中国 简体
   zh-Hans-HK       Chinese Hong Kong SAR China Simplified    中文 中国香港特别行政区 简体
   zh-Hans-MO       Chinese Macau SAR China Simplified        中文 中国澳门特别行政区 简体
   zh-Hans-SG       Chinese Singapore Simplified              中文 新加坡 简体
   zh-Hant          Chinese                                   中文
   zh-Hant-HK       Chinese Hong Kong SAR China Traditional   中文 中華人民共和國香港特別行政區 繁體字
   zh-Hant-MO       Chinese Macau SAR China Traditional       中文 中華人民共和國澳門特別行政區 繁體字
   zh-Hant-TW       Chinese Taiwan Traditional                中文 台灣 繁體
   zu               Zulu                                      isiZulu
   zu-ZA            Zulu South Africa                         isiZulu i-South Africa
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime-Locale>
  (or L<bug-datetime-locale@rt.cpan.org|mailto:bug-datetime-locale@rt.cpan.org>).
  
  There is a mailing list available for users of this distribution,
  L<mailto:datetime@perl.org>.
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2016 by Dave Rolsky.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATETIME_LOCALE_CATALOG

    $main::fatpacked{"DateTime/Locale/Data.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_LOCALE_DATA';
  ###########################################################################
  #
  # This file is partially auto-generated by the DateTime::Locale generator
  # tools (v0.10). This code generator comes with the DateTime::Locale
  # distribution in the tools/ directory, and is called generate-modules.
  #
  # This file was generated from the CLDR JSON locale data. See the LICENSE.cldr
  # file included in this distribution for license details.
  #
  # Do not edit this file directly unless you are sure the part you are editing
  # is not created by the generator.
  #
  ###########################################################################
  
  package DateTime::Locale::Data;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.05';
  
  #<<<
  ### :start CLDRVersion:
  our $CLDRVersion = 29;
  ### :end CLDRVersion:
  #>>>
  
  #<<<
  ### :start Codes:
  our %Codes = (
    af => 1,
    "af-NA" => 1,
    "af-ZA" => 1,
    agq => 1,
    "agq-CM" => 1,
    ak => 1,
    "ak-GH" => 1,
    am => 1,
    "am-ET" => 1,
    ar => 1,
    "ar-001" => 1,
    "ar-AE" => 1,
    "ar-BH" => 1,
    "ar-DJ" => 1,
    "ar-DZ" => 1,
    "ar-EG" => 1,
    "ar-EH" => 1,
    "ar-ER" => 1,
    "ar-IL" => 1,
    "ar-IQ" => 1,
    "ar-JO" => 1,
    "ar-KM" => 1,
    "ar-KW" => 1,
    "ar-LB" => 1,
    "ar-LY" => 1,
    "ar-MA" => 1,
    "ar-MR" => 1,
    "ar-OM" => 1,
    "ar-PS" => 1,
    "ar-QA" => 1,
    "ar-SA" => 1,
    "ar-SD" => 1,
    "ar-SO" => 1,
    "ar-SS" => 1,
    "ar-SY" => 1,
    "ar-TD" => 1,
    "ar-TN" => 1,
    "ar-YE" => 1,
    as => 1,
    "as-IN" => 1,
    asa => 1,
    "asa-TZ" => 1,
    ast => 1,
    "ast-ES" => 1,
    az => 1,
    "az-Cyrl" => 1,
    "az-Cyrl-AZ" => 1,
    "az-Latn" => 1,
    "az-Latn-AZ" => 1,
    bas => 1,
    "bas-CM" => 1,
    be => 1,
    "be-BY" => 1,
    bem => 1,
    "bem-ZM" => 1,
    bez => 1,
    "bez-TZ" => 1,
    bg => 1,
    "bg-BG" => 1,
    bm => 1,
    "bm-ML" => 1,
    bn => 1,
    "bn-BD" => 1,
    "bn-IN" => 1,
    bo => 1,
    "bo-CN" => 1,
    "bo-IN" => 1,
    br => 1,
    "br-FR" => 1,
    brx => 1,
    "brx-IN" => 1,
    bs => 1,
    "bs-Cyrl" => 1,
    "bs-Cyrl-BA" => 1,
    "bs-Latn" => 1,
    "bs-Latn-BA" => 1,
    ca => 1,
    "ca-AD" => 1,
    "ca-ES" => 1,
    "ca-ES-VALENCIA" => 1,
    "ca-FR" => 1,
    "ca-IT" => 1,
    ce => 1,
    "ce-RU" => 1,
    cgg => 1,
    "cgg-UG" => 1,
    chr => 1,
    "chr-US" => 1,
    ckb => 1,
    "ckb-IQ" => 1,
    "ckb-IR" => 1,
    cs => 1,
    "cs-CZ" => 1,
    cu => 1,
    "cu-RU" => 1,
    cy => 1,
    "cy-GB" => 1,
    da => 1,
    "da-DK" => 1,
    "da-GL" => 1,
    dav => 1,
    "dav-KE" => 1,
    de => 1,
    "de-AT" => 1,
    "de-BE" => 1,
    "de-CH" => 1,
    "de-DE" => 1,
    "de-LI" => 1,
    "de-LU" => 1,
    dje => 1,
    "dje-NE" => 1,
    dsb => 1,
    "dsb-DE" => 1,
    dua => 1,
    "dua-CM" => 1,
    dyo => 1,
    "dyo-SN" => 1,
    dz => 1,
    "dz-BT" => 1,
    ebu => 1,
    "ebu-KE" => 1,
    ee => 1,
    "ee-GH" => 1,
    "ee-TG" => 1,
    el => 1,
    "el-CY" => 1,
    "el-GR" => 1,
    en => 1,
    "en-001" => 1,
    "en-150" => 1,
    "en-AG" => 1,
    "en-AI" => 1,
    "en-AS" => 1,
    "en-AT" => 1,
    "en-AU" => 1,
    "en-BB" => 1,
    "en-BE" => 1,
    "en-BI" => 1,
    "en-BM" => 1,
    "en-BS" => 1,
    "en-BW" => 1,
    "en-BZ" => 1,
    "en-CA" => 1,
    "en-CC" => 1,
    "en-CH" => 1,
    "en-CK" => 1,
    "en-CM" => 1,
    "en-CX" => 1,
    "en-CY" => 1,
    "en-DE" => 1,
    "en-DG" => 1,
    "en-DK" => 1,
    "en-DM" => 1,
    "en-ER" => 1,
    "en-FI" => 1,
    "en-FJ" => 1,
    "en-FK" => 1,
    "en-FM" => 1,
    "en-GB" => 1,
    "en-GD" => 1,
    "en-GG" => 1,
    "en-GH" => 1,
    "en-GI" => 1,
    "en-GM" => 1,
    "en-GU" => 1,
    "en-GY" => 1,
    "en-HK" => 1,
    "en-IE" => 1,
    "en-IL" => 1,
    "en-IM" => 1,
    "en-IN" => 1,
    "en-IO" => 1,
    "en-JE" => 1,
    "en-JM" => 1,
    "en-KE" => 1,
    "en-KI" => 1,
    "en-KN" => 1,
    "en-KY" => 1,
    "en-LC" => 1,
    "en-LR" => 1,
    "en-LS" => 1,
    "en-MG" => 1,
    "en-MH" => 1,
    "en-MO" => 1,
    "en-MP" => 1,
    "en-MS" => 1,
    "en-MT" => 1,
    "en-MU" => 1,
    "en-MW" => 1,
    "en-MY" => 1,
    "en-NA" => 1,
    "en-NF" => 1,
    "en-NG" => 1,
    "en-NL" => 1,
    "en-NR" => 1,
    "en-NU" => 1,
    "en-NZ" => 1,
    "en-PG" => 1,
    "en-PH" => 1,
    "en-PK" => 1,
    "en-PN" => 1,
    "en-PR" => 1,
    "en-PW" => 1,
    "en-RW" => 1,
    "en-SB" => 1,
    "en-SC" => 1,
    "en-SD" => 1,
    "en-SE" => 1,
    "en-SG" => 1,
    "en-SH" => 1,
    "en-SI" => 1,
    "en-SL" => 1,
    "en-SS" => 1,
    "en-SX" => 1,
    "en-SZ" => 1,
    "en-TC" => 1,
    "en-TK" => 1,
    "en-TO" => 1,
    "en-TT" => 1,
    "en-TV" => 1,
    "en-TZ" => 1,
    "en-UG" => 1,
    "en-UM" => 1,
    "en-US" => 1,
    "en-US-POSIX" => 1,
    "en-VC" => 1,
    "en-VG" => 1,
    "en-VI" => 1,
    "en-VU" => 1,
    "en-WS" => 1,
    "en-ZA" => 1,
    "en-ZM" => 1,
    "en-ZW" => 1,
    eo => 1,
    "eo-001" => 1,
    es => 1,
    "es-419" => 1,
    "es-AR" => 1,
    "es-BO" => 1,
    "es-BR" => 1,
    "es-CL" => 1,
    "es-CO" => 1,
    "es-CR" => 1,
    "es-CU" => 1,
    "es-DO" => 1,
    "es-EA" => 1,
    "es-EC" => 1,
    "es-ES" => 1,
    "es-GQ" => 1,
    "es-GT" => 1,
    "es-HN" => 1,
    "es-IC" => 1,
    "es-MX" => 1,
    "es-NI" => 1,
    "es-PA" => 1,
    "es-PE" => 1,
    "es-PH" => 1,
    "es-PR" => 1,
    "es-PY" => 1,
    "es-SV" => 1,
    "es-US" => 1,
    "es-UY" => 1,
    "es-VE" => 1,
    et => 1,
    "et-EE" => 1,
    eu => 1,
    "eu-ES" => 1,
    ewo => 1,
    "ewo-CM" => 1,
    fa => 1,
    "fa-AF" => 1,
    "fa-IR" => 1,
    ff => 1,
    "ff-CM" => 1,
    "ff-GN" => 1,
    "ff-MR" => 1,
    "ff-SN" => 1,
    fi => 1,
    "fi-FI" => 1,
    fil => 1,
    "fil-PH" => 1,
    fo => 1,
    "fo-DK" => 1,
    "fo-FO" => 1,
    fr => 1,
    "fr-BE" => 1,
    "fr-BF" => 1,
    "fr-BI" => 1,
    "fr-BJ" => 1,
    "fr-BL" => 1,
    "fr-CA" => 1,
    "fr-CD" => 1,
    "fr-CF" => 1,
    "fr-CG" => 1,
    "fr-CH" => 1,
    "fr-CI" => 1,
    "fr-CM" => 1,
    "fr-DJ" => 1,
    "fr-DZ" => 1,
    "fr-FR" => 1,
    "fr-GA" => 1,
    "fr-GF" => 1,
    "fr-GN" => 1,
    "fr-GP" => 1,
    "fr-GQ" => 1,
    "fr-HT" => 1,
    "fr-KM" => 1,
    "fr-LU" => 1,
    "fr-MA" => 1,
    "fr-MC" => 1,
    "fr-MF" => 1,
    "fr-MG" => 1,
    "fr-ML" => 1,
    "fr-MQ" => 1,
    "fr-MR" => 1,
    "fr-MU" => 1,
    "fr-NC" => 1,
    "fr-NE" => 1,
    "fr-PF" => 1,
    "fr-PM" => 1,
    "fr-RE" => 1,
    "fr-RW" => 1,
    "fr-SC" => 1,
    "fr-SN" => 1,
    "fr-SY" => 1,
    "fr-TD" => 1,
    "fr-TG" => 1,
    "fr-TN" => 1,
    "fr-VU" => 1,
    "fr-WF" => 1,
    "fr-YT" => 1,
    fur => 1,
    "fur-IT" => 1,
    fy => 1,
    "fy-NL" => 1,
    ga => 1,
    "ga-IE" => 1,
    gd => 1,
    "gd-GB" => 1,
    gl => 1,
    "gl-ES" => 1,
    gsw => 1,
    "gsw-CH" => 1,
    "gsw-FR" => 1,
    "gsw-LI" => 1,
    gu => 1,
    "gu-IN" => 1,
    guz => 1,
    "guz-KE" => 1,
    gv => 1,
    "gv-IM" => 1,
    ha => 1,
    "ha-GH" => 1,
    "ha-NE" => 1,
    "ha-NG" => 1,
    haw => 1,
    "haw-US" => 1,
    he => 1,
    "he-IL" => 1,
    hi => 1,
    "hi-IN" => 1,
    hr => 1,
    "hr-BA" => 1,
    "hr-HR" => 1,
    hsb => 1,
    "hsb-DE" => 1,
    hu => 1,
    "hu-HU" => 1,
    hy => 1,
    "hy-AM" => 1,
    id => 1,
    "id-ID" => 1,
    ig => 1,
    "ig-NG" => 1,
    ii => 1,
    "ii-CN" => 1,
    is => 1,
    "is-IS" => 1,
    it => 1,
    "it-CH" => 1,
    "it-IT" => 1,
    "it-SM" => 1,
    ja => 1,
    "ja-JP" => 1,
    jgo => 1,
    "jgo-CM" => 1,
    jmc => 1,
    "jmc-TZ" => 1,
    ka => 1,
    "ka-GE" => 1,
    kab => 1,
    "kab-DZ" => 1,
    kam => 1,
    "kam-KE" => 1,
    kde => 1,
    "kde-TZ" => 1,
    kea => 1,
    "kea-CV" => 1,
    khq => 1,
    "khq-ML" => 1,
    ki => 1,
    "ki-KE" => 1,
    kk => 1,
    "kk-KZ" => 1,
    kkj => 1,
    "kkj-CM" => 1,
    kl => 1,
    "kl-GL" => 1,
    kln => 1,
    "kln-KE" => 1,
    km => 1,
    "km-KH" => 1,
    kn => 1,
    "kn-IN" => 1,
    ko => 1,
    "ko-KP" => 1,
    "ko-KR" => 1,
    kok => 1,
    "kok-IN" => 1,
    ks => 1,
    "ks-IN" => 1,
    ksb => 1,
    "ksb-TZ" => 1,
    ksf => 1,
    "ksf-CM" => 1,
    ksh => 1,
    "ksh-DE" => 1,
    kw => 1,
    "kw-GB" => 1,
    ky => 1,
    "ky-KG" => 1,
    lag => 1,
    "lag-TZ" => 1,
    lb => 1,
    "lb-LU" => 1,
    lg => 1,
    "lg-UG" => 1,
    lkt => 1,
    "lkt-US" => 1,
    ln => 1,
    "ln-AO" => 1,
    "ln-CD" => 1,
    "ln-CF" => 1,
    "ln-CG" => 1,
    lo => 1,
    "lo-LA" => 1,
    lrc => 1,
    "lrc-IQ" => 1,
    "lrc-IR" => 1,
    lt => 1,
    "lt-LT" => 1,
    lu => 1,
    "lu-CD" => 1,
    luo => 1,
    "luo-KE" => 1,
    luy => 1,
    "luy-KE" => 1,
    lv => 1,
    "lv-LV" => 1,
    mas => 1,
    "mas-KE" => 1,
    "mas-TZ" => 1,
    mer => 1,
    "mer-KE" => 1,
    mfe => 1,
    "mfe-MU" => 1,
    mg => 1,
    "mg-MG" => 1,
    mgh => 1,
    "mgh-MZ" => 1,
    mgo => 1,
    "mgo-CM" => 1,
    mk => 1,
    "mk-MK" => 1,
    ml => 1,
    "ml-IN" => 1,
    mn => 1,
    "mn-MN" => 1,
    mr => 1,
    "mr-IN" => 1,
    ms => 1,
    "ms-BN" => 1,
    "ms-MY" => 1,
    "ms-SG" => 1,
    mt => 1,
    "mt-MT" => 1,
    mua => 1,
    "mua-CM" => 1,
    my => 1,
    "my-MM" => 1,
    mzn => 1,
    "mzn-IR" => 1,
    naq => 1,
    "naq-NA" => 1,
    nb => 1,
    "nb-NO" => 1,
    "nb-SJ" => 1,
    nd => 1,
    "nd-ZW" => 1,
    ne => 1,
    "ne-IN" => 1,
    "ne-NP" => 1,
    nl => 1,
    "nl-AW" => 1,
    "nl-BE" => 1,
    "nl-BQ" => 1,
    "nl-CW" => 1,
    "nl-NL" => 1,
    "nl-SR" => 1,
    "nl-SX" => 1,
    nmg => 1,
    "nmg-CM" => 1,
    nn => 1,
    "nn-NO" => 1,
    nnh => 1,
    "nnh-CM" => 1,
    nus => 1,
    "nus-SS" => 1,
    nyn => 1,
    "nyn-UG" => 1,
    om => 1,
    "om-ET" => 1,
    "om-KE" => 1,
    or => 1,
    "or-IN" => 1,
    os => 1,
    "os-GE" => 1,
    "os-RU" => 1,
    pa => 1,
    "pa-Arab" => 1,
    "pa-Arab-PK" => 1,
    "pa-Guru" => 1,
    "pa-Guru-IN" => 1,
    pl => 1,
    "pl-PL" => 1,
    prg => 1,
    "prg-001" => 1,
    ps => 1,
    "ps-AF" => 1,
    pt => 1,
    "pt-AO" => 1,
    "pt-BR" => 1,
    "pt-CH" => 1,
    "pt-CV" => 1,
    "pt-GQ" => 1,
    "pt-GW" => 1,
    "pt-LU" => 1,
    "pt-MO" => 1,
    "pt-MZ" => 1,
    "pt-PT" => 1,
    "pt-ST" => 1,
    "pt-TL" => 1,
    qu => 1,
    "qu-BO" => 1,
    "qu-EC" => 1,
    "qu-PE" => 1,
    rm => 1,
    "rm-CH" => 1,
    rn => 1,
    "rn-BI" => 1,
    ro => 1,
    "ro-MD" => 1,
    "ro-RO" => 1,
    rof => 1,
    "rof-TZ" => 1,
    root => 1,
    ru => 1,
    "ru-BY" => 1,
    "ru-KG" => 1,
    "ru-KZ" => 1,
    "ru-MD" => 1,
    "ru-RU" => 1,
    "ru-UA" => 1,
    rw => 1,
    "rw-RW" => 1,
    rwk => 1,
    "rwk-TZ" => 1,
    sah => 1,
    "sah-RU" => 1,
    saq => 1,
    "saq-KE" => 1,
    sbp => 1,
    "sbp-TZ" => 1,
    se => 1,
    "se-FI" => 1,
    "se-NO" => 1,
    "se-SE" => 1,
    seh => 1,
    "seh-MZ" => 1,
    ses => 1,
    "ses-ML" => 1,
    sg => 1,
    "sg-CF" => 1,
    shi => 1,
    "shi-Latn" => 1,
    "shi-Latn-MA" => 1,
    "shi-Tfng" => 1,
    "shi-Tfng-MA" => 1,
    si => 1,
    "si-LK" => 1,
    sk => 1,
    "sk-SK" => 1,
    sl => 1,
    "sl-SI" => 1,
    smn => 1,
    "smn-FI" => 1,
    sn => 1,
    "sn-ZW" => 1,
    so => 1,
    "so-DJ" => 1,
    "so-ET" => 1,
    "so-KE" => 1,
    "so-SO" => 1,
    sq => 1,
    "sq-AL" => 1,
    "sq-MK" => 1,
    "sq-XK" => 1,
    sr => 1,
    "sr-Cyrl" => 1,
    "sr-Cyrl-BA" => 1,
    "sr-Cyrl-ME" => 1,
    "sr-Cyrl-RS" => 1,
    "sr-Cyrl-XK" => 1,
    "sr-Latn" => 1,
    "sr-Latn-BA" => 1,
    "sr-Latn-ME" => 1,
    "sr-Latn-RS" => 1,
    "sr-Latn-XK" => 1,
    sv => 1,
    "sv-AX" => 1,
    "sv-FI" => 1,
    "sv-SE" => 1,
    sw => 1,
    "sw-CD" => 1,
    "sw-KE" => 1,
    "sw-TZ" => 1,
    "sw-UG" => 1,
    ta => 1,
    "ta-IN" => 1,
    "ta-LK" => 1,
    "ta-MY" => 1,
    "ta-SG" => 1,
    te => 1,
    "te-IN" => 1,
    teo => 1,
    "teo-KE" => 1,
    "teo-UG" => 1,
    th => 1,
    "th-TH" => 1,
    ti => 1,
    "ti-ER" => 1,
    "ti-ET" => 1,
    tk => 1,
    "tk-TM" => 1,
    to => 1,
    "to-TO" => 1,
    tr => 1,
    "tr-CY" => 1,
    "tr-TR" => 1,
    twq => 1,
    "twq-NE" => 1,
    tzm => 1,
    "tzm-MA" => 1,
    ug => 1,
    "ug-CN" => 1,
    uk => 1,
    "uk-UA" => 1,
    ur => 1,
    "ur-IN" => 1,
    "ur-PK" => 1,
    uz => 1,
    "uz-Arab" => 1,
    "uz-Arab-AF" => 1,
    "uz-Cyrl" => 1,
    "uz-Cyrl-UZ" => 1,
    "uz-Latn" => 1,
    "uz-Latn-UZ" => 1,
    vai => 1,
    "vai-Latn" => 1,
    "vai-Latn-LR" => 1,
    "vai-Vaii" => 1,
    "vai-Vaii-LR" => 1,
    vi => 1,
    "vi-VN" => 1,
    vo => 1,
    "vo-001" => 1,
    vun => 1,
    "vun-TZ" => 1,
    wae => 1,
    "wae-CH" => 1,
    xog => 1,
    "xog-UG" => 1,
    yav => 1,
    "yav-CM" => 1,
    yi => 1,
    "yi-001" => 1,
    yo => 1,
    "yo-BJ" => 1,
    "yo-NG" => 1,
    yue => 1,
    "yue-HK" => 1,
    zgh => 1,
    "zgh-MA" => 1,
    zh => 1,
    "zh-Hans" => 1,
    "zh-Hans-CN" => 1,
    "zh-Hans-HK" => 1,
    "zh-Hans-MO" => 1,
    "zh-Hans-SG" => 1,
    "zh-Hant" => 1,
    "zh-Hant-HK" => 1,
    "zh-Hant-MO" => 1,
    "zh-Hant-TW" => 1,
    zu => 1,
    "zu-ZA" => 1
  );
  ### :end Codes:
  #>>>
  
  #<<<
  ### :start Names:
  our %Names = (
    Afrikaans => 1,
    "Afrikaans Namibia" => 1,
    "Afrikaans South Africa" => 1,
    Aghem => 1,
    "Aghem Cameroon" => 1,
    Akan => 1,
    "Akan Ghana" => 1,
    Albanian => 1,
    "Albanian Albania" => 1,
    "Albanian Kosovo" => 1,
    "Albanian Macedonia" => 1,
    Amharic => 1,
    "Amharic Ethiopia" => 1,
    Arabic => 1,
    "Arabic Algeria" => 1,
    "Arabic Bahrain" => 1,
    "Arabic Chad" => 1,
    "Arabic Comoros" => 1,
    "Arabic Djibouti" => 1,
    "Arabic Egypt" => 1,
    "Arabic Eritrea" => 1,
    "Arabic Iraq" => 1,
    "Arabic Israel" => 1,
    "Arabic Jordan" => 1,
    "Arabic Kuwait" => 1,
    "Arabic Lebanon" => 1,
    "Arabic Libya" => 1,
    "Arabic Mauritania" => 1,
    "Arabic Morocco" => 1,
    "Arabic Oman" => 1,
    "Arabic Palestinian Territories" => 1,
    "Arabic Qatar" => 1,
    "Arabic Saudi Arabia" => 1,
    "Arabic Somalia" => 1,
    "Arabic South Sudan" => 1,
    "Arabic Sudan" => 1,
    "Arabic Syria" => 1,
    "Arabic Tunisia" => 1,
    "Arabic United Arab Emirates" => 1,
    "Arabic Western Sahara" => 1,
    "Arabic World" => 1,
    "Arabic Yemen" => 1,
    Armenian => 1,
    "Armenian Armenia" => 1,
    Assamese => 1,
    "Assamese India" => 1,
    Asturian => 1,
    "Asturian Spain" => 1,
    Asu => 1,
    "Asu Tanzania" => 1,
    Azerbaijani => 1,
    "Azerbaijani Azerbaijan Cyrillic" => 1,
    "Azerbaijani Azerbaijan Latin" => 1,
    Bafia => 1,
    "Bafia Cameroon" => 1,
    Bambara => 1,
    "Bambara Mali" => 1,
    Basaa => 1,
    "Basaa Cameroon" => 1,
    Basque => 1,
    "Basque Spain" => 1,
    Belarusian => 1,
    "Belarusian Belarus" => 1,
    Bemba => 1,
    "Bemba Zambia" => 1,
    Bena => 1,
    "Bena Tanzania" => 1,
    Bengali => 1,
    "Bengali Bangladesh" => 1,
    "Bengali India" => 1,
    Bodo => 1,
    "Bodo India" => 1,
    Bosnian => 1,
    "Bosnian Bosnia & Herzegovina Cyrillic" => 1,
    "Bosnian Bosnia & Herzegovina Latin" => 1,
    Breton => 1,
    "Breton France" => 1,
    Bulgarian => 1,
    "Bulgarian Bulgaria" => 1,
    Burmese => 1,
    "Burmese Myanmar (Burma)" => 1,
    Cantonese => 1,
    "Cantonese Hong Kong SAR China" => 1,
    Catalan => 1,
    "Catalan Andorra" => 1,
    "Catalan France" => 1,
    "Catalan Italy" => 1,
    "Catalan Spain" => 1,
    "Catalan Spain Valencian" => 1,
    "Central Atlas Tamazight" => 1,
    "Central Atlas Tamazight Morocco" => 1,
    "Central Kurdish" => 1,
    "Central Kurdish Iran" => 1,
    "Central Kurdish Iraq" => 1,
    Chechen => 1,
    "Chechen Russia" => 1,
    Cherokee => 1,
    "Cherokee United States" => 1,
    Chiga => 1,
    "Chiga Uganda" => 1,
    Chinese => 1,
    "Chinese China Simplified" => 1,
    "Chinese Hong Kong SAR China Simplified" => 1,
    "Chinese Hong Kong SAR China Traditional" => 1,
    "Chinese Macau SAR China Simplified" => 1,
    "Chinese Macau SAR China Traditional" => 1,
    "Chinese Singapore Simplified" => 1,
    "Chinese Taiwan Traditional" => 1,
    "Church Slavic" => 1,
    "Church Slavic Russia" => 1,
    Colognian => 1,
    "Colognian Germany" => 1,
    Cornish => 1,
    "Cornish United Kingdom" => 1,
    Croatian => 1,
    "Croatian Bosnia & Herzegovina" => 1,
    "Croatian Croatia" => 1,
    Czech => 1,
    "Czech Czech Republic" => 1,
    Danish => 1,
    "Danish Denmark" => 1,
    "Danish Greenland" => 1,
    Duala => 1,
    "Duala Cameroon" => 1,
    Dutch => 1,
    "Dutch Aruba" => 1,
    "Dutch Belgium" => 1,
    "Dutch Caribbean Netherlands" => 1,
    "Dutch Cura\N{U+00e7}ao" => 1,
    "Dutch Netherlands" => 1,
    "Dutch Sint Maarten" => 1,
    "Dutch Suriname" => 1,
    Dzongkha => 1,
    "Dzongkha Bhutan" => 1,
    Embu => 1,
    "Embu Kenya" => 1,
    English => 1,
    "English American Samoa" => 1,
    "English Anguilla" => 1,
    "English Antigua & Barbuda" => 1,
    "English Australia" => 1,
    "English Austria" => 1,
    "English Bahamas" => 1,
    "English Barbados" => 1,
    "English Belgium" => 1,
    "English Belize" => 1,
    "English Bermuda" => 1,
    "English Botswana" => 1,
    "English British Indian Ocean Territory" => 1,
    "English British Virgin Islands" => 1,
    "English Burundi" => 1,
    "English Cameroon" => 1,
    "English Canada" => 1,
    "English Cayman Islands" => 1,
    "English Christmas Island" => 1,
    "English Cocos (Keeling) Islands" => 1,
    "English Cook Islands" => 1,
    "English Cyprus" => 1,
    "English Denmark" => 1,
    "English Diego Garcia" => 1,
    "English Dominica" => 1,
    "English Eritrea" => 1,
    "English Europe" => 1,
    "English Falkland Islands" => 1,
    "English Fiji" => 1,
    "English Finland" => 1,
    "English Gambia" => 1,
    "English Germany" => 1,
    "English Ghana" => 1,
    "English Gibraltar" => 1,
    "English Grenada" => 1,
    "English Guam" => 1,
    "English Guernsey" => 1,
    "English Guyana" => 1,
    "English Hong Kong SAR China" => 1,
    "English India" => 1,
    "English Ireland" => 1,
    "English Isle of Man" => 1,
    "English Israel" => 1,
    "English Jamaica" => 1,
    "English Jersey" => 1,
    "English Kenya" => 1,
    "English Kiribati" => 1,
    "English Lesotho" => 1,
    "English Liberia" => 1,
    "English Macau SAR China" => 1,
    "English Madagascar" => 1,
    "English Malawi" => 1,
    "English Malaysia" => 1,
    "English Malta" => 1,
    "English Marshall Islands" => 1,
    "English Mauritius" => 1,
    "English Micronesia" => 1,
    "English Montserrat" => 1,
    "English Namibia" => 1,
    "English Nauru" => 1,
    "English Netherlands" => 1,
    "English New Zealand" => 1,
    "English Nigeria" => 1,
    "English Niue" => 1,
    "English Norfolk Island" => 1,
    "English Northern Mariana Islands" => 1,
    "English Pakistan" => 1,
    "English Palau" => 1,
    "English Papua New Guinea" => 1,
    "English Philippines" => 1,
    "English Pitcairn Islands" => 1,
    "English Puerto Rico" => 1,
    "English Rwanda" => 1,
    "English Samoa" => 1,
    "English Seychelles" => 1,
    "English Sierra Leone" => 1,
    "English Singapore" => 1,
    "English Sint Maarten" => 1,
    "English Slovenia" => 1,
    "English Solomon Islands" => 1,
    "English South Africa" => 1,
    "English South Sudan" => 1,
    "English St. Helena" => 1,
    "English St. Kitts & Nevis" => 1,
    "English St. Lucia" => 1,
    "English St. Vincent & Grenadines" => 1,
    "English Sudan" => 1,
    "English Swaziland" => 1,
    "English Sweden" => 1,
    "English Switzerland" => 1,
    "English Tanzania" => 1,
    "English Tokelau" => 1,
    "English Tonga" => 1,
    "English Trinidad & Tobago" => 1,
    "English Turks & Caicos Islands" => 1,
    "English Tuvalu" => 1,
    "English U.S. Outlying Islands" => 1,
    "English U.S. Virgin Islands" => 1,
    "English Uganda" => 1,
    "English United Kingdom" => 1,
    "English United States" => 1,
    "English United States Computer" => 1,
    "English Vanuatu" => 1,
    "English World" => 1,
    "English Zambia" => 1,
    "English Zimbabwe" => 1,
    Esperanto => 1,
    "Esperanto World" => 1,
    Estonian => 1,
    "Estonian Estonia" => 1,
    Ewe => 1,
    "Ewe Ghana" => 1,
    "Ewe Togo" => 1,
    Ewondo => 1,
    "Ewondo Cameroon" => 1,
    Faroese => 1,
    "Faroese Denmark" => 1,
    "Faroese Faroe Islands" => 1,
    Filipino => 1,
    "Filipino Philippines" => 1,
    Finnish => 1,
    "Finnish Finland" => 1,
    French => 1,
    "French Algeria" => 1,
    "French Belgium" => 1,
    "French Benin" => 1,
    "French Burkina Faso" => 1,
    "French Burundi" => 1,
    "French Cameroon" => 1,
    "French Canada" => 1,
    "French Central African Republic" => 1,
    "French Chad" => 1,
    "French Comoros" => 1,
    "French Congo - Brazzaville" => 1,
    "French Congo - Kinshasa" => 1,
    "French C\N{U+00f4}te d\N{U+2019}Ivoire" => 1,
    "French Djibouti" => 1,
    "French Equatorial Guinea" => 1,
    "French France" => 1,
    "French French Guiana" => 1,
    "French French Polynesia" => 1,
    "French Gabon" => 1,
    "French Guadeloupe" => 1,
    "French Guinea" => 1,
    "French Haiti" => 1,
    "French Luxembourg" => 1,
    "French Madagascar" => 1,
    "French Mali" => 1,
    "French Martinique" => 1,
    "French Mauritania" => 1,
    "French Mauritius" => 1,
    "French Mayotte" => 1,
    "French Monaco" => 1,
    "French Morocco" => 1,
    "French New Caledonia" => 1,
    "French Niger" => 1,
    "French Rwanda" => 1,
    "French R\N{U+00e9}union" => 1,
    "French Senegal" => 1,
    "French Seychelles" => 1,
    "French St. Barth\N{U+00e9}lemy" => 1,
    "French St. Martin" => 1,
    "French St. Pierre & Miquelon" => 1,
    "French Switzerland" => 1,
    "French Syria" => 1,
    "French Togo" => 1,
    "French Tunisia" => 1,
    "French Vanuatu" => 1,
    "French Wallis & Futuna" => 1,
    Friulian => 1,
    "Friulian Italy" => 1,
    Fulah => 1,
    "Fulah Cameroon" => 1,
    "Fulah Guinea" => 1,
    "Fulah Mauritania" => 1,
    "Fulah Senegal" => 1,
    Galician => 1,
    "Galician Spain" => 1,
    Ganda => 1,
    "Ganda Uganda" => 1,
    Georgian => 1,
    "Georgian Georgia" => 1,
    German => 1,
    "German Austria" => 1,
    "German Belgium" => 1,
    "German Germany" => 1,
    "German Liechtenstein" => 1,
    "German Luxembourg" => 1,
    "German Switzerland" => 1,
    Greek => 1,
    "Greek Cyprus" => 1,
    "Greek Greece" => 1,
    Gujarati => 1,
    "Gujarati India" => 1,
    Gusii => 1,
    "Gusii Kenya" => 1,
    Hausa => 1,
    "Hausa Ghana" => 1,
    "Hausa Niger" => 1,
    "Hausa Nigeria" => 1,
    Hawaiian => 1,
    "Hawaiian United States" => 1,
    Hebrew => 1,
    "Hebrew Israel" => 1,
    Hindi => 1,
    "Hindi India" => 1,
    Hungarian => 1,
    "Hungarian Hungary" => 1,
    Icelandic => 1,
    "Icelandic Iceland" => 1,
    Igbo => 1,
    "Igbo Nigeria" => 1,
    "Inari Sami" => 1,
    "Inari Sami Finland" => 1,
    Indonesian => 1,
    "Indonesian Indonesia" => 1,
    Irish => 1,
    "Irish Ireland" => 1,
    Italian => 1,
    "Italian Italy" => 1,
    "Italian San Marino" => 1,
    "Italian Switzerland" => 1,
    Japanese => 1,
    "Japanese Japan" => 1,
    "Jola-Fonyi" => 1,
    "Jola-Fonyi Senegal" => 1,
    Kabuverdianu => 1,
    "Kabuverdianu Cape Verde" => 1,
    Kabyle => 1,
    "Kabyle Algeria" => 1,
    Kako => 1,
    "Kako Cameroon" => 1,
    Kalaallisut => 1,
    "Kalaallisut Greenland" => 1,
    Kalenjin => 1,
    "Kalenjin Kenya" => 1,
    Kamba => 1,
    "Kamba Kenya" => 1,
    Kannada => 1,
    "Kannada India" => 1,
    Kashmiri => 1,
    "Kashmiri India" => 1,
    Kazakh => 1,
    "Kazakh Kazakhstan" => 1,
    Khmer => 1,
    "Khmer Cambodia" => 1,
    Kikuyu => 1,
    "Kikuyu Kenya" => 1,
    Kinyarwanda => 1,
    "Kinyarwanda Rwanda" => 1,
    Konkani => 1,
    "Konkani India" => 1,
    Korean => 1,
    "Korean North Korea" => 1,
    "Korean South Korea" => 1,
    "Koyra Chiini" => 1,
    "Koyra Chiini Mali" => 1,
    "Koyraboro Senni" => 1,
    "Koyraboro Senni Mali" => 1,
    Kwasio => 1,
    "Kwasio Cameroon" => 1,
    Kyrgyz => 1,
    "Kyrgyz Kyrgyzstan" => 1,
    Lakota => 1,
    "Lakota United States" => 1,
    Langi => 1,
    "Langi Tanzania" => 1,
    Lao => 1,
    "Lao Laos" => 1,
    Latvian => 1,
    "Latvian Latvia" => 1,
    Lingala => 1,
    "Lingala Angola" => 1,
    "Lingala Central African Republic" => 1,
    "Lingala Congo - Brazzaville" => 1,
    "Lingala Congo - Kinshasa" => 1,
    Lithuanian => 1,
    "Lithuanian Lithuania" => 1,
    "Lower Sorbian" => 1,
    "Lower Sorbian Germany" => 1,
    "Luba-Katanga" => 1,
    "Luba-Katanga Congo - Kinshasa" => 1,
    Luo => 1,
    "Luo Kenya" => 1,
    Luxembourgish => 1,
    "Luxembourgish Luxembourg" => 1,
    Luyia => 1,
    "Luyia Kenya" => 1,
    Macedonian => 1,
    "Macedonian Macedonia" => 1,
    Machame => 1,
    "Machame Tanzania" => 1,
    "Makhuwa-Meetto" => 1,
    "Makhuwa-Meetto Mozambique" => 1,
    Makonde => 1,
    "Makonde Tanzania" => 1,
    Malagasy => 1,
    "Malagasy Madagascar" => 1,
    Malay => 1,
    "Malay Brunei" => 1,
    "Malay Malaysia" => 1,
    "Malay Singapore" => 1,
    Malayalam => 1,
    "Malayalam India" => 1,
    Maltese => 1,
    "Maltese Malta" => 1,
    Manx => 1,
    "Manx Isle of Man" => 1,
    Marathi => 1,
    "Marathi India" => 1,
    Masai => 1,
    "Masai Kenya" => 1,
    "Masai Tanzania" => 1,
    Mazanderani => 1,
    "Mazanderani Iran" => 1,
    Meru => 1,
    "Meru Kenya" => 1,
    "Meta\N{U+02bc}" => 1,
    "Meta\N{U+02bc} Cameroon" => 1,
    Mongolian => 1,
    "Mongolian Mongolia" => 1,
    Morisyen => 1,
    "Morisyen Mauritius" => 1,
    Mundang => 1,
    "Mundang Cameroon" => 1,
    Nama => 1,
    "Nama Namibia" => 1,
    Nepali => 1,
    "Nepali India" => 1,
    "Nepali Nepal" => 1,
    Ngiemboon => 1,
    "Ngiemboon Cameroon" => 1,
    Ngomba => 1,
    "Ngomba Cameroon" => 1,
    "North Ndebele" => 1,
    "North Ndebele Zimbabwe" => 1,
    "Northern Luri" => 1,
    "Northern Luri Iran" => 1,
    "Northern Luri Iraq" => 1,
    "Northern Sami" => 1,
    "Northern Sami Finland" => 1,
    "Northern Sami Norway" => 1,
    "Northern Sami Sweden" => 1,
    "Norwegian Bokm\N{U+00e5}l" => 1,
    "Norwegian Bokm\N{U+00e5}l Norway" => 1,
    "Norwegian Bokm\N{U+00e5}l Svalbard & Jan Mayen" => 1,
    "Norwegian Nynorsk" => 1,
    "Norwegian Nynorsk Norway" => 1,
    Nuer => 1,
    "Nuer South Sudan" => 1,
    Nyankole => 1,
    "Nyankole Uganda" => 1,
    Oriya => 1,
    "Oriya India" => 1,
    Oromo => 1,
    "Oromo Ethiopia" => 1,
    "Oromo Kenya" => 1,
    Ossetic => 1,
    "Ossetic Georgia" => 1,
    "Ossetic Russia" => 1,
    Pashto => 1,
    "Pashto Afghanistan" => 1,
    Persian => 1,
    "Persian Afghanistan" => 1,
    "Persian Iran" => 1,
    Polish => 1,
    "Polish Poland" => 1,
    Portuguese => 1,
    "Portuguese Angola" => 1,
    "Portuguese Brazil" => 1,
    "Portuguese Cape Verde" => 1,
    "Portuguese Equatorial Guinea" => 1,
    "Portuguese Guinea-Bissau" => 1,
    "Portuguese Luxembourg" => 1,
    "Portuguese Macau SAR China" => 1,
    "Portuguese Mozambique" => 1,
    "Portuguese Portugal" => 1,
    "Portuguese Switzerland" => 1,
    "Portuguese S\N{U+00e3}o Tom\N{U+00e9} & Pr\N{U+00ed}ncipe" => 1,
    "Portuguese Timor-Leste" => 1,
    Prussian => 1,
    "Prussian World" => 1,
    Punjabi => 1,
    "Punjabi India Gurmukhi" => 1,
    "Punjabi Pakistan Arabic" => 1,
    Quechua => 1,
    "Quechua Bolivia" => 1,
    "Quechua Ecuador" => 1,
    "Quechua Peru" => 1,
    Romanian => 1,
    "Romanian Moldova" => 1,
    "Romanian Romania" => 1,
    Romansh => 1,
    "Romansh Switzerland" => 1,
    Rombo => 1,
    "Rombo Tanzania" => 1,
    Root => 1,
    Rundi => 1,
    "Rundi Burundi" => 1,
    Russian => 1,
    "Russian Belarus" => 1,
    "Russian Kazakhstan" => 1,
    "Russian Kyrgyzstan" => 1,
    "Russian Moldova" => 1,
    "Russian Russia" => 1,
    "Russian Ukraine" => 1,
    Rwa => 1,
    "Rwa Tanzania" => 1,
    Sakha => 1,
    "Sakha Russia" => 1,
    Samburu => 1,
    "Samburu Kenya" => 1,
    Sango => 1,
    "Sango Central African Republic" => 1,
    Sangu => 1,
    "Sangu Tanzania" => 1,
    "Scottish Gaelic" => 1,
    "Scottish Gaelic United Kingdom" => 1,
    Sena => 1,
    "Sena Mozambique" => 1,
    Serbian => 1,
    "Serbian Bosnia & Herzegovina Cyrillic" => 1,
    "Serbian Bosnia & Herzegovina Latin" => 1,
    "Serbian Kosovo Cyrillic" => 1,
    "Serbian Kosovo Latin" => 1,
    "Serbian Montenegro Cyrillic" => 1,
    "Serbian Montenegro Latin" => 1,
    "Serbian Serbia Cyrillic" => 1,
    "Serbian Serbia Latin" => 1,
    Shambala => 1,
    "Shambala Tanzania" => 1,
    Shona => 1,
    "Shona Zimbabwe" => 1,
    "Sichuan Yi" => 1,
    "Sichuan Yi China" => 1,
    Sinhala => 1,
    "Sinhala Sri Lanka" => 1,
    Slovak => 1,
    "Slovak Slovakia" => 1,
    Slovenian => 1,
    "Slovenian Slovenia" => 1,
    Soga => 1,
    "Soga Uganda" => 1,
    Somali => 1,
    "Somali Djibouti" => 1,
    "Somali Ethiopia" => 1,
    "Somali Kenya" => 1,
    "Somali Somalia" => 1,
    Spanish => 1,
    "Spanish Argentina" => 1,
    "Spanish Bolivia" => 1,
    "Spanish Brazil" => 1,
    "Spanish Canary Islands" => 1,
    "Spanish Ceuta & Melilla" => 1,
    "Spanish Chile" => 1,
    "Spanish Colombia" => 1,
    "Spanish Costa Rica" => 1,
    "Spanish Cuba" => 1,
    "Spanish Dominican Republic" => 1,
    "Spanish Ecuador" => 1,
    "Spanish El Salvador" => 1,
    "Spanish Equatorial Guinea" => 1,
    "Spanish Guatemala" => 1,
    "Spanish Honduras" => 1,
    "Spanish Latin America" => 1,
    "Spanish Mexico" => 1,
    "Spanish Nicaragua" => 1,
    "Spanish Panama" => 1,
    "Spanish Paraguay" => 1,
    "Spanish Peru" => 1,
    "Spanish Philippines" => 1,
    "Spanish Puerto Rico" => 1,
    "Spanish Spain" => 1,
    "Spanish United States" => 1,
    "Spanish Uruguay" => 1,
    "Spanish Venezuela" => 1,
    "Standard Moroccan Tamazight" => 1,
    "Standard Moroccan Tamazight Morocco" => 1,
    Swahili => 1,
    "Swahili Congo - Kinshasa" => 1,
    "Swahili Kenya" => 1,
    "Swahili Tanzania" => 1,
    "Swahili Uganda" => 1,
    Swedish => 1,
    "Swedish Finland" => 1,
    "Swedish Sweden" => 1,
    "Swedish \N{U+00c5}land Islands" => 1,
    "Swiss German" => 1,
    "Swiss German France" => 1,
    "Swiss German Liechtenstein" => 1,
    "Swiss German Switzerland" => 1,
    Tachelhit => 1,
    "Tachelhit Morocco Latin" => 1,
    "Tachelhit Morocco Tifinagh" => 1,
    Taita => 1,
    "Taita Kenya" => 1,
    Tamil => 1,
    "Tamil India" => 1,
    "Tamil Malaysia" => 1,
    "Tamil Singapore" => 1,
    "Tamil Sri Lanka" => 1,
    Tasawaq => 1,
    "Tasawaq Niger" => 1,
    Telugu => 1,
    "Telugu India" => 1,
    Teso => 1,
    "Teso Kenya" => 1,
    "Teso Uganda" => 1,
    Thai => 1,
    "Thai Thailand" => 1,
    Tibetan => 1,
    "Tibetan China" => 1,
    "Tibetan India" => 1,
    Tigrinya => 1,
    "Tigrinya Eritrea" => 1,
    "Tigrinya Ethiopia" => 1,
    Tongan => 1,
    "Tongan Tonga" => 1,
    Turkish => 1,
    "Turkish Cyprus" => 1,
    "Turkish Turkey" => 1,
    Turkmen => 1,
    "Turkmen Turkmenistan" => 1,
    Ukrainian => 1,
    "Ukrainian Ukraine" => 1,
    "Upper Sorbian" => 1,
    "Upper Sorbian Germany" => 1,
    Urdu => 1,
    "Urdu India" => 1,
    "Urdu Pakistan" => 1,
    Uyghur => 1,
    "Uyghur China" => 1,
    Uzbek => 1,
    "Uzbek Afghanistan Arabic" => 1,
    "Uzbek Uzbekistan Cyrillic" => 1,
    "Uzbek Uzbekistan Latin" => 1,
    Vai => 1,
    "Vai Liberia Latin" => 1,
    "Vai Liberia Vai" => 1,
    Vietnamese => 1,
    "Vietnamese Vietnam" => 1,
    "Volap\N{U+00fc}k" => 1,
    "Volap\N{U+00fc}k World" => 1,
    Vunjo => 1,
    "Vunjo Tanzania" => 1,
    Walser => 1,
    "Walser Switzerland" => 1,
    Welsh => 1,
    "Welsh United Kingdom" => 1,
    "Western Frisian" => 1,
    "Western Frisian Netherlands" => 1,
    Yangben => 1,
    "Yangben Cameroon" => 1,
    Yiddish => 1,
    "Yiddish World" => 1,
    Yoruba => 1,
    "Yoruba Benin" => 1,
    "Yoruba Nigeria" => 1,
    Zarma => 1,
    "Zarma Niger" => 1,
    Zulu => 1,
    "Zulu South Africa" => 1
  );
  ### :end Names:
  #>>>
  
  #<<<
  ### :start NativeNames:
  our %NativeNames = (
    Afrikaans => 1,
    "Afrikaans Namibi\N{U+00eb}" => 1,
    "Afrikaans Suid-Afrika" => 1,
    Aghem => 1,
    "Aghem K\N{U+00e0}m\N{U+00e0}l\N{U+00fb}\N{U+014b}" => 1,
    Akan => 1,
    "Akan Gaana" => 1,
    "Bahasa Melayu" => 1,
    "Bahasa Melayu Brunei" => 1,
    "Bahasa Melayu Malaysia" => 1,
    "Bahasa Melayu Singapura" => 1,
    Chimakonde => 1,
    "Chimakonde Tanzania" => 1,
    Cymraeg => 1,
    "Cymraeg Y Deyrnas Unedig" => 1,
    Deutsch => 1,
    "Deutsch Belgien" => 1,
    "Deutsch Deutschland" => 1,
    "Deutsch Liechtenstein" => 1,
    "Deutsch Luxemburg" => 1,
    "Deutsch Schweiz" => 1,
    "Deutsch \N{U+00d6}sterreich" => 1,
    Dholuo => 1,
    "Dholuo Kenya" => 1,
    Ekegusii => 1,
    "Ekegusii Kenya" => 1,
    English => 1,
    "English American Samoa" => 1,
    "English Anguilla" => 1,
    "English Antigua & Barbuda" => 1,
    "English Australia" => 1,
    "English Austria" => 1,
    "English Bahamas" => 1,
    "English Barbados" => 1,
    "English Belgium" => 1,
    "English Belize" => 1,
    "English Bermuda" => 1,
    "English Botswana" => 1,
    "English British Indian Ocean Territory" => 1,
    "English British Virgin Islands" => 1,
    "English Burundi" => 1,
    "English Cameroon" => 1,
    "English Canada" => 1,
    "English Cayman Islands" => 1,
    "English Christmas Island" => 1,
    "English Cocos (Keeling) Islands" => 1,
    "English Cook Islands" => 1,
    "English Cyprus" => 1,
    "English Denmark" => 1,
    "English Diego Garcia" => 1,
    "English Dominica" => 1,
    "English Eritrea" => 1,
    "English Europe" => 1,
    "English Falkland Islands" => 1,
    "English Fiji" => 1,
    "English Finland" => 1,
    "English Gambia" => 1,
    "English Germany" => 1,
    "English Ghana" => 1,
    "English Gibraltar" => 1,
    "English Grenada" => 1,
    "English Guam" => 1,
    "English Guernsey" => 1,
    "English Guyana" => 1,
    "English Hong Kong SAR China" => 1,
    "English India" => 1,
    "English Ireland" => 1,
    "English Isle of Man" => 1,
    "English Israel" => 1,
    "English Jamaica" => 1,
    "English Jersey" => 1,
    "English Kenya" => 1,
    "English Kiribati" => 1,
    "English Lesotho" => 1,
    "English Liberia" => 1,
    "English Macau SAR China" => 1,
    "English Madagascar" => 1,
    "English Malawi" => 1,
    "English Malaysia" => 1,
    "English Malta" => 1,
    "English Marshall Islands" => 1,
    "English Mauritius" => 1,
    "English Micronesia" => 1,
    "English Montserrat" => 1,
    "English Namibia" => 1,
    "English Nauru" => 1,
    "English Netherlands" => 1,
    "English New Zealand" => 1,
    "English Nigeria" => 1,
    "English Niue" => 1,
    "English Norfolk Island" => 1,
    "English Northern Mariana Islands" => 1,
    "English Pakistan" => 1,
    "English Palau" => 1,
    "English Papua New Guinea" => 1,
    "English Philippines" => 1,
    "English Pitcairn Islands" => 1,
    "English Puerto Rico" => 1,
    "English Rwanda" => 1,
    "English Samoa" => 1,
    "English Seychelles" => 1,
    "English Sierra Leone" => 1,
    "English Singapore" => 1,
    "English Sint Maarten" => 1,
    "English Slovenia" => 1,
    "English Solomon Islands" => 1,
    "English South Africa" => 1,
    "English South Sudan" => 1,
    "English St. Helena" => 1,
    "English St. Kitts & Nevis" => 1,
    "English St. Lucia" => 1,
    "English St. Vincent & Grenadines" => 1,
    "English Sudan" => 1,
    "English Swaziland" => 1,
    "English Sweden" => 1,
    "English Switzerland" => 1,
    "English Tanzania" => 1,
    "English Tokelau" => 1,
    "English Tonga" => 1,
    "English Trinidad & Tobago" => 1,
    "English Turks & Caicos Islands" => 1,
    "English Tuvalu" => 1,
    "English U.S. Outlying Islands" => 1,
    "English U.S. Virgin Islands" => 1,
    "English Uganda" => 1,
    "English United Kingdom" => 1,
    "English United States" => 1,
    "English United States Computer" => 1,
    "English Vanuatu" => 1,
    "English World" => 1,
    "English Zambia" => 1,
    "English Zimbabwe" => 1,
    "E\N{U+028b}egbe" => 1,
    "E\N{U+028b}egbe Ghana nutome" => 1,
    "E\N{U+028b}egbe Togo nutome" => 1,
    Filipino => 1,
    "Filipino Pilipinas" => 1,
    Gaeilge => 1,
    "Gaeilge \N{U+00c9}ire" => 1,
    Gaelg => 1,
    "Gaelg Ellan Vannin" => 1,
    Gikuyu => 1,
    "Gikuyu Kenya" => 1,
    "G\N{U+00e0}idhlig" => 1,
    "G\N{U+00e0}idhlig An R\N{U+00ec}oghachd Aonaichte" => 1,
    Hausa => 1,
    "Hausa Gana" => 1,
    "Hausa Najeriya" => 1,
    "Hausa Nijar" => 1,
    Hibena => 1,
    "Hibena Hutanzania" => 1,
    Ichibemba => 1,
    "Ichibemba Zambia" => 1,
    Igbo => 1,
    "Igbo Nigeria" => 1,
    Ikirundi => 1,
    "Ikirundi Uburundi" => 1,
    Indonesia => 1,
    "Indonesia Indonesia" => 1,
    Ishisangu => 1,
    "Ishisangu Tansaniya" => 1,
    Kalenjin => 1,
    "Kalenjin Emetab Kenya" => 1,
    Khoekhoegowab => 1,
    "Khoekhoegowab Namibiab" => 1,
    Kihorombo => 1,
    "Kihorombo Tanzania" => 1,
    Kikamba => 1,
    "Kikamba Kenya" => 1,
    Kimachame => 1,
    "Kimachame Tanzania" => 1,
    Kinyarwanda => 1,
    "Kinyarwanda Rwanda" => 1,
    Kipare => 1,
    "Kipare Tadhania" => 1,
    Kiruwa => 1,
    "Kiruwa Tanzania" => 1,
    Kisampur => 1,
    "Kisampur Kenya" => 1,
    Kishambaa => 1,
    "Kishambaa Tanzania" => 1,
    Kiswahili => 1,
    "Kiswahili Jamhuri ya Kidemokrasia ya Kongo" => 1,
    "Kiswahili Kenya" => 1,
    "Kiswahili Tanzania" => 1,
    "Kiswahili Uganda" => 1,
    Kitaita => 1,
    "Kitaita Kenya" => 1,
    Kiteso => 1,
    "Kiteso Kenia" => 1,
    "Kiteso Uganda" => 1,
    "Koyra ciini" => 1,
    "Koyra ciini Maali" => 1,
    "Koyraboro senni" => 1,
    "Koyraboro senni Maali" => 1,
    Kyivunjo => 1,
    "Kyivunjo Tanzania" => 1,
    "K\N{U+00f6}lsch" => 1,
    "K\N{U+00f6}lsch Do\N{U+00fc}tschland" => 1,
    "K\N{U+0129}embu" => 1,
    "K\N{U+0129}embu Kenya" => 1,
    "K\N{U+0129}m\N{U+0129}r\N{U+0169}" => 1,
    "K\N{U+0129}m\N{U+0129}r\N{U+0169} Kenya" => 1,
    "K\N{U+0268}laangi" => 1,
    "K\N{U+0268}laangi Taansan\N{U+00ed}a" => 1,
    "Lak\N{U+021f}\N{U+00f3}l\N{U+02bc}iyapi" => 1,
    "Lak\N{U+021f}\N{U+00f3}l\N{U+02bc}iyapi M\N{U+00ed}laha\N{U+014b}ska T\N{U+021f}am\N{U+00e1}k\N{U+021f}o\N{U+010d}he" => 1,
    Luganda => 1,
    "Luganda Yuganda" => 1,
    Luluhia => 1,
    "Luluhia Kenya" => 1,
    "L\N{U+00eb}tzebuergesch" => 1,
    "L\N{U+00eb}tzebuergesch L\N{U+00eb}tzebuerg" => 1,
    "MUNDA\N{U+014a}" => 1,
    "MUNDA\N{U+014a} kameru\N{U+014b}" => 1,
    Maa => 1,
    "Maa Kenya" => 1,
    "Maa Tansania" => 1,
    Makua => 1,
    "Makua Umozambiki" => 1,
    Malagasy => 1,
    "Malagasy Madagasikara" => 1,
    Malti => 1,
    "Malti Malta" => 1,
    "Nda\N{U+a78c}a" => 1,
    "Nda\N{U+a78c}a Kam\N{U+025b}l\N{U+00fb}n" => 1,
    Nederlands => 1,
    "Nederlands Aruba" => 1,
    "Nederlands Belgi\N{U+00eb}" => 1,
    "Nederlands Caribisch Nederland" => 1,
    "Nederlands Cura\N{U+00e7}ao" => 1,
    "Nederlands Nederland" => 1,
    "Nederlands Sint-Maarten" => 1,
    "Nederlands Suriname" => 1,
    Olusoga => 1,
    "Olusoga Yuganda" => 1,
    Oromoo => 1,
    "Oromoo Itoophiyaa" => 1,
    "Oromoo Keeniyaa" => 1,
    Pulaar => 1,
    "Pulaar Gine" => 1,
    "Pulaar Kameruun" => 1,
    "Pulaar Muritani" => 1,
    "Pulaar Senegaal" => 1,
    Rukiga => 1,
    "Rukiga Uganda" => 1,
    Runasimi => 1,
    "Runasimi Bolivia" => 1,
    "Runasimi Ecuador" => 1,
    "Runasimi Per\N{U+00fa}" => 1,
    Runyankore => 1,
    "Runyankore Uganda" => 1,
    "Schwiizert\N{U+00fc}\N{U+00fc}tsch" => 1,
    "Schwiizert\N{U+00fc}\N{U+00fc}tsch Frankriich" => 1,
    "Schwiizert\N{U+00fc}\N{U+00fc}tsch Li\N{U+00e4}chtescht\N{U+00e4}i" => 1,
    "Schwiizert\N{U+00fc}\N{U+00fc}tsch Schwiiz" => 1,
    "Shw\N{U+00f3}\N{U+014b}\N{U+00f2} ngiemb\N{U+0254}\N{U+0254}n" => 1,
    "Shw\N{U+00f3}\N{U+014b}\N{U+00f2} ngiemb\N{U+0254}\N{U+0254}n K\N{U+00e0}mal\N{U+00fb}m" => 1,
    Soomaali => 1,
    "Soomaali Itoobiya" => 1,
    "Soomaali Jabuuti" => 1,
    "Soomaali Kiiniya" => 1,
    "Soomaali Soomaaliya" => 1,
    "S\N{U+00e4}ng\N{U+00f6}" => 1,
    "S\N{U+00e4}ng\N{U+00f6} K\N{U+00f6}d\N{U+00f6}r\N{U+00f6}s\N{U+00ea}se t\N{U+00ee} B\N{U+00ea}afr\N{U+00ee}ka" => 1,
    "Tamazi\N{U+0263}t n la\N{U+1e6d}la\N{U+1e63}" => 1,
    "Tamazi\N{U+0263}t n la\N{U+1e6d}la\N{U+1e63} Me\N{U+1e5b}\N{U+1e5b}uk" => 1,
    Taqbaylit => 1,
    "Taqbaylit Lezzayer" => 1,
    "Tasawaq senni" => 1,
    "Tasawaq senni Ni\N{U+017e}er" => 1,
    "Tashel\N{U+1e25}iyt" => 1,
    "Tashel\N{U+1e25}iyt lm\N{U+0263}rib Latn" => 1,
    "Thok Nath" => 1,
    "Thok Nath SS" => 1,
    "Ti\N{U+1ebf}ng Vi\N{U+1ec7}t" => 1,
    "Ti\N{U+1ebf}ng Vi\N{U+1ec7}t Vi\N{U+1ec7}t Nam" => 1,
    Tshiluba => 1,
    "Tshiluba Ditunga wa Kongu" => 1,
    "T\N{U+00fc}rk\N{U+00e7}e" => 1,
    "T\N{U+00fc}rk\N{U+00e7}e K\N{U+0131}br\N{U+0131}s" => 1,
    "T\N{U+00fc}rk\N{U+00e7}e T\N{U+00fc}rkiye" => 1,
    Vai => 1,
    "Vai Laibhiya Latn" => 1,
    Walser => 1,
    "Walser Schwiz" => 1,
    "West-Frysk" => 1,
    "West-Frysk Nederl\N{U+00e2}n" => 1,
    Zarmaciine => 1,
    "Zarmaciine Ni\N{U+017e}er" => 1,
    "anar\N{U+00e2}\N{U+0161}kiel\N{U+00e2}" => 1,
    "anar\N{U+00e2}\N{U+0161}kiel\N{U+00e2} Suom\N{U+00e2}" => 1,
    asturianu => 1,
    "asturianu Espa\N{U+00f1}a" => 1,
    "az\N{U+0259}rbaycan dili" => 1,
    "az\N{U+0259}rbaycan dili Az\N{U+0259}rbaycan lat\N{U+0131}n" => 1,
    bamanakan => 1,
    "bamanakan Mali" => 1,
    bosanski => 1,
    "bosanski Bosna i Hercegovina latinica" => 1,
    brezhoneg => 1,
    "brezhoneg Fra\N{U+00f1}s" => 1,
    "catal\N{U+00e0}" => 1,
    "catal\N{U+00e0} Andorra" => 1,
    "catal\N{U+00e0} Espanya" => 1,
    "catal\N{U+00e0} Espanya valenci\N{U+00e0}" => 1,
    "catal\N{U+00e0} Fran\N{U+00e7}a" => 1,
    "catal\N{U+00e0} It\N{U+00e0}lia" => 1,
    chiShona => 1,
    "chiShona Zimbabwe" => 1,
    cu => 1,
    "cu RU" => 1,
    dansk => 1,
    "dansk Danmark" => 1,
    "dansk Gr\N{U+00f8}nland" => 1,
    "davvis\N{U+00e1}megiella" => 1,
    "davvis\N{U+00e1}megiella Norga" => 1,
    "davvis\N{U+00e1}megiella Ruo\N{U+0167}\N{U+0167}a" => 1,
    "davvis\N{U+00e1}megiella Suopma" => 1,
    "dolnoserb\N{U+0161}\N{U+0107}ina" => 1,
    "dolnoserb\N{U+0161}\N{U+0107}ina Nimska" => 1,
    "du\N{U+00e1}l\N{U+00e1}" => 1,
    "du\N{U+00e1}l\N{U+00e1} Cameroun" => 1,
    eesti => 1,
    "eesti Eesti" => 1,
    "espa\N{U+00f1}ol" => 1,
    "espa\N{U+00f1}ol Argentina" => 1,
    "espa\N{U+00f1}ol Bolivia" => 1,
    "espa\N{U+00f1}ol Brasil" => 1,
    "espa\N{U+00f1}ol Canarias" => 1,
    "espa\N{U+00f1}ol Ceuta y Melilla" => 1,
    "espa\N{U+00f1}ol Chile" => 1,
    "espa\N{U+00f1}ol Colombia" => 1,
    "espa\N{U+00f1}ol Costa Rica" => 1,
    "espa\N{U+00f1}ol Cuba" => 1,
    "espa\N{U+00f1}ol Ecuador" => 1,
    "espa\N{U+00f1}ol El Salvador" => 1,
    "espa\N{U+00f1}ol Espa\N{U+00f1}a" => 1,
    "espa\N{U+00f1}ol Estados Unidos" => 1,
    "espa\N{U+00f1}ol Filipinas" => 1,
    "espa\N{U+00f1}ol Guatemala" => 1,
    "espa\N{U+00f1}ol Guinea Ecuatorial" => 1,
    "espa\N{U+00f1}ol Honduras" => 1,
    "espa\N{U+00f1}ol Latinoam\N{U+00e9}rica" => 1,
    "espa\N{U+00f1}ol M\N{U+00e9}xico" => 1,
    "espa\N{U+00f1}ol Nicaragua" => 1,
    "espa\N{U+00f1}ol Panam\N{U+00e1}" => 1,
    "espa\N{U+00f1}ol Paraguay" => 1,
    "espa\N{U+00f1}ol Per\N{U+00fa}" => 1,
    "espa\N{U+00f1}ol Puerto Rico" => 1,
    "espa\N{U+00f1}ol Rep\N{U+00fa}blica Dominicana" => 1,
    "espa\N{U+00f1}ol Uruguay" => 1,
    "espa\N{U+00f1}ol Venezuela" => 1,
    esperanto => 1,
    "esperanto 001" => 1,
    euskara => 1,
    "euskara Espainia" => 1,
    ewondo => 1,
    "ewondo Kam\N{U+0259}r\N{U+00fa}n" => 1,
    "fran\N{U+00e7}ais" => 1,
    "fran\N{U+00e7}ais Alg\N{U+00e9}rie" => 1,
    "fran\N{U+00e7}ais Belgique" => 1,
    "fran\N{U+00e7}ais Burkina Faso" => 1,
    "fran\N{U+00e7}ais Burundi" => 1,
    "fran\N{U+00e7}ais B\N{U+00e9}nin" => 1,
    "fran\N{U+00e7}ais Cameroun" => 1,
    "fran\N{U+00e7}ais Canada" => 1,
    "fran\N{U+00e7}ais Comores" => 1,
    "fran\N{U+00e7}ais Congo-Brazzaville" => 1,
    "fran\N{U+00e7}ais Congo-Kinshasa" => 1,
    "fran\N{U+00e7}ais C\N{U+00f4}te d\N{U+2019}Ivoire" => 1,
    "fran\N{U+00e7}ais Djibouti" => 1,
    "fran\N{U+00e7}ais France" => 1,
    "fran\N{U+00e7}ais Gabon" => 1,
    "fran\N{U+00e7}ais Guadeloupe" => 1,
    "fran\N{U+00e7}ais Guin\N{U+00e9}e" => 1,
    "fran\N{U+00e7}ais Guin\N{U+00e9}e \N{U+00e9}quatoriale" => 1,
    "fran\N{U+00e7}ais Guyane fran\N{U+00e7}aise" => 1,
    "fran\N{U+00e7}ais Ha\N{U+00ef}ti" => 1,
    "fran\N{U+00e7}ais La R\N{U+00e9}union" => 1,
    "fran\N{U+00e7}ais Luxembourg" => 1,
    "fran\N{U+00e7}ais Madagascar" => 1,
    "fran\N{U+00e7}ais Mali" => 1,
    "fran\N{U+00e7}ais Maroc" => 1,
    "fran\N{U+00e7}ais Martinique" => 1,
    "fran\N{U+00e7}ais Maurice" => 1,
    "fran\N{U+00e7}ais Mauritanie" => 1,
    "fran\N{U+00e7}ais Mayotte" => 1,
    "fran\N{U+00e7}ais Monaco" => 1,
    "fran\N{U+00e7}ais Niger" => 1,
    "fran\N{U+00e7}ais Nouvelle-Cal\N{U+00e9}donie" => 1,
    "fran\N{U+00e7}ais Polyn\N{U+00e9}sie fran\N{U+00e7}aise" => 1,
    "fran\N{U+00e7}ais Rwanda" => 1,
    "fran\N{U+00e7}ais R\N{U+00e9}publique centrafricaine" => 1,
    "fran\N{U+00e7}ais Saint-Barth\N{U+00e9}lemy" => 1,
    "fran\N{U+00e7}ais Saint-Martin" => 1,
    "fran\N{U+00e7}ais Saint-Pierre-et-Miquelon" => 1,
    "fran\N{U+00e7}ais Seychelles" => 1,
    "fran\N{U+00e7}ais Suisse" => 1,
    "fran\N{U+00e7}ais Syrie" => 1,
    "fran\N{U+00e7}ais S\N{U+00e9}n\N{U+00e9}gal" => 1,
    "fran\N{U+00e7}ais Tchad" => 1,
    "fran\N{U+00e7}ais Togo" => 1,
    "fran\N{U+00e7}ais Tunisie" => 1,
    "fran\N{U+00e7}ais Vanuatu" => 1,
    "fran\N{U+00e7}ais Wallis-et-Futuna" => 1,
    furlan => 1,
    "furlan Italie" => 1,
    "f\N{U+00f8}royskt" => 1,
    "f\N{U+00f8}royskt Danmark" => 1,
    "f\N{U+00f8}royskt F\N{U+00f8}royar" => 1,
    galego => 1,
    "galego Espa\N{U+00f1}a" => 1,
    "hornjoserb\N{U+0161}\N{U+0107}ina" => 1,
    "hornjoserb\N{U+0161}\N{U+0107}ina N\N{U+011b}mska" => 1,
    hrvatski => 1,
    "hrvatski Bosna i Hercegovina" => 1,
    "hrvatski Hrvatska" => 1,
    isiNdebele => 1,
    "isiNdebele Zimbabwe" => 1,
    isiZulu => 1,
    "isiZulu i-South Africa" => 1,
    italiano => 1,
    "italiano Italia" => 1,
    "italiano San Marino" => 1,
    "italiano Svizzera" => 1,
    joola => 1,
    "joola Senegal" => 1,
    kabuverdianu => 1,
    "kabuverdianu Kabu Verdi" => 1,
    "kak\N{U+0254}" => 1,
    "kak\N{U+0254} Kam\N{U+025b}run" => 1,
    kalaallisut => 1,
    "kalaallisut Kalaallit Nunaat" => 1,
    kernewek => 1,
    "kernewek Rywvaneth Unys" => 1,
    "kreol morisien" => 1,
    "kreol morisien Moris" => 1,
    "latvie\N{U+0161}u" => 1,
    "latvie\N{U+0161}u Latvija" => 1,
    "lea fakatonga" => 1,
    "lea fakatonga Tonga" => 1,
    "lietuvi\N{U+0173}" => 1,
    "lietuvi\N{U+0173} Lietuva" => 1,
    "ling\N{U+00e1}la" => 1,
    "ling\N{U+00e1}la Ang\N{U+00f3}la" => 1,
    "ling\N{U+00e1}la Kongo" => 1,
    "ling\N{U+00e1}la Repibiki demokratiki ya Kong\N{U+00f3}" => 1,
    "ling\N{U+00e1}la Repibiki ya Afr\N{U+00ed}ka ya K\N{U+00e1}ti" => 1,
    magyar => 1,
    "magyar Magyarorsz\N{U+00e1}g" => 1,
    "meta\N{U+02bc}" => 1,
    "meta\N{U+02bc} Kamalun" => 1,
    nmg => 1,
    "nmg Kamerun" => 1,
    "norsk bokm\N{U+00e5}l" => 1,
    "norsk bokm\N{U+00e5}l Norge" => 1,
    "norsk bokm\N{U+00e5}l Svalbard og Jan Mayen" => 1,
    nuasue => 1,
    "nuasue Kemel\N{U+00fa}n" => 1,
    nynorsk => 1,
    "nynorsk Noreg" => 1,
    "o\N{U+2018}zbek" => 1,
    "o\N{U+2018}zbek O\N{U+02bb}zbekiston lotin" => 1,
    polski => 1,
    "polski Polska" => 1,
    "portugu\N{U+00ea}s" => 1,
    "portugu\N{U+00ea}s Angola" => 1,
    "portugu\N{U+00ea}s Brasil" => 1,
    "portugu\N{U+00ea}s Cabo Verde" => 1,
    "portugu\N{U+00ea}s Guin\N{U+00e9} Equatorial" => 1,
    "portugu\N{U+00ea}s Guin\N{U+00e9}-Bissau" => 1,
    "portugu\N{U+00ea}s Luxemburgo" => 1,
    "portugu\N{U+00ea}s Macau, RAE da China" => 1,
    "portugu\N{U+00ea}s Mo\N{U+00e7}ambique" => 1,
    "portugu\N{U+00ea}s Portugal" => 1,
    "portugu\N{U+00ea}s Su\N{U+00ed}\N{U+00e7}a" => 1,
    "portugu\N{U+00ea}s S\N{U+00e3}o Tom\N{U+00e9} e Pr\N{U+00ed}ncipe" => 1,
    "portugu\N{U+00ea}s Timor-Leste" => 1,
    "pr\N{U+016b}siskan" => 1,
    "pr\N{U+016b}siskan 001" => 1,
    rikpa => 1,
    "rikpa kam\N{U+025b}r\N{U+00fa}n" => 1,
    "rom\N{U+00e2}n\N{U+0103}" => 1,
    "rom\N{U+00e2}n\N{U+0103} Republica Moldova" => 1,
    "rom\N{U+00e2}n\N{U+0103} Rom\N{U+00e2}nia" => 1,
    root => 1,
    rumantsch => 1,
    "rumantsch Svizra" => 1,
    sena => 1,
    "sena Mo\N{U+00e7}ambique" => 1,
    shqip => 1,
    "shqip Kosov\N{U+00eb}" => 1,
    "shqip Maqedoni" => 1,
    "shqip Shqip\N{U+00eb}ri" => 1,
    "sloven\N{U+010d}ina" => 1,
    "sloven\N{U+010d}ina Slovensko" => 1,
    "sloven\N{U+0161}\N{U+010d}ina" => 1,
    "sloven\N{U+0161}\N{U+010d}ina Slovenija" => 1,
    srpski => 1,
    "srpski Bosna i Hercegovina latinica" => 1,
    "srpski Crna Gora latinica" => 1,
    "srpski Kosovo latinica" => 1,
    "srpski Srbija latinica" => 1,
    suomi => 1,
    "suomi Suomi" => 1,
    svenska => 1,
    "svenska Finland" => 1,
    "svenska Sverige" => 1,
    "svenska \N{U+00c5}land" => 1,
    tk => 1,
    "tk TM" => 1,
    vo => 1,
    "vo 001" => 1,
    "\N{U+00c8}d\N{U+00e8} Yor\N{U+00f9}b\N{U+00e1}" => 1,
    "\N{U+00c8}d\N{U+00e8} Yor\N{U+00f9}b\N{U+00e1} Or\N{U+00ed}l\N{U+025b}\N{U+0301}\N{U+00e8}de B\N{U+025b}\N{U+0300}n\N{U+025b}\N{U+0300}" => 1,
    "\N{U+00c8}d\N{U+00e8} Yor\N{U+00f9}b\N{U+00e1} Or\N{U+00ed}l\N{U+1eb9}\N{U+0301}\N{U+00e8}de N\N{U+00e0}\N{U+00ec}j\N{U+00ed}r\N{U+00ed}\N{U+00e0}" => 1,
    "\N{U+00ed}slenska" => 1,
    "\N{U+00ed}slenska \N{U+00cd}sland" => 1,
    "\N{U+010d}e\N{U+0161}tina" => 1,
    "\N{U+010d}e\N{U+0161}tina \N{U+010c}esk\N{U+00e1} republika" => 1,
    "\N{U+0181}\N{U+00e0}s\N{U+00e0}a" => 1,
    "\N{U+0181}\N{U+00e0}s\N{U+00e0}a K\N{U+00e0}m\N{U+025b}\N{U+0300}r\N{U+00fb}n" => 1,
    "\N{U+02bb}\N{U+014c}lelo Hawai\N{U+02bb}i" => 1,
    "\N{U+02bb}\N{U+014c}lelo Hawai\N{U+02bb}i \N{U+02bb}Amelika Hui P\N{U+016b} \N{U+02bb}Ia" => 1,
    "\N{U+0395}\N{U+03bb}\N{U+03bb}\N{U+03b7}\N{U+03bd}\N{U+03b9}\N{U+03ba}\N{U+03ac}" => 1,
    "\N{U+0395}\N{U+03bb}\N{U+03bb}\N{U+03b7}\N{U+03bd}\N{U+03b9}\N{U+03ba}\N{U+03ac} \N{U+0395}\N{U+03bb}\N{U+03bb}\N{U+03ac}\N{U+03b4}\N{U+03b1}" => 1,
    "\N{U+0395}\N{U+03bb}\N{U+03bb}\N{U+03b7}\N{U+03bd}\N{U+03b9}\N{U+03ba}\N{U+03ac} \N{U+039a}\N{U+03cd}\N{U+03c0}\N{U+03c1}\N{U+03bf}\N{U+03c2}" => 1,
    "\N{U+040e}\N{U+0437}\N{U+0431}\N{U+0435}\N{U+043a}" => 1,
    "\N{U+040e}\N{U+0437}\N{U+0431}\N{U+0435}\N{U+043a} \N{U+040e}\N{U+0437}\N{U+0431}\N{U+0435}\N{U+043a}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+043d} \N{U+041a}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}" => 1,
    "\N{U+0430}\N{U+0437}\N{U+04d9}\N{U+0440}\N{U+0431}\N{U+0430}\N{U+0458}\N{U+04b9}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0438}\N{U+043b}\N{U+0438}" => 1,
    "\N{U+0430}\N{U+0437}\N{U+04d9}\N{U+0440}\N{U+0431}\N{U+0430}\N{U+0458}\N{U+04b9}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0438}\N{U+043b}\N{U+0438} \N{U+0410}\N{U+0437}\N{U+04d9}\N{U+0440}\N{U+0431}\N{U+0430}\N{U+0458}\N{U+04b9}\N{U+0430}\N{U+043d} \N{U+041a}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}" => 1,
    "\N{U+0431}\N{U+0435}\N{U+043b}\N{U+0430}\N{U+0440}\N{U+0443}\N{U+0441}\N{U+043a}\N{U+0430}\N{U+044f}" => 1,
    "\N{U+0431}\N{U+0435}\N{U+043b}\N{U+0430}\N{U+0440}\N{U+0443}\N{U+0441}\N{U+043a}\N{U+0430}\N{U+044f} \N{U+0411}\N{U+0435}\N{U+043b}\N{U+0430}\N{U+0440}\N{U+0443}\N{U+0441}\N{U+044c}" => 1,
    "\N{U+0431}\N{U+043e}\N{U+0441}\N{U+0430}\N{U+043d}\N{U+0441}\N{U+043a}\N{U+0438}" => 1,
    "\N{U+0431}\N{U+043e}\N{U+0441}\N{U+0430}\N{U+043d}\N{U+0441}\N{U+043a}\N{U+0438} \N{U+0411}\N{U+043e}\N{U+0441}\N{U+043d}\N{U+0430} \N{U+0438} \N{U+0425}\N{U+0435}\N{U+0440}\N{U+0446}\N{U+0435}\N{U+0433}\N{U+043e}\N{U+0432}\N{U+0438}\N{U+043d}\N{U+0430} \N{U+040b}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}\N{U+0438}\N{U+0446}\N{U+0430}" => 1,
    "\N{U+0431}\N{U+044a}\N{U+043b}\N{U+0433}\N{U+0430}\N{U+0440}\N{U+0441}\N{U+043a}\N{U+0438}" => 1,
    "\N{U+0431}\N{U+044a}\N{U+043b}\N{U+0433}\N{U+0430}\N{U+0440}\N{U+0441}\N{U+043a}\N{U+0438} \N{U+0411}\N{U+044a}\N{U+043b}\N{U+0433}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+044f}" => 1,
    "\N{U+0438}\N{U+0440}\N{U+043e}\N{U+043d}" => 1,
    "\N{U+0438}\N{U+0440}\N{U+043e}\N{U+043d} \N{U+0413}\N{U+0443}\N{U+044b}\N{U+0440}\N{U+0434}\N{U+0437}\N{U+044b}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+043d}" => 1,
    "\N{U+0438}\N{U+0440}\N{U+043e}\N{U+043d} \N{U+0423}\N{U+04d5}\N{U+0440}\N{U+04d5}\N{U+0441}\N{U+0435}" => 1,
    "\N{U+043a}\N{U+044b}\N{U+0440}\N{U+0433}\N{U+044b}\N{U+0437}\N{U+0447}\N{U+0430}" => 1,
    "\N{U+043a}\N{U+044b}\N{U+0440}\N{U+0433}\N{U+044b}\N{U+0437}\N{U+0447}\N{U+0430} \N{U+041a}\N{U+044b}\N{U+0440}\N{U+0433}\N{U+044b}\N{U+0437}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+043d}" => 1,
    "\N{U+043c}\N{U+0430}\N{U+043a}\N{U+0435}\N{U+0434}\N{U+043e}\N{U+043d}\N{U+0441}\N{U+043a}\N{U+0438}" => 1,
    "\N{U+043c}\N{U+0430}\N{U+043a}\N{U+0435}\N{U+0434}\N{U+043e}\N{U+043d}\N{U+0441}\N{U+043a}\N{U+0438} \N{U+041c}\N{U+0430}\N{U+043a}\N{U+0435}\N{U+0434}\N{U+043e}\N{U+043d}\N{U+0438}\N{U+0458}\N{U+0430}" => 1,
    "\N{U+043c}\N{U+043e}\N{U+043d}\N{U+0433}\N{U+043e}\N{U+043b}" => 1,
    "\N{U+043c}\N{U+043e}\N{U+043d}\N{U+0433}\N{U+043e}\N{U+043b} \N{U+041c}\N{U+043e}\N{U+043d}\N{U+0433}\N{U+043e}\N{U+043b}" => 1,
    "\N{U+043d}\N{U+043e}\N{U+0445}\N{U+0447}\N{U+0438}\N{U+0439}\N{U+043d}" => 1,
    "\N{U+043d}\N{U+043e}\N{U+0445}\N{U+0447}\N{U+0438}\N{U+0439}\N{U+043d} \N{U+0420}\N{U+043e}\N{U+0441}\N{U+0441}\N{U+0438}" => 1,
    "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439}" => 1,
    "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439} \N{U+0411}\N{U+0435}\N{U+043b}\N{U+0430}\N{U+0440}\N{U+0443}\N{U+0441}\N{U+044c}" => 1,
    "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439} \N{U+041a}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0445}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+043d}" => 1,
    "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439} \N{U+041a}\N{U+0438}\N{U+0440}\N{U+0433}\N{U+0438}\N{U+0437}\N{U+0438}\N{U+044f}" => 1,
    "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439} \N{U+041c}\N{U+043e}\N{U+043b}\N{U+0434}\N{U+043e}\N{U+0432}\N{U+0430}" => 1,
    "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439} \N{U+0420}\N{U+043e}\N{U+0441}\N{U+0441}\N{U+0438}\N{U+044f}" => 1,
    "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439} \N{U+0423}\N{U+043a}\N{U+0440}\N{U+0430}\N{U+0438}\N{U+043d}\N{U+0430}" => 1,
    "\N{U+0441}\N{U+0430}\N{U+0445}\N{U+0430} \N{U+0442}\N{U+044b}\N{U+043b}\N{U+0430}" => 1,
    "\N{U+0441}\N{U+0430}\N{U+0445}\N{U+0430} \N{U+0442}\N{U+044b}\N{U+043b}\N{U+0430} \N{U+0410}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+0441}\N{U+044b}\N{U+044b}\N{U+0439}\N{U+0430}" => 1,
    "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438}" => 1,
    "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438} \N{U+0411}\N{U+043e}\N{U+0441}\N{U+043d}\N{U+0430} \N{U+0438} \N{U+0425}\N{U+0435}\N{U+0440}\N{U+0446}\N{U+0435}\N{U+0433}\N{U+043e}\N{U+0432}\N{U+0438}\N{U+043d}\N{U+0430} \N{U+045b}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}\N{U+0438}\N{U+0446}\N{U+0430}" => 1,
    "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438} \N{U+041a}\N{U+043e}\N{U+0441}\N{U+043e}\N{U+0432}\N{U+043e} \N{U+045b}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}\N{U+0438}\N{U+0446}\N{U+0430}" => 1,
    "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438} \N{U+0421}\N{U+0440}\N{U+0431}\N{U+0438}\N{U+0458}\N{U+0430} \N{U+045b}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}\N{U+0438}\N{U+0446}\N{U+0430}" => 1,
    "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438} \N{U+0426}\N{U+0440}\N{U+043d}\N{U+0430} \N{U+0413}\N{U+043e}\N{U+0440}\N{U+0430} \N{U+045b}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}\N{U+0438}\N{U+0446}\N{U+0430}" => 1,
    "\N{U+0443}\N{U+043a}\N{U+0440}\N{U+0430}\N{U+0457}\N{U+043d}\N{U+0441}\N{U+044c}\N{U+043a}\N{U+0430}" => 1,
    "\N{U+0443}\N{U+043a}\N{U+0440}\N{U+0430}\N{U+0457}\N{U+043d}\N{U+0441}\N{U+044c}\N{U+043a}\N{U+0430} \N{U+0423}\N{U+043a}\N{U+0440}\N{U+0430}\N{U+0457}\N{U+043d}\N{U+0430}" => 1,
    "\N{U+049b}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+049b} \N{U+0442}\N{U+0456}\N{U+043b}\N{U+0456}" => 1,
    "\N{U+049b}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+049b} \N{U+0442}\N{U+0456}\N{U+043b}\N{U+0456} \N{U+049a}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+049b}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+043d}" => 1,
    "\N{U+0570}\N{U+0561}\N{U+0575}\N{U+0565}\N{U+0580}\N{U+0565}\N{U+0576}" => 1,
    "\N{U+0570}\N{U+0561}\N{U+0575}\N{U+0565}\N{U+0580}\N{U+0565}\N{U+0576} \N{U+0540}\N{U+0561}\N{U+0575}\N{U+0561}\N{U+057d}\N{U+057f}\N{U+0561}\N{U+0576}" => 1,
    "\N{U+05d9}\N{U+05d9}\N{U+05b4}\N{U+05d3}\N{U+05d9}\N{U+05e9}" => 1,
    "\N{U+05d9}\N{U+05d9}\N{U+05b4}\N{U+05d3}\N{U+05d9}\N{U+05e9} \N{U+05d5}\N{U+05d5}\N{U+05e2}\N{U+05dc}\N{U+05d8}" => 1,
    "\N{U+05e2}\N{U+05d1}\N{U+05e8}\N{U+05d9}\N{U+05ea}" => 1,
    "\N{U+05e2}\N{U+05d1}\N{U+05e8}\N{U+05d9}\N{U+05ea} \N{U+05d9}\N{U+05e9}\N{U+05e8}\N{U+05d0}\N{U+05dc}" => 1,
    "\N{U+0626}\N{U+06c7}\N{U+064a}\N{U+063a}\N{U+06c7}\N{U+0631}\N{U+0686}\N{U+06d5}" => 1,
    "\N{U+0626}\N{U+06c7}\N{U+064a}\N{U+063a}\N{U+06c7}\N{U+0631}\N{U+0686}\N{U+06d5} \N{U+062c}\N{U+06c7}\N{U+06ad}\N{U+06af}\N{U+0648}" => 1,
    "\N{U+0627}\N{U+0631}\N{U+062f}\N{U+0648}" => 1,
    "\N{U+0627}\N{U+0631}\N{U+062f}\N{U+0648} \N{U+0628}\N{U+06be}\N{U+0627}\N{U+0631}\N{U+062a}" => 1,
    "\N{U+0627}\N{U+0631}\N{U+062f}\N{U+0648} \N{U+067e}\N{U+0627}\N{U+06a9}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0625}\N{U+0631}\N{U+064a}\N{U+062a}\N{U+0631}\N{U+064a}\N{U+0627}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0625}\N{U+0633}\N{U+0631}\N{U+0627}\N{U+0626}\N{U+064a}\N{U+0644}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0627}\N{U+0636}\N{U+064a} \N{U+0627}\N{U+0644}\N{U+0641}\N{U+0644}\N{U+0633}\N{U+0637}\N{U+064a}\N{U+0646}\N{U+064a}\N{U+0629}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+062f}\N{U+0646}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0625}\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0627}\N{U+062a} \N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+062a}\N{U+062d}\N{U+062f}\N{U+0629}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0628}\N{U+062d}\N{U+0631}\N{U+064a}\N{U+0646}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+062c}\N{U+0632}\N{U+0627}\N{U+0626}\N{U+0631}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0633}\N{U+0648}\N{U+062f}\N{U+0627}\N{U+0646}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0635}\N{U+062d}\N{U+0631}\N{U+0627}\N{U+0621} \N{U+0627}\N{U+0644}\N{U+063a}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0635}\N{U+0648}\N{U+0645}\N{U+0627}\N{U+0644}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0639}\N{U+0627}\N{U+0644}\N{U+0645}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+0642}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0643}\N{U+0648}\N{U+064a}\N{U+062a}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+063a}\N{U+0631}\N{U+0628}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+0645}\N{U+0644}\N{U+0643}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0633}\N{U+0639}\N{U+0648}\N{U+062f}\N{U+064a}\N{U+0629}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+064a}\N{U+0645}\N{U+0646}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+062a}\N{U+0634}\N{U+0627}\N{U+062f}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+062a}\N{U+0648}\N{U+0646}\N{U+0633}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+062c}\N{U+0632}\N{U+0631} \N{U+0627}\N{U+0644}\N{U+0642}\N{U+0645}\N{U+0631}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+062c}\N{U+0646}\N{U+0648}\N{U+0628} \N{U+0627}\N{U+0644}\N{U+0633}\N{U+0648}\N{U+062f}\N{U+0627}\N{U+0646}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+062c}\N{U+064a}\N{U+0628}\N{U+0648}\N{U+062a}\N{U+064a}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0633}\N{U+0648}\N{U+0631}\N{U+064a}\N{U+0627}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0639}\N{U+064f}\N{U+0645}\N{U+0627}\N{U+0646}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0642}\N{U+0637}\N{U+0631}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0644}\N{U+0628}\N{U+0646}\N{U+0627}\N{U+0646}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0644}\N{U+064a}\N{U+0628}\N{U+064a}\N{U+0627}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0645}\N{U+0635}\N{U+0631}" => 1,
    "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0645}\N{U+0648}\N{U+0631}\N{U+064a}\N{U+062a}\N{U+0627}\N{U+0646}\N{U+064a}\N{U+0627}" => 1,
    "\N{U+0627}\N{U+0648}\N{U+0632}\N{U+0628}\N{U+06cc}\N{U+06a9}" => 1,
    "\N{U+0627}\N{U+0648}\N{U+0632}\N{U+0628}\N{U+06cc}\N{U+06a9} \N{U+0627}\N{U+0641}\N{U+063a}\N{U+0627}\N{U+0646}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646} \N{U+0639}\N{U+0631}\N{U+0628}\N{U+06cc}" => 1,
    "\N{U+0641}\N{U+0627}\N{U+0631}\N{U+0633}\N{U+06cc}" => 1,
    "\N{U+0641}\N{U+0627}\N{U+0631}\N{U+0633}\N{U+06cc} \N{U+0627}\N{U+0641}\N{U+063a}\N{U+0627}\N{U+0646}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646}" => 1,
    "\N{U+0641}\N{U+0627}\N{U+0631}\N{U+0633}\N{U+06cc} \N{U+0627}\N{U+06cc}\N{U+0631}\N{U+0627}\N{U+0646}" => 1,
    "\N{U+0644}\N{U+06ca}\N{U+0631}\N{U+06cc} \N{U+0634}\N{U+0648}\N{U+0645}\N{U+0627}\N{U+0644}\N{U+06cc}" => 1,
    "\N{U+0644}\N{U+06ca}\N{U+0631}\N{U+06cc} \N{U+0634}\N{U+0648}\N{U+0645}\N{U+0627}\N{U+0644}\N{U+06cc} IQ" => 1,
    "\N{U+0644}\N{U+06ca}\N{U+0631}\N{U+06cc} \N{U+0634}\N{U+0648}\N{U+0645}\N{U+0627}\N{U+0644}\N{U+06cc} IR" => 1,
    "\N{U+0645}\N{U+0627}\N{U+0632}\N{U+0631}\N{U+0648}\N{U+0646}\N{U+06cc}" => 1,
    "\N{U+0645}\N{U+0627}\N{U+0632}\N{U+0631}\N{U+0648}\N{U+0646}\N{U+06cc} \N{U+0627}\N{U+06cc}\N{U+0631}\N{U+0627}\N{U+0646}" => 1,
    "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0627}\N{U+0628}\N{U+06cc}" => 1,
    "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0627}\N{U+0628}\N{U+06cc} \N{U+067e}\N{U+06a9}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646} \N{U+0639}\N{U+0631}\N{U+0628}\N{U+06cc}" => 1,
    "\N{U+067e}\N{U+069a}\N{U+062a}\N{U+0648}" => 1,
    "\N{U+067e}\N{U+069a}\N{U+062a}\N{U+0648} \N{U+0627}\N{U+0641}\N{U+063a}\N{U+0627}\N{U+0646}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646}" => 1,
    "\N{U+06a9}\N{U+0648}\N{U+0631}\N{U+062f}\N{U+06cc}\N{U+06cc} \N{U+0646}\N{U+0627}\N{U+0648}\N{U+06d5}\N{U+0646}\N{U+062f}\N{U+06cc}" => 1,
    "\N{U+06a9}\N{U+0648}\N{U+0631}\N{U+062f}\N{U+06cc}\N{U+06cc} \N{U+0646}\N{U+0627}\N{U+0648}\N{U+06d5}\N{U+0646}\N{U+062f}\N{U+06cc} IQ" => 1,
    "\N{U+06a9}\N{U+0648}\N{U+0631}\N{U+062f}\N{U+06cc}\N{U+06cc} \N{U+0646}\N{U+0627}\N{U+0648}\N{U+06d5}\N{U+0646}\N{U+062f}\N{U+06cc} IR" => 1,
    "\N{U+06a9}\N{U+0672}\N{U+0634}\N{U+064f}\N{U+0631}" => 1,
    "\N{U+06a9}\N{U+0672}\N{U+0634}\N{U+064f}\N{U+0631} \N{U+06c1}\N{U+0650}\N{U+0646}\N{U+065b}\N{U+062f}\N{U+0648}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646}" => 1,
    "\N{U+0915}\N{U+094b}\N{U+0902}\N{U+0915}\N{U+0923}\N{U+0940}" => 1,
    "\N{U+0915}\N{U+094b}\N{U+0902}\N{U+0915}\N{U+0923}\N{U+0940} \N{U+092d}\N{U+093e}\N{U+0930}\N{U+0924}" => 1,
    "\N{U+0928}\N{U+0947}\N{U+092a}\N{U+093e}\N{U+0932}\N{U+0940}" => 1,
    "\N{U+0928}\N{U+0947}\N{U+092a}\N{U+093e}\N{U+0932}\N{U+0940} \N{U+0928}\N{U+0947}\N{U+092a}\N{U+093e}\N{U+0932}" => 1,
    "\N{U+0928}\N{U+0947}\N{U+092a}\N{U+093e}\N{U+0932}\N{U+0940} \N{U+092d}\N{U+093e}\N{U+0930}\N{U+0924}" => 1,
    "\N{U+092c}\N{U+0921}\N{U+093c}\N{U+094b}" => 1,
    "\N{U+092c}\N{U+0921}\N{U+093c}\N{U+094b} \N{U+092d}\N{U+093e}\N{U+0930}\N{U+0924}" => 1,
    "\N{U+092e}\N{U+0930}\N{U+093e}\N{U+0920}\N{U+0940}" => 1,
    "\N{U+092e}\N{U+0930}\N{U+093e}\N{U+0920}\N{U+0940} \N{U+092d}\N{U+093e}\N{U+0930}\N{U+0924}" => 1,
    "\N{U+0939}\N{U+093f}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+0940}" => 1,
    "\N{U+0939}\N{U+093f}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+0940} \N{U+092d}\N{U+093e}\N{U+0930}\N{U+0924}" => 1,
    "\N{U+0985}\N{U+09b8}\N{U+09ae}\N{U+09c0}\N{U+09af}\N{U+09bc}\N{U+09be}" => 1,
    "\N{U+0985}\N{U+09b8}\N{U+09ae}\N{U+09c0}\N{U+09af}\N{U+09bc}\N{U+09be} \N{U+09ad}\N{U+09be}\N{U+09f0}\N{U+09a4}" => 1,
    "\N{U+09ac}\N{U+09be}\N{U+0982}\N{U+09b2}\N{U+09be}" => 1,
    "\N{U+09ac}\N{U+09be}\N{U+0982}\N{U+09b2}\N{U+09be} \N{U+09ac}\N{U+09be}\N{U+0982}\N{U+09b2}\N{U+09be}\N{U+09a6}\N{U+09c7}\N{U+09b6}" => 1,
    "\N{U+09ac}\N{U+09be}\N{U+0982}\N{U+09b2}\N{U+09be} \N{U+09ad}\N{U+09be}\N{U+09b0}\N{U+09a4}" => 1,
    "\N{U+0a2a}\N{U+0a70}\N{U+0a1c}\N{U+0a3e}\N{U+0a2c}\N{U+0a40}" => 1,
    "\N{U+0a2a}\N{U+0a70}\N{U+0a1c}\N{U+0a3e}\N{U+0a2c}\N{U+0a40} \N{U+0a2d}\N{U+0a3e}\N{U+0a30}\N{U+0a24} \N{U+0a17}\N{U+0a41}\N{U+0a30}\N{U+0a2e}\N{U+0a41}\N{U+0a16}\N{U+0a40}" => 1,
    "\N{U+0a97}\N{U+0ac1}\N{U+0a9c}\N{U+0ab0}\N{U+0abe}\N{U+0aa4}\N{U+0ac0}" => 1,
    "\N{U+0a97}\N{U+0ac1}\N{U+0a9c}\N{U+0ab0}\N{U+0abe}\N{U+0aa4}\N{U+0ac0} \N{U+0aad}\N{U+0abe}\N{U+0ab0}\N{U+0aa4}" => 1,
    "\N{U+0b13}\N{U+0b21}\N{U+0b3c}\N{U+0b3f}\N{U+0b06}" => 1,
    "\N{U+0b13}\N{U+0b21}\N{U+0b3c}\N{U+0b3f}\N{U+0b06} \N{U+0b2d}\N{U+0b3e}\N{U+0b30}\N{U+0b24}" => 1,
    "\N{U+0ba4}\N{U+0bae}\N{U+0bbf}\N{U+0bb4}\N{U+0bcd}" => 1,
    "\N{U+0ba4}\N{U+0bae}\N{U+0bbf}\N{U+0bb4}\N{U+0bcd} \N{U+0b87}\N{U+0ba8}\N{U+0bcd}\N{U+0ba4}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}" => 1,
    "\N{U+0ba4}\N{U+0bae}\N{U+0bbf}\N{U+0bb4}\N{U+0bcd} \N{U+0b87}\N{U+0bb2}\N{U+0b99}\N{U+0bcd}\N{U+0b95}\N{U+0bc8}" => 1,
    "\N{U+0ba4}\N{U+0bae}\N{U+0bbf}\N{U+0bb4}\N{U+0bcd} \N{U+0b9a}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}\N{U+0b95}\N{U+0baa}\N{U+0bcd}\N{U+0baa}\N{U+0bc2}\N{U+0bb0}\N{U+0bcd}" => 1,
    "\N{U+0ba4}\N{U+0bae}\N{U+0bbf}\N{U+0bb4}\N{U+0bcd} \N{U+0bae}\N{U+0bb2}\N{U+0bc7}\N{U+0b9a}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}" => 1,
    "\N{U+0c24}\N{U+0c46}\N{U+0c32}\N{U+0c41}\N{U+0c17}\N{U+0c41}" => 1,
    "\N{U+0c24}\N{U+0c46}\N{U+0c32}\N{U+0c41}\N{U+0c17}\N{U+0c41} \N{U+0c2d}\N{U+0c3e}\N{U+0c30}\N{U+0c24} \N{U+0c26}\N{U+0c47}\N{U+0c36}\N{U+0c02}" => 1,
    "\N{U+0c95}\N{U+0ca8}\N{U+0ccd}\N{U+0ca8}\N{U+0ca1}" => 1,
    "\N{U+0c95}\N{U+0ca8}\N{U+0ccd}\N{U+0ca8}\N{U+0ca1} \N{U+0cad}\N{U+0cbe}\N{U+0cb0}\N{U+0ca4}" => 1,
    "\N{U+0d2e}\N{U+0d32}\N{U+0d2f}\N{U+0d3e}\N{U+0d33}\N{U+0d02}" => 1,
    "\N{U+0d2e}\N{U+0d32}\N{U+0d2f}\N{U+0d3e}\N{U+0d33}\N{U+0d02} \N{U+0d07}\N{U+0d28}\N{U+0d4d}\N{U+0d24}\N{U+0d4d}\N{U+0d2f}" => 1,
    "\N{U+0dc3}\N{U+0dd2}\N{U+0d82}\N{U+0dc4}\N{U+0dbd}" => 1,
    "\N{U+0dc3}\N{U+0dd2}\N{U+0d82}\N{U+0dc4}\N{U+0dbd} \N{U+0dc1}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dd3} \N{U+0dbd}\N{U+0d82}\N{U+0d9a}\N{U+0dcf}\N{U+0dc0}" => 1,
    "\N{U+0e44}\N{U+0e17}\N{U+0e22}" => 1,
    "\N{U+0e44}\N{U+0e17}\N{U+0e22} \N{U+0e44}\N{U+0e17}\N{U+0e22}" => 1,
    "\N{U+0ea5}\N{U+0eb2}\N{U+0ea7}" => 1,
    "\N{U+0ea5}\N{U+0eb2}\N{U+0ea7} \N{U+0ea5}\N{U+0eb2}\N{U+0ea7}" => 1,
    "\N{U+0f56}\N{U+0f7c}\N{U+0f51}\N{U+0f0b}\N{U+0f66}\N{U+0f90}\N{U+0f51}\N{U+0f0b}" => 1,
    "\N{U+0f56}\N{U+0f7c}\N{U+0f51}\N{U+0f0b}\N{U+0f66}\N{U+0f90}\N{U+0f51}\N{U+0f0b} \N{U+0f62}\N{U+0f92}\N{U+0fb1}\N{U+0f0b}\N{U+0f42}\N{U+0f62}\N{U+0f0b}" => 1,
    "\N{U+0f56}\N{U+0f7c}\N{U+0f51}\N{U+0f0b}\N{U+0f66}\N{U+0f90}\N{U+0f51}\N{U+0f0b} \N{U+0f62}\N{U+0f92}\N{U+0fb1}\N{U+0f0b}\N{U+0f53}\N{U+0f42}" => 1,
    "\N{U+0f62}\N{U+0fab}\N{U+0f7c}\N{U+0f44}\N{U+0f0b}\N{U+0f41}" => 1,
    "\N{U+0f62}\N{U+0fab}\N{U+0f7c}\N{U+0f44}\N{U+0f0b}\N{U+0f41} \N{U+0f60}\N{U+0f56}\N{U+0fb2}\N{U+0f74}\N{U+0f42}" => 1,
    "\N{U+1017}\N{U+1019}\N{U+102c}" => 1,
    "\N{U+1017}\N{U+1019}\N{U+102c} \N{U+1019}\N{U+103c}\N{U+1014}\N{U+103a}\N{U+1019}\N{U+102c}" => 1,
    "\N{U+10e5}\N{U+10d0}\N{U+10e0}\N{U+10d7}\N{U+10e3}\N{U+10da}\N{U+10d8}" => 1,
    "\N{U+10e5}\N{U+10d0}\N{U+10e0}\N{U+10d7}\N{U+10e3}\N{U+10da}\N{U+10d8} \N{U+10e1}\N{U+10d0}\N{U+10e5}\N{U+10d0}\N{U+10e0}\N{U+10d7}\N{U+10d5}\N{U+10d4}\N{U+10da}\N{U+10dd}" => 1,
    "\N{U+1275}\N{U+130d}\N{U+122d}\N{U+129b}" => 1,
    "\N{U+1275}\N{U+130d}\N{U+122d}\N{U+129b} ER" => 1,
    "\N{U+1275}\N{U+130d}\N{U+122d}\N{U+129b} ET" => 1,
    "\N{U+12a0}\N{U+121b}\N{U+122d}\N{U+129b}" => 1,
    "\N{U+12a0}\N{U+121b}\N{U+122d}\N{U+129b} \N{U+12a2}\N{U+1275}\N{U+12ee}\N{U+1335}\N{U+12eb}" => 1,
    "\N{U+13e3}\N{U+13b3}\N{U+13a9}" => 1,
    "\N{U+13e3}\N{U+13b3}\N{U+13a9} \N{U+13a0}\N{U+13b9}\N{U+13f0}\N{U+13df}" => 1,
    "\N{U+1781}\N{U+17d2}\N{U+1798}\N{U+17c2}\N{U+179a}" => 1,
    "\N{U+1781}\N{U+17d2}\N{U+1798}\N{U+17c2}\N{U+179a} \N{U+1780}\N{U+1798}\N{U+17d2}\N{U+1796}\N{U+17bb}\N{U+1787}\N{U+17b6}" => 1,
    "\N{U+2d5c}\N{U+2d30}\N{U+2d4e}\N{U+2d30}\N{U+2d63}\N{U+2d49}\N{U+2d56}\N{U+2d5c}" => 1,
    "\N{U+2d5c}\N{U+2d30}\N{U+2d4e}\N{U+2d30}\N{U+2d63}\N{U+2d49}\N{U+2d56}\N{U+2d5c} \N{U+2d4d}\N{U+2d4e}\N{U+2d56}\N{U+2d54}\N{U+2d49}\N{U+2d31}" => 1,
    "\N{U+2d5c}\N{U+2d30}\N{U+2d5b}\N{U+2d4d}\N{U+2d43}\N{U+2d49}\N{U+2d5c}" => 1,
    "\N{U+2d5c}\N{U+2d30}\N{U+2d5b}\N{U+2d4d}\N{U+2d43}\N{U+2d49}\N{U+2d5c} \N{U+2d4d}\N{U+2d4e}\N{U+2d56}\N{U+2d54}\N{U+2d49}\N{U+2d31} Tfng" => 1,
    "\N{U+4e2d}\N{U+6587}" => 1,
    "\N{U+4e2d}\N{U+6587} \N{U+4e2d}\N{U+56fd} \N{U+7b80}\N{U+4f53}" => 1,
    "\N{U+4e2d}\N{U+6587} \N{U+4e2d}\N{U+56fd}\N{U+6fb3}\N{U+95e8}\N{U+7279}\N{U+522b}\N{U+884c}\N{U+653f}\N{U+533a} \N{U+7b80}\N{U+4f53}" => 1,
    "\N{U+4e2d}\N{U+6587} \N{U+4e2d}\N{U+56fd}\N{U+9999}\N{U+6e2f}\N{U+7279}\N{U+522b}\N{U+884c}\N{U+653f}\N{U+533a} \N{U+7b80}\N{U+4f53}" => 1,
    "\N{U+4e2d}\N{U+6587} \N{U+4e2d}\N{U+83ef}\N{U+4eba}\N{U+6c11}\N{U+5171}\N{U+548c}\N{U+570b}\N{U+6fb3}\N{U+9580}\N{U+7279}\N{U+5225}\N{U+884c}\N{U+653f}\N{U+5340} \N{U+7e41}\N{U+9ad4}\N{U+5b57}" => 1,
    "\N{U+4e2d}\N{U+6587} \N{U+4e2d}\N{U+83ef}\N{U+4eba}\N{U+6c11}\N{U+5171}\N{U+548c}\N{U+570b}\N{U+9999}\N{U+6e2f}\N{U+7279}\N{U+5225}\N{U+884c}\N{U+653f}\N{U+5340} \N{U+7e41}\N{U+9ad4}\N{U+5b57}" => 1,
    "\N{U+4e2d}\N{U+6587} \N{U+53f0}\N{U+7063} \N{U+7e41}\N{U+9ad4}" => 1,
    "\N{U+4e2d}\N{U+6587} \N{U+65b0}\N{U+52a0}\N{U+5761} \N{U+7b80}\N{U+4f53}" => 1,
    "\N{U+65e5}\N{U+672c}\N{U+8a9e}" => 1,
    "\N{U+65e5}\N{U+672c}\N{U+8a9e} \N{U+65e5}\N{U+672c}" => 1,
    "\N{U+7cb5}\N{U+8a9e}" => 1,
    "\N{U+7cb5}\N{U+8a9e} \N{U+4e2d}\N{U+83ef}\N{U+4eba}\N{U+6c11}\N{U+5171}\N{U+548c}\N{U+570b}\N{U+9999}\N{U+6e2f}\N{U+7279}\N{U+5225}\N{U+884c}\N{U+653f}\N{U+5340}" => 1,
    "\N{U+a188}\N{U+a320}\N{U+a259}" => 1,
    "\N{U+a188}\N{U+a320}\N{U+a259} \N{U+a34f}\N{U+a1e9}" => 1,
    "\N{U+a559}\N{U+a524}" => 1,
    "\N{U+a559}\N{U+a524} \N{U+a55e}\N{U+a524}\N{U+a52b}\N{U+a569} Vaii" => 1,
    "\N{U+d55c}\N{U+ad6d}\N{U+c5b4}" => 1,
    "\N{U+d55c}\N{U+ad6d}\N{U+c5b4} \N{U+b300}\N{U+d55c}\N{U+bbfc}\N{U+ad6d}" => 1,
    "\N{U+d55c}\N{U+ad6d}\N{U+c5b4} \N{U+c870}\N{U+c120}\N{U+bbfc}\N{U+c8fc}\N{U+c8fc}\N{U+c758}\N{U+c778}\N{U+bbfc}\N{U+acf5}\N{U+d654}\N{U+ad6d}" => 1
  );
  ### :end NativeNames:
  #>>>
  
  #<<<
  ### :start ISO639Aliases:
  our %ISO639Aliases = (
    afr => "af",
    "afr-NA" => "af-NA",
    "afr-ZA" => "af-ZA",
    aka => "ak",
    "aka-GH" => "ak-GH",
    alb => "sq",
    "alb-AL" => "sq-AL",
    "alb-MK" => "sq-MK",
    "alb-XK" => "sq-XK",
    amh => "am",
    "amh-ET" => "am-ET",
    ara => "ar",
    "ara-001" => "ar-001",
    "ara-AE" => "ar-AE",
    "ara-BH" => "ar-BH",
    "ara-DJ" => "ar-DJ",
    "ara-DZ" => "ar-DZ",
    "ara-EG" => "ar-EG",
    "ara-EH" => "ar-EH",
    "ara-ER" => "ar-ER",
    "ara-IL" => "ar-IL",
    "ara-IQ" => "ar-IQ",
    "ara-JO" => "ar-JO",
    "ara-KM" => "ar-KM",
    "ara-KW" => "ar-KW",
    "ara-LB" => "ar-LB",
    "ara-LY" => "ar-LY",
    "ara-MA" => "ar-MA",
    "ara-MR" => "ar-MR",
    "ara-OM" => "ar-OM",
    "ara-PS" => "ar-PS",
    "ara-QA" => "ar-QA",
    "ara-SA" => "ar-SA",
    "ara-SD" => "ar-SD",
    "ara-SO" => "ar-SO",
    "ara-SS" => "ar-SS",
    "ara-SY" => "ar-SY",
    "ara-TD" => "ar-TD",
    "ara-TN" => "ar-TN",
    "ara-YE" => "ar-YE",
    arm => "hy",
    "arm-AM" => "hy-AM",
    asm => "as",
    "asm-IN" => "as-IN",
    aze => "az-Latn",
    "aze-Cyrl-AZ" => "az-Cyrl-AZ",
    "aze-Latn-AZ" => "az-Latn-AZ",
    bam => "bm",
    "bam-ML" => "bm-ML",
    baq => "eu",
    "baq-ES" => "eu-ES",
    bel => "be",
    "bel-BY" => "be-BY",
    ben => "bn",
    "ben-BD" => "bn-BD",
    "ben-IN" => "bn-IN",
    bos => "bs-Latn",
    "bos-Cyrl-BA" => "bs-Cyrl-BA",
    "bos-Latn-BA" => "bs-Latn-BA",
    bre => "br",
    "bre-FR" => "br-FR",
    bul => "bg",
    "bul-BG" => "bg-BG",
    bur => "my",
    "bur-MM" => "my-MM",
    cat => "ca",
    "cat-AD" => "ca-AD",
    "cat-ES" => "ca-ES",
    "cat-ES-VALENCIA" => "ca-ES-VALENCIA",
    "cat-FR" => "ca-FR",
    "cat-IT" => "ca-IT",
    che => "ce",
    "che-RU" => "ce-RU",
    chi => "zh-Hant",
    "chi-Hans-CN" => "zh-Hans-CN",
    "chi-Hans-HK" => "zh-Hans-HK",
    "chi-Hans-MO" => "zh-Hans-MO",
    "chi-Hans-SG" => "zh-Hans-SG",
    "chi-Hant-HK" => "zh-Hant-HK",
    "chi-Hant-MO" => "zh-Hant-MO",
    "chi-Hant-TW" => "zh-Hant-TW",
    chu => "cu",
    "chu-RU" => "cu-RU",
    cor => "kw",
    "cor-GB" => "kw-GB",
    cze => "cs",
    "cze-CZ" => "cs-CZ",
    dan => "da",
    "dan-DK" => "da-DK",
    "dan-GL" => "da-GL",
    dut => "nl",
    "dut-AW" => "nl-AW",
    "dut-BE" => "nl-BE",
    "dut-BQ" => "nl-BQ",
    "dut-CW" => "nl-CW",
    "dut-NL" => "nl-NL",
    "dut-SR" => "nl-SR",
    "dut-SX" => "nl-SX",
    dzo => "dz",
    "dzo-BT" => "dz-BT",
    eng => "en",
    "eng-001" => "en-001",
    "eng-150" => "en-150",
    "eng-AG" => "en-AG",
    "eng-AI" => "en-AI",
    "eng-AS" => "en-AS",
    "eng-AT" => "en-AT",
    "eng-AU" => "en-AU",
    "eng-BB" => "en-BB",
    "eng-BE" => "en-BE",
    "eng-BI" => "en-BI",
    "eng-BM" => "en-BM",
    "eng-BS" => "en-BS",
    "eng-BW" => "en-BW",
    "eng-BZ" => "en-BZ",
    "eng-CA" => "en-CA",
    "eng-CC" => "en-CC",
    "eng-CH" => "en-CH",
    "eng-CK" => "en-CK",
    "eng-CM" => "en-CM",
    "eng-CX" => "en-CX",
    "eng-CY" => "en-CY",
    "eng-DE" => "en-DE",
    "eng-DG" => "en-DG",
    "eng-DK" => "en-DK",
    "eng-DM" => "en-DM",
    "eng-ER" => "en-ER",
    "eng-FI" => "en-FI",
    "eng-FJ" => "en-FJ",
    "eng-FK" => "en-FK",
    "eng-FM" => "en-FM",
    "eng-GB" => "en-GB",
    "eng-GD" => "en-GD",
    "eng-GG" => "en-GG",
    "eng-GH" => "en-GH",
    "eng-GI" => "en-GI",
    "eng-GM" => "en-GM",
    "eng-GU" => "en-GU",
    "eng-GY" => "en-GY",
    "eng-HK" => "en-HK",
    "eng-IE" => "en-IE",
    "eng-IL" => "en-IL",
    "eng-IM" => "en-IM",
    "eng-IN" => "en-IN",
    "eng-IO" => "en-IO",
    "eng-JE" => "en-JE",
    "eng-JM" => "en-JM",
    "eng-KE" => "en-KE",
    "eng-KI" => "en-KI",
    "eng-KN" => "en-KN",
    "eng-KY" => "en-KY",
    "eng-LC" => "en-LC",
    "eng-LR" => "en-LR",
    "eng-LS" => "en-LS",
    "eng-MG" => "en-MG",
    "eng-MH" => "en-MH",
    "eng-MO" => "en-MO",
    "eng-MP" => "en-MP",
    "eng-MS" => "en-MS",
    "eng-MT" => "en-MT",
    "eng-MU" => "en-MU",
    "eng-MW" => "en-MW",
    "eng-MY" => "en-MY",
    "eng-NA" => "en-NA",
    "eng-NF" => "en-NF",
    "eng-NG" => "en-NG",
    "eng-NL" => "en-NL",
    "eng-NR" => "en-NR",
    "eng-NU" => "en-NU",
    "eng-NZ" => "en-NZ",
    "eng-PG" => "en-PG",
    "eng-PH" => "en-PH",
    "eng-PK" => "en-PK",
    "eng-PN" => "en-PN",
    "eng-PR" => "en-PR",
    "eng-PW" => "en-PW",
    "eng-RW" => "en-RW",
    "eng-SB" => "en-SB",
    "eng-SC" => "en-SC",
    "eng-SD" => "en-SD",
    "eng-SE" => "en-SE",
    "eng-SG" => "en-SG",
    "eng-SH" => "en-SH",
    "eng-SI" => "en-SI",
    "eng-SL" => "en-SL",
    "eng-SS" => "en-SS",
    "eng-SX" => "en-SX",
    "eng-SZ" => "en-SZ",
    "eng-TC" => "en-TC",
    "eng-TK" => "en-TK",
    "eng-TO" => "en-TO",
    "eng-TT" => "en-TT",
    "eng-TV" => "en-TV",
    "eng-TZ" => "en-TZ",
    "eng-UG" => "en-UG",
    "eng-UM" => "en-UM",
    "eng-US" => "en-US",
    "eng-US-POSIX" => "en-US-POSIX",
    "eng-VC" => "en-VC",
    "eng-VG" => "en-VG",
    "eng-VI" => "en-VI",
    "eng-VU" => "en-VU",
    "eng-WS" => "en-WS",
    "eng-ZA" => "en-ZA",
    "eng-ZM" => "en-ZM",
    "eng-ZW" => "en-ZW",
    epo => "eo",
    "epo-001" => "eo-001",
    est => "et",
    "est-EE" => "et-EE",
    ewe => "ee",
    "ewe-GH" => "ee-GH",
    "ewe-TG" => "ee-TG",
    fao => "fo",
    "fao-DK" => "fo-DK",
    "fao-FO" => "fo-FO",
    fin => "fi",
    "fin-FI" => "fi-FI",
    fre => "fr",
    "fre-BE" => "fr-BE",
    "fre-BF" => "fr-BF",
    "fre-BI" => "fr-BI",
    "fre-BJ" => "fr-BJ",
    "fre-BL" => "fr-BL",
    "fre-CA" => "fr-CA",
    "fre-CD" => "fr-CD",
    "fre-CF" => "fr-CF",
    "fre-CG" => "fr-CG",
    "fre-CH" => "fr-CH",
    "fre-CI" => "fr-CI",
    "fre-CM" => "fr-CM",
    "fre-DJ" => "fr-DJ",
    "fre-DZ" => "fr-DZ",
    "fre-FR" => "fr-FR",
    "fre-GA" => "fr-GA",
    "fre-GF" => "fr-GF",
    "fre-GN" => "fr-GN",
    "fre-GP" => "fr-GP",
    "fre-GQ" => "fr-GQ",
    "fre-HT" => "fr-HT",
    "fre-KM" => "fr-KM",
    "fre-LU" => "fr-LU",
    "fre-MA" => "fr-MA",
    "fre-MC" => "fr-MC",
    "fre-MF" => "fr-MF",
    "fre-MG" => "fr-MG",
    "fre-ML" => "fr-ML",
    "fre-MQ" => "fr-MQ",
    "fre-MR" => "fr-MR",
    "fre-MU" => "fr-MU",
    "fre-NC" => "fr-NC",
    "fre-NE" => "fr-NE",
    "fre-PF" => "fr-PF",
    "fre-PM" => "fr-PM",
    "fre-RE" => "fr-RE",
    "fre-RW" => "fr-RW",
    "fre-SC" => "fr-SC",
    "fre-SN" => "fr-SN",
    "fre-SY" => "fr-SY",
    "fre-TD" => "fr-TD",
    "fre-TG" => "fr-TG",
    "fre-TN" => "fr-TN",
    "fre-VU" => "fr-VU",
    "fre-WF" => "fr-WF",
    "fre-YT" => "fr-YT",
    fry => "fy",
    "fry-NL" => "fy-NL",
    ful => "ff",
    "ful-CM" => "ff-CM",
    "ful-GN" => "ff-GN",
    "ful-MR" => "ff-MR",
    "ful-SN" => "ff-SN",
    geo => "ka",
    "geo-GE" => "ka-GE",
    ger => "de",
    "ger-AT" => "de-AT",
    "ger-BE" => "de-BE",
    "ger-CH" => "de-CH",
    "ger-DE" => "de-DE",
    "ger-LI" => "de-LI",
    "ger-LU" => "de-LU",
    gla => "gd",
    "gla-GB" => "gd-GB",
    gle => "ga",
    "gle-IE" => "ga-IE",
    glg => "gl",
    "glg-ES" => "gl-ES",
    glv => "gv",
    "glv-IM" => "gv-IM",
    gre => "el",
    "gre-CY" => "el-CY",
    "gre-GR" => "el-GR",
    guj => "gu",
    "guj-IN" => "gu-IN",
    hau => "ha",
    "hau-GH" => "ha-GH",
    "hau-NE" => "ha-NE",
    "hau-NG" => "ha-NG",
    heb => "he",
    "heb-IL" => "he-IL",
    hin => "hi",
    "hin-IN" => "hi-IN",
    hrv => "hr",
    "hrv-BA" => "hr-BA",
    "hrv-HR" => "hr-HR",
    hun => "hu",
    "hun-HU" => "hu-HU",
    ibo => "ig",
    "ibo-NG" => "ig-NG",
    ice => "is",
    "ice-IS" => "is-IS",
    iii => "ii",
    "iii-CN" => "ii-CN",
    ind => "id",
    "ind-ID" => "id-ID",
    ita => "it",
    "ita-CH" => "it-CH",
    "ita-IT" => "it-IT",
    "ita-SM" => "it-SM",
    jpn => "ja",
    "jpn-JP" => "ja-JP",
    kal => "kl",
    "kal-GL" => "kl-GL",
    kan => "kn",
    "kan-IN" => "kn-IN",
    kas => "ks",
    "kas-IN" => "ks-IN",
    kaz => "kk",
    "kaz-KZ" => "kk-KZ",
    khm => "km",
    "khm-KH" => "km-KH",
    kik => "ki",
    "kik-KE" => "ki-KE",
    kin => "rw",
    "kin-RW" => "rw-RW",
    kir => "ky",
    "kir-KG" => "ky-KG",
    kor => "ko",
    "kor-KP" => "ko-KP",
    "kor-KR" => "ko-KR",
    lao => "lo",
    "lao-LA" => "lo-LA",
    lav => "lv",
    "lav-LV" => "lv-LV",
    lin => "ln",
    "lin-AO" => "ln-AO",
    "lin-CD" => "ln-CD",
    "lin-CF" => "ln-CF",
    "lin-CG" => "ln-CG",
    lit => "lt",
    "lit-LT" => "lt-LT",
    ltz => "lb",
    "ltz-LU" => "lb-LU",
    lub => "lu",
    "lub-CD" => "lu-CD",
    lug => "lg",
    "lug-UG" => "lg-UG",
    mac => "mk",
    "mac-MK" => "mk-MK",
    mal => "ml",
    "mal-IN" => "ml-IN",
    mar => "mr",
    "mar-IN" => "mr-IN",
    may => "ms",
    "may-BN" => "ms-BN",
    "may-MY" => "ms-MY",
    "may-SG" => "ms-SG",
    mlg => "mg",
    "mlg-MG" => "mg-MG",
    mlt => "mt",
    "mlt-MT" => "mt-MT",
    mon => "mn",
    "mon-MN" => "mn-MN",
    nde => "nd",
    "nde-ZW" => "nd-ZW",
    nep => "ne",
    "nep-IN" => "ne-IN",
    "nep-NP" => "ne-NP",
    nno => "nn",
    "nno-NO" => "nn-NO",
    nob => "nb",
    "nob-NO" => "nb-NO",
    "nob-SJ" => "nb-SJ",
    ori => "or",
    "ori-IN" => "or-IN",
    orm => "om",
    "orm-ET" => "om-ET",
    "orm-KE" => "om-KE",
    oss => "os",
    "oss-GE" => "os-GE",
    "oss-RU" => "os-RU",
    pan => "pa-Guru",
    "pan-Arab-PK" => "pa-Arab-PK",
    "pan-Guru-IN" => "pa-Guru-IN",
    per => "fa",
    "per-AF" => "fa-AF",
    "per-IR" => "fa-IR",
    pol => "pl",
    "pol-PL" => "pl-PL",
    por => "pt",
    "por-AO" => "pt-AO",
    "por-BR" => "pt-BR",
    "por-CH" => "pt-CH",
    "por-CV" => "pt-CV",
    "por-GQ" => "pt-GQ",
    "por-GW" => "pt-GW",
    "por-LU" => "pt-LU",
    "por-MO" => "pt-MO",
    "por-MZ" => "pt-MZ",
    "por-PT" => "pt-PT",
    "por-ST" => "pt-ST",
    "por-TL" => "pt-TL",
    pus => "ps",
    "pus-AF" => "ps-AF",
    que => "qu",
    "que-BO" => "qu-BO",
    "que-EC" => "qu-EC",
    "que-PE" => "qu-PE",
    roh => "rm",
    "roh-CH" => "rm-CH",
    rum => "ro",
    "rum-MD" => "ro-MD",
    "rum-RO" => "ro-RO",
    run => "rn",
    "run-BI" => "rn-BI",
    rus => "ru",
    "rus-BY" => "ru-BY",
    "rus-KG" => "ru-KG",
    "rus-KZ" => "ru-KZ",
    "rus-MD" => "ru-MD",
    "rus-RU" => "ru-RU",
    "rus-UA" => "ru-UA",
    sag => "sg",
    "sag-CF" => "sg-CF",
    sin => "si",
    "sin-LK" => "si-LK",
    slo => "sk",
    "slo-SK" => "sk-SK",
    slv => "sl",
    "slv-SI" => "sl-SI",
    sme => "se",
    "sme-FI" => "se-FI",
    "sme-NO" => "se-NO",
    "sme-SE" => "se-SE",
    sna => "sn",
    "sna-ZW" => "sn-ZW",
    som => "so",
    "som-DJ" => "so-DJ",
    "som-ET" => "so-ET",
    "som-KE" => "so-KE",
    "som-SO" => "so-SO",
    spa => "es",
    "spa-419" => "es-419",
    "spa-AR" => "es-AR",
    "spa-BO" => "es-BO",
    "spa-BR" => "es-BR",
    "spa-CL" => "es-CL",
    "spa-CO" => "es-CO",
    "spa-CR" => "es-CR",
    "spa-CU" => "es-CU",
    "spa-DO" => "es-DO",
    "spa-EA" => "es-EA",
    "spa-EC" => "es-EC",
    "spa-ES" => "es-ES",
    "spa-GQ" => "es-GQ",
    "spa-GT" => "es-GT",
    "spa-HN" => "es-HN",
    "spa-IC" => "es-IC",
    "spa-MX" => "es-MX",
    "spa-NI" => "es-NI",
    "spa-PA" => "es-PA",
    "spa-PE" => "es-PE",
    "spa-PH" => "es-PH",
    "spa-PR" => "es-PR",
    "spa-PY" => "es-PY",
    "spa-SV" => "es-SV",
    "spa-US" => "es-US",
    "spa-UY" => "es-UY",
    "spa-VE" => "es-VE",
    srp => "sr-Latn",
    "srp-Cyrl-BA" => "sr-Cyrl-BA",
    "srp-Cyrl-ME" => "sr-Cyrl-ME",
    "srp-Cyrl-RS" => "sr-Cyrl-RS",
    "srp-Cyrl-XK" => "sr-Cyrl-XK",
    "srp-Latn-BA" => "sr-Latn-BA",
    "srp-Latn-ME" => "sr-Latn-ME",
    "srp-Latn-RS" => "sr-Latn-RS",
    "srp-Latn-XK" => "sr-Latn-XK",
    swa => "sw",
    "swa-CD" => "sw-CD",
    "swa-KE" => "sw-KE",
    "swa-TZ" => "sw-TZ",
    "swa-UG" => "sw-UG",
    swe => "sv",
    "swe-AX" => "sv-AX",
    "swe-FI" => "sv-FI",
    "swe-SE" => "sv-SE",
    tam => "ta",
    "tam-IN" => "ta-IN",
    "tam-LK" => "ta-LK",
    "tam-MY" => "ta-MY",
    "tam-SG" => "ta-SG",
    tel => "te",
    "tel-IN" => "te-IN",
    tha => "th",
    "tha-TH" => "th-TH",
    tib => "bo",
    "tib-CN" => "bo-CN",
    "tib-IN" => "bo-IN",
    tir => "ti",
    "tir-ER" => "ti-ER",
    "tir-ET" => "ti-ET",
    ton => "to",
    "ton-TO" => "to-TO",
    tuk => "tk",
    "tuk-TM" => "tk-TM",
    tur => "tr",
    "tur-CY" => "tr-CY",
    "tur-TR" => "tr-TR",
    uig => "ug",
    "uig-CN" => "ug-CN",
    ukr => "uk",
    "ukr-UA" => "uk-UA",
    urd => "ur",
    "urd-IN" => "ur-IN",
    "urd-PK" => "ur-PK",
    uzb => "uz-Latn",
    "uzb-Arab-AF" => "uz-Arab-AF",
    "uzb-Cyrl-UZ" => "uz-Cyrl-UZ",
    "uzb-Latn-UZ" => "uz-Latn-UZ",
    vie => "vi",
    "vie-VN" => "vi-VN",
    vol => "vo",
    "vol-001" => "vo-001",
    wel => "cy",
    "wel-GB" => "cy-GB",
    yid => "yi",
    "yid-001" => "yi-001",
    yor => "yo",
    "yor-BJ" => "yo-BJ",
    "yor-NG" => "yo-NG",
    zul => "zu",
    "zul-ZA" => "zu-ZA"
  );
  ### :end ISO639Aliases:
  #>>>
  
  #<<<
  ### :start LocaleData:
  my %LocaleData = (
    ar => {
      am_pm_abbreviated => [
        "\N{U+0635}",
        "\N{U+0645}"
      ],
      available_formats => {
        E => "ccc",
        EHm => "E HH:mm",
        EHms => "E HH:mm:ss",
        Ed => "E\N{U+060c} d",
        Ehm => "E h:mm a",
        Ehms => "E h:mm:ss a",
        Gy => "y G",
        GyMMM => "MMM y G",
        GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
        GyMMMd => "d MMM\N{U+060c} y G",
        H => "HH",
        Hm => "HH:mm",
        Hms => "HH:mm:ss",
        Hmsv => "HH:mm:ss v",
        Hmv => "HH:mm v",
        M => "L",
        MEd => "E\N{U+060c} d/M",
        MMM => "LLL",
        MMMEd => "E\N{U+060c} d MMM",
        MMMMEd => "E\N{U+060c} d MMMM",
        MMMMd => "d MMMM",
        MMMd => "d MMM",
        MMdd => "dd\N{U+200f}/MM",
        Md => "d/\N{U+200f}M",
        d => "d",
        h => "h a",
        hm => "h:mm a",
        hms => "h:mm:ss a",
        hmsv => "h:mm:ss a v",
        hmv => "h:mm a v",
        ms => "mm:ss",
        y => "y",
        yM => "M\N{U+200f}/y",
        yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
        yMM => "MM\N{U+200f}/y",
        yMMM => "MMM y",
        yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
        yMMMM => "MMMM y",
        yMMMd => "d MMM\N{U+060c} y",
        yMd => "d\N{U+200f}/M\N{U+200f}/y",
        yQQQ => "QQQ y",
        yQQQQ => "QQQQ y"
      },
      code => "ar",
      date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
      date_format_long => "d MMMM\N{U+060c} y",
      date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
      date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
      datetime_format_full => "{1} {0}",
      datetime_format_long => "{1} {0}",
      datetime_format_medium => "{1} {0}",
      datetime_format_short => "{1} {0}",
      day_format_abbreviated => [
        "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
        "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
        "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
        "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
        "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
        "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
        "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
      ],
      day_format_narrow => [
        "\N{U+0646}",
        "\N{U+062b}",
        "\N{U+0631}",
        "\N{U+062e}",
        "\N{U+062c}",
        "\N{U+0633}",
        "\N{U+062d}"
      ],
      day_format_wide => [
        "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
        "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
        "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
        "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
        "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
        "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
        "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
      ],
      day_stand_alone_abbreviated => [
        "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
        "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
        "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
        "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
        "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
        "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
        "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
      ],
      day_stand_alone_narrow => [
        "\N{U+0646}",
        "\N{U+062b}",
        "\N{U+0631}",
        "\N{U+062e}",
        "\N{U+062c}",
        "\N{U+0633}",
        "\N{U+062d}"
      ],
      day_stand_alone_wide => [
        "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
        "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
        "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
        "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
        "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
        "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
        "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
      ],
      era_abbreviated => [
        "\N{U+0642}.\N{U+0645}",
        "\N{U+0645}"
      ],
      era_narrow => [
        "\N{U+0642}.\N{U+0645}",
        "\N{U+0645}"
      ],
      era_wide => [
        "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
        "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
      ],
      first_day_of_week => 1,
      glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
      glibc_date_format => "%m/%d/%y",
      glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
      glibc_time_12_format => "%I:%M:%S %p",
      glibc_time_format => "%H:%M:%S",
      language => "Arabic",
      month_format_abbreviated => [
        "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
        "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
        "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
        "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
        "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
        "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
        "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
        "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
        "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
        "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
        "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
        "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
      ],
      month_format_narrow => [
        "\N{U+064a}",
        "\N{U+0641}",
        "\N{U+0645}",
        "\N{U+0623}",
        "\N{U+0648}",
        "\N{U+0646}",
        "\N{U+0644}",
        "\N{U+063a}",
        "\N{U+0633}",
        "\N{U+0643}",
        "\N{U+0628}",
        "\N{U+062f}"
      ],
      month_format_wide => [
        "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
        "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
        "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
        "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
        "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
        "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
        "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
        "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
        "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
        "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
        "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
        "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
      ],
      month_stand_alone_abbreviated => [
        "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
        "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
        "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
        "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
        "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
        "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
        "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
        "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
        "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
        "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
        "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
        "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
      ],
      month_stand_alone_narrow => [
        "\N{U+064a}",
        "\N{U+0641}",
        "\N{U+0645}",
        "\N{U+0623}",
        "\N{U+0648}",
        "\N{U+0646}",
        "\N{U+0644}",
        "\N{U+063a}",
        "\N{U+0633}",
        "\N{U+0643}",
        "\N{U+0628}",
        "\N{U+062f}"
      ],
      month_stand_alone_wide => [
        "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
        "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
        "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
        "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
        "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
        "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
        "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
        "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
        "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
        "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
        "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
        "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
      ],
      name => "Arabic",
      native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
      native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
      native_script => undef,
      native_territory => undef,
      native_variant => undef,
      quarter_format_abbreviated => [
        "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
        "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
        "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
        "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
      ],
      quarter_format_narrow => [
        "\N{U+0661}",
        "\N{U+0662}",
        "\N{U+0663}",
        "\N{U+0664}"
      ],
      quarter_format_wide => [
        "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
        "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
        "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
        "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
      ],
      quarter_stand_alone_abbreviated => [
        "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
        "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
        "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
        "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
      ],
      quarter_stand_alone_narrow => [
        "\N{U+0661}",
        "\N{U+0662}",
        "\N{U+0663}",
        "\N{U+0664}"
      ],
      quarter_stand_alone_wide => [
        "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
        "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
        "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
        "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
      ],
      script => undef,
      territory => undef,
      time_format_full => "h:mm:ss a zzzz",
      time_format_long => "h:mm:ss a z",
      time_format_medium => "h:mm:ss a",
      time_format_short => "h:mm a",
      variant => undef,
      version => 29
    },
    en => {
      am_pm_abbreviated => [
        "AM",
        "PM"
      ],
      available_formats => {
        E => "ccc",
        EHm => "E HH:mm",
        EHms => "E HH:mm:ss",
        Ed => "d E",
        Ehm => "E h:mm a",
        Ehms => "E h:mm:ss a",
        Gy => "y G",
        GyMMM => "MMM y G",
        GyMMMEd => "E, MMM d, y G",
        GyMMMd => "MMM d, y G",
        H => "HH",
        Hm => "HH:mm",
        Hms => "HH:mm:ss",
        Hmsv => "HH:mm:ss v",
        Hmv => "HH:mm v",
        M => "L",
        MEd => "E, M/d",
        MMM => "LLL",
        MMMEd => "E, MMM d",
        MMMMd => "MMMM d",
        MMMd => "MMM d",
        Md => "M/d",
        d => "d",
        h => "h a",
        hm => "h:mm a",
        hms => "h:mm:ss a",
        hmsv => "h:mm:ss a v",
        hmv => "h:mm a v",
        ms => "mm:ss",
        y => "y",
        yM => "M/y",
        yMEd => "E, M/d/y",
        yMMM => "MMM y",
        yMMMEd => "E, MMM d, y",
        yMMMM => "MMMM y",
        yMMMd => "MMM d, y",
        yMd => "M/d/y",
        yQQQ => "QQQ y",
        yQQQQ => "QQQQ y"
      },
      code => "en",
      date_format_full => "EEEE, MMMM d, y",
      date_format_long => "MMMM d, y",
      date_format_medium => "MMM d, y",
      date_format_short => "M/d/yy",
      datetime_format_full => "{1} 'at' {0}",
      datetime_format_long => "{1} 'at' {0}",
      datetime_format_medium => "{1}, {0}",
      datetime_format_short => "{1}, {0}",
      day_format_abbreviated => [
        "Mon",
        "Tue",
        "Wed",
        "Thu",
        "Fri",
        "Sat",
        "Sun"
      ],
      day_format_narrow => [
        "M",
        "T",
        "W",
        "T",
        "F",
        "S",
        "S"
      ],
      day_format_wide => [
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday",
        "Sunday"
      ],
      day_stand_alone_abbreviated => [
        "Mon",
        "Tue",
        "Wed",
        "Thu",
        "Fri",
        "Sat",
        "Sun"
      ],
      day_stand_alone_narrow => [
        "M",
        "T",
        "W",
        "T",
        "F",
        "S",
        "S"
      ],
      day_stand_alone_wide => [
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday",
        "Sunday"
      ],
      era_abbreviated => [
        "BC",
        "AD"
      ],
      era_narrow => [
        "B",
        "A"
      ],
      era_wide => [
        "Before Christ",
        "Anno Domini"
      ],
      first_day_of_week => 1,
      glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
      glibc_date_format => "%m/%d/%y",
      glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
      glibc_time_12_format => "%I:%M:%S %p",
      glibc_time_format => "%H:%M:%S",
      language => "English",
      month_format_abbreviated => [
        "Jan",
        "Feb",
        "Mar",
        "Apr",
        "May",
        "Jun",
        "Jul",
        "Aug",
        "Sep",
        "Oct",
        "Nov",
        "Dec"
      ],
      month_format_narrow => [
        "J",
        "F",
        "M",
        "A",
        "M",
        "J",
        "J",
        "A",
        "S",
        "O",
        "N",
        "D"
      ],
      month_format_wide => [
        "January",
        "February",
        "March",
        "April",
        "May",
        "June",
        "July",
        "August",
        "September",
        "October",
        "November",
        "December"
      ],
      month_stand_alone_abbreviated => [
        "Jan",
        "Feb",
        "Mar",
        "Apr",
        "May",
        "Jun",
        "Jul",
        "Aug",
        "Sep",
        "Oct",
        "Nov",
        "Dec"
      ],
      month_stand_alone_narrow => [
        "J",
        "F",
        "M",
        "A",
        "M",
        "J",
        "J",
        "A",
        "S",
        "O",
        "N",
        "D"
      ],
      month_stand_alone_wide => [
        "January",
        "February",
        "March",
        "April",
        "May",
        "June",
        "July",
        "August",
        "September",
        "October",
        "November",
        "December"
      ],
      name => "English",
      native_language => "English",
      native_name => "English",
      native_script => undef,
      native_territory => undef,
      native_variant => undef,
      quarter_format_abbreviated => [
        "Q1",
        "Q2",
        "Q3",
        "Q4"
      ],
      quarter_format_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_format_wide => [
        "1st quarter",
        "2nd quarter",
        "3rd quarter",
        "4th quarter"
      ],
      quarter_stand_alone_abbreviated => [
        "Q1",
        "Q2",
        "Q3",
        "Q4"
      ],
      quarter_stand_alone_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_stand_alone_wide => [
        "1st quarter",
        "2nd quarter",
        "3rd quarter",
        "4th quarter"
      ],
      script => undef,
      territory => undef,
      time_format_full => "h:mm:ss a zzzz",
      time_format_long => "h:mm:ss a z",
      time_format_medium => "h:mm:ss a",
      time_format_short => "h:mm a",
      variant => undef,
      version => 29
    },
    "en-CA" => {
      am_pm_abbreviated => [
        "AM",
        "PM"
      ],
      available_formats => {
        E => "ccc",
        EHm => "E HH:mm",
        EHms => "E HH:mm:ss",
        Ed => "E d",
        Ehm => "E h:mm a",
        Ehms => "E h:mm:ss a",
        Gy => "y G",
        GyMMM => "MMM y G",
        GyMMMEd => "E, MMM d, y G",
        GyMMMd => "MMM d, y G",
        H => "HH",
        Hm => "HH:mm",
        Hms => "HH:mm:ss",
        Hmsv => "HH:mm:ss v",
        Hmv => "HH:mm v",
        M => "L",
        MEd => "E, MM-dd",
        "MEd-alt-variant" => "E, d/M",
        MMM => "LLL",
        MMMEd => "E, MMM d",
        MMMMd => "MMMM d",
        MMMd => "MMM d",
        MMdd => "MM-dd",
        "MMdd-alt-variant" => "dd/MM",
        Md => "MM-dd",
        "Md-alt-variant" => "d/M",
        d => "d",
        h => "h a",
        hm => "h:mm a",
        hms => "h:mm:ss a",
        hmsv => "h:mm:ss a v",
        hmv => "h:mm a v",
        ms => "mm:ss",
        y => "y",
        yM => "y-MM",
        "yM-alt-variant" => "M/y",
        yMEd => "E, y-MM-dd",
        "yMEd-alt-variant" => "E, d/M/y",
        yMMM => "MMM y",
        yMMMEd => "E, MMM d, y",
        yMMMM => "MMMM y",
        yMMMd => "MMM d, y",
        yMd => "y-MM-dd",
        "yMd-alt-variant" => "d/M/y",
        yQQQ => "QQQ y",
        yQQQQ => "QQQQ y"
      },
      code => "en-CA",
      date_format_full => "EEEE, MMMM d, y",
      date_format_long => "MMMM d, y",
      date_format_medium => "MMM d, y",
      date_format_short => "y-MM-dd",
      datetime_format_full => "{1} 'at' {0}",
      datetime_format_long => "{1} 'at' {0}",
      datetime_format_medium => "{1}, {0}",
      datetime_format_short => "{1}, {0}",
      day_format_abbreviated => [
        "Mon",
        "Tue",
        "Wed",
        "Thu",
        "Fri",
        "Sat",
        "Sun"
      ],
      day_format_narrow => [
        "M",
        "T",
        "W",
        "T",
        "F",
        "S",
        "S"
      ],
      day_format_wide => [
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday",
        "Sunday"
      ],
      day_stand_alone_abbreviated => [
        "Mon",
        "Tue",
        "Wed",
        "Thu",
        "Fri",
        "Sat",
        "Sun"
      ],
      day_stand_alone_narrow => [
        "M",
        "T",
        "W",
        "T",
        "F",
        "S",
        "S"
      ],
      day_stand_alone_wide => [
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday",
        "Sunday"
      ],
      era_abbreviated => [
        "BC",
        "AD"
      ],
      era_narrow => [
        "B",
        "A"
      ],
      era_wide => [
        "Before Christ",
        "Anno Domini"
      ],
      first_day_of_week => 7,
      glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
      glibc_date_format => "%d/%m/%y",
      glibc_datetime_format => "%a %d %b %Y %r %Z",
      glibc_time_12_format => "%I:%M:%S %p",
      glibc_time_format => "%r",
      language => "English",
      month_format_abbreviated => [
        "Jan",
        "Feb",
        "Mar",
        "Apr",
        "May",
        "Jun",
        "Jul",
        "Aug",
        "Sep",
        "Oct",
        "Nov",
        "Dec"
      ],
      month_format_narrow => [
        "J",
        "F",
        "M",
        "A",
        "M",
        "J",
        "J",
        "A",
        "S",
        "O",
        "N",
        "D"
      ],
      month_format_wide => [
        "January",
        "February",
        "March",
        "April",
        "May",
        "June",
        "July",
        "August",
        "September",
        "October",
        "November",
        "December"
      ],
      month_stand_alone_abbreviated => [
        "Jan",
        "Feb",
        "Mar",
        "Apr",
        "May",
        "Jun",
        "Jul",
        "Aug",
        "Sep",
        "Oct",
        "Nov",
        "Dec"
      ],
      month_stand_alone_narrow => [
        "J",
        "F",
        "M",
        "A",
        "M",
        "J",
        "J",
        "A",
        "S",
        "O",
        "N",
        "D"
      ],
      month_stand_alone_wide => [
        "January",
        "February",
        "March",
        "April",
        "May",
        "June",
        "July",
        "August",
        "September",
        "October",
        "November",
        "December"
      ],
      name => "English Canada",
      native_language => "English",
      native_name => "English Canada",
      native_script => undef,
      native_territory => "Canada",
      native_variant => undef,
      quarter_format_abbreviated => [
        "Q1",
        "Q2",
        "Q3",
        "Q4"
      ],
      quarter_format_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_format_wide => [
        "1st quarter",
        "2nd quarter",
        "3rd quarter",
        "4th quarter"
      ],
      quarter_stand_alone_abbreviated => [
        "Q1",
        "Q2",
        "Q3",
        "Q4"
      ],
      quarter_stand_alone_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_stand_alone_wide => [
        "1st quarter",
        "2nd quarter",
        "3rd quarter",
        "4th quarter"
      ],
      script => undef,
      territory => "Canada",
      time_format_full => "h:mm:ss a zzzz",
      time_format_long => "h:mm:ss a z",
      time_format_medium => "h:mm:ss a",
      time_format_short => "h:mm a",
      variant => undef,
      version => 29
    },
    "en-US" => {
      am_pm_abbreviated => [
        "AM",
        "PM"
      ],
      available_formats => {
        E => "ccc",
        EHm => "E HH:mm",
        EHms => "E HH:mm:ss",
        Ed => "d E",
        Ehm => "E h:mm a",
        Ehms => "E h:mm:ss a",
        Gy => "y G",
        GyMMM => "MMM y G",
        GyMMMEd => "E, MMM d, y G",
        GyMMMd => "MMM d, y G",
        H => "HH",
        Hm => "HH:mm",
        Hms => "HH:mm:ss",
        Hmsv => "HH:mm:ss v",
        Hmv => "HH:mm v",
        M => "L",
        MEd => "E, M/d",
        MMM => "LLL",
        MMMEd => "E, MMM d",
        MMMMd => "MMMM d",
        MMMd => "MMM d",
        Md => "M/d",
        d => "d",
        h => "h a",
        hm => "h:mm a",
        hms => "h:mm:ss a",
        hmsv => "h:mm:ss a v",
        hmv => "h:mm a v",
        ms => "mm:ss",
        y => "y",
        yM => "M/y",
        yMEd => "E, M/d/y",
        yMMM => "MMM y",
        yMMMEd => "E, MMM d, y",
        yMMMM => "MMMM y",
        yMMMd => "MMM d, y",
        yMd => "M/d/y",
        yQQQ => "QQQ y",
        yQQQQ => "QQQQ y"
      },
      code => "en-US",
      date_format_full => "EEEE, MMMM d, y",
      date_format_long => "MMMM d, y",
      date_format_medium => "MMM d, y",
      date_format_short => "M/d/yy",
      datetime_format_full => "{1} 'at' {0}",
      datetime_format_long => "{1} 'at' {0}",
      datetime_format_medium => "{1}, {0}",
      datetime_format_short => "{1}, {0}",
      day_format_abbreviated => [
        "Mon",
        "Tue",
        "Wed",
        "Thu",
        "Fri",
        "Sat",
        "Sun"
      ],
      day_format_narrow => [
        "M",
        "T",
        "W",
        "T",
        "F",
        "S",
        "S"
      ],
      day_format_wide => [
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday",
        "Sunday"
      ],
      day_stand_alone_abbreviated => [
        "Mon",
        "Tue",
        "Wed",
        "Thu",
        "Fri",
        "Sat",
        "Sun"
      ],
      day_stand_alone_narrow => [
        "M",
        "T",
        "W",
        "T",
        "F",
        "S",
        "S"
      ],
      day_stand_alone_wide => [
        "Monday",
        "Tuesday",
        "Wednesday",
        "Thursday",
        "Friday",
        "Saturday",
        "Sunday"
      ],
      era_abbreviated => [
        "BC",
        "AD"
      ],
      era_narrow => [
        "B",
        "A"
      ],
      era_wide => [
        "Before Christ",
        "Anno Domini"
      ],
      first_day_of_week => 7,
      glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
      glibc_date_format => "%m/%d/%Y",
      glibc_datetime_format => "%a %d %b %Y %r %Z",
      glibc_time_12_format => "%I:%M:%S %p",
      glibc_time_format => "%r",
      language => "English",
      month_format_abbreviated => [
        "Jan",
        "Feb",
        "Mar",
        "Apr",
        "May",
        "Jun",
        "Jul",
        "Aug",
        "Sep",
        "Oct",
        "Nov",
        "Dec"
      ],
      month_format_narrow => [
        "J",
        "F",
        "M",
        "A",
        "M",
        "J",
        "J",
        "A",
        "S",
        "O",
        "N",
        "D"
      ],
      month_format_wide => [
        "January",
        "February",
        "March",
        "April",
        "May",
        "June",
        "July",
        "August",
        "September",
        "October",
        "November",
        "December"
      ],
      month_stand_alone_abbreviated => [
        "Jan",
        "Feb",
        "Mar",
        "Apr",
        "May",
        "Jun",
        "Jul",
        "Aug",
        "Sep",
        "Oct",
        "Nov",
        "Dec"
      ],
      month_stand_alone_narrow => [
        "J",
        "F",
        "M",
        "A",
        "M",
        "J",
        "J",
        "A",
        "S",
        "O",
        "N",
        "D"
      ],
      month_stand_alone_wide => [
        "January",
        "February",
        "March",
        "April",
        "May",
        "June",
        "July",
        "August",
        "September",
        "October",
        "November",
        "December"
      ],
      name => "English United States",
      native_language => "English",
      native_name => "English United States",
      native_script => undef,
      native_territory => "United States",
      native_variant => undef,
      quarter_format_abbreviated => [
        "Q1",
        "Q2",
        "Q3",
        "Q4"
      ],
      quarter_format_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_format_wide => [
        "1st quarter",
        "2nd quarter",
        "3rd quarter",
        "4th quarter"
      ],
      quarter_stand_alone_abbreviated => [
        "Q1",
        "Q2",
        "Q3",
        "Q4"
      ],
      quarter_stand_alone_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_stand_alone_wide => [
        "1st quarter",
        "2nd quarter",
        "3rd quarter",
        "4th quarter"
      ],
      script => undef,
      territory => "United States",
      time_format_full => "h:mm:ss a zzzz",
      time_format_long => "h:mm:ss a z",
      time_format_medium => "h:mm:ss a",
      time_format_short => "h:mm a",
      variant => undef,
      version => 29
    },
    es => {
      am_pm_abbreviated => [
        "a. m.",
        "p. m."
      ],
      available_formats => {
        E => "ccc",
        EHm => "E, H:mm",
        EHms => "E, H:mm:ss",
        Ed => "E d",
        Ehm => "E, h:mm a",
        Ehms => "E, h:mm:ss a",
        Gy => "y G",
        GyMMM => "MMM y G",
        GyMMMEd => "E, d MMM y G",
        GyMMMM => "MMMM 'de' y G",
        GyMMMMEd => "E, d 'de' MMMM 'de' y G",
        GyMMMMd => "d 'de' MMMM 'de' y G",
        GyMMMd => "d MMM y G",
        H => "H",
        Hm => "H:mm",
        Hms => "H:mm:ss",
        Hmsv => "H:mm:ss v",
        Hmsvvvv => "H:mm:ss (vvvv)",
        Hmv => "H:mm v",
        M => "L",
        MEd => "E, d/M",
        MMM => "LLL",
        MMMEd => "E, d MMM",
        MMMMEd => "E, d 'de' MMMM",
        MMMMd => "d 'de' MMMM",
        MMMd => "d MMM",
        MMd => "d/M",
        MMdd => "d/M",
        Md => "d/M",
        d => "d",
        h => "h a",
        hm => "h:mm a",
        hms => "h:mm:ss a",
        hmsv => "h:mm:ss a v",
        hmsvvvv => "h:mm:ss a (vvvv)",
        hmv => "h:mm a v",
        ms => "mm:ss",
        y => "y",
        yM => "M/y",
        yMEd => "EEE, d/M/y",
        yMM => "M/y",
        yMMM => "MMM y",
        yMMMEd => "EEE, d MMM y",
        yMMMM => "MMMM 'de' y",
        yMMMMEd => "EEE, d 'de' MMMM 'de' y",
        yMMMMd => "d 'de' MMMM 'de' y",
        yMMMd => "d MMM y",
        yMd => "d/M/y",
        yQQQ => "QQQ y",
        yQQQQ => "QQQQ 'de' y"
      },
      code => "es",
      date_format_full => "EEEE, d 'de' MMMM 'de' y",
      date_format_long => "d 'de' MMMM 'de' y",
      date_format_medium => "d MMM y",
      date_format_short => "d/M/yy",
      datetime_format_full => "{1}, {0}",
      datetime_format_long => "{1}, {0}",
      datetime_format_medium => "{1} {0}",
      datetime_format_short => "{1} {0}",
      day_format_abbreviated => [
        "lun.",
        "mar.",
        "mi\N{U+00e9}.",
        "jue.",
        "vie.",
        "s\N{U+00e1}b.",
        "dom."
      ],
      day_format_narrow => [
        "L",
        "M",
        "X",
        "J",
        "V",
        "S",
        "D"
      ],
      day_format_wide => [
        "lunes",
        "martes",
        "mi\N{U+00e9}rcoles",
        "jueves",
        "viernes",
        "s\N{U+00e1}bado",
        "domingo"
      ],
      day_stand_alone_abbreviated => [
        "lun.",
        "mar.",
        "mi\N{U+00e9}.",
        "jue.",
        "vie.",
        "s\N{U+00e1}b.",
        "dom."
      ],
      day_stand_alone_narrow => [
        "L",
        "M",
        "X",
        "J",
        "V",
        "S",
        "D"
      ],
      day_stand_alone_wide => [
        "lunes",
        "martes",
        "mi\N{U+00e9}rcoles",
        "jueves",
        "viernes",
        "s\N{U+00e1}bado",
        "domingo"
      ],
      era_abbreviated => [
        "a. C.",
        "d. C."
      ],
      era_narrow => [
        "a. C.",
        "d. C."
      ],
      era_wide => [
        "antes de Cristo",
        "despu\N{U+00e9}s de Cristo"
      ],
      first_day_of_week => 1,
      glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
      glibc_date_format => "%m/%d/%y",
      glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
      glibc_time_12_format => "%I:%M:%S %p",
      glibc_time_format => "%H:%M:%S",
      language => "Spanish",
      month_format_abbreviated => [
        "ene.",
        "feb.",
        "mar.",
        "abr.",
        "may.",
        "jun.",
        "jul.",
        "ago.",
        "sept.",
        "oct.",
        "nov.",
        "dic."
      ],
      month_format_narrow => [
        "E",
        "F",
        "M",
        "A",
        "M",
        "J",
        "J",
        "A",
        "S",
        "O",
        "N",
        "D"
      ],
      month_format_wide => [
        "enero",
        "febrero",
        "marzo",
        "abril",
        "mayo",
        "junio",
        "julio",
        "agosto",
        "septiembre",
        "octubre",
        "noviembre",
        "diciembre"
      ],
      month_stand_alone_abbreviated => [
        "ene.",
        "feb.",
        "mar.",
        "abr.",
        "may.",
        "jun.",
        "jul.",
        "ago.",
        "sept.",
        "oct.",
        "nov.",
        "dic."
      ],
      month_stand_alone_narrow => [
        "E",
        "F",
        "M",
        "A",
        "M",
        "J",
        "J",
        "A",
        "S",
        "O",
        "N",
        "D"
      ],
      month_stand_alone_wide => [
        "enero",
        "febrero",
        "marzo",
        "abril",
        "mayo",
        "junio",
        "julio",
        "agosto",
        "septiembre",
        "octubre",
        "noviembre",
        "diciembre"
      ],
      name => "Spanish",
      native_language => "espa\N{U+00f1}ol",
      native_name => "espa\N{U+00f1}ol",
      native_script => undef,
      native_territory => undef,
      native_variant => undef,
      quarter_format_abbreviated => [
        "T1",
        "T2",
        "T3",
        "T4"
      ],
      quarter_format_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_format_wide => [
        "1.er trimestre",
        "2.\N{U+00ba} trimestre",
        "3.er trimestre",
        "4.\N{U+00ba} trimestre"
      ],
      quarter_stand_alone_abbreviated => [
        "T1",
        "T2",
        "T3",
        "T4"
      ],
      quarter_stand_alone_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_stand_alone_wide => [
        "1.er trimestre",
        "2.\N{U+00ba} trimestre",
        "3.er trimestre",
        "4.\N{U+00ba} trimestre"
      ],
      script => undef,
      territory => undef,
      time_format_full => "H:mm:ss (zzzz)",
      time_format_long => "H:mm:ss z",
      time_format_medium => "H:mm:ss",
      time_format_short => "H:mm",
      variant => undef,
      version => 29
    },
    "fr-FR" => {
      am_pm_abbreviated => [
        "AM",
        "PM"
      ],
      available_formats => {
        E => "E",
        EHm => "E HH:mm",
        EHms => "E HH:mm:ss",
        Ed => "E d",
        Ehm => "E h:mm a",
        Ehms => "E h:mm:ss a",
        Gy => "y G",
        GyMMM => "MMM y G",
        GyMMMEd => "E d MMM y G",
        GyMMMd => "d MMM y G",
        H => "HH 'h'",
        Hm => "HH:mm",
        Hms => "HH:mm:ss",
        Hmsv => "HH:mm:ss v",
        Hmv => "HH:mm v",
        M => "L",
        MEd => "E dd/MM",
        MMM => "LLL",
        MMMEd => "E d MMM",
        MMMMd => "d MMMM",
        MMMd => "d MMM",
        Md => "dd/MM",
        d => "d",
        h => "h a",
        hm => "h:mm a",
        hms => "h:mm:ss a",
        hmsv => "h:mm:ss a v",
        hmv => "h:mm a v",
        ms => "mm:ss",
        y => "y",
        yM => "MM/y",
        yMEd => "E dd/MM/y",
        yMMM => "MMM y",
        yMMMEd => "E d MMM y",
        yMMMM => "MMMM y",
        yMMMd => "d MMM y",
        yMd => "dd/MM/y",
        yQQQ => "QQQ y",
        yQQQQ => "QQQQ y"
      },
      code => "fr-FR",
      date_format_full => "EEEE d MMMM y",
      date_format_long => "d MMMM y",
      date_format_medium => "d MMM y",
      date_format_short => "dd/MM/y",
      datetime_format_full => "{1} '\N{U+00e0}' {0}",
      datetime_format_long => "{1} '\N{U+00e0}' {0}",
      datetime_format_medium => "{1} '\N{U+00e0}' {0}",
      datetime_format_short => "{1} {0}",
      day_format_abbreviated => [
        "lun.",
        "mar.",
        "mer.",
        "jeu.",
        "ven.",
        "sam.",
        "dim."
      ],
      day_format_narrow => [
        "L",
        "M",
        "M",
        "J",
        "V",
        "S",
        "D"
      ],
      day_format_wide => [
        "lundi",
        "mardi",
        "mercredi",
        "jeudi",
        "vendredi",
        "samedi",
        "dimanche"
      ],
      day_stand_alone_abbreviated => [
        "lun.",
        "mar.",
        "mer.",
        "jeu.",
        "ven.",
        "sam.",
        "dim."
      ],
      day_stand_alone_narrow => [
        "L",
        "M",
        "M",
        "J",
        "V",
        "S",
        "D"
      ],
      day_stand_alone_wide => [
        "lundi",
        "mardi",
        "mercredi",
        "jeudi",
        "vendredi",
        "samedi",
        "dimanche"
      ],
      era_abbreviated => [
        "av. J.-C.",
        "ap. J.-C."
      ],
      era_narrow => [
        "av. J.-C.",
        "ap. J.-C."
      ],
      era_wide => [
        "avant J\N{U+00e9}sus-Christ",
        "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
      ],
      first_day_of_week => 1,
      glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
      glibc_date_format => "%d/%m/%Y",
      glibc_datetime_format => "%a %d %b %Y %T %Z",
      glibc_time_12_format => "%I:%M:%S %p",
      glibc_time_format => "%T",
      language => "French",
      month_format_abbreviated => [
        "janv.",
        "f\N{U+00e9}vr.",
        "mars",
        "avr.",
        "mai",
        "juin",
        "juil.",
        "ao\N{U+00fb}t",
        "sept.",
        "oct.",
        "nov.",
        "d\N{U+00e9}c."
      ],
      month_format_narrow => [
        "J",
        "F",
        "M",
        "A",
        "M",
        "J",
        "J",
        "A",
        "S",
        "O",
        "N",
        "D"
      ],
      month_format_wide => [
        "janvier",
        "f\N{U+00e9}vrier",
        "mars",
        "avril",
        "mai",
        "juin",
        "juillet",
        "ao\N{U+00fb}t",
        "septembre",
        "octobre",
        "novembre",
        "d\N{U+00e9}cembre"
      ],
      month_stand_alone_abbreviated => [
        "janv.",
        "f\N{U+00e9}vr.",
        "mars",
        "avr.",
        "mai",
        "juin",
        "juil.",
        "ao\N{U+00fb}t",
        "sept.",
        "oct.",
        "nov.",
        "d\N{U+00e9}c."
      ],
      month_stand_alone_narrow => [
        "J",
        "F",
        "M",
        "A",
        "M",
        "J",
        "J",
        "A",
        "S",
        "O",
        "N",
        "D"
      ],
      month_stand_alone_wide => [
        "janvier",
        "f\N{U+00e9}vrier",
        "mars",
        "avril",
        "mai",
        "juin",
        "juillet",
        "ao\N{U+00fb}t",
        "septembre",
        "octobre",
        "novembre",
        "d\N{U+00e9}cembre"
      ],
      name => "French France",
      native_language => "fran\N{U+00e7}ais",
      native_name => "fran\N{U+00e7}ais France",
      native_script => undef,
      native_territory => "France",
      native_variant => undef,
      quarter_format_abbreviated => [
        "T1",
        "T2",
        "T3",
        "T4"
      ],
      quarter_format_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_format_wide => [
        "1er trimestre",
        "2e trimestre",
        "3e trimestre",
        "4e trimestre"
      ],
      quarter_stand_alone_abbreviated => [
        "T1",
        "T2",
        "T3",
        "T4"
      ],
      quarter_stand_alone_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_stand_alone_wide => [
        "1er trimestre",
        "2e trimestre",
        "3e trimestre",
        "4e trimestre"
      ],
      script => undef,
      territory => "France",
      time_format_full => "HH:mm:ss zzzz",
      time_format_long => "HH:mm:ss z",
      time_format_medium => "HH:mm:ss",
      time_format_short => "HH:mm",
      variant => undef,
      version => 29
    },
    hi => {
      am_pm_abbreviated => [
        "\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
        "\N{U+0905}\N{U+092a}\N{U+0930}"
      ],
      available_formats => {
        E => "ccc",
        EHm => "E HH:mm",
        EHms => "E HH:mm:ss",
        Ed => "E d",
        Ehm => "E h:mm a",
        Ehms => "E h:mm:ss a",
        Gy => "y G",
        GyMMM => "MMM G y",
        GyMMMEd => "E, d MMM y G",
        GyMMMd => "d MMM y G",
        H => "HH",
        Hm => "HH:mm",
        Hms => "HH:mm:ss",
        Hmsv => "HH:mm:ss v",
        Hmv => "HH:mm v",
        M => "L",
        MEd => "E, d/M",
        MMM => "LLL",
        MMMEd => "E, d MMM",
        MMMMEd => "E, d MMMM",
        MMMMd => "d MMMM",
        MMMd => "d MMM",
        MMdd => "dd/MM",
        Md => "d/M",
        d => "d",
        h => "h a",
        hm => "h:mm a",
        hms => "h:mm:ss a",
        hmsv => "h:mm:ss a v",
        hmv => "h:mm a v",
        ms => "mm:ss",
        y => "y",
        yM => "M/y",
        yMEd => "E, d/M/y",
        yMM => "MM/y",
        yMMM => "MMM y",
        yMMMEd => "E, d MMM y",
        yMMMM => "MMMM y",
        yMMMd => "d MMM y",
        yMMdd => "dd/MM/y",
        yMd => "d/M/y",
        yQQQ => "QQQ y",
        yQQQQ => "QQQQ y"
      },
      code => "hi",
      date_format_full => "EEEE, d MMMM y",
      date_format_long => "d MMMM y",
      date_format_medium => "dd/MM/y",
      date_format_short => "d/M/yy",
      datetime_format_full => "{1} \N{U+0915}\N{U+094b} {0}",
      datetime_format_long => "{1} \N{U+0915}\N{U+094b} {0}",
      datetime_format_medium => "{1}, {0}",
      datetime_format_short => "{1}, {0}",
      day_format_abbreviated => [
        "\N{U+0938}\N{U+094b}\N{U+092e}",
        "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0932}",
        "\N{U+092c}\N{U+0941}\N{U+0927}",
        "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}",
        "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
        "\N{U+0936}\N{U+0928}\N{U+093f}",
        "\N{U+0930}\N{U+0935}\N{U+093f}"
      ],
      day_format_narrow => [
        "\N{U+0938}\N{U+094b}",
        "\N{U+092e}\N{U+0902}",
        "\N{U+092c}\N{U+0941}",
        "\N{U+0917}\N{U+0941}",
        "\N{U+0936}\N{U+0941}",
        "\N{U+0936}",
        "\N{U+0930}"
      ],
      day_format_wide => [
        "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+0935}\N{U+093e}\N{U+0930}",
        "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0932}\N{U+0935}\N{U+093e}\N{U+0930}",
        "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+0935}\N{U+093e}\N{U+0930}",
        "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}",
        "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+0935}\N{U+093e}\N{U+0930}",
        "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}",
        "\N{U+0930}\N{U+0935}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}"
      ],
      day_stand_alone_abbreviated => [
        "\N{U+0938}\N{U+094b}\N{U+092e}",
        "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0932}",
        "\N{U+092c}\N{U+0941}\N{U+0927}",
        "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}",
        "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
        "\N{U+0936}\N{U+0928}\N{U+093f}",
        "\N{U+0930}\N{U+0935}\N{U+093f}"
      ],
      day_stand_alone_narrow => [
        "\N{U+0938}\N{U+094b}",
        "\N{U+092e}\N{U+0902}",
        "\N{U+092c}\N{U+0941}",
        "\N{U+0917}\N{U+0941}",
        "\N{U+0936}\N{U+0941}",
        "\N{U+0936}",
        "\N{U+0930}"
      ],
      day_stand_alone_wide => [
        "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+0935}\N{U+093e}\N{U+0930}",
        "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0932}\N{U+0935}\N{U+093e}\N{U+0930}",
        "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+0935}\N{U+093e}\N{U+0930}",
        "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}",
        "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+0935}\N{U+093e}\N{U+0930}",
        "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}",
        "\N{U+0930}\N{U+0935}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}"
      ],
      era_abbreviated => [
        "\N{U+0908}\N{U+0938}\N{U+093e}-\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
        "\N{U+0908}\N{U+0938}\N{U+094d}\N{U+0935}\N{U+0940}"
      ],
      era_narrow => [
        "\N{U+0908}\N{U+0938}\N{U+093e}-\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
        "\N{U+0908}\N{U+0938}\N{U+094d}\N{U+0935}\N{U+0940}"
      ],
      era_wide => [
        "\N{U+0908}\N{U+0938}\N{U+093e}-\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
        "\N{U+0908}\N{U+0938}\N{U+0935}\N{U+0940} \N{U+0938}\N{U+0928}"
      ],
      first_day_of_week => 1,
      glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
      glibc_date_format => "%m/%d/%y",
      glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
      glibc_time_12_format => "%I:%M:%S %p",
      glibc_time_format => "%H:%M:%S",
      language => "Hindi",
      month_format_abbreviated => [
        "\N{U+091c}\N{U+0928}\N{U+0970}",
        "\N{U+092b}\N{U+093c}\N{U+0930}\N{U+0970}",
        "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
        "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+0948}\N{U+0932}",
        "\N{U+092e}\N{U+0908}",
        "\N{U+091c}\N{U+0942}\N{U+0928}",
        "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0970}",
        "\N{U+0905}\N{U+0917}\N{U+0970}",
        "\N{U+0938}\N{U+093f}\N{U+0924}\N{U+0970}",
        "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+0924}\N{U+0942}\N{U+0970}",
        "\N{U+0928}\N{U+0935}\N{U+0970}",
        "\N{U+0926}\N{U+093f}\N{U+0938}\N{U+0970}"
      ],
      month_format_narrow => [
        "\N{U+091c}",
        "\N{U+092b}\N{U+093c}",
        "\N{U+092e}\N{U+093e}",
        "\N{U+0905}",
        "\N{U+092e}",
        "\N{U+091c}\N{U+0942}",
        "\N{U+091c}\N{U+0941}",
        "\N{U+0905}",
        "\N{U+0938}\N{U+093f}",
        "\N{U+0905}",
        "\N{U+0928}",
        "\N{U+0926}\N{U+093f}"
      ],
      month_format_wide => [
        "\N{U+091c}\N{U+0928}\N{U+0935}\N{U+0930}\N{U+0940}",
        "\N{U+092b}\N{U+093c}\N{U+0930}\N{U+0935}\N{U+0930}\N{U+0940}",
        "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
        "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+0948}\N{U+0932}",
        "\N{U+092e}\N{U+0908}",
        "\N{U+091c}\N{U+0942}\N{U+0928}",
        "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0908}",
        "\N{U+0905}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+0924}",
        "\N{U+0938}\N{U+093f}\N{U+0924}\N{U+0902}\N{U+092c}\N{U+0930}",
        "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+0924}\N{U+0942}\N{U+092c}\N{U+0930}",
        "\N{U+0928}\N{U+0935}\N{U+0902}\N{U+092c}\N{U+0930}",
        "\N{U+0926}\N{U+093f}\N{U+0938}\N{U+0902}\N{U+092c}\N{U+0930}"
      ],
      month_stand_alone_abbreviated => [
        "\N{U+091c}\N{U+0928}\N{U+0970}",
        "\N{U+092b}\N{U+093c}\N{U+0930}\N{U+0970}",
        "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
        "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+0948}\N{U+0932}",
        "\N{U+092e}\N{U+0908}",
        "\N{U+091c}\N{U+0942}\N{U+0928}",
        "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0970}",
        "\N{U+0905}\N{U+0917}\N{U+0970}",
        "\N{U+0938}\N{U+093f}\N{U+0924}\N{U+0970}",
        "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+0924}\N{U+0942}\N{U+0970}",
        "\N{U+0928}\N{U+0935}\N{U+0970}",
        "\N{U+0926}\N{U+093f}\N{U+0938}\N{U+0970}"
      ],
      month_stand_alone_narrow => [
        "\N{U+091c}",
        "\N{U+092b}\N{U+093c}",
        "\N{U+092e}\N{U+093e}",
        "\N{U+0905}",
        "\N{U+092e}",
        "\N{U+091c}\N{U+0942}",
        "\N{U+091c}\N{U+0941}",
        "\N{U+0905}",
        "\N{U+0938}\N{U+093f}",
        "\N{U+0905}",
        "\N{U+0928}",
        "\N{U+0926}\N{U+093f}"
      ],
      month_stand_alone_wide => [
        "\N{U+091c}\N{U+0928}\N{U+0935}\N{U+0930}\N{U+0940}",
        "\N{U+092b}\N{U+093c}\N{U+0930}\N{U+0935}\N{U+0930}\N{U+0940}",
        "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
        "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+0948}\N{U+0932}",
        "\N{U+092e}\N{U+0908}",
        "\N{U+091c}\N{U+0942}\N{U+0928}",
        "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0908}",
        "\N{U+0905}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+0924}",
        "\N{U+0938}\N{U+093f}\N{U+0924}\N{U+0902}\N{U+092c}\N{U+0930}",
        "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+0924}\N{U+0942}\N{U+092c}\N{U+0930}",
        "\N{U+0928}\N{U+0935}\N{U+0902}\N{U+092c}\N{U+0930}",
        "\N{U+0926}\N{U+093f}\N{U+0938}\N{U+0902}\N{U+092c}\N{U+0930}"
      ],
      name => "Hindi",
      native_language => "\N{U+0939}\N{U+093f}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+0940}",
      native_name => "\N{U+0939}\N{U+093f}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+0940}",
      native_script => undef,
      native_territory => undef,
      native_variant => undef,
      quarter_format_abbreviated => [
        "\N{U+0924}\N{U+093f}1",
        "\N{U+0924}\N{U+093f}2",
        "\N{U+0924}\N{U+093f}3",
        "\N{U+0924}\N{U+093f}4"
      ],
      quarter_format_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_format_wide => [
        "\N{U+092a}\N{U+0939}\N{U+0932}\N{U+0940} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
        "\N{U+0926}\N{U+0942}\N{U+0938}\N{U+0930}\N{U+0940} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
        "\N{U+0924}\N{U+0940}\N{U+0938}\N{U+0930}\N{U+0940} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
        "\N{U+091a}\N{U+094c}\N{U+0925}\N{U+0940} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}"
      ],
      quarter_stand_alone_abbreviated => [
        "\N{U+0924}\N{U+093f}1",
        "\N{U+0924}\N{U+093f}2",
        "\N{U+0924}\N{U+093f}3",
        "\N{U+0924}\N{U+093f}4"
      ],
      quarter_stand_alone_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_stand_alone_wide => [
        "\N{U+092a}\N{U+0939}\N{U+0932}\N{U+0940} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
        "\N{U+0926}\N{U+0942}\N{U+0938}\N{U+0930}\N{U+0940} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
        "\N{U+0924}\N{U+0940}\N{U+0938}\N{U+0930}\N{U+0940} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
        "\N{U+091a}\N{U+094c}\N{U+0925}\N{U+0940} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}"
      ],
      script => undef,
      territory => undef,
      time_format_full => "h:mm:ss a zzzz",
      time_format_long => "h:mm:ss a z",
      time_format_medium => "h:mm:ss a",
      time_format_short => "h:mm a",
      variant => undef,
      version => 29
    },
    "ja-JP" => {
      am_pm_abbreviated => [
        "\N{U+5348}\N{U+524d}",
        "\N{U+5348}\N{U+5f8c}"
      ],
      available_formats => {
        E => "ccc",
        EEEEd => "d\N{U+65e5}EEEE",
        EHm => "H:mm (E)",
        EHms => "H:mm:ss (E)",
        Ed => "d\N{U+65e5}(E)",
        Ehm => "aK:mm (E)",
        Ehms => "aK:mm:ss (E)",
        Gy => "Gy\N{U+5e74}",
        GyMMM => "Gy\N{U+5e74}M\N{U+6708}",
        GyMMMEEEEd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}EEEE",
        GyMMMEd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}(E)",
        GyMMMd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
        H => "H\N{U+6642}",
        Hm => "H:mm",
        Hms => "H:mm:ss",
        Hmsv => "H:mm:ss v",
        Hmv => "H:mm v",
        M => "M\N{U+6708}",
        MEEEEd => "M/dEEEE",
        MEd => "M/d(E)",
        MMM => "M\N{U+6708}",
        MMMEEEEd => "M\N{U+6708}d\N{U+65e5}EEEE",
        MMMEd => "M\N{U+6708}d\N{U+65e5}(E)",
        MMMMd => "M\N{U+6708}d\N{U+65e5}",
        MMMd => "M\N{U+6708}d\N{U+65e5}",
        Md => "M/d",
        d => "d\N{U+65e5}",
        h => "aK\N{U+6642}",
        hm => "aK:mm",
        hms => "aK:mm:ss",
        hmsv => "aK:mm:ss v",
        hmv => "aK:mm v",
        ms => "mm:ss",
        y => "y\N{U+5e74}",
        yM => "y/M",
        yMEEEEd => "y/M/dEEEE",
        yMEd => "y/M/d(E)",
        yMM => "y/MM",
        yMMM => "y\N{U+5e74}M\N{U+6708}",
        yMMMEEEEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}EEEE",
        yMMMEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}(E)",
        yMMMM => "y\N{U+5e74}M\N{U+6708}",
        yMMMd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
        yMd => "y/M/d",
        yQQQ => "y/QQQ",
        yQQQQ => "yQQQQ"
      },
      code => "ja-JP",
      date_format_full => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}EEEE",
      date_format_long => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      date_format_medium => "y/MM/dd",
      date_format_short => "y/MM/dd",
      datetime_format_full => "{1} {0}",
      datetime_format_long => "{1} {0}",
      datetime_format_medium => "{1} {0}",
      datetime_format_short => "{1} {0}",
      day_format_abbreviated => [
        "\N{U+6708}",
        "\N{U+706b}",
        "\N{U+6c34}",
        "\N{U+6728}",
        "\N{U+91d1}",
        "\N{U+571f}",
        "\N{U+65e5}"
      ],
      day_format_narrow => [
        "\N{U+6708}",
        "\N{U+706b}",
        "\N{U+6c34}",
        "\N{U+6728}",
        "\N{U+91d1}",
        "\N{U+571f}",
        "\N{U+65e5}"
      ],
      day_format_wide => [
        "\N{U+6708}\N{U+66dc}\N{U+65e5}",
        "\N{U+706b}\N{U+66dc}\N{U+65e5}",
        "\N{U+6c34}\N{U+66dc}\N{U+65e5}",
        "\N{U+6728}\N{U+66dc}\N{U+65e5}",
        "\N{U+91d1}\N{U+66dc}\N{U+65e5}",
        "\N{U+571f}\N{U+66dc}\N{U+65e5}",
        "\N{U+65e5}\N{U+66dc}\N{U+65e5}"
      ],
      day_stand_alone_abbreviated => [
        "\N{U+6708}",
        "\N{U+706b}",
        "\N{U+6c34}",
        "\N{U+6728}",
        "\N{U+91d1}",
        "\N{U+571f}",
        "\N{U+65e5}"
      ],
      day_stand_alone_narrow => [
        "\N{U+6708}",
        "\N{U+706b}",
        "\N{U+6c34}",
        "\N{U+6728}",
        "\N{U+91d1}",
        "\N{U+571f}",
        "\N{U+65e5}"
      ],
      day_stand_alone_wide => [
        "\N{U+6708}\N{U+66dc}\N{U+65e5}",
        "\N{U+706b}\N{U+66dc}\N{U+65e5}",
        "\N{U+6c34}\N{U+66dc}\N{U+65e5}",
        "\N{U+6728}\N{U+66dc}\N{U+65e5}",
        "\N{U+91d1}\N{U+66dc}\N{U+65e5}",
        "\N{U+571f}\N{U+66dc}\N{U+65e5}",
        "\N{U+65e5}\N{U+66dc}\N{U+65e5}"
      ],
      era_abbreviated => [
        "\N{U+7d00}\N{U+5143}\N{U+524d}",
        "\N{U+897f}\N{U+66a6}"
      ],
      era_narrow => [
        "BC",
        "AD"
      ],
      era_wide => [
        "\N{U+7d00}\N{U+5143}\N{U+524d}",
        "\N{U+897f}\N{U+66a6}"
      ],
      first_day_of_week => 7,
      glibc_date_1_format => "%Y\N{U+5e74} %b %e\N{U+65e5} %A %H:%M:%S %Z",
      glibc_date_format => "%Y\N{U+5e74}%m\N{U+6708}%d\N{U+65e5}",
      glibc_datetime_format => "%Y\N{U+5e74}%m\N{U+6708}%d\N{U+65e5} %H\N{U+6642}%M\N{U+5206}%S\N{U+79d2}",
      glibc_time_12_format => "%p%I\N{U+6642}%M\N{U+5206}%S\N{U+79d2}",
      glibc_time_format => "%H\N{U+6642}%M\N{U+5206}%S\N{U+79d2}",
      language => "Japanese",
      month_format_abbreviated => [
        "1\N{U+6708}",
        "2\N{U+6708}",
        "3\N{U+6708}",
        "4\N{U+6708}",
        "5\N{U+6708}",
        "6\N{U+6708}",
        "7\N{U+6708}",
        "8\N{U+6708}",
        "9\N{U+6708}",
        "10\N{U+6708}",
        "11\N{U+6708}",
        "12\N{U+6708}"
      ],
      month_format_narrow => [
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12
      ],
      month_format_wide => [
        "1\N{U+6708}",
        "2\N{U+6708}",
        "3\N{U+6708}",
        "4\N{U+6708}",
        "5\N{U+6708}",
        "6\N{U+6708}",
        "7\N{U+6708}",
        "8\N{U+6708}",
        "9\N{U+6708}",
        "10\N{U+6708}",
        "11\N{U+6708}",
        "12\N{U+6708}"
      ],
      month_stand_alone_abbreviated => [
        "1\N{U+6708}",
        "2\N{U+6708}",
        "3\N{U+6708}",
        "4\N{U+6708}",
        "5\N{U+6708}",
        "6\N{U+6708}",
        "7\N{U+6708}",
        "8\N{U+6708}",
        "9\N{U+6708}",
        "10\N{U+6708}",
        "11\N{U+6708}",
        "12\N{U+6708}"
      ],
      month_stand_alone_narrow => [
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12
      ],
      month_stand_alone_wide => [
        "1\N{U+6708}",
        "2\N{U+6708}",
        "3\N{U+6708}",
        "4\N{U+6708}",
        "5\N{U+6708}",
        "6\N{U+6708}",
        "7\N{U+6708}",
        "8\N{U+6708}",
        "9\N{U+6708}",
        "10\N{U+6708}",
        "11\N{U+6708}",
        "12\N{U+6708}"
      ],
      name => "Japanese Japan",
      native_language => "\N{U+65e5}\N{U+672c}\N{U+8a9e}",
      native_name => "\N{U+65e5}\N{U+672c}\N{U+8a9e} \N{U+65e5}\N{U+672c}",
      native_script => undef,
      native_territory => "\N{U+65e5}\N{U+672c}",
      native_variant => undef,
      quarter_format_abbreviated => [
        "Q1",
        "Q2",
        "Q3",
        "Q4"
      ],
      quarter_format_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_format_wide => [
        "\N{U+7b2c}1\N{U+56db}\N{U+534a}\N{U+671f}",
        "\N{U+7b2c}2\N{U+56db}\N{U+534a}\N{U+671f}",
        "\N{U+7b2c}3\N{U+56db}\N{U+534a}\N{U+671f}",
        "\N{U+7b2c}4\N{U+56db}\N{U+534a}\N{U+671f}"
      ],
      quarter_stand_alone_abbreviated => [
        "Q1",
        "Q2",
        "Q3",
        "Q4"
      ],
      quarter_stand_alone_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_stand_alone_wide => [
        "\N{U+7b2c}1\N{U+56db}\N{U+534a}\N{U+671f}",
        "\N{U+7b2c}2\N{U+56db}\N{U+534a}\N{U+671f}",
        "\N{U+7b2c}3\N{U+56db}\N{U+534a}\N{U+671f}",
        "\N{U+7b2c}4\N{U+56db}\N{U+534a}\N{U+671f}"
      ],
      script => undef,
      territory => "Japan",
      time_format_full => "H\N{U+6642}mm\N{U+5206}ss\N{U+79d2} zzzz",
      time_format_long => "H:mm:ss z",
      time_format_medium => "H:mm:ss",
      time_format_short => "H:mm",
      variant => undef,
      version => 29
    },
    "pt-BR" => {
      am_pm_abbreviated => [
        "AM",
        "PM"
      ],
      available_formats => {
        E => "ccc",
        EHm => "E, HH:mm",
        EHms => "E, HH:mm:ss",
        Ed => "E, d",
        Ehm => "E, h:mm a",
        Ehms => "E, h:mm:ss a",
        Gy => "y G",
        GyMMM => "MMM 'de' y G",
        GyMMMEd => "E, d 'de' MMM 'de' y G",
        GyMMMd => "d 'de' MMM 'de' y G",
        H => "HH",
        Hm => "HH:mm",
        Hms => "HH:mm:ss",
        Hmsv => "HH:mm:ss v",
        Hmv => "HH:mm v",
        M => "L",
        MEd => "E, dd/MM",
        MMM => "LLL",
        MMMEd => "E, d 'de' MMM",
        MMMMEd => "E, d 'de' MMMM",
        MMMMd => "d 'de' MMMM",
        MMMd => "d 'de' MMM",
        MMdd => "dd/MM",
        Md => "d/M",
        d => "d",
        h => "h a",
        hm => "h:mm a",
        hms => "h:mm:ss a",
        hmsv => "h:mm:ss a v",
        hmv => "h:mm a v",
        ms => "mm:ss",
        y => "y",
        yM => "MM/y",
        yMEd => "E, dd/MM/y",
        yMM => "MM/y",
        yMMM => "MMM 'de' y",
        yMMMEd => "E, d 'de' MMM 'de' y",
        yMMMM => "MMMM 'de' y",
        yMMMMEd => "E, d 'de' MMMM 'de' y",
        yMMMMd => "d 'de' MMMM 'de' y",
        yMMMd => "d 'de' MMM 'de' y",
        yMd => "dd/MM/y",
        yQQQ => "y QQQ",
        yQQQQ => "y QQQQ"
      },
      code => "pt-BR",
      date_format_full => "EEEE, d 'de' MMMM 'de' y",
      date_format_long => "d 'de' MMMM 'de' y",
      date_format_medium => "d 'de' MMM 'de' y",
      date_format_short => "dd/MM/yy",
      datetime_format_full => "{1} {0}",
      datetime_format_long => "{1} {0}",
      datetime_format_medium => "{1} {0}",
      datetime_format_short => "{1} {0}",
      day_format_abbreviated => [
        "seg",
        "ter",
        "qua",
        "qui",
        "sex",
        "s\N{U+00e1}b",
        "dom"
      ],
      day_format_narrow => [
        "S",
        "T",
        "Q",
        "Q",
        "S",
        "S",
        "D"
      ],
      day_format_wide => [
        "segunda-feira",
        "ter\N{U+00e7}a-feira",
        "quarta-feira",
        "quinta-feira",
        "sexta-feira",
        "s\N{U+00e1}bado",
        "domingo"
      ],
      day_stand_alone_abbreviated => [
        "seg",
        "ter",
        "qua",
        "qui",
        "sex",
        "s\N{U+00e1}b",
        "dom"
      ],
      day_stand_alone_narrow => [
        "S",
        "T",
        "Q",
        "Q",
        "S",
        "S",
        "D"
      ],
      day_stand_alone_wide => [
        "segunda-feira",
        "ter\N{U+00e7}a-feira",
        "quarta-feira",
        "quinta-feira",
        "sexta-feira",
        "s\N{U+00e1}bado",
        "domingo"
      ],
      era_abbreviated => [
        "a.C.",
        "d.C."
      ],
      era_narrow => [
        "a.C.",
        "d.C."
      ],
      era_wide => [
        "antes de Cristo",
        "depois de Cristo"
      ],
      first_day_of_week => 7,
      glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
      glibc_date_format => "%d-%m-%Y",
      glibc_datetime_format => "%a %d %b %Y %T %Z",
      glibc_time_12_format => "%I:%M:%S %p",
      glibc_time_format => "%T",
      language => "Portuguese",
      month_format_abbreviated => [
        "jan",
        "fev",
        "mar",
        "abr",
        "mai",
        "jun",
        "jul",
        "ago",
        "set",
        "out",
        "nov",
        "dez"
      ],
      month_format_narrow => [
        "J",
        "F",
        "M",
        "A",
        "M",
        "J",
        "J",
        "A",
        "S",
        "O",
        "N",
        "D"
      ],
      month_format_wide => [
        "janeiro",
        "fevereiro",
        "mar\N{U+00e7}o",
        "abril",
        "maio",
        "junho",
        "julho",
        "agosto",
        "setembro",
        "outubro",
        "novembro",
        "dezembro"
      ],
      month_stand_alone_abbreviated => [
        "jan",
        "fev",
        "mar",
        "abr",
        "mai",
        "jun",
        "jul",
        "ago",
        "set",
        "out",
        "nov",
        "dez"
      ],
      month_stand_alone_narrow => [
        "J",
        "F",
        "M",
        "A",
        "M",
        "J",
        "J",
        "A",
        "S",
        "O",
        "N",
        "D"
      ],
      month_stand_alone_wide => [
        "janeiro",
        "fevereiro",
        "mar\N{U+00e7}o",
        "abril",
        "maio",
        "junho",
        "julho",
        "agosto",
        "setembro",
        "outubro",
        "novembro",
        "dezembro"
      ],
      name => "Portuguese Brazil",
      native_language => "portugu\N{U+00ea}s",
      native_name => "portugu\N{U+00ea}s Brasil",
      native_script => undef,
      native_territory => "Brasil",
      native_variant => undef,
      quarter_format_abbreviated => [
        "T1",
        "T2",
        "T3",
        "T4"
      ],
      quarter_format_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_format_wide => [
        "1\N{U+00ba} trimestre",
        "2\N{U+00ba} trimestre",
        "3\N{U+00ba} trimestre",
        "4\N{U+00ba} trimestre"
      ],
      quarter_stand_alone_abbreviated => [
        "T1",
        "T2",
        "T3",
        "T4"
      ],
      quarter_stand_alone_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_stand_alone_wide => [
        "1\N{U+00ba} trimestre",
        "2\N{U+00ba} trimestre",
        "3\N{U+00ba} trimestre",
        "4\N{U+00ba} trimestre"
      ],
      script => undef,
      territory => "Brazil",
      time_format_full => "HH:mm:ss zzzz",
      time_format_long => "HH:mm:ss z",
      time_format_medium => "HH:mm:ss",
      time_format_short => "HH:mm",
      variant => undef,
      version => 29
    },
    "zh-Hans-CN" => {
      am_pm_abbreviated => [
        "\N{U+4e0a}\N{U+5348}",
        "\N{U+4e0b}\N{U+5348}"
      ],
      available_formats => {
        E => "ccc",
        EHm => "EHH:mm",
        EHms => "EHH:mm:ss",
        Ed => "d\N{U+65e5}E",
        Ehm => "E ah:mm",
        Ehms => "E ah:mm:ss",
        Gy => "Gy\N{U+5e74}",
        GyMMM => "Gy\N{U+5e74}M\N{U+6708}",
        GyMMMEd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}E",
        GyMMMd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
        H => "H\N{U+65f6}",
        Hm => "HH:mm",
        Hms => "HH:mm:ss",
        Hmsv => "v HH:mm:ss",
        Hmv => "v HH:mm",
        M => "M\N{U+6708}",
        MEd => "M/dE",
        MMM => "LLL",
        MMMEd => "M\N{U+6708}d\N{U+65e5}E",
        MMMMd => "M\N{U+6708}d\N{U+65e5}",
        MMMd => "M\N{U+6708}d\N{U+65e5}",
        MMdd => "MM/dd",
        Md => "M/d",
        d => "d\N{U+65e5}",
        h => "ah\N{U+65f6}",
        hm => "ah:mm",
        hms => "ah:mm:ss",
        hmsv => "v ah:mm:ss",
        hmv => "v ah:mm",
        ms => "mm:ss",
        y => "y\N{U+5e74}",
        yM => "y\N{U+5e74}M\N{U+6708}",
        yMEd => "y/M/dE",
        yMM => "y\N{U+5e74}M\N{U+6708}",
        yMMM => "y\N{U+5e74}M\N{U+6708}",
        yMMMEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}E",
        yMMMM => "y\N{U+5e74}M\N{U+6708}",
        yMMMd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
        yMd => "y/M/d",
        yQQQ => "y\N{U+5e74}\N{U+7b2c}Q\N{U+5b63}\N{U+5ea6}",
        yQQQQ => "y\N{U+5e74}\N{U+7b2c}Q\N{U+5b63}\N{U+5ea6}"
      },
      code => "zh-Hans-CN",
      date_format_full => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}EEEE",
      date_format_long => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      date_format_medium => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      date_format_short => "y/M/d",
      datetime_format_full => "{1} {0}",
      datetime_format_long => "{1} {0}",
      datetime_format_medium => "{1} {0}",
      datetime_format_short => "{1} {0}",
      day_format_abbreviated => [
        "\N{U+5468}\N{U+4e00}",
        "\N{U+5468}\N{U+4e8c}",
        "\N{U+5468}\N{U+4e09}",
        "\N{U+5468}\N{U+56db}",
        "\N{U+5468}\N{U+4e94}",
        "\N{U+5468}\N{U+516d}",
        "\N{U+5468}\N{U+65e5}"
      ],
      day_format_narrow => [
        "\N{U+4e00}",
        "\N{U+4e8c}",
        "\N{U+4e09}",
        "\N{U+56db}",
        "\N{U+4e94}",
        "\N{U+516d}",
        "\N{U+65e5}"
      ],
      day_format_wide => [
        "\N{U+661f}\N{U+671f}\N{U+4e00}",
        "\N{U+661f}\N{U+671f}\N{U+4e8c}",
        "\N{U+661f}\N{U+671f}\N{U+4e09}",
        "\N{U+661f}\N{U+671f}\N{U+56db}",
        "\N{U+661f}\N{U+671f}\N{U+4e94}",
        "\N{U+661f}\N{U+671f}\N{U+516d}",
        "\N{U+661f}\N{U+671f}\N{U+65e5}"
      ],
      day_stand_alone_abbreviated => [
        "\N{U+5468}\N{U+4e00}",
        "\N{U+5468}\N{U+4e8c}",
        "\N{U+5468}\N{U+4e09}",
        "\N{U+5468}\N{U+56db}",
        "\N{U+5468}\N{U+4e94}",
        "\N{U+5468}\N{U+516d}",
        "\N{U+5468}\N{U+65e5}"
      ],
      day_stand_alone_narrow => [
        "\N{U+4e00}",
        "\N{U+4e8c}",
        "\N{U+4e09}",
        "\N{U+56db}",
        "\N{U+4e94}",
        "\N{U+516d}",
        "\N{U+65e5}"
      ],
      day_stand_alone_wide => [
        "\N{U+661f}\N{U+671f}\N{U+4e00}",
        "\N{U+661f}\N{U+671f}\N{U+4e8c}",
        "\N{U+661f}\N{U+671f}\N{U+4e09}",
        "\N{U+661f}\N{U+671f}\N{U+56db}",
        "\N{U+661f}\N{U+671f}\N{U+4e94}",
        "\N{U+661f}\N{U+671f}\N{U+516d}",
        "\N{U+661f}\N{U+671f}\N{U+65e5}"
      ],
      era_abbreviated => [
        "\N{U+516c}\N{U+5143}\N{U+524d}",
        "\N{U+516c}\N{U+5143}"
      ],
      era_narrow => [
        "\N{U+516c}\N{U+5143}\N{U+524d}",
        "\N{U+516c}\N{U+5143}"
      ],
      era_wide => [
        "\N{U+516c}\N{U+5143}\N{U+524d}",
        "\N{U+516c}\N{U+5143}"
      ],
      first_day_of_week => 7,
      glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
      glibc_date_format => "%m/%d/%y",
      glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
      glibc_time_12_format => "%I:%M:%S %p",
      glibc_time_format => "%H:%M:%S",
      language => "Chinese",
      month_format_abbreviated => [
        "1\N{U+6708}",
        "2\N{U+6708}",
        "3\N{U+6708}",
        "4\N{U+6708}",
        "5\N{U+6708}",
        "6\N{U+6708}",
        "7\N{U+6708}",
        "8\N{U+6708}",
        "9\N{U+6708}",
        "10\N{U+6708}",
        "11\N{U+6708}",
        "12\N{U+6708}"
      ],
      month_format_narrow => [
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12
      ],
      month_format_wide => [
        "\N{U+4e00}\N{U+6708}",
        "\N{U+4e8c}\N{U+6708}",
        "\N{U+4e09}\N{U+6708}",
        "\N{U+56db}\N{U+6708}",
        "\N{U+4e94}\N{U+6708}",
        "\N{U+516d}\N{U+6708}",
        "\N{U+4e03}\N{U+6708}",
        "\N{U+516b}\N{U+6708}",
        "\N{U+4e5d}\N{U+6708}",
        "\N{U+5341}\N{U+6708}",
        "\N{U+5341}\N{U+4e00}\N{U+6708}",
        "\N{U+5341}\N{U+4e8c}\N{U+6708}"
      ],
      month_stand_alone_abbreviated => [
        "1\N{U+6708}",
        "2\N{U+6708}",
        "3\N{U+6708}",
        "4\N{U+6708}",
        "5\N{U+6708}",
        "6\N{U+6708}",
        "7\N{U+6708}",
        "8\N{U+6708}",
        "9\N{U+6708}",
        "10\N{U+6708}",
        "11\N{U+6708}",
        "12\N{U+6708}"
      ],
      month_stand_alone_narrow => [
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12
      ],
      month_stand_alone_wide => [
        "\N{U+4e00}\N{U+6708}",
        "\N{U+4e8c}\N{U+6708}",
        "\N{U+4e09}\N{U+6708}",
        "\N{U+56db}\N{U+6708}",
        "\N{U+4e94}\N{U+6708}",
        "\N{U+516d}\N{U+6708}",
        "\N{U+4e03}\N{U+6708}",
        "\N{U+516b}\N{U+6708}",
        "\N{U+4e5d}\N{U+6708}",
        "\N{U+5341}\N{U+6708}",
        "\N{U+5341}\N{U+4e00}\N{U+6708}",
        "\N{U+5341}\N{U+4e8c}\N{U+6708}"
      ],
      name => "Chinese China Simplified",
      native_language => "\N{U+4e2d}\N{U+6587}",
      native_name => "\N{U+4e2d}\N{U+6587} \N{U+4e2d}\N{U+56fd} \N{U+7b80}\N{U+4f53}",
      native_script => "\N{U+7b80}\N{U+4f53}",
      native_territory => "\N{U+4e2d}\N{U+56fd}",
      native_variant => undef,
      quarter_format_abbreviated => [
        "1\N{U+5b63}\N{U+5ea6}",
        "2\N{U+5b63}\N{U+5ea6}",
        "3\N{U+5b63}\N{U+5ea6}",
        "4\N{U+5b63}\N{U+5ea6}"
      ],
      quarter_format_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_format_wide => [
        "\N{U+7b2c}\N{U+4e00}\N{U+5b63}\N{U+5ea6}",
        "\N{U+7b2c}\N{U+4e8c}\N{U+5b63}\N{U+5ea6}",
        "\N{U+7b2c}\N{U+4e09}\N{U+5b63}\N{U+5ea6}",
        "\N{U+7b2c}\N{U+56db}\N{U+5b63}\N{U+5ea6}"
      ],
      quarter_stand_alone_abbreviated => [
        "1\N{U+5b63}\N{U+5ea6}",
        "2\N{U+5b63}\N{U+5ea6}",
        "3\N{U+5b63}\N{U+5ea6}",
        "4\N{U+5b63}\N{U+5ea6}"
      ],
      quarter_stand_alone_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_stand_alone_wide => [
        "\N{U+7b2c}\N{U+4e00}\N{U+5b63}\N{U+5ea6}",
        "\N{U+7b2c}\N{U+4e8c}\N{U+5b63}\N{U+5ea6}",
        "\N{U+7b2c}\N{U+4e09}\N{U+5b63}\N{U+5ea6}",
        "\N{U+7b2c}\N{U+56db}\N{U+5b63}\N{U+5ea6}"
      ],
      script => "Simplified",
      territory => "China",
      time_format_full => "zzzz ah:mm:ss",
      time_format_long => "z ah:mm:ss",
      time_format_medium => "ah:mm:ss",
      time_format_short => "ah:mm",
      variant => undef,
      version => 29
    },
    "zh-Hant-TW" => {
      am_pm_abbreviated => [
        "\N{U+4e0a}\N{U+5348}",
        "\N{U+4e0b}\N{U+5348}"
      ],
      available_formats => {
        E => "ccc",
        EHm => "E HH:mm",
        EHms => "E HH:mm:ss",
        Ed => "d E",
        Ehm => "E ah:mm",
        Ehms => "E ah:mm:ss",
        Gy => "Gy\N{U+5e74}",
        GyMMM => "Gy\N{U+5e74}M\N{U+6708}",
        GyMMMEd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5} E",
        GyMMMd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
        H => "H\N{U+6642}",
        Hm => "HH:mm",
        Hms => "HH:mm:ss",
        Hmsv => "HH:mm:ss [v]",
        Hmv => "HH:mm [v]",
        M => "M\N{U+6708}",
        MEd => "M/d\N{U+ff08}E\N{U+ff09}",
        MMM => "LLL",
        MMMEd => "M\N{U+6708}d\N{U+65e5} E",
        MMMMd => "M\N{U+6708}d\N{U+65e5}",
        MMMd => "M\N{U+6708}d\N{U+65e5}",
        MMdd => "MM/dd",
        Md => "M/d",
        d => "d\N{U+65e5}",
        h => "ah\N{U+6642}",
        hm => "ah:mm",
        hms => "ah:mm:ss",
        hmsv => "ah:mm:ss [v]",
        hmv => "ah:mm [v]",
        ms => "mm:ss",
        y => "y\N{U+5e74}",
        yM => "y/M",
        yMEd => "y/M/d\N{U+ff08}E\N{U+ff09}",
        yMM => "y/MM",
        yMMM => "y\N{U+5e74}M\N{U+6708}",
        yMMMEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5} E",
        yMMMM => "y\N{U+5e74}M\N{U+6708}",
        yMMMd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
        yMd => "y/M/d",
        yQQQ => "y\N{U+5e74}QQQ",
        yQQQQ => "y\N{U+5e74}QQQQ"
      },
      code => "zh-Hant-TW",
      date_format_full => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5} EEEE",
      date_format_long => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      date_format_medium => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      date_format_short => "y/M/d",
      datetime_format_full => "{1} {0}",
      datetime_format_long => "{1} {0}",
      datetime_format_medium => "{1} {0}",
      datetime_format_short => "{1} {0}",
      day_format_abbreviated => [
        "\N{U+9031}\N{U+4e00}",
        "\N{U+9031}\N{U+4e8c}",
        "\N{U+9031}\N{U+4e09}",
        "\N{U+9031}\N{U+56db}",
        "\N{U+9031}\N{U+4e94}",
        "\N{U+9031}\N{U+516d}",
        "\N{U+9031}\N{U+65e5}"
      ],
      day_format_narrow => [
        "\N{U+4e00}",
        "\N{U+4e8c}",
        "\N{U+4e09}",
        "\N{U+56db}",
        "\N{U+4e94}",
        "\N{U+516d}",
        "\N{U+65e5}"
      ],
      day_format_wide => [
        "\N{U+661f}\N{U+671f}\N{U+4e00}",
        "\N{U+661f}\N{U+671f}\N{U+4e8c}",
        "\N{U+661f}\N{U+671f}\N{U+4e09}",
        "\N{U+661f}\N{U+671f}\N{U+56db}",
        "\N{U+661f}\N{U+671f}\N{U+4e94}",
        "\N{U+661f}\N{U+671f}\N{U+516d}",
        "\N{U+661f}\N{U+671f}\N{U+65e5}"
      ],
      day_stand_alone_abbreviated => [
        "\N{U+9031}\N{U+4e00}",
        "\N{U+9031}\N{U+4e8c}",
        "\N{U+9031}\N{U+4e09}",
        "\N{U+9031}\N{U+56db}",
        "\N{U+9031}\N{U+4e94}",
        "\N{U+9031}\N{U+516d}",
        "\N{U+9031}\N{U+65e5}"
      ],
      day_stand_alone_narrow => [
        "\N{U+4e00}",
        "\N{U+4e8c}",
        "\N{U+4e09}",
        "\N{U+56db}",
        "\N{U+4e94}",
        "\N{U+516d}",
        "\N{U+65e5}"
      ],
      day_stand_alone_wide => [
        "\N{U+661f}\N{U+671f}\N{U+4e00}",
        "\N{U+661f}\N{U+671f}\N{U+4e8c}",
        "\N{U+661f}\N{U+671f}\N{U+4e09}",
        "\N{U+661f}\N{U+671f}\N{U+56db}",
        "\N{U+661f}\N{U+671f}\N{U+4e94}",
        "\N{U+661f}\N{U+671f}\N{U+516d}",
        "\N{U+661f}\N{U+671f}\N{U+65e5}"
      ],
      era_abbreviated => [
        "\N{U+897f}\N{U+5143}\N{U+524d}",
        "\N{U+897f}\N{U+5143}"
      ],
      era_narrow => [
        "\N{U+897f}\N{U+5143}\N{U+524d}",
        "\N{U+897f}\N{U+5143}"
      ],
      era_wide => [
        "\N{U+897f}\N{U+5143}\N{U+524d}",
        "\N{U+897f}\N{U+5143}"
      ],
      first_day_of_week => 7,
      glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
      glibc_date_format => "%m/%d/%y",
      glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
      glibc_time_12_format => "%I:%M:%S %p",
      glibc_time_format => "%H:%M:%S",
      language => "Chinese",
      month_format_abbreviated => [
        "1\N{U+6708}",
        "2\N{U+6708}",
        "3\N{U+6708}",
        "4\N{U+6708}",
        "5\N{U+6708}",
        "6\N{U+6708}",
        "7\N{U+6708}",
        "8\N{U+6708}",
        "9\N{U+6708}",
        "10\N{U+6708}",
        "11\N{U+6708}",
        "12\N{U+6708}"
      ],
      month_format_narrow => [
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12
      ],
      month_format_wide => [
        "1\N{U+6708}",
        "2\N{U+6708}",
        "3\N{U+6708}",
        "4\N{U+6708}",
        "5\N{U+6708}",
        "6\N{U+6708}",
        "7\N{U+6708}",
        "8\N{U+6708}",
        "9\N{U+6708}",
        "10\N{U+6708}",
        "11\N{U+6708}",
        "12\N{U+6708}"
      ],
      month_stand_alone_abbreviated => [
        "1\N{U+6708}",
        "2\N{U+6708}",
        "3\N{U+6708}",
        "4\N{U+6708}",
        "5\N{U+6708}",
        "6\N{U+6708}",
        "7\N{U+6708}",
        "8\N{U+6708}",
        "9\N{U+6708}",
        "10\N{U+6708}",
        "11\N{U+6708}",
        "12\N{U+6708}"
      ],
      month_stand_alone_narrow => [
        1,
        2,
        3,
        4,
        5,
        6,
        7,
        8,
        9,
        10,
        11,
        12
      ],
      month_stand_alone_wide => [
        "1\N{U+6708}",
        "2\N{U+6708}",
        "3\N{U+6708}",
        "4\N{U+6708}",
        "5\N{U+6708}",
        "6\N{U+6708}",
        "7\N{U+6708}",
        "8\N{U+6708}",
        "9\N{U+6708}",
        "10\N{U+6708}",
        "11\N{U+6708}",
        "12\N{U+6708}"
      ],
      name => "Chinese Taiwan Traditional",
      native_language => "\N{U+4e2d}\N{U+6587}",
      native_name => "\N{U+4e2d}\N{U+6587} \N{U+53f0}\N{U+7063} \N{U+7e41}\N{U+9ad4}",
      native_script => "\N{U+7e41}\N{U+9ad4}",
      native_territory => "\N{U+53f0}\N{U+7063}",
      native_variant => undef,
      quarter_format_abbreviated => [
        "1\N{U+5b63}",
        "2\N{U+5b63}",
        "3\N{U+5b63}",
        "4\N{U+5b63}"
      ],
      quarter_format_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_format_wide => [
        "\N{U+7b2c}1\N{U+5b63}",
        "\N{U+7b2c}2\N{U+5b63}",
        "\N{U+7b2c}3\N{U+5b63}",
        "\N{U+7b2c}4\N{U+5b63}"
      ],
      quarter_stand_alone_abbreviated => [
        "1\N{U+5b63}",
        "2\N{U+5b63}",
        "3\N{U+5b63}",
        "4\N{U+5b63}"
      ],
      quarter_stand_alone_narrow => [
        1,
        2,
        3,
        4
      ],
      quarter_stand_alone_wide => [
        "\N{U+7b2c}1\N{U+5b63}",
        "\N{U+7b2c}2\N{U+5b63}",
        "\N{U+7b2c}3\N{U+5b63}",
        "\N{U+7b2c}4\N{U+5b63}"
      ],
      script => "Traditional",
      territory => "Taiwan",
      time_format_full => "ah:mm:ss [zzzz]",
      time_format_long => "ah:mm:ss [z]",
      time_format_medium => "ah:mm:ss",
      time_format_short => "ah:mm",
      variant => undef,
      version => 29
    }
  );
  ### :end LocaleData:
  #>>>
  
  #<<<
  ### :start DataSectionIndex:
  my %DataSectionIndex = (
    af => [
      11,
      4347
    ],
    "af-NA" => [
      4372,
      4392
    ],
    "af-ZA" => [
      8778,
      4383
    ],
    agq => [
      13173,
      6918
    ],
    "agq-CM" => [
      20106,
      7019
    ],
    ak => [
      27136,
      4887
    ],
    "ak-GH" => [
      32037,
      4897
    ],
    am => [
      36945,
      7531
    ],
    "am-ET" => [
      44490,
      7715
    ],
    "ar-001" => [
      52220,
      11045
    ],
    "ar-AE" => [
      63279,
      11410
    ],
    "ar-BH" => [
      74703,
      11080
    ],
    "ar-DJ" => [
      85797,
      11050
    ],
    "ar-DZ" => [
      96861,
      10920
    ],
    "ar-EG" => [
      107795,
      10996
    ],
    "ar-EH" => [
      118805,
      11224
    ],
    "ar-ER" => [
      130043,
      11068
    ],
    "ar-IL" => [
      141125,
      11058
    ],
    "ar-IQ" => [
      152197,
      11590
    ],
    "ar-JO" => [
      163801,
      11594
    ],
    "ar-KM" => [
      175409,
      11086
    ],
    "ar-KW" => [
      186509,
      11058
    ],
    "ar-LB" => [
      197581,
      11576
    ],
    "ar-LY" => [
      209171,
      11036
    ],
    "ar-MA" => [
      220221,
      10856
    ],
    "ar-MR" => [
      231091,
      10994
    ],
    "ar-OM" => [
      242099,
      11034
    ],
    "ar-PS" => [
      253147,
      11838
    ],
    "ar-QA" => [
      264999,
      10996
    ],
    "ar-SA" => [
      276009,
      11383
    ],
    "ar-SD" => [
      287406,
      11076
    ],
    "ar-SO" => [
      298496,
      11068
    ],
    "ar-SS" => [
      309578,
      11170
    ],
    "ar-SY" => [
      320762,
      11572
    ],
    "ar-TD" => [
      332348,
      11002
    ],
    "ar-TN" => [
      343364,
      10860
    ],
    "ar-YE" => [
      354238,
      11036
    ],
    as => [
      365285,
      9967
    ],
    "as-IN" => [
      375266,
      10063
    ],
    asa => [
      385341,
      4247
    ],
    "asa-TZ" => [
      389603,
      4278
    ],
    ast => [
      393893,
      4438
    ],
    "ast-ES" => [
      398346,
      4468
    ],
    az => [
      402825,
      4879
    ],
    "az-Cyrl" => [
      407720,
      8914
    ],
    "az-Cyrl-AZ" => [
      416653,
      9245
    ],
    "az-Latn" => [
      425914,
      4884
    ],
    "az-Latn-AZ" => [
      430817,
      4975
    ],
    bas => [
      435804,
      6077
    ],
    "bas-CM" => [
      441896,
      6180
    ],
    be => [
      448087,
      9533
    ],
    "be-BY" => [
      457634,
      9694
    ],
    bem => [
      467340,
      4356
    ],
    "bem-ZM" => [
      471711,
      4370
    ],
    bez => [
      476093,
      4624
    ],
    "bez-TZ" => [
      480732,
      4659
    ],
    bg => [
      485402,
      9803
    ],
    "bg-BG" => [
      495219,
      9968
    ],
    bm => [
      505198,
      4712
    ],
    "bm-ML" => [
      509924,
      4727
    ],
    bn => [
      514662,
      11107
    ],
    "bn-BD" => [
      525783,
      11302
    ],
    "bn-IN" => [
      537099,
      11212
    ],
    bo => [
      548322,
      14383
    ],
    "bo-CN" => [
      562719,
      15218
    ],
    "bo-IN" => [
      577951,
      14532
    ],
    br => [
      592494,
      4474
    ],
    "br-FR" => [
      596982,
      4509
    ],
    brx => [
      601503,
      13032
    ],
    "brx-IN" => [
      614550,
      13137
    ],
    bs => [
      627698,
      4534
    ],
    "bs-Cyrl" => [
      632248,
      9556
    ],
    "bs-Cyrl-BA" => [
      641823,
      10111
    ],
    "bs-Latn" => [
      651950,
      4539
    ],
    "bs-Latn-BA" => [
      656508,
      4638
    ],
    ca => [
      661157,
      4680
    ],
    "ca-AD" => [
      665851,
      4707
    ],
    "ca-ES" => [
      670572,
      4694
    ],
    "ca-ES-VALENCIA" => [
      675289,
      4751
    ],
    "ca-FR" => [
      680054,
      4721
    ],
    "ca-IT" => [
      684789,
      4719
    ],
    ce => [
      689519,
      8797
    ],
    "ce-RU" => [
      698330,
      8896
    ],
    cgg => [
      707238,
      4411
    ],
    "cgg-UG" => [
      711664,
      4434
    ],
    chr => [
      716110,
      7427
    ],
    "chr-US" => [
      723552,
      7532
    ],
    ckb => [
      731096,
      4252
    ],
    "ckb-IQ" => [
      735363,
      4263
    ],
    "ckb-IR" => [
      739641,
      4263
    ],
    cs => [
      743915,
      5108
    ],
    "cs-CZ" => [
      749037,
      5221
    ],
    cu => [
      754269,
      3989
    ],
    "cu-RU" => [
      758272,
      4004
    ],
    cy => [
      762287,
      4349
    ],
    "cy-GB" => [
      766650,
      4417
    ],
    da => [
      771078,
      4433
    ],
    "da-DK" => [
      775525,
      4451
    ],
    "da-GL" => [
      779990,
      4488
    ],
    dav => [
      784490,
      4680
    ],
    "dav-KE" => [
      789185,
      4699
    ],
    de => [
      793895,
      4437
    ],
    "de-AT" => [
      798346,
      4515
    ],
    "de-BE" => [
      802875,
      4455
    ],
    "de-CH" => [
      807344,
      4463
    ],
    "de-DE" => [
      811821,
      4465
    ],
    "de-LI" => [
      816300,
      4488
    ],
    "de-LU" => [
      820802,
      4465
    ],
    dje => [
      825279,
      4397
    ],
    "dje-NE" => [
      829691,
      4434
    ],
    dsb => [
      834137,
      4699
    ],
    "dsb-DE" => [
      838851,
      4724
    ],
    dua => [
      843587,
      6298
    ],
    "dua-CM" => [
      849900,
      6329
    ],
    dyo => [
      856241,
      4231
    ],
    "dyo-SN" => [
      860487,
      4258
    ],
    dz => [
      864756,
      13785
    ],
    "dz-BT" => [
      878555,
      14602
    ],
    ebu => [
      893169,
      4787
    ],
    "ebu-KE" => [
      897971,
      4806
    ],
    ee => [
      902788,
      4979
    ],
    "ee-GH" => [
      907781,
      5012
    ],
    "ee-TG" => [
      912807,
      4984
    ],
    el => [
      917802,
      9548
    ],
    "el-CY" => [
      927364,
      9679
    ],
    "el-GR" => [
      937057,
      9664
    ],
    "en-001" => [
      946736,
      4306
    ],
    "en-150" => [
      951057,
      4306
    ],
    "en-AG" => [
      955377,
      4353
    ],
    "en-AI" => [
      959744,
      4313
    ],
    "en-AS" => [
      964071,
      4317
    ],
    "en-AT" => [
      968402,
      4309
    ],
    "en-AU" => [
      972725,
      4440
    ],
    "en-BB" => [
      977179,
      4317
    ],
    "en-BE" => [
      981510,
      4303
    ],
    "en-BI" => [
      985827,
      4289
    ],
    "en-BM" => [
      990130,
      4313
    ],
    "en-BS" => [
      994457,
      4313
    ],
    "en-BW" => [
      998784,
      4327
    ],
    "en-BZ" => [
      1003125,
      4313
    ],
    "en-CC" => [
      1007452,
      4373
    ],
    "en-CH" => [
      1011839,
      4325
    ],
    "en-CK" => [
      1016178,
      4329
    ],
    "en-CM" => [
      1020521,
      4313
    ],
    "en-CX" => [
      1024848,
      4345
    ],
    "en-CY" => [
      1029207,
      4309
    ],
    "en-DE" => [
      1033530,
      4309
    ],
    "en-DG" => [
      1037853,
      4329
    ],
    "en-DK" => [
      1042196,
      4297
    ],
    "en-DM" => [
      1046507,
      4317
    ],
    "en-ER" => [
      1050838,
      4313
    ],
    "en-FI" => [
      1055165,
      4299
    ],
    "en-FJ" => [
      1059478,
      4301
    ],
    "en-FK" => [
      1063793,
      4345
    ],
    "en-FM" => [
      1068152,
      4325
    ],
    "en-GB" => [
      1072491,
      4331
    ],
    "en-GD" => [
      1076836,
      4313
    ],
    "en-GG" => [
      1081163,
      4313
    ],
    "en-GH" => [
      1085490,
      4305
    ],
    "en-GI" => [
      1089809,
      4317
    ],
    "en-GM" => [
      1094140,
      4309
    ],
    "en-GU" => [
      1098463,
      4277
    ],
    "en-GY" => [
      1102754,
      4309
    ],
    "en-HK" => [
      1107077,
      4401
    ],
    "en-IE" => [
      1111492,
      4290
    ],
    "en-IL" => [
      1115796,
      4296
    ],
    "en-IM" => [
      1120106,
      4325
    ],
    "en-IN" => [
      1124445,
      4317
    ],
    "en-IO" => [
      1128776,
      4401
    ],
    "en-JE" => [
      1133191,
      4305
    ],
    "en-JM" => [
      1137510,
      4313
    ],
    "en-KE" => [
      1141837,
      4301
    ],
    "en-KI" => [
      1146152,
      4317
    ],
    "en-KN" => [
      1150483,
      4353
    ],
    "en-KY" => [
      1154850,
      4341
    ],
    "en-LC" => [
      1159205,
      4321
    ],
    "en-LR" => [
      1163540,
      4313
    ],
    "en-LS" => [
      1167867,
      4313
    ],
    "en-MG" => [
      1172194,
      4321
    ],
    "en-MH" => [
      1176529,
      4325
    ],
    "en-MO" => [
      1180868,
      4345
    ],
    "en-MP" => [
      1185227,
      4357
    ],
    "en-MS" => [
      1189598,
      4321
    ],
    "en-MT" => [
      1193933,
      4306
    ],
    "en-MU" => [
      1198253,
      4317
    ],
    "en-MW" => [
      1202584,
      4309
    ],
    "en-MY" => [
      1206907,
      4317
    ],
    "en-NA" => [
      1211238,
      4313
    ],
    "en-NF" => [
      1215565,
      4337
    ],
    "en-NG" => [
      1219916,
      4304
    ],
    "en-NL" => [
      1224234,
      4325
    ],
    "en-NR" => [
      1228573,
      4301
    ],
    "en-NU" => [
      1232888,
      4297
    ],
    "en-NZ" => [
      1237199,
      4316
    ],
    "en-PG" => [
      1241529,
      4349
    ],
    "en-PH" => [
      1245892,
      4349
    ],
    "en-PK" => [
      1250255,
      4318
    ],
    "en-PN" => [
      1254587,
      4345
    ],
    "en-PR" => [
      1258946,
      4305
    ],
    "en-PW" => [
      1263265,
      4305
    ],
    "en-RW" => [
      1267584,
      4305
    ],
    "en-SB" => [
      1271903,
      4345
    ],
    "en-SC" => [
      1276262,
      4321
    ],
    "en-SD" => [
      1280597,
      4305
    ],
    "en-SE" => [
      1284916,
      4305
    ],
    "en-SG" => [
      1289235,
      4308
    ],
    "en-SH" => [
      1293557,
      4321
    ],
    "en-SI" => [
      1297892,
      4313
    ],
    "en-SL" => [
      1302219,
      4333
    ],
    "en-SS" => [
      1306566,
      4329
    ],
    "en-SX" => [
      1310909,
      4329
    ],
    "en-SZ" => [
      1315252,
      4321
    ],
    "en-TC" => [
      1319587,
      4373
    ],
    "en-TK" => [
      1323974,
      4309
    ],
    "en-TO" => [
      1328297,
      4305
    ],
    "en-TT" => [
      1332616,
      4353
    ],
    "en-TV" => [
      1336983,
      4305
    ],
    "en-TZ" => [
      1341302,
      4313
    ],
    "en-UG" => [
      1345629,
      4305
    ],
    "en-UM" => [
      1349948,
      4345
    ],
    "en-US-POSIX" => [
      1354313,
      4338
    ],
    "en-VC" => [
      1358665,
      4381
    ],
    "en-VG" => [
      1363060,
      4373
    ],
    "en-VI" => [
      1367447,
      4337
    ],
    "en-VU" => [
      1371798,
      4313
    ],
    "en-WS" => [
      1376125,
      4305
    ],
    "en-ZA" => [
      1380444,
      4331
    ],
    "en-ZM" => [
      1384789,
      4309
    ],
    "en-ZW" => [
      1389112,
      4316
    ],
    eo => [
      1393439,
      4247
    ],
    "eo-001" => [
      1397701,
      4263
    ],
    "es-419" => [
      1401979,
      4975
    ],
    "es-AR" => [
      1406968,
      4941
    ],
    "es-BO" => [
      1411923,
      4923
    ],
    "es-BR" => [
      1416860,
      4928
    ],
    "es-CL" => [
      1421802,
      4943
    ],
    "es-CO" => [
      1426759,
      4956
    ],
    "es-CR" => [
      1431729,
      4935
    ],
    "es-CU" => [
      1436678,
      4920
    ],
    "es-DO" => [
      1441612,
      4987
    ],
    "es-EA" => [
      1446613,
      4901
    ],
    "es-EC" => [
      1451528,
      4923
    ],
    "es-ES" => [
      1456465,
      4872
    ],
    "es-GQ" => [
      1461351,
      4909
    ],
    "es-GT" => [
      1466274,
      4931
    ],
    "es-HN" => [
      1471219,
      4928
    ],
    "es-IC" => [
      1476161,
      4885
    ],
    "es-MX" => [
      1481060,
      5031
    ],
    "es-NI" => [
      1486105,
      4931
    ],
    "es-PA" => [
      1491050,
      4919
    ],
    "es-PE" => [
      1495983,
      4928
    ],
    "es-PH" => [
      1500925,
      4887
    ],
    "es-PR" => [
      1505826,
      4954
    ],
    "es-PY" => [
      1510794,
      4929
    ],
    "es-SV" => [
      1515737,
      4939
    ],
    "es-US" => [
      1520690,
      4953
    ],
    "es-UY" => [
      1525657,
      4921
    ],
    "es-VE" => [
      1530592,
      4886
    ],
    et => [
      1535489,
      4498
    ],
    "et-EE" => [
      1540001,
      4512
    ],
    eu => [
      1544524,
      4490
    ],
    "eu-ES" => [
      1549028,
      4515
    ],
    ewo => [
      1553555,
      6063
    ],
    "ewo-CM" => [
      1559633,
      6128
    ],
    fa => [
      1565772,
      10081
    ],
    "fa-AF" => [
      1575867,
      10102
    ],
    "fa-IR" => [
      1585983,
      10307
    ],
    ff => [
      1596301,
      4354
    ],
    "ff-CM" => [
      1600669,
      4385
    ],
    "ff-GN" => [
      1605068,
      4373
    ],
    "ff-MR" => [
      1609455,
      4393
    ],
    "ff-SN" => [
      1613862,
      4374
    ],
    fi => [
      1618247,
      4756
    ],
    "fi-FI" => [
      1623017,
      4784
    ],
    fil => [
      1627813,
      4387
    ],
    "fil-PH" => [
      1632215,
      4417
    ],
    fo => [
      1636643,
      4916
    ],
    "fo-DK" => [
      1641573,
      4943
    ],
    "fo-FO" => [
      1646530,
      4964
    ],
    fr => [
      1651505,
      4521
    ],
    "fr-BE" => [
      1656040,
      4554
    ],
    "fr-BF" => [
      1660608,
      4568
    ],
    "fr-BI" => [
      1665190,
      4548
    ],
    "fr-BJ" => [
      1669752,
      4558
    ],
    "fr-BL" => [
      1674324,
      4616
    ],
    "fr-CA" => [
      1678954,
      4578
    ],
    "fr-CD" => [
      1683546,
      4580
    ],
    "fr-CF" => [
      1688140,
      4636
    ],
    "fr-CG" => [
      1692790,
      4592
    ],
    "fr-CH" => [
      1697396,
      4553
    ],
    "fr-CI" => [
      1701963,
      4644
    ],
    "fr-CM" => [
      1706621,
      4552
    ],
    "fr-DJ" => [
      1711187,
      4556
    ],
    "fr-DZ" => [
      1715757,
      4570
    ],
    "fr-GA" => [
      1720341,
      4540
    ],
    "fr-GF" => [
      1724895,
      4596
    ],
    "fr-GN" => [
      1729505,
      4562
    ],
    "fr-GP" => [
      1734081,
      4560
    ],
    "fr-GQ" => [
      1738655,
      4626
    ],
    "fr-HT" => [
      1743295,
      4558
    ],
    "fr-KM" => [
      1747867,
      4548
    ],
    "fr-LU" => [
      1752429,
      4551
    ],
    "fr-MA" => [
      1756994,
      4540
    ],
    "fr-MC" => [
      1761548,
      4544
    ],
    "fr-MF" => [
      1766106,
      4564
    ],
    "fr-MG" => [
      1770684,
      4560
    ],
    "fr-ML" => [
      1775258,
      4536
    ],
    "fr-MQ" => [
      1779808,
      4560
    ],
    "fr-MR" => [
      1784382,
      4564
    ],
    "fr-MU" => [
      1788960,
      4552
    ],
    "fr-NC" => [
      1793526,
      4600
    ],
    "fr-NE" => [
      1798140,
      4540
    ],
    "fr-PF" => [
      1802694,
      4626
    ],
    "fr-PM" => [
      1807334,
      4610
    ],
    "fr-RE" => [
      1811958,
      4590
    ],
    "fr-RW" => [
      1816562,
      4544
    ],
    "fr-SC" => [
      1821120,
      4560
    ],
    "fr-SN" => [
      1825694,
      4584
    ],
    "fr-SY" => [
      1830292,
      4544
    ],
    "fr-TD" => [
      1834850,
      4542
    ],
    "fr-TG" => [
      1839406,
      4536
    ],
    "fr-TN" => [
      1843956,
      4552
    ],
    "fr-VU" => [
      1848522,
      4552
    ],
    "fr-WF" => [
      1853088,
      4582
    ],
    "fr-YT" => [
      1857684,
      4548
    ],
    fur => [
      1862244,
      4395
    ],
    "fur-IT" => [
      1866654,
      4409
    ],
    fy => [
      1871074,
      4278
    ],
    "fy-NL" => [
      1875366,
      4324
    ],
    ga => [
      1879701,
      4957
    ],
    "ga-IE" => [
      1884672,
      4987
    ],
    gd => [
      1889670,
      4817
    ],
    "gd-GB" => [
      1894501,
      4897
    ],
    gl => [
      1899409,
      4507
    ],
    "gl-ES" => [
      1903930,
      4537
    ],
    gsw => [
      1908479,
      4612
    ],
    "gsw-CH" => [
      1913106,
      4647
    ],
    "gsw-FR" => [
      1917768,
      4643
    ],
    "gsw-LI" => [
      1922426,
      4699
    ],
    gu => [
      1927136,
      9840
    ],
    "gu-IN" => [
      1936990,
      9945
    ],
    guz => [
      1946947,
      4332
    ],
    "guz-KE" => [
      1951294,
      4351
    ],
    gv => [
      1955656,
      4332
    ],
    "gv-IM" => [
      1960002,
      4377
    ],
    ha => [
      1964390,
      4337
    ],
    "ha-GH" => [
      1968741,
      4354
    ],
    "ha-NE" => [
      1973109,
      4352
    ],
    "ha-NG" => [
      1977475,
      4370
    ],
    haw => [
      1981857,
      4463
    ],
    "haw-US" => [
      1986335,
      4580
    ],
    he => [
      1990926,
      9429
    ],
    "he-IL" => [
      2000369,
      9543
    ],
    "hi-IN" => [
      2009926,
      9727
    ],
    hr => [
      2019664,
      4591
    ],
    "hr-BA" => [
      2024269,
      4668
    ],
    "hr-HR" => [
      2028951,
      4608
    ],
    hsb => [
      2033571,
      4695
    ],
    "hsb-DE" => [
      2038281,
      4729
    ],
    hu => [
      2043021,
      4928
    ],
    "hu-HU" => [
      2047963,
      4993
    ],
    hy => [
      2052967,
      9980
    ],
    "hy-AM" => [
      2062961,
      10144
    ],
    id => [
      2073116,
      4254
    ],
    "id-ID" => [
      2077384,
      4280
    ],
    ig => [
      2081675,
      4823
    ],
    "ig-NG" => [
      2086512,
      4842
    ],
    ii => [
      2091365,
      6170
    ],
    "ii-CN" => [
      2097549,
      6219
    ],
    is => [
      2103779,
      5094
    ],
    "is-IS" => [
      2108887,
      5132
    ],
    it => [
      2114030,
      4416
    ],
    "it-CH" => [
      2118460,
      4448
    ],
    "it-IT" => [
      2122922,
      4430
    ],
    "it-SM" => [
      2127366,
      4455
    ],
    ja => [
      2131832,
      6072
    ],
    jgo => [
      2137916,
      8364
    ],
    "jgo-CM" => [
      2146295,
      8429
    ],
    jmc => [
      2154736,
      4266
    ],
    "jmc-TZ" => [
      2159017,
      4297
    ],
    ka => [
      2163325,
      9566
    ],
    "ka-GE" => [
      2172905,
      9809
    ],
    kab => [
      2182726,
      5001
    ],
    "kab-DZ" => [
      2187742,
      5030
    ],
    kam => [
      2192784,
      5003
    ],
    "kam-KE" => [
      2197802,
      5022
    ],
    kde => [
      2202836,
      4728
    ],
    "kde-TZ" => [
      2207579,
      4759
    ],
    kea => [
      2212350,
      4550
    ],
    "kea-CV" => [
      2216915,
      4589
    ],
    khq => [
      2221516,
      4498
    ],
    "khq-ML" => [
      2226029,
      4515
    ],
    ki => [
      2230555,
      4726
    ],
    "ki-KE" => [
      2235295,
      4745
    ],
    kk => [
      2240051,
      9278
    ],
    "kk-KZ" => [
      2249343,
      9465
    ],
    kkj => [
      2258820,
      5448
    ],
    "kkj-CM" => [
      2264283,
      5495
    ],
    kl => [
      2269789,
      4239
    ],
    "kl-GL" => [
      2274042,
      4279
    ],
    kln => [
      2278333,
      4506
    ],
    "kln-KE" => [
      2282854,
      4539
    ],
    km => [
      2287404,
      10095
    ],
    "km-KH" => [
      2297513,
      10517
    ],
    kn => [
      2308041,
      10131
    ],
    "kn-IN" => [
      2318186,
      10236
    ],
    ko => [
      2328433,
      6493
    ],
    "ko-KP" => [
      2334940,
      6734
    ],
    "ko-KR" => [
      2341688,
      6644
    ],
    kok => [
      2348344,
      9031
    ],
    "kok-IN" => [
      2357390,
      9136
    ],
    ks => [
      2366537,
      10565
    ],
    "ks-IN" => [
      2377116,
      10790
    ],
    ksb => [
      2387918,
      4313
    ],
    "ksb-TZ" => [
      2392246,
      4344
    ],
    ksf => [
      2396602,
      7104
    ],
    "ksf-CM" => [
      2403721,
      7169
    ],
    ksh => [
      2410902,
      4603
    ],
    "ksh-DE" => [
      2415520,
      4656
    ],
    kw => [
      2420187,
      4216
    ],
    "kw-GB" => [
      2424417,
      4262
    ],
    ky => [
      2428690,
      9106
    ],
    "ky-KG" => [
      2437810,
      9326
    ],
    lag => [
      2447148,
      5344
    ],
    "lag-TZ" => [
      2452507,
      5395
    ],
    lb => [
      2457913,
      4525
    ],
    "lb-LU" => [
      2462452,
      4573
    ],
    lg => [
      2467036,
      4325
    ],
    "lg-UG" => [
      2471375,
      4341
    ],
    lkt => [
      2475728,
      7514
    ],
    "lkt-US" => [
      2483257,
      7691
    ],
    ln => [
      2490959,
      6363
    ],
    "ln-AO" => [
      2497336,
      6404
    ],
    "ln-CD" => [
      2503754,
      6470
    ],
    "ln-CF" => [
      2510238,
      6498
    ],
    "ln-CG" => [
      2516750,
      6410
    ],
    lo => [
      2523171,
      8955
    ],
    "lo-LA" => [
      2532140,
      9026
    ],
    lrc => [
      2541178,
      7119
    ],
    "lrc-IQ" => [
      2548312,
      7134
    ],
    "lrc-IR" => [
      2555461,
      7130
    ],
    lt => [
      2562602,
      5038
    ],
    "lt-LT" => [
      2567654,
      5060
    ],
    lu => [
      2572725,
      4713
    ],
    "lu-CD" => [
      2577452,
      4776
    ],
    luo => [
      2582240,
      4567
    ],
    "luo-KE" => [
      2586822,
      4586
    ],
    luy => [
      2591420,
      4324
    ],
    "luy-KE" => [
      2595759,
      4343
    ],
    lv => [
      2600113,
      4941
    ],
    "lv-LV" => [
      2605068,
      4977
    ],
    mas => [
      2610057,
      5708
    ],
    "mas-KE" => [
      2615780,
      5727
    ],
    "mas-TZ" => [
      2621522,
      5739
    ],
    mer => [
      2627273,
      5130
    ],
    "mer-KE" => [
      2632418,
      5149
    ],
    mfe => [
      2637579,
      4301
    ],
    "mfe-MU" => [
      2641895,
      4328
    ],
    mg => [
      2646234,
      4439
    ],
    "mg-MG" => [
      2650687,
      4473
    ],
    mgh => [
      2655172,
      4480
    ],
    "mgh-MZ" => [
      2659667,
      4519
    ],
    mgo => [
      2664198,
      5453
    ],
    "mgo-CM" => [
      2669666,
      5482
    ],
    mk => [
      2675159,
      10271
    ],
    "mk-MK" => [
      2685444,
      10481
    ],
    ml => [
      2695936,
      11232
    ],
    "ml-IN" => [
      2707182,
      11377
    ],
    mn => [
      2718570,
      10397
    ],
    "mn-MN" => [
      2728981,
      10553
    ],
    mr => [
      2739545,
      10176
    ],
    "mr-IN" => [
      2749735,
      10281
    ],
    ms => [
      2760027,
      4216
    ],
    "ms-BN" => [
      2764257,
      4234
    ],
    "ms-MY" => [
      2768505,
      4263
    ],
    "ms-SG" => [
      2772782,
      4251
    ],
    mt => [
      2777044,
      4610
    ],
    "mt-MT" => [
      2781668,
      4655
    ],
    mua => [
      2786335,
      5178
    ],
    "mua-CM" => [
      2791528,
      5225
    ],
    my => [
      2796764,
      11128
    ],
    "my-MM" => [
      2807906,
      11309
    ],
    mzn => [
      2819227,
      6509
    ],
    "mzn-IR" => [
      2825751,
      6616
    ],
    naq => [
      2832379,
      5191
    ],
    "naq-NA" => [
      2837585,
      5220
    ],
    nb => [
      2842816,
      4482
    ],
    "nb-NO" => [
      2847312,
      4514
    ],
    "nb-SJ" => [
      2851840,
      4563
    ],
    nd => [
      2856414,
      4310
    ],
    "nd-ZW" => [
      2860738,
      4341
    ],
    ne => [
      2865090,
      10794
    ],
    "ne-IN" => [
      2875898,
      10887
    ],
    "ne-NP" => [
      2886799,
      10919
    ],
    nl => [
      2897729,
      4271
    ],
    "nl-AW" => [
      2902014,
      4290
    ],
    "nl-BE" => [
      2906318,
      4304
    ],
    "nl-BQ" => [
      2910636,
      4350
    ],
    "nl-CW" => [
      2915000,
      4334
    ],
    "nl-NL" => [
      2919348,
      4301
    ],
    "nl-SR" => [
      2923663,
      4302
    ],
    "nl-SX" => [
      2927979,
      4318
    ],
    nmg => [
      2932309,
      5556
    ],
    "nmg-CM" => [
      2937880,
      5585
    ],
    nn => [
      2943476,
      4392
    ],
    "nn-NO" => [
      2947882,
      4424
    ],
    nnh => [
      2952318,
      8860
    ],
    "nnh-CM" => [
      2961193,
      8925
    ],
    nus => [
      2970130,
      5632
    ],
    "nus-SS" => [
      2975777,
      5657
    ],
    nyn => [
      2981446,
      4427
    ],
    "nyn-UG" => [
      2985888,
      4450
    ],
    om => [
      2990349,
      4273
    ],
    "om-ET" => [
      2994636,
      4297
    ],
    "om-KE" => [
      2998947,
      4283
    ],
    or => [
      3003241,
      8928
    ],
    "or-IN" => [
      3012183,
      9037
    ],
    os => [
      3021231,
      9382
    ],
    "os-GE" => [
      3030627,
      9615
    ],
    "os-RU" => [
      3040256,
      9501
    ],
    pa => [
      3049768,
      9615
    ],
    "pa-Arab" => [
      3059399,
      9269
    ],
    "pa-Arab-PK" => [
      3068687,
      9492
    ],
    "pa-Guru" => [
      3078195,
      9620
    ],
    "pa-Guru-IN" => [
      3087834,
      9861
    ],
    pl => [
      3097706,
      4709
    ],
    "pl-PL" => [
      3102429,
      4720
    ],
    prg => [
      3107161,
      4012
    ],
    "prg-001" => [
      3111189,
      4028
    ],
    ps => [
      3115228,
      7905
    ],
    "ps-AF" => [
      3123147,
      8106
    ],
    pt => [
      3131264,
      4748
    ],
    "pt-AO" => [
      3136026,
      4864
    ],
    "pt-CH" => [
      3140904,
      4908
    ],
    "pt-CV" => [
      3145826,
      4880
    ],
    "pt-GQ" => [
      3150720,
      4924
    ],
    "pt-GW" => [
      3155658,
      4908
    ],
    "pt-LU" => [
      3160580,
      4880
    ],
    "pt-MO" => [
      3165474,
      4912
    ],
    "pt-MZ" => [
      3170400,
      4898
    ],
    "pt-PT" => [
      3175312,
      4872
    ],
    "pt-ST" => [
      3180198,
      5024
    ],
    "pt-TL" => [
      3185236,
      4884
    ],
    qu => [
      3190131,
      4281
    ],
    "qu-BO" => [
      3194426,
      4308
    ],
    "qu-EC" => [
      3198748,
      4308
    ],
    "qu-PE" => [
      3203070,
      4314
    ],
    rm => [
      3207395,
      4565
    ],
    "rm-CH" => [
      3211974,
      4598
    ],
    rn => [
      3216583,
      4536
    ],
    "rn-BI" => [
      3221133,
      4565
    ],
    ro => [
      3225709,
      4672
    ],
    "ro-MD" => [
      3230395,
      4653
    ],
    "ro-RO" => [
      3235062,
      4710
    ],
    rof => [
      3239784,
      4508
    ],
    "rof-TZ" => [
      3244307,
      4539
    ],
    root => [
      3248859,
      3977
    ],
    ru => [
      3252847,
      9592
    ],
    "ru-BY" => [
      3262453,
      9765
    ],
    "ru-KG" => [
      3272232,
      9771
    ],
    "ru-KZ" => [
      3282017,
      9791
    ],
    "ru-MD" => [
      3291822,
      9745
    ],
    "ru-RU" => [
      3301581,
      9711
    ],
    "ru-UA" => [
      3311306,
      9737
    ],
    rw => [
      3321054,
      4399
    ],
    "rw-RW" => [
      3325467,
      4413
    ],
    rwk => [
      3329892,
      4252
    ],
    "rwk-TZ" => [
      3334159,
      4283
    ],
    sah => [
      3338454,
      10441
    ],
    "sah-RU" => [
      3348910,
      10632
    ],
    saq => [
      3359554,
      4558
    ],
    "saq-KE" => [
      3364127,
      4577
    ],
    sbp => [
      3368716,
      4256
    ],
    "sbp-TZ" => [
      3372987,
      4289
    ],
    se => [
      3377287,
      5029
    ],
    "se-FI" => [
      3382330,
      5054
    ],
    "se-NO" => [
      3387398,
      5051
    ],
    "se-SE" => [
      3392463,
      5088
    ],
    seh => [
      3397563,
      4361
    ],
    "seh-MZ" => [
      3401939,
      4418
    ],
    ses => [
      3406369,
      4514
    ],
    "ses-ML" => [
      3410898,
      4531
    ],
    sg => [
      3415440,
      5425
    ],
    "sg-CF" => [
      3420879,
      5642
    ],
    shi => [
      3426533,
      8788
    ],
    "shi-Latn" => [
      3435338,
      4778
    ],
    "shi-Latn-MA" => [
      3440136,
      4835
    ],
    "shi-Tfng" => [
      3444988,
      8793
    ],
    "shi-Tfng-MA" => [
      3453801,
      8946
    ],
    si => [
      3462758,
      10481
    ],
    "si-LK" => [
      3473253,
      10741
    ],
    sk => [
      3484005,
      4759
    ],
    "sk-SK" => [
      3488778,
      4809
    ],
    sl => [
      3493598,
      4663
    ],
    "sl-SI" => [
      3498275,
      4689
    ],
    smn => [
      3502976,
      5131
    ],
    "smn-FI" => [
      3508122,
      5172
    ],
    sn => [
      3513305,
      4271
    ],
    "sn-ZW" => [
      3517590,
      4302
    ],
    so => [
      3521903,
      4438
    ],
    "so-DJ" => [
      3526355,
      4452
    ],
    "so-ET" => [
      3530821,
      4458
    ],
    "so-KE" => [
      3535293,
      4446
    ],
    "so-SO" => [
      3539753,
      4460
    ],
    sq => [
      3544224,
      4749
    ],
    "sq-AL" => [
      3548987,
      4806
    ],
    "sq-MK" => [
      3553807,
      4776
    ],
    "sq-XK" => [
      3558597,
      4784
    ],
    sr => [
      3563392,
      9296
    ],
    "sr-Cyrl" => [
      3572704,
      9301
    ],
    "sr-Cyrl-BA" => [
      3582024,
      9856
    ],
    "sr-Cyrl-ME" => [
      3591899,
      9654
    ],
    "sr-Cyrl-RS" => [
      3601572,
      9604
    ],
    "sr-Cyrl-XK" => [
      3611195,
      9604
    ],
    "sr-Latn" => [
      3620815,
      4535
    ],
    "sr-Latn-BA" => [
      3625369,
      4634
    ],
    "sr-Latn-ME" => [
      3630022,
      4594
    ],
    "sr-Latn-RS" => [
      3634635,
      4578
    ],
    "sr-Latn-XK" => [
      3639232,
      4580
    ],
    sv => [
      3643823,
      4488
    ],
    "sv-AX" => [
      3648325,
      4559
    ],
    "sv-FI" => [
      3652898,
      4518
    ],
    "sv-SE" => [
      3657430,
      4513
    ],
    sw => [
      3661954,
      4387
    ],
    "sw-CD" => [
      3666355,
      4578
    ],
    "sw-KE" => [
      3670947,
      4412
    ],
    "sw-TZ" => [
      3675373,
      4418
    ],
    "sw-UG" => [
      3679805,
      4410
    ],
    ta => [
      3684226,
      10080
    ],
    "ta-IN" => [
      3694320,
      10245
    ],
    "ta-LK" => [
      3704579,
      10213
    ],
    "ta-MY" => [
      3714806,
      10235
    ],
    "ta-SG" => [
      3725055,
      10317
    ],
    te => [
      3735383,
      10314
    ],
    "te-IN" => [
      3745711,
      10500
    ],
    teo => [
      3756223,
      4437
    ],
    "teo-KE" => [
      3760675,
      4456
    ],
    "teo-UG" => [
      3765146,
      4460
    ],
    th => [
      3769617,
      10717
    ],
    "th-TH" => [
      3780348,
      10796
    ],
    ti => [
      3791155,
      7125
    ],
    "ti-ER" => [
      3798294,
      7091
    ],
    "ti-ET" => [
      3805399,
      7253
    ],
    tk => [
      3812663,
      4030
    ],
    "tk-TM" => [
      3816707,
      4042
    ],
    to => [
      3820760,
      4818
    ],
    "to-TO" => [
      3825592,
      4837
    ],
    tr => [
      3830440,
      4800
    ],
    "tr-CY" => [
      3835254,
      4863
    ],
    "tr-TR" => [
      3840131,
      4834
    ],
    twq => [
      3844977,
      4408
    ],
    "twq-NE" => [
      3849400,
      4445
    ],
    tzm => [
      3853857,
      4651
    ],
    "tzm-MA" => [
      3858523,
      4712
    ],
    ug => [
      3863246,
      10622
    ],
    "ug-CN" => [
      3873882,
      10763
    ],
    uk => [
      3884656,
      9328
    ],
    "uk-UA" => [
      3893998,
      9470
    ],
    ur => [
      3903479,
      9566
    ],
    "ur-IN" => [
      3913059,
      9691
    ],
    "ur-PK" => [
      3922764,
      9743
    ],
    uz => [
      3932518,
      4273
    ],
    "uz-Arab" => [
      3936807,
      6680
    ],
    "uz-Arab-AF" => [
      3943506,
      6969
    ],
    "uz-Cyrl" => [
      3950491,
      8033
    ],
    "uz-Cyrl-UZ" => [
      3958543,
      8407
    ],
    "uz-Latn" => [
      3966966,
      4278
    ],
    "uz-Latn-UZ" => [
      3971263,
      4353
    ],
    vai => [
      3975628,
      6047
    ],
    "vai-Latn" => [
      3981692,
      4671
    ],
    "vai-Latn-LR" => [
      3986383,
      4714
    ],
    "vai-Vaii" => [
      3991114,
      6052
    ],
    "vai-Vaii-LR" => [
      3997186,
      6155
    ],
    vi => [
      4003352,
      5050
    ],
    "vi-VN" => [
      4008416,
      5107
    ],
    vo => [
      4013534,
      3995
    ],
    "vo-001" => [
      4017544,
      4011
    ],
    vun => [
      4021567,
      4260
    ],
    "vun-TZ" => [
      4025842,
      4291
    ],
    wae => [
      4030145,
      4727
    ],
    "wae-CH" => [
      4034887,
      4753
    ],
    xog => [
      4039652,
      4467
    ],
    "xog-UG" => [
      4044134,
      4492
    ],
    yav => [
      4048638,
      6039
    ],
    "yav-CM" => [
      4054692,
      6086
    ],
    yi => [
      4060789,
      9045
    ],
    "yi-001" => [
      4069849,
      9155
    ],
    yo => [
      4079015,
      7447
    ],
    "yo-BJ" => [
      4086476,
      7408
    ],
    "yo-NG" => [
      4093898,
      7727
    ],
    yue => [
      4101637,
      5969
    ],
    "yue-HK" => [
      4107621,
      6448
    ],
    zgh => [
      4114081,
      8798
    ],
    "zgh-MA" => [
      4122894,
      8931
    ],
    zh => [
      4131836,
      6489
    ],
    "zh-Hans" => [
      4138341,
      6494
    ],
    "zh-Hans-HK" => [
      4144854,
      6814
    ],
    "zh-Hans-MO" => [
      4151687,
      6868
    ],
    "zh-Hans-SG" => [
      4158574,
      6744
    ],
    "zh-Hant" => [
      4165334,
      5969
    ],
    "zh-Hant-HK" => [
      4171322,
      6260
    ],
    "zh-Hant-MO" => [
      4177601,
      6252
    ],
    zu => [
      4183864,
      4276
    ],
    "zu-ZA" => [
      4188154,
      4318
    ]
  );
  ### :end DataSectionIndex:
  #>>>
  
  sub locale_data {
      my $code = shift;
      return $LocaleData{$code} if $LocaleData{$code};
  
      my $data_string = _data_string_for($code)
          or return;
  
      my $data;
      my $e = do {
          local $@;
          $data = eval $data_string;
          $@;
      };
  
      die $e if $e;
  
      return $LocaleData{$code} = $data;
  }
  
  {
      my $locale_data = do { local $/; <DATA> };
  
      sub _data_string_for {
          my $code = shift;
  
          my $idx = $DataSectionIndex{$code}
              or return;
  
          return substr( $locale_data, $idx->[0], $idx->[1] );
      }
  }
  
  # ABSTRACT: Locale data generated from CLDR
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::Locale::Data - Locale data generated from CLDR
  
  =head1 VERSION
  
  version 1.05
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime-Locale>
  (or L<bug-datetime-locale@rt.cpan.org|mailto:bug-datetime-locale@rt.cpan.org>).
  
  There is a mailing list available for users of this distribution,
  L<mailto:datetime@perl.org>.
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2016 by Dave Rolsky.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
  
  __DATA__
  __[ af ]__
  {
    am_pm_abbreviated => [
      "vm.",
      "nm."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E hh:mm a",
      Ehms => "E hh:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, dd MMM y G",
      GyMMMd => "dd MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMM",
      MMMd => "d MMM",
      Md => "dd-MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM-y",
      yMEd => "E y-MM-dd",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "af",
    date_format_full => "EEEE, dd MMMM y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd MMM y",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ma.",
      "Di.",
      "Wo.",
      "Do.",
      "Vr.",
      "Sa.",
      "So."
    ],
    day_format_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "S",
      "S"
    ],
    day_format_wide => [
      "Maandag",
      "Dinsdag",
      "Woensdag",
      "Donderdag",
      "Vrydag",
      "Saterdag",
      "Sondag"
    ],
    day_stand_alone_abbreviated => [
      "Ma.",
      "Di.",
      "Wo.",
      "Do.",
      "Vr.",
      "Sa.",
      "So."
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Maandag",
      "Dinsdag",
      "Woensdag",
      "Donderdag",
      "Vrydag",
      "Saterdag",
      "Sondag"
    ],
    era_abbreviated => [
      "v.C.",
      "n.C."
    ],
    era_narrow => [
      "v.C.",
      "n.C."
    ],
    era_wide => [
      "voor Christus",
      "na Christus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Afrikaans",
    month_format_abbreviated => [
      "Jan.",
      "Feb.",
      "Mrt.",
      "Apr.",
      "Mei",
      "Jun.",
      "Jul.",
      "Aug.",
      "Sep.",
      "Okt.",
      "Nov.",
      "Des."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januarie",
      "Februarie",
      "Maart",
      "April",
      "Mei",
      "Junie",
      "Julie",
      "Augustus",
      "September",
      "Oktober",
      "November",
      "Desember"
    ],
    month_stand_alone_abbreviated => [
      "Jan.",
      "Feb.",
      "Mrt.",
      "Apr.",
      "Mei",
      "Jun.",
      "Jul.",
      "Aug.",
      "Sep.",
      "Okt.",
      "Nov.",
      "Des."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januarie",
      "Februarie",
      "Maart",
      "April",
      "Mei",
      "Junie",
      "Julie",
      "Augustus",
      "September",
      "Oktober",
      "November",
      "Desember"
    ],
    name => "Afrikaans",
    native_language => "Afrikaans",
    native_name => "Afrikaans",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1ste kwartaal",
      "2de kwartaal",
      "3de kwartaal",
      "4de kwartaal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1ste kwartaal",
      "2de kwartaal",
      "3de kwartaal",
      "4de kwartaal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ af-NA ]__
  {
    am_pm_abbreviated => [
      "vm.",
      "nm."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E hh:mm a",
      Ehms => "E hh:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, dd MMM y G",
      GyMMMd => "dd MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMM",
      MMMd => "d MMM",
      Md => "dd-MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM-y",
      yMEd => "E y-MM-dd",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "af-NA",
    date_format_full => "EEEE, dd MMMM y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd MMM y",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ma.",
      "Di.",
      "Wo.",
      "Do.",
      "Vr.",
      "Sa.",
      "So."
    ],
    day_format_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "S",
      "S"
    ],
    day_format_wide => [
      "Maandag",
      "Dinsdag",
      "Woensdag",
      "Donderdag",
      "Vrydag",
      "Saterdag",
      "Sondag"
    ],
    day_stand_alone_abbreviated => [
      "Ma.",
      "Di.",
      "Wo.",
      "Do.",
      "Vr.",
      "Sa.",
      "So."
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Maandag",
      "Dinsdag",
      "Woensdag",
      "Donderdag",
      "Vrydag",
      "Saterdag",
      "Sondag"
    ],
    era_abbreviated => [
      "v.C.",
      "n.C."
    ],
    era_narrow => [
      "v.C.",
      "n.C."
    ],
    era_wide => [
      "voor Christus",
      "na Christus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Afrikaans",
    month_format_abbreviated => [
      "Jan.",
      "Feb.",
      "Mrt.",
      "Apr.",
      "Mei",
      "Jun.",
      "Jul.",
      "Aug.",
      "Sep.",
      "Okt.",
      "Nov.",
      "Des."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januarie",
      "Februarie",
      "Maart",
      "April",
      "Mei",
      "Junie",
      "Julie",
      "Augustus",
      "September",
      "Oktober",
      "November",
      "Desember"
    ],
    month_stand_alone_abbreviated => [
      "Jan.",
      "Feb.",
      "Mrt.",
      "Apr.",
      "Mei",
      "Jun.",
      "Jul.",
      "Aug.",
      "Sep.",
      "Okt.",
      "Nov.",
      "Des."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januarie",
      "Februarie",
      "Maart",
      "April",
      "Mei",
      "Junie",
      "Julie",
      "Augustus",
      "September",
      "Oktober",
      "November",
      "Desember"
    ],
    name => "Afrikaans Namibia",
    native_language => "Afrikaans",
    native_name => "Afrikaans Namibi\N{U+00eb}",
    native_script => undef,
    native_territory => "Namibi\N{U+00eb}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1ste kwartaal",
      "2de kwartaal",
      "3de kwartaal",
      "4de kwartaal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1ste kwartaal",
      "2de kwartaal",
      "3de kwartaal",
      "4de kwartaal"
    ],
    script => undef,
    territory => "Namibia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ af-ZA ]__
  {
    am_pm_abbreviated => [
      "vm.",
      "nm."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E hh:mm a",
      Ehms => "E hh:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, dd MMM y G",
      GyMMMd => "dd MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMM",
      MMMd => "d MMM",
      Md => "dd-MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM-y",
      yMEd => "E y-MM-dd",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "af-ZA",
    date_format_full => "EEEE, dd MMMM y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd MMM y",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ma.",
      "Di.",
      "Wo.",
      "Do.",
      "Vr.",
      "Sa.",
      "So."
    ],
    day_format_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "S",
      "S"
    ],
    day_format_wide => [
      "Maandag",
      "Dinsdag",
      "Woensdag",
      "Donderdag",
      "Vrydag",
      "Saterdag",
      "Sondag"
    ],
    day_stand_alone_abbreviated => [
      "Ma.",
      "Di.",
      "Wo.",
      "Do.",
      "Vr.",
      "Sa.",
      "So."
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Maandag",
      "Dinsdag",
      "Woensdag",
      "Donderdag",
      "Vrydag",
      "Saterdag",
      "Sondag"
    ],
    era_abbreviated => [
      "v.C.",
      "n.C."
    ],
    era_narrow => [
      "v.C.",
      "n.C."
    ],
    era_wide => [
      "voor Christus",
      "na Christus"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Afrikaans",
    month_format_abbreviated => [
      "Jan.",
      "Feb.",
      "Mrt.",
      "Apr.",
      "Mei",
      "Jun.",
      "Jul.",
      "Aug.",
      "Sep.",
      "Okt.",
      "Nov.",
      "Des."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januarie",
      "Februarie",
      "Maart",
      "April",
      "Mei",
      "Junie",
      "Julie",
      "Augustus",
      "September",
      "Oktober",
      "November",
      "Desember"
    ],
    month_stand_alone_abbreviated => [
      "Jan.",
      "Feb.",
      "Mrt.",
      "Apr.",
      "Mei",
      "Jun.",
      "Jul.",
      "Aug.",
      "Sep.",
      "Okt.",
      "Nov.",
      "Des."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januarie",
      "Februarie",
      "Maart",
      "April",
      "Mei",
      "Junie",
      "Julie",
      "Augustus",
      "September",
      "Oktober",
      "November",
      "Desember"
    ],
    name => "Afrikaans South Africa",
    native_language => "Afrikaans",
    native_name => "Afrikaans Suid-Afrika",
    native_script => undef,
    native_territory => "Suid-Afrika",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1ste kwartaal",
      "2de kwartaal",
      "3de kwartaal",
      "4de kwartaal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1ste kwartaal",
      "2de kwartaal",
      "3de kwartaal",
      "4de kwartaal"
    ],
    script => undef,
    territory => "South Africa",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ agq ]__
  {
    am_pm_abbreviated => [
      "a.g",
      "a.k"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "agq",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "kpa",
      "gh\N{U+0254}",
      "t\N{U+0254}m",
      "ume",
      "gh\N{U+0268}",
      "dzk",
      "nts"
    ],
    day_format_narrow => [
      "k",
      "g",
      "t",
      "u",
      "g",
      "d",
      "n"
    ],
    day_format_wide => [
      "tsu\N{U+0294}ukp\N{U+00e0}",
      "tsu\N{U+0294}ugh\N{U+0254}e",
      "tsu\N{U+0294}ut\N{U+0254}\N{U+0300}ml\N{U+00f2}",
      "tsu\N{U+0294}um\N{U+00e8}",
      "tsu\N{U+0294}ugh\N{U+0268}\N{U+0302}m",
      "tsu\N{U+0294}ndz\N{U+0268}k\N{U+0254}\N{U+0294}\N{U+0254}",
      "tsu\N{U+0294}nts\N{U+0268}"
    ],
    day_stand_alone_abbreviated => [
      "kpa",
      "gh\N{U+0254}",
      "t\N{U+0254}m",
      "ume",
      "gh\N{U+0268}",
      "dzk",
      "nts"
    ],
    day_stand_alone_narrow => [
      "k",
      "g",
      "t",
      "u",
      "g",
      "d",
      "n"
    ],
    day_stand_alone_wide => [
      "tsu\N{U+0294}ukp\N{U+00e0}",
      "tsu\N{U+0294}ugh\N{U+0254}e",
      "tsu\N{U+0294}ut\N{U+0254}\N{U+0300}ml\N{U+00f2}",
      "tsu\N{U+0294}um\N{U+00e8}",
      "tsu\N{U+0294}ugh\N{U+0268}\N{U+0302}m",
      "tsu\N{U+0294}ndz\N{U+0268}k\N{U+0254}\N{U+0294}\N{U+0254}",
      "tsu\N{U+0294}nts\N{U+0268}"
    ],
    era_abbreviated => [
      "SK",
      "BK"
    ],
    era_narrow => [
      "SK",
      "BK"
    ],
    era_wide => [
      "S\N{U+011b}e K\N{U+0268}\N{U+0300}lesto",
      "B\N{U+01ce}a K\N{U+0268}\N{U+0300}lesto"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Aghem",
    month_format_abbreviated => [
      "n\N{U+00f9}m",
      "k\N{U+0268}z",
      "t\N{U+0268}d",
      "taa",
      "see",
      "nzu",
      "dum",
      "f\N{U+0254}e",
      "dzu",
      "l\N{U+0254}m",
      "kaa",
      "fwo"
    ],
    month_format_narrow => [
      "n",
      "k",
      "t",
      "t",
      "s",
      "z",
      "k",
      "f",
      "d",
      "l",
      "c",
      "f"
    ],
    month_format_wide => [
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}n\N{U+00f9}m",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}k\N{U+0197}\N{U+0300}z\N{U+00f9}\N{U+0294}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}t\N{U+0197}\N{U+0300}d\N{U+0289}\N{U+0300}gh\N{U+00e0}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}t\N{U+01ce}af\N{U+0289}\N{U+0304}gh\N{U+0101}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+00e8}s\N{U+00e8}e",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}nz\N{U+00f9}gh\N{U+00f2}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}d\N{U+00f9}mlo",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}kw\N{U+00ee}f\N{U+0254}\N{U+0300}e",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}t\N{U+0197}\N{U+0300}f\N{U+0289}\N{U+0300}gh\N{U+00e0}dzugh\N{U+00f9}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}gh\N{U+01d4}uwel\N{U+0254}\N{U+0300}m",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}chwa\N{U+0294}\N{U+00e0}kaa wo",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+00e8}fw\N{U+00f2}o"
    ],
    month_stand_alone_abbreviated => [
      "n\N{U+00f9}m",
      "k\N{U+0268}z",
      "t\N{U+0268}d",
      "taa",
      "see",
      "nzu",
      "dum",
      "f\N{U+0254}e",
      "dzu",
      "l\N{U+0254}m",
      "kaa",
      "fwo"
    ],
    month_stand_alone_narrow => [
      "n",
      "k",
      "t",
      "t",
      "s",
      "z",
      "k",
      "f",
      "d",
      "l",
      "c",
      "f"
    ],
    month_stand_alone_wide => [
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}n\N{U+00f9}m",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}k\N{U+0197}\N{U+0300}z\N{U+00f9}\N{U+0294}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}t\N{U+0197}\N{U+0300}d\N{U+0289}\N{U+0300}gh\N{U+00e0}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}t\N{U+01ce}af\N{U+0289}\N{U+0304}gh\N{U+0101}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+00e8}s\N{U+00e8}e",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}nz\N{U+00f9}gh\N{U+00f2}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}d\N{U+00f9}mlo",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}kw\N{U+00ee}f\N{U+0254}\N{U+0300}e",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}t\N{U+0197}\N{U+0300}f\N{U+0289}\N{U+0300}gh\N{U+00e0}dzugh\N{U+00f9}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}gh\N{U+01d4}uwel\N{U+0254}\N{U+0300}m",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}chwa\N{U+0294}\N{U+00e0}kaa wo",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+00e8}fw\N{U+00f2}o"
    ],
    name => "Aghem",
    native_language => "Aghem",
    native_name => "Aghem",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "k\N{U+0268}b\N{U+00e2} k\N{U+0268} 1",
      "ugb\N{U+00e2} u 2",
      "ugb\N{U+00e2} u 3",
      "ugb\N{U+00e2} u 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "k\N{U+0268}b\N{U+00e2} k\N{U+0268} 1",
      "ugb\N{U+00e2} u 2",
      "ugb\N{U+00e2} u 3",
      "ugb\N{U+00e2} u 4"
    ],
    quarter_stand_alone_abbreviated => [
      "k\N{U+0268}b\N{U+00e2} k\N{U+0268} 1",
      "ugb\N{U+00e2} u 2",
      "ugb\N{U+00e2} u 3",
      "ugb\N{U+00e2} u 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "k\N{U+0268}b\N{U+00e2} k\N{U+0268} 1",
      "ugb\N{U+00e2} u 2",
      "ugb\N{U+00e2} u 3",
      "ugb\N{U+00e2} u 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ agq-CM ]__
  {
    am_pm_abbreviated => [
      "a.g",
      "a.k"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "agq-CM",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "kpa",
      "gh\N{U+0254}",
      "t\N{U+0254}m",
      "ume",
      "gh\N{U+0268}",
      "dzk",
      "nts"
    ],
    day_format_narrow => [
      "k",
      "g",
      "t",
      "u",
      "g",
      "d",
      "n"
    ],
    day_format_wide => [
      "tsu\N{U+0294}ukp\N{U+00e0}",
      "tsu\N{U+0294}ugh\N{U+0254}e",
      "tsu\N{U+0294}ut\N{U+0254}\N{U+0300}ml\N{U+00f2}",
      "tsu\N{U+0294}um\N{U+00e8}",
      "tsu\N{U+0294}ugh\N{U+0268}\N{U+0302}m",
      "tsu\N{U+0294}ndz\N{U+0268}k\N{U+0254}\N{U+0294}\N{U+0254}",
      "tsu\N{U+0294}nts\N{U+0268}"
    ],
    day_stand_alone_abbreviated => [
      "kpa",
      "gh\N{U+0254}",
      "t\N{U+0254}m",
      "ume",
      "gh\N{U+0268}",
      "dzk",
      "nts"
    ],
    day_stand_alone_narrow => [
      "k",
      "g",
      "t",
      "u",
      "g",
      "d",
      "n"
    ],
    day_stand_alone_wide => [
      "tsu\N{U+0294}ukp\N{U+00e0}",
      "tsu\N{U+0294}ugh\N{U+0254}e",
      "tsu\N{U+0294}ut\N{U+0254}\N{U+0300}ml\N{U+00f2}",
      "tsu\N{U+0294}um\N{U+00e8}",
      "tsu\N{U+0294}ugh\N{U+0268}\N{U+0302}m",
      "tsu\N{U+0294}ndz\N{U+0268}k\N{U+0254}\N{U+0294}\N{U+0254}",
      "tsu\N{U+0294}nts\N{U+0268}"
    ],
    era_abbreviated => [
      "SK",
      "BK"
    ],
    era_narrow => [
      "SK",
      "BK"
    ],
    era_wide => [
      "S\N{U+011b}e K\N{U+0268}\N{U+0300}lesto",
      "B\N{U+01ce}a K\N{U+0268}\N{U+0300}lesto"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Aghem",
    month_format_abbreviated => [
      "n\N{U+00f9}m",
      "k\N{U+0268}z",
      "t\N{U+0268}d",
      "taa",
      "see",
      "nzu",
      "dum",
      "f\N{U+0254}e",
      "dzu",
      "l\N{U+0254}m",
      "kaa",
      "fwo"
    ],
    month_format_narrow => [
      "n",
      "k",
      "t",
      "t",
      "s",
      "z",
      "k",
      "f",
      "d",
      "l",
      "c",
      "f"
    ],
    month_format_wide => [
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}n\N{U+00f9}m",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}k\N{U+0197}\N{U+0300}z\N{U+00f9}\N{U+0294}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}t\N{U+0197}\N{U+0300}d\N{U+0289}\N{U+0300}gh\N{U+00e0}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}t\N{U+01ce}af\N{U+0289}\N{U+0304}gh\N{U+0101}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+00e8}s\N{U+00e8}e",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}nz\N{U+00f9}gh\N{U+00f2}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}d\N{U+00f9}mlo",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}kw\N{U+00ee}f\N{U+0254}\N{U+0300}e",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}t\N{U+0197}\N{U+0300}f\N{U+0289}\N{U+0300}gh\N{U+00e0}dzugh\N{U+00f9}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}gh\N{U+01d4}uwel\N{U+0254}\N{U+0300}m",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}chwa\N{U+0294}\N{U+00e0}kaa wo",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+00e8}fw\N{U+00f2}o"
    ],
    month_stand_alone_abbreviated => [
      "n\N{U+00f9}m",
      "k\N{U+0268}z",
      "t\N{U+0268}d",
      "taa",
      "see",
      "nzu",
      "dum",
      "f\N{U+0254}e",
      "dzu",
      "l\N{U+0254}m",
      "kaa",
      "fwo"
    ],
    month_stand_alone_narrow => [
      "n",
      "k",
      "t",
      "t",
      "s",
      "z",
      "k",
      "f",
      "d",
      "l",
      "c",
      "f"
    ],
    month_stand_alone_wide => [
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}n\N{U+00f9}m",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}k\N{U+0197}\N{U+0300}z\N{U+00f9}\N{U+0294}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}t\N{U+0197}\N{U+0300}d\N{U+0289}\N{U+0300}gh\N{U+00e0}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}t\N{U+01ce}af\N{U+0289}\N{U+0304}gh\N{U+0101}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+00e8}s\N{U+00e8}e",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}nz\N{U+00f9}gh\N{U+00f2}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}d\N{U+00f9}mlo",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}kw\N{U+00ee}f\N{U+0254}\N{U+0300}e",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}t\N{U+0197}\N{U+0300}f\N{U+0289}\N{U+0300}gh\N{U+00e0}dzugh\N{U+00f9}",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}gh\N{U+01d4}uwel\N{U+0254}\N{U+0300}m",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+0254}\N{U+0300}chwa\N{U+0294}\N{U+00e0}kaa wo",
      "ndz\N{U+0254}\N{U+0300}\N{U+014b}\N{U+00e8}fw\N{U+00f2}o"
    ],
    name => "Aghem Cameroon",
    native_language => "Aghem",
    native_name => "Aghem K\N{U+00e0}m\N{U+00e0}l\N{U+00fb}\N{U+014b}",
    native_script => undef,
    native_territory => "K\N{U+00e0}m\N{U+00e0}l\N{U+00fb}\N{U+014b}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "k\N{U+0268}b\N{U+00e2} k\N{U+0268} 1",
      "ugb\N{U+00e2} u 2",
      "ugb\N{U+00e2} u 3",
      "ugb\N{U+00e2} u 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "k\N{U+0268}b\N{U+00e2} k\N{U+0268} 1",
      "ugb\N{U+00e2} u 2",
      "ugb\N{U+00e2} u 3",
      "ugb\N{U+00e2} u 4"
    ],
    quarter_stand_alone_abbreviated => [
      "k\N{U+0268}b\N{U+00e2} k\N{U+0268} 1",
      "ugb\N{U+00e2} u 2",
      "ugb\N{U+00e2} u 3",
      "ugb\N{U+00e2} u 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "k\N{U+0268}b\N{U+00e2} k\N{U+0268} 1",
      "ugb\N{U+00e2} u 2",
      "ugb\N{U+00e2} u 3",
      "ugb\N{U+00e2} u 4"
    ],
    script => undef,
    territory => "Cameroon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ak ]__
  {
    am_pm_abbreviated => [
      "AN",
      "EW"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y/M/d",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ak",
    date_format_full => "EEEE, y MMMM dd",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "yy/MM/dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Dwo",
      "Ben",
      "Wuk",
      "Yaw",
      "Fia",
      "Mem",
      "Kwe"
    ],
    day_format_narrow => [
      "D",
      "B",
      "W",
      "Y",
      "F",
      "M",
      "K"
    ],
    day_format_wide => [
      "Dwowda",
      "Benada",
      "Wukuda",
      "Yawda",
      "Fida",
      "Memeneda",
      "Kwesida"
    ],
    day_stand_alone_abbreviated => [
      "Dwo",
      "Ben",
      "Wuk",
      "Yaw",
      "Fia",
      "Mem",
      "Kwe"
    ],
    day_stand_alone_narrow => [
      "D",
      "B",
      "W",
      "Y",
      "F",
      "M",
      "K"
    ],
    day_stand_alone_wide => [
      "Dwowda",
      "Benada",
      "Wukuda",
      "Yawda",
      "Fida",
      "Memeneda",
      "Kwesida"
    ],
    era_abbreviated => [
      "AK",
      "KE"
    ],
    era_narrow => [
      "AK",
      "KE"
    ],
    era_wide => [
      "Ansa Kristo",
      "Kristo Ekyiri"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Akan",
    month_format_abbreviated => [
      "S-\N{U+0186}",
      "K-\N{U+0186}",
      "E-\N{U+0186}",
      "E-O",
      "E-K",
      "O-A",
      "A-K",
      "D-\N{U+0186}",
      "F-\N{U+0190}",
      "\N{U+0186}-A",
      "\N{U+0186}-O",
      "M-\N{U+0186}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Sanda-\N{U+0186}p\N{U+025b}p\N{U+0254}n",
      "Kwakwar-\N{U+0186}gyefuo",
      "Eb\N{U+0254}w-\N{U+0186}benem",
      "Eb\N{U+0254}bira-Oforisuo",
      "Esusow Aketseaba-K\N{U+0254}t\N{U+0254}nimba",
      "Obirade-Ay\N{U+025b}wohomumu",
      "Ay\N{U+025b}woho-Kitawonsa",
      "Difuu-\N{U+0186}sandaa",
      "Fankwa-\N{U+0190}b\N{U+0254}",
      "\N{U+0186}b\N{U+025b}s\N{U+025b}-Ahinime",
      "\N{U+0186}ber\N{U+025b}f\N{U+025b}w-Obubuo",
      "Mumu-\N{U+0186}p\N{U+025b}nimba"
    ],
    month_stand_alone_abbreviated => [
      "S-\N{U+0186}",
      "K-\N{U+0186}",
      "E-\N{U+0186}",
      "E-O",
      "E-K",
      "O-A",
      "A-K",
      "D-\N{U+0186}",
      "F-\N{U+0190}",
      "\N{U+0186}-A",
      "\N{U+0186}-O",
      "M-\N{U+0186}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Sanda-\N{U+0186}p\N{U+025b}p\N{U+0254}n",
      "Kwakwar-\N{U+0186}gyefuo",
      "Eb\N{U+0254}w-\N{U+0186}benem",
      "Eb\N{U+0254}bira-Oforisuo",
      "Esusow Aketseaba-K\N{U+0254}t\N{U+0254}nimba",
      "Obirade-Ay\N{U+025b}wohomumu",
      "Ay\N{U+025b}woho-Kitawonsa",
      "Difuu-\N{U+0186}sandaa",
      "Fankwa-\N{U+0190}b\N{U+0254}",
      "\N{U+0186}b\N{U+025b}s\N{U+025b}-Ahinime",
      "\N{U+0186}ber\N{U+025b}f\N{U+025b}w-Obubuo",
      "Mumu-\N{U+0186}p\N{U+025b}nimba"
    ],
    name => "Akan",
    native_language => "Akan",
    native_name => "Akan",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ak-GH ]__
  {
    am_pm_abbreviated => [
      "AN",
      "EW"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y/M/d",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ak-GH",
    date_format_full => "EEEE, y MMMM dd",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "yy/MM/dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Dwo",
      "Ben",
      "Wuk",
      "Yaw",
      "Fia",
      "Mem",
      "Kwe"
    ],
    day_format_narrow => [
      "D",
      "B",
      "W",
      "Y",
      "F",
      "M",
      "K"
    ],
    day_format_wide => [
      "Dwowda",
      "Benada",
      "Wukuda",
      "Yawda",
      "Fida",
      "Memeneda",
      "Kwesida"
    ],
    day_stand_alone_abbreviated => [
      "Dwo",
      "Ben",
      "Wuk",
      "Yaw",
      "Fia",
      "Mem",
      "Kwe"
    ],
    day_stand_alone_narrow => [
      "D",
      "B",
      "W",
      "Y",
      "F",
      "M",
      "K"
    ],
    day_stand_alone_wide => [
      "Dwowda",
      "Benada",
      "Wukuda",
      "Yawda",
      "Fida",
      "Memeneda",
      "Kwesida"
    ],
    era_abbreviated => [
      "AK",
      "KE"
    ],
    era_narrow => [
      "AK",
      "KE"
    ],
    era_wide => [
      "Ansa Kristo",
      "Kristo Ekyiri"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%Y/%m/%d",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%r",
    language => "Akan",
    month_format_abbreviated => [
      "S-\N{U+0186}",
      "K-\N{U+0186}",
      "E-\N{U+0186}",
      "E-O",
      "E-K",
      "O-A",
      "A-K",
      "D-\N{U+0186}",
      "F-\N{U+0190}",
      "\N{U+0186}-A",
      "\N{U+0186}-O",
      "M-\N{U+0186}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Sanda-\N{U+0186}p\N{U+025b}p\N{U+0254}n",
      "Kwakwar-\N{U+0186}gyefuo",
      "Eb\N{U+0254}w-\N{U+0186}benem",
      "Eb\N{U+0254}bira-Oforisuo",
      "Esusow Aketseaba-K\N{U+0254}t\N{U+0254}nimba",
      "Obirade-Ay\N{U+025b}wohomumu",
      "Ay\N{U+025b}woho-Kitawonsa",
      "Difuu-\N{U+0186}sandaa",
      "Fankwa-\N{U+0190}b\N{U+0254}",
      "\N{U+0186}b\N{U+025b}s\N{U+025b}-Ahinime",
      "\N{U+0186}ber\N{U+025b}f\N{U+025b}w-Obubuo",
      "Mumu-\N{U+0186}p\N{U+025b}nimba"
    ],
    month_stand_alone_abbreviated => [
      "S-\N{U+0186}",
      "K-\N{U+0186}",
      "E-\N{U+0186}",
      "E-O",
      "E-K",
      "O-A",
      "A-K",
      "D-\N{U+0186}",
      "F-\N{U+0190}",
      "\N{U+0186}-A",
      "\N{U+0186}-O",
      "M-\N{U+0186}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Sanda-\N{U+0186}p\N{U+025b}p\N{U+0254}n",
      "Kwakwar-\N{U+0186}gyefuo",
      "Eb\N{U+0254}w-\N{U+0186}benem",
      "Eb\N{U+0254}bira-Oforisuo",
      "Esusow Aketseaba-K\N{U+0254}t\N{U+0254}nimba",
      "Obirade-Ay\N{U+025b}wohomumu",
      "Ay\N{U+025b}woho-Kitawonsa",
      "Difuu-\N{U+0186}sandaa",
      "Fankwa-\N{U+0190}b\N{U+0254}",
      "\N{U+0186}b\N{U+025b}s\N{U+025b}-Ahinime",
      "\N{U+0186}ber\N{U+025b}f\N{U+025b}w-Obubuo",
      "Mumu-\N{U+0186}p\N{U+025b}nimba"
    ],
    name => "Akan Ghana",
    native_language => "Akan",
    native_name => "Akan Gaana",
    native_script => undef,
    native_territory => "Gaana",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Ghana",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ am ]__
  {
    am_pm_abbreviated => [
      "\N{U+1325}\N{U+12cb}\N{U+1275}",
      "\N{U+12a8}\N{U+1230}\N{U+12d3}\N{U+1275}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+1363} MMM d\N{U+1363} y G",
      GyMMMd => "MMM d\N{U+1363} y G",
      H => "H",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+1363} M/d",
      MMM => "LLL",
      MMMEd => "E\N{U+1363} MMM d",
      MMMMEd => "E\N{U+1363} MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E\N{U+1363} d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+1363} MMM d y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "am",
    date_format_full => "EEEE \N{U+1363}d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+1230}\N{U+129e}",
      "\N{U+121b}\N{U+12ad}\N{U+1230}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1210}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1265}",
      "\N{U+1245}\N{U+12f3}\N{U+121c}",
      "\N{U+12a5}\N{U+1211}\N{U+12f5}"
    ],
    day_format_narrow => [
      "\N{U+1230}",
      "\N{U+121b}",
      "\N{U+1228}",
      "\N{U+1210}",
      "\N{U+12d3}",
      "\N{U+1245}",
      "\N{U+12a5}"
    ],
    day_format_wide => [
      "\N{U+1230}\N{U+129e}",
      "\N{U+121b}\N{U+12ad}\N{U+1230}\N{U+129e}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1210}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1265}",
      "\N{U+1245}\N{U+12f3}\N{U+121c}",
      "\N{U+12a5}\N{U+1211}\N{U+12f5}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+1230}\N{U+129e}",
      "\N{U+121b}\N{U+12ad}\N{U+1230}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1210}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1265}",
      "\N{U+1245}\N{U+12f3}\N{U+121c}",
      "\N{U+12a5}\N{U+1211}\N{U+12f5}"
    ],
    day_stand_alone_narrow => [
      "\N{U+1230}",
      "\N{U+121b}",
      "\N{U+1228}",
      "\N{U+1210}",
      "\N{U+12d3}",
      "\N{U+1245}",
      "\N{U+12a5}"
    ],
    day_stand_alone_wide => [
      "\N{U+1230}\N{U+129e}",
      "\N{U+121b}\N{U+12ad}\N{U+1230}\N{U+129e}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1210}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1265}",
      "\N{U+1245}\N{U+12f3}\N{U+121c}",
      "\N{U+12a5}\N{U+1211}\N{U+12f5}"
    ],
    era_abbreviated => [
      "\N{U+12d3}/\N{U+12d3}",
      "\N{U+12d3}/\N{U+121d}"
    ],
    era_narrow => [
      "\N{U+12d3}/\N{U+12d3}",
      "\N{U+12d3}/\N{U+121d}"
    ],
    era_wide => [
      "\N{U+12d3}\N{U+1218}\N{U+1270} \N{U+12d3}\N{U+1208}\N{U+121d}",
      "\N{U+12d3}\N{U+1218}\N{U+1270} \N{U+121d}\N{U+1215}\N{U+1228}\N{U+1275}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Amharic",
    month_format_abbreviated => [
      "\N{U+1303}\N{U+1295}\N{U+12e9}",
      "\N{U+134c}\N{U+1265}\N{U+1229}",
      "\N{U+121b}\N{U+122d}\N{U+127d}",
      "\N{U+12a4}\N{U+1355}\N{U+122a}",
      "\N{U+121c}\N{U+12ed}",
      "\N{U+1301}\N{U+1295}",
      "\N{U+1301}\N{U+120b}\N{U+12ed}",
      "\N{U+12a6}\N{U+1308}\N{U+1235}",
      "\N{U+1234}\N{U+1355}\N{U+1274}",
      "\N{U+12a6}\N{U+12ad}\N{U+1276}",
      "\N{U+1296}\N{U+126c}\N{U+121d}",
      "\N{U+12f2}\N{U+1234}\N{U+121d}"
    ],
    month_format_narrow => [
      "\N{U+1303}",
      "\N{U+134c}",
      "\N{U+121b}",
      "\N{U+12a4}",
      "\N{U+121c}",
      "\N{U+1301}",
      "\N{U+1301}",
      "\N{U+12a6}",
      "\N{U+1234}",
      "\N{U+12a6}",
      "\N{U+1296}",
      "\N{U+12f2}"
    ],
    month_format_wide => [
      "\N{U+1303}\N{U+1295}\N{U+12e9}\N{U+12c8}\N{U+122a}",
      "\N{U+134c}\N{U+1265}\N{U+1229}\N{U+12c8}\N{U+122a}",
      "\N{U+121b}\N{U+122d}\N{U+127d}",
      "\N{U+12a4}\N{U+1355}\N{U+122a}\N{U+120d}",
      "\N{U+121c}\N{U+12ed}",
      "\N{U+1301}\N{U+1295}",
      "\N{U+1301}\N{U+120b}\N{U+12ed}",
      "\N{U+12a6}\N{U+1308}\N{U+1235}\N{U+1275}",
      "\N{U+1234}\N{U+1355}\N{U+1274}\N{U+121d}\N{U+1260}\N{U+122d}",
      "\N{U+12a6}\N{U+12ad}\N{U+1276}\N{U+1260}\N{U+122d}",
      "\N{U+1296}\N{U+126c}\N{U+121d}\N{U+1260}\N{U+122d}",
      "\N{U+12f2}\N{U+1234}\N{U+121d}\N{U+1260}\N{U+122d}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+1303}\N{U+1295}\N{U+12e9}",
      "\N{U+134c}\N{U+1265}\N{U+1229}",
      "\N{U+121b}\N{U+122d}\N{U+127d}",
      "\N{U+12a4}\N{U+1355}\N{U+122a}",
      "\N{U+121c}\N{U+12ed}",
      "\N{U+1301}\N{U+1295}",
      "\N{U+1301}\N{U+120b}\N{U+12ed}",
      "\N{U+12a6}\N{U+1308}\N{U+1235}",
      "\N{U+1234}\N{U+1355}\N{U+1274}",
      "\N{U+12a6}\N{U+12ad}\N{U+1276}",
      "\N{U+1296}\N{U+126c}\N{U+121d}",
      "\N{U+12f2}\N{U+1234}\N{U+121d}"
    ],
    month_stand_alone_narrow => [
      "\N{U+1303}",
      "\N{U+134c}",
      "\N{U+121b}",
      "\N{U+12a4}",
      "\N{U+121c}",
      "\N{U+1301}",
      "\N{U+1301}",
      "\N{U+12a6}",
      "\N{U+1234}",
      "\N{U+12a6}",
      "\N{U+1296}",
      "\N{U+12f2}"
    ],
    month_stand_alone_wide => [
      "\N{U+1303}\N{U+1295}\N{U+12e9}\N{U+12c8}\N{U+122a}",
      "\N{U+134c}\N{U+1265}\N{U+1229}\N{U+12c8}\N{U+122a}",
      "\N{U+121b}\N{U+122d}\N{U+127d}",
      "\N{U+12a4}\N{U+1355}\N{U+122a}\N{U+120d}",
      "\N{U+121c}\N{U+12ed}",
      "\N{U+1301}\N{U+1295}",
      "\N{U+1301}\N{U+120b}\N{U+12ed}",
      "\N{U+12a6}\N{U+1308}\N{U+1235}\N{U+1275}",
      "\N{U+1234}\N{U+1355}\N{U+1274}\N{U+121d}\N{U+1260}\N{U+122d}",
      "\N{U+12a6}\N{U+12ad}\N{U+1276}\N{U+1260}\N{U+122d}",
      "\N{U+1296}\N{U+126c}\N{U+121d}\N{U+1260}\N{U+122d}",
      "\N{U+12f2}\N{U+1234}\N{U+121d}\N{U+1260}\N{U+122d}"
    ],
    name => "Amharic",
    native_language => "\N{U+12a0}\N{U+121b}\N{U+122d}\N{U+129b}",
    native_name => "\N{U+12a0}\N{U+121b}\N{U+122d}\N{U+129b}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+1229}\N{U+1265}1",
      "\N{U+1229}\N{U+1265}2",
      "\N{U+1229}\N{U+1265}3",
      "\N{U+1229}\N{U+1265}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+129b}\N{U+12cd} \N{U+1229}\N{U+1265}",
      "2\N{U+129b}\N{U+12cd} \N{U+1229}\N{U+1265}",
      "3\N{U+129b}\N{U+12cd} \N{U+1229}\N{U+1265}",
      "4\N{U+129b}\N{U+12cd} \N{U+1229}\N{U+1265}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+1229}\N{U+1265}1",
      "\N{U+1229}\N{U+1265}2",
      "\N{U+1229}\N{U+1265}3",
      "\N{U+1229}\N{U+1265}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+129b}\N{U+12cd} \N{U+1229}\N{U+1265}",
      "2\N{U+129b}\N{U+12cd} \N{U+1229}\N{U+1265}",
      "3\N{U+129b}\N{U+12cd} \N{U+1229}\N{U+1265}",
      "4\N{U+129b}\N{U+12cd} \N{U+1229}\N{U+1265}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ am-ET ]__
  {
    am_pm_abbreviated => [
      "\N{U+1325}\N{U+12cb}\N{U+1275}",
      "\N{U+12a8}\N{U+1230}\N{U+12d3}\N{U+1275}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+1363} MMM d\N{U+1363} y G",
      GyMMMd => "MMM d\N{U+1363} y G",
      H => "H",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+1363} M/d",
      MMM => "LLL",
      MMMEd => "E\N{U+1363} MMM d",
      MMMMEd => "E\N{U+1363} MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E\N{U+1363} d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+1363} MMM d y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "am-ET",
    date_format_full => "EEEE \N{U+1363}d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+1230}\N{U+129e}",
      "\N{U+121b}\N{U+12ad}\N{U+1230}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1210}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1265}",
      "\N{U+1245}\N{U+12f3}\N{U+121c}",
      "\N{U+12a5}\N{U+1211}\N{U+12f5}"
    ],
    day_format_narrow => [
      "\N{U+1230}",
      "\N{U+121b}",
      "\N{U+1228}",
      "\N{U+1210}",
      "\N{U+12d3}",
      "\N{U+1245}",
      "\N{U+12a5}"
    ],
    day_format_wide => [
      "\N{U+1230}\N{U+129e}",
      "\N{U+121b}\N{U+12ad}\N{U+1230}\N{U+129e}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1210}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1265}",
      "\N{U+1245}\N{U+12f3}\N{U+121c}",
      "\N{U+12a5}\N{U+1211}\N{U+12f5}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+1230}\N{U+129e}",
      "\N{U+121b}\N{U+12ad}\N{U+1230}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1210}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1265}",
      "\N{U+1245}\N{U+12f3}\N{U+121c}",
      "\N{U+12a5}\N{U+1211}\N{U+12f5}"
    ],
    day_stand_alone_narrow => [
      "\N{U+1230}",
      "\N{U+121b}",
      "\N{U+1228}",
      "\N{U+1210}",
      "\N{U+12d3}",
      "\N{U+1245}",
      "\N{U+12a5}"
    ],
    day_stand_alone_wide => [
      "\N{U+1230}\N{U+129e}",
      "\N{U+121b}\N{U+12ad}\N{U+1230}\N{U+129e}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1210}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1265}",
      "\N{U+1245}\N{U+12f3}\N{U+121c}",
      "\N{U+12a5}\N{U+1211}\N{U+12f5}"
    ],
    era_abbreviated => [
      "\N{U+12d3}/\N{U+12d3}",
      "\N{U+12d3}/\N{U+121d}"
    ],
    era_narrow => [
      "\N{U+12d3}/\N{U+12d3}",
      "\N{U+12d3}/\N{U+121d}"
    ],
    era_wide => [
      "\N{U+12d3}\N{U+1218}\N{U+1270} \N{U+12d3}\N{U+1208}\N{U+121d}",
      "\N{U+12d3}\N{U+1218}\N{U+1270} \N{U+121d}\N{U+1215}\N{U+1228}\N{U+1275}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%A\N{U+1363} %B %e \N{U+1240}\N{U+1295} %r %Z %Y \N{U+12d3}/\N{U+121d}",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%A\N{U+1363} %B %e \N{U+1240}\N{U+1295} %Y %r %Z",
    glibc_time_12_format => "%X %p",
    glibc_time_format => "%l:%M:%S",
    language => "Amharic",
    month_format_abbreviated => [
      "\N{U+1303}\N{U+1295}\N{U+12e9}",
      "\N{U+134c}\N{U+1265}\N{U+1229}",
      "\N{U+121b}\N{U+122d}\N{U+127d}",
      "\N{U+12a4}\N{U+1355}\N{U+122a}",
      "\N{U+121c}\N{U+12ed}",
      "\N{U+1301}\N{U+1295}",
      "\N{U+1301}\N{U+120b}\N{U+12ed}",
      "\N{U+12a6}\N{U+1308}\N{U+1235}",
      "\N{U+1234}\N{U+1355}\N{U+1274}",
      "\N{U+12a6}\N{U+12ad}\N{U+1276}",
      "\N{U+1296}\N{U+126c}\N{U+121d}",
      "\N{U+12f2}\N{U+1234}\N{U+121d}"
    ],
    month_format_narrow => [
      "\N{U+1303}",
      "\N{U+134c}",
      "\N{U+121b}",
      "\N{U+12a4}",
      "\N{U+121c}",
      "\N{U+1301}",
      "\N{U+1301}",
      "\N{U+12a6}",
      "\N{U+1234}",
      "\N{U+12a6}",
      "\N{U+1296}",
      "\N{U+12f2}"
    ],
    month_format_wide => [
      "\N{U+1303}\N{U+1295}\N{U+12e9}\N{U+12c8}\N{U+122a}",
      "\N{U+134c}\N{U+1265}\N{U+1229}\N{U+12c8}\N{U+122a}",
      "\N{U+121b}\N{U+122d}\N{U+127d}",
      "\N{U+12a4}\N{U+1355}\N{U+122a}\N{U+120d}",
      "\N{U+121c}\N{U+12ed}",
      "\N{U+1301}\N{U+1295}",
      "\N{U+1301}\N{U+120b}\N{U+12ed}",
      "\N{U+12a6}\N{U+1308}\N{U+1235}\N{U+1275}",
      "\N{U+1234}\N{U+1355}\N{U+1274}\N{U+121d}\N{U+1260}\N{U+122d}",
      "\N{U+12a6}\N{U+12ad}\N{U+1276}\N{U+1260}\N{U+122d}",
      "\N{U+1296}\N{U+126c}\N{U+121d}\N{U+1260}\N{U+122d}",
      "\N{U+12f2}\N{U+1234}\N{U+121d}\N{U+1260}\N{U+122d}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+1303}\N{U+1295}\N{U+12e9}",
      "\N{U+134c}\N{U+1265}\N{U+1229}",
      "\N{U+121b}\N{U+122d}\N{U+127d}",
      "\N{U+12a4}\N{U+1355}\N{U+122a}",
      "\N{U+121c}\N{U+12ed}",
      "\N{U+1301}\N{U+1295}",
      "\N{U+1301}\N{U+120b}\N{U+12ed}",
      "\N{U+12a6}\N{U+1308}\N{U+1235}",
      "\N{U+1234}\N{U+1355}\N{U+1274}",
      "\N{U+12a6}\N{U+12ad}\N{U+1276}",
      "\N{U+1296}\N{U+126c}\N{U+121d}",
      "\N{U+12f2}\N{U+1234}\N{U+121d}"
    ],
    month_stand_alone_narrow => [
      "\N{U+1303}",
      "\N{U+134c}",
      "\N{U+121b}",
      "\N{U+12a4}",
      "\N{U+121c}",
      "\N{U+1301}",
      "\N{U+1301}",
      "\N{U+12a6}",
      "\N{U+1234}",
      "\N{U+12a6}",
      "\N{U+1296}",
      "\N{U+12f2}"
    ],
    month_stand_alone_wide => [
      "\N{U+1303}\N{U+1295}\N{U+12e9}\N{U+12c8}\N{U+122a}",
      "\N{U+134c}\N{U+1265}\N{U+1229}\N{U+12c8}\N{U+122a}",
      "\N{U+121b}\N{U+122d}\N{U+127d}",
      "\N{U+12a4}\N{U+1355}\N{U+122a}\N{U+120d}",
      "\N{U+121c}\N{U+12ed}",
      "\N{U+1301}\N{U+1295}",
      "\N{U+1301}\N{U+120b}\N{U+12ed}",
      "\N{U+12a6}\N{U+1308}\N{U+1235}\N{U+1275}",
      "\N{U+1234}\N{U+1355}\N{U+1274}\N{U+121d}\N{U+1260}\N{U+122d}",
      "\N{U+12a6}\N{U+12ad}\N{U+1276}\N{U+1260}\N{U+122d}",
      "\N{U+1296}\N{U+126c}\N{U+121d}\N{U+1260}\N{U+122d}",
      "\N{U+12f2}\N{U+1234}\N{U+121d}\N{U+1260}\N{U+122d}"
    ],
    name => "Amharic Ethiopia",
    native_language => "\N{U+12a0}\N{U+121b}\N{U+122d}\N{U+129b}",
    native_name => "\N{U+12a0}\N{U+121b}\N{U+122d}\N{U+129b} \N{U+12a2}\N{U+1275}\N{U+12ee}\N{U+1335}\N{U+12eb}",
    native_script => undef,
    native_territory => "\N{U+12a2}\N{U+1275}\N{U+12ee}\N{U+1335}\N{U+12eb}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+1229}\N{U+1265}1",
      "\N{U+1229}\N{U+1265}2",
      "\N{U+1229}\N{U+1265}3",
      "\N{U+1229}\N{U+1265}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+129b}\N{U+12cd} \N{U+1229}\N{U+1265}",
      "2\N{U+129b}\N{U+12cd} \N{U+1229}\N{U+1265}",
      "3\N{U+129b}\N{U+12cd} \N{U+1229}\N{U+1265}",
      "4\N{U+129b}\N{U+12cd} \N{U+1229}\N{U+1265}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+1229}\N{U+1265}1",
      "\N{U+1229}\N{U+1265}2",
      "\N{U+1229}\N{U+1265}3",
      "\N{U+1229}\N{U+1265}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+129b}\N{U+12cd} \N{U+1229}\N{U+1265}",
      "2\N{U+129b}\N{U+12cd} \N{U+1229}\N{U+1265}",
      "3\N{U+129b}\N{U+12cd} \N{U+1229}\N{U+1265}",
      "4\N{U+129b}\N{U+12cd} \N{U+1229}\N{U+1265}"
    ],
    script => undef,
    territory => "Ethiopia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-001 ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-001",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic World",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0639}\N{U+0627}\N{U+0644}\N{U+0645}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0627}\N{U+0644}\N{U+0645}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "World",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-AE ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-AE",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic United Arab Emirates",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0625}\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0627}\N{U+062a} \N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+062a}\N{U+062d}\N{U+062f}\N{U+0629}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+0644}\N{U+0625}\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0627}\N{U+062a} \N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+062a}\N{U+062d}\N{U+062f}\N{U+0629}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "United Arab Emirates",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-BH ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-BH",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Bahrain",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0628}\N{U+062d}\N{U+0631}\N{U+064a}\N{U+0646}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+0644}\N{U+0628}\N{U+062d}\N{U+0631}\N{U+064a}\N{U+0646}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Bahrain",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-DJ ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-DJ",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Djibouti",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+062c}\N{U+064a}\N{U+0628}\N{U+0648}\N{U+062a}\N{U+064a}",
    native_script => undef,
    native_territory => "\N{U+062c}\N{U+064a}\N{U+0628}\N{U+0648}\N{U+062a}\N{U+064a}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Djibouti",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-DZ ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-DZ",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+0641}\N{U+064a}",
      "\N{U+0641}\N{U+064a}\N{U+0641}\N{U+0631}\N{U+064a}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0641}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+062c}\N{U+0648}\N{U+0627}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+064a}\N{U+0644}\N{U+064a}\N{U+0629}",
      "\N{U+0623}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+062c}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0645}",
      "\N{U+062c}",
      "\N{U+062c}",
      "\N{U+0623}",
      "\N{U+0633}",
      "\N{U+0623}",
      "\N{U+0646}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+0641}\N{U+064a}",
      "\N{U+0641}\N{U+064a}\N{U+0641}\N{U+0631}\N{U+064a}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0641}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+062c}\N{U+0648}\N{U+0627}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+064a}\N{U+0644}\N{U+064a}\N{U+0629}",
      "\N{U+0623}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+0641}\N{U+064a}",
      "\N{U+0641}\N{U+064a}\N{U+0641}\N{U+0631}\N{U+064a}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0641}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+062c}\N{U+0648}\N{U+0627}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+064a}\N{U+0644}\N{U+064a}\N{U+0629}",
      "\N{U+0623}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+062c}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0645}",
      "\N{U+062c}",
      "\N{U+062c}",
      "\N{U+0623}",
      "\N{U+0633}",
      "\N{U+0623}",
      "\N{U+0646}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+0641}\N{U+064a}",
      "\N{U+0641}\N{U+064a}\N{U+0641}\N{U+0631}\N{U+064a}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0641}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+062c}\N{U+0648}\N{U+0627}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+064a}\N{U+0644}\N{U+064a}\N{U+0629}",
      "\N{U+0623}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Algeria",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+062c}\N{U+0632}\N{U+0627}\N{U+0626}\N{U+0631}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0632}\N{U+0627}\N{U+0626}\N{U+0631}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Algeria",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-EG ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-EG",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Egypt",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0645}\N{U+0635}\N{U+0631}",
    native_script => undef,
    native_territory => "\N{U+0645}\N{U+0635}\N{U+0631}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Egypt",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-EH ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-EH",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Western Sahara",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0635}\N{U+062d}\N{U+0631}\N{U+0627}\N{U+0621} \N{U+0627}\N{U+0644}\N{U+063a}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+0644}\N{U+0635}\N{U+062d}\N{U+0631}\N{U+0627}\N{U+0621} \N{U+0627}\N{U+0644}\N{U+063a}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Western Sahara",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-ER ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-ER",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Eritrea",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0625}\N{U+0631}\N{U+064a}\N{U+062a}\N{U+0631}\N{U+064a}\N{U+0627}",
    native_script => undef,
    native_territory => "\N{U+0625}\N{U+0631}\N{U+064a}\N{U+062a}\N{U+0631}\N{U+064a}\N{U+0627}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Eritrea",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-IL ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-IL",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Israel",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0625}\N{U+0633}\N{U+0631}\N{U+0627}\N{U+0626}\N{U+064a}\N{U+0644}",
    native_script => undef,
    native_territory => "\N{U+0625}\N{U+0633}\N{U+0631}\N{U+0627}\N{U+0626}\N{U+064a}\N{U+0644}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Israel",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ ar-IQ ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-IQ",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+06cc}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    month_format_narrow => [
      "\N{U+0643}",
      "\N{U+0634}",
      "\N{U+0622}",
      "\N{U+0646}",
      "\N{U+0623}",
      "\N{U+062d}",
      "\N{U+062a}",
      "\N{U+0622}",
      "\N{U+0623}",
      "\N{U+062a}",
      "\N{U+062a}",
      "\N{U+0643}"
    ],
    month_format_wide => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0643}",
      "\N{U+0634}",
      "\N{U+0622}",
      "\N{U+0646}",
      "\N{U+0623}",
      "\N{U+062d}",
      "\N{U+062a}",
      "\N{U+0622}",
      "\N{U+0623}",
      "\N{U+062a}",
      "\N{U+062a}",
      "\N{U+0643}"
    ],
    month_stand_alone_wide => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    name => "Arabic Iraq",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+0642}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+0642}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Iraq",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-JO ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-JO",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    month_format_narrow => [
      "\N{U+0643}",
      "\N{U+0634}",
      "\N{U+0622}",
      "\N{U+0646}",
      "\N{U+0623}",
      "\N{U+062d}",
      "\N{U+062a}",
      "\N{U+0622}",
      "\N{U+0623}",
      "\N{U+062a}",
      "\N{U+062a}",
      "\N{U+0643}"
    ],
    month_format_wide => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0643}",
      "\N{U+0634}",
      "\N{U+0622}",
      "\N{U+0646}",
      "\N{U+0623}",
      "\N{U+062d}",
      "\N{U+062a}",
      "\N{U+0622}",
      "\N{U+0623}",
      "\N{U+062a}",
      "\N{U+062a}",
      "\N{U+0643}"
    ],
    month_stand_alone_wide => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    name => "Arabic Jordan",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+062f}\N{U+0646}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+062f}\N{U+0646}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Jordan",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-KM ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-KM",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Comoros",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+062c}\N{U+0632}\N{U+0631} \N{U+0627}\N{U+0644}\N{U+0642}\N{U+0645}\N{U+0631}",
    native_script => undef,
    native_territory => "\N{U+062c}\N{U+0632}\N{U+0631} \N{U+0627}\N{U+0644}\N{U+0642}\N{U+0645}\N{U+0631}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Comoros",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ar-KW ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-KW",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Kuwait",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0643}\N{U+0648}\N{U+064a}\N{U+062a}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+0644}\N{U+0643}\N{U+0648}\N{U+064a}\N{U+062a}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Kuwait",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-LB ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-LB",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    month_format_narrow => [
      "\N{U+0643}",
      "\N{U+0634}",
      "\N{U+0622}",
      "\N{U+0646}",
      "\N{U+0623}",
      "\N{U+062d}",
      "\N{U+062a}",
      "\N{U+0622}",
      "\N{U+0623}",
      "\N{U+062a}",
      "\N{U+062a}",
      "\N{U+0643}"
    ],
    month_format_wide => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0643}",
      "\N{U+0634}",
      "\N{U+0622}",
      "\N{U+0646}",
      "\N{U+0623}",
      "\N{U+062d}",
      "\N{U+062a}",
      "\N{U+0622}",
      "\N{U+0623}",
      "\N{U+062a}",
      "\N{U+062a}",
      "\N{U+0643}"
    ],
    month_stand_alone_wide => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    name => "Arabic Lebanon",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0644}\N{U+0628}\N{U+0646}\N{U+0627}\N{U+0646}",
    native_script => undef,
    native_territory => "\N{U+0644}\N{U+0628}\N{U+0646}\N{U+0627}\N{U+0646}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Lebanon",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-LY ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-LY",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Libya",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0644}\N{U+064a}\N{U+0628}\N{U+064a}\N{U+0627}",
    native_script => undef,
    native_territory => "\N{U+0644}\N{U+064a}\N{U+0628}\N{U+064a}\N{U+0627}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Libya",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-MA ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-MA",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}\N{U+0632}",
      "\N{U+063a}\N{U+0634}\N{U+062a}",
      "\N{U+0634}\N{U+062a}\N{U+0646}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0646}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+062c}\N{U+0646}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0645}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0634}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}\N{U+0632}",
      "\N{U+063a}\N{U+0634}\N{U+062a}",
      "\N{U+0634}\N{U+062a}\N{U+0646}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0646}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+062c}\N{U+0646}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}\N{U+0632}",
      "\N{U+063a}\N{U+0634}\N{U+062a}",
      "\N{U+0634}\N{U+062a}\N{U+0646}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0646}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+062c}\N{U+0646}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0645}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0634}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}\N{U+0632}",
      "\N{U+063a}\N{U+0634}\N{U+062a}",
      "\N{U+0634}\N{U+062a}\N{U+0646}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0646}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+062c}\N{U+0646}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Morocco",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+063a}\N{U+0631}\N{U+0628}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+0644}\N{U+0645}\N{U+063a}\N{U+0631}\N{U+0628}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Morocco",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ar-MR ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-MR",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0625}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0634}\N{U+062a}",
      "\N{U+0634}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+062c}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0625}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0634}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0625}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0634}\N{U+062a}",
      "\N{U+0634}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+062c}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0625}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0634}\N{U+062a}",
      "\N{U+0634}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+062c}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0625}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0634}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0625}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0634}\N{U+062a}",
      "\N{U+0634}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+062c}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Mauritania",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0645}\N{U+0648}\N{U+0631}\N{U+064a}\N{U+062a}\N{U+0627}\N{U+0646}\N{U+064a}\N{U+0627}",
    native_script => undef,
    native_territory => "\N{U+0645}\N{U+0648}\N{U+0631}\N{U+064a}\N{U+062a}\N{U+0627}\N{U+0646}\N{U+064a}\N{U+0627}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Mauritania",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-OM ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-OM",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Oman",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0639}\N{U+064f}\N{U+0645}\N{U+0627}\N{U+0646}",
    native_script => undef,
    native_territory => "\N{U+0639}\N{U+064f}\N{U+0645}\N{U+0627}\N{U+0646}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Oman",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-PS ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-PS",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    month_format_narrow => [
      "\N{U+0643}",
      "\N{U+0634}",
      "\N{U+0622}",
      "\N{U+0646}",
      "\N{U+0623}",
      "\N{U+062d}",
      "\N{U+062a}",
      "\N{U+0622}",
      "\N{U+0623}",
      "\N{U+062a}",
      "\N{U+062a}",
      "\N{U+0643}"
    ],
    month_format_wide => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0643}",
      "\N{U+0634}",
      "\N{U+0622}",
      "\N{U+0646}",
      "\N{U+0623}",
      "\N{U+062d}",
      "\N{U+062a}",
      "\N{U+0622}",
      "\N{U+0623}",
      "\N{U+062a}",
      "\N{U+062a}",
      "\N{U+0643}"
    ],
    month_stand_alone_wide => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    name => "Arabic Palestinian Territories",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0627}\N{U+0636}\N{U+064a} \N{U+0627}\N{U+0644}\N{U+0641}\N{U+0644}\N{U+0633}\N{U+0637}\N{U+064a}\N{U+0646}\N{U+064a}\N{U+0629}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0627}\N{U+0636}\N{U+064a} \N{U+0627}\N{U+0644}\N{U+0641}\N{U+0644}\N{U+0633}\N{U+0637}\N{U+064a}\N{U+0646}\N{U+064a}\N{U+0629}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Palestinian Territories",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-QA ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-QA",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Qatar",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0642}\N{U+0637}\N{U+0631}",
    native_script => undef,
    native_territory => "\N{U+0642}\N{U+0637}\N{U+0631}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Qatar",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-SA ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-SA",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A %e %B %Y",
    glibc_datetime_format => "%A %e %B %Y  %k:%M:%S",
    glibc_time_12_format => "%k:%M:%S",
    glibc_time_format => "%k:%M:%S",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Saudi Arabia",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+0645}\N{U+0644}\N{U+0643}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0633}\N{U+0639}\N{U+0648}\N{U+062f}\N{U+064a}\N{U+0629}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+0644}\N{U+0645}\N{U+0645}\N{U+0644}\N{U+0643}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0633}\N{U+0639}\N{U+0648}\N{U+062f}\N{U+064a}\N{U+0629}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Saudi Arabia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-SD ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-SD",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Sudan",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0633}\N{U+0648}\N{U+062f}\N{U+0627}\N{U+0646}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0648}\N{U+062f}\N{U+0627}\N{U+0646}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Sudan",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-SO ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-SO",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Somalia",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+0635}\N{U+0648}\N{U+0645}\N{U+0627}\N{U+0644}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+0644}\N{U+0635}\N{U+0648}\N{U+0645}\N{U+0627}\N{U+0644}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Somalia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-SS ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-SS",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic South Sudan",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+062c}\N{U+0646}\N{U+0648}\N{U+0628} \N{U+0627}\N{U+0644}\N{U+0633}\N{U+0648}\N{U+062f}\N{U+0627}\N{U+0646}",
    native_script => undef,
    native_territory => "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0628} \N{U+0627}\N{U+0644}\N{U+0633}\N{U+0648}\N{U+062f}\N{U+0627}\N{U+0646}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "South Sudan",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-SY ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-SY",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    month_format_narrow => [
      "\N{U+0643}",
      "\N{U+0634}",
      "\N{U+0622}",
      "\N{U+0646}",
      "\N{U+0623}",
      "\N{U+062d}",
      "\N{U+062a}",
      "\N{U+0622}",
      "\N{U+0623}",
      "\N{U+062a}",
      "\N{U+062a}",
      "\N{U+0643}"
    ],
    month_format_wide => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0643}",
      "\N{U+0634}",
      "\N{U+0622}",
      "\N{U+0646}",
      "\N{U+0623}",
      "\N{U+062d}",
      "\N{U+062a}",
      "\N{U+0622}",
      "\N{U+0623}",
      "\N{U+062a}",
      "\N{U+062a}",
      "\N{U+0643}"
    ],
    month_stand_alone_wide => [
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0634}\N{U+0628}\N{U+0627}\N{U+0637}",
      "\N{U+0622}\N{U+0630}\N{U+0627}\N{U+0631}",
      "\N{U+0646}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+0646}",
      "\N{U+0623}\N{U+064a}\N{U+0627}\N{U+0631}",
      "\N{U+062d}\N{U+0632}\N{U+064a}\N{U+0631}\N{U+0627}\N{U+0646}",
      "\N{U+062a}\N{U+0645}\N{U+0648}\N{U+0632}",
      "\N{U+0622}\N{U+0628}",
      "\N{U+0623}\N{U+064a}\N{U+0644}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+062a}\N{U+0634}\N{U+0631}\N{U+064a}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0643}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+0646} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}"
    ],
    name => "Arabic Syria",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0633}\N{U+0648}\N{U+0631}\N{U+064a}\N{U+0627}",
    native_script => undef,
    native_territory => "\N{U+0633}\N{U+0648}\N{U+0631}\N{U+064a}\N{U+0627}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Syria",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-TD ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-TD",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Chad",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+062a}\N{U+0634}\N{U+0627}\N{U+062f}",
    native_script => undef,
    native_territory => "\N{U+062a}\N{U+0634}\N{U+0627}\N{U+062f}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Chad",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-TN ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-TN",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+0641}\N{U+064a}",
      "\N{U+0641}\N{U+064a}\N{U+0641}\N{U+0631}\N{U+064a}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0641}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+062c}\N{U+0648}\N{U+0627}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+064a}\N{U+0644}\N{U+064a}\N{U+0629}",
      "\N{U+0623}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+062c}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0645}",
      "\N{U+062c}",
      "\N{U+062c}",
      "\N{U+0623}",
      "\N{U+0633}",
      "\N{U+0623}",
      "\N{U+0646}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+0641}\N{U+064a}",
      "\N{U+0641}\N{U+064a}\N{U+0641}\N{U+0631}\N{U+064a}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0641}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+062c}\N{U+0648}\N{U+0627}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+064a}\N{U+0644}\N{U+064a}\N{U+0629}",
      "\N{U+0623}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+0641}\N{U+064a}",
      "\N{U+0641}\N{U+064a}\N{U+0641}\N{U+0631}\N{U+064a}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0641}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+062c}\N{U+0648}\N{U+0627}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+064a}\N{U+0644}\N{U+064a}\N{U+0629}",
      "\N{U+0623}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+062c}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0645}",
      "\N{U+062c}",
      "\N{U+062c}",
      "\N{U+0623}",
      "\N{U+0633}",
      "\N{U+0623}",
      "\N{U+0646}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+0641}\N{U+064a}",
      "\N{U+0641}\N{U+064a}\N{U+0641}\N{U+0631}\N{U+064a}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0641}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+062c}\N{U+0648}\N{U+0627}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+064a}\N{U+0644}\N{U+064a}\N{U+0629}",
      "\N{U+0623}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Tunisia",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+062a}\N{U+0648}\N{U+0646}\N{U+0633}",
    native_script => undef,
    native_territory => "\N{U+062a}\N{U+0648}\N{U+0646}\N{U+0633}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Tunisia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ar-YE ]__
  {
    am_pm_abbreviated => [
      "\N{U+0635}",
      "\N{U+0645}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+060c} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMEd => "E\N{U+060c} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd\N{U+200f}/MM",
      Md => "d/\N{U+200f}M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M\N{U+200f}/y",
      yMEd => "E\N{U+060c} d/\N{U+200f}M/\N{U+200f}y",
      yMM => "MM\N{U+200f}/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d\N{U+200f}/M\N{U+200f}/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ar-YE",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "dd\N{U+200f}/MM\N{U+200f}/y",
    date_format_short => "d\N{U+200f}/M\N{U+200f}/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_format_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0646}",
      "\N{U+062b}",
      "\N{U+0631}",
      "\N{U+062e}",
      "\N{U+062c}",
      "\N{U+0633}",
      "\N{U+062d}"
    ],
    day_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0646}\N{U+064a}\N{U+0646}",
      "\N{U+0627}\N{U+0644}\N{U+062b}\N{U+0644}\N{U+0627}\N{U+062b}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+0631}\N{U+0628}\N{U+0639}\N{U+0627}\N{U+0621}",
      "\N{U+0627}\N{U+0644}\N{U+062e}\N{U+0645}\N{U+064a}\N{U+0633}",
      "\N{U+0627}\N{U+0644}\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0629}",
      "\N{U+0627}\N{U+0644}\N{U+0633}\N{U+0628}\N{U+062a}",
      "\N{U+0627}\N{U+0644}\N{U+0623}\N{U+062d}\N{U+062f}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0644}\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+064a}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+064a}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b, %Y",
    glibc_datetime_format => "%d %b, %Y %Z %I:%M:%S %p",
    glibc_time_12_format => "%Z %I:%M:%S %p",
    glibc_time_format => "%Z %I:%M:%S ",
    language => "Arabic",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+064a}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0623}",
      "\N{U+0648}",
      "\N{U+0646}",
      "\N{U+0644}",
      "\N{U+063a}",
      "\N{U+0633}",
      "\N{U+0643}",
      "\N{U+0628}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0646}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0627}\N{U+064a}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0623}\N{U+0628}\N{U+0631}\N{U+064a}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0646}\N{U+064a}\N{U+0648}",
      "\N{U+064a}\N{U+0648}\N{U+0644}\N{U+064a}\N{U+0648}",
      "\N{U+0623}\N{U+063a}\N{U+0633}\N{U+0637}\N{U+0633}",
      "\N{U+0633}\N{U+0628}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0623}\N{U+0643}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0641}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+064a}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Arabic Yemen",
    native_language => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629}",
    native_name => "\N{U+0627}\N{U+0644}\N{U+0639}\N{U+0631}\N{U+0628}\N{U+064a}\N{U+0629} \N{U+0627}\N{U+0644}\N{U+064a}\N{U+0645}\N{U+0646}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+0644}\N{U+064a}\N{U+0645}\N{U+0646}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_format_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_format_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0661}",
      "\N{U+0662}",
      "\N{U+0663}",
      "\N{U+0664}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0623}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0646}\N{U+064a}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+062b}\N{U+0627}\N{U+0644}\N{U+062b}",
      "\N{U+0627}\N{U+0644}\N{U+0631}\N{U+0628}\N{U+0639} \N{U+0627}\N{U+0644}\N{U+0631}\N{U+0627}\N{U+0628}\N{U+0639}"
    ],
    script => undef,
    territory => "Yemen",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ as ]__
  {
    am_pm_abbreviated => [
      "\N{U+09aa}\N{U+09c2}\N{U+09f0}\N{U+09cd}\N{U+09ac}\N{U+09be}\N{U+09b9}\N{U+09cd}\N{U+09a3}",
      "\N{U+0985}\N{U+09aa}\N{U+09f0}\N{U+09be}\N{U+09b9}\N{U+09cd}\N{U+09a3}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "as",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b7}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09f0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}",
      "\N{U+09f0}\N{U+09ac}\N{U+09bf}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b7}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09f0}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09a6}\N{U+09c7}\N{U+0993}\N{U+09ac}\N{U+09be}\N{U+09f0}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b7}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09f0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}",
      "\N{U+09f0}\N{U+09ac}\N{U+09bf}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b7}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09f0}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09a6}\N{U+09c7}\N{U+0993}\N{U+09ac}\N{U+09be}\N{U+09f0}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Assamese",
    month_format_abbreviated => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09f0}\N{U+09c1}",
      "\N{U+09ae}\N{U+09be}\N{U+09f0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}",
      "\N{U+09b8}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+099f}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}",
      "\N{U+09a8}\N{U+09ad}\N{U+09c7}",
      "\N{U+09a1}\N{U+09bf}\N{U+09b8}\N{U+09c7}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}\N{U+09f1}\N{U+09be}\N{U+09f0}\N{U+09c0}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09f0}\N{U+09c1}\N{U+09f1}\N{U+09be}\N{U+09f0}\N{U+09c0}",
      "\N{U+09ae}\N{U+09be}\N{U+09f0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}\N{U+09b7}\N{U+09cd}\N{U+099f}",
      "\N{U+099b}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+09a4}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09f0}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}\N{U+09ac}\N{U+09f0}",
      "\N{U+09a8}\N{U+09f1}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09f0}",
      "\N{U+09a1}\N{U+09bf}\N{U+099a}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09f0}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09f0}\N{U+09c1}",
      "\N{U+09ae}\N{U+09be}\N{U+09f0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}",
      "\N{U+09b8}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+099f}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}",
      "\N{U+09a8}\N{U+09ad}\N{U+09c7}",
      "\N{U+09a1}\N{U+09bf}\N{U+09b8}\N{U+09c7}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}\N{U+09f1}\N{U+09be}\N{U+09f0}\N{U+09c0}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09f0}\N{U+09c1}\N{U+09f1}\N{U+09be}\N{U+09f0}\N{U+09c0}",
      "\N{U+09ae}\N{U+09be}\N{U+09f0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}\N{U+09b7}\N{U+09cd}\N{U+099f}",
      "\N{U+099b}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+09a4}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09f0}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}\N{U+09ac}\N{U+09f0}",
      "\N{U+09a8}\N{U+09f1}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09f0}",
      "\N{U+09a1}\N{U+09bf}\N{U+099a}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09f0}"
    ],
    name => "Assamese",
    native_language => "\N{U+0985}\N{U+09b8}\N{U+09ae}\N{U+09c0}\N{U+09af}\N{U+09bc}\N{U+09be}",
    native_name => "\N{U+0985}\N{U+09b8}\N{U+09ae}\N{U+09c0}\N{U+09af}\N{U+09bc}\N{U+09be}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09a5}\N{U+09ae} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+09a6}\N{U+09cd}\N{U+09ac}\N{U+09bf}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+09a4}\N{U+09c3}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+099a}\N{U+09a4}\N{U+09c1}\N{U+09f0}\N{U+09cd}\N{U+09a5} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09a5}\N{U+09ae} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+09a6}\N{U+09cd}\N{U+09ac}\N{U+09bf}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+09a4}\N{U+09c3}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+099a}\N{U+09a4}\N{U+09c1}\N{U+09f0}\N{U+09cd}\N{U+09a5} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09a5}\N{U+09ae} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+09a6}\N{U+09cd}\N{U+09ac}\N{U+09bf}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+09a4}\N{U+09c3}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+099a}\N{U+09a4}\N{U+09c1}\N{U+09f0}\N{U+09cd}\N{U+09a5} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09a5}\N{U+09ae} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+09a6}\N{U+09cd}\N{U+09ac}\N{U+09bf}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+09a4}\N{U+09c3}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+099a}\N{U+09a4}\N{U+09c1}\N{U+09f0}\N{U+09cd}\N{U+09a5} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ as-IN ]__
  {
    am_pm_abbreviated => [
      "\N{U+09aa}\N{U+09c2}\N{U+09f0}\N{U+09cd}\N{U+09ac}\N{U+09be}\N{U+09b9}\N{U+09cd}\N{U+09a3}",
      "\N{U+0985}\N{U+09aa}\N{U+09f0}\N{U+09be}\N{U+09b9}\N{U+09cd}\N{U+09a3}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "as-IN",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b7}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09f0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}",
      "\N{U+09f0}\N{U+09ac}\N{U+09bf}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b7}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09f0}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09a6}\N{U+09c7}\N{U+0993}\N{U+09ac}\N{U+09be}\N{U+09f0}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b7}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09f0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}",
      "\N{U+09f0}\N{U+09ac}\N{U+09bf}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b7}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09f0}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09f0}",
      "\N{U+09a6}\N{U+09c7}\N{U+0993}\N{U+09ac}\N{U+09be}\N{U+09f0}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%e-%m-%Y",
    glibc_datetime_format => "%e %B, %Y %I.%M.%S %p %Z",
    glibc_time_12_format => "%I.%M.%S %p",
    glibc_time_format => "%I.%M.%S %p",
    language => "Assamese",
    month_format_abbreviated => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09f0}\N{U+09c1}",
      "\N{U+09ae}\N{U+09be}\N{U+09f0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}",
      "\N{U+09b8}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+099f}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}",
      "\N{U+09a8}\N{U+09ad}\N{U+09c7}",
      "\N{U+09a1}\N{U+09bf}\N{U+09b8}\N{U+09c7}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}\N{U+09f1}\N{U+09be}\N{U+09f0}\N{U+09c0}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09f0}\N{U+09c1}\N{U+09f1}\N{U+09be}\N{U+09f0}\N{U+09c0}",
      "\N{U+09ae}\N{U+09be}\N{U+09f0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}\N{U+09b7}\N{U+09cd}\N{U+099f}",
      "\N{U+099b}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+09a4}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09f0}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}\N{U+09ac}\N{U+09f0}",
      "\N{U+09a8}\N{U+09f1}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09f0}",
      "\N{U+09a1}\N{U+09bf}\N{U+099a}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09f0}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09f0}\N{U+09c1}",
      "\N{U+09ae}\N{U+09be}\N{U+09f0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}",
      "\N{U+09b8}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+099f}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}",
      "\N{U+09a8}\N{U+09ad}\N{U+09c7}",
      "\N{U+09a1}\N{U+09bf}\N{U+09b8}\N{U+09c7}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}\N{U+09f1}\N{U+09be}\N{U+09f0}\N{U+09c0}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09f0}\N{U+09c1}\N{U+09f1}\N{U+09be}\N{U+09f0}\N{U+09c0}",
      "\N{U+09ae}\N{U+09be}\N{U+09f0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}\N{U+09b7}\N{U+09cd}\N{U+099f}",
      "\N{U+099b}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+09a4}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09f0}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}\N{U+09ac}\N{U+09f0}",
      "\N{U+09a8}\N{U+09f1}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09f0}",
      "\N{U+09a1}\N{U+09bf}\N{U+099a}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09f0}"
    ],
    name => "Assamese India",
    native_language => "\N{U+0985}\N{U+09b8}\N{U+09ae}\N{U+09c0}\N{U+09af}\N{U+09bc}\N{U+09be}",
    native_name => "\N{U+0985}\N{U+09b8}\N{U+09ae}\N{U+09c0}\N{U+09af}\N{U+09bc}\N{U+09be} \N{U+09ad}\N{U+09be}\N{U+09f0}\N{U+09a4}",
    native_script => undef,
    native_territory => "\N{U+09ad}\N{U+09be}\N{U+09f0}\N{U+09a4}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09a5}\N{U+09ae} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+09a6}\N{U+09cd}\N{U+09ac}\N{U+09bf}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+09a4}\N{U+09c3}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+099a}\N{U+09a4}\N{U+09c1}\N{U+09f0}\N{U+09cd}\N{U+09a5} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09a5}\N{U+09ae} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+09a6}\N{U+09cd}\N{U+09ac}\N{U+09bf}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+09a4}\N{U+09c3}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+099a}\N{U+09a4}\N{U+09c1}\N{U+09f0}\N{U+09cd}\N{U+09a5} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09a5}\N{U+09ae} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+09a6}\N{U+09cd}\N{U+09ac}\N{U+09bf}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+09a4}\N{U+09c3}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+099a}\N{U+09a4}\N{U+09c1}\N{U+09f0}\N{U+09cd}\N{U+09a5} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09a5}\N{U+09ae} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+09a6}\N{U+09cd}\N{U+09ac}\N{U+09bf}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+09a4}\N{U+09c3}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}",
      "\N{U+099a}\N{U+09a4}\N{U+09c1}\N{U+09f0}\N{U+09cd}\N{U+09a5} \N{U+09aa}\N{U+09cd}\N{U+09f0}\N{U+09b9}\N{U+09f0}"
    ],
    script => undef,
    territory => "India",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ asa ]__
  {
    am_pm_abbreviated => [
      "icheheavo",
      "ichamthi"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "asa",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Ijm",
      "Jmo",
      "Jpi"
    ],
    day_format_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "J"
    ],
    day_format_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Ijm",
      "Jmo",
      "Jpi"
    ],
    day_stand_alone_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "J"
    ],
    day_stand_alone_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    era_abbreviated => [
      "KM",
      "BM"
    ],
    era_narrow => [
      "KM",
      "BM"
    ],
    era_wide => [
      "Kabla yakwe Yethu",
      "Baada yakwe Yethu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Asu",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Asu",
    native_language => "Kipare",
    native_name => "Kipare",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ asa-TZ ]__
  {
    am_pm_abbreviated => [
      "icheheavo",
      "ichamthi"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "asa-TZ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Ijm",
      "Jmo",
      "Jpi"
    ],
    day_format_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "J"
    ],
    day_format_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Ijm",
      "Jmo",
      "Jpi"
    ],
    day_stand_alone_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "J"
    ],
    day_stand_alone_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    era_abbreviated => [
      "KM",
      "BM"
    ],
    era_narrow => [
      "KM",
      "BM"
    ],
    era_wide => [
      "Kabla yakwe Yethu",
      "Baada yakwe Yethu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Asu",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Asu Tanzania",
    native_language => "Kipare",
    native_name => "Kipare Tadhania",
    native_script => undef,
    native_territory => "Tadhania",
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    script => undef,
    territory => "Tanzania",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ast ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "LLLL 'de' y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ast",
    date_format_full => "EEEE, d MMMM 'de' y",
    date_format_long => "d MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} 'a' 'les' {0}",
    datetime_format_long => "{1} 'a' 'les' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "llu",
      "mar",
      "mi\N{U+00e9}",
      "xue",
      "vie",
      "s\N{U+00e1}b",
      "dom"
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "X",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "llunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "xueves",
      "vienres",
      "s\N{U+00e1}badu",
      "domingu"
    ],
    day_stand_alone_abbreviated => [
      "llu",
      "mar",
      "mi\N{U+00e9}",
      "xue",
      "vie",
      "s\N{U+00e1}b",
      "dom"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "X",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "llunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "xueves",
      "vienres",
      "s\N{U+00e1}badu",
      "domingu"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "aC",
      "dC"
    ],
    era_wide => [
      "a.C.",
      "despu\N{U+00e9}s de Cristu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Asturian",
    month_format_abbreviated => [
      "xin",
      "feb",
      "mar",
      "abr",
      "may",
      "xun",
      "xnt",
      "ago",
      "set",
      "och",
      "pay",
      "avi"
    ],
    month_format_narrow => [
      "X",
      "F",
      "M",
      "A",
      "M",
      "X",
      "X",
      "A",
      "S",
      "O",
      "P",
      "A"
    ],
    month_format_wide => [
      "de xineru",
      "de febreru",
      "de marzu",
      "d\N{U+2019}abril",
      "de mayu",
      "de xunu",
      "de xunetu",
      "d\N{U+2019}agostu",
      "de setiembre",
      "d\N{U+2019}ochobre",
      "de payares",
      "d\N{U+2019}avientu"
    ],
    month_stand_alone_abbreviated => [
      "Xin",
      "Feb",
      "Mar",
      "Abr",
      "May",
      "Xun",
      "Xnt",
      "Ago",
      "Set",
      "Och",
      "Pay",
      "Avi"
    ],
    month_stand_alone_narrow => [
      "X",
      "F",
      "M",
      "A",
      "M",
      "X",
      "X",
      "A",
      "S",
      "O",
      "P",
      "A"
    ],
    month_stand_alone_wide => [
      "xineru",
      "febreru",
      "marzu",
      "abril",
      "mayu",
      "xunu",
      "xunetu",
      "agostu",
      "setiembre",
      "ochobre",
      "payares",
      "avientu"
    ],
    name => "Asturian",
    native_language => "asturianu",
    native_name => "asturianu",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2u trimestre",
      "3er trimestre",
      "4u trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2u trimestre",
      "3er trimestre",
      "4u trimestre"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ast-ES ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "LLLL 'de' y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ast-ES",
    date_format_full => "EEEE, d MMMM 'de' y",
    date_format_long => "d MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} 'a' 'les' {0}",
    datetime_format_long => "{1} 'a' 'les' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "llu",
      "mar",
      "mi\N{U+00e9}",
      "xue",
      "vie",
      "s\N{U+00e1}b",
      "dom"
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "X",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "llunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "xueves",
      "vienres",
      "s\N{U+00e1}badu",
      "domingu"
    ],
    day_stand_alone_abbreviated => [
      "llu",
      "mar",
      "mi\N{U+00e9}",
      "xue",
      "vie",
      "s\N{U+00e1}b",
      "dom"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "X",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "llunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "xueves",
      "vienres",
      "s\N{U+00e1}badu",
      "domingu"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "aC",
      "dC"
    ],
    era_wide => [
      "a.C.",
      "despu\N{U+00e9}s de Cristu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Asturian",
    month_format_abbreviated => [
      "xin",
      "feb",
      "mar",
      "abr",
      "may",
      "xun",
      "xnt",
      "ago",
      "set",
      "och",
      "pay",
      "avi"
    ],
    month_format_narrow => [
      "X",
      "F",
      "M",
      "A",
      "M",
      "X",
      "X",
      "A",
      "S",
      "O",
      "P",
      "A"
    ],
    month_format_wide => [
      "de xineru",
      "de febreru",
      "de marzu",
      "d\N{U+2019}abril",
      "de mayu",
      "de xunu",
      "de xunetu",
      "d\N{U+2019}agostu",
      "de setiembre",
      "d\N{U+2019}ochobre",
      "de payares",
      "d\N{U+2019}avientu"
    ],
    month_stand_alone_abbreviated => [
      "Xin",
      "Feb",
      "Mar",
      "Abr",
      "May",
      "Xun",
      "Xnt",
      "Ago",
      "Set",
      "Och",
      "Pay",
      "Avi"
    ],
    month_stand_alone_narrow => [
      "X",
      "F",
      "M",
      "A",
      "M",
      "X",
      "X",
      "A",
      "S",
      "O",
      "P",
      "A"
    ],
    month_stand_alone_wide => [
      "xineru",
      "febreru",
      "marzu",
      "abril",
      "mayu",
      "xunu",
      "xunetu",
      "agostu",
      "setiembre",
      "ochobre",
      "payares",
      "avientu"
    ],
    name => "Asturian Spain",
    native_language => "asturianu",
    native_name => "asturianu Espa\N{U+00f1}a",
    native_script => undef,
    native_territory => "Espa\N{U+00f1}a",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2u trimestre",
      "3er trimestre",
      "4u trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2u trimestre",
      "3er trimestre",
      "4u trimestre"
    ],
    script => undef,
    territory => "Spain",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ az ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G MMM y",
      GyMMMEd => "G d MMM y, E",
      GyMMMd => "G d MMM y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "dd.MM, E",
      MMM => "LLL",
      MMMEd => "d MMM, E",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "dd.MM.y, E",
      yMMM => "MMM y",
      yMMMEd => "d MMM y, E",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "dd.MM.y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "az",
    date_format_full => "d MMMM y, EEEE",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "B.E.",
      "\N{U+00c7}.A.",
      "\N{U+00c7}.",
      "C.A.",
      "C.",
      "\N{U+015e}.",
      "B."
    ],
    day_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7
    ],
    day_format_wide => [
      "bazar ert\N{U+0259}si",
      "\N{U+00e7}\N{U+0259}r\N{U+015f}\N{U+0259}nb\N{U+0259} ax\N{U+015f}am\N{U+0131}",
      "\N{U+00e7}\N{U+0259}r\N{U+015f}\N{U+0259}nb\N{U+0259}",
      "c\N{U+00fc}m\N{U+0259} ax\N{U+015f}am\N{U+0131}",
      "c\N{U+00fc}m\N{U+0259}",
      "\N{U+015f}\N{U+0259}nb\N{U+0259}",
      "bazar"
    ],
    day_stand_alone_abbreviated => [
      "B.E.",
      "\N{U+00c7}.A.",
      "\N{U+00c7}.",
      "C.A.",
      "C.",
      "\N{U+015e}.",
      "B."
    ],
    day_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7
    ],
    day_stand_alone_wide => [
      "bazar ert\N{U+0259}si",
      "\N{U+00e7}\N{U+0259}r\N{U+015f}\N{U+0259}nb\N{U+0259} ax\N{U+015f}am\N{U+0131}",
      "\N{U+00e7}\N{U+0259}r\N{U+015f}\N{U+0259}nb\N{U+0259}",
      "c\N{U+00fc}m\N{U+0259} ax\N{U+015f}am\N{U+0131}",
      "c\N{U+00fc}m\N{U+0259}",
      "\N{U+015f}\N{U+0259}nb\N{U+0259}",
      "bazar"
    ],
    era_abbreviated => [
      "e.\N{U+0259}.",
      "b.e."
    ],
    era_narrow => [
      "e.\N{U+0259}.",
      "b.e."
    ],
    era_wide => [
      "eram\N{U+0131}zdan \N{U+0259}vv\N{U+0259}l",
      "eram\N{U+0131}z"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Azerbaijani",
    month_format_abbreviated => [
      "yan",
      "fev",
      "mar",
      "apr",
      "may",
      "iyn",
      "iyl",
      "avq",
      "sen",
      "okt",
      "noy",
      "dek"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "yanvar",
      "fevral",
      "mart",
      "aprel",
      "may",
      "iyun",
      "iyul",
      "avqust",
      "sentyabr",
      "oktyabr",
      "noyabr",
      "dekabr"
    ],
    month_stand_alone_abbreviated => [
      "yan",
      "fev",
      "mar",
      "apr",
      "may",
      "iyn",
      "iyl",
      "avq",
      "sen",
      "okt",
      "noy",
      "dek"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Yanvar",
      "Fevral",
      "Mart",
      "Aprel",
      "May",
      "\N{U+0130}yun",
      "\N{U+0130}yul",
      "Avqust",
      "Sentyabr",
      "Oktyabr",
      "Noyabr",
      "Dekabr"
    ],
    name => "Azerbaijani",
    native_language => "az\N{U+0259}rbaycan dili",
    native_name => "az\N{U+0259}rbaycan dili",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-ci kv.",
      "2-ci kv.",
      "3-c\N{U+00fc} kv.",
      "4-c\N{U+00fc} kv."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-ci kvartal",
      "2-ci kvartal",
      "3-c\N{U+00fc} kvartal",
      "4-c\N{U+00fc} kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "1-ci kv.",
      "2-ci kv.",
      "3-c\N{U+00fc} kv.",
      "4-c\N{U+00fc} kv."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-ci kvartal",
      "2-ci kvartal",
      "3-c\N{U+00fc} kvartal",
      "4-c\N{U+00fc} kvartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ az-Cyrl ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "E, d, MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "E, dd.MM.y",
      yMMM => "MMM, y",
      yMMMEd => "E, d, MMM, y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM, y",
      yMd => "dd.MM.y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "az-Cyrl",
    date_format_full => "EEEE, d, MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0431}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0440} \N{U+0435}\N{U+0440}\N{U+0442}\N{U+04d9}\N{U+0441}\N{U+0438}",
      "\N{U+0447}\N{U+04d9}\N{U+0440}\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9} \N{U+0430}\N{U+0445}\N{U+0448}\N{U+0430}\N{U+043c}\N{U+044b}",
      "\N{U+0447}\N{U+04d9}\N{U+0440}\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9}",
      "\N{U+04b9}\N{U+04af}\N{U+043c}\N{U+04d9} \N{U+0430}\N{U+0445}\N{U+0448}\N{U+0430}\N{U+043c}\N{U+044b}",
      "\N{U+04b9}\N{U+04af}\N{U+043c}\N{U+04d9}",
      "\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9}",
      "\N{U+0431}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0440}"
    ],
    day_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7
    ],
    day_format_wide => [
      "\N{U+0431}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0440} \N{U+0435}\N{U+0440}\N{U+0442}\N{U+04d9}\N{U+0441}\N{U+0438}",
      "\N{U+0447}\N{U+04d9}\N{U+0440}\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9} \N{U+0430}\N{U+0445}\N{U+0448}\N{U+0430}\N{U+043c}\N{U+044b}",
      "\N{U+0447}\N{U+04d9}\N{U+0440}\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9}",
      "\N{U+04b9}\N{U+04af}\N{U+043c}\N{U+04d9} \N{U+0430}\N{U+0445}\N{U+0448}\N{U+0430}\N{U+043c}\N{U+044b}",
      "\N{U+04b9}\N{U+04af}\N{U+043c}\N{U+04d9}",
      "\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9}",
      "\N{U+0431}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0440}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0431}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0440} \N{U+0435}\N{U+0440}\N{U+0442}\N{U+04d9}\N{U+0441}\N{U+0438}",
      "\N{U+0447}\N{U+04d9}\N{U+0440}\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9} \N{U+0430}\N{U+0445}\N{U+0448}\N{U+0430}\N{U+043c}\N{U+044b}",
      "\N{U+0447}\N{U+04d9}\N{U+0440}\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9}",
      "\N{U+04b9}\N{U+04af}\N{U+043c}\N{U+04d9} \N{U+0430}\N{U+0445}\N{U+0448}\N{U+0430}\N{U+043c}\N{U+044b}",
      "\N{U+04b9}\N{U+04af}\N{U+043c}\N{U+04d9}",
      "\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9}",
      "\N{U+0431}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0440}"
    ],
    day_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7
    ],
    day_stand_alone_wide => [
      "\N{U+0431}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0440} \N{U+0435}\N{U+0440}\N{U+0442}\N{U+04d9}\N{U+0441}\N{U+0438}",
      "\N{U+0447}\N{U+04d9}\N{U+0440}\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9} \N{U+0430}\N{U+0445}\N{U+0448}\N{U+0430}\N{U+043c}\N{U+044b}",
      "\N{U+0447}\N{U+04d9}\N{U+0440}\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9}",
      "\N{U+04b9}\N{U+04af}\N{U+043c}\N{U+04d9} \N{U+0430}\N{U+0445}\N{U+0448}\N{U+0430}\N{U+043c}\N{U+044b}",
      "\N{U+04b9}\N{U+04af}\N{U+043c}\N{U+04d9}",
      "\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9}",
      "\N{U+0431}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0440}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Azerbaijani",
    month_format_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0438}\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0438}\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0438}\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0438}\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}"
    ],
    name => "Azerbaijani",
    native_language => "\N{U+0430}\N{U+0437}\N{U+04d9}\N{U+0440}\N{U+0431}\N{U+0430}\N{U+0458}\N{U+04b9}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0438}\N{U+043b}\N{U+0438}",
    native_name => "\N{U+0430}\N{U+0437}\N{U+04d9}\N{U+0440}\N{U+0431}\N{U+0430}\N{U+0458}\N{U+04b9}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0438}\N{U+043b}\N{U+0438}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ az-Cyrl-AZ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "E, d, MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "E, dd.MM.y",
      yMMM => "MMM, y",
      yMMMEd => "E, d, MMM, y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM, y",
      yMd => "dd.MM.y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "az-Cyrl-AZ",
    date_format_full => "EEEE, d, MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0431}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0440} \N{U+0435}\N{U+0440}\N{U+0442}\N{U+04d9}\N{U+0441}\N{U+0438}",
      "\N{U+0447}\N{U+04d9}\N{U+0440}\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9} \N{U+0430}\N{U+0445}\N{U+0448}\N{U+0430}\N{U+043c}\N{U+044b}",
      "\N{U+0447}\N{U+04d9}\N{U+0440}\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9}",
      "\N{U+04b9}\N{U+04af}\N{U+043c}\N{U+04d9} \N{U+0430}\N{U+0445}\N{U+0448}\N{U+0430}\N{U+043c}\N{U+044b}",
      "\N{U+04b9}\N{U+04af}\N{U+043c}\N{U+04d9}",
      "\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9}",
      "\N{U+0431}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0440}"
    ],
    day_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7
    ],
    day_format_wide => [
      "\N{U+0431}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0440} \N{U+0435}\N{U+0440}\N{U+0442}\N{U+04d9}\N{U+0441}\N{U+0438}",
      "\N{U+0447}\N{U+04d9}\N{U+0440}\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9} \N{U+0430}\N{U+0445}\N{U+0448}\N{U+0430}\N{U+043c}\N{U+044b}",
      "\N{U+0447}\N{U+04d9}\N{U+0440}\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9}",
      "\N{U+04b9}\N{U+04af}\N{U+043c}\N{U+04d9} \N{U+0430}\N{U+0445}\N{U+0448}\N{U+0430}\N{U+043c}\N{U+044b}",
      "\N{U+04b9}\N{U+04af}\N{U+043c}\N{U+04d9}",
      "\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9}",
      "\N{U+0431}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0440}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0431}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0440} \N{U+0435}\N{U+0440}\N{U+0442}\N{U+04d9}\N{U+0441}\N{U+0438}",
      "\N{U+0447}\N{U+04d9}\N{U+0440}\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9} \N{U+0430}\N{U+0445}\N{U+0448}\N{U+0430}\N{U+043c}\N{U+044b}",
      "\N{U+0447}\N{U+04d9}\N{U+0440}\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9}",
      "\N{U+04b9}\N{U+04af}\N{U+043c}\N{U+04d9} \N{U+0430}\N{U+0445}\N{U+0448}\N{U+0430}\N{U+043c}\N{U+044b}",
      "\N{U+04b9}\N{U+04af}\N{U+043c}\N{U+04d9}",
      "\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9}",
      "\N{U+0431}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0440}"
    ],
    day_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7
    ],
    day_stand_alone_wide => [
      "\N{U+0431}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0440} \N{U+0435}\N{U+0440}\N{U+0442}\N{U+04d9}\N{U+0441}\N{U+0438}",
      "\N{U+0447}\N{U+04d9}\N{U+0440}\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9} \N{U+0430}\N{U+0445}\N{U+0448}\N{U+0430}\N{U+043c}\N{U+044b}",
      "\N{U+0447}\N{U+04d9}\N{U+0440}\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9}",
      "\N{U+04b9}\N{U+04af}\N{U+043c}\N{U+04d9} \N{U+0430}\N{U+0445}\N{U+0448}\N{U+0430}\N{U+043c}\N{U+044b}",
      "\N{U+04b9}\N{U+04af}\N{U+043c}\N{U+04d9}",
      "\N{U+0448}\N{U+04d9}\N{U+043d}\N{U+0431}\N{U+04d9}",
      "\N{U+0431}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0440}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Azerbaijani",
    month_format_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0438}\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0438}\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0438}\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0438}\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0458}\N{U+0430}\N{U+0431}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}"
    ],
    name => "Azerbaijani Azerbaijan Cyrillic",
    native_language => "\N{U+0430}\N{U+0437}\N{U+04d9}\N{U+0440}\N{U+0431}\N{U+0430}\N{U+0458}\N{U+04b9}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0438}\N{U+043b}\N{U+0438}",
    native_name => "\N{U+0430}\N{U+0437}\N{U+04d9}\N{U+0440}\N{U+0431}\N{U+0430}\N{U+0458}\N{U+04b9}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0438}\N{U+043b}\N{U+0438} \N{U+0410}\N{U+0437}\N{U+04d9}\N{U+0440}\N{U+0431}\N{U+0430}\N{U+0458}\N{U+04b9}\N{U+0430}\N{U+043d} \N{U+041a}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}",
    native_script => "\N{U+041a}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}",
    native_territory => "\N{U+0410}\N{U+0437}\N{U+04d9}\N{U+0440}\N{U+0431}\N{U+0430}\N{U+0458}\N{U+04b9}\N{U+0430}\N{U+043d}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => "Cyrillic",
    territory => "Azerbaijan",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ az-Latn ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G MMM y",
      GyMMMEd => "G d MMM y, E",
      GyMMMd => "G d MMM y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "dd.MM, E",
      MMM => "LLL",
      MMMEd => "d MMM, E",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "dd.MM.y, E",
      yMMM => "MMM y",
      yMMMEd => "d MMM y, E",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "dd.MM.y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "az-Latn",
    date_format_full => "d MMMM y, EEEE",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "B.E.",
      "\N{U+00c7}.A.",
      "\N{U+00c7}.",
      "C.A.",
      "C.",
      "\N{U+015e}.",
      "B."
    ],
    day_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7
    ],
    day_format_wide => [
      "bazar ert\N{U+0259}si",
      "\N{U+00e7}\N{U+0259}r\N{U+015f}\N{U+0259}nb\N{U+0259} ax\N{U+015f}am\N{U+0131}",
      "\N{U+00e7}\N{U+0259}r\N{U+015f}\N{U+0259}nb\N{U+0259}",
      "c\N{U+00fc}m\N{U+0259} ax\N{U+015f}am\N{U+0131}",
      "c\N{U+00fc}m\N{U+0259}",
      "\N{U+015f}\N{U+0259}nb\N{U+0259}",
      "bazar"
    ],
    day_stand_alone_abbreviated => [
      "B.E.",
      "\N{U+00c7}.A.",
      "\N{U+00c7}.",
      "C.A.",
      "C.",
      "\N{U+015e}.",
      "B."
    ],
    day_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7
    ],
    day_stand_alone_wide => [
      "bazar ert\N{U+0259}si",
      "\N{U+00e7}\N{U+0259}r\N{U+015f}\N{U+0259}nb\N{U+0259} ax\N{U+015f}am\N{U+0131}",
      "\N{U+00e7}\N{U+0259}r\N{U+015f}\N{U+0259}nb\N{U+0259}",
      "c\N{U+00fc}m\N{U+0259} ax\N{U+015f}am\N{U+0131}",
      "c\N{U+00fc}m\N{U+0259}",
      "\N{U+015f}\N{U+0259}nb\N{U+0259}",
      "bazar"
    ],
    era_abbreviated => [
      "e.\N{U+0259}.",
      "b.e."
    ],
    era_narrow => [
      "e.\N{U+0259}.",
      "b.e."
    ],
    era_wide => [
      "eram\N{U+0131}zdan \N{U+0259}vv\N{U+0259}l",
      "eram\N{U+0131}z"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Azerbaijani",
    month_format_abbreviated => [
      "yan",
      "fev",
      "mar",
      "apr",
      "may",
      "iyn",
      "iyl",
      "avq",
      "sen",
      "okt",
      "noy",
      "dek"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "yanvar",
      "fevral",
      "mart",
      "aprel",
      "may",
      "iyun",
      "iyul",
      "avqust",
      "sentyabr",
      "oktyabr",
      "noyabr",
      "dekabr"
    ],
    month_stand_alone_abbreviated => [
      "yan",
      "fev",
      "mar",
      "apr",
      "may",
      "iyn",
      "iyl",
      "avq",
      "sen",
      "okt",
      "noy",
      "dek"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Yanvar",
      "Fevral",
      "Mart",
      "Aprel",
      "May",
      "\N{U+0130}yun",
      "\N{U+0130}yul",
      "Avqust",
      "Sentyabr",
      "Oktyabr",
      "Noyabr",
      "Dekabr"
    ],
    name => "Azerbaijani",
    native_language => "az\N{U+0259}rbaycan dili",
    native_name => "az\N{U+0259}rbaycan dili",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-ci kv.",
      "2-ci kv.",
      "3-c\N{U+00fc} kv.",
      "4-c\N{U+00fc} kv."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-ci kvartal",
      "2-ci kvartal",
      "3-c\N{U+00fc} kvartal",
      "4-c\N{U+00fc} kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "1-ci kv.",
      "2-ci kv.",
      "3-c\N{U+00fc} kv.",
      "4-c\N{U+00fc} kv."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-ci kvartal",
      "2-ci kvartal",
      "3-c\N{U+00fc} kvartal",
      "4-c\N{U+00fc} kvartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ az-Latn-AZ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G MMM y",
      GyMMMEd => "G d MMM y, E",
      GyMMMd => "G d MMM y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "dd.MM, E",
      MMM => "LLL",
      MMMEd => "d MMM, E",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "dd.MM.y, E",
      yMMM => "MMM y",
      yMMMEd => "d MMM y, E",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "dd.MM.y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "az-Latn-AZ",
    date_format_full => "d MMMM y, EEEE",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "B.E.",
      "\N{U+00c7}.A.",
      "\N{U+00c7}.",
      "C.A.",
      "C.",
      "\N{U+015e}.",
      "B."
    ],
    day_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7
    ],
    day_format_wide => [
      "bazar ert\N{U+0259}si",
      "\N{U+00e7}\N{U+0259}r\N{U+015f}\N{U+0259}nb\N{U+0259} ax\N{U+015f}am\N{U+0131}",
      "\N{U+00e7}\N{U+0259}r\N{U+015f}\N{U+0259}nb\N{U+0259}",
      "c\N{U+00fc}m\N{U+0259} ax\N{U+015f}am\N{U+0131}",
      "c\N{U+00fc}m\N{U+0259}",
      "\N{U+015f}\N{U+0259}nb\N{U+0259}",
      "bazar"
    ],
    day_stand_alone_abbreviated => [
      "B.E.",
      "\N{U+00c7}.A.",
      "\N{U+00c7}.",
      "C.A.",
      "C.",
      "\N{U+015e}.",
      "B."
    ],
    day_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7
    ],
    day_stand_alone_wide => [
      "bazar ert\N{U+0259}si",
      "\N{U+00e7}\N{U+0259}r\N{U+015f}\N{U+0259}nb\N{U+0259} ax\N{U+015f}am\N{U+0131}",
      "\N{U+00e7}\N{U+0259}r\N{U+015f}\N{U+0259}nb\N{U+0259}",
      "c\N{U+00fc}m\N{U+0259} ax\N{U+015f}am\N{U+0131}",
      "c\N{U+00fc}m\N{U+0259}",
      "\N{U+015f}\N{U+0259}nb\N{U+0259}",
      "bazar"
    ],
    era_abbreviated => [
      "e.\N{U+0259}.",
      "b.e."
    ],
    era_narrow => [
      "e.\N{U+0259}.",
      "b.e."
    ],
    era_wide => [
      "eram\N{U+0131}zdan \N{U+0259}vv\N{U+0259}l",
      "eram\N{U+0131}z"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Azerbaijani",
    month_format_abbreviated => [
      "yan",
      "fev",
      "mar",
      "apr",
      "may",
      "iyn",
      "iyl",
      "avq",
      "sen",
      "okt",
      "noy",
      "dek"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "yanvar",
      "fevral",
      "mart",
      "aprel",
      "may",
      "iyun",
      "iyul",
      "avqust",
      "sentyabr",
      "oktyabr",
      "noyabr",
      "dekabr"
    ],
    month_stand_alone_abbreviated => [
      "yan",
      "fev",
      "mar",
      "apr",
      "may",
      "iyn",
      "iyl",
      "avq",
      "sen",
      "okt",
      "noy",
      "dek"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Yanvar",
      "Fevral",
      "Mart",
      "Aprel",
      "May",
      "\N{U+0130}yun",
      "\N{U+0130}yul",
      "Avqust",
      "Sentyabr",
      "Oktyabr",
      "Noyabr",
      "Dekabr"
    ],
    name => "Azerbaijani Azerbaijan Latin",
    native_language => "az\N{U+0259}rbaycan dili",
    native_name => "az\N{U+0259}rbaycan dili Az\N{U+0259}rbaycan lat\N{U+0131}n",
    native_script => "lat\N{U+0131}n",
    native_territory => "Az\N{U+0259}rbaycan",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-ci kv.",
      "2-ci kv.",
      "3-c\N{U+00fc} kv.",
      "4-c\N{U+00fc} kv."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-ci kvartal",
      "2-ci kvartal",
      "3-c\N{U+00fc} kvartal",
      "4-c\N{U+00fc} kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "1-ci kv.",
      "2-ci kv.",
      "3-c\N{U+00fc} kv.",
      "4-c\N{U+00fc} kv."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-ci kvartal",
      "2-ci kvartal",
      "3-c\N{U+00fc} kvartal",
      "4-c\N{U+00fc} kvartal"
    ],
    script => "Latin",
    territory => "Azerbaijan",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ bas ]__
  {
    am_pm_abbreviated => [
      "I bik\N{U+025b}\N{U+0302}gl\N{U+00e0}",
      "I \N{U+0253}ugaj\N{U+0254}p"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "bas",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "nja",
      "uum",
      "\N{U+014b}ge",
      "mb\N{U+0254}",
      "k\N{U+0254}\N{U+0254}",
      "jon",
      "n\N{U+0254}y"
    ],
    day_format_narrow => [
      "n",
      "u",
      "\N{U+014b}",
      "m",
      "k",
      "j",
      "n"
    ],
    day_format_wide => [
      "\N{U+014b}gw\N{U+00e0} nja\N{U+014b}gumba",
      "\N{U+014b}gw\N{U+00e0} \N{U+00fb}m",
      "\N{U+014b}gw\N{U+00e0} \N{U+014b}g\N{U+00ea}",
      "\N{U+014b}gw\N{U+00e0} mb\N{U+0254}k",
      "\N{U+014b}gw\N{U+00e0} k\N{U+0254}\N{U+0254}",
      "\N{U+014b}gw\N{U+00e0} j\N{U+00f4}n",
      "\N{U+014b}gw\N{U+00e0} n\N{U+0254}\N{U+0302}y"
    ],
    day_stand_alone_abbreviated => [
      "nja",
      "uum",
      "\N{U+014b}ge",
      "mb\N{U+0254}",
      "k\N{U+0254}\N{U+0254}",
      "jon",
      "n\N{U+0254}y"
    ],
    day_stand_alone_narrow => [
      "n",
      "u",
      "\N{U+014b}",
      "m",
      "k",
      "j",
      "n"
    ],
    day_stand_alone_wide => [
      "\N{U+014b}gw\N{U+00e0} nja\N{U+014b}gumba",
      "\N{U+014b}gw\N{U+00e0} \N{U+00fb}m",
      "\N{U+014b}gw\N{U+00e0} \N{U+014b}g\N{U+00ea}",
      "\N{U+014b}gw\N{U+00e0} mb\N{U+0254}k",
      "\N{U+014b}gw\N{U+00e0} k\N{U+0254}\N{U+0254}",
      "\N{U+014b}gw\N{U+00e0} j\N{U+00f4}n",
      "\N{U+014b}gw\N{U+00e0} n\N{U+0254}\N{U+0302}y"
    ],
    era_abbreviated => [
      "b.Y.K",
      "m.Y.K"
    ],
    era_narrow => [
      "b.Y.K",
      "m.Y.K"
    ],
    era_wide => [
      "bis\N{U+016b} bi Yes\N{U+00f9} Kr\N{U+01d0}st\N{U+00f2}",
      "i mb\N{U+016b}s Yes\N{U+00f9} Kr\N{U+01d0}st\N{U+00f2}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Basaa",
    month_format_abbreviated => [
      "k\N{U+0254}n",
      "mac",
      "mat",
      "mto",
      "mpu",
      "hil",
      "nje",
      "hik",
      "dip",
      "bio",
      "may",
      "li\N{U+0253}"
    ],
    month_format_narrow => [
      "k",
      "m",
      "m",
      "m",
      "m",
      "h",
      "n",
      "h",
      "d",
      "b",
      "m",
      "l"
    ],
    month_format_wide => [
      "K\N{U+0254}nd\N{U+0254}\N{U+014b}",
      "M\N{U+00e0}c\N{U+025b}\N{U+0302}l",
      "M\N{U+00e0}t\N{U+00f9}mb",
      "M\N{U+00e0}top",
      "M\N{U+0300}puy\N{U+025b}",
      "H\N{U+00ec}l\N{U+00f2}nd\N{U+025b}\N{U+0300}",
      "Nj\N{U+00e8}b\N{U+00e0}",
      "H\N{U+00ec}ka\N{U+014b}",
      "D\N{U+00ec}p\N{U+0254}\N{U+0300}s",
      "B\N{U+00ec}\N{U+00f2}\N{U+00f4}m",
      "M\N{U+00e0}y\N{U+025b}s\N{U+00e8}p",
      "L\N{U+00ec}buy li \N{U+0144}y\N{U+00e8}e"
    ],
    month_stand_alone_abbreviated => [
      "k\N{U+0254}n",
      "mac",
      "mat",
      "mto",
      "mpu",
      "hil",
      "nje",
      "hik",
      "dip",
      "bio",
      "may",
      "li\N{U+0253}"
    ],
    month_stand_alone_narrow => [
      "k",
      "m",
      "m",
      "m",
      "m",
      "h",
      "n",
      "h",
      "d",
      "b",
      "m",
      "l"
    ],
    month_stand_alone_wide => [
      "K\N{U+0254}nd\N{U+0254}\N{U+014b}",
      "M\N{U+00e0}c\N{U+025b}\N{U+0302}l",
      "M\N{U+00e0}t\N{U+00f9}mb",
      "M\N{U+00e0}top",
      "M\N{U+0300}puy\N{U+025b}",
      "H\N{U+00ec}l\N{U+00f2}nd\N{U+025b}\N{U+0300}",
      "Nj\N{U+00e8}b\N{U+00e0}",
      "H\N{U+00ec}ka\N{U+014b}",
      "D\N{U+00ec}p\N{U+0254}\N{U+0300}s",
      "B\N{U+00ec}\N{U+00f2}\N{U+00f4}m",
      "M\N{U+00e0}y\N{U+025b}s\N{U+00e8}p",
      "L\N{U+00ec}buy li \N{U+0144}y\N{U+00e8}e"
    ],
    name => "Basaa",
    native_language => "\N{U+0181}\N{U+00e0}s\N{U+00e0}a",
    native_name => "\N{U+0181}\N{U+00e0}s\N{U+00e0}a",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1s3",
      "K2s3",
      "K3s3",
      "K4s3"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "K\N{U+00e8}k bisu i so\N{U+014b} ia\N{U+00e2}",
      "K\N{U+00e8}k i \N{U+0144}yonos bi\N{U+0253}a\N{U+00e0} i so\N{U+014b} ia\N{U+00e2}",
      "K\N{U+00e8}k i \N{U+0144}yonos bia\N{U+00e2} i so\N{U+014b} ia\N{U+00e2}",
      "K\N{U+00e8}k i \N{U+0144}yonos bin\N{U+00e2} i so\N{U+014b} ia\N{U+00e2}"
    ],
    quarter_stand_alone_abbreviated => [
      "K1s3",
      "K2s3",
      "K3s3",
      "K4s3"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "K\N{U+00e8}k bisu i so\N{U+014b} ia\N{U+00e2}",
      "K\N{U+00e8}k i \N{U+0144}yonos bi\N{U+0253}a\N{U+00e0} i so\N{U+014b} ia\N{U+00e2}",
      "K\N{U+00e8}k i \N{U+0144}yonos bia\N{U+00e2} i so\N{U+014b} ia\N{U+00e2}",
      "K\N{U+00e8}k i \N{U+0144}yonos bin\N{U+00e2} i so\N{U+014b} ia\N{U+00e2}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ bas-CM ]__
  {
    am_pm_abbreviated => [
      "I bik\N{U+025b}\N{U+0302}gl\N{U+00e0}",
      "I \N{U+0253}ugaj\N{U+0254}p"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "bas-CM",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "nja",
      "uum",
      "\N{U+014b}ge",
      "mb\N{U+0254}",
      "k\N{U+0254}\N{U+0254}",
      "jon",
      "n\N{U+0254}y"
    ],
    day_format_narrow => [
      "n",
      "u",
      "\N{U+014b}",
      "m",
      "k",
      "j",
      "n"
    ],
    day_format_wide => [
      "\N{U+014b}gw\N{U+00e0} nja\N{U+014b}gumba",
      "\N{U+014b}gw\N{U+00e0} \N{U+00fb}m",
      "\N{U+014b}gw\N{U+00e0} \N{U+014b}g\N{U+00ea}",
      "\N{U+014b}gw\N{U+00e0} mb\N{U+0254}k",
      "\N{U+014b}gw\N{U+00e0} k\N{U+0254}\N{U+0254}",
      "\N{U+014b}gw\N{U+00e0} j\N{U+00f4}n",
      "\N{U+014b}gw\N{U+00e0} n\N{U+0254}\N{U+0302}y"
    ],
    day_stand_alone_abbreviated => [
      "nja",
      "uum",
      "\N{U+014b}ge",
      "mb\N{U+0254}",
      "k\N{U+0254}\N{U+0254}",
      "jon",
      "n\N{U+0254}y"
    ],
    day_stand_alone_narrow => [
      "n",
      "u",
      "\N{U+014b}",
      "m",
      "k",
      "j",
      "n"
    ],
    day_stand_alone_wide => [
      "\N{U+014b}gw\N{U+00e0} nja\N{U+014b}gumba",
      "\N{U+014b}gw\N{U+00e0} \N{U+00fb}m",
      "\N{U+014b}gw\N{U+00e0} \N{U+014b}g\N{U+00ea}",
      "\N{U+014b}gw\N{U+00e0} mb\N{U+0254}k",
      "\N{U+014b}gw\N{U+00e0} k\N{U+0254}\N{U+0254}",
      "\N{U+014b}gw\N{U+00e0} j\N{U+00f4}n",
      "\N{U+014b}gw\N{U+00e0} n\N{U+0254}\N{U+0302}y"
    ],
    era_abbreviated => [
      "b.Y.K",
      "m.Y.K"
    ],
    era_narrow => [
      "b.Y.K",
      "m.Y.K"
    ],
    era_wide => [
      "bis\N{U+016b} bi Yes\N{U+00f9} Kr\N{U+01d0}st\N{U+00f2}",
      "i mb\N{U+016b}s Yes\N{U+00f9} Kr\N{U+01d0}st\N{U+00f2}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Basaa",
    month_format_abbreviated => [
      "k\N{U+0254}n",
      "mac",
      "mat",
      "mto",
      "mpu",
      "hil",
      "nje",
      "hik",
      "dip",
      "bio",
      "may",
      "li\N{U+0253}"
    ],
    month_format_narrow => [
      "k",
      "m",
      "m",
      "m",
      "m",
      "h",
      "n",
      "h",
      "d",
      "b",
      "m",
      "l"
    ],
    month_format_wide => [
      "K\N{U+0254}nd\N{U+0254}\N{U+014b}",
      "M\N{U+00e0}c\N{U+025b}\N{U+0302}l",
      "M\N{U+00e0}t\N{U+00f9}mb",
      "M\N{U+00e0}top",
      "M\N{U+0300}puy\N{U+025b}",
      "H\N{U+00ec}l\N{U+00f2}nd\N{U+025b}\N{U+0300}",
      "Nj\N{U+00e8}b\N{U+00e0}",
      "H\N{U+00ec}ka\N{U+014b}",
      "D\N{U+00ec}p\N{U+0254}\N{U+0300}s",
      "B\N{U+00ec}\N{U+00f2}\N{U+00f4}m",
      "M\N{U+00e0}y\N{U+025b}s\N{U+00e8}p",
      "L\N{U+00ec}buy li \N{U+0144}y\N{U+00e8}e"
    ],
    month_stand_alone_abbreviated => [
      "k\N{U+0254}n",
      "mac",
      "mat",
      "mto",
      "mpu",
      "hil",
      "nje",
      "hik",
      "dip",
      "bio",
      "may",
      "li\N{U+0253}"
    ],
    month_stand_alone_narrow => [
      "k",
      "m",
      "m",
      "m",
      "m",
      "h",
      "n",
      "h",
      "d",
      "b",
      "m",
      "l"
    ],
    month_stand_alone_wide => [
      "K\N{U+0254}nd\N{U+0254}\N{U+014b}",
      "M\N{U+00e0}c\N{U+025b}\N{U+0302}l",
      "M\N{U+00e0}t\N{U+00f9}mb",
      "M\N{U+00e0}top",
      "M\N{U+0300}puy\N{U+025b}",
      "H\N{U+00ec}l\N{U+00f2}nd\N{U+025b}\N{U+0300}",
      "Nj\N{U+00e8}b\N{U+00e0}",
      "H\N{U+00ec}ka\N{U+014b}",
      "D\N{U+00ec}p\N{U+0254}\N{U+0300}s",
      "B\N{U+00ec}\N{U+00f2}\N{U+00f4}m",
      "M\N{U+00e0}y\N{U+025b}s\N{U+00e8}p",
      "L\N{U+00ec}buy li \N{U+0144}y\N{U+00e8}e"
    ],
    name => "Basaa Cameroon",
    native_language => "\N{U+0181}\N{U+00e0}s\N{U+00e0}a",
    native_name => "\N{U+0181}\N{U+00e0}s\N{U+00e0}a K\N{U+00e0}m\N{U+025b}\N{U+0300}r\N{U+00fb}n",
    native_script => undef,
    native_territory => "K\N{U+00e0}m\N{U+025b}\N{U+0300}r\N{U+00fb}n",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1s3",
      "K2s3",
      "K3s3",
      "K4s3"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "K\N{U+00e8}k bisu i so\N{U+014b} ia\N{U+00e2}",
      "K\N{U+00e8}k i \N{U+0144}yonos bi\N{U+0253}a\N{U+00e0} i so\N{U+014b} ia\N{U+00e2}",
      "K\N{U+00e8}k i \N{U+0144}yonos bia\N{U+00e2} i so\N{U+014b} ia\N{U+00e2}",
      "K\N{U+00e8}k i \N{U+0144}yonos bin\N{U+00e2} i so\N{U+014b} ia\N{U+00e2}"
    ],
    quarter_stand_alone_abbreviated => [
      "K1s3",
      "K2s3",
      "K3s3",
      "K4s3"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "K\N{U+00e8}k bisu i so\N{U+014b} ia\N{U+00e2}",
      "K\N{U+00e8}k i \N{U+0144}yonos bi\N{U+0253}a\N{U+00e0} i so\N{U+014b} ia\N{U+00e2}",
      "K\N{U+00e8}k i \N{U+0144}yonos bia\N{U+00e2} i so\N{U+014b} ia\N{U+00e2}",
      "K\N{U+00e8}k i \N{U+0144}yonos bin\N{U+00e2} i so\N{U+014b} ia\N{U+00e2}"
    ],
    script => undef,
    territory => "Cameroon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ be ]__
  {
    am_pm_abbreviated => [
      "\N{U+0440}\N{U+0430}\N{U+043d}\N{U+0456}\N{U+0446}\N{U+044b}",
      "\N{U+0432}\N{U+0435}\N{U+0447}\N{U+0430}\N{U+0440}\N{U+0430}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH.mm",
      EHms => "E HH.mm.ss",
      Ed => "d, E",
      Ehm => "E hh.mm a",
      Ehms => "E hh.mm.ss a",
      Gy => "y G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "E, d.M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d.M",
      d => "d",
      h => "hh a",
      hm => "hh.mm a",
      hms => "hh.mm.ss a",
      hmsv => "hh.mm.ss a v",
      hmv => "hh.mm a v",
      ms => "mm.ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "LLL y",
      yMMMEd => "E, d MMM y",
      yMMMM => "LLLL y",
      yMMMd => "d MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "be",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d.M.y",
    date_format_short => "d.M.yy",
    datetime_format_full => "{1} '\N{U+0443}' {0}",
    datetime_format_long => "{1} '\N{U+0443}' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0430}\N{U+045e}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0446}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+043d}\N{U+0434}"
    ],
    day_format_narrow => [
      "\N{U+043f}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+0430}\N{U+043d}\N{U+044f}\N{U+0434}\N{U+0437}\N{U+0435}\N{U+043b}\N{U+0430}\N{U+043a}",
      "\N{U+0430}\N{U+045e}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0435}\N{U+0440}\N{U+0430}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0430}\N{U+0446}\N{U+0432}\N{U+0435}\N{U+0440}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0456}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+044f}\N{U+0434}\N{U+0437}\N{U+0435}\N{U+043b}\N{U+044f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0430}\N{U+045e}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0446}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+043d}\N{U+0434}"
    ],
    day_stand_alone_narrow => [
      "\N{U+043f}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+0430}\N{U+043d}\N{U+044f}\N{U+0434}\N{U+0437}\N{U+0435}\N{U+043b}\N{U+0430}\N{U+043a}",
      "\N{U+0430}\N{U+045e}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0435}\N{U+0440}\N{U+0430}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0430}\N{U+0446}\N{U+0432}\N{U+0435}\N{U+0440}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0456}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+044f}\N{U+0434}\N{U+0437}\N{U+0435}\N{U+043b}\N{U+044f}"
    ],
    era_abbreviated => [
      "\N{U+0434}\N{U+0430} \N{U+043d}.\N{U+044d}.",
      "\N{U+043d}.\N{U+044d}."
    ],
    era_narrow => [
      "\N{U+0434}\N{U+0430} \N{U+043d}.\N{U+044d}.",
      "\N{U+043d}.\N{U+044d}."
    ],
    era_wide => [
      "\N{U+0434}\N{U+0430} \N{U+043d}\N{U+0430}\N{U+0448}\N{U+0430}\N{U+0439} \N{U+044d}\N{U+0440}\N{U+044b}",
      "\N{U+043d}\N{U+0430}\N{U+0448}\N{U+0430}\N{U+0439} \N{U+044d}\N{U+0440}\N{U+044b}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Belarusian",
    month_format_abbreviated => [
      "\N{U+0441}\N{U+0442}\N{U+0443}",
      "\N{U+043b}\N{U+044e}\N{U+0442}",
      "\N{U+0441}\N{U+0430}\N{U+043a}",
      "\N{U+043a}\N{U+0440}\N{U+0430}",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0447}\N{U+044d}\N{U+0440}",
      "\N{U+043b}\N{U+0456}\N{U+043f}",
      "\N{U+0436}\N{U+043d}\N{U+0456}",
      "\N{U+0432}\N{U+0435}\N{U+0440}",
      "\N{U+043a}\N{U+0430}\N{U+0441}",
      "\N{U+043b}\N{U+0456}\N{U+0441}",
      "\N{U+0441}\N{U+043d}\N{U+0435}"
    ],
    month_format_narrow => [
      "\N{U+0441}",
      "\N{U+043b}",
      "\N{U+0441}",
      "\N{U+043a}",
      "\N{U+043c}",
      "\N{U+0447}",
      "\N{U+043b}",
      "\N{U+0436}",
      "\N{U+0432}",
      "\N{U+043a}",
      "\N{U+043b}",
      "\N{U+0441}"
    ],
    month_format_wide => [
      "\N{U+0441}\N{U+0442}\N{U+0443}\N{U+0434}\N{U+0437}\N{U+0435}\N{U+043d}\N{U+044f}",
      "\N{U+043b}\N{U+044e}\N{U+0442}\N{U+0430}\N{U+0433}\N{U+0430}",
      "\N{U+0441}\N{U+0430}\N{U+043a}\N{U+0430}\N{U+0432}\N{U+0456}\N{U+043a}\N{U+0430}",
      "\N{U+043a}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+0430}\N{U+0432}\N{U+0456}\N{U+043a}\N{U+0430}",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0447}\N{U+044d}\N{U+0440}\N{U+0432}\N{U+0435}\N{U+043d}\N{U+044f}",
      "\N{U+043b}\N{U+0456}\N{U+043f}\N{U+0435}\N{U+043d}\N{U+044f}",
      "\N{U+0436}\N{U+043d}\N{U+0456}\N{U+045e}\N{U+043d}\N{U+044f}",
      "\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+043d}\N{U+044f}",
      "\N{U+043a}\N{U+0430}\N{U+0441}\N{U+0442}\N{U+0440}\N{U+044b}\N{U+0447}\N{U+043d}\N{U+0456}\N{U+043a}\N{U+0430}",
      "\N{U+043b}\N{U+0456}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+043f}\N{U+0430}\N{U+0434}\N{U+0430}",
      "\N{U+0441}\N{U+043d}\N{U+0435}\N{U+0436}\N{U+043d}\N{U+044f}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0441}\N{U+0442}\N{U+0443}",
      "\N{U+043b}\N{U+044e}\N{U+0442}",
      "\N{U+0441}\N{U+0430}\N{U+043a}",
      "\N{U+043a}\N{U+0440}\N{U+0430}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0447}\N{U+044d}\N{U+0440}",
      "\N{U+043b}\N{U+0456}\N{U+043f}",
      "\N{U+0436}\N{U+043d}\N{U+0456}",
      "\N{U+0432}\N{U+0435}\N{U+0440}",
      "\N{U+043a}\N{U+0430}\N{U+0441}",
      "\N{U+043b}\N{U+0456}\N{U+0441}",
      "\N{U+0441}\N{U+043d}\N{U+0435}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0441}",
      "\N{U+043b}",
      "\N{U+0441}",
      "\N{U+043a}",
      "\N{U+043c}",
      "\N{U+0447}",
      "\N{U+043b}",
      "\N{U+0436}",
      "\N{U+0432}",
      "\N{U+043a}",
      "\N{U+043b}",
      "\N{U+0441}"
    ],
    month_stand_alone_wide => [
      "\N{U+0441}\N{U+0442}\N{U+0443}\N{U+0434}\N{U+0437}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+043b}\N{U+044e}\N{U+0442}\N{U+044b}",
      "\N{U+0441}\N{U+0430}\N{U+043a}\N{U+0430}\N{U+0432}\N{U+0456}\N{U+043a}",
      "\N{U+043a}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+0430}\N{U+0432}\N{U+0456}\N{U+043a}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0447}\N{U+044d}\N{U+0440}\N{U+0432}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+043b}\N{U+0456}\N{U+043f}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+0436}\N{U+043d}\N{U+0456}\N{U+0432}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+043a}\N{U+0430}\N{U+0441}\N{U+0442}\N{U+0440}\N{U+044b}\N{U+0447}\N{U+043d}\N{U+0456}\N{U+043a}",
      "\N{U+043b}\N{U+0456}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+043f}\N{U+0430}\N{U+0434}",
      "\N{U+0441}\N{U+043d}\N{U+0435}\N{U+0436}\N{U+0430}\N{U+043d}\N{U+044c}"
    ],
    name => "Belarusian",
    native_language => "\N{U+0431}\N{U+0435}\N{U+043b}\N{U+0430}\N{U+0440}\N{U+0443}\N{U+0441}\N{U+043a}\N{U+0430}\N{U+044f}",
    native_name => "\N{U+0431}\N{U+0435}\N{U+043b}\N{U+0430}\N{U+0440}\N{U+0443}\N{U+0441}\N{U+043a}\N{U+0430}\N{U+044f}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0448}\N{U+044b} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0433}\N{U+0456} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0446}\N{U+0456} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0442}\N{U+044b} \N{U+043a}\N{U+0432}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0448}\N{U+044b} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0433}\N{U+0456} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0446}\N{U+0456} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0442}\N{U+044b} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0448}\N{U+044b} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0433}\N{U+0456} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0446}\N{U+0456} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0442}\N{U+044b} \N{U+043a}\N{U+0432}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0448}\N{U+044b} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0433}\N{U+0456} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0446}\N{U+0456} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0442}\N{U+044b} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ be-BY ]__
  {
    am_pm_abbreviated => [
      "\N{U+0440}\N{U+0430}\N{U+043d}\N{U+0456}\N{U+0446}\N{U+044b}",
      "\N{U+0432}\N{U+0435}\N{U+0447}\N{U+0430}\N{U+0440}\N{U+0430}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH.mm",
      EHms => "E HH.mm.ss",
      Ed => "d, E",
      Ehm => "E hh.mm a",
      Ehms => "E hh.mm.ss a",
      Gy => "y G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "E, d.M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d.M",
      d => "d",
      h => "hh a",
      hm => "hh.mm a",
      hms => "hh.mm.ss a",
      hmsv => "hh.mm.ss a v",
      hmv => "hh.mm a v",
      ms => "mm.ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "LLL y",
      yMMMEd => "E, d MMM y",
      yMMMM => "LLLL y",
      yMMMd => "d MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "be-BY",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d.M.y",
    date_format_short => "d.M.yy",
    datetime_format_full => "{1} '\N{U+0443}' {0}",
    datetime_format_long => "{1} '\N{U+0443}' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0430}\N{U+045e}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0446}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+043d}\N{U+0434}"
    ],
    day_format_narrow => [
      "\N{U+043f}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+0430}\N{U+043d}\N{U+044f}\N{U+0434}\N{U+0437}\N{U+0435}\N{U+043b}\N{U+0430}\N{U+043a}",
      "\N{U+0430}\N{U+045e}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0435}\N{U+0440}\N{U+0430}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0430}\N{U+0446}\N{U+0432}\N{U+0435}\N{U+0440}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0456}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+044f}\N{U+0434}\N{U+0437}\N{U+0435}\N{U+043b}\N{U+044f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0430}\N{U+045e}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0446}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+043d}\N{U+0434}"
    ],
    day_stand_alone_narrow => [
      "\N{U+043f}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+0430}\N{U+043d}\N{U+044f}\N{U+0434}\N{U+0437}\N{U+0435}\N{U+043b}\N{U+0430}\N{U+043a}",
      "\N{U+0430}\N{U+045e}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0435}\N{U+0440}\N{U+0430}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0430}\N{U+0446}\N{U+0432}\N{U+0435}\N{U+0440}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0456}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+044f}\N{U+0434}\N{U+0437}\N{U+0435}\N{U+043b}\N{U+044f}"
    ],
    era_abbreviated => [
      "\N{U+0434}\N{U+0430} \N{U+043d}.\N{U+044d}.",
      "\N{U+043d}.\N{U+044d}."
    ],
    era_narrow => [
      "\N{U+0434}\N{U+0430} \N{U+043d}.\N{U+044d}.",
      "\N{U+043d}.\N{U+044d}."
    ],
    era_wide => [
      "\N{U+0434}\N{U+0430} \N{U+043d}\N{U+0430}\N{U+0448}\N{U+0430}\N{U+0439} \N{U+044d}\N{U+0440}\N{U+044b}",
      "\N{U+043d}\N{U+0430}\N{U+0448}\N{U+0430}\N{U+0439} \N{U+044d}\N{U+0440}\N{U+044b}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d %b %Y %T",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Belarusian",
    month_format_abbreviated => [
      "\N{U+0441}\N{U+0442}\N{U+0443}",
      "\N{U+043b}\N{U+044e}\N{U+0442}",
      "\N{U+0441}\N{U+0430}\N{U+043a}",
      "\N{U+043a}\N{U+0440}\N{U+0430}",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0447}\N{U+044d}\N{U+0440}",
      "\N{U+043b}\N{U+0456}\N{U+043f}",
      "\N{U+0436}\N{U+043d}\N{U+0456}",
      "\N{U+0432}\N{U+0435}\N{U+0440}",
      "\N{U+043a}\N{U+0430}\N{U+0441}",
      "\N{U+043b}\N{U+0456}\N{U+0441}",
      "\N{U+0441}\N{U+043d}\N{U+0435}"
    ],
    month_format_narrow => [
      "\N{U+0441}",
      "\N{U+043b}",
      "\N{U+0441}",
      "\N{U+043a}",
      "\N{U+043c}",
      "\N{U+0447}",
      "\N{U+043b}",
      "\N{U+0436}",
      "\N{U+0432}",
      "\N{U+043a}",
      "\N{U+043b}",
      "\N{U+0441}"
    ],
    month_format_wide => [
      "\N{U+0441}\N{U+0442}\N{U+0443}\N{U+0434}\N{U+0437}\N{U+0435}\N{U+043d}\N{U+044f}",
      "\N{U+043b}\N{U+044e}\N{U+0442}\N{U+0430}\N{U+0433}\N{U+0430}",
      "\N{U+0441}\N{U+0430}\N{U+043a}\N{U+0430}\N{U+0432}\N{U+0456}\N{U+043a}\N{U+0430}",
      "\N{U+043a}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+0430}\N{U+0432}\N{U+0456}\N{U+043a}\N{U+0430}",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0447}\N{U+044d}\N{U+0440}\N{U+0432}\N{U+0435}\N{U+043d}\N{U+044f}",
      "\N{U+043b}\N{U+0456}\N{U+043f}\N{U+0435}\N{U+043d}\N{U+044f}",
      "\N{U+0436}\N{U+043d}\N{U+0456}\N{U+045e}\N{U+043d}\N{U+044f}",
      "\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+043d}\N{U+044f}",
      "\N{U+043a}\N{U+0430}\N{U+0441}\N{U+0442}\N{U+0440}\N{U+044b}\N{U+0447}\N{U+043d}\N{U+0456}\N{U+043a}\N{U+0430}",
      "\N{U+043b}\N{U+0456}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+043f}\N{U+0430}\N{U+0434}\N{U+0430}",
      "\N{U+0441}\N{U+043d}\N{U+0435}\N{U+0436}\N{U+043d}\N{U+044f}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0441}\N{U+0442}\N{U+0443}",
      "\N{U+043b}\N{U+044e}\N{U+0442}",
      "\N{U+0441}\N{U+0430}\N{U+043a}",
      "\N{U+043a}\N{U+0440}\N{U+0430}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0447}\N{U+044d}\N{U+0440}",
      "\N{U+043b}\N{U+0456}\N{U+043f}",
      "\N{U+0436}\N{U+043d}\N{U+0456}",
      "\N{U+0432}\N{U+0435}\N{U+0440}",
      "\N{U+043a}\N{U+0430}\N{U+0441}",
      "\N{U+043b}\N{U+0456}\N{U+0441}",
      "\N{U+0441}\N{U+043d}\N{U+0435}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0441}",
      "\N{U+043b}",
      "\N{U+0441}",
      "\N{U+043a}",
      "\N{U+043c}",
      "\N{U+0447}",
      "\N{U+043b}",
      "\N{U+0436}",
      "\N{U+0432}",
      "\N{U+043a}",
      "\N{U+043b}",
      "\N{U+0441}"
    ],
    month_stand_alone_wide => [
      "\N{U+0441}\N{U+0442}\N{U+0443}\N{U+0434}\N{U+0437}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+043b}\N{U+044e}\N{U+0442}\N{U+044b}",
      "\N{U+0441}\N{U+0430}\N{U+043a}\N{U+0430}\N{U+0432}\N{U+0456}\N{U+043a}",
      "\N{U+043a}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+0430}\N{U+0432}\N{U+0456}\N{U+043a}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0447}\N{U+044d}\N{U+0440}\N{U+0432}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+043b}\N{U+0456}\N{U+043f}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+0436}\N{U+043d}\N{U+0456}\N{U+0432}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+043a}\N{U+0430}\N{U+0441}\N{U+0442}\N{U+0440}\N{U+044b}\N{U+0447}\N{U+043d}\N{U+0456}\N{U+043a}",
      "\N{U+043b}\N{U+0456}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+043f}\N{U+0430}\N{U+0434}",
      "\N{U+0441}\N{U+043d}\N{U+0435}\N{U+0436}\N{U+0430}\N{U+043d}\N{U+044c}"
    ],
    name => "Belarusian Belarus",
    native_language => "\N{U+0431}\N{U+0435}\N{U+043b}\N{U+0430}\N{U+0440}\N{U+0443}\N{U+0441}\N{U+043a}\N{U+0430}\N{U+044f}",
    native_name => "\N{U+0431}\N{U+0435}\N{U+043b}\N{U+0430}\N{U+0440}\N{U+0443}\N{U+0441}\N{U+043a}\N{U+0430}\N{U+044f} \N{U+0411}\N{U+0435}\N{U+043b}\N{U+0430}\N{U+0440}\N{U+0443}\N{U+0441}\N{U+044c}",
    native_script => undef,
    native_territory => "\N{U+0411}\N{U+0435}\N{U+043b}\N{U+0430}\N{U+0440}\N{U+0443}\N{U+0441}\N{U+044c}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0448}\N{U+044b} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0433}\N{U+0456} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0446}\N{U+0456} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0442}\N{U+044b} \N{U+043a}\N{U+0432}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0448}\N{U+044b} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0433}\N{U+0456} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0446}\N{U+0456} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0442}\N{U+044b} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0448}\N{U+044b} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0433}\N{U+0456} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0446}\N{U+0456} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0442}\N{U+044b} \N{U+043a}\N{U+0432}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0448}\N{U+044b} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0433}\N{U+0456} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0446}\N{U+0456} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0442}\N{U+044b} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => "Belarus",
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ bem ]__
  {
    am_pm_abbreviated => [
      "uluchelo",
      "akasuba"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "bem",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Palichimo",
      "Palichibuli",
      "Palichitatu",
      "Palichine",
      "Palichisano",
      "Pachibelushi",
      "Pa Mulungu"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Palichimo",
      "Palichibuli",
      "Palichitatu",
      "Palichine",
      "Palichisano",
      "Pachibelushi",
      "Pa Mulungu"
    ],
    day_stand_alone_abbreviated => [
      "Palichimo",
      "Palichibuli",
      "Palichitatu",
      "Palichine",
      "Palichisano",
      "Pachibelushi",
      "Pa Mulungu"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Palichimo",
      "Palichibuli",
      "Palichitatu",
      "Palichine",
      "Palichisano",
      "Pachibelushi",
      "Pa Mulungu"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Before Yesu",
      "After Yesu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Bemba",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Epr",
      "Mei",
      "Jun",
      "Jul",
      "Oga",
      "Sep",
      "Okt",
      "Nov",
      "Dis"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "E",
      "M",
      "J",
      "J",
      "O",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Epreo",
      "Mei",
      "Juni",
      "Julai",
      "Ogasti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Disemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Epr",
      "Mei",
      "Jun",
      "Jul",
      "Oga",
      "Sep",
      "Okt",
      "Nov",
      "Dis"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "E",
      "M",
      "J",
      "J",
      "O",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Epreo",
      "Mei",
      "Juni",
      "Julai",
      "Ogasti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Disemba"
    ],
    name => "Bemba",
    native_language => "Ichibemba",
    native_name => "Ichibemba",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ bem-ZM ]__
  {
    am_pm_abbreviated => [
      "uluchelo",
      "akasuba"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "bem-ZM",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Palichimo",
      "Palichibuli",
      "Palichitatu",
      "Palichine",
      "Palichisano",
      "Pachibelushi",
      "Pa Mulungu"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Palichimo",
      "Palichibuli",
      "Palichitatu",
      "Palichine",
      "Palichisano",
      "Pachibelushi",
      "Pa Mulungu"
    ],
    day_stand_alone_abbreviated => [
      "Palichimo",
      "Palichibuli",
      "Palichitatu",
      "Palichine",
      "Palichisano",
      "Pachibelushi",
      "Pa Mulungu"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Palichimo",
      "Palichibuli",
      "Palichitatu",
      "Palichine",
      "Palichisano",
      "Pachibelushi",
      "Pa Mulungu"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Before Yesu",
      "After Yesu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%Y",
    glibc_datetime_format => "%a %d %b %Y %R %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Bemba",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Epr",
      "Mei",
      "Jun",
      "Jul",
      "Oga",
      "Sep",
      "Okt",
      "Nov",
      "Dis"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "E",
      "M",
      "J",
      "J",
      "O",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Epreo",
      "Mei",
      "Juni",
      "Julai",
      "Ogasti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Disemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Epr",
      "Mei",
      "Jun",
      "Jul",
      "Oga",
      "Sep",
      "Okt",
      "Nov",
      "Dis"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "E",
      "M",
      "J",
      "J",
      "O",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Epreo",
      "Mei",
      "Juni",
      "Julai",
      "Ogasti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Disemba"
    ],
    name => "Bemba Zambia",
    native_language => "Ichibemba",
    native_name => "Ichibemba Zambia",
    native_script => undef,
    native_territory => "Zambia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Zambia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ bez ]__
  {
    am_pm_abbreviated => [
      "pamilau",
      "pamunyi"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "bez",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Vil",
      "Hiv",
      "Hid",
      "Hit",
      "Hih",
      "Lem",
      "Mul"
    ],
    day_format_narrow => [
      "J",
      "H",
      "H",
      "H",
      "W",
      "J",
      "M"
    ],
    day_format_wide => [
      "pa shahuviluha",
      "pa hivili",
      "pa hidatu",
      "pa hitayi",
      "pa hihanu",
      "pa shahulembela",
      "pa mulungu"
    ],
    day_stand_alone_abbreviated => [
      "Vil",
      "Hiv",
      "Hid",
      "Hit",
      "Hih",
      "Lem",
      "Mul"
    ],
    day_stand_alone_narrow => [
      "J",
      "H",
      "H",
      "H",
      "W",
      "J",
      "M"
    ],
    day_stand_alone_wide => [
      "pa shahuviluha",
      "pa hivili",
      "pa hidatu",
      "pa hitayi",
      "pa hihanu",
      "pa shahulembela",
      "pa mulungu"
    ],
    era_abbreviated => [
      "KM",
      "BM"
    ],
    era_narrow => [
      "KM",
      "BM"
    ],
    era_wide => [
      "Kabla ya Mtwaa",
      "Baada ya Mtwaa"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Bena",
    month_format_abbreviated => [
      "Hut",
      "Vil",
      "Dat",
      "Tai",
      "Han",
      "Sit",
      "Sab",
      "Nan",
      "Tis",
      "Kum",
      "Kmj",
      "Kmb"
    ],
    month_format_narrow => [
      "H",
      "V",
      "D",
      "T",
      "H",
      "S",
      "S",
      "N",
      "T",
      "K",
      "K",
      "K"
    ],
    month_format_wide => [
      "pa mwedzi gwa hutala",
      "pa mwedzi gwa wuvili",
      "pa mwedzi gwa wudatu",
      "pa mwedzi gwa wutai",
      "pa mwedzi gwa wuhanu",
      "pa mwedzi gwa sita",
      "pa mwedzi gwa saba",
      "pa mwedzi gwa nane",
      "pa mwedzi gwa tisa",
      "pa mwedzi gwa kumi",
      "pa mwedzi gwa kumi na moja",
      "pa mwedzi gwa kumi na mbili"
    ],
    month_stand_alone_abbreviated => [
      "Hut",
      "Vil",
      "Dat",
      "Tai",
      "Han",
      "Sit",
      "Sab",
      "Nan",
      "Tis",
      "Kum",
      "Kmj",
      "Kmb"
    ],
    month_stand_alone_narrow => [
      "H",
      "V",
      "D",
      "T",
      "H",
      "S",
      "S",
      "N",
      "T",
      "K",
      "K",
      "K"
    ],
    month_stand_alone_wide => [
      "pa mwedzi gwa hutala",
      "pa mwedzi gwa wuvili",
      "pa mwedzi gwa wudatu",
      "pa mwedzi gwa wutai",
      "pa mwedzi gwa wuhanu",
      "pa mwedzi gwa sita",
      "pa mwedzi gwa saba",
      "pa mwedzi gwa nane",
      "pa mwedzi gwa tisa",
      "pa mwedzi gwa kumi",
      "pa mwedzi gwa kumi na moja",
      "pa mwedzi gwa kumi na mbili"
    ],
    name => "Bena",
    native_language => "Hibena",
    native_name => "Hibena",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Lobo 1",
      "Lobo 2",
      "Lobo 3",
      "Lobo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Lobo 1",
      "Lobo 2",
      "Lobo 3",
      "Lobo 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ bez-TZ ]__
  {
    am_pm_abbreviated => [
      "pamilau",
      "pamunyi"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "bez-TZ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Vil",
      "Hiv",
      "Hid",
      "Hit",
      "Hih",
      "Lem",
      "Mul"
    ],
    day_format_narrow => [
      "J",
      "H",
      "H",
      "H",
      "W",
      "J",
      "M"
    ],
    day_format_wide => [
      "pa shahuviluha",
      "pa hivili",
      "pa hidatu",
      "pa hitayi",
      "pa hihanu",
      "pa shahulembela",
      "pa mulungu"
    ],
    day_stand_alone_abbreviated => [
      "Vil",
      "Hiv",
      "Hid",
      "Hit",
      "Hih",
      "Lem",
      "Mul"
    ],
    day_stand_alone_narrow => [
      "J",
      "H",
      "H",
      "H",
      "W",
      "J",
      "M"
    ],
    day_stand_alone_wide => [
      "pa shahuviluha",
      "pa hivili",
      "pa hidatu",
      "pa hitayi",
      "pa hihanu",
      "pa shahulembela",
      "pa mulungu"
    ],
    era_abbreviated => [
      "KM",
      "BM"
    ],
    era_narrow => [
      "KM",
      "BM"
    ],
    era_wide => [
      "Kabla ya Mtwaa",
      "Baada ya Mtwaa"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Bena",
    month_format_abbreviated => [
      "Hut",
      "Vil",
      "Dat",
      "Tai",
      "Han",
      "Sit",
      "Sab",
      "Nan",
      "Tis",
      "Kum",
      "Kmj",
      "Kmb"
    ],
    month_format_narrow => [
      "H",
      "V",
      "D",
      "T",
      "H",
      "S",
      "S",
      "N",
      "T",
      "K",
      "K",
      "K"
    ],
    month_format_wide => [
      "pa mwedzi gwa hutala",
      "pa mwedzi gwa wuvili",
      "pa mwedzi gwa wudatu",
      "pa mwedzi gwa wutai",
      "pa mwedzi gwa wuhanu",
      "pa mwedzi gwa sita",
      "pa mwedzi gwa saba",
      "pa mwedzi gwa nane",
      "pa mwedzi gwa tisa",
      "pa mwedzi gwa kumi",
      "pa mwedzi gwa kumi na moja",
      "pa mwedzi gwa kumi na mbili"
    ],
    month_stand_alone_abbreviated => [
      "Hut",
      "Vil",
      "Dat",
      "Tai",
      "Han",
      "Sit",
      "Sab",
      "Nan",
      "Tis",
      "Kum",
      "Kmj",
      "Kmb"
    ],
    month_stand_alone_narrow => [
      "H",
      "V",
      "D",
      "T",
      "H",
      "S",
      "S",
      "N",
      "T",
      "K",
      "K",
      "K"
    ],
    month_stand_alone_wide => [
      "pa mwedzi gwa hutala",
      "pa mwedzi gwa wuvili",
      "pa mwedzi gwa wudatu",
      "pa mwedzi gwa wutai",
      "pa mwedzi gwa wuhanu",
      "pa mwedzi gwa sita",
      "pa mwedzi gwa saba",
      "pa mwedzi gwa nane",
      "pa mwedzi gwa tisa",
      "pa mwedzi gwa kumi",
      "pa mwedzi gwa kumi na moja",
      "pa mwedzi gwa kumi na mbili"
    ],
    name => "Bena Tanzania",
    native_language => "Hibena",
    native_name => "Hibena Hutanzania",
    native_script => undef,
    native_territory => "Hutanzania",
    native_variant => undef,
    quarter_format_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Lobo 1",
      "Lobo 2",
      "Lobo 3",
      "Lobo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Lobo 1",
      "Lobo 2",
      "Lobo 3",
      "Lobo 4"
    ],
    script => undef,
    territory => "Tanzania",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ bg ]__
  {
    am_pm_abbreviated => [
      "\N{U+043f}\N{U+0440}.\N{U+043e}\N{U+0431}.",
      "\N{U+0441}\N{U+043b}.\N{U+043e}\N{U+0431}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, H:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y '\N{U+0433}'. G",
      GyMMM => "MM.y '\N{U+0433}'. G",
      GyMMMEd => "E, d.MM.y '\N{U+0433}'. G",
      GyMMMM => "MMMM y '\N{U+0433}'. G",
      GyMMMMEd => "E, d MMMM y '\N{U+0433}'. G",
      GyMMMMd => "d MMMM y '\N{U+0433}'. G",
      GyMMMd => "d.MM.y '\N{U+0433}'. G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.MM",
      MMM => "MM",
      MMMEd => "E, d.MM",
      MMMM => "LLLL",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMMdd => "d MMMM",
      MMMd => "d.MM",
      Md => "d.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y '\N{U+0433}'.",
      yM => "M.y '\N{U+0433}'.",
      yMEd => "E, d.MM.y '\N{U+0433}'.",
      yMMM => "MM.y '\N{U+0433}'.",
      yMMMEd => "E, d.MM.y '\N{U+0433}'.",
      yMMMM => "MMMM y '\N{U+0433}'.",
      yMMMMEd => "E, d MMMM y '\N{U+0433}'.",
      yMMMMd => "d MMMM y '\N{U+0433}'.",
      yMMMd => "d.MM.y '\N{U+0433}'.",
      yMd => "d.MM.y '\N{U+0433}'.",
      yQQQ => "QQQ y '\N{U+0433}'.",
      yQQQQ => "QQQQ y '\N{U+0433}'."
    },
    code => "bg",
    date_format_full => "EEEE, d MMMM y '\N{U+0433}'.",
    date_format_long => "d MMMM y '\N{U+0433}'.",
    date_format_medium => "d.MM.y '\N{U+0433}'.",
    date_format_short => "d.MM.yy '\N{U+0433}'.",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+043d}\N{U+0434}"
    ],
    day_format_narrow => [
      "\N{U+043f}",
      "\N{U+0432}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+044f}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+044a}\N{U+0440}\N{U+0442}\N{U+044a}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+044a}\N{U+043a}",
      "\N{U+0441}\N{U+044a}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+043d}\N{U+0434}"
    ],
    day_stand_alone_narrow => [
      "\N{U+043f}",
      "\N{U+0432}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+044f}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+044a}\N{U+0440}\N{U+0442}\N{U+044a}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+044a}\N{U+043a}",
      "\N{U+0441}\N{U+044a}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044f}"
    ],
    era_abbreviated => [
      "\N{U+043f}\N{U+0440}.\N{U+0425}\N{U+0440}.",
      "\N{U+0441}\N{U+043b}.\N{U+0425}\N{U+0440}."
    ],
    era_narrow => [
      "\N{U+043f}\N{U+0440}.\N{U+0425}\N{U+0440}.",
      "\N{U+0441}\N{U+043b}.\N{U+0425}\N{U+0440}."
    ],
    era_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0438} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+0430}",
      "\N{U+0441}\N{U+043b}\N{U+0435}\N{U+0434} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+0430}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Bulgarian",
    month_format_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0443}",
      "\N{U+0444}\N{U+0435}\N{U+0432}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+044e}\N{U+043d}\N{U+0438}",
      "\N{U+044e}\N{U+043b}\N{U+0438}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0435}",
      "\N{U+0434}\N{U+0435}\N{U+043a}"
    ],
    month_format_narrow => [
      "\N{U+044f}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+044e}",
      "\N{U+044e}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_format_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}\N{U+0438}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}\N{U+0438}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+044e}\N{U+043d}\N{U+0438}",
      "\N{U+044e}\N{U+043b}\N{U+0438}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+043d}\N{U+043e}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0443}",
      "\N{U+0444}\N{U+0435}\N{U+0432}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+044e}\N{U+043d}\N{U+0438}",
      "\N{U+044e}\N{U+043b}\N{U+0438}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0435}",
      "\N{U+0434}\N{U+0435}\N{U+043a}"
    ],
    month_stand_alone_narrow => [
      "\N{U+044f}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+044e}",
      "\N{U+044e}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_stand_alone_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}\N{U+0438}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}\N{U+0438}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+044e}\N{U+043d}\N{U+0438}",
      "\N{U+044e}\N{U+043b}\N{U+0438}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+043d}\N{U+043e}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}"
    ],
    name => "Bulgarian",
    native_language => "\N{U+0431}\N{U+044a}\N{U+043b}\N{U+0433}\N{U+0430}\N{U+0440}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_name => "\N{U+0431}\N{U+044a}\N{U+043b}\N{U+0433}\N{U+0430}\N{U+0440}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}.",
      "2. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}.",
      "3. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}.",
      "4. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0438}\N{U+0435}",
      "2. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0438}\N{U+0435}",
      "3. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0438}\N{U+0435}",
      "4. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0438}\N{U+0435}"
    ],
    quarter_stand_alone_abbreviated => [
      "1. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}.",
      "2. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}.",
      "3. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}.",
      "4. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0438}\N{U+0435}",
      "2. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0438}\N{U+0435}",
      "3. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0438}\N{U+0435}",
      "4. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0438}\N{U+0435}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ bg-BG ]__
  {
    am_pm_abbreviated => [
      "\N{U+043f}\N{U+0440}.\N{U+043e}\N{U+0431}.",
      "\N{U+0441}\N{U+043b}.\N{U+043e}\N{U+0431}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, H:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y '\N{U+0433}'. G",
      GyMMM => "MM.y '\N{U+0433}'. G",
      GyMMMEd => "E, d.MM.y '\N{U+0433}'. G",
      GyMMMM => "MMMM y '\N{U+0433}'. G",
      GyMMMMEd => "E, d MMMM y '\N{U+0433}'. G",
      GyMMMMd => "d MMMM y '\N{U+0433}'. G",
      GyMMMd => "d.MM.y '\N{U+0433}'. G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.MM",
      MMM => "MM",
      MMMEd => "E, d.MM",
      MMMM => "LLLL",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMMdd => "d MMMM",
      MMMd => "d.MM",
      Md => "d.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y '\N{U+0433}'.",
      yM => "M.y '\N{U+0433}'.",
      yMEd => "E, d.MM.y '\N{U+0433}'.",
      yMMM => "MM.y '\N{U+0433}'.",
      yMMMEd => "E, d.MM.y '\N{U+0433}'.",
      yMMMM => "MMMM y '\N{U+0433}'.",
      yMMMMEd => "E, d MMMM y '\N{U+0433}'.",
      yMMMMd => "d MMMM y '\N{U+0433}'.",
      yMMMd => "d.MM.y '\N{U+0433}'.",
      yMd => "d.MM.y '\N{U+0433}'.",
      yQQQ => "QQQ y '\N{U+0433}'.",
      yQQQQ => "QQQQ y '\N{U+0433}'."
    },
    code => "bg-BG",
    date_format_full => "EEEE, d MMMM y '\N{U+0433}'.",
    date_format_long => "d MMMM y '\N{U+0433}'.",
    date_format_medium => "d.MM.y '\N{U+0433}'.",
    date_format_short => "d.MM.yy '\N{U+0433}'.",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+043d}\N{U+0434}"
    ],
    day_format_narrow => [
      "\N{U+043f}",
      "\N{U+0432}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+044f}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+044a}\N{U+0440}\N{U+0442}\N{U+044a}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+044a}\N{U+043a}",
      "\N{U+0441}\N{U+044a}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+043d}\N{U+0434}"
    ],
    day_stand_alone_narrow => [
      "\N{U+043f}",
      "\N{U+0432}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+044f}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+044a}\N{U+0440}\N{U+0442}\N{U+044a}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+044a}\N{U+043a}",
      "\N{U+0441}\N{U+044a}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044f}"
    ],
    era_abbreviated => [
      "\N{U+043f}\N{U+0440}.\N{U+0425}\N{U+0440}.",
      "\N{U+0441}\N{U+043b}.\N{U+0425}\N{U+0440}."
    ],
    era_narrow => [
      "\N{U+043f}\N{U+0440}.\N{U+0425}\N{U+0440}.",
      "\N{U+0441}\N{U+043b}.\N{U+0425}\N{U+0440}."
    ],
    era_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0438} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+0430}",
      "\N{U+0441}\N{U+043b}\N{U+0435}\N{U+0434} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+0430}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%e.%m.%Y",
    glibc_datetime_format => "%x (%a) %X %Z",
    glibc_time_12_format => "%l,%M,%S",
    glibc_time_format => "%k,%M,%S",
    language => "Bulgarian",
    month_format_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0443}",
      "\N{U+0444}\N{U+0435}\N{U+0432}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+044e}\N{U+043d}\N{U+0438}",
      "\N{U+044e}\N{U+043b}\N{U+0438}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0435}",
      "\N{U+0434}\N{U+0435}\N{U+043a}"
    ],
    month_format_narrow => [
      "\N{U+044f}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+044e}",
      "\N{U+044e}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_format_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}\N{U+0438}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}\N{U+0438}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+044e}\N{U+043d}\N{U+0438}",
      "\N{U+044e}\N{U+043b}\N{U+0438}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+043d}\N{U+043e}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0443}",
      "\N{U+0444}\N{U+0435}\N{U+0432}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+044e}\N{U+043d}\N{U+0438}",
      "\N{U+044e}\N{U+043b}\N{U+0438}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0435}",
      "\N{U+0434}\N{U+0435}\N{U+043a}"
    ],
    month_stand_alone_narrow => [
      "\N{U+044f}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+044e}",
      "\N{U+044e}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_stand_alone_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}\N{U+0438}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}\N{U+0438}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+044e}\N{U+043d}\N{U+0438}",
      "\N{U+044e}\N{U+043b}\N{U+0438}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+043d}\N{U+043e}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}"
    ],
    name => "Bulgarian Bulgaria",
    native_language => "\N{U+0431}\N{U+044a}\N{U+043b}\N{U+0433}\N{U+0430}\N{U+0440}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_name => "\N{U+0431}\N{U+044a}\N{U+043b}\N{U+0433}\N{U+0430}\N{U+0440}\N{U+0441}\N{U+043a}\N{U+0438} \N{U+0411}\N{U+044a}\N{U+043b}\N{U+0433}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+044f}",
    native_script => undef,
    native_territory => "\N{U+0411}\N{U+044a}\N{U+043b}\N{U+0433}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+044f}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}.",
      "2. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}.",
      "3. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}.",
      "4. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0438}\N{U+0435}",
      "2. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0438}\N{U+0435}",
      "3. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0438}\N{U+0435}",
      "4. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0438}\N{U+0435}"
    ],
    quarter_stand_alone_abbreviated => [
      "1. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}.",
      "2. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}.",
      "3. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}.",
      "4. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0438}\N{U+0435}",
      "2. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0438}\N{U+0435}",
      "3. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0438}\N{U+0435}",
      "4. \N{U+0442}\N{U+0440}\N{U+0438}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0438}\N{U+0435}"
    ],
    script => undef,
    territory => "Bulgaria",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ bm ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "bm",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "nt\N{U+025b}",
      "tar",
      "ara",
      "ala",
      "jum",
      "sib",
      "kar"
    ],
    day_format_narrow => [
      "N",
      "T",
      "A",
      "A",
      "J",
      "S",
      "K"
    ],
    day_format_wide => [
      "nt\N{U+025b}n\N{U+025b}",
      "tarata",
      "araba",
      "alamisa",
      "juma",
      "sibiri",
      "kari"
    ],
    day_stand_alone_abbreviated => [
      "nt\N{U+025b}",
      "tar",
      "ara",
      "ala",
      "jum",
      "sib",
      "kar"
    ],
    day_stand_alone_narrow => [
      "N",
      "T",
      "A",
      "A",
      "J",
      "S",
      "K"
    ],
    day_stand_alone_wide => [
      "nt\N{U+025b}n\N{U+025b}",
      "tarata",
      "araba",
      "alamisa",
      "juma",
      "sibiri",
      "kari"
    ],
    era_abbreviated => [
      "J.-C. \N{U+0272}\N{U+025b}",
      "ni J.-C."
    ],
    era_narrow => [
      "J.-C. \N{U+0272}\N{U+025b}",
      "ni J.-C."
    ],
    era_wide => [
      "jezu krisiti \N{U+0272}\N{U+025b}",
      "jezu krisiti mink\N{U+025b}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Bambara",
    month_format_abbreviated => [
      "zan",
      "feb",
      "mar",
      "awi",
      "m\N{U+025b}",
      "zuw",
      "zul",
      "uti",
      "s\N{U+025b}t",
      "\N{U+0254}ku",
      "now",
      "des"
    ],
    month_format_narrow => [
      "Z",
      "F",
      "M",
      "A",
      "M",
      "Z",
      "Z",
      "U",
      "S",
      "\N{U+0186}",
      "N",
      "D"
    ],
    month_format_wide => [
      "zanwuye",
      "feburuye",
      "marisi",
      "awirili",
      "m\N{U+025b}",
      "zuw\N{U+025b}n",
      "zuluye",
      "uti",
      "s\N{U+025b}tanburu",
      "\N{U+0254}kut\N{U+0254}buru",
      "nowanburu",
      "desanburu"
    ],
    month_stand_alone_abbreviated => [
      "zan",
      "feb",
      "mar",
      "awi",
      "m\N{U+025b}",
      "zuw",
      "zul",
      "uti",
      "s\N{U+025b}t",
      "\N{U+0254}ku",
      "now",
      "des"
    ],
    month_stand_alone_narrow => [
      "Z",
      "F",
      "M",
      "A",
      "M",
      "Z",
      "Z",
      "U",
      "S",
      "\N{U+0186}",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "zanwuye",
      "feburuye",
      "marisi",
      "awirili",
      "m\N{U+025b}",
      "zuw\N{U+025b}n",
      "zuluye",
      "uti",
      "s\N{U+025b}tanburu",
      "\N{U+0254}kut\N{U+0254}buru",
      "nowanburu",
      "desanburu"
    ],
    name => "Bambara",
    native_language => "bamanakan",
    native_name => "bamanakan",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "KS1",
      "KS2",
      "KS3",
      "KS4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "kalo saba f\N{U+0254}l\N{U+0254}",
      "kalo saba filanan",
      "kalo saba sabanan",
      "kalo saba naaninan"
    ],
    quarter_stand_alone_abbreviated => [
      "KS1",
      "KS2",
      "KS3",
      "KS4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "kalo saba f\N{U+0254}l\N{U+0254}",
      "kalo saba filanan",
      "kalo saba sabanan",
      "kalo saba naaninan"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ bm-ML ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "bm-ML",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "nt\N{U+025b}",
      "tar",
      "ara",
      "ala",
      "jum",
      "sib",
      "kar"
    ],
    day_format_narrow => [
      "N",
      "T",
      "A",
      "A",
      "J",
      "S",
      "K"
    ],
    day_format_wide => [
      "nt\N{U+025b}n\N{U+025b}",
      "tarata",
      "araba",
      "alamisa",
      "juma",
      "sibiri",
      "kari"
    ],
    day_stand_alone_abbreviated => [
      "nt\N{U+025b}",
      "tar",
      "ara",
      "ala",
      "jum",
      "sib",
      "kar"
    ],
    day_stand_alone_narrow => [
      "N",
      "T",
      "A",
      "A",
      "J",
      "S",
      "K"
    ],
    day_stand_alone_wide => [
      "nt\N{U+025b}n\N{U+025b}",
      "tarata",
      "araba",
      "alamisa",
      "juma",
      "sibiri",
      "kari"
    ],
    era_abbreviated => [
      "J.-C. \N{U+0272}\N{U+025b}",
      "ni J.-C."
    ],
    era_narrow => [
      "J.-C. \N{U+0272}\N{U+025b}",
      "ni J.-C."
    ],
    era_wide => [
      "jezu krisiti \N{U+0272}\N{U+025b}",
      "jezu krisiti mink\N{U+025b}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Bambara",
    month_format_abbreviated => [
      "zan",
      "feb",
      "mar",
      "awi",
      "m\N{U+025b}",
      "zuw",
      "zul",
      "uti",
      "s\N{U+025b}t",
      "\N{U+0254}ku",
      "now",
      "des"
    ],
    month_format_narrow => [
      "Z",
      "F",
      "M",
      "A",
      "M",
      "Z",
      "Z",
      "U",
      "S",
      "\N{U+0186}",
      "N",
      "D"
    ],
    month_format_wide => [
      "zanwuye",
      "feburuye",
      "marisi",
      "awirili",
      "m\N{U+025b}",
      "zuw\N{U+025b}n",
      "zuluye",
      "uti",
      "s\N{U+025b}tanburu",
      "\N{U+0254}kut\N{U+0254}buru",
      "nowanburu",
      "desanburu"
    ],
    month_stand_alone_abbreviated => [
      "zan",
      "feb",
      "mar",
      "awi",
      "m\N{U+025b}",
      "zuw",
      "zul",
      "uti",
      "s\N{U+025b}t",
      "\N{U+0254}ku",
      "now",
      "des"
    ],
    month_stand_alone_narrow => [
      "Z",
      "F",
      "M",
      "A",
      "M",
      "Z",
      "Z",
      "U",
      "S",
      "\N{U+0186}",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "zanwuye",
      "feburuye",
      "marisi",
      "awirili",
      "m\N{U+025b}",
      "zuw\N{U+025b}n",
      "zuluye",
      "uti",
      "s\N{U+025b}tanburu",
      "\N{U+0254}kut\N{U+0254}buru",
      "nowanburu",
      "desanburu"
    ],
    name => "Bambara Mali",
    native_language => "bamanakan",
    native_name => "bamanakan Mali",
    native_script => undef,
    native_territory => "Mali",
    native_variant => undef,
    quarter_format_abbreviated => [
      "KS1",
      "KS2",
      "KS3",
      "KS4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "kalo saba f\N{U+0254}l\N{U+0254}",
      "kalo saba filanan",
      "kalo saba sabanan",
      "kalo saba naaninan"
    ],
    quarter_stand_alone_abbreviated => [
      "KS1",
      "KS2",
      "KS3",
      "KS4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "kalo saba f\N{U+0254}l\N{U+0254}",
      "kalo saba filanan",
      "kalo saba sabanan",
      "kalo saba naaninan"
    ],
    script => undef,
    territory => "Mali",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ bn ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM, y G",
      GyMMMd => "d MMM, y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd-MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "bn",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b8}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09b0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}",
      "\N{U+09b0}\N{U+09ac}\N{U+09bf}"
    ],
    day_format_narrow => [
      "\N{U+09b8}\N{U+09cb}",
      "\N{U+09ae}",
      "\N{U+09ac}\N{U+09c1}",
      "\N{U+09ac}\N{U+09c3}",
      "\N{U+09b6}\N{U+09c1}",
      "\N{U+09b6}",
      "\N{U+09b0}"
    ],
    day_format_wide => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b8}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09b0}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b0}\N{U+09ac}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b8}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09b0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}",
      "\N{U+09b0}\N{U+09ac}\N{U+09bf}"
    ],
    day_stand_alone_narrow => [
      "\N{U+09b8}\N{U+09cb}",
      "\N{U+09ae}",
      "\N{U+09ac}\N{U+09c1}",
      "\N{U+09ac}\N{U+09c3}",
      "\N{U+09b6}\N{U+09c1}",
      "\N{U+09b6}",
      "\N{U+09b0}"
    ],
    day_stand_alone_wide => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b7}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09b0}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b0}\N{U+09ac}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}"
    ],
    era_abbreviated => [
      "\N{U+0996}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b8}\N{U+09cd}\N{U+099f}\N{U+09aa}\N{U+09c2}\N{U+09b0}\N{U+09cd}\N{U+09ac}",
      "\N{U+0996}\N{U+09c3}\N{U+09b7}\N{U+09cd}\N{U+099f}\N{U+09be}\N{U+09ac}\N{U+09cd}\N{U+09a6}"
    ],
    era_narrow => [
      "\N{U+0996}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b8}\N{U+09cd}\N{U+099f}\N{U+09aa}\N{U+09c2}\N{U+09b0}\N{U+09cd}\N{U+09ac}",
      "\N{U+0996}\N{U+09c3}\N{U+09b7}\N{U+09cd}\N{U+099f}\N{U+09be}\N{U+09ac}\N{U+09cd}\N{U+09a6}"
    ],
    era_wide => [
      "\N{U+0996}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b8}\N{U+09cd}\N{U+099f}\N{U+09aa}\N{U+09c2}\N{U+09b0}\N{U+09cd}\N{U+09ac}",
      "\N{U+0996}\N{U+09c3}\N{U+09b7}\N{U+09cd}\N{U+099f}\N{U+09be}\N{U+09ac}\N{U+09cd}\N{U+09a6}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Bengali",
    month_format_abbreviated => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09b0}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ae}\N{U+09be}\N{U+09b0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}\N{U+09b8}\N{U+09cd}\N{U+099f}",
      "\N{U+09b8}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+099f}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a8}\N{U+09ad}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a1}\N{U+09bf}\N{U+09b8}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}"
    ],
    month_format_narrow => [
      "\N{U+099c}\N{U+09be}",
      "\N{U+09ab}\N{U+09c7}",
      "\N{U+09ae}\N{U+09be}",
      "\N{U+098f}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}",
      "\N{U+0986}",
      "\N{U+09b8}\N{U+09c7}",
      "\N{U+0985}",
      "\N{U+09a8}",
      "\N{U+09a1}\N{U+09bf}"
    ],
    month_format_wide => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09b0}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ae}\N{U+09be}\N{U+09b0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}\N{U+09b8}\N{U+09cd}\N{U+099f}",
      "\N{U+09b8}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+099f}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a8}\N{U+09ad}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a1}\N{U+09bf}\N{U+09b8}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09b0}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ae}\N{U+09be}\N{U+09b0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}\N{U+09b8}\N{U+09cd}\N{U+099f}",
      "\N{U+09b8}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+099f}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a8}\N{U+09ad}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a1}\N{U+09bf}\N{U+09b8}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}"
    ],
    month_stand_alone_narrow => [
      "\N{U+099c}\N{U+09be}",
      "\N{U+09ab}\N{U+09c7}",
      "\N{U+09ae}\N{U+09be}",
      "\N{U+098f}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}",
      "\N{U+0986}",
      "\N{U+09b8}\N{U+09c7}",
      "\N{U+0985}",
      "\N{U+09a8}",
      "\N{U+09a1}\N{U+09bf}"
    ],
    month_stand_alone_wide => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09b0}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ae}\N{U+09be}\N{U+09b0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}\N{U+09b8}\N{U+09cd}\N{U+099f}",
      "\N{U+09b8}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+099f}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a8}\N{U+09ad}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a1}\N{U+09bf}\N{U+09b8}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}"
    ],
    name => "Bengali",
    native_language => "\N{U+09ac}\N{U+09be}\N{U+0982}\N{U+09b2}\N{U+09be}",
    native_name => "\N{U+09ac}\N{U+09be}\N{U+0982}\N{U+09b2}\N{U+09be}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      "\N{U+09e7}",
      "\N{U+09e8}",
      "\N{U+09e9}",
      "\N{U+09ea}"
    ],
    quarter_format_wide => [
      "\N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+09a6}\N{U+09cd}\N{U+09ac}\N{U+09bf}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+09a4}\N{U+09c3}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+099a}\N{U+09a4}\N{U+09c1}\N{U+09b0}\N{U+09cd}\N{U+09a5} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+09e7}",
      "\N{U+09e8}",
      "\N{U+09e9}",
      "\N{U+09ea}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+09a6}\N{U+09cd}\N{U+09ac}\N{U+09bf}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+09a4}\N{U+09c3}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+099a}\N{U+09a4}\N{U+09c1}\N{U+09b0}\N{U+09cd}\N{U+09a5} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ bn-BD ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM, y G",
      GyMMMd => "d MMM, y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd-MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "bn-BD",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b8}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09b0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}",
      "\N{U+09b0}\N{U+09ac}\N{U+09bf}"
    ],
    day_format_narrow => [
      "\N{U+09b8}\N{U+09cb}",
      "\N{U+09ae}",
      "\N{U+09ac}\N{U+09c1}",
      "\N{U+09ac}\N{U+09c3}",
      "\N{U+09b6}\N{U+09c1}",
      "\N{U+09b6}",
      "\N{U+09b0}"
    ],
    day_format_wide => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b8}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09b0}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b0}\N{U+09ac}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b8}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09b0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}",
      "\N{U+09b0}\N{U+09ac}\N{U+09bf}"
    ],
    day_stand_alone_narrow => [
      "\N{U+09b8}\N{U+09cb}",
      "\N{U+09ae}",
      "\N{U+09ac}\N{U+09c1}",
      "\N{U+09ac}\N{U+09c3}",
      "\N{U+09b6}\N{U+09c1}",
      "\N{U+09b6}",
      "\N{U+09b0}"
    ],
    day_stand_alone_wide => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b7}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09b0}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b0}\N{U+09ac}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}"
    ],
    era_abbreviated => [
      "\N{U+0996}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b8}\N{U+09cd}\N{U+099f}\N{U+09aa}\N{U+09c2}\N{U+09b0}\N{U+09cd}\N{U+09ac}",
      "\N{U+0996}\N{U+09c3}\N{U+09b7}\N{U+09cd}\N{U+099f}\N{U+09be}\N{U+09ac}\N{U+09cd}\N{U+09a6}"
    ],
    era_narrow => [
      "\N{U+0996}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b8}\N{U+09cd}\N{U+099f}\N{U+09aa}\N{U+09c2}\N{U+09b0}\N{U+09cd}\N{U+09ac}",
      "\N{U+0996}\N{U+09c3}\N{U+09b7}\N{U+09cd}\N{U+099f}\N{U+09be}\N{U+09ac}\N{U+09cd}\N{U+09a6}"
    ],
    era_wide => [
      "\N{U+0996}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b8}\N{U+09cd}\N{U+099f}\N{U+09aa}\N{U+09c2}\N{U+09b0}\N{U+09cd}\N{U+09ac}",
      "\N{U+0996}\N{U+09c3}\N{U+09b7}\N{U+09cd}\N{U+099f}\N{U+09be}\N{U+09ac}\N{U+09cd}\N{U+09a6}"
    ],
    first_day_of_week => 5,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A %d %b %Y",
    glibc_datetime_format => "%A %d %b %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "Bengali",
    month_format_abbreviated => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09b0}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ae}\N{U+09be}\N{U+09b0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}\N{U+09b8}\N{U+09cd}\N{U+099f}",
      "\N{U+09b8}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+099f}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a8}\N{U+09ad}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a1}\N{U+09bf}\N{U+09b8}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}"
    ],
    month_format_narrow => [
      "\N{U+099c}\N{U+09be}",
      "\N{U+09ab}\N{U+09c7}",
      "\N{U+09ae}\N{U+09be}",
      "\N{U+098f}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}",
      "\N{U+0986}",
      "\N{U+09b8}\N{U+09c7}",
      "\N{U+0985}",
      "\N{U+09a8}",
      "\N{U+09a1}\N{U+09bf}"
    ],
    month_format_wide => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09b0}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ae}\N{U+09be}\N{U+09b0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}\N{U+09b8}\N{U+09cd}\N{U+099f}",
      "\N{U+09b8}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+099f}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a8}\N{U+09ad}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a1}\N{U+09bf}\N{U+09b8}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09b0}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ae}\N{U+09be}\N{U+09b0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}\N{U+09b8}\N{U+09cd}\N{U+099f}",
      "\N{U+09b8}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+099f}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a8}\N{U+09ad}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a1}\N{U+09bf}\N{U+09b8}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}"
    ],
    month_stand_alone_narrow => [
      "\N{U+099c}\N{U+09be}",
      "\N{U+09ab}\N{U+09c7}",
      "\N{U+09ae}\N{U+09be}",
      "\N{U+098f}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}",
      "\N{U+0986}",
      "\N{U+09b8}\N{U+09c7}",
      "\N{U+0985}",
      "\N{U+09a8}",
      "\N{U+09a1}\N{U+09bf}"
    ],
    month_stand_alone_wide => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09b0}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ae}\N{U+09be}\N{U+09b0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}\N{U+09b8}\N{U+09cd}\N{U+099f}",
      "\N{U+09b8}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+099f}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a8}\N{U+09ad}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a1}\N{U+09bf}\N{U+09b8}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}"
    ],
    name => "Bengali Bangladesh",
    native_language => "\N{U+09ac}\N{U+09be}\N{U+0982}\N{U+09b2}\N{U+09be}",
    native_name => "\N{U+09ac}\N{U+09be}\N{U+0982}\N{U+09b2}\N{U+09be} \N{U+09ac}\N{U+09be}\N{U+0982}\N{U+09b2}\N{U+09be}\N{U+09a6}\N{U+09c7}\N{U+09b6}",
    native_script => undef,
    native_territory => "\N{U+09ac}\N{U+09be}\N{U+0982}\N{U+09b2}\N{U+09be}\N{U+09a6}\N{U+09c7}\N{U+09b6}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      "\N{U+09e7}",
      "\N{U+09e8}",
      "\N{U+09e9}",
      "\N{U+09ea}"
    ],
    quarter_format_wide => [
      "\N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+09a6}\N{U+09cd}\N{U+09ac}\N{U+09bf}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+09a4}\N{U+09c3}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+099a}\N{U+09a4}\N{U+09c1}\N{U+09b0}\N{U+09cd}\N{U+09a5} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+09e7}",
      "\N{U+09e8}",
      "\N{U+09e9}",
      "\N{U+09ea}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+09a6}\N{U+09cd}\N{U+09ac}\N{U+09bf}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+09a4}\N{U+09c3}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+099a}\N{U+09a4}\N{U+09c1}\N{U+09b0}\N{U+09cd}\N{U+09a5} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}"
    ],
    script => undef,
    territory => "Bangladesh",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ bn-IN ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM, y G",
      GyMMMd => "d MMM, y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd-MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "bn-IN",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b8}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09b0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}",
      "\N{U+09b0}\N{U+09ac}\N{U+09bf}"
    ],
    day_format_narrow => [
      "\N{U+09b8}\N{U+09cb}",
      "\N{U+09ae}",
      "\N{U+09ac}\N{U+09c1}",
      "\N{U+09ac}\N{U+09c3}",
      "\N{U+09b6}\N{U+09c1}",
      "\N{U+09b6}",
      "\N{U+09b0}"
    ],
    day_format_wide => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b8}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09b0}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b0}\N{U+09ac}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b8}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09b0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}",
      "\N{U+09b0}\N{U+09ac}\N{U+09bf}"
    ],
    day_stand_alone_narrow => [
      "\N{U+09b8}\N{U+09cb}",
      "\N{U+09ae}",
      "\N{U+09ac}\N{U+09c1}",
      "\N{U+09ac}\N{U+09c3}",
      "\N{U+09b6}\N{U+09c1}",
      "\N{U+09b6}",
      "\N{U+09b0}"
    ],
    day_stand_alone_wide => [
      "\N{U+09b8}\N{U+09cb}\N{U+09ae}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ae}\N{U+0999}\N{U+09cd}\N{U+0997}\N{U+09b2}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ac}\N{U+09c1}\N{U+09a7}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09ac}\N{U+09c3}\N{U+09b9}\N{U+09b7}\N{U+09cd}\N{U+09aa}\N{U+09a4}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b6}\N{U+09c1}\N{U+0995}\N{U+09cd}\N{U+09b0}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b6}\N{U+09a8}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}",
      "\N{U+09b0}\N{U+09ac}\N{U+09bf}\N{U+09ac}\N{U+09be}\N{U+09b0}"
    ],
    era_abbreviated => [
      "\N{U+0996}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b8}\N{U+09cd}\N{U+099f}\N{U+09aa}\N{U+09c2}\N{U+09b0}\N{U+09cd}\N{U+09ac}",
      "\N{U+0996}\N{U+09c3}\N{U+09b7}\N{U+09cd}\N{U+099f}\N{U+09be}\N{U+09ac}\N{U+09cd}\N{U+09a6}"
    ],
    era_narrow => [
      "\N{U+0996}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b8}\N{U+09cd}\N{U+099f}\N{U+09aa}\N{U+09c2}\N{U+09b0}\N{U+09cd}\N{U+09ac}",
      "\N{U+0996}\N{U+09c3}\N{U+09b7}\N{U+09cd}\N{U+099f}\N{U+09be}\N{U+09ac}\N{U+09cd}\N{U+09a6}"
    ],
    era_wide => [
      "\N{U+0996}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b8}\N{U+09cd}\N{U+099f}\N{U+09aa}\N{U+09c2}\N{U+09b0}\N{U+09cd}\N{U+09ac}",
      "\N{U+0996}\N{U+09c3}\N{U+09b7}\N{U+09cd}\N{U+099f}\N{U+09be}\N{U+09ac}\N{U+09cd}\N{U+09a6}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A %d %b %Y",
    glibc_datetime_format => "%A %d %b %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "Bengali",
    month_format_abbreviated => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09b0}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ae}\N{U+09be}\N{U+09b0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}\N{U+09b8}\N{U+09cd}\N{U+099f}",
      "\N{U+09b8}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+099f}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a8}\N{U+09ad}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a1}\N{U+09bf}\N{U+09b8}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}"
    ],
    month_format_narrow => [
      "\N{U+099c}\N{U+09be}",
      "\N{U+09ab}\N{U+09c7}",
      "\N{U+09ae}\N{U+09be}",
      "\N{U+098f}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}",
      "\N{U+0986}",
      "\N{U+09b8}\N{U+09c7}",
      "\N{U+0985}",
      "\N{U+09a8}",
      "\N{U+09a1}\N{U+09bf}"
    ],
    month_format_wide => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09b0}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ae}\N{U+09be}\N{U+09b0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}\N{U+09b8}\N{U+09cd}\N{U+099f}",
      "\N{U+09b8}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+099f}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a8}\N{U+09ad}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a1}\N{U+09bf}\N{U+09b8}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09b0}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ae}\N{U+09be}\N{U+09b0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}\N{U+09b8}\N{U+09cd}\N{U+099f}",
      "\N{U+09b8}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+099f}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a8}\N{U+09ad}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a1}\N{U+09bf}\N{U+09b8}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}"
    ],
    month_stand_alone_narrow => [
      "\N{U+099c}\N{U+09be}",
      "\N{U+09ab}\N{U+09c7}",
      "\N{U+09ae}\N{U+09be}",
      "\N{U+098f}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}",
      "\N{U+0986}",
      "\N{U+09b8}\N{U+09c7}",
      "\N{U+0985}",
      "\N{U+09a8}",
      "\N{U+09a1}\N{U+09bf}"
    ],
    month_stand_alone_wide => [
      "\N{U+099c}\N{U+09be}\N{U+09a8}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ab}\N{U+09c7}\N{U+09ac}\N{U+09cd}\N{U+09b0}\N{U+09c1}\N{U+09af}\N{U+09bc}\N{U+09be}\N{U+09b0}\N{U+09c0}",
      "\N{U+09ae}\N{U+09be}\N{U+09b0}\N{U+09cd}\N{U+099a}",
      "\N{U+098f}\N{U+09aa}\N{U+09cd}\N{U+09b0}\N{U+09bf}\N{U+09b2}",
      "\N{U+09ae}\N{U+09c7}",
      "\N{U+099c}\N{U+09c1}\N{U+09a8}",
      "\N{U+099c}\N{U+09c1}\N{U+09b2}\N{U+09be}\N{U+0987}",
      "\N{U+0986}\N{U+0997}\N{U+09b8}\N{U+09cd}\N{U+099f}",
      "\N{U+09b8}\N{U+09c7}\N{U+09aa}\N{U+09cd}\N{U+099f}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+0985}\N{U+0995}\N{U+09cd}\N{U+099f}\N{U+09cb}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a8}\N{U+09ad}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}",
      "\N{U+09a1}\N{U+09bf}\N{U+09b8}\N{U+09c7}\N{U+09ae}\N{U+09cd}\N{U+09ac}\N{U+09b0}"
    ],
    name => "Bengali India",
    native_language => "\N{U+09ac}\N{U+09be}\N{U+0982}\N{U+09b2}\N{U+09be}",
    native_name => "\N{U+09ac}\N{U+09be}\N{U+0982}\N{U+09b2}\N{U+09be} \N{U+09ad}\N{U+09be}\N{U+09b0}\N{U+09a4}",
    native_script => undef,
    native_territory => "\N{U+09ad}\N{U+09be}\N{U+09b0}\N{U+09a4}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      "\N{U+09e7}",
      "\N{U+09e8}",
      "\N{U+09e9}",
      "\N{U+09ea}"
    ],
    quarter_format_wide => [
      "\N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+09a6}\N{U+09cd}\N{U+09ac}\N{U+09bf}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+09a4}\N{U+09c3}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+099a}\N{U+09a4}\N{U+09c1}\N{U+09b0}\N{U+09cd}\N{U+09a5} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+09e7}",
      "\N{U+09e8}",
      "\N{U+09e9}",
      "\N{U+09ea}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+09a6}\N{U+09cd}\N{U+09ac}\N{U+09bf}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+09a4}\N{U+09c3}\N{U+09a4}\N{U+09c0}\N{U+09af}\N{U+09bc} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}",
      "\N{U+099a}\N{U+09a4}\N{U+09c1}\N{U+09b0}\N{U+09cd}\N{U+09a5} \N{U+09a4}\N{U+09cd}\N{U+09b0}\N{U+09c8}\N{U+09ae}\N{U+09be}\N{U+09b8}\N{U+09bf}\N{U+0995}"
    ],
    script => undef,
    territory => "India",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ bo ]__
  {
    am_pm_abbreviated => [
      "\N{U+0f66}\N{U+0f94}\N{U+0f0b}\N{U+0f51}\N{U+0fb2}\N{U+0f7c}\N{U+0f0b}",
      "\N{U+0f55}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0fb2}\N{U+0f7c}\N{U+0f0b}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y LLLL",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d, E",
      MMMMd => "MMMM\N{U+0f60}\N{U+0f72}\N{U+0f0b}\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
      MMMd => "MMM\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y LLL",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMMd => "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}y MMMM\N{U+0f60}\N{U+0f72}\N{U+0f0b}\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
      yMMMd => "y \N{U+0f63}\N{U+0f7c}\N{U+0f60}\N{U+0f72}\N{U+0f0b}MMM\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "bo",
    date_format_full => "y MMMM\N{U+0f60}\N{U+0f72}\N{U+0f0b}\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d, EEEE",
    date_format_long => "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}y MMMM\N{U+0f60}\N{U+0f72}\N{U+0f0b}\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
    date_format_medium => "y \N{U+0f63}\N{U+0f7c}\N{U+0f60}\N{U+0f72}\N{U+0f0b}MMM\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}",
      "\N{U+0f58}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f51}\N{U+0f58}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}\N{U+0f56}\N{U+0f74}\N{U+0f0b}",
      "\N{U+0f54}\N{U+0f0b}\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f49}\N{U+0f72}\N{U+0f0b}\N{U+0f58}\N{U+0f0b}"
    ],
    day_format_narrow => [
      "\N{U+0f5f}\N{U+0fb3}",
      "\N{U+0f58}\N{U+0f72}\N{U+0f42}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}",
      "\N{U+0f66}\N{U+0f44}\N{U+0f66}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}",
      "\N{U+0f49}\N{U+0f72}"
    ],
    day_format_wide => [
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f58}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f51}\N{U+0f58}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}\N{U+0f56}\N{U+0f74}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f49}\N{U+0f72}\N{U+0f0b}\N{U+0f58}\N{U+0f0b}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}",
      "\N{U+0f58}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f51}\N{U+0f58}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}\N{U+0f56}\N{U+0f74}\N{U+0f0b}",
      "\N{U+0f54}\N{U+0f0b}\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f49}\N{U+0f72}\N{U+0f0b}\N{U+0f58}\N{U+0f0b}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0f5f}\N{U+0fb3}",
      "\N{U+0f58}\N{U+0f72}\N{U+0f42}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}",
      "\N{U+0f66}\N{U+0f44}\N{U+0f66}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}",
      "\N{U+0f49}\N{U+0f72}"
    ],
    day_stand_alone_wide => [
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f58}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f51}\N{U+0f58}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}\N{U+0f56}\N{U+0f74}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f49}\N{U+0f72}\N{U+0f0b}\N{U+0f58}\N{U+0f0b}"
    ],
    era_abbreviated => [
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}\N{U+0f66}\N{U+0f94}\N{U+0f7c}\N{U+0f53}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}"
    ],
    era_narrow => [
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}\N{U+0f66}\N{U+0f94}\N{U+0f7c}\N{U+0f53}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}"
    ],
    era_wide => [
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}\N{U+0f66}\N{U+0f94}\N{U+0f7c}\N{U+0f53}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Tibetan",
    month_format_abbreviated => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f22}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f23}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f24}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f25}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f26}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f27}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f28}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f29}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f20}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f21}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f22}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f63}\N{U+0f94}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0fb2}\N{U+0f74}\N{U+0f42}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f51}\N{U+0f74}\N{U+0f53}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f62}\N{U+0f92}\N{U+0fb1}\N{U+0f51}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0f42}\N{U+0f74}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f45}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f22}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f23}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f24}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f25}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f26}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f27}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f28}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f29}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f20}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f21}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f22}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f63}\N{U+0f94}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0fb2}\N{U+0f74}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f51}\N{U+0f74}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f62}\N{U+0f92}\N{U+0fb1}\N{U+0f51}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0f42}\N{U+0f74}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f45}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}"
    ],
    name => "Tibetan",
    native_language => "\N{U+0f56}\N{U+0f7c}\N{U+0f51}\N{U+0f0b}\N{U+0f66}\N{U+0f90}\N{U+0f51}\N{U+0f0b}",
    native_name => "\N{U+0f56}\N{U+0f7c}\N{U+0f51}\N{U+0f0b}\N{U+0f66}\N{U+0f90}\N{U+0f51}\N{U+0f0b}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ bo-CN ]__
  {
    am_pm_abbreviated => [
      "\N{U+0f66}\N{U+0f94}\N{U+0f0b}\N{U+0f51}\N{U+0fb2}\N{U+0f7c}\N{U+0f0b}",
      "\N{U+0f55}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0fb2}\N{U+0f7c}\N{U+0f0b}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y LLLL",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d, E",
      MMMMd => "MMMM\N{U+0f60}\N{U+0f72}\N{U+0f0b}\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
      MMMd => "MMM\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y LLL",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMMd => "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}y MMMM\N{U+0f60}\N{U+0f72}\N{U+0f0b}\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
      yMMMd => "y \N{U+0f63}\N{U+0f7c}\N{U+0f60}\N{U+0f72}\N{U+0f0b}MMM\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "bo-CN",
    date_format_full => "y MMMM\N{U+0f60}\N{U+0f72}\N{U+0f0b}\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d, EEEE",
    date_format_long => "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}y MMMM\N{U+0f60}\N{U+0f72}\N{U+0f0b}\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
    date_format_medium => "y \N{U+0f63}\N{U+0f7c}\N{U+0f60}\N{U+0f72}\N{U+0f0b}MMM\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}",
      "\N{U+0f58}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f51}\N{U+0f58}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}\N{U+0f56}\N{U+0f74}\N{U+0f0b}",
      "\N{U+0f54}\N{U+0f0b}\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f49}\N{U+0f72}\N{U+0f0b}\N{U+0f58}\N{U+0f0b}"
    ],
    day_format_narrow => [
      "\N{U+0f5f}\N{U+0fb3}",
      "\N{U+0f58}\N{U+0f72}\N{U+0f42}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}",
      "\N{U+0f66}\N{U+0f44}\N{U+0f66}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}",
      "\N{U+0f49}\N{U+0f72}"
    ],
    day_format_wide => [
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f58}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f51}\N{U+0f58}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}\N{U+0f56}\N{U+0f74}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f49}\N{U+0f72}\N{U+0f0b}\N{U+0f58}\N{U+0f0b}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}",
      "\N{U+0f58}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f51}\N{U+0f58}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}\N{U+0f56}\N{U+0f74}\N{U+0f0b}",
      "\N{U+0f54}\N{U+0f0b}\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f49}\N{U+0f72}\N{U+0f0b}\N{U+0f58}\N{U+0f0b}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0f5f}\N{U+0fb3}",
      "\N{U+0f58}\N{U+0f72}\N{U+0f42}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}",
      "\N{U+0f66}\N{U+0f44}\N{U+0f66}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}",
      "\N{U+0f49}\N{U+0f72}"
    ],
    day_stand_alone_wide => [
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f58}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f51}\N{U+0f58}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}\N{U+0f56}\N{U+0f74}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f49}\N{U+0f72}\N{U+0f0b}\N{U+0f58}\N{U+0f0b}"
    ],
    era_abbreviated => [
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}\N{U+0f66}\N{U+0f94}\N{U+0f7c}\N{U+0f53}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}"
    ],
    era_narrow => [
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}\N{U+0f66}\N{U+0f94}\N{U+0f7c}\N{U+0f53}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}"
    ],
    era_wide => [
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}\N{U+0f66}\N{U+0f94}\N{U+0f7c}\N{U+0f53}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "\N{U+0f54}\N{U+0f66}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}%y\N{U+0f5f}\N{U+0f63}%m\N{U+0f5a}\N{U+0f7a}\N{U+0f66}%d",
    glibc_datetime_format => "\N{U+0f54}\N{U+0f66}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}%y\N{U+0f5f}\N{U+0f63}%m\N{U+0f5a}\N{U+0f7a}\N{U+0f66}%d\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}%H\N{U+0f40}\N{U+0f66}\N{U+0f62}\N{U+0f0b}\N{U+0f58}%M\N{U+0f40}\N{U+0f66}\N{U+0f62}\N{U+0f0b}\N{U+0f46}%S",
    glibc_time_12_format => "\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}%I\N{U+0f40}\N{U+0f66}\N{U+0f62}\N{U+0f0b}\N{U+0f58}%M\N{U+0f40}\N{U+0f66}\N{U+0f62}\N{U+0f0b}\N{U+0f46}%S %p",
    glibc_time_format => "\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}%H\N{U+0f40}\N{U+0f66}\N{U+0f62}\N{U+0f0b}\N{U+0f58}%M\N{U+0f40}\N{U+0f66}\N{U+0f62}\N{U+0f0b}\N{U+0f46}%S",
    language => "Tibetan",
    month_format_abbreviated => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f22}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f23}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f24}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f25}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f26}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f27}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f28}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f29}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f20}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f21}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f22}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f63}\N{U+0f94}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0fb2}\N{U+0f74}\N{U+0f42}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f51}\N{U+0f74}\N{U+0f53}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f62}\N{U+0f92}\N{U+0fb1}\N{U+0f51}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0f42}\N{U+0f74}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f45}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f22}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f23}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f24}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f25}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f26}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f27}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f28}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f29}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f20}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f21}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f22}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f63}\N{U+0f94}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0fb2}\N{U+0f74}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f51}\N{U+0f74}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f62}\N{U+0f92}\N{U+0fb1}\N{U+0f51}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0f42}\N{U+0f74}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f45}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}"
    ],
    name => "Tibetan China",
    native_language => "\N{U+0f56}\N{U+0f7c}\N{U+0f51}\N{U+0f0b}\N{U+0f66}\N{U+0f90}\N{U+0f51}\N{U+0f0b}",
    native_name => "\N{U+0f56}\N{U+0f7c}\N{U+0f51}\N{U+0f0b}\N{U+0f66}\N{U+0f90}\N{U+0f51}\N{U+0f0b} \N{U+0f62}\N{U+0f92}\N{U+0fb1}\N{U+0f0b}\N{U+0f53}\N{U+0f42}",
    native_script => undef,
    native_territory => "\N{U+0f62}\N{U+0f92}\N{U+0fb1}\N{U+0f0b}\N{U+0f53}\N{U+0f42}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}"
    ],
    script => undef,
    territory => "China",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ bo-IN ]__
  {
    am_pm_abbreviated => [
      "\N{U+0f66}\N{U+0f94}\N{U+0f0b}\N{U+0f51}\N{U+0fb2}\N{U+0f7c}\N{U+0f0b}",
      "\N{U+0f55}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0fb2}\N{U+0f7c}\N{U+0f0b}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y LLLL",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d, E",
      MMMMd => "MMMM\N{U+0f60}\N{U+0f72}\N{U+0f0b}\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
      MMMd => "MMM\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y LLL",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMMd => "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}y MMMM\N{U+0f60}\N{U+0f72}\N{U+0f0b}\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
      yMMMd => "y \N{U+0f63}\N{U+0f7c}\N{U+0f60}\N{U+0f72}\N{U+0f0b}MMM\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "bo-IN",
    date_format_full => "y MMMM\N{U+0f60}\N{U+0f72}\N{U+0f0b}\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d, EEEE",
    date_format_long => "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}y MMMM\N{U+0f60}\N{U+0f72}\N{U+0f0b}\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
    date_format_medium => "y \N{U+0f63}\N{U+0f7c}\N{U+0f60}\N{U+0f72}\N{U+0f0b}MMM\N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}",
      "\N{U+0f58}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f51}\N{U+0f58}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}\N{U+0f56}\N{U+0f74}\N{U+0f0b}",
      "\N{U+0f54}\N{U+0f0b}\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f49}\N{U+0f72}\N{U+0f0b}\N{U+0f58}\N{U+0f0b}"
    ],
    day_format_narrow => [
      "\N{U+0f5f}\N{U+0fb3}",
      "\N{U+0f58}\N{U+0f72}\N{U+0f42}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}",
      "\N{U+0f66}\N{U+0f44}\N{U+0f66}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}",
      "\N{U+0f49}\N{U+0f72}"
    ],
    day_format_wide => [
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f58}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f51}\N{U+0f58}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}\N{U+0f56}\N{U+0f74}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f49}\N{U+0f72}\N{U+0f0b}\N{U+0f58}\N{U+0f0b}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}",
      "\N{U+0f58}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f51}\N{U+0f58}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}\N{U+0f56}\N{U+0f74}\N{U+0f0b}",
      "\N{U+0f54}\N{U+0f0b}\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f49}\N{U+0f72}\N{U+0f0b}\N{U+0f58}\N{U+0f0b}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0f5f}\N{U+0fb3}",
      "\N{U+0f58}\N{U+0f72}\N{U+0f42}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}",
      "\N{U+0f66}\N{U+0f44}\N{U+0f66}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}",
      "\N{U+0f49}\N{U+0f72}"
    ],
    day_stand_alone_wide => [
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f58}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f51}\N{U+0f58}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}\N{U+0f56}\N{U+0f74}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f49}\N{U+0f72}\N{U+0f0b}\N{U+0f58}\N{U+0f0b}"
    ],
    era_abbreviated => [
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}\N{U+0f66}\N{U+0f94}\N{U+0f7c}\N{U+0f53}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}"
    ],
    era_narrow => [
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}\N{U+0f66}\N{U+0f94}\N{U+0f7c}\N{U+0f53}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}"
    ],
    era_wide => [
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}\N{U+0f66}\N{U+0f94}\N{U+0f7c}\N{U+0f53}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Tibetan",
    month_format_abbreviated => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f22}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f23}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f24}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f25}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f26}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f27}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f28}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f29}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f20}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f21}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f22}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f63}\N{U+0f94}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0fb2}\N{U+0f74}\N{U+0f42}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f51}\N{U+0f74}\N{U+0f53}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f62}\N{U+0f92}\N{U+0fb1}\N{U+0f51}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0f42}\N{U+0f74}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f45}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f22}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f23}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f24}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f25}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f26}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f27}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f28}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f29}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f20}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f21}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f22}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f63}\N{U+0f94}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0fb2}\N{U+0f74}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f51}\N{U+0f74}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f62}\N{U+0f92}\N{U+0fb1}\N{U+0f51}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f51}\N{U+0f42}\N{U+0f74}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f45}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}"
    ],
    name => "Tibetan India",
    native_language => "\N{U+0f56}\N{U+0f7c}\N{U+0f51}\N{U+0f0b}\N{U+0f66}\N{U+0f90}\N{U+0f51}\N{U+0f0b}",
    native_name => "\N{U+0f56}\N{U+0f7c}\N{U+0f51}\N{U+0f0b}\N{U+0f66}\N{U+0f90}\N{U+0f51}\N{U+0f0b} \N{U+0f62}\N{U+0f92}\N{U+0fb1}\N{U+0f0b}\N{U+0f42}\N{U+0f62}\N{U+0f0b}",
    native_script => undef,
    native_territory => "\N{U+0f62}\N{U+0f92}\N{U+0fb1}\N{U+0f0b}\N{U+0f42}\N{U+0f62}\N{U+0f0b}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f7c}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}",
      "\N{U+0f51}\N{U+0f74}\N{U+0f66}\N{U+0f0b}\N{U+0f5a}\N{U+0f72}\N{U+0f42}\N{U+0f66}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0d}"
    ],
    script => undef,
    territory => "India",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ br ]__
  {
    am_pm_abbreviated => [
      "A.M.",
      "G.M."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "MM",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "br",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} 'da' {0}",
    datetime_format_long => "{1} 'da' {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Lun",
      "Meu.",
      "Mer.",
      "Yaou",
      "Gwe.",
      "Sad.",
      "Sul"
    ],
    day_format_narrow => [
      "L",
      "Mz",
      "Mc",
      "Y",
      "G",
      "Sa",
      "Su"
    ],
    day_format_wide => [
      "Lun",
      "Meurzh",
      "Merc\N{U+02bc}her",
      "Yaou",
      "Gwener",
      "Sadorn",
      "Sul"
    ],
    day_stand_alone_abbreviated => [
      "Lun",
      "Meu.",
      "Mer.",
      "Yaou",
      "Gwe.",
      "Sad.",
      "Sul"
    ],
    day_stand_alone_narrow => [
      "L",
      "Mz",
      "Mc",
      "Y",
      "G",
      "Sa",
      "Su"
    ],
    day_stand_alone_wide => [
      "Lun",
      "Meurzh",
      "Merc\N{U+02bc}her",
      "Yaou",
      "Gwener",
      "Sadorn",
      "Sul"
    ],
    era_abbreviated => [
      "a-raok J.K.",
      "goude J.K."
    ],
    era_narrow => [
      "a-raok J.K.",
      "goude J.K."
    ],
    era_wide => [
      "a-raok Jezuz-Krist",
      "goude Jezuz-Krist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Breton",
    month_format_abbreviated => [
      "Gen.",
      "C\N{U+02bc}hwe.",
      "Meur.",
      "Ebr.",
      "Mae",
      "Mezh.",
      "Goue.",
      "Eost",
      "Gwen.",
      "Here",
      "Du",
      "Kzu."
    ],
    month_format_narrow => [
      "01",
      "02",
      "03",
      "04",
      "05",
      "06",
      "07",
      "08",
      "09",
      10,
      11,
      12
    ],
    month_format_wide => [
      "Genver",
      "C\N{U+02bc}hwevrer",
      "Meurzh",
      "Ebrel",
      "Mae",
      "Mezheven",
      "Gouere",
      "Eost",
      "Gwengolo",
      "Here",
      "Du",
      "Kerzu"
    ],
    month_stand_alone_abbreviated => [
      "Gen.",
      "C\N{U+02bc}hwe.",
      "Meur.",
      "Ebr.",
      "Mae",
      "Mezh.",
      "Goue.",
      "Eost",
      "Gwen.",
      "Here",
      "Du",
      "Ker."
    ],
    month_stand_alone_narrow => [
      "01",
      "02",
      "03",
      "04",
      "05",
      "06",
      "07",
      "08",
      "09",
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Genver",
      "C\N{U+02bc}hwevrer",
      "Meurzh",
      "Ebrel",
      "Mae",
      "Mezheven",
      "Gouere",
      "Eost",
      "Gwengolo",
      "Here",
      "Du",
      "Kerzu"
    ],
    name => "Breton",
    native_language => "brezhoneg",
    native_name => "brezhoneg",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1a\N{U+00f1} trim.",
      "2l trim.",
      "3e trim.",
      "4e trim."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1a\N{U+00f1} trimiziad",
      "2l trimiziad",
      "3e trimiziad",
      "4e trimiziad"
    ],
    quarter_stand_alone_abbreviated => [
      "1a\N{U+00f1} trim.",
      "2l trim.",
      "3e trim.",
      "4e trim."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1a\N{U+00f1} trimiziad",
      "2l trimiziad",
      "3e trimiziad",
      "4e trimiziad"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ br-FR ]__
  {
    am_pm_abbreviated => [
      "A.M.",
      "G.M."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "MM",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "br-FR",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} 'da' {0}",
    datetime_format_long => "{1} 'da' {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Lun",
      "Meu.",
      "Mer.",
      "Yaou",
      "Gwe.",
      "Sad.",
      "Sul"
    ],
    day_format_narrow => [
      "L",
      "Mz",
      "Mc",
      "Y",
      "G",
      "Sa",
      "Su"
    ],
    day_format_wide => [
      "Lun",
      "Meurzh",
      "Merc\N{U+02bc}her",
      "Yaou",
      "Gwener",
      "Sadorn",
      "Sul"
    ],
    day_stand_alone_abbreviated => [
      "Lun",
      "Meu.",
      "Mer.",
      "Yaou",
      "Gwe.",
      "Sad.",
      "Sul"
    ],
    day_stand_alone_narrow => [
      "L",
      "Mz",
      "Mc",
      "Y",
      "G",
      "Sa",
      "Su"
    ],
    day_stand_alone_wide => [
      "Lun",
      "Meurzh",
      "Merc\N{U+02bc}her",
      "Yaou",
      "Gwener",
      "Sadorn",
      "Sul"
    ],
    era_abbreviated => [
      "a-raok J.K.",
      "goude J.K."
    ],
    era_narrow => [
      "a-raok J.K.",
      "goude J.K."
    ],
    era_wide => [
      "a-raok Jezuz-Krist",
      "goude Jezuz-Krist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "D'ar %A %d a viz %B %Y",
    glibc_time_12_format => "%Ie%M:%S %p",
    glibc_time_format => "%T",
    language => "Breton",
    month_format_abbreviated => [
      "Gen.",
      "C\N{U+02bc}hwe.",
      "Meur.",
      "Ebr.",
      "Mae",
      "Mezh.",
      "Goue.",
      "Eost",
      "Gwen.",
      "Here",
      "Du",
      "Kzu."
    ],
    month_format_narrow => [
      "01",
      "02",
      "03",
      "04",
      "05",
      "06",
      "07",
      "08",
      "09",
      10,
      11,
      12
    ],
    month_format_wide => [
      "Genver",
      "C\N{U+02bc}hwevrer",
      "Meurzh",
      "Ebrel",
      "Mae",
      "Mezheven",
      "Gouere",
      "Eost",
      "Gwengolo",
      "Here",
      "Du",
      "Kerzu"
    ],
    month_stand_alone_abbreviated => [
      "Gen.",
      "C\N{U+02bc}hwe.",
      "Meur.",
      "Ebr.",
      "Mae",
      "Mezh.",
      "Goue.",
      "Eost",
      "Gwen.",
      "Here",
      "Du",
      "Ker."
    ],
    month_stand_alone_narrow => [
      "01",
      "02",
      "03",
      "04",
      "05",
      "06",
      "07",
      "08",
      "09",
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Genver",
      "C\N{U+02bc}hwevrer",
      "Meurzh",
      "Ebrel",
      "Mae",
      "Mezheven",
      "Gouere",
      "Eost",
      "Gwengolo",
      "Here",
      "Du",
      "Kerzu"
    ],
    name => "Breton France",
    native_language => "brezhoneg",
    native_name => "brezhoneg Fra\N{U+00f1}s",
    native_script => undef,
    native_territory => "Fra\N{U+00f1}s",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1a\N{U+00f1} trim.",
      "2l trim.",
      "3e trim.",
      "4e trim."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1a\N{U+00f1} trimiziad",
      "2l trimiziad",
      "3e trimiziad",
      "4e trimiziad"
    ],
    quarter_stand_alone_abbreviated => [
      "1a\N{U+00f1} trim.",
      "2l trim.",
      "3e trim.",
      "4e trim."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1a\N{U+00f1} trimiziad",
      "2l trimiziad",
      "3e trimiziad",
      "4e trimiziad"
    ],
    script => undef,
    territory => "France",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ brx ]__
  {
    am_pm_abbreviated => [
      "\N{U+092b}\N{U+0941}\N{U+0902}",
      "\N{U+092c}\N{U+0947}\N{U+0932}\N{U+093e}\N{U+0938}\N{U+0947}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM, y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "MMM d, y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "d-MMM",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "brx",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0938}\N{U+092e}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0932}",
      "\N{U+092c}\N{U+0941}\N{U+0926}",
      "\N{U+092c}\N{U+093f}\N{U+0938}\N{U+0925}\N{U+093f}",
      "\N{U+0938}\N{U+0941}\N{U+0916}\N{U+0941}\N{U+0930}",
      "\N{U+0938}\N{U+0941}\N{U+0928}\N{U+093f}",
      "\N{U+0930}\N{U+092c}\N{U+093f}"
    ],
    day_format_narrow => [
      "\N{U+0938}",
      "\N{U+092e}\N{U+0902}",
      "\N{U+092c}\N{U+0941}",
      "\N{U+092c}\N{U+093f}",
      "\N{U+0938}\N{U+0941}",
      "\N{U+0938}\N{U+0941}",
      "\N{U+0930}"
    ],
    day_format_wide => [
      "\N{U+0938}\N{U+092e}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0932}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0926}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+093f}\N{U+0938}\N{U+0925}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0938}\N{U+0941}\N{U+0916}\N{U+0941}\N{U+0930}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0938}\N{U+0941}\N{U+0928}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0930}\N{U+092c}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0938}\N{U+092e}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0932}",
      "\N{U+092c}\N{U+0941}\N{U+0926}",
      "\N{U+092c}\N{U+093f}\N{U+0938}\N{U+0925}\N{U+093f}",
      "\N{U+0938}\N{U+0941}\N{U+0916}\N{U+0941}\N{U+0930}",
      "\N{U+0938}\N{U+0941}\N{U+0928}\N{U+093f}",
      "\N{U+0930}\N{U+092c}\N{U+093f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0938}",
      "\N{U+092e}\N{U+0902}",
      "\N{U+092c}\N{U+0941}",
      "\N{U+092c}\N{U+093f}",
      "\N{U+0938}\N{U+0941}",
      "\N{U+0938}\N{U+0941}",
      "\N{U+0930}"
    ],
    day_stand_alone_wide => [
      "\N{U+0938}\N{U+092e}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0932}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0926}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+093f}\N{U+0938}\N{U+0925}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0938}\N{U+0941}\N{U+0916}\N{U+0941}\N{U+0930}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0938}\N{U+0941}\N{U+0928}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0930}\N{U+092c}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}"
    ],
    era_abbreviated => [
      "\N{U+0908}\N{U+0938}\N{U+093e}.\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0938}\N{U+0928}"
    ],
    era_narrow => [
      "\N{U+0908}\N{U+0938}\N{U+093e}.\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0938}\N{U+0928}"
    ],
    era_wide => [
      "\N{U+0908}\N{U+0938}\N{U+093e}.\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0938}\N{U+0928}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Bodo",
    month_format_abbreviated => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+0938}",
      "\N{U+090f}\N{U+092b}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0907}",
      "\N{U+0906}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+0925}",
      "\N{U+0938}\N{U+0947}\N{U+092c}\N{U+0925}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}",
      "\N{U+0905}\N{U+0916}\N{U+0925}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+092c}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}",
      "\N{U+0926}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}"
    ],
    month_format_narrow => [
      "\N{U+091c}",
      "\N{U+092b}\N{U+0947}",
      "\N{U+092e}\N{U+093e}",
      "\N{U+090f}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}",
      "\N{U+091c}\N{U+0941}",
      "\N{U+0906}",
      "\N{U+0938}\N{U+0947}",
      "\N{U+0905}",
      "\N{U+0928}",
      "\N{U+0926}\N{U+093f}"
    ],
    month_format_wide => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+0938}",
      "\N{U+090f}\N{U+092b}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0907}",
      "\N{U+0906}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+0925}",
      "\N{U+0938}\N{U+0947}\N{U+092c}\N{U+0925}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}",
      "\N{U+0905}\N{U+0916}\N{U+0925}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+092c}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}",
      "\N{U+0926}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+0938}",
      "\N{U+090f}\N{U+092b}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0907}",
      "\N{U+0906}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+0925}",
      "\N{U+0938}\N{U+0947}\N{U+092c}\N{U+0925}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}",
      "\N{U+0905}\N{U+0916}\N{U+0925}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+092c}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}",
      "\N{U+0926}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}"
    ],
    month_stand_alone_narrow => [
      "\N{U+091c}",
      "\N{U+092b}\N{U+0947}",
      "\N{U+092e}\N{U+093e}",
      "\N{U+090f}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}",
      "\N{U+091c}\N{U+0941}",
      "\N{U+0906}",
      "\N{U+0938}\N{U+0947}",
      "\N{U+0905}",
      "\N{U+0928}",
      "\N{U+0926}\N{U+093f}"
    ],
    month_stand_alone_wide => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+0938}",
      "\N{U+090f}\N{U+092b}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0907}",
      "\N{U+0906}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+0925}",
      "\N{U+0938}\N{U+0947}\N{U+092c}\N{U+0925}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}",
      "\N{U+0905}\N{U+0916}\N{U+0925}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+092c}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}",
      "\N{U+0926}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}"
    ],
    name => "Bodo",
    native_language => "\N{U+092c}\N{U+0921}\N{U+093c}\N{U+094b}",
    native_name => "\N{U+092c}\N{U+0921}\N{U+093c}\N{U+094b}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0938}\N{U+093f}\N{U+0925}\N{U+093e}\N{U+0938}\N{U+0947}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0938}\N{U+0947}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0938}\N{U+0947}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+0938}\N{U+0947}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0928}\N{U+0948}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0928}\N{U+0948}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+0925}\N{U+093e}\N{U+092e}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0925}\N{U+093e}\N{U+092e}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0925}\N{U+093e}\N{U+092e}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0948}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0948}/\N{U+092b}\N{U+0941}\N{U+0930}\N{U+093e}/\N{U+0906}\N{U+092c}\N{U+0941}\N{U+0902}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0938}\N{U+093f}\N{U+0925}\N{U+093e}\N{U+0938}\N{U+0947}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0938}\N{U+0947}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0938}\N{U+0947}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+0938}\N{U+0947}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0928}\N{U+0948}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0928}\N{U+0948}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+0925}\N{U+093e}\N{U+092e}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0925}\N{U+093e}\N{U+092e}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0925}\N{U+093e}\N{U+092e}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0948}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0948}/\N{U+092b}\N{U+0941}\N{U+0930}\N{U+093e}/\N{U+0906}\N{U+092c}\N{U+0941}\N{U+0902}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0938}\N{U+093f}\N{U+0925}\N{U+093e}\N{U+0938}\N{U+0947}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0938}\N{U+0947}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0938}\N{U+0947}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+0938}\N{U+0947}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0928}\N{U+0948}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0928}\N{U+0948}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+0925}\N{U+093e}\N{U+092e}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0925}\N{U+093e}\N{U+092e}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0925}\N{U+093e}\N{U+092e}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0948}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0948}/\N{U+092b}\N{U+0941}\N{U+0930}\N{U+093e}/\N{U+0906}\N{U+092c}\N{U+0941}\N{U+0902}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0938}\N{U+093f}\N{U+0925}\N{U+093e}\N{U+0938}\N{U+0947}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0938}\N{U+0947}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0938}\N{U+0947}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+0938}\N{U+0947}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0928}\N{U+0948}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0928}\N{U+0948}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+0925}\N{U+093e}\N{U+092e}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0925}\N{U+093e}\N{U+092e}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0925}\N{U+093e}\N{U+092e}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0948}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0948}/\N{U+092b}\N{U+0941}\N{U+0930}\N{U+093e}/\N{U+0906}\N{U+092c}\N{U+0941}\N{U+0902}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ brx-IN ]__
  {
    am_pm_abbreviated => [
      "\N{U+092b}\N{U+0941}\N{U+0902}",
      "\N{U+092c}\N{U+0947}\N{U+0932}\N{U+093e}\N{U+0938}\N{U+0947}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM, y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "MMM d, y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "d-MMM",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "brx-IN",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0938}\N{U+092e}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0932}",
      "\N{U+092c}\N{U+0941}\N{U+0926}",
      "\N{U+092c}\N{U+093f}\N{U+0938}\N{U+0925}\N{U+093f}",
      "\N{U+0938}\N{U+0941}\N{U+0916}\N{U+0941}\N{U+0930}",
      "\N{U+0938}\N{U+0941}\N{U+0928}\N{U+093f}",
      "\N{U+0930}\N{U+092c}\N{U+093f}"
    ],
    day_format_narrow => [
      "\N{U+0938}",
      "\N{U+092e}\N{U+0902}",
      "\N{U+092c}\N{U+0941}",
      "\N{U+092c}\N{U+093f}",
      "\N{U+0938}\N{U+0941}",
      "\N{U+0938}\N{U+0941}",
      "\N{U+0930}"
    ],
    day_format_wide => [
      "\N{U+0938}\N{U+092e}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0932}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0926}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+093f}\N{U+0938}\N{U+0925}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0938}\N{U+0941}\N{U+0916}\N{U+0941}\N{U+0930}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0938}\N{U+0941}\N{U+0928}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0930}\N{U+092c}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0938}\N{U+092e}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0932}",
      "\N{U+092c}\N{U+0941}\N{U+0926}",
      "\N{U+092c}\N{U+093f}\N{U+0938}\N{U+0925}\N{U+093f}",
      "\N{U+0938}\N{U+0941}\N{U+0916}\N{U+0941}\N{U+0930}",
      "\N{U+0938}\N{U+0941}\N{U+0928}\N{U+093f}",
      "\N{U+0930}\N{U+092c}\N{U+093f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0938}",
      "\N{U+092e}\N{U+0902}",
      "\N{U+092c}\N{U+0941}",
      "\N{U+092c}\N{U+093f}",
      "\N{U+0938}\N{U+0941}",
      "\N{U+0938}\N{U+0941}",
      "\N{U+0930}"
    ],
    day_stand_alone_wide => [
      "\N{U+0938}\N{U+092e}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0932}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0926}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+093f}\N{U+0938}\N{U+0925}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0938}\N{U+0941}\N{U+0916}\N{U+0941}\N{U+0930}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0938}\N{U+0941}\N{U+0928}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0930}\N{U+092c}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}"
    ],
    era_abbreviated => [
      "\N{U+0908}\N{U+0938}\N{U+093e}.\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0938}\N{U+0928}"
    ],
    era_narrow => [
      "\N{U+0908}\N{U+0938}\N{U+093e}.\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0938}\N{U+0928}"
    ],
    era_wide => [
      "\N{U+0908}\N{U+0938}\N{U+093e}.\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0938}\N{U+0928}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A %d %b %Y",
    glibc_datetime_format => "%A %d %b %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "Bodo",
    month_format_abbreviated => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+0938}",
      "\N{U+090f}\N{U+092b}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0907}",
      "\N{U+0906}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+0925}",
      "\N{U+0938}\N{U+0947}\N{U+092c}\N{U+0925}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}",
      "\N{U+0905}\N{U+0916}\N{U+0925}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+092c}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}",
      "\N{U+0926}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}"
    ],
    month_format_narrow => [
      "\N{U+091c}",
      "\N{U+092b}\N{U+0947}",
      "\N{U+092e}\N{U+093e}",
      "\N{U+090f}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}",
      "\N{U+091c}\N{U+0941}",
      "\N{U+0906}",
      "\N{U+0938}\N{U+0947}",
      "\N{U+0905}",
      "\N{U+0928}",
      "\N{U+0926}\N{U+093f}"
    ],
    month_format_wide => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+0938}",
      "\N{U+090f}\N{U+092b}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0907}",
      "\N{U+0906}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+0925}",
      "\N{U+0938}\N{U+0947}\N{U+092c}\N{U+0925}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}",
      "\N{U+0905}\N{U+0916}\N{U+0925}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+092c}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}",
      "\N{U+0926}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+0938}",
      "\N{U+090f}\N{U+092b}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0907}",
      "\N{U+0906}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+0925}",
      "\N{U+0938}\N{U+0947}\N{U+092c}\N{U+0925}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}",
      "\N{U+0905}\N{U+0916}\N{U+0925}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+092c}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}",
      "\N{U+0926}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}"
    ],
    month_stand_alone_narrow => [
      "\N{U+091c}",
      "\N{U+092b}\N{U+0947}",
      "\N{U+092e}\N{U+093e}",
      "\N{U+090f}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}",
      "\N{U+091c}\N{U+0941}",
      "\N{U+0906}",
      "\N{U+0938}\N{U+0947}",
      "\N{U+0905}",
      "\N{U+0928}",
      "\N{U+0926}\N{U+093f}"
    ],
    month_stand_alone_wide => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+0938}",
      "\N{U+090f}\N{U+092b}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0907}",
      "\N{U+0906}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+0925}",
      "\N{U+0938}\N{U+0947}\N{U+092c}\N{U+0925}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}",
      "\N{U+0905}\N{U+0916}\N{U+0925}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+092c}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}",
      "\N{U+0926}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+091c}\N{U+094d}\N{U+092c}\N{U+093c}\N{U+0930}"
    ],
    name => "Bodo India",
    native_language => "\N{U+092c}\N{U+0921}\N{U+093c}\N{U+094b}",
    native_name => "\N{U+092c}\N{U+0921}\N{U+093c}\N{U+094b} \N{U+092d}\N{U+093e}\N{U+0930}\N{U+0924}",
    native_script => undef,
    native_territory => "\N{U+092d}\N{U+093e}\N{U+0930}\N{U+0924}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0938}\N{U+093f}\N{U+0925}\N{U+093e}\N{U+0938}\N{U+0947}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0938}\N{U+0947}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0938}\N{U+0947}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+0938}\N{U+0947}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0928}\N{U+0948}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0928}\N{U+0948}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+0925}\N{U+093e}\N{U+092e}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0925}\N{U+093e}\N{U+092e}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0925}\N{U+093e}\N{U+092e}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0948}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0948}/\N{U+092b}\N{U+0941}\N{U+0930}\N{U+093e}/\N{U+0906}\N{U+092c}\N{U+0941}\N{U+0902}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0938}\N{U+093f}\N{U+0925}\N{U+093e}\N{U+0938}\N{U+0947}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0938}\N{U+0947}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0938}\N{U+0947}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+0938}\N{U+0947}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0928}\N{U+0948}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0928}\N{U+0948}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+0925}\N{U+093e}\N{U+092e}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0925}\N{U+093e}\N{U+092e}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0925}\N{U+093e}\N{U+092e}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0948}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0948}/\N{U+092b}\N{U+0941}\N{U+0930}\N{U+093e}/\N{U+0906}\N{U+092c}\N{U+0941}\N{U+0902}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0938}\N{U+093f}\N{U+0925}\N{U+093e}\N{U+0938}\N{U+0947}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0938}\N{U+0947}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0938}\N{U+0947}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+0938}\N{U+0947}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0928}\N{U+0948}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0928}\N{U+0948}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+0925}\N{U+093e}\N{U+092e}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0925}\N{U+093e}\N{U+092e}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0925}\N{U+093e}\N{U+092e}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0948}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0948}/\N{U+092b}\N{U+0941}\N{U+0930}\N{U+093e}/\N{U+0906}\N{U+092c}\N{U+0941}\N{U+0902}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0938}\N{U+093f}\N{U+0925}\N{U+093e}\N{U+0938}\N{U+0947}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0938}\N{U+0947}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0938}\N{U+0947}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+0938}\N{U+0947}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0928}\N{U+0948}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0928}\N{U+0948}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+0925}\N{U+093e}\N{U+092e}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+0925}\N{U+093e}\N{U+092e}/\N{U+092c}\N{U+093e}\N{U+0939}\N{U+093e}\N{U+0917}\N{U+094b}\N{U+0925}\N{U+093e}\N{U+092e}",
      "\N{U+0916}\N{U+093e}\N{U+0935}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0948}/\N{U+0916}\N{U+094b}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+094b}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0948}/\N{U+092b}\N{U+0941}\N{U+0930}\N{U+093e}/\N{U+0906}\N{U+092c}\N{U+0941}\N{U+0902}"
    ],
    script => undef,
    territory => "India",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ bs ]__
  {
    am_pm_abbreviated => [
      "prijepodne",
      "popodne"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, dd.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y. G",
      GyMMM => "MMM y. G",
      GyMMMEd => "E, dd. MMM y. G",
      GyMMMd => "dd. MMM y. G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd.MM.",
      MMM => "LLL",
      MMMEd => "E, dd. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "dd. MMM",
      MMdd => "dd. MM.",
      Md => "dd.MM.",
      d => "d",
      h => "h a",
      hm => "hh:mm a",
      hms => "hh:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y.",
      yM => "MM.y.",
      yMEd => "E, dd.MM.y.",
      yMM => "MM. y.",
      yMMM => "MMM y.",
      yMMMEd => "E, dd. MMM y.",
      yMMMM => "LLLL y.",
      yMMMd => "dd. MMM y.",
      yMd => "dd.MM.y.",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "bs",
    date_format_full => "EEEE, dd. MMMM y.",
    date_format_long => "dd. MMMM y.",
    date_format_medium => "dd. MMM. y.",
    date_format_short => "dd.MM.yy.",
    datetime_format_full => "{1} 'u' {0}",
    datetime_format_long => "{1} 'u' {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "pon",
      "uto",
      "sri",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_format_narrow => [
      "P",
      "U",
      "S",
      "\N{U+010c}",
      "P",
      "S",
      "N"
    ],
    day_format_wide => [
      "ponedjeljak",
      "utorak",
      "srijeda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedjelja"
    ],
    day_stand_alone_abbreviated => [
      "pon",
      "uto",
      "sri",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_stand_alone_narrow => [
      "p",
      "u",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "ponedjeljak",
      "utorak",
      "srijeda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedjelja"
    ],
    era_abbreviated => [
      "p. n. e.",
      "n. e."
    ],
    era_narrow => [
      "p. n. e.",
      "n. e."
    ],
    era_wide => [
      "Prije nove ere",
      "Nove ere"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Bosnian",
    month_format_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_format_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "mart",
      "april",
      "maj",
      "juni",
      "juli",
      "august",
      "septembar",
      "oktobar",
      "novembar",
      "decembar"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "mart",
      "april",
      "maj",
      "juni",
      "juli",
      "august",
      "septembar",
      "oktobar",
      "novembar",
      "decembar"
    ],
    name => "Bosnian",
    native_language => "bosanski",
    native_name => "bosanski",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "Prvi kvartal",
      "Drugi kvartal",
      "Tre\N{U+0107}i kvartal",
      "\N{U+010c}etvrti kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "Prvi kvartal",
      "Drugi kvartal",
      "Tre\N{U+0107}i kvartal",
      "\N{U+010c}etvrti kvartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ bs-Cyrl ]__
  {
    am_pm_abbreviated => [
      "\N{U+043f}\N{U+0440}\N{U+0435} \N{U+043f}\N{U+043e}\N{U+0434}\N{U+043d}\N{U+0435}",
      "\N{U+043f}\N{U+043e}\N{U+043f}\N{U+043e}\N{U+0434}\N{U+043d}\N{U+0435}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y. G",
      GyMMM => "MMM y. G",
      GyMMMEd => "E, dd. MMM y. G",
      GyMMMd => "dd. MMM y. G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd.MM.",
      MMM => "LLL",
      MMMEd => "E, dd. MMM",
      MMMMd => "MMMM d",
      MMMd => "dd. MMM",
      Md => "dd.MM.",
      d => "d",
      h => "hh a",
      hm => "hh:mm a",
      hms => "hh:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y.",
      yM => "MM.y.",
      yMEd => "E, dd.MM.y.",
      yMMM => "MMM y.",
      yMMMEd => "E, dd. MMM y.",
      yMMMM => "y MMMM",
      yMMMd => "dd. MMM y.",
      yMd => "dd.MM.y.",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "bs-Cyrl",
    date_format_full => "EEEE, dd. MMMM y.",
    date_format_long => "dd. MMMM y.",
    date_format_medium => "dd.MM.y.",
    date_format_short => "d.M.yy.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}",
      "\N{U+0443}\N{U+0442}\N{U+043e}",
      "\N{U+0441}\N{U+0440}\N{U+0438}",
      "\N{U+0447}\N{U+0435}\N{U+0442}",
      "\N{U+043f}\N{U+0435}\N{U+0442}",
      "\N{U+0441}\N{U+0443}\N{U+0431}",
      "\N{U+043d}\N{U+0435}\N{U+0434}"
    ],
    day_format_narrow => [
      "\N{U+043f}",
      "\N{U+0443}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}\N{U+043a}",
      "\N{U+0443}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0438}\N{U+0458}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}",
      "\N{U+0443}\N{U+0442}\N{U+043e}",
      "\N{U+0441}\N{U+0440}\N{U+0438}",
      "\N{U+0447}\N{U+0435}\N{U+0442}",
      "\N{U+043f}\N{U+0435}\N{U+0442}",
      "\N{U+0441}\N{U+0443}\N{U+0431}",
      "\N{U+043d}\N{U+0435}\N{U+0434}"
    ],
    day_stand_alone_narrow => [
      "\N{U+043f}",
      "\N{U+0443}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}\N{U+043a}",
      "\N{U+0443}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0438}\N{U+0458}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}"
    ],
    era_abbreviated => [
      "\N{U+043f}. \N{U+043d}. \N{U+0435}.",
      "\N{U+043d}. \N{U+0435}."
    ],
    era_narrow => [
      "\N{U+043f}.\N{U+043d}.\N{U+0435}.",
      "\N{U+043d}.\N{U+0435}."
    ],
    era_wide => [
      "\N{U+041f}\N{U+0440}\N{U+0435} \N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435} \N{U+0435}\N{U+0440}\N{U+0435}",
      "\N{U+041d}\N{U+043e}\N{U+0432}\N{U+0435} \N{U+0435}\N{U+0440}\N{U+0435}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Bosnian",
    month_format_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}",
      "\N{U+0444}\N{U+0435}\N{U+0431}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0432}",
      "\N{U+0434}\N{U+0435}\N{U+0446}"
    ],
    month_format_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_format_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0431}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}\N{U+0438}",
      "\N{U+0458}\N{U+0443}\N{U+043b}\N{U+0438}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+0446}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}",
      "\N{U+0444}\N{U+0435}\N{U+0431}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0432}",
      "\N{U+0434}\N{U+0435}\N{U+0446}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_stand_alone_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0431}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}\N{U+0438}",
      "\N{U+0458}\N{U+0443}\N{U+043b}\N{U+0438}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+0446}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}"
    ],
    name => "Bosnian",
    native_language => "\N{U+0431}\N{U+043e}\N{U+0441}\N{U+0430}\N{U+043d}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_name => "\N{U+0431}\N{U+043e}\N{U+0441}\N{U+0430}\N{U+043d}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+041a}1",
      "\N{U+041a}2",
      "\N{U+041a}3",
      "\N{U+041a}4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "\N{U+041f}\N{U+0440}\N{U+0432}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0414}\N{U+0440}\N{U+0443}\N{U+0433}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0422}\N{U+0440}\N{U+0435}\N{U+045b}\N{U+0435} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0427}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+041a}1",
      "\N{U+041a}2",
      "\N{U+041a}3",
      "\N{U+041a}4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "\N{U+041f}\N{U+0440}\N{U+0432}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0414}\N{U+0440}\N{U+0443}\N{U+0433}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0422}\N{U+0440}\N{U+0435}\N{U+045b}\N{U+0435} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0427}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ bs-Cyrl-BA ]__
  {
    am_pm_abbreviated => [
      "\N{U+043f}\N{U+0440}\N{U+0435} \N{U+043f}\N{U+043e}\N{U+0434}\N{U+043d}\N{U+0435}",
      "\N{U+043f}\N{U+043e}\N{U+043f}\N{U+043e}\N{U+0434}\N{U+043d}\N{U+0435}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y. G",
      GyMMM => "MMM y. G",
      GyMMMEd => "E, dd. MMM y. G",
      GyMMMd => "dd. MMM y. G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd.MM.",
      MMM => "LLL",
      MMMEd => "E, dd. MMM",
      MMMMd => "MMMM d",
      MMMd => "dd. MMM",
      Md => "dd.MM.",
      d => "d",
      h => "hh a",
      hm => "hh:mm a",
      hms => "hh:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y.",
      yM => "MM.y.",
      yMEd => "E, dd.MM.y.",
      yMMM => "MMM y.",
      yMMMEd => "E, dd. MMM y.",
      yMMMM => "y MMMM",
      yMMMd => "dd. MMM y.",
      yMd => "dd.MM.y.",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "bs-Cyrl-BA",
    date_format_full => "EEEE, dd. MMMM y.",
    date_format_long => "dd. MMMM y.",
    date_format_medium => "dd.MM.y.",
    date_format_short => "d.M.yy.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}",
      "\N{U+0443}\N{U+0442}\N{U+043e}",
      "\N{U+0441}\N{U+0440}\N{U+0438}",
      "\N{U+0447}\N{U+0435}\N{U+0442}",
      "\N{U+043f}\N{U+0435}\N{U+0442}",
      "\N{U+0441}\N{U+0443}\N{U+0431}",
      "\N{U+043d}\N{U+0435}\N{U+0434}"
    ],
    day_format_narrow => [
      "\N{U+043f}",
      "\N{U+0443}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}\N{U+043a}",
      "\N{U+0443}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0438}\N{U+0458}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}",
      "\N{U+0443}\N{U+0442}\N{U+043e}",
      "\N{U+0441}\N{U+0440}\N{U+0438}",
      "\N{U+0447}\N{U+0435}\N{U+0442}",
      "\N{U+043f}\N{U+0435}\N{U+0442}",
      "\N{U+0441}\N{U+0443}\N{U+0431}",
      "\N{U+043d}\N{U+0435}\N{U+0434}"
    ],
    day_stand_alone_narrow => [
      "\N{U+043f}",
      "\N{U+0443}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}\N{U+043a}",
      "\N{U+0443}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0438}\N{U+0458}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}"
    ],
    era_abbreviated => [
      "\N{U+043f}. \N{U+043d}. \N{U+0435}.",
      "\N{U+043d}. \N{U+0435}."
    ],
    era_narrow => [
      "\N{U+043f}.\N{U+043d}.\N{U+0435}.",
      "\N{U+043d}.\N{U+0435}."
    ],
    era_wide => [
      "\N{U+041f}\N{U+0440}\N{U+0435} \N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435} \N{U+0435}\N{U+0440}\N{U+0435}",
      "\N{U+041d}\N{U+043e}\N{U+0432}\N{U+0435} \N{U+0435}\N{U+0440}\N{U+0435}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Bosnian",
    month_format_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}",
      "\N{U+0444}\N{U+0435}\N{U+0431}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0432}",
      "\N{U+0434}\N{U+0435}\N{U+0446}"
    ],
    month_format_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_format_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0431}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}\N{U+0438}",
      "\N{U+0458}\N{U+0443}\N{U+043b}\N{U+0438}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+0446}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}",
      "\N{U+0444}\N{U+0435}\N{U+0431}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0432}",
      "\N{U+0434}\N{U+0435}\N{U+0446}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_stand_alone_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0431}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}\N{U+0438}",
      "\N{U+0458}\N{U+0443}\N{U+043b}\N{U+0438}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+0446}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}"
    ],
    name => "Bosnian Bosnia & Herzegovina Cyrillic",
    native_language => "\N{U+0431}\N{U+043e}\N{U+0441}\N{U+0430}\N{U+043d}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_name => "\N{U+0431}\N{U+043e}\N{U+0441}\N{U+0430}\N{U+043d}\N{U+0441}\N{U+043a}\N{U+0438} \N{U+0411}\N{U+043e}\N{U+0441}\N{U+043d}\N{U+0430} \N{U+0438} \N{U+0425}\N{U+0435}\N{U+0440}\N{U+0446}\N{U+0435}\N{U+0433}\N{U+043e}\N{U+0432}\N{U+0438}\N{U+043d}\N{U+0430} \N{U+040b}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}\N{U+0438}\N{U+0446}\N{U+0430}",
    native_script => "\N{U+040b}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}\N{U+0438}\N{U+0446}\N{U+0430}",
    native_territory => "\N{U+0411}\N{U+043e}\N{U+0441}\N{U+043d}\N{U+0430} \N{U+0438} \N{U+0425}\N{U+0435}\N{U+0440}\N{U+0446}\N{U+0435}\N{U+0433}\N{U+043e}\N{U+0432}\N{U+0438}\N{U+043d}\N{U+0430}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+041a}1",
      "\N{U+041a}2",
      "\N{U+041a}3",
      "\N{U+041a}4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "\N{U+041f}\N{U+0440}\N{U+0432}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0414}\N{U+0440}\N{U+0443}\N{U+0433}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0422}\N{U+0440}\N{U+0435}\N{U+045b}\N{U+0435} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0427}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+041a}1",
      "\N{U+041a}2",
      "\N{U+041a}3",
      "\N{U+041a}4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "\N{U+041f}\N{U+0440}\N{U+0432}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0414}\N{U+0440}\N{U+0443}\N{U+0433}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0422}\N{U+0440}\N{U+0435}\N{U+045b}\N{U+0435} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0427}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}"
    ],
    script => "Cyrillic",
    territory => "Bosnia & Herzegovina",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ bs-Latn ]__
  {
    am_pm_abbreviated => [
      "prijepodne",
      "popodne"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, dd.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y. G",
      GyMMM => "MMM y. G",
      GyMMMEd => "E, dd. MMM y. G",
      GyMMMd => "dd. MMM y. G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd.MM.",
      MMM => "LLL",
      MMMEd => "E, dd. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "dd. MMM",
      MMdd => "dd. MM.",
      Md => "dd.MM.",
      d => "d",
      h => "h a",
      hm => "hh:mm a",
      hms => "hh:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y.",
      yM => "MM.y.",
      yMEd => "E, dd.MM.y.",
      yMM => "MM. y.",
      yMMM => "MMM y.",
      yMMMEd => "E, dd. MMM y.",
      yMMMM => "LLLL y.",
      yMMMd => "dd. MMM y.",
      yMd => "dd.MM.y.",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "bs-Latn",
    date_format_full => "EEEE, dd. MMMM y.",
    date_format_long => "dd. MMMM y.",
    date_format_medium => "dd. MMM. y.",
    date_format_short => "dd.MM.yy.",
    datetime_format_full => "{1} 'u' {0}",
    datetime_format_long => "{1} 'u' {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "pon",
      "uto",
      "sri",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_format_narrow => [
      "P",
      "U",
      "S",
      "\N{U+010c}",
      "P",
      "S",
      "N"
    ],
    day_format_wide => [
      "ponedjeljak",
      "utorak",
      "srijeda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedjelja"
    ],
    day_stand_alone_abbreviated => [
      "pon",
      "uto",
      "sri",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_stand_alone_narrow => [
      "p",
      "u",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "ponedjeljak",
      "utorak",
      "srijeda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedjelja"
    ],
    era_abbreviated => [
      "p. n. e.",
      "n. e."
    ],
    era_narrow => [
      "p. n. e.",
      "n. e."
    ],
    era_wide => [
      "Prije nove ere",
      "Nove ere"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Bosnian",
    month_format_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_format_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "mart",
      "april",
      "maj",
      "juni",
      "juli",
      "august",
      "septembar",
      "oktobar",
      "novembar",
      "decembar"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "mart",
      "april",
      "maj",
      "juni",
      "juli",
      "august",
      "septembar",
      "oktobar",
      "novembar",
      "decembar"
    ],
    name => "Bosnian",
    native_language => "bosanski",
    native_name => "bosanski",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "Prvi kvartal",
      "Drugi kvartal",
      "Tre\N{U+0107}i kvartal",
      "\N{U+010c}etvrti kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "Prvi kvartal",
      "Drugi kvartal",
      "Tre\N{U+0107}i kvartal",
      "\N{U+010c}etvrti kvartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ bs-Latn-BA ]__
  {
    am_pm_abbreviated => [
      "prijepodne",
      "popodne"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, dd.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y. G",
      GyMMM => "MMM y. G",
      GyMMMEd => "E, dd. MMM y. G",
      GyMMMd => "dd. MMM y. G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd.MM.",
      MMM => "LLL",
      MMMEd => "E, dd. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "dd. MMM",
      MMdd => "dd. MM.",
      Md => "dd.MM.",
      d => "d",
      h => "h a",
      hm => "hh:mm a",
      hms => "hh:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y.",
      yM => "MM.y.",
      yMEd => "E, dd.MM.y.",
      yMM => "MM. y.",
      yMMM => "MMM y.",
      yMMMEd => "E, dd. MMM y.",
      yMMMM => "LLLL y.",
      yMMMd => "dd. MMM y.",
      yMd => "dd.MM.y.",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "bs-Latn-BA",
    date_format_full => "EEEE, dd. MMMM y.",
    date_format_long => "dd. MMMM y.",
    date_format_medium => "dd. MMM. y.",
    date_format_short => "dd.MM.yy.",
    datetime_format_full => "{1} 'u' {0}",
    datetime_format_long => "{1} 'u' {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "pon",
      "uto",
      "sri",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_format_narrow => [
      "P",
      "U",
      "S",
      "\N{U+010c}",
      "P",
      "S",
      "N"
    ],
    day_format_wide => [
      "ponedjeljak",
      "utorak",
      "srijeda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedjelja"
    ],
    day_stand_alone_abbreviated => [
      "pon",
      "uto",
      "sri",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_stand_alone_narrow => [
      "p",
      "u",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "ponedjeljak",
      "utorak",
      "srijeda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedjelja"
    ],
    era_abbreviated => [
      "p. n. e.",
      "n. e."
    ],
    era_narrow => [
      "p. n. e.",
      "n. e."
    ],
    era_wide => [
      "Prije nove ere",
      "Nove ere"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Bosnian",
    month_format_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_format_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "mart",
      "april",
      "maj",
      "juni",
      "juli",
      "august",
      "septembar",
      "oktobar",
      "novembar",
      "decembar"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "mart",
      "april",
      "maj",
      "juni",
      "juli",
      "august",
      "septembar",
      "oktobar",
      "novembar",
      "decembar"
    ],
    name => "Bosnian Bosnia & Herzegovina Latin",
    native_language => "bosanski",
    native_name => "bosanski Bosna i Hercegovina latinica",
    native_script => "latinica",
    native_territory => "Bosna i Hercegovina",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "Prvi kvartal",
      "Drugi kvartal",
      "Tre\N{U+0107}i kvartal",
      "\N{U+010c}etvrti kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "Prvi kvartal",
      "Drugi kvartal",
      "Tre\N{U+0107}i kvartal",
      "\N{U+010c}etvrti kvartal"
    ],
    script => "Latin",
    territory => "Bosnia & Herzegovina",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ca ]__
  {
    am_pm_abbreviated => [
      "a. m.",
      "p. m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H:mm",
      EHms => "E H:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "LLLL 'de' y G",
      GyMMMMEd => "E, d MMMM 'de' y G",
      GyMMMMd => "d MMMM 'de' y G",
      GyMMMd => "d MMM y G",
      H => "H",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "LLL 'de' y",
      yMMMEd => "E, d MMM y",
      yMMMM => "LLLL 'de' y",
      yMMMMEd => "E, d MMMM 'de' y",
      yMMMMd => "d MMMM 'de' y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ca",
    date_format_full => "EEEE, d MMMM 'de' y",
    date_format_long => "d MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} 'a' 'les' {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "dl.",
      "dt.",
      "dc.",
      "dj.",
      "dv.",
      "ds.",
      "dg."
    ],
    day_format_narrow => [
      "dl",
      "dt",
      "dc",
      "dj",
      "dv",
      "ds",
      "dg"
    ],
    day_format_wide => [
      "dilluns",
      "dimarts",
      "dimecres",
      "dijous",
      "divendres",
      "dissabte",
      "diumenge"
    ],
    day_stand_alone_abbreviated => [
      "dl.",
      "dt.",
      "dc.",
      "dj.",
      "dv.",
      "ds.",
      "dg."
    ],
    day_stand_alone_narrow => [
      "dl",
      "dt",
      "dc",
      "dj",
      "dv",
      "ds",
      "dg"
    ],
    day_stand_alone_wide => [
      "dilluns",
      "dimarts",
      "dimecres",
      "dijous",
      "divendres",
      "dissabte",
      "diumenge"
    ],
    era_abbreviated => [
      "aC",
      "dC"
    ],
    era_narrow => [
      "aC",
      "dC"
    ],
    era_wide => [
      "abans de Crist",
      "despr\N{U+00e9}s de Crist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Catalan",
    month_format_abbreviated => [
      "gen.",
      "febr.",
      "mar\N{U+00e7}",
      "abr.",
      "maig",
      "juny",
      "jul.",
      "ag.",
      "set.",
      "oct.",
      "nov.",
      "des."
    ],
    month_format_narrow => [
      "GN",
      "FB",
      "M\N{U+00c7}",
      "AB",
      "MG",
      "JN",
      "JL",
      "AG",
      "ST",
      "OC",
      "NV",
      "DS"
    ],
    month_format_wide => [
      "de gener",
      "de febrer",
      "de mar\N{U+00e7}",
      "d\N{U+2019}abril",
      "de maig",
      "de juny",
      "de juliol",
      "d\N{U+2019}agost",
      "de setembre",
      "d\N{U+2019}octubre",
      "de novembre",
      "de desembre"
    ],
    month_stand_alone_abbreviated => [
      "gen.",
      "febr.",
      "mar\N{U+00e7}",
      "abr.",
      "maig",
      "juny",
      "jul.",
      "ag.",
      "set.",
      "oct.",
      "nov.",
      "des."
    ],
    month_stand_alone_narrow => [
      "GN",
      "FB",
      "M\N{U+00c7}",
      "AB",
      "MG",
      "JN",
      "JL",
      "AG",
      "ST",
      "OC",
      "NV",
      "DS"
    ],
    month_stand_alone_wide => [
      "gener",
      "febrer",
      "mar\N{U+00e7}",
      "abril",
      "maig",
      "juny",
      "juliol",
      "agost",
      "setembre",
      "octubre",
      "novembre",
      "desembre"
    ],
    name => "Catalan",
    native_language => "catal\N{U+00e0}",
    native_name => "catal\N{U+00e0}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1r trimestre",
      "2n trimestre",
      "3r trimestre",
      "4t trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1r trimestre",
      "2n trimestre",
      "3r trimestre",
      "4t trimestre"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ ca-AD ]__
  {
    am_pm_abbreviated => [
      "a. m.",
      "p. m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H:mm",
      EHms => "E H:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "LLLL 'de' y G",
      GyMMMMEd => "E, d MMMM 'de' y G",
      GyMMMMd => "d MMMM 'de' y G",
      GyMMMd => "d MMM y G",
      H => "H",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "LLL 'de' y",
      yMMMEd => "E, d MMM y",
      yMMMM => "LLLL 'de' y",
      yMMMMEd => "E, d MMMM 'de' y",
      yMMMMd => "d MMMM 'de' y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ca-AD",
    date_format_full => "EEEE, d MMMM 'de' y",
    date_format_long => "d MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} 'a' 'les' {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "dl.",
      "dt.",
      "dc.",
      "dj.",
      "dv.",
      "ds.",
      "dg."
    ],
    day_format_narrow => [
      "dl",
      "dt",
      "dc",
      "dj",
      "dv",
      "ds",
      "dg"
    ],
    day_format_wide => [
      "dilluns",
      "dimarts",
      "dimecres",
      "dijous",
      "divendres",
      "dissabte",
      "diumenge"
    ],
    day_stand_alone_abbreviated => [
      "dl.",
      "dt.",
      "dc.",
      "dj.",
      "dv.",
      "ds.",
      "dg."
    ],
    day_stand_alone_narrow => [
      "dl",
      "dt",
      "dc",
      "dj",
      "dv",
      "ds",
      "dg"
    ],
    day_stand_alone_wide => [
      "dilluns",
      "dimarts",
      "dimecres",
      "dijous",
      "divendres",
      "dissabte",
      "diumenge"
    ],
    era_abbreviated => [
      "aC",
      "dC"
    ],
    era_narrow => [
      "aC",
      "dC"
    ],
    era_wide => [
      "abans de Crist",
      "despr\N{U+00e9}s de Crist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Catalan",
    month_format_abbreviated => [
      "gen.",
      "febr.",
      "mar\N{U+00e7}",
      "abr.",
      "maig",
      "juny",
      "jul.",
      "ag.",
      "set.",
      "oct.",
      "nov.",
      "des."
    ],
    month_format_narrow => [
      "GN",
      "FB",
      "M\N{U+00c7}",
      "AB",
      "MG",
      "JN",
      "JL",
      "AG",
      "ST",
      "OC",
      "NV",
      "DS"
    ],
    month_format_wide => [
      "de gener",
      "de febrer",
      "de mar\N{U+00e7}",
      "d\N{U+2019}abril",
      "de maig",
      "de juny",
      "de juliol",
      "d\N{U+2019}agost",
      "de setembre",
      "d\N{U+2019}octubre",
      "de novembre",
      "de desembre"
    ],
    month_stand_alone_abbreviated => [
      "gen.",
      "febr.",
      "mar\N{U+00e7}",
      "abr.",
      "maig",
      "juny",
      "jul.",
      "ag.",
      "set.",
      "oct.",
      "nov.",
      "des."
    ],
    month_stand_alone_narrow => [
      "GN",
      "FB",
      "M\N{U+00c7}",
      "AB",
      "MG",
      "JN",
      "JL",
      "AG",
      "ST",
      "OC",
      "NV",
      "DS"
    ],
    month_stand_alone_wide => [
      "gener",
      "febrer",
      "mar\N{U+00e7}",
      "abril",
      "maig",
      "juny",
      "juliol",
      "agost",
      "setembre",
      "octubre",
      "novembre",
      "desembre"
    ],
    name => "Catalan Andorra",
    native_language => "catal\N{U+00e0}",
    native_name => "catal\N{U+00e0} Andorra",
    native_script => undef,
    native_territory => "Andorra",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1r trimestre",
      "2n trimestre",
      "3r trimestre",
      "4t trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1r trimestre",
      "2n trimestre",
      "3r trimestre",
      "4t trimestre"
    ],
    script => undef,
    territory => "Andorra",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ ca-ES ]__
  {
    am_pm_abbreviated => [
      "a. m.",
      "p. m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H:mm",
      EHms => "E H:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "LLLL 'de' y G",
      GyMMMMEd => "E, d MMMM 'de' y G",
      GyMMMMd => "d MMMM 'de' y G",
      GyMMMd => "d MMM y G",
      H => "H",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "LLL 'de' y",
      yMMMEd => "E, d MMM y",
      yMMMM => "LLLL 'de' y",
      yMMMMEd => "E, d MMMM 'de' y",
      yMMMMd => "d MMMM 'de' y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ca-ES",
    date_format_full => "EEEE, d MMMM 'de' y",
    date_format_long => "d MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} 'a' 'les' {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "dl.",
      "dt.",
      "dc.",
      "dj.",
      "dv.",
      "ds.",
      "dg."
    ],
    day_format_narrow => [
      "dl",
      "dt",
      "dc",
      "dj",
      "dv",
      "ds",
      "dg"
    ],
    day_format_wide => [
      "dilluns",
      "dimarts",
      "dimecres",
      "dijous",
      "divendres",
      "dissabte",
      "diumenge"
    ],
    day_stand_alone_abbreviated => [
      "dl.",
      "dt.",
      "dc.",
      "dj.",
      "dv.",
      "ds.",
      "dg."
    ],
    day_stand_alone_narrow => [
      "dl",
      "dt",
      "dc",
      "dj",
      "dv",
      "ds",
      "dg"
    ],
    day_stand_alone_wide => [
      "dilluns",
      "dimarts",
      "dimecres",
      "dijous",
      "divendres",
      "dissabte",
      "diumenge"
    ],
    era_abbreviated => [
      "aC",
      "dC"
    ],
    era_narrow => [
      "aC",
      "dC"
    ],
    era_wide => [
      "abans de Crist",
      "despr\N{U+00e9}s de Crist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Catalan",
    month_format_abbreviated => [
      "gen.",
      "febr.",
      "mar\N{U+00e7}",
      "abr.",
      "maig",
      "juny",
      "jul.",
      "ag.",
      "set.",
      "oct.",
      "nov.",
      "des."
    ],
    month_format_narrow => [
      "GN",
      "FB",
      "M\N{U+00c7}",
      "AB",
      "MG",
      "JN",
      "JL",
      "AG",
      "ST",
      "OC",
      "NV",
      "DS"
    ],
    month_format_wide => [
      "de gener",
      "de febrer",
      "de mar\N{U+00e7}",
      "d\N{U+2019}abril",
      "de maig",
      "de juny",
      "de juliol",
      "d\N{U+2019}agost",
      "de setembre",
      "d\N{U+2019}octubre",
      "de novembre",
      "de desembre"
    ],
    month_stand_alone_abbreviated => [
      "gen.",
      "febr.",
      "mar\N{U+00e7}",
      "abr.",
      "maig",
      "juny",
      "jul.",
      "ag.",
      "set.",
      "oct.",
      "nov.",
      "des."
    ],
    month_stand_alone_narrow => [
      "GN",
      "FB",
      "M\N{U+00c7}",
      "AB",
      "MG",
      "JN",
      "JL",
      "AG",
      "ST",
      "OC",
      "NV",
      "DS"
    ],
    month_stand_alone_wide => [
      "gener",
      "febrer",
      "mar\N{U+00e7}",
      "abril",
      "maig",
      "juny",
      "juliol",
      "agost",
      "setembre",
      "octubre",
      "novembre",
      "desembre"
    ],
    name => "Catalan Spain",
    native_language => "catal\N{U+00e0}",
    native_name => "catal\N{U+00e0} Espanya",
    native_script => undef,
    native_territory => "Espanya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1r trimestre",
      "2n trimestre",
      "3r trimestre",
      "4t trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1r trimestre",
      "2n trimestre",
      "3r trimestre",
      "4t trimestre"
    ],
    script => undef,
    territory => "Spain",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ ca-ES-VALENCIA ]__
  {
    am_pm_abbreviated => [
      "a. m.",
      "p. m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H:mm",
      EHms => "E H:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "LLLL 'de' y G",
      GyMMMMEd => "E, d MMMM 'de' y G",
      GyMMMMd => "d MMMM 'de' y G",
      GyMMMd => "d MMM y G",
      H => "H",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "LLL 'de' y",
      yMMMEd => "E, d MMM y",
      yMMMM => "LLLL 'de' y",
      yMMMMEd => "E, d MMMM 'de' y",
      yMMMMd => "d MMMM 'de' y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ca-ES-VALENCIA",
    date_format_full => "EEEE, d MMMM 'de' y",
    date_format_long => "d MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} 'a' 'les' {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "dl.",
      "dt.",
      "dc.",
      "dj.",
      "dv.",
      "ds.",
      "dg."
    ],
    day_format_narrow => [
      "dl",
      "dt",
      "dc",
      "dj",
      "dv",
      "ds",
      "dg"
    ],
    day_format_wide => [
      "dilluns",
      "dimarts",
      "dimecres",
      "dijous",
      "divendres",
      "dissabte",
      "diumenge"
    ],
    day_stand_alone_abbreviated => [
      "dl.",
      "dt.",
      "dc.",
      "dj.",
      "dv.",
      "ds.",
      "dg."
    ],
    day_stand_alone_narrow => [
      "dl",
      "dt",
      "dc",
      "dj",
      "dv",
      "ds",
      "dg"
    ],
    day_stand_alone_wide => [
      "dilluns",
      "dimarts",
      "dimecres",
      "dijous",
      "divendres",
      "dissabte",
      "diumenge"
    ],
    era_abbreviated => [
      "aC",
      "dC"
    ],
    era_narrow => [
      "aC",
      "dC"
    ],
    era_wide => [
      "abans de Crist",
      "despr\N{U+00e9}s de Crist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Catalan",
    month_format_abbreviated => [
      "gen.",
      "febr.",
      "mar\N{U+00e7}",
      "abr.",
      "maig",
      "juny",
      "jul.",
      "ag.",
      "set.",
      "oct.",
      "nov.",
      "des."
    ],
    month_format_narrow => [
      "GN",
      "FB",
      "M\N{U+00c7}",
      "AB",
      "MG",
      "JN",
      "JL",
      "AG",
      "ST",
      "OC",
      "NV",
      "DS"
    ],
    month_format_wide => [
      "de gener",
      "de febrer",
      "de mar\N{U+00e7}",
      "d\N{U+2019}abril",
      "de maig",
      "de juny",
      "de juliol",
      "d\N{U+2019}agost",
      "de setembre",
      "d\N{U+2019}octubre",
      "de novembre",
      "de desembre"
    ],
    month_stand_alone_abbreviated => [
      "gen.",
      "febr.",
      "mar\N{U+00e7}",
      "abr.",
      "maig",
      "juny",
      "jul.",
      "ag.",
      "set.",
      "oct.",
      "nov.",
      "des."
    ],
    month_stand_alone_narrow => [
      "GN",
      "FB",
      "M\N{U+00c7}",
      "AB",
      "MG",
      "JN",
      "JL",
      "AG",
      "ST",
      "OC",
      "NV",
      "DS"
    ],
    month_stand_alone_wide => [
      "gener",
      "febrer",
      "mar\N{U+00e7}",
      "abril",
      "maig",
      "juny",
      "juliol",
      "agost",
      "setembre",
      "octubre",
      "novembre",
      "desembre"
    ],
    name => "Catalan Spain Valencian",
    native_language => "catal\N{U+00e0}",
    native_name => "catal\N{U+00e0} Espanya valenci\N{U+00e0}",
    native_script => undef,
    native_territory => "Espanya",
    native_variant => "valenci\N{U+00e0}",
    quarter_format_abbreviated => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1r trimestre",
      "2n trimestre",
      "3r trimestre",
      "4t trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1r trimestre",
      "2n trimestre",
      "3r trimestre",
      "4t trimestre"
    ],
    script => undef,
    territory => "Spain",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => "Valencian",
    version => 29
  }
  __[ ca-FR ]__
  {
    am_pm_abbreviated => [
      "a. m.",
      "p. m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H:mm",
      EHms => "E H:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "LLLL 'de' y G",
      GyMMMMEd => "E, d MMMM 'de' y G",
      GyMMMMd => "d MMMM 'de' y G",
      GyMMMd => "d MMM y G",
      H => "H",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "LLL 'de' y",
      yMMMEd => "E, d MMM y",
      yMMMM => "LLLL 'de' y",
      yMMMMEd => "E, d MMMM 'de' y",
      yMMMMd => "d MMMM 'de' y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ca-FR",
    date_format_full => "EEEE, d MMMM 'de' y",
    date_format_long => "d MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} 'a' 'les' {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "dl.",
      "dt.",
      "dc.",
      "dj.",
      "dv.",
      "ds.",
      "dg."
    ],
    day_format_narrow => [
      "dl",
      "dt",
      "dc",
      "dj",
      "dv",
      "ds",
      "dg"
    ],
    day_format_wide => [
      "dilluns",
      "dimarts",
      "dimecres",
      "dijous",
      "divendres",
      "dissabte",
      "diumenge"
    ],
    day_stand_alone_abbreviated => [
      "dl.",
      "dt.",
      "dc.",
      "dj.",
      "dv.",
      "ds.",
      "dg."
    ],
    day_stand_alone_narrow => [
      "dl",
      "dt",
      "dc",
      "dj",
      "dv",
      "ds",
      "dg"
    ],
    day_stand_alone_wide => [
      "dilluns",
      "dimarts",
      "dimecres",
      "dijous",
      "divendres",
      "dissabte",
      "diumenge"
    ],
    era_abbreviated => [
      "aC",
      "dC"
    ],
    era_narrow => [
      "aC",
      "dC"
    ],
    era_wide => [
      "abans de Crist",
      "despr\N{U+00e9}s de Crist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Catalan",
    month_format_abbreviated => [
      "gen.",
      "febr.",
      "mar\N{U+00e7}",
      "abr.",
      "maig",
      "juny",
      "jul.",
      "ag.",
      "set.",
      "oct.",
      "nov.",
      "des."
    ],
    month_format_narrow => [
      "GN",
      "FB",
      "M\N{U+00c7}",
      "AB",
      "MG",
      "JN",
      "JL",
      "AG",
      "ST",
      "OC",
      "NV",
      "DS"
    ],
    month_format_wide => [
      "de gener",
      "de febrer",
      "de mar\N{U+00e7}",
      "d\N{U+2019}abril",
      "de maig",
      "de juny",
      "de juliol",
      "d\N{U+2019}agost",
      "de setembre",
      "d\N{U+2019}octubre",
      "de novembre",
      "de desembre"
    ],
    month_stand_alone_abbreviated => [
      "gen.",
      "febr.",
      "mar\N{U+00e7}",
      "abr.",
      "maig",
      "juny",
      "jul.",
      "ag.",
      "set.",
      "oct.",
      "nov.",
      "des."
    ],
    month_stand_alone_narrow => [
      "GN",
      "FB",
      "M\N{U+00c7}",
      "AB",
      "MG",
      "JN",
      "JL",
      "AG",
      "ST",
      "OC",
      "NV",
      "DS"
    ],
    month_stand_alone_wide => [
      "gener",
      "febrer",
      "mar\N{U+00e7}",
      "abril",
      "maig",
      "juny",
      "juliol",
      "agost",
      "setembre",
      "octubre",
      "novembre",
      "desembre"
    ],
    name => "Catalan France",
    native_language => "catal\N{U+00e0}",
    native_name => "catal\N{U+00e0} Fran\N{U+00e7}a",
    native_script => undef,
    native_territory => "Fran\N{U+00e7}a",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1r trimestre",
      "2n trimestre",
      "3r trimestre",
      "4t trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1r trimestre",
      "2n trimestre",
      "3r trimestre",
      "4t trimestre"
    ],
    script => undef,
    territory => "France",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ ca-IT ]__
  {
    am_pm_abbreviated => [
      "a. m.",
      "p. m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H:mm",
      EHms => "E H:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "LLLL 'de' y G",
      GyMMMMEd => "E, d MMMM 'de' y G",
      GyMMMMd => "d MMMM 'de' y G",
      GyMMMd => "d MMM y G",
      H => "H",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "LLL 'de' y",
      yMMMEd => "E, d MMM y",
      yMMMM => "LLLL 'de' y",
      yMMMMEd => "E, d MMMM 'de' y",
      yMMMMd => "d MMMM 'de' y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ca-IT",
    date_format_full => "EEEE, d MMMM 'de' y",
    date_format_long => "d MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} 'a' 'les' {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "dl.",
      "dt.",
      "dc.",
      "dj.",
      "dv.",
      "ds.",
      "dg."
    ],
    day_format_narrow => [
      "dl",
      "dt",
      "dc",
      "dj",
      "dv",
      "ds",
      "dg"
    ],
    day_format_wide => [
      "dilluns",
      "dimarts",
      "dimecres",
      "dijous",
      "divendres",
      "dissabte",
      "diumenge"
    ],
    day_stand_alone_abbreviated => [
      "dl.",
      "dt.",
      "dc.",
      "dj.",
      "dv.",
      "ds.",
      "dg."
    ],
    day_stand_alone_narrow => [
      "dl",
      "dt",
      "dc",
      "dj",
      "dv",
      "ds",
      "dg"
    ],
    day_stand_alone_wide => [
      "dilluns",
      "dimarts",
      "dimecres",
      "dijous",
      "divendres",
      "dissabte",
      "diumenge"
    ],
    era_abbreviated => [
      "aC",
      "dC"
    ],
    era_narrow => [
      "aC",
      "dC"
    ],
    era_wide => [
      "abans de Crist",
      "despr\N{U+00e9}s de Crist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Catalan",
    month_format_abbreviated => [
      "gen.",
      "febr.",
      "mar\N{U+00e7}",
      "abr.",
      "maig",
      "juny",
      "jul.",
      "ag.",
      "set.",
      "oct.",
      "nov.",
      "des."
    ],
    month_format_narrow => [
      "GN",
      "FB",
      "M\N{U+00c7}",
      "AB",
      "MG",
      "JN",
      "JL",
      "AG",
      "ST",
      "OC",
      "NV",
      "DS"
    ],
    month_format_wide => [
      "de gener",
      "de febrer",
      "de mar\N{U+00e7}",
      "d\N{U+2019}abril",
      "de maig",
      "de juny",
      "de juliol",
      "d\N{U+2019}agost",
      "de setembre",
      "d\N{U+2019}octubre",
      "de novembre",
      "de desembre"
    ],
    month_stand_alone_abbreviated => [
      "gen.",
      "febr.",
      "mar\N{U+00e7}",
      "abr.",
      "maig",
      "juny",
      "jul.",
      "ag.",
      "set.",
      "oct.",
      "nov.",
      "des."
    ],
    month_stand_alone_narrow => [
      "GN",
      "FB",
      "M\N{U+00c7}",
      "AB",
      "MG",
      "JN",
      "JL",
      "AG",
      "ST",
      "OC",
      "NV",
      "DS"
    ],
    month_stand_alone_wide => [
      "gener",
      "febrer",
      "mar\N{U+00e7}",
      "abril",
      "maig",
      "juny",
      "juliol",
      "agost",
      "setembre",
      "octubre",
      "novembre",
      "desembre"
    ],
    name => "Catalan Italy",
    native_language => "catal\N{U+00e0}",
    native_name => "catal\N{U+00e0} It\N{U+00e0}lia",
    native_script => undef,
    native_territory => "It\N{U+00e0}lia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1r trimestre",
      "2n trimestre",
      "3r trimestre",
      "4t trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1r trimestre",
      "2n trimestre",
      "3r trimestre",
      "4t trimestre"
    ],
    script => undef,
    territory => "Italy",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ ce ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "ce",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+043e}\N{U+0440}\N{U+0448}\N{U+043e}\N{U+0442}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0448}\N{U+0438}\N{U+043d}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+043a}\N{U+0445}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0435}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+043f}\N{U+04c0}\N{U+0435}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+043a}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0448}\N{U+043e}\N{U+0442} \N{U+0434}\N{U+0435}",
      "\N{U+043a}\N{U+04c0}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043d}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+043e}\N{U+0440}\N{U+0448}\N{U+043e}\N{U+0442}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0448}\N{U+0438}\N{U+043d}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+043a}\N{U+0445}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0435}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+043f}\N{U+04c0}\N{U+0435}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+043a}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0448}\N{U+043e}\N{U+0442} \N{U+0434}\N{U+0435}",
      "\N{U+043a}\N{U+04c0}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043d}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043e}\N{U+0440}\N{U+0448}\N{U+043e}\N{U+0442}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0448}\N{U+0438}\N{U+043d}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+043a}\N{U+0445}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0435}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+043f}\N{U+04c0}\N{U+0435}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+043a}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0448}\N{U+043e}\N{U+0442} \N{U+0434}\N{U+0435}",
      "\N{U+043a}\N{U+04c0}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043d}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+043e}\N{U+0440}\N{U+0448}\N{U+043e}\N{U+0442}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0448}\N{U+0438}\N{U+043d}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+043a}\N{U+0445}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0435}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+043f}\N{U+04c0}\N{U+0435}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+043a}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0448}\N{U+043e}\N{U+0442} \N{U+0434}\N{U+0435}",
      "\N{U+043a}\N{U+04c0}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043d}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Chechen",
    month_format_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}",
      "\N{U+0444}\N{U+0435}\N{U+0432}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}",
      "\N{U+0438}\N{U+044e}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043d}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+044f}",
      "\N{U+0434}\N{U+0435}\N{U+043a}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}",
      "\N{U+0444}\N{U+0435}\N{U+0432}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}",
      "\N{U+0438}\N{U+044e}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043d}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+044f}",
      "\N{U+0434}\N{U+0435}\N{U+043a}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    name => "Chechen",
    native_language => "\N{U+043d}\N{U+043e}\N{U+0445}\N{U+0447}\N{U+0438}\N{U+0439}\N{U+043d}",
    native_name => "\N{U+043d}\N{U+043e}\N{U+0445}\N{U+0447}\N{U+0438}\N{U+0439}\N{U+043d}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0433}\N{U+04c0}\N{U+0430} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0433}\N{U+04c0}\N{U+0430} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0433}\N{U+04c0}\N{U+0430} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0433}\N{U+04c0}\N{U+0430} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ce-RU ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "ce-RU",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+043e}\N{U+0440}\N{U+0448}\N{U+043e}\N{U+0442}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0448}\N{U+0438}\N{U+043d}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+043a}\N{U+0445}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0435}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+043f}\N{U+04c0}\N{U+0435}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+043a}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0448}\N{U+043e}\N{U+0442} \N{U+0434}\N{U+0435}",
      "\N{U+043a}\N{U+04c0}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043d}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+043e}\N{U+0440}\N{U+0448}\N{U+043e}\N{U+0442}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0448}\N{U+0438}\N{U+043d}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+043a}\N{U+0445}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0435}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+043f}\N{U+04c0}\N{U+0435}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+043a}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0448}\N{U+043e}\N{U+0442} \N{U+0434}\N{U+0435}",
      "\N{U+043a}\N{U+04c0}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043d}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043e}\N{U+0440}\N{U+0448}\N{U+043e}\N{U+0442}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0448}\N{U+0438}\N{U+043d}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+043a}\N{U+0445}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0435}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+043f}\N{U+04c0}\N{U+0435}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+043a}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0448}\N{U+043e}\N{U+0442} \N{U+0434}\N{U+0435}",
      "\N{U+043a}\N{U+04c0}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043d}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+043e}\N{U+0440}\N{U+0448}\N{U+043e}\N{U+0442}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0448}\N{U+0438}\N{U+043d}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+043a}\N{U+0445}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0435}\N{U+0430}\N{U+0440}\N{U+0438}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+043f}\N{U+04c0}\N{U+0435}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+043a}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}",
      "\N{U+0448}\N{U+043e}\N{U+0442} \N{U+0434}\N{U+0435}",
      "\N{U+043a}\N{U+04c0}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043d}\N{U+0430}\N{U+043d} \N{U+0434}\N{U+0435}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%Y.%d.%m",
    glibc_datetime_format => "%Y %d %b %a %T",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Chechen",
    month_format_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}",
      "\N{U+0444}\N{U+0435}\N{U+0432}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}",
      "\N{U+0438}\N{U+044e}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043d}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+044f}",
      "\N{U+0434}\N{U+0435}\N{U+043a}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}",
      "\N{U+0444}\N{U+0435}\N{U+0432}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}",
      "\N{U+0438}\N{U+044e}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043d}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+044f}",
      "\N{U+0434}\N{U+0435}\N{U+043a}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    name => "Chechen Russia",
    native_language => "\N{U+043d}\N{U+043e}\N{U+0445}\N{U+0447}\N{U+0438}\N{U+0439}\N{U+043d}",
    native_name => "\N{U+043d}\N{U+043e}\N{U+0445}\N{U+0447}\N{U+0438}\N{U+0439}\N{U+043d} \N{U+0420}\N{U+043e}\N{U+0441}\N{U+0441}\N{U+0438}",
    native_script => undef,
    native_territory => "\N{U+0420}\N{U+043e}\N{U+0441}\N{U+0441}\N{U+0438}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0433}\N{U+04c0}\N{U+0430} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0433}\N{U+04c0}\N{U+0430} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0433}\N{U+04c0}\N{U+0430} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0433}\N{U+04c0}\N{U+0430} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => "Russia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ cgg ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "cgg",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ORK",
      "OKB",
      "OKS",
      "OKN",
      "OKT",
      "OMK",
      "SAN"
    ],
    day_format_narrow => [
      "K",
      "R",
      "S",
      "N",
      "T",
      "M",
      "S"
    ],
    day_format_wide => [
      "Orwokubanza",
      "Orwakabiri",
      "Orwakashatu",
      "Orwakana",
      "Orwakataano",
      "Orwamukaaga",
      "Sande"
    ],
    day_stand_alone_abbreviated => [
      "ORK",
      "OKB",
      "OKS",
      "OKN",
      "OKT",
      "OMK",
      "SAN"
    ],
    day_stand_alone_narrow => [
      "K",
      "R",
      "S",
      "N",
      "T",
      "M",
      "S"
    ],
    day_stand_alone_wide => [
      "Orwokubanza",
      "Orwakabiri",
      "Orwakashatu",
      "Orwakana",
      "Orwakataano",
      "Orwamukaaga",
      "Sande"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Kurisito Atakaijire",
      "Kurisito Yaijire"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Chiga",
    month_format_abbreviated => [
      "KBZ",
      "KBR",
      "KST",
      "KKN",
      "KTN",
      "KMK",
      "KMS",
      "KMN",
      "KMW",
      "KKM",
      "KNK",
      "KNB"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Okwokubanza",
      "Okwakabiri",
      "Okwakashatu",
      "Okwakana",
      "Okwakataana",
      "Okwamukaaga",
      "Okwamushanju",
      "Okwamunaana",
      "Okwamwenda",
      "Okwaikumi",
      "Okwaikumi na kumwe",
      "Okwaikumi na ibiri"
    ],
    month_stand_alone_abbreviated => [
      "KBZ",
      "KBR",
      "KST",
      "KKN",
      "KTN",
      "KMK",
      "KMS",
      "KMN",
      "KMW",
      "KKM",
      "KNK",
      "KNB"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Okwokubanza",
      "Okwakabiri",
      "Okwakashatu",
      "Okwakana",
      "Okwakataana",
      "Okwamukaaga",
      "Okwamushanju",
      "Okwamunaana",
      "Okwamwenda",
      "Okwaikumi",
      "Okwaikumi na kumwe",
      "Okwaikumi na ibiri"
    ],
    name => "Chiga",
    native_language => "Rukiga",
    native_name => "Rukiga",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "KWOTA 1",
      "KWOTA 2",
      "KWOTA 3",
      "KWOTA 4"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "KWOTA 1",
      "KWOTA 2",
      "KWOTA 3",
      "KWOTA 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ cgg-UG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "cgg-UG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ORK",
      "OKB",
      "OKS",
      "OKN",
      "OKT",
      "OMK",
      "SAN"
    ],
    day_format_narrow => [
      "K",
      "R",
      "S",
      "N",
      "T",
      "M",
      "S"
    ],
    day_format_wide => [
      "Orwokubanza",
      "Orwakabiri",
      "Orwakashatu",
      "Orwakana",
      "Orwakataano",
      "Orwamukaaga",
      "Sande"
    ],
    day_stand_alone_abbreviated => [
      "ORK",
      "OKB",
      "OKS",
      "OKN",
      "OKT",
      "OMK",
      "SAN"
    ],
    day_stand_alone_narrow => [
      "K",
      "R",
      "S",
      "N",
      "T",
      "M",
      "S"
    ],
    day_stand_alone_wide => [
      "Orwokubanza",
      "Orwakabiri",
      "Orwakashatu",
      "Orwakana",
      "Orwakataano",
      "Orwamukaaga",
      "Sande"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Kurisito Atakaijire",
      "Kurisito Yaijire"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Chiga",
    month_format_abbreviated => [
      "KBZ",
      "KBR",
      "KST",
      "KKN",
      "KTN",
      "KMK",
      "KMS",
      "KMN",
      "KMW",
      "KKM",
      "KNK",
      "KNB"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Okwokubanza",
      "Okwakabiri",
      "Okwakashatu",
      "Okwakana",
      "Okwakataana",
      "Okwamukaaga",
      "Okwamushanju",
      "Okwamunaana",
      "Okwamwenda",
      "Okwaikumi",
      "Okwaikumi na kumwe",
      "Okwaikumi na ibiri"
    ],
    month_stand_alone_abbreviated => [
      "KBZ",
      "KBR",
      "KST",
      "KKN",
      "KTN",
      "KMK",
      "KMS",
      "KMN",
      "KMW",
      "KKM",
      "KNK",
      "KNB"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Okwokubanza",
      "Okwakabiri",
      "Okwakashatu",
      "Okwakana",
      "Okwakataana",
      "Okwamukaaga",
      "Okwamushanju",
      "Okwamunaana",
      "Okwamwenda",
      "Okwaikumi",
      "Okwaikumi na kumwe",
      "Okwaikumi na ibiri"
    ],
    name => "Chiga Uganda",
    native_language => "Rukiga",
    native_name => "Rukiga Uganda",
    native_script => undef,
    native_territory => "Uganda",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "KWOTA 1",
      "KWOTA 2",
      "KWOTA 3",
      "KWOTA 4"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "KWOTA 1",
      "KWOTA 2",
      "KWOTA 3",
      "KWOTA 4"
    ],
    script => undef,
    territory => "Uganda",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ chr ]__
  {
    am_pm_abbreviated => [
      "\N{U+13cc}\N{U+13be}\N{U+13b4}",
      "\N{U+13d2}\N{U+13af}\N{U+13f1}\N{U+13a2}\N{U+13d7}\N{U+13e2}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "MMM d, y G",
      H => "HH",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d, y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "chr",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+13c9}\N{U+13c5}\N{U+13af}",
      "\N{U+13d4}\N{U+13b5}\N{U+13c1}",
      "\N{U+13e6}\N{U+13a2}\N{U+13c1}",
      "\N{U+13c5}\N{U+13a9}\N{U+13c1}",
      "\N{U+13e7}\N{U+13be}\N{U+13a9}",
      "\N{U+13c8}\N{U+13d5}\N{U+13be}",
      "\N{U+13c6}\N{U+13cd}\N{U+13ac}"
    ],
    day_format_narrow => [
      "\N{U+13c9}",
      "\N{U+13d4}",
      "\N{U+13e6}",
      "\N{U+13c5}",
      "\N{U+13e7}",
      "\N{U+13a4}",
      "\N{U+13c6}"
    ],
    day_format_wide => [
      "\N{U+13a4}\N{U+13be}\N{U+13d9}\N{U+13d3}\N{U+13c9}\N{U+13c5}\N{U+13af}",
      "\N{U+13d4}\N{U+13b5}\N{U+13c1}\N{U+13a2}\N{U+13a6}",
      "\N{U+13e6}\N{U+13a2}\N{U+13c1}\N{U+13a2}\N{U+13a6}",
      "\N{U+13c5}\N{U+13a9}\N{U+13c1}\N{U+13a2}\N{U+13a6}",
      "\N{U+13e7}\N{U+13be}\N{U+13a9}\N{U+13b6}\N{U+13cd}\N{U+13d7}",
      "\N{U+13a4}\N{U+13be}\N{U+13d9}\N{U+13d3}\N{U+13c8}\N{U+13d5}\N{U+13be}",
      "\N{U+13a4}\N{U+13be}\N{U+13d9}\N{U+13d3}\N{U+13c6}\N{U+13cd}\N{U+13ac}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+13c9}\N{U+13c5}\N{U+13af}",
      "\N{U+13d4}\N{U+13b5}\N{U+13c1}",
      "\N{U+13e6}\N{U+13a2}\N{U+13c1}",
      "\N{U+13c5}\N{U+13a9}\N{U+13c1}",
      "\N{U+13e7}\N{U+13be}\N{U+13a9}",
      "\N{U+13c8}\N{U+13d5}\N{U+13be}",
      "\N{U+13c6}\N{U+13cd}\N{U+13ac}"
    ],
    day_stand_alone_narrow => [
      "\N{U+13c9}",
      "\N{U+13d4}",
      "\N{U+13e6}",
      "\N{U+13c5}",
      "\N{U+13e7}",
      "\N{U+13a4}",
      "\N{U+13c6}"
    ],
    day_stand_alone_wide => [
      "\N{U+13a4}\N{U+13be}\N{U+13d9}\N{U+13d3}\N{U+13c9}\N{U+13c5}\N{U+13af}",
      "\N{U+13d4}\N{U+13b5}\N{U+13c1}\N{U+13a2}\N{U+13a6}",
      "\N{U+13e6}\N{U+13a2}\N{U+13c1}\N{U+13a2}\N{U+13a6}",
      "\N{U+13c5}\N{U+13a9}\N{U+13c1}\N{U+13a2}\N{U+13a6}",
      "\N{U+13e7}\N{U+13be}\N{U+13a9}\N{U+13b6}\N{U+13cd}\N{U+13d7}",
      "\N{U+13a4}\N{U+13be}\N{U+13d9}\N{U+13d3}\N{U+13c8}\N{U+13d5}\N{U+13be}",
      "\N{U+13a4}\N{U+13be}\N{U+13d9}\N{U+13d3}\N{U+13c6}\N{U+13cd}\N{U+13ac}"
    ],
    era_abbreviated => [
      "\N{U+13a4}\N{U+13d3}\N{U+13b7}\N{U+13b8}",
      "\N{U+13a4}\N{U+13b6}\N{U+13d0}\N{U+13c5}"
    ],
    era_narrow => [
      "\N{U+13a4}\N{U+13d3}\N{U+13b7}\N{U+13b8}",
      "\N{U+13a4}\N{U+13b6}\N{U+13d0}\N{U+13c5}"
    ],
    era_wide => [
      "\N{U+13cf} \N{U+13e5}\N{U+13cc} \N{U+13be}\N{U+13d5}\N{U+13b2}\N{U+13cd}\N{U+13ac}\N{U+13be}",
      "\N{U+13a0}\N{U+13a9}\N{U+13c3}\N{U+13ae}\N{U+13b5}\N{U+13d3}\N{U+13cd}\N{U+13d7}\N{U+13f1} \N{U+13a0}\N{U+13d5}\N{U+13d8}\N{U+13f1}\N{U+13cd}\N{U+13ac} \N{U+13f1}\N{U+13b0}\N{U+13e9} \N{U+13e7}\N{U+13d3}\N{U+13c2}\N{U+13b8}\N{U+13a2}\N{U+13cd}\N{U+13d7}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Cherokee",
    month_format_abbreviated => [
      "\N{U+13a4}\N{U+13c3}",
      "\N{U+13a7}\N{U+13a6}",
      "\N{U+13a0}\N{U+13c5}",
      "\N{U+13a7}\N{U+13ec}",
      "\N{U+13a0}\N{U+13c2}",
      "\N{U+13d5}\N{U+13ad}",
      "\N{U+13ab}\N{U+13f0}",
      "\N{U+13a6}\N{U+13b6}",
      "\N{U+13da}\N{U+13b5}",
      "\N{U+13da}\N{U+13c2}",
      "\N{U+13c5}\N{U+13d3}",
      "\N{U+13a5}\N{U+13cd}"
    ],
    month_format_narrow => [
      "\N{U+13a4}",
      "\N{U+13a7}",
      "\N{U+13a0}",
      "\N{U+13a7}",
      "\N{U+13a0}",
      "\N{U+13d5}",
      "\N{U+13ab}",
      "\N{U+13a6}",
      "\N{U+13da}",
      "\N{U+13da}",
      "\N{U+13c5}",
      "\N{U+13a5}"
    ],
    month_format_wide => [
      "\N{U+13a4}\N{U+13c3}\N{U+13b8}\N{U+13d4}\N{U+13c5}",
      "\N{U+13a7}\N{U+13a6}\N{U+13b5}",
      "\N{U+13a0}\N{U+13c5}\N{U+13f1}",
      "\N{U+13a7}\N{U+13ec}\N{U+13c2}",
      "\N{U+13a0}\N{U+13c2}\N{U+13cd}\N{U+13ac}\N{U+13d8}",
      "\N{U+13d5}\N{U+13ad}\N{U+13b7}\N{U+13f1}",
      "\N{U+13ab}\N{U+13f0}\N{U+13c9}\N{U+13c2}",
      "\N{U+13a6}\N{U+13b6}\N{U+13c2}",
      "\N{U+13da}\N{U+13b5}\N{U+13cd}\N{U+13d7}",
      "\N{U+13da}\N{U+13c2}\N{U+13c5}\N{U+13d7}",
      "\N{U+13c5}\N{U+13d3}\N{U+13d5}\N{U+13c6}",
      "\N{U+13a5}\N{U+13cd}\N{U+13a9}\N{U+13f1}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+13a4}\N{U+13c3}",
      "\N{U+13a7}\N{U+13a6}",
      "\N{U+13a0}\N{U+13c5}",
      "\N{U+13a7}\N{U+13ec}",
      "\N{U+13a0}\N{U+13c2}",
      "\N{U+13d5}\N{U+13ad}",
      "\N{U+13ab}\N{U+13f0}",
      "\N{U+13a6}\N{U+13b6}",
      "\N{U+13da}\N{U+13b5}",
      "\N{U+13da}\N{U+13c2}",
      "\N{U+13c5}\N{U+13d3}",
      "\N{U+13a5}\N{U+13cd}"
    ],
    month_stand_alone_narrow => [
      "\N{U+13a4}",
      "\N{U+13a7}",
      "\N{U+13a0}",
      "\N{U+13a7}",
      "\N{U+13a0}",
      "\N{U+13d5}",
      "\N{U+13ab}",
      "\N{U+13a6}",
      "\N{U+13da}",
      "\N{U+13da}",
      "\N{U+13c5}",
      "\N{U+13a5}"
    ],
    month_stand_alone_wide => [
      "\N{U+13a4}\N{U+13c3}\N{U+13b8}\N{U+13d4}\N{U+13c5}",
      "\N{U+13a7}\N{U+13a6}\N{U+13b5}",
      "\N{U+13a0}\N{U+13c5}\N{U+13f1}",
      "\N{U+13a7}\N{U+13ec}\N{U+13c2}",
      "\N{U+13a0}\N{U+13c2}\N{U+13cd}\N{U+13ac}\N{U+13d8}",
      "\N{U+13d5}\N{U+13ad}\N{U+13b7}\N{U+13f1}",
      "\N{U+13ab}\N{U+13f0}\N{U+13c9}\N{U+13c2}",
      "\N{U+13a6}\N{U+13b6}\N{U+13c2}",
      "\N{U+13da}\N{U+13b5}\N{U+13cd}\N{U+13d7}",
      "\N{U+13da}\N{U+13c2}\N{U+13c5}\N{U+13d7}",
      "\N{U+13c5}\N{U+13d3}\N{U+13d5}\N{U+13c6}",
      "\N{U+13a5}\N{U+13cd}\N{U+13a9}\N{U+13f1}"
    ],
    name => "Cherokee",
    native_language => "\N{U+13e3}\N{U+13b3}\N{U+13a9}",
    native_name => "\N{U+13e3}\N{U+13b3}\N{U+13a9}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ chr-US ]__
  {
    am_pm_abbreviated => [
      "\N{U+13cc}\N{U+13be}\N{U+13b4}",
      "\N{U+13d2}\N{U+13af}\N{U+13f1}\N{U+13a2}\N{U+13d7}\N{U+13e2}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "MMM d, y G",
      H => "HH",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d, y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "chr-US",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+13c9}\N{U+13c5}\N{U+13af}",
      "\N{U+13d4}\N{U+13b5}\N{U+13c1}",
      "\N{U+13e6}\N{U+13a2}\N{U+13c1}",
      "\N{U+13c5}\N{U+13a9}\N{U+13c1}",
      "\N{U+13e7}\N{U+13be}\N{U+13a9}",
      "\N{U+13c8}\N{U+13d5}\N{U+13be}",
      "\N{U+13c6}\N{U+13cd}\N{U+13ac}"
    ],
    day_format_narrow => [
      "\N{U+13c9}",
      "\N{U+13d4}",
      "\N{U+13e6}",
      "\N{U+13c5}",
      "\N{U+13e7}",
      "\N{U+13a4}",
      "\N{U+13c6}"
    ],
    day_format_wide => [
      "\N{U+13a4}\N{U+13be}\N{U+13d9}\N{U+13d3}\N{U+13c9}\N{U+13c5}\N{U+13af}",
      "\N{U+13d4}\N{U+13b5}\N{U+13c1}\N{U+13a2}\N{U+13a6}",
      "\N{U+13e6}\N{U+13a2}\N{U+13c1}\N{U+13a2}\N{U+13a6}",
      "\N{U+13c5}\N{U+13a9}\N{U+13c1}\N{U+13a2}\N{U+13a6}",
      "\N{U+13e7}\N{U+13be}\N{U+13a9}\N{U+13b6}\N{U+13cd}\N{U+13d7}",
      "\N{U+13a4}\N{U+13be}\N{U+13d9}\N{U+13d3}\N{U+13c8}\N{U+13d5}\N{U+13be}",
      "\N{U+13a4}\N{U+13be}\N{U+13d9}\N{U+13d3}\N{U+13c6}\N{U+13cd}\N{U+13ac}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+13c9}\N{U+13c5}\N{U+13af}",
      "\N{U+13d4}\N{U+13b5}\N{U+13c1}",
      "\N{U+13e6}\N{U+13a2}\N{U+13c1}",
      "\N{U+13c5}\N{U+13a9}\N{U+13c1}",
      "\N{U+13e7}\N{U+13be}\N{U+13a9}",
      "\N{U+13c8}\N{U+13d5}\N{U+13be}",
      "\N{U+13c6}\N{U+13cd}\N{U+13ac}"
    ],
    day_stand_alone_narrow => [
      "\N{U+13c9}",
      "\N{U+13d4}",
      "\N{U+13e6}",
      "\N{U+13c5}",
      "\N{U+13e7}",
      "\N{U+13a4}",
      "\N{U+13c6}"
    ],
    day_stand_alone_wide => [
      "\N{U+13a4}\N{U+13be}\N{U+13d9}\N{U+13d3}\N{U+13c9}\N{U+13c5}\N{U+13af}",
      "\N{U+13d4}\N{U+13b5}\N{U+13c1}\N{U+13a2}\N{U+13a6}",
      "\N{U+13e6}\N{U+13a2}\N{U+13c1}\N{U+13a2}\N{U+13a6}",
      "\N{U+13c5}\N{U+13a9}\N{U+13c1}\N{U+13a2}\N{U+13a6}",
      "\N{U+13e7}\N{U+13be}\N{U+13a9}\N{U+13b6}\N{U+13cd}\N{U+13d7}",
      "\N{U+13a4}\N{U+13be}\N{U+13d9}\N{U+13d3}\N{U+13c8}\N{U+13d5}\N{U+13be}",
      "\N{U+13a4}\N{U+13be}\N{U+13d9}\N{U+13d3}\N{U+13c6}\N{U+13cd}\N{U+13ac}"
    ],
    era_abbreviated => [
      "\N{U+13a4}\N{U+13d3}\N{U+13b7}\N{U+13b8}",
      "\N{U+13a4}\N{U+13b6}\N{U+13d0}\N{U+13c5}"
    ],
    era_narrow => [
      "\N{U+13a4}\N{U+13d3}\N{U+13b7}\N{U+13b8}",
      "\N{U+13a4}\N{U+13b6}\N{U+13d0}\N{U+13c5}"
    ],
    era_wide => [
      "\N{U+13cf} \N{U+13e5}\N{U+13cc} \N{U+13be}\N{U+13d5}\N{U+13b2}\N{U+13cd}\N{U+13ac}\N{U+13be}",
      "\N{U+13a0}\N{U+13a9}\N{U+13c3}\N{U+13ae}\N{U+13b5}\N{U+13d3}\N{U+13cd}\N{U+13d7}\N{U+13f1} \N{U+13a0}\N{U+13d5}\N{U+13d8}\N{U+13f1}\N{U+13cd}\N{U+13ac} \N{U+13f1}\N{U+13b0}\N{U+13e9} \N{U+13e7}\N{U+13d3}\N{U+13c2}\N{U+13b8}\N{U+13a2}\N{U+13cd}\N{U+13d7}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Cherokee",
    month_format_abbreviated => [
      "\N{U+13a4}\N{U+13c3}",
      "\N{U+13a7}\N{U+13a6}",
      "\N{U+13a0}\N{U+13c5}",
      "\N{U+13a7}\N{U+13ec}",
      "\N{U+13a0}\N{U+13c2}",
      "\N{U+13d5}\N{U+13ad}",
      "\N{U+13ab}\N{U+13f0}",
      "\N{U+13a6}\N{U+13b6}",
      "\N{U+13da}\N{U+13b5}",
      "\N{U+13da}\N{U+13c2}",
      "\N{U+13c5}\N{U+13d3}",
      "\N{U+13a5}\N{U+13cd}"
    ],
    month_format_narrow => [
      "\N{U+13a4}",
      "\N{U+13a7}",
      "\N{U+13a0}",
      "\N{U+13a7}",
      "\N{U+13a0}",
      "\N{U+13d5}",
      "\N{U+13ab}",
      "\N{U+13a6}",
      "\N{U+13da}",
      "\N{U+13da}",
      "\N{U+13c5}",
      "\N{U+13a5}"
    ],
    month_format_wide => [
      "\N{U+13a4}\N{U+13c3}\N{U+13b8}\N{U+13d4}\N{U+13c5}",
      "\N{U+13a7}\N{U+13a6}\N{U+13b5}",
      "\N{U+13a0}\N{U+13c5}\N{U+13f1}",
      "\N{U+13a7}\N{U+13ec}\N{U+13c2}",
      "\N{U+13a0}\N{U+13c2}\N{U+13cd}\N{U+13ac}\N{U+13d8}",
      "\N{U+13d5}\N{U+13ad}\N{U+13b7}\N{U+13f1}",
      "\N{U+13ab}\N{U+13f0}\N{U+13c9}\N{U+13c2}",
      "\N{U+13a6}\N{U+13b6}\N{U+13c2}",
      "\N{U+13da}\N{U+13b5}\N{U+13cd}\N{U+13d7}",
      "\N{U+13da}\N{U+13c2}\N{U+13c5}\N{U+13d7}",
      "\N{U+13c5}\N{U+13d3}\N{U+13d5}\N{U+13c6}",
      "\N{U+13a5}\N{U+13cd}\N{U+13a9}\N{U+13f1}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+13a4}\N{U+13c3}",
      "\N{U+13a7}\N{U+13a6}",
      "\N{U+13a0}\N{U+13c5}",
      "\N{U+13a7}\N{U+13ec}",
      "\N{U+13a0}\N{U+13c2}",
      "\N{U+13d5}\N{U+13ad}",
      "\N{U+13ab}\N{U+13f0}",
      "\N{U+13a6}\N{U+13b6}",
      "\N{U+13da}\N{U+13b5}",
      "\N{U+13da}\N{U+13c2}",
      "\N{U+13c5}\N{U+13d3}",
      "\N{U+13a5}\N{U+13cd}"
    ],
    month_stand_alone_narrow => [
      "\N{U+13a4}",
      "\N{U+13a7}",
      "\N{U+13a0}",
      "\N{U+13a7}",
      "\N{U+13a0}",
      "\N{U+13d5}",
      "\N{U+13ab}",
      "\N{U+13a6}",
      "\N{U+13da}",
      "\N{U+13da}",
      "\N{U+13c5}",
      "\N{U+13a5}"
    ],
    month_stand_alone_wide => [
      "\N{U+13a4}\N{U+13c3}\N{U+13b8}\N{U+13d4}\N{U+13c5}",
      "\N{U+13a7}\N{U+13a6}\N{U+13b5}",
      "\N{U+13a0}\N{U+13c5}\N{U+13f1}",
      "\N{U+13a7}\N{U+13ec}\N{U+13c2}",
      "\N{U+13a0}\N{U+13c2}\N{U+13cd}\N{U+13ac}\N{U+13d8}",
      "\N{U+13d5}\N{U+13ad}\N{U+13b7}\N{U+13f1}",
      "\N{U+13ab}\N{U+13f0}\N{U+13c9}\N{U+13c2}",
      "\N{U+13a6}\N{U+13b6}\N{U+13c2}",
      "\N{U+13da}\N{U+13b5}\N{U+13cd}\N{U+13d7}",
      "\N{U+13da}\N{U+13c2}\N{U+13c5}\N{U+13d7}",
      "\N{U+13c5}\N{U+13d3}\N{U+13d5}\N{U+13c6}",
      "\N{U+13a5}\N{U+13cd}\N{U+13a9}\N{U+13f1}"
    ],
    name => "Cherokee United States",
    native_language => "\N{U+13e3}\N{U+13b3}\N{U+13a9}",
    native_name => "\N{U+13e3}\N{U+13b3}\N{U+13a9} \N{U+13a0}\N{U+13b9}\N{U+13f0}\N{U+13df}",
    native_script => undef,
    native_territory => "\N{U+13a0}\N{U+13b9}\N{U+13f0}\N{U+13df}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "United States",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ckb ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "ckb",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Central Kurdish",
    month_format_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    name => "Central Kurdish",
    native_language => "\N{U+06a9}\N{U+0648}\N{U+0631}\N{U+062f}\N{U+06cc}\N{U+06cc} \N{U+0646}\N{U+0627}\N{U+0648}\N{U+06d5}\N{U+0646}\N{U+062f}\N{U+06cc}",
    native_name => "\N{U+06a9}\N{U+0648}\N{U+0631}\N{U+062f}\N{U+06cc}\N{U+06cc} \N{U+0646}\N{U+0627}\N{U+0648}\N{U+06d5}\N{U+0646}\N{U+062f}\N{U+06cc}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ckb-IQ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "ckb-IQ",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Central Kurdish",
    month_format_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    name => "Central Kurdish Iraq",
    native_language => "\N{U+06a9}\N{U+0648}\N{U+0631}\N{U+062f}\N{U+06cc}\N{U+06cc} \N{U+0646}\N{U+0627}\N{U+0648}\N{U+06d5}\N{U+0646}\N{U+062f}\N{U+06cc}",
    native_name => "\N{U+06a9}\N{U+0648}\N{U+0631}\N{U+062f}\N{U+06cc}\N{U+06cc} \N{U+0646}\N{U+0627}\N{U+0648}\N{U+06d5}\N{U+0646}\N{U+062f}\N{U+06cc} IQ",
    native_script => undef,
    native_territory => "IQ",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Iraq",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ckb-IR ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "ckb-IR",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Central Kurdish",
    month_format_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    name => "Central Kurdish Iran",
    native_language => "\N{U+06a9}\N{U+0648}\N{U+0631}\N{U+062f}\N{U+06cc}\N{U+06cc} \N{U+0646}\N{U+0627}\N{U+0648}\N{U+06d5}\N{U+0646}\N{U+062f}\N{U+06cc}",
    native_name => "\N{U+06a9}\N{U+0648}\N{U+0631}\N{U+062f}\N{U+06cc}\N{U+06cc} \N{U+0646}\N{U+0627}\N{U+0648}\N{U+06d5}\N{U+0646}\N{U+062f}\N{U+06cc} IR",
    native_script => undef,
    native_territory => "IR",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Iran",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ cs ]__
  {
    am_pm_abbreviated => [
      "dop.",
      "odp."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H:mm",
      EHms => "E H:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "LLLL y G",
      GyMMMEd => "E d. M. y G",
      GyMMMMEd => "E d. MMMM y G",
      GyMMMMd => "d. MMMM y G",
      GyMMMd => "d. M. y G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E d. M.",
      MMM => "LLL",
      MMMEd => "E d. M.",
      MMMMEd => "E d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. M.",
      Md => "d. M.",
      d => "d.",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d. M. y",
      yMMM => "LLLL y",
      yMMMEd => "E d. M. y",
      yMMMM => "LLLL y",
      yMMMMEd => "E d. MMMM y",
      yMMMMd => "d. MMMM y",
      yMMMd => "d. M. y",
      yMd => "d. M. y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "cs",
    date_format_full => "EEEE d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. M. y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "po",
      "\N{U+00fa}t",
      "st",
      "\N{U+010d}t",
      "p\N{U+00e1}",
      "so",
      "ne"
    ],
    day_format_narrow => [
      "P",
      "\N{U+00da}",
      "S",
      "\N{U+010c}",
      "P",
      "S",
      "N"
    ],
    day_format_wide => [
      "pond\N{U+011b}l\N{U+00ed}",
      "\N{U+00fa}ter\N{U+00fd}",
      "st\N{U+0159}eda",
      "\N{U+010d}tvrtek",
      "p\N{U+00e1}tek",
      "sobota",
      "ned\N{U+011b}le"
    ],
    day_stand_alone_abbreviated => [
      "po",
      "\N{U+00fa}t",
      "st",
      "\N{U+010d}t",
      "p\N{U+00e1}",
      "so",
      "ne"
    ],
    day_stand_alone_narrow => [
      "P",
      "\N{U+00da}",
      "S",
      "\N{U+010c}",
      "P",
      "S",
      "N"
    ],
    day_stand_alone_wide => [
      "pond\N{U+011b}l\N{U+00ed}",
      "\N{U+00fa}ter\N{U+00fd}",
      "st\N{U+0159}eda",
      "\N{U+010d}tvrtek",
      "p\N{U+00e1}tek",
      "sobota",
      "ned\N{U+011b}le"
    ],
    era_abbreviated => [
      "p\N{U+0159}. n. l.",
      "n. l."
    ],
    era_narrow => [
      "p\N{U+0159}.n.l.",
      "n.l."
    ],
    era_wide => [
      "p\N{U+0159}. n. l.",
      "n. l."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Czech",
    month_format_abbreviated => [
      "led",
      "\N{U+00fa}no",
      "b\N{U+0159}e",
      "dub",
      "kv\N{U+011b}",
      "\N{U+010d}vn",
      "\N{U+010d}vc",
      "srp",
      "z\N{U+00e1}\N{U+0159}",
      "\N{U+0159}\N{U+00ed}j",
      "lis",
      "pro"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "ledna",
      "\N{U+00fa}nora",
      "b\N{U+0159}ezna",
      "dubna",
      "kv\N{U+011b}tna",
      "\N{U+010d}ervna",
      "\N{U+010d}ervence",
      "srpna",
      "z\N{U+00e1}\N{U+0159}\N{U+00ed}",
      "\N{U+0159}\N{U+00ed}jna",
      "listopadu",
      "prosince"
    ],
    month_stand_alone_abbreviated => [
      "led",
      "\N{U+00fa}no",
      "b\N{U+0159}e",
      "dub",
      "kv\N{U+011b}",
      "\N{U+010d}vn",
      "\N{U+010d}vc",
      "srp",
      "z\N{U+00e1}\N{U+0159}",
      "\N{U+0159}\N{U+00ed}j",
      "lis",
      "pro"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "leden",
      "\N{U+00fa}nor",
      "b\N{U+0159}ezen",
      "duben",
      "kv\N{U+011b}ten",
      "\N{U+010d}erven",
      "\N{U+010d}ervenec",
      "srpen",
      "z\N{U+00e1}\N{U+0159}\N{U+00ed}",
      "\N{U+0159}\N{U+00ed}jen",
      "listopad",
      "prosinec"
    ],
    name => "Czech",
    native_language => "\N{U+010d}e\N{U+0161}tina",
    native_name => "\N{U+010d}e\N{U+0161}tina",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. \N{U+010d}tvrtlet\N{U+00ed}",
      "2. \N{U+010d}tvrtlet\N{U+00ed}",
      "3. \N{U+010d}tvrtlet\N{U+00ed}",
      "4. \N{U+010d}tvrtlet\N{U+00ed}"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. \N{U+010d}tvrtlet\N{U+00ed}",
      "2. \N{U+010d}tvrtlet\N{U+00ed}",
      "3. \N{U+010d}tvrtlet\N{U+00ed}",
      "4. \N{U+010d}tvrtlet\N{U+00ed}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ cs-CZ ]__
  {
    am_pm_abbreviated => [
      "dop.",
      "odp."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H:mm",
      EHms => "E H:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "LLLL y G",
      GyMMMEd => "E d. M. y G",
      GyMMMMEd => "E d. MMMM y G",
      GyMMMMd => "d. MMMM y G",
      GyMMMd => "d. M. y G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E d. M.",
      MMM => "LLL",
      MMMEd => "E d. M.",
      MMMMEd => "E d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. M.",
      Md => "d. M.",
      d => "d.",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d. M. y",
      yMMM => "LLLL y",
      yMMMEd => "E d. M. y",
      yMMMM => "LLLL y",
      yMMMMEd => "E d. MMMM y",
      yMMMMd => "d. MMMM y",
      yMMMd => "d. M. y",
      yMd => "d. M. y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "cs-CZ",
    date_format_full => "EEEE d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. M. y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "po",
      "\N{U+00fa}t",
      "st",
      "\N{U+010d}t",
      "p\N{U+00e1}",
      "so",
      "ne"
    ],
    day_format_narrow => [
      "P",
      "\N{U+00da}",
      "S",
      "\N{U+010c}",
      "P",
      "S",
      "N"
    ],
    day_format_wide => [
      "pond\N{U+011b}l\N{U+00ed}",
      "\N{U+00fa}ter\N{U+00fd}",
      "st\N{U+0159}eda",
      "\N{U+010d}tvrtek",
      "p\N{U+00e1}tek",
      "sobota",
      "ned\N{U+011b}le"
    ],
    day_stand_alone_abbreviated => [
      "po",
      "\N{U+00fa}t",
      "st",
      "\N{U+010d}t",
      "p\N{U+00e1}",
      "so",
      "ne"
    ],
    day_stand_alone_narrow => [
      "P",
      "\N{U+00da}",
      "S",
      "\N{U+010c}",
      "P",
      "S",
      "N"
    ],
    day_stand_alone_wide => [
      "pond\N{U+011b}l\N{U+00ed}",
      "\N{U+00fa}ter\N{U+00fd}",
      "st\N{U+0159}eda",
      "\N{U+010d}tvrtek",
      "p\N{U+00e1}tek",
      "sobota",
      "ned\N{U+011b}le"
    ],
    era_abbreviated => [
      "p\N{U+0159}. n. l.",
      "n. l."
    ],
    era_narrow => [
      "p\N{U+0159}.n.l.",
      "n.l."
    ],
    era_wide => [
      "p\N{U+0159}. n. l.",
      "n. l."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%-d.%-m.%Y",
    glibc_datetime_format => "%a\240%-d.\240%B\240%Y,\240%H:%M:%S\240%Z",
    glibc_time_12_format => "%I:%M:%S",
    glibc_time_format => "%H:%M:%S",
    language => "Czech",
    month_format_abbreviated => [
      "led",
      "\N{U+00fa}no",
      "b\N{U+0159}e",
      "dub",
      "kv\N{U+011b}",
      "\N{U+010d}vn",
      "\N{U+010d}vc",
      "srp",
      "z\N{U+00e1}\N{U+0159}",
      "\N{U+0159}\N{U+00ed}j",
      "lis",
      "pro"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "ledna",
      "\N{U+00fa}nora",
      "b\N{U+0159}ezna",
      "dubna",
      "kv\N{U+011b}tna",
      "\N{U+010d}ervna",
      "\N{U+010d}ervence",
      "srpna",
      "z\N{U+00e1}\N{U+0159}\N{U+00ed}",
      "\N{U+0159}\N{U+00ed}jna",
      "listopadu",
      "prosince"
    ],
    month_stand_alone_abbreviated => [
      "led",
      "\N{U+00fa}no",
      "b\N{U+0159}e",
      "dub",
      "kv\N{U+011b}",
      "\N{U+010d}vn",
      "\N{U+010d}vc",
      "srp",
      "z\N{U+00e1}\N{U+0159}",
      "\N{U+0159}\N{U+00ed}j",
      "lis",
      "pro"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "leden",
      "\N{U+00fa}nor",
      "b\N{U+0159}ezen",
      "duben",
      "kv\N{U+011b}ten",
      "\N{U+010d}erven",
      "\N{U+010d}ervenec",
      "srpen",
      "z\N{U+00e1}\N{U+0159}\N{U+00ed}",
      "\N{U+0159}\N{U+00ed}jen",
      "listopad",
      "prosinec"
    ],
    name => "Czech Czech Republic",
    native_language => "\N{U+010d}e\N{U+0161}tina",
    native_name => "\N{U+010d}e\N{U+0161}tina \N{U+010c}esk\N{U+00e1} republika",
    native_script => undef,
    native_territory => "\N{U+010c}esk\N{U+00e1} republika",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. \N{U+010d}tvrtlet\N{U+00ed}",
      "2. \N{U+010d}tvrtlet\N{U+00ed}",
      "3. \N{U+010d}tvrtlet\N{U+00ed}",
      "4. \N{U+010d}tvrtlet\N{U+00ed}"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. \N{U+010d}tvrtlet\N{U+00ed}",
      "2. \N{U+010d}tvrtlet\N{U+00ed}",
      "3. \N{U+010d}tvrtlet\N{U+00ed}",
      "4. \N{U+010d}tvrtlet\N{U+00ed}"
    ],
    script => undef,
    territory => "Czech Republic",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ cu ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "cu",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Church Slavic",
    month_format_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    name => "Church Slavic",
    native_language => "cu",
    native_name => "cu",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ cu-RU ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "cu-RU",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Church Slavic",
    month_format_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    name => "Church Slavic Russia",
    native_language => "cu",
    native_name => "cu RU",
    native_script => undef,
    native_territory => "RU",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Russia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ cy ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQ => "Q y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "cy",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} 'am' {0}",
    datetime_format_long => "{1} 'am' {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Llun",
      "Maw",
      "Mer",
      "Iau",
      "Gwen",
      "Sad",
      "Sul"
    ],
    day_format_narrow => [
      "Ll",
      "M",
      "M",
      "I",
      "G",
      "S",
      "S"
    ],
    day_format_wide => [
      "Dydd Llun",
      "Dydd Mawrth",
      "Dydd Mercher",
      "Dydd Iau",
      "Dydd Gwener",
      "Dydd Sadwrn",
      "Dydd Sul"
    ],
    day_stand_alone_abbreviated => [
      "Llun",
      "Maw",
      "Mer",
      "Iau",
      "Gwe",
      "Sad",
      "Sul"
    ],
    day_stand_alone_narrow => [
      "Ll",
      "M",
      "M",
      "I",
      "G",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Dydd Llun",
      "Dydd Mawrth",
      "Dydd Mercher",
      "Dydd Iau",
      "Dydd Gwener",
      "Dydd Sadwrn",
      "Dydd Sul"
    ],
    era_abbreviated => [
      "CC",
      "OC"
    ],
    era_narrow => [
      "C",
      "O"
    ],
    era_wide => [
      "Cyn Crist",
      "Oed Crist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Welsh",
    month_format_abbreviated => [
      "Ion",
      "Chwef",
      "Maw",
      "Ebrill",
      "Mai",
      "Meh",
      "Gorff",
      "Awst",
      "Medi",
      "Hyd",
      "Tach",
      "Rhag"
    ],
    month_format_narrow => [
      "I",
      "Ch",
      "M",
      "E",
      "M",
      "M",
      "G",
      "A",
      "M",
      "H",
      "T",
      "Rh"
    ],
    month_format_wide => [
      "Ionawr",
      "Chwefror",
      "Mawrth",
      "Ebrill",
      "Mai",
      "Mehefin",
      "Gorffennaf",
      "Awst",
      "Medi",
      "Hydref",
      "Tachwedd",
      "Rhagfyr"
    ],
    month_stand_alone_abbreviated => [
      "Ion",
      "Chw",
      "Maw",
      "Ebr",
      "Mai",
      "Meh",
      "Gor",
      "Awst",
      "Medi",
      "Hyd",
      "Tach",
      "Rhag"
    ],
    month_stand_alone_narrow => [
      "I",
      "Ch",
      "M",
      "E",
      "M",
      "M",
      "G",
      "A",
      "M",
      "H",
      "T",
      "Rh"
    ],
    month_stand_alone_wide => [
      "Ionawr",
      "Chwefror",
      "Mawrth",
      "Ebrill",
      "Mai",
      "Mehefin",
      "Gorffennaf",
      "Awst",
      "Medi",
      "Hydref",
      "Tachwedd",
      "Rhagfyr"
    ],
    name => "Welsh",
    native_language => "Cymraeg",
    native_name => "Cymraeg",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Ch1",
      "Ch2",
      "Ch3",
      "Ch4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "chwarter 1af",
      "2il chwarter",
      "3ydd chwarter",
      "4ydd chwarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Ch1",
      "Ch2",
      "Ch3",
      "Ch4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "chwarter 1af",
      "2il chwarter",
      "3ydd chwarter",
      "4ydd chwarter"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ cy-GB ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQ => "Q y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "cy-GB",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} 'am' {0}",
    datetime_format_long => "{1} 'am' {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Llun",
      "Maw",
      "Mer",
      "Iau",
      "Gwen",
      "Sad",
      "Sul"
    ],
    day_format_narrow => [
      "Ll",
      "M",
      "M",
      "I",
      "G",
      "S",
      "S"
    ],
    day_format_wide => [
      "Dydd Llun",
      "Dydd Mawrth",
      "Dydd Mercher",
      "Dydd Iau",
      "Dydd Gwener",
      "Dydd Sadwrn",
      "Dydd Sul"
    ],
    day_stand_alone_abbreviated => [
      "Llun",
      "Maw",
      "Mer",
      "Iau",
      "Gwe",
      "Sad",
      "Sul"
    ],
    day_stand_alone_narrow => [
      "Ll",
      "M",
      "M",
      "I",
      "G",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Dydd Llun",
      "Dydd Mawrth",
      "Dydd Mercher",
      "Dydd Iau",
      "Dydd Gwener",
      "Dydd Sadwrn",
      "Dydd Sul"
    ],
    era_abbreviated => [
      "CC",
      "OC"
    ],
    era_narrow => [
      "C",
      "O"
    ],
    era_wide => [
      "Cyn Crist",
      "Oed Crist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %e %b %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%y",
    glibc_datetime_format => "Dydd %A %d <U006d>is %B %Y %T %Z",
    glibc_time_12_format => "%l:%M:%S %P %Z",
    glibc_time_format => "%T",
    language => "Welsh",
    month_format_abbreviated => [
      "Ion",
      "Chwef",
      "Maw",
      "Ebrill",
      "Mai",
      "Meh",
      "Gorff",
      "Awst",
      "Medi",
      "Hyd",
      "Tach",
      "Rhag"
    ],
    month_format_narrow => [
      "I",
      "Ch",
      "M",
      "E",
      "M",
      "M",
      "G",
      "A",
      "M",
      "H",
      "T",
      "Rh"
    ],
    month_format_wide => [
      "Ionawr",
      "Chwefror",
      "Mawrth",
      "Ebrill",
      "Mai",
      "Mehefin",
      "Gorffennaf",
      "Awst",
      "Medi",
      "Hydref",
      "Tachwedd",
      "Rhagfyr"
    ],
    month_stand_alone_abbreviated => [
      "Ion",
      "Chw",
      "Maw",
      "Ebr",
      "Mai",
      "Meh",
      "Gor",
      "Awst",
      "Medi",
      "Hyd",
      "Tach",
      "Rhag"
    ],
    month_stand_alone_narrow => [
      "I",
      "Ch",
      "M",
      "E",
      "M",
      "M",
      "G",
      "A",
      "M",
      "H",
      "T",
      "Rh"
    ],
    month_stand_alone_wide => [
      "Ionawr",
      "Chwefror",
      "Mawrth",
      "Ebrill",
      "Mai",
      "Mehefin",
      "Gorffennaf",
      "Awst",
      "Medi",
      "Hydref",
      "Tachwedd",
      "Rhagfyr"
    ],
    name => "Welsh United Kingdom",
    native_language => "Cymraeg",
    native_name => "Cymraeg Y Deyrnas Unedig",
    native_script => undef,
    native_territory => "Y Deyrnas Unedig",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Ch1",
      "Ch2",
      "Ch3",
      "Ch4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "chwarter 1af",
      "2il chwarter",
      "3ydd chwarter",
      "4ydd chwarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Ch1",
      "Ch2",
      "Ch3",
      "Ch4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "chwarter 1af",
      "2il chwarter",
      "3ydd chwarter",
      "4ydd chwarter"
    ],
    script => undef,
    territory => "United Kingdom",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ da ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH.mm",
      EHms => "E HH.mm.ss",
      Ed => "E 'den' d.",
      Ehm => "E h.mm a",
      Ehms => "E h.mm.ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "M",
      MEd => "E d/M",
      MMM => "MMM",
      MMMEd => "E d. MMM",
      MMMMEd => "E d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d.",
      h => "h a",
      hm => "h.mm a",
      hms => "h.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "da",
    date_format_full => "EEEE 'den' d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'kl'. {0}",
    datetime_format_long => "{1} 'kl'. {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "man.",
      "tir.",
      "ons.",
      "tor.",
      "fre.",
      "l\N{U+00f8}r.",
      "s\N{U+00f8}n."
    ],
    day_format_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "mandag",
      "tirsdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f8}rdag",
      "s\N{U+00f8}ndag"
    ],
    day_stand_alone_abbreviated => [
      "man",
      "tir",
      "ons",
      "tor",
      "fre",
      "l\N{U+00f8}r",
      "s\N{U+00f8}n"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "mandag",
      "tirsdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f8}rdag",
      "s\N{U+00f8}ndag"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "fKr",
      "eKr"
    ],
    era_wide => [
      "f.Kr.",
      "e.Kr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Danish",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mar.",
      "apr.",
      "maj",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "marts",
      "april",
      "maj",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "marts",
      "april",
      "maj",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Danish",
    native_language => "dansk",
    native_name => "dansk",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1. kvt.",
      "2. kvt.",
      "3. kvt.",
      "4. kvt."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "1. kvt.",
      "2. kvt.",
      "3. kvt.",
      "4. kvt."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ da-DK ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH.mm",
      EHms => "E HH.mm.ss",
      Ed => "E 'den' d.",
      Ehm => "E h.mm a",
      Ehms => "E h.mm.ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "M",
      MEd => "E d/M",
      MMM => "MMM",
      MMMEd => "E d. MMM",
      MMMMEd => "E d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d.",
      h => "h a",
      hm => "h.mm a",
      hms => "h.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "da-DK",
    date_format_full => "EEEE 'den' d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'kl'. {0}",
    datetime_format_long => "{1} 'kl'. {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "man.",
      "tir.",
      "ons.",
      "tor.",
      "fre.",
      "l\N{U+00f8}r.",
      "s\N{U+00f8}n."
    ],
    day_format_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "mandag",
      "tirsdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f8}rdag",
      "s\N{U+00f8}ndag"
    ],
    day_stand_alone_abbreviated => [
      "man",
      "tir",
      "ons",
      "tor",
      "fre",
      "l\N{U+00f8}r",
      "s\N{U+00f8}n"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "mandag",
      "tirsdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f8}rdag",
      "s\N{U+00f8}ndag"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "fKr",
      "eKr"
    ],
    era_wide => [
      "f.Kr.",
      "e.Kr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d-%m-%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Danish",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mar.",
      "apr.",
      "maj",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "marts",
      "april",
      "maj",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "marts",
      "april",
      "maj",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Danish Denmark",
    native_language => "dansk",
    native_name => "dansk Danmark",
    native_script => undef,
    native_territory => "Danmark",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1. kvt.",
      "2. kvt.",
      "3. kvt.",
      "4. kvt."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "1. kvt.",
      "2. kvt.",
      "3. kvt.",
      "4. kvt."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    script => undef,
    territory => "Denmark",
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ da-GL ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH.mm",
      EHms => "E HH.mm.ss",
      Ed => "E 'den' d.",
      Ehm => "E h.mm a",
      Ehms => "E h.mm.ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "M",
      MEd => "E d/M",
      MMM => "MMM",
      MMMEd => "E d. MMM",
      MMMMEd => "E d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d.",
      h => "h a",
      hm => "h.mm a",
      hms => "h.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "da-GL",
    date_format_full => "EEEE 'den' d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'kl'. {0}",
    datetime_format_long => "{1} 'kl'. {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "man.",
      "tir.",
      "ons.",
      "tor.",
      "fre.",
      "l\N{U+00f8}r.",
      "s\N{U+00f8}n."
    ],
    day_format_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "mandag",
      "tirsdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f8}rdag",
      "s\N{U+00f8}ndag"
    ],
    day_stand_alone_abbreviated => [
      "man",
      "tir",
      "ons",
      "tor",
      "fre",
      "l\N{U+00f8}r",
      "s\N{U+00f8}n"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "mandag",
      "tirsdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f8}rdag",
      "s\N{U+00f8}ndag"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "fKr",
      "eKr"
    ],
    era_wide => [
      "f.Kr.",
      "e.Kr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Danish",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mar.",
      "apr.",
      "maj",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "marts",
      "april",
      "maj",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "marts",
      "april",
      "maj",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Danish Greenland",
    native_language => "dansk",
    native_name => "dansk Gr\N{U+00f8}nland",
    native_script => undef,
    native_territory => "Gr\N{U+00f8}nland",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1. kvt.",
      "2. kvt.",
      "3. kvt.",
      "4. kvt."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "1. kvt.",
      "2. kvt.",
      "3. kvt.",
      "4. kvt."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    script => undef,
    territory => "Greenland",
    time_format_full => "h.mm.ss a zzzz",
    time_format_long => "h.mm.ss a z",
    time_format_medium => "h.mm.ss a",
    time_format_short => "h.mm a",
    variant => undef,
    version => 29
  }
  __[ dav ]__
  {
    am_pm_abbreviated => [
      "Luma lwa K",
      "luma lwa p"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "dav",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jim",
      "Kaw",
      "Kad",
      "Kan",
      "Kas",
      "Ngu",
      "Jum"
    ],
    day_format_narrow => [
      "J",
      "K",
      "K",
      "K",
      "K",
      "N",
      "J"
    ],
    day_format_wide => [
      "Kuramuka jimweri",
      "Kuramuka kawi",
      "Kuramuka kadadu",
      "Kuramuka kana",
      "Kuramuka kasanu",
      "Kifula nguwo",
      "Ituku ja jumwa"
    ],
    day_stand_alone_abbreviated => [
      "Jim",
      "Kaw",
      "Kad",
      "Kan",
      "Kas",
      "Ngu",
      "Jum"
    ],
    day_stand_alone_narrow => [
      "J",
      "K",
      "K",
      "K",
      "K",
      "N",
      "J"
    ],
    day_stand_alone_wide => [
      "Kuramuka jimweri",
      "Kuramuka kawi",
      "Kuramuka kadadu",
      "Kuramuka kana",
      "Kuramuka kasanu",
      "Kifula nguwo",
      "Ituku ja jumwa"
    ],
    era_abbreviated => [
      "KK",
      "BK"
    ],
    era_narrow => [
      "KK",
      "BK"
    ],
    era_wide => [
      "Kabla ya Kristo",
      "Baada ya Kristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Taita",
    month_format_abbreviated => [
      "Imb",
      "Kaw",
      "Kad",
      "Kan",
      "Kas",
      "Kar",
      "Mfu",
      "Wun",
      "Ike",
      "Iku",
      "Imw",
      "Iwi"
    ],
    month_format_narrow => [
      "I",
      "K",
      "K",
      "K",
      "K",
      "K",
      "M",
      "W",
      "I",
      "I",
      "I",
      "I"
    ],
    month_format_wide => [
      "Mori ghwa imbiri",
      "Mori ghwa kawi",
      "Mori ghwa kadadu",
      "Mori ghwa kana",
      "Mori ghwa kasanu",
      "Mori ghwa karandadu",
      "Mori ghwa mfungade",
      "Mori ghwa wunyanya",
      "Mori ghwa ikenda",
      "Mori ghwa ikumi",
      "Mori ghwa ikumi na imweri",
      "Mori ghwa ikumi na iwi"
    ],
    month_stand_alone_abbreviated => [
      "Imb",
      "Kaw",
      "Kad",
      "Kan",
      "Kas",
      "Kar",
      "Mfu",
      "Wun",
      "Ike",
      "Iku",
      "Imw",
      "Iwi"
    ],
    month_stand_alone_narrow => [
      "I",
      "K",
      "K",
      "K",
      "K",
      "K",
      "M",
      "W",
      "I",
      "I",
      "I",
      "I"
    ],
    month_stand_alone_wide => [
      "Mori ghwa imbiri",
      "Mori ghwa kawi",
      "Mori ghwa kadadu",
      "Mori ghwa kana",
      "Mori ghwa kasanu",
      "Mori ghwa karandadu",
      "Mori ghwa mfungade",
      "Mori ghwa wunyanya",
      "Mori ghwa ikenda",
      "Mori ghwa ikumi",
      "Mori ghwa ikumi na imweri",
      "Mori ghwa ikumi na iwi"
    ],
    name => "Taita",
    native_language => "Kitaita",
    native_name => "Kitaita",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Kimu cha imbiri",
      "Kimu cha kawi",
      "Kimu cha kadadu",
      "Kimu cha kana"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Kimu cha imbiri",
      "Kimu cha kawi",
      "Kimu cha kadadu",
      "Kimu cha kana"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ dav-KE ]__
  {
    am_pm_abbreviated => [
      "Luma lwa K",
      "luma lwa p"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "dav-KE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jim",
      "Kaw",
      "Kad",
      "Kan",
      "Kas",
      "Ngu",
      "Jum"
    ],
    day_format_narrow => [
      "J",
      "K",
      "K",
      "K",
      "K",
      "N",
      "J"
    ],
    day_format_wide => [
      "Kuramuka jimweri",
      "Kuramuka kawi",
      "Kuramuka kadadu",
      "Kuramuka kana",
      "Kuramuka kasanu",
      "Kifula nguwo",
      "Ituku ja jumwa"
    ],
    day_stand_alone_abbreviated => [
      "Jim",
      "Kaw",
      "Kad",
      "Kan",
      "Kas",
      "Ngu",
      "Jum"
    ],
    day_stand_alone_narrow => [
      "J",
      "K",
      "K",
      "K",
      "K",
      "N",
      "J"
    ],
    day_stand_alone_wide => [
      "Kuramuka jimweri",
      "Kuramuka kawi",
      "Kuramuka kadadu",
      "Kuramuka kana",
      "Kuramuka kasanu",
      "Kifula nguwo",
      "Ituku ja jumwa"
    ],
    era_abbreviated => [
      "KK",
      "BK"
    ],
    era_narrow => [
      "KK",
      "BK"
    ],
    era_wide => [
      "Kabla ya Kristo",
      "Baada ya Kristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Taita",
    month_format_abbreviated => [
      "Imb",
      "Kaw",
      "Kad",
      "Kan",
      "Kas",
      "Kar",
      "Mfu",
      "Wun",
      "Ike",
      "Iku",
      "Imw",
      "Iwi"
    ],
    month_format_narrow => [
      "I",
      "K",
      "K",
      "K",
      "K",
      "K",
      "M",
      "W",
      "I",
      "I",
      "I",
      "I"
    ],
    month_format_wide => [
      "Mori ghwa imbiri",
      "Mori ghwa kawi",
      "Mori ghwa kadadu",
      "Mori ghwa kana",
      "Mori ghwa kasanu",
      "Mori ghwa karandadu",
      "Mori ghwa mfungade",
      "Mori ghwa wunyanya",
      "Mori ghwa ikenda",
      "Mori ghwa ikumi",
      "Mori ghwa ikumi na imweri",
      "Mori ghwa ikumi na iwi"
    ],
    month_stand_alone_abbreviated => [
      "Imb",
      "Kaw",
      "Kad",
      "Kan",
      "Kas",
      "Kar",
      "Mfu",
      "Wun",
      "Ike",
      "Iku",
      "Imw",
      "Iwi"
    ],
    month_stand_alone_narrow => [
      "I",
      "K",
      "K",
      "K",
      "K",
      "K",
      "M",
      "W",
      "I",
      "I",
      "I",
      "I"
    ],
    month_stand_alone_wide => [
      "Mori ghwa imbiri",
      "Mori ghwa kawi",
      "Mori ghwa kadadu",
      "Mori ghwa kana",
      "Mori ghwa kasanu",
      "Mori ghwa karandadu",
      "Mori ghwa mfungade",
      "Mori ghwa wunyanya",
      "Mori ghwa ikenda",
      "Mori ghwa ikumi",
      "Mori ghwa ikumi na imweri",
      "Mori ghwa ikumi na iwi"
    ],
    name => "Taita Kenya",
    native_language => "Kitaita",
    native_name => "Kitaita Kenya",
    native_script => undef,
    native_territory => "Kenya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Kimu cha imbiri",
      "Kimu cha kawi",
      "Kimu cha kadadu",
      "Kimu cha kana"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Kimu cha imbiri",
      "Kimu cha kawi",
      "Kimu cha kadadu",
      "Kimu cha kana"
    ],
    script => undef,
    territory => "Kenya",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ de ]__
  {
    am_pm_abbreviated => [
      "vorm.",
      "nachm."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH 'Uhr'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMd => "d.MM.",
      MMdd => "dd.MM.",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMMdd => "dd.MM.y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "de",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "dd.MM.y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} 'um' {0}",
    datetime_format_long => "{1} 'um' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mo.",
      "Di.",
      "Mi.",
      "Do.",
      "Fr.",
      "Sa.",
      "So."
    ],
    day_format_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Montag",
      "Dienstag",
      "Mittwoch",
      "Donnerstag",
      "Freitag",
      "Samstag",
      "Sonntag"
    ],
    day_stand_alone_abbreviated => [
      "Mo",
      "Di",
      "Mi",
      "Do",
      "Fr",
      "Sa",
      "So"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Montag",
      "Dienstag",
      "Mittwoch",
      "Donnerstag",
      "Freitag",
      "Samstag",
      "Sonntag"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr."
    ],
    era_narrow => [
      "v. Chr.",
      "n. Chr."
    ],
    era_wide => [
      "v. Chr.",
      "n. Chr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "German",
    month_format_abbreviated => [
      "Jan.",
      "Feb.",
      "M\N{U+00e4}rz",
      "Apr.",
      "Mai",
      "Juni",
      "Juli",
      "Aug.",
      "Sep.",
      "Okt.",
      "Nov.",
      "Dez."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "M\N{U+00e4}r",
      "Apr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    name => "German",
    native_language => "Deutsch",
    native_name => "Deutsch",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ de-AT ]__
  {
    am_pm_abbreviated => [
      "vorm.",
      "nachm."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH 'Uhr'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMd => "d.MM.",
      MMdd => "dd.MM.",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMMdd => "dd.MM.y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "de-AT",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "dd.MM.y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} 'um' {0}",
    datetime_format_long => "{1} 'um' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mo.",
      "Di.",
      "Mi.",
      "Do.",
      "Fr.",
      "Sa.",
      "So."
    ],
    day_format_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Montag",
      "Dienstag",
      "Mittwoch",
      "Donnerstag",
      "Freitag",
      "Samstag",
      "Sonntag"
    ],
    day_stand_alone_abbreviated => [
      "Mo",
      "Di",
      "Mi",
      "Do",
      "Fr",
      "Sa",
      "So"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Montag",
      "Dienstag",
      "Mittwoch",
      "Donnerstag",
      "Freitag",
      "Samstag",
      "Sonntag"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr."
    ],
    era_narrow => [
      "v. Chr.",
      "n. Chr."
    ],
    era_wide => [
      "v. Chr.",
      "n. Chr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%Y-%m-%d",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "German",
    month_format_abbreviated => [
      "J\N{U+00e4}n.",
      "Feb.",
      "M\N{U+00e4}rz",
      "Apr.",
      "Mai",
      "Juni",
      "Juli",
      "Aug.",
      "Sep.",
      "Okt.",
      "Nov.",
      "Dez."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "J\N{U+00e4}nner",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    month_stand_alone_abbreviated => [
      "J\N{U+00e4}n",
      "Feb",
      "M\N{U+00e4}r",
      "Apr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "J\N{U+00e4}nner",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    name => "German Austria",
    native_language => "Deutsch",
    native_name => "Deutsch \N{U+00d6}sterreich",
    native_script => undef,
    native_territory => "\N{U+00d6}sterreich",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    script => undef,
    territory => "Austria",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ de-BE ]__
  {
    am_pm_abbreviated => [
      "vorm.",
      "nachm."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH 'Uhr'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMd => "d.MM.",
      MMdd => "dd.MM.",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMMdd => "dd.MM.y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "de-BE",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "dd.MM.y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} 'um' {0}",
    datetime_format_long => "{1} 'um' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mo.",
      "Di.",
      "Mi.",
      "Do.",
      "Fr.",
      "Sa.",
      "So."
    ],
    day_format_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Montag",
      "Dienstag",
      "Mittwoch",
      "Donnerstag",
      "Freitag",
      "Samstag",
      "Sonntag"
    ],
    day_stand_alone_abbreviated => [
      "Mo",
      "Di",
      "Mi",
      "Do",
      "Fr",
      "Sa",
      "So"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Montag",
      "Dienstag",
      "Mittwoch",
      "Donnerstag",
      "Freitag",
      "Samstag",
      "Sonntag"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr."
    ],
    era_narrow => [
      "v. Chr.",
      "n. Chr."
    ],
    era_wide => [
      "v. Chr.",
      "n. Chr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%Y-%m-%d",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "German",
    month_format_abbreviated => [
      "Jan.",
      "Feb.",
      "M\N{U+00e4}rz",
      "Apr.",
      "Mai",
      "Juni",
      "Juli",
      "Aug.",
      "Sep.",
      "Okt.",
      "Nov.",
      "Dez."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "M\N{U+00e4}r",
      "Apr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    name => "German Belgium",
    native_language => "Deutsch",
    native_name => "Deutsch Belgien",
    native_script => undef,
    native_territory => "Belgien",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    script => undef,
    territory => "Belgium",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ de-CH ]__
  {
    am_pm_abbreviated => [
      "vorm.",
      "nachm."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH 'Uhr'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMd => "d.MM.",
      MMdd => "dd.MM.",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMMdd => "dd.MM.y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "de-CH",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "dd.MM.y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} 'um' {0}",
    datetime_format_long => "{1} 'um' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mo.",
      "Di.",
      "Mi.",
      "Do.",
      "Fr.",
      "Sa.",
      "So."
    ],
    day_format_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Montag",
      "Dienstag",
      "Mittwoch",
      "Donnerstag",
      "Freitag",
      "Samstag",
      "Sonntag"
    ],
    day_stand_alone_abbreviated => [
      "Mo",
      "Di",
      "Mi",
      "Do",
      "Fr",
      "Sa",
      "So"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Montag",
      "Dienstag",
      "Mittwoch",
      "Donnerstag",
      "Freitag",
      "Samstag",
      "Sonntag"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr."
    ],
    era_narrow => [
      "v. Chr.",
      "n. Chr."
    ],
    era_wide => [
      "v. Chr.",
      "n. Chr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "German",
    month_format_abbreviated => [
      "Jan.",
      "Feb.",
      "M\N{U+00e4}rz",
      "Apr.",
      "Mai",
      "Juni",
      "Juli",
      "Aug.",
      "Sep.",
      "Okt.",
      "Nov.",
      "Dez."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "M\N{U+00e4}r",
      "Apr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    name => "German Switzerland",
    native_language => "Deutsch",
    native_name => "Deutsch Schweiz",
    native_script => undef,
    native_territory => "Schweiz",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    script => undef,
    territory => "Switzerland",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ de-DE ]__
  {
    am_pm_abbreviated => [
      "vorm.",
      "nachm."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH 'Uhr'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMd => "d.MM.",
      MMdd => "dd.MM.",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMMdd => "dd.MM.y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "de-DE",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "dd.MM.y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} 'um' {0}",
    datetime_format_long => "{1} 'um' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mo.",
      "Di.",
      "Mi.",
      "Do.",
      "Fr.",
      "Sa.",
      "So."
    ],
    day_format_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Montag",
      "Dienstag",
      "Mittwoch",
      "Donnerstag",
      "Freitag",
      "Samstag",
      "Sonntag"
    ],
    day_stand_alone_abbreviated => [
      "Mo",
      "Di",
      "Mi",
      "Do",
      "Fr",
      "Sa",
      "So"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Montag",
      "Dienstag",
      "Mittwoch",
      "Donnerstag",
      "Freitag",
      "Samstag",
      "Sonntag"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr."
    ],
    era_narrow => [
      "v. Chr.",
      "n. Chr."
    ],
    era_wide => [
      "v. Chr.",
      "n. Chr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %-d. %b %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "German",
    month_format_abbreviated => [
      "Jan.",
      "Feb.",
      "M\N{U+00e4}rz",
      "Apr.",
      "Mai",
      "Juni",
      "Juli",
      "Aug.",
      "Sep.",
      "Okt.",
      "Nov.",
      "Dez."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "M\N{U+00e4}r",
      "Apr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    name => "German Germany",
    native_language => "Deutsch",
    native_name => "Deutsch Deutschland",
    native_script => undef,
    native_territory => "Deutschland",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    script => undef,
    territory => "Germany",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ de-LI ]__
  {
    am_pm_abbreviated => [
      "vorm.",
      "nachm."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH 'Uhr'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMd => "d.MM.",
      MMdd => "dd.MM.",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMMdd => "dd.MM.y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "de-LI",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "dd.MM.y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} 'um' {0}",
    datetime_format_long => "{1} 'um' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mo.",
      "Di.",
      "Mi.",
      "Do.",
      "Fr.",
      "Sa.",
      "So."
    ],
    day_format_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Montag",
      "Dienstag",
      "Mittwoch",
      "Donnerstag",
      "Freitag",
      "Samstag",
      "Sonntag"
    ],
    day_stand_alone_abbreviated => [
      "Mo",
      "Di",
      "Mi",
      "Do",
      "Fr",
      "Sa",
      "So"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Montag",
      "Dienstag",
      "Mittwoch",
      "Donnerstag",
      "Freitag",
      "Samstag",
      "Sonntag"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr."
    ],
    era_narrow => [
      "v. Chr.",
      "n. Chr."
    ],
    era_wide => [
      "v. Chr.",
      "n. Chr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "German",
    month_format_abbreviated => [
      "Jan.",
      "Feb.",
      "M\N{U+00e4}rz",
      "Apr.",
      "Mai",
      "Juni",
      "Juli",
      "Aug.",
      "Sep.",
      "Okt.",
      "Nov.",
      "Dez."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "M\N{U+00e4}r",
      "Apr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    name => "German Liechtenstein",
    native_language => "Deutsch",
    native_name => "Deutsch Liechtenstein",
    native_script => undef,
    native_territory => "Liechtenstein",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    script => undef,
    territory => "Liechtenstein",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ de-LU ]__
  {
    am_pm_abbreviated => [
      "vorm.",
      "nachm."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH 'Uhr'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMd => "d.MM.",
      MMdd => "dd.MM.",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMMdd => "dd.MM.y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "de-LU",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "dd.MM.y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} 'um' {0}",
    datetime_format_long => "{1} 'um' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mo.",
      "Di.",
      "Mi.",
      "Do.",
      "Fr.",
      "Sa.",
      "So."
    ],
    day_format_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Montag",
      "Dienstag",
      "Mittwoch",
      "Donnerstag",
      "Freitag",
      "Samstag",
      "Sonntag"
    ],
    day_stand_alone_abbreviated => [
      "Mo",
      "Di",
      "Mi",
      "Do",
      "Fr",
      "Sa",
      "So"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Montag",
      "Dienstag",
      "Mittwoch",
      "Donnerstag",
      "Freitag",
      "Samstag",
      "Sonntag"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr."
    ],
    era_narrow => [
      "v. Chr.",
      "n. Chr."
    ],
    era_wide => [
      "v. Chr.",
      "n. Chr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%Y-%m-%d",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "German",
    month_format_abbreviated => [
      "Jan.",
      "Feb.",
      "M\N{U+00e4}rz",
      "Apr.",
      "Mai",
      "Juni",
      "Juli",
      "Aug.",
      "Sep.",
      "Okt.",
      "Nov.",
      "Dez."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "M\N{U+00e4}r",
      "Apr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    name => "German Luxembourg",
    native_language => "Deutsch",
    native_name => "Deutsch Luxemburg",
    native_script => undef,
    native_territory => "Luxemburg",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    script => undef,
    territory => "Luxembourg",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ dje ]__
  {
    am_pm_abbreviated => [
      "Subbaahi",
      "Zaarikay b"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "dje",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ati",
      "Ata",
      "Ala",
      "Alm",
      "Alz",
      "Asi",
      "Alh"
    ],
    day_format_narrow => [
      "T",
      "T",
      "L",
      "M",
      "Z",
      "S",
      "H"
    ],
    day_format_wide => [
      "Atinni",
      "Atalaata",
      "Alarba",
      "Alhamisi",
      "Alzuma",
      "Asibti",
      "Alhadi"
    ],
    day_stand_alone_abbreviated => [
      "Ati",
      "Ata",
      "Ala",
      "Alm",
      "Alz",
      "Asi",
      "Alh"
    ],
    day_stand_alone_narrow => [
      "T",
      "T",
      "L",
      "M",
      "Z",
      "S",
      "H"
    ],
    day_stand_alone_wide => [
      "Atinni",
      "Atalaata",
      "Alarba",
      "Alhamisi",
      "Alzuma",
      "Asibti",
      "Alhadi"
    ],
    era_abbreviated => [
      "IJ",
      "IZ"
    ],
    era_narrow => [
      "IJ",
      "IZ"
    ],
    era_wide => [
      "Isaa jine",
      "Isaa zamanoo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Zarma",
    month_format_abbreviated => [
      "\N{U+017d}an",
      "Fee",
      "Mar",
      "Awi",
      "Me",
      "\N{U+017d}uw",
      "\N{U+017d}uy",
      "Ut",
      "Sek",
      "Okt",
      "Noo",
      "Dee"
    ],
    month_format_narrow => [
      "\N{U+017d}",
      "F",
      "M",
      "A",
      "M",
      "\N{U+017d}",
      "\N{U+017d}",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "\N{U+017d}anwiye",
      "Feewiriye",
      "Marsi",
      "Awiril",
      "Me",
      "\N{U+017d}uwe\N{U+014b}",
      "\N{U+017d}uyye",
      "Ut",
      "Sektanbur",
      "Oktoobur",
      "Noowanbur",
      "Deesanbur"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+017d}an",
      "Fee",
      "Mar",
      "Awi",
      "Me",
      "\N{U+017d}uw",
      "\N{U+017d}uy",
      "Ut",
      "Sek",
      "Okt",
      "Noo",
      "Dee"
    ],
    month_stand_alone_narrow => [
      "\N{U+017d}",
      "F",
      "M",
      "A",
      "M",
      "\N{U+017d}",
      "\N{U+017d}",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "\N{U+017d}anwiye",
      "Feewiriye",
      "Marsi",
      "Awiril",
      "Me",
      "\N{U+017d}uwe\N{U+014b}",
      "\N{U+017d}uyye",
      "Ut",
      "Sektanbur",
      "Oktoobur",
      "Noowanbur",
      "Deesanbur"
    ],
    name => "Zarma",
    native_language => "Zarmaciine",
    native_name => "Zarmaciine",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "A1",
      "A2",
      "A3",
      "A4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Arrubu 1",
      "Arrubu 2",
      "Arrubu 3",
      "Arrubu 4"
    ],
    quarter_stand_alone_abbreviated => [
      "A1",
      "A2",
      "A3",
      "A4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Arrubu 1",
      "Arrubu 2",
      "Arrubu 3",
      "Arrubu 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ dje-NE ]__
  {
    am_pm_abbreviated => [
      "Subbaahi",
      "Zaarikay b"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "dje-NE",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ati",
      "Ata",
      "Ala",
      "Alm",
      "Alz",
      "Asi",
      "Alh"
    ],
    day_format_narrow => [
      "T",
      "T",
      "L",
      "M",
      "Z",
      "S",
      "H"
    ],
    day_format_wide => [
      "Atinni",
      "Atalaata",
      "Alarba",
      "Alhamisi",
      "Alzuma",
      "Asibti",
      "Alhadi"
    ],
    day_stand_alone_abbreviated => [
      "Ati",
      "Ata",
      "Ala",
      "Alm",
      "Alz",
      "Asi",
      "Alh"
    ],
    day_stand_alone_narrow => [
      "T",
      "T",
      "L",
      "M",
      "Z",
      "S",
      "H"
    ],
    day_stand_alone_wide => [
      "Atinni",
      "Atalaata",
      "Alarba",
      "Alhamisi",
      "Alzuma",
      "Asibti",
      "Alhadi"
    ],
    era_abbreviated => [
      "IJ",
      "IZ"
    ],
    era_narrow => [
      "IJ",
      "IZ"
    ],
    era_wide => [
      "Isaa jine",
      "Isaa zamanoo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Zarma",
    month_format_abbreviated => [
      "\N{U+017d}an",
      "Fee",
      "Mar",
      "Awi",
      "Me",
      "\N{U+017d}uw",
      "\N{U+017d}uy",
      "Ut",
      "Sek",
      "Okt",
      "Noo",
      "Dee"
    ],
    month_format_narrow => [
      "\N{U+017d}",
      "F",
      "M",
      "A",
      "M",
      "\N{U+017d}",
      "\N{U+017d}",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "\N{U+017d}anwiye",
      "Feewiriye",
      "Marsi",
      "Awiril",
      "Me",
      "\N{U+017d}uwe\N{U+014b}",
      "\N{U+017d}uyye",
      "Ut",
      "Sektanbur",
      "Oktoobur",
      "Noowanbur",
      "Deesanbur"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+017d}an",
      "Fee",
      "Mar",
      "Awi",
      "Me",
      "\N{U+017d}uw",
      "\N{U+017d}uy",
      "Ut",
      "Sek",
      "Okt",
      "Noo",
      "Dee"
    ],
    month_stand_alone_narrow => [
      "\N{U+017d}",
      "F",
      "M",
      "A",
      "M",
      "\N{U+017d}",
      "\N{U+017d}",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "\N{U+017d}anwiye",
      "Feewiriye",
      "Marsi",
      "Awiril",
      "Me",
      "\N{U+017d}uwe\N{U+014b}",
      "\N{U+017d}uyye",
      "Ut",
      "Sektanbur",
      "Oktoobur",
      "Noowanbur",
      "Deesanbur"
    ],
    name => "Zarma Niger",
    native_language => "Zarmaciine",
    native_name => "Zarmaciine Ni\N{U+017e}er",
    native_script => undef,
    native_territory => "Ni\N{U+017e}er",
    native_variant => undef,
    quarter_format_abbreviated => [
      "A1",
      "A2",
      "A3",
      "A4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Arrubu 1",
      "Arrubu 2",
      "Arrubu 3",
      "Arrubu 4"
    ],
    quarter_stand_alone_abbreviated => [
      "A1",
      "A2",
      "A3",
      "A4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Arrubu 1",
      "Arrubu 2",
      "Arrubu 3",
      "Arrubu 4"
    ],
    script => undef,
    territory => "Niger",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ dsb ]__
  {
    am_pm_abbreviated => [
      "dopo\N{U+0142}dnja",
      "w\N{U+00f3}tpo\N{U+0142}dnja"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, 'zeg'. H:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "'zeg'. H",
      Hm => "'zeg'. H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMd => "MMMM d",
      MMMd => "d. MMM",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "dsb",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d.M.y",
    date_format_short => "d.M.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "p\N{U+00f3}n",
      "wa\N{U+0142}",
      "srj",
      "stw",
      "p\N{U+011b}t",
      "sob",
      "nje"
    ],
    day_format_narrow => [
      "p",
      "w",
      "s",
      "s",
      "p",
      "s",
      "n"
    ],
    day_format_wide => [
      "p\N{U+00f3}nje\N{U+017a}ele",
      "wa\N{U+0142}tora",
      "srjoda",
      "stw\N{U+00f3}rtk",
      "p\N{U+011b}tk",
      "sobota",
      "nje\N{U+017a}ela"
    ],
    day_stand_alone_abbreviated => [
      "p\N{U+00f3}n",
      "wa\N{U+0142}",
      "srj",
      "stw",
      "p\N{U+011b}t",
      "sob",
      "nje"
    ],
    day_stand_alone_narrow => [
      "p",
      "w",
      "s",
      "s",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "p\N{U+00f3}nje\N{U+017a}ele",
      "wa\N{U+0142}tora",
      "srjoda",
      "stw\N{U+00f3}rtk",
      "p\N{U+011b}tk",
      "sobota",
      "nje\N{U+017a}ela"
    ],
    era_abbreviated => [
      "p\N{U+015b}.Chr.n.",
      "p\N{U+00f3} Chr.n."
    ],
    era_narrow => [
      "p\N{U+015b}.Chr.n.",
      "p\N{U+00f3} Chr.n."
    ],
    era_wide => [
      "p\N{U+015b}ed Kristusowym naro\N{U+017a}enim",
      "p\N{U+00f3} Kristusowem naro\N{U+017a}enju"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Lower Sorbian",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "m\N{U+011b}r.",
      "apr.",
      "maj.",
      "jun.",
      "jul.",
      "awg.",
      "sep.",
      "okt.",
      "now.",
      "dec."
    ],
    month_format_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "januara",
      "februara",
      "m\N{U+011b}rca",
      "apryla",
      "maja",
      "junija",
      "julija",
      "awgusta",
      "septembra",
      "oktobra",
      "nowembra",
      "decembra"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "m\N{U+011b}r",
      "apr",
      "maj",
      "jun",
      "jul",
      "awg",
      "sep",
      "okt",
      "now",
      "dec"
    ],
    month_stand_alone_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "m\N{U+011b}rc",
      "apryl",
      "maj",
      "junij",
      "julij",
      "awgust",
      "september",
      "oktober",
      "nowember",
      "december"
    ],
    name => "Lower Sorbian",
    native_language => "dolnoserb\N{U+0161}\N{U+0107}ina",
    native_name => "dolnoserb\N{U+0161}\N{U+0107}ina",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. kwartal",
      "2. kwartal",
      "3. kwartal",
      "4. kwartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. kwartal",
      "2. kwartal",
      "3. kwartal",
      "4. kwartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ dsb-DE ]__
  {
    am_pm_abbreviated => [
      "dopo\N{U+0142}dnja",
      "w\N{U+00f3}tpo\N{U+0142}dnja"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, 'zeg'. H:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "'zeg'. H",
      Hm => "'zeg'. H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMd => "MMMM d",
      MMMd => "d. MMM",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "dsb-DE",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d.M.y",
    date_format_short => "d.M.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "p\N{U+00f3}n",
      "wa\N{U+0142}",
      "srj",
      "stw",
      "p\N{U+011b}t",
      "sob",
      "nje"
    ],
    day_format_narrow => [
      "p",
      "w",
      "s",
      "s",
      "p",
      "s",
      "n"
    ],
    day_format_wide => [
      "p\N{U+00f3}nje\N{U+017a}ele",
      "wa\N{U+0142}tora",
      "srjoda",
      "stw\N{U+00f3}rtk",
      "p\N{U+011b}tk",
      "sobota",
      "nje\N{U+017a}ela"
    ],
    day_stand_alone_abbreviated => [
      "p\N{U+00f3}n",
      "wa\N{U+0142}",
      "srj",
      "stw",
      "p\N{U+011b}t",
      "sob",
      "nje"
    ],
    day_stand_alone_narrow => [
      "p",
      "w",
      "s",
      "s",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "p\N{U+00f3}nje\N{U+017a}ele",
      "wa\N{U+0142}tora",
      "srjoda",
      "stw\N{U+00f3}rtk",
      "p\N{U+011b}tk",
      "sobota",
      "nje\N{U+017a}ela"
    ],
    era_abbreviated => [
      "p\N{U+015b}.Chr.n.",
      "p\N{U+00f3} Chr.n."
    ],
    era_narrow => [
      "p\N{U+015b}.Chr.n.",
      "p\N{U+00f3} Chr.n."
    ],
    era_wide => [
      "p\N{U+015b}ed Kristusowym naro\N{U+017a}enim",
      "p\N{U+00f3} Kristusowem naro\N{U+017a}enju"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Lower Sorbian",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "m\N{U+011b}r.",
      "apr.",
      "maj.",
      "jun.",
      "jul.",
      "awg.",
      "sep.",
      "okt.",
      "now.",
      "dec."
    ],
    month_format_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "januara",
      "februara",
      "m\N{U+011b}rca",
      "apryla",
      "maja",
      "junija",
      "julija",
      "awgusta",
      "septembra",
      "oktobra",
      "nowembra",
      "decembra"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "m\N{U+011b}r",
      "apr",
      "maj",
      "jun",
      "jul",
      "awg",
      "sep",
      "okt",
      "now",
      "dec"
    ],
    month_stand_alone_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "m\N{U+011b}rc",
      "apryl",
      "maj",
      "junij",
      "julij",
      "awgust",
      "september",
      "oktober",
      "nowember",
      "december"
    ],
    name => "Lower Sorbian Germany",
    native_language => "dolnoserb\N{U+0161}\N{U+0107}ina",
    native_name => "dolnoserb\N{U+0161}\N{U+0107}ina Nimska",
    native_script => undef,
    native_territory => "Nimska",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. kwartal",
      "2. kwartal",
      "3. kwartal",
      "4. kwartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. kwartal",
      "2. kwartal",
      "3. kwartal",
      "4. kwartal"
    ],
    script => undef,
    territory => "Germany",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ dua ]__
  {
    am_pm_abbreviated => [
      "idi\N{U+0253}a",
      "eby\N{U+00e1}mu"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "dua",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "m\N{U+0254}\N{U+0301}s",
      "kwa",
      "muk",
      "\N{U+014b}gi",
      "\N{U+0257}\N{U+00f3}n",
      "esa",
      "\N{U+00e9}t"
    ],
    day_format_narrow => [
      "m",
      "k",
      "m",
      "\N{U+014b}",
      "\N{U+0257}",
      "e",
      "e"
    ],
    day_format_wide => [
      "m\N{U+0254}\N{U+0301}s\N{U+00fa}",
      "kwas\N{U+00fa}",
      "muk\N{U+0254}\N{U+0301}s\N{U+00fa}",
      "\N{U+014b}gis\N{U+00fa}",
      "\N{U+0257}\N{U+00f3}n\N{U+025b}s\N{U+00fa}",
      "esa\N{U+0253}as\N{U+00fa}",
      "\N{U+00e9}ti"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+0254}\N{U+0301}s",
      "kwa",
      "muk",
      "\N{U+014b}gi",
      "\N{U+0257}\N{U+00f3}n",
      "esa",
      "\N{U+00e9}t"
    ],
    day_stand_alone_narrow => [
      "m",
      "k",
      "m",
      "\N{U+014b}",
      "\N{U+0257}",
      "e",
      "e"
    ],
    day_stand_alone_wide => [
      "m\N{U+0254}\N{U+0301}s\N{U+00fa}",
      "kwas\N{U+00fa}",
      "muk\N{U+0254}\N{U+0301}s\N{U+00fa}",
      "\N{U+014b}gis\N{U+00fa}",
      "\N{U+0257}\N{U+00f3}n\N{U+025b}s\N{U+00fa}",
      "esa\N{U+0253}as\N{U+00fa}",
      "\N{U+00e9}ti"
    ],
    era_abbreviated => [
      "\N{U+0253}.Ys",
      "mb.Ys"
    ],
    era_narrow => [
      "\N{U+0253}.Ys",
      "mb.Ys"
    ],
    era_wide => [
      "\N{U+0253}oso \N{U+0253}w\N{U+00e1} y\N{U+00e1}\N{U+0253}e l\N{U+00e1}",
      "mb\N{U+00fa}sa kw\N{U+00e9}di a Y\N{U+00e9}s"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Duala",
    month_format_abbreviated => [
      "di",
      "\N{U+014b}g\N{U+0254}n",
      "s\N{U+0254}\N{U+014b}",
      "di\N{U+0253}",
      "emi",
      "es\N{U+0254}",
      "mad",
      "di\N{U+014b}",
      "ny\N{U+025b}t",
      "may",
      "tin",
      "el\N{U+00e1}"
    ],
    month_format_narrow => [
      "d",
      "\N{U+014b}",
      "s",
      "d",
      "e",
      "e",
      "m",
      "d",
      "n",
      "m",
      "t",
      "e"
    ],
    month_format_wide => [
      "dim\N{U+0254}\N{U+0301}di",
      "\N{U+014b}g\N{U+0254}nd\N{U+025b}",
      "s\N{U+0254}\N{U+014b}\N{U+025b}",
      "di\N{U+0253}\N{U+00e1}\N{U+0253}\N{U+00e1}",
      "emiasele",
      "es\N{U+0254}p\N{U+025b}s\N{U+0254}p\N{U+025b}",
      "madi\N{U+0253}\N{U+025b}\N{U+0301}d\N{U+00ed}\N{U+0253}\N{U+025b}\N{U+0301}",
      "di\N{U+014b}gindi",
      "ny\N{U+025b}t\N{U+025b}ki",
      "may\N{U+00e9}s\N{U+025b}\N{U+0301}",
      "tin\N{U+00ed}n\N{U+00ed}",
      "el\N{U+00e1}\N{U+014b}g\N{U+025b}\N{U+0301}"
    ],
    month_stand_alone_abbreviated => [
      "di",
      "\N{U+014b}g\N{U+0254}n",
      "s\N{U+0254}\N{U+014b}",
      "di\N{U+0253}",
      "emi",
      "es\N{U+0254}",
      "mad",
      "di\N{U+014b}",
      "ny\N{U+025b}t",
      "may",
      "tin",
      "el\N{U+00e1}"
    ],
    month_stand_alone_narrow => [
      "d",
      "\N{U+014b}",
      "s",
      "d",
      "e",
      "e",
      "m",
      "d",
      "n",
      "m",
      "t",
      "e"
    ],
    month_stand_alone_wide => [
      "dim\N{U+0254}\N{U+0301}di",
      "\N{U+014b}g\N{U+0254}nd\N{U+025b}",
      "s\N{U+0254}\N{U+014b}\N{U+025b}",
      "di\N{U+0253}\N{U+00e1}\N{U+0253}\N{U+00e1}",
      "emiasele",
      "es\N{U+0254}p\N{U+025b}s\N{U+0254}p\N{U+025b}",
      "madi\N{U+0253}\N{U+025b}\N{U+0301}d\N{U+00ed}\N{U+0253}\N{U+025b}\N{U+0301}",
      "di\N{U+014b}gindi",
      "ny\N{U+025b}t\N{U+025b}ki",
      "may\N{U+00e9}s\N{U+025b}\N{U+0301}",
      "tin\N{U+00ed}n\N{U+00ed}",
      "el\N{U+00e1}\N{U+014b}g\N{U+025b}\N{U+0301}"
    ],
    name => "Duala",
    native_language => "du\N{U+00e1}l\N{U+00e1}",
    native_name => "du\N{U+00e1}l\N{U+00e1}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "ndu1",
      "ndu2",
      "ndu3",
      "ndu4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "nd\N{U+00fa}mb\N{U+016b} ny\N{U+00e1} \N{U+0253}os\N{U+00f3}",
      "nd\N{U+00fa}mb\N{U+016b} n\N{U+00ed} l\N{U+00f3}nd\N{U+025b}\N{U+0301} \N{U+00ed}\N{U+0253}a\N{U+00e1}",
      "nd\N{U+00fa}mb\N{U+016b} n\N{U+00ed} l\N{U+00f3}nd\N{U+025b}\N{U+0301} \N{U+00ed}l\N{U+00e1}lo",
      "nd\N{U+00fa}mb\N{U+016b} n\N{U+00ed} l\N{U+00f3}nd\N{U+025b}\N{U+0301} \N{U+00ed}n\N{U+025b}\N{U+0301}y"
    ],
    quarter_stand_alone_abbreviated => [
      "ndu1",
      "ndu2",
      "ndu3",
      "ndu4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "nd\N{U+00fa}mb\N{U+016b} ny\N{U+00e1} \N{U+0253}os\N{U+00f3}",
      "nd\N{U+00fa}mb\N{U+016b} n\N{U+00ed} l\N{U+00f3}nd\N{U+025b}\N{U+0301} \N{U+00ed}\N{U+0253}a\N{U+00e1}",
      "nd\N{U+00fa}mb\N{U+016b} n\N{U+00ed} l\N{U+00f3}nd\N{U+025b}\N{U+0301} \N{U+00ed}l\N{U+00e1}lo",
      "nd\N{U+00fa}mb\N{U+016b} n\N{U+00ed} l\N{U+00f3}nd\N{U+025b}\N{U+0301} \N{U+00ed}n\N{U+025b}\N{U+0301}y"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ dua-CM ]__
  {
    am_pm_abbreviated => [
      "idi\N{U+0253}a",
      "eby\N{U+00e1}mu"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "dua-CM",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "m\N{U+0254}\N{U+0301}s",
      "kwa",
      "muk",
      "\N{U+014b}gi",
      "\N{U+0257}\N{U+00f3}n",
      "esa",
      "\N{U+00e9}t"
    ],
    day_format_narrow => [
      "m",
      "k",
      "m",
      "\N{U+014b}",
      "\N{U+0257}",
      "e",
      "e"
    ],
    day_format_wide => [
      "m\N{U+0254}\N{U+0301}s\N{U+00fa}",
      "kwas\N{U+00fa}",
      "muk\N{U+0254}\N{U+0301}s\N{U+00fa}",
      "\N{U+014b}gis\N{U+00fa}",
      "\N{U+0257}\N{U+00f3}n\N{U+025b}s\N{U+00fa}",
      "esa\N{U+0253}as\N{U+00fa}",
      "\N{U+00e9}ti"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+0254}\N{U+0301}s",
      "kwa",
      "muk",
      "\N{U+014b}gi",
      "\N{U+0257}\N{U+00f3}n",
      "esa",
      "\N{U+00e9}t"
    ],
    day_stand_alone_narrow => [
      "m",
      "k",
      "m",
      "\N{U+014b}",
      "\N{U+0257}",
      "e",
      "e"
    ],
    day_stand_alone_wide => [
      "m\N{U+0254}\N{U+0301}s\N{U+00fa}",
      "kwas\N{U+00fa}",
      "muk\N{U+0254}\N{U+0301}s\N{U+00fa}",
      "\N{U+014b}gis\N{U+00fa}",
      "\N{U+0257}\N{U+00f3}n\N{U+025b}s\N{U+00fa}",
      "esa\N{U+0253}as\N{U+00fa}",
      "\N{U+00e9}ti"
    ],
    era_abbreviated => [
      "\N{U+0253}.Ys",
      "mb.Ys"
    ],
    era_narrow => [
      "\N{U+0253}.Ys",
      "mb.Ys"
    ],
    era_wide => [
      "\N{U+0253}oso \N{U+0253}w\N{U+00e1} y\N{U+00e1}\N{U+0253}e l\N{U+00e1}",
      "mb\N{U+00fa}sa kw\N{U+00e9}di a Y\N{U+00e9}s"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Duala",
    month_format_abbreviated => [
      "di",
      "\N{U+014b}g\N{U+0254}n",
      "s\N{U+0254}\N{U+014b}",
      "di\N{U+0253}",
      "emi",
      "es\N{U+0254}",
      "mad",
      "di\N{U+014b}",
      "ny\N{U+025b}t",
      "may",
      "tin",
      "el\N{U+00e1}"
    ],
    month_format_narrow => [
      "d",
      "\N{U+014b}",
      "s",
      "d",
      "e",
      "e",
      "m",
      "d",
      "n",
      "m",
      "t",
      "e"
    ],
    month_format_wide => [
      "dim\N{U+0254}\N{U+0301}di",
      "\N{U+014b}g\N{U+0254}nd\N{U+025b}",
      "s\N{U+0254}\N{U+014b}\N{U+025b}",
      "di\N{U+0253}\N{U+00e1}\N{U+0253}\N{U+00e1}",
      "emiasele",
      "es\N{U+0254}p\N{U+025b}s\N{U+0254}p\N{U+025b}",
      "madi\N{U+0253}\N{U+025b}\N{U+0301}d\N{U+00ed}\N{U+0253}\N{U+025b}\N{U+0301}",
      "di\N{U+014b}gindi",
      "ny\N{U+025b}t\N{U+025b}ki",
      "may\N{U+00e9}s\N{U+025b}\N{U+0301}",
      "tin\N{U+00ed}n\N{U+00ed}",
      "el\N{U+00e1}\N{U+014b}g\N{U+025b}\N{U+0301}"
    ],
    month_stand_alone_abbreviated => [
      "di",
      "\N{U+014b}g\N{U+0254}n",
      "s\N{U+0254}\N{U+014b}",
      "di\N{U+0253}",
      "emi",
      "es\N{U+0254}",
      "mad",
      "di\N{U+014b}",
      "ny\N{U+025b}t",
      "may",
      "tin",
      "el\N{U+00e1}"
    ],
    month_stand_alone_narrow => [
      "d",
      "\N{U+014b}",
      "s",
      "d",
      "e",
      "e",
      "m",
      "d",
      "n",
      "m",
      "t",
      "e"
    ],
    month_stand_alone_wide => [
      "dim\N{U+0254}\N{U+0301}di",
      "\N{U+014b}g\N{U+0254}nd\N{U+025b}",
      "s\N{U+0254}\N{U+014b}\N{U+025b}",
      "di\N{U+0253}\N{U+00e1}\N{U+0253}\N{U+00e1}",
      "emiasele",
      "es\N{U+0254}p\N{U+025b}s\N{U+0254}p\N{U+025b}",
      "madi\N{U+0253}\N{U+025b}\N{U+0301}d\N{U+00ed}\N{U+0253}\N{U+025b}\N{U+0301}",
      "di\N{U+014b}gindi",
      "ny\N{U+025b}t\N{U+025b}ki",
      "may\N{U+00e9}s\N{U+025b}\N{U+0301}",
      "tin\N{U+00ed}n\N{U+00ed}",
      "el\N{U+00e1}\N{U+014b}g\N{U+025b}\N{U+0301}"
    ],
    name => "Duala Cameroon",
    native_language => "du\N{U+00e1}l\N{U+00e1}",
    native_name => "du\N{U+00e1}l\N{U+00e1} Cameroun",
    native_script => undef,
    native_territory => "Cameroun",
    native_variant => undef,
    quarter_format_abbreviated => [
      "ndu1",
      "ndu2",
      "ndu3",
      "ndu4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "nd\N{U+00fa}mb\N{U+016b} ny\N{U+00e1} \N{U+0253}os\N{U+00f3}",
      "nd\N{U+00fa}mb\N{U+016b} n\N{U+00ed} l\N{U+00f3}nd\N{U+025b}\N{U+0301} \N{U+00ed}\N{U+0253}a\N{U+00e1}",
      "nd\N{U+00fa}mb\N{U+016b} n\N{U+00ed} l\N{U+00f3}nd\N{U+025b}\N{U+0301} \N{U+00ed}l\N{U+00e1}lo",
      "nd\N{U+00fa}mb\N{U+016b} n\N{U+00ed} l\N{U+00f3}nd\N{U+025b}\N{U+0301} \N{U+00ed}n\N{U+025b}\N{U+0301}y"
    ],
    quarter_stand_alone_abbreviated => [
      "ndu1",
      "ndu2",
      "ndu3",
      "ndu4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "nd\N{U+00fa}mb\N{U+016b} ny\N{U+00e1} \N{U+0253}os\N{U+00f3}",
      "nd\N{U+00fa}mb\N{U+016b} n\N{U+00ed} l\N{U+00f3}nd\N{U+025b}\N{U+0301} \N{U+00ed}\N{U+0253}a\N{U+00e1}",
      "nd\N{U+00fa}mb\N{U+016b} n\N{U+00ed} l\N{U+00f3}nd\N{U+025b}\N{U+0301} \N{U+00ed}l\N{U+00e1}lo",
      "nd\N{U+00fa}mb\N{U+016b} n\N{U+00ed} l\N{U+00f3}nd\N{U+025b}\N{U+0301} \N{U+00ed}n\N{U+025b}\N{U+0301}y"
    ],
    script => undef,
    territory => "Cameroon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ dyo ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "dyo",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ten",
      "Tal",
      "Ala",
      "Ara",
      "Arj",
      "Sib",
      "Dim"
    ],
    day_format_narrow => [
      "T",
      "T",
      "A",
      "A",
      "A",
      "S",
      "D"
    ],
    day_format_wide => [
      "Tene\N{U+014b}",
      "Talata",
      "Alarbay",
      "Aramisay",
      "Arjuma",
      "Sibiti",
      "Dimas"
    ],
    day_stand_alone_abbreviated => [
      "Ten",
      "Tal",
      "Ala",
      "Ara",
      "Arj",
      "Sib",
      "Dim"
    ],
    day_stand_alone_narrow => [
      "T",
      "T",
      "A",
      "A",
      "A",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "Tene\N{U+014b}",
      "Talata",
      "Alarbay",
      "Aramisay",
      "Arjuma",
      "Sibiti",
      "Dimas"
    ],
    era_abbreviated => [
      "ArY",
      "AtY"
    ],
    era_narrow => [
      "ArY",
      "AtY"
    ],
    era_wide => [
      "Ari\N{U+014b}uu Yeesu",
      "Atoo\N{U+014b}e Yeesu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Jola-Fonyi",
    month_format_abbreviated => [
      "Sa",
      "Fe",
      "Ma",
      "Ab",
      "Me",
      "Su",
      "S\N{U+00fa}",
      "Ut",
      "Se",
      "Ok",
      "No",
      "De"
    ],
    month_format_narrow => [
      "S",
      "F",
      "M",
      "A",
      "M",
      "S",
      "S",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Sanvie",
      "F\N{U+00e9}birie",
      "Mars",
      "Aburil",
      "Mee",
      "Sue\N{U+014b}",
      "S\N{U+00fa}uyee",
      "Ut",
      "Settembar",
      "Oktobar",
      "Novembar",
      "Disambar"
    ],
    month_stand_alone_abbreviated => [
      "Sa",
      "Fe",
      "Ma",
      "Ab",
      "Me",
      "Su",
      "S\N{U+00fa}",
      "Ut",
      "Se",
      "Ok",
      "No",
      "De"
    ],
    month_stand_alone_narrow => [
      "S",
      "F",
      "M",
      "A",
      "M",
      "S",
      "S",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Sanvie",
      "F\N{U+00e9}birie",
      "Mars",
      "Aburil",
      "Mee",
      "Sue\N{U+014b}",
      "S\N{U+00fa}uyee",
      "Ut",
      "Settembar",
      "Oktobar",
      "Novembar",
      "Disambar"
    ],
    name => "Jola-Fonyi",
    native_language => "joola",
    native_name => "joola",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ dyo-SN ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "dyo-SN",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ten",
      "Tal",
      "Ala",
      "Ara",
      "Arj",
      "Sib",
      "Dim"
    ],
    day_format_narrow => [
      "T",
      "T",
      "A",
      "A",
      "A",
      "S",
      "D"
    ],
    day_format_wide => [
      "Tene\N{U+014b}",
      "Talata",
      "Alarbay",
      "Aramisay",
      "Arjuma",
      "Sibiti",
      "Dimas"
    ],
    day_stand_alone_abbreviated => [
      "Ten",
      "Tal",
      "Ala",
      "Ara",
      "Arj",
      "Sib",
      "Dim"
    ],
    day_stand_alone_narrow => [
      "T",
      "T",
      "A",
      "A",
      "A",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "Tene\N{U+014b}",
      "Talata",
      "Alarbay",
      "Aramisay",
      "Arjuma",
      "Sibiti",
      "Dimas"
    ],
    era_abbreviated => [
      "ArY",
      "AtY"
    ],
    era_narrow => [
      "ArY",
      "AtY"
    ],
    era_wide => [
      "Ari\N{U+014b}uu Yeesu",
      "Atoo\N{U+014b}e Yeesu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Jola-Fonyi",
    month_format_abbreviated => [
      "Sa",
      "Fe",
      "Ma",
      "Ab",
      "Me",
      "Su",
      "S\N{U+00fa}",
      "Ut",
      "Se",
      "Ok",
      "No",
      "De"
    ],
    month_format_narrow => [
      "S",
      "F",
      "M",
      "A",
      "M",
      "S",
      "S",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Sanvie",
      "F\N{U+00e9}birie",
      "Mars",
      "Aburil",
      "Mee",
      "Sue\N{U+014b}",
      "S\N{U+00fa}uyee",
      "Ut",
      "Settembar",
      "Oktobar",
      "Novembar",
      "Disambar"
    ],
    month_stand_alone_abbreviated => [
      "Sa",
      "Fe",
      "Ma",
      "Ab",
      "Me",
      "Su",
      "S\N{U+00fa}",
      "Ut",
      "Se",
      "Ok",
      "No",
      "De"
    ],
    month_stand_alone_narrow => [
      "S",
      "F",
      "M",
      "A",
      "M",
      "S",
      "S",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Sanvie",
      "F\N{U+00e9}birie",
      "Mars",
      "Aburil",
      "Mee",
      "Sue\N{U+014b}",
      "S\N{U+00fa}uyee",
      "Ut",
      "Settembar",
      "Oktobar",
      "Novembar",
      "Disambar"
    ],
    name => "Jola-Fonyi Senegal",
    native_language => "joola",
    native_name => "joola Senegal",
    native_script => undef,
    native_territory => "Senegal",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Senegal",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ dz ]__
  {
    am_pm_abbreviated => [
      "\N{U+0f66}\N{U+0f94}\N{U+0f0b}\N{U+0f46}\N{U+0f0b}",
      "\N{U+0f55}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f46}\N{U+0f0b}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y \N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}MMM",
      GyMMMEd => "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}E, G \N{U+0f63}\N{U+0f7c}y \N{U+0f5f}\N{U+0fb3}\N{U+0f0b}MMM \N{U+0f5a}\N{U+0f7a}\N{U+0f0b}d",
      GyMMMd => "G y MMM d",
      H => "\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}\N{U+0f0b}HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M-d",
      MMM => "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}LLL",
      MMMEd => "E, \N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}LLL \N{U+0f5a}\N{U+0f7a}\N{U+0f0b}d",
      MMMMd => "MMMM d",
      MMMd => "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}LLL \N{U+0f5a}\N{U+0f7a}\N{U+0f0b}d",
      Md => "M-d",
      d => "d",
      h => "\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}\N{U+0f0b}h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-M",
      yMEd => "E, y-M-d",
      yMMM => "y \N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}MMM",
      yMMMEd => "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}E, \N{U+0f63}\N{U+0f7c}y \N{U+0f5f}\N{U+0fb3}\N{U+0f0b}MMM \N{U+0f5a}\N{U+0f7a}\N{U+0f0b}d",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-M-d",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "dz",
    date_format_full => "EEEE, \N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}y MMMM \N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}dd",
    date_format_long => "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}y MMMM \N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b} dd",
    date_format_medium => "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}y \N{U+0f5f}\N{U+0fb3}\N{U+0f0b}MMM \N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}dd",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0f58}\N{U+0f72}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}",
      "\N{U+0f49}\N{U+0f72}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}"
    ],
    day_format_narrow => [
      "\N{U+0f58}\N{U+0f72}\N{U+0f62}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}",
      "\N{U+0f66}\N{U+0f44}\N{U+0fb6}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}",
      "\N{U+0f49}\N{U+0f72}",
      "\N{U+0f5f}\N{U+0fb3}"
    ],
    day_format_wide => [
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f58}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f51}\N{U+0f58}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}\N{U+0f56}\N{U+0f74}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f49}\N{U+0f72}\N{U+0f0b}\N{U+0f58}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0f58}\N{U+0f72}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}",
      "\N{U+0f49}\N{U+0f72}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0f58}\N{U+0f72}\N{U+0f62}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}",
      "\N{U+0f66}\N{U+0f44}\N{U+0fb6}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}",
      "\N{U+0f49}\N{U+0f72}",
      "\N{U+0f5f}\N{U+0fb3}"
    ],
    day_stand_alone_wide => [
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f58}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f51}\N{U+0f58}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}\N{U+0f56}\N{U+0f74}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f49}\N{U+0f72}\N{U+0f0b}\N{U+0f58}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Dzongkha",
    month_format_abbreviated => [
      "\N{U+0f21}",
      "\N{U+0f22}",
      "\N{U+0f23}",
      "\N{U+0f24}",
      "\N{U+0f25}",
      "\N{U+0f26}",
      "\N{U+0f27}",
      "\N{U+0f28}",
      "\N{U+0f29}",
      "\N{U+0f21}\N{U+0f20}",
      "\N{U+0f21}\N{U+0f21}",
      12
    ],
    month_format_narrow => [
      "\N{U+0f21}",
      "\N{U+0f22}",
      "\N{U+0f23}",
      4,
      "\N{U+0f25}",
      "\N{U+0f26}",
      "\N{U+0f27}",
      "\N{U+0f28}",
      9,
      "\N{U+0f21}\N{U+0f20}",
      "\N{U+0f21}\N{U+0f21}",
      "\N{U+0f21}\N{U+0f22}"
    ],
    month_format_wide => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f63}\N{U+0f94}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f51}\N{U+0fb2}\N{U+0f74}\N{U+0f42}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f51}\N{U+0f74}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f62}\N{U+0f92}\N{U+0fb1}\N{U+0f51}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f51}\N{U+0f42}\N{U+0f74}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f45}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f22}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f23}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f24}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f25}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f26}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f27}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f28}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f29}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f20}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f21}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f22}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0f21}",
      "\N{U+0f22}",
      "\N{U+0f23}",
      "\N{U+0f24}",
      "\N{U+0f25}",
      "\N{U+0f26}",
      "\N{U+0f27}",
      "\N{U+0f28}",
      "\N{U+0f29}",
      "\N{U+0f21}\N{U+0f20}",
      "\N{U+0f21}\N{U+0f21}",
      "\N{U+0f21}\N{U+0f22}"
    ],
    month_stand_alone_wide => [
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f63}\N{U+0f94}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f51}\N{U+0fb2}\N{U+0f74}\N{U+0f42}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f51}\N{U+0f74}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f62}\N{U+0f92}\N{U+0fb1}\N{U+0f51}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f51}\N{U+0f42}\N{U+0f74}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f45}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}"
    ],
    name => "Dzongkha",
    native_language => "\N{U+0f62}\N{U+0fab}\N{U+0f7c}\N{U+0f44}\N{U+0f0b}\N{U+0f41}",
    native_name => "\N{U+0f62}\N{U+0fab}\N{U+0f7c}\N{U+0f44}\N{U+0f0b}\N{U+0f41}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f21}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f22}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f23}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f24}"
    ],
    quarter_format_narrow => [
      "\N{U+0f21}",
      "\N{U+0f22}",
      "\N{U+0f23}",
      "\N{U+0f24}"
    ],
    quarter_format_wide => [
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f21}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f22}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f23}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f24}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0f21}",
      "\N{U+0f22}",
      "\N{U+0f23}",
      "\N{U+0f24}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}\N{U+0f0b} h \N{U+0f66}\N{U+0f90}\N{U+0f62}\N{U+0f0b}\N{U+0f58}\N{U+0f0b} mm:ss a zzzz",
    time_format_long => "\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}\N{U+0f0b} h \N{U+0f66}\N{U+0f90}\N{U+0f62}\N{U+0f0b}\N{U+0f58}\N{U+0f0b} mm:ss a z",
    time_format_medium => "\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}\N{U+0f0b}h:mm:ss a",
    time_format_short => "\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}\N{U+0f0b} h \N{U+0f66}\N{U+0f90}\N{U+0f62}\N{U+0f0b}\N{U+0f58}\N{U+0f0b} mm a",
    variant => undef,
    version => 29
  }
  __[ dz-BT ]__
  {
    am_pm_abbreviated => [
      "\N{U+0f66}\N{U+0f94}\N{U+0f0b}\N{U+0f46}\N{U+0f0b}",
      "\N{U+0f55}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f46}\N{U+0f0b}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y \N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}MMM",
      GyMMMEd => "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}E, G \N{U+0f63}\N{U+0f7c}y \N{U+0f5f}\N{U+0fb3}\N{U+0f0b}MMM \N{U+0f5a}\N{U+0f7a}\N{U+0f0b}d",
      GyMMMd => "G y MMM d",
      H => "\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}\N{U+0f0b}HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M-d",
      MMM => "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}LLL",
      MMMEd => "E, \N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}LLL \N{U+0f5a}\N{U+0f7a}\N{U+0f0b}d",
      MMMMd => "MMMM d",
      MMMd => "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}LLL \N{U+0f5a}\N{U+0f7a}\N{U+0f0b}d",
      Md => "M-d",
      d => "d",
      h => "\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}\N{U+0f0b}h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-M",
      yMEd => "E, y-M-d",
      yMMM => "y \N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}MMM",
      yMMMEd => "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}E, \N{U+0f63}\N{U+0f7c}y \N{U+0f5f}\N{U+0fb3}\N{U+0f0b}MMM \N{U+0f5a}\N{U+0f7a}\N{U+0f0b}d",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-M-d",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "dz-BT",
    date_format_full => "EEEE, \N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}y MMMM \N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}dd",
    date_format_long => "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}y MMMM \N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b} dd",
    date_format_medium => "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}\N{U+0f0b}y \N{U+0f5f}\N{U+0fb3}\N{U+0f0b}MMM \N{U+0f5a}\N{U+0f7a}\N{U+0f66}\N{U+0f0b}dd",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0f58}\N{U+0f72}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}",
      "\N{U+0f49}\N{U+0f72}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}"
    ],
    day_format_narrow => [
      "\N{U+0f58}\N{U+0f72}\N{U+0f62}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}",
      "\N{U+0f66}\N{U+0f44}\N{U+0fb6}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}",
      "\N{U+0f49}\N{U+0f72}",
      "\N{U+0f5f}\N{U+0fb3}"
    ],
    day_format_wide => [
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f58}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f51}\N{U+0f58}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}\N{U+0f56}\N{U+0f74}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f49}\N{U+0f72}\N{U+0f0b}\N{U+0f58}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0f58}\N{U+0f72}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}",
      "\N{U+0f49}\N{U+0f72}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0f58}\N{U+0f72}\N{U+0f62}",
      "\N{U+0f63}\N{U+0fb7}\N{U+0f42}",
      "\N{U+0f55}\N{U+0f74}\N{U+0f62}",
      "\N{U+0f66}\N{U+0f44}\N{U+0fb6}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}",
      "\N{U+0f49}\N{U+0f72}",
      "\N{U+0f5f}\N{U+0fb3}"
    ],
    day_stand_alone_wide => [
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f58}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f51}\N{U+0f58}\N{U+0f62}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f63}\N{U+0fb7}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f55}\N{U+0f74}\N{U+0f62}\N{U+0f0b}\N{U+0f56}\N{U+0f74}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}\N{U+0f66}\N{U+0f44}\N{U+0f66}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f66}\N{U+0fa4}\N{U+0f7a}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f49}\N{U+0f72}\N{U+0f0b}\N{U+0f58}\N{U+0f0b}",
      "\N{U+0f42}\N{U+0f5f}\N{U+0f60}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f0b}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "\N{U+0f54}\N{U+0f66}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}%y\N{U+0f5f}\N{U+0f63}%m\N{U+0f5a}\N{U+0f7a}\N{U+0f66}%d",
    glibc_datetime_format => "\N{U+0f54}\N{U+0f66}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f63}\N{U+0f7c}%y\N{U+0f5f}\N{U+0f63}%m\N{U+0f5a}\N{U+0f7a}\N{U+0f66}%d\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}%H\N{U+0f40}\N{U+0f66}\N{U+0f62}\N{U+0f0b}\N{U+0f58}%M\N{U+0f40}\N{U+0f66}\N{U+0f62}\N{U+0f0b}\N{U+0f46}%S",
    glibc_time_12_format => "\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}%I\N{U+0f40}\N{U+0f66}\N{U+0f62}\N{U+0f0b}\N{U+0f58}%M\N{U+0f40}\N{U+0f66}\N{U+0f62}\N{U+0f0b}\N{U+0f46}%S %p",
    glibc_time_format => "\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}%H\N{U+0f40}\N{U+0f66}\N{U+0f62}\N{U+0f0b}\N{U+0f58}%M\N{U+0f40}\N{U+0f66}\N{U+0f62}\N{U+0f0b}\N{U+0f46}%S",
    language => "Dzongkha",
    month_format_abbreviated => [
      "\N{U+0f21}",
      "\N{U+0f22}",
      "\N{U+0f23}",
      "\N{U+0f24}",
      "\N{U+0f25}",
      "\N{U+0f26}",
      "\N{U+0f27}",
      "\N{U+0f28}",
      "\N{U+0f29}",
      "\N{U+0f21}\N{U+0f20}",
      "\N{U+0f21}\N{U+0f21}",
      12
    ],
    month_format_narrow => [
      "\N{U+0f21}",
      "\N{U+0f22}",
      "\N{U+0f23}",
      4,
      "\N{U+0f25}",
      "\N{U+0f26}",
      "\N{U+0f27}",
      "\N{U+0f28}",
      9,
      "\N{U+0f21}\N{U+0f20}",
      "\N{U+0f21}\N{U+0f21}",
      "\N{U+0f21}\N{U+0f22}"
    ],
    month_format_wide => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f63}\N{U+0f94}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f51}\N{U+0fb2}\N{U+0f74}\N{U+0f42}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f51}\N{U+0f74}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f62}\N{U+0f92}\N{U+0fb1}\N{U+0f51}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f51}\N{U+0f42}\N{U+0f74}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f45}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f22}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f23}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f24}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f25}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f26}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f27}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f28}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f29}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f20}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f21}",
      "\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f21}\N{U+0f22}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0f21}",
      "\N{U+0f22}",
      "\N{U+0f23}",
      "\N{U+0f24}",
      "\N{U+0f25}",
      "\N{U+0f26}",
      "\N{U+0f27}",
      "\N{U+0f28}",
      "\N{U+0f29}",
      "\N{U+0f21}\N{U+0f20}",
      "\N{U+0f21}\N{U+0f21}",
      "\N{U+0f21}\N{U+0f22}"
    ],
    month_stand_alone_wide => [
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f63}\N{U+0f94}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f51}\N{U+0fb2}\N{U+0f74}\N{U+0f42}\N{U+0f0b}\N{U+0f54}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f51}\N{U+0f74}\N{U+0f53}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f62}\N{U+0f92}\N{U+0fb1}\N{U+0f51}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f51}\N{U+0f42}\N{U+0f74}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f45}\N{U+0f72}\N{U+0f42}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f66}\N{U+0fa4}\N{U+0fb1}\N{U+0f72}\N{U+0f0b}\N{U+0f5f}\N{U+0fb3}\N{U+0f0b}\N{U+0f56}\N{U+0f45}\N{U+0f74}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}"
    ],
    name => "Dzongkha Bhutan",
    native_language => "\N{U+0f62}\N{U+0fab}\N{U+0f7c}\N{U+0f44}\N{U+0f0b}\N{U+0f41}",
    native_name => "\N{U+0f62}\N{U+0fab}\N{U+0f7c}\N{U+0f44}\N{U+0f0b}\N{U+0f41} \N{U+0f60}\N{U+0f56}\N{U+0fb2}\N{U+0f74}\N{U+0f42}",
    native_script => undef,
    native_territory => "\N{U+0f60}\N{U+0f56}\N{U+0fb2}\N{U+0f74}\N{U+0f42}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f21}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f22}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f23}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f24}"
    ],
    quarter_format_narrow => [
      "\N{U+0f21}",
      "\N{U+0f22}",
      "\N{U+0f23}",
      "\N{U+0f24}"
    ],
    quarter_format_wide => [
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f21}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f22}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f23}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f24}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0f21}",
      "\N{U+0f22}",
      "\N{U+0f23}",
      "\N{U+0f24}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f51}\N{U+0f44}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f42}\N{U+0f49}\N{U+0f72}\N{U+0f66}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f42}\N{U+0f66}\N{U+0f74}\N{U+0f58}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}",
      "\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f51}\N{U+0f54}\N{U+0fb1}\N{U+0f0b}\N{U+0f56}\N{U+0f5e}\N{U+0f72}\N{U+0f0b}\N{U+0f54}\N{U+0f0b}"
    ],
    script => undef,
    territory => "Bhutan",
    time_format_full => "\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}\N{U+0f0b} h \N{U+0f66}\N{U+0f90}\N{U+0f62}\N{U+0f0b}\N{U+0f58}\N{U+0f0b} mm:ss a zzzz",
    time_format_long => "\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}\N{U+0f0b} h \N{U+0f66}\N{U+0f90}\N{U+0f62}\N{U+0f0b}\N{U+0f58}\N{U+0f0b} mm:ss a z",
    time_format_medium => "\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}\N{U+0f0b}h:mm:ss a",
    time_format_short => "\N{U+0f46}\N{U+0f74}\N{U+0f0b}\N{U+0f5a}\N{U+0f7c}\N{U+0f51}\N{U+0f0b} h \N{U+0f66}\N{U+0f90}\N{U+0f62}\N{U+0f0b}\N{U+0f58}\N{U+0f0b} mm a",
    variant => undef,
    version => 29
  }
  __[ ebu ]__
  {
    am_pm_abbreviated => [
      "KI",
      "UT"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ebu",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Tat",
      "Ine",
      "Tan",
      "Arm",
      "Maa",
      "NMM",
      "Kma"
    ],
    day_format_narrow => [
      "N",
      "N",
      "N",
      "A",
      "M",
      "N",
      "K"
    ],
    day_format_wide => [
      "Njumatatu",
      "Njumaine",
      "Njumatano",
      "Aramithi",
      "Njumaa",
      "NJumamothii",
      "Kiumia"
    ],
    day_stand_alone_abbreviated => [
      "Tat",
      "Ine",
      "Tan",
      "Arm",
      "Maa",
      "NMM",
      "Kma"
    ],
    day_stand_alone_narrow => [
      "N",
      "N",
      "N",
      "A",
      "M",
      "N",
      "K"
    ],
    day_stand_alone_wide => [
      "Njumatatu",
      "Njumaine",
      "Njumatano",
      "Aramithi",
      "Njumaa",
      "NJumamothii",
      "Kiumia"
    ],
    era_abbreviated => [
      "MK",
      "TK"
    ],
    era_narrow => [
      "MK",
      "TK"
    ],
    era_wide => [
      "Mbere ya Kristo",
      "Thutha wa Kristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Embu",
    month_format_abbreviated => [
      "Mbe",
      "Kai",
      "Kat",
      "Kan",
      "Gat",
      "Gan",
      "Mug",
      "Knn",
      "Ken",
      "Iku",
      "Imw",
      "Igi"
    ],
    month_format_narrow => [
      "M",
      "K",
      "K",
      "K",
      "G",
      "G",
      "M",
      "K",
      "K",
      "I",
      "I",
      "I"
    ],
    month_format_wide => [
      "Mweri wa mbere",
      "Mweri wa ka\N{U+0129}ri",
      "Mweri wa kathat\N{U+0169}",
      "Mweri wa kana",
      "Mweri wa gatano",
      "Mweri wa gatantat\N{U+0169}",
      "Mweri wa m\N{U+0169}gwanja",
      "Mweri wa kanana",
      "Mweri wa kenda",
      "Mweri wa ik\N{U+0169}mi",
      "Mweri wa ik\N{U+0169}mi na \N{U+0169}mwe",
      "Mweri wa ik\N{U+0169}mi na Ka\N{U+0129}r\N{U+0129}"
    ],
    month_stand_alone_abbreviated => [
      "Mbe",
      "Kai",
      "Kat",
      "Kan",
      "Gat",
      "Gan",
      "Mug",
      "Knn",
      "Ken",
      "Iku",
      "Imw",
      "Igi"
    ],
    month_stand_alone_narrow => [
      "M",
      "K",
      "K",
      "K",
      "G",
      "G",
      "M",
      "K",
      "K",
      "I",
      "I",
      "I"
    ],
    month_stand_alone_wide => [
      "Mweri wa mbere",
      "Mweri wa ka\N{U+0129}ri",
      "Mweri wa kathat\N{U+0169}",
      "Mweri wa kana",
      "Mweri wa gatano",
      "Mweri wa gatantat\N{U+0169}",
      "Mweri wa m\N{U+0169}gwanja",
      "Mweri wa kanana",
      "Mweri wa kenda",
      "Mweri wa ik\N{U+0169}mi",
      "Mweri wa ik\N{U+0169}mi na \N{U+0169}mwe",
      "Mweri wa ik\N{U+0169}mi na Ka\N{U+0129}r\N{U+0129}"
    ],
    name => "Embu",
    native_language => "K\N{U+0129}embu",
    native_name => "K\N{U+0129}embu",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Kuota ya mbere",
      "Kuota ya Ka\N{U+0129}r\N{U+0129}",
      "Kuota ya kathatu",
      "Kuota ya kana"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Kuota ya mbere",
      "Kuota ya Ka\N{U+0129}r\N{U+0129}",
      "Kuota ya kathatu",
      "Kuota ya kana"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ebu-KE ]__
  {
    am_pm_abbreviated => [
      "KI",
      "UT"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ebu-KE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Tat",
      "Ine",
      "Tan",
      "Arm",
      "Maa",
      "NMM",
      "Kma"
    ],
    day_format_narrow => [
      "N",
      "N",
      "N",
      "A",
      "M",
      "N",
      "K"
    ],
    day_format_wide => [
      "Njumatatu",
      "Njumaine",
      "Njumatano",
      "Aramithi",
      "Njumaa",
      "NJumamothii",
      "Kiumia"
    ],
    day_stand_alone_abbreviated => [
      "Tat",
      "Ine",
      "Tan",
      "Arm",
      "Maa",
      "NMM",
      "Kma"
    ],
    day_stand_alone_narrow => [
      "N",
      "N",
      "N",
      "A",
      "M",
      "N",
      "K"
    ],
    day_stand_alone_wide => [
      "Njumatatu",
      "Njumaine",
      "Njumatano",
      "Aramithi",
      "Njumaa",
      "NJumamothii",
      "Kiumia"
    ],
    era_abbreviated => [
      "MK",
      "TK"
    ],
    era_narrow => [
      "MK",
      "TK"
    ],
    era_wide => [
      "Mbere ya Kristo",
      "Thutha wa Kristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Embu",
    month_format_abbreviated => [
      "Mbe",
      "Kai",
      "Kat",
      "Kan",
      "Gat",
      "Gan",
      "Mug",
      "Knn",
      "Ken",
      "Iku",
      "Imw",
      "Igi"
    ],
    month_format_narrow => [
      "M",
      "K",
      "K",
      "K",
      "G",
      "G",
      "M",
      "K",
      "K",
      "I",
      "I",
      "I"
    ],
    month_format_wide => [
      "Mweri wa mbere",
      "Mweri wa ka\N{U+0129}ri",
      "Mweri wa kathat\N{U+0169}",
      "Mweri wa kana",
      "Mweri wa gatano",
      "Mweri wa gatantat\N{U+0169}",
      "Mweri wa m\N{U+0169}gwanja",
      "Mweri wa kanana",
      "Mweri wa kenda",
      "Mweri wa ik\N{U+0169}mi",
      "Mweri wa ik\N{U+0169}mi na \N{U+0169}mwe",
      "Mweri wa ik\N{U+0169}mi na Ka\N{U+0129}r\N{U+0129}"
    ],
    month_stand_alone_abbreviated => [
      "Mbe",
      "Kai",
      "Kat",
      "Kan",
      "Gat",
      "Gan",
      "Mug",
      "Knn",
      "Ken",
      "Iku",
      "Imw",
      "Igi"
    ],
    month_stand_alone_narrow => [
      "M",
      "K",
      "K",
      "K",
      "G",
      "G",
      "M",
      "K",
      "K",
      "I",
      "I",
      "I"
    ],
    month_stand_alone_wide => [
      "Mweri wa mbere",
      "Mweri wa ka\N{U+0129}ri",
      "Mweri wa kathat\N{U+0169}",
      "Mweri wa kana",
      "Mweri wa gatano",
      "Mweri wa gatantat\N{U+0169}",
      "Mweri wa m\N{U+0169}gwanja",
      "Mweri wa kanana",
      "Mweri wa kenda",
      "Mweri wa ik\N{U+0169}mi",
      "Mweri wa ik\N{U+0169}mi na \N{U+0169}mwe",
      "Mweri wa ik\N{U+0169}mi na Ka\N{U+0129}r\N{U+0129}"
    ],
    name => "Embu Kenya",
    native_language => "K\N{U+0129}embu",
    native_name => "K\N{U+0129}embu Kenya",
    native_script => undef,
    native_territory => "Kenya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Kuota ya mbere",
      "Kuota ya Ka\N{U+0129}r\N{U+0129}",
      "Kuota ya kathatu",
      "Kuota ya kana"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Kuota ya mbere",
      "Kuota ya Ka\N{U+0129}r\N{U+0129}",
      "Kuota ya kathatu",
      "Kuota ya kana"
    ],
    script => undef,
    territory => "Kenya",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ee ]__
  {
    am_pm_abbreviated => [
      "\N{U+014b}di",
      "\N{U+0263}etr\N{U+0254}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E a 'ga' h:mm",
      Ehms => "E a 'ga' h:mm:ss",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d 'lia' y G",
      GyMMMd => "MMM d 'lia', y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d 'lia'",
      MMMMEd => "E, MMMM d 'lia'",
      MMMMd => "MMMM d 'lia'",
      MMMd => "MMM d 'lia'",
      Md => "M/d",
      d => "d",
      h => "a 'ga' h",
      hm => "a 'ga' h:mm",
      hms => "a 'ga' h:mm:ss",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "'a\N{U+0256}aba\N{U+0192}o\N{U+0192}o' mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d 'lia', y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ee",
    date_format_full => "EEEE, MMMM d 'lia' y",
    date_format_long => "MMMM d 'lia' y",
    date_format_medium => "MMM d 'lia', y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{0} {1}",
    datetime_format_long => "{0} {1}",
    datetime_format_medium => "{0} {1}",
    datetime_format_short => "{0} {1}",
    day_format_abbreviated => [
      "dzo",
      "bla",
      "ku\N{U+0256}",
      "yaw",
      "fi\N{U+0256}",
      "mem",
      "k\N{U+0254}s"
    ],
    day_format_narrow => [
      "d",
      "b",
      "k",
      "y",
      "f",
      "m",
      "k"
    ],
    day_format_wide => [
      "dzo\N{U+0256}a",
      "bla\N{U+0256}a",
      "ku\N{U+0256}a",
      "yawo\N{U+0256}a",
      "fi\N{U+0256}a",
      "memle\N{U+0256}a",
      "k\N{U+0254}si\N{U+0256}a"
    ],
    day_stand_alone_abbreviated => [
      "dzo",
      "bla",
      "ku\N{U+0256}",
      "yaw",
      "fi\N{U+0256}",
      "mem",
      "k\N{U+0254}s"
    ],
    day_stand_alone_narrow => [
      "d",
      "b",
      "k",
      "y",
      "f",
      "m",
      "k"
    ],
    day_stand_alone_wide => [
      "dzo\N{U+0256}a",
      "bla\N{U+0256}a",
      "ku\N{U+0256}a",
      "yawo\N{U+0256}a",
      "fi\N{U+0256}a",
      "memle\N{U+0256}a",
      "k\N{U+0254}si\N{U+0256}a"
    ],
    era_abbreviated => [
      "hY",
      "Y\N{U+014b}"
    ],
    era_narrow => [
      "hY",
      "Y\N{U+014b}"
    ],
    era_wide => [
      "Hafi Yesu Va Do \N{U+014b}g\N{U+0254}",
      "Yesu \N{U+014a}\N{U+0254}li"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Ewe",
    month_format_abbreviated => [
      "dzv",
      "dzd",
      "ted",
      "af\N{U+0254}",
      "dam",
      "mas",
      "sia",
      "dea",
      "any",
      "kel",
      "ade",
      "dzm"
    ],
    month_format_narrow => [
      "d",
      "d",
      "t",
      "a",
      "d",
      "m",
      "s",
      "d",
      "a",
      "k",
      "a",
      "d"
    ],
    month_format_wide => [
      "dzove",
      "dzodze",
      "tedoxe",
      "af\N{U+0254}f\N{U+0129}e",
      "dama",
      "masa",
      "siaml\N{U+0254}m",
      "deasiamime",
      "any\N{U+0254}ny\N{U+0254}",
      "kele",
      "ade\N{U+025b}mekp\N{U+0254}xe",
      "dzome"
    ],
    month_stand_alone_abbreviated => [
      "dzv",
      "dzd",
      "ted",
      "af\N{U+0254}",
      "dam",
      "mas",
      "sia",
      "dea",
      "any",
      "kel",
      "ade",
      "dzm"
    ],
    month_stand_alone_narrow => [
      "d",
      "d",
      "t",
      "a",
      "d",
      "m",
      "s",
      "d",
      "a",
      "k",
      "a",
      "d"
    ],
    month_stand_alone_wide => [
      "dzove",
      "dzodze",
      "tedoxe",
      "af\N{U+0254}f\N{U+0129}e",
      "dama",
      "masa",
      "siaml\N{U+0254}m",
      "deasiamime",
      "any\N{U+0254}ny\N{U+0254}",
      "kele",
      "ade\N{U+025b}mekp\N{U+0254}xe",
      "dzome"
    ],
    name => "Ewe",
    native_language => "E\N{U+028b}egbe",
    native_name => "E\N{U+028b}egbe",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "k1",
      "k2",
      "k3",
      "k4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "k\N{U+0254}ta gb\N{U+00e3}t\N{U+0254}",
      "k\N{U+0254}ta evelia",
      "k\N{U+0254}ta et\N{U+0254}\N{U+0303}lia",
      "k\N{U+0254}ta enelia"
    ],
    quarter_stand_alone_abbreviated => [
      "k1",
      "k2",
      "k3",
      "k4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "k\N{U+0254}ta gb\N{U+00e3}t\N{U+0254}",
      "k\N{U+0254}ta evelia",
      "k\N{U+0254}ta et\N{U+0254}\N{U+0303}lia",
      "k\N{U+0254}ta enelia"
    ],
    script => undef,
    territory => undef,
    time_format_full => "a 'ga' h:mm:ss zzzz",
    time_format_long => "a 'ga' h:mm:ss z",
    time_format_medium => "a 'ga' h:mm:ss",
    time_format_short => "a 'ga' h:mm",
    variant => undef,
    version => 29
  }
  __[ ee-GH ]__
  {
    am_pm_abbreviated => [
      "\N{U+014b}di",
      "\N{U+0263}etr\N{U+0254}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E a 'ga' h:mm",
      Ehms => "E a 'ga' h:mm:ss",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d 'lia' y G",
      GyMMMd => "MMM d 'lia', y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d 'lia'",
      MMMMEd => "E, MMMM d 'lia'",
      MMMMd => "MMMM d 'lia'",
      MMMd => "MMM d 'lia'",
      Md => "M/d",
      d => "d",
      h => "a 'ga' h",
      hm => "a 'ga' h:mm",
      hms => "a 'ga' h:mm:ss",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "'a\N{U+0256}aba\N{U+0192}o\N{U+0192}o' mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d 'lia', y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ee-GH",
    date_format_full => "EEEE, MMMM d 'lia' y",
    date_format_long => "MMMM d 'lia' y",
    date_format_medium => "MMM d 'lia', y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{0} {1}",
    datetime_format_long => "{0} {1}",
    datetime_format_medium => "{0} {1}",
    datetime_format_short => "{0} {1}",
    day_format_abbreviated => [
      "dzo",
      "bla",
      "ku\N{U+0256}",
      "yaw",
      "fi\N{U+0256}",
      "mem",
      "k\N{U+0254}s"
    ],
    day_format_narrow => [
      "d",
      "b",
      "k",
      "y",
      "f",
      "m",
      "k"
    ],
    day_format_wide => [
      "dzo\N{U+0256}a",
      "bla\N{U+0256}a",
      "ku\N{U+0256}a",
      "yawo\N{U+0256}a",
      "fi\N{U+0256}a",
      "memle\N{U+0256}a",
      "k\N{U+0254}si\N{U+0256}a"
    ],
    day_stand_alone_abbreviated => [
      "dzo",
      "bla",
      "ku\N{U+0256}",
      "yaw",
      "fi\N{U+0256}",
      "mem",
      "k\N{U+0254}s"
    ],
    day_stand_alone_narrow => [
      "d",
      "b",
      "k",
      "y",
      "f",
      "m",
      "k"
    ],
    day_stand_alone_wide => [
      "dzo\N{U+0256}a",
      "bla\N{U+0256}a",
      "ku\N{U+0256}a",
      "yawo\N{U+0256}a",
      "fi\N{U+0256}a",
      "memle\N{U+0256}a",
      "k\N{U+0254}si\N{U+0256}a"
    ],
    era_abbreviated => [
      "hY",
      "Y\N{U+014b}"
    ],
    era_narrow => [
      "hY",
      "Y\N{U+014b}"
    ],
    era_wide => [
      "Hafi Yesu Va Do \N{U+014b}g\N{U+0254}",
      "Yesu \N{U+014a}\N{U+0254}li"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Ewe",
    month_format_abbreviated => [
      "dzv",
      "dzd",
      "ted",
      "af\N{U+0254}",
      "dam",
      "mas",
      "sia",
      "dea",
      "any",
      "kel",
      "ade",
      "dzm"
    ],
    month_format_narrow => [
      "d",
      "d",
      "t",
      "a",
      "d",
      "m",
      "s",
      "d",
      "a",
      "k",
      "a",
      "d"
    ],
    month_format_wide => [
      "dzove",
      "dzodze",
      "tedoxe",
      "af\N{U+0254}f\N{U+0129}e",
      "dama",
      "masa",
      "siaml\N{U+0254}m",
      "deasiamime",
      "any\N{U+0254}ny\N{U+0254}",
      "kele",
      "ade\N{U+025b}mekp\N{U+0254}xe",
      "dzome"
    ],
    month_stand_alone_abbreviated => [
      "dzv",
      "dzd",
      "ted",
      "af\N{U+0254}",
      "dam",
      "mas",
      "sia",
      "dea",
      "any",
      "kel",
      "ade",
      "dzm"
    ],
    month_stand_alone_narrow => [
      "d",
      "d",
      "t",
      "a",
      "d",
      "m",
      "s",
      "d",
      "a",
      "k",
      "a",
      "d"
    ],
    month_stand_alone_wide => [
      "dzove",
      "dzodze",
      "tedoxe",
      "af\N{U+0254}f\N{U+0129}e",
      "dama",
      "masa",
      "siaml\N{U+0254}m",
      "deasiamime",
      "any\N{U+0254}ny\N{U+0254}",
      "kele",
      "ade\N{U+025b}mekp\N{U+0254}xe",
      "dzome"
    ],
    name => "Ewe Ghana",
    native_language => "E\N{U+028b}egbe",
    native_name => "E\N{U+028b}egbe Ghana nutome",
    native_script => undef,
    native_territory => "Ghana nutome",
    native_variant => undef,
    quarter_format_abbreviated => [
      "k1",
      "k2",
      "k3",
      "k4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "k\N{U+0254}ta gb\N{U+00e3}t\N{U+0254}",
      "k\N{U+0254}ta evelia",
      "k\N{U+0254}ta et\N{U+0254}\N{U+0303}lia",
      "k\N{U+0254}ta enelia"
    ],
    quarter_stand_alone_abbreviated => [
      "k1",
      "k2",
      "k3",
      "k4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "k\N{U+0254}ta gb\N{U+00e3}t\N{U+0254}",
      "k\N{U+0254}ta evelia",
      "k\N{U+0254}ta et\N{U+0254}\N{U+0303}lia",
      "k\N{U+0254}ta enelia"
    ],
    script => undef,
    territory => "Ghana",
    time_format_full => "a 'ga' h:mm:ss zzzz",
    time_format_long => "a 'ga' h:mm:ss z",
    time_format_medium => "a 'ga' h:mm:ss",
    time_format_short => "a 'ga' h:mm",
    variant => undef,
    version => 29
  }
  __[ ee-TG ]__
  {
    am_pm_abbreviated => [
      "\N{U+014b}di",
      "\N{U+0263}etr\N{U+0254}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E a 'ga' h:mm",
      Ehms => "E a 'ga' h:mm:ss",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d 'lia' y G",
      GyMMMd => "MMM d 'lia', y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d 'lia'",
      MMMMEd => "E, MMMM d 'lia'",
      MMMMd => "MMMM d 'lia'",
      MMMd => "MMM d 'lia'",
      Md => "M/d",
      d => "d",
      h => "a 'ga' h",
      hm => "a 'ga' h:mm",
      hms => "a 'ga' h:mm:ss",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "'a\N{U+0256}aba\N{U+0192}o\N{U+0192}o' mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d 'lia', y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ee-TG",
    date_format_full => "EEEE, MMMM d 'lia' y",
    date_format_long => "MMMM d 'lia' y",
    date_format_medium => "MMM d 'lia', y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{0} {1}",
    datetime_format_long => "{0} {1}",
    datetime_format_medium => "{0} {1}",
    datetime_format_short => "{0} {1}",
    day_format_abbreviated => [
      "dzo",
      "bla",
      "ku\N{U+0256}",
      "yaw",
      "fi\N{U+0256}",
      "mem",
      "k\N{U+0254}s"
    ],
    day_format_narrow => [
      "d",
      "b",
      "k",
      "y",
      "f",
      "m",
      "k"
    ],
    day_format_wide => [
      "dzo\N{U+0256}a",
      "bla\N{U+0256}a",
      "ku\N{U+0256}a",
      "yawo\N{U+0256}a",
      "fi\N{U+0256}a",
      "memle\N{U+0256}a",
      "k\N{U+0254}si\N{U+0256}a"
    ],
    day_stand_alone_abbreviated => [
      "dzo",
      "bla",
      "ku\N{U+0256}",
      "yaw",
      "fi\N{U+0256}",
      "mem",
      "k\N{U+0254}s"
    ],
    day_stand_alone_narrow => [
      "d",
      "b",
      "k",
      "y",
      "f",
      "m",
      "k"
    ],
    day_stand_alone_wide => [
      "dzo\N{U+0256}a",
      "bla\N{U+0256}a",
      "ku\N{U+0256}a",
      "yawo\N{U+0256}a",
      "fi\N{U+0256}a",
      "memle\N{U+0256}a",
      "k\N{U+0254}si\N{U+0256}a"
    ],
    era_abbreviated => [
      "hY",
      "Y\N{U+014b}"
    ],
    era_narrow => [
      "hY",
      "Y\N{U+014b}"
    ],
    era_wide => [
      "Hafi Yesu Va Do \N{U+014b}g\N{U+0254}",
      "Yesu \N{U+014a}\N{U+0254}li"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Ewe",
    month_format_abbreviated => [
      "dzv",
      "dzd",
      "ted",
      "af\N{U+0254}",
      "dam",
      "mas",
      "sia",
      "dea",
      "any",
      "kel",
      "ade",
      "dzm"
    ],
    month_format_narrow => [
      "d",
      "d",
      "t",
      "a",
      "d",
      "m",
      "s",
      "d",
      "a",
      "k",
      "a",
      "d"
    ],
    month_format_wide => [
      "dzove",
      "dzodze",
      "tedoxe",
      "af\N{U+0254}f\N{U+0129}e",
      "dama",
      "masa",
      "siaml\N{U+0254}m",
      "deasiamime",
      "any\N{U+0254}ny\N{U+0254}",
      "kele",
      "ade\N{U+025b}mekp\N{U+0254}xe",
      "dzome"
    ],
    month_stand_alone_abbreviated => [
      "dzv",
      "dzd",
      "ted",
      "af\N{U+0254}",
      "dam",
      "mas",
      "sia",
      "dea",
      "any",
      "kel",
      "ade",
      "dzm"
    ],
    month_stand_alone_narrow => [
      "d",
      "d",
      "t",
      "a",
      "d",
      "m",
      "s",
      "d",
      "a",
      "k",
      "a",
      "d"
    ],
    month_stand_alone_wide => [
      "dzove",
      "dzodze",
      "tedoxe",
      "af\N{U+0254}f\N{U+0129}e",
      "dama",
      "masa",
      "siaml\N{U+0254}m",
      "deasiamime",
      "any\N{U+0254}ny\N{U+0254}",
      "kele",
      "ade\N{U+025b}mekp\N{U+0254}xe",
      "dzome"
    ],
    name => "Ewe Togo",
    native_language => "E\N{U+028b}egbe",
    native_name => "E\N{U+028b}egbe Togo nutome",
    native_script => undef,
    native_territory => "Togo nutome",
    native_variant => undef,
    quarter_format_abbreviated => [
      "k1",
      "k2",
      "k3",
      "k4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "k\N{U+0254}ta gb\N{U+00e3}t\N{U+0254}",
      "k\N{U+0254}ta evelia",
      "k\N{U+0254}ta et\N{U+0254}\N{U+0303}lia",
      "k\N{U+0254}ta enelia"
    ],
    quarter_stand_alone_abbreviated => [
      "k1",
      "k2",
      "k3",
      "k4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "k\N{U+0254}ta gb\N{U+00e3}t\N{U+0254}",
      "k\N{U+0254}ta evelia",
      "k\N{U+0254}ta et\N{U+0254}\N{U+0303}lia",
      "k\N{U+0254}ta enelia"
    ],
    script => undef,
    territory => "Togo",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ el ]__
  {
    am_pm_abbreviated => [
      "\N{U+03c0}.\N{U+03bc}.",
      "\N{U+03bc}.\N{U+03bc}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "el",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} - {0}",
    datetime_format_long => "{1} - {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0394}\N{U+03b5}\N{U+03c5}",
      "\N{U+03a4}\N{U+03c1}\N{U+03af}",
      "\N{U+03a4}\N{U+03b5}\N{U+03c4}",
      "\N{U+03a0}\N{U+03ad}\N{U+03bc}",
      "\N{U+03a0}\N{U+03b1}\N{U+03c1}",
      "\N{U+03a3}\N{U+03ac}\N{U+03b2}",
      "\N{U+039a}\N{U+03c5}\N{U+03c1}"
    ],
    day_format_narrow => [
      "\N{U+0394}",
      "\N{U+03a4}",
      "\N{U+03a4}",
      "\N{U+03a0}",
      "\N{U+03a0}",
      "\N{U+03a3}",
      "\N{U+039a}"
    ],
    day_format_wide => [
      "\N{U+0394}\N{U+03b5}\N{U+03c5}\N{U+03c4}\N{U+03ad}\N{U+03c1}\N{U+03b1}",
      "\N{U+03a4}\N{U+03c1}\N{U+03af}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a4}\N{U+03b5}\N{U+03c4}\N{U+03ac}\N{U+03c1}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a0}\N{U+03ad}\N{U+03bc}\N{U+03c0}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a0}\N{U+03b1}\N{U+03c1}\N{U+03b1}\N{U+03c3}\N{U+03ba}\N{U+03b5}\N{U+03c5}\N{U+03ae}",
      "\N{U+03a3}\N{U+03ac}\N{U+03b2}\N{U+03b2}\N{U+03b1}\N{U+03c4}\N{U+03bf}",
      "\N{U+039a}\N{U+03c5}\N{U+03c1}\N{U+03b9}\N{U+03b1}\N{U+03ba}\N{U+03ae}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0394}\N{U+03b5}\N{U+03c5}",
      "\N{U+03a4}\N{U+03c1}\N{U+03af}",
      "\N{U+03a4}\N{U+03b5}\N{U+03c4}",
      "\N{U+03a0}\N{U+03ad}\N{U+03bc}",
      "\N{U+03a0}\N{U+03b1}\N{U+03c1}",
      "\N{U+03a3}\N{U+03ac}\N{U+03b2}",
      "\N{U+039a}\N{U+03c5}\N{U+03c1}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0394}",
      "\N{U+03a4}",
      "\N{U+03a4}",
      "\N{U+03a0}",
      "\N{U+03a0}",
      "\N{U+03a3}",
      "\N{U+039a}"
    ],
    day_stand_alone_wide => [
      "\N{U+0394}\N{U+03b5}\N{U+03c5}\N{U+03c4}\N{U+03ad}\N{U+03c1}\N{U+03b1}",
      "\N{U+03a4}\N{U+03c1}\N{U+03af}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a4}\N{U+03b5}\N{U+03c4}\N{U+03ac}\N{U+03c1}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a0}\N{U+03ad}\N{U+03bc}\N{U+03c0}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a0}\N{U+03b1}\N{U+03c1}\N{U+03b1}\N{U+03c3}\N{U+03ba}\N{U+03b5}\N{U+03c5}\N{U+03ae}",
      "\N{U+03a3}\N{U+03ac}\N{U+03b2}\N{U+03b2}\N{U+03b1}\N{U+03c4}\N{U+03bf}",
      "\N{U+039a}\N{U+03c5}\N{U+03c1}\N{U+03b9}\N{U+03b1}\N{U+03ba}\N{U+03ae}"
    ],
    era_abbreviated => [
      "\N{U+03c0}.\N{U+03a7}.",
      "\N{U+03bc}.\N{U+03a7}."
    ],
    era_narrow => [
      "\N{U+03c0}.\N{U+03a7}.",
      "\N{U+03bc}.\N{U+03a7}."
    ],
    era_wide => [
      "\N{U+03c0}\N{U+03c1}\N{U+03bf} \N{U+03a7}\N{U+03c1}\N{U+03b9}\N{U+03c3}\N{U+03c4}\N{U+03bf}\N{U+03cd}",
      "\N{U+03bc}\N{U+03b5}\N{U+03c4}\N{U+03ac} \N{U+03a7}\N{U+03c1}\N{U+03b9}\N{U+03c3}\N{U+03c4}\N{U+03cc}\N{U+03bd}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Greek",
    month_format_abbreviated => [
      "\N{U+0399}\N{U+03b1}\N{U+03bd}",
      "\N{U+03a6}\N{U+03b5}\N{U+03b2}",
      "\N{U+039c}\N{U+03b1}\N{U+03c1}",
      "\N{U+0391}\N{U+03c0}\N{U+03c1}",
      "\N{U+039c}\N{U+03b1}\N{U+0390}",
      "\N{U+0399}\N{U+03bf}\N{U+03c5}\N{U+03bd}",
      "\N{U+0399}\N{U+03bf}\N{U+03c5}\N{U+03bb}",
      "\N{U+0391}\N{U+03c5}\N{U+03b3}",
      "\N{U+03a3}\N{U+03b5}\N{U+03c0}",
      "\N{U+039f}\N{U+03ba}\N{U+03c4}",
      "\N{U+039d}\N{U+03bf}\N{U+03b5}",
      "\N{U+0394}\N{U+03b5}\N{U+03ba}"
    ],
    month_format_narrow => [
      "\N{U+0399}",
      "\N{U+03a6}",
      "\N{U+039c}",
      "\N{U+0391}",
      "\N{U+039c}",
      "\N{U+0399}",
      "\N{U+0399}",
      "\N{U+0391}",
      "\N{U+03a3}",
      "\N{U+039f}",
      "\N{U+039d}",
      "\N{U+0394}"
    ],
    month_format_wide => [
      "\N{U+0399}\N{U+03b1}\N{U+03bd}\N{U+03bf}\N{U+03c5}\N{U+03b1}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+03a6}\N{U+03b5}\N{U+03b2}\N{U+03c1}\N{U+03bf}\N{U+03c5}\N{U+03b1}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+039c}\N{U+03b1}\N{U+03c1}\N{U+03c4}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+0391}\N{U+03c0}\N{U+03c1}\N{U+03b9}\N{U+03bb}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+039c}\N{U+03b1}\N{U+0390}\N{U+03bf}\N{U+03c5}",
      "\N{U+0399}\N{U+03bf}\N{U+03c5}\N{U+03bd}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+0399}\N{U+03bf}\N{U+03c5}\N{U+03bb}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+0391}\N{U+03c5}\N{U+03b3}\N{U+03bf}\N{U+03cd}\N{U+03c3}\N{U+03c4}\N{U+03bf}\N{U+03c5}",
      "\N{U+03a3}\N{U+03b5}\N{U+03c0}\N{U+03c4}\N{U+03b5}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+039f}\N{U+03ba}\N{U+03c4}\N{U+03c9}\N{U+03b2}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+039d}\N{U+03bf}\N{U+03b5}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+0394}\N{U+03b5}\N{U+03ba}\N{U+03b5}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0399}\N{U+03b1}\N{U+03bd}",
      "\N{U+03a6}\N{U+03b5}\N{U+03b2}",
      "\N{U+039c}\N{U+03ac}\N{U+03c1}",
      "\N{U+0391}\N{U+03c0}\N{U+03c1}",
      "\N{U+039c}\N{U+03ac}\N{U+03b9}",
      "\N{U+0399}\N{U+03bf}\N{U+03cd}\N{U+03bd}",
      "\N{U+0399}\N{U+03bf}\N{U+03cd}\N{U+03bb}",
      "\N{U+0391}\N{U+03cd}\N{U+03b3}",
      "\N{U+03a3}\N{U+03b5}\N{U+03c0}",
      "\N{U+039f}\N{U+03ba}\N{U+03c4}",
      "\N{U+039d}\N{U+03bf}\N{U+03ad}",
      "\N{U+0394}\N{U+03b5}\N{U+03ba}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0399}",
      "\N{U+03a6}",
      "\N{U+039c}",
      "\N{U+0391}",
      "\N{U+039c}",
      "\N{U+0399}",
      "\N{U+0399}",
      "\N{U+0391}",
      "\N{U+03a3}",
      "\N{U+039f}",
      "\N{U+039d}",
      "\N{U+0394}"
    ],
    month_stand_alone_wide => [
      "\N{U+0399}\N{U+03b1}\N{U+03bd}\N{U+03bf}\N{U+03c5}\N{U+03ac}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+03a6}\N{U+03b5}\N{U+03b2}\N{U+03c1}\N{U+03bf}\N{U+03c5}\N{U+03ac}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+039c}\N{U+03ac}\N{U+03c1}\N{U+03c4}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+0391}\N{U+03c0}\N{U+03c1}\N{U+03af}\N{U+03bb}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+039c}\N{U+03ac}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+0399}\N{U+03bf}\N{U+03cd}\N{U+03bd}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+0399}\N{U+03bf}\N{U+03cd}\N{U+03bb}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+0391}\N{U+03cd}\N{U+03b3}\N{U+03bf}\N{U+03c5}\N{U+03c3}\N{U+03c4}\N{U+03bf}\N{U+03c2}",
      "\N{U+03a3}\N{U+03b5}\N{U+03c0}\N{U+03c4}\N{U+03ad}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+039f}\N{U+03ba}\N{U+03c4}\N{U+03ce}\N{U+03b2}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+039d}\N{U+03bf}\N{U+03ad}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+0394}\N{U+03b5}\N{U+03ba}\N{U+03ad}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}"
    ],
    name => "Greek",
    native_language => "\N{U+0395}\N{U+03bb}\N{U+03bb}\N{U+03b7}\N{U+03bd}\N{U+03b9}\N{U+03ba}\N{U+03ac}",
    native_name => "\N{U+0395}\N{U+03bb}\N{U+03bb}\N{U+03b7}\N{U+03bd}\N{U+03b9}\N{U+03ba}\N{U+03ac}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+03a4}1",
      "\N{U+03a4}2",
      "\N{U+03a4}3",
      "\N{U+03a4}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "2\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "3\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "4\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+03a4}1",
      "\N{U+03a4}2",
      "\N{U+03a4}3",
      "\N{U+03a4}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "2\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "3\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "4\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ el-CY ]__
  {
    am_pm_abbreviated => [
      "\N{U+03c0}.\N{U+03bc}.",
      "\N{U+03bc}.\N{U+03bc}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "el-CY",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} - {0}",
    datetime_format_long => "{1} - {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0394}\N{U+03b5}\N{U+03c5}",
      "\N{U+03a4}\N{U+03c1}\N{U+03af}",
      "\N{U+03a4}\N{U+03b5}\N{U+03c4}",
      "\N{U+03a0}\N{U+03ad}\N{U+03bc}",
      "\N{U+03a0}\N{U+03b1}\N{U+03c1}",
      "\N{U+03a3}\N{U+03ac}\N{U+03b2}",
      "\N{U+039a}\N{U+03c5}\N{U+03c1}"
    ],
    day_format_narrow => [
      "\N{U+0394}",
      "\N{U+03a4}",
      "\N{U+03a4}",
      "\N{U+03a0}",
      "\N{U+03a0}",
      "\N{U+03a3}",
      "\N{U+039a}"
    ],
    day_format_wide => [
      "\N{U+0394}\N{U+03b5}\N{U+03c5}\N{U+03c4}\N{U+03ad}\N{U+03c1}\N{U+03b1}",
      "\N{U+03a4}\N{U+03c1}\N{U+03af}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a4}\N{U+03b5}\N{U+03c4}\N{U+03ac}\N{U+03c1}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a0}\N{U+03ad}\N{U+03bc}\N{U+03c0}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a0}\N{U+03b1}\N{U+03c1}\N{U+03b1}\N{U+03c3}\N{U+03ba}\N{U+03b5}\N{U+03c5}\N{U+03ae}",
      "\N{U+03a3}\N{U+03ac}\N{U+03b2}\N{U+03b2}\N{U+03b1}\N{U+03c4}\N{U+03bf}",
      "\N{U+039a}\N{U+03c5}\N{U+03c1}\N{U+03b9}\N{U+03b1}\N{U+03ba}\N{U+03ae}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0394}\N{U+03b5}\N{U+03c5}",
      "\N{U+03a4}\N{U+03c1}\N{U+03af}",
      "\N{U+03a4}\N{U+03b5}\N{U+03c4}",
      "\N{U+03a0}\N{U+03ad}\N{U+03bc}",
      "\N{U+03a0}\N{U+03b1}\N{U+03c1}",
      "\N{U+03a3}\N{U+03ac}\N{U+03b2}",
      "\N{U+039a}\N{U+03c5}\N{U+03c1}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0394}",
      "\N{U+03a4}",
      "\N{U+03a4}",
      "\N{U+03a0}",
      "\N{U+03a0}",
      "\N{U+03a3}",
      "\N{U+039a}"
    ],
    day_stand_alone_wide => [
      "\N{U+0394}\N{U+03b5}\N{U+03c5}\N{U+03c4}\N{U+03ad}\N{U+03c1}\N{U+03b1}",
      "\N{U+03a4}\N{U+03c1}\N{U+03af}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a4}\N{U+03b5}\N{U+03c4}\N{U+03ac}\N{U+03c1}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a0}\N{U+03ad}\N{U+03bc}\N{U+03c0}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a0}\N{U+03b1}\N{U+03c1}\N{U+03b1}\N{U+03c3}\N{U+03ba}\N{U+03b5}\N{U+03c5}\N{U+03ae}",
      "\N{U+03a3}\N{U+03ac}\N{U+03b2}\N{U+03b2}\N{U+03b1}\N{U+03c4}\N{U+03bf}",
      "\N{U+039a}\N{U+03c5}\N{U+03c1}\N{U+03b9}\N{U+03b1}\N{U+03ba}\N{U+03ae}"
    ],
    era_abbreviated => [
      "\N{U+03c0}.\N{U+03a7}.",
      "\N{U+03bc}.\N{U+03a7}."
    ],
    era_narrow => [
      "\N{U+03c0}.\N{U+03a7}.",
      "\N{U+03bc}.\N{U+03a7}."
    ],
    era_wide => [
      "\N{U+03c0}\N{U+03c1}\N{U+03bf} \N{U+03a7}\N{U+03c1}\N{U+03b9}\N{U+03c3}\N{U+03c4}\N{U+03bf}\N{U+03cd}",
      "\N{U+03bc}\N{U+03b5}\N{U+03c4}\N{U+03ac} \N{U+03a7}\N{U+03c1}\N{U+03b9}\N{U+03c3}\N{U+03c4}\N{U+03cc}\N{U+03bd}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Greek",
    month_format_abbreviated => [
      "\N{U+0399}\N{U+03b1}\N{U+03bd}",
      "\N{U+03a6}\N{U+03b5}\N{U+03b2}",
      "\N{U+039c}\N{U+03b1}\N{U+03c1}",
      "\N{U+0391}\N{U+03c0}\N{U+03c1}",
      "\N{U+039c}\N{U+03b1}\N{U+0390}",
      "\N{U+0399}\N{U+03bf}\N{U+03c5}\N{U+03bd}",
      "\N{U+0399}\N{U+03bf}\N{U+03c5}\N{U+03bb}",
      "\N{U+0391}\N{U+03c5}\N{U+03b3}",
      "\N{U+03a3}\N{U+03b5}\N{U+03c0}",
      "\N{U+039f}\N{U+03ba}\N{U+03c4}",
      "\N{U+039d}\N{U+03bf}\N{U+03b5}",
      "\N{U+0394}\N{U+03b5}\N{U+03ba}"
    ],
    month_format_narrow => [
      "\N{U+0399}",
      "\N{U+03a6}",
      "\N{U+039c}",
      "\N{U+0391}",
      "\N{U+039c}",
      "\N{U+0399}",
      "\N{U+0399}",
      "\N{U+0391}",
      "\N{U+03a3}",
      "\N{U+039f}",
      "\N{U+039d}",
      "\N{U+0394}"
    ],
    month_format_wide => [
      "\N{U+0399}\N{U+03b1}\N{U+03bd}\N{U+03bf}\N{U+03c5}\N{U+03b1}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+03a6}\N{U+03b5}\N{U+03b2}\N{U+03c1}\N{U+03bf}\N{U+03c5}\N{U+03b1}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+039c}\N{U+03b1}\N{U+03c1}\N{U+03c4}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+0391}\N{U+03c0}\N{U+03c1}\N{U+03b9}\N{U+03bb}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+039c}\N{U+03b1}\N{U+0390}\N{U+03bf}\N{U+03c5}",
      "\N{U+0399}\N{U+03bf}\N{U+03c5}\N{U+03bd}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+0399}\N{U+03bf}\N{U+03c5}\N{U+03bb}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+0391}\N{U+03c5}\N{U+03b3}\N{U+03bf}\N{U+03cd}\N{U+03c3}\N{U+03c4}\N{U+03bf}\N{U+03c5}",
      "\N{U+03a3}\N{U+03b5}\N{U+03c0}\N{U+03c4}\N{U+03b5}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+039f}\N{U+03ba}\N{U+03c4}\N{U+03c9}\N{U+03b2}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+039d}\N{U+03bf}\N{U+03b5}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+0394}\N{U+03b5}\N{U+03ba}\N{U+03b5}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0399}\N{U+03b1}\N{U+03bd}",
      "\N{U+03a6}\N{U+03b5}\N{U+03b2}",
      "\N{U+039c}\N{U+03ac}\N{U+03c1}",
      "\N{U+0391}\N{U+03c0}\N{U+03c1}",
      "\N{U+039c}\N{U+03ac}\N{U+03b9}",
      "\N{U+0399}\N{U+03bf}\N{U+03cd}\N{U+03bd}",
      "\N{U+0399}\N{U+03bf}\N{U+03cd}\N{U+03bb}",
      "\N{U+0391}\N{U+03cd}\N{U+03b3}",
      "\N{U+03a3}\N{U+03b5}\N{U+03c0}",
      "\N{U+039f}\N{U+03ba}\N{U+03c4}",
      "\N{U+039d}\N{U+03bf}\N{U+03ad}",
      "\N{U+0394}\N{U+03b5}\N{U+03ba}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0399}",
      "\N{U+03a6}",
      "\N{U+039c}",
      "\N{U+0391}",
      "\N{U+039c}",
      "\N{U+0399}",
      "\N{U+0399}",
      "\N{U+0391}",
      "\N{U+03a3}",
      "\N{U+039f}",
      "\N{U+039d}",
      "\N{U+0394}"
    ],
    month_stand_alone_wide => [
      "\N{U+0399}\N{U+03b1}\N{U+03bd}\N{U+03bf}\N{U+03c5}\N{U+03ac}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+03a6}\N{U+03b5}\N{U+03b2}\N{U+03c1}\N{U+03bf}\N{U+03c5}\N{U+03ac}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+039c}\N{U+03ac}\N{U+03c1}\N{U+03c4}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+0391}\N{U+03c0}\N{U+03c1}\N{U+03af}\N{U+03bb}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+039c}\N{U+03ac}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+0399}\N{U+03bf}\N{U+03cd}\N{U+03bd}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+0399}\N{U+03bf}\N{U+03cd}\N{U+03bb}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+0391}\N{U+03cd}\N{U+03b3}\N{U+03bf}\N{U+03c5}\N{U+03c3}\N{U+03c4}\N{U+03bf}\N{U+03c2}",
      "\N{U+03a3}\N{U+03b5}\N{U+03c0}\N{U+03c4}\N{U+03ad}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+039f}\N{U+03ba}\N{U+03c4}\N{U+03ce}\N{U+03b2}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+039d}\N{U+03bf}\N{U+03ad}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+0394}\N{U+03b5}\N{U+03ba}\N{U+03ad}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}"
    ],
    name => "Greek Cyprus",
    native_language => "\N{U+0395}\N{U+03bb}\N{U+03bb}\N{U+03b7}\N{U+03bd}\N{U+03b9}\N{U+03ba}\N{U+03ac}",
    native_name => "\N{U+0395}\N{U+03bb}\N{U+03bb}\N{U+03b7}\N{U+03bd}\N{U+03b9}\N{U+03ba}\N{U+03ac} \N{U+039a}\N{U+03cd}\N{U+03c0}\N{U+03c1}\N{U+03bf}\N{U+03c2}",
    native_script => undef,
    native_territory => "\N{U+039a}\N{U+03cd}\N{U+03c0}\N{U+03c1}\N{U+03bf}\N{U+03c2}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+03a4}1",
      "\N{U+03a4}2",
      "\N{U+03a4}3",
      "\N{U+03a4}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "2\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "3\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "4\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+03a4}1",
      "\N{U+03a4}2",
      "\N{U+03a4}3",
      "\N{U+03a4}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "2\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "3\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "4\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}"
    ],
    script => undef,
    territory => "Cyprus",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ el-GR ]__
  {
    am_pm_abbreviated => [
      "\N{U+03c0}.\N{U+03bc}.",
      "\N{U+03bc}.\N{U+03bc}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "el-GR",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} - {0}",
    datetime_format_long => "{1} - {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0394}\N{U+03b5}\N{U+03c5}",
      "\N{U+03a4}\N{U+03c1}\N{U+03af}",
      "\N{U+03a4}\N{U+03b5}\N{U+03c4}",
      "\N{U+03a0}\N{U+03ad}\N{U+03bc}",
      "\N{U+03a0}\N{U+03b1}\N{U+03c1}",
      "\N{U+03a3}\N{U+03ac}\N{U+03b2}",
      "\N{U+039a}\N{U+03c5}\N{U+03c1}"
    ],
    day_format_narrow => [
      "\N{U+0394}",
      "\N{U+03a4}",
      "\N{U+03a4}",
      "\N{U+03a0}",
      "\N{U+03a0}",
      "\N{U+03a3}",
      "\N{U+039a}"
    ],
    day_format_wide => [
      "\N{U+0394}\N{U+03b5}\N{U+03c5}\N{U+03c4}\N{U+03ad}\N{U+03c1}\N{U+03b1}",
      "\N{U+03a4}\N{U+03c1}\N{U+03af}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a4}\N{U+03b5}\N{U+03c4}\N{U+03ac}\N{U+03c1}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a0}\N{U+03ad}\N{U+03bc}\N{U+03c0}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a0}\N{U+03b1}\N{U+03c1}\N{U+03b1}\N{U+03c3}\N{U+03ba}\N{U+03b5}\N{U+03c5}\N{U+03ae}",
      "\N{U+03a3}\N{U+03ac}\N{U+03b2}\N{U+03b2}\N{U+03b1}\N{U+03c4}\N{U+03bf}",
      "\N{U+039a}\N{U+03c5}\N{U+03c1}\N{U+03b9}\N{U+03b1}\N{U+03ba}\N{U+03ae}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0394}\N{U+03b5}\N{U+03c5}",
      "\N{U+03a4}\N{U+03c1}\N{U+03af}",
      "\N{U+03a4}\N{U+03b5}\N{U+03c4}",
      "\N{U+03a0}\N{U+03ad}\N{U+03bc}",
      "\N{U+03a0}\N{U+03b1}\N{U+03c1}",
      "\N{U+03a3}\N{U+03ac}\N{U+03b2}",
      "\N{U+039a}\N{U+03c5}\N{U+03c1}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0394}",
      "\N{U+03a4}",
      "\N{U+03a4}",
      "\N{U+03a0}",
      "\N{U+03a0}",
      "\N{U+03a3}",
      "\N{U+039a}"
    ],
    day_stand_alone_wide => [
      "\N{U+0394}\N{U+03b5}\N{U+03c5}\N{U+03c4}\N{U+03ad}\N{U+03c1}\N{U+03b1}",
      "\N{U+03a4}\N{U+03c1}\N{U+03af}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a4}\N{U+03b5}\N{U+03c4}\N{U+03ac}\N{U+03c1}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a0}\N{U+03ad}\N{U+03bc}\N{U+03c0}\N{U+03c4}\N{U+03b7}",
      "\N{U+03a0}\N{U+03b1}\N{U+03c1}\N{U+03b1}\N{U+03c3}\N{U+03ba}\N{U+03b5}\N{U+03c5}\N{U+03ae}",
      "\N{U+03a3}\N{U+03ac}\N{U+03b2}\N{U+03b2}\N{U+03b1}\N{U+03c4}\N{U+03bf}",
      "\N{U+039a}\N{U+03c5}\N{U+03c1}\N{U+03b9}\N{U+03b1}\N{U+03ba}\N{U+03ae}"
    ],
    era_abbreviated => [
      "\N{U+03c0}.\N{U+03a7}.",
      "\N{U+03bc}.\N{U+03a7}."
    ],
    era_narrow => [
      "\N{U+03c0}.\N{U+03a7}.",
      "\N{U+03bc}.\N{U+03a7}."
    ],
    era_wide => [
      "\N{U+03c0}\N{U+03c1}\N{U+03bf} \N{U+03a7}\N{U+03c1}\N{U+03b9}\N{U+03c3}\N{U+03c4}\N{U+03bf}\N{U+03cd}",
      "\N{U+03bc}\N{U+03b5}\N{U+03c4}\N{U+03ac} \N{U+03a7}\N{U+03c1}\N{U+03b9}\N{U+03c3}\N{U+03c4}\N{U+03cc}\N{U+03bd}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %d %b %Y %r %Z",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%a %d %b %Y %r %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%r",
    language => "Greek",
    month_format_abbreviated => [
      "\N{U+0399}\N{U+03b1}\N{U+03bd}",
      "\N{U+03a6}\N{U+03b5}\N{U+03b2}",
      "\N{U+039c}\N{U+03b1}\N{U+03c1}",
      "\N{U+0391}\N{U+03c0}\N{U+03c1}",
      "\N{U+039c}\N{U+03b1}\N{U+0390}",
      "\N{U+0399}\N{U+03bf}\N{U+03c5}\N{U+03bd}",
      "\N{U+0399}\N{U+03bf}\N{U+03c5}\N{U+03bb}",
      "\N{U+0391}\N{U+03c5}\N{U+03b3}",
      "\N{U+03a3}\N{U+03b5}\N{U+03c0}",
      "\N{U+039f}\N{U+03ba}\N{U+03c4}",
      "\N{U+039d}\N{U+03bf}\N{U+03b5}",
      "\N{U+0394}\N{U+03b5}\N{U+03ba}"
    ],
    month_format_narrow => [
      "\N{U+0399}",
      "\N{U+03a6}",
      "\N{U+039c}",
      "\N{U+0391}",
      "\N{U+039c}",
      "\N{U+0399}",
      "\N{U+0399}",
      "\N{U+0391}",
      "\N{U+03a3}",
      "\N{U+039f}",
      "\N{U+039d}",
      "\N{U+0394}"
    ],
    month_format_wide => [
      "\N{U+0399}\N{U+03b1}\N{U+03bd}\N{U+03bf}\N{U+03c5}\N{U+03b1}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+03a6}\N{U+03b5}\N{U+03b2}\N{U+03c1}\N{U+03bf}\N{U+03c5}\N{U+03b1}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+039c}\N{U+03b1}\N{U+03c1}\N{U+03c4}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+0391}\N{U+03c0}\N{U+03c1}\N{U+03b9}\N{U+03bb}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+039c}\N{U+03b1}\N{U+0390}\N{U+03bf}\N{U+03c5}",
      "\N{U+0399}\N{U+03bf}\N{U+03c5}\N{U+03bd}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+0399}\N{U+03bf}\N{U+03c5}\N{U+03bb}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+0391}\N{U+03c5}\N{U+03b3}\N{U+03bf}\N{U+03cd}\N{U+03c3}\N{U+03c4}\N{U+03bf}\N{U+03c5}",
      "\N{U+03a3}\N{U+03b5}\N{U+03c0}\N{U+03c4}\N{U+03b5}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+039f}\N{U+03ba}\N{U+03c4}\N{U+03c9}\N{U+03b2}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+039d}\N{U+03bf}\N{U+03b5}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}",
      "\N{U+0394}\N{U+03b5}\N{U+03ba}\N{U+03b5}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03af}\N{U+03bf}\N{U+03c5}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0399}\N{U+03b1}\N{U+03bd}",
      "\N{U+03a6}\N{U+03b5}\N{U+03b2}",
      "\N{U+039c}\N{U+03ac}\N{U+03c1}",
      "\N{U+0391}\N{U+03c0}\N{U+03c1}",
      "\N{U+039c}\N{U+03ac}\N{U+03b9}",
      "\N{U+0399}\N{U+03bf}\N{U+03cd}\N{U+03bd}",
      "\N{U+0399}\N{U+03bf}\N{U+03cd}\N{U+03bb}",
      "\N{U+0391}\N{U+03cd}\N{U+03b3}",
      "\N{U+03a3}\N{U+03b5}\N{U+03c0}",
      "\N{U+039f}\N{U+03ba}\N{U+03c4}",
      "\N{U+039d}\N{U+03bf}\N{U+03ad}",
      "\N{U+0394}\N{U+03b5}\N{U+03ba}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0399}",
      "\N{U+03a6}",
      "\N{U+039c}",
      "\N{U+0391}",
      "\N{U+039c}",
      "\N{U+0399}",
      "\N{U+0399}",
      "\N{U+0391}",
      "\N{U+03a3}",
      "\N{U+039f}",
      "\N{U+039d}",
      "\N{U+0394}"
    ],
    month_stand_alone_wide => [
      "\N{U+0399}\N{U+03b1}\N{U+03bd}\N{U+03bf}\N{U+03c5}\N{U+03ac}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+03a6}\N{U+03b5}\N{U+03b2}\N{U+03c1}\N{U+03bf}\N{U+03c5}\N{U+03ac}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+039c}\N{U+03ac}\N{U+03c1}\N{U+03c4}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+0391}\N{U+03c0}\N{U+03c1}\N{U+03af}\N{U+03bb}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+039c}\N{U+03ac}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+0399}\N{U+03bf}\N{U+03cd}\N{U+03bd}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+0399}\N{U+03bf}\N{U+03cd}\N{U+03bb}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+0391}\N{U+03cd}\N{U+03b3}\N{U+03bf}\N{U+03c5}\N{U+03c3}\N{U+03c4}\N{U+03bf}\N{U+03c2}",
      "\N{U+03a3}\N{U+03b5}\N{U+03c0}\N{U+03c4}\N{U+03ad}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+039f}\N{U+03ba}\N{U+03c4}\N{U+03ce}\N{U+03b2}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+039d}\N{U+03bf}\N{U+03ad}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}",
      "\N{U+0394}\N{U+03b5}\N{U+03ba}\N{U+03ad}\N{U+03bc}\N{U+03b2}\N{U+03c1}\N{U+03b9}\N{U+03bf}\N{U+03c2}"
    ],
    name => "Greek Greece",
    native_language => "\N{U+0395}\N{U+03bb}\N{U+03bb}\N{U+03b7}\N{U+03bd}\N{U+03b9}\N{U+03ba}\N{U+03ac}",
    native_name => "\N{U+0395}\N{U+03bb}\N{U+03bb}\N{U+03b7}\N{U+03bd}\N{U+03b9}\N{U+03ba}\N{U+03ac} \N{U+0395}\N{U+03bb}\N{U+03bb}\N{U+03ac}\N{U+03b4}\N{U+03b1}",
    native_script => undef,
    native_territory => "\N{U+0395}\N{U+03bb}\N{U+03bb}\N{U+03ac}\N{U+03b4}\N{U+03b1}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+03a4}1",
      "\N{U+03a4}2",
      "\N{U+03a4}3",
      "\N{U+03a4}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "2\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "3\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "4\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+03a4}1",
      "\N{U+03a4}2",
      "\N{U+03a4}3",
      "\N{U+03a4}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "2\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "3\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}",
      "4\N{U+03bf} \N{U+03c4}\N{U+03c1}\N{U+03af}\N{U+03bc}\N{U+03b7}\N{U+03bd}\N{U+03bf}"
    ],
    script => undef,
    territory => "Greece",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-001 ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-001",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English World",
    native_language => "English",
    native_name => "English World",
    native_script => undef,
    native_territory => "World",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "World",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-150 ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-150",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Europe",
    native_language => "English",
    native_name => "English Europe",
    native_script => undef,
    native_territory => "Europe",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Europe",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-AG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-AG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Antigua & Barbuda",
    native_language => "English",
    native_name => "English Antigua & Barbuda",
    native_script => undef,
    native_territory => "Antigua & Barbuda",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Antigua & Barbuda",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-AI ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-AI",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Anguilla",
    native_language => "English",
    native_name => "English Anguilla",
    native_script => undef,
    native_territory => "Anguilla",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Anguilla",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-AS ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "MMM d, y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d, y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-AS",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English American Samoa",
    native_language => "English",
    native_name => "English American Samoa",
    native_script => undef,
    native_territory => "American Samoa",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "American Samoa",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-AT ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-AT",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Austria",
    native_language => "English",
    native_name => "English Austria",
    native_script => undef,
    native_territory => "Austria",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Austria",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-AU ]__
  {
    am_pm_abbreviated => [
      "am",
      "pm"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "LL",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-AU",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon.",
      "Tue.",
      "Wed.",
      "Thu.",
      "Fri.",
      "Sat.",
      "Sun."
    ],
    day_format_narrow => [
      "M.",
      "Tu.",
      "W.",
      "Th.",
      "F.",
      "Sa.",
      "Su."
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon.",
      "Tue.",
      "Wed.",
      "Thu.",
      "Fri.",
      "Sat.",
      "Sun."
    ],
    day_stand_alone_narrow => [
      "M.",
      "Tu.",
      "W.",
      "Th.",
      "F.",
      "Sa.",
      "Su."
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "English",
    month_format_abbreviated => [
      "Jan.",
      "Feb.",
      "Mar.",
      "Apr.",
      "May",
      "Jun.",
      "Jul.",
      "Aug.",
      "Sep.",
      "Oct.",
      "Nov.",
      "Dec."
    ],
    month_format_narrow => [
      "Jan.",
      "Feb.",
      "Mar.",
      "Apr.",
      "May",
      "Jun.",
      "Jul.",
      "Aug.",
      "Sep.",
      "Oct.",
      "Nov.",
      "Dec."
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan.",
      "Feb.",
      "Mar.",
      "Apr.",
      "May",
      "Jun.",
      "Jul.",
      "Aug.",
      "Sep.",
      "Oct.",
      "Nov.",
      "Dec."
    ],
    month_stand_alone_narrow => [
      "Jan.",
      "Feb.",
      "Mar.",
      "Apr.",
      "May",
      "Jun.",
      "Jul.",
      "Aug.",
      "Sep.",
      "Oct.",
      "Nov.",
      "Dec."
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Australia",
    native_language => "English",
    native_name => "English Australia",
    native_script => undef,
    native_territory => "Australia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Australia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-BB ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-BB",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Barbados",
    native_language => "English",
    native_name => "English Barbados",
    native_script => undef,
    native_territory => "Barbados",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Barbados",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-BE ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-BE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "dd MMM y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Belgium",
    native_language => "English",
    native_name => "English Belgium",
    native_script => undef,
    native_territory => "Belgium",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Belgium",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-BI ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "MMM d, y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d, y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-BI",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Burundi",
    native_language => "English",
    native_name => "English Burundi",
    native_script => undef,
    native_territory => "Burundi",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Burundi",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-BM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-BM",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Bermuda",
    native_language => "English",
    native_name => "English Bermuda",
    native_script => undef,
    native_territory => "Bermuda",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Bermuda",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-BS ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-BS",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Bahamas",
    native_language => "English",
    native_name => "English Bahamas",
    native_script => undef,
    native_territory => "Bahamas",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Bahamas",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-BW ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, dd MMM y G",
      GyMMMd => "dd MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, dd MMM",
      MMMMd => "d MMMM",
      MMMd => "dd MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, dd MMM y",
      yMMMM => "MMMM y",
      yMMMd => "dd MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-BW",
    date_format_full => "EEEE, dd MMMM y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd MMM y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Botswana",
    native_language => "English",
    native_name => "English Botswana",
    native_script => undef,
    native_territory => "Botswana",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Botswana",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-BZ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, dd MMM",
      MMMMd => "d MMMM",
      MMMd => "dd MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, dd MMM y",
      yMMMM => "MMMM y",
      yMMMd => "dd MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-BZ",
    date_format_full => "EEEE, dd MMMM y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd-MMM-y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Belize",
    native_language => "English",
    native_name => "English Belize",
    native_script => undef,
    native_territory => "Belize",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Belize",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-CC ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-CC",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Cocos (Keeling) Islands",
    native_language => "English",
    native_name => "English Cocos (Keeling) Islands",
    native_script => undef,
    native_territory => "Cocos (Keeling) Islands",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Cocos (Keeling) Islands",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-CH ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-CH",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Switzerland",
    native_language => "English",
    native_name => "English Switzerland",
    native_script => undef,
    native_territory => "Switzerland",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Switzerland",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-CK ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-CK",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Cook Islands",
    native_language => "English",
    native_name => "English Cook Islands",
    native_script => undef,
    native_territory => "Cook Islands",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Cook Islands",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-CM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-CM",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Cameroon",
    native_language => "English",
    native_name => "English Cameroon",
    native_script => undef,
    native_territory => "Cameroon",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Cameroon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-CX ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-CX",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Christmas Island",
    native_language => "English",
    native_name => "English Christmas Island",
    native_script => undef,
    native_territory => "Christmas Island",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Christmas Island",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-CY ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-CY",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Cyprus",
    native_language => "English",
    native_name => "English Cyprus",
    native_script => undef,
    native_territory => "Cyprus",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Cyprus",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-DE ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-DE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Germany",
    native_language => "English",
    native_name => "English Germany",
    native_script => undef,
    native_territory => "Germany",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Germany",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-DG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-DG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Diego Garcia",
    native_language => "English",
    native_name => "English Diego Garcia",
    native_script => undef,
    native_territory => "Diego Garcia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Diego Garcia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-DK ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH.mm",
      EHms => "E HH.mm.ss",
      Ed => "E d",
      Ehm => "E h.mm a",
      Ehms => "E h.mm.ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h.mm a",
      hms => "h.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-DK",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%Y-%m-%d",
    glibc_datetime_format => "%Y-%m-%dT%T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Denmark",
    native_language => "English",
    native_name => "English Denmark",
    native_script => undef,
    native_territory => "Denmark",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Denmark",
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ en-DM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-DM",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Dominica",
    native_language => "English",
    native_name => "English Dominica",
    native_script => undef,
    native_territory => "Dominica",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Dominica",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-ER ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-ER",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Eritrea",
    native_language => "English",
    native_name => "English Eritrea",
    native_script => undef,
    native_territory => "Eritrea",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Eritrea",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-FI ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H.mm",
      EHms => "E H.mm.ss",
      Ed => "E d",
      Ehm => "E h.mm a",
      Ehms => "E h.mm.ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "H.mm",
      Hms => "H.mm.ss",
      Hmsv => "H.mm.ss v",
      Hmv => "H.mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h.mm a",
      hms => "h.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-FI",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Finland",
    native_language => "English",
    native_name => "English Finland",
    native_script => undef,
    native_territory => "Finland",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Finland",
    time_format_full => "H.mm.ss zzzz",
    time_format_long => "H.mm.ss z",
    time_format_medium => "H.mm.ss",
    time_format_short => "H.mm",
    variant => undef,
    version => 29
  }
  __[ en-FJ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-FJ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Fiji",
    native_language => "English",
    native_name => "English Fiji",
    native_script => undef,
    native_territory => "Fiji",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Fiji",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-FK ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-FK",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Falkland Islands",
    native_language => "English",
    native_name => "English Falkland Islands",
    native_script => undef,
    native_territory => "Falkland Islands",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Falkland Islands",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-FM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-FM",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Micronesia",
    native_language => "English",
    native_name => "English Micronesia",
    native_script => undef,
    native_territory => "Micronesia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Micronesia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-GB ]__
  {
    am_pm_abbreviated => [
      "am",
      "pm"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-GB",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %e %b %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%l:%M:%S %P %Z",
    glibc_time_format => "%T",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English United Kingdom",
    native_language => "English",
    native_name => "English United Kingdom",
    native_script => undef,
    native_territory => "United Kingdom",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "United Kingdom",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-GD ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-GD",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Grenada",
    native_language => "English",
    native_name => "English Grenada",
    native_script => undef,
    native_territory => "Grenada",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Grenada",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-GG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-GG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Guernsey",
    native_language => "English",
    native_name => "English Guernsey",
    native_script => undef,
    native_territory => "Guernsey",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Guernsey",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-GH ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-GH",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Ghana",
    native_language => "English",
    native_name => "English Ghana",
    native_script => undef,
    native_territory => "Ghana",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Ghana",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-GI ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-GI",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Gibraltar",
    native_language => "English",
    native_name => "English Gibraltar",
    native_script => undef,
    native_territory => "Gibraltar",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Gibraltar",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-GM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-GM",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Gambia",
    native_language => "English",
    native_name => "English Gambia",
    native_script => undef,
    native_territory => "Gambia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Gambia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-GU ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "MMM d, y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d, y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-GU",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Guam",
    native_language => "English",
    native_name => "English Guam",
    native_script => undef,
    native_territory => "Guam",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Guam",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-GY ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-GY",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Guyana",
    native_language => "English",
    native_name => "English Guyana",
    native_script => undef,
    native_territory => "Guyana",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Guyana",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-HK ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-HK",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A, %B %d, %Y",
    glibc_datetime_format => "%A, %B %d, %Y %p%I:%M:%S %Z",
    glibc_time_12_format => "%p%I:%M:%S %Z",
    glibc_time_format => "%I:%M:%S %Z",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Hong Kong SAR China",
    native_language => "English",
    native_name => "English Hong Kong SAR China",
    native_script => undef,
    native_territory => "Hong Kong SAR China",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Hong Kong SAR China",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-IE ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-IE",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Ireland",
    native_language => "English",
    native_name => "English Ireland",
    native_script => undef,
    native_territory => "Ireland",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Ireland",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-IL ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H:mm",
      EHms => "E H:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-IL",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Israel",
    native_language => "English",
    native_name => "English Israel",
    native_script => undef,
    native_territory => "Israel",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Israel",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ en-IM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-IM",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Isle of Man",
    native_language => "English",
    native_name => "English Isle of Man",
    native_script => undef,
    native_territory => "Isle of Man",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Isle of Man",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-IN ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-IN",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "dd-MMM-y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A %d %B %Y",
    glibc_datetime_format => "%A %d %B %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English India",
    native_language => "English",
    native_name => "English India",
    native_script => undef,
    native_territory => "India",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "India",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-IO ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-IO",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English British Indian Ocean Territory",
    native_language => "English",
    native_name => "English British Indian Ocean Territory",
    native_script => undef,
    native_territory => "British Indian Ocean Territory",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "British Indian Ocean Territory",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-JE ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-JE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Jersey",
    native_language => "English",
    native_name => "English Jersey",
    native_script => undef,
    native_territory => "Jersey",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Jersey",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-JM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-JM",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Jamaica",
    native_language => "English",
    native_name => "English Jamaica",
    native_script => undef,
    native_territory => "Jamaica",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Jamaica",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-KE ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-KE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Kenya",
    native_language => "English",
    native_name => "English Kenya",
    native_script => undef,
    native_territory => "Kenya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Kenya",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-KI ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-KI",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Kiribati",
    native_language => "English",
    native_name => "English Kiribati",
    native_script => undef,
    native_territory => "Kiribati",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Kiribati",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-KN ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-KN",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English St. Kitts & Nevis",
    native_language => "English",
    native_name => "English St. Kitts & Nevis",
    native_script => undef,
    native_territory => "St. Kitts & Nevis",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "St. Kitts & Nevis",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-KY ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-KY",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Cayman Islands",
    native_language => "English",
    native_name => "English Cayman Islands",
    native_script => undef,
    native_territory => "Cayman Islands",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Cayman Islands",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-LC ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-LC",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English St. Lucia",
    native_language => "English",
    native_name => "English St. Lucia",
    native_script => undef,
    native_territory => "St. Lucia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "St. Lucia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-LR ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-LR",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Liberia",
    native_language => "English",
    native_name => "English Liberia",
    native_script => undef,
    native_territory => "Liberia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Liberia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-LS ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-LS",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Lesotho",
    native_language => "English",
    native_name => "English Lesotho",
    native_script => undef,
    native_territory => "Lesotho",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Lesotho",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-MG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-MG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Madagascar",
    native_language => "English",
    native_name => "English Madagascar",
    native_script => undef,
    native_territory => "Madagascar",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Madagascar",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-MH ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "MMM d, y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d, y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-MH",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Marshall Islands",
    native_language => "English",
    native_name => "English Marshall Islands",
    native_script => undef,
    native_territory => "Marshall Islands",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Marshall Islands",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-MO ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-MO",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Macau SAR China",
    native_language => "English",
    native_name => "English Macau SAR China",
    native_script => undef,
    native_territory => "Macau SAR China",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Macau SAR China",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-MP ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "MMM d, y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d, y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-MP",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Northern Mariana Islands",
    native_language => "English",
    native_name => "English Northern Mariana Islands",
    native_script => undef,
    native_territory => "Northern Mariana Islands",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Northern Mariana Islands",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-MS ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-MS",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Montserrat",
    native_language => "English",
    native_name => "English Montserrat",
    native_script => undef,
    native_territory => "Montserrat",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Montserrat",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-MT ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "dd MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, dd MMM y",
      yMMMM => "MMMM y",
      yMMMd => "dd MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-MT",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Malta",
    native_language => "English",
    native_name => "English Malta",
    native_script => undef,
    native_territory => "Malta",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Malta",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-MU ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-MU",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Mauritius",
    native_language => "English",
    native_name => "English Mauritius",
    native_script => undef,
    native_territory => "Mauritius",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Mauritius",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-MW ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-MW",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Malawi",
    native_language => "English",
    native_name => "English Malawi",
    native_script => undef,
    native_territory => "Malawi",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Malawi",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-MY ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-MY",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Malaysia",
    native_language => "English",
    native_name => "English Malaysia",
    native_script => undef,
    native_territory => "Malaysia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Malaysia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-NA ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-NA",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Namibia",
    native_language => "English",
    native_name => "English Namibia",
    native_script => undef,
    native_territory => "Namibia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Namibia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-NF ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-NF",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Norfolk Island",
    native_language => "English",
    native_name => "English Norfolk Island",
    native_script => undef,
    native_territory => "Norfolk Island",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Norfolk Island",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-NG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-NG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Nigeria",
    native_language => "English",
    native_name => "English Nigeria",
    native_script => undef,
    native_territory => "Nigeria",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Nigeria",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-NL ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-NL",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Netherlands",
    native_language => "English",
    native_name => "English Netherlands",
    native_script => undef,
    native_territory => "Netherlands",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Netherlands",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-NR ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-NR",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Nauru",
    native_language => "English",
    native_name => "English Nauru",
    native_script => undef,
    native_territory => "Nauru",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Nauru",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-NU ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-NU",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Niue",
    native_language => "English",
    native_name => "English Niue",
    native_script => undef,
    native_territory => "Niue",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Niue",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-NZ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-NZ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d/MM/y",
    date_format_short => "d/MM/yy",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English New Zealand",
    native_language => "English",
    native_name => "English New Zealand",
    native_script => undef,
    native_territory => "New Zealand",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "New Zealand",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-PG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-PG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Papua New Guinea",
    native_language => "English",
    native_name => "English Papua New Guinea",
    native_script => undef,
    native_territory => "Papua New Guinea",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Papua New Guinea",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-PH ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-PH",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A, %d %B, %Y",
    glibc_datetime_format => "%A, %d %B, %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Philippines",
    native_language => "English",
    native_name => "English Philippines",
    native_script => undef,
    native_territory => "Philippines",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Philippines",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-PK ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-PK",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "dd-MMM-y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Pakistan",
    native_language => "English",
    native_name => "English Pakistan",
    native_script => undef,
    native_territory => "Pakistan",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Pakistan",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-PN ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-PN",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Pitcairn Islands",
    native_language => "English",
    native_name => "English Pitcairn Islands",
    native_script => undef,
    native_territory => "Pitcairn Islands",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Pitcairn Islands",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-PR ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "MMM d, y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d, y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-PR",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Puerto Rico",
    native_language => "English",
    native_name => "English Puerto Rico",
    native_script => undef,
    native_territory => "Puerto Rico",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Puerto Rico",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-PW ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-PW",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Palau",
    native_language => "English",
    native_name => "English Palau",
    native_script => undef,
    native_territory => "Palau",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Palau",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-RW ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-RW",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Rwanda",
    native_language => "English",
    native_name => "English Rwanda",
    native_script => undef,
    native_territory => "Rwanda",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Rwanda",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-SB ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-SB",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Solomon Islands",
    native_language => "English",
    native_name => "English Solomon Islands",
    native_script => undef,
    native_territory => "Solomon Islands",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Solomon Islands",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-SC ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-SC",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Seychelles",
    native_language => "English",
    native_name => "English Seychelles",
    native_script => undef,
    native_territory => "Seychelles",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Seychelles",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-SD ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-SD",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Sudan",
    native_language => "English",
    native_name => "English Sudan",
    native_script => undef,
    native_territory => "Sudan",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Sudan",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-SE ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "E, y-MM-dd",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-SE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Sweden",
    native_language => "English",
    native_name => "English Sweden",
    native_script => undef,
    native_territory => "Sweden",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Sweden",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-SG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-SG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%a %d %b %Y %r",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Singapore",
    native_language => "English",
    native_name => "English Singapore",
    native_script => undef,
    native_territory => "Singapore",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Singapore",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-SH ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-SH",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English St. Helena",
    native_language => "English",
    native_name => "English St. Helena",
    native_script => undef,
    native_territory => "St. Helena",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "St. Helena",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-SI ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-SI",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Slovenia",
    native_language => "English",
    native_name => "English Slovenia",
    native_script => undef,
    native_territory => "Slovenia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Slovenia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-SL ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-SL",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Sierra Leone",
    native_language => "English",
    native_name => "English Sierra Leone",
    native_script => undef,
    native_territory => "Sierra Leone",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Sierra Leone",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-SS ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-SS",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English South Sudan",
    native_language => "English",
    native_name => "English South Sudan",
    native_script => undef,
    native_territory => "South Sudan",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "South Sudan",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-SX ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-SX",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Sint Maarten",
    native_language => "English",
    native_name => "English Sint Maarten",
    native_script => undef,
    native_territory => "Sint Maarten",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Sint Maarten",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-SZ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-SZ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Swaziland",
    native_language => "English",
    native_name => "English Swaziland",
    native_script => undef,
    native_territory => "Swaziland",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Swaziland",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-TC ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-TC",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Turks & Caicos Islands",
    native_language => "English",
    native_name => "English Turks & Caicos Islands",
    native_script => undef,
    native_territory => "Turks & Caicos Islands",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Turks & Caicos Islands",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-TK ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-TK",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Tokelau",
    native_language => "English",
    native_name => "English Tokelau",
    native_script => undef,
    native_territory => "Tokelau",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Tokelau",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-TO ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-TO",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Tonga",
    native_language => "English",
    native_name => "English Tonga",
    native_script => undef,
    native_territory => "Tonga",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Tonga",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-TT ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-TT",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Trinidad & Tobago",
    native_language => "English",
    native_name => "English Trinidad & Tobago",
    native_script => undef,
    native_territory => "Trinidad & Tobago",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Trinidad & Tobago",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-TV ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-TV",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Tuvalu",
    native_language => "English",
    native_name => "English Tuvalu",
    native_script => undef,
    native_territory => "Tuvalu",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Tuvalu",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-TZ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-TZ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Tanzania",
    native_language => "English",
    native_name => "English Tanzania",
    native_script => undef,
    native_territory => "Tanzania",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Tanzania",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-UG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-UG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Uganda",
    native_language => "English",
    native_name => "English Uganda",
    native_script => undef,
    native_territory => "Uganda",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Uganda",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ en-UM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "MMM d, y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d, y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-UM",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English U.S. Outlying Islands",
    native_language => "English",
    native_name => "English U.S. Outlying Islands",
    native_script => undef,
    native_territory => "U.S. Outlying Islands",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "U.S. Outlying Islands",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-US-POSIX ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "MMM d, y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d, y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-US-POSIX",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%Y",
    glibc_datetime_format => "%a %d %b %Y %r %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%r",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English United States Computer",
    native_language => "English",
    native_name => "English United States Computer",
    native_script => undef,
    native_territory => "United States",
    native_variant => "Computer",
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "United States",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => "Computer",
    version => 29
  }
  __[ en-VC ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-VC",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English St. Vincent & Grenadines",
    native_language => "English",
    native_name => "English St. Vincent & Grenadines",
    native_script => undef,
    native_territory => "St. Vincent & Grenadines",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "St. Vincent & Grenadines",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-VG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-VG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English British Virgin Islands",
    native_language => "English",
    native_name => "English British Virgin Islands",
    native_script => undef,
    native_territory => "British Virgin Islands",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "British Virgin Islands",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-VI ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "MMM d, y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d, y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-VI",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English U.S. Virgin Islands",
    native_language => "English",
    native_name => "English U.S. Virgin Islands",
    native_script => undef,
    native_territory => "U.S. Virgin Islands",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "U.S. Virgin Islands",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-VU ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-VU",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Vanuatu",
    native_language => "English",
    native_name => "English Vanuatu",
    native_script => undef,
    native_territory => "Vanuatu",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Vanuatu",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-WS ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-WS",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Samoa",
    native_language => "English",
    native_name => "English Samoa",
    native_script => undef,
    native_territory => "Samoa",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Samoa",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-ZA ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, MM/dd",
      MMM => "LLL",
      MMMEd => "E, dd MMM",
      MMMMd => "d MMMM",
      MMMd => "dd MMM",
      MMdd => "dd/MM",
      Md => "MM/dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, y/MM/dd",
      yMMM => "MMM y",
      yMMMEd => "E, dd MMM y",
      yMMMM => "MMMM y",
      yMMMd => "dd MMM y",
      yMd => "y/MM/dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-ZA",
    date_format_full => "EEEE, dd MMMM y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd MMM y",
    date_format_short => "y/MM/dd",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English South Africa",
    native_language => "English",
    native_name => "English South Africa",
    native_script => undef,
    native_territory => "South Africa",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "South Africa",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-ZM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-ZM",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Zambia",
    native_language => "English",
    native_name => "English Zambia",
    native_script => undef,
    native_territory => "Zambia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Zambia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ en-ZW ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, dd MMM",
      MMMMd => "d MMMM",
      MMMd => "dd MMM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, dd MMM, y",
      yMMMM => "MMMM y",
      yMMMd => "dd MMM, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "en-ZW",
    date_format_full => "EEEE, dd MMMM y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd MMM,y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} 'at' {0}",
    datetime_format_long => "{1} 'at' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Monday",
      "Tuesday",
      "Wednesday",
      "Thursday",
      "Friday",
      "Saturday",
      "Sunday"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "B",
      "A"
    ],
    era_wide => [
      "Before Christ",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "English",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "January",
      "February",
      "March",
      "April",
      "May",
      "June",
      "July",
      "August",
      "September",
      "October",
      "November",
      "December"
    ],
    name => "English Zimbabwe",
    native_language => "English",
    native_name => "English Zimbabwe",
    native_script => undef,
    native_territory => "Zimbabwe",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1st quarter",
      "2nd quarter",
      "3rd quarter",
      "4th quarter"
    ],
    script => undef,
    territory => "Zimbabwe",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ eo ]__
  {
    am_pm_abbreviated => [
      "atm",
      "ptm"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "eo",
    date_format_full => "EEEE, d-'a' 'de' MMMM y",
    date_format_long => "y-MMMM-dd",
    date_format_medium => "y-MMM-dd",
    date_format_short => "yy-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lu",
      "ma",
      "me",
      "\N{U+0135}a",
      "ve",
      "sa",
      "di"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "lundo",
      "mardo",
      "merkredo",
      "\N{U+0135}a\N{U+016d}do",
      "vendredo",
      "sabato",
      "diman\N{U+0109}o"
    ],
    day_stand_alone_abbreviated => [
      "lu",
      "ma",
      "me",
      "\N{U+0135}a",
      "ve",
      "sa",
      "di"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "lundo",
      "mardo",
      "merkredo",
      "\N{U+0135}a\N{U+016d}do",
      "vendredo",
      "sabato",
      "diman\N{U+0109}o"
    ],
    era_abbreviated => [
      "aK",
      "pK"
    ],
    era_narrow => [
      "aK",
      "pK"
    ],
    era_wide => [
      "aK",
      "pK"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Esperanto",
    month_format_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "a\N{U+016d}g",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "januaro",
      "februaro",
      "marto",
      "aprilo",
      "majo",
      "junio",
      "julio",
      "a\N{U+016d}gusto",
      "septembro",
      "oktobro",
      "novembro",
      "decembro"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "a\N{U+016d}g",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "januaro",
      "februaro",
      "marto",
      "aprilo",
      "majo",
      "junio",
      "julio",
      "a\N{U+016d}gusto",
      "septembro",
      "oktobro",
      "novembro",
      "decembro"
    ],
    name => "Esperanto",
    native_language => "esperanto",
    native_name => "esperanto",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H-'a' 'horo' 'kaj' m:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ eo-001 ]__
  {
    am_pm_abbreviated => [
      "atm",
      "ptm"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "eo-001",
    date_format_full => "EEEE, d-'a' 'de' MMMM y",
    date_format_long => "y-MMMM-dd",
    date_format_medium => "y-MMM-dd",
    date_format_short => "yy-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lu",
      "ma",
      "me",
      "\N{U+0135}a",
      "ve",
      "sa",
      "di"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "lundo",
      "mardo",
      "merkredo",
      "\N{U+0135}a\N{U+016d}do",
      "vendredo",
      "sabato",
      "diman\N{U+0109}o"
    ],
    day_stand_alone_abbreviated => [
      "lu",
      "ma",
      "me",
      "\N{U+0135}a",
      "ve",
      "sa",
      "di"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "lundo",
      "mardo",
      "merkredo",
      "\N{U+0135}a\N{U+016d}do",
      "vendredo",
      "sabato",
      "diman\N{U+0109}o"
    ],
    era_abbreviated => [
      "aK",
      "pK"
    ],
    era_narrow => [
      "aK",
      "pK"
    ],
    era_wide => [
      "aK",
      "pK"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Esperanto",
    month_format_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "a\N{U+016d}g",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "januaro",
      "februaro",
      "marto",
      "aprilo",
      "majo",
      "junio",
      "julio",
      "a\N{U+016d}gusto",
      "septembro",
      "oktobro",
      "novembro",
      "decembro"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "a\N{U+016d}g",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "januaro",
      "februaro",
      "marto",
      "aprilo",
      "majo",
      "junio",
      "julio",
      "a\N{U+016d}gusto",
      "septembro",
      "oktobro",
      "novembro",
      "decembro"
    ],
    name => "Esperanto World",
    native_language => "esperanto",
    native_name => "esperanto 001",
    native_script => undef,
    native_territory => "001",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "World",
    time_format_full => "H-'a' 'horo' 'kaj' m:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-419 ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-419",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Latin America",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Latinoam\N{U+00e9}rica",
    native_script => undef,
    native_territory => "Latinoam\N{U+00e9}rica",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Latin America",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-AR ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d 'de' MMM 'de' y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d-M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "hh:mm:ss",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E, d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-AR",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Argentina",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Argentina",
    native_script => undef,
    native_territory => "Argentina",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Argentina",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-BO ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-BO",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Bolivia",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Bolivia",
    native_script => undef,
    native_territory => "Bolivia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Bolivia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-BR ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-BR",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Brazil",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Brasil",
    native_script => undef,
    native_territory => "Brasil",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Brazil",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-CL ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, dd-MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "dd-MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM-y",
      yMEd => "E dd-MM-y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "dd-MM-y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-CL",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "dd-MM-y",
    date_format_short => "dd-MM-yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sept.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Chile",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Chile",
    native_script => undef,
    native_territory => "Chile",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.\N{U+00b0} trimestre",
      "2.\N{U+00b0} trimestre",
      "3.\N{U+00b0} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Chile",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-CO ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM 'de' y G",
      GyMMMEd => "E, d MMM 'de' y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d 'de' MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d 'de' MMM",
      MMMdd => "d 'de' MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-CO",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d/MM/y",
    date_format_short => "d/MM/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sept.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Colombia",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Colombia",
    native_script => undef,
    native_territory => "Colombia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Colombia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ es-CR ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-CR",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %e %b %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Costa Rica",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Costa Rica",
    native_script => undef,
    native_territory => "Costa Rica",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Costa Rica",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-CU ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-CU",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Cuba",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Cuba",
    native_script => undef,
    native_territory => "Cuba",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Cuba",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-DO ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d MMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-DO",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Dominican Republic",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Rep\N{U+00fa}blica Dominicana",
    native_script => undef,
    native_territory => "Rep\N{U+00fa}blica Dominicana",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Dominican Republic",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ es-EA ]__
  {
    am_pm_abbreviated => [
      "a. m.",
      "p. m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, H:mm",
      EHms => "E, H:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d MMM y G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "EEE, d/M/y",
      yMM => "M/y",
      yMMM => "MMM y",
      yMMMEd => "EEE, d MMM y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-EA",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sept.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sept.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Ceuta & Melilla",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Ceuta y Melilla",
    native_script => undef,
    native_territory => "Ceuta y Melilla",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Ceuta & Melilla",
    time_format_full => "H:mm:ss (zzzz)",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ es-EC ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-EC",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Ecuador",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Ecuador",
    native_script => undef,
    native_territory => "Ecuador",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Ecuador",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-ES ]__
  {
    am_pm_abbreviated => [
      "a. m.",
      "p. m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, H:mm",
      EHms => "E, H:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d MMM y G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "EEE, d/M/y",
      yMM => "M/y",
      yMMM => "MMM y",
      yMMMEd => "EEE, d MMM y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-ES",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sept.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sept.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Spain",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Espa\N{U+00f1}a",
    native_script => undef,
    native_territory => "Espa\N{U+00f1}a",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Spain",
    time_format_full => "H:mm:ss (zzzz)",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ es-GQ ]__
  {
    am_pm_abbreviated => [
      "a. m.",
      "p. m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, H:mm",
      EHms => "E, H:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d MMM y G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "EEE, d/M/y",
      yMM => "M/y",
      yMMM => "MMM y",
      yMMMEd => "EEE, d MMM y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-GQ",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sept.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sept.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Equatorial Guinea",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Guinea Ecuatorial",
    native_script => undef,
    native_territory => "Guinea Ecuatorial",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Equatorial Guinea",
    time_format_full => "H:mm:ss (zzzz)",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ es-GT ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-GT",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d/MM/y",
    date_format_short => "d/MM/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Guatemala",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Guatemala",
    native_script => undef,
    native_territory => "Guatemala",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Guatemala",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-HN ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-HN",
    date_format_full => "EEEE dd 'de' MMMM 'de' y",
    date_format_long => "dd 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Honduras",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Honduras",
    native_script => undef,
    native_territory => "Honduras",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Honduras",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-IC ]__
  {
    am_pm_abbreviated => [
      "a. m.",
      "p. m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, H:mm",
      EHms => "E, H:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d MMM y G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "EEE, d/M/y",
      yMM => "M/y",
      yMMM => "MMM y",
      yMMMEd => "EEE, d MMM y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-IC",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sept.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sept.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Canary Islands",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Canarias",
    native_script => undef,
    native_territory => "Canarias",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Canary Islands",
    time_format_full => "H:mm:ss (zzzz)",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ es-MX ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H:mm",
      EHms => "E H:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E d 'de' MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-MX",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "dd/MM/y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene",
      "feb",
      "mar",
      "abr",
      "may",
      "jun",
      "jul",
      "ago",
      "sep",
      "oct",
      "nov",
      "dic"
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Mexico",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol M\N{U+00e9}xico",
    native_script => undef,
    native_territory => "M\N{U+00e9}xico",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1er. trim.",
      "2\N{U+00ba}. trim.",
      "3er. trim.",
      "4\N{U+00ba} trim."
    ],
    quarter_format_narrow => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_format_wide => [
      "1er. trimestre",
      "2\N{U+00ba}. trimestre",
      "3er. trimestre",
      "4\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "1er. trim.",
      "2\N{U+00ba}. trim.",
      "3er. trim.",
      "4\N{U+00ba} trim."
    ],
    quarter_stand_alone_narrow => [
      "1T",
      "2T",
      "3T",
      "4T"
    ],
    quarter_stand_alone_wide => [
      "1er. trimestre",
      "2\N{U+00ba}. trimestre",
      "3er. trimestre",
      "4\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Mexico",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-NI ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-NI",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Nicaragua",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Nicaragua",
    native_script => undef,
    native_territory => "Nicaragua",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Nicaragua",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-PA ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, MM/dd",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "MM/dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E MM/dd/y",
      yMM => "M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d MMM y",
      yMd => "MM/dd/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-PA",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "MM/dd/y",
    date_format_short => "MM/dd/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Panama",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Panam\N{U+00e1}",
    native_script => undef,
    native_territory => "Panam\N{U+00e1}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er. trimestre",
      "2do. trimestre",
      "3er. trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er. trimestre",
      "2do. trimestre",
      "3er. trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Panama",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ es-PE ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-PE",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/MM/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "set.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "setiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "Ene.",
      "Feb.",
      "Mar.",
      "Abr.",
      "May.",
      "Jun.",
      "Jul.",
      "Ago.",
      "Set.",
      "Oct.",
      "Nov.",
      "Dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Enero",
      "Febrero",
      "Marzo",
      "Abril",
      "Mayo",
      "Junio",
      "Julio",
      "Agosto",
      "Setiembre",
      "Octubre",
      "Noviembre",
      "Diciembre"
    ],
    name => "Spanish Peru",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Per\N{U+00fa}",
    native_script => undef,
    native_territory => "Per\N{U+00fa}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Peru",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-PH ]__
  {
    am_pm_abbreviated => [
      "a. m.",
      "p. m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, H:mm",
      EHms => "E, H:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d MMM y G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "EEE, d/M/y",
      yMM => "M/y",
      yMMM => "MMM y",
      yMMMEd => "EEE, d MMM y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-PH",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sept.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sept.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Philippines",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Filipinas",
    native_script => undef,
    native_territory => "Filipinas",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Philippines",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ es-PR ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, MM/dd",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "MM/dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E MM/dd/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "MM/dd/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-PR",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "MM/dd/y",
    date_format_short => "MM/dd/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Puerto Rico",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Puerto Rico",
    native_script => undef,
    native_territory => "Puerto Rico",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Puerto Rico",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ es-PY ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-PY",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sept.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sept.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Paraguay",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Paraguay",
    native_script => undef,
    native_territory => "Paraguay",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Paraguay",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-SV ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-SV",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish El Salvador",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol El Salvador",
    native_script => undef,
    native_territory => "El Salvador",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "El Salvador",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-US ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-US",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sep.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish United States",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Estados Unidos",
    native_script => undef,
    native_territory => "Estados Unidos",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "United States",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ es-UY ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMMM 'de' y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-UY",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "set.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "e",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "setiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "Ene.",
      "Feb.",
      "Mar.",
      "Abr.",
      "May.",
      "Jun.",
      "Jul.",
      "Ago.",
      "Set.",
      "Oct.",
      "Nov.",
      "Dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Enero",
      "Febrero",
      "Marzo",
      "Abril",
      "Mayo",
      "Junio",
      "Julio",
      "Agosto",
      "Setiembre",
      "Octubre",
      "Noviembre",
      "Diciembre"
    ],
    name => "Spanish Uruguay",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Uruguay",
    native_script => undef,
    native_territory => "Uruguay",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.er trimestre",
      "2.\N{U+00ba} trimestre",
      "3.er trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Uruguay",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ es-VE ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "MMMM 'de' y G",
      GyMMMMEd => "E, d 'de' MMMM 'de' y G",
      GyMMMMd => "d 'de' MMMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmsvvvv => "H:mm:ss (vvvv)",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d MMM",
      MMMdd => "dd-MMM",
      MMd => "d/M",
      MMdd => "d/M",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmsvvvv => "h:mm:ss a (vvvv)",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "M/y",
      yMMM => "MMMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "EEE, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "es-VE",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mi\N{U+00e9}.",
      "jue.",
      "vie.",
      "s\N{U+00e1}b.",
      "dom."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunes",
      "martes",
      "mi\N{U+00e9}rcoles",
      "jueves",
      "viernes",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a. C.",
      "d. C."
    ],
    era_narrow => [
      "a. C.",
      "d. C."
    ],
    era_wide => [
      "antes de Cristo",
      "despu\N{U+00e9}s de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Spanish",
    month_format_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sept.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_format_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    month_stand_alone_abbreviated => [
      "ene.",
      "feb.",
      "mar.",
      "abr.",
      "may.",
      "jun.",
      "jul.",
      "ago.",
      "sept.",
      "oct.",
      "nov.",
      "dic."
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "enero",
      "febrero",
      "marzo",
      "abril",
      "mayo",
      "junio",
      "julio",
      "agosto",
      "septiembre",
      "octubre",
      "noviembre",
      "diciembre"
    ],
    name => "Spanish Venezuela",
    native_language => "espa\N{U+00f1}ol",
    native_name => "espa\N{U+00f1}ol Venezuela",
    native_script => undef,
    native_territory => "Venezuela",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2do trimestre",
      "3er trimestre",
      "4to trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2do trimestre",
      "3er trimestre",
      "4to trimestre"
    ],
    script => undef,
    territory => "Venezuela",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ et ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm.ss",
      Ed => "E, d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm.ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "H:mm.ss",
      Hmsv => "HH:mm.ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "E, d.M",
      MMM => "MMMM",
      MMMEd => "E, d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      Md => "d.M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm.ss a",
      hmsv => "h:mm.ss a v",
      hmv => "h:mm a v",
      mmss => "mm.ss",
      ms => "mm.ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "et",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "E",
      "T",
      "K",
      "N",
      "R",
      "L",
      "P"
    ],
    day_format_narrow => [
      "E",
      "T",
      "K",
      "N",
      "R",
      "L",
      "P"
    ],
    day_format_wide => [
      "esmasp\N{U+00e4}ev",
      "teisip\N{U+00e4}ev",
      "kolmap\N{U+00e4}ev",
      "neljap\N{U+00e4}ev",
      "reede",
      "laup\N{U+00e4}ev",
      "p\N{U+00fc}hap\N{U+00e4}ev"
    ],
    day_stand_alone_abbreviated => [
      "E",
      "T",
      "K",
      "N",
      "R",
      "L",
      "P"
    ],
    day_stand_alone_narrow => [
      "E",
      "T",
      "K",
      "N",
      "R",
      "L",
      "P"
    ],
    day_stand_alone_wide => [
      "esmasp\N{U+00e4}ev",
      "teisip\N{U+00e4}ev",
      "kolmap\N{U+00e4}ev",
      "neljap\N{U+00e4}ev",
      "reede",
      "laup\N{U+00e4}ev",
      "p\N{U+00fc}hap\N{U+00e4}ev"
    ],
    era_abbreviated => [
      "eKr",
      "pKr"
    ],
    era_narrow => [
      "eKr",
      "pKr"
    ],
    era_wide => [
      "enne Kristust",
      "p\N{U+00e4}rast Kristust"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Estonian",
    month_format_abbreviated => [
      "jaan",
      "veebr",
      "m\N{U+00e4}rts",
      "apr",
      "mai",
      "juuni",
      "juuli",
      "aug",
      "sept",
      "okt",
      "nov",
      "dets"
    ],
    month_format_narrow => [
      "J",
      "V",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "jaanuar",
      "veebruar",
      "m\N{U+00e4}rts",
      "aprill",
      "mai",
      "juuni",
      "juuli",
      "august",
      "september",
      "oktoober",
      "november",
      "detsember"
    ],
    month_stand_alone_abbreviated => [
      "jaan",
      "veebr",
      "m\N{U+00e4}rts",
      "apr",
      "mai",
      "juuni",
      "juuli",
      "aug",
      "sept",
      "okt",
      "nov",
      "dets"
    ],
    month_stand_alone_narrow => [
      "J",
      "V",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "jaanuar",
      "veebruar",
      "m\N{U+00e4}rts",
      "aprill",
      "mai",
      "juuni",
      "juuli",
      "august",
      "september",
      "oktoober",
      "november",
      "detsember"
    ],
    name => "Estonian",
    native_language => "eesti",
    native_name => "eesti",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H:mm.ss zzzz",
    time_format_long => "H:mm.ss z",
    time_format_medium => "H:mm.ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ et-EE ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm.ss",
      Ed => "E, d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm.ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "H:mm.ss",
      Hmsv => "HH:mm.ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "E, d.M",
      MMM => "MMMM",
      MMMEd => "E, d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      Md => "d.M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm.ss a",
      hmsv => "h:mm.ss a v",
      hmv => "h:mm a v",
      mmss => "mm.ss",
      ms => "mm.ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "et-EE",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "E",
      "T",
      "K",
      "N",
      "R",
      "L",
      "P"
    ],
    day_format_narrow => [
      "E",
      "T",
      "K",
      "N",
      "R",
      "L",
      "P"
    ],
    day_format_wide => [
      "esmasp\N{U+00e4}ev",
      "teisip\N{U+00e4}ev",
      "kolmap\N{U+00e4}ev",
      "neljap\N{U+00e4}ev",
      "reede",
      "laup\N{U+00e4}ev",
      "p\N{U+00fc}hap\N{U+00e4}ev"
    ],
    day_stand_alone_abbreviated => [
      "E",
      "T",
      "K",
      "N",
      "R",
      "L",
      "P"
    ],
    day_stand_alone_narrow => [
      "E",
      "T",
      "K",
      "N",
      "R",
      "L",
      "P"
    ],
    day_stand_alone_wide => [
      "esmasp\N{U+00e4}ev",
      "teisip\N{U+00e4}ev",
      "kolmap\N{U+00e4}ev",
      "neljap\N{U+00e4}ev",
      "reede",
      "laup\N{U+00e4}ev",
      "p\N{U+00fc}hap\N{U+00e4}ev"
    ],
    era_abbreviated => [
      "eKr",
      "pKr"
    ],
    era_narrow => [
      "eKr",
      "pKr"
    ],
    era_wide => [
      "enne Kristust",
      "p\N{U+00e4}rast Kristust"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Estonian",
    month_format_abbreviated => [
      "jaan",
      "veebr",
      "m\N{U+00e4}rts",
      "apr",
      "mai",
      "juuni",
      "juuli",
      "aug",
      "sept",
      "okt",
      "nov",
      "dets"
    ],
    month_format_narrow => [
      "J",
      "V",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "jaanuar",
      "veebruar",
      "m\N{U+00e4}rts",
      "aprill",
      "mai",
      "juuni",
      "juuli",
      "august",
      "september",
      "oktoober",
      "november",
      "detsember"
    ],
    month_stand_alone_abbreviated => [
      "jaan",
      "veebr",
      "m\N{U+00e4}rts",
      "apr",
      "mai",
      "juuni",
      "juuli",
      "aug",
      "sept",
      "okt",
      "nov",
      "dets"
    ],
    month_stand_alone_narrow => [
      "J",
      "V",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "jaanuar",
      "veebruar",
      "m\N{U+00e4}rts",
      "aprill",
      "mai",
      "juuni",
      "juuli",
      "august",
      "september",
      "oktoober",
      "november",
      "detsember"
    ],
    name => "Estonian Estonia",
    native_language => "eesti",
    native_name => "eesti Eesti",
    native_script => undef,
    native_territory => "Eesti",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    script => undef,
    territory => "Estonia",
    time_format_full => "H:mm.ss zzzz",
    time_format_long => "H:mm.ss z",
    time_format_medium => "H:mm.ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ eu ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y. 'urteko' MMM",
      GyMMMEd => "G y. 'urteko' MMM d, E",
      GyMMMd => "G y. 'urteko' MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "M/d, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y/M",
      yMEd => "y/M/d, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y('e')'ko' MMMM",
      yMMMMEd => "y('e')'ko' MMMM d, E",
      yMMMMd => "y('e')'ko' MMMM d",
      yMMMd => "y MMM d",
      yMd => "y/M/d",
      yQQQ => "y('e')'ko' QQQ",
      yQQQQ => "y('e')'ko' QQQQ"
    },
    code => "eu",
    date_format_full => "y('e')'ko' MMMM d, EEEE",
    date_format_long => "y('e')'ko' MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y/MM/dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "al.",
      "ar.",
      "az.",
      "og.",
      "or.",
      "lr.",
      "ig."
    ],
    day_format_narrow => [
      "A",
      "A",
      "A",
      "O",
      "O",
      "L",
      "I"
    ],
    day_format_wide => [
      "astelehena",
      "asteartea",
      "asteazkena",
      "osteguna",
      "ostirala",
      "larunbata",
      "igandea"
    ],
    day_stand_alone_abbreviated => [
      "Al.",
      "Ar.",
      "Az.",
      "Og.",
      "Or.",
      "Lr.",
      "Ig."
    ],
    day_stand_alone_narrow => [
      "A",
      "A",
      "A",
      "O",
      "O",
      "L",
      "I"
    ],
    day_stand_alone_wide => [
      "Astelehena",
      "Asteartea",
      "Asteazkena",
      "Osteguna",
      "Ostirala",
      "Larunbata",
      "Igandea"
    ],
    era_abbreviated => [
      "K.a.",
      "K.o."
    ],
    era_narrow => [
      "K.a.",
      "K.o."
    ],
    era_wide => [
      "K.a.",
      "K.o."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Basque",
    month_format_abbreviated => [
      "urt.",
      "ots.",
      "mar.",
      "api.",
      "mai.",
      "eka.",
      "uzt.",
      "abu.",
      "ira.",
      "urr.",
      "aza.",
      "abe."
    ],
    month_format_narrow => [
      "U",
      "O",
      "M",
      "A",
      "M",
      "E",
      "U",
      "A",
      "I",
      "U",
      "A",
      "A"
    ],
    month_format_wide => [
      "urtarrilak",
      "otsailak",
      "martxoak",
      "apirilak",
      "maiatzak",
      "ekainak",
      "uztailak",
      "abuztuak",
      "irailak",
      "urriak",
      "azaroak",
      "abenduak"
    ],
    month_stand_alone_abbreviated => [
      "Urt.",
      "Ots.",
      "Mar.",
      "Api.",
      "Mai.",
      "Eka.",
      "Uzt.",
      "Abu.",
      "Ira.",
      "Urr.",
      "Aza.",
      "Abe."
    ],
    month_stand_alone_narrow => [
      "U",
      "O",
      "M",
      "A",
      "M",
      "E",
      "U",
      "A",
      "I",
      "U",
      "A",
      "A"
    ],
    month_stand_alone_wide => [
      "Urtarrila",
      "Otsaila",
      "Martxoa",
      "Apirila",
      "Maiatza",
      "Ekaina",
      "Uztaila",
      "Abuztua",
      "Iraila",
      "Urria",
      "Azaroa",
      "Abendua"
    ],
    name => "Basque",
    native_language => "euskara",
    native_name => "euskara",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1Hh",
      "2Hh",
      "3Hh",
      "4Hh"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. hiruhilekoa",
      "2. hiruhilekoa",
      "3. hiruhilekoa",
      "4. hiruhilekoa"
    ],
    quarter_stand_alone_abbreviated => [
      "1Hh",
      "2Hh",
      "3Hh",
      "4Hh"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. hiruhilekoa",
      "2. hiruhilekoa",
      "3. hiruhilekoa",
      "4. hiruhilekoa"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss (zzzz)",
    time_format_long => "HH:mm:ss (z)",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ eu-ES ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y. 'urteko' MMM",
      GyMMMEd => "G y. 'urteko' MMM d, E",
      GyMMMd => "G y. 'urteko' MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "M/d, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y/M",
      yMEd => "y/M/d, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y('e')'ko' MMMM",
      yMMMMEd => "y('e')'ko' MMMM d, E",
      yMMMMd => "y('e')'ko' MMMM d",
      yMMMd => "y MMM d",
      yMd => "y/M/d",
      yQQQ => "y('e')'ko' QQQ",
      yQQQQ => "y('e')'ko' QQQQ"
    },
    code => "eu-ES",
    date_format_full => "y('e')'ko' MMMM d, EEEE",
    date_format_long => "y('e')'ko' MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y/MM/dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "al.",
      "ar.",
      "az.",
      "og.",
      "or.",
      "lr.",
      "ig."
    ],
    day_format_narrow => [
      "A",
      "A",
      "A",
      "O",
      "O",
      "L",
      "I"
    ],
    day_format_wide => [
      "astelehena",
      "asteartea",
      "asteazkena",
      "osteguna",
      "ostirala",
      "larunbata",
      "igandea"
    ],
    day_stand_alone_abbreviated => [
      "Al.",
      "Ar.",
      "Az.",
      "Og.",
      "Or.",
      "Lr.",
      "Ig."
    ],
    day_stand_alone_narrow => [
      "A",
      "A",
      "A",
      "O",
      "O",
      "L",
      "I"
    ],
    day_stand_alone_wide => [
      "Astelehena",
      "Asteartea",
      "Asteazkena",
      "Osteguna",
      "Ostirala",
      "Larunbata",
      "Igandea"
    ],
    era_abbreviated => [
      "K.a.",
      "K.o."
    ],
    era_narrow => [
      "K.a.",
      "K.o."
    ],
    era_wide => [
      "K.a.",
      "K.o."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%a, %Y.eko %bren %da",
    glibc_datetime_format => "%y-%m-%d %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Basque",
    month_format_abbreviated => [
      "urt.",
      "ots.",
      "mar.",
      "api.",
      "mai.",
      "eka.",
      "uzt.",
      "abu.",
      "ira.",
      "urr.",
      "aza.",
      "abe."
    ],
    month_format_narrow => [
      "U",
      "O",
      "M",
      "A",
      "M",
      "E",
      "U",
      "A",
      "I",
      "U",
      "A",
      "A"
    ],
    month_format_wide => [
      "urtarrilak",
      "otsailak",
      "martxoak",
      "apirilak",
      "maiatzak",
      "ekainak",
      "uztailak",
      "abuztuak",
      "irailak",
      "urriak",
      "azaroak",
      "abenduak"
    ],
    month_stand_alone_abbreviated => [
      "Urt.",
      "Ots.",
      "Mar.",
      "Api.",
      "Mai.",
      "Eka.",
      "Uzt.",
      "Abu.",
      "Ira.",
      "Urr.",
      "Aza.",
      "Abe."
    ],
    month_stand_alone_narrow => [
      "U",
      "O",
      "M",
      "A",
      "M",
      "E",
      "U",
      "A",
      "I",
      "U",
      "A",
      "A"
    ],
    month_stand_alone_wide => [
      "Urtarrila",
      "Otsaila",
      "Martxoa",
      "Apirila",
      "Maiatza",
      "Ekaina",
      "Uztaila",
      "Abuztua",
      "Iraila",
      "Urria",
      "Azaroa",
      "Abendua"
    ],
    name => "Basque Spain",
    native_language => "euskara",
    native_name => "euskara Espainia",
    native_script => undef,
    native_territory => "Espainia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1Hh",
      "2Hh",
      "3Hh",
      "4Hh"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. hiruhilekoa",
      "2. hiruhilekoa",
      "3. hiruhilekoa",
      "4. hiruhilekoa"
    ],
    quarter_stand_alone_abbreviated => [
      "1Hh",
      "2Hh",
      "3Hh",
      "4Hh"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. hiruhilekoa",
      "2. hiruhilekoa",
      "3. hiruhilekoa",
      "4. hiruhilekoa"
    ],
    script => undef,
    territory => "Spain",
    time_format_full => "HH:mm:ss (zzzz)",
    time_format_long => "HH:mm:ss (z)",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ewo ]__
  {
    am_pm_abbreviated => [
      "k\N{U+00ed}k\N{U+00ed}r\N{U+00ed}g",
      "ng\N{U+0259}g\N{U+00f3}g\N{U+0259}le"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ewo",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "m\N{U+0254}\N{U+0301}n",
      "smb",
      "sml",
      "smn",
      "f\N{U+00fa}l",
      "s\N{U+00e9}r",
      "s\N{U+0254}\N{U+0301}n"
    ],
    day_format_narrow => [
      "m",
      "s",
      "s",
      "s",
      "f",
      "s",
      "s"
    ],
    day_format_wide => [
      "m\N{U+0254}\N{U+0301}ndi",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} m\N{U+0259}l\N{U+00fa} m\N{U+0259}\N{U+0301}b\N{U+025b}\N{U+030c}",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} m\N{U+0259}l\N{U+00fa} m\N{U+0259}\N{U+0301}l\N{U+025b}\N{U+0301}",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} m\N{U+0259}l\N{U+00fa} m\N{U+0259}\N{U+0301}nyi",
      "f\N{U+00fa}lad\N{U+00e9}",
      "s\N{U+00e9}rad\N{U+00e9}",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254}"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+0254}\N{U+0301}n",
      "smb",
      "sml",
      "smn",
      "f\N{U+00fa}l",
      "s\N{U+00e9}r",
      "s\N{U+0254}\N{U+0301}n"
    ],
    day_stand_alone_narrow => [
      "m",
      "s",
      "s",
      "s",
      "f",
      "s",
      "s"
    ],
    day_stand_alone_wide => [
      "m\N{U+0254}\N{U+0301}ndi",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} m\N{U+0259}l\N{U+00fa} m\N{U+0259}\N{U+0301}b\N{U+025b}\N{U+030c}",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} m\N{U+0259}l\N{U+00fa} m\N{U+0259}\N{U+0301}l\N{U+025b}\N{U+0301}",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} m\N{U+0259}l\N{U+00fa} m\N{U+0259}\N{U+0301}nyi",
      "f\N{U+00fa}lad\N{U+00e9}",
      "s\N{U+00e9}rad\N{U+00e9}",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254}"
    ],
    era_abbreviated => [
      "oyk",
      "ayk"
    ],
    era_narrow => [
      "oyk",
      "ayk"
    ],
    era_wide => [
      "os\N{U+00fa}s\N{U+00fa}a Y\N{U+00e9}sus kiri",
      "\N{U+00e1}mvus Y\N{U+00e9}sus Kir\N{U+00ed}s"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Ewondo",
    month_format_abbreviated => [
      "ngo",
      "ngb",
      "ngl",
      "ngn",
      "ngt",
      "ngs",
      "ngz",
      "ngm",
      "nge",
      "nga",
      "ngad",
      "ngab"
    ],
    month_format_narrow => [
      "o",
      "b",
      "l",
      "n",
      "t",
      "s",
      "z",
      "m",
      "e",
      "a",
      "d",
      "b"
    ],
    month_format_wide => [
      "ng\N{U+0254}n os\N{U+00fa}",
      "ng\N{U+0254}n b\N{U+025b}\N{U+030c}",
      "ng\N{U+0254}n l\N{U+00e1}la",
      "ng\N{U+0254}n nyina",
      "ng\N{U+0254}n t\N{U+00e1}na",
      "ng\N{U+0254}n sam\N{U+0259}na",
      "ng\N{U+0254}n zamgb\N{U+00e1}la",
      "ng\N{U+0254}n mwom",
      "ng\N{U+0254}n ebul\N{U+00fa}",
      "ng\N{U+0254}n aw\N{U+00f3}m",
      "ng\N{U+0254}n aw\N{U+00f3}m ai dzi\N{U+00e1}",
      "ng\N{U+0254}n aw\N{U+00f3}m ai b\N{U+025b}\N{U+030c}"
    ],
    month_stand_alone_abbreviated => [
      "ngo",
      "ngb",
      "ngl",
      "ngn",
      "ngt",
      "ngs",
      "ngz",
      "ngm",
      "nge",
      "nga",
      "ngad",
      "ngab"
    ],
    month_stand_alone_narrow => [
      "o",
      "b",
      "l",
      "n",
      "t",
      "s",
      "z",
      "m",
      "e",
      "a",
      "d",
      "b"
    ],
    month_stand_alone_wide => [
      "ng\N{U+0254}n os\N{U+00fa}",
      "ng\N{U+0254}n b\N{U+025b}\N{U+030c}",
      "ng\N{U+0254}n l\N{U+00e1}la",
      "ng\N{U+0254}n nyina",
      "ng\N{U+0254}n t\N{U+00e1}na",
      "ng\N{U+0254}n sam\N{U+0259}na",
      "ng\N{U+0254}n zamgb\N{U+00e1}la",
      "ng\N{U+0254}n mwom",
      "ng\N{U+0254}n ebul\N{U+00fa}",
      "ng\N{U+0254}n aw\N{U+00f3}m",
      "ng\N{U+0254}n aw\N{U+00f3}m ai dzi\N{U+00e1}",
      "ng\N{U+0254}n aw\N{U+00f3}m ai b\N{U+025b}\N{U+030c}"
    ],
    name => "Ewondo",
    native_language => "ewondo",
    native_name => "ewondo",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "nno",
      "nnb",
      "nnl",
      "nnny"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "ns\N{U+00e1}mb\N{U+00e1} ng\N{U+0254}n as\N{U+00fa}",
      "ns\N{U+00e1}mb\N{U+00e1} ng\N{U+0254}n b\N{U+025b}\N{U+030c}",
      "ns\N{U+00e1}mb\N{U+00e1} ng\N{U+0254}n l\N{U+00e1}la",
      "ns\N{U+00e1}mb\N{U+00e1} ng\N{U+0254}n nyina"
    ],
    quarter_stand_alone_abbreviated => [
      "nno",
      "nnb",
      "nnl",
      "nnny"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "ns\N{U+00e1}mb\N{U+00e1} ng\N{U+0254}n as\N{U+00fa}",
      "ns\N{U+00e1}mb\N{U+00e1} ng\N{U+0254}n b\N{U+025b}\N{U+030c}",
      "ns\N{U+00e1}mb\N{U+00e1} ng\N{U+0254}n l\N{U+00e1}la",
      "ns\N{U+00e1}mb\N{U+00e1} ng\N{U+0254}n nyina"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ewo-CM ]__
  {
    am_pm_abbreviated => [
      "k\N{U+00ed}k\N{U+00ed}r\N{U+00ed}g",
      "ng\N{U+0259}g\N{U+00f3}g\N{U+0259}le"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ewo-CM",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "m\N{U+0254}\N{U+0301}n",
      "smb",
      "sml",
      "smn",
      "f\N{U+00fa}l",
      "s\N{U+00e9}r",
      "s\N{U+0254}\N{U+0301}n"
    ],
    day_format_narrow => [
      "m",
      "s",
      "s",
      "s",
      "f",
      "s",
      "s"
    ],
    day_format_wide => [
      "m\N{U+0254}\N{U+0301}ndi",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} m\N{U+0259}l\N{U+00fa} m\N{U+0259}\N{U+0301}b\N{U+025b}\N{U+030c}",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} m\N{U+0259}l\N{U+00fa} m\N{U+0259}\N{U+0301}l\N{U+025b}\N{U+0301}",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} m\N{U+0259}l\N{U+00fa} m\N{U+0259}\N{U+0301}nyi",
      "f\N{U+00fa}lad\N{U+00e9}",
      "s\N{U+00e9}rad\N{U+00e9}",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254}"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+0254}\N{U+0301}n",
      "smb",
      "sml",
      "smn",
      "f\N{U+00fa}l",
      "s\N{U+00e9}r",
      "s\N{U+0254}\N{U+0301}n"
    ],
    day_stand_alone_narrow => [
      "m",
      "s",
      "s",
      "s",
      "f",
      "s",
      "s"
    ],
    day_stand_alone_wide => [
      "m\N{U+0254}\N{U+0301}ndi",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} m\N{U+0259}l\N{U+00fa} m\N{U+0259}\N{U+0301}b\N{U+025b}\N{U+030c}",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} m\N{U+0259}l\N{U+00fa} m\N{U+0259}\N{U+0301}l\N{U+025b}\N{U+0301}",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} m\N{U+0259}l\N{U+00fa} m\N{U+0259}\N{U+0301}nyi",
      "f\N{U+00fa}lad\N{U+00e9}",
      "s\N{U+00e9}rad\N{U+00e9}",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254}"
    ],
    era_abbreviated => [
      "oyk",
      "ayk"
    ],
    era_narrow => [
      "oyk",
      "ayk"
    ],
    era_wide => [
      "os\N{U+00fa}s\N{U+00fa}a Y\N{U+00e9}sus kiri",
      "\N{U+00e1}mvus Y\N{U+00e9}sus Kir\N{U+00ed}s"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Ewondo",
    month_format_abbreviated => [
      "ngo",
      "ngb",
      "ngl",
      "ngn",
      "ngt",
      "ngs",
      "ngz",
      "ngm",
      "nge",
      "nga",
      "ngad",
      "ngab"
    ],
    month_format_narrow => [
      "o",
      "b",
      "l",
      "n",
      "t",
      "s",
      "z",
      "m",
      "e",
      "a",
      "d",
      "b"
    ],
    month_format_wide => [
      "ng\N{U+0254}n os\N{U+00fa}",
      "ng\N{U+0254}n b\N{U+025b}\N{U+030c}",
      "ng\N{U+0254}n l\N{U+00e1}la",
      "ng\N{U+0254}n nyina",
      "ng\N{U+0254}n t\N{U+00e1}na",
      "ng\N{U+0254}n sam\N{U+0259}na",
      "ng\N{U+0254}n zamgb\N{U+00e1}la",
      "ng\N{U+0254}n mwom",
      "ng\N{U+0254}n ebul\N{U+00fa}",
      "ng\N{U+0254}n aw\N{U+00f3}m",
      "ng\N{U+0254}n aw\N{U+00f3}m ai dzi\N{U+00e1}",
      "ng\N{U+0254}n aw\N{U+00f3}m ai b\N{U+025b}\N{U+030c}"
    ],
    month_stand_alone_abbreviated => [
      "ngo",
      "ngb",
      "ngl",
      "ngn",
      "ngt",
      "ngs",
      "ngz",
      "ngm",
      "nge",
      "nga",
      "ngad",
      "ngab"
    ],
    month_stand_alone_narrow => [
      "o",
      "b",
      "l",
      "n",
      "t",
      "s",
      "z",
      "m",
      "e",
      "a",
      "d",
      "b"
    ],
    month_stand_alone_wide => [
      "ng\N{U+0254}n os\N{U+00fa}",
      "ng\N{U+0254}n b\N{U+025b}\N{U+030c}",
      "ng\N{U+0254}n l\N{U+00e1}la",
      "ng\N{U+0254}n nyina",
      "ng\N{U+0254}n t\N{U+00e1}na",
      "ng\N{U+0254}n sam\N{U+0259}na",
      "ng\N{U+0254}n zamgb\N{U+00e1}la",
      "ng\N{U+0254}n mwom",
      "ng\N{U+0254}n ebul\N{U+00fa}",
      "ng\N{U+0254}n aw\N{U+00f3}m",
      "ng\N{U+0254}n aw\N{U+00f3}m ai dzi\N{U+00e1}",
      "ng\N{U+0254}n aw\N{U+00f3}m ai b\N{U+025b}\N{U+030c}"
    ],
    name => "Ewondo Cameroon",
    native_language => "ewondo",
    native_name => "ewondo Kam\N{U+0259}r\N{U+00fa}n",
    native_script => undef,
    native_territory => "Kam\N{U+0259}r\N{U+00fa}n",
    native_variant => undef,
    quarter_format_abbreviated => [
      "nno",
      "nnb",
      "nnl",
      "nnny"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "ns\N{U+00e1}mb\N{U+00e1} ng\N{U+0254}n as\N{U+00fa}",
      "ns\N{U+00e1}mb\N{U+00e1} ng\N{U+0254}n b\N{U+025b}\N{U+030c}",
      "ns\N{U+00e1}mb\N{U+00e1} ng\N{U+0254}n l\N{U+00e1}la",
      "ns\N{U+00e1}mb\N{U+00e1} ng\N{U+0254}n nyina"
    ],
    quarter_stand_alone_abbreviated => [
      "nno",
      "nnb",
      "nnl",
      "nnny"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "ns\N{U+00e1}mb\N{U+00e1} ng\N{U+0254}n as\N{U+00fa}",
      "ns\N{U+00e1}mb\N{U+00e1} ng\N{U+0254}n b\N{U+025b}\N{U+030c}",
      "ns\N{U+00e1}mb\N{U+00e1} ng\N{U+0254}n l\N{U+00e1}la",
      "ns\N{U+00e1}mb\N{U+00e1} ng\N{U+0254}n nyina"
    ],
    script => undef,
    territory => "Cameroon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fa ]__
  {
    am_pm_abbreviated => [
      "\N{U+0642}.\N{U+0638}.",
      "\N{U+0628}.\N{U+0638}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H:mm",
      EHms => "E H:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "H",
      HHmmZ => "HH:mm (Z)",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E M/d",
      MMM => "LLL",
      MMMEd => "E d LLL",
      MMMMEd => "E d LLLL",
      MMMMd => "d LLLL",
      MMMd => "d LLL",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "y/M",
      yMEd => "E y/M/d",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMMEEEEd => "EEEE d MMMM y",
      yMMMd => "d MMM y",
      yMd => "y/M/d",
      yQQQ => "QQQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fa",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "y/M/d",
    datetime_format_full => "{1}\N{U+060c} \N{U+0633}\N{U+0627}\N{U+0639}\N{U+062a} {0}",
    datetime_format_long => "{1}\N{U+060c} \N{U+0633}\N{U+0627}\N{U+0639}\N{U+062a} {0}",
    datetime_format_medium => "{1}\N{U+060c}\N{U+200f} {0}",
    datetime_format_short => "{1}\N{U+060c}\N{U+200f} {0}",
    day_format_abbreviated => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_format_narrow => [
      "\N{U+062f}",
      "\N{U+0633}",
      "\N{U+0686}",
      "\N{U+067e}",
      "\N{U+062c}",
      "\N{U+0634}",
      "\N{U+06cc}"
    ],
    day_format_wide => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_stand_alone_narrow => [
      "\N{U+062f}",
      "\N{U+0633}",
      "\N{U+0686}",
      "\N{U+067e}",
      "\N{U+062c}",
      "\N{U+0634}",
      "\N{U+06cc}"
    ],
    day_stand_alone_wide => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}.",
      "\N{U+0645}."
    ],
    era_narrow => [
      "\N{U+0642}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0632} \N{U+0645}\N{U+06cc}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+06cc}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+06cc}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Persian",
    month_format_abbreviated => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}\N{U+0654}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}\N{U+0654}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}\N{U+0654}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}\N{U+0654}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+0698}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0622}",
      "\N{U+0645}",
      "\N{U+0698}",
      "\N{U+0698}",
      "\N{U+0627}",
      "\N{U+0633}",
      "\N{U+0627}",
      "\N{U+0646}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}\N{U+0654}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}\N{U+0654}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}\N{U+0654}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}\N{U+0654}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0698}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0622}",
      "\N{U+0645}",
      "\N{U+0698}",
      "\N{U+0698}",
      "\N{U+0627}",
      "\N{U+0633}",
      "\N{U+0627}",
      "\N{U+0646}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Persian",
    native_language => "\N{U+0641}\N{U+0627}\N{U+0631}\N{U+0633}\N{U+06cc}",
    native_name => "\N{U+0641}\N{U+0627}\N{U+0631}\N{U+0633}\N{U+06cc}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f1}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f2}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f3}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f4}"
    ],
    quarter_format_narrow => [
      "\N{U+06f1}",
      "\N{U+06f2}",
      "\N{U+06f3}",
      "\N{U+06f4}"
    ],
    quarter_format_wide => [
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0627}\N{U+0648}\N{U+0644}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+062f}\N{U+0648}\N{U+0645}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0633}\N{U+0648}\N{U+0645}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0645}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f1}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f2}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f3}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f4}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+06f1}",
      "\N{U+06f2}",
      "\N{U+06f3}",
      "\N{U+06f4}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0627}\N{U+0648}\N{U+0644}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+062f}\N{U+0648}\N{U+0645}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0633}\N{U+0648}\N{U+0645}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0645}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H:mm:ss (zzzz)",
    time_format_long => "H:mm:ss (z)",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ fa-AF ]__
  {
    am_pm_abbreviated => [
      "\N{U+0642}.\N{U+0638}.",
      "\N{U+0628}.\N{U+0638}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H:mm",
      EHms => "E H:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "H",
      HHmmZ => "HH:mm (Z)",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E M/d",
      MMM => "LLL",
      MMMEd => "E d LLL",
      MMMMEd => "E d LLLL",
      MMMMd => "d LLLL",
      MMMd => "d LLL",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "y/M",
      yMEd => "E y/M/d",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMMEEEEd => "EEEE d MMMM y",
      yMMMd => "d MMM y",
      yMd => "y/M/d",
      yQQQ => "QQQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fa-AF",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "y/M/d",
    datetime_format_full => "{1}\N{U+060c} \N{U+0633}\N{U+0627}\N{U+0639}\N{U+062a} {0}",
    datetime_format_long => "{1}\N{U+060c} \N{U+0633}\N{U+0627}\N{U+0639}\N{U+062a} {0}",
    datetime_format_medium => "{1}\N{U+060c}\N{U+200f} {0}",
    datetime_format_short => "{1}\N{U+060c}\N{U+200f} {0}",
    day_format_abbreviated => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_format_narrow => [
      "\N{U+062f}",
      "\N{U+0633}",
      "\N{U+0686}",
      "\N{U+067e}",
      "\N{U+062c}",
      "\N{U+0634}",
      "\N{U+06cc}"
    ],
    day_format_wide => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_stand_alone_narrow => [
      "\N{U+062f}",
      "\N{U+0633}",
      "\N{U+0686}",
      "\N{U+067e}",
      "\N{U+062c}",
      "\N{U+0634}",
      "\N{U+06cc}"
    ],
    day_stand_alone_wide => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}.",
      "\N{U+0645}."
    ],
    era_narrow => [
      "\N{U+0642}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0632} \N{U+0645}\N{U+06cc}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+06cc}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+06cc}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Persian",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}"
    ],
    month_format_narrow => [
      "\N{U+0698}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0622}",
      "\N{U+0645}",
      "\N{U+0698}",
      "\N{U+0698}",
      "\N{U+0627}",
      "\N{U+0633}",
      "\N{U+0627}",
      "\N{U+0646}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+062c}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0627}",
      "\N{U+0645}",
      "\N{U+062c}",
      "\N{U+062c}",
      "\N{U+0627}",
      "\N{U+0633}",
      "\N{U+0627}",
      "\N{U+0646}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Persian Afghanistan",
    native_language => "\N{U+0641}\N{U+0627}\N{U+0631}\N{U+0633}\N{U+06cc}",
    native_name => "\N{U+0641}\N{U+0627}\N{U+0631}\N{U+0633}\N{U+06cc} \N{U+0627}\N{U+0641}\N{U+063a}\N{U+0627}\N{U+0646}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+0641}\N{U+063a}\N{U+0627}\N{U+0646}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f1}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f2}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f3}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f4}"
    ],
    quarter_format_narrow => [
      "\N{U+06f1}",
      "\N{U+06f2}",
      "\N{U+06f3}",
      "\N{U+06f4}"
    ],
    quarter_format_wide => [
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0627}\N{U+0648}\N{U+0644}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+062f}\N{U+0648}\N{U+0645}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0633}\N{U+0648}\N{U+0645}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0645}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f1}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f2}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f3}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f4}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+06f1}",
      "\N{U+06f2}",
      "\N{U+06f3}",
      "\N{U+06f4}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0627}\N{U+0648}\N{U+0644}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+062f}\N{U+0648}\N{U+0645}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0633}\N{U+0648}\N{U+0645}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0645}"
    ],
    script => undef,
    territory => "Afghanistan",
    time_format_full => "H:mm:ss (zzzz)",
    time_format_long => "H:mm:ss (z)",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ fa-IR ]__
  {
    am_pm_abbreviated => [
      "\N{U+0642}.\N{U+0638}.",
      "\N{U+0628}.\N{U+0638}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H:mm",
      EHms => "E H:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "H",
      HHmmZ => "HH:mm (Z)",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E M/d",
      MMM => "LLL",
      MMMEd => "E d LLL",
      MMMMEd => "E d LLLL",
      MMMMd => "d LLLL",
      MMMd => "d LLL",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "y/M",
      yMEd => "E y/M/d",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMMEEEEd => "EEEE d MMMM y",
      yMMMd => "d MMM y",
      yMd => "y/M/d",
      yQQQ => "QQQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fa-IR",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "y/M/d",
    datetime_format_full => "{1}\N{U+060c} \N{U+0633}\N{U+0627}\N{U+0639}\N{U+062a} {0}",
    datetime_format_long => "{1}\N{U+060c} \N{U+0633}\N{U+0627}\N{U+0639}\N{U+062a} {0}",
    datetime_format_medium => "{1}\N{U+060c}\N{U+200f} {0}",
    datetime_format_short => "{1}\N{U+060c}\N{U+200f} {0}",
    day_format_abbreviated => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_format_narrow => [
      "\N{U+062f}",
      "\N{U+0633}",
      "\N{U+0686}",
      "\N{U+067e}",
      "\N{U+062c}",
      "\N{U+0634}",
      "\N{U+06cc}"
    ],
    day_format_wide => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_stand_alone_narrow => [
      "\N{U+062f}",
      "\N{U+0633}",
      "\N{U+0686}",
      "\N{U+067e}",
      "\N{U+062c}",
      "\N{U+0634}",
      "\N{U+06cc}"
    ],
    day_stand_alone_wide => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}.",
      "\N{U+0645}."
    ],
    era_narrow => [
      "\N{U+0642}",
      "\N{U+0645}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0627}\N{U+0632} \N{U+0645}\N{U+06cc}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0645}\N{U+06cc}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+06cc}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "\N{U+202b}%A %Oe %B %Oy\N{U+060c} \N{U+0633}\N{U+0627}\N{U+0639}\N{U+062a} %OH:%OM:%OS (%Z)\N{U+202c}",
    glibc_date_format => "%Oy/%Om/%Od",
    glibc_datetime_format => "\N{U+202b}%A %Oe %B %Oy\N{U+060c} %OH:%OM:%OS\N{U+202c}",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%OH:%OM:%OS",
    language => "Persian",
    month_format_abbreviated => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}\N{U+0654}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}\N{U+0654}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}\N{U+0654}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}\N{U+0654}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+0698}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0622}",
      "\N{U+0645}",
      "\N{U+0698}",
      "\N{U+0698}",
      "\N{U+0627}",
      "\N{U+0633}",
      "\N{U+0627}",
      "\N{U+0646}",
      "\N{U+062f}"
    ],
    month_format_wide => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}\N{U+0654}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}\N{U+0654}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}\N{U+0654}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}\N{U+0654}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0698}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0622}",
      "\N{U+0645}",
      "\N{U+0698}",
      "\N{U+0698}",
      "\N{U+0627}",
      "\N{U+0633}",
      "\N{U+0627}",
      "\N{U+0646}",
      "\N{U+062f}"
    ],
    month_stand_alone_wide => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Persian Iran",
    native_language => "\N{U+0641}\N{U+0627}\N{U+0631}\N{U+0633}\N{U+06cc}",
    native_name => "\N{U+0641}\N{U+0627}\N{U+0631}\N{U+0633}\N{U+06cc} \N{U+0627}\N{U+06cc}\N{U+0631}\N{U+0627}\N{U+0646}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+06cc}\N{U+0631}\N{U+0627}\N{U+0646}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f1}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f2}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f3}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f4}"
    ],
    quarter_format_narrow => [
      "\N{U+06f1}",
      "\N{U+06f2}",
      "\N{U+06f3}",
      "\N{U+06f4}"
    ],
    quarter_format_wide => [
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0627}\N{U+0648}\N{U+0644}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+062f}\N{U+0648}\N{U+0645}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0633}\N{U+0648}\N{U+0645}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0645}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f1}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f2}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f3}",
      "\N{U+0633}\N{U+200c}\N{U+0645}\N{U+06f4}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+06f1}",
      "\N{U+06f2}",
      "\N{U+06f3}",
      "\N{U+06f4}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0627}\N{U+0648}\N{U+0644}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+062f}\N{U+0648}\N{U+0645}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0633}\N{U+0648}\N{U+0645}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0645}\N{U+0627}\N{U+0647}\N{U+0647}\N{U+0654} \N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0645}"
    ],
    script => undef,
    territory => "Iran",
    time_format_full => "H:mm:ss (zzzz)",
    time_format_long => "H:mm:ss (z)",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ ff ]__
  {
    am_pm_abbreviated => [
      "subaka",
      "kikii\N{U+0257}e"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ff",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "aa\N{U+0253}",
      "maw",
      "nje",
      "naa",
      "mwd",
      "hbi",
      "dew"
    ],
    day_format_narrow => [
      "a",
      "m",
      "n",
      "n",
      "m",
      "h",
      "d"
    ],
    day_format_wide => [
      "aa\N{U+0253}nde",
      "mawbaare",
      "njeslaare",
      "naasaande",
      "mawnde",
      "hoore-biir",
      "dewo"
    ],
    day_stand_alone_abbreviated => [
      "aa\N{U+0253}",
      "maw",
      "nje",
      "naa",
      "mwd",
      "hbi",
      "dew"
    ],
    day_stand_alone_narrow => [
      "a",
      "m",
      "n",
      "n",
      "m",
      "h",
      "d"
    ],
    day_stand_alone_wide => [
      "aa\N{U+0253}nde",
      "mawbaare",
      "njeslaare",
      "naasaande",
      "mawnde",
      "hoore-biir",
      "dewo"
    ],
    era_abbreviated => [
      "H-I",
      "C-I"
    ],
    era_narrow => [
      "H-I",
      "C-I"
    ],
    era_wide => [
      "Hade Iisa",
      "Caggal Iisa"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Fulah",
    month_format_abbreviated => [
      "sii",
      "col",
      "mbo",
      "see",
      "duu",
      "kor",
      "mor",
      "juk",
      "slt",
      "yar",
      "jol",
      "bow"
    ],
    month_format_narrow => [
      "s",
      "c",
      "m",
      "s",
      "d",
      "k",
      "m",
      "j",
      "s",
      "y",
      "j",
      "b"
    ],
    month_format_wide => [
      "siilo",
      "colte",
      "mbooy",
      "see\N{U+0257}to",
      "duujal",
      "korse",
      "morso",
      "juko",
      "siilto",
      "yarkomaa",
      "jolal",
      "bowte"
    ],
    month_stand_alone_abbreviated => [
      "sii",
      "col",
      "mbo",
      "see",
      "duu",
      "kor",
      "mor",
      "juk",
      "slt",
      "yar",
      "jol",
      "bow"
    ],
    month_stand_alone_narrow => [
      "s",
      "c",
      "m",
      "s",
      "d",
      "k",
      "m",
      "j",
      "s",
      "y",
      "j",
      "b"
    ],
    month_stand_alone_wide => [
      "siilo",
      "colte",
      "mbooy",
      "see\N{U+0257}to",
      "duujal",
      "korse",
      "morso",
      "juko",
      "siilto",
      "yarkomaa",
      "jolal",
      "bowte"
    ],
    name => "Fulah",
    native_language => "Pulaar",
    native_name => "Pulaar",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Termes 1",
      "Termes 2",
      "Termes 3",
      "Termes 4"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Termes 1",
      "Termes 2",
      "Termes 3",
      "Termes 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ff-CM ]__
  {
    am_pm_abbreviated => [
      "subaka",
      "kikii\N{U+0257}e"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ff-CM",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "aa\N{U+0253}",
      "maw",
      "nje",
      "naa",
      "mwd",
      "hbi",
      "dew"
    ],
    day_format_narrow => [
      "a",
      "m",
      "n",
      "n",
      "m",
      "h",
      "d"
    ],
    day_format_wide => [
      "aa\N{U+0253}nde",
      "mawbaare",
      "njeslaare",
      "naasaande",
      "mawnde",
      "hoore-biir",
      "dewo"
    ],
    day_stand_alone_abbreviated => [
      "aa\N{U+0253}",
      "maw",
      "nje",
      "naa",
      "mwd",
      "hbi",
      "dew"
    ],
    day_stand_alone_narrow => [
      "a",
      "m",
      "n",
      "n",
      "m",
      "h",
      "d"
    ],
    day_stand_alone_wide => [
      "aa\N{U+0253}nde",
      "mawbaare",
      "njeslaare",
      "naasaande",
      "mawnde",
      "hoore-biir",
      "dewo"
    ],
    era_abbreviated => [
      "H-I",
      "C-I"
    ],
    era_narrow => [
      "H-I",
      "C-I"
    ],
    era_wide => [
      "Hade Iisa",
      "Caggal Iisa"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Fulah",
    month_format_abbreviated => [
      "sii",
      "col",
      "mbo",
      "see",
      "duu",
      "kor",
      "mor",
      "juk",
      "slt",
      "yar",
      "jol",
      "bow"
    ],
    month_format_narrow => [
      "s",
      "c",
      "m",
      "s",
      "d",
      "k",
      "m",
      "j",
      "s",
      "y",
      "j",
      "b"
    ],
    month_format_wide => [
      "siilo",
      "colte",
      "mbooy",
      "see\N{U+0257}to",
      "duujal",
      "korse",
      "morso",
      "juko",
      "siilto",
      "yarkomaa",
      "jolal",
      "bowte"
    ],
    month_stand_alone_abbreviated => [
      "sii",
      "col",
      "mbo",
      "see",
      "duu",
      "kor",
      "mor",
      "juk",
      "slt",
      "yar",
      "jol",
      "bow"
    ],
    month_stand_alone_narrow => [
      "s",
      "c",
      "m",
      "s",
      "d",
      "k",
      "m",
      "j",
      "s",
      "y",
      "j",
      "b"
    ],
    month_stand_alone_wide => [
      "siilo",
      "colte",
      "mbooy",
      "see\N{U+0257}to",
      "duujal",
      "korse",
      "morso",
      "juko",
      "siilto",
      "yarkomaa",
      "jolal",
      "bowte"
    ],
    name => "Fulah Cameroon",
    native_language => "Pulaar",
    native_name => "Pulaar Kameruun",
    native_script => undef,
    native_territory => "Kameruun",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Termes 1",
      "Termes 2",
      "Termes 3",
      "Termes 4"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Termes 1",
      "Termes 2",
      "Termes 3",
      "Termes 4"
    ],
    script => undef,
    territory => "Cameroon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ff-GN ]__
  {
    am_pm_abbreviated => [
      "subaka",
      "kikii\N{U+0257}e"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ff-GN",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "aa\N{U+0253}",
      "maw",
      "nje",
      "naa",
      "mwd",
      "hbi",
      "dew"
    ],
    day_format_narrow => [
      "a",
      "m",
      "n",
      "n",
      "m",
      "h",
      "d"
    ],
    day_format_wide => [
      "aa\N{U+0253}nde",
      "mawbaare",
      "njeslaare",
      "naasaande",
      "mawnde",
      "hoore-biir",
      "dewo"
    ],
    day_stand_alone_abbreviated => [
      "aa\N{U+0253}",
      "maw",
      "nje",
      "naa",
      "mwd",
      "hbi",
      "dew"
    ],
    day_stand_alone_narrow => [
      "a",
      "m",
      "n",
      "n",
      "m",
      "h",
      "d"
    ],
    day_stand_alone_wide => [
      "aa\N{U+0253}nde",
      "mawbaare",
      "njeslaare",
      "naasaande",
      "mawnde",
      "hoore-biir",
      "dewo"
    ],
    era_abbreviated => [
      "H-I",
      "C-I"
    ],
    era_narrow => [
      "H-I",
      "C-I"
    ],
    era_wide => [
      "Hade Iisa",
      "Caggal Iisa"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Fulah",
    month_format_abbreviated => [
      "sii",
      "col",
      "mbo",
      "see",
      "duu",
      "kor",
      "mor",
      "juk",
      "slt",
      "yar",
      "jol",
      "bow"
    ],
    month_format_narrow => [
      "s",
      "c",
      "m",
      "s",
      "d",
      "k",
      "m",
      "j",
      "s",
      "y",
      "j",
      "b"
    ],
    month_format_wide => [
      "siilo",
      "colte",
      "mbooy",
      "see\N{U+0257}to",
      "duujal",
      "korse",
      "morso",
      "juko",
      "siilto",
      "yarkomaa",
      "jolal",
      "bowte"
    ],
    month_stand_alone_abbreviated => [
      "sii",
      "col",
      "mbo",
      "see",
      "duu",
      "kor",
      "mor",
      "juk",
      "slt",
      "yar",
      "jol",
      "bow"
    ],
    month_stand_alone_narrow => [
      "s",
      "c",
      "m",
      "s",
      "d",
      "k",
      "m",
      "j",
      "s",
      "y",
      "j",
      "b"
    ],
    month_stand_alone_wide => [
      "siilo",
      "colte",
      "mbooy",
      "see\N{U+0257}to",
      "duujal",
      "korse",
      "morso",
      "juko",
      "siilto",
      "yarkomaa",
      "jolal",
      "bowte"
    ],
    name => "Fulah Guinea",
    native_language => "Pulaar",
    native_name => "Pulaar Gine",
    native_script => undef,
    native_territory => "Gine",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Termes 1",
      "Termes 2",
      "Termes 3",
      "Termes 4"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Termes 1",
      "Termes 2",
      "Termes 3",
      "Termes 4"
    ],
    script => undef,
    territory => "Guinea",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ff-MR ]__
  {
    am_pm_abbreviated => [
      "subaka",
      "kikii\N{U+0257}e"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ff-MR",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "aa\N{U+0253}",
      "maw",
      "nje",
      "naa",
      "mwd",
      "hbi",
      "dew"
    ],
    day_format_narrow => [
      "a",
      "m",
      "n",
      "n",
      "m",
      "h",
      "d"
    ],
    day_format_wide => [
      "aa\N{U+0253}nde",
      "mawbaare",
      "njeslaare",
      "naasaande",
      "mawnde",
      "hoore-biir",
      "dewo"
    ],
    day_stand_alone_abbreviated => [
      "aa\N{U+0253}",
      "maw",
      "nje",
      "naa",
      "mwd",
      "hbi",
      "dew"
    ],
    day_stand_alone_narrow => [
      "a",
      "m",
      "n",
      "n",
      "m",
      "h",
      "d"
    ],
    day_stand_alone_wide => [
      "aa\N{U+0253}nde",
      "mawbaare",
      "njeslaare",
      "naasaande",
      "mawnde",
      "hoore-biir",
      "dewo"
    ],
    era_abbreviated => [
      "H-I",
      "C-I"
    ],
    era_narrow => [
      "H-I",
      "C-I"
    ],
    era_wide => [
      "Hade Iisa",
      "Caggal Iisa"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Fulah",
    month_format_abbreviated => [
      "sii",
      "col",
      "mbo",
      "see",
      "duu",
      "kor",
      "mor",
      "juk",
      "slt",
      "yar",
      "jol",
      "bow"
    ],
    month_format_narrow => [
      "s",
      "c",
      "m",
      "s",
      "d",
      "k",
      "m",
      "j",
      "s",
      "y",
      "j",
      "b"
    ],
    month_format_wide => [
      "siilo",
      "colte",
      "mbooy",
      "see\N{U+0257}to",
      "duujal",
      "korse",
      "morso",
      "juko",
      "siilto",
      "yarkomaa",
      "jolal",
      "bowte"
    ],
    month_stand_alone_abbreviated => [
      "sii",
      "col",
      "mbo",
      "see",
      "duu",
      "kor",
      "mor",
      "juk",
      "slt",
      "yar",
      "jol",
      "bow"
    ],
    month_stand_alone_narrow => [
      "s",
      "c",
      "m",
      "s",
      "d",
      "k",
      "m",
      "j",
      "s",
      "y",
      "j",
      "b"
    ],
    month_stand_alone_wide => [
      "siilo",
      "colte",
      "mbooy",
      "see\N{U+0257}to",
      "duujal",
      "korse",
      "morso",
      "juko",
      "siilto",
      "yarkomaa",
      "jolal",
      "bowte"
    ],
    name => "Fulah Mauritania",
    native_language => "Pulaar",
    native_name => "Pulaar Muritani",
    native_script => undef,
    native_territory => "Muritani",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Termes 1",
      "Termes 2",
      "Termes 3",
      "Termes 4"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Termes 1",
      "Termes 2",
      "Termes 3",
      "Termes 4"
    ],
    script => undef,
    territory => "Mauritania",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ff-SN ]__
  {
    am_pm_abbreviated => [
      "subaka",
      "kikii\N{U+0257}e"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ff-SN",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "aa\N{U+0253}",
      "maw",
      "nje",
      "naa",
      "mwd",
      "hbi",
      "dew"
    ],
    day_format_narrow => [
      "a",
      "m",
      "n",
      "n",
      "m",
      "h",
      "d"
    ],
    day_format_wide => [
      "aa\N{U+0253}nde",
      "mawbaare",
      "njeslaare",
      "naasaande",
      "mawnde",
      "hoore-biir",
      "dewo"
    ],
    day_stand_alone_abbreviated => [
      "aa\N{U+0253}",
      "maw",
      "nje",
      "naa",
      "mwd",
      "hbi",
      "dew"
    ],
    day_stand_alone_narrow => [
      "a",
      "m",
      "n",
      "n",
      "m",
      "h",
      "d"
    ],
    day_stand_alone_wide => [
      "aa\N{U+0253}nde",
      "mawbaare",
      "njeslaare",
      "naasaande",
      "mawnde",
      "hoore-biir",
      "dewo"
    ],
    era_abbreviated => [
      "H-I",
      "C-I"
    ],
    era_narrow => [
      "H-I",
      "C-I"
    ],
    era_wide => [
      "Hade Iisa",
      "Caggal Iisa"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%a %d %b %Y %R %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%R",
    language => "Fulah",
    month_format_abbreviated => [
      "sii",
      "col",
      "mbo",
      "see",
      "duu",
      "kor",
      "mor",
      "juk",
      "slt",
      "yar",
      "jol",
      "bow"
    ],
    month_format_narrow => [
      "s",
      "c",
      "m",
      "s",
      "d",
      "k",
      "m",
      "j",
      "s",
      "y",
      "j",
      "b"
    ],
    month_format_wide => [
      "siilo",
      "colte",
      "mbooy",
      "see\N{U+0257}to",
      "duujal",
      "korse",
      "morso",
      "juko",
      "siilto",
      "yarkomaa",
      "jolal",
      "bowte"
    ],
    month_stand_alone_abbreviated => [
      "sii",
      "col",
      "mbo",
      "see",
      "duu",
      "kor",
      "mor",
      "juk",
      "slt",
      "yar",
      "jol",
      "bow"
    ],
    month_stand_alone_narrow => [
      "s",
      "c",
      "m",
      "s",
      "d",
      "k",
      "m",
      "j",
      "s",
      "y",
      "j",
      "b"
    ],
    month_stand_alone_wide => [
      "siilo",
      "colte",
      "mbooy",
      "see\N{U+0257}to",
      "duujal",
      "korse",
      "morso",
      "juko",
      "siilto",
      "yarkomaa",
      "jolal",
      "bowte"
    ],
    name => "Fulah Senegal",
    native_language => "Pulaar",
    native_name => "Pulaar Senegaal",
    native_script => undef,
    native_territory => "Senegaal",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Termes 1",
      "Termes 2",
      "Termes 3",
      "Termes 4"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Termes 1",
      "Termes 2",
      "Termes 3",
      "Termes 4"
    ],
    script => undef,
    territory => "Senegal",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fi ]__
  {
    am_pm_abbreviated => [
      "ap.",
      "ip."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H.mm",
      EHms => "E H.mm.ss",
      Ed => "E d.",
      Ehm => "E h.mm a",
      Ehms => "E h.mm.ss a",
      Gy => "y G",
      GyMMM => "LLL y G",
      GyMMMEd => "E d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "H",
      Hm => "H.mm",
      Hms => "H.mm.ss",
      Hmsv => "H.mm.ss v",
      Hmv => "H.mm v",
      M => "L",
      MEd => "E d.M.",
      MMM => "LLL",
      MMMEd => "ccc d. MMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h.mm a",
      hms => "h.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "m.ss",
      y => "y",
      yM => "L.y",
      yMEd => "E d.M.y",
      yMM => "M.y",
      yMMM => "LLL y",
      yMMMEd => "E d. MMM y",
      yMMMM => "LLLL y",
      yMMMMccccd => "cccc d. MMMM y",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fi",
    date_format_full => "cccc d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d.M.y",
    date_format_short => "d.M.y",
    datetime_format_full => "{1} 'klo' {0}",
    datetime_format_long => "{1} 'klo' {0}",
    datetime_format_medium => "{1} 'klo' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ma",
      "ti",
      "ke",
      "to",
      "pe",
      "la",
      "su"
    ],
    day_format_narrow => [
      "M",
      "T",
      "K",
      "T",
      "P",
      "L",
      "S"
    ],
    day_format_wide => [
      "maanantaina",
      "tiistaina",
      "keskiviikkona",
      "torstaina",
      "perjantaina",
      "lauantaina",
      "sunnuntaina"
    ],
    day_stand_alone_abbreviated => [
      "ma",
      "ti",
      "ke",
      "to",
      "pe",
      "la",
      "su"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "K",
      "T",
      "P",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "maanantai",
      "tiistai",
      "keskiviikko",
      "torstai",
      "perjantai",
      "lauantai",
      "sunnuntai"
    ],
    era_abbreviated => [
      "eKr.",
      "jKr."
    ],
    era_narrow => [
      "eK",
      "jK"
    ],
    era_wide => [
      "ennen Kristuksen syntym\N{U+00e4}\N{U+00e4}",
      "j\N{U+00e4}lkeen Kristuksen syntym\N{U+00e4}n"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Finnish",
    month_format_abbreviated => [
      "tammikuuta",
      "helmikuuta",
      "maaliskuuta",
      "huhtikuuta",
      "toukokuuta",
      "kes\N{U+00e4}kuuta",
      "hein\N{U+00e4}kuuta",
      "elokuuta",
      "syyskuuta",
      "lokakuuta",
      "marraskuuta",
      "joulukuuta"
    ],
    month_format_narrow => [
      "T",
      "H",
      "M",
      "H",
      "T",
      "K",
      "H",
      "E",
      "S",
      "L",
      "M",
      "J"
    ],
    month_format_wide => [
      "tammikuuta",
      "helmikuuta",
      "maaliskuuta",
      "huhtikuuta",
      "toukokuuta",
      "kes\N{U+00e4}kuuta",
      "hein\N{U+00e4}kuuta",
      "elokuuta",
      "syyskuuta",
      "lokakuuta",
      "marraskuuta",
      "joulukuuta"
    ],
    month_stand_alone_abbreviated => [
      "tammi",
      "helmi",
      "maalis",
      "huhti",
      "touko",
      "kes\N{U+00e4}",
      "hein\N{U+00e4}",
      "elo",
      "syys",
      "loka",
      "marras",
      "joulu"
    ],
    month_stand_alone_narrow => [
      "T",
      "H",
      "M",
      "H",
      "T",
      "K",
      "H",
      "E",
      "S",
      "L",
      "M",
      "J"
    ],
    month_stand_alone_wide => [
      "tammikuu",
      "helmikuu",
      "maaliskuu",
      "huhtikuu",
      "toukokuu",
      "kes\N{U+00e4}kuu",
      "hein\N{U+00e4}kuu",
      "elokuu",
      "syyskuu",
      "lokakuu",
      "marraskuu",
      "joulukuu"
    ],
    name => "Finnish",
    native_language => "suomi",
    native_name => "suomi",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1. nelj.",
      "2. nelj.",
      "3. nelj.",
      "4. nelj."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. nelj\N{U+00e4}nnes",
      "2. nelj\N{U+00e4}nnes",
      "3. nelj\N{U+00e4}nnes",
      "4. nelj\N{U+00e4}nnes"
    ],
    quarter_stand_alone_abbreviated => [
      "1. nelj.",
      "2. nelj.",
      "3. nelj.",
      "4. nelj."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. nelj\N{U+00e4}nnes",
      "2. nelj\N{U+00e4}nnes",
      "3. nelj\N{U+00e4}nnes",
      "4. nelj\N{U+00e4}nnes"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H.mm.ss zzzz",
    time_format_long => "H.mm.ss z",
    time_format_medium => "H.mm.ss",
    time_format_short => "H.mm",
    variant => undef,
    version => 29
  }
  __[ fi-FI ]__
  {
    am_pm_abbreviated => [
      "ap.",
      "ip."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H.mm",
      EHms => "E H.mm.ss",
      Ed => "E d.",
      Ehm => "E h.mm a",
      Ehms => "E h.mm.ss a",
      Gy => "y G",
      GyMMM => "LLL y G",
      GyMMMEd => "E d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "H",
      Hm => "H.mm",
      Hms => "H.mm.ss",
      Hmsv => "H.mm.ss v",
      Hmv => "H.mm v",
      M => "L",
      MEd => "E d.M.",
      MMM => "LLL",
      MMMEd => "ccc d. MMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h.mm a",
      hms => "h.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "m.ss",
      y => "y",
      yM => "L.y",
      yMEd => "E d.M.y",
      yMM => "M.y",
      yMMM => "LLL y",
      yMMMEd => "E d. MMM y",
      yMMMM => "LLLL y",
      yMMMMccccd => "cccc d. MMMM y",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fi-FI",
    date_format_full => "cccc d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d.M.y",
    date_format_short => "d.M.y",
    datetime_format_full => "{1} 'klo' {0}",
    datetime_format_long => "{1} 'klo' {0}",
    datetime_format_medium => "{1} 'klo' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ma",
      "ti",
      "ke",
      "to",
      "pe",
      "la",
      "su"
    ],
    day_format_narrow => [
      "M",
      "T",
      "K",
      "T",
      "P",
      "L",
      "S"
    ],
    day_format_wide => [
      "maanantaina",
      "tiistaina",
      "keskiviikkona",
      "torstaina",
      "perjantaina",
      "lauantaina",
      "sunnuntaina"
    ],
    day_stand_alone_abbreviated => [
      "ma",
      "ti",
      "ke",
      "to",
      "pe",
      "la",
      "su"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "K",
      "T",
      "P",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "maanantai",
      "tiistai",
      "keskiviikko",
      "torstai",
      "perjantai",
      "lauantai",
      "sunnuntai"
    ],
    era_abbreviated => [
      "eKr.",
      "jKr."
    ],
    era_narrow => [
      "eK",
      "jK"
    ],
    era_wide => [
      "ennen Kristuksen syntym\N{U+00e4}\N{U+00e4}",
      "j\N{U+00e4}lkeen Kristuksen syntym\N{U+00e4}n"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %-d.%-m.%Y %H.%M.%S %z",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %e. %Bta %Y %H.%M.%S",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H.%M.%S",
    language => "Finnish",
    month_format_abbreviated => [
      "tammikuuta",
      "helmikuuta",
      "maaliskuuta",
      "huhtikuuta",
      "toukokuuta",
      "kes\N{U+00e4}kuuta",
      "hein\N{U+00e4}kuuta",
      "elokuuta",
      "syyskuuta",
      "lokakuuta",
      "marraskuuta",
      "joulukuuta"
    ],
    month_format_narrow => [
      "T",
      "H",
      "M",
      "H",
      "T",
      "K",
      "H",
      "E",
      "S",
      "L",
      "M",
      "J"
    ],
    month_format_wide => [
      "tammikuuta",
      "helmikuuta",
      "maaliskuuta",
      "huhtikuuta",
      "toukokuuta",
      "kes\N{U+00e4}kuuta",
      "hein\N{U+00e4}kuuta",
      "elokuuta",
      "syyskuuta",
      "lokakuuta",
      "marraskuuta",
      "joulukuuta"
    ],
    month_stand_alone_abbreviated => [
      "tammi",
      "helmi",
      "maalis",
      "huhti",
      "touko",
      "kes\N{U+00e4}",
      "hein\N{U+00e4}",
      "elo",
      "syys",
      "loka",
      "marras",
      "joulu"
    ],
    month_stand_alone_narrow => [
      "T",
      "H",
      "M",
      "H",
      "T",
      "K",
      "H",
      "E",
      "S",
      "L",
      "M",
      "J"
    ],
    month_stand_alone_wide => [
      "tammikuu",
      "helmikuu",
      "maaliskuu",
      "huhtikuu",
      "toukokuu",
      "kes\N{U+00e4}kuu",
      "hein\N{U+00e4}kuu",
      "elokuu",
      "syyskuu",
      "lokakuu",
      "marraskuu",
      "joulukuu"
    ],
    name => "Finnish Finland",
    native_language => "suomi",
    native_name => "suomi Suomi",
    native_script => undef,
    native_territory => "Suomi",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1. nelj.",
      "2. nelj.",
      "3. nelj.",
      "4. nelj."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. nelj\N{U+00e4}nnes",
      "2. nelj\N{U+00e4}nnes",
      "3. nelj\N{U+00e4}nnes",
      "4. nelj\N{U+00e4}nnes"
    ],
    quarter_stand_alone_abbreviated => [
      "1. nelj.",
      "2. nelj.",
      "3. nelj.",
      "4. nelj."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. nelj\N{U+00e4}nnes",
      "2. nelj\N{U+00e4}nnes",
      "3. nelj\N{U+00e4}nnes",
      "4. nelj\N{U+00e4}nnes"
    ],
    script => undef,
    territory => "Finland",
    time_format_full => "H.mm.ss zzzz",
    time_format_long => "H.mm.ss z",
    time_format_medium => "H.mm.ss",
    time_format_short => "H.mm",
    variant => undef,
    version => 29
  }
  __[ fil ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "MMM d, y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d, y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fil",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} 'nang' {0}",
    datetime_format_long => "{1} 'nang' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Lun",
      "Mar",
      "Miy",
      "Huw",
      "Biy",
      "Sab",
      "Lin"
    ],
    day_format_narrow => [
      "Lun",
      "Mar",
      "Miy",
      "Huw",
      "Biy",
      "Sab",
      "Lin"
    ],
    day_format_wide => [
      "Lunes",
      "Martes",
      "Miyerkules",
      "Huwebes",
      "Biyernes",
      "Sabado",
      "Linggo"
    ],
    day_stand_alone_abbreviated => [
      "Lun",
      "Mar",
      "Miy",
      "Huw",
      "Biy",
      "Sab",
      "Lin"
    ],
    day_stand_alone_narrow => [
      "Lun",
      "Mar",
      "Miy",
      "Huw",
      "Biy",
      "Sab",
      "Lin"
    ],
    day_stand_alone_wide => [
      "Lunes",
      "Martes",
      "Miyerkules",
      "Huwebes",
      "Biyernes",
      "Sabado",
      "Linggo"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "BC",
      "AD"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Filipino",
    month_format_abbreviated => [
      "Ene",
      "Peb",
      "Mar",
      "Abr",
      "May",
      "Hun",
      "Hul",
      "Ago",
      "Set",
      "Okt",
      "Nob",
      "Dis"
    ],
    month_format_narrow => [
      "Ene",
      "Peb",
      "Mar",
      "Abr",
      "May",
      "Hun",
      "Hul",
      "Ago",
      "Set",
      "Okt",
      "Nob",
      "Dis"
    ],
    month_format_wide => [
      "Enero",
      "Pebrero",
      "Marso",
      "Abril",
      "Mayo",
      "Hunyo",
      "Hulyo",
      "Agosto",
      "Setyembre",
      "Oktubre",
      "Nobyembre",
      "Disyembre"
    ],
    month_stand_alone_abbreviated => [
      "Ene",
      "Peb",
      "Mar",
      "Abr",
      "May",
      "Hun",
      "Hul",
      "Ago",
      "Set",
      "Okt",
      "Nob",
      "Dis"
    ],
    month_stand_alone_narrow => [
      "E",
      "P",
      "M",
      "A",
      "M",
      "Hun",
      "Hul",
      "Ago",
      "Set",
      "Okt",
      "Nob",
      "Dis"
    ],
    month_stand_alone_wide => [
      "Enero",
      "Pebrero",
      "Marso",
      "Abril",
      "Mayo",
      "Hunyo",
      "Hulyo",
      "Agosto",
      "Setyembre",
      "Oktubre",
      "Nobyembre",
      "Disyembre"
    ],
    name => "Filipino",
    native_language => "Filipino",
    native_name => "Filipino",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "ika-1 quarter",
      "ika-2 quarter",
      "ika-3 quarter",
      "ika-4 na quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "ika-1 quarter",
      "ika-2 quarter",
      "ika-3 quarter",
      "ika-4 na quarter"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ fil-PH ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "MMM d, y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d, y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fil-PH",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} 'nang' {0}",
    datetime_format_long => "{1} 'nang' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Lun",
      "Mar",
      "Miy",
      "Huw",
      "Biy",
      "Sab",
      "Lin"
    ],
    day_format_narrow => [
      "Lun",
      "Mar",
      "Miy",
      "Huw",
      "Biy",
      "Sab",
      "Lin"
    ],
    day_format_wide => [
      "Lunes",
      "Martes",
      "Miyerkules",
      "Huwebes",
      "Biyernes",
      "Sabado",
      "Linggo"
    ],
    day_stand_alone_abbreviated => [
      "Lun",
      "Mar",
      "Miy",
      "Huw",
      "Biy",
      "Sab",
      "Lin"
    ],
    day_stand_alone_narrow => [
      "Lun",
      "Mar",
      "Miy",
      "Huw",
      "Biy",
      "Sab",
      "Lin"
    ],
    day_stand_alone_wide => [
      "Lunes",
      "Martes",
      "Miyerkules",
      "Huwebes",
      "Biyernes",
      "Sabado",
      "Linggo"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "BC",
      "AD"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %d %b %Y %r %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%r",
    language => "Filipino",
    month_format_abbreviated => [
      "Ene",
      "Peb",
      "Mar",
      "Abr",
      "May",
      "Hun",
      "Hul",
      "Ago",
      "Set",
      "Okt",
      "Nob",
      "Dis"
    ],
    month_format_narrow => [
      "Ene",
      "Peb",
      "Mar",
      "Abr",
      "May",
      "Hun",
      "Hul",
      "Ago",
      "Set",
      "Okt",
      "Nob",
      "Dis"
    ],
    month_format_wide => [
      "Enero",
      "Pebrero",
      "Marso",
      "Abril",
      "Mayo",
      "Hunyo",
      "Hulyo",
      "Agosto",
      "Setyembre",
      "Oktubre",
      "Nobyembre",
      "Disyembre"
    ],
    month_stand_alone_abbreviated => [
      "Ene",
      "Peb",
      "Mar",
      "Abr",
      "May",
      "Hun",
      "Hul",
      "Ago",
      "Set",
      "Okt",
      "Nob",
      "Dis"
    ],
    month_stand_alone_narrow => [
      "E",
      "P",
      "M",
      "A",
      "M",
      "Hun",
      "Hul",
      "Ago",
      "Set",
      "Okt",
      "Nob",
      "Dis"
    ],
    month_stand_alone_wide => [
      "Enero",
      "Pebrero",
      "Marso",
      "Abril",
      "Mayo",
      "Hunyo",
      "Hulyo",
      "Agosto",
      "Setyembre",
      "Oktubre",
      "Nobyembre",
      "Disyembre"
    ],
    name => "Filipino Philippines",
    native_language => "Filipino",
    native_name => "Filipino Pilipinas",
    native_script => undef,
    native_territory => "Pilipinas",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "ika-1 quarter",
      "ika-2 quarter",
      "ika-3 quarter",
      "ika-4 na quarter"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "ika-1 quarter",
      "ika-2 quarter",
      "ika-3 quarter",
      "ika-4 na quarter"
    ],
    script => undef,
    territory => "Philippines",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ fo ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "LL",
      MEd => "E dd.MM",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      Md => "dd.MM",
      d => "d.",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "E dd.MM.y",
      yMMM => "MMM y",
      yMMMEd => "E d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "dd.MM.y",
      yQQQ => "QQQ '\N{U+00ed}' y",
      yQQQQ => "QQQQ '\N{U+00ed}' y"
    },
    code => "fo",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "dd.MM.y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} 'kl'. {0}",
    datetime_format_long => "{1} 'kl'. {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "m\N{U+00e1}n.",
      "t\N{U+00fd}s.",
      "mik.",
      "h\N{U+00f3}s.",
      "fr\N{U+00ed}.",
      "ley.",
      "sun."
    ],
    day_format_narrow => [
      "M",
      "T",
      "M",
      "H",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "m\N{U+00e1}nadagur",
      "t\N{U+00fd}sdagur",
      "mikudagur",
      "h\N{U+00f3}sdagur",
      "fr\N{U+00ed}ggjadagur",
      "leygardagur",
      "sunnudagur"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+00e1}n",
      "t\N{U+00fd}s",
      "mik",
      "h\N{U+00f3}s",
      "fr\N{U+00ed}",
      "ley",
      "sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "M",
      "H",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "m\N{U+00e1}nadagur",
      "t\N{U+00fd}sdagur",
      "mikudagur",
      "h\N{U+00f3}sdagur",
      "fr\N{U+00ed}ggjadagur",
      "leygardagur",
      "sunnudagur"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "fKr",
      "eKr"
    ],
    era_wide => [
      "fyri Krist",
      "eftir Krist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Faroese",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mar.",
      "apr.",
      "mai",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "des."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "mars",
      "apr\N{U+00ed}l",
      "mai",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "desember"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "mai",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "mars",
      "apr\N{U+00ed}l",
      "mai",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "desember"
    ],
    name => "Faroese",
    native_language => "f\N{U+00f8}royskt",
    native_name => "f\N{U+00f8}royskt",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1. \N{U+00e1}rsfj.",
      "2. \N{U+00e1}rsfj.",
      "3. \N{U+00e1}rsfj.",
      "4. \N{U+00e1}rsfj."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "2. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "3. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "4. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur"
    ],
    quarter_stand_alone_abbreviated => [
      "1. \N{U+00e1}rsfj.",
      "2. \N{U+00e1}rsfj.",
      "3. \N{U+00e1}rsfj.",
      "4. \N{U+00e1}rsfj."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "2. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "3. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "4. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fo-DK ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "LL",
      MEd => "E dd.MM",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      Md => "dd.MM",
      d => "d.",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "E dd.MM.y",
      yMMM => "MMM y",
      yMMMEd => "E d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "dd.MM.y",
      yQQQ => "QQQ '\N{U+00ed}' y",
      yQQQQ => "QQQQ '\N{U+00ed}' y"
    },
    code => "fo-DK",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "dd.MM.y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} 'kl'. {0}",
    datetime_format_long => "{1} 'kl'. {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "m\N{U+00e1}n.",
      "t\N{U+00fd}s.",
      "mik.",
      "h\N{U+00f3}s.",
      "fr\N{U+00ed}.",
      "ley.",
      "sun."
    ],
    day_format_narrow => [
      "M",
      "T",
      "M",
      "H",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "m\N{U+00e1}nadagur",
      "t\N{U+00fd}sdagur",
      "mikudagur",
      "h\N{U+00f3}sdagur",
      "fr\N{U+00ed}ggjadagur",
      "leygardagur",
      "sunnudagur"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+00e1}n",
      "t\N{U+00fd}s",
      "mik",
      "h\N{U+00f3}s",
      "fr\N{U+00ed}",
      "ley",
      "sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "M",
      "H",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "m\N{U+00e1}nadagur",
      "t\N{U+00fd}sdagur",
      "mikudagur",
      "h\N{U+00f3}sdagur",
      "fr\N{U+00ed}ggjadagur",
      "leygardagur",
      "sunnudagur"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "fKr",
      "eKr"
    ],
    era_wide => [
      "fyri Krist",
      "eftir Krist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Faroese",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mar.",
      "apr.",
      "mai",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "des."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "mars",
      "apr\N{U+00ed}l",
      "mai",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "desember"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "mai",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "mars",
      "apr\N{U+00ed}l",
      "mai",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "desember"
    ],
    name => "Faroese Denmark",
    native_language => "f\N{U+00f8}royskt",
    native_name => "f\N{U+00f8}royskt Danmark",
    native_script => undef,
    native_territory => "Danmark",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1. \N{U+00e1}rsfj.",
      "2. \N{U+00e1}rsfj.",
      "3. \N{U+00e1}rsfj.",
      "4. \N{U+00e1}rsfj."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "2. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "3. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "4. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur"
    ],
    quarter_stand_alone_abbreviated => [
      "1. \N{U+00e1}rsfj.",
      "2. \N{U+00e1}rsfj.",
      "3. \N{U+00e1}rsfj.",
      "4. \N{U+00e1}rsfj."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "2. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "3. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "4. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur"
    ],
    script => undef,
    territory => "Denmark",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fo-FO ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "LL",
      MEd => "E dd.MM",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      Md => "dd.MM",
      d => "d.",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "E dd.MM.y",
      yMMM => "MMM y",
      yMMMEd => "E d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "dd.MM.y",
      yQQQ => "QQQ '\N{U+00ed}' y",
      yQQQQ => "QQQQ '\N{U+00ed}' y"
    },
    code => "fo-FO",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "dd.MM.y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} 'kl'. {0}",
    datetime_format_long => "{1} 'kl'. {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "m\N{U+00e1}n.",
      "t\N{U+00fd}s.",
      "mik.",
      "h\N{U+00f3}s.",
      "fr\N{U+00ed}.",
      "ley.",
      "sun."
    ],
    day_format_narrow => [
      "M",
      "T",
      "M",
      "H",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "m\N{U+00e1}nadagur",
      "t\N{U+00fd}sdagur",
      "mikudagur",
      "h\N{U+00f3}sdagur",
      "fr\N{U+00ed}ggjadagur",
      "leygardagur",
      "sunnudagur"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+00e1}n",
      "t\N{U+00fd}s",
      "mik",
      "h\N{U+00f3}s",
      "fr\N{U+00ed}",
      "ley",
      "sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "M",
      "H",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "m\N{U+00e1}nadagur",
      "t\N{U+00fd}sdagur",
      "mikudagur",
      "h\N{U+00f3}sdagur",
      "fr\N{U+00ed}ggjadagur",
      "leygardagur",
      "sunnudagur"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "fKr",
      "eKr"
    ],
    era_wide => [
      "fyri Krist",
      "eftir Krist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m-%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Faroese",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mar.",
      "apr.",
      "mai",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "des."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "mars",
      "apr\N{U+00ed}l",
      "mai",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "desember"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "mai",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "mars",
      "apr\N{U+00ed}l",
      "mai",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "desember"
    ],
    name => "Faroese Faroe Islands",
    native_language => "f\N{U+00f8}royskt",
    native_name => "f\N{U+00f8}royskt F\N{U+00f8}royar",
    native_script => undef,
    native_territory => "F\N{U+00f8}royar",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1. \N{U+00e1}rsfj.",
      "2. \N{U+00e1}rsfj.",
      "3. \N{U+00e1}rsfj.",
      "4. \N{U+00e1}rsfj."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "2. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "3. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "4. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur"
    ],
    quarter_stand_alone_abbreviated => [
      "1. \N{U+00e1}rsfj.",
      "2. \N{U+00e1}rsfj.",
      "3. \N{U+00e1}rsfj.",
      "4. \N{U+00e1}rsfj."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "2. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "3. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur",
      "4. \N{U+00e1}rsfj\N{U+00f3}r\N{U+00f0}ingur"
    ],
    script => undef,
    territory => "Faroe Islands",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-BE ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-BE",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/MM/yy",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Belgium",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Belgique",
    native_script => undef,
    native_territory => "Belgique",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Belgium",
    time_format_full => "H 'h' mm 'min' ss 's' zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-BF ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-BF",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Burkina Faso",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Burkina Faso",
    native_script => undef,
    native_territory => "Burkina Faso",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Burkina Faso",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-BI ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-BI",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Burundi",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Burundi",
    native_script => undef,
    native_territory => "Burundi",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Burundi",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-BJ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-BJ",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Benin",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais B\N{U+00e9}nin",
    native_script => undef,
    native_territory => "B\N{U+00e9}nin",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Benin",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-BL ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-BL",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French St. Barth\N{U+00e9}lemy",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Saint-Barth\N{U+00e9}lemy",
    native_script => undef,
    native_territory => "Saint-Barth\N{U+00e9}lemy",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "St. Barth\N{U+00e9}lemy",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-CA ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E M-d",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "MM-d",
      MMdd => "MM-dd",
      Md => "M-d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "E y-MM-dd",
      yMM => "y-MM",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-CA",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "yy-MM-dd",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%Y-%m-%d",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Canada",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Canada",
    native_script => undef,
    native_territory => "Canada",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Canada",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-CD ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-CD",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Congo - Kinshasa",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Congo-Kinshasa",
    native_script => undef,
    native_territory => "Congo-Kinshasa",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Congo - Kinshasa",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-CF ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-CF",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Central African Republic",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais R\N{U+00e9}publique centrafricaine",
    native_script => undef,
    native_territory => "R\N{U+00e9}publique centrafricaine",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Central African Republic",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-CG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-CG",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Congo - Brazzaville",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Congo-Brazzaville",
    native_script => undef,
    native_territory => "Congo-Brazzaville",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Congo - Brazzaville",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-CH ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-CH",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d. %m. %y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Switzerland",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Suisse",
    native_script => undef,
    native_territory => "Suisse",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Switzerland",
    time_format_full => "HH.mm:ss 'h' zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-CI ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-CI",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French C\N{U+00f4}te d\N{U+2019}Ivoire",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais C\N{U+00f4}te d\N{U+2019}Ivoire",
    native_script => undef,
    native_territory => "C\N{U+00f4}te d\N{U+2019}Ivoire",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "C\N{U+00f4}te d\N{U+2019}Ivoire",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-CM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-CM",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Cameroon",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Cameroun",
    native_script => undef,
    native_territory => "Cameroun",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Cameroon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-DJ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-DJ",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Djibouti",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Djibouti",
    native_script => undef,
    native_territory => "Djibouti",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Djibouti",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ fr-DZ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-DZ",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Algeria",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Alg\N{U+00e9}rie",
    native_script => undef,
    native_territory => "Alg\N{U+00e9}rie",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Algeria",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ fr-GA ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-GA",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Gabon",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Gabon",
    native_script => undef,
    native_territory => "Gabon",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Gabon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-GF ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-GF",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French French Guiana",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Guyane fran\N{U+00e7}aise",
    native_script => undef,
    native_territory => "Guyane fran\N{U+00e7}aise",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "French Guiana",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-GN ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-GN",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Guinea",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Guin\N{U+00e9}e",
    native_script => undef,
    native_territory => "Guin\N{U+00e9}e",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Guinea",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-GP ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-GP",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Guadeloupe",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Guadeloupe",
    native_script => undef,
    native_territory => "Guadeloupe",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Guadeloupe",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-GQ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-GQ",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Equatorial Guinea",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Guin\N{U+00e9}e \N{U+00e9}quatoriale",
    native_script => undef,
    native_territory => "Guin\N{U+00e9}e \N{U+00e9}quatoriale",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Equatorial Guinea",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-HT ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-HT",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Haiti",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Ha\N{U+00ef}ti",
    native_script => undef,
    native_territory => "Ha\N{U+00ef}ti",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Haiti",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-KM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-KM",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Comoros",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Comores",
    native_script => undef,
    native_territory => "Comores",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Comoros",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-LU ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-LU",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Luxembourg",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Luxembourg",
    native_script => undef,
    native_territory => "Luxembourg",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Luxembourg",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-MA ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-MA",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "jan.",
      "f\N{U+00e9}v.",
      "mar.",
      "avr.",
      "mai",
      "jui.",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "f\N{U+00e9}v.",
      "mar.",
      "avr.",
      "mai",
      "jui.",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Morocco",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Maroc",
    native_script => undef,
    native_territory => "Maroc",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Morocco",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-MC ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-MC",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Monaco",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Monaco",
    native_script => undef,
    native_territory => "Monaco",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Monaco",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-MF ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-MF",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French St. Martin",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Saint-Martin",
    native_script => undef,
    native_territory => "Saint-Martin",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "St. Martin",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-MG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-MG",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Madagascar",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Madagascar",
    native_script => undef,
    native_territory => "Madagascar",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Madagascar",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-ML ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-ML",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Mali",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Mali",
    native_script => undef,
    native_territory => "Mali",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Mali",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-MQ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-MQ",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Martinique",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Martinique",
    native_script => undef,
    native_territory => "Martinique",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Martinique",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-MR ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-MR",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Mauritania",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Mauritanie",
    native_script => undef,
    native_territory => "Mauritanie",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Mauritania",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ fr-MU ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-MU",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Mauritius",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Maurice",
    native_script => undef,
    native_territory => "Maurice",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Mauritius",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-NC ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-NC",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French New Caledonia",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Nouvelle-Cal\N{U+00e9}donie",
    native_script => undef,
    native_territory => "Nouvelle-Cal\N{U+00e9}donie",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "New Caledonia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-NE ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-NE",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Niger",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Niger",
    native_script => undef,
    native_territory => "Niger",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Niger",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-PF ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-PF",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French French Polynesia",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Polyn\N{U+00e9}sie fran\N{U+00e7}aise",
    native_script => undef,
    native_territory => "Polyn\N{U+00e9}sie fran\N{U+00e7}aise",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "French Polynesia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-PM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-PM",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French St. Pierre & Miquelon",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Saint-Pierre-et-Miquelon",
    native_script => undef,
    native_territory => "Saint-Pierre-et-Miquelon",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "St. Pierre & Miquelon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-RE ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-RE",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French R\N{U+00e9}union",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais La R\N{U+00e9}union",
    native_script => undef,
    native_territory => "La R\N{U+00e9}union",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "R\N{U+00e9}union",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-RW ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-RW",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Rwanda",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Rwanda",
    native_script => undef,
    native_territory => "Rwanda",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Rwanda",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-SC ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-SC",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Seychelles",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Seychelles",
    native_script => undef,
    native_territory => "Seychelles",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Seychelles",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-SN ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-SN",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Senegal",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais S\N{U+00e9}n\N{U+00e9}gal",
    native_script => undef,
    native_territory => "S\N{U+00e9}n\N{U+00e9}gal",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Senegal",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-SY ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-SY",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Syria",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Syrie",
    native_script => undef,
    native_territory => "Syrie",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Syria",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ fr-TD ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-TD",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Chad",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Tchad",
    native_script => undef,
    native_territory => "Tchad",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Chad",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ fr-TG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-TG",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Togo",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Togo",
    native_script => undef,
    native_territory => "Togo",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Togo",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-TN ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-TN",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Tunisia",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Tunisie",
    native_script => undef,
    native_territory => "Tunisie",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Tunisia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ fr-VU ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-VU",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Vanuatu",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Vanuatu",
    native_script => undef,
    native_territory => "Vanuatu",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Vanuatu",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ fr-WF ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-WF",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Wallis & Futuna",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Wallis-et-Futuna",
    native_script => undef,
    native_territory => "Wallis-et-Futuna",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Wallis & Futuna",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fr-YT ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "E",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH 'h'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fr-YT",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} '\N{U+00e0}' {0}",
    datetime_format_long => "{1} '\N{U+00e0}' {0}",
    datetime_format_medium => "{1} '\N{U+00e0}' {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mer.",
      "jeu.",
      "ven.",
      "sam.",
      "dim."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "mercredi",
      "jeudi",
      "vendredi",
      "samedi",
      "dimanche"
    ],
    era_abbreviated => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_narrow => [
      "av. J.-C.",
      "ap. J.-C."
    ],
    era_wide => [
      "avant J\N{U+00e9}sus-Christ",
      "apr\N{U+00e8}s J\N{U+00e9}sus-Christ"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "French",
    month_format_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    month_stand_alone_abbreviated => [
      "janv.",
      "f\N{U+00e9}vr.",
      "mars",
      "avr.",
      "mai",
      "juin",
      "juil.",
      "ao\N{U+00fb}t",
      "sept.",
      "oct.",
      "nov.",
      "d\N{U+00e9}c."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janvier",
      "f\N{U+00e9}vrier",
      "mars",
      "avril",
      "mai",
      "juin",
      "juillet",
      "ao\N{U+00fb}t",
      "septembre",
      "octobre",
      "novembre",
      "d\N{U+00e9}cembre"
    ],
    name => "French Mayotte",
    native_language => "fran\N{U+00e7}ais",
    native_name => "fran\N{U+00e7}ais Mayotte",
    native_script => undef,
    native_territory => "Mayotte",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1er trimestre",
      "2e trimestre",
      "3e trimestre",
      "4e trimestre"
    ],
    script => undef,
    territory => "Mayotte",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fur ]__
  {
    am_pm_abbreviated => [
      "a.",
      "p."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "H:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d 'di' MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "LLLL 'dal' y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fur",
    date_format_full => "EEEE d 'di' MMMM 'dal' y",
    date_format_long => "d 'di' MMMM 'dal' y",
    date_format_medium => "dd/MM/y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun",
      "mar",
      "mie",
      "joi",
      "vin",
      "sab",
      "dom"
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lunis",
      "martars",
      "miercus",
      "joibe",
      "vinars",
      "sabide",
      "domenie"
    ],
    day_stand_alone_abbreviated => [
      "lun",
      "mar",
      "mie",
      "joi",
      "vin",
      "sab",
      "dom"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunis",
      "martars",
      "miercus",
      "joibe",
      "vinars",
      "sabide",
      "domenie"
    ],
    era_abbreviated => [
      "pdC",
      "ddC"
    ],
    era_narrow => [
      "pdC",
      "ddC"
    ],
    era_wide => [
      "pdC",
      "ddC"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Friulian",
    month_format_abbreviated => [
      "Zen",
      "Fev",
      "Mar",
      "Avr",
      "Mai",
      "Jug",
      "Lui",
      "Avo",
      "Set",
      "Otu",
      "Nov",
      "Dic"
    ],
    month_format_narrow => [
      "Z",
      "F",
      "M",
      "A",
      "M",
      "J",
      "L",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Zen\N{U+00e2}r",
      "Fevr\N{U+00e2}r",
      "Mar\N{U+00e7}",
      "Avr\N{U+00ee}l",
      "Mai",
      "Jugn",
      "Lui",
      "Avost",
      "Setembar",
      "Otubar",
      "Novembar",
      "Dicembar"
    ],
    month_stand_alone_abbreviated => [
      "Zen",
      "Fev",
      "Mar",
      "Avr",
      "Mai",
      "Jug",
      "Lui",
      "Avo",
      "Set",
      "Otu",
      "Nov",
      "Dic"
    ],
    month_stand_alone_narrow => [
      "Z",
      "F",
      "M",
      "A",
      "M",
      "J",
      "L",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Zen\N{U+00e2}r",
      "Fevr\N{U+00e2}r",
      "Mar\N{U+00e7}",
      "Avr\N{U+00ee}l",
      "Mai",
      "Jugn",
      "Lui",
      "Avost",
      "Setembar",
      "Otubar",
      "Novembar",
      "Dicembar"
    ],
    name => "Friulian",
    native_language => "furlan",
    native_name => "furlan",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Prin trimestri",
      "Secont trimestri",
      "Tier\N{U+00e7} trimestri",
      "Cuart trimestri"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Prin trimestri",
      "Secont trimestri",
      "Tier\N{U+00e7} trimestri",
      "Cuart trimestri"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fur-IT ]__
  {
    am_pm_abbreviated => [
      "a.",
      "p."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "H:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d 'di' MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "LLLL 'dal' y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fur-IT",
    date_format_full => "EEEE d 'di' MMMM 'dal' y",
    date_format_long => "d 'di' MMMM 'dal' y",
    date_format_medium => "dd/MM/y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lun",
      "mar",
      "mie",
      "joi",
      "vin",
      "sab",
      "dom"
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "lunis",
      "martars",
      "miercus",
      "joibe",
      "vinars",
      "sabide",
      "domenie"
    ],
    day_stand_alone_abbreviated => [
      "lun",
      "mar",
      "mie",
      "joi",
      "vin",
      "sab",
      "dom"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "lunis",
      "martars",
      "miercus",
      "joibe",
      "vinars",
      "sabide",
      "domenie"
    ],
    era_abbreviated => [
      "pdC",
      "ddC"
    ],
    era_narrow => [
      "pdC",
      "ddC"
    ],
    era_wide => [
      "pdC",
      "ddC"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d. %m. %y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Friulian",
    month_format_abbreviated => [
      "Zen",
      "Fev",
      "Mar",
      "Avr",
      "Mai",
      "Jug",
      "Lui",
      "Avo",
      "Set",
      "Otu",
      "Nov",
      "Dic"
    ],
    month_format_narrow => [
      "Z",
      "F",
      "M",
      "A",
      "M",
      "J",
      "L",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Zen\N{U+00e2}r",
      "Fevr\N{U+00e2}r",
      "Mar\N{U+00e7}",
      "Avr\N{U+00ee}l",
      "Mai",
      "Jugn",
      "Lui",
      "Avost",
      "Setembar",
      "Otubar",
      "Novembar",
      "Dicembar"
    ],
    month_stand_alone_abbreviated => [
      "Zen",
      "Fev",
      "Mar",
      "Avr",
      "Mai",
      "Jug",
      "Lui",
      "Avo",
      "Set",
      "Otu",
      "Nov",
      "Dic"
    ],
    month_stand_alone_narrow => [
      "Z",
      "F",
      "M",
      "A",
      "M",
      "J",
      "L",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Zen\N{U+00e2}r",
      "Fevr\N{U+00e2}r",
      "Mar\N{U+00e7}",
      "Avr\N{U+00ee}l",
      "Mai",
      "Jugn",
      "Lui",
      "Avost",
      "Setembar",
      "Otubar",
      "Novembar",
      "Dicembar"
    ],
    name => "Friulian Italy",
    native_language => "furlan",
    native_name => "furlan Italie",
    native_script => undef,
    native_territory => "Italie",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Prin trimestri",
      "Secont trimestri",
      "Tier\N{U+00e7} trimestri",
      "Cuart trimestri"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Prin trimestri",
      "Secont trimestri",
      "Tier\N{U+00e7} trimestri",
      "Cuart trimestri"
    ],
    script => undef,
    territory => "Italy",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fy ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E d-M-y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d-M-y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fy",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd-MM-yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "mo",
      "ti",
      "wo",
      "to",
      "fr",
      "so",
      "si"
    ],
    day_format_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_format_wide => [
      "moandei",
      "tiisdei",
      "woansdei",
      "tongersdei",
      "freed",
      "sneon",
      "snein"
    ],
    day_stand_alone_abbreviated => [
      "mo",
      "ti",
      "wo",
      "to",
      "fr",
      "so",
      "si"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_stand_alone_wide => [
      "moandei",
      "tiisdei",
      "woansdei",
      "tongersdei",
      "freed",
      "sneon",
      "snein"
    ],
    era_abbreviated => [
      "f.Kr.",
      "n.Kr."
    ],
    era_narrow => [
      "f.K.",
      "n.K."
    ],
    era_wide => [
      "Foar Kristus",
      "nei Kristus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Western Frisian",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mai.",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "des."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "jannewaris",
      "febrewaris",
      "maart",
      "april",
      "maaie",
      "juny",
      "july",
      "augustus",
      "septimber",
      "oktober",
      "novimber",
      "desimber"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mrt",
      "apr",
      "mai",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "jannewaris",
      "febrewaris",
      "maart",
      "april",
      "maaie",
      "juny",
      "july",
      "augustus",
      "septimber",
      "oktober",
      "novimber",
      "desimber"
    ],
    name => "Western Frisian",
    native_language => "West-Frysk",
    native_name => "West-Frysk",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ fy-NL ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E d-M-y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d-M-y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "fy-NL",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd-MM-yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "mo",
      "ti",
      "wo",
      "to",
      "fr",
      "so",
      "si"
    ],
    day_format_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_format_wide => [
      "moandei",
      "tiisdei",
      "woansdei",
      "tongersdei",
      "freed",
      "sneon",
      "snein"
    ],
    day_stand_alone_abbreviated => [
      "mo",
      "ti",
      "wo",
      "to",
      "fr",
      "so",
      "si"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_stand_alone_wide => [
      "moandei",
      "tiisdei",
      "woansdei",
      "tongersdei",
      "freed",
      "sneon",
      "snein"
    ],
    era_abbreviated => [
      "f.Kr.",
      "n.Kr."
    ],
    era_narrow => [
      "f.K.",
      "n.K."
    ],
    era_wide => [
      "Foar Kristus",
      "nei Kristus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d-%m-%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Western Frisian",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mai.",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "des."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "jannewaris",
      "febrewaris",
      "maart",
      "april",
      "maaie",
      "juny",
      "july",
      "augustus",
      "septimber",
      "oktober",
      "novimber",
      "desimber"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mrt",
      "apr",
      "mai",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "jannewaris",
      "febrewaris",
      "maart",
      "april",
      "maaie",
      "juny",
      "july",
      "augustus",
      "septimber",
      "oktober",
      "novimber",
      "desimber"
    ],
    name => "Western Frisian Netherlands",
    native_language => "West-Frysk",
    native_name => "West-Frysk Nederl\N{U+00e2}n",
    native_script => undef,
    native_territory => "Nederl\N{U+00e2}n",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    script => undef,
    territory => "Netherlands",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ga ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "LL",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ga",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Luan",
      "M\N{U+00e1}irt",
      "C\N{U+00e9}ad",
      "D\N{U+00e9}ar",
      "Aoine",
      "Sath",
      "Domh"
    ],
    day_format_narrow => [
      "L",
      "M",
      "C",
      "D",
      "A",
      "S",
      "D"
    ],
    day_format_wide => [
      "D\N{U+00e9} Luain",
      "D\N{U+00e9} M\N{U+00e1}irt",
      "D\N{U+00e9} C\N{U+00e9}adaoin",
      "D\N{U+00e9}ardaoin",
      "D\N{U+00e9} hAoine",
      "D\N{U+00e9} Sathairn",
      "D\N{U+00e9} Domhnaigh"
    ],
    day_stand_alone_abbreviated => [
      "Luan",
      "M\N{U+00e1}irt",
      "C\N{U+00e9}ad",
      "D\N{U+00e9}ar",
      "Aoine",
      "Sath",
      "Domh"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "C",
      "D",
      "A",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "D\N{U+00e9} Luain",
      "D\N{U+00e9} M\N{U+00e1}irt",
      "D\N{U+00e9} C\N{U+00e9}adaoin",
      "D\N{U+00e9}ardaoin",
      "D\N{U+00e9} hAoine",
      "D\N{U+00e9} Sathairn",
      "D\N{U+00e9} Domhnaigh"
    ],
    era_abbreviated => [
      "RC",
      "AD"
    ],
    era_narrow => [
      "RC",
      "AD"
    ],
    era_wide => [
      "Roimh Chr\N{U+00ed}ost",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Irish",
    month_format_abbreviated => [
      "Ean",
      "Feabh",
      "M\N{U+00e1}rta",
      "Aib",
      "Beal",
      "Meith",
      "I\N{U+00fa}il",
      "L\N{U+00fa}n",
      "MF\N{U+00f3}mh",
      "DF\N{U+00f3}mh",
      "Samh",
      "Noll"
    ],
    month_format_narrow => [
      "E",
      "F",
      "M",
      "A",
      "B",
      "M",
      "I",
      "L",
      "M",
      "D",
      "S",
      "N"
    ],
    month_format_wide => [
      "Ean\N{U+00e1}ir",
      "Feabhra",
      "M\N{U+00e1}rta",
      "Aibre\N{U+00e1}n",
      "Bealtaine",
      "Meitheamh",
      "I\N{U+00fa}il",
      "L\N{U+00fa}nasa",
      "Me\N{U+00e1}n F\N{U+00f3}mhair",
      "Deireadh F\N{U+00f3}mhair",
      "Samhain",
      "Nollaig"
    ],
    month_stand_alone_abbreviated => [
      "Ean",
      "Feabh",
      "M\N{U+00e1}rta",
      "Aib",
      "Beal",
      "Meith",
      "I\N{U+00fa}il",
      "L\N{U+00fa}n",
      "MF\N{U+00f3}mh",
      "DF\N{U+00f3}mh",
      "Samh",
      "Noll"
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "B",
      "M",
      "I",
      "L",
      "M",
      "D",
      "S",
      "N"
    ],
    month_stand_alone_wide => [
      "Ean\N{U+00e1}ir",
      "Feabhra",
      "M\N{U+00e1}rta",
      "Aibre\N{U+00e1}n",
      "Bealtaine",
      "Meitheamh",
      "I\N{U+00fa}il",
      "L\N{U+00fa}nasa",
      "Me\N{U+00e1}n F\N{U+00f3}mhair",
      "Deireadh F\N{U+00f3}mhair",
      "Samhain",
      "Nollaig"
    ],
    name => "Irish",
    native_language => "Gaeilge",
    native_name => "Gaeilge",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+00fa} r\N{U+00e1}ithe",
      "2\N{U+00fa} r\N{U+00e1}ithe",
      "3\N{U+00fa} r\N{U+00e1}ithe",
      "4\N{U+00fa} r\N{U+00e1}ithe"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+00fa} r\N{U+00e1}ithe",
      "2\N{U+00fa} r\N{U+00e1}ithe",
      "3\N{U+00fa} r\N{U+00e1}ithe",
      "4\N{U+00fa} r\N{U+00e1}ithe"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ga-IE ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "LL",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E dd/MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ga-IE",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Luan",
      "M\N{U+00e1}irt",
      "C\N{U+00e9}ad",
      "D\N{U+00e9}ar",
      "Aoine",
      "Sath",
      "Domh"
    ],
    day_format_narrow => [
      "L",
      "M",
      "C",
      "D",
      "A",
      "S",
      "D"
    ],
    day_format_wide => [
      "D\N{U+00e9} Luain",
      "D\N{U+00e9} M\N{U+00e1}irt",
      "D\N{U+00e9} C\N{U+00e9}adaoin",
      "D\N{U+00e9}ardaoin",
      "D\N{U+00e9} hAoine",
      "D\N{U+00e9} Sathairn",
      "D\N{U+00e9} Domhnaigh"
    ],
    day_stand_alone_abbreviated => [
      "Luan",
      "M\N{U+00e1}irt",
      "C\N{U+00e9}ad",
      "D\N{U+00e9}ar",
      "Aoine",
      "Sath",
      "Domh"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "C",
      "D",
      "A",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "D\N{U+00e9} Luain",
      "D\N{U+00e9} M\N{U+00e1}irt",
      "D\N{U+00e9} C\N{U+00e9}adaoin",
      "D\N{U+00e9}ardaoin",
      "D\N{U+00e9} hAoine",
      "D\N{U+00e9} Sathairn",
      "D\N{U+00e9} Domhnaigh"
    ],
    era_abbreviated => [
      "RC",
      "AD"
    ],
    era_narrow => [
      "RC",
      "AD"
    ],
    era_wide => [
      "Roimh Chr\N{U+00ed}ost",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Irish",
    month_format_abbreviated => [
      "Ean",
      "Feabh",
      "M\N{U+00e1}rta",
      "Aib",
      "Beal",
      "Meith",
      "I\N{U+00fa}il",
      "L\N{U+00fa}n",
      "MF\N{U+00f3}mh",
      "DF\N{U+00f3}mh",
      "Samh",
      "Noll"
    ],
    month_format_narrow => [
      "E",
      "F",
      "M",
      "A",
      "B",
      "M",
      "I",
      "L",
      "M",
      "D",
      "S",
      "N"
    ],
    month_format_wide => [
      "Ean\N{U+00e1}ir",
      "Feabhra",
      "M\N{U+00e1}rta",
      "Aibre\N{U+00e1}n",
      "Bealtaine",
      "Meitheamh",
      "I\N{U+00fa}il",
      "L\N{U+00fa}nasa",
      "Me\N{U+00e1}n F\N{U+00f3}mhair",
      "Deireadh F\N{U+00f3}mhair",
      "Samhain",
      "Nollaig"
    ],
    month_stand_alone_abbreviated => [
      "Ean",
      "Feabh",
      "M\N{U+00e1}rta",
      "Aib",
      "Beal",
      "Meith",
      "I\N{U+00fa}il",
      "L\N{U+00fa}n",
      "MF\N{U+00f3}mh",
      "DF\N{U+00f3}mh",
      "Samh",
      "Noll"
    ],
    month_stand_alone_narrow => [
      "E",
      "F",
      "M",
      "A",
      "B",
      "M",
      "I",
      "L",
      "M",
      "D",
      "S",
      "N"
    ],
    month_stand_alone_wide => [
      "Ean\N{U+00e1}ir",
      "Feabhra",
      "M\N{U+00e1}rta",
      "Aibre\N{U+00e1}n",
      "Bealtaine",
      "Meitheamh",
      "I\N{U+00fa}il",
      "L\N{U+00fa}nasa",
      "Me\N{U+00e1}n F\N{U+00f3}mhair",
      "Deireadh F\N{U+00f3}mhair",
      "Samhain",
      "Nollaig"
    ],
    name => "Irish Ireland",
    native_language => "Gaeilge",
    native_name => "Gaeilge \N{U+00c9}ire",
    native_script => undef,
    native_territory => "\N{U+00c9}ire",
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+00fa} r\N{U+00e1}ithe",
      "2\N{U+00fa} r\N{U+00e1}ithe",
      "3\N{U+00fa} r\N{U+00e1}ithe",
      "4\N{U+00fa} r\N{U+00e1}ithe"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+00fa} r\N{U+00e1}ithe",
      "2\N{U+00fa} r\N{U+00e1}ithe",
      "3\N{U+00fa} r\N{U+00e1}ithe",
      "4\N{U+00fa} r\N{U+00e1}ithe"
    ],
    script => undef,
    territory => "Ireland",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ gd ]__
  {
    am_pm_abbreviated => [
      "m",
      "f"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, d",
      Ehm => "E h:mma",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d'mh' MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "ha",
      hm => "h:mma",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mma v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "LLLL y",
      yMMMd => "d MMM y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "gd",
    date_format_full => "EEEE, d'mh' MMMM y",
    date_format_long => "d'mh' MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "DiL",
      "DiM",
      "DiC",
      "Dia",
      "Dih",
      "DiS",
      "DiD"
    ],
    day_format_narrow => [
      "L",
      "M",
      "C",
      "A",
      "H",
      "S",
      "D"
    ],
    day_format_wide => [
      "DiLuain",
      "DiM\N{U+00e0}irt",
      "DiCiadain",
      "DiarDaoin",
      "DihAoine",
      "DiSathairne",
      "DiD\N{U+00f2}mhnaich"
    ],
    day_stand_alone_abbreviated => [
      "DiL",
      "DiM",
      "DiC",
      "Dia",
      "Dih",
      "DiS",
      "DiD"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "C",
      "A",
      "H",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "DiLuain",
      "DiM\N{U+00e0}irt",
      "DiCiadain",
      "DiarDaoin",
      "DihAoine",
      "DiSathairne",
      "DiD\N{U+00f2}mhnaich"
    ],
    era_abbreviated => [
      "RC",
      "AD"
    ],
    era_narrow => [
      "R",
      "A"
    ],
    era_wide => [
      "Ro Chr\N{U+00ec}osta",
      "An d\N{U+00e8}idh Chr\N{U+00ec}osta"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Scottish Gaelic",
    month_format_abbreviated => [
      "Faoi",
      "Gearr",
      "M\N{U+00e0}rt",
      "Gibl",
      "C\N{U+00e8}it",
      "\N{U+00d2}gmh",
      "Iuch",
      "L\N{U+00f9}na",
      "Sult",
      "D\N{U+00e0}mh",
      "Samh",
      "D\N{U+00f9}bh"
    ],
    month_format_narrow => [
      "F",
      "G",
      "M",
      "G",
      "C",
      "\N{U+00d2}",
      "I",
      "L",
      "S",
      "D",
      "S",
      "D"
    ],
    month_format_wide => [
      "dhen Fhaoilleach",
      "dhen Ghearran",
      "dhen Mh\N{U+00e0}rt",
      "dhen Ghiblean",
      "dhen Ch\N{U+00e8}itean",
      "dhen \N{U+00d2}gmhios",
      "dhen Iuchar",
      "dhen L\N{U+00f9}nastal",
      "dhen t-Sultain",
      "dhen D\N{U+00e0}mhair",
      "dhen t-Samhain",
      "dhen D\N{U+00f9}bhlachd"
    ],
    month_stand_alone_abbreviated => [
      "Faoi",
      "Gearr",
      "M\N{U+00e0}rt",
      "Gibl",
      "C\N{U+00e8}it",
      "\N{U+00d2}gmh",
      "Iuch",
      "L\N{U+00f9}na",
      "Sult",
      "D\N{U+00e0}mh",
      "Samh",
      "D\N{U+00f9}bh"
    ],
    month_stand_alone_narrow => [
      "F",
      "G",
      "M",
      "G",
      "C",
      "\N{U+00d2}",
      "I",
      "L",
      "S",
      "D",
      "S",
      "D"
    ],
    month_stand_alone_wide => [
      "Am Faoilleach",
      "An Gearran",
      "Am M\N{U+00e0}rt",
      "An Giblean",
      "An C\N{U+00e8}itean",
      "An t-\N{U+00d2}gmhios",
      "An t-Iuchar",
      "An L\N{U+00f9}nastal",
      "An t-Sultain",
      "An D\N{U+00e0}mhair",
      "An t-Samhain",
      "An D\N{U+00f9}bhlachd"
    ],
    name => "Scottish Gaelic",
    native_language => "G\N{U+00e0}idhlig",
    native_name => "G\N{U+00e0}idhlig",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "C1",
      "C2",
      "C3",
      "C4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1d chairteal",
      "2na cairteal",
      "3s cairteal",
      "4mh cairteal"
    ],
    quarter_stand_alone_abbreviated => [
      "C1",
      "C2",
      "C3",
      "C4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1d chairteal",
      "2na cairteal",
      "3s cairteal",
      "4mh cairteal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ gd-GB ]__
  {
    am_pm_abbreviated => [
      "m",
      "f"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, d",
      Ehm => "E h:mma",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d'mh' MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "ha",
      hm => "h:mma",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mma v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "LLLL y",
      yMMMd => "d MMM y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "gd-GB",
    date_format_full => "EEEE, d'mh' MMMM y",
    date_format_long => "d'mh' MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "DiL",
      "DiM",
      "DiC",
      "Dia",
      "Dih",
      "DiS",
      "DiD"
    ],
    day_format_narrow => [
      "L",
      "M",
      "C",
      "A",
      "H",
      "S",
      "D"
    ],
    day_format_wide => [
      "DiLuain",
      "DiM\N{U+00e0}irt",
      "DiCiadain",
      "DiarDaoin",
      "DihAoine",
      "DiSathairne",
      "DiD\N{U+00f2}mhnaich"
    ],
    day_stand_alone_abbreviated => [
      "DiL",
      "DiM",
      "DiC",
      "Dia",
      "Dih",
      "DiS",
      "DiD"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "C",
      "A",
      "H",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "DiLuain",
      "DiM\N{U+00e0}irt",
      "DiCiadain",
      "DiarDaoin",
      "DihAoine",
      "DiSathairne",
      "DiD\N{U+00f2}mhnaich"
    ],
    era_abbreviated => [
      "RC",
      "AD"
    ],
    era_narrow => [
      "R",
      "A"
    ],
    era_wide => [
      "Ro Chr\N{U+00ec}osta",
      "An d\N{U+00e8}idh Chr\N{U+00ec}osta"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%r",
    language => "Scottish Gaelic",
    month_format_abbreviated => [
      "Faoi",
      "Gearr",
      "M\N{U+00e0}rt",
      "Gibl",
      "C\N{U+00e8}it",
      "\N{U+00d2}gmh",
      "Iuch",
      "L\N{U+00f9}na",
      "Sult",
      "D\N{U+00e0}mh",
      "Samh",
      "D\N{U+00f9}bh"
    ],
    month_format_narrow => [
      "F",
      "G",
      "M",
      "G",
      "C",
      "\N{U+00d2}",
      "I",
      "L",
      "S",
      "D",
      "S",
      "D"
    ],
    month_format_wide => [
      "dhen Fhaoilleach",
      "dhen Ghearran",
      "dhen Mh\N{U+00e0}rt",
      "dhen Ghiblean",
      "dhen Ch\N{U+00e8}itean",
      "dhen \N{U+00d2}gmhios",
      "dhen Iuchar",
      "dhen L\N{U+00f9}nastal",
      "dhen t-Sultain",
      "dhen D\N{U+00e0}mhair",
      "dhen t-Samhain",
      "dhen D\N{U+00f9}bhlachd"
    ],
    month_stand_alone_abbreviated => [
      "Faoi",
      "Gearr",
      "M\N{U+00e0}rt",
      "Gibl",
      "C\N{U+00e8}it",
      "\N{U+00d2}gmh",
      "Iuch",
      "L\N{U+00f9}na",
      "Sult",
      "D\N{U+00e0}mh",
      "Samh",
      "D\N{U+00f9}bh"
    ],
    month_stand_alone_narrow => [
      "F",
      "G",
      "M",
      "G",
      "C",
      "\N{U+00d2}",
      "I",
      "L",
      "S",
      "D",
      "S",
      "D"
    ],
    month_stand_alone_wide => [
      "Am Faoilleach",
      "An Gearran",
      "Am M\N{U+00e0}rt",
      "An Giblean",
      "An C\N{U+00e8}itean",
      "An t-\N{U+00d2}gmhios",
      "An t-Iuchar",
      "An L\N{U+00f9}nastal",
      "An t-Sultain",
      "An D\N{U+00e0}mhair",
      "An t-Samhain",
      "An D\N{U+00f9}bhlachd"
    ],
    name => "Scottish Gaelic United Kingdom",
    native_language => "G\N{U+00e0}idhlig",
    native_name => "G\N{U+00e0}idhlig An R\N{U+00ec}oghachd Aonaichte",
    native_script => undef,
    native_territory => "An R\N{U+00ec}oghachd Aonaichte",
    native_variant => undef,
    quarter_format_abbreviated => [
      "C1",
      "C2",
      "C3",
      "C4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1d chairteal",
      "2na cairteal",
      "3s cairteal",
      "4mh cairteal"
    ],
    quarter_stand_alone_abbreviated => [
      "C1",
      "C2",
      "C3",
      "C4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1d chairteal",
      "2na cairteal",
      "3s cairteal",
      "4mh cairteal"
    ],
    script => undef,
    territory => "United Kingdom",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ gl ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E, d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "gl",
    date_format_full => "EEEE dd MMMM y",
    date_format_long => "dd MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "luns",
      "mar",
      "m\N{U+00e9}r",
      "xov",
      "ven",
      "s\N{U+00e1}b",
      "dom"
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "X",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "luns",
      "martes",
      "m\N{U+00e9}rcores",
      "xoves",
      "venres",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "Lun",
      "Mar",
      "M\N{U+00e9}r",
      "Xov",
      "Ven",
      "S\N{U+00e1}b",
      "Dom"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "X",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "Luns",
      "Martes",
      "M\N{U+00e9}rcores",
      "Xoves",
      "Venres",
      "S\N{U+00e1}bado",
      "Domingo"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "a.C.",
      "d.C."
    ],
    era_wide => [
      "antes de Cristo",
      "despois de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Galician",
    month_format_abbreviated => [
      "xan",
      "feb",
      "mar",
      "abr",
      "mai",
      "xu\N{U+00f1}",
      "xul",
      "ago",
      "set",
      "out",
      "nov",
      "dec"
    ],
    month_format_narrow => [
      "X",
      "F",
      "M",
      "A",
      "M",
      "X",
      "X",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "xaneiro",
      "febreiro",
      "marzo",
      "abril",
      "maio",
      "xu\N{U+00f1}o",
      "xullo",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "decembro"
    ],
    month_stand_alone_abbreviated => [
      "Xan",
      "Feb",
      "Mar",
      "Abr",
      "Mai",
      "Xu\N{U+00f1}",
      "Xul",
      "Ago",
      "Set",
      "Out",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "X",
      "F",
      "M",
      "A",
      "M",
      "X",
      "X",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Xaneiro",
      "Febreiro",
      "Marzo",
      "Abril",
      "Maio",
      "Xu\N{U+00f1}o",
      "Xullo",
      "Agosto",
      "Setembro",
      "Outubro",
      "Novembro",
      "Decembro"
    ],
    name => "Galician",
    native_language => "galego",
    native_name => "galego",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+00ba} trimestre",
      "2\N{U+00ba} trimestre",
      "3\N{U+00ba} trimestre",
      "4\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+00ba} trimestre",
      "2\N{U+00ba} trimestre",
      "3\N{U+00ba} trimestre",
      "4\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ gl-ES ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E, d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "gl-ES",
    date_format_full => "EEEE dd MMMM y",
    date_format_long => "dd MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "luns",
      "mar",
      "m\N{U+00e9}r",
      "xov",
      "ven",
      "s\N{U+00e1}b",
      "dom"
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "X",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "luns",
      "martes",
      "m\N{U+00e9}rcores",
      "xoves",
      "venres",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "Lun",
      "Mar",
      "M\N{U+00e9}r",
      "Xov",
      "Ven",
      "S\N{U+00e1}b",
      "Dom"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "X",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "Luns",
      "Martes",
      "M\N{U+00e9}rcores",
      "Xoves",
      "Venres",
      "S\N{U+00e1}bado",
      "Domingo"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "a.C.",
      "d.C."
    ],
    era_wide => [
      "antes de Cristo",
      "despois de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Galician",
    month_format_abbreviated => [
      "xan",
      "feb",
      "mar",
      "abr",
      "mai",
      "xu\N{U+00f1}",
      "xul",
      "ago",
      "set",
      "out",
      "nov",
      "dec"
    ],
    month_format_narrow => [
      "X",
      "F",
      "M",
      "A",
      "M",
      "X",
      "X",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "xaneiro",
      "febreiro",
      "marzo",
      "abril",
      "maio",
      "xu\N{U+00f1}o",
      "xullo",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "decembro"
    ],
    month_stand_alone_abbreviated => [
      "Xan",
      "Feb",
      "Mar",
      "Abr",
      "Mai",
      "Xu\N{U+00f1}",
      "Xul",
      "Ago",
      "Set",
      "Out",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "X",
      "F",
      "M",
      "A",
      "M",
      "X",
      "X",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Xaneiro",
      "Febreiro",
      "Marzo",
      "Abril",
      "Maio",
      "Xu\N{U+00f1}o",
      "Xullo",
      "Agosto",
      "Setembro",
      "Outubro",
      "Novembro",
      "Decembro"
    ],
    name => "Galician Spain",
    native_language => "galego",
    native_name => "galego Espa\N{U+00f1}a",
    native_script => undef,
    native_territory => "Espa\N{U+00f1}a",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+00ba} trimestre",
      "2\N{U+00ba} trimestre",
      "3\N{U+00ba} trimestre",
      "4\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+00ba} trimestre",
      "2\N{U+00ba} trimestre",
      "3\N{U+00ba} trimestre",
      "4\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Spain",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ gsw ]__
  {
    am_pm_abbreviated => [
      "v.m.",
      "n.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "H",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMd => "d.MM.",
      MMdd => "dd.MM.",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "y-M",
      yMEd => "E, y-M-d",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMMdd => "dd.MM.y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "gsw",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "dd.MM.y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "M\N{U+00e4}.",
      "Zi.",
      "Mi.",
      "Du.",
      "Fr.",
      "Sa.",
      "Su."
    ],
    day_format_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "M\N{U+00e4}\N{U+00e4}ntig",
      "Ziischtig",
      "Mittwuch",
      "Dunschtig",
      "Friitig",
      "Samschtig",
      "Sunntig"
    ],
    day_stand_alone_abbreviated => [
      "M\N{U+00e4}.",
      "Zi.",
      "Mi.",
      "Du.",
      "Fr.",
      "Sa.",
      "Su."
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "M\N{U+00e4}\N{U+00e4}ntig",
      "Ziischtig",
      "Mittwuch",
      "Dunschtig",
      "Friitig",
      "Samschtig",
      "Sunntig"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr."
    ],
    era_narrow => [
      "v. Chr.",
      "n. Chr."
    ],
    era_wide => [
      "v. Chr.",
      "n. Chr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Swiss German",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "M\N{U+00e4}r",
      "Apr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "Auguscht",
      "Sept\N{U+00e4}mber",
      "Oktoober",
      "Nov\N{U+00e4}mber",
      "Dez\N{U+00e4}mber"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "M\N{U+00e4}r",
      "Apr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "Auguscht",
      "Sept\N{U+00e4}mber",
      "Oktoober",
      "Nov\N{U+00e4}mber",
      "Dez\N{U+00e4}mber"
    ],
    name => "Swiss German",
    native_language => "Schwiizert\N{U+00fc}\N{U+00fc}tsch",
    native_name => "Schwiizert\N{U+00fc}\N{U+00fc}tsch",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ gsw-CH ]__
  {
    am_pm_abbreviated => [
      "v.m.",
      "n.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "H",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMd => "d.MM.",
      MMdd => "dd.MM.",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "y-M",
      yMEd => "E, y-M-d",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMMdd => "dd.MM.y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "gsw-CH",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "dd.MM.y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "M\N{U+00e4}.",
      "Zi.",
      "Mi.",
      "Du.",
      "Fr.",
      "Sa.",
      "Su."
    ],
    day_format_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "M\N{U+00e4}\N{U+00e4}ntig",
      "Ziischtig",
      "Mittwuch",
      "Dunschtig",
      "Friitig",
      "Samschtig",
      "Sunntig"
    ],
    day_stand_alone_abbreviated => [
      "M\N{U+00e4}.",
      "Zi.",
      "Mi.",
      "Du.",
      "Fr.",
      "Sa.",
      "Su."
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "M\N{U+00e4}\N{U+00e4}ntig",
      "Ziischtig",
      "Mittwuch",
      "Dunschtig",
      "Friitig",
      "Samschtig",
      "Sunntig"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr."
    ],
    era_narrow => [
      "v. Chr.",
      "n. Chr."
    ],
    era_wide => [
      "v. Chr.",
      "n. Chr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Swiss German",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "M\N{U+00e4}r",
      "Apr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "Auguscht",
      "Sept\N{U+00e4}mber",
      "Oktoober",
      "Nov\N{U+00e4}mber",
      "Dez\N{U+00e4}mber"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "M\N{U+00e4}r",
      "Apr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "Auguscht",
      "Sept\N{U+00e4}mber",
      "Oktoober",
      "Nov\N{U+00e4}mber",
      "Dez\N{U+00e4}mber"
    ],
    name => "Swiss German Switzerland",
    native_language => "Schwiizert\N{U+00fc}\N{U+00fc}tsch",
    native_name => "Schwiizert\N{U+00fc}\N{U+00fc}tsch Schwiiz",
    native_script => undef,
    native_territory => "Schwiiz",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    script => undef,
    territory => "Switzerland",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ gsw-FR ]__
  {
    am_pm_abbreviated => [
      "v.m.",
      "n.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "H",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMd => "d.MM.",
      MMdd => "dd.MM.",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "y-M",
      yMEd => "E, y-M-d",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMMdd => "dd.MM.y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "gsw-FR",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "dd.MM.y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "M\N{U+00e4}.",
      "Zi.",
      "Mi.",
      "Du.",
      "Fr.",
      "Sa.",
      "Su."
    ],
    day_format_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "M\N{U+00e4}\N{U+00e4}ntig",
      "Ziischtig",
      "Mittwuch",
      "Dunschtig",
      "Friitig",
      "Samschtig",
      "Sunntig"
    ],
    day_stand_alone_abbreviated => [
      "M\N{U+00e4}.",
      "Zi.",
      "Mi.",
      "Du.",
      "Fr.",
      "Sa.",
      "Su."
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "M\N{U+00e4}\N{U+00e4}ntig",
      "Ziischtig",
      "Mittwuch",
      "Dunschtig",
      "Friitig",
      "Samschtig",
      "Sunntig"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr."
    ],
    era_narrow => [
      "v. Chr.",
      "n. Chr."
    ],
    era_wide => [
      "v. Chr.",
      "n. Chr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Swiss German",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "M\N{U+00e4}r",
      "Apr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "Auguscht",
      "Sept\N{U+00e4}mber",
      "Oktoober",
      "Nov\N{U+00e4}mber",
      "Dez\N{U+00e4}mber"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "M\N{U+00e4}r",
      "Apr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "Auguscht",
      "Sept\N{U+00e4}mber",
      "Oktoober",
      "Nov\N{U+00e4}mber",
      "Dez\N{U+00e4}mber"
    ],
    name => "Swiss German France",
    native_language => "Schwiizert\N{U+00fc}\N{U+00fc}tsch",
    native_name => "Schwiizert\N{U+00fc}\N{U+00fc}tsch Frankriich",
    native_script => undef,
    native_territory => "Frankriich",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    script => undef,
    territory => "France",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ gsw-LI ]__
  {
    am_pm_abbreviated => [
      "v.m.",
      "n.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "H",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMd => "d.MM.",
      MMdd => "dd.MM.",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "y-M",
      yMEd => "E, y-M-d",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMMdd => "dd.MM.y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "gsw-LI",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "dd.MM.y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "M\N{U+00e4}.",
      "Zi.",
      "Mi.",
      "Du.",
      "Fr.",
      "Sa.",
      "Su."
    ],
    day_format_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "M\N{U+00e4}\N{U+00e4}ntig",
      "Ziischtig",
      "Mittwuch",
      "Dunschtig",
      "Friitig",
      "Samschtig",
      "Sunntig"
    ],
    day_stand_alone_abbreviated => [
      "M\N{U+00e4}.",
      "Zi.",
      "Mi.",
      "Du.",
      "Fr.",
      "Sa.",
      "Su."
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "M\N{U+00e4}\N{U+00e4}ntig",
      "Ziischtig",
      "Mittwuch",
      "Dunschtig",
      "Friitig",
      "Samschtig",
      "Sunntig"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr."
    ],
    era_narrow => [
      "v. Chr.",
      "n. Chr."
    ],
    era_wide => [
      "v. Chr.",
      "n. Chr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Swiss German",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "M\N{U+00e4}r",
      "Apr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "Auguscht",
      "Sept\N{U+00e4}mber",
      "Oktoober",
      "Nov\N{U+00e4}mber",
      "Dez\N{U+00e4}mber"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "M\N{U+00e4}r",
      "Apr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}rz",
      "April",
      "Mai",
      "Juni",
      "Juli",
      "Auguscht",
      "Sept\N{U+00e4}mber",
      "Oktoober",
      "Nov\N{U+00e4}mber",
      "Dez\N{U+00e4}mber"
    ],
    name => "Swiss German Liechtenstein",
    native_language => "Schwiizert\N{U+00fc}\N{U+00fc}tsch",
    native_name => "Schwiizert\N{U+00fc}\N{U+00fc}tsch Li\N{U+00e4}chtescht\N{U+00e4}i",
    native_script => undef,
    native_territory => "Li\N{U+00e4}chtescht\N{U+00e4}i",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    script => undef,
    territory => "Liechtenstein",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ gu ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "MMM, G y",
      GyMMMEd => "E, d MMM, G y",
      GyMMMd => "d MMM, G y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd-MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM, y",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "gu",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0ab8}\N{U+0acb}\N{U+0aae}",
      "\N{U+0aae}\N{U+0a82}\N{U+0a97}\N{U+0ab3}",
      "\N{U+0aac}\N{U+0ac1}\N{U+0aa7}",
      "\N{U+0a97}\N{U+0ac1}\N{U+0ab0}\N{U+0ac1}",
      "\N{U+0ab6}\N{U+0ac1}\N{U+0a95}\N{U+0acd}\N{U+0ab0}",
      "\N{U+0ab6}\N{U+0aa8}\N{U+0abf}",
      "\N{U+0ab0}\N{U+0ab5}\N{U+0abf}"
    ],
    day_format_narrow => [
      "\N{U+0ab8}\N{U+0acb}",
      "\N{U+0aae}\N{U+0a82}",
      "\N{U+0aac}\N{U+0ac1}",
      "\N{U+0a97}\N{U+0ac1}",
      "\N{U+0ab6}\N{U+0ac1}",
      "\N{U+0ab6}",
      "\N{U+0ab0}"
    ],
    day_format_wide => [
      "\N{U+0ab8}\N{U+0acb}\N{U+0aae}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0aae}\N{U+0a82}\N{U+0a97}\N{U+0ab3}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0aac}\N{U+0ac1}\N{U+0aa7}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0a97}\N{U+0ac1}\N{U+0ab0}\N{U+0ac1}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0ab6}\N{U+0ac1}\N{U+0a95}\N{U+0acd}\N{U+0ab0}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0ab6}\N{U+0aa8}\N{U+0abf}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0ab0}\N{U+0ab5}\N{U+0abf}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0ab8}\N{U+0acb}\N{U+0aae}",
      "\N{U+0aae}\N{U+0a82}\N{U+0a97}\N{U+0ab3}",
      "\N{U+0aac}\N{U+0ac1}\N{U+0aa7}",
      "\N{U+0a97}\N{U+0ac1}\N{U+0ab0}\N{U+0ac1}",
      "\N{U+0ab6}\N{U+0ac1}\N{U+0a95}\N{U+0acd}\N{U+0ab0}",
      "\N{U+0ab6}\N{U+0aa8}\N{U+0abf}",
      "\N{U+0ab0}\N{U+0ab5}\N{U+0abf}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0ab8}\N{U+0acb}",
      "\N{U+0aae}\N{U+0a82}",
      "\N{U+0aac}\N{U+0ac1}",
      "\N{U+0a97}\N{U+0ac1}",
      "\N{U+0ab6}\N{U+0ac1}",
      "\N{U+0ab6}",
      "\N{U+0ab0}"
    ],
    day_stand_alone_wide => [
      "\N{U+0ab8}\N{U+0acb}\N{U+0aae}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0aae}\N{U+0a82}\N{U+0a97}\N{U+0ab3}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0aac}\N{U+0ac1}\N{U+0aa7}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0a97}\N{U+0ac1}\N{U+0ab0}\N{U+0ac1}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0ab6}\N{U+0ac1}\N{U+0a95}\N{U+0acd}\N{U+0ab0}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0ab6}\N{U+0aa8}\N{U+0abf}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0ab0}\N{U+0ab5}\N{U+0abf}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}"
    ],
    era_abbreviated => [
      "\N{U+0a88}.\N{U+0ab8}.\N{U+0aaa}\N{U+0ac2}\N{U+0ab0}\N{U+0acd}\N{U+0ab5}\N{U+0ac7}",
      "\N{U+0a88}.\N{U+0ab8}."
    ],
    era_narrow => [
      "\N{U+0a87} \N{U+0ab8} \N{U+0aaa}\N{U+0ac1}",
      "\N{U+0a87}\N{U+0ab8}"
    ],
    era_wide => [
      "\N{U+0a88}\N{U+0ab8}\N{U+0ab5}\N{U+0ac0}\N{U+0ab8}\N{U+0aa8} \N{U+0aaa}\N{U+0ac2}\N{U+0ab0}\N{U+0acd}\N{U+0ab5}\N{U+0ac7}",
      "\N{U+0a87}\N{U+0ab8}\N{U+0ab5}\N{U+0ac0}\N{U+0ab8}\N{U+0aa8}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Gujarati",
    month_format_abbreviated => [
      "\N{U+0a9c}\N{U+0abe}\N{U+0aa8}\N{U+0acd}\N{U+0aaf}\N{U+0ac1}",
      "\N{U+0aab}\N{U+0ac7}\N{U+0aac}\N{U+0acd}\N{U+0ab0}\N{U+0ac1}",
      "\N{U+0aae}\N{U+0abe}\N{U+0ab0}\N{U+0acd}\N{U+0a9a}",
      "\N{U+0a8f}\N{U+0aaa}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0ab2}",
      "\N{U+0aae}\N{U+0ac7}",
      "\N{U+0a9c}\N{U+0ac2}\N{U+0aa8}",
      "\N{U+0a9c}\N{U+0ac1}\N{U+0ab2}\N{U+0abe}\N{U+0a88}",
      "\N{U+0a91}\N{U+0a97}\N{U+0ab8}\N{U+0acd}\N{U+0a9f}",
      "\N{U+0ab8}\N{U+0aaa}\N{U+0acd}\N{U+0a9f}\N{U+0ac7}",
      "\N{U+0a91}\N{U+0a95}\N{U+0acd}\N{U+0a9f}\N{U+0acb}",
      "\N{U+0aa8}\N{U+0ab5}\N{U+0ac7}",
      "\N{U+0aa1}\N{U+0abf}\N{U+0ab8}\N{U+0ac7}"
    ],
    month_format_narrow => [
      "\N{U+0a9c}\N{U+0abe}",
      "\N{U+0aab}\N{U+0ac7}",
      "\N{U+0aae}\N{U+0abe}",
      "\N{U+0a8f}",
      "\N{U+0aae}\N{U+0ac7}",
      "\N{U+0a9c}\N{U+0ac2}",
      "\N{U+0a9c}\N{U+0ac1}",
      "\N{U+0a91}",
      "\N{U+0ab8}",
      "\N{U+0a91}",
      "\N{U+0aa8}",
      "\N{U+0aa1}\N{U+0abf}"
    ],
    month_format_wide => [
      "\N{U+0a9c}\N{U+0abe}\N{U+0aa8}\N{U+0acd}\N{U+0aaf}\N{U+0ac1}\N{U+0a86}\N{U+0ab0}\N{U+0ac0}",
      "\N{U+0aab}\N{U+0ac7}\N{U+0aac}\N{U+0acd}\N{U+0ab0}\N{U+0ac1}\N{U+0a86}\N{U+0ab0}\N{U+0ac0}",
      "\N{U+0aae}\N{U+0abe}\N{U+0ab0}\N{U+0acd}\N{U+0a9a}",
      "\N{U+0a8f}\N{U+0aaa}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0ab2}",
      "\N{U+0aae}\N{U+0ac7}",
      "\N{U+0a9c}\N{U+0ac2}\N{U+0aa8}",
      "\N{U+0a9c}\N{U+0ac1}\N{U+0ab2}\N{U+0abe}\N{U+0a88}",
      "\N{U+0a91}\N{U+0a97}\N{U+0ab8}\N{U+0acd}\N{U+0a9f}",
      "\N{U+0ab8}\N{U+0aaa}\N{U+0acd}\N{U+0a9f}\N{U+0ac7}\N{U+0aae}\N{U+0acd}\N{U+0aac}\N{U+0ab0}",
      "\N{U+0a91}\N{U+0a95}\N{U+0acd}\N{U+0a9f}\N{U+0acb}\N{U+0aac}\N{U+0ab0}",
      "\N{U+0aa8}\N{U+0ab5}\N{U+0ac7}\N{U+0aae}\N{U+0acd}\N{U+0aac}\N{U+0ab0}",
      "\N{U+0aa1}\N{U+0abf}\N{U+0ab8}\N{U+0ac7}\N{U+0aae}\N{U+0acd}\N{U+0aac}\N{U+0ab0}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0a9c}\N{U+0abe}\N{U+0aa8}\N{U+0acd}\N{U+0aaf}\N{U+0ac1}",
      "\N{U+0aab}\N{U+0ac7}\N{U+0aac}\N{U+0acd}\N{U+0ab0}\N{U+0ac1}",
      "\N{U+0aae}\N{U+0abe}\N{U+0ab0}\N{U+0acd}\N{U+0a9a}",
      "\N{U+0a8f}\N{U+0aaa}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0ab2}",
      "\N{U+0aae}\N{U+0ac7}",
      "\N{U+0a9c}\N{U+0ac2}\N{U+0aa8}",
      "\N{U+0a9c}\N{U+0ac1}\N{U+0ab2}\N{U+0abe}\N{U+0a88}",
      "\N{U+0a91}\N{U+0a97}\N{U+0ab8}\N{U+0acd}\N{U+0a9f}",
      "\N{U+0ab8}\N{U+0aaa}\N{U+0acd}\N{U+0a9f}\N{U+0ac7}",
      "\N{U+0a91}\N{U+0a95}\N{U+0acd}\N{U+0a9f}\N{U+0acb}",
      "\N{U+0aa8}\N{U+0ab5}\N{U+0ac7}",
      "\N{U+0aa1}\N{U+0abf}\N{U+0ab8}\N{U+0ac7}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0a9c}\N{U+0abe}",
      "\N{U+0aab}\N{U+0ac7}",
      "\N{U+0aae}\N{U+0abe}",
      "\N{U+0a8f}",
      "\N{U+0aae}\N{U+0ac7}",
      "\N{U+0a9c}\N{U+0ac2}",
      "\N{U+0a9c}\N{U+0ac1}",
      "\N{U+0a91}",
      "\N{U+0ab8}",
      "\N{U+0a91}",
      "\N{U+0aa8}",
      "\N{U+0aa1}\N{U+0abf}"
    ],
    month_stand_alone_wide => [
      "\N{U+0a9c}\N{U+0abe}\N{U+0aa8}\N{U+0acd}\N{U+0aaf}\N{U+0ac1}\N{U+0a86}\N{U+0ab0}\N{U+0ac0}",
      "\N{U+0aab}\N{U+0ac7}\N{U+0aac}\N{U+0acd}\N{U+0ab0}\N{U+0ac1}\N{U+0a86}\N{U+0ab0}\N{U+0ac0}",
      "\N{U+0aae}\N{U+0abe}\N{U+0ab0}\N{U+0acd}\N{U+0a9a}",
      "\N{U+0a8f}\N{U+0aaa}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0ab2}",
      "\N{U+0aae}\N{U+0ac7}",
      "\N{U+0a9c}\N{U+0ac2}\N{U+0aa8}",
      "\N{U+0a9c}\N{U+0ac1}\N{U+0ab2}\N{U+0abe}\N{U+0a88}",
      "\N{U+0a91}\N{U+0a97}\N{U+0ab8}\N{U+0acd}\N{U+0a9f}",
      "\N{U+0ab8}\N{U+0aaa}\N{U+0acd}\N{U+0a9f}\N{U+0ac7}\N{U+0aae}\N{U+0acd}\N{U+0aac}\N{U+0ab0}",
      "\N{U+0a91}\N{U+0a95}\N{U+0acd}\N{U+0a9f}\N{U+0acb}\N{U+0aac}\N{U+0ab0}",
      "\N{U+0aa8}\N{U+0ab5}\N{U+0ac7}\N{U+0aae}\N{U+0acd}\N{U+0aac}\N{U+0ab0}",
      "\N{U+0aa1}\N{U+0abf}\N{U+0ab8}\N{U+0ac7}\N{U+0aae}\N{U+0acd}\N{U+0aac}\N{U+0ab0}"
    ],
    name => "Gujarati",
    native_language => "\N{U+0a97}\N{U+0ac1}\N{U+0a9c}\N{U+0ab0}\N{U+0abe}\N{U+0aa4}\N{U+0ac0}",
    native_name => "\N{U+0a97}\N{U+0ac1}\N{U+0a9c}\N{U+0ab0}\N{U+0abe}\N{U+0aa4}\N{U+0ac0}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0aaa}\N{U+0ab9}\N{U+0ac7}\N{U+0ab2}\N{U+0acb} \N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0aae}\N{U+0abe}\N{U+0ab8}",
      "\N{U+0aac}\N{U+0ac0}\N{U+0a9c}\N{U+0acb} \N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0aae}\N{U+0abe}\N{U+0ab8}",
      "\N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0ac0}\N{U+0a9c}\N{U+0acb} \N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0aae}\N{U+0abe}\N{U+0ab8}",
      "\N{U+0a9a}\N{U+0acb}\N{U+0aa5}\N{U+0acb} \N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0aae}\N{U+0abe}\N{U+0ab8}"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0aaa}\N{U+0ab9}\N{U+0ac7}\N{U+0ab2}\N{U+0acb} \N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0aae}\N{U+0abe}\N{U+0ab8}",
      "\N{U+0aac}\N{U+0ac0}\N{U+0a9c}\N{U+0acb} \N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0aae}\N{U+0abe}\N{U+0ab8}",
      "\N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0ac0}\N{U+0a9c}\N{U+0acb} \N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0aae}\N{U+0abe}\N{U+0ab8}",
      "\N{U+0a9a}\N{U+0acb}\N{U+0aa5}\N{U+0acb} \N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0aae}\N{U+0abe}\N{U+0ab8}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "hh:mm:ss a zzzz",
    time_format_long => "hh:mm:ss a z",
    time_format_medium => "hh:mm:ss a",
    time_format_short => "hh:mm a",
    variant => undef,
    version => 29
  }
  __[ gu-IN ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "MMM, G y",
      GyMMMEd => "E, d MMM, G y",
      GyMMMd => "d MMM, G y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd-MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM, y",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "gu-IN",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0ab8}\N{U+0acb}\N{U+0aae}",
      "\N{U+0aae}\N{U+0a82}\N{U+0a97}\N{U+0ab3}",
      "\N{U+0aac}\N{U+0ac1}\N{U+0aa7}",
      "\N{U+0a97}\N{U+0ac1}\N{U+0ab0}\N{U+0ac1}",
      "\N{U+0ab6}\N{U+0ac1}\N{U+0a95}\N{U+0acd}\N{U+0ab0}",
      "\N{U+0ab6}\N{U+0aa8}\N{U+0abf}",
      "\N{U+0ab0}\N{U+0ab5}\N{U+0abf}"
    ],
    day_format_narrow => [
      "\N{U+0ab8}\N{U+0acb}",
      "\N{U+0aae}\N{U+0a82}",
      "\N{U+0aac}\N{U+0ac1}",
      "\N{U+0a97}\N{U+0ac1}",
      "\N{U+0ab6}\N{U+0ac1}",
      "\N{U+0ab6}",
      "\N{U+0ab0}"
    ],
    day_format_wide => [
      "\N{U+0ab8}\N{U+0acb}\N{U+0aae}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0aae}\N{U+0a82}\N{U+0a97}\N{U+0ab3}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0aac}\N{U+0ac1}\N{U+0aa7}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0a97}\N{U+0ac1}\N{U+0ab0}\N{U+0ac1}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0ab6}\N{U+0ac1}\N{U+0a95}\N{U+0acd}\N{U+0ab0}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0ab6}\N{U+0aa8}\N{U+0abf}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0ab0}\N{U+0ab5}\N{U+0abf}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0ab8}\N{U+0acb}\N{U+0aae}",
      "\N{U+0aae}\N{U+0a82}\N{U+0a97}\N{U+0ab3}",
      "\N{U+0aac}\N{U+0ac1}\N{U+0aa7}",
      "\N{U+0a97}\N{U+0ac1}\N{U+0ab0}\N{U+0ac1}",
      "\N{U+0ab6}\N{U+0ac1}\N{U+0a95}\N{U+0acd}\N{U+0ab0}",
      "\N{U+0ab6}\N{U+0aa8}\N{U+0abf}",
      "\N{U+0ab0}\N{U+0ab5}\N{U+0abf}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0ab8}\N{U+0acb}",
      "\N{U+0aae}\N{U+0a82}",
      "\N{U+0aac}\N{U+0ac1}",
      "\N{U+0a97}\N{U+0ac1}",
      "\N{U+0ab6}\N{U+0ac1}",
      "\N{U+0ab6}",
      "\N{U+0ab0}"
    ],
    day_stand_alone_wide => [
      "\N{U+0ab8}\N{U+0acb}\N{U+0aae}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0aae}\N{U+0a82}\N{U+0a97}\N{U+0ab3}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0aac}\N{U+0ac1}\N{U+0aa7}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0a97}\N{U+0ac1}\N{U+0ab0}\N{U+0ac1}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0ab6}\N{U+0ac1}\N{U+0a95}\N{U+0acd}\N{U+0ab0}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0ab6}\N{U+0aa8}\N{U+0abf}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}",
      "\N{U+0ab0}\N{U+0ab5}\N{U+0abf}\N{U+0ab5}\N{U+0abe}\N{U+0ab0}"
    ],
    era_abbreviated => [
      "\N{U+0a88}.\N{U+0ab8}.\N{U+0aaa}\N{U+0ac2}\N{U+0ab0}\N{U+0acd}\N{U+0ab5}\N{U+0ac7}",
      "\N{U+0a88}.\N{U+0ab8}."
    ],
    era_narrow => [
      "\N{U+0a87} \N{U+0ab8} \N{U+0aaa}\N{U+0ac1}",
      "\N{U+0a87}\N{U+0ab8}"
    ],
    era_wide => [
      "\N{U+0a88}\N{U+0ab8}\N{U+0ab5}\N{U+0ac0}\N{U+0ab8}\N{U+0aa8} \N{U+0aaa}\N{U+0ac2}\N{U+0ab0}\N{U+0acd}\N{U+0ab5}\N{U+0ac7}",
      "\N{U+0a87}\N{U+0ab8}\N{U+0ab5}\N{U+0ac0}\N{U+0ab8}\N{U+0aa8}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A %d %b %Y",
    glibc_datetime_format => "%A %d %b %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "Gujarati",
    month_format_abbreviated => [
      "\N{U+0a9c}\N{U+0abe}\N{U+0aa8}\N{U+0acd}\N{U+0aaf}\N{U+0ac1}",
      "\N{U+0aab}\N{U+0ac7}\N{U+0aac}\N{U+0acd}\N{U+0ab0}\N{U+0ac1}",
      "\N{U+0aae}\N{U+0abe}\N{U+0ab0}\N{U+0acd}\N{U+0a9a}",
      "\N{U+0a8f}\N{U+0aaa}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0ab2}",
      "\N{U+0aae}\N{U+0ac7}",
      "\N{U+0a9c}\N{U+0ac2}\N{U+0aa8}",
      "\N{U+0a9c}\N{U+0ac1}\N{U+0ab2}\N{U+0abe}\N{U+0a88}",
      "\N{U+0a91}\N{U+0a97}\N{U+0ab8}\N{U+0acd}\N{U+0a9f}",
      "\N{U+0ab8}\N{U+0aaa}\N{U+0acd}\N{U+0a9f}\N{U+0ac7}",
      "\N{U+0a91}\N{U+0a95}\N{U+0acd}\N{U+0a9f}\N{U+0acb}",
      "\N{U+0aa8}\N{U+0ab5}\N{U+0ac7}",
      "\N{U+0aa1}\N{U+0abf}\N{U+0ab8}\N{U+0ac7}"
    ],
    month_format_narrow => [
      "\N{U+0a9c}\N{U+0abe}",
      "\N{U+0aab}\N{U+0ac7}",
      "\N{U+0aae}\N{U+0abe}",
      "\N{U+0a8f}",
      "\N{U+0aae}\N{U+0ac7}",
      "\N{U+0a9c}\N{U+0ac2}",
      "\N{U+0a9c}\N{U+0ac1}",
      "\N{U+0a91}",
      "\N{U+0ab8}",
      "\N{U+0a91}",
      "\N{U+0aa8}",
      "\N{U+0aa1}\N{U+0abf}"
    ],
    month_format_wide => [
      "\N{U+0a9c}\N{U+0abe}\N{U+0aa8}\N{U+0acd}\N{U+0aaf}\N{U+0ac1}\N{U+0a86}\N{U+0ab0}\N{U+0ac0}",
      "\N{U+0aab}\N{U+0ac7}\N{U+0aac}\N{U+0acd}\N{U+0ab0}\N{U+0ac1}\N{U+0a86}\N{U+0ab0}\N{U+0ac0}",
      "\N{U+0aae}\N{U+0abe}\N{U+0ab0}\N{U+0acd}\N{U+0a9a}",
      "\N{U+0a8f}\N{U+0aaa}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0ab2}",
      "\N{U+0aae}\N{U+0ac7}",
      "\N{U+0a9c}\N{U+0ac2}\N{U+0aa8}",
      "\N{U+0a9c}\N{U+0ac1}\N{U+0ab2}\N{U+0abe}\N{U+0a88}",
      "\N{U+0a91}\N{U+0a97}\N{U+0ab8}\N{U+0acd}\N{U+0a9f}",
      "\N{U+0ab8}\N{U+0aaa}\N{U+0acd}\N{U+0a9f}\N{U+0ac7}\N{U+0aae}\N{U+0acd}\N{U+0aac}\N{U+0ab0}",
      "\N{U+0a91}\N{U+0a95}\N{U+0acd}\N{U+0a9f}\N{U+0acb}\N{U+0aac}\N{U+0ab0}",
      "\N{U+0aa8}\N{U+0ab5}\N{U+0ac7}\N{U+0aae}\N{U+0acd}\N{U+0aac}\N{U+0ab0}",
      "\N{U+0aa1}\N{U+0abf}\N{U+0ab8}\N{U+0ac7}\N{U+0aae}\N{U+0acd}\N{U+0aac}\N{U+0ab0}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0a9c}\N{U+0abe}\N{U+0aa8}\N{U+0acd}\N{U+0aaf}\N{U+0ac1}",
      "\N{U+0aab}\N{U+0ac7}\N{U+0aac}\N{U+0acd}\N{U+0ab0}\N{U+0ac1}",
      "\N{U+0aae}\N{U+0abe}\N{U+0ab0}\N{U+0acd}\N{U+0a9a}",
      "\N{U+0a8f}\N{U+0aaa}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0ab2}",
      "\N{U+0aae}\N{U+0ac7}",
      "\N{U+0a9c}\N{U+0ac2}\N{U+0aa8}",
      "\N{U+0a9c}\N{U+0ac1}\N{U+0ab2}\N{U+0abe}\N{U+0a88}",
      "\N{U+0a91}\N{U+0a97}\N{U+0ab8}\N{U+0acd}\N{U+0a9f}",
      "\N{U+0ab8}\N{U+0aaa}\N{U+0acd}\N{U+0a9f}\N{U+0ac7}",
      "\N{U+0a91}\N{U+0a95}\N{U+0acd}\N{U+0a9f}\N{U+0acb}",
      "\N{U+0aa8}\N{U+0ab5}\N{U+0ac7}",
      "\N{U+0aa1}\N{U+0abf}\N{U+0ab8}\N{U+0ac7}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0a9c}\N{U+0abe}",
      "\N{U+0aab}\N{U+0ac7}",
      "\N{U+0aae}\N{U+0abe}",
      "\N{U+0a8f}",
      "\N{U+0aae}\N{U+0ac7}",
      "\N{U+0a9c}\N{U+0ac2}",
      "\N{U+0a9c}\N{U+0ac1}",
      "\N{U+0a91}",
      "\N{U+0ab8}",
      "\N{U+0a91}",
      "\N{U+0aa8}",
      "\N{U+0aa1}\N{U+0abf}"
    ],
    month_stand_alone_wide => [
      "\N{U+0a9c}\N{U+0abe}\N{U+0aa8}\N{U+0acd}\N{U+0aaf}\N{U+0ac1}\N{U+0a86}\N{U+0ab0}\N{U+0ac0}",
      "\N{U+0aab}\N{U+0ac7}\N{U+0aac}\N{U+0acd}\N{U+0ab0}\N{U+0ac1}\N{U+0a86}\N{U+0ab0}\N{U+0ac0}",
      "\N{U+0aae}\N{U+0abe}\N{U+0ab0}\N{U+0acd}\N{U+0a9a}",
      "\N{U+0a8f}\N{U+0aaa}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0ab2}",
      "\N{U+0aae}\N{U+0ac7}",
      "\N{U+0a9c}\N{U+0ac2}\N{U+0aa8}",
      "\N{U+0a9c}\N{U+0ac1}\N{U+0ab2}\N{U+0abe}\N{U+0a88}",
      "\N{U+0a91}\N{U+0a97}\N{U+0ab8}\N{U+0acd}\N{U+0a9f}",
      "\N{U+0ab8}\N{U+0aaa}\N{U+0acd}\N{U+0a9f}\N{U+0ac7}\N{U+0aae}\N{U+0acd}\N{U+0aac}\N{U+0ab0}",
      "\N{U+0a91}\N{U+0a95}\N{U+0acd}\N{U+0a9f}\N{U+0acb}\N{U+0aac}\N{U+0ab0}",
      "\N{U+0aa8}\N{U+0ab5}\N{U+0ac7}\N{U+0aae}\N{U+0acd}\N{U+0aac}\N{U+0ab0}",
      "\N{U+0aa1}\N{U+0abf}\N{U+0ab8}\N{U+0ac7}\N{U+0aae}\N{U+0acd}\N{U+0aac}\N{U+0ab0}"
    ],
    name => "Gujarati India",
    native_language => "\N{U+0a97}\N{U+0ac1}\N{U+0a9c}\N{U+0ab0}\N{U+0abe}\N{U+0aa4}\N{U+0ac0}",
    native_name => "\N{U+0a97}\N{U+0ac1}\N{U+0a9c}\N{U+0ab0}\N{U+0abe}\N{U+0aa4}\N{U+0ac0} \N{U+0aad}\N{U+0abe}\N{U+0ab0}\N{U+0aa4}",
    native_script => undef,
    native_territory => "\N{U+0aad}\N{U+0abe}\N{U+0ab0}\N{U+0aa4}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0aaa}\N{U+0ab9}\N{U+0ac7}\N{U+0ab2}\N{U+0acb} \N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0aae}\N{U+0abe}\N{U+0ab8}",
      "\N{U+0aac}\N{U+0ac0}\N{U+0a9c}\N{U+0acb} \N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0aae}\N{U+0abe}\N{U+0ab8}",
      "\N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0ac0}\N{U+0a9c}\N{U+0acb} \N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0aae}\N{U+0abe}\N{U+0ab8}",
      "\N{U+0a9a}\N{U+0acb}\N{U+0aa5}\N{U+0acb} \N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0aae}\N{U+0abe}\N{U+0ab8}"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0aaa}\N{U+0ab9}\N{U+0ac7}\N{U+0ab2}\N{U+0acb} \N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0aae}\N{U+0abe}\N{U+0ab8}",
      "\N{U+0aac}\N{U+0ac0}\N{U+0a9c}\N{U+0acb} \N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0aae}\N{U+0abe}\N{U+0ab8}",
      "\N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0ac0}\N{U+0a9c}\N{U+0acb} \N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0aae}\N{U+0abe}\N{U+0ab8}",
      "\N{U+0a9a}\N{U+0acb}\N{U+0aa5}\N{U+0acb} \N{U+0aa4}\N{U+0acd}\N{U+0ab0}\N{U+0abf}\N{U+0aae}\N{U+0abe}\N{U+0ab8}"
    ],
    script => undef,
    territory => "India",
    time_format_full => "hh:mm:ss a zzzz",
    time_format_long => "hh:mm:ss a z",
    time_format_medium => "hh:mm:ss a",
    time_format_short => "hh:mm a",
    variant => undef,
    version => 29
  }
  __[ guz ]__
  {
    am_pm_abbreviated => [
      "Ma",
      "Mo"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "guz",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ctt",
      "Cmn",
      "Cmt",
      "Ars",
      "Icm",
      "Est",
      "Cpr"
    ],
    day_format_narrow => [
      "C",
      "C",
      "C",
      "A",
      "I",
      "E",
      "C"
    ],
    day_format_wide => [
      "Chumatato",
      "Chumaine",
      "Chumatano",
      "Aramisi",
      "Ichuma",
      "Esabato",
      "Chumapiri"
    ],
    day_stand_alone_abbreviated => [
      "Ctt",
      "Cmn",
      "Cmt",
      "Ars",
      "Icm",
      "Est",
      "Cpr"
    ],
    day_stand_alone_narrow => [
      "C",
      "C",
      "C",
      "A",
      "I",
      "E",
      "C"
    ],
    day_stand_alone_wide => [
      "Chumatato",
      "Chumaine",
      "Chumatano",
      "Aramisi",
      "Ichuma",
      "Esabato",
      "Chumapiri"
    ],
    era_abbreviated => [
      "YA",
      "YK"
    ],
    era_narrow => [
      "YA",
      "YK"
    ],
    era_wide => [
      "Yeso ataiborwa",
      "Yeso kaiboirwe"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Gusii",
    month_format_abbreviated => [
      "Can",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Cul",
      "Agt",
      "Sep",
      "Okt",
      "Nob",
      "Dis"
    ],
    month_format_narrow => [
      "C",
      "F",
      "M",
      "A",
      "M",
      "J",
      "C",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Chanuari",
      "Feburari",
      "Machi",
      "Apiriri",
      "Mei",
      "Juni",
      "Chulai",
      "Agosti",
      "Septemba",
      "Okitoba",
      "Nobemba",
      "Disemba"
    ],
    month_stand_alone_abbreviated => [
      "Can",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Cul",
      "Agt",
      "Sep",
      "Okt",
      "Nob",
      "Dis"
    ],
    month_stand_alone_narrow => [
      "C",
      "F",
      "M",
      "A",
      "M",
      "J",
      "C",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Chanuari",
      "Feburari",
      "Machi",
      "Apiriri",
      "Mei",
      "Juni",
      "Chulai",
      "Agosti",
      "Septemba",
      "Okitoba",
      "Nobemba",
      "Disemba"
    ],
    name => "Gusii",
    native_language => "Ekegusii",
    native_name => "Ekegusii",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "E1",
      "E2",
      "E3",
      "E4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Erobo entang\N{U+2019}ani",
      "Erobo yakabere",
      "Erobo yagatato",
      "Erobo yakane"
    ],
    quarter_stand_alone_abbreviated => [
      "E1",
      "E2",
      "E3",
      "E4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Erobo entang\N{U+2019}ani",
      "Erobo yakabere",
      "Erobo yagatato",
      "Erobo yakane"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ guz-KE ]__
  {
    am_pm_abbreviated => [
      "Ma",
      "Mo"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "guz-KE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ctt",
      "Cmn",
      "Cmt",
      "Ars",
      "Icm",
      "Est",
      "Cpr"
    ],
    day_format_narrow => [
      "C",
      "C",
      "C",
      "A",
      "I",
      "E",
      "C"
    ],
    day_format_wide => [
      "Chumatato",
      "Chumaine",
      "Chumatano",
      "Aramisi",
      "Ichuma",
      "Esabato",
      "Chumapiri"
    ],
    day_stand_alone_abbreviated => [
      "Ctt",
      "Cmn",
      "Cmt",
      "Ars",
      "Icm",
      "Est",
      "Cpr"
    ],
    day_stand_alone_narrow => [
      "C",
      "C",
      "C",
      "A",
      "I",
      "E",
      "C"
    ],
    day_stand_alone_wide => [
      "Chumatato",
      "Chumaine",
      "Chumatano",
      "Aramisi",
      "Ichuma",
      "Esabato",
      "Chumapiri"
    ],
    era_abbreviated => [
      "YA",
      "YK"
    ],
    era_narrow => [
      "YA",
      "YK"
    ],
    era_wide => [
      "Yeso ataiborwa",
      "Yeso kaiboirwe"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Gusii",
    month_format_abbreviated => [
      "Can",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Cul",
      "Agt",
      "Sep",
      "Okt",
      "Nob",
      "Dis"
    ],
    month_format_narrow => [
      "C",
      "F",
      "M",
      "A",
      "M",
      "J",
      "C",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Chanuari",
      "Feburari",
      "Machi",
      "Apiriri",
      "Mei",
      "Juni",
      "Chulai",
      "Agosti",
      "Septemba",
      "Okitoba",
      "Nobemba",
      "Disemba"
    ],
    month_stand_alone_abbreviated => [
      "Can",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Cul",
      "Agt",
      "Sep",
      "Okt",
      "Nob",
      "Dis"
    ],
    month_stand_alone_narrow => [
      "C",
      "F",
      "M",
      "A",
      "M",
      "J",
      "C",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Chanuari",
      "Feburari",
      "Machi",
      "Apiriri",
      "Mei",
      "Juni",
      "Chulai",
      "Agosti",
      "Septemba",
      "Okitoba",
      "Nobemba",
      "Disemba"
    ],
    name => "Gusii Kenya",
    native_language => "Ekegusii",
    native_name => "Ekegusii Kenya",
    native_script => undef,
    native_territory => "Kenya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "E1",
      "E2",
      "E3",
      "E4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Erobo entang\N{U+2019}ani",
      "Erobo yakabere",
      "Erobo yagatato",
      "Erobo yakane"
    ],
    quarter_stand_alone_abbreviated => [
      "E1",
      "E2",
      "E3",
      "E4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Erobo entang\N{U+2019}ani",
      "Erobo yakabere",
      "Erobo yagatato",
      "Erobo yakane"
    ],
    script => undef,
    territory => "Kenya",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ gv ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "gv",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jel",
      "Jem",
      "Jerc",
      "Jerd",
      "Jeh",
      "Jes",
      "Jed"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Jelhein",
      "Jemayrt",
      "Jercean",
      "Jerdein",
      "Jeheiney",
      "Jesarn",
      "Jedoonee"
    ],
    day_stand_alone_abbreviated => [
      "Jel",
      "Jem",
      "Jerc",
      "Jerd",
      "Jeh",
      "Jes",
      "Jed"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Jelhein",
      "Jemayrt",
      "Jercean",
      "Jerdein",
      "Jeheiney",
      "Jesarn",
      "Jedoonee"
    ],
    era_abbreviated => [
      "RC",
      "AD"
    ],
    era_narrow => [
      "RC",
      "AD"
    ],
    era_wide => [
      "RC",
      "AD"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Manx",
    month_format_abbreviated => [
      "J-guer",
      "T-arree",
      "Mayrnt",
      "Avrril",
      "Boaldyn",
      "M-souree",
      "J-souree",
      "Luanistyn",
      "M-fouyir",
      "J-fouyir",
      "M-Houney",
      "M-Nollick"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Jerrey-geuree",
      "Toshiaght-arree",
      "Mayrnt",
      "Averil",
      "Boaldyn",
      "Mean-souree",
      "Jerrey-souree",
      "Luanistyn",
      "Mean-fouyir",
      "Jerrey-fouyir",
      "Mee Houney",
      "Mee ny Nollick"
    ],
    month_stand_alone_abbreviated => [
      "J-guer",
      "T-arree",
      "Mayrnt",
      "Avrril",
      "Boaldyn",
      "M-souree",
      "J-souree",
      "Luanistyn",
      "M-fouyir",
      "J-fouyir",
      "M-Houney",
      "M-Nollick"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Jerrey-geuree",
      "Toshiaght-arree",
      "Mayrnt",
      "Averil",
      "Boaldyn",
      "Mean-souree",
      "Jerrey-souree",
      "Luanistyn",
      "Mean-fouyir",
      "Jerrey-fouyir",
      "Mee Houney",
      "Mee ny Nollick"
    ],
    name => "Manx",
    native_language => "Gaelg",
    native_name => "Gaelg",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ gv-IM ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "gv-IM",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jel",
      "Jem",
      "Jerc",
      "Jerd",
      "Jeh",
      "Jes",
      "Jed"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Jelhein",
      "Jemayrt",
      "Jercean",
      "Jerdein",
      "Jeheiney",
      "Jesarn",
      "Jedoonee"
    ],
    day_stand_alone_abbreviated => [
      "Jel",
      "Jem",
      "Jerc",
      "Jerd",
      "Jeh",
      "Jes",
      "Jed"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Jelhein",
      "Jemayrt",
      "Jercean",
      "Jerdein",
      "Jeheiney",
      "Jesarn",
      "Jedoonee"
    ],
    era_abbreviated => [
      "RC",
      "AD"
    ],
    era_narrow => [
      "RC",
      "AD"
    ],
    era_wide => [
      "RC",
      "AD"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Manx",
    month_format_abbreviated => [
      "J-guer",
      "T-arree",
      "Mayrnt",
      "Avrril",
      "Boaldyn",
      "M-souree",
      "J-souree",
      "Luanistyn",
      "M-fouyir",
      "J-fouyir",
      "M-Houney",
      "M-Nollick"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Jerrey-geuree",
      "Toshiaght-arree",
      "Mayrnt",
      "Averil",
      "Boaldyn",
      "Mean-souree",
      "Jerrey-souree",
      "Luanistyn",
      "Mean-fouyir",
      "Jerrey-fouyir",
      "Mee Houney",
      "Mee ny Nollick"
    ],
    month_stand_alone_abbreviated => [
      "J-guer",
      "T-arree",
      "Mayrnt",
      "Avrril",
      "Boaldyn",
      "M-souree",
      "J-souree",
      "Luanistyn",
      "M-fouyir",
      "J-fouyir",
      "M-Houney",
      "M-Nollick"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Jerrey-geuree",
      "Toshiaght-arree",
      "Mayrnt",
      "Averil",
      "Boaldyn",
      "Mean-souree",
      "Jerrey-souree",
      "Luanistyn",
      "Mean-fouyir",
      "Jerrey-fouyir",
      "Mee Houney",
      "Mee ny Nollick"
    ],
    name => "Manx Isle of Man",
    native_language => "Gaelg",
    native_name => "Gaelg Ellan Vannin",
    native_script => undef,
    native_territory => "Ellan Vannin",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Isle of Man",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ha ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ha",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Li",
      "Ta",
      "Lr",
      "Al",
      "Ju",
      "As",
      "Lh"
    ],
    day_format_narrow => [
      "L",
      "T",
      "L",
      "A",
      "J",
      "A",
      "L"
    ],
    day_format_wide => [
      "Litinin",
      "Talata",
      "Laraba",
      "Alhamis",
      "Jumma\N{U+02bc}a",
      "Asabar",
      "Lahadi"
    ],
    day_stand_alone_abbreviated => [
      "Li",
      "Ta",
      "Lr",
      "Al",
      "Ju",
      "As",
      "Lh"
    ],
    day_stand_alone_narrow => [
      "L",
      "T",
      "L",
      "A",
      "J",
      "A",
      "L"
    ],
    day_stand_alone_wide => [
      "Litinin",
      "Talata",
      "Laraba",
      "Alhamis",
      "Jumma\N{U+02bc}a",
      "Asabar",
      "Lahadi"
    ],
    era_abbreviated => [
      "KHAI",
      "BHAI"
    ],
    era_narrow => [
      "KHAI",
      "BHAI"
    ],
    era_wide => [
      "Kafin haihuwar annab",
      "Bayan haihuwar annab"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Hausa",
    month_format_abbreviated => [
      "Jan",
      "Fab",
      "Mar",
      "Afi",
      "May",
      "Yun",
      "Yul",
      "Agu",
      "Sat",
      "Okt",
      "Nuw",
      "Dis"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "Y",
      "Y",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Janairu",
      "Faburairu",
      "Maris",
      "Afirilu",
      "Mayu",
      "Yuni",
      "Yuli",
      "Agusta",
      "Satumba",
      "Oktoba",
      "Nuwamba",
      "Disamba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Fab",
      "Mar",
      "Afi",
      "May",
      "Yun",
      "Yul",
      "Agu",
      "Sat",
      "Okt",
      "Nuw",
      "Dis"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "Y",
      "Y",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janairu",
      "Faburairu",
      "Maris",
      "Afirilu",
      "Mayu",
      "Yuni",
      "Yuli",
      "Agusta",
      "Satumba",
      "Oktoba",
      "Nuwamba",
      "Disamba"
    ],
    name => "Hausa",
    native_language => "Hausa",
    native_name => "Hausa",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Kwata na \N{U+0257}aya",
      "Kwata na biyu",
      "Kwata na uku",
      "Kwata na hu\N{U+0257}u"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Kwata na \N{U+0257}aya",
      "Kwata na biyu",
      "Kwata na uku",
      "Kwata na hu\N{U+0257}u"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ha-GH ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ha-GH",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Li",
      "Ta",
      "Lr",
      "Al",
      "Ju",
      "As",
      "Lh"
    ],
    day_format_narrow => [
      "L",
      "T",
      "L",
      "A",
      "J",
      "A",
      "L"
    ],
    day_format_wide => [
      "Litinin",
      "Talata",
      "Laraba",
      "Alhamis",
      "Jumma\N{U+02bc}a",
      "Asabar",
      "Lahadi"
    ],
    day_stand_alone_abbreviated => [
      "Li",
      "Ta",
      "Lr",
      "Al",
      "Ju",
      "As",
      "Lh"
    ],
    day_stand_alone_narrow => [
      "L",
      "T",
      "L",
      "A",
      "J",
      "A",
      "L"
    ],
    day_stand_alone_wide => [
      "Litinin",
      "Talata",
      "Laraba",
      "Alhamis",
      "Jumma\N{U+02bc}a",
      "Asabar",
      "Lahadi"
    ],
    era_abbreviated => [
      "KHAI",
      "BHAI"
    ],
    era_narrow => [
      "KHAI",
      "BHAI"
    ],
    era_wide => [
      "Kafin haihuwar annab",
      "Bayan haihuwar annab"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Hausa",
    month_format_abbreviated => [
      "Jan",
      "Fab",
      "Mar",
      "Afi",
      "May",
      "Yun",
      "Yul",
      "Agu",
      "Sat",
      "Okt",
      "Nuw",
      "Dis"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "Y",
      "Y",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Janairu",
      "Faburairu",
      "Maris",
      "Afirilu",
      "Mayu",
      "Yuni",
      "Yuli",
      "Agusta",
      "Satumba",
      "Oktoba",
      "Nuwamba",
      "Disamba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Fab",
      "Mar",
      "Afi",
      "May",
      "Yun",
      "Yul",
      "Agu",
      "Sat",
      "Okt",
      "Nuw",
      "Dis"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "Y",
      "Y",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janairu",
      "Faburairu",
      "Maris",
      "Afirilu",
      "Mayu",
      "Yuni",
      "Yuli",
      "Agusta",
      "Satumba",
      "Oktoba",
      "Nuwamba",
      "Disamba"
    ],
    name => "Hausa Ghana",
    native_language => "Hausa",
    native_name => "Hausa Gana",
    native_script => undef,
    native_territory => "Gana",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Kwata na \N{U+0257}aya",
      "Kwata na biyu",
      "Kwata na uku",
      "Kwata na hu\N{U+0257}u"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Kwata na \N{U+0257}aya",
      "Kwata na biyu",
      "Kwata na uku",
      "Kwata na hu\N{U+0257}u"
    ],
    script => undef,
    territory => "Ghana",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ha-NE ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ha-NE",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Li",
      "Ta",
      "Lr",
      "Al",
      "Ju",
      "As",
      "Lh"
    ],
    day_format_narrow => [
      "L",
      "T",
      "L",
      "A",
      "J",
      "A",
      "L"
    ],
    day_format_wide => [
      "Litinin",
      "Talata",
      "Laraba",
      "Alhamis",
      "Jumma\N{U+02bc}a",
      "Asabar",
      "Lahadi"
    ],
    day_stand_alone_abbreviated => [
      "Li",
      "Ta",
      "Lr",
      "Al",
      "Ju",
      "As",
      "Lh"
    ],
    day_stand_alone_narrow => [
      "L",
      "T",
      "L",
      "A",
      "J",
      "A",
      "L"
    ],
    day_stand_alone_wide => [
      "Litinin",
      "Talata",
      "Laraba",
      "Alhamis",
      "Jumma\N{U+02bc}a",
      "Asabar",
      "Lahadi"
    ],
    era_abbreviated => [
      "KHAI",
      "BHAI"
    ],
    era_narrow => [
      "KHAI",
      "BHAI"
    ],
    era_wide => [
      "Kafin haihuwar annab",
      "Bayan haihuwar annab"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Hausa",
    month_format_abbreviated => [
      "Jan",
      "Fab",
      "Mar",
      "Afi",
      "May",
      "Yun",
      "Yul",
      "Agu",
      "Sat",
      "Okt",
      "Nuw",
      "Dis"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "Y",
      "Y",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Janairu",
      "Faburairu",
      "Maris",
      "Afirilu",
      "Mayu",
      "Yuni",
      "Yuli",
      "Agusta",
      "Satumba",
      "Oktoba",
      "Nuwamba",
      "Disamba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Fab",
      "Mar",
      "Afi",
      "May",
      "Yun",
      "Yul",
      "Agu",
      "Sat",
      "Okt",
      "Nuw",
      "Dis"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "Y",
      "Y",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janairu",
      "Faburairu",
      "Maris",
      "Afirilu",
      "Mayu",
      "Yuni",
      "Yuli",
      "Agusta",
      "Satumba",
      "Oktoba",
      "Nuwamba",
      "Disamba"
    ],
    name => "Hausa Niger",
    native_language => "Hausa",
    native_name => "Hausa Nijar",
    native_script => undef,
    native_territory => "Nijar",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Kwata na \N{U+0257}aya",
      "Kwata na biyu",
      "Kwata na uku",
      "Kwata na hu\N{U+0257}u"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Kwata na \N{U+0257}aya",
      "Kwata na biyu",
      "Kwata na uku",
      "Kwata na hu\N{U+0257}u"
    ],
    script => undef,
    territory => "Niger",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ha-NG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ha-NG",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Li",
      "Ta",
      "Lr",
      "Al",
      "Ju",
      "As",
      "Lh"
    ],
    day_format_narrow => [
      "L",
      "T",
      "L",
      "A",
      "J",
      "A",
      "L"
    ],
    day_format_wide => [
      "Litinin",
      "Talata",
      "Laraba",
      "Alhamis",
      "Jumma\N{U+02bc}a",
      "Asabar",
      "Lahadi"
    ],
    day_stand_alone_abbreviated => [
      "Li",
      "Ta",
      "Lr",
      "Al",
      "Ju",
      "As",
      "Lh"
    ],
    day_stand_alone_narrow => [
      "L",
      "T",
      "L",
      "A",
      "J",
      "A",
      "L"
    ],
    day_stand_alone_wide => [
      "Litinin",
      "Talata",
      "Laraba",
      "Alhamis",
      "Jumma\N{U+02bc}a",
      "Asabar",
      "Lahadi"
    ],
    era_abbreviated => [
      "KHAI",
      "BHAI"
    ],
    era_narrow => [
      "KHAI",
      "BHAI"
    ],
    era_wide => [
      "Kafin haihuwar annab",
      "Bayan haihuwar annab"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "ranar %A, %d ga %B cikin %r %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%r",
    language => "Hausa",
    month_format_abbreviated => [
      "Jan",
      "Fab",
      "Mar",
      "Afi",
      "May",
      "Yun",
      "Yul",
      "Agu",
      "Sat",
      "Okt",
      "Nuw",
      "Dis"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "Y",
      "Y",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Janairu",
      "Faburairu",
      "Maris",
      "Afirilu",
      "Mayu",
      "Yuni",
      "Yuli",
      "Agusta",
      "Satumba",
      "Oktoba",
      "Nuwamba",
      "Disamba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Fab",
      "Mar",
      "Afi",
      "May",
      "Yun",
      "Yul",
      "Agu",
      "Sat",
      "Okt",
      "Nuw",
      "Dis"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "Y",
      "Y",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janairu",
      "Faburairu",
      "Maris",
      "Afirilu",
      "Mayu",
      "Yuni",
      "Yuli",
      "Agusta",
      "Satumba",
      "Oktoba",
      "Nuwamba",
      "Disamba"
    ],
    name => "Hausa Nigeria",
    native_language => "Hausa",
    native_name => "Hausa Najeriya",
    native_script => undef,
    native_territory => "Najeriya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Kwata na \N{U+0257}aya",
      "Kwata na biyu",
      "Kwata na uku",
      "Kwata na hu\N{U+0257}u"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Kwata na \N{U+0257}aya",
      "Kwata na biyu",
      "Kwata na uku",
      "Kwata na hu\N{U+0257}u"
    ],
    script => undef,
    territory => "Nigeria",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ haw ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "haw",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "P1",
      "P2",
      "P3",
      "P4",
      "P5",
      "P6",
      "LP"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Po\N{U+02bb}akahi",
      "Po\N{U+02bb}alua",
      "Po\N{U+02bb}akolu",
      "Po\N{U+02bb}ah\N{U+0101}",
      "Po\N{U+02bb}alima",
      "Po\N{U+02bb}aono",
      "L\N{U+0101}pule"
    ],
    day_stand_alone_abbreviated => [
      "P1",
      "P2",
      "P3",
      "P4",
      "P5",
      "P6",
      "LP"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Po\N{U+02bb}akahi",
      "Po\N{U+02bb}alua",
      "Po\N{U+02bb}akolu",
      "Po\N{U+02bb}ah\N{U+0101}",
      "Po\N{U+02bb}alima",
      "Po\N{U+02bb}aono",
      "L\N{U+0101}pule"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Hawaiian",
    month_format_abbreviated => [
      "Ian.",
      "Pep.",
      "Mal.",
      "\N{U+02bb}Ap.",
      "Mei",
      "Iun.",
      "Iul.",
      "\N{U+02bb}Au.",
      "Kep.",
      "\N{U+02bb}Ok.",
      "Now.",
      "Kek."
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Ianuali",
      "Pepeluali",
      "Malaki",
      "\N{U+02bb}Apelila",
      "Mei",
      "Iune",
      "Iulai",
      "\N{U+02bb}Aukake",
      "Kepakemapa",
      "\N{U+02bb}Okakopa",
      "Nowemapa",
      "Kekemapa"
    ],
    month_stand_alone_abbreviated => [
      "Ian.",
      "Pep.",
      "Mal.",
      "\N{U+02bb}Ap.",
      "Mei",
      "Iun.",
      "Iul.",
      "\N{U+02bb}Au.",
      "Kep.",
      "\N{U+02bb}Ok.",
      "Now.",
      "Kek."
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Ianuali",
      "Pepeluali",
      "Malaki",
      "\N{U+02bb}Apelila",
      "Mei",
      "Iune",
      "Iulai",
      "\N{U+02bb}Aukake",
      "Kepakemapa",
      "\N{U+02bb}Okakopa",
      "Nowemapa",
      "Kekemapa"
    ],
    name => "Hawaiian",
    native_language => "\N{U+02bb}\N{U+014c}lelo Hawai\N{U+02bb}i",
    native_name => "\N{U+02bb}\N{U+014c}lelo Hawai\N{U+02bb}i",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ haw-US ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "haw-US",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "P1",
      "P2",
      "P3",
      "P4",
      "P5",
      "P6",
      "LP"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Po\N{U+02bb}akahi",
      "Po\N{U+02bb}alua",
      "Po\N{U+02bb}akolu",
      "Po\N{U+02bb}ah\N{U+0101}",
      "Po\N{U+02bb}alima",
      "Po\N{U+02bb}aono",
      "L\N{U+0101}pule"
    ],
    day_stand_alone_abbreviated => [
      "P1",
      "P2",
      "P3",
      "P4",
      "P5",
      "P6",
      "LP"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Po\N{U+02bb}akahi",
      "Po\N{U+02bb}alua",
      "Po\N{U+02bb}akolu",
      "Po\N{U+02bb}ah\N{U+0101}",
      "Po\N{U+02bb}alima",
      "Po\N{U+02bb}aono",
      "L\N{U+0101}pule"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Hawaiian",
    month_format_abbreviated => [
      "Ian.",
      "Pep.",
      "Mal.",
      "\N{U+02bb}Ap.",
      "Mei",
      "Iun.",
      "Iul.",
      "\N{U+02bb}Au.",
      "Kep.",
      "\N{U+02bb}Ok.",
      "Now.",
      "Kek."
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Ianuali",
      "Pepeluali",
      "Malaki",
      "\N{U+02bb}Apelila",
      "Mei",
      "Iune",
      "Iulai",
      "\N{U+02bb}Aukake",
      "Kepakemapa",
      "\N{U+02bb}Okakopa",
      "Nowemapa",
      "Kekemapa"
    ],
    month_stand_alone_abbreviated => [
      "Ian.",
      "Pep.",
      "Mal.",
      "\N{U+02bb}Ap.",
      "Mei",
      "Iun.",
      "Iul.",
      "\N{U+02bb}Au.",
      "Kep.",
      "\N{U+02bb}Ok.",
      "Now.",
      "Kek."
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Ianuali",
      "Pepeluali",
      "Malaki",
      "\N{U+02bb}Apelila",
      "Mei",
      "Iune",
      "Iulai",
      "\N{U+02bb}Aukake",
      "Kepakemapa",
      "\N{U+02bb}Okakopa",
      "Nowemapa",
      "Kekemapa"
    ],
    name => "Hawaiian United States",
    native_language => "\N{U+02bb}\N{U+014c}lelo Hawai\N{U+02bb}i",
    native_name => "\N{U+02bb}\N{U+014c}lelo Hawai\N{U+02bb}i \N{U+02bb}Amelika Hui P\N{U+016b} \N{U+02bb}Ia",
    native_script => undef,
    native_territory => "\N{U+02bb}Amelika Hui P\N{U+016b} \N{U+02bb}Ia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "United States",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ he ]__
  {
    am_pm_abbreviated => [
      "\N{U+05dc}\N{U+05e4}\N{U+05e0}\N{U+05d4}\N{U+05f4}\N{U+05e6}",
      "\N{U+05d0}\N{U+05d7}\N{U+05d4}\N{U+05f4}\N{U+05e6}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H:mm",
      EHms => "E H:mm:ss",
      Ed => "E \N{U+05d4}-d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d \N{U+05d1}MMM y G",
      GyMMMd => "d \N{U+05d1}MMM y G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M",
      MMM => "LLL",
      MMMEd => "E, d \N{U+05d1}MMM",
      MMMMd => "d \N{U+05d1}MMMM",
      MMMd => "d \N{U+05d1}MMM",
      Md => "d.M",
      d => "d",
      h => "\N{U+200f}h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMM => "M.y",
      yMMM => "MMM y",
      yMMMEd => "E, d \N{U+05d1}MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d \N{U+05d1}MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "he",
    date_format_full => "EEEE, d \N{U+05d1}MMMM y",
    date_format_long => "d \N{U+05d1}MMMM y",
    date_format_medium => "d \N{U+05d1}MMM y",
    date_format_short => "d.M.y",
    datetime_format_full => "{1} \N{U+05d1}\N{U+05e9}\N{U+05e2}\N{U+05d4} {0}",
    datetime_format_long => "{1} \N{U+05d1}\N{U+05e9}\N{U+05e2}\N{U+05d4} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d1}\N{U+05f3}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d2}\N{U+05f3}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d3}\N{U+05f3}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d4}\N{U+05f3}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d5}\N{U+05f3}",
      "\N{U+05e9}\N{U+05d1}\N{U+05ea}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d0}\N{U+05f3}"
    ],
    day_format_narrow => [
      "\N{U+05d1}\N{U+05f3}",
      "\N{U+05d2}\N{U+05f3}",
      "\N{U+05d3}\N{U+05f3}",
      "\N{U+05d4}\N{U+05f3}",
      "\N{U+05d5}\N{U+05f3}",
      "\N{U+05e9}\N{U+05f3}",
      "\N{U+05d0}\N{U+05f3}"
    ],
    day_format_wide => [
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e9}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e9}\N{U+05dc}\N{U+05d9}\N{U+05e9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e8}\N{U+05d1}\N{U+05d9}\N{U+05e2}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d7}\N{U+05de}\N{U+05d9}\N{U+05e9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e9}\N{U+05d9}\N{U+05e9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e9}\N{U+05d1}\N{U+05ea}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e8}\N{U+05d0}\N{U+05e9}\N{U+05d5}\N{U+05df}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d1}\N{U+05f3}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d2}\N{U+05f3}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d3}\N{U+05f3}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d4}\N{U+05f3}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d5}\N{U+05f3}",
      "\N{U+05e9}\N{U+05d1}\N{U+05ea}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d0}\N{U+05f3}"
    ],
    day_stand_alone_narrow => [
      "\N{U+05d1}\N{U+05f3}",
      "\N{U+05d2}\N{U+05f3}",
      "\N{U+05d3}\N{U+05f3}",
      "\N{U+05d4}\N{U+05f3}",
      "\N{U+05d5}\N{U+05f3}",
      "\N{U+05e9}\N{U+05f3}",
      "\N{U+05d0}\N{U+05f3}"
    ],
    day_stand_alone_wide => [
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e9}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e9}\N{U+05dc}\N{U+05d9}\N{U+05e9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e8}\N{U+05d1}\N{U+05d9}\N{U+05e2}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d7}\N{U+05de}\N{U+05d9}\N{U+05e9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e9}\N{U+05d9}\N{U+05e9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e9}\N{U+05d1}\N{U+05ea}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e8}\N{U+05d0}\N{U+05e9}\N{U+05d5}\N{U+05df}"
    ],
    era_abbreviated => [
      "\N{U+05dc}\N{U+05e4}\N{U+05e0}\N{U+05d4}\N{U+05f4}\N{U+05e1}",
      "\N{U+05dc}\N{U+05e1}\N{U+05e4}\N{U+05d9}\N{U+05e8}\N{U+05d4}"
    ],
    era_narrow => [
      "\N{U+05dc}\N{U+05e4}\N{U+05e0}\N{U+05d4}\N{U+05f4}\N{U+05e1}",
      "\N{U+05dc}\N{U+05e1}\N{U+05e4}\N{U+05d9}\N{U+05e8}\N{U+05d4}"
    ],
    era_wide => [
      "\N{U+05dc}\N{U+05e4}\N{U+05e0}\N{U+05d9} \N{U+05d4}\N{U+05e1}\N{U+05e4}\N{U+05d9}\N{U+05e8}\N{U+05d4}",
      "\N{U+05dc}\N{U+05e1}\N{U+05e4}\N{U+05d9}\N{U+05e8}\N{U+05d4}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Hebrew",
    month_format_abbreviated => [
      "\N{U+05d9}\N{U+05e0}\N{U+05d5}\N{U+05f3}",
      "\N{U+05e4}\N{U+05d1}\N{U+05e8}\N{U+05f3}",
      "\N{U+05de}\N{U+05e8}\N{U+05e5}",
      "\N{U+05d0}\N{U+05e4}\N{U+05e8}\N{U+05f3}",
      "\N{U+05de}\N{U+05d0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dc}\N{U+05d9}",
      "\N{U+05d0}\N{U+05d5}\N{U+05d2}\N{U+05f3}",
      "\N{U+05e1}\N{U+05e4}\N{U+05d8}\N{U+05f3}",
      "\N{U+05d0}\N{U+05d5}\N{U+05e7}\N{U+05f3}",
      "\N{U+05e0}\N{U+05d5}\N{U+05d1}\N{U+05f3}",
      "\N{U+05d3}\N{U+05e6}\N{U+05de}\N{U+05f3}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+05d9}\N{U+05e0}\N{U+05d5}\N{U+05d0}\N{U+05e8}",
      "\N{U+05e4}\N{U+05d1}\N{U+05e8}\N{U+05d5}\N{U+05d0}\N{U+05e8}",
      "\N{U+05de}\N{U+05e8}\N{U+05e5}",
      "\N{U+05d0}\N{U+05e4}\N{U+05e8}\N{U+05d9}\N{U+05dc}",
      "\N{U+05de}\N{U+05d0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dc}\N{U+05d9}",
      "\N{U+05d0}\N{U+05d5}\N{U+05d2}\N{U+05d5}\N{U+05e1}\N{U+05d8}",
      "\N{U+05e1}\N{U+05e4}\N{U+05d8}\N{U+05de}\N{U+05d1}\N{U+05e8}",
      "\N{U+05d0}\N{U+05d5}\N{U+05e7}\N{U+05d8}\N{U+05d5}\N{U+05d1}\N{U+05e8}",
      "\N{U+05e0}\N{U+05d5}\N{U+05d1}\N{U+05de}\N{U+05d1}\N{U+05e8}",
      "\N{U+05d3}\N{U+05e6}\N{U+05de}\N{U+05d1}\N{U+05e8}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+05d9}\N{U+05e0}\N{U+05d5}\N{U+05f3}",
      "\N{U+05e4}\N{U+05d1}\N{U+05e8}\N{U+05f3}",
      "\N{U+05de}\N{U+05e8}\N{U+05e5}",
      "\N{U+05d0}\N{U+05e4}\N{U+05e8}\N{U+05f3}",
      "\N{U+05de}\N{U+05d0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dc}\N{U+05d9}",
      "\N{U+05d0}\N{U+05d5}\N{U+05d2}\N{U+05f3}",
      "\N{U+05e1}\N{U+05e4}\N{U+05d8}\N{U+05f3}",
      "\N{U+05d0}\N{U+05d5}\N{U+05e7}\N{U+05f3}",
      "\N{U+05e0}\N{U+05d5}\N{U+05d1}\N{U+05f3}",
      "\N{U+05d3}\N{U+05e6}\N{U+05de}\N{U+05f3}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+05d9}\N{U+05e0}\N{U+05d5}\N{U+05d0}\N{U+05e8}",
      "\N{U+05e4}\N{U+05d1}\N{U+05e8}\N{U+05d5}\N{U+05d0}\N{U+05e8}",
      "\N{U+05de}\N{U+05e8}\N{U+05e5}",
      "\N{U+05d0}\N{U+05e4}\N{U+05e8}\N{U+05d9}\N{U+05dc}",
      "\N{U+05de}\N{U+05d0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dc}\N{U+05d9}",
      "\N{U+05d0}\N{U+05d5}\N{U+05d2}\N{U+05d5}\N{U+05e1}\N{U+05d8}",
      "\N{U+05e1}\N{U+05e4}\N{U+05d8}\N{U+05de}\N{U+05d1}\N{U+05e8}",
      "\N{U+05d0}\N{U+05d5}\N{U+05e7}\N{U+05d8}\N{U+05d5}\N{U+05d1}\N{U+05e8}",
      "\N{U+05e0}\N{U+05d5}\N{U+05d1}\N{U+05de}\N{U+05d1}\N{U+05e8}",
      "\N{U+05d3}\N{U+05e6}\N{U+05de}\N{U+05d1}\N{U+05e8}"
    ],
    name => "Hebrew",
    native_language => "\N{U+05e2}\N{U+05d1}\N{U+05e8}\N{U+05d9}\N{U+05ea}",
    native_name => "\N{U+05e2}\N{U+05d1}\N{U+05e8}\N{U+05d9}\N{U+05ea}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 1",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 2",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 3",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 1",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 2",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 3",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 1",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 2",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 3",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 1",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 2",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 3",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ he-IL ]__
  {
    am_pm_abbreviated => [
      "\N{U+05dc}\N{U+05e4}\N{U+05e0}\N{U+05d4}\N{U+05f4}\N{U+05e6}",
      "\N{U+05d0}\N{U+05d7}\N{U+05d4}\N{U+05f4}\N{U+05e6}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E H:mm",
      EHms => "E H:mm:ss",
      Ed => "E \N{U+05d4}-d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d \N{U+05d1}MMM y G",
      GyMMMd => "d \N{U+05d1}MMM y G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M",
      MMM => "LLL",
      MMMEd => "E, d \N{U+05d1}MMM",
      MMMMd => "d \N{U+05d1}MMMM",
      MMMd => "d \N{U+05d1}MMM",
      Md => "d.M",
      d => "d",
      h => "\N{U+200f}h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMM => "M.y",
      yMMM => "MMM y",
      yMMMEd => "E, d \N{U+05d1}MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d \N{U+05d1}MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "he-IL",
    date_format_full => "EEEE, d \N{U+05d1}MMMM y",
    date_format_long => "d \N{U+05d1}MMMM y",
    date_format_medium => "d \N{U+05d1}MMM y",
    date_format_short => "d.M.y",
    datetime_format_full => "{1} \N{U+05d1}\N{U+05e9}\N{U+05e2}\N{U+05d4} {0}",
    datetime_format_long => "{1} \N{U+05d1}\N{U+05e9}\N{U+05e2}\N{U+05d4} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d1}\N{U+05f3}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d2}\N{U+05f3}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d3}\N{U+05f3}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d4}\N{U+05f3}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d5}\N{U+05f3}",
      "\N{U+05e9}\N{U+05d1}\N{U+05ea}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d0}\N{U+05f3}"
    ],
    day_format_narrow => [
      "\N{U+05d1}\N{U+05f3}",
      "\N{U+05d2}\N{U+05f3}",
      "\N{U+05d3}\N{U+05f3}",
      "\N{U+05d4}\N{U+05f3}",
      "\N{U+05d5}\N{U+05f3}",
      "\N{U+05e9}\N{U+05f3}",
      "\N{U+05d0}\N{U+05f3}"
    ],
    day_format_wide => [
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e9}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e9}\N{U+05dc}\N{U+05d9}\N{U+05e9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e8}\N{U+05d1}\N{U+05d9}\N{U+05e2}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d7}\N{U+05de}\N{U+05d9}\N{U+05e9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e9}\N{U+05d9}\N{U+05e9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e9}\N{U+05d1}\N{U+05ea}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e8}\N{U+05d0}\N{U+05e9}\N{U+05d5}\N{U+05df}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d1}\N{U+05f3}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d2}\N{U+05f3}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d3}\N{U+05f3}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d4}\N{U+05f3}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d5}\N{U+05f3}",
      "\N{U+05e9}\N{U+05d1}\N{U+05ea}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d0}\N{U+05f3}"
    ],
    day_stand_alone_narrow => [
      "\N{U+05d1}\N{U+05f3}",
      "\N{U+05d2}\N{U+05f3}",
      "\N{U+05d3}\N{U+05f3}",
      "\N{U+05d4}\N{U+05f3}",
      "\N{U+05d5}\N{U+05f3}",
      "\N{U+05e9}\N{U+05f3}",
      "\N{U+05d0}\N{U+05f3}"
    ],
    day_stand_alone_wide => [
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e9}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e9}\N{U+05dc}\N{U+05d9}\N{U+05e9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e8}\N{U+05d1}\N{U+05d9}\N{U+05e2}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05d7}\N{U+05de}\N{U+05d9}\N{U+05e9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e9}\N{U+05d9}\N{U+05e9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e9}\N{U+05d1}\N{U+05ea}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dd} \N{U+05e8}\N{U+05d0}\N{U+05e9}\N{U+05d5}\N{U+05df}"
    ],
    era_abbreviated => [
      "\N{U+05dc}\N{U+05e4}\N{U+05e0}\N{U+05d4}\N{U+05f4}\N{U+05e1}",
      "\N{U+05dc}\N{U+05e1}\N{U+05e4}\N{U+05d9}\N{U+05e8}\N{U+05d4}"
    ],
    era_narrow => [
      "\N{U+05dc}\N{U+05e4}\N{U+05e0}\N{U+05d4}\N{U+05f4}\N{U+05e1}",
      "\N{U+05dc}\N{U+05e1}\N{U+05e4}\N{U+05d9}\N{U+05e8}\N{U+05d4}"
    ],
    era_wide => [
      "\N{U+05dc}\N{U+05e4}\N{U+05e0}\N{U+05d9} \N{U+05d4}\N{U+05e1}\N{U+05e4}\N{U+05d9}\N{U+05e8}\N{U+05d4}",
      "\N{U+05dc}\N{U+05e1}\N{U+05e4}\N{U+05d9}\N{U+05e8}\N{U+05d4}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%Z %H:%M:%S %Y %b %d %a",
    glibc_time_12_format => "%I:%M:%S %P",
    glibc_time_format => "%H:%M:%S",
    language => "Hebrew",
    month_format_abbreviated => [
      "\N{U+05d9}\N{U+05e0}\N{U+05d5}\N{U+05f3}",
      "\N{U+05e4}\N{U+05d1}\N{U+05e8}\N{U+05f3}",
      "\N{U+05de}\N{U+05e8}\N{U+05e5}",
      "\N{U+05d0}\N{U+05e4}\N{U+05e8}\N{U+05f3}",
      "\N{U+05de}\N{U+05d0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dc}\N{U+05d9}",
      "\N{U+05d0}\N{U+05d5}\N{U+05d2}\N{U+05f3}",
      "\N{U+05e1}\N{U+05e4}\N{U+05d8}\N{U+05f3}",
      "\N{U+05d0}\N{U+05d5}\N{U+05e7}\N{U+05f3}",
      "\N{U+05e0}\N{U+05d5}\N{U+05d1}\N{U+05f3}",
      "\N{U+05d3}\N{U+05e6}\N{U+05de}\N{U+05f3}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+05d9}\N{U+05e0}\N{U+05d5}\N{U+05d0}\N{U+05e8}",
      "\N{U+05e4}\N{U+05d1}\N{U+05e8}\N{U+05d5}\N{U+05d0}\N{U+05e8}",
      "\N{U+05de}\N{U+05e8}\N{U+05e5}",
      "\N{U+05d0}\N{U+05e4}\N{U+05e8}\N{U+05d9}\N{U+05dc}",
      "\N{U+05de}\N{U+05d0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dc}\N{U+05d9}",
      "\N{U+05d0}\N{U+05d5}\N{U+05d2}\N{U+05d5}\N{U+05e1}\N{U+05d8}",
      "\N{U+05e1}\N{U+05e4}\N{U+05d8}\N{U+05de}\N{U+05d1}\N{U+05e8}",
      "\N{U+05d0}\N{U+05d5}\N{U+05e7}\N{U+05d8}\N{U+05d5}\N{U+05d1}\N{U+05e8}",
      "\N{U+05e0}\N{U+05d5}\N{U+05d1}\N{U+05de}\N{U+05d1}\N{U+05e8}",
      "\N{U+05d3}\N{U+05e6}\N{U+05de}\N{U+05d1}\N{U+05e8}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+05d9}\N{U+05e0}\N{U+05d5}\N{U+05f3}",
      "\N{U+05e4}\N{U+05d1}\N{U+05e8}\N{U+05f3}",
      "\N{U+05de}\N{U+05e8}\N{U+05e5}",
      "\N{U+05d0}\N{U+05e4}\N{U+05e8}\N{U+05f3}",
      "\N{U+05de}\N{U+05d0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dc}\N{U+05d9}",
      "\N{U+05d0}\N{U+05d5}\N{U+05d2}\N{U+05f3}",
      "\N{U+05e1}\N{U+05e4}\N{U+05d8}\N{U+05f3}",
      "\N{U+05d0}\N{U+05d5}\N{U+05e7}\N{U+05f3}",
      "\N{U+05e0}\N{U+05d5}\N{U+05d1}\N{U+05f3}",
      "\N{U+05d3}\N{U+05e6}\N{U+05de}\N{U+05f3}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+05d9}\N{U+05e0}\N{U+05d5}\N{U+05d0}\N{U+05e8}",
      "\N{U+05e4}\N{U+05d1}\N{U+05e8}\N{U+05d5}\N{U+05d0}\N{U+05e8}",
      "\N{U+05de}\N{U+05e8}\N{U+05e5}",
      "\N{U+05d0}\N{U+05e4}\N{U+05e8}\N{U+05d9}\N{U+05dc}",
      "\N{U+05de}\N{U+05d0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dc}\N{U+05d9}",
      "\N{U+05d0}\N{U+05d5}\N{U+05d2}\N{U+05d5}\N{U+05e1}\N{U+05d8}",
      "\N{U+05e1}\N{U+05e4}\N{U+05d8}\N{U+05de}\N{U+05d1}\N{U+05e8}",
      "\N{U+05d0}\N{U+05d5}\N{U+05e7}\N{U+05d8}\N{U+05d5}\N{U+05d1}\N{U+05e8}",
      "\N{U+05e0}\N{U+05d5}\N{U+05d1}\N{U+05de}\N{U+05d1}\N{U+05e8}",
      "\N{U+05d3}\N{U+05e6}\N{U+05de}\N{U+05d1}\N{U+05e8}"
    ],
    name => "Hebrew Israel",
    native_language => "\N{U+05e2}\N{U+05d1}\N{U+05e8}\N{U+05d9}\N{U+05ea}",
    native_name => "\N{U+05e2}\N{U+05d1}\N{U+05e8}\N{U+05d9}\N{U+05ea} \N{U+05d9}\N{U+05e9}\N{U+05e8}\N{U+05d0}\N{U+05dc}",
    native_script => undef,
    native_territory => "\N{U+05d9}\N{U+05e9}\N{U+05e8}\N{U+05d0}\N{U+05dc}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 1",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 2",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 3",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 1",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 2",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 3",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 1",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 2",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 3",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 1",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 2",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 3",
      "\N{U+05e8}\N{U+05d1}\N{U+05e2}\N{U+05d5}\N{U+05df} 4"
    ],
    script => undef,
    territory => "Israel",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ hi-IN ]__
  {
    am_pm_abbreviated => [
      "\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0905}\N{U+092a}\N{U+0930}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM G y",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMMdd => "dd/MM/y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "hi-IN",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "dd/MM/y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} \N{U+0915}\N{U+094b} {0}",
    datetime_format_long => "{1} \N{U+0915}\N{U+094b} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0938}\N{U+094b}\N{U+092e}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0932}",
      "\N{U+092c}\N{U+0941}\N{U+0927}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}",
      "\N{U+0930}\N{U+0935}\N{U+093f}"
    ],
    day_format_narrow => [
      "\N{U+0938}\N{U+094b}",
      "\N{U+092e}\N{U+0902}",
      "\N{U+092c}\N{U+0941}",
      "\N{U+0917}\N{U+0941}",
      "\N{U+0936}\N{U+0941}",
      "\N{U+0936}",
      "\N{U+0930}"
    ],
    day_format_wide => [
      "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0932}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0930}\N{U+0935}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0938}\N{U+094b}\N{U+092e}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0932}",
      "\N{U+092c}\N{U+0941}\N{U+0927}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}",
      "\N{U+0930}\N{U+0935}\N{U+093f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0938}\N{U+094b}",
      "\N{U+092e}\N{U+0902}",
      "\N{U+092c}\N{U+0941}",
      "\N{U+0917}\N{U+0941}",
      "\N{U+0936}\N{U+0941}",
      "\N{U+0936}",
      "\N{U+0930}"
    ],
    day_stand_alone_wide => [
      "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0932}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0930}\N{U+0935}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}"
    ],
    era_abbreviated => [
      "\N{U+0908}\N{U+0938}\N{U+093e}-\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0908}\N{U+0938}\N{U+094d}\N{U+0935}\N{U+0940}"
    ],
    era_narrow => [
      "\N{U+0908}\N{U+0938}\N{U+093e}-\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0908}\N{U+0938}\N{U+094d}\N{U+0935}\N{U+0940}"
    ],
    era_wide => [
      "\N{U+0908}\N{U+0938}\N{U+093e}-\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0908}\N{U+0938}\N{U+0935}\N{U+0940} \N{U+0938}\N{U+0928}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A %d %b %Y",
    glibc_datetime_format => "%A %d %b %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "Hindi",
    month_format_abbreviated => [
      "\N{U+091c}\N{U+0928}\N{U+0970}",
      "\N{U+092b}\N{U+093c}\N{U+0930}\N{U+0970}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+0948}\N{U+0932}",
      "\N{U+092e}\N{U+0908}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0970}",
      "\N{U+0905}\N{U+0917}\N{U+0970}",
      "\N{U+0938}\N{U+093f}\N{U+0924}\N{U+0970}",
      "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+0924}\N{U+0942}\N{U+0970}",
      "\N{U+0928}\N{U+0935}\N{U+0970}",
      "\N{U+0926}\N{U+093f}\N{U+0938}\N{U+0970}"
    ],
    month_format_narrow => [
      "\N{U+091c}",
      "\N{U+092b}\N{U+093c}",
      "\N{U+092e}\N{U+093e}",
      "\N{U+0905}",
      "\N{U+092e}",
      "\N{U+091c}\N{U+0942}",
      "\N{U+091c}\N{U+0941}",
      "\N{U+0905}",
      "\N{U+0938}\N{U+093f}",
      "\N{U+0905}",
      "\N{U+0928}",
      "\N{U+0926}\N{U+093f}"
    ],
    month_format_wide => [
      "\N{U+091c}\N{U+0928}\N{U+0935}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+093c}\N{U+0930}\N{U+0935}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+0948}\N{U+0932}",
      "\N{U+092e}\N{U+0908}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0908}",
      "\N{U+0905}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+0924}",
      "\N{U+0938}\N{U+093f}\N{U+0924}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+0924}\N{U+0942}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+0935}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0926}\N{U+093f}\N{U+0938}\N{U+0902}\N{U+092c}\N{U+0930}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+091c}\N{U+0928}\N{U+0970}",
      "\N{U+092b}\N{U+093c}\N{U+0930}\N{U+0970}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+0948}\N{U+0932}",
      "\N{U+092e}\N{U+0908}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0970}",
      "\N{U+0905}\N{U+0917}\N{U+0970}",
      "\N{U+0938}\N{U+093f}\N{U+0924}\N{U+0970}",
      "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+0924}\N{U+0942}\N{U+0970}",
      "\N{U+0928}\N{U+0935}\N{U+0970}",
      "\N{U+0926}\N{U+093f}\N{U+0938}\N{U+0970}"
    ],
    month_stand_alone_narrow => [
      "\N{U+091c}",
      "\N{U+092b}\N{U+093c}",
      "\N{U+092e}\N{U+093e}",
      "\N{U+0905}",
      "\N{U+092e}",
      "\N{U+091c}\N{U+0942}",
      "\N{U+091c}\N{U+0941}",
      "\N{U+0905}",
      "\N{U+0938}\N{U+093f}",
      "\N{U+0905}",
      "\N{U+0928}",
      "\N{U+0926}\N{U+093f}"
    ],
    month_stand_alone_wide => [
      "\N{U+091c}\N{U+0928}\N{U+0935}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+093c}\N{U+0930}\N{U+0935}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+0948}\N{U+0932}",
      "\N{U+092e}\N{U+0908}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0908}",
      "\N{U+0905}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+0924}",
      "\N{U+0938}\N{U+093f}\N{U+0924}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+0924}\N{U+0942}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+0935}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0926}\N{U+093f}\N{U+0938}\N{U+0902}\N{U+092c}\N{U+0930}"
    ],
    name => "Hindi India",
    native_language => "\N{U+0939}\N{U+093f}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+0940}",
    native_name => "\N{U+0939}\N{U+093f}\N{U+0928}\N{U+094d}\N{U+0926}\N{U+0940} \N{U+092d}\N{U+093e}\N{U+0930}\N{U+0924}",
    native_script => undef,
    native_territory => "\N{U+092d}\N{U+093e}\N{U+0930}\N{U+0924}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0924}\N{U+093f}1",
      "\N{U+0924}\N{U+093f}2",
      "\N{U+0924}\N{U+093f}3",
      "\N{U+0924}\N{U+093f}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+092a}\N{U+0939}\N{U+0932}\N{U+0940} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+0926}\N{U+0942}\N{U+0938}\N{U+0930}\N{U+0940} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+0924}\N{U+0940}\N{U+0938}\N{U+0930}\N{U+0940} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+091a}\N{U+094c}\N{U+0925}\N{U+0940} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0924}\N{U+093f}1",
      "\N{U+0924}\N{U+093f}2",
      "\N{U+0924}\N{U+093f}3",
      "\N{U+0924}\N{U+093f}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+092a}\N{U+0939}\N{U+0932}\N{U+0940} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+0926}\N{U+0942}\N{U+0938}\N{U+0930}\N{U+0940} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+0924}\N{U+0940}\N{U+0938}\N{U+0930}\N{U+0940} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+091a}\N{U+094c}\N{U+0925}\N{U+0940} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}"
    ],
    script => undef,
    territory => "India",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ hr ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y. G",
      GyMMM => "LLL y. G",
      GyMMMEd => "E, d. MMM y. G",
      GyMMMd => "d. MMM y. G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L.",
      MEd => "E, dd.MM.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMdd => "dd. MM.",
      Md => "dd.MM.",
      d => "d.",
      h => "h a",
      hm => "hh:mm a",
      hms => "hh:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y.",
      yM => "MM.y.",
      yMEd => "E, dd.MM.y.",
      yMM => "MM. y.",
      yMMM => "LLL y.",
      yMMMEd => "E, d. MMM y.",
      yMMMM => "LLLL y.",
      yMMMd => "d. MMM y.",
      yMd => "dd.MM.y.",
      yQQQ => "QQQ y.",
      yQQQQ => "QQQQ y."
    },
    code => "hr",
    date_format_full => "EEEE, d. MMMM y.",
    date_format_long => "d. MMMM y.",
    date_format_medium => "d. MMM y.",
    date_format_short => "dd.MM.y.",
    datetime_format_full => "{1} 'u' {0}",
    datetime_format_long => "{1} 'u' {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "pon",
      "uto",
      "sri",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_format_narrow => [
      "P",
      "U",
      "S",
      "\N{U+010c}",
      "P",
      "S",
      "N"
    ],
    day_format_wide => [
      "ponedjeljak",
      "utorak",
      "srijeda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedjelja"
    ],
    day_stand_alone_abbreviated => [
      "pon",
      "uto",
      "sri",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_stand_alone_narrow => [
      "p",
      "u",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "ponedjeljak",
      "utorak",
      "srijeda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedjelja"
    ],
    era_abbreviated => [
      "pr. Kr.",
      "p. Kr."
    ],
    era_narrow => [
      "pr.n.e.",
      "AD"
    ],
    era_wide => [
      "prije Krista",
      "poslije Krista"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Croatian",
    month_format_abbreviated => [
      "sij",
      "velj",
      "o\N{U+017e}u",
      "tra",
      "svi",
      "lip",
      "srp",
      "kol",
      "ruj",
      "lis",
      "stu",
      "pro"
    ],
    month_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4.",
      "5.",
      "6.",
      "7.",
      "8.",
      "9.",
      "10.",
      "11.",
      "12."
    ],
    month_format_wide => [
      "sije\N{U+010d}nja",
      "velja\N{U+010d}e",
      "o\N{U+017e}ujka",
      "travnja",
      "svibnja",
      "lipnja",
      "srpnja",
      "kolovoza",
      "rujna",
      "listopada",
      "studenoga",
      "prosinca"
    ],
    month_stand_alone_abbreviated => [
      "sij",
      "velj",
      "o\N{U+017e}u",
      "tra",
      "svi",
      "lip",
      "srp",
      "kol",
      "ruj",
      "lis",
      "stu",
      "pro"
    ],
    month_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4.",
      "5.",
      "6.",
      "7.",
      "8.",
      "9.",
      "10.",
      "11.",
      "12."
    ],
    month_stand_alone_wide => [
      "sije\N{U+010d}anj",
      "velja\N{U+010d}a",
      "o\N{U+017e}ujak",
      "travanj",
      "svibanj",
      "lipanj",
      "srpanj",
      "kolovoz",
      "rujan",
      "listopad",
      "studeni",
      "prosinac"
    ],
    name => "Croatian",
    native_language => "hrvatski",
    native_name => "hrvatski",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1kv",
      "2kv",
      "3kv",
      "4kv"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "1kv",
      "2kv",
      "3kv",
      "4kv"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ hr-BA ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y. G",
      GyMMM => "LLL y. G",
      GyMMMEd => "E, d. MMM y. G",
      GyMMMd => "d. MMM y. G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L.",
      MEd => "E, dd.MM.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMdd => "dd. MM.",
      Md => "dd.MM.",
      d => "d.",
      h => "h a",
      hm => "hh:mm a",
      hms => "hh:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y.",
      yM => "MM.y.",
      yMEd => "E, dd.MM.y.",
      yMM => "MM. y.",
      yMMM => "LLL y.",
      yMMMEd => "E, d. MMM y.",
      yMMMM => "LLLL y.",
      yMMMd => "d. MMM y.",
      yMd => "dd.MM.y.",
      yQQQ => "QQQ y.",
      yQQQQ => "QQQQ y."
    },
    code => "hr-BA",
    date_format_full => "EEEE, d. MMMM y.",
    date_format_long => "d. MMMM y.",
    date_format_medium => "d. MMM y.",
    date_format_short => "dd.MM.y.",
    datetime_format_full => "{1} 'u' {0}",
    datetime_format_long => "{1} 'u' {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "pon",
      "uto",
      "sri",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_format_narrow => [
      "P",
      "U",
      "S",
      "\N{U+010c}",
      "P",
      "S",
      "N"
    ],
    day_format_wide => [
      "ponedjeljak",
      "utorak",
      "srijeda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedjelja"
    ],
    day_stand_alone_abbreviated => [
      "pon",
      "uto",
      "sri",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_stand_alone_narrow => [
      "p",
      "u",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "ponedjeljak",
      "utorak",
      "srijeda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedjelja"
    ],
    era_abbreviated => [
      "pr. Kr.",
      "p. Kr."
    ],
    era_narrow => [
      "pr.n.e.",
      "AD"
    ],
    era_wide => [
      "prije Krista",
      "poslije Krista"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Croatian",
    month_format_abbreviated => [
      "sij",
      "velj",
      "o\N{U+017e}u",
      "tra",
      "svi",
      "lip",
      "srp",
      "kol",
      "ruj",
      "lis",
      "stu",
      "pro"
    ],
    month_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4.",
      "5.",
      "6.",
      "7.",
      "8.",
      "9.",
      "10.",
      "11.",
      "12."
    ],
    month_format_wide => [
      "sije\N{U+010d}nja",
      "velja\N{U+010d}e",
      "o\N{U+017e}ujka",
      "travnja",
      "svibnja",
      "lipnja",
      "srpnja",
      "kolovoza",
      "rujna",
      "listopada",
      "studenoga",
      "prosinca"
    ],
    month_stand_alone_abbreviated => [
      "sij",
      "velj",
      "o\N{U+017e}u",
      "tra",
      "svi",
      "lip",
      "srp",
      "kol",
      "ruj",
      "lis",
      "stu",
      "pro"
    ],
    month_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4.",
      "5.",
      "6.",
      "7.",
      "8.",
      "9.",
      "10.",
      "11.",
      "12."
    ],
    month_stand_alone_wide => [
      "sije\N{U+010d}anj",
      "velja\N{U+010d}a",
      "o\N{U+017e}ujak",
      "travanj",
      "svibanj",
      "lipanj",
      "srpanj",
      "kolovoz",
      "rujan",
      "listopad",
      "studeni",
      "prosinac"
    ],
    name => "Croatian Bosnia & Herzegovina",
    native_language => "hrvatski",
    native_name => "hrvatski Bosna i Hercegovina",
    native_script => undef,
    native_territory => "Bosna i Hercegovina",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1kv",
      "2kv",
      "3kv",
      "4kv"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "1kv",
      "2kv",
      "3kv",
      "4kv"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    script => undef,
    territory => "Bosnia & Herzegovina",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ hr-HR ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y. G",
      GyMMM => "LLL y. G",
      GyMMMEd => "E, d. MMM y. G",
      GyMMMd => "d. MMM y. G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L.",
      MEd => "E, dd.MM.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMdd => "dd. MM.",
      Md => "dd.MM.",
      d => "d.",
      h => "h a",
      hm => "hh:mm a",
      hms => "hh:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y.",
      yM => "MM.y.",
      yMEd => "E, dd.MM.y.",
      yMM => "MM. y.",
      yMMM => "LLL y.",
      yMMMEd => "E, d. MMM y.",
      yMMMM => "LLLL y.",
      yMMMd => "d. MMM y.",
      yMd => "dd.MM.y.",
      yQQQ => "QQQ y.",
      yQQQQ => "QQQQ y."
    },
    code => "hr-HR",
    date_format_full => "EEEE, d. MMMM y.",
    date_format_long => "d. MMMM y.",
    date_format_medium => "d. MMM y.",
    date_format_short => "dd.MM.y.",
    datetime_format_full => "{1} 'u' {0}",
    datetime_format_long => "{1} 'u' {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "pon",
      "uto",
      "sri",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_format_narrow => [
      "P",
      "U",
      "S",
      "\N{U+010c}",
      "P",
      "S",
      "N"
    ],
    day_format_wide => [
      "ponedjeljak",
      "utorak",
      "srijeda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedjelja"
    ],
    day_stand_alone_abbreviated => [
      "pon",
      "uto",
      "sri",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_stand_alone_narrow => [
      "p",
      "u",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "ponedjeljak",
      "utorak",
      "srijeda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedjelja"
    ],
    era_abbreviated => [
      "pr. Kr.",
      "p. Kr."
    ],
    era_narrow => [
      "pr.n.e.",
      "AD"
    ],
    era_wide => [
      "prije Krista",
      "poslije Krista"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d %b %Y %T",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Croatian",
    month_format_abbreviated => [
      "sij",
      "velj",
      "o\N{U+017e}u",
      "tra",
      "svi",
      "lip",
      "srp",
      "kol",
      "ruj",
      "lis",
      "stu",
      "pro"
    ],
    month_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4.",
      "5.",
      "6.",
      "7.",
      "8.",
      "9.",
      "10.",
      "11.",
      "12."
    ],
    month_format_wide => [
      "sije\N{U+010d}nja",
      "velja\N{U+010d}e",
      "o\N{U+017e}ujka",
      "travnja",
      "svibnja",
      "lipnja",
      "srpnja",
      "kolovoza",
      "rujna",
      "listopada",
      "studenoga",
      "prosinca"
    ],
    month_stand_alone_abbreviated => [
      "sij",
      "velj",
      "o\N{U+017e}u",
      "tra",
      "svi",
      "lip",
      "srp",
      "kol",
      "ruj",
      "lis",
      "stu",
      "pro"
    ],
    month_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4.",
      "5.",
      "6.",
      "7.",
      "8.",
      "9.",
      "10.",
      "11.",
      "12."
    ],
    month_stand_alone_wide => [
      "sije\N{U+010d}anj",
      "velja\N{U+010d}a",
      "o\N{U+017e}ujak",
      "travanj",
      "svibanj",
      "lipanj",
      "srpanj",
      "kolovoz",
      "rujan",
      "listopad",
      "studeni",
      "prosinac"
    ],
    name => "Croatian Croatia",
    native_language => "hrvatski",
    native_name => "hrvatski Hrvatska",
    native_script => undef,
    native_territory => "Hrvatska",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1kv",
      "2kv",
      "3kv",
      "4kv"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "1kv",
      "2kv",
      "3kv",
      "4kv"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    script => undef,
    territory => "Croatia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ hsb ]__
  {
    am_pm_abbreviated => [
      "dopo\N{U+0142}dnja",
      "popo\N{U+0142}dnju"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, H:mm 'hod\N{U+017a}'.",
      EHms => "E, HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "H 'hod\N{U+017a}'.",
      Hm => "H:mm 'hod\N{U+017a}'.",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMd => "MMMM d",
      MMMd => "d. MMM",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "hsb",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d.M.y",
    date_format_short => "d.M.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "p\N{U+00f3}n",
      "wut",
      "srj",
      "\N{U+0161}tw",
      "pja",
      "sob",
      "nje"
    ],
    day_format_narrow => [
      "p",
      "w",
      "s",
      "\N{U+0161}",
      "p",
      "s",
      "n"
    ],
    day_format_wide => [
      "p\N{U+00f3}nd\N{U+017a}ela",
      "wutora",
      "srjeda",
      "\N{U+0161}tw\N{U+00f3}rtk",
      "pjatk",
      "sobota",
      "njed\N{U+017a}ela"
    ],
    day_stand_alone_abbreviated => [
      "p\N{U+00f3}n",
      "wut",
      "srj",
      "\N{U+0161}tw",
      "pja",
      "sob",
      "nje"
    ],
    day_stand_alone_narrow => [
      "p",
      "w",
      "s",
      "\N{U+0161}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "p\N{U+00f3}nd\N{U+017a}ela",
      "wutora",
      "srjeda",
      "\N{U+0161}tw\N{U+00f3}rtk",
      "pjatk",
      "sobota",
      "njed\N{U+017a}ela"
    ],
    era_abbreviated => [
      "p\N{U+0159}.Chr.n.",
      "po Chr.n."
    ],
    era_narrow => [
      "p\N{U+0159}.Chr.n.",
      "po Chr.n."
    ],
    era_wide => [
      "p\N{U+0159}ed Chrystowym narod\N{U+017a}enjom",
      "po Chrystowym narod\N{U+017a}enju"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Upper Sorbian",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "m\N{U+011b}r.",
      "apr.",
      "mej.",
      "jun.",
      "jul.",
      "awg.",
      "sep.",
      "okt.",
      "now.",
      "dec."
    ],
    month_format_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "januara",
      "februara",
      "m\N{U+011b}rca",
      "apryla",
      "meje",
      "junija",
      "julija",
      "awgusta",
      "septembra",
      "oktobra",
      "nowembra",
      "decembra"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "m\N{U+011b}r",
      "apr",
      "mej",
      "jun",
      "jul",
      "awg",
      "sep",
      "okt",
      "now",
      "dec"
    ],
    month_stand_alone_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "m\N{U+011b}rc",
      "apryl",
      "meja",
      "junij",
      "julij",
      "awgust",
      "september",
      "oktober",
      "nowember",
      "december"
    ],
    name => "Upper Sorbian",
    native_language => "hornjoserb\N{U+0161}\N{U+0107}ina",
    native_name => "hornjoserb\N{U+0161}\N{U+0107}ina",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. kwartal",
      "2. kwartal",
      "3. kwartal",
      "4. kwartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. kwartal",
      "2. kwartal",
      "3. kwartal",
      "4. kwartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm 'hod\N{U+017a}'.",
    variant => undef,
    version => 29
  }
  __[ hsb-DE ]__
  {
    am_pm_abbreviated => [
      "dopo\N{U+0142}dnja",
      "popo\N{U+0142}dnju"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, H:mm 'hod\N{U+017a}'.",
      EHms => "E, HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "H 'hod\N{U+017a}'.",
      Hm => "H:mm 'hod\N{U+017a}'.",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMd => "MMMM d",
      MMMd => "d. MMM",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "hsb-DE",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d.M.y",
    date_format_short => "d.M.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "p\N{U+00f3}n",
      "wut",
      "srj",
      "\N{U+0161}tw",
      "pja",
      "sob",
      "nje"
    ],
    day_format_narrow => [
      "p",
      "w",
      "s",
      "\N{U+0161}",
      "p",
      "s",
      "n"
    ],
    day_format_wide => [
      "p\N{U+00f3}nd\N{U+017a}ela",
      "wutora",
      "srjeda",
      "\N{U+0161}tw\N{U+00f3}rtk",
      "pjatk",
      "sobota",
      "njed\N{U+017a}ela"
    ],
    day_stand_alone_abbreviated => [
      "p\N{U+00f3}n",
      "wut",
      "srj",
      "\N{U+0161}tw",
      "pja",
      "sob",
      "nje"
    ],
    day_stand_alone_narrow => [
      "p",
      "w",
      "s",
      "\N{U+0161}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "p\N{U+00f3}nd\N{U+017a}ela",
      "wutora",
      "srjeda",
      "\N{U+0161}tw\N{U+00f3}rtk",
      "pjatk",
      "sobota",
      "njed\N{U+017a}ela"
    ],
    era_abbreviated => [
      "p\N{U+0159}.Chr.n.",
      "po Chr.n."
    ],
    era_narrow => [
      "p\N{U+0159}.Chr.n.",
      "po Chr.n."
    ],
    era_wide => [
      "p\N{U+0159}ed Chrystowym narod\N{U+017a}enjom",
      "po Chrystowym narod\N{U+017a}enju"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Upper Sorbian",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "m\N{U+011b}r.",
      "apr.",
      "mej.",
      "jun.",
      "jul.",
      "awg.",
      "sep.",
      "okt.",
      "now.",
      "dec."
    ],
    month_format_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "januara",
      "februara",
      "m\N{U+011b}rca",
      "apryla",
      "meje",
      "junija",
      "julija",
      "awgusta",
      "septembra",
      "oktobra",
      "nowembra",
      "decembra"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "m\N{U+011b}r",
      "apr",
      "mej",
      "jun",
      "jul",
      "awg",
      "sep",
      "okt",
      "now",
      "dec"
    ],
    month_stand_alone_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "m\N{U+011b}rc",
      "apryl",
      "meja",
      "junij",
      "julij",
      "awgust",
      "september",
      "oktober",
      "nowember",
      "december"
    ],
    name => "Upper Sorbian Germany",
    native_language => "hornjoserb\N{U+0161}\N{U+0107}ina",
    native_name => "hornjoserb\N{U+0161}\N{U+0107}ina N\N{U+011b}mska",
    native_script => undef,
    native_territory => "N\N{U+011b}mska",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. kwartal",
      "2. kwartal",
      "3. kwartal",
      "4. kwartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. kwartal",
      "2. kwartal",
      "3. kwartal",
      "4. kwartal"
    ],
    script => undef,
    territory => "Germany",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm 'hod\N{U+017a}'.",
    variant => undef,
    version => 29
  }
  __[ hu ]__
  {
    am_pm_abbreviated => [
      "de.",
      "du."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d., E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y.",
      GyMMM => "G y. MMM",
      GyMMMEd => "G y. MMM d., E",
      GyMMMd => "G y. MMM d.",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "M. d., E",
      MMM => "LLL",
      MMMEd => "MMM d., E",
      MMMMd => "MMMM d.",
      MMMd => "MMM d.",
      Md => "M. d.",
      d => "d",
      h => "a h",
      hm => "a h:mm",
      hms => "a h:mm:ss",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y.",
      yM => "y. M.",
      yMEd => "y. MM. dd., E",
      yMMM => "y. MMM",
      yMMMEd => "y. MMM d., E",
      yMMMM => "y. MMMM",
      yMMMd => "y. MMM d.",
      yMd => "y. MM. dd.",
      yQQQ => "y. QQQ",
      yQQQQ => "y. QQQQ"
    },
    code => "hu",
    date_format_full => "y. MMMM d., EEEE",
    date_format_long => "y. MMMM d.",
    date_format_medium => "y. MMM d.",
    date_format_short => "y. MM. dd.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "H",
      "K",
      "Sze",
      "Cs",
      "P",
      "Szo",
      "V"
    ],
    day_format_narrow => [
      "H",
      "K",
      "Sz",
      "Cs",
      "P",
      "Sz",
      "V"
    ],
    day_format_wide => [
      "h\N{U+00e9}tf\N{U+0151}",
      "kedd",
      "szerda",
      "cs\N{U+00fc}t\N{U+00f6}rt\N{U+00f6}k",
      "p\N{U+00e9}ntek",
      "szombat",
      "vas\N{U+00e1}rnap"
    ],
    day_stand_alone_abbreviated => [
      "H",
      "K",
      "Sze",
      "Cs",
      "P",
      "Szo",
      "V"
    ],
    day_stand_alone_narrow => [
      "H",
      "K",
      "Sz",
      "Cs",
      "P",
      "Sz",
      "V"
    ],
    day_stand_alone_wide => [
      "h\N{U+00e9}tf\N{U+0151}",
      "kedd",
      "szerda",
      "cs\N{U+00fc}t\N{U+00f6}rt\N{U+00f6}k",
      "p\N{U+00e9}ntek",
      "szombat",
      "vas\N{U+00e1}rnap"
    ],
    era_abbreviated => [
      "i. e.",
      "i. sz."
    ],
    era_narrow => [
      "ie.",
      "isz."
    ],
    era_wide => [
      "id\N{U+0151}sz\N{U+00e1}m\N{U+00ed}t\N{U+00e1}sunk el\N{U+0151}tt",
      "id\N{U+0151}sz\N{U+00e1}m\N{U+00ed}t\N{U+00e1}sunk szerint"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Hungarian",
    month_format_abbreviated => [
      "jan.",
      "febr.",
      "m\N{U+00e1}rc.",
      "\N{U+00e1}pr.",
      "m\N{U+00e1}j.",
      "j\N{U+00fa}n.",
      "j\N{U+00fa}l.",
      "aug.",
      "szept.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "\N{U+00c1}",
      "M",
      "J",
      "J",
      "A",
      "Sz",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janu\N{U+00e1}r",
      "febru\N{U+00e1}r",
      "m\N{U+00e1}rcius",
      "\N{U+00e1}prilis",
      "m\N{U+00e1}jus",
      "j\N{U+00fa}nius",
      "j\N{U+00fa}lius",
      "augusztus",
      "szeptember",
      "okt\N{U+00f3}ber",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "febr.",
      "m\N{U+00e1}rc.",
      "\N{U+00e1}pr.",
      "m\N{U+00e1}j.",
      "j\N{U+00fa}n.",
      "j\N{U+00fa}l.",
      "aug.",
      "szept.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "\N{U+00c1}",
      "M",
      "J",
      "J",
      "A",
      "Sz",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janu\N{U+00e1}r",
      "febru\N{U+00e1}r",
      "m\N{U+00e1}rcius",
      "\N{U+00e1}prilis",
      "m\N{U+00e1}jus",
      "j\N{U+00fa}nius",
      "j\N{U+00fa}lius",
      "augusztus",
      "szeptember",
      "okt\N{U+00f3}ber",
      "november",
      "december"
    ],
    name => "Hungarian",
    native_language => "magyar",
    native_name => "magyar",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "N1",
      "N2",
      "N3",
      "N4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "I. negyed\N{U+00e9}v",
      "II. negyed\N{U+00e9}v",
      "III. negyed\N{U+00e9}v",
      "IV. negyed\N{U+00e9}v"
    ],
    quarter_stand_alone_abbreviated => [
      "N1",
      "N2",
      "N3",
      "N4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "1. negyed\N{U+00e9}v",
      "2. negyed\N{U+00e9}v",
      "3. negyed\N{U+00e9}v",
      "4. negyed\N{U+00e9}v"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ hu-HU ]__
  {
    am_pm_abbreviated => [
      "de.",
      "du."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d., E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y.",
      GyMMM => "G y. MMM",
      GyMMMEd => "G y. MMM d., E",
      GyMMMd => "G y. MMM d.",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "M. d., E",
      MMM => "LLL",
      MMMEd => "MMM d., E",
      MMMMd => "MMMM d.",
      MMMd => "MMM d.",
      Md => "M. d.",
      d => "d",
      h => "a h",
      hm => "a h:mm",
      hms => "a h:mm:ss",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y.",
      yM => "y. M.",
      yMEd => "y. MM. dd., E",
      yMMM => "y. MMM",
      yMMMEd => "y. MMM d., E",
      yMMMM => "y. MMMM",
      yMMMd => "y. MMM d.",
      yMd => "y. MM. dd.",
      yQQQ => "y. QQQ",
      yQQQQ => "y. QQQQ"
    },
    code => "hu-HU",
    date_format_full => "y. MMMM d., EEEE",
    date_format_long => "y. MMMM d.",
    date_format_medium => "y. MMM d.",
    date_format_short => "y. MM. dd.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "H",
      "K",
      "Sze",
      "Cs",
      "P",
      "Szo",
      "V"
    ],
    day_format_narrow => [
      "H",
      "K",
      "Sz",
      "Cs",
      "P",
      "Sz",
      "V"
    ],
    day_format_wide => [
      "h\N{U+00e9}tf\N{U+0151}",
      "kedd",
      "szerda",
      "cs\N{U+00fc}t\N{U+00f6}rt\N{U+00f6}k",
      "p\N{U+00e9}ntek",
      "szombat",
      "vas\N{U+00e1}rnap"
    ],
    day_stand_alone_abbreviated => [
      "H",
      "K",
      "Sze",
      "Cs",
      "P",
      "Szo",
      "V"
    ],
    day_stand_alone_narrow => [
      "H",
      "K",
      "Sz",
      "Cs",
      "P",
      "Sz",
      "V"
    ],
    day_stand_alone_wide => [
      "h\N{U+00e9}tf\N{U+0151}",
      "kedd",
      "szerda",
      "cs\N{U+00fc}t\N{U+00f6}rt\N{U+00f6}k",
      "p\N{U+00e9}ntek",
      "szombat",
      "vas\N{U+00e1}rnap"
    ],
    era_abbreviated => [
      "i. e.",
      "i. sz."
    ],
    era_narrow => [
      "ie.",
      "isz."
    ],
    era_wide => [
      "id\N{U+0151}sz\N{U+00e1}m\N{U+00ed}t\N{U+00e1}sunk el\N{U+0151}tt",
      "id\N{U+0151}sz\N{U+00e1}m\N{U+00ed}t\N{U+00e1}sunk szerint"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%Y. %b. %e., %A, %H.%M.%S %Z",
    glibc_date_format => "%Y-%m-%d",
    glibc_datetime_format => "%Y. %b. %e., %A, %H.%M.%S %Z",
    glibc_time_12_format => "%H.%M.%S",
    glibc_time_format => "%H.%M.%S",
    language => "Hungarian",
    month_format_abbreviated => [
      "jan.",
      "febr.",
      "m\N{U+00e1}rc.",
      "\N{U+00e1}pr.",
      "m\N{U+00e1}j.",
      "j\N{U+00fa}n.",
      "j\N{U+00fa}l.",
      "aug.",
      "szept.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "\N{U+00c1}",
      "M",
      "J",
      "J",
      "A",
      "Sz",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janu\N{U+00e1}r",
      "febru\N{U+00e1}r",
      "m\N{U+00e1}rcius",
      "\N{U+00e1}prilis",
      "m\N{U+00e1}jus",
      "j\N{U+00fa}nius",
      "j\N{U+00fa}lius",
      "augusztus",
      "szeptember",
      "okt\N{U+00f3}ber",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "febr.",
      "m\N{U+00e1}rc.",
      "\N{U+00e1}pr.",
      "m\N{U+00e1}j.",
      "j\N{U+00fa}n.",
      "j\N{U+00fa}l.",
      "aug.",
      "szept.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "\N{U+00c1}",
      "M",
      "J",
      "J",
      "A",
      "Sz",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janu\N{U+00e1}r",
      "febru\N{U+00e1}r",
      "m\N{U+00e1}rcius",
      "\N{U+00e1}prilis",
      "m\N{U+00e1}jus",
      "j\N{U+00fa}nius",
      "j\N{U+00fa}lius",
      "augusztus",
      "szeptember",
      "okt\N{U+00f3}ber",
      "november",
      "december"
    ],
    name => "Hungarian Hungary",
    native_language => "magyar",
    native_name => "magyar Magyarorsz\N{U+00e1}g",
    native_script => undef,
    native_territory => "Magyarorsz\N{U+00e1}g",
    native_variant => undef,
    quarter_format_abbreviated => [
      "N1",
      "N2",
      "N3",
      "N4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "I. negyed\N{U+00e9}v",
      "II. negyed\N{U+00e9}v",
      "III. negyed\N{U+00e9}v",
      "IV. negyed\N{U+00e9}v"
    ],
    quarter_stand_alone_abbreviated => [
      "N1",
      "N2",
      "N3",
      "N4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "1. negyed\N{U+00e9}v",
      "2. negyed\N{U+00e9}v",
      "3. negyed\N{U+00e9}v",
      "4. negyed\N{U+00e9}v"
    ],
    script => undef,
    territory => "Hungary",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ hy ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "d, ccc",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "G y\N{U+0569}.",
      GyMMM => "G y\N{U+0569}. LLL",
      GyMMMEd => "G y\N{U+0569}. MMM d, E",
      GyMMMd => "d MMM, y\N{U+0569}.,",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "dd.MM, E",
      MMM => "LLL",
      MMMEd => "d MMM, E",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "d.MM.y\N{U+0569}., E",
      yMMM => "y\N{U+0569}. LLL",
      yMMMEd => "y\N{U+0569}. MMM d, E",
      yMMMM => "y\N{U+0569}\N{U+2024} MMMM",
      yMMMd => "d MMM, y\N{U+0569}.",
      yMd => "dd.MM.y",
      yQQQ => "y \N{U+0569}, QQQ",
      yQQQQ => "y \N{U+0569}, QQQQ"
    },
    code => "hy",
    date_format_full => "y\N{U+0569}. MMMM d, EEEE",
    date_format_long => "dd MMMM, y\N{U+0569}.",
    date_format_medium => "dd MMM, y\N{U+0569}.",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0565}\N{U+0580}\N{U+056f}",
      "\N{U+0565}\N{U+0580}\N{U+0584}",
      "\N{U+0579}\N{U+0580}\N{U+0584}",
      "\N{U+0570}\N{U+0576}\N{U+0563}",
      "\N{U+0578}\N{U+0582}\N{U+0580}",
      "\N{U+0577}\N{U+0562}\N{U+0569}",
      "\N{U+056f}\N{U+056b}\N{U+0580}"
    ],
    day_format_narrow => [
      "\N{U+0535}",
      "\N{U+0535}",
      "\N{U+0549}",
      "\N{U+0540}",
      "\N{U+0548}\N{U+0582}",
      "\N{U+0547}",
      "\N{U+053f}"
    ],
    day_format_wide => [
      "\N{U+0565}\N{U+0580}\N{U+056f}\N{U+0578}\N{U+0582}\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0569}\N{U+056b}",
      "\N{U+0565}\N{U+0580}\N{U+0565}\N{U+0584}\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0569}\N{U+056b}",
      "\N{U+0579}\N{U+0578}\N{U+0580}\N{U+0565}\N{U+0584}\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0569}\N{U+056b}",
      "\N{U+0570}\N{U+056b}\N{U+0576}\N{U+0563}\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0569}\N{U+056b}",
      "\N{U+0578}\N{U+0582}\N{U+0580}\N{U+0562}\N{U+0561}\N{U+0569}",
      "\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0561}\N{U+0569}",
      "\N{U+056f}\N{U+056b}\N{U+0580}\N{U+0561}\N{U+056f}\N{U+056b}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0565}\N{U+0580}\N{U+056f}",
      "\N{U+0565}\N{U+0580}\N{U+0584}",
      "\N{U+0579}\N{U+0580}\N{U+0584}",
      "\N{U+0570}\N{U+0576}\N{U+0563}",
      "\N{U+0578}\N{U+0582}\N{U+0580}",
      "\N{U+0577}\N{U+0562}\N{U+0569}",
      "\N{U+056f}\N{U+056b}\N{U+0580}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0535}\N{U+056f}",
      "\N{U+0535}\N{U+0580}",
      "\N{U+0549}\N{U+0580}",
      "\N{U+0540}\N{U+0563}",
      "\N{U+0548}\N{U+0582}",
      "\N{U+0547}\N{U+0562}",
      "\N{U+053f}\N{U+0580}"
    ],
    day_stand_alone_wide => [
      "\N{U+0565}\N{U+0580}\N{U+056f}\N{U+0578}\N{U+0582}\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0569}\N{U+056b}",
      "\N{U+0565}\N{U+0580}\N{U+0565}\N{U+0584}\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0569}\N{U+056b}",
      "\N{U+0579}\N{U+0578}\N{U+0580}\N{U+0565}\N{U+0584}\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0569}\N{U+056b}",
      "\N{U+0570}\N{U+056b}\N{U+0576}\N{U+0563}\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0569}\N{U+056b}",
      "\N{U+0578}\N{U+0582}\N{U+0580}\N{U+0562}\N{U+0561}\N{U+0569}",
      "\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0561}\N{U+0569}",
      "\N{U+056f}\N{U+056b}\N{U+0580}\N{U+0561}\N{U+056f}\N{U+056b}"
    ],
    era_abbreviated => [
      "\N{U+0574}.\N{U+0569}.\N{U+0561}.",
      "\N{U+0574}.\N{U+0569}."
    ],
    era_narrow => [
      "\N{U+0574}.\N{U+0569}.\N{U+0561}.",
      "\N{U+0574}.\N{U+0569}."
    ],
    era_wide => [
      "\N{U+0574}.\N{U+0569}.\N{U+0561}.",
      "\N{U+0574}.\N{U+0569}."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Armenian",
    month_format_abbreviated => [
      "\N{U+0570}\N{U+0576}\N{U+057e}",
      "\N{U+0583}\N{U+057f}\N{U+057e}",
      "\N{U+0574}\N{U+0580}\N{U+057f}",
      "\N{U+0561}\N{U+057a}\N{U+0580}",
      "\N{U+0574}\N{U+0575}\N{U+057d}",
      "\N{U+0570}\N{U+0576}\N{U+057d}",
      "\N{U+0570}\N{U+056c}\N{U+057d}",
      "\N{U+0585}\N{U+0563}\N{U+057d}",
      "\N{U+057d}\N{U+0565}\N{U+057a}",
      "\N{U+0570}\N{U+0578}\N{U+056f}",
      "\N{U+0576}\N{U+0578}\N{U+0575}",
      "\N{U+0564}\N{U+0565}\N{U+056f}"
    ],
    month_format_narrow => [
      "\N{U+0540}",
      "\N{U+0553}",
      "\N{U+0544}",
      "\N{U+0531}",
      "\N{U+0544}",
      "\N{U+0540}",
      "\N{U+0540}",
      "\N{U+0555}",
      "\N{U+054d}",
      "\N{U+0540}",
      "\N{U+0546}",
      "\N{U+0534}"
    ],
    month_format_wide => [
      "\N{U+0570}\N{U+0578}\N{U+0582}\N{U+0576}\N{U+057e}\N{U+0561}\N{U+0580}\N{U+056b}",
      "\N{U+0583}\N{U+0565}\N{U+057f}\N{U+0580}\N{U+057e}\N{U+0561}\N{U+0580}\N{U+056b}",
      "\N{U+0574}\N{U+0561}\N{U+0580}\N{U+057f}\N{U+056b}",
      "\N{U+0561}\N{U+057a}\N{U+0580}\N{U+056b}\N{U+056c}\N{U+056b}",
      "\N{U+0574}\N{U+0561}\N{U+0575}\N{U+056b}\N{U+057d}\N{U+056b}",
      "\N{U+0570}\N{U+0578}\N{U+0582}\N{U+0576}\N{U+056b}\N{U+057d}\N{U+056b}",
      "\N{U+0570}\N{U+0578}\N{U+0582}\N{U+056c}\N{U+056b}\N{U+057d}\N{U+056b}",
      "\N{U+0585}\N{U+0563}\N{U+0578}\N{U+057d}\N{U+057f}\N{U+0578}\N{U+057d}\N{U+056b}",
      "\N{U+057d}\N{U+0565}\N{U+057a}\N{U+057f}\N{U+0565}\N{U+0574}\N{U+0562}\N{U+0565}\N{U+0580}\N{U+056b}",
      "\N{U+0570}\N{U+0578}\N{U+056f}\N{U+057f}\N{U+0565}\N{U+0574}\N{U+0562}\N{U+0565}\N{U+0580}\N{U+056b}",
      "\N{U+0576}\N{U+0578}\N{U+0575}\N{U+0565}\N{U+0574}\N{U+0562}\N{U+0565}\N{U+0580}\N{U+056b}",
      "\N{U+0564}\N{U+0565}\N{U+056f}\N{U+057f}\N{U+0565}\N{U+0574}\N{U+0562}\N{U+0565}\N{U+0580}\N{U+056b}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0570}\N{U+0576}\N{U+057e}",
      "\N{U+0583}\N{U+057f}\N{U+057e}",
      "\N{U+0574}\N{U+0580}\N{U+057f}",
      "\N{U+0561}\N{U+057a}\N{U+0580}",
      "\N{U+0574}\N{U+0575}\N{U+057d}",
      "\N{U+0570}\N{U+0576}\N{U+057d}",
      "\N{U+0570}\N{U+056c}\N{U+057d}",
      "\N{U+0585}\N{U+0563}\N{U+057d}",
      "\N{U+057d}\N{U+0565}\N{U+057a}",
      "\N{U+0570}\N{U+0578}\N{U+056f}",
      "\N{U+0576}\N{U+0578}\N{U+0575}",
      "\N{U+0564}\N{U+0565}\N{U+056f}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0540}",
      "\N{U+0553}",
      "\N{U+0544}",
      "\N{U+0531}",
      "\N{U+0544}",
      "\N{U+0540}",
      "\N{U+0540}",
      "\N{U+0555}",
      "\N{U+054d}",
      "\N{U+0540}",
      "\N{U+0546}",
      "\N{U+0534}"
    ],
    month_stand_alone_wide => [
      "\N{U+0570}\N{U+0578}\N{U+0582}\N{U+0576}\N{U+057e}\N{U+0561}\N{U+0580}",
      "\N{U+0583}\N{U+0565}\N{U+057f}\N{U+0580}\N{U+057e}\N{U+0561}\N{U+0580}",
      "\N{U+0574}\N{U+0561}\N{U+0580}\N{U+057f}",
      "\N{U+0561}\N{U+057a}\N{U+0580}\N{U+056b}\N{U+056c}",
      "\N{U+0574}\N{U+0561}\N{U+0575}\N{U+056b}\N{U+057d}",
      "\N{U+0570}\N{U+0578}\N{U+0582}\N{U+0576}\N{U+056b}\N{U+057d}",
      "\N{U+0570}\N{U+0578}\N{U+0582}\N{U+056c}\N{U+056b}\N{U+057d}",
      "\N{U+0585}\N{U+0563}\N{U+0578}\N{U+057d}\N{U+057f}\N{U+0578}\N{U+057d}",
      "\N{U+057d}\N{U+0565}\N{U+057a}\N{U+057f}\N{U+0565}\N{U+0574}\N{U+0562}\N{U+0565}\N{U+0580}",
      "\N{U+0570}\N{U+0578}\N{U+056f}\N{U+057f}\N{U+0565}\N{U+0574}\N{U+0562}\N{U+0565}\N{U+0580}",
      "\N{U+0576}\N{U+0578}\N{U+0575}\N{U+0565}\N{U+0574}\N{U+0562}\N{U+0565}\N{U+0580}",
      "\N{U+0564}\N{U+0565}\N{U+056f}\N{U+057f}\N{U+0565}\N{U+0574}\N{U+0562}\N{U+0565}\N{U+0580}"
    ],
    name => "Armenian",
    native_language => "\N{U+0570}\N{U+0561}\N{U+0575}\N{U+0565}\N{U+0580}\N{U+0565}\N{U+0576}",
    native_name => "\N{U+0570}\N{U+0561}\N{U+0575}\N{U+0565}\N{U+0580}\N{U+0565}\N{U+0576}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+056b}\N{U+0576} \N{U+0565}\N{U+057c}\N{U+0574}\N{U+057d}.",
      "2-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0574}\N{U+057d}.",
      "3-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0574}\N{U+057d}.",
      "4-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0574}\N{U+057d}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+056b}\N{U+0576} \N{U+0565}\N{U+057c}\N{U+0561}\N{U+0574}\N{U+057d}\N{U+0575}\N{U+0561}\N{U+056f}",
      "2-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0561}\N{U+0574}\N{U+057d}\N{U+0575}\N{U+0561}\N{U+056f}",
      "3-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0561}\N{U+0574}\N{U+057d}\N{U+0575}\N{U+0561}\N{U+056f}",
      "4-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0561}\N{U+0574}\N{U+057d}\N{U+0575}\N{U+0561}\N{U+056f}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+056b}\N{U+0576} \N{U+0565}\N{U+057c}\N{U+0574}\N{U+057d}.",
      "2-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0574}\N{U+057d}.",
      "3-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0574}\N{U+057d}.",
      "4-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0574}\N{U+057d}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+056b}\N{U+0576} \N{U+0565}\N{U+057c}\N{U+0561}\N{U+0574}\N{U+057d}\N{U+0575}\N{U+0561}\N{U+056f}",
      "2-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0561}\N{U+0574}\N{U+057d}\N{U+0575}\N{U+0561}\N{U+056f}",
      "3-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0561}\N{U+0574}\N{U+057d}\N{U+0575}\N{U+0561}\N{U+056f}",
      "4-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0561}\N{U+0574}\N{U+057d}\N{U+0575}\N{U+0561}\N{U+056f}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H:mm:ss, zzzz",
    time_format_long => "H:mm:ss, z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ hy-AM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "d, ccc",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "G y\N{U+0569}.",
      GyMMM => "G y\N{U+0569}. LLL",
      GyMMMEd => "G y\N{U+0569}. MMM d, E",
      GyMMMd => "d MMM, y\N{U+0569}.,",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "dd.MM, E",
      MMM => "LLL",
      MMMEd => "d MMM, E",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "d.MM.y\N{U+0569}., E",
      yMMM => "y\N{U+0569}. LLL",
      yMMMEd => "y\N{U+0569}. MMM d, E",
      yMMMM => "y\N{U+0569}\N{U+2024} MMMM",
      yMMMd => "d MMM, y\N{U+0569}.",
      yMd => "dd.MM.y",
      yQQQ => "y \N{U+0569}, QQQ",
      yQQQQ => "y \N{U+0569}, QQQQ"
    },
    code => "hy-AM",
    date_format_full => "y\N{U+0569}. MMMM d, EEEE",
    date_format_long => "dd MMMM, y\N{U+0569}.",
    date_format_medium => "dd MMM, y\N{U+0569}.",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0565}\N{U+0580}\N{U+056f}",
      "\N{U+0565}\N{U+0580}\N{U+0584}",
      "\N{U+0579}\N{U+0580}\N{U+0584}",
      "\N{U+0570}\N{U+0576}\N{U+0563}",
      "\N{U+0578}\N{U+0582}\N{U+0580}",
      "\N{U+0577}\N{U+0562}\N{U+0569}",
      "\N{U+056f}\N{U+056b}\N{U+0580}"
    ],
    day_format_narrow => [
      "\N{U+0535}",
      "\N{U+0535}",
      "\N{U+0549}",
      "\N{U+0540}",
      "\N{U+0548}\N{U+0582}",
      "\N{U+0547}",
      "\N{U+053f}"
    ],
    day_format_wide => [
      "\N{U+0565}\N{U+0580}\N{U+056f}\N{U+0578}\N{U+0582}\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0569}\N{U+056b}",
      "\N{U+0565}\N{U+0580}\N{U+0565}\N{U+0584}\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0569}\N{U+056b}",
      "\N{U+0579}\N{U+0578}\N{U+0580}\N{U+0565}\N{U+0584}\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0569}\N{U+056b}",
      "\N{U+0570}\N{U+056b}\N{U+0576}\N{U+0563}\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0569}\N{U+056b}",
      "\N{U+0578}\N{U+0582}\N{U+0580}\N{U+0562}\N{U+0561}\N{U+0569}",
      "\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0561}\N{U+0569}",
      "\N{U+056f}\N{U+056b}\N{U+0580}\N{U+0561}\N{U+056f}\N{U+056b}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0565}\N{U+0580}\N{U+056f}",
      "\N{U+0565}\N{U+0580}\N{U+0584}",
      "\N{U+0579}\N{U+0580}\N{U+0584}",
      "\N{U+0570}\N{U+0576}\N{U+0563}",
      "\N{U+0578}\N{U+0582}\N{U+0580}",
      "\N{U+0577}\N{U+0562}\N{U+0569}",
      "\N{U+056f}\N{U+056b}\N{U+0580}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0535}\N{U+056f}",
      "\N{U+0535}\N{U+0580}",
      "\N{U+0549}\N{U+0580}",
      "\N{U+0540}\N{U+0563}",
      "\N{U+0548}\N{U+0582}",
      "\N{U+0547}\N{U+0562}",
      "\N{U+053f}\N{U+0580}"
    ],
    day_stand_alone_wide => [
      "\N{U+0565}\N{U+0580}\N{U+056f}\N{U+0578}\N{U+0582}\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0569}\N{U+056b}",
      "\N{U+0565}\N{U+0580}\N{U+0565}\N{U+0584}\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0569}\N{U+056b}",
      "\N{U+0579}\N{U+0578}\N{U+0580}\N{U+0565}\N{U+0584}\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0569}\N{U+056b}",
      "\N{U+0570}\N{U+056b}\N{U+0576}\N{U+0563}\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0569}\N{U+056b}",
      "\N{U+0578}\N{U+0582}\N{U+0580}\N{U+0562}\N{U+0561}\N{U+0569}",
      "\N{U+0577}\N{U+0561}\N{U+0562}\N{U+0561}\N{U+0569}",
      "\N{U+056f}\N{U+056b}\N{U+0580}\N{U+0561}\N{U+056f}\N{U+056b}"
    ],
    era_abbreviated => [
      "\N{U+0574}.\N{U+0569}.\N{U+0561}.",
      "\N{U+0574}.\N{U+0569}."
    ],
    era_narrow => [
      "\N{U+0574}.\N{U+0569}.\N{U+0561}.",
      "\N{U+0574}.\N{U+0569}."
    ],
    era_wide => [
      "\N{U+0574}.\N{U+0569}.\N{U+0561}.",
      "\N{U+0574}.\N{U+0569}."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %d %b %Y %r %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%r",
    language => "Armenian",
    month_format_abbreviated => [
      "\N{U+0570}\N{U+0576}\N{U+057e}",
      "\N{U+0583}\N{U+057f}\N{U+057e}",
      "\N{U+0574}\N{U+0580}\N{U+057f}",
      "\N{U+0561}\N{U+057a}\N{U+0580}",
      "\N{U+0574}\N{U+0575}\N{U+057d}",
      "\N{U+0570}\N{U+0576}\N{U+057d}",
      "\N{U+0570}\N{U+056c}\N{U+057d}",
      "\N{U+0585}\N{U+0563}\N{U+057d}",
      "\N{U+057d}\N{U+0565}\N{U+057a}",
      "\N{U+0570}\N{U+0578}\N{U+056f}",
      "\N{U+0576}\N{U+0578}\N{U+0575}",
      "\N{U+0564}\N{U+0565}\N{U+056f}"
    ],
    month_format_narrow => [
      "\N{U+0540}",
      "\N{U+0553}",
      "\N{U+0544}",
      "\N{U+0531}",
      "\N{U+0544}",
      "\N{U+0540}",
      "\N{U+0540}",
      "\N{U+0555}",
      "\N{U+054d}",
      "\N{U+0540}",
      "\N{U+0546}",
      "\N{U+0534}"
    ],
    month_format_wide => [
      "\N{U+0570}\N{U+0578}\N{U+0582}\N{U+0576}\N{U+057e}\N{U+0561}\N{U+0580}\N{U+056b}",
      "\N{U+0583}\N{U+0565}\N{U+057f}\N{U+0580}\N{U+057e}\N{U+0561}\N{U+0580}\N{U+056b}",
      "\N{U+0574}\N{U+0561}\N{U+0580}\N{U+057f}\N{U+056b}",
      "\N{U+0561}\N{U+057a}\N{U+0580}\N{U+056b}\N{U+056c}\N{U+056b}",
      "\N{U+0574}\N{U+0561}\N{U+0575}\N{U+056b}\N{U+057d}\N{U+056b}",
      "\N{U+0570}\N{U+0578}\N{U+0582}\N{U+0576}\N{U+056b}\N{U+057d}\N{U+056b}",
      "\N{U+0570}\N{U+0578}\N{U+0582}\N{U+056c}\N{U+056b}\N{U+057d}\N{U+056b}",
      "\N{U+0585}\N{U+0563}\N{U+0578}\N{U+057d}\N{U+057f}\N{U+0578}\N{U+057d}\N{U+056b}",
      "\N{U+057d}\N{U+0565}\N{U+057a}\N{U+057f}\N{U+0565}\N{U+0574}\N{U+0562}\N{U+0565}\N{U+0580}\N{U+056b}",
      "\N{U+0570}\N{U+0578}\N{U+056f}\N{U+057f}\N{U+0565}\N{U+0574}\N{U+0562}\N{U+0565}\N{U+0580}\N{U+056b}",
      "\N{U+0576}\N{U+0578}\N{U+0575}\N{U+0565}\N{U+0574}\N{U+0562}\N{U+0565}\N{U+0580}\N{U+056b}",
      "\N{U+0564}\N{U+0565}\N{U+056f}\N{U+057f}\N{U+0565}\N{U+0574}\N{U+0562}\N{U+0565}\N{U+0580}\N{U+056b}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0570}\N{U+0576}\N{U+057e}",
      "\N{U+0583}\N{U+057f}\N{U+057e}",
      "\N{U+0574}\N{U+0580}\N{U+057f}",
      "\N{U+0561}\N{U+057a}\N{U+0580}",
      "\N{U+0574}\N{U+0575}\N{U+057d}",
      "\N{U+0570}\N{U+0576}\N{U+057d}",
      "\N{U+0570}\N{U+056c}\N{U+057d}",
      "\N{U+0585}\N{U+0563}\N{U+057d}",
      "\N{U+057d}\N{U+0565}\N{U+057a}",
      "\N{U+0570}\N{U+0578}\N{U+056f}",
      "\N{U+0576}\N{U+0578}\N{U+0575}",
      "\N{U+0564}\N{U+0565}\N{U+056f}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0540}",
      "\N{U+0553}",
      "\N{U+0544}",
      "\N{U+0531}",
      "\N{U+0544}",
      "\N{U+0540}",
      "\N{U+0540}",
      "\N{U+0555}",
      "\N{U+054d}",
      "\N{U+0540}",
      "\N{U+0546}",
      "\N{U+0534}"
    ],
    month_stand_alone_wide => [
      "\N{U+0570}\N{U+0578}\N{U+0582}\N{U+0576}\N{U+057e}\N{U+0561}\N{U+0580}",
      "\N{U+0583}\N{U+0565}\N{U+057f}\N{U+0580}\N{U+057e}\N{U+0561}\N{U+0580}",
      "\N{U+0574}\N{U+0561}\N{U+0580}\N{U+057f}",
      "\N{U+0561}\N{U+057a}\N{U+0580}\N{U+056b}\N{U+056c}",
      "\N{U+0574}\N{U+0561}\N{U+0575}\N{U+056b}\N{U+057d}",
      "\N{U+0570}\N{U+0578}\N{U+0582}\N{U+0576}\N{U+056b}\N{U+057d}",
      "\N{U+0570}\N{U+0578}\N{U+0582}\N{U+056c}\N{U+056b}\N{U+057d}",
      "\N{U+0585}\N{U+0563}\N{U+0578}\N{U+057d}\N{U+057f}\N{U+0578}\N{U+057d}",
      "\N{U+057d}\N{U+0565}\N{U+057a}\N{U+057f}\N{U+0565}\N{U+0574}\N{U+0562}\N{U+0565}\N{U+0580}",
      "\N{U+0570}\N{U+0578}\N{U+056f}\N{U+057f}\N{U+0565}\N{U+0574}\N{U+0562}\N{U+0565}\N{U+0580}",
      "\N{U+0576}\N{U+0578}\N{U+0575}\N{U+0565}\N{U+0574}\N{U+0562}\N{U+0565}\N{U+0580}",
      "\N{U+0564}\N{U+0565}\N{U+056f}\N{U+057f}\N{U+0565}\N{U+0574}\N{U+0562}\N{U+0565}\N{U+0580}"
    ],
    name => "Armenian Armenia",
    native_language => "\N{U+0570}\N{U+0561}\N{U+0575}\N{U+0565}\N{U+0580}\N{U+0565}\N{U+0576}",
    native_name => "\N{U+0570}\N{U+0561}\N{U+0575}\N{U+0565}\N{U+0580}\N{U+0565}\N{U+0576} \N{U+0540}\N{U+0561}\N{U+0575}\N{U+0561}\N{U+057d}\N{U+057f}\N{U+0561}\N{U+0576}",
    native_script => undef,
    native_territory => "\N{U+0540}\N{U+0561}\N{U+0575}\N{U+0561}\N{U+057d}\N{U+057f}\N{U+0561}\N{U+0576}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+056b}\N{U+0576} \N{U+0565}\N{U+057c}\N{U+0574}\N{U+057d}.",
      "2-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0574}\N{U+057d}.",
      "3-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0574}\N{U+057d}.",
      "4-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0574}\N{U+057d}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+056b}\N{U+0576} \N{U+0565}\N{U+057c}\N{U+0561}\N{U+0574}\N{U+057d}\N{U+0575}\N{U+0561}\N{U+056f}",
      "2-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0561}\N{U+0574}\N{U+057d}\N{U+0575}\N{U+0561}\N{U+056f}",
      "3-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0561}\N{U+0574}\N{U+057d}\N{U+0575}\N{U+0561}\N{U+056f}",
      "4-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0561}\N{U+0574}\N{U+057d}\N{U+0575}\N{U+0561}\N{U+056f}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+056b}\N{U+0576} \N{U+0565}\N{U+057c}\N{U+0574}\N{U+057d}.",
      "2-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0574}\N{U+057d}.",
      "3-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0574}\N{U+057d}.",
      "4-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0574}\N{U+057d}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+056b}\N{U+0576} \N{U+0565}\N{U+057c}\N{U+0561}\N{U+0574}\N{U+057d}\N{U+0575}\N{U+0561}\N{U+056f}",
      "2-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0561}\N{U+0574}\N{U+057d}\N{U+0575}\N{U+0561}\N{U+056f}",
      "3-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0561}\N{U+0574}\N{U+057d}\N{U+0575}\N{U+0561}\N{U+056f}",
      "4-\N{U+0580}\N{U+0564} \N{U+0565}\N{U+057c}\N{U+0561}\N{U+0574}\N{U+057d}\N{U+0575}\N{U+0561}\N{U+056f}"
    ],
    script => undef,
    territory => "Armenia",
    time_format_full => "H:mm:ss, zzzz",
    time_format_long => "H:mm:ss, z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ id ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH.mm",
      EHms => "E HH.mm.ss",
      Ed => "E, d",
      Ehm => "E h.mm a",
      Ehms => "E h.mm.ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h.mm a",
      hms => "h.mm.ss a",
      hmsv => "h.mm.ss. a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "id",
    date_format_full => "EEEE, dd MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Sen",
      "Sel",
      "Rab",
      "Kam",
      "Jum",
      "Sab",
      "Min"
    ],
    day_format_narrow => [
      "S",
      "S",
      "R",
      "K",
      "J",
      "S",
      "M"
    ],
    day_format_wide => [
      "Senin",
      "Selasa",
      "Rabu",
      "Kamis",
      "Jumat",
      "Sabtu",
      "Minggu"
    ],
    day_stand_alone_abbreviated => [
      "Sen",
      "Sel",
      "Rab",
      "Kam",
      "Jum",
      "Sab",
      "Min"
    ],
    day_stand_alone_narrow => [
      "S",
      "S",
      "R",
      "K",
      "J",
      "S",
      "M"
    ],
    day_stand_alone_wide => [
      "Senin",
      "Selasa",
      "Rabu",
      "Kamis",
      "Jumat",
      "Sabtu",
      "Minggu"
    ],
    era_abbreviated => [
      "SM",
      "M"
    ],
    era_narrow => [
      "SM",
      "M"
    ],
    era_wide => [
      "Sebelum Masehi",
      "M"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Indonesian",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Agt",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Maret",
      "April",
      "Mei",
      "Juni",
      "Juli",
      "Agustus",
      "September",
      "Oktober",
      "November",
      "Desember"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Agt",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Maret",
      "April",
      "Mei",
      "Juni",
      "Juli",
      "Agustus",
      "September",
      "Oktober",
      "November",
      "Desember"
    ],
    name => "Indonesian",
    native_language => "Indonesia",
    native_name => "Indonesia",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Kuartal ke-1",
      "Kuartal ke-2",
      "Kuartal ke-3",
      "Kuartal ke-4"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Kuartal ke-1",
      "Kuartal ke-2",
      "Kuartal ke-3",
      "Kuartal ke-4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ id-ID ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH.mm",
      EHms => "E HH.mm.ss",
      Ed => "E, d",
      Ehm => "E h.mm a",
      Ehms => "E h.mm.ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h.mm a",
      hms => "h.mm.ss a",
      hmsv => "h.mm.ss. a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "id-ID",
    date_format_full => "EEEE, dd MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Sen",
      "Sel",
      "Rab",
      "Kam",
      "Jum",
      "Sab",
      "Min"
    ],
    day_format_narrow => [
      "S",
      "S",
      "R",
      "K",
      "J",
      "S",
      "M"
    ],
    day_format_wide => [
      "Senin",
      "Selasa",
      "Rabu",
      "Kamis",
      "Jumat",
      "Sabtu",
      "Minggu"
    ],
    day_stand_alone_abbreviated => [
      "Sen",
      "Sel",
      "Rab",
      "Kam",
      "Jum",
      "Sab",
      "Min"
    ],
    day_stand_alone_narrow => [
      "S",
      "S",
      "R",
      "K",
      "J",
      "S",
      "M"
    ],
    day_stand_alone_wide => [
      "Senin",
      "Selasa",
      "Rabu",
      "Kamis",
      "Jumat",
      "Sabtu",
      "Minggu"
    ],
    era_abbreviated => [
      "SM",
      "M"
    ],
    era_narrow => [
      "SM",
      "M"
    ],
    era_wide => [
      "Sebelum Masehi",
      "M"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %r %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Indonesian",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Agt",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Maret",
      "April",
      "Mei",
      "Juni",
      "Juli",
      "Agustus",
      "September",
      "Oktober",
      "November",
      "Desember"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Agt",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Maret",
      "April",
      "Mei",
      "Juni",
      "Juli",
      "Agustus",
      "September",
      "Oktober",
      "November",
      "Desember"
    ],
    name => "Indonesian Indonesia",
    native_language => "Indonesia",
    native_name => "Indonesia Indonesia",
    native_script => undef,
    native_territory => "Indonesia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Kuartal ke-1",
      "Kuartal ke-2",
      "Kuartal ke-3",
      "Kuartal ke-4"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Kuartal ke-1",
      "Kuartal ke-2",
      "Kuartal ke-3",
      "Kuartal ke-4"
    ],
    script => undef,
    territory => "Indonesia",
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ ig ]__
  {
    am_pm_abbreviated => [
      "A.M.",
      "P.M."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ig",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "M\N{U+1ecd}n",
      "Tiu",
      "Wen",
      "T\N{U+1ecd}\N{U+1ecd}",
      "Fra\N{U+1ecb}",
      "Sat",
      "\N{U+1ee4}ka"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "M\N{U+1ecd}nde",
      "Tiuzdee",
      "Wenezdee",
      "T\N{U+1ecd}\N{U+1ecd}zdee",
      "Fra\N{U+1ecb}dee",
      "Sat\N{U+1ecd}dee",
      "Mb\N{U+1ecd}s\N{U+1ecb} \N{U+1ee4}ka"
    ],
    day_stand_alone_abbreviated => [
      "M\N{U+1ecd}n",
      "Tiu",
      "Wen",
      "T\N{U+1ecd}\N{U+1ecd}",
      "Fra\N{U+1ecb}",
      "Sat",
      "\N{U+1ee4}ka"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "M\N{U+1ecd}nde",
      "Tiuzdee",
      "Wenezdee",
      "T\N{U+1ecd}\N{U+1ecd}zdee",
      "Fra\N{U+1ecb}dee",
      "Sat\N{U+1ecd}dee",
      "Mb\N{U+1ecd}s\N{U+1ecb} \N{U+1ee4}ka"
    ],
    era_abbreviated => [
      "T.K.",
      "A.K."
    ],
    era_narrow => [
      "T.K.",
      "A.K."
    ],
    era_wide => [
      "Tupu Kristi",
      "Af\N{U+1ecd} Kristi"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Igbo",
    month_format_abbreviated => [
      "Jen",
      "Feb",
      "Maa",
      "Epr",
      "Mee",
      "Juu",
      "Jul",
      "\N{U+1ecc}g\N{U+1ecd}",
      "Sep",
      "\N{U+1ecc}kt",
      "Nov",
      "Dis"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Jen\N{U+1ee5}war\N{U+1ecb}",
      "Febr\N{U+1ee5}war\N{U+1ecb}",
      "Maach\N{U+1ecb}",
      "Eprel",
      "Mee",
      "Juun",
      "Jula\N{U+1ecb}",
      "\N{U+1ecc}g\N{U+1ecd}\N{U+1ecd}st",
      "Septemba",
      "\N{U+1ecc}ktoba",
      "Novemba",
      "Disemba"
    ],
    month_stand_alone_abbreviated => [
      "Jen",
      "Feb",
      "Maa",
      "Epr",
      "Mee",
      "Juu",
      "Jul",
      "\N{U+1ecc}g\N{U+1ecd}",
      "Sep",
      "\N{U+1ecc}kt",
      "Nov",
      "Dis"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Jen\N{U+1ee5}war\N{U+1ecb}",
      "Febr\N{U+1ee5}war\N{U+1ecb}",
      "Maach\N{U+1ecb}",
      "Eprel",
      "Mee",
      "Juun",
      "Jula\N{U+1ecb}",
      "\N{U+1ecc}g\N{U+1ecd}\N{U+1ecd}st",
      "Septemba",
      "\N{U+1ecc}ktoba",
      "Novemba",
      "Disemba"
    ],
    name => "Igbo",
    native_language => "Igbo",
    native_name => "Igbo",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+1ecc}1",
      "\N{U+1ecc}2",
      "\N{U+1ecc}3",
      "\N{U+1ecc}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+1ecc}kara 1",
      "\N{U+1ecc}kara 2",
      "\N{U+1ecc}kara 3",
      "\N{U+1ecc}kara 4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+1ecc}1",
      "\N{U+1ecc}2",
      "\N{U+1ecc}3",
      "\N{U+1ecc}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+1ecc}kara 1",
      "\N{U+1ecc}kara 2",
      "\N{U+1ecc}kara 3",
      "\N{U+1ecc}kara 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ig-NG ]__
  {
    am_pm_abbreviated => [
      "A.M.",
      "P.M."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ig-NG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "M\N{U+1ecd}n",
      "Tiu",
      "Wen",
      "T\N{U+1ecd}\N{U+1ecd}",
      "Fra\N{U+1ecb}",
      "Sat",
      "\N{U+1ee4}ka"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "M\N{U+1ecd}nde",
      "Tiuzdee",
      "Wenezdee",
      "T\N{U+1ecd}\N{U+1ecd}zdee",
      "Fra\N{U+1ecb}dee",
      "Sat\N{U+1ecd}dee",
      "Mb\N{U+1ecd}s\N{U+1ecb} \N{U+1ee4}ka"
    ],
    day_stand_alone_abbreviated => [
      "M\N{U+1ecd}n",
      "Tiu",
      "Wen",
      "T\N{U+1ecd}\N{U+1ecd}",
      "Fra\N{U+1ecb}",
      "Sat",
      "\N{U+1ee4}ka"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "M\N{U+1ecd}nde",
      "Tiuzdee",
      "Wenezdee",
      "T\N{U+1ecd}\N{U+1ecd}zdee",
      "Fra\N{U+1ecb}dee",
      "Sat\N{U+1ecd}dee",
      "Mb\N{U+1ecd}s\N{U+1ecb} \N{U+1ee4}ka"
    ],
    era_abbreviated => [
      "T.K.",
      "A.K."
    ],
    era_narrow => [
      "T.K.",
      "A.K."
    ],
    era_wide => [
      "Tupu Kristi",
      "Af\N{U+1ecd} Kristi"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%A, %d %B %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%r",
    language => "Igbo",
    month_format_abbreviated => [
      "Jen",
      "Feb",
      "Maa",
      "Epr",
      "Mee",
      "Juu",
      "Jul",
      "\N{U+1ecc}g\N{U+1ecd}",
      "Sep",
      "\N{U+1ecc}kt",
      "Nov",
      "Dis"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Jen\N{U+1ee5}war\N{U+1ecb}",
      "Febr\N{U+1ee5}war\N{U+1ecb}",
      "Maach\N{U+1ecb}",
      "Eprel",
      "Mee",
      "Juun",
      "Jula\N{U+1ecb}",
      "\N{U+1ecc}g\N{U+1ecd}\N{U+1ecd}st",
      "Septemba",
      "\N{U+1ecc}ktoba",
      "Novemba",
      "Disemba"
    ],
    month_stand_alone_abbreviated => [
      "Jen",
      "Feb",
      "Maa",
      "Epr",
      "Mee",
      "Juu",
      "Jul",
      "\N{U+1ecc}g\N{U+1ecd}",
      "Sep",
      "\N{U+1ecc}kt",
      "Nov",
      "Dis"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Jen\N{U+1ee5}war\N{U+1ecb}",
      "Febr\N{U+1ee5}war\N{U+1ecb}",
      "Maach\N{U+1ecb}",
      "Eprel",
      "Mee",
      "Juun",
      "Jula\N{U+1ecb}",
      "\N{U+1ecc}g\N{U+1ecd}\N{U+1ecd}st",
      "Septemba",
      "\N{U+1ecc}ktoba",
      "Novemba",
      "Disemba"
    ],
    name => "Igbo Nigeria",
    native_language => "Igbo",
    native_name => "Igbo Nigeria",
    native_script => undef,
    native_territory => "Nigeria",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+1ecc}1",
      "\N{U+1ecc}2",
      "\N{U+1ecc}3",
      "\N{U+1ecc}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+1ecc}kara 1",
      "\N{U+1ecc}kara 2",
      "\N{U+1ecc}kara 3",
      "\N{U+1ecc}kara 4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+1ecc}1",
      "\N{U+1ecc}2",
      "\N{U+1ecc}3",
      "\N{U+1ecc}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+1ecc}kara 1",
      "\N{U+1ecc}kara 2",
      "\N{U+1ecc}kara 3",
      "\N{U+1ecc}kara 4"
    ],
    script => undef,
    territory => "Nigeria",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ii ]__
  {
    am_pm_abbreviated => [
      "\N{U+a3b8}\N{U+a111}",
      "\N{U+a06f}\N{U+a2d2}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "ii",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+a18f}\N{U+a2cd}",
      "\N{U+a18f}\N{U+a44d}",
      "\N{U+a18f}\N{U+a315}",
      "\N{U+a18f}\N{U+a1d6}",
      "\N{U+a18f}\N{U+a26c}",
      "\N{U+a18f}\N{U+a0d8}",
      "\N{U+a46d}\N{U+a18f}"
    ],
    day_format_narrow => [
      "\N{U+a2cd}",
      "\N{U+a44d}",
      "\N{U+a315}",
      "\N{U+a1d6}",
      "\N{U+a26c}",
      "\N{U+a0d8}",
      "\N{U+a18f}"
    ],
    day_format_wide => [
      "\N{U+a18f}\N{U+a282}\N{U+a2cd}",
      "\N{U+a18f}\N{U+a282}\N{U+a44d}",
      "\N{U+a18f}\N{U+a282}\N{U+a315}",
      "\N{U+a18f}\N{U+a282}\N{U+a1d6}",
      "\N{U+a18f}\N{U+a282}\N{U+a26c}",
      "\N{U+a18f}\N{U+a282}\N{U+a0d8}",
      "\N{U+a46d}\N{U+a18f}\N{U+a44d}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+a18f}\N{U+a2cd}",
      "\N{U+a18f}\N{U+a44d}",
      "\N{U+a18f}\N{U+a315}",
      "\N{U+a18f}\N{U+a1d6}",
      "\N{U+a18f}\N{U+a26c}",
      "\N{U+a18f}\N{U+a0d8}",
      "\N{U+a46d}\N{U+a18f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+a2cd}",
      "\N{U+a44d}",
      "\N{U+a315}",
      "\N{U+a1d6}",
      "\N{U+a26c}",
      "\N{U+a0d8}",
      "\N{U+a18f}"
    ],
    day_stand_alone_wide => [
      "\N{U+a18f}\N{U+a282}\N{U+a2cd}",
      "\N{U+a18f}\N{U+a282}\N{U+a44d}",
      "\N{U+a18f}\N{U+a282}\N{U+a315}",
      "\N{U+a18f}\N{U+a282}\N{U+a1d6}",
      "\N{U+a18f}\N{U+a282}\N{U+a26c}",
      "\N{U+a18f}\N{U+a282}\N{U+a0d8}",
      "\N{U+a46d}\N{U+a18f}\N{U+a44d}"
    ],
    era_abbreviated => [
      "\N{U+a0c5}\N{U+a2ca}\N{U+a0bf}",
      "\N{U+a0c5}\N{U+a2ca}\N{U+a282}"
    ],
    era_narrow => [
      "\N{U+a0c5}\N{U+a2ca}\N{U+a0bf}",
      "\N{U+a0c5}\N{U+a2ca}\N{U+a282}"
    ],
    era_wide => [
      "\N{U+a0c5}\N{U+a2ca}\N{U+a0bf}",
      "\N{U+a0c5}\N{U+a2ca}\N{U+a282}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Sichuan Yi",
    month_format_abbreviated => [
      "\N{U+a2cd}\N{U+a1aa}",
      "\N{U+a44d}\N{U+a1aa}",
      "\N{U+a315}\N{U+a1aa}",
      "\N{U+a1d6}\N{U+a1aa}",
      "\N{U+a26c}\N{U+a1aa}",
      "\N{U+a0d8}\N{U+a1aa}",
      "\N{U+a3c3}\N{U+a1aa}",
      "\N{U+a246}\N{U+a1aa}",
      "\N{U+a22c}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a2aa}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a44b}\N{U+a1aa}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+a2cd}\N{U+a1aa}",
      "\N{U+a44d}\N{U+a1aa}",
      "\N{U+a315}\N{U+a1aa}",
      "\N{U+a1d6}\N{U+a1aa}",
      "\N{U+a26c}\N{U+a1aa}",
      "\N{U+a0d8}\N{U+a1aa}",
      "\N{U+a3c3}\N{U+a1aa}",
      "\N{U+a246}\N{U+a1aa}",
      "\N{U+a22c}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a2aa}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a44b}\N{U+a1aa}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+a2cd}\N{U+a1aa}",
      "\N{U+a44d}\N{U+a1aa}",
      "\N{U+a315}\N{U+a1aa}",
      "\N{U+a1d6}\N{U+a1aa}",
      "\N{U+a26c}\N{U+a1aa}",
      "\N{U+a0d8}\N{U+a1aa}",
      "\N{U+a3c3}\N{U+a1aa}",
      "\N{U+a246}\N{U+a1aa}",
      "\N{U+a22c}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a2aa}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a44b}\N{U+a1aa}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+a2cd}\N{U+a1aa}",
      "\N{U+a44d}\N{U+a1aa}",
      "\N{U+a315}\N{U+a1aa}",
      "\N{U+a1d6}\N{U+a1aa}",
      "\N{U+a26c}\N{U+a1aa}",
      "\N{U+a0d8}\N{U+a1aa}",
      "\N{U+a3c3}\N{U+a1aa}",
      "\N{U+a246}\N{U+a1aa}",
      "\N{U+a22c}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a2aa}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a44b}\N{U+a1aa}"
    ],
    name => "Sichuan Yi",
    native_language => "\N{U+a188}\N{U+a320}\N{U+a259}",
    native_name => "\N{U+a188}\N{U+a320}\N{U+a259}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+a0c5}\N{U+a44c}",
      "\N{U+a0c5}\N{U+a3b8}",
      "\N{U+a0c5}\N{U+a375}",
      "\N{U+a0c5}\N{U+a2c6}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+a0c5}\N{U+a44c}",
      "\N{U+a0c5}\N{U+a3b8}",
      "\N{U+a0c5}\N{U+a375}",
      "\N{U+a0c5}\N{U+a2c6}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+a0c5}\N{U+a44c}",
      "\N{U+a0c5}\N{U+a3b8}",
      "\N{U+a0c5}\N{U+a375}",
      "\N{U+a0c5}\N{U+a2c6}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+a0c5}\N{U+a44c}",
      "\N{U+a0c5}\N{U+a3b8}",
      "\N{U+a0c5}\N{U+a375}",
      "\N{U+a0c5}\N{U+a2c6}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ii-CN ]__
  {
    am_pm_abbreviated => [
      "\N{U+a3b8}\N{U+a111}",
      "\N{U+a06f}\N{U+a2d2}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "ii-CN",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+a18f}\N{U+a2cd}",
      "\N{U+a18f}\N{U+a44d}",
      "\N{U+a18f}\N{U+a315}",
      "\N{U+a18f}\N{U+a1d6}",
      "\N{U+a18f}\N{U+a26c}",
      "\N{U+a18f}\N{U+a0d8}",
      "\N{U+a46d}\N{U+a18f}"
    ],
    day_format_narrow => [
      "\N{U+a2cd}",
      "\N{U+a44d}",
      "\N{U+a315}",
      "\N{U+a1d6}",
      "\N{U+a26c}",
      "\N{U+a0d8}",
      "\N{U+a18f}"
    ],
    day_format_wide => [
      "\N{U+a18f}\N{U+a282}\N{U+a2cd}",
      "\N{U+a18f}\N{U+a282}\N{U+a44d}",
      "\N{U+a18f}\N{U+a282}\N{U+a315}",
      "\N{U+a18f}\N{U+a282}\N{U+a1d6}",
      "\N{U+a18f}\N{U+a282}\N{U+a26c}",
      "\N{U+a18f}\N{U+a282}\N{U+a0d8}",
      "\N{U+a46d}\N{U+a18f}\N{U+a44d}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+a18f}\N{U+a2cd}",
      "\N{U+a18f}\N{U+a44d}",
      "\N{U+a18f}\N{U+a315}",
      "\N{U+a18f}\N{U+a1d6}",
      "\N{U+a18f}\N{U+a26c}",
      "\N{U+a18f}\N{U+a0d8}",
      "\N{U+a46d}\N{U+a18f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+a2cd}",
      "\N{U+a44d}",
      "\N{U+a315}",
      "\N{U+a1d6}",
      "\N{U+a26c}",
      "\N{U+a0d8}",
      "\N{U+a18f}"
    ],
    day_stand_alone_wide => [
      "\N{U+a18f}\N{U+a282}\N{U+a2cd}",
      "\N{U+a18f}\N{U+a282}\N{U+a44d}",
      "\N{U+a18f}\N{U+a282}\N{U+a315}",
      "\N{U+a18f}\N{U+a282}\N{U+a1d6}",
      "\N{U+a18f}\N{U+a282}\N{U+a26c}",
      "\N{U+a18f}\N{U+a282}\N{U+a0d8}",
      "\N{U+a46d}\N{U+a18f}\N{U+a44d}"
    ],
    era_abbreviated => [
      "\N{U+a0c5}\N{U+a2ca}\N{U+a0bf}",
      "\N{U+a0c5}\N{U+a2ca}\N{U+a282}"
    ],
    era_narrow => [
      "\N{U+a0c5}\N{U+a2ca}\N{U+a0bf}",
      "\N{U+a0c5}\N{U+a2ca}\N{U+a282}"
    ],
    era_wide => [
      "\N{U+a0c5}\N{U+a2ca}\N{U+a0bf}",
      "\N{U+a0c5}\N{U+a2ca}\N{U+a282}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Sichuan Yi",
    month_format_abbreviated => [
      "\N{U+a2cd}\N{U+a1aa}",
      "\N{U+a44d}\N{U+a1aa}",
      "\N{U+a315}\N{U+a1aa}",
      "\N{U+a1d6}\N{U+a1aa}",
      "\N{U+a26c}\N{U+a1aa}",
      "\N{U+a0d8}\N{U+a1aa}",
      "\N{U+a3c3}\N{U+a1aa}",
      "\N{U+a246}\N{U+a1aa}",
      "\N{U+a22c}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a2aa}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a44b}\N{U+a1aa}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+a2cd}\N{U+a1aa}",
      "\N{U+a44d}\N{U+a1aa}",
      "\N{U+a315}\N{U+a1aa}",
      "\N{U+a1d6}\N{U+a1aa}",
      "\N{U+a26c}\N{U+a1aa}",
      "\N{U+a0d8}\N{U+a1aa}",
      "\N{U+a3c3}\N{U+a1aa}",
      "\N{U+a246}\N{U+a1aa}",
      "\N{U+a22c}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a2aa}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a44b}\N{U+a1aa}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+a2cd}\N{U+a1aa}",
      "\N{U+a44d}\N{U+a1aa}",
      "\N{U+a315}\N{U+a1aa}",
      "\N{U+a1d6}\N{U+a1aa}",
      "\N{U+a26c}\N{U+a1aa}",
      "\N{U+a0d8}\N{U+a1aa}",
      "\N{U+a3c3}\N{U+a1aa}",
      "\N{U+a246}\N{U+a1aa}",
      "\N{U+a22c}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a2aa}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a44b}\N{U+a1aa}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+a2cd}\N{U+a1aa}",
      "\N{U+a44d}\N{U+a1aa}",
      "\N{U+a315}\N{U+a1aa}",
      "\N{U+a1d6}\N{U+a1aa}",
      "\N{U+a26c}\N{U+a1aa}",
      "\N{U+a0d8}\N{U+a1aa}",
      "\N{U+a3c3}\N{U+a1aa}",
      "\N{U+a246}\N{U+a1aa}",
      "\N{U+a22c}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a2aa}\N{U+a1aa}",
      "\N{U+a2b0}\N{U+a44b}\N{U+a1aa}"
    ],
    name => "Sichuan Yi China",
    native_language => "\N{U+a188}\N{U+a320}\N{U+a259}",
    native_name => "\N{U+a188}\N{U+a320}\N{U+a259} \N{U+a34f}\N{U+a1e9}",
    native_script => undef,
    native_territory => "\N{U+a34f}\N{U+a1e9}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+a0c5}\N{U+a44c}",
      "\N{U+a0c5}\N{U+a3b8}",
      "\N{U+a0c5}\N{U+a375}",
      "\N{U+a0c5}\N{U+a2c6}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+a0c5}\N{U+a44c}",
      "\N{U+a0c5}\N{U+a3b8}",
      "\N{U+a0c5}\N{U+a375}",
      "\N{U+a0c5}\N{U+a2c6}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+a0c5}\N{U+a44c}",
      "\N{U+a0c5}\N{U+a3b8}",
      "\N{U+a0c5}\N{U+a375}",
      "\N{U+a0c5}\N{U+a2c6}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+a0c5}\N{U+a44c}",
      "\N{U+a0c5}\N{U+a3b8}",
      "\N{U+a0c5}\N{U+a375}",
      "\N{U+a0c5}\N{U+a2c6}"
    ],
    script => undef,
    territory => "China",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ is ]__
  {
    am_pm_abbreviated => [
      "f.h.",
      "e.h."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d.",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M. y",
      yMEd => "E, d.M.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "is",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "d.M.y",
    datetime_format_full => "{1} 'kl'. {0}",
    datetime_format_long => "{1} 'kl'. {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "m\N{U+00e1}n.",
      "\N{U+00fe}ri.",
      "mi\N{U+00f0}.",
      "fim.",
      "f\N{U+00f6}s.",
      "lau.",
      "sun."
    ],
    day_format_narrow => [
      "M",
      "\N{U+00de}",
      "M",
      "F",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "m\N{U+00e1}nudagur",
      "\N{U+00fe}ri\N{U+00f0}judagur",
      "mi\N{U+00f0}vikudagur",
      "fimmtudagur",
      "f\N{U+00f6}studagur",
      "laugardagur",
      "sunnudagur"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+00e1}n.",
      "\N{U+00fe}ri.",
      "mi\N{U+00f0}.",
      "fim.",
      "f\N{U+00f6}s.",
      "lau.",
      "sun."
    ],
    day_stand_alone_narrow => [
      "M",
      "\N{U+00de}",
      "M",
      "F",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "m\N{U+00e1}nudagur",
      "\N{U+00fe}ri\N{U+00f0}judagur",
      "mi\N{U+00f0}vikudagur",
      "fimmtudagur",
      "f\N{U+00f6}studagur",
      "laugardagur",
      "sunnudagur"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "f.k.",
      "e.k."
    ],
    era_wide => [
      "fyrir Krist",
      "eftir Krist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Icelandic",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mar.",
      "apr.",
      "ma\N{U+00ed}",
      "j\N{U+00fa}n.",
      "j\N{U+00fa}l.",
      "\N{U+00e1}g\N{U+00fa}.",
      "sep.",
      "okt.",
      "n\N{U+00f3}v.",
      "des."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "\N{U+00c1}",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "jan\N{U+00fa}ar",
      "febr\N{U+00fa}ar",
      "mars",
      "apr\N{U+00ed}l",
      "ma\N{U+00ed}",
      "j\N{U+00fa}n\N{U+00ed}",
      "j\N{U+00fa}l\N{U+00ed}",
      "\N{U+00e1}g\N{U+00fa}st",
      "september",
      "okt\N{U+00f3}ber",
      "n\N{U+00f3}vember",
      "desember"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "feb.",
      "mar.",
      "apr.",
      "ma\N{U+00ed}",
      "j\N{U+00fa}n.",
      "j\N{U+00fa}l.",
      "\N{U+00e1}g\N{U+00fa}.",
      "sep.",
      "okt.",
      "n\N{U+00f3}v.",
      "des."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "\N{U+00c1}",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "jan\N{U+00fa}ar",
      "febr\N{U+00fa}ar",
      "mars",
      "apr\N{U+00ed}l",
      "ma\N{U+00ed}",
      "j\N{U+00fa}n\N{U+00ed}",
      "j\N{U+00fa}l\N{U+00ed}",
      "\N{U+00e1}g\N{U+00fa}st",
      "september",
      "okt\N{U+00f3}ber",
      "n\N{U+00f3}vember",
      "desember"
    ],
    name => "Icelandic",
    native_language => "\N{U+00ed}slenska",
    native_name => "\N{U+00ed}slenska",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "F1",
      "F2",
      "F3",
      "F4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. fj\N{U+00f3}r\N{U+00f0}ungur",
      "2. fj\N{U+00f3}r\N{U+00f0}ungur",
      "3. fj\N{U+00f3}r\N{U+00f0}ungur",
      "4. fj\N{U+00f3}r\N{U+00f0}ungur"
    ],
    quarter_stand_alone_abbreviated => [
      "F1",
      "F2",
      "F3",
      "F4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. fj\N{U+00f3}r\N{U+00f0}ungur",
      "2. fj\N{U+00f3}r\N{U+00f0}ungur",
      "3. fj\N{U+00f3}r\N{U+00f0}ungur",
      "4. fj\N{U+00f3}r\N{U+00f0}ungur"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ is-IS ]__
  {
    am_pm_abbreviated => [
      "f.h.",
      "e.h."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E d.",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M. y",
      yMEd => "E, d.M.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "is-IS",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "d.M.y",
    datetime_format_full => "{1} 'kl'. {0}",
    datetime_format_long => "{1} 'kl'. {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "m\N{U+00e1}n.",
      "\N{U+00fe}ri.",
      "mi\N{U+00f0}.",
      "fim.",
      "f\N{U+00f6}s.",
      "lau.",
      "sun."
    ],
    day_format_narrow => [
      "M",
      "\N{U+00de}",
      "M",
      "F",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "m\N{U+00e1}nudagur",
      "\N{U+00fe}ri\N{U+00f0}judagur",
      "mi\N{U+00f0}vikudagur",
      "fimmtudagur",
      "f\N{U+00f6}studagur",
      "laugardagur",
      "sunnudagur"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+00e1}n.",
      "\N{U+00fe}ri.",
      "mi\N{U+00f0}.",
      "fim.",
      "f\N{U+00f6}s.",
      "lau.",
      "sun."
    ],
    day_stand_alone_narrow => [
      "M",
      "\N{U+00de}",
      "M",
      "F",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "m\N{U+00e1}nudagur",
      "\N{U+00fe}ri\N{U+00f0}judagur",
      "mi\N{U+00f0}vikudagur",
      "fimmtudagur",
      "f\N{U+00f6}studagur",
      "laugardagur",
      "sunnudagur"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "f.k.",
      "e.k."
    ],
    era_wide => [
      "fyrir Krist",
      "eftir Krist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%a %e.%b %Y",
    glibc_datetime_format => "%a %e.%b %Y, %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Icelandic",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mar.",
      "apr.",
      "ma\N{U+00ed}",
      "j\N{U+00fa}n.",
      "j\N{U+00fa}l.",
      "\N{U+00e1}g\N{U+00fa}.",
      "sep.",
      "okt.",
      "n\N{U+00f3}v.",
      "des."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "\N{U+00c1}",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "jan\N{U+00fa}ar",
      "febr\N{U+00fa}ar",
      "mars",
      "apr\N{U+00ed}l",
      "ma\N{U+00ed}",
      "j\N{U+00fa}n\N{U+00ed}",
      "j\N{U+00fa}l\N{U+00ed}",
      "\N{U+00e1}g\N{U+00fa}st",
      "september",
      "okt\N{U+00f3}ber",
      "n\N{U+00f3}vember",
      "desember"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "feb.",
      "mar.",
      "apr.",
      "ma\N{U+00ed}",
      "j\N{U+00fa}n.",
      "j\N{U+00fa}l.",
      "\N{U+00e1}g\N{U+00fa}.",
      "sep.",
      "okt.",
      "n\N{U+00f3}v.",
      "des."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "\N{U+00c1}",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "jan\N{U+00fa}ar",
      "febr\N{U+00fa}ar",
      "mars",
      "apr\N{U+00ed}l",
      "ma\N{U+00ed}",
      "j\N{U+00fa}n\N{U+00ed}",
      "j\N{U+00fa}l\N{U+00ed}",
      "\N{U+00e1}g\N{U+00fa}st",
      "september",
      "okt\N{U+00f3}ber",
      "n\N{U+00f3}vember",
      "desember"
    ],
    name => "Icelandic Iceland",
    native_language => "\N{U+00ed}slenska",
    native_name => "\N{U+00ed}slenska \N{U+00cd}sland",
    native_script => undef,
    native_territory => "\N{U+00cd}sland",
    native_variant => undef,
    quarter_format_abbreviated => [
      "F1",
      "F2",
      "F3",
      "F4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. fj\N{U+00f3}r\N{U+00f0}ungur",
      "2. fj\N{U+00f3}r\N{U+00f0}ungur",
      "3. fj\N{U+00f3}r\N{U+00f0}ungur",
      "4. fj\N{U+00f3}r\N{U+00f0}ungur"
    ],
    quarter_stand_alone_abbreviated => [
      "F1",
      "F2",
      "F3",
      "F4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. fj\N{U+00f3}r\N{U+00f0}ungur",
      "2. fj\N{U+00f3}r\N{U+00f0}ungur",
      "3. fj\N{U+00f3}r\N{U+00f0}ungur",
      "4. fj\N{U+00f3}r\N{U+00f0}ungur"
    ],
    script => undef,
    territory => "Iceland",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ it ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "it",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "dd MMM y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "lun",
      "mar",
      "mer",
      "gio",
      "ven",
      "sab",
      "dom"
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "G",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "luned\N{U+00ec}",
      "marted\N{U+00ec}",
      "mercoled\N{U+00ec}",
      "gioved\N{U+00ec}",
      "venerd\N{U+00ec}",
      "sabato",
      "domenica"
    ],
    day_stand_alone_abbreviated => [
      "lun",
      "mar",
      "mer",
      "gio",
      "ven",
      "sab",
      "dom"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "G",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "Luned\N{U+00ec}",
      "Marted\N{U+00ec}",
      "Mercoled\N{U+00ec}",
      "Gioved\N{U+00ec}",
      "Venerd\N{U+00ec}",
      "Sabato",
      "Domenica"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "aC",
      "dC"
    ],
    era_wide => [
      "a.C.",
      "d.C."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Italian",
    month_format_abbreviated => [
      "gen",
      "feb",
      "mar",
      "apr",
      "mag",
      "giu",
      "lug",
      "ago",
      "set",
      "ott",
      "nov",
      "dic"
    ],
    month_format_narrow => [
      "G",
      "F",
      "M",
      "A",
      "M",
      "G",
      "L",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "gennaio",
      "febbraio",
      "marzo",
      "aprile",
      "maggio",
      "giugno",
      "luglio",
      "agosto",
      "settembre",
      "ottobre",
      "novembre",
      "dicembre"
    ],
    month_stand_alone_abbreviated => [
      "gen",
      "feb",
      "mar",
      "apr",
      "mag",
      "giu",
      "lug",
      "ago",
      "set",
      "ott",
      "nov",
      "dic"
    ],
    month_stand_alone_narrow => [
      "G",
      "F",
      "M",
      "A",
      "M",
      "G",
      "L",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Gennaio",
      "Febbraio",
      "Marzo",
      "Aprile",
      "Maggio",
      "Giugno",
      "Luglio",
      "Agosto",
      "Settembre",
      "Ottobre",
      "Novembre",
      "Dicembre"
    ],
    name => "Italian",
    native_language => "italiano",
    native_name => "italiano",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+00ba} trimestre",
      "2\N{U+00ba} trimestre",
      "3\N{U+00ba} trimestre",
      "4\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+00ba} trimestre",
      "2\N{U+00ba} trimestre",
      "3\N{U+00ba} trimestre",
      "4\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ it-CH ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "it-CH",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "lun",
      "mar",
      "mer",
      "gio",
      "ven",
      "sab",
      "dom"
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "G",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "luned\N{U+00ec}",
      "marted\N{U+00ec}",
      "mercoled\N{U+00ec}",
      "gioved\N{U+00ec}",
      "venerd\N{U+00ec}",
      "sabato",
      "domenica"
    ],
    day_stand_alone_abbreviated => [
      "lun",
      "mar",
      "mer",
      "gio",
      "ven",
      "sab",
      "dom"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "G",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "Luned\N{U+00ec}",
      "Marted\N{U+00ec}",
      "Mercoled\N{U+00ec}",
      "Gioved\N{U+00ec}",
      "Venerd\N{U+00ec}",
      "Sabato",
      "Domenica"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "aC",
      "dC"
    ],
    era_wide => [
      "a.C.",
      "d.C."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %e %b %Y, %H.%M.%S, %Z",
    glibc_date_format => "%d. %m. %y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Italian",
    month_format_abbreviated => [
      "gen",
      "feb",
      "mar",
      "apr",
      "mag",
      "giu",
      "lug",
      "ago",
      "set",
      "ott",
      "nov",
      "dic"
    ],
    month_format_narrow => [
      "G",
      "F",
      "M",
      "A",
      "M",
      "G",
      "L",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "gennaio",
      "febbraio",
      "marzo",
      "aprile",
      "maggio",
      "giugno",
      "luglio",
      "agosto",
      "settembre",
      "ottobre",
      "novembre",
      "dicembre"
    ],
    month_stand_alone_abbreviated => [
      "gen",
      "feb",
      "mar",
      "apr",
      "mag",
      "giu",
      "lug",
      "ago",
      "set",
      "ott",
      "nov",
      "dic"
    ],
    month_stand_alone_narrow => [
      "G",
      "F",
      "M",
      "A",
      "M",
      "G",
      "L",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "gennaio",
      "febbraio",
      "marzo",
      "aprile",
      "maggio",
      "giugno",
      "luglio",
      "agosto",
      "settembre",
      "ottobre",
      "novembre",
      "dicembre"
    ],
    name => "Italian Switzerland",
    native_language => "italiano",
    native_name => "italiano Svizzera",
    native_script => undef,
    native_territory => "Svizzera",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+00ba} trimestre",
      "2\N{U+00ba} trimestre",
      "3\N{U+00ba} trimestre",
      "4\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+00ba} trimestre",
      "2\N{U+00ba} trimestre",
      "3\N{U+00ba} trimestre",
      "4\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Switzerland",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ it-IT ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "it-IT",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "dd MMM y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "lun",
      "mar",
      "mer",
      "gio",
      "ven",
      "sab",
      "dom"
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "G",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "luned\N{U+00ec}",
      "marted\N{U+00ec}",
      "mercoled\N{U+00ec}",
      "gioved\N{U+00ec}",
      "venerd\N{U+00ec}",
      "sabato",
      "domenica"
    ],
    day_stand_alone_abbreviated => [
      "lun",
      "mar",
      "mer",
      "gio",
      "ven",
      "sab",
      "dom"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "G",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "Luned\N{U+00ec}",
      "Marted\N{U+00ec}",
      "Mercoled\N{U+00ec}",
      "Gioved\N{U+00ec}",
      "Venerd\N{U+00ec}",
      "Sabato",
      "Domenica"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "aC",
      "dC"
    ],
    era_wide => [
      "a.C.",
      "d.C."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %e %b %Y, %H.%M.%S, %Z",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Italian",
    month_format_abbreviated => [
      "gen",
      "feb",
      "mar",
      "apr",
      "mag",
      "giu",
      "lug",
      "ago",
      "set",
      "ott",
      "nov",
      "dic"
    ],
    month_format_narrow => [
      "G",
      "F",
      "M",
      "A",
      "M",
      "G",
      "L",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "gennaio",
      "febbraio",
      "marzo",
      "aprile",
      "maggio",
      "giugno",
      "luglio",
      "agosto",
      "settembre",
      "ottobre",
      "novembre",
      "dicembre"
    ],
    month_stand_alone_abbreviated => [
      "gen",
      "feb",
      "mar",
      "apr",
      "mag",
      "giu",
      "lug",
      "ago",
      "set",
      "ott",
      "nov",
      "dic"
    ],
    month_stand_alone_narrow => [
      "G",
      "F",
      "M",
      "A",
      "M",
      "G",
      "L",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Gennaio",
      "Febbraio",
      "Marzo",
      "Aprile",
      "Maggio",
      "Giugno",
      "Luglio",
      "Agosto",
      "Settembre",
      "Ottobre",
      "Novembre",
      "Dicembre"
    ],
    name => "Italian Italy",
    native_language => "italiano",
    native_name => "italiano Italia",
    native_script => undef,
    native_territory => "Italia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+00ba} trimestre",
      "2\N{U+00ba} trimestre",
      "3\N{U+00ba} trimestre",
      "4\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+00ba} trimestre",
      "2\N{U+00ba} trimestre",
      "3\N{U+00ba} trimestre",
      "4\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Italy",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ it-SM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "it-SM",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "dd MMM y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "lun",
      "mar",
      "mer",
      "gio",
      "ven",
      "sab",
      "dom"
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "G",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "luned\N{U+00ec}",
      "marted\N{U+00ec}",
      "mercoled\N{U+00ec}",
      "gioved\N{U+00ec}",
      "venerd\N{U+00ec}",
      "sabato",
      "domenica"
    ],
    day_stand_alone_abbreviated => [
      "lun",
      "mar",
      "mer",
      "gio",
      "ven",
      "sab",
      "dom"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "G",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "Luned\N{U+00ec}",
      "Marted\N{U+00ec}",
      "Mercoled\N{U+00ec}",
      "Gioved\N{U+00ec}",
      "Venerd\N{U+00ec}",
      "Sabato",
      "Domenica"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "aC",
      "dC"
    ],
    era_wide => [
      "a.C.",
      "d.C."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Italian",
    month_format_abbreviated => [
      "gen",
      "feb",
      "mar",
      "apr",
      "mag",
      "giu",
      "lug",
      "ago",
      "set",
      "ott",
      "nov",
      "dic"
    ],
    month_format_narrow => [
      "G",
      "F",
      "M",
      "A",
      "M",
      "G",
      "L",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "gennaio",
      "febbraio",
      "marzo",
      "aprile",
      "maggio",
      "giugno",
      "luglio",
      "agosto",
      "settembre",
      "ottobre",
      "novembre",
      "dicembre"
    ],
    month_stand_alone_abbreviated => [
      "gen",
      "feb",
      "mar",
      "apr",
      "mag",
      "giu",
      "lug",
      "ago",
      "set",
      "ott",
      "nov",
      "dic"
    ],
    month_stand_alone_narrow => [
      "G",
      "F",
      "M",
      "A",
      "M",
      "G",
      "L",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Gennaio",
      "Febbraio",
      "Marzo",
      "Aprile",
      "Maggio",
      "Giugno",
      "Luglio",
      "Agosto",
      "Settembre",
      "Ottobre",
      "Novembre",
      "Dicembre"
    ],
    name => "Italian San Marino",
    native_language => "italiano",
    native_name => "italiano San Marino",
    native_script => undef,
    native_territory => "San Marino",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+00ba} trimestre",
      "2\N{U+00ba} trimestre",
      "3\N{U+00ba} trimestre",
      "4\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+00ba} trimestre",
      "2\N{U+00ba} trimestre",
      "3\N{U+00ba} trimestre",
      "4\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "San Marino",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ja ]__
  {
    am_pm_abbreviated => [
      "\N{U+5348}\N{U+524d}",
      "\N{U+5348}\N{U+5f8c}"
    ],
    available_formats => {
      E => "ccc",
      EEEEd => "d\N{U+65e5}EEEE",
      EHm => "H:mm (E)",
      EHms => "H:mm:ss (E)",
      Ed => "d\N{U+65e5}(E)",
      Ehm => "aK:mm (E)",
      Ehms => "aK:mm:ss (E)",
      Gy => "Gy\N{U+5e74}",
      GyMMM => "Gy\N{U+5e74}M\N{U+6708}",
      GyMMMEEEEd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}EEEE",
      GyMMMEd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}(E)",
      GyMMMd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      H => "H\N{U+6642}",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmv => "H:mm v",
      M => "M\N{U+6708}",
      MEEEEd => "M/dEEEE",
      MEd => "M/d(E)",
      MMM => "M\N{U+6708}",
      MMMEEEEd => "M\N{U+6708}d\N{U+65e5}EEEE",
      MMMEd => "M\N{U+6708}d\N{U+65e5}(E)",
      MMMMd => "M\N{U+6708}d\N{U+65e5}",
      MMMd => "M\N{U+6708}d\N{U+65e5}",
      Md => "M/d",
      d => "d\N{U+65e5}",
      h => "aK\N{U+6642}",
      hm => "aK:mm",
      hms => "aK:mm:ss",
      hmsv => "aK:mm:ss v",
      hmv => "aK:mm v",
      ms => "mm:ss",
      y => "y\N{U+5e74}",
      yM => "y/M",
      yMEEEEd => "y/M/dEEEE",
      yMEd => "y/M/d(E)",
      yMM => "y/MM",
      yMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMEEEEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}EEEE",
      yMMMEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}(E)",
      yMMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      yMd => "y/M/d",
      yQQQ => "y/QQQ",
      yQQQQ => "yQQQQ"
    },
    code => "ja",
    date_format_full => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}EEEE",
    date_format_long => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_medium => "y/MM/dd",
    date_format_short => "y/MM/dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+6708}",
      "\N{U+706b}",
      "\N{U+6c34}",
      "\N{U+6728}",
      "\N{U+91d1}",
      "\N{U+571f}",
      "\N{U+65e5}"
    ],
    day_format_narrow => [
      "\N{U+6708}",
      "\N{U+706b}",
      "\N{U+6c34}",
      "\N{U+6728}",
      "\N{U+91d1}",
      "\N{U+571f}",
      "\N{U+65e5}"
    ],
    day_format_wide => [
      "\N{U+6708}\N{U+66dc}\N{U+65e5}",
      "\N{U+706b}\N{U+66dc}\N{U+65e5}",
      "\N{U+6c34}\N{U+66dc}\N{U+65e5}",
      "\N{U+6728}\N{U+66dc}\N{U+65e5}",
      "\N{U+91d1}\N{U+66dc}\N{U+65e5}",
      "\N{U+571f}\N{U+66dc}\N{U+65e5}",
      "\N{U+65e5}\N{U+66dc}\N{U+65e5}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+6708}",
      "\N{U+706b}",
      "\N{U+6c34}",
      "\N{U+6728}",
      "\N{U+91d1}",
      "\N{U+571f}",
      "\N{U+65e5}"
    ],
    day_stand_alone_narrow => [
      "\N{U+6708}",
      "\N{U+706b}",
      "\N{U+6c34}",
      "\N{U+6728}",
      "\N{U+91d1}",
      "\N{U+571f}",
      "\N{U+65e5}"
    ],
    day_stand_alone_wide => [
      "\N{U+6708}\N{U+66dc}\N{U+65e5}",
      "\N{U+706b}\N{U+66dc}\N{U+65e5}",
      "\N{U+6c34}\N{U+66dc}\N{U+65e5}",
      "\N{U+6728}\N{U+66dc}\N{U+65e5}",
      "\N{U+91d1}\N{U+66dc}\N{U+65e5}",
      "\N{U+571f}\N{U+66dc}\N{U+65e5}",
      "\N{U+65e5}\N{U+66dc}\N{U+65e5}"
    ],
    era_abbreviated => [
      "\N{U+7d00}\N{U+5143}\N{U+524d}",
      "\N{U+897f}\N{U+66a6}"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "\N{U+7d00}\N{U+5143}\N{U+524d}",
      "\N{U+897f}\N{U+66a6}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Japanese",
    month_format_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    name => "Japanese",
    native_language => "\N{U+65e5}\N{U+672c}\N{U+8a9e}",
    native_name => "\N{U+65e5}\N{U+672c}\N{U+8a9e}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+7b2c}1\N{U+56db}\N{U+534a}\N{U+671f}",
      "\N{U+7b2c}2\N{U+56db}\N{U+534a}\N{U+671f}",
      "\N{U+7b2c}3\N{U+56db}\N{U+534a}\N{U+671f}",
      "\N{U+7b2c}4\N{U+56db}\N{U+534a}\N{U+671f}"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+7b2c}1\N{U+56db}\N{U+534a}\N{U+671f}",
      "\N{U+7b2c}2\N{U+56db}\N{U+534a}\N{U+671f}",
      "\N{U+7b2c}3\N{U+56db}\N{U+534a}\N{U+671f}",
      "\N{U+7b2c}4\N{U+56db}\N{U+534a}\N{U+671f}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H\N{U+6642}mm\N{U+5206}ss\N{U+79d2} zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ jgo ]__
  {
    am_pm_abbreviated => [
      "mba\N{U+a78c}mba\N{U+a78c}",
      "\N{U+014b}ka mb\N{U+0254}\N{U+0301}t nji"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "d.M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "M.d.y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "jgo",
    date_format_full => "EEEE, y MMMM dd",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "M\N{U+0254}\N{U+0301}ndi",
      "\N{U+00c1}pta M\N{U+0254}\N{U+0301}ndi",
      "W\N{U+025b}\N{U+0301}n\N{U+025b}s\N{U+025b}d\N{U+025b}",
      "T\N{U+0254}\N{U+0301}s\N{U+025b}d\N{U+025b}",
      "F\N{U+025b}l\N{U+00e2}y\N{U+025b}d\N{U+025b}",
      "S\N{U+00e1}sid\N{U+025b}",
      "S\N{U+0254}\N{U+0301}ndi"
    ],
    day_format_narrow => [
      "M\N{U+0254}\N{U+0301}",
      "\N{U+00c1}M",
      "W\N{U+025b}\N{U+0301}",
      "T\N{U+0254}\N{U+0301}",
      "F\N{U+025b}",
      "S\N{U+00e1}",
      "S\N{U+0254}\N{U+0301}"
    ],
    day_format_wide => [
      "M\N{U+0254}\N{U+0301}ndi",
      "\N{U+00c1}pta M\N{U+0254}\N{U+0301}ndi",
      "W\N{U+025b}\N{U+0301}n\N{U+025b}s\N{U+025b}d\N{U+025b}",
      "T\N{U+0254}\N{U+0301}s\N{U+025b}d\N{U+025b}",
      "F\N{U+025b}l\N{U+00e2}y\N{U+025b}d\N{U+025b}",
      "S\N{U+00e1}sid\N{U+025b}",
      "S\N{U+0254}\N{U+0301}ndi"
    ],
    day_stand_alone_abbreviated => [
      "M\N{U+0254}\N{U+0301}ndi",
      "\N{U+00c1}pta M\N{U+0254}\N{U+0301}ndi",
      "W\N{U+025b}\N{U+0301}n\N{U+025b}s\N{U+025b}d\N{U+025b}",
      "T\N{U+0254}\N{U+0301}s\N{U+025b}d\N{U+025b}",
      "F\N{U+025b}l\N{U+00e2}y\N{U+025b}d\N{U+025b}",
      "S\N{U+00e1}sid\N{U+025b}",
      "S\N{U+0254}\N{U+0301}ndi"
    ],
    day_stand_alone_narrow => [
      "M\N{U+0254}\N{U+0301}",
      "\N{U+00c1}M",
      "W\N{U+025b}\N{U+0301}",
      "T\N{U+0254}\N{U+0301}",
      "F\N{U+025b}",
      "S\N{U+00e1}",
      "S\N{U+0254}\N{U+0301}"
    ],
    day_stand_alone_wide => [
      "M\N{U+0254}\N{U+0301}ndi",
      "\N{U+00c1}pta M\N{U+0254}\N{U+0301}ndi",
      "W\N{U+025b}\N{U+0301}n\N{U+025b}s\N{U+025b}d\N{U+025b}",
      "T\N{U+0254}\N{U+0301}s\N{U+025b}d\N{U+025b}",
      "F\N{U+025b}l\N{U+00e2}y\N{U+025b}d\N{U+025b}",
      "S\N{U+00e1}sid\N{U+025b}",
      "S\N{U+0254}\N{U+0301}ndi"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "ts\N{U+025b}tts\N{U+025b}t m\N{U+025b}\N{U+014b}gu\N{U+a78c} mi \N{U+025b}\N{U+0301} l\N{U+025b}\N{U+025b}n\N{U+025b} K\N{U+025b}l\N{U+00ed}s\N{U+025b}t\N{U+0254} g\N{U+0254} \N{U+0144}\N{U+0254}\N{U+0301}",
      "ts\N{U+025b}tts\N{U+025b}t m\N{U+025b}\N{U+014b}gu\N{U+a78c} mi \N{U+025b}\N{U+0301} f\N{U+00fa}n\N{U+025b} K\N{U+025b}l\N{U+00ed}s\N{U+025b}t\N{U+0254} t\N{U+0254}\N{U+0301} m\N{U+0254}\N{U+0301}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Ngomba",
    month_format_abbreviated => [
      "Ndu\N{U+014b}mbi Sa\N{U+014b}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}p\N{U+00e1}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}t\N{U+00e1}t",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}kwa",
      "P\N{U+025b}sa\N{U+014b} Pataa",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}nt\N{U+00fa}k\N{U+00fa}",
      "P\N{U+025b}sa\N{U+014b} Saamb\N{U+00e1}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}f\N{U+0254}m",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}pf\N{U+00fa}\N{U+a78b}\N{U+00fa}",
      "P\N{U+025b}sa\N{U+014b} N\N{U+025b}g\N{U+025b}\N{U+0301}m",
      "P\N{U+025b}sa\N{U+014b} Nts\N{U+0254}\N{U+030c}pm\N{U+0254}\N{U+0301}",
      "P\N{U+025b}sa\N{U+014b} Nts\N{U+0254}\N{U+030c}pp\N{U+00e1}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Ndu\N{U+014b}mbi Sa\N{U+014b}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}p\N{U+00e1}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}t\N{U+00e1}t",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}kwa",
      "P\N{U+025b}sa\N{U+014b} Pataa",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}nt\N{U+00fa}k\N{U+00fa}",
      "P\N{U+025b}sa\N{U+014b} Saamb\N{U+00e1}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}f\N{U+0254}m",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}pf\N{U+00fa}\N{U+a78b}\N{U+00fa}",
      "P\N{U+025b}sa\N{U+014b} N\N{U+025b}g\N{U+025b}\N{U+0301}m",
      "P\N{U+025b}sa\N{U+014b} Nts\N{U+0254}\N{U+030c}pm\N{U+0254}\N{U+0301}",
      "P\N{U+025b}sa\N{U+014b} Nts\N{U+0254}\N{U+030c}pp\N{U+00e1}"
    ],
    month_stand_alone_abbreviated => [
      "Ndu\N{U+014b}mbi Sa\N{U+014b}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}p\N{U+00e1}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}t\N{U+00e1}t",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}kwa",
      "P\N{U+025b}sa\N{U+014b} Pataa",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}nt\N{U+00fa}k\N{U+00fa}",
      "P\N{U+025b}sa\N{U+014b} Saamb\N{U+00e1}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}f\N{U+0254}m",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}pf\N{U+00fa}\N{U+a78b}\N{U+00fa}",
      "P\N{U+025b}sa\N{U+014b} N\N{U+025b}g\N{U+025b}\N{U+0301}m",
      "P\N{U+025b}sa\N{U+014b} Nts\N{U+0254}\N{U+030c}pm\N{U+0254}\N{U+0301}",
      "P\N{U+025b}sa\N{U+014b} Nts\N{U+0254}\N{U+030c}pp\N{U+00e1}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Ndu\N{U+014b}mbi Sa\N{U+014b}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}p\N{U+00e1}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}t\N{U+00e1}t",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}kwa",
      "P\N{U+025b}sa\N{U+014b} Pataa",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}nt\N{U+00fa}k\N{U+00fa}",
      "P\N{U+025b}sa\N{U+014b} Saamb\N{U+00e1}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}f\N{U+0254}m",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}pf\N{U+00fa}\N{U+a78b}\N{U+00fa}",
      "P\N{U+025b}sa\N{U+014b} N\N{U+025b}g\N{U+025b}\N{U+0301}m",
      "P\N{U+025b}sa\N{U+014b} Nts\N{U+0254}\N{U+030c}pm\N{U+0254}\N{U+0301}",
      "P\N{U+025b}sa\N{U+014b} Nts\N{U+0254}\N{U+030c}pp\N{U+00e1}"
    ],
    name => "Ngomba",
    native_language => "Nda\N{U+a78c}a",
    native_name => "Nda\N{U+a78c}a",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ jgo-CM ]__
  {
    am_pm_abbreviated => [
      "mba\N{U+a78c}mba\N{U+a78c}",
      "\N{U+014b}ka mb\N{U+0254}\N{U+0301}t nji"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "d.M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "M.d.y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "jgo-CM",
    date_format_full => "EEEE, y MMMM dd",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "M\N{U+0254}\N{U+0301}ndi",
      "\N{U+00c1}pta M\N{U+0254}\N{U+0301}ndi",
      "W\N{U+025b}\N{U+0301}n\N{U+025b}s\N{U+025b}d\N{U+025b}",
      "T\N{U+0254}\N{U+0301}s\N{U+025b}d\N{U+025b}",
      "F\N{U+025b}l\N{U+00e2}y\N{U+025b}d\N{U+025b}",
      "S\N{U+00e1}sid\N{U+025b}",
      "S\N{U+0254}\N{U+0301}ndi"
    ],
    day_format_narrow => [
      "M\N{U+0254}\N{U+0301}",
      "\N{U+00c1}M",
      "W\N{U+025b}\N{U+0301}",
      "T\N{U+0254}\N{U+0301}",
      "F\N{U+025b}",
      "S\N{U+00e1}",
      "S\N{U+0254}\N{U+0301}"
    ],
    day_format_wide => [
      "M\N{U+0254}\N{U+0301}ndi",
      "\N{U+00c1}pta M\N{U+0254}\N{U+0301}ndi",
      "W\N{U+025b}\N{U+0301}n\N{U+025b}s\N{U+025b}d\N{U+025b}",
      "T\N{U+0254}\N{U+0301}s\N{U+025b}d\N{U+025b}",
      "F\N{U+025b}l\N{U+00e2}y\N{U+025b}d\N{U+025b}",
      "S\N{U+00e1}sid\N{U+025b}",
      "S\N{U+0254}\N{U+0301}ndi"
    ],
    day_stand_alone_abbreviated => [
      "M\N{U+0254}\N{U+0301}ndi",
      "\N{U+00c1}pta M\N{U+0254}\N{U+0301}ndi",
      "W\N{U+025b}\N{U+0301}n\N{U+025b}s\N{U+025b}d\N{U+025b}",
      "T\N{U+0254}\N{U+0301}s\N{U+025b}d\N{U+025b}",
      "F\N{U+025b}l\N{U+00e2}y\N{U+025b}d\N{U+025b}",
      "S\N{U+00e1}sid\N{U+025b}",
      "S\N{U+0254}\N{U+0301}ndi"
    ],
    day_stand_alone_narrow => [
      "M\N{U+0254}\N{U+0301}",
      "\N{U+00c1}M",
      "W\N{U+025b}\N{U+0301}",
      "T\N{U+0254}\N{U+0301}",
      "F\N{U+025b}",
      "S\N{U+00e1}",
      "S\N{U+0254}\N{U+0301}"
    ],
    day_stand_alone_wide => [
      "M\N{U+0254}\N{U+0301}ndi",
      "\N{U+00c1}pta M\N{U+0254}\N{U+0301}ndi",
      "W\N{U+025b}\N{U+0301}n\N{U+025b}s\N{U+025b}d\N{U+025b}",
      "T\N{U+0254}\N{U+0301}s\N{U+025b}d\N{U+025b}",
      "F\N{U+025b}l\N{U+00e2}y\N{U+025b}d\N{U+025b}",
      "S\N{U+00e1}sid\N{U+025b}",
      "S\N{U+0254}\N{U+0301}ndi"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "ts\N{U+025b}tts\N{U+025b}t m\N{U+025b}\N{U+014b}gu\N{U+a78c} mi \N{U+025b}\N{U+0301} l\N{U+025b}\N{U+025b}n\N{U+025b} K\N{U+025b}l\N{U+00ed}s\N{U+025b}t\N{U+0254} g\N{U+0254} \N{U+0144}\N{U+0254}\N{U+0301}",
      "ts\N{U+025b}tts\N{U+025b}t m\N{U+025b}\N{U+014b}gu\N{U+a78c} mi \N{U+025b}\N{U+0301} f\N{U+00fa}n\N{U+025b} K\N{U+025b}l\N{U+00ed}s\N{U+025b}t\N{U+0254} t\N{U+0254}\N{U+0301} m\N{U+0254}\N{U+0301}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Ngomba",
    month_format_abbreviated => [
      "Ndu\N{U+014b}mbi Sa\N{U+014b}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}p\N{U+00e1}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}t\N{U+00e1}t",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}kwa",
      "P\N{U+025b}sa\N{U+014b} Pataa",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}nt\N{U+00fa}k\N{U+00fa}",
      "P\N{U+025b}sa\N{U+014b} Saamb\N{U+00e1}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}f\N{U+0254}m",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}pf\N{U+00fa}\N{U+a78b}\N{U+00fa}",
      "P\N{U+025b}sa\N{U+014b} N\N{U+025b}g\N{U+025b}\N{U+0301}m",
      "P\N{U+025b}sa\N{U+014b} Nts\N{U+0254}\N{U+030c}pm\N{U+0254}\N{U+0301}",
      "P\N{U+025b}sa\N{U+014b} Nts\N{U+0254}\N{U+030c}pp\N{U+00e1}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Ndu\N{U+014b}mbi Sa\N{U+014b}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}p\N{U+00e1}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}t\N{U+00e1}t",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}kwa",
      "P\N{U+025b}sa\N{U+014b} Pataa",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}nt\N{U+00fa}k\N{U+00fa}",
      "P\N{U+025b}sa\N{U+014b} Saamb\N{U+00e1}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}f\N{U+0254}m",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}pf\N{U+00fa}\N{U+a78b}\N{U+00fa}",
      "P\N{U+025b}sa\N{U+014b} N\N{U+025b}g\N{U+025b}\N{U+0301}m",
      "P\N{U+025b}sa\N{U+014b} Nts\N{U+0254}\N{U+030c}pm\N{U+0254}\N{U+0301}",
      "P\N{U+025b}sa\N{U+014b} Nts\N{U+0254}\N{U+030c}pp\N{U+00e1}"
    ],
    month_stand_alone_abbreviated => [
      "Ndu\N{U+014b}mbi Sa\N{U+014b}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}p\N{U+00e1}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}t\N{U+00e1}t",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}kwa",
      "P\N{U+025b}sa\N{U+014b} Pataa",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}nt\N{U+00fa}k\N{U+00fa}",
      "P\N{U+025b}sa\N{U+014b} Saamb\N{U+00e1}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}f\N{U+0254}m",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}pf\N{U+00fa}\N{U+a78b}\N{U+00fa}",
      "P\N{U+025b}sa\N{U+014b} N\N{U+025b}g\N{U+025b}\N{U+0301}m",
      "P\N{U+025b}sa\N{U+014b} Nts\N{U+0254}\N{U+030c}pm\N{U+0254}\N{U+0301}",
      "P\N{U+025b}sa\N{U+014b} Nts\N{U+0254}\N{U+030c}pp\N{U+00e1}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Ndu\N{U+014b}mbi Sa\N{U+014b}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}p\N{U+00e1}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}t\N{U+00e1}t",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}kwa",
      "P\N{U+025b}sa\N{U+014b} Pataa",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}nt\N{U+00fa}k\N{U+00fa}",
      "P\N{U+025b}sa\N{U+014b} Saamb\N{U+00e1}",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}f\N{U+0254}m",
      "P\N{U+025b}sa\N{U+014b} P\N{U+025b}\N{U+0301}n\N{U+025b}\N{U+0301}pf\N{U+00fa}\N{U+a78b}\N{U+00fa}",
      "P\N{U+025b}sa\N{U+014b} N\N{U+025b}g\N{U+025b}\N{U+0301}m",
      "P\N{U+025b}sa\N{U+014b} Nts\N{U+0254}\N{U+030c}pm\N{U+0254}\N{U+0301}",
      "P\N{U+025b}sa\N{U+014b} Nts\N{U+0254}\N{U+030c}pp\N{U+00e1}"
    ],
    name => "Ngomba Cameroon",
    native_language => "Nda\N{U+a78c}a",
    native_name => "Nda\N{U+a78c}a Kam\N{U+025b}l\N{U+00fb}n",
    native_script => undef,
    native_territory => "Kam\N{U+025b}l\N{U+00fb}n",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Cameroon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ jmc ]__
  {
    am_pm_abbreviated => [
      "utuko",
      "kyiukonyi"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "jmc",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_format_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "J"
    ],
    day_format_wide => [
      "Jumatatuu",
      "Jumanne",
      "Jumatanu",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapilyi"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_stand_alone_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "J"
    ],
    day_stand_alone_wide => [
      "Jumatatuu",
      "Jumanne",
      "Jumatanu",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapilyi"
    ],
    era_abbreviated => [
      "KK",
      "BK"
    ],
    era_narrow => [
      "KK",
      "BK"
    ],
    era_wide => [
      "Kabla ya Kristu",
      "Baada ya Kristu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Machame",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprilyi",
      "Mei",
      "Junyi",
      "Julyai",
      "Agusti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprilyi",
      "Mei",
      "Junyi",
      "Julyai",
      "Agusti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Machame",
    native_language => "Kimachame",
    native_name => "Kimachame",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ jmc-TZ ]__
  {
    am_pm_abbreviated => [
      "utuko",
      "kyiukonyi"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "jmc-TZ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_format_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "J"
    ],
    day_format_wide => [
      "Jumatatuu",
      "Jumanne",
      "Jumatanu",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapilyi"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_stand_alone_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "J"
    ],
    day_stand_alone_wide => [
      "Jumatatuu",
      "Jumanne",
      "Jumatanu",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapilyi"
    ],
    era_abbreviated => [
      "KK",
      "BK"
    ],
    era_narrow => [
      "KK",
      "BK"
    ],
    era_wide => [
      "Kabla ya Kristu",
      "Baada ya Kristu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Machame",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprilyi",
      "Mei",
      "Junyi",
      "Julyai",
      "Agusti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprilyi",
      "Mei",
      "Junyi",
      "Julyai",
      "Agusti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Machame Tanzania",
    native_language => "Kimachame",
    native_name => "Kimachame Tanzania",
    native_script => undef,
    native_territory => "Tanzania",
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    script => undef,
    territory => "Tanzania",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ka ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "d E",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM. y G",
      GyMMMEd => "E, d MMM. y G",
      GyMMMd => "d MMM. y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d.M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "MMM. y",
      yMMMEd => "E, d MMM. y",
      yMMMM => "MMMM, y",
      yMMMd => "d MMM. y",
      yMd => "d.M.y",
      yQQQ => "QQQ, y",
      yQQQQ => "QQQQ, y"
    },
    code => "ka",
    date_format_full => "EEEE, dd MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM. y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+10dd}\N{U+10e0}\N{U+10e8}",
      "\N{U+10e1}\N{U+10d0}\N{U+10db}",
      "\N{U+10dd}\N{U+10d7}\N{U+10ee}",
      "\N{U+10ee}\N{U+10e3}\N{U+10d7}",
      "\N{U+10de}\N{U+10d0}\N{U+10e0}",
      "\N{U+10e8}\N{U+10d0}\N{U+10d1}",
      "\N{U+10d9}\N{U+10d5}\N{U+10d8}"
    ],
    day_format_narrow => [
      "\N{U+10dd}",
      "\N{U+10e1}",
      "\N{U+10dd}",
      "\N{U+10ee}",
      "\N{U+10de}",
      "\N{U+10e8}",
      "\N{U+10d9}"
    ],
    day_format_wide => [
      "\N{U+10dd}\N{U+10e0}\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10e1}\N{U+10d0}\N{U+10db}\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10dd}\N{U+10d7}\N{U+10ee}\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10ee}\N{U+10e3}\N{U+10d7}\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10de}\N{U+10d0}\N{U+10e0}\N{U+10d0}\N{U+10e1}\N{U+10d9}\N{U+10d4}\N{U+10d5}\N{U+10d8}",
      "\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10d9}\N{U+10d5}\N{U+10d8}\N{U+10e0}\N{U+10d0}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+10dd}\N{U+10e0}\N{U+10e8}",
      "\N{U+10e1}\N{U+10d0}\N{U+10db}",
      "\N{U+10dd}\N{U+10d7}\N{U+10ee}",
      "\N{U+10ee}\N{U+10e3}\N{U+10d7}",
      "\N{U+10de}\N{U+10d0}\N{U+10e0}",
      "\N{U+10e8}\N{U+10d0}\N{U+10d1}",
      "\N{U+10d9}\N{U+10d5}\N{U+10d8}"
    ],
    day_stand_alone_narrow => [
      "\N{U+10dd}",
      "\N{U+10e1}",
      "\N{U+10dd}",
      "\N{U+10ee}",
      "\N{U+10de}",
      "\N{U+10e8}",
      "\N{U+10d9}"
    ],
    day_stand_alone_wide => [
      "\N{U+10dd}\N{U+10e0}\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10e1}\N{U+10d0}\N{U+10db}\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10dd}\N{U+10d7}\N{U+10ee}\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10ee}\N{U+10e3}\N{U+10d7}\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10de}\N{U+10d0}\N{U+10e0}\N{U+10d0}\N{U+10e1}\N{U+10d9}\N{U+10d4}\N{U+10d5}\N{U+10d8}",
      "\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10d9}\N{U+10d5}\N{U+10d8}\N{U+10e0}\N{U+10d0}"
    ],
    era_abbreviated => [
      "\N{U+10eb}\N{U+10d5}. \N{U+10ec}.",
      "\N{U+10d0}\N{U+10ee}. \N{U+10ec}."
    ],
    era_narrow => [
      "\N{U+10eb}\N{U+10d5}. \N{U+10ec}.",
      "\N{U+10d0}\N{U+10ee}. \N{U+10ec}."
    ],
    era_wide => [
      "\N{U+10eb}\N{U+10d5}\N{U+10d4}\N{U+10da}\N{U+10d8} \N{U+10ec}\N{U+10d4}\N{U+10da}\N{U+10d7}\N{U+10d0}\N{U+10e6}\N{U+10e0}\N{U+10d8}\N{U+10ea}\N{U+10ee}\N{U+10d5}\N{U+10d8}\N{U+10d7}",
      "\N{U+10d0}\N{U+10ee}\N{U+10d0}\N{U+10da}\N{U+10d8} \N{U+10ec}\N{U+10d4}\N{U+10da}\N{U+10d7}\N{U+10d0}\N{U+10e6}\N{U+10e0}\N{U+10d8}\N{U+10ea}\N{U+10ee}\N{U+10d5}\N{U+10d8}\N{U+10d7}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Georgian",
    month_format_abbreviated => [
      "\N{U+10d8}\N{U+10d0}\N{U+10dc}",
      "\N{U+10d7}\N{U+10d4}\N{U+10d1}",
      "\N{U+10db}\N{U+10d0}\N{U+10e0}",
      "\N{U+10d0}\N{U+10de}\N{U+10e0}",
      "\N{U+10db}\N{U+10d0}\N{U+10d8}",
      "\N{U+10d8}\N{U+10d5}\N{U+10dc}",
      "\N{U+10d8}\N{U+10d5}\N{U+10da}",
      "\N{U+10d0}\N{U+10d2}\N{U+10d5}",
      "\N{U+10e1}\N{U+10d4}\N{U+10e5}",
      "\N{U+10dd}\N{U+10e5}\N{U+10e2}",
      "\N{U+10dc}\N{U+10dd}\N{U+10d4}",
      "\N{U+10d3}\N{U+10d4}\N{U+10d9}"
    ],
    month_format_narrow => [
      "\N{U+10d8}",
      "\N{U+10d7}",
      "\N{U+10db}",
      "\N{U+10d0}",
      "\N{U+10db}",
      "\N{U+10d8}",
      "\N{U+10d8}",
      "\N{U+10d0}",
      "\N{U+10e1}",
      "\N{U+10dd}",
      "\N{U+10dc}",
      "\N{U+10d3}"
    ],
    month_format_wide => [
      "\N{U+10d8}\N{U+10d0}\N{U+10dc}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10d8}",
      "\N{U+10d7}\N{U+10d4}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d5}\N{U+10d0}\N{U+10da}\N{U+10d8}",
      "\N{U+10db}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d8}",
      "\N{U+10d0}\N{U+10de}\N{U+10e0}\N{U+10d8}\N{U+10da}\N{U+10d8}",
      "\N{U+10db}\N{U+10d0}\N{U+10d8}\N{U+10e1}\N{U+10d8}",
      "\N{U+10d8}\N{U+10d5}\N{U+10dc}\N{U+10d8}\N{U+10e1}\N{U+10d8}",
      "\N{U+10d8}\N{U+10d5}\N{U+10da}\N{U+10d8}\N{U+10e1}\N{U+10d8}",
      "\N{U+10d0}\N{U+10d2}\N{U+10d5}\N{U+10d8}\N{U+10e1}\N{U+10e2}\N{U+10dd}",
      "\N{U+10e1}\N{U+10d4}\N{U+10e5}\N{U+10e2}\N{U+10d4}\N{U+10db}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d8}",
      "\N{U+10dd}\N{U+10e5}\N{U+10e2}\N{U+10dd}\N{U+10db}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d8}",
      "\N{U+10dc}\N{U+10dd}\N{U+10d4}\N{U+10db}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d8}",
      "\N{U+10d3}\N{U+10d4}\N{U+10d9}\N{U+10d4}\N{U+10db}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d8}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+10d8}\N{U+10d0}\N{U+10dc}",
      "\N{U+10d7}\N{U+10d4}\N{U+10d1}",
      "\N{U+10db}\N{U+10d0}\N{U+10e0}",
      "\N{U+10d0}\N{U+10de}\N{U+10e0}",
      "\N{U+10db}\N{U+10d0}\N{U+10d8}",
      "\N{U+10d8}\N{U+10d5}\N{U+10dc}",
      "\N{U+10d8}\N{U+10d5}\N{U+10da}",
      "\N{U+10d0}\N{U+10d2}\N{U+10d5}",
      "\N{U+10e1}\N{U+10d4}\N{U+10e5}",
      "\N{U+10dd}\N{U+10e5}\N{U+10e2}",
      "\N{U+10dc}\N{U+10dd}\N{U+10d4}",
      "\N{U+10d3}\N{U+10d4}\N{U+10d9}"
    ],
    month_stand_alone_narrow => [
      "\N{U+10d8}",
      "\N{U+10d7}",
      "\N{U+10db}",
      "\N{U+10d0}",
      "\N{U+10db}",
      "\N{U+10d8}",
      "\N{U+10d8}",
      "\N{U+10d0}",
      "\N{U+10e1}",
      "\N{U+10dd}",
      "\N{U+10dc}",
      "\N{U+10d3}"
    ],
    month_stand_alone_wide => [
      "\N{U+10d8}\N{U+10d0}\N{U+10dc}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10d8}",
      "\N{U+10d7}\N{U+10d4}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d5}\N{U+10d0}\N{U+10da}\N{U+10d8}",
      "\N{U+10db}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d8}",
      "\N{U+10d0}\N{U+10de}\N{U+10e0}\N{U+10d8}\N{U+10da}\N{U+10d8}",
      "\N{U+10db}\N{U+10d0}\N{U+10d8}\N{U+10e1}\N{U+10d8}",
      "\N{U+10d8}\N{U+10d5}\N{U+10dc}\N{U+10d8}\N{U+10e1}\N{U+10d8}",
      "\N{U+10d8}\N{U+10d5}\N{U+10da}\N{U+10d8}\N{U+10e1}\N{U+10d8}",
      "\N{U+10d0}\N{U+10d2}\N{U+10d5}\N{U+10d8}\N{U+10e1}\N{U+10e2}\N{U+10dd}",
      "\N{U+10e1}\N{U+10d4}\N{U+10e5}\N{U+10e2}\N{U+10d4}\N{U+10db}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d8}",
      "\N{U+10dd}\N{U+10e5}\N{U+10e2}\N{U+10dd}\N{U+10db}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d8}",
      "\N{U+10dc}\N{U+10dd}\N{U+10d4}\N{U+10db}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d8}",
      "\N{U+10d3}\N{U+10d4}\N{U+10d9}\N{U+10d4}\N{U+10db}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d8}"
    ],
    name => "Georgian",
    native_language => "\N{U+10e5}\N{U+10d0}\N{U+10e0}\N{U+10d7}\N{U+10e3}\N{U+10da}\N{U+10d8}",
    native_name => "\N{U+10e5}\N{U+10d0}\N{U+10e0}\N{U+10d7}\N{U+10e3}\N{U+10da}\N{U+10d8}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "I \N{U+10d9}\N{U+10d5}.",
      "II \N{U+10d9}\N{U+10d5}.",
      "III \N{U+10d9}\N{U+10d5}.",
      "IV \N{U+10d9}\N{U+10d5}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "I \N{U+10d9}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d0}\N{U+10da}\N{U+10d8}",
      "II \N{U+10d9}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d0}\N{U+10da}\N{U+10d8}",
      "III \N{U+10d9}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d0}\N{U+10da}\N{U+10d8}",
      "IV \N{U+10d9}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d0}\N{U+10da}\N{U+10d8}"
    ],
    quarter_stand_alone_abbreviated => [
      "I \N{U+10d9}\N{U+10d5}.",
      "II \N{U+10d9}\N{U+10d5}.",
      "III \N{U+10d9}\N{U+10d5}.",
      "IV \N{U+10d9}\N{U+10d5}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "I \N{U+10d9}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d0}\N{U+10da}\N{U+10d8}",
      "II \N{U+10d9}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d0}\N{U+10da}\N{U+10d8}",
      "III \N{U+10d9}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d0}\N{U+10da}\N{U+10d8}",
      "IV \N{U+10d9}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d0}\N{U+10da}\N{U+10d8}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ka-GE ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "d E",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM. y G",
      GyMMMEd => "E, d MMM. y G",
      GyMMMd => "d MMM. y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d.M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "MMM. y",
      yMMMEd => "E, d MMM. y",
      yMMMM => "MMMM, y",
      yMMMd => "d MMM. y",
      yMd => "d.M.y",
      yQQQ => "QQQ, y",
      yQQQQ => "QQQQ, y"
    },
    code => "ka-GE",
    date_format_full => "EEEE, dd MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM. y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+10dd}\N{U+10e0}\N{U+10e8}",
      "\N{U+10e1}\N{U+10d0}\N{U+10db}",
      "\N{U+10dd}\N{U+10d7}\N{U+10ee}",
      "\N{U+10ee}\N{U+10e3}\N{U+10d7}",
      "\N{U+10de}\N{U+10d0}\N{U+10e0}",
      "\N{U+10e8}\N{U+10d0}\N{U+10d1}",
      "\N{U+10d9}\N{U+10d5}\N{U+10d8}"
    ],
    day_format_narrow => [
      "\N{U+10dd}",
      "\N{U+10e1}",
      "\N{U+10dd}",
      "\N{U+10ee}",
      "\N{U+10de}",
      "\N{U+10e8}",
      "\N{U+10d9}"
    ],
    day_format_wide => [
      "\N{U+10dd}\N{U+10e0}\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10e1}\N{U+10d0}\N{U+10db}\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10dd}\N{U+10d7}\N{U+10ee}\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10ee}\N{U+10e3}\N{U+10d7}\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10de}\N{U+10d0}\N{U+10e0}\N{U+10d0}\N{U+10e1}\N{U+10d9}\N{U+10d4}\N{U+10d5}\N{U+10d8}",
      "\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10d9}\N{U+10d5}\N{U+10d8}\N{U+10e0}\N{U+10d0}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+10dd}\N{U+10e0}\N{U+10e8}",
      "\N{U+10e1}\N{U+10d0}\N{U+10db}",
      "\N{U+10dd}\N{U+10d7}\N{U+10ee}",
      "\N{U+10ee}\N{U+10e3}\N{U+10d7}",
      "\N{U+10de}\N{U+10d0}\N{U+10e0}",
      "\N{U+10e8}\N{U+10d0}\N{U+10d1}",
      "\N{U+10d9}\N{U+10d5}\N{U+10d8}"
    ],
    day_stand_alone_narrow => [
      "\N{U+10dd}",
      "\N{U+10e1}",
      "\N{U+10dd}",
      "\N{U+10ee}",
      "\N{U+10de}",
      "\N{U+10e8}",
      "\N{U+10d9}"
    ],
    day_stand_alone_wide => [
      "\N{U+10dd}\N{U+10e0}\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10e1}\N{U+10d0}\N{U+10db}\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10dd}\N{U+10d7}\N{U+10ee}\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10ee}\N{U+10e3}\N{U+10d7}\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10de}\N{U+10d0}\N{U+10e0}\N{U+10d0}\N{U+10e1}\N{U+10d9}\N{U+10d4}\N{U+10d5}\N{U+10d8}",
      "\N{U+10e8}\N{U+10d0}\N{U+10d1}\N{U+10d0}\N{U+10d7}\N{U+10d8}",
      "\N{U+10d9}\N{U+10d5}\N{U+10d8}\N{U+10e0}\N{U+10d0}"
    ],
    era_abbreviated => [
      "\N{U+10eb}\N{U+10d5}. \N{U+10ec}.",
      "\N{U+10d0}\N{U+10ee}. \N{U+10ec}."
    ],
    era_narrow => [
      "\N{U+10eb}\N{U+10d5}. \N{U+10ec}.",
      "\N{U+10d0}\N{U+10ee}. \N{U+10ec}."
    ],
    era_wide => [
      "\N{U+10eb}\N{U+10d5}\N{U+10d4}\N{U+10da}\N{U+10d8} \N{U+10ec}\N{U+10d4}\N{U+10da}\N{U+10d7}\N{U+10d0}\N{U+10e6}\N{U+10e0}\N{U+10d8}\N{U+10ea}\N{U+10ee}\N{U+10d5}\N{U+10d8}\N{U+10d7}",
      "\N{U+10d0}\N{U+10ee}\N{U+10d0}\N{U+10da}\N{U+10d8} \N{U+10ec}\N{U+10d4}\N{U+10da}\N{U+10d7}\N{U+10d0}\N{U+10e6}\N{U+10e0}\N{U+10d8}\N{U+10ea}\N{U+10ee}\N{U+10d5}\N{U+10d8}\N{U+10d7}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%Y",
    glibc_datetime_format => "%Y \N{U+10ec}\N{U+10da}\N{U+10d8}\N{U+10e1} %d %B, %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Georgian",
    month_format_abbreviated => [
      "\N{U+10d8}\N{U+10d0}\N{U+10dc}",
      "\N{U+10d7}\N{U+10d4}\N{U+10d1}",
      "\N{U+10db}\N{U+10d0}\N{U+10e0}",
      "\N{U+10d0}\N{U+10de}\N{U+10e0}",
      "\N{U+10db}\N{U+10d0}\N{U+10d8}",
      "\N{U+10d8}\N{U+10d5}\N{U+10dc}",
      "\N{U+10d8}\N{U+10d5}\N{U+10da}",
      "\N{U+10d0}\N{U+10d2}\N{U+10d5}",
      "\N{U+10e1}\N{U+10d4}\N{U+10e5}",
      "\N{U+10dd}\N{U+10e5}\N{U+10e2}",
      "\N{U+10dc}\N{U+10dd}\N{U+10d4}",
      "\N{U+10d3}\N{U+10d4}\N{U+10d9}"
    ],
    month_format_narrow => [
      "\N{U+10d8}",
      "\N{U+10d7}",
      "\N{U+10db}",
      "\N{U+10d0}",
      "\N{U+10db}",
      "\N{U+10d8}",
      "\N{U+10d8}",
      "\N{U+10d0}",
      "\N{U+10e1}",
      "\N{U+10dd}",
      "\N{U+10dc}",
      "\N{U+10d3}"
    ],
    month_format_wide => [
      "\N{U+10d8}\N{U+10d0}\N{U+10dc}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10d8}",
      "\N{U+10d7}\N{U+10d4}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d5}\N{U+10d0}\N{U+10da}\N{U+10d8}",
      "\N{U+10db}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d8}",
      "\N{U+10d0}\N{U+10de}\N{U+10e0}\N{U+10d8}\N{U+10da}\N{U+10d8}",
      "\N{U+10db}\N{U+10d0}\N{U+10d8}\N{U+10e1}\N{U+10d8}",
      "\N{U+10d8}\N{U+10d5}\N{U+10dc}\N{U+10d8}\N{U+10e1}\N{U+10d8}",
      "\N{U+10d8}\N{U+10d5}\N{U+10da}\N{U+10d8}\N{U+10e1}\N{U+10d8}",
      "\N{U+10d0}\N{U+10d2}\N{U+10d5}\N{U+10d8}\N{U+10e1}\N{U+10e2}\N{U+10dd}",
      "\N{U+10e1}\N{U+10d4}\N{U+10e5}\N{U+10e2}\N{U+10d4}\N{U+10db}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d8}",
      "\N{U+10dd}\N{U+10e5}\N{U+10e2}\N{U+10dd}\N{U+10db}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d8}",
      "\N{U+10dc}\N{U+10dd}\N{U+10d4}\N{U+10db}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d8}",
      "\N{U+10d3}\N{U+10d4}\N{U+10d9}\N{U+10d4}\N{U+10db}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d8}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+10d8}\N{U+10d0}\N{U+10dc}",
      "\N{U+10d7}\N{U+10d4}\N{U+10d1}",
      "\N{U+10db}\N{U+10d0}\N{U+10e0}",
      "\N{U+10d0}\N{U+10de}\N{U+10e0}",
      "\N{U+10db}\N{U+10d0}\N{U+10d8}",
      "\N{U+10d8}\N{U+10d5}\N{U+10dc}",
      "\N{U+10d8}\N{U+10d5}\N{U+10da}",
      "\N{U+10d0}\N{U+10d2}\N{U+10d5}",
      "\N{U+10e1}\N{U+10d4}\N{U+10e5}",
      "\N{U+10dd}\N{U+10e5}\N{U+10e2}",
      "\N{U+10dc}\N{U+10dd}\N{U+10d4}",
      "\N{U+10d3}\N{U+10d4}\N{U+10d9}"
    ],
    month_stand_alone_narrow => [
      "\N{U+10d8}",
      "\N{U+10d7}",
      "\N{U+10db}",
      "\N{U+10d0}",
      "\N{U+10db}",
      "\N{U+10d8}",
      "\N{U+10d8}",
      "\N{U+10d0}",
      "\N{U+10e1}",
      "\N{U+10dd}",
      "\N{U+10dc}",
      "\N{U+10d3}"
    ],
    month_stand_alone_wide => [
      "\N{U+10d8}\N{U+10d0}\N{U+10dc}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10d8}",
      "\N{U+10d7}\N{U+10d4}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d5}\N{U+10d0}\N{U+10da}\N{U+10d8}",
      "\N{U+10db}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d8}",
      "\N{U+10d0}\N{U+10de}\N{U+10e0}\N{U+10d8}\N{U+10da}\N{U+10d8}",
      "\N{U+10db}\N{U+10d0}\N{U+10d8}\N{U+10e1}\N{U+10d8}",
      "\N{U+10d8}\N{U+10d5}\N{U+10dc}\N{U+10d8}\N{U+10e1}\N{U+10d8}",
      "\N{U+10d8}\N{U+10d5}\N{U+10da}\N{U+10d8}\N{U+10e1}\N{U+10d8}",
      "\N{U+10d0}\N{U+10d2}\N{U+10d5}\N{U+10d8}\N{U+10e1}\N{U+10e2}\N{U+10dd}",
      "\N{U+10e1}\N{U+10d4}\N{U+10e5}\N{U+10e2}\N{U+10d4}\N{U+10db}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d8}",
      "\N{U+10dd}\N{U+10e5}\N{U+10e2}\N{U+10dd}\N{U+10db}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d8}",
      "\N{U+10dc}\N{U+10dd}\N{U+10d4}\N{U+10db}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d8}",
      "\N{U+10d3}\N{U+10d4}\N{U+10d9}\N{U+10d4}\N{U+10db}\N{U+10d1}\N{U+10d4}\N{U+10e0}\N{U+10d8}"
    ],
    name => "Georgian Georgia",
    native_language => "\N{U+10e5}\N{U+10d0}\N{U+10e0}\N{U+10d7}\N{U+10e3}\N{U+10da}\N{U+10d8}",
    native_name => "\N{U+10e5}\N{U+10d0}\N{U+10e0}\N{U+10d7}\N{U+10e3}\N{U+10da}\N{U+10d8} \N{U+10e1}\N{U+10d0}\N{U+10e5}\N{U+10d0}\N{U+10e0}\N{U+10d7}\N{U+10d5}\N{U+10d4}\N{U+10da}\N{U+10dd}",
    native_script => undef,
    native_territory => "\N{U+10e1}\N{U+10d0}\N{U+10e5}\N{U+10d0}\N{U+10e0}\N{U+10d7}\N{U+10d5}\N{U+10d4}\N{U+10da}\N{U+10dd}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "I \N{U+10d9}\N{U+10d5}.",
      "II \N{U+10d9}\N{U+10d5}.",
      "III \N{U+10d9}\N{U+10d5}.",
      "IV \N{U+10d9}\N{U+10d5}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "I \N{U+10d9}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d0}\N{U+10da}\N{U+10d8}",
      "II \N{U+10d9}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d0}\N{U+10da}\N{U+10d8}",
      "III \N{U+10d9}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d0}\N{U+10da}\N{U+10d8}",
      "IV \N{U+10d9}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d0}\N{U+10da}\N{U+10d8}"
    ],
    quarter_stand_alone_abbreviated => [
      "I \N{U+10d9}\N{U+10d5}.",
      "II \N{U+10d9}\N{U+10d5}.",
      "III \N{U+10d9}\N{U+10d5}.",
      "IV \N{U+10d9}\N{U+10d5}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "I \N{U+10d9}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d0}\N{U+10da}\N{U+10d8}",
      "II \N{U+10d9}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d0}\N{U+10da}\N{U+10d8}",
      "III \N{U+10d9}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d0}\N{U+10da}\N{U+10d8}",
      "IV \N{U+10d9}\N{U+10d5}\N{U+10d0}\N{U+10e0}\N{U+10e2}\N{U+10d0}\N{U+10da}\N{U+10d8}"
    ],
    script => undef,
    territory => "Georgia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kab ]__
  {
    am_pm_abbreviated => [
      "n tufat",
      "n tmeddit"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "kab",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "San",
      "Kra\N{U+1e0d}",
      "Ku\N{U+1e93}",
      "Sam",
      "S\N{U+1e0d}is",
      "Say",
      "Yan"
    ],
    day_format_narrow => [
      "S",
      "K",
      "K",
      "S",
      "S",
      "S",
      "Y"
    ],
    day_format_wide => [
      "Sanass",
      "Kra\N{U+1e0d}ass",
      "Ku\N{U+1e93}ass",
      "Samass",
      "S\N{U+1e0d}isass",
      "Sayass",
      "Yanass"
    ],
    day_stand_alone_abbreviated => [
      "San",
      "Kra\N{U+1e0d}",
      "Ku\N{U+1e93}",
      "Sam",
      "S\N{U+1e0d}is",
      "Say",
      "Yan"
    ],
    day_stand_alone_narrow => [
      "S",
      "K",
      "K",
      "S",
      "S",
      "S",
      "Y"
    ],
    day_stand_alone_wide => [
      "Sanass",
      "Kra\N{U+1e0d}ass",
      "Ku\N{U+1e93}ass",
      "Samass",
      "S\N{U+1e0d}isass",
      "Sayass",
      "Yanass"
    ],
    era_abbreviated => [
      "snd. T.\N{U+0190}",
      "sld. T.\N{U+0190}"
    ],
    era_narrow => [
      "snd. T.\N{U+0190}",
      "sld. T.\N{U+0190}"
    ],
    era_wide => [
      "send talalit n \N{U+0190}isa",
      "seld talalit n \N{U+0190}isa"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kabyle",
    month_format_abbreviated => [
      "Yen",
      "Fur",
      "Me\N{U+0263}",
      "Yeb",
      "May",
      "Yun",
      "Yul",
      "\N{U+0194}uc",
      "Cte",
      "Tub",
      "Nun",
      "Du\N{U+01e7}"
    ],
    month_format_narrow => [
      "Y",
      "F",
      "M",
      "Y",
      "M",
      "Y",
      "Y",
      "\N{U+0194}",
      "C",
      "T",
      "N",
      "D"
    ],
    month_format_wide => [
      "Yennayer",
      "Fu\N{U+1e5b}ar",
      "Me\N{U+0263}res",
      "Yebrir",
      "Mayyu",
      "Yunyu",
      "Yulyu",
      "\N{U+0194}uct",
      "Ctembe\N{U+1e5b}",
      "Tube\N{U+1e5b}",
      "Nunembe\N{U+1e5b}",
      "Du\N{U+01e7}embe\N{U+1e5b}"
    ],
    month_stand_alone_abbreviated => [
      "Yen",
      "Fur",
      "Me\N{U+0263}",
      "Yeb",
      "May",
      "Yun",
      "Yul",
      "\N{U+0194}uc",
      "Cte",
      "Tub",
      "Nun",
      "Du\N{U+01e7}"
    ],
    month_stand_alone_narrow => [
      "Y",
      "F",
      "M",
      "Y",
      "M",
      "Y",
      "Y",
      "\N{U+0194}",
      "C",
      "T",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Yennayer",
      "Fu\N{U+1e5b}ar",
      "Me\N{U+0263}res",
      "Yebrir",
      "Mayyu",
      "Yunyu",
      "Yulyu",
      "\N{U+0194}uct",
      "Ctembe\N{U+1e5b}",
      "Tube\N{U+1e5b}",
      "Nunembe\N{U+1e5b}",
      "Du\N{U+01e7}embe\N{U+1e5b}"
    ],
    name => "Kabyle",
    native_language => "Taqbaylit",
    native_name => "Taqbaylit",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K\N{U+1e0d}g1",
      "K\N{U+1e0d}g2",
      "K\N{U+1e0d}g3",
      "K\N{U+1e0d}g4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "akra\N{U+1e0d}aggur amenzu",
      "akra\N{U+1e0d}aggur wis-sin",
      "akra\N{U+1e0d}aggur wis-kra\N{U+1e0d}",
      "akra\N{U+1e0d}aggur wis-ku\N{U+1e93}"
    ],
    quarter_stand_alone_abbreviated => [
      "K\N{U+1e0d}g1",
      "K\N{U+1e0d}g2",
      "K\N{U+1e0d}g3",
      "K\N{U+1e0d}g4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "akra\N{U+1e0d}aggur amenzu",
      "akra\N{U+1e0d}aggur wis-sin",
      "akra\N{U+1e0d}aggur wis-kra\N{U+1e0d}",
      "akra\N{U+1e0d}aggur wis-ku\N{U+1e93}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ kab-DZ ]__
  {
    am_pm_abbreviated => [
      "n tufat",
      "n tmeddit"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "kab-DZ",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "San",
      "Kra\N{U+1e0d}",
      "Ku\N{U+1e93}",
      "Sam",
      "S\N{U+1e0d}is",
      "Say",
      "Yan"
    ],
    day_format_narrow => [
      "S",
      "K",
      "K",
      "S",
      "S",
      "S",
      "Y"
    ],
    day_format_wide => [
      "Sanass",
      "Kra\N{U+1e0d}ass",
      "Ku\N{U+1e93}ass",
      "Samass",
      "S\N{U+1e0d}isass",
      "Sayass",
      "Yanass"
    ],
    day_stand_alone_abbreviated => [
      "San",
      "Kra\N{U+1e0d}",
      "Ku\N{U+1e93}",
      "Sam",
      "S\N{U+1e0d}is",
      "Say",
      "Yan"
    ],
    day_stand_alone_narrow => [
      "S",
      "K",
      "K",
      "S",
      "S",
      "S",
      "Y"
    ],
    day_stand_alone_wide => [
      "Sanass",
      "Kra\N{U+1e0d}ass",
      "Ku\N{U+1e93}ass",
      "Samass",
      "S\N{U+1e0d}isass",
      "Sayass",
      "Yanass"
    ],
    era_abbreviated => [
      "snd. T.\N{U+0190}",
      "sld. T.\N{U+0190}"
    ],
    era_narrow => [
      "snd. T.\N{U+0190}",
      "sld. T.\N{U+0190}"
    ],
    era_wide => [
      "send talalit n \N{U+0190}isa",
      "seld talalit n \N{U+0190}isa"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kabyle",
    month_format_abbreviated => [
      "Yen",
      "Fur",
      "Me\N{U+0263}",
      "Yeb",
      "May",
      "Yun",
      "Yul",
      "\N{U+0194}uc",
      "Cte",
      "Tub",
      "Nun",
      "Du\N{U+01e7}"
    ],
    month_format_narrow => [
      "Y",
      "F",
      "M",
      "Y",
      "M",
      "Y",
      "Y",
      "\N{U+0194}",
      "C",
      "T",
      "N",
      "D"
    ],
    month_format_wide => [
      "Yennayer",
      "Fu\N{U+1e5b}ar",
      "Me\N{U+0263}res",
      "Yebrir",
      "Mayyu",
      "Yunyu",
      "Yulyu",
      "\N{U+0194}uct",
      "Ctembe\N{U+1e5b}",
      "Tube\N{U+1e5b}",
      "Nunembe\N{U+1e5b}",
      "Du\N{U+01e7}embe\N{U+1e5b}"
    ],
    month_stand_alone_abbreviated => [
      "Yen",
      "Fur",
      "Me\N{U+0263}",
      "Yeb",
      "May",
      "Yun",
      "Yul",
      "\N{U+0194}uc",
      "Cte",
      "Tub",
      "Nun",
      "Du\N{U+01e7}"
    ],
    month_stand_alone_narrow => [
      "Y",
      "F",
      "M",
      "Y",
      "M",
      "Y",
      "Y",
      "\N{U+0194}",
      "C",
      "T",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Yennayer",
      "Fu\N{U+1e5b}ar",
      "Me\N{U+0263}res",
      "Yebrir",
      "Mayyu",
      "Yunyu",
      "Yulyu",
      "\N{U+0194}uct",
      "Ctembe\N{U+1e5b}",
      "Tube\N{U+1e5b}",
      "Nunembe\N{U+1e5b}",
      "Du\N{U+01e7}embe\N{U+1e5b}"
    ],
    name => "Kabyle Algeria",
    native_language => "Taqbaylit",
    native_name => "Taqbaylit Lezzayer",
    native_script => undef,
    native_territory => "Lezzayer",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K\N{U+1e0d}g1",
      "K\N{U+1e0d}g2",
      "K\N{U+1e0d}g3",
      "K\N{U+1e0d}g4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "akra\N{U+1e0d}aggur amenzu",
      "akra\N{U+1e0d}aggur wis-sin",
      "akra\N{U+1e0d}aggur wis-kra\N{U+1e0d}",
      "akra\N{U+1e0d}aggur wis-ku\N{U+1e93}"
    ],
    quarter_stand_alone_abbreviated => [
      "K\N{U+1e0d}g1",
      "K\N{U+1e0d}g2",
      "K\N{U+1e0d}g3",
      "K\N{U+1e0d}g4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "akra\N{U+1e0d}aggur amenzu",
      "akra\N{U+1e0d}aggur wis-sin",
      "akra\N{U+1e0d}aggur wis-kra\N{U+1e0d}",
      "akra\N{U+1e0d}aggur wis-ku\N{U+1e93}"
    ],
    script => undef,
    territory => "Algeria",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ kam ]__
  {
    am_pm_abbreviated => [
      "\N{U+0128}yakwakya",
      "\N{U+0128}yaw\N{U+0129}oo"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "kam",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Wkw",
      "Wkl",
      "Wt\N{U+0169}",
      "Wkn",
      "Wtn",
      "Wth",
      "Wky"
    ],
    day_format_narrow => [
      "W",
      "E",
      "A",
      "A",
      "A",
      "A",
      "Y"
    ],
    day_format_wide => [
      "Wa kwamb\N{U+0129}l\N{U+0129}lya",
      "Wa kel\N{U+0129}",
      "Wa katat\N{U+0169}",
      "Wa kana",
      "Wa katano",
      "Wa thanthat\N{U+0169}",
      "Wa kyumwa"
    ],
    day_stand_alone_abbreviated => [
      "Wkw",
      "Wkl",
      "Wt\N{U+0169}",
      "Wkn",
      "Wtn",
      "Wth",
      "Wky"
    ],
    day_stand_alone_narrow => [
      "W",
      "E",
      "A",
      "A",
      "A",
      "A",
      "Y"
    ],
    day_stand_alone_wide => [
      "Wa kwamb\N{U+0129}l\N{U+0129}lya",
      "Wa kel\N{U+0129}",
      "Wa katat\N{U+0169}",
      "Wa kana",
      "Wa katano",
      "Wa thanthat\N{U+0169}",
      "Wa kyumwa"
    ],
    era_abbreviated => [
      "MY",
      "IY"
    ],
    era_narrow => [
      "MY",
      "IY"
    ],
    era_wide => [
      "Mbee wa Yes\N{U+0169}",
      "\N{U+0128}tina wa Yes\N{U+0169}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kamba",
    month_format_abbreviated => [
      "Mbe",
      "Kel",
      "Kt\N{U+0169}",
      "Kan",
      "Ktn",
      "Tha",
      "Moo",
      "Nya",
      "Knd",
      "\N{U+0128}ku",
      "\N{U+0128}km",
      "\N{U+0128}kl"
    ],
    month_format_narrow => [
      "M",
      "K",
      "K",
      "K",
      "K",
      "T",
      "M",
      "N",
      "K",
      "\N{U+0128}",
      "\N{U+0128}",
      "\N{U+0128}"
    ],
    month_format_wide => [
      "Mwai wa mbee",
      "Mwai wa kel\N{U+0129}",
      "Mwai wa katat\N{U+0169}",
      "Mwai wa kana",
      "Mwai wa katano",
      "Mwai wa thanthat\N{U+0169}",
      "Mwai wa muonza",
      "Mwai wa nyaanya",
      "Mwai wa kenda",
      "Mwai wa \N{U+0129}kumi",
      "Mwai wa \N{U+0129}kumi na \N{U+0129}mwe",
      "Mwai wa \N{U+0129}kumi na il\N{U+0129}"
    ],
    month_stand_alone_abbreviated => [
      "Mbe",
      "Kel",
      "Kt\N{U+0169}",
      "Kan",
      "Ktn",
      "Tha",
      "Moo",
      "Nya",
      "Knd",
      "\N{U+0128}ku",
      "\N{U+0128}km",
      "\N{U+0128}kl"
    ],
    month_stand_alone_narrow => [
      "M",
      "K",
      "K",
      "K",
      "K",
      "T",
      "M",
      "N",
      "K",
      "\N{U+0128}",
      "\N{U+0128}",
      "\N{U+0128}"
    ],
    month_stand_alone_wide => [
      "Mwai wa mbee",
      "Mwai wa kel\N{U+0129}",
      "Mwai wa katat\N{U+0169}",
      "Mwai wa kana",
      "Mwai wa katano",
      "Mwai wa thanthat\N{U+0169}",
      "Mwai wa muonza",
      "Mwai wa nyaanya",
      "Mwai wa kenda",
      "Mwai wa \N{U+0129}kumi",
      "Mwai wa \N{U+0129}kumi na \N{U+0129}mwe",
      "Mwai wa \N{U+0129}kumi na il\N{U+0129}"
    ],
    name => "Kamba",
    native_language => "Kikamba",
    native_name => "Kikamba",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Lovo ya mbee",
      "Lovo ya kel\N{U+0129}",
      "Lovo ya katat\N{U+0169}",
      "Lovo ya kana"
    ],
    quarter_stand_alone_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Lovo ya mbee",
      "Lovo ya kel\N{U+0129}",
      "Lovo ya katat\N{U+0169}",
      "Lovo ya kana"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kam-KE ]__
  {
    am_pm_abbreviated => [
      "\N{U+0128}yakwakya",
      "\N{U+0128}yaw\N{U+0129}oo"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "kam-KE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Wkw",
      "Wkl",
      "Wt\N{U+0169}",
      "Wkn",
      "Wtn",
      "Wth",
      "Wky"
    ],
    day_format_narrow => [
      "W",
      "E",
      "A",
      "A",
      "A",
      "A",
      "Y"
    ],
    day_format_wide => [
      "Wa kwamb\N{U+0129}l\N{U+0129}lya",
      "Wa kel\N{U+0129}",
      "Wa katat\N{U+0169}",
      "Wa kana",
      "Wa katano",
      "Wa thanthat\N{U+0169}",
      "Wa kyumwa"
    ],
    day_stand_alone_abbreviated => [
      "Wkw",
      "Wkl",
      "Wt\N{U+0169}",
      "Wkn",
      "Wtn",
      "Wth",
      "Wky"
    ],
    day_stand_alone_narrow => [
      "W",
      "E",
      "A",
      "A",
      "A",
      "A",
      "Y"
    ],
    day_stand_alone_wide => [
      "Wa kwamb\N{U+0129}l\N{U+0129}lya",
      "Wa kel\N{U+0129}",
      "Wa katat\N{U+0169}",
      "Wa kana",
      "Wa katano",
      "Wa thanthat\N{U+0169}",
      "Wa kyumwa"
    ],
    era_abbreviated => [
      "MY",
      "IY"
    ],
    era_narrow => [
      "MY",
      "IY"
    ],
    era_wide => [
      "Mbee wa Yes\N{U+0169}",
      "\N{U+0128}tina wa Yes\N{U+0169}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kamba",
    month_format_abbreviated => [
      "Mbe",
      "Kel",
      "Kt\N{U+0169}",
      "Kan",
      "Ktn",
      "Tha",
      "Moo",
      "Nya",
      "Knd",
      "\N{U+0128}ku",
      "\N{U+0128}km",
      "\N{U+0128}kl"
    ],
    month_format_narrow => [
      "M",
      "K",
      "K",
      "K",
      "K",
      "T",
      "M",
      "N",
      "K",
      "\N{U+0128}",
      "\N{U+0128}",
      "\N{U+0128}"
    ],
    month_format_wide => [
      "Mwai wa mbee",
      "Mwai wa kel\N{U+0129}",
      "Mwai wa katat\N{U+0169}",
      "Mwai wa kana",
      "Mwai wa katano",
      "Mwai wa thanthat\N{U+0169}",
      "Mwai wa muonza",
      "Mwai wa nyaanya",
      "Mwai wa kenda",
      "Mwai wa \N{U+0129}kumi",
      "Mwai wa \N{U+0129}kumi na \N{U+0129}mwe",
      "Mwai wa \N{U+0129}kumi na il\N{U+0129}"
    ],
    month_stand_alone_abbreviated => [
      "Mbe",
      "Kel",
      "Kt\N{U+0169}",
      "Kan",
      "Ktn",
      "Tha",
      "Moo",
      "Nya",
      "Knd",
      "\N{U+0128}ku",
      "\N{U+0128}km",
      "\N{U+0128}kl"
    ],
    month_stand_alone_narrow => [
      "M",
      "K",
      "K",
      "K",
      "K",
      "T",
      "M",
      "N",
      "K",
      "\N{U+0128}",
      "\N{U+0128}",
      "\N{U+0128}"
    ],
    month_stand_alone_wide => [
      "Mwai wa mbee",
      "Mwai wa kel\N{U+0129}",
      "Mwai wa katat\N{U+0169}",
      "Mwai wa kana",
      "Mwai wa katano",
      "Mwai wa thanthat\N{U+0169}",
      "Mwai wa muonza",
      "Mwai wa nyaanya",
      "Mwai wa kenda",
      "Mwai wa \N{U+0129}kumi",
      "Mwai wa \N{U+0129}kumi na \N{U+0129}mwe",
      "Mwai wa \N{U+0129}kumi na il\N{U+0129}"
    ],
    name => "Kamba Kenya",
    native_language => "Kikamba",
    native_name => "Kikamba Kenya",
    native_script => undef,
    native_territory => "Kenya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Lovo ya mbee",
      "Lovo ya kel\N{U+0129}",
      "Lovo ya katat\N{U+0169}",
      "Lovo ya kana"
    ],
    quarter_stand_alone_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Lovo ya mbee",
      "Lovo ya kel\N{U+0129}",
      "Lovo ya katat\N{U+0169}",
      "Lovo ya kana"
    ],
    script => undef,
    territory => "Kenya",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kde ]__
  {
    am_pm_abbreviated => [
      "Muhi",
      "Chilo"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "kde",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ll3",
      "Ll4",
      "Ll5",
      "Ll6",
      "Ll7",
      "Ll1",
      "Ll2"
    ],
    day_format_narrow => [
      3,
      4,
      5,
      6,
      7,
      1,
      2
    ],
    day_format_wide => [
      "Liduva lyatatu",
      "Liduva lyanchechi",
      "Liduva lyannyano",
      "Liduva lyannyano na linji",
      "Liduva lyannyano na mavili",
      "Liduva litandi",
      "Liduva lyapili"
    ],
    day_stand_alone_abbreviated => [
      "Ll3",
      "Ll4",
      "Ll5",
      "Ll6",
      "Ll7",
      "Ll1",
      "Ll2"
    ],
    day_stand_alone_narrow => [
      3,
      4,
      5,
      6,
      7,
      1,
      2
    ],
    day_stand_alone_wide => [
      "Liduva lyatatu",
      "Liduva lyanchechi",
      "Liduva lyannyano",
      "Liduva lyannyano na linji",
      "Liduva lyannyano na mavili",
      "Liduva litandi",
      "Liduva lyapili"
    ],
    era_abbreviated => [
      "AY",
      "NY"
    ],
    era_narrow => [
      "AY",
      "NY"
    ],
    era_wide => [
      "Akanapawa Yesu",
      "Nankuida Yesu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Makonde",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Mwedi Ntandi",
      "Mwedi wa Pili",
      "Mwedi wa Tatu",
      "Mwedi wa Nchechi",
      "Mwedi wa Nnyano",
      "Mwedi wa Nnyano na Umo",
      "Mwedi wa Nnyano na Mivili",
      "Mwedi wa Nnyano na Mitatu",
      "Mwedi wa Nnyano na Nchechi",
      "Mwedi wa Nnyano na Nnyano",
      "Mwedi wa Nnyano na Nnyano na U",
      "Mwedi wa Nnyano na Nnyano na M"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Mwedi Ntandi",
      "Mwedi wa Pili",
      "Mwedi wa Tatu",
      "Mwedi wa Nchechi",
      "Mwedi wa Nnyano",
      "Mwedi wa Nnyano na Umo",
      "Mwedi wa Nnyano na Mivili",
      "Mwedi wa Nnyano na Mitatu",
      "Mwedi wa Nnyano na Nchechi",
      "Mwedi wa Nnyano na Nnyano",
      "Mwedi wa Nnyano na Nnyano na U",
      "Mwedi wa Nnyano na Nnyano na M"
    ],
    name => "Makonde",
    native_language => "Chimakonde",
    native_name => "Chimakonde",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Lobo 1",
      "Lobo 2",
      "Lobo 3",
      "Lobo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Lobo 1",
      "Lobo 2",
      "Lobo 3",
      "Lobo 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kde-TZ ]__
  {
    am_pm_abbreviated => [
      "Muhi",
      "Chilo"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "kde-TZ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ll3",
      "Ll4",
      "Ll5",
      "Ll6",
      "Ll7",
      "Ll1",
      "Ll2"
    ],
    day_format_narrow => [
      3,
      4,
      5,
      6,
      7,
      1,
      2
    ],
    day_format_wide => [
      "Liduva lyatatu",
      "Liduva lyanchechi",
      "Liduva lyannyano",
      "Liduva lyannyano na linji",
      "Liduva lyannyano na mavili",
      "Liduva litandi",
      "Liduva lyapili"
    ],
    day_stand_alone_abbreviated => [
      "Ll3",
      "Ll4",
      "Ll5",
      "Ll6",
      "Ll7",
      "Ll1",
      "Ll2"
    ],
    day_stand_alone_narrow => [
      3,
      4,
      5,
      6,
      7,
      1,
      2
    ],
    day_stand_alone_wide => [
      "Liduva lyatatu",
      "Liduva lyanchechi",
      "Liduva lyannyano",
      "Liduva lyannyano na linji",
      "Liduva lyannyano na mavili",
      "Liduva litandi",
      "Liduva lyapili"
    ],
    era_abbreviated => [
      "AY",
      "NY"
    ],
    era_narrow => [
      "AY",
      "NY"
    ],
    era_wide => [
      "Akanapawa Yesu",
      "Nankuida Yesu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Makonde",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Mwedi Ntandi",
      "Mwedi wa Pili",
      "Mwedi wa Tatu",
      "Mwedi wa Nchechi",
      "Mwedi wa Nnyano",
      "Mwedi wa Nnyano na Umo",
      "Mwedi wa Nnyano na Mivili",
      "Mwedi wa Nnyano na Mitatu",
      "Mwedi wa Nnyano na Nchechi",
      "Mwedi wa Nnyano na Nnyano",
      "Mwedi wa Nnyano na Nnyano na U",
      "Mwedi wa Nnyano na Nnyano na M"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Mwedi Ntandi",
      "Mwedi wa Pili",
      "Mwedi wa Tatu",
      "Mwedi wa Nchechi",
      "Mwedi wa Nnyano",
      "Mwedi wa Nnyano na Umo",
      "Mwedi wa Nnyano na Mivili",
      "Mwedi wa Nnyano na Mitatu",
      "Mwedi wa Nnyano na Nchechi",
      "Mwedi wa Nnyano na Nnyano",
      "Mwedi wa Nnyano na Nnyano na U",
      "Mwedi wa Nnyano na Nnyano na M"
    ],
    name => "Makonde Tanzania",
    native_language => "Chimakonde",
    native_name => "Chimakonde Tanzania",
    native_script => undef,
    native_territory => "Tanzania",
    native_variant => undef,
    quarter_format_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Lobo 1",
      "Lobo 2",
      "Lobo 3",
      "Lobo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Lobo 1",
      "Lobo 2",
      "Lobo 3",
      "Lobo 4"
    ],
    script => undef,
    territory => "Tanzania",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kea ]__
  {
    am_pm_abbreviated => [
      "am",
      "pm"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM 'di' y G",
      GyMMMEd => "E, d 'di' MMM 'di' y G",
      GyMMMd => "d 'di' MMM 'di' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'di' MMMM",
      MMMMd => "d 'di' MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMM => "MM/y",
      yMMM => "MMM 'di' y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM 'di' y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ 'di' y"
    },
    code => "kea",
    date_format_full => "EEEE, d 'di' MMMM 'di' y",
    date_format_long => "d 'di' MMMM 'di' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "sig",
      "ter",
      "kua",
      "kin",
      "ses",
      "sab",
      "dum"
    ],
    day_format_narrow => [
      "S",
      "T",
      "K",
      "K",
      "S",
      "S",
      "D"
    ],
    day_format_wide => [
      "sigunda-fera",
      "tersa-fera",
      "kuarta-fera",
      "kinta-fera",
      "sesta-fera",
      "sabadu",
      "dumingu"
    ],
    day_stand_alone_abbreviated => [
      "sig",
      "ter",
      "kua",
      "kin",
      "ses",
      "sab",
      "dum"
    ],
    day_stand_alone_narrow => [
      "s",
      "t",
      "k",
      "k",
      "s",
      "s",
      "d"
    ],
    day_stand_alone_wide => [
      "sigunda-fera",
      "tersa-fera",
      "kuarta-fera",
      "kinta-fera",
      "sesta-fera",
      "sabadu",
      "dumingu"
    ],
    era_abbreviated => [
      "AK",
      "DK"
    ],
    era_narrow => [
      "AK",
      "DK"
    ],
    era_wide => [
      "Antis di Kristu",
      "Dispos di Kristu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kabuverdianu",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Abr",
      "Mai",
      "Jun",
      "Jul",
      "Ago",
      "Set",
      "Otu",
      "Nuv",
      "Diz"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Janeru",
      "Febreru",
      "Marsu",
      "Abril",
      "Maiu",
      "Junhu",
      "Julhu",
      "Agostu",
      "Setenbru",
      "Otubru",
      "Nuvenbru",
      "Dizenbru"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Abr",
      "Mai",
      "Jun",
      "Jul",
      "Ago",
      "Set",
      "Otu",
      "Nuv",
      "Diz"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janeru",
      "Febreru",
      "Marsu",
      "Abril",
      "Maiu",
      "Junhu",
      "Julhu",
      "Agostu",
      "Setenbru",
      "Otubru",
      "Nuvenbru",
      "Dizenbru"
    ],
    name => "Kabuverdianu",
    native_language => "kabuverdianu",
    native_name => "kabuverdianu",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+00ba} trimestri",
      "2\N{U+00ba} trimestri",
      "3\N{U+00ba} trimestri",
      "4\N{U+00ba} trimestri"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+00ba} trimestri",
      "2\N{U+00ba} trimestri",
      "3\N{U+00ba} trimestri",
      "4\N{U+00ba} trimestri"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kea-CV ]__
  {
    am_pm_abbreviated => [
      "am",
      "pm"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM 'di' y G",
      GyMMMEd => "E, d 'di' MMM 'di' y G",
      GyMMMd => "d 'di' MMM 'di' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d 'di' MMMM",
      MMMMd => "d 'di' MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMM => "MM/y",
      yMMM => "MMM 'di' y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM 'di' y",
      yMMMd => "d MMM y",
      yMd => "dd/MM/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ 'di' y"
    },
    code => "kea-CV",
    date_format_full => "EEEE, d 'di' MMMM 'di' y",
    date_format_long => "d 'di' MMMM 'di' y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "sig",
      "ter",
      "kua",
      "kin",
      "ses",
      "sab",
      "dum"
    ],
    day_format_narrow => [
      "S",
      "T",
      "K",
      "K",
      "S",
      "S",
      "D"
    ],
    day_format_wide => [
      "sigunda-fera",
      "tersa-fera",
      "kuarta-fera",
      "kinta-fera",
      "sesta-fera",
      "sabadu",
      "dumingu"
    ],
    day_stand_alone_abbreviated => [
      "sig",
      "ter",
      "kua",
      "kin",
      "ses",
      "sab",
      "dum"
    ],
    day_stand_alone_narrow => [
      "s",
      "t",
      "k",
      "k",
      "s",
      "s",
      "d"
    ],
    day_stand_alone_wide => [
      "sigunda-fera",
      "tersa-fera",
      "kuarta-fera",
      "kinta-fera",
      "sesta-fera",
      "sabadu",
      "dumingu"
    ],
    era_abbreviated => [
      "AK",
      "DK"
    ],
    era_narrow => [
      "AK",
      "DK"
    ],
    era_wide => [
      "Antis di Kristu",
      "Dispos di Kristu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kabuverdianu",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Abr",
      "Mai",
      "Jun",
      "Jul",
      "Ago",
      "Set",
      "Otu",
      "Nuv",
      "Diz"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Janeru",
      "Febreru",
      "Marsu",
      "Abril",
      "Maiu",
      "Junhu",
      "Julhu",
      "Agostu",
      "Setenbru",
      "Otubru",
      "Nuvenbru",
      "Dizenbru"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Abr",
      "Mai",
      "Jun",
      "Jul",
      "Ago",
      "Set",
      "Otu",
      "Nuv",
      "Diz"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janeru",
      "Febreru",
      "Marsu",
      "Abril",
      "Maiu",
      "Junhu",
      "Julhu",
      "Agostu",
      "Setenbru",
      "Otubru",
      "Nuvenbru",
      "Dizenbru"
    ],
    name => "Kabuverdianu Cape Verde",
    native_language => "kabuverdianu",
    native_name => "kabuverdianu Kabu Verdi",
    native_script => undef,
    native_territory => "Kabu Verdi",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+00ba} trimestri",
      "2\N{U+00ba} trimestri",
      "3\N{U+00ba} trimestri",
      "4\N{U+00ba} trimestri"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+00ba} trimestri",
      "2\N{U+00ba} trimestri",
      "3\N{U+00ba} trimestri",
      "4\N{U+00ba} trimestri"
    ],
    script => undef,
    territory => "Cape Verde",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ khq ]__
  {
    am_pm_abbreviated => [
      "Adduha",
      "Aluula"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "khq",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ati",
      "Ata",
      "Ala",
      "Alm",
      "Alj",
      "Ass",
      "Alh"
    ],
    day_format_narrow => [
      "T",
      "T",
      "L",
      "L",
      "L",
      "S",
      "H"
    ],
    day_format_wide => [
      "Atini",
      "Atalata",
      "Alarba",
      "Alhamiisa",
      "Aljuma",
      "Assabdu",
      "Alhadi"
    ],
    day_stand_alone_abbreviated => [
      "Ati",
      "Ata",
      "Ala",
      "Alm",
      "Alj",
      "Ass",
      "Alh"
    ],
    day_stand_alone_narrow => [
      "T",
      "T",
      "L",
      "L",
      "L",
      "S",
      "H"
    ],
    day_stand_alone_wide => [
      "Atini",
      "Atalata",
      "Alarba",
      "Alhamiisa",
      "Aljuma",
      "Assabdu",
      "Alhadi"
    ],
    era_abbreviated => [
      "IJ",
      "IZ"
    ],
    era_narrow => [
      "IJ",
      "IZ"
    ],
    era_wide => [
      "Isaa jine",
      "Isaa jamanoo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Koyra Chiini",
    month_format_abbreviated => [
      "\N{U+017d}an",
      "Fee",
      "Mar",
      "Awi",
      "Me",
      "\N{U+017d}uw",
      "\N{U+017d}uy",
      "Ut",
      "Sek",
      "Okt",
      "Noo",
      "Dee"
    ],
    month_format_narrow => [
      "\N{U+017d}",
      "F",
      "M",
      "A",
      "M",
      "\N{U+017d}",
      "\N{U+017d}",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "\N{U+017d}anwiye",
      "Feewiriye",
      "Marsi",
      "Awiril",
      "Me",
      "\N{U+017d}uwe\N{U+014b}",
      "\N{U+017d}uyye",
      "Ut",
      "Sektanbur",
      "Oktoobur",
      "Noowanbur",
      "Deesanbur"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+017d}an",
      "Fee",
      "Mar",
      "Awi",
      "Me",
      "\N{U+017d}uw",
      "\N{U+017d}uy",
      "Ut",
      "Sek",
      "Okt",
      "Noo",
      "Dee"
    ],
    month_stand_alone_narrow => [
      "\N{U+017d}",
      "F",
      "M",
      "A",
      "M",
      "\N{U+017d}",
      "\N{U+017d}",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "\N{U+017d}anwiye",
      "Feewiriye",
      "Marsi",
      "Awiril",
      "Me",
      "\N{U+017d}uwe\N{U+014b}",
      "\N{U+017d}uyye",
      "Ut",
      "Sektanbur",
      "Oktoobur",
      "Noowanbur",
      "Deesanbur"
    ],
    name => "Koyra Chiini",
    native_language => "Koyra ciini",
    native_name => "Koyra ciini",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "A1",
      "A2",
      "A3",
      "A4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Arrubu 1",
      "Arrubu 2",
      "Arrubu 3",
      "Arrubu 4"
    ],
    quarter_stand_alone_abbreviated => [
      "A1",
      "A2",
      "A3",
      "A4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Arrubu 1",
      "Arrubu 2",
      "Arrubu 3",
      "Arrubu 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ khq-ML ]__
  {
    am_pm_abbreviated => [
      "Adduha",
      "Aluula"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "khq-ML",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ati",
      "Ata",
      "Ala",
      "Alm",
      "Alj",
      "Ass",
      "Alh"
    ],
    day_format_narrow => [
      "T",
      "T",
      "L",
      "L",
      "L",
      "S",
      "H"
    ],
    day_format_wide => [
      "Atini",
      "Atalata",
      "Alarba",
      "Alhamiisa",
      "Aljuma",
      "Assabdu",
      "Alhadi"
    ],
    day_stand_alone_abbreviated => [
      "Ati",
      "Ata",
      "Ala",
      "Alm",
      "Alj",
      "Ass",
      "Alh"
    ],
    day_stand_alone_narrow => [
      "T",
      "T",
      "L",
      "L",
      "L",
      "S",
      "H"
    ],
    day_stand_alone_wide => [
      "Atini",
      "Atalata",
      "Alarba",
      "Alhamiisa",
      "Aljuma",
      "Assabdu",
      "Alhadi"
    ],
    era_abbreviated => [
      "IJ",
      "IZ"
    ],
    era_narrow => [
      "IJ",
      "IZ"
    ],
    era_wide => [
      "Isaa jine",
      "Isaa jamanoo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Koyra Chiini",
    month_format_abbreviated => [
      "\N{U+017d}an",
      "Fee",
      "Mar",
      "Awi",
      "Me",
      "\N{U+017d}uw",
      "\N{U+017d}uy",
      "Ut",
      "Sek",
      "Okt",
      "Noo",
      "Dee"
    ],
    month_format_narrow => [
      "\N{U+017d}",
      "F",
      "M",
      "A",
      "M",
      "\N{U+017d}",
      "\N{U+017d}",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "\N{U+017d}anwiye",
      "Feewiriye",
      "Marsi",
      "Awiril",
      "Me",
      "\N{U+017d}uwe\N{U+014b}",
      "\N{U+017d}uyye",
      "Ut",
      "Sektanbur",
      "Oktoobur",
      "Noowanbur",
      "Deesanbur"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+017d}an",
      "Fee",
      "Mar",
      "Awi",
      "Me",
      "\N{U+017d}uw",
      "\N{U+017d}uy",
      "Ut",
      "Sek",
      "Okt",
      "Noo",
      "Dee"
    ],
    month_stand_alone_narrow => [
      "\N{U+017d}",
      "F",
      "M",
      "A",
      "M",
      "\N{U+017d}",
      "\N{U+017d}",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "\N{U+017d}anwiye",
      "Feewiriye",
      "Marsi",
      "Awiril",
      "Me",
      "\N{U+017d}uwe\N{U+014b}",
      "\N{U+017d}uyye",
      "Ut",
      "Sektanbur",
      "Oktoobur",
      "Noowanbur",
      "Deesanbur"
    ],
    name => "Koyra Chiini Mali",
    native_language => "Koyra ciini",
    native_name => "Koyra ciini Maali",
    native_script => undef,
    native_territory => "Maali",
    native_variant => undef,
    quarter_format_abbreviated => [
      "A1",
      "A2",
      "A3",
      "A4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Arrubu 1",
      "Arrubu 2",
      "Arrubu 3",
      "Arrubu 4"
    ],
    quarter_stand_alone_abbreviated => [
      "A1",
      "A2",
      "A3",
      "A4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Arrubu 1",
      "Arrubu 2",
      "Arrubu 3",
      "Arrubu 4"
    ],
    script => undef,
    territory => "Mali",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ki ]__
  {
    am_pm_abbreviated => [
      "Kiroko",
      "Hwa\N{U+0129}-in\N{U+0129}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ki",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "NTT",
      "NMN",
      "NMT",
      "ART",
      "NMA",
      "NMM",
      "KMA"
    ],
    day_format_narrow => [
      "N",
      "N",
      "N",
      "A",
      "N",
      "N",
      "K"
    ],
    day_format_wide => [
      "Njumatat\N{U+0169}",
      "Njumaine",
      "Njumatana",
      "Aramithi",
      "Njumaa",
      "Njumamothi",
      "Kiumia"
    ],
    day_stand_alone_abbreviated => [
      "NTT",
      "NMN",
      "NMT",
      "ART",
      "NMA",
      "NMM",
      "KMA"
    ],
    day_stand_alone_narrow => [
      "N",
      "N",
      "N",
      "A",
      "N",
      "N",
      "K"
    ],
    day_stand_alone_wide => [
      "Njumatat\N{U+0169}",
      "Njumaine",
      "Njumatana",
      "Aramithi",
      "Njumaa",
      "Njumamothi",
      "Kiumia"
    ],
    era_abbreviated => [
      "MK",
      "TK"
    ],
    era_narrow => [
      "MK",
      "TK"
    ],
    era_wide => [
      "Mbere ya Kristo",
      "Thutha wa Kristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kikuyu",
    month_format_abbreviated => [
      "JEN",
      "WKR",
      "WGT",
      "WKN",
      "WTN",
      "WTD",
      "WMJ",
      "WNN",
      "WKD",
      "WIK",
      "WMW",
      "DIT"
    ],
    month_format_narrow => [
      "J",
      "K",
      "G",
      "K",
      "G",
      "G",
      "M",
      "K",
      "K",
      "I",
      "I",
      "D"
    ],
    month_format_wide => [
      "Njenuar\N{U+0129}",
      "Mwere wa ker\N{U+0129}",
      "Mwere wa gatat\N{U+0169}",
      "Mwere wa kana",
      "Mwere wa gatano",
      "Mwere wa gatandat\N{U+0169}",
      "Mwere wa m\N{U+0169}gwanja",
      "Mwere wa kanana",
      "Mwere wa kenda",
      "Mwere wa ik\N{U+0169}mi",
      "Mwere wa ik\N{U+0169}mi na \N{U+0169}mwe",
      "Ndithemba"
    ],
    month_stand_alone_abbreviated => [
      "JEN",
      "WKR",
      "WGT",
      "WKN",
      "WTN",
      "WTD",
      "WMJ",
      "WNN",
      "WKD",
      "WIK",
      "WMW",
      "DIT"
    ],
    month_stand_alone_narrow => [
      "J",
      "K",
      "G",
      "K",
      "G",
      "G",
      "M",
      "K",
      "K",
      "I",
      "I",
      "D"
    ],
    month_stand_alone_wide => [
      "Njenuar\N{U+0129}",
      "Mwere wa ker\N{U+0129}",
      "Mwere wa gatat\N{U+0169}",
      "Mwere wa kana",
      "Mwere wa gatano",
      "Mwere wa gatandat\N{U+0169}",
      "Mwere wa m\N{U+0169}gwanja",
      "Mwere wa kanana",
      "Mwere wa kenda",
      "Mwere wa ik\N{U+0169}mi",
      "Mwere wa ik\N{U+0169}mi na \N{U+0169}mwe",
      "Ndithemba"
    ],
    name => "Kikuyu",
    native_language => "Gikuyu",
    native_name => "Gikuyu",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo ya mbere",
      "Robo ya ker\N{U+0129}",
      "Robo ya gatat\N{U+0169}",
      "Robo ya kana"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo ya mbere",
      "Robo ya ker\N{U+0129}",
      "Robo ya gatat\N{U+0169}",
      "Robo ya kana"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ki-KE ]__
  {
    am_pm_abbreviated => [
      "Kiroko",
      "Hwa\N{U+0129}-in\N{U+0129}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ki-KE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "NTT",
      "NMN",
      "NMT",
      "ART",
      "NMA",
      "NMM",
      "KMA"
    ],
    day_format_narrow => [
      "N",
      "N",
      "N",
      "A",
      "N",
      "N",
      "K"
    ],
    day_format_wide => [
      "Njumatat\N{U+0169}",
      "Njumaine",
      "Njumatana",
      "Aramithi",
      "Njumaa",
      "Njumamothi",
      "Kiumia"
    ],
    day_stand_alone_abbreviated => [
      "NTT",
      "NMN",
      "NMT",
      "ART",
      "NMA",
      "NMM",
      "KMA"
    ],
    day_stand_alone_narrow => [
      "N",
      "N",
      "N",
      "A",
      "N",
      "N",
      "K"
    ],
    day_stand_alone_wide => [
      "Njumatat\N{U+0169}",
      "Njumaine",
      "Njumatana",
      "Aramithi",
      "Njumaa",
      "Njumamothi",
      "Kiumia"
    ],
    era_abbreviated => [
      "MK",
      "TK"
    ],
    era_narrow => [
      "MK",
      "TK"
    ],
    era_wide => [
      "Mbere ya Kristo",
      "Thutha wa Kristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kikuyu",
    month_format_abbreviated => [
      "JEN",
      "WKR",
      "WGT",
      "WKN",
      "WTN",
      "WTD",
      "WMJ",
      "WNN",
      "WKD",
      "WIK",
      "WMW",
      "DIT"
    ],
    month_format_narrow => [
      "J",
      "K",
      "G",
      "K",
      "G",
      "G",
      "M",
      "K",
      "K",
      "I",
      "I",
      "D"
    ],
    month_format_wide => [
      "Njenuar\N{U+0129}",
      "Mwere wa ker\N{U+0129}",
      "Mwere wa gatat\N{U+0169}",
      "Mwere wa kana",
      "Mwere wa gatano",
      "Mwere wa gatandat\N{U+0169}",
      "Mwere wa m\N{U+0169}gwanja",
      "Mwere wa kanana",
      "Mwere wa kenda",
      "Mwere wa ik\N{U+0169}mi",
      "Mwere wa ik\N{U+0169}mi na \N{U+0169}mwe",
      "Ndithemba"
    ],
    month_stand_alone_abbreviated => [
      "JEN",
      "WKR",
      "WGT",
      "WKN",
      "WTN",
      "WTD",
      "WMJ",
      "WNN",
      "WKD",
      "WIK",
      "WMW",
      "DIT"
    ],
    month_stand_alone_narrow => [
      "J",
      "K",
      "G",
      "K",
      "G",
      "G",
      "M",
      "K",
      "K",
      "I",
      "I",
      "D"
    ],
    month_stand_alone_wide => [
      "Njenuar\N{U+0129}",
      "Mwere wa ker\N{U+0129}",
      "Mwere wa gatat\N{U+0169}",
      "Mwere wa kana",
      "Mwere wa gatano",
      "Mwere wa gatandat\N{U+0169}",
      "Mwere wa m\N{U+0169}gwanja",
      "Mwere wa kanana",
      "Mwere wa kenda",
      "Mwere wa ik\N{U+0169}mi",
      "Mwere wa ik\N{U+0169}mi na \N{U+0169}mwe",
      "Ndithemba"
    ],
    name => "Kikuyu Kenya",
    native_language => "Gikuyu",
    native_name => "Gikuyu Kenya",
    native_script => undef,
    native_territory => "Kenya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo ya mbere",
      "Robo ya ker\N{U+0129}",
      "Robo ya gatat\N{U+0169}",
      "Robo ya kana"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo ya mbere",
      "Robo ya ker\N{U+0129}",
      "Robo ya gatat\N{U+0169}",
      "Robo ya kana"
    ],
    script => undef,
    territory => "Kenya",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kk ]__
  {
    am_pm_abbreviated => [
      "\N{U+0442}\N{U+0430}\N{U+04a3}\N{U+0493}\N{U+044b}",
      "\N{U+0442}\N{U+04af}\N{U+0441}\N{U+043a}\N{U+0456}/\N{U+043a}\N{U+0435}\N{U+0448}\N{U+043a}\N{U+0456}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E, a h:mm",
      Ehms => "E, a h:mm:ss",
      Gy => "G y '\N{U+0436}'.",
      GyMMM => "G y '\N{U+0436}'. MMM",
      GyMMMEd => "G y '\N{U+0436}'. d MMM, E",
      GyMMMd => "G y '\N{U+0436}'. d MMM",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "dd.MM, E",
      MMM => "LLL",
      MMMEd => "d MMM, E",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd.MM",
      d => "d",
      h => "a h",
      hm => "a h:mm",
      hms => "a h:mm:ss",
      hmsv => "a h:mm:ss v",
      hmv => "a h:mm v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "dd.MM.y, E",
      yMMM => "y '\N{U+0436}'. MMM",
      yMMMEd => "y '\N{U+0436}'. d MMM, E",
      yMMMM => "y '\N{U+0436}'. MMMM",
      yMMMd => "y '\N{U+0436}'. d MMM",
      yMd => "dd.MM.y",
      yQQQ => "y '\N{U+0436}'. QQQ",
      yQQQQ => "y '\N{U+0436}'. QQQQ"
    },
    code => "kk",
    date_format_full => "y '\N{U+0436}'. d MMMM, EEEE",
    date_format_long => "y '\N{U+0436}'. d MMMM",
    date_format_medium => "y '\N{U+0436}'. dd MMM",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0414}\N{U+0441}",
      "\N{U+0421}\N{U+0441}",
      "\N{U+0421}\N{U+0440}",
      "\N{U+0411}\N{U+0441}",
      "\N{U+0416}\N{U+043c}",
      "\N{U+0421}\N{U+0431}",
      "\N{U+0416}\N{U+0441}"
    ],
    day_format_narrow => [
      "\N{U+0414}",
      "\N{U+0421}",
      "\N{U+0421}",
      "\N{U+0411}",
      "\N{U+0416}",
      "\N{U+0421}",
      "\N{U+0416}"
    ],
    day_format_wide => [
      "\N{U+0434}\N{U+04af}\N{U+0439}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0441}\N{U+0435}\N{U+0439}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0441}\N{U+04d9}\N{U+0440}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0431}\N{U+0435}\N{U+0439}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0436}\N{U+04b1}\N{U+043c}\N{U+0430}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0436}\N{U+0435}\N{U+043a}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0414}\N{U+0441}",
      "\N{U+0421}\N{U+0441}",
      "\N{U+0421}\N{U+0440}",
      "\N{U+0411}\N{U+0441}",
      "\N{U+0416}\N{U+043c}",
      "\N{U+0421}\N{U+0431}",
      "\N{U+0416}\N{U+0441}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0414}",
      "\N{U+0421}",
      "\N{U+0421}",
      "\N{U+0411}",
      "\N{U+0416}",
      "\N{U+0421}",
      "\N{U+0416}"
    ],
    day_stand_alone_wide => [
      "\N{U+0414}\N{U+04af}\N{U+0439}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0421}\N{U+0435}\N{U+0439}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0421}\N{U+04d9}\N{U+0440}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0411}\N{U+0435}\N{U+0439}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0416}\N{U+04b1}\N{U+043c}\N{U+0430}",
      "\N{U+0421}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0416}\N{U+0435}\N{U+043a}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}"
    ],
    era_abbreviated => [
      "\N{U+0431}.\N{U+0437}.\N{U+0434}.",
      "\N{U+0431}.\N{U+0437}."
    ],
    era_narrow => [
      "\N{U+0431}.\N{U+0437}.\N{U+0434}.",
      "\N{U+0431}.\N{U+0437}."
    ],
    era_wide => [
      "\N{U+0411}\N{U+0456}\N{U+0437}\N{U+0434}\N{U+0456}\N{U+04a3} \N{U+0437}\N{U+0430}\N{U+043c}\N{U+0430}\N{U+043d}\N{U+044b}\N{U+043c}\N{U+044b}\N{U+0437}\N{U+0493}\N{U+0430} \N{U+0434}\N{U+0435}\N{U+0439}\N{U+0456}\N{U+043d}",
      "\N{U+0411}\N{U+0456}\N{U+0437}\N{U+0434}\N{U+0456}\N{U+04a3} \N{U+0437}\N{U+0430}\N{U+043c}\N{U+0430}\N{U+043d}\N{U+044b}\N{U+043c}\N{U+044b}\N{U+0437}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kazakh",
    month_format_abbreviated => [
      "\N{U+049b}\N{U+0430}\N{U+04a3}.",
      "\N{U+0430}\N{U+049b}\N{U+043f}.",
      "\N{U+043d}\N{U+0430}\N{U+0443}.",
      "\N{U+0441}\N{U+04d9}\N{U+0443}.",
      "\N{U+043c}\N{U+0430}\N{U+043c}.",
      "\N{U+043c}\N{U+0430}\N{U+0443}.",
      "\N{U+0448}\N{U+0456}\N{U+043b}.",
      "\N{U+0442}\N{U+0430}\N{U+043c}.",
      "\N{U+049b}\N{U+044b}\N{U+0440}.",
      "\N{U+049b}\N{U+0430}\N{U+0437}.",
      "\N{U+049b}\N{U+0430}\N{U+0440}.",
      "\N{U+0436}\N{U+0435}\N{U+043b}."
    ],
    month_format_narrow => [
      "\N{U+049a}",
      "\N{U+0410}",
      "\N{U+041d}",
      "\N{U+0421}",
      "\N{U+041c}",
      "\N{U+041c}",
      "\N{U+0428}",
      "\N{U+0422}",
      "\N{U+049a}",
      "\N{U+049a}",
      "\N{U+049a}",
      "\N{U+0416}"
    ],
    month_format_wide => [
      "\N{U+049b}\N{U+0430}\N{U+04a3}\N{U+0442}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+049b}\N{U+043f}\N{U+0430}\N{U+043d}",
      "\N{U+043d}\N{U+0430}\N{U+0443}\N{U+0440}\N{U+044b}\N{U+0437}",
      "\N{U+0441}\N{U+04d9}\N{U+0443}\N{U+0456}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+043c}\N{U+044b}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0443}\N{U+0441}\N{U+044b}\N{U+043c}",
      "\N{U+0448}\N{U+0456}\N{U+043b}\N{U+0434}\N{U+0435}",
      "\N{U+0442}\N{U+0430}\N{U+043c}\N{U+044b}\N{U+0437}",
      "\N{U+049b}\N{U+044b}\N{U+0440}\N{U+043a}\N{U+04af}\N{U+0439}\N{U+0435}\N{U+043a}",
      "\N{U+049b}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+043d}",
      "\N{U+049b}\N{U+0430}\N{U+0440}\N{U+0430}\N{U+0448}\N{U+0430}",
      "\N{U+0436}\N{U+0435}\N{U+043b}\N{U+0442}\N{U+043e}\N{U+049b}\N{U+0441}\N{U+0430}\N{U+043d}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+049a}\N{U+0430}\N{U+04a3}.",
      "\N{U+0410}\N{U+049b}\N{U+043f}.",
      "\N{U+041d}\N{U+0430}\N{U+0443}.",
      "\N{U+0421}\N{U+04d9}\N{U+0443}.",
      "\N{U+041c}\N{U+0430}\N{U+043c}.",
      "\N{U+041c}\N{U+0430}\N{U+0443}.",
      "\N{U+0428}\N{U+0456}\N{U+043b}.",
      "\N{U+0422}\N{U+0430}\N{U+043c}.",
      "\N{U+049a}\N{U+044b}\N{U+0440}.",
      "\N{U+049a}\N{U+0430}\N{U+0437}.",
      "\N{U+049a}\N{U+0430}\N{U+0440}.",
      "\N{U+0416}\N{U+0435}\N{U+043b}."
    ],
    month_stand_alone_narrow => [
      "\N{U+049a}",
      "\N{U+0410}",
      "\N{U+041d}",
      "\N{U+0421}",
      "\N{U+041c}",
      "\N{U+041c}",
      "\N{U+0428}",
      "\N{U+0422}",
      "\N{U+049a}",
      "\N{U+049a}",
      "\N{U+049a}",
      "\N{U+0416}"
    ],
    month_stand_alone_wide => [
      "\N{U+049a}\N{U+0430}\N{U+04a3}\N{U+0442}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+049b}\N{U+043f}\N{U+0430}\N{U+043d}",
      "\N{U+041d}\N{U+0430}\N{U+0443}\N{U+0440}\N{U+044b}\N{U+0437}",
      "\N{U+0421}\N{U+04d9}\N{U+0443}\N{U+0456}\N{U+0440}",
      "\N{U+041c}\N{U+0430}\N{U+043c}\N{U+044b}\N{U+0440}",
      "\N{U+041c}\N{U+0430}\N{U+0443}\N{U+0441}\N{U+044b}\N{U+043c}",
      "\N{U+0428}\N{U+0456}\N{U+043b}\N{U+0434}\N{U+0435}",
      "\N{U+0422}\N{U+0430}\N{U+043c}\N{U+044b}\N{U+0437}",
      "\N{U+049a}\N{U+044b}\N{U+0440}\N{U+043a}\N{U+04af}\N{U+0439}\N{U+0435}\N{U+043a}",
      "\N{U+049a}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+043d}",
      "\N{U+049a}\N{U+0430}\N{U+0440}\N{U+0430}\N{U+0448}\N{U+0430}",
      "\N{U+0416}\N{U+0435}\N{U+043b}\N{U+0442}\N{U+043e}\N{U+049b}\N{U+0441}\N{U+0430}\N{U+043d}"
    ],
    name => "Kazakh",
    native_language => "\N{U+049b}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+049b} \N{U+0442}\N{U+0456}\N{U+043b}\N{U+0456}",
    native_name => "\N{U+049b}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+049b} \N{U+0442}\N{U+0456}\N{U+043b}\N{U+0456}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0406} \N{U+0448}.",
      "\N{U+0406}\N{U+0406} \N{U+0448}.",
      "\N{U+0406}\N{U+0406}\N{U+0406} \N{U+0448}.",
      "IV \N{U+0448}."
    ],
    quarter_format_narrow => [
      "I",
      "II",
      "III",
      "IV"
    ],
    quarter_format_wide => [
      "\N{U+0406} \N{U+0448}\N{U+0438}\N{U+0440}\N{U+0435}\N{U+043a}",
      "\N{U+0406}\N{U+0406} \N{U+0448}\N{U+0438}\N{U+0440}\N{U+0435}\N{U+043a}",
      "\N{U+0406}\N{U+0406}\N{U+0406} \N{U+0448}\N{U+0438}\N{U+0440}\N{U+0435}\N{U+043a}",
      "IV \N{U+0448}\N{U+0438}\N{U+0440}\N{U+0435}\N{U+043a}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0406} \N{U+0448}.",
      "\N{U+0406}\N{U+0406} \N{U+0448}.",
      "\N{U+0406}\N{U+0406}\N{U+0406} \N{U+0448}.",
      "IV \N{U+0448}."
    ],
    quarter_stand_alone_narrow => [
      "I",
      "II",
      "III",
      "IV"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0406} \N{U+0448}\N{U+0438}\N{U+0440}\N{U+0435}\N{U+043a}",
      "\N{U+0406}\N{U+0406} \N{U+0448}\N{U+0438}\N{U+0440}\N{U+0435}\N{U+043a}",
      "\N{U+0406}\N{U+0406}\N{U+0406} \N{U+0448}\N{U+0438}\N{U+0440}\N{U+0435}\N{U+043a}",
      "IV \N{U+0448}\N{U+0438}\N{U+0440}\N{U+0435}\N{U+043a}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kk-KZ ]__
  {
    am_pm_abbreviated => [
      "\N{U+0442}\N{U+0430}\N{U+04a3}\N{U+0493}\N{U+044b}",
      "\N{U+0442}\N{U+04af}\N{U+0441}\N{U+043a}\N{U+0456}/\N{U+043a}\N{U+0435}\N{U+0448}\N{U+043a}\N{U+0456}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E, a h:mm",
      Ehms => "E, a h:mm:ss",
      Gy => "G y '\N{U+0436}'.",
      GyMMM => "G y '\N{U+0436}'. MMM",
      GyMMMEd => "G y '\N{U+0436}'. d MMM, E",
      GyMMMd => "G y '\N{U+0436}'. d MMM",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "dd.MM, E",
      MMM => "LLL",
      MMMEd => "d MMM, E",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd.MM",
      d => "d",
      h => "a h",
      hm => "a h:mm",
      hms => "a h:mm:ss",
      hmsv => "a h:mm:ss v",
      hmv => "a h:mm v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "dd.MM.y, E",
      yMMM => "y '\N{U+0436}'. MMM",
      yMMMEd => "y '\N{U+0436}'. d MMM, E",
      yMMMM => "y '\N{U+0436}'. MMMM",
      yMMMd => "y '\N{U+0436}'. d MMM",
      yMd => "dd.MM.y",
      yQQQ => "y '\N{U+0436}'. QQQ",
      yQQQQ => "y '\N{U+0436}'. QQQQ"
    },
    code => "kk-KZ",
    date_format_full => "y '\N{U+0436}'. d MMMM, EEEE",
    date_format_long => "y '\N{U+0436}'. d MMMM",
    date_format_medium => "y '\N{U+0436}'. dd MMM",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0414}\N{U+0441}",
      "\N{U+0421}\N{U+0441}",
      "\N{U+0421}\N{U+0440}",
      "\N{U+0411}\N{U+0441}",
      "\N{U+0416}\N{U+043c}",
      "\N{U+0421}\N{U+0431}",
      "\N{U+0416}\N{U+0441}"
    ],
    day_format_narrow => [
      "\N{U+0414}",
      "\N{U+0421}",
      "\N{U+0421}",
      "\N{U+0411}",
      "\N{U+0416}",
      "\N{U+0421}",
      "\N{U+0416}"
    ],
    day_format_wide => [
      "\N{U+0434}\N{U+04af}\N{U+0439}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0441}\N{U+0435}\N{U+0439}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0441}\N{U+04d9}\N{U+0440}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0431}\N{U+0435}\N{U+0439}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0436}\N{U+04b1}\N{U+043c}\N{U+0430}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0436}\N{U+0435}\N{U+043a}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0414}\N{U+0441}",
      "\N{U+0421}\N{U+0441}",
      "\N{U+0421}\N{U+0440}",
      "\N{U+0411}\N{U+0441}",
      "\N{U+0416}\N{U+043c}",
      "\N{U+0421}\N{U+0431}",
      "\N{U+0416}\N{U+0441}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0414}",
      "\N{U+0421}",
      "\N{U+0421}",
      "\N{U+0411}",
      "\N{U+0416}",
      "\N{U+0421}",
      "\N{U+0416}"
    ],
    day_stand_alone_wide => [
      "\N{U+0414}\N{U+04af}\N{U+0439}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0421}\N{U+0435}\N{U+0439}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0421}\N{U+04d9}\N{U+0440}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0411}\N{U+0435}\N{U+0439}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0416}\N{U+04b1}\N{U+043c}\N{U+0430}",
      "\N{U+0421}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}",
      "\N{U+0416}\N{U+0435}\N{U+043a}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0431}\N{U+0456}"
    ],
    era_abbreviated => [
      "\N{U+0431}.\N{U+0437}.\N{U+0434}.",
      "\N{U+0431}.\N{U+0437}."
    ],
    era_narrow => [
      "\N{U+0431}.\N{U+0437}.\N{U+0434}.",
      "\N{U+0431}.\N{U+0437}."
    ],
    era_wide => [
      "\N{U+0411}\N{U+0456}\N{U+0437}\N{U+0434}\N{U+0456}\N{U+04a3} \N{U+0437}\N{U+0430}\N{U+043c}\N{U+0430}\N{U+043d}\N{U+044b}\N{U+043c}\N{U+044b}\N{U+0437}\N{U+0493}\N{U+0430} \N{U+0434}\N{U+0435}\N{U+0439}\N{U+0456}\N{U+043d}",
      "\N{U+0411}\N{U+0456}\N{U+0437}\N{U+0434}\N{U+0456}\N{U+04a3} \N{U+0437}\N{U+0430}\N{U+043c}\N{U+0430}\N{U+043d}\N{U+044b}\N{U+043c}\N{U+044b}\N{U+0437}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d %b %Y %T",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Kazakh",
    month_format_abbreviated => [
      "\N{U+049b}\N{U+0430}\N{U+04a3}.",
      "\N{U+0430}\N{U+049b}\N{U+043f}.",
      "\N{U+043d}\N{U+0430}\N{U+0443}.",
      "\N{U+0441}\N{U+04d9}\N{U+0443}.",
      "\N{U+043c}\N{U+0430}\N{U+043c}.",
      "\N{U+043c}\N{U+0430}\N{U+0443}.",
      "\N{U+0448}\N{U+0456}\N{U+043b}.",
      "\N{U+0442}\N{U+0430}\N{U+043c}.",
      "\N{U+049b}\N{U+044b}\N{U+0440}.",
      "\N{U+049b}\N{U+0430}\N{U+0437}.",
      "\N{U+049b}\N{U+0430}\N{U+0440}.",
      "\N{U+0436}\N{U+0435}\N{U+043b}."
    ],
    month_format_narrow => [
      "\N{U+049a}",
      "\N{U+0410}",
      "\N{U+041d}",
      "\N{U+0421}",
      "\N{U+041c}",
      "\N{U+041c}",
      "\N{U+0428}",
      "\N{U+0422}",
      "\N{U+049a}",
      "\N{U+049a}",
      "\N{U+049a}",
      "\N{U+0416}"
    ],
    month_format_wide => [
      "\N{U+049b}\N{U+0430}\N{U+04a3}\N{U+0442}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+049b}\N{U+043f}\N{U+0430}\N{U+043d}",
      "\N{U+043d}\N{U+0430}\N{U+0443}\N{U+0440}\N{U+044b}\N{U+0437}",
      "\N{U+0441}\N{U+04d9}\N{U+0443}\N{U+0456}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+043c}\N{U+044b}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0443}\N{U+0441}\N{U+044b}\N{U+043c}",
      "\N{U+0448}\N{U+0456}\N{U+043b}\N{U+0434}\N{U+0435}",
      "\N{U+0442}\N{U+0430}\N{U+043c}\N{U+044b}\N{U+0437}",
      "\N{U+049b}\N{U+044b}\N{U+0440}\N{U+043a}\N{U+04af}\N{U+0439}\N{U+0435}\N{U+043a}",
      "\N{U+049b}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+043d}",
      "\N{U+049b}\N{U+0430}\N{U+0440}\N{U+0430}\N{U+0448}\N{U+0430}",
      "\N{U+0436}\N{U+0435}\N{U+043b}\N{U+0442}\N{U+043e}\N{U+049b}\N{U+0441}\N{U+0430}\N{U+043d}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+049a}\N{U+0430}\N{U+04a3}.",
      "\N{U+0410}\N{U+049b}\N{U+043f}.",
      "\N{U+041d}\N{U+0430}\N{U+0443}.",
      "\N{U+0421}\N{U+04d9}\N{U+0443}.",
      "\N{U+041c}\N{U+0430}\N{U+043c}.",
      "\N{U+041c}\N{U+0430}\N{U+0443}.",
      "\N{U+0428}\N{U+0456}\N{U+043b}.",
      "\N{U+0422}\N{U+0430}\N{U+043c}.",
      "\N{U+049a}\N{U+044b}\N{U+0440}.",
      "\N{U+049a}\N{U+0430}\N{U+0437}.",
      "\N{U+049a}\N{U+0430}\N{U+0440}.",
      "\N{U+0416}\N{U+0435}\N{U+043b}."
    ],
    month_stand_alone_narrow => [
      "\N{U+049a}",
      "\N{U+0410}",
      "\N{U+041d}",
      "\N{U+0421}",
      "\N{U+041c}",
      "\N{U+041c}",
      "\N{U+0428}",
      "\N{U+0422}",
      "\N{U+049a}",
      "\N{U+049a}",
      "\N{U+049a}",
      "\N{U+0416}"
    ],
    month_stand_alone_wide => [
      "\N{U+049a}\N{U+0430}\N{U+04a3}\N{U+0442}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+049b}\N{U+043f}\N{U+0430}\N{U+043d}",
      "\N{U+041d}\N{U+0430}\N{U+0443}\N{U+0440}\N{U+044b}\N{U+0437}",
      "\N{U+0421}\N{U+04d9}\N{U+0443}\N{U+0456}\N{U+0440}",
      "\N{U+041c}\N{U+0430}\N{U+043c}\N{U+044b}\N{U+0440}",
      "\N{U+041c}\N{U+0430}\N{U+0443}\N{U+0441}\N{U+044b}\N{U+043c}",
      "\N{U+0428}\N{U+0456}\N{U+043b}\N{U+0434}\N{U+0435}",
      "\N{U+0422}\N{U+0430}\N{U+043c}\N{U+044b}\N{U+0437}",
      "\N{U+049a}\N{U+044b}\N{U+0440}\N{U+043a}\N{U+04af}\N{U+0439}\N{U+0435}\N{U+043a}",
      "\N{U+049a}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+043d}",
      "\N{U+049a}\N{U+0430}\N{U+0440}\N{U+0430}\N{U+0448}\N{U+0430}",
      "\N{U+0416}\N{U+0435}\N{U+043b}\N{U+0442}\N{U+043e}\N{U+049b}\N{U+0441}\N{U+0430}\N{U+043d}"
    ],
    name => "Kazakh Kazakhstan",
    native_language => "\N{U+049b}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+049b} \N{U+0442}\N{U+0456}\N{U+043b}\N{U+0456}",
    native_name => "\N{U+049b}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+049b} \N{U+0442}\N{U+0456}\N{U+043b}\N{U+0456} \N{U+049a}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+049b}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+043d}",
    native_script => undef,
    native_territory => "\N{U+049a}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+049b}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+043d}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0406} \N{U+0448}.",
      "\N{U+0406}\N{U+0406} \N{U+0448}.",
      "\N{U+0406}\N{U+0406}\N{U+0406} \N{U+0448}.",
      "IV \N{U+0448}."
    ],
    quarter_format_narrow => [
      "I",
      "II",
      "III",
      "IV"
    ],
    quarter_format_wide => [
      "\N{U+0406} \N{U+0448}\N{U+0438}\N{U+0440}\N{U+0435}\N{U+043a}",
      "\N{U+0406}\N{U+0406} \N{U+0448}\N{U+0438}\N{U+0440}\N{U+0435}\N{U+043a}",
      "\N{U+0406}\N{U+0406}\N{U+0406} \N{U+0448}\N{U+0438}\N{U+0440}\N{U+0435}\N{U+043a}",
      "IV \N{U+0448}\N{U+0438}\N{U+0440}\N{U+0435}\N{U+043a}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0406} \N{U+0448}.",
      "\N{U+0406}\N{U+0406} \N{U+0448}.",
      "\N{U+0406}\N{U+0406}\N{U+0406} \N{U+0448}.",
      "IV \N{U+0448}."
    ],
    quarter_stand_alone_narrow => [
      "I",
      "II",
      "III",
      "IV"
    ],
    quarter_stand_alone_wide => [
      "\N{U+0406} \N{U+0448}\N{U+0438}\N{U+0440}\N{U+0435}\N{U+043a}",
      "\N{U+0406}\N{U+0406} \N{U+0448}\N{U+0438}\N{U+0440}\N{U+0435}\N{U+043a}",
      "\N{U+0406}\N{U+0406}\N{U+0406} \N{U+0448}\N{U+0438}\N{U+0440}\N{U+0435}\N{U+043a}",
      "IV \N{U+0448}\N{U+0438}\N{U+0440}\N{U+0435}\N{U+043a}"
    ],
    script => undef,
    territory => "Kazakhstan",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kkj ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM y",
      yMEd => "E dd/MM y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "dd/MM y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "kkj",
    date_format_full => "EEEE dd MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lundi",
      "mardi",
      "m\N{U+025b}rk\N{U+025b}r\N{U+025b}di",
      "yedi",
      "va\N{U+014b}d\N{U+025b}r\N{U+025b}di",
      "m\N{U+0254}n\N{U+0254} s\N{U+0254}ndi",
      "s\N{U+0254}ndi"
    ],
    day_format_narrow => [
      "lu",
      "ma",
      "m\N{U+025b}",
      "ye",
      "va",
      "ms",
      "so"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "m\N{U+025b}rk\N{U+025b}r\N{U+025b}di",
      "yedi",
      "va\N{U+014b}d\N{U+025b}r\N{U+025b}di",
      "m\N{U+0254}n\N{U+0254} s\N{U+0254}ndi",
      "s\N{U+0254}ndi"
    ],
    day_stand_alone_abbreviated => [
      "lundi",
      "mardi",
      "m\N{U+025b}rk\N{U+025b}r\N{U+025b}di",
      "yedi",
      "va\N{U+014b}d\N{U+025b}r\N{U+025b}di",
      "m\N{U+0254}n\N{U+0254} s\N{U+0254}ndi",
      "s\N{U+0254}ndi"
    ],
    day_stand_alone_narrow => [
      "lu",
      "ma",
      "m\N{U+025b}",
      "ye",
      "va",
      "ms",
      "so"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "m\N{U+025b}rk\N{U+025b}r\N{U+025b}di",
      "yedi",
      "va\N{U+014b}d\N{U+025b}r\N{U+025b}di",
      "m\N{U+0254}n\N{U+0254} s\N{U+0254}ndi",
      "s\N{U+0254}ndi"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kako",
    month_format_abbreviated => [
      "pamba",
      "wanja",
      "mbiy\N{U+0254} m\N{U+025b}ndo\N{U+014b}g\N{U+0254}",
      "Ny\N{U+0254}l\N{U+0254}mb\N{U+0254}\N{U+014b}g\N{U+0254}",
      "M\N{U+0254}n\N{U+0254} \N{U+014b}gbanja",
      "Nya\N{U+014b}gw\N{U+025b} \N{U+014b}gbanja",
      "ku\N{U+014b}gw\N{U+025b}",
      "f\N{U+025b}",
      "njapi",
      "nyukul",
      11,
      "\N{U+0253}ul\N{U+0253}us\N{U+025b}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "pamba",
      "wanja",
      "mbiy\N{U+0254} m\N{U+025b}ndo\N{U+014b}g\N{U+0254}",
      "Ny\N{U+0254}l\N{U+0254}mb\N{U+0254}\N{U+014b}g\N{U+0254}",
      "M\N{U+0254}n\N{U+0254} \N{U+014b}gbanja",
      "Nya\N{U+014b}gw\N{U+025b} \N{U+014b}gbanja",
      "ku\N{U+014b}gw\N{U+025b}",
      "f\N{U+025b}",
      "njapi",
      "nyukul",
      11,
      "\N{U+0253}ul\N{U+0253}us\N{U+025b}"
    ],
    month_stand_alone_abbreviated => [
      "pamba",
      "wanja",
      "mbiy\N{U+0254} m\N{U+025b}ndo\N{U+014b}g\N{U+0254}",
      "Ny\N{U+0254}l\N{U+0254}mb\N{U+0254}\N{U+014b}g\N{U+0254}",
      "M\N{U+0254}n\N{U+0254} \N{U+014b}gbanja",
      "Nya\N{U+014b}gw\N{U+025b} \N{U+014b}gbanja",
      "ku\N{U+014b}gw\N{U+025b}",
      "f\N{U+025b}",
      "njapi",
      "nyukul",
      11,
      "\N{U+0253}ul\N{U+0253}us\N{U+025b}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "pamba",
      "wanja",
      "mbiy\N{U+0254} m\N{U+025b}ndo\N{U+014b}g\N{U+0254}",
      "Ny\N{U+0254}l\N{U+0254}mb\N{U+0254}\N{U+014b}g\N{U+0254}",
      "M\N{U+0254}n\N{U+0254} \N{U+014b}gbanja",
      "Nya\N{U+014b}gw\N{U+025b} \N{U+014b}gbanja",
      "ku\N{U+014b}gw\N{U+025b}",
      "f\N{U+025b}",
      "njapi",
      "nyukul",
      11,
      "\N{U+0253}ul\N{U+0253}us\N{U+025b}"
    ],
    name => "Kako",
    native_language => "kak\N{U+0254}",
    native_name => "kak\N{U+0254}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kkj-CM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E dd/MM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM y",
      yMEd => "E dd/MM y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "dd/MM y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "kkj-CM",
    date_format_full => "EEEE dd MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lundi",
      "mardi",
      "m\N{U+025b}rk\N{U+025b}r\N{U+025b}di",
      "yedi",
      "va\N{U+014b}d\N{U+025b}r\N{U+025b}di",
      "m\N{U+0254}n\N{U+0254} s\N{U+0254}ndi",
      "s\N{U+0254}ndi"
    ],
    day_format_narrow => [
      "lu",
      "ma",
      "m\N{U+025b}",
      "ye",
      "va",
      "ms",
      "so"
    ],
    day_format_wide => [
      "lundi",
      "mardi",
      "m\N{U+025b}rk\N{U+025b}r\N{U+025b}di",
      "yedi",
      "va\N{U+014b}d\N{U+025b}r\N{U+025b}di",
      "m\N{U+0254}n\N{U+0254} s\N{U+0254}ndi",
      "s\N{U+0254}ndi"
    ],
    day_stand_alone_abbreviated => [
      "lundi",
      "mardi",
      "m\N{U+025b}rk\N{U+025b}r\N{U+025b}di",
      "yedi",
      "va\N{U+014b}d\N{U+025b}r\N{U+025b}di",
      "m\N{U+0254}n\N{U+0254} s\N{U+0254}ndi",
      "s\N{U+0254}ndi"
    ],
    day_stand_alone_narrow => [
      "lu",
      "ma",
      "m\N{U+025b}",
      "ye",
      "va",
      "ms",
      "so"
    ],
    day_stand_alone_wide => [
      "lundi",
      "mardi",
      "m\N{U+025b}rk\N{U+025b}r\N{U+025b}di",
      "yedi",
      "va\N{U+014b}d\N{U+025b}r\N{U+025b}di",
      "m\N{U+0254}n\N{U+0254} s\N{U+0254}ndi",
      "s\N{U+0254}ndi"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kako",
    month_format_abbreviated => [
      "pamba",
      "wanja",
      "mbiy\N{U+0254} m\N{U+025b}ndo\N{U+014b}g\N{U+0254}",
      "Ny\N{U+0254}l\N{U+0254}mb\N{U+0254}\N{U+014b}g\N{U+0254}",
      "M\N{U+0254}n\N{U+0254} \N{U+014b}gbanja",
      "Nya\N{U+014b}gw\N{U+025b} \N{U+014b}gbanja",
      "ku\N{U+014b}gw\N{U+025b}",
      "f\N{U+025b}",
      "njapi",
      "nyukul",
      11,
      "\N{U+0253}ul\N{U+0253}us\N{U+025b}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "pamba",
      "wanja",
      "mbiy\N{U+0254} m\N{U+025b}ndo\N{U+014b}g\N{U+0254}",
      "Ny\N{U+0254}l\N{U+0254}mb\N{U+0254}\N{U+014b}g\N{U+0254}",
      "M\N{U+0254}n\N{U+0254} \N{U+014b}gbanja",
      "Nya\N{U+014b}gw\N{U+025b} \N{U+014b}gbanja",
      "ku\N{U+014b}gw\N{U+025b}",
      "f\N{U+025b}",
      "njapi",
      "nyukul",
      11,
      "\N{U+0253}ul\N{U+0253}us\N{U+025b}"
    ],
    month_stand_alone_abbreviated => [
      "pamba",
      "wanja",
      "mbiy\N{U+0254} m\N{U+025b}ndo\N{U+014b}g\N{U+0254}",
      "Ny\N{U+0254}l\N{U+0254}mb\N{U+0254}\N{U+014b}g\N{U+0254}",
      "M\N{U+0254}n\N{U+0254} \N{U+014b}gbanja",
      "Nya\N{U+014b}gw\N{U+025b} \N{U+014b}gbanja",
      "ku\N{U+014b}gw\N{U+025b}",
      "f\N{U+025b}",
      "njapi",
      "nyukul",
      11,
      "\N{U+0253}ul\N{U+0253}us\N{U+025b}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "pamba",
      "wanja",
      "mbiy\N{U+0254} m\N{U+025b}ndo\N{U+014b}g\N{U+0254}",
      "Ny\N{U+0254}l\N{U+0254}mb\N{U+0254}\N{U+014b}g\N{U+0254}",
      "M\N{U+0254}n\N{U+0254} \N{U+014b}gbanja",
      "Nya\N{U+014b}gw\N{U+025b} \N{U+014b}gbanja",
      "ku\N{U+014b}gw\N{U+025b}",
      "f\N{U+025b}",
      "njapi",
      "nyukul",
      11,
      "\N{U+0253}ul\N{U+0253}us\N{U+025b}"
    ],
    name => "Kako Cameroon",
    native_language => "kak\N{U+0254}",
    native_name => "kak\N{U+0254} Kam\N{U+025b}run",
    native_script => undef,
    native_territory => "Kam\N{U+025b}run",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Cameroon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kl ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "kl",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ata",
      "mar",
      "pin",
      "sis",
      "tal",
      "arf",
      "sab"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "ataasinngorneq",
      "marlunngorneq",
      "pingasunngorneq",
      "sisamanngorneq",
      "tallimanngorneq",
      "arfininngorneq",
      "sabaat"
    ],
    day_stand_alone_abbreviated => [
      "ata",
      "mar",
      "pin",
      "sis",
      "tal",
      "arf",
      "sab"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "ataasinngorneq",
      "marlunngorneq",
      "pingasunngorneq",
      "sisamanngorneq",
      "tallimanngorneq",
      "arfininngorneq",
      "sabaat"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kalaallisut",
    month_format_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "januari",
      "februari",
      "martsi",
      "aprili",
      "maji",
      "juni",
      "juli",
      "augustusi",
      "septemberi",
      "oktoberi",
      "novemberi",
      "decemberi"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "januari",
      "februari",
      "martsi",
      "aprili",
      "maji",
      "juni",
      "juli",
      "augustusi",
      "septemberi",
      "oktoberi",
      "novemberi",
      "decemberi"
    ],
    name => "Kalaallisut",
    native_language => "kalaallisut",
    native_name => "kalaallisut",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kl-GL ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "kl-GL",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ata",
      "mar",
      "pin",
      "sis",
      "tal",
      "arf",
      "sab"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "ataasinngorneq",
      "marlunngorneq",
      "pingasunngorneq",
      "sisamanngorneq",
      "tallimanngorneq",
      "arfininngorneq",
      "sabaat"
    ],
    day_stand_alone_abbreviated => [
      "ata",
      "mar",
      "pin",
      "sis",
      "tal",
      "arf",
      "sab"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "ataasinngorneq",
      "marlunngorneq",
      "pingasunngorneq",
      "sisamanngorneq",
      "tallimanngorneq",
      "arfininngorneq",
      "sabaat"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d %b %Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Kalaallisut",
    month_format_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "januari",
      "februari",
      "martsi",
      "aprili",
      "maji",
      "juni",
      "juli",
      "augustusi",
      "septemberi",
      "oktoberi",
      "novemberi",
      "decemberi"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "januari",
      "februari",
      "martsi",
      "aprili",
      "maji",
      "juni",
      "juli",
      "augustusi",
      "septemberi",
      "oktoberi",
      "novemberi",
      "decemberi"
    ],
    name => "Kalaallisut Greenland",
    native_language => "kalaallisut",
    native_name => "kalaallisut Kalaallit Nunaat",
    native_script => undef,
    native_territory => "Kalaallit Nunaat",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Greenland",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kln ]__
  {
    am_pm_abbreviated => [
      "krn",
      "koosk"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "kln",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Kot",
      "Koo",
      "Kos",
      "Koa",
      "Kom",
      "Kol",
      "Kts"
    ],
    day_format_narrow => [
      "T",
      "O",
      "S",
      "A",
      "M",
      "L",
      "T"
    ],
    day_format_wide => [
      "Kotaai",
      "Koaeng\N{U+2019}",
      "Kosomok",
      "Koang\N{U+2019}wan",
      "Komuut",
      "Kolo",
      "Kotisap"
    ],
    day_stand_alone_abbreviated => [
      "Kot",
      "Koo",
      "Kos",
      "Koa",
      "Kom",
      "Kol",
      "Kts"
    ],
    day_stand_alone_narrow => [
      "T",
      "O",
      "S",
      "A",
      "M",
      "L",
      "T"
    ],
    day_stand_alone_wide => [
      "Kotaai",
      "Koaeng\N{U+2019}",
      "Kosomok",
      "Koang\N{U+2019}wan",
      "Komuut",
      "Kolo",
      "Kotisap"
    ],
    era_abbreviated => [
      "AM",
      "KO"
    ],
    era_narrow => [
      "AM",
      "KO"
    ],
    era_wide => [
      "Amait kesich Jesu",
      "Kokakesich Jesu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kalenjin",
    month_format_abbreviated => [
      "Mul",
      "Ngat",
      "Taa",
      "Iwo",
      "Mam",
      "Paa",
      "Nge",
      "Roo",
      "Bur",
      "Epe",
      "Kpt",
      "Kpa"
    ],
    month_format_narrow => [
      "M",
      "N",
      "T",
      "I",
      "M",
      "P",
      "N",
      "R",
      "B",
      "E",
      "K",
      "K"
    ],
    month_format_wide => [
      "Mulgul",
      "Ng\N{U+2019}atyaato",
      "Kiptaamo",
      "Iwootkuut",
      "Mamuut",
      "Paagi",
      "Ng\N{U+2019}eiyeet",
      "Rooptui",
      "Bureet",
      "Epeeso",
      "Kipsuunde ne taai",
      "Kipsuunde nebo aeng\N{U+2019}"
    ],
    month_stand_alone_abbreviated => [
      "Mul",
      "Ngat",
      "Taa",
      "Iwo",
      "Mam",
      "Paa",
      "Nge",
      "Roo",
      "Bur",
      "Epe",
      "Kpt",
      "Kpa"
    ],
    month_stand_alone_narrow => [
      "M",
      "N",
      "T",
      "I",
      "M",
      "P",
      "N",
      "R",
      "B",
      "E",
      "K",
      "K"
    ],
    month_stand_alone_wide => [
      "Mulgul",
      "Ng\N{U+2019}atyaato",
      "Kiptaamo",
      "Iwootkuut",
      "Mamuut",
      "Paagi",
      "Ng\N{U+2019}eiyeet",
      "Rooptui",
      "Bureet",
      "Epeeso",
      "Kipsuunde ne taai",
      "Kipsuunde nebo aeng\N{U+2019}"
    ],
    name => "Kalenjin",
    native_language => "Kalenjin",
    native_name => "Kalenjin",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo netai",
      "Robo nebo aeng\N{U+2019}",
      "Robo nebo somok",
      "Robo nebo ang\N{U+2019}wan"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo netai",
      "Robo nebo aeng\N{U+2019}",
      "Robo nebo somok",
      "Robo nebo ang\N{U+2019}wan"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kln-KE ]__
  {
    am_pm_abbreviated => [
      "krn",
      "koosk"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "kln-KE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Kot",
      "Koo",
      "Kos",
      "Koa",
      "Kom",
      "Kol",
      "Kts"
    ],
    day_format_narrow => [
      "T",
      "O",
      "S",
      "A",
      "M",
      "L",
      "T"
    ],
    day_format_wide => [
      "Kotaai",
      "Koaeng\N{U+2019}",
      "Kosomok",
      "Koang\N{U+2019}wan",
      "Komuut",
      "Kolo",
      "Kotisap"
    ],
    day_stand_alone_abbreviated => [
      "Kot",
      "Koo",
      "Kos",
      "Koa",
      "Kom",
      "Kol",
      "Kts"
    ],
    day_stand_alone_narrow => [
      "T",
      "O",
      "S",
      "A",
      "M",
      "L",
      "T"
    ],
    day_stand_alone_wide => [
      "Kotaai",
      "Koaeng\N{U+2019}",
      "Kosomok",
      "Koang\N{U+2019}wan",
      "Komuut",
      "Kolo",
      "Kotisap"
    ],
    era_abbreviated => [
      "AM",
      "KO"
    ],
    era_narrow => [
      "AM",
      "KO"
    ],
    era_wide => [
      "Amait kesich Jesu",
      "Kokakesich Jesu"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kalenjin",
    month_format_abbreviated => [
      "Mul",
      "Ngat",
      "Taa",
      "Iwo",
      "Mam",
      "Paa",
      "Nge",
      "Roo",
      "Bur",
      "Epe",
      "Kpt",
      "Kpa"
    ],
    month_format_narrow => [
      "M",
      "N",
      "T",
      "I",
      "M",
      "P",
      "N",
      "R",
      "B",
      "E",
      "K",
      "K"
    ],
    month_format_wide => [
      "Mulgul",
      "Ng\N{U+2019}atyaato",
      "Kiptaamo",
      "Iwootkuut",
      "Mamuut",
      "Paagi",
      "Ng\N{U+2019}eiyeet",
      "Rooptui",
      "Bureet",
      "Epeeso",
      "Kipsuunde ne taai",
      "Kipsuunde nebo aeng\N{U+2019}"
    ],
    month_stand_alone_abbreviated => [
      "Mul",
      "Ngat",
      "Taa",
      "Iwo",
      "Mam",
      "Paa",
      "Nge",
      "Roo",
      "Bur",
      "Epe",
      "Kpt",
      "Kpa"
    ],
    month_stand_alone_narrow => [
      "M",
      "N",
      "T",
      "I",
      "M",
      "P",
      "N",
      "R",
      "B",
      "E",
      "K",
      "K"
    ],
    month_stand_alone_wide => [
      "Mulgul",
      "Ng\N{U+2019}atyaato",
      "Kiptaamo",
      "Iwootkuut",
      "Mamuut",
      "Paagi",
      "Ng\N{U+2019}eiyeet",
      "Rooptui",
      "Bureet",
      "Epeeso",
      "Kipsuunde ne taai",
      "Kipsuunde nebo aeng\N{U+2019}"
    ],
    name => "Kalenjin Kenya",
    native_language => "Kalenjin",
    native_name => "Kalenjin Emetab Kenya",
    native_script => undef,
    native_territory => "Emetab Kenya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo netai",
      "Robo nebo aeng\N{U+2019}",
      "Robo nebo somok",
      "Robo nebo ang\N{U+2019}wan"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo netai",
      "Robo nebo aeng\N{U+2019}",
      "Robo nebo somok",
      "Robo nebo ang\N{U+2019}wan"
    ],
    script => undef,
    territory => "Kenya",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ km ]__
  {
    am_pm_abbreviated => [
      "\N{U+1796}\N{U+17d2}\N{U+179a}\N{U+17b9}\N{U+1780}",
      "\N{U+179b}\N{U+17d2}\N{U+1784}\N{U+17b6}\N{U+1785}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y \N{U+1793}\N{U+17c3} G",
      GyMMM => "MMM y \N{U+1793}\N{U+17c3} G",
      GyMMMEd => "E d MMM y \N{U+1793}\N{U+17c3} G",
      GyMMMd => "d MMM y \N{U+1793}\N{U+17c3} G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d MMM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E d-M-y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d-M-y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "km",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} \N{U+1793}\N{U+17c5} {0}",
    datetime_format_long => "{1} \N{U+1793}\N{U+17c5} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+1785}\N{U+17d0}\N{U+1793}\N{U+17d2}\N{U+1791}",
      "\N{U+17a2}\N{U+1784}\N{U+17d2}\N{U+1782}\N{U+17b6}\N{U+179a}",
      "\N{U+1796}\N{U+17bb}\N{U+1792}",
      "\N{U+1796}\N{U+17d2}\N{U+179a}\N{U+17a0}\N{U+179f}\N{U+17d2}\N{U+1794}\N{U+178f}\N{U+17b7}\N{U+17cd}",
      "\N{U+179f}\N{U+17bb}\N{U+1780}\N{U+17d2}\N{U+179a}",
      "\N{U+179f}\N{U+17c5}\N{U+179a}\N{U+17cd}",
      "\N{U+17a2}\N{U+17b6}\N{U+1791}\N{U+17b7}\N{U+178f}\N{U+17d2}\N{U+1799}"
    ],
    day_format_narrow => [
      "\N{U+1785}",
      "\N{U+17a2}",
      "\N{U+1796}\N{U+17bb}",
      "\N{U+1796}\N{U+17d2}\N{U+179a}",
      "\N{U+179f}\N{U+17bb}",
      "\N{U+179f}",
      "\N{U+17a2}\N{U+17b6}"
    ],
    day_format_wide => [
      "\N{U+1785}\N{U+17d0}\N{U+1793}\N{U+17d2}\N{U+1791}",
      "\N{U+17a2}\N{U+1784}\N{U+17d2}\N{U+1782}\N{U+17b6}\N{U+179a}",
      "\N{U+1796}\N{U+17bb}\N{U+1792}",
      "\N{U+1796}\N{U+17d2}\N{U+179a}\N{U+17a0}\N{U+179f}\N{U+17d2}\N{U+1794}\N{U+178f}\N{U+17b7}\N{U+17cd}",
      "\N{U+179f}\N{U+17bb}\N{U+1780}\N{U+17d2}\N{U+179a}",
      "\N{U+179f}\N{U+17c5}\N{U+179a}\N{U+17cd}",
      "\N{U+17a2}\N{U+17b6}\N{U+1791}\N{U+17b7}\N{U+178f}\N{U+17d2}\N{U+1799}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+1785}\N{U+17d0}\N{U+1793}\N{U+17d2}\N{U+1791}",
      "\N{U+17a2}\N{U+1784}\N{U+17d2}\N{U+1782}\N{U+17b6}\N{U+179a}",
      "\N{U+1796}\N{U+17bb}\N{U+1792}",
      "\N{U+1796}\N{U+17d2}\N{U+179a}\N{U+17a0}\N{U+179f}\N{U+17d2}\N{U+1794}\N{U+178f}\N{U+17b7}\N{U+17cd}",
      "\N{U+179f}\N{U+17bb}\N{U+1780}\N{U+17d2}\N{U+179a}",
      "\N{U+179f}\N{U+17c5}\N{U+179a}\N{U+17cd}",
      "\N{U+17a2}\N{U+17b6}\N{U+1791}\N{U+17b7}\N{U+178f}\N{U+17d2}\N{U+1799}"
    ],
    day_stand_alone_narrow => [
      "\N{U+1785}",
      "\N{U+17a2}",
      "\N{U+1796}\N{U+17bb}",
      "\N{U+1796}\N{U+17d2}\N{U+179a}",
      "\N{U+179f}\N{U+17bb}",
      "\N{U+179f}",
      "\N{U+17a2}\N{U+17b6}"
    ],
    day_stand_alone_wide => [
      "\N{U+1785}\N{U+17d0}\N{U+1793}\N{U+17d2}\N{U+1791}",
      "\N{U+17a2}\N{U+1784}\N{U+17d2}\N{U+1782}\N{U+17b6}\N{U+179a}",
      "\N{U+1796}\N{U+17bb}\N{U+1792}",
      "\N{U+1796}\N{U+17d2}\N{U+179a}\N{U+17a0}\N{U+179f}\N{U+17d2}\N{U+1794}\N{U+178f}\N{U+17b7}\N{U+17cd}",
      "\N{U+179f}\N{U+17bb}\N{U+1780}\N{U+17d2}\N{U+179a}",
      "\N{U+179f}\N{U+17c5}\N{U+179a}\N{U+17cd}",
      "\N{U+17a2}\N{U+17b6}\N{U+1791}\N{U+17b7}\N{U+178f}\N{U+17d2}\N{U+1799}"
    ],
    era_abbreviated => [
      "\N{U+1798}\N{U+17bb}\N{U+1793} \N{U+1782}.\N{U+179f}.",
      "\N{U+1782}.\N{U+179f}."
    ],
    era_narrow => [
      "\N{U+1798}\N{U+17bb}\N{U+1793} \N{U+1782}.\N{U+179f}.",
      "\N{U+1782}.\N{U+179f}."
    ],
    era_wide => [
      "\N{U+1798}\N{U+17bb}\N{U+1793}\N{U+200b}\N{U+1782}\N{U+17d2}\N{U+179a}\N{U+17b7}\N{U+179f}\N{U+17d2}\N{U+178f}\N{U+179f}\N{U+1780}\N{U+179a}\N{U+17b6}\N{U+1787}",
      "\N{U+1782}\N{U+17d2}\N{U+179a}\N{U+17b7}\N{U+179f}\N{U+17d2}\N{U+178f}\N{U+179f}\N{U+1780}\N{U+179a}\N{U+17b6}\N{U+1787}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Khmer",
    month_format_abbreviated => [
      "\N{U+1798}\N{U+1780}\N{U+179a}\N{U+17b6}",
      "\N{U+1780}\N{U+17bb}\N{U+1798}\N{U+17d2}\N{U+1797}\N{U+17c8}",
      "\N{U+1798}\N{U+17b8}\N{U+1793}\N{U+17b6}",
      "\N{U+1798}\N{U+17c1}\N{U+179f}\N{U+17b6}",
      "\N{U+17a7}\N{U+179f}\N{U+1797}\N{U+17b6}",
      "\N{U+1798}\N{U+17b7}\N{U+1790}\N{U+17bb}\N{U+1793}\N{U+17b6}",
      "\N{U+1780}\N{U+1780}\N{U+17d2}\N{U+1780}\N{U+178a}\N{U+17b6}",
      "\N{U+179f}\N{U+17b8}\N{U+17a0}\N{U+17b6}",
      "\N{U+1780}\N{U+1789}\N{U+17d2}\N{U+1789}\N{U+17b6}",
      "\N{U+178f}\N{U+17bb}\N{U+179b}\N{U+17b6}",
      "\N{U+179c}\N{U+17b7}\N{U+1785}\N{U+17d2}\N{U+1786}\N{U+17b7}\N{U+1780}\N{U+17b6}",
      "\N{U+1792}\N{U+17d2}\N{U+1793}\N{U+17bc}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+1798}\N{U+1780}\N{U+179a}\N{U+17b6}",
      "\N{U+1780}\N{U+17bb}\N{U+1798}\N{U+17d2}\N{U+1797}\N{U+17c8}",
      "\N{U+1798}\N{U+17b8}\N{U+1793}\N{U+17b6}",
      "\N{U+1798}\N{U+17c1}\N{U+179f}\N{U+17b6}",
      "\N{U+17a7}\N{U+179f}\N{U+1797}\N{U+17b6}",
      "\N{U+1798}\N{U+17b7}\N{U+1790}\N{U+17bb}\N{U+1793}\N{U+17b6}",
      "\N{U+1780}\N{U+1780}\N{U+17d2}\N{U+1780}\N{U+178a}\N{U+17b6}",
      "\N{U+179f}\N{U+17b8}\N{U+17a0}\N{U+17b6}",
      "\N{U+1780}\N{U+1789}\N{U+17d2}\N{U+1789}\N{U+17b6}",
      "\N{U+178f}\N{U+17bb}\N{U+179b}\N{U+17b6}",
      "\N{U+179c}\N{U+17b7}\N{U+1785}\N{U+17d2}\N{U+1786}\N{U+17b7}\N{U+1780}\N{U+17b6}",
      "\N{U+1792}\N{U+17d2}\N{U+1793}\N{U+17bc}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+1798}\N{U+1780}\N{U+179a}\N{U+17b6}",
      "\N{U+1780}\N{U+17bb}\N{U+1798}\N{U+17d2}\N{U+1797}\N{U+17c8}",
      "\N{U+1798}\N{U+17b8}\N{U+1793}\N{U+17b6}",
      "\N{U+1798}\N{U+17c1}\N{U+179f}\N{U+17b6}",
      "\N{U+17a7}\N{U+179f}\N{U+1797}\N{U+17b6}",
      "\N{U+1798}\N{U+17b7}\N{U+1790}\N{U+17bb}\N{U+1793}\N{U+17b6}",
      "\N{U+1780}\N{U+1780}\N{U+17d2}\N{U+1780}\N{U+178a}\N{U+17b6}",
      "\N{U+179f}\N{U+17b8}\N{U+17a0}\N{U+17b6}",
      "\N{U+1780}\N{U+1789}\N{U+17d2}\N{U+1789}\N{U+17b6}",
      "\N{U+178f}\N{U+17bb}\N{U+179b}\N{U+17b6}",
      "\N{U+179c}\N{U+17b7}\N{U+1785}\N{U+17d2}\N{U+1786}\N{U+17b7}\N{U+1780}\N{U+17b6}",
      "\N{U+1792}\N{U+17d2}\N{U+1793}\N{U+17bc}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+1798}\N{U+1780}\N{U+179a}\N{U+17b6}",
      "\N{U+1780}\N{U+17bb}\N{U+1798}\N{U+17d2}\N{U+1797}\N{U+17c8}",
      "\N{U+1798}\N{U+17b8}\N{U+1793}\N{U+17b6}",
      "\N{U+1798}\N{U+17c1}\N{U+179f}\N{U+17b6}",
      "\N{U+17a7}\N{U+179f}\N{U+1797}\N{U+17b6}",
      "\N{U+1798}\N{U+17b7}\N{U+1790}\N{U+17bb}\N{U+1793}\N{U+17b6}",
      "\N{U+1780}\N{U+1780}\N{U+17d2}\N{U+1780}\N{U+178a}\N{U+17b6}",
      "\N{U+179f}\N{U+17b8}\N{U+17a0}\N{U+17b6}",
      "\N{U+1780}\N{U+1789}\N{U+17d2}\N{U+1789}\N{U+17b6}",
      "\N{U+178f}\N{U+17bb}\N{U+179b}\N{U+17b6}",
      "\N{U+179c}\N{U+17b7}\N{U+1785}\N{U+17d2}\N{U+1786}\N{U+17b7}\N{U+1780}\N{U+17b6}",
      "\N{U+1792}\N{U+17d2}\N{U+1793}\N{U+17bc}"
    ],
    name => "Khmer",
    native_language => "\N{U+1781}\N{U+17d2}\N{U+1798}\N{U+17c2}\N{U+179a}",
    native_name => "\N{U+1781}\N{U+17d2}\N{U+1798}\N{U+17c2}\N{U+179a}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 1",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 2",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 3",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 1",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 2",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 3",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 1",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 2",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 3",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 1",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 2",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 3",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ km-KH ]__
  {
    am_pm_abbreviated => [
      "\N{U+1796}\N{U+17d2}\N{U+179a}\N{U+17b9}\N{U+1780}",
      "\N{U+179b}\N{U+17d2}\N{U+1784}\N{U+17b6}\N{U+1785}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y \N{U+1793}\N{U+17c3} G",
      GyMMM => "MMM y \N{U+1793}\N{U+17c3} G",
      GyMMMEd => "E d MMM y \N{U+1793}\N{U+17c3} G",
      GyMMMd => "d MMM y \N{U+1793}\N{U+17c3} G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d MMM",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E d-M-y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d-M-y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "km-KH",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} \N{U+1793}\N{U+17c5} {0}",
    datetime_format_long => "{1} \N{U+1793}\N{U+17c5} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+1785}\N{U+17d0}\N{U+1793}\N{U+17d2}\N{U+1791}",
      "\N{U+17a2}\N{U+1784}\N{U+17d2}\N{U+1782}\N{U+17b6}\N{U+179a}",
      "\N{U+1796}\N{U+17bb}\N{U+1792}",
      "\N{U+1796}\N{U+17d2}\N{U+179a}\N{U+17a0}\N{U+179f}\N{U+17d2}\N{U+1794}\N{U+178f}\N{U+17b7}\N{U+17cd}",
      "\N{U+179f}\N{U+17bb}\N{U+1780}\N{U+17d2}\N{U+179a}",
      "\N{U+179f}\N{U+17c5}\N{U+179a}\N{U+17cd}",
      "\N{U+17a2}\N{U+17b6}\N{U+1791}\N{U+17b7}\N{U+178f}\N{U+17d2}\N{U+1799}"
    ],
    day_format_narrow => [
      "\N{U+1785}",
      "\N{U+17a2}",
      "\N{U+1796}\N{U+17bb}",
      "\N{U+1796}\N{U+17d2}\N{U+179a}",
      "\N{U+179f}\N{U+17bb}",
      "\N{U+179f}",
      "\N{U+17a2}\N{U+17b6}"
    ],
    day_format_wide => [
      "\N{U+1785}\N{U+17d0}\N{U+1793}\N{U+17d2}\N{U+1791}",
      "\N{U+17a2}\N{U+1784}\N{U+17d2}\N{U+1782}\N{U+17b6}\N{U+179a}",
      "\N{U+1796}\N{U+17bb}\N{U+1792}",
      "\N{U+1796}\N{U+17d2}\N{U+179a}\N{U+17a0}\N{U+179f}\N{U+17d2}\N{U+1794}\N{U+178f}\N{U+17b7}\N{U+17cd}",
      "\N{U+179f}\N{U+17bb}\N{U+1780}\N{U+17d2}\N{U+179a}",
      "\N{U+179f}\N{U+17c5}\N{U+179a}\N{U+17cd}",
      "\N{U+17a2}\N{U+17b6}\N{U+1791}\N{U+17b7}\N{U+178f}\N{U+17d2}\N{U+1799}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+1785}\N{U+17d0}\N{U+1793}\N{U+17d2}\N{U+1791}",
      "\N{U+17a2}\N{U+1784}\N{U+17d2}\N{U+1782}\N{U+17b6}\N{U+179a}",
      "\N{U+1796}\N{U+17bb}\N{U+1792}",
      "\N{U+1796}\N{U+17d2}\N{U+179a}\N{U+17a0}\N{U+179f}\N{U+17d2}\N{U+1794}\N{U+178f}\N{U+17b7}\N{U+17cd}",
      "\N{U+179f}\N{U+17bb}\N{U+1780}\N{U+17d2}\N{U+179a}",
      "\N{U+179f}\N{U+17c5}\N{U+179a}\N{U+17cd}",
      "\N{U+17a2}\N{U+17b6}\N{U+1791}\N{U+17b7}\N{U+178f}\N{U+17d2}\N{U+1799}"
    ],
    day_stand_alone_narrow => [
      "\N{U+1785}",
      "\N{U+17a2}",
      "\N{U+1796}\N{U+17bb}",
      "\N{U+1796}\N{U+17d2}\N{U+179a}",
      "\N{U+179f}\N{U+17bb}",
      "\N{U+179f}",
      "\N{U+17a2}\N{U+17b6}"
    ],
    day_stand_alone_wide => [
      "\N{U+1785}\N{U+17d0}\N{U+1793}\N{U+17d2}\N{U+1791}",
      "\N{U+17a2}\N{U+1784}\N{U+17d2}\N{U+1782}\N{U+17b6}\N{U+179a}",
      "\N{U+1796}\N{U+17bb}\N{U+1792}",
      "\N{U+1796}\N{U+17d2}\N{U+179a}\N{U+17a0}\N{U+179f}\N{U+17d2}\N{U+1794}\N{U+178f}\N{U+17b7}\N{U+17cd}",
      "\N{U+179f}\N{U+17bb}\N{U+1780}\N{U+17d2}\N{U+179a}",
      "\N{U+179f}\N{U+17c5}\N{U+179a}\N{U+17cd}",
      "\N{U+17a2}\N{U+17b6}\N{U+1791}\N{U+17b7}\N{U+178f}\N{U+17d2}\N{U+1799}"
    ],
    era_abbreviated => [
      "\N{U+1798}\N{U+17bb}\N{U+1793} \N{U+1782}.\N{U+179f}.",
      "\N{U+1782}.\N{U+179f}."
    ],
    era_narrow => [
      "\N{U+1798}\N{U+17bb}\N{U+1793} \N{U+1782}.\N{U+179f}.",
      "\N{U+1782}.\N{U+179f}."
    ],
    era_wide => [
      "\N{U+1798}\N{U+17bb}\N{U+1793}\N{U+200b}\N{U+1782}\N{U+17d2}\N{U+179a}\N{U+17b7}\N{U+179f}\N{U+17d2}\N{U+178f}\N{U+179f}\N{U+1780}\N{U+179a}\N{U+17b6}\N{U+1787}",
      "\N{U+1782}\N{U+17d2}\N{U+179a}\N{U+17b7}\N{U+179f}\N{U+17d2}\N{U+178f}\N{U+179f}\N{U+1780}\N{U+179a}\N{U+17b6}\N{U+1787}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%e %B %Y",
    glibc_datetime_format => "%A \N{U+1790}\N{U+17d2}\N{U+1784}\N{U+17c3} %e \N{U+1781}\N{U+17c2} %B \N{U+1786}\N{U+17d2}\N{U+1793}\N{U+17b6}\N{U+17c6}  %Y, %H \N{U+1798}\N{U+17c9}\N{U+17c4}\N{U+1784} m \N{U+1793}\N{U+17b6}\N{U+1791}\N{U+17b8} %S \N{U+179c}\N{U+17b7}\N{U+1793}\N{U+17b6}\N{U+1791}\N{U+17b8}\N{U+200b}",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Khmer",
    month_format_abbreviated => [
      "\N{U+1798}\N{U+1780}\N{U+179a}\N{U+17b6}",
      "\N{U+1780}\N{U+17bb}\N{U+1798}\N{U+17d2}\N{U+1797}\N{U+17c8}",
      "\N{U+1798}\N{U+17b8}\N{U+1793}\N{U+17b6}",
      "\N{U+1798}\N{U+17c1}\N{U+179f}\N{U+17b6}",
      "\N{U+17a7}\N{U+179f}\N{U+1797}\N{U+17b6}",
      "\N{U+1798}\N{U+17b7}\N{U+1790}\N{U+17bb}\N{U+1793}\N{U+17b6}",
      "\N{U+1780}\N{U+1780}\N{U+17d2}\N{U+1780}\N{U+178a}\N{U+17b6}",
      "\N{U+179f}\N{U+17b8}\N{U+17a0}\N{U+17b6}",
      "\N{U+1780}\N{U+1789}\N{U+17d2}\N{U+1789}\N{U+17b6}",
      "\N{U+178f}\N{U+17bb}\N{U+179b}\N{U+17b6}",
      "\N{U+179c}\N{U+17b7}\N{U+1785}\N{U+17d2}\N{U+1786}\N{U+17b7}\N{U+1780}\N{U+17b6}",
      "\N{U+1792}\N{U+17d2}\N{U+1793}\N{U+17bc}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+1798}\N{U+1780}\N{U+179a}\N{U+17b6}",
      "\N{U+1780}\N{U+17bb}\N{U+1798}\N{U+17d2}\N{U+1797}\N{U+17c8}",
      "\N{U+1798}\N{U+17b8}\N{U+1793}\N{U+17b6}",
      "\N{U+1798}\N{U+17c1}\N{U+179f}\N{U+17b6}",
      "\N{U+17a7}\N{U+179f}\N{U+1797}\N{U+17b6}",
      "\N{U+1798}\N{U+17b7}\N{U+1790}\N{U+17bb}\N{U+1793}\N{U+17b6}",
      "\N{U+1780}\N{U+1780}\N{U+17d2}\N{U+1780}\N{U+178a}\N{U+17b6}",
      "\N{U+179f}\N{U+17b8}\N{U+17a0}\N{U+17b6}",
      "\N{U+1780}\N{U+1789}\N{U+17d2}\N{U+1789}\N{U+17b6}",
      "\N{U+178f}\N{U+17bb}\N{U+179b}\N{U+17b6}",
      "\N{U+179c}\N{U+17b7}\N{U+1785}\N{U+17d2}\N{U+1786}\N{U+17b7}\N{U+1780}\N{U+17b6}",
      "\N{U+1792}\N{U+17d2}\N{U+1793}\N{U+17bc}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+1798}\N{U+1780}\N{U+179a}\N{U+17b6}",
      "\N{U+1780}\N{U+17bb}\N{U+1798}\N{U+17d2}\N{U+1797}\N{U+17c8}",
      "\N{U+1798}\N{U+17b8}\N{U+1793}\N{U+17b6}",
      "\N{U+1798}\N{U+17c1}\N{U+179f}\N{U+17b6}",
      "\N{U+17a7}\N{U+179f}\N{U+1797}\N{U+17b6}",
      "\N{U+1798}\N{U+17b7}\N{U+1790}\N{U+17bb}\N{U+1793}\N{U+17b6}",
      "\N{U+1780}\N{U+1780}\N{U+17d2}\N{U+1780}\N{U+178a}\N{U+17b6}",
      "\N{U+179f}\N{U+17b8}\N{U+17a0}\N{U+17b6}",
      "\N{U+1780}\N{U+1789}\N{U+17d2}\N{U+1789}\N{U+17b6}",
      "\N{U+178f}\N{U+17bb}\N{U+179b}\N{U+17b6}",
      "\N{U+179c}\N{U+17b7}\N{U+1785}\N{U+17d2}\N{U+1786}\N{U+17b7}\N{U+1780}\N{U+17b6}",
      "\N{U+1792}\N{U+17d2}\N{U+1793}\N{U+17bc}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+1798}\N{U+1780}\N{U+179a}\N{U+17b6}",
      "\N{U+1780}\N{U+17bb}\N{U+1798}\N{U+17d2}\N{U+1797}\N{U+17c8}",
      "\N{U+1798}\N{U+17b8}\N{U+1793}\N{U+17b6}",
      "\N{U+1798}\N{U+17c1}\N{U+179f}\N{U+17b6}",
      "\N{U+17a7}\N{U+179f}\N{U+1797}\N{U+17b6}",
      "\N{U+1798}\N{U+17b7}\N{U+1790}\N{U+17bb}\N{U+1793}\N{U+17b6}",
      "\N{U+1780}\N{U+1780}\N{U+17d2}\N{U+1780}\N{U+178a}\N{U+17b6}",
      "\N{U+179f}\N{U+17b8}\N{U+17a0}\N{U+17b6}",
      "\N{U+1780}\N{U+1789}\N{U+17d2}\N{U+1789}\N{U+17b6}",
      "\N{U+178f}\N{U+17bb}\N{U+179b}\N{U+17b6}",
      "\N{U+179c}\N{U+17b7}\N{U+1785}\N{U+17d2}\N{U+1786}\N{U+17b7}\N{U+1780}\N{U+17b6}",
      "\N{U+1792}\N{U+17d2}\N{U+1793}\N{U+17bc}"
    ],
    name => "Khmer Cambodia",
    native_language => "\N{U+1781}\N{U+17d2}\N{U+1798}\N{U+17c2}\N{U+179a}",
    native_name => "\N{U+1781}\N{U+17d2}\N{U+1798}\N{U+17c2}\N{U+179a} \N{U+1780}\N{U+1798}\N{U+17d2}\N{U+1796}\N{U+17bb}\N{U+1787}\N{U+17b6}",
    native_script => undef,
    native_territory => "\N{U+1780}\N{U+1798}\N{U+17d2}\N{U+1796}\N{U+17bb}\N{U+1787}\N{U+17b6}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 1",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 2",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 3",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 1",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 2",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 3",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 1",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 2",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 3",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 1",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 2",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 3",
      "\N{U+178f}\N{U+17d2}\N{U+179a}\N{U+17b8}\N{U+1798}\N{U+17b6}\N{U+179f}\N{U+1791}\N{U+17b8} 4"
    ],
    script => undef,
    territory => "Cambodia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ kn ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "d/M, E",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "MMM d",
      MMdd => "dd-MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d,y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "kn",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0cb8}\N{U+0ccb}\N{U+0cae}",
      "\N{U+0cae}\N{U+0c82}\N{U+0c97}\N{U+0cb3}",
      "\N{U+0cac}\N{U+0cc1}\N{U+0ca7}",
      "\N{U+0c97}\N{U+0cc1}\N{U+0cb0}\N{U+0cc1}",
      "\N{U+0cb6}\N{U+0cc1}\N{U+0c95}\N{U+0ccd}\N{U+0cb0}",
      "\N{U+0cb6}\N{U+0ca8}\N{U+0cbf}",
      "\N{U+0cad}\N{U+0cbe}\N{U+0ca8}\N{U+0cc1}"
    ],
    day_format_narrow => [
      "\N{U+0cb8}\N{U+0ccb}",
      "\N{U+0cae}\N{U+0c82}",
      "\N{U+0cac}\N{U+0cc1}",
      "\N{U+0c97}\N{U+0cc1}",
      "\N{U+0cb6}\N{U+0cc1}",
      "\N{U+0cb6}",
      "\N{U+0cad}\N{U+0cbe}"
    ],
    day_format_wide => [
      "\N{U+0cb8}\N{U+0ccb}\N{U+0cae}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cae}\N{U+0c82}\N{U+0c97}\N{U+0cb3}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cac}\N{U+0cc1}\N{U+0ca7}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0c97}\N{U+0cc1}\N{U+0cb0}\N{U+0cc1}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cb6}\N{U+0cc1}\N{U+0c95}\N{U+0ccd}\N{U+0cb0}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cb6}\N{U+0ca8}\N{U+0cbf}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cad}\N{U+0cbe}\N{U+0ca8}\N{U+0cc1}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0cb8}\N{U+0ccb}\N{U+0cae}",
      "\N{U+0cae}\N{U+0c82}\N{U+0c97}\N{U+0cb3}",
      "\N{U+0cac}\N{U+0cc1}\N{U+0ca7}",
      "\N{U+0c97}\N{U+0cc1}\N{U+0cb0}\N{U+0cc1}",
      "\N{U+0cb6}\N{U+0cc1}\N{U+0c95}\N{U+0ccd}\N{U+0cb0}",
      "\N{U+0cb6}\N{U+0ca8}\N{U+0cbf}",
      "\N{U+0cad}\N{U+0cbe}\N{U+0ca8}\N{U+0cc1}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0cb8}\N{U+0ccb}",
      "\N{U+0cae}\N{U+0c82}",
      "\N{U+0cac}\N{U+0cc1}",
      "\N{U+0c97}\N{U+0cc1}",
      "\N{U+0cb6}\N{U+0cc1}",
      "\N{U+0cb6}",
      "\N{U+0cad}\N{U+0cbe}"
    ],
    day_stand_alone_wide => [
      "\N{U+0cb8}\N{U+0ccb}\N{U+0cae}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cae}\N{U+0c82}\N{U+0c97}\N{U+0cb3}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cac}\N{U+0cc1}\N{U+0ca7}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0c97}\N{U+0cc1}\N{U+0cb0}\N{U+0cc1}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cb6}\N{U+0cc1}\N{U+0c95}\N{U+0ccd}\N{U+0cb0}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cb6}\N{U+0ca8}\N{U+0cbf}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cad}\N{U+0cbe}\N{U+0ca8}\N{U+0cc1}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}"
    ],
    era_abbreviated => [
      "\N{U+0c95}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}.\N{U+0caa}\N{U+0cc2}",
      "\N{U+0c95}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}.\N{U+0cb6}"
    ],
    era_narrow => [
      "\N{U+0c95}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}.\N{U+0caa}\N{U+0cc2}",
      "\N{U+0c95}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}.\N{U+0cb6}"
    ],
    era_wide => [
      "\N{U+0c95}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}\N{U+0cb8}\N{U+0ccd}\N{U+0ca4} \N{U+0caa}\N{U+0cc2}\N{U+0cb0}\N{U+0ccd}\N{U+0cb5}",
      "\N{U+0c95}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}\N{U+0cb8}\N{U+0ccd}\N{U+0ca4} \N{U+0cb6}\N{U+0c95}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kannada",
    month_format_abbreviated => [
      "\N{U+0c9c}\N{U+0ca8}",
      "\N{U+0cab}\N{U+0cc6}\N{U+0cac}\N{U+0ccd}\N{U+0cb0}",
      "\N{U+0cae}\N{U+0cbe}\N{U+0cb0}\N{U+0ccd}\N{U+0c9a}\N{U+0ccd}",
      "\N{U+0c8f}\N{U+0caa}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}",
      "\N{U+0cae}\N{U+0cc7}",
      "\N{U+0c9c}\N{U+0cc2}\N{U+0ca8}\N{U+0ccd}",
      "\N{U+0c9c}\N{U+0cc1}\N{U+0cb2}\N{U+0cc8}",
      "\N{U+0c86}\N{U+0c97}",
      "\N{U+0cb8}\N{U+0cc6}\N{U+0caa}\N{U+0ccd}\N{U+0c9f}\N{U+0cc6}\N{U+0c82}",
      "\N{U+0c85}\N{U+0c95}\N{U+0ccd}\N{U+0c9f}\N{U+0ccb}",
      "\N{U+0ca8}\N{U+0cb5}\N{U+0cc6}\N{U+0c82}",
      "\N{U+0ca1}\N{U+0cbf}\N{U+0cb8}\N{U+0cc6}\N{U+0c82}"
    ],
    month_format_narrow => [
      "\N{U+0c9c}",
      "\N{U+0cab}\N{U+0cc6}",
      "\N{U+0cae}\N{U+0cbe}",
      "\N{U+0c8f}",
      "\N{U+0cae}\N{U+0cc7}",
      "\N{U+0c9c}\N{U+0cc2}",
      "\N{U+0c9c}\N{U+0cc1}",
      "\N{U+0c86}",
      "\N{U+0cb8}\N{U+0cc6}",
      "\N{U+0c85}",
      "\N{U+0ca8}",
      "\N{U+0ca1}\N{U+0cbf}"
    ],
    month_format_wide => [
      "\N{U+0c9c}\N{U+0ca8}\N{U+0cb5}\N{U+0cb0}\N{U+0cbf}",
      "\N{U+0cab}\N{U+0cc6}\N{U+0cac}\N{U+0ccd}\N{U+0cb0}\N{U+0cb5}\N{U+0cb0}\N{U+0cbf}",
      "\N{U+0cae}\N{U+0cbe}\N{U+0cb0}\N{U+0ccd}\N{U+0c9a}\N{U+0ccd}",
      "\N{U+0c8f}\N{U+0caa}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}\N{U+0cb2}\N{U+0ccd}",
      "\N{U+0cae}\N{U+0cc7}",
      "\N{U+0c9c}\N{U+0cc2}\N{U+0ca8}\N{U+0ccd}",
      "\N{U+0c9c}\N{U+0cc1}\N{U+0cb2}\N{U+0cc8}",
      "\N{U+0c86}\N{U+0c97}\N{U+0cb8}\N{U+0ccd}\N{U+0c9f}\N{U+0ccd}",
      "\N{U+0cb8}\N{U+0cc6}\N{U+0caa}\N{U+0ccd}\N{U+0c9f}\N{U+0cc6}\N{U+0c82}\N{U+0cac}\N{U+0cb0}\N{U+0ccd}",
      "\N{U+0c85}\N{U+0c95}\N{U+0ccd}\N{U+0c9f}\N{U+0ccb}\N{U+0cac}\N{U+0cb0}\N{U+0ccd}",
      "\N{U+0ca8}\N{U+0cb5}\N{U+0cc6}\N{U+0c82}\N{U+0cac}\N{U+0cb0}\N{U+0ccd}",
      "\N{U+0ca1}\N{U+0cbf}\N{U+0cb8}\N{U+0cc6}\N{U+0c82}\N{U+0cac}\N{U+0cb0}\N{U+0ccd}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0c9c}\N{U+0ca8}",
      "\N{U+0cab}\N{U+0cc6}\N{U+0cac}\N{U+0ccd}\N{U+0cb0}",
      "\N{U+0cae}\N{U+0cbe}\N{U+0cb0}\N{U+0ccd}\N{U+0c9a}\N{U+0ccd}",
      "\N{U+0c8f}\N{U+0caa}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}",
      "\N{U+0cae}\N{U+0cc7}",
      "\N{U+0c9c}\N{U+0cc2}\N{U+0ca8}\N{U+0ccd}",
      "\N{U+0c9c}\N{U+0cc1}\N{U+0cb2}\N{U+0cc8}",
      "\N{U+0c86}\N{U+0c97}",
      "\N{U+0cb8}\N{U+0cc6}\N{U+0caa}\N{U+0ccd}\N{U+0c9f}\N{U+0cc6}\N{U+0c82}",
      "\N{U+0c85}\N{U+0c95}\N{U+0ccd}\N{U+0c9f}\N{U+0ccb}",
      "\N{U+0ca8}\N{U+0cb5}\N{U+0cc6}\N{U+0c82}",
      "\N{U+0ca1}\N{U+0cbf}\N{U+0cb8}\N{U+0cc6}\N{U+0c82}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0c9c}",
      "\N{U+0cab}\N{U+0cc6}",
      "\N{U+0cae}\N{U+0cbe}",
      "\N{U+0c8f}",
      "\N{U+0cae}\N{U+0cc7}",
      "\N{U+0c9c}\N{U+0cc2}",
      "\N{U+0c9c}\N{U+0cc1}",
      "\N{U+0c86}",
      "\N{U+0cb8}\N{U+0cc6}",
      "\N{U+0c85}",
      "\N{U+0ca8}",
      "\N{U+0ca1}\N{U+0cbf}"
    ],
    month_stand_alone_wide => [
      "\N{U+0c9c}\N{U+0ca8}\N{U+0cb5}\N{U+0cb0}\N{U+0cbf}",
      "\N{U+0cab}\N{U+0cc6}\N{U+0cac}\N{U+0ccd}\N{U+0cb0}\N{U+0cb5}\N{U+0cb0}\N{U+0cbf}",
      "\N{U+0cae}\N{U+0cbe}\N{U+0cb0}\N{U+0ccd}\N{U+0c9a}\N{U+0ccd}",
      "\N{U+0c8f}\N{U+0caa}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}\N{U+0cb2}\N{U+0ccd}",
      "\N{U+0cae}\N{U+0cc7}",
      "\N{U+0c9c}\N{U+0cc2}\N{U+0ca8}\N{U+0ccd}",
      "\N{U+0c9c}\N{U+0cc1}\N{U+0cb2}\N{U+0cc8}",
      "\N{U+0c86}\N{U+0c97}\N{U+0cb8}\N{U+0ccd}\N{U+0c9f}\N{U+0ccd}",
      "\N{U+0cb8}\N{U+0cc6}\N{U+0caa}\N{U+0ccd}\N{U+0c9f}\N{U+0cc6}\N{U+0c82}\N{U+0cac}\N{U+0cb0}\N{U+0ccd}",
      "\N{U+0c85}\N{U+0c95}\N{U+0ccd}\N{U+0c9f}\N{U+0ccb}\N{U+0cac}\N{U+0cb0}\N{U+0ccd}",
      "\N{U+0ca8}\N{U+0cb5}\N{U+0cc6}\N{U+0c82}\N{U+0cac}\N{U+0cb0}\N{U+0ccd}",
      "\N{U+0ca1}\N{U+0cbf}\N{U+0cb8}\N{U+0cc6}\N{U+0c82}\N{U+0cac}\N{U+0cb0}\N{U+0ccd}"
    ],
    name => "Kannada",
    native_language => "\N{U+0c95}\N{U+0ca8}\N{U+0ccd}\N{U+0ca8}\N{U+0ca1}",
    native_name => "\N{U+0c95}\N{U+0ca8}\N{U+0ccd}\N{U+0ca8}\N{U+0ca1}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8} 1",
      "\N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8} 2",
      "\N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8} 3",
      "\N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8} 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+0ca8}\N{U+0cc7} \N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8}\N{U+0cae}\N{U+0cbe}\N{U+0cb8}\N{U+0cbf}\N{U+0c95}",
      "2\N{U+0ca8}\N{U+0cc7} \N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8}\N{U+0cae}\N{U+0cbe}\N{U+0cb8}\N{U+0cbf}\N{U+0c95}",
      "3\N{U+0ca8}\N{U+0cc7} \N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8}\N{U+0cae}\N{U+0cbe}\N{U+0cb8}\N{U+0cbf}\N{U+0c95}",
      "4\N{U+0ca8}\N{U+0cc7} \N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8}\N{U+0cae}\N{U+0cbe}\N{U+0cb8}\N{U+0cbf}\N{U+0c95}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8} 1",
      "\N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8} 2",
      "\N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8} 3",
      "\N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8} 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+0ca8}\N{U+0cc7} \N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8}\N{U+0cae}\N{U+0cbe}\N{U+0cb8}\N{U+0cbf}\N{U+0c95}",
      "2\N{U+0ca8}\N{U+0cc7} \N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8}\N{U+0cae}\N{U+0cbe}\N{U+0cb8}\N{U+0cbf}\N{U+0c95}",
      "3\N{U+0ca8}\N{U+0cc7} \N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8}\N{U+0cae}\N{U+0cbe}\N{U+0cb8}\N{U+0cbf}\N{U+0c95}",
      "4\N{U+0ca8}\N{U+0cc7} \N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8}\N{U+0cae}\N{U+0cbe}\N{U+0cb8}\N{U+0cbf}\N{U+0c95}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "hh:mm:ss a zzzz",
    time_format_long => "hh:mm:ss a z",
    time_format_medium => "hh:mm:ss a",
    time_format_short => "hh:mm a",
    variant => undef,
    version => 29
  }
  __[ kn-IN ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "d/M, E",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "MMM d",
      MMdd => "dd-MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d,y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "kn-IN",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0cb8}\N{U+0ccb}\N{U+0cae}",
      "\N{U+0cae}\N{U+0c82}\N{U+0c97}\N{U+0cb3}",
      "\N{U+0cac}\N{U+0cc1}\N{U+0ca7}",
      "\N{U+0c97}\N{U+0cc1}\N{U+0cb0}\N{U+0cc1}",
      "\N{U+0cb6}\N{U+0cc1}\N{U+0c95}\N{U+0ccd}\N{U+0cb0}",
      "\N{U+0cb6}\N{U+0ca8}\N{U+0cbf}",
      "\N{U+0cad}\N{U+0cbe}\N{U+0ca8}\N{U+0cc1}"
    ],
    day_format_narrow => [
      "\N{U+0cb8}\N{U+0ccb}",
      "\N{U+0cae}\N{U+0c82}",
      "\N{U+0cac}\N{U+0cc1}",
      "\N{U+0c97}\N{U+0cc1}",
      "\N{U+0cb6}\N{U+0cc1}",
      "\N{U+0cb6}",
      "\N{U+0cad}\N{U+0cbe}"
    ],
    day_format_wide => [
      "\N{U+0cb8}\N{U+0ccb}\N{U+0cae}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cae}\N{U+0c82}\N{U+0c97}\N{U+0cb3}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cac}\N{U+0cc1}\N{U+0ca7}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0c97}\N{U+0cc1}\N{U+0cb0}\N{U+0cc1}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cb6}\N{U+0cc1}\N{U+0c95}\N{U+0ccd}\N{U+0cb0}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cb6}\N{U+0ca8}\N{U+0cbf}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cad}\N{U+0cbe}\N{U+0ca8}\N{U+0cc1}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0cb8}\N{U+0ccb}\N{U+0cae}",
      "\N{U+0cae}\N{U+0c82}\N{U+0c97}\N{U+0cb3}",
      "\N{U+0cac}\N{U+0cc1}\N{U+0ca7}",
      "\N{U+0c97}\N{U+0cc1}\N{U+0cb0}\N{U+0cc1}",
      "\N{U+0cb6}\N{U+0cc1}\N{U+0c95}\N{U+0ccd}\N{U+0cb0}",
      "\N{U+0cb6}\N{U+0ca8}\N{U+0cbf}",
      "\N{U+0cad}\N{U+0cbe}\N{U+0ca8}\N{U+0cc1}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0cb8}\N{U+0ccb}",
      "\N{U+0cae}\N{U+0c82}",
      "\N{U+0cac}\N{U+0cc1}",
      "\N{U+0c97}\N{U+0cc1}",
      "\N{U+0cb6}\N{U+0cc1}",
      "\N{U+0cb6}",
      "\N{U+0cad}\N{U+0cbe}"
    ],
    day_stand_alone_wide => [
      "\N{U+0cb8}\N{U+0ccb}\N{U+0cae}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cae}\N{U+0c82}\N{U+0c97}\N{U+0cb3}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cac}\N{U+0cc1}\N{U+0ca7}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0c97}\N{U+0cc1}\N{U+0cb0}\N{U+0cc1}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cb6}\N{U+0cc1}\N{U+0c95}\N{U+0ccd}\N{U+0cb0}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cb6}\N{U+0ca8}\N{U+0cbf}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}",
      "\N{U+0cad}\N{U+0cbe}\N{U+0ca8}\N{U+0cc1}\N{U+0cb5}\N{U+0cbe}\N{U+0cb0}"
    ],
    era_abbreviated => [
      "\N{U+0c95}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}.\N{U+0caa}\N{U+0cc2}",
      "\N{U+0c95}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}.\N{U+0cb6}"
    ],
    era_narrow => [
      "\N{U+0c95}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}.\N{U+0caa}\N{U+0cc2}",
      "\N{U+0c95}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}.\N{U+0cb6}"
    ],
    era_wide => [
      "\N{U+0c95}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}\N{U+0cb8}\N{U+0ccd}\N{U+0ca4} \N{U+0caa}\N{U+0cc2}\N{U+0cb0}\N{U+0ccd}\N{U+0cb5}",
      "\N{U+0c95}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}\N{U+0cb8}\N{U+0ccd}\N{U+0ca4} \N{U+0cb6}\N{U+0c95}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A %d %b %Y",
    glibc_datetime_format => "%A %d %b %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "Kannada",
    month_format_abbreviated => [
      "\N{U+0c9c}\N{U+0ca8}",
      "\N{U+0cab}\N{U+0cc6}\N{U+0cac}\N{U+0ccd}\N{U+0cb0}",
      "\N{U+0cae}\N{U+0cbe}\N{U+0cb0}\N{U+0ccd}\N{U+0c9a}\N{U+0ccd}",
      "\N{U+0c8f}\N{U+0caa}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}",
      "\N{U+0cae}\N{U+0cc7}",
      "\N{U+0c9c}\N{U+0cc2}\N{U+0ca8}\N{U+0ccd}",
      "\N{U+0c9c}\N{U+0cc1}\N{U+0cb2}\N{U+0cc8}",
      "\N{U+0c86}\N{U+0c97}",
      "\N{U+0cb8}\N{U+0cc6}\N{U+0caa}\N{U+0ccd}\N{U+0c9f}\N{U+0cc6}\N{U+0c82}",
      "\N{U+0c85}\N{U+0c95}\N{U+0ccd}\N{U+0c9f}\N{U+0ccb}",
      "\N{U+0ca8}\N{U+0cb5}\N{U+0cc6}\N{U+0c82}",
      "\N{U+0ca1}\N{U+0cbf}\N{U+0cb8}\N{U+0cc6}\N{U+0c82}"
    ],
    month_format_narrow => [
      "\N{U+0c9c}",
      "\N{U+0cab}\N{U+0cc6}",
      "\N{U+0cae}\N{U+0cbe}",
      "\N{U+0c8f}",
      "\N{U+0cae}\N{U+0cc7}",
      "\N{U+0c9c}\N{U+0cc2}",
      "\N{U+0c9c}\N{U+0cc1}",
      "\N{U+0c86}",
      "\N{U+0cb8}\N{U+0cc6}",
      "\N{U+0c85}",
      "\N{U+0ca8}",
      "\N{U+0ca1}\N{U+0cbf}"
    ],
    month_format_wide => [
      "\N{U+0c9c}\N{U+0ca8}\N{U+0cb5}\N{U+0cb0}\N{U+0cbf}",
      "\N{U+0cab}\N{U+0cc6}\N{U+0cac}\N{U+0ccd}\N{U+0cb0}\N{U+0cb5}\N{U+0cb0}\N{U+0cbf}",
      "\N{U+0cae}\N{U+0cbe}\N{U+0cb0}\N{U+0ccd}\N{U+0c9a}\N{U+0ccd}",
      "\N{U+0c8f}\N{U+0caa}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}\N{U+0cb2}\N{U+0ccd}",
      "\N{U+0cae}\N{U+0cc7}",
      "\N{U+0c9c}\N{U+0cc2}\N{U+0ca8}\N{U+0ccd}",
      "\N{U+0c9c}\N{U+0cc1}\N{U+0cb2}\N{U+0cc8}",
      "\N{U+0c86}\N{U+0c97}\N{U+0cb8}\N{U+0ccd}\N{U+0c9f}\N{U+0ccd}",
      "\N{U+0cb8}\N{U+0cc6}\N{U+0caa}\N{U+0ccd}\N{U+0c9f}\N{U+0cc6}\N{U+0c82}\N{U+0cac}\N{U+0cb0}\N{U+0ccd}",
      "\N{U+0c85}\N{U+0c95}\N{U+0ccd}\N{U+0c9f}\N{U+0ccb}\N{U+0cac}\N{U+0cb0}\N{U+0ccd}",
      "\N{U+0ca8}\N{U+0cb5}\N{U+0cc6}\N{U+0c82}\N{U+0cac}\N{U+0cb0}\N{U+0ccd}",
      "\N{U+0ca1}\N{U+0cbf}\N{U+0cb8}\N{U+0cc6}\N{U+0c82}\N{U+0cac}\N{U+0cb0}\N{U+0ccd}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0c9c}\N{U+0ca8}",
      "\N{U+0cab}\N{U+0cc6}\N{U+0cac}\N{U+0ccd}\N{U+0cb0}",
      "\N{U+0cae}\N{U+0cbe}\N{U+0cb0}\N{U+0ccd}\N{U+0c9a}\N{U+0ccd}",
      "\N{U+0c8f}\N{U+0caa}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}",
      "\N{U+0cae}\N{U+0cc7}",
      "\N{U+0c9c}\N{U+0cc2}\N{U+0ca8}\N{U+0ccd}",
      "\N{U+0c9c}\N{U+0cc1}\N{U+0cb2}\N{U+0cc8}",
      "\N{U+0c86}\N{U+0c97}",
      "\N{U+0cb8}\N{U+0cc6}\N{U+0caa}\N{U+0ccd}\N{U+0c9f}\N{U+0cc6}\N{U+0c82}",
      "\N{U+0c85}\N{U+0c95}\N{U+0ccd}\N{U+0c9f}\N{U+0ccb}",
      "\N{U+0ca8}\N{U+0cb5}\N{U+0cc6}\N{U+0c82}",
      "\N{U+0ca1}\N{U+0cbf}\N{U+0cb8}\N{U+0cc6}\N{U+0c82}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0c9c}",
      "\N{U+0cab}\N{U+0cc6}",
      "\N{U+0cae}\N{U+0cbe}",
      "\N{U+0c8f}",
      "\N{U+0cae}\N{U+0cc7}",
      "\N{U+0c9c}\N{U+0cc2}",
      "\N{U+0c9c}\N{U+0cc1}",
      "\N{U+0c86}",
      "\N{U+0cb8}\N{U+0cc6}",
      "\N{U+0c85}",
      "\N{U+0ca8}",
      "\N{U+0ca1}\N{U+0cbf}"
    ],
    month_stand_alone_wide => [
      "\N{U+0c9c}\N{U+0ca8}\N{U+0cb5}\N{U+0cb0}\N{U+0cbf}",
      "\N{U+0cab}\N{U+0cc6}\N{U+0cac}\N{U+0ccd}\N{U+0cb0}\N{U+0cb5}\N{U+0cb0}\N{U+0cbf}",
      "\N{U+0cae}\N{U+0cbe}\N{U+0cb0}\N{U+0ccd}\N{U+0c9a}\N{U+0ccd}",
      "\N{U+0c8f}\N{U+0caa}\N{U+0ccd}\N{U+0cb0}\N{U+0cbf}\N{U+0cb2}\N{U+0ccd}",
      "\N{U+0cae}\N{U+0cc7}",
      "\N{U+0c9c}\N{U+0cc2}\N{U+0ca8}\N{U+0ccd}",
      "\N{U+0c9c}\N{U+0cc1}\N{U+0cb2}\N{U+0cc8}",
      "\N{U+0c86}\N{U+0c97}\N{U+0cb8}\N{U+0ccd}\N{U+0c9f}\N{U+0ccd}",
      "\N{U+0cb8}\N{U+0cc6}\N{U+0caa}\N{U+0ccd}\N{U+0c9f}\N{U+0cc6}\N{U+0c82}\N{U+0cac}\N{U+0cb0}\N{U+0ccd}",
      "\N{U+0c85}\N{U+0c95}\N{U+0ccd}\N{U+0c9f}\N{U+0ccb}\N{U+0cac}\N{U+0cb0}\N{U+0ccd}",
      "\N{U+0ca8}\N{U+0cb5}\N{U+0cc6}\N{U+0c82}\N{U+0cac}\N{U+0cb0}\N{U+0ccd}",
      "\N{U+0ca1}\N{U+0cbf}\N{U+0cb8}\N{U+0cc6}\N{U+0c82}\N{U+0cac}\N{U+0cb0}\N{U+0ccd}"
    ],
    name => "Kannada India",
    native_language => "\N{U+0c95}\N{U+0ca8}\N{U+0ccd}\N{U+0ca8}\N{U+0ca1}",
    native_name => "\N{U+0c95}\N{U+0ca8}\N{U+0ccd}\N{U+0ca8}\N{U+0ca1} \N{U+0cad}\N{U+0cbe}\N{U+0cb0}\N{U+0ca4}",
    native_script => undef,
    native_territory => "\N{U+0cad}\N{U+0cbe}\N{U+0cb0}\N{U+0ca4}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8} 1",
      "\N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8} 2",
      "\N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8} 3",
      "\N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8} 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+0ca8}\N{U+0cc7} \N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8}\N{U+0cae}\N{U+0cbe}\N{U+0cb8}\N{U+0cbf}\N{U+0c95}",
      "2\N{U+0ca8}\N{U+0cc7} \N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8}\N{U+0cae}\N{U+0cbe}\N{U+0cb8}\N{U+0cbf}\N{U+0c95}",
      "3\N{U+0ca8}\N{U+0cc7} \N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8}\N{U+0cae}\N{U+0cbe}\N{U+0cb8}\N{U+0cbf}\N{U+0c95}",
      "4\N{U+0ca8}\N{U+0cc7} \N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8}\N{U+0cae}\N{U+0cbe}\N{U+0cb8}\N{U+0cbf}\N{U+0c95}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8} 1",
      "\N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8} 2",
      "\N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8} 3",
      "\N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8} 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+0ca8}\N{U+0cc7} \N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8}\N{U+0cae}\N{U+0cbe}\N{U+0cb8}\N{U+0cbf}\N{U+0c95}",
      "2\N{U+0ca8}\N{U+0cc7} \N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8}\N{U+0cae}\N{U+0cbe}\N{U+0cb8}\N{U+0cbf}\N{U+0c95}",
      "3\N{U+0ca8}\N{U+0cc7} \N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8}\N{U+0cae}\N{U+0cbe}\N{U+0cb8}\N{U+0cbf}\N{U+0c95}",
      "4\N{U+0ca8}\N{U+0cc7} \N{U+0ca4}\N{U+0ccd}\N{U+0cb0}\N{U+0cc8}\N{U+0cae}\N{U+0cbe}\N{U+0cb8}\N{U+0cbf}\N{U+0c95}"
    ],
    script => undef,
    territory => "India",
    time_format_full => "hh:mm:ss a zzzz",
    time_format_long => "hh:mm:ss a z",
    time_format_medium => "hh:mm:ss a",
    time_format_short => "hh:mm a",
    variant => undef,
    version => 29
  }
  __[ ko ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EEEEd => "d\N{U+c77c} EEEE",
      EHm => "(E) HH:mm",
      EHms => "(E) HH:mm:ss",
      Ed => "d\N{U+c77c} (E)",
      Ehm => "(E) a h:mm",
      Ehms => "(E) a h:mm:ss",
      Gy => "G y\N{U+b144}",
      GyMMM => "G y\N{U+b144} MMM",
      GyMMMEEEEd => "G y\N{U+b144} MMM d\N{U+c77c} EEEE",
      GyMMMEd => "G y\N{U+b144} MMM d\N{U+c77c} (E)",
      GyMMMd => "G y\N{U+b144} MMM d\N{U+c77c}",
      H => "H\N{U+c2dc}",
      HHmmss => "HH:mm:ss",
      Hm => "HH:mm",
      Hms => "H\N{U+c2dc} m\N{U+bd84} s\N{U+cd08}",
      Hmsv => "H\N{U+c2dc} m\N{U+bd84} s\N{U+cd08} v",
      Hmv => "HH:mm v",
      M => "M\N{U+c6d4}",
      MEEEEd => "M. d. EEEE",
      MEd => "M. d. (E)",
      MMM => "LLL",
      MMMEEEEd => "MMM d\N{U+c77c} EEEE",
      MMMEd => "MMM d\N{U+c77c} (E)",
      MMMMd => "MMMM d\N{U+c77c}",
      MMMd => "MMM d\N{U+c77c}",
      Md => "M. d.",
      d => "d\N{U+c77c}",
      h => "a h\N{U+c2dc}",
      hm => "a h:mm",
      hms => "a h:mm:ss",
      hmsv => "a h:mm:ss v",
      hmv => "a h:mm v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y\N{U+b144}",
      yM => "y. M.",
      yMEEEEd => "y. M. d. EEEE",
      yMEd => "y. M. d. (E)",
      yMM => "y. M.",
      yMMM => "y\N{U+b144} MMM",
      yMMMEEEEd => "y\N{U+b144} MMM d\N{U+c77c} EEEE",
      yMMMEd => "y\N{U+b144} MMM d\N{U+c77c} (E)",
      yMMMM => "y\N{U+b144} MMMM",
      yMMMd => "y\N{U+b144} MMM d\N{U+c77c}",
      yMd => "y. M. d.",
      yQQQ => "y\N{U+b144} QQQ",
      yQQQQ => "y\N{U+b144} QQQQ"
    },
    code => "ko",
    date_format_full => "y\N{U+b144} M\N{U+c6d4} d\N{U+c77c} EEEE",
    date_format_long => "y\N{U+b144} M\N{U+c6d4} d\N{U+c77c}",
    date_format_medium => "y. M. d.",
    date_format_short => "yy. M. d.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+c6d4}",
      "\N{U+d654}",
      "\N{U+c218}",
      "\N{U+baa9}",
      "\N{U+ae08}",
      "\N{U+d1a0}",
      "\N{U+c77c}"
    ],
    day_format_narrow => [
      "\N{U+c6d4}",
      "\N{U+d654}",
      "\N{U+c218}",
      "\N{U+baa9}",
      "\N{U+ae08}",
      "\N{U+d1a0}",
      "\N{U+c77c}"
    ],
    day_format_wide => [
      "\N{U+c6d4}\N{U+c694}\N{U+c77c}",
      "\N{U+d654}\N{U+c694}\N{U+c77c}",
      "\N{U+c218}\N{U+c694}\N{U+c77c}",
      "\N{U+baa9}\N{U+c694}\N{U+c77c}",
      "\N{U+ae08}\N{U+c694}\N{U+c77c}",
      "\N{U+d1a0}\N{U+c694}\N{U+c77c}",
      "\N{U+c77c}\N{U+c694}\N{U+c77c}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+c6d4}",
      "\N{U+d654}",
      "\N{U+c218}",
      "\N{U+baa9}",
      "\N{U+ae08}",
      "\N{U+d1a0}",
      "\N{U+c77c}"
    ],
    day_stand_alone_narrow => [
      "\N{U+c6d4}",
      "\N{U+d654}",
      "\N{U+c218}",
      "\N{U+baa9}",
      "\N{U+ae08}",
      "\N{U+d1a0}",
      "\N{U+c77c}"
    ],
    day_stand_alone_wide => [
      "\N{U+c6d4}\N{U+c694}\N{U+c77c}",
      "\N{U+d654}\N{U+c694}\N{U+c77c}",
      "\N{U+c218}\N{U+c694}\N{U+c77c}",
      "\N{U+baa9}\N{U+c694}\N{U+c77c}",
      "\N{U+ae08}\N{U+c694}\N{U+c77c}",
      "\N{U+d1a0}\N{U+c694}\N{U+c77c}",
      "\N{U+c77c}\N{U+c694}\N{U+c77c}"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "\N{U+ae30}\N{U+c6d0}\N{U+c804}",
      "\N{U+c11c}\N{U+ae30}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Korean",
    month_format_abbreviated => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    month_format_narrow => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    month_format_wide => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    month_stand_alone_abbreviated => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    month_stand_alone_narrow => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    month_stand_alone_wide => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    name => "Korean",
    native_language => "\N{U+d55c}\N{U+ad6d}\N{U+c5b4}",
    native_name => "\N{U+d55c}\N{U+ad6d}\N{U+c5b4}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1\N{U+bd84}\N{U+ae30}",
      "2\N{U+bd84}\N{U+ae30}",
      "3\N{U+bd84}\N{U+ae30}",
      "4\N{U+bd84}\N{U+ae30}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+c81c} 1/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 2/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 3/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 4/4\N{U+bd84}\N{U+ae30}"
    ],
    quarter_stand_alone_abbreviated => [
      "1\N{U+bd84}\N{U+ae30}",
      "2\N{U+bd84}\N{U+ae30}",
      "3\N{U+bd84}\N{U+ae30}",
      "4\N{U+bd84}\N{U+ae30}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+c81c} 1/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 2/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 3/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 4/4\N{U+bd84}\N{U+ae30}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "a h\N{U+c2dc} m\N{U+bd84} s\N{U+cd08} zzzz",
    time_format_long => "a h\N{U+c2dc} m\N{U+bd84} s\N{U+cd08} z",
    time_format_medium => "a h:mm:ss",
    time_format_short => "a h:mm",
    variant => undef,
    version => 29
  }
  __[ ko-KP ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EEEEd => "d\N{U+c77c} EEEE",
      EHm => "(E) HH:mm",
      EHms => "(E) HH:mm:ss",
      Ed => "d\N{U+c77c} (E)",
      Ehm => "(E) a h:mm",
      Ehms => "(E) a h:mm:ss",
      Gy => "G y\N{U+b144}",
      GyMMM => "G y\N{U+b144} MMM",
      GyMMMEEEEd => "G y\N{U+b144} MMM d\N{U+c77c} EEEE",
      GyMMMEd => "G y\N{U+b144} MMM d\N{U+c77c} (E)",
      GyMMMd => "G y\N{U+b144} MMM d\N{U+c77c}",
      H => "H\N{U+c2dc}",
      HHmmss => "HH:mm:ss",
      Hm => "HH:mm",
      Hms => "H\N{U+c2dc} m\N{U+bd84} s\N{U+cd08}",
      Hmsv => "H\N{U+c2dc} m\N{U+bd84} s\N{U+cd08} v",
      Hmv => "HH:mm v",
      M => "M\N{U+c6d4}",
      MEEEEd => "M. d. EEEE",
      MEd => "M. d. (E)",
      MMM => "LLL",
      MMMEEEEd => "MMM d\N{U+c77c} EEEE",
      MMMEd => "MMM d\N{U+c77c} (E)",
      MMMMd => "MMMM d\N{U+c77c}",
      MMMd => "MMM d\N{U+c77c}",
      Md => "M. d.",
      d => "d\N{U+c77c}",
      h => "a h\N{U+c2dc}",
      hm => "a h:mm",
      hms => "a h:mm:ss",
      hmsv => "a h:mm:ss v",
      hmv => "a h:mm v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y\N{U+b144}",
      yM => "y. M.",
      yMEEEEd => "y. M. d. EEEE",
      yMEd => "y. M. d. (E)",
      yMM => "y. M.",
      yMMM => "y\N{U+b144} MMM",
      yMMMEEEEd => "y\N{U+b144} MMM d\N{U+c77c} EEEE",
      yMMMEd => "y\N{U+b144} MMM d\N{U+c77c} (E)",
      yMMMM => "y\N{U+b144} MMMM",
      yMMMd => "y\N{U+b144} MMM d\N{U+c77c}",
      yMd => "y. M. d.",
      yQQQ => "y\N{U+b144} QQQ",
      yQQQQ => "y\N{U+b144} QQQQ"
    },
    code => "ko-KP",
    date_format_full => "y\N{U+b144} M\N{U+c6d4} d\N{U+c77c} EEEE",
    date_format_long => "y\N{U+b144} M\N{U+c6d4} d\N{U+c77c}",
    date_format_medium => "y. M. d.",
    date_format_short => "yy. M. d.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+c6d4}",
      "\N{U+d654}",
      "\N{U+c218}",
      "\N{U+baa9}",
      "\N{U+ae08}",
      "\N{U+d1a0}",
      "\N{U+c77c}"
    ],
    day_format_narrow => [
      "\N{U+c6d4}",
      "\N{U+d654}",
      "\N{U+c218}",
      "\N{U+baa9}",
      "\N{U+ae08}",
      "\N{U+d1a0}",
      "\N{U+c77c}"
    ],
    day_format_wide => [
      "\N{U+c6d4}\N{U+c694}\N{U+c77c}",
      "\N{U+d654}\N{U+c694}\N{U+c77c}",
      "\N{U+c218}\N{U+c694}\N{U+c77c}",
      "\N{U+baa9}\N{U+c694}\N{U+c77c}",
      "\N{U+ae08}\N{U+c694}\N{U+c77c}",
      "\N{U+d1a0}\N{U+c694}\N{U+c77c}",
      "\N{U+c77c}\N{U+c694}\N{U+c77c}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+c6d4}",
      "\N{U+d654}",
      "\N{U+c218}",
      "\N{U+baa9}",
      "\N{U+ae08}",
      "\N{U+d1a0}",
      "\N{U+c77c}"
    ],
    day_stand_alone_narrow => [
      "\N{U+c6d4}",
      "\N{U+d654}",
      "\N{U+c218}",
      "\N{U+baa9}",
      "\N{U+ae08}",
      "\N{U+d1a0}",
      "\N{U+c77c}"
    ],
    day_stand_alone_wide => [
      "\N{U+c6d4}\N{U+c694}\N{U+c77c}",
      "\N{U+d654}\N{U+c694}\N{U+c77c}",
      "\N{U+c218}\N{U+c694}\N{U+c77c}",
      "\N{U+baa9}\N{U+c694}\N{U+c77c}",
      "\N{U+ae08}\N{U+c694}\N{U+c77c}",
      "\N{U+d1a0}\N{U+c694}\N{U+c77c}",
      "\N{U+c77c}\N{U+c694}\N{U+c77c}"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "\N{U+ae30}\N{U+c6d0}\N{U+c804}",
      "\N{U+c11c}\N{U+ae30}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Korean",
    month_format_abbreviated => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    month_format_narrow => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    month_format_wide => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    month_stand_alone_abbreviated => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    month_stand_alone_narrow => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    month_stand_alone_wide => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    name => "Korean North Korea",
    native_language => "\N{U+d55c}\N{U+ad6d}\N{U+c5b4}",
    native_name => "\N{U+d55c}\N{U+ad6d}\N{U+c5b4} \N{U+c870}\N{U+c120}\N{U+bbfc}\N{U+c8fc}\N{U+c8fc}\N{U+c758}\N{U+c778}\N{U+bbfc}\N{U+acf5}\N{U+d654}\N{U+ad6d}",
    native_script => undef,
    native_territory => "\N{U+c870}\N{U+c120}\N{U+bbfc}\N{U+c8fc}\N{U+c8fc}\N{U+c758}\N{U+c778}\N{U+bbfc}\N{U+acf5}\N{U+d654}\N{U+ad6d}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1\N{U+bd84}\N{U+ae30}",
      "2\N{U+bd84}\N{U+ae30}",
      "3\N{U+bd84}\N{U+ae30}",
      "4\N{U+bd84}\N{U+ae30}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+c81c} 1/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 2/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 3/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 4/4\N{U+bd84}\N{U+ae30}"
    ],
    quarter_stand_alone_abbreviated => [
      "1\N{U+bd84}\N{U+ae30}",
      "2\N{U+bd84}\N{U+ae30}",
      "3\N{U+bd84}\N{U+ae30}",
      "4\N{U+bd84}\N{U+ae30}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+c81c} 1/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 2/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 3/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 4/4\N{U+bd84}\N{U+ae30}"
    ],
    script => undef,
    territory => "North Korea",
    time_format_full => "a h\N{U+c2dc} m\N{U+bd84} s\N{U+cd08} zzzz",
    time_format_long => "a h\N{U+c2dc} m\N{U+bd84} s\N{U+cd08} z",
    time_format_medium => "a h:mm:ss",
    time_format_short => "a h:mm",
    variant => undef,
    version => 29
  }
  __[ ko-KR ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EEEEd => "d\N{U+c77c} EEEE",
      EHm => "(E) HH:mm",
      EHms => "(E) HH:mm:ss",
      Ed => "d\N{U+c77c} (E)",
      Ehm => "(E) a h:mm",
      Ehms => "(E) a h:mm:ss",
      Gy => "G y\N{U+b144}",
      GyMMM => "G y\N{U+b144} MMM",
      GyMMMEEEEd => "G y\N{U+b144} MMM d\N{U+c77c} EEEE",
      GyMMMEd => "G y\N{U+b144} MMM d\N{U+c77c} (E)",
      GyMMMd => "G y\N{U+b144} MMM d\N{U+c77c}",
      H => "H\N{U+c2dc}",
      HHmmss => "HH:mm:ss",
      Hm => "HH:mm",
      Hms => "H\N{U+c2dc} m\N{U+bd84} s\N{U+cd08}",
      Hmsv => "H\N{U+c2dc} m\N{U+bd84} s\N{U+cd08} v",
      Hmv => "HH:mm v",
      M => "M\N{U+c6d4}",
      MEEEEd => "M. d. EEEE",
      MEd => "M. d. (E)",
      MMM => "LLL",
      MMMEEEEd => "MMM d\N{U+c77c} EEEE",
      MMMEd => "MMM d\N{U+c77c} (E)",
      MMMMd => "MMMM d\N{U+c77c}",
      MMMd => "MMM d\N{U+c77c}",
      Md => "M. d.",
      d => "d\N{U+c77c}",
      h => "a h\N{U+c2dc}",
      hm => "a h:mm",
      hms => "a h:mm:ss",
      hmsv => "a h:mm:ss v",
      hmv => "a h:mm v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y\N{U+b144}",
      yM => "y. M.",
      yMEEEEd => "y. M. d. EEEE",
      yMEd => "y. M. d. (E)",
      yMM => "y. M.",
      yMMM => "y\N{U+b144} MMM",
      yMMMEEEEd => "y\N{U+b144} MMM d\N{U+c77c} EEEE",
      yMMMEd => "y\N{U+b144} MMM d\N{U+c77c} (E)",
      yMMMM => "y\N{U+b144} MMMM",
      yMMMd => "y\N{U+b144} MMM d\N{U+c77c}",
      yMd => "y. M. d.",
      yQQQ => "y\N{U+b144} QQQ",
      yQQQQ => "y\N{U+b144} QQQQ"
    },
    code => "ko-KR",
    date_format_full => "y\N{U+b144} M\N{U+c6d4} d\N{U+c77c} EEEE",
    date_format_long => "y\N{U+b144} M\N{U+c6d4} d\N{U+c77c}",
    date_format_medium => "y. M. d.",
    date_format_short => "yy. M. d.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+c6d4}",
      "\N{U+d654}",
      "\N{U+c218}",
      "\N{U+baa9}",
      "\N{U+ae08}",
      "\N{U+d1a0}",
      "\N{U+c77c}"
    ],
    day_format_narrow => [
      "\N{U+c6d4}",
      "\N{U+d654}",
      "\N{U+c218}",
      "\N{U+baa9}",
      "\N{U+ae08}",
      "\N{U+d1a0}",
      "\N{U+c77c}"
    ],
    day_format_wide => [
      "\N{U+c6d4}\N{U+c694}\N{U+c77c}",
      "\N{U+d654}\N{U+c694}\N{U+c77c}",
      "\N{U+c218}\N{U+c694}\N{U+c77c}",
      "\N{U+baa9}\N{U+c694}\N{U+c77c}",
      "\N{U+ae08}\N{U+c694}\N{U+c77c}",
      "\N{U+d1a0}\N{U+c694}\N{U+c77c}",
      "\N{U+c77c}\N{U+c694}\N{U+c77c}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+c6d4}",
      "\N{U+d654}",
      "\N{U+c218}",
      "\N{U+baa9}",
      "\N{U+ae08}",
      "\N{U+d1a0}",
      "\N{U+c77c}"
    ],
    day_stand_alone_narrow => [
      "\N{U+c6d4}",
      "\N{U+d654}",
      "\N{U+c218}",
      "\N{U+baa9}",
      "\N{U+ae08}",
      "\N{U+d1a0}",
      "\N{U+c77c}"
    ],
    day_stand_alone_wide => [
      "\N{U+c6d4}\N{U+c694}\N{U+c77c}",
      "\N{U+d654}\N{U+c694}\N{U+c77c}",
      "\N{U+c218}\N{U+c694}\N{U+c77c}",
      "\N{U+baa9}\N{U+c694}\N{U+c77c}",
      "\N{U+ae08}\N{U+c694}\N{U+c77c}",
      "\N{U+d1a0}\N{U+c694}\N{U+c77c}",
      "\N{U+c77c}\N{U+c694}\N{U+c77c}"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "\N{U+ae30}\N{U+c6d0}\N{U+c804}",
      "\N{U+c11c}\N{U+ae30}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%x (%a) %r",
    glibc_time_12_format => "%p %I\N{U+c2dc} %M\N{U+bd84} %S\N{U+cd08}",
    glibc_time_format => "%H\N{U+c2dc} %M\N{U+bd84} %S\N{U+cd08}",
    language => "Korean",
    month_format_abbreviated => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    month_format_narrow => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    month_format_wide => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    month_stand_alone_abbreviated => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    month_stand_alone_narrow => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    month_stand_alone_wide => [
      "1\N{U+c6d4}",
      "2\N{U+c6d4}",
      "3\N{U+c6d4}",
      "4\N{U+c6d4}",
      "5\N{U+c6d4}",
      "6\N{U+c6d4}",
      "7\N{U+c6d4}",
      "8\N{U+c6d4}",
      "9\N{U+c6d4}",
      "10\N{U+c6d4}",
      "11\N{U+c6d4}",
      "12\N{U+c6d4}"
    ],
    name => "Korean South Korea",
    native_language => "\N{U+d55c}\N{U+ad6d}\N{U+c5b4}",
    native_name => "\N{U+d55c}\N{U+ad6d}\N{U+c5b4} \N{U+b300}\N{U+d55c}\N{U+bbfc}\N{U+ad6d}",
    native_script => undef,
    native_territory => "\N{U+b300}\N{U+d55c}\N{U+bbfc}\N{U+ad6d}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1\N{U+bd84}\N{U+ae30}",
      "2\N{U+bd84}\N{U+ae30}",
      "3\N{U+bd84}\N{U+ae30}",
      "4\N{U+bd84}\N{U+ae30}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+c81c} 1/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 2/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 3/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 4/4\N{U+bd84}\N{U+ae30}"
    ],
    quarter_stand_alone_abbreviated => [
      "1\N{U+bd84}\N{U+ae30}",
      "2\N{U+bd84}\N{U+ae30}",
      "3\N{U+bd84}\N{U+ae30}",
      "4\N{U+bd84}\N{U+ae30}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+c81c} 1/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 2/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 3/4\N{U+bd84}\N{U+ae30}",
      "\N{U+c81c} 4/4\N{U+bd84}\N{U+ae30}"
    ],
    script => undef,
    territory => "South Korea",
    time_format_full => "a h\N{U+c2dc} m\N{U+bd84} s\N{U+cd08} zzzz",
    time_format_long => "a h\N{U+c2dc} m\N{U+bd84} s\N{U+cd08} z",
    time_format_medium => "a h:mm:ss",
    time_format_short => "a h:mm",
    variant => undef,
    version => 29
  }
  __[ kok ]__
  {
    am_pm_abbreviated => [
      "\N{U+092e}.\N{U+092a}\N{U+0942}.",
      "\N{U+092e}.\N{U+0928}\N{U+0902}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "kok",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0938}\N{U+094b}\N{U+092e}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0933}",
      "\N{U+092c}\N{U+0941}\N{U+0927}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}",
      "\N{U+0930}\N{U+0935}\N{U+093f}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0933}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0906}\N{U+0926}\N{U+093f}\N{U+0924}\N{U+094d}\N{U+092f}\N{U+0935}\N{U+093e}\N{U+0930}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0938}\N{U+094b}\N{U+092e}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0933}",
      "\N{U+092c}\N{U+0941}\N{U+0927}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}",
      "\N{U+0930}\N{U+0935}\N{U+093f}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0933}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0906}\N{U+0926}\N{U+093f}\N{U+0924}\N{U+094d}\N{U+092f}\N{U+0935}\N{U+093e}\N{U+0930}"
    ],
    era_abbreviated => [
      "\N{U+0915}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0938}\N{U+094d}\N{U+0924}\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0915}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0938}\N{U+094d}\N{U+0924}\N{U+0936}\N{U+0916}\N{U+093e}"
    ],
    era_narrow => [
      "\N{U+0915}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0938}\N{U+094d}\N{U+0924}\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0915}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0938}\N{U+094d}\N{U+0924}\N{U+0936}\N{U+0916}\N{U+093e}"
    ],
    era_wide => [
      "\N{U+0915}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0938}\N{U+094d}\N{U+0924}\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0915}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0938}\N{U+094d}\N{U+0924}\N{U+0936}\N{U+0916}\N{U+093e}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Konkani",
    month_format_abbreviated => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0947}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+090f}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0948}",
      "\N{U+0913}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0913}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+0935}\N{U+094d}\N{U+0939}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0947}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+090f}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0948}",
      "\N{U+0913}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0913}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+0935}\N{U+094d}\N{U+0939}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0947}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+090f}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0948}",
      "\N{U+0913}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0913}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+0935}\N{U+094d}\N{U+0939}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0947}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+090f}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0948}",
      "\N{U+0913}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0913}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+0935}\N{U+094d}\N{U+0939}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}"
    ],
    name => "Konkani",
    native_language => "\N{U+0915}\N{U+094b}\N{U+0902}\N{U+0915}\N{U+0923}\N{U+0940}",
    native_name => "\N{U+0915}\N{U+094b}\N{U+0902}\N{U+0915}\N{U+0923}\N{U+0940}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kok-IN ]__
  {
    am_pm_abbreviated => [
      "\N{U+092e}.\N{U+092a}\N{U+0942}.",
      "\N{U+092e}.\N{U+0928}\N{U+0902}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "kok-IN",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0938}\N{U+094b}\N{U+092e}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0933}",
      "\N{U+092c}\N{U+0941}\N{U+0927}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}",
      "\N{U+0930}\N{U+0935}\N{U+093f}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0933}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0906}\N{U+0926}\N{U+093f}\N{U+0924}\N{U+094d}\N{U+092f}\N{U+0935}\N{U+093e}\N{U+0930}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0938}\N{U+094b}\N{U+092e}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0933}",
      "\N{U+092c}\N{U+0941}\N{U+0927}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}",
      "\N{U+0930}\N{U+0935}\N{U+093f}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0933}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0906}\N{U+0926}\N{U+093f}\N{U+0924}\N{U+094d}\N{U+092f}\N{U+0935}\N{U+093e}\N{U+0930}"
    ],
    era_abbreviated => [
      "\N{U+0915}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0938}\N{U+094d}\N{U+0924}\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0915}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0938}\N{U+094d}\N{U+0924}\N{U+0936}\N{U+0916}\N{U+093e}"
    ],
    era_narrow => [
      "\N{U+0915}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0938}\N{U+094d}\N{U+0924}\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0915}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0938}\N{U+094d}\N{U+0924}\N{U+0936}\N{U+0916}\N{U+093e}"
    ],
    era_wide => [
      "\N{U+0915}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0938}\N{U+094d}\N{U+0924}\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0915}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0938}\N{U+094d}\N{U+0924}\N{U+0936}\N{U+0916}\N{U+093e}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A %d %b %Y",
    glibc_datetime_format => "%A %d %b %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "Konkani",
    month_format_abbreviated => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0947}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+090f}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0948}",
      "\N{U+0913}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0913}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+0935}\N{U+094d}\N{U+0939}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0947}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+090f}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0948}",
      "\N{U+0913}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0913}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+0935}\N{U+094d}\N{U+0939}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0947}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+090f}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0948}",
      "\N{U+0913}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0913}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+0935}\N{U+094d}\N{U+0939}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0947}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+090f}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0948}",
      "\N{U+0913}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0913}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+0935}\N{U+094d}\N{U+0939}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}"
    ],
    name => "Konkani India",
    native_language => "\N{U+0915}\N{U+094b}\N{U+0902}\N{U+0915}\N{U+0923}\N{U+0940}",
    native_name => "\N{U+0915}\N{U+094b}\N{U+0902}\N{U+0915}\N{U+0923}\N{U+0940} \N{U+092d}\N{U+093e}\N{U+0930}\N{U+0924}",
    native_script => undef,
    native_territory => "\N{U+092d}\N{U+093e}\N{U+0930}\N{U+0924}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "India",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ks ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "Gy",
      GyMMM => "MMM Gy",
      GyMMMEd => "EEE, MMM d, Gy",
      GyMMMd => "MMM d, Gy",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "d-MMM",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "EEE, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "EEE, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ks",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0698}\N{U+0654}\N{U+0646}\N{U+065b}\N{U+062f}\N{U+0655}\N{U+0631}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0648}\N{U+065a}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0648}\N{U+062f}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0631}\N{U+065b}\N{U+066e}\N{U+06ea}\N{U+0633}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+062c}\N{U+064f}\N{U+0645}\N{U+06c1}",
      "\N{U+0628}\N{U+0679}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0622}\N{U+062a}\N{U+06be}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_format_narrow => [
      "\N{U+0698}",
      "\N{U+0628}",
      "\N{U+0628}",
      "\N{U+0628}",
      "\N{U+062c}",
      "\N{U+0628}",
      "\N{U+0627}"
    ],
    day_format_wide => [
      "\N{U+0698}\N{U+0654}\N{U+0646}\N{U+065b}\N{U+062f}\N{U+0631}\N{U+0655}\N{U+0631}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0648}\N{U+065a}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0648}\N{U+062f}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0631}\N{U+065b}\N{U+066e}\N{U+06ea}\N{U+0633}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+062c}\N{U+064f}\N{U+0645}\N{U+06c1}",
      "\N{U+0628}\N{U+0679}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0627}\N{U+064e}\N{U+062a}\N{U+06be}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0698}\N{U+0654}\N{U+0646}\N{U+065b}\N{U+062f}\N{U+0655}\N{U+0631}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0648}\N{U+065a}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0648}\N{U+062f}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0631}\N{U+065b}\N{U+066e}\N{U+06ea}\N{U+0633}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+062c}\N{U+064f}\N{U+0645}\N{U+06c1}",
      "\N{U+0628}\N{U+0679}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0622}\N{U+062a}\N{U+06be}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0698}",
      "\N{U+0628}",
      "\N{U+0628}",
      "\N{U+0628}",
      "\N{U+062c}",
      "\N{U+0628}",
      "\N{U+0627}"
    ],
    day_stand_alone_wide => [
      "\N{U+0698}\N{U+0654}\N{U+0646}\N{U+065b}\N{U+062f}\N{U+0631}\N{U+0655}\N{U+0631}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0648}\N{U+065a}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0648}\N{U+062f}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0631}\N{U+065b}\N{U+066e}\N{U+06ea}\N{U+0633}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+062c}\N{U+064f}\N{U+0645}\N{U+06c1}",
      "\N{U+0628}\N{U+0679}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0627}\N{U+064e}\N{U+062a}\N{U+06be}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    era_abbreviated => [
      "\N{U+0628}\N{U+06cc} \N{U+0633}\N{U+06cc}",
      "\N{U+0627}\N{U+06d2} \N{U+0688}\N{U+06cc}"
    ],
    era_narrow => [
      "\N{U+0628}\N{U+06cc} \N{U+0633}\N{U+06cc}",
      "\N{U+0627}\N{U+06d2} \N{U+0688}\N{U+06cc}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0655}\N{U+0644} \N{U+0645}\N{U+0633}\N{U+06cc}\N{U+0656}\N{U+062d}",
      "\N{U+0639}\N{U+06cc}\N{U+0656}\N{U+0633}\N{U+0648}\N{U+06cc} \N{U+0633}\N{U+0646}\N{U+06c1}\N{U+0655}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kashmiri",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0624}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0624}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0655}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}\N{U+0654}",
      "\N{U+062c}\N{U+0648}\N{U+0657}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0657}\N{U+0644}\N{U+0627}\N{U+06cc}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0657}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+062c}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0627}",
      "\N{U+0645}",
      "\N{U+062c}",
      "\N{U+062c}",
      "\N{U+0627}",
      "\N{U+0633}",
      "\N{U+0633}",
      "\N{U+0627}",
      "\N{U+0646}"
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0624}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0624}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0655}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}\N{U+0654}",
      "\N{U+062c}\N{U+0648}\N{U+0657}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0657}\N{U+0644}\N{U+0627}\N{U+06cc}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0657}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0624}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0624}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0655}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}\N{U+0654}",
      "\N{U+062c}\N{U+0648}\N{U+0657}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0657}\N{U+0644}\N{U+0627}\N{U+06cc}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0657}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+062c}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0627}",
      "\N{U+0645}",
      "\N{U+062c}",
      "\N{U+062c}",
      "\N{U+0627}",
      "\N{U+0633}",
      "\N{U+0633}",
      "\N{U+0627}",
      "\N{U+0646}"
    ],
    month_stand_alone_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0624}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0624}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0655}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}\N{U+0654}",
      "\N{U+062c}\N{U+0648}\N{U+0657}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0657}\N{U+0644}\N{U+0627}\N{U+06cc}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0657}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Kashmiri",
    native_language => "\N{U+06a9}\N{U+0672}\N{U+0634}\N{U+064f}\N{U+0631}",
    native_name => "\N{U+06a9}\N{U+0672}\N{U+0634}\N{U+064f}\N{U+0631}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+062f}\N{U+0648}\N{U+065a}\N{U+06cc}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+062a}\N{U+0631}\N{U+065b}\N{U+06cc}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+0698}\N{U+0648}\N{U+0657}\N{U+0631}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+06af}\N{U+06c4}\N{U+0691}\N{U+0646}\N{U+06cc}\N{U+064f}\N{U+06a9} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+062f}\N{U+0648}\N{U+065a}\N{U+06cc}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+062a}\N{U+0631}\N{U+065b}\N{U+06cc}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+0698}\N{U+0648}\N{U+0657}\N{U+0631}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+062f}\N{U+0648}\N{U+065a}\N{U+06cc}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+062a}\N{U+0631}\N{U+065b}\N{U+06cc}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+0698}\N{U+0648}\N{U+0657}\N{U+0631}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+06af}\N{U+06c4}\N{U+0691}\N{U+0646}\N{U+06cc}\N{U+064f}\N{U+06a9} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+062f}\N{U+0648}\N{U+065a}\N{U+06cc}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+062a}\N{U+0631}\N{U+065b}\N{U+06cc}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+0698}\N{U+0648}\N{U+0657}\N{U+0631}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ks-IN ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "Gy",
      GyMMM => "MMM Gy",
      GyMMMEd => "EEE, MMM d, Gy",
      GyMMMd => "MMM d, Gy",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "d-MMM",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "EEE, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "EEE, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ks-IN",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0698}\N{U+0654}\N{U+0646}\N{U+065b}\N{U+062f}\N{U+0655}\N{U+0631}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0648}\N{U+065a}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0648}\N{U+062f}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0631}\N{U+065b}\N{U+066e}\N{U+06ea}\N{U+0633}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+062c}\N{U+064f}\N{U+0645}\N{U+06c1}",
      "\N{U+0628}\N{U+0679}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0622}\N{U+062a}\N{U+06be}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_format_narrow => [
      "\N{U+0698}",
      "\N{U+0628}",
      "\N{U+0628}",
      "\N{U+0628}",
      "\N{U+062c}",
      "\N{U+0628}",
      "\N{U+0627}"
    ],
    day_format_wide => [
      "\N{U+0698}\N{U+0654}\N{U+0646}\N{U+065b}\N{U+062f}\N{U+0631}\N{U+0655}\N{U+0631}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0648}\N{U+065a}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0648}\N{U+062f}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0631}\N{U+065b}\N{U+066e}\N{U+06ea}\N{U+0633}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+062c}\N{U+064f}\N{U+0645}\N{U+06c1}",
      "\N{U+0628}\N{U+0679}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0627}\N{U+064e}\N{U+062a}\N{U+06be}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0698}\N{U+0654}\N{U+0646}\N{U+065b}\N{U+062f}\N{U+0655}\N{U+0631}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0648}\N{U+065a}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0648}\N{U+062f}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0631}\N{U+065b}\N{U+066e}\N{U+06ea}\N{U+0633}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+062c}\N{U+064f}\N{U+0645}\N{U+06c1}",
      "\N{U+0628}\N{U+0679}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0622}\N{U+062a}\N{U+06be}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0698}",
      "\N{U+0628}",
      "\N{U+0628}",
      "\N{U+0628}",
      "\N{U+062c}",
      "\N{U+0628}",
      "\N{U+0627}"
    ],
    day_stand_alone_wide => [
      "\N{U+0698}\N{U+0654}\N{U+0646}\N{U+065b}\N{U+062f}\N{U+0631}\N{U+0655}\N{U+0631}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0648}\N{U+065a}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0648}\N{U+062f}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0628}\N{U+0631}\N{U+065b}\N{U+066e}\N{U+06ea}\N{U+0633}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+062c}\N{U+064f}\N{U+0645}\N{U+06c1}",
      "\N{U+0628}\N{U+0679}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0627}\N{U+064e}\N{U+062a}\N{U+06be}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    era_abbreviated => [
      "\N{U+0628}\N{U+06cc} \N{U+0633}\N{U+06cc}",
      "\N{U+0627}\N{U+06d2} \N{U+0688}\N{U+06cc}"
    ],
    era_narrow => [
      "\N{U+0628}\N{U+06cc} \N{U+0633}\N{U+06cc}",
      "\N{U+0627}\N{U+06d2} \N{U+0688}\N{U+06cc}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0655}\N{U+0644} \N{U+0645}\N{U+0633}\N{U+06cc}\N{U+0656}\N{U+062d}",
      "\N{U+0639}\N{U+06cc}\N{U+0656}\N{U+0633}\N{U+0648}\N{U+06cc} \N{U+0633}\N{U+0646}\N{U+06c1}\N{U+0655}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A %d %b %Y",
    glibc_datetime_format => "%A %d %b %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "Kashmiri",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0624}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0624}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0655}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}\N{U+0654}",
      "\N{U+062c}\N{U+0648}\N{U+0657}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0657}\N{U+0644}\N{U+0627}\N{U+06cc}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0657}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "\N{U+062c}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0627}",
      "\N{U+0645}",
      "\N{U+062c}",
      "\N{U+062c}",
      "\N{U+0627}",
      "\N{U+0633}",
      "\N{U+0633}",
      "\N{U+0627}",
      "\N{U+0646}"
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0624}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0624}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0655}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}\N{U+0654}",
      "\N{U+062c}\N{U+0648}\N{U+0657}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0657}\N{U+0644}\N{U+0627}\N{U+06cc}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0657}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0624}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0624}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0655}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}\N{U+0654}",
      "\N{U+062c}\N{U+0648}\N{U+0657}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0657}\N{U+0644}\N{U+0627}\N{U+06cc}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0657}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "\N{U+062c}",
      "\N{U+0641}",
      "\N{U+0645}",
      "\N{U+0627}",
      "\N{U+0645}",
      "\N{U+062c}",
      "\N{U+062c}",
      "\N{U+0627}",
      "\N{U+0633}",
      "\N{U+0633}",
      "\N{U+0627}",
      "\N{U+0646}"
    ],
    month_stand_alone_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0624}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0624}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0655}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}\N{U+0654}",
      "\N{U+062c}\N{U+0648}\N{U+0657}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0657}\N{U+0644}\N{U+0627}\N{U+06cc}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0657}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Kashmiri India",
    native_language => "\N{U+06a9}\N{U+0672}\N{U+0634}\N{U+064f}\N{U+0631}",
    native_name => "\N{U+06a9}\N{U+0672}\N{U+0634}\N{U+064f}\N{U+0631} \N{U+06c1}\N{U+0650}\N{U+0646}\N{U+065b}\N{U+062f}\N{U+0648}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646}",
    native_script => undef,
    native_territory => "\N{U+06c1}\N{U+0650}\N{U+0646}\N{U+065b}\N{U+062f}\N{U+0648}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+062f}\N{U+0648}\N{U+065a}\N{U+06cc}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+062a}\N{U+0631}\N{U+065b}\N{U+06cc}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+0698}\N{U+0648}\N{U+0657}\N{U+0631}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+06af}\N{U+06c4}\N{U+0691}\N{U+0646}\N{U+06cc}\N{U+064f}\N{U+06a9} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+062f}\N{U+0648}\N{U+065a}\N{U+06cc}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+062a}\N{U+0631}\N{U+065b}\N{U+06cc}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+0698}\N{U+0648}\N{U+0657}\N{U+0631}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+062f}\N{U+0648}\N{U+065a}\N{U+06cc}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+062a}\N{U+0631}\N{U+065b}\N{U+06cc}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+0698}\N{U+0648}\N{U+0657}\N{U+0631}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+06af}\N{U+06c4}\N{U+0691}\N{U+0646}\N{U+06cc}\N{U+064f}\N{U+06a9} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+062f}\N{U+0648}\N{U+065a}\N{U+06cc}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+062a}\N{U+0631}\N{U+065b}\N{U+06cc}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}",
      "\N{U+0698}\N{U+0648}\N{U+0657}\N{U+0631}\N{U+0650}\N{U+0645} \N{U+0698}\N{U+06c4}\N{U+0628}\N{U+0627}\N{U+06af}"
    ],
    script => undef,
    territory => "India",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ksb ]__
  {
    am_pm_abbreviated => [
      "makeo",
      "nyiaghuo"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ksb",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jmn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_format_narrow => [
      3,
      4,
      5,
      "A",
      "I",
      1,
      2
    ],
    day_format_wide => [
      "Jumaatatu",
      "Jumaane",
      "Jumaatano",
      "Alhamisi",
      "Ijumaa",
      "Jumaamosi",
      "Jumaapii"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jmn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_stand_alone_narrow => [
      3,
      4,
      5,
      "A",
      "I",
      1,
      2
    ],
    day_stand_alone_wide => [
      "Jumaatatu",
      "Jumaane",
      "Jumaatano",
      "Alhamisi",
      "Ijumaa",
      "Jumaamosi",
      "Jumaapii"
    ],
    era_abbreviated => [
      "KK",
      "BK"
    ],
    era_narrow => [
      "KK",
      "BK"
    ],
    era_wide => [
      "Kabla ya Klisto",
      "Baada ya Klisto"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Shambala",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januali",
      "Febluali",
      "Machi",
      "Aplili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januali",
      "Febluali",
      "Machi",
      "Aplili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Shambala",
    native_language => "Kishambaa",
    native_name => "Kishambaa",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Lobo ya bosi",
      "Lobo ya mbii",
      "Lobo ya nnd\N{U+2019}atu",
      "Lobo ya nne"
    ],
    quarter_stand_alone_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Lobo ya bosi",
      "Lobo ya mbii",
      "Lobo ya nnd\N{U+2019}atu",
      "Lobo ya nne"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ksb-TZ ]__
  {
    am_pm_abbreviated => [
      "makeo",
      "nyiaghuo"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ksb-TZ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jmn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_format_narrow => [
      3,
      4,
      5,
      "A",
      "I",
      1,
      2
    ],
    day_format_wide => [
      "Jumaatatu",
      "Jumaane",
      "Jumaatano",
      "Alhamisi",
      "Ijumaa",
      "Jumaamosi",
      "Jumaapii"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jmn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_stand_alone_narrow => [
      3,
      4,
      5,
      "A",
      "I",
      1,
      2
    ],
    day_stand_alone_wide => [
      "Jumaatatu",
      "Jumaane",
      "Jumaatano",
      "Alhamisi",
      "Ijumaa",
      "Jumaamosi",
      "Jumaapii"
    ],
    era_abbreviated => [
      "KK",
      "BK"
    ],
    era_narrow => [
      "KK",
      "BK"
    ],
    era_wide => [
      "Kabla ya Klisto",
      "Baada ya Klisto"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Shambala",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januali",
      "Febluali",
      "Machi",
      "Aplili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januali",
      "Febluali",
      "Machi",
      "Aplili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Shambala Tanzania",
    native_language => "Kishambaa",
    native_name => "Kishambaa Tanzania",
    native_script => undef,
    native_territory => "Tanzania",
    native_variant => undef,
    quarter_format_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Lobo ya bosi",
      "Lobo ya mbii",
      "Lobo ya nnd\N{U+2019}atu",
      "Lobo ya nne"
    ],
    quarter_stand_alone_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Lobo ya bosi",
      "Lobo ya mbii",
      "Lobo ya nnd\N{U+2019}atu",
      "Lobo ya nne"
    ],
    script => undef,
    territory => "Tanzania",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ksf ]__
  {
    am_pm_abbreviated => [
      "s\N{U+00e1}r\N{U+00fa}w\N{U+00e1}",
      "c\N{U+025b}\N{U+025b}\N{U+0301}nko"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ksf",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "l\N{U+01dd}n",
      "maa",
      "m\N{U+025b}k",
      "j\N{U+01dd}\N{U+01dd}",
      "j\N{U+00fa}m",
      "sam",
      "s\N{U+0254}\N{U+0301}n"
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "j",
      "s",
      "s"
    ],
    day_format_wide => [
      "l\N{U+01dd}nd\N{U+00ed}",
      "maad\N{U+00ed}",
      "m\N{U+025b}kr\N{U+025b}d\N{U+00ed}",
      "j\N{U+01dd}\N{U+01dd}d\N{U+00ed}",
      "j\N{U+00fa}mb\N{U+00e1}",
      "samd\N{U+00ed}",
      "s\N{U+0254}\N{U+0301}nd\N{U+01dd}"
    ],
    day_stand_alone_abbreviated => [
      "l\N{U+01dd}n",
      "maa",
      "m\N{U+025b}k",
      "j\N{U+01dd}\N{U+01dd}",
      "j\N{U+00fa}m",
      "sam",
      "s\N{U+0254}\N{U+0301}n"
    ],
    day_stand_alone_narrow => [
      "l",
      "m",
      "m",
      "j",
      "j",
      "s",
      "s"
    ],
    day_stand_alone_wide => [
      "l\N{U+01dd}nd\N{U+00ed}",
      "maad\N{U+00ed}",
      "m\N{U+025b}kr\N{U+025b}d\N{U+00ed}",
      "j\N{U+01dd}\N{U+01dd}d\N{U+00ed}",
      "j\N{U+00fa}mb\N{U+00e1}",
      "samd\N{U+00ed}",
      "s\N{U+0254}\N{U+0301}nd\N{U+01dd}"
    ],
    era_abbreviated => [
      "d.Y.",
      "k.Y."
    ],
    era_narrow => [
      "d.Y.",
      "k.Y."
    ],
    era_wide => [
      "di Y\N{U+025b}\N{U+0301}sus ak\N{U+00e1} y\N{U+00e1}l\N{U+025b}",
      "c\N{U+00e1}m\N{U+025b}\N{U+025b}n k\N{U+01dd} k\N{U+01dd}b\N{U+0254}pka Y"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Bafia",
    month_format_abbreviated => [
      "\N{U+014b}1",
      "\N{U+014b}2",
      "\N{U+014b}3",
      "\N{U+014b}4",
      "\N{U+014b}5",
      "\N{U+014b}6",
      "\N{U+014b}7",
      "\N{U+014b}8",
      "\N{U+014b}9",
      "\N{U+014b}10",
      "\N{U+014b}11",
      "\N{U+014b}12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} a nt\N{U+0254}\N{U+0301}nt\N{U+0254}",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} b\N{U+025b}\N{U+0301}\N{U+025b}",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} r\N{U+00e1}\N{U+00e1}",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} nin",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}an",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}af\N{U+0254}k",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}ab\N{U+025b}\N{U+025b}",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}araa",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}anin",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} nt\N{U+025b}k",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} nt\N{U+025b}k di b\N{U+0254}\N{U+0301}k",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} nt\N{U+025b}k di b\N{U+025b}\N{U+0301}\N{U+025b}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+014b}1",
      "\N{U+014b}2",
      "\N{U+014b}3",
      "\N{U+014b}4",
      "\N{U+014b}5",
      "\N{U+014b}6",
      "\N{U+014b}7",
      "\N{U+014b}8",
      "\N{U+014b}9",
      "\N{U+014b}10",
      "\N{U+014b}11",
      "\N{U+014b}12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} a nt\N{U+0254}\N{U+0301}nt\N{U+0254}",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} b\N{U+025b}\N{U+0301}\N{U+025b}",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} r\N{U+00e1}\N{U+00e1}",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} nin",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}an",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}af\N{U+0254}k",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}ab\N{U+025b}\N{U+025b}",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}araa",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}anin",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} nt\N{U+025b}k",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} nt\N{U+025b}k di b\N{U+0254}\N{U+0301}k",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} nt\N{U+025b}k di b\N{U+025b}\N{U+0301}\N{U+025b}"
    ],
    name => "Bafia",
    native_language => "rikpa",
    native_name => "rikpa",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "i1",
      "i2",
      "i3",
      "i4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "id\N{U+0301}\N{U+025b}\N{U+0301}n k\N{U+01dd}b\N{U+01dd}k k\N{U+01dd} nt\N{U+0254}\N{U+0301}nt\N{U+0254}\N{U+0301}",
      "id\N{U+025b}\N{U+0301}n k\N{U+01dd}b\N{U+01dd}k k\N{U+01dd} k\N{U+01dd}b\N{U+025b}\N{U+0301}\N{U+025b}",
      "id\N{U+025b}\N{U+0301}n k\N{U+01dd}b\N{U+01dd}k k\N{U+01dd} k\N{U+01dd}r\N{U+00e1}\N{U+00e1}",
      "id\N{U+025b}\N{U+0301}n k\N{U+01dd}b\N{U+01dd}k k\N{U+01dd} k\N{U+01dd}nin"
    ],
    quarter_stand_alone_abbreviated => [
      "i1",
      "i2",
      "i3",
      "i4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "id\N{U+0301}\N{U+025b}\N{U+0301}n k\N{U+01dd}b\N{U+01dd}k k\N{U+01dd} nt\N{U+0254}\N{U+0301}nt\N{U+0254}\N{U+0301}",
      "id\N{U+025b}\N{U+0301}n k\N{U+01dd}b\N{U+01dd}k k\N{U+01dd} k\N{U+01dd}b\N{U+025b}\N{U+0301}\N{U+025b}",
      "id\N{U+025b}\N{U+0301}n k\N{U+01dd}b\N{U+01dd}k k\N{U+01dd} k\N{U+01dd}r\N{U+00e1}\N{U+00e1}",
      "id\N{U+025b}\N{U+0301}n k\N{U+01dd}b\N{U+01dd}k k\N{U+01dd} k\N{U+01dd}nin"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ksf-CM ]__
  {
    am_pm_abbreviated => [
      "s\N{U+00e1}r\N{U+00fa}w\N{U+00e1}",
      "c\N{U+025b}\N{U+025b}\N{U+0301}nko"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ksf-CM",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "l\N{U+01dd}n",
      "maa",
      "m\N{U+025b}k",
      "j\N{U+01dd}\N{U+01dd}",
      "j\N{U+00fa}m",
      "sam",
      "s\N{U+0254}\N{U+0301}n"
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "j",
      "j",
      "s",
      "s"
    ],
    day_format_wide => [
      "l\N{U+01dd}nd\N{U+00ed}",
      "maad\N{U+00ed}",
      "m\N{U+025b}kr\N{U+025b}d\N{U+00ed}",
      "j\N{U+01dd}\N{U+01dd}d\N{U+00ed}",
      "j\N{U+00fa}mb\N{U+00e1}",
      "samd\N{U+00ed}",
      "s\N{U+0254}\N{U+0301}nd\N{U+01dd}"
    ],
    day_stand_alone_abbreviated => [
      "l\N{U+01dd}n",
      "maa",
      "m\N{U+025b}k",
      "j\N{U+01dd}\N{U+01dd}",
      "j\N{U+00fa}m",
      "sam",
      "s\N{U+0254}\N{U+0301}n"
    ],
    day_stand_alone_narrow => [
      "l",
      "m",
      "m",
      "j",
      "j",
      "s",
      "s"
    ],
    day_stand_alone_wide => [
      "l\N{U+01dd}nd\N{U+00ed}",
      "maad\N{U+00ed}",
      "m\N{U+025b}kr\N{U+025b}d\N{U+00ed}",
      "j\N{U+01dd}\N{U+01dd}d\N{U+00ed}",
      "j\N{U+00fa}mb\N{U+00e1}",
      "samd\N{U+00ed}",
      "s\N{U+0254}\N{U+0301}nd\N{U+01dd}"
    ],
    era_abbreviated => [
      "d.Y.",
      "k.Y."
    ],
    era_narrow => [
      "d.Y.",
      "k.Y."
    ],
    era_wide => [
      "di Y\N{U+025b}\N{U+0301}sus ak\N{U+00e1} y\N{U+00e1}l\N{U+025b}",
      "c\N{U+00e1}m\N{U+025b}\N{U+025b}n k\N{U+01dd} k\N{U+01dd}b\N{U+0254}pka Y"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Bafia",
    month_format_abbreviated => [
      "\N{U+014b}1",
      "\N{U+014b}2",
      "\N{U+014b}3",
      "\N{U+014b}4",
      "\N{U+014b}5",
      "\N{U+014b}6",
      "\N{U+014b}7",
      "\N{U+014b}8",
      "\N{U+014b}9",
      "\N{U+014b}10",
      "\N{U+014b}11",
      "\N{U+014b}12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} a nt\N{U+0254}\N{U+0301}nt\N{U+0254}",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} b\N{U+025b}\N{U+0301}\N{U+025b}",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} r\N{U+00e1}\N{U+00e1}",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} nin",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}an",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}af\N{U+0254}k",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}ab\N{U+025b}\N{U+025b}",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}araa",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}anin",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} nt\N{U+025b}k",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} nt\N{U+025b}k di b\N{U+0254}\N{U+0301}k",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} nt\N{U+025b}k di b\N{U+025b}\N{U+0301}\N{U+025b}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+014b}1",
      "\N{U+014b}2",
      "\N{U+014b}3",
      "\N{U+014b}4",
      "\N{U+014b}5",
      "\N{U+014b}6",
      "\N{U+014b}7",
      "\N{U+014b}8",
      "\N{U+014b}9",
      "\N{U+014b}10",
      "\N{U+014b}11",
      "\N{U+014b}12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} a nt\N{U+0254}\N{U+0301}nt\N{U+0254}",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} b\N{U+025b}\N{U+0301}\N{U+025b}",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} r\N{U+00e1}\N{U+00e1}",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} nin",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}an",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}af\N{U+0254}k",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}ab\N{U+025b}\N{U+025b}",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}araa",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} t\N{U+00e1}anin",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} nt\N{U+025b}k",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} nt\N{U+025b}k di b\N{U+0254}\N{U+0301}k",
      "\N{U+014b}w\N{U+00ed}\N{U+00ed} ak\N{U+01dd} nt\N{U+025b}k di b\N{U+025b}\N{U+0301}\N{U+025b}"
    ],
    name => "Bafia Cameroon",
    native_language => "rikpa",
    native_name => "rikpa kam\N{U+025b}r\N{U+00fa}n",
    native_script => undef,
    native_territory => "kam\N{U+025b}r\N{U+00fa}n",
    native_variant => undef,
    quarter_format_abbreviated => [
      "i1",
      "i2",
      "i3",
      "i4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "id\N{U+0301}\N{U+025b}\N{U+0301}n k\N{U+01dd}b\N{U+01dd}k k\N{U+01dd} nt\N{U+0254}\N{U+0301}nt\N{U+0254}\N{U+0301}",
      "id\N{U+025b}\N{U+0301}n k\N{U+01dd}b\N{U+01dd}k k\N{U+01dd} k\N{U+01dd}b\N{U+025b}\N{U+0301}\N{U+025b}",
      "id\N{U+025b}\N{U+0301}n k\N{U+01dd}b\N{U+01dd}k k\N{U+01dd} k\N{U+01dd}r\N{U+00e1}\N{U+00e1}",
      "id\N{U+025b}\N{U+0301}n k\N{U+01dd}b\N{U+01dd}k k\N{U+01dd} k\N{U+01dd}nin"
    ],
    quarter_stand_alone_abbreviated => [
      "i1",
      "i2",
      "i3",
      "i4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "id\N{U+0301}\N{U+025b}\N{U+0301}n k\N{U+01dd}b\N{U+01dd}k k\N{U+01dd} nt\N{U+0254}\N{U+0301}nt\N{U+0254}\N{U+0301}",
      "id\N{U+025b}\N{U+0301}n k\N{U+01dd}b\N{U+01dd}k k\N{U+01dd} k\N{U+01dd}b\N{U+025b}\N{U+0301}\N{U+025b}",
      "id\N{U+025b}\N{U+0301}n k\N{U+01dd}b\N{U+01dd}k k\N{U+01dd} k\N{U+01dd}r\N{U+00e1}\N{U+00e1}",
      "id\N{U+025b}\N{U+0301}n k\N{U+01dd}b\N{U+01dd}k k\N{U+01dd} k\N{U+01dd}nin"
    ],
    script => undef,
    territory => "Cameroon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ksh ]__
  {
    am_pm_abbreviated => [
      "v.m.",
      "n.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E 'd\N{U+00e4}' d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d. M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "Y-MM",
      yMEd => "E y-MM-dd",
      yMMM => "MMM y",
      yMMMEd => "E d. MMM. y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM. y",
      yMd => "y-MM-dd",
      yQQQ => "QQQy",
      yQQQQ => "QQQQ y"
    },
    code => "ksh",
    date_format_full => "EEEE, 'd\N{U+00e4}' d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM. y",
    date_format_short => "d. M. y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mo.",
      "Di.",
      "Me.",
      "Du.",
      "Fr.",
      "Sa.",
      "Su."
    ],
    day_format_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Moondaach",
      "Dinnsdaach",
      "Metwoch",
      "Dunnersdaach",
      "Friidaach",
      "Samsdaach",
      "Sunndaach"
    ],
    day_stand_alone_abbreviated => [
      "Mo.",
      "Di.",
      "Me.",
      "Du.",
      "Fr.",
      "Sa.",
      "Su."
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Moondaach",
      "Dinnsdaach",
      "Metwoch",
      "Dunnersdaach",
      "Friidaach",
      "Samsdaach",
      "Sunndaach"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr."
    ],
    era_narrow => [
      "vC",
      "nC"
    ],
    era_wide => [
      "v\N{U+00fc}r Chrestus",
      "noh Chrestus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Colognian",
    month_format_abbreviated => [
      "Jan",
      "F\N{U+00e4}b",
      "M\N{U+00e4}z",
      "Apr",
      "M\N{U+00e4}i",
      "Jun",
      "Jul",
      "Ouj",
      "S\N{U+00e4}p",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Jannewa",
      "F\N{U+00e4}browa",
      "M\N{U+00e4}\N{U+00e4}z",
      "Aprell",
      "M\N{U+00e4}i",
      "Juuni",
      "Juuli",
      "Oujo\N{U+00df}",
      "Sept\N{U+00e4}mber",
      "Oktoober",
      "Nov\N{U+00e4}mber",
      "Dez\N{U+00e4}mber"
    ],
    month_stand_alone_abbreviated => [
      "Jan.",
      "F\N{U+00e4}b.",
      "M\N{U+00e4}z.",
      "Apr.",
      "M\N{U+00e4}i",
      "Jun.",
      "Jul.",
      "Ouj.",
      "S\N{U+00e4}p.",
      "Okt.",
      "Nov.",
      "Dez."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Jannewa",
      "F\N{U+00e4}browa",
      "M\N{U+00e4}\N{U+00e4}z",
      "Aprell",
      "M\N{U+00e4}i",
      "Juuni",
      "Juuli",
      "Oujo\N{U+00df}",
      "Sept\N{U+00e4}mber",
      "Oktoober",
      "Nov\N{U+00e4}mber",
      "Dez\N{U+00e4}mber"
    ],
    name => "Colognian",
    native_language => "K\N{U+00f6}lsch",
    native_name => "K\N{U+00f6}lsch",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1.Q.",
      "2.Q.",
      "3.Q.",
      "4.Q."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. Quattaal",
      "2. Quattaal",
      "3. Quattaal",
      "4. Quattaal"
    ],
    quarter_stand_alone_abbreviated => [
      "1.Q.",
      "2.Q.",
      "3.Q.",
      "4.Q."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. Quattaal",
      "2. Quattaal",
      "3. Quattaal",
      "4. Quattaal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ksh-DE ]__
  {
    am_pm_abbreviated => [
      "v.m.",
      "n.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E 'd\N{U+00e4}' d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d. M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "Y-MM",
      yMEd => "E y-MM-dd",
      yMMM => "MMM y",
      yMMMEd => "E d. MMM. y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM. y",
      yMd => "y-MM-dd",
      yQQQ => "QQQy",
      yQQQQ => "QQQQ y"
    },
    code => "ksh-DE",
    date_format_full => "EEEE, 'd\N{U+00e4}' d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM. y",
    date_format_short => "d. M. y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mo.",
      "Di.",
      "Me.",
      "Du.",
      "Fr.",
      "Sa.",
      "Su."
    ],
    day_format_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Moondaach",
      "Dinnsdaach",
      "Metwoch",
      "Dunnersdaach",
      "Friidaach",
      "Samsdaach",
      "Sunndaach"
    ],
    day_stand_alone_abbreviated => [
      "Mo.",
      "Di.",
      "Me.",
      "Du.",
      "Fr.",
      "Sa.",
      "Su."
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Moondaach",
      "Dinnsdaach",
      "Metwoch",
      "Dunnersdaach",
      "Friidaach",
      "Samsdaach",
      "Sunndaach"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr."
    ],
    era_narrow => [
      "vC",
      "nC"
    ],
    era_wide => [
      "v\N{U+00fc}r Chrestus",
      "noh Chrestus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Colognian",
    month_format_abbreviated => [
      "Jan",
      "F\N{U+00e4}b",
      "M\N{U+00e4}z",
      "Apr",
      "M\N{U+00e4}i",
      "Jun",
      "Jul",
      "Ouj",
      "S\N{U+00e4}p",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Jannewa",
      "F\N{U+00e4}browa",
      "M\N{U+00e4}\N{U+00e4}z",
      "Aprell",
      "M\N{U+00e4}i",
      "Juuni",
      "Juuli",
      "Oujo\N{U+00df}",
      "Sept\N{U+00e4}mber",
      "Oktoober",
      "Nov\N{U+00e4}mber",
      "Dez\N{U+00e4}mber"
    ],
    month_stand_alone_abbreviated => [
      "Jan.",
      "F\N{U+00e4}b.",
      "M\N{U+00e4}z.",
      "Apr.",
      "M\N{U+00e4}i",
      "Jun.",
      "Jul.",
      "Ouj.",
      "S\N{U+00e4}p.",
      "Okt.",
      "Nov.",
      "Dez."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Jannewa",
      "F\N{U+00e4}browa",
      "M\N{U+00e4}\N{U+00e4}z",
      "Aprell",
      "M\N{U+00e4}i",
      "Juuni",
      "Juuli",
      "Oujo\N{U+00df}",
      "Sept\N{U+00e4}mber",
      "Oktoober",
      "Nov\N{U+00e4}mber",
      "Dez\N{U+00e4}mber"
    ],
    name => "Colognian Germany",
    native_language => "K\N{U+00f6}lsch",
    native_name => "K\N{U+00f6}lsch Do\N{U+00fc}tschland",
    native_script => undef,
    native_territory => "Do\N{U+00fc}tschland",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1.Q.",
      "2.Q.",
      "3.Q.",
      "4.Q."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. Quattaal",
      "2. Quattaal",
      "3. Quattaal",
      "4. Quattaal"
    ],
    quarter_stand_alone_abbreviated => [
      "1.Q.",
      "2.Q.",
      "3.Q.",
      "4.Q."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. Quattaal",
      "2. Quattaal",
      "3. Quattaal",
      "4. Quattaal"
    ],
    script => undef,
    territory => "Germany",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kw ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "kw",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Lun",
      "Mth",
      "Mhr",
      "Yow",
      "Gwe",
      "Sad",
      "Sul"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "dy Lun",
      "dy Meurth",
      "dy Merher",
      "dy Yow",
      "dy Gwener",
      "dy Sadorn",
      "dy Sul"
    ],
    day_stand_alone_abbreviated => [
      "Lun",
      "Mth",
      "Mhr",
      "Yow",
      "Gwe",
      "Sad",
      "Sul"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "dy Lun",
      "dy Meurth",
      "dy Merher",
      "dy Yow",
      "dy Gwener",
      "dy Sadorn",
      "dy Sul"
    ],
    era_abbreviated => [
      "RC",
      "AD"
    ],
    era_narrow => [
      "RC",
      "AD"
    ],
    era_wide => [
      "RC",
      "AD"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Cornish",
    month_format_abbreviated => [
      "Gen",
      "Hwe",
      "Meu",
      "Ebr",
      "Me",
      "Met",
      "Gor",
      "Est",
      "Gwn",
      "Hed",
      "Du",
      "Kev"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "mis Genver",
      "mis Hwevrer",
      "mis Meurth",
      "mis Ebrel",
      "mis Me",
      "mis Metheven",
      "mis Gortheren",
      "mis Est",
      "mis Gwynngala",
      "mis Hedra",
      "mis Du",
      "mis Kevardhu"
    ],
    month_stand_alone_abbreviated => [
      "Gen",
      "Hwe",
      "Meu",
      "Ebr",
      "Me",
      "Met",
      "Gor",
      "Est",
      "Gwn",
      "Hed",
      "Du",
      "Kev"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "mis Genver",
      "mis Hwevrer",
      "mis Meurth",
      "mis Ebrel",
      "mis Me",
      "mis Metheven",
      "mis Gortheren",
      "mis Est",
      "mis Gwynngala",
      "mis Hedra",
      "mis Du",
      "mis Kevardhu"
    ],
    name => "Cornish",
    native_language => "kernewek",
    native_name => "kernewek",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ kw-GB ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "kw-GB",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Lun",
      "Mth",
      "Mhr",
      "Yow",
      "Gwe",
      "Sad",
      "Sul"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "dy Lun",
      "dy Meurth",
      "dy Merher",
      "dy Yow",
      "dy Gwener",
      "dy Sadorn",
      "dy Sul"
    ],
    day_stand_alone_abbreviated => [
      "Lun",
      "Mth",
      "Mhr",
      "Yow",
      "Gwe",
      "Sad",
      "Sul"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "dy Lun",
      "dy Meurth",
      "dy Merher",
      "dy Yow",
      "dy Gwener",
      "dy Sadorn",
      "dy Sul"
    ],
    era_abbreviated => [
      "RC",
      "AD"
    ],
    era_narrow => [
      "RC",
      "AD"
    ],
    era_wide => [
      "RC",
      "AD"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Cornish",
    month_format_abbreviated => [
      "Gen",
      "Hwe",
      "Meu",
      "Ebr",
      "Me",
      "Met",
      "Gor",
      "Est",
      "Gwn",
      "Hed",
      "Du",
      "Kev"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "mis Genver",
      "mis Hwevrer",
      "mis Meurth",
      "mis Ebrel",
      "mis Me",
      "mis Metheven",
      "mis Gortheren",
      "mis Est",
      "mis Gwynngala",
      "mis Hedra",
      "mis Du",
      "mis Kevardhu"
    ],
    month_stand_alone_abbreviated => [
      "Gen",
      "Hwe",
      "Meu",
      "Ebr",
      "Me",
      "Met",
      "Gor",
      "Est",
      "Gwn",
      "Hed",
      "Du",
      "Kev"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "mis Genver",
      "mis Hwevrer",
      "mis Meurth",
      "mis Ebrel",
      "mis Me",
      "mis Metheven",
      "mis Gortheren",
      "mis Est",
      "mis Gwynngala",
      "mis Hedra",
      "mis Du",
      "mis Kevardhu"
    ],
    name => "Cornish United Kingdom",
    native_language => "kernewek",
    native_name => "kernewek Rywvaneth Unys",
    native_script => undef,
    native_territory => "Rywvaneth Unys",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "United Kingdom",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ky ]__
  {
    am_pm_abbreviated => [
      "\N{U+0442}\N{U+04a3}",
      "\N{U+0442}\N{U+043a}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y-'\N{U+0436}'.",
      GyMMM => "G y-'\N{U+0436}'. MMM",
      GyMMMEd => "G y-'\N{U+0436}'. d-MMM, E",
      GyMMMd => "G y-'\N{U+0436}'. d-MMM",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "dd-MM, E",
      MMM => "LLL",
      MMMEd => "d-MMM, E",
      MMMMd => "MMMM d",
      MMMd => "d-MMM",
      Md => "dd-MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y-'\N{U+0436}'. MMM",
      yMMMEd => "y-'\N{U+0436}'. d-MMM, E",
      yMMMM => "y MMMM",
      yMMMd => "y-'\N{U+0436}'. d-MMM",
      yMd => "y-MM-dd",
      yQQQ => "y-'\N{U+0436}'., QQQ",
      yQQQQ => "y-'\N{U+0436}'., QQQQ"
    },
    code => "ky",
    date_format_full => "EEEE, d-MMMM, y-'\N{U+0436}'.",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0434}\N{U+04af}\N{U+0439}.",
      "\N{U+0448}\N{U+0435}\N{U+0439}\N{U+0448}.",
      "\N{U+0448}\N{U+0430}\N{U+0440}\N{U+0448}.",
      "\N{U+0431}\N{U+0435}\N{U+0439}\N{U+0448}.",
      "\N{U+0436}\N{U+0443}\N{U+043c}\N{U+0430}",
      "\N{U+0438}\N{U+0448}\N{U+043c}.",
      "\N{U+0436}\N{U+0435}\N{U+043a}."
    ],
    day_format_narrow => [
      "\N{U+0414}",
      "\N{U+0428}",
      "\N{U+0428}",
      "\N{U+0411}",
      "\N{U+0416}",
      "\N{U+0418}",
      "\N{U+0416}"
    ],
    day_format_wide => [
      "\N{U+0434}\N{U+04af}\N{U+0439}\N{U+0448}\N{U+04e9}\N{U+043c}\N{U+0431}\N{U+04af}",
      "\N{U+0448}\N{U+0435}\N{U+0439}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}",
      "\N{U+0448}\N{U+0430}\N{U+0440}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}",
      "\N{U+0431}\N{U+0435}\N{U+0439}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}",
      "\N{U+0436}\N{U+0443}\N{U+043c}\N{U+0430}",
      "\N{U+0438}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}",
      "\N{U+0436}\N{U+0435}\N{U+043a}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0434}\N{U+04af}\N{U+0439}.",
      "\N{U+0448}\N{U+0435}\N{U+0439}\N{U+0448}.",
      "\N{U+0448}\N{U+0430}\N{U+0440}\N{U+0448}.",
      "\N{U+0431}\N{U+0435}\N{U+0439}\N{U+0448}.",
      "\N{U+0436}\N{U+0443}\N{U+043c}\N{U+0430}",
      "\N{U+0438}\N{U+0448}\N{U+043c}.",
      "\N{U+0436}\N{U+0435}\N{U+043a}."
    ],
    day_stand_alone_narrow => [
      "\N{U+0414}",
      "\N{U+0428}",
      "\N{U+0428}",
      "\N{U+0411}",
      "\N{U+0416}",
      "\N{U+0418}",
      "\N{U+0416}"
    ],
    day_stand_alone_wide => [
      "\N{U+0434}\N{U+04af}\N{U+0439}\N{U+0448}\N{U+04e9}\N{U+043c}\N{U+0431}\N{U+04af}",
      "\N{U+0448}\N{U+0435}\N{U+0439}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}",
      "\N{U+0448}\N{U+0430}\N{U+0440}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}",
      "\N{U+0431}\N{U+0435}\N{U+0439}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}",
      "\N{U+0436}\N{U+0443}\N{U+043c}\N{U+0430}",
      "\N{U+0438}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}",
      "\N{U+0436}\N{U+0435}\N{U+043a}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}"
    ],
    era_abbreviated => [
      "\N{U+0431}.\N{U+0437}.\N{U+0447}.",
      "\N{U+0431}.\N{U+0437}."
    ],
    era_narrow => [
      "\N{U+0431}.\N{U+0437}.\N{U+0447}.",
      "\N{U+0431}.\N{U+0437}."
    ],
    era_wide => [
      "\N{U+0431}\N{U+0438}\N{U+0437}\N{U+0434}\N{U+0438}\N{U+043d} \N{U+0437}\N{U+0430}\N{U+043c}\N{U+0430}\N{U+043d}\N{U+0433}\N{U+0430} \N{U+0447}\N{U+0435}\N{U+0439}\N{U+0438}\N{U+043d}",
      "\N{U+0431}\N{U+0438}\N{U+0437}\N{U+0434}\N{U+0438}\N{U+043d} \N{U+0437}\N{U+0430}\N{U+043c}\N{U+0430}\N{U+043d}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kyrgyz",
    month_format_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}.",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}.",
      "\N{U+0438}\N{U+044e}\N{U+043b}.",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_format_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_format_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+042f}\N{U+043d}\N{U+0432}",
      "\N{U+0424}\N{U+0435}\N{U+0432}",
      "\N{U+041c}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+043f}\N{U+0440}",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}",
      "\N{U+0418}\N{U+044e}\N{U+043b}",
      "\N{U+0410}\N{U+0432}\N{U+0433}",
      "\N{U+0421}\N{U+0435}\N{U+043d}",
      "\N{U+041e}\N{U+043a}\N{U+0442}",
      "\N{U+041d}\N{U+043e}\N{U+044f}",
      "\N{U+0414}\N{U+0435}\N{U+043a}"
    ],
    month_stand_alone_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_stand_alone_wide => [
      "\N{U+042f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0424}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+041c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0410}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0418}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0410}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0421}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+041e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+041d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0414}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    name => "Kyrgyz",
    native_language => "\N{U+043a}\N{U+044b}\N{U+0440}\N{U+0433}\N{U+044b}\N{U+0437}\N{U+0447}\N{U+0430}",
    native_name => "\N{U+043a}\N{U+044b}\N{U+0440}\N{U+0433}\N{U+044b}\N{U+0437}\N{U+0447}\N{U+0430}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0447}\N{U+0435}\N{U+0439}.",
      "2-\N{U+0447}\N{U+0435}\N{U+0439}.",
      "3-\N{U+0447}\N{U+0435}\N{U+0439}.",
      "4-\N{U+0447}\N{U+0435}\N{U+0439}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0447}\N{U+0435}\N{U+0439}\N{U+0440}\N{U+0435}\N{U+043a}",
      "2-\N{U+0447}\N{U+0435}\N{U+0439}\N{U+0440}\N{U+0435}\N{U+043a}",
      "3-\N{U+0447}\N{U+0435}\N{U+0439}\N{U+0440}\N{U+0435}\N{U+043a}",
      "4-\N{U+0447}\N{U+0435}\N{U+0439}\N{U+0440}\N{U+0435}\N{U+043a}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0447}.",
      "2-\N{U+0447}.",
      "3-\N{U+0447}.",
      "4-\N{U+0447}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0447}\N{U+0435}\N{U+0439}\N{U+0440}\N{U+0435}\N{U+043a}",
      "2-\N{U+0447}\N{U+0435}\N{U+0439}\N{U+0440}\N{U+0435}\N{U+043a}",
      "3-\N{U+0447}\N{U+0435}\N{U+0439}\N{U+0440}\N{U+0435}\N{U+043a}",
      "4-\N{U+0447}\N{U+0435}\N{U+0439}\N{U+0440}\N{U+0435}\N{U+043a}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ky-KG ]__
  {
    am_pm_abbreviated => [
      "\N{U+0442}\N{U+04a3}",
      "\N{U+0442}\N{U+043a}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y-'\N{U+0436}'.",
      GyMMM => "G y-'\N{U+0436}'. MMM",
      GyMMMEd => "G y-'\N{U+0436}'. d-MMM, E",
      GyMMMd => "G y-'\N{U+0436}'. d-MMM",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "dd-MM, E",
      MMM => "LLL",
      MMMEd => "d-MMM, E",
      MMMMd => "MMMM d",
      MMMd => "d-MMM",
      Md => "dd-MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y-'\N{U+0436}'. MMM",
      yMMMEd => "y-'\N{U+0436}'. d-MMM, E",
      yMMMM => "y MMMM",
      yMMMd => "y-'\N{U+0436}'. d-MMM",
      yMd => "y-MM-dd",
      yQQQ => "y-'\N{U+0436}'., QQQ",
      yQQQQ => "y-'\N{U+0436}'., QQQQ"
    },
    code => "ky-KG",
    date_format_full => "EEEE, d-MMMM, y-'\N{U+0436}'.",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0434}\N{U+04af}\N{U+0439}.",
      "\N{U+0448}\N{U+0435}\N{U+0439}\N{U+0448}.",
      "\N{U+0448}\N{U+0430}\N{U+0440}\N{U+0448}.",
      "\N{U+0431}\N{U+0435}\N{U+0439}\N{U+0448}.",
      "\N{U+0436}\N{U+0443}\N{U+043c}\N{U+0430}",
      "\N{U+0438}\N{U+0448}\N{U+043c}.",
      "\N{U+0436}\N{U+0435}\N{U+043a}."
    ],
    day_format_narrow => [
      "\N{U+0414}",
      "\N{U+0428}",
      "\N{U+0428}",
      "\N{U+0411}",
      "\N{U+0416}",
      "\N{U+0418}",
      "\N{U+0416}"
    ],
    day_format_wide => [
      "\N{U+0434}\N{U+04af}\N{U+0439}\N{U+0448}\N{U+04e9}\N{U+043c}\N{U+0431}\N{U+04af}",
      "\N{U+0448}\N{U+0435}\N{U+0439}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}",
      "\N{U+0448}\N{U+0430}\N{U+0440}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}",
      "\N{U+0431}\N{U+0435}\N{U+0439}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}",
      "\N{U+0436}\N{U+0443}\N{U+043c}\N{U+0430}",
      "\N{U+0438}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}",
      "\N{U+0436}\N{U+0435}\N{U+043a}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0434}\N{U+04af}\N{U+0439}.",
      "\N{U+0448}\N{U+0435}\N{U+0439}\N{U+0448}.",
      "\N{U+0448}\N{U+0430}\N{U+0440}\N{U+0448}.",
      "\N{U+0431}\N{U+0435}\N{U+0439}\N{U+0448}.",
      "\N{U+0436}\N{U+0443}\N{U+043c}\N{U+0430}",
      "\N{U+0438}\N{U+0448}\N{U+043c}.",
      "\N{U+0436}\N{U+0435}\N{U+043a}."
    ],
    day_stand_alone_narrow => [
      "\N{U+0414}",
      "\N{U+0428}",
      "\N{U+0428}",
      "\N{U+0411}",
      "\N{U+0416}",
      "\N{U+0418}",
      "\N{U+0416}"
    ],
    day_stand_alone_wide => [
      "\N{U+0434}\N{U+04af}\N{U+0439}\N{U+0448}\N{U+04e9}\N{U+043c}\N{U+0431}\N{U+04af}",
      "\N{U+0448}\N{U+0435}\N{U+0439}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}",
      "\N{U+0448}\N{U+0430}\N{U+0440}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}",
      "\N{U+0431}\N{U+0435}\N{U+0439}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}",
      "\N{U+0436}\N{U+0443}\N{U+043c}\N{U+0430}",
      "\N{U+0438}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}",
      "\N{U+0436}\N{U+0435}\N{U+043a}\N{U+0448}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0438}"
    ],
    era_abbreviated => [
      "\N{U+0431}.\N{U+0437}.\N{U+0447}.",
      "\N{U+0431}.\N{U+0437}."
    ],
    era_narrow => [
      "\N{U+0431}.\N{U+0437}.\N{U+0447}.",
      "\N{U+0431}.\N{U+0437}."
    ],
    era_wide => [
      "\N{U+0431}\N{U+0438}\N{U+0437}\N{U+0434}\N{U+0438}\N{U+043d} \N{U+0437}\N{U+0430}\N{U+043c}\N{U+0430}\N{U+043d}\N{U+0433}\N{U+0430} \N{U+0447}\N{U+0435}\N{U+0439}\N{U+0438}\N{U+043d}",
      "\N{U+0431}\N{U+0438}\N{U+0437}\N{U+0434}\N{U+0438}\N{U+043d} \N{U+0437}\N{U+0430}\N{U+043c}\N{U+0430}\N{U+043d}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a, %e-%b %Y \N{U+0436}, %H:%M:%S %Z",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d %b %Y %T",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Kyrgyz",
    month_format_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}.",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}.",
      "\N{U+0438}\N{U+044e}\N{U+043b}.",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_format_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_format_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+042f}\N{U+043d}\N{U+0432}",
      "\N{U+0424}\N{U+0435}\N{U+0432}",
      "\N{U+041c}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+043f}\N{U+0440}",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}",
      "\N{U+0418}\N{U+044e}\N{U+043b}",
      "\N{U+0410}\N{U+0432}\N{U+0433}",
      "\N{U+0421}\N{U+0435}\N{U+043d}",
      "\N{U+041e}\N{U+043a}\N{U+0442}",
      "\N{U+041d}\N{U+043e}\N{U+044f}",
      "\N{U+0414}\N{U+0435}\N{U+043a}"
    ],
    month_stand_alone_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_stand_alone_wide => [
      "\N{U+042f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0424}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+041c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0410}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0418}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0410}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0421}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+041e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+041d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0414}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    name => "Kyrgyz Kyrgyzstan",
    native_language => "\N{U+043a}\N{U+044b}\N{U+0440}\N{U+0433}\N{U+044b}\N{U+0437}\N{U+0447}\N{U+0430}",
    native_name => "\N{U+043a}\N{U+044b}\N{U+0440}\N{U+0433}\N{U+044b}\N{U+0437}\N{U+0447}\N{U+0430} \N{U+041a}\N{U+044b}\N{U+0440}\N{U+0433}\N{U+044b}\N{U+0437}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+043d}",
    native_script => undef,
    native_territory => "\N{U+041a}\N{U+044b}\N{U+0440}\N{U+0433}\N{U+044b}\N{U+0437}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+043d}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0447}\N{U+0435}\N{U+0439}.",
      "2-\N{U+0447}\N{U+0435}\N{U+0439}.",
      "3-\N{U+0447}\N{U+0435}\N{U+0439}.",
      "4-\N{U+0447}\N{U+0435}\N{U+0439}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0447}\N{U+0435}\N{U+0439}\N{U+0440}\N{U+0435}\N{U+043a}",
      "2-\N{U+0447}\N{U+0435}\N{U+0439}\N{U+0440}\N{U+0435}\N{U+043a}",
      "3-\N{U+0447}\N{U+0435}\N{U+0439}\N{U+0440}\N{U+0435}\N{U+043a}",
      "4-\N{U+0447}\N{U+0435}\N{U+0439}\N{U+0440}\N{U+0435}\N{U+043a}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0447}.",
      "2-\N{U+0447}.",
      "3-\N{U+0447}.",
      "4-\N{U+0447}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0447}\N{U+0435}\N{U+0439}\N{U+0440}\N{U+0435}\N{U+043a}",
      "2-\N{U+0447}\N{U+0435}\N{U+0439}\N{U+0440}\N{U+0435}\N{U+043a}",
      "3-\N{U+0447}\N{U+0435}\N{U+0439}\N{U+0440}\N{U+0435}\N{U+043a}",
      "4-\N{U+0447}\N{U+0435}\N{U+0439}\N{U+0440}\N{U+0435}\N{U+043a}"
    ],
    script => undef,
    territory => "Kyrgyzstan",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ lag ]__
  {
    am_pm_abbreviated => [
      "TOO",
      "MUU"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "lag",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "T\N{U+00e1}atu",
      "\N{U+00cd}ne",
      "T\N{U+00e1}ano",
      "Alh",
      "Ijm",
      "M\N{U+00f3}osi",
      "P\N{U+00ed}ili"
    ],
    day_format_narrow => [
      "T",
      "E",
      "O",
      "A",
      "I",
      "M",
      "P"
    ],
    day_format_wide => [
      "Jumat\N{U+00e1}tu",
      "Juma\N{U+00ed}ne",
      "Jumat\N{U+00e1}ano",
      "Alam\N{U+00ed}isi",
      "Ijum\N{U+00e1}a",
      "Jumam\N{U+00f3}osi",
      "Jumap\N{U+00ed}iri"
    ],
    day_stand_alone_abbreviated => [
      "T\N{U+00e1}atu",
      "\N{U+00cd}ne",
      "T\N{U+00e1}ano",
      "Alh",
      "Ijm",
      "M\N{U+00f3}osi",
      "P\N{U+00ed}ili"
    ],
    day_stand_alone_narrow => [
      "T",
      "E",
      "O",
      "A",
      "I",
      "M",
      "P"
    ],
    day_stand_alone_wide => [
      "Jumat\N{U+00e1}tu",
      "Juma\N{U+00ed}ne",
      "Jumat\N{U+00e1}ano",
      "Alam\N{U+00ed}isi",
      "Ijum\N{U+00e1}a",
      "Jumam\N{U+00f3}osi",
      "Jumap\N{U+00ed}iri"
    ],
    era_abbreviated => [
      "KSA",
      "KA"
    ],
    era_narrow => [
      "KSA",
      "KA"
    ],
    era_wide => [
      "K\N{U+0268}r\N{U+0268}sit\N{U+0289} s\N{U+0268} anavyaal",
      "K\N{U+0268}r\N{U+0268}sit\N{U+0289} akavyaalwe"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Langi",
    month_format_abbreviated => [
      "F\N{U+00fa}ngat\N{U+0268}",
      "Naan\N{U+0268}",
      "Keenda",
      "Ik\N{U+00fa}mi",
      "Inyambala",
      "Idwaata",
      "M\N{U+0289}\N{U+0289}nch\N{U+0268}",
      "V\N{U+0268}\N{U+0268}r\N{U+0268}",
      "Saat\N{U+0289}",
      "Inyi",
      "Saano",
      "Sasat\N{U+0289}"
    ],
    month_format_narrow => [
      "F",
      "N",
      "K",
      "I",
      "I",
      "I",
      "M",
      "V",
      "S",
      "I",
      "S",
      "S"
    ],
    month_format_wide => [
      "K\N{U+0289}f\N{U+00fa}ngat\N{U+0268}",
      "K\N{U+0289}naan\N{U+0268}",
      "K\N{U+0289}keenda",
      "Kwiikumi",
      "Kwiinyamb\N{U+00e1}la",
      "Kwiidwaata",
      "K\N{U+0289}m\N{U+0289}\N{U+0289}nch\N{U+0268}",
      "K\N{U+0289}v\N{U+0268}\N{U+0268}r\N{U+0268}",
      "K\N{U+0289}saat\N{U+0289}",
      "Kwiinyi",
      "K\N{U+0289}saano",
      "K\N{U+0289}sasat\N{U+0289}"
    ],
    month_stand_alone_abbreviated => [
      "F\N{U+00fa}ngat\N{U+0268}",
      "Naan\N{U+0268}",
      "Keenda",
      "Ik\N{U+00fa}mi",
      "Inyambala",
      "Idwaata",
      "M\N{U+0289}\N{U+0289}nch\N{U+0268}",
      "V\N{U+0268}\N{U+0268}r\N{U+0268}",
      "Saat\N{U+0289}",
      "Inyi",
      "Saano",
      "Sasat\N{U+0289}"
    ],
    month_stand_alone_narrow => [
      "F",
      "N",
      "K",
      "I",
      "I",
      "I",
      "M",
      "V",
      "S",
      "I",
      "S",
      "S"
    ],
    month_stand_alone_wide => [
      "K\N{U+0289}f\N{U+00fa}ngat\N{U+0268}",
      "K\N{U+0289}naan\N{U+0268}",
      "K\N{U+0289}keenda",
      "Kwiikumi",
      "Kwiinyamb\N{U+00e1}la",
      "Kwiidwaata",
      "K\N{U+0289}m\N{U+0289}\N{U+0289}nch\N{U+0268}",
      "K\N{U+0289}v\N{U+0268}\N{U+0268}r\N{U+0268}",
      "K\N{U+0289}saat\N{U+0289}",
      "Kwiinyi",
      "K\N{U+0289}saano",
      "K\N{U+0289}sasat\N{U+0289}"
    ],
    name => "Langi",
    native_language => "K\N{U+0268}laangi",
    native_name => "K\N{U+0268}laangi",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Ncho 1",
      "Ncho 2",
      "Ncho 3",
      "Ncho 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Ncholo ya 1",
      "Ncholo ya 2",
      "Ncholo ya 3",
      "Ncholo ya 4"
    ],
    quarter_stand_alone_abbreviated => [
      "Ncho 1",
      "Ncho 2",
      "Ncho 3",
      "Ncho 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Ncholo ya 1",
      "Ncholo ya 2",
      "Ncholo ya 3",
      "Ncholo ya 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ lag-TZ ]__
  {
    am_pm_abbreviated => [
      "TOO",
      "MUU"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "lag-TZ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "T\N{U+00e1}atu",
      "\N{U+00cd}ne",
      "T\N{U+00e1}ano",
      "Alh",
      "Ijm",
      "M\N{U+00f3}osi",
      "P\N{U+00ed}ili"
    ],
    day_format_narrow => [
      "T",
      "E",
      "O",
      "A",
      "I",
      "M",
      "P"
    ],
    day_format_wide => [
      "Jumat\N{U+00e1}tu",
      "Juma\N{U+00ed}ne",
      "Jumat\N{U+00e1}ano",
      "Alam\N{U+00ed}isi",
      "Ijum\N{U+00e1}a",
      "Jumam\N{U+00f3}osi",
      "Jumap\N{U+00ed}iri"
    ],
    day_stand_alone_abbreviated => [
      "T\N{U+00e1}atu",
      "\N{U+00cd}ne",
      "T\N{U+00e1}ano",
      "Alh",
      "Ijm",
      "M\N{U+00f3}osi",
      "P\N{U+00ed}ili"
    ],
    day_stand_alone_narrow => [
      "T",
      "E",
      "O",
      "A",
      "I",
      "M",
      "P"
    ],
    day_stand_alone_wide => [
      "Jumat\N{U+00e1}tu",
      "Juma\N{U+00ed}ne",
      "Jumat\N{U+00e1}ano",
      "Alam\N{U+00ed}isi",
      "Ijum\N{U+00e1}a",
      "Jumam\N{U+00f3}osi",
      "Jumap\N{U+00ed}iri"
    ],
    era_abbreviated => [
      "KSA",
      "KA"
    ],
    era_narrow => [
      "KSA",
      "KA"
    ],
    era_wide => [
      "K\N{U+0268}r\N{U+0268}sit\N{U+0289} s\N{U+0268} anavyaal",
      "K\N{U+0268}r\N{U+0268}sit\N{U+0289} akavyaalwe"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Langi",
    month_format_abbreviated => [
      "F\N{U+00fa}ngat\N{U+0268}",
      "Naan\N{U+0268}",
      "Keenda",
      "Ik\N{U+00fa}mi",
      "Inyambala",
      "Idwaata",
      "M\N{U+0289}\N{U+0289}nch\N{U+0268}",
      "V\N{U+0268}\N{U+0268}r\N{U+0268}",
      "Saat\N{U+0289}",
      "Inyi",
      "Saano",
      "Sasat\N{U+0289}"
    ],
    month_format_narrow => [
      "F",
      "N",
      "K",
      "I",
      "I",
      "I",
      "M",
      "V",
      "S",
      "I",
      "S",
      "S"
    ],
    month_format_wide => [
      "K\N{U+0289}f\N{U+00fa}ngat\N{U+0268}",
      "K\N{U+0289}naan\N{U+0268}",
      "K\N{U+0289}keenda",
      "Kwiikumi",
      "Kwiinyamb\N{U+00e1}la",
      "Kwiidwaata",
      "K\N{U+0289}m\N{U+0289}\N{U+0289}nch\N{U+0268}",
      "K\N{U+0289}v\N{U+0268}\N{U+0268}r\N{U+0268}",
      "K\N{U+0289}saat\N{U+0289}",
      "Kwiinyi",
      "K\N{U+0289}saano",
      "K\N{U+0289}sasat\N{U+0289}"
    ],
    month_stand_alone_abbreviated => [
      "F\N{U+00fa}ngat\N{U+0268}",
      "Naan\N{U+0268}",
      "Keenda",
      "Ik\N{U+00fa}mi",
      "Inyambala",
      "Idwaata",
      "M\N{U+0289}\N{U+0289}nch\N{U+0268}",
      "V\N{U+0268}\N{U+0268}r\N{U+0268}",
      "Saat\N{U+0289}",
      "Inyi",
      "Saano",
      "Sasat\N{U+0289}"
    ],
    month_stand_alone_narrow => [
      "F",
      "N",
      "K",
      "I",
      "I",
      "I",
      "M",
      "V",
      "S",
      "I",
      "S",
      "S"
    ],
    month_stand_alone_wide => [
      "K\N{U+0289}f\N{U+00fa}ngat\N{U+0268}",
      "K\N{U+0289}naan\N{U+0268}",
      "K\N{U+0289}keenda",
      "Kwiikumi",
      "Kwiinyamb\N{U+00e1}la",
      "Kwiidwaata",
      "K\N{U+0289}m\N{U+0289}\N{U+0289}nch\N{U+0268}",
      "K\N{U+0289}v\N{U+0268}\N{U+0268}r\N{U+0268}",
      "K\N{U+0289}saat\N{U+0289}",
      "Kwiinyi",
      "K\N{U+0289}saano",
      "K\N{U+0289}sasat\N{U+0289}"
    ],
    name => "Langi Tanzania",
    native_language => "K\N{U+0268}laangi",
    native_name => "K\N{U+0268}laangi Taansan\N{U+00ed}a",
    native_script => undef,
    native_territory => "Taansan\N{U+00ed}a",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Ncho 1",
      "Ncho 2",
      "Ncho 3",
      "Ncho 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Ncholo ya 1",
      "Ncholo ya 2",
      "Ncholo ya 3",
      "Ncholo ya 4"
    ],
    quarter_stand_alone_abbreviated => [
      "Ncho 1",
      "Ncho 2",
      "Ncho 3",
      "Ncho 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Ncholo ya 1",
      "Ncholo ya 2",
      "Ncholo ya 3",
      "Ncholo ya 4"
    ],
    script => undef,
    territory => "Tanzania",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ lb ]__
  {
    am_pm_abbreviated => [
      "moies",
      "nom\N{U+00eb}ttes"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH 'Auer'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMd => "MMMM d",
      MMMd => "d. MMM",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "lb",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "M\N{U+00e9}i.",
      "D\N{U+00eb}n.",
      "M\N{U+00eb}t.",
      "Don.",
      "Fre.",
      "Sam.",
      "Son."
    ],
    day_format_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "M\N{U+00e9}indeg",
      "D\N{U+00eb}nschdeg",
      "M\N{U+00eb}ttwoch",
      "Donneschdeg",
      "Freideg",
      "Samschdeg",
      "Sonndeg"
    ],
    day_stand_alone_abbreviated => [
      "M\N{U+00e9}i",
      "D\N{U+00eb}n",
      "M\N{U+00eb}t",
      "Don",
      "Fre",
      "Sam",
      "Son"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "M\N{U+00e9}indeg",
      "D\N{U+00eb}nschdeg",
      "M\N{U+00eb}ttwoch",
      "Donneschdeg",
      "Freideg",
      "Samschdeg",
      "Sonndeg"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr."
    ],
    era_narrow => [
      "v. Chr.",
      "n. Chr."
    ],
    era_wide => [
      "v. Chr.",
      "n. Chr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Luxembourgish",
    month_format_abbreviated => [
      "Jan.",
      "Feb.",
      "M\N{U+00e4}e.",
      "Abr.",
      "Mee",
      "Juni",
      "Juli",
      "Aug.",
      "Sep.",
      "Okt.",
      "Nov.",
      "Dez."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}erz",
      "Abr\N{U+00eb}ll",
      "Mee",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "M\N{U+00e4}e",
      "Abr",
      "Mee",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}erz",
      "Abr\N{U+00eb}ll",
      "Mee",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    name => "Luxembourgish",
    native_language => "L\N{U+00eb}tzebuergesch",
    native_name => "L\N{U+00eb}tzebuergesch",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ lb-LU ]__
  {
    am_pm_abbreviated => [
      "moies",
      "nom\N{U+00eb}ttes"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH 'Auer'",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMd => "MMMM d",
      MMMd => "d. MMM",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "lb-LU",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "M\N{U+00e9}i.",
      "D\N{U+00eb}n.",
      "M\N{U+00eb}t.",
      "Don.",
      "Fre.",
      "Sam.",
      "Son."
    ],
    day_format_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "M\N{U+00e9}indeg",
      "D\N{U+00eb}nschdeg",
      "M\N{U+00eb}ttwoch",
      "Donneschdeg",
      "Freideg",
      "Samschdeg",
      "Sonndeg"
    ],
    day_stand_alone_abbreviated => [
      "M\N{U+00e9}i",
      "D\N{U+00eb}n",
      "M\N{U+00eb}t",
      "Don",
      "Fre",
      "Sam",
      "Son"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "M",
      "D",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "M\N{U+00e9}indeg",
      "D\N{U+00eb}nschdeg",
      "M\N{U+00eb}ttwoch",
      "Donneschdeg",
      "Freideg",
      "Samschdeg",
      "Sonndeg"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr."
    ],
    era_narrow => [
      "v. Chr.",
      "n. Chr."
    ],
    era_wide => [
      "v. Chr.",
      "n. Chr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %-d. %b %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d. %b %Y %T",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Luxembourgish",
    month_format_abbreviated => [
      "Jan.",
      "Feb.",
      "M\N{U+00e4}e.",
      "Abr.",
      "Mee",
      "Juni",
      "Juli",
      "Aug.",
      "Sep.",
      "Okt.",
      "Nov.",
      "Dez."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}erz",
      "Abr\N{U+00eb}ll",
      "Mee",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "M\N{U+00e4}e",
      "Abr",
      "Mee",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Okt",
      "Nov",
      "Dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januar",
      "Februar",
      "M\N{U+00e4}erz",
      "Abr\N{U+00eb}ll",
      "Mee",
      "Juni",
      "Juli",
      "August",
      "September",
      "Oktober",
      "November",
      "Dezember"
    ],
    name => "Luxembourgish Luxembourg",
    native_language => "L\N{U+00eb}tzebuergesch",
    native_name => "L\N{U+00eb}tzebuergesch L\N{U+00eb}tzebuerg",
    native_script => undef,
    native_territory => "L\N{U+00eb}tzebuerg",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. Quartal",
      "2. Quartal",
      "3. Quartal",
      "4. Quartal"
    ],
    script => undef,
    territory => "Luxembourg",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ lg ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "lg",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Bal",
      "Lw2",
      "Lw3",
      "Lw4",
      "Lw5",
      "Lw6",
      "Sab"
    ],
    day_format_narrow => [
      "B",
      "L",
      "L",
      "L",
      "L",
      "L",
      "S"
    ],
    day_format_wide => [
      "Balaza",
      "Lwakubiri",
      "Lwakusatu",
      "Lwakuna",
      "Lwakutaano",
      "Lwamukaaga",
      "Sabbiiti"
    ],
    day_stand_alone_abbreviated => [
      "Bal",
      "Lw2",
      "Lw3",
      "Lw4",
      "Lw5",
      "Lw6",
      "Sab"
    ],
    day_stand_alone_narrow => [
      "B",
      "L",
      "L",
      "L",
      "L",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "Balaza",
      "Lwakubiri",
      "Lwakusatu",
      "Lwakuna",
      "Lwakutaano",
      "Lwamukaaga",
      "Sabbiiti"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Kulisito nga tannaza",
      "Bukya Kulisito Azaal"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Ganda",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apu",
      "Maa",
      "Juu",
      "Jul",
      "Agu",
      "Seb",
      "Oki",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Janwaliyo",
      "Febwaliyo",
      "Marisi",
      "Apuli",
      "Maayi",
      "Juuni",
      "Julaayi",
      "Agusito",
      "Sebuttemba",
      "Okitobba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apu",
      "Maa",
      "Juu",
      "Jul",
      "Agu",
      "Seb",
      "Oki",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janwaliyo",
      "Febwaliyo",
      "Marisi",
      "Apuli",
      "Maayi",
      "Juuni",
      "Julaayi",
      "Agusito",
      "Sebuttemba",
      "Okitobba",
      "Novemba",
      "Desemba"
    ],
    name => "Ganda",
    native_language => "Luganda",
    native_name => "Luganda",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Kya1",
      "Kya2",
      "Kya3",
      "Kya4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Kyakuna 1",
      "Kyakuna 2",
      "Kyakuna 3",
      "Kyakuna 4"
    ],
    quarter_stand_alone_abbreviated => [
      "Kya1",
      "Kya2",
      "Kya3",
      "Kya4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Kyakuna 1",
      "Kyakuna 2",
      "Kyakuna 3",
      "Kyakuna 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ lg-UG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "lg-UG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Bal",
      "Lw2",
      "Lw3",
      "Lw4",
      "Lw5",
      "Lw6",
      "Sab"
    ],
    day_format_narrow => [
      "B",
      "L",
      "L",
      "L",
      "L",
      "L",
      "S"
    ],
    day_format_wide => [
      "Balaza",
      "Lwakubiri",
      "Lwakusatu",
      "Lwakuna",
      "Lwakutaano",
      "Lwamukaaga",
      "Sabbiiti"
    ],
    day_stand_alone_abbreviated => [
      "Bal",
      "Lw2",
      "Lw3",
      "Lw4",
      "Lw5",
      "Lw6",
      "Sab"
    ],
    day_stand_alone_narrow => [
      "B",
      "L",
      "L",
      "L",
      "L",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "Balaza",
      "Lwakubiri",
      "Lwakusatu",
      "Lwakuna",
      "Lwakutaano",
      "Lwamukaaga",
      "Sabbiiti"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Kulisito nga tannaza",
      "Bukya Kulisito Azaal"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Ganda",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apu",
      "Maa",
      "Juu",
      "Jul",
      "Agu",
      "Seb",
      "Oki",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Janwaliyo",
      "Febwaliyo",
      "Marisi",
      "Apuli",
      "Maayi",
      "Juuni",
      "Julaayi",
      "Agusito",
      "Sebuttemba",
      "Okitobba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apu",
      "Maa",
      "Juu",
      "Jul",
      "Agu",
      "Seb",
      "Oki",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janwaliyo",
      "Febwaliyo",
      "Marisi",
      "Apuli",
      "Maayi",
      "Juuni",
      "Julaayi",
      "Agusito",
      "Sebuttemba",
      "Okitobba",
      "Novemba",
      "Desemba"
    ],
    name => "Ganda Uganda",
    native_language => "Luganda",
    native_name => "Luganda Yuganda",
    native_script => undef,
    native_territory => "Yuganda",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Kya1",
      "Kya2",
      "Kya3",
      "Kya4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Kyakuna 1",
      "Kyakuna 2",
      "Kyakuna 3",
      "Kyakuna 4"
    ],
    quarter_stand_alone_abbreviated => [
      "Kya1",
      "Kya2",
      "Kya3",
      "Kya4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Kyakuna 1",
      "Kyakuna 2",
      "Kyakuna 3",
      "Kyakuna 4"
    ],
    script => undef,
    territory => "Uganda",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ lkt ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "lkt",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "A\N{U+014b}p\N{U+00e9}tuwa\N{U+014b}\N{U+017e}i",
      "A\N{U+014b}p\N{U+00e9}tunu\N{U+014b}pa",
      "A\N{U+014b}p\N{U+00e9}tuyamni",
      "A\N{U+014b}p\N{U+00e9}tutopa",
      "A\N{U+014b}p\N{U+00e9}tuzapta\N{U+014b}",
      "Ow\N{U+00e1}\N{U+014b}gyu\N{U+017e}a\N{U+017e}api",
      "A\N{U+014b}p\N{U+00e9}tuwak\N{U+021f}a\N{U+014b}"
    ],
    day_format_narrow => [
      "W",
      "N",
      "Y",
      "T",
      "Z",
      "O",
      "A"
    ],
    day_format_wide => [
      "A\N{U+014b}p\N{U+00e9}tuwa\N{U+014b}\N{U+017e}i",
      "A\N{U+014b}p\N{U+00e9}tunu\N{U+014b}pa",
      "A\N{U+014b}p\N{U+00e9}tuyamni",
      "A\N{U+014b}p\N{U+00e9}tutopa",
      "A\N{U+014b}p\N{U+00e9}tuzapta\N{U+014b}",
      "Ow\N{U+00e1}\N{U+014b}gyu\N{U+017e}a\N{U+017e}api",
      "A\N{U+014b}p\N{U+00e9}tuwak\N{U+021f}a\N{U+014b}"
    ],
    day_stand_alone_abbreviated => [
      "A\N{U+014b}p\N{U+00e9}tuwa\N{U+014b}\N{U+017e}i",
      "A\N{U+014b}p\N{U+00e9}tunu\N{U+014b}pa",
      "A\N{U+014b}p\N{U+00e9}tuyamni",
      "A\N{U+014b}p\N{U+00e9}tutopa",
      "A\N{U+014b}p\N{U+00e9}tuzapta\N{U+014b}",
      "Ow\N{U+00e1}\N{U+014b}gyu\N{U+017e}a\N{U+017e}api",
      "A\N{U+014b}p\N{U+00e9}tuwak\N{U+021f}a\N{U+014b}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "A\N{U+014b}p\N{U+00e9}tuwa\N{U+014b}\N{U+017e}i",
      "A\N{U+014b}p\N{U+00e9}tunu\N{U+014b}pa",
      "A\N{U+014b}p\N{U+00e9}tuyamni",
      "A\N{U+014b}p\N{U+00e9}tutopa",
      "A\N{U+014b}p\N{U+00e9}tuzapta\N{U+014b}",
      "Ow\N{U+00e1}\N{U+014b}gyu\N{U+017e}a\N{U+017e}api",
      "A\N{U+014b}p\N{U+00e9}tuwak\N{U+021f}a\N{U+014b}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Lakota",
    month_format_abbreviated => [
      "Wi\N{U+00f3}the\N{U+021f}ika W\N{U+00ed}",
      "Thiy\N{U+00f3}\N{U+021f}eyu\N{U+014b}ka W\N{U+00ed}",
      "I\N{U+0161}t\N{U+00e1}wi\N{U+010d}hayaza\N{U+014b} W\N{U+00ed}",
      "P\N{U+021f}e\N{U+017e}\N{U+00ed}t\N{U+021f}o W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pet\N{U+021f}o W\N{U+00ed}",
      "W\N{U+00ed}pazuk\N{U+021f}a-wa\N{U+0161}t\N{U+00e9} W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}p\N{U+021f}\N{U+00e1}sapa W\N{U+00ed}",
      "Was\N{U+00fa}t\N{U+021f}u\N{U+014b} W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pe\N{U+01e7}i W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pe-kasn\N{U+00e1} W\N{U+00ed}",
      "Wan\N{U+00ed}yetu W\N{U+00ed}",
      "T\N{U+021f}ah\N{U+00e9}kap\N{U+0161}u\N{U+014b} W\N{U+00ed}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Wi\N{U+00f3}the\N{U+021f}ika W\N{U+00ed}",
      "Thiy\N{U+00f3}\N{U+021f}eyu\N{U+014b}ka W\N{U+00ed}",
      "I\N{U+0161}t\N{U+00e1}wi\N{U+010d}hayaza\N{U+014b} W\N{U+00ed}",
      "P\N{U+021f}e\N{U+017e}\N{U+00ed}t\N{U+021f}o W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pet\N{U+021f}o W\N{U+00ed}",
      "W\N{U+00ed}pazuk\N{U+021f}a-wa\N{U+0161}t\N{U+00e9} W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}p\N{U+021f}\N{U+00e1}sapa W\N{U+00ed}",
      "Was\N{U+00fa}t\N{U+021f}u\N{U+014b} W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pe\N{U+01e7}i W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pe-kasn\N{U+00e1} W\N{U+00ed}",
      "Wan\N{U+00ed}yetu W\N{U+00ed}",
      "T\N{U+021f}ah\N{U+00e9}kap\N{U+0161}u\N{U+014b} W\N{U+00ed}"
    ],
    month_stand_alone_abbreviated => [
      "Wi\N{U+00f3}the\N{U+021f}ika W\N{U+00ed}",
      "Thiy\N{U+00f3}\N{U+021f}eyu\N{U+014b}ka W\N{U+00ed}",
      "I\N{U+0161}t\N{U+00e1}wi\N{U+010d}hayaza\N{U+014b} W\N{U+00ed}",
      "P\N{U+021f}e\N{U+017e}\N{U+00ed}t\N{U+021f}o W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pet\N{U+021f}o W\N{U+00ed}",
      "W\N{U+00ed}pazuk\N{U+021f}a-wa\N{U+0161}t\N{U+00e9} W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}p\N{U+021f}\N{U+00e1}sapa W\N{U+00ed}",
      "Was\N{U+00fa}t\N{U+021f}u\N{U+014b} W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pe\N{U+01e7}i W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pe-kasn\N{U+00e1} W\N{U+00ed}",
      "Wan\N{U+00ed}yetu W\N{U+00ed}",
      "T\N{U+021f}ah\N{U+00e9}kap\N{U+0161}u\N{U+014b} W\N{U+00ed}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Wi\N{U+00f3}the\N{U+021f}ika W\N{U+00ed}",
      "Thiy\N{U+00f3}\N{U+021f}eyu\N{U+014b}ka W\N{U+00ed}",
      "I\N{U+0161}t\N{U+00e1}wi\N{U+010d}hayaza\N{U+014b} W\N{U+00ed}",
      "P\N{U+021f}e\N{U+017e}\N{U+00ed}t\N{U+021f}o W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pet\N{U+021f}o W\N{U+00ed}",
      "W\N{U+00ed}pazuk\N{U+021f}a-wa\N{U+0161}t\N{U+00e9} W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}p\N{U+021f}\N{U+00e1}sapa W\N{U+00ed}",
      "Was\N{U+00fa}t\N{U+021f}u\N{U+014b} W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pe\N{U+01e7}i W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pe-kasn\N{U+00e1} W\N{U+00ed}",
      "Wan\N{U+00ed}yetu W\N{U+00ed}",
      "T\N{U+021f}ah\N{U+00e9}kap\N{U+0161}u\N{U+014b} W\N{U+00ed}"
    ],
    name => "Lakota",
    native_language => "Lak\N{U+021f}\N{U+00f3}l\N{U+02bc}iyapi",
    native_name => "Lak\N{U+021f}\N{U+00f3}l\N{U+02bc}iyapi",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ lkt-US ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "lkt-US",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "A\N{U+014b}p\N{U+00e9}tuwa\N{U+014b}\N{U+017e}i",
      "A\N{U+014b}p\N{U+00e9}tunu\N{U+014b}pa",
      "A\N{U+014b}p\N{U+00e9}tuyamni",
      "A\N{U+014b}p\N{U+00e9}tutopa",
      "A\N{U+014b}p\N{U+00e9}tuzapta\N{U+014b}",
      "Ow\N{U+00e1}\N{U+014b}gyu\N{U+017e}a\N{U+017e}api",
      "A\N{U+014b}p\N{U+00e9}tuwak\N{U+021f}a\N{U+014b}"
    ],
    day_format_narrow => [
      "W",
      "N",
      "Y",
      "T",
      "Z",
      "O",
      "A"
    ],
    day_format_wide => [
      "A\N{U+014b}p\N{U+00e9}tuwa\N{U+014b}\N{U+017e}i",
      "A\N{U+014b}p\N{U+00e9}tunu\N{U+014b}pa",
      "A\N{U+014b}p\N{U+00e9}tuyamni",
      "A\N{U+014b}p\N{U+00e9}tutopa",
      "A\N{U+014b}p\N{U+00e9}tuzapta\N{U+014b}",
      "Ow\N{U+00e1}\N{U+014b}gyu\N{U+017e}a\N{U+017e}api",
      "A\N{U+014b}p\N{U+00e9}tuwak\N{U+021f}a\N{U+014b}"
    ],
    day_stand_alone_abbreviated => [
      "A\N{U+014b}p\N{U+00e9}tuwa\N{U+014b}\N{U+017e}i",
      "A\N{U+014b}p\N{U+00e9}tunu\N{U+014b}pa",
      "A\N{U+014b}p\N{U+00e9}tuyamni",
      "A\N{U+014b}p\N{U+00e9}tutopa",
      "A\N{U+014b}p\N{U+00e9}tuzapta\N{U+014b}",
      "Ow\N{U+00e1}\N{U+014b}gyu\N{U+017e}a\N{U+017e}api",
      "A\N{U+014b}p\N{U+00e9}tuwak\N{U+021f}a\N{U+014b}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "A\N{U+014b}p\N{U+00e9}tuwa\N{U+014b}\N{U+017e}i",
      "A\N{U+014b}p\N{U+00e9}tunu\N{U+014b}pa",
      "A\N{U+014b}p\N{U+00e9}tuyamni",
      "A\N{U+014b}p\N{U+00e9}tutopa",
      "A\N{U+014b}p\N{U+00e9}tuzapta\N{U+014b}",
      "Ow\N{U+00e1}\N{U+014b}gyu\N{U+017e}a\N{U+017e}api",
      "A\N{U+014b}p\N{U+00e9}tuwak\N{U+021f}a\N{U+014b}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Lakota",
    month_format_abbreviated => [
      "Wi\N{U+00f3}the\N{U+021f}ika W\N{U+00ed}",
      "Thiy\N{U+00f3}\N{U+021f}eyu\N{U+014b}ka W\N{U+00ed}",
      "I\N{U+0161}t\N{U+00e1}wi\N{U+010d}hayaza\N{U+014b} W\N{U+00ed}",
      "P\N{U+021f}e\N{U+017e}\N{U+00ed}t\N{U+021f}o W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pet\N{U+021f}o W\N{U+00ed}",
      "W\N{U+00ed}pazuk\N{U+021f}a-wa\N{U+0161}t\N{U+00e9} W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}p\N{U+021f}\N{U+00e1}sapa W\N{U+00ed}",
      "Was\N{U+00fa}t\N{U+021f}u\N{U+014b} W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pe\N{U+01e7}i W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pe-kasn\N{U+00e1} W\N{U+00ed}",
      "Wan\N{U+00ed}yetu W\N{U+00ed}",
      "T\N{U+021f}ah\N{U+00e9}kap\N{U+0161}u\N{U+014b} W\N{U+00ed}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Wi\N{U+00f3}the\N{U+021f}ika W\N{U+00ed}",
      "Thiy\N{U+00f3}\N{U+021f}eyu\N{U+014b}ka W\N{U+00ed}",
      "I\N{U+0161}t\N{U+00e1}wi\N{U+010d}hayaza\N{U+014b} W\N{U+00ed}",
      "P\N{U+021f}e\N{U+017e}\N{U+00ed}t\N{U+021f}o W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pet\N{U+021f}o W\N{U+00ed}",
      "W\N{U+00ed}pazuk\N{U+021f}a-wa\N{U+0161}t\N{U+00e9} W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}p\N{U+021f}\N{U+00e1}sapa W\N{U+00ed}",
      "Was\N{U+00fa}t\N{U+021f}u\N{U+014b} W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pe\N{U+01e7}i W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pe-kasn\N{U+00e1} W\N{U+00ed}",
      "Wan\N{U+00ed}yetu W\N{U+00ed}",
      "T\N{U+021f}ah\N{U+00e9}kap\N{U+0161}u\N{U+014b} W\N{U+00ed}"
    ],
    month_stand_alone_abbreviated => [
      "Wi\N{U+00f3}the\N{U+021f}ika W\N{U+00ed}",
      "Thiy\N{U+00f3}\N{U+021f}eyu\N{U+014b}ka W\N{U+00ed}",
      "I\N{U+0161}t\N{U+00e1}wi\N{U+010d}hayaza\N{U+014b} W\N{U+00ed}",
      "P\N{U+021f}e\N{U+017e}\N{U+00ed}t\N{U+021f}o W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pet\N{U+021f}o W\N{U+00ed}",
      "W\N{U+00ed}pazuk\N{U+021f}a-wa\N{U+0161}t\N{U+00e9} W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}p\N{U+021f}\N{U+00e1}sapa W\N{U+00ed}",
      "Was\N{U+00fa}t\N{U+021f}u\N{U+014b} W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pe\N{U+01e7}i W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pe-kasn\N{U+00e1} W\N{U+00ed}",
      "Wan\N{U+00ed}yetu W\N{U+00ed}",
      "T\N{U+021f}ah\N{U+00e9}kap\N{U+0161}u\N{U+014b} W\N{U+00ed}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Wi\N{U+00f3}the\N{U+021f}ika W\N{U+00ed}",
      "Thiy\N{U+00f3}\N{U+021f}eyu\N{U+014b}ka W\N{U+00ed}",
      "I\N{U+0161}t\N{U+00e1}wi\N{U+010d}hayaza\N{U+014b} W\N{U+00ed}",
      "P\N{U+021f}e\N{U+017e}\N{U+00ed}t\N{U+021f}o W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pet\N{U+021f}o W\N{U+00ed}",
      "W\N{U+00ed}pazuk\N{U+021f}a-wa\N{U+0161}t\N{U+00e9} W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}p\N{U+021f}\N{U+00e1}sapa W\N{U+00ed}",
      "Was\N{U+00fa}t\N{U+021f}u\N{U+014b} W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pe\N{U+01e7}i W\N{U+00ed}",
      "\N{U+010c}ha\N{U+014b}w\N{U+00e1}pe-kasn\N{U+00e1} W\N{U+00ed}",
      "Wan\N{U+00ed}yetu W\N{U+00ed}",
      "T\N{U+021f}ah\N{U+00e9}kap\N{U+0161}u\N{U+014b} W\N{U+00ed}"
    ],
    name => "Lakota United States",
    native_language => "Lak\N{U+021f}\N{U+00f3}l\N{U+02bc}iyapi",
    native_name => "Lak\N{U+021f}\N{U+00f3}l\N{U+02bc}iyapi M\N{U+00ed}laha\N{U+014b}ska T\N{U+021f}am\N{U+00e1}k\N{U+021f}o\N{U+010d}he",
    native_script => undef,
    native_territory => "M\N{U+00ed}laha\N{U+014b}ska T\N{U+021f}am\N{U+00e1}k\N{U+021f}o\N{U+010d}he",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "United States",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ln ]__
  {
    am_pm_abbreviated => [
      "nt\N{U+0254}\N{U+0301}ng\N{U+0254}\N{U+0301}",
      "mp\N{U+00f3}kwa"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ln",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ybo",
      "mbl",
      "mst",
      "min",
      "mtn",
      "mps",
      "eye"
    ],
    day_format_narrow => [
      "y",
      "m",
      "m",
      "m",
      "m",
      "p",
      "e"
    ],
    day_format_wide => [
      "mok\N{U+0254}l\N{U+0254} mwa yambo",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}bal\N{U+00e9}",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}s\N{U+00e1}to",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}n\N{U+00e9}i",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}t\N{U+00e1}no",
      "mp\N{U+0254}\N{U+0301}s\N{U+0254}",
      "eyenga"
    ],
    day_stand_alone_abbreviated => [
      "ybo",
      "mbl",
      "mst",
      "min",
      "mtn",
      "mps",
      "eye"
    ],
    day_stand_alone_narrow => [
      "y",
      "m",
      "m",
      "m",
      "m",
      "p",
      "e"
    ],
    day_stand_alone_wide => [
      "mok\N{U+0254}l\N{U+0254} mwa yambo",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}bal\N{U+00e9}",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}s\N{U+00e1}to",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}n\N{U+00e9}i",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}t\N{U+00e1}no",
      "mp\N{U+0254}\N{U+0301}s\N{U+0254}",
      "eyenga"
    ],
    era_abbreviated => [
      "lib\N{U+00f3}so ya",
      "nsima ya Y"
    ],
    era_narrow => [
      "lib\N{U+00f3}so ya",
      "nsima ya Y"
    ],
    era_wide => [
      "Yambo ya Y\N{U+00e9}zu Kr\N{U+00ed}s",
      "Nsima ya Y\N{U+00e9}zu Kr\N{U+00ed}s"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Lingala",
    month_format_abbreviated => [
      "yan",
      "fbl",
      "msi",
      "apl",
      "mai",
      "yun",
      "yul",
      "agt",
      "stb",
      "\N{U+0254}tb",
      "nvb",
      "dsb"
    ],
    month_format_narrow => [
      "y",
      "f",
      "m",
      "a",
      "m",
      "y",
      "y",
      "a",
      "s",
      "\N{U+0254}",
      "n",
      "d"
    ],
    month_format_wide => [
      "s\N{U+00e1}nz\N{U+00e1} ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}nei",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}t\N{U+00e1}no",
      "s\N{U+00e1}nz\N{U+00e1} ya mot\N{U+00f3}b\N{U+00e1}",
      "s\N{U+00e1}nz\N{U+00e1} ya nsambo",
      "s\N{U+00e1}nz\N{U+00e1} ya mwambe",
      "s\N{U+00e1}nz\N{U+00e1} ya libwa",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+0254}\N{U+030c}k\N{U+0254}\N{U+0301}",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+00ed}bal\N{U+00e9}"
    ],
    month_stand_alone_abbreviated => [
      "yan",
      "fbl",
      "msi",
      "apl",
      "mai",
      "yun",
      "yul",
      "agt",
      "stb",
      "\N{U+0254}tb",
      "nvb",
      "dsb"
    ],
    month_stand_alone_narrow => [
      "y",
      "f",
      "m",
      "a",
      "m",
      "y",
      "y",
      "a",
      "s",
      "\N{U+0254}",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "s\N{U+00e1}nz\N{U+00e1} ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}nei",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}t\N{U+00e1}no",
      "s\N{U+00e1}nz\N{U+00e1} ya mot\N{U+00f3}b\N{U+00e1}",
      "s\N{U+00e1}nz\N{U+00e1} ya nsambo",
      "s\N{U+00e1}nz\N{U+00e1} ya mwambe",
      "s\N{U+00e1}nz\N{U+00e1} ya libwa",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+0254}\N{U+030c}k\N{U+0254}\N{U+0301}",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+00ed}bal\N{U+00e9}"
    ],
    name => "Lingala",
    native_language => "ling\N{U+00e1}la",
    native_name => "ling\N{U+00e1}la",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "SM1",
      "SM2",
      "SM3",
      "SM4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}nei"
    ],
    quarter_stand_alone_abbreviated => [
      "SM1",
      "SM2",
      "SM3",
      "SM4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}nei"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ln-AO ]__
  {
    am_pm_abbreviated => [
      "nt\N{U+0254}\N{U+0301}ng\N{U+0254}\N{U+0301}",
      "mp\N{U+00f3}kwa"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ln-AO",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ybo",
      "mbl",
      "mst",
      "min",
      "mtn",
      "mps",
      "eye"
    ],
    day_format_narrow => [
      "y",
      "m",
      "m",
      "m",
      "m",
      "p",
      "e"
    ],
    day_format_wide => [
      "mok\N{U+0254}l\N{U+0254} mwa yambo",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}bal\N{U+00e9}",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}s\N{U+00e1}to",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}n\N{U+00e9}i",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}t\N{U+00e1}no",
      "mp\N{U+0254}\N{U+0301}s\N{U+0254}",
      "eyenga"
    ],
    day_stand_alone_abbreviated => [
      "ybo",
      "mbl",
      "mst",
      "min",
      "mtn",
      "mps",
      "eye"
    ],
    day_stand_alone_narrow => [
      "y",
      "m",
      "m",
      "m",
      "m",
      "p",
      "e"
    ],
    day_stand_alone_wide => [
      "mok\N{U+0254}l\N{U+0254} mwa yambo",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}bal\N{U+00e9}",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}s\N{U+00e1}to",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}n\N{U+00e9}i",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}t\N{U+00e1}no",
      "mp\N{U+0254}\N{U+0301}s\N{U+0254}",
      "eyenga"
    ],
    era_abbreviated => [
      "lib\N{U+00f3}so ya",
      "nsima ya Y"
    ],
    era_narrow => [
      "lib\N{U+00f3}so ya",
      "nsima ya Y"
    ],
    era_wide => [
      "Yambo ya Y\N{U+00e9}zu Kr\N{U+00ed}s",
      "Nsima ya Y\N{U+00e9}zu Kr\N{U+00ed}s"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Lingala",
    month_format_abbreviated => [
      "yan",
      "fbl",
      "msi",
      "apl",
      "mai",
      "yun",
      "yul",
      "agt",
      "stb",
      "\N{U+0254}tb",
      "nvb",
      "dsb"
    ],
    month_format_narrow => [
      "y",
      "f",
      "m",
      "a",
      "m",
      "y",
      "y",
      "a",
      "s",
      "\N{U+0254}",
      "n",
      "d"
    ],
    month_format_wide => [
      "s\N{U+00e1}nz\N{U+00e1} ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}nei",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}t\N{U+00e1}no",
      "s\N{U+00e1}nz\N{U+00e1} ya mot\N{U+00f3}b\N{U+00e1}",
      "s\N{U+00e1}nz\N{U+00e1} ya nsambo",
      "s\N{U+00e1}nz\N{U+00e1} ya mwambe",
      "s\N{U+00e1}nz\N{U+00e1} ya libwa",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+0254}\N{U+030c}k\N{U+0254}\N{U+0301}",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+00ed}bal\N{U+00e9}"
    ],
    month_stand_alone_abbreviated => [
      "yan",
      "fbl",
      "msi",
      "apl",
      "mai",
      "yun",
      "yul",
      "agt",
      "stb",
      "\N{U+0254}tb",
      "nvb",
      "dsb"
    ],
    month_stand_alone_narrow => [
      "y",
      "f",
      "m",
      "a",
      "m",
      "y",
      "y",
      "a",
      "s",
      "\N{U+0254}",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "s\N{U+00e1}nz\N{U+00e1} ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}nei",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}t\N{U+00e1}no",
      "s\N{U+00e1}nz\N{U+00e1} ya mot\N{U+00f3}b\N{U+00e1}",
      "s\N{U+00e1}nz\N{U+00e1} ya nsambo",
      "s\N{U+00e1}nz\N{U+00e1} ya mwambe",
      "s\N{U+00e1}nz\N{U+00e1} ya libwa",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+0254}\N{U+030c}k\N{U+0254}\N{U+0301}",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+00ed}bal\N{U+00e9}"
    ],
    name => "Lingala Angola",
    native_language => "ling\N{U+00e1}la",
    native_name => "ling\N{U+00e1}la Ang\N{U+00f3}la",
    native_script => undef,
    native_territory => "Ang\N{U+00f3}la",
    native_variant => undef,
    quarter_format_abbreviated => [
      "SM1",
      "SM2",
      "SM3",
      "SM4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}nei"
    ],
    quarter_stand_alone_abbreviated => [
      "SM1",
      "SM2",
      "SM3",
      "SM4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}nei"
    ],
    script => undef,
    territory => "Angola",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ln-CD ]__
  {
    am_pm_abbreviated => [
      "nt\N{U+0254}\N{U+0301}ng\N{U+0254}\N{U+0301}",
      "mp\N{U+00f3}kwa"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ln-CD",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ybo",
      "mbl",
      "mst",
      "min",
      "mtn",
      "mps",
      "eye"
    ],
    day_format_narrow => [
      "y",
      "m",
      "m",
      "m",
      "m",
      "p",
      "e"
    ],
    day_format_wide => [
      "mok\N{U+0254}l\N{U+0254} mwa yambo",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}bal\N{U+00e9}",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}s\N{U+00e1}to",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}n\N{U+00e9}i",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}t\N{U+00e1}no",
      "mp\N{U+0254}\N{U+0301}s\N{U+0254}",
      "eyenga"
    ],
    day_stand_alone_abbreviated => [
      "ybo",
      "mbl",
      "mst",
      "min",
      "mtn",
      "mps",
      "eye"
    ],
    day_stand_alone_narrow => [
      "y",
      "m",
      "m",
      "m",
      "m",
      "p",
      "e"
    ],
    day_stand_alone_wide => [
      "mok\N{U+0254}l\N{U+0254} mwa yambo",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}bal\N{U+00e9}",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}s\N{U+00e1}to",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}n\N{U+00e9}i",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}t\N{U+00e1}no",
      "mp\N{U+0254}\N{U+0301}s\N{U+0254}",
      "eyenga"
    ],
    era_abbreviated => [
      "lib\N{U+00f3}so ya",
      "nsima ya Y"
    ],
    era_narrow => [
      "lib\N{U+00f3}so ya",
      "nsima ya Y"
    ],
    era_wide => [
      "Yambo ya Y\N{U+00e9}zu Kr\N{U+00ed}s",
      "Nsima ya Y\N{U+00e9}zu Kr\N{U+00ed}s"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Lingala",
    month_format_abbreviated => [
      "yan",
      "fbl",
      "msi",
      "apl",
      "mai",
      "yun",
      "yul",
      "agt",
      "stb",
      "\N{U+0254}tb",
      "nvb",
      "dsb"
    ],
    month_format_narrow => [
      "y",
      "f",
      "m",
      "a",
      "m",
      "y",
      "y",
      "a",
      "s",
      "\N{U+0254}",
      "n",
      "d"
    ],
    month_format_wide => [
      "s\N{U+00e1}nz\N{U+00e1} ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}nei",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}t\N{U+00e1}no",
      "s\N{U+00e1}nz\N{U+00e1} ya mot\N{U+00f3}b\N{U+00e1}",
      "s\N{U+00e1}nz\N{U+00e1} ya nsambo",
      "s\N{U+00e1}nz\N{U+00e1} ya mwambe",
      "s\N{U+00e1}nz\N{U+00e1} ya libwa",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+0254}\N{U+030c}k\N{U+0254}\N{U+0301}",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+00ed}bal\N{U+00e9}"
    ],
    month_stand_alone_abbreviated => [
      "yan",
      "fbl",
      "msi",
      "apl",
      "mai",
      "yun",
      "yul",
      "agt",
      "stb",
      "\N{U+0254}tb",
      "nvb",
      "dsb"
    ],
    month_stand_alone_narrow => [
      "y",
      "f",
      "m",
      "a",
      "m",
      "y",
      "y",
      "a",
      "s",
      "\N{U+0254}",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "s\N{U+00e1}nz\N{U+00e1} ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}nei",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}t\N{U+00e1}no",
      "s\N{U+00e1}nz\N{U+00e1} ya mot\N{U+00f3}b\N{U+00e1}",
      "s\N{U+00e1}nz\N{U+00e1} ya nsambo",
      "s\N{U+00e1}nz\N{U+00e1} ya mwambe",
      "s\N{U+00e1}nz\N{U+00e1} ya libwa",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+0254}\N{U+030c}k\N{U+0254}\N{U+0301}",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+00ed}bal\N{U+00e9}"
    ],
    name => "Lingala Congo - Kinshasa",
    native_language => "ling\N{U+00e1}la",
    native_name => "ling\N{U+00e1}la Repibiki demokratiki ya Kong\N{U+00f3}",
    native_script => undef,
    native_territory => "Repibiki demokratiki ya Kong\N{U+00f3}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "SM1",
      "SM2",
      "SM3",
      "SM4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}nei"
    ],
    quarter_stand_alone_abbreviated => [
      "SM1",
      "SM2",
      "SM3",
      "SM4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}nei"
    ],
    script => undef,
    territory => "Congo - Kinshasa",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ln-CF ]__
  {
    am_pm_abbreviated => [
      "nt\N{U+0254}\N{U+0301}ng\N{U+0254}\N{U+0301}",
      "mp\N{U+00f3}kwa"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ln-CF",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ybo",
      "mbl",
      "mst",
      "min",
      "mtn",
      "mps",
      "eye"
    ],
    day_format_narrow => [
      "y",
      "m",
      "m",
      "m",
      "m",
      "p",
      "e"
    ],
    day_format_wide => [
      "mok\N{U+0254}l\N{U+0254} mwa yambo",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}bal\N{U+00e9}",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}s\N{U+00e1}to",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}n\N{U+00e9}i",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}t\N{U+00e1}no",
      "mp\N{U+0254}\N{U+0301}s\N{U+0254}",
      "eyenga"
    ],
    day_stand_alone_abbreviated => [
      "ybo",
      "mbl",
      "mst",
      "min",
      "mtn",
      "mps",
      "eye"
    ],
    day_stand_alone_narrow => [
      "y",
      "m",
      "m",
      "m",
      "m",
      "p",
      "e"
    ],
    day_stand_alone_wide => [
      "mok\N{U+0254}l\N{U+0254} mwa yambo",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}bal\N{U+00e9}",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}s\N{U+00e1}to",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}n\N{U+00e9}i",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}t\N{U+00e1}no",
      "mp\N{U+0254}\N{U+0301}s\N{U+0254}",
      "eyenga"
    ],
    era_abbreviated => [
      "lib\N{U+00f3}so ya",
      "nsima ya Y"
    ],
    era_narrow => [
      "lib\N{U+00f3}so ya",
      "nsima ya Y"
    ],
    era_wide => [
      "Yambo ya Y\N{U+00e9}zu Kr\N{U+00ed}s",
      "Nsima ya Y\N{U+00e9}zu Kr\N{U+00ed}s"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Lingala",
    month_format_abbreviated => [
      "yan",
      "fbl",
      "msi",
      "apl",
      "mai",
      "yun",
      "yul",
      "agt",
      "stb",
      "\N{U+0254}tb",
      "nvb",
      "dsb"
    ],
    month_format_narrow => [
      "y",
      "f",
      "m",
      "a",
      "m",
      "y",
      "y",
      "a",
      "s",
      "\N{U+0254}",
      "n",
      "d"
    ],
    month_format_wide => [
      "s\N{U+00e1}nz\N{U+00e1} ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}nei",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}t\N{U+00e1}no",
      "s\N{U+00e1}nz\N{U+00e1} ya mot\N{U+00f3}b\N{U+00e1}",
      "s\N{U+00e1}nz\N{U+00e1} ya nsambo",
      "s\N{U+00e1}nz\N{U+00e1} ya mwambe",
      "s\N{U+00e1}nz\N{U+00e1} ya libwa",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+0254}\N{U+030c}k\N{U+0254}\N{U+0301}",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+00ed}bal\N{U+00e9}"
    ],
    month_stand_alone_abbreviated => [
      "yan",
      "fbl",
      "msi",
      "apl",
      "mai",
      "yun",
      "yul",
      "agt",
      "stb",
      "\N{U+0254}tb",
      "nvb",
      "dsb"
    ],
    month_stand_alone_narrow => [
      "y",
      "f",
      "m",
      "a",
      "m",
      "y",
      "y",
      "a",
      "s",
      "\N{U+0254}",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "s\N{U+00e1}nz\N{U+00e1} ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}nei",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}t\N{U+00e1}no",
      "s\N{U+00e1}nz\N{U+00e1} ya mot\N{U+00f3}b\N{U+00e1}",
      "s\N{U+00e1}nz\N{U+00e1} ya nsambo",
      "s\N{U+00e1}nz\N{U+00e1} ya mwambe",
      "s\N{U+00e1}nz\N{U+00e1} ya libwa",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+0254}\N{U+030c}k\N{U+0254}\N{U+0301}",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+00ed}bal\N{U+00e9}"
    ],
    name => "Lingala Central African Republic",
    native_language => "ling\N{U+00e1}la",
    native_name => "ling\N{U+00e1}la Repibiki ya Afr\N{U+00ed}ka ya K\N{U+00e1}ti",
    native_script => undef,
    native_territory => "Repibiki ya Afr\N{U+00ed}ka ya K\N{U+00e1}ti",
    native_variant => undef,
    quarter_format_abbreviated => [
      "SM1",
      "SM2",
      "SM3",
      "SM4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}nei"
    ],
    quarter_stand_alone_abbreviated => [
      "SM1",
      "SM2",
      "SM3",
      "SM4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}nei"
    ],
    script => undef,
    territory => "Central African Republic",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ln-CG ]__
  {
    am_pm_abbreviated => [
      "nt\N{U+0254}\N{U+0301}ng\N{U+0254}\N{U+0301}",
      "mp\N{U+00f3}kwa"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ln-CG",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ybo",
      "mbl",
      "mst",
      "min",
      "mtn",
      "mps",
      "eye"
    ],
    day_format_narrow => [
      "y",
      "m",
      "m",
      "m",
      "m",
      "p",
      "e"
    ],
    day_format_wide => [
      "mok\N{U+0254}l\N{U+0254} mwa yambo",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}bal\N{U+00e9}",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}s\N{U+00e1}to",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}n\N{U+00e9}i",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}t\N{U+00e1}no",
      "mp\N{U+0254}\N{U+0301}s\N{U+0254}",
      "eyenga"
    ],
    day_stand_alone_abbreviated => [
      "ybo",
      "mbl",
      "mst",
      "min",
      "mtn",
      "mps",
      "eye"
    ],
    day_stand_alone_narrow => [
      "y",
      "m",
      "m",
      "m",
      "m",
      "p",
      "e"
    ],
    day_stand_alone_wide => [
      "mok\N{U+0254}l\N{U+0254} mwa yambo",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}bal\N{U+00e9}",
      "mok\N{U+0254}l\N{U+0254} mwa m\N{U+00ed}s\N{U+00e1}to",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}n\N{U+00e9}i",
      "mok\N{U+0254}l\N{U+0254} ya m\N{U+00ed}t\N{U+00e1}no",
      "mp\N{U+0254}\N{U+0301}s\N{U+0254}",
      "eyenga"
    ],
    era_abbreviated => [
      "lib\N{U+00f3}so ya",
      "nsima ya Y"
    ],
    era_narrow => [
      "lib\N{U+00f3}so ya",
      "nsima ya Y"
    ],
    era_wide => [
      "Yambo ya Y\N{U+00e9}zu Kr\N{U+00ed}s",
      "Nsima ya Y\N{U+00e9}zu Kr\N{U+00ed}s"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Lingala",
    month_format_abbreviated => [
      "yan",
      "fbl",
      "msi",
      "apl",
      "mai",
      "yun",
      "yul",
      "agt",
      "stb",
      "\N{U+0254}tb",
      "nvb",
      "dsb"
    ],
    month_format_narrow => [
      "y",
      "f",
      "m",
      "a",
      "m",
      "y",
      "y",
      "a",
      "s",
      "\N{U+0254}",
      "n",
      "d"
    ],
    month_format_wide => [
      "s\N{U+00e1}nz\N{U+00e1} ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}nei",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}t\N{U+00e1}no",
      "s\N{U+00e1}nz\N{U+00e1} ya mot\N{U+00f3}b\N{U+00e1}",
      "s\N{U+00e1}nz\N{U+00e1} ya nsambo",
      "s\N{U+00e1}nz\N{U+00e1} ya mwambe",
      "s\N{U+00e1}nz\N{U+00e1} ya libwa",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+0254}\N{U+030c}k\N{U+0254}\N{U+0301}",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+00ed}bal\N{U+00e9}"
    ],
    month_stand_alone_abbreviated => [
      "yan",
      "fbl",
      "msi",
      "apl",
      "mai",
      "yun",
      "yul",
      "agt",
      "stb",
      "\N{U+0254}tb",
      "nvb",
      "dsb"
    ],
    month_stand_alone_narrow => [
      "y",
      "f",
      "m",
      "a",
      "m",
      "y",
      "y",
      "a",
      "s",
      "\N{U+0254}",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "s\N{U+00e1}nz\N{U+00e1} ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}nei",
      "s\N{U+00e1}nz\N{U+00e1} ya m\N{U+00ed}t\N{U+00e1}no",
      "s\N{U+00e1}nz\N{U+00e1} ya mot\N{U+00f3}b\N{U+00e1}",
      "s\N{U+00e1}nz\N{U+00e1} ya nsambo",
      "s\N{U+00e1}nz\N{U+00e1} ya mwambe",
      "s\N{U+00e1}nz\N{U+00e1} ya libwa",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+0254}\N{U+030c}k\N{U+0254}\N{U+0301}",
      "s\N{U+00e1}nz\N{U+00e1} ya z\N{U+00f3}mi na m\N{U+00ed}bal\N{U+00e9}"
    ],
    name => "Lingala Congo - Brazzaville",
    native_language => "ling\N{U+00e1}la",
    native_name => "ling\N{U+00e1}la Kongo",
    native_script => undef,
    native_territory => "Kongo",
    native_variant => undef,
    quarter_format_abbreviated => [
      "SM1",
      "SM2",
      "SM3",
      "SM4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}nei"
    ],
    quarter_stand_alone_abbreviated => [
      "SM1",
      "SM2",
      "SM3",
      "SM4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya yambo",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}bal\N{U+00e9}",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}s\N{U+00e1}to",
      "s\N{U+00e1}nz\N{U+00e1} m\N{U+00ed}s\N{U+00e1}to ya m\N{U+00ed}nei"
    ],
    script => undef,
    territory => "Congo - Brazzaville",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ lo ]__
  {
    am_pm_abbreviated => [
      "\N{U+0e81}\N{U+0ec8}\N{U+0ead}\N{U+0e99}\N{U+0e97}\N{U+0ec8}\N{U+0ebd}\N{U+0e87}",
      "\N{U+0eab}\N{U+0ebc}\N{U+0eb1}\N{U+0e87}\N{U+0e97}\N{U+0ec8}\N{U+0ebd}\N{U+0e87}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "MMM, G y",
      GyMMMEd => "E d MMMM, G y",
      GyMMMd => "d MMMM, G y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h \N{U+0ec2}\N{U+0ea1}\N{U+0e87}a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "lo",
    date_format_full => "EEEE \N{U+0e97}\N{U+0eb5} d MMMM G y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e88}\N{U+0eb1}\N{U+0e99}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ead}\N{U+0eb1}\N{U+0e87}\N{U+0e84}\N{U+0eb2}\N{U+0e99}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e9e}\N{U+0eb8}\N{U+0e94}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e9e}\N{U+0eb0}\N{U+0eab}\N{U+0eb1}\N{U+0e94}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0eaa}\N{U+0eb8}\N{U+0e81}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ec0}\N{U+0eaa}\N{U+0ebb}\N{U+0eb2}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ead}\N{U+0eb2}\N{U+0e97}\N{U+0eb4}\N{U+0e94}"
    ],
    day_format_narrow => [
      2,
      3,
      4,
      5,
      6,
      7,
      1
    ],
    day_format_wide => [
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e88}\N{U+0eb1}\N{U+0e99}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ead}\N{U+0eb1}\N{U+0e87}\N{U+0e84}\N{U+0eb2}\N{U+0e99}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e9e}\N{U+0eb8}\N{U+0e94}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e9e}\N{U+0eb0}\N{U+0eab}\N{U+0eb1}\N{U+0e94}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0eaa}\N{U+0eb8}\N{U+0e81}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ec0}\N{U+0eaa}\N{U+0ebb}\N{U+0eb2}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ead}\N{U+0eb2}\N{U+0e97}\N{U+0eb4}\N{U+0e94}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0e88}\N{U+0eb1}\N{U+0e99}",
      "\N{U+0ead}\N{U+0eb1}\N{U+0e87}\N{U+0e84}\N{U+0eb2}\N{U+0e99}",
      "\N{U+0e9e}\N{U+0eb8}\N{U+0e94}",
      "\N{U+0e9e}\N{U+0eb0}\N{U+0eab}\N{U+0eb1}\N{U+0e94}",
      "\N{U+0eaa}\N{U+0eb8}\N{U+0e81}",
      "\N{U+0ec0}\N{U+0eaa}\N{U+0ebb}\N{U+0eb2}",
      "\N{U+0ead}\N{U+0eb2}\N{U+0e97}\N{U+0eb4}\N{U+0e94}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0e88}",
      "\N{U+0ead}",
      "\N{U+0e9e}",
      "\N{U+0e9e}\N{U+0eab}",
      "\N{U+0eaa}\N{U+0eb8}",
      "\N{U+0eaa}",
      "\N{U+0ead}"
    ],
    day_stand_alone_wide => [
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e88}\N{U+0eb1}\N{U+0e99}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ead}\N{U+0eb1}\N{U+0e87}\N{U+0e84}\N{U+0eb2}\N{U+0e99}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e9e}\N{U+0eb8}\N{U+0e94}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e9e}\N{U+0eb0}\N{U+0eab}\N{U+0eb1}\N{U+0e94}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0eaa}\N{U+0eb8}\N{U+0e81}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ec0}\N{U+0eaa}\N{U+0ebb}\N{U+0eb2}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ead}\N{U+0eb2}\N{U+0e97}\N{U+0eb4}\N{U+0e94}"
    ],
    era_abbreviated => [
      "\N{U+0e81}\N{U+0ec8}\N{U+0ead}\N{U+0e99} \N{U+0e84}.\N{U+0eaa}.",
      "\N{U+0e84}.\N{U+0eaa}."
    ],
    era_narrow => [
      "\N{U+0e81}\N{U+0ec8}\N{U+0ead}\N{U+0e99} \N{U+0e84}.\N{U+0eaa}.",
      "\N{U+0e84}.\N{U+0eaa}."
    ],
    era_wide => [
      "\N{U+0e81}\N{U+0ec8}\N{U+0ead}\N{U+0e99}\N{U+0e84}\N{U+0ea3}\N{U+0eb4}\N{U+0e94}\N{U+0eaa}\N{U+0eb1}\N{U+0e81}\N{U+0e81}\N{U+0eb0}\N{U+0ea5}\N{U+0eb2}\N{U+0e94}",
      "\N{U+0e84}\N{U+0ea3}\N{U+0eb4}\N{U+0e94}\N{U+0eaa}\N{U+0eb1}\N{U+0e81}\N{U+0e81}\N{U+0eb0}\N{U+0ea5}\N{U+0eb2}\N{U+0e94}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Lao",
    month_format_abbreviated => [
      "\N{U+0ea1}.\N{U+0e81}.",
      "\N{U+0e81}.\N{U+0e9e}.",
      "\N{U+0ea1}.\N{U+0e99}.",
      "\N{U+0ea1}.\N{U+0eaa}.",
      "\N{U+0e9e}.\N{U+0e9e}.",
      "\N{U+0ea1}\N{U+0eb4}.\N{U+0e96}.",
      "\N{U+0e81}.\N{U+0ea5}.",
      "\N{U+0eaa}.\N{U+0eab}.",
      "\N{U+0e81}.\N{U+0e8d}.",
      "\N{U+0e95}.\N{U+0ea5}.",
      "\N{U+0e9e}.\N{U+0e88}.",
      "\N{U+0e97}.\N{U+0ea7}."
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+0ea1}\N{U+0eb1}\N{U+0e87}\N{U+0e81}\N{U+0ead}\N{U+0e99}",
      "\N{U+0e81}\N{U+0eb8}\N{U+0ea1}\N{U+0e9e}\N{U+0eb2}",
      "\N{U+0ea1}\N{U+0eb5}\N{U+0e99}\N{U+0eb2}",
      "\N{U+0ec0}\N{U+0ea1}\N{U+0eaa}\N{U+0eb2}",
      "\N{U+0e9e}\N{U+0eb6}\N{U+0e94}\N{U+0eaa}\N{U+0eb0}\N{U+0e9e}\N{U+0eb2}",
      "\N{U+0ea1}\N{U+0eb4}\N{U+0e96}\N{U+0eb8}\N{U+0e99}\N{U+0eb2}",
      "\N{U+0e81}\N{U+0ecd}\N{U+0ea5}\N{U+0eb0}\N{U+0e81}\N{U+0ebb}\N{U+0e94}",
      "\N{U+0eaa}\N{U+0eb4}\N{U+0e87}\N{U+0eab}\N{U+0eb2}",
      "\N{U+0e81}\N{U+0eb1}\N{U+0e99}\N{U+0e8d}\N{U+0eb2}",
      "\N{U+0e95}\N{U+0eb8}\N{U+0ea5}\N{U+0eb2}",
      "\N{U+0e9e}\N{U+0eb0}\N{U+0e88}\N{U+0eb4}\N{U+0e81}",
      "\N{U+0e97}\N{U+0eb1}\N{U+0e99}\N{U+0ea7}\N{U+0eb2}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0ea1}.\N{U+0e81}.",
      "\N{U+0e81}.\N{U+0e9e}.",
      "\N{U+0ea1}.\N{U+0e99}.",
      "\N{U+0ea1}.\N{U+0eaa}.",
      "\N{U+0e9e}.\N{U+0e9e}.",
      "\N{U+0ea1}\N{U+0eb4}.\N{U+0e96}.",
      "\N{U+0e81}.\N{U+0ea5}.",
      "\N{U+0eaa}.\N{U+0eab}.",
      "\N{U+0e81}.\N{U+0e8d}.",
      "\N{U+0e95}.\N{U+0ea5}.",
      "\N{U+0e9e}.\N{U+0e88}.",
      "\N{U+0e97}.\N{U+0ea7}."
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+0ea1}\N{U+0eb1}\N{U+0e87}\N{U+0e81}\N{U+0ead}\N{U+0e99}",
      "\N{U+0e81}\N{U+0eb8}\N{U+0ea1}\N{U+0e9e}\N{U+0eb2}",
      "\N{U+0ea1}\N{U+0eb5}\N{U+0e99}\N{U+0eb2}",
      "\N{U+0ec0}\N{U+0ea1}\N{U+0eaa}\N{U+0eb2}",
      "\N{U+0e9e}\N{U+0eb6}\N{U+0e94}\N{U+0eaa}\N{U+0eb0}\N{U+0e9e}\N{U+0eb2}",
      "\N{U+0ea1}\N{U+0eb4}\N{U+0e96}\N{U+0eb8}\N{U+0e99}\N{U+0eb2}",
      "\N{U+0e81}\N{U+0ecd}\N{U+0ea5}\N{U+0eb0}\N{U+0e81}\N{U+0ebb}\N{U+0e94}",
      "\N{U+0eaa}\N{U+0eb4}\N{U+0e87}\N{U+0eab}\N{U+0eb2}",
      "\N{U+0e81}\N{U+0eb1}\N{U+0e99}\N{U+0e8d}\N{U+0eb2}",
      "\N{U+0e95}\N{U+0eb8}\N{U+0ea5}\N{U+0eb2}",
      "\N{U+0e9e}\N{U+0eb0}\N{U+0e88}\N{U+0eb4}\N{U+0e81}",
      "\N{U+0e97}\N{U+0eb1}\N{U+0e99}\N{U+0ea7}\N{U+0eb2}"
    ],
    name => "Lao",
    native_language => "\N{U+0ea5}\N{U+0eb2}\N{U+0ea7}",
    native_name => "\N{U+0ea5}\N{U+0eb2}\N{U+0ea7}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0e95}\N{U+0ea1}1",
      "\N{U+0e95}\N{U+0ea1}2",
      "\N{U+0e95}\N{U+0ea1}3",
      "\N{U+0e95}\N{U+0ea1}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0ec4}\N{U+0e95}\N{U+0ea3}\N{U+0ea1}\N{U+0eb2}\N{U+0e94} 1",
      "\N{U+0ec4}\N{U+0e95}\N{U+0ea3}\N{U+0ea1}\N{U+0eb2}\N{U+0e94} 2",
      "\N{U+0ec4}\N{U+0e95}\N{U+0ea3}\N{U+0ea1}\N{U+0eb2}\N{U+0e94} 3",
      "\N{U+0ec4}\N{U+0e95}\N{U+0ea3}\N{U+0ea1}\N{U+0eb2}\N{U+0e94} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0e95}1",
      "\N{U+0e95}2",
      "\N{U+0e95}3",
      "\N{U+0e95}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0ec4}\N{U+0e95}\N{U+0ea3}\N{U+0ea1}\N{U+0eb2}\N{U+0e94} 1",
      "\N{U+0ec4}\N{U+0e95}\N{U+0ea3}\N{U+0ea1}\N{U+0eb2}\N{U+0e94} 2",
      "\N{U+0ec4}\N{U+0e95}\N{U+0ea3}\N{U+0ea1}\N{U+0eb2}\N{U+0e94} 3",
      "\N{U+0ec4}\N{U+0e95}\N{U+0ea3}\N{U+0ea1}\N{U+0eb2}\N{U+0e94} 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H \N{U+0ec2}\N{U+0ea1}\N{U+0e87} m \N{U+0e99}\N{U+0eb2}\N{U+0e97}\N{U+0eb5} ss \N{U+0ea7}\N{U+0eb4}\N{U+0e99}\N{U+0eb2}\N{U+0e97}\N{U+0eb5} zzzz",
    time_format_long => "H \N{U+0ec2}\N{U+0ea1}\N{U+0e87} m \N{U+0e99}\N{U+0eb2}\N{U+0e97}\N{U+0eb5} ss \N{U+0ea7}\N{U+0eb4}\N{U+0e99}\N{U+0eb2}\N{U+0e97}\N{U+0eb5} z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ lo-LA ]__
  {
    am_pm_abbreviated => [
      "\N{U+0e81}\N{U+0ec8}\N{U+0ead}\N{U+0e99}\N{U+0e97}\N{U+0ec8}\N{U+0ebd}\N{U+0e87}",
      "\N{U+0eab}\N{U+0ebc}\N{U+0eb1}\N{U+0e87}\N{U+0e97}\N{U+0ec8}\N{U+0ebd}\N{U+0e87}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "MMM, G y",
      GyMMMEd => "E d MMMM, G y",
      GyMMMd => "d MMMM, G y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h \N{U+0ec2}\N{U+0ea1}\N{U+0e87}a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "lo-LA",
    date_format_full => "EEEE \N{U+0e97}\N{U+0eb5} d MMMM G y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e88}\N{U+0eb1}\N{U+0e99}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ead}\N{U+0eb1}\N{U+0e87}\N{U+0e84}\N{U+0eb2}\N{U+0e99}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e9e}\N{U+0eb8}\N{U+0e94}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e9e}\N{U+0eb0}\N{U+0eab}\N{U+0eb1}\N{U+0e94}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0eaa}\N{U+0eb8}\N{U+0e81}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ec0}\N{U+0eaa}\N{U+0ebb}\N{U+0eb2}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ead}\N{U+0eb2}\N{U+0e97}\N{U+0eb4}\N{U+0e94}"
    ],
    day_format_narrow => [
      2,
      3,
      4,
      5,
      6,
      7,
      1
    ],
    day_format_wide => [
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e88}\N{U+0eb1}\N{U+0e99}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ead}\N{U+0eb1}\N{U+0e87}\N{U+0e84}\N{U+0eb2}\N{U+0e99}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e9e}\N{U+0eb8}\N{U+0e94}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e9e}\N{U+0eb0}\N{U+0eab}\N{U+0eb1}\N{U+0e94}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0eaa}\N{U+0eb8}\N{U+0e81}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ec0}\N{U+0eaa}\N{U+0ebb}\N{U+0eb2}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ead}\N{U+0eb2}\N{U+0e97}\N{U+0eb4}\N{U+0e94}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0e88}\N{U+0eb1}\N{U+0e99}",
      "\N{U+0ead}\N{U+0eb1}\N{U+0e87}\N{U+0e84}\N{U+0eb2}\N{U+0e99}",
      "\N{U+0e9e}\N{U+0eb8}\N{U+0e94}",
      "\N{U+0e9e}\N{U+0eb0}\N{U+0eab}\N{U+0eb1}\N{U+0e94}",
      "\N{U+0eaa}\N{U+0eb8}\N{U+0e81}",
      "\N{U+0ec0}\N{U+0eaa}\N{U+0ebb}\N{U+0eb2}",
      "\N{U+0ead}\N{U+0eb2}\N{U+0e97}\N{U+0eb4}\N{U+0e94}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0e88}",
      "\N{U+0ead}",
      "\N{U+0e9e}",
      "\N{U+0e9e}\N{U+0eab}",
      "\N{U+0eaa}\N{U+0eb8}",
      "\N{U+0eaa}",
      "\N{U+0ead}"
    ],
    day_stand_alone_wide => [
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e88}\N{U+0eb1}\N{U+0e99}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ead}\N{U+0eb1}\N{U+0e87}\N{U+0e84}\N{U+0eb2}\N{U+0e99}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e9e}\N{U+0eb8}\N{U+0e94}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0e9e}\N{U+0eb0}\N{U+0eab}\N{U+0eb1}\N{U+0e94}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0eaa}\N{U+0eb8}\N{U+0e81}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ec0}\N{U+0eaa}\N{U+0ebb}\N{U+0eb2}",
      "\N{U+0ea7}\N{U+0eb1}\N{U+0e99}\N{U+0ead}\N{U+0eb2}\N{U+0e97}\N{U+0eb4}\N{U+0e94}"
    ],
    era_abbreviated => [
      "\N{U+0e81}\N{U+0ec8}\N{U+0ead}\N{U+0e99} \N{U+0e84}.\N{U+0eaa}.",
      "\N{U+0e84}.\N{U+0eaa}."
    ],
    era_narrow => [
      "\N{U+0e81}\N{U+0ec8}\N{U+0ead}\N{U+0e99} \N{U+0e84}.\N{U+0eaa}.",
      "\N{U+0e84}.\N{U+0eaa}."
    ],
    era_wide => [
      "\N{U+0e81}\N{U+0ec8}\N{U+0ead}\N{U+0e99}\N{U+0e84}\N{U+0ea3}\N{U+0eb4}\N{U+0e94}\N{U+0eaa}\N{U+0eb1}\N{U+0e81}\N{U+0e81}\N{U+0eb0}\N{U+0ea5}\N{U+0eb2}\N{U+0e94}",
      "\N{U+0e84}\N{U+0ea3}\N{U+0eb4}\N{U+0e94}\N{U+0eaa}\N{U+0eb1}\N{U+0e81}\N{U+0e81}\N{U+0eb0}\N{U+0ea5}\N{U+0eb2}\N{U+0e94}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %e %b %Ey %H:%M:%S %Z",
    glibc_date_format => "%d/%m/%Ey",
    glibc_datetime_format => "%a %e %b %Ey, %H:%M:%S",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Lao",
    month_format_abbreviated => [
      "\N{U+0ea1}.\N{U+0e81}.",
      "\N{U+0e81}.\N{U+0e9e}.",
      "\N{U+0ea1}.\N{U+0e99}.",
      "\N{U+0ea1}.\N{U+0eaa}.",
      "\N{U+0e9e}.\N{U+0e9e}.",
      "\N{U+0ea1}\N{U+0eb4}.\N{U+0e96}.",
      "\N{U+0e81}.\N{U+0ea5}.",
      "\N{U+0eaa}.\N{U+0eab}.",
      "\N{U+0e81}.\N{U+0e8d}.",
      "\N{U+0e95}.\N{U+0ea5}.",
      "\N{U+0e9e}.\N{U+0e88}.",
      "\N{U+0e97}.\N{U+0ea7}."
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+0ea1}\N{U+0eb1}\N{U+0e87}\N{U+0e81}\N{U+0ead}\N{U+0e99}",
      "\N{U+0e81}\N{U+0eb8}\N{U+0ea1}\N{U+0e9e}\N{U+0eb2}",
      "\N{U+0ea1}\N{U+0eb5}\N{U+0e99}\N{U+0eb2}",
      "\N{U+0ec0}\N{U+0ea1}\N{U+0eaa}\N{U+0eb2}",
      "\N{U+0e9e}\N{U+0eb6}\N{U+0e94}\N{U+0eaa}\N{U+0eb0}\N{U+0e9e}\N{U+0eb2}",
      "\N{U+0ea1}\N{U+0eb4}\N{U+0e96}\N{U+0eb8}\N{U+0e99}\N{U+0eb2}",
      "\N{U+0e81}\N{U+0ecd}\N{U+0ea5}\N{U+0eb0}\N{U+0e81}\N{U+0ebb}\N{U+0e94}",
      "\N{U+0eaa}\N{U+0eb4}\N{U+0e87}\N{U+0eab}\N{U+0eb2}",
      "\N{U+0e81}\N{U+0eb1}\N{U+0e99}\N{U+0e8d}\N{U+0eb2}",
      "\N{U+0e95}\N{U+0eb8}\N{U+0ea5}\N{U+0eb2}",
      "\N{U+0e9e}\N{U+0eb0}\N{U+0e88}\N{U+0eb4}\N{U+0e81}",
      "\N{U+0e97}\N{U+0eb1}\N{U+0e99}\N{U+0ea7}\N{U+0eb2}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0ea1}.\N{U+0e81}.",
      "\N{U+0e81}.\N{U+0e9e}.",
      "\N{U+0ea1}.\N{U+0e99}.",
      "\N{U+0ea1}.\N{U+0eaa}.",
      "\N{U+0e9e}.\N{U+0e9e}.",
      "\N{U+0ea1}\N{U+0eb4}.\N{U+0e96}.",
      "\N{U+0e81}.\N{U+0ea5}.",
      "\N{U+0eaa}.\N{U+0eab}.",
      "\N{U+0e81}.\N{U+0e8d}.",
      "\N{U+0e95}.\N{U+0ea5}.",
      "\N{U+0e9e}.\N{U+0e88}.",
      "\N{U+0e97}.\N{U+0ea7}."
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+0ea1}\N{U+0eb1}\N{U+0e87}\N{U+0e81}\N{U+0ead}\N{U+0e99}",
      "\N{U+0e81}\N{U+0eb8}\N{U+0ea1}\N{U+0e9e}\N{U+0eb2}",
      "\N{U+0ea1}\N{U+0eb5}\N{U+0e99}\N{U+0eb2}",
      "\N{U+0ec0}\N{U+0ea1}\N{U+0eaa}\N{U+0eb2}",
      "\N{U+0e9e}\N{U+0eb6}\N{U+0e94}\N{U+0eaa}\N{U+0eb0}\N{U+0e9e}\N{U+0eb2}",
      "\N{U+0ea1}\N{U+0eb4}\N{U+0e96}\N{U+0eb8}\N{U+0e99}\N{U+0eb2}",
      "\N{U+0e81}\N{U+0ecd}\N{U+0ea5}\N{U+0eb0}\N{U+0e81}\N{U+0ebb}\N{U+0e94}",
      "\N{U+0eaa}\N{U+0eb4}\N{U+0e87}\N{U+0eab}\N{U+0eb2}",
      "\N{U+0e81}\N{U+0eb1}\N{U+0e99}\N{U+0e8d}\N{U+0eb2}",
      "\N{U+0e95}\N{U+0eb8}\N{U+0ea5}\N{U+0eb2}",
      "\N{U+0e9e}\N{U+0eb0}\N{U+0e88}\N{U+0eb4}\N{U+0e81}",
      "\N{U+0e97}\N{U+0eb1}\N{U+0e99}\N{U+0ea7}\N{U+0eb2}"
    ],
    name => "Lao Laos",
    native_language => "\N{U+0ea5}\N{U+0eb2}\N{U+0ea7}",
    native_name => "\N{U+0ea5}\N{U+0eb2}\N{U+0ea7} \N{U+0ea5}\N{U+0eb2}\N{U+0ea7}",
    native_script => undef,
    native_territory => "\N{U+0ea5}\N{U+0eb2}\N{U+0ea7}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0e95}\N{U+0ea1}1",
      "\N{U+0e95}\N{U+0ea1}2",
      "\N{U+0e95}\N{U+0ea1}3",
      "\N{U+0e95}\N{U+0ea1}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0ec4}\N{U+0e95}\N{U+0ea3}\N{U+0ea1}\N{U+0eb2}\N{U+0e94} 1",
      "\N{U+0ec4}\N{U+0e95}\N{U+0ea3}\N{U+0ea1}\N{U+0eb2}\N{U+0e94} 2",
      "\N{U+0ec4}\N{U+0e95}\N{U+0ea3}\N{U+0ea1}\N{U+0eb2}\N{U+0e94} 3",
      "\N{U+0ec4}\N{U+0e95}\N{U+0ea3}\N{U+0ea1}\N{U+0eb2}\N{U+0e94} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0e95}1",
      "\N{U+0e95}2",
      "\N{U+0e95}3",
      "\N{U+0e95}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0ec4}\N{U+0e95}\N{U+0ea3}\N{U+0ea1}\N{U+0eb2}\N{U+0e94} 1",
      "\N{U+0ec4}\N{U+0e95}\N{U+0ea3}\N{U+0ea1}\N{U+0eb2}\N{U+0e94} 2",
      "\N{U+0ec4}\N{U+0e95}\N{U+0ea3}\N{U+0ea1}\N{U+0eb2}\N{U+0e94} 3",
      "\N{U+0ec4}\N{U+0e95}\N{U+0ea3}\N{U+0ea1}\N{U+0eb2}\N{U+0e94} 4"
    ],
    script => undef,
    territory => "Laos",
    time_format_full => "H \N{U+0ec2}\N{U+0ea1}\N{U+0e87} m \N{U+0e99}\N{U+0eb2}\N{U+0e97}\N{U+0eb5} ss \N{U+0ea7}\N{U+0eb4}\N{U+0e99}\N{U+0eb2}\N{U+0e97}\N{U+0eb5} zzzz",
    time_format_long => "H \N{U+0ec2}\N{U+0ea1}\N{U+0e87} m \N{U+0e99}\N{U+0eb2}\N{U+0e97}\N{U+0eb5} ss \N{U+0ea7}\N{U+0eb4}\N{U+0e99}\N{U+0eb2}\N{U+0e97}\N{U+0eb5} z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ lrc ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "lrc",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Northern Luri",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+06a4}\N{U+06cc}\N{U+06d5}",
      "\N{U+0641}\N{U+0626}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+06d5}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0623}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0644}\N{U+0627}",
      "\N{U+0622}\N{U+06af}\N{U+0648}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+0626}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+0626}\N{U+0648}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+06a4}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+06a4}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+062f}\N{U+0626}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0631}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+06a4}\N{U+06cc}\N{U+06d5}",
      "\N{U+0641}\N{U+0626}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+06d5}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0623}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0644}\N{U+0627}",
      "\N{U+0622}\N{U+06af}\N{U+0648}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+0626}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+0626}\N{U+0648}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+06a4}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+06a4}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+062f}\N{U+0626}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+06a4}\N{U+06cc}\N{U+06d5}",
      "\N{U+0641}\N{U+0626}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+06d5}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0623}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0644}\N{U+0627}",
      "\N{U+0622}\N{U+06af}\N{U+0648}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+0626}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+0626}\N{U+0648}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+06a4}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+06a4}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+062f}\N{U+0626}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+06a4}\N{U+06cc}\N{U+06d5}",
      "\N{U+0641}\N{U+0626}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+06d5}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0623}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0644}\N{U+0627}",
      "\N{U+0622}\N{U+06af}\N{U+0648}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+0626}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+0626}\N{U+0648}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+06a4}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+06a4}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+062f}\N{U+0626}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0631}"
    ],
    name => "Northern Luri",
    native_language => "\N{U+0644}\N{U+06ca}\N{U+0631}\N{U+06cc} \N{U+0634}\N{U+0648}\N{U+0645}\N{U+0627}\N{U+0644}\N{U+06cc}",
    native_name => "\N{U+0644}\N{U+06ca}\N{U+0631}\N{U+06cc} \N{U+0634}\N{U+0648}\N{U+0645}\N{U+0627}\N{U+0644}\N{U+06cc}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0623}\N{U+06a9} \N{U+0623}\N{U+06a4}\N{U+0623}\N{U+0644}",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0623}\N{U+06a9} \N{U+0623}\N{U+06a4}\N{U+0623}\N{U+0644}",
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0623}\N{U+06a9} \N{U+062f}\N{U+0648}\N{U+06cc}\N{U+0648}\N{U+0645}",
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0623}\N{U+06a9} \N{U+0633}\N{U+0626}\N{U+06cc}\N{U+0648}\N{U+0645}",
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0623}\N{U+06a9} \N{U+0686}\N{U+0627}\N{U+0631}\N{U+0648}\N{U+0645}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ lrc-IQ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "lrc-IQ",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Northern Luri",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+06a4}\N{U+06cc}\N{U+06d5}",
      "\N{U+0641}\N{U+0626}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+06d5}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0623}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0644}\N{U+0627}",
      "\N{U+0622}\N{U+06af}\N{U+0648}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+0626}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+0626}\N{U+0648}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+06a4}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+06a4}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+062f}\N{U+0626}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0631}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+06a4}\N{U+06cc}\N{U+06d5}",
      "\N{U+0641}\N{U+0626}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+06d5}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0623}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0644}\N{U+0627}",
      "\N{U+0622}\N{U+06af}\N{U+0648}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+0626}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+0626}\N{U+0648}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+06a4}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+06a4}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+062f}\N{U+0626}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+06a4}\N{U+06cc}\N{U+06d5}",
      "\N{U+0641}\N{U+0626}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+06d5}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0623}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0644}\N{U+0627}",
      "\N{U+0622}\N{U+06af}\N{U+0648}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+0626}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+0626}\N{U+0648}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+06a4}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+06a4}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+062f}\N{U+0626}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+06a4}\N{U+06cc}\N{U+06d5}",
      "\N{U+0641}\N{U+0626}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+06d5}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0623}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0644}\N{U+0627}",
      "\N{U+0622}\N{U+06af}\N{U+0648}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+0626}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+0626}\N{U+0648}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+06a4}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+06a4}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+062f}\N{U+0626}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0631}"
    ],
    name => "Northern Luri Iraq",
    native_language => "\N{U+0644}\N{U+06ca}\N{U+0631}\N{U+06cc} \N{U+0634}\N{U+0648}\N{U+0645}\N{U+0627}\N{U+0644}\N{U+06cc}",
    native_name => "\N{U+0644}\N{U+06ca}\N{U+0631}\N{U+06cc} \N{U+0634}\N{U+0648}\N{U+0645}\N{U+0627}\N{U+0644}\N{U+06cc} IQ",
    native_script => undef,
    native_territory => "IQ",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0623}\N{U+06a9} \N{U+0623}\N{U+06a4}\N{U+0623}\N{U+0644}",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0623}\N{U+06a9} \N{U+0623}\N{U+06a4}\N{U+0623}\N{U+0644}",
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0623}\N{U+06a9} \N{U+062f}\N{U+0648}\N{U+06cc}\N{U+0648}\N{U+0645}",
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0623}\N{U+06a9} \N{U+0633}\N{U+0626}\N{U+06cc}\N{U+0648}\N{U+0645}",
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0623}\N{U+06a9} \N{U+0686}\N{U+0627}\N{U+0631}\N{U+0648}\N{U+0645}"
    ],
    script => undef,
    territory => "Iraq",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ lrc-IR ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "lrc-IR",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Northern Luri",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+06a4}\N{U+06cc}\N{U+06d5}",
      "\N{U+0641}\N{U+0626}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+06d5}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0623}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0644}\N{U+0627}",
      "\N{U+0622}\N{U+06af}\N{U+0648}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+0626}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+0626}\N{U+0648}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+06a4}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+06a4}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+062f}\N{U+0626}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0631}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+06a4}\N{U+06cc}\N{U+06d5}",
      "\N{U+0641}\N{U+0626}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+06d5}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0623}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0644}\N{U+0627}",
      "\N{U+0622}\N{U+06af}\N{U+0648}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+0626}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+0626}\N{U+0648}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+06a4}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+06a4}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+062f}\N{U+0626}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+06a4}\N{U+06cc}\N{U+06d5}",
      "\N{U+0641}\N{U+0626}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+06d5}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0623}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0644}\N{U+0627}",
      "\N{U+0622}\N{U+06af}\N{U+0648}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+0626}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+0626}\N{U+0648}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+06a4}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+06a4}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+062f}\N{U+0626}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+062c}\N{U+0627}\N{U+0646}\N{U+06a4}\N{U+06cc}\N{U+06d5}",
      "\N{U+0641}\N{U+0626}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+06d5}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+06a4}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0623}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0659}\N{U+0644}\N{U+0627}",
      "\N{U+0622}\N{U+06af}\N{U+0648}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+0626}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+0626}\N{U+0648}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+06a4}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+06a4}\N{U+0627}\N{U+0645}\N{U+0631}",
      "\N{U+062f}\N{U+0626}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0631}"
    ],
    name => "Northern Luri Iran",
    native_language => "\N{U+0644}\N{U+06ca}\N{U+0631}\N{U+06cc} \N{U+0634}\N{U+0648}\N{U+0645}\N{U+0627}\N{U+0644}\N{U+06cc}",
    native_name => "\N{U+0644}\N{U+06ca}\N{U+0631}\N{U+06cc} \N{U+0634}\N{U+0648}\N{U+0645}\N{U+0627}\N{U+0644}\N{U+06cc} IR",
    native_script => undef,
    native_territory => "IR",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0623}\N{U+06a9} \N{U+0623}\N{U+06a4}\N{U+0623}\N{U+0644}",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0623}\N{U+06a9} \N{U+0623}\N{U+06a4}\N{U+0623}\N{U+0644}",
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0623}\N{U+06a9} \N{U+062f}\N{U+0648}\N{U+06cc}\N{U+0648}\N{U+0645}",
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0623}\N{U+06a9} \N{U+0633}\N{U+0626}\N{U+06cc}\N{U+0648}\N{U+0645}",
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0623}\N{U+06a9} \N{U+0686}\N{U+0627}\N{U+0631}\N{U+0648}\N{U+0645}"
    ],
    script => undef,
    territory => "Iran",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ lt ]__
  {
    am_pm_abbreviated => [
      "prie\N{U+0161}piet",
      "popiet"
    ],
    available_formats => {
      E => "ccc",
      EHm => "HH:mm, E",
      EHms => "HH:mm:ss, E",
      Ed => "d, E",
      Ehm => "hh:mm a, E",
      Ehms => "hh:mm:ss a, E",
      Gy => "y 'm'. G",
      GyMMM => "y-MM G",
      GyMMMEd => "y-MM-dd G, E",
      GyMMMM => "y 'm'. G, LLLL",
      GyMMMMEd => "y 'm'. G MMMM d 'd'., E",
      GyMMMMd => "y 'm'. G MMMM d 'd'.",
      GyMMMd => "y-MM-dd G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss; v",
      Hmv => "HH:mm; v",
      M => "MM",
      MEd => "MM-dd, E",
      MMM => "MM",
      MMMEd => "MM-dd, E",
      MMMM => "LLLL",
      MMMMEd => "MMMM d 'd'., E",
      MMMMd => "MMMM d 'd'.",
      MMMd => "MM-dd",
      MMdd => "MM-dd",
      Md => "MM-d",
      d => "dd",
      h => "hh a",
      hm => "hh:mm a",
      hms => "hh:mm:ss a",
      hmsv => "hh:mm:ss a; v",
      hmv => "hh:mm a; v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y-MM",
      yMMMEd => "y-MM-dd, E",
      yMMMM => "y 'm'. LLLL",
      yMMMMEd => "y 'm'. MMMM d 'd'., E",
      yMMMMd => "y 'm'. MMMM d 'd'.",
      yMMMd => "y-MM-dd",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "lt",
    date_format_full => "y 'm'. MMMM d 'd'., EEEE",
    date_format_long => "y 'm'. MMMM d 'd'.",
    date_format_medium => "y-MM-dd",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "pr",
      "an",
      "tr",
      "kt",
      "pn",
      "\N{U+0161}t",
      "sk"
    ],
    day_format_narrow => [
      "P",
      "A",
      "T",
      "K",
      "P",
      "\N{U+0160}",
      "S"
    ],
    day_format_wide => [
      "pirmadienis",
      "antradienis",
      "tre\N{U+010d}iadienis",
      "ketvirtadienis",
      "penktadienis",
      "\N{U+0161}e\N{U+0161}tadienis",
      "sekmadienis"
    ],
    day_stand_alone_abbreviated => [
      "pr",
      "an",
      "tr",
      "kt",
      "pn",
      "\N{U+0161}t",
      "sk"
    ],
    day_stand_alone_narrow => [
      "P",
      "A",
      "T",
      "K",
      "P",
      "\N{U+0160}",
      "S"
    ],
    day_stand_alone_wide => [
      "pirmadienis",
      "antradienis",
      "tre\N{U+010d}iadienis",
      "ketvirtadienis",
      "penktadienis",
      "\N{U+0161}e\N{U+0161}tadienis",
      "sekmadienis"
    ],
    era_abbreviated => [
      "pr. Kr.",
      "po Kr."
    ],
    era_narrow => [
      "pr. Kr.",
      "po Kr."
    ],
    era_wide => [
      "prie\N{U+0161} Krist\N{U+0173}",
      "po Kristaus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Lithuanian",
    month_format_abbreviated => [
      "saus.",
      "vas.",
      "kov.",
      "bal.",
      "geg.",
      "bir\N{U+017e}.",
      "liep.",
      "rugp.",
      "rugs.",
      "spal.",
      "lapkr.",
      "gruod."
    ],
    month_format_narrow => [
      "S",
      "V",
      "K",
      "B",
      "G",
      "B",
      "L",
      "R",
      "R",
      "S",
      "L",
      "G"
    ],
    month_format_wide => [
      "sausio",
      "vasario",
      "kovo",
      "baland\N{U+017e}io",
      "gegu\N{U+017e}\N{U+0117}s",
      "bir\N{U+017e}elio",
      "liepos",
      "rugpj\N{U+016b}\N{U+010d}io",
      "rugs\N{U+0117}jo",
      "spalio",
      "lapkri\N{U+010d}io",
      "gruod\N{U+017e}io"
    ],
    month_stand_alone_abbreviated => [
      "saus.",
      "vas.",
      "kov.",
      "bal.",
      "geg.",
      "bir\N{U+017e}.",
      "liep.",
      "rugp.",
      "rugs.",
      "spal.",
      "lapkr.",
      "gruod."
    ],
    month_stand_alone_narrow => [
      "S",
      "V",
      "K",
      "B",
      "G",
      "B",
      "L",
      "R",
      "R",
      "S",
      "L",
      "G"
    ],
    month_stand_alone_wide => [
      "sausis",
      "vasaris",
      "kovas",
      "balandis",
      "gegu\N{U+017e}\N{U+0117}",
      "bir\N{U+017e}elis",
      "liepa",
      "rugpj\N{U+016b}tis",
      "rugs\N{U+0117}jis",
      "spalis",
      "lapkritis",
      "gruodis"
    ],
    name => "Lithuanian",
    native_language => "lietuvi\N{U+0173}",
    native_name => "lietuvi\N{U+0173}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "I k.",
      "II k.",
      "III k.",
      "IV k."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "I ketvirtis",
      "II ketvirtis",
      "III ketvirtis",
      "IV ketvirtis"
    ],
    quarter_stand_alone_abbreviated => [
      "I ketv.",
      "II ketv.",
      "III ketv.",
      "IV ketv."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "I ketvirtis",
      "II ketvirtis",
      "III ketvirtis",
      "IV ketvirtis"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ lt-LT ]__
  {
    am_pm_abbreviated => [
      "prie\N{U+0161}piet",
      "popiet"
    ],
    available_formats => {
      E => "ccc",
      EHm => "HH:mm, E",
      EHms => "HH:mm:ss, E",
      Ed => "d, E",
      Ehm => "hh:mm a, E",
      Ehms => "hh:mm:ss a, E",
      Gy => "y 'm'. G",
      GyMMM => "y-MM G",
      GyMMMEd => "y-MM-dd G, E",
      GyMMMM => "y 'm'. G, LLLL",
      GyMMMMEd => "y 'm'. G MMMM d 'd'., E",
      GyMMMMd => "y 'm'. G MMMM d 'd'.",
      GyMMMd => "y-MM-dd G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss; v",
      Hmv => "HH:mm; v",
      M => "MM",
      MEd => "MM-dd, E",
      MMM => "MM",
      MMMEd => "MM-dd, E",
      MMMM => "LLLL",
      MMMMEd => "MMMM d 'd'., E",
      MMMMd => "MMMM d 'd'.",
      MMMd => "MM-dd",
      MMdd => "MM-dd",
      Md => "MM-d",
      d => "dd",
      h => "hh a",
      hm => "hh:mm a",
      hms => "hh:mm:ss a",
      hmsv => "hh:mm:ss a; v",
      hmv => "hh:mm a; v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y-MM",
      yMMMEd => "y-MM-dd, E",
      yMMMM => "y 'm'. LLLL",
      yMMMMEd => "y 'm'. MMMM d 'd'., E",
      yMMMMd => "y 'm'. MMMM d 'd'.",
      yMMMd => "y-MM-dd",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "lt-LT",
    date_format_full => "y 'm'. MMMM d 'd'., EEEE",
    date_format_long => "y 'm'. MMMM d 'd'.",
    date_format_medium => "y-MM-dd",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "pr",
      "an",
      "tr",
      "kt",
      "pn",
      "\N{U+0161}t",
      "sk"
    ],
    day_format_narrow => [
      "P",
      "A",
      "T",
      "K",
      "P",
      "\N{U+0160}",
      "S"
    ],
    day_format_wide => [
      "pirmadienis",
      "antradienis",
      "tre\N{U+010d}iadienis",
      "ketvirtadienis",
      "penktadienis",
      "\N{U+0161}e\N{U+0161}tadienis",
      "sekmadienis"
    ],
    day_stand_alone_abbreviated => [
      "pr",
      "an",
      "tr",
      "kt",
      "pn",
      "\N{U+0161}t",
      "sk"
    ],
    day_stand_alone_narrow => [
      "P",
      "A",
      "T",
      "K",
      "P",
      "\N{U+0160}",
      "S"
    ],
    day_stand_alone_wide => [
      "pirmadienis",
      "antradienis",
      "tre\N{U+010d}iadienis",
      "ketvirtadienis",
      "penktadienis",
      "\N{U+0161}e\N{U+0161}tadienis",
      "sekmadienis"
    ],
    era_abbreviated => [
      "pr. Kr.",
      "po Kr."
    ],
    era_narrow => [
      "pr. Kr.",
      "po Kr."
    ],
    era_wide => [
      "prie\N{U+0161} Krist\N{U+0173}",
      "po Kristaus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%Y.%m.%d",
    glibc_datetime_format => "%Y m. %B %d d. %T",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Lithuanian",
    month_format_abbreviated => [
      "saus.",
      "vas.",
      "kov.",
      "bal.",
      "geg.",
      "bir\N{U+017e}.",
      "liep.",
      "rugp.",
      "rugs.",
      "spal.",
      "lapkr.",
      "gruod."
    ],
    month_format_narrow => [
      "S",
      "V",
      "K",
      "B",
      "G",
      "B",
      "L",
      "R",
      "R",
      "S",
      "L",
      "G"
    ],
    month_format_wide => [
      "sausio",
      "vasario",
      "kovo",
      "baland\N{U+017e}io",
      "gegu\N{U+017e}\N{U+0117}s",
      "bir\N{U+017e}elio",
      "liepos",
      "rugpj\N{U+016b}\N{U+010d}io",
      "rugs\N{U+0117}jo",
      "spalio",
      "lapkri\N{U+010d}io",
      "gruod\N{U+017e}io"
    ],
    month_stand_alone_abbreviated => [
      "saus.",
      "vas.",
      "kov.",
      "bal.",
      "geg.",
      "bir\N{U+017e}.",
      "liep.",
      "rugp.",
      "rugs.",
      "spal.",
      "lapkr.",
      "gruod."
    ],
    month_stand_alone_narrow => [
      "S",
      "V",
      "K",
      "B",
      "G",
      "B",
      "L",
      "R",
      "R",
      "S",
      "L",
      "G"
    ],
    month_stand_alone_wide => [
      "sausis",
      "vasaris",
      "kovas",
      "balandis",
      "gegu\N{U+017e}\N{U+0117}",
      "bir\N{U+017e}elis",
      "liepa",
      "rugpj\N{U+016b}tis",
      "rugs\N{U+0117}jis",
      "spalis",
      "lapkritis",
      "gruodis"
    ],
    name => "Lithuanian Lithuania",
    native_language => "lietuvi\N{U+0173}",
    native_name => "lietuvi\N{U+0173} Lietuva",
    native_script => undef,
    native_territory => "Lietuva",
    native_variant => undef,
    quarter_format_abbreviated => [
      "I k.",
      "II k.",
      "III k.",
      "IV k."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "I ketvirtis",
      "II ketvirtis",
      "III ketvirtis",
      "IV ketvirtis"
    ],
    quarter_stand_alone_abbreviated => [
      "I ketv.",
      "II ketv.",
      "III ketv.",
      "IV ketv."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "I ketvirtis",
      "II ketvirtis",
      "III ketvirtis",
      "IV ketvirtis"
    ],
    script => undef,
    territory => "Lithuania",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ lu ]__
  {
    am_pm_abbreviated => [
      "Dinda",
      "Dilolo"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "lu",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Nko",
      "Ndy",
      "Ndg",
      "Njw",
      "Ngv",
      "Lub",
      "Lum"
    ],
    day_format_narrow => [
      "N",
      "N",
      "N",
      "N",
      "N",
      "L",
      "L"
    ],
    day_format_wide => [
      "Nkodya",
      "Nd\N{U+00e0}ay\N{U+00e0}",
      "Ndang\N{U+00f9}",
      "Nj\N{U+00f2}wa",
      "Ng\N{U+00f2}vya",
      "Lubingu",
      "Lumingu"
    ],
    day_stand_alone_abbreviated => [
      "Nko",
      "Ndy",
      "Ndg",
      "Njw",
      "Ngv",
      "Lub",
      "Lum"
    ],
    day_stand_alone_narrow => [
      "N",
      "N",
      "N",
      "N",
      "N",
      "L",
      "L"
    ],
    day_stand_alone_wide => [
      "Nkodya",
      "Nd\N{U+00e0}ay\N{U+00e0}",
      "Ndang\N{U+00f9}",
      "Nj\N{U+00f2}wa",
      "Ng\N{U+00f2}vya",
      "Lubingu",
      "Lumingu"
    ],
    era_abbreviated => [
      "kmp. Y.K.",
      "kny. Y. K."
    ],
    era_narrow => [
      "kmp. Y.K.",
      "kny. Y. K."
    ],
    era_wide => [
      "Kumpala kwa Yezu Kli",
      "Kunyima kwa Yezu Kli"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Luba-Katanga",
    month_format_abbreviated => [
      "Cio",
      "Lui",
      "Lus",
      "Muu",
      "Lum",
      "Luf",
      "Kab",
      "Lush",
      "Lut",
      "Lun",
      "Kas",
      "Cis"
    ],
    month_format_narrow => [
      "C",
      "L",
      "L",
      "M",
      "L",
      "L",
      "K",
      "L",
      "L",
      "L",
      "K",
      "C"
    ],
    month_format_wide => [
      "Ciongo",
      "L\N{U+00f9}ishi",
      "Lus\N{U+00f2}lo",
      "M\N{U+00f9}uy\N{U+00e0}",
      "Lum\N{U+00f9}ng\N{U+00f9}l\N{U+00f9}",
      "Lufuimi",
      "Kab\N{U+00e0}l\N{U+00e0}sh\N{U+00ec}p\N{U+00f9}",
      "L\N{U+00f9}sh\N{U+00ec}k\N{U+00e0}",
      "Lutongolo",
      "Lung\N{U+00f9}di",
      "Kasw\N{U+00e8}k\N{U+00e8}s\N{U+00e8}",
      "Cisw\N{U+00e0}"
    ],
    month_stand_alone_abbreviated => [
      "Cio",
      "Lui",
      "Lus",
      "Muu",
      "Lum",
      "Luf",
      "Kab",
      "Lush",
      "Lut",
      "Lun",
      "Kas",
      "Cis"
    ],
    month_stand_alone_narrow => [
      "C",
      "L",
      "L",
      "M",
      "L",
      "L",
      "K",
      "L",
      "L",
      "L",
      "K",
      "C"
    ],
    month_stand_alone_wide => [
      "Ciongo",
      "L\N{U+00f9}ishi",
      "Lus\N{U+00f2}lo",
      "M\N{U+00f9}uy\N{U+00e0}",
      "Lum\N{U+00f9}ng\N{U+00f9}l\N{U+00f9}",
      "Lufuimi",
      "Kab\N{U+00e0}l\N{U+00e0}sh\N{U+00ec}p\N{U+00f9}",
      "L\N{U+00f9}sh\N{U+00ec}k\N{U+00e0}",
      "Lutongolo",
      "Lung\N{U+00f9}di",
      "Kasw\N{U+00e8}k\N{U+00e8}s\N{U+00e8}",
      "Cisw\N{U+00e0}"
    ],
    name => "Luba-Katanga",
    native_language => "Tshiluba",
    native_name => "Tshiluba",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "M1",
      "M2",
      "M3",
      "M4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Mueji 1",
      "Mueji 2",
      "Mueji 3",
      "Mueji 4"
    ],
    quarter_stand_alone_abbreviated => [
      "M1",
      "M2",
      "M3",
      "M4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Mueji 1",
      "Mueji 2",
      "Mueji 3",
      "Mueji 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ lu-CD ]__
  {
    am_pm_abbreviated => [
      "Dinda",
      "Dilolo"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "lu-CD",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Nko",
      "Ndy",
      "Ndg",
      "Njw",
      "Ngv",
      "Lub",
      "Lum"
    ],
    day_format_narrow => [
      "N",
      "N",
      "N",
      "N",
      "N",
      "L",
      "L"
    ],
    day_format_wide => [
      "Nkodya",
      "Nd\N{U+00e0}ay\N{U+00e0}",
      "Ndang\N{U+00f9}",
      "Nj\N{U+00f2}wa",
      "Ng\N{U+00f2}vya",
      "Lubingu",
      "Lumingu"
    ],
    day_stand_alone_abbreviated => [
      "Nko",
      "Ndy",
      "Ndg",
      "Njw",
      "Ngv",
      "Lub",
      "Lum"
    ],
    day_stand_alone_narrow => [
      "N",
      "N",
      "N",
      "N",
      "N",
      "L",
      "L"
    ],
    day_stand_alone_wide => [
      "Nkodya",
      "Nd\N{U+00e0}ay\N{U+00e0}",
      "Ndang\N{U+00f9}",
      "Nj\N{U+00f2}wa",
      "Ng\N{U+00f2}vya",
      "Lubingu",
      "Lumingu"
    ],
    era_abbreviated => [
      "kmp. Y.K.",
      "kny. Y. K."
    ],
    era_narrow => [
      "kmp. Y.K.",
      "kny. Y. K."
    ],
    era_wide => [
      "Kumpala kwa Yezu Kli",
      "Kunyima kwa Yezu Kli"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Luba-Katanga",
    month_format_abbreviated => [
      "Cio",
      "Lui",
      "Lus",
      "Muu",
      "Lum",
      "Luf",
      "Kab",
      "Lush",
      "Lut",
      "Lun",
      "Kas",
      "Cis"
    ],
    month_format_narrow => [
      "C",
      "L",
      "L",
      "M",
      "L",
      "L",
      "K",
      "L",
      "L",
      "L",
      "K",
      "C"
    ],
    month_format_wide => [
      "Ciongo",
      "L\N{U+00f9}ishi",
      "Lus\N{U+00f2}lo",
      "M\N{U+00f9}uy\N{U+00e0}",
      "Lum\N{U+00f9}ng\N{U+00f9}l\N{U+00f9}",
      "Lufuimi",
      "Kab\N{U+00e0}l\N{U+00e0}sh\N{U+00ec}p\N{U+00f9}",
      "L\N{U+00f9}sh\N{U+00ec}k\N{U+00e0}",
      "Lutongolo",
      "Lung\N{U+00f9}di",
      "Kasw\N{U+00e8}k\N{U+00e8}s\N{U+00e8}",
      "Cisw\N{U+00e0}"
    ],
    month_stand_alone_abbreviated => [
      "Cio",
      "Lui",
      "Lus",
      "Muu",
      "Lum",
      "Luf",
      "Kab",
      "Lush",
      "Lut",
      "Lun",
      "Kas",
      "Cis"
    ],
    month_stand_alone_narrow => [
      "C",
      "L",
      "L",
      "M",
      "L",
      "L",
      "K",
      "L",
      "L",
      "L",
      "K",
      "C"
    ],
    month_stand_alone_wide => [
      "Ciongo",
      "L\N{U+00f9}ishi",
      "Lus\N{U+00f2}lo",
      "M\N{U+00f9}uy\N{U+00e0}",
      "Lum\N{U+00f9}ng\N{U+00f9}l\N{U+00f9}",
      "Lufuimi",
      "Kab\N{U+00e0}l\N{U+00e0}sh\N{U+00ec}p\N{U+00f9}",
      "L\N{U+00f9}sh\N{U+00ec}k\N{U+00e0}",
      "Lutongolo",
      "Lung\N{U+00f9}di",
      "Kasw\N{U+00e8}k\N{U+00e8}s\N{U+00e8}",
      "Cisw\N{U+00e0}"
    ],
    name => "Luba-Katanga Congo - Kinshasa",
    native_language => "Tshiluba",
    native_name => "Tshiluba Ditunga wa Kongu",
    native_script => undef,
    native_territory => "Ditunga wa Kongu",
    native_variant => undef,
    quarter_format_abbreviated => [
      "M1",
      "M2",
      "M3",
      "M4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Mueji 1",
      "Mueji 2",
      "Mueji 3",
      "Mueji 4"
    ],
    quarter_stand_alone_abbreviated => [
      "M1",
      "M2",
      "M3",
      "M4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Mueji 1",
      "Mueji 2",
      "Mueji 3",
      "Mueji 4"
    ],
    script => undef,
    territory => "Congo - Kinshasa",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ luo ]__
  {
    am_pm_abbreviated => [
      "OD",
      "OT"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "luo",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "WUT",
      "TAR",
      "TAD",
      "TAN",
      "TAB",
      "NGS",
      "JMP"
    ],
    day_format_narrow => [
      "W",
      "T",
      "T",
      "T",
      "T",
      "N",
      "J"
    ],
    day_format_wide => [
      "Wuok Tich",
      "Tich Ariyo",
      "Tich Adek",
      "Tich Ang\N{U+2019}wen",
      "Tich Abich",
      "Ngeso",
      "Jumapil"
    ],
    day_stand_alone_abbreviated => [
      "WUT",
      "TAR",
      "TAD",
      "TAN",
      "TAB",
      "NGS",
      "JMP"
    ],
    day_stand_alone_narrow => [
      "W",
      "T",
      "T",
      "T",
      "T",
      "N",
      "J"
    ],
    day_stand_alone_wide => [
      "Wuok Tich",
      "Tich Ariyo",
      "Tich Adek",
      "Tich Ang\N{U+2019}wen",
      "Tich Abich",
      "Ngeso",
      "Jumapil"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Kapok Kristo obiro",
      "Ka Kristo osebiro"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Luo",
    month_format_abbreviated => [
      "DAC",
      "DAR",
      "DAD",
      "DAN",
      "DAH",
      "DAU",
      "DAO",
      "DAB",
      "DOC",
      "DAP",
      "DGI",
      "DAG"
    ],
    month_format_narrow => [
      "C",
      "R",
      "D",
      "N",
      "B",
      "U",
      "B",
      "B",
      "C",
      "P",
      "C",
      "P"
    ],
    month_format_wide => [
      "Dwe mar Achiel",
      "Dwe mar Ariyo",
      "Dwe mar Adek",
      "Dwe mar Ang\N{U+2019}wen",
      "Dwe mar Abich",
      "Dwe mar Auchiel",
      "Dwe mar Abiriyo",
      "Dwe mar Aboro",
      "Dwe mar Ochiko",
      "Dwe mar Apar",
      "Dwe mar gi achiel",
      "Dwe mar Apar gi ariyo"
    ],
    month_stand_alone_abbreviated => [
      "DAC",
      "DAR",
      "DAD",
      "DAN",
      "DAH",
      "DAU",
      "DAO",
      "DAB",
      "DOC",
      "DAP",
      "DGI",
      "DAG"
    ],
    month_stand_alone_narrow => [
      "C",
      "R",
      "D",
      "N",
      "B",
      "U",
      "B",
      "B",
      "C",
      "P",
      "C",
      "P"
    ],
    month_stand_alone_wide => [
      "Dwe mar Achiel",
      "Dwe mar Ariyo",
      "Dwe mar Adek",
      "Dwe mar Ang\N{U+2019}wen",
      "Dwe mar Abich",
      "Dwe mar Auchiel",
      "Dwe mar Abiriyo",
      "Dwe mar Aboro",
      "Dwe mar Ochiko",
      "Dwe mar Apar",
      "Dwe mar gi achiel",
      "Dwe mar Apar gi ariyo"
    ],
    name => "Luo",
    native_language => "Dholuo",
    native_name => "Dholuo",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "NMN1",
      "NMN2",
      "NMN3",
      "NMN4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "nus mar nus 1",
      "nus mar nus 2",
      "nus mar nus 3",
      "nus mar nus 4"
    ],
    quarter_stand_alone_abbreviated => [
      "NMN1",
      "NMN2",
      "NMN3",
      "NMN4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "nus mar nus 1",
      "nus mar nus 2",
      "nus mar nus 3",
      "nus mar nus 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ luo-KE ]__
  {
    am_pm_abbreviated => [
      "OD",
      "OT"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "luo-KE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "WUT",
      "TAR",
      "TAD",
      "TAN",
      "TAB",
      "NGS",
      "JMP"
    ],
    day_format_narrow => [
      "W",
      "T",
      "T",
      "T",
      "T",
      "N",
      "J"
    ],
    day_format_wide => [
      "Wuok Tich",
      "Tich Ariyo",
      "Tich Adek",
      "Tich Ang\N{U+2019}wen",
      "Tich Abich",
      "Ngeso",
      "Jumapil"
    ],
    day_stand_alone_abbreviated => [
      "WUT",
      "TAR",
      "TAD",
      "TAN",
      "TAB",
      "NGS",
      "JMP"
    ],
    day_stand_alone_narrow => [
      "W",
      "T",
      "T",
      "T",
      "T",
      "N",
      "J"
    ],
    day_stand_alone_wide => [
      "Wuok Tich",
      "Tich Ariyo",
      "Tich Adek",
      "Tich Ang\N{U+2019}wen",
      "Tich Abich",
      "Ngeso",
      "Jumapil"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Kapok Kristo obiro",
      "Ka Kristo osebiro"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Luo",
    month_format_abbreviated => [
      "DAC",
      "DAR",
      "DAD",
      "DAN",
      "DAH",
      "DAU",
      "DAO",
      "DAB",
      "DOC",
      "DAP",
      "DGI",
      "DAG"
    ],
    month_format_narrow => [
      "C",
      "R",
      "D",
      "N",
      "B",
      "U",
      "B",
      "B",
      "C",
      "P",
      "C",
      "P"
    ],
    month_format_wide => [
      "Dwe mar Achiel",
      "Dwe mar Ariyo",
      "Dwe mar Adek",
      "Dwe mar Ang\N{U+2019}wen",
      "Dwe mar Abich",
      "Dwe mar Auchiel",
      "Dwe mar Abiriyo",
      "Dwe mar Aboro",
      "Dwe mar Ochiko",
      "Dwe mar Apar",
      "Dwe mar gi achiel",
      "Dwe mar Apar gi ariyo"
    ],
    month_stand_alone_abbreviated => [
      "DAC",
      "DAR",
      "DAD",
      "DAN",
      "DAH",
      "DAU",
      "DAO",
      "DAB",
      "DOC",
      "DAP",
      "DGI",
      "DAG"
    ],
    month_stand_alone_narrow => [
      "C",
      "R",
      "D",
      "N",
      "B",
      "U",
      "B",
      "B",
      "C",
      "P",
      "C",
      "P"
    ],
    month_stand_alone_wide => [
      "Dwe mar Achiel",
      "Dwe mar Ariyo",
      "Dwe mar Adek",
      "Dwe mar Ang\N{U+2019}wen",
      "Dwe mar Abich",
      "Dwe mar Auchiel",
      "Dwe mar Abiriyo",
      "Dwe mar Aboro",
      "Dwe mar Ochiko",
      "Dwe mar Apar",
      "Dwe mar gi achiel",
      "Dwe mar Apar gi ariyo"
    ],
    name => "Luo Kenya",
    native_language => "Dholuo",
    native_name => "Dholuo Kenya",
    native_script => undef,
    native_territory => "Kenya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "NMN1",
      "NMN2",
      "NMN3",
      "NMN4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "nus mar nus 1",
      "nus mar nus 2",
      "nus mar nus 3",
      "nus mar nus 4"
    ],
    quarter_stand_alone_abbreviated => [
      "NMN1",
      "NMN2",
      "NMN3",
      "NMN4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "nus mar nus 1",
      "nus mar nus 2",
      "nus mar nus 3",
      "nus mar nus 4"
    ],
    script => undef,
    territory => "Kenya",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ luy ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "luy",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "J3",
      "J4",
      "J5",
      "Al",
      "Ij",
      "J1",
      "J2"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Murwa wa Kanne",
      "Murwa wa Katano",
      "Jumamosi",
      "Jumapiri"
    ],
    day_stand_alone_abbreviated => [
      "J3",
      "J4",
      "J5",
      "Al",
      "Ij",
      "J1",
      "J2"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Murwa wa Kanne",
      "Murwa wa Katano",
      "Jumamosi",
      "Jumapiri"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Imberi ya Kuuza Kwa",
      "Muhiga Kuvita Kuuza"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Luyia",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Luyia",
    native_language => "Luluhia",
    native_name => "Luluhia",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo ya Kala",
      "Robo ya Kaviri",
      "Robo ya Kavaga",
      "Robo ya Kanne"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo ya Kala",
      "Robo ya Kaviri",
      "Robo ya Kavaga",
      "Robo ya Kanne"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ luy-KE ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "luy-KE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "J3",
      "J4",
      "J5",
      "Al",
      "Ij",
      "J1",
      "J2"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Murwa wa Kanne",
      "Murwa wa Katano",
      "Jumamosi",
      "Jumapiri"
    ],
    day_stand_alone_abbreviated => [
      "J3",
      "J4",
      "J5",
      "Al",
      "Ij",
      "J1",
      "J2"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Murwa wa Kanne",
      "Murwa wa Katano",
      "Jumamosi",
      "Jumapiri"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Imberi ya Kuuza Kwa",
      "Muhiga Kuvita Kuuza"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Luyia",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Luyia Kenya",
    native_language => "Luluhia",
    native_name => "Luluhia Kenya",
    native_script => undef,
    native_territory => "Kenya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo ya Kala",
      "Robo ya Kaviri",
      "Robo ya Kavaga",
      "Robo ya Kanne"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo ya Kala",
      "Robo ya Kaviri",
      "Robo ya Kavaga",
      "Robo ya Kanne"
    ],
    script => undef,
    territory => "Kenya",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ lv ]__
  {
    am_pm_abbreviated => [
      "priek\N{U+0161}p.",
      "p\N{U+0113}cp."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "G y. 'g'.",
      GyMMM => "G y. 'g'. MMM",
      GyMMMEd => "E, G y. 'g'. d. MMM",
      GyMMMd => "G y. 'g'. d. MMM",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd.MM.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      Md => "dd.MM.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y. 'g'.",
      yM => "MM.y.",
      yMEd => "E, d.M.y.",
      yMMM => "y. 'g'. MMM",
      yMMMEd => "E, y. 'g'. d. MMM",
      yMMMM => "y. 'g'. MMMM",
      yMMMd => "y. 'g'. d. MMM",
      yMd => "d.M.y.",
      yQQQ => "y. 'g'. QQQ",
      yQQQQ => "y. 'g'. QQQQ"
    },
    code => "lv",
    date_format_full => "EEEE, y. 'gada' d. MMMM",
    date_format_long => "y. 'gada' d. MMMM",
    date_format_medium => "y. 'gada' d. MMM",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Pr",
      "Ot",
      "Tr",
      "Ce",
      "Pk",
      "Se",
      "Sv"
    ],
    day_format_narrow => [
      "P",
      "O",
      "T",
      "C",
      "P",
      "S",
      "S"
    ],
    day_format_wide => [
      "pirmdiena",
      "otrdiena",
      "tre\N{U+0161}diena",
      "ceturtdiena",
      "piektdiena",
      "sestdiena",
      "sv\N{U+0113}tdiena"
    ],
    day_stand_alone_abbreviated => [
      "Pr",
      "Ot",
      "Tr",
      "Ce",
      "Pk",
      "Se",
      "Sv"
    ],
    day_stand_alone_narrow => [
      "P",
      "O",
      "T",
      "C",
      "P",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Pirmdiena",
      "Otrdiena",
      "Tre\N{U+0161}diena",
      "Ceturtdiena",
      "Piektdiena",
      "Sestdiena",
      "Sv\N{U+0113}tdiena"
    ],
    era_abbreviated => [
      "p.m.\N{U+0113}.",
      "m.\N{U+0113}."
    ],
    era_narrow => [
      "p.m.\N{U+0113}.",
      "m.\N{U+0113}."
    ],
    era_wide => [
      "pirms m\N{U+016b}su \N{U+0113}ras",
      "m\N{U+016b}su \N{U+0113}r\N{U+0101}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Latvian",
    month_format_abbreviated => [
      "janv.",
      "febr.",
      "marts",
      "apr.",
      "maijs",
      "j\N{U+016b}n.",
      "j\N{U+016b}l.",
      "aug.",
      "sept.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janv\N{U+0101}ris",
      "febru\N{U+0101}ris",
      "marts",
      "apr\N{U+012b}lis",
      "maijs",
      "j\N{U+016b}nijs",
      "j\N{U+016b}lijs",
      "augusts",
      "septembris",
      "oktobris",
      "novembris",
      "decembris"
    ],
    month_stand_alone_abbreviated => [
      "Janv.",
      "Febr.",
      "Marts",
      "Apr.",
      "Maijs",
      "J\N{U+016b}n.",
      "J\N{U+016b}l.",
      "Aug.",
      "Sept.",
      "Okt.",
      "Nov.",
      "Dec."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janv\N{U+0101}ris",
      "Febru\N{U+0101}ris",
      "Marts",
      "Apr\N{U+012b}lis",
      "Maijs",
      "J\N{U+016b}nijs",
      "J\N{U+016b}lijs",
      "Augusts",
      "Septembris",
      "Oktobris",
      "Novembris",
      "Decembris"
    ],
    name => "Latvian",
    native_language => "latvie\N{U+0161}u",
    native_name => "latvie\N{U+0161}u",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1.\N{U+00a0}cet.",
      "2.\N{U+00a0}cet.",
      "3.\N{U+00a0}cet.",
      "4.\N{U+00a0}cet."
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "1. ceturksnis",
      "2. ceturksnis",
      "3. ceturksnis",
      "4. ceturksnis"
    ],
    quarter_stand_alone_abbreviated => [
      "1.\N{U+00a0}cet.",
      "2.\N{U+00a0}cet.",
      "3.\N{U+00a0}cet.",
      "4.\N{U+00a0}cet."
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "1. ceturksnis",
      "2. ceturksnis",
      "3. ceturksnis",
      "4. ceturksnis"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ lv-LV ]__
  {
    am_pm_abbreviated => [
      "priek\N{U+0161}p.",
      "p\N{U+0113}cp."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "G y. 'g'.",
      GyMMM => "G y. 'g'. MMM",
      GyMMMEd => "E, G y. 'g'. d. MMM",
      GyMMMd => "G y. 'g'. d. MMM",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd.MM.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      Md => "dd.MM.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y. 'g'.",
      yM => "MM.y.",
      yMEd => "E, d.M.y.",
      yMMM => "y. 'g'. MMM",
      yMMMEd => "E, y. 'g'. d. MMM",
      yMMMM => "y. 'g'. MMMM",
      yMMMd => "y. 'g'. d. MMM",
      yMd => "d.M.y.",
      yQQQ => "y. 'g'. QQQ",
      yQQQQ => "y. 'g'. QQQQ"
    },
    code => "lv-LV",
    date_format_full => "EEEE, y. 'gada' d. MMMM",
    date_format_long => "y. 'gada' d. MMMM",
    date_format_medium => "y. 'gada' d. MMM",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Pr",
      "Ot",
      "Tr",
      "Ce",
      "Pk",
      "Se",
      "Sv"
    ],
    day_format_narrow => [
      "P",
      "O",
      "T",
      "C",
      "P",
      "S",
      "S"
    ],
    day_format_wide => [
      "pirmdiena",
      "otrdiena",
      "tre\N{U+0161}diena",
      "ceturtdiena",
      "piektdiena",
      "sestdiena",
      "sv\N{U+0113}tdiena"
    ],
    day_stand_alone_abbreviated => [
      "Pr",
      "Ot",
      "Tr",
      "Ce",
      "Pk",
      "Se",
      "Sv"
    ],
    day_stand_alone_narrow => [
      "P",
      "O",
      "T",
      "C",
      "P",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Pirmdiena",
      "Otrdiena",
      "Tre\N{U+0161}diena",
      "Ceturtdiena",
      "Piektdiena",
      "Sestdiena",
      "Sv\N{U+0113}tdiena"
    ],
    era_abbreviated => [
      "p.m.\N{U+0113}.",
      "m.\N{U+0113}."
    ],
    era_narrow => [
      "p.m.\N{U+0113}.",
      "m.\N{U+0113}."
    ],
    era_wide => [
      "pirms m\N{U+016b}su \N{U+0113}ras",
      "m\N{U+016b}su \N{U+0113}r\N{U+0101}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%Y.%m.%d.",
    glibc_datetime_format => "%A, %Y. gada %e. %B, plkst. %H un %M",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Latvian",
    month_format_abbreviated => [
      "janv.",
      "febr.",
      "marts",
      "apr.",
      "maijs",
      "j\N{U+016b}n.",
      "j\N{U+016b}l.",
      "aug.",
      "sept.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janv\N{U+0101}ris",
      "febru\N{U+0101}ris",
      "marts",
      "apr\N{U+012b}lis",
      "maijs",
      "j\N{U+016b}nijs",
      "j\N{U+016b}lijs",
      "augusts",
      "septembris",
      "oktobris",
      "novembris",
      "decembris"
    ],
    month_stand_alone_abbreviated => [
      "Janv.",
      "Febr.",
      "Marts",
      "Apr.",
      "Maijs",
      "J\N{U+016b}n.",
      "J\N{U+016b}l.",
      "Aug.",
      "Sept.",
      "Okt.",
      "Nov.",
      "Dec."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janv\N{U+0101}ris",
      "Febru\N{U+0101}ris",
      "Marts",
      "Apr\N{U+012b}lis",
      "Maijs",
      "J\N{U+016b}nijs",
      "J\N{U+016b}lijs",
      "Augusts",
      "Septembris",
      "Oktobris",
      "Novembris",
      "Decembris"
    ],
    name => "Latvian Latvia",
    native_language => "latvie\N{U+0161}u",
    native_name => "latvie\N{U+0161}u Latvija",
    native_script => undef,
    native_territory => "Latvija",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1.\N{U+00a0}cet.",
      "2.\N{U+00a0}cet.",
      "3.\N{U+00a0}cet.",
      "4.\N{U+00a0}cet."
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "1. ceturksnis",
      "2. ceturksnis",
      "3. ceturksnis",
      "4. ceturksnis"
    ],
    quarter_stand_alone_abbreviated => [
      "1.\N{U+00a0}cet.",
      "2.\N{U+00a0}cet.",
      "3.\N{U+00a0}cet.",
      "4.\N{U+00a0}cet."
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "1. ceturksnis",
      "2. ceturksnis",
      "3. ceturksnis",
      "4. ceturksnis"
    ],
    script => undef,
    territory => "Latvia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mas ]__
  {
    am_pm_abbreviated => [
      "\N{U+0190}nkak\N{U+025b}ny\N{U+00e1}",
      "\N{U+0190}nd\N{U+00e1}m\N{U+00e2}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "mas",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_format_narrow => [
      3,
      4,
      5,
      6,
      7,
      1,
      2
    ],
    day_format_wide => [
      "Jumat\N{U+00e1}tu",
      "Jumane",
      "Jumat\N{U+00e1}n\N{U+0254}",
      "Ala\N{U+00e1}misi",
      "Jum\N{U+00e1}a",
      "Jumam\N{U+00f3}si",
      "Jumap\N{U+00ed}l\N{U+00ed}"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_stand_alone_narrow => [
      3,
      4,
      5,
      6,
      7,
      1,
      2
    ],
    day_stand_alone_wide => [
      "Jumat\N{U+00e1}tu",
      "Jumane",
      "Jumat\N{U+00e1}n\N{U+0254}",
      "Ala\N{U+00e1}misi",
      "Jum\N{U+00e1}a",
      "Jumam\N{U+00f3}si",
      "Jumap\N{U+00ed}l\N{U+00ed}"
    ],
    era_abbreviated => [
      "MY",
      "EY"
    ],
    era_narrow => [
      "MY",
      "EY"
    ],
    era_wide => [
      "Me\N{U+00ed}n\N{U+014d} Y\N{U+025b}\N{U+0301}s\N{U+0289}",
      "E\N{U+00ed}n\N{U+014d} Y\N{U+025b}\N{U+0301}s\N{U+0289}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Masai",
    month_format_abbreviated => [
      "Dal",
      "Ar\N{U+00e1}",
      "\N{U+0186}\N{U+025b}n",
      "Doy",
      "L\N{U+00e9}p",
      "Rok",
      "S\N{U+00e1}s",
      "B\N{U+0254}\N{U+0301}r",
      "K\N{U+00fa}s",
      "G\N{U+00ed}s",
      "Sh\N{U+0289}\N{U+0301}",
      "Nt\N{U+0289}\N{U+0301}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Oladal\N{U+0289}\N{U+0301}",
      "Ar\N{U+00e1}t",
      "\N{U+0186}\N{U+025b}n\N{U+0268}\N{U+0301}\N{U+0254}\N{U+0268}\N{U+014b}\N{U+0254}k",
      "Olodoy\N{U+00ed}\N{U+00f3}r\N{U+00ed}\N{U+00ea} ink\N{U+00f3}k\N{U+00fa}\N{U+00e2}",
      "Oloil\N{U+00e9}p\N{U+016b}ny\N{U+012b}\N{U+0113} ink\N{U+00f3}k\N{U+00fa}\N{U+00e2}",
      "K\N{U+00fa}j\N{U+00fa}\N{U+0254}r\N{U+0254}k",
      "M\N{U+00f3}rus\N{U+00e1}sin",
      "\N{U+0186}l\N{U+0254}\N{U+0301}\N{U+0268}\N{U+0301}b\N{U+0254}\N{U+0301}r\N{U+00e1}r\N{U+025b}",
      "K\N{U+00fa}sh\N{U+00ee}n",
      "Olg\N{U+00ed}san",
      "P\N{U+0289}sh\N{U+0289}\N{U+0301}ka",
      "Nt\N{U+0289}\N{U+0301}\N{U+014b}\N{U+0289}\N{U+0301}s"
    ],
    month_stand_alone_abbreviated => [
      "Dal",
      "Ar\N{U+00e1}",
      "\N{U+0186}\N{U+025b}n",
      "Doy",
      "L\N{U+00e9}p",
      "Rok",
      "S\N{U+00e1}s",
      "B\N{U+0254}\N{U+0301}r",
      "K\N{U+00fa}s",
      "G\N{U+00ed}s",
      "Sh\N{U+0289}\N{U+0301}",
      "Nt\N{U+0289}\N{U+0301}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Oladal\N{U+0289}\N{U+0301}",
      "Ar\N{U+00e1}t",
      "\N{U+0186}\N{U+025b}n\N{U+0268}\N{U+0301}\N{U+0254}\N{U+0268}\N{U+014b}\N{U+0254}k",
      "Olodoy\N{U+00ed}\N{U+00f3}r\N{U+00ed}\N{U+00ea} ink\N{U+00f3}k\N{U+00fa}\N{U+00e2}",
      "Oloil\N{U+00e9}p\N{U+016b}ny\N{U+012b}\N{U+0113} ink\N{U+00f3}k\N{U+00fa}\N{U+00e2}",
      "K\N{U+00fa}j\N{U+00fa}\N{U+0254}r\N{U+0254}k",
      "M\N{U+00f3}rus\N{U+00e1}sin",
      "\N{U+0186}l\N{U+0254}\N{U+0301}\N{U+0268}\N{U+0301}b\N{U+0254}\N{U+0301}r\N{U+00e1}r\N{U+025b}",
      "K\N{U+00fa}sh\N{U+00ee}n",
      "Olg\N{U+00ed}san",
      "P\N{U+0289}sh\N{U+0289}\N{U+0301}ka",
      "Nt\N{U+0289}\N{U+0301}\N{U+014b}\N{U+0289}\N{U+0301}s"
    ],
    name => "Masai",
    native_language => "Maa",
    native_name => "Maa",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "E1",
      "E2",
      "E3",
      "E4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Erobo 1",
      "Erobo 2",
      "Erobo 3",
      "Erobo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "E1",
      "E2",
      "E3",
      "E4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Erobo 1",
      "Erobo 2",
      "Erobo 3",
      "Erobo 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mas-KE ]__
  {
    am_pm_abbreviated => [
      "\N{U+0190}nkak\N{U+025b}ny\N{U+00e1}",
      "\N{U+0190}nd\N{U+00e1}m\N{U+00e2}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "mas-KE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_format_narrow => [
      3,
      4,
      5,
      6,
      7,
      1,
      2
    ],
    day_format_wide => [
      "Jumat\N{U+00e1}tu",
      "Jumane",
      "Jumat\N{U+00e1}n\N{U+0254}",
      "Ala\N{U+00e1}misi",
      "Jum\N{U+00e1}a",
      "Jumam\N{U+00f3}si",
      "Jumap\N{U+00ed}l\N{U+00ed}"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_stand_alone_narrow => [
      3,
      4,
      5,
      6,
      7,
      1,
      2
    ],
    day_stand_alone_wide => [
      "Jumat\N{U+00e1}tu",
      "Jumane",
      "Jumat\N{U+00e1}n\N{U+0254}",
      "Ala\N{U+00e1}misi",
      "Jum\N{U+00e1}a",
      "Jumam\N{U+00f3}si",
      "Jumap\N{U+00ed}l\N{U+00ed}"
    ],
    era_abbreviated => [
      "MY",
      "EY"
    ],
    era_narrow => [
      "MY",
      "EY"
    ],
    era_wide => [
      "Me\N{U+00ed}n\N{U+014d} Y\N{U+025b}\N{U+0301}s\N{U+0289}",
      "E\N{U+00ed}n\N{U+014d} Y\N{U+025b}\N{U+0301}s\N{U+0289}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Masai",
    month_format_abbreviated => [
      "Dal",
      "Ar\N{U+00e1}",
      "\N{U+0186}\N{U+025b}n",
      "Doy",
      "L\N{U+00e9}p",
      "Rok",
      "S\N{U+00e1}s",
      "B\N{U+0254}\N{U+0301}r",
      "K\N{U+00fa}s",
      "G\N{U+00ed}s",
      "Sh\N{U+0289}\N{U+0301}",
      "Nt\N{U+0289}\N{U+0301}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Oladal\N{U+0289}\N{U+0301}",
      "Ar\N{U+00e1}t",
      "\N{U+0186}\N{U+025b}n\N{U+0268}\N{U+0301}\N{U+0254}\N{U+0268}\N{U+014b}\N{U+0254}k",
      "Olodoy\N{U+00ed}\N{U+00f3}r\N{U+00ed}\N{U+00ea} ink\N{U+00f3}k\N{U+00fa}\N{U+00e2}",
      "Oloil\N{U+00e9}p\N{U+016b}ny\N{U+012b}\N{U+0113} ink\N{U+00f3}k\N{U+00fa}\N{U+00e2}",
      "K\N{U+00fa}j\N{U+00fa}\N{U+0254}r\N{U+0254}k",
      "M\N{U+00f3}rus\N{U+00e1}sin",
      "\N{U+0186}l\N{U+0254}\N{U+0301}\N{U+0268}\N{U+0301}b\N{U+0254}\N{U+0301}r\N{U+00e1}r\N{U+025b}",
      "K\N{U+00fa}sh\N{U+00ee}n",
      "Olg\N{U+00ed}san",
      "P\N{U+0289}sh\N{U+0289}\N{U+0301}ka",
      "Nt\N{U+0289}\N{U+0301}\N{U+014b}\N{U+0289}\N{U+0301}s"
    ],
    month_stand_alone_abbreviated => [
      "Dal",
      "Ar\N{U+00e1}",
      "\N{U+0186}\N{U+025b}n",
      "Doy",
      "L\N{U+00e9}p",
      "Rok",
      "S\N{U+00e1}s",
      "B\N{U+0254}\N{U+0301}r",
      "K\N{U+00fa}s",
      "G\N{U+00ed}s",
      "Sh\N{U+0289}\N{U+0301}",
      "Nt\N{U+0289}\N{U+0301}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Oladal\N{U+0289}\N{U+0301}",
      "Ar\N{U+00e1}t",
      "\N{U+0186}\N{U+025b}n\N{U+0268}\N{U+0301}\N{U+0254}\N{U+0268}\N{U+014b}\N{U+0254}k",
      "Olodoy\N{U+00ed}\N{U+00f3}r\N{U+00ed}\N{U+00ea} ink\N{U+00f3}k\N{U+00fa}\N{U+00e2}",
      "Oloil\N{U+00e9}p\N{U+016b}ny\N{U+012b}\N{U+0113} ink\N{U+00f3}k\N{U+00fa}\N{U+00e2}",
      "K\N{U+00fa}j\N{U+00fa}\N{U+0254}r\N{U+0254}k",
      "M\N{U+00f3}rus\N{U+00e1}sin",
      "\N{U+0186}l\N{U+0254}\N{U+0301}\N{U+0268}\N{U+0301}b\N{U+0254}\N{U+0301}r\N{U+00e1}r\N{U+025b}",
      "K\N{U+00fa}sh\N{U+00ee}n",
      "Olg\N{U+00ed}san",
      "P\N{U+0289}sh\N{U+0289}\N{U+0301}ka",
      "Nt\N{U+0289}\N{U+0301}\N{U+014b}\N{U+0289}\N{U+0301}s"
    ],
    name => "Masai Kenya",
    native_language => "Maa",
    native_name => "Maa Kenya",
    native_script => undef,
    native_territory => "Kenya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "E1",
      "E2",
      "E3",
      "E4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Erobo 1",
      "Erobo 2",
      "Erobo 3",
      "Erobo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "E1",
      "E2",
      "E3",
      "E4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Erobo 1",
      "Erobo 2",
      "Erobo 3",
      "Erobo 4"
    ],
    script => undef,
    territory => "Kenya",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mas-TZ ]__
  {
    am_pm_abbreviated => [
      "\N{U+0190}nkak\N{U+025b}ny\N{U+00e1}",
      "\N{U+0190}nd\N{U+00e1}m\N{U+00e2}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "mas-TZ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_format_narrow => [
      3,
      4,
      5,
      6,
      7,
      1,
      2
    ],
    day_format_wide => [
      "Jumat\N{U+00e1}tu",
      "Jumane",
      "Jumat\N{U+00e1}n\N{U+0254}",
      "Ala\N{U+00e1}misi",
      "Jum\N{U+00e1}a",
      "Jumam\N{U+00f3}si",
      "Jumap\N{U+00ed}l\N{U+00ed}"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_stand_alone_narrow => [
      3,
      4,
      5,
      6,
      7,
      1,
      2
    ],
    day_stand_alone_wide => [
      "Jumat\N{U+00e1}tu",
      "Jumane",
      "Jumat\N{U+00e1}n\N{U+0254}",
      "Ala\N{U+00e1}misi",
      "Jum\N{U+00e1}a",
      "Jumam\N{U+00f3}si",
      "Jumap\N{U+00ed}l\N{U+00ed}"
    ],
    era_abbreviated => [
      "MY",
      "EY"
    ],
    era_narrow => [
      "MY",
      "EY"
    ],
    era_wide => [
      "Me\N{U+00ed}n\N{U+014d} Y\N{U+025b}\N{U+0301}s\N{U+0289}",
      "E\N{U+00ed}n\N{U+014d} Y\N{U+025b}\N{U+0301}s\N{U+0289}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Masai",
    month_format_abbreviated => [
      "Dal",
      "Ar\N{U+00e1}",
      "\N{U+0186}\N{U+025b}n",
      "Doy",
      "L\N{U+00e9}p",
      "Rok",
      "S\N{U+00e1}s",
      "B\N{U+0254}\N{U+0301}r",
      "K\N{U+00fa}s",
      "G\N{U+00ed}s",
      "Sh\N{U+0289}\N{U+0301}",
      "Nt\N{U+0289}\N{U+0301}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Oladal\N{U+0289}\N{U+0301}",
      "Ar\N{U+00e1}t",
      "\N{U+0186}\N{U+025b}n\N{U+0268}\N{U+0301}\N{U+0254}\N{U+0268}\N{U+014b}\N{U+0254}k",
      "Olodoy\N{U+00ed}\N{U+00f3}r\N{U+00ed}\N{U+00ea} ink\N{U+00f3}k\N{U+00fa}\N{U+00e2}",
      "Oloil\N{U+00e9}p\N{U+016b}ny\N{U+012b}\N{U+0113} ink\N{U+00f3}k\N{U+00fa}\N{U+00e2}",
      "K\N{U+00fa}j\N{U+00fa}\N{U+0254}r\N{U+0254}k",
      "M\N{U+00f3}rus\N{U+00e1}sin",
      "\N{U+0186}l\N{U+0254}\N{U+0301}\N{U+0268}\N{U+0301}b\N{U+0254}\N{U+0301}r\N{U+00e1}r\N{U+025b}",
      "K\N{U+00fa}sh\N{U+00ee}n",
      "Olg\N{U+00ed}san",
      "P\N{U+0289}sh\N{U+0289}\N{U+0301}ka",
      "Nt\N{U+0289}\N{U+0301}\N{U+014b}\N{U+0289}\N{U+0301}s"
    ],
    month_stand_alone_abbreviated => [
      "Dal",
      "Ar\N{U+00e1}",
      "\N{U+0186}\N{U+025b}n",
      "Doy",
      "L\N{U+00e9}p",
      "Rok",
      "S\N{U+00e1}s",
      "B\N{U+0254}\N{U+0301}r",
      "K\N{U+00fa}s",
      "G\N{U+00ed}s",
      "Sh\N{U+0289}\N{U+0301}",
      "Nt\N{U+0289}\N{U+0301}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Oladal\N{U+0289}\N{U+0301}",
      "Ar\N{U+00e1}t",
      "\N{U+0186}\N{U+025b}n\N{U+0268}\N{U+0301}\N{U+0254}\N{U+0268}\N{U+014b}\N{U+0254}k",
      "Olodoy\N{U+00ed}\N{U+00f3}r\N{U+00ed}\N{U+00ea} ink\N{U+00f3}k\N{U+00fa}\N{U+00e2}",
      "Oloil\N{U+00e9}p\N{U+016b}ny\N{U+012b}\N{U+0113} ink\N{U+00f3}k\N{U+00fa}\N{U+00e2}",
      "K\N{U+00fa}j\N{U+00fa}\N{U+0254}r\N{U+0254}k",
      "M\N{U+00f3}rus\N{U+00e1}sin",
      "\N{U+0186}l\N{U+0254}\N{U+0301}\N{U+0268}\N{U+0301}b\N{U+0254}\N{U+0301}r\N{U+00e1}r\N{U+025b}",
      "K\N{U+00fa}sh\N{U+00ee}n",
      "Olg\N{U+00ed}san",
      "P\N{U+0289}sh\N{U+0289}\N{U+0301}ka",
      "Nt\N{U+0289}\N{U+0301}\N{U+014b}\N{U+0289}\N{U+0301}s"
    ],
    name => "Masai Tanzania",
    native_language => "Maa",
    native_name => "Maa Tansania",
    native_script => undef,
    native_territory => "Tansania",
    native_variant => undef,
    quarter_format_abbreviated => [
      "E1",
      "E2",
      "E3",
      "E4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Erobo 1",
      "Erobo 2",
      "Erobo 3",
      "Erobo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "E1",
      "E2",
      "E3",
      "E4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Erobo 1",
      "Erobo 2",
      "Erobo 3",
      "Erobo 4"
    ],
    script => undef,
    territory => "Tanzania",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mer ]__
  {
    am_pm_abbreviated => [
      "R\N{U+0168}",
      "\N{U+0168}G"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "mer",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "MRA",
      "WAI",
      "WET",
      "WEN",
      "WTN",
      "JUM",
      "KIU"
    ],
    day_format_narrow => [
      "M",
      "W",
      "W",
      "W",
      "W",
      "J",
      "K"
    ],
    day_format_wide => [
      "Muramuko",
      "Wairi",
      "Wethatu",
      "Wena",
      "Wetano",
      "Jumamosi",
      "Kiumia"
    ],
    day_stand_alone_abbreviated => [
      "MRA",
      "WAI",
      "WET",
      "WEN",
      "WTN",
      "JUM",
      "KIU"
    ],
    day_stand_alone_narrow => [
      "M",
      "W",
      "W",
      "W",
      "W",
      "J",
      "K"
    ],
    day_stand_alone_wide => [
      "Muramuko",
      "Wairi",
      "Wethatu",
      "Wena",
      "Wetano",
      "Jumamosi",
      "Kiumia"
    ],
    era_abbreviated => [
      "MK",
      "NK"
    ],
    era_narrow => [
      "MK",
      "NK"
    ],
    era_wide => [
      "Mbere ya Krist\N{U+0169}",
      "Nyuma ya Krist\N{U+0169}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Meru",
    month_format_abbreviated => [
      "JAN",
      "FEB",
      "MAC",
      "\N{U+0128}PU",
      "M\N{U+0128}\N{U+0128}",
      "NJU",
      "NJR",
      "AGA",
      "SPT",
      "OKT",
      "NOV",
      "DEC"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "\N{U+0128}",
      "M",
      "N",
      "N",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januar\N{U+0129}",
      "Feburuar\N{U+0129}",
      "Machi",
      "\N{U+0128}pur\N{U+0169}",
      "M\N{U+0129}\N{U+0129}",
      "Njuni",
      "Njura\N{U+0129}",
      "Agasti",
      "Septemba",
      "Okt\N{U+0169}ba",
      "Novemba",
      "Dicemba"
    ],
    month_stand_alone_abbreviated => [
      "JAN",
      "FEB",
      "MAC",
      "\N{U+0128}PU",
      "M\N{U+0128}\N{U+0128}",
      "NJU",
      "NJR",
      "AGA",
      "SPT",
      "OKT",
      "NOV",
      "DEC"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "\N{U+0128}",
      "M",
      "N",
      "N",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januar\N{U+0129}",
      "Feburuar\N{U+0129}",
      "Machi",
      "\N{U+0128}pur\N{U+0169}",
      "M\N{U+0129}\N{U+0129}",
      "Njuni",
      "Njura\N{U+0129}",
      "Agasti",
      "Septemba",
      "Okt\N{U+0169}ba",
      "Novemba",
      "Dicemba"
    ],
    name => "Meru",
    native_language => "K\N{U+0129}m\N{U+0129}r\N{U+0169}",
    native_name => "K\N{U+0129}m\N{U+0129}r\N{U+0169}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0128}mwe k\N{U+0129}r\N{U+0129} inya",
      "Ij\N{U+0129}r\N{U+0129} k\N{U+0129}r\N{U+0129} inya",
      "Ithat\N{U+0169} k\N{U+0129}r\N{U+0129} inya",
      "Inya k\N{U+0129}r\N{U+0129} inya"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0128}mwe k\N{U+0129}r\N{U+0129} inya",
      "Ij\N{U+0129}r\N{U+0129} k\N{U+0129}r\N{U+0129} inya",
      "Ithat\N{U+0169} k\N{U+0129}r\N{U+0129} inya",
      "Inya k\N{U+0129}r\N{U+0129} inya"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0128}mwe k\N{U+0129}r\N{U+0129} inya",
      "Ij\N{U+0129}r\N{U+0129} k\N{U+0129}r\N{U+0129} inya",
      "Ithat\N{U+0169} k\N{U+0129}r\N{U+0129} inya",
      "Inya k\N{U+0129}r\N{U+0129} inya"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0128}mwe k\N{U+0129}r\N{U+0129} inya",
      "Ij\N{U+0129}r\N{U+0129} k\N{U+0129}r\N{U+0129} inya",
      "Ithat\N{U+0169} k\N{U+0129}r\N{U+0129} inya",
      "Inya k\N{U+0129}r\N{U+0129} inya"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mer-KE ]__
  {
    am_pm_abbreviated => [
      "R\N{U+0168}",
      "\N{U+0168}G"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "mer-KE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "MRA",
      "WAI",
      "WET",
      "WEN",
      "WTN",
      "JUM",
      "KIU"
    ],
    day_format_narrow => [
      "M",
      "W",
      "W",
      "W",
      "W",
      "J",
      "K"
    ],
    day_format_wide => [
      "Muramuko",
      "Wairi",
      "Wethatu",
      "Wena",
      "Wetano",
      "Jumamosi",
      "Kiumia"
    ],
    day_stand_alone_abbreviated => [
      "MRA",
      "WAI",
      "WET",
      "WEN",
      "WTN",
      "JUM",
      "KIU"
    ],
    day_stand_alone_narrow => [
      "M",
      "W",
      "W",
      "W",
      "W",
      "J",
      "K"
    ],
    day_stand_alone_wide => [
      "Muramuko",
      "Wairi",
      "Wethatu",
      "Wena",
      "Wetano",
      "Jumamosi",
      "Kiumia"
    ],
    era_abbreviated => [
      "MK",
      "NK"
    ],
    era_narrow => [
      "MK",
      "NK"
    ],
    era_wide => [
      "Mbere ya Krist\N{U+0169}",
      "Nyuma ya Krist\N{U+0169}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Meru",
    month_format_abbreviated => [
      "JAN",
      "FEB",
      "MAC",
      "\N{U+0128}PU",
      "M\N{U+0128}\N{U+0128}",
      "NJU",
      "NJR",
      "AGA",
      "SPT",
      "OKT",
      "NOV",
      "DEC"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "\N{U+0128}",
      "M",
      "N",
      "N",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januar\N{U+0129}",
      "Feburuar\N{U+0129}",
      "Machi",
      "\N{U+0128}pur\N{U+0169}",
      "M\N{U+0129}\N{U+0129}",
      "Njuni",
      "Njura\N{U+0129}",
      "Agasti",
      "Septemba",
      "Okt\N{U+0169}ba",
      "Novemba",
      "Dicemba"
    ],
    month_stand_alone_abbreviated => [
      "JAN",
      "FEB",
      "MAC",
      "\N{U+0128}PU",
      "M\N{U+0128}\N{U+0128}",
      "NJU",
      "NJR",
      "AGA",
      "SPT",
      "OKT",
      "NOV",
      "DEC"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "\N{U+0128}",
      "M",
      "N",
      "N",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januar\N{U+0129}",
      "Feburuar\N{U+0129}",
      "Machi",
      "\N{U+0128}pur\N{U+0169}",
      "M\N{U+0129}\N{U+0129}",
      "Njuni",
      "Njura\N{U+0129}",
      "Agasti",
      "Septemba",
      "Okt\N{U+0169}ba",
      "Novemba",
      "Dicemba"
    ],
    name => "Meru Kenya",
    native_language => "K\N{U+0129}m\N{U+0129}r\N{U+0169}",
    native_name => "K\N{U+0129}m\N{U+0129}r\N{U+0169} Kenya",
    native_script => undef,
    native_territory => "Kenya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0128}mwe k\N{U+0129}r\N{U+0129} inya",
      "Ij\N{U+0129}r\N{U+0129} k\N{U+0129}r\N{U+0129} inya",
      "Ithat\N{U+0169} k\N{U+0129}r\N{U+0129} inya",
      "Inya k\N{U+0129}r\N{U+0129} inya"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0128}mwe k\N{U+0129}r\N{U+0129} inya",
      "Ij\N{U+0129}r\N{U+0129} k\N{U+0129}r\N{U+0129} inya",
      "Ithat\N{U+0169} k\N{U+0129}r\N{U+0129} inya",
      "Inya k\N{U+0129}r\N{U+0129} inya"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0128}mwe k\N{U+0129}r\N{U+0129} inya",
      "Ij\N{U+0129}r\N{U+0129} k\N{U+0129}r\N{U+0129} inya",
      "Ithat\N{U+0169} k\N{U+0129}r\N{U+0129} inya",
      "Inya k\N{U+0129}r\N{U+0129} inya"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0128}mwe k\N{U+0129}r\N{U+0129} inya",
      "Ij\N{U+0129}r\N{U+0129} k\N{U+0129}r\N{U+0129} inya",
      "Ithat\N{U+0169} k\N{U+0129}r\N{U+0129} inya",
      "Inya k\N{U+0129}r\N{U+0129} inya"
    ],
    script => undef,
    territory => "Kenya",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mfe ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "mfe",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lin",
      "mar",
      "mer",
      "ze",
      "van",
      "sam",
      "dim"
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "z",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lindi",
      "mardi",
      "merkredi",
      "zedi",
      "vandredi",
      "samdi",
      "dimans"
    ],
    day_stand_alone_abbreviated => [
      "lin",
      "mar",
      "mer",
      "ze",
      "van",
      "sam",
      "dim"
    ],
    day_stand_alone_narrow => [
      "l",
      "m",
      "m",
      "z",
      "v",
      "s",
      "d"
    ],
    day_stand_alone_wide => [
      "lindi",
      "mardi",
      "merkredi",
      "zedi",
      "vandredi",
      "samdi",
      "dimans"
    ],
    era_abbreviated => [
      "av. Z-K",
      "ap. Z-K"
    ],
    era_narrow => [
      "av. Z-K",
      "ap. Z-K"
    ],
    era_wide => [
      "avan Zezi-Krist",
      "apre Zezi-Krist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Morisyen",
    month_format_abbreviated => [
      "zan",
      "fev",
      "mar",
      "avr",
      "me",
      "zin",
      "zil",
      "out",
      "sep",
      "okt",
      "nov",
      "des"
    ],
    month_format_narrow => [
      "z",
      "f",
      "m",
      "a",
      "m",
      "z",
      "z",
      "o",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "zanvie",
      "fevriye",
      "mars",
      "avril",
      "me",
      "zin",
      "zilye",
      "out",
      "septam",
      "oktob",
      "novam",
      "desam"
    ],
    month_stand_alone_abbreviated => [
      "zan",
      "fev",
      "mar",
      "avr",
      "me",
      "zin",
      "zil",
      "out",
      "sep",
      "okt",
      "nov",
      "des"
    ],
    month_stand_alone_narrow => [
      "z",
      "f",
      "m",
      "a",
      "m",
      "z",
      "z",
      "o",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "zanvie",
      "fevriye",
      "mars",
      "avril",
      "me",
      "zin",
      "zilye",
      "out",
      "septam",
      "oktob",
      "novam",
      "desam"
    ],
    name => "Morisyen",
    native_language => "kreol morisien",
    native_name => "kreol morisien",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1e trimes",
      "2em trimes",
      "3em trimes",
      "4em trimes"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1e trimes",
      "2em trimes",
      "3em trimes",
      "4em trimes"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mfe-MU ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "mfe-MU",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "lin",
      "mar",
      "mer",
      "ze",
      "van",
      "sam",
      "dim"
    ],
    day_format_narrow => [
      "l",
      "m",
      "m",
      "z",
      "v",
      "s",
      "d"
    ],
    day_format_wide => [
      "lindi",
      "mardi",
      "merkredi",
      "zedi",
      "vandredi",
      "samdi",
      "dimans"
    ],
    day_stand_alone_abbreviated => [
      "lin",
      "mar",
      "mer",
      "ze",
      "van",
      "sam",
      "dim"
    ],
    day_stand_alone_narrow => [
      "l",
      "m",
      "m",
      "z",
      "v",
      "s",
      "d"
    ],
    day_stand_alone_wide => [
      "lindi",
      "mardi",
      "merkredi",
      "zedi",
      "vandredi",
      "samdi",
      "dimans"
    ],
    era_abbreviated => [
      "av. Z-K",
      "ap. Z-K"
    ],
    era_narrow => [
      "av. Z-K",
      "ap. Z-K"
    ],
    era_wide => [
      "avan Zezi-Krist",
      "apre Zezi-Krist"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Morisyen",
    month_format_abbreviated => [
      "zan",
      "fev",
      "mar",
      "avr",
      "me",
      "zin",
      "zil",
      "out",
      "sep",
      "okt",
      "nov",
      "des"
    ],
    month_format_narrow => [
      "z",
      "f",
      "m",
      "a",
      "m",
      "z",
      "z",
      "o",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "zanvie",
      "fevriye",
      "mars",
      "avril",
      "me",
      "zin",
      "zilye",
      "out",
      "septam",
      "oktob",
      "novam",
      "desam"
    ],
    month_stand_alone_abbreviated => [
      "zan",
      "fev",
      "mar",
      "avr",
      "me",
      "zin",
      "zil",
      "out",
      "sep",
      "okt",
      "nov",
      "des"
    ],
    month_stand_alone_narrow => [
      "z",
      "f",
      "m",
      "a",
      "m",
      "z",
      "z",
      "o",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "zanvie",
      "fevriye",
      "mars",
      "avril",
      "me",
      "zin",
      "zilye",
      "out",
      "septam",
      "oktob",
      "novam",
      "desam"
    ],
    name => "Morisyen Mauritius",
    native_language => "kreol morisien",
    native_name => "kreol morisien Moris",
    native_script => undef,
    native_territory => "Moris",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1e trimes",
      "2em trimes",
      "3em trimes",
      "4em trimes"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1e trimes",
      "2em trimes",
      "3em trimes",
      "4em trimes"
    ],
    script => undef,
    territory => "Mauritius",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mg ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "E d/M",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "mg",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Alats",
      "Tal",
      "Alar",
      "Alak",
      "Zom",
      "Asab",
      "Alah"
    ],
    day_format_narrow => [
      "A",
      "T",
      "A",
      "A",
      "Z",
      "A",
      "A"
    ],
    day_format_wide => [
      "Alatsinainy",
      "Talata",
      "Alarobia",
      "Alakamisy",
      "Zoma",
      "Asabotsy",
      "Alahady"
    ],
    day_stand_alone_abbreviated => [
      "Alats",
      "Tal",
      "Alar",
      "Alak",
      "Zom",
      "Asab",
      "Alah"
    ],
    day_stand_alone_narrow => [
      "A",
      "T",
      "A",
      "A",
      "Z",
      "A",
      "A"
    ],
    day_stand_alone_wide => [
      "Alatsinainy",
      "Talata",
      "Alarobia",
      "Alakamisy",
      "Zoma",
      "Asabotsy",
      "Alahady"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Alohan\N{U+2019}i JK",
      "Aorian\N{U+2019}i JK"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Malagasy",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "Mey",
      "Jon",
      "Jol",
      "Aog",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Janoary",
      "Febroary",
      "Martsa",
      "Aprily",
      "Mey",
      "Jona",
      "Jolay",
      "Aogositra",
      "Septambra",
      "Oktobra",
      "Novambra",
      "Desambra"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "Mey",
      "Jon",
      "Jol",
      "Aog",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janoary",
      "Febroary",
      "Martsa",
      "Aprily",
      "Mey",
      "Jona",
      "Jolay",
      "Aogositra",
      "Septambra",
      "Oktobra",
      "Novambra",
      "Desambra"
    ],
    name => "Malagasy",
    native_language => "Malagasy",
    native_name => "Malagasy",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Telovolana voalohany",
      "Telovolana faharoa",
      "Telovolana fahatelo",
      "Telovolana fahefatra"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Telovolana voalohany",
      "Telovolana faharoa",
      "Telovolana fahatelo",
      "Telovolana fahefatra"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mg-MG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "E d/M",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "mg-MG",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Alats",
      "Tal",
      "Alar",
      "Alak",
      "Zom",
      "Asab",
      "Alah"
    ],
    day_format_narrow => [
      "A",
      "T",
      "A",
      "A",
      "Z",
      "A",
      "A"
    ],
    day_format_wide => [
      "Alatsinainy",
      "Talata",
      "Alarobia",
      "Alakamisy",
      "Zoma",
      "Asabotsy",
      "Alahady"
    ],
    day_stand_alone_abbreviated => [
      "Alats",
      "Tal",
      "Alar",
      "Alak",
      "Zom",
      "Asab",
      "Alah"
    ],
    day_stand_alone_narrow => [
      "A",
      "T",
      "A",
      "A",
      "Z",
      "A",
      "A"
    ],
    day_stand_alone_wide => [
      "Alatsinainy",
      "Talata",
      "Alarobia",
      "Alakamisy",
      "Zoma",
      "Asabotsy",
      "Alahady"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Alohan\N{U+2019}i JK",
      "Aorian\N{U+2019}i JK"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Malagasy",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "Mey",
      "Jon",
      "Jol",
      "Aog",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Janoary",
      "Febroary",
      "Martsa",
      "Aprily",
      "Mey",
      "Jona",
      "Jolay",
      "Aogositra",
      "Septambra",
      "Oktobra",
      "Novambra",
      "Desambra"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "Mey",
      "Jon",
      "Jol",
      "Aog",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janoary",
      "Febroary",
      "Martsa",
      "Aprily",
      "Mey",
      "Jona",
      "Jolay",
      "Aogositra",
      "Septambra",
      "Oktobra",
      "Novambra",
      "Desambra"
    ],
    name => "Malagasy Madagascar",
    native_language => "Malagasy",
    native_name => "Malagasy Madagasikara",
    native_script => undef,
    native_territory => "Madagasikara",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Telovolana voalohany",
      "Telovolana faharoa",
      "Telovolana fahatelo",
      "Telovolana fahefatra"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Telovolana voalohany",
      "Telovolana faharoa",
      "Telovolana fahatelo",
      "Telovolana fahefatra"
    ],
    script => undef,
    territory => "Madagascar",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mgh ]__
  {
    am_pm_abbreviated => [
      "wichishu",
      "mchochil\N{U+2019}l"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "y MMMM",
      yMMMd => "MMM d, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "mgh",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Ara",
      "Iju",
      "Jmo",
      "Sab"
    ],
    day_format_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "S"
    ],
    day_format_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Arahamisi",
      "Ijumaa",
      "Jumamosi",
      "Sabato"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Ara",
      "Iju",
      "Jmo",
      "Sab"
    ],
    day_stand_alone_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "S"
    ],
    day_stand_alone_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Arahamisi",
      "Ijumaa",
      "Jumamosi",
      "Sabato"
    ],
    era_abbreviated => [
      "HY",
      "YY"
    ],
    era_narrow => [
      "HY",
      "YY"
    ],
    era_wide => [
      "Hinapiya yesu",
      "Yopia yesu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Makhuwa-Meetto",
    month_format_abbreviated => [
      "Kwa",
      "Una",
      "Rar",
      "Che",
      "Tha",
      "Moc",
      "Sab",
      "Nan",
      "Tis",
      "Kum",
      "Moj",
      "Yel"
    ],
    month_format_narrow => [
      "K",
      "U",
      "R",
      "C",
      "T",
      "M",
      "S",
      "N",
      "T",
      "K",
      "M",
      "Y"
    ],
    month_format_wide => [
      "Mweri wo kwanza",
      "Mweri wo unayeli",
      "Mweri wo uneraru",
      "Mweri wo unecheshe",
      "Mweri wo unethanu",
      "Mweri wo thanu na mocha",
      "Mweri wo saba",
      "Mweri wo nane",
      "Mweri wo tisa",
      "Mweri wo kumi",
      "Mweri wo kumi na moja",
      "Mweri wo kumi na yel\N{U+2019}li"
    ],
    month_stand_alone_abbreviated => [
      "Kwa",
      "Una",
      "Rar",
      "Che",
      "Tha",
      "Moc",
      "Sab",
      "Nan",
      "Tis",
      "Kum",
      "Moj",
      "Yel"
    ],
    month_stand_alone_narrow => [
      "K",
      "U",
      "R",
      "C",
      "T",
      "M",
      "S",
      "N",
      "T",
      "K",
      "M",
      "Y"
    ],
    month_stand_alone_wide => [
      "Mweri wo kwanza",
      "Mweri wo unayeli",
      "Mweri wo uneraru",
      "Mweri wo unecheshe",
      "Mweri wo unethanu",
      "Mweri wo thanu na mocha",
      "Mweri wo saba",
      "Mweri wo nane",
      "Mweri wo tisa",
      "Mweri wo kumi",
      "Mweri wo kumi na moja",
      "Mweri wo kumi na yel\N{U+2019}li"
    ],
    name => "Makhuwa-Meetto",
    native_language => "Makua",
    native_name => "Makua",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mgh-MZ ]__
  {
    am_pm_abbreviated => [
      "wichishu",
      "mchochil\N{U+2019}l"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "y MMMM",
      yMMMd => "MMM d, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "mgh-MZ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Ara",
      "Iju",
      "Jmo",
      "Sab"
    ],
    day_format_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "S"
    ],
    day_format_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Arahamisi",
      "Ijumaa",
      "Jumamosi",
      "Sabato"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Ara",
      "Iju",
      "Jmo",
      "Sab"
    ],
    day_stand_alone_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "S"
    ],
    day_stand_alone_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Arahamisi",
      "Ijumaa",
      "Jumamosi",
      "Sabato"
    ],
    era_abbreviated => [
      "HY",
      "YY"
    ],
    era_narrow => [
      "HY",
      "YY"
    ],
    era_wide => [
      "Hinapiya yesu",
      "Yopia yesu"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Makhuwa-Meetto",
    month_format_abbreviated => [
      "Kwa",
      "Una",
      "Rar",
      "Che",
      "Tha",
      "Moc",
      "Sab",
      "Nan",
      "Tis",
      "Kum",
      "Moj",
      "Yel"
    ],
    month_format_narrow => [
      "K",
      "U",
      "R",
      "C",
      "T",
      "M",
      "S",
      "N",
      "T",
      "K",
      "M",
      "Y"
    ],
    month_format_wide => [
      "Mweri wo kwanza",
      "Mweri wo unayeli",
      "Mweri wo uneraru",
      "Mweri wo unecheshe",
      "Mweri wo unethanu",
      "Mweri wo thanu na mocha",
      "Mweri wo saba",
      "Mweri wo nane",
      "Mweri wo tisa",
      "Mweri wo kumi",
      "Mweri wo kumi na moja",
      "Mweri wo kumi na yel\N{U+2019}li"
    ],
    month_stand_alone_abbreviated => [
      "Kwa",
      "Una",
      "Rar",
      "Che",
      "Tha",
      "Moc",
      "Sab",
      "Nan",
      "Tis",
      "Kum",
      "Moj",
      "Yel"
    ],
    month_stand_alone_narrow => [
      "K",
      "U",
      "R",
      "C",
      "T",
      "M",
      "S",
      "N",
      "T",
      "K",
      "M",
      "Y"
    ],
    month_stand_alone_wide => [
      "Mweri wo kwanza",
      "Mweri wo unayeli",
      "Mweri wo uneraru",
      "Mweri wo unecheshe",
      "Mweri wo unethanu",
      "Mweri wo thanu na mocha",
      "Mweri wo saba",
      "Mweri wo nane",
      "Mweri wo tisa",
      "Mweri wo kumi",
      "Mweri wo kumi na moja",
      "Mweri wo kumi na yel\N{U+2019}li"
    ],
    name => "Makhuwa-Meetto Mozambique",
    native_language => "Makua",
    native_name => "Makua Umozambiki",
    native_script => undef,
    native_territory => "Umozambiki",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Mozambique",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mgo ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "mgo",
    date_format_full => "EEEE, y MMMM dd",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Aneg 2",
      "Aneg 3",
      "Aneg 4",
      "Aneg 5",
      "Aneg 6",
      "Aneg 7",
      "Aneg 1"
    ],
    day_format_narrow => [
      "A2",
      "A3",
      "A4",
      "A5",
      "A6",
      "A7",
      "A1"
    ],
    day_format_wide => [
      "Aneg 2",
      "Aneg 3",
      "Aneg 4",
      "Aneg 5",
      "Aneg 6",
      "Aneg 7",
      "Aneg 1"
    ],
    day_stand_alone_abbreviated => [
      "Aneg 2",
      "Aneg 3",
      "Aneg 4",
      "Aneg 5",
      "Aneg 6",
      "Aneg 7",
      "Aneg 1"
    ],
    day_stand_alone_narrow => [
      "A2",
      "A3",
      "A4",
      "A5",
      "A6",
      "A7",
      "A1"
    ],
    day_stand_alone_wide => [
      "Aneg 2",
      "Aneg 3",
      "Aneg 4",
      "Aneg 5",
      "Aneg 6",
      "Aneg 7",
      "Aneg 1"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Meta\N{U+02bc}",
    month_format_abbreviated => [
      "mbegtug",
      "imeg \N{U+00e0}b\N{U+00f9}b\N{U+00ec}",
      "imeg mb\N{U+0259}\N{U+014b}chubi",
      "im\N{U+0259}g ngw\N{U+0259}\N{U+0300}t",
      "im\N{U+0259}g fog",
      "im\N{U+0259}g ichiib\N{U+0254}d",
      "im\N{U+0259}g \N{U+00e0}d\N{U+00f9}mb\N{U+0259}\N{U+0300}\N{U+014b}",
      "im\N{U+0259}g ichika",
      "im\N{U+0259}g kud",
      "im\N{U+0259}g t\N{U+00e8}si\N{U+02bc}e",
      "im\N{U+0259}g z\N{U+00f2}",
      "im\N{U+0259}g krizmed"
    ],
    month_format_narrow => [
      "M1",
      "A2",
      "M3",
      "N4",
      "F5",
      "I6",
      "A7",
      "I8",
      "K9",
      10,
      11,
      12
    ],
    month_format_wide => [
      "im\N{U+0259}g mbegtug",
      "imeg \N{U+00e0}b\N{U+00f9}b\N{U+00ec}",
      "imeg mb\N{U+0259}\N{U+014b}chubi",
      "im\N{U+0259}g ngw\N{U+0259}\N{U+0300}t",
      "im\N{U+0259}g fog",
      "im\N{U+0259}g ichiib\N{U+0254}d",
      "im\N{U+0259}g \N{U+00e0}d\N{U+00f9}mb\N{U+0259}\N{U+0300}\N{U+014b}",
      "im\N{U+0259}g ichika",
      "im\N{U+0259}g kud",
      "im\N{U+0259}g t\N{U+00e8}si\N{U+02bc}e",
      "im\N{U+0259}g z\N{U+00f2}",
      "im\N{U+0259}g krizmed"
    ],
    month_stand_alone_abbreviated => [
      "mbegtug",
      "imeg \N{U+00e0}b\N{U+00f9}b\N{U+00ec}",
      "imeg mb\N{U+0259}\N{U+014b}chubi",
      "im\N{U+0259}g ngw\N{U+0259}\N{U+0300}t",
      "im\N{U+0259}g fog",
      "im\N{U+0259}g ichiib\N{U+0254}d",
      "im\N{U+0259}g \N{U+00e0}d\N{U+00f9}mb\N{U+0259}\N{U+0300}\N{U+014b}",
      "im\N{U+0259}g ichika",
      "im\N{U+0259}g kud",
      "im\N{U+0259}g t\N{U+00e8}si\N{U+02bc}e",
      "im\N{U+0259}g z\N{U+00f2}",
      "im\N{U+0259}g krizmed"
    ],
    month_stand_alone_narrow => [
      "M1",
      "A2",
      "M3",
      "N4",
      "F5",
      "I6",
      "A7",
      "I8",
      "K9",
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "im\N{U+0259}g mbegtug",
      "imeg \N{U+00e0}b\N{U+00f9}b\N{U+00ec}",
      "imeg mb\N{U+0259}\N{U+014b}chubi",
      "im\N{U+0259}g ngw\N{U+0259}\N{U+0300}t",
      "im\N{U+0259}g fog",
      "im\N{U+0259}g ichiib\N{U+0254}d",
      "im\N{U+0259}g \N{U+00e0}d\N{U+00f9}mb\N{U+0259}\N{U+0300}\N{U+014b}",
      "im\N{U+0259}g ichika",
      "im\N{U+0259}g kud",
      "im\N{U+0259}g t\N{U+00e8}si\N{U+02bc}e",
      "im\N{U+0259}g z\N{U+00f2}",
      "im\N{U+0259}g krizmed"
    ],
    name => "Meta\N{U+02bc}",
    native_language => "meta\N{U+02bc}",
    native_name => "meta\N{U+02bc}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mgo-CM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "mgo-CM",
    date_format_full => "EEEE, y MMMM dd",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Aneg 2",
      "Aneg 3",
      "Aneg 4",
      "Aneg 5",
      "Aneg 6",
      "Aneg 7",
      "Aneg 1"
    ],
    day_format_narrow => [
      "A2",
      "A3",
      "A4",
      "A5",
      "A6",
      "A7",
      "A1"
    ],
    day_format_wide => [
      "Aneg 2",
      "Aneg 3",
      "Aneg 4",
      "Aneg 5",
      "Aneg 6",
      "Aneg 7",
      "Aneg 1"
    ],
    day_stand_alone_abbreviated => [
      "Aneg 2",
      "Aneg 3",
      "Aneg 4",
      "Aneg 5",
      "Aneg 6",
      "Aneg 7",
      "Aneg 1"
    ],
    day_stand_alone_narrow => [
      "A2",
      "A3",
      "A4",
      "A5",
      "A6",
      "A7",
      "A1"
    ],
    day_stand_alone_wide => [
      "Aneg 2",
      "Aneg 3",
      "Aneg 4",
      "Aneg 5",
      "Aneg 6",
      "Aneg 7",
      "Aneg 1"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Meta\N{U+02bc}",
    month_format_abbreviated => [
      "mbegtug",
      "imeg \N{U+00e0}b\N{U+00f9}b\N{U+00ec}",
      "imeg mb\N{U+0259}\N{U+014b}chubi",
      "im\N{U+0259}g ngw\N{U+0259}\N{U+0300}t",
      "im\N{U+0259}g fog",
      "im\N{U+0259}g ichiib\N{U+0254}d",
      "im\N{U+0259}g \N{U+00e0}d\N{U+00f9}mb\N{U+0259}\N{U+0300}\N{U+014b}",
      "im\N{U+0259}g ichika",
      "im\N{U+0259}g kud",
      "im\N{U+0259}g t\N{U+00e8}si\N{U+02bc}e",
      "im\N{U+0259}g z\N{U+00f2}",
      "im\N{U+0259}g krizmed"
    ],
    month_format_narrow => [
      "M1",
      "A2",
      "M3",
      "N4",
      "F5",
      "I6",
      "A7",
      "I8",
      "K9",
      10,
      11,
      12
    ],
    month_format_wide => [
      "im\N{U+0259}g mbegtug",
      "imeg \N{U+00e0}b\N{U+00f9}b\N{U+00ec}",
      "imeg mb\N{U+0259}\N{U+014b}chubi",
      "im\N{U+0259}g ngw\N{U+0259}\N{U+0300}t",
      "im\N{U+0259}g fog",
      "im\N{U+0259}g ichiib\N{U+0254}d",
      "im\N{U+0259}g \N{U+00e0}d\N{U+00f9}mb\N{U+0259}\N{U+0300}\N{U+014b}",
      "im\N{U+0259}g ichika",
      "im\N{U+0259}g kud",
      "im\N{U+0259}g t\N{U+00e8}si\N{U+02bc}e",
      "im\N{U+0259}g z\N{U+00f2}",
      "im\N{U+0259}g krizmed"
    ],
    month_stand_alone_abbreviated => [
      "mbegtug",
      "imeg \N{U+00e0}b\N{U+00f9}b\N{U+00ec}",
      "imeg mb\N{U+0259}\N{U+014b}chubi",
      "im\N{U+0259}g ngw\N{U+0259}\N{U+0300}t",
      "im\N{U+0259}g fog",
      "im\N{U+0259}g ichiib\N{U+0254}d",
      "im\N{U+0259}g \N{U+00e0}d\N{U+00f9}mb\N{U+0259}\N{U+0300}\N{U+014b}",
      "im\N{U+0259}g ichika",
      "im\N{U+0259}g kud",
      "im\N{U+0259}g t\N{U+00e8}si\N{U+02bc}e",
      "im\N{U+0259}g z\N{U+00f2}",
      "im\N{U+0259}g krizmed"
    ],
    month_stand_alone_narrow => [
      "M1",
      "A2",
      "M3",
      "N4",
      "F5",
      "I6",
      "A7",
      "I8",
      "K9",
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "im\N{U+0259}g mbegtug",
      "imeg \N{U+00e0}b\N{U+00f9}b\N{U+00ec}",
      "imeg mb\N{U+0259}\N{U+014b}chubi",
      "im\N{U+0259}g ngw\N{U+0259}\N{U+0300}t",
      "im\N{U+0259}g fog",
      "im\N{U+0259}g ichiib\N{U+0254}d",
      "im\N{U+0259}g \N{U+00e0}d\N{U+00f9}mb\N{U+0259}\N{U+0300}\N{U+014b}",
      "im\N{U+0259}g ichika",
      "im\N{U+0259}g kud",
      "im\N{U+0259}g t\N{U+00e8}si\N{U+02bc}e",
      "im\N{U+0259}g z\N{U+00f2}",
      "im\N{U+0259}g krizmed"
    ],
    name => "Meta\N{U+02bc} Cameroon",
    native_language => "meta\N{U+02bc}",
    native_name => "meta\N{U+02bc} Kamalun",
    native_script => undef,
    native_territory => "Kamalun",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Cameroon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mk ]__
  {
    am_pm_abbreviated => [
      "\N{U+043f}\N{U+0440}\N{U+0435}\N{U+0442}\N{U+043f}\N{U+043b}\N{U+0430}\N{U+0434}\N{U+043d}\N{U+0435}",
      "\N{U+043f}\N{U+043e}\N{U+043f}\N{U+043b}\N{U+0430}\N{U+0434}\N{U+043d}\N{U+0435}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, dd MMM y G",
      GyMMMd => "dd MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d.M",
      Mdd => "dd.M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "MMM y '\N{U+0433}'.",
      yMMMEd => "E, d MMM y '\N{U+0433}'.",
      yMMMM => "MMMM y '\N{U+0433}'.",
      yMMMd => "d MMM y '\N{U+0433}'.",
      yMd => "d.M.y",
      yQQQ => "QQQ y '\N{U+0433}'.",
      yQQQQ => "QQQQ y '\N{U+0433}'."
    },
    code => "mk",
    date_format_full => "EEEE, dd MMMM y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd.M.y",
    date_format_short => "dd.M.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}.",
      "\N{U+0432}\N{U+0442}.",
      "\N{U+0441}\N{U+0440}\N{U+0435}.",
      "\N{U+0447}\N{U+0435}\N{U+0442}.",
      "\N{U+043f}\N{U+0435}\N{U+0442}.",
      "\N{U+0441}\N{U+0430}\N{U+0431}.",
      "\N{U+043d}\N{U+0435}\N{U+0434}."
    ],
    day_format_narrow => [
      "\N{U+043f}",
      "\N{U+0432}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+043e}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+043e}\N{U+043a}",
      "\N{U+0441}\N{U+0430}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+0430}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}.",
      "\N{U+0432}\N{U+0442}.",
      "\N{U+0441}\N{U+0440}\N{U+0435}.",
      "\N{U+0447}\N{U+0435}\N{U+0442}.",
      "\N{U+043f}\N{U+0435}\N{U+0442}.",
      "\N{U+0441}\N{U+0430}\N{U+0431}.",
      "\N{U+043d}\N{U+0435}\N{U+0434}."
    ],
    day_stand_alone_narrow => [
      "\N{U+043f}",
      "\N{U+0432}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+043e}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+043e}\N{U+043a}",
      "\N{U+0441}\N{U+0430}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+0430}"
    ],
    era_abbreviated => [
      "\N{U+043f}\N{U+0440}.\N{U+043d}.\N{U+0435}.",
      "\N{U+043d}.\N{U+0435}."
    ],
    era_narrow => [
      "\N{U+043f}\N{U+0440}.\N{U+043d}.\N{U+0435}.",
      "\N{U+043d}.\N{U+0435}."
    ],
    era_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0435}\N{U+0434} \N{U+043d}\N{U+0430}\N{U+0448}\N{U+0430}\N{U+0442}\N{U+0430} \N{U+0435}\N{U+0440}\N{U+0430}",
      "\N{U+043e}\N{U+0434} \N{U+043d}\N{U+0430}\N{U+0448}\N{U+0430}\N{U+0442}\N{U+0430} \N{U+0435}\N{U+0440}\N{U+0430}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Macedonian",
    month_format_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}.",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}.",
      "\N{U+0458}\N{U+0443}\N{U+043b}.",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+0435}\N{U+043c}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_format_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_format_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}\N{U+0438}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}\N{U+0438}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}\N{U+0438}",
      "\N{U+0458}\N{U+0443}\N{U+043b}\N{U+0438}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+043d}\N{U+043e}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}.",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}.",
      "\N{U+0458}\N{U+0443}\N{U+043b}.",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+0435}\N{U+043c}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_stand_alone_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}\N{U+0438}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}\N{U+0438}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}\N{U+0438}",
      "\N{U+0458}\N{U+0443}\N{U+043b}\N{U+0438}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+043d}\N{U+043e}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}"
    ],
    name => "Macedonian",
    native_language => "\N{U+043c}\N{U+0430}\N{U+043a}\N{U+0435}\N{U+0434}\N{U+043e}\N{U+043d}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_name => "\N{U+043c}\N{U+0430}\N{U+043a}\N{U+0435}\N{U+0434}\N{U+043e}\N{U+043d}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}-\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}-\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}-\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}-\N{U+0434}\N{U+0435}\N{U+043a}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0432}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0442}\N{U+0440}\N{U+0435}\N{U+0442}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}-\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}-\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}-\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}-\N{U+0434}\N{U+0435}\N{U+043a}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0432}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0442}\N{U+0440}\N{U+0435}\N{U+0442}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mk-MK ]__
  {
    am_pm_abbreviated => [
      "\N{U+043f}\N{U+0440}\N{U+0435}\N{U+0442}\N{U+043f}\N{U+043b}\N{U+0430}\N{U+0434}\N{U+043d}\N{U+0435}",
      "\N{U+043f}\N{U+043e}\N{U+043f}\N{U+043b}\N{U+0430}\N{U+0434}\N{U+043d}\N{U+0435}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, dd MMM y G",
      GyMMMd => "dd MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d.M",
      Mdd => "dd.M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "MMM y '\N{U+0433}'.",
      yMMMEd => "E, d MMM y '\N{U+0433}'.",
      yMMMM => "MMMM y '\N{U+0433}'.",
      yMMMd => "d MMM y '\N{U+0433}'.",
      yMd => "d.M.y",
      yQQQ => "QQQ y '\N{U+0433}'.",
      yQQQQ => "QQQQ y '\N{U+0433}'."
    },
    code => "mk-MK",
    date_format_full => "EEEE, dd MMMM y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd.M.y",
    date_format_short => "dd.M.yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}.",
      "\N{U+0432}\N{U+0442}.",
      "\N{U+0441}\N{U+0440}\N{U+0435}.",
      "\N{U+0447}\N{U+0435}\N{U+0442}.",
      "\N{U+043f}\N{U+0435}\N{U+0442}.",
      "\N{U+0441}\N{U+0430}\N{U+0431}.",
      "\N{U+043d}\N{U+0435}\N{U+0434}."
    ],
    day_format_narrow => [
      "\N{U+043f}",
      "\N{U+0432}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+043e}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+043e}\N{U+043a}",
      "\N{U+0441}\N{U+0430}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+0430}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}.",
      "\N{U+0432}\N{U+0442}.",
      "\N{U+0441}\N{U+0440}\N{U+0435}.",
      "\N{U+0447}\N{U+0435}\N{U+0442}.",
      "\N{U+043f}\N{U+0435}\N{U+0442}.",
      "\N{U+0441}\N{U+0430}\N{U+0431}.",
      "\N{U+043d}\N{U+0435}\N{U+0434}."
    ],
    day_stand_alone_narrow => [
      "\N{U+043f}",
      "\N{U+0432}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+043e}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+043e}\N{U+043a}",
      "\N{U+0441}\N{U+0430}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+0430}"
    ],
    era_abbreviated => [
      "\N{U+043f}\N{U+0440}.\N{U+043d}.\N{U+0435}.",
      "\N{U+043d}.\N{U+0435}."
    ],
    era_narrow => [
      "\N{U+043f}\N{U+0440}.\N{U+043d}.\N{U+0435}.",
      "\N{U+043d}.\N{U+0435}."
    ],
    era_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0435}\N{U+0434} \N{U+043d}\N{U+0430}\N{U+0448}\N{U+0430}\N{U+0442}\N{U+0430} \N{U+0435}\N{U+0440}\N{U+0430}",
      "\N{U+043e}\N{U+0434} \N{U+043d}\N{U+0430}\N{U+0448}\N{U+0430}\N{U+0442}\N{U+0430} \N{U+0435}\N{U+0440}\N{U+0430}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a, %d %b %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a, %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Macedonian",
    month_format_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}.",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}.",
      "\N{U+0458}\N{U+0443}\N{U+043b}.",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+0435}\N{U+043c}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_format_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_format_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}\N{U+0438}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}\N{U+0438}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}\N{U+0438}",
      "\N{U+0458}\N{U+0443}\N{U+043b}\N{U+0438}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+043d}\N{U+043e}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}.",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}.",
      "\N{U+0458}\N{U+0443}\N{U+043b}.",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+0435}\N{U+043c}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_stand_alone_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}\N{U+0438}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}\N{U+0438}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}\N{U+0438}",
      "\N{U+0458}\N{U+0443}\N{U+043b}\N{U+0438}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+043d}\N{U+043e}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0435}\N{U+043c}\N{U+0432}\N{U+0440}\N{U+0438}"
    ],
    name => "Macedonian Macedonia",
    native_language => "\N{U+043c}\N{U+0430}\N{U+043a}\N{U+0435}\N{U+0434}\N{U+043e}\N{U+043d}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_name => "\N{U+043c}\N{U+0430}\N{U+043a}\N{U+0435}\N{U+0434}\N{U+043e}\N{U+043d}\N{U+0441}\N{U+043a}\N{U+0438} \N{U+041c}\N{U+0430}\N{U+043a}\N{U+0435}\N{U+0434}\N{U+043e}\N{U+043d}\N{U+0438}\N{U+0458}\N{U+0430}",
    native_script => undef,
    native_territory => "\N{U+041c}\N{U+0430}\N{U+043a}\N{U+0435}\N{U+0434}\N{U+043e}\N{U+043d}\N{U+0438}\N{U+0458}\N{U+0430}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}-\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}-\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}-\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}-\N{U+0434}\N{U+0435}\N{U+043a}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0432}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0442}\N{U+0440}\N{U+0435}\N{U+0442}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}-\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}-\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}-\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}-\N{U+0434}\N{U+0435}\N{U+043a}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0432}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0442}\N{U+0440}\N{U+0435}\N{U+0442}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+043e} \N{U+0442}\N{U+0440}\N{U+043e}\N{U+043c}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+0447}\N{U+0458}\N{U+0435}"
    ],
    script => undef,
    territory => "Macedonia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ml ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "d/M, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMEd => "MMMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "d-M-y, E",
      yMM => "MM-y",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "ml",
    date_format_full => "y, MMMM d, EEEE",
    date_format_long => "y, MMMM d",
    date_format_medium => "y, MMM d",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0d24}\N{U+0d3f}\N{U+0d19}\N{U+0d4d}\N{U+0d15}\N{U+0d7e}",
      "\N{U+0d1a}\N{U+0d4a}\N{U+0d35}\N{U+0d4d}\N{U+0d35}",
      "\N{U+0d2c}\N{U+0d41}\N{U+0d27}\N{U+0d7b}",
      "\N{U+0d35}\N{U+0d4d}\N{U+0d2f}\N{U+0d3e}\N{U+0d34}\N{U+0d02}",
      "\N{U+0d35}\N{U+0d46}\N{U+0d33}\N{U+0d4d}\N{U+0d33}\N{U+0d3f}",
      "\N{U+0d36}\N{U+0d28}\N{U+0d3f}",
      "\N{U+0d1e}\N{U+0d3e}\N{U+0d2f}\N{U+0d7c}"
    ],
    day_format_narrow => [
      "\N{U+0d24}\N{U+0d3f}",
      "\N{U+0d1a}\N{U+0d4a}",
      "\N{U+0d2c}\N{U+0d41}",
      "\N{U+0d35}\N{U+0d4d}\N{U+0d2f}\N{U+0d3e}",
      "\N{U+0d35}\N{U+0d46}",
      "\N{U+0d36}",
      "\N{U+0d1e}"
    ],
    day_format_wide => [
      "\N{U+0d24}\N{U+0d3f}\N{U+0d19}\N{U+0d4d}\N{U+0d15}\N{U+0d33}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d1a}\N{U+0d4a}\N{U+0d35}\N{U+0d4d}\N{U+0d35}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+0d1a}",
      "\N{U+0d2c}\N{U+0d41}\N{U+0d27}\N{U+0d28}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d35}\N{U+0d4d}\N{U+0d2f}\N{U+0d3e}\N{U+0d34}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d35}\N{U+0d46}\N{U+0d33}\N{U+0d4d}\N{U+0d33}\N{U+0d3f}\N{U+0d2f}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d36}\N{U+0d28}\N{U+0d3f}\N{U+0d2f}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d1e}\N{U+0d3e}\N{U+0d2f}\N{U+0d31}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0d24}\N{U+0d3f}\N{U+0d19}\N{U+0d4d}\N{U+0d15}\N{U+0d7e}",
      "\N{U+0d1a}\N{U+0d4a}\N{U+0d35}\N{U+0d4d}\N{U+0d35}",
      "\N{U+0d2c}\N{U+0d41}\N{U+0d27}\N{U+0d7b}",
      "\N{U+0d35}\N{U+0d4d}\N{U+0d2f}\N{U+0d3e}\N{U+0d34}\N{U+0d02}",
      "\N{U+0d35}\N{U+0d46}\N{U+0d33}\N{U+0d4d}\N{U+0d33}\N{U+0d3f}",
      "\N{U+0d36}\N{U+0d28}\N{U+0d3f}",
      "\N{U+0d1e}\N{U+0d3e}\N{U+0d2f}\N{U+0d7c}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0d24}\N{U+0d3f}",
      "\N{U+0d1a}\N{U+0d4a}",
      "\N{U+0d2c}\N{U+0d41}",
      "\N{U+0d35}\N{U+0d4d}\N{U+0d2f}\N{U+0d3e}",
      "\N{U+0d35}\N{U+0d46}",
      "\N{U+0d36}",
      "\N{U+0d1e}\N{U+0d3e}"
    ],
    day_stand_alone_wide => [
      "\N{U+0d24}\N{U+0d3f}\N{U+0d19}\N{U+0d4d}\N{U+0d15}\N{U+0d33}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d1a}\N{U+0d4a}\N{U+0d35}\N{U+0d4d}\N{U+0d35}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d2c}\N{U+0d41}\N{U+0d27}\N{U+0d28}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d35}\N{U+0d4d}\N{U+0d2f}\N{U+0d3e}\N{U+0d34}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d35}\N{U+0d46}\N{U+0d33}\N{U+0d4d}\N{U+0d33}\N{U+0d3f}\N{U+0d2f}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d36}\N{U+0d28}\N{U+0d3f}\N{U+0d2f}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d1e}\N{U+0d3e}\N{U+0d2f}\N{U+0d31}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}"
    ],
    era_abbreviated => [
      "\N{U+0d15}\N{U+0d4d}\N{U+0d30}\N{U+0d3f}.\N{U+0d2e}\N{U+0d41}.",
      "\N{U+0d0e}\N{U+0d21}\N{U+0d3f}"
    ],
    era_narrow => [
      "\N{U+0d15}\N{U+0d4d}\N{U+0d30}\N{U+0d3f}.\N{U+0d2e}\N{U+0d41}.",
      "\N{U+0d0e}\N{U+0d21}\N{U+0d3f}"
    ],
    era_wide => [
      "\N{U+0d15}\N{U+0d4d}\N{U+0d30}\N{U+0d3f}\N{U+0d38}\N{U+0d4d}\N{U+200c}\N{U+0d24}\N{U+0d41}\N{U+0d35}\N{U+0d3f}\N{U+0d28}\N{U+0d4d} \N{U+0d2e}\N{U+0d41}\N{U+0d2e}\N{U+0d4d}\N{U+0d2a}\N{U+0d4d}",
      "\N{U+0d06}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d4b} \N{U+0d21}\N{U+0d4a}\N{U+0d2e}\N{U+0d3f}\N{U+0d28}\N{U+0d3f}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Malayalam",
    month_format_abbreviated => [
      "\N{U+0d1c}\N{U+0d28}\N{U+0d41}",
      "\N{U+0d2b}\N{U+0d46}\N{U+0d2c}\N{U+0d4d}\N{U+0d30}\N{U+0d41}",
      "\N{U+0d2e}\N{U+0d3e}\N{U+0d7c}",
      "\N{U+0d0f}\N{U+0d2a}\N{U+0d4d}\N{U+0d30}\N{U+0d3f}",
      "\N{U+0d2e}\N{U+0d47}\N{U+0d2f}\N{U+0d4d}",
      "\N{U+0d1c}\N{U+0d42}\N{U+0d7a}",
      "\N{U+0d1c}\N{U+0d42}\N{U+0d32}\N{U+0d48}",
      "\N{U+0d13}\N{U+0d17}",
      "\N{U+0d38}\N{U+0d46}\N{U+0d2a}\N{U+0d4d}\N{U+0d31}\N{U+0d4d}\N{U+0d31}\N{U+0d02}",
      "\N{U+0d12}\N{U+0d15}\N{U+0d4d}\N{U+0d1f}\N{U+0d4b}",
      "\N{U+0d28}\N{U+0d35}\N{U+0d02}",
      "\N{U+0d21}\N{U+0d3f}\N{U+0d38}\N{U+0d02}"
    ],
    month_format_narrow => [
      "\N{U+0d1c}",
      "\N{U+0d2b}",
      "\N{U+0d2e}\N{U+0d3e}",
      "\N{U+0d0f}",
      "\N{U+0d2e}\N{U+0d46}",
      "\N{U+0d1c}\N{U+0d42}",
      "\N{U+0d1c}\N{U+0d42}",
      "\N{U+0d13}",
      "\N{U+0d38}",
      "\N{U+0d12}",
      "\N{U+0d28}",
      "\N{U+0d21}\N{U+0d3f}"
    ],
    month_format_wide => [
      "\N{U+0d1c}\N{U+0d28}\N{U+0d41}\N{U+0d35}\N{U+0d30}\N{U+0d3f}",
      "\N{U+0d2b}\N{U+0d46}\N{U+0d2c}\N{U+0d4d}\N{U+0d30}\N{U+0d41}\N{U+0d35}\N{U+0d30}\N{U+0d3f}",
      "\N{U+0d2e}\N{U+0d3e}\N{U+0d7c}\N{U+0d1a}\N{U+0d4d}\N{U+0d1a}\N{U+0d4d}",
      "\N{U+0d0f}\N{U+0d2a}\N{U+0d4d}\N{U+0d30}\N{U+0d3f}\N{U+0d7d}",
      "\N{U+0d2e}\N{U+0d47}\N{U+0d2f}\N{U+0d4d}",
      "\N{U+0d1c}\N{U+0d42}\N{U+0d7a}",
      "\N{U+0d1c}\N{U+0d42}\N{U+0d32}\N{U+0d48}",
      "\N{U+0d13}\N{U+0d17}\N{U+0d38}\N{U+0d4d}\N{U+0d31}\N{U+0d4d}\N{U+0d31}\N{U+0d4d}",
      "\N{U+0d38}\N{U+0d46}\N{U+0d2a}\N{U+0d4d}\N{U+0d31}\N{U+0d4d}\N{U+0d31}\N{U+0d02}\N{U+0d2c}\N{U+0d7c}",
      "\N{U+0d12}\N{U+0d15}\N{U+0d4d}\N{U+200c}\N{U+0d1f}\N{U+0d4b}\N{U+0d2c}\N{U+0d7c}",
      "\N{U+0d28}\N{U+0d35}\N{U+0d02}\N{U+0d2c}\N{U+0d7c}",
      "\N{U+0d21}\N{U+0d3f}\N{U+0d38}\N{U+0d02}\N{U+0d2c}\N{U+0d7c}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0d1c}\N{U+0d28}\N{U+0d41}",
      "\N{U+0d2b}\N{U+0d46}\N{U+0d2c}\N{U+0d4d}\N{U+0d30}\N{U+0d41}",
      "\N{U+0d2e}\N{U+0d3e}\N{U+0d7c}",
      "\N{U+0d0f}\N{U+0d2a}\N{U+0d4d}\N{U+0d30}\N{U+0d3f}",
      "\N{U+0d2e}\N{U+0d47}\N{U+0d2f}\N{U+0d4d}",
      "\N{U+0d1c}\N{U+0d42}\N{U+0d7a}",
      "\N{U+0d1c}\N{U+0d42}\N{U+0d32}\N{U+0d48}",
      "\N{U+0d13}\N{U+0d17}",
      "\N{U+0d38}\N{U+0d46}\N{U+0d2a}\N{U+0d4d}\N{U+0d31}\N{U+0d4d}\N{U+0d31}\N{U+0d02}",
      "\N{U+0d12}\N{U+0d15}\N{U+0d4d}\N{U+0d1f}\N{U+0d4b}",
      "\N{U+0d28}\N{U+0d35}\N{U+0d02}",
      "\N{U+0d21}\N{U+0d3f}\N{U+0d38}\N{U+0d02}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0d1c}",
      "\N{U+0d2b}\N{U+0d46}",
      "\N{U+0d2e}\N{U+0d3e}",
      "\N{U+0d0f}",
      "\N{U+0d2e}\N{U+0d46}",
      "\N{U+0d1c}\N{U+0d42}",
      "\N{U+0d1c}\N{U+0d42}",
      "\N{U+0d13}",
      "\N{U+0d38}\N{U+0d46}",
      "\N{U+0d12}",
      "\N{U+0d28}",
      "\N{U+0d21}\N{U+0d3f}"
    ],
    month_stand_alone_wide => [
      "\N{U+0d1c}\N{U+0d28}\N{U+0d41}\N{U+0d35}\N{U+0d30}\N{U+0d3f}",
      "\N{U+0d2b}\N{U+0d46}\N{U+0d2c}\N{U+0d4d}\N{U+0d30}\N{U+0d41}\N{U+0d35}\N{U+0d30}\N{U+0d3f}",
      "\N{U+0d2e}\N{U+0d3e}\N{U+0d7c}\N{U+0d1a}\N{U+0d4d}\N{U+0d1a}\N{U+0d4d}",
      "\N{U+0d0f}\N{U+0d2a}\N{U+0d4d}\N{U+0d30}\N{U+0d3f}\N{U+0d7d}",
      "\N{U+0d2e}\N{U+0d47}\N{U+0d2f}\N{U+0d4d}",
      "\N{U+0d1c}\N{U+0d42}\N{U+0d7a}",
      "\N{U+0d1c}\N{U+0d42}\N{U+0d32}\N{U+0d48}",
      "\N{U+0d13}\N{U+0d17}\N{U+0d38}\N{U+0d4d}\N{U+0d31}\N{U+0d4d}\N{U+0d31}\N{U+0d4d}",
      "\N{U+0d38}\N{U+0d46}\N{U+0d2a}\N{U+0d4d}\N{U+0d31}\N{U+0d4d}\N{U+0d31}\N{U+0d02}\N{U+0d2c}\N{U+0d7c}",
      "\N{U+0d12}\N{U+0d15}\N{U+0d4d}\N{U+200c}\N{U+0d1f}\N{U+0d4b}\N{U+0d2c}\N{U+0d7c}",
      "\N{U+0d28}\N{U+0d35}\N{U+0d02}\N{U+0d2c}\N{U+0d7c}",
      "\N{U+0d21}\N{U+0d3f}\N{U+0d38}\N{U+0d02}\N{U+0d2c}\N{U+0d7c}"
    ],
    name => "Malayalam",
    native_language => "\N{U+0d2e}\N{U+0d32}\N{U+0d2f}\N{U+0d3e}\N{U+0d33}\N{U+0d02}",
    native_name => "\N{U+0d2e}\N{U+0d32}\N{U+0d2f}\N{U+0d3e}\N{U+0d33}\N{U+0d02}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0d12}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d30}\N{U+0d23}\N{U+0d4d}\N{U+0d1f}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d2e}\N{U+0d42}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d28}\N{U+0d3e}\N{U+0d32}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0d12}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d30}\N{U+0d23}\N{U+0d4d}\N{U+0d1f}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d2e}\N{U+0d42}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d28}\N{U+0d3e}\N{U+0d32}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0d12}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d30}\N{U+0d23}\N{U+0d4d}\N{U+0d1f}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d2e}\N{U+0d42}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d28}\N{U+0d3e}\N{U+0d32}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0d12}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d30}\N{U+0d23}\N{U+0d4d}\N{U+0d1f}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d2e}\N{U+0d42}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d28}\N{U+0d3e}\N{U+0d32}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ml-IN ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "d/M, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMEd => "MMMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "d-M-y, E",
      yMM => "MM-y",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "ml-IN",
    date_format_full => "y, MMMM d, EEEE",
    date_format_long => "y, MMMM d",
    date_format_medium => "y, MMM d",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0d24}\N{U+0d3f}\N{U+0d19}\N{U+0d4d}\N{U+0d15}\N{U+0d7e}",
      "\N{U+0d1a}\N{U+0d4a}\N{U+0d35}\N{U+0d4d}\N{U+0d35}",
      "\N{U+0d2c}\N{U+0d41}\N{U+0d27}\N{U+0d7b}",
      "\N{U+0d35}\N{U+0d4d}\N{U+0d2f}\N{U+0d3e}\N{U+0d34}\N{U+0d02}",
      "\N{U+0d35}\N{U+0d46}\N{U+0d33}\N{U+0d4d}\N{U+0d33}\N{U+0d3f}",
      "\N{U+0d36}\N{U+0d28}\N{U+0d3f}",
      "\N{U+0d1e}\N{U+0d3e}\N{U+0d2f}\N{U+0d7c}"
    ],
    day_format_narrow => [
      "\N{U+0d24}\N{U+0d3f}",
      "\N{U+0d1a}\N{U+0d4a}",
      "\N{U+0d2c}\N{U+0d41}",
      "\N{U+0d35}\N{U+0d4d}\N{U+0d2f}\N{U+0d3e}",
      "\N{U+0d35}\N{U+0d46}",
      "\N{U+0d36}",
      "\N{U+0d1e}"
    ],
    day_format_wide => [
      "\N{U+0d24}\N{U+0d3f}\N{U+0d19}\N{U+0d4d}\N{U+0d15}\N{U+0d33}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d1a}\N{U+0d4a}\N{U+0d35}\N{U+0d4d}\N{U+0d35}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+0d1a}",
      "\N{U+0d2c}\N{U+0d41}\N{U+0d27}\N{U+0d28}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d35}\N{U+0d4d}\N{U+0d2f}\N{U+0d3e}\N{U+0d34}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d35}\N{U+0d46}\N{U+0d33}\N{U+0d4d}\N{U+0d33}\N{U+0d3f}\N{U+0d2f}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d36}\N{U+0d28}\N{U+0d3f}\N{U+0d2f}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d1e}\N{U+0d3e}\N{U+0d2f}\N{U+0d31}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0d24}\N{U+0d3f}\N{U+0d19}\N{U+0d4d}\N{U+0d15}\N{U+0d7e}",
      "\N{U+0d1a}\N{U+0d4a}\N{U+0d35}\N{U+0d4d}\N{U+0d35}",
      "\N{U+0d2c}\N{U+0d41}\N{U+0d27}\N{U+0d7b}",
      "\N{U+0d35}\N{U+0d4d}\N{U+0d2f}\N{U+0d3e}\N{U+0d34}\N{U+0d02}",
      "\N{U+0d35}\N{U+0d46}\N{U+0d33}\N{U+0d4d}\N{U+0d33}\N{U+0d3f}",
      "\N{U+0d36}\N{U+0d28}\N{U+0d3f}",
      "\N{U+0d1e}\N{U+0d3e}\N{U+0d2f}\N{U+0d7c}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0d24}\N{U+0d3f}",
      "\N{U+0d1a}\N{U+0d4a}",
      "\N{U+0d2c}\N{U+0d41}",
      "\N{U+0d35}\N{U+0d4d}\N{U+0d2f}\N{U+0d3e}",
      "\N{U+0d35}\N{U+0d46}",
      "\N{U+0d36}",
      "\N{U+0d1e}\N{U+0d3e}"
    ],
    day_stand_alone_wide => [
      "\N{U+0d24}\N{U+0d3f}\N{U+0d19}\N{U+0d4d}\N{U+0d15}\N{U+0d33}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d1a}\N{U+0d4a}\N{U+0d35}\N{U+0d4d}\N{U+0d35}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d2c}\N{U+0d41}\N{U+0d27}\N{U+0d28}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d35}\N{U+0d4d}\N{U+0d2f}\N{U+0d3e}\N{U+0d34}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d35}\N{U+0d46}\N{U+0d33}\N{U+0d4d}\N{U+0d33}\N{U+0d3f}\N{U+0d2f}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d36}\N{U+0d28}\N{U+0d3f}\N{U+0d2f}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}",
      "\N{U+0d1e}\N{U+0d3e}\N{U+0d2f}\N{U+0d31}\N{U+0d3e}\N{U+0d34}\N{U+0d4d}\N{U+200c}\N{U+0d1a}"
    ],
    era_abbreviated => [
      "\N{U+0d15}\N{U+0d4d}\N{U+0d30}\N{U+0d3f}.\N{U+0d2e}\N{U+0d41}.",
      "\N{U+0d0e}\N{U+0d21}\N{U+0d3f}"
    ],
    era_narrow => [
      "\N{U+0d15}\N{U+0d4d}\N{U+0d30}\N{U+0d3f}.\N{U+0d2e}\N{U+0d41}.",
      "\N{U+0d0e}\N{U+0d21}\N{U+0d3f}"
    ],
    era_wide => [
      "\N{U+0d15}\N{U+0d4d}\N{U+0d30}\N{U+0d3f}\N{U+0d38}\N{U+0d4d}\N{U+200c}\N{U+0d24}\N{U+0d41}\N{U+0d35}\N{U+0d3f}\N{U+0d28}\N{U+0d4d} \N{U+0d2e}\N{U+0d41}\N{U+0d2e}\N{U+0d4d}\N{U+0d2a}\N{U+0d4d}",
      "\N{U+0d06}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d4b} \N{U+0d21}\N{U+0d4a}\N{U+0d2e}\N{U+0d3f}\N{U+0d28}\N{U+0d3f}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A %d %B %Y",
    glibc_datetime_format => "%A %d %B %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "Malayalam",
    month_format_abbreviated => [
      "\N{U+0d1c}\N{U+0d28}\N{U+0d41}",
      "\N{U+0d2b}\N{U+0d46}\N{U+0d2c}\N{U+0d4d}\N{U+0d30}\N{U+0d41}",
      "\N{U+0d2e}\N{U+0d3e}\N{U+0d7c}",
      "\N{U+0d0f}\N{U+0d2a}\N{U+0d4d}\N{U+0d30}\N{U+0d3f}",
      "\N{U+0d2e}\N{U+0d47}\N{U+0d2f}\N{U+0d4d}",
      "\N{U+0d1c}\N{U+0d42}\N{U+0d7a}",
      "\N{U+0d1c}\N{U+0d42}\N{U+0d32}\N{U+0d48}",
      "\N{U+0d13}\N{U+0d17}",
      "\N{U+0d38}\N{U+0d46}\N{U+0d2a}\N{U+0d4d}\N{U+0d31}\N{U+0d4d}\N{U+0d31}\N{U+0d02}",
      "\N{U+0d12}\N{U+0d15}\N{U+0d4d}\N{U+0d1f}\N{U+0d4b}",
      "\N{U+0d28}\N{U+0d35}\N{U+0d02}",
      "\N{U+0d21}\N{U+0d3f}\N{U+0d38}\N{U+0d02}"
    ],
    month_format_narrow => [
      "\N{U+0d1c}",
      "\N{U+0d2b}",
      "\N{U+0d2e}\N{U+0d3e}",
      "\N{U+0d0f}",
      "\N{U+0d2e}\N{U+0d46}",
      "\N{U+0d1c}\N{U+0d42}",
      "\N{U+0d1c}\N{U+0d42}",
      "\N{U+0d13}",
      "\N{U+0d38}",
      "\N{U+0d12}",
      "\N{U+0d28}",
      "\N{U+0d21}\N{U+0d3f}"
    ],
    month_format_wide => [
      "\N{U+0d1c}\N{U+0d28}\N{U+0d41}\N{U+0d35}\N{U+0d30}\N{U+0d3f}",
      "\N{U+0d2b}\N{U+0d46}\N{U+0d2c}\N{U+0d4d}\N{U+0d30}\N{U+0d41}\N{U+0d35}\N{U+0d30}\N{U+0d3f}",
      "\N{U+0d2e}\N{U+0d3e}\N{U+0d7c}\N{U+0d1a}\N{U+0d4d}\N{U+0d1a}\N{U+0d4d}",
      "\N{U+0d0f}\N{U+0d2a}\N{U+0d4d}\N{U+0d30}\N{U+0d3f}\N{U+0d7d}",
      "\N{U+0d2e}\N{U+0d47}\N{U+0d2f}\N{U+0d4d}",
      "\N{U+0d1c}\N{U+0d42}\N{U+0d7a}",
      "\N{U+0d1c}\N{U+0d42}\N{U+0d32}\N{U+0d48}",
      "\N{U+0d13}\N{U+0d17}\N{U+0d38}\N{U+0d4d}\N{U+0d31}\N{U+0d4d}\N{U+0d31}\N{U+0d4d}",
      "\N{U+0d38}\N{U+0d46}\N{U+0d2a}\N{U+0d4d}\N{U+0d31}\N{U+0d4d}\N{U+0d31}\N{U+0d02}\N{U+0d2c}\N{U+0d7c}",
      "\N{U+0d12}\N{U+0d15}\N{U+0d4d}\N{U+200c}\N{U+0d1f}\N{U+0d4b}\N{U+0d2c}\N{U+0d7c}",
      "\N{U+0d28}\N{U+0d35}\N{U+0d02}\N{U+0d2c}\N{U+0d7c}",
      "\N{U+0d21}\N{U+0d3f}\N{U+0d38}\N{U+0d02}\N{U+0d2c}\N{U+0d7c}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0d1c}\N{U+0d28}\N{U+0d41}",
      "\N{U+0d2b}\N{U+0d46}\N{U+0d2c}\N{U+0d4d}\N{U+0d30}\N{U+0d41}",
      "\N{U+0d2e}\N{U+0d3e}\N{U+0d7c}",
      "\N{U+0d0f}\N{U+0d2a}\N{U+0d4d}\N{U+0d30}\N{U+0d3f}",
      "\N{U+0d2e}\N{U+0d47}\N{U+0d2f}\N{U+0d4d}",
      "\N{U+0d1c}\N{U+0d42}\N{U+0d7a}",
      "\N{U+0d1c}\N{U+0d42}\N{U+0d32}\N{U+0d48}",
      "\N{U+0d13}\N{U+0d17}",
      "\N{U+0d38}\N{U+0d46}\N{U+0d2a}\N{U+0d4d}\N{U+0d31}\N{U+0d4d}\N{U+0d31}\N{U+0d02}",
      "\N{U+0d12}\N{U+0d15}\N{U+0d4d}\N{U+0d1f}\N{U+0d4b}",
      "\N{U+0d28}\N{U+0d35}\N{U+0d02}",
      "\N{U+0d21}\N{U+0d3f}\N{U+0d38}\N{U+0d02}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0d1c}",
      "\N{U+0d2b}\N{U+0d46}",
      "\N{U+0d2e}\N{U+0d3e}",
      "\N{U+0d0f}",
      "\N{U+0d2e}\N{U+0d46}",
      "\N{U+0d1c}\N{U+0d42}",
      "\N{U+0d1c}\N{U+0d42}",
      "\N{U+0d13}",
      "\N{U+0d38}\N{U+0d46}",
      "\N{U+0d12}",
      "\N{U+0d28}",
      "\N{U+0d21}\N{U+0d3f}"
    ],
    month_stand_alone_wide => [
      "\N{U+0d1c}\N{U+0d28}\N{U+0d41}\N{U+0d35}\N{U+0d30}\N{U+0d3f}",
      "\N{U+0d2b}\N{U+0d46}\N{U+0d2c}\N{U+0d4d}\N{U+0d30}\N{U+0d41}\N{U+0d35}\N{U+0d30}\N{U+0d3f}",
      "\N{U+0d2e}\N{U+0d3e}\N{U+0d7c}\N{U+0d1a}\N{U+0d4d}\N{U+0d1a}\N{U+0d4d}",
      "\N{U+0d0f}\N{U+0d2a}\N{U+0d4d}\N{U+0d30}\N{U+0d3f}\N{U+0d7d}",
      "\N{U+0d2e}\N{U+0d47}\N{U+0d2f}\N{U+0d4d}",
      "\N{U+0d1c}\N{U+0d42}\N{U+0d7a}",
      "\N{U+0d1c}\N{U+0d42}\N{U+0d32}\N{U+0d48}",
      "\N{U+0d13}\N{U+0d17}\N{U+0d38}\N{U+0d4d}\N{U+0d31}\N{U+0d4d}\N{U+0d31}\N{U+0d4d}",
      "\N{U+0d38}\N{U+0d46}\N{U+0d2a}\N{U+0d4d}\N{U+0d31}\N{U+0d4d}\N{U+0d31}\N{U+0d02}\N{U+0d2c}\N{U+0d7c}",
      "\N{U+0d12}\N{U+0d15}\N{U+0d4d}\N{U+200c}\N{U+0d1f}\N{U+0d4b}\N{U+0d2c}\N{U+0d7c}",
      "\N{U+0d28}\N{U+0d35}\N{U+0d02}\N{U+0d2c}\N{U+0d7c}",
      "\N{U+0d21}\N{U+0d3f}\N{U+0d38}\N{U+0d02}\N{U+0d2c}\N{U+0d7c}"
    ],
    name => "Malayalam India",
    native_language => "\N{U+0d2e}\N{U+0d32}\N{U+0d2f}\N{U+0d3e}\N{U+0d33}\N{U+0d02}",
    native_name => "\N{U+0d2e}\N{U+0d32}\N{U+0d2f}\N{U+0d3e}\N{U+0d33}\N{U+0d02} \N{U+0d07}\N{U+0d28}\N{U+0d4d}\N{U+0d24}\N{U+0d4d}\N{U+0d2f}",
    native_script => undef,
    native_territory => "\N{U+0d07}\N{U+0d28}\N{U+0d4d}\N{U+0d24}\N{U+0d4d}\N{U+0d2f}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0d12}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d30}\N{U+0d23}\N{U+0d4d}\N{U+0d1f}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d2e}\N{U+0d42}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d28}\N{U+0d3e}\N{U+0d32}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0d12}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d30}\N{U+0d23}\N{U+0d4d}\N{U+0d1f}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d2e}\N{U+0d42}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d28}\N{U+0d3e}\N{U+0d32}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0d12}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d30}\N{U+0d23}\N{U+0d4d}\N{U+0d1f}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d2e}\N{U+0d42}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d28}\N{U+0d3e}\N{U+0d32}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0d12}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d30}\N{U+0d23}\N{U+0d4d}\N{U+0d1f}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d2e}\N{U+0d42}\N{U+0d28}\N{U+0d4d}\N{U+0d28}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}",
      "\N{U+0d28}\N{U+0d3e}\N{U+0d32}\N{U+0d3e}\N{U+0d02} \N{U+0d2a}\N{U+0d3e}\N{U+0d26}\N{U+0d02}"
    ],
    script => undef,
    territory => "India",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ mn ]__
  {
    am_pm_abbreviated => [
      "\N{U+04ae}\N{U+04e8}",
      "\N{U+04ae}\N{U+0425}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "dd E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "E, G y MMM d",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M-d",
      MMM => "LLL",
      MMMEd => "E MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M-d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-M",
      yMEd => "E, y-M-d",
      yMMM => "y MMM",
      yMMMEd => "E, y MMM d",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-M-d",
      yQQQ => "y QQQ",
      yQQQQ => "y '\N{U+043e}\N{U+043d}\N{U+044b}' QQQQ"
    },
    code => "mn",
    date_format_full => "EEEE, y '\N{U+043e}\N{U+043d}\N{U+044b}' MM '\N{U+0441}\N{U+0430}\N{U+0440}\N{U+044b}\N{U+043d}' d",
    date_format_long => "y '\N{U+043e}\N{U+043d}\N{U+044b}' MM '\N{U+0441}\N{U+0430}\N{U+0440}\N{U+044b}\N{U+043d}' d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0414}\N{U+0430}",
      "\N{U+041c}\N{U+044f}",
      "\N{U+041b}\N{U+0445}",
      "\N{U+041f}\N{U+04af}",
      "\N{U+0411}\N{U+0430}",
      "\N{U+0411}\N{U+044f}",
      "\N{U+041d}\N{U+044f}"
    ],
    day_format_narrow => [
      2,
      3,
      4,
      5,
      6,
      7,
      1
    ],
    day_format_wide => [
      "\N{U+0434}\N{U+0430}\N{U+0432}\N{U+0430}\N{U+0430}",
      "\N{U+043c}\N{U+044f}\N{U+0433}\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+043b}\N{U+0445}\N{U+0430}\N{U+0433}\N{U+0432}\N{U+0430}",
      "\N{U+043f}\N{U+04af}\N{U+0440}\N{U+044d}\N{U+0432}",
      "\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0441}\N{U+0430}\N{U+043d}",
      "\N{U+0431}\N{U+044f}\N{U+043c}\N{U+0431}\N{U+0430}",
      "\N{U+043d}\N{U+044f}\N{U+043c}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0414}\N{U+0430}",
      "\N{U+041c}\N{U+044f}",
      "\N{U+041b}\N{U+0445}",
      "\N{U+041f}\N{U+04af}",
      "\N{U+0411}\N{U+0430}",
      "\N{U+0411}\N{U+044f}",
      "\N{U+041d}\N{U+044f}"
    ],
    day_stand_alone_narrow => [
      2,
      3,
      4,
      5,
      6,
      7,
      1
    ],
    day_stand_alone_wide => [
      "\N{U+0434}\N{U+0430}\N{U+0432}\N{U+0430}\N{U+0430}",
      "\N{U+043c}\N{U+044f}\N{U+0433}\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+043b}\N{U+0445}\N{U+0430}\N{U+0433}\N{U+0432}\N{U+0430}",
      "\N{U+043f}\N{U+04af}\N{U+0440}\N{U+044d}\N{U+0432}",
      "\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0441}\N{U+0430}\N{U+043d}",
      "\N{U+0431}\N{U+044f}\N{U+043c}\N{U+0431}\N{U+0430}",
      "\N{U+043d}\N{U+044f}\N{U+043c}"
    ],
    era_abbreviated => [
      "\N{U+043c}.\N{U+044d}.\N{U+04e9}",
      "\N{U+043c}.\N{U+044d}."
    ],
    era_narrow => [
      "\N{U+041c}\N{U+042d}\N{U+04e8}",
      "\N{U+041c}\N{U+042d}"
    ],
    era_wide => [
      "\N{U+043c}\N{U+0430}\N{U+043d}\N{U+0430}\N{U+0439} \N{U+044d}\N{U+0440}\N{U+0438}\N{U+043d}\N{U+0438}\N{U+0439} \N{U+04e9}\N{U+043c}\N{U+043d}\N{U+04e9}\N{U+0445}",
      "\N{U+043c}\N{U+0430}\N{U+043d}\N{U+0430}\N{U+0439} \N{U+044d}\N{U+0440}\N{U+0438}\N{U+043d}\N{U+0438}\N{U+0439}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Mongolian",
    month_format_abbreviated => [
      "1-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "2-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "3-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "4-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "5-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "6-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "7-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "8-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "9-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "10-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "11-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "12-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+041d}\N{U+044d}\N{U+0433}\N{U+0434}\N{U+04af}\N{U+0433}\N{U+044d}\N{U+044d}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0425}\N{U+043e}\N{U+0451}\N{U+0440}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0413}\N{U+0443}\N{U+0440}\N{U+0430}\N{U+0432}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0414}\N{U+04e9}\N{U+0440}\N{U+04e9}\N{U+0432}\N{U+0434}\N{U+04af}\N{U+0433}\N{U+044d}\N{U+044d}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0422}\N{U+0430}\N{U+0432}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0417}\N{U+0443}\N{U+0440}\N{U+0433}\N{U+0430}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0414}\N{U+043e}\N{U+043b}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+041d}\N{U+0430}\N{U+0439}\N{U+043c}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0415}\N{U+0441}\N{U+0434}\N{U+04af}\N{U+0433}\N{U+044d}\N{U+044d}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+0440}\N{U+0430}\N{U+0432}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+0440}\N{U+0432}\N{U+0430}\N{U+043d} \N{U+043d}\N{U+044d}\N{U+0433}\N{U+0434}\N{U+04af}\N{U+0433}\N{U+044d}\N{U+044d}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+0440}\N{U+0432}\N{U+0430}\N{U+043d} \N{U+0445}\N{U+043e}\N{U+0451}\N{U+0440}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}"
    ],
    month_stand_alone_abbreviated => [
      "1-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "2-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "3-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "4-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "5-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "6-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "7-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "8-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "9-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "10-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "11-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "12-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+041d}\N{U+044d}\N{U+0433}\N{U+0434}\N{U+04af}\N{U+0433}\N{U+044d}\N{U+044d}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0425}\N{U+043e}\N{U+0451}\N{U+0440}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0413}\N{U+0443}\N{U+0440}\N{U+0430}\N{U+0432}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0414}\N{U+04e9}\N{U+0440}\N{U+04e9}\N{U+0432}\N{U+0434}\N{U+04af}\N{U+0433}\N{U+044d}\N{U+044d}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0422}\N{U+0430}\N{U+0432}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0417}\N{U+0443}\N{U+0440}\N{U+0433}\N{U+0430}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0414}\N{U+043e}\N{U+043b}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+041d}\N{U+0430}\N{U+0439}\N{U+043c}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0415}\N{U+0441}\N{U+0434}\N{U+04af}\N{U+0433}\N{U+044d}\N{U+044d}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+0440}\N{U+0430}\N{U+0432}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+0440}\N{U+0432}\N{U+0430}\N{U+043d} \N{U+043d}\N{U+044d}\N{U+0433}\N{U+0434}\N{U+04af}\N{U+0433}\N{U+044d}\N{U+044d}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+0440}\N{U+0432}\N{U+0430}\N{U+043d} \N{U+0445}\N{U+043e}\N{U+0451}\N{U+0440}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}"
    ],
    name => "Mongolian",
    native_language => "\N{U+043c}\N{U+043e}\N{U+043d}\N{U+0433}\N{U+043e}\N{U+043b}",
    native_name => "\N{U+043c}\N{U+043e}\N{U+043d}\N{U+0433}\N{U+043e}\N{U+043b}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0423}1",
      "\N{U+0423}2",
      "\N{U+0423}3",
      "\N{U+0423}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0440} \N{U+0443}\N{U+043b}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043b}",
      "2-\N{U+0440} \N{U+0443}\N{U+043b}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043b}",
      "3-\N{U+0440} \N{U+0443}\N{U+043b}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043b}",
      "4-\N{U+0440} \N{U+0443}\N{U+043b}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0423}1",
      "\N{U+0423}2",
      "\N{U+0423}3",
      "\N{U+0423}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0440} \N{U+0443}\N{U+043b}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043b}",
      "2-\N{U+0440} \N{U+0443}\N{U+043b}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043b}",
      "3-\N{U+0440} \N{U+0443}\N{U+043b}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043b}",
      "4-\N{U+0440} \N{U+0443}\N{U+043b}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mn-MN ]__
  {
    am_pm_abbreviated => [
      "\N{U+04ae}\N{U+04e8}",
      "\N{U+04ae}\N{U+0425}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "dd E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "E, G y MMM d",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M-d",
      MMM => "LLL",
      MMMEd => "E MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M-d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-M",
      yMEd => "E, y-M-d",
      yMMM => "y MMM",
      yMMMEd => "E, y MMM d",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-M-d",
      yQQQ => "y QQQ",
      yQQQQ => "y '\N{U+043e}\N{U+043d}\N{U+044b}' QQQQ"
    },
    code => "mn-MN",
    date_format_full => "EEEE, y '\N{U+043e}\N{U+043d}\N{U+044b}' MM '\N{U+0441}\N{U+0430}\N{U+0440}\N{U+044b}\N{U+043d}' d",
    date_format_long => "y '\N{U+043e}\N{U+043d}\N{U+044b}' MM '\N{U+0441}\N{U+0430}\N{U+0440}\N{U+044b}\N{U+043d}' d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0414}\N{U+0430}",
      "\N{U+041c}\N{U+044f}",
      "\N{U+041b}\N{U+0445}",
      "\N{U+041f}\N{U+04af}",
      "\N{U+0411}\N{U+0430}",
      "\N{U+0411}\N{U+044f}",
      "\N{U+041d}\N{U+044f}"
    ],
    day_format_narrow => [
      2,
      3,
      4,
      5,
      6,
      7,
      1
    ],
    day_format_wide => [
      "\N{U+0434}\N{U+0430}\N{U+0432}\N{U+0430}\N{U+0430}",
      "\N{U+043c}\N{U+044f}\N{U+0433}\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+043b}\N{U+0445}\N{U+0430}\N{U+0433}\N{U+0432}\N{U+0430}",
      "\N{U+043f}\N{U+04af}\N{U+0440}\N{U+044d}\N{U+0432}",
      "\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0441}\N{U+0430}\N{U+043d}",
      "\N{U+0431}\N{U+044f}\N{U+043c}\N{U+0431}\N{U+0430}",
      "\N{U+043d}\N{U+044f}\N{U+043c}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0414}\N{U+0430}",
      "\N{U+041c}\N{U+044f}",
      "\N{U+041b}\N{U+0445}",
      "\N{U+041f}\N{U+04af}",
      "\N{U+0411}\N{U+0430}",
      "\N{U+0411}\N{U+044f}",
      "\N{U+041d}\N{U+044f}"
    ],
    day_stand_alone_narrow => [
      2,
      3,
      4,
      5,
      6,
      7,
      1
    ],
    day_stand_alone_wide => [
      "\N{U+0434}\N{U+0430}\N{U+0432}\N{U+0430}\N{U+0430}",
      "\N{U+043c}\N{U+044f}\N{U+0433}\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+043b}\N{U+0445}\N{U+0430}\N{U+0433}\N{U+0432}\N{U+0430}",
      "\N{U+043f}\N{U+04af}\N{U+0440}\N{U+044d}\N{U+0432}",
      "\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0441}\N{U+0430}\N{U+043d}",
      "\N{U+0431}\N{U+044f}\N{U+043c}\N{U+0431}\N{U+0430}",
      "\N{U+043d}\N{U+044f}\N{U+043c}"
    ],
    era_abbreviated => [
      "\N{U+043c}.\N{U+044d}.\N{U+04e9}",
      "\N{U+043c}.\N{U+044d}."
    ],
    era_narrow => [
      "\N{U+041c}\N{U+042d}\N{U+04e8}",
      "\N{U+041c}\N{U+042d}"
    ],
    era_wide => [
      "\N{U+043c}\N{U+0430}\N{U+043d}\N{U+0430}\N{U+0439} \N{U+044d}\N{U+0440}\N{U+0438}\N{U+043d}\N{U+0438}\N{U+0439} \N{U+04e9}\N{U+043c}\N{U+043d}\N{U+04e9}\N{U+0445}",
      "\N{U+043c}\N{U+0430}\N{U+043d}\N{U+0430}\N{U+0439} \N{U+044d}\N{U+0440}\N{U+0438}\N{U+043d}\N{U+0438}\N{U+0439}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%Z %Y \N{U+043e}\N{U+043d}\N{U+044b} %B %e, %a %H:%M:%S",
    glibc_date_format => "%Y.%m.%d",
    glibc_datetime_format => "%Y %b %d, %a %T",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Mongolian",
    month_format_abbreviated => [
      "1-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "2-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "3-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "4-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "5-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "6-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "7-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "8-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "9-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "10-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "11-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "12-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+041d}\N{U+044d}\N{U+0433}\N{U+0434}\N{U+04af}\N{U+0433}\N{U+044d}\N{U+044d}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0425}\N{U+043e}\N{U+0451}\N{U+0440}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0413}\N{U+0443}\N{U+0440}\N{U+0430}\N{U+0432}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0414}\N{U+04e9}\N{U+0440}\N{U+04e9}\N{U+0432}\N{U+0434}\N{U+04af}\N{U+0433}\N{U+044d}\N{U+044d}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0422}\N{U+0430}\N{U+0432}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0417}\N{U+0443}\N{U+0440}\N{U+0433}\N{U+0430}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0414}\N{U+043e}\N{U+043b}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+041d}\N{U+0430}\N{U+0439}\N{U+043c}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0415}\N{U+0441}\N{U+0434}\N{U+04af}\N{U+0433}\N{U+044d}\N{U+044d}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+0440}\N{U+0430}\N{U+0432}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+0440}\N{U+0432}\N{U+0430}\N{U+043d} \N{U+043d}\N{U+044d}\N{U+0433}\N{U+0434}\N{U+04af}\N{U+0433}\N{U+044d}\N{U+044d}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+0440}\N{U+0432}\N{U+0430}\N{U+043d} \N{U+0445}\N{U+043e}\N{U+0451}\N{U+0440}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}"
    ],
    month_stand_alone_abbreviated => [
      "1-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "2-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "3-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "4-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "5-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "6-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "7-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "8-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "9-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "10-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "11-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "12-\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+041d}\N{U+044d}\N{U+0433}\N{U+0434}\N{U+04af}\N{U+0433}\N{U+044d}\N{U+044d}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0425}\N{U+043e}\N{U+0451}\N{U+0440}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0413}\N{U+0443}\N{U+0440}\N{U+0430}\N{U+0432}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0414}\N{U+04e9}\N{U+0440}\N{U+04e9}\N{U+0432}\N{U+0434}\N{U+04af}\N{U+0433}\N{U+044d}\N{U+044d}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0422}\N{U+0430}\N{U+0432}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0417}\N{U+0443}\N{U+0440}\N{U+0433}\N{U+0430}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0414}\N{U+043e}\N{U+043b}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+041d}\N{U+0430}\N{U+0439}\N{U+043c}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0415}\N{U+0441}\N{U+0434}\N{U+04af}\N{U+0433}\N{U+044d}\N{U+044d}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+0440}\N{U+0430}\N{U+0432}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+0440}\N{U+0432}\N{U+0430}\N{U+043d} \N{U+043d}\N{U+044d}\N{U+0433}\N{U+0434}\N{U+04af}\N{U+0433}\N{U+044d}\N{U+044d}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+0440}\N{U+0432}\N{U+0430}\N{U+043d} \N{U+0445}\N{U+043e}\N{U+0451}\N{U+0440}\N{U+0434}\N{U+0443}\N{U+0433}\N{U+0430}\N{U+0430}\N{U+0440} \N{U+0441}\N{U+0430}\N{U+0440}"
    ],
    name => "Mongolian Mongolia",
    native_language => "\N{U+043c}\N{U+043e}\N{U+043d}\N{U+0433}\N{U+043e}\N{U+043b}",
    native_name => "\N{U+043c}\N{U+043e}\N{U+043d}\N{U+0433}\N{U+043e}\N{U+043b} \N{U+041c}\N{U+043e}\N{U+043d}\N{U+0433}\N{U+043e}\N{U+043b}",
    native_script => undef,
    native_territory => "\N{U+041c}\N{U+043e}\N{U+043d}\N{U+0433}\N{U+043e}\N{U+043b}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0423}1",
      "\N{U+0423}2",
      "\N{U+0423}3",
      "\N{U+0423}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0440} \N{U+0443}\N{U+043b}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043b}",
      "2-\N{U+0440} \N{U+0443}\N{U+043b}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043b}",
      "3-\N{U+0440} \N{U+0443}\N{U+043b}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043b}",
      "4-\N{U+0440} \N{U+0443}\N{U+043b}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0423}1",
      "\N{U+0423}2",
      "\N{U+0423}3",
      "\N{U+0423}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0440} \N{U+0443}\N{U+043b}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043b}",
      "2-\N{U+0440} \N{U+0443}\N{U+043b}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043b}",
      "3-\N{U+0440} \N{U+0443}\N{U+043b}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043b}",
      "4-\N{U+0440} \N{U+0443}\N{U+043b}\N{U+0438}\N{U+0440}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => "Mongolia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mr ]__
  {
    am_pm_abbreviated => [
      "\N{U+092e}.\N{U+092a}\N{U+0942}.",
      "\N{U+092e}.\N{U+0909}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "MMM G y",
      GyMMMEd => "E, d MMM, G y",
      GyMMMd => "d MMM, G y",
      H => "HH",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd-MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E, d, MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "mr",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} \N{U+0930}\N{U+094b}\N{U+091c}\N{U+0940} {0}",
    datetime_format_long => "{1} \N{U+0930}\N{U+094b}\N{U+091c}\N{U+0940} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0938}\N{U+094b}\N{U+092e}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0933}",
      "\N{U+092c}\N{U+0941}\N{U+0927}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}",
      "\N{U+0930}\N{U+0935}\N{U+093f}"
    ],
    day_format_narrow => [
      "\N{U+0938}\N{U+094b}",
      "\N{U+092e}\N{U+0902}",
      "\N{U+092c}\N{U+0941}",
      "\N{U+0917}\N{U+0941}",
      "\N{U+0936}\N{U+0941}",
      "\N{U+0936}",
      "\N{U+0930}"
    ],
    day_format_wide => [
      "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0933}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0930}\N{U+0935}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0938}\N{U+094b}\N{U+092e}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0933}",
      "\N{U+092c}\N{U+0941}\N{U+0927}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}",
      "\N{U+0930}\N{U+0935}\N{U+093f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0938}\N{U+094b}",
      "\N{U+092e}\N{U+0902}",
      "\N{U+092c}\N{U+0941}",
      "\N{U+0917}\N{U+0941}",
      "\N{U+0936}\N{U+0941}",
      "\N{U+0936}",
      "\N{U+0930}"
    ],
    day_stand_alone_wide => [
      "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0933}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0930}\N{U+0935}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}"
    ],
    era_abbreviated => [
      "\N{U+0907}. \N{U+0938}. \N{U+092a}\N{U+0942}.",
      "\N{U+0907}. \N{U+0938}."
    ],
    era_narrow => [
      "\N{U+0907}. \N{U+0938}. \N{U+092a}\N{U+0942}.",
      "\N{U+0907}. \N{U+0938}."
    ],
    era_wide => [
      "\N{U+0908}\N{U+0938}\N{U+0935}\N{U+0940}\N{U+0938}\N{U+0928}\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0908}\N{U+0938}\N{U+0935}\N{U+0940}\N{U+0938}\N{U+0928}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Marathi",
    month_format_abbreviated => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0947}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+090f}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0948}",
      "\N{U+0911}\N{U+0917}",
      "\N{U+0938}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+0902}",
      "\N{U+0911}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}",
      "\N{U+0928}\N{U+094b}\N{U+0935}\N{U+094d}\N{U+0939}\N{U+0947}\N{U+0902}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+0902}"
    ],
    month_format_narrow => [
      "\N{U+091c}\N{U+093e}",
      "\N{U+092b}\N{U+0947}",
      "\N{U+092e}\N{U+093e}",
      "\N{U+090f}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}",
      "\N{U+091c}\N{U+0941}",
      "\N{U+0911}",
      "\N{U+0938}",
      "\N{U+0911}",
      "\N{U+0928}\N{U+094b}",
      "\N{U+0921}\N{U+093f}"
    ],
    month_format_wide => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0947}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+090f}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0948}",
      "\N{U+0911}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0911}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+0935}\N{U+094d}\N{U+0939}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0947}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+090f}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0948}",
      "\N{U+0911}\N{U+0917}",
      "\N{U+0938}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+0902}",
      "\N{U+0911}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}",
      "\N{U+0928}\N{U+094b}\N{U+0935}\N{U+094d}\N{U+0939}\N{U+0947}\N{U+0902}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+0902}"
    ],
    month_stand_alone_narrow => [
      "\N{U+091c}\N{U+093e}",
      "\N{U+092b}\N{U+0947}",
      "\N{U+092e}\N{U+093e}",
      "\N{U+090f}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}",
      "\N{U+091c}\N{U+0941}",
      "\N{U+0911}",
      "\N{U+0938}",
      "\N{U+0911}",
      "\N{U+0928}\N{U+094b}",
      "\N{U+0921}\N{U+093f}"
    ],
    month_stand_alone_wide => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0947}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+090f}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0948}",
      "\N{U+0911}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0911}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+0935}\N{U+094d}\N{U+0939}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}"
    ],
    name => "Marathi",
    native_language => "\N{U+092e}\N{U+0930}\N{U+093e}\N{U+0920}\N{U+0940}",
    native_name => "\N{U+092e}\N{U+0930}\N{U+093e}\N{U+0920}\N{U+0940}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0924}\N{U+093f}\N{U+0967}",
      "\N{U+0924}\N{U+093f}\N{U+0968}",
      "\N{U+0924}\N{U+093f}\N{U+0969}",
      "\N{U+0924}\N{U+093f}\N{U+096a}"
    ],
    quarter_format_narrow => [
      "\N{U+0967}",
      "\N{U+0968}",
      "\N{U+0969}",
      "\N{U+096a}"
    ],
    quarter_format_wide => [
      "\N{U+092a}\N{U+094d}\N{U+0930}\N{U+0925}\N{U+092e} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+0926}\N{U+094d}\N{U+0935}\N{U+093f}\N{U+0924}\N{U+0940}\N{U+092f} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+0924}\N{U+0943}\N{U+0924}\N{U+0940}\N{U+092f} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+091a}\N{U+0924}\N{U+0941}\N{U+0930}\N{U+094d}\N{U+0925} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0924}\N{U+093f}\N{U+0967}",
      "\N{U+0924}\N{U+093f}\N{U+0968}",
      "\N{U+0924}\N{U+093f}\N{U+0969}",
      "\N{U+0924}\N{U+093f}\N{U+096a}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0967}",
      "\N{U+0968}",
      "\N{U+0969}",
      "\N{U+096a}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+092a}\N{U+094d}\N{U+0930}\N{U+0925}\N{U+092e} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+0926}\N{U+094d}\N{U+0935}\N{U+093f}\N{U+0924}\N{U+0940}\N{U+092f} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+0924}\N{U+0943}\N{U+0924}\N{U+0940}\N{U+092f} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+091a}\N{U+0924}\N{U+0941}\N{U+0930}\N{U+094d}\N{U+0925} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ mr-IN ]__
  {
    am_pm_abbreviated => [
      "\N{U+092e}.\N{U+092a}\N{U+0942}.",
      "\N{U+092e}.\N{U+0909}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "MMM G y",
      GyMMMEd => "E, d MMM, G y",
      GyMMMd => "d MMM, G y",
      H => "HH",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd-MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E, d, MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "mr-IN",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} \N{U+0930}\N{U+094b}\N{U+091c}\N{U+0940} {0}",
    datetime_format_long => "{1} \N{U+0930}\N{U+094b}\N{U+091c}\N{U+0940} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0938}\N{U+094b}\N{U+092e}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0933}",
      "\N{U+092c}\N{U+0941}\N{U+0927}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}",
      "\N{U+0930}\N{U+0935}\N{U+093f}"
    ],
    day_format_narrow => [
      "\N{U+0938}\N{U+094b}",
      "\N{U+092e}\N{U+0902}",
      "\N{U+092c}\N{U+0941}",
      "\N{U+0917}\N{U+0941}",
      "\N{U+0936}\N{U+0941}",
      "\N{U+0936}",
      "\N{U+0930}"
    ],
    day_format_wide => [
      "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0933}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0930}\N{U+0935}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0938}\N{U+094b}\N{U+092e}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0933}",
      "\N{U+092c}\N{U+0941}\N{U+0927}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}",
      "\N{U+0930}\N{U+0935}\N{U+093f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0938}\N{U+094b}",
      "\N{U+092e}\N{U+0902}",
      "\N{U+092c}\N{U+0941}",
      "\N{U+0917}\N{U+0941}",
      "\N{U+0936}\N{U+0941}",
      "\N{U+0936}",
      "\N{U+0930}"
    ],
    day_stand_alone_wide => [
      "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0902}\N{U+0917}\N{U+0933}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0917}\N{U+0941}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}",
      "\N{U+0930}\N{U+0935}\N{U+093f}\N{U+0935}\N{U+093e}\N{U+0930}"
    ],
    era_abbreviated => [
      "\N{U+0907}. \N{U+0938}. \N{U+092a}\N{U+0942}.",
      "\N{U+0907}. \N{U+0938}."
    ],
    era_narrow => [
      "\N{U+0907}. \N{U+0938}. \N{U+092a}\N{U+0942}.",
      "\N{U+0907}. \N{U+0938}."
    ],
    era_wide => [
      "\N{U+0908}\N{U+0938}\N{U+0935}\N{U+0940}\N{U+0938}\N{U+0928}\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0908}\N{U+0938}\N{U+0935}\N{U+0940}\N{U+0938}\N{U+0928}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A %d %b %Y",
    glibc_datetime_format => "%A %d %b %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "Marathi",
    month_format_abbreviated => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0947}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+090f}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0948}",
      "\N{U+0911}\N{U+0917}",
      "\N{U+0938}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+0902}",
      "\N{U+0911}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}",
      "\N{U+0928}\N{U+094b}\N{U+0935}\N{U+094d}\N{U+0939}\N{U+0947}\N{U+0902}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+0902}"
    ],
    month_format_narrow => [
      "\N{U+091c}\N{U+093e}",
      "\N{U+092b}\N{U+0947}",
      "\N{U+092e}\N{U+093e}",
      "\N{U+090f}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}",
      "\N{U+091c}\N{U+0941}",
      "\N{U+0911}",
      "\N{U+0938}",
      "\N{U+0911}",
      "\N{U+0928}\N{U+094b}",
      "\N{U+0921}\N{U+093f}"
    ],
    month_format_wide => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0947}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+090f}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0948}",
      "\N{U+0911}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0911}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+0935}\N{U+094d}\N{U+0939}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0947}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+090f}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0948}",
      "\N{U+0911}\N{U+0917}",
      "\N{U+0938}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+0902}",
      "\N{U+0911}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}",
      "\N{U+0928}\N{U+094b}\N{U+0935}\N{U+094d}\N{U+0939}\N{U+0947}\N{U+0902}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+0902}"
    ],
    month_stand_alone_narrow => [
      "\N{U+091c}\N{U+093e}",
      "\N{U+092b}\N{U+0947}",
      "\N{U+092e}\N{U+093e}",
      "\N{U+090f}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}",
      "\N{U+091c}\N{U+0941}",
      "\N{U+0911}",
      "\N{U+0938}",
      "\N{U+0911}",
      "\N{U+0928}\N{U+094b}",
      "\N{U+0921}\N{U+093f}"
    ],
    month_stand_alone_wide => [
      "\N{U+091c}\N{U+093e}\N{U+0928}\N{U+0947}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0935}\N{U+093e}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+090f}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0942}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+0948}",
      "\N{U+0911}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0911}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+0935}\N{U+094d}\N{U+0939}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+0902}\N{U+092c}\N{U+0930}"
    ],
    name => "Marathi India",
    native_language => "\N{U+092e}\N{U+0930}\N{U+093e}\N{U+0920}\N{U+0940}",
    native_name => "\N{U+092e}\N{U+0930}\N{U+093e}\N{U+0920}\N{U+0940} \N{U+092d}\N{U+093e}\N{U+0930}\N{U+0924}",
    native_script => undef,
    native_territory => "\N{U+092d}\N{U+093e}\N{U+0930}\N{U+0924}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0924}\N{U+093f}\N{U+0967}",
      "\N{U+0924}\N{U+093f}\N{U+0968}",
      "\N{U+0924}\N{U+093f}\N{U+0969}",
      "\N{U+0924}\N{U+093f}\N{U+096a}"
    ],
    quarter_format_narrow => [
      "\N{U+0967}",
      "\N{U+0968}",
      "\N{U+0969}",
      "\N{U+096a}"
    ],
    quarter_format_wide => [
      "\N{U+092a}\N{U+094d}\N{U+0930}\N{U+0925}\N{U+092e} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+0926}\N{U+094d}\N{U+0935}\N{U+093f}\N{U+0924}\N{U+0940}\N{U+092f} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+0924}\N{U+0943}\N{U+0924}\N{U+0940}\N{U+092f} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+091a}\N{U+0924}\N{U+0941}\N{U+0930}\N{U+094d}\N{U+0925} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0924}\N{U+093f}\N{U+0967}",
      "\N{U+0924}\N{U+093f}\N{U+0968}",
      "\N{U+0924}\N{U+093f}\N{U+0969}",
      "\N{U+0924}\N{U+093f}\N{U+096a}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0967}",
      "\N{U+0968}",
      "\N{U+0969}",
      "\N{U+096a}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+092a}\N{U+094d}\N{U+0930}\N{U+0925}\N{U+092e} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+0926}\N{U+094d}\N{U+0935}\N{U+093f}\N{U+0924}\N{U+0940}\N{U+092f} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+0924}\N{U+0943}\N{U+0924}\N{U+0940}\N{U+092f} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}",
      "\N{U+091a}\N{U+0924}\N{U+0941}\N{U+0930}\N{U+094d}\N{U+0925} \N{U+0924}\N{U+093f}\N{U+092e}\N{U+093e}\N{U+0939}\N{U+0940}"
    ],
    script => undef,
    territory => "India",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ms ]__
  {
    am_pm_abbreviated => [
      "PG",
      "PTG"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d-M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ms",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Isn",
      "Sel",
      "Rab",
      "Kha",
      "Jum",
      "Sab",
      "Ahd"
    ],
    day_format_narrow => [
      "I",
      "S",
      "R",
      "K",
      "J",
      "S",
      "A"
    ],
    day_format_wide => [
      "Isnin",
      "Selasa",
      "Rabu",
      "Khamis",
      "Jumaat",
      "Sabtu",
      "Ahad"
    ],
    day_stand_alone_abbreviated => [
      "Isn",
      "Sel",
      "Rab",
      "Kha",
      "Jum",
      "Sab",
      "Ahd"
    ],
    day_stand_alone_narrow => [
      "I",
      "S",
      "R",
      "K",
      "J",
      "S",
      "A"
    ],
    day_stand_alone_wide => [
      "Isnin",
      "Selasa",
      "Rabu",
      "Khamis",
      "Jumaat",
      "Sabtu",
      "Ahad"
    ],
    era_abbreviated => [
      "S.M.",
      "TM"
    ],
    era_narrow => [
      "S.M.",
      "TM"
    ],
    era_wide => [
      "S.M.",
      "TM"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Malay",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ogo",
      "Sep",
      "Okt",
      "Nov",
      "Dis"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "O",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Mac",
      "April",
      "Mei",
      "Jun",
      "Julai",
      "Ogos",
      "September",
      "Oktober",
      "November",
      "Disember"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ogo",
      "Sep",
      "Okt",
      "Nov",
      "Dis"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "O",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Mac",
      "April",
      "Mei",
      "Jun",
      "Julai",
      "Ogos",
      "September",
      "Oktober",
      "November",
      "Disember"
    ],
    name => "Malay",
    native_language => "Bahasa Melayu",
    native_name => "Bahasa Melayu",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "S1",
      "S2",
      "S3",
      "S4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Suku pertama",
      "Suku Ke-2",
      "Suku Ke-3",
      "Suku Ke-4"
    ],
    quarter_stand_alone_abbreviated => [
      "S1",
      "S2",
      "S3",
      "S4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Suku pertama",
      "Suku Ke-2",
      "Suku Ke-3",
      "Suku Ke-4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ms-BN ]__
  {
    am_pm_abbreviated => [
      "PG",
      "PTG"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d-M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ms-BN",
    date_format_full => "dd MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Isn",
      "Sel",
      "Rab",
      "Kha",
      "Jum",
      "Sab",
      "Ahd"
    ],
    day_format_narrow => [
      "I",
      "S",
      "R",
      "K",
      "J",
      "S",
      "A"
    ],
    day_format_wide => [
      "Isnin",
      "Selasa",
      "Rabu",
      "Khamis",
      "Jumaat",
      "Sabtu",
      "Ahad"
    ],
    day_stand_alone_abbreviated => [
      "Isn",
      "Sel",
      "Rab",
      "Kha",
      "Jum",
      "Sab",
      "Ahd"
    ],
    day_stand_alone_narrow => [
      "I",
      "S",
      "R",
      "K",
      "J",
      "S",
      "A"
    ],
    day_stand_alone_wide => [
      "Isnin",
      "Selasa",
      "Rabu",
      "Khamis",
      "Jumaat",
      "Sabtu",
      "Ahad"
    ],
    era_abbreviated => [
      "S.M.",
      "TM"
    ],
    era_narrow => [
      "S.M.",
      "TM"
    ],
    era_wide => [
      "S.M.",
      "TM"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Malay",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ogo",
      "Sep",
      "Okt",
      "Nov",
      "Dis"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "O",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Mac",
      "April",
      "Mei",
      "Jun",
      "Julai",
      "Ogos",
      "September",
      "Oktober",
      "November",
      "Disember"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ogo",
      "Sep",
      "Okt",
      "Nov",
      "Dis"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "O",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Mac",
      "April",
      "Mei",
      "Jun",
      "Julai",
      "Ogos",
      "September",
      "Oktober",
      "November",
      "Disember"
    ],
    name => "Malay Brunei",
    native_language => "Bahasa Melayu",
    native_name => "Bahasa Melayu Brunei",
    native_script => undef,
    native_territory => "Brunei",
    native_variant => undef,
    quarter_format_abbreviated => [
      "S1",
      "S2",
      "S3",
      "S4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Suku pertama",
      "Suku Ke-2",
      "Suku Ke-3",
      "Suku Ke-4"
    ],
    quarter_stand_alone_abbreviated => [
      "S1",
      "S2",
      "S3",
      "S4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Suku pertama",
      "Suku Ke-2",
      "Suku Ke-3",
      "Suku Ke-4"
    ],
    script => undef,
    territory => "Brunei",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ms-MY ]__
  {
    am_pm_abbreviated => [
      "PG",
      "PTG"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d-M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ms-MY",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Isn",
      "Sel",
      "Rab",
      "Kha",
      "Jum",
      "Sab",
      "Ahd"
    ],
    day_format_narrow => [
      "I",
      "S",
      "R",
      "K",
      "J",
      "S",
      "A"
    ],
    day_format_wide => [
      "Isnin",
      "Selasa",
      "Rabu",
      "Khamis",
      "Jumaat",
      "Sabtu",
      "Ahad"
    ],
    day_stand_alone_abbreviated => [
      "Isn",
      "Sel",
      "Rab",
      "Kha",
      "Jum",
      "Sab",
      "Ahd"
    ],
    day_stand_alone_narrow => [
      "I",
      "S",
      "R",
      "K",
      "J",
      "S",
      "A"
    ],
    day_stand_alone_wide => [
      "Isnin",
      "Selasa",
      "Rabu",
      "Khamis",
      "Jumaat",
      "Sabtu",
      "Ahad"
    ],
    era_abbreviated => [
      "S.M.",
      "TM"
    ],
    era_narrow => [
      "S.M.",
      "TM"
    ],
    era_wide => [
      "S.M.",
      "TM"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A %d %b %Y",
    glibc_datetime_format => "%A %d %b %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "Malay",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ogo",
      "Sep",
      "Okt",
      "Nov",
      "Dis"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "O",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Mac",
      "April",
      "Mei",
      "Jun",
      "Julai",
      "Ogos",
      "September",
      "Oktober",
      "November",
      "Disember"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ogo",
      "Sep",
      "Okt",
      "Nov",
      "Dis"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "O",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Mac",
      "April",
      "Mei",
      "Jun",
      "Julai",
      "Ogos",
      "September",
      "Oktober",
      "November",
      "Disember"
    ],
    name => "Malay Malaysia",
    native_language => "Bahasa Melayu",
    native_name => "Bahasa Melayu Malaysia",
    native_script => undef,
    native_territory => "Malaysia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "S1",
      "S2",
      "S3",
      "S4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Suku pertama",
      "Suku Ke-2",
      "Suku Ke-3",
      "Suku Ke-4"
    ],
    quarter_stand_alone_abbreviated => [
      "S1",
      "S2",
      "S3",
      "S4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Suku pertama",
      "Suku Ke-2",
      "Suku Ke-3",
      "Suku Ke-4"
    ],
    script => undef,
    territory => "Malaysia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ms-SG ]__
  {
    am_pm_abbreviated => [
      "PG",
      "PTG"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d-M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ms-SG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Isn",
      "Sel",
      "Rab",
      "Kha",
      "Jum",
      "Sab",
      "Ahd"
    ],
    day_format_narrow => [
      "I",
      "S",
      "R",
      "K",
      "J",
      "S",
      "A"
    ],
    day_format_wide => [
      "Isnin",
      "Selasa",
      "Rabu",
      "Khamis",
      "Jumaat",
      "Sabtu",
      "Ahad"
    ],
    day_stand_alone_abbreviated => [
      "Isn",
      "Sel",
      "Rab",
      "Kha",
      "Jum",
      "Sab",
      "Ahd"
    ],
    day_stand_alone_narrow => [
      "I",
      "S",
      "R",
      "K",
      "J",
      "S",
      "A"
    ],
    day_stand_alone_wide => [
      "Isnin",
      "Selasa",
      "Rabu",
      "Khamis",
      "Jumaat",
      "Sabtu",
      "Ahad"
    ],
    era_abbreviated => [
      "S.M.",
      "TM"
    ],
    era_narrow => [
      "S.M.",
      "TM"
    ],
    era_wide => [
      "S.M.",
      "TM"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Malay",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ogo",
      "Sep",
      "Okt",
      "Nov",
      "Dis"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "O",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Mac",
      "April",
      "Mei",
      "Jun",
      "Julai",
      "Ogos",
      "September",
      "Oktober",
      "November",
      "Disember"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ogo",
      "Sep",
      "Okt",
      "Nov",
      "Dis"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "O",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Mac",
      "April",
      "Mei",
      "Jun",
      "Julai",
      "Ogos",
      "September",
      "Oktober",
      "November",
      "Disember"
    ],
    name => "Malay Singapore",
    native_language => "Bahasa Melayu",
    native_name => "Bahasa Melayu Singapura",
    native_script => undef,
    native_territory => "Singapura",
    native_variant => undef,
    quarter_format_abbreviated => [
      "S1",
      "S2",
      "S3",
      "S4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Suku pertama",
      "Suku Ke-2",
      "Suku Ke-3",
      "Suku Ke-4"
    ],
    quarter_stand_alone_abbreviated => [
      "S1",
      "S2",
      "S3",
      "S4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Suku pertama",
      "Suku Ke-2",
      "Suku Ke-3",
      "Suku Ke-4"
    ],
    script => undef,
    territory => "Singapore",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ mt ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "mt",
    date_format_full => "EEEE, d 'ta'\N{U+2019} MMMM y",
    date_format_long => "d 'ta'\N{U+2019} MMMM y",
    date_format_medium => "dd MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Tne",
      "Tli",
      "Erb",
      "\N{U+0126}am",
      "\N{U+0120}im",
      "Sib",
      "\N{U+0126}ad"
    ],
    day_format_narrow => [
      "T",
      "T",
      "E",
      "\N{U+0126}",
      "\N{U+0120}",
      "S",
      "\N{U+0126}"
    ],
    day_format_wide => [
      "It-Tnejn",
      "It-Tlieta",
      "L-Erbg\N{U+0127}a",
      "Il-\N{U+0126}amis",
      "Il-\N{U+0120}img\N{U+0127}a",
      "Is-Sibt",
      "Il-\N{U+0126}add"
    ],
    day_stand_alone_abbreviated => [
      "Tne",
      "Tli",
      "Erb",
      "\N{U+0126}am",
      "\N{U+0120}im",
      "Sib",
      "\N{U+0126}ad"
    ],
    day_stand_alone_narrow => [
      "Tn",
      "Tl",
      "Er",
      "\N{U+0126}m",
      "\N{U+0120}m",
      "Sb",
      "\N{U+0126}d"
    ],
    day_stand_alone_wide => [
      "It-Tnejn",
      "It-Tlieta",
      "L-Erbg\N{U+0127}a",
      "Il-\N{U+0126}amis",
      "Il-\N{U+0120}img\N{U+0127}a",
      "Is-Sibt",
      "Il-\N{U+0126}add"
    ],
    era_abbreviated => [
      "QK",
      "WK"
    ],
    era_narrow => [
      "QK",
      "WK"
    ],
    era_wide => [
      "Qabel Kristu",
      "Wara Kristu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Maltese",
    month_format_abbreviated => [
      "Jan",
      "Fra",
      "Mar",
      "Apr",
      "Mej",
      "\N{U+0120}un",
      "Lul",
      "Aww",
      "Set",
      "Ott",
      "Nov",
      "Di\N{U+010b}"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "\N{U+0120}",
      "L",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Jannar",
      "Frar",
      "Marzu",
      "April",
      "Mejju",
      "\N{U+0120}unju",
      "Lulju",
      "Awwissu",
      "Settembru",
      "Ottubru",
      "Novembru",
      "Di\N{U+010b}embru"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Fra",
      "Mar",
      "Apr",
      "Mej",
      "\N{U+0120}un",
      "Lul",
      "Aww",
      "Set",
      "Ott",
      "Nov",
      "Di\N{U+010b}"
    ],
    month_stand_alone_narrow => [
      "Jn",
      "Fr",
      "Mz",
      "Ap",
      "Mj",
      "\N{U+0120}n",
      "Lj",
      "Aw",
      "St",
      "Ob",
      "Nv",
      "D\N{U+010b}"
    ],
    month_stand_alone_wide => [
      "Jannar",
      "Frar",
      "Marzu",
      "April",
      "Mejju",
      "\N{U+0120}unju",
      "Lulju",
      "Awwissu",
      "Settembru",
      "Ottubru",
      "Novembru",
      "Di\N{U+010b}embru"
    ],
    name => "Maltese",
    native_language => "Malti",
    native_name => "Malti",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1el kwart",
      "2ni kwart",
      "3et kwart",
      "4ba\N{U+2019} kwart"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1el kwart",
      "2ni kwart",
      "3et kwart",
      "4ba\N{U+2019} kwart"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mt-MT ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "mt-MT",
    date_format_full => "EEEE, d 'ta'\N{U+2019} MMMM y",
    date_format_long => "d 'ta'\N{U+2019} MMMM y",
    date_format_medium => "dd MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Tne",
      "Tli",
      "Erb",
      "\N{U+0126}am",
      "\N{U+0120}im",
      "Sib",
      "\N{U+0126}ad"
    ],
    day_format_narrow => [
      "T",
      "T",
      "E",
      "\N{U+0126}",
      "\N{U+0120}",
      "S",
      "\N{U+0126}"
    ],
    day_format_wide => [
      "It-Tnejn",
      "It-Tlieta",
      "L-Erbg\N{U+0127}a",
      "Il-\N{U+0126}amis",
      "Il-\N{U+0120}img\N{U+0127}a",
      "Is-Sibt",
      "Il-\N{U+0126}add"
    ],
    day_stand_alone_abbreviated => [
      "Tne",
      "Tli",
      "Erb",
      "\N{U+0126}am",
      "\N{U+0120}im",
      "Sib",
      "\N{U+0126}ad"
    ],
    day_stand_alone_narrow => [
      "Tn",
      "Tl",
      "Er",
      "\N{U+0126}m",
      "\N{U+0120}m",
      "Sb",
      "\N{U+0126}d"
    ],
    day_stand_alone_wide => [
      "It-Tnejn",
      "It-Tlieta",
      "L-Erbg\N{U+0127}a",
      "Il-\N{U+0126}amis",
      "Il-\N{U+0120}img\N{U+0127}a",
      "Is-Sibt",
      "Il-\N{U+0126}add"
    ],
    era_abbreviated => [
      "QK",
      "WK"
    ],
    era_narrow => [
      "QK",
      "WK"
    ],
    era_wide => [
      "Qabel Kristu",
      "Wara Kristu"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A, %d ta %b, %Y",
    glibc_datetime_format => "%A, %d ta %b, %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "Maltese",
    month_format_abbreviated => [
      "Jan",
      "Fra",
      "Mar",
      "Apr",
      "Mej",
      "\N{U+0120}un",
      "Lul",
      "Aww",
      "Set",
      "Ott",
      "Nov",
      "Di\N{U+010b}"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "\N{U+0120}",
      "L",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Jannar",
      "Frar",
      "Marzu",
      "April",
      "Mejju",
      "\N{U+0120}unju",
      "Lulju",
      "Awwissu",
      "Settembru",
      "Ottubru",
      "Novembru",
      "Di\N{U+010b}embru"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Fra",
      "Mar",
      "Apr",
      "Mej",
      "\N{U+0120}un",
      "Lul",
      "Aww",
      "Set",
      "Ott",
      "Nov",
      "Di\N{U+010b}"
    ],
    month_stand_alone_narrow => [
      "Jn",
      "Fr",
      "Mz",
      "Ap",
      "Mj",
      "\N{U+0120}n",
      "Lj",
      "Aw",
      "St",
      "Ob",
      "Nv",
      "D\N{U+010b}"
    ],
    month_stand_alone_wide => [
      "Jannar",
      "Frar",
      "Marzu",
      "April",
      "Mejju",
      "\N{U+0120}unju",
      "Lulju",
      "Awwissu",
      "Settembru",
      "Ottubru",
      "Novembru",
      "Di\N{U+010b}embru"
    ],
    name => "Maltese Malta",
    native_language => "Malti",
    native_name => "Malti Malta",
    native_script => undef,
    native_territory => "Malta",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1el kwart",
      "2ni kwart",
      "3et kwart",
      "4ba\N{U+2019} kwart"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1el kwart",
      "2ni kwart",
      "3et kwart",
      "4ba\N{U+2019} kwart"
    ],
    script => undef,
    territory => "Malta",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mua ]__
  {
    am_pm_abbreviated => [
      "comme",
      "lilli"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "mua",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Cla",
      "Czi",
      "Cko",
      "Cka",
      "Cga",
      "Cze",
      "Cya"
    ],
    day_format_narrow => [
      "L",
      "Z",
      "O",
      "A",
      "G",
      "E",
      "Y"
    ],
    day_format_wide => [
      "Comlaa\N{U+0257}ii",
      "Comzyii\N{U+0257}ii",
      "Comkolle",
      "Comkald\N{U+01dd}\N{U+0253}lii",
      "Comgaisuu",
      "Comzye\N{U+0253}suu",
      "Com\N{U+2019}yakke"
    ],
    day_stand_alone_abbreviated => [
      "Cla",
      "Czi",
      "Cko",
      "Cka",
      "Cga",
      "Cze",
      "Cya"
    ],
    day_stand_alone_narrow => [
      "L",
      "Z",
      "O",
      "A",
      "G",
      "E",
      "Y"
    ],
    day_stand_alone_wide => [
      "Comlaa\N{U+0257}ii",
      "Comzyii\N{U+0257}ii",
      "Comkolle",
      "Comkald\N{U+01dd}\N{U+0253}lii",
      "Comgaisuu",
      "Comzye\N{U+0253}suu",
      "Com\N{U+2019}yakke"
    ],
    era_abbreviated => [
      "KK",
      "PK"
    ],
    era_narrow => [
      "KK",
      "PK"
    ],
    era_wide => [
      "K\N{U+01dd}Pel Kristu",
      "Pel Kristu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Mundang",
    month_format_abbreviated => [
      "FLO",
      "CLA",
      "CKI",
      "FMF",
      "MAD",
      "MBI",
      "MLI",
      "MAM",
      "FDE",
      "FMU",
      "FGW",
      "FYU"
    ],
    month_format_narrow => [
      "O",
      "A",
      "I",
      "F",
      "D",
      "B",
      "L",
      "M",
      "E",
      "U",
      "W",
      "Y"
    ],
    month_format_wide => [
      "F\N{U+0129}i Loo",
      "Cokcwakla\N{U+014b}ne",
      "Cokcwaklii",
      "F\N{U+0129}i Marfoo",
      "Mad\N{U+01dd}\N{U+01dd}uut\N{U+01dd}bija\N{U+014b}",
      "Mam\N{U+01dd}\N{U+014b}gw\N{U+00e3}afahbii",
      "Mam\N{U+01dd}\N{U+014b}gw\N{U+00e3}alii",
      "Mad\N{U+01dd}mbii",
      "F\N{U+0129}i D\N{U+01dd}\N{U+0253}lii",
      "F\N{U+0129}i Munda\N{U+014b}",
      "F\N{U+0129}i Gwahlle",
      "F\N{U+0129}i Yuru"
    ],
    month_stand_alone_abbreviated => [
      "FLO",
      "CLA",
      "CKI",
      "FMF",
      "MAD",
      "MBI",
      "MLI",
      "MAM",
      "FDE",
      "FMU",
      "FGW",
      "FYU"
    ],
    month_stand_alone_narrow => [
      "O",
      "A",
      "I",
      "F",
      "D",
      "B",
      "L",
      "M",
      "E",
      "U",
      "W",
      "Y"
    ],
    month_stand_alone_wide => [
      "F\N{U+0129}i Loo",
      "Cokcwakla\N{U+014b}ne",
      "Cokcwaklii",
      "F\N{U+0129}i Marfoo",
      "Mad\N{U+01dd}\N{U+01dd}uut\N{U+01dd}bija\N{U+014b}",
      "Mam\N{U+01dd}\N{U+014b}gw\N{U+00e3}afahbii",
      "Mam\N{U+01dd}\N{U+014b}gw\N{U+00e3}alii",
      "Mad\N{U+01dd}mbii",
      "F\N{U+0129}i D\N{U+01dd}\N{U+0253}lii",
      "F\N{U+0129}i Munda\N{U+014b}",
      "F\N{U+0129}i Gwahlle",
      "F\N{U+0129}i Yuru"
    ],
    name => "Mundang",
    native_language => "MUNDA\N{U+014a}",
    native_name => "MUNDA\N{U+014a}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "F1",
      "F2",
      "F3",
      "F4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Tai f\N{U+0129}i sai ma t\N{U+01dd}n kee zah",
      "Tai f\N{U+0129}i sai zah l\N{U+01dd}n gwa ma kee",
      "Tai f\N{U+0129}i sai zah l\N{U+01dd}n sai ma kee",
      "Tai f\N{U+0129}i sai ma coo kee zah \N{U+2018}na"
    ],
    quarter_stand_alone_abbreviated => [
      "F1",
      "F2",
      "F3",
      "F4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Tai f\N{U+0129}i sai ma t\N{U+01dd}n kee zah",
      "Tai f\N{U+0129}i sai zah l\N{U+01dd}n gwa ma kee",
      "Tai f\N{U+0129}i sai zah l\N{U+01dd}n sai ma kee",
      "Tai f\N{U+0129}i sai ma coo kee zah \N{U+2018}na"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mua-CM ]__
  {
    am_pm_abbreviated => [
      "comme",
      "lilli"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "mua-CM",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Cla",
      "Czi",
      "Cko",
      "Cka",
      "Cga",
      "Cze",
      "Cya"
    ],
    day_format_narrow => [
      "L",
      "Z",
      "O",
      "A",
      "G",
      "E",
      "Y"
    ],
    day_format_wide => [
      "Comlaa\N{U+0257}ii",
      "Comzyii\N{U+0257}ii",
      "Comkolle",
      "Comkald\N{U+01dd}\N{U+0253}lii",
      "Comgaisuu",
      "Comzye\N{U+0253}suu",
      "Com\N{U+2019}yakke"
    ],
    day_stand_alone_abbreviated => [
      "Cla",
      "Czi",
      "Cko",
      "Cka",
      "Cga",
      "Cze",
      "Cya"
    ],
    day_stand_alone_narrow => [
      "L",
      "Z",
      "O",
      "A",
      "G",
      "E",
      "Y"
    ],
    day_stand_alone_wide => [
      "Comlaa\N{U+0257}ii",
      "Comzyii\N{U+0257}ii",
      "Comkolle",
      "Comkald\N{U+01dd}\N{U+0253}lii",
      "Comgaisuu",
      "Comzye\N{U+0253}suu",
      "Com\N{U+2019}yakke"
    ],
    era_abbreviated => [
      "KK",
      "PK"
    ],
    era_narrow => [
      "KK",
      "PK"
    ],
    era_wide => [
      "K\N{U+01dd}Pel Kristu",
      "Pel Kristu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Mundang",
    month_format_abbreviated => [
      "FLO",
      "CLA",
      "CKI",
      "FMF",
      "MAD",
      "MBI",
      "MLI",
      "MAM",
      "FDE",
      "FMU",
      "FGW",
      "FYU"
    ],
    month_format_narrow => [
      "O",
      "A",
      "I",
      "F",
      "D",
      "B",
      "L",
      "M",
      "E",
      "U",
      "W",
      "Y"
    ],
    month_format_wide => [
      "F\N{U+0129}i Loo",
      "Cokcwakla\N{U+014b}ne",
      "Cokcwaklii",
      "F\N{U+0129}i Marfoo",
      "Mad\N{U+01dd}\N{U+01dd}uut\N{U+01dd}bija\N{U+014b}",
      "Mam\N{U+01dd}\N{U+014b}gw\N{U+00e3}afahbii",
      "Mam\N{U+01dd}\N{U+014b}gw\N{U+00e3}alii",
      "Mad\N{U+01dd}mbii",
      "F\N{U+0129}i D\N{U+01dd}\N{U+0253}lii",
      "F\N{U+0129}i Munda\N{U+014b}",
      "F\N{U+0129}i Gwahlle",
      "F\N{U+0129}i Yuru"
    ],
    month_stand_alone_abbreviated => [
      "FLO",
      "CLA",
      "CKI",
      "FMF",
      "MAD",
      "MBI",
      "MLI",
      "MAM",
      "FDE",
      "FMU",
      "FGW",
      "FYU"
    ],
    month_stand_alone_narrow => [
      "O",
      "A",
      "I",
      "F",
      "D",
      "B",
      "L",
      "M",
      "E",
      "U",
      "W",
      "Y"
    ],
    month_stand_alone_wide => [
      "F\N{U+0129}i Loo",
      "Cokcwakla\N{U+014b}ne",
      "Cokcwaklii",
      "F\N{U+0129}i Marfoo",
      "Mad\N{U+01dd}\N{U+01dd}uut\N{U+01dd}bija\N{U+014b}",
      "Mam\N{U+01dd}\N{U+014b}gw\N{U+00e3}afahbii",
      "Mam\N{U+01dd}\N{U+014b}gw\N{U+00e3}alii",
      "Mad\N{U+01dd}mbii",
      "F\N{U+0129}i D\N{U+01dd}\N{U+0253}lii",
      "F\N{U+0129}i Munda\N{U+014b}",
      "F\N{U+0129}i Gwahlle",
      "F\N{U+0129}i Yuru"
    ],
    name => "Mundang Cameroon",
    native_language => "MUNDA\N{U+014a}",
    native_name => "MUNDA\N{U+014a} kameru\N{U+014b}",
    native_script => undef,
    native_territory => "kameru\N{U+014b}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "F1",
      "F2",
      "F3",
      "F4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Tai f\N{U+0129}i sai ma t\N{U+01dd}n kee zah",
      "Tai f\N{U+0129}i sai zah l\N{U+01dd}n gwa ma kee",
      "Tai f\N{U+0129}i sai zah l\N{U+01dd}n sai ma kee",
      "Tai f\N{U+0129}i sai ma coo kee zah \N{U+2018}na"
    ],
    quarter_stand_alone_abbreviated => [
      "F1",
      "F2",
      "F3",
      "F4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Tai f\N{U+0129}i sai ma t\N{U+01dd}n kee zah",
      "Tai f\N{U+0129}i sai zah l\N{U+01dd}n gwa ma kee",
      "Tai f\N{U+0129}i sai zah l\N{U+01dd}n sai ma kee",
      "Tai f\N{U+0129}i sai ma coo kee zah \N{U+2018}na"
    ],
    script => undef,
    territory => "Cameroon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ my ]__
  {
    am_pm_abbreviated => [
      "\N{U+1014}\N{U+1036}\N{U+1014}\N{U+1000}\N{U+103a}",
      "\N{U+100a}\N{U+1014}\N{U+1031}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+104a} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G MMM y",
      GyMMMEd => "E\N{U+104a} G d MMM y",
      GyMMMd => "G d MMM y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+104a} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+104a} d MMM",
      MMMMEd => "E\N{U+104a} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E\N{U+104a} d-M-y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+104a} d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd-MM-y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "my",
    date_format_full => "EEEE\N{U+104a} dd MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd-MM-yy",
    datetime_format_full => "{1}\N{U+1019}\N{U+103e}\N{U+102c} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+1010}\N{U+1014}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+101c}\N{U+102c}",
      "\N{U+1021}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+1002}\N{U+102b}",
      "\N{U+1017}\N{U+102f}\N{U+1012}\N{U+1039}\N{U+1013}\N{U+101f}\N{U+1030}\N{U+1038}",
      "\N{U+1000}\N{U+103c}\N{U+102c}\N{U+101e}\N{U+1015}\N{U+1010}\N{U+1031}\N{U+1038}",
      "\N{U+101e}\N{U+1031}\N{U+102c}\N{U+1000}\N{U+103c}\N{U+102c}",
      "\N{U+1005}\N{U+1014}\N{U+1031}",
      "\N{U+1010}\N{U+1014}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+1002}\N{U+1014}\N{U+103d}\N{U+1031}"
    ],
    day_format_narrow => [
      "\N{U+1010}",
      "\N{U+1021}",
      "\N{U+1017}",
      "\N{U+1000}",
      "\N{U+101e}",
      "\N{U+1005}",
      "\N{U+1010}"
    ],
    day_format_wide => [
      "\N{U+1010}\N{U+1014}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+101c}\N{U+102c}",
      "\N{U+1021}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+1002}\N{U+102b}",
      "\N{U+1017}\N{U+102f}\N{U+1012}\N{U+1039}\N{U+1013}\N{U+101f}\N{U+1030}\N{U+1038}",
      "\N{U+1000}\N{U+103c}\N{U+102c}\N{U+101e}\N{U+1015}\N{U+1010}\N{U+1031}\N{U+1038}",
      "\N{U+101e}\N{U+1031}\N{U+102c}\N{U+1000}\N{U+103c}\N{U+102c}",
      "\N{U+1005}\N{U+1014}\N{U+1031}",
      "\N{U+1010}\N{U+1014}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+1002}\N{U+1014}\N{U+103d}\N{U+1031}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+1010}\N{U+1014}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+101c}\N{U+102c}",
      "\N{U+1021}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+1002}\N{U+102b}",
      "\N{U+1017}\N{U+102f}\N{U+1012}\N{U+1039}\N{U+1013}\N{U+101f}\N{U+1030}\N{U+1038}",
      "\N{U+1000}\N{U+103c}\N{U+102c}\N{U+101e}\N{U+1015}\N{U+1010}\N{U+1031}\N{U+1038}",
      "\N{U+101e}\N{U+1031}\N{U+102c}\N{U+1000}\N{U+103c}\N{U+102c}",
      "\N{U+1005}\N{U+1014}\N{U+1031}",
      "\N{U+1010}\N{U+1014}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+1002}\N{U+1014}\N{U+103d}\N{U+1031}"
    ],
    day_stand_alone_narrow => [
      "\N{U+1010}",
      "\N{U+1021}",
      "\N{U+1017}",
      "\N{U+1000}",
      "\N{U+101e}",
      "\N{U+1005}",
      "\N{U+1010}"
    ],
    day_stand_alone_wide => [
      "\N{U+1010}\N{U+1014}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+101c}\N{U+102c}",
      "\N{U+1021}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+1002}\N{U+102b}",
      "\N{U+1017}\N{U+102f}\N{U+1012}\N{U+1039}\N{U+1013}\N{U+101f}\N{U+1030}\N{U+1038}",
      "\N{U+1000}\N{U+103c}\N{U+102c}\N{U+101e}\N{U+1015}\N{U+1010}\N{U+1031}\N{U+1038}",
      "\N{U+101e}\N{U+1031}\N{U+102c}\N{U+1000}\N{U+103c}\N{U+102c}",
      "\N{U+1005}\N{U+1014}\N{U+1031}",
      "\N{U+1010}\N{U+1014}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+1002}\N{U+1014}\N{U+103d}\N{U+1031}"
    ],
    era_abbreviated => [
      "\N{U+1018}\N{U+102e}\N{U+1005}\N{U+102e}",
      "\N{U+1021}\N{U+1031}\N{U+1012}\N{U+102e}"
    ],
    era_narrow => [
      "\N{U+1018}\N{U+102e}\N{U+1005}\N{U+102e}",
      "\N{U+1021}\N{U+1031}\N{U+1012}\N{U+102e}"
    ],
    era_wide => [
      "\N{U+1001}\N{U+101b}\N{U+1005}\N{U+103a}\N{U+1010}\N{U+1031}\N{U+102c}\N{U+103a} \N{U+1019}\N{U+1015}\N{U+1031}\N{U+102b}\N{U+103a}\N{U+1019}\N{U+102e}\N{U+1000}\N{U+102c}\N{U+101c}",
      "\N{U+1001}\N{U+101b}\N{U+1005}\N{U+103a}\N{U+1010}\N{U+1031}\N{U+102c}\N{U+103a} \N{U+1015}\N{U+1031}\N{U+102b}\N{U+103a}\N{U+1011}\N{U+103d}\N{U+1014}\N{U+103a}\N{U+1038}\N{U+1015}\N{U+103c}\N{U+102e}\N{U+1038}\N{U+1000}\N{U+102c}\N{U+101c}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Burmese",
    month_format_abbreviated => [
      "\N{U+1007}\N{U+1014}\N{U+103a}",
      "\N{U+1016}\N{U+1031}",
      "\N{U+1019}\N{U+1010}\N{U+103a}",
      "\N{U+1027}\N{U+1015}\N{U+103c}\N{U+102e}",
      "\N{U+1019}\N{U+1031}",
      "\N{U+1007}\N{U+103d}\N{U+1014}\N{U+103a}",
      "\N{U+1007}\N{U+1030}",
      "\N{U+1029}",
      "\N{U+1005}\N{U+1000}\N{U+103a}",
      "\N{U+1021}\N{U+1031}\N{U+102c}\N{U+1000}\N{U+103a}",
      "\N{U+1014}\N{U+102d}\N{U+102f}",
      "\N{U+1012}\N{U+102e}"
    ],
    month_format_narrow => [
      "\N{U+1007}",
      "\N{U+1016}",
      "\N{U+1019}",
      "\N{U+1027}",
      "\N{U+1019}",
      "\N{U+1007}",
      "\N{U+1007}",
      "\N{U+1029}",
      "\N{U+1005}",
      "\N{U+1021}",
      "\N{U+1014}",
      "\N{U+1012}"
    ],
    month_format_wide => [
      "\N{U+1007}\N{U+1014}\N{U+103a}\N{U+1014}\N{U+101d}\N{U+102b}\N{U+101b}\N{U+102e}",
      "\N{U+1016}\N{U+1031}\N{U+1016}\N{U+1031}\N{U+102c}\N{U+103a}\N{U+101d}\N{U+102b}\N{U+101b}\N{U+102e}",
      "\N{U+1019}\N{U+1010}\N{U+103a}",
      "\N{U+1027}\N{U+1015}\N{U+103c}\N{U+102e}",
      "\N{U+1019}\N{U+1031}",
      "\N{U+1007}\N{U+103d}\N{U+1014}\N{U+103a}",
      "\N{U+1007}\N{U+1030}\N{U+101c}\N{U+102d}\N{U+102f}\N{U+1004}\N{U+103a}",
      "\N{U+1029}\N{U+1002}\N{U+102f}\N{U+1010}\N{U+103a}",
      "\N{U+1005}\N{U+1000}\N{U+103a}\N{U+1010}\N{U+1004}\N{U+103a}\N{U+1018}\N{U+102c}",
      "\N{U+1021}\N{U+1031}\N{U+102c}\N{U+1000}\N{U+103a}\N{U+1010}\N{U+102d}\N{U+102f}\N{U+1018}\N{U+102c}",
      "\N{U+1014}\N{U+102d}\N{U+102f}\N{U+101d}\N{U+1004}\N{U+103a}\N{U+1018}\N{U+102c}",
      "\N{U+1012}\N{U+102e}\N{U+1007}\N{U+1004}\N{U+103a}\N{U+1018}\N{U+102c}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+1007}\N{U+1014}\N{U+103a}",
      "\N{U+1016}\N{U+1031}",
      "\N{U+1019}\N{U+1010}\N{U+103a}",
      "\N{U+1027}\N{U+1015}\N{U+103c}\N{U+102e}",
      "\N{U+1019}\N{U+1031}",
      "\N{U+1007}\N{U+103d}\N{U+1014}\N{U+103a}",
      "\N{U+1007}\N{U+1030}",
      "\N{U+1029}",
      "\N{U+1005}\N{U+1000}\N{U+103a}",
      "\N{U+1021}\N{U+1031}\N{U+102c}\N{U+1000}\N{U+103a}",
      "\N{U+1014}\N{U+102d}\N{U+102f}",
      "\N{U+1012}\N{U+102e}"
    ],
    month_stand_alone_narrow => [
      "\N{U+1007}",
      "\N{U+1016}",
      "\N{U+1019}",
      "\N{U+1027}",
      "\N{U+1019}",
      "\N{U+1007}",
      "\N{U+1007}",
      "\N{U+1029}",
      "\N{U+1005}",
      "\N{U+1021}",
      "\N{U+1014}",
      "\N{U+1012}"
    ],
    month_stand_alone_wide => [
      "\N{U+1007}\N{U+1014}\N{U+103a}\N{U+1014}\N{U+101d}\N{U+102b}\N{U+101b}\N{U+102e}",
      "\N{U+1016}\N{U+1031}\N{U+1016}\N{U+1031}\N{U+102c}\N{U+103a}\N{U+101d}\N{U+102b}\N{U+101b}\N{U+102e}",
      "\N{U+1019}\N{U+1010}\N{U+103a}",
      "\N{U+1027}\N{U+1015}\N{U+103c}\N{U+102e}",
      "\N{U+1019}\N{U+1031}",
      "\N{U+1007}\N{U+103d}\N{U+1014}\N{U+103a}",
      "\N{U+1007}\N{U+1030}\N{U+101c}\N{U+102d}\N{U+102f}\N{U+1004}\N{U+103a}",
      "\N{U+1029}\N{U+1002}\N{U+102f}\N{U+1010}\N{U+103a}",
      "\N{U+1005}\N{U+1000}\N{U+103a}\N{U+1010}\N{U+1004}\N{U+103a}\N{U+1018}\N{U+102c}",
      "\N{U+1021}\N{U+1031}\N{U+102c}\N{U+1000}\N{U+103a}\N{U+1010}\N{U+102d}\N{U+102f}\N{U+1018}\N{U+102c}",
      "\N{U+1014}\N{U+102d}\N{U+102f}\N{U+101d}\N{U+1004}\N{U+103a}\N{U+1018}\N{U+102c}",
      "\N{U+1012}\N{U+102e}\N{U+1007}\N{U+1004}\N{U+103a}\N{U+1018}\N{U+102c}"
    ],
    name => "Burmese",
    native_language => "\N{U+1017}\N{U+1019}\N{U+102c}",
    native_name => "\N{U+1017}\N{U+1019}\N{U+102c}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+1015}\N{U+1011}\N{U+1019} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1012}\N{U+102f}\N{U+1010}\N{U+102d}\N{U+101a} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1010}\N{U+1010}\N{U+102d}\N{U+101a} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1005}\N{U+1010}\N{U+102f}\N{U+1010}\N{U+1039}\N{U+1011} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}"
    ],
    quarter_format_narrow => [
      "\N{U+1015}",
      "\N{U+1012}\N{U+102f}",
      "\N{U+1010}",
      "\N{U+1005}"
    ],
    quarter_format_wide => [
      "\N{U+1015}\N{U+1011}\N{U+1019} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1012}\N{U+102f}\N{U+1010}\N{U+102d}\N{U+101a} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1010}\N{U+1010}\N{U+102d}\N{U+101a} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1005}\N{U+1010}\N{U+102f}\N{U+1010}\N{U+1039}\N{U+1011} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+1015}\N{U+1011}\N{U+1019} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1012}\N{U+102f}\N{U+1010}\N{U+102d}\N{U+101a} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1010}\N{U+1010}\N{U+102d}\N{U+101a} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1005}\N{U+1010}\N{U+102f}\N{U+1010}\N{U+1039}\N{U+1011} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+1015}",
      "\N{U+1012}\N{U+102f}",
      "\N{U+1010}",
      "\N{U+1005}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+1015}\N{U+1011}\N{U+1019} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1012}\N{U+102f}\N{U+1010}\N{U+102d}\N{U+101a} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1010}\N{U+1010}\N{U+102d}\N{U+101a} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1005}\N{U+1010}\N{U+102f}\N{U+1010}\N{U+1039}\N{U+1011} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ my-MM ]__
  {
    am_pm_abbreviated => [
      "\N{U+1014}\N{U+1036}\N{U+1014}\N{U+1000}\N{U+103a}",
      "\N{U+100a}\N{U+1014}\N{U+1031}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E\N{U+104a} d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G MMM y",
      GyMMMEd => "E\N{U+104a} G d MMM y",
      GyMMMd => "G d MMM y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+104a} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+104a} d MMM",
      MMMMEd => "E\N{U+104a} d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E\N{U+104a} d-M-y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+104a} d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd-MM-y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "my-MM",
    date_format_full => "EEEE\N{U+104a} dd MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd-MM-yy",
    datetime_format_full => "{1}\N{U+1019}\N{U+103e}\N{U+102c} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+1010}\N{U+1014}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+101c}\N{U+102c}",
      "\N{U+1021}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+1002}\N{U+102b}",
      "\N{U+1017}\N{U+102f}\N{U+1012}\N{U+1039}\N{U+1013}\N{U+101f}\N{U+1030}\N{U+1038}",
      "\N{U+1000}\N{U+103c}\N{U+102c}\N{U+101e}\N{U+1015}\N{U+1010}\N{U+1031}\N{U+1038}",
      "\N{U+101e}\N{U+1031}\N{U+102c}\N{U+1000}\N{U+103c}\N{U+102c}",
      "\N{U+1005}\N{U+1014}\N{U+1031}",
      "\N{U+1010}\N{U+1014}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+1002}\N{U+1014}\N{U+103d}\N{U+1031}"
    ],
    day_format_narrow => [
      "\N{U+1010}",
      "\N{U+1021}",
      "\N{U+1017}",
      "\N{U+1000}",
      "\N{U+101e}",
      "\N{U+1005}",
      "\N{U+1010}"
    ],
    day_format_wide => [
      "\N{U+1010}\N{U+1014}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+101c}\N{U+102c}",
      "\N{U+1021}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+1002}\N{U+102b}",
      "\N{U+1017}\N{U+102f}\N{U+1012}\N{U+1039}\N{U+1013}\N{U+101f}\N{U+1030}\N{U+1038}",
      "\N{U+1000}\N{U+103c}\N{U+102c}\N{U+101e}\N{U+1015}\N{U+1010}\N{U+1031}\N{U+1038}",
      "\N{U+101e}\N{U+1031}\N{U+102c}\N{U+1000}\N{U+103c}\N{U+102c}",
      "\N{U+1005}\N{U+1014}\N{U+1031}",
      "\N{U+1010}\N{U+1014}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+1002}\N{U+1014}\N{U+103d}\N{U+1031}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+1010}\N{U+1014}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+101c}\N{U+102c}",
      "\N{U+1021}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+1002}\N{U+102b}",
      "\N{U+1017}\N{U+102f}\N{U+1012}\N{U+1039}\N{U+1013}\N{U+101f}\N{U+1030}\N{U+1038}",
      "\N{U+1000}\N{U+103c}\N{U+102c}\N{U+101e}\N{U+1015}\N{U+1010}\N{U+1031}\N{U+1038}",
      "\N{U+101e}\N{U+1031}\N{U+102c}\N{U+1000}\N{U+103c}\N{U+102c}",
      "\N{U+1005}\N{U+1014}\N{U+1031}",
      "\N{U+1010}\N{U+1014}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+1002}\N{U+1014}\N{U+103d}\N{U+1031}"
    ],
    day_stand_alone_narrow => [
      "\N{U+1010}",
      "\N{U+1021}",
      "\N{U+1017}",
      "\N{U+1000}",
      "\N{U+101e}",
      "\N{U+1005}",
      "\N{U+1010}"
    ],
    day_stand_alone_wide => [
      "\N{U+1010}\N{U+1014}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+101c}\N{U+102c}",
      "\N{U+1021}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+1002}\N{U+102b}",
      "\N{U+1017}\N{U+102f}\N{U+1012}\N{U+1039}\N{U+1013}\N{U+101f}\N{U+1030}\N{U+1038}",
      "\N{U+1000}\N{U+103c}\N{U+102c}\N{U+101e}\N{U+1015}\N{U+1010}\N{U+1031}\N{U+1038}",
      "\N{U+101e}\N{U+1031}\N{U+102c}\N{U+1000}\N{U+103c}\N{U+102c}",
      "\N{U+1005}\N{U+1014}\N{U+1031}",
      "\N{U+1010}\N{U+1014}\N{U+1004}\N{U+103a}\N{U+1039}\N{U+1002}\N{U+1014}\N{U+103d}\N{U+1031}"
    ],
    era_abbreviated => [
      "\N{U+1018}\N{U+102e}\N{U+1005}\N{U+102e}",
      "\N{U+1021}\N{U+1031}\N{U+1012}\N{U+102e}"
    ],
    era_narrow => [
      "\N{U+1018}\N{U+102e}\N{U+1005}\N{U+102e}",
      "\N{U+1021}\N{U+1031}\N{U+1012}\N{U+102e}"
    ],
    era_wide => [
      "\N{U+1001}\N{U+101b}\N{U+1005}\N{U+103a}\N{U+1010}\N{U+1031}\N{U+102c}\N{U+103a} \N{U+1019}\N{U+1015}\N{U+1031}\N{U+102b}\N{U+103a}\N{U+1019}\N{U+102e}\N{U+1000}\N{U+102c}\N{U+101c}",
      "\N{U+1001}\N{U+101b}\N{U+1005}\N{U+103a}\N{U+1010}\N{U+1031}\N{U+102c}\N{U+103a} \N{U+1015}\N{U+1031}\N{U+102b}\N{U+103a}\N{U+1011}\N{U+103d}\N{U+1014}\N{U+103a}\N{U+1038}\N{U+1015}\N{U+103c}\N{U+102e}\N{U+1038}\N{U+1000}\N{U+102c}\N{U+101c}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%OC%Oy %b %Od %A",
    glibc_datetime_format => "%OC%Oy %b %Od %A %OI:%OM:%OS %Op %Z",
    glibc_time_12_format => "%OI:%OM:%OS %p",
    glibc_time_format => "%OI:%OM:%OS %p",
    language => "Burmese",
    month_format_abbreviated => [
      "\N{U+1007}\N{U+1014}\N{U+103a}",
      "\N{U+1016}\N{U+1031}",
      "\N{U+1019}\N{U+1010}\N{U+103a}",
      "\N{U+1027}\N{U+1015}\N{U+103c}\N{U+102e}",
      "\N{U+1019}\N{U+1031}",
      "\N{U+1007}\N{U+103d}\N{U+1014}\N{U+103a}",
      "\N{U+1007}\N{U+1030}",
      "\N{U+1029}",
      "\N{U+1005}\N{U+1000}\N{U+103a}",
      "\N{U+1021}\N{U+1031}\N{U+102c}\N{U+1000}\N{U+103a}",
      "\N{U+1014}\N{U+102d}\N{U+102f}",
      "\N{U+1012}\N{U+102e}"
    ],
    month_format_narrow => [
      "\N{U+1007}",
      "\N{U+1016}",
      "\N{U+1019}",
      "\N{U+1027}",
      "\N{U+1019}",
      "\N{U+1007}",
      "\N{U+1007}",
      "\N{U+1029}",
      "\N{U+1005}",
      "\N{U+1021}",
      "\N{U+1014}",
      "\N{U+1012}"
    ],
    month_format_wide => [
      "\N{U+1007}\N{U+1014}\N{U+103a}\N{U+1014}\N{U+101d}\N{U+102b}\N{U+101b}\N{U+102e}",
      "\N{U+1016}\N{U+1031}\N{U+1016}\N{U+1031}\N{U+102c}\N{U+103a}\N{U+101d}\N{U+102b}\N{U+101b}\N{U+102e}",
      "\N{U+1019}\N{U+1010}\N{U+103a}",
      "\N{U+1027}\N{U+1015}\N{U+103c}\N{U+102e}",
      "\N{U+1019}\N{U+1031}",
      "\N{U+1007}\N{U+103d}\N{U+1014}\N{U+103a}",
      "\N{U+1007}\N{U+1030}\N{U+101c}\N{U+102d}\N{U+102f}\N{U+1004}\N{U+103a}",
      "\N{U+1029}\N{U+1002}\N{U+102f}\N{U+1010}\N{U+103a}",
      "\N{U+1005}\N{U+1000}\N{U+103a}\N{U+1010}\N{U+1004}\N{U+103a}\N{U+1018}\N{U+102c}",
      "\N{U+1021}\N{U+1031}\N{U+102c}\N{U+1000}\N{U+103a}\N{U+1010}\N{U+102d}\N{U+102f}\N{U+1018}\N{U+102c}",
      "\N{U+1014}\N{U+102d}\N{U+102f}\N{U+101d}\N{U+1004}\N{U+103a}\N{U+1018}\N{U+102c}",
      "\N{U+1012}\N{U+102e}\N{U+1007}\N{U+1004}\N{U+103a}\N{U+1018}\N{U+102c}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+1007}\N{U+1014}\N{U+103a}",
      "\N{U+1016}\N{U+1031}",
      "\N{U+1019}\N{U+1010}\N{U+103a}",
      "\N{U+1027}\N{U+1015}\N{U+103c}\N{U+102e}",
      "\N{U+1019}\N{U+1031}",
      "\N{U+1007}\N{U+103d}\N{U+1014}\N{U+103a}",
      "\N{U+1007}\N{U+1030}",
      "\N{U+1029}",
      "\N{U+1005}\N{U+1000}\N{U+103a}",
      "\N{U+1021}\N{U+1031}\N{U+102c}\N{U+1000}\N{U+103a}",
      "\N{U+1014}\N{U+102d}\N{U+102f}",
      "\N{U+1012}\N{U+102e}"
    ],
    month_stand_alone_narrow => [
      "\N{U+1007}",
      "\N{U+1016}",
      "\N{U+1019}",
      "\N{U+1027}",
      "\N{U+1019}",
      "\N{U+1007}",
      "\N{U+1007}",
      "\N{U+1029}",
      "\N{U+1005}",
      "\N{U+1021}",
      "\N{U+1014}",
      "\N{U+1012}"
    ],
    month_stand_alone_wide => [
      "\N{U+1007}\N{U+1014}\N{U+103a}\N{U+1014}\N{U+101d}\N{U+102b}\N{U+101b}\N{U+102e}",
      "\N{U+1016}\N{U+1031}\N{U+1016}\N{U+1031}\N{U+102c}\N{U+103a}\N{U+101d}\N{U+102b}\N{U+101b}\N{U+102e}",
      "\N{U+1019}\N{U+1010}\N{U+103a}",
      "\N{U+1027}\N{U+1015}\N{U+103c}\N{U+102e}",
      "\N{U+1019}\N{U+1031}",
      "\N{U+1007}\N{U+103d}\N{U+1014}\N{U+103a}",
      "\N{U+1007}\N{U+1030}\N{U+101c}\N{U+102d}\N{U+102f}\N{U+1004}\N{U+103a}",
      "\N{U+1029}\N{U+1002}\N{U+102f}\N{U+1010}\N{U+103a}",
      "\N{U+1005}\N{U+1000}\N{U+103a}\N{U+1010}\N{U+1004}\N{U+103a}\N{U+1018}\N{U+102c}",
      "\N{U+1021}\N{U+1031}\N{U+102c}\N{U+1000}\N{U+103a}\N{U+1010}\N{U+102d}\N{U+102f}\N{U+1018}\N{U+102c}",
      "\N{U+1014}\N{U+102d}\N{U+102f}\N{U+101d}\N{U+1004}\N{U+103a}\N{U+1018}\N{U+102c}",
      "\N{U+1012}\N{U+102e}\N{U+1007}\N{U+1004}\N{U+103a}\N{U+1018}\N{U+102c}"
    ],
    name => "Burmese Myanmar (Burma)",
    native_language => "\N{U+1017}\N{U+1019}\N{U+102c}",
    native_name => "\N{U+1017}\N{U+1019}\N{U+102c} \N{U+1019}\N{U+103c}\N{U+1014}\N{U+103a}\N{U+1019}\N{U+102c}",
    native_script => undef,
    native_territory => "\N{U+1019}\N{U+103c}\N{U+1014}\N{U+103a}\N{U+1019}\N{U+102c}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+1015}\N{U+1011}\N{U+1019} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1012}\N{U+102f}\N{U+1010}\N{U+102d}\N{U+101a} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1010}\N{U+1010}\N{U+102d}\N{U+101a} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1005}\N{U+1010}\N{U+102f}\N{U+1010}\N{U+1039}\N{U+1011} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}"
    ],
    quarter_format_narrow => [
      "\N{U+1015}",
      "\N{U+1012}\N{U+102f}",
      "\N{U+1010}",
      "\N{U+1005}"
    ],
    quarter_format_wide => [
      "\N{U+1015}\N{U+1011}\N{U+1019} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1012}\N{U+102f}\N{U+1010}\N{U+102d}\N{U+101a} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1010}\N{U+1010}\N{U+102d}\N{U+101a} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1005}\N{U+1010}\N{U+102f}\N{U+1010}\N{U+1039}\N{U+1011} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+1015}\N{U+1011}\N{U+1019} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1012}\N{U+102f}\N{U+1010}\N{U+102d}\N{U+101a} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1010}\N{U+1010}\N{U+102d}\N{U+101a} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1005}\N{U+1010}\N{U+102f}\N{U+1010}\N{U+1039}\N{U+1011} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+1015}",
      "\N{U+1012}\N{U+102f}",
      "\N{U+1010}",
      "\N{U+1005}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+1015}\N{U+1011}\N{U+1019} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1012}\N{U+102f}\N{U+1010}\N{U+102d}\N{U+101a} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1010}\N{U+1010}\N{U+102d}\N{U+101a} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}",
      "\N{U+1005}\N{U+1010}\N{U+102f}\N{U+1010}\N{U+1039}\N{U+1011} \N{U+101e}\N{U+102f}\N{U+1036}\N{U+1038}\N{U+101c}\N{U+1015}\N{U+1010}\N{U+103a}"
    ],
    script => undef,
    territory => "Myanmar (Burma)",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mzn ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "mzn",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "\N{U+067e}.\N{U+0645}",
      "\N{U+0645}."
    ],
    era_narrow => [
      "\N{U+067e}.\N{U+0645}",
      "\N{U+0645}."
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0645}\N{U+06cc}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0628}\N{U+0639}\N{U+062f} \N{U+0645}\N{U+06cc}\N{U+0644}\N{U+0627}\N{U+062f}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Mazanderani",
    month_format_abbreviated => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Mazanderani",
    native_language => "\N{U+0645}\N{U+0627}\N{U+0632}\N{U+0631}\N{U+0648}\N{U+0646}\N{U+06cc}",
    native_name => "\N{U+0645}\N{U+0627}\N{U+0632}\N{U+0631}\N{U+0648}\N{U+0646}\N{U+06cc}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ mzn-IR ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "mzn-IR",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "\N{U+067e}.\N{U+0645}",
      "\N{U+0645}."
    ],
    era_narrow => [
      "\N{U+067e}.\N{U+0645}",
      "\N{U+0645}."
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0645}\N{U+06cc}\N{U+0644}\N{U+0627}\N{U+062f}",
      "\N{U+0628}\N{U+0639}\N{U+062f} \N{U+0645}\N{U+06cc}\N{U+0644}\N{U+0627}\N{U+062f}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Mazanderani",
    month_format_abbreviated => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+0698}\N{U+0627}\N{U+0646}\N{U+0648}\N{U+06cc}\N{U+0647}",
      "\N{U+0641}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0647}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0633}",
      "\N{U+0622}\N{U+0648}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0647}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+0646}",
      "\N{U+0698}\N{U+0648}\N{U+0626}\N{U+06cc}\N{U+0647}",
      "\N{U+0627}\N{U+0648}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0627}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Mazanderani Iran",
    native_language => "\N{U+0645}\N{U+0627}\N{U+0632}\N{U+0631}\N{U+0648}\N{U+0646}\N{U+06cc}",
    native_name => "\N{U+0645}\N{U+0627}\N{U+0632}\N{U+0631}\N{U+0648}\N{U+0646}\N{U+06cc} \N{U+0627}\N{U+06cc}\N{U+0631}\N{U+0627}\N{U+0646}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+06cc}\N{U+0631}\N{U+0627}\N{U+0646}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Iran",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ naq ]__
  {
    am_pm_abbreviated => [
      "\N{U+01c1}goagas",
      "\N{U+01c3}uias"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "naq",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ma",
      "De",
      "Wu",
      "Do",
      "Fr",
      "Sat",
      "Son"
    ],
    day_format_narrow => [
      "M",
      "E",
      "W",
      "D",
      "F",
      "A",
      "S"
    ],
    day_format_wide => [
      "Mantaxtsees",
      "Denstaxtsees",
      "Wunstaxtsees",
      "Dondertaxtsees",
      "Fraitaxtsees",
      "Satertaxtsees",
      "Sontaxtsees"
    ],
    day_stand_alone_abbreviated => [
      "Ma",
      "De",
      "Wu",
      "Do",
      "Fr",
      "Sat",
      "Son"
    ],
    day_stand_alone_narrow => [
      "M",
      "E",
      "W",
      "D",
      "F",
      "A",
      "S"
    ],
    day_stand_alone_wide => [
      "Mantaxtsees",
      "Denstaxtsees",
      "Wunstaxtsees",
      "Dondertaxtsees",
      "Fraitaxtsees",
      "Satertaxtsees",
      "Sontaxtsees"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Xristub ai\N{U+01c3}\N{U+00e2}",
      "Xristub khao\N{U+01c3}g\N{U+00e2}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Nama",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "\N{U+01c3}Khanni",
      "\N{U+01c3}Khan\N{U+01c0}g\N{U+00f4}ab",
      "\N{U+01c0}Khuu\N{U+01c1}kh\N{U+00e2}b",
      "\N{U+01c3}H\N{U+00f4}a\N{U+01c2}khaib",
      "\N{U+01c3}Khaits\N{U+00e2}b",
      "Gama\N{U+01c0}aeb",
      "\N{U+01c2}Khoesaob",
      "Ao\N{U+01c1}khuum\N{U+00fb}\N{U+01c1}kh\N{U+00e2}b",
      "Tara\N{U+01c0}khuum\N{U+00fb}\N{U+01c1}kh\N{U+00e2}b",
      "\N{U+01c2}N\N{U+00fb}\N{U+01c1}n\N{U+00e2}iseb",
      "\N{U+01c0}Hoo\N{U+01c2}gaeb",
      "H\N{U+00f4}asore\N{U+01c1}kh\N{U+00e2}b"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "\N{U+01c3}Khanni",
      "\N{U+01c3}Khan\N{U+01c0}g\N{U+00f4}ab",
      "\N{U+01c0}Khuu\N{U+01c1}kh\N{U+00e2}b",
      "\N{U+01c3}H\N{U+00f4}a\N{U+01c2}khaib",
      "\N{U+01c3}Khaits\N{U+00e2}b",
      "Gama\N{U+01c0}aeb",
      "\N{U+01c2}Khoesaob",
      "Ao\N{U+01c1}khuum\N{U+00fb}\N{U+01c1}kh\N{U+00e2}b",
      "Tara\N{U+01c0}khuum\N{U+00fb}\N{U+01c1}kh\N{U+00e2}b",
      "\N{U+01c2}N\N{U+00fb}\N{U+01c1}n\N{U+00e2}iseb",
      "\N{U+01c0}Hoo\N{U+01c2}gaeb",
      "H\N{U+00f4}asore\N{U+01c1}kh\N{U+00e2}b"
    ],
    name => "Nama",
    native_language => "Khoekhoegowab",
    native_name => "Khoekhoegowab",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "KW1",
      "KW2",
      "KW3",
      "KW4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1ro kwartals",
      "2\N{U+01c1}\N{U+00ee} kwartals",
      "3\N{U+01c1}\N{U+00ee} kwartals",
      "4\N{U+01c1}\N{U+00ee} kwartals"
    ],
    quarter_stand_alone_abbreviated => [
      "KW1",
      "KW2",
      "KW3",
      "KW4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1ro kwartals",
      "2\N{U+01c1}\N{U+00ee} kwartals",
      "3\N{U+01c1}\N{U+00ee} kwartals",
      "4\N{U+01c1}\N{U+00ee} kwartals"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ naq-NA ]__
  {
    am_pm_abbreviated => [
      "\N{U+01c1}goagas",
      "\N{U+01c3}uias"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "naq-NA",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ma",
      "De",
      "Wu",
      "Do",
      "Fr",
      "Sat",
      "Son"
    ],
    day_format_narrow => [
      "M",
      "E",
      "W",
      "D",
      "F",
      "A",
      "S"
    ],
    day_format_wide => [
      "Mantaxtsees",
      "Denstaxtsees",
      "Wunstaxtsees",
      "Dondertaxtsees",
      "Fraitaxtsees",
      "Satertaxtsees",
      "Sontaxtsees"
    ],
    day_stand_alone_abbreviated => [
      "Ma",
      "De",
      "Wu",
      "Do",
      "Fr",
      "Sat",
      "Son"
    ],
    day_stand_alone_narrow => [
      "M",
      "E",
      "W",
      "D",
      "F",
      "A",
      "S"
    ],
    day_stand_alone_wide => [
      "Mantaxtsees",
      "Denstaxtsees",
      "Wunstaxtsees",
      "Dondertaxtsees",
      "Fraitaxtsees",
      "Satertaxtsees",
      "Sontaxtsees"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Xristub ai\N{U+01c3}\N{U+00e2}",
      "Xristub khao\N{U+01c3}g\N{U+00e2}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Nama",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "\N{U+01c3}Khanni",
      "\N{U+01c3}Khan\N{U+01c0}g\N{U+00f4}ab",
      "\N{U+01c0}Khuu\N{U+01c1}kh\N{U+00e2}b",
      "\N{U+01c3}H\N{U+00f4}a\N{U+01c2}khaib",
      "\N{U+01c3}Khaits\N{U+00e2}b",
      "Gama\N{U+01c0}aeb",
      "\N{U+01c2}Khoesaob",
      "Ao\N{U+01c1}khuum\N{U+00fb}\N{U+01c1}kh\N{U+00e2}b",
      "Tara\N{U+01c0}khuum\N{U+00fb}\N{U+01c1}kh\N{U+00e2}b",
      "\N{U+01c2}N\N{U+00fb}\N{U+01c1}n\N{U+00e2}iseb",
      "\N{U+01c0}Hoo\N{U+01c2}gaeb",
      "H\N{U+00f4}asore\N{U+01c1}kh\N{U+00e2}b"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apr",
      "May",
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "\N{U+01c3}Khanni",
      "\N{U+01c3}Khan\N{U+01c0}g\N{U+00f4}ab",
      "\N{U+01c0}Khuu\N{U+01c1}kh\N{U+00e2}b",
      "\N{U+01c3}H\N{U+00f4}a\N{U+01c2}khaib",
      "\N{U+01c3}Khaits\N{U+00e2}b",
      "Gama\N{U+01c0}aeb",
      "\N{U+01c2}Khoesaob",
      "Ao\N{U+01c1}khuum\N{U+00fb}\N{U+01c1}kh\N{U+00e2}b",
      "Tara\N{U+01c0}khuum\N{U+00fb}\N{U+01c1}kh\N{U+00e2}b",
      "\N{U+01c2}N\N{U+00fb}\N{U+01c1}n\N{U+00e2}iseb",
      "\N{U+01c0}Hoo\N{U+01c2}gaeb",
      "H\N{U+00f4}asore\N{U+01c1}kh\N{U+00e2}b"
    ],
    name => "Nama Namibia",
    native_language => "Khoekhoegowab",
    native_name => "Khoekhoegowab Namibiab",
    native_script => undef,
    native_territory => "Namibiab",
    native_variant => undef,
    quarter_format_abbreviated => [
      "KW1",
      "KW2",
      "KW3",
      "KW4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1ro kwartals",
      "2\N{U+01c1}\N{U+00ee} kwartals",
      "3\N{U+01c1}\N{U+00ee} kwartals",
      "4\N{U+01c1}\N{U+00ee} kwartals"
    ],
    quarter_stand_alone_abbreviated => [
      "KW1",
      "KW2",
      "KW3",
      "KW4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1ro kwartals",
      "2\N{U+01c1}\N{U+00ee} kwartals",
      "3\N{U+01c1}\N{U+00ee} kwartals",
      "4\N{U+01c1}\N{U+00ee} kwartals"
    ],
    script => undef,
    territory => "Namibia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ nb ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH.mm",
      EHms => "E HH.mm.ss",
      Ed => "E d.",
      Ehm => "E h.mm a",
      Ehms => "E h.mm.ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L.",
      MEd => "E d.M",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMdd => "d.M.",
      Md => "d.M.",
      d => "d.",
      h => "h a",
      hm => "h.mm a",
      hms => "h.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y",
      yM => "M.y",
      yMEd => "E d.MM.y",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nb",
    date_format_full => "EEEE d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "dd.MM.y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} 'kl'. {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "man.",
      "tir.",
      "ons.",
      "tor.",
      "fre.",
      "l\N{U+00f8}r.",
      "s\N{U+00f8}n."
    ],
    day_format_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "mandag",
      "tirsdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f8}rdag",
      "s\N{U+00f8}ndag"
    ],
    day_stand_alone_abbreviated => [
      "man.",
      "tir.",
      "ons.",
      "tor.",
      "fre.",
      "l\N{U+00f8}r.",
      "s\N{U+00f8}n."
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "mandag",
      "tirsdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f8}rdag",
      "s\N{U+00f8}ndag"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "f.Kr.",
      "e.Kr."
    ],
    era_wide => [
      "f\N{U+00f8}r Kristus",
      "etter Kristus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Norwegian Bokm\N{U+00e5}l",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mar.",
      "apr.",
      "mai",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "des."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "mars",
      "april",
      "mai",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "desember"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "mai",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "mars",
      "april",
      "mai",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "desember"
    ],
    name => "Norwegian Bokm\N{U+00e5}l",
    native_language => "norsk bokm\N{U+00e5}l",
    native_name => "norsk bokm\N{U+00e5}l",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ nb-NO ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH.mm",
      EHms => "E HH.mm.ss",
      Ed => "E d.",
      Ehm => "E h.mm a",
      Ehms => "E h.mm.ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L.",
      MEd => "E d.M",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMdd => "d.M.",
      Md => "d.M.",
      d => "d.",
      h => "h a",
      hm => "h.mm a",
      hms => "h.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y",
      yM => "M.y",
      yMEd => "E d.MM.y",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nb-NO",
    date_format_full => "EEEE d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "dd.MM.y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} 'kl'. {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "man.",
      "tir.",
      "ons.",
      "tor.",
      "fre.",
      "l\N{U+00f8}r.",
      "s\N{U+00f8}n."
    ],
    day_format_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "mandag",
      "tirsdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f8}rdag",
      "s\N{U+00f8}ndag"
    ],
    day_stand_alone_abbreviated => [
      "man.",
      "tir.",
      "ons.",
      "tor.",
      "fre.",
      "l\N{U+00f8}r.",
      "s\N{U+00f8}n."
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "mandag",
      "tirsdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f8}rdag",
      "s\N{U+00f8}ndag"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "f.Kr.",
      "e.Kr."
    ],
    era_wide => [
      "f\N{U+00f8}r Kristus",
      "etter Kristus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %d. %b %H:%M:%S %z %Y",
    glibc_date_format => "%d. %b %Y",
    glibc_datetime_format => "%a %d. %b %Y kl. %H.%M %z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "kl. %H.%M %z",
    language => "Norwegian Bokm\N{U+00e5}l",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mar.",
      "apr.",
      "mai",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "des."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "mars",
      "april",
      "mai",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "desember"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "mai",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "mars",
      "april",
      "mai",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "desember"
    ],
    name => "Norwegian Bokm\N{U+00e5}l Norway",
    native_language => "norsk bokm\N{U+00e5}l",
    native_name => "norsk bokm\N{U+00e5}l Norge",
    native_script => undef,
    native_territory => "Norge",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    script => undef,
    territory => "Norway",
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ nb-SJ ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH.mm",
      EHms => "E HH.mm.ss",
      Ed => "E d.",
      Ehm => "E h.mm a",
      Ehms => "E h.mm.ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L.",
      MEd => "E d.M",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMdd => "d.M.",
      Md => "d.M.",
      d => "d.",
      h => "h a",
      hm => "h.mm a",
      hms => "h.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y",
      yM => "M.y",
      yMEd => "E d.MM.y",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nb-SJ",
    date_format_full => "EEEE d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "dd.MM.y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} 'kl'. {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "man.",
      "tir.",
      "ons.",
      "tor.",
      "fre.",
      "l\N{U+00f8}r.",
      "s\N{U+00f8}n."
    ],
    day_format_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "mandag",
      "tirsdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f8}rdag",
      "s\N{U+00f8}ndag"
    ],
    day_stand_alone_abbreviated => [
      "man.",
      "tir.",
      "ons.",
      "tor.",
      "fre.",
      "l\N{U+00f8}r.",
      "s\N{U+00f8}n."
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "mandag",
      "tirsdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f8}rdag",
      "s\N{U+00f8}ndag"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "f.Kr.",
      "e.Kr."
    ],
    era_wide => [
      "f\N{U+00f8}r Kristus",
      "etter Kristus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Norwegian Bokm\N{U+00e5}l",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mar.",
      "apr.",
      "mai",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "des."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "mars",
      "april",
      "mai",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "desember"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "mai",
      "jun",
      "jul",
      "aug",
      "sep",
      "okt",
      "nov",
      "des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "mars",
      "april",
      "mai",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "desember"
    ],
    name => "Norwegian Bokm\N{U+00e5}l Svalbard & Jan Mayen",
    native_language => "norsk bokm\N{U+00e5}l",
    native_name => "norsk bokm\N{U+00e5}l Svalbard og Jan Mayen",
    native_script => undef,
    native_territory => "Svalbard og Jan Mayen",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    script => undef,
    territory => "Svalbard & Jan Mayen",
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ nd ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nd",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mvu",
      "Sib",
      "Sit",
      "Sin",
      "Sih",
      "Mgq",
      "Son"
    ],
    day_format_narrow => [
      "M",
      "S",
      "S",
      "S",
      "S",
      "M",
      "S"
    ],
    day_format_wide => [
      "Mvulo",
      "Sibili",
      "Sithathu",
      "Sine",
      "Sihlanu",
      "Mgqibelo",
      "Sonto"
    ],
    day_stand_alone_abbreviated => [
      "Mvu",
      "Sib",
      "Sit",
      "Sin",
      "Sih",
      "Mgq",
      "Son"
    ],
    day_stand_alone_narrow => [
      "M",
      "S",
      "S",
      "S",
      "S",
      "M",
      "S"
    ],
    day_stand_alone_wide => [
      "Mvulo",
      "Sibili",
      "Sithathu",
      "Sine",
      "Sihlanu",
      "Mgqibelo",
      "Sonto"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "UKristo angakabuyi",
      "Ukristo ebuyile"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "North Ndebele",
    month_format_abbreviated => [
      "Zib",
      "Nhlo",
      "Mbi",
      "Mab",
      "Nkw",
      "Nhla",
      "Ntu",
      "Ncw",
      "Mpan",
      "Mfu",
      "Lwe",
      "Mpal"
    ],
    month_format_narrow => [
      "Z",
      "N",
      "M",
      "M",
      "N",
      "N",
      "N",
      "N",
      "M",
      "M",
      "L",
      "M"
    ],
    month_format_wide => [
      "Zibandlela",
      "Nhlolanja",
      "Mbimbitho",
      "Mabasa",
      "Nkwenkwezi",
      "Nhlangula",
      "Ntulikazi",
      "Ncwabakazi",
      "Mpandula",
      "Mfumfu",
      "Lwezi",
      "Mpalakazi"
    ],
    month_stand_alone_abbreviated => [
      "Zib",
      "Nhlo",
      "Mbi",
      "Mab",
      "Nkw",
      "Nhla",
      "Ntu",
      "Ncw",
      "Mpan",
      "Mfu",
      "Lwe",
      "Mpal"
    ],
    month_stand_alone_narrow => [
      "Z",
      "N",
      "M",
      "M",
      "N",
      "N",
      "N",
      "N",
      "M",
      "M",
      "L",
      "M"
    ],
    month_stand_alone_wide => [
      "Zibandlela",
      "Nhlolanja",
      "Mbimbitho",
      "Mabasa",
      "Nkwenkwezi",
      "Nhlangula",
      "Ntulikazi",
      "Ncwabakazi",
      "Mpandula",
      "Mfumfu",
      "Lwezi",
      "Mpalakazi"
    ],
    name => "North Ndebele",
    native_language => "isiNdebele",
    native_name => "isiNdebele",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Kota 1",
      "Kota 2",
      "Kota 3",
      "Kota 4"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Kota 1",
      "Kota 2",
      "Kota 3",
      "Kota 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ nd-ZW ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nd-ZW",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mvu",
      "Sib",
      "Sit",
      "Sin",
      "Sih",
      "Mgq",
      "Son"
    ],
    day_format_narrow => [
      "M",
      "S",
      "S",
      "S",
      "S",
      "M",
      "S"
    ],
    day_format_wide => [
      "Mvulo",
      "Sibili",
      "Sithathu",
      "Sine",
      "Sihlanu",
      "Mgqibelo",
      "Sonto"
    ],
    day_stand_alone_abbreviated => [
      "Mvu",
      "Sib",
      "Sit",
      "Sin",
      "Sih",
      "Mgq",
      "Son"
    ],
    day_stand_alone_narrow => [
      "M",
      "S",
      "S",
      "S",
      "S",
      "M",
      "S"
    ],
    day_stand_alone_wide => [
      "Mvulo",
      "Sibili",
      "Sithathu",
      "Sine",
      "Sihlanu",
      "Mgqibelo",
      "Sonto"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "UKristo angakabuyi",
      "Ukristo ebuyile"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "North Ndebele",
    month_format_abbreviated => [
      "Zib",
      "Nhlo",
      "Mbi",
      "Mab",
      "Nkw",
      "Nhla",
      "Ntu",
      "Ncw",
      "Mpan",
      "Mfu",
      "Lwe",
      "Mpal"
    ],
    month_format_narrow => [
      "Z",
      "N",
      "M",
      "M",
      "N",
      "N",
      "N",
      "N",
      "M",
      "M",
      "L",
      "M"
    ],
    month_format_wide => [
      "Zibandlela",
      "Nhlolanja",
      "Mbimbitho",
      "Mabasa",
      "Nkwenkwezi",
      "Nhlangula",
      "Ntulikazi",
      "Ncwabakazi",
      "Mpandula",
      "Mfumfu",
      "Lwezi",
      "Mpalakazi"
    ],
    month_stand_alone_abbreviated => [
      "Zib",
      "Nhlo",
      "Mbi",
      "Mab",
      "Nkw",
      "Nhla",
      "Ntu",
      "Ncw",
      "Mpan",
      "Mfu",
      "Lwe",
      "Mpal"
    ],
    month_stand_alone_narrow => [
      "Z",
      "N",
      "M",
      "M",
      "N",
      "N",
      "N",
      "N",
      "M",
      "M",
      "L",
      "M"
    ],
    month_stand_alone_wide => [
      "Zibandlela",
      "Nhlolanja",
      "Mbimbitho",
      "Mabasa",
      "Nkwenkwezi",
      "Nhlangula",
      "Ntulikazi",
      "Ncwabakazi",
      "Mpandula",
      "Mfumfu",
      "Lwezi",
      "Mpalakazi"
    ],
    name => "North Ndebele Zimbabwe",
    native_language => "isiNdebele",
    native_name => "isiNdebele Zimbabwe",
    native_script => undef,
    native_territory => "Zimbabwe",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Kota 1",
      "Kota 2",
      "Kota 3",
      "Kota 4"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Kota 1",
      "Kota 2",
      "Kota 3",
      "Kota 4"
    ],
    script => undef,
    territory => "Zimbabwe",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ne ]__
  {
    am_pm_abbreviated => [
      "\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}\N{U+093e}\N{U+0939}\N{U+094d}\N{U+0928}",
      "\N{U+0905}\N{U+092a}\N{U+0930}\N{U+093e}\N{U+0939}\N{U+094d}\N{U+0928}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "ne",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0938}\N{U+094b}\N{U+092e}",
      "\N{U+092e}\N{U+0919}\N{U+094d}\N{U+0917}\N{U+0932}",
      "\N{U+092c}\N{U+0941}\N{U+0927}",
      "\N{U+092c}\N{U+093f}\N{U+0939}\N{U+0940}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}",
      "\N{U+0906}\N{U+0907}\N{U+0924}"
    ],
    day_format_narrow => [
      "\N{U+0938}\N{U+094b}",
      "\N{U+092e}",
      "\N{U+092c}\N{U+0941}",
      "\N{U+092c}\N{U+093f}",
      "\N{U+0936}\N{U+0941}",
      "\N{U+0936}",
      "\N{U+0906}"
    ],
    day_format_wide => [
      "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0919}\N{U+094d}\N{U+0917}\N{U+0932}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+093f}\N{U+0939}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0906}\N{U+0907}\N{U+0924}\N{U+092c}\N{U+093e}\N{U+0930}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0938}\N{U+094b}\N{U+092e}",
      "\N{U+092e}\N{U+0919}\N{U+094d}\N{U+0917}\N{U+0932}",
      "\N{U+092c}\N{U+0941}\N{U+0927}",
      "\N{U+092c}\N{U+093f}\N{U+0939}\N{U+0940}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}",
      "\N{U+0906}\N{U+0907}\N{U+0924}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0938}\N{U+094b}",
      "\N{U+092e}",
      "\N{U+092c}\N{U+0941}",
      "\N{U+092c}\N{U+093f}",
      "\N{U+0936}\N{U+0941}",
      "\N{U+0936}",
      "\N{U+0906}"
    ],
    day_stand_alone_wide => [
      "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0919}\N{U+094d}\N{U+0917}\N{U+0932}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+093f}\N{U+0939}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0906}\N{U+0907}\N{U+0924}\N{U+092c}\N{U+093e}\N{U+0930}"
    ],
    era_abbreviated => [
      "\N{U+0908}\N{U+0938}\N{U+093e} \N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0938}\N{U+0928}\N{U+094d}"
    ],
    era_narrow => [
      "\N{U+0908}\N{U+0938}\N{U+093e} \N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0938}\N{U+0928}\N{U+094d}"
    ],
    era_wide => [
      "\N{U+0908}\N{U+0938}\N{U+093e} \N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0938}\N{U+0928}\N{U+094d}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Nepali",
    month_format_abbreviated => [
      "\N{U+091c}\N{U+0928}\N{U+0935}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0905}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0908}",
      "\N{U+0905}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+092d}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}"
    ],
    month_format_narrow => [
      "\N{U+0967}",
      "\N{U+0968}",
      "\N{U+0969}",
      "\N{U+096a}",
      "\N{U+096b}",
      "\N{U+096c}",
      "\N{U+096d}",
      "\N{U+096e}",
      "\N{U+096f}",
      "\N{U+0967}\N{U+0966}",
      "\N{U+0967}\N{U+0967}",
      "\N{U+0967}\N{U+0968}"
    ],
    month_format_wide => [
      "\N{U+091c}\N{U+0928}\N{U+0935}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0905}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0908}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0908}",
      "\N{U+0905}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+092d}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+091c}\N{U+0928}\N{U+0935}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0905}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0908}",
      "\N{U+0905}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+092d}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0967}",
      "\N{U+0968}",
      "\N{U+0969}",
      "\N{U+096a}",
      "\N{U+096b}",
      "\N{U+096c}",
      "\N{U+096d}",
      "\N{U+096e}",
      "\N{U+096f}",
      "\N{U+0967}\N{U+0966}",
      "\N{U+0967}\N{U+0967}",
      "\N{U+0967}\N{U+0968}"
    ],
    month_stand_alone_wide => [
      "\N{U+091c}\N{U+0928}\N{U+0935}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0905}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0908}",
      "\N{U+0905}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+092d}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}"
    ],
    name => "Nepali",
    native_language => "\N{U+0928}\N{U+0947}\N{U+092a}\N{U+093e}\N{U+0932}\N{U+0940}",
    native_name => "\N{U+0928}\N{U+0947}\N{U+092a}\N{U+093e}\N{U+0932}\N{U+0940}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+092a}\N{U+0939}\N{U+093f}\N{U+0932}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0926}\N{U+094b}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0924}\N{U+0947}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+091a}\N{U+094c}\N{U+0925}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}"
    ],
    quarter_format_narrow => [
      "\N{U+0967}",
      "\N{U+0968}",
      "\N{U+0969}",
      "\N{U+096a}"
    ],
    quarter_format_wide => [
      "\N{U+092a}\N{U+0939}\N{U+093f}\N{U+0932}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0926}\N{U+094b}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0924}\N{U+0947}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+091a}\N{U+094c}\N{U+0925}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+092a}\N{U+0939}\N{U+093f}\N{U+0932}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0926}\N{U+094b}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0924}\N{U+0947}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+091a}\N{U+094c}\N{U+0925}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0967}",
      "\N{U+0968}",
      "\N{U+0969}",
      "\N{U+096a}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+092a}\N{U+0939}\N{U+093f}\N{U+0932}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0926}\N{U+094b}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0924}\N{U+0947}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+091a}\N{U+094c}\N{U+0925}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ne-IN ]__
  {
    am_pm_abbreviated => [
      "\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}\N{U+093e}\N{U+0939}\N{U+094d}\N{U+0928}",
      "\N{U+0905}\N{U+092a}\N{U+0930}\N{U+093e}\N{U+0939}\N{U+094d}\N{U+0928}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "ne-IN",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0938}\N{U+094b}\N{U+092e}",
      "\N{U+092e}\N{U+0919}\N{U+094d}\N{U+0917}\N{U+0932}",
      "\N{U+092c}\N{U+0941}\N{U+0927}",
      "\N{U+092c}\N{U+093f}\N{U+0939}\N{U+0940}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}",
      "\N{U+0906}\N{U+0907}\N{U+0924}"
    ],
    day_format_narrow => [
      "\N{U+0938}\N{U+094b}",
      "\N{U+092e}",
      "\N{U+092c}\N{U+0941}",
      "\N{U+092c}\N{U+093f}",
      "\N{U+0936}\N{U+0941}",
      "\N{U+0936}",
      "\N{U+0906}"
    ],
    day_format_wide => [
      "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0919}\N{U+094d}\N{U+0917}\N{U+0932}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+093f}\N{U+0939}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0906}\N{U+0907}\N{U+0924}\N{U+092c}\N{U+093e}\N{U+0930}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0938}\N{U+094b}\N{U+092e}",
      "\N{U+092e}\N{U+0919}\N{U+094d}\N{U+0917}\N{U+0932}",
      "\N{U+092c}\N{U+0941}\N{U+0927}",
      "\N{U+092c}\N{U+093f}\N{U+0939}\N{U+0940}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}",
      "\N{U+0906}\N{U+0907}\N{U+0924}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0938}\N{U+094b}",
      "\N{U+092e}",
      "\N{U+092c}\N{U+0941}",
      "\N{U+092c}\N{U+093f}",
      "\N{U+0936}\N{U+0941}",
      "\N{U+0936}",
      "\N{U+0906}"
    ],
    day_stand_alone_wide => [
      "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0919}\N{U+094d}\N{U+0917}\N{U+0932}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+093f}\N{U+0939}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0906}\N{U+0907}\N{U+0924}\N{U+092c}\N{U+093e}\N{U+0930}"
    ],
    era_abbreviated => [
      "\N{U+0908}\N{U+0938}\N{U+093e} \N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0938}\N{U+0928}\N{U+094d}"
    ],
    era_narrow => [
      "\N{U+0908}\N{U+0938}\N{U+093e} \N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0938}\N{U+0928}\N{U+094d}"
    ],
    era_wide => [
      "\N{U+0908}\N{U+0938}\N{U+093e} \N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0938}\N{U+0928}\N{U+094d}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Nepali",
    month_format_abbreviated => [
      "\N{U+091c}\N{U+0928}\N{U+0935}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0905}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0908}",
      "\N{U+0905}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+092d}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}"
    ],
    month_format_narrow => [
      "\N{U+0967}",
      "\N{U+0968}",
      "\N{U+0969}",
      "\N{U+096a}",
      "\N{U+096b}",
      "\N{U+096c}",
      "\N{U+096d}",
      "\N{U+096e}",
      "\N{U+096f}",
      "\N{U+0967}\N{U+0966}",
      "\N{U+0967}\N{U+0967}",
      "\N{U+0967}\N{U+0968}"
    ],
    month_format_wide => [
      "\N{U+091c}\N{U+0928}\N{U+0935}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0905}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0908}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0908}",
      "\N{U+0905}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+092d}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+091c}\N{U+0928}\N{U+0935}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0905}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0908}",
      "\N{U+0905}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+092d}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0967}",
      "\N{U+0968}",
      "\N{U+0969}",
      "\N{U+096a}",
      "\N{U+096b}",
      "\N{U+096c}",
      "\N{U+096d}",
      "\N{U+096e}",
      "\N{U+096f}",
      "\N{U+0967}\N{U+0966}",
      "\N{U+0967}\N{U+0967}",
      "\N{U+0967}\N{U+0968}"
    ],
    month_stand_alone_wide => [
      "\N{U+091c}\N{U+0928}\N{U+0935}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0905}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0908}",
      "\N{U+0905}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+092d}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}"
    ],
    name => "Nepali India",
    native_language => "\N{U+0928}\N{U+0947}\N{U+092a}\N{U+093e}\N{U+0932}\N{U+0940}",
    native_name => "\N{U+0928}\N{U+0947}\N{U+092a}\N{U+093e}\N{U+0932}\N{U+0940} \N{U+092d}\N{U+093e}\N{U+0930}\N{U+0924}",
    native_script => undef,
    native_territory => "\N{U+092d}\N{U+093e}\N{U+0930}\N{U+0924}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+092a}\N{U+0939}\N{U+093f}\N{U+0932}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0926}\N{U+094b}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0924}\N{U+0947}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+091a}\N{U+094c}\N{U+0925}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}"
    ],
    quarter_format_narrow => [
      "\N{U+0967}",
      "\N{U+0968}",
      "\N{U+0969}",
      "\N{U+096a}"
    ],
    quarter_format_wide => [
      "\N{U+092a}\N{U+0939}\N{U+093f}\N{U+0932}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0926}\N{U+094b}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0924}\N{U+0947}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+091a}\N{U+094c}\N{U+0925}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+092a}\N{U+0939}\N{U+093f}\N{U+0932}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0926}\N{U+094b}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0924}\N{U+0947}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+091a}\N{U+094c}\N{U+0925}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0967}",
      "\N{U+0968}",
      "\N{U+0969}",
      "\N{U+096a}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+092a}\N{U+0939}\N{U+093f}\N{U+0932}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0926}\N{U+094b}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0924}\N{U+0947}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+091a}\N{U+094c}\N{U+0925}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}"
    ],
    script => undef,
    territory => "India",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ne-NP ]__
  {
    am_pm_abbreviated => [
      "\N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}\N{U+093e}\N{U+0939}\N{U+094d}\N{U+0928}",
      "\N{U+0905}\N{U+092a}\N{U+0930}\N{U+093e}\N{U+0939}\N{U+094d}\N{U+0928}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "ne-NP",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0938}\N{U+094b}\N{U+092e}",
      "\N{U+092e}\N{U+0919}\N{U+094d}\N{U+0917}\N{U+0932}",
      "\N{U+092c}\N{U+0941}\N{U+0927}",
      "\N{U+092c}\N{U+093f}\N{U+0939}\N{U+0940}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}",
      "\N{U+0906}\N{U+0907}\N{U+0924}"
    ],
    day_format_narrow => [
      "\N{U+0938}\N{U+094b}",
      "\N{U+092e}",
      "\N{U+092c}\N{U+0941}",
      "\N{U+092c}\N{U+093f}",
      "\N{U+0936}\N{U+0941}",
      "\N{U+0936}",
      "\N{U+0906}"
    ],
    day_format_wide => [
      "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0919}\N{U+094d}\N{U+0917}\N{U+0932}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+093f}\N{U+0939}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0906}\N{U+0907}\N{U+0924}\N{U+092c}\N{U+093e}\N{U+0930}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0938}\N{U+094b}\N{U+092e}",
      "\N{U+092e}\N{U+0919}\N{U+094d}\N{U+0917}\N{U+0932}",
      "\N{U+092c}\N{U+0941}\N{U+0927}",
      "\N{U+092c}\N{U+093f}\N{U+0939}\N{U+0940}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}",
      "\N{U+0906}\N{U+0907}\N{U+0924}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0938}\N{U+094b}",
      "\N{U+092e}",
      "\N{U+092c}\N{U+0941}",
      "\N{U+092c}\N{U+093f}",
      "\N{U+0936}\N{U+0941}",
      "\N{U+0936}",
      "\N{U+0906}"
    ],
    day_stand_alone_wide => [
      "\N{U+0938}\N{U+094b}\N{U+092e}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092e}\N{U+0919}\N{U+094d}\N{U+0917}\N{U+0932}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+0941}\N{U+0927}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+092c}\N{U+093f}\N{U+0939}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0941}\N{U+0915}\N{U+094d}\N{U+0930}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0936}\N{U+0928}\N{U+093f}\N{U+092c}\N{U+093e}\N{U+0930}",
      "\N{U+0906}\N{U+0907}\N{U+0924}\N{U+092c}\N{U+093e}\N{U+0930}"
    ],
    era_abbreviated => [
      "\N{U+0908}\N{U+0938}\N{U+093e} \N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0938}\N{U+0928}\N{U+094d}"
    ],
    era_narrow => [
      "\N{U+0908}\N{U+0938}\N{U+093e} \N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0938}\N{U+0928}\N{U+094d}"
    ],
    era_wide => [
      "\N{U+0908}\N{U+0938}\N{U+093e} \N{U+092a}\N{U+0942}\N{U+0930}\N{U+094d}\N{U+0935}",
      "\N{U+0938}\N{U+0928}\N{U+094d}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A %d %b %Y",
    glibc_datetime_format => "%A %d %b %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "Nepali",
    month_format_abbreviated => [
      "\N{U+091c}\N{U+0928}\N{U+0935}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0905}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0908}",
      "\N{U+0905}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+092d}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}"
    ],
    month_format_narrow => [
      "\N{U+0967}",
      "\N{U+0968}",
      "\N{U+0969}",
      "\N{U+096a}",
      "\N{U+096b}",
      "\N{U+096c}",
      "\N{U+096d}",
      "\N{U+096e}",
      "\N{U+096f}",
      "\N{U+0967}\N{U+0966}",
      "\N{U+0967}\N{U+0967}",
      "\N{U+0967}\N{U+0968}"
    ],
    month_format_wide => [
      "\N{U+091c}\N{U+0928}\N{U+0935}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0905}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0908}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0908}",
      "\N{U+0905}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+092d}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+091c}\N{U+0928}\N{U+0935}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0905}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0908}",
      "\N{U+0905}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+092d}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0967}",
      "\N{U+0968}",
      "\N{U+0969}",
      "\N{U+096a}",
      "\N{U+096b}",
      "\N{U+096c}",
      "\N{U+096d}",
      "\N{U+096e}",
      "\N{U+096f}",
      "\N{U+0967}\N{U+0966}",
      "\N{U+0967}\N{U+0967}",
      "\N{U+0967}\N{U+0968}"
    ],
    month_stand_alone_wide => [
      "\N{U+091c}\N{U+0928}\N{U+0935}\N{U+0930}\N{U+0940}",
      "\N{U+092b}\N{U+0947}\N{U+092c}\N{U+094d}\N{U+0930}\N{U+0941}\N{U+0905}\N{U+0930}\N{U+0940}",
      "\N{U+092e}\N{U+093e}\N{U+0930}\N{U+094d}\N{U+091a}",
      "\N{U+0905}\N{U+092a}\N{U+094d}\N{U+0930}\N{U+093f}\N{U+0932}",
      "\N{U+092e}\N{U+0947}",
      "\N{U+091c}\N{U+0941}\N{U+0928}",
      "\N{U+091c}\N{U+0941}\N{U+0932}\N{U+093e}\N{U+0908}",
      "\N{U+0905}\N{U+0917}\N{U+0938}\N{U+094d}\N{U+091f}",
      "\N{U+0938}\N{U+0947}\N{U+092a}\N{U+094d}\N{U+091f}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0905}\N{U+0915}\N{U+094d}\N{U+091f}\N{U+094b}\N{U+092c}\N{U+0930}",
      "\N{U+0928}\N{U+094b}\N{U+092d}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}",
      "\N{U+0921}\N{U+093f}\N{U+0938}\N{U+0947}\N{U+092e}\N{U+094d}\N{U+092c}\N{U+0930}"
    ],
    name => "Nepali Nepal",
    native_language => "\N{U+0928}\N{U+0947}\N{U+092a}\N{U+093e}\N{U+0932}\N{U+0940}",
    native_name => "\N{U+0928}\N{U+0947}\N{U+092a}\N{U+093e}\N{U+0932}\N{U+0940} \N{U+0928}\N{U+0947}\N{U+092a}\N{U+093e}\N{U+0932}",
    native_script => undef,
    native_territory => "\N{U+0928}\N{U+0947}\N{U+092a}\N{U+093e}\N{U+0932}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+092a}\N{U+0939}\N{U+093f}\N{U+0932}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0926}\N{U+094b}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0924}\N{U+0947}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+091a}\N{U+094c}\N{U+0925}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}"
    ],
    quarter_format_narrow => [
      "\N{U+0967}",
      "\N{U+0968}",
      "\N{U+0969}",
      "\N{U+096a}"
    ],
    quarter_format_wide => [
      "\N{U+092a}\N{U+0939}\N{U+093f}\N{U+0932}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0926}\N{U+094b}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0924}\N{U+0947}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+091a}\N{U+094c}\N{U+0925}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+092a}\N{U+0939}\N{U+093f}\N{U+0932}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0926}\N{U+094b}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0924}\N{U+0947}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+091a}\N{U+094c}\N{U+0925}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}"
    ],
    quarter_stand_alone_narrow => [
      "\N{U+0967}",
      "\N{U+0968}",
      "\N{U+0969}",
      "\N{U+096a}"
    ],
    quarter_stand_alone_wide => [
      "\N{U+092a}\N{U+0939}\N{U+093f}\N{U+0932}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0926}\N{U+094b}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+0924}\N{U+0947}\N{U+0938}\N{U+094d}\N{U+0930}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}",
      "\N{U+091a}\N{U+094c}\N{U+0925}\N{U+094b} \N{U+0938}\N{U+0924}\N{U+094d}\N{U+0930}"
    ],
    script => undef,
    territory => "Nepal",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ nl ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E d-M-y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d-M-y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nl",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd-MM-yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ma",
      "di",
      "wo",
      "do",
      "vr",
      "za",
      "zo"
    ],
    day_format_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_format_wide => [
      "maandag",
      "dinsdag",
      "woensdag",
      "donderdag",
      "vrijdag",
      "zaterdag",
      "zondag"
    ],
    day_stand_alone_abbreviated => [
      "ma",
      "di",
      "wo",
      "do",
      "vr",
      "za",
      "zo"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_stand_alone_wide => [
      "maandag",
      "dinsdag",
      "woensdag",
      "donderdag",
      "vrijdag",
      "zaterdag",
      "zondag"
    ],
    era_abbreviated => [
      "v.Chr.",
      "n.Chr."
    ],
    era_narrow => [
      "v.C.",
      "n.C."
    ],
    era_wide => [
      "voor Christus",
      "na Christus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Dutch",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mei",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januari",
      "februari",
      "maart",
      "april",
      "mei",
      "juni",
      "juli",
      "augustus",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mei",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januari",
      "februari",
      "maart",
      "april",
      "mei",
      "juni",
      "juli",
      "augustus",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Dutch",
    native_language => "Nederlands",
    native_name => "Nederlands",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ nl-AW ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E d-M-y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d-M-y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nl-AW",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd-MM-yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ma",
      "di",
      "wo",
      "do",
      "vr",
      "za",
      "zo"
    ],
    day_format_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_format_wide => [
      "maandag",
      "dinsdag",
      "woensdag",
      "donderdag",
      "vrijdag",
      "zaterdag",
      "zondag"
    ],
    day_stand_alone_abbreviated => [
      "ma",
      "di",
      "wo",
      "do",
      "vr",
      "za",
      "zo"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_stand_alone_wide => [
      "maandag",
      "dinsdag",
      "woensdag",
      "donderdag",
      "vrijdag",
      "zaterdag",
      "zondag"
    ],
    era_abbreviated => [
      "v.Chr.",
      "n.Chr."
    ],
    era_narrow => [
      "v.C.",
      "n.C."
    ],
    era_wide => [
      "voor Christus",
      "na Christus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Dutch",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mei",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januari",
      "februari",
      "maart",
      "april",
      "mei",
      "juni",
      "juli",
      "augustus",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mei",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januari",
      "februari",
      "maart",
      "april",
      "mei",
      "juni",
      "juli",
      "augustus",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Dutch Aruba",
    native_language => "Nederlands",
    native_name => "Nederlands Aruba",
    native_script => undef,
    native_territory => "Aruba",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    script => undef,
    territory => "Aruba",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ nl-BE ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E d-M-y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d-M-y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nl-BE",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ma",
      "di",
      "wo",
      "do",
      "vr",
      "za",
      "zo"
    ],
    day_format_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_format_wide => [
      "maandag",
      "dinsdag",
      "woensdag",
      "donderdag",
      "vrijdag",
      "zaterdag",
      "zondag"
    ],
    day_stand_alone_abbreviated => [
      "ma",
      "di",
      "wo",
      "do",
      "vr",
      "za",
      "zo"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_stand_alone_wide => [
      "maandag",
      "dinsdag",
      "woensdag",
      "donderdag",
      "vrijdag",
      "zaterdag",
      "zondag"
    ],
    era_abbreviated => [
      "v.Chr.",
      "n.Chr."
    ],
    era_narrow => [
      "v.C.",
      "n.C."
    ],
    era_wide => [
      "voor Christus",
      "na Christus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d-%m-%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Dutch",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mei",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januari",
      "februari",
      "maart",
      "april",
      "mei",
      "juni",
      "juli",
      "augustus",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mei",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januari",
      "februari",
      "maart",
      "april",
      "mei",
      "juni",
      "juli",
      "augustus",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Dutch Belgium",
    native_language => "Nederlands",
    native_name => "Nederlands Belgi\N{U+00eb}",
    native_script => undef,
    native_territory => "Belgi\N{U+00eb}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    script => undef,
    territory => "Belgium",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ nl-BQ ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E d-M-y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d-M-y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nl-BQ",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd-MM-yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ma",
      "di",
      "wo",
      "do",
      "vr",
      "za",
      "zo"
    ],
    day_format_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_format_wide => [
      "maandag",
      "dinsdag",
      "woensdag",
      "donderdag",
      "vrijdag",
      "zaterdag",
      "zondag"
    ],
    day_stand_alone_abbreviated => [
      "ma",
      "di",
      "wo",
      "do",
      "vr",
      "za",
      "zo"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_stand_alone_wide => [
      "maandag",
      "dinsdag",
      "woensdag",
      "donderdag",
      "vrijdag",
      "zaterdag",
      "zondag"
    ],
    era_abbreviated => [
      "v.Chr.",
      "n.Chr."
    ],
    era_narrow => [
      "v.C.",
      "n.C."
    ],
    era_wide => [
      "voor Christus",
      "na Christus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Dutch",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mei",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januari",
      "februari",
      "maart",
      "april",
      "mei",
      "juni",
      "juli",
      "augustus",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mei",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januari",
      "februari",
      "maart",
      "april",
      "mei",
      "juni",
      "juli",
      "augustus",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Dutch Caribbean Netherlands",
    native_language => "Nederlands",
    native_name => "Nederlands Caribisch Nederland",
    native_script => undef,
    native_territory => "Caribisch Nederland",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    script => undef,
    territory => "Caribbean Netherlands",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ nl-CW ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E d-M-y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d-M-y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nl-CW",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd-MM-yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ma",
      "di",
      "wo",
      "do",
      "vr",
      "za",
      "zo"
    ],
    day_format_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_format_wide => [
      "maandag",
      "dinsdag",
      "woensdag",
      "donderdag",
      "vrijdag",
      "zaterdag",
      "zondag"
    ],
    day_stand_alone_abbreviated => [
      "ma",
      "di",
      "wo",
      "do",
      "vr",
      "za",
      "zo"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_stand_alone_wide => [
      "maandag",
      "dinsdag",
      "woensdag",
      "donderdag",
      "vrijdag",
      "zaterdag",
      "zondag"
    ],
    era_abbreviated => [
      "v.Chr.",
      "n.Chr."
    ],
    era_narrow => [
      "v.C.",
      "n.C."
    ],
    era_wide => [
      "voor Christus",
      "na Christus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Dutch",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mei",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januari",
      "februari",
      "maart",
      "april",
      "mei",
      "juni",
      "juli",
      "augustus",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mei",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januari",
      "februari",
      "maart",
      "april",
      "mei",
      "juni",
      "juli",
      "augustus",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Dutch Cura\N{U+00e7}ao",
    native_language => "Nederlands",
    native_name => "Nederlands Cura\N{U+00e7}ao",
    native_script => undef,
    native_territory => "Cura\N{U+00e7}ao",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    script => undef,
    territory => "Cura\N{U+00e7}ao",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ nl-NL ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E d-M-y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d-M-y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nl-NL",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd-MM-yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ma",
      "di",
      "wo",
      "do",
      "vr",
      "za",
      "zo"
    ],
    day_format_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_format_wide => [
      "maandag",
      "dinsdag",
      "woensdag",
      "donderdag",
      "vrijdag",
      "zaterdag",
      "zondag"
    ],
    day_stand_alone_abbreviated => [
      "ma",
      "di",
      "wo",
      "do",
      "vr",
      "za",
      "zo"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_stand_alone_wide => [
      "maandag",
      "dinsdag",
      "woensdag",
      "donderdag",
      "vrijdag",
      "zaterdag",
      "zondag"
    ],
    era_abbreviated => [
      "v.Chr.",
      "n.Chr."
    ],
    era_narrow => [
      "v.C.",
      "n.C."
    ],
    era_wide => [
      "voor Christus",
      "na Christus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d-%m-%y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Dutch",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mei",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januari",
      "februari",
      "maart",
      "april",
      "mei",
      "juni",
      "juli",
      "augustus",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mei",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januari",
      "februari",
      "maart",
      "april",
      "mei",
      "juni",
      "juli",
      "augustus",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Dutch Netherlands",
    native_language => "Nederlands",
    native_name => "Nederlands Nederland",
    native_script => undef,
    native_territory => "Nederland",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    script => undef,
    territory => "Netherlands",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ nl-SR ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E d-M-y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d-M-y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nl-SR",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd-MM-yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ma",
      "di",
      "wo",
      "do",
      "vr",
      "za",
      "zo"
    ],
    day_format_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_format_wide => [
      "maandag",
      "dinsdag",
      "woensdag",
      "donderdag",
      "vrijdag",
      "zaterdag",
      "zondag"
    ],
    day_stand_alone_abbreviated => [
      "ma",
      "di",
      "wo",
      "do",
      "vr",
      "za",
      "zo"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_stand_alone_wide => [
      "maandag",
      "dinsdag",
      "woensdag",
      "donderdag",
      "vrijdag",
      "zaterdag",
      "zondag"
    ],
    era_abbreviated => [
      "v.Chr.",
      "n.Chr."
    ],
    era_narrow => [
      "v.C.",
      "n.C."
    ],
    era_wide => [
      "voor Christus",
      "na Christus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Dutch",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mei",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januari",
      "februari",
      "maart",
      "april",
      "mei",
      "juni",
      "juli",
      "augustus",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mei",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januari",
      "februari",
      "maart",
      "april",
      "mei",
      "juni",
      "juli",
      "augustus",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Dutch Suriname",
    native_language => "Nederlands",
    native_name => "Nederlands Suriname",
    native_script => undef,
    native_territory => "Suriname",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    script => undef,
    territory => "Suriname",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ nl-SX ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d-M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M-y",
      yMEd => "E d-M-y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d-M-y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nl-SX",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd-MM-yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ma",
      "di",
      "wo",
      "do",
      "vr",
      "za",
      "zo"
    ],
    day_format_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_format_wide => [
      "maandag",
      "dinsdag",
      "woensdag",
      "donderdag",
      "vrijdag",
      "zaterdag",
      "zondag"
    ],
    day_stand_alone_abbreviated => [
      "ma",
      "di",
      "wo",
      "do",
      "vr",
      "za",
      "zo"
    ],
    day_stand_alone_narrow => [
      "M",
      "D",
      "W",
      "D",
      "V",
      "Z",
      "Z"
    ],
    day_stand_alone_wide => [
      "maandag",
      "dinsdag",
      "woensdag",
      "donderdag",
      "vrijdag",
      "zaterdag",
      "zondag"
    ],
    era_abbreviated => [
      "v.Chr.",
      "n.Chr."
    ],
    era_narrow => [
      "v.C.",
      "n.C."
    ],
    era_wide => [
      "voor Christus",
      "na Christus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Dutch",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mei",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januari",
      "februari",
      "maart",
      "april",
      "mei",
      "juni",
      "juli",
      "augustus",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "feb.",
      "mrt.",
      "apr.",
      "mei",
      "jun.",
      "jul.",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januari",
      "februari",
      "maart",
      "april",
      "mei",
      "juni",
      "juli",
      "augustus",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Dutch Sint Maarten",
    native_language => "Nederlands",
    native_name => "Nederlands Sint-Maarten",
    native_script => undef,
    native_territory => "Sint-Maarten",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1e kwartaal",
      "2e kwartaal",
      "3e kwartaal",
      "4e kwartaal"
    ],
    script => undef,
    territory => "Sint Maarten",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ nmg ]__
  {
    am_pm_abbreviated => [
      "man\N{U+00e1}",
      "kug\N{U+00fa}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nmg",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "m\N{U+0254}\N{U+0301}n",
      "smb",
      "sml",
      "smn",
      "mbs",
      "sas",
      "s\N{U+0254}\N{U+0301}n"
    ],
    day_format_narrow => [
      "m",
      "s",
      "s",
      "s",
      "m",
      "s",
      "s"
    ],
    day_format_wide => [
      "m\N{U+0254}\N{U+0301}nd\N{U+0254}",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} maf\N{U+00fa} m\N{U+00e1}ba",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} maf\N{U+00fa} m\N{U+00e1}lal",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} maf\N{U+00fa} m\N{U+00e1}na",
      "mab\N{U+00e1}g\N{U+00e1} m\N{U+00e1} sukul",
      "s\N{U+00e1}sadi",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254}"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+0254}\N{U+0301}n",
      "smb",
      "sml",
      "smn",
      "mbs",
      "sas",
      "s\N{U+0254}\N{U+0301}n"
    ],
    day_stand_alone_narrow => [
      "m",
      "s",
      "s",
      "s",
      "m",
      "s",
      "s"
    ],
    day_stand_alone_wide => [
      "m\N{U+0254}\N{U+0301}nd\N{U+0254}",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} maf\N{U+00fa} m\N{U+00e1}ba",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} maf\N{U+00fa} m\N{U+00e1}lal",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} maf\N{U+00fa} m\N{U+00e1}na",
      "mab\N{U+00e1}g\N{U+00e1} m\N{U+00e1} sukul",
      "s\N{U+00e1}sadi",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254}"
    ],
    era_abbreviated => [
      "BL",
      "PB"
    ],
    era_narrow => [
      "BL",
      "PB"
    ],
    era_wide => [
      "B\N{U+00f3} Lahl\N{U+025b}\N{U+0304}",
      "Pfi\N{U+025b} Bur\N{U+012b}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kwasio",
    month_format_abbreviated => [
      "ng1",
      "ng2",
      "ng3",
      "ng4",
      "ng5",
      "ng6",
      "ng7",
      "ng8",
      "ng9",
      "ng10",
      "ng11",
      "kris"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "ngw\N{U+025b}n mat\N{U+00e1}hra",
      "ngw\N{U+025b}n \N{U+0144}mba",
      "ngw\N{U+025b}n \N{U+0144}lal",
      "ngw\N{U+025b}n \N{U+0144}na",
      "ngw\N{U+025b}n \N{U+0144}tan",
      "ngw\N{U+025b}n \N{U+0144}tu\N{U+00f3}",
      "ngw\N{U+025b}n h\N{U+025b}mbu\N{U+025b}r\N{U+00ed}",
      "ngw\N{U+025b}n l\N{U+0254}mbi",
      "ngw\N{U+025b}n r\N{U+025b}bvu\N{U+00e2}",
      "ngw\N{U+025b}n wum",
      "ngw\N{U+025b}n wum nav\N{U+01d4}r",
      "kr\N{U+00ed}simin"
    ],
    month_stand_alone_abbreviated => [
      "ng1",
      "ng2",
      "ng3",
      "ng4",
      "ng5",
      "ng6",
      "ng7",
      "ng8",
      "ng9",
      "ng10",
      "ng11",
      "kris"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "ngw\N{U+025b}n mat\N{U+00e1}hra",
      "ngw\N{U+025b}n \N{U+0144}mba",
      "ngw\N{U+025b}n \N{U+0144}lal",
      "ngw\N{U+025b}n \N{U+0144}na",
      "ngw\N{U+025b}n \N{U+0144}tan",
      "ngw\N{U+025b}n \N{U+0144}tu\N{U+00f3}",
      "ngw\N{U+025b}n h\N{U+025b}mbu\N{U+025b}r\N{U+00ed}",
      "ngw\N{U+025b}n l\N{U+0254}mbi",
      "ngw\N{U+025b}n r\N{U+025b}bvu\N{U+00e2}",
      "ngw\N{U+025b}n wum",
      "ngw\N{U+025b}n wum nav\N{U+01d4}r",
      "kr\N{U+00ed}simin"
    ],
    name => "Kwasio",
    native_language => "nmg",
    native_name => "nmg",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Tind\N{U+025b} nv\N{U+00fa}r",
      "Tind\N{U+025b} \N{U+0144}mba",
      "Tind\N{U+025b} \N{U+0144}lal",
      "Tind\N{U+025b} \N{U+0144}na"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Tind\N{U+025b} nv\N{U+00fa}r",
      "Tind\N{U+025b} \N{U+0144}mba",
      "Tind\N{U+025b} \N{U+0144}lal",
      "Tind\N{U+025b} \N{U+0144}na"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ nmg-CM ]__
  {
    am_pm_abbreviated => [
      "man\N{U+00e1}",
      "kug\N{U+00fa}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nmg-CM",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "m\N{U+0254}\N{U+0301}n",
      "smb",
      "sml",
      "smn",
      "mbs",
      "sas",
      "s\N{U+0254}\N{U+0301}n"
    ],
    day_format_narrow => [
      "m",
      "s",
      "s",
      "s",
      "m",
      "s",
      "s"
    ],
    day_format_wide => [
      "m\N{U+0254}\N{U+0301}nd\N{U+0254}",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} maf\N{U+00fa} m\N{U+00e1}ba",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} maf\N{U+00fa} m\N{U+00e1}lal",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} maf\N{U+00fa} m\N{U+00e1}na",
      "mab\N{U+00e1}g\N{U+00e1} m\N{U+00e1} sukul",
      "s\N{U+00e1}sadi",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254}"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+0254}\N{U+0301}n",
      "smb",
      "sml",
      "smn",
      "mbs",
      "sas",
      "s\N{U+0254}\N{U+0301}n"
    ],
    day_stand_alone_narrow => [
      "m",
      "s",
      "s",
      "s",
      "m",
      "s",
      "s"
    ],
    day_stand_alone_wide => [
      "m\N{U+0254}\N{U+0301}nd\N{U+0254}",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} maf\N{U+00fa} m\N{U+00e1}ba",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} maf\N{U+00fa} m\N{U+00e1}lal",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254} maf\N{U+00fa} m\N{U+00e1}na",
      "mab\N{U+00e1}g\N{U+00e1} m\N{U+00e1} sukul",
      "s\N{U+00e1}sadi",
      "s\N{U+0254}\N{U+0301}nd\N{U+0254}"
    ],
    era_abbreviated => [
      "BL",
      "PB"
    ],
    era_narrow => [
      "BL",
      "PB"
    ],
    era_wide => [
      "B\N{U+00f3} Lahl\N{U+025b}\N{U+0304}",
      "Pfi\N{U+025b} Bur\N{U+012b}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kwasio",
    month_format_abbreviated => [
      "ng1",
      "ng2",
      "ng3",
      "ng4",
      "ng5",
      "ng6",
      "ng7",
      "ng8",
      "ng9",
      "ng10",
      "ng11",
      "kris"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "ngw\N{U+025b}n mat\N{U+00e1}hra",
      "ngw\N{U+025b}n \N{U+0144}mba",
      "ngw\N{U+025b}n \N{U+0144}lal",
      "ngw\N{U+025b}n \N{U+0144}na",
      "ngw\N{U+025b}n \N{U+0144}tan",
      "ngw\N{U+025b}n \N{U+0144}tu\N{U+00f3}",
      "ngw\N{U+025b}n h\N{U+025b}mbu\N{U+025b}r\N{U+00ed}",
      "ngw\N{U+025b}n l\N{U+0254}mbi",
      "ngw\N{U+025b}n r\N{U+025b}bvu\N{U+00e2}",
      "ngw\N{U+025b}n wum",
      "ngw\N{U+025b}n wum nav\N{U+01d4}r",
      "kr\N{U+00ed}simin"
    ],
    month_stand_alone_abbreviated => [
      "ng1",
      "ng2",
      "ng3",
      "ng4",
      "ng5",
      "ng6",
      "ng7",
      "ng8",
      "ng9",
      "ng10",
      "ng11",
      "kris"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "ngw\N{U+025b}n mat\N{U+00e1}hra",
      "ngw\N{U+025b}n \N{U+0144}mba",
      "ngw\N{U+025b}n \N{U+0144}lal",
      "ngw\N{U+025b}n \N{U+0144}na",
      "ngw\N{U+025b}n \N{U+0144}tan",
      "ngw\N{U+025b}n \N{U+0144}tu\N{U+00f3}",
      "ngw\N{U+025b}n h\N{U+025b}mbu\N{U+025b}r\N{U+00ed}",
      "ngw\N{U+025b}n l\N{U+0254}mbi",
      "ngw\N{U+025b}n r\N{U+025b}bvu\N{U+00e2}",
      "ngw\N{U+025b}n wum",
      "ngw\N{U+025b}n wum nav\N{U+01d4}r",
      "kr\N{U+00ed}simin"
    ],
    name => "Kwasio Cameroon",
    native_language => "nmg",
    native_name => "nmg Kamerun",
    native_script => undef,
    native_territory => "Kamerun",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Tind\N{U+025b} nv\N{U+00fa}r",
      "Tind\N{U+025b} \N{U+0144}mba",
      "Tind\N{U+025b} \N{U+0144}lal",
      "Tind\N{U+025b} \N{U+0144}na"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Tind\N{U+025b} nv\N{U+00fa}r",
      "Tind\N{U+025b} \N{U+0144}mba",
      "Tind\N{U+025b} \N{U+0144}lal",
      "Tind\N{U+025b} \N{U+0144}na"
    ],
    script => undef,
    territory => "Cameroon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ nn ]__
  {
    am_pm_abbreviated => [
      "f.m.",
      "e.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d.M",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMdd => "d.M.",
      Md => "d.M.",
      d => "d.",
      h => "h a",
      hm => "h.mm a",
      hms => "h.mm.ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm.ss",
      y => "y",
      yM => "M y",
      yMEd => "E d.M.y",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nn",
    date_format_full => "EEEE d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "dd.MM.y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} 'kl'. {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "m\N{U+00e5}.",
      "ty.",
      "on.",
      "to.",
      "fr.",
      "la.",
      "s\N{U+00f8}."
    ],
    day_format_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "m\N{U+00e5}ndag",
      "tysdag",
      "onsdag",
      "torsdag",
      "fredag",
      "laurdag",
      "s\N{U+00f8}ndag"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+00e5}.",
      "ty.",
      "on.",
      "to.",
      "fr.",
      "la.",
      "s\N{U+00f8}."
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "m\N{U+00e5}ndag",
      "tysdag",
      "onsdag",
      "torsdag",
      "fredag",
      "laurdag",
      "s\N{U+00f8}ndag"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "f.Kr.",
      "e.Kr."
    ],
    era_wide => [
      "f.Kr.",
      "e.Kr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Norwegian Nynorsk",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mars",
      "apr.",
      "mai",
      "juni",
      "juli",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "des."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "mars",
      "april",
      "mai",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "desember"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "feb.",
      "mars",
      "apr.",
      "mai",
      "juni",
      "juli",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "des."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "mars",
      "april",
      "mai",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "desember"
    ],
    name => "Norwegian Nynorsk",
    native_language => "nynorsk",
    native_name => "nynorsk",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "'kl'. HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ nn-NO ]__
  {
    am_pm_abbreviated => [
      "f.m.",
      "e.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d.M",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMdd => "d.M.",
      Md => "d.M.",
      d => "d.",
      h => "h a",
      hm => "h.mm a",
      hms => "h.mm.ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm.ss",
      y => "y",
      yM => "M y",
      yMEd => "E d.M.y",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nn-NO",
    date_format_full => "EEEE d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "dd.MM.y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} 'kl'. {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "m\N{U+00e5}.",
      "ty.",
      "on.",
      "to.",
      "fr.",
      "la.",
      "s\N{U+00f8}."
    ],
    day_format_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "m\N{U+00e5}ndag",
      "tysdag",
      "onsdag",
      "torsdag",
      "fredag",
      "laurdag",
      "s\N{U+00f8}ndag"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+00e5}.",
      "ty.",
      "on.",
      "to.",
      "fr.",
      "la.",
      "s\N{U+00f8}."
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "m\N{U+00e5}ndag",
      "tysdag",
      "onsdag",
      "torsdag",
      "fredag",
      "laurdag",
      "s\N{U+00f8}ndag"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "f.Kr.",
      "e.Kr."
    ],
    era_wide => [
      "f.Kr.",
      "e.Kr."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %d. %b %H:%M:%S %z %Y",
    glibc_date_format => "%d. %b %Y",
    glibc_datetime_format => "%a %d. %b %Y kl. %H.%M %z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "kl. %H.%M %z",
    language => "Norwegian Nynorsk",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mars",
      "apr.",
      "mai",
      "juni",
      "juli",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "des."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "mars",
      "april",
      "mai",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "desember"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "feb.",
      "mars",
      "apr.",
      "mai",
      "juni",
      "juli",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "des."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "mars",
      "april",
      "mai",
      "juni",
      "juli",
      "august",
      "september",
      "oktober",
      "november",
      "desember"
    ],
    name => "Norwegian Nynorsk Norway",
    native_language => "nynorsk",
    native_name => "nynorsk Noreg",
    native_script => undef,
    native_territory => "Noreg",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. kvartal",
      "2. kvartal",
      "3. kvartal",
      "4. kvartal"
    ],
    script => undef,
    territory => "Norway",
    time_format_full => "'kl'. HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ nnh ]__
  {
    am_pm_abbreviated => [
      "mba\N{U+02bc}\N{U+00e1}mba\N{U+02bc}",
      "ncw\N{U+00f2}nz\N{U+00e9}m"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "E , 'ly\N{U+025b}'\N{U+030c}\N{U+02bc} d 'na' M, y",
      yMMM => "MMM y",
      yMMMEd => "E , 'ly\N{U+025b}'\N{U+030c}\N{U+02bc} d 'na' MMM, y",
      yMMMM => "y MMMM",
      yMMMd => "'ly\N{U+025b}'\N{U+030c}\N{U+02bc} d 'na' MMMM, y",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "nnh",
    date_format_full => "EEEE , 'ly\N{U+025b}'\N{U+030c}\N{U+02bc} d 'na' MMMM, y",
    date_format_long => "'ly\N{U+025b}'\N{U+030c}\N{U+02bc} d 'na' MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1},{0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "mvf\N{U+00f2} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mb\N{U+0254}\N{U+0301}\N{U+0254}nt\N{U+00e8} mvf\N{U+00f2} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "ts\N{U+00e8}ts\N{U+025b}\N{U+0300}\N{U+025b} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mb\N{U+0254}\N{U+0301}\N{U+0254}nt\N{U+00e8} tsets\N{U+025b}\N{U+0300}\N{U+025b} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mvf\N{U+00f2} m\N{U+00e0}ga ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "m\N{U+00e0}ga ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "ly\N{U+025b}\N{U+02bc}\N{U+025b}\N{U+0301} s\N{U+1e85}\N{U+00ed}\N{U+014b}t\N{U+00e8}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "mvf\N{U+00f2} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mb\N{U+0254}\N{U+0301}\N{U+0254}nt\N{U+00e8} mvf\N{U+00f2} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "ts\N{U+00e8}ts\N{U+025b}\N{U+0300}\N{U+025b} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mb\N{U+0254}\N{U+0301}\N{U+0254}nt\N{U+00e8} tsets\N{U+025b}\N{U+0300}\N{U+025b} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mvf\N{U+00f2} m\N{U+00e0}ga ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "m\N{U+00e0}ga ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "ly\N{U+025b}\N{U+02bc}\N{U+025b}\N{U+0301} s\N{U+1e85}\N{U+00ed}\N{U+014b}t\N{U+00e8}"
    ],
    day_stand_alone_abbreviated => [
      "mvf\N{U+00f2} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mb\N{U+0254}\N{U+0301}\N{U+0254}nt\N{U+00e8} mvf\N{U+00f2} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "ts\N{U+00e8}ts\N{U+025b}\N{U+0300}\N{U+025b} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mb\N{U+0254}\N{U+0301}\N{U+0254}nt\N{U+00e8} tsets\N{U+025b}\N{U+0300}\N{U+025b} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mvf\N{U+00f2} m\N{U+00e0}ga ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "m\N{U+00e0}ga ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "ly\N{U+025b}\N{U+02bc}\N{U+025b}\N{U+0301} s\N{U+1e85}\N{U+00ed}\N{U+014b}t\N{U+00e8}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "mvf\N{U+00f2} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mb\N{U+0254}\N{U+0301}\N{U+0254}nt\N{U+00e8} mvf\N{U+00f2} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "ts\N{U+00e8}ts\N{U+025b}\N{U+0300}\N{U+025b} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mb\N{U+0254}\N{U+0301}\N{U+0254}nt\N{U+00e8} tsets\N{U+025b}\N{U+0300}\N{U+025b} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mvf\N{U+00f2} m\N{U+00e0}ga ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "m\N{U+00e0}ga ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "ly\N{U+025b}\N{U+02bc}\N{U+025b}\N{U+0301} s\N{U+1e85}\N{U+00ed}\N{U+014b}t\N{U+00e8}"
    ],
    era_abbreviated => [
      "m.z.Y.",
      "m.g.n.Y."
    ],
    era_narrow => [
      "m.z.Y.",
      "m.g.n.Y."
    ],
    era_wide => [
      "m\N{U+00e9} zy\N{U+00e9} Y\N{U+011b}s\N{U+00f4}",
      "m\N{U+00e9} g\N{U+00ff}o \N{U+0144}zy\N{U+00e9} Y\N{U+011b}s\N{U+00f4}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Ngiemboon",
    month_format_abbreviated => [
      "sa\N{U+014b} tsets\N{U+025b}\N{U+0300}\N{U+025b} l\N{U+00f9}m",
      "sa\N{U+014b} k\N{U+00e0}g ngw\N{U+00f3}\N{U+014b}",
      "sa\N{U+014b} lepy\N{U+00e8} sh\N{U+00fa}m",
      "sa\N{U+014b} c\N{U+00ff}\N{U+00f3}",
      "sa\N{U+014b} ts\N{U+025b}\N{U+0300}\N{U+025b} c\N{U+00ff}\N{U+00f3}",
      "sa\N{U+014b} nj\N{U+00ff}ol\N{U+00e1}\N{U+02bc}",
      "sa\N{U+014b} ty\N{U+025b}\N{U+0300}b ty\N{U+025b}\N{U+0300}b mb\N{U+0289}\N{U+0300}\N{U+014b}",
      "sa\N{U+014b} mb\N{U+0289}\N{U+0300}\N{U+014b}",
      "sa\N{U+014b} ngw\N{U+0254}\N{U+0300}\N{U+02bc} mb\N{U+00ff}\N{U+025b}",
      "sa\N{U+014b} t\N{U+00e0}\N{U+014b}a tsets\N{U+00e1}\N{U+02bc}",
      "sa\N{U+014b} mejwo\N{U+014b}\N{U+00f3}",
      "sa\N{U+014b} l\N{U+00f9}m"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "sa\N{U+014b} tsets\N{U+025b}\N{U+0300}\N{U+025b} l\N{U+00f9}m",
      "sa\N{U+014b} k\N{U+00e0}g ngw\N{U+00f3}\N{U+014b}",
      "sa\N{U+014b} lepy\N{U+00e8} sh\N{U+00fa}m",
      "sa\N{U+014b} c\N{U+00ff}\N{U+00f3}",
      "sa\N{U+014b} ts\N{U+025b}\N{U+0300}\N{U+025b} c\N{U+00ff}\N{U+00f3}",
      "sa\N{U+014b} nj\N{U+00ff}ol\N{U+00e1}\N{U+02bc}",
      "sa\N{U+014b} ty\N{U+025b}\N{U+0300}b ty\N{U+025b}\N{U+0300}b mb\N{U+0289}\N{U+0300}\N{U+014b}",
      "sa\N{U+014b} mb\N{U+0289}\N{U+0300}\N{U+014b}",
      "sa\N{U+014b} ngw\N{U+0254}\N{U+0300}\N{U+02bc} mb\N{U+00ff}\N{U+025b}",
      "sa\N{U+014b} t\N{U+00e0}\N{U+014b}a tsets\N{U+00e1}\N{U+02bc}",
      "sa\N{U+014b} mejwo\N{U+014b}\N{U+00f3}",
      "sa\N{U+014b} l\N{U+00f9}m"
    ],
    month_stand_alone_abbreviated => [
      "sa\N{U+014b} tsets\N{U+025b}\N{U+0300}\N{U+025b} l\N{U+00f9}m",
      "sa\N{U+014b} k\N{U+00e0}g ngw\N{U+00f3}\N{U+014b}",
      "sa\N{U+014b} lepy\N{U+00e8} sh\N{U+00fa}m",
      "sa\N{U+014b} c\N{U+00ff}\N{U+00f3}",
      "sa\N{U+014b} ts\N{U+025b}\N{U+0300}\N{U+025b} c\N{U+00ff}\N{U+00f3}",
      "sa\N{U+014b} nj\N{U+00ff}ol\N{U+00e1}\N{U+02bc}",
      "sa\N{U+014b} ty\N{U+025b}\N{U+0300}b ty\N{U+025b}\N{U+0300}b mb\N{U+0289}\N{U+0300}\N{U+014b}",
      "sa\N{U+014b} mb\N{U+0289}\N{U+0300}\N{U+014b}",
      "sa\N{U+014b} ngw\N{U+0254}\N{U+0300}\N{U+02bc} mb\N{U+00ff}\N{U+025b}",
      "sa\N{U+014b} t\N{U+00e0}\N{U+014b}a tsets\N{U+00e1}\N{U+02bc}",
      "sa\N{U+014b} mejwo\N{U+014b}\N{U+00f3}",
      "sa\N{U+014b} l\N{U+00f9}m"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "sa\N{U+014b} tsets\N{U+025b}\N{U+0300}\N{U+025b} l\N{U+00f9}m",
      "sa\N{U+014b} k\N{U+00e0}g ngw\N{U+00f3}\N{U+014b}",
      "sa\N{U+014b} lepy\N{U+00e8} sh\N{U+00fa}m",
      "sa\N{U+014b} c\N{U+00ff}\N{U+00f3}",
      "sa\N{U+014b} ts\N{U+025b}\N{U+0300}\N{U+025b} c\N{U+00ff}\N{U+00f3}",
      "sa\N{U+014b} nj\N{U+00ff}ol\N{U+00e1}\N{U+02bc}",
      "sa\N{U+014b} ty\N{U+025b}\N{U+0300}b ty\N{U+025b}\N{U+0300}b mb\N{U+0289}\N{U+0300}\N{U+014b}",
      "sa\N{U+014b} mb\N{U+0289}\N{U+0300}\N{U+014b}",
      "sa\N{U+014b} ngw\N{U+0254}\N{U+0300}\N{U+02bc} mb\N{U+00ff}\N{U+025b}",
      "sa\N{U+014b} t\N{U+00e0}\N{U+014b}a tsets\N{U+00e1}\N{U+02bc}",
      "sa\N{U+014b} mejwo\N{U+014b}\N{U+00f3}",
      "sa\N{U+014b} l\N{U+00f9}m"
    ],
    name => "Ngiemboon",
    native_language => "Shw\N{U+00f3}\N{U+014b}\N{U+00f2} ngiemb\N{U+0254}\N{U+0254}n",
    native_name => "Shw\N{U+00f3}\N{U+014b}\N{U+00f2} ngiemb\N{U+0254}\N{U+0254}n",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ nnh-CM ]__
  {
    am_pm_abbreviated => [
      "mba\N{U+02bc}\N{U+00e1}mba\N{U+02bc}",
      "ncw\N{U+00f2}nz\N{U+00e9}m"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "E , 'ly\N{U+025b}'\N{U+030c}\N{U+02bc} d 'na' M, y",
      yMMM => "MMM y",
      yMMMEd => "E , 'ly\N{U+025b}'\N{U+030c}\N{U+02bc} d 'na' MMM, y",
      yMMMM => "y MMMM",
      yMMMd => "'ly\N{U+025b}'\N{U+030c}\N{U+02bc} d 'na' MMMM, y",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "nnh-CM",
    date_format_full => "EEEE , 'ly\N{U+025b}'\N{U+030c}\N{U+02bc} d 'na' MMMM, y",
    date_format_long => "'ly\N{U+025b}'\N{U+030c}\N{U+02bc} d 'na' MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1},{0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "mvf\N{U+00f2} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mb\N{U+0254}\N{U+0301}\N{U+0254}nt\N{U+00e8} mvf\N{U+00f2} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "ts\N{U+00e8}ts\N{U+025b}\N{U+0300}\N{U+025b} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mb\N{U+0254}\N{U+0301}\N{U+0254}nt\N{U+00e8} tsets\N{U+025b}\N{U+0300}\N{U+025b} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mvf\N{U+00f2} m\N{U+00e0}ga ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "m\N{U+00e0}ga ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "ly\N{U+025b}\N{U+02bc}\N{U+025b}\N{U+0301} s\N{U+1e85}\N{U+00ed}\N{U+014b}t\N{U+00e8}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "mvf\N{U+00f2} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mb\N{U+0254}\N{U+0301}\N{U+0254}nt\N{U+00e8} mvf\N{U+00f2} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "ts\N{U+00e8}ts\N{U+025b}\N{U+0300}\N{U+025b} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mb\N{U+0254}\N{U+0301}\N{U+0254}nt\N{U+00e8} tsets\N{U+025b}\N{U+0300}\N{U+025b} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mvf\N{U+00f2} m\N{U+00e0}ga ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "m\N{U+00e0}ga ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "ly\N{U+025b}\N{U+02bc}\N{U+025b}\N{U+0301} s\N{U+1e85}\N{U+00ed}\N{U+014b}t\N{U+00e8}"
    ],
    day_stand_alone_abbreviated => [
      "mvf\N{U+00f2} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mb\N{U+0254}\N{U+0301}\N{U+0254}nt\N{U+00e8} mvf\N{U+00f2} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "ts\N{U+00e8}ts\N{U+025b}\N{U+0300}\N{U+025b} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mb\N{U+0254}\N{U+0301}\N{U+0254}nt\N{U+00e8} tsets\N{U+025b}\N{U+0300}\N{U+025b} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mvf\N{U+00f2} m\N{U+00e0}ga ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "m\N{U+00e0}ga ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "ly\N{U+025b}\N{U+02bc}\N{U+025b}\N{U+0301} s\N{U+1e85}\N{U+00ed}\N{U+014b}t\N{U+00e8}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "mvf\N{U+00f2} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mb\N{U+0254}\N{U+0301}\N{U+0254}nt\N{U+00e8} mvf\N{U+00f2} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "ts\N{U+00e8}ts\N{U+025b}\N{U+0300}\N{U+025b} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mb\N{U+0254}\N{U+0301}\N{U+0254}nt\N{U+00e8} tsets\N{U+025b}\N{U+0300}\N{U+025b} ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "mvf\N{U+00f2} m\N{U+00e0}ga ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "m\N{U+00e0}ga ly\N{U+025b}\N{U+030c}\N{U+02bc}",
      "ly\N{U+025b}\N{U+02bc}\N{U+025b}\N{U+0301} s\N{U+1e85}\N{U+00ed}\N{U+014b}t\N{U+00e8}"
    ],
    era_abbreviated => [
      "m.z.Y.",
      "m.g.n.Y."
    ],
    era_narrow => [
      "m.z.Y.",
      "m.g.n.Y."
    ],
    era_wide => [
      "m\N{U+00e9} zy\N{U+00e9} Y\N{U+011b}s\N{U+00f4}",
      "m\N{U+00e9} g\N{U+00ff}o \N{U+0144}zy\N{U+00e9} Y\N{U+011b}s\N{U+00f4}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Ngiemboon",
    month_format_abbreviated => [
      "sa\N{U+014b} tsets\N{U+025b}\N{U+0300}\N{U+025b} l\N{U+00f9}m",
      "sa\N{U+014b} k\N{U+00e0}g ngw\N{U+00f3}\N{U+014b}",
      "sa\N{U+014b} lepy\N{U+00e8} sh\N{U+00fa}m",
      "sa\N{U+014b} c\N{U+00ff}\N{U+00f3}",
      "sa\N{U+014b} ts\N{U+025b}\N{U+0300}\N{U+025b} c\N{U+00ff}\N{U+00f3}",
      "sa\N{U+014b} nj\N{U+00ff}ol\N{U+00e1}\N{U+02bc}",
      "sa\N{U+014b} ty\N{U+025b}\N{U+0300}b ty\N{U+025b}\N{U+0300}b mb\N{U+0289}\N{U+0300}\N{U+014b}",
      "sa\N{U+014b} mb\N{U+0289}\N{U+0300}\N{U+014b}",
      "sa\N{U+014b} ngw\N{U+0254}\N{U+0300}\N{U+02bc} mb\N{U+00ff}\N{U+025b}",
      "sa\N{U+014b} t\N{U+00e0}\N{U+014b}a tsets\N{U+00e1}\N{U+02bc}",
      "sa\N{U+014b} mejwo\N{U+014b}\N{U+00f3}",
      "sa\N{U+014b} l\N{U+00f9}m"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "sa\N{U+014b} tsets\N{U+025b}\N{U+0300}\N{U+025b} l\N{U+00f9}m",
      "sa\N{U+014b} k\N{U+00e0}g ngw\N{U+00f3}\N{U+014b}",
      "sa\N{U+014b} lepy\N{U+00e8} sh\N{U+00fa}m",
      "sa\N{U+014b} c\N{U+00ff}\N{U+00f3}",
      "sa\N{U+014b} ts\N{U+025b}\N{U+0300}\N{U+025b} c\N{U+00ff}\N{U+00f3}",
      "sa\N{U+014b} nj\N{U+00ff}ol\N{U+00e1}\N{U+02bc}",
      "sa\N{U+014b} ty\N{U+025b}\N{U+0300}b ty\N{U+025b}\N{U+0300}b mb\N{U+0289}\N{U+0300}\N{U+014b}",
      "sa\N{U+014b} mb\N{U+0289}\N{U+0300}\N{U+014b}",
      "sa\N{U+014b} ngw\N{U+0254}\N{U+0300}\N{U+02bc} mb\N{U+00ff}\N{U+025b}",
      "sa\N{U+014b} t\N{U+00e0}\N{U+014b}a tsets\N{U+00e1}\N{U+02bc}",
      "sa\N{U+014b} mejwo\N{U+014b}\N{U+00f3}",
      "sa\N{U+014b} l\N{U+00f9}m"
    ],
    month_stand_alone_abbreviated => [
      "sa\N{U+014b} tsets\N{U+025b}\N{U+0300}\N{U+025b} l\N{U+00f9}m",
      "sa\N{U+014b} k\N{U+00e0}g ngw\N{U+00f3}\N{U+014b}",
      "sa\N{U+014b} lepy\N{U+00e8} sh\N{U+00fa}m",
      "sa\N{U+014b} c\N{U+00ff}\N{U+00f3}",
      "sa\N{U+014b} ts\N{U+025b}\N{U+0300}\N{U+025b} c\N{U+00ff}\N{U+00f3}",
      "sa\N{U+014b} nj\N{U+00ff}ol\N{U+00e1}\N{U+02bc}",
      "sa\N{U+014b} ty\N{U+025b}\N{U+0300}b ty\N{U+025b}\N{U+0300}b mb\N{U+0289}\N{U+0300}\N{U+014b}",
      "sa\N{U+014b} mb\N{U+0289}\N{U+0300}\N{U+014b}",
      "sa\N{U+014b} ngw\N{U+0254}\N{U+0300}\N{U+02bc} mb\N{U+00ff}\N{U+025b}",
      "sa\N{U+014b} t\N{U+00e0}\N{U+014b}a tsets\N{U+00e1}\N{U+02bc}",
      "sa\N{U+014b} mejwo\N{U+014b}\N{U+00f3}",
      "sa\N{U+014b} l\N{U+00f9}m"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "sa\N{U+014b} tsets\N{U+025b}\N{U+0300}\N{U+025b} l\N{U+00f9}m",
      "sa\N{U+014b} k\N{U+00e0}g ngw\N{U+00f3}\N{U+014b}",
      "sa\N{U+014b} lepy\N{U+00e8} sh\N{U+00fa}m",
      "sa\N{U+014b} c\N{U+00ff}\N{U+00f3}",
      "sa\N{U+014b} ts\N{U+025b}\N{U+0300}\N{U+025b} c\N{U+00ff}\N{U+00f3}",
      "sa\N{U+014b} nj\N{U+00ff}ol\N{U+00e1}\N{U+02bc}",
      "sa\N{U+014b} ty\N{U+025b}\N{U+0300}b ty\N{U+025b}\N{U+0300}b mb\N{U+0289}\N{U+0300}\N{U+014b}",
      "sa\N{U+014b} mb\N{U+0289}\N{U+0300}\N{U+014b}",
      "sa\N{U+014b} ngw\N{U+0254}\N{U+0300}\N{U+02bc} mb\N{U+00ff}\N{U+025b}",
      "sa\N{U+014b} t\N{U+00e0}\N{U+014b}a tsets\N{U+00e1}\N{U+02bc}",
      "sa\N{U+014b} mejwo\N{U+014b}\N{U+00f3}",
      "sa\N{U+014b} l\N{U+00f9}m"
    ],
    name => "Ngiemboon Cameroon",
    native_language => "Shw\N{U+00f3}\N{U+014b}\N{U+00f2} ngiemb\N{U+0254}\N{U+0254}n",
    native_name => "Shw\N{U+00f3}\N{U+014b}\N{U+00f2} ngiemb\N{U+0254}\N{U+0254}n K\N{U+00e0}mal\N{U+00fb}m",
    native_script => undef,
    native_territory => "K\N{U+00e0}mal\N{U+00fb}m",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Cameroon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ nus ]__
  {
    am_pm_abbreviated => [
      "RW",
      "T\N{U+014a}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E\N{U+060c} d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nus",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jiec",
      "R\N{U+025b}w",
      "Di\N{U+0254}\N{U+0331}k",
      "\N{U+014a}uaan",
      "Dhieec",
      "B\N{U+00e4}k\N{U+025b}l",
      "C\N{U+00e4}\N{U+014b}"
    ],
    day_format_narrow => [
      "J",
      "R",
      "D",
      "\N{U+014a}",
      "D",
      "B",
      "C"
    ],
    day_format_wide => [
      "Jiec la\N{U+0331}t",
      "R\N{U+025b}w l\N{U+00e4}tni",
      "Di\N{U+0254}\N{U+0331}k l\N{U+00e4}tni",
      "\N{U+014a}uaan l\N{U+00e4}tni",
      "Dhieec l\N{U+00e4}tni",
      "B\N{U+00e4}k\N{U+025b}l l\N{U+00e4}tni",
      "C\N{U+00e4}\N{U+014b} ku\N{U+0254}th"
    ],
    day_stand_alone_abbreviated => [
      "Jiec",
      "R\N{U+025b}w",
      "Di\N{U+0254}\N{U+0331}k",
      "\N{U+014a}uaan",
      "Dhieec",
      "B\N{U+00e4}k\N{U+025b}l",
      "C\N{U+00e4}\N{U+014b}"
    ],
    day_stand_alone_narrow => [
      "J",
      "R",
      "D",
      "\N{U+014a}",
      "D",
      "B",
      "C"
    ],
    day_stand_alone_wide => [
      "Jiec la\N{U+0331}t",
      "R\N{U+025b}w l\N{U+00e4}tni",
      "Di\N{U+0254}\N{U+0331}k l\N{U+00e4}tni",
      "\N{U+014a}uaan l\N{U+00e4}tni",
      "Dhieec l\N{U+00e4}tni",
      "B\N{U+00e4}k\N{U+025b}l l\N{U+00e4}tni",
      "C\N{U+00e4}\N{U+014b} ku\N{U+0254}th"
    ],
    era_abbreviated => [
      "AY",
      "\N{U+0190}Y"
    ],
    era_narrow => [
      "AY",
      "\N{U+0190}Y"
    ],
    era_wide => [
      "A ka\N{U+0331}n Yecu ni dap",
      "\N{U+0190} ca Yecu dap"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Nuer",
    month_format_abbreviated => [
      "Tiop",
      "P\N{U+025b}t",
      "Du\N{U+0254}\N{U+0331}\N{U+0254}\N{U+0331}",
      "Guak",
      "Du\N{U+00e4}",
      "Kor",
      "Pay",
      "Thoo",
      "T\N{U+025b}\N{U+025b}",
      "Laa",
      "Kur",
      "Tid"
    ],
    month_format_narrow => [
      "T",
      "P",
      "D",
      "G",
      "D",
      "K",
      "P",
      "T",
      "T",
      "L",
      "K",
      "T"
    ],
    month_format_wide => [
      "Tiop thar p\N{U+025b}t",
      "P\N{U+025b}t",
      "Du\N{U+0254}\N{U+0331}\N{U+0254}\N{U+0331}\N{U+014b}",
      "Guak",
      "Du\N{U+00e4}t",
      "Kornyoot",
      "Pay yie\N{U+0331}tni",
      "Tho\N{U+0331}o\N{U+0331}r",
      "T\N{U+025b}\N{U+025b}r",
      "Laath",
      "Kur",
      "Tio\N{U+0331}p in di\N{U+0331}i\N{U+0331}t"
    ],
    month_stand_alone_abbreviated => [
      "Tiop",
      "P\N{U+025b}t",
      "Du\N{U+0254}\N{U+0331}\N{U+0254}\N{U+0331}",
      "Guak",
      "Du\N{U+00e4}",
      "Kor",
      "Pay",
      "Thoo",
      "T\N{U+025b}\N{U+025b}",
      "Laa",
      "Kur",
      "Tid"
    ],
    month_stand_alone_narrow => [
      "T",
      "P",
      "D",
      "G",
      "D",
      "K",
      "P",
      "T",
      "T",
      "L",
      "K",
      "T"
    ],
    month_stand_alone_wide => [
      "Tiop thar p\N{U+025b}t",
      "P\N{U+025b}t",
      "Du\N{U+0254}\N{U+0331}\N{U+0254}\N{U+0331}\N{U+014b}",
      "Guak",
      "Du\N{U+00e4}t",
      "Kornyoot",
      "Pay yie\N{U+0331}tni",
      "Tho\N{U+0331}o\N{U+0331}r",
      "T\N{U+025b}\N{U+025b}r",
      "Laath",
      "Kur",
      "Tio\N{U+0331}p in di\N{U+0331}i\N{U+0331}t"
    ],
    name => "Nuer",
    native_language => "Thok Nath",
    native_name => "Thok Nath",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "P1",
      "P2",
      "P3",
      "P4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "P\N{U+00e4}th di\N{U+0254}k tin nhiam",
      "P\N{U+00e4}th di\N{U+0254}k tin guur\N{U+025b}",
      "P\N{U+00e4}th di\N{U+0254}k tin w\N{U+00e4} k\N{U+0254}\N{U+0254}ri\N{U+025b}n",
      "P\N{U+00e4}th di\N{U+0254}k tin ji\N{U+0254}akdi\N{U+025b}n"
    ],
    quarter_stand_alone_abbreviated => [
      "P1",
      "P2",
      "P3",
      "P4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "P\N{U+00e4}th di\N{U+0254}k tin nhiam",
      "P\N{U+00e4}th di\N{U+0254}k tin guur\N{U+025b}",
      "P\N{U+00e4}th di\N{U+0254}k tin w\N{U+00e4} k\N{U+0254}\N{U+0254}ri\N{U+025b}n",
      "P\N{U+00e4}th di\N{U+0254}k tin ji\N{U+0254}akdi\N{U+025b}n"
    ],
    script => undef,
    territory => undef,
    time_format_full => "zzzz h:mm:ss a",
    time_format_long => "z h:mm:ss a",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ nus-SS ]__
  {
    am_pm_abbreviated => [
      "RW",
      "T\N{U+014a}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d-M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E\N{U+060c} d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nus-SS",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jiec",
      "R\N{U+025b}w",
      "Di\N{U+0254}\N{U+0331}k",
      "\N{U+014a}uaan",
      "Dhieec",
      "B\N{U+00e4}k\N{U+025b}l",
      "C\N{U+00e4}\N{U+014b}"
    ],
    day_format_narrow => [
      "J",
      "R",
      "D",
      "\N{U+014a}",
      "D",
      "B",
      "C"
    ],
    day_format_wide => [
      "Jiec la\N{U+0331}t",
      "R\N{U+025b}w l\N{U+00e4}tni",
      "Di\N{U+0254}\N{U+0331}k l\N{U+00e4}tni",
      "\N{U+014a}uaan l\N{U+00e4}tni",
      "Dhieec l\N{U+00e4}tni",
      "B\N{U+00e4}k\N{U+025b}l l\N{U+00e4}tni",
      "C\N{U+00e4}\N{U+014b} ku\N{U+0254}th"
    ],
    day_stand_alone_abbreviated => [
      "Jiec",
      "R\N{U+025b}w",
      "Di\N{U+0254}\N{U+0331}k",
      "\N{U+014a}uaan",
      "Dhieec",
      "B\N{U+00e4}k\N{U+025b}l",
      "C\N{U+00e4}\N{U+014b}"
    ],
    day_stand_alone_narrow => [
      "J",
      "R",
      "D",
      "\N{U+014a}",
      "D",
      "B",
      "C"
    ],
    day_stand_alone_wide => [
      "Jiec la\N{U+0331}t",
      "R\N{U+025b}w l\N{U+00e4}tni",
      "Di\N{U+0254}\N{U+0331}k l\N{U+00e4}tni",
      "\N{U+014a}uaan l\N{U+00e4}tni",
      "Dhieec l\N{U+00e4}tni",
      "B\N{U+00e4}k\N{U+025b}l l\N{U+00e4}tni",
      "C\N{U+00e4}\N{U+014b} ku\N{U+0254}th"
    ],
    era_abbreviated => [
      "AY",
      "\N{U+0190}Y"
    ],
    era_narrow => [
      "AY",
      "\N{U+0190}Y"
    ],
    era_wide => [
      "A ka\N{U+0331}n Yecu ni dap",
      "\N{U+0190} ca Yecu dap"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Nuer",
    month_format_abbreviated => [
      "Tiop",
      "P\N{U+025b}t",
      "Du\N{U+0254}\N{U+0331}\N{U+0254}\N{U+0331}",
      "Guak",
      "Du\N{U+00e4}",
      "Kor",
      "Pay",
      "Thoo",
      "T\N{U+025b}\N{U+025b}",
      "Laa",
      "Kur",
      "Tid"
    ],
    month_format_narrow => [
      "T",
      "P",
      "D",
      "G",
      "D",
      "K",
      "P",
      "T",
      "T",
      "L",
      "K",
      "T"
    ],
    month_format_wide => [
      "Tiop thar p\N{U+025b}t",
      "P\N{U+025b}t",
      "Du\N{U+0254}\N{U+0331}\N{U+0254}\N{U+0331}\N{U+014b}",
      "Guak",
      "Du\N{U+00e4}t",
      "Kornyoot",
      "Pay yie\N{U+0331}tni",
      "Tho\N{U+0331}o\N{U+0331}r",
      "T\N{U+025b}\N{U+025b}r",
      "Laath",
      "Kur",
      "Tio\N{U+0331}p in di\N{U+0331}i\N{U+0331}t"
    ],
    month_stand_alone_abbreviated => [
      "Tiop",
      "P\N{U+025b}t",
      "Du\N{U+0254}\N{U+0331}\N{U+0254}\N{U+0331}",
      "Guak",
      "Du\N{U+00e4}",
      "Kor",
      "Pay",
      "Thoo",
      "T\N{U+025b}\N{U+025b}",
      "Laa",
      "Kur",
      "Tid"
    ],
    month_stand_alone_narrow => [
      "T",
      "P",
      "D",
      "G",
      "D",
      "K",
      "P",
      "T",
      "T",
      "L",
      "K",
      "T"
    ],
    month_stand_alone_wide => [
      "Tiop thar p\N{U+025b}t",
      "P\N{U+025b}t",
      "Du\N{U+0254}\N{U+0331}\N{U+0254}\N{U+0331}\N{U+014b}",
      "Guak",
      "Du\N{U+00e4}t",
      "Kornyoot",
      "Pay yie\N{U+0331}tni",
      "Tho\N{U+0331}o\N{U+0331}r",
      "T\N{U+025b}\N{U+025b}r",
      "Laath",
      "Kur",
      "Tio\N{U+0331}p in di\N{U+0331}i\N{U+0331}t"
    ],
    name => "Nuer South Sudan",
    native_language => "Thok Nath",
    native_name => "Thok Nath SS",
    native_script => undef,
    native_territory => "SS",
    native_variant => undef,
    quarter_format_abbreviated => [
      "P1",
      "P2",
      "P3",
      "P4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "P\N{U+00e4}th di\N{U+0254}k tin nhiam",
      "P\N{U+00e4}th di\N{U+0254}k tin guur\N{U+025b}",
      "P\N{U+00e4}th di\N{U+0254}k tin w\N{U+00e4} k\N{U+0254}\N{U+0254}ri\N{U+025b}n",
      "P\N{U+00e4}th di\N{U+0254}k tin ji\N{U+0254}akdi\N{U+025b}n"
    ],
    quarter_stand_alone_abbreviated => [
      "P1",
      "P2",
      "P3",
      "P4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "P\N{U+00e4}th di\N{U+0254}k tin nhiam",
      "P\N{U+00e4}th di\N{U+0254}k tin guur\N{U+025b}",
      "P\N{U+00e4}th di\N{U+0254}k tin w\N{U+00e4} k\N{U+0254}\N{U+0254}ri\N{U+025b}n",
      "P\N{U+00e4}th di\N{U+0254}k tin ji\N{U+0254}akdi\N{U+025b}n"
    ],
    script => undef,
    territory => "South Sudan",
    time_format_full => "zzzz h:mm:ss a",
    time_format_long => "z h:mm:ss a",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ nyn ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nyn",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ORK",
      "OKB",
      "OKS",
      "OKN",
      "OKT",
      "OMK",
      "SAN"
    ],
    day_format_narrow => [
      "K",
      "R",
      "S",
      "N",
      "T",
      "M",
      "S"
    ],
    day_format_wide => [
      "Orwokubanza",
      "Orwakabiri",
      "Orwakashatu",
      "Orwakana",
      "Orwakataano",
      "Orwamukaaga",
      "Sande"
    ],
    day_stand_alone_abbreviated => [
      "ORK",
      "OKB",
      "OKS",
      "OKN",
      "OKT",
      "OMK",
      "SAN"
    ],
    day_stand_alone_narrow => [
      "K",
      "R",
      "S",
      "N",
      "T",
      "M",
      "S"
    ],
    day_stand_alone_wide => [
      "Orwokubanza",
      "Orwakabiri",
      "Orwakashatu",
      "Orwakana",
      "Orwakataano",
      "Orwamukaaga",
      "Sande"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Kurisito Atakaijire",
      "Kurisito Yaijire"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Nyankole",
    month_format_abbreviated => [
      "KBZ",
      "KBR",
      "KST",
      "KKN",
      "KTN",
      "KMK",
      "KMS",
      "KMN",
      "KMW",
      "KKM",
      "KNK",
      "KNB"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Okwokubanza",
      "Okwakabiri",
      "Okwakashatu",
      "Okwakana",
      "Okwakataana",
      "Okwamukaaga",
      "Okwamushanju",
      "Okwamunaana",
      "Okwamwenda",
      "Okwaikumi",
      "Okwaikumi na kumwe",
      "Okwaikumi na ibiri"
    ],
    month_stand_alone_abbreviated => [
      "KBZ",
      "KBR",
      "KST",
      "KKN",
      "KTN",
      "KMK",
      "KMS",
      "KMN",
      "KMW",
      "KKM",
      "KNK",
      "KNB"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Okwokubanza",
      "Okwakabiri",
      "Okwakashatu",
      "Okwakana",
      "Okwakataana",
      "Okwamukaaga",
      "Okwamushanju",
      "Okwamunaana",
      "Okwamwenda",
      "Okwaikumi",
      "Okwaikumi na kumwe",
      "Okwaikumi na ibiri"
    ],
    name => "Nyankole",
    native_language => "Runyankore",
    native_name => "Runyankore",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "KWOTA 1",
      "KWOTA 2",
      "KWOTA 3",
      "KWOTA 4"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "KWOTA 1",
      "KWOTA 2",
      "KWOTA 3",
      "KWOTA 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ nyn-UG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "nyn-UG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ORK",
      "OKB",
      "OKS",
      "OKN",
      "OKT",
      "OMK",
      "SAN"
    ],
    day_format_narrow => [
      "K",
      "R",
      "S",
      "N",
      "T",
      "M",
      "S"
    ],
    day_format_wide => [
      "Orwokubanza",
      "Orwakabiri",
      "Orwakashatu",
      "Orwakana",
      "Orwakataano",
      "Orwamukaaga",
      "Sande"
    ],
    day_stand_alone_abbreviated => [
      "ORK",
      "OKB",
      "OKS",
      "OKN",
      "OKT",
      "OMK",
      "SAN"
    ],
    day_stand_alone_narrow => [
      "K",
      "R",
      "S",
      "N",
      "T",
      "M",
      "S"
    ],
    day_stand_alone_wide => [
      "Orwokubanza",
      "Orwakabiri",
      "Orwakashatu",
      "Orwakana",
      "Orwakataano",
      "Orwamukaaga",
      "Sande"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Kurisito Atakaijire",
      "Kurisito Yaijire"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Nyankole",
    month_format_abbreviated => [
      "KBZ",
      "KBR",
      "KST",
      "KKN",
      "KTN",
      "KMK",
      "KMS",
      "KMN",
      "KMW",
      "KKM",
      "KNK",
      "KNB"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Okwokubanza",
      "Okwakabiri",
      "Okwakashatu",
      "Okwakana",
      "Okwakataana",
      "Okwamukaaga",
      "Okwamushanju",
      "Okwamunaana",
      "Okwamwenda",
      "Okwaikumi",
      "Okwaikumi na kumwe",
      "Okwaikumi na ibiri"
    ],
    month_stand_alone_abbreviated => [
      "KBZ",
      "KBR",
      "KST",
      "KKN",
      "KTN",
      "KMK",
      "KMS",
      "KMN",
      "KMW",
      "KKM",
      "KNK",
      "KNB"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Okwokubanza",
      "Okwakabiri",
      "Okwakashatu",
      "Okwakana",
      "Okwakataana",
      "Okwamukaaga",
      "Okwamushanju",
      "Okwamunaana",
      "Okwamwenda",
      "Okwaikumi",
      "Okwaikumi na kumwe",
      "Okwaikumi na ibiri"
    ],
    name => "Nyankole Uganda",
    native_language => "Runyankore",
    native_name => "Runyankore Uganda",
    native_script => undef,
    native_territory => "Uganda",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "KWOTA 1",
      "KWOTA 2",
      "KWOTA 3",
      "KWOTA 4"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "KWOTA 1",
      "KWOTA 2",
      "KWOTA 3",
      "KWOTA 4"
    ],
    script => undef,
    territory => "Uganda",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ om ]__
  {
    am_pm_abbreviated => [
      "WD",
      "WB"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMMdd => "dd MMMM",
      MMMd => "MMM d",
      MMdd => "dd/MM",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMM => "MM/y",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "y QQQQ"
    },
    code => "om",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd-MMM-y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Wix",
      "Qib",
      "Rob",
      "Kam",
      "Jim",
      "San",
      "Dil"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Wiixata",
      "Qibxata",
      "Roobii",
      "Kamiisa",
      "Jimaata",
      "Sanbata",
      "Dilbata"
    ],
    day_stand_alone_abbreviated => [
      "Wix",
      "Qib",
      "Rob",
      "Kam",
      "Jim",
      "San",
      "Dil"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Wiixata",
      "Qibxata",
      "Roobii",
      "Kamiisa",
      "Jimaata",
      "Sanbata",
      "Dilbata"
    ],
    era_abbreviated => [
      "KD",
      "KB"
    ],
    era_narrow => [
      "KD",
      "KB"
    ],
    era_wide => [
      "KD",
      "KB"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Oromo",
    month_format_abbreviated => [
      "Ama",
      "Gur",
      "Bit",
      "Elb",
      "Cam",
      "Wax",
      "Ado",
      "Hag",
      "Ful",
      "Onk",
      "Sad",
      "Mud"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Amajjii",
      "Guraandhala",
      "Bitooteessa",
      "Elba",
      "Caamsa",
      "Waxabajjii",
      "Adooleessa",
      "Hagayya",
      "Fuulbana",
      "Onkololeessa",
      "Sadaasa",
      "Muddee"
    ],
    month_stand_alone_abbreviated => [
      "Ama",
      "Gur",
      "Bit",
      "Elb",
      "Cam",
      "Wax",
      "Ado",
      "Hag",
      "Ful",
      "Onk",
      "Sad",
      "Mud"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Amajjii",
      "Guraandhala",
      "Bitooteessa",
      "Elba",
      "Caamsa",
      "Waxabajjii",
      "Adooleessa",
      "Hagayya",
      "Fuulbana",
      "Onkololeessa",
      "Sadaasa",
      "Muddee"
    ],
    name => "Oromo",
    native_language => "Oromoo",
    native_name => "Oromoo",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ om-ET ]__
  {
    am_pm_abbreviated => [
      "WD",
      "WB"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMMdd => "dd MMMM",
      MMMd => "MMM d",
      MMdd => "dd/MM",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMM => "MM/y",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "y QQQQ"
    },
    code => "om-ET",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd-MMM-y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Wix",
      "Qib",
      "Rob",
      "Kam",
      "Jim",
      "San",
      "Dil"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Wiixata",
      "Qibxata",
      "Roobii",
      "Kamiisa",
      "Jimaata",
      "Sanbata",
      "Dilbata"
    ],
    day_stand_alone_abbreviated => [
      "Wix",
      "Qib",
      "Rob",
      "Kam",
      "Jim",
      "San",
      "Dil"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Wiixata",
      "Qibxata",
      "Roobii",
      "Kamiisa",
      "Jimaata",
      "Sanbata",
      "Dilbata"
    ],
    era_abbreviated => [
      "KD",
      "KB"
    ],
    era_narrow => [
      "KD",
      "KB"
    ],
    era_wide => [
      "KD",
      "KB"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%A, %B %e, %r %Z %Y",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%A, %B %e, %Y %r %Z",
    glibc_time_12_format => "%X %p",
    glibc_time_format => "%l:%M:%S",
    language => "Oromo",
    month_format_abbreviated => [
      "Ama",
      "Gur",
      "Bit",
      "Elb",
      "Cam",
      "Wax",
      "Ado",
      "Hag",
      "Ful",
      "Onk",
      "Sad",
      "Mud"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Amajjii",
      "Guraandhala",
      "Bitooteessa",
      "Elba",
      "Caamsa",
      "Waxabajjii",
      "Adooleessa",
      "Hagayya",
      "Fuulbana",
      "Onkololeessa",
      "Sadaasa",
      "Muddee"
    ],
    month_stand_alone_abbreviated => [
      "Ama",
      "Gur",
      "Bit",
      "Elb",
      "Cam",
      "Wax",
      "Ado",
      "Hag",
      "Ful",
      "Onk",
      "Sad",
      "Mud"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Amajjii",
      "Guraandhala",
      "Bitooteessa",
      "Elba",
      "Caamsa",
      "Waxabajjii",
      "Adooleessa",
      "Hagayya",
      "Fuulbana",
      "Onkololeessa",
      "Sadaasa",
      "Muddee"
    ],
    name => "Oromo Ethiopia",
    native_language => "Oromoo",
    native_name => "Oromoo Itoophiyaa",
    native_script => undef,
    native_territory => "Itoophiyaa",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Ethiopia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ om-KE ]__
  {
    am_pm_abbreviated => [
      "WD",
      "WB"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMMdd => "dd MMMM",
      MMMd => "MMM d",
      MMdd => "dd/MM",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMM => "MM/y",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "y QQQQ"
    },
    code => "om-KE",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd-MMM-y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Wix",
      "Qib",
      "Rob",
      "Kam",
      "Jim",
      "San",
      "Dil"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Wiixata",
      "Qibxata",
      "Roobii",
      "Kamiisa",
      "Jimaata",
      "Sanbata",
      "Dilbata"
    ],
    day_stand_alone_abbreviated => [
      "Wix",
      "Qib",
      "Rob",
      "Kam",
      "Jim",
      "San",
      "Dil"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Wiixata",
      "Qibxata",
      "Roobii",
      "Kamiisa",
      "Jimaata",
      "Sanbata",
      "Dilbata"
    ],
    era_abbreviated => [
      "KD",
      "KB"
    ],
    era_narrow => [
      "KD",
      "KB"
    ],
    era_wide => [
      "KD",
      "KB"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%A, %B %e, %r %Z %Y",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%A, %B %e, %Y %r %Z",
    glibc_time_12_format => "%X %p",
    glibc_time_format => "%l:%M:%S",
    language => "Oromo",
    month_format_abbreviated => [
      "Ama",
      "Gur",
      "Bit",
      "Elb",
      "Cam",
      "Wax",
      "Ado",
      "Hag",
      "Ful",
      "Onk",
      "Sad",
      "Mud"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Amajjii",
      "Guraandhala",
      "Bitooteessa",
      "Elba",
      "Caamsa",
      "Waxabajjii",
      "Adooleessa",
      "Hagayya",
      "Fuulbana",
      "Onkololeessa",
      "Sadaasa",
      "Muddee"
    ],
    month_stand_alone_abbreviated => [
      "Ama",
      "Gur",
      "Bit",
      "Elb",
      "Cam",
      "Wax",
      "Ado",
      "Hag",
      "Ful",
      "Onk",
      "Sad",
      "Mud"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Amajjii",
      "Guraandhala",
      "Bitooteessa",
      "Elba",
      "Caamsa",
      "Waxabajjii",
      "Adooleessa",
      "Hagayya",
      "Fuulbana",
      "Onkololeessa",
      "Sadaasa",
      "Muddee"
    ],
    name => "Oromo Kenya",
    native_language => "Oromoo",
    native_name => "Oromoo Keeniyaa",
    native_script => undef,
    native_territory => "Keeniyaa",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Kenya",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ or ]__
  {
    am_pm_abbreviated => [
      "am",
      "pm"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      MMdd => "dd-MM",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMM => "MM-y",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "y QQQQ"
    },
    code => "or",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d-M-yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0b38}\N{U+0b4b}\N{U+0b2e}",
      "\N{U+0b2e}\N{U+0b19}\N{U+0b4d}\N{U+0b17}\N{U+0b33}",
      "\N{U+0b2c}\N{U+0b41}\N{U+0b27}",
      "\N{U+0b17}\N{U+0b41}\N{U+0b30}\N{U+0b41}",
      "\N{U+0b36}\N{U+0b41}\N{U+0b15}\N{U+0b4d}\N{U+0b30}",
      "\N{U+0b36}\N{U+0b28}\N{U+0b3f}",
      "\N{U+0b30}\N{U+0b2c}\N{U+0b3f}"
    ],
    day_format_narrow => [
      "\N{U+0b38}\N{U+0b4b}",
      "\N{U+0b2e}",
      "\N{U+0b2c}\N{U+0b41}",
      "\N{U+0b17}\N{U+0b41}",
      "\N{U+0b36}\N{U+0b41}",
      "\N{U+0b36}",
      "\N{U+0b30}"
    ],
    day_format_wide => [
      "\N{U+0b38}\N{U+0b4b}\N{U+0b2e}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b2e}\N{U+0b19}\N{U+0b4d}\N{U+0b17}\N{U+0b33}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b2c}\N{U+0b41}\N{U+0b27}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b17}\N{U+0b41}\N{U+0b30}\N{U+0b41}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b36}\N{U+0b41}\N{U+0b15}\N{U+0b4d}\N{U+0b30}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b36}\N{U+0b28}\N{U+0b3f}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b30}\N{U+0b2c}\N{U+0b3f}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0b38}\N{U+0b4b}\N{U+0b2e}",
      "\N{U+0b2e}\N{U+0b19}\N{U+0b4d}\N{U+0b17}\N{U+0b33}",
      "\N{U+0b2c}\N{U+0b41}\N{U+0b27}",
      "\N{U+0b17}\N{U+0b41}\N{U+0b30}\N{U+0b41}",
      "\N{U+0b36}\N{U+0b41}\N{U+0b15}\N{U+0b4d}\N{U+0b30}",
      "\N{U+0b36}\N{U+0b28}\N{U+0b3f}",
      "\N{U+0b30}\N{U+0b2c}\N{U+0b3f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0b38}\N{U+0b4b}",
      "\N{U+0b2e}",
      "\N{U+0b2c}\N{U+0b41}",
      "\N{U+0b17}\N{U+0b41}",
      "\N{U+0b36}\N{U+0b41}",
      "\N{U+0b36}",
      "\N{U+0b30}"
    ],
    day_stand_alone_wide => [
      "\N{U+0b38}\N{U+0b4b}\N{U+0b2e}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b2e}\N{U+0b19}\N{U+0b4d}\N{U+0b17}\N{U+0b33}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b2c}\N{U+0b41}\N{U+0b27}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b17}\N{U+0b41}\N{U+0b30}\N{U+0b41}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b36}\N{U+0b41}\N{U+0b15}\N{U+0b4d}\N{U+0b30}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b36}\N{U+0b28}\N{U+0b3f}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b30}\N{U+0b2c}\N{U+0b3f}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Oriya",
    month_format_abbreviated => [
      "\N{U+0b1c}\N{U+0b3e}\N{U+0b28}\N{U+0b41}\N{U+0b06}\N{U+0b30}\N{U+0b40}",
      "\N{U+0b2b}\N{U+0b47}\N{U+0b2c}\N{U+0b43}\N{U+0b06}\N{U+0b30}\N{U+0b40}",
      "\N{U+0b2e}\N{U+0b3e}\N{U+0b30}\N{U+0b4d}\N{U+0b1a}\N{U+0b4d}\N{U+0b1a}",
      "\N{U+0b05}\N{U+0b2a}\N{U+0b4d}\N{U+0b30}\N{U+0b47}\N{U+0b32}",
      "\N{U+0b2e}\N{U+0b07}",
      "\N{U+0b1c}\N{U+0b41}\N{U+0b28}",
      "\N{U+0b1c}\N{U+0b41}\N{U+0b32}\N{U+0b3e}\N{U+0b07}",
      "\N{U+0b05}\N{U+0b17}\N{U+0b37}\N{U+0b4d}\N{U+0b1f}",
      "\N{U+0b38}\N{U+0b47}\N{U+0b2a}\N{U+0b4d}\N{U+0b1f}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b05}\N{U+0b15}\N{U+0b4d}\N{U+0b1f}\N{U+0b4b}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b28}\N{U+0b2d}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b21}\N{U+0b3f}\N{U+0b38}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}"
    ],
    month_format_narrow => [
      "\N{U+0b1c}\N{U+0b3e}",
      "\N{U+0b2b}\N{U+0b47}",
      "\N{U+0b2e}\N{U+0b3e}",
      "\N{U+0b05}",
      "\N{U+0b2e}\N{U+0b07}",
      "\N{U+0b1c}\N{U+0b41}",
      "\N{U+0b1c}\N{U+0b41}",
      "\N{U+0b05}",
      "\N{U+0b38}\N{U+0b47}",
      "\N{U+0b05}",
      "\N{U+0b28}",
      "\N{U+0b21}\N{U+0b3f}"
    ],
    month_format_wide => [
      "\N{U+0b1c}\N{U+0b3e}\N{U+0b28}\N{U+0b41}\N{U+0b06}\N{U+0b30}\N{U+0b40}",
      "\N{U+0b2b}\N{U+0b47}\N{U+0b2c}\N{U+0b43}\N{U+0b06}\N{U+0b30}\N{U+0b40}",
      "\N{U+0b2e}\N{U+0b3e}\N{U+0b30}\N{U+0b4d}\N{U+0b1a}\N{U+0b4d}\N{U+0b1a}",
      "\N{U+0b05}\N{U+0b2a}\N{U+0b4d}\N{U+0b30}\N{U+0b47}\N{U+0b32}",
      "\N{U+0b2e}\N{U+0b07}",
      "\N{U+0b1c}\N{U+0b41}\N{U+0b28}",
      "\N{U+0b1c}\N{U+0b41}\N{U+0b32}\N{U+0b3e}\N{U+0b07}",
      "\N{U+0b05}\N{U+0b17}\N{U+0b37}\N{U+0b4d}\N{U+0b1f}",
      "\N{U+0b38}\N{U+0b47}\N{U+0b2a}\N{U+0b4d}\N{U+0b1f}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b05}\N{U+0b15}\N{U+0b4d}\N{U+0b1f}\N{U+0b4b}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b28}\N{U+0b2d}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b21}\N{U+0b3f}\N{U+0b38}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0b1c}\N{U+0b3e}\N{U+0b28}\N{U+0b41}\N{U+0b06}\N{U+0b30}\N{U+0b40}",
      "\N{U+0b2b}\N{U+0b47}\N{U+0b2c}\N{U+0b43}\N{U+0b06}\N{U+0b30}\N{U+0b40}",
      "\N{U+0b2e}\N{U+0b3e}\N{U+0b30}\N{U+0b4d}\N{U+0b1a}\N{U+0b4d}\N{U+0b1a}",
      "\N{U+0b05}\N{U+0b2a}\N{U+0b4d}\N{U+0b30}\N{U+0b47}\N{U+0b32}",
      "\N{U+0b2e}\N{U+0b07}",
      "\N{U+0b1c}\N{U+0b41}\N{U+0b28}",
      "\N{U+0b1c}\N{U+0b41}\N{U+0b32}\N{U+0b3e}\N{U+0b07}",
      "\N{U+0b05}\N{U+0b17}\N{U+0b37}\N{U+0b4d}\N{U+0b1f}",
      "\N{U+0b38}\N{U+0b47}\N{U+0b2a}\N{U+0b4d}\N{U+0b1f}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b05}\N{U+0b15}\N{U+0b4d}\N{U+0b1f}\N{U+0b4b}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b28}\N{U+0b2d}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b21}\N{U+0b3f}\N{U+0b38}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0b1c}\N{U+0b3e}",
      "\N{U+0b2b}\N{U+0b47}",
      "\N{U+0b2e}\N{U+0b3e}",
      "\N{U+0b05}",
      "\N{U+0b2e}\N{U+0b07}",
      "\N{U+0b1c}\N{U+0b41}",
      "\N{U+0b1c}\N{U+0b41}",
      "\N{U+0b05}",
      "\N{U+0b38}\N{U+0b47}",
      "\N{U+0b05}",
      "\N{U+0b28}",
      "\N{U+0b21}\N{U+0b3f}"
    ],
    month_stand_alone_wide => [
      "\N{U+0b1c}\N{U+0b3e}\N{U+0b28}\N{U+0b41}\N{U+0b06}\N{U+0b30}\N{U+0b40}",
      "\N{U+0b2b}\N{U+0b47}\N{U+0b2c}\N{U+0b43}\N{U+0b06}\N{U+0b30}\N{U+0b40}",
      "\N{U+0b2e}\N{U+0b3e}\N{U+0b30}\N{U+0b4d}\N{U+0b1a}\N{U+0b4d}\N{U+0b1a}",
      "\N{U+0b05}\N{U+0b2a}\N{U+0b4d}\N{U+0b30}\N{U+0b47}\N{U+0b32}",
      "\N{U+0b2e}\N{U+0b07}",
      "\N{U+0b1c}\N{U+0b41}\N{U+0b28}",
      "\N{U+0b1c}\N{U+0b41}\N{U+0b32}\N{U+0b3e}\N{U+0b07}",
      "\N{U+0b05}\N{U+0b17}\N{U+0b37}\N{U+0b4d}\N{U+0b1f}",
      "\N{U+0b38}\N{U+0b47}\N{U+0b2a}\N{U+0b4d}\N{U+0b1f}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b05}\N{U+0b15}\N{U+0b4d}\N{U+0b1f}\N{U+0b4b}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b28}\N{U+0b2d}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b21}\N{U+0b3f}\N{U+0b38}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}"
    ],
    name => "Oriya",
    native_language => "\N{U+0b13}\N{U+0b21}\N{U+0b3c}\N{U+0b3f}\N{U+0b06}",
    native_name => "\N{U+0b13}\N{U+0b21}\N{U+0b3c}\N{U+0b3f}\N{U+0b06}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ or-IN ]__
  {
    am_pm_abbreviated => [
      "am",
      "pm"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      MMdd => "dd-MM",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMM => "MM-y",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "y QQQQ"
    },
    code => "or-IN",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d-M-yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0b38}\N{U+0b4b}\N{U+0b2e}",
      "\N{U+0b2e}\N{U+0b19}\N{U+0b4d}\N{U+0b17}\N{U+0b33}",
      "\N{U+0b2c}\N{U+0b41}\N{U+0b27}",
      "\N{U+0b17}\N{U+0b41}\N{U+0b30}\N{U+0b41}",
      "\N{U+0b36}\N{U+0b41}\N{U+0b15}\N{U+0b4d}\N{U+0b30}",
      "\N{U+0b36}\N{U+0b28}\N{U+0b3f}",
      "\N{U+0b30}\N{U+0b2c}\N{U+0b3f}"
    ],
    day_format_narrow => [
      "\N{U+0b38}\N{U+0b4b}",
      "\N{U+0b2e}",
      "\N{U+0b2c}\N{U+0b41}",
      "\N{U+0b17}\N{U+0b41}",
      "\N{U+0b36}\N{U+0b41}",
      "\N{U+0b36}",
      "\N{U+0b30}"
    ],
    day_format_wide => [
      "\N{U+0b38}\N{U+0b4b}\N{U+0b2e}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b2e}\N{U+0b19}\N{U+0b4d}\N{U+0b17}\N{U+0b33}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b2c}\N{U+0b41}\N{U+0b27}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b17}\N{U+0b41}\N{U+0b30}\N{U+0b41}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b36}\N{U+0b41}\N{U+0b15}\N{U+0b4d}\N{U+0b30}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b36}\N{U+0b28}\N{U+0b3f}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b30}\N{U+0b2c}\N{U+0b3f}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0b38}\N{U+0b4b}\N{U+0b2e}",
      "\N{U+0b2e}\N{U+0b19}\N{U+0b4d}\N{U+0b17}\N{U+0b33}",
      "\N{U+0b2c}\N{U+0b41}\N{U+0b27}",
      "\N{U+0b17}\N{U+0b41}\N{U+0b30}\N{U+0b41}",
      "\N{U+0b36}\N{U+0b41}\N{U+0b15}\N{U+0b4d}\N{U+0b30}",
      "\N{U+0b36}\N{U+0b28}\N{U+0b3f}",
      "\N{U+0b30}\N{U+0b2c}\N{U+0b3f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0b38}\N{U+0b4b}",
      "\N{U+0b2e}",
      "\N{U+0b2c}\N{U+0b41}",
      "\N{U+0b17}\N{U+0b41}",
      "\N{U+0b36}\N{U+0b41}",
      "\N{U+0b36}",
      "\N{U+0b30}"
    ],
    day_stand_alone_wide => [
      "\N{U+0b38}\N{U+0b4b}\N{U+0b2e}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b2e}\N{U+0b19}\N{U+0b4d}\N{U+0b17}\N{U+0b33}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b2c}\N{U+0b41}\N{U+0b27}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b17}\N{U+0b41}\N{U+0b30}\N{U+0b41}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b36}\N{U+0b41}\N{U+0b15}\N{U+0b4d}\N{U+0b30}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b36}\N{U+0b28}\N{U+0b3f}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}",
      "\N{U+0b30}\N{U+0b2c}\N{U+0b3f}\N{U+0b2c}\N{U+0b3e}\N{U+0b30}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%Od-%Om-%Oy",
    glibc_datetime_format => "%Oe %B %Oy %OI:%OM:%OS %p %Z",
    glibc_time_12_format => "%OI:%OM:%OS %p",
    glibc_time_format => "%OI:%OM:%OS %p",
    language => "Oriya",
    month_format_abbreviated => [
      "\N{U+0b1c}\N{U+0b3e}\N{U+0b28}\N{U+0b41}\N{U+0b06}\N{U+0b30}\N{U+0b40}",
      "\N{U+0b2b}\N{U+0b47}\N{U+0b2c}\N{U+0b43}\N{U+0b06}\N{U+0b30}\N{U+0b40}",
      "\N{U+0b2e}\N{U+0b3e}\N{U+0b30}\N{U+0b4d}\N{U+0b1a}\N{U+0b4d}\N{U+0b1a}",
      "\N{U+0b05}\N{U+0b2a}\N{U+0b4d}\N{U+0b30}\N{U+0b47}\N{U+0b32}",
      "\N{U+0b2e}\N{U+0b07}",
      "\N{U+0b1c}\N{U+0b41}\N{U+0b28}",
      "\N{U+0b1c}\N{U+0b41}\N{U+0b32}\N{U+0b3e}\N{U+0b07}",
      "\N{U+0b05}\N{U+0b17}\N{U+0b37}\N{U+0b4d}\N{U+0b1f}",
      "\N{U+0b38}\N{U+0b47}\N{U+0b2a}\N{U+0b4d}\N{U+0b1f}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b05}\N{U+0b15}\N{U+0b4d}\N{U+0b1f}\N{U+0b4b}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b28}\N{U+0b2d}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b21}\N{U+0b3f}\N{U+0b38}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}"
    ],
    month_format_narrow => [
      "\N{U+0b1c}\N{U+0b3e}",
      "\N{U+0b2b}\N{U+0b47}",
      "\N{U+0b2e}\N{U+0b3e}",
      "\N{U+0b05}",
      "\N{U+0b2e}\N{U+0b07}",
      "\N{U+0b1c}\N{U+0b41}",
      "\N{U+0b1c}\N{U+0b41}",
      "\N{U+0b05}",
      "\N{U+0b38}\N{U+0b47}",
      "\N{U+0b05}",
      "\N{U+0b28}",
      "\N{U+0b21}\N{U+0b3f}"
    ],
    month_format_wide => [
      "\N{U+0b1c}\N{U+0b3e}\N{U+0b28}\N{U+0b41}\N{U+0b06}\N{U+0b30}\N{U+0b40}",
      "\N{U+0b2b}\N{U+0b47}\N{U+0b2c}\N{U+0b43}\N{U+0b06}\N{U+0b30}\N{U+0b40}",
      "\N{U+0b2e}\N{U+0b3e}\N{U+0b30}\N{U+0b4d}\N{U+0b1a}\N{U+0b4d}\N{U+0b1a}",
      "\N{U+0b05}\N{U+0b2a}\N{U+0b4d}\N{U+0b30}\N{U+0b47}\N{U+0b32}",
      "\N{U+0b2e}\N{U+0b07}",
      "\N{U+0b1c}\N{U+0b41}\N{U+0b28}",
      "\N{U+0b1c}\N{U+0b41}\N{U+0b32}\N{U+0b3e}\N{U+0b07}",
      "\N{U+0b05}\N{U+0b17}\N{U+0b37}\N{U+0b4d}\N{U+0b1f}",
      "\N{U+0b38}\N{U+0b47}\N{U+0b2a}\N{U+0b4d}\N{U+0b1f}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b05}\N{U+0b15}\N{U+0b4d}\N{U+0b1f}\N{U+0b4b}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b28}\N{U+0b2d}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b21}\N{U+0b3f}\N{U+0b38}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0b1c}\N{U+0b3e}\N{U+0b28}\N{U+0b41}\N{U+0b06}\N{U+0b30}\N{U+0b40}",
      "\N{U+0b2b}\N{U+0b47}\N{U+0b2c}\N{U+0b43}\N{U+0b06}\N{U+0b30}\N{U+0b40}",
      "\N{U+0b2e}\N{U+0b3e}\N{U+0b30}\N{U+0b4d}\N{U+0b1a}\N{U+0b4d}\N{U+0b1a}",
      "\N{U+0b05}\N{U+0b2a}\N{U+0b4d}\N{U+0b30}\N{U+0b47}\N{U+0b32}",
      "\N{U+0b2e}\N{U+0b07}",
      "\N{U+0b1c}\N{U+0b41}\N{U+0b28}",
      "\N{U+0b1c}\N{U+0b41}\N{U+0b32}\N{U+0b3e}\N{U+0b07}",
      "\N{U+0b05}\N{U+0b17}\N{U+0b37}\N{U+0b4d}\N{U+0b1f}",
      "\N{U+0b38}\N{U+0b47}\N{U+0b2a}\N{U+0b4d}\N{U+0b1f}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b05}\N{U+0b15}\N{U+0b4d}\N{U+0b1f}\N{U+0b4b}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b28}\N{U+0b2d}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b21}\N{U+0b3f}\N{U+0b38}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0b1c}\N{U+0b3e}",
      "\N{U+0b2b}\N{U+0b47}",
      "\N{U+0b2e}\N{U+0b3e}",
      "\N{U+0b05}",
      "\N{U+0b2e}\N{U+0b07}",
      "\N{U+0b1c}\N{U+0b41}",
      "\N{U+0b1c}\N{U+0b41}",
      "\N{U+0b05}",
      "\N{U+0b38}\N{U+0b47}",
      "\N{U+0b05}",
      "\N{U+0b28}",
      "\N{U+0b21}\N{U+0b3f}"
    ],
    month_stand_alone_wide => [
      "\N{U+0b1c}\N{U+0b3e}\N{U+0b28}\N{U+0b41}\N{U+0b06}\N{U+0b30}\N{U+0b40}",
      "\N{U+0b2b}\N{U+0b47}\N{U+0b2c}\N{U+0b43}\N{U+0b06}\N{U+0b30}\N{U+0b40}",
      "\N{U+0b2e}\N{U+0b3e}\N{U+0b30}\N{U+0b4d}\N{U+0b1a}\N{U+0b4d}\N{U+0b1a}",
      "\N{U+0b05}\N{U+0b2a}\N{U+0b4d}\N{U+0b30}\N{U+0b47}\N{U+0b32}",
      "\N{U+0b2e}\N{U+0b07}",
      "\N{U+0b1c}\N{U+0b41}\N{U+0b28}",
      "\N{U+0b1c}\N{U+0b41}\N{U+0b32}\N{U+0b3e}\N{U+0b07}",
      "\N{U+0b05}\N{U+0b17}\N{U+0b37}\N{U+0b4d}\N{U+0b1f}",
      "\N{U+0b38}\N{U+0b47}\N{U+0b2a}\N{U+0b4d}\N{U+0b1f}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b05}\N{U+0b15}\N{U+0b4d}\N{U+0b1f}\N{U+0b4b}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b28}\N{U+0b2d}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}",
      "\N{U+0b21}\N{U+0b3f}\N{U+0b38}\N{U+0b47}\N{U+0b2e}\N{U+0b4d}\N{U+0b2c}\N{U+0b30}"
    ],
    name => "Oriya India",
    native_language => "\N{U+0b13}\N{U+0b21}\N{U+0b3c}\N{U+0b3f}\N{U+0b06}",
    native_name => "\N{U+0b13}\N{U+0b21}\N{U+0b3c}\N{U+0b3f}\N{U+0b06} \N{U+0b2d}\N{U+0b3e}\N{U+0b30}\N{U+0b24}",
    native_script => undef,
    native_territory => "\N{U+0b2d}\N{U+0b3e}\N{U+0b30}\N{U+0b24}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "India",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ os ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "ccc, d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "E, dd.MM.y",
      yMMM => "LLL y",
      yMMMEd => "E, d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y-'\N{U+04d5}\N{U+043c}' '\N{U+0430}\N{U+0437}\N{U+044b}' QQQ",
      yQQQQ => "y-'\N{U+04d5}\N{U+043c}' '\N{U+0430}\N{U+0437}\N{U+044b}' QQQQ"
    },
    code => "os",
    date_format_full => "EEEE, d MMMM, y '\N{U+0430}\N{U+0437}'",
    date_format_long => "d MMMM, y '\N{U+0430}\N{U+0437}'",
    date_format_medium => "dd MMM y '\N{U+0430}\N{U+0437}'",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+043a}\N{U+0440}\N{U+0441}",
      "\N{U+0434}\N{U+0446}\N{U+0433}",
      "\N{U+04d5}\N{U+0440}\N{U+0442}",
      "\N{U+0446}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0440}\N{U+0431}",
      "\N{U+0441}\N{U+0431}\N{U+0442}",
      "\N{U+0445}\N{U+0446}\N{U+0431}"
    ],
    day_format_narrow => [
      "\N{U+041a}",
      "\N{U+0414}",
      "\N{U+04d4}",
      "\N{U+0426}",
      "\N{U+041c}",
      "\N{U+0421}",
      "\N{U+0425}"
    ],
    day_format_wide => [
      "\N{U+043a}\N{U+044a}\N{U+0443}\N{U+044b}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+04d5}\N{U+0440}",
      "\N{U+0434}\N{U+044b}\N{U+0446}\N{U+0446}\N{U+04d5}\N{U+0433}",
      "\N{U+04d5}\N{U+0440}\N{U+0442}\N{U+044b}\N{U+0446}\N{U+0446}\N{U+04d5}\N{U+0433}",
      "\N{U+0446}\N{U+044b}\N{U+043f}\N{U+043f}\N{U+04d5}\N{U+0440}\N{U+04d5}\N{U+043c}",
      "\N{U+043c}\N{U+0430}\N{U+0439}\N{U+0440}\N{U+04d5}\N{U+043c}\N{U+0431}\N{U+043e}\N{U+043d}",
      "\N{U+0441}\N{U+0430}\N{U+0431}\N{U+0430}\N{U+0442}",
      "\N{U+0445}\N{U+0443}\N{U+044b}\N{U+0446}\N{U+0430}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+043d}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+041a}\N{U+0440}\N{U+0441}",
      "\N{U+0414}\N{U+0446}\N{U+0433}",
      "\N{U+04d4}\N{U+0440}\N{U+0442}",
      "\N{U+0426}\N{U+043f}\N{U+0440}",
      "\N{U+041c}\N{U+0440}\N{U+0431}",
      "\N{U+0421}\N{U+0431}\N{U+0442}",
      "\N{U+0425}\N{U+0446}\N{U+0431}"
    ],
    day_stand_alone_narrow => [
      "\N{U+041a}",
      "\N{U+0414}",
      "\N{U+04d4}",
      "\N{U+0426}",
      "\N{U+041c}",
      "\N{U+0421}",
      "\N{U+0425}"
    ],
    day_stand_alone_wide => [
      "\N{U+041a}\N{U+044a}\N{U+0443}\N{U+044b}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+04d5}\N{U+0440}",
      "\N{U+0414}\N{U+044b}\N{U+0446}\N{U+0446}\N{U+04d5}\N{U+0433}",
      "\N{U+04d4}\N{U+0440}\N{U+0442}\N{U+044b}\N{U+0446}\N{U+0446}\N{U+04d5}\N{U+0433}",
      "\N{U+0426}\N{U+044b}\N{U+043f}\N{U+043f}\N{U+04d5}\N{U+0440}\N{U+04d5}\N{U+043c}",
      "\N{U+041c}\N{U+0430}\N{U+0439}\N{U+0440}\N{U+04d5}\N{U+043c}\N{U+0431}\N{U+043e}\N{U+043d}",
      "\N{U+0421}\N{U+0430}\N{U+0431}\N{U+0430}\N{U+0442}",
      "\N{U+0425}\N{U+0443}\N{U+044b}\N{U+0446}\N{U+0430}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+043d}"
    ],
    era_abbreviated => [
      "\N{U+043d}.\N{U+0434}.\N{U+0430}.",
      "\N{U+043d}.\N{U+0434}."
    ],
    era_narrow => [
      "\N{U+043d}.\N{U+0434}.\N{U+0430}.",
      "\N{U+043d}.\N{U+0434}."
    ],
    era_wide => [
      "\N{U+043d}.\N{U+0434}.\N{U+0430}.",
      "\N{U+043d}.\N{U+0434}."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Ossetic",
    month_format_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}.",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0439}\N{U+044b}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044b}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_format_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_format_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044b}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044b}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+044a}\N{U+0438}\N{U+0439}\N{U+044b}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044b}",
      "\N{U+043c}\N{U+0430}\N{U+0439}\N{U+044b}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044b}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}\N{U+044b}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044b}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044b}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044b}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044b}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+042f}\N{U+043d}\N{U+0432}.",
      "\N{U+0424}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+041c}\N{U+0430}\N{U+0440}\N{U+0442}.",
      "\N{U+0410}\N{U+043f}\N{U+0440}.",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0418}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0410}\N{U+0432}\N{U+0433}.",
      "\N{U+0421}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+041e}\N{U+043a}\N{U+0442}.",
      "\N{U+041d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0414}\N{U+0435}\N{U+043a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_stand_alone_wide => [
      "\N{U+042f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0424}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+041c}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+044a}\N{U+0438}",
      "\N{U+0410}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0418}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0410}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0421}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+041e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+041d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0414}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    name => "Ossetic",
    native_language => "\N{U+0438}\N{U+0440}\N{U+043e}\N{U+043d}",
    native_name => "\N{U+0438}\N{U+0440}\N{U+043e}\N{U+043d}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "4-\N{U+04d5}\N{U+043c} \N{U+043a}\N{U+0432}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+04d5}\N{U+043c} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "4-\N{U+04d5}\N{U+043c} \N{U+043a}\N{U+0432}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+04d5}\N{U+043c} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ os-GE ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "ccc, d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "E, dd.MM.y",
      yMMM => "LLL y",
      yMMMEd => "E, d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y-'\N{U+04d5}\N{U+043c}' '\N{U+0430}\N{U+0437}\N{U+044b}' QQQ",
      yQQQQ => "y-'\N{U+04d5}\N{U+043c}' '\N{U+0430}\N{U+0437}\N{U+044b}' QQQQ"
    },
    code => "os-GE",
    date_format_full => "EEEE, d MMMM, y '\N{U+0430}\N{U+0437}'",
    date_format_long => "d MMMM, y '\N{U+0430}\N{U+0437}'",
    date_format_medium => "dd MMM y '\N{U+0430}\N{U+0437}'",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+043a}\N{U+0440}\N{U+0441}",
      "\N{U+0434}\N{U+0446}\N{U+0433}",
      "\N{U+04d5}\N{U+0440}\N{U+0442}",
      "\N{U+0446}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0440}\N{U+0431}",
      "\N{U+0441}\N{U+0431}\N{U+0442}",
      "\N{U+0445}\N{U+0446}\N{U+0431}"
    ],
    day_format_narrow => [
      "\N{U+041a}",
      "\N{U+0414}",
      "\N{U+04d4}",
      "\N{U+0426}",
      "\N{U+041c}",
      "\N{U+0421}",
      "\N{U+0425}"
    ],
    day_format_wide => [
      "\N{U+043a}\N{U+044a}\N{U+0443}\N{U+044b}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+04d5}\N{U+0440}",
      "\N{U+0434}\N{U+044b}\N{U+0446}\N{U+0446}\N{U+04d5}\N{U+0433}",
      "\N{U+04d5}\N{U+0440}\N{U+0442}\N{U+044b}\N{U+0446}\N{U+0446}\N{U+04d5}\N{U+0433}",
      "\N{U+0446}\N{U+044b}\N{U+043f}\N{U+043f}\N{U+04d5}\N{U+0440}\N{U+04d5}\N{U+043c}",
      "\N{U+043c}\N{U+0430}\N{U+0439}\N{U+0440}\N{U+04d5}\N{U+043c}\N{U+0431}\N{U+043e}\N{U+043d}",
      "\N{U+0441}\N{U+0430}\N{U+0431}\N{U+0430}\N{U+0442}",
      "\N{U+0445}\N{U+0443}\N{U+044b}\N{U+0446}\N{U+0430}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+043d}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+041a}\N{U+0440}\N{U+0441}",
      "\N{U+0414}\N{U+0446}\N{U+0433}",
      "\N{U+04d4}\N{U+0440}\N{U+0442}",
      "\N{U+0426}\N{U+043f}\N{U+0440}",
      "\N{U+041c}\N{U+0440}\N{U+0431}",
      "\N{U+0421}\N{U+0431}\N{U+0442}",
      "\N{U+0425}\N{U+0446}\N{U+0431}"
    ],
    day_stand_alone_narrow => [
      "\N{U+041a}",
      "\N{U+0414}",
      "\N{U+04d4}",
      "\N{U+0426}",
      "\N{U+041c}",
      "\N{U+0421}",
      "\N{U+0425}"
    ],
    day_stand_alone_wide => [
      "\N{U+041a}\N{U+044a}\N{U+0443}\N{U+044b}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+04d5}\N{U+0440}",
      "\N{U+0414}\N{U+044b}\N{U+0446}\N{U+0446}\N{U+04d5}\N{U+0433}",
      "\N{U+04d4}\N{U+0440}\N{U+0442}\N{U+044b}\N{U+0446}\N{U+0446}\N{U+04d5}\N{U+0433}",
      "\N{U+0426}\N{U+044b}\N{U+043f}\N{U+043f}\N{U+04d5}\N{U+0440}\N{U+04d5}\N{U+043c}",
      "\N{U+041c}\N{U+0430}\N{U+0439}\N{U+0440}\N{U+04d5}\N{U+043c}\N{U+0431}\N{U+043e}\N{U+043d}",
      "\N{U+0421}\N{U+0430}\N{U+0431}\N{U+0430}\N{U+0442}",
      "\N{U+0425}\N{U+0443}\N{U+044b}\N{U+0446}\N{U+0430}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+043d}"
    ],
    era_abbreviated => [
      "\N{U+043d}.\N{U+0434}.\N{U+0430}.",
      "\N{U+043d}.\N{U+0434}."
    ],
    era_narrow => [
      "\N{U+043d}.\N{U+0434}.\N{U+0430}.",
      "\N{U+043d}.\N{U+0434}."
    ],
    era_wide => [
      "\N{U+043d}.\N{U+0434}.\N{U+0430}.",
      "\N{U+043d}.\N{U+0434}."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Ossetic",
    month_format_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}.",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0439}\N{U+044b}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044b}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_format_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_format_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044b}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044b}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+044a}\N{U+0438}\N{U+0439}\N{U+044b}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044b}",
      "\N{U+043c}\N{U+0430}\N{U+0439}\N{U+044b}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044b}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}\N{U+044b}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044b}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044b}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044b}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044b}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+042f}\N{U+043d}\N{U+0432}.",
      "\N{U+0424}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+041c}\N{U+0430}\N{U+0440}\N{U+0442}.",
      "\N{U+0410}\N{U+043f}\N{U+0440}.",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0418}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0410}\N{U+0432}\N{U+0433}.",
      "\N{U+0421}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+041e}\N{U+043a}\N{U+0442}.",
      "\N{U+041d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0414}\N{U+0435}\N{U+043a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_stand_alone_wide => [
      "\N{U+042f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0424}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+041c}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+044a}\N{U+0438}",
      "\N{U+0410}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0418}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0410}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0421}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+041e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+041d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0414}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    name => "Ossetic Georgia",
    native_language => "\N{U+0438}\N{U+0440}\N{U+043e}\N{U+043d}",
    native_name => "\N{U+0438}\N{U+0440}\N{U+043e}\N{U+043d} \N{U+0413}\N{U+0443}\N{U+044b}\N{U+0440}\N{U+0434}\N{U+0437}\N{U+044b}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+043d}",
    native_script => undef,
    native_territory => "\N{U+0413}\N{U+0443}\N{U+044b}\N{U+0440}\N{U+0434}\N{U+0437}\N{U+044b}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+043d}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "4-\N{U+04d5}\N{U+043c} \N{U+043a}\N{U+0432}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+04d5}\N{U+043c} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "4-\N{U+04d5}\N{U+043c} \N{U+043a}\N{U+0432}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+04d5}\N{U+043c} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => "Georgia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ os-RU ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "ccc, d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "E, dd.MM.y",
      yMMM => "LLL y",
      yMMMEd => "E, d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y-'\N{U+04d5}\N{U+043c}' '\N{U+0430}\N{U+0437}\N{U+044b}' QQQ",
      yQQQQ => "y-'\N{U+04d5}\N{U+043c}' '\N{U+0430}\N{U+0437}\N{U+044b}' QQQQ"
    },
    code => "os-RU",
    date_format_full => "EEEE, d MMMM, y '\N{U+0430}\N{U+0437}'",
    date_format_long => "d MMMM, y '\N{U+0430}\N{U+0437}'",
    date_format_medium => "dd MMM y '\N{U+0430}\N{U+0437}'",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+043a}\N{U+0440}\N{U+0441}",
      "\N{U+0434}\N{U+0446}\N{U+0433}",
      "\N{U+04d5}\N{U+0440}\N{U+0442}",
      "\N{U+0446}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0440}\N{U+0431}",
      "\N{U+0441}\N{U+0431}\N{U+0442}",
      "\N{U+0445}\N{U+0446}\N{U+0431}"
    ],
    day_format_narrow => [
      "\N{U+041a}",
      "\N{U+0414}",
      "\N{U+04d4}",
      "\N{U+0426}",
      "\N{U+041c}",
      "\N{U+0421}",
      "\N{U+0425}"
    ],
    day_format_wide => [
      "\N{U+043a}\N{U+044a}\N{U+0443}\N{U+044b}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+04d5}\N{U+0440}",
      "\N{U+0434}\N{U+044b}\N{U+0446}\N{U+0446}\N{U+04d5}\N{U+0433}",
      "\N{U+04d5}\N{U+0440}\N{U+0442}\N{U+044b}\N{U+0446}\N{U+0446}\N{U+04d5}\N{U+0433}",
      "\N{U+0446}\N{U+044b}\N{U+043f}\N{U+043f}\N{U+04d5}\N{U+0440}\N{U+04d5}\N{U+043c}",
      "\N{U+043c}\N{U+0430}\N{U+0439}\N{U+0440}\N{U+04d5}\N{U+043c}\N{U+0431}\N{U+043e}\N{U+043d}",
      "\N{U+0441}\N{U+0430}\N{U+0431}\N{U+0430}\N{U+0442}",
      "\N{U+0445}\N{U+0443}\N{U+044b}\N{U+0446}\N{U+0430}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+043d}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+041a}\N{U+0440}\N{U+0441}",
      "\N{U+0414}\N{U+0446}\N{U+0433}",
      "\N{U+04d4}\N{U+0440}\N{U+0442}",
      "\N{U+0426}\N{U+043f}\N{U+0440}",
      "\N{U+041c}\N{U+0440}\N{U+0431}",
      "\N{U+0421}\N{U+0431}\N{U+0442}",
      "\N{U+0425}\N{U+0446}\N{U+0431}"
    ],
    day_stand_alone_narrow => [
      "\N{U+041a}",
      "\N{U+0414}",
      "\N{U+04d4}",
      "\N{U+0426}",
      "\N{U+041c}",
      "\N{U+0421}",
      "\N{U+0425}"
    ],
    day_stand_alone_wide => [
      "\N{U+041a}\N{U+044a}\N{U+0443}\N{U+044b}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+04d5}\N{U+0440}",
      "\N{U+0414}\N{U+044b}\N{U+0446}\N{U+0446}\N{U+04d5}\N{U+0433}",
      "\N{U+04d4}\N{U+0440}\N{U+0442}\N{U+044b}\N{U+0446}\N{U+0446}\N{U+04d5}\N{U+0433}",
      "\N{U+0426}\N{U+044b}\N{U+043f}\N{U+043f}\N{U+04d5}\N{U+0440}\N{U+04d5}\N{U+043c}",
      "\N{U+041c}\N{U+0430}\N{U+0439}\N{U+0440}\N{U+04d5}\N{U+043c}\N{U+0431}\N{U+043e}\N{U+043d}",
      "\N{U+0421}\N{U+0430}\N{U+0431}\N{U+0430}\N{U+0442}",
      "\N{U+0425}\N{U+0443}\N{U+044b}\N{U+0446}\N{U+0430}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+043d}"
    ],
    era_abbreviated => [
      "\N{U+043d}.\N{U+0434}.\N{U+0430}.",
      "\N{U+043d}.\N{U+0434}."
    ],
    era_narrow => [
      "\N{U+043d}.\N{U+0434}.\N{U+0430}.",
      "\N{U+043d}.\N{U+0434}."
    ],
    era_wide => [
      "\N{U+043d}.\N{U+0434}.\N{U+0430}.",
      "\N{U+043d}.\N{U+0434}."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d %b %Y %T",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Ossetic",
    month_format_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}.",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0439}\N{U+044b}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044b}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_format_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_format_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044b}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044b}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+044a}\N{U+0438}\N{U+0439}\N{U+044b}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044b}",
      "\N{U+043c}\N{U+0430}\N{U+0439}\N{U+044b}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044b}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}\N{U+044b}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044b}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044b}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044b}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044b}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+042f}\N{U+043d}\N{U+0432}.",
      "\N{U+0424}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+041c}\N{U+0430}\N{U+0440}\N{U+0442}.",
      "\N{U+0410}\N{U+043f}\N{U+0440}.",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0418}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0410}\N{U+0432}\N{U+0433}.",
      "\N{U+0421}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+041e}\N{U+043a}\N{U+0442}.",
      "\N{U+041d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0414}\N{U+0435}\N{U+043a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_stand_alone_wide => [
      "\N{U+042f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0424}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+041c}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+044a}\N{U+0438}",
      "\N{U+0410}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0418}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0410}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0421}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+041e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+041d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0414}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    name => "Ossetic Russia",
    native_language => "\N{U+0438}\N{U+0440}\N{U+043e}\N{U+043d}",
    native_name => "\N{U+0438}\N{U+0440}\N{U+043e}\N{U+043d} \N{U+0423}\N{U+04d5}\N{U+0440}\N{U+04d5}\N{U+0441}\N{U+0435}",
    native_script => undef,
    native_territory => "\N{U+0423}\N{U+04d5}\N{U+0440}\N{U+04d5}\N{U+0441}\N{U+0435}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "4-\N{U+04d5}\N{U+043c} \N{U+043a}\N{U+0432}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+04d5}\N{U+043c} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}.",
      "4-\N{U+04d5}\N{U+043c} \N{U+043a}\N{U+0432}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0430}\N{U+0433} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+04d5}\N{U+043c} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => "Russia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ pa ]__
  {
    am_pm_abbreviated => [
      "\N{U+0a2a}\N{U+0a42}.\N{U+0a26}\N{U+0a41}.",
      "\N{U+0a2c}\N{U+0a3e}.\N{U+0a26}\N{U+0a41}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "MMM, G y",
      GyMMMEd => "E d MMM, G y",
      GyMMMd => "d MMM y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd-MM.",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "pa",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0a38}\N{U+0a4b}\N{U+0a2e}",
      "\N{U+0a2e}\N{U+0a70}\N{U+0a17}\N{U+0a32}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}\N{U+0a27}",
      "\N{U+0a35}\N{U+0a40}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}\N{U+0a15}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a28}\N{U+0a3f}\N{U+0a71}\N{U+0a1a}\N{U+0a30}",
      "\N{U+0a10}\N{U+0a24}"
    ],
    day_format_narrow => [
      "\N{U+0a38}\N{U+0a4b}",
      "\N{U+0a2e}\N{U+0a70}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}",
      "\N{U+0a35}\N{U+0a40}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}",
      "\N{U+0a38}\N{U+0a3c}",
      "\N{U+0a10}"
    ],
    day_format_wide => [
      "\N{U+0a38}\N{U+0a4b}\N{U+0a2e}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a2e}\N{U+0a70}\N{U+0a17}\N{U+0a32}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}\N{U+0a27}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a35}\N{U+0a40}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}\N{U+0a15}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a28}\N{U+0a3f}\N{U+0a71}\N{U+0a1a}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a10}\N{U+0a24}\N{U+0a35}\N{U+0a3e}\N{U+0a30}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0a38}\N{U+0a4b}\N{U+0a2e}",
      "\N{U+0a2e}\N{U+0a70}\N{U+0a17}\N{U+0a32}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}\N{U+0a27}",
      "\N{U+0a35}\N{U+0a40}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}\N{U+0a15}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a28}\N{U+0a3f}\N{U+0a71}\N{U+0a1a}\N{U+0a30}",
      "\N{U+0a10}\N{U+0a24}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0a38}\N{U+0a4b}",
      "\N{U+0a2e}\N{U+0a70}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}",
      "\N{U+0a35}\N{U+0a40}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}",
      "\N{U+0a38}\N{U+0a3c}",
      "\N{U+0a10}"
    ],
    day_stand_alone_wide => [
      "\N{U+0a38}\N{U+0a4b}\N{U+0a2e}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a2e}\N{U+0a70}\N{U+0a17}\N{U+0a32}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}\N{U+0a27}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a35}\N{U+0a40}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}\N{U+0a15}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a28}\N{U+0a3f}\N{U+0a71}\N{U+0a1a}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a10}\N{U+0a24}\N{U+0a35}\N{U+0a3e}\N{U+0a30}"
    ],
    era_abbreviated => [
      "\N{U+0a08}. \N{U+0a2a}\N{U+0a42}.",
      "\N{U+0a38}\N{U+0a70}\N{U+0a28}"
    ],
    era_narrow => [
      "\N{U+0a08}. \N{U+0a2a}\N{U+0a42}.",
      "\N{U+0a38}\N{U+0a70}\N{U+0a28}"
    ],
    era_wide => [
      "\N{U+0a08}\N{U+0a38}\N{U+0a35}\N{U+0a40} \N{U+0a2a}\N{U+0a42}\N{U+0a30}\N{U+0a35}",
      "\N{U+0a08}\N{U+0a38}\N{U+0a35}\N{U+0a40} \N{U+0a38}\N{U+0a70}\N{U+0a28}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Punjabi",
    month_format_abbreviated => [
      "\N{U+0a1c}\N{U+0a28}",
      "\N{U+0a2b}\N{U+0a3c}\N{U+0a30}",
      "\N{U+0a2e}\N{U+0a3e}\N{U+0a30}\N{U+0a1a}",
      "\N{U+0a05}\N{U+0a2a}\N{U+0a4d}\N{U+0a30}\N{U+0a48}",
      "\N{U+0a2e}\N{U+0a08}",
      "\N{U+0a1c}\N{U+0a42}\N{U+0a28}",
      "\N{U+0a1c}\N{U+0a41}\N{U+0a32}\N{U+0a3e}",
      "\N{U+0a05}\N{U+0a17}",
      "\N{U+0a38}\N{U+0a24}\N{U+0a70}",
      "\N{U+0a05}\N{U+0a15}\N{U+0a24}\N{U+0a42}",
      "\N{U+0a28}\N{U+0a35}\N{U+0a70}",
      "\N{U+0a26}\N{U+0a38}\N{U+0a70}"
    ],
    month_format_narrow => [
      "\N{U+0a1c}",
      "\N{U+0a2b}\N{U+0a3c}",
      "\N{U+0a2e}\N{U+0a3e}",
      "\N{U+0a05}",
      "\N{U+0a2e}",
      "\N{U+0a1c}\N{U+0a42}",
      "\N{U+0a1c}\N{U+0a41}",
      "\N{U+0a05}",
      "\N{U+0a38}",
      "\N{U+0a05}",
      "\N{U+0a28}",
      "\N{U+0a26}"
    ],
    month_format_wide => [
      "\N{U+0a1c}\N{U+0a28}\N{U+0a35}\N{U+0a30}\N{U+0a40}",
      "\N{U+0a2b}\N{U+0a3c}\N{U+0a30}\N{U+0a35}\N{U+0a30}\N{U+0a40}",
      "\N{U+0a2e}\N{U+0a3e}\N{U+0a30}\N{U+0a1a}",
      "\N{U+0a05}\N{U+0a2a}\N{U+0a4d}\N{U+0a30}\N{U+0a48}\N{U+0a32}",
      "\N{U+0a2e}\N{U+0a08}",
      "\N{U+0a1c}\N{U+0a42}\N{U+0a28}",
      "\N{U+0a1c}\N{U+0a41}\N{U+0a32}\N{U+0a3e}\N{U+0a08}",
      "\N{U+0a05}\N{U+0a17}\N{U+0a38}\N{U+0a24}",
      "\N{U+0a38}\N{U+0a24}\N{U+0a70}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a05}\N{U+0a15}\N{U+0a24}\N{U+0a42}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a28}\N{U+0a35}\N{U+0a70}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a26}\N{U+0a38}\N{U+0a70}\N{U+0a2c}\N{U+0a30}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0a1c}\N{U+0a28}",
      "\N{U+0a2b}\N{U+0a3c}\N{U+0a30}",
      "\N{U+0a2e}\N{U+0a3e}\N{U+0a30}\N{U+0a1a}",
      "\N{U+0a05}\N{U+0a2a}\N{U+0a4d}\N{U+0a30}\N{U+0a48}",
      "\N{U+0a2e}\N{U+0a08}",
      "\N{U+0a1c}\N{U+0a42}\N{U+0a28}",
      "\N{U+0a1c}\N{U+0a41}\N{U+0a32}\N{U+0a3e}",
      "\N{U+0a05}\N{U+0a17}",
      "\N{U+0a38}\N{U+0a24}\N{U+0a70}",
      "\N{U+0a05}\N{U+0a15}\N{U+0a24}\N{U+0a42}",
      "\N{U+0a28}\N{U+0a35}\N{U+0a70}",
      "\N{U+0a26}\N{U+0a38}\N{U+0a70}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0a1c}",
      "\N{U+0a2b}\N{U+0a3c}",
      "\N{U+0a2e}\N{U+0a3e}",
      "\N{U+0a05}",
      "\N{U+0a2e}",
      "\N{U+0a1c}\N{U+0a42}",
      "\N{U+0a1c}\N{U+0a41}",
      "\N{U+0a05}",
      "\N{U+0a38}",
      "\N{U+0a05}",
      "\N{U+0a28}",
      "\N{U+0a26}"
    ],
    month_stand_alone_wide => [
      "\N{U+0a1c}\N{U+0a28}\N{U+0a35}\N{U+0a30}\N{U+0a40}",
      "\N{U+0a2b}\N{U+0a3c}\N{U+0a30}\N{U+0a35}\N{U+0a30}\N{U+0a40}",
      "\N{U+0a2e}\N{U+0a3e}\N{U+0a30}\N{U+0a1a}",
      "\N{U+0a05}\N{U+0a2a}\N{U+0a4d}\N{U+0a30}\N{U+0a48}\N{U+0a32}",
      "\N{U+0a2e}\N{U+0a08}",
      "\N{U+0a1c}\N{U+0a42}\N{U+0a28}",
      "\N{U+0a1c}\N{U+0a41}\N{U+0a32}\N{U+0a3e}\N{U+0a08}",
      "\N{U+0a05}\N{U+0a17}\N{U+0a38}\N{U+0a24}",
      "\N{U+0a38}\N{U+0a24}\N{U+0a70}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a05}\N{U+0a15}\N{U+0a24}\N{U+0a42}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a28}\N{U+0a35}\N{U+0a70}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a26}\N{U+0a38}\N{U+0a70}\N{U+0a2c}\N{U+0a30}"
    ],
    name => "Punjabi",
    native_language => "\N{U+0a2a}\N{U+0a70}\N{U+0a1c}\N{U+0a3e}\N{U+0a2c}\N{U+0a40}",
    native_name => "\N{U+0a2a}\N{U+0a70}\N{U+0a1c}\N{U+0a3e}\N{U+0a2c}\N{U+0a40}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}1",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}2",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}3",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0a2a}\N{U+0a39}\N{U+0a3f}\N{U+0a32}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a26}\N{U+0a42}\N{U+0a1c}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a24}\N{U+0a40}\N{U+0a1c}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a1a}\N{U+0a4c}\N{U+0a25}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}1",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}2",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}3",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0a2a}\N{U+0a39}\N{U+0a3f}\N{U+0a32}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a26}\N{U+0a42}\N{U+0a1c}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a24}\N{U+0a40}\N{U+0a1c}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a1a}\N{U+0a4c}\N{U+0a25}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ pa-Arab ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      HHmmss => "HH:mm:ss",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "MMM y",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "y QQQQ"
    },
    code => "pa-Arab",
    date_format_full => "EEEE, dd MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+067e}\N{U+06cc}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+064f}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+067e}\N{U+06cc}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+064f}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+067e}\N{U+06cc}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+064f}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+067e}\N{U+06cc}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+064f}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    era_abbreviated => [
      "\N{U+0627}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+067e}\N{U+0648}\N{U+0631}\N{U+0648}",
      "\N{U+0633}\N{U+06ba}"
    ],
    era_narrow => [
      "\N{U+0627}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+067e}\N{U+0648}\N{U+0631}\N{U+0648}",
      "\N{U+0633}\N{U+06ba}"
    ],
    era_wide => [
      "\N{U+0627}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+067e}\N{U+0648}\N{U+0631}\N{U+0648}",
      "\N{U+0633}\N{U+06ba}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Punjabi",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Punjabi",
    native_language => "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0627}\N{U+0628}\N{U+06cc}",
    native_name => "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0627}\N{U+0628}\N{U+06cc}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+067e}\N{U+06c1}\N{U+0644}\N{U+0627}\N{U+06ba}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+062f}\N{U+0648}\N{U+062c}\N{U+0627}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+062a}\N{U+064a}\N{U+062c}\N{U+0627}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+067e}\N{U+06c1}\N{U+0644}\N{U+0627}\N{U+06ba}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+062f}\N{U+0648}\N{U+062c}\N{U+0627}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+062a}\N{U+064a}\N{U+062c}\N{U+0627}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+067e}\N{U+06c1}\N{U+0644}\N{U+0627}\N{U+06ba}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+062f}\N{U+0648}\N{U+062c}\N{U+0627}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+062a}\N{U+064a}\N{U+062c}\N{U+0627}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+067e}\N{U+06c1}\N{U+0644}\N{U+0627}\N{U+06ba}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+062f}\N{U+0648}\N{U+062c}\N{U+0627}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+062a}\N{U+064a}\N{U+062c}\N{U+0627}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ pa-Arab-PK ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      HHmmss => "HH:mm:ss",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "MMM y",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "y QQQQ"
    },
    code => "pa-Arab-PK",
    date_format_full => "EEEE, dd MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+067e}\N{U+06cc}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+064f}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+067e}\N{U+06cc}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+064f}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+067e}\N{U+06cc}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+064f}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+067e}\N{U+06cc}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+064f}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    era_abbreviated => [
      "\N{U+0627}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+067e}\N{U+0648}\N{U+0631}\N{U+0648}",
      "\N{U+0633}\N{U+06ba}"
    ],
    era_narrow => [
      "\N{U+0627}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+067e}\N{U+0648}\N{U+0631}\N{U+0648}",
      "\N{U+0633}\N{U+06ba}"
    ],
    era_wide => [
      "\N{U+0627}\N{U+064a}\N{U+0633}\N{U+0627}\N{U+067e}\N{U+0648}\N{U+0631}\N{U+0648}",
      "\N{U+0633}\N{U+06ba}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Punjabi",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Punjabi Pakistan Arabic",
    native_language => "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0627}\N{U+0628}\N{U+06cc}",
    native_name => "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0627}\N{U+0628}\N{U+06cc} \N{U+067e}\N{U+06a9}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646} \N{U+0639}\N{U+0631}\N{U+0628}\N{U+06cc}",
    native_script => "\N{U+0639}\N{U+0631}\N{U+0628}\N{U+06cc}",
    native_territory => "\N{U+067e}\N{U+06a9}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+067e}\N{U+06c1}\N{U+0644}\N{U+0627}\N{U+06ba}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+062f}\N{U+0648}\N{U+062c}\N{U+0627}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+062a}\N{U+064a}\N{U+062c}\N{U+0627}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+067e}\N{U+06c1}\N{U+0644}\N{U+0627}\N{U+06ba}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+062f}\N{U+0648}\N{U+062c}\N{U+0627}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+062a}\N{U+064a}\N{U+062c}\N{U+0627}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+067e}\N{U+06c1}\N{U+0644}\N{U+0627}\N{U+06ba}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+062f}\N{U+0648}\N{U+062c}\N{U+0627}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+062a}\N{U+064a}\N{U+062c}\N{U+0627}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+067e}\N{U+06c1}\N{U+0644}\N{U+0627}\N{U+06ba}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+062f}\N{U+0648}\N{U+062c}\N{U+0627}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+062a}\N{U+064a}\N{U+062c}\N{U+0627}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}\N{U+064a} \N{U+0686}\N{U+0648}\N{U+062a}\N{U+06be}\N{U+0627}"
    ],
    script => "Arabic",
    territory => "Pakistan",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ pa-Guru ]__
  {
    am_pm_abbreviated => [
      "\N{U+0a2a}\N{U+0a42}.\N{U+0a26}\N{U+0a41}.",
      "\N{U+0a2c}\N{U+0a3e}.\N{U+0a26}\N{U+0a41}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "MMM, G y",
      GyMMMEd => "E d MMM, G y",
      GyMMMd => "d MMM y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd-MM.",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "pa-Guru",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0a38}\N{U+0a4b}\N{U+0a2e}",
      "\N{U+0a2e}\N{U+0a70}\N{U+0a17}\N{U+0a32}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}\N{U+0a27}",
      "\N{U+0a35}\N{U+0a40}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}\N{U+0a15}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a28}\N{U+0a3f}\N{U+0a71}\N{U+0a1a}\N{U+0a30}",
      "\N{U+0a10}\N{U+0a24}"
    ],
    day_format_narrow => [
      "\N{U+0a38}\N{U+0a4b}",
      "\N{U+0a2e}\N{U+0a70}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}",
      "\N{U+0a35}\N{U+0a40}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}",
      "\N{U+0a38}\N{U+0a3c}",
      "\N{U+0a10}"
    ],
    day_format_wide => [
      "\N{U+0a38}\N{U+0a4b}\N{U+0a2e}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a2e}\N{U+0a70}\N{U+0a17}\N{U+0a32}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}\N{U+0a27}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a35}\N{U+0a40}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}\N{U+0a15}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a28}\N{U+0a3f}\N{U+0a71}\N{U+0a1a}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a10}\N{U+0a24}\N{U+0a35}\N{U+0a3e}\N{U+0a30}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0a38}\N{U+0a4b}\N{U+0a2e}",
      "\N{U+0a2e}\N{U+0a70}\N{U+0a17}\N{U+0a32}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}\N{U+0a27}",
      "\N{U+0a35}\N{U+0a40}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}\N{U+0a15}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a28}\N{U+0a3f}\N{U+0a71}\N{U+0a1a}\N{U+0a30}",
      "\N{U+0a10}\N{U+0a24}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0a38}\N{U+0a4b}",
      "\N{U+0a2e}\N{U+0a70}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}",
      "\N{U+0a35}\N{U+0a40}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}",
      "\N{U+0a38}\N{U+0a3c}",
      "\N{U+0a10}"
    ],
    day_stand_alone_wide => [
      "\N{U+0a38}\N{U+0a4b}\N{U+0a2e}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a2e}\N{U+0a70}\N{U+0a17}\N{U+0a32}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}\N{U+0a27}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a35}\N{U+0a40}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}\N{U+0a15}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a28}\N{U+0a3f}\N{U+0a71}\N{U+0a1a}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a10}\N{U+0a24}\N{U+0a35}\N{U+0a3e}\N{U+0a30}"
    ],
    era_abbreviated => [
      "\N{U+0a08}. \N{U+0a2a}\N{U+0a42}.",
      "\N{U+0a38}\N{U+0a70}\N{U+0a28}"
    ],
    era_narrow => [
      "\N{U+0a08}. \N{U+0a2a}\N{U+0a42}.",
      "\N{U+0a38}\N{U+0a70}\N{U+0a28}"
    ],
    era_wide => [
      "\N{U+0a08}\N{U+0a38}\N{U+0a35}\N{U+0a40} \N{U+0a2a}\N{U+0a42}\N{U+0a30}\N{U+0a35}",
      "\N{U+0a08}\N{U+0a38}\N{U+0a35}\N{U+0a40} \N{U+0a38}\N{U+0a70}\N{U+0a28}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Punjabi",
    month_format_abbreviated => [
      "\N{U+0a1c}\N{U+0a28}",
      "\N{U+0a2b}\N{U+0a3c}\N{U+0a30}",
      "\N{U+0a2e}\N{U+0a3e}\N{U+0a30}\N{U+0a1a}",
      "\N{U+0a05}\N{U+0a2a}\N{U+0a4d}\N{U+0a30}\N{U+0a48}",
      "\N{U+0a2e}\N{U+0a08}",
      "\N{U+0a1c}\N{U+0a42}\N{U+0a28}",
      "\N{U+0a1c}\N{U+0a41}\N{U+0a32}\N{U+0a3e}",
      "\N{U+0a05}\N{U+0a17}",
      "\N{U+0a38}\N{U+0a24}\N{U+0a70}",
      "\N{U+0a05}\N{U+0a15}\N{U+0a24}\N{U+0a42}",
      "\N{U+0a28}\N{U+0a35}\N{U+0a70}",
      "\N{U+0a26}\N{U+0a38}\N{U+0a70}"
    ],
    month_format_narrow => [
      "\N{U+0a1c}",
      "\N{U+0a2b}\N{U+0a3c}",
      "\N{U+0a2e}\N{U+0a3e}",
      "\N{U+0a05}",
      "\N{U+0a2e}",
      "\N{U+0a1c}\N{U+0a42}",
      "\N{U+0a1c}\N{U+0a41}",
      "\N{U+0a05}",
      "\N{U+0a38}",
      "\N{U+0a05}",
      "\N{U+0a28}",
      "\N{U+0a26}"
    ],
    month_format_wide => [
      "\N{U+0a1c}\N{U+0a28}\N{U+0a35}\N{U+0a30}\N{U+0a40}",
      "\N{U+0a2b}\N{U+0a3c}\N{U+0a30}\N{U+0a35}\N{U+0a30}\N{U+0a40}",
      "\N{U+0a2e}\N{U+0a3e}\N{U+0a30}\N{U+0a1a}",
      "\N{U+0a05}\N{U+0a2a}\N{U+0a4d}\N{U+0a30}\N{U+0a48}\N{U+0a32}",
      "\N{U+0a2e}\N{U+0a08}",
      "\N{U+0a1c}\N{U+0a42}\N{U+0a28}",
      "\N{U+0a1c}\N{U+0a41}\N{U+0a32}\N{U+0a3e}\N{U+0a08}",
      "\N{U+0a05}\N{U+0a17}\N{U+0a38}\N{U+0a24}",
      "\N{U+0a38}\N{U+0a24}\N{U+0a70}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a05}\N{U+0a15}\N{U+0a24}\N{U+0a42}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a28}\N{U+0a35}\N{U+0a70}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a26}\N{U+0a38}\N{U+0a70}\N{U+0a2c}\N{U+0a30}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0a1c}\N{U+0a28}",
      "\N{U+0a2b}\N{U+0a3c}\N{U+0a30}",
      "\N{U+0a2e}\N{U+0a3e}\N{U+0a30}\N{U+0a1a}",
      "\N{U+0a05}\N{U+0a2a}\N{U+0a4d}\N{U+0a30}\N{U+0a48}",
      "\N{U+0a2e}\N{U+0a08}",
      "\N{U+0a1c}\N{U+0a42}\N{U+0a28}",
      "\N{U+0a1c}\N{U+0a41}\N{U+0a32}\N{U+0a3e}",
      "\N{U+0a05}\N{U+0a17}",
      "\N{U+0a38}\N{U+0a24}\N{U+0a70}",
      "\N{U+0a05}\N{U+0a15}\N{U+0a24}\N{U+0a42}",
      "\N{U+0a28}\N{U+0a35}\N{U+0a70}",
      "\N{U+0a26}\N{U+0a38}\N{U+0a70}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0a1c}",
      "\N{U+0a2b}\N{U+0a3c}",
      "\N{U+0a2e}\N{U+0a3e}",
      "\N{U+0a05}",
      "\N{U+0a2e}",
      "\N{U+0a1c}\N{U+0a42}",
      "\N{U+0a1c}\N{U+0a41}",
      "\N{U+0a05}",
      "\N{U+0a38}",
      "\N{U+0a05}",
      "\N{U+0a28}",
      "\N{U+0a26}"
    ],
    month_stand_alone_wide => [
      "\N{U+0a1c}\N{U+0a28}\N{U+0a35}\N{U+0a30}\N{U+0a40}",
      "\N{U+0a2b}\N{U+0a3c}\N{U+0a30}\N{U+0a35}\N{U+0a30}\N{U+0a40}",
      "\N{U+0a2e}\N{U+0a3e}\N{U+0a30}\N{U+0a1a}",
      "\N{U+0a05}\N{U+0a2a}\N{U+0a4d}\N{U+0a30}\N{U+0a48}\N{U+0a32}",
      "\N{U+0a2e}\N{U+0a08}",
      "\N{U+0a1c}\N{U+0a42}\N{U+0a28}",
      "\N{U+0a1c}\N{U+0a41}\N{U+0a32}\N{U+0a3e}\N{U+0a08}",
      "\N{U+0a05}\N{U+0a17}\N{U+0a38}\N{U+0a24}",
      "\N{U+0a38}\N{U+0a24}\N{U+0a70}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a05}\N{U+0a15}\N{U+0a24}\N{U+0a42}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a28}\N{U+0a35}\N{U+0a70}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a26}\N{U+0a38}\N{U+0a70}\N{U+0a2c}\N{U+0a30}"
    ],
    name => "Punjabi",
    native_language => "\N{U+0a2a}\N{U+0a70}\N{U+0a1c}\N{U+0a3e}\N{U+0a2c}\N{U+0a40}",
    native_name => "\N{U+0a2a}\N{U+0a70}\N{U+0a1c}\N{U+0a3e}\N{U+0a2c}\N{U+0a40}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}1",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}2",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}3",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0a2a}\N{U+0a39}\N{U+0a3f}\N{U+0a32}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a26}\N{U+0a42}\N{U+0a1c}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a24}\N{U+0a40}\N{U+0a1c}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a1a}\N{U+0a4c}\N{U+0a25}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}1",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}2",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}3",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0a2a}\N{U+0a39}\N{U+0a3f}\N{U+0a32}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a26}\N{U+0a42}\N{U+0a1c}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a24}\N{U+0a40}\N{U+0a1c}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a1a}\N{U+0a4c}\N{U+0a25}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ pa-Guru-IN ]__
  {
    am_pm_abbreviated => [
      "\N{U+0a2a}\N{U+0a42}.\N{U+0a26}\N{U+0a41}.",
      "\N{U+0a2c}\N{U+0a3e}.\N{U+0a26}\N{U+0a41}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "MMM, G y",
      GyMMMEd => "E d MMM, G y",
      GyMMMd => "d MMM y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd-MM.",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "pa-Guru-IN",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0a38}\N{U+0a4b}\N{U+0a2e}",
      "\N{U+0a2e}\N{U+0a70}\N{U+0a17}\N{U+0a32}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}\N{U+0a27}",
      "\N{U+0a35}\N{U+0a40}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}\N{U+0a15}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a28}\N{U+0a3f}\N{U+0a71}\N{U+0a1a}\N{U+0a30}",
      "\N{U+0a10}\N{U+0a24}"
    ],
    day_format_narrow => [
      "\N{U+0a38}\N{U+0a4b}",
      "\N{U+0a2e}\N{U+0a70}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}",
      "\N{U+0a35}\N{U+0a40}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}",
      "\N{U+0a38}\N{U+0a3c}",
      "\N{U+0a10}"
    ],
    day_format_wide => [
      "\N{U+0a38}\N{U+0a4b}\N{U+0a2e}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a2e}\N{U+0a70}\N{U+0a17}\N{U+0a32}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}\N{U+0a27}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a35}\N{U+0a40}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}\N{U+0a15}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a28}\N{U+0a3f}\N{U+0a71}\N{U+0a1a}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a10}\N{U+0a24}\N{U+0a35}\N{U+0a3e}\N{U+0a30}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0a38}\N{U+0a4b}\N{U+0a2e}",
      "\N{U+0a2e}\N{U+0a70}\N{U+0a17}\N{U+0a32}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}\N{U+0a27}",
      "\N{U+0a35}\N{U+0a40}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}\N{U+0a15}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a28}\N{U+0a3f}\N{U+0a71}\N{U+0a1a}\N{U+0a30}",
      "\N{U+0a10}\N{U+0a24}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0a38}\N{U+0a4b}",
      "\N{U+0a2e}\N{U+0a70}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}",
      "\N{U+0a35}\N{U+0a40}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}",
      "\N{U+0a38}\N{U+0a3c}",
      "\N{U+0a10}"
    ],
    day_stand_alone_wide => [
      "\N{U+0a38}\N{U+0a4b}\N{U+0a2e}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a2e}\N{U+0a70}\N{U+0a17}\N{U+0a32}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a2c}\N{U+0a41}\N{U+0a71}\N{U+0a27}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a35}\N{U+0a40}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a41}\N{U+0a71}\N{U+0a15}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a38}\N{U+0a3c}\N{U+0a28}\N{U+0a3f}\N{U+0a71}\N{U+0a1a}\N{U+0a30}\N{U+0a35}\N{U+0a3e}\N{U+0a30}",
      "\N{U+0a10}\N{U+0a24}\N{U+0a35}\N{U+0a3e}\N{U+0a30}"
    ],
    era_abbreviated => [
      "\N{U+0a08}. \N{U+0a2a}\N{U+0a42}.",
      "\N{U+0a38}\N{U+0a70}\N{U+0a28}"
    ],
    era_narrow => [
      "\N{U+0a08}. \N{U+0a2a}\N{U+0a42}.",
      "\N{U+0a38}\N{U+0a70}\N{U+0a28}"
    ],
    era_wide => [
      "\N{U+0a08}\N{U+0a38}\N{U+0a35}\N{U+0a40} \N{U+0a2a}\N{U+0a42}\N{U+0a30}\N{U+0a35}",
      "\N{U+0a08}\N{U+0a38}\N{U+0a35}\N{U+0a40} \N{U+0a38}\N{U+0a70}\N{U+0a28}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Punjabi",
    month_format_abbreviated => [
      "\N{U+0a1c}\N{U+0a28}",
      "\N{U+0a2b}\N{U+0a3c}\N{U+0a30}",
      "\N{U+0a2e}\N{U+0a3e}\N{U+0a30}\N{U+0a1a}",
      "\N{U+0a05}\N{U+0a2a}\N{U+0a4d}\N{U+0a30}\N{U+0a48}",
      "\N{U+0a2e}\N{U+0a08}",
      "\N{U+0a1c}\N{U+0a42}\N{U+0a28}",
      "\N{U+0a1c}\N{U+0a41}\N{U+0a32}\N{U+0a3e}",
      "\N{U+0a05}\N{U+0a17}",
      "\N{U+0a38}\N{U+0a24}\N{U+0a70}",
      "\N{U+0a05}\N{U+0a15}\N{U+0a24}\N{U+0a42}",
      "\N{U+0a28}\N{U+0a35}\N{U+0a70}",
      "\N{U+0a26}\N{U+0a38}\N{U+0a70}"
    ],
    month_format_narrow => [
      "\N{U+0a1c}",
      "\N{U+0a2b}\N{U+0a3c}",
      "\N{U+0a2e}\N{U+0a3e}",
      "\N{U+0a05}",
      "\N{U+0a2e}",
      "\N{U+0a1c}\N{U+0a42}",
      "\N{U+0a1c}\N{U+0a41}",
      "\N{U+0a05}",
      "\N{U+0a38}",
      "\N{U+0a05}",
      "\N{U+0a28}",
      "\N{U+0a26}"
    ],
    month_format_wide => [
      "\N{U+0a1c}\N{U+0a28}\N{U+0a35}\N{U+0a30}\N{U+0a40}",
      "\N{U+0a2b}\N{U+0a3c}\N{U+0a30}\N{U+0a35}\N{U+0a30}\N{U+0a40}",
      "\N{U+0a2e}\N{U+0a3e}\N{U+0a30}\N{U+0a1a}",
      "\N{U+0a05}\N{U+0a2a}\N{U+0a4d}\N{U+0a30}\N{U+0a48}\N{U+0a32}",
      "\N{U+0a2e}\N{U+0a08}",
      "\N{U+0a1c}\N{U+0a42}\N{U+0a28}",
      "\N{U+0a1c}\N{U+0a41}\N{U+0a32}\N{U+0a3e}\N{U+0a08}",
      "\N{U+0a05}\N{U+0a17}\N{U+0a38}\N{U+0a24}",
      "\N{U+0a38}\N{U+0a24}\N{U+0a70}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a05}\N{U+0a15}\N{U+0a24}\N{U+0a42}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a28}\N{U+0a35}\N{U+0a70}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a26}\N{U+0a38}\N{U+0a70}\N{U+0a2c}\N{U+0a30}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0a1c}\N{U+0a28}",
      "\N{U+0a2b}\N{U+0a3c}\N{U+0a30}",
      "\N{U+0a2e}\N{U+0a3e}\N{U+0a30}\N{U+0a1a}",
      "\N{U+0a05}\N{U+0a2a}\N{U+0a4d}\N{U+0a30}\N{U+0a48}",
      "\N{U+0a2e}\N{U+0a08}",
      "\N{U+0a1c}\N{U+0a42}\N{U+0a28}",
      "\N{U+0a1c}\N{U+0a41}\N{U+0a32}\N{U+0a3e}",
      "\N{U+0a05}\N{U+0a17}",
      "\N{U+0a38}\N{U+0a24}\N{U+0a70}",
      "\N{U+0a05}\N{U+0a15}\N{U+0a24}\N{U+0a42}",
      "\N{U+0a28}\N{U+0a35}\N{U+0a70}",
      "\N{U+0a26}\N{U+0a38}\N{U+0a70}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0a1c}",
      "\N{U+0a2b}\N{U+0a3c}",
      "\N{U+0a2e}\N{U+0a3e}",
      "\N{U+0a05}",
      "\N{U+0a2e}",
      "\N{U+0a1c}\N{U+0a42}",
      "\N{U+0a1c}\N{U+0a41}",
      "\N{U+0a05}",
      "\N{U+0a38}",
      "\N{U+0a05}",
      "\N{U+0a28}",
      "\N{U+0a26}"
    ],
    month_stand_alone_wide => [
      "\N{U+0a1c}\N{U+0a28}\N{U+0a35}\N{U+0a30}\N{U+0a40}",
      "\N{U+0a2b}\N{U+0a3c}\N{U+0a30}\N{U+0a35}\N{U+0a30}\N{U+0a40}",
      "\N{U+0a2e}\N{U+0a3e}\N{U+0a30}\N{U+0a1a}",
      "\N{U+0a05}\N{U+0a2a}\N{U+0a4d}\N{U+0a30}\N{U+0a48}\N{U+0a32}",
      "\N{U+0a2e}\N{U+0a08}",
      "\N{U+0a1c}\N{U+0a42}\N{U+0a28}",
      "\N{U+0a1c}\N{U+0a41}\N{U+0a32}\N{U+0a3e}\N{U+0a08}",
      "\N{U+0a05}\N{U+0a17}\N{U+0a38}\N{U+0a24}",
      "\N{U+0a38}\N{U+0a24}\N{U+0a70}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a05}\N{U+0a15}\N{U+0a24}\N{U+0a42}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a28}\N{U+0a35}\N{U+0a70}\N{U+0a2c}\N{U+0a30}",
      "\N{U+0a26}\N{U+0a38}\N{U+0a70}\N{U+0a2c}\N{U+0a30}"
    ],
    name => "Punjabi India Gurmukhi",
    native_language => "\N{U+0a2a}\N{U+0a70}\N{U+0a1c}\N{U+0a3e}\N{U+0a2c}\N{U+0a40}",
    native_name => "\N{U+0a2a}\N{U+0a70}\N{U+0a1c}\N{U+0a3e}\N{U+0a2c}\N{U+0a40} \N{U+0a2d}\N{U+0a3e}\N{U+0a30}\N{U+0a24} \N{U+0a17}\N{U+0a41}\N{U+0a30}\N{U+0a2e}\N{U+0a41}\N{U+0a16}\N{U+0a40}",
    native_script => "\N{U+0a17}\N{U+0a41}\N{U+0a30}\N{U+0a2e}\N{U+0a41}\N{U+0a16}\N{U+0a40}",
    native_territory => "\N{U+0a2d}\N{U+0a3e}\N{U+0a30}\N{U+0a24}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}1",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}2",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}3",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0a2a}\N{U+0a39}\N{U+0a3f}\N{U+0a32}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a26}\N{U+0a42}\N{U+0a1c}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a24}\N{U+0a40}\N{U+0a1c}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a1a}\N{U+0a4c}\N{U+0a25}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}1",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}2",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}3",
      "\N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0a2a}\N{U+0a39}\N{U+0a3f}\N{U+0a32}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a26}\N{U+0a42}\N{U+0a1c}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a24}\N{U+0a40}\N{U+0a1c}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}",
      "\N{U+0a1a}\N{U+0a4c}\N{U+0a25}\N{U+0a40} \N{U+0a24}\N{U+0a3f}\N{U+0a2e}\N{U+0a3e}\N{U+0a39}\N{U+0a40}"
    ],
    script => "Gurmukhi",
    territory => "India",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ pl ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "LLLL y G",
      GyMMMMEd => "E, d MMMM y G",
      GyMMMMd => "d MMMM y G",
      GyMMMd => "d.MM.y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.MM",
      MMM => "LLL",
      MMMEd => "E, d.MM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d.MM",
      Md => "d.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "E, d.MM.y",
      yMMM => "MM.y",
      yMMMEd => "E, d.MM.y",
      yMMMM => "LLLL y",
      yMMMMEd => "E, d MMMM y",
      yMMMMd => "d MMMM y",
      yMMMd => "d.MM.y",
      yMd => "d.MM.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "pl",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "dd.MM.y",
    date_format_short => "dd.MM.y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "pon.",
      "wt.",
      "\N{U+015b}r.",
      "czw.",
      "pt.",
      "sob.",
      "niedz."
    ],
    day_format_narrow => [
      "P",
      "W",
      "\N{U+015a}",
      "C",
      "P",
      "S",
      "N"
    ],
    day_format_wide => [
      "poniedzia\N{U+0142}ek",
      "wtorek",
      "\N{U+015b}roda",
      "czwartek",
      "pi\N{U+0105}tek",
      "sobota",
      "niedziela"
    ],
    day_stand_alone_abbreviated => [
      "pon.",
      "wt.",
      "\N{U+015b}r.",
      "czw.",
      "pt.",
      "sob.",
      "niedz."
    ],
    day_stand_alone_narrow => [
      "P",
      "W",
      "\N{U+015a}",
      "C",
      "P",
      "S",
      "N"
    ],
    day_stand_alone_wide => [
      "poniedzia\N{U+0142}ek",
      "wtorek",
      "\N{U+015b}roda",
      "czwartek",
      "pi\N{U+0105}tek",
      "sobota",
      "niedziela"
    ],
    era_abbreviated => [
      "p.n.e.",
      "n.e."
    ],
    era_narrow => [
      "p.n.e.",
      "n.e."
    ],
    era_wide => [
      "p.n.e.",
      "n.e."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Polish",
    month_format_abbreviated => [
      "sty",
      "lut",
      "mar",
      "kwi",
      "maj",
      "cze",
      "lip",
      "sie",
      "wrz",
      "pa\N{U+017a}",
      "lis",
      "gru"
    ],
    month_format_narrow => [
      "s",
      "l",
      "m",
      "k",
      "m",
      "c",
      "l",
      "s",
      "w",
      "p",
      "l",
      "g"
    ],
    month_format_wide => [
      "stycznia",
      "lutego",
      "marca",
      "kwietnia",
      "maja",
      "czerwca",
      "lipca",
      "sierpnia",
      "wrze\N{U+015b}nia",
      "pa\N{U+017a}dziernika",
      "listopada",
      "grudnia"
    ],
    month_stand_alone_abbreviated => [
      "sty",
      "lut",
      "mar",
      "kwi",
      "maj",
      "cze",
      "lip",
      "sie",
      "wrz",
      "pa\N{U+017a}",
      "lis",
      "gru"
    ],
    month_stand_alone_narrow => [
      "s",
      "l",
      "m",
      "k",
      "m",
      "c",
      "l",
      "s",
      "w",
      "p",
      "l",
      "g"
    ],
    month_stand_alone_wide => [
      "stycze\N{U+0144}",
      "luty",
      "marzec",
      "kwiecie\N{U+0144}",
      "maj",
      "czerwiec",
      "lipiec",
      "sierpie\N{U+0144}",
      "wrzesie\N{U+0144}",
      "pa\N{U+017a}dziernik",
      "listopad",
      "grudzie\N{U+0144}"
    ],
    name => "Polish",
    native_language => "polski",
    native_name => "polski",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "I kwarta\N{U+0142}",
      "II kwarta\N{U+0142}",
      "III kwarta\N{U+0142}",
      "IV kwarta\N{U+0142}"
    ],
    quarter_stand_alone_abbreviated => [
      "1 kw.",
      "2 kw.",
      "3 kw.",
      "4 kw."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "I kwarta\N{U+0142}",
      "II kwarta\N{U+0142}",
      "III kwarta\N{U+0142}",
      "IV kwarta\N{U+0142}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ pl-PL ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMM => "LLLL y G",
      GyMMMMEd => "E, d MMMM y G",
      GyMMMMd => "d MMMM y G",
      GyMMMd => "d.MM.y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.MM",
      MMM => "LLL",
      MMMEd => "E, d.MM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d.MM",
      Md => "d.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "E, d.MM.y",
      yMMM => "MM.y",
      yMMMEd => "E, d.MM.y",
      yMMMM => "LLLL y",
      yMMMMEd => "E, d MMMM y",
      yMMMMd => "d MMMM y",
      yMMMd => "d.MM.y",
      yMd => "d.MM.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "pl-PL",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "dd.MM.y",
    date_format_short => "dd.MM.y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "pon.",
      "wt.",
      "\N{U+015b}r.",
      "czw.",
      "pt.",
      "sob.",
      "niedz."
    ],
    day_format_narrow => [
      "P",
      "W",
      "\N{U+015a}",
      "C",
      "P",
      "S",
      "N"
    ],
    day_format_wide => [
      "poniedzia\N{U+0142}ek",
      "wtorek",
      "\N{U+015b}roda",
      "czwartek",
      "pi\N{U+0105}tek",
      "sobota",
      "niedziela"
    ],
    day_stand_alone_abbreviated => [
      "pon.",
      "wt.",
      "\N{U+015b}r.",
      "czw.",
      "pt.",
      "sob.",
      "niedz."
    ],
    day_stand_alone_narrow => [
      "P",
      "W",
      "\N{U+015a}",
      "C",
      "P",
      "S",
      "N"
    ],
    day_stand_alone_wide => [
      "poniedzia\N{U+0142}ek",
      "wtorek",
      "\N{U+015b}roda",
      "czwartek",
      "pi\N{U+0105}tek",
      "sobota",
      "niedziela"
    ],
    era_abbreviated => [
      "p.n.e.",
      "n.e."
    ],
    era_narrow => [
      "p.n.e.",
      "n.e."
    ],
    era_wide => [
      "p.n.e.",
      "n.e."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a, %-d %b %Y, %T %Z",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a, %-d %b %Y, %T",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Polish",
    month_format_abbreviated => [
      "sty",
      "lut",
      "mar",
      "kwi",
      "maj",
      "cze",
      "lip",
      "sie",
      "wrz",
      "pa\N{U+017a}",
      "lis",
      "gru"
    ],
    month_format_narrow => [
      "s",
      "l",
      "m",
      "k",
      "m",
      "c",
      "l",
      "s",
      "w",
      "p",
      "l",
      "g"
    ],
    month_format_wide => [
      "stycznia",
      "lutego",
      "marca",
      "kwietnia",
      "maja",
      "czerwca",
      "lipca",
      "sierpnia",
      "wrze\N{U+015b}nia",
      "pa\N{U+017a}dziernika",
      "listopada",
      "grudnia"
    ],
    month_stand_alone_abbreviated => [
      "sty",
      "lut",
      "mar",
      "kwi",
      "maj",
      "cze",
      "lip",
      "sie",
      "wrz",
      "pa\N{U+017a}",
      "lis",
      "gru"
    ],
    month_stand_alone_narrow => [
      "s",
      "l",
      "m",
      "k",
      "m",
      "c",
      "l",
      "s",
      "w",
      "p",
      "l",
      "g"
    ],
    month_stand_alone_wide => [
      "stycze\N{U+0144}",
      "luty",
      "marzec",
      "kwiecie\N{U+0144}",
      "maj",
      "czerwiec",
      "lipiec",
      "sierpie\N{U+0144}",
      "wrzesie\N{U+0144}",
      "pa\N{U+017a}dziernik",
      "listopad",
      "grudzie\N{U+0144}"
    ],
    name => "Polish Poland",
    native_language => "polski",
    native_name => "polski Polska",
    native_script => undef,
    native_territory => "Polska",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "I kwarta\N{U+0142}",
      "II kwarta\N{U+0142}",
      "III kwarta\N{U+0142}",
      "IV kwarta\N{U+0142}"
    ],
    quarter_stand_alone_abbreviated => [
      "1 kw.",
      "2 kw.",
      "3 kw.",
      "4 kw."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "I kwarta\N{U+0142}",
      "II kwarta\N{U+0142}",
      "III kwarta\N{U+0142}",
      "IV kwarta\N{U+0142}"
    ],
    script => undef,
    territory => "Poland",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ prg ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "prg",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Prussian",
    month_format_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    name => "Prussian",
    native_language => "pr\N{U+016b}siskan",
    native_name => "pr\N{U+016b}siskan",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ prg-001 ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "prg-001",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Prussian",
    month_format_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    name => "Prussian World",
    native_language => "pr\N{U+016b}siskan",
    native_name => "pr\N{U+016b}siskan 001",
    native_script => undef,
    native_territory => "001",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "World",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ps ]__
  {
    am_pm_abbreviated => [
      "\N{U+063a}.\N{U+0645}.",
      "\N{U+063a}.\N{U+0648}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "ps",
    date_format_full => "EEEE \N{U+062f} y \N{U+062f} MMMM d",
    date_format_long => "\N{U+062f} y \N{U+062f} MMMM d",
    date_format_medium => "d MMM y",
    date_format_short => "y/M/d",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}.",
      "\N{U+0645}."
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}.",
      "\N{U+0645}."
    ],
    era_wide => [
      "\N{U+0642}.\N{U+0645}.",
      "\N{U+0645}."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Pashto",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+064a}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+064a}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+06cc}",
      "\N{U+0627}\N{U+06ab}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+064a}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+064a}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+06cc}",
      "\N{U+0627}\N{U+06ab}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+064a}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+064a}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+06cc}",
      "\N{U+0627}\N{U+06ab}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+064a}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+064a}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+06cc}",
      "\N{U+0627}\N{U+06ab}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Pashto",
    native_language => "\N{U+067e}\N{U+069a}\N{U+062a}\N{U+0648}",
    native_name => "\N{U+067e}\N{U+069a}\N{U+062a}\N{U+0648}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H:mm:ss (zzzz)",
    time_format_long => "H:mm:ss (z)",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ ps-AF ]__
  {
    am_pm_abbreviated => [
      "\N{U+063a}.\N{U+0645}.",
      "\N{U+063a}.\N{U+0648}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "ps-AF",
    date_format_full => "EEEE \N{U+062f} y \N{U+062f} MMMM d",
    date_format_long => "\N{U+062f} y \N{U+062f} MMMM d",
    date_format_medium => "d MMM y",
    date_format_short => "y/M/d",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    era_abbreviated => [
      "\N{U+0642}.\N{U+0645}.",
      "\N{U+0645}."
    ],
    era_narrow => [
      "\N{U+0642}.\N{U+0645}.",
      "\N{U+0645}."
    ],
    era_wide => [
      "\N{U+0642}.\N{U+0645}.",
      "\N{U+0645}."
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Pashto",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+064a}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+064a}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+06cc}",
      "\N{U+0627}\N{U+06ab}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+064a}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+064a}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+06cc}",
      "\N{U+0627}\N{U+06ab}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+064a}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+064a}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+06cc}",
      "\N{U+0627}\N{U+06ab}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+064a}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+064a}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+06cc}",
      "\N{U+0627}\N{U+06ab}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Pashto Afghanistan",
    native_language => "\N{U+067e}\N{U+069a}\N{U+062a}\N{U+0648}",
    native_name => "\N{U+067e}\N{U+069a}\N{U+062a}\N{U+0648} \N{U+0627}\N{U+0641}\N{U+063a}\N{U+0627}\N{U+0646}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646}",
    native_script => undef,
    native_territory => "\N{U+0627}\N{U+0641}\N{U+063a}\N{U+0627}\N{U+0646}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Afghanistan",
    time_format_full => "H:mm:ss (zzzz)",
    time_format_long => "H:mm:ss (z)",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ pt ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM 'de' y G",
      GyMMMEd => "E, d 'de' MMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d 'de' MMM",
      MMMMEd => "E, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d 'de' MMM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMM => "MM/y",
      yMMM => "MMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "E, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d 'de' MMM 'de' y",
      yMd => "dd/MM/y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "pt",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d 'de' MMM 'de' y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "seg",
      "ter",
      "qua",
      "qui",
      "sex",
      "s\N{U+00e1}b",
      "dom"
    ],
    day_format_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_format_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "seg",
      "ter",
      "qua",
      "qui",
      "sex",
      "s\N{U+00e1}b",
      "dom"
    ],
    day_stand_alone_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "a.C.",
      "d.C."
    ],
    era_wide => [
      "antes de Cristo",
      "depois de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Portuguese",
    month_format_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    name => "Portuguese",
    native_language => "portugu\N{U+00ea}s",
    native_name => "portugu\N{U+00ea}s",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+00ba} trimestre",
      "2\N{U+00ba} trimestre",
      "3\N{U+00ba} trimestre",
      "4\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+00ba} trimestre",
      "2\N{U+00ba} trimestre",
      "3\N{U+00ba} trimestre",
      "4\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ pt-AO ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM 'de' y G",
      GyMMMEd => "E, d 'de' MMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d/MM",
      MMMMEd => "ccc, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d/MM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMM => "MM/y",
      yMMM => "MM/y",
      yMMMEEEEd => "EEEE, d/MM/y",
      yMMMEd => "E, d/MM/y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "ccc, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d/MM/y",
      yMd => "dd/MM/y",
      yQQQ => "QQQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "pt-AO",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "dd/MM/y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} '\N{U+00e0}s' {0}",
    datetime_format_long => "{1} '\N{U+00e0}s' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_format_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_format_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "a.C.",
      "d.C."
    ],
    era_wide => [
      "antes de Cristo",
      "depois de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d-%m-%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Portuguese",
    month_format_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    name => "Portuguese Angola",
    native_language => "portugu\N{U+00ea}s",
    native_name => "portugu\N{U+00ea}s Angola",
    native_script => undef,
    native_territory => "Angola",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Angola",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ pt-CH ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM 'de' y G",
      GyMMMEd => "E, d 'de' MMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d/MM",
      MMMMEd => "ccc, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d/MM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMM => "MM/y",
      yMMM => "MM/y",
      yMMMEEEEd => "EEEE, d/MM/y",
      yMMMEd => "E, d/MM/y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "ccc, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d/MM/y",
      yMd => "dd/MM/y",
      yQQQ => "QQQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "pt-CH",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "dd/MM/y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} '\N{U+00e0}s' {0}",
    datetime_format_long => "{1} '\N{U+00e0}s' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_format_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_format_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "a.C.",
      "d.C."
    ],
    era_wide => [
      "antes de Cristo",
      "depois de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d-%m-%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Portuguese",
    month_format_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    name => "Portuguese Switzerland",
    native_language => "portugu\N{U+00ea}s",
    native_name => "portugu\N{U+00ea}s Su\N{U+00ed}\N{U+00e7}a",
    native_script => undef,
    native_territory => "Su\N{U+00ed}\N{U+00e7}a",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Switzerland",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ pt-CV ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM 'de' y G",
      GyMMMEd => "E, d 'de' MMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d/MM",
      MMMMEd => "ccc, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d/MM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMM => "MM/y",
      yMMM => "MM/y",
      yMMMEEEEd => "EEEE, d/MM/y",
      yMMMEd => "E, d/MM/y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "ccc, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d/MM/y",
      yMd => "dd/MM/y",
      yQQQ => "QQQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "pt-CV",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "dd/MM/y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} '\N{U+00e0}s' {0}",
    datetime_format_long => "{1} '\N{U+00e0}s' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_format_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_format_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "a.C.",
      "d.C."
    ],
    era_wide => [
      "antes de Cristo",
      "depois de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d-%m-%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Portuguese",
    month_format_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    name => "Portuguese Cape Verde",
    native_language => "portugu\N{U+00ea}s",
    native_name => "portugu\N{U+00ea}s Cabo Verde",
    native_script => undef,
    native_territory => "Cabo Verde",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Cape Verde",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ pt-GQ ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM 'de' y G",
      GyMMMEd => "E, d 'de' MMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d/MM",
      MMMMEd => "ccc, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d/MM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMM => "MM/y",
      yMMM => "MM/y",
      yMMMEEEEd => "EEEE, d/MM/y",
      yMMMEd => "E, d/MM/y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "ccc, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d/MM/y",
      yMd => "dd/MM/y",
      yQQQ => "QQQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "pt-GQ",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "dd/MM/y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} '\N{U+00e0}s' {0}",
    datetime_format_long => "{1} '\N{U+00e0}s' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_format_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_format_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "a.C.",
      "d.C."
    ],
    era_wide => [
      "antes de Cristo",
      "depois de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d-%m-%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Portuguese",
    month_format_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    name => "Portuguese Equatorial Guinea",
    native_language => "portugu\N{U+00ea}s",
    native_name => "portugu\N{U+00ea}s Guin\N{U+00e9} Equatorial",
    native_script => undef,
    native_territory => "Guin\N{U+00e9} Equatorial",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Equatorial Guinea",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ pt-GW ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM 'de' y G",
      GyMMMEd => "E, d 'de' MMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d/MM",
      MMMMEd => "ccc, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d/MM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMM => "MM/y",
      yMMM => "MM/y",
      yMMMEEEEd => "EEEE, d/MM/y",
      yMMMEd => "E, d/MM/y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "ccc, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d/MM/y",
      yMd => "dd/MM/y",
      yQQQ => "QQQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "pt-GW",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "dd/MM/y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} '\N{U+00e0}s' {0}",
    datetime_format_long => "{1} '\N{U+00e0}s' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_format_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_format_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "a.C.",
      "d.C."
    ],
    era_wide => [
      "antes de Cristo",
      "depois de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d-%m-%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Portuguese",
    month_format_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    name => "Portuguese Guinea-Bissau",
    native_language => "portugu\N{U+00ea}s",
    native_name => "portugu\N{U+00ea}s Guin\N{U+00e9}-Bissau",
    native_script => undef,
    native_territory => "Guin\N{U+00e9}-Bissau",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Guinea-Bissau",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ pt-LU ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM 'de' y G",
      GyMMMEd => "E, d 'de' MMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d/MM",
      MMMMEd => "ccc, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d/MM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMM => "MM/y",
      yMMM => "MM/y",
      yMMMEEEEd => "EEEE, d/MM/y",
      yMMMEd => "E, d/MM/y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "ccc, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d/MM/y",
      yMd => "dd/MM/y",
      yQQQ => "QQQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "pt-LU",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "dd/MM/y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} '\N{U+00e0}s' {0}",
    datetime_format_long => "{1} '\N{U+00e0}s' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_format_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_format_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "a.C.",
      "d.C."
    ],
    era_wide => [
      "antes de Cristo",
      "depois de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d-%m-%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Portuguese",
    month_format_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    name => "Portuguese Luxembourg",
    native_language => "portugu\N{U+00ea}s",
    native_name => "portugu\N{U+00ea}s Luxemburgo",
    native_script => undef,
    native_territory => "Luxemburgo",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Luxembourg",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ pt-MO ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM 'de' y G",
      GyMMMEd => "E, d 'de' MMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d/MM",
      MMMMEd => "ccc, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d/MM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMM => "MM/y",
      yMMM => "MM/y",
      yMMMEEEEd => "EEEE, d/MM/y",
      yMMMEd => "E, d/MM/y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "ccc, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d/MM/y",
      yMd => "dd/MM/y",
      yQQQ => "QQQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "pt-MO",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "dd/MM/y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} '\N{U+00e0}s' {0}",
    datetime_format_long => "{1} '\N{U+00e0}s' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_format_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_format_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "a.C.",
      "d.C."
    ],
    era_wide => [
      "antes de Cristo",
      "depois de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d-%m-%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Portuguese",
    month_format_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    name => "Portuguese Macau SAR China",
    native_language => "portugu\N{U+00ea}s",
    native_name => "portugu\N{U+00ea}s Macau, RAE da China",
    native_script => undef,
    native_territory => "Macau, RAE da China",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Macau SAR China",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ pt-MZ ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM 'de' y G",
      GyMMMEd => "E, d 'de' MMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d/MM",
      MMMMEd => "ccc, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d/MM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMM => "MM/y",
      yMMM => "MM/y",
      yMMMEEEEd => "EEEE, d/MM/y",
      yMMMEd => "E, d/MM/y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "ccc, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d/MM/y",
      yMd => "dd/MM/y",
      yQQQ => "QQQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "pt-MZ",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "dd/MM/y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} '\N{U+00e0}s' {0}",
    datetime_format_long => "{1} '\N{U+00e0}s' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_format_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_format_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "a.C.",
      "d.C."
    ],
    era_wide => [
      "antes de Cristo",
      "depois de Cristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d-%m-%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Portuguese",
    month_format_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    name => "Portuguese Mozambique",
    native_language => "portugu\N{U+00ea}s",
    native_name => "portugu\N{U+00ea}s Mo\N{U+00e7}ambique",
    native_script => undef,
    native_territory => "Mo\N{U+00e7}ambique",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Mozambique",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ pt-PT ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM 'de' y G",
      GyMMMEd => "E, d 'de' MMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d/MM",
      MMMMEd => "ccc, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d/MM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMM => "MM/y",
      yMMM => "MM/y",
      yMMMEEEEd => "EEEE, d/MM/y",
      yMMMEd => "E, d/MM/y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "ccc, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d/MM/y",
      yMd => "dd/MM/y",
      yQQQ => "QQQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "pt-PT",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "dd/MM/y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} '\N{U+00e0}s' {0}",
    datetime_format_long => "{1} '\N{U+00e0}s' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_format_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_format_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "a.C.",
      "d.C."
    ],
    era_wide => [
      "antes de Cristo",
      "depois de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d-%m-%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Portuguese",
    month_format_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    name => "Portuguese Portugal",
    native_language => "portugu\N{U+00ea}s",
    native_name => "portugu\N{U+00ea}s Portugal",
    native_script => undef,
    native_territory => "Portugal",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Portugal",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ pt-ST ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM 'de' y G",
      GyMMMEd => "E, d 'de' MMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d/MM",
      MMMMEd => "ccc, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d/MM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMM => "MM/y",
      yMMM => "MM/y",
      yMMMEEEEd => "EEEE, d/MM/y",
      yMMMEd => "E, d/MM/y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "ccc, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d/MM/y",
      yMd => "dd/MM/y",
      yQQQ => "QQQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "pt-ST",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "dd/MM/y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} '\N{U+00e0}s' {0}",
    datetime_format_long => "{1} '\N{U+00e0}s' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_format_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_format_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "a.C.",
      "d.C."
    ],
    era_wide => [
      "antes de Cristo",
      "depois de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d-%m-%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Portuguese",
    month_format_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    name => "Portuguese S\N{U+00e3}o Tom\N{U+00e9} & Pr\N{U+00ed}ncipe",
    native_language => "portugu\N{U+00ea}s",
    native_name => "portugu\N{U+00ea}s S\N{U+00e3}o Tom\N{U+00e9} e Pr\N{U+00ed}ncipe",
    native_script => undef,
    native_territory => "S\N{U+00e3}o Tom\N{U+00e9} e Pr\N{U+00ed}ncipe",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "S\N{U+00e3}o Tom\N{U+00e9} & Pr\N{U+00ed}ncipe",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ pt-TL ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM 'de' y G",
      GyMMMEd => "E, d 'de' MMM 'de' y G",
      GyMMMd => "d 'de' MMM 'de' y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d/MM",
      MMMMEd => "ccc, d 'de' MMMM",
      MMMMd => "d 'de' MMMM",
      MMMd => "d/MM",
      MMdd => "dd/MM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMM => "MM/y",
      yMMM => "MM/y",
      yMMMEEEEd => "EEEE, d/MM/y",
      yMMMEd => "E, d/MM/y",
      yMMMM => "MMMM 'de' y",
      yMMMMEd => "ccc, d 'de' MMMM 'de' y",
      yMMMMd => "d 'de' MMMM 'de' y",
      yMMMd => "d/MM/y",
      yMd => "dd/MM/y",
      yQQQ => "QQQQ 'de' y",
      yQQQQ => "QQQQ 'de' y"
    },
    code => "pt-TL",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "dd/MM/y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} '\N{U+00e0}s' {0}",
    datetime_format_long => "{1} '\N{U+00e0}s' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_format_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_format_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_abbreviated => [
      "segunda",
      "ter\N{U+00e7}a",
      "quarta",
      "quinta",
      "sexta",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    day_stand_alone_narrow => [
      "S",
      "T",
      "Q",
      "Q",
      "S",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "segunda-feira",
      "ter\N{U+00e7}a-feira",
      "quarta-feira",
      "quinta-feira",
      "sexta-feira",
      "s\N{U+00e1}bado",
      "domingo"
    ],
    era_abbreviated => [
      "a.C.",
      "d.C."
    ],
    era_narrow => [
      "a.C.",
      "d.C."
    ],
    era_wide => [
      "antes de Cristo",
      "depois de Cristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d-%m-%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Portuguese",
    month_format_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "fev",
      "mar",
      "abr",
      "mai",
      "jun",
      "jul",
      "ago",
      "set",
      "out",
      "nov",
      "dez"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "janeiro",
      "fevereiro",
      "mar\N{U+00e7}o",
      "abril",
      "maio",
      "junho",
      "julho",
      "agosto",
      "setembro",
      "outubro",
      "novembro",
      "dezembro"
    ],
    name => "Portuguese Timor-Leste",
    native_language => "portugu\N{U+00ea}s",
    native_name => "portugu\N{U+00ea}s Timor-Leste",
    native_script => undef,
    native_territory => "Timor-Leste",
    native_variant => undef,
    quarter_format_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    quarter_stand_alone_abbreviated => [
      "T1",
      "T2",
      "T3",
      "T4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1.\N{U+00ba} trimestre",
      "2.\N{U+00ba} trimestre",
      "3.\N{U+00ba} trimestre",
      "4.\N{U+00ba} trimestre"
    ],
    script => undef,
    territory => "Timor-Leste",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ qu ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "E, d MMM, y",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "dd-MM-y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "qu",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Lun",
      "Mar",
      "Mi\N{U+00e9}",
      "Jue",
      "Vie",
      "Sab",
      "Dom"
    ],
    day_format_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "Lunes",
      "Martes",
      "Mi\N{U+00e9}rcoles",
      "Jueves",
      "Viernes",
      "S\N{U+00e1}bado",
      "Domingo"
    ],
    day_stand_alone_abbreviated => [
      "Lun",
      "Mar",
      "Mi\N{U+00e9}",
      "Jue",
      "Vie",
      "Sab",
      "Dom"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "Lunes",
      "Martes",
      "Mi\N{U+00e9}rcoles",
      "Jueves",
      "Viernes",
      "S\N{U+00e1}bado",
      "Domingo"
    ],
    era_abbreviated => [
      "BCE",
      "d.C."
    ],
    era_narrow => [
      "BCE",
      "dC"
    ],
    era_wide => [
      "BCE",
      "d.C."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Quechua",
    month_format_abbreviated => [
      "Qul",
      "Hat",
      "Pau",
      "Ayr",
      "Aym",
      "Int",
      "Ant",
      "Qha",
      "Uma",
      "Kan",
      "Aya",
      "Kap"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Qulla puquy",
      "Hatun puquy",
      "Pauqar waray",
      "Ayriwa",
      "Aymuray",
      "Inti raymi",
      "Anta Sitwa",
      "Qhapaq Sitwa",
      "Uma raymi",
      "Kantaray",
      "Ayamarq\N{U+02bc}a",
      "Kapaq Raymi"
    ],
    month_stand_alone_abbreviated => [
      "Qul",
      "Hat",
      "Pau",
      "Ayr",
      "Aym",
      "Int",
      "Ant",
      "Qha",
      "Uma",
      "Kan",
      "Aya",
      "Kap"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Qulla puquy",
      "Hatun puquy",
      "Pauqar waray",
      "Ayriwa",
      "Aymuray",
      "Inti raymi",
      "Anta Sitwa",
      "Qhapaq Sitwa",
      "Uma raymi",
      "Kantaray",
      "Ayamarq\N{U+02bc}a",
      "Kapaq Raymi"
    ],
    name => "Quechua",
    native_language => "Runasimi",
    native_name => "Runasimi",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ qu-BO ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "E, d MMM, y",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "dd-MM-y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "qu-BO",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Lun",
      "Mar",
      "Mi\N{U+00e9}",
      "Jue",
      "Vie",
      "Sab",
      "Dom"
    ],
    day_format_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "Lunes",
      "Martes",
      "Mi\N{U+00e9}rcoles",
      "Jueves",
      "Viernes",
      "S\N{U+00e1}bado",
      "Domingo"
    ],
    day_stand_alone_abbreviated => [
      "Lun",
      "Mar",
      "Mi\N{U+00e9}",
      "Jue",
      "Vie",
      "Sab",
      "Dom"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "Lunes",
      "Martes",
      "Mi\N{U+00e9}rcoles",
      "Jueves",
      "Viernes",
      "S\N{U+00e1}bado",
      "Domingo"
    ],
    era_abbreviated => [
      "BCE",
      "d.C."
    ],
    era_narrow => [
      "BCE",
      "dC"
    ],
    era_wide => [
      "BCE",
      "d.C."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Quechua",
    month_format_abbreviated => [
      "Qul",
      "Hat",
      "Pau",
      "Ayr",
      "Aym",
      "Int",
      "Ant",
      "Qha",
      "Uma",
      "Kan",
      "Aya",
      "Kap"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Qulla puquy",
      "Hatun puquy",
      "Pauqar waray",
      "Ayriwa",
      "Aymuray",
      "Inti raymi",
      "Anta Sitwa",
      "Qhapaq Sitwa",
      "Uma raymi",
      "Kantaray",
      "Ayamarq\N{U+02bc}a",
      "Kapaq Raymi"
    ],
    month_stand_alone_abbreviated => [
      "Qul",
      "Hat",
      "Pau",
      "Ayr",
      "Aym",
      "Int",
      "Ant",
      "Qha",
      "Uma",
      "Kan",
      "Aya",
      "Kap"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Qulla puquy",
      "Hatun puquy",
      "Pauqar waray",
      "Ayriwa",
      "Aymuray",
      "Inti raymi",
      "Anta Sitwa",
      "Qhapaq Sitwa",
      "Uma raymi",
      "Kantaray",
      "Ayamarq\N{U+02bc}a",
      "Kapaq Raymi"
    ],
    name => "Quechua Bolivia",
    native_language => "Runasimi",
    native_name => "Runasimi Bolivia",
    native_script => undef,
    native_territory => "Bolivia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Bolivia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ qu-EC ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "E, d MMM, y",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "dd-MM-y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "qu-EC",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Lun",
      "Mar",
      "Mi\N{U+00e9}",
      "Jue",
      "Vie",
      "Sab",
      "Dom"
    ],
    day_format_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "Lunes",
      "Martes",
      "Mi\N{U+00e9}rcoles",
      "Jueves",
      "Viernes",
      "S\N{U+00e1}bado",
      "Domingo"
    ],
    day_stand_alone_abbreviated => [
      "Lun",
      "Mar",
      "Mi\N{U+00e9}",
      "Jue",
      "Vie",
      "Sab",
      "Dom"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "Lunes",
      "Martes",
      "Mi\N{U+00e9}rcoles",
      "Jueves",
      "Viernes",
      "S\N{U+00e1}bado",
      "Domingo"
    ],
    era_abbreviated => [
      "BCE",
      "d.C."
    ],
    era_narrow => [
      "BCE",
      "dC"
    ],
    era_wide => [
      "BCE",
      "d.C."
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Quechua",
    month_format_abbreviated => [
      "Qul",
      "Hat",
      "Pau",
      "Ayr",
      "Aym",
      "Int",
      "Ant",
      "Qha",
      "Uma",
      "Kan",
      "Aya",
      "Kap"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Qulla puquy",
      "Hatun puquy",
      "Pauqar waray",
      "Ayriwa",
      "Aymuray",
      "Inti raymi",
      "Anta Sitwa",
      "Qhapaq Sitwa",
      "Uma raymi",
      "Kantaray",
      "Ayamarq\N{U+02bc}a",
      "Kapaq Raymi"
    ],
    month_stand_alone_abbreviated => [
      "Qul",
      "Hat",
      "Pau",
      "Ayr",
      "Aym",
      "Int",
      "Ant",
      "Qha",
      "Uma",
      "Kan",
      "Aya",
      "Kap"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Qulla puquy",
      "Hatun puquy",
      "Pauqar waray",
      "Ayriwa",
      "Aymuray",
      "Inti raymi",
      "Anta Sitwa",
      "Qhapaq Sitwa",
      "Uma raymi",
      "Kantaray",
      "Ayamarq\N{U+02bc}a",
      "Kapaq Raymi"
    ],
    name => "Quechua Ecuador",
    native_language => "Runasimi",
    native_name => "Runasimi Ecuador",
    native_script => undef,
    native_territory => "Ecuador",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Ecuador",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ qu-PE ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "E, d MMM, y",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "dd-MM-y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "qu-PE",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Lun",
      "Mar",
      "Mi\N{U+00e9}",
      "Jue",
      "Vie",
      "Sab",
      "Dom"
    ],
    day_format_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "Lunes",
      "Martes",
      "Mi\N{U+00e9}rcoles",
      "Jueves",
      "Viernes",
      "S\N{U+00e1}bado",
      "Domingo"
    ],
    day_stand_alone_abbreviated => [
      "Lun",
      "Mar",
      "Mi\N{U+00e9}",
      "Jue",
      "Vie",
      "Sab",
      "Dom"
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "X",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "Lunes",
      "Martes",
      "Mi\N{U+00e9}rcoles",
      "Jueves",
      "Viernes",
      "S\N{U+00e1}bado",
      "Domingo"
    ],
    era_abbreviated => [
      "BCE",
      "d.C."
    ],
    era_narrow => [
      "BCE",
      "dC"
    ],
    era_wide => [
      "BCE",
      "d.C."
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Quechua",
    month_format_abbreviated => [
      "Qul",
      "Hat",
      "Pau",
      "Ayr",
      "Aym",
      "Int",
      "Ant",
      "Qha",
      "Uma",
      "Kan",
      "Aya",
      "Kap"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Qulla puquy",
      "Hatun puquy",
      "Pauqar waray",
      "Ayriwa",
      "Aymuray",
      "Inti raymi",
      "Anta Sitwa",
      "Qhapaq Sitwa",
      "Uma raymi",
      "Kantaray",
      "Ayamarq\N{U+02bc}a",
      "Kapaq Raymi"
    ],
    month_stand_alone_abbreviated => [
      "Qul",
      "Hat",
      "Pau",
      "Ayr",
      "Aym",
      "Int",
      "Ant",
      "Qha",
      "Uma",
      "Kan",
      "Aya",
      "Kap"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Qulla puquy",
      "Hatun puquy",
      "Pauqar waray",
      "Ayriwa",
      "Aymuray",
      "Inti raymi",
      "Anta Sitwa",
      "Qhapaq Sitwa",
      "Uma raymi",
      "Kantaray",
      "Ayamarq\N{U+02bc}a",
      "Kapaq Raymi"
    ],
    name => "Quechua Peru",
    native_language => "Runasimi",
    native_name => "Runasimi Per\N{U+00fa}",
    native_script => undef,
    native_territory => "Per\N{U+00fa}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Peru",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ rm ]__
  {
    am_pm_abbreviated => [
      "am",
      "sm"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "H",
      HHmm => "HH:mm",
      HHmmss => "HH:mm:ss",
      Hm => "H:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMd => "d.MM.",
      MMdd => "dd.MM.",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "y-M",
      yMEd => "E, y-M-d",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMMdd => "dd.MM.y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "rm",
    date_format_full => "EEEE, 'ils' d 'da' MMMM y",
    date_format_long => "d 'da' MMMM y",
    date_format_medium => "dd-MM-y",
    date_format_short => "dd-MM-yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "gli",
      "ma",
      "me",
      "gie",
      "ve",
      "so",
      "du"
    ],
    day_format_narrow => [
      "G",
      "M",
      "M",
      "G",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "glindesdi",
      "mardi",
      "mesemna",
      "gievgia",
      "venderdi",
      "sonda",
      "dumengia"
    ],
    day_stand_alone_abbreviated => [
      "gli",
      "ma",
      "me",
      "gie",
      "ve",
      "so",
      "du"
    ],
    day_stand_alone_narrow => [
      "G",
      "M",
      "M",
      "G",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "glindesdi",
      "mardi",
      "mesemna",
      "gievgia",
      "venderdi",
      "sonda",
      "dumengia"
    ],
    era_abbreviated => [
      "av. Cr.",
      "s. Cr."
    ],
    era_narrow => [
      "av. Cr.",
      "s. Cr."
    ],
    era_wide => [
      "avant Cristus",
      "suenter Cristus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Romansh",
    month_format_abbreviated => [
      "schan.",
      "favr.",
      "mars",
      "avr.",
      "matg",
      "zercl.",
      "fan.",
      "avust",
      "sett.",
      "oct.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "S",
      "F",
      "M",
      "A",
      "M",
      "Z",
      "F",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "schaner",
      "favrer",
      "mars",
      "avrigl",
      "matg",
      "zercladur",
      "fanadur",
      "avust",
      "settember",
      "october",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "schan.",
      "favr.",
      "mars",
      "avr.",
      "matg",
      "zercl.",
      "fan.",
      "avust",
      "sett.",
      "oct.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "S",
      "F",
      "M",
      "A",
      "M",
      "Z",
      "F",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "schaner",
      "favrer",
      "mars",
      "avrigl",
      "matg",
      "zercladur",
      "fanadur",
      "avust",
      "settember",
      "october",
      "november",
      "december"
    ],
    name => "Romansh",
    native_language => "rumantsch",
    native_name => "rumantsch",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1. quartal",
      "2. quartal",
      "3. quartal",
      "4. quartal"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. quartal",
      "2. quartal",
      "3. quartal",
      "4. quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "1. quartal",
      "2. quartal",
      "3. quartal",
      "4. quartal"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. quartal",
      "2. quartal",
      "3. quartal",
      "4. quartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ rm-CH ]__
  {
    am_pm_abbreviated => [
      "am",
      "sm"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "H",
      HHmm => "HH:mm",
      HHmmss => "HH:mm:ss",
      Hm => "H:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMd => "d.MM.",
      MMdd => "dd.MM.",
      Md => "d.M.",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "y-M",
      yMEd => "E, y-M-d",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMMdd => "dd.MM.y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "rm-CH",
    date_format_full => "EEEE, 'ils' d 'da' MMMM y",
    date_format_long => "d 'da' MMMM y",
    date_format_medium => "dd-MM-y",
    date_format_short => "dd-MM-yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "gli",
      "ma",
      "me",
      "gie",
      "ve",
      "so",
      "du"
    ],
    day_format_narrow => [
      "G",
      "M",
      "M",
      "G",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "glindesdi",
      "mardi",
      "mesemna",
      "gievgia",
      "venderdi",
      "sonda",
      "dumengia"
    ],
    day_stand_alone_abbreviated => [
      "gli",
      "ma",
      "me",
      "gie",
      "ve",
      "so",
      "du"
    ],
    day_stand_alone_narrow => [
      "G",
      "M",
      "M",
      "G",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "glindesdi",
      "mardi",
      "mesemna",
      "gievgia",
      "venderdi",
      "sonda",
      "dumengia"
    ],
    era_abbreviated => [
      "av. Cr.",
      "s. Cr."
    ],
    era_narrow => [
      "av. Cr.",
      "s. Cr."
    ],
    era_wide => [
      "avant Cristus",
      "suenter Cristus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Romansh",
    month_format_abbreviated => [
      "schan.",
      "favr.",
      "mars",
      "avr.",
      "matg",
      "zercl.",
      "fan.",
      "avust",
      "sett.",
      "oct.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "S",
      "F",
      "M",
      "A",
      "M",
      "Z",
      "F",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "schaner",
      "favrer",
      "mars",
      "avrigl",
      "matg",
      "zercladur",
      "fanadur",
      "avust",
      "settember",
      "october",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "schan.",
      "favr.",
      "mars",
      "avr.",
      "matg",
      "zercl.",
      "fan.",
      "avust",
      "sett.",
      "oct.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "S",
      "F",
      "M",
      "A",
      "M",
      "Z",
      "F",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "schaner",
      "favrer",
      "mars",
      "avrigl",
      "matg",
      "zercladur",
      "fanadur",
      "avust",
      "settember",
      "october",
      "november",
      "december"
    ],
    name => "Romansh Switzerland",
    native_language => "rumantsch",
    native_name => "rumantsch Svizra",
    native_script => undef,
    native_territory => "Svizra",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1. quartal",
      "2. quartal",
      "3. quartal",
      "4. quartal"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. quartal",
      "2. quartal",
      "3. quartal",
      "4. quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "1. quartal",
      "2. quartal",
      "3. quartal",
      "4. quartal"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. quartal",
      "2. quartal",
      "3. quartal",
      "4. quartal"
    ],
    script => undef,
    territory => "Switzerland",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ rn ]__
  {
    am_pm_abbreviated => [
      "Z.MU.",
      "Z.MW."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "rn",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "mbe.",
      "kab.",
      "gtu.",
      "kan.",
      "gnu.",
      "gnd.",
      "cu."
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Ku wa mbere",
      "Ku wa kabiri",
      "Ku wa gatatu",
      "Ku wa kane",
      "Ku wa gatanu",
      "Ku wa gatandatu",
      "Ku w\N{U+2019}indwi"
    ],
    day_stand_alone_abbreviated => [
      "mbe.",
      "kab.",
      "gtu.",
      "kan.",
      "gnu.",
      "gnd.",
      "cu."
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Ku wa mbere",
      "Ku wa kabiri",
      "Ku wa gatatu",
      "Ku wa kane",
      "Ku wa gatanu",
      "Ku wa gatandatu",
      "Ku w\N{U+2019}indwi"
    ],
    era_abbreviated => [
      "Mb.Y.",
      "Ny.Y"
    ],
    era_narrow => [
      "Mb.Y.",
      "Ny.Y"
    ],
    era_wide => [
      "Mbere ya Yezu",
      "Nyuma ya Yezu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Rundi",
    month_format_abbreviated => [
      "Mut.",
      "Gas.",
      "Wer.",
      "Mat.",
      "Gic.",
      "Kam.",
      "Nya.",
      "Kan.",
      "Nze.",
      "Ukw.",
      "Ugu.",
      "Uku."
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Nzero",
      "Ruhuhuma",
      "Ntwarante",
      "Ndamukiza",
      "Rusama",
      "Ruheshi",
      "Mukakaro",
      "Nyandagaro",
      "Nyakanga",
      "Gitugutu",
      "Munyonyo",
      "Kigarama"
    ],
    month_stand_alone_abbreviated => [
      "Mut.",
      "Gas.",
      "Wer.",
      "Mat.",
      "Gic.",
      "Kam.",
      "Nya.",
      "Kan.",
      "Nze.",
      "Ukw.",
      "Ugu.",
      "Uku."
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Nzero",
      "Ruhuhuma",
      "Ntwarante",
      "Ndamukiza",
      "Rusama",
      "Ruheshi",
      "Mukakaro",
      "Nyandagaro",
      "Nyakanga",
      "Gitugutu",
      "Munyonyo",
      "Kigarama"
    ],
    name => "Rundi",
    native_language => "Ikirundi",
    native_name => "Ikirundi",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "I1",
      "I2",
      "I3",
      "I4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Igice ca mbere c\N{U+2019}umwaka",
      "Igice ca kabiri c\N{U+2019}umwaka",
      "Igice ca gatatu c\N{U+2019}umwaka",
      "Igice ca kane c\N{U+2019}umwaka"
    ],
    quarter_stand_alone_abbreviated => [
      "I1",
      "I2",
      "I3",
      "I4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Igice ca mbere c\N{U+2019}umwaka",
      "Igice ca kabiri c\N{U+2019}umwaka",
      "Igice ca gatatu c\N{U+2019}umwaka",
      "Igice ca kane c\N{U+2019}umwaka"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ rn-BI ]__
  {
    am_pm_abbreviated => [
      "Z.MU.",
      "Z.MW."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "rn-BI",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "mbe.",
      "kab.",
      "gtu.",
      "kan.",
      "gnu.",
      "gnd.",
      "cu."
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Ku wa mbere",
      "Ku wa kabiri",
      "Ku wa gatatu",
      "Ku wa kane",
      "Ku wa gatanu",
      "Ku wa gatandatu",
      "Ku w\N{U+2019}indwi"
    ],
    day_stand_alone_abbreviated => [
      "mbe.",
      "kab.",
      "gtu.",
      "kan.",
      "gnu.",
      "gnd.",
      "cu."
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Ku wa mbere",
      "Ku wa kabiri",
      "Ku wa gatatu",
      "Ku wa kane",
      "Ku wa gatanu",
      "Ku wa gatandatu",
      "Ku w\N{U+2019}indwi"
    ],
    era_abbreviated => [
      "Mb.Y.",
      "Ny.Y"
    ],
    era_narrow => [
      "Mb.Y.",
      "Ny.Y"
    ],
    era_wide => [
      "Mbere ya Yezu",
      "Nyuma ya Yezu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Rundi",
    month_format_abbreviated => [
      "Mut.",
      "Gas.",
      "Wer.",
      "Mat.",
      "Gic.",
      "Kam.",
      "Nya.",
      "Kan.",
      "Nze.",
      "Ukw.",
      "Ugu.",
      "Uku."
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Nzero",
      "Ruhuhuma",
      "Ntwarante",
      "Ndamukiza",
      "Rusama",
      "Ruheshi",
      "Mukakaro",
      "Nyandagaro",
      "Nyakanga",
      "Gitugutu",
      "Munyonyo",
      "Kigarama"
    ],
    month_stand_alone_abbreviated => [
      "Mut.",
      "Gas.",
      "Wer.",
      "Mat.",
      "Gic.",
      "Kam.",
      "Nya.",
      "Kan.",
      "Nze.",
      "Ukw.",
      "Ugu.",
      "Uku."
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Nzero",
      "Ruhuhuma",
      "Ntwarante",
      "Ndamukiza",
      "Rusama",
      "Ruheshi",
      "Mukakaro",
      "Nyandagaro",
      "Nyakanga",
      "Gitugutu",
      "Munyonyo",
      "Kigarama"
    ],
    name => "Rundi Burundi",
    native_language => "Ikirundi",
    native_name => "Ikirundi Uburundi",
    native_script => undef,
    native_territory => "Uburundi",
    native_variant => undef,
    quarter_format_abbreviated => [
      "I1",
      "I2",
      "I3",
      "I4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Igice ca mbere c\N{U+2019}umwaka",
      "Igice ca kabiri c\N{U+2019}umwaka",
      "Igice ca gatatu c\N{U+2019}umwaka",
      "Igice ca kane c\N{U+2019}umwaka"
    ],
    quarter_stand_alone_abbreviated => [
      "I1",
      "I2",
      "I3",
      "I4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Igice ca mbere c\N{U+2019}umwaka",
      "Igice ca kabiri c\N{U+2019}umwaka",
      "Igice ca gatatu c\N{U+2019}umwaka",
      "Igice ca kane c\N{U+2019}umwaka"
    ],
    script => undef,
    territory => "Burundi",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ro ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd.MM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "E, dd.MM.y",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd.MM.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ro",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd.MM.y",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mie.",
      "joi",
      "vin.",
      "s\N{U+00e2}m.",
      "dum."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "luni",
      "mar\N{U+021b}i",
      "miercuri",
      "joi",
      "vineri",
      "s\N{U+00e2}mb\N{U+0103}t\N{U+0103}",
      "duminic\N{U+0103}"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mie.",
      "joi",
      "vin.",
      "s\N{U+00e2}m.",
      "dum."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "luni",
      "mar\N{U+021b}i",
      "miercuri",
      "joi",
      "vineri",
      "s\N{U+00e2}mb\N{U+0103}t\N{U+0103}",
      "duminic\N{U+0103}"
    ],
    era_abbreviated => [
      "\N{U+00ee}.Hr.",
      "d.Hr."
    ],
    era_narrow => [
      "\N{U+00ee}.Hr.",
      "d.Hr."
    ],
    era_wide => [
      "\N{U+00ee}nainte de Hristos",
      "dup\N{U+0103} Hristos"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Romanian",
    month_format_abbreviated => [
      "ian.",
      "feb.",
      "mar.",
      "apr.",
      "mai",
      "iun.",
      "iul.",
      "aug.",
      "sept.",
      "oct.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "I",
      "F",
      "M",
      "A",
      "M",
      "I",
      "I",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "ianuarie",
      "februarie",
      "martie",
      "aprilie",
      "mai",
      "iunie",
      "iulie",
      "august",
      "septembrie",
      "octombrie",
      "noiembrie",
      "decembrie"
    ],
    month_stand_alone_abbreviated => [
      "ian.",
      "feb.",
      "mar.",
      "apr.",
      "mai",
      "iun.",
      "iul.",
      "aug.",
      "sept.",
      "oct.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "I",
      "F",
      "M",
      "A",
      "M",
      "I",
      "I",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "ianuarie",
      "februarie",
      "martie",
      "aprilie",
      "mai",
      "iunie",
      "iulie",
      "august",
      "septembrie",
      "octombrie",
      "noiembrie",
      "decembrie"
    ],
    name => "Romanian",
    native_language => "rom\N{U+00e2}n\N{U+0103}",
    native_name => "rom\N{U+00e2}n\N{U+0103}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "trim. I",
      "trim. II",
      "trim. III",
      "trim. IV"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "trimestrul I",
      "trimestrul al II-lea",
      "trimestrul al III-lea",
      "trimestrul al IV-lea"
    ],
    quarter_stand_alone_abbreviated => [
      "Trim. I",
      "Trim. II",
      "Trim. III",
      "Trim. IV"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Trimestrul I",
      "Trimestrul al II-lea",
      "Trimestrul al III-lea",
      "Trimestrul al IV-lea"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ro-MD ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd.MM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "E, dd.MM.y",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd.MM.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ro-MD",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd.MM.y",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Lun",
      "Mar",
      "Mie",
      "Joi",
      "Vin",
      "S\N{U+00e2}m",
      "Dum"
    ],
    day_format_narrow => [
      "L",
      "Ma",
      "Mi",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "luni",
      "mar\N{U+021b}i",
      "miercuri",
      "joi",
      "vineri",
      "s\N{U+00e2}mb\N{U+0103}t\N{U+0103}",
      "duminic\N{U+0103}"
    ],
    day_stand_alone_abbreviated => [
      "Lun",
      "Mar",
      "Mie",
      "Joi",
      "Vin",
      "S\N{U+00e2}m",
      "Dum"
    ],
    day_stand_alone_narrow => [
      "L",
      "Ma",
      "Mi",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "luni",
      "mar\N{U+021b}i",
      "miercuri",
      "joi",
      "vineri",
      "s\N{U+00e2}mb\N{U+0103}t\N{U+0103}",
      "duminic\N{U+0103}"
    ],
    era_abbreviated => [
      "\N{U+00ee}.Hr.",
      "d.Hr."
    ],
    era_narrow => [
      "\N{U+00ee}.Hr.",
      "d.Hr."
    ],
    era_wide => [
      "\N{U+00ee}nainte de Hristos",
      "dup\N{U+0103} Hristos"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Romanian",
    month_format_abbreviated => [
      "ian.",
      "feb.",
      "mar.",
      "apr.",
      "mai",
      "iun.",
      "iul.",
      "aug.",
      "sept.",
      "oct.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "I",
      "F",
      "M",
      "A",
      "M",
      "I",
      "I",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "ianuarie",
      "februarie",
      "martie",
      "aprilie",
      "mai",
      "iunie",
      "iulie",
      "august",
      "septembrie",
      "octombrie",
      "noiembrie",
      "decembrie"
    ],
    month_stand_alone_abbreviated => [
      "ian.",
      "feb.",
      "mar.",
      "apr.",
      "mai",
      "iun.",
      "iul.",
      "aug.",
      "sept.",
      "oct.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "I",
      "F",
      "M",
      "A",
      "M",
      "I",
      "I",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "ianuarie",
      "februarie",
      "martie",
      "aprilie",
      "mai",
      "iunie",
      "iulie",
      "august",
      "septembrie",
      "octombrie",
      "noiembrie",
      "decembrie"
    ],
    name => "Romanian Moldova",
    native_language => "rom\N{U+00e2}n\N{U+0103}",
    native_name => "rom\N{U+00e2}n\N{U+0103} Republica Moldova",
    native_script => undef,
    native_territory => "Republica Moldova",
    native_variant => undef,
    quarter_format_abbreviated => [
      "trim. 1",
      "trim. 2",
      "trim. 3",
      "trim. 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "trimestrul 1",
      "trimestrul 2",
      "trimestrul 3",
      "trimestrul 4"
    ],
    quarter_stand_alone_abbreviated => [
      "Trim. 1",
      "Trim. 2",
      "Trim. 3",
      "Trim. 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Trimestrul 1",
      "Trimestrul 2",
      "Trimestrul 3",
      "Trimestrul 4"
    ],
    script => undef,
    territory => "Moldova",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ro-RO ]__
  {
    am_pm_abbreviated => [
      "a.m.",
      "p.m."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd.MM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "E, dd.MM.y",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "dd.MM.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ro-RO",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd.MM.y",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "lun.",
      "mar.",
      "mie.",
      "joi",
      "vin.",
      "s\N{U+00e2}m.",
      "dum."
    ],
    day_format_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_format_wide => [
      "luni",
      "mar\N{U+021b}i",
      "miercuri",
      "joi",
      "vineri",
      "s\N{U+00e2}mb\N{U+0103}t\N{U+0103}",
      "duminic\N{U+0103}"
    ],
    day_stand_alone_abbreviated => [
      "lun.",
      "mar.",
      "mie.",
      "joi",
      "vin.",
      "s\N{U+00e2}m.",
      "dum."
    ],
    day_stand_alone_narrow => [
      "L",
      "M",
      "M",
      "J",
      "V",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "luni",
      "mar\N{U+021b}i",
      "miercuri",
      "joi",
      "vineri",
      "s\N{U+00e2}mb\N{U+0103}t\N{U+0103}",
      "duminic\N{U+0103}"
    ],
    era_abbreviated => [
      "\N{U+00ee}.Hr.",
      "d.Hr."
    ],
    era_narrow => [
      "\N{U+00ee}.Hr.",
      "d.Hr."
    ],
    era_wide => [
      "\N{U+00ee}nainte de Hristos",
      "dup\N{U+0103} Hristos"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%A %-e %B %Y, %H:%M:%S %z",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d %b %Y %T %z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Romanian",
    month_format_abbreviated => [
      "ian.",
      "feb.",
      "mar.",
      "apr.",
      "mai",
      "iun.",
      "iul.",
      "aug.",
      "sept.",
      "oct.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "I",
      "F",
      "M",
      "A",
      "M",
      "I",
      "I",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "ianuarie",
      "februarie",
      "martie",
      "aprilie",
      "mai",
      "iunie",
      "iulie",
      "august",
      "septembrie",
      "octombrie",
      "noiembrie",
      "decembrie"
    ],
    month_stand_alone_abbreviated => [
      "ian.",
      "feb.",
      "mar.",
      "apr.",
      "mai",
      "iun.",
      "iul.",
      "aug.",
      "sept.",
      "oct.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "I",
      "F",
      "M",
      "A",
      "M",
      "I",
      "I",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "ianuarie",
      "februarie",
      "martie",
      "aprilie",
      "mai",
      "iunie",
      "iulie",
      "august",
      "septembrie",
      "octombrie",
      "noiembrie",
      "decembrie"
    ],
    name => "Romanian Romania",
    native_language => "rom\N{U+00e2}n\N{U+0103}",
    native_name => "rom\N{U+00e2}n\N{U+0103} Rom\N{U+00e2}nia",
    native_script => undef,
    native_territory => "Rom\N{U+00e2}nia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "trim. I",
      "trim. II",
      "trim. III",
      "trim. IV"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "trimestrul I",
      "trimestrul al II-lea",
      "trimestrul al III-lea",
      "trimestrul al IV-lea"
    ],
    quarter_stand_alone_abbreviated => [
      "Trim. I",
      "Trim. II",
      "Trim. III",
      "Trim. IV"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Trimestrul I",
      "Trimestrul al II-lea",
      "Trimestrul al III-lea",
      "Trimestrul al IV-lea"
    ],
    script => undef,
    territory => "Romania",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ rof ]__
  {
    am_pm_abbreviated => [
      "kang\N{U+2019}ama",
      "kingoto"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "rof",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ijt",
      "Ijn",
      "Ijtn",
      "Alh",
      "Iju",
      "Ijm",
      "Ijp"
    ],
    day_format_narrow => [
      3,
      4,
      5,
      6,
      7,
      1,
      2
    ],
    day_format_wide => [
      "Ijumatatu",
      "Ijumanne",
      "Ijumatano",
      "Alhamisi",
      "Ijumaa",
      "Ijumamosi",
      "Ijumapili"
    ],
    day_stand_alone_abbreviated => [
      "Ijt",
      "Ijn",
      "Ijtn",
      "Alh",
      "Iju",
      "Ijm",
      "Ijp"
    ],
    day_stand_alone_narrow => [
      3,
      4,
      5,
      6,
      7,
      1,
      2
    ],
    day_stand_alone_wide => [
      "Ijumatatu",
      "Ijumanne",
      "Ijumatano",
      "Alhamisi",
      "Ijumaa",
      "Ijumamosi",
      "Ijumapili"
    ],
    era_abbreviated => [
      "KM",
      "BM"
    ],
    era_narrow => [
      "KM",
      "BM"
    ],
    era_wide => [
      "Kabla ya Mayesu",
      "Baada ya Mayesu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Rombo",
    month_format_abbreviated => [
      "M1",
      "M2",
      "M3",
      "M4",
      "M5",
      "M6",
      "M7",
      "M8",
      "M9",
      "M10",
      "M11",
      "M12"
    ],
    month_format_narrow => [
      "K",
      "K",
      "K",
      "K",
      "T",
      "S",
      "S",
      "N",
      "T",
      "I",
      "I",
      "I"
    ],
    month_format_wide => [
      "Mweri wa kwanza",
      "Mweri wa kaili",
      "Mweri wa katatu",
      "Mweri wa kaana",
      "Mweri wa tanu",
      "Mweri wa sita",
      "Mweri wa saba",
      "Mweri wa nane",
      "Mweri wa tisa",
      "Mweri wa ikumi",
      "Mweri wa ikumi na moja",
      "Mweri wa ikumi na mbili"
    ],
    month_stand_alone_abbreviated => [
      "M1",
      "M2",
      "M3",
      "M4",
      "M5",
      "M6",
      "M7",
      "M8",
      "M9",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_narrow => [
      "K",
      "K",
      "K",
      "K",
      "T",
      "S",
      "S",
      "N",
      "T",
      "I",
      "I",
      "I"
    ],
    month_stand_alone_wide => [
      "Mweri wa kwanza",
      "Mweri wa kaili",
      "Mweri wa katatu",
      "Mweri wa kaana",
      "Mweri wa tanu",
      "Mweri wa sita",
      "Mweri wa saba",
      "Mweri wa nane",
      "Mweri wa tisa",
      "Mweri wa ikumi",
      "Mweri wa ikumi na moja",
      "Mweri wa ikumi na mbili"
    ],
    name => "Rombo",
    native_language => "Kihorombo",
    native_name => "Kihorombo",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo ya kwanza",
      "Robo ya kaili",
      "Robo ya katatu",
      "Robo ya kaana"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo ya kwanza",
      "Robo ya kaili",
      "Robo ya katatu",
      "Robo ya kaana"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ rof-TZ ]__
  {
    am_pm_abbreviated => [
      "kang\N{U+2019}ama",
      "kingoto"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "rof-TZ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ijt",
      "Ijn",
      "Ijtn",
      "Alh",
      "Iju",
      "Ijm",
      "Ijp"
    ],
    day_format_narrow => [
      3,
      4,
      5,
      6,
      7,
      1,
      2
    ],
    day_format_wide => [
      "Ijumatatu",
      "Ijumanne",
      "Ijumatano",
      "Alhamisi",
      "Ijumaa",
      "Ijumamosi",
      "Ijumapili"
    ],
    day_stand_alone_abbreviated => [
      "Ijt",
      "Ijn",
      "Ijtn",
      "Alh",
      "Iju",
      "Ijm",
      "Ijp"
    ],
    day_stand_alone_narrow => [
      3,
      4,
      5,
      6,
      7,
      1,
      2
    ],
    day_stand_alone_wide => [
      "Ijumatatu",
      "Ijumanne",
      "Ijumatano",
      "Alhamisi",
      "Ijumaa",
      "Ijumamosi",
      "Ijumapili"
    ],
    era_abbreviated => [
      "KM",
      "BM"
    ],
    era_narrow => [
      "KM",
      "BM"
    ],
    era_wide => [
      "Kabla ya Mayesu",
      "Baada ya Mayesu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Rombo",
    month_format_abbreviated => [
      "M1",
      "M2",
      "M3",
      "M4",
      "M5",
      "M6",
      "M7",
      "M8",
      "M9",
      "M10",
      "M11",
      "M12"
    ],
    month_format_narrow => [
      "K",
      "K",
      "K",
      "K",
      "T",
      "S",
      "S",
      "N",
      "T",
      "I",
      "I",
      "I"
    ],
    month_format_wide => [
      "Mweri wa kwanza",
      "Mweri wa kaili",
      "Mweri wa katatu",
      "Mweri wa kaana",
      "Mweri wa tanu",
      "Mweri wa sita",
      "Mweri wa saba",
      "Mweri wa nane",
      "Mweri wa tisa",
      "Mweri wa ikumi",
      "Mweri wa ikumi na moja",
      "Mweri wa ikumi na mbili"
    ],
    month_stand_alone_abbreviated => [
      "M1",
      "M2",
      "M3",
      "M4",
      "M5",
      "M6",
      "M7",
      "M8",
      "M9",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_narrow => [
      "K",
      "K",
      "K",
      "K",
      "T",
      "S",
      "S",
      "N",
      "T",
      "I",
      "I",
      "I"
    ],
    month_stand_alone_wide => [
      "Mweri wa kwanza",
      "Mweri wa kaili",
      "Mweri wa katatu",
      "Mweri wa kaana",
      "Mweri wa tanu",
      "Mweri wa sita",
      "Mweri wa saba",
      "Mweri wa nane",
      "Mweri wa tisa",
      "Mweri wa ikumi",
      "Mweri wa ikumi na moja",
      "Mweri wa ikumi na mbili"
    ],
    name => "Rombo Tanzania",
    native_language => "Kihorombo",
    native_name => "Kihorombo Tanzania",
    native_script => undef,
    native_territory => "Tanzania",
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo ya kwanza",
      "Robo ya kaili",
      "Robo ya katatu",
      "Robo ya kaana"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo ya kwanza",
      "Robo ya kaili",
      "Robo ya katatu",
      "Robo ya kaana"
    ],
    script => undef,
    territory => "Tanzania",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ root ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "root",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Root",
    month_format_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    name => "Root",
    native_language => "root",
    native_name => "root",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ru ]__
  {
    am_pm_abbreviated => [
      "\N{U+0414}\N{U+041f}",
      "\N{U+041f}\N{U+041f}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "ccc, d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y '\N{U+0433}'. G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y '\N{U+0433}'. G",
      GyMMMd => "d MMM y '\N{U+0433}'. G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "ccc, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd.MM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "ccc, d.MM.y '\N{U+0433}'.",
      yMM => "MM.y",
      yMMM => "LLL y '\N{U+0433}'.",
      yMMMEd => "E, d MMM y '\N{U+0433}'.",
      yMMMM => "LLLL y '\N{U+0433}'.",
      yMMMd => "d MMM y '\N{U+0433}'.",
      yMd => "dd.MM.y",
      yQQQ => "QQQ y '\N{U+0433}'.",
      yQQQQ => "QQQQ y '\N{U+0433}'."
    },
    code => "ru",
    date_format_full => "EEEE, d MMMM y '\N{U+0433}'.",
    date_format_long => "d MMMM y '\N{U+0433}'.",
    date_format_medium => "d MMM y '\N{U+0433}'.",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_format_narrow => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044c}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0433}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0432}\N{U+043e}\N{U+0441}\N{U+043a}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}\N{U+0435}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_stand_alone_narrow => [
      "\N{U+041f}",
      "\N{U+0412}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+041f}",
      "\N{U+0421}",
      "\N{U+0412}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044c}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0433}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0432}\N{U+043e}\N{U+0441}\N{U+043a}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}\N{U+0435}"
    ],
    era_abbreviated => [
      "\N{U+0434}\N{U+043e} \N{U+043d}. \N{U+044d}.",
      "\N{U+043d}. \N{U+044d}."
    ],
    era_narrow => [
      "\N{U+0434}\N{U+043e} \N{U+043d}.\N{U+044d}.",
      "\N{U+043d}.\N{U+044d}."
    ],
    era_wide => [
      "\N{U+0434}\N{U+043e} \N{U+0420}\N{U+043e}\N{U+0436}\N{U+0434}\N{U+0435}\N{U+0441}\N{U+0442}\N{U+0432}\N{U+0430} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+0432}\N{U+0430}",
      "\N{U+043e}\N{U+0442} \N{U+0420}\N{U+043e}\N{U+0436}\N{U+0434}\N{U+0435}\N{U+0441}\N{U+0442}\N{U+0432}\N{U+0430} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+0432}\N{U+0430}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Russian",
    month_format_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}.",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043d}.",
      "\N{U+0438}\N{U+044e}\N{U+043b}.",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_format_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_format_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044f}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044f}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044f}",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044f}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}\N{U+0430}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044f}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_stand_alone_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    name => "Russian",
    native_language => "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439}",
    native_name => "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ ru-BY ]__
  {
    am_pm_abbreviated => [
      "\N{U+0414}\N{U+041f}",
      "\N{U+041f}\N{U+041f}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "ccc, d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y '\N{U+0433}'. G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y '\N{U+0433}'. G",
      GyMMMd => "d MMM y '\N{U+0433}'. G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "ccc, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd.MM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "ccc, d.MM.y '\N{U+0433}'.",
      yMM => "MM.y",
      yMMM => "LLL y '\N{U+0433}'.",
      yMMMEd => "E, d MMM y '\N{U+0433}'.",
      yMMMM => "LLLL y '\N{U+0433}'.",
      yMMMd => "d MMM y '\N{U+0433}'.",
      yMd => "dd.MM.y",
      yQQQ => "QQQ y '\N{U+0433}'.",
      yQQQQ => "QQQQ y '\N{U+0433}'."
    },
    code => "ru-BY",
    date_format_full => "EEEE, d MMMM y '\N{U+0433}'.",
    date_format_long => "d MMMM y '\N{U+0433}'.",
    date_format_medium => "d MMM y '\N{U+0433}'.",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_format_narrow => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044c}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0433}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0432}\N{U+043e}\N{U+0441}\N{U+043a}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}\N{U+0435}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_stand_alone_narrow => [
      "\N{U+041f}",
      "\N{U+0412}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+041f}",
      "\N{U+0421}",
      "\N{U+0412}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044c}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0433}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0432}\N{U+043e}\N{U+0441}\N{U+043a}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}\N{U+0435}"
    ],
    era_abbreviated => [
      "\N{U+0434}\N{U+043e} \N{U+043d}. \N{U+044d}.",
      "\N{U+043d}. \N{U+044d}."
    ],
    era_narrow => [
      "\N{U+0434}\N{U+043e} \N{U+043d}.\N{U+044d}.",
      "\N{U+043d}.\N{U+044d}."
    ],
    era_wide => [
      "\N{U+0434}\N{U+043e} \N{U+0420}\N{U+043e}\N{U+0436}\N{U+0434}\N{U+0435}\N{U+0441}\N{U+0442}\N{U+0432}\N{U+0430} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+0432}\N{U+0430}",
      "\N{U+043e}\N{U+0442} \N{U+0420}\N{U+043e}\N{U+0436}\N{U+0434}\N{U+0435}\N{U+0441}\N{U+0442}\N{U+0432}\N{U+0430} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+0432}\N{U+0430}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Russian",
    month_format_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}.",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043d}.",
      "\N{U+0438}\N{U+044e}\N{U+043b}.",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_format_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_format_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044f}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044f}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044f}",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044f}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}\N{U+0430}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044f}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_stand_alone_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    name => "Russian Belarus",
    native_language => "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439}",
    native_name => "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439} \N{U+0411}\N{U+0435}\N{U+043b}\N{U+0430}\N{U+0440}\N{U+0443}\N{U+0441}\N{U+044c}",
    native_script => undef,
    native_territory => "\N{U+0411}\N{U+0435}\N{U+043b}\N{U+0430}\N{U+0440}\N{U+0443}\N{U+0441}\N{U+044c}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => "Belarus",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ ru-KG ]__
  {
    am_pm_abbreviated => [
      "\N{U+0414}\N{U+041f}",
      "\N{U+041f}\N{U+041f}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "ccc, d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y '\N{U+0433}'. G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y '\N{U+0433}'. G",
      GyMMMd => "d MMM y '\N{U+0433}'. G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "ccc, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd.MM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "ccc, d.MM.y '\N{U+0433}'.",
      yMM => "MM.y",
      yMMM => "LLL y '\N{U+0433}'.",
      yMMMEd => "E, d MMM y '\N{U+0433}'.",
      yMMMM => "LLLL y '\N{U+0433}'.",
      yMMMd => "d MMM y '\N{U+0433}'.",
      yMd => "dd.MM.y",
      yQQQ => "QQQ y '\N{U+0433}'.",
      yQQQQ => "QQQQ y '\N{U+0433}'."
    },
    code => "ru-KG",
    date_format_full => "EEEE, d MMMM y '\N{U+0433}'.",
    date_format_long => "d MMMM y '\N{U+0433}'.",
    date_format_medium => "d MMM y '\N{U+0433}'.",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_format_narrow => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044c}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0433}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0432}\N{U+043e}\N{U+0441}\N{U+043a}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}\N{U+0435}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_stand_alone_narrow => [
      "\N{U+041f}",
      "\N{U+0412}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+041f}",
      "\N{U+0421}",
      "\N{U+0412}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044c}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0433}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0432}\N{U+043e}\N{U+0441}\N{U+043a}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}\N{U+0435}"
    ],
    era_abbreviated => [
      "\N{U+0434}\N{U+043e} \N{U+043d}. \N{U+044d}.",
      "\N{U+043d}. \N{U+044d}."
    ],
    era_narrow => [
      "\N{U+0434}\N{U+043e} \N{U+043d}.\N{U+044d}.",
      "\N{U+043d}.\N{U+044d}."
    ],
    era_wide => [
      "\N{U+0434}\N{U+043e} \N{U+0420}\N{U+043e}\N{U+0436}\N{U+0434}\N{U+0435}\N{U+0441}\N{U+0442}\N{U+0432}\N{U+0430} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+0432}\N{U+0430}",
      "\N{U+043e}\N{U+0442} \N{U+0420}\N{U+043e}\N{U+0436}\N{U+0434}\N{U+0435}\N{U+0441}\N{U+0442}\N{U+0432}\N{U+0430} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+0432}\N{U+0430}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Russian",
    month_format_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}.",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043d}.",
      "\N{U+0438}\N{U+044e}\N{U+043b}.",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_format_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_format_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044f}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044f}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044f}",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044f}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}\N{U+0430}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044f}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_stand_alone_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    name => "Russian Kyrgyzstan",
    native_language => "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439}",
    native_name => "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439} \N{U+041a}\N{U+0438}\N{U+0440}\N{U+0433}\N{U+0438}\N{U+0437}\N{U+0438}\N{U+044f}",
    native_script => undef,
    native_territory => "\N{U+041a}\N{U+0438}\N{U+0440}\N{U+0433}\N{U+0438}\N{U+0437}\N{U+0438}\N{U+044f}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => "Kyrgyzstan",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ ru-KZ ]__
  {
    am_pm_abbreviated => [
      "\N{U+0414}\N{U+041f}",
      "\N{U+041f}\N{U+041f}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "ccc, d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y '\N{U+0433}'. G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y '\N{U+0433}'. G",
      GyMMMd => "d MMM y '\N{U+0433}'. G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "ccc, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd.MM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "ccc, d.MM.y '\N{U+0433}'.",
      yMM => "MM.y",
      yMMM => "LLL y '\N{U+0433}'.",
      yMMMEd => "E, d MMM y '\N{U+0433}'.",
      yMMMM => "LLLL y '\N{U+0433}'.",
      yMMMd => "d MMM y '\N{U+0433}'.",
      yMd => "dd.MM.y",
      yQQQ => "QQQ y '\N{U+0433}'.",
      yQQQQ => "QQQQ y '\N{U+0433}'."
    },
    code => "ru-KZ",
    date_format_full => "EEEE, d MMMM y '\N{U+0433}'.",
    date_format_long => "d MMMM y '\N{U+0433}'.",
    date_format_medium => "d MMM y '\N{U+0433}'.",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_format_narrow => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044c}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0433}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0432}\N{U+043e}\N{U+0441}\N{U+043a}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}\N{U+0435}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_stand_alone_narrow => [
      "\N{U+041f}",
      "\N{U+0412}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+041f}",
      "\N{U+0421}",
      "\N{U+0412}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044c}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0433}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0432}\N{U+043e}\N{U+0441}\N{U+043a}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}\N{U+0435}"
    ],
    era_abbreviated => [
      "\N{U+0434}\N{U+043e} \N{U+043d}. \N{U+044d}.",
      "\N{U+043d}. \N{U+044d}."
    ],
    era_narrow => [
      "\N{U+0434}\N{U+043e} \N{U+043d}.\N{U+044d}.",
      "\N{U+043d}.\N{U+044d}."
    ],
    era_wide => [
      "\N{U+0434}\N{U+043e} \N{U+0420}\N{U+043e}\N{U+0436}\N{U+0434}\N{U+0435}\N{U+0441}\N{U+0442}\N{U+0432}\N{U+0430} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+0432}\N{U+0430}",
      "\N{U+043e}\N{U+0442} \N{U+0420}\N{U+043e}\N{U+0436}\N{U+0434}\N{U+0435}\N{U+0441}\N{U+0442}\N{U+0432}\N{U+0430} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+0432}\N{U+0430}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Russian",
    month_format_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}.",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043d}.",
      "\N{U+0438}\N{U+044e}\N{U+043b}.",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_format_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_format_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044f}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044f}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044f}",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044f}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}\N{U+0430}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044f}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_stand_alone_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    name => "Russian Kazakhstan",
    native_language => "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439}",
    native_name => "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439} \N{U+041a}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0445}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+043d}",
    native_script => undef,
    native_territory => "\N{U+041a}\N{U+0430}\N{U+0437}\N{U+0430}\N{U+0445}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+043d}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => "Kazakhstan",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ ru-MD ]__
  {
    am_pm_abbreviated => [
      "\N{U+0414}\N{U+041f}",
      "\N{U+041f}\N{U+041f}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "ccc, d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y '\N{U+0433}'. G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y '\N{U+0433}'. G",
      GyMMMd => "d MMM y '\N{U+0433}'. G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "ccc, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd.MM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "ccc, d.MM.y '\N{U+0433}'.",
      yMM => "MM.y",
      yMMM => "LLL y '\N{U+0433}'.",
      yMMMEd => "E, d MMM y '\N{U+0433}'.",
      yMMMM => "LLLL y '\N{U+0433}'.",
      yMMMd => "d MMM y '\N{U+0433}'.",
      yMd => "dd.MM.y",
      yQQQ => "QQQ y '\N{U+0433}'.",
      yQQQQ => "QQQQ y '\N{U+0433}'."
    },
    code => "ru-MD",
    date_format_full => "EEEE, d MMMM y '\N{U+0433}'.",
    date_format_long => "d MMMM y '\N{U+0433}'.",
    date_format_medium => "d MMM y '\N{U+0433}'.",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_format_narrow => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044c}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0433}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0432}\N{U+043e}\N{U+0441}\N{U+043a}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}\N{U+0435}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_stand_alone_narrow => [
      "\N{U+041f}",
      "\N{U+0412}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+041f}",
      "\N{U+0421}",
      "\N{U+0412}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044c}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0433}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0432}\N{U+043e}\N{U+0441}\N{U+043a}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}\N{U+0435}"
    ],
    era_abbreviated => [
      "\N{U+0434}\N{U+043e} \N{U+043d}. \N{U+044d}.",
      "\N{U+043d}. \N{U+044d}."
    ],
    era_narrow => [
      "\N{U+0434}\N{U+043e} \N{U+043d}.\N{U+044d}.",
      "\N{U+043d}.\N{U+044d}."
    ],
    era_wide => [
      "\N{U+0434}\N{U+043e} \N{U+0420}\N{U+043e}\N{U+0436}\N{U+0434}\N{U+0435}\N{U+0441}\N{U+0442}\N{U+0432}\N{U+0430} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+0432}\N{U+0430}",
      "\N{U+043e}\N{U+0442} \N{U+0420}\N{U+043e}\N{U+0436}\N{U+0434}\N{U+0435}\N{U+0441}\N{U+0442}\N{U+0432}\N{U+0430} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+0432}\N{U+0430}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Russian",
    month_format_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}.",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043d}.",
      "\N{U+0438}\N{U+044e}\N{U+043b}.",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_format_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_format_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044f}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044f}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044f}",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044f}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}\N{U+0430}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044f}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_stand_alone_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    name => "Russian Moldova",
    native_language => "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439}",
    native_name => "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439} \N{U+041c}\N{U+043e}\N{U+043b}\N{U+0434}\N{U+043e}\N{U+0432}\N{U+0430}",
    native_script => undef,
    native_territory => "\N{U+041c}\N{U+043e}\N{U+043b}\N{U+0434}\N{U+043e}\N{U+0432}\N{U+0430}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => "Moldova",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ ru-RU ]__
  {
    am_pm_abbreviated => [
      "\N{U+0414}\N{U+041f}",
      "\N{U+041f}\N{U+041f}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "ccc, d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y '\N{U+0433}'. G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y '\N{U+0433}'. G",
      GyMMMd => "d MMM y '\N{U+0433}'. G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "ccc, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd.MM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "ccc, d.MM.y '\N{U+0433}'.",
      yMM => "MM.y",
      yMMM => "LLL y '\N{U+0433}'.",
      yMMMEd => "E, d MMM y '\N{U+0433}'.",
      yMMMM => "LLLL y '\N{U+0433}'.",
      yMMMd => "d MMM y '\N{U+0433}'.",
      yMd => "dd.MM.y",
      yQQQ => "QQQ y '\N{U+0433}'.",
      yQQQQ => "QQQQ y '\N{U+0433}'."
    },
    code => "ru-RU",
    date_format_full => "EEEE, d MMMM y '\N{U+0433}'.",
    date_format_long => "d MMMM y '\N{U+0433}'.",
    date_format_medium => "d MMM y '\N{U+0433}'.",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_format_narrow => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044c}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0433}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0432}\N{U+043e}\N{U+0441}\N{U+043a}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}\N{U+0435}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_stand_alone_narrow => [
      "\N{U+041f}",
      "\N{U+0412}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+041f}",
      "\N{U+0421}",
      "\N{U+0412}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044c}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0433}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0432}\N{U+043e}\N{U+0441}\N{U+043a}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}\N{U+0435}"
    ],
    era_abbreviated => [
      "\N{U+0434}\N{U+043e} \N{U+043d}. \N{U+044d}.",
      "\N{U+043d}. \N{U+044d}."
    ],
    era_narrow => [
      "\N{U+0434}\N{U+043e} \N{U+043d}.\N{U+044d}.",
      "\N{U+043d}.\N{U+044d}."
    ],
    era_wide => [
      "\N{U+0434}\N{U+043e} \N{U+0420}\N{U+043e}\N{U+0436}\N{U+0434}\N{U+0435}\N{U+0441}\N{U+0442}\N{U+0432}\N{U+0430} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+0432}\N{U+0430}",
      "\N{U+043e}\N{U+0442} \N{U+0420}\N{U+043e}\N{U+0436}\N{U+0434}\N{U+0435}\N{U+0441}\N{U+0442}\N{U+0432}\N{U+0430} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+0432}\N{U+0430}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d %b %Y %T",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Russian",
    month_format_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}.",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043d}.",
      "\N{U+0438}\N{U+044e}\N{U+043b}.",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_format_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_format_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044f}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044f}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044f}",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044f}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}\N{U+0430}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044f}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_stand_alone_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    name => "Russian Russia",
    native_language => "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439}",
    native_name => "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439} \N{U+0420}\N{U+043e}\N{U+0441}\N{U+0441}\N{U+0438}\N{U+044f}",
    native_script => undef,
    native_territory => "\N{U+0420}\N{U+043e}\N{U+0441}\N{U+0441}\N{U+0438}\N{U+044f}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => "Russia",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ ru-UA ]__
  {
    am_pm_abbreviated => [
      "\N{U+0414}\N{U+041f}",
      "\N{U+041f}\N{U+041f}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "ccc, d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y '\N{U+0433}'. G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y '\N{U+0433}'. G",
      GyMMMd => "d MMM y '\N{U+0433}'. G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmv => "H:mm v",
      M => "L",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "ccc, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd.MM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "ccc, d.MM.y '\N{U+0433}'.",
      yMM => "MM.y",
      yMMM => "LLL y '\N{U+0433}'.",
      yMMMEd => "E, d MMM y '\N{U+0433}'.",
      yMMMM => "LLLL y '\N{U+0433}'.",
      yMMMd => "d MMM y '\N{U+0433}'.",
      yMd => "dd.MM.y",
      yQQQ => "QQQ y '\N{U+0433}'.",
      yQQQQ => "QQQQ y '\N{U+0433}'."
    },
    code => "ru-UA",
    date_format_full => "EEEE, d MMMM y '\N{U+0433}'.",
    date_format_long => "d MMMM y '\N{U+0433}'.",
    date_format_medium => "d MMM y '\N{U+0433}'.",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_format_narrow => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044c}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0433}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0432}\N{U+043e}\N{U+0441}\N{U+043a}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}\N{U+0435}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043d}",
      "\N{U+0432}\N{U+0442}",
      "\N{U+0441}\N{U+0440}",
      "\N{U+0447}\N{U+0442}",
      "\N{U+043f}\N{U+0442}",
      "\N{U+0441}\N{U+0431}",
      "\N{U+0432}\N{U+0441}"
    ],
    day_stand_alone_narrow => [
      "\N{U+041f}",
      "\N{U+0412}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+041f}",
      "\N{U+0421}",
      "\N{U+0412}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+043b}\N{U+044c}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043d}\N{U+0438}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0433}",
      "\N{U+043f}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+0430}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0432}\N{U+043e}\N{U+0441}\N{U+043a}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}\N{U+0435}"
    ],
    era_abbreviated => [
      "\N{U+0434}\N{U+043e} \N{U+043d}. \N{U+044d}.",
      "\N{U+043d}. \N{U+044d}."
    ],
    era_narrow => [
      "\N{U+0434}\N{U+043e} \N{U+043d}.\N{U+044d}.",
      "\N{U+043d}.\N{U+044d}."
    ],
    era_wide => [
      "\N{U+0434}\N{U+043e} \N{U+0420}\N{U+043e}\N{U+0436}\N{U+0434}\N{U+0435}\N{U+0441}\N{U+0442}\N{U+0432}\N{U+0430} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+0432}\N{U+0430}",
      "\N{U+043e}\N{U+0442} \N{U+0420}\N{U+043e}\N{U+0436}\N{U+0434}\N{U+0435}\N{U+0441}\N{U+0442}\N{U+0432}\N{U+0430} \N{U+0425}\N{U+0440}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+0432}\N{U+0430}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d %b %Y %T",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Russian",
    month_format_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}.",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043d}.",
      "\N{U+0438}\N{U+044e}\N{U+043b}.",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_format_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_format_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044f}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044f}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044f}",
      "\N{U+043c}\N{U+0430}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044f}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044f}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}\N{U+0430}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044f}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044f}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+044f}\N{U+043d}\N{U+0432}.",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}.",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}.",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}.",
      "\N{U+043e}\N{U+043a}\N{U+0442}.",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}.",
      "\N{U+0434}\N{U+0435}\N{U+043a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_stand_alone_wide => [
      "\N{U+044f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+044c}",
      "\N{U+0444}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}\N{U+044c}",
      "\N{U+043c}\N{U+0430}\N{U+0439}",
      "\N{U+0438}\N{U+044e}\N{U+043d}\N{U+044c}",
      "\N{U+0438}\N{U+044e}\N{U+043b}\N{U+044c}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+043d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}\N{U+044c}",
      "\N{U+0434}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}\N{U+044c}"
    ],
    name => "Russian Ukraine",
    native_language => "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439}",
    native_name => "\N{U+0440}\N{U+0443}\N{U+0441}\N{U+0441}\N{U+043a}\N{U+0438}\N{U+0439} \N{U+0423}\N{U+043a}\N{U+0440}\N{U+0430}\N{U+0438}\N{U+043d}\N{U+0430}",
    native_script => undef,
    native_territory => "\N{U+0423}\N{U+043a}\N{U+0440}\N{U+0430}\N{U+0438}\N{U+043d}\N{U+0430}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => "Ukraine",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ rw ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "rw",
    date_format_full => "EEEE, y MMMM dd",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "yy/MM/dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "mbe.",
      "kab.",
      "gtu.",
      "kan.",
      "gnu.",
      "gnd.",
      "cyu."
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Kuwa mbere",
      "Kuwa kabiri",
      "Kuwa gatatu",
      "Kuwa kane",
      "Kuwa gatanu",
      "Kuwa gatandatu",
      "Ku cyumweru"
    ],
    day_stand_alone_abbreviated => [
      "mbe.",
      "kab.",
      "gtu.",
      "kan.",
      "gnu.",
      "gnd.",
      "cyu."
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Kuwa mbere",
      "Kuwa kabiri",
      "Kuwa gatatu",
      "Kuwa kane",
      "Kuwa gatanu",
      "Kuwa gatandatu",
      "Ku cyumweru"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Kinyarwanda",
    month_format_abbreviated => [
      "mut.",
      "gas.",
      "wer.",
      "mat.",
      "gic.",
      "kam.",
      "nya.",
      "kan.",
      "nze.",
      "ukw.",
      "ugu.",
      "uku."
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Mutarama",
      "Gashyantare",
      "Werurwe",
      "Mata",
      "Gicuransi",
      "Kamena",
      "Nyakanga",
      "Kanama",
      "Nzeli",
      "Ukwakira",
      "Ugushyingo",
      "Ukuboza"
    ],
    month_stand_alone_abbreviated => [
      "mut.",
      "gas.",
      "wer.",
      "mat.",
      "gic.",
      "kam.",
      "nya.",
      "kan.",
      "nze.",
      "ukw.",
      "ugu.",
      "uku."
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Mutarama",
      "Gashyantare",
      "Werurwe",
      "Mata",
      "Gicuransi",
      "Kamena",
      "Nyakanga",
      "Kanama",
      "Nzeli",
      "Ukwakira",
      "Ugushyingo",
      "Ukuboza"
    ],
    name => "Kinyarwanda",
    native_language => "Kinyarwanda",
    native_name => "Kinyarwanda",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "I1",
      "I2",
      "I3",
      "I4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "igihembwe cya mbere",
      "igihembwe cya kabiri",
      "igihembwe cya gatatu",
      "igihembwe cya kane"
    ],
    quarter_stand_alone_abbreviated => [
      "I1",
      "I2",
      "I3",
      "I4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "igihembwe cya mbere",
      "igihembwe cya kabiri",
      "igihembwe cya gatatu",
      "igihembwe cya kane"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ rw-RW ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "rw-RW",
    date_format_full => "EEEE, y MMMM dd",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "yy/MM/dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "mbe.",
      "kab.",
      "gtu.",
      "kan.",
      "gnu.",
      "gnd.",
      "cyu."
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Kuwa mbere",
      "Kuwa kabiri",
      "Kuwa gatatu",
      "Kuwa kane",
      "Kuwa gatanu",
      "Kuwa gatandatu",
      "Ku cyumweru"
    ],
    day_stand_alone_abbreviated => [
      "mbe.",
      "kab.",
      "gtu.",
      "kan.",
      "gnu.",
      "gnd.",
      "cyu."
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Kuwa mbere",
      "Kuwa kabiri",
      "Kuwa gatatu",
      "Kuwa kane",
      "Kuwa gatanu",
      "Kuwa gatandatu",
      "Ku cyumweru"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Kinyarwanda",
    month_format_abbreviated => [
      "mut.",
      "gas.",
      "wer.",
      "mat.",
      "gic.",
      "kam.",
      "nya.",
      "kan.",
      "nze.",
      "ukw.",
      "ugu.",
      "uku."
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Mutarama",
      "Gashyantare",
      "Werurwe",
      "Mata",
      "Gicuransi",
      "Kamena",
      "Nyakanga",
      "Kanama",
      "Nzeli",
      "Ukwakira",
      "Ugushyingo",
      "Ukuboza"
    ],
    month_stand_alone_abbreviated => [
      "mut.",
      "gas.",
      "wer.",
      "mat.",
      "gic.",
      "kam.",
      "nya.",
      "kan.",
      "nze.",
      "ukw.",
      "ugu.",
      "uku."
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Mutarama",
      "Gashyantare",
      "Werurwe",
      "Mata",
      "Gicuransi",
      "Kamena",
      "Nyakanga",
      "Kanama",
      "Nzeli",
      "Ukwakira",
      "Ugushyingo",
      "Ukuboza"
    ],
    name => "Kinyarwanda Rwanda",
    native_language => "Kinyarwanda",
    native_name => "Kinyarwanda Rwanda",
    native_script => undef,
    native_territory => "Rwanda",
    native_variant => undef,
    quarter_format_abbreviated => [
      "I1",
      "I2",
      "I3",
      "I4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "igihembwe cya mbere",
      "igihembwe cya kabiri",
      "igihembwe cya gatatu",
      "igihembwe cya kane"
    ],
    quarter_stand_alone_abbreviated => [
      "I1",
      "I2",
      "I3",
      "I4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "igihembwe cya mbere",
      "igihembwe cya kabiri",
      "igihembwe cya gatatu",
      "igihembwe cya kane"
    ],
    script => undef,
    territory => "Rwanda",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ rwk ]__
  {
    am_pm_abbreviated => [
      "utuko",
      "kyiukonyi"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "rwk",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_format_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "J"
    ],
    day_format_wide => [
      "Jumatatuu",
      "Jumanne",
      "Jumatanu",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapilyi"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_stand_alone_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "J"
    ],
    day_stand_alone_wide => [
      "Jumatatuu",
      "Jumanne",
      "Jumatanu",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapilyi"
    ],
    era_abbreviated => [
      "KK",
      "BK"
    ],
    era_narrow => [
      "KK",
      "BK"
    ],
    era_wide => [
      "Kabla ya Kristu",
      "Baada ya Kristu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Rwa",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprilyi",
      "Mei",
      "Junyi",
      "Julyai",
      "Agusti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprilyi",
      "Mei",
      "Junyi",
      "Julyai",
      "Agusti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Rwa",
    native_language => "Kiruwa",
    native_name => "Kiruwa",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ rwk-TZ ]__
  {
    am_pm_abbreviated => [
      "utuko",
      "kyiukonyi"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "rwk-TZ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_format_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "J"
    ],
    day_format_wide => [
      "Jumatatuu",
      "Jumanne",
      "Jumatanu",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapilyi"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_stand_alone_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "J"
    ],
    day_stand_alone_wide => [
      "Jumatatuu",
      "Jumanne",
      "Jumatanu",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapilyi"
    ],
    era_abbreviated => [
      "KK",
      "BK"
    ],
    era_narrow => [
      "KK",
      "BK"
    ],
    era_wide => [
      "Kabla ya Kristu",
      "Baada ya Kristu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Rwa",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprilyi",
      "Mei",
      "Junyi",
      "Julyai",
      "Agusti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprilyi",
      "Mei",
      "Junyi",
      "Julyai",
      "Agusti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Rwa Tanzania",
    native_language => "Kiruwa",
    native_name => "Kiruwa Tanzania",
    native_script => undef,
    native_territory => "Tanzania",
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    script => undef,
    territory => "Tanzania",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sah ]__
  {
    am_pm_abbreviated => [
      "\N{U+042d}\N{U+0418}",
      "\N{U+042d}\N{U+041a}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "sah",
    date_format_full => "y '\N{U+0441}\N{U+044b}\N{U+043b}' MMMM d '\N{U+043a}\N{U+04af}\N{U+043d}\N{U+044d}', EEEE",
    date_format_long => "y, MMMM d",
    date_format_medium => "y, MMM d",
    date_format_short => "yy/M/d",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0411}\N{U+043d}",
      "\N{U+041e}\N{U+043f}",
      "\N{U+0421}\N{U+044d}",
      "\N{U+0427}\N{U+043f}",
      "\N{U+0411}\N{U+044d}",
      "\N{U+0421}\N{U+0431}",
      "\N{U+0411}\N{U+0441}"
    ],
    day_format_narrow => [
      "\N{U+0411}",
      "\N{U+041e}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+0411}",
      "\N{U+0421}",
      "\N{U+0411}"
    ],
    day_format_wide => [
      "\N{U+0411}\N{U+044d}\N{U+043d}\N{U+0438}\N{U+0434}\N{U+0438}\N{U+044d}\N{U+043b}\N{U+0438}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0438}\N{U+043a}",
      "\N{U+041e}\N{U+043f}\N{U+0442}\N{U+0443}\N{U+043e}\N{U+0440}\N{U+0443}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0443}\N{U+043a}",
      "\N{U+0421}\N{U+044d}\N{U+0440}\N{U+044d}\N{U+0434}\N{U+044d}",
      "\N{U+0427}\N{U+044d}\N{U+043f}\N{U+043f}\N{U+0438}\N{U+044d}\N{U+0440}",
      "\N{U+0411}\N{U+044d}\N{U+044d}\N{U+0442}\N{U+0438}\N{U+04a5}\N{U+0441}\N{U+044d}",
      "\N{U+0421}\N{U+0443}\N{U+0431}\N{U+0443}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0411}\N{U+0430}\N{U+0441}\N{U+043a}\N{U+044b}\N{U+04bb}\N{U+044b}\N{U+0430}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0430}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0411}\N{U+043d}",
      "\N{U+041e}\N{U+043f}",
      "\N{U+0421}\N{U+044d}",
      "\N{U+0427}\N{U+043f}",
      "\N{U+0411}\N{U+044d}",
      "\N{U+0421}\N{U+0431}",
      "\N{U+0411}\N{U+0441}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0411}",
      "\N{U+041e}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+0411}",
      "\N{U+0421}",
      "\N{U+0411}"
    ],
    day_stand_alone_wide => [
      "\N{U+0411}\N{U+044d}\N{U+043d}\N{U+0438}\N{U+0434}\N{U+0438}\N{U+044d}\N{U+043b}\N{U+0438}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0438}\N{U+043a}",
      "\N{U+041e}\N{U+043f}\N{U+0442}\N{U+0443}\N{U+043e}\N{U+0440}\N{U+0443}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0443}\N{U+043a}",
      "\N{U+0421}\N{U+044d}\N{U+0440}\N{U+044d}\N{U+0434}\N{U+044d}",
      "\N{U+0427}\N{U+044d}\N{U+043f}\N{U+043f}\N{U+0438}\N{U+044d}\N{U+0440}",
      "\N{U+0411}\N{U+044d}\N{U+044d}\N{U+0442}\N{U+0438}\N{U+04a5}\N{U+0441}\N{U+044d}",
      "\N{U+0421}\N{U+0443}\N{U+0431}\N{U+0443}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0411}\N{U+0430}\N{U+0441}\N{U+043a}\N{U+044b}\N{U+04bb}\N{U+044b}\N{U+0430}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0430}"
    ],
    era_abbreviated => [
      "\N{U+0431}. \N{U+044d}. \N{U+0438}.",
      "\N{U+0431}. \N{U+044d}"
    ],
    era_narrow => [
      "\N{U+0431}. \N{U+044d}. \N{U+0438}.",
      "\N{U+0431}. \N{U+044d}"
    ],
    era_wide => [
      "\N{U+0431}. \N{U+044d}. \N{U+0438}.",
      "\N{U+0431}. \N{U+044d}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Sakha",
    month_format_abbreviated => [
      "\N{U+0422}\N{U+043e}\N{U+0445}\N{U+0441}",
      "\N{U+041e}\N{U+043b}\N{U+0443}\N{U+043d}",
      "\N{U+041a}\N{U+043b}\N{U+043d}_\N{U+0442}\N{U+0442}\N{U+0440}",
      "\N{U+041c}\N{U+0443}\N{U+0441}_\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+042b}\N{U+0430}\N{U+043c}_\N{U+0439}\N{U+043d}",
      "\N{U+0411}\N{U+044d}\N{U+0441}_\N{U+0439}\N{U+043d}",
      "\N{U+041e}\N{U+0442}_\N{U+0439}\N{U+043d}",
      "\N{U+0410}\N{U+0442}\N{U+0440}\N{U+0434}\N{U+044c}_\N{U+0439}\N{U+043d}",
      "\N{U+0411}\N{U+043b}\N{U+0495}\N{U+043d}_\N{U+0439}\N{U+043d}",
      "\N{U+0410}\N{U+043b}\N{U+0442}",
      "\N{U+0421}\N{U+044d}\N{U+0442}",
      "\N{U+0410}\N{U+0445}\N{U+0441}"
    ],
    month_format_narrow => [
      "\N{U+0422}",
      "\N{U+041e}",
      "\N{U+041a}",
      "\N{U+041c}",
      "\N{U+042b}",
      "\N{U+0411}",
      "\N{U+041e}",
      "\N{U+0410}",
      "\N{U+0411}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+0410}"
    ],
    month_format_wide => [
      "\N{U+0422}\N{U+043e}\N{U+0445}\N{U+0441}\N{U+0443}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0443}",
      "\N{U+041e}\N{U+043b}\N{U+0443}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0443}",
      "\N{U+041a}\N{U+0443}\N{U+043b}\N{U+0443}\N{U+043d} \N{U+0442}\N{U+0443}\N{U+0442}\N{U+0430}\N{U+0440}",
      "\N{U+041c}\N{U+0443}\N{U+0443}\N{U+0441} \N{U+0443}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+0440}",
      "\N{U+042b}\N{U+0430}\N{U+043c} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+0411}\N{U+044d}\N{U+0441} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+041e}\N{U+0442} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+0410}\N{U+0442}\N{U+044b}\N{U+0440}\N{U+0434}\N{U+044c}\N{U+044b}\N{U+0445} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+0411}\N{U+0430}\N{U+043b}\N{U+0430}\N{U+0495}\N{U+0430}\N{U+043d} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+0410}\N{U+043b}\N{U+0442}\N{U+044b}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+044b}",
      "\N{U+0421}\N{U+044d}\N{U+0442}\N{U+0438}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0438}",
      "\N{U+0410}\N{U+0445}\N{U+0441}\N{U+044b}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+044b}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0422}\N{U+043e}\N{U+0445}\N{U+0441}",
      "\N{U+041e}\N{U+043b}\N{U+0443}\N{U+043d}",
      "\N{U+041a}\N{U+043b}\N{U+043d}_\N{U+0442}\N{U+0442}\N{U+0440}",
      "\N{U+041c}\N{U+0443}\N{U+0441}_\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+042b}\N{U+0430}\N{U+043c}_\N{U+0439}\N{U+043d}",
      "\N{U+0411}\N{U+044d}\N{U+0441}_\N{U+0439}\N{U+043d}",
      "\N{U+041e}\N{U+0442}_\N{U+0439}\N{U+043d}",
      "\N{U+0410}\N{U+0442}\N{U+0440}\N{U+0434}\N{U+044c}_\N{U+0439}\N{U+043d}",
      "\N{U+0411}\N{U+043b}\N{U+0495}\N{U+043d}_\N{U+0439}\N{U+043d}",
      "\N{U+0410}\N{U+043b}\N{U+0442}",
      "\N{U+0421}\N{U+044d}\N{U+0442}",
      "\N{U+0410}\N{U+0445}\N{U+0441}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0422}",
      "\N{U+041e}",
      "\N{U+041a}",
      "\N{U+041c}",
      "\N{U+042b}",
      "\N{U+0411}",
      "\N{U+041e}",
      "\N{U+0410}",
      "\N{U+0411}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+0410}"
    ],
    month_stand_alone_wide => [
      "\N{U+0422}\N{U+043e}\N{U+0445}\N{U+0441}\N{U+0443}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0443}",
      "\N{U+041e}\N{U+043b}\N{U+0443}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0443}",
      "\N{U+041a}\N{U+0443}\N{U+043b}\N{U+0443}\N{U+043d} \N{U+0442}\N{U+0443}\N{U+0442}\N{U+0430}\N{U+0440}",
      "\N{U+041c}\N{U+0443}\N{U+0443}\N{U+0441} \N{U+0443}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+0440}",
      "\N{U+042b}\N{U+0430}\N{U+043c} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+0411}\N{U+044d}\N{U+0441} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+041e}\N{U+0442} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+0410}\N{U+0442}\N{U+044b}\N{U+0440}\N{U+0434}\N{U+044c}\N{U+044b}\N{U+0445} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+0411}\N{U+0430}\N{U+043b}\N{U+0430}\N{U+0495}\N{U+0430}\N{U+043d} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+0410}\N{U+043b}\N{U+0442}\N{U+044b}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+044b}",
      "\N{U+0421}\N{U+044d}\N{U+0442}\N{U+0438}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0438}",
      "\N{U+0410}\N{U+0445}\N{U+0441}\N{U+044b}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+044b}"
    ],
    name => "Sakha",
    native_language => "\N{U+0441}\N{U+0430}\N{U+0445}\N{U+0430} \N{U+0442}\N{U+044b}\N{U+043b}\N{U+0430}",
    native_name => "\N{U+0441}\N{U+0430}\N{U+0445}\N{U+0430} \N{U+0442}\N{U+044b}\N{U+043b}\N{U+0430}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+043a}\N{U+044b} \N{U+043a}\N{U+0431}",
      "2-\N{U+0441} \N{U+043a}\N{U+0431}",
      "3-\N{U+0441} \N{U+043a}\N{U+0431}",
      "4-\N{U+0441} \N{U+043a}\N{U+0431}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+043a}\N{U+044b} \N{U+043a}\N{U+044b}\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0441} \N{U+043a}\N{U+044b}\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0441} \N{U+043a}\N{U+044b}\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0441} \N{U+043a}\N{U+044b}\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+043a}\N{U+044b} \N{U+043a}\N{U+0431}",
      "2-\N{U+0441} \N{U+043a}\N{U+0431}",
      "3-\N{U+0441} \N{U+043a}\N{U+0431}",
      "4-\N{U+0441} \N{U+043a}\N{U+0431}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+043a}\N{U+044b} \N{U+043a}\N{U+044b}\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0441} \N{U+043a}\N{U+044b}\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0441} \N{U+043a}\N{U+044b}\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0441} \N{U+043a}\N{U+044b}\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sah-RU ]__
  {
    am_pm_abbreviated => [
      "\N{U+042d}\N{U+0418}",
      "\N{U+042d}\N{U+041a}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "sah-RU",
    date_format_full => "y '\N{U+0441}\N{U+044b}\N{U+043b}' MMMM d '\N{U+043a}\N{U+04af}\N{U+043d}\N{U+044d}', EEEE",
    date_format_long => "y, MMMM d",
    date_format_medium => "y, MMM d",
    date_format_short => "yy/M/d",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0411}\N{U+043d}",
      "\N{U+041e}\N{U+043f}",
      "\N{U+0421}\N{U+044d}",
      "\N{U+0427}\N{U+043f}",
      "\N{U+0411}\N{U+044d}",
      "\N{U+0421}\N{U+0431}",
      "\N{U+0411}\N{U+0441}"
    ],
    day_format_narrow => [
      "\N{U+0411}",
      "\N{U+041e}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+0411}",
      "\N{U+0421}",
      "\N{U+0411}"
    ],
    day_format_wide => [
      "\N{U+0411}\N{U+044d}\N{U+043d}\N{U+0438}\N{U+0434}\N{U+0438}\N{U+044d}\N{U+043b}\N{U+0438}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0438}\N{U+043a}",
      "\N{U+041e}\N{U+043f}\N{U+0442}\N{U+0443}\N{U+043e}\N{U+0440}\N{U+0443}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0443}\N{U+043a}",
      "\N{U+0421}\N{U+044d}\N{U+0440}\N{U+044d}\N{U+0434}\N{U+044d}",
      "\N{U+0427}\N{U+044d}\N{U+043f}\N{U+043f}\N{U+0438}\N{U+044d}\N{U+0440}",
      "\N{U+0411}\N{U+044d}\N{U+044d}\N{U+0442}\N{U+0438}\N{U+04a5}\N{U+0441}\N{U+044d}",
      "\N{U+0421}\N{U+0443}\N{U+0431}\N{U+0443}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0411}\N{U+0430}\N{U+0441}\N{U+043a}\N{U+044b}\N{U+04bb}\N{U+044b}\N{U+0430}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0430}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0411}\N{U+043d}",
      "\N{U+041e}\N{U+043f}",
      "\N{U+0421}\N{U+044d}",
      "\N{U+0427}\N{U+043f}",
      "\N{U+0411}\N{U+044d}",
      "\N{U+0421}\N{U+0431}",
      "\N{U+0411}\N{U+0441}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0411}",
      "\N{U+041e}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+0411}",
      "\N{U+0421}",
      "\N{U+0411}"
    ],
    day_stand_alone_wide => [
      "\N{U+0411}\N{U+044d}\N{U+043d}\N{U+0438}\N{U+0434}\N{U+0438}\N{U+044d}\N{U+043b}\N{U+0438}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0438}\N{U+043a}",
      "\N{U+041e}\N{U+043f}\N{U+0442}\N{U+0443}\N{U+043e}\N{U+0440}\N{U+0443}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0443}\N{U+043a}",
      "\N{U+0421}\N{U+044d}\N{U+0440}\N{U+044d}\N{U+0434}\N{U+044d}",
      "\N{U+0427}\N{U+044d}\N{U+043f}\N{U+043f}\N{U+0438}\N{U+044d}\N{U+0440}",
      "\N{U+0411}\N{U+044d}\N{U+044d}\N{U+0442}\N{U+0438}\N{U+04a5}\N{U+0441}\N{U+044d}",
      "\N{U+0421}\N{U+0443}\N{U+0431}\N{U+0443}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+0411}\N{U+0430}\N{U+0441}\N{U+043a}\N{U+044b}\N{U+04bb}\N{U+044b}\N{U+0430}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0430}"
    ],
    era_abbreviated => [
      "\N{U+0431}. \N{U+044d}. \N{U+0438}.",
      "\N{U+0431}. \N{U+044d}"
    ],
    era_narrow => [
      "\N{U+0431}. \N{U+044d}. \N{U+0438}.",
      "\N{U+0431}. \N{U+044d}"
    ],
    era_wide => [
      "\N{U+0431}. \N{U+044d}. \N{U+0438}.",
      "\N{U+0431}. \N{U+044d}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Sakha",
    month_format_abbreviated => [
      "\N{U+0422}\N{U+043e}\N{U+0445}\N{U+0441}",
      "\N{U+041e}\N{U+043b}\N{U+0443}\N{U+043d}",
      "\N{U+041a}\N{U+043b}\N{U+043d}_\N{U+0442}\N{U+0442}\N{U+0440}",
      "\N{U+041c}\N{U+0443}\N{U+0441}_\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+042b}\N{U+0430}\N{U+043c}_\N{U+0439}\N{U+043d}",
      "\N{U+0411}\N{U+044d}\N{U+0441}_\N{U+0439}\N{U+043d}",
      "\N{U+041e}\N{U+0442}_\N{U+0439}\N{U+043d}",
      "\N{U+0410}\N{U+0442}\N{U+0440}\N{U+0434}\N{U+044c}_\N{U+0439}\N{U+043d}",
      "\N{U+0411}\N{U+043b}\N{U+0495}\N{U+043d}_\N{U+0439}\N{U+043d}",
      "\N{U+0410}\N{U+043b}\N{U+0442}",
      "\N{U+0421}\N{U+044d}\N{U+0442}",
      "\N{U+0410}\N{U+0445}\N{U+0441}"
    ],
    month_format_narrow => [
      "\N{U+0422}",
      "\N{U+041e}",
      "\N{U+041a}",
      "\N{U+041c}",
      "\N{U+042b}",
      "\N{U+0411}",
      "\N{U+041e}",
      "\N{U+0410}",
      "\N{U+0411}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+0410}"
    ],
    month_format_wide => [
      "\N{U+0422}\N{U+043e}\N{U+0445}\N{U+0441}\N{U+0443}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0443}",
      "\N{U+041e}\N{U+043b}\N{U+0443}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0443}",
      "\N{U+041a}\N{U+0443}\N{U+043b}\N{U+0443}\N{U+043d} \N{U+0442}\N{U+0443}\N{U+0442}\N{U+0430}\N{U+0440}",
      "\N{U+041c}\N{U+0443}\N{U+0443}\N{U+0441} \N{U+0443}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+0440}",
      "\N{U+042b}\N{U+0430}\N{U+043c} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+0411}\N{U+044d}\N{U+0441} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+041e}\N{U+0442} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+0410}\N{U+0442}\N{U+044b}\N{U+0440}\N{U+0434}\N{U+044c}\N{U+044b}\N{U+0445} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+0411}\N{U+0430}\N{U+043b}\N{U+0430}\N{U+0495}\N{U+0430}\N{U+043d} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+0410}\N{U+043b}\N{U+0442}\N{U+044b}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+044b}",
      "\N{U+0421}\N{U+044d}\N{U+0442}\N{U+0438}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0438}",
      "\N{U+0410}\N{U+0445}\N{U+0441}\N{U+044b}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+044b}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0422}\N{U+043e}\N{U+0445}\N{U+0441}",
      "\N{U+041e}\N{U+043b}\N{U+0443}\N{U+043d}",
      "\N{U+041a}\N{U+043b}\N{U+043d}_\N{U+0442}\N{U+0442}\N{U+0440}",
      "\N{U+041c}\N{U+0443}\N{U+0441}_\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+042b}\N{U+0430}\N{U+043c}_\N{U+0439}\N{U+043d}",
      "\N{U+0411}\N{U+044d}\N{U+0441}_\N{U+0439}\N{U+043d}",
      "\N{U+041e}\N{U+0442}_\N{U+0439}\N{U+043d}",
      "\N{U+0410}\N{U+0442}\N{U+0440}\N{U+0434}\N{U+044c}_\N{U+0439}\N{U+043d}",
      "\N{U+0411}\N{U+043b}\N{U+0495}\N{U+043d}_\N{U+0439}\N{U+043d}",
      "\N{U+0410}\N{U+043b}\N{U+0442}",
      "\N{U+0421}\N{U+044d}\N{U+0442}",
      "\N{U+0410}\N{U+0445}\N{U+0441}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0422}",
      "\N{U+041e}",
      "\N{U+041a}",
      "\N{U+041c}",
      "\N{U+042b}",
      "\N{U+0411}",
      "\N{U+041e}",
      "\N{U+0410}",
      "\N{U+0411}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+0410}"
    ],
    month_stand_alone_wide => [
      "\N{U+0422}\N{U+043e}\N{U+0445}\N{U+0441}\N{U+0443}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0443}",
      "\N{U+041e}\N{U+043b}\N{U+0443}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0443}",
      "\N{U+041a}\N{U+0443}\N{U+043b}\N{U+0443}\N{U+043d} \N{U+0442}\N{U+0443}\N{U+0442}\N{U+0430}\N{U+0440}",
      "\N{U+041c}\N{U+0443}\N{U+0443}\N{U+0441} \N{U+0443}\N{U+0441}\N{U+0442}\N{U+0430}\N{U+0440}",
      "\N{U+042b}\N{U+0430}\N{U+043c} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+0411}\N{U+044d}\N{U+0441} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+041e}\N{U+0442} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+0410}\N{U+0442}\N{U+044b}\N{U+0440}\N{U+0434}\N{U+044c}\N{U+044b}\N{U+0445} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+0411}\N{U+0430}\N{U+043b}\N{U+0430}\N{U+0495}\N{U+0430}\N{U+043d} \N{U+044b}\N{U+0439}\N{U+044b}\N{U+043d}",
      "\N{U+0410}\N{U+043b}\N{U+0442}\N{U+044b}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+044b}",
      "\N{U+0421}\N{U+044d}\N{U+0442}\N{U+0438}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+0438}",
      "\N{U+0410}\N{U+0445}\N{U+0441}\N{U+044b}\N{U+043d}\N{U+043d}\N{U+044c}\N{U+044b}"
    ],
    name => "Sakha Russia",
    native_language => "\N{U+0441}\N{U+0430}\N{U+0445}\N{U+0430} \N{U+0442}\N{U+044b}\N{U+043b}\N{U+0430}",
    native_name => "\N{U+0441}\N{U+0430}\N{U+0445}\N{U+0430} \N{U+0442}\N{U+044b}\N{U+043b}\N{U+0430} \N{U+0410}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+0441}\N{U+044b}\N{U+044b}\N{U+0439}\N{U+0430}",
    native_script => undef,
    native_territory => "\N{U+0410}\N{U+0440}\N{U+0430}\N{U+0441}\N{U+0441}\N{U+044b}\N{U+044b}\N{U+0439}\N{U+0430}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+043a}\N{U+044b} \N{U+043a}\N{U+0431}",
      "2-\N{U+0441} \N{U+043a}\N{U+0431}",
      "3-\N{U+0441} \N{U+043a}\N{U+0431}",
      "4-\N{U+0441} \N{U+043a}\N{U+0431}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+043a}\N{U+044b} \N{U+043a}\N{U+044b}\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0441} \N{U+043a}\N{U+044b}\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0441} \N{U+043a}\N{U+044b}\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0441} \N{U+043a}\N{U+044b}\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+043a}\N{U+044b} \N{U+043a}\N{U+0431}",
      "2-\N{U+0441} \N{U+043a}\N{U+0431}",
      "3-\N{U+0441} \N{U+043a}\N{U+0431}",
      "4-\N{U+0441} \N{U+043a}\N{U+0431}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+043a}\N{U+044b} \N{U+043a}\N{U+044b}\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0441} \N{U+043a}\N{U+044b}\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0441} \N{U+043a}\N{U+044b}\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0441} \N{U+043a}\N{U+044b}\N{U+0431}\N{U+0430}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => "Russia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ saq ]__
  {
    am_pm_abbreviated => [
      "Tesiran",
      "Teipa"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "saq",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Kun",
      "Ong",
      "Ine",
      "Ile",
      "Sap",
      "Kwe",
      "Are"
    ],
    day_format_narrow => [
      "K",
      "O",
      "I",
      "I",
      "S",
      "K",
      "A"
    ],
    day_format_wide => [
      "Mderot ee kuni",
      "Mderot ee ong\N{U+2019}wan",
      "Mderot ee inet",
      "Mderot ee ile",
      "Mderot ee sapa",
      "Mderot ee kwe",
      "Mderot ee are"
    ],
    day_stand_alone_abbreviated => [
      "Kun",
      "Ong",
      "Ine",
      "Ile",
      "Sap",
      "Kwe",
      "Are"
    ],
    day_stand_alone_narrow => [
      "K",
      "O",
      "I",
      "I",
      "S",
      "K",
      "A"
    ],
    day_stand_alone_wide => [
      "Mderot ee kuni",
      "Mderot ee ong\N{U+2019}wan",
      "Mderot ee inet",
      "Mderot ee ile",
      "Mderot ee sapa",
      "Mderot ee kwe",
      "Mderot ee are"
    ],
    era_abbreviated => [
      "KK",
      "BK"
    ],
    era_narrow => [
      "KK",
      "BK"
    ],
    era_wide => [
      "Kabla ya Christo",
      "Baada ya Christo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Samburu",
    month_format_abbreviated => [
      "Obo",
      "Waa",
      "Oku",
      "Ong",
      "Ime",
      "Ile",
      "Sap",
      "Isi",
      "Saa",
      "Tom",
      "Tob",
      "Tow"
    ],
    month_format_narrow => [
      "O",
      "W",
      "O",
      "O",
      "I",
      "I",
      "S",
      "I",
      "S",
      "T",
      "T",
      "T"
    ],
    month_format_wide => [
      "Lapa le obo",
      "Lapa le waare",
      "Lapa le okuni",
      "Lapa le ong\N{U+2019}wan",
      "Lapa le imet",
      "Lapa le ile",
      "Lapa le sapa",
      "Lapa le isiet",
      "Lapa le saal",
      "Lapa le tomon",
      "Lapa le tomon obo",
      "Lapa le tomon waare"
    ],
    month_stand_alone_abbreviated => [
      "Obo",
      "Waa",
      "Oku",
      "Ong",
      "Ime",
      "Ile",
      "Sap",
      "Isi",
      "Saa",
      "Tom",
      "Tob",
      "Tow"
    ],
    month_stand_alone_narrow => [
      "O",
      "W",
      "O",
      "O",
      "I",
      "I",
      "S",
      "I",
      "S",
      "T",
      "T",
      "T"
    ],
    month_stand_alone_wide => [
      "Lapa le obo",
      "Lapa le waare",
      "Lapa le okuni",
      "Lapa le ong\N{U+2019}wan",
      "Lapa le imet",
      "Lapa le ile",
      "Lapa le sapa",
      "Lapa le isiet",
      "Lapa le saal",
      "Lapa le tomon",
      "Lapa le tomon obo",
      "Lapa le tomon waare"
    ],
    name => "Samburu",
    native_language => "Kisampur",
    native_name => "Kisampur",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ saq-KE ]__
  {
    am_pm_abbreviated => [
      "Tesiran",
      "Teipa"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "saq-KE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Kun",
      "Ong",
      "Ine",
      "Ile",
      "Sap",
      "Kwe",
      "Are"
    ],
    day_format_narrow => [
      "K",
      "O",
      "I",
      "I",
      "S",
      "K",
      "A"
    ],
    day_format_wide => [
      "Mderot ee kuni",
      "Mderot ee ong\N{U+2019}wan",
      "Mderot ee inet",
      "Mderot ee ile",
      "Mderot ee sapa",
      "Mderot ee kwe",
      "Mderot ee are"
    ],
    day_stand_alone_abbreviated => [
      "Kun",
      "Ong",
      "Ine",
      "Ile",
      "Sap",
      "Kwe",
      "Are"
    ],
    day_stand_alone_narrow => [
      "K",
      "O",
      "I",
      "I",
      "S",
      "K",
      "A"
    ],
    day_stand_alone_wide => [
      "Mderot ee kuni",
      "Mderot ee ong\N{U+2019}wan",
      "Mderot ee inet",
      "Mderot ee ile",
      "Mderot ee sapa",
      "Mderot ee kwe",
      "Mderot ee are"
    ],
    era_abbreviated => [
      "KK",
      "BK"
    ],
    era_narrow => [
      "KK",
      "BK"
    ],
    era_wide => [
      "Kabla ya Christo",
      "Baada ya Christo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Samburu",
    month_format_abbreviated => [
      "Obo",
      "Waa",
      "Oku",
      "Ong",
      "Ime",
      "Ile",
      "Sap",
      "Isi",
      "Saa",
      "Tom",
      "Tob",
      "Tow"
    ],
    month_format_narrow => [
      "O",
      "W",
      "O",
      "O",
      "I",
      "I",
      "S",
      "I",
      "S",
      "T",
      "T",
      "T"
    ],
    month_format_wide => [
      "Lapa le obo",
      "Lapa le waare",
      "Lapa le okuni",
      "Lapa le ong\N{U+2019}wan",
      "Lapa le imet",
      "Lapa le ile",
      "Lapa le sapa",
      "Lapa le isiet",
      "Lapa le saal",
      "Lapa le tomon",
      "Lapa le tomon obo",
      "Lapa le tomon waare"
    ],
    month_stand_alone_abbreviated => [
      "Obo",
      "Waa",
      "Oku",
      "Ong",
      "Ime",
      "Ile",
      "Sap",
      "Isi",
      "Saa",
      "Tom",
      "Tob",
      "Tow"
    ],
    month_stand_alone_narrow => [
      "O",
      "W",
      "O",
      "O",
      "I",
      "I",
      "S",
      "I",
      "S",
      "T",
      "T",
      "T"
    ],
    month_stand_alone_wide => [
      "Lapa le obo",
      "Lapa le waare",
      "Lapa le okuni",
      "Lapa le ong\N{U+2019}wan",
      "Lapa le imet",
      "Lapa le ile",
      "Lapa le sapa",
      "Lapa le isiet",
      "Lapa le saal",
      "Lapa le tomon",
      "Lapa le tomon obo",
      "Lapa le tomon waare"
    ],
    name => "Samburu Kenya",
    native_language => "Kisampur",
    native_name => "Kisampur Kenya",
    native_script => undef,
    native_territory => "Kenya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    script => undef,
    territory => "Kenya",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sbp ]__
  {
    am_pm_abbreviated => [
      "Lwamilawu",
      "Pashamihe"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "y MMMM",
      yMMMd => "MMM d y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "sbp",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Mul"
    ],
    day_format_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "M"
    ],
    day_format_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alahamisi",
      "Ijumaa",
      "Jumamosi",
      "Mulungu"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Mul"
    ],
    day_stand_alone_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "M"
    ],
    day_stand_alone_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alahamisi",
      "Ijumaa",
      "Jumamosi",
      "Mulungu"
    ],
    era_abbreviated => [
      "AK",
      "PK"
    ],
    era_narrow => [
      "AK",
      "PK"
    ],
    era_wide => [
      "Ashanali uKilisito",
      "Pamwandi ya Kilisto"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Sangu",
    month_format_abbreviated => [
      "Mup",
      "Mwi",
      "Msh",
      "Mun",
      "Mag",
      "Muj",
      "Msp",
      "Mpg",
      "Mye",
      "Mok",
      "Mus",
      "Muh"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Mupalangulwa",
      "Mwitope",
      "Mushende",
      "Munyi",
      "Mushende Magali",
      "Mujimbi",
      "Mushipepo",
      "Mupuguto",
      "Munyense",
      "Mokhu",
      "Musongandembwe",
      "Muhaano"
    ],
    month_stand_alone_abbreviated => [
      "Mup",
      "Mwi",
      "Msh",
      "Mun",
      "Mag",
      "Muj",
      "Msp",
      "Mpg",
      "Mye",
      "Mok",
      "Mus",
      "Muh"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Mupalangulwa",
      "Mwitope",
      "Mushende",
      "Munyi",
      "Mushende Magali",
      "Mujimbi",
      "Mushipepo",
      "Mupuguto",
      "Munyense",
      "Mokhu",
      "Musongandembwe",
      "Muhaano"
    ],
    name => "Sangu",
    native_language => "Ishisangu",
    native_name => "Ishisangu",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Lobo 1",
      "Lobo 2",
      "Lobo 3",
      "Lobo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Lobo 1",
      "Lobo 2",
      "Lobo 3",
      "Lobo 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sbp-TZ ]__
  {
    am_pm_abbreviated => [
      "Lwamilawu",
      "Pashamihe"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "y MMMM",
      yMMMd => "MMM d y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "sbp-TZ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Mul"
    ],
    day_format_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "M"
    ],
    day_format_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alahamisi",
      "Ijumaa",
      "Jumamosi",
      "Mulungu"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Mul"
    ],
    day_stand_alone_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "M"
    ],
    day_stand_alone_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alahamisi",
      "Ijumaa",
      "Jumamosi",
      "Mulungu"
    ],
    era_abbreviated => [
      "AK",
      "PK"
    ],
    era_narrow => [
      "AK",
      "PK"
    ],
    era_wide => [
      "Ashanali uKilisito",
      "Pamwandi ya Kilisto"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Sangu",
    month_format_abbreviated => [
      "Mup",
      "Mwi",
      "Msh",
      "Mun",
      "Mag",
      "Muj",
      "Msp",
      "Mpg",
      "Mye",
      "Mok",
      "Mus",
      "Muh"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Mupalangulwa",
      "Mwitope",
      "Mushende",
      "Munyi",
      "Mushende Magali",
      "Mujimbi",
      "Mushipepo",
      "Mupuguto",
      "Munyense",
      "Mokhu",
      "Musongandembwe",
      "Muhaano"
    ],
    month_stand_alone_abbreviated => [
      "Mup",
      "Mwi",
      "Msh",
      "Mun",
      "Mag",
      "Muj",
      "Msp",
      "Mpg",
      "Mye",
      "Mok",
      "Mus",
      "Muh"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Mupalangulwa",
      "Mwitope",
      "Mushende",
      "Munyi",
      "Mushende Magali",
      "Mujimbi",
      "Mushipepo",
      "Mupuguto",
      "Munyense",
      "Mokhu",
      "Musongandembwe",
      "Muhaano"
    ],
    name => "Sangu Tanzania",
    native_language => "Ishisangu",
    native_name => "Ishisangu Tansaniya",
    native_script => undef,
    native_territory => "Tansaniya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Lobo 1",
      "Lobo 2",
      "Lobo 3",
      "Lobo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "L1",
      "L2",
      "L3",
      "L4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Lobo 1",
      "Lobo 2",
      "Lobo 3",
      "Lobo 4"
    ],
    script => undef,
    territory => "Tanzania",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ se ]__
  {
    am_pm_abbreviated => [
      "i.b.",
      "e.b."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "se",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "vuos",
      "ma\N{U+014b}",
      "gask",
      "duor",
      "bear",
      "l\N{U+00e1}v",
      "sotn"
    ],
    day_format_narrow => [
      "V",
      "M",
      "G",
      "D",
      "B",
      "L",
      "S"
    ],
    day_format_wide => [
      "vuoss\N{U+00e1}rga",
      "ma\N{U+014b}\N{U+014b}eb\N{U+00e1}rga",
      "gaskavahkku",
      "duorasdat",
      "bearjadat",
      "l\N{U+00e1}vvardat",
      "sotnabeaivi"
    ],
    day_stand_alone_abbreviated => [
      "vuos",
      "ma\N{U+014b}",
      "gask",
      "duor",
      "bear",
      "l\N{U+00e1}v",
      "sotn"
    ],
    day_stand_alone_narrow => [
      "V",
      "M",
      "G",
      "D",
      "B",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "vuoss\N{U+00e1}rga",
      "ma\N{U+014b}\N{U+014b}eb\N{U+00e1}rga",
      "gaskavahkku",
      "duorasdat",
      "bearjadat",
      "l\N{U+00e1}vvardat",
      "sotnabeaivi"
    ],
    era_abbreviated => [
      "o.Kr.",
      "m.Kr."
    ],
    era_narrow => [
      "o.Kr.",
      "m.Kr."
    ],
    era_wide => [
      "ovdal Kristtusa",
      "ma\N{U+014b}\N{U+014b}el Kristtusa"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Northern Sami",
    month_format_abbreviated => [
      "o\N{U+0111}\N{U+0111}j",
      "guov",
      "njuk",
      "cuo",
      "mies",
      "geas",
      "suoi",
      "borg",
      "\N{U+010d}ak\N{U+010d}",
      "golg",
      "sk\N{U+00e1}b",
      "juov"
    ],
    month_format_narrow => [
      "O",
      "G",
      "N",
      "C",
      "M",
      "G",
      "S",
      "B",
      "\N{U+010c}",
      "G",
      "S",
      "J"
    ],
    month_format_wide => [
      "o\N{U+0111}\N{U+0111}ajagem\N{U+00e1}nnu",
      "guovvam\N{U+00e1}nnu",
      "njuk\N{U+010d}am\N{U+00e1}nnu",
      "cuo\N{U+014b}om\N{U+00e1}nnu",
      "miessem\N{U+00e1}nnu",
      "geassem\N{U+00e1}nnu",
      "suoidnem\N{U+00e1}nnu",
      "borgem\N{U+00e1}nnu",
      "\N{U+010d}ak\N{U+010d}am\N{U+00e1}nnu",
      "golggotm\N{U+00e1}nnu",
      "sk\N{U+00e1}bmam\N{U+00e1}nnu",
      "juovlam\N{U+00e1}nnu"
    ],
    month_stand_alone_abbreviated => [
      "o\N{U+0111}\N{U+0111}j",
      "guov",
      "njuk",
      "cuo",
      "mies",
      "geas",
      "suoi",
      "borg",
      "\N{U+010d}ak\N{U+010d}",
      "golg",
      "sk\N{U+00e1}b",
      "juov"
    ],
    month_stand_alone_narrow => [
      "O",
      "G",
      "N",
      "C",
      "M",
      "G",
      "S",
      "B",
      "\N{U+010c}",
      "G",
      "S",
      "J"
    ],
    month_stand_alone_wide => [
      "o\N{U+0111}\N{U+0111}ajagem\N{U+00e1}nnu",
      "guovvam\N{U+00e1}nnu",
      "njuk\N{U+010d}am\N{U+00e1}nnu",
      "cuo\N{U+014b}om\N{U+00e1}nnu",
      "miessem\N{U+00e1}nnu",
      "geassem\N{U+00e1}nnu",
      "suoidnem\N{U+00e1}nnu",
      "borgem\N{U+00e1}nnu",
      "\N{U+010d}ak\N{U+010d}am\N{U+00e1}nnu",
      "golggotm\N{U+00e1}nnu",
      "sk\N{U+00e1}bmam\N{U+00e1}nnu",
      "juovlam\N{U+00e1}nnu"
    ],
    name => "Northern Sami",
    native_language => "davvis\N{U+00e1}megiella",
    native_name => "davvis\N{U+00e1}megiella",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ se-FI ]__
  {
    am_pm_abbreviated => [
      "i.b.",
      "e.b."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "se-FI",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "vuos",
      "ma\N{U+014b}",
      "gask",
      "duor",
      "bear",
      "l\N{U+00e1}v",
      "sotn"
    ],
    day_format_narrow => [
      "V",
      "M",
      "G",
      "D",
      "B",
      "L",
      "S"
    ],
    day_format_wide => [
      "vuoss\N{U+00e1}rga",
      "ma\N{U+014b}\N{U+014b}eb\N{U+00e1}rga",
      "gaskavahkku",
      "duorasdat",
      "bearjadat",
      "l\N{U+00e1}vvardat",
      "sotnabeaivi"
    ],
    day_stand_alone_abbreviated => [
      "vuos",
      "ma\N{U+014b}",
      "gask",
      "duor",
      "bear",
      "l\N{U+00e1}v",
      "sotn"
    ],
    day_stand_alone_narrow => [
      "V",
      "M",
      "G",
      "D",
      "B",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "vuoss\N{U+00e1}rga",
      "ma\N{U+014b}\N{U+014b}eb\N{U+00e1}rga",
      "gaskavahkku",
      "duorasdat",
      "bearjadat",
      "l\N{U+00e1}vvardat",
      "sotnabeaivi"
    ],
    era_abbreviated => [
      "o.Kr.",
      "m.Kr."
    ],
    era_narrow => [
      "o.Kr.",
      "m.Kr."
    ],
    era_wide => [
      "ovdal Kristtusa",
      "ma\N{U+014b}\N{U+014b}el Kristtusa"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Northern Sami",
    month_format_abbreviated => [
      "o\N{U+0111}\N{U+0111}j",
      "guov",
      "njuk",
      "cuo",
      "mies",
      "geas",
      "suoi",
      "borg",
      "\N{U+010d}ak\N{U+010d}",
      "golg",
      "sk\N{U+00e1}b",
      "juov"
    ],
    month_format_narrow => [
      "O",
      "G",
      "N",
      "C",
      "M",
      "G",
      "S",
      "B",
      "\N{U+010c}",
      "G",
      "S",
      "J"
    ],
    month_format_wide => [
      "o\N{U+0111}\N{U+0111}ajagem\N{U+00e1}nnu",
      "guovvam\N{U+00e1}nnu",
      "njuk\N{U+010d}am\N{U+00e1}nnu",
      "cuo\N{U+014b}om\N{U+00e1}nnu",
      "miessem\N{U+00e1}nnu",
      "geassem\N{U+00e1}nnu",
      "suoidnem\N{U+00e1}nnu",
      "borgem\N{U+00e1}nnu",
      "\N{U+010d}ak\N{U+010d}am\N{U+00e1}nnu",
      "golggotm\N{U+00e1}nnu",
      "sk\N{U+00e1}bmam\N{U+00e1}nnu",
      "juovlam\N{U+00e1}nnu"
    ],
    month_stand_alone_abbreviated => [
      "o\N{U+0111}\N{U+0111}j",
      "guov",
      "njuk",
      "cuo",
      "mies",
      "geas",
      "suoi",
      "borg",
      "\N{U+010d}ak\N{U+010d}",
      "golg",
      "sk\N{U+00e1}b",
      "juov"
    ],
    month_stand_alone_narrow => [
      "O",
      "G",
      "N",
      "C",
      "M",
      "G",
      "S",
      "B",
      "\N{U+010c}",
      "G",
      "S",
      "J"
    ],
    month_stand_alone_wide => [
      "o\N{U+0111}\N{U+0111}ajagem\N{U+00e1}nnu",
      "guovvam\N{U+00e1}nnu",
      "njuk\N{U+010d}am\N{U+00e1}nnu",
      "cuo\N{U+014b}om\N{U+00e1}nnu",
      "miessem\N{U+00e1}nnu",
      "geassem\N{U+00e1}nnu",
      "suoidnem\N{U+00e1}nnu",
      "borgem\N{U+00e1}nnu",
      "\N{U+010d}ak\N{U+010d}am\N{U+00e1}nnu",
      "golggotm\N{U+00e1}nnu",
      "sk\N{U+00e1}bmam\N{U+00e1}nnu",
      "juovlam\N{U+00e1}nnu"
    ],
    name => "Northern Sami Finland",
    native_language => "davvis\N{U+00e1}megiella",
    native_name => "davvis\N{U+00e1}megiella Suopma",
    native_script => undef,
    native_territory => "Suopma",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Finland",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ se-NO ]__
  {
    am_pm_abbreviated => [
      "i.b.",
      "e.b."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "se-NO",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "vuos",
      "ma\N{U+014b}",
      "gask",
      "duor",
      "bear",
      "l\N{U+00e1}v",
      "sotn"
    ],
    day_format_narrow => [
      "V",
      "M",
      "G",
      "D",
      "B",
      "L",
      "S"
    ],
    day_format_wide => [
      "vuoss\N{U+00e1}rga",
      "ma\N{U+014b}\N{U+014b}eb\N{U+00e1}rga",
      "gaskavahkku",
      "duorasdat",
      "bearjadat",
      "l\N{U+00e1}vvardat",
      "sotnabeaivi"
    ],
    day_stand_alone_abbreviated => [
      "vuos",
      "ma\N{U+014b}",
      "gask",
      "duor",
      "bear",
      "l\N{U+00e1}v",
      "sotn"
    ],
    day_stand_alone_narrow => [
      "V",
      "M",
      "G",
      "D",
      "B",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "vuoss\N{U+00e1}rga",
      "ma\N{U+014b}\N{U+014b}eb\N{U+00e1}rga",
      "gaskavahkku",
      "duorasdat",
      "bearjadat",
      "l\N{U+00e1}vvardat",
      "sotnabeaivi"
    ],
    era_abbreviated => [
      "o.Kr.",
      "m.Kr."
    ],
    era_narrow => [
      "o.Kr.",
      "m.Kr."
    ],
    era_wide => [
      "ovdal Kristtusa",
      "ma\N{U+014b}\N{U+014b}el Kristtusa"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%A, %B %d. b. %Y %H:%M:%S %Z",
    glibc_date_format => "%Y-%m-%d",
    glibc_datetime_format => "%a, %b %e. b. %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Northern Sami",
    month_format_abbreviated => [
      "o\N{U+0111}\N{U+0111}j",
      "guov",
      "njuk",
      "cuo",
      "mies",
      "geas",
      "suoi",
      "borg",
      "\N{U+010d}ak\N{U+010d}",
      "golg",
      "sk\N{U+00e1}b",
      "juov"
    ],
    month_format_narrow => [
      "O",
      "G",
      "N",
      "C",
      "M",
      "G",
      "S",
      "B",
      "\N{U+010c}",
      "G",
      "S",
      "J"
    ],
    month_format_wide => [
      "o\N{U+0111}\N{U+0111}ajagem\N{U+00e1}nnu",
      "guovvam\N{U+00e1}nnu",
      "njuk\N{U+010d}am\N{U+00e1}nnu",
      "cuo\N{U+014b}om\N{U+00e1}nnu",
      "miessem\N{U+00e1}nnu",
      "geassem\N{U+00e1}nnu",
      "suoidnem\N{U+00e1}nnu",
      "borgem\N{U+00e1}nnu",
      "\N{U+010d}ak\N{U+010d}am\N{U+00e1}nnu",
      "golggotm\N{U+00e1}nnu",
      "sk\N{U+00e1}bmam\N{U+00e1}nnu",
      "juovlam\N{U+00e1}nnu"
    ],
    month_stand_alone_abbreviated => [
      "o\N{U+0111}\N{U+0111}j",
      "guov",
      "njuk",
      "cuo",
      "mies",
      "geas",
      "suoi",
      "borg",
      "\N{U+010d}ak\N{U+010d}",
      "golg",
      "sk\N{U+00e1}b",
      "juov"
    ],
    month_stand_alone_narrow => [
      "O",
      "G",
      "N",
      "C",
      "M",
      "G",
      "S",
      "B",
      "\N{U+010c}",
      "G",
      "S",
      "J"
    ],
    month_stand_alone_wide => [
      "o\N{U+0111}\N{U+0111}ajagem\N{U+00e1}nnu",
      "guovvam\N{U+00e1}nnu",
      "njuk\N{U+010d}am\N{U+00e1}nnu",
      "cuo\N{U+014b}om\N{U+00e1}nnu",
      "miessem\N{U+00e1}nnu",
      "geassem\N{U+00e1}nnu",
      "suoidnem\N{U+00e1}nnu",
      "borgem\N{U+00e1}nnu",
      "\N{U+010d}ak\N{U+010d}am\N{U+00e1}nnu",
      "golggotm\N{U+00e1}nnu",
      "sk\N{U+00e1}bmam\N{U+00e1}nnu",
      "juovlam\N{U+00e1}nnu"
    ],
    name => "Northern Sami Norway",
    native_language => "davvis\N{U+00e1}megiella",
    native_name => "davvis\N{U+00e1}megiella Norga",
    native_script => undef,
    native_territory => "Norga",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Norway",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ se-SE ]__
  {
    am_pm_abbreviated => [
      "i.b.",
      "e.b."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "se-SE",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "vuos",
      "ma\N{U+014b}",
      "gask",
      "duor",
      "bear",
      "l\N{U+00e1}v",
      "sotn"
    ],
    day_format_narrow => [
      "V",
      "M",
      "G",
      "D",
      "B",
      "L",
      "S"
    ],
    day_format_wide => [
      "vuoss\N{U+00e1}rga",
      "ma\N{U+014b}\N{U+014b}eb\N{U+00e1}rga",
      "gaskavahkku",
      "duorasdat",
      "bearjadat",
      "l\N{U+00e1}vvardat",
      "sotnabeaivi"
    ],
    day_stand_alone_abbreviated => [
      "vuos",
      "ma\N{U+014b}",
      "gask",
      "duor",
      "bear",
      "l\N{U+00e1}v",
      "sotn"
    ],
    day_stand_alone_narrow => [
      "V",
      "M",
      "G",
      "D",
      "B",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "vuoss\N{U+00e1}rga",
      "ma\N{U+014b}\N{U+014b}eb\N{U+00e1}rga",
      "gaskavahkku",
      "duorasdat",
      "bearjadat",
      "l\N{U+00e1}vvardat",
      "sotnabeaivi"
    ],
    era_abbreviated => [
      "o.Kr.",
      "m.Kr."
    ],
    era_narrow => [
      "o.Kr.",
      "m.Kr."
    ],
    era_wide => [
      "ovdal Kristtusa",
      "ma\N{U+014b}\N{U+014b}el Kristtusa"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Northern Sami",
    month_format_abbreviated => [
      "o\N{U+0111}\N{U+0111}j",
      "guov",
      "njuk",
      "cuo",
      "mies",
      "geas",
      "suoi",
      "borg",
      "\N{U+010d}ak\N{U+010d}",
      "golg",
      "sk\N{U+00e1}b",
      "juov"
    ],
    month_format_narrow => [
      "O",
      "G",
      "N",
      "C",
      "M",
      "G",
      "S",
      "B",
      "\N{U+010c}",
      "G",
      "S",
      "J"
    ],
    month_format_wide => [
      "o\N{U+0111}\N{U+0111}ajagem\N{U+00e1}nnu",
      "guovvam\N{U+00e1}nnu",
      "njuk\N{U+010d}am\N{U+00e1}nnu",
      "cuo\N{U+014b}om\N{U+00e1}nnu",
      "miessem\N{U+00e1}nnu",
      "geassem\N{U+00e1}nnu",
      "suoidnem\N{U+00e1}nnu",
      "borgem\N{U+00e1}nnu",
      "\N{U+010d}ak\N{U+010d}am\N{U+00e1}nnu",
      "golggotm\N{U+00e1}nnu",
      "sk\N{U+00e1}bmam\N{U+00e1}nnu",
      "juovlam\N{U+00e1}nnu"
    ],
    month_stand_alone_abbreviated => [
      "o\N{U+0111}\N{U+0111}j",
      "guov",
      "njuk",
      "cuo",
      "mies",
      "geas",
      "suoi",
      "borg",
      "\N{U+010d}ak\N{U+010d}",
      "golg",
      "sk\N{U+00e1}b",
      "juov"
    ],
    month_stand_alone_narrow => [
      "O",
      "G",
      "N",
      "C",
      "M",
      "G",
      "S",
      "B",
      "\N{U+010c}",
      "G",
      "S",
      "J"
    ],
    month_stand_alone_wide => [
      "o\N{U+0111}\N{U+0111}ajagem\N{U+00e1}nnu",
      "guovvam\N{U+00e1}nnu",
      "njuk\N{U+010d}am\N{U+00e1}nnu",
      "cuo\N{U+014b}om\N{U+00e1}nnu",
      "miessem\N{U+00e1}nnu",
      "geassem\N{U+00e1}nnu",
      "suoidnem\N{U+00e1}nnu",
      "borgem\N{U+00e1}nnu",
      "\N{U+010d}ak\N{U+010d}am\N{U+00e1}nnu",
      "golggotm\N{U+00e1}nnu",
      "sk\N{U+00e1}bmam\N{U+00e1}nnu",
      "juovlam\N{U+00e1}nnu"
    ],
    name => "Northern Sami Sweden",
    native_language => "davvis\N{U+00e1}megiella",
    native_name => "davvis\N{U+00e1}megiella Ruo\N{U+0167}\N{U+0167}a",
    native_script => undef,
    native_territory => "Ruo\N{U+0167}\N{U+0167}a",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Sweden",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ seh ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      HHmm => "HH:mm",
      HHmmss => "HH:mm:ss",
      Hm => "H:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMM => "MM/y",
      yMMM => "MMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMd => "d 'de' MMM 'de' y",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "seh",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d 'de' MMM 'de' y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Pos",
      "Pir",
      "Tat",
      "Nai",
      "Sha",
      "Sab",
      "Dim"
    ],
    day_format_narrow => [
      "P",
      "C",
      "T",
      "N",
      "S",
      "S",
      "D"
    ],
    day_format_wide => [
      "Chiposi",
      "Chipiri",
      "Chitatu",
      "Chinai",
      "Chishanu",
      "Sabudu",
      "Dimingu"
    ],
    day_stand_alone_abbreviated => [
      "Pos",
      "Pir",
      "Tat",
      "Nai",
      "Sha",
      "Sab",
      "Dim"
    ],
    day_stand_alone_narrow => [
      "P",
      "C",
      "T",
      "N",
      "S",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "Chiposi",
      "Chipiri",
      "Chitatu",
      "Chinai",
      "Chishanu",
      "Sabudu",
      "Dimingu"
    ],
    era_abbreviated => [
      "AC",
      "AD"
    ],
    era_narrow => [
      "AC",
      "AD"
    ],
    era_wide => [
      "Antes de Cristo",
      "Anno Domini"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Sena",
    month_format_abbreviated => [
      "Jan",
      "Fev",
      "Mar",
      "Abr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Set",
      "Otu",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Janeiro",
      "Fevreiro",
      "Marco",
      "Abril",
      "Maio",
      "Junho",
      "Julho",
      "Augusto",
      "Setembro",
      "Otubro",
      "Novembro",
      "Decembro"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Fev",
      "Mar",
      "Abr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Set",
      "Otu",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janeiro",
      "Fevreiro",
      "Marco",
      "Abril",
      "Maio",
      "Junho",
      "Julho",
      "Augusto",
      "Setembro",
      "Otubro",
      "Novembro",
      "Decembro"
    ],
    name => "Sena",
    native_language => "sena",
    native_name => "sena",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ seh-MZ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      HHmm => "HH:mm",
      HHmmss => "HH:mm:ss",
      Hm => "H:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMM => "MM/y",
      yMMM => "MMM 'de' y",
      yMMMEd => "E, d 'de' MMM 'de' y",
      yMMMM => "MMMM 'de' y",
      yMMMd => "d 'de' MMM 'de' y",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "seh-MZ",
    date_format_full => "EEEE, d 'de' MMMM 'de' y",
    date_format_long => "d 'de' MMMM 'de' y",
    date_format_medium => "d 'de' MMM 'de' y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Pos",
      "Pir",
      "Tat",
      "Nai",
      "Sha",
      "Sab",
      "Dim"
    ],
    day_format_narrow => [
      "P",
      "C",
      "T",
      "N",
      "S",
      "S",
      "D"
    ],
    day_format_wide => [
      "Chiposi",
      "Chipiri",
      "Chitatu",
      "Chinai",
      "Chishanu",
      "Sabudu",
      "Dimingu"
    ],
    day_stand_alone_abbreviated => [
      "Pos",
      "Pir",
      "Tat",
      "Nai",
      "Sha",
      "Sab",
      "Dim"
    ],
    day_stand_alone_narrow => [
      "P",
      "C",
      "T",
      "N",
      "S",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "Chiposi",
      "Chipiri",
      "Chitatu",
      "Chinai",
      "Chishanu",
      "Sabudu",
      "Dimingu"
    ],
    era_abbreviated => [
      "AC",
      "AD"
    ],
    era_narrow => [
      "AC",
      "AD"
    ],
    era_wide => [
      "Antes de Cristo",
      "Anno Domini"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Sena",
    month_format_abbreviated => [
      "Jan",
      "Fev",
      "Mar",
      "Abr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Set",
      "Otu",
      "Nov",
      "Dec"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Janeiro",
      "Fevreiro",
      "Marco",
      "Abril",
      "Maio",
      "Junho",
      "Julho",
      "Augusto",
      "Setembro",
      "Otubro",
      "Novembro",
      "Decembro"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Fev",
      "Mar",
      "Abr",
      "Mai",
      "Jun",
      "Jul",
      "Aug",
      "Set",
      "Otu",
      "Nov",
      "Dec"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janeiro",
      "Fevreiro",
      "Marco",
      "Abril",
      "Maio",
      "Junho",
      "Julho",
      "Augusto",
      "Setembro",
      "Otubro",
      "Novembro",
      "Decembro"
    ],
    name => "Sena Mozambique",
    native_language => "sena",
    native_name => "sena Mo\N{U+00e7}ambique",
    native_script => undef,
    native_territory => "Mo\N{U+00e7}ambique",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Mozambique",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ses ]__
  {
    am_pm_abbreviated => [
      "Adduha",
      "Aluula"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ses",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ati",
      "Ata",
      "Ala",
      "Alm",
      "Alz",
      "Asi",
      "Alh"
    ],
    day_format_narrow => [
      "T",
      "T",
      "L",
      "L",
      "L",
      "S",
      "H"
    ],
    day_format_wide => [
      "Atinni",
      "Atalaata",
      "Alarba",
      "Alhamiisa",
      "Alzuma",
      "Asibti",
      "Alhadi"
    ],
    day_stand_alone_abbreviated => [
      "Ati",
      "Ata",
      "Ala",
      "Alm",
      "Alz",
      "Asi",
      "Alh"
    ],
    day_stand_alone_narrow => [
      "T",
      "T",
      "L",
      "L",
      "L",
      "S",
      "H"
    ],
    day_stand_alone_wide => [
      "Atinni",
      "Atalaata",
      "Alarba",
      "Alhamiisa",
      "Alzuma",
      "Asibti",
      "Alhadi"
    ],
    era_abbreviated => [
      "IJ",
      "IZ"
    ],
    era_narrow => [
      "IJ",
      "IZ"
    ],
    era_wide => [
      "Isaa jine",
      "Isaa zamanoo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Koyraboro Senni",
    month_format_abbreviated => [
      "\N{U+017d}an",
      "Fee",
      "Mar",
      "Awi",
      "Me",
      "\N{U+017d}uw",
      "\N{U+017d}uy",
      "Ut",
      "Sek",
      "Okt",
      "Noo",
      "Dee"
    ],
    month_format_narrow => [
      "\N{U+017d}",
      "F",
      "M",
      "A",
      "M",
      "\N{U+017d}",
      "\N{U+017d}",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "\N{U+017d}anwiye",
      "Feewiriye",
      "Marsi",
      "Awiril",
      "Me",
      "\N{U+017d}uwe\N{U+014b}",
      "\N{U+017d}uyye",
      "Ut",
      "Sektanbur",
      "Oktoobur",
      "Noowanbur",
      "Deesanbur"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+017d}an",
      "Fee",
      "Mar",
      "Awi",
      "Me",
      "\N{U+017d}uw",
      "\N{U+017d}uy",
      "Ut",
      "Sek",
      "Okt",
      "Noo",
      "Dee"
    ],
    month_stand_alone_narrow => [
      "\N{U+017d}",
      "F",
      "M",
      "A",
      "M",
      "\N{U+017d}",
      "\N{U+017d}",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "\N{U+017d}anwiye",
      "Feewiriye",
      "Marsi",
      "Awiril",
      "Me",
      "\N{U+017d}uwe\N{U+014b}",
      "\N{U+017d}uyye",
      "Ut",
      "Sektanbur",
      "Oktoobur",
      "Noowanbur",
      "Deesanbur"
    ],
    name => "Koyraboro Senni",
    native_language => "Koyraboro senni",
    native_name => "Koyraboro senni",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "A1",
      "A2",
      "A3",
      "A4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Arrubu 1",
      "Arrubu 2",
      "Arrubu 3",
      "Arrubu 4"
    ],
    quarter_stand_alone_abbreviated => [
      "A1",
      "A2",
      "A3",
      "A4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Arrubu 1",
      "Arrubu 2",
      "Arrubu 3",
      "Arrubu 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ses-ML ]__
  {
    am_pm_abbreviated => [
      "Adduha",
      "Aluula"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ses-ML",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ati",
      "Ata",
      "Ala",
      "Alm",
      "Alz",
      "Asi",
      "Alh"
    ],
    day_format_narrow => [
      "T",
      "T",
      "L",
      "L",
      "L",
      "S",
      "H"
    ],
    day_format_wide => [
      "Atinni",
      "Atalaata",
      "Alarba",
      "Alhamiisa",
      "Alzuma",
      "Asibti",
      "Alhadi"
    ],
    day_stand_alone_abbreviated => [
      "Ati",
      "Ata",
      "Ala",
      "Alm",
      "Alz",
      "Asi",
      "Alh"
    ],
    day_stand_alone_narrow => [
      "T",
      "T",
      "L",
      "L",
      "L",
      "S",
      "H"
    ],
    day_stand_alone_wide => [
      "Atinni",
      "Atalaata",
      "Alarba",
      "Alhamiisa",
      "Alzuma",
      "Asibti",
      "Alhadi"
    ],
    era_abbreviated => [
      "IJ",
      "IZ"
    ],
    era_narrow => [
      "IJ",
      "IZ"
    ],
    era_wide => [
      "Isaa jine",
      "Isaa zamanoo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Koyraboro Senni",
    month_format_abbreviated => [
      "\N{U+017d}an",
      "Fee",
      "Mar",
      "Awi",
      "Me",
      "\N{U+017d}uw",
      "\N{U+017d}uy",
      "Ut",
      "Sek",
      "Okt",
      "Noo",
      "Dee"
    ],
    month_format_narrow => [
      "\N{U+017d}",
      "F",
      "M",
      "A",
      "M",
      "\N{U+017d}",
      "\N{U+017d}",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "\N{U+017d}anwiye",
      "Feewiriye",
      "Marsi",
      "Awiril",
      "Me",
      "\N{U+017d}uwe\N{U+014b}",
      "\N{U+017d}uyye",
      "Ut",
      "Sektanbur",
      "Oktoobur",
      "Noowanbur",
      "Deesanbur"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+017d}an",
      "Fee",
      "Mar",
      "Awi",
      "Me",
      "\N{U+017d}uw",
      "\N{U+017d}uy",
      "Ut",
      "Sek",
      "Okt",
      "Noo",
      "Dee"
    ],
    month_stand_alone_narrow => [
      "\N{U+017d}",
      "F",
      "M",
      "A",
      "M",
      "\N{U+017d}",
      "\N{U+017d}",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "\N{U+017d}anwiye",
      "Feewiriye",
      "Marsi",
      "Awiril",
      "Me",
      "\N{U+017d}uwe\N{U+014b}",
      "\N{U+017d}uyye",
      "Ut",
      "Sektanbur",
      "Oktoobur",
      "Noowanbur",
      "Deesanbur"
    ],
    name => "Koyraboro Senni Mali",
    native_language => "Koyraboro senni",
    native_name => "Koyraboro senni Maali",
    native_script => undef,
    native_territory => "Maali",
    native_variant => undef,
    quarter_format_abbreviated => [
      "A1",
      "A2",
      "A3",
      "A4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Arrubu 1",
      "Arrubu 2",
      "Arrubu 3",
      "Arrubu 4"
    ],
    quarter_stand_alone_abbreviated => [
      "A1",
      "A2",
      "A3",
      "A4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Arrubu 1",
      "Arrubu 2",
      "Arrubu 3",
      "Arrubu 4"
    ],
    script => undef,
    territory => "Mali",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sg ]__
  {
    am_pm_abbreviated => [
      "ND",
      "LK"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "sg",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Bk2",
      "Bk3",
      "Bk4",
      "Bk5",
      "L\N{U+00e2}p",
      "L\N{U+00e2}y",
      "Bk1"
    ],
    day_format_narrow => [
      "S",
      "T",
      "S",
      "K",
      "P",
      "Y",
      "K"
    ],
    day_format_wide => [
      "B\N{U+00ef}kua-\N{U+00fb}se",
      "B\N{U+00ef}kua-pt\N{U+00e2}",
      "B\N{U+00ef}kua-us\N{U+00ef}\N{U+00f6}",
      "B\N{U+00ef}kua-ok\N{U+00fc}",
      "L\N{U+00e2}p\N{U+00f4}s\N{U+00f6}",
      "L\N{U+00e2}yenga",
      "Bikua-\N{U+00f4}ko"
    ],
    day_stand_alone_abbreviated => [
      "Bk2",
      "Bk3",
      "Bk4",
      "Bk5",
      "L\N{U+00e2}p",
      "L\N{U+00e2}y",
      "Bk1"
    ],
    day_stand_alone_narrow => [
      "S",
      "T",
      "S",
      "K",
      "P",
      "Y",
      "K"
    ],
    day_stand_alone_wide => [
      "B\N{U+00ef}kua-\N{U+00fb}se",
      "B\N{U+00ef}kua-pt\N{U+00e2}",
      "B\N{U+00ef}kua-us\N{U+00ef}\N{U+00f6}",
      "B\N{U+00ef}kua-ok\N{U+00fc}",
      "L\N{U+00e2}p\N{U+00f4}s\N{U+00f6}",
      "L\N{U+00e2}yenga",
      "Bikua-\N{U+00f4}ko"
    ],
    era_abbreviated => [
      "KnK",
      "NpK"
    ],
    era_narrow => [
      "KnK",
      "NpK"
    ],
    era_wide => [
      "K\N{U+00f4}zo na Kr\N{U+00ee}stu",
      "Na pek\N{U+00f4} t\N{U+00ee} Kr\N{U+00ee}stu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Sango",
    month_format_abbreviated => [
      "Nye",
      "Ful",
      "Mb\N{U+00e4}",
      "Ngu",
      "B\N{U+00ea}l",
      "F\N{U+00f6}n",
      "Len",
      "K\N{U+00fc}k",
      "Mvu",
      "Ngb",
      "Nab",
      "Kak"
    ],
    month_format_narrow => [
      "N",
      "F",
      "M",
      "N",
      "B",
      "F",
      "L",
      "K",
      "M",
      "N",
      "N",
      "K"
    ],
    month_format_wide => [
      "Nyenye",
      "Fulund\N{U+00ef}gi",
      "Mb\N{U+00e4}ng\N{U+00fc}",
      "Ngub\N{U+00f9}e",
      "B\N{U+00ea}l\N{U+00e4}w\N{U+00fc}",
      "F\N{U+00f6}ndo",
      "Lengua",
      "K\N{U+00fc}k\N{U+00fc}r\N{U+00fc}",
      "Mvuka",
      "Ngberere",
      "Nab\N{U+00e4}nd\N{U+00fc}ru",
      "Kakauka"
    ],
    month_stand_alone_abbreviated => [
      "Nye",
      "Ful",
      "Mb\N{U+00e4}",
      "Ngu",
      "B\N{U+00ea}l",
      "F\N{U+00f6}n",
      "Len",
      "K\N{U+00fc}k",
      "Mvu",
      "Ngb",
      "Nab",
      "Kak"
    ],
    month_stand_alone_narrow => [
      "N",
      "F",
      "M",
      "N",
      "B",
      "F",
      "L",
      "K",
      "M",
      "N",
      "N",
      "K"
    ],
    month_stand_alone_wide => [
      "Nyenye",
      "Fulund\N{U+00ef}gi",
      "Mb\N{U+00e4}ng\N{U+00fc}",
      "Ngub\N{U+00f9}e",
      "B\N{U+00ea}l\N{U+00e4}w\N{U+00fc}",
      "F\N{U+00f6}ndo",
      "Lengua",
      "K\N{U+00fc}k\N{U+00fc}r\N{U+00fc}",
      "Mvuka",
      "Ngberere",
      "Nab\N{U+00e4}nd\N{U+00fc}ru",
      "Kakauka"
    ],
    name => "Sango",
    native_language => "S\N{U+00e4}ng\N{U+00f6}",
    native_name => "S\N{U+00e4}ng\N{U+00f6}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "F4\N{U+2013}1",
      "F4\N{U+2013}2",
      "F4\N{U+2013}3",
      "F4\N{U+2013}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "F\N{U+00e2}ngbis\N{U+00ef}\N{U+00f6} \N{U+00f4}ko",
      "F\N{U+00e2}ngbis\N{U+00ef}\N{U+00f6} \N{U+00fb}se",
      "F\N{U+00e2}ngbis\N{U+00ef}\N{U+00f6} ot\N{U+00e2}",
      "F\N{U+00e2}ngbis\N{U+00ef}\N{U+00f6} us\N{U+00ef}\N{U+00f6}"
    ],
    quarter_stand_alone_abbreviated => [
      "F4\N{U+2013}1",
      "F4\N{U+2013}2",
      "F4\N{U+2013}3",
      "F4\N{U+2013}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "F\N{U+00e2}ngbis\N{U+00ef}\N{U+00f6} \N{U+00f4}ko",
      "F\N{U+00e2}ngbis\N{U+00ef}\N{U+00f6} \N{U+00fb}se",
      "F\N{U+00e2}ngbis\N{U+00ef}\N{U+00f6} ot\N{U+00e2}",
      "F\N{U+00e2}ngbis\N{U+00ef}\N{U+00f6} us\N{U+00ef}\N{U+00f6}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sg-CF ]__
  {
    am_pm_abbreviated => [
      "ND",
      "LK"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "sg-CF",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Bk2",
      "Bk3",
      "Bk4",
      "Bk5",
      "L\N{U+00e2}p",
      "L\N{U+00e2}y",
      "Bk1"
    ],
    day_format_narrow => [
      "S",
      "T",
      "S",
      "K",
      "P",
      "Y",
      "K"
    ],
    day_format_wide => [
      "B\N{U+00ef}kua-\N{U+00fb}se",
      "B\N{U+00ef}kua-pt\N{U+00e2}",
      "B\N{U+00ef}kua-us\N{U+00ef}\N{U+00f6}",
      "B\N{U+00ef}kua-ok\N{U+00fc}",
      "L\N{U+00e2}p\N{U+00f4}s\N{U+00f6}",
      "L\N{U+00e2}yenga",
      "Bikua-\N{U+00f4}ko"
    ],
    day_stand_alone_abbreviated => [
      "Bk2",
      "Bk3",
      "Bk4",
      "Bk5",
      "L\N{U+00e2}p",
      "L\N{U+00e2}y",
      "Bk1"
    ],
    day_stand_alone_narrow => [
      "S",
      "T",
      "S",
      "K",
      "P",
      "Y",
      "K"
    ],
    day_stand_alone_wide => [
      "B\N{U+00ef}kua-\N{U+00fb}se",
      "B\N{U+00ef}kua-pt\N{U+00e2}",
      "B\N{U+00ef}kua-us\N{U+00ef}\N{U+00f6}",
      "B\N{U+00ef}kua-ok\N{U+00fc}",
      "L\N{U+00e2}p\N{U+00f4}s\N{U+00f6}",
      "L\N{U+00e2}yenga",
      "Bikua-\N{U+00f4}ko"
    ],
    era_abbreviated => [
      "KnK",
      "NpK"
    ],
    era_narrow => [
      "KnK",
      "NpK"
    ],
    era_wide => [
      "K\N{U+00f4}zo na Kr\N{U+00ee}stu",
      "Na pek\N{U+00f4} t\N{U+00ee} Kr\N{U+00ee}stu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Sango",
    month_format_abbreviated => [
      "Nye",
      "Ful",
      "Mb\N{U+00e4}",
      "Ngu",
      "B\N{U+00ea}l",
      "F\N{U+00f6}n",
      "Len",
      "K\N{U+00fc}k",
      "Mvu",
      "Ngb",
      "Nab",
      "Kak"
    ],
    month_format_narrow => [
      "N",
      "F",
      "M",
      "N",
      "B",
      "F",
      "L",
      "K",
      "M",
      "N",
      "N",
      "K"
    ],
    month_format_wide => [
      "Nyenye",
      "Fulund\N{U+00ef}gi",
      "Mb\N{U+00e4}ng\N{U+00fc}",
      "Ngub\N{U+00f9}e",
      "B\N{U+00ea}l\N{U+00e4}w\N{U+00fc}",
      "F\N{U+00f6}ndo",
      "Lengua",
      "K\N{U+00fc}k\N{U+00fc}r\N{U+00fc}",
      "Mvuka",
      "Ngberere",
      "Nab\N{U+00e4}nd\N{U+00fc}ru",
      "Kakauka"
    ],
    month_stand_alone_abbreviated => [
      "Nye",
      "Ful",
      "Mb\N{U+00e4}",
      "Ngu",
      "B\N{U+00ea}l",
      "F\N{U+00f6}n",
      "Len",
      "K\N{U+00fc}k",
      "Mvu",
      "Ngb",
      "Nab",
      "Kak"
    ],
    month_stand_alone_narrow => [
      "N",
      "F",
      "M",
      "N",
      "B",
      "F",
      "L",
      "K",
      "M",
      "N",
      "N",
      "K"
    ],
    month_stand_alone_wide => [
      "Nyenye",
      "Fulund\N{U+00ef}gi",
      "Mb\N{U+00e4}ng\N{U+00fc}",
      "Ngub\N{U+00f9}e",
      "B\N{U+00ea}l\N{U+00e4}w\N{U+00fc}",
      "F\N{U+00f6}ndo",
      "Lengua",
      "K\N{U+00fc}k\N{U+00fc}r\N{U+00fc}",
      "Mvuka",
      "Ngberere",
      "Nab\N{U+00e4}nd\N{U+00fc}ru",
      "Kakauka"
    ],
    name => "Sango Central African Republic",
    native_language => "S\N{U+00e4}ng\N{U+00f6}",
    native_name => "S\N{U+00e4}ng\N{U+00f6} K\N{U+00f6}d\N{U+00f6}r\N{U+00f6}s\N{U+00ea}se t\N{U+00ee} B\N{U+00ea}afr\N{U+00ee}ka",
    native_script => undef,
    native_territory => "K\N{U+00f6}d\N{U+00f6}r\N{U+00f6}s\N{U+00ea}se t\N{U+00ee} B\N{U+00ea}afr\N{U+00ee}ka",
    native_variant => undef,
    quarter_format_abbreviated => [
      "F4\N{U+2013}1",
      "F4\N{U+2013}2",
      "F4\N{U+2013}3",
      "F4\N{U+2013}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "F\N{U+00e2}ngbis\N{U+00ef}\N{U+00f6} \N{U+00f4}ko",
      "F\N{U+00e2}ngbis\N{U+00ef}\N{U+00f6} \N{U+00fb}se",
      "F\N{U+00e2}ngbis\N{U+00ef}\N{U+00f6} ot\N{U+00e2}",
      "F\N{U+00e2}ngbis\N{U+00ef}\N{U+00f6} us\N{U+00ef}\N{U+00f6}"
    ],
    quarter_stand_alone_abbreviated => [
      "F4\N{U+2013}1",
      "F4\N{U+2013}2",
      "F4\N{U+2013}3",
      "F4\N{U+2013}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "F\N{U+00e2}ngbis\N{U+00ef}\N{U+00f6} \N{U+00f4}ko",
      "F\N{U+00e2}ngbis\N{U+00ef}\N{U+00f6} \N{U+00fb}se",
      "F\N{U+00e2}ngbis\N{U+00ef}\N{U+00f6} ot\N{U+00e2}",
      "F\N{U+00e2}ngbis\N{U+00ef}\N{U+00f6} us\N{U+00ef}\N{U+00f6}"
    ],
    script => undef,
    territory => "Central African Republic",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ shi ]__
  {
    am_pm_abbreviated => [
      "\N{U+2d5c}\N{U+2d49}\N{U+2d3c}\N{U+2d30}\N{U+2d61}\N{U+2d5c}",
      "\N{U+2d5c}\N{U+2d30}\N{U+2d37}\N{U+2d33}\N{U+2d33}\N{U+2d6f}\N{U+2d30}\N{U+2d5c}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "shi",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4e}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d59}\N{U+2d49}\N{U+2d4e}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}\N{U+2d62}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}\N{U+2d4e}\N{U+2d30}\N{U+2d59}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4e}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d59}\N{U+2d49}\N{U+2d4e}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}\N{U+2d62}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}\N{U+2d4e}\N{U+2d30}\N{U+2d59}"
    ],
    era_abbreviated => [
      "\N{U+2d37}\N{U+2d30}\N{U+2d44}",
      "\N{U+2d37}\N{U+2d3c}\N{U+2d44}"
    ],
    era_narrow => [
      "\N{U+2d37}\N{U+2d30}\N{U+2d44}",
      "\N{U+2d37}\N{U+2d3c}\N{U+2d44}"
    ],
    era_wide => [
      "\N{U+2d37}\N{U+2d30}\N{U+2d5c} \N{U+2d4f} \N{U+2d44}\N{U+2d49}\N{U+2d59}\N{U+2d30}",
      "\N{U+2d37}\N{U+2d3c}\N{U+2d3c}\N{U+2d49}\N{U+2d54} \N{U+2d4f} \N{U+2d44}\N{U+2d49}\N{U+2d59}\N{U+2d30}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Tachelhit",
    month_format_abbreviated => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}"
    ],
    month_format_narrow => [
      "\N{U+2d49}",
      "\N{U+2d31}",
      "\N{U+2d4e}",
      "\N{U+2d49}",
      "\N{U+2d4e}",
      "\N{U+2d62}",
      "\N{U+2d62}",
      "\N{U+2d56}",
      "\N{U+2d5b}",
      "\N{U+2d3d}",
      "\N{U+2d4f}",
      "\N{U+2d37}"
    ],
    month_format_wide => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}\N{U+2d30}\N{U+2d62}\N{U+2d54}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}\N{U+2d62}\N{U+2d55}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}\N{U+2d5a}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}\N{U+2d62}\N{U+2d53}\N{U+2d63}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}\N{U+2d5c}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}"
    ],
    month_stand_alone_narrow => [
      "\N{U+2d49}",
      "\N{U+2d31}",
      "\N{U+2d4e}",
      "\N{U+2d49}",
      "\N{U+2d4e}",
      "\N{U+2d62}",
      "\N{U+2d62}",
      "\N{U+2d56}",
      "\N{U+2d5b}",
      "\N{U+2d3d}",
      "\N{U+2d4f}",
      "\N{U+2d37}"
    ],
    month_stand_alone_wide => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}\N{U+2d30}\N{U+2d62}\N{U+2d54}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}\N{U+2d62}\N{U+2d55}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}\N{U+2d5a}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}\N{U+2d62}\N{U+2d53}\N{U+2d63}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}\N{U+2d5c}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}"
    ],
    name => "Tachelhit",
    native_language => "\N{U+2d5c}\N{U+2d30}\N{U+2d5b}\N{U+2d4d}\N{U+2d43}\N{U+2d49}\N{U+2d5c}",
    native_name => "\N{U+2d5c}\N{U+2d30}\N{U+2d5b}\N{U+2d4d}\N{U+2d43}\N{U+2d49}\N{U+2d5c}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+2d30}\N{U+2d3d} 1",
      "\N{U+2d30}\N{U+2d3d} 2",
      "\N{U+2d30}\N{U+2d3d} 3",
      "\N{U+2d30}\N{U+2d3d} 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 1",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 2",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 3",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+2d30}\N{U+2d3d} 1",
      "\N{U+2d30}\N{U+2d3d} 2",
      "\N{U+2d30}\N{U+2d3d} 3",
      "\N{U+2d30}\N{U+2d3d} 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 1",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 2",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 3",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ shi-Latn ]__
  {
    am_pm_abbreviated => [
      "tifawt",
      "tadgg\N{U+02b7}at"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "shi-Latn",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ayn",
      "asi",
      "ak\N{U+1e5b}",
      "akw",
      "asim",
      "asi\N{U+1e0d}",
      "asa"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "aynas",
      "asinas",
      "ak\N{U+1e5b}as",
      "akwas",
      "asimwas",
      "asi\N{U+1e0d}yas",
      "asamas"
    ],
    day_stand_alone_abbreviated => [
      "ayn",
      "asi",
      "ak\N{U+1e5b}",
      "akw",
      "asim",
      "asi\N{U+1e0d}",
      "asa"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "aynas",
      "asinas",
      "ak\N{U+1e5b}as",
      "akwas",
      "asimwas",
      "asi\N{U+1e0d}yas",
      "asamas"
    ],
    era_abbreviated => [
      "da\N{U+025b}",
      "df\N{U+025b}"
    ],
    era_narrow => [
      "da\N{U+025b}",
      "df\N{U+025b}"
    ],
    era_wide => [
      "dat n \N{U+025b}isa",
      "dffir n \N{U+025b}isa"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Tachelhit",
    month_format_abbreviated => [
      "inn",
      "b\N{U+1e5b}a",
      "ma\N{U+1e5b}",
      "ibr",
      "may",
      "yun",
      "yul",
      "\N{U+0263}uc",
      "cut",
      "ktu",
      "nuw",
      "duj"
    ],
    month_format_narrow => [
      "i",
      "b",
      "m",
      "i",
      "m",
      "y",
      "y",
      "\N{U+0263}",
      "c",
      "k",
      "n",
      "d"
    ],
    month_format_wide => [
      "innayr",
      "b\N{U+1e5b}ay\N{U+1e5b}",
      "ma\N{U+1e5b}\N{U+1e63}",
      "ibrir",
      "mayyu",
      "yunyu",
      "yulyuz",
      "\N{U+0263}uct",
      "cutanbir",
      "ktubr",
      "nuwanbir",
      "dujanbir"
    ],
    month_stand_alone_abbreviated => [
      "inn",
      "b\N{U+1e5b}a",
      "ma\N{U+1e5b}",
      "ibr",
      "may",
      "yun",
      "yul",
      "\N{U+0263}uc",
      "cut",
      "ktu",
      "nuw",
      "duj"
    ],
    month_stand_alone_narrow => [
      "i",
      "b",
      "m",
      "i",
      "m",
      "y",
      "y",
      "\N{U+0263}",
      "c",
      "k",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "innayr",
      "b\N{U+1e5b}ay\N{U+1e5b}",
      "ma\N{U+1e5b}\N{U+1e63}",
      "ibrir",
      "mayyu",
      "yunyu",
      "yulyuz",
      "\N{U+0263}uct",
      "cutanbir",
      "ktubr",
      "nuwanbir",
      "dujanbir"
    ],
    name => "Tachelhit",
    native_language => "Tashel\N{U+1e25}iyt",
    native_name => "Tashel\N{U+1e25}iyt",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "ak 1",
      "ak 2",
      "ak 3",
      "ak 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "ak\N{U+1e5b}a\N{U+1e0d}yur 1",
      "ak\N{U+1e5b}a\N{U+1e0d}yur 2",
      "ak\N{U+1e5b}a\N{U+1e0d}yur 3",
      "ak\N{U+1e5b}a\N{U+1e0d}yur 4"
    ],
    quarter_stand_alone_abbreviated => [
      "ak 1",
      "ak 2",
      "ak 3",
      "ak 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "ak\N{U+1e5b}a\N{U+1e0d}yur 1",
      "ak\N{U+1e5b}a\N{U+1e0d}yur 2",
      "ak\N{U+1e5b}a\N{U+1e0d}yur 3",
      "ak\N{U+1e5b}a\N{U+1e0d}yur 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ shi-Latn-MA ]__
  {
    am_pm_abbreviated => [
      "tifawt",
      "tadgg\N{U+02b7}at"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "shi-Latn-MA",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "ayn",
      "asi",
      "ak\N{U+1e5b}",
      "akw",
      "asim",
      "asi\N{U+1e0d}",
      "asa"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "aynas",
      "asinas",
      "ak\N{U+1e5b}as",
      "akwas",
      "asimwas",
      "asi\N{U+1e0d}yas",
      "asamas"
    ],
    day_stand_alone_abbreviated => [
      "ayn",
      "asi",
      "ak\N{U+1e5b}",
      "akw",
      "asim",
      "asi\N{U+1e0d}",
      "asa"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "aynas",
      "asinas",
      "ak\N{U+1e5b}as",
      "akwas",
      "asimwas",
      "asi\N{U+1e0d}yas",
      "asamas"
    ],
    era_abbreviated => [
      "da\N{U+025b}",
      "df\N{U+025b}"
    ],
    era_narrow => [
      "da\N{U+025b}",
      "df\N{U+025b}"
    ],
    era_wide => [
      "dat n \N{U+025b}isa",
      "dffir n \N{U+025b}isa"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Tachelhit",
    month_format_abbreviated => [
      "inn",
      "b\N{U+1e5b}a",
      "ma\N{U+1e5b}",
      "ibr",
      "may",
      "yun",
      "yul",
      "\N{U+0263}uc",
      "cut",
      "ktu",
      "nuw",
      "duj"
    ],
    month_format_narrow => [
      "i",
      "b",
      "m",
      "i",
      "m",
      "y",
      "y",
      "\N{U+0263}",
      "c",
      "k",
      "n",
      "d"
    ],
    month_format_wide => [
      "innayr",
      "b\N{U+1e5b}ay\N{U+1e5b}",
      "ma\N{U+1e5b}\N{U+1e63}",
      "ibrir",
      "mayyu",
      "yunyu",
      "yulyuz",
      "\N{U+0263}uct",
      "cutanbir",
      "ktubr",
      "nuwanbir",
      "dujanbir"
    ],
    month_stand_alone_abbreviated => [
      "inn",
      "b\N{U+1e5b}a",
      "ma\N{U+1e5b}",
      "ibr",
      "may",
      "yun",
      "yul",
      "\N{U+0263}uc",
      "cut",
      "ktu",
      "nuw",
      "duj"
    ],
    month_stand_alone_narrow => [
      "i",
      "b",
      "m",
      "i",
      "m",
      "y",
      "y",
      "\N{U+0263}",
      "c",
      "k",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "innayr",
      "b\N{U+1e5b}ay\N{U+1e5b}",
      "ma\N{U+1e5b}\N{U+1e63}",
      "ibrir",
      "mayyu",
      "yunyu",
      "yulyuz",
      "\N{U+0263}uct",
      "cutanbir",
      "ktubr",
      "nuwanbir",
      "dujanbir"
    ],
    name => "Tachelhit Morocco Latin",
    native_language => "Tashel\N{U+1e25}iyt",
    native_name => "Tashel\N{U+1e25}iyt lm\N{U+0263}rib Latn",
    native_script => "Latn",
    native_territory => "lm\N{U+0263}rib",
    native_variant => undef,
    quarter_format_abbreviated => [
      "ak 1",
      "ak 2",
      "ak 3",
      "ak 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "ak\N{U+1e5b}a\N{U+1e0d}yur 1",
      "ak\N{U+1e5b}a\N{U+1e0d}yur 2",
      "ak\N{U+1e5b}a\N{U+1e0d}yur 3",
      "ak\N{U+1e5b}a\N{U+1e0d}yur 4"
    ],
    quarter_stand_alone_abbreviated => [
      "ak 1",
      "ak 2",
      "ak 3",
      "ak 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "ak\N{U+1e5b}a\N{U+1e0d}yur 1",
      "ak\N{U+1e5b}a\N{U+1e0d}yur 2",
      "ak\N{U+1e5b}a\N{U+1e0d}yur 3",
      "ak\N{U+1e5b}a\N{U+1e0d}yur 4"
    ],
    script => "Latin",
    territory => "Morocco",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ shi-Tfng ]__
  {
    am_pm_abbreviated => [
      "\N{U+2d5c}\N{U+2d49}\N{U+2d3c}\N{U+2d30}\N{U+2d61}\N{U+2d5c}",
      "\N{U+2d5c}\N{U+2d30}\N{U+2d37}\N{U+2d33}\N{U+2d33}\N{U+2d6f}\N{U+2d30}\N{U+2d5c}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "shi-Tfng",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4e}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d59}\N{U+2d49}\N{U+2d4e}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}\N{U+2d62}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}\N{U+2d4e}\N{U+2d30}\N{U+2d59}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4e}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d59}\N{U+2d49}\N{U+2d4e}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}\N{U+2d62}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}\N{U+2d4e}\N{U+2d30}\N{U+2d59}"
    ],
    era_abbreviated => [
      "\N{U+2d37}\N{U+2d30}\N{U+2d44}",
      "\N{U+2d37}\N{U+2d3c}\N{U+2d44}"
    ],
    era_narrow => [
      "\N{U+2d37}\N{U+2d30}\N{U+2d44}",
      "\N{U+2d37}\N{U+2d3c}\N{U+2d44}"
    ],
    era_wide => [
      "\N{U+2d37}\N{U+2d30}\N{U+2d5c} \N{U+2d4f} \N{U+2d44}\N{U+2d49}\N{U+2d59}\N{U+2d30}",
      "\N{U+2d37}\N{U+2d3c}\N{U+2d3c}\N{U+2d49}\N{U+2d54} \N{U+2d4f} \N{U+2d44}\N{U+2d49}\N{U+2d59}\N{U+2d30}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Tachelhit",
    month_format_abbreviated => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}"
    ],
    month_format_narrow => [
      "\N{U+2d49}",
      "\N{U+2d31}",
      "\N{U+2d4e}",
      "\N{U+2d49}",
      "\N{U+2d4e}",
      "\N{U+2d62}",
      "\N{U+2d62}",
      "\N{U+2d56}",
      "\N{U+2d5b}",
      "\N{U+2d3d}",
      "\N{U+2d4f}",
      "\N{U+2d37}"
    ],
    month_format_wide => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}\N{U+2d30}\N{U+2d62}\N{U+2d54}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}\N{U+2d62}\N{U+2d55}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}\N{U+2d5a}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}\N{U+2d62}\N{U+2d53}\N{U+2d63}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}\N{U+2d5c}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}"
    ],
    month_stand_alone_narrow => [
      "\N{U+2d49}",
      "\N{U+2d31}",
      "\N{U+2d4e}",
      "\N{U+2d49}",
      "\N{U+2d4e}",
      "\N{U+2d62}",
      "\N{U+2d62}",
      "\N{U+2d56}",
      "\N{U+2d5b}",
      "\N{U+2d3d}",
      "\N{U+2d4f}",
      "\N{U+2d37}"
    ],
    month_stand_alone_wide => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}\N{U+2d30}\N{U+2d62}\N{U+2d54}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}\N{U+2d62}\N{U+2d55}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}\N{U+2d5a}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}\N{U+2d62}\N{U+2d53}\N{U+2d63}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}\N{U+2d5c}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}"
    ],
    name => "Tachelhit",
    native_language => "\N{U+2d5c}\N{U+2d30}\N{U+2d5b}\N{U+2d4d}\N{U+2d43}\N{U+2d49}\N{U+2d5c}",
    native_name => "\N{U+2d5c}\N{U+2d30}\N{U+2d5b}\N{U+2d4d}\N{U+2d43}\N{U+2d49}\N{U+2d5c}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+2d30}\N{U+2d3d} 1",
      "\N{U+2d30}\N{U+2d3d} 2",
      "\N{U+2d30}\N{U+2d3d} 3",
      "\N{U+2d30}\N{U+2d3d} 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 1",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 2",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 3",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+2d30}\N{U+2d3d} 1",
      "\N{U+2d30}\N{U+2d3d} 2",
      "\N{U+2d30}\N{U+2d3d} 3",
      "\N{U+2d30}\N{U+2d3d} 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 1",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 2",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 3",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ shi-Tfng-MA ]__
  {
    am_pm_abbreviated => [
      "\N{U+2d5c}\N{U+2d49}\N{U+2d3c}\N{U+2d30}\N{U+2d61}\N{U+2d5c}",
      "\N{U+2d5c}\N{U+2d30}\N{U+2d37}\N{U+2d33}\N{U+2d33}\N{U+2d6f}\N{U+2d30}\N{U+2d5c}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/MM",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "shi-Tfng-MA",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4e}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d59}\N{U+2d49}\N{U+2d4e}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}\N{U+2d62}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}\N{U+2d4e}\N{U+2d30}\N{U+2d59}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4e}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d59}\N{U+2d49}\N{U+2d4e}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}\N{U+2d62}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}\N{U+2d4e}\N{U+2d30}\N{U+2d59}"
    ],
    era_abbreviated => [
      "\N{U+2d37}\N{U+2d30}\N{U+2d44}",
      "\N{U+2d37}\N{U+2d3c}\N{U+2d44}"
    ],
    era_narrow => [
      "\N{U+2d37}\N{U+2d30}\N{U+2d44}",
      "\N{U+2d37}\N{U+2d3c}\N{U+2d44}"
    ],
    era_wide => [
      "\N{U+2d37}\N{U+2d30}\N{U+2d5c} \N{U+2d4f} \N{U+2d44}\N{U+2d49}\N{U+2d59}\N{U+2d30}",
      "\N{U+2d37}\N{U+2d3c}\N{U+2d3c}\N{U+2d49}\N{U+2d54} \N{U+2d4f} \N{U+2d44}\N{U+2d49}\N{U+2d59}\N{U+2d30}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Tachelhit",
    month_format_abbreviated => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}"
    ],
    month_format_narrow => [
      "\N{U+2d49}",
      "\N{U+2d31}",
      "\N{U+2d4e}",
      "\N{U+2d49}",
      "\N{U+2d4e}",
      "\N{U+2d62}",
      "\N{U+2d62}",
      "\N{U+2d56}",
      "\N{U+2d5b}",
      "\N{U+2d3d}",
      "\N{U+2d4f}",
      "\N{U+2d37}"
    ],
    month_format_wide => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}\N{U+2d30}\N{U+2d62}\N{U+2d54}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}\N{U+2d62}\N{U+2d55}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}\N{U+2d5a}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}\N{U+2d62}\N{U+2d53}\N{U+2d63}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}\N{U+2d5c}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}"
    ],
    month_stand_alone_narrow => [
      "\N{U+2d49}",
      "\N{U+2d31}",
      "\N{U+2d4e}",
      "\N{U+2d49}",
      "\N{U+2d4e}",
      "\N{U+2d62}",
      "\N{U+2d62}",
      "\N{U+2d56}",
      "\N{U+2d5b}",
      "\N{U+2d3d}",
      "\N{U+2d4f}",
      "\N{U+2d37}"
    ],
    month_stand_alone_wide => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}\N{U+2d30}\N{U+2d62}\N{U+2d54}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}\N{U+2d62}\N{U+2d55}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}\N{U+2d5a}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}\N{U+2d62}\N{U+2d53}\N{U+2d63}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}\N{U+2d5c}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}"
    ],
    name => "Tachelhit Morocco Tifinagh",
    native_language => "\N{U+2d5c}\N{U+2d30}\N{U+2d5b}\N{U+2d4d}\N{U+2d43}\N{U+2d49}\N{U+2d5c}",
    native_name => "\N{U+2d5c}\N{U+2d30}\N{U+2d5b}\N{U+2d4d}\N{U+2d43}\N{U+2d49}\N{U+2d5c} \N{U+2d4d}\N{U+2d4e}\N{U+2d56}\N{U+2d54}\N{U+2d49}\N{U+2d31} Tfng",
    native_script => "Tfng",
    native_territory => "\N{U+2d4d}\N{U+2d4e}\N{U+2d56}\N{U+2d54}\N{U+2d49}\N{U+2d31}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+2d30}\N{U+2d3d} 1",
      "\N{U+2d30}\N{U+2d3d} 2",
      "\N{U+2d30}\N{U+2d3d} 3",
      "\N{U+2d30}\N{U+2d3d} 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 1",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 2",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 3",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+2d30}\N{U+2d3d} 1",
      "\N{U+2d30}\N{U+2d3d} 2",
      "\N{U+2d30}\N{U+2d3d} 3",
      "\N{U+2d30}\N{U+2d3d} 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 1",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 2",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 3",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 4"
    ],
    script => "Tifinagh",
    territory => "Morocco",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ si ]__
  {
    am_pm_abbreviated => [
      "\N{U+0db4}\N{U+0dd9}.\N{U+0dc0}.",
      "\N{U+0db4}.\N{U+0dc0}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH.mm",
      EHms => "E HH.mm.ss",
      Ed => "d E",
      Ehm => "E a h.mm",
      Ehms => "E a h.mm.ss",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "M-d, E",
      MMM => "LLL",
      MMMEd => "MMM d E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M-d",
      d => "d",
      h => "a h",
      hm => "a h.mm",
      hms => "a h.mm.ss",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y",
      yM => "y-M",
      yMEd => "y-M-d, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-M-d",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "si",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0dc3}\N{U+0db3}\N{U+0dd4}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0d85}\N{U+0d9f}\N{U+0dc4}",
      "\N{U+0db6}\N{U+0daf}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0db6}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dc4}\N{U+0dc3}\N{U+0dca}",
      "\N{U+0dc3}\N{U+0dd2}\N{U+0d9a}\N{U+0dd4}",
      "\N{U+0dc3}\N{U+0dd9}\N{U+0db1}",
      "\N{U+0d89}\N{U+0dbb}\N{U+0dd2}\N{U+0daf}\N{U+0dcf}"
    ],
    day_format_narrow => [
      "\N{U+0dc3}",
      "\N{U+0d85}",
      "\N{U+0db6}",
      "\N{U+0db6}\N{U+0dca}\N{U+200d}\N{U+0dbb}",
      "\N{U+0dc3}\N{U+0dd2}",
      "\N{U+0dc3}\N{U+0dd9}",
      "\N{U+0d89}"
    ],
    day_format_wide => [
      "\N{U+0dc3}\N{U+0db3}\N{U+0dd4}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0d85}\N{U+0d9f}\N{U+0dc4}\N{U+0dbb}\N{U+0dd4}\N{U+0dc0}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0db6}\N{U+0daf}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0db6}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dc4}\N{U+0dc3}\N{U+0dca}\N{U+0db4}\N{U+0dad}\N{U+0dd2}\N{U+0db1}\N{U+0dca}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0dc3}\N{U+0dd2}\N{U+0d9a}\N{U+0dd4}\N{U+0dbb}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0dc3}\N{U+0dd9}\N{U+0db1}\N{U+0dc3}\N{U+0dd4}\N{U+0dbb}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0d89}\N{U+0dbb}\N{U+0dd2}\N{U+0daf}\N{U+0dcf}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0dc3}\N{U+0db3}\N{U+0dd4}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0d85}\N{U+0d9f}\N{U+0dc4}",
      "\N{U+0db6}\N{U+0daf}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0db6}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dc4}\N{U+0dc3}\N{U+0dca}",
      "\N{U+0dc3}\N{U+0dd2}\N{U+0d9a}\N{U+0dd4}",
      "\N{U+0dc3}\N{U+0dd9}\N{U+0db1}",
      "\N{U+0d89}\N{U+0dbb}\N{U+0dd2}\N{U+0daf}\N{U+0dcf}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0dc3}",
      "\N{U+0d85}",
      "\N{U+0db6}",
      "\N{U+0db6}\N{U+0dca}\N{U+200d}\N{U+0dbb}",
      "\N{U+0dc3}\N{U+0dd2}",
      "\N{U+0dc3}\N{U+0dd9}",
      "\N{U+0d89}"
    ],
    day_stand_alone_wide => [
      "\N{U+0dc3}\N{U+0db3}\N{U+0dd4}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0d85}\N{U+0d9f}\N{U+0dc4}\N{U+0dbb}\N{U+0dd4}\N{U+0dc0}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0db6}\N{U+0daf}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0db6}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dc4}\N{U+0dc3}\N{U+0dca}\N{U+0db4}\N{U+0dad}\N{U+0dd2}\N{U+0db1}\N{U+0dca}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0dc3}\N{U+0dd2}\N{U+0d9a}\N{U+0dd4}\N{U+0dbb}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0dc3}\N{U+0dd9}\N{U+0db1}\N{U+0dc3}\N{U+0dd4}\N{U+0dbb}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0d89}\N{U+0dbb}\N{U+0dd2}\N{U+0daf}\N{U+0dcf}"
    ],
    era_abbreviated => [
      "\N{U+0d9a}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dd2}.\N{U+0db4}\N{U+0dd6}.",
      "\N{U+0d9a}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dd2}.\N{U+0dc0}."
    ],
    era_narrow => [
      "\N{U+0d9a}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dd2}.\N{U+0db4}\N{U+0dd6}.",
      "\N{U+0d9a}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dd2}.\N{U+0dc0}."
    ],
    era_wide => [
      "\N{U+0d9a}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dd2}\N{U+0dc3}\N{U+0dca}\N{U+0dad}\N{U+0dd4} \N{U+0db4}\N{U+0dd6}\N{U+0dbb}\N{U+0dca}\N{U+0dc0}",
      "\N{U+0d9a}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dd2}\N{U+0dc3}\N{U+0dca}\N{U+0dad}\N{U+0dd4} \N{U+0dc0}\N{U+0dbb}\N{U+0dca}\N{U+0dc2}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Sinhala",
    month_format_abbreviated => [
      "\N{U+0da2}\N{U+0db1}",
      "\N{U+0db4}\N{U+0dd9}\N{U+0db6}",
      "\N{U+0db8}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}",
      "\N{U+0d85}\N{U+0db4}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dda}\N{U+0dbd}\N{U+0dca}",
      "\N{U+0db8}\N{U+0dd0}\N{U+0dba}\N{U+0dd2}",
      "\N{U+0da2}\N{U+0dd6}\N{U+0db1}\N{U+0dd2}",
      "\N{U+0da2}\N{U+0dd6}\N{U+0dbd}\N{U+0dd2}",
      "\N{U+0d85}\N{U+0d9c}\N{U+0ddd}",
      "\N{U+0dc3}\N{U+0dd0}\N{U+0db4}\N{U+0dca}",
      "\N{U+0d94}\N{U+0d9a}\N{U+0dca}",
      "\N{U+0db1}\N{U+0ddc}\N{U+0dc0}\N{U+0dd0}",
      "\N{U+0daf}\N{U+0dd9}\N{U+0dc3}\N{U+0dd0}"
    ],
    month_format_narrow => [
      "\N{U+0da2}",
      "\N{U+0db4}\N{U+0dd9}",
      "\N{U+0db8}\N{U+0dcf}",
      "\N{U+0d85}",
      "\N{U+0db8}\N{U+0dd0}",
      "\N{U+0da2}\N{U+0dd6}",
      "\N{U+0da2}\N{U+0dd6}",
      "\N{U+0d85}",
      "\N{U+0dc3}\N{U+0dd0}",
      "\N{U+0d94}",
      "\N{U+0db1}\N{U+0dd9}",
      "\N{U+0daf}\N{U+0dd9}"
    ],
    month_format_wide => [
      "\N{U+0da2}\N{U+0db1}\N{U+0dc0}\N{U+0dcf}\N{U+0dbb}\N{U+0dd2}",
      "\N{U+0db4}\N{U+0dd9}\N{U+0db6}\N{U+0dbb}\N{U+0dc0}\N{U+0dcf}\N{U+0dbb}\N{U+0dd2}",
      "\N{U+0db8}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}",
      "\N{U+0d85}\N{U+0db4}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dda}\N{U+0dbd}\N{U+0dca}",
      "\N{U+0db8}\N{U+0dd0}\N{U+0dba}\N{U+0dd2}",
      "\N{U+0da2}\N{U+0dd6}\N{U+0db1}\N{U+0dd2}",
      "\N{U+0da2}\N{U+0dd6}\N{U+0dbd}\N{U+0dd2}",
      "\N{U+0d85}\N{U+0d9c}\N{U+0ddd}\N{U+0dc3}\N{U+0dca}\N{U+0dad}\N{U+0dd4}",
      "\N{U+0dc3}\N{U+0dd0}\N{U+0db4}\N{U+0dca}\N{U+0dad}\N{U+0dd0}\N{U+0db8}\N{U+0dca}\N{U+0db6}\N{U+0dbb}\N{U+0dca}",
      "\N{U+0d94}\N{U+0d9a}\N{U+0dca}\N{U+0dad}\N{U+0ddd}\N{U+0db6}\N{U+0dbb}\N{U+0dca}",
      "\N{U+0db1}\N{U+0ddc}\N{U+0dc0}\N{U+0dd0}\N{U+0db8}\N{U+0dca}\N{U+0db6}\N{U+0dbb}\N{U+0dca}",
      "\N{U+0daf}\N{U+0dd9}\N{U+0dc3}\N{U+0dd0}\N{U+0db8}\N{U+0dca}\N{U+0db6}\N{U+0dbb}\N{U+0dca}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0da2}\N{U+0db1}",
      "\N{U+0db4}\N{U+0dd9}\N{U+0db6}",
      "\N{U+0db8}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}",
      "\N{U+0d85}\N{U+0db4}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dda}\N{U+0dbd}\N{U+0dca}",
      "\N{U+0db8}\N{U+0dd0}\N{U+0dba}\N{U+0dd2}",
      "\N{U+0da2}\N{U+0dd6}\N{U+0db1}\N{U+0dd2}",
      "\N{U+0da2}\N{U+0dd6}\N{U+0dbd}\N{U+0dd2}",
      "\N{U+0d85}\N{U+0d9c}\N{U+0ddd}",
      "\N{U+0dc3}\N{U+0dd0}\N{U+0db4}\N{U+0dca}",
      "\N{U+0d94}\N{U+0d9a}\N{U+0dca}",
      "\N{U+0db1}\N{U+0ddc}\N{U+0dc0}\N{U+0dd0}",
      "\N{U+0daf}\N{U+0dd9}\N{U+0dc3}\N{U+0dd0}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0da2}",
      "\N{U+0db4}\N{U+0dd9}",
      "\N{U+0db8}\N{U+0dcf}",
      "\N{U+0d85}",
      "\N{U+0db8}\N{U+0dd0}",
      "\N{U+0da2}\N{U+0dd6}",
      "\N{U+0da2}\N{U+0dd6}",
      "\N{U+0d85}",
      "\N{U+0dc3}\N{U+0dd0}",
      "\N{U+0d94}",
      "\N{U+0db1}\N{U+0dd9}",
      "\N{U+0daf}\N{U+0dd9}"
    ],
    month_stand_alone_wide => [
      "\N{U+0da2}\N{U+0db1}\N{U+0dc0}\N{U+0dcf}\N{U+0dbb}\N{U+0dd2}",
      "\N{U+0db4}\N{U+0dd9}\N{U+0db6}\N{U+0dbb}\N{U+0dc0}\N{U+0dcf}\N{U+0dbb}\N{U+0dd2}",
      "\N{U+0db8}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}",
      "\N{U+0d85}\N{U+0db4}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dda}\N{U+0dbd}\N{U+0dca}",
      "\N{U+0db8}\N{U+0dd0}\N{U+0dba}\N{U+0dd2}",
      "\N{U+0da2}\N{U+0dd6}\N{U+0db1}\N{U+0dd2}",
      "\N{U+0da2}\N{U+0dd6}\N{U+0dbd}\N{U+0dd2}",
      "\N{U+0d85}\N{U+0d9c}\N{U+0ddd}\N{U+0dc3}\N{U+0dca}\N{U+0dad}\N{U+0dd4}",
      "\N{U+0dc3}\N{U+0dd0}\N{U+0db4}\N{U+0dca}\N{U+0dad}\N{U+0dd0}\N{U+0db8}\N{U+0dca}\N{U+0db6}\N{U+0dbb}\N{U+0dca}",
      "\N{U+0d94}\N{U+0d9a}\N{U+0dca}\N{U+0dad}\N{U+0ddd}\N{U+0db6}\N{U+0dbb}\N{U+0dca}",
      "\N{U+0db1}\N{U+0ddc}\N{U+0dc0}\N{U+0dd0}\N{U+0db8}\N{U+0dca}\N{U+0db6}\N{U+0dbb}\N{U+0dca}",
      "\N{U+0daf}\N{U+0dd9}\N{U+0dc3}\N{U+0dd0}\N{U+0db8}\N{U+0dca}\N{U+0db6}\N{U+0dbb}\N{U+0dca}"
    ],
    name => "Sinhala",
    native_language => "\N{U+0dc3}\N{U+0dd2}\N{U+0d82}\N{U+0dc4}\N{U+0dbd}",
    native_name => "\N{U+0dc3}\N{U+0dd2}\N{U+0d82}\N{U+0dc4}\N{U+0dbd}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}:1",
      "\N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}:2",
      "\N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}:3",
      "\N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}:4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1 \N{U+0dc0}\N{U+0db1} \N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}\N{U+0dc0}",
      "2 \N{U+0dc0}\N{U+0db1} \N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}\N{U+0dc0}",
      "3 \N{U+0dc0}\N{U+0db1} \N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}\N{U+0dc0}",
      "4 \N{U+0dc0}\N{U+0db1} \N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}\N{U+0dc0}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}:1",
      "\N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}:2",
      "\N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}:3",
      "\N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}:4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1 \N{U+0dc0}\N{U+0db1} \N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}\N{U+0dc0}",
      "2 \N{U+0dc0}\N{U+0db1} \N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}\N{U+0dc0}",
      "3 \N{U+0dc0}\N{U+0db1} \N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}\N{U+0dc0}",
      "4 \N{U+0dc0}\N{U+0db1} \N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}\N{U+0dc0}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ si-LK ]__
  {
    am_pm_abbreviated => [
      "\N{U+0db4}\N{U+0dd9}.\N{U+0dc0}.",
      "\N{U+0db4}.\N{U+0dc0}."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH.mm",
      EHms => "E HH.mm.ss",
      Ed => "d E",
      Ehm => "E a h.mm",
      Ehms => "E a h.mm.ss",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "M-d, E",
      MMM => "LLL",
      MMMEd => "MMM d E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M-d",
      d => "d",
      h => "a h",
      hm => "a h.mm",
      hms => "a h.mm.ss",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y",
      yM => "y-M",
      yMEd => "y-M-d, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-M-d",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "si-LK",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0dc3}\N{U+0db3}\N{U+0dd4}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0d85}\N{U+0d9f}\N{U+0dc4}",
      "\N{U+0db6}\N{U+0daf}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0db6}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dc4}\N{U+0dc3}\N{U+0dca}",
      "\N{U+0dc3}\N{U+0dd2}\N{U+0d9a}\N{U+0dd4}",
      "\N{U+0dc3}\N{U+0dd9}\N{U+0db1}",
      "\N{U+0d89}\N{U+0dbb}\N{U+0dd2}\N{U+0daf}\N{U+0dcf}"
    ],
    day_format_narrow => [
      "\N{U+0dc3}",
      "\N{U+0d85}",
      "\N{U+0db6}",
      "\N{U+0db6}\N{U+0dca}\N{U+200d}\N{U+0dbb}",
      "\N{U+0dc3}\N{U+0dd2}",
      "\N{U+0dc3}\N{U+0dd9}",
      "\N{U+0d89}"
    ],
    day_format_wide => [
      "\N{U+0dc3}\N{U+0db3}\N{U+0dd4}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0d85}\N{U+0d9f}\N{U+0dc4}\N{U+0dbb}\N{U+0dd4}\N{U+0dc0}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0db6}\N{U+0daf}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0db6}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dc4}\N{U+0dc3}\N{U+0dca}\N{U+0db4}\N{U+0dad}\N{U+0dd2}\N{U+0db1}\N{U+0dca}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0dc3}\N{U+0dd2}\N{U+0d9a}\N{U+0dd4}\N{U+0dbb}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0dc3}\N{U+0dd9}\N{U+0db1}\N{U+0dc3}\N{U+0dd4}\N{U+0dbb}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0d89}\N{U+0dbb}\N{U+0dd2}\N{U+0daf}\N{U+0dcf}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0dc3}\N{U+0db3}\N{U+0dd4}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0d85}\N{U+0d9f}\N{U+0dc4}",
      "\N{U+0db6}\N{U+0daf}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0db6}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dc4}\N{U+0dc3}\N{U+0dca}",
      "\N{U+0dc3}\N{U+0dd2}\N{U+0d9a}\N{U+0dd4}",
      "\N{U+0dc3}\N{U+0dd9}\N{U+0db1}",
      "\N{U+0d89}\N{U+0dbb}\N{U+0dd2}\N{U+0daf}\N{U+0dcf}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0dc3}",
      "\N{U+0d85}",
      "\N{U+0db6}",
      "\N{U+0db6}\N{U+0dca}\N{U+200d}\N{U+0dbb}",
      "\N{U+0dc3}\N{U+0dd2}",
      "\N{U+0dc3}\N{U+0dd9}",
      "\N{U+0d89}"
    ],
    day_stand_alone_wide => [
      "\N{U+0dc3}\N{U+0db3}\N{U+0dd4}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0d85}\N{U+0d9f}\N{U+0dc4}\N{U+0dbb}\N{U+0dd4}\N{U+0dc0}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0db6}\N{U+0daf}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0db6}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dc4}\N{U+0dc3}\N{U+0dca}\N{U+0db4}\N{U+0dad}\N{U+0dd2}\N{U+0db1}\N{U+0dca}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0dc3}\N{U+0dd2}\N{U+0d9a}\N{U+0dd4}\N{U+0dbb}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0dc3}\N{U+0dd9}\N{U+0db1}\N{U+0dc3}\N{U+0dd4}\N{U+0dbb}\N{U+0dcf}\N{U+0daf}\N{U+0dcf}",
      "\N{U+0d89}\N{U+0dbb}\N{U+0dd2}\N{U+0daf}\N{U+0dcf}"
    ],
    era_abbreviated => [
      "\N{U+0d9a}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dd2}.\N{U+0db4}\N{U+0dd6}.",
      "\N{U+0d9a}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dd2}.\N{U+0dc0}."
    ],
    era_narrow => [
      "\N{U+0d9a}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dd2}.\N{U+0db4}\N{U+0dd6}.",
      "\N{U+0d9a}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dd2}.\N{U+0dc0}."
    ],
    era_wide => [
      "\N{U+0d9a}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dd2}\N{U+0dc3}\N{U+0dca}\N{U+0dad}\N{U+0dd4} \N{U+0db4}\N{U+0dd6}\N{U+0dbb}\N{U+0dca}\N{U+0dc0}",
      "\N{U+0d9a}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dd2}\N{U+0dc3}\N{U+0dca}\N{U+0dad}\N{U+0dd4} \N{U+0dc0}\N{U+0dbb}\N{U+0dca}\N{U+0dc2}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%Y %B %e \N{U+0dc0}\N{U+0dd0}\N{U+0db1}\N{U+0dd2} %A %H:%M:%S %z",
    glibc_date_format => "%Y-%m-%d",
    glibc_datetime_format => "%Y-%m-%d %H:%M:%S %z",
    glibc_time_12_format => "%p %I:%M:%S",
    glibc_time_format => "%H:%M:%S",
    language => "Sinhala",
    month_format_abbreviated => [
      "\N{U+0da2}\N{U+0db1}",
      "\N{U+0db4}\N{U+0dd9}\N{U+0db6}",
      "\N{U+0db8}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}",
      "\N{U+0d85}\N{U+0db4}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dda}\N{U+0dbd}\N{U+0dca}",
      "\N{U+0db8}\N{U+0dd0}\N{U+0dba}\N{U+0dd2}",
      "\N{U+0da2}\N{U+0dd6}\N{U+0db1}\N{U+0dd2}",
      "\N{U+0da2}\N{U+0dd6}\N{U+0dbd}\N{U+0dd2}",
      "\N{U+0d85}\N{U+0d9c}\N{U+0ddd}",
      "\N{U+0dc3}\N{U+0dd0}\N{U+0db4}\N{U+0dca}",
      "\N{U+0d94}\N{U+0d9a}\N{U+0dca}",
      "\N{U+0db1}\N{U+0ddc}\N{U+0dc0}\N{U+0dd0}",
      "\N{U+0daf}\N{U+0dd9}\N{U+0dc3}\N{U+0dd0}"
    ],
    month_format_narrow => [
      "\N{U+0da2}",
      "\N{U+0db4}\N{U+0dd9}",
      "\N{U+0db8}\N{U+0dcf}",
      "\N{U+0d85}",
      "\N{U+0db8}\N{U+0dd0}",
      "\N{U+0da2}\N{U+0dd6}",
      "\N{U+0da2}\N{U+0dd6}",
      "\N{U+0d85}",
      "\N{U+0dc3}\N{U+0dd0}",
      "\N{U+0d94}",
      "\N{U+0db1}\N{U+0dd9}",
      "\N{U+0daf}\N{U+0dd9}"
    ],
    month_format_wide => [
      "\N{U+0da2}\N{U+0db1}\N{U+0dc0}\N{U+0dcf}\N{U+0dbb}\N{U+0dd2}",
      "\N{U+0db4}\N{U+0dd9}\N{U+0db6}\N{U+0dbb}\N{U+0dc0}\N{U+0dcf}\N{U+0dbb}\N{U+0dd2}",
      "\N{U+0db8}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}",
      "\N{U+0d85}\N{U+0db4}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dda}\N{U+0dbd}\N{U+0dca}",
      "\N{U+0db8}\N{U+0dd0}\N{U+0dba}\N{U+0dd2}",
      "\N{U+0da2}\N{U+0dd6}\N{U+0db1}\N{U+0dd2}",
      "\N{U+0da2}\N{U+0dd6}\N{U+0dbd}\N{U+0dd2}",
      "\N{U+0d85}\N{U+0d9c}\N{U+0ddd}\N{U+0dc3}\N{U+0dca}\N{U+0dad}\N{U+0dd4}",
      "\N{U+0dc3}\N{U+0dd0}\N{U+0db4}\N{U+0dca}\N{U+0dad}\N{U+0dd0}\N{U+0db8}\N{U+0dca}\N{U+0db6}\N{U+0dbb}\N{U+0dca}",
      "\N{U+0d94}\N{U+0d9a}\N{U+0dca}\N{U+0dad}\N{U+0ddd}\N{U+0db6}\N{U+0dbb}\N{U+0dca}",
      "\N{U+0db1}\N{U+0ddc}\N{U+0dc0}\N{U+0dd0}\N{U+0db8}\N{U+0dca}\N{U+0db6}\N{U+0dbb}\N{U+0dca}",
      "\N{U+0daf}\N{U+0dd9}\N{U+0dc3}\N{U+0dd0}\N{U+0db8}\N{U+0dca}\N{U+0db6}\N{U+0dbb}\N{U+0dca}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0da2}\N{U+0db1}",
      "\N{U+0db4}\N{U+0dd9}\N{U+0db6}",
      "\N{U+0db8}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}",
      "\N{U+0d85}\N{U+0db4}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dda}\N{U+0dbd}\N{U+0dca}",
      "\N{U+0db8}\N{U+0dd0}\N{U+0dba}\N{U+0dd2}",
      "\N{U+0da2}\N{U+0dd6}\N{U+0db1}\N{U+0dd2}",
      "\N{U+0da2}\N{U+0dd6}\N{U+0dbd}\N{U+0dd2}",
      "\N{U+0d85}\N{U+0d9c}\N{U+0ddd}",
      "\N{U+0dc3}\N{U+0dd0}\N{U+0db4}\N{U+0dca}",
      "\N{U+0d94}\N{U+0d9a}\N{U+0dca}",
      "\N{U+0db1}\N{U+0ddc}\N{U+0dc0}\N{U+0dd0}",
      "\N{U+0daf}\N{U+0dd9}\N{U+0dc3}\N{U+0dd0}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0da2}",
      "\N{U+0db4}\N{U+0dd9}",
      "\N{U+0db8}\N{U+0dcf}",
      "\N{U+0d85}",
      "\N{U+0db8}\N{U+0dd0}",
      "\N{U+0da2}\N{U+0dd6}",
      "\N{U+0da2}\N{U+0dd6}",
      "\N{U+0d85}",
      "\N{U+0dc3}\N{U+0dd0}",
      "\N{U+0d94}",
      "\N{U+0db1}\N{U+0dd9}",
      "\N{U+0daf}\N{U+0dd9}"
    ],
    month_stand_alone_wide => [
      "\N{U+0da2}\N{U+0db1}\N{U+0dc0}\N{U+0dcf}\N{U+0dbb}\N{U+0dd2}",
      "\N{U+0db4}\N{U+0dd9}\N{U+0db6}\N{U+0dbb}\N{U+0dc0}\N{U+0dcf}\N{U+0dbb}\N{U+0dd2}",
      "\N{U+0db8}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}",
      "\N{U+0d85}\N{U+0db4}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dda}\N{U+0dbd}\N{U+0dca}",
      "\N{U+0db8}\N{U+0dd0}\N{U+0dba}\N{U+0dd2}",
      "\N{U+0da2}\N{U+0dd6}\N{U+0db1}\N{U+0dd2}",
      "\N{U+0da2}\N{U+0dd6}\N{U+0dbd}\N{U+0dd2}",
      "\N{U+0d85}\N{U+0d9c}\N{U+0ddd}\N{U+0dc3}\N{U+0dca}\N{U+0dad}\N{U+0dd4}",
      "\N{U+0dc3}\N{U+0dd0}\N{U+0db4}\N{U+0dca}\N{U+0dad}\N{U+0dd0}\N{U+0db8}\N{U+0dca}\N{U+0db6}\N{U+0dbb}\N{U+0dca}",
      "\N{U+0d94}\N{U+0d9a}\N{U+0dca}\N{U+0dad}\N{U+0ddd}\N{U+0db6}\N{U+0dbb}\N{U+0dca}",
      "\N{U+0db1}\N{U+0ddc}\N{U+0dc0}\N{U+0dd0}\N{U+0db8}\N{U+0dca}\N{U+0db6}\N{U+0dbb}\N{U+0dca}",
      "\N{U+0daf}\N{U+0dd9}\N{U+0dc3}\N{U+0dd0}\N{U+0db8}\N{U+0dca}\N{U+0db6}\N{U+0dbb}\N{U+0dca}"
    ],
    name => "Sinhala Sri Lanka",
    native_language => "\N{U+0dc3}\N{U+0dd2}\N{U+0d82}\N{U+0dc4}\N{U+0dbd}",
    native_name => "\N{U+0dc3}\N{U+0dd2}\N{U+0d82}\N{U+0dc4}\N{U+0dbd} \N{U+0dc1}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dd3} \N{U+0dbd}\N{U+0d82}\N{U+0d9a}\N{U+0dcf}\N{U+0dc0}",
    native_script => undef,
    native_territory => "\N{U+0dc1}\N{U+0dca}\N{U+200d}\N{U+0dbb}\N{U+0dd3} \N{U+0dbd}\N{U+0d82}\N{U+0d9a}\N{U+0dcf}\N{U+0dc0}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}:1",
      "\N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}:2",
      "\N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}:3",
      "\N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}:4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1 \N{U+0dc0}\N{U+0db1} \N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}\N{U+0dc0}",
      "2 \N{U+0dc0}\N{U+0db1} \N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}\N{U+0dc0}",
      "3 \N{U+0dc0}\N{U+0db1} \N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}\N{U+0dc0}",
      "4 \N{U+0dc0}\N{U+0db1} \N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}\N{U+0dc0}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}:1",
      "\N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}:2",
      "\N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}:3",
      "\N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}:4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1 \N{U+0dc0}\N{U+0db1} \N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}\N{U+0dc0}",
      "2 \N{U+0dc0}\N{U+0db1} \N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}\N{U+0dc0}",
      "3 \N{U+0dc0}\N{U+0db1} \N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}\N{U+0dc0}",
      "4 \N{U+0dc0}\N{U+0db1} \N{U+0d9a}\N{U+0dcf}\N{U+0dbb}\N{U+0dca}\N{U+0dad}\N{U+0dd4}\N{U+0dc0}"
    ],
    script => undef,
    territory => "Sri Lanka",
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ sk ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "LLLL y G",
      GyMMMEd => "E, d. M. y G",
      GyMMMMd => "d. M. y G",
      GyMMMd => "d. M. y G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmv => "H:mm v",
      M => "L.",
      MEd => "E d. M.",
      MMM => "LLL",
      MMMEd => "E d. M.",
      MMMMEd => "E d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. M.",
      Md => "d. M.",
      d => "d.",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d. M. y",
      yMMM => "M/y",
      yMMMEd => "E d. M. y",
      yMMMM => "LLLL y",
      yMMMMd => "d. MMMM y",
      yMMMd => "d. M. y",
      yMd => "d. M. y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "sk",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. M. y",
    date_format_short => "d.M.yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "po",
      "ut",
      "st",
      "\N{U+0161}t",
      "pi",
      "so",
      "ne"
    ],
    day_format_narrow => [
      "p",
      "u",
      "s",
      "\N{U+0161}",
      "p",
      "s",
      "n"
    ],
    day_format_wide => [
      "pondelok",
      "utorok",
      "streda",
      "\N{U+0161}tvrtok",
      "piatok",
      "sobota",
      "nede\N{U+013e}a"
    ],
    day_stand_alone_abbreviated => [
      "po",
      "ut",
      "st",
      "\N{U+0161}t",
      "pi",
      "so",
      "ne"
    ],
    day_stand_alone_narrow => [
      "p",
      "u",
      "s",
      "\N{U+0161}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "pondelok",
      "utorok",
      "streda",
      "\N{U+0161}tvrtok",
      "piatok",
      "sobota",
      "nede\N{U+013e}a"
    ],
    era_abbreviated => [
      "pred Kr.",
      "po Kr."
    ],
    era_narrow => [
      "pred Kr.",
      "po Kr."
    ],
    era_wide => [
      "pred Kristom",
      "po Kristovi"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Slovak",
    month_format_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "m\N{U+00e1}j",
      "j\N{U+00fa}n",
      "j\N{U+00fa}l",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_format_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "janu\N{U+00e1}ra",
      "febru\N{U+00e1}ra",
      "marca",
      "apr\N{U+00ed}la",
      "m\N{U+00e1}ja",
      "j\N{U+00fa}na",
      "j\N{U+00fa}la",
      "augusta",
      "septembra",
      "okt\N{U+00f3}bra",
      "novembra",
      "decembra"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "m\N{U+00e1}j",
      "j\N{U+00fa}n",
      "j\N{U+00fa}l",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "janu\N{U+00e1}r",
      "febru\N{U+00e1}r",
      "marec",
      "apr\N{U+00ed}l",
      "m\N{U+00e1}j",
      "j\N{U+00fa}n",
      "j\N{U+00fa}l",
      "august",
      "september",
      "okt\N{U+00f3}ber",
      "november",
      "december"
    ],
    name => "Slovak",
    native_language => "sloven\N{U+010d}ina",
    native_name => "sloven\N{U+010d}ina",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. \N{U+0161}tvr\N{U+0165}rok",
      "2. \N{U+0161}tvr\N{U+0165}rok",
      "3. \N{U+0161}tvr\N{U+0165}rok",
      "4. \N{U+0161}tvr\N{U+0165}rok"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. \N{U+0161}tvr\N{U+0165}rok",
      "2. \N{U+0161}tvr\N{U+0165}rok",
      "3. \N{U+0161}tvr\N{U+0165}rok",
      "4. \N{U+0161}tvr\N{U+0165}rok"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ sk-SK ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "LLLL y G",
      GyMMMEd => "E, d. M. y G",
      GyMMMMd => "d. M. y G",
      GyMMMd => "d. M. y G",
      H => "H",
      Hm => "H:mm",
      Hms => "H:mm:ss",
      Hmsv => "H:mm:ss v",
      Hmv => "H:mm v",
      M => "L.",
      MEd => "E d. M.",
      MMM => "LLL",
      MMMEd => "E d. M.",
      MMMMEd => "E d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. M.",
      Md => "d. M.",
      d => "d.",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d. M. y",
      yMMM => "M/y",
      yMMMEd => "E d. M. y",
      yMMMM => "LLLL y",
      yMMMMd => "d. MMMM y",
      yMMMd => "d. M. y",
      yMd => "d. M. y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "sk-SK",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. M. y",
    date_format_short => "d.M.yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "po",
      "ut",
      "st",
      "\N{U+0161}t",
      "pi",
      "so",
      "ne"
    ],
    day_format_narrow => [
      "p",
      "u",
      "s",
      "\N{U+0161}",
      "p",
      "s",
      "n"
    ],
    day_format_wide => [
      "pondelok",
      "utorok",
      "streda",
      "\N{U+0161}tvrtok",
      "piatok",
      "sobota",
      "nede\N{U+013e}a"
    ],
    day_stand_alone_abbreviated => [
      "po",
      "ut",
      "st",
      "\N{U+0161}t",
      "pi",
      "so",
      "ne"
    ],
    day_stand_alone_narrow => [
      "p",
      "u",
      "s",
      "\N{U+0161}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "pondelok",
      "utorok",
      "streda",
      "\N{U+0161}tvrtok",
      "piatok",
      "sobota",
      "nede\N{U+013e}a"
    ],
    era_abbreviated => [
      "pred Kr.",
      "po Kr."
    ],
    era_narrow => [
      "pred Kr.",
      "po Kr."
    ],
    era_wide => [
      "pred Kristom",
      "po Kristovi"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a\240%e.\240%B\240%Y,\240%H:%M:%S\240%Z",
    glibc_time_12_format => "%I:%M:%S",
    glibc_time_format => "%H:%M:%S",
    language => "Slovak",
    month_format_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "m\N{U+00e1}j",
      "j\N{U+00fa}n",
      "j\N{U+00fa}l",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_format_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "janu\N{U+00e1}ra",
      "febru\N{U+00e1}ra",
      "marca",
      "apr\N{U+00ed}la",
      "m\N{U+00e1}ja",
      "j\N{U+00fa}na",
      "j\N{U+00fa}la",
      "augusta",
      "septembra",
      "okt\N{U+00f3}bra",
      "novembra",
      "decembra"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "m\N{U+00e1}j",
      "j\N{U+00fa}n",
      "j\N{U+00fa}l",
      "aug",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "janu\N{U+00e1}r",
      "febru\N{U+00e1}r",
      "marec",
      "apr\N{U+00ed}l",
      "m\N{U+00e1}j",
      "j\N{U+00fa}n",
      "j\N{U+00fa}l",
      "august",
      "september",
      "okt\N{U+00f3}ber",
      "november",
      "december"
    ],
    name => "Slovak Slovakia",
    native_language => "sloven\N{U+010d}ina",
    native_name => "sloven\N{U+010d}ina Slovensko",
    native_script => undef,
    native_territory => "Slovensko",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. \N{U+0161}tvr\N{U+0165}rok",
      "2. \N{U+0161}tvr\N{U+0165}rok",
      "3. \N{U+0161}tvr\N{U+0165}rok",
      "4. \N{U+0161}tvr\N{U+0165}rok"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. \N{U+0161}tvr\N{U+0165}rok",
      "2. \N{U+0161}tvr\N{U+0165}rok",
      "3. \N{U+0161}tvr\N{U+0165}rok",
      "4. \N{U+0161}tvr\N{U+0165}rok"
    ],
    script => undef,
    territory => "Slovakia",
    time_format_full => "H:mm:ss zzzz",
    time_format_long => "H:mm:ss z",
    time_format_medium => "H:mm:ss",
    time_format_short => "H:mm",
    variant => undef,
    version => 29
  }
  __[ sl ]__
  {
    am_pm_abbreviated => [
      "dop.",
      "pop."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyM => "MMM y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d. M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMd => "d MMMM",
      MMMd => "d. MMM",
      Md => "d. M.",
      d => "d.",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d. M. y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "d. M. y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "sl",
    date_format_full => "EEEE, dd. MMMM y",
    date_format_long => "dd. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "d. MM. yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "pon.",
      "tor.",
      "sre.",
      "\N{U+010d}et.",
      "pet.",
      "sob.",
      "ned."
    ],
    day_format_narrow => [
      "p",
      "t",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_format_wide => [
      "ponedeljek",
      "torek",
      "sreda",
      "\N{U+010d}etrtek",
      "petek",
      "sobota",
      "nedelja"
    ],
    day_stand_alone_abbreviated => [
      "pon",
      "tor",
      "sre",
      "\N{U+010d}et",
      "pet",
      "sob",
      "ned"
    ],
    day_stand_alone_narrow => [
      "p",
      "t",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "ponedeljek",
      "torek",
      "sreda",
      "\N{U+010d}etrtek",
      "petek",
      "sobota",
      "nedelja"
    ],
    era_abbreviated => [
      "pr. Kr.",
      "po n. \N{U+0161}t."
    ],
    era_narrow => [
      "pr. Kr.",
      "po n. \N{U+0161}t."
    ],
    era_wide => [
      "pred Kristusom",
      "na\N{U+0161}e \N{U+0161}tetje"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Slovenian",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mar.",
      "apr.",
      "maj",
      "jun.",
      "jul.",
      "avg.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "marec",
      "april",
      "maj",
      "junij",
      "julij",
      "avgust",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "avg",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "marec",
      "april",
      "maj",
      "junij",
      "julij",
      "avgust",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Slovenian",
    native_language => "sloven\N{U+0161}\N{U+010d}ina",
    native_name => "sloven\N{U+0161}\N{U+010d}ina",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1. \N{U+010d}et.",
      "2. \N{U+010d}et.",
      "3. \N{U+010d}et.",
      "4. \N{U+010d}et."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. \N{U+010d}etrtletje",
      "2. \N{U+010d}etrtletje",
      "3. \N{U+010d}etrtletje",
      "4. \N{U+010d}etrtletje"
    ],
    quarter_stand_alone_abbreviated => [
      "1. \N{U+010d}et.",
      "2. \N{U+010d}et.",
      "3. \N{U+010d}et.",
      "4. \N{U+010d}et."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. \N{U+010d}etrtletje",
      "2. \N{U+010d}etrtletje",
      "3. \N{U+010d}etrtletje",
      "4. \N{U+010d}etrtletje"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sl-SI ]__
  {
    am_pm_abbreviated => [
      "dop.",
      "pop."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyM => "MMM y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d. MMM y G",
      GyMMMd => "d. MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d. M.",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMd => "d MMMM",
      MMMd => "d. MMM",
      Md => "d. M.",
      d => "d.",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d. M. y",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d. MMM y",
      yMd => "d. M. y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "sl-SI",
    date_format_full => "EEEE, dd. MMMM y",
    date_format_long => "dd. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "d. MM. yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "pon.",
      "tor.",
      "sre.",
      "\N{U+010d}et.",
      "pet.",
      "sob.",
      "ned."
    ],
    day_format_narrow => [
      "p",
      "t",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_format_wide => [
      "ponedeljek",
      "torek",
      "sreda",
      "\N{U+010d}etrtek",
      "petek",
      "sobota",
      "nedelja"
    ],
    day_stand_alone_abbreviated => [
      "pon",
      "tor",
      "sre",
      "\N{U+010d}et",
      "pet",
      "sob",
      "ned"
    ],
    day_stand_alone_narrow => [
      "p",
      "t",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "ponedeljek",
      "torek",
      "sreda",
      "\N{U+010d}etrtek",
      "petek",
      "sobota",
      "nedelja"
    ],
    era_abbreviated => [
      "pr. Kr.",
      "po n. \N{U+0161}t."
    ],
    era_narrow => [
      "pr. Kr.",
      "po n. \N{U+0161}t."
    ],
    era_wide => [
      "pred Kristusom",
      "na\N{U+0161}e \N{U+0161}tetje"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d. %m. %Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Slovenian",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mar.",
      "apr.",
      "maj",
      "jun.",
      "jul.",
      "avg.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "marec",
      "april",
      "maj",
      "junij",
      "julij",
      "avgust",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "avg",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "marec",
      "april",
      "maj",
      "junij",
      "julij",
      "avgust",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Slovenian Slovenia",
    native_language => "sloven\N{U+0161}\N{U+010d}ina",
    native_name => "sloven\N{U+0161}\N{U+010d}ina Slovenija",
    native_script => undef,
    native_territory => "Slovenija",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1. \N{U+010d}et.",
      "2. \N{U+010d}et.",
      "3. \N{U+010d}et.",
      "4. \N{U+010d}et."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. \N{U+010d}etrtletje",
      "2. \N{U+010d}etrtletje",
      "3. \N{U+010d}etrtletje",
      "4. \N{U+010d}etrtletje"
    ],
    quarter_stand_alone_abbreviated => [
      "1. \N{U+010d}et.",
      "2. \N{U+010d}et.",
      "3. \N{U+010d}et.",
      "4. \N{U+010d}et."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. \N{U+010d}etrtletje",
      "2. \N{U+010d}etrtletje",
      "3. \N{U+010d}etrtletje",
      "4. \N{U+010d}etrtletje"
    ],
    script => undef,
    territory => "Slovenia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ smn ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "smn",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "vu",
      "ma",
      "ko",
      "tu",
      "v\N{U+00e1}",
      "l\N{U+00e1}",
      "pa"
    ],
    day_format_narrow => [
      "V",
      "M",
      "K",
      "T",
      "V",
      "L",
      "P"
    ],
    day_format_wide => [
      "vuossaarg\N{U+00e2}",
      "majebaarg\N{U+00e2}",
      "koskoho",
      "tuor\N{U+00e2}stuv",
      "v\N{U+00e1}stuppeeivi",
      "l\N{U+00e1}vurduv",
      "pasepeeivi"
    ],
    day_stand_alone_abbreviated => [
      "vu",
      "ma",
      "ko",
      "tu",
      "v\N{U+00e1}",
      "l\N{U+00e1}",
      "pa"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "vuossarg\N{U+00e2}",
      "majebarg\N{U+00e2}",
      "koskokko",
      "tuor\N{U+00e2}st\N{U+00e2}h",
      "v\N{U+00e1}stuppeivi",
      "l\N{U+00e1}vurd\N{U+00e2}h",
      "pasepeivi"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Inari Sami",
    month_format_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "u\N{U+0111}\N{U+0111}\N{U+00e2}ivem\N{U+00e1}\N{U+00e1}nu",
      "kuov\N{U+00e2}m\N{U+00e1}\N{U+00e1}nu",
      "njuh\N{U+010d}\N{U+00e2}m\N{U+00e1}\N{U+00e1}nu",
      "cu\N{U+00e1}\N{U+014b}uim\N{U+00e1}\N{U+00e1}nu",
      "vyesim\N{U+00e1}\N{U+00e1}nu",
      "kesim\N{U+00e1}\N{U+00e1}nu",
      "syeinim\N{U+00e1}\N{U+00e1}nu",
      "porgem\N{U+00e1}\N{U+00e1}nu",
      "\N{U+010d}oh\N{U+010d}\N{U+00e2}m\N{U+00e1}\N{U+00e1}nu",
      "roovv\N{U+00e2}dm\N{U+00e1}\N{U+00e1}nu",
      "skamm\N{U+00e2}m\N{U+00e1}\N{U+00e1}nu",
      "juovl\N{U+00e2}m\N{U+00e1}\N{U+00e1}nu"
    ],
    name => "Inari Sami",
    native_language => "anar\N{U+00e2}\N{U+0161}kiel\N{U+00e2}",
    native_name => "anar\N{U+00e2}\N{U+0161}kiel\N{U+00e2}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1. ni\N{U+00e4}lj.",
      "2. ni\N{U+00e4}lj.",
      "3. ni\N{U+00e4}lj.",
      "4. ni\N{U+00e4}lj."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. ni\N{U+00e4}lj\N{U+00e1}d\N{U+00e2}s",
      "2. ni\N{U+00e4}lj\N{U+00e1}d\N{U+00e2}s",
      "3. ni\N{U+00e4}lj\N{U+00e1}d\N{U+00e2}s",
      "4. ni\N{U+00e4}lj\N{U+00e1}d\N{U+00e2}s"
    ],
    quarter_stand_alone_abbreviated => [
      "1. ni\N{U+00e4}lj.",
      "2. ni\N{U+00e4}lj.",
      "3. ni\N{U+00e4}lj.",
      "4. ni\N{U+00e4}lj."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. ni\N{U+00e4}lj\N{U+00e1}d\N{U+00e2}s",
      "2. ni\N{U+00e4}lj\N{U+00e1}d\N{U+00e2}s",
      "3. ni\N{U+00e4}lj\N{U+00e1}d\N{U+00e2}s",
      "4. ni\N{U+00e4}lj\N{U+00e1}d\N{U+00e2}s"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ smn-FI ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "smn-FI",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "vu",
      "ma",
      "ko",
      "tu",
      "v\N{U+00e1}",
      "l\N{U+00e1}",
      "pa"
    ],
    day_format_narrow => [
      "V",
      "M",
      "K",
      "T",
      "V",
      "L",
      "P"
    ],
    day_format_wide => [
      "vuossaarg\N{U+00e2}",
      "majebaarg\N{U+00e2}",
      "koskoho",
      "tuor\N{U+00e2}stuv",
      "v\N{U+00e1}stuppeeivi",
      "l\N{U+00e1}vurduv",
      "pasepeeivi"
    ],
    day_stand_alone_abbreviated => [
      "vu",
      "ma",
      "ko",
      "tu",
      "v\N{U+00e1}",
      "l\N{U+00e1}",
      "pa"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "vuossarg\N{U+00e2}",
      "majebarg\N{U+00e2}",
      "koskokko",
      "tuor\N{U+00e2}st\N{U+00e2}h",
      "v\N{U+00e1}stuppeivi",
      "l\N{U+00e1}vurd\N{U+00e2}h",
      "pasepeivi"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Inari Sami",
    month_format_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "u\N{U+0111}\N{U+0111}\N{U+00e2}ivem\N{U+00e1}\N{U+00e1}nu",
      "kuov\N{U+00e2}m\N{U+00e1}\N{U+00e1}nu",
      "njuh\N{U+010d}\N{U+00e2}m\N{U+00e1}\N{U+00e1}nu",
      "cu\N{U+00e1}\N{U+014b}uim\N{U+00e1}\N{U+00e1}nu",
      "vyesim\N{U+00e1}\N{U+00e1}nu",
      "kesim\N{U+00e1}\N{U+00e1}nu",
      "syeinim\N{U+00e1}\N{U+00e1}nu",
      "porgem\N{U+00e1}\N{U+00e1}nu",
      "\N{U+010d}oh\N{U+010d}\N{U+00e2}m\N{U+00e1}\N{U+00e1}nu",
      "roovv\N{U+00e2}dm\N{U+00e1}\N{U+00e1}nu",
      "skamm\N{U+00e2}m\N{U+00e1}\N{U+00e1}nu",
      "juovl\N{U+00e2}m\N{U+00e1}\N{U+00e1}nu"
    ],
    name => "Inari Sami Finland",
    native_language => "anar\N{U+00e2}\N{U+0161}kiel\N{U+00e2}",
    native_name => "anar\N{U+00e2}\N{U+0161}kiel\N{U+00e2} Suom\N{U+00e2}",
    native_script => undef,
    native_territory => "Suom\N{U+00e2}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1. ni\N{U+00e4}lj.",
      "2. ni\N{U+00e4}lj.",
      "3. ni\N{U+00e4}lj.",
      "4. ni\N{U+00e4}lj."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. ni\N{U+00e4}lj\N{U+00e1}d\N{U+00e2}s",
      "2. ni\N{U+00e4}lj\N{U+00e1}d\N{U+00e2}s",
      "3. ni\N{U+00e4}lj\N{U+00e1}d\N{U+00e2}s",
      "4. ni\N{U+00e4}lj\N{U+00e1}d\N{U+00e2}s"
    ],
    quarter_stand_alone_abbreviated => [
      "1. ni\N{U+00e4}lj.",
      "2. ni\N{U+00e4}lj.",
      "3. ni\N{U+00e4}lj.",
      "4. ni\N{U+00e4}lj."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. ni\N{U+00e4}lj\N{U+00e1}d\N{U+00e2}s",
      "2. ni\N{U+00e4}lj\N{U+00e1}d\N{U+00e2}s",
      "3. ni\N{U+00e4}lj\N{U+00e1}d\N{U+00e2}s",
      "4. ni\N{U+00e4}lj\N{U+00e1}d\N{U+00e2}s"
    ],
    script => undef,
    territory => "Finland",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sn ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "sn",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Muv",
      "Chip",
      "Chit",
      "Chin",
      "Chis",
      "Mug",
      "Svo"
    ],
    day_format_narrow => [
      "M",
      "C",
      "C",
      "C",
      "C",
      "M",
      "S"
    ],
    day_format_wide => [
      "Muvhuro",
      "Chipiri",
      "Chitatu",
      "China",
      "Chishanu",
      "Mugovera",
      "Svondo"
    ],
    day_stand_alone_abbreviated => [
      "Muv",
      "Chip",
      "Chit",
      "Chin",
      "Chis",
      "Mug",
      "Svo"
    ],
    day_stand_alone_narrow => [
      "M",
      "C",
      "C",
      "C",
      "C",
      "M",
      "S"
    ],
    day_stand_alone_wide => [
      "Muvhuro",
      "Chipiri",
      "Chitatu",
      "China",
      "Chishanu",
      "Mugovera",
      "Svondo"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Kristo asati auya",
      "Kristo ashaya"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Shona",
    month_format_abbreviated => [
      "Ndi",
      "Kuk",
      "Kur",
      "Kub",
      "Chv",
      "Chk",
      "Chg",
      "Nya",
      "Gun",
      "Gum",
      "Mb",
      "Zvi"
    ],
    month_format_narrow => [
      "N",
      "K",
      "K",
      "K",
      "C",
      "C",
      "C",
      "N",
      "G",
      "G",
      "M",
      "Z"
    ],
    month_format_wide => [
      "Ndira",
      "Kukadzi",
      "Kurume",
      "Kubvumbi",
      "Chivabvu",
      "Chikumi",
      "Chikunguru",
      "Nyamavhuvhu",
      "Gunyana",
      "Gumiguru",
      "Mbudzi",
      "Zvita"
    ],
    month_stand_alone_abbreviated => [
      "Ndi",
      "Kuk",
      "Kur",
      "Kub",
      "Chv",
      "Chk",
      "Chg",
      "Nya",
      "Gun",
      "Gum",
      "Mb",
      "Zvi"
    ],
    month_stand_alone_narrow => [
      "N",
      "K",
      "K",
      "K",
      "C",
      "C",
      "C",
      "N",
      "G",
      "G",
      "M",
      "Z"
    ],
    month_stand_alone_wide => [
      "Ndira",
      "Kukadzi",
      "Kurume",
      "Kubvumbi",
      "Chivabvu",
      "Chikumi",
      "Chikunguru",
      "Nyamavhuvhu",
      "Gunyana",
      "Gumiguru",
      "Mbudzi",
      "Zvita"
    ],
    name => "Shona",
    native_language => "chiShona",
    native_name => "chiShona",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Kota 1",
      "Kota 2",
      "Kota 3",
      "Kota 4"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Kota 1",
      "Kota 2",
      "Kota 3",
      "Kota 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ sn-ZW ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "sn-ZW",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Muv",
      "Chip",
      "Chit",
      "Chin",
      "Chis",
      "Mug",
      "Svo"
    ],
    day_format_narrow => [
      "M",
      "C",
      "C",
      "C",
      "C",
      "M",
      "S"
    ],
    day_format_wide => [
      "Muvhuro",
      "Chipiri",
      "Chitatu",
      "China",
      "Chishanu",
      "Mugovera",
      "Svondo"
    ],
    day_stand_alone_abbreviated => [
      "Muv",
      "Chip",
      "Chit",
      "Chin",
      "Chis",
      "Mug",
      "Svo"
    ],
    day_stand_alone_narrow => [
      "M",
      "C",
      "C",
      "C",
      "C",
      "M",
      "S"
    ],
    day_stand_alone_wide => [
      "Muvhuro",
      "Chipiri",
      "Chitatu",
      "China",
      "Chishanu",
      "Mugovera",
      "Svondo"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Kristo asati auya",
      "Kristo ashaya"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Shona",
    month_format_abbreviated => [
      "Ndi",
      "Kuk",
      "Kur",
      "Kub",
      "Chv",
      "Chk",
      "Chg",
      "Nya",
      "Gun",
      "Gum",
      "Mb",
      "Zvi"
    ],
    month_format_narrow => [
      "N",
      "K",
      "K",
      "K",
      "C",
      "C",
      "C",
      "N",
      "G",
      "G",
      "M",
      "Z"
    ],
    month_format_wide => [
      "Ndira",
      "Kukadzi",
      "Kurume",
      "Kubvumbi",
      "Chivabvu",
      "Chikumi",
      "Chikunguru",
      "Nyamavhuvhu",
      "Gunyana",
      "Gumiguru",
      "Mbudzi",
      "Zvita"
    ],
    month_stand_alone_abbreviated => [
      "Ndi",
      "Kuk",
      "Kur",
      "Kub",
      "Chv",
      "Chk",
      "Chg",
      "Nya",
      "Gun",
      "Gum",
      "Mb",
      "Zvi"
    ],
    month_stand_alone_narrow => [
      "N",
      "K",
      "K",
      "K",
      "C",
      "C",
      "C",
      "N",
      "G",
      "G",
      "M",
      "Z"
    ],
    month_stand_alone_wide => [
      "Ndira",
      "Kukadzi",
      "Kurume",
      "Kubvumbi",
      "Chivabvu",
      "Chikumi",
      "Chikunguru",
      "Nyamavhuvhu",
      "Gunyana",
      "Gumiguru",
      "Mbudzi",
      "Zvita"
    ],
    name => "Shona Zimbabwe",
    native_language => "chiShona",
    native_name => "chiShona Zimbabwe",
    native_script => undef,
    native_territory => "Zimbabwe",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Kota 1",
      "Kota 2",
      "Kota 3",
      "Kota 4"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Kota 1",
      "Kota 2",
      "Kota 3",
      "Kota 4"
    ],
    script => undef,
    territory => "Zimbabwe",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ so ]__
  {
    am_pm_abbreviated => [
      "sn.",
      "gn."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "so",
    date_format_full => "EEEE, MMMM dd, y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd-MMM-y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Isn",
      "Tal",
      "Arb",
      "Kha",
      "Jim",
      "Sab",
      "Axd"
    ],
    day_format_narrow => [
      "I",
      "T",
      "A",
      "K",
      "J",
      "S",
      "A"
    ],
    day_format_wide => [
      "Isniin",
      "Talaado",
      "Arbaco",
      "Khamiis",
      "Jimco",
      "Sabti",
      "Axad"
    ],
    day_stand_alone_abbreviated => [
      "Isn",
      "Tal",
      "Arb",
      "Kha",
      "Jim",
      "Sab",
      "Axd"
    ],
    day_stand_alone_narrow => [
      "I",
      "T",
      "A",
      "K",
      "J",
      "S",
      "A"
    ],
    day_stand_alone_wide => [
      "Isniin",
      "Talaado",
      "Arbaco",
      "Khamiis",
      "Jimco",
      "Sabti",
      "Axad"
    ],
    era_abbreviated => [
      "CK",
      "CD"
    ],
    era_narrow => [
      "CK",
      "CD"
    ],
    era_wide => [
      "Ciise ka hor (CS)",
      "Ciise ka dib (CS)"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Somali",
    month_format_abbreviated => [
      "Kob",
      "Lab",
      "Sad",
      "Afr",
      "Sha",
      "Lix",
      "Tod",
      "Sid",
      "Sag",
      "Tob",
      "KIT",
      "LIT"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Bisha Koobaad",
      "Bisha Labaad",
      "Bisha Saddexaad",
      "Bisha Afraad",
      "Bisha Shanaad",
      "Bisha Lixaad",
      "Bisha Todobaad",
      "Bisha Sideedaad",
      "Bisha Sagaalaad",
      "Bisha Tobnaad",
      "Bisha Kow iyo Tobnaad",
      "Bisha Laba iyo Tobnaad"
    ],
    month_stand_alone_abbreviated => [
      "Kob",
      "Lab",
      "Sad",
      "Afr",
      "Sha",
      "Lix",
      "Tod",
      "Sid",
      "Sag",
      "Tob",
      "KIT",
      "LIT"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Bisha Koobaad",
      "Bisha Labaad",
      "Bisha Saddexaad",
      "Bisha Afraad",
      "Bisha Shanaad",
      "Bisha Lixaad",
      "Bisha Todobaad",
      "Bisha Sideedaad",
      "Bisha Sagaalaad",
      "Bisha Tobnaad",
      "Bisha Kow iyo Tobnaad",
      "Bisha Laba iyo Tobnaad"
    ],
    name => "Somali",
    native_language => "Soomaali",
    native_name => "Soomaali",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Rubaca 1aad",
      "Rubaca 2aad",
      "Rubaca 3aad",
      "Rubaca 4aad"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Rubaca 1aad",
      "Rubaca 2aad",
      "Rubaca 3aad",
      "Rubaca 4aad"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ so-DJ ]__
  {
    am_pm_abbreviated => [
      "sn.",
      "gn."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "so-DJ",
    date_format_full => "EEEE, MMMM dd, y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd-MMM-y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Isn",
      "Tal",
      "Arb",
      "Kha",
      "Jim",
      "Sab",
      "Axd"
    ],
    day_format_narrow => [
      "I",
      "T",
      "A",
      "K",
      "J",
      "S",
      "A"
    ],
    day_format_wide => [
      "Isniin",
      "Talaado",
      "Arbaco",
      "Khamiis",
      "Jimco",
      "Sabti",
      "Axad"
    ],
    day_stand_alone_abbreviated => [
      "Isn",
      "Tal",
      "Arb",
      "Kha",
      "Jim",
      "Sab",
      "Axd"
    ],
    day_stand_alone_narrow => [
      "I",
      "T",
      "A",
      "K",
      "J",
      "S",
      "A"
    ],
    day_stand_alone_wide => [
      "Isniin",
      "Talaado",
      "Arbaco",
      "Khamiis",
      "Jimco",
      "Sabti",
      "Axad"
    ],
    era_abbreviated => [
      "CK",
      "CD"
    ],
    era_narrow => [
      "CK",
      "CD"
    ],
    era_wide => [
      "Ciise ka hor (CS)",
      "Ciise ka dib (CS)"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %r %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %d %b %Y %r %Z",
    glibc_time_12_format => "%X %p",
    glibc_time_format => "%l:%M:%S",
    language => "Somali",
    month_format_abbreviated => [
      "Kob",
      "Lab",
      "Sad",
      "Afr",
      "Sha",
      "Lix",
      "Tod",
      "Sid",
      "Sag",
      "Tob",
      "KIT",
      "LIT"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Bisha Koobaad",
      "Bisha Labaad",
      "Bisha Saddexaad",
      "Bisha Afraad",
      "Bisha Shanaad",
      "Bisha Lixaad",
      "Bisha Todobaad",
      "Bisha Sideedaad",
      "Bisha Sagaalaad",
      "Bisha Tobnaad",
      "Bisha Kow iyo Tobnaad",
      "Bisha Laba iyo Tobnaad"
    ],
    month_stand_alone_abbreviated => [
      "Kob",
      "Lab",
      "Sad",
      "Afr",
      "Sha",
      "Lix",
      "Tod",
      "Sid",
      "Sag",
      "Tob",
      "KIT",
      "LIT"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Bisha Koobaad",
      "Bisha Labaad",
      "Bisha Saddexaad",
      "Bisha Afraad",
      "Bisha Shanaad",
      "Bisha Lixaad",
      "Bisha Todobaad",
      "Bisha Sideedaad",
      "Bisha Sagaalaad",
      "Bisha Tobnaad",
      "Bisha Kow iyo Tobnaad",
      "Bisha Laba iyo Tobnaad"
    ],
    name => "Somali Djibouti",
    native_language => "Soomaali",
    native_name => "Soomaali Jabuuti",
    native_script => undef,
    native_territory => "Jabuuti",
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Rubaca 1aad",
      "Rubaca 2aad",
      "Rubaca 3aad",
      "Rubaca 4aad"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Rubaca 1aad",
      "Rubaca 2aad",
      "Rubaca 3aad",
      "Rubaca 4aad"
    ],
    script => undef,
    territory => "Djibouti",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ so-ET ]__
  {
    am_pm_abbreviated => [
      "sn.",
      "gn."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "so-ET",
    date_format_full => "EEEE, MMMM dd, y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd-MMM-y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Isn",
      "Tal",
      "Arb",
      "Kha",
      "Jim",
      "Sab",
      "Axd"
    ],
    day_format_narrow => [
      "I",
      "T",
      "A",
      "K",
      "J",
      "S",
      "A"
    ],
    day_format_wide => [
      "Isniin",
      "Talaado",
      "Arbaco",
      "Khamiis",
      "Jimco",
      "Sabti",
      "Axad"
    ],
    day_stand_alone_abbreviated => [
      "Isn",
      "Tal",
      "Arb",
      "Kha",
      "Jim",
      "Sab",
      "Axd"
    ],
    day_stand_alone_narrow => [
      "I",
      "T",
      "A",
      "K",
      "J",
      "S",
      "A"
    ],
    day_stand_alone_wide => [
      "Isniin",
      "Talaado",
      "Arbaco",
      "Khamiis",
      "Jimco",
      "Sabti",
      "Axad"
    ],
    era_abbreviated => [
      "CK",
      "CD"
    ],
    era_narrow => [
      "CK",
      "CD"
    ],
    era_wide => [
      "Ciise ka hor (CS)",
      "Ciise ka dib (CS)"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%A, %B %e, %r %Z %Y",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%A, %B %e, %Y %r %Z",
    glibc_time_12_format => "%X %p",
    glibc_time_format => "%l:%M:%S",
    language => "Somali",
    month_format_abbreviated => [
      "Kob",
      "Lab",
      "Sad",
      "Afr",
      "Sha",
      "Lix",
      "Tod",
      "Sid",
      "Sag",
      "Tob",
      "KIT",
      "LIT"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Bisha Koobaad",
      "Bisha Labaad",
      "Bisha Saddexaad",
      "Bisha Afraad",
      "Bisha Shanaad",
      "Bisha Lixaad",
      "Bisha Todobaad",
      "Bisha Sideedaad",
      "Bisha Sagaalaad",
      "Bisha Tobnaad",
      "Bisha Kow iyo Tobnaad",
      "Bisha Laba iyo Tobnaad"
    ],
    month_stand_alone_abbreviated => [
      "Kob",
      "Lab",
      "Sad",
      "Afr",
      "Sha",
      "Lix",
      "Tod",
      "Sid",
      "Sag",
      "Tob",
      "KIT",
      "LIT"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Bisha Koobaad",
      "Bisha Labaad",
      "Bisha Saddexaad",
      "Bisha Afraad",
      "Bisha Shanaad",
      "Bisha Lixaad",
      "Bisha Todobaad",
      "Bisha Sideedaad",
      "Bisha Sagaalaad",
      "Bisha Tobnaad",
      "Bisha Kow iyo Tobnaad",
      "Bisha Laba iyo Tobnaad"
    ],
    name => "Somali Ethiopia",
    native_language => "Soomaali",
    native_name => "Soomaali Itoobiya",
    native_script => undef,
    native_territory => "Itoobiya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Rubaca 1aad",
      "Rubaca 2aad",
      "Rubaca 3aad",
      "Rubaca 4aad"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Rubaca 1aad",
      "Rubaca 2aad",
      "Rubaca 3aad",
      "Rubaca 4aad"
    ],
    script => undef,
    territory => "Ethiopia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ so-KE ]__
  {
    am_pm_abbreviated => [
      "sn.",
      "gn."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "so-KE",
    date_format_full => "EEEE, MMMM dd, y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd-MMM-y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Isn",
      "Tal",
      "Arb",
      "Kha",
      "Jim",
      "Sab",
      "Axd"
    ],
    day_format_narrow => [
      "I",
      "T",
      "A",
      "K",
      "J",
      "S",
      "A"
    ],
    day_format_wide => [
      "Isniin",
      "Talaado",
      "Arbaco",
      "Khamiis",
      "Jimco",
      "Sabti",
      "Axad"
    ],
    day_stand_alone_abbreviated => [
      "Isn",
      "Tal",
      "Arb",
      "Kha",
      "Jim",
      "Sab",
      "Axd"
    ],
    day_stand_alone_narrow => [
      "I",
      "T",
      "A",
      "K",
      "J",
      "S",
      "A"
    ],
    day_stand_alone_wide => [
      "Isniin",
      "Talaado",
      "Arbaco",
      "Khamiis",
      "Jimco",
      "Sabti",
      "Axad"
    ],
    era_abbreviated => [
      "CK",
      "CD"
    ],
    era_narrow => [
      "CK",
      "CD"
    ],
    era_wide => [
      "Ciise ka hor (CS)",
      "Ciise ka dib (CS)"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%A, %B %e, %r %Z %Y",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%A, %B %e, %Y %r %Z",
    glibc_time_12_format => "%X %p",
    glibc_time_format => "%l:%M:%S",
    language => "Somali",
    month_format_abbreviated => [
      "Kob",
      "Lab",
      "Sad",
      "Afr",
      "Sha",
      "Lix",
      "Tod",
      "Sid",
      "Sag",
      "Tob",
      "KIT",
      "LIT"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Bisha Koobaad",
      "Bisha Labaad",
      "Bisha Saddexaad",
      "Bisha Afraad",
      "Bisha Shanaad",
      "Bisha Lixaad",
      "Bisha Todobaad",
      "Bisha Sideedaad",
      "Bisha Sagaalaad",
      "Bisha Tobnaad",
      "Bisha Kow iyo Tobnaad",
      "Bisha Laba iyo Tobnaad"
    ],
    month_stand_alone_abbreviated => [
      "Kob",
      "Lab",
      "Sad",
      "Afr",
      "Sha",
      "Lix",
      "Tod",
      "Sid",
      "Sag",
      "Tob",
      "KIT",
      "LIT"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Bisha Koobaad",
      "Bisha Labaad",
      "Bisha Saddexaad",
      "Bisha Afraad",
      "Bisha Shanaad",
      "Bisha Lixaad",
      "Bisha Todobaad",
      "Bisha Sideedaad",
      "Bisha Sagaalaad",
      "Bisha Tobnaad",
      "Bisha Kow iyo Tobnaad",
      "Bisha Laba iyo Tobnaad"
    ],
    name => "Somali Kenya",
    native_language => "Soomaali",
    native_name => "Soomaali Kiiniya",
    native_script => undef,
    native_territory => "Kiiniya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Rubaca 1aad",
      "Rubaca 2aad",
      "Rubaca 3aad",
      "Rubaca 4aad"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Rubaca 1aad",
      "Rubaca 2aad",
      "Rubaca 3aad",
      "Rubaca 4aad"
    ],
    script => undef,
    territory => "Kenya",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ so-SO ]__
  {
    am_pm_abbreviated => [
      "sn.",
      "gn."
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "so-SO",
    date_format_full => "EEEE, MMMM dd, y",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd-MMM-y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Isn",
      "Tal",
      "Arb",
      "Kha",
      "Jim",
      "Sab",
      "Axd"
    ],
    day_format_narrow => [
      "I",
      "T",
      "A",
      "K",
      "J",
      "S",
      "A"
    ],
    day_format_wide => [
      "Isniin",
      "Talaado",
      "Arbaco",
      "Khamiis",
      "Jimco",
      "Sabti",
      "Axad"
    ],
    day_stand_alone_abbreviated => [
      "Isn",
      "Tal",
      "Arb",
      "Kha",
      "Jim",
      "Sab",
      "Axd"
    ],
    day_stand_alone_narrow => [
      "I",
      "T",
      "A",
      "K",
      "J",
      "S",
      "A"
    ],
    day_stand_alone_wide => [
      "Isniin",
      "Talaado",
      "Arbaco",
      "Khamiis",
      "Jimco",
      "Sabti",
      "Axad"
    ],
    era_abbreviated => [
      "CK",
      "CD"
    ],
    era_narrow => [
      "CK",
      "CD"
    ],
    era_wide => [
      "Ciise ka hor (CS)",
      "Ciise ka dib (CS)"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%A, %B %e, %r %Z %Y",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%A, %B %e, %Y %r %Z",
    glibc_time_12_format => "%X %p",
    glibc_time_format => "%l:%M:%S",
    language => "Somali",
    month_format_abbreviated => [
      "Kob",
      "Lab",
      "Sad",
      "Afr",
      "Sha",
      "Lix",
      "Tod",
      "Sid",
      "Sag",
      "Tob",
      "KIT",
      "LIT"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Bisha Koobaad",
      "Bisha Labaad",
      "Bisha Saddexaad",
      "Bisha Afraad",
      "Bisha Shanaad",
      "Bisha Lixaad",
      "Bisha Todobaad",
      "Bisha Sideedaad",
      "Bisha Sagaalaad",
      "Bisha Tobnaad",
      "Bisha Kow iyo Tobnaad",
      "Bisha Laba iyo Tobnaad"
    ],
    month_stand_alone_abbreviated => [
      "Kob",
      "Lab",
      "Sad",
      "Afr",
      "Sha",
      "Lix",
      "Tod",
      "Sid",
      "Sag",
      "Tob",
      "KIT",
      "LIT"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Bisha Koobaad",
      "Bisha Labaad",
      "Bisha Saddexaad",
      "Bisha Afraad",
      "Bisha Shanaad",
      "Bisha Lixaad",
      "Bisha Todobaad",
      "Bisha Sideedaad",
      "Bisha Sagaalaad",
      "Bisha Tobnaad",
      "Bisha Kow iyo Tobnaad",
      "Bisha Laba iyo Tobnaad"
    ],
    name => "Somali Somalia",
    native_language => "Soomaali",
    native_name => "Soomaali Soomaaliya",
    native_script => undef,
    native_territory => "Soomaaliya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Rubaca 1aad",
      "Rubaca 2aad",
      "Rubaca 3aad",
      "Rubaca 4aad"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Rubaca 1aad",
      "Rubaca 2aad",
      "Rubaca 3aad",
      "Rubaca 4aad"
    ],
    script => undef,
    territory => "Somalia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ sq ]__
  {
    am_pm_abbreviated => [
      "e paradites",
      "e pasdites"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss, v",
      Hmv => "HH:mm, v",
      M => "L",
      MEd => "E, d.M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "d.M",
      Md => "d.M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a, v",
      hmv => "h:mm a, v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ, y",
      yQQQQ => "QQQQ, y"
    },
    code => "sq",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d.M.yy",
    datetime_format_full => "{1} 'n\N{U+00eb}' {0}",
    datetime_format_long => "{1} 'n\N{U+00eb}' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "H\N{U+00eb}n",
      "Mar",
      "M\N{U+00eb}r",
      "Enj",
      "Pre",
      "Sht",
      "Die"
    ],
    day_format_narrow => [
      "H",
      "M",
      "M",
      "E",
      "P",
      "S",
      "D"
    ],
    day_format_wide => [
      "e h\N{U+00eb}n\N{U+00eb}",
      "e mart\N{U+00eb}",
      "e m\N{U+00eb}rkur\N{U+00eb}",
      "e enjte",
      "e premte",
      "e shtun\N{U+00eb}",
      "e diel"
    ],
    day_stand_alone_abbreviated => [
      "H\N{U+00eb}n",
      "Mar",
      "M\N{U+00eb}r",
      "Enj",
      "Pre",
      "Sht",
      "Die"
    ],
    day_stand_alone_narrow => [
      "H",
      "M",
      "M",
      "E",
      "P",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "E h\N{U+00eb}n\N{U+00eb}",
      "E mart\N{U+00eb}",
      "E m\N{U+00eb}rkur\N{U+00eb}",
      "E enjte",
      "E premte",
      "E shtun\N{U+00eb}",
      "E diel"
    ],
    era_abbreviated => [
      "p.e.r.",
      "e.r."
    ],
    era_narrow => [
      "p.e.r.",
      "e.r."
    ],
    era_wide => [
      "para er\N{U+00eb}s s\N{U+00eb} re",
      "er\N{U+00eb}s s\N{U+00eb} re"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Albanian",
    month_format_abbreviated => [
      "Jan",
      "Shk",
      "Mar",
      "Pri",
      "Maj",
      "Qer",
      "Kor",
      "Gsh",
      "Sht",
      "Tet",
      "N\N{U+00eb}n",
      "Dhj"
    ],
    month_format_narrow => [
      "J",
      "S",
      "M",
      "P",
      "M",
      "Q",
      "K",
      "G",
      "S",
      "T",
      "N",
      "D"
    ],
    month_format_wide => [
      "janar",
      "shkurt",
      "mars",
      "prill",
      "maj",
      "qershor",
      "korrik",
      "gusht",
      "shtator",
      "tetor",
      "n\N{U+00eb}ntor",
      "dhjetor"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Shk",
      "Mar",
      "Pri",
      "Maj",
      "Qer",
      "Kor",
      "Gsh",
      "Sht",
      "Tet",
      "N\N{U+00eb}n",
      "Dhj"
    ],
    month_stand_alone_narrow => [
      "J",
      "S",
      "M",
      "P",
      "M",
      "Q",
      "K",
      "G",
      "S",
      "T",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janar",
      "Shkurt",
      "Mars",
      "Prill",
      "Maj",
      "Qershor",
      "Korrik",
      "Gusht",
      "Shtator",
      "Tetor",
      "N\N{U+00eb}ntor",
      "Dhjetor"
    ],
    name => "Albanian",
    native_language => "shqip",
    native_name => "shqip",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "tremujori I",
      "tremujori II",
      "tremujori III",
      "tremujori IV"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "tremujori i par\N{U+00eb}",
      "tremujori i dyt\N{U+00eb}",
      "tremujori i tret\N{U+00eb}",
      "tremujori i kat\N{U+00eb}rt"
    ],
    quarter_stand_alone_abbreviated => [
      "Tremujori I",
      "Tremujori II",
      "Tremujori III",
      "Tremujori IV"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Tremujori i 1-r\N{U+00eb}",
      "Tremujori i 2-t\N{U+00eb}",
      "Tremujori i 3-t\N{U+00eb}",
      "Tremujori i 4-t"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a, zzzz",
    time_format_long => "h:mm:ss a, z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ sq-AL ]__
  {
    am_pm_abbreviated => [
      "e paradites",
      "e pasdites"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss, v",
      Hmv => "HH:mm, v",
      M => "L",
      MEd => "E, d.M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "d.M",
      Md => "d.M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a, v",
      hmv => "h:mm a, v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ, y",
      yQQQQ => "QQQQ, y"
    },
    code => "sq-AL",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d.M.yy",
    datetime_format_full => "{1} 'n\N{U+00eb}' {0}",
    datetime_format_long => "{1} 'n\N{U+00eb}' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "H\N{U+00eb}n",
      "Mar",
      "M\N{U+00eb}r",
      "Enj",
      "Pre",
      "Sht",
      "Die"
    ],
    day_format_narrow => [
      "H",
      "M",
      "M",
      "E",
      "P",
      "S",
      "D"
    ],
    day_format_wide => [
      "e h\N{U+00eb}n\N{U+00eb}",
      "e mart\N{U+00eb}",
      "e m\N{U+00eb}rkur\N{U+00eb}",
      "e enjte",
      "e premte",
      "e shtun\N{U+00eb}",
      "e diel"
    ],
    day_stand_alone_abbreviated => [
      "H\N{U+00eb}n",
      "Mar",
      "M\N{U+00eb}r",
      "Enj",
      "Pre",
      "Sht",
      "Die"
    ],
    day_stand_alone_narrow => [
      "H",
      "M",
      "M",
      "E",
      "P",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "E h\N{U+00eb}n\N{U+00eb}",
      "E mart\N{U+00eb}",
      "E m\N{U+00eb}rkur\N{U+00eb}",
      "E enjte",
      "E premte",
      "E shtun\N{U+00eb}",
      "E diel"
    ],
    era_abbreviated => [
      "p.e.r.",
      "e.r."
    ],
    era_narrow => [
      "p.e.r.",
      "e.r."
    ],
    era_wide => [
      "para er\N{U+00eb}s s\N{U+00eb} re",
      "er\N{U+00eb}s s\N{U+00eb} re"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%Y-%b-%d",
    glibc_datetime_format => "%Y-%b-%d %I.%M.%S.%p %Z",
    glibc_time_12_format => "%I.%M.%S.%p %Z",
    glibc_time_format => "%I.%M.%S. %Z",
    language => "Albanian",
    month_format_abbreviated => [
      "Jan",
      "Shk",
      "Mar",
      "Pri",
      "Maj",
      "Qer",
      "Kor",
      "Gsh",
      "Sht",
      "Tet",
      "N\N{U+00eb}n",
      "Dhj"
    ],
    month_format_narrow => [
      "J",
      "S",
      "M",
      "P",
      "M",
      "Q",
      "K",
      "G",
      "S",
      "T",
      "N",
      "D"
    ],
    month_format_wide => [
      "janar",
      "shkurt",
      "mars",
      "prill",
      "maj",
      "qershor",
      "korrik",
      "gusht",
      "shtator",
      "tetor",
      "n\N{U+00eb}ntor",
      "dhjetor"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Shk",
      "Mar",
      "Pri",
      "Maj",
      "Qer",
      "Kor",
      "Gsh",
      "Sht",
      "Tet",
      "N\N{U+00eb}n",
      "Dhj"
    ],
    month_stand_alone_narrow => [
      "J",
      "S",
      "M",
      "P",
      "M",
      "Q",
      "K",
      "G",
      "S",
      "T",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janar",
      "Shkurt",
      "Mars",
      "Prill",
      "Maj",
      "Qershor",
      "Korrik",
      "Gusht",
      "Shtator",
      "Tetor",
      "N\N{U+00eb}ntor",
      "Dhjetor"
    ],
    name => "Albanian Albania",
    native_language => "shqip",
    native_name => "shqip Shqip\N{U+00eb}ri",
    native_script => undef,
    native_territory => "Shqip\N{U+00eb}ri",
    native_variant => undef,
    quarter_format_abbreviated => [
      "tremujori I",
      "tremujori II",
      "tremujori III",
      "tremujori IV"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "tremujori i par\N{U+00eb}",
      "tremujori i dyt\N{U+00eb}",
      "tremujori i tret\N{U+00eb}",
      "tremujori i kat\N{U+00eb}rt"
    ],
    quarter_stand_alone_abbreviated => [
      "Tremujori I",
      "Tremujori II",
      "Tremujori III",
      "Tremujori IV"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Tremujori i 1-r\N{U+00eb}",
      "Tremujori i 2-t\N{U+00eb}",
      "Tremujori i 3-t\N{U+00eb}",
      "Tremujori i 4-t"
    ],
    script => undef,
    territory => "Albania",
    time_format_full => "h:mm:ss a, zzzz",
    time_format_long => "h:mm:ss a, z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ sq-MK ]__
  {
    am_pm_abbreviated => [
      "e paradites",
      "e pasdites"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss, v",
      Hmv => "HH:mm, v",
      M => "L",
      MEd => "E, d.M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "d.M",
      Md => "d.M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a, v",
      hmv => "h:mm a, v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ, y",
      yQQQQ => "QQQQ, y"
    },
    code => "sq-MK",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d.M.yy",
    datetime_format_full => "{1} 'n\N{U+00eb}' {0}",
    datetime_format_long => "{1} 'n\N{U+00eb}' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "H\N{U+00eb}n",
      "Mar",
      "M\N{U+00eb}r",
      "Enj",
      "Pre",
      "Sht",
      "Die"
    ],
    day_format_narrow => [
      "H",
      "M",
      "M",
      "E",
      "P",
      "S",
      "D"
    ],
    day_format_wide => [
      "e h\N{U+00eb}n\N{U+00eb}",
      "e mart\N{U+00eb}",
      "e m\N{U+00eb}rkur\N{U+00eb}",
      "e enjte",
      "e premte",
      "e shtun\N{U+00eb}",
      "e diel"
    ],
    day_stand_alone_abbreviated => [
      "H\N{U+00eb}n",
      "Mar",
      "M\N{U+00eb}r",
      "Enj",
      "Pre",
      "Sht",
      "Die"
    ],
    day_stand_alone_narrow => [
      "H",
      "M",
      "M",
      "E",
      "P",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "E h\N{U+00eb}n\N{U+00eb}",
      "E mart\N{U+00eb}",
      "E m\N{U+00eb}rkur\N{U+00eb}",
      "E enjte",
      "E premte",
      "E shtun\N{U+00eb}",
      "E diel"
    ],
    era_abbreviated => [
      "p.e.r.",
      "e.r."
    ],
    era_narrow => [
      "p.e.r.",
      "e.r."
    ],
    era_wide => [
      "para er\N{U+00eb}s s\N{U+00eb} re",
      "er\N{U+00eb}s s\N{U+00eb} re"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Albanian",
    month_format_abbreviated => [
      "Jan",
      "Shk",
      "Mar",
      "Pri",
      "Maj",
      "Qer",
      "Kor",
      "Gsh",
      "Sht",
      "Tet",
      "N\N{U+00eb}n",
      "Dhj"
    ],
    month_format_narrow => [
      "J",
      "S",
      "M",
      "P",
      "M",
      "Q",
      "K",
      "G",
      "S",
      "T",
      "N",
      "D"
    ],
    month_format_wide => [
      "janar",
      "shkurt",
      "mars",
      "prill",
      "maj",
      "qershor",
      "korrik",
      "gusht",
      "shtator",
      "tetor",
      "n\N{U+00eb}ntor",
      "dhjetor"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Shk",
      "Mar",
      "Pri",
      "Maj",
      "Qer",
      "Kor",
      "Gsh",
      "Sht",
      "Tet",
      "N\N{U+00eb}n",
      "Dhj"
    ],
    month_stand_alone_narrow => [
      "J",
      "S",
      "M",
      "P",
      "M",
      "Q",
      "K",
      "G",
      "S",
      "T",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janar",
      "Shkurt",
      "Mars",
      "Prill",
      "Maj",
      "Qershor",
      "Korrik",
      "Gusht",
      "Shtator",
      "Tetor",
      "N\N{U+00eb}ntor",
      "Dhjetor"
    ],
    name => "Albanian Macedonia",
    native_language => "shqip",
    native_name => "shqip Maqedoni",
    native_script => undef,
    native_territory => "Maqedoni",
    native_variant => undef,
    quarter_format_abbreviated => [
      "tremujori I",
      "tremujori II",
      "tremujori III",
      "tremujori IV"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "tremujori i par\N{U+00eb}",
      "tremujori i dyt\N{U+00eb}",
      "tremujori i tret\N{U+00eb}",
      "tremujori i kat\N{U+00eb}rt"
    ],
    quarter_stand_alone_abbreviated => [
      "Tremujori I",
      "Tremujori II",
      "Tremujori III",
      "Tremujori IV"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Tremujori i 1-r\N{U+00eb}",
      "Tremujori i 2-t\N{U+00eb}",
      "Tremujori i 3-t\N{U+00eb}",
      "Tremujori i 4-t"
    ],
    script => undef,
    territory => "Macedonia",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sq-XK ]__
  {
    am_pm_abbreviated => [
      "e paradites",
      "e pasdites"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "E, d",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss, v",
      Hmv => "HH:mm, v",
      M => "L",
      MEd => "E, d.M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "d.M",
      Md => "d.M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a, v",
      hmv => "h:mm a, v",
      ms => "mm:ss",
      y => "y",
      yM => "M.y",
      yMEd => "E, d.M.y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d.M.y",
      yQQQ => "QQQ, y",
      yQQQQ => "QQQQ, y"
    },
    code => "sq-XK",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d.M.yy",
    datetime_format_full => "{1} 'n\N{U+00eb}' {0}",
    datetime_format_long => "{1} 'n\N{U+00eb}' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "H\N{U+00eb}n",
      "Mar",
      "M\N{U+00eb}r",
      "Enj",
      "Pre",
      "Sht",
      "Die"
    ],
    day_format_narrow => [
      "H",
      "M",
      "M",
      "E",
      "P",
      "S",
      "D"
    ],
    day_format_wide => [
      "e h\N{U+00eb}n\N{U+00eb}",
      "e mart\N{U+00eb}",
      "e m\N{U+00eb}rkur\N{U+00eb}",
      "e enjte",
      "e premte",
      "e shtun\N{U+00eb}",
      "e diel"
    ],
    day_stand_alone_abbreviated => [
      "H\N{U+00eb}n",
      "Mar",
      "M\N{U+00eb}r",
      "Enj",
      "Pre",
      "Sht",
      "Die"
    ],
    day_stand_alone_narrow => [
      "H",
      "M",
      "M",
      "E",
      "P",
      "S",
      "D"
    ],
    day_stand_alone_wide => [
      "E h\N{U+00eb}n\N{U+00eb}",
      "E mart\N{U+00eb}",
      "E m\N{U+00eb}rkur\N{U+00eb}",
      "E enjte",
      "E premte",
      "E shtun\N{U+00eb}",
      "E diel"
    ],
    era_abbreviated => [
      "p.e.r.",
      "e.r."
    ],
    era_narrow => [
      "p.e.r.",
      "e.r."
    ],
    era_wide => [
      "para er\N{U+00eb}s s\N{U+00eb} re",
      "er\N{U+00eb}s s\N{U+00eb} re"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Albanian",
    month_format_abbreviated => [
      "Jan",
      "Shk",
      "Mar",
      "Pri",
      "Maj",
      "Qer",
      "Kor",
      "Gsh",
      "Sht",
      "Tet",
      "N\N{U+00eb}n",
      "Dhj"
    ],
    month_format_narrow => [
      "J",
      "S",
      "M",
      "P",
      "M",
      "Q",
      "K",
      "G",
      "S",
      "T",
      "N",
      "D"
    ],
    month_format_wide => [
      "janar",
      "shkurt",
      "mars",
      "prill",
      "maj",
      "qershor",
      "korrik",
      "gusht",
      "shtator",
      "tetor",
      "n\N{U+00eb}ntor",
      "dhjetor"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Shk",
      "Mar",
      "Pri",
      "Maj",
      "Qer",
      "Kor",
      "Gsh",
      "Sht",
      "Tet",
      "N\N{U+00eb}n",
      "Dhj"
    ],
    month_stand_alone_narrow => [
      "J",
      "S",
      "M",
      "P",
      "M",
      "Q",
      "K",
      "G",
      "S",
      "T",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janar",
      "Shkurt",
      "Mars",
      "Prill",
      "Maj",
      "Qershor",
      "Korrik",
      "Gusht",
      "Shtator",
      "Tetor",
      "N\N{U+00eb}ntor",
      "Dhjetor"
    ],
    name => "Albanian Kosovo",
    native_language => "shqip",
    native_name => "shqip Kosov\N{U+00eb}",
    native_script => undef,
    native_territory => "Kosov\N{U+00eb}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "tremujori I",
      "tremujori II",
      "tremujori III",
      "tremujori IV"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "tremujori i par\N{U+00eb}",
      "tremujori i dyt\N{U+00eb}",
      "tremujori i tret\N{U+00eb}",
      "tremujori i kat\N{U+00eb}rt"
    ],
    quarter_stand_alone_abbreviated => [
      "Tremujori I",
      "Tremujori II",
      "Tremujori III",
      "Tremujori IV"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Tremujori i 1-r\N{U+00eb}",
      "Tremujori i 2-t\N{U+00eb}",
      "Tremujori i 3-t\N{U+00eb}",
      "Tremujori i 4-t"
    ],
    script => undef,
    territory => "Kosovo",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sr ]__
  {
    am_pm_abbreviated => [
      "\N{U+043f}\N{U+0440}\N{U+0435} \N{U+043f}\N{U+043e}\N{U+0434}\N{U+043d}\N{U+0435}",
      "\N{U+043f}\N{U+043e} \N{U+043f}\N{U+043e}\N{U+0434}\N{U+043d}\N{U+0435}"
    ],
    available_formats => {
      E => "E",
      EHm => "E, HH.mm",
      EHms => "E, HH.mm.ss",
      Ed => "E d.",
      Ehm => "E, h.mm a",
      Ehms => "E, h.mm.ss a",
      Gy => "y. G",
      GyMMM => "MMM y. G",
      GyMMMEd => "E, d. MMM y. G",
      GyMMMd => "d. MMM y. G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMMdd => "dd.MMM",
      MMdd => "MM-dd",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "hh.mm a",
      hms => "hh.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y.",
      yM => "M.y.",
      yMEd => "E, d.M.y.",
      yMM => "MM.y.",
      yMMM => "MMM y.",
      yMMMEd => "E, d. MMM y.",
      yMMMM => "MMMM y.",
      yMMMd => "d. MMM y.",
      yMMdd => "dd.MM.y.",
      yMd => "d.M.y.",
      yQQQ => "QQQ. y",
      yQQQQ => "QQQQ. y"
    },
    code => "sr",
    date_format_full => "EEEE, dd. MMMM y.",
    date_format_long => "dd. MMMM y.",
    date_format_medium => "dd.MM.y.",
    date_format_short => "d.M.yy.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}",
      "\N{U+0443}\N{U+0442}\N{U+043e}",
      "\N{U+0441}\N{U+0440}\N{U+0435}",
      "\N{U+0447}\N{U+0435}\N{U+0442}",
      "\N{U+043f}\N{U+0435}\N{U+0442}",
      "\N{U+0441}\N{U+0443}\N{U+0431}",
      "\N{U+043d}\N{U+0435}\N{U+0434}"
    ],
    day_format_narrow => [
      "\N{U+043f}",
      "\N{U+0443}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}\N{U+043a}",
      "\N{U+0443}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}",
      "\N{U+0443}\N{U+0442}\N{U+043e}",
      "\N{U+0441}\N{U+0440}\N{U+0435}",
      "\N{U+0447}\N{U+0435}\N{U+0442}",
      "\N{U+043f}\N{U+0435}\N{U+0442}",
      "\N{U+0441}\N{U+0443}\N{U+0431}",
      "\N{U+043d}\N{U+0435}\N{U+0434}"
    ],
    day_stand_alone_narrow => [
      "\N{U+043f}",
      "\N{U+0443}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}\N{U+043a}",
      "\N{U+0443}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}"
    ],
    era_abbreviated => [
      "\N{U+043f}. \N{U+043d}. \N{U+0435}.",
      "\N{U+043d}. \N{U+0435}."
    ],
    era_narrow => [
      "\N{U+043f}.\N{U+043d}.\N{U+0435}.",
      "\N{U+043d}.\N{U+0435}."
    ],
    era_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0435} \N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435} \N{U+0435}\N{U+0440}\N{U+0435}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435} \N{U+0435}\N{U+0440}\N{U+0435}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Serbian",
    month_format_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}",
      "\N{U+0444}\N{U+0435}\N{U+0431}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0432}",
      "\N{U+0434}\N{U+0435}\N{U+0446}"
    ],
    month_format_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_format_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0431}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+0446}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}",
      "\N{U+0444}\N{U+0435}\N{U+0431}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0432}",
      "\N{U+0434}\N{U+0435}\N{U+0446}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_stand_alone_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0431}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+0446}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}"
    ],
    name => "Serbian",
    native_language => "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_name => "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+041a}1",
      "\N{U+041a}2",
      "\N{U+041a}3",
      "\N{U+041a}4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0432}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0434}\N{U+0440}\N{U+0443}\N{U+0433}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0442}\N{U+0440}\N{U+0435}\N{U+045b}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+041a}1",
      "\N{U+041a}2",
      "\N{U+041a}3",
      "\N{U+041a}4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0432}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0434}\N{U+0440}\N{U+0443}\N{U+0433}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0442}\N{U+0440}\N{U+0435}\N{U+045b}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ sr-Cyrl ]__
  {
    am_pm_abbreviated => [
      "\N{U+043f}\N{U+0440}\N{U+0435} \N{U+043f}\N{U+043e}\N{U+0434}\N{U+043d}\N{U+0435}",
      "\N{U+043f}\N{U+043e} \N{U+043f}\N{U+043e}\N{U+0434}\N{U+043d}\N{U+0435}"
    ],
    available_formats => {
      E => "E",
      EHm => "E, HH.mm",
      EHms => "E, HH.mm.ss",
      Ed => "E d.",
      Ehm => "E, h.mm a",
      Ehms => "E, h.mm.ss a",
      Gy => "y. G",
      GyMMM => "MMM y. G",
      GyMMMEd => "E, d. MMM y. G",
      GyMMMd => "d. MMM y. G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMMdd => "dd.MMM",
      MMdd => "MM-dd",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "hh.mm a",
      hms => "hh.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y.",
      yM => "M.y.",
      yMEd => "E, d.M.y.",
      yMM => "MM.y.",
      yMMM => "MMM y.",
      yMMMEd => "E, d. MMM y.",
      yMMMM => "MMMM y.",
      yMMMd => "d. MMM y.",
      yMMdd => "dd.MM.y.",
      yMd => "d.M.y.",
      yQQQ => "QQQ. y",
      yQQQQ => "QQQQ. y"
    },
    code => "sr-Cyrl",
    date_format_full => "EEEE, dd. MMMM y.",
    date_format_long => "dd. MMMM y.",
    date_format_medium => "dd.MM.y.",
    date_format_short => "d.M.yy.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}",
      "\N{U+0443}\N{U+0442}\N{U+043e}",
      "\N{U+0441}\N{U+0440}\N{U+0435}",
      "\N{U+0447}\N{U+0435}\N{U+0442}",
      "\N{U+043f}\N{U+0435}\N{U+0442}",
      "\N{U+0441}\N{U+0443}\N{U+0431}",
      "\N{U+043d}\N{U+0435}\N{U+0434}"
    ],
    day_format_narrow => [
      "\N{U+043f}",
      "\N{U+0443}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}\N{U+043a}",
      "\N{U+0443}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}",
      "\N{U+0443}\N{U+0442}\N{U+043e}",
      "\N{U+0441}\N{U+0440}\N{U+0435}",
      "\N{U+0447}\N{U+0435}\N{U+0442}",
      "\N{U+043f}\N{U+0435}\N{U+0442}",
      "\N{U+0441}\N{U+0443}\N{U+0431}",
      "\N{U+043d}\N{U+0435}\N{U+0434}"
    ],
    day_stand_alone_narrow => [
      "\N{U+043f}",
      "\N{U+0443}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}\N{U+043a}",
      "\N{U+0443}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}"
    ],
    era_abbreviated => [
      "\N{U+043f}. \N{U+043d}. \N{U+0435}.",
      "\N{U+043d}. \N{U+0435}."
    ],
    era_narrow => [
      "\N{U+043f}.\N{U+043d}.\N{U+0435}.",
      "\N{U+043d}.\N{U+0435}."
    ],
    era_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0435} \N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435} \N{U+0435}\N{U+0440}\N{U+0435}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435} \N{U+0435}\N{U+0440}\N{U+0435}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Serbian",
    month_format_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}",
      "\N{U+0444}\N{U+0435}\N{U+0431}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0432}",
      "\N{U+0434}\N{U+0435}\N{U+0446}"
    ],
    month_format_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_format_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0431}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+0446}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}",
      "\N{U+0444}\N{U+0435}\N{U+0431}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0432}",
      "\N{U+0434}\N{U+0435}\N{U+0446}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_stand_alone_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0431}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+0446}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}"
    ],
    name => "Serbian",
    native_language => "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_name => "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+041a}1",
      "\N{U+041a}2",
      "\N{U+041a}3",
      "\N{U+041a}4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0432}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0434}\N{U+0440}\N{U+0443}\N{U+0433}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0442}\N{U+0440}\N{U+0435}\N{U+045b}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+041a}1",
      "\N{U+041a}2",
      "\N{U+041a}3",
      "\N{U+041a}4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0432}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0434}\N{U+0440}\N{U+0443}\N{U+0433}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0442}\N{U+0440}\N{U+0435}\N{U+045b}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ sr-Cyrl-BA ]__
  {
    am_pm_abbreviated => [
      "\N{U+043f}\N{U+0440}\N{U+0435} \N{U+043f}\N{U+043e}\N{U+0434}\N{U+043d}\N{U+0435}",
      "\N{U+043f}\N{U+043e} \N{U+043f}\N{U+043e}\N{U+0434}\N{U+043d}\N{U+0435}"
    ],
    available_formats => {
      E => "E",
      EHm => "E, HH.mm",
      EHms => "E, HH.mm.ss",
      Ed => "E d.",
      Ehm => "E, h.mm a",
      Ehms => "E, h.mm.ss a",
      Gy => "y. G",
      GyMMM => "MMM y. G",
      GyMMMEd => "E, d. MMM y. G",
      GyMMMd => "d. MMM y. G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMMdd => "dd.MMM",
      MMdd => "MM-dd",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "hh.mm a",
      hms => "hh.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y.",
      yM => "M.y.",
      yMEd => "E, d.M.y.",
      yMM => "MM.y.",
      yMMM => "MMM y.",
      yMMMEd => "E, d. MMM y.",
      yMMMM => "MMMM y.",
      yMMMd => "d. MMM y.",
      yMMdd => "dd.MM.y.",
      yMd => "d.M.y.",
      yQQQ => "QQQ. y",
      yQQQQ => "QQQQ. y"
    },
    code => "sr-Cyrl-BA",
    date_format_full => "EEEE, dd. MMMM y.",
    date_format_long => "dd. MMMM y.",
    date_format_medium => "dd.MM.y.",
    date_format_short => "d.M.yy.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}",
      "\N{U+0443}\N{U+0442}\N{U+043e}",
      "\N{U+0441}\N{U+0440}\N{U+0435}",
      "\N{U+0447}\N{U+0435}\N{U+0442}",
      "\N{U+043f}\N{U+0435}\N{U+0442}",
      "\N{U+0441}\N{U+0443}\N{U+0431}",
      "\N{U+043d}\N{U+0435}\N{U+0434}"
    ],
    day_format_narrow => [
      "\N{U+043f}",
      "\N{U+0443}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}\N{U+043a}",
      "\N{U+0443}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}",
      "\N{U+0443}\N{U+0442}\N{U+043e}",
      "\N{U+0441}\N{U+0440}\N{U+0435}",
      "\N{U+0447}\N{U+0435}\N{U+0442}",
      "\N{U+043f}\N{U+0435}\N{U+0442}",
      "\N{U+0441}\N{U+0443}\N{U+0431}",
      "\N{U+043d}\N{U+0435}\N{U+0434}"
    ],
    day_stand_alone_narrow => [
      "\N{U+043f}",
      "\N{U+0443}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}\N{U+043a}",
      "\N{U+0443}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}"
    ],
    era_abbreviated => [
      "\N{U+043f}. \N{U+043d}. \N{U+0435}.",
      "\N{U+043d}. \N{U+0435}."
    ],
    era_narrow => [
      "\N{U+043f}.\N{U+043d}.\N{U+0435}.",
      "\N{U+043d}.\N{U+0435}."
    ],
    era_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0435} \N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435} \N{U+0435}\N{U+0440}\N{U+0435}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435} \N{U+0435}\N{U+0440}\N{U+0435}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Serbian",
    month_format_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}",
      "\N{U+0444}\N{U+0435}\N{U+0431}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0432}",
      "\N{U+0434}\N{U+0435}\N{U+0446}"
    ],
    month_format_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_format_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0431}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+0446}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}",
      "\N{U+0444}\N{U+0435}\N{U+0431}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0432}",
      "\N{U+0434}\N{U+0435}\N{U+0446}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_stand_alone_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0431}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+0446}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}"
    ],
    name => "Serbian Bosnia & Herzegovina Cyrillic",
    native_language => "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_name => "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438} \N{U+0411}\N{U+043e}\N{U+0441}\N{U+043d}\N{U+0430} \N{U+0438} \N{U+0425}\N{U+0435}\N{U+0440}\N{U+0446}\N{U+0435}\N{U+0433}\N{U+043e}\N{U+0432}\N{U+0438}\N{U+043d}\N{U+0430} \N{U+045b}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}\N{U+0438}\N{U+0446}\N{U+0430}",
    native_script => "\N{U+045b}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}\N{U+0438}\N{U+0446}\N{U+0430}",
    native_territory => "\N{U+0411}\N{U+043e}\N{U+0441}\N{U+043d}\N{U+0430} \N{U+0438} \N{U+0425}\N{U+0435}\N{U+0440}\N{U+0446}\N{U+0435}\N{U+0433}\N{U+043e}\N{U+0432}\N{U+0438}\N{U+043d}\N{U+0430}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+041a}1",
      "\N{U+041a}2",
      "\N{U+041a}3",
      "\N{U+041a}4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0432}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0434}\N{U+0440}\N{U+0443}\N{U+0433}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0442}\N{U+0440}\N{U+0435}\N{U+045b}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+041a}1",
      "\N{U+041a}2",
      "\N{U+041a}3",
      "\N{U+041a}4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0432}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0434}\N{U+0440}\N{U+0443}\N{U+0433}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0442}\N{U+0440}\N{U+0435}\N{U+045b}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => "Cyrillic",
    territory => "Bosnia & Herzegovina",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sr-Cyrl-ME ]__
  {
    am_pm_abbreviated => [
      "\N{U+043f}\N{U+0440}\N{U+0435} \N{U+043f}\N{U+043e}\N{U+0434}\N{U+043d}\N{U+0435}",
      "\N{U+043f}\N{U+043e} \N{U+043f}\N{U+043e}\N{U+0434}\N{U+043d}\N{U+0435}"
    ],
    available_formats => {
      E => "E",
      EHm => "E, HH.mm",
      EHms => "E, HH.mm.ss",
      Ed => "E d.",
      Ehm => "E, h.mm a",
      Ehms => "E, h.mm.ss a",
      Gy => "y. G",
      GyMMM => "MMM y. G",
      GyMMMEd => "E, d. MMM y. G",
      GyMMMd => "d. MMM y. G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMMdd => "dd.MMM",
      MMdd => "MM-dd",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "hh.mm a",
      hms => "hh.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y.",
      yM => "M.y.",
      yMEd => "E, d.M.y.",
      yMM => "MM.y.",
      yMMM => "MMM y.",
      yMMMEd => "E, d. MMM y.",
      yMMMM => "MMMM y.",
      yMMMd => "d. MMM y.",
      yMMdd => "dd.MM.y.",
      yMd => "d.M.y.",
      yQQQ => "QQQ. y",
      yQQQQ => "QQQQ. y"
    },
    code => "sr-Cyrl-ME",
    date_format_full => "EEEE, dd. MMMM y.",
    date_format_long => "dd. MMMM y.",
    date_format_medium => "dd.MM.y.",
    date_format_short => "d.M.yy.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}",
      "\N{U+0443}\N{U+0442}\N{U+043e}",
      "\N{U+0441}\N{U+0440}\N{U+0435}",
      "\N{U+0447}\N{U+0435}\N{U+0442}",
      "\N{U+043f}\N{U+0435}\N{U+0442}",
      "\N{U+0441}\N{U+0443}\N{U+0431}",
      "\N{U+043d}\N{U+0435}\N{U+0434}"
    ],
    day_format_narrow => [
      "\N{U+043f}",
      "\N{U+0443}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}\N{U+043a}",
      "\N{U+0443}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}",
      "\N{U+0443}\N{U+0442}\N{U+043e}",
      "\N{U+0441}\N{U+0440}\N{U+0435}",
      "\N{U+0447}\N{U+0435}\N{U+0442}",
      "\N{U+043f}\N{U+0435}\N{U+0442}",
      "\N{U+0441}\N{U+0443}\N{U+0431}",
      "\N{U+043d}\N{U+0435}\N{U+0434}"
    ],
    day_stand_alone_narrow => [
      "\N{U+043f}",
      "\N{U+0443}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}\N{U+043a}",
      "\N{U+0443}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}"
    ],
    era_abbreviated => [
      "\N{U+043f}. \N{U+043d}. \N{U+0435}.",
      "\N{U+043d}. \N{U+0435}."
    ],
    era_narrow => [
      "\N{U+043f}.\N{U+043d}.\N{U+0435}.",
      "\N{U+043d}.\N{U+0435}."
    ],
    era_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0435} \N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435} \N{U+0435}\N{U+0440}\N{U+0435}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435} \N{U+0435}\N{U+0440}\N{U+0435}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Serbian",
    month_format_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}",
      "\N{U+0444}\N{U+0435}\N{U+0431}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0432}",
      "\N{U+0434}\N{U+0435}\N{U+0446}"
    ],
    month_format_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_format_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0431}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+0446}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}",
      "\N{U+0444}\N{U+0435}\N{U+0431}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0432}",
      "\N{U+0434}\N{U+0435}\N{U+0446}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_stand_alone_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0431}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+0446}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}"
    ],
    name => "Serbian Montenegro Cyrillic",
    native_language => "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_name => "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438} \N{U+0426}\N{U+0440}\N{U+043d}\N{U+0430} \N{U+0413}\N{U+043e}\N{U+0440}\N{U+0430} \N{U+045b}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}\N{U+0438}\N{U+0446}\N{U+0430}",
    native_script => "\N{U+045b}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}\N{U+0438}\N{U+0446}\N{U+0430}",
    native_territory => "\N{U+0426}\N{U+0440}\N{U+043d}\N{U+0430} \N{U+0413}\N{U+043e}\N{U+0440}\N{U+0430}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+041a}1",
      "\N{U+041a}2",
      "\N{U+041a}3",
      "\N{U+041a}4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0432}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0434}\N{U+0440}\N{U+0443}\N{U+0433}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0442}\N{U+0440}\N{U+0435}\N{U+045b}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+041a}1",
      "\N{U+041a}2",
      "\N{U+041a}3",
      "\N{U+041a}4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0432}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0434}\N{U+0440}\N{U+0443}\N{U+0433}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0442}\N{U+0440}\N{U+0435}\N{U+045b}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => "Cyrillic",
    territory => "Montenegro",
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ sr-Cyrl-RS ]__
  {
    am_pm_abbreviated => [
      "\N{U+043f}\N{U+0440}\N{U+0435} \N{U+043f}\N{U+043e}\N{U+0434}\N{U+043d}\N{U+0435}",
      "\N{U+043f}\N{U+043e} \N{U+043f}\N{U+043e}\N{U+0434}\N{U+043d}\N{U+0435}"
    ],
    available_formats => {
      E => "E",
      EHm => "E, HH.mm",
      EHms => "E, HH.mm.ss",
      Ed => "E d.",
      Ehm => "E, h.mm a",
      Ehms => "E, h.mm.ss a",
      Gy => "y. G",
      GyMMM => "MMM y. G",
      GyMMMEd => "E, d. MMM y. G",
      GyMMMd => "d. MMM y. G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMMdd => "dd.MMM",
      MMdd => "MM-dd",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "hh.mm a",
      hms => "hh.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y.",
      yM => "M.y.",
      yMEd => "E, d.M.y.",
      yMM => "MM.y.",
      yMMM => "MMM y.",
      yMMMEd => "E, d. MMM y.",
      yMMMM => "MMMM y.",
      yMMMd => "d. MMM y.",
      yMMdd => "dd.MM.y.",
      yMd => "d.M.y.",
      yQQQ => "QQQ. y",
      yQQQQ => "QQQQ. y"
    },
    code => "sr-Cyrl-RS",
    date_format_full => "EEEE, dd. MMMM y.",
    date_format_long => "dd. MMMM y.",
    date_format_medium => "dd.MM.y.",
    date_format_short => "d.M.yy.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}",
      "\N{U+0443}\N{U+0442}\N{U+043e}",
      "\N{U+0441}\N{U+0440}\N{U+0435}",
      "\N{U+0447}\N{U+0435}\N{U+0442}",
      "\N{U+043f}\N{U+0435}\N{U+0442}",
      "\N{U+0441}\N{U+0443}\N{U+0431}",
      "\N{U+043d}\N{U+0435}\N{U+0434}"
    ],
    day_format_narrow => [
      "\N{U+043f}",
      "\N{U+0443}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}\N{U+043a}",
      "\N{U+0443}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}",
      "\N{U+0443}\N{U+0442}\N{U+043e}",
      "\N{U+0441}\N{U+0440}\N{U+0435}",
      "\N{U+0447}\N{U+0435}\N{U+0442}",
      "\N{U+043f}\N{U+0435}\N{U+0442}",
      "\N{U+0441}\N{U+0443}\N{U+0431}",
      "\N{U+043d}\N{U+0435}\N{U+0434}"
    ],
    day_stand_alone_narrow => [
      "\N{U+043f}",
      "\N{U+0443}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}\N{U+043a}",
      "\N{U+0443}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}"
    ],
    era_abbreviated => [
      "\N{U+043f}. \N{U+043d}. \N{U+0435}.",
      "\N{U+043d}. \N{U+0435}."
    ],
    era_narrow => [
      "\N{U+043f}.\N{U+043d}.\N{U+0435}.",
      "\N{U+043d}.\N{U+0435}."
    ],
    era_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0435} \N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435} \N{U+0435}\N{U+0440}\N{U+0435}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435} \N{U+0435}\N{U+0440}\N{U+0435}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Serbian",
    month_format_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}",
      "\N{U+0444}\N{U+0435}\N{U+0431}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0432}",
      "\N{U+0434}\N{U+0435}\N{U+0446}"
    ],
    month_format_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_format_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0431}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+0446}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}",
      "\N{U+0444}\N{U+0435}\N{U+0431}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0432}",
      "\N{U+0434}\N{U+0435}\N{U+0446}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_stand_alone_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0431}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+0446}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}"
    ],
    name => "Serbian Serbia Cyrillic",
    native_language => "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_name => "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438} \N{U+0421}\N{U+0440}\N{U+0431}\N{U+0438}\N{U+0458}\N{U+0430} \N{U+045b}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}\N{U+0438}\N{U+0446}\N{U+0430}",
    native_script => "\N{U+045b}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}\N{U+0438}\N{U+0446}\N{U+0430}",
    native_territory => "\N{U+0421}\N{U+0440}\N{U+0431}\N{U+0438}\N{U+0458}\N{U+0430}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+041a}1",
      "\N{U+041a}2",
      "\N{U+041a}3",
      "\N{U+041a}4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0432}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0434}\N{U+0440}\N{U+0443}\N{U+0433}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0442}\N{U+0440}\N{U+0435}\N{U+045b}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+041a}1",
      "\N{U+041a}2",
      "\N{U+041a}3",
      "\N{U+041a}4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0432}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0434}\N{U+0440}\N{U+0443}\N{U+0433}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0442}\N{U+0440}\N{U+0435}\N{U+045b}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => "Cyrillic",
    territory => "Serbia",
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ sr-Cyrl-XK ]__
  {
    am_pm_abbreviated => [
      "\N{U+043f}\N{U+0440}\N{U+0435} \N{U+043f}\N{U+043e}\N{U+0434}\N{U+043d}\N{U+0435}",
      "\N{U+043f}\N{U+043e} \N{U+043f}\N{U+043e}\N{U+0434}\N{U+043d}\N{U+0435}"
    ],
    available_formats => {
      E => "E",
      EHm => "E, HH.mm",
      EHms => "E, HH.mm.ss",
      Ed => "E d.",
      Ehm => "E, h.mm a",
      Ehms => "E, h.mm.ss a",
      Gy => "y. G",
      GyMMM => "MMM y. G",
      GyMMMEd => "E, d. MMM y. G",
      GyMMMd => "d. MMM y. G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMMdd => "dd.MMM",
      MMdd => "MM-dd",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "hh.mm a",
      hms => "hh.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y.",
      yM => "M.y.",
      yMEd => "E, d.M.y.",
      yMM => "MM.y.",
      yMMM => "MMM y.",
      yMMMEd => "E, d. MMM y.",
      yMMMM => "MMMM y.",
      yMMMd => "d. MMM y.",
      yMMdd => "dd.MM.y.",
      yMd => "d.M.y.",
      yQQQ => "QQQ. y",
      yQQQQ => "QQQQ. y"
    },
    code => "sr-Cyrl-XK",
    date_format_full => "EEEE, dd. MMMM y.",
    date_format_long => "dd. MMMM y.",
    date_format_medium => "dd.MM.y.",
    date_format_short => "d.M.yy.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}",
      "\N{U+0443}\N{U+0442}\N{U+043e}",
      "\N{U+0441}\N{U+0440}\N{U+0435}",
      "\N{U+0447}\N{U+0435}\N{U+0442}",
      "\N{U+043f}\N{U+0435}\N{U+0442}",
      "\N{U+0441}\N{U+0443}\N{U+0431}",
      "\N{U+043d}\N{U+0435}\N{U+0434}"
    ],
    day_format_narrow => [
      "\N{U+043f}",
      "\N{U+0443}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}\N{U+043a}",
      "\N{U+0443}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+043f}\N{U+043e}\N{U+043d}",
      "\N{U+0443}\N{U+0442}\N{U+043e}",
      "\N{U+0441}\N{U+0440}\N{U+0435}",
      "\N{U+0447}\N{U+0435}\N{U+0442}",
      "\N{U+043f}\N{U+0435}\N{U+0442}",
      "\N{U+0441}\N{U+0443}\N{U+0431}",
      "\N{U+043d}\N{U+0435}\N{U+0434}"
    ],
    day_stand_alone_narrow => [
      "\N{U+043f}",
      "\N{U+0443}",
      "\N{U+0441}",
      "\N{U+0447}",
      "\N{U+043f}",
      "\N{U+0441}",
      "\N{U+043d}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}\N{U+043a}",
      "\N{U+0443}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+043f}\N{U+0435}\N{U+0442}\N{U+0430}\N{U+043a}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0435}\N{U+0459}\N{U+0430}"
    ],
    era_abbreviated => [
      "\N{U+043f}. \N{U+043d}. \N{U+0435}.",
      "\N{U+043d}. \N{U+0435}."
    ],
    era_narrow => [
      "\N{U+043f}.\N{U+043d}.\N{U+0435}.",
      "\N{U+043d}.\N{U+0435}."
    ],
    era_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0435} \N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435} \N{U+0435}\N{U+0440}\N{U+0435}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435} \N{U+0435}\N{U+0440}\N{U+0435}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Serbian",
    month_format_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}",
      "\N{U+0444}\N{U+0435}\N{U+0431}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0432}",
      "\N{U+0434}\N{U+0435}\N{U+0446}"
    ],
    month_format_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_format_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0431}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+0446}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0458}\N{U+0430}\N{U+043d}",
      "\N{U+0444}\N{U+0435}\N{U+0431}",
      "\N{U+043c}\N{U+0430}\N{U+0440}",
      "\N{U+0430}\N{U+043f}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}",
      "\N{U+0441}\N{U+0435}\N{U+043f}",
      "\N{U+043e}\N{U+043a}\N{U+0442}",
      "\N{U+043d}\N{U+043e}\N{U+0432}",
      "\N{U+0434}\N{U+0435}\N{U+0446}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0458}",
      "\N{U+0444}",
      "\N{U+043c}",
      "\N{U+0430}",
      "\N{U+043c}",
      "\N{U+0458}",
      "\N{U+0458}",
      "\N{U+0430}",
      "\N{U+0441}",
      "\N{U+043e}",
      "\N{U+043d}",
      "\N{U+0434}"
    ],
    month_stand_alone_wide => [
      "\N{U+0458}\N{U+0430}\N{U+043d}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+0444}\N{U+0435}\N{U+0431}\N{U+0440}\N{U+0443}\N{U+0430}\N{U+0440}",
      "\N{U+043c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0430}\N{U+043f}\N{U+0440}\N{U+0438}\N{U+043b}",
      "\N{U+043c}\N{U+0430}\N{U+0458}",
      "\N{U+0458}\N{U+0443}\N{U+043d}",
      "\N{U+0458}\N{U+0443}\N{U+043b}",
      "\N{U+0430}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0441}\N{U+0435}\N{U+043f}\N{U+0442}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043e}\N{U+043a}\N{U+0442}\N{U+043e}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+043d}\N{U+043e}\N{U+0432}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}",
      "\N{U+0434}\N{U+0435}\N{U+0446}\N{U+0435}\N{U+043c}\N{U+0431}\N{U+0430}\N{U+0440}"
    ],
    name => "Serbian Kosovo Cyrillic",
    native_language => "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438}",
    native_name => "\N{U+0441}\N{U+0440}\N{U+043f}\N{U+0441}\N{U+043a}\N{U+0438} \N{U+041a}\N{U+043e}\N{U+0441}\N{U+043e}\N{U+0432}\N{U+043e} \N{U+045b}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}\N{U+0438}\N{U+0446}\N{U+0430}",
    native_script => "\N{U+045b}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}\N{U+0438}\N{U+0446}\N{U+0430}",
    native_territory => "\N{U+041a}\N{U+043e}\N{U+0441}\N{U+043e}\N{U+0432}\N{U+043e}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+041a}1",
      "\N{U+041a}2",
      "\N{U+041a}3",
      "\N{U+041a}4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0432}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0434}\N{U+0440}\N{U+0443}\N{U+0433}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0442}\N{U+0440}\N{U+0435}\N{U+045b}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+041a}1",
      "\N{U+041a}2",
      "\N{U+041a}3",
      "\N{U+041a}4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "\N{U+043f}\N{U+0440}\N{U+0432}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0434}\N{U+0440}\N{U+0443}\N{U+0433}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0442}\N{U+0440}\N{U+0435}\N{U+045b}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0440}\N{U+0442}\N{U+0438} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => "Cyrillic",
    territory => "Kosovo",
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ sr-Latn ]__
  {
    am_pm_abbreviated => [
      "pre podne",
      "po podne"
    ],
    available_formats => {
      E => "E",
      EHm => "E, HH.mm",
      EHms => "E, HH.mm.ss",
      Ed => "E d.",
      Ehm => "E, h.mm a",
      Ehms => "E, h.mm.ss a",
      Gy => "y. G",
      GyMMM => "MMM y. G",
      GyMMMEd => "E, d. MMM y. G",
      GyMMMd => "d. MMM y. G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMMdd => "dd.MMM",
      MMdd => "MM-dd",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "hh.mm a",
      hms => "hh.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y.",
      yM => "M.y.",
      yMEd => "E, d.M.y.",
      yMM => "MM.y.",
      yMMM => "MMM y.",
      yMMMEd => "E, d. MMM y.",
      yMMMM => "MMMM y.",
      yMMMd => "d. MMM y.",
      yMMdd => "dd.MM.y.",
      yMd => "d.M.y.",
      yQQQ => "QQQ. y",
      yQQQQ => "QQQQ. y"
    },
    code => "sr-Latn",
    date_format_full => "EEEE, dd. MMMM y.",
    date_format_long => "dd. MMMM y.",
    date_format_medium => "dd.MM.y.",
    date_format_short => "d.M.yy.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "pon",
      "uto",
      "sre",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_format_narrow => [
      "p",
      "u",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_format_wide => [
      "ponedeljak",
      "utorak",
      "sreda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedelja"
    ],
    day_stand_alone_abbreviated => [
      "pon",
      "uto",
      "sre",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_stand_alone_narrow => [
      "p",
      "u",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "ponedeljak",
      "utorak",
      "sreda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedelja"
    ],
    era_abbreviated => [
      "p. n. e.",
      "n. e."
    ],
    era_narrow => [
      "p.n.e.",
      "n.e."
    ],
    era_wide => [
      "pre nove ere",
      "nove ere"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Serbian",
    month_format_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "avg",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_format_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "mart",
      "april",
      "maj",
      "jun",
      "jul",
      "avgust",
      "septembar",
      "oktobar",
      "novembar",
      "decembar"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "avg",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "mart",
      "april",
      "maj",
      "jun",
      "jul",
      "avgust",
      "septembar",
      "oktobar",
      "novembar",
      "decembar"
    ],
    name => "Serbian",
    native_language => "srpski",
    native_name => "srpski",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "prvi kvartal",
      "drugi kvartal",
      "tre\N{U+0107}i kvartal",
      "\N{U+010d}etvrti kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "prvi kvartal",
      "drugi kvartal",
      "tre\N{U+0107}i kvartal",
      "\N{U+010d}etvrti kvartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ sr-Latn-BA ]__
  {
    am_pm_abbreviated => [
      "pre podne",
      "po podne"
    ],
    available_formats => {
      E => "E",
      EHm => "E, HH.mm",
      EHms => "E, HH.mm.ss",
      Ed => "E d.",
      Ehm => "E, h.mm a",
      Ehms => "E, h.mm.ss a",
      Gy => "y. G",
      GyMMM => "MMM y. G",
      GyMMMEd => "E, d. MMM y. G",
      GyMMMd => "d. MMM y. G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMMdd => "dd.MMM",
      MMdd => "MM-dd",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "hh.mm a",
      hms => "hh.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y.",
      yM => "M.y.",
      yMEd => "E, d.M.y.",
      yMM => "MM.y.",
      yMMM => "MMM y.",
      yMMMEd => "E, d. MMM y.",
      yMMMM => "MMMM y.",
      yMMMd => "d. MMM y.",
      yMMdd => "dd.MM.y.",
      yMd => "d.M.y.",
      yQQQ => "QQQ. y",
      yQQQQ => "QQQQ. y"
    },
    code => "sr-Latn-BA",
    date_format_full => "EEEE, dd. MMMM y.",
    date_format_long => "dd. MMMM y.",
    date_format_medium => "dd.MM.y.",
    date_format_short => "d.M.yy.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "pon",
      "uto",
      "sre",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_format_narrow => [
      "p",
      "u",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_format_wide => [
      "ponedeljak",
      "utorak",
      "sreda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedelja"
    ],
    day_stand_alone_abbreviated => [
      "pon",
      "uto",
      "sre",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_stand_alone_narrow => [
      "p",
      "u",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "ponedeljak",
      "utorak",
      "sreda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedelja"
    ],
    era_abbreviated => [
      "p. n. e.",
      "n. e."
    ],
    era_narrow => [
      "p.n.e.",
      "n.e."
    ],
    era_wide => [
      "pre nove ere",
      "nove ere"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Serbian",
    month_format_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "avg",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_format_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "mart",
      "april",
      "maj",
      "jun",
      "jul",
      "avgust",
      "septembar",
      "oktobar",
      "novembar",
      "decembar"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "avg",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "mart",
      "april",
      "maj",
      "jun",
      "jul",
      "avgust",
      "septembar",
      "oktobar",
      "novembar",
      "decembar"
    ],
    name => "Serbian Bosnia & Herzegovina Latin",
    native_language => "srpski",
    native_name => "srpski Bosna i Hercegovina latinica",
    native_script => "latinica",
    native_territory => "Bosna i Hercegovina",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "prvi kvartal",
      "drugi kvartal",
      "tre\N{U+0107}i kvartal",
      "\N{U+010d}etvrti kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "prvi kvartal",
      "drugi kvartal",
      "tre\N{U+0107}i kvartal",
      "\N{U+010d}etvrti kvartal"
    ],
    script => "Latin",
    territory => "Bosnia & Herzegovina",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sr-Latn-ME ]__
  {
    am_pm_abbreviated => [
      "pre podne",
      "po podne"
    ],
    available_formats => {
      E => "E",
      EHm => "E, HH.mm",
      EHms => "E, HH.mm.ss",
      Ed => "E d.",
      Ehm => "E, h.mm a",
      Ehms => "E, h.mm.ss a",
      Gy => "y. G",
      GyMMM => "MMM y. G",
      GyMMMEd => "E, d. MMM y. G",
      GyMMMd => "d. MMM y. G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMMdd => "dd.MMM",
      MMdd => "MM-dd",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "hh.mm a",
      hms => "hh.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y.",
      yM => "M.y.",
      yMEd => "E, d.M.y.",
      yMM => "MM.y.",
      yMMM => "MMM y.",
      yMMMEd => "E, d. MMM y.",
      yMMMM => "MMMM y.",
      yMMMd => "d. MMM y.",
      yMMdd => "dd.MM.y.",
      yMd => "d.M.y.",
      yQQQ => "QQQ. y",
      yQQQQ => "QQQQ. y"
    },
    code => "sr-Latn-ME",
    date_format_full => "EEEE, dd. MMMM y.",
    date_format_long => "dd. MMMM y.",
    date_format_medium => "dd.MM.y.",
    date_format_short => "d.M.yy.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "pon",
      "uto",
      "sre",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_format_narrow => [
      "p",
      "u",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_format_wide => [
      "ponedeljak",
      "utorak",
      "sreda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedelja"
    ],
    day_stand_alone_abbreviated => [
      "pon",
      "uto",
      "sre",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_stand_alone_narrow => [
      "p",
      "u",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "ponedeljak",
      "utorak",
      "sreda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedelja"
    ],
    era_abbreviated => [
      "p. n. e.",
      "n. e."
    ],
    era_narrow => [
      "p.n.e.",
      "n.e."
    ],
    era_wide => [
      "pre nove ere",
      "nove ere"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Serbian",
    month_format_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "avg",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_format_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "mart",
      "april",
      "maj",
      "jun",
      "jul",
      "avgust",
      "septembar",
      "oktobar",
      "novembar",
      "decembar"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "avg",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "mart",
      "april",
      "maj",
      "jun",
      "jul",
      "avgust",
      "septembar",
      "oktobar",
      "novembar",
      "decembar"
    ],
    name => "Serbian Montenegro Latin",
    native_language => "srpski",
    native_name => "srpski Crna Gora latinica",
    native_script => "latinica",
    native_territory => "Crna Gora",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "prvi kvartal",
      "drugi kvartal",
      "tre\N{U+0107}i kvartal",
      "\N{U+010d}etvrti kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "prvi kvartal",
      "drugi kvartal",
      "tre\N{U+0107}i kvartal",
      "\N{U+010d}etvrti kvartal"
    ],
    script => "Latin",
    territory => "Montenegro",
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ sr-Latn-RS ]__
  {
    am_pm_abbreviated => [
      "pre podne",
      "po podne"
    ],
    available_formats => {
      E => "E",
      EHm => "E, HH.mm",
      EHms => "E, HH.mm.ss",
      Ed => "E d.",
      Ehm => "E, h.mm a",
      Ehms => "E, h.mm.ss a",
      Gy => "y. G",
      GyMMM => "MMM y. G",
      GyMMMEd => "E, d. MMM y. G",
      GyMMMd => "d. MMM y. G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMMdd => "dd.MMM",
      MMdd => "MM-dd",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "hh.mm a",
      hms => "hh.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y.",
      yM => "M.y.",
      yMEd => "E, d.M.y.",
      yMM => "MM.y.",
      yMMM => "MMM y.",
      yMMMEd => "E, d. MMM y.",
      yMMMM => "MMMM y.",
      yMMMd => "d. MMM y.",
      yMMdd => "dd.MM.y.",
      yMd => "d.M.y.",
      yQQQ => "QQQ. y",
      yQQQQ => "QQQQ. y"
    },
    code => "sr-Latn-RS",
    date_format_full => "EEEE, dd. MMMM y.",
    date_format_long => "dd. MMMM y.",
    date_format_medium => "dd.MM.y.",
    date_format_short => "d.M.yy.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "pon",
      "uto",
      "sre",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_format_narrow => [
      "p",
      "u",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_format_wide => [
      "ponedeljak",
      "utorak",
      "sreda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedelja"
    ],
    day_stand_alone_abbreviated => [
      "pon",
      "uto",
      "sre",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_stand_alone_narrow => [
      "p",
      "u",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "ponedeljak",
      "utorak",
      "sreda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedelja"
    ],
    era_abbreviated => [
      "p. n. e.",
      "n. e."
    ],
    era_narrow => [
      "p.n.e.",
      "n.e."
    ],
    era_wide => [
      "pre nove ere",
      "nove ere"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a<U002c> %e. %b %Y.  %H:%M:%S %Z\n",
    glibc_date_format => "%d.%m.%Y.",
    glibc_datetime_format => "%A, %d. %B %Y. %T %Z",
    glibc_time_12_format => "%T",
    glibc_time_format => "%T",
    language => "Serbian",
    month_format_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "avg",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_format_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "mart",
      "april",
      "maj",
      "jun",
      "jul",
      "avgust",
      "septembar",
      "oktobar",
      "novembar",
      "decembar"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "avg",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "mart",
      "april",
      "maj",
      "jun",
      "jul",
      "avgust",
      "septembar",
      "oktobar",
      "novembar",
      "decembar"
    ],
    name => "Serbian Serbia Latin",
    native_language => "srpski",
    native_name => "srpski Srbija latinica",
    native_script => "latinica",
    native_territory => "Srbija",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "prvi kvartal",
      "drugi kvartal",
      "tre\N{U+0107}i kvartal",
      "\N{U+010d}etvrti kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "prvi kvartal",
      "drugi kvartal",
      "tre\N{U+0107}i kvartal",
      "\N{U+010d}etvrti kvartal"
    ],
    script => "Latin",
    territory => "Serbia",
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ sr-Latn-XK ]__
  {
    am_pm_abbreviated => [
      "pre podne",
      "po podne"
    ],
    available_formats => {
      E => "E",
      EHm => "E, HH.mm",
      EHms => "E, HH.mm.ss",
      Ed => "E d.",
      Ehm => "E, h.mm a",
      Ehms => "E, h.mm.ss a",
      Gy => "y. G",
      GyMMM => "MMM y. G",
      GyMMMEd => "E, d. MMM y. G",
      GyMMMd => "d. MMM y. G",
      H => "HH",
      Hm => "HH.mm",
      Hms => "HH.mm.ss",
      Hmsv => "HH.mm.ss v",
      Hmv => "HH.mm v",
      M => "L",
      MEd => "E, d.M.",
      MMM => "LLL",
      MMMEd => "E d. MMM",
      MMMMEd => "E, d. MMMM",
      MMMMd => "d. MMMM",
      MMMd => "d. MMM",
      MMMdd => "dd.MMM",
      MMdd => "MM-dd",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "hh.mm a",
      hms => "hh.mm.ss a",
      hmsv => "h.mm.ss a v",
      hmv => "h.mm a v",
      ms => "mm.ss",
      y => "y.",
      yM => "M.y.",
      yMEd => "E, d.M.y.",
      yMM => "MM.y.",
      yMMM => "MMM y.",
      yMMMEd => "E, d. MMM y.",
      yMMMM => "MMMM y.",
      yMMMd => "d. MMM y.",
      yMMdd => "dd.MM.y.",
      yMd => "d.M.y.",
      yQQQ => "QQQ. y",
      yQQQQ => "QQQQ. y"
    },
    code => "sr-Latn-XK",
    date_format_full => "EEEE, dd. MMMM y.",
    date_format_long => "dd. MMMM y.",
    date_format_medium => "dd.MM.y.",
    date_format_short => "d.M.yy.",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "pon",
      "uto",
      "sre",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_format_narrow => [
      "p",
      "u",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_format_wide => [
      "ponedeljak",
      "utorak",
      "sreda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedelja"
    ],
    day_stand_alone_abbreviated => [
      "pon",
      "uto",
      "sre",
      "\N{U+010d}et",
      "pet",
      "sub",
      "ned"
    ],
    day_stand_alone_narrow => [
      "p",
      "u",
      "s",
      "\N{U+010d}",
      "p",
      "s",
      "n"
    ],
    day_stand_alone_wide => [
      "ponedeljak",
      "utorak",
      "sreda",
      "\N{U+010d}etvrtak",
      "petak",
      "subota",
      "nedelja"
    ],
    era_abbreviated => [
      "p. n. e.",
      "n. e."
    ],
    era_narrow => [
      "p.n.e.",
      "n.e."
    ],
    era_wide => [
      "pre nove ere",
      "nove ere"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Serbian",
    month_format_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "avg",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_format_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_format_wide => [
      "januar",
      "februar",
      "mart",
      "april",
      "maj",
      "jun",
      "jul",
      "avgust",
      "septembar",
      "oktobar",
      "novembar",
      "decembar"
    ],
    month_stand_alone_abbreviated => [
      "jan",
      "feb",
      "mar",
      "apr",
      "maj",
      "jun",
      "jul",
      "avg",
      "sep",
      "okt",
      "nov",
      "dec"
    ],
    month_stand_alone_narrow => [
      "j",
      "f",
      "m",
      "a",
      "m",
      "j",
      "j",
      "a",
      "s",
      "o",
      "n",
      "d"
    ],
    month_stand_alone_wide => [
      "januar",
      "februar",
      "mart",
      "april",
      "maj",
      "jun",
      "jul",
      "avgust",
      "septembar",
      "oktobar",
      "novembar",
      "decembar"
    ],
    name => "Serbian Kosovo Latin",
    native_language => "srpski",
    native_name => "srpski Kosovo latinica",
    native_script => "latinica",
    native_territory => "Kosovo",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "prvi kvartal",
      "drugi kvartal",
      "tre\N{U+0107}i kvartal",
      "\N{U+010d}etvrti kvartal"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "prvi kvartal",
      "drugi kvartal",
      "tre\N{U+0107}i kvartal",
      "\N{U+010d}etvrti kvartal"
    ],
    script => "Latin",
    territory => "Kosovo",
    time_format_full => "HH.mm.ss zzzz",
    time_format_long => "HH.mm.ss z",
    time_format_medium => "HH.mm.ss",
    time_format_short => "HH.mm",
    variant => undef,
    version => 29
  }
  __[ sv ]__
  {
    am_pm_abbreviated => [
      "fm",
      "em"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/M",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "E, y-MM-dd",
      yMM => "y-MM",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "sv",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "m\N{U+00e5}n",
      "tis",
      "ons",
      "tors",
      "fre",
      "l\N{U+00f6}r",
      "s\N{U+00f6}n"
    ],
    day_format_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "m\N{U+00e5}ndag",
      "tisdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f6}rdag",
      "s\N{U+00f6}ndag"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+00e5}n",
      "tis",
      "ons",
      "tors",
      "fre",
      "l\N{U+00f6}r",
      "s\N{U+00f6}n"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "m\N{U+00e5}ndag",
      "tisdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f6}rdag",
      "s\N{U+00f6}ndag"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "f.Kr.",
      "e.Kr."
    ],
    era_wide => [
      "f\N{U+00f6}re Kristus",
      "efter Kristus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Swedish",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mars",
      "apr.",
      "maj",
      "juni",
      "juli",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januari",
      "februari",
      "mars",
      "april",
      "maj",
      "juni",
      "juli",
      "augusti",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "feb.",
      "mars",
      "apr.",
      "maj",
      "juni",
      "juli",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januari",
      "februari",
      "mars",
      "april",
      "maj",
      "juni",
      "juli",
      "augusti",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Swedish",
    native_language => "svenska",
    native_name => "svenska",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1:a kvartalet",
      "2:a kvartalet",
      "3:e kvartalet",
      "4:e kvartalet"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1:a kvartalet",
      "2:a kvartalet",
      "3:e kvartalet",
      "4:e kvartalet"
    ],
    script => undef,
    territory => undef,
    time_format_full => "'kl'. HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sv-AX ]__
  {
    am_pm_abbreviated => [
      "fm",
      "em"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/M",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "E, y-MM-dd",
      yMM => "y-MM",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "sv-AX",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "m\N{U+00e5}n",
      "tis",
      "ons",
      "tors",
      "fre",
      "l\N{U+00f6}r",
      "s\N{U+00f6}n"
    ],
    day_format_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "m\N{U+00e5}ndag",
      "tisdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f6}rdag",
      "s\N{U+00f6}ndag"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+00e5}n",
      "tis",
      "ons",
      "tors",
      "fre",
      "l\N{U+00f6}r",
      "s\N{U+00f6}n"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "m\N{U+00e5}ndag",
      "tisdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f6}rdag",
      "s\N{U+00f6}ndag"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "f.Kr.",
      "e.Kr."
    ],
    era_wide => [
      "f\N{U+00f6}re Kristus",
      "efter Kristus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Swedish",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mars",
      "apr.",
      "maj",
      "juni",
      "juli",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januari",
      "februari",
      "mars",
      "april",
      "maj",
      "juni",
      "juli",
      "augusti",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "feb.",
      "mars",
      "apr.",
      "maj",
      "juni",
      "juli",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januari",
      "februari",
      "mars",
      "april",
      "maj",
      "juni",
      "juli",
      "augusti",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Swedish \N{U+00c5}land Islands",
    native_language => "svenska",
    native_name => "svenska \N{U+00c5}land",
    native_script => undef,
    native_territory => "\N{U+00c5}land",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1:a kvartalet",
      "2:a kvartalet",
      "3:e kvartalet",
      "4:e kvartalet"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1:a kvartalet",
      "2:a kvartalet",
      "3:e kvartalet",
      "4:e kvartalet"
    ],
    script => undef,
    territory => "\N{U+00c5}land Islands",
    time_format_full => "'kl'. HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sv-FI ]__
  {
    am_pm_abbreviated => [
      "fm",
      "em"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/M",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "E, y-MM-dd",
      yMM => "y-MM",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "sv-FI",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd-MM-y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "m\N{U+00e5}n",
      "tis",
      "ons",
      "tors",
      "fre",
      "l\N{U+00f6}r",
      "s\N{U+00f6}n"
    ],
    day_format_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "m\N{U+00e5}ndag",
      "tisdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f6}rdag",
      "s\N{U+00f6}ndag"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+00e5}n",
      "tis",
      "ons",
      "tors",
      "fre",
      "l\N{U+00f6}r",
      "s\N{U+00f6}n"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "m\N{U+00e5}ndag",
      "tisdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f6}rdag",
      "s\N{U+00f6}ndag"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "f.Kr.",
      "e.Kr."
    ],
    era_wide => [
      "f\N{U+00f6}re Kristus",
      "efter Kristus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %-d.%-m.%Y %H.%M.%S %z",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%a %e. %B %Y %H.%M.%S",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H.%M.%S",
    language => "Swedish",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mars",
      "apr.",
      "maj",
      "juni",
      "juli",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januari",
      "februari",
      "mars",
      "april",
      "maj",
      "juni",
      "juli",
      "augusti",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "feb.",
      "mars",
      "apr.",
      "maj",
      "juni",
      "juli",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januari",
      "februari",
      "mars",
      "april",
      "maj",
      "juni",
      "juli",
      "augusti",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Swedish Finland",
    native_language => "svenska",
    native_name => "svenska Finland",
    native_script => undef,
    native_territory => "Finland",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1:a kvartalet",
      "2:a kvartalet",
      "3:e kvartalet",
      "4:e kvartalet"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1:a kvartalet",
      "2:a kvartalet",
      "3:e kvartalet",
      "4:e kvartalet"
    ],
    script => undef,
    territory => "Finland",
    time_format_full => "'kl'. HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sv-SE ]__
  {
    am_pm_abbreviated => [
      "fm",
      "em"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMd => "d/M",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "E, y-MM-dd",
      yMM => "y-MM",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "sv-SE",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "m\N{U+00e5}n",
      "tis",
      "ons",
      "tors",
      "fre",
      "l\N{U+00f6}r",
      "s\N{U+00f6}n"
    ],
    day_format_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_format_wide => [
      "m\N{U+00e5}ndag",
      "tisdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f6}rdag",
      "s\N{U+00f6}ndag"
    ],
    day_stand_alone_abbreviated => [
      "m\N{U+00e5}n",
      "tis",
      "ons",
      "tors",
      "fre",
      "l\N{U+00f6}r",
      "s\N{U+00f6}n"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "O",
      "T",
      "F",
      "L",
      "S"
    ],
    day_stand_alone_wide => [
      "m\N{U+00e5}ndag",
      "tisdag",
      "onsdag",
      "torsdag",
      "fredag",
      "l\N{U+00f6}rdag",
      "s\N{U+00f6}ndag"
    ],
    era_abbreviated => [
      "f.Kr.",
      "e.Kr."
    ],
    era_narrow => [
      "f.Kr.",
      "e.Kr."
    ],
    era_wide => [
      "f\N{U+00f6}re Kristus",
      "efter Kristus"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%Y-%m-%d",
    glibc_datetime_format => "%a %e %b %Y %H:%M:%S",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Swedish",
    month_format_abbreviated => [
      "jan.",
      "feb.",
      "mars",
      "apr.",
      "maj",
      "juni",
      "juli",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "januari",
      "februari",
      "mars",
      "april",
      "maj",
      "juni",
      "juli",
      "augusti",
      "september",
      "oktober",
      "november",
      "december"
    ],
    month_stand_alone_abbreviated => [
      "jan.",
      "feb.",
      "mars",
      "apr.",
      "maj",
      "juni",
      "juli",
      "aug.",
      "sep.",
      "okt.",
      "nov.",
      "dec."
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "januari",
      "februari",
      "mars",
      "april",
      "maj",
      "juni",
      "juli",
      "augusti",
      "september",
      "oktober",
      "november",
      "december"
    ],
    name => "Swedish Sweden",
    native_language => "svenska",
    native_name => "svenska Sverige",
    native_script => undef,
    native_territory => "Sverige",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1:a kvartalet",
      "2:a kvartalet",
      "3:e kvartalet",
      "4:e kvartalet"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1:a kvartalet",
      "2:a kvartalet",
      "3:e kvartalet",
      "4:e kvartalet"
    ],
    script => undef,
    territory => "Sweden",
    time_format_full => "'kl'. HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sw ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "QQQQ y"
    },
    code => "sw",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    day_stand_alone_abbreviated => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Kabla ya Kristo",
      "Baada ya Kristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Swahili",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Swahili",
    native_language => "Kiswahili",
    native_name => "Kiswahili",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    quarter_stand_alone_abbreviated => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sw-CD ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "QQQQ y"
    },
    code => "sw-CD",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "kwa",
      "pil",
      "tat",
      "ine",
      "tan",
      "sit",
      "yen"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "siku ya kwanza",
      "siku ya pili",
      "siku ya tatu",
      "siku ya ine",
      "siku ya tanu",
      "siku ya sita",
      "siku ya yenga"
    ],
    day_stand_alone_abbreviated => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    day_stand_alone_narrow => [
      "k",
      "p",
      "t",
      "i",
      "t",
      "s",
      "y"
    ],
    day_stand_alone_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Kabla ya Kristo",
      "Baada ya Kristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Swahili",
    month_format_abbreviated => [
      "mkw",
      "mpi",
      "mtu",
      "min",
      "mtn",
      "mst",
      "msb",
      "mun",
      "mts",
      "mku",
      "mkm",
      "mkb"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "mwezi ya kwanja",
      "mwezi ya pili",
      "mwezi ya tatu",
      "mwezi ya ine",
      "mwezi ya tanu",
      "mwezi ya sita",
      "mwezi ya saba",
      "mwezi ya munane",
      "mwezi ya tisa",
      "mwezi ya kumi",
      "mwezi ya kumi na moya",
      "mwezi ya kumi ya mbili"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "k",
      "p",
      "t",
      "i",
      "t",
      "s",
      "s",
      "m",
      "t",
      "k",
      "m",
      "m"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Swahili Congo - Kinshasa",
    native_language => "Kiswahili",
    native_name => "Kiswahili Jamhuri ya Kidemokrasia ya Kongo",
    native_script => undef,
    native_territory => "Jamhuri ya Kidemokrasia ya Kongo",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    quarter_stand_alone_abbreviated => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    script => undef,
    territory => "Congo - Kinshasa",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sw-KE ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "QQQQ y"
    },
    code => "sw-KE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    day_stand_alone_abbreviated => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Kabla ya Kristo",
      "Baada ya Kristo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%e %B %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%I:%M:%S %p",
    language => "Swahili",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Swahili Kenya",
    native_language => "Kiswahili",
    native_name => "Kiswahili Kenya",
    native_script => undef,
    native_territory => "Kenya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    quarter_stand_alone_abbreviated => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    script => undef,
    territory => "Kenya",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sw-TZ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "QQQQ y"
    },
    code => "sw-TZ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    day_stand_alone_abbreviated => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Kabla ya Kristo",
      "Baada ya Kristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Swahili",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Swahili Tanzania",
    native_language => "Kiswahili",
    native_name => "Kiswahili Tanzania",
    native_script => undef,
    native_territory => "Tanzania",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    quarter_stand_alone_abbreviated => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    script => undef,
    territory => "Tanzania",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ sw-UG ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, MMM d, y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "QQQQ y"
    },
    code => "sw-UG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    day_stand_alone_abbreviated => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Jumatatu",
      "Jumanne",
      "Jumatano",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapili"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "Kabla ya Kristo",
      "Baada ya Kristo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Swahili",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprili",
      "Mei",
      "Juni",
      "Julai",
      "Agosti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Swahili Uganda",
    native_language => "Kiswahili",
    native_name => "Kiswahili Uganda",
    native_script => undef,
    native_territory => "Uganda",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    quarter_stand_alone_abbreviated => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo ya 1",
      "Robo ya 2",
      "Robo ya 3",
      "Robo ya 4"
    ],
    script => undef,
    territory => "Uganda",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ta ]__
  {
    am_pm_abbreviated => [
      "\N{U+0bae}\N{U+0bc1}\N{U+0bb1}\N{U+0bcd}\N{U+0baa}\N{U+0b95}\N{U+0bb2}\N{U+0bcd}",
      "\N{U+0baa}\N{U+0bbf}\N{U+0bb1}\N{U+0bcd}\N{U+0baa}\N{U+0b95}\N{U+0bb2}\N{U+0bcd}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E a h:mm",
      Ehms => "E a h:mm:ss",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "d MMMM",
      MMMd => "MMM d",
      MMdd => "dd-MM",
      Md => "d/M",
      d => "d",
      h => "a h",
      hm => "a h:mm",
      hms => "a h:mm:ss",
      hmsv => "a h:mm:ss v",
      hmv => "a h:mm v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ta",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} \N{U+2019}\N{U+0b85}\N{U+0ba9}\N{U+0bcd}\N{U+0bb1}\N{U+0bc1}\N{U+2019} {0}",
    datetime_format_long => "{1} \N{U+2019}\N{U+0b85}\N{U+0ba9}\N{U+0bcd}\N{U+0bb1}\N{U+0bc1}\N{U+2019} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}.",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}.",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}.",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}."
    ],
    day_format_narrow => [
      "\N{U+0ba4}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0baa}\N{U+0bc1}",
      "\N{U+0bb5}\N{U+0bbf}",
      "\N{U+0bb5}\N{U+0bc6}",
      "\N{U+0b9a}",
      "\N{U+0b9e}\N{U+0bbe}"
    ],
    day_format_wide => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}\N{U+0b95}\N{U+0bb3}\N{U+0bcd}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}\N{U+0bb5}\N{U+0bbe}\N{U+0baf}\N{U+0bcd}",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}\N{U+0bb4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}\N{U+0bb3}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}\N{U+0bb1}\N{U+0bc1}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}.",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}.",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}.",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}."
    ],
    day_stand_alone_narrow => [
      "\N{U+0ba4}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0baa}\N{U+0bc1}",
      "\N{U+0bb5}\N{U+0bbf}",
      "\N{U+0bb5}\N{U+0bc6}",
      "\N{U+0b9a}",
      "\N{U+0b9e}\N{U+0bbe}"
    ],
    day_stand_alone_wide => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}\N{U+0b95}\N{U+0bb3}\N{U+0bcd}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}\N{U+0bb5}\N{U+0bbe}\N{U+0baf}\N{U+0bcd}",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}\N{U+0bb4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}\N{U+0bb3}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}\N{U+0bb1}\N{U+0bc1}"
    ],
    era_abbreviated => [
      "\N{U+0b95}\N{U+0bbf}.\N{U+0bae}\N{U+0bc1}.",
      "\N{U+0b95}\N{U+0bbf}.\N{U+0baa}\N{U+0bbf}."
    ],
    era_narrow => [
      "\N{U+0b95}\N{U+0bbf}.\N{U+0bae}\N{U+0bc1}.",
      "\N{U+0b95}\N{U+0bbf}.\N{U+0baa}\N{U+0bbf}."
    ],
    era_wide => [
      "\N{U+0b95}\N{U+0bbf}\N{U+0bb1}\N{U+0bbf}\N{U+0bb8}\N{U+0bcd}\N{U+0ba4}\N{U+0bc1}\N{U+0bb5}\N{U+0bc1}\N{U+0b95}\N{U+0bcd}\N{U+0b95}\N{U+0bc1} \N{U+0bae}\N{U+0bc1}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b85}\N{U+0ba9}\N{U+0bcd}\N{U+0ba9}\N{U+0bcb} \N{U+0b9f}\N{U+0bcb}\N{U+0bae}\N{U+0bbf}\N{U+0ba9}\N{U+0bbf}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Tamil",
    month_format_abbreviated => [
      "\N{U+0b9c}\N{U+0ba9}.",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}.",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}.",
      "\N{U+0ba8}\N{U+0bb5}.",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}."
    ],
    month_format_narrow => [
      "\N{U+0b9c}",
      "\N{U+0baa}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}",
      "\N{U+0b8f}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b86}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0b85}",
      "\N{U+0ba8}",
      "\N{U+0b9f}\N{U+0bbf}"
    ],
    month_format_wide => [
      "\N{U+0b9c}\N{U+0ba9}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}\N{U+0b9a}\N{U+0bcd}",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb2}\N{U+0bcd}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}\N{U+0bb8}\N{U+0bcd}\N{U+0b9f}\N{U+0bcd}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}\N{U+0b9f}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}\N{U+0b9f}\N{U+0bcb}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0ba8}\N{U+0bb5}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0b9c}\N{U+0ba9}.",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}.",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}.",
      "\N{U+0ba8}\N{U+0bb5}.",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+0b9c}",
      "\N{U+0baa}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}",
      "\N{U+0b8f}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b86}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0b85}",
      "\N{U+0ba8}",
      "\N{U+0b9f}\N{U+0bbf}"
    ],
    month_stand_alone_wide => [
      "\N{U+0b9c}\N{U+0ba9}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}\N{U+0b9a}\N{U+0bcd}",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb2}\N{U+0bcd}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}\N{U+0bb8}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}\N{U+0b9f}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}\N{U+0b9f}\N{U+0bcb}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0ba8}\N{U+0bb5}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}"
    ],
    name => "Tamil",
    native_language => "\N{U+0ba4}\N{U+0bae}\N{U+0bbf}\N{U+0bb4}\N{U+0bcd}",
    native_name => "\N{U+0ba4}\N{U+0bae}\N{U+0bbf}\N{U+0bb4}\N{U+0bcd}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.1",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.2",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.3",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "2\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "3\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "4\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.1",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.2",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.3",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "2\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "3\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "4\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "a h:mm:ss zzzz",
    time_format_long => "a h:mm:ss z",
    time_format_medium => "a h:mm:ss",
    time_format_short => "a h:mm",
    variant => undef,
    version => 29
  }
  __[ ta-IN ]__
  {
    am_pm_abbreviated => [
      "\N{U+0bae}\N{U+0bc1}\N{U+0bb1}\N{U+0bcd}\N{U+0baa}\N{U+0b95}\N{U+0bb2}\N{U+0bcd}",
      "\N{U+0baa}\N{U+0bbf}\N{U+0bb1}\N{U+0bcd}\N{U+0baa}\N{U+0b95}\N{U+0bb2}\N{U+0bcd}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E a h:mm",
      Ehms => "E a h:mm:ss",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "d MMMM",
      MMMd => "MMM d",
      MMdd => "dd-MM",
      Md => "d/M",
      d => "d",
      h => "a h",
      hm => "a h:mm",
      hms => "a h:mm:ss",
      hmsv => "a h:mm:ss v",
      hmv => "a h:mm v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ta-IN",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} \N{U+2019}\N{U+0b85}\N{U+0ba9}\N{U+0bcd}\N{U+0bb1}\N{U+0bc1}\N{U+2019} {0}",
    datetime_format_long => "{1} \N{U+2019}\N{U+0b85}\N{U+0ba9}\N{U+0bcd}\N{U+0bb1}\N{U+0bc1}\N{U+2019} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}.",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}.",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}.",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}."
    ],
    day_format_narrow => [
      "\N{U+0ba4}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0baa}\N{U+0bc1}",
      "\N{U+0bb5}\N{U+0bbf}",
      "\N{U+0bb5}\N{U+0bc6}",
      "\N{U+0b9a}",
      "\N{U+0b9e}\N{U+0bbe}"
    ],
    day_format_wide => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}\N{U+0b95}\N{U+0bb3}\N{U+0bcd}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}\N{U+0bb5}\N{U+0bbe}\N{U+0baf}\N{U+0bcd}",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}\N{U+0bb4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}\N{U+0bb3}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}\N{U+0bb1}\N{U+0bc1}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}.",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}.",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}.",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}."
    ],
    day_stand_alone_narrow => [
      "\N{U+0ba4}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0baa}\N{U+0bc1}",
      "\N{U+0bb5}\N{U+0bbf}",
      "\N{U+0bb5}\N{U+0bc6}",
      "\N{U+0b9a}",
      "\N{U+0b9e}\N{U+0bbe}"
    ],
    day_stand_alone_wide => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}\N{U+0b95}\N{U+0bb3}\N{U+0bcd}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}\N{U+0bb5}\N{U+0bbe}\N{U+0baf}\N{U+0bcd}",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}\N{U+0bb4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}\N{U+0bb3}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}\N{U+0bb1}\N{U+0bc1}"
    ],
    era_abbreviated => [
      "\N{U+0b95}\N{U+0bbf}.\N{U+0bae}\N{U+0bc1}.",
      "\N{U+0b95}\N{U+0bbf}.\N{U+0baa}\N{U+0bbf}."
    ],
    era_narrow => [
      "\N{U+0b95}\N{U+0bbf}.\N{U+0bae}\N{U+0bc1}.",
      "\N{U+0b95}\N{U+0bbf}.\N{U+0baa}\N{U+0bbf}."
    ],
    era_wide => [
      "\N{U+0b95}\N{U+0bbf}\N{U+0bb1}\N{U+0bbf}\N{U+0bb8}\N{U+0bcd}\N{U+0ba4}\N{U+0bc1}\N{U+0bb5}\N{U+0bc1}\N{U+0b95}\N{U+0bcd}\N{U+0b95}\N{U+0bc1} \N{U+0bae}\N{U+0bc1}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b85}\N{U+0ba9}\N{U+0bcd}\N{U+0ba9}\N{U+0bcb} \N{U+0b9f}\N{U+0bcb}\N{U+0bae}\N{U+0bbf}\N{U+0ba9}\N{U+0bbf}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A %d %B %Y",
    glibc_datetime_format => "%A %d %B %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "Tamil",
    month_format_abbreviated => [
      "\N{U+0b9c}\N{U+0ba9}.",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}.",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}.",
      "\N{U+0ba8}\N{U+0bb5}.",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}."
    ],
    month_format_narrow => [
      "\N{U+0b9c}",
      "\N{U+0baa}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}",
      "\N{U+0b8f}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b86}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0b85}",
      "\N{U+0ba8}",
      "\N{U+0b9f}\N{U+0bbf}"
    ],
    month_format_wide => [
      "\N{U+0b9c}\N{U+0ba9}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}\N{U+0b9a}\N{U+0bcd}",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb2}\N{U+0bcd}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}\N{U+0bb8}\N{U+0bcd}\N{U+0b9f}\N{U+0bcd}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}\N{U+0b9f}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}\N{U+0b9f}\N{U+0bcb}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0ba8}\N{U+0bb5}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0b9c}\N{U+0ba9}.",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}.",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}.",
      "\N{U+0ba8}\N{U+0bb5}.",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+0b9c}",
      "\N{U+0baa}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}",
      "\N{U+0b8f}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b86}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0b85}",
      "\N{U+0ba8}",
      "\N{U+0b9f}\N{U+0bbf}"
    ],
    month_stand_alone_wide => [
      "\N{U+0b9c}\N{U+0ba9}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}\N{U+0b9a}\N{U+0bcd}",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb2}\N{U+0bcd}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}\N{U+0bb8}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}\N{U+0b9f}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}\N{U+0b9f}\N{U+0bcb}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0ba8}\N{U+0bb5}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}"
    ],
    name => "Tamil India",
    native_language => "\N{U+0ba4}\N{U+0bae}\N{U+0bbf}\N{U+0bb4}\N{U+0bcd}",
    native_name => "\N{U+0ba4}\N{U+0bae}\N{U+0bbf}\N{U+0bb4}\N{U+0bcd} \N{U+0b87}\N{U+0ba8}\N{U+0bcd}\N{U+0ba4}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}",
    native_script => undef,
    native_territory => "\N{U+0b87}\N{U+0ba8}\N{U+0bcd}\N{U+0ba4}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.1",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.2",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.3",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "2\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "3\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "4\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.1",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.2",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.3",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "2\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "3\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "4\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}"
    ],
    script => undef,
    territory => "India",
    time_format_full => "a h:mm:ss zzzz",
    time_format_long => "a h:mm:ss z",
    time_format_medium => "a h:mm:ss",
    time_format_short => "a h:mm",
    variant => undef,
    version => 29
  }
  __[ ta-LK ]__
  {
    am_pm_abbreviated => [
      "\N{U+0bae}\N{U+0bc1}\N{U+0bb1}\N{U+0bcd}\N{U+0baa}\N{U+0b95}\N{U+0bb2}\N{U+0bcd}",
      "\N{U+0baa}\N{U+0bbf}\N{U+0bb1}\N{U+0bcd}\N{U+0baa}\N{U+0b95}\N{U+0bb2}\N{U+0bcd}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E a h:mm",
      Ehms => "E a h:mm:ss",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "d MMMM",
      MMMd => "MMM d",
      MMdd => "dd-MM",
      Md => "d/M",
      d => "d",
      h => "a h",
      hm => "a h:mm",
      hms => "a h:mm:ss",
      hmsv => "a h:mm:ss v",
      hmv => "a h:mm v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ta-LK",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} \N{U+2019}\N{U+0b85}\N{U+0ba9}\N{U+0bcd}\N{U+0bb1}\N{U+0bc1}\N{U+2019} {0}",
    datetime_format_long => "{1} \N{U+2019}\N{U+0b85}\N{U+0ba9}\N{U+0bcd}\N{U+0bb1}\N{U+0bc1}\N{U+2019} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}.",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}.",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}.",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}."
    ],
    day_format_narrow => [
      "\N{U+0ba4}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0baa}\N{U+0bc1}",
      "\N{U+0bb5}\N{U+0bbf}",
      "\N{U+0bb5}\N{U+0bc6}",
      "\N{U+0b9a}",
      "\N{U+0b9e}\N{U+0bbe}"
    ],
    day_format_wide => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}\N{U+0b95}\N{U+0bb3}\N{U+0bcd}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}\N{U+0bb5}\N{U+0bbe}\N{U+0baf}\N{U+0bcd}",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}\N{U+0bb4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}\N{U+0bb3}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}\N{U+0bb1}\N{U+0bc1}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}.",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}.",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}.",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}."
    ],
    day_stand_alone_narrow => [
      "\N{U+0ba4}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0baa}\N{U+0bc1}",
      "\N{U+0bb5}\N{U+0bbf}",
      "\N{U+0bb5}\N{U+0bc6}",
      "\N{U+0b9a}",
      "\N{U+0b9e}\N{U+0bbe}"
    ],
    day_stand_alone_wide => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}\N{U+0b95}\N{U+0bb3}\N{U+0bcd}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}\N{U+0bb5}\N{U+0bbe}\N{U+0baf}\N{U+0bcd}",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}\N{U+0bb4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}\N{U+0bb3}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}\N{U+0bb1}\N{U+0bc1}"
    ],
    era_abbreviated => [
      "\N{U+0b95}\N{U+0bbf}.\N{U+0bae}\N{U+0bc1}.",
      "\N{U+0b95}\N{U+0bbf}.\N{U+0baa}\N{U+0bbf}."
    ],
    era_narrow => [
      "\N{U+0b95}\N{U+0bbf}.\N{U+0bae}\N{U+0bc1}.",
      "\N{U+0b95}\N{U+0bbf}.\N{U+0baa}\N{U+0bbf}."
    ],
    era_wide => [
      "\N{U+0b95}\N{U+0bbf}\N{U+0bb1}\N{U+0bbf}\N{U+0bb8}\N{U+0bcd}\N{U+0ba4}\N{U+0bc1}\N{U+0bb5}\N{U+0bc1}\N{U+0b95}\N{U+0bcd}\N{U+0b95}\N{U+0bc1} \N{U+0bae}\N{U+0bc1}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b85}\N{U+0ba9}\N{U+0bcd}\N{U+0ba9}\N{U+0bcb} \N{U+0b9f}\N{U+0bcb}\N{U+0bae}\N{U+0bbf}\N{U+0ba9}\N{U+0bbf}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Tamil",
    month_format_abbreviated => [
      "\N{U+0b9c}\N{U+0ba9}.",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}.",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}.",
      "\N{U+0ba8}\N{U+0bb5}.",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}."
    ],
    month_format_narrow => [
      "\N{U+0b9c}",
      "\N{U+0baa}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}",
      "\N{U+0b8f}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b86}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0b85}",
      "\N{U+0ba8}",
      "\N{U+0b9f}\N{U+0bbf}"
    ],
    month_format_wide => [
      "\N{U+0b9c}\N{U+0ba9}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}\N{U+0b9a}\N{U+0bcd}",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb2}\N{U+0bcd}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}\N{U+0bb8}\N{U+0bcd}\N{U+0b9f}\N{U+0bcd}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}\N{U+0b9f}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}\N{U+0b9f}\N{U+0bcb}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0ba8}\N{U+0bb5}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0b9c}\N{U+0ba9}.",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}.",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}.",
      "\N{U+0ba8}\N{U+0bb5}.",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+0b9c}",
      "\N{U+0baa}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}",
      "\N{U+0b8f}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b86}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0b85}",
      "\N{U+0ba8}",
      "\N{U+0b9f}\N{U+0bbf}"
    ],
    month_stand_alone_wide => [
      "\N{U+0b9c}\N{U+0ba9}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}\N{U+0b9a}\N{U+0bcd}",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb2}\N{U+0bcd}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}\N{U+0bb8}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}\N{U+0b9f}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}\N{U+0b9f}\N{U+0bcb}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0ba8}\N{U+0bb5}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}"
    ],
    name => "Tamil Sri Lanka",
    native_language => "\N{U+0ba4}\N{U+0bae}\N{U+0bbf}\N{U+0bb4}\N{U+0bcd}",
    native_name => "\N{U+0ba4}\N{U+0bae}\N{U+0bbf}\N{U+0bb4}\N{U+0bcd} \N{U+0b87}\N{U+0bb2}\N{U+0b99}\N{U+0bcd}\N{U+0b95}\N{U+0bc8}",
    native_script => undef,
    native_territory => "\N{U+0b87}\N{U+0bb2}\N{U+0b99}\N{U+0bcd}\N{U+0b95}\N{U+0bc8}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.1",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.2",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.3",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "2\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "3\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "4\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.1",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.2",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.3",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "2\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "3\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "4\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}"
    ],
    script => undef,
    territory => "Sri Lanka",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ta-MY ]__
  {
    am_pm_abbreviated => [
      "\N{U+0bae}\N{U+0bc1}\N{U+0bb1}\N{U+0bcd}\N{U+0baa}\N{U+0b95}\N{U+0bb2}\N{U+0bcd}",
      "\N{U+0baa}\N{U+0bbf}\N{U+0bb1}\N{U+0bcd}\N{U+0baa}\N{U+0b95}\N{U+0bb2}\N{U+0bcd}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E a h:mm",
      Ehms => "E a h:mm:ss",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "d MMMM",
      MMMd => "MMM d",
      MMdd => "dd-MM",
      Md => "d/M",
      d => "d",
      h => "a h",
      hm => "a h:mm",
      hms => "a h:mm:ss",
      hmsv => "a h:mm:ss v",
      hmv => "a h:mm v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ta-MY",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} \N{U+2019}\N{U+0b85}\N{U+0ba9}\N{U+0bcd}\N{U+0bb1}\N{U+0bc1}\N{U+2019} {0}",
    datetime_format_long => "{1} \N{U+2019}\N{U+0b85}\N{U+0ba9}\N{U+0bcd}\N{U+0bb1}\N{U+0bc1}\N{U+2019} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}.",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}.",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}.",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}."
    ],
    day_format_narrow => [
      "\N{U+0ba4}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0baa}\N{U+0bc1}",
      "\N{U+0bb5}\N{U+0bbf}",
      "\N{U+0bb5}\N{U+0bc6}",
      "\N{U+0b9a}",
      "\N{U+0b9e}\N{U+0bbe}"
    ],
    day_format_wide => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}\N{U+0b95}\N{U+0bb3}\N{U+0bcd}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}\N{U+0bb5}\N{U+0bbe}\N{U+0baf}\N{U+0bcd}",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}\N{U+0bb4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}\N{U+0bb3}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}\N{U+0bb1}\N{U+0bc1}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}.",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}.",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}.",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}."
    ],
    day_stand_alone_narrow => [
      "\N{U+0ba4}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0baa}\N{U+0bc1}",
      "\N{U+0bb5}\N{U+0bbf}",
      "\N{U+0bb5}\N{U+0bc6}",
      "\N{U+0b9a}",
      "\N{U+0b9e}\N{U+0bbe}"
    ],
    day_stand_alone_wide => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}\N{U+0b95}\N{U+0bb3}\N{U+0bcd}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}\N{U+0bb5}\N{U+0bbe}\N{U+0baf}\N{U+0bcd}",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}\N{U+0bb4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}\N{U+0bb3}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}\N{U+0bb1}\N{U+0bc1}"
    ],
    era_abbreviated => [
      "\N{U+0b95}\N{U+0bbf}.\N{U+0bae}\N{U+0bc1}.",
      "\N{U+0b95}\N{U+0bbf}.\N{U+0baa}\N{U+0bbf}."
    ],
    era_narrow => [
      "\N{U+0b95}\N{U+0bbf}.\N{U+0bae}\N{U+0bc1}.",
      "\N{U+0b95}\N{U+0bbf}.\N{U+0baa}\N{U+0bbf}."
    ],
    era_wide => [
      "\N{U+0b95}\N{U+0bbf}\N{U+0bb1}\N{U+0bbf}\N{U+0bb8}\N{U+0bcd}\N{U+0ba4}\N{U+0bc1}\N{U+0bb5}\N{U+0bc1}\N{U+0b95}\N{U+0bcd}\N{U+0b95}\N{U+0bc1} \N{U+0bae}\N{U+0bc1}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b85}\N{U+0ba9}\N{U+0bcd}\N{U+0ba9}\N{U+0bcb} \N{U+0b9f}\N{U+0bcb}\N{U+0bae}\N{U+0bbf}\N{U+0ba9}\N{U+0bbf}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Tamil",
    month_format_abbreviated => [
      "\N{U+0b9c}\N{U+0ba9}.",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}.",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}.",
      "\N{U+0ba8}\N{U+0bb5}.",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}."
    ],
    month_format_narrow => [
      "\N{U+0b9c}",
      "\N{U+0baa}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}",
      "\N{U+0b8f}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b86}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0b85}",
      "\N{U+0ba8}",
      "\N{U+0b9f}\N{U+0bbf}"
    ],
    month_format_wide => [
      "\N{U+0b9c}\N{U+0ba9}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}\N{U+0b9a}\N{U+0bcd}",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb2}\N{U+0bcd}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}\N{U+0bb8}\N{U+0bcd}\N{U+0b9f}\N{U+0bcd}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}\N{U+0b9f}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}\N{U+0b9f}\N{U+0bcb}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0ba8}\N{U+0bb5}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0b9c}\N{U+0ba9}.",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}.",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}.",
      "\N{U+0ba8}\N{U+0bb5}.",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+0b9c}",
      "\N{U+0baa}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}",
      "\N{U+0b8f}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b86}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0b85}",
      "\N{U+0ba8}",
      "\N{U+0b9f}\N{U+0bbf}"
    ],
    month_stand_alone_wide => [
      "\N{U+0b9c}\N{U+0ba9}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}\N{U+0b9a}\N{U+0bcd}",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb2}\N{U+0bcd}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}\N{U+0bb8}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}\N{U+0b9f}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}\N{U+0b9f}\N{U+0bcb}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0ba8}\N{U+0bb5}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}"
    ],
    name => "Tamil Malaysia",
    native_language => "\N{U+0ba4}\N{U+0bae}\N{U+0bbf}\N{U+0bb4}\N{U+0bcd}",
    native_name => "\N{U+0ba4}\N{U+0bae}\N{U+0bbf}\N{U+0bb4}\N{U+0bcd} \N{U+0bae}\N{U+0bb2}\N{U+0bc7}\N{U+0b9a}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}",
    native_script => undef,
    native_territory => "\N{U+0bae}\N{U+0bb2}\N{U+0bc7}\N{U+0b9a}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.1",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.2",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.3",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "2\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "3\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "4\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.1",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.2",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.3",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "2\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "3\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "4\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}"
    ],
    script => undef,
    territory => "Malaysia",
    time_format_full => "a h:mm:ss zzzz",
    time_format_long => "a h:mm:ss z",
    time_format_medium => "a h:mm:ss",
    time_format_short => "a h:mm",
    variant => undef,
    version => 29
  }
  __[ ta-SG ]__
  {
    am_pm_abbreviated => [
      "\N{U+0bae}\N{U+0bc1}\N{U+0bb1}\N{U+0bcd}\N{U+0baa}\N{U+0b95}\N{U+0bb2}\N{U+0bcd}",
      "\N{U+0baa}\N{U+0bbf}\N{U+0bb1}\N{U+0bcd}\N{U+0baa}\N{U+0b95}\N{U+0bb2}\N{U+0bcd}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E a h:mm",
      Ehms => "E a h:mm:ss",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "d MMMM",
      MMMd => "MMM d",
      MMdd => "dd-MM",
      Md => "d/M",
      d => "d",
      h => "a h",
      hm => "a h:mm",
      hms => "a h:mm:ss",
      hmsv => "a h:mm:ss v",
      hmv => "a h:mm v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM, y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ta-SG",
    date_format_full => "EEEE, d MMMM, y",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} \N{U+2019}\N{U+0b85}\N{U+0ba9}\N{U+0bcd}\N{U+0bb1}\N{U+0bc1}\N{U+2019} {0}",
    datetime_format_long => "{1} \N{U+2019}\N{U+0b85}\N{U+0ba9}\N{U+0bcd}\N{U+0bb1}\N{U+0bc1}\N{U+2019} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}.",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}.",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}.",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}."
    ],
    day_format_narrow => [
      "\N{U+0ba4}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0baa}\N{U+0bc1}",
      "\N{U+0bb5}\N{U+0bbf}",
      "\N{U+0bb5}\N{U+0bc6}",
      "\N{U+0b9a}",
      "\N{U+0b9e}\N{U+0bbe}"
    ],
    day_format_wide => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}\N{U+0b95}\N{U+0bb3}\N{U+0bcd}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}\N{U+0bb5}\N{U+0bbe}\N{U+0baf}\N{U+0bcd}",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}\N{U+0bb4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}\N{U+0bb3}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}\N{U+0bb1}\N{U+0bc1}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}.",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}.",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}.",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}.",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}."
    ],
    day_stand_alone_narrow => [
      "\N{U+0ba4}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0baa}\N{U+0bc1}",
      "\N{U+0bb5}\N{U+0bbf}",
      "\N{U+0bb5}\N{U+0bc6}",
      "\N{U+0b9a}",
      "\N{U+0b9e}\N{U+0bbe}"
    ],
    day_stand_alone_wide => [
      "\N{U+0ba4}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}\N{U+0b95}\N{U+0bb3}\N{U+0bcd}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0bb5}\N{U+0bcd}\N{U+0bb5}\N{U+0bbe}\N{U+0baf}\N{U+0bcd}",
      "\N{U+0baa}\N{U+0bc1}\N{U+0ba4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bbf}\N{U+0baf}\N{U+0bbe}\N{U+0bb4}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0bb5}\N{U+0bc6}\N{U+0bb3}\N{U+0bcd}\N{U+0bb3}\N{U+0bbf}",
      "\N{U+0b9a}\N{U+0ba9}\N{U+0bbf}",
      "\N{U+0b9e}\N{U+0bbe}\N{U+0baf}\N{U+0bbf}\N{U+0bb1}\N{U+0bc1}"
    ],
    era_abbreviated => [
      "\N{U+0b95}\N{U+0bbf}.\N{U+0bae}\N{U+0bc1}.",
      "\N{U+0b95}\N{U+0bbf}.\N{U+0baa}\N{U+0bbf}."
    ],
    era_narrow => [
      "\N{U+0b95}\N{U+0bbf}.\N{U+0bae}\N{U+0bc1}.",
      "\N{U+0b95}\N{U+0bbf}.\N{U+0baa}\N{U+0bbf}."
    ],
    era_wide => [
      "\N{U+0b95}\N{U+0bbf}\N{U+0bb1}\N{U+0bbf}\N{U+0bb8}\N{U+0bcd}\N{U+0ba4}\N{U+0bc1}\N{U+0bb5}\N{U+0bc1}\N{U+0b95}\N{U+0bcd}\N{U+0b95}\N{U+0bc1} \N{U+0bae}\N{U+0bc1}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b85}\N{U+0ba9}\N{U+0bcd}\N{U+0ba9}\N{U+0bcb} \N{U+0b9f}\N{U+0bcb}\N{U+0bae}\N{U+0bbf}\N{U+0ba9}\N{U+0bbf}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Tamil",
    month_format_abbreviated => [
      "\N{U+0b9c}\N{U+0ba9}.",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}.",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}.",
      "\N{U+0ba8}\N{U+0bb5}.",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}."
    ],
    month_format_narrow => [
      "\N{U+0b9c}",
      "\N{U+0baa}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}",
      "\N{U+0b8f}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b86}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0b85}",
      "\N{U+0ba8}",
      "\N{U+0b9f}\N{U+0bbf}"
    ],
    month_format_wide => [
      "\N{U+0b9c}\N{U+0ba9}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}\N{U+0b9a}\N{U+0bcd}",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb2}\N{U+0bcd}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}\N{U+0bb8}\N{U+0bcd}\N{U+0b9f}\N{U+0bcd}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}\N{U+0b9f}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}\N{U+0b9f}\N{U+0bcb}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0ba8}\N{U+0bb5}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0b9c}\N{U+0ba9}.",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}.",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}.",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}.",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}.",
      "\N{U+0ba8}\N{U+0bb5}.",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}."
    ],
    month_stand_alone_narrow => [
      "\N{U+0b9c}",
      "\N{U+0baa}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}",
      "\N{U+0b8f}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b9c}\N{U+0bc2}",
      "\N{U+0b86}",
      "\N{U+0b9a}\N{U+0bc6}",
      "\N{U+0b85}",
      "\N{U+0ba8}",
      "\N{U+0b9f}\N{U+0bbf}"
    ],
    month_stand_alone_wide => [
      "\N{U+0b9c}\N{U+0ba9}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0baa}\N{U+0bbf}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb5}\N{U+0bb0}\N{U+0bbf}",
      "\N{U+0bae}\N{U+0bbe}\N{U+0bb0}\N{U+0bcd}\N{U+0b9a}\N{U+0bcd}",
      "\N{U+0b8f}\N{U+0baa}\N{U+0bcd}\N{U+0bb0}\N{U+0bb2}\N{U+0bcd}",
      "\N{U+0bae}\N{U+0bc7}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0ba9}\N{U+0bcd}",
      "\N{U+0b9c}\N{U+0bc2}\N{U+0bb2}\N{U+0bc8}",
      "\N{U+0b86}\N{U+0b95}\N{U+0bb8}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "\N{U+0b9a}\N{U+0bc6}\N{U+0baa}\N{U+0bcd}\N{U+0b9f}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b85}\N{U+0b95}\N{U+0bcd}\N{U+0b9f}\N{U+0bcb}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0ba8}\N{U+0bb5}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}",
      "\N{U+0b9f}\N{U+0bbf}\N{U+0b9a}\N{U+0bae}\N{U+0bcd}\N{U+0baa}\N{U+0bb0}\N{U+0bcd}"
    ],
    name => "Tamil Singapore",
    native_language => "\N{U+0ba4}\N{U+0bae}\N{U+0bbf}\N{U+0bb4}\N{U+0bcd}",
    native_name => "\N{U+0ba4}\N{U+0bae}\N{U+0bbf}\N{U+0bb4}\N{U+0bcd} \N{U+0b9a}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}\N{U+0b95}\N{U+0baa}\N{U+0bcd}\N{U+0baa}\N{U+0bc2}\N{U+0bb0}\N{U+0bcd}",
    native_script => undef,
    native_territory => "\N{U+0b9a}\N{U+0bbf}\N{U+0b99}\N{U+0bcd}\N{U+0b95}\N{U+0baa}\N{U+0bcd}\N{U+0baa}\N{U+0bc2}\N{U+0bb0}\N{U+0bcd}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.1",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.2",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.3",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "2\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "3\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "4\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.1",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.2",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.3",
      "\N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}.4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "2\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "3\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}",
      "4\N{U+0b86}\N{U+0bae}\N{U+0bcd} \N{U+0b95}\N{U+0bbe}\N{U+0bb2}\N{U+0bbe}\N{U+0ba3}\N{U+0bcd}\N{U+0b9f}\N{U+0bc1}"
    ],
    script => undef,
    territory => "Singapore",
    time_format_full => "a h:mm:ss zzzz",
    time_format_long => "a h:mm:ss z",
    time_format_medium => "a h:mm:ss",
    time_format_short => "a h:mm",
    variant => undef,
    version => 29
  }
  __[ te ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G, E d, MMM y",
      GyMMMd => "G d, MMM y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd-MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E, d, MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d, MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "te",
    date_format_full => "d, MMMM y, EEEE",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "dd-MM-yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0c38}\N{U+0c4b}\N{U+0c2e}",
      "\N{U+0c2e}\N{U+0c02}\N{U+0c17}\N{U+0c33}",
      "\N{U+0c2c}\N{U+0c41}\N{U+0c27}",
      "\N{U+0c17}\N{U+0c41}\N{U+0c30}\N{U+0c41}",
      "\N{U+0c36}\N{U+0c41}\N{U+0c15}\N{U+0c4d}\N{U+0c30}",
      "\N{U+0c36}\N{U+0c28}\N{U+0c3f}",
      "\N{U+0c06}\N{U+0c26}\N{U+0c3f}"
    ],
    day_format_narrow => [
      "\N{U+0c38}\N{U+0c4b}",
      "\N{U+0c2e}",
      "\N{U+0c2c}\N{U+0c41}",
      "\N{U+0c17}\N{U+0c41}",
      "\N{U+0c36}\N{U+0c41}",
      "\N{U+0c36}",
      "\N{U+0c06}"
    ],
    day_format_wide => [
      "\N{U+0c38}\N{U+0c4b}\N{U+0c2e}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c2e}\N{U+0c02}\N{U+0c17}\N{U+0c33}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c2c}\N{U+0c41}\N{U+0c27}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c17}\N{U+0c41}\N{U+0c30}\N{U+0c41}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c36}\N{U+0c41}\N{U+0c15}\N{U+0c4d}\N{U+0c30}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c36}\N{U+0c28}\N{U+0c3f}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c06}\N{U+0c26}\N{U+0c3f}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0c38}\N{U+0c4b}\N{U+0c2e}",
      "\N{U+0c2e}\N{U+0c02}\N{U+0c17}\N{U+0c33}",
      "\N{U+0c2c}\N{U+0c41}\N{U+0c27}",
      "\N{U+0c17}\N{U+0c41}\N{U+0c30}\N{U+0c41}",
      "\N{U+0c36}\N{U+0c41}\N{U+0c15}\N{U+0c4d}\N{U+0c30}",
      "\N{U+0c36}\N{U+0c28}\N{U+0c3f}",
      "\N{U+0c06}\N{U+0c26}\N{U+0c3f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0c38}\N{U+0c4b}",
      "\N{U+0c2e}",
      "\N{U+0c2c}\N{U+0c41}",
      "\N{U+0c17}\N{U+0c41}",
      "\N{U+0c36}\N{U+0c41}",
      "\N{U+0c36}",
      "\N{U+0c06}"
    ],
    day_stand_alone_wide => [
      "\N{U+0c38}\N{U+0c4b}\N{U+0c2e}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c2e}\N{U+0c02}\N{U+0c17}\N{U+0c33}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c2c}\N{U+0c41}\N{U+0c27}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c17}\N{U+0c41}\N{U+0c30}\N{U+0c41}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c36}\N{U+0c41}\N{U+0c15}\N{U+0c4d}\N{U+0c30}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c36}\N{U+0c28}\N{U+0c3f}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c06}\N{U+0c26}\N{U+0c3f}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}"
    ],
    era_abbreviated => [
      "\N{U+0c15}\N{U+0c4d}\N{U+0c30}\N{U+0c40}\N{U+0c2a}\N{U+0c42}",
      "\N{U+0c15}\N{U+0c4d}\N{U+0c30}\N{U+0c40}\N{U+0c36}"
    ],
    era_narrow => [
      "\N{U+0c15}\N{U+0c4d}\N{U+0c30}\N{U+0c40}\N{U+0c2a}\N{U+0c42}",
      "\N{U+0c15}\N{U+0c4d}\N{U+0c30}\N{U+0c40}\N{U+0c36}"
    ],
    era_wide => [
      "\N{U+0c15}\N{U+0c4d}\N{U+0c30}\N{U+0c40}\N{U+0c38}\N{U+0c4d}\N{U+0c24}\N{U+0c41} \N{U+0c2a}\N{U+0c42}\N{U+0c30}\N{U+0c4d}\N{U+0c35}\N{U+0c02}",
      "\N{U+0c15}\N{U+0c4d}\N{U+0c30}\N{U+0c40}\N{U+0c38}\N{U+0c4d}\N{U+0c24}\N{U+0c41} \N{U+0c36}\N{U+0c15}\N{U+0c02}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Telugu",
    month_format_abbreviated => [
      "\N{U+0c1c}\N{U+0c28}",
      "\N{U+0c2b}\N{U+0c3f}\N{U+0c2c}\N{U+0c4d}\N{U+0c30}",
      "\N{U+0c2e}\N{U+0c3e}\N{U+0c30}\N{U+0c4d}\N{U+0c1a}\N{U+0c3f}",
      "\N{U+0c0f}\N{U+0c2a}\N{U+0c4d}\N{U+0c30}\N{U+0c3f}",
      "\N{U+0c2e}\N{U+0c47}",
      "\N{U+0c1c}\N{U+0c42}\N{U+0c28}\N{U+0c4d}",
      "\N{U+0c1c}\N{U+0c41}\N{U+0c32}\N{U+0c48}",
      "\N{U+0c06}\N{U+0c17}",
      "\N{U+0c38}\N{U+0c46}\N{U+0c2a}\N{U+0c4d}\N{U+0c1f}\N{U+0c46}\N{U+0c02}",
      "\N{U+0c05}\N{U+0c15}\N{U+0c4d}\N{U+0c1f}\N{U+0c4b}",
      "\N{U+0c28}\N{U+0c35}\N{U+0c02}",
      "\N{U+0c21}\N{U+0c3f}\N{U+0c38}\N{U+0c46}\N{U+0c02}"
    ],
    month_format_narrow => [
      "\N{U+0c1c}",
      "\N{U+0c2b}\N{U+0c3f}",
      "\N{U+0c2e}\N{U+0c3e}",
      "\N{U+0c0f}",
      "\N{U+0c2e}\N{U+0c47}",
      "\N{U+0c1c}\N{U+0c42}",
      "\N{U+0c1c}\N{U+0c41}",
      "\N{U+0c06}",
      "\N{U+0c38}\N{U+0c46}",
      "\N{U+0c05}",
      "\N{U+0c28}",
      "\N{U+0c21}\N{U+0c3f}"
    ],
    month_format_wide => [
      "\N{U+0c1c}\N{U+0c28}\N{U+0c35}\N{U+0c30}\N{U+0c3f}",
      "\N{U+0c2b}\N{U+0c3f}\N{U+0c2c}\N{U+0c4d}\N{U+0c30}\N{U+0c35}\N{U+0c30}\N{U+0c3f}",
      "\N{U+0c2e}\N{U+0c3e}\N{U+0c30}\N{U+0c4d}\N{U+0c1a}\N{U+0c3f}",
      "\N{U+0c0f}\N{U+0c2a}\N{U+0c4d}\N{U+0c30}\N{U+0c3f}\N{U+0c32}\N{U+0c4d}",
      "\N{U+0c2e}\N{U+0c47}",
      "\N{U+0c1c}\N{U+0c42}\N{U+0c28}\N{U+0c4d}",
      "\N{U+0c1c}\N{U+0c41}\N{U+0c32}\N{U+0c48}",
      "\N{U+0c06}\N{U+0c17}\N{U+0c38}\N{U+0c4d}\N{U+0c1f}\N{U+0c41}",
      "\N{U+0c38}\N{U+0c46}\N{U+0c2a}\N{U+0c4d}\N{U+0c1f}\N{U+0c46}\N{U+0c02}\N{U+0c2c}\N{U+0c30}\N{U+0c4d}",
      "\N{U+0c05}\N{U+0c15}\N{U+0c4d}\N{U+0c1f}\N{U+0c4b}\N{U+0c2c}\N{U+0c30}\N{U+0c4d}",
      "\N{U+0c28}\N{U+0c35}\N{U+0c02}\N{U+0c2c}\N{U+0c30}\N{U+0c4d}",
      "\N{U+0c21}\N{U+0c3f}\N{U+0c38}\N{U+0c46}\N{U+0c02}\N{U+0c2c}\N{U+0c30}\N{U+0c4d}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0c1c}\N{U+0c28}",
      "\N{U+0c2b}\N{U+0c3f}\N{U+0c2c}\N{U+0c4d}\N{U+0c30}",
      "\N{U+0c2e}\N{U+0c3e}\N{U+0c30}\N{U+0c4d}\N{U+0c1a}\N{U+0c3f}",
      "\N{U+0c0f}\N{U+0c2a}\N{U+0c4d}\N{U+0c30}\N{U+0c3f}",
      "\N{U+0c2e}\N{U+0c47}",
      "\N{U+0c1c}\N{U+0c42}\N{U+0c28}\N{U+0c4d}",
      "\N{U+0c1c}\N{U+0c41}\N{U+0c32}\N{U+0c48}",
      "\N{U+0c06}\N{U+0c17}\N{U+0c38}\N{U+0c4d}\N{U+0c1f}\N{U+0c41}",
      "\N{U+0c38}\N{U+0c46}\N{U+0c2a}\N{U+0c4d}\N{U+0c1f}\N{U+0c46}\N{U+0c02}",
      "\N{U+0c05}\N{U+0c15}\N{U+0c4d}\N{U+0c1f}\N{U+0c4b}",
      "\N{U+0c28}\N{U+0c35}\N{U+0c02}",
      "\N{U+0c21}\N{U+0c3f}\N{U+0c38}\N{U+0c46}\N{U+0c02}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0c1c}",
      "\N{U+0c2b}\N{U+0c3f}",
      "\N{U+0c2e}\N{U+0c3e}",
      "\N{U+0c0f}",
      "\N{U+0c2e}\N{U+0c47}",
      "\N{U+0c1c}\N{U+0c42}",
      "\N{U+0c1c}\N{U+0c41}",
      "\N{U+0c06}",
      "\N{U+0c38}\N{U+0c46}",
      "\N{U+0c05}",
      "\N{U+0c28}",
      "\N{U+0c21}\N{U+0c3f}"
    ],
    month_stand_alone_wide => [
      "\N{U+0c1c}\N{U+0c28}\N{U+0c35}\N{U+0c30}\N{U+0c3f}",
      "\N{U+0c2b}\N{U+0c3f}\N{U+0c2c}\N{U+0c4d}\N{U+0c30}\N{U+0c35}\N{U+0c30}\N{U+0c3f}",
      "\N{U+0c2e}\N{U+0c3e}\N{U+0c30}\N{U+0c4d}\N{U+0c1a}\N{U+0c3f}",
      "\N{U+0c0f}\N{U+0c2a}\N{U+0c4d}\N{U+0c30}\N{U+0c3f}\N{U+0c32}\N{U+0c4d}",
      "\N{U+0c2e}\N{U+0c47}",
      "\N{U+0c1c}\N{U+0c42}\N{U+0c28}\N{U+0c4d}",
      "\N{U+0c1c}\N{U+0c41}\N{U+0c32}\N{U+0c48}",
      "\N{U+0c06}\N{U+0c17}\N{U+0c38}\N{U+0c4d}\N{U+0c1f}\N{U+0c41}",
      "\N{U+0c38}\N{U+0c46}\N{U+0c2a}\N{U+0c4d}\N{U+0c1f}\N{U+0c46}\N{U+0c02}\N{U+0c2c}\N{U+0c30}\N{U+0c4d}",
      "\N{U+0c05}\N{U+0c15}\N{U+0c4d}\N{U+0c1f}\N{U+0c4b}\N{U+0c2c}\N{U+0c30}\N{U+0c4d}",
      "\N{U+0c28}\N{U+0c35}\N{U+0c02}\N{U+0c2c}\N{U+0c30}\N{U+0c4d}",
      "\N{U+0c21}\N{U+0c3f}\N{U+0c38}\N{U+0c46}\N{U+0c02}\N{U+0c2c}\N{U+0c30}\N{U+0c4d}"
    ],
    name => "Telugu",
    native_language => "\N{U+0c24}\N{U+0c46}\N{U+0c32}\N{U+0c41}\N{U+0c17}\N{U+0c41}",
    native_name => "\N{U+0c24}\N{U+0c46}\N{U+0c32}\N{U+0c41}\N{U+0c17}\N{U+0c41}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}1",
      "\N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}2",
      "\N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}3",
      "\N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+0c35} \N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}\N{U+0c2e}\N{U+0c3e}\N{U+0c38}\N{U+0c02}",
      "2\N{U+0c35} \N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}\N{U+0c2e}\N{U+0c3e}\N{U+0c38}\N{U+0c02}",
      "3\N{U+0c35} \N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}\N{U+0c2e}\N{U+0c3e}\N{U+0c38}\N{U+0c02}",
      "4\N{U+0c35} \N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}\N{U+0c2e}\N{U+0c3e}\N{U+0c38}\N{U+0c02}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}1",
      "\N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}2",
      "\N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}3",
      "\N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0c2e}\N{U+0c4a}\N{U+0c26}\N{U+0c1f}\N{U+0c3f} \N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}\N{U+0c2e}\N{U+0c3e}\N{U+0c38}\N{U+0c3f}\N{U+0c15}\N{U+0c02}",
      "\N{U+0c30}\N{U+0c46}\N{U+0c02}\N{U+0c21}\N{U+0c35} \N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}\N{U+0c2e}\N{U+0c3e}\N{U+0c38}\N{U+0c3f}\N{U+0c15}\N{U+0c02}",
      "\N{U+0c2e}\N{U+0c42}\N{U+0c21}\N{U+0c35} \N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}\N{U+0c2e}\N{U+0c3e}\N{U+0c38}\N{U+0c3f}\N{U+0c15}\N{U+0c02}",
      "\N{U+0c28}\N{U+0c3e}\N{U+0c32}\N{U+0c4d}\N{U+0c17}\N{U+0c35} \N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}\N{U+0c2e}\N{U+0c3e}\N{U+0c38}\N{U+0c3f}\N{U+0c15}\N{U+0c02}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ te-IN ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G, E d, MMM y",
      GyMMMd => "G d, MMM y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd-MM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, d/M/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E, d, MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d, MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "te-IN",
    date_format_full => "d, MMMM y, EEEE",
    date_format_long => "d MMMM, y",
    date_format_medium => "d MMM, y",
    date_format_short => "dd-MM-yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0c38}\N{U+0c4b}\N{U+0c2e}",
      "\N{U+0c2e}\N{U+0c02}\N{U+0c17}\N{U+0c33}",
      "\N{U+0c2c}\N{U+0c41}\N{U+0c27}",
      "\N{U+0c17}\N{U+0c41}\N{U+0c30}\N{U+0c41}",
      "\N{U+0c36}\N{U+0c41}\N{U+0c15}\N{U+0c4d}\N{U+0c30}",
      "\N{U+0c36}\N{U+0c28}\N{U+0c3f}",
      "\N{U+0c06}\N{U+0c26}\N{U+0c3f}"
    ],
    day_format_narrow => [
      "\N{U+0c38}\N{U+0c4b}",
      "\N{U+0c2e}",
      "\N{U+0c2c}\N{U+0c41}",
      "\N{U+0c17}\N{U+0c41}",
      "\N{U+0c36}\N{U+0c41}",
      "\N{U+0c36}",
      "\N{U+0c06}"
    ],
    day_format_wide => [
      "\N{U+0c38}\N{U+0c4b}\N{U+0c2e}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c2e}\N{U+0c02}\N{U+0c17}\N{U+0c33}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c2c}\N{U+0c41}\N{U+0c27}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c17}\N{U+0c41}\N{U+0c30}\N{U+0c41}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c36}\N{U+0c41}\N{U+0c15}\N{U+0c4d}\N{U+0c30}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c36}\N{U+0c28}\N{U+0c3f}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c06}\N{U+0c26}\N{U+0c3f}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0c38}\N{U+0c4b}\N{U+0c2e}",
      "\N{U+0c2e}\N{U+0c02}\N{U+0c17}\N{U+0c33}",
      "\N{U+0c2c}\N{U+0c41}\N{U+0c27}",
      "\N{U+0c17}\N{U+0c41}\N{U+0c30}\N{U+0c41}",
      "\N{U+0c36}\N{U+0c41}\N{U+0c15}\N{U+0c4d}\N{U+0c30}",
      "\N{U+0c36}\N{U+0c28}\N{U+0c3f}",
      "\N{U+0c06}\N{U+0c26}\N{U+0c3f}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0c38}\N{U+0c4b}",
      "\N{U+0c2e}",
      "\N{U+0c2c}\N{U+0c41}",
      "\N{U+0c17}\N{U+0c41}",
      "\N{U+0c36}\N{U+0c41}",
      "\N{U+0c36}",
      "\N{U+0c06}"
    ],
    day_stand_alone_wide => [
      "\N{U+0c38}\N{U+0c4b}\N{U+0c2e}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c2e}\N{U+0c02}\N{U+0c17}\N{U+0c33}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c2c}\N{U+0c41}\N{U+0c27}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c17}\N{U+0c41}\N{U+0c30}\N{U+0c41}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c36}\N{U+0c41}\N{U+0c15}\N{U+0c4d}\N{U+0c30}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c36}\N{U+0c28}\N{U+0c3f}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}",
      "\N{U+0c06}\N{U+0c26}\N{U+0c3f}\N{U+0c35}\N{U+0c3e}\N{U+0c30}\N{U+0c02}"
    ],
    era_abbreviated => [
      "\N{U+0c15}\N{U+0c4d}\N{U+0c30}\N{U+0c40}\N{U+0c2a}\N{U+0c42}",
      "\N{U+0c15}\N{U+0c4d}\N{U+0c30}\N{U+0c40}\N{U+0c36}"
    ],
    era_narrow => [
      "\N{U+0c15}\N{U+0c4d}\N{U+0c30}\N{U+0c40}\N{U+0c2a}\N{U+0c42}",
      "\N{U+0c15}\N{U+0c4d}\N{U+0c30}\N{U+0c40}\N{U+0c36}"
    ],
    era_wide => [
      "\N{U+0c15}\N{U+0c4d}\N{U+0c30}\N{U+0c40}\N{U+0c38}\N{U+0c4d}\N{U+0c24}\N{U+0c41} \N{U+0c2a}\N{U+0c42}\N{U+0c30}\N{U+0c4d}\N{U+0c35}\N{U+0c02}",
      "\N{U+0c15}\N{U+0c4d}\N{U+0c30}\N{U+0c40}\N{U+0c38}\N{U+0c4d}\N{U+0c24}\N{U+0c41} \N{U+0c36}\N{U+0c15}\N{U+0c02}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%B %d %A %Y",
    glibc_datetime_format => "%B %d %A %Y %p%I.%M.%S %Z",
    glibc_time_12_format => "%p%I.%M.%S %Z",
    glibc_time_format => "%p%I.%M.%S %Z",
    language => "Telugu",
    month_format_abbreviated => [
      "\N{U+0c1c}\N{U+0c28}",
      "\N{U+0c2b}\N{U+0c3f}\N{U+0c2c}\N{U+0c4d}\N{U+0c30}",
      "\N{U+0c2e}\N{U+0c3e}\N{U+0c30}\N{U+0c4d}\N{U+0c1a}\N{U+0c3f}",
      "\N{U+0c0f}\N{U+0c2a}\N{U+0c4d}\N{U+0c30}\N{U+0c3f}",
      "\N{U+0c2e}\N{U+0c47}",
      "\N{U+0c1c}\N{U+0c42}\N{U+0c28}\N{U+0c4d}",
      "\N{U+0c1c}\N{U+0c41}\N{U+0c32}\N{U+0c48}",
      "\N{U+0c06}\N{U+0c17}",
      "\N{U+0c38}\N{U+0c46}\N{U+0c2a}\N{U+0c4d}\N{U+0c1f}\N{U+0c46}\N{U+0c02}",
      "\N{U+0c05}\N{U+0c15}\N{U+0c4d}\N{U+0c1f}\N{U+0c4b}",
      "\N{U+0c28}\N{U+0c35}\N{U+0c02}",
      "\N{U+0c21}\N{U+0c3f}\N{U+0c38}\N{U+0c46}\N{U+0c02}"
    ],
    month_format_narrow => [
      "\N{U+0c1c}",
      "\N{U+0c2b}\N{U+0c3f}",
      "\N{U+0c2e}\N{U+0c3e}",
      "\N{U+0c0f}",
      "\N{U+0c2e}\N{U+0c47}",
      "\N{U+0c1c}\N{U+0c42}",
      "\N{U+0c1c}\N{U+0c41}",
      "\N{U+0c06}",
      "\N{U+0c38}\N{U+0c46}",
      "\N{U+0c05}",
      "\N{U+0c28}",
      "\N{U+0c21}\N{U+0c3f}"
    ],
    month_format_wide => [
      "\N{U+0c1c}\N{U+0c28}\N{U+0c35}\N{U+0c30}\N{U+0c3f}",
      "\N{U+0c2b}\N{U+0c3f}\N{U+0c2c}\N{U+0c4d}\N{U+0c30}\N{U+0c35}\N{U+0c30}\N{U+0c3f}",
      "\N{U+0c2e}\N{U+0c3e}\N{U+0c30}\N{U+0c4d}\N{U+0c1a}\N{U+0c3f}",
      "\N{U+0c0f}\N{U+0c2a}\N{U+0c4d}\N{U+0c30}\N{U+0c3f}\N{U+0c32}\N{U+0c4d}",
      "\N{U+0c2e}\N{U+0c47}",
      "\N{U+0c1c}\N{U+0c42}\N{U+0c28}\N{U+0c4d}",
      "\N{U+0c1c}\N{U+0c41}\N{U+0c32}\N{U+0c48}",
      "\N{U+0c06}\N{U+0c17}\N{U+0c38}\N{U+0c4d}\N{U+0c1f}\N{U+0c41}",
      "\N{U+0c38}\N{U+0c46}\N{U+0c2a}\N{U+0c4d}\N{U+0c1f}\N{U+0c46}\N{U+0c02}\N{U+0c2c}\N{U+0c30}\N{U+0c4d}",
      "\N{U+0c05}\N{U+0c15}\N{U+0c4d}\N{U+0c1f}\N{U+0c4b}\N{U+0c2c}\N{U+0c30}\N{U+0c4d}",
      "\N{U+0c28}\N{U+0c35}\N{U+0c02}\N{U+0c2c}\N{U+0c30}\N{U+0c4d}",
      "\N{U+0c21}\N{U+0c3f}\N{U+0c38}\N{U+0c46}\N{U+0c02}\N{U+0c2c}\N{U+0c30}\N{U+0c4d}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0c1c}\N{U+0c28}",
      "\N{U+0c2b}\N{U+0c3f}\N{U+0c2c}\N{U+0c4d}\N{U+0c30}",
      "\N{U+0c2e}\N{U+0c3e}\N{U+0c30}\N{U+0c4d}\N{U+0c1a}\N{U+0c3f}",
      "\N{U+0c0f}\N{U+0c2a}\N{U+0c4d}\N{U+0c30}\N{U+0c3f}",
      "\N{U+0c2e}\N{U+0c47}",
      "\N{U+0c1c}\N{U+0c42}\N{U+0c28}\N{U+0c4d}",
      "\N{U+0c1c}\N{U+0c41}\N{U+0c32}\N{U+0c48}",
      "\N{U+0c06}\N{U+0c17}\N{U+0c38}\N{U+0c4d}\N{U+0c1f}\N{U+0c41}",
      "\N{U+0c38}\N{U+0c46}\N{U+0c2a}\N{U+0c4d}\N{U+0c1f}\N{U+0c46}\N{U+0c02}",
      "\N{U+0c05}\N{U+0c15}\N{U+0c4d}\N{U+0c1f}\N{U+0c4b}",
      "\N{U+0c28}\N{U+0c35}\N{U+0c02}",
      "\N{U+0c21}\N{U+0c3f}\N{U+0c38}\N{U+0c46}\N{U+0c02}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0c1c}",
      "\N{U+0c2b}\N{U+0c3f}",
      "\N{U+0c2e}\N{U+0c3e}",
      "\N{U+0c0f}",
      "\N{U+0c2e}\N{U+0c47}",
      "\N{U+0c1c}\N{U+0c42}",
      "\N{U+0c1c}\N{U+0c41}",
      "\N{U+0c06}",
      "\N{U+0c38}\N{U+0c46}",
      "\N{U+0c05}",
      "\N{U+0c28}",
      "\N{U+0c21}\N{U+0c3f}"
    ],
    month_stand_alone_wide => [
      "\N{U+0c1c}\N{U+0c28}\N{U+0c35}\N{U+0c30}\N{U+0c3f}",
      "\N{U+0c2b}\N{U+0c3f}\N{U+0c2c}\N{U+0c4d}\N{U+0c30}\N{U+0c35}\N{U+0c30}\N{U+0c3f}",
      "\N{U+0c2e}\N{U+0c3e}\N{U+0c30}\N{U+0c4d}\N{U+0c1a}\N{U+0c3f}",
      "\N{U+0c0f}\N{U+0c2a}\N{U+0c4d}\N{U+0c30}\N{U+0c3f}\N{U+0c32}\N{U+0c4d}",
      "\N{U+0c2e}\N{U+0c47}",
      "\N{U+0c1c}\N{U+0c42}\N{U+0c28}\N{U+0c4d}",
      "\N{U+0c1c}\N{U+0c41}\N{U+0c32}\N{U+0c48}",
      "\N{U+0c06}\N{U+0c17}\N{U+0c38}\N{U+0c4d}\N{U+0c1f}\N{U+0c41}",
      "\N{U+0c38}\N{U+0c46}\N{U+0c2a}\N{U+0c4d}\N{U+0c1f}\N{U+0c46}\N{U+0c02}\N{U+0c2c}\N{U+0c30}\N{U+0c4d}",
      "\N{U+0c05}\N{U+0c15}\N{U+0c4d}\N{U+0c1f}\N{U+0c4b}\N{U+0c2c}\N{U+0c30}\N{U+0c4d}",
      "\N{U+0c28}\N{U+0c35}\N{U+0c02}\N{U+0c2c}\N{U+0c30}\N{U+0c4d}",
      "\N{U+0c21}\N{U+0c3f}\N{U+0c38}\N{U+0c46}\N{U+0c02}\N{U+0c2c}\N{U+0c30}\N{U+0c4d}"
    ],
    name => "Telugu India",
    native_language => "\N{U+0c24}\N{U+0c46}\N{U+0c32}\N{U+0c41}\N{U+0c17}\N{U+0c41}",
    native_name => "\N{U+0c24}\N{U+0c46}\N{U+0c32}\N{U+0c41}\N{U+0c17}\N{U+0c41} \N{U+0c2d}\N{U+0c3e}\N{U+0c30}\N{U+0c24} \N{U+0c26}\N{U+0c47}\N{U+0c36}\N{U+0c02}",
    native_script => undef,
    native_territory => "\N{U+0c2d}\N{U+0c3e}\N{U+0c30}\N{U+0c24} \N{U+0c26}\N{U+0c47}\N{U+0c36}\N{U+0c02}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}1",
      "\N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}2",
      "\N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}3",
      "\N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1\N{U+0c35} \N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}\N{U+0c2e}\N{U+0c3e}\N{U+0c38}\N{U+0c02}",
      "2\N{U+0c35} \N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}\N{U+0c2e}\N{U+0c3e}\N{U+0c38}\N{U+0c02}",
      "3\N{U+0c35} \N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}\N{U+0c2e}\N{U+0c3e}\N{U+0c38}\N{U+0c02}",
      "4\N{U+0c35} \N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}\N{U+0c2e}\N{U+0c3e}\N{U+0c38}\N{U+0c02}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}1",
      "\N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}2",
      "\N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}3",
      "\N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0c2e}\N{U+0c4a}\N{U+0c26}\N{U+0c1f}\N{U+0c3f} \N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}\N{U+0c2e}\N{U+0c3e}\N{U+0c38}\N{U+0c3f}\N{U+0c15}\N{U+0c02}",
      "\N{U+0c30}\N{U+0c46}\N{U+0c02}\N{U+0c21}\N{U+0c35} \N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}\N{U+0c2e}\N{U+0c3e}\N{U+0c38}\N{U+0c3f}\N{U+0c15}\N{U+0c02}",
      "\N{U+0c2e}\N{U+0c42}\N{U+0c21}\N{U+0c35} \N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}\N{U+0c2e}\N{U+0c3e}\N{U+0c38}\N{U+0c3f}\N{U+0c15}\N{U+0c02}",
      "\N{U+0c28}\N{U+0c3e}\N{U+0c32}\N{U+0c4d}\N{U+0c17}\N{U+0c35} \N{U+0c24}\N{U+0c4d}\N{U+0c30}\N{U+0c48}\N{U+0c2e}\N{U+0c3e}\N{U+0c38}\N{U+0c3f}\N{U+0c15}\N{U+0c02}"
    ],
    script => undef,
    territory => "India",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ teo ]__
  {
    am_pm_abbreviated => [
      "Taparachu",
      "Ebongi"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "teo",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Bar",
      "Aar",
      "Uni",
      "Ung",
      "Kan",
      "Sab",
      "Jum"
    ],
    day_format_narrow => [
      "B",
      "A",
      "U",
      "U",
      "K",
      "S",
      "J"
    ],
    day_format_wide => [
      "Nakaebarasa",
      "Nakaare",
      "Nakauni",
      "Nakaung\N{U+2019}on",
      "Nakakany",
      "Nakasabiti",
      "Nakaejuma"
    ],
    day_stand_alone_abbreviated => [
      "Bar",
      "Aar",
      "Uni",
      "Ung",
      "Kan",
      "Sab",
      "Jum"
    ],
    day_stand_alone_narrow => [
      "B",
      "A",
      "U",
      "U",
      "K",
      "S",
      "J"
    ],
    day_stand_alone_wide => [
      "Nakaebarasa",
      "Nakaare",
      "Nakauni",
      "Nakaung\N{U+2019}on",
      "Nakakany",
      "Nakasabiti",
      "Nakaejuma"
    ],
    era_abbreviated => [
      "KK",
      "BK"
    ],
    era_narrow => [
      "KK",
      "BK"
    ],
    era_wide => [
      "Kabla ya Christo",
      "Baada ya Christo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Teso",
    month_format_abbreviated => [
      "Rar",
      "Muk",
      "Kwa",
      "Dun",
      "Mar",
      "Mod",
      "Jol",
      "Ped",
      "Sok",
      "Tib",
      "Lab",
      "Poo"
    ],
    month_format_narrow => [
      "R",
      "M",
      "K",
      "D",
      "M",
      "M",
      "J",
      "P",
      "S",
      "T",
      "L",
      "P"
    ],
    month_format_wide => [
      "Orara",
      "Omuk",
      "Okwamg\N{U+2019}",
      "Odung\N{U+2019}el",
      "Omaruk",
      "Omodok\N{U+2019}king\N{U+2019}ol",
      "Ojola",
      "Opedel",
      "Osokosokoma",
      "Otibar",
      "Olabor",
      "Opoo"
    ],
    month_stand_alone_abbreviated => [
      "Rar",
      "Muk",
      "Kwa",
      "Dun",
      "Mar",
      "Mod",
      "Jol",
      "Ped",
      "Sok",
      "Tib",
      "Lab",
      "Poo"
    ],
    month_stand_alone_narrow => [
      "R",
      "M",
      "K",
      "D",
      "M",
      "M",
      "J",
      "P",
      "S",
      "T",
      "L",
      "P"
    ],
    month_stand_alone_wide => [
      "Orara",
      "Omuk",
      "Okwamg\N{U+2019}",
      "Odung\N{U+2019}el",
      "Omaruk",
      "Omodok\N{U+2019}king\N{U+2019}ol",
      "Ojola",
      "Opedel",
      "Osokosokoma",
      "Otibar",
      "Olabor",
      "Opoo"
    ],
    name => "Teso",
    native_language => "Kiteso",
    native_name => "Kiteso",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Akwota abe",
      "Akwota Aane",
      "Akwota auni",
      "Akwota Aung\N{U+2019}on"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Akwota abe",
      "Akwota Aane",
      "Akwota auni",
      "Akwota Aung\N{U+2019}on"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ teo-KE ]__
  {
    am_pm_abbreviated => [
      "Taparachu",
      "Ebongi"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "teo-KE",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Bar",
      "Aar",
      "Uni",
      "Ung",
      "Kan",
      "Sab",
      "Jum"
    ],
    day_format_narrow => [
      "B",
      "A",
      "U",
      "U",
      "K",
      "S",
      "J"
    ],
    day_format_wide => [
      "Nakaebarasa",
      "Nakaare",
      "Nakauni",
      "Nakaung\N{U+2019}on",
      "Nakakany",
      "Nakasabiti",
      "Nakaejuma"
    ],
    day_stand_alone_abbreviated => [
      "Bar",
      "Aar",
      "Uni",
      "Ung",
      "Kan",
      "Sab",
      "Jum"
    ],
    day_stand_alone_narrow => [
      "B",
      "A",
      "U",
      "U",
      "K",
      "S",
      "J"
    ],
    day_stand_alone_wide => [
      "Nakaebarasa",
      "Nakaare",
      "Nakauni",
      "Nakaung\N{U+2019}on",
      "Nakakany",
      "Nakasabiti",
      "Nakaejuma"
    ],
    era_abbreviated => [
      "KK",
      "BK"
    ],
    era_narrow => [
      "KK",
      "BK"
    ],
    era_wide => [
      "Kabla ya Christo",
      "Baada ya Christo"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Teso",
    month_format_abbreviated => [
      "Rar",
      "Muk",
      "Kwa",
      "Dun",
      "Mar",
      "Mod",
      "Jol",
      "Ped",
      "Sok",
      "Tib",
      "Lab",
      "Poo"
    ],
    month_format_narrow => [
      "R",
      "M",
      "K",
      "D",
      "M",
      "M",
      "J",
      "P",
      "S",
      "T",
      "L",
      "P"
    ],
    month_format_wide => [
      "Orara",
      "Omuk",
      "Okwamg\N{U+2019}",
      "Odung\N{U+2019}el",
      "Omaruk",
      "Omodok\N{U+2019}king\N{U+2019}ol",
      "Ojola",
      "Opedel",
      "Osokosokoma",
      "Otibar",
      "Olabor",
      "Opoo"
    ],
    month_stand_alone_abbreviated => [
      "Rar",
      "Muk",
      "Kwa",
      "Dun",
      "Mar",
      "Mod",
      "Jol",
      "Ped",
      "Sok",
      "Tib",
      "Lab",
      "Poo"
    ],
    month_stand_alone_narrow => [
      "R",
      "M",
      "K",
      "D",
      "M",
      "M",
      "J",
      "P",
      "S",
      "T",
      "L",
      "P"
    ],
    month_stand_alone_wide => [
      "Orara",
      "Omuk",
      "Okwamg\N{U+2019}",
      "Odung\N{U+2019}el",
      "Omaruk",
      "Omodok\N{U+2019}king\N{U+2019}ol",
      "Ojola",
      "Opedel",
      "Osokosokoma",
      "Otibar",
      "Olabor",
      "Opoo"
    ],
    name => "Teso Kenya",
    native_language => "Kiteso",
    native_name => "Kiteso Kenia",
    native_script => undef,
    native_territory => "Kenia",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Akwota abe",
      "Akwota Aane",
      "Akwota auni",
      "Akwota Aung\N{U+2019}on"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Akwota abe",
      "Akwota Aane",
      "Akwota auni",
      "Akwota Aung\N{U+2019}on"
    ],
    script => undef,
    territory => "Kenya",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ teo-UG ]__
  {
    am_pm_abbreviated => [
      "Taparachu",
      "Ebongi"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "teo-UG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Bar",
      "Aar",
      "Uni",
      "Ung",
      "Kan",
      "Sab",
      "Jum"
    ],
    day_format_narrow => [
      "B",
      "A",
      "U",
      "U",
      "K",
      "S",
      "J"
    ],
    day_format_wide => [
      "Nakaebarasa",
      "Nakaare",
      "Nakauni",
      "Nakaung\N{U+2019}on",
      "Nakakany",
      "Nakasabiti",
      "Nakaejuma"
    ],
    day_stand_alone_abbreviated => [
      "Bar",
      "Aar",
      "Uni",
      "Ung",
      "Kan",
      "Sab",
      "Jum"
    ],
    day_stand_alone_narrow => [
      "B",
      "A",
      "U",
      "U",
      "K",
      "S",
      "J"
    ],
    day_stand_alone_wide => [
      "Nakaebarasa",
      "Nakaare",
      "Nakauni",
      "Nakaung\N{U+2019}on",
      "Nakakany",
      "Nakasabiti",
      "Nakaejuma"
    ],
    era_abbreviated => [
      "KK",
      "BK"
    ],
    era_narrow => [
      "KK",
      "BK"
    ],
    era_wide => [
      "Kabla ya Christo",
      "Baada ya Christo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Teso",
    month_format_abbreviated => [
      "Rar",
      "Muk",
      "Kwa",
      "Dun",
      "Mar",
      "Mod",
      "Jol",
      "Ped",
      "Sok",
      "Tib",
      "Lab",
      "Poo"
    ],
    month_format_narrow => [
      "R",
      "M",
      "K",
      "D",
      "M",
      "M",
      "J",
      "P",
      "S",
      "T",
      "L",
      "P"
    ],
    month_format_wide => [
      "Orara",
      "Omuk",
      "Okwamg\N{U+2019}",
      "Odung\N{U+2019}el",
      "Omaruk",
      "Omodok\N{U+2019}king\N{U+2019}ol",
      "Ojola",
      "Opedel",
      "Osokosokoma",
      "Otibar",
      "Olabor",
      "Opoo"
    ],
    month_stand_alone_abbreviated => [
      "Rar",
      "Muk",
      "Kwa",
      "Dun",
      "Mar",
      "Mod",
      "Jol",
      "Ped",
      "Sok",
      "Tib",
      "Lab",
      "Poo"
    ],
    month_stand_alone_narrow => [
      "R",
      "M",
      "K",
      "D",
      "M",
      "M",
      "J",
      "P",
      "S",
      "T",
      "L",
      "P"
    ],
    month_stand_alone_wide => [
      "Orara",
      "Omuk",
      "Okwamg\N{U+2019}",
      "Odung\N{U+2019}el",
      "Omaruk",
      "Omodok\N{U+2019}king\N{U+2019}ol",
      "Ojola",
      "Opedel",
      "Osokosokoma",
      "Otibar",
      "Olabor",
      "Opoo"
    ],
    name => "Teso Uganda",
    native_language => "Kiteso",
    native_name => "Kiteso Uganda",
    native_script => undef,
    native_territory => "Uganda",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Akwota abe",
      "Akwota Aane",
      "Akwota auni",
      "Akwota Aung\N{U+2019}on"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Akwota abe",
      "Akwota Aane",
      "Akwota auni",
      "Akwota Aung\N{U+2019}on"
    ],
    script => undef,
    territory => "Uganda",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ th ]__
  {
    am_pm_abbreviated => [
      "\N{U+0e01}\N{U+0e48}\N{U+0e2d}\N{U+0e19}\N{U+0e40}\N{U+0e17}\N{U+0e35}\N{U+0e48}\N{U+0e22}\N{U+0e07}",
      "\N{U+0e2b}\N{U+0e25}\N{U+0e31}\N{U+0e07}\N{U+0e40}\N{U+0e17}\N{U+0e35}\N{U+0e48}\N{U+0e22}\N{U+0e07}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm \N{U+0e19}.",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "MMM G y",
      GyMMMEEEEd => "EEEE\N{U+0e17}\N{U+0e35}\N{U+0e48} d MMM G y",
      GyMMMEd => "E d MMM G y",
      GyMMMd => "d MMM G y",
      H => "HH",
      Hm => "HH:mm \N{U+0e19}.",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEEEEd => "EEEE\N{U+0e17}\N{U+0e35}\N{U+0e48} d MMM",
      MMMEd => "E d MMM",
      MMMMEEEEd => "EEEE\N{U+0e17}\N{U+0e35}\N{U+0e48} d MMMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEEEEd => "EEEE\N{U+0e17}\N{U+0e35}\N{U+0e48} d MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM G y",
      yMMMMEEEEd => "EEEE\N{U+0e17}\N{U+0e35}\N{U+0e48} d MMMM G y",
      yMMMMEd => "E d MMMM G y",
      yMMMMd => "d MMMM G y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ G y"
    },
    code => "th",
    date_format_full => "EEEE\N{U+0e17}\N{U+0e35}\N{U+0e48} d MMMM G y",
    date_format_long => "d MMMM G y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0e08}.",
      "\N{U+0e2d}.",
      "\N{U+0e1e}.",
      "\N{U+0e1e}\N{U+0e24}.",
      "\N{U+0e28}.",
      "\N{U+0e2a}.",
      "\N{U+0e2d}\N{U+0e32}."
    ],
    day_format_narrow => [
      "\N{U+0e08}",
      "\N{U+0e2d}",
      "\N{U+0e1e}",
      "\N{U+0e1e}\N{U+0e24}",
      "\N{U+0e28}",
      "\N{U+0e2a}",
      "\N{U+0e2d}\N{U+0e32}"
    ],
    day_format_wide => [
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e08}\N{U+0e31}\N{U+0e19}\N{U+0e17}\N{U+0e23}\N{U+0e4c}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e2d}\N{U+0e31}\N{U+0e07}\N{U+0e04}\N{U+0e32}\N{U+0e23}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e1e}\N{U+0e38}\N{U+0e18}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e1e}\N{U+0e24}\N{U+0e2b}\N{U+0e31}\N{U+0e2a}\N{U+0e1a}\N{U+0e14}\N{U+0e35}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e28}\N{U+0e38}\N{U+0e01}\N{U+0e23}\N{U+0e4c}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e40}\N{U+0e2a}\N{U+0e32}\N{U+0e23}\N{U+0e4c}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e2d}\N{U+0e32}\N{U+0e17}\N{U+0e34}\N{U+0e15}\N{U+0e22}\N{U+0e4c}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0e08}.",
      "\N{U+0e2d}.",
      "\N{U+0e1e}.",
      "\N{U+0e1e}\N{U+0e24}.",
      "\N{U+0e28}.",
      "\N{U+0e2a}.",
      "\N{U+0e2d}\N{U+0e32}."
    ],
    day_stand_alone_narrow => [
      "\N{U+0e08}",
      "\N{U+0e2d}",
      "\N{U+0e1e}",
      "\N{U+0e1e}\N{U+0e24}",
      "\N{U+0e28}",
      "\N{U+0e2a}",
      "\N{U+0e2d}\N{U+0e32}"
    ],
    day_stand_alone_wide => [
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e08}\N{U+0e31}\N{U+0e19}\N{U+0e17}\N{U+0e23}\N{U+0e4c}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e2d}\N{U+0e31}\N{U+0e07}\N{U+0e04}\N{U+0e32}\N{U+0e23}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e1e}\N{U+0e38}\N{U+0e18}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e1e}\N{U+0e24}\N{U+0e2b}\N{U+0e31}\N{U+0e2a}\N{U+0e1a}\N{U+0e14}\N{U+0e35}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e28}\N{U+0e38}\N{U+0e01}\N{U+0e23}\N{U+0e4c}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e40}\N{U+0e2a}\N{U+0e32}\N{U+0e23}\N{U+0e4c}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e2d}\N{U+0e32}\N{U+0e17}\N{U+0e34}\N{U+0e15}\N{U+0e22}\N{U+0e4c}"
    ],
    era_abbreviated => [
      "\N{U+0e1b}\N{U+0e35}\N{U+0e01}\N{U+0e48}\N{U+0e2d}\N{U+0e19} \N{U+0e04}.\N{U+0e28}.",
      "\N{U+0e04}.\N{U+0e28}."
    ],
    era_narrow => [
      "\N{U+0e01}\N{U+0e48}\N{U+0e2d}\N{U+0e19} \N{U+0e04}.\N{U+0e28}.",
      "\N{U+0e04}.\N{U+0e28}."
    ],
    era_wide => [
      "\N{U+0e1b}\N{U+0e35}\N{U+0e01}\N{U+0e48}\N{U+0e2d}\N{U+0e19}\N{U+0e04}\N{U+0e23}\N{U+0e34}\N{U+0e2a}\N{U+0e15}\N{U+0e4c}\N{U+0e28}\N{U+0e31}\N{U+0e01}\N{U+0e23}\N{U+0e32}\N{U+0e0a}",
      "\N{U+0e04}\N{U+0e23}\N{U+0e34}\N{U+0e2a}\N{U+0e15}\N{U+0e4c}\N{U+0e28}\N{U+0e31}\N{U+0e01}\N{U+0e23}\N{U+0e32}\N{U+0e0a}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Thai",
    month_format_abbreviated => [
      "\N{U+0e21}.\N{U+0e04}.",
      "\N{U+0e01}.\N{U+0e1e}.",
      "\N{U+0e21}\N{U+0e35}.\N{U+0e04}.",
      "\N{U+0e40}\N{U+0e21}.\N{U+0e22}.",
      "\N{U+0e1e}.\N{U+0e04}.",
      "\N{U+0e21}\N{U+0e34}.\N{U+0e22}.",
      "\N{U+0e01}.\N{U+0e04}.",
      "\N{U+0e2a}.\N{U+0e04}.",
      "\N{U+0e01}.\N{U+0e22}.",
      "\N{U+0e15}.\N{U+0e04}.",
      "\N{U+0e1e}.\N{U+0e22}.",
      "\N{U+0e18}.\N{U+0e04}."
    ],
    month_format_narrow => [
      "\N{U+0e21}.\N{U+0e04}.",
      "\N{U+0e01}.\N{U+0e1e}.",
      "\N{U+0e21}\N{U+0e35}.\N{U+0e04}.",
      "\N{U+0e40}\N{U+0e21}.\N{U+0e22}.",
      "\N{U+0e1e}.\N{U+0e04}.",
      "\N{U+0e21}\N{U+0e34}.\N{U+0e22}.",
      "\N{U+0e01}.\N{U+0e04}.",
      "\N{U+0e2a}.\N{U+0e04}.",
      "\N{U+0e01}.\N{U+0e22}.",
      "\N{U+0e15}.\N{U+0e04}.",
      "\N{U+0e1e}.\N{U+0e22}.",
      "\N{U+0e18}.\N{U+0e04}."
    ],
    month_format_wide => [
      "\N{U+0e21}\N{U+0e01}\N{U+0e23}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e01}\N{U+0e38}\N{U+0e21}\N{U+0e20}\N{U+0e32}\N{U+0e1e}\N{U+0e31}\N{U+0e19}\N{U+0e18}\N{U+0e4c}",
      "\N{U+0e21}\N{U+0e35}\N{U+0e19}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e40}\N{U+0e21}\N{U+0e29}\N{U+0e32}\N{U+0e22}\N{U+0e19}",
      "\N{U+0e1e}\N{U+0e24}\N{U+0e29}\N{U+0e20}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e21}\N{U+0e34}\N{U+0e16}\N{U+0e38}\N{U+0e19}\N{U+0e32}\N{U+0e22}\N{U+0e19}",
      "\N{U+0e01}\N{U+0e23}\N{U+0e01}\N{U+0e0e}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e2a}\N{U+0e34}\N{U+0e07}\N{U+0e2b}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e01}\N{U+0e31}\N{U+0e19}\N{U+0e22}\N{U+0e32}\N{U+0e22}\N{U+0e19}",
      "\N{U+0e15}\N{U+0e38}\N{U+0e25}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e1e}\N{U+0e24}\N{U+0e28}\N{U+0e08}\N{U+0e34}\N{U+0e01}\N{U+0e32}\N{U+0e22}\N{U+0e19}",
      "\N{U+0e18}\N{U+0e31}\N{U+0e19}\N{U+0e27}\N{U+0e32}\N{U+0e04}\N{U+0e21}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0e21}.\N{U+0e04}.",
      "\N{U+0e01}.\N{U+0e1e}.",
      "\N{U+0e21}\N{U+0e35}.\N{U+0e04}.",
      "\N{U+0e40}\N{U+0e21}.\N{U+0e22}.",
      "\N{U+0e1e}.\N{U+0e04}.",
      "\N{U+0e21}\N{U+0e34}.\N{U+0e22}.",
      "\N{U+0e01}.\N{U+0e04}.",
      "\N{U+0e2a}.\N{U+0e04}.",
      "\N{U+0e01}.\N{U+0e22}.",
      "\N{U+0e15}.\N{U+0e04}.",
      "\N{U+0e1e}.\N{U+0e22}.",
      "\N{U+0e18}.\N{U+0e04}."
    ],
    month_stand_alone_narrow => [
      "\N{U+0e21}.\N{U+0e04}.",
      "\N{U+0e01}.\N{U+0e1e}.",
      "\N{U+0e21}\N{U+0e35}.\N{U+0e04}.",
      "\N{U+0e40}\N{U+0e21}.\N{U+0e22}.",
      "\N{U+0e1e}.\N{U+0e04}.",
      "\N{U+0e21}\N{U+0e34}.\N{U+0e22}.",
      "\N{U+0e01}.\N{U+0e04}.",
      "\N{U+0e2a}.\N{U+0e04}.",
      "\N{U+0e01}.\N{U+0e22}.",
      "\N{U+0e15}.\N{U+0e04}.",
      "\N{U+0e1e}.\N{U+0e22}.",
      "\N{U+0e18}.\N{U+0e04}."
    ],
    month_stand_alone_wide => [
      "\N{U+0e21}\N{U+0e01}\N{U+0e23}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e01}\N{U+0e38}\N{U+0e21}\N{U+0e20}\N{U+0e32}\N{U+0e1e}\N{U+0e31}\N{U+0e19}\N{U+0e18}\N{U+0e4c}",
      "\N{U+0e21}\N{U+0e35}\N{U+0e19}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e40}\N{U+0e21}\N{U+0e29}\N{U+0e32}\N{U+0e22}\N{U+0e19}",
      "\N{U+0e1e}\N{U+0e24}\N{U+0e29}\N{U+0e20}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e21}\N{U+0e34}\N{U+0e16}\N{U+0e38}\N{U+0e19}\N{U+0e32}\N{U+0e22}\N{U+0e19}",
      "\N{U+0e01}\N{U+0e23}\N{U+0e01}\N{U+0e0e}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e2a}\N{U+0e34}\N{U+0e07}\N{U+0e2b}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e01}\N{U+0e31}\N{U+0e19}\N{U+0e22}\N{U+0e32}\N{U+0e22}\N{U+0e19}",
      "\N{U+0e15}\N{U+0e38}\N{U+0e25}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e1e}\N{U+0e24}\N{U+0e28}\N{U+0e08}\N{U+0e34}\N{U+0e01}\N{U+0e32}\N{U+0e22}\N{U+0e19}",
      "\N{U+0e18}\N{U+0e31}\N{U+0e19}\N{U+0e27}\N{U+0e32}\N{U+0e04}\N{U+0e21}"
    ],
    name => "Thai",
    native_language => "\N{U+0e44}\N{U+0e17}\N{U+0e22}",
    native_name => "\N{U+0e44}\N{U+0e17}\N{U+0e22}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 1",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 2",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 3",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 1",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 2",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 3",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 1",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 2",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 3",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 1",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 2",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 3",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H \N{U+0e19}\N{U+0e32}\N{U+0e2c}\N{U+0e34}\N{U+0e01}\N{U+0e32} mm \N{U+0e19}\N{U+0e32}\N{U+0e17}\N{U+0e35} ss \N{U+0e27}\N{U+0e34}\N{U+0e19}\N{U+0e32}\N{U+0e17}\N{U+0e35} zzzz",
    time_format_long => "H \N{U+0e19}\N{U+0e32}\N{U+0e2c}\N{U+0e34}\N{U+0e01}\N{U+0e32} mm \N{U+0e19}\N{U+0e32}\N{U+0e17}\N{U+0e35} ss \N{U+0e27}\N{U+0e34}\N{U+0e19}\N{U+0e32}\N{U+0e17}\N{U+0e35} z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ th-TH ]__
  {
    am_pm_abbreviated => [
      "\N{U+0e01}\N{U+0e48}\N{U+0e2d}\N{U+0e19}\N{U+0e40}\N{U+0e17}\N{U+0e35}\N{U+0e48}\N{U+0e22}\N{U+0e07}",
      "\N{U+0e2b}\N{U+0e25}\N{U+0e31}\N{U+0e07}\N{U+0e40}\N{U+0e17}\N{U+0e35}\N{U+0e48}\N{U+0e22}\N{U+0e07}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm \N{U+0e19}.",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "MMM G y",
      GyMMMEEEEd => "EEEE\N{U+0e17}\N{U+0e35}\N{U+0e48} d MMM G y",
      GyMMMEd => "E d MMM G y",
      GyMMMd => "d MMM G y",
      H => "HH",
      Hm => "HH:mm \N{U+0e19}.",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEEEEd => "EEEE\N{U+0e17}\N{U+0e35}\N{U+0e48} d MMM",
      MMMEd => "E d MMM",
      MMMMEEEEd => "EEEE\N{U+0e17}\N{U+0e35}\N{U+0e48} d MMMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEEEEd => "EEEE\N{U+0e17}\N{U+0e35}\N{U+0e48} d MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM G y",
      yMMMMEEEEd => "EEEE\N{U+0e17}\N{U+0e35}\N{U+0e48} d MMMM G y",
      yMMMMEd => "E d MMMM G y",
      yMMMMd => "d MMMM G y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ G y"
    },
    code => "th-TH",
    date_format_full => "EEEE\N{U+0e17}\N{U+0e35}\N{U+0e48} d MMMM G y",
    date_format_long => "d MMMM G y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0e08}.",
      "\N{U+0e2d}.",
      "\N{U+0e1e}.",
      "\N{U+0e1e}\N{U+0e24}.",
      "\N{U+0e28}.",
      "\N{U+0e2a}.",
      "\N{U+0e2d}\N{U+0e32}."
    ],
    day_format_narrow => [
      "\N{U+0e08}",
      "\N{U+0e2d}",
      "\N{U+0e1e}",
      "\N{U+0e1e}\N{U+0e24}",
      "\N{U+0e28}",
      "\N{U+0e2a}",
      "\N{U+0e2d}\N{U+0e32}"
    ],
    day_format_wide => [
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e08}\N{U+0e31}\N{U+0e19}\N{U+0e17}\N{U+0e23}\N{U+0e4c}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e2d}\N{U+0e31}\N{U+0e07}\N{U+0e04}\N{U+0e32}\N{U+0e23}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e1e}\N{U+0e38}\N{U+0e18}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e1e}\N{U+0e24}\N{U+0e2b}\N{U+0e31}\N{U+0e2a}\N{U+0e1a}\N{U+0e14}\N{U+0e35}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e28}\N{U+0e38}\N{U+0e01}\N{U+0e23}\N{U+0e4c}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e40}\N{U+0e2a}\N{U+0e32}\N{U+0e23}\N{U+0e4c}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e2d}\N{U+0e32}\N{U+0e17}\N{U+0e34}\N{U+0e15}\N{U+0e22}\N{U+0e4c}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0e08}.",
      "\N{U+0e2d}.",
      "\N{U+0e1e}.",
      "\N{U+0e1e}\N{U+0e24}.",
      "\N{U+0e28}.",
      "\N{U+0e2a}.",
      "\N{U+0e2d}\N{U+0e32}."
    ],
    day_stand_alone_narrow => [
      "\N{U+0e08}",
      "\N{U+0e2d}",
      "\N{U+0e1e}",
      "\N{U+0e1e}\N{U+0e24}",
      "\N{U+0e28}",
      "\N{U+0e2a}",
      "\N{U+0e2d}\N{U+0e32}"
    ],
    day_stand_alone_wide => [
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e08}\N{U+0e31}\N{U+0e19}\N{U+0e17}\N{U+0e23}\N{U+0e4c}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e2d}\N{U+0e31}\N{U+0e07}\N{U+0e04}\N{U+0e32}\N{U+0e23}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e1e}\N{U+0e38}\N{U+0e18}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e1e}\N{U+0e24}\N{U+0e2b}\N{U+0e31}\N{U+0e2a}\N{U+0e1a}\N{U+0e14}\N{U+0e35}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e28}\N{U+0e38}\N{U+0e01}\N{U+0e23}\N{U+0e4c}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e40}\N{U+0e2a}\N{U+0e32}\N{U+0e23}\N{U+0e4c}",
      "\N{U+0e27}\N{U+0e31}\N{U+0e19}\N{U+0e2d}\N{U+0e32}\N{U+0e17}\N{U+0e34}\N{U+0e15}\N{U+0e22}\N{U+0e4c}"
    ],
    era_abbreviated => [
      "\N{U+0e1b}\N{U+0e35}\N{U+0e01}\N{U+0e48}\N{U+0e2d}\N{U+0e19} \N{U+0e04}.\N{U+0e28}.",
      "\N{U+0e04}.\N{U+0e28}."
    ],
    era_narrow => [
      "\N{U+0e01}\N{U+0e48}\N{U+0e2d}\N{U+0e19} \N{U+0e04}.\N{U+0e28}.",
      "\N{U+0e04}.\N{U+0e28}."
    ],
    era_wide => [
      "\N{U+0e1b}\N{U+0e35}\N{U+0e01}\N{U+0e48}\N{U+0e2d}\N{U+0e19}\N{U+0e04}\N{U+0e23}\N{U+0e34}\N{U+0e2a}\N{U+0e15}\N{U+0e4c}\N{U+0e28}\N{U+0e31}\N{U+0e01}\N{U+0e23}\N{U+0e32}\N{U+0e0a}",
      "\N{U+0e04}\N{U+0e23}\N{U+0e34}\N{U+0e2a}\N{U+0e15}\N{U+0e4c}\N{U+0e28}\N{U+0e31}\N{U+0e01}\N{U+0e23}\N{U+0e32}\N{U+0e0a}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %e %b %Ey %H:%M:%S %Z",
    glibc_date_format => "%d/%m/%Ey",
    glibc_datetime_format => "%a %e %b %Ey, %H:%M:%S",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Thai",
    month_format_abbreviated => [
      "\N{U+0e21}.\N{U+0e04}.",
      "\N{U+0e01}.\N{U+0e1e}.",
      "\N{U+0e21}\N{U+0e35}.\N{U+0e04}.",
      "\N{U+0e40}\N{U+0e21}.\N{U+0e22}.",
      "\N{U+0e1e}.\N{U+0e04}.",
      "\N{U+0e21}\N{U+0e34}.\N{U+0e22}.",
      "\N{U+0e01}.\N{U+0e04}.",
      "\N{U+0e2a}.\N{U+0e04}.",
      "\N{U+0e01}.\N{U+0e22}.",
      "\N{U+0e15}.\N{U+0e04}.",
      "\N{U+0e1e}.\N{U+0e22}.",
      "\N{U+0e18}.\N{U+0e04}."
    ],
    month_format_narrow => [
      "\N{U+0e21}.\N{U+0e04}.",
      "\N{U+0e01}.\N{U+0e1e}.",
      "\N{U+0e21}\N{U+0e35}.\N{U+0e04}.",
      "\N{U+0e40}\N{U+0e21}.\N{U+0e22}.",
      "\N{U+0e1e}.\N{U+0e04}.",
      "\N{U+0e21}\N{U+0e34}.\N{U+0e22}.",
      "\N{U+0e01}.\N{U+0e04}.",
      "\N{U+0e2a}.\N{U+0e04}.",
      "\N{U+0e01}.\N{U+0e22}.",
      "\N{U+0e15}.\N{U+0e04}.",
      "\N{U+0e1e}.\N{U+0e22}.",
      "\N{U+0e18}.\N{U+0e04}."
    ],
    month_format_wide => [
      "\N{U+0e21}\N{U+0e01}\N{U+0e23}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e01}\N{U+0e38}\N{U+0e21}\N{U+0e20}\N{U+0e32}\N{U+0e1e}\N{U+0e31}\N{U+0e19}\N{U+0e18}\N{U+0e4c}",
      "\N{U+0e21}\N{U+0e35}\N{U+0e19}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e40}\N{U+0e21}\N{U+0e29}\N{U+0e32}\N{U+0e22}\N{U+0e19}",
      "\N{U+0e1e}\N{U+0e24}\N{U+0e29}\N{U+0e20}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e21}\N{U+0e34}\N{U+0e16}\N{U+0e38}\N{U+0e19}\N{U+0e32}\N{U+0e22}\N{U+0e19}",
      "\N{U+0e01}\N{U+0e23}\N{U+0e01}\N{U+0e0e}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e2a}\N{U+0e34}\N{U+0e07}\N{U+0e2b}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e01}\N{U+0e31}\N{U+0e19}\N{U+0e22}\N{U+0e32}\N{U+0e22}\N{U+0e19}",
      "\N{U+0e15}\N{U+0e38}\N{U+0e25}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e1e}\N{U+0e24}\N{U+0e28}\N{U+0e08}\N{U+0e34}\N{U+0e01}\N{U+0e32}\N{U+0e22}\N{U+0e19}",
      "\N{U+0e18}\N{U+0e31}\N{U+0e19}\N{U+0e27}\N{U+0e32}\N{U+0e04}\N{U+0e21}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0e21}.\N{U+0e04}.",
      "\N{U+0e01}.\N{U+0e1e}.",
      "\N{U+0e21}\N{U+0e35}.\N{U+0e04}.",
      "\N{U+0e40}\N{U+0e21}.\N{U+0e22}.",
      "\N{U+0e1e}.\N{U+0e04}.",
      "\N{U+0e21}\N{U+0e34}.\N{U+0e22}.",
      "\N{U+0e01}.\N{U+0e04}.",
      "\N{U+0e2a}.\N{U+0e04}.",
      "\N{U+0e01}.\N{U+0e22}.",
      "\N{U+0e15}.\N{U+0e04}.",
      "\N{U+0e1e}.\N{U+0e22}.",
      "\N{U+0e18}.\N{U+0e04}."
    ],
    month_stand_alone_narrow => [
      "\N{U+0e21}.\N{U+0e04}.",
      "\N{U+0e01}.\N{U+0e1e}.",
      "\N{U+0e21}\N{U+0e35}.\N{U+0e04}.",
      "\N{U+0e40}\N{U+0e21}.\N{U+0e22}.",
      "\N{U+0e1e}.\N{U+0e04}.",
      "\N{U+0e21}\N{U+0e34}.\N{U+0e22}.",
      "\N{U+0e01}.\N{U+0e04}.",
      "\N{U+0e2a}.\N{U+0e04}.",
      "\N{U+0e01}.\N{U+0e22}.",
      "\N{U+0e15}.\N{U+0e04}.",
      "\N{U+0e1e}.\N{U+0e22}.",
      "\N{U+0e18}.\N{U+0e04}."
    ],
    month_stand_alone_wide => [
      "\N{U+0e21}\N{U+0e01}\N{U+0e23}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e01}\N{U+0e38}\N{U+0e21}\N{U+0e20}\N{U+0e32}\N{U+0e1e}\N{U+0e31}\N{U+0e19}\N{U+0e18}\N{U+0e4c}",
      "\N{U+0e21}\N{U+0e35}\N{U+0e19}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e40}\N{U+0e21}\N{U+0e29}\N{U+0e32}\N{U+0e22}\N{U+0e19}",
      "\N{U+0e1e}\N{U+0e24}\N{U+0e29}\N{U+0e20}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e21}\N{U+0e34}\N{U+0e16}\N{U+0e38}\N{U+0e19}\N{U+0e32}\N{U+0e22}\N{U+0e19}",
      "\N{U+0e01}\N{U+0e23}\N{U+0e01}\N{U+0e0e}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e2a}\N{U+0e34}\N{U+0e07}\N{U+0e2b}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e01}\N{U+0e31}\N{U+0e19}\N{U+0e22}\N{U+0e32}\N{U+0e22}\N{U+0e19}",
      "\N{U+0e15}\N{U+0e38}\N{U+0e25}\N{U+0e32}\N{U+0e04}\N{U+0e21}",
      "\N{U+0e1e}\N{U+0e24}\N{U+0e28}\N{U+0e08}\N{U+0e34}\N{U+0e01}\N{U+0e32}\N{U+0e22}\N{U+0e19}",
      "\N{U+0e18}\N{U+0e31}\N{U+0e19}\N{U+0e27}\N{U+0e32}\N{U+0e04}\N{U+0e21}"
    ],
    name => "Thai Thailand",
    native_language => "\N{U+0e44}\N{U+0e17}\N{U+0e22}",
    native_name => "\N{U+0e44}\N{U+0e17}\N{U+0e22} \N{U+0e44}\N{U+0e17}\N{U+0e22}",
    native_script => undef,
    native_territory => "\N{U+0e44}\N{U+0e17}\N{U+0e22}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 1",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 2",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 3",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 1",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 2",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 3",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 1",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 2",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 3",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 1",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 2",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 3",
      "\N{U+0e44}\N{U+0e15}\N{U+0e23}\N{U+0e21}\N{U+0e32}\N{U+0e2a} 4"
    ],
    script => undef,
    territory => "Thailand",
    time_format_full => "H \N{U+0e19}\N{U+0e32}\N{U+0e2c}\N{U+0e34}\N{U+0e01}\N{U+0e32} mm \N{U+0e19}\N{U+0e32}\N{U+0e17}\N{U+0e35} ss \N{U+0e27}\N{U+0e34}\N{U+0e19}\N{U+0e32}\N{U+0e17}\N{U+0e35} zzzz",
    time_format_long => "H \N{U+0e19}\N{U+0e32}\N{U+0e2c}\N{U+0e34}\N{U+0e01}\N{U+0e32} mm \N{U+0e19}\N{U+0e32}\N{U+0e17}\N{U+0e35} ss \N{U+0e27}\N{U+0e34}\N{U+0e19}\N{U+0e32}\N{U+0e17}\N{U+0e35} z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ti ]__
  {
    am_pm_abbreviated => [
      "\N{U+1295}\N{U+1309}\N{U+1206} \N{U+1230}\N{U+12d3}\N{U+1270}",
      "\N{U+12f5}\N{U+1215}\N{U+122d} \N{U+1230}\N{U+12d3}\N{U+1275}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMMdd => "dd MMMM",
      MMMd => "MMM d",
      MMdd => "dd/MM",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMM => "MM/y",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "y QQQQ"
    },
    code => "ti",
    date_format_full => "EEEE\N{U+1363} dd MMMM \N{U+1218}\N{U+12d3}\N{U+120d}\N{U+1272} y G",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd-MMM-y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+1230}\N{U+1291}\N{U+12ed}",
      "\N{U+1220}\N{U+1209}\N{U+1235}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1283}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1262}",
      "\N{U+1240}\N{U+12f3}\N{U+121d}",
      "\N{U+1230}\N{U+1295}\N{U+1260}\N{U+1275}"
    ],
    day_format_narrow => [
      "\N{U+1230}",
      "\N{U+1220}",
      "\N{U+1228}",
      "\N{U+1283}",
      "\N{U+12d3}",
      "\N{U+1240}",
      "\N{U+1230}"
    ],
    day_format_wide => [
      "\N{U+1230}\N{U+1291}\N{U+12ed}",
      "\N{U+1220}\N{U+1209}\N{U+1235}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1283}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1262}",
      "\N{U+1240}\N{U+12f3}\N{U+121d}",
      "\N{U+1230}\N{U+1295}\N{U+1260}\N{U+1275}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+1230}\N{U+1291}\N{U+12ed}",
      "\N{U+1220}\N{U+1209}\N{U+1235}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1283}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1262}",
      "\N{U+1240}\N{U+12f3}\N{U+121d}",
      "\N{U+1230}\N{U+1295}\N{U+1260}\N{U+1275}"
    ],
    day_stand_alone_narrow => [
      "\N{U+1230}",
      "\N{U+1220}",
      "\N{U+1228}",
      "\N{U+1283}",
      "\N{U+12d3}",
      "\N{U+1240}",
      "\N{U+1230}"
    ],
    day_stand_alone_wide => [
      "\N{U+1230}\N{U+1291}\N{U+12ed}",
      "\N{U+1220}\N{U+1209}\N{U+1235}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1283}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1262}",
      "\N{U+1240}\N{U+12f3}\N{U+121d}",
      "\N{U+1230}\N{U+1295}\N{U+1260}\N{U+1275}"
    ],
    era_abbreviated => [
      "\N{U+12d3}/\N{U+12d3}",
      "\N{U+12d3}/\N{U+121d}"
    ],
    era_narrow => [
      "\N{U+12d3}/\N{U+12d3}",
      "\N{U+12d3}/\N{U+121d}"
    ],
    era_wide => [
      "\N{U+12d3}/\N{U+12d3}",
      "\N{U+12d3}/\N{U+121d}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Tigrinya",
    month_format_abbreviated => [
      "\N{U+1303}\N{U+1295}\N{U+12e9}",
      "\N{U+134c}\N{U+1265}\N{U+1229}",
      "\N{U+121b}\N{U+122d}\N{U+127d}",
      "\N{U+12a4}\N{U+1355}\N{U+1228}",
      "\N{U+121c}\N{U+12ed}",
      "\N{U+1301}\N{U+1295}",
      "\N{U+1301}\N{U+120b}\N{U+12ed}",
      "\N{U+12a6}\N{U+1308}\N{U+1235}",
      "\N{U+1234}\N{U+1355}\N{U+1274}",
      "\N{U+12a6}\N{U+12ad}\N{U+1270}",
      "\N{U+1296}\N{U+126c}\N{U+121d}",
      "\N{U+12f2}\N{U+1234}\N{U+121d}"
    ],
    month_format_narrow => [
      "\N{U+1303}",
      "\N{U+134c}",
      "\N{U+121b}",
      "\N{U+12a4}",
      "\N{U+121c}",
      "\N{U+1301}",
      "\N{U+1301}",
      "\N{U+12a6}",
      "\N{U+1234}",
      "\N{U+12a6}",
      "\N{U+1296}",
      "\N{U+12f2}"
    ],
    month_format_wide => [
      "\N{U+1303}\N{U+1295}\N{U+12e9}\N{U+12c8}\N{U+122a}",
      "\N{U+134c}\N{U+1265}\N{U+1229}\N{U+12c8}\N{U+122a}",
      "\N{U+121b}\N{U+122d}\N{U+127d}",
      "\N{U+12a4}\N{U+1355}\N{U+1228}\N{U+120d}",
      "\N{U+121c}\N{U+12ed}",
      "\N{U+1301}\N{U+1295}",
      "\N{U+1301}\N{U+120b}\N{U+12ed}",
      "\N{U+12a6}\N{U+1308}\N{U+1235}\N{U+1275}",
      "\N{U+1234}\N{U+1355}\N{U+1274}\N{U+121d}\N{U+1260}\N{U+122d}",
      "\N{U+12a6}\N{U+12ad}\N{U+1270}\N{U+12cd}\N{U+1260}\N{U+122d}",
      "\N{U+1296}\N{U+126c}\N{U+121d}\N{U+1260}\N{U+122d}",
      "\N{U+12f2}\N{U+1234}\N{U+121d}\N{U+1260}\N{U+122d}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+1303}\N{U+1295}\N{U+12e9}",
      "\N{U+134c}\N{U+1265}\N{U+1229}",
      "\N{U+121b}\N{U+122d}\N{U+127d}",
      "\N{U+12a4}\N{U+1355}\N{U+1228}",
      "\N{U+121c}\N{U+12ed}",
      "\N{U+1301}\N{U+1295}",
      "\N{U+1301}\N{U+120b}\N{U+12ed}",
      "\N{U+12a6}\N{U+1308}\N{U+1235}",
      "\N{U+1234}\N{U+1355}\N{U+1274}",
      "\N{U+12a6}\N{U+12ad}\N{U+1270}",
      "\N{U+1296}\N{U+126c}\N{U+121d}",
      "\N{U+12f2}\N{U+1234}\N{U+121d}"
    ],
    month_stand_alone_narrow => [
      "\N{U+1303}",
      "\N{U+134c}",
      "\N{U+121b}",
      "\N{U+12a4}",
      "\N{U+121c}",
      "\N{U+1301}",
      "\N{U+1301}",
      "\N{U+12a6}",
      "\N{U+1234}",
      "\N{U+12a6}",
      "\N{U+1296}",
      "\N{U+12f2}"
    ],
    month_stand_alone_wide => [
      "\N{U+1303}\N{U+1295}\N{U+12e9}\N{U+12c8}\N{U+122a}",
      "\N{U+134c}\N{U+1265}\N{U+1229}\N{U+12c8}\N{U+122a}",
      "\N{U+121b}\N{U+122d}\N{U+127d}",
      "\N{U+12a4}\N{U+1355}\N{U+1228}\N{U+120d}",
      "\N{U+121c}\N{U+12ed}",
      "\N{U+1301}\N{U+1295}",
      "\N{U+1301}\N{U+120b}\N{U+12ed}",
      "\N{U+12a6}\N{U+1308}\N{U+1235}\N{U+1275}",
      "\N{U+1234}\N{U+1355}\N{U+1274}\N{U+121d}\N{U+1260}\N{U+122d}",
      "\N{U+12a6}\N{U+12ad}\N{U+1270}\N{U+12cd}\N{U+1260}\N{U+122d}",
      "\N{U+1296}\N{U+126c}\N{U+121d}\N{U+1260}\N{U+122d}",
      "\N{U+12f2}\N{U+1234}\N{U+121d}\N{U+1260}\N{U+122d}"
    ],
    name => "Tigrinya",
    native_language => "\N{U+1275}\N{U+130d}\N{U+122d}\N{U+129b}",
    native_name => "\N{U+1275}\N{U+130d}\N{U+122d}\N{U+129b}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ti-ER ]__
  {
    am_pm_abbreviated => [
      "\N{U+1295}\N{U+1309}\N{U+1206} \N{U+1230}\N{U+12d3}\N{U+1270}",
      "\N{U+12f5}\N{U+1215}\N{U+122d} \N{U+1230}\N{U+12d3}\N{U+1275}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMMdd => "dd MMMM",
      MMMd => "MMM d",
      MMdd => "dd/MM",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMM => "MM/y",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "y QQQQ"
    },
    code => "ti-ER",
    date_format_full => "EEEE\N{U+1361} dd MMMM \N{U+1218}\N{U+12d3}\N{U+120d}\N{U+1272} y G",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd-MMM-y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+1230}\N{U+1291}\N{U+12ed}",
      "\N{U+1230}\N{U+1209}\N{U+1235}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1213}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1262}",
      "\N{U+1240}\N{U+12f3}\N{U+121d}",
      "\N{U+1230}\N{U+1295}\N{U+1260}\N{U+1275}"
    ],
    day_format_narrow => [
      "\N{U+1230}",
      "\N{U+1220}",
      "\N{U+1228}",
      "\N{U+1283}",
      "\N{U+12d3}",
      "\N{U+1240}",
      "\N{U+1230}"
    ],
    day_format_wide => [
      "\N{U+1230}\N{U+1291}\N{U+12ed}",
      "\N{U+1230}\N{U+1209}\N{U+1235}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1213}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1262}",
      "\N{U+1240}\N{U+12f3}\N{U+121d}",
      "\N{U+1230}\N{U+1295}\N{U+1260}\N{U+1275}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+1230}\N{U+1291}\N{U+12ed}",
      "\N{U+1230}\N{U+1209}\N{U+1235}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1213}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1262}",
      "\N{U+1240}\N{U+12f3}\N{U+121d}",
      "\N{U+1230}\N{U+1295}\N{U+1260}\N{U+1275}"
    ],
    day_stand_alone_narrow => [
      "\N{U+1230}",
      "\N{U+1220}",
      "\N{U+1228}",
      "\N{U+1283}",
      "\N{U+12d3}",
      "\N{U+1240}",
      "\N{U+1230}"
    ],
    day_stand_alone_wide => [
      "\N{U+1230}\N{U+1291}\N{U+12ed}",
      "\N{U+1230}\N{U+1209}\N{U+1235}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1213}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1262}",
      "\N{U+1240}\N{U+12f3}\N{U+121d}",
      "\N{U+1230}\N{U+1295}\N{U+1260}\N{U+1275}"
    ],
    era_abbreviated => [
      "\N{U+12d3}/\N{U+12d3}",
      "\N{U+12d3}/\N{U+121d}"
    ],
    era_narrow => [
      "\N{U+12d3}/\N{U+12d3}",
      "\N{U+12d3}/\N{U+121d}"
    ],
    era_wide => [
      "\N{U+12d3}/\N{U+12d3}",
      "\N{U+12d3}/\N{U+121d}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%A\N{U+1361} %B %e \N{U+1218}\N{U+12d3}\N{U+120d}\N{U+1272} %r %Z %Y \N{U+12d3}/\N{U+121d}",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%A\N{U+1361} %B %e \N{U+1218}\N{U+12d3}\N{U+120d}\N{U+1272} %Y %r %Z",
    glibc_time_12_format => "%X %p",
    glibc_time_format => "%l:%M:%S",
    language => "Tigrinya",
    month_format_abbreviated => [
      "\N{U+1325}\N{U+122a}",
      "\N{U+1208}\N{U+12ab}\N{U+1272}",
      "\N{U+1218}\N{U+130b}\N{U+1262}",
      "\N{U+121a}\N{U+12eb}\N{U+12dd}",
      "\N{U+130d}\N{U+1295}\N{U+1266}",
      "\N{U+1230}\N{U+1290}",
      "\N{U+1213}\N{U+121d}\N{U+1208}",
      "\N{U+1290}\N{U+1213}\N{U+1230}",
      "\N{U+1218}\N{U+1235}\N{U+12a8}",
      "\N{U+1325}\N{U+1245}\N{U+121d}",
      "\N{U+1215}\N{U+12f3}\N{U+122d}",
      "\N{U+1273}\N{U+1215}\N{U+1233}"
    ],
    month_format_narrow => [
      "\N{U+1303}",
      "\N{U+134c}",
      "\N{U+121b}",
      "\N{U+12a4}",
      "\N{U+121c}",
      "\N{U+1301}",
      "\N{U+1301}",
      "\N{U+12a6}",
      "\N{U+1234}",
      "\N{U+12a6}",
      "\N{U+1296}",
      "\N{U+12f2}"
    ],
    month_format_wide => [
      "\N{U+1325}\N{U+122a}",
      "\N{U+1208}\N{U+12ab}\N{U+1272}\N{U+1275}",
      "\N{U+1218}\N{U+130b}\N{U+1262}\N{U+1275}",
      "\N{U+121a}\N{U+12eb}\N{U+12dd}\N{U+12eb}",
      "\N{U+130d}\N{U+1295}\N{U+1266}\N{U+1275}",
      "\N{U+1230}\N{U+1290}",
      "\N{U+1213}\N{U+121d}\N{U+1208}",
      "\N{U+1290}\N{U+1213}\N{U+1230}",
      "\N{U+1218}\N{U+1235}\N{U+12a8}\N{U+1228}\N{U+121d}",
      "\N{U+1325}\N{U+1245}\N{U+121d}\N{U+1272}",
      "\N{U+1215}\N{U+12f3}\N{U+122d}",
      "\N{U+1273}\N{U+1215}\N{U+1233}\N{U+1235}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+1325}\N{U+122a}",
      "\N{U+1208}\N{U+12ab}\N{U+1272}",
      "\N{U+1218}\N{U+130b}\N{U+1262}",
      "\N{U+121a}\N{U+12eb}\N{U+12dd}",
      "\N{U+130d}\N{U+1295}\N{U+1266}",
      "\N{U+1230}\N{U+1290}",
      "\N{U+1213}\N{U+121d}\N{U+1208}",
      "\N{U+1290}\N{U+1213}\N{U+1230}",
      "\N{U+1218}\N{U+1235}\N{U+12a8}",
      "\N{U+1325}\N{U+1245}\N{U+121d}",
      "\N{U+1215}\N{U+12f3}\N{U+122d}",
      "\N{U+1273}\N{U+1215}\N{U+1233}"
    ],
    month_stand_alone_narrow => [
      "\N{U+1303}",
      "\N{U+134c}",
      "\N{U+121b}",
      "\N{U+12a4}",
      "\N{U+121c}",
      "\N{U+1301}",
      "\N{U+1301}",
      "\N{U+12a6}",
      "\N{U+1234}",
      "\N{U+12a6}",
      "\N{U+1296}",
      "\N{U+12f2}"
    ],
    month_stand_alone_wide => [
      "\N{U+1325}\N{U+122a}",
      "\N{U+1208}\N{U+12ab}\N{U+1272}\N{U+1275}",
      "\N{U+1218}\N{U+130b}\N{U+1262}\N{U+1275}",
      "\N{U+121a}\N{U+12eb}\N{U+12dd}\N{U+12eb}",
      "\N{U+130d}\N{U+1295}\N{U+1266}\N{U+1275}",
      "\N{U+1230}\N{U+1290}",
      "\N{U+1213}\N{U+121d}\N{U+1208}",
      "\N{U+1290}\N{U+1213}\N{U+1230}",
      "\N{U+1218}\N{U+1235}\N{U+12a8}\N{U+1228}\N{U+121d}",
      "\N{U+1325}\N{U+1245}\N{U+121d}\N{U+1272}",
      "\N{U+1215}\N{U+12f3}\N{U+122d}",
      "\N{U+1273}\N{U+1215}\N{U+1233}\N{U+1235}"
    ],
    name => "Tigrinya Eritrea",
    native_language => "\N{U+1275}\N{U+130d}\N{U+122d}\N{U+129b}",
    native_name => "\N{U+1275}\N{U+130d}\N{U+122d}\N{U+129b} ER",
    native_script => undef,
    native_territory => "ER",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Eritrea",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ti-ET ]__
  {
    am_pm_abbreviated => [
      "\N{U+1295}\N{U+1309}\N{U+1206} \N{U+1230}\N{U+12d3}\N{U+1270}",
      "\N{U+12f5}\N{U+1215}\N{U+122d} \N{U+1230}\N{U+12d3}\N{U+1275}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMMdd => "dd MMMM",
      MMMd => "MMM d",
      MMdd => "dd/MM",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMM => "MM/y",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "y QQQQ"
    },
    code => "ti-ET",
    date_format_full => "EEEE\N{U+1363} dd MMMM \N{U+1218}\N{U+12d3}\N{U+120d}\N{U+1272} y G",
    date_format_long => "dd MMMM y",
    date_format_medium => "dd-MMM-y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+1230}\N{U+1291}\N{U+12ed}",
      "\N{U+1220}\N{U+1209}\N{U+1235}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1283}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1262}",
      "\N{U+1240}\N{U+12f3}\N{U+121d}",
      "\N{U+1230}\N{U+1295}\N{U+1260}\N{U+1275}"
    ],
    day_format_narrow => [
      "\N{U+1230}",
      "\N{U+1220}",
      "\N{U+1228}",
      "\N{U+1283}",
      "\N{U+12d3}",
      "\N{U+1240}",
      "\N{U+1230}"
    ],
    day_format_wide => [
      "\N{U+1230}\N{U+1291}\N{U+12ed}",
      "\N{U+1220}\N{U+1209}\N{U+1235}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1283}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1262}",
      "\N{U+1240}\N{U+12f3}\N{U+121d}",
      "\N{U+1230}\N{U+1295}\N{U+1260}\N{U+1275}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+1230}\N{U+1291}\N{U+12ed}",
      "\N{U+1220}\N{U+1209}\N{U+1235}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1283}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1262}",
      "\N{U+1240}\N{U+12f3}\N{U+121d}",
      "\N{U+1230}\N{U+1295}\N{U+1260}\N{U+1275}"
    ],
    day_stand_alone_narrow => [
      "\N{U+1230}",
      "\N{U+1220}",
      "\N{U+1228}",
      "\N{U+1283}",
      "\N{U+12d3}",
      "\N{U+1240}",
      "\N{U+1230}"
    ],
    day_stand_alone_wide => [
      "\N{U+1230}\N{U+1291}\N{U+12ed}",
      "\N{U+1220}\N{U+1209}\N{U+1235}",
      "\N{U+1228}\N{U+1261}\N{U+12d5}",
      "\N{U+1283}\N{U+1219}\N{U+1235}",
      "\N{U+12d3}\N{U+122d}\N{U+1262}",
      "\N{U+1240}\N{U+12f3}\N{U+121d}",
      "\N{U+1230}\N{U+1295}\N{U+1260}\N{U+1275}"
    ],
    era_abbreviated => [
      "\N{U+12d3}/\N{U+12d3}",
      "\N{U+12d3}/\N{U+121d}"
    ],
    era_narrow => [
      "\N{U+12d3}/\N{U+12d3}",
      "\N{U+12d3}/\N{U+121d}"
    ],
    era_wide => [
      "\N{U+12d3}/\N{U+12d3}",
      "\N{U+12d3}/\N{U+121d}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%A\N{U+1363} %B %e \N{U+1218}\N{U+12d3}\N{U+120d}\N{U+1272} %r %Z %Y \N{U+12d3}/\N{U+121d}",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%A\N{U+1363} %B %e \N{U+1218}\N{U+12d3}\N{U+120d}\N{U+1272} %Y %r %Z",
    glibc_time_12_format => "%X %p",
    glibc_time_format => "%l:%M:%S",
    language => "Tigrinya",
    month_format_abbreviated => [
      "\N{U+1303}\N{U+1295}\N{U+12e9}",
      "\N{U+134c}\N{U+1265}\N{U+1229}",
      "\N{U+121b}\N{U+122d}\N{U+127d}",
      "\N{U+12a4}\N{U+1355}\N{U+1228}",
      "\N{U+121c}\N{U+12ed}",
      "\N{U+1301}\N{U+1295}",
      "\N{U+1301}\N{U+120b}\N{U+12ed}",
      "\N{U+12a6}\N{U+1308}\N{U+1235}",
      "\N{U+1234}\N{U+1355}\N{U+1274}",
      "\N{U+12a6}\N{U+12ad}\N{U+1270}",
      "\N{U+1296}\N{U+126c}\N{U+121d}",
      "\N{U+12f2}\N{U+1234}\N{U+121d}"
    ],
    month_format_narrow => [
      "\N{U+1303}",
      "\N{U+134c}",
      "\N{U+121b}",
      "\N{U+12a4}",
      "\N{U+121c}",
      "\N{U+1301}",
      "\N{U+1301}",
      "\N{U+12a6}",
      "\N{U+1234}",
      "\N{U+12a6}",
      "\N{U+1296}",
      "\N{U+12f2}"
    ],
    month_format_wide => [
      "\N{U+1303}\N{U+1295}\N{U+12e9}\N{U+12c8}\N{U+122a}",
      "\N{U+134c}\N{U+1265}\N{U+1229}\N{U+12c8}\N{U+122a}",
      "\N{U+121b}\N{U+122d}\N{U+127d}",
      "\N{U+12a4}\N{U+1355}\N{U+1228}\N{U+120d}",
      "\N{U+121c}\N{U+12ed}",
      "\N{U+1301}\N{U+1295}",
      "\N{U+1301}\N{U+120b}\N{U+12ed}",
      "\N{U+12a6}\N{U+1308}\N{U+1235}\N{U+1275}",
      "\N{U+1234}\N{U+1355}\N{U+1274}\N{U+121d}\N{U+1260}\N{U+122d}",
      "\N{U+12a6}\N{U+12ad}\N{U+1270}\N{U+12cd}\N{U+1260}\N{U+122d}",
      "\N{U+1296}\N{U+126c}\N{U+121d}\N{U+1260}\N{U+122d}",
      "\N{U+12f2}\N{U+1234}\N{U+121d}\N{U+1260}\N{U+122d}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+1303}\N{U+1295}\N{U+12e9}",
      "\N{U+134c}\N{U+1265}\N{U+1229}",
      "\N{U+121b}\N{U+122d}\N{U+127d}",
      "\N{U+12a4}\N{U+1355}\N{U+1228}",
      "\N{U+121c}\N{U+12ed}",
      "\N{U+1301}\N{U+1295}",
      "\N{U+1301}\N{U+120b}\N{U+12ed}",
      "\N{U+12a6}\N{U+1308}\N{U+1235}",
      "\N{U+1234}\N{U+1355}\N{U+1274}",
      "\N{U+12a6}\N{U+12ad}\N{U+1270}",
      "\N{U+1296}\N{U+126c}\N{U+121d}",
      "\N{U+12f2}\N{U+1234}\N{U+121d}"
    ],
    month_stand_alone_narrow => [
      "\N{U+1303}",
      "\N{U+134c}",
      "\N{U+121b}",
      "\N{U+12a4}",
      "\N{U+121c}",
      "\N{U+1301}",
      "\N{U+1301}",
      "\N{U+12a6}",
      "\N{U+1234}",
      "\N{U+12a6}",
      "\N{U+1296}",
      "\N{U+12f2}"
    ],
    month_stand_alone_wide => [
      "\N{U+1303}\N{U+1295}\N{U+12e9}\N{U+12c8}\N{U+122a}",
      "\N{U+134c}\N{U+1265}\N{U+1229}\N{U+12c8}\N{U+122a}",
      "\N{U+121b}\N{U+122d}\N{U+127d}",
      "\N{U+12a4}\N{U+1355}\N{U+1228}\N{U+120d}",
      "\N{U+121c}\N{U+12ed}",
      "\N{U+1301}\N{U+1295}",
      "\N{U+1301}\N{U+120b}\N{U+12ed}",
      "\N{U+12a6}\N{U+1308}\N{U+1235}\N{U+1275}",
      "\N{U+1234}\N{U+1355}\N{U+1274}\N{U+121d}\N{U+1260}\N{U+122d}",
      "\N{U+12a6}\N{U+12ad}\N{U+1270}\N{U+12cd}\N{U+1260}\N{U+122d}",
      "\N{U+1296}\N{U+126c}\N{U+121d}\N{U+1260}\N{U+122d}",
      "\N{U+12f2}\N{U+1234}\N{U+121d}\N{U+1260}\N{U+122d}"
    ],
    name => "Tigrinya Ethiopia",
    native_language => "\N{U+1275}\N{U+130d}\N{U+122d}\N{U+129b}",
    native_name => "\N{U+1275}\N{U+130d}\N{U+122d}\N{U+129b} ET",
    native_script => undef,
    native_territory => "ET",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Ethiopia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ tk ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "tk",
    date_format_full => "d MMMM y EEEE",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd.MM.y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "D",
      "S",
      "\N{U+00c7}",
      "P",
      "A",
      "\N{U+015e}",
      "\N{U+00dd}"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "D",
      "S",
      "\N{U+00c7}",
      "P",
      "A",
      "\N{U+015e}",
      "\N{U+00dd}"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Turkmen",
    month_format_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    name => "Turkmen",
    native_language => "tk",
    native_name => "tk",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ tk-TM ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "tk-TM",
    date_format_full => "d MMMM y EEEE",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd.MM.y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "D",
      "S",
      "\N{U+00c7}",
      "P",
      "A",
      "\N{U+015e}",
      "\N{U+00dd}"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "D",
      "S",
      "\N{U+00c7}",
      "P",
      "A",
      "\N{U+015e}",
      "\N{U+00dd}"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d.%m.%Y",
    glibc_datetime_format => "%d.%m.%Y %T",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Turkmen",
    month_format_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    name => "Turkmen Turkmenistan",
    native_language => "tk",
    native_name => "tk TM",
    native_script => undef,
    native_territory => "TM",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "Turkmenistan",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ to ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "to",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "M\N{U+014d}n",
      "T\N{U+016b}s",
      "Pul",
      "Tu\N{U+02bb}a",
      "Fal",
      "Tok",
      "S\N{U+0101}p"
    ],
    day_format_narrow => [
      "M",
      "T",
      "P",
      "T",
      "F",
      "T",
      "S"
    ],
    day_format_wide => [
      "M\N{U+014d}nite",
      "T\N{U+016b}site",
      "Pulelulu",
      "Tu\N{U+02bb}apulelulu",
      "Falaite",
      "Tokonaki",
      "S\N{U+0101}pate"
    ],
    day_stand_alone_abbreviated => [
      "M\N{U+014d}n",
      "T\N{U+016b}s",
      "Pul",
      "Tu\N{U+02bb}a",
      "Fal",
      "Tok",
      "S\N{U+0101}p"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "P",
      "T",
      "F",
      "T",
      "S"
    ],
    day_stand_alone_wide => [
      "M\N{U+014d}nite",
      "T\N{U+016b}site",
      "Pulelulu",
      "Tu\N{U+02bb}apulelulu",
      "Falaite",
      "Tokonaki",
      "S\N{U+0101}pate"
    ],
    era_abbreviated => [
      "KM",
      "TS"
    ],
    era_narrow => [
      "KM",
      "TS"
    ],
    era_wide => [
      "ki mu\N{U+02bb}a",
      "ta\N{U+02bb}u \N{U+02bb}o S\N{U+012b}s\N{U+016b}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Tongan",
    month_format_abbreviated => [
      "S\N{U+0101}n",
      "F\N{U+0113}p",
      "Ma\N{U+02bb}a",
      "\N{U+02bb}Epe",
      "M\N{U+0113}",
      "Sun",
      "Siu",
      "\N{U+02bb}Aok",
      "Sep",
      "\N{U+02bb}Oka",
      "N\N{U+014d}v",
      "T\N{U+012b}s"
    ],
    month_format_narrow => [
      "S",
      "F",
      "M",
      "E",
      "M",
      "S",
      "S",
      "A",
      "S",
      "O",
      "N",
      "T"
    ],
    month_format_wide => [
      "S\N{U+0101}nuali",
      "F\N{U+0113}pueli",
      "Ma\N{U+02bb}asi",
      "\N{U+02bb}Epeleli",
      "M\N{U+0113}",
      "Sune",
      "Siulai",
      "\N{U+02bb}Aokosi",
      "Sepitema",
      "\N{U+02bb}Okatopa",
      "N\N{U+014d}vema",
      "T\N{U+012b}sema"
    ],
    month_stand_alone_abbreviated => [
      "S\N{U+0101}n",
      "F\N{U+0113}p",
      "Ma\N{U+02bb}a",
      "\N{U+02bb}Epe",
      "M\N{U+0113}",
      "Sun",
      "Siu",
      "\N{U+02bb}Aok",
      "Sep",
      "\N{U+02bb}Oka",
      "N\N{U+014d}v",
      "T\N{U+012b}s"
    ],
    month_stand_alone_narrow => [
      "S",
      "F",
      "M",
      "E",
      "M",
      "S",
      "S",
      "A",
      "S",
      "O",
      "N",
      "T"
    ],
    month_stand_alone_wide => [
      "S\N{U+0101}nuali",
      "F\N{U+0113}pueli",
      "Ma\N{U+02bb}asi",
      "\N{U+02bb}Epeleli",
      "M\N{U+0113}",
      "Sune",
      "Siulai",
      "\N{U+02bb}Aokosi",
      "Sepitema",
      "\N{U+02bb}Okatopa",
      "N\N{U+014d}vema",
      "T\N{U+012b}sema"
    ],
    name => "Tongan",
    native_language => "lea fakatonga",
    native_name => "lea fakatonga",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "kuata \N{U+02bb}uluaki",
      "kuata ua",
      "kuata tolu",
      "kuata f\N{U+0101}"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "kuata 1",
      "kuata 2",
      "kuata 3",
      "kuata 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ to-TO ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMEd => "E d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMM => "MM-y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "MMMM y",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "to-TO",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "M\N{U+014d}n",
      "T\N{U+016b}s",
      "Pul",
      "Tu\N{U+02bb}a",
      "Fal",
      "Tok",
      "S\N{U+0101}p"
    ],
    day_format_narrow => [
      "M",
      "T",
      "P",
      "T",
      "F",
      "T",
      "S"
    ],
    day_format_wide => [
      "M\N{U+014d}nite",
      "T\N{U+016b}site",
      "Pulelulu",
      "Tu\N{U+02bb}apulelulu",
      "Falaite",
      "Tokonaki",
      "S\N{U+0101}pate"
    ],
    day_stand_alone_abbreviated => [
      "M\N{U+014d}n",
      "T\N{U+016b}s",
      "Pul",
      "Tu\N{U+02bb}a",
      "Fal",
      "Tok",
      "S\N{U+0101}p"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "P",
      "T",
      "F",
      "T",
      "S"
    ],
    day_stand_alone_wide => [
      "M\N{U+014d}nite",
      "T\N{U+016b}site",
      "Pulelulu",
      "Tu\N{U+02bb}apulelulu",
      "Falaite",
      "Tokonaki",
      "S\N{U+0101}pate"
    ],
    era_abbreviated => [
      "KM",
      "TS"
    ],
    era_narrow => [
      "KM",
      "TS"
    ],
    era_wide => [
      "ki mu\N{U+02bb}a",
      "ta\N{U+02bb}u \N{U+02bb}o S\N{U+012b}s\N{U+016b}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Tongan",
    month_format_abbreviated => [
      "S\N{U+0101}n",
      "F\N{U+0113}p",
      "Ma\N{U+02bb}a",
      "\N{U+02bb}Epe",
      "M\N{U+0113}",
      "Sun",
      "Siu",
      "\N{U+02bb}Aok",
      "Sep",
      "\N{U+02bb}Oka",
      "N\N{U+014d}v",
      "T\N{U+012b}s"
    ],
    month_format_narrow => [
      "S",
      "F",
      "M",
      "E",
      "M",
      "S",
      "S",
      "A",
      "S",
      "O",
      "N",
      "T"
    ],
    month_format_wide => [
      "S\N{U+0101}nuali",
      "F\N{U+0113}pueli",
      "Ma\N{U+02bb}asi",
      "\N{U+02bb}Epeleli",
      "M\N{U+0113}",
      "Sune",
      "Siulai",
      "\N{U+02bb}Aokosi",
      "Sepitema",
      "\N{U+02bb}Okatopa",
      "N\N{U+014d}vema",
      "T\N{U+012b}sema"
    ],
    month_stand_alone_abbreviated => [
      "S\N{U+0101}n",
      "F\N{U+0113}p",
      "Ma\N{U+02bb}a",
      "\N{U+02bb}Epe",
      "M\N{U+0113}",
      "Sun",
      "Siu",
      "\N{U+02bb}Aok",
      "Sep",
      "\N{U+02bb}Oka",
      "N\N{U+014d}v",
      "T\N{U+012b}s"
    ],
    month_stand_alone_narrow => [
      "S",
      "F",
      "M",
      "E",
      "M",
      "S",
      "S",
      "A",
      "S",
      "O",
      "N",
      "T"
    ],
    month_stand_alone_wide => [
      "S\N{U+0101}nuali",
      "F\N{U+0113}pueli",
      "Ma\N{U+02bb}asi",
      "\N{U+02bb}Epeleli",
      "M\N{U+0113}",
      "Sune",
      "Siulai",
      "\N{U+02bb}Aokosi",
      "Sepitema",
      "\N{U+02bb}Okatopa",
      "N\N{U+014d}vema",
      "T\N{U+012b}sema"
    ],
    name => "Tongan Tonga",
    native_language => "lea fakatonga",
    native_name => "lea fakatonga Tonga",
    native_script => undef,
    native_territory => "Tonga",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "kuata \N{U+02bb}uluaki",
      "kuata ua",
      "kuata tolu",
      "kuata f\N{U+0101}"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "kuata 1",
      "kuata 2",
      "kuata 3",
      "kuata 4"
    ],
    script => undef,
    territory => "Tonga",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ tr ]__
  {
    am_pm_abbreviated => [
      "\N{U+00d6}\N{U+00d6}",
      "\N{U+00d6}S"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E a h:mm",
      Ehms => "E a h:mm:ss",
      Gy => "G y",
      GyMMM => "G MMM y",
      GyMMMEd => "G d MMM y E",
      GyMMMd => "G dd MMM y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "dd/MM E",
      MMM => "LLL",
      MMMEd => "d MMMM E",
      MMMMEd => "dd MMMM E",
      MMMMd => "dd MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "a h",
      hm => "a h:mm",
      hms => "a h:mm:ss",
      hmsv => "a h:mm:ss v",
      hmv => "a h:mm v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "dd.MM.y E",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "d MMM y E",
      yMMMM => "MMMM y",
      yMMMd => "dd MMM y",
      yMd => "dd.MM.y",
      yQQQ => "y/QQQ",
      yQQQQ => "y/QQQQ"
    },
    code => "tr",
    date_format_full => "d MMMM y EEEE",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d.MM.y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Pzt",
      "Sal",
      "\N{U+00c7}ar",
      "Per",
      "Cum",
      "Cmt",
      "Paz"
    ],
    day_format_narrow => [
      "P",
      "S",
      "\N{U+00c7}",
      "P",
      "C",
      "C",
      "P"
    ],
    day_format_wide => [
      "Pazartesi",
      "Sal\N{U+0131}",
      "\N{U+00c7}ar\N{U+015f}amba",
      "Per\N{U+015f}embe",
      "Cuma",
      "Cumartesi",
      "Pazar"
    ],
    day_stand_alone_abbreviated => [
      "Pzt",
      "Sal",
      "\N{U+00c7}ar",
      "Per",
      "Cum",
      "Cmt",
      "Paz"
    ],
    day_stand_alone_narrow => [
      "P",
      "S",
      "\N{U+00c7}",
      "P",
      "C",
      "C",
      "P"
    ],
    day_stand_alone_wide => [
      "Pazartesi",
      "Sal\N{U+0131}",
      "\N{U+00c7}ar\N{U+015f}amba",
      "Per\N{U+015f}embe",
      "Cuma",
      "Cumartesi",
      "Pazar"
    ],
    era_abbreviated => [
      "M\N{U+00d6}",
      "MS"
    ],
    era_narrow => [
      "M\N{U+00d6}",
      "MS"
    ],
    era_wide => [
      "Milattan \N{U+00d6}nce",
      "Milattan Sonra"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Turkish",
    month_format_abbreviated => [
      "Oca",
      "\N{U+015e}ub",
      "Mar",
      "Nis",
      "May",
      "Haz",
      "Tem",
      "A\N{U+011f}u",
      "Eyl",
      "Eki",
      "Kas",
      "Ara"
    ],
    month_format_narrow => [
      "O",
      "\N{U+015e}",
      "M",
      "N",
      "M",
      "H",
      "T",
      "A",
      "E",
      "E",
      "K",
      "A"
    ],
    month_format_wide => [
      "Ocak",
      "\N{U+015e}ubat",
      "Mart",
      "Nisan",
      "May\N{U+0131}s",
      "Haziran",
      "Temmuz",
      "A\N{U+011f}ustos",
      "Eyl\N{U+00fc}l",
      "Ekim",
      "Kas\N{U+0131}m",
      "Aral\N{U+0131}k"
    ],
    month_stand_alone_abbreviated => [
      "Oca",
      "\N{U+015e}ub",
      "Mar",
      "Nis",
      "May",
      "Haz",
      "Tem",
      "A\N{U+011f}u",
      "Eyl",
      "Eki",
      "Kas",
      "Ara"
    ],
    month_stand_alone_narrow => [
      "O",
      "\N{U+015e}",
      "M",
      "N",
      "M",
      "H",
      "T",
      "A",
      "E",
      "E",
      "K",
      "A"
    ],
    month_stand_alone_wide => [
      "Ocak",
      "\N{U+015e}ubat",
      "Mart",
      "Nisan",
      "May\N{U+0131}s",
      "Haziran",
      "Temmuz",
      "A\N{U+011f}ustos",
      "Eyl\N{U+00fc}l",
      "Ekim",
      "Kas\N{U+0131}m",
      "Aral\N{U+0131}k"
    ],
    name => "Turkish",
    native_language => "T\N{U+00fc}rk\N{U+00e7}e",
    native_name => "T\N{U+00fc}rk\N{U+00e7}e",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+00c7}1",
      "\N{U+00c7}2",
      "\N{U+00c7}3",
      "\N{U+00c7}4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "1. \N{U+00e7}eyrek",
      "2. \N{U+00e7}eyrek",
      "3. \N{U+00e7}eyrek",
      "4. \N{U+00e7}eyrek"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+00c7}1",
      "\N{U+00c7}2",
      "\N{U+00c7}3",
      "\N{U+00c7}4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "1. \N{U+00e7}eyrek",
      "2. \N{U+00e7}eyrek",
      "3. \N{U+00e7}eyrek",
      "4. \N{U+00e7}eyrek"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ tr-CY ]__
  {
    am_pm_abbreviated => [
      "\N{U+00d6}\N{U+00d6}",
      "\N{U+00d6}S"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E a h:mm",
      Ehms => "E a h:mm:ss",
      Gy => "G y",
      GyMMM => "G MMM y",
      GyMMMEd => "G d MMM y E",
      GyMMMd => "G dd MMM y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "dd/MM E",
      MMM => "LLL",
      MMMEd => "d MMMM E",
      MMMMEd => "dd MMMM E",
      MMMMd => "dd MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "a h",
      hm => "a h:mm",
      hms => "a h:mm:ss",
      hmsv => "a h:mm:ss v",
      hmv => "a h:mm v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "dd.MM.y E",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "d MMM y E",
      yMMMM => "MMMM y",
      yMMMd => "dd MMM y",
      yMd => "dd.MM.y",
      yQQQ => "y/QQQ",
      yQQQQ => "y/QQQQ"
    },
    code => "tr-CY",
    date_format_full => "d MMMM y EEEE",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d.MM.y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Pzt",
      "Sal",
      "\N{U+00c7}ar",
      "Per",
      "Cum",
      "Cmt",
      "Paz"
    ],
    day_format_narrow => [
      "P",
      "S",
      "\N{U+00c7}",
      "P",
      "C",
      "C",
      "P"
    ],
    day_format_wide => [
      "Pazartesi",
      "Sal\N{U+0131}",
      "\N{U+00c7}ar\N{U+015f}amba",
      "Per\N{U+015f}embe",
      "Cuma",
      "Cumartesi",
      "Pazar"
    ],
    day_stand_alone_abbreviated => [
      "Pzt",
      "Sal",
      "\N{U+00c7}ar",
      "Per",
      "Cum",
      "Cmt",
      "Paz"
    ],
    day_stand_alone_narrow => [
      "P",
      "S",
      "\N{U+00c7}",
      "P",
      "C",
      "C",
      "P"
    ],
    day_stand_alone_wide => [
      "Pazartesi",
      "Sal\N{U+0131}",
      "\N{U+00c7}ar\N{U+015f}amba",
      "Per\N{U+015f}embe",
      "Cuma",
      "Cumartesi",
      "Pazar"
    ],
    era_abbreviated => [
      "M\N{U+00d6}",
      "MS"
    ],
    era_narrow => [
      "M\N{U+00d6}",
      "MS"
    ],
    era_wide => [
      "Milattan \N{U+00d6}nce",
      "Milattan Sonra"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Turkish",
    month_format_abbreviated => [
      "Oca",
      "\N{U+015e}ub",
      "Mar",
      "Nis",
      "May",
      "Haz",
      "Tem",
      "A\N{U+011f}u",
      "Eyl",
      "Eki",
      "Kas",
      "Ara"
    ],
    month_format_narrow => [
      "O",
      "\N{U+015e}",
      "M",
      "N",
      "M",
      "H",
      "T",
      "A",
      "E",
      "E",
      "K",
      "A"
    ],
    month_format_wide => [
      "Ocak",
      "\N{U+015e}ubat",
      "Mart",
      "Nisan",
      "May\N{U+0131}s",
      "Haziran",
      "Temmuz",
      "A\N{U+011f}ustos",
      "Eyl\N{U+00fc}l",
      "Ekim",
      "Kas\N{U+0131}m",
      "Aral\N{U+0131}k"
    ],
    month_stand_alone_abbreviated => [
      "Oca",
      "\N{U+015e}ub",
      "Mar",
      "Nis",
      "May",
      "Haz",
      "Tem",
      "A\N{U+011f}u",
      "Eyl",
      "Eki",
      "Kas",
      "Ara"
    ],
    month_stand_alone_narrow => [
      "O",
      "\N{U+015e}",
      "M",
      "N",
      "M",
      "H",
      "T",
      "A",
      "E",
      "E",
      "K",
      "A"
    ],
    month_stand_alone_wide => [
      "Ocak",
      "\N{U+015e}ubat",
      "Mart",
      "Nisan",
      "May\N{U+0131}s",
      "Haziran",
      "Temmuz",
      "A\N{U+011f}ustos",
      "Eyl\N{U+00fc}l",
      "Ekim",
      "Kas\N{U+0131}m",
      "Aral\N{U+0131}k"
    ],
    name => "Turkish Cyprus",
    native_language => "T\N{U+00fc}rk\N{U+00e7}e",
    native_name => "T\N{U+00fc}rk\N{U+00e7}e K\N{U+0131}br\N{U+0131}s",
    native_script => undef,
    native_territory => "K\N{U+0131}br\N{U+0131}s",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+00c7}1",
      "\N{U+00c7}2",
      "\N{U+00c7}3",
      "\N{U+00c7}4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "1. \N{U+00e7}eyrek",
      "2. \N{U+00e7}eyrek",
      "3. \N{U+00e7}eyrek",
      "4. \N{U+00e7}eyrek"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+00c7}1",
      "\N{U+00c7}2",
      "\N{U+00c7}3",
      "\N{U+00c7}4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "1. \N{U+00e7}eyrek",
      "2. \N{U+00e7}eyrek",
      "3. \N{U+00e7}eyrek",
      "4. \N{U+00e7}eyrek"
    ],
    script => undef,
    territory => "Cyprus",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ tr-TR ]__
  {
    am_pm_abbreviated => [
      "\N{U+00d6}\N{U+00d6}",
      "\N{U+00d6}S"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E a h:mm",
      Ehms => "E a h:mm:ss",
      Gy => "G y",
      GyMMM => "G MMM y",
      GyMMMEd => "G d MMM y E",
      GyMMMd => "G dd MMM y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "dd/MM E",
      MMM => "LLL",
      MMMEd => "d MMMM E",
      MMMMEd => "dd MMMM E",
      MMMMd => "dd MMMM",
      MMMd => "d MMM",
      Md => "dd/MM",
      d => "d",
      h => "a h",
      hm => "a h:mm",
      hms => "a h:mm:ss",
      hmsv => "a h:mm:ss v",
      hmv => "a h:mm v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "dd.MM.y E",
      yMM => "MM.y",
      yMMM => "MMM y",
      yMMMEd => "d MMM y E",
      yMMMM => "MMMM y",
      yMMMd => "dd MMM y",
      yMd => "dd.MM.y",
      yQQQ => "y/QQQ",
      yQQQQ => "y/QQQQ"
    },
    code => "tr-TR",
    date_format_full => "d MMMM y EEEE",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d.MM.y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Pzt",
      "Sal",
      "\N{U+00c7}ar",
      "Per",
      "Cum",
      "Cmt",
      "Paz"
    ],
    day_format_narrow => [
      "P",
      "S",
      "\N{U+00c7}",
      "P",
      "C",
      "C",
      "P"
    ],
    day_format_wide => [
      "Pazartesi",
      "Sal\N{U+0131}",
      "\N{U+00c7}ar\N{U+015f}amba",
      "Per\N{U+015f}embe",
      "Cuma",
      "Cumartesi",
      "Pazar"
    ],
    day_stand_alone_abbreviated => [
      "Pzt",
      "Sal",
      "\N{U+00c7}ar",
      "Per",
      "Cum",
      "Cmt",
      "Paz"
    ],
    day_stand_alone_narrow => [
      "P",
      "S",
      "\N{U+00c7}",
      "P",
      "C",
      "C",
      "P"
    ],
    day_stand_alone_wide => [
      "Pazartesi",
      "Sal\N{U+0131}",
      "\N{U+00c7}ar\N{U+015f}amba",
      "Per\N{U+015f}embe",
      "Cuma",
      "Cumartesi",
      "Pazar"
    ],
    era_abbreviated => [
      "M\N{U+00d6}",
      "MS"
    ],
    era_narrow => [
      "M\N{U+00d6}",
      "MS"
    ],
    era_wide => [
      "Milattan \N{U+00d6}nce",
      "Milattan Sonra"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d-%m-%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Turkish",
    month_format_abbreviated => [
      "Oca",
      "\N{U+015e}ub",
      "Mar",
      "Nis",
      "May",
      "Haz",
      "Tem",
      "A\N{U+011f}u",
      "Eyl",
      "Eki",
      "Kas",
      "Ara"
    ],
    month_format_narrow => [
      "O",
      "\N{U+015e}",
      "M",
      "N",
      "M",
      "H",
      "T",
      "A",
      "E",
      "E",
      "K",
      "A"
    ],
    month_format_wide => [
      "Ocak",
      "\N{U+015e}ubat",
      "Mart",
      "Nisan",
      "May\N{U+0131}s",
      "Haziran",
      "Temmuz",
      "A\N{U+011f}ustos",
      "Eyl\N{U+00fc}l",
      "Ekim",
      "Kas\N{U+0131}m",
      "Aral\N{U+0131}k"
    ],
    month_stand_alone_abbreviated => [
      "Oca",
      "\N{U+015e}ub",
      "Mar",
      "Nis",
      "May",
      "Haz",
      "Tem",
      "A\N{U+011f}u",
      "Eyl",
      "Eki",
      "Kas",
      "Ara"
    ],
    month_stand_alone_narrow => [
      "O",
      "\N{U+015e}",
      "M",
      "N",
      "M",
      "H",
      "T",
      "A",
      "E",
      "E",
      "K",
      "A"
    ],
    month_stand_alone_wide => [
      "Ocak",
      "\N{U+015e}ubat",
      "Mart",
      "Nisan",
      "May\N{U+0131}s",
      "Haziran",
      "Temmuz",
      "A\N{U+011f}ustos",
      "Eyl\N{U+00fc}l",
      "Ekim",
      "Kas\N{U+0131}m",
      "Aral\N{U+0131}k"
    ],
    name => "Turkish Turkey",
    native_language => "T\N{U+00fc}rk\N{U+00e7}e",
    native_name => "T\N{U+00fc}rk\N{U+00e7}e T\N{U+00fc}rkiye",
    native_script => undef,
    native_territory => "T\N{U+00fc}rkiye",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+00c7}1",
      "\N{U+00c7}2",
      "\N{U+00c7}3",
      "\N{U+00c7}4"
    ],
    quarter_format_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_format_wide => [
      "1. \N{U+00e7}eyrek",
      "2. \N{U+00e7}eyrek",
      "3. \N{U+00e7}eyrek",
      "4. \N{U+00e7}eyrek"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+00c7}1",
      "\N{U+00c7}2",
      "\N{U+00c7}3",
      "\N{U+00c7}4"
    ],
    quarter_stand_alone_narrow => [
      "1.",
      "2.",
      "3.",
      "4."
    ],
    quarter_stand_alone_wide => [
      "1. \N{U+00e7}eyrek",
      "2. \N{U+00e7}eyrek",
      "3. \N{U+00e7}eyrek",
      "4. \N{U+00e7}eyrek"
    ],
    script => undef,
    territory => "Turkey",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ twq ]__
  {
    am_pm_abbreviated => [
      "Subbaahi",
      "Zaarikay b"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "twq",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ati",
      "Ata",
      "Ala",
      "Alm",
      "Alz",
      "Asi",
      "Alh"
    ],
    day_format_narrow => [
      "T",
      "T",
      "L",
      "L",
      "L",
      "S",
      "H"
    ],
    day_format_wide => [
      "Atinni",
      "Atalaata",
      "Alarba",
      "Alhamiisa",
      "Alzuma",
      "Asibti",
      "Alhadi"
    ],
    day_stand_alone_abbreviated => [
      "Ati",
      "Ata",
      "Ala",
      "Alm",
      "Alz",
      "Asi",
      "Alh"
    ],
    day_stand_alone_narrow => [
      "T",
      "T",
      "L",
      "L",
      "L",
      "S",
      "H"
    ],
    day_stand_alone_wide => [
      "Atinni",
      "Atalaata",
      "Alarba",
      "Alhamiisa",
      "Alzuma",
      "Asibti",
      "Alhadi"
    ],
    era_abbreviated => [
      "IJ",
      "IZ"
    ],
    era_narrow => [
      "IJ",
      "IZ"
    ],
    era_wide => [
      "Isaa jine",
      "Isaa zamanoo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Tasawaq",
    month_format_abbreviated => [
      "\N{U+017d}an",
      "Fee",
      "Mar",
      "Awi",
      "Me",
      "\N{U+017d}uw",
      "\N{U+017d}uy",
      "Ut",
      "Sek",
      "Okt",
      "Noo",
      "Dee"
    ],
    month_format_narrow => [
      "\N{U+017d}",
      "F",
      "M",
      "A",
      "M",
      "\N{U+017d}",
      "\N{U+017d}",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "\N{U+017d}anwiye",
      "Feewiriye",
      "Marsi",
      "Awiril",
      "Me",
      "\N{U+017d}uwe\N{U+014b}",
      "\N{U+017d}uyye",
      "Ut",
      "Sektanbur",
      "Oktoobur",
      "Noowanbur",
      "Deesanbur"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+017d}an",
      "Fee",
      "Mar",
      "Awi",
      "Me",
      "\N{U+017d}uw",
      "\N{U+017d}uy",
      "Ut",
      "Sek",
      "Okt",
      "Noo",
      "Dee"
    ],
    month_stand_alone_narrow => [
      "\N{U+017d}",
      "F",
      "M",
      "A",
      "M",
      "\N{U+017d}",
      "\N{U+017d}",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "\N{U+017d}anwiye",
      "Feewiriye",
      "Marsi",
      "Awiril",
      "Me",
      "\N{U+017d}uwe\N{U+014b}",
      "\N{U+017d}uyye",
      "Ut",
      "Sektanbur",
      "Oktoobur",
      "Noowanbur",
      "Deesanbur"
    ],
    name => "Tasawaq",
    native_language => "Tasawaq senni",
    native_name => "Tasawaq senni",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "A1",
      "A2",
      "A3",
      "A4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Arrubu 1",
      "Arrubu 2",
      "Arrubu 3",
      "Arrubu 4"
    ],
    quarter_stand_alone_abbreviated => [
      "A1",
      "A2",
      "A3",
      "A4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Arrubu 1",
      "Arrubu 2",
      "Arrubu 3",
      "Arrubu 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ twq-NE ]__
  {
    am_pm_abbreviated => [
      "Subbaahi",
      "Zaarikay b"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "twq-NE",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ati",
      "Ata",
      "Ala",
      "Alm",
      "Alz",
      "Asi",
      "Alh"
    ],
    day_format_narrow => [
      "T",
      "T",
      "L",
      "L",
      "L",
      "S",
      "H"
    ],
    day_format_wide => [
      "Atinni",
      "Atalaata",
      "Alarba",
      "Alhamiisa",
      "Alzuma",
      "Asibti",
      "Alhadi"
    ],
    day_stand_alone_abbreviated => [
      "Ati",
      "Ata",
      "Ala",
      "Alm",
      "Alz",
      "Asi",
      "Alh"
    ],
    day_stand_alone_narrow => [
      "T",
      "T",
      "L",
      "L",
      "L",
      "S",
      "H"
    ],
    day_stand_alone_wide => [
      "Atinni",
      "Atalaata",
      "Alarba",
      "Alhamiisa",
      "Alzuma",
      "Asibti",
      "Alhadi"
    ],
    era_abbreviated => [
      "IJ",
      "IZ"
    ],
    era_narrow => [
      "IJ",
      "IZ"
    ],
    era_wide => [
      "Isaa jine",
      "Isaa zamanoo"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Tasawaq",
    month_format_abbreviated => [
      "\N{U+017d}an",
      "Fee",
      "Mar",
      "Awi",
      "Me",
      "\N{U+017d}uw",
      "\N{U+017d}uy",
      "Ut",
      "Sek",
      "Okt",
      "Noo",
      "Dee"
    ],
    month_format_narrow => [
      "\N{U+017d}",
      "F",
      "M",
      "A",
      "M",
      "\N{U+017d}",
      "\N{U+017d}",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "\N{U+017d}anwiye",
      "Feewiriye",
      "Marsi",
      "Awiril",
      "Me",
      "\N{U+017d}uwe\N{U+014b}",
      "\N{U+017d}uyye",
      "Ut",
      "Sektanbur",
      "Oktoobur",
      "Noowanbur",
      "Deesanbur"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+017d}an",
      "Fee",
      "Mar",
      "Awi",
      "Me",
      "\N{U+017d}uw",
      "\N{U+017d}uy",
      "Ut",
      "Sek",
      "Okt",
      "Noo",
      "Dee"
    ],
    month_stand_alone_narrow => [
      "\N{U+017d}",
      "F",
      "M",
      "A",
      "M",
      "\N{U+017d}",
      "\N{U+017d}",
      "U",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "\N{U+017d}anwiye",
      "Feewiriye",
      "Marsi",
      "Awiril",
      "Me",
      "\N{U+017d}uwe\N{U+014b}",
      "\N{U+017d}uyye",
      "Ut",
      "Sektanbur",
      "Oktoobur",
      "Noowanbur",
      "Deesanbur"
    ],
    name => "Tasawaq Niger",
    native_language => "Tasawaq senni",
    native_name => "Tasawaq senni Ni\N{U+017e}er",
    native_script => undef,
    native_territory => "Ni\N{U+017e}er",
    native_variant => undef,
    quarter_format_abbreviated => [
      "A1",
      "A2",
      "A3",
      "A4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Arrubu 1",
      "Arrubu 2",
      "Arrubu 3",
      "Arrubu 4"
    ],
    quarter_stand_alone_abbreviated => [
      "A1",
      "A2",
      "A3",
      "A4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Arrubu 1",
      "Arrubu 2",
      "Arrubu 3",
      "Arrubu 4"
    ],
    script => undef,
    territory => "Niger",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ tzm ]__
  {
    am_pm_abbreviated => [
      "Zdat azal",
      "\N{U+1e0c}effir aza"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "tzm",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ayn",
      "Asn",
      "Akr",
      "Akw",
      "Asm",
      "As\N{U+1e0d}",
      "Asa"
    ],
    day_format_narrow => [
      "A",
      "A",
      "A",
      "A",
      "A",
      "A",
      "A"
    ],
    day_format_wide => [
      "Aynas",
      "Asinas",
      "Akras",
      "Akwas",
      "Asimwas",
      "Asi\N{U+1e0d}yas",
      "Asamas"
    ],
    day_stand_alone_abbreviated => [
      "Ayn",
      "Asn",
      "Akr",
      "Akw",
      "Asm",
      "As\N{U+1e0d}",
      "Asa"
    ],
    day_stand_alone_narrow => [
      "A",
      "A",
      "A",
      "A",
      "A",
      "A",
      "A"
    ],
    day_stand_alone_wide => [
      "Aynas",
      "Asinas",
      "Akras",
      "Akwas",
      "Asimwas",
      "Asi\N{U+1e0d}yas",
      "Asamas"
    ],
    era_abbreviated => [
      "Z\N{U+0190}",
      "\N{U+1e0c}\N{U+0190}"
    ],
    era_narrow => [
      "Z\N{U+0190}",
      "\N{U+1e0c}\N{U+0190}"
    ],
    era_wide => [
      "Zdat \N{U+0190}isa (TA\N{U+0194})",
      "\N{U+1e0c}effir \N{U+0190}isa (TA\N{U+0194})"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Central Atlas Tamazight",
    month_format_abbreviated => [
      "Yen",
      "Yeb",
      "Mar",
      "Ibr",
      "May",
      "Yun",
      "Yul",
      "\N{U+0194}uc",
      "Cut",
      "K\N{U+1e6d}u",
      "Nwa",
      "Duj"
    ],
    month_format_narrow => [
      "Y",
      "Y",
      "M",
      "I",
      "M",
      "Y",
      "Y",
      "\N{U+0194}",
      "C",
      "K",
      "N",
      "D"
    ],
    month_format_wide => [
      "Yennayer",
      "Yebrayer",
      "Mars",
      "Ibrir",
      "Mayyu",
      "Yunyu",
      "Yulyuz",
      "\N{U+0194}uct",
      "Cutanbir",
      "K\N{U+1e6d}uber",
      "Nwanbir",
      "Dujanbir"
    ],
    month_stand_alone_abbreviated => [
      "Yen",
      "Yeb",
      "Mar",
      "Ibr",
      "May",
      "Yun",
      "Yul",
      "\N{U+0194}uc",
      "Cut",
      "K\N{U+1e6d}u",
      "Nwa",
      "Duj"
    ],
    month_stand_alone_narrow => [
      "Y",
      "Y",
      "M",
      "I",
      "M",
      "Y",
      "Y",
      "\N{U+0194}",
      "C",
      "K",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Yennayer",
      "Yebrayer",
      "Mars",
      "Ibrir",
      "Mayyu",
      "Yunyu",
      "Yulyuz",
      "\N{U+0194}uct",
      "Cutanbir",
      "K\N{U+1e6d}uber",
      "Nwanbir",
      "Dujanbir"
    ],
    name => "Central Atlas Tamazight",
    native_language => "Tamazi\N{U+0263}t n la\N{U+1e6d}la\N{U+1e63}",
    native_name => "Tamazi\N{U+0263}t n la\N{U+1e6d}la\N{U+1e63}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "IA1",
      "IA2",
      "IA3",
      "IA4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Imir adamsan 1",
      "Imir adamsan 2",
      "Imir adamsan 3",
      "Imir adamsan 4"
    ],
    quarter_stand_alone_abbreviated => [
      "IA1",
      "IA2",
      "IA3",
      "IA4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Imir adamsan 1",
      "Imir adamsan 2",
      "Imir adamsan 3",
      "Imir adamsan 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ tzm-MA ]__
  {
    am_pm_abbreviated => [
      "Zdat azal",
      "\N{U+1e0c}effir aza"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "tzm-MA",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Ayn",
      "Asn",
      "Akr",
      "Akw",
      "Asm",
      "As\N{U+1e0d}",
      "Asa"
    ],
    day_format_narrow => [
      "A",
      "A",
      "A",
      "A",
      "A",
      "A",
      "A"
    ],
    day_format_wide => [
      "Aynas",
      "Asinas",
      "Akras",
      "Akwas",
      "Asimwas",
      "Asi\N{U+1e0d}yas",
      "Asamas"
    ],
    day_stand_alone_abbreviated => [
      "Ayn",
      "Asn",
      "Akr",
      "Akw",
      "Asm",
      "As\N{U+1e0d}",
      "Asa"
    ],
    day_stand_alone_narrow => [
      "A",
      "A",
      "A",
      "A",
      "A",
      "A",
      "A"
    ],
    day_stand_alone_wide => [
      "Aynas",
      "Asinas",
      "Akras",
      "Akwas",
      "Asimwas",
      "Asi\N{U+1e0d}yas",
      "Asamas"
    ],
    era_abbreviated => [
      "Z\N{U+0190}",
      "\N{U+1e0c}\N{U+0190}"
    ],
    era_narrow => [
      "Z\N{U+0190}",
      "\N{U+1e0c}\N{U+0190}"
    ],
    era_wide => [
      "Zdat \N{U+0190}isa (TA\N{U+0194})",
      "\N{U+1e0c}effir \N{U+0190}isa (TA\N{U+0194})"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Central Atlas Tamazight",
    month_format_abbreviated => [
      "Yen",
      "Yeb",
      "Mar",
      "Ibr",
      "May",
      "Yun",
      "Yul",
      "\N{U+0194}uc",
      "Cut",
      "K\N{U+1e6d}u",
      "Nwa",
      "Duj"
    ],
    month_format_narrow => [
      "Y",
      "Y",
      "M",
      "I",
      "M",
      "Y",
      "Y",
      "\N{U+0194}",
      "C",
      "K",
      "N",
      "D"
    ],
    month_format_wide => [
      "Yennayer",
      "Yebrayer",
      "Mars",
      "Ibrir",
      "Mayyu",
      "Yunyu",
      "Yulyuz",
      "\N{U+0194}uct",
      "Cutanbir",
      "K\N{U+1e6d}uber",
      "Nwanbir",
      "Dujanbir"
    ],
    month_stand_alone_abbreviated => [
      "Yen",
      "Yeb",
      "Mar",
      "Ibr",
      "May",
      "Yun",
      "Yul",
      "\N{U+0194}uc",
      "Cut",
      "K\N{U+1e6d}u",
      "Nwa",
      "Duj"
    ],
    month_stand_alone_narrow => [
      "Y",
      "Y",
      "M",
      "I",
      "M",
      "Y",
      "Y",
      "\N{U+0194}",
      "C",
      "K",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Yennayer",
      "Yebrayer",
      "Mars",
      "Ibrir",
      "Mayyu",
      "Yunyu",
      "Yulyuz",
      "\N{U+0194}uct",
      "Cutanbir",
      "K\N{U+1e6d}uber",
      "Nwanbir",
      "Dujanbir"
    ],
    name => "Central Atlas Tamazight Morocco",
    native_language => "Tamazi\N{U+0263}t n la\N{U+1e6d}la\N{U+1e63}",
    native_name => "Tamazi\N{U+0263}t n la\N{U+1e6d}la\N{U+1e63} Me\N{U+1e5b}\N{U+1e5b}uk",
    native_script => undef,
    native_territory => "Me\N{U+1e5b}\N{U+1e5b}uk",
    native_variant => undef,
    quarter_format_abbreviated => [
      "IA1",
      "IA2",
      "IA3",
      "IA4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Imir adamsan 1",
      "Imir adamsan 2",
      "Imir adamsan 3",
      "Imir adamsan 4"
    ],
    quarter_stand_alone_abbreviated => [
      "IA1",
      "IA2",
      "IA3",
      "IA4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Imir adamsan 1",
      "Imir adamsan 2",
      "Imir adamsan 3",
      "Imir adamsan 4"
    ],
    script => undef,
    territory => "Morocco",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ug ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} MMM d\N{U+060c} y G",
      GyMMMd => "MMM d\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} M/d",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E\N{U+060c} M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} MMM d\N{U+060c} y",
      yMMMM => "y MMMM",
      yMMMd => "MMM d\N{U+060c} y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ug",
    date_format_full => "EEEE\N{U+060c} MMMM d\N{U+060c} y",
    date_format_long => "MMMM d\N{U+060c} y",
    date_format_medium => "MMM d\N{U+060c} y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1}\N{U+060c} {0}",
    datetime_format_short => "{1}\N{U+060c} {0}",
    day_format_abbreviated => [
      "\N{U+062f}\N{U+06c8}",
      "\N{U+0633}\N{U+06d5}",
      "\N{U+0686}\N{U+0627}",
      "\N{U+067e}\N{U+06d5}",
      "\N{U+062c}\N{U+06c8}",
      "\N{U+0634}\N{U+06d5}",
      "\N{U+064a}\N{U+06d5}"
    ],
    day_format_narrow => [
      "\N{U+062f}",
      "\N{U+0633}",
      "\N{U+0686}",
      "\N{U+067e}",
      "\N{U+062c}",
      "\N{U+0634}",
      "\N{U+064a}"
    ],
    day_format_wide => [
      "\N{U+062f}\N{U+06c8}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+0633}\N{U+06d5}\N{U+064a}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+067e}\N{U+06d5}\N{U+064a}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+062c}\N{U+06c8}\N{U+0645}\N{U+06d5}",
      "\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+064a}\N{U+06d5}\N{U+0643}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+062f}\N{U+06c8}",
      "\N{U+0633}\N{U+06d5}",
      "\N{U+0686}\N{U+0627}",
      "\N{U+067e}\N{U+06d5}",
      "\N{U+062c}\N{U+06c8}",
      "\N{U+0634}\N{U+06d5}",
      "\N{U+064a}\N{U+06d5}"
    ],
    day_stand_alone_narrow => [
      "\N{U+062f}",
      "\N{U+0633}",
      "\N{U+0686}",
      "\N{U+067e}",
      "\N{U+062c}",
      "\N{U+0634}",
      "\N{U+064a}"
    ],
    day_stand_alone_wide => [
      "\N{U+062f}\N{U+06c8}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+0633}\N{U+06d5}\N{U+064a}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+067e}\N{U+06d5}\N{U+064a}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+062c}\N{U+06c8}\N{U+0645}\N{U+06d5}",
      "\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+064a}\N{U+06d5}\N{U+0643}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}"
    ],
    era_abbreviated => [
      "BCE",
      "\N{U+0645}\N{U+0649}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+0649}\N{U+064a}\N{U+06d5}"
    ],
    era_narrow => [
      "BCE",
      "\N{U+0645}\N{U+0649}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+0649}\N{U+064a}\N{U+06d5}"
    ],
    era_wide => [
      "\N{U+0645}\N{U+0649}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+0649}\N{U+064a}\N{U+06d5}\N{U+062f}\N{U+0649}\N{U+0646} \N{U+0628}\N{U+06c7}\N{U+0631}\N{U+06c7}\N{U+0646}",
      "\N{U+0645}\N{U+0649}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+0649}\N{U+064a}\N{U+06d5}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Uyghur",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0627}\N{U+0646}\N{U+06cb}\N{U+0627}\N{U+0631}",
      "\N{U+0641}\N{U+06d0}\N{U+06cb}\N{U+0631}\N{U+0627}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+062a}",
      "\N{U+0626}\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06d0}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+0626}\N{U+0649}\N{U+064a}\N{U+06c7}\N{U+0646}",
      "\N{U+0626}\N{U+0649}\N{U+064a}\N{U+06c7}\N{U+0644}",
      "\N{U+0626}\N{U+0627}\N{U+06cb}\N{U+063a}\N{U+06c7}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+06d0}\N{U+0646}\N{U+062a}\N{U+06d5}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+0626}\N{U+06c6}\N{U+0643}\N{U+062a}\N{U+06d5}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+064a}\N{U+0627}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+062f}\N{U+06d0}\N{U+0643}\N{U+0627}\N{U+0628}\N{U+0649}\N{U+0631}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0627}\N{U+0646}\N{U+06cb}\N{U+0627}\N{U+0631}",
      "\N{U+0641}\N{U+06d0}\N{U+06cb}\N{U+0631}\N{U+0627}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+062a}",
      "\N{U+0626}\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06d0}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+0626}\N{U+0649}\N{U+064a}\N{U+06c7}\N{U+0646}",
      "\N{U+0626}\N{U+0649}\N{U+064a}\N{U+06c7}\N{U+0644}",
      "\N{U+0626}\N{U+0627}\N{U+06cb}\N{U+063a}\N{U+06c7}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+06d0}\N{U+0646}\N{U+062a}\N{U+06d5}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+0626}\N{U+06c6}\N{U+0643}\N{U+062a}\N{U+06d5}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+064a}\N{U+0627}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+062f}\N{U+06d0}\N{U+0643}\N{U+0627}\N{U+0628}\N{U+0649}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0627}\N{U+0646}\N{U+06cb}\N{U+0627}\N{U+0631}",
      "\N{U+0641}\N{U+06d0}\N{U+06cb}\N{U+0631}\N{U+0627}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+062a}",
      "\N{U+0626}\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06d0}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+0626}\N{U+0649}\N{U+064a}\N{U+06c7}\N{U+0646}",
      "\N{U+0626}\N{U+0649}\N{U+064a}\N{U+06c7}\N{U+0644}",
      "\N{U+0626}\N{U+0627}\N{U+06cb}\N{U+063a}\N{U+06c7}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+06d0}\N{U+0646}\N{U+062a}\N{U+06d5}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+0626}\N{U+06c6}\N{U+0643}\N{U+062a}\N{U+06d5}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+064a}\N{U+0627}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+062f}\N{U+06d0}\N{U+0643}\N{U+0627}\N{U+0628}\N{U+0649}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0627}\N{U+0646}\N{U+06cb}\N{U+0627}\N{U+0631}",
      "\N{U+0641}\N{U+06d0}\N{U+06cb}\N{U+0631}\N{U+0627}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+062a}",
      "\N{U+0626}\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06d0}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+0626}\N{U+0649}\N{U+064a}\N{U+06c7}\N{U+0646}",
      "\N{U+0626}\N{U+0649}\N{U+064a}\N{U+06c7}\N{U+0644}",
      "\N{U+0626}\N{U+0627}\N{U+06cb}\N{U+063a}\N{U+06c7}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+06d0}\N{U+0646}\N{U+062a}\N{U+06d5}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+0626}\N{U+06c6}\N{U+0643}\N{U+062a}\N{U+06d5}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+064a}\N{U+0627}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+062f}\N{U+06d0}\N{U+0643}\N{U+0627}\N{U+0628}\N{U+0649}\N{U+0631}"
    ],
    name => "Uyghur",
    native_language => "\N{U+0626}\N{U+06c7}\N{U+064a}\N{U+063a}\N{U+06c7}\N{U+0631}\N{U+0686}\N{U+06d5}",
    native_name => "\N{U+0626}\N{U+06c7}\N{U+064a}\N{U+063a}\N{U+06c7}\N{U+0631}\N{U+0686}\N{U+06d5}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0628}\N{U+0649}\N{U+0631}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+0626}\N{U+0649}\N{U+0643}\N{U+0643}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+0626}\N{U+06c8}\N{U+0686}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+062a}\N{U+06c6}\N{U+062a}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0628}\N{U+0649}\N{U+0631}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+0626}\N{U+0649}\N{U+0643}\N{U+0643}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+0626}\N{U+06c8}\N{U+0686}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+062a}\N{U+06c6}\N{U+062a}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0628}\N{U+0649}\N{U+0631}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+0626}\N{U+0649}\N{U+0643}\N{U+0643}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+0626}\N{U+06c8}\N{U+0686}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+062a}\N{U+06c6}\N{U+062a}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0628}\N{U+0649}\N{U+0631}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+0626}\N{U+0649}\N{U+0643}\N{U+0643}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+0626}\N{U+06c8}\N{U+0686}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+062a}\N{U+06c6}\N{U+062a}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ug-CN ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} MMM d\N{U+060c} y G",
      GyMMMd => "MMM d\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} M/d",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E\N{U+060c} M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} MMM d\N{U+060c} y",
      yMMMM => "y MMMM",
      yMMMd => "MMM d\N{U+060c} y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ug-CN",
    date_format_full => "EEEE\N{U+060c} MMMM d\N{U+060c} y",
    date_format_long => "MMMM d\N{U+060c} y",
    date_format_medium => "MMM d\N{U+060c} y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1}\N{U+060c} {0}",
    datetime_format_short => "{1}\N{U+060c} {0}",
    day_format_abbreviated => [
      "\N{U+062f}\N{U+06c8}",
      "\N{U+0633}\N{U+06d5}",
      "\N{U+0686}\N{U+0627}",
      "\N{U+067e}\N{U+06d5}",
      "\N{U+062c}\N{U+06c8}",
      "\N{U+0634}\N{U+06d5}",
      "\N{U+064a}\N{U+06d5}"
    ],
    day_format_narrow => [
      "\N{U+062f}",
      "\N{U+0633}",
      "\N{U+0686}",
      "\N{U+067e}",
      "\N{U+062c}",
      "\N{U+0634}",
      "\N{U+064a}"
    ],
    day_format_wide => [
      "\N{U+062f}\N{U+06c8}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+0633}\N{U+06d5}\N{U+064a}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+067e}\N{U+06d5}\N{U+064a}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+062c}\N{U+06c8}\N{U+0645}\N{U+06d5}",
      "\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+064a}\N{U+06d5}\N{U+0643}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+062f}\N{U+06c8}",
      "\N{U+0633}\N{U+06d5}",
      "\N{U+0686}\N{U+0627}",
      "\N{U+067e}\N{U+06d5}",
      "\N{U+062c}\N{U+06c8}",
      "\N{U+0634}\N{U+06d5}",
      "\N{U+064a}\N{U+06d5}"
    ],
    day_stand_alone_narrow => [
      "\N{U+062f}",
      "\N{U+0633}",
      "\N{U+0686}",
      "\N{U+067e}",
      "\N{U+062c}",
      "\N{U+0634}",
      "\N{U+064a}"
    ],
    day_stand_alone_wide => [
      "\N{U+062f}\N{U+06c8}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+0633}\N{U+06d5}\N{U+064a}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+0686}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+067e}\N{U+06d5}\N{U+064a}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+062c}\N{U+06c8}\N{U+0645}\N{U+06d5}",
      "\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}",
      "\N{U+064a}\N{U+06d5}\N{U+0643}\N{U+0634}\N{U+06d5}\N{U+0646}\N{U+0628}\N{U+06d5}"
    ],
    era_abbreviated => [
      "BCE",
      "\N{U+0645}\N{U+0649}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+0649}\N{U+064a}\N{U+06d5}"
    ],
    era_narrow => [
      "BCE",
      "\N{U+0645}\N{U+0649}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+0649}\N{U+064a}\N{U+06d5}"
    ],
    era_wide => [
      "\N{U+0645}\N{U+0649}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+0649}\N{U+064a}\N{U+06d5}\N{U+062f}\N{U+0649}\N{U+0646} \N{U+0628}\N{U+06c7}\N{U+0631}\N{U+06c7}\N{U+0646}",
      "\N{U+0645}\N{U+0649}\N{U+0644}\N{U+0627}\N{U+062f}\N{U+0649}\N{U+064a}\N{U+06d5}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a\N{U+060c} %d-%m-%Y\N{U+060c} %T",
    glibc_date_format => "%a\N{U+060c} %d-%m-%Y",
    glibc_datetime_format => "%a\N{U+060c} %d-%m-%Y\N{U+060c} %T",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Uyghur",
    month_format_abbreviated => [
      "\N{U+064a}\N{U+0627}\N{U+0646}\N{U+06cb}\N{U+0627}\N{U+0631}",
      "\N{U+0641}\N{U+06d0}\N{U+06cb}\N{U+0631}\N{U+0627}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+062a}",
      "\N{U+0626}\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06d0}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+0626}\N{U+0649}\N{U+064a}\N{U+06c7}\N{U+0646}",
      "\N{U+0626}\N{U+0649}\N{U+064a}\N{U+06c7}\N{U+0644}",
      "\N{U+0626}\N{U+0627}\N{U+06cb}\N{U+063a}\N{U+06c7}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+06d0}\N{U+0646}\N{U+062a}\N{U+06d5}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+0626}\N{U+06c6}\N{U+0643}\N{U+062a}\N{U+06d5}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+064a}\N{U+0627}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+062f}\N{U+06d0}\N{U+0643}\N{U+0627}\N{U+0628}\N{U+0649}\N{U+0631}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+064a}\N{U+0627}\N{U+0646}\N{U+06cb}\N{U+0627}\N{U+0631}",
      "\N{U+0641}\N{U+06d0}\N{U+06cb}\N{U+0631}\N{U+0627}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+062a}",
      "\N{U+0626}\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06d0}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+0626}\N{U+0649}\N{U+064a}\N{U+06c7}\N{U+0646}",
      "\N{U+0626}\N{U+0649}\N{U+064a}\N{U+06c7}\N{U+0644}",
      "\N{U+0626}\N{U+0627}\N{U+06cb}\N{U+063a}\N{U+06c7}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+06d0}\N{U+0646}\N{U+062a}\N{U+06d5}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+0626}\N{U+06c6}\N{U+0643}\N{U+062a}\N{U+06d5}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+064a}\N{U+0627}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+062f}\N{U+06d0}\N{U+0643}\N{U+0627}\N{U+0628}\N{U+0649}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+064a}\N{U+0627}\N{U+0646}\N{U+06cb}\N{U+0627}\N{U+0631}",
      "\N{U+0641}\N{U+06d0}\N{U+06cb}\N{U+0631}\N{U+0627}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+062a}",
      "\N{U+0626}\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06d0}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+0626}\N{U+0649}\N{U+064a}\N{U+06c7}\N{U+0646}",
      "\N{U+0626}\N{U+0649}\N{U+064a}\N{U+06c7}\N{U+0644}",
      "\N{U+0626}\N{U+0627}\N{U+06cb}\N{U+063a}\N{U+06c7}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+06d0}\N{U+0646}\N{U+062a}\N{U+06d5}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+0626}\N{U+06c6}\N{U+0643}\N{U+062a}\N{U+06d5}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+064a}\N{U+0627}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+062f}\N{U+06d0}\N{U+0643}\N{U+0627}\N{U+0628}\N{U+0649}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+064a}\N{U+0627}\N{U+0646}\N{U+06cb}\N{U+0627}\N{U+0631}",
      "\N{U+0641}\N{U+06d0}\N{U+06cb}\N{U+0631}\N{U+0627}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+062a}",
      "\N{U+0626}\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06d0}\N{U+0644}",
      "\N{U+0645}\N{U+0627}\N{U+064a}",
      "\N{U+0626}\N{U+0649}\N{U+064a}\N{U+06c7}\N{U+0646}",
      "\N{U+0626}\N{U+0649}\N{U+064a}\N{U+06c7}\N{U+0644}",
      "\N{U+0626}\N{U+0627}\N{U+06cb}\N{U+063a}\N{U+06c7}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+06d0}\N{U+0646}\N{U+062a}\N{U+06d5}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+0626}\N{U+06c6}\N{U+0643}\N{U+062a}\N{U+06d5}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+064a}\N{U+0627}\N{U+0628}\N{U+0649}\N{U+0631}",
      "\N{U+062f}\N{U+06d0}\N{U+0643}\N{U+0627}\N{U+0628}\N{U+0649}\N{U+0631}"
    ],
    name => "Uyghur China",
    native_language => "\N{U+0626}\N{U+06c7}\N{U+064a}\N{U+063a}\N{U+06c7}\N{U+0631}\N{U+0686}\N{U+06d5}",
    native_name => "\N{U+0626}\N{U+06c7}\N{U+064a}\N{U+063a}\N{U+06c7}\N{U+0631}\N{U+0686}\N{U+06d5} \N{U+062c}\N{U+06c7}\N{U+06ad}\N{U+06af}\N{U+0648}",
    native_script => undef,
    native_territory => "\N{U+062c}\N{U+06c7}\N{U+06ad}\N{U+06af}\N{U+0648}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+0628}\N{U+0649}\N{U+0631}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+0626}\N{U+0649}\N{U+0643}\N{U+0643}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+0626}\N{U+06c8}\N{U+0686}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+062a}\N{U+06c6}\N{U+062a}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+0628}\N{U+0649}\N{U+0631}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+0626}\N{U+0649}\N{U+0643}\N{U+0643}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+0626}\N{U+06c8}\N{U+0686}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+062a}\N{U+06c6}\N{U+062a}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+0628}\N{U+0649}\N{U+0631}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+0626}\N{U+0649}\N{U+0643}\N{U+0643}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+0626}\N{U+06c8}\N{U+0686}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+062a}\N{U+06c6}\N{U+062a}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+0628}\N{U+0649}\N{U+0631}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+0626}\N{U+0649}\N{U+0643}\N{U+0643}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+0626}\N{U+06c8}\N{U+0686}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}",
      "\N{U+062a}\N{U+06c6}\N{U+062a}\N{U+0649}\N{U+0646}\N{U+0686}\N{U+0649} \N{U+067e}\N{U+06d5}\N{U+0633}\N{U+0649}\N{U+0644}"
    ],
    script => undef,
    territory => "China",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ uk ]__
  {
    am_pm_abbreviated => [
      "\N{U+0434}\N{U+043f}",
      "\N{U+043f}\N{U+043f}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "LL",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "E, dd.MM.y",
      yMMM => "LLL y",
      yMMMEd => "E, d MMM y",
      yMMMM => "LLLL y",
      yMMMd => "d MMM y",
      yMd => "dd.MM.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y '\N{U+0440}'."
    },
    code => "uk",
    date_format_full => "EEEE, d MMMM y '\N{U+0440}'.",
    date_format_long => "d MMMM y '\N{U+0440}'.",
    date_format_medium => "d MMM y '\N{U+0440}'.",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} '\N{U+043e}' {0}",
    datetime_format_long => "{1} '\N{U+043e}' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+041f}\N{U+043d}",
      "\N{U+0412}\N{U+0442}",
      "\N{U+0421}\N{U+0440}",
      "\N{U+0427}\N{U+0442}",
      "\N{U+041f}\N{U+0442}",
      "\N{U+0421}\N{U+0431}",
      "\N{U+041d}\N{U+0434}"
    ],
    day_format_narrow => [
      "\N{U+041f}",
      "\N{U+0412}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+041f}",
      "\N{U+0421}",
      "\N{U+041d}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0456}\N{U+043b}\N{U+043e}\N{U+043a}",
      "\N{U+0432}\N{U+0456}\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043e}\N{U+043a}",
      "\N{U+0441}\N{U+0435}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}",
      "\N{U+043f}\N{U+02bc}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+044f}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0456}\N{U+043b}\N{U+044f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+041f}\N{U+043d}",
      "\N{U+0412}\N{U+0442}",
      "\N{U+0421}\N{U+0440}",
      "\N{U+0427}\N{U+0442}",
      "\N{U+041f}\N{U+0442}",
      "\N{U+0421}\N{U+0431}",
      "\N{U+041d}\N{U+0434}"
    ],
    day_stand_alone_narrow => [
      "\N{U+041f}",
      "\N{U+0412}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+041f}",
      "\N{U+0421}",
      "\N{U+041d}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0456}\N{U+043b}\N{U+043e}\N{U+043a}",
      "\N{U+0432}\N{U+0456}\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043e}\N{U+043a}",
      "\N{U+0441}\N{U+0435}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}",
      "\N{U+043f}\N{U+02bc}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+044f}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0456}\N{U+043b}\N{U+044f}"
    ],
    era_abbreviated => [
      "\N{U+0434}\N{U+043e} \N{U+043d}. \N{U+0435}.",
      "\N{U+043d}. \N{U+0435}."
    ],
    era_narrow => [
      "\N{U+0434}\N{U+043e} \N{U+043d}.\N{U+0435}.",
      "\N{U+043d}.\N{U+0435}."
    ],
    era_wide => [
      "\N{U+0434}\N{U+043e} \N{U+043d}\N{U+0430}\N{U+0448}\N{U+043e}\N{U+0457} \N{U+0435}\N{U+0440}\N{U+0438}",
      "\N{U+043d}\N{U+0430}\N{U+0448}\N{U+043e}\N{U+0457} \N{U+0435}\N{U+0440}\N{U+0438}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Ukrainian",
    month_format_abbreviated => [
      "\N{U+0441}\N{U+0456}\N{U+0447}.",
      "\N{U+043b}\N{U+044e}\N{U+0442}.",
      "\N{U+0431}\N{U+0435}\N{U+0440}.",
      "\N{U+043a}\N{U+0432}\N{U+0456}\N{U+0442}.",
      "\N{U+0442}\N{U+0440}\N{U+0430}\N{U+0432}.",
      "\N{U+0447}\N{U+0435}\N{U+0440}\N{U+0432}.",
      "\N{U+043b}\N{U+0438}\N{U+043f}.",
      "\N{U+0441}\N{U+0435}\N{U+0440}\N{U+043f}.",
      "\N{U+0432}\N{U+0435}\N{U+0440}.",
      "\N{U+0436}\N{U+043e}\N{U+0432}\N{U+0442}.",
      "\N{U+043b}\N{U+0438}\N{U+0441}\N{U+0442}.",
      "\N{U+0433}\N{U+0440}\N{U+0443}\N{U+0434}."
    ],
    month_format_narrow => [
      "\N{U+0421}",
      "\N{U+041b}",
      "\N{U+0411}",
      "\N{U+041a}",
      "\N{U+0422}",
      "\N{U+0427}",
      "\N{U+041b}",
      "\N{U+0421}",
      "\N{U+0412}",
      "\N{U+0416}",
      "\N{U+041b}",
      "\N{U+0413}"
    ],
    month_format_wide => [
      "\N{U+0441}\N{U+0456}\N{U+0447}\N{U+043d}\N{U+044f}",
      "\N{U+043b}\N{U+044e}\N{U+0442}\N{U+043e}\N{U+0433}\N{U+043e}",
      "\N{U+0431}\N{U+0435}\N{U+0440}\N{U+0435}\N{U+0437}\N{U+043d}\N{U+044f}",
      "\N{U+043a}\N{U+0432}\N{U+0456}\N{U+0442}\N{U+043d}\N{U+044f}",
      "\N{U+0442}\N{U+0440}\N{U+0430}\N{U+0432}\N{U+043d}\N{U+044f}",
      "\N{U+0447}\N{U+0435}\N{U+0440}\N{U+0432}\N{U+043d}\N{U+044f}",
      "\N{U+043b}\N{U+0438}\N{U+043f}\N{U+043d}\N{U+044f}",
      "\N{U+0441}\N{U+0435}\N{U+0440}\N{U+043f}\N{U+043d}\N{U+044f}",
      "\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+043d}\N{U+044f}",
      "\N{U+0436}\N{U+043e}\N{U+0432}\N{U+0442}\N{U+043d}\N{U+044f}",
      "\N{U+043b}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+043f}\N{U+0430}\N{U+0434}\N{U+0430}",
      "\N{U+0433}\N{U+0440}\N{U+0443}\N{U+0434}\N{U+043d}\N{U+044f}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0421}\N{U+0456}\N{U+0447}",
      "\N{U+041b}\N{U+044e}\N{U+0442}",
      "\N{U+0411}\N{U+0435}\N{U+0440}",
      "\N{U+041a}\N{U+0432}\N{U+0456}",
      "\N{U+0422}\N{U+0440}\N{U+0430}",
      "\N{U+0427}\N{U+0435}\N{U+0440}",
      "\N{U+041b}\N{U+0438}\N{U+043f}",
      "\N{U+0421}\N{U+0435}\N{U+0440}",
      "\N{U+0412}\N{U+0435}\N{U+0440}",
      "\N{U+0416}\N{U+043e}\N{U+0432}",
      "\N{U+041b}\N{U+0438}\N{U+0441}",
      "\N{U+0413}\N{U+0440}\N{U+0443}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0421}",
      "\N{U+041b}",
      "\N{U+0411}",
      "\N{U+041a}",
      "\N{U+0422}",
      "\N{U+0427}",
      "\N{U+041b}",
      "\N{U+0421}",
      "\N{U+0412}",
      "\N{U+0416}",
      "\N{U+041b}",
      "\N{U+0413}"
    ],
    month_stand_alone_wide => [
      "\N{U+0441}\N{U+0456}\N{U+0447}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+043b}\N{U+044e}\N{U+0442}\N{U+0438}\N{U+0439}",
      "\N{U+0431}\N{U+0435}\N{U+0440}\N{U+0435}\N{U+0437}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+043a}\N{U+0432}\N{U+0456}\N{U+0442}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+0442}\N{U+0440}\N{U+0430}\N{U+0432}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+0447}\N{U+0435}\N{U+0440}\N{U+0432}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+043b}\N{U+0438}\N{U+043f}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+0441}\N{U+0435}\N{U+0440}\N{U+043f}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+0436}\N{U+043e}\N{U+0432}\N{U+0442}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+043b}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+043f}\N{U+0430}\N{U+0434}",
      "\N{U+0433}\N{U+0440}\N{U+0443}\N{U+0434}\N{U+0435}\N{U+043d}\N{U+044c}"
    ],
    name => "Ukrainian",
    native_language => "\N{U+0443}\N{U+043a}\N{U+0440}\N{U+0430}\N{U+0457}\N{U+043d}\N{U+0441}\N{U+044c}\N{U+043a}\N{U+0430}",
    native_name => "\N{U+0443}\N{U+043a}\N{U+0440}\N{U+0430}\N{U+0457}\N{U+043d}\N{U+0441}\N{U+044c}\N{U+043a}\N{U+0430}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ uk-UA ]__
  {
    am_pm_abbreviated => [
      "\N{U+0434}\N{U+043f}",
      "\N{U+043f}\N{U+043f}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "LLL y G",
      GyMMMEd => "E, d MMM y G",
      GyMMMd => "d MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "LL",
      MEd => "E, dd.MM",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      Md => "dd.MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "MM.y",
      yMEd => "E, dd.MM.y",
      yMMM => "LLL y",
      yMMMEd => "E, d MMM y",
      yMMMM => "LLLL y",
      yMMMd => "d MMM y",
      yMd => "dd.MM.y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y '\N{U+0440}'."
    },
    code => "uk-UA",
    date_format_full => "EEEE, d MMMM y '\N{U+0440}'.",
    date_format_long => "d MMMM y '\N{U+0440}'.",
    date_format_medium => "d MMM y '\N{U+0440}'.",
    date_format_short => "dd.MM.yy",
    datetime_format_full => "{1} '\N{U+043e}' {0}",
    datetime_format_long => "{1} '\N{U+043e}' {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "\N{U+041f}\N{U+043d}",
      "\N{U+0412}\N{U+0442}",
      "\N{U+0421}\N{U+0440}",
      "\N{U+0427}\N{U+0442}",
      "\N{U+041f}\N{U+0442}",
      "\N{U+0421}\N{U+0431}",
      "\N{U+041d}\N{U+0434}"
    ],
    day_format_narrow => [
      "\N{U+041f}",
      "\N{U+0412}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+041f}",
      "\N{U+0421}",
      "\N{U+041d}"
    ],
    day_format_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0456}\N{U+043b}\N{U+043e}\N{U+043a}",
      "\N{U+0432}\N{U+0456}\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043e}\N{U+043a}",
      "\N{U+0441}\N{U+0435}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}",
      "\N{U+043f}\N{U+02bc}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+044f}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0456}\N{U+043b}\N{U+044f}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+041f}\N{U+043d}",
      "\N{U+0412}\N{U+0442}",
      "\N{U+0421}\N{U+0440}",
      "\N{U+0427}\N{U+0442}",
      "\N{U+041f}\N{U+0442}",
      "\N{U+0421}\N{U+0431}",
      "\N{U+041d}\N{U+0434}"
    ],
    day_stand_alone_narrow => [
      "\N{U+041f}",
      "\N{U+0412}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+041f}",
      "\N{U+0421}",
      "\N{U+041d}"
    ],
    day_stand_alone_wide => [
      "\N{U+043f}\N{U+043e}\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0456}\N{U+043b}\N{U+043e}\N{U+043a}",
      "\N{U+0432}\N{U+0456}\N{U+0432}\N{U+0442}\N{U+043e}\N{U+0440}\N{U+043e}\N{U+043a}",
      "\N{U+0441}\N{U+0435}\N{U+0440}\N{U+0435}\N{U+0434}\N{U+0430}",
      "\N{U+0447}\N{U+0435}\N{U+0442}\N{U+0432}\N{U+0435}\N{U+0440}",
      "\N{U+043f}\N{U+02bc}\N{U+044f}\N{U+0442}\N{U+043d}\N{U+0438}\N{U+0446}\N{U+044f}",
      "\N{U+0441}\N{U+0443}\N{U+0431}\N{U+043e}\N{U+0442}\N{U+0430}",
      "\N{U+043d}\N{U+0435}\N{U+0434}\N{U+0456}\N{U+043b}\N{U+044f}"
    ],
    era_abbreviated => [
      "\N{U+0434}\N{U+043e} \N{U+043d}. \N{U+0435}.",
      "\N{U+043d}. \N{U+0435}."
    ],
    era_narrow => [
      "\N{U+0434}\N{U+043e} \N{U+043d}.\N{U+0435}.",
      "\N{U+043d}.\N{U+0435}."
    ],
    era_wide => [
      "\N{U+0434}\N{U+043e} \N{U+043d}\N{U+0430}\N{U+0448}\N{U+043e}\N{U+0457} \N{U+0435}\N{U+0440}\N{U+0438}",
      "\N{U+043d}\N{U+0430}\N{U+0448}\N{U+043e}\N{U+0457} \N{U+0435}\N{U+0440}\N{U+0438}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%A, %-d %Om %Y %X %z",
    glibc_date_format => "%d.%m.%y",
    glibc_datetime_format => "%a, %d-%b-%Y %X %z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Ukrainian",
    month_format_abbreviated => [
      "\N{U+0441}\N{U+0456}\N{U+0447}.",
      "\N{U+043b}\N{U+044e}\N{U+0442}.",
      "\N{U+0431}\N{U+0435}\N{U+0440}.",
      "\N{U+043a}\N{U+0432}\N{U+0456}\N{U+0442}.",
      "\N{U+0442}\N{U+0440}\N{U+0430}\N{U+0432}.",
      "\N{U+0447}\N{U+0435}\N{U+0440}\N{U+0432}.",
      "\N{U+043b}\N{U+0438}\N{U+043f}.",
      "\N{U+0441}\N{U+0435}\N{U+0440}\N{U+043f}.",
      "\N{U+0432}\N{U+0435}\N{U+0440}.",
      "\N{U+0436}\N{U+043e}\N{U+0432}\N{U+0442}.",
      "\N{U+043b}\N{U+0438}\N{U+0441}\N{U+0442}.",
      "\N{U+0433}\N{U+0440}\N{U+0443}\N{U+0434}."
    ],
    month_format_narrow => [
      "\N{U+0421}",
      "\N{U+041b}",
      "\N{U+0411}",
      "\N{U+041a}",
      "\N{U+0422}",
      "\N{U+0427}",
      "\N{U+041b}",
      "\N{U+0421}",
      "\N{U+0412}",
      "\N{U+0416}",
      "\N{U+041b}",
      "\N{U+0413}"
    ],
    month_format_wide => [
      "\N{U+0441}\N{U+0456}\N{U+0447}\N{U+043d}\N{U+044f}",
      "\N{U+043b}\N{U+044e}\N{U+0442}\N{U+043e}\N{U+0433}\N{U+043e}",
      "\N{U+0431}\N{U+0435}\N{U+0440}\N{U+0435}\N{U+0437}\N{U+043d}\N{U+044f}",
      "\N{U+043a}\N{U+0432}\N{U+0456}\N{U+0442}\N{U+043d}\N{U+044f}",
      "\N{U+0442}\N{U+0440}\N{U+0430}\N{U+0432}\N{U+043d}\N{U+044f}",
      "\N{U+0447}\N{U+0435}\N{U+0440}\N{U+0432}\N{U+043d}\N{U+044f}",
      "\N{U+043b}\N{U+0438}\N{U+043f}\N{U+043d}\N{U+044f}",
      "\N{U+0441}\N{U+0435}\N{U+0440}\N{U+043f}\N{U+043d}\N{U+044f}",
      "\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+043d}\N{U+044f}",
      "\N{U+0436}\N{U+043e}\N{U+0432}\N{U+0442}\N{U+043d}\N{U+044f}",
      "\N{U+043b}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+043f}\N{U+0430}\N{U+0434}\N{U+0430}",
      "\N{U+0433}\N{U+0440}\N{U+0443}\N{U+0434}\N{U+043d}\N{U+044f}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+0421}\N{U+0456}\N{U+0447}",
      "\N{U+041b}\N{U+044e}\N{U+0442}",
      "\N{U+0411}\N{U+0435}\N{U+0440}",
      "\N{U+041a}\N{U+0432}\N{U+0456}",
      "\N{U+0422}\N{U+0440}\N{U+0430}",
      "\N{U+0427}\N{U+0435}\N{U+0440}",
      "\N{U+041b}\N{U+0438}\N{U+043f}",
      "\N{U+0421}\N{U+0435}\N{U+0440}",
      "\N{U+0412}\N{U+0435}\N{U+0440}",
      "\N{U+0416}\N{U+043e}\N{U+0432}",
      "\N{U+041b}\N{U+0438}\N{U+0441}",
      "\N{U+0413}\N{U+0440}\N{U+0443}"
    ],
    month_stand_alone_narrow => [
      "\N{U+0421}",
      "\N{U+041b}",
      "\N{U+0411}",
      "\N{U+041a}",
      "\N{U+0422}",
      "\N{U+0427}",
      "\N{U+041b}",
      "\N{U+0421}",
      "\N{U+0412}",
      "\N{U+0416}",
      "\N{U+041b}",
      "\N{U+0413}"
    ],
    month_stand_alone_wide => [
      "\N{U+0441}\N{U+0456}\N{U+0447}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+043b}\N{U+044e}\N{U+0442}\N{U+0438}\N{U+0439}",
      "\N{U+0431}\N{U+0435}\N{U+0440}\N{U+0435}\N{U+0437}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+043a}\N{U+0432}\N{U+0456}\N{U+0442}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+0442}\N{U+0440}\N{U+0430}\N{U+0432}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+0447}\N{U+0435}\N{U+0440}\N{U+0432}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+043b}\N{U+0438}\N{U+043f}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+0441}\N{U+0435}\N{U+0440}\N{U+043f}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+0432}\N{U+0435}\N{U+0440}\N{U+0435}\N{U+0441}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+0436}\N{U+043e}\N{U+0432}\N{U+0442}\N{U+0435}\N{U+043d}\N{U+044c}",
      "\N{U+043b}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+043f}\N{U+0430}\N{U+0434}",
      "\N{U+0433}\N{U+0440}\N{U+0443}\N{U+0434}\N{U+0435}\N{U+043d}\N{U+044c}"
    ],
    name => "Ukrainian Ukraine",
    native_language => "\N{U+0443}\N{U+043a}\N{U+0440}\N{U+0430}\N{U+0457}\N{U+043d}\N{U+0441}\N{U+044c}\N{U+043a}\N{U+0430}",
    native_name => "\N{U+0443}\N{U+043a}\N{U+0440}\N{U+0430}\N{U+0457}\N{U+043d}\N{U+0441}\N{U+044c}\N{U+043a}\N{U+0430} \N{U+0423}\N{U+043a}\N{U+0440}\N{U+0430}\N{U+0457}\N{U+043d}\N{U+0430}",
    native_script => undef,
    native_territory => "\N{U+0423}\N{U+043a}\N{U+0440}\N{U+0430}\N{U+0457}\N{U+043d}\N{U+0430}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}.",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}."
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "2-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "3-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}",
      "4-\N{U+0439} \N{U+043a}\N{U+0432}\N{U+0430}\N{U+0440}\N{U+0442}\N{U+0430}\N{U+043b}"
    ],
    script => undef,
    territory => "Ukraine",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ ur ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E\N{U+060c} d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ur",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "d MMM\N{U+060c} y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0633}\N{U+0648}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+0633}\N{U+0648}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0633}\N{U+0648}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+0633}\N{U+0648}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    era_abbreviated => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0645}\N{U+0633}\N{U+06cc}\N{U+062d}",
      "\N{U+0639}\N{U+06cc}\N{U+0633}\N{U+0648}\N{U+06cc}"
    ],
    era_narrow => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0645}\N{U+0633}\N{U+06cc}\N{U+062d}",
      "\N{U+0639}\N{U+06cc}\N{U+0633}\N{U+0648}\N{U+06cc}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0645}\N{U+0633}\N{U+06cc}\N{U+062d}",
      "\N{U+0639}\N{U+06cc}\N{U+0633}\N{U+0648}\N{U+06cc}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Urdu",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Urdu",
    native_language => "\N{U+0627}\N{U+0631}\N{U+062f}\N{U+0648}",
    native_name => "\N{U+0627}\N{U+0631}\N{U+062f}\N{U+0648}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+067e}\N{U+06c1}\N{U+0644}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062f}\N{U+0648}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062a}\N{U+06cc}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+0647}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+067e}\N{U+06c1}\N{U+0644}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062f}\N{U+0648}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062a}\N{U+06cc}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+0647}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+067e}\N{U+06c1}\N{U+0644}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062f}\N{U+0648}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062a}\N{U+06cc}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+0647}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+067e}\N{U+06c1}\N{U+0644}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062f}\N{U+0648}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062a}\N{U+06cc}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+0647}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ur-IN ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E\N{U+060c} d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ur-IN",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "d MMM\N{U+060c} y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0633}\N{U+0648}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+0633}\N{U+0648}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0633}\N{U+0648}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+0633}\N{U+0648}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    era_abbreviated => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0645}\N{U+0633}\N{U+06cc}\N{U+062d}",
      "\N{U+0639}\N{U+06cc}\N{U+0633}\N{U+0648}\N{U+06cc}"
    ],
    era_narrow => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0645}\N{U+0633}\N{U+06cc}\N{U+062d}",
      "\N{U+0639}\N{U+06cc}\N{U+0633}\N{U+0648}\N{U+06cc}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0645}\N{U+0633}\N{U+06cc}\N{U+062d}",
      "\N{U+0639}\N{U+06cc}\N{U+0633}\N{U+0648}\N{U+06cc}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%A %d %b %Y",
    glibc_datetime_format => "%A %d %b %Y %I:%M:%S %p %Z",
    glibc_time_12_format => "%I:%M:%S %p %Z",
    glibc_time_format => "%I:%M:%S  %Z",
    language => "Urdu",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Urdu India",
    native_language => "\N{U+0627}\N{U+0631}\N{U+062f}\N{U+0648}",
    native_name => "\N{U+0627}\N{U+0631}\N{U+062f}\N{U+0648} \N{U+0628}\N{U+06be}\N{U+0627}\N{U+0631}\N{U+062a}",
    native_script => undef,
    native_territory => "\N{U+0628}\N{U+06be}\N{U+0627}\N{U+0631}\N{U+062a}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+067e}\N{U+06c1}\N{U+0644}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062f}\N{U+0648}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062a}\N{U+06cc}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+0647}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+067e}\N{U+06c1}\N{U+0644}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062f}\N{U+0648}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062a}\N{U+06cc}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+0647}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+067e}\N{U+06c1}\N{U+0644}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062f}\N{U+0648}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062a}\N{U+06cc}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+0647}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+067e}\N{U+06c1}\N{U+0644}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062f}\N{U+0648}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062a}\N{U+06cc}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+0647}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}"
    ],
    script => undef,
    territory => "India",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ ur-PK ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E\N{U+060c} d MMM\N{U+060c} y G",
      GyMMMd => "d MMM\N{U+060c} y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E\N{U+060c} d/M",
      MMM => "LLL",
      MMMEd => "E\N{U+060c} d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E\N{U+060c} d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E\N{U+060c} d MMM\N{U+060c} y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM\N{U+060c} y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "ur-PK",
    date_format_full => "EEEE\N{U+060c} d MMMM\N{U+060c} y",
    date_format_long => "d MMMM\N{U+060c} y",
    date_format_medium => "d MMM\N{U+060c} y",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0633}\N{U+0648}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+0633}\N{U+0648}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0633}\N{U+0648}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+0633}\N{U+0648}\N{U+0645}\N{U+0648}\N{U+0627}\N{U+0631}",
      "\N{U+0645}\N{U+0646}\N{U+06af}\N{U+0644}",
      "\N{U+0628}\N{U+062f}\N{U+06be}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0631}\N{U+0627}\N{U+062a}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+06c1}",
      "\N{U+06c1}\N{U+0641}\N{U+062a}\N{U+06c1}",
      "\N{U+0627}\N{U+062a}\N{U+0648}\N{U+0627}\N{U+0631}"
    ],
    era_abbreviated => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0645}\N{U+0633}\N{U+06cc}\N{U+062d}",
      "\N{U+0639}\N{U+06cc}\N{U+0633}\N{U+0648}\N{U+06cc}"
    ],
    era_narrow => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0645}\N{U+0633}\N{U+06cc}\N{U+062d}",
      "\N{U+0639}\N{U+06cc}\N{U+0633}\N{U+0648}\N{U+06cc}"
    ],
    era_wide => [
      "\N{U+0642}\N{U+0628}\N{U+0644} \N{U+0645}\N{U+0633}\N{U+06cc}\N{U+062d}",
      "\N{U+0639}\N{U+06cc}\N{U+0633}\N{U+0648}\N{U+06cc}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "\N{U+0648} %H:%M:%S %Z \N{U+062a} %d %B %Y",
    glibc_time_12_format => "%P %I:%M:%S",
    glibc_time_format => "%H:%M:%S",
    language => "Urdu",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+0626}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+0626}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Urdu Pakistan",
    native_language => "\N{U+0627}\N{U+0631}\N{U+062f}\N{U+0648}",
    native_name => "\N{U+0627}\N{U+0631}\N{U+062f}\N{U+0648} \N{U+067e}\N{U+0627}\N{U+06a9}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646}",
    native_script => undef,
    native_territory => "\N{U+067e}\N{U+0627}\N{U+06a9}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+067e}\N{U+06c1}\N{U+0644}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062f}\N{U+0648}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062a}\N{U+06cc}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+0647}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+067e}\N{U+06c1}\N{U+0644}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062f}\N{U+0648}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062a}\N{U+06cc}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+0647}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+067e}\N{U+06c1}\N{U+0644}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062f}\N{U+0648}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062a}\N{U+06cc}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+0647}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+067e}\N{U+06c1}\N{U+0644}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062f}\N{U+0648}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+062a}\N{U+06cc}\N{U+0633}\N{U+0631}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}",
      "\N{U+0686}\N{U+0648}\N{U+062a}\N{U+0647}\N{U+06cc} \N{U+0633}\N{U+06c1} \N{U+0645}\N{U+0627}\N{U+06c1}\N{U+06cc}"
    ],
    script => undef,
    territory => "Pakistan",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ uz ]__
  {
    am_pm_abbreviated => [
      "TO",
      "TK"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "d, E",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "G y",
      GyMMM => "MMM, G y",
      GyMMMEd => "E, d-MMM, G y",
      GyMMMd => "d-MMM, G y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss (v)",
      Hmv => "HH:mm (v)",
      M => "LL",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d-MMM",
      MMMMd => "d-MMMM",
      MMMd => "d-MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss (v)",
      hmv => "h:mm (v)",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM, y",
      yMMMEd => "E, d-MMM, y",
      yMMMM => "MMMM, y",
      yMMMd => "d-MMM, y",
      yMd => "dd/MM/y",
      yQQQ => "y, QQQ",
      yQQQQ => "y, QQQQ"
    },
    code => "uz",
    date_format_full => "EEEE, y MMMM dd",
    date_format_long => "d-MMMM, y",
    date_format_medium => "d-MMM, y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Du",
      "Se",
      "Ch",
      "Pa",
      "Ju",
      "Sh",
      "Ya"
    ],
    day_format_narrow => [
      "D",
      "S",
      "C",
      "P",
      "J",
      "S",
      "Y"
    ],
    day_format_wide => [
      "dushanba",
      "seshanba",
      "chorshanba",
      "payshanba",
      "juma",
      "shanba",
      "yakshanba"
    ],
    day_stand_alone_abbreviated => [
      "Du",
      "Se",
      "Ch",
      "Pa",
      "Ju",
      "Sh",
      "Ya"
    ],
    day_stand_alone_narrow => [
      "D",
      "S",
      "C",
      "P",
      "J",
      "S",
      "Y"
    ],
    day_stand_alone_wide => [
      "dushanba",
      "seshanba",
      "chorshanba",
      "payshanba",
      "juma",
      "shanba",
      "yakshanba"
    ],
    era_abbreviated => [
      "m.a.",
      "milodiy"
    ],
    era_narrow => [
      "m.a.",
      "milodiy"
    ],
    era_wide => [
      "miloddan avvalgi",
      "milodiy"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Uzbek",
    month_format_abbreviated => [
      "yan",
      "fev",
      "mar",
      "apr",
      "may",
      "iyn",
      "iyl",
      "avg",
      "sen",
      "okt",
      "noy",
      "dek"
    ],
    month_format_narrow => [
      "Y",
      "F",
      "M",
      "A",
      "M",
      "I",
      "I",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "yanvar",
      "fevral",
      "mart",
      "aprel",
      "may",
      "iyun",
      "iyul",
      "avgust",
      "Sentabr",
      "Oktabr",
      "noyabr",
      "dekabr"
    ],
    month_stand_alone_abbreviated => [
      "Yanv",
      "Fev",
      "Mar",
      "Apr",
      "May",
      "Iyun",
      "Iyul",
      "Avg",
      "Sen",
      "Okt",
      "Noya",
      "Dek"
    ],
    month_stand_alone_narrow => [
      "Y",
      "F",
      "M",
      "A",
      "M",
      "I",
      "I",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Yanvar",
      "Fevral",
      "Mart",
      "Aprel",
      "May",
      "Iyun",
      "Iyul",
      "Avgust",
      "Sentabr",
      "Oktabr",
      "Noyabr",
      "Dekabr"
    ],
    name => "Uzbek",
    native_language => "o\N{U+2018}zbek",
    native_name => "o\N{U+2018}zbek",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-ch",
      "2-ch",
      "3-ch",
      "4-ch"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-chorak",
      "2-chorak",
      "3-chorak",
      "4-chorak"
    ],
    quarter_stand_alone_abbreviated => [
      "1-ch",
      "2-ch",
      "3-ch",
      "4-ch"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-chorak",
      "2-chorak",
      "3-chorak",
      "4-chorak"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H:mm:ss (zzzz)",
    time_format_long => "H:mm:ss (z)",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ uz-Arab ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "uz-Arab",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+062f}.",
      "\N{U+0633}.",
      "\N{U+0686}.",
      "\N{U+067e}.",
      "\N{U+062c}.",
      "\N{U+0634}.",
      "\N{U+06cc}."
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+062f}.",
      "\N{U+0633}.",
      "\N{U+0686}.",
      "\N{U+067e}.",
      "\N{U+062c}.",
      "\N{U+0634}.",
      "\N{U+06cc}."
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Uzbek",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}",
      "\N{U+0641}\N{U+0628}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}",
      "\N{U+0627}\N{U+067e}\N{U+0631}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+06af}\N{U+0633}",
      "\N{U+0633}\N{U+067e}\N{U+062a}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}",
      "\N{U+0646}\N{U+0648}\N{U+0645}",
      "\N{U+062f}\N{U+0633}\N{U+0645}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}",
      "\N{U+0641}\N{U+0628}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}",
      "\N{U+0627}\N{U+067e}\N{U+0631}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+06af}\N{U+0633}",
      "\N{U+0633}\N{U+067e}\N{U+062a}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}",
      "\N{U+0646}\N{U+0648}\N{U+0645}",
      "\N{U+062f}\N{U+0633}\N{U+0645}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Uzbek",
    native_language => "\N{U+0627}\N{U+0648}\N{U+0632}\N{U+0628}\N{U+06cc}\N{U+06a9}",
    native_name => "\N{U+0627}\N{U+0648}\N{U+0632}\N{U+0628}\N{U+06cc}\N{U+06a9}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ uz-Arab-AF ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "uz-Arab-AF",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+062f}.",
      "\N{U+0633}.",
      "\N{U+0686}.",
      "\N{U+067e}.",
      "\N{U+062c}.",
      "\N{U+0634}.",
      "\N{U+06cc}."
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+062f}.",
      "\N{U+0633}.",
      "\N{U+0686}.",
      "\N{U+067e}.",
      "\N{U+062c}.",
      "\N{U+0634}.",
      "\N{U+06cc}."
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+062f}\N{U+0648}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0633}\N{U+0647}\N{U+200c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+0686}\N{U+0647}\N{U+0627}\N{U+0631}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+067e}\N{U+0646}\N{U+062c}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+062c}\N{U+0645}\N{U+0639}\N{U+0647}",
      "\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}",
      "\N{U+06cc}\N{U+06a9}\N{U+0634}\N{U+0646}\N{U+0628}\N{U+0647}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Uzbek",
    month_format_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}",
      "\N{U+0641}\N{U+0628}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}",
      "\N{U+0627}\N{U+067e}\N{U+0631}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+06af}\N{U+0633}",
      "\N{U+0633}\N{U+067e}\N{U+062a}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}",
      "\N{U+0646}\N{U+0648}\N{U+0645}",
      "\N{U+062f}\N{U+0633}\N{U+0645}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+062c}\N{U+0646}\N{U+0648}",
      "\N{U+0641}\N{U+0628}\N{U+0631}",
      "\N{U+0645}\N{U+0627}\N{U+0631}",
      "\N{U+0627}\N{U+067e}\N{U+0631}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}",
      "\N{U+0627}\N{U+06af}\N{U+0633}",
      "\N{U+0633}\N{U+067e}\N{U+062a}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}",
      "\N{U+0646}\N{U+0648}\N{U+0645}",
      "\N{U+062f}\N{U+0633}\N{U+0645}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+062c}\N{U+0646}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0641}\N{U+0628}\N{U+0631}\N{U+0648}\N{U+0631}\N{U+06cc}",
      "\N{U+0645}\N{U+0627}\N{U+0631}\N{U+0686}",
      "\N{U+0627}\N{U+067e}\N{U+0631}\N{U+06cc}\N{U+0644}",
      "\N{U+0645}\N{U+06cc}",
      "\N{U+062c}\N{U+0648}\N{U+0646}",
      "\N{U+062c}\N{U+0648}\N{U+0644}\N{U+0627}\N{U+06cc}",
      "\N{U+0627}\N{U+06af}\N{U+0633}\N{U+062a}",
      "\N{U+0633}\N{U+067e}\N{U+062a}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+0627}\N{U+06a9}\N{U+062a}\N{U+0648}\N{U+0628}\N{U+0631}",
      "\N{U+0646}\N{U+0648}\N{U+0645}\N{U+0628}\N{U+0631}",
      "\N{U+062f}\N{U+0633}\N{U+0645}\N{U+0628}\N{U+0631}"
    ],
    name => "Uzbek Afghanistan Arabic",
    native_language => "\N{U+0627}\N{U+0648}\N{U+0632}\N{U+0628}\N{U+06cc}\N{U+06a9}",
    native_name => "\N{U+0627}\N{U+0648}\N{U+0632}\N{U+0628}\N{U+06cc}\N{U+06a9} \N{U+0627}\N{U+0641}\N{U+063a}\N{U+0627}\N{U+0646}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646} \N{U+0639}\N{U+0631}\N{U+0628}\N{U+06cc}",
    native_script => "\N{U+0639}\N{U+0631}\N{U+0628}\N{U+06cc}",
    native_territory => "\N{U+0627}\N{U+0641}\N{U+063a}\N{U+0627}\N{U+0646}\N{U+0633}\N{U+062a}\N{U+0627}\N{U+0646}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => "Arabic",
    territory => "Afghanistan",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ uz-Cyrl ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "uz-Cyrl",
    date_format_full => "EEEE, y MMMM dd",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0414}\N{U+0443}\N{U+0448}",
      "\N{U+0421}\N{U+0435}\N{U+0448}",
      "\N{U+0427}\N{U+043e}\N{U+0440}",
      "\N{U+041f}\N{U+0430}\N{U+0439}",
      "\N{U+0416}\N{U+0443}\N{U+043c}",
      "\N{U+0428}\N{U+0430}\N{U+043d}",
      "\N{U+042f}\N{U+043a}\N{U+0448}"
    ],
    day_format_narrow => [
      "\N{U+0414}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+041f}",
      "\N{U+0416}",
      "\N{U+0428}",
      "\N{U+042f}"
    ],
    day_format_wide => [
      "\N{U+0434}\N{U+0443}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+0441}\N{U+0435}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+043f}\N{U+0430}\N{U+0439}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+0436}\N{U+0443}\N{U+043c}\N{U+0430}",
      "\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+044f}\N{U+043a}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0414}\N{U+0443}\N{U+0448}",
      "\N{U+0421}\N{U+0435}\N{U+0448}",
      "\N{U+0427}\N{U+043e}\N{U+0440}",
      "\N{U+041f}\N{U+0430}\N{U+0439}",
      "\N{U+0416}\N{U+0443}\N{U+043c}",
      "\N{U+0428}\N{U+0430}\N{U+043d}",
      "\N{U+042f}\N{U+043a}\N{U+0448}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0414}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+041f}",
      "\N{U+0416}",
      "\N{U+0428}",
      "\N{U+042f}"
    ],
    day_stand_alone_wide => [
      "\N{U+0434}\N{U+0443}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+0441}\N{U+0435}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+043f}\N{U+0430}\N{U+0439}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+0436}\N{U+0443}\N{U+043c}\N{U+0430}",
      "\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+044f}\N{U+043a}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}"
    ],
    era_abbreviated => [
      "\N{U+041c}.\N{U+0410}.",
      "\N{U+042d}"
    ],
    era_narrow => [
      "\N{U+041c}.\N{U+0410}.",
      "\N{U+042d}"
    ],
    era_wide => [
      "\N{U+041c}.\N{U+0410}.",
      "\N{U+042d}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Uzbek",
    month_format_abbreviated => [
      "\N{U+042f}\N{U+043d}\N{U+0432}",
      "\N{U+0424}\N{U+0435}\N{U+0432}",
      "\N{U+041c}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+043f}\N{U+0440}",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}",
      "\N{U+0418}\N{U+044e}\N{U+043b}",
      "\N{U+0410}\N{U+0432}\N{U+0433}",
      "\N{U+0421}\N{U+0435}\N{U+043d}",
      "\N{U+041e}\N{U+043a}\N{U+0442}",
      "\N{U+041d}\N{U+043e}\N{U+044f}",
      "\N{U+0414}\N{U+0435}\N{U+043a}"
    ],
    month_format_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_format_wide => [
      "\N{U+042f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}",
      "\N{U+0424}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}",
      "\N{U+041c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0410}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}",
      "\N{U+0418}\N{U+044e}\N{U+043b}",
      "\N{U+0410}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0421}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}",
      "\N{U+041e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}",
      "\N{U+041d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}",
      "\N{U+0414}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+042f}\N{U+043d}\N{U+0432}",
      "\N{U+0424}\N{U+0435}\N{U+0432}",
      "\N{U+041c}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+043f}\N{U+0440}",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}",
      "\N{U+0418}\N{U+044e}\N{U+043b}",
      "\N{U+0410}\N{U+0432}\N{U+0433}",
      "\N{U+0421}\N{U+0435}\N{U+043d}",
      "\N{U+041e}\N{U+043a}\N{U+0442}",
      "\N{U+041d}\N{U+043e}\N{U+044f}",
      "\N{U+0414}\N{U+0435}\N{U+043a}"
    ],
    month_stand_alone_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_stand_alone_wide => [
      "\N{U+042f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}",
      "\N{U+0424}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}",
      "\N{U+041c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0410}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}",
      "\N{U+0418}\N{U+044e}\N{U+043b}",
      "\N{U+0410}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0421}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}",
      "\N{U+041e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}",
      "\N{U+041d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}",
      "\N{U+0414}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}"
    ],
    name => "Uzbek",
    native_language => "\N{U+040e}\N{U+0437}\N{U+0431}\N{U+0435}\N{U+043a}",
    native_name => "\N{U+040e}\N{U+0437}\N{U+0431}\N{U+0435}\N{U+043a}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0447}",
      "2-\N{U+0447}",
      "3-\N{U+0447}",
      "4-\N{U+0447}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "2-\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "3-\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "4-\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0447}",
      "2-\N{U+0447}",
      "3-\N{U+0447}",
      "4-\N{U+0447}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "2-\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "3-\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "4-\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ uz-Cyrl-UZ ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "uz-Cyrl-UZ",
    date_format_full => "EEEE, y MMMM dd",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+0414}\N{U+0443}\N{U+0448}",
      "\N{U+0421}\N{U+0435}\N{U+0448}",
      "\N{U+0427}\N{U+043e}\N{U+0440}",
      "\N{U+041f}\N{U+0430}\N{U+0439}",
      "\N{U+0416}\N{U+0443}\N{U+043c}",
      "\N{U+0428}\N{U+0430}\N{U+043d}",
      "\N{U+042f}\N{U+043a}\N{U+0448}"
    ],
    day_format_narrow => [
      "\N{U+0414}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+041f}",
      "\N{U+0416}",
      "\N{U+0428}",
      "\N{U+042f}"
    ],
    day_format_wide => [
      "\N{U+0434}\N{U+0443}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+0441}\N{U+0435}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+043f}\N{U+0430}\N{U+0439}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+0436}\N{U+0443}\N{U+043c}\N{U+0430}",
      "\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+044f}\N{U+043a}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+0414}\N{U+0443}\N{U+0448}",
      "\N{U+0421}\N{U+0435}\N{U+0448}",
      "\N{U+0427}\N{U+043e}\N{U+0440}",
      "\N{U+041f}\N{U+0430}\N{U+0439}",
      "\N{U+0416}\N{U+0443}\N{U+043c}",
      "\N{U+0428}\N{U+0430}\N{U+043d}",
      "\N{U+042f}\N{U+043a}\N{U+0448}"
    ],
    day_stand_alone_narrow => [
      "\N{U+0414}",
      "\N{U+0421}",
      "\N{U+0427}",
      "\N{U+041f}",
      "\N{U+0416}",
      "\N{U+0428}",
      "\N{U+042f}"
    ],
    day_stand_alone_wide => [
      "\N{U+0434}\N{U+0443}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+0441}\N{U+0435}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+043f}\N{U+0430}\N{U+0439}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+0436}\N{U+0443}\N{U+043c}\N{U+0430}",
      "\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}",
      "\N{U+044f}\N{U+043a}\N{U+0448}\N{U+0430}\N{U+043d}\N{U+0431}\N{U+0430}"
    ],
    era_abbreviated => [
      "\N{U+041c}.\N{U+0410}.",
      "\N{U+042d}"
    ],
    era_narrow => [
      "\N{U+041c}.\N{U+0410}.",
      "\N{U+042d}"
    ],
    era_wide => [
      "\N{U+041c}.\N{U+0410}.",
      "\N{U+042d}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%d %B, %Y \N{U+0439}\N{U+0438}\N{U+043b}, %A",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "%T, %d %B, %Y \N{U+0439}\N{U+0438}\N{U+043b}, %A",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Uzbek",
    month_format_abbreviated => [
      "\N{U+042f}\N{U+043d}\N{U+0432}",
      "\N{U+0424}\N{U+0435}\N{U+0432}",
      "\N{U+041c}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+043f}\N{U+0440}",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}",
      "\N{U+0418}\N{U+044e}\N{U+043b}",
      "\N{U+0410}\N{U+0432}\N{U+0433}",
      "\N{U+0421}\N{U+0435}\N{U+043d}",
      "\N{U+041e}\N{U+043a}\N{U+0442}",
      "\N{U+041d}\N{U+043e}\N{U+044f}",
      "\N{U+0414}\N{U+0435}\N{U+043a}"
    ],
    month_format_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_format_wide => [
      "\N{U+042f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}",
      "\N{U+0424}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}",
      "\N{U+041c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0410}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}",
      "\N{U+0418}\N{U+044e}\N{U+043b}",
      "\N{U+0410}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0421}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}",
      "\N{U+041e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}",
      "\N{U+041d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}",
      "\N{U+0414}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+042f}\N{U+043d}\N{U+0432}",
      "\N{U+0424}\N{U+0435}\N{U+0432}",
      "\N{U+041c}\N{U+0430}\N{U+0440}",
      "\N{U+0410}\N{U+043f}\N{U+0440}",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}",
      "\N{U+0418}\N{U+044e}\N{U+043b}",
      "\N{U+0410}\N{U+0432}\N{U+0433}",
      "\N{U+0421}\N{U+0435}\N{U+043d}",
      "\N{U+041e}\N{U+043a}\N{U+0442}",
      "\N{U+041d}\N{U+043e}\N{U+044f}",
      "\N{U+0414}\N{U+0435}\N{U+043a}"
    ],
    month_stand_alone_narrow => [
      "\N{U+042f}",
      "\N{U+0424}",
      "\N{U+041c}",
      "\N{U+0410}",
      "\N{U+041c}",
      "\N{U+0418}",
      "\N{U+0418}",
      "\N{U+0410}",
      "\N{U+0421}",
      "\N{U+041e}",
      "\N{U+041d}",
      "\N{U+0414}"
    ],
    month_stand_alone_wide => [
      "\N{U+042f}\N{U+043d}\N{U+0432}\N{U+0430}\N{U+0440}",
      "\N{U+0424}\N{U+0435}\N{U+0432}\N{U+0440}\N{U+0430}\N{U+043b}",
      "\N{U+041c}\N{U+0430}\N{U+0440}\N{U+0442}",
      "\N{U+0410}\N{U+043f}\N{U+0440}\N{U+0435}\N{U+043b}",
      "\N{U+041c}\N{U+0430}\N{U+0439}",
      "\N{U+0418}\N{U+044e}\N{U+043d}",
      "\N{U+0418}\N{U+044e}\N{U+043b}",
      "\N{U+0410}\N{U+0432}\N{U+0433}\N{U+0443}\N{U+0441}\N{U+0442}",
      "\N{U+0421}\N{U+0435}\N{U+043d}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}",
      "\N{U+041e}\N{U+043a}\N{U+0442}\N{U+044f}\N{U+0431}\N{U+0440}",
      "\N{U+041d}\N{U+043e}\N{U+044f}\N{U+0431}\N{U+0440}",
      "\N{U+0414}\N{U+0435}\N{U+043a}\N{U+0430}\N{U+0431}\N{U+0440}"
    ],
    name => "Uzbek Uzbekistan Cyrillic",
    native_language => "\N{U+040e}\N{U+0437}\N{U+0431}\N{U+0435}\N{U+043a}",
    native_name => "\N{U+040e}\N{U+0437}\N{U+0431}\N{U+0435}\N{U+043a} \N{U+040e}\N{U+0437}\N{U+0431}\N{U+0435}\N{U+043a}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+043d} \N{U+041a}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}",
    native_script => "\N{U+041a}\N{U+0438}\N{U+0440}\N{U+0438}\N{U+043b}",
    native_territory => "\N{U+040e}\N{U+0437}\N{U+0431}\N{U+0435}\N{U+043a}\N{U+0438}\N{U+0441}\N{U+0442}\N{U+043e}\N{U+043d}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-\N{U+0447}",
      "2-\N{U+0447}",
      "3-\N{U+0447}",
      "4-\N{U+0447}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "2-\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "3-\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "4-\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}"
    ],
    quarter_stand_alone_abbreviated => [
      "1-\N{U+0447}",
      "2-\N{U+0447}",
      "3-\N{U+0447}",
      "4-\N{U+0447}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "2-\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "3-\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}",
      "4-\N{U+0447}\N{U+043e}\N{U+0440}\N{U+0430}\N{U+043a}"
    ],
    script => "Cyrillic",
    territory => "Uzbekistan",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ uz-Latn ]__
  {
    am_pm_abbreviated => [
      "TO",
      "TK"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "d, E",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "G y",
      GyMMM => "MMM, G y",
      GyMMMEd => "E, d-MMM, G y",
      GyMMMd => "d-MMM, G y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss (v)",
      Hmv => "HH:mm (v)",
      M => "LL",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d-MMM",
      MMMMd => "d-MMMM",
      MMMd => "d-MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss (v)",
      hmv => "h:mm (v)",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM, y",
      yMMMEd => "E, d-MMM, y",
      yMMMM => "MMMM, y",
      yMMMd => "d-MMM, y",
      yMd => "dd/MM/y",
      yQQQ => "y, QQQ",
      yQQQQ => "y, QQQQ"
    },
    code => "uz-Latn",
    date_format_full => "EEEE, y MMMM dd",
    date_format_long => "d-MMMM, y",
    date_format_medium => "d-MMM, y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Du",
      "Se",
      "Ch",
      "Pa",
      "Ju",
      "Sh",
      "Ya"
    ],
    day_format_narrow => [
      "D",
      "S",
      "C",
      "P",
      "J",
      "S",
      "Y"
    ],
    day_format_wide => [
      "dushanba",
      "seshanba",
      "chorshanba",
      "payshanba",
      "juma",
      "shanba",
      "yakshanba"
    ],
    day_stand_alone_abbreviated => [
      "Du",
      "Se",
      "Ch",
      "Pa",
      "Ju",
      "Sh",
      "Ya"
    ],
    day_stand_alone_narrow => [
      "D",
      "S",
      "C",
      "P",
      "J",
      "S",
      "Y"
    ],
    day_stand_alone_wide => [
      "dushanba",
      "seshanba",
      "chorshanba",
      "payshanba",
      "juma",
      "shanba",
      "yakshanba"
    ],
    era_abbreviated => [
      "m.a.",
      "milodiy"
    ],
    era_narrow => [
      "m.a.",
      "milodiy"
    ],
    era_wide => [
      "miloddan avvalgi",
      "milodiy"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Uzbek",
    month_format_abbreviated => [
      "yan",
      "fev",
      "mar",
      "apr",
      "may",
      "iyn",
      "iyl",
      "avg",
      "sen",
      "okt",
      "noy",
      "dek"
    ],
    month_format_narrow => [
      "Y",
      "F",
      "M",
      "A",
      "M",
      "I",
      "I",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "yanvar",
      "fevral",
      "mart",
      "aprel",
      "may",
      "iyun",
      "iyul",
      "avgust",
      "Sentabr",
      "Oktabr",
      "noyabr",
      "dekabr"
    ],
    month_stand_alone_abbreviated => [
      "Yanv",
      "Fev",
      "Mar",
      "Apr",
      "May",
      "Iyun",
      "Iyul",
      "Avg",
      "Sen",
      "Okt",
      "Noya",
      "Dek"
    ],
    month_stand_alone_narrow => [
      "Y",
      "F",
      "M",
      "A",
      "M",
      "I",
      "I",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Yanvar",
      "Fevral",
      "Mart",
      "Aprel",
      "May",
      "Iyun",
      "Iyul",
      "Avgust",
      "Sentabr",
      "Oktabr",
      "Noyabr",
      "Dekabr"
    ],
    name => "Uzbek",
    native_language => "o\N{U+2018}zbek",
    native_name => "o\N{U+2018}zbek",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-ch",
      "2-ch",
      "3-ch",
      "4-ch"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-chorak",
      "2-chorak",
      "3-chorak",
      "4-chorak"
    ],
    quarter_stand_alone_abbreviated => [
      "1-ch",
      "2-ch",
      "3-ch",
      "4-ch"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-chorak",
      "2-chorak",
      "3-chorak",
      "4-chorak"
    ],
    script => undef,
    territory => undef,
    time_format_full => "H:mm:ss (zzzz)",
    time_format_long => "H:mm:ss (z)",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ uz-Latn-UZ ]__
  {
    am_pm_abbreviated => [
      "TO",
      "TK"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E, HH:mm",
      EHms => "E, HH:mm:ss",
      Ed => "d, E",
      Ehm => "E, h:mm a",
      Ehms => "E, h:mm:ss a",
      Gy => "G y",
      GyMMM => "MMM, G y",
      GyMMMEd => "E, d-MMM, G y",
      GyMMMd => "d-MMM, G y",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss (v)",
      Hmv => "HH:mm (v)",
      M => "LL",
      MEd => "E, dd/MM",
      MMM => "LLL",
      MMMEd => "E, d-MMM",
      MMMMd => "d-MMMM",
      MMMd => "d-MMM",
      Md => "dd/MM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss (v)",
      hmv => "h:mm (v)",
      ms => "mm:ss",
      y => "y",
      yM => "MM/y",
      yMEd => "E, dd/MM/y",
      yMMM => "MMM, y",
      yMMMEd => "E, d-MMM, y",
      yMMMM => "MMMM, y",
      yMMMd => "d-MMM, y",
      yMd => "dd/MM/y",
      yQQQ => "y, QQQ",
      yQQQQ => "y, QQQQ"
    },
    code => "uz-Latn-UZ",
    date_format_full => "EEEE, y MMMM dd",
    date_format_long => "d-MMMM, y",
    date_format_medium => "d-MMM, y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1}, {0}",
    datetime_format_long => "{1}, {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1}, {0}",
    day_format_abbreviated => [
      "Du",
      "Se",
      "Ch",
      "Pa",
      "Ju",
      "Sh",
      "Ya"
    ],
    day_format_narrow => [
      "D",
      "S",
      "C",
      "P",
      "J",
      "S",
      "Y"
    ],
    day_format_wide => [
      "dushanba",
      "seshanba",
      "chorshanba",
      "payshanba",
      "juma",
      "shanba",
      "yakshanba"
    ],
    day_stand_alone_abbreviated => [
      "Du",
      "Se",
      "Ch",
      "Pa",
      "Ju",
      "Sh",
      "Ya"
    ],
    day_stand_alone_narrow => [
      "D",
      "S",
      "C",
      "P",
      "J",
      "S",
      "Y"
    ],
    day_stand_alone_wide => [
      "dushanba",
      "seshanba",
      "chorshanba",
      "payshanba",
      "juma",
      "shanba",
      "yakshanba"
    ],
    era_abbreviated => [
      "m.a.",
      "milodiy"
    ],
    era_narrow => [
      "m.a.",
      "milodiy"
    ],
    era_wide => [
      "miloddan avvalgi",
      "milodiy"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Uzbek",
    month_format_abbreviated => [
      "yan",
      "fev",
      "mar",
      "apr",
      "may",
      "iyn",
      "iyl",
      "avg",
      "sen",
      "okt",
      "noy",
      "dek"
    ],
    month_format_narrow => [
      "Y",
      "F",
      "M",
      "A",
      "M",
      "I",
      "I",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "yanvar",
      "fevral",
      "mart",
      "aprel",
      "may",
      "iyun",
      "iyul",
      "avgust",
      "Sentabr",
      "Oktabr",
      "noyabr",
      "dekabr"
    ],
    month_stand_alone_abbreviated => [
      "Yanv",
      "Fev",
      "Mar",
      "Apr",
      "May",
      "Iyun",
      "Iyul",
      "Avg",
      "Sen",
      "Okt",
      "Noya",
      "Dek"
    ],
    month_stand_alone_narrow => [
      "Y",
      "F",
      "M",
      "A",
      "M",
      "I",
      "I",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Yanvar",
      "Fevral",
      "Mart",
      "Aprel",
      "May",
      "Iyun",
      "Iyul",
      "Avgust",
      "Sentabr",
      "Oktabr",
      "Noyabr",
      "Dekabr"
    ],
    name => "Uzbek Uzbekistan Latin",
    native_language => "o\N{U+2018}zbek",
    native_name => "o\N{U+2018}zbek O\N{U+02bb}zbekiston lotin",
    native_script => "lotin",
    native_territory => "O\N{U+02bb}zbekiston",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1-ch",
      "2-ch",
      "3-ch",
      "4-ch"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1-chorak",
      "2-chorak",
      "3-chorak",
      "4-chorak"
    ],
    quarter_stand_alone_abbreviated => [
      "1-ch",
      "2-ch",
      "3-ch",
      "4-ch"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1-chorak",
      "2-chorak",
      "3-chorak",
      "4-chorak"
    ],
    script => "Latin",
    territory => "Uzbekistan",
    time_format_full => "H:mm:ss (zzzz)",
    time_format_long => "H:mm:ss (z)",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ vai ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "vai",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+a5f3}\N{U+a5e1}\N{U+a609}",
      "\N{U+a55a}\N{U+a55e}\N{U+a55a}",
      "\N{U+a549}\N{U+a55e}\N{U+a552}",
      "\N{U+a549}\N{U+a524}\N{U+a546}\N{U+a562}",
      "\N{U+a549}\N{U+a524}\N{U+a540}\N{U+a56e}",
      "\N{U+a53b}\N{U+a52c}\N{U+a533}",
      "\N{U+a55e}\N{U+a54c}\N{U+a535}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+a5f3}\N{U+a5e1}\N{U+a609}",
      "\N{U+a55a}\N{U+a55e}\N{U+a55a}",
      "\N{U+a549}\N{U+a55e}\N{U+a552}",
      "\N{U+a549}\N{U+a524}\N{U+a546}\N{U+a562}",
      "\N{U+a549}\N{U+a524}\N{U+a540}\N{U+a56e}",
      "\N{U+a53b}\N{U+a52c}\N{U+a533}",
      "\N{U+a55e}\N{U+a54c}\N{U+a535}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+a5f3}\N{U+a5e1}\N{U+a609}",
      "\N{U+a55a}\N{U+a55e}\N{U+a55a}",
      "\N{U+a549}\N{U+a55e}\N{U+a552}",
      "\N{U+a549}\N{U+a524}\N{U+a546}\N{U+a562}",
      "\N{U+a549}\N{U+a524}\N{U+a540}\N{U+a56e}",
      "\N{U+a53b}\N{U+a52c}\N{U+a533}",
      "\N{U+a55e}\N{U+a54c}\N{U+a535}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+a5f3}\N{U+a5e1}\N{U+a609}",
      "\N{U+a55a}\N{U+a55e}\N{U+a55a}",
      "\N{U+a549}\N{U+a55e}\N{U+a552}",
      "\N{U+a549}\N{U+a524}\N{U+a546}\N{U+a562}",
      "\N{U+a549}\N{U+a524}\N{U+a540}\N{U+a56e}",
      "\N{U+a53b}\N{U+a52c}\N{U+a533}",
      "\N{U+a55e}\N{U+a54c}\N{U+a535}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Vai",
    month_format_abbreviated => [
      "\N{U+a5a8}\N{U+a56a}\N{U+a583} \N{U+a51e}\N{U+a56e}",
      "\N{U+a552}\N{U+a561}\N{U+a59d}\N{U+a595}",
      "\N{U+a57e}\N{U+a5ba}",
      "\N{U+a5a2}\N{U+a595}",
      "\N{U+a591}\N{U+a571}",
      6,
      7,
      "\N{U+a5db}\N{U+a515}",
      "\N{U+a562}\N{U+a54c}",
      "\N{U+a56d}\N{U+a583}",
      "\N{U+a51e}\N{U+a60b}\N{U+a554}\N{U+a57f} \N{U+a578}\N{U+a583}\N{U+a5cf}",
      "\N{U+a5a8}\N{U+a56a}\N{U+a571} \N{U+a5cf}\N{U+a56e}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+a5a8}\N{U+a56a}\N{U+a583} \N{U+a51e}\N{U+a56e}",
      "\N{U+a552}\N{U+a561}\N{U+a59d}\N{U+a595}",
      "\N{U+a57e}\N{U+a5ba}",
      "\N{U+a5a2}\N{U+a595}",
      "\N{U+a591}\N{U+a571}",
      6,
      7,
      "\N{U+a5db}\N{U+a515}",
      "\N{U+a562}\N{U+a54c}",
      "\N{U+a56d}\N{U+a583}",
      "\N{U+a51e}\N{U+a60b}\N{U+a554}\N{U+a57f} \N{U+a578}\N{U+a583}\N{U+a5cf}",
      "\N{U+a5a8}\N{U+a56a}\N{U+a571} \N{U+a5cf}\N{U+a56e}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+a5a8}\N{U+a56a}\N{U+a583} \N{U+a51e}\N{U+a56e}",
      "\N{U+a552}\N{U+a561}\N{U+a59d}\N{U+a595}",
      "\N{U+a57e}\N{U+a5ba}",
      "\N{U+a5a2}\N{U+a595}",
      "\N{U+a591}\N{U+a571}",
      6,
      7,
      "\N{U+a5db}\N{U+a515}",
      "\N{U+a562}\N{U+a54c}",
      "\N{U+a56d}\N{U+a583}",
      "\N{U+a51e}\N{U+a60b}\N{U+a554}\N{U+a57f} \N{U+a578}\N{U+a583}\N{U+a5cf}",
      "\N{U+a5a8}\N{U+a56a}\N{U+a571} \N{U+a5cf}\N{U+a56e}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+a5a8}\N{U+a56a}\N{U+a583} \N{U+a51e}\N{U+a56e}",
      "\N{U+a552}\N{U+a561}\N{U+a59d}\N{U+a595}",
      "\N{U+a57e}\N{U+a5ba}",
      "\N{U+a5a2}\N{U+a595}",
      "\N{U+a591}\N{U+a571}",
      6,
      7,
      "\N{U+a5db}\N{U+a515}",
      "\N{U+a562}\N{U+a54c}",
      "\N{U+a56d}\N{U+a583}",
      "\N{U+a51e}\N{U+a60b}\N{U+a554}\N{U+a57f} \N{U+a578}\N{U+a583}\N{U+a5cf}",
      "\N{U+a5a8}\N{U+a56a}\N{U+a571} \N{U+a5cf}\N{U+a56e}"
    ],
    name => "Vai",
    native_language => "\N{U+a559}\N{U+a524}",
    native_name => "\N{U+a559}\N{U+a524}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ vai-Latn ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "y MMMM",
      yMMMd => "MMM d y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "vai-Latn",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "t\N{U+025b}\N{U+025b}n\N{U+025b}\N{U+025b}",
      "talata",
      "alaba",
      "aimisa",
      "aijima",
      "si\N{U+0253}iti",
      "lahadi"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "t\N{U+025b}\N{U+025b}n\N{U+025b}\N{U+025b}",
      "talata",
      "alaba",
      "aimisa",
      "aijima",
      "si\N{U+0253}iti",
      "lahadi"
    ],
    day_stand_alone_abbreviated => [
      "t\N{U+025b}\N{U+025b}n\N{U+025b}\N{U+025b}",
      "talata",
      "alaba",
      "aimisa",
      "aijima",
      "si\N{U+0253}iti",
      "lahadi"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "t\N{U+025b}\N{U+025b}n\N{U+025b}\N{U+025b}",
      "talata",
      "alaba",
      "aimisa",
      "aijima",
      "si\N{U+0253}iti",
      "lahadi"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Vai",
    month_format_abbreviated => [
      "luukao kem\N{U+00e3}",
      "\N{U+0253}anda\N{U+0253}u",
      "v\N{U+0254}\N{U+0254}",
      "fulu",
      "goo",
      6,
      7,
      "k\N{U+0254}nde",
      "saah",
      "galo",
      "kenpkato \N{U+0253}olol\N{U+0254}",
      "luukao l\N{U+0254}ma"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "luukao kem\N{U+00e3}",
      "\N{U+0253}anda\N{U+0253}u",
      "v\N{U+0254}\N{U+0254}",
      "fulu",
      "goo",
      6,
      7,
      "k\N{U+0254}nde",
      "saah",
      "galo",
      "kenpkato \N{U+0253}olol\N{U+0254}",
      "luukao l\N{U+0254}ma"
    ],
    month_stand_alone_abbreviated => [
      "luukao kem\N{U+00e3}",
      "\N{U+0253}anda\N{U+0253}u",
      "v\N{U+0254}\N{U+0254}",
      "fulu",
      "goo",
      6,
      7,
      "k\N{U+0254}nde",
      "saah",
      "galo",
      "kenpkato \N{U+0253}olol\N{U+0254}",
      "luukao l\N{U+0254}ma"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "luukao kem\N{U+00e3}",
      "\N{U+0253}anda\N{U+0253}u",
      "v\N{U+0254}\N{U+0254}",
      "fulu",
      "goo",
      6,
      7,
      "k\N{U+0254}nde",
      "saah",
      "galo",
      "kenpkato \N{U+0253}olol\N{U+0254}",
      "luukao l\N{U+0254}ma"
    ],
    name => "Vai",
    native_language => "Vai",
    native_name => "Vai",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ vai-Latn-LR ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "y MMMM",
      yMMMd => "MMM d y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "vai-Latn-LR",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "t\N{U+025b}\N{U+025b}n\N{U+025b}\N{U+025b}",
      "talata",
      "alaba",
      "aimisa",
      "aijima",
      "si\N{U+0253}iti",
      "lahadi"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "t\N{U+025b}\N{U+025b}n\N{U+025b}\N{U+025b}",
      "talata",
      "alaba",
      "aimisa",
      "aijima",
      "si\N{U+0253}iti",
      "lahadi"
    ],
    day_stand_alone_abbreviated => [
      "t\N{U+025b}\N{U+025b}n\N{U+025b}\N{U+025b}",
      "talata",
      "alaba",
      "aimisa",
      "aijima",
      "si\N{U+0253}iti",
      "lahadi"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "t\N{U+025b}\N{U+025b}n\N{U+025b}\N{U+025b}",
      "talata",
      "alaba",
      "aimisa",
      "aijima",
      "si\N{U+0253}iti",
      "lahadi"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Vai",
    month_format_abbreviated => [
      "luukao kem\N{U+00e3}",
      "\N{U+0253}anda\N{U+0253}u",
      "v\N{U+0254}\N{U+0254}",
      "fulu",
      "goo",
      6,
      7,
      "k\N{U+0254}nde",
      "saah",
      "galo",
      "kenpkato \N{U+0253}olol\N{U+0254}",
      "luukao l\N{U+0254}ma"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "luukao kem\N{U+00e3}",
      "\N{U+0253}anda\N{U+0253}u",
      "v\N{U+0254}\N{U+0254}",
      "fulu",
      "goo",
      6,
      7,
      "k\N{U+0254}nde",
      "saah",
      "galo",
      "kenpkato \N{U+0253}olol\N{U+0254}",
      "luukao l\N{U+0254}ma"
    ],
    month_stand_alone_abbreviated => [
      "luukao kem\N{U+00e3}",
      "\N{U+0253}anda\N{U+0253}u",
      "v\N{U+0254}\N{U+0254}",
      "fulu",
      "goo",
      6,
      7,
      "k\N{U+0254}nde",
      "saah",
      "galo",
      "kenpkato \N{U+0253}olol\N{U+0254}",
      "luukao l\N{U+0254}ma"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "luukao kem\N{U+00e3}",
      "\N{U+0253}anda\N{U+0253}u",
      "v\N{U+0254}\N{U+0254}",
      "fulu",
      "goo",
      6,
      7,
      "k\N{U+0254}nde",
      "saah",
      "galo",
      "kenpkato \N{U+0253}olol\N{U+0254}",
      "luukao l\N{U+0254}ma"
    ],
    name => "Vai Liberia Latin",
    native_language => "Vai",
    native_name => "Vai Laibhiya Latn",
    native_script => "Latn",
    native_territory => "Laibhiya",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => "Latin",
    territory => "Liberia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ vai-Vaii ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "vai-Vaii",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+a5f3}\N{U+a5e1}\N{U+a609}",
      "\N{U+a55a}\N{U+a55e}\N{U+a55a}",
      "\N{U+a549}\N{U+a55e}\N{U+a552}",
      "\N{U+a549}\N{U+a524}\N{U+a546}\N{U+a562}",
      "\N{U+a549}\N{U+a524}\N{U+a540}\N{U+a56e}",
      "\N{U+a53b}\N{U+a52c}\N{U+a533}",
      "\N{U+a55e}\N{U+a54c}\N{U+a535}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+a5f3}\N{U+a5e1}\N{U+a609}",
      "\N{U+a55a}\N{U+a55e}\N{U+a55a}",
      "\N{U+a549}\N{U+a55e}\N{U+a552}",
      "\N{U+a549}\N{U+a524}\N{U+a546}\N{U+a562}",
      "\N{U+a549}\N{U+a524}\N{U+a540}\N{U+a56e}",
      "\N{U+a53b}\N{U+a52c}\N{U+a533}",
      "\N{U+a55e}\N{U+a54c}\N{U+a535}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+a5f3}\N{U+a5e1}\N{U+a609}",
      "\N{U+a55a}\N{U+a55e}\N{U+a55a}",
      "\N{U+a549}\N{U+a55e}\N{U+a552}",
      "\N{U+a549}\N{U+a524}\N{U+a546}\N{U+a562}",
      "\N{U+a549}\N{U+a524}\N{U+a540}\N{U+a56e}",
      "\N{U+a53b}\N{U+a52c}\N{U+a533}",
      "\N{U+a55e}\N{U+a54c}\N{U+a535}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+a5f3}\N{U+a5e1}\N{U+a609}",
      "\N{U+a55a}\N{U+a55e}\N{U+a55a}",
      "\N{U+a549}\N{U+a55e}\N{U+a552}",
      "\N{U+a549}\N{U+a524}\N{U+a546}\N{U+a562}",
      "\N{U+a549}\N{U+a524}\N{U+a540}\N{U+a56e}",
      "\N{U+a53b}\N{U+a52c}\N{U+a533}",
      "\N{U+a55e}\N{U+a54c}\N{U+a535}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Vai",
    month_format_abbreviated => [
      "\N{U+a5a8}\N{U+a56a}\N{U+a583} \N{U+a51e}\N{U+a56e}",
      "\N{U+a552}\N{U+a561}\N{U+a59d}\N{U+a595}",
      "\N{U+a57e}\N{U+a5ba}",
      "\N{U+a5a2}\N{U+a595}",
      "\N{U+a591}\N{U+a571}",
      6,
      7,
      "\N{U+a5db}\N{U+a515}",
      "\N{U+a562}\N{U+a54c}",
      "\N{U+a56d}\N{U+a583}",
      "\N{U+a51e}\N{U+a60b}\N{U+a554}\N{U+a57f} \N{U+a578}\N{U+a583}\N{U+a5cf}",
      "\N{U+a5a8}\N{U+a56a}\N{U+a571} \N{U+a5cf}\N{U+a56e}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+a5a8}\N{U+a56a}\N{U+a583} \N{U+a51e}\N{U+a56e}",
      "\N{U+a552}\N{U+a561}\N{U+a59d}\N{U+a595}",
      "\N{U+a57e}\N{U+a5ba}",
      "\N{U+a5a2}\N{U+a595}",
      "\N{U+a591}\N{U+a571}",
      6,
      7,
      "\N{U+a5db}\N{U+a515}",
      "\N{U+a562}\N{U+a54c}",
      "\N{U+a56d}\N{U+a583}",
      "\N{U+a51e}\N{U+a60b}\N{U+a554}\N{U+a57f} \N{U+a578}\N{U+a583}\N{U+a5cf}",
      "\N{U+a5a8}\N{U+a56a}\N{U+a571} \N{U+a5cf}\N{U+a56e}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+a5a8}\N{U+a56a}\N{U+a583} \N{U+a51e}\N{U+a56e}",
      "\N{U+a552}\N{U+a561}\N{U+a59d}\N{U+a595}",
      "\N{U+a57e}\N{U+a5ba}",
      "\N{U+a5a2}\N{U+a595}",
      "\N{U+a591}\N{U+a571}",
      6,
      7,
      "\N{U+a5db}\N{U+a515}",
      "\N{U+a562}\N{U+a54c}",
      "\N{U+a56d}\N{U+a583}",
      "\N{U+a51e}\N{U+a60b}\N{U+a554}\N{U+a57f} \N{U+a578}\N{U+a583}\N{U+a5cf}",
      "\N{U+a5a8}\N{U+a56a}\N{U+a571} \N{U+a5cf}\N{U+a56e}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+a5a8}\N{U+a56a}\N{U+a583} \N{U+a51e}\N{U+a56e}",
      "\N{U+a552}\N{U+a561}\N{U+a59d}\N{U+a595}",
      "\N{U+a57e}\N{U+a5ba}",
      "\N{U+a5a2}\N{U+a595}",
      "\N{U+a591}\N{U+a571}",
      6,
      7,
      "\N{U+a5db}\N{U+a515}",
      "\N{U+a562}\N{U+a54c}",
      "\N{U+a56d}\N{U+a583}",
      "\N{U+a51e}\N{U+a60b}\N{U+a554}\N{U+a57f} \N{U+a578}\N{U+a583}\N{U+a5cf}",
      "\N{U+a5a8}\N{U+a56a}\N{U+a571} \N{U+a5cf}\N{U+a56e}"
    ],
    name => "Vai",
    native_language => "\N{U+a559}\N{U+a524}",
    native_name => "\N{U+a559}\N{U+a524}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ vai-Vaii-LR ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "vai-Vaii-LR",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+a5f3}\N{U+a5e1}\N{U+a609}",
      "\N{U+a55a}\N{U+a55e}\N{U+a55a}",
      "\N{U+a549}\N{U+a55e}\N{U+a552}",
      "\N{U+a549}\N{U+a524}\N{U+a546}\N{U+a562}",
      "\N{U+a549}\N{U+a524}\N{U+a540}\N{U+a56e}",
      "\N{U+a53b}\N{U+a52c}\N{U+a533}",
      "\N{U+a55e}\N{U+a54c}\N{U+a535}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+a5f3}\N{U+a5e1}\N{U+a609}",
      "\N{U+a55a}\N{U+a55e}\N{U+a55a}",
      "\N{U+a549}\N{U+a55e}\N{U+a552}",
      "\N{U+a549}\N{U+a524}\N{U+a546}\N{U+a562}",
      "\N{U+a549}\N{U+a524}\N{U+a540}\N{U+a56e}",
      "\N{U+a53b}\N{U+a52c}\N{U+a533}",
      "\N{U+a55e}\N{U+a54c}\N{U+a535}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+a5f3}\N{U+a5e1}\N{U+a609}",
      "\N{U+a55a}\N{U+a55e}\N{U+a55a}",
      "\N{U+a549}\N{U+a55e}\N{U+a552}",
      "\N{U+a549}\N{U+a524}\N{U+a546}\N{U+a562}",
      "\N{U+a549}\N{U+a524}\N{U+a540}\N{U+a56e}",
      "\N{U+a53b}\N{U+a52c}\N{U+a533}",
      "\N{U+a55e}\N{U+a54c}\N{U+a535}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+a5f3}\N{U+a5e1}\N{U+a609}",
      "\N{U+a55a}\N{U+a55e}\N{U+a55a}",
      "\N{U+a549}\N{U+a55e}\N{U+a552}",
      "\N{U+a549}\N{U+a524}\N{U+a546}\N{U+a562}",
      "\N{U+a549}\N{U+a524}\N{U+a540}\N{U+a56e}",
      "\N{U+a53b}\N{U+a52c}\N{U+a533}",
      "\N{U+a55e}\N{U+a54c}\N{U+a535}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Vai",
    month_format_abbreviated => [
      "\N{U+a5a8}\N{U+a56a}\N{U+a583} \N{U+a51e}\N{U+a56e}",
      "\N{U+a552}\N{U+a561}\N{U+a59d}\N{U+a595}",
      "\N{U+a57e}\N{U+a5ba}",
      "\N{U+a5a2}\N{U+a595}",
      "\N{U+a591}\N{U+a571}",
      6,
      7,
      "\N{U+a5db}\N{U+a515}",
      "\N{U+a562}\N{U+a54c}",
      "\N{U+a56d}\N{U+a583}",
      "\N{U+a51e}\N{U+a60b}\N{U+a554}\N{U+a57f} \N{U+a578}\N{U+a583}\N{U+a5cf}",
      "\N{U+a5a8}\N{U+a56a}\N{U+a571} \N{U+a5cf}\N{U+a56e}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+a5a8}\N{U+a56a}\N{U+a583} \N{U+a51e}\N{U+a56e}",
      "\N{U+a552}\N{U+a561}\N{U+a59d}\N{U+a595}",
      "\N{U+a57e}\N{U+a5ba}",
      "\N{U+a5a2}\N{U+a595}",
      "\N{U+a591}\N{U+a571}",
      6,
      7,
      "\N{U+a5db}\N{U+a515}",
      "\N{U+a562}\N{U+a54c}",
      "\N{U+a56d}\N{U+a583}",
      "\N{U+a51e}\N{U+a60b}\N{U+a554}\N{U+a57f} \N{U+a578}\N{U+a583}\N{U+a5cf}",
      "\N{U+a5a8}\N{U+a56a}\N{U+a571} \N{U+a5cf}\N{U+a56e}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+a5a8}\N{U+a56a}\N{U+a583} \N{U+a51e}\N{U+a56e}",
      "\N{U+a552}\N{U+a561}\N{U+a59d}\N{U+a595}",
      "\N{U+a57e}\N{U+a5ba}",
      "\N{U+a5a2}\N{U+a595}",
      "\N{U+a591}\N{U+a571}",
      6,
      7,
      "\N{U+a5db}\N{U+a515}",
      "\N{U+a562}\N{U+a54c}",
      "\N{U+a56d}\N{U+a583}",
      "\N{U+a51e}\N{U+a60b}\N{U+a554}\N{U+a57f} \N{U+a578}\N{U+a583}\N{U+a5cf}",
      "\N{U+a5a8}\N{U+a56a}\N{U+a571} \N{U+a5cf}\N{U+a56e}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+a5a8}\N{U+a56a}\N{U+a583} \N{U+a51e}\N{U+a56e}",
      "\N{U+a552}\N{U+a561}\N{U+a59d}\N{U+a595}",
      "\N{U+a57e}\N{U+a5ba}",
      "\N{U+a5a2}\N{U+a595}",
      "\N{U+a591}\N{U+a571}",
      6,
      7,
      "\N{U+a5db}\N{U+a515}",
      "\N{U+a562}\N{U+a54c}",
      "\N{U+a56d}\N{U+a583}",
      "\N{U+a51e}\N{U+a60b}\N{U+a554}\N{U+a57f} \N{U+a578}\N{U+a583}\N{U+a5cf}",
      "\N{U+a5a8}\N{U+a56a}\N{U+a571} \N{U+a5cf}\N{U+a56e}"
    ],
    name => "Vai Liberia Vai",
    native_language => "\N{U+a559}\N{U+a524}",
    native_name => "\N{U+a559}\N{U+a524} \N{U+a55e}\N{U+a524}\N{U+a52b}\N{U+a569} Vaii",
    native_script => "Vaii",
    native_territory => "\N{U+a55e}\N{U+a524}\N{U+a52b}\N{U+a569}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => "Vai",
    territory => "Liberia",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ vi ]__
  {
    am_pm_abbreviated => [
      "SA",
      "CH"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, 'ng\N{U+00e0}y' d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM, y G",
      GyMMMd => "dd MMM, y G",
      H => "HH",
      Hm => "H:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd-MM",
      Md => "dd/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, dd/M/y",
      yMM => "'th\N{U+00e1}ng' MM, y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM, y",
      yMMMM => "MMMM 'n\N{U+0103}m' y",
      yMMMd => "d MMM, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ 'n\N{U+0103}m' y"
    },
    code => "vi",
    date_format_full => "EEEE, 'ng\N{U+00e0}y' dd MMMM 'n\N{U+0103}m' y",
    date_format_long => "'Ng\N{U+00e0}y' dd 'th\N{U+00e1}ng' MM 'n\N{U+0103}m' y",
    date_format_medium => "d MMM, y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{0} {1}",
    datetime_format_long => "{0} {1}",
    datetime_format_medium => "{0}, {1}",
    datetime_format_short => "{0}, {1}",
    day_format_abbreviated => [
      "Th 2",
      "Th 3",
      "Th 4",
      "Th 5",
      "Th 6",
      "Th 7",
      "CN"
    ],
    day_format_narrow => [
      "T2",
      "T3",
      "T4",
      "T5",
      "T6",
      "T7",
      "CN"
    ],
    day_format_wide => [
      "Th\N{U+1ee9} Hai",
      "Th\N{U+1ee9} Ba",
      "Th\N{U+1ee9} T\N{U+01b0}",
      "Th\N{U+1ee9} N\N{U+0103}m",
      "Th\N{U+1ee9} S\N{U+00e1}u",
      "Th\N{U+1ee9} B\N{U+1ea3}y",
      "Ch\N{U+1ee7} Nh\N{U+1ead}t"
    ],
    day_stand_alone_abbreviated => [
      "Th 2",
      "Th 3",
      "Th 4",
      "Th 5",
      "Th 6",
      "Th 7",
      "CN"
    ],
    day_stand_alone_narrow => [
      "T2",
      "T3",
      "T4",
      "T5",
      "T6",
      "T7",
      "CN"
    ],
    day_stand_alone_wide => [
      "Th\N{U+1ee9} Hai",
      "Th\N{U+1ee9} Ba",
      "Th\N{U+1ee9} T\N{U+01b0}",
      "Th\N{U+1ee9} N\N{U+0103}m",
      "Th\N{U+1ee9} S\N{U+00e1}u",
      "Th\N{U+1ee9} B\N{U+1ea3}y",
      "Ch\N{U+1ee7} Nh\N{U+1ead}t"
    ],
    era_abbreviated => [
      "tr. CN",
      "sau CN"
    ],
    era_narrow => [
      "tr. CN",
      "sau CN"
    ],
    era_wide => [
      "tr. CN",
      "sau CN"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Vietnamese",
    month_format_abbreviated => [
      "thg 1",
      "thg 2",
      "thg 3",
      "thg 4",
      "thg 5",
      "thg 6",
      "thg 7",
      "thg 8",
      "thg 9",
      "thg 10",
      "thg 11",
      "thg 12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "th\N{U+00e1}ng 1",
      "th\N{U+00e1}ng 2",
      "th\N{U+00e1}ng 3",
      "th\N{U+00e1}ng 4",
      "th\N{U+00e1}ng 5",
      "th\N{U+00e1}ng 6",
      "th\N{U+00e1}ng 7",
      "th\N{U+00e1}ng 8",
      "th\N{U+00e1}ng 9",
      "th\N{U+00e1}ng 10",
      "th\N{U+00e1}ng 11",
      "th\N{U+00e1}ng 12"
    ],
    month_stand_alone_abbreviated => [
      "Thg 1",
      "Thg 2",
      "Thg 3",
      "Thg 4",
      "Thg 5",
      "Thg 6",
      "Thg 7",
      "Thg 8",
      "Thg 9",
      "Thg 10",
      "Thg 11",
      "Thg 12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Th\N{U+00e1}ng 1",
      "Th\N{U+00e1}ng 2",
      "Th\N{U+00e1}ng 3",
      "Th\N{U+00e1}ng 4",
      "Th\N{U+00e1}ng 5",
      "Th\N{U+00e1}ng 6",
      "Th\N{U+00e1}ng 7",
      "Th\N{U+00e1}ng 8",
      "Th\N{U+00e1}ng 9",
      "Th\N{U+00e1}ng 10",
      "Th\N{U+00e1}ng 11",
      "Th\N{U+00e1}ng 12"
    ],
    name => "Vietnamese",
    native_language => "Ti\N{U+1ebf}ng Vi\N{U+1ec7}t",
    native_name => "Ti\N{U+1ebf}ng Vi\N{U+1ec7}t",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Qu\N{U+00fd} 1",
      "Qu\N{U+00fd} 2",
      "Qu\N{U+00fd} 3",
      "Qu\N{U+00fd} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "qu\N{U+00fd} 1",
      "qu\N{U+00fd} 2",
      "qu\N{U+00fd} 3",
      "qu\N{U+00fd} 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ vi-VN ]__
  {
    am_pm_abbreviated => [
      "SA",
      "CH"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E, 'ng\N{U+00e0}y' d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "y G",
      GyMMM => "MMM y G",
      GyMMMEd => "E, d MMM, y G",
      GyMMMd => "dd MMM, y G",
      H => "HH",
      Hm => "H:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, dd/M",
      MMM => "LLL",
      MMMEd => "E, d MMM",
      MMMMEd => "E, d MMMM",
      MMMMd => "d MMMM",
      MMMd => "d MMM",
      MMdd => "dd-MM",
      Md => "dd/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      mmss => "mm:ss",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, dd/M/y",
      yMM => "'th\N{U+00e1}ng' MM, y",
      yMMM => "MMM y",
      yMMMEd => "E, d MMM, y",
      yMMMM => "MMMM 'n\N{U+0103}m' y",
      yMMMd => "d MMM, y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ 'n\N{U+0103}m' y"
    },
    code => "vi-VN",
    date_format_full => "EEEE, 'ng\N{U+00e0}y' dd MMMM 'n\N{U+0103}m' y",
    date_format_long => "'Ng\N{U+00e0}y' dd 'th\N{U+00e1}ng' MM 'n\N{U+0103}m' y",
    date_format_medium => "d MMM, y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{0} {1}",
    datetime_format_long => "{0} {1}",
    datetime_format_medium => "{0}, {1}",
    datetime_format_short => "{0}, {1}",
    day_format_abbreviated => [
      "Th 2",
      "Th 3",
      "Th 4",
      "Th 5",
      "Th 6",
      "Th 7",
      "CN"
    ],
    day_format_narrow => [
      "T2",
      "T3",
      "T4",
      "T5",
      "T6",
      "T7",
      "CN"
    ],
    day_format_wide => [
      "Th\N{U+1ee9} Hai",
      "Th\N{U+1ee9} Ba",
      "Th\N{U+1ee9} T\N{U+01b0}",
      "Th\N{U+1ee9} N\N{U+0103}m",
      "Th\N{U+1ee9} S\N{U+00e1}u",
      "Th\N{U+1ee9} B\N{U+1ea3}y",
      "Ch\N{U+1ee7} Nh\N{U+1ead}t"
    ],
    day_stand_alone_abbreviated => [
      "Th 2",
      "Th 3",
      "Th 4",
      "Th 5",
      "Th 6",
      "Th 7",
      "CN"
    ],
    day_stand_alone_narrow => [
      "T2",
      "T3",
      "T4",
      "T5",
      "T6",
      "T7",
      "CN"
    ],
    day_stand_alone_wide => [
      "Th\N{U+1ee9} Hai",
      "Th\N{U+1ee9} Ba",
      "Th\N{U+1ee9} T\N{U+01b0}",
      "Th\N{U+1ee9} N\N{U+0103}m",
      "Th\N{U+1ee9} S\N{U+00e1}u",
      "Th\N{U+1ee9} B\N{U+1ea3}y",
      "Ch\N{U+1ee7} Nh\N{U+1ead}t"
    ],
    era_abbreviated => [
      "tr. CN",
      "sau CN"
    ],
    era_narrow => [
      "tr. CN",
      "sau CN"
    ],
    era_wide => [
      "tr. CN",
      "sau CN"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%A, %d %B n\N{U+0103}m %Y %T %Z",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%A, %d %B N\N{U+0103}m %Y %T %Z",
    glibc_time_12_format => "%I:%M %p",
    glibc_time_format => "%T",
    language => "Vietnamese",
    month_format_abbreviated => [
      "thg 1",
      "thg 2",
      "thg 3",
      "thg 4",
      "thg 5",
      "thg 6",
      "thg 7",
      "thg 8",
      "thg 9",
      "thg 10",
      "thg 11",
      "thg 12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "th\N{U+00e1}ng 1",
      "th\N{U+00e1}ng 2",
      "th\N{U+00e1}ng 3",
      "th\N{U+00e1}ng 4",
      "th\N{U+00e1}ng 5",
      "th\N{U+00e1}ng 6",
      "th\N{U+00e1}ng 7",
      "th\N{U+00e1}ng 8",
      "th\N{U+00e1}ng 9",
      "th\N{U+00e1}ng 10",
      "th\N{U+00e1}ng 11",
      "th\N{U+00e1}ng 12"
    ],
    month_stand_alone_abbreviated => [
      "Thg 1",
      "Thg 2",
      "Thg 3",
      "Thg 4",
      "Thg 5",
      "Thg 6",
      "Thg 7",
      "Thg 8",
      "Thg 9",
      "Thg 10",
      "Thg 11",
      "Thg 12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Th\N{U+00e1}ng 1",
      "Th\N{U+00e1}ng 2",
      "Th\N{U+00e1}ng 3",
      "Th\N{U+00e1}ng 4",
      "Th\N{U+00e1}ng 5",
      "Th\N{U+00e1}ng 6",
      "Th\N{U+00e1}ng 7",
      "Th\N{U+00e1}ng 8",
      "Th\N{U+00e1}ng 9",
      "Th\N{U+00e1}ng 10",
      "Th\N{U+00e1}ng 11",
      "Th\N{U+00e1}ng 12"
    ],
    name => "Vietnamese Vietnam",
    native_language => "Ti\N{U+1ebf}ng Vi\N{U+1ec7}t",
    native_name => "Ti\N{U+1ebf}ng Vi\N{U+1ec7}t Vi\N{U+1ec7}t Nam",
    native_script => undef,
    native_territory => "Vi\N{U+1ec7}t Nam",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Qu\N{U+00fd} 1",
      "Qu\N{U+00fd} 2",
      "Qu\N{U+00fd} 3",
      "Qu\N{U+00fd} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "qu\N{U+00fd} 1",
      "qu\N{U+00fd} 2",
      "qu\N{U+00fd} 3",
      "qu\N{U+00fd} 4"
    ],
    script => undef,
    territory => "Vietnam",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ vo ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "vo",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Volap\N{U+00fc}k",
    month_format_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    name => "Volap\N{U+00fc}k",
    native_language => "vo",
    native_name => "vo",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ vo-001 ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "MM-dd, E",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "y MMM",
      yMMMEd => "y MMM d, E",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "vo-001",
    date_format_full => "y MMMM d, EEEE",
    date_format_long => "y MMMM d",
    date_format_medium => "y MMM d",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_abbreviated => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "Mon",
      "Tue",
      "Wed",
      "Thu",
      "Fri",
      "Sat",
      "Sun"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Volap\N{U+00fc}k",
    month_format_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_abbreviated => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "M01",
      "M02",
      "M03",
      "M04",
      "M05",
      "M06",
      "M07",
      "M08",
      "M09",
      "M10",
      "M11",
      "M12"
    ],
    name => "Volap\N{U+00fc}k World",
    native_language => "vo",
    native_name => "vo 001",
    native_script => undef,
    native_territory => "001",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "World",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ vun ]__
  {
    am_pm_abbreviated => [
      "utuko",
      "kyiukonyi"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "vun",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_format_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "J"
    ],
    day_format_wide => [
      "Jumatatuu",
      "Jumanne",
      "Jumatanu",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapilyi"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_stand_alone_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "J"
    ],
    day_stand_alone_wide => [
      "Jumatatuu",
      "Jumanne",
      "Jumatanu",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapilyi"
    ],
    era_abbreviated => [
      "KK",
      "BK"
    ],
    era_narrow => [
      "KK",
      "BK"
    ],
    era_wide => [
      "Kabla ya Kristu",
      "Baada ya Kristu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Vunjo",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprilyi",
      "Mei",
      "Junyi",
      "Julyai",
      "Agusti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprilyi",
      "Mei",
      "Junyi",
      "Julyai",
      "Agusti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Vunjo",
    native_language => "Kyivunjo",
    native_name => "Kyivunjo",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ vun-TZ ]__
  {
    am_pm_abbreviated => [
      "utuko",
      "kyiukonyi"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "vun-TZ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_format_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "J"
    ],
    day_format_wide => [
      "Jumatatuu",
      "Jumanne",
      "Jumatanu",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapilyi"
    ],
    day_stand_alone_abbreviated => [
      "Jtt",
      "Jnn",
      "Jtn",
      "Alh",
      "Iju",
      "Jmo",
      "Jpi"
    ],
    day_stand_alone_narrow => [
      "J",
      "J",
      "J",
      "A",
      "I",
      "J",
      "J"
    ],
    day_stand_alone_wide => [
      "Jumatatuu",
      "Jumanne",
      "Jumatanu",
      "Alhamisi",
      "Ijumaa",
      "Jumamosi",
      "Jumapilyi"
    ],
    era_abbreviated => [
      "KK",
      "BK"
    ],
    era_narrow => [
      "KK",
      "BK"
    ],
    era_wide => [
      "Kabla ya Kristu",
      "Baada ya Kristu"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Vunjo",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprilyi",
      "Mei",
      "Junyi",
      "Julyai",
      "Agusti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mac",
      "Apr",
      "Mei",
      "Jun",
      "Jul",
      "Ago",
      "Sep",
      "Okt",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januari",
      "Februari",
      "Machi",
      "Aprilyi",
      "Mei",
      "Junyi",
      "Julyai",
      "Agusti",
      "Septemba",
      "Oktoba",
      "Novemba",
      "Desemba"
    ],
    name => "Vunjo Tanzania",
    native_language => "Kyivunjo",
    native_name => "Kyivunjo Tanzania",
    native_script => undef,
    native_territory => "Tanzania",
    native_variant => undef,
    quarter_format_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    quarter_stand_alone_abbreviated => [
      "R1",
      "R2",
      "R3",
      "R4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Robo 1",
      "Robo 2",
      "Robo 3",
      "Robo 4"
    ],
    script => undef,
    territory => "Tanzania",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ wae ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "LLL",
      MEd => "E, d. MMM",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMd => "MMMM d",
      MMMd => "d. MMM",
      Md => "d. MMM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d. MMM y",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "wae",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "M\N{U+00e4}n",
      "Zi\N{U+0161}",
      "Mit",
      "Fr\N{U+00f3}",
      "Fri",
      "Sam",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "Z",
      "M",
      "F",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "M\N{U+00e4}ntag",
      "Zi\N{U+0161}tag",
      "Mittwu\N{U+010d}",
      "Fr\N{U+00f3}ntag",
      "Fritag",
      "Sam\N{U+0161}tag",
      "Sunntag"
    ],
    day_stand_alone_abbreviated => [
      "M\N{U+00e4}n",
      "Zi\N{U+0161}",
      "Mit",
      "Fr\N{U+00f3}",
      "Fri",
      "Sam",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "Z",
      "M",
      "F",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "M\N{U+00e4}ntag",
      "Zi\N{U+0161}tag",
      "Mittwu\N{U+010d}",
      "Fr\N{U+00f3}ntag",
      "Fritag",
      "Sam\N{U+0161}tag",
      "Sunntag"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr"
    ],
    era_narrow => [
      "v. Chr.",
      "n. Chr"
    ],
    era_wide => [
      "v. Chr.",
      "n. Chr"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Walser",
    month_format_abbreviated => [
      "Jen",
      "Hor",
      "M\N{U+00e4}r",
      "Abr",
      "Mei",
      "Br\N{U+00e1}",
      "Hei",
      "\N{U+00d6}ig",
      "Her",
      "W\N{U+00ed}m",
      "Win",
      "Chr"
    ],
    month_format_narrow => [
      "J",
      "H",
      "M",
      "A",
      "M",
      "B",
      "H",
      "\N{U+00d6}",
      "H",
      "W",
      "W",
      "C"
    ],
    month_format_wide => [
      "Jenner",
      "Hornig",
      "M\N{U+00e4}rze",
      "Abrille",
      "Meije",
      "Br\N{U+00e1}\N{U+010d}et",
      "Heiwet",
      "\N{U+00d6}ig\N{U+0161}te",
      "Herb\N{U+0161}tm\N{U+00e1}net",
      "W\N{U+00ed}m\N{U+00e1}net",
      "Winterm\N{U+00e1}net",
      "Chri\N{U+0161}tm\N{U+00e1}net"
    ],
    month_stand_alone_abbreviated => [
      "Jen",
      "Hor",
      "M\N{U+00e4}r",
      "Abr",
      "Mei",
      "Br\N{U+00e1}",
      "Hei",
      "\N{U+00d6}ig",
      "Her",
      "W\N{U+00ed}m",
      "Win",
      "Chr"
    ],
    month_stand_alone_narrow => [
      "J",
      "H",
      "M",
      "A",
      "M",
      "B",
      "H",
      "\N{U+00d6}",
      "H",
      "W",
      "W",
      "C"
    ],
    month_stand_alone_wide => [
      "Jenner",
      "Hornig",
      "M\N{U+00e4}rze",
      "Abrille",
      "Meije",
      "Br\N{U+00e1}\N{U+010d}et",
      "Heiwet",
      "\N{U+00d6}ig\N{U+0161}te",
      "Herb\N{U+0161}tm\N{U+00e1}net",
      "W\N{U+00ed}m\N{U+00e1}net",
      "Winterm\N{U+00e1}net",
      "Chri\N{U+0161}tm\N{U+00e1}net"
    ],
    name => "Walser",
    native_language => "Walser",
    native_name => "Walser",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. quartal",
      "2. quartal",
      "3. quartal",
      "4. quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. quartal",
      "2. quartal",
      "3. quartal",
      "4. quartal"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ wae-CH ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d.",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "LLL",
      MEd => "E, d. MMM",
      MMM => "LLL",
      MMMEd => "E, d. MMM",
      MMMMd => "MMMM d",
      MMMd => "d. MMM",
      Md => "d. MMM",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "y-MM-dd, E",
      yMMM => "MMM y",
      yMMMEd => "E, d. MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d. MMM y",
      yMd => "y-MM-dd",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "wae-CH",
    date_format_full => "EEEE, d. MMMM y",
    date_format_long => "d. MMMM y",
    date_format_medium => "d. MMM y",
    date_format_short => "y-MM-dd",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "M\N{U+00e4}n",
      "Zi\N{U+0161}",
      "Mit",
      "Fr\N{U+00f3}",
      "Fri",
      "Sam",
      "Sun"
    ],
    day_format_narrow => [
      "M",
      "Z",
      "M",
      "F",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "M\N{U+00e4}ntag",
      "Zi\N{U+0161}tag",
      "Mittwu\N{U+010d}",
      "Fr\N{U+00f3}ntag",
      "Fritag",
      "Sam\N{U+0161}tag",
      "Sunntag"
    ],
    day_stand_alone_abbreviated => [
      "M\N{U+00e4}n",
      "Zi\N{U+0161}",
      "Mit",
      "Fr\N{U+00f3}",
      "Fri",
      "Sam",
      "Sun"
    ],
    day_stand_alone_narrow => [
      "M",
      "Z",
      "M",
      "F",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "M\N{U+00e4}ntag",
      "Zi\N{U+0161}tag",
      "Mittwu\N{U+010d}",
      "Fr\N{U+00f3}ntag",
      "Fritag",
      "Sam\N{U+0161}tag",
      "Sunntag"
    ],
    era_abbreviated => [
      "v. Chr.",
      "n. Chr"
    ],
    era_narrow => [
      "v. Chr.",
      "n. Chr"
    ],
    era_wide => [
      "v. Chr.",
      "n. Chr"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %-d %b %H:%M:%S %Z %Y",
    glibc_date_format => "%Y-%m-%d",
    glibc_datetime_format => "%a %d. %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Walser",
    month_format_abbreviated => [
      "Jen",
      "Hor",
      "M\N{U+00e4}r",
      "Abr",
      "Mei",
      "Br\N{U+00e1}",
      "Hei",
      "\N{U+00d6}ig",
      "Her",
      "W\N{U+00ed}m",
      "Win",
      "Chr"
    ],
    month_format_narrow => [
      "J",
      "H",
      "M",
      "A",
      "M",
      "B",
      "H",
      "\N{U+00d6}",
      "H",
      "W",
      "W",
      "C"
    ],
    month_format_wide => [
      "Jenner",
      "Hornig",
      "M\N{U+00e4}rze",
      "Abrille",
      "Meije",
      "Br\N{U+00e1}\N{U+010d}et",
      "Heiwet",
      "\N{U+00d6}ig\N{U+0161}te",
      "Herb\N{U+0161}tm\N{U+00e1}net",
      "W\N{U+00ed}m\N{U+00e1}net",
      "Winterm\N{U+00e1}net",
      "Chri\N{U+0161}tm\N{U+00e1}net"
    ],
    month_stand_alone_abbreviated => [
      "Jen",
      "Hor",
      "M\N{U+00e4}r",
      "Abr",
      "Mei",
      "Br\N{U+00e1}",
      "Hei",
      "\N{U+00d6}ig",
      "Her",
      "W\N{U+00ed}m",
      "Win",
      "Chr"
    ],
    month_stand_alone_narrow => [
      "J",
      "H",
      "M",
      "A",
      "M",
      "B",
      "H",
      "\N{U+00d6}",
      "H",
      "W",
      "W",
      "C"
    ],
    month_stand_alone_wide => [
      "Jenner",
      "Hornig",
      "M\N{U+00e4}rze",
      "Abrille",
      "Meije",
      "Br\N{U+00e1}\N{U+010d}et",
      "Heiwet",
      "\N{U+00d6}ig\N{U+0161}te",
      "Herb\N{U+0161}tm\N{U+00e1}net",
      "W\N{U+00ed}m\N{U+00e1}net",
      "Winterm\N{U+00e1}net",
      "Chri\N{U+0161}tm\N{U+00e1}net"
    ],
    name => "Walser Switzerland",
    native_language => "Walser",
    native_name => "Walser Schwiz",
    native_script => undef,
    native_territory => "Schwiz",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "1. quartal",
      "2. quartal",
      "3. quartal",
      "4. quartal"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "1. quartal",
      "2. quartal",
      "3. quartal",
      "4. quartal"
    ],
    script => undef,
    territory => "Switzerland",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ xog ]__
  {
    am_pm_abbreviated => [
      "Munkyo",
      "Eigulo"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "xog",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Bala",
      "Kubi",
      "Kusa",
      "Kuna",
      "Kuta",
      "Muka",
      "Sabi"
    ],
    day_format_narrow => [
      "B",
      "B",
      "S",
      "K",
      "K",
      "M",
      "S"
    ],
    day_format_wide => [
      "Balaza",
      "Owokubili",
      "Owokusatu",
      "Olokuna",
      "Olokutaanu",
      "Olomukaaga",
      "Sabiiti"
    ],
    day_stand_alone_abbreviated => [
      "Bala",
      "Kubi",
      "Kusa",
      "Kuna",
      "Kuta",
      "Muka",
      "Sabi"
    ],
    day_stand_alone_narrow => [
      "B",
      "B",
      "S",
      "K",
      "K",
      "M",
      "S"
    ],
    day_stand_alone_wide => [
      "Balaza",
      "Owokubili",
      "Owokusatu",
      "Olokuna",
      "Olokutaanu",
      "Olomukaaga",
      "Sabiiti"
    ],
    era_abbreviated => [
      "AZ",
      "AF"
    ],
    era_narrow => [
      "AZ",
      "AF"
    ],
    era_wide => [
      "Kulisto nga azilawo",
      "Kulisto nga affile"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Soga",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apu",
      "Maa",
      "Juu",
      "Jul",
      "Agu",
      "Seb",
      "Oki",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Janwaliyo",
      "Febwaliyo",
      "Marisi",
      "Apuli",
      "Maayi",
      "Juuni",
      "Julaayi",
      "Agusito",
      "Sebuttemba",
      "Okitobba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apu",
      "Maa",
      "Juu",
      "Jul",
      "Agu",
      "Seb",
      "Oki",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janwaliyo",
      "Febwaliyo",
      "Marisi",
      "Apuli",
      "Maayi",
      "Juuni",
      "Julaayi",
      "Agusito",
      "Sebuttemba",
      "Okitobba",
      "Novemba",
      "Desemba"
    ],
    name => "Soga",
    native_language => "Olusoga",
    native_name => "Olusoga",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Ebisera ebyomwaka ebisoka",
      "Ebisera ebyomwaka ebyokubiri",
      "Ebisera ebyomwaka ebyokusatu",
      "Ebisera ebyomwaka ebyokuna"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Ebisera ebyomwaka ebisoka",
      "Ebisera ebyomwaka ebyokubiri",
      "Ebisera ebyomwaka ebyokusatu",
      "Ebisera ebyomwaka ebyokuna"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ xog-UG ]__
  {
    am_pm_abbreviated => [
      "Munkyo",
      "Eigulo"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "xog-UG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Bala",
      "Kubi",
      "Kusa",
      "Kuna",
      "Kuta",
      "Muka",
      "Sabi"
    ],
    day_format_narrow => [
      "B",
      "B",
      "S",
      "K",
      "K",
      "M",
      "S"
    ],
    day_format_wide => [
      "Balaza",
      "Owokubili",
      "Owokusatu",
      "Olokuna",
      "Olokutaanu",
      "Olomukaaga",
      "Sabiiti"
    ],
    day_stand_alone_abbreviated => [
      "Bala",
      "Kubi",
      "Kusa",
      "Kuna",
      "Kuta",
      "Muka",
      "Sabi"
    ],
    day_stand_alone_narrow => [
      "B",
      "B",
      "S",
      "K",
      "K",
      "M",
      "S"
    ],
    day_stand_alone_wide => [
      "Balaza",
      "Owokubili",
      "Owokusatu",
      "Olokuna",
      "Olokutaanu",
      "Olomukaaga",
      "Sabiiti"
    ],
    era_abbreviated => [
      "AZ",
      "AF"
    ],
    era_narrow => [
      "AZ",
      "AF"
    ],
    era_wide => [
      "Kulisto nga azilawo",
      "Kulisto nga affile"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Soga",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apu",
      "Maa",
      "Juu",
      "Jul",
      "Agu",
      "Seb",
      "Oki",
      "Nov",
      "Des"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Janwaliyo",
      "Febwaliyo",
      "Marisi",
      "Apuli",
      "Maayi",
      "Juuni",
      "Julaayi",
      "Agusito",
      "Sebuttemba",
      "Okitobba",
      "Novemba",
      "Desemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mar",
      "Apu",
      "Maa",
      "Juu",
      "Jul",
      "Agu",
      "Seb",
      "Oki",
      "Nov",
      "Des"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Janwaliyo",
      "Febwaliyo",
      "Marisi",
      "Apuli",
      "Maayi",
      "Juuni",
      "Julaayi",
      "Agusito",
      "Sebuttemba",
      "Okitobba",
      "Novemba",
      "Desemba"
    ],
    name => "Soga Uganda",
    native_language => "Olusoga",
    native_name => "Olusoga Yuganda",
    native_script => undef,
    native_territory => "Yuganda",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Ebisera ebyomwaka ebisoka",
      "Ebisera ebyomwaka ebyokubiri",
      "Ebisera ebyomwaka ebyokusatu",
      "Ebisera ebyomwaka ebyokuna"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Ebisera ebyomwaka ebisoka",
      "Ebisera ebyomwaka ebyokubiri",
      "Ebisera ebyomwaka ebyokusatu",
      "Ebisera ebyomwaka ebyokuna"
    ],
    script => undef,
    territory => "Uganda",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ yav ]__
  {
    am_pm_abbreviated => [
      "ki\N{U+025b}m\N{U+025b}\N{U+0301}\N{U+025b}m",
      "kis\N{U+025b}\N{U+0301}nd\N{U+025b}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "yav",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "md",
      "mw",
      "et",
      "kl",
      "fl",
      "ss",
      "sd"
    ],
    day_format_narrow => [
      "m",
      "m",
      "e",
      "k",
      "f",
      "s",
      "s"
    ],
    day_format_wide => [
      "m\N{U+00f3}ndie",
      "mu\N{U+00e1}ny\N{U+00e1}\N{U+014b}m\N{U+00f3}ndie",
      "met\N{U+00fa}kp\N{U+00ed}\N{U+00e1}p\N{U+025b}",
      "k\N{U+00fa}p\N{U+00e9}limet\N{U+00fa}kpiap\N{U+025b}",
      "fel\N{U+00e9}te",
      "s\N{U+00e9}sel\N{U+00e9}",
      "s\N{U+0254}\N{U+0301}ndi\N{U+025b}"
    ],
    day_stand_alone_abbreviated => [
      "md",
      "mw",
      "et",
      "kl",
      "fl",
      "ss",
      "sd"
    ],
    day_stand_alone_narrow => [
      "m",
      "m",
      "e",
      "k",
      "f",
      "s",
      "s"
    ],
    day_stand_alone_wide => [
      "m\N{U+00f3}ndie",
      "mu\N{U+00e1}ny\N{U+00e1}\N{U+014b}m\N{U+00f3}ndie",
      "met\N{U+00fa}kp\N{U+00ed}\N{U+00e1}p\N{U+025b}",
      "k\N{U+00fa}p\N{U+00e9}limet\N{U+00fa}kpiap\N{U+025b}",
      "fel\N{U+00e9}te",
      "s\N{U+00e9}sel\N{U+00e9}",
      "s\N{U+0254}\N{U+0301}ndi\N{U+025b}"
    ],
    era_abbreviated => [
      "k.Y.",
      "+J.C."
    ],
    era_narrow => [
      "k.Y.",
      "+J.C."
    ],
    era_wide => [
      "katikup\N{U+00ed}en Y\N{U+00e9}suse",
      "\N{U+00e9}k\N{U+00e9}l\N{U+00e9}mk\N{U+00fa}nup\N{U+00ed}\N{U+00e9}n n"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Yangben",
    month_format_abbreviated => [
      "o.1",
      "o.2",
      "o.3",
      "o.4",
      "o.5",
      "o.6",
      "o.7",
      "o.8",
      "o.9",
      "o.10",
      "o.11",
      "o.12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "pik\N{U+00ed}t\N{U+00ed}k\N{U+00ed}tie, o\N{U+00f3}l\N{U+00ed} \N{U+00fa} kut\N{U+00fa}an",
      "si\N{U+025b}y\N{U+025b}\N{U+0301}, o\N{U+00f3}li \N{U+00fa} k\N{U+00e1}nd\N{U+00ed}\N{U+025b}",
      "\N{U+0254}ns\N{U+00fa}mb\N{U+0254}l, o\N{U+00f3}li \N{U+00fa} k\N{U+00e1}t\N{U+00e1}t\N{U+00fa}\N{U+025b}",
      "mesi\N{U+014b}, o\N{U+00f3}li \N{U+00fa} k\N{U+00e9}nie",
      "ensil, o\N{U+00f3}li \N{U+00fa} k\N{U+00e1}t\N{U+00e1}nu\N{U+025b}",
      "\N{U+0254}s\N{U+0254}n",
      "efute",
      "pisuy\N{U+00fa}",
      "im\N{U+025b}\N{U+014b} i pu\N{U+0254}s",
      "im\N{U+025b}\N{U+014b} i put\N{U+00fa}k,o\N{U+00f3}li \N{U+00fa} k\N{U+00e1}t\N{U+00ed}\N{U+025b}",
      "makandik\N{U+025b}",
      "pil\N{U+0254}nd\N{U+0254}\N{U+0301}"
    ],
    month_stand_alone_abbreviated => [
      "o.1",
      "o.2",
      "o.3",
      "o.4",
      "o.5",
      "o.6",
      "o.7",
      "o.8",
      "o.9",
      "o.10",
      "o.11",
      "o.12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "pik\N{U+00ed}t\N{U+00ed}k\N{U+00ed}tie, o\N{U+00f3}l\N{U+00ed} \N{U+00fa} kut\N{U+00fa}an",
      "si\N{U+025b}y\N{U+025b}\N{U+0301}, o\N{U+00f3}li \N{U+00fa} k\N{U+00e1}nd\N{U+00ed}\N{U+025b}",
      "\N{U+0254}ns\N{U+00fa}mb\N{U+0254}l, o\N{U+00f3}li \N{U+00fa} k\N{U+00e1}t\N{U+00e1}t\N{U+00fa}\N{U+025b}",
      "mesi\N{U+014b}, o\N{U+00f3}li \N{U+00fa} k\N{U+00e9}nie",
      "ensil, o\N{U+00f3}li \N{U+00fa} k\N{U+00e1}t\N{U+00e1}nu\N{U+025b}",
      "\N{U+0254}s\N{U+0254}n",
      "efute",
      "pisuy\N{U+00fa}",
      "im\N{U+025b}\N{U+014b} i pu\N{U+0254}s",
      "im\N{U+025b}\N{U+014b} i put\N{U+00fa}k,o\N{U+00f3}li \N{U+00fa} k\N{U+00e1}t\N{U+00ed}\N{U+025b}",
      "makandik\N{U+025b}",
      "pil\N{U+0254}nd\N{U+0254}\N{U+0301}"
    ],
    name => "Yangben",
    native_language => "nuasue",
    native_name => "nuasue",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "nd\N{U+00e1}t\N{U+00fa}\N{U+025b} 1",
      "nd\N{U+00e1}t\N{U+00fa}\N{U+025b} 2",
      "nd\N{U+00e1}t\N{U+00fa}\N{U+025b} 3",
      "nd\N{U+00e1}t\N{U+00fa}\N{U+025b} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "nd\N{U+00e1}t\N{U+00fa}\N{U+025b} 1",
      "nd\N{U+00e1}t\N{U+00fa}\N{U+025b} 2",
      "nd\N{U+00e1}t\N{U+00fa}\N{U+025b} 3",
      "nd\N{U+00e1}t\N{U+00fa}\N{U+025b} 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ yav-CM ]__
  {
    am_pm_abbreviated => [
      "ki\N{U+025b}m\N{U+025b}\N{U+0301}\N{U+025b}m",
      "kis\N{U+025b}\N{U+0301}nd\N{U+025b}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E d",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E d/M",
      MMM => "LLL",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d MMM y",
      yMd => "d/M/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "yav-CM",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "md",
      "mw",
      "et",
      "kl",
      "fl",
      "ss",
      "sd"
    ],
    day_format_narrow => [
      "m",
      "m",
      "e",
      "k",
      "f",
      "s",
      "s"
    ],
    day_format_wide => [
      "m\N{U+00f3}ndie",
      "mu\N{U+00e1}ny\N{U+00e1}\N{U+014b}m\N{U+00f3}ndie",
      "met\N{U+00fa}kp\N{U+00ed}\N{U+00e1}p\N{U+025b}",
      "k\N{U+00fa}p\N{U+00e9}limet\N{U+00fa}kpiap\N{U+025b}",
      "fel\N{U+00e9}te",
      "s\N{U+00e9}sel\N{U+00e9}",
      "s\N{U+0254}\N{U+0301}ndi\N{U+025b}"
    ],
    day_stand_alone_abbreviated => [
      "md",
      "mw",
      "et",
      "kl",
      "fl",
      "ss",
      "sd"
    ],
    day_stand_alone_narrow => [
      "m",
      "m",
      "e",
      "k",
      "f",
      "s",
      "s"
    ],
    day_stand_alone_wide => [
      "m\N{U+00f3}ndie",
      "mu\N{U+00e1}ny\N{U+00e1}\N{U+014b}m\N{U+00f3}ndie",
      "met\N{U+00fa}kp\N{U+00ed}\N{U+00e1}p\N{U+025b}",
      "k\N{U+00fa}p\N{U+00e9}limet\N{U+00fa}kpiap\N{U+025b}",
      "fel\N{U+00e9}te",
      "s\N{U+00e9}sel\N{U+00e9}",
      "s\N{U+0254}\N{U+0301}ndi\N{U+025b}"
    ],
    era_abbreviated => [
      "k.Y.",
      "+J.C."
    ],
    era_narrow => [
      "k.Y.",
      "+J.C."
    ],
    era_wide => [
      "katikup\N{U+00ed}en Y\N{U+00e9}suse",
      "\N{U+00e9}k\N{U+00e9}l\N{U+00e9}mk\N{U+00fa}nup\N{U+00ed}\N{U+00e9}n n"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Yangben",
    month_format_abbreviated => [
      "o.1",
      "o.2",
      "o.3",
      "o.4",
      "o.5",
      "o.6",
      "o.7",
      "o.8",
      "o.9",
      "o.10",
      "o.11",
      "o.12"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "pik\N{U+00ed}t\N{U+00ed}k\N{U+00ed}tie, o\N{U+00f3}l\N{U+00ed} \N{U+00fa} kut\N{U+00fa}an",
      "si\N{U+025b}y\N{U+025b}\N{U+0301}, o\N{U+00f3}li \N{U+00fa} k\N{U+00e1}nd\N{U+00ed}\N{U+025b}",
      "\N{U+0254}ns\N{U+00fa}mb\N{U+0254}l, o\N{U+00f3}li \N{U+00fa} k\N{U+00e1}t\N{U+00e1}t\N{U+00fa}\N{U+025b}",
      "mesi\N{U+014b}, o\N{U+00f3}li \N{U+00fa} k\N{U+00e9}nie",
      "ensil, o\N{U+00f3}li \N{U+00fa} k\N{U+00e1}t\N{U+00e1}nu\N{U+025b}",
      "\N{U+0254}s\N{U+0254}n",
      "efute",
      "pisuy\N{U+00fa}",
      "im\N{U+025b}\N{U+014b} i pu\N{U+0254}s",
      "im\N{U+025b}\N{U+014b} i put\N{U+00fa}k,o\N{U+00f3}li \N{U+00fa} k\N{U+00e1}t\N{U+00ed}\N{U+025b}",
      "makandik\N{U+025b}",
      "pil\N{U+0254}nd\N{U+0254}\N{U+0301}"
    ],
    month_stand_alone_abbreviated => [
      "o.1",
      "o.2",
      "o.3",
      "o.4",
      "o.5",
      "o.6",
      "o.7",
      "o.8",
      "o.9",
      "o.10",
      "o.11",
      "o.12"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "pik\N{U+00ed}t\N{U+00ed}k\N{U+00ed}tie, o\N{U+00f3}l\N{U+00ed} \N{U+00fa} kut\N{U+00fa}an",
      "si\N{U+025b}y\N{U+025b}\N{U+0301}, o\N{U+00f3}li \N{U+00fa} k\N{U+00e1}nd\N{U+00ed}\N{U+025b}",
      "\N{U+0254}ns\N{U+00fa}mb\N{U+0254}l, o\N{U+00f3}li \N{U+00fa} k\N{U+00e1}t\N{U+00e1}t\N{U+00fa}\N{U+025b}",
      "mesi\N{U+014b}, o\N{U+00f3}li \N{U+00fa} k\N{U+00e9}nie",
      "ensil, o\N{U+00f3}li \N{U+00fa} k\N{U+00e1}t\N{U+00e1}nu\N{U+025b}",
      "\N{U+0254}s\N{U+0254}n",
      "efute",
      "pisuy\N{U+00fa}",
      "im\N{U+025b}\N{U+014b} i pu\N{U+0254}s",
      "im\N{U+025b}\N{U+014b} i put\N{U+00fa}k,o\N{U+00f3}li \N{U+00fa} k\N{U+00e1}t\N{U+00ed}\N{U+025b}",
      "makandik\N{U+025b}",
      "pil\N{U+0254}nd\N{U+0254}\N{U+0301}"
    ],
    name => "Yangben Cameroon",
    native_language => "nuasue",
    native_name => "nuasue Kemel\N{U+00fa}n",
    native_script => undef,
    native_territory => "Kemel\N{U+00fa}n",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "nd\N{U+00e1}t\N{U+00fa}\N{U+025b} 1",
      "nd\N{U+00e1}t\N{U+00fa}\N{U+025b} 2",
      "nd\N{U+00e1}t\N{U+00fa}\N{U+025b} 3",
      "nd\N{U+00e1}t\N{U+00fa}\N{U+025b} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "nd\N{U+00e1}t\N{U+00fa}\N{U+025b} 1",
      "nd\N{U+00e1}t\N{U+00fa}\N{U+025b} 2",
      "nd\N{U+00e1}t\N{U+00fa}\N{U+025b} 3",
      "nd\N{U+00e1}t\N{U+00fa}\N{U+025b} 4"
    ],
    script => undef,
    territory => "Cameroon",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ yi ]__
  {
    am_pm_abbreviated => [
      "\N{U+05e4}\N{U+05bf}\N{U+05d0}\N{U+05b7}\N{U+05e8}\N{U+05de}\N{U+05d9}\N{U+05d8}\N{U+05d0}\N{U+05b8}\N{U+05d2}",
      "\N{U+05e0}\N{U+05d0}\N{U+05b8}\N{U+05db}\N{U+05de}\N{U+05d9}\N{U+05d8}\N{U+05d0}\N{U+05b8}\N{U+05d2}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E \N{U+05d3}\N{U+05e2}\N{U+05dd} d\N{U+05d8}\N{U+05df}",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "E \N{U+05d3}\N{U+05e2}\N{U+05dd} d\N{U+05d8}\N{U+05df} MMM yG",
      GyMMMd => "d\N{U+05d8}\N{U+05df} MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "E, d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d\N{U+05d8}\N{U+05df} MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d\N{U+05d8}\N{U+05df} MMM y",
      yMd => "d-M-y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "yi",
    date_format_full => "EEEE, d\N{U+05d8}\N{U+05df} MMMM y",
    date_format_long => "d\N{U+05d8}\N{U+05df} MMMM y",
    date_format_medium => "d\N{U+05d8}\N{U+05df} MMM y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+05de}\N{U+05d0}\N{U+05b8}\N{U+05e0}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05d3}\N{U+05d9}\N{U+05e0}\N{U+05e1}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05de}\N{U+05d9}\N{U+05d8}\N{U+05d5}\N{U+05d5}\N{U+05d0}\N{U+05da}",
      "\N{U+05d3}\N{U+05d0}\N{U+05e0}\N{U+05e2}\N{U+05e8}\N{U+05e9}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05e4}\N{U+05bf}\N{U+05e8}\N{U+05f2}\N{U+05b7}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05e9}\N{U+05d1}\N{U+05ea}",
      "\N{U+05d6}\N{U+05d5}\N{U+05e0}\N{U+05d8}\N{U+05d9}\N{U+05e7}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+05de}\N{U+05d0}\N{U+05b8}\N{U+05e0}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05d3}\N{U+05d9}\N{U+05e0}\N{U+05e1}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05de}\N{U+05d9}\N{U+05d8}\N{U+05d5}\N{U+05d5}\N{U+05d0}\N{U+05da}",
      "\N{U+05d3}\N{U+05d0}\N{U+05e0}\N{U+05e2}\N{U+05e8}\N{U+05e9}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05e4}\N{U+05bf}\N{U+05e8}\N{U+05f2}\N{U+05b7}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05e9}\N{U+05d1}\N{U+05ea}",
      "\N{U+05d6}\N{U+05d5}\N{U+05e0}\N{U+05d8}\N{U+05d9}\N{U+05e7}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+05de}\N{U+05d0}\N{U+05b8}\N{U+05e0}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05d3}\N{U+05d9}\N{U+05e0}\N{U+05e1}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05de}\N{U+05d9}\N{U+05d8}\N{U+05d5}\N{U+05d5}\N{U+05d0}\N{U+05da}",
      "\N{U+05d3}\N{U+05d0}\N{U+05e0}\N{U+05e2}\N{U+05e8}\N{U+05e9}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05e4}\N{U+05bf}\N{U+05e8}\N{U+05f2}\N{U+05b7}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05e9}\N{U+05d1}\N{U+05ea}",
      "\N{U+05d6}\N{U+05d5}\N{U+05e0}\N{U+05d8}\N{U+05d9}\N{U+05e7}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+05de}\N{U+05d0}\N{U+05b8}\N{U+05e0}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05d3}\N{U+05d9}\N{U+05e0}\N{U+05e1}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05de}\N{U+05d9}\N{U+05d8}\N{U+05d5}\N{U+05d5}\N{U+05d0}\N{U+05da}",
      "\N{U+05d3}\N{U+05d0}\N{U+05e0}\N{U+05e2}\N{U+05e8}\N{U+05e9}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05e4}\N{U+05bf}\N{U+05e8}\N{U+05f2}\N{U+05b7}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05e9}\N{U+05d1}\N{U+05ea}",
      "\N{U+05d6}\N{U+05d5}\N{U+05e0}\N{U+05d8}\N{U+05d9}\N{U+05e7}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Yiddish",
    month_format_abbreviated => [
      "\N{U+05d9}\N{U+05d0}\N{U+05b7}\N{U+05e0}\N{U+05d5}\N{U+05d0}\N{U+05b7}\N{U+05e8}",
      "\N{U+05e4}\N{U+05bf}\N{U+05e2}\N{U+05d1}\N{U+05e8}\N{U+05d5}\N{U+05d0}\N{U+05b7}\N{U+05e8}",
      "\N{U+05de}\N{U+05e2}\N{U+05e8}\N{U+05e5}",
      "\N{U+05d0}\N{U+05b7}\N{U+05e4}\N{U+05bc}\N{U+05e8}\N{U+05d9}\N{U+05dc}",
      "\N{U+05de}\N{U+05d9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dc}\N{U+05d9}",
      "\N{U+05d0}\N{U+05d5}\N{U+05d9}\N{U+05d2}\N{U+05d5}\N{U+05e1}\N{U+05d8}",
      "\N{U+05e1}\N{U+05e2}\N{U+05e4}\N{U+05bc}\N{U+05d8}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05d0}\N{U+05e7}\N{U+05d8}\N{U+05d0}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05e0}\N{U+05d0}\N{U+05d5}\N{U+05d5}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05d3}\N{U+05e2}\N{U+05e6}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+05d9}\N{U+05d0}\N{U+05b7}\N{U+05e0}\N{U+05d5}\N{U+05d0}\N{U+05b7}\N{U+05e8}",
      "\N{U+05e4}\N{U+05bf}\N{U+05e2}\N{U+05d1}\N{U+05e8}\N{U+05d5}\N{U+05d0}\N{U+05b7}\N{U+05e8}",
      "\N{U+05de}\N{U+05e2}\N{U+05e8}\N{U+05e5}",
      "\N{U+05d0}\N{U+05b7}\N{U+05e4}\N{U+05bc}\N{U+05e8}\N{U+05d9}\N{U+05dc}",
      "\N{U+05de}\N{U+05d9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dc}\N{U+05d9}",
      "\N{U+05d0}\N{U+05d5}\N{U+05d9}\N{U+05d2}\N{U+05d5}\N{U+05e1}\N{U+05d8}",
      "\N{U+05e1}\N{U+05e2}\N{U+05e4}\N{U+05bc}\N{U+05d8}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05d0}\N{U+05e7}\N{U+05d8}\N{U+05d0}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05e0}\N{U+05d0}\N{U+05d5}\N{U+05d5}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05d3}\N{U+05e2}\N{U+05e6}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+05d9}\N{U+05d0}\N{U+05b7}\N{U+05e0}",
      "\N{U+05e4}\N{U+05bf}\N{U+05e2}\N{U+05d1}",
      "\N{U+05de}\N{U+05e2}\N{U+05e8}\N{U+05e5}",
      "\N{U+05d0}\N{U+05b7}\N{U+05e4}\N{U+05bc}\N{U+05e8}",
      "\N{U+05de}\N{U+05d9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dc}\N{U+05d9}",
      "\N{U+05d0}\N{U+05d5}\N{U+05d9}\N{U+05d2}",
      "\N{U+05e1}\N{U+05e2}\N{U+05e4}\N{U+05bc}",
      "\N{U+05d0}\N{U+05e7}\N{U+05d8}",
      "\N{U+05e0}\N{U+05d0}\N{U+05d5}\N{U+05d5}",
      "\N{U+05d3}\N{U+05e2}\N{U+05e6}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+05d9}\N{U+05d0}\N{U+05b7}\N{U+05e0}\N{U+05d5}\N{U+05d0}\N{U+05b7}\N{U+05e8}",
      "\N{U+05e4}\N{U+05bf}\N{U+05e2}\N{U+05d1}\N{U+05e8}\N{U+05d5}\N{U+05d0}\N{U+05b7}\N{U+05e8}",
      "\N{U+05de}\N{U+05e2}\N{U+05e8}\N{U+05e5}",
      "\N{U+05d0}\N{U+05b7}\N{U+05e4}\N{U+05bc}\N{U+05e8}\N{U+05d9}\N{U+05dc}",
      "\N{U+05de}\N{U+05d9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dc}\N{U+05d9}",
      "\N{U+05d0}\N{U+05d5}\N{U+05d9}\N{U+05d2}\N{U+05d5}\N{U+05e1}\N{U+05d8}",
      "\N{U+05e1}\N{U+05e2}\N{U+05e4}\N{U+05bc}\N{U+05d8}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05d0}\N{U+05e7}\N{U+05d8}\N{U+05d0}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05e0}\N{U+05d0}\N{U+05d5}\N{U+05d5}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05d3}\N{U+05e2}\N{U+05e6}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}"
    ],
    name => "Yiddish",
    native_language => "\N{U+05d9}\N{U+05d9}\N{U+05b4}\N{U+05d3}\N{U+05d9}\N{U+05e9}",
    native_name => "\N{U+05d9}\N{U+05d9}\N{U+05b4}\N{U+05d3}\N{U+05d9}\N{U+05e9}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ yi-001 ]__
  {
    am_pm_abbreviated => [
      "\N{U+05e4}\N{U+05bf}\N{U+05d0}\N{U+05b7}\N{U+05e8}\N{U+05de}\N{U+05d9}\N{U+05d8}\N{U+05d0}\N{U+05b8}\N{U+05d2}",
      "\N{U+05e0}\N{U+05d0}\N{U+05b8}\N{U+05db}\N{U+05de}\N{U+05d9}\N{U+05d8}\N{U+05d0}\N{U+05b8}\N{U+05d2}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "E \N{U+05d3}\N{U+05e2}\N{U+05dd} d\N{U+05d8}\N{U+05df}",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "E \N{U+05d3}\N{U+05e2}\N{U+05dd} d\N{U+05d8}\N{U+05df} MMM yG",
      GyMMMd => "d\N{U+05d8}\N{U+05df} MMM y G",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "MMM d, E",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "MM-dd",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "y-MM",
      yMEd => "E, d/M/y",
      yMM => "MM/y",
      yMMM => "MMM y",
      yMMMEd => "E, d\N{U+05d8}\N{U+05df} MMM y",
      yMMMM => "y MMMM",
      yMMMd => "d\N{U+05d8}\N{U+05df} MMM y",
      yMd => "d-M-y",
      yQQQ => "y QQQ",
      yQQQQ => "y QQQQ"
    },
    code => "yi-001",
    date_format_full => "EEEE, d\N{U+05d8}\N{U+05df} MMMM y",
    date_format_long => "d\N{U+05d8}\N{U+05df} MMMM y",
    date_format_medium => "d\N{U+05d8}\N{U+05df} MMM y",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1}, {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+05de}\N{U+05d0}\N{U+05b8}\N{U+05e0}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05d3}\N{U+05d9}\N{U+05e0}\N{U+05e1}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05de}\N{U+05d9}\N{U+05d8}\N{U+05d5}\N{U+05d5}\N{U+05d0}\N{U+05da}",
      "\N{U+05d3}\N{U+05d0}\N{U+05e0}\N{U+05e2}\N{U+05e8}\N{U+05e9}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05e4}\N{U+05bf}\N{U+05e8}\N{U+05f2}\N{U+05b7}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05e9}\N{U+05d1}\N{U+05ea}",
      "\N{U+05d6}\N{U+05d5}\N{U+05e0}\N{U+05d8}\N{U+05d9}\N{U+05e7}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+05de}\N{U+05d0}\N{U+05b8}\N{U+05e0}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05d3}\N{U+05d9}\N{U+05e0}\N{U+05e1}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05de}\N{U+05d9}\N{U+05d8}\N{U+05d5}\N{U+05d5}\N{U+05d0}\N{U+05da}",
      "\N{U+05d3}\N{U+05d0}\N{U+05e0}\N{U+05e2}\N{U+05e8}\N{U+05e9}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05e4}\N{U+05bf}\N{U+05e8}\N{U+05f2}\N{U+05b7}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05e9}\N{U+05d1}\N{U+05ea}",
      "\N{U+05d6}\N{U+05d5}\N{U+05e0}\N{U+05d8}\N{U+05d9}\N{U+05e7}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+05de}\N{U+05d0}\N{U+05b8}\N{U+05e0}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05d3}\N{U+05d9}\N{U+05e0}\N{U+05e1}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05de}\N{U+05d9}\N{U+05d8}\N{U+05d5}\N{U+05d5}\N{U+05d0}\N{U+05da}",
      "\N{U+05d3}\N{U+05d0}\N{U+05e0}\N{U+05e2}\N{U+05e8}\N{U+05e9}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05e4}\N{U+05bf}\N{U+05e8}\N{U+05f2}\N{U+05b7}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05e9}\N{U+05d1}\N{U+05ea}",
      "\N{U+05d6}\N{U+05d5}\N{U+05e0}\N{U+05d8}\N{U+05d9}\N{U+05e7}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+05de}\N{U+05d0}\N{U+05b8}\N{U+05e0}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05d3}\N{U+05d9}\N{U+05e0}\N{U+05e1}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05de}\N{U+05d9}\N{U+05d8}\N{U+05d5}\N{U+05d5}\N{U+05d0}\N{U+05da}",
      "\N{U+05d3}\N{U+05d0}\N{U+05e0}\N{U+05e2}\N{U+05e8}\N{U+05e9}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05e4}\N{U+05bf}\N{U+05e8}\N{U+05f2}\N{U+05b7}\N{U+05d8}\N{U+05d9}\N{U+05e7}",
      "\N{U+05e9}\N{U+05d1}\N{U+05ea}",
      "\N{U+05d6}\N{U+05d5}\N{U+05e0}\N{U+05d8}\N{U+05d9}\N{U+05e7}"
    ],
    era_abbreviated => [
      "BCE",
      "CE"
    ],
    era_narrow => [
      "BCE",
      "CE"
    ],
    era_wide => [
      "BCE",
      "CE"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Yiddish",
    month_format_abbreviated => [
      "\N{U+05d9}\N{U+05d0}\N{U+05b7}\N{U+05e0}\N{U+05d5}\N{U+05d0}\N{U+05b7}\N{U+05e8}",
      "\N{U+05e4}\N{U+05bf}\N{U+05e2}\N{U+05d1}\N{U+05e8}\N{U+05d5}\N{U+05d0}\N{U+05b7}\N{U+05e8}",
      "\N{U+05de}\N{U+05e2}\N{U+05e8}\N{U+05e5}",
      "\N{U+05d0}\N{U+05b7}\N{U+05e4}\N{U+05bc}\N{U+05e8}\N{U+05d9}\N{U+05dc}",
      "\N{U+05de}\N{U+05d9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dc}\N{U+05d9}",
      "\N{U+05d0}\N{U+05d5}\N{U+05d9}\N{U+05d2}\N{U+05d5}\N{U+05e1}\N{U+05d8}",
      "\N{U+05e1}\N{U+05e2}\N{U+05e4}\N{U+05bc}\N{U+05d8}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05d0}\N{U+05e7}\N{U+05d8}\N{U+05d0}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05e0}\N{U+05d0}\N{U+05d5}\N{U+05d5}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05d3}\N{U+05e2}\N{U+05e6}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+05d9}\N{U+05d0}\N{U+05b7}\N{U+05e0}\N{U+05d5}\N{U+05d0}\N{U+05b7}\N{U+05e8}",
      "\N{U+05e4}\N{U+05bf}\N{U+05e2}\N{U+05d1}\N{U+05e8}\N{U+05d5}\N{U+05d0}\N{U+05b7}\N{U+05e8}",
      "\N{U+05de}\N{U+05e2}\N{U+05e8}\N{U+05e5}",
      "\N{U+05d0}\N{U+05b7}\N{U+05e4}\N{U+05bc}\N{U+05e8}\N{U+05d9}\N{U+05dc}",
      "\N{U+05de}\N{U+05d9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dc}\N{U+05d9}",
      "\N{U+05d0}\N{U+05d5}\N{U+05d9}\N{U+05d2}\N{U+05d5}\N{U+05e1}\N{U+05d8}",
      "\N{U+05e1}\N{U+05e2}\N{U+05e4}\N{U+05bc}\N{U+05d8}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05d0}\N{U+05e7}\N{U+05d8}\N{U+05d0}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05e0}\N{U+05d0}\N{U+05d5}\N{U+05d5}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05d3}\N{U+05e2}\N{U+05e6}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+05d9}\N{U+05d0}\N{U+05b7}\N{U+05e0}",
      "\N{U+05e4}\N{U+05bf}\N{U+05e2}\N{U+05d1}",
      "\N{U+05de}\N{U+05e2}\N{U+05e8}\N{U+05e5}",
      "\N{U+05d0}\N{U+05b7}\N{U+05e4}\N{U+05bc}\N{U+05e8}",
      "\N{U+05de}\N{U+05d9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dc}\N{U+05d9}",
      "\N{U+05d0}\N{U+05d5}\N{U+05d9}\N{U+05d2}",
      "\N{U+05e1}\N{U+05e2}\N{U+05e4}\N{U+05bc}",
      "\N{U+05d0}\N{U+05e7}\N{U+05d8}",
      "\N{U+05e0}\N{U+05d0}\N{U+05d5}\N{U+05d5}",
      "\N{U+05d3}\N{U+05e2}\N{U+05e6}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+05d9}\N{U+05d0}\N{U+05b7}\N{U+05e0}\N{U+05d5}\N{U+05d0}\N{U+05b7}\N{U+05e8}",
      "\N{U+05e4}\N{U+05bf}\N{U+05e2}\N{U+05d1}\N{U+05e8}\N{U+05d5}\N{U+05d0}\N{U+05b7}\N{U+05e8}",
      "\N{U+05de}\N{U+05e2}\N{U+05e8}\N{U+05e5}",
      "\N{U+05d0}\N{U+05b7}\N{U+05e4}\N{U+05bc}\N{U+05e8}\N{U+05d9}\N{U+05dc}",
      "\N{U+05de}\N{U+05d9}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05e0}\N{U+05d9}",
      "\N{U+05d9}\N{U+05d5}\N{U+05dc}\N{U+05d9}",
      "\N{U+05d0}\N{U+05d5}\N{U+05d9}\N{U+05d2}\N{U+05d5}\N{U+05e1}\N{U+05d8}",
      "\N{U+05e1}\N{U+05e2}\N{U+05e4}\N{U+05bc}\N{U+05d8}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05d0}\N{U+05e7}\N{U+05d8}\N{U+05d0}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05e0}\N{U+05d0}\N{U+05d5}\N{U+05d5}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}",
      "\N{U+05d3}\N{U+05e2}\N{U+05e6}\N{U+05e2}\N{U+05de}\N{U+05d1}\N{U+05e2}\N{U+05e8}"
    ],
    name => "Yiddish World",
    native_language => "\N{U+05d9}\N{U+05d9}\N{U+05b4}\N{U+05d3}\N{U+05d9}\N{U+05e9}",
    native_name => "\N{U+05d9}\N{U+05d9}\N{U+05b4}\N{U+05d3}\N{U+05d9}\N{U+05e9} \N{U+05d5}\N{U+05d5}\N{U+05e2}\N{U+05dc}\N{U+05d8}",
    native_script => undef,
    native_territory => "\N{U+05d5}\N{U+05d5}\N{U+05e2}\N{U+05dc}\N{U+05d8}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    script => undef,
    territory => "World",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ yo ]__
  {
    am_pm_abbreviated => [
      "\N{U+00c0}\N{U+00e1}r\N{U+1ecd}\N{U+0300}",
      "\N{U+1ecc}\N{U+0300}s\N{U+00e1}n"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "yo",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Aj\N{U+00e9}",
      "\N{U+00cc}s\N{U+1eb9}\N{U+0301}gun",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301}r\N{U+00fa}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301}b\N{U+1ecd}",
      "\N{U+1eb8}t\N{U+00ec}",
      "\N{U+00c0}b\N{U+00e1}m\N{U+1eb9}\N{U+0301}ta",
      "\N{U+00c0}\N{U+00ec}k\N{U+00fa}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} Aj\N{U+00e9}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} \N{U+00cc}s\N{U+1eb9}\N{U+0301}gun",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301}r\N{U+00fa}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301}b\N{U+1ecd}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} \N{U+1eb8}t\N{U+00ec}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} \N{U+00c0}b\N{U+00e1}m\N{U+1eb9}\N{U+0301}ta",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} \N{U+00c0}\N{U+00ec}k\N{U+00fa}"
    ],
    day_stand_alone_abbreviated => [
      "Aj\N{U+00e9}",
      "\N{U+00cc}s\N{U+1eb9}\N{U+0301}gun",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301}r\N{U+00fa}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301}b\N{U+1ecd}",
      "\N{U+1eb8}t\N{U+00ec}",
      "\N{U+00c0}b\N{U+00e1}m\N{U+1eb9}\N{U+0301}ta",
      "\N{U+00c0}\N{U+00ec}k\N{U+00fa}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} Aj\N{U+00e9}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} \N{U+00cc}s\N{U+1eb9}\N{U+0301}gun",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301}r\N{U+00fa}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301}b\N{U+1ecd}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} \N{U+1eb8}t\N{U+00ec}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} \N{U+00c0}b\N{U+00e1}m\N{U+1eb9}\N{U+0301}ta",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} \N{U+00c0}\N{U+00ec}k\N{U+00fa}"
    ],
    era_abbreviated => [
      "SK",
      "LK"
    ],
    era_narrow => [
      "SK",
      "LK"
    ],
    era_wide => [
      "Saju Kristi",
      "Lehin Kristi"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Yoruba",
    month_format_abbreviated => [
      "\N{U+1e62}\N{U+1eb9}\N{U+0301}r\N{U+1eb9}\N{U+0301}",
      "\N{U+00c8}r\N{U+00e8}l\N{U+00e8}",
      "\N{U+1eb8}r\N{U+1eb9}\N{U+0300}n\N{U+00e0}",
      "\N{U+00cc}gb\N{U+00e9}",
      "\N{U+1eb8}\N{U+0300}bibi",
      "\N{U+00d2}k\N{U+00fa}du",
      "Ag\N{U+1eb9}m\N{U+1ecd}",
      "\N{U+00d2}g\N{U+00fa}n",
      "Owewe",
      "\N{U+1ecc}\N{U+0300}w\N{U+00e0}r\N{U+00e0}",
      "B\N{U+00e9}l\N{U+00fa}",
      "\N{U+1ecc}\N{U+0300}p\N{U+1eb9}\N{U+0300}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "O\N{U+1e63}\N{U+00f9} \N{U+1e62}\N{U+1eb9}\N{U+0301}r\N{U+1eb9}\N{U+0301}",
      "O\N{U+1e63}\N{U+00f9} \N{U+00c8}r\N{U+00e8}l\N{U+00e8}",
      "O\N{U+1e63}\N{U+00f9} \N{U+1eb8}r\N{U+1eb9}\N{U+0300}n\N{U+00e0}",
      "O\N{U+1e63}\N{U+00f9} \N{U+00cc}gb\N{U+00e9}",
      "O\N{U+1e63}\N{U+00f9} \N{U+1eb8}\N{U+0300}bibi",
      "O\N{U+1e63}\N{U+00f9} \N{U+00d2}k\N{U+00fa}du",
      "O\N{U+1e63}\N{U+00f9} Ag\N{U+1eb9}m\N{U+1ecd}",
      "O\N{U+1e63}\N{U+00f9} \N{U+00d2}g\N{U+00fa}n",
      "O\N{U+1e63}\N{U+00f9} Owewe",
      "O\N{U+1e63}\N{U+00f9} \N{U+1ecc}\N{U+0300}w\N{U+00e0}r\N{U+00e0}",
      "O\N{U+1e63}\N{U+00f9} B\N{U+00e9}l\N{U+00fa}",
      "O\N{U+1e63}\N{U+00f9} \N{U+1ecc}\N{U+0300}p\N{U+1eb9}\N{U+0300}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+1e62}\N{U+1eb9}\N{U+0301}r\N{U+1eb9}\N{U+0301}",
      "\N{U+00c8}r\N{U+00e8}l\N{U+00e8}",
      "\N{U+1eb8}r\N{U+1eb9}\N{U+0300}n\N{U+00e0}",
      "\N{U+00cc}gb\N{U+00e9}",
      "\N{U+1eb8}\N{U+0300}bibi",
      "\N{U+00d2}k\N{U+00fa}du",
      "Ag\N{U+1eb9}m\N{U+1ecd}",
      "\N{U+00d2}g\N{U+00fa}n",
      "Owewe",
      "\N{U+1ecc}\N{U+0300}w\N{U+00e0}r\N{U+00e0}",
      "B\N{U+00e9}l\N{U+00fa}",
      "\N{U+1ecc}\N{U+0300}p\N{U+1eb9}\N{U+0300}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "O\N{U+1e63}\N{U+00f9} \N{U+1e62}\N{U+1eb9}\N{U+0301}r\N{U+1eb9}\N{U+0301}",
      "O\N{U+1e63}\N{U+00f9} \N{U+00c8}r\N{U+00e8}l\N{U+00e8}",
      "O\N{U+1e63}\N{U+00f9} \N{U+1eb8}r\N{U+1eb9}\N{U+0300}n\N{U+00e0}",
      "O\N{U+1e63}\N{U+00f9} \N{U+00cc}gb\N{U+00e9}",
      "O\N{U+1e63}\N{U+00f9} \N{U+1eb8}\N{U+0300}bibi",
      "O\N{U+1e63}\N{U+00f9} \N{U+00d2}k\N{U+00fa}du",
      "O\N{U+1e63}\N{U+00f9} Ag\N{U+1eb9}m\N{U+1ecd}",
      "O\N{U+1e63}\N{U+00f9} \N{U+00d2}g\N{U+00fa}n",
      "O\N{U+1e63}\N{U+00f9} Owewe",
      "O\N{U+1e63}\N{U+00f9} \N{U+1ecc}\N{U+0300}w\N{U+00e0}r\N{U+00e0}",
      "O\N{U+1e63}\N{U+00f9} B\N{U+00e9}l\N{U+00fa}",
      "O\N{U+1e63}\N{U+00f9} \N{U+1ecc}\N{U+0300}p\N{U+1eb9}\N{U+0300}"
    ],
    name => "Yoruba",
    native_language => "\N{U+00c8}d\N{U+00e8} Yor\N{U+00f9}b\N{U+00e1}",
    native_name => "\N{U+00c8}d\N{U+00e8} Yor\N{U+00f9}b\N{U+00e1}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "K\N{U+1ecd}\N{U+0301}t\N{U+00e0} K\N{U+00ed}nn\N{U+00ed}",
      "K\N{U+1ecd}\N{U+0301}t\N{U+00e0} Kej\N{U+00ec}",
      "K\N{U+1ecd}\N{U+0301}\N{U+00e0} Keta",
      "K\N{U+1ecd}\N{U+0301}t\N{U+00e0} K\N{U+1eb9}rin"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "K\N{U+1ecd}\N{U+0301}t\N{U+00e0} K\N{U+00ed}nn\N{U+00ed}",
      "K\N{U+1ecd}\N{U+0301}t\N{U+00e0} Kej\N{U+00ec}",
      "K\N{U+1ecd}\N{U+0301}\N{U+00e0} Keta",
      "K\N{U+1ecd}\N{U+0301}t\N{U+00e0} K\N{U+1eb9}rin"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ yo-BJ ]__
  {
    am_pm_abbreviated => [
      "\N{U+00c0}\N{U+00e1}r\N{U+0254}\N{U+0300}",
      "\N{U+0186}\N{U+0300}s\N{U+00e1}n"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "yo-BJ",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Aj\N{U+00e9}",
      "\N{U+00cc}s\N{U+025b}\N{U+0301}gun",
      "\N{U+0186}j\N{U+0254}\N{U+0301}r\N{U+00fa}",
      "\N{U+0186}j\N{U+0254}\N{U+0301}b\N{U+0254}",
      "\N{U+0190}t\N{U+00ec}",
      "\N{U+00c0}b\N{U+00e1}m\N{U+025b}\N{U+0301}ta",
      "\N{U+00c0}\N{U+00ec}k\N{U+00fa}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+0186}j\N{U+0254}\N{U+0301} Aj\N{U+00e9}",
      "\N{U+0186}j\N{U+0254}\N{U+0301} \N{U+00cc}s\N{U+025b}\N{U+0301}gun",
      "\N{U+0186}j\N{U+0254}\N{U+0301}r\N{U+00fa}",
      "\N{U+0186}j\N{U+0254}\N{U+0301}b\N{U+0254}",
      "\N{U+0186}j\N{U+0254}\N{U+0301} \N{U+0190}t\N{U+00ec}",
      "\N{U+0186}j\N{U+0254}\N{U+0301} \N{U+00c0}b\N{U+00e1}m\N{U+025b}\N{U+0301}ta",
      "\N{U+0186}j\N{U+0254}\N{U+0301} \N{U+00c0}\N{U+00ec}k\N{U+00fa}"
    ],
    day_stand_alone_abbreviated => [
      "Aj\N{U+00e9}",
      "\N{U+00cc}s\N{U+025b}\N{U+0301}gun",
      "\N{U+0186}j\N{U+0254}\N{U+0301}r\N{U+00fa}",
      "\N{U+0186}j\N{U+0254}\N{U+0301}b\N{U+0254}",
      "\N{U+0190}t\N{U+00ec}",
      "\N{U+00c0}b\N{U+00e1}m\N{U+025b}\N{U+0301}ta",
      "\N{U+00c0}\N{U+00ec}k\N{U+00fa}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+0186}j\N{U+0254}\N{U+0301} Aj\N{U+00e9}",
      "\N{U+0186}j\N{U+0254}\N{U+0301} \N{U+00cc}s\N{U+025b}\N{U+0301}gun",
      "\N{U+0186}j\N{U+0254}\N{U+0301}r\N{U+00fa}",
      "\N{U+0186}j\N{U+0254}\N{U+0301}b\N{U+0254}",
      "\N{U+0186}j\N{U+0254}\N{U+0301} \N{U+0190}t\N{U+00ec}",
      "\N{U+0186}j\N{U+0254}\N{U+0301} \N{U+00c0}b\N{U+00e1}m\N{U+025b}\N{U+0301}ta",
      "\N{U+0186}j\N{U+0254}\N{U+0301} \N{U+00c0}\N{U+00ec}k\N{U+00fa}"
    ],
    era_abbreviated => [
      "SK",
      "LK"
    ],
    era_narrow => [
      "SK",
      "LK"
    ],
    era_wide => [
      "Saju Kristi",
      "Lehin Kristi"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Yoruba",
    month_format_abbreviated => [
      "Sh\N{U+025b}\N{U+0301}r\N{U+025b}\N{U+0301}",
      "\N{U+00c8}r\N{U+00e8}l\N{U+00e8}",
      "\N{U+0190}r\N{U+025b}\N{U+0300}n\N{U+00e0}",
      "\N{U+00cc}gb\N{U+00e9}",
      "\N{U+0190}\N{U+0300}bibi",
      "\N{U+00d2}k\N{U+00fa}du",
      "Ag\N{U+025b}m\N{U+0254}",
      "\N{U+00d2}g\N{U+00fa}n",
      "Owewe",
      "\N{U+0186}\N{U+0300}w\N{U+00e0}r\N{U+00e0}",
      "B\N{U+00e9}l\N{U+00fa}",
      "\N{U+0186}\N{U+0300}p\N{U+025b}\N{U+0300}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "Osh\N{U+00f9} Sh\N{U+025b}\N{U+0301}r\N{U+025b}\N{U+0301}",
      "Osh\N{U+00f9} \N{U+00c8}r\N{U+00e8}l\N{U+00e8}",
      "Osh\N{U+00f9} \N{U+0190}r\N{U+025b}\N{U+0300}n\N{U+00e0}",
      "Osh\N{U+00f9} \N{U+00cc}gb\N{U+00e9}",
      "Osh\N{U+00f9} \N{U+0190}\N{U+0300}bibi",
      "Osh\N{U+00f9} \N{U+00d2}k\N{U+00fa}du",
      "Osh\N{U+00f9} Ag\N{U+025b}m\N{U+0254}",
      "Osh\N{U+00f9} \N{U+00d2}g\N{U+00fa}n",
      "Osh\N{U+00f9} Owewe",
      "Osh\N{U+00f9} \N{U+0186}\N{U+0300}w\N{U+00e0}r\N{U+00e0}",
      "Osh\N{U+00f9} B\N{U+00e9}l\N{U+00fa}",
      "Osh\N{U+00f9} \N{U+0186}\N{U+0300}p\N{U+025b}\N{U+0300}"
    ],
    month_stand_alone_abbreviated => [
      "Sh\N{U+025b}\N{U+0301}r\N{U+025b}\N{U+0301}",
      "\N{U+00c8}r\N{U+00e8}l\N{U+00e8}",
      "\N{U+0190}r\N{U+025b}\N{U+0300}n\N{U+00e0}",
      "\N{U+00cc}gb\N{U+00e9}",
      "\N{U+0190}\N{U+0300}bibi",
      "\N{U+00d2}k\N{U+00fa}du",
      "Ag\N{U+025b}m\N{U+0254}",
      "\N{U+00d2}g\N{U+00fa}n",
      "Owewe",
      "\N{U+0186}\N{U+0300}w\N{U+00e0}r\N{U+00e0}",
      "B\N{U+00e9}l\N{U+00fa}",
      "\N{U+0186}\N{U+0300}p\N{U+025b}\N{U+0300}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "Osh\N{U+00f9} Sh\N{U+025b}\N{U+0301}r\N{U+025b}\N{U+0301}",
      "Osh\N{U+00f9} \N{U+00c8}r\N{U+00e8}l\N{U+00e8}",
      "Osh\N{U+00f9} \N{U+0190}r\N{U+025b}\N{U+0300}n\N{U+00e0}",
      "Osh\N{U+00f9} \N{U+00cc}gb\N{U+00e9}",
      "Osh\N{U+00f9} \N{U+0190}\N{U+0300}bibi",
      "Osh\N{U+00f9} \N{U+00d2}k\N{U+00fa}du",
      "Osh\N{U+00f9} Ag\N{U+025b}m\N{U+0254}",
      "Osh\N{U+00f9} \N{U+00d2}g\N{U+00fa}n",
      "Osh\N{U+00f9} Owewe",
      "Osh\N{U+00f9} \N{U+0186}\N{U+0300}w\N{U+00e0}r\N{U+00e0}",
      "Osh\N{U+00f9} B\N{U+00e9}l\N{U+00fa}",
      "Osh\N{U+00f9} \N{U+0186}\N{U+0300}p\N{U+025b}\N{U+0300}"
    ],
    name => "Yoruba Benin",
    native_language => "\N{U+00c8}d\N{U+00e8} Yor\N{U+00f9}b\N{U+00e1}",
    native_name => "\N{U+00c8}d\N{U+00e8} Yor\N{U+00f9}b\N{U+00e1} Or\N{U+00ed}l\N{U+025b}\N{U+0301}\N{U+00e8}de B\N{U+025b}\N{U+0300}n\N{U+025b}\N{U+0300}",
    native_script => undef,
    native_territory => "Or\N{U+00ed}l\N{U+025b}\N{U+0301}\N{U+00e8}de B\N{U+025b}\N{U+0300}n\N{U+025b}\N{U+0300}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "K\N{U+0254}\N{U+0301}t\N{U+00e0} K\N{U+00ed}nn\N{U+00ed}",
      "K\N{U+0254}\N{U+0301}t\N{U+00e0} Kej\N{U+00ec}",
      "K\N{U+0254}\N{U+0301}\N{U+00e0} Keta",
      "K\N{U+0254}\N{U+0301}t\N{U+00e0} K\N{U+025b}rin"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "K\N{U+0254}\N{U+0301}t\N{U+00e0} K\N{U+00ed}nn\N{U+00ed}",
      "K\N{U+0254}\N{U+0301}t\N{U+00e0} Kej\N{U+00ec}",
      "K\N{U+0254}\N{U+0301}\N{U+00e0} Keta",
      "K\N{U+0254}\N{U+0301}t\N{U+00e0} K\N{U+025b}rin"
    ],
    script => undef,
    territory => "Benin",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ yo-NG ]__
  {
    am_pm_abbreviated => [
      "\N{U+00c0}\N{U+00e1}r\N{U+1ecd}\N{U+0300}",
      "\N{U+1ecc}\N{U+0300}s\N{U+00e1}n"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMEd => "E, MMMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "yo-NG",
    date_format_full => "EEEE, d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM y",
    date_format_short => "dd/MM/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Aj\N{U+00e9}",
      "\N{U+00cc}s\N{U+1eb9}\N{U+0301}gun",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301}r\N{U+00fa}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301}b\N{U+1ecd}",
      "\N{U+1eb8}t\N{U+00ec}",
      "\N{U+00c0}b\N{U+00e1}m\N{U+1eb9}\N{U+0301}ta",
      "\N{U+00c0}\N{U+00ec}k\N{U+00fa}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} Aj\N{U+00e9}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} \N{U+00cc}s\N{U+1eb9}\N{U+0301}gun",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301}r\N{U+00fa}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301}b\N{U+1ecd}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} \N{U+1eb8}t\N{U+00ec}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} \N{U+00c0}b\N{U+00e1}m\N{U+1eb9}\N{U+0301}ta",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} \N{U+00c0}\N{U+00ec}k\N{U+00fa}"
    ],
    day_stand_alone_abbreviated => [
      "Aj\N{U+00e9}",
      "\N{U+00cc}s\N{U+1eb9}\N{U+0301}gun",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301}r\N{U+00fa}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301}b\N{U+1ecd}",
      "\N{U+1eb8}t\N{U+00ec}",
      "\N{U+00c0}b\N{U+00e1}m\N{U+1eb9}\N{U+0301}ta",
      "\N{U+00c0}\N{U+00ec}k\N{U+00fa}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} Aj\N{U+00e9}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} \N{U+00cc}s\N{U+1eb9}\N{U+0301}gun",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301}r\N{U+00fa}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301}b\N{U+1ecd}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} \N{U+1eb8}t\N{U+00ec}",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} \N{U+00c0}b\N{U+00e1}m\N{U+1eb9}\N{U+0301}ta",
      "\N{U+1ecc}j\N{U+1ecd}\N{U+0301} \N{U+00c0}\N{U+00ec}k\N{U+00fa}"
    ],
    era_abbreviated => [
      "SK",
      "LK"
    ],
    era_narrow => [
      "SK",
      "LK"
    ],
    era_wide => [
      "Saju Kristi",
      "Lehin Kristi"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%y",
    glibc_datetime_format => "\N{U+1ecd}j\N{U+1ecd}\N{U+0301} %A, %d o\N{U+1e63}\N{U+00f9} %B \N{U+1ecd}d\N{U+00fa}n %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%r",
    language => "Yoruba",
    month_format_abbreviated => [
      "\N{U+1e62}\N{U+1eb9}\N{U+0301}r\N{U+1eb9}\N{U+0301}",
      "\N{U+00c8}r\N{U+00e8}l\N{U+00e8}",
      "\N{U+1eb8}r\N{U+1eb9}\N{U+0300}n\N{U+00e0}",
      "\N{U+00cc}gb\N{U+00e9}",
      "\N{U+1eb8}\N{U+0300}bibi",
      "\N{U+00d2}k\N{U+00fa}du",
      "Ag\N{U+1eb9}m\N{U+1ecd}",
      "\N{U+00d2}g\N{U+00fa}n",
      "Owewe",
      "\N{U+1ecc}\N{U+0300}w\N{U+00e0}r\N{U+00e0}",
      "B\N{U+00e9}l\N{U+00fa}",
      "\N{U+1ecc}\N{U+0300}p\N{U+1eb9}\N{U+0300}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "O\N{U+1e63}\N{U+00f9} \N{U+1e62}\N{U+1eb9}\N{U+0301}r\N{U+1eb9}\N{U+0301}",
      "O\N{U+1e63}\N{U+00f9} \N{U+00c8}r\N{U+00e8}l\N{U+00e8}",
      "O\N{U+1e63}\N{U+00f9} \N{U+1eb8}r\N{U+1eb9}\N{U+0300}n\N{U+00e0}",
      "O\N{U+1e63}\N{U+00f9} \N{U+00cc}gb\N{U+00e9}",
      "O\N{U+1e63}\N{U+00f9} \N{U+1eb8}\N{U+0300}bibi",
      "O\N{U+1e63}\N{U+00f9} \N{U+00d2}k\N{U+00fa}du",
      "O\N{U+1e63}\N{U+00f9} Ag\N{U+1eb9}m\N{U+1ecd}",
      "O\N{U+1e63}\N{U+00f9} \N{U+00d2}g\N{U+00fa}n",
      "O\N{U+1e63}\N{U+00f9} Owewe",
      "O\N{U+1e63}\N{U+00f9} \N{U+1ecc}\N{U+0300}w\N{U+00e0}r\N{U+00e0}",
      "O\N{U+1e63}\N{U+00f9} B\N{U+00e9}l\N{U+00fa}",
      "O\N{U+1e63}\N{U+00f9} \N{U+1ecc}\N{U+0300}p\N{U+1eb9}\N{U+0300}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+1e62}\N{U+1eb9}\N{U+0301}r\N{U+1eb9}\N{U+0301}",
      "\N{U+00c8}r\N{U+00e8}l\N{U+00e8}",
      "\N{U+1eb8}r\N{U+1eb9}\N{U+0300}n\N{U+00e0}",
      "\N{U+00cc}gb\N{U+00e9}",
      "\N{U+1eb8}\N{U+0300}bibi",
      "\N{U+00d2}k\N{U+00fa}du",
      "Ag\N{U+1eb9}m\N{U+1ecd}",
      "\N{U+00d2}g\N{U+00fa}n",
      "Owewe",
      "\N{U+1ecc}\N{U+0300}w\N{U+00e0}r\N{U+00e0}",
      "B\N{U+00e9}l\N{U+00fa}",
      "\N{U+1ecc}\N{U+0300}p\N{U+1eb9}\N{U+0300}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "O\N{U+1e63}\N{U+00f9} \N{U+1e62}\N{U+1eb9}\N{U+0301}r\N{U+1eb9}\N{U+0301}",
      "O\N{U+1e63}\N{U+00f9} \N{U+00c8}r\N{U+00e8}l\N{U+00e8}",
      "O\N{U+1e63}\N{U+00f9} \N{U+1eb8}r\N{U+1eb9}\N{U+0300}n\N{U+00e0}",
      "O\N{U+1e63}\N{U+00f9} \N{U+00cc}gb\N{U+00e9}",
      "O\N{U+1e63}\N{U+00f9} \N{U+1eb8}\N{U+0300}bibi",
      "O\N{U+1e63}\N{U+00f9} \N{U+00d2}k\N{U+00fa}du",
      "O\N{U+1e63}\N{U+00f9} Ag\N{U+1eb9}m\N{U+1ecd}",
      "O\N{U+1e63}\N{U+00f9} \N{U+00d2}g\N{U+00fa}n",
      "O\N{U+1e63}\N{U+00f9} Owewe",
      "O\N{U+1e63}\N{U+00f9} \N{U+1ecc}\N{U+0300}w\N{U+00e0}r\N{U+00e0}",
      "O\N{U+1e63}\N{U+00f9} B\N{U+00e9}l\N{U+00fa}",
      "O\N{U+1e63}\N{U+00f9} \N{U+1ecc}\N{U+0300}p\N{U+1eb9}\N{U+0300}"
    ],
    name => "Yoruba Nigeria",
    native_language => "\N{U+00c8}d\N{U+00e8} Yor\N{U+00f9}b\N{U+00e1}",
    native_name => "\N{U+00c8}d\N{U+00e8} Yor\N{U+00f9}b\N{U+00e1} Or\N{U+00ed}l\N{U+1eb9}\N{U+0301}\N{U+00e8}de N\N{U+00e0}\N{U+00ec}j\N{U+00ed}r\N{U+00ed}\N{U+00e0}",
    native_script => undef,
    native_territory => "Or\N{U+00ed}l\N{U+1eb9}\N{U+0301}\N{U+00e8}de N\N{U+00e0}\N{U+00ec}j\N{U+00ed}r\N{U+00ed}\N{U+00e0}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "K\N{U+1ecd}\N{U+0301}t\N{U+00e0} K\N{U+00ed}nn\N{U+00ed}",
      "K\N{U+1ecd}\N{U+0301}t\N{U+00e0} Kej\N{U+00ec}",
      "K\N{U+1ecd}\N{U+0301}\N{U+00e0} Keta",
      "K\N{U+1ecd}\N{U+0301}t\N{U+00e0} K\N{U+1eb9}rin"
    ],
    quarter_stand_alone_abbreviated => [
      "K1",
      "K2",
      "K3",
      "K4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "K\N{U+1ecd}\N{U+0301}t\N{U+00e0} K\N{U+00ed}nn\N{U+00ed}",
      "K\N{U+1ecd}\N{U+0301}t\N{U+00e0} Kej\N{U+00ec}",
      "K\N{U+1ecd}\N{U+0301}\N{U+00e0} Keta",
      "K\N{U+1ecd}\N{U+0301}t\N{U+00e0} K\N{U+1eb9}rin"
    ],
    script => undef,
    territory => "Nigeria",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ yue ]__
  {
    am_pm_abbreviated => [
      "\N{U+4e0a}\N{U+5348}",
      "\N{U+4e0b}\N{U+5348}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E ah:mm",
      Ehms => "E ah:mm:ss",
      Gy => "Gy\N{U+5e74}",
      GyMMM => "Gy\N{U+5e74}M\N{U+6708}",
      GyMMMEd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5} E",
      GyMMMd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      H => "H\N{U+6642}",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss [v]",
      Hmv => "HH:mm [v]",
      M => "M\N{U+6708}",
      MEd => "M/d\N{U+ff08}E\N{U+ff09}",
      MMM => "LLL",
      MMMEd => "M\N{U+6708}d\N{U+65e5} E",
      MMMMd => "M\N{U+6708}d\N{U+65e5}",
      MMMd => "M\N{U+6708}d\N{U+65e5}",
      MMdd => "MM/dd",
      Md => "M/d",
      d => "d\N{U+65e5}",
      h => "ah\N{U+6642}",
      hm => "ah:mm",
      hms => "ah:mm:ss",
      hmsv => "ah:mm:ss [v]",
      hmv => "ah:mm [v]",
      ms => "mm:ss",
      y => "y\N{U+5e74}",
      yM => "y/M",
      yMEd => "y/M/d\N{U+ff08}E\N{U+ff09}",
      yMM => "y/MM",
      yMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5} E",
      yMMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      yMd => "y/M/d",
      yQQQ => "y\N{U+5e74}QQQ",
      yQQQQ => "y\N{U+5e74}QQQQ"
    },
    code => "yue",
    date_format_full => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5} EEEE",
    date_format_long => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_medium => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_short => "y/M/d",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+9031}\N{U+4e00}",
      "\N{U+9031}\N{U+4e8c}",
      "\N{U+9031}\N{U+4e09}",
      "\N{U+9031}\N{U+56db}",
      "\N{U+9031}\N{U+4e94}",
      "\N{U+9031}\N{U+516d}",
      "\N{U+9031}\N{U+65e5}"
    ],
    day_format_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_format_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+9031}\N{U+4e00}",
      "\N{U+9031}\N{U+4e8c}",
      "\N{U+9031}\N{U+4e09}",
      "\N{U+9031}\N{U+56db}",
      "\N{U+9031}\N{U+4e94}",
      "\N{U+9031}\N{U+516d}",
      "\N{U+9031}\N{U+65e5}"
    ],
    day_stand_alone_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_stand_alone_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    era_abbreviated => [
      "\N{U+897f}\N{U+5143}\N{U+524d}",
      "\N{U+897f}\N{U+5143}"
    ],
    era_narrow => [
      "\N{U+897f}\N{U+5143}\N{U+524d}",
      "\N{U+897f}\N{U+5143}"
    ],
    era_wide => [
      "\N{U+897f}\N{U+5143}\N{U+524d}",
      "\N{U+897f}\N{U+5143}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Cantonese",
    month_format_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    name => "Cantonese",
    native_language => "\N{U+7cb5}\N{U+8a9e}",
    native_name => "\N{U+7cb5}\N{U+8a9e}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1\N{U+5b63}",
      "2\N{U+5b63}",
      "3\N{U+5b63}",
      "4\N{U+5b63}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+7b2c}1\N{U+5b63}",
      "\N{U+7b2c}2\N{U+5b63}",
      "\N{U+7b2c}3\N{U+5b63}",
      "\N{U+7b2c}4\N{U+5b63}"
    ],
    quarter_stand_alone_abbreviated => [
      "1\N{U+5b63}",
      "2\N{U+5b63}",
      "3\N{U+5b63}",
      "4\N{U+5b63}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+7b2c}1\N{U+5b63}",
      "\N{U+7b2c}2\N{U+5b63}",
      "\N{U+7b2c}3\N{U+5b63}",
      "\N{U+7b2c}4\N{U+5b63}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "ah:mm:ss [zzzz]",
    time_format_long => "ah:mm:ss [z]",
    time_format_medium => "ah:mm:ss",
    time_format_short => "ah:mm",
    variant => undef,
    version => 29
  }
  __[ yue-HK ]__
  {
    am_pm_abbreviated => [
      "\N{U+4e0a}\N{U+5348}",
      "\N{U+4e0b}\N{U+5348}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E ah:mm",
      Ehms => "E ah:mm:ss",
      Gy => "Gy\N{U+5e74}",
      GyMMM => "Gy\N{U+5e74}M\N{U+6708}",
      GyMMMEd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5} E",
      GyMMMd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      H => "H\N{U+6642}",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss [v]",
      Hmv => "HH:mm [v]",
      M => "M\N{U+6708}",
      MEd => "M/d\N{U+ff08}E\N{U+ff09}",
      MMM => "LLL",
      MMMEd => "M\N{U+6708}d\N{U+65e5} E",
      MMMMd => "M\N{U+6708}d\N{U+65e5}",
      MMMd => "M\N{U+6708}d\N{U+65e5}",
      MMdd => "MM/dd",
      Md => "M/d",
      d => "d\N{U+65e5}",
      h => "ah\N{U+6642}",
      hm => "ah:mm",
      hms => "ah:mm:ss",
      hmsv => "ah:mm:ss [v]",
      hmv => "ah:mm [v]",
      ms => "mm:ss",
      y => "y\N{U+5e74}",
      yM => "y/M",
      yMEd => "y/M/d\N{U+ff08}E\N{U+ff09}",
      yMM => "y/MM",
      yMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5} E",
      yMMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      yMd => "y/M/d",
      yQQQ => "y\N{U+5e74}QQQ",
      yQQQQ => "y\N{U+5e74}QQQQ"
    },
    code => "yue-HK",
    date_format_full => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5} EEEE",
    date_format_long => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_medium => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_short => "y/M/d",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+9031}\N{U+4e00}",
      "\N{U+9031}\N{U+4e8c}",
      "\N{U+9031}\N{U+4e09}",
      "\N{U+9031}\N{U+56db}",
      "\N{U+9031}\N{U+4e94}",
      "\N{U+9031}\N{U+516d}",
      "\N{U+9031}\N{U+65e5}"
    ],
    day_format_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_format_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+9031}\N{U+4e00}",
      "\N{U+9031}\N{U+4e8c}",
      "\N{U+9031}\N{U+4e09}",
      "\N{U+9031}\N{U+56db}",
      "\N{U+9031}\N{U+4e94}",
      "\N{U+9031}\N{U+516d}",
      "\N{U+9031}\N{U+65e5}"
    ],
    day_stand_alone_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_stand_alone_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    era_abbreviated => [
      "\N{U+897f}\N{U+5143}\N{U+524d}",
      "\N{U+897f}\N{U+5143}"
    ],
    era_narrow => [
      "\N{U+897f}\N{U+5143}\N{U+524d}",
      "\N{U+897f}\N{U+5143}"
    ],
    era_wide => [
      "\N{U+897f}\N{U+5143}\N{U+524d}",
      "\N{U+897f}\N{U+5143}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%Y\N{U+5e74} %b %e\N{U+65e5} %A %H:%M:%S %Z",
    glibc_date_format => "%Y\N{U+5e74}%m\N{U+6708}%d\N{U+65e5} %A",
    glibc_datetime_format => "%Y\N{U+5e74}%m\N{U+6708}%d\N{U+65e5} %A %H\N{U+9ede}%M\N{U+5206}%S\N{U+79d2}",
    glibc_time_12_format => "%p%I\N{U+9ede}%M\N{U+5206}%S\N{U+79d2}",
    glibc_time_format => "%H\N{U+9ede}%M\N{U+5206}%S\N{U+79d2}",
    language => "Cantonese",
    month_format_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    name => "Cantonese Hong Kong SAR China",
    native_language => "\N{U+7cb5}\N{U+8a9e}",
    native_name => "\N{U+7cb5}\N{U+8a9e} \N{U+4e2d}\N{U+83ef}\N{U+4eba}\N{U+6c11}\N{U+5171}\N{U+548c}\N{U+570b}\N{U+9999}\N{U+6e2f}\N{U+7279}\N{U+5225}\N{U+884c}\N{U+653f}\N{U+5340}",
    native_script => undef,
    native_territory => "\N{U+4e2d}\N{U+83ef}\N{U+4eba}\N{U+6c11}\N{U+5171}\N{U+548c}\N{U+570b}\N{U+9999}\N{U+6e2f}\N{U+7279}\N{U+5225}\N{U+884c}\N{U+653f}\N{U+5340}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1\N{U+5b63}",
      "2\N{U+5b63}",
      "3\N{U+5b63}",
      "4\N{U+5b63}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+7b2c}1\N{U+5b63}",
      "\N{U+7b2c}2\N{U+5b63}",
      "\N{U+7b2c}3\N{U+5b63}",
      "\N{U+7b2c}4\N{U+5b63}"
    ],
    quarter_stand_alone_abbreviated => [
      "1\N{U+5b63}",
      "2\N{U+5b63}",
      "3\N{U+5b63}",
      "4\N{U+5b63}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+7b2c}1\N{U+5b63}",
      "\N{U+7b2c}2\N{U+5b63}",
      "\N{U+7b2c}3\N{U+5b63}",
      "\N{U+7b2c}4\N{U+5b63}"
    ],
    script => undef,
    territory => "Hong Kong SAR China",
    time_format_full => "ah:mm:ss [zzzz]",
    time_format_long => "ah:mm:ss [z]",
    time_format_medium => "ah:mm:ss",
    time_format_short => "ah:mm",
    variant => undef,
    version => 29
  }
  __[ zgh ]__
  {
    am_pm_abbreviated => [
      "\N{U+2d5c}\N{U+2d49}\N{U+2d3c}\N{U+2d30}\N{U+2d61}\N{U+2d5c}",
      "\N{U+2d5c}\N{U+2d30}\N{U+2d37}\N{U+2d33}\N{U+2d33}\N{U+2d6f}\N{U+2d30}\N{U+2d5c}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "zgh",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4e}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4e}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}\N{U+2d62}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}\N{U+2d4e}\N{U+2d30}\N{U+2d59}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4e}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4e}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}\N{U+2d62}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}\N{U+2d4e}\N{U+2d30}\N{U+2d59}"
    ],
    era_abbreviated => [
      "\N{U+2d37}\N{U+2d30}\N{U+2d44}",
      "\N{U+2d37}\N{U+2d3c}\N{U+2d44}"
    ],
    era_narrow => [
      "\N{U+2d37}\N{U+2d30}\N{U+2d44}",
      "\N{U+2d37}\N{U+2d3c}\N{U+2d44}"
    ],
    era_wide => [
      "\N{U+2d37}\N{U+2d30}\N{U+2d5c} \N{U+2d4f} \N{U+2d44}\N{U+2d49}\N{U+2d59}\N{U+2d30}",
      "\N{U+2d37}\N{U+2d3c}\N{U+2d3c}\N{U+2d49}\N{U+2d54} \N{U+2d4f} \N{U+2d44}\N{U+2d49}\N{U+2d59}\N{U+2d30}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Standard Moroccan Tamazight",
    month_format_abbreviated => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}"
    ],
    month_format_narrow => [
      "\N{U+2d49}",
      "\N{U+2d31}",
      "\N{U+2d4e}",
      "\N{U+2d49}",
      "\N{U+2d4e}",
      "\N{U+2d62}",
      "\N{U+2d62}",
      "\N{U+2d56}",
      "\N{U+2d5b}",
      "\N{U+2d3d}",
      "\N{U+2d4f}",
      "\N{U+2d37}"
    ],
    month_format_wide => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}\N{U+2d30}\N{U+2d62}\N{U+2d54}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}\N{U+2d62}\N{U+2d55}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}\N{U+2d5a}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}\N{U+2d62}\N{U+2d53}\N{U+2d63}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}\N{U+2d5c}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}"
    ],
    month_stand_alone_narrow => [
      "\N{U+2d49}",
      "\N{U+2d31}",
      "\N{U+2d4e}",
      "\N{U+2d49}",
      "\N{U+2d4e}",
      "\N{U+2d62}",
      "\N{U+2d62}",
      "\N{U+2d56}",
      "\N{U+2d5b}",
      "\N{U+2d3d}",
      "\N{U+2d4f}",
      "\N{U+2d37}"
    ],
    month_stand_alone_wide => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}\N{U+2d30}\N{U+2d62}\N{U+2d54}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}\N{U+2d62}\N{U+2d55}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}\N{U+2d5a}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}\N{U+2d62}\N{U+2d53}\N{U+2d63}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}\N{U+2d5c}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}"
    ],
    name => "Standard Moroccan Tamazight",
    native_language => "\N{U+2d5c}\N{U+2d30}\N{U+2d4e}\N{U+2d30}\N{U+2d63}\N{U+2d49}\N{U+2d56}\N{U+2d5c}",
    native_name => "\N{U+2d5c}\N{U+2d30}\N{U+2d4e}\N{U+2d30}\N{U+2d63}\N{U+2d49}\N{U+2d56}\N{U+2d5c}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+2d30}\N{U+2d3d} 1",
      "\N{U+2d30}\N{U+2d3d} 2",
      "\N{U+2d30}\N{U+2d3d} 3",
      "\N{U+2d30}\N{U+2d3d} 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 1",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 2",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 3",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+2d30}\N{U+2d3d} 1",
      "\N{U+2d30}\N{U+2d3d} 2",
      "\N{U+2d30}\N{U+2d3d} 3",
      "\N{U+2d30}\N{U+2d3d} 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 1",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 2",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 3",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ zgh-MA ]__
  {
    am_pm_abbreviated => [
      "\N{U+2d5c}\N{U+2d49}\N{U+2d3c}\N{U+2d30}\N{U+2d61}\N{U+2d5c}",
      "\N{U+2d5c}\N{U+2d30}\N{U+2d37}\N{U+2d33}\N{U+2d33}\N{U+2d6f}\N{U+2d30}\N{U+2d5c}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d, E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "M",
      MEd => "MM-dd, E",
      MMM => "MMM",
      MMMEd => "E d MMM",
      MMMMd => "MMMM d",
      MMMd => "d MMM",
      Md => "d/M",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "m:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E d/M/y",
      yMMM => "MMM y",
      yMMMEd => "E d MMM y",
      yMMMM => "y MMMM",
      yMMMd => "y MMM d",
      yMd => "y-MM-dd",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "zgh-MA",
    date_format_full => "EEEE d MMMM y",
    date_format_long => "d MMMM y",
    date_format_medium => "d MMM, y",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4e}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}"
    ],
    day_format_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_format_wide => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4e}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}\N{U+2d62}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}\N{U+2d4e}\N{U+2d30}\N{U+2d59}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4e}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}"
    ],
    day_stand_alone_narrow => [
      "M",
      "T",
      "W",
      "T",
      "F",
      "S",
      "S"
    ],
    day_stand_alone_wide => [
      "\N{U+2d30}\N{U+2d62}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4f}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d4e}\N{U+2d61}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d49}\N{U+2d39}\N{U+2d62}\N{U+2d30}\N{U+2d59}",
      "\N{U+2d30}\N{U+2d59}\N{U+2d30}\N{U+2d4e}\N{U+2d30}\N{U+2d59}"
    ],
    era_abbreviated => [
      "\N{U+2d37}\N{U+2d30}\N{U+2d44}",
      "\N{U+2d37}\N{U+2d3c}\N{U+2d44}"
    ],
    era_narrow => [
      "\N{U+2d37}\N{U+2d30}\N{U+2d44}",
      "\N{U+2d37}\N{U+2d3c}\N{U+2d44}"
    ],
    era_wide => [
      "\N{U+2d37}\N{U+2d30}\N{U+2d5c} \N{U+2d4f} \N{U+2d44}\N{U+2d49}\N{U+2d59}\N{U+2d30}",
      "\N{U+2d37}\N{U+2d3c}\N{U+2d3c}\N{U+2d49}\N{U+2d54} \N{U+2d4f} \N{U+2d44}\N{U+2d49}\N{U+2d59}\N{U+2d30}"
    ],
    first_day_of_week => 6,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Standard Moroccan Tamazight",
    month_format_abbreviated => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}"
    ],
    month_format_narrow => [
      "\N{U+2d49}",
      "\N{U+2d31}",
      "\N{U+2d4e}",
      "\N{U+2d49}",
      "\N{U+2d4e}",
      "\N{U+2d62}",
      "\N{U+2d62}",
      "\N{U+2d56}",
      "\N{U+2d5b}",
      "\N{U+2d3d}",
      "\N{U+2d4f}",
      "\N{U+2d37}"
    ],
    month_format_wide => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}\N{U+2d30}\N{U+2d62}\N{U+2d54}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}\N{U+2d62}\N{U+2d55}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}\N{U+2d5a}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}\N{U+2d62}\N{U+2d53}\N{U+2d63}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}\N{U+2d5c}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}"
    ],
    month_stand_alone_abbreviated => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}"
    ],
    month_stand_alone_narrow => [
      "\N{U+2d49}",
      "\N{U+2d31}",
      "\N{U+2d4e}",
      "\N{U+2d49}",
      "\N{U+2d4e}",
      "\N{U+2d62}",
      "\N{U+2d62}",
      "\N{U+2d56}",
      "\N{U+2d5b}",
      "\N{U+2d3d}",
      "\N{U+2d4f}",
      "\N{U+2d37}"
    ],
    month_stand_alone_wide => [
      "\N{U+2d49}\N{U+2d4f}\N{U+2d4f}\N{U+2d30}\N{U+2d62}\N{U+2d54}",
      "\N{U+2d31}\N{U+2d55}\N{U+2d30}\N{U+2d62}\N{U+2d55}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d55}\N{U+2d5a}",
      "\N{U+2d49}\N{U+2d31}\N{U+2d54}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d4e}\N{U+2d30}\N{U+2d62}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4f}\N{U+2d62}\N{U+2d53}",
      "\N{U+2d62}\N{U+2d53}\N{U+2d4d}\N{U+2d62}\N{U+2d53}\N{U+2d63}",
      "\N{U+2d56}\N{U+2d53}\N{U+2d5b}\N{U+2d5c}",
      "\N{U+2d5b}\N{U+2d53}\N{U+2d5c}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d3d}\N{U+2d5c}\N{U+2d53}\N{U+2d31}\N{U+2d54}",
      "\N{U+2d4f}\N{U+2d53}\N{U+2d61}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}",
      "\N{U+2d37}\N{U+2d53}\N{U+2d4a}\N{U+2d30}\N{U+2d4f}\N{U+2d31}\N{U+2d49}\N{U+2d54}"
    ],
    name => "Standard Moroccan Tamazight Morocco",
    native_language => "\N{U+2d5c}\N{U+2d30}\N{U+2d4e}\N{U+2d30}\N{U+2d63}\N{U+2d49}\N{U+2d56}\N{U+2d5c}",
    native_name => "\N{U+2d5c}\N{U+2d30}\N{U+2d4e}\N{U+2d30}\N{U+2d63}\N{U+2d49}\N{U+2d56}\N{U+2d5c} \N{U+2d4d}\N{U+2d4e}\N{U+2d56}\N{U+2d54}\N{U+2d49}\N{U+2d31}",
    native_script => undef,
    native_territory => "\N{U+2d4d}\N{U+2d4e}\N{U+2d56}\N{U+2d54}\N{U+2d49}\N{U+2d31}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "\N{U+2d30}\N{U+2d3d} 1",
      "\N{U+2d30}\N{U+2d3d} 2",
      "\N{U+2d30}\N{U+2d3d} 3",
      "\N{U+2d30}\N{U+2d3d} 4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 1",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 2",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 3",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 4"
    ],
    quarter_stand_alone_abbreviated => [
      "\N{U+2d30}\N{U+2d3d} 1",
      "\N{U+2d30}\N{U+2d3d} 2",
      "\N{U+2d30}\N{U+2d3d} 3",
      "\N{U+2d30}\N{U+2d3d} 4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 1",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 2",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 3",
      "\N{U+2d30}\N{U+2d3d}\N{U+2d55}\N{U+2d30}\N{U+2d39}\N{U+2d62}\N{U+2d53}\N{U+2d54} 4"
    ],
    script => undef,
    territory => "Morocco",
    time_format_full => "HH:mm:ss zzzz",
    time_format_long => "HH:mm:ss z",
    time_format_medium => "HH:mm:ss",
    time_format_short => "HH:mm",
    variant => undef,
    version => 29
  }
  __[ zh ]__
  {
    am_pm_abbreviated => [
      "\N{U+4e0a}\N{U+5348}",
      "\N{U+4e0b}\N{U+5348}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "EHH:mm",
      EHms => "EHH:mm:ss",
      Ed => "d\N{U+65e5}E",
      Ehm => "E ah:mm",
      Ehms => "E ah:mm:ss",
      Gy => "Gy\N{U+5e74}",
      GyMMM => "Gy\N{U+5e74}M\N{U+6708}",
      GyMMMEd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}E",
      GyMMMd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      H => "H\N{U+65f6}",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "v HH:mm:ss",
      Hmv => "v HH:mm",
      M => "M\N{U+6708}",
      MEd => "M/dE",
      MMM => "LLL",
      MMMEd => "M\N{U+6708}d\N{U+65e5}E",
      MMMMd => "M\N{U+6708}d\N{U+65e5}",
      MMMd => "M\N{U+6708}d\N{U+65e5}",
      MMdd => "MM/dd",
      Md => "M/d",
      d => "d\N{U+65e5}",
      h => "ah\N{U+65f6}",
      hm => "ah:mm",
      hms => "ah:mm:ss",
      hmsv => "v ah:mm:ss",
      hmv => "v ah:mm",
      ms => "mm:ss",
      y => "y\N{U+5e74}",
      yM => "y\N{U+5e74}M\N{U+6708}",
      yMEd => "y/M/dE",
      yMM => "y\N{U+5e74}M\N{U+6708}",
      yMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}E",
      yMMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      yMd => "y/M/d",
      yQQQ => "y\N{U+5e74}\N{U+7b2c}Q\N{U+5b63}\N{U+5ea6}",
      yQQQQ => "y\N{U+5e74}\N{U+7b2c}Q\N{U+5b63}\N{U+5ea6}"
    },
    code => "zh",
    date_format_full => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}EEEE",
    date_format_long => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_medium => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_short => "y/M/d",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+5468}\N{U+4e00}",
      "\N{U+5468}\N{U+4e8c}",
      "\N{U+5468}\N{U+4e09}",
      "\N{U+5468}\N{U+56db}",
      "\N{U+5468}\N{U+4e94}",
      "\N{U+5468}\N{U+516d}",
      "\N{U+5468}\N{U+65e5}"
    ],
    day_format_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_format_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+5468}\N{U+4e00}",
      "\N{U+5468}\N{U+4e8c}",
      "\N{U+5468}\N{U+4e09}",
      "\N{U+5468}\N{U+56db}",
      "\N{U+5468}\N{U+4e94}",
      "\N{U+5468}\N{U+516d}",
      "\N{U+5468}\N{U+65e5}"
    ],
    day_stand_alone_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_stand_alone_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    era_abbreviated => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    era_narrow => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    era_wide => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Chinese",
    month_format_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+4e00}\N{U+6708}",
      "\N{U+4e8c}\N{U+6708}",
      "\N{U+4e09}\N{U+6708}",
      "\N{U+56db}\N{U+6708}",
      "\N{U+4e94}\N{U+6708}",
      "\N{U+516d}\N{U+6708}",
      "\N{U+4e03}\N{U+6708}",
      "\N{U+516b}\N{U+6708}",
      "\N{U+4e5d}\N{U+6708}",
      "\N{U+5341}\N{U+6708}",
      "\N{U+5341}\N{U+4e00}\N{U+6708}",
      "\N{U+5341}\N{U+4e8c}\N{U+6708}"
    ],
    month_stand_alone_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+4e00}\N{U+6708}",
      "\N{U+4e8c}\N{U+6708}",
      "\N{U+4e09}\N{U+6708}",
      "\N{U+56db}\N{U+6708}",
      "\N{U+4e94}\N{U+6708}",
      "\N{U+516d}\N{U+6708}",
      "\N{U+4e03}\N{U+6708}",
      "\N{U+516b}\N{U+6708}",
      "\N{U+4e5d}\N{U+6708}",
      "\N{U+5341}\N{U+6708}",
      "\N{U+5341}\N{U+4e00}\N{U+6708}",
      "\N{U+5341}\N{U+4e8c}\N{U+6708}"
    ],
    name => "Chinese",
    native_language => "\N{U+4e2d}\N{U+6587}",
    native_name => "\N{U+4e2d}\N{U+6587}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1\N{U+5b63}\N{U+5ea6}",
      "2\N{U+5b63}\N{U+5ea6}",
      "3\N{U+5b63}\N{U+5ea6}",
      "4\N{U+5b63}\N{U+5ea6}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+7b2c}\N{U+4e00}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e8c}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e09}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+56db}\N{U+5b63}\N{U+5ea6}"
    ],
    quarter_stand_alone_abbreviated => [
      "1\N{U+5b63}\N{U+5ea6}",
      "2\N{U+5b63}\N{U+5ea6}",
      "3\N{U+5b63}\N{U+5ea6}",
      "4\N{U+5b63}\N{U+5ea6}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+7b2c}\N{U+4e00}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e8c}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e09}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+56db}\N{U+5b63}\N{U+5ea6}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "zzzz ah:mm:ss",
    time_format_long => "z ah:mm:ss",
    time_format_medium => "ah:mm:ss",
    time_format_short => "ah:mm",
    variant => undef,
    version => 29
  }
  __[ zh-Hans ]__
  {
    am_pm_abbreviated => [
      "\N{U+4e0a}\N{U+5348}",
      "\N{U+4e0b}\N{U+5348}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "EHH:mm",
      EHms => "EHH:mm:ss",
      Ed => "d\N{U+65e5}E",
      Ehm => "E ah:mm",
      Ehms => "E ah:mm:ss",
      Gy => "Gy\N{U+5e74}",
      GyMMM => "Gy\N{U+5e74}M\N{U+6708}",
      GyMMMEd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}E",
      GyMMMd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      H => "H\N{U+65f6}",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "v HH:mm:ss",
      Hmv => "v HH:mm",
      M => "M\N{U+6708}",
      MEd => "M/dE",
      MMM => "LLL",
      MMMEd => "M\N{U+6708}d\N{U+65e5}E",
      MMMMd => "M\N{U+6708}d\N{U+65e5}",
      MMMd => "M\N{U+6708}d\N{U+65e5}",
      MMdd => "MM/dd",
      Md => "M/d",
      d => "d\N{U+65e5}",
      h => "ah\N{U+65f6}",
      hm => "ah:mm",
      hms => "ah:mm:ss",
      hmsv => "v ah:mm:ss",
      hmv => "v ah:mm",
      ms => "mm:ss",
      y => "y\N{U+5e74}",
      yM => "y\N{U+5e74}M\N{U+6708}",
      yMEd => "y/M/dE",
      yMM => "y\N{U+5e74}M\N{U+6708}",
      yMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}E",
      yMMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      yMd => "y/M/d",
      yQQQ => "y\N{U+5e74}\N{U+7b2c}Q\N{U+5b63}\N{U+5ea6}",
      yQQQQ => "y\N{U+5e74}\N{U+7b2c}Q\N{U+5b63}\N{U+5ea6}"
    },
    code => "zh-Hans",
    date_format_full => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}EEEE",
    date_format_long => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_medium => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_short => "y/M/d",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+5468}\N{U+4e00}",
      "\N{U+5468}\N{U+4e8c}",
      "\N{U+5468}\N{U+4e09}",
      "\N{U+5468}\N{U+56db}",
      "\N{U+5468}\N{U+4e94}",
      "\N{U+5468}\N{U+516d}",
      "\N{U+5468}\N{U+65e5}"
    ],
    day_format_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_format_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+5468}\N{U+4e00}",
      "\N{U+5468}\N{U+4e8c}",
      "\N{U+5468}\N{U+4e09}",
      "\N{U+5468}\N{U+56db}",
      "\N{U+5468}\N{U+4e94}",
      "\N{U+5468}\N{U+516d}",
      "\N{U+5468}\N{U+65e5}"
    ],
    day_stand_alone_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_stand_alone_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    era_abbreviated => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    era_narrow => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    era_wide => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Chinese",
    month_format_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+4e00}\N{U+6708}",
      "\N{U+4e8c}\N{U+6708}",
      "\N{U+4e09}\N{U+6708}",
      "\N{U+56db}\N{U+6708}",
      "\N{U+4e94}\N{U+6708}",
      "\N{U+516d}\N{U+6708}",
      "\N{U+4e03}\N{U+6708}",
      "\N{U+516b}\N{U+6708}",
      "\N{U+4e5d}\N{U+6708}",
      "\N{U+5341}\N{U+6708}",
      "\N{U+5341}\N{U+4e00}\N{U+6708}",
      "\N{U+5341}\N{U+4e8c}\N{U+6708}"
    ],
    month_stand_alone_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+4e00}\N{U+6708}",
      "\N{U+4e8c}\N{U+6708}",
      "\N{U+4e09}\N{U+6708}",
      "\N{U+56db}\N{U+6708}",
      "\N{U+4e94}\N{U+6708}",
      "\N{U+516d}\N{U+6708}",
      "\N{U+4e03}\N{U+6708}",
      "\N{U+516b}\N{U+6708}",
      "\N{U+4e5d}\N{U+6708}",
      "\N{U+5341}\N{U+6708}",
      "\N{U+5341}\N{U+4e00}\N{U+6708}",
      "\N{U+5341}\N{U+4e8c}\N{U+6708}"
    ],
    name => "Chinese",
    native_language => "\N{U+4e2d}\N{U+6587}",
    native_name => "\N{U+4e2d}\N{U+6587}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1\N{U+5b63}\N{U+5ea6}",
      "2\N{U+5b63}\N{U+5ea6}",
      "3\N{U+5b63}\N{U+5ea6}",
      "4\N{U+5b63}\N{U+5ea6}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+7b2c}\N{U+4e00}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e8c}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e09}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+56db}\N{U+5b63}\N{U+5ea6}"
    ],
    quarter_stand_alone_abbreviated => [
      "1\N{U+5b63}\N{U+5ea6}",
      "2\N{U+5b63}\N{U+5ea6}",
      "3\N{U+5b63}\N{U+5ea6}",
      "4\N{U+5b63}\N{U+5ea6}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+7b2c}\N{U+4e00}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e8c}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e09}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+56db}\N{U+5b63}\N{U+5ea6}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "zzzz ah:mm:ss",
    time_format_long => "z ah:mm:ss",
    time_format_medium => "ah:mm:ss",
    time_format_short => "ah:mm",
    variant => undef,
    version => 29
  }
  __[ zh-Hans-HK ]__
  {
    am_pm_abbreviated => [
      "\N{U+4e0a}\N{U+5348}",
      "\N{U+4e0b}\N{U+5348}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "EHH:mm",
      EHms => "EHH:mm:ss",
      Ed => "d\N{U+65e5}E",
      Ehm => "E ah:mm",
      Ehms => "E ah:mm:ss",
      Gy => "Gy\N{U+5e74}",
      GyMMM => "Gy\N{U+5e74}M\N{U+6708}",
      GyMMMEd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}E",
      GyMMMd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      H => "H\N{U+65f6}",
      HHmm => "HH:mm",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "v HH:mm:ss",
      Hmv => "v HH:mm",
      M => "M\N{U+6708}",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "M\N{U+6708}d\N{U+65e5}E",
      MMMMd => "M\N{U+6708}d\N{U+65e5}",
      MMMMdd => "M\N{U+6708}d\N{U+65e5}",
      MMMd => "M\N{U+6708}d\N{U+65e5}",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d\N{U+65e5}",
      h => "ah\N{U+65f6}",
      hm => "ah:mm",
      hms => "ah:mm:ss",
      hmsv => "v ah:mm:ss",
      hmv => "v ah:mm",
      ms => "mm:ss",
      y => "y\N{U+5e74}",
      yM => "M/y",
      yMEd => "d/M/y\N{U+ff08}E\N{U+ff09}",
      yMM => "MM/y",
      yMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}E",
      yMMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      yMd => "d/M/y",
      yQQQ => "y\N{U+5e74}\N{U+7b2c}Q\N{U+5b63}\N{U+5ea6}",
      yQQQQ => "y\N{U+5e74}\N{U+7b2c}Q\N{U+5b63}\N{U+5ea6}"
    },
    code => "zh-Hans-HK",
    date_format_full => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}EEEE",
    date_format_long => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_medium => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+5468}\N{U+4e00}",
      "\N{U+5468}\N{U+4e8c}",
      "\N{U+5468}\N{U+4e09}",
      "\N{U+5468}\N{U+56db}",
      "\N{U+5468}\N{U+4e94}",
      "\N{U+5468}\N{U+516d}",
      "\N{U+5468}\N{U+65e5}"
    ],
    day_format_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_format_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+5468}\N{U+4e00}",
      "\N{U+5468}\N{U+4e8c}",
      "\N{U+5468}\N{U+4e09}",
      "\N{U+5468}\N{U+56db}",
      "\N{U+5468}\N{U+4e94}",
      "\N{U+5468}\N{U+516d}",
      "\N{U+5468}\N{U+65e5}"
    ],
    day_stand_alone_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_stand_alone_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    era_abbreviated => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    era_narrow => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    era_wide => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Chinese",
    month_format_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+4e00}\N{U+6708}",
      "\N{U+4e8c}\N{U+6708}",
      "\N{U+4e09}\N{U+6708}",
      "\N{U+56db}\N{U+6708}",
      "\N{U+4e94}\N{U+6708}",
      "\N{U+516d}\N{U+6708}",
      "\N{U+4e03}\N{U+6708}",
      "\N{U+516b}\N{U+6708}",
      "\N{U+4e5d}\N{U+6708}",
      "\N{U+5341}\N{U+6708}",
      "\N{U+5341}\N{U+4e00}\N{U+6708}",
      "\N{U+5341}\N{U+4e8c}\N{U+6708}"
    ],
    month_stand_alone_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+4e00}\N{U+6708}",
      "\N{U+4e8c}\N{U+6708}",
      "\N{U+4e09}\N{U+6708}",
      "\N{U+56db}\N{U+6708}",
      "\N{U+4e94}\N{U+6708}",
      "\N{U+516d}\N{U+6708}",
      "\N{U+4e03}\N{U+6708}",
      "\N{U+516b}\N{U+6708}",
      "\N{U+4e5d}\N{U+6708}",
      "\N{U+5341}\N{U+6708}",
      "\N{U+5341}\N{U+4e00}\N{U+6708}",
      "\N{U+5341}\N{U+4e8c}\N{U+6708}"
    ],
    name => "Chinese Hong Kong SAR China Simplified",
    native_language => "\N{U+4e2d}\N{U+6587}",
    native_name => "\N{U+4e2d}\N{U+6587} \N{U+4e2d}\N{U+56fd}\N{U+9999}\N{U+6e2f}\N{U+7279}\N{U+522b}\N{U+884c}\N{U+653f}\N{U+533a} \N{U+7b80}\N{U+4f53}",
    native_script => "\N{U+7b80}\N{U+4f53}",
    native_territory => "\N{U+4e2d}\N{U+56fd}\N{U+9999}\N{U+6e2f}\N{U+7279}\N{U+522b}\N{U+884c}\N{U+653f}\N{U+533a}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1\N{U+5b63}\N{U+5ea6}",
      "2\N{U+5b63}\N{U+5ea6}",
      "3\N{U+5b63}\N{U+5ea6}",
      "4\N{U+5b63}\N{U+5ea6}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+7b2c}\N{U+4e00}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e8c}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e09}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+56db}\N{U+5b63}\N{U+5ea6}"
    ],
    quarter_stand_alone_abbreviated => [
      "1\N{U+5b63}\N{U+5ea6}",
      "2\N{U+5b63}\N{U+5ea6}",
      "3\N{U+5b63}\N{U+5ea6}",
      "4\N{U+5b63}\N{U+5ea6}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+7b2c}\N{U+4e00}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e8c}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e09}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+56db}\N{U+5b63}\N{U+5ea6}"
    ],
    script => "Simplified",
    territory => "Hong Kong SAR China",
    time_format_full => "zzzz ah:mm:ss",
    time_format_long => "z ah:mm:ss",
    time_format_medium => "ah:mm:ss",
    time_format_short => "ah:mm",
    variant => undef,
    version => 29
  }
  __[ zh-Hans-MO ]__
  {
    am_pm_abbreviated => [
      "\N{U+4e0a}\N{U+5348}",
      "\N{U+4e0b}\N{U+5348}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "EHH:mm",
      EHms => "EHH:mm:ss",
      Ed => "d\N{U+65e5}E",
      Ehm => "E ah:mm",
      Ehms => "E ah:mm:ss",
      Gy => "Gy\N{U+5e74}",
      GyMMM => "Gy\N{U+5e74}M\N{U+6708}",
      GyMMMEd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}E",
      GyMMMd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      H => "H\N{U+65f6}",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "v HH:mm:ss",
      Hmv => "v HH:mm",
      M => "M\N{U+6708}",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "M\N{U+6708}d\N{U+65e5}E",
      MMMMd => "M\N{U+6708}d\N{U+65e5}",
      MMMMdd => "M\N{U+6708}d\N{U+65e5}",
      MMMd => "M\N{U+6708}d\N{U+65e5}",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d\N{U+65e5}",
      h => "ah\N{U+65f6}",
      hm => "ah:mm",
      hms => "ah:mm:ss",
      hmsv => "v ah:mm:ss",
      hmv => "v ah:mm",
      ms => "mm:ss",
      y => "y\N{U+5e74}",
      yM => "y\N{U+5e74}M\N{U+6708}",
      yMEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}\N{U+ff0c}E",
      yMM => "y\N{U+5e74}M\N{U+6708}",
      yMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}E",
      yMMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      yMd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      yQQQ => "y\N{U+5e74}\N{U+7b2c}Q\N{U+5b63}\N{U+5ea6}",
      yQQQQ => "y\N{U+5e74}\N{U+7b2c}Q\N{U+5b63}\N{U+5ea6}"
    },
    code => "zh-Hans-MO",
    date_format_full => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}EEEE",
    date_format_long => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_medium => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_short => "d/M/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+5468}\N{U+4e00}",
      "\N{U+5468}\N{U+4e8c}",
      "\N{U+5468}\N{U+4e09}",
      "\N{U+5468}\N{U+56db}",
      "\N{U+5468}\N{U+4e94}",
      "\N{U+5468}\N{U+516d}",
      "\N{U+5468}\N{U+65e5}"
    ],
    day_format_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_format_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+5468}\N{U+4e00}",
      "\N{U+5468}\N{U+4e8c}",
      "\N{U+5468}\N{U+4e09}",
      "\N{U+5468}\N{U+56db}",
      "\N{U+5468}\N{U+4e94}",
      "\N{U+5468}\N{U+516d}",
      "\N{U+5468}\N{U+65e5}"
    ],
    day_stand_alone_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_stand_alone_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    era_abbreviated => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    era_narrow => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    era_wide => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Chinese",
    month_format_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+4e00}\N{U+6708}",
      "\N{U+4e8c}\N{U+6708}",
      "\N{U+4e09}\N{U+6708}",
      "\N{U+56db}\N{U+6708}",
      "\N{U+4e94}\N{U+6708}",
      "\N{U+516d}\N{U+6708}",
      "\N{U+4e03}\N{U+6708}",
      "\N{U+516b}\N{U+6708}",
      "\N{U+4e5d}\N{U+6708}",
      "\N{U+5341}\N{U+6708}",
      "\N{U+5341}\N{U+4e00}\N{U+6708}",
      "\N{U+5341}\N{U+4e8c}\N{U+6708}"
    ],
    month_stand_alone_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+4e00}\N{U+6708}",
      "\N{U+4e8c}\N{U+6708}",
      "\N{U+4e09}\N{U+6708}",
      "\N{U+56db}\N{U+6708}",
      "\N{U+4e94}\N{U+6708}",
      "\N{U+516d}\N{U+6708}",
      "\N{U+4e03}\N{U+6708}",
      "\N{U+516b}\N{U+6708}",
      "\N{U+4e5d}\N{U+6708}",
      "\N{U+5341}\N{U+6708}",
      "\N{U+5341}\N{U+4e00}\N{U+6708}",
      "\N{U+5341}\N{U+4e8c}\N{U+6708}"
    ],
    name => "Chinese Macau SAR China Simplified",
    native_language => "\N{U+4e2d}\N{U+6587}",
    native_name => "\N{U+4e2d}\N{U+6587} \N{U+4e2d}\N{U+56fd}\N{U+6fb3}\N{U+95e8}\N{U+7279}\N{U+522b}\N{U+884c}\N{U+653f}\N{U+533a} \N{U+7b80}\N{U+4f53}",
    native_script => "\N{U+7b80}\N{U+4f53}",
    native_territory => "\N{U+4e2d}\N{U+56fd}\N{U+6fb3}\N{U+95e8}\N{U+7279}\N{U+522b}\N{U+884c}\N{U+653f}\N{U+533a}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1\N{U+5b63}\N{U+5ea6}",
      "2\N{U+5b63}\N{U+5ea6}",
      "3\N{U+5b63}\N{U+5ea6}",
      "4\N{U+5b63}\N{U+5ea6}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+7b2c}\N{U+4e00}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e8c}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e09}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+56db}\N{U+5b63}\N{U+5ea6}"
    ],
    quarter_stand_alone_abbreviated => [
      "1\N{U+5b63}\N{U+5ea6}",
      "2\N{U+5b63}\N{U+5ea6}",
      "3\N{U+5b63}\N{U+5ea6}",
      "4\N{U+5b63}\N{U+5ea6}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+7b2c}\N{U+4e00}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e8c}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e09}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+56db}\N{U+5b63}\N{U+5ea6}"
    ],
    script => "Simplified",
    territory => "Macau SAR China",
    time_format_full => "zzzz ah:mm:ss",
    time_format_long => "z ah:mm:ss",
    time_format_medium => "ah:mm:ss",
    time_format_short => "ah:mm",
    variant => undef,
    version => 29
  }
  __[ zh-Hans-SG ]__
  {
    am_pm_abbreviated => [
      "\N{U+4e0a}\N{U+5348}",
      "\N{U+4e0b}\N{U+5348}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "EHH:mm",
      EHms => "EHH:mm:ss",
      Ed => "d\N{U+65e5}E",
      Ehm => "E ah:mm",
      Ehms => "E ah:mm:ss",
      Gy => "Gy\N{U+5e74}",
      GyMMM => "Gy\N{U+5e74}M\N{U+6708}",
      GyMMMEd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}E",
      GyMMMd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      H => "H\N{U+65f6}",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "v HH:mm:ss",
      Hmv => "v HH:mm",
      M => "M\N{U+6708}",
      MEd => "M-dE",
      MMM => "M\N{U+6708}",
      MMMEd => "M\N{U+6708}d\N{U+65e5}E",
      MMMMd => "M\N{U+6708}d\N{U+65e5}",
      MMMMdd => "M\N{U+6708}d\N{U+65e5}",
      MMMd => "M\N{U+6708}d\N{U+65e5}",
      MMdd => "MM-dd",
      Md => "M-d",
      d => "d\N{U+65e5}",
      h => "ah\N{U+65f6}",
      hm => "ah:mm",
      hms => "ah:mm:ss",
      hmsv => "v ah:mm:ss",
      hmv => "v ah:mm",
      ms => "mm:ss",
      y => "y\N{U+5e74}",
      yM => "y\N{U+5e74}M\N{U+6708}",
      yMEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}\N{U+ff0c}E",
      yMM => "y\N{U+5e74}M\N{U+6708}",
      yMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}E",
      yMMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      yMd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      yQQQ => "y\N{U+5e74}\N{U+7b2c}Q\N{U+5b63}\N{U+5ea6}",
      yQQQQ => "y\N{U+5e74}\N{U+7b2c}Q\N{U+5b63}\N{U+5ea6}"
    },
    code => "zh-Hans-SG",
    date_format_full => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}EEEE",
    date_format_long => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_medium => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_short => "dd/MM/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+5468}\N{U+4e00}",
      "\N{U+5468}\N{U+4e8c}",
      "\N{U+5468}\N{U+4e09}",
      "\N{U+5468}\N{U+56db}",
      "\N{U+5468}\N{U+4e94}",
      "\N{U+5468}\N{U+516d}",
      "\N{U+5468}\N{U+65e5}"
    ],
    day_format_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_format_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+5468}\N{U+4e00}",
      "\N{U+5468}\N{U+4e8c}",
      "\N{U+5468}\N{U+4e09}",
      "\N{U+5468}\N{U+56db}",
      "\N{U+5468}\N{U+4e94}",
      "\N{U+5468}\N{U+516d}",
      "\N{U+5468}\N{U+65e5}"
    ],
    day_stand_alone_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_stand_alone_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    era_abbreviated => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    era_narrow => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    era_wide => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Chinese",
    month_format_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "\N{U+4e00}\N{U+6708}",
      "\N{U+4e8c}\N{U+6708}",
      "\N{U+4e09}\N{U+6708}",
      "\N{U+56db}\N{U+6708}",
      "\N{U+4e94}\N{U+6708}",
      "\N{U+516d}\N{U+6708}",
      "\N{U+4e03}\N{U+6708}",
      "\N{U+516b}\N{U+6708}",
      "\N{U+4e5d}\N{U+6708}",
      "\N{U+5341}\N{U+6708}",
      "\N{U+5341}\N{U+4e00}\N{U+6708}",
      "\N{U+5341}\N{U+4e8c}\N{U+6708}"
    ],
    month_stand_alone_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "\N{U+4e00}\N{U+6708}",
      "\N{U+4e8c}\N{U+6708}",
      "\N{U+4e09}\N{U+6708}",
      "\N{U+56db}\N{U+6708}",
      "\N{U+4e94}\N{U+6708}",
      "\N{U+516d}\N{U+6708}",
      "\N{U+4e03}\N{U+6708}",
      "\N{U+516b}\N{U+6708}",
      "\N{U+4e5d}\N{U+6708}",
      "\N{U+5341}\N{U+6708}",
      "\N{U+5341}\N{U+4e00}\N{U+6708}",
      "\N{U+5341}\N{U+4e8c}\N{U+6708}"
    ],
    name => "Chinese Singapore Simplified",
    native_language => "\N{U+4e2d}\N{U+6587}",
    native_name => "\N{U+4e2d}\N{U+6587} \N{U+65b0}\N{U+52a0}\N{U+5761} \N{U+7b80}\N{U+4f53}",
    native_script => "\N{U+7b80}\N{U+4f53}",
    native_territory => "\N{U+65b0}\N{U+52a0}\N{U+5761}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "1\N{U+5b63}\N{U+5ea6}",
      "2\N{U+5b63}\N{U+5ea6}",
      "3\N{U+5b63}\N{U+5ea6}",
      "4\N{U+5b63}\N{U+5ea6}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+7b2c}\N{U+4e00}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e8c}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e09}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+56db}\N{U+5b63}\N{U+5ea6}"
    ],
    quarter_stand_alone_abbreviated => [
      "1\N{U+5b63}\N{U+5ea6}",
      "2\N{U+5b63}\N{U+5ea6}",
      "3\N{U+5b63}\N{U+5ea6}",
      "4\N{U+5b63}\N{U+5ea6}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+7b2c}\N{U+4e00}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e8c}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+4e09}\N{U+5b63}\N{U+5ea6}",
      "\N{U+7b2c}\N{U+56db}\N{U+5b63}\N{U+5ea6}"
    ],
    script => "Simplified",
    territory => "Singapore",
    time_format_full => "zzzz ah:mm:ss",
    time_format_long => "z ah:mm:ss",
    time_format_medium => "ah:mm:ss",
    time_format_short => "ah:mm",
    variant => undef,
    version => 29
  }
  __[ zh-Hant ]__
  {
    am_pm_abbreviated => [
      "\N{U+4e0a}\N{U+5348}",
      "\N{U+4e0b}\N{U+5348}"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E ah:mm",
      Ehms => "E ah:mm:ss",
      Gy => "Gy\N{U+5e74}",
      GyMMM => "Gy\N{U+5e74}M\N{U+6708}",
      GyMMMEd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5} E",
      GyMMMd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      H => "H\N{U+6642}",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss [v]",
      Hmv => "HH:mm [v]",
      M => "M\N{U+6708}",
      MEd => "M/d\N{U+ff08}E\N{U+ff09}",
      MMM => "LLL",
      MMMEd => "M\N{U+6708}d\N{U+65e5} E",
      MMMMd => "M\N{U+6708}d\N{U+65e5}",
      MMMd => "M\N{U+6708}d\N{U+65e5}",
      MMdd => "MM/dd",
      Md => "M/d",
      d => "d\N{U+65e5}",
      h => "ah\N{U+6642}",
      hm => "ah:mm",
      hms => "ah:mm:ss",
      hmsv => "ah:mm:ss [v]",
      hmv => "ah:mm [v]",
      ms => "mm:ss",
      y => "y\N{U+5e74}",
      yM => "y/M",
      yMEd => "y/M/d\N{U+ff08}E\N{U+ff09}",
      yMM => "y/MM",
      yMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5} E",
      yMMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      yMd => "y/M/d",
      yQQQ => "y\N{U+5e74}QQQ",
      yQQQQ => "y\N{U+5e74}QQQQ"
    },
    code => "zh-Hant",
    date_format_full => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5} EEEE",
    date_format_long => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_medium => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_short => "y/M/d",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+9031}\N{U+4e00}",
      "\N{U+9031}\N{U+4e8c}",
      "\N{U+9031}\N{U+4e09}",
      "\N{U+9031}\N{U+56db}",
      "\N{U+9031}\N{U+4e94}",
      "\N{U+9031}\N{U+516d}",
      "\N{U+9031}\N{U+65e5}"
    ],
    day_format_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_format_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+9031}\N{U+4e00}",
      "\N{U+9031}\N{U+4e8c}",
      "\N{U+9031}\N{U+4e09}",
      "\N{U+9031}\N{U+56db}",
      "\N{U+9031}\N{U+4e94}",
      "\N{U+9031}\N{U+516d}",
      "\N{U+9031}\N{U+65e5}"
    ],
    day_stand_alone_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_stand_alone_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    era_abbreviated => [
      "\N{U+897f}\N{U+5143}\N{U+524d}",
      "\N{U+897f}\N{U+5143}"
    ],
    era_narrow => [
      "\N{U+897f}\N{U+5143}\N{U+524d}",
      "\N{U+897f}\N{U+5143}"
    ],
    era_wide => [
      "\N{U+897f}\N{U+5143}\N{U+524d}",
      "\N{U+897f}\N{U+5143}"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Chinese",
    month_format_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    name => "Chinese",
    native_language => "\N{U+4e2d}\N{U+6587}",
    native_name => "\N{U+4e2d}\N{U+6587}",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "1\N{U+5b63}",
      "2\N{U+5b63}",
      "3\N{U+5b63}",
      "4\N{U+5b63}"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+7b2c}1\N{U+5b63}",
      "\N{U+7b2c}2\N{U+5b63}",
      "\N{U+7b2c}3\N{U+5b63}",
      "\N{U+7b2c}4\N{U+5b63}"
    ],
    quarter_stand_alone_abbreviated => [
      "1\N{U+5b63}",
      "2\N{U+5b63}",
      "3\N{U+5b63}",
      "4\N{U+5b63}"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+7b2c}1\N{U+5b63}",
      "\N{U+7b2c}2\N{U+5b63}",
      "\N{U+7b2c}3\N{U+5b63}",
      "\N{U+7b2c}4\N{U+5b63}"
    ],
    script => undef,
    territory => undef,
    time_format_full => "ah:mm:ss [zzzz]",
    time_format_long => "ah:mm:ss [z]",
    time_format_medium => "ah:mm:ss",
    time_format_short => "ah:mm",
    variant => undef,
    version => 29
  }
  __[ zh-Hant-HK ]__
  {
    am_pm_abbreviated => [
      "\N{U+4e0a}\N{U+5348}",
      "\N{U+4e0b}\N{U+5348}"
    ],
    available_formats => {
      E => "cccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d\N{U+65e5}E",
      Ehm => "E ah:mm",
      Ehms => "E ah:mm:ss",
      Gy => "Gy\N{U+5e74}",
      GyMMM => "Gy\N{U+5e74}M\N{U+6708}",
      GyMMMEd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}E",
      GyMMMd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      H => "H\N{U+6642}",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss [v]",
      Hmv => "HH:mm [v]",
      M => "M\N{U+6708}",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "M\N{U+6708}d\N{U+65e5}E",
      MMMMd => "M\N{U+6708}d\N{U+65e5}",
      MMMd => "M\N{U+6708}d\N{U+65e5}",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d\N{U+65e5}",
      h => "ah\N{U+6642}",
      hm => "ah:mm",
      hms => "ah:mm:ss",
      hmsv => "ah:mm:ss [v]",
      hmv => "ah:mm [v]",
      ms => "mm:ss",
      y => "y\N{U+5e74}",
      yM => "M/y",
      yMEd => "y/M/dE",
      yMM => "MM/y",
      yMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}E",
      yMMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      yMd => "d/M/y",
      yQQQ => "y\N{U+5e74}QQQ",
      yQQQQ => "y\N{U+5e74}QQQQ"
    },
    code => "zh-Hant-HK",
    date_format_full => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}EEEE",
    date_format_long => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_medium => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+9031}\N{U+4e00}",
      "\N{U+9031}\N{U+4e8c}",
      "\N{U+9031}\N{U+4e09}",
      "\N{U+9031}\N{U+56db}",
      "\N{U+9031}\N{U+4e94}",
      "\N{U+9031}\N{U+516d}",
      "\N{U+9031}\N{U+65e5}"
    ],
    day_format_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_format_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+9031}\N{U+4e00}",
      "\N{U+9031}\N{U+4e8c}",
      "\N{U+9031}\N{U+4e09}",
      "\N{U+9031}\N{U+56db}",
      "\N{U+9031}\N{U+4e94}",
      "\N{U+9031}\N{U+516d}",
      "\N{U+9031}\N{U+65e5}"
    ],
    day_stand_alone_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_stand_alone_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    era_abbreviated => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    era_narrow => [
      "\N{U+897f}\N{U+5143}\N{U+524d}",
      "\N{U+897f}\N{U+5143}"
    ],
    era_wide => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Chinese",
    month_format_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    name => "Chinese Hong Kong SAR China Traditional",
    native_language => "\N{U+4e2d}\N{U+6587}",
    native_name => "\N{U+4e2d}\N{U+6587} \N{U+4e2d}\N{U+83ef}\N{U+4eba}\N{U+6c11}\N{U+5171}\N{U+548c}\N{U+570b}\N{U+9999}\N{U+6e2f}\N{U+7279}\N{U+5225}\N{U+884c}\N{U+653f}\N{U+5340} \N{U+7e41}\N{U+9ad4}\N{U+5b57}",
    native_script => "\N{U+7e41}\N{U+9ad4}\N{U+5b57}",
    native_territory => "\N{U+4e2d}\N{U+83ef}\N{U+4eba}\N{U+6c11}\N{U+5171}\N{U+548c}\N{U+570b}\N{U+9999}\N{U+6e2f}\N{U+7279}\N{U+5225}\N{U+884c}\N{U+653f}\N{U+5340}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+7b2c}1\N{U+5b63}",
      "\N{U+7b2c}2\N{U+5b63}",
      "\N{U+7b2c}3\N{U+5b63}",
      "\N{U+7b2c}4\N{U+5b63}"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+7b2c}1\N{U+5b63}",
      "\N{U+7b2c}2\N{U+5b63}",
      "\N{U+7b2c}3\N{U+5b63}",
      "\N{U+7b2c}4\N{U+5b63}"
    ],
    script => "Traditional",
    territory => "Hong Kong SAR China",
    time_format_full => "ah:mm:ss [zzzz]",
    time_format_long => "ah:mm:ss [z]",
    time_format_medium => "ah:mm:ss",
    time_format_short => "ah:mm",
    variant => undef,
    version => 29
  }
  __[ zh-Hant-MO ]__
  {
    am_pm_abbreviated => [
      "\N{U+4e0a}\N{U+5348}",
      "\N{U+4e0b}\N{U+5348}"
    ],
    available_formats => {
      E => "cccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d\N{U+65e5}E",
      Ehm => "E ah:mm",
      Ehms => "E ah:mm:ss",
      Gy => "Gy\N{U+5e74}",
      GyMMM => "Gy\N{U+5e74}M\N{U+6708}",
      GyMMMEd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}E",
      GyMMMd => "Gy\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      H => "H\N{U+6642}",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss [v]",
      Hmv => "HH:mm [v]",
      M => "M\N{U+6708}",
      MEd => "E, d/M",
      MMM => "LLL",
      MMMEd => "M\N{U+6708}d\N{U+65e5}E",
      MMMMd => "M\N{U+6708}d\N{U+65e5}",
      MMMd => "M\N{U+6708}d\N{U+65e5}",
      MMdd => "dd/MM",
      Md => "d/M",
      d => "d\N{U+65e5}",
      h => "ah\N{U+6642}",
      hm => "ah:mm",
      hms => "ah:mm:ss",
      hmsv => "ah:mm:ss [v]",
      hmv => "ah:mm [v]",
      ms => "mm:ss",
      y => "y\N{U+5e74}",
      yM => "M/y",
      yMEd => "y/M/dE",
      yMM => "MM/y",
      yMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMEd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}E",
      yMMMM => "y\N{U+5e74}M\N{U+6708}",
      yMMMd => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
      yMd => "d/M/y",
      yQQQ => "y\N{U+5e74}QQQ",
      yQQQQ => "y\N{U+5e74}QQQQ"
    },
    code => "zh-Hant-MO",
    date_format_full => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}EEEE",
    date_format_long => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_medium => "y\N{U+5e74}M\N{U+6708}d\N{U+65e5}",
    date_format_short => "d/M/y",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "\N{U+9031}\N{U+4e00}",
      "\N{U+9031}\N{U+4e8c}",
      "\N{U+9031}\N{U+4e09}",
      "\N{U+9031}\N{U+56db}",
      "\N{U+9031}\N{U+4e94}",
      "\N{U+9031}\N{U+516d}",
      "\N{U+9031}\N{U+65e5}"
    ],
    day_format_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_format_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    day_stand_alone_abbreviated => [
      "\N{U+9031}\N{U+4e00}",
      "\N{U+9031}\N{U+4e8c}",
      "\N{U+9031}\N{U+4e09}",
      "\N{U+9031}\N{U+56db}",
      "\N{U+9031}\N{U+4e94}",
      "\N{U+9031}\N{U+516d}",
      "\N{U+9031}\N{U+65e5}"
    ],
    day_stand_alone_narrow => [
      "\N{U+4e00}",
      "\N{U+4e8c}",
      "\N{U+4e09}",
      "\N{U+56db}",
      "\N{U+4e94}",
      "\N{U+516d}",
      "\N{U+65e5}"
    ],
    day_stand_alone_wide => [
      "\N{U+661f}\N{U+671f}\N{U+4e00}",
      "\N{U+661f}\N{U+671f}\N{U+4e8c}",
      "\N{U+661f}\N{U+671f}\N{U+4e09}",
      "\N{U+661f}\N{U+671f}\N{U+56db}",
      "\N{U+661f}\N{U+671f}\N{U+4e94}",
      "\N{U+661f}\N{U+671f}\N{U+516d}",
      "\N{U+661f}\N{U+671f}\N{U+65e5}"
    ],
    era_abbreviated => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    era_narrow => [
      "\N{U+897f}\N{U+5143}\N{U+524d}",
      "\N{U+897f}\N{U+5143}"
    ],
    era_wide => [
      "\N{U+516c}\N{U+5143}\N{U+524d}",
      "\N{U+516c}\N{U+5143}"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Chinese",
    month_format_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_format_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_format_wide => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_abbreviated => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    month_stand_alone_narrow => [
      1,
      2,
      3,
      4,
      5,
      6,
      7,
      8,
      9,
      10,
      11,
      12
    ],
    month_stand_alone_wide => [
      "1\N{U+6708}",
      "2\N{U+6708}",
      "3\N{U+6708}",
      "4\N{U+6708}",
      "5\N{U+6708}",
      "6\N{U+6708}",
      "7\N{U+6708}",
      "8\N{U+6708}",
      "9\N{U+6708}",
      "10\N{U+6708}",
      "11\N{U+6708}",
      "12\N{U+6708}"
    ],
    name => "Chinese Macau SAR China Traditional",
    native_language => "\N{U+4e2d}\N{U+6587}",
    native_name => "\N{U+4e2d}\N{U+6587} \N{U+4e2d}\N{U+83ef}\N{U+4eba}\N{U+6c11}\N{U+5171}\N{U+548c}\N{U+570b}\N{U+6fb3}\N{U+9580}\N{U+7279}\N{U+5225}\N{U+884c}\N{U+653f}\N{U+5340} \N{U+7e41}\N{U+9ad4}\N{U+5b57}",
    native_script => "\N{U+7e41}\N{U+9ad4}\N{U+5b57}",
    native_territory => "\N{U+4e2d}\N{U+83ef}\N{U+4eba}\N{U+6c11}\N{U+5171}\N{U+548c}\N{U+570b}\N{U+6fb3}\N{U+9580}\N{U+7279}\N{U+5225}\N{U+884c}\N{U+653f}\N{U+5340}",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "\N{U+7b2c}1\N{U+5b63}",
      "\N{U+7b2c}2\N{U+5b63}",
      "\N{U+7b2c}3\N{U+5b63}",
      "\N{U+7b2c}4\N{U+5b63}"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "\N{U+7b2c}1\N{U+5b63}",
      "\N{U+7b2c}2\N{U+5b63}",
      "\N{U+7b2c}3\N{U+5b63}",
      "\N{U+7b2c}4\N{U+5b63}"
    ],
    script => "Traditional",
    territory => "Macau SAR China",
    time_format_full => "ah:mm:ss [zzzz]",
    time_format_long => "ah:mm:ss [z]",
    time_format_medium => "ah:mm:ss",
    time_format_short => "ah:mm",
    variant => undef,
    version => 29
  }
  __[ zu ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d, y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "zu",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mso",
      "Bil",
      "Tha",
      "Sin",
      "Hla",
      "Mgq",
      "Son"
    ],
    day_format_narrow => [
      "M",
      "B",
      "T",
      "S",
      "H",
      "M",
      "S"
    ],
    day_format_wide => [
      "UMsombuluko",
      "ULwesibili",
      "ULwesithathu",
      "ULwesine",
      "ULwesihlanu",
      "UMgqibelo",
      "ISonto"
    ],
    day_stand_alone_abbreviated => [
      "Mso",
      "Bil",
      "Tha",
      "Sin",
      "Hla",
      "Mgq",
      "Son"
    ],
    day_stand_alone_narrow => [
      "M",
      "B",
      "T",
      "S",
      "H",
      "M",
      "S"
    ],
    day_stand_alone_wide => [
      "UMsombuluko",
      "ULwesibili",
      "ULwesithathu",
      "ULwesine",
      "ULwesihlanu",
      "UMgqibelo",
      "ISonto"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "BC",
      "AD"
    ],
    first_day_of_week => 1,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%m/%d/%y",
    glibc_datetime_format => "%a %b %e %H:%M:%S %Y",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%H:%M:%S",
    language => "Zulu",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mas",
      "Eph",
      "Mey",
      "Jun",
      "Jul",
      "Aga",
      "Sep",
      "Okt",
      "Nov",
      "Dis"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "E",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januwari",
      "Februwari",
      "Mashi",
      "Ephreli",
      "Meyi",
      "Juni",
      "Julayi",
      "Agasti",
      "Septhemba",
      "Okthoba",
      "Novemba",
      "Disemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mas",
      "Eph",
      "Mey",
      "Jun",
      "Jul",
      "Aga",
      "Sep",
      "Okt",
      "Nov",
      "Dis"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januwari",
      "Februwari",
      "Mashi",
      "Ephreli",
      "Meyi",
      "Juni",
      "Julayi",
      "Agasti",
      "Septhemba",
      "Okthoba",
      "Novemba",
      "Disemba"
    ],
    name => "Zulu",
    native_language => "isiZulu",
    native_name => "isiZulu",
    native_script => undef,
    native_territory => undef,
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "ikota yesi-1",
      "ikota yesi-2",
      "ikota yesi-3",
      "ikota yesi-4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "ikota yesi-1",
      "ikota yesi-2",
      "ikota yesi-3",
      "ikota yesi-4"
    ],
    script => undef,
    territory => undef,
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  __[ zu-ZA ]__
  {
    am_pm_abbreviated => [
      "AM",
      "PM"
    ],
    available_formats => {
      E => "ccc",
      EHm => "E HH:mm",
      EHms => "E HH:mm:ss",
      Ed => "d E",
      Ehm => "E h:mm a",
      Ehms => "E h:mm:ss a",
      Gy => "G y",
      GyMMM => "G y MMM",
      GyMMMEd => "G y MMM d, E",
      GyMMMd => "G y MMM d",
      H => "HH",
      Hm => "HH:mm",
      Hms => "HH:mm:ss",
      Hmsv => "HH:mm:ss v",
      Hmv => "HH:mm v",
      M => "L",
      MEd => "E, M/d",
      MMM => "LLL",
      MMMEd => "E, MMM d",
      MMMMd => "MMMM d",
      MMMd => "MMM d",
      Md => "M/d",
      d => "d",
      h => "h a",
      hm => "h:mm a",
      hms => "h:mm:ss a",
      hmsv => "h:mm:ss a v",
      hmv => "h:mm a v",
      ms => "mm:ss",
      y => "y",
      yM => "M/y",
      yMEd => "E, M/d/y",
      yMMM => "MMM y",
      yMMMEd => "E, MMM d, y",
      yMMMM => "MMMM y",
      yMMMd => "MMM d, y",
      yMd => "M/d/y",
      yQQQ => "QQQ y",
      yQQQQ => "QQQQ y"
    },
    code => "zu-ZA",
    date_format_full => "EEEE, MMMM d, y",
    date_format_long => "MMMM d, y",
    date_format_medium => "MMM d, y",
    date_format_short => "M/d/yy",
    datetime_format_full => "{1} {0}",
    datetime_format_long => "{1} {0}",
    datetime_format_medium => "{1} {0}",
    datetime_format_short => "{1} {0}",
    day_format_abbreviated => [
      "Mso",
      "Bil",
      "Tha",
      "Sin",
      "Hla",
      "Mgq",
      "Son"
    ],
    day_format_narrow => [
      "M",
      "B",
      "T",
      "S",
      "H",
      "M",
      "S"
    ],
    day_format_wide => [
      "UMsombuluko",
      "ULwesibili",
      "ULwesithathu",
      "ULwesine",
      "ULwesihlanu",
      "UMgqibelo",
      "ISonto"
    ],
    day_stand_alone_abbreviated => [
      "Mso",
      "Bil",
      "Tha",
      "Sin",
      "Hla",
      "Mgq",
      "Son"
    ],
    day_stand_alone_narrow => [
      "M",
      "B",
      "T",
      "S",
      "H",
      "M",
      "S"
    ],
    day_stand_alone_wide => [
      "UMsombuluko",
      "ULwesibili",
      "ULwesithathu",
      "ULwesine",
      "ULwesihlanu",
      "UMgqibelo",
      "ISonto"
    ],
    era_abbreviated => [
      "BC",
      "AD"
    ],
    era_narrow => [
      "BC",
      "AD"
    ],
    era_wide => [
      "BC",
      "AD"
    ],
    first_day_of_week => 7,
    glibc_date_1_format => "%a %b %e %H:%M:%S %Z %Y",
    glibc_date_format => "%d/%m/%Y",
    glibc_datetime_format => "%a %d %b %Y %T %Z",
    glibc_time_12_format => "%I:%M:%S %p",
    glibc_time_format => "%T",
    language => "Zulu",
    month_format_abbreviated => [
      "Jan",
      "Feb",
      "Mas",
      "Eph",
      "Mey",
      "Jun",
      "Jul",
      "Aga",
      "Sep",
      "Okt",
      "Nov",
      "Dis"
    ],
    month_format_narrow => [
      "J",
      "F",
      "M",
      "E",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_format_wide => [
      "Januwari",
      "Februwari",
      "Mashi",
      "Ephreli",
      "Meyi",
      "Juni",
      "Julayi",
      "Agasti",
      "Septhemba",
      "Okthoba",
      "Novemba",
      "Disemba"
    ],
    month_stand_alone_abbreviated => [
      "Jan",
      "Feb",
      "Mas",
      "Eph",
      "Mey",
      "Jun",
      "Jul",
      "Aga",
      "Sep",
      "Okt",
      "Nov",
      "Dis"
    ],
    month_stand_alone_narrow => [
      "J",
      "F",
      "M",
      "A",
      "M",
      "J",
      "J",
      "A",
      "S",
      "O",
      "N",
      "D"
    ],
    month_stand_alone_wide => [
      "Januwari",
      "Februwari",
      "Mashi",
      "Ephreli",
      "Meyi",
      "Juni",
      "Julayi",
      "Agasti",
      "Septhemba",
      "Okthoba",
      "Novemba",
      "Disemba"
    ],
    name => "Zulu South Africa",
    native_language => "isiZulu",
    native_name => "isiZulu i-South Africa",
    native_script => undef,
    native_territory => "i-South Africa",
    native_variant => undef,
    quarter_format_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_format_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_format_wide => [
      "ikota yesi-1",
      "ikota yesi-2",
      "ikota yesi-3",
      "ikota yesi-4"
    ],
    quarter_stand_alone_abbreviated => [
      "Q1",
      "Q2",
      "Q3",
      "Q4"
    ],
    quarter_stand_alone_narrow => [
      1,
      2,
      3,
      4
    ],
    quarter_stand_alone_wide => [
      "ikota yesi-1",
      "ikota yesi-2",
      "ikota yesi-3",
      "ikota yesi-4"
    ],
    script => undef,
    territory => "South Africa",
    time_format_full => "h:mm:ss a zzzz",
    time_format_long => "h:mm:ss a z",
    time_format_medium => "h:mm:ss a",
    time_format_short => "h:mm a",
    variant => undef,
    version => 29
  }
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 DESCRIPTION
  
  There are no user-facing parts in this module.
  
  =cut
DATETIME_LOCALE_DATA

    $main::fatpacked{"DateTime/Locale/FromData.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_LOCALE_FROMDATA';
  package DateTime::Locale::FromData;
  
  use strict;
  use warnings;
  
  use DateTime::Locale::Util qw( parse_locale_code );
  use Params::Validate qw( validate_pos );
  
  our $VERSION = '1.05';
  
  my @FormatLengths;
  
  BEGIN {
      my @methods = qw(
          code
          name
          language
          script
          territory
          variant
          native_name
          native_language
          native_script
          native_territory
          native_variant
          am_pm_abbreviated
          date_format_full
          date_format_long
          date_format_medium
          date_format_short
          time_format_full
          time_format_long
          time_format_medium
          time_format_short
          day_format_abbreviated
          day_format_narrow
          day_format_wide
          day_stand_alone_abbreviated
          day_stand_alone_narrow
          day_stand_alone_wide
          month_format_abbreviated
          month_format_narrow
          month_format_wide
          month_stand_alone_abbreviated
          month_stand_alone_narrow
          month_stand_alone_wide
          quarter_format_abbreviated
          quarter_format_narrow
          quarter_format_wide
          quarter_stand_alone_abbreviated
          quarter_stand_alone_narrow
          quarter_stand_alone_wide
          era_abbreviated
          era_narrow
          era_wide
          default_date_format_length
          default_time_format_length
          first_day_of_week
          version
          glibc_datetime_format
          glibc_date_format
          glibc_date_1_format
          glibc_time_format
          glibc_time_12_format
      );
  
      for my $meth (@methods) {
          my $sub = sub { $_[0]->{$meth} };
          ## no critic (TestingAndDebugging::ProhibitNoStrict)
          no strict 'refs';
          *{$meth} = $sub;
      }
  
      @FormatLengths = qw( short medium long full );
  
      for my $length (@FormatLengths) {
          my $meth = 'datetime_format_' . $length;
          my $key  = 'computed_' . $meth;
  
          my $sub = sub {
              my $self = shift;
  
              return $self->{$key} if exists $self->{$key};
  
              return $self->{$key} = $self->_make_datetime_format($length);
          };
  
          ## no critic (TestingAndDebugging::ProhibitNoStrict)
          no strict 'refs';
          *{$meth} = $sub;
      }
  }
  
  sub new {
      my $class = shift;
      my $data  = shift;
  
      return bless {
          %{$data},
          default_date_format_length => 'medium',
          default_time_format_length => 'medium',
      }, $class;
  }
  
  sub date_format_default {
      return $_[0]->date_format_medium;
  }
  
  sub time_format_default {
      return $_[0]->time_format_medium;
  }
  
  sub datetime_format {
      return $_[0]->{datetime_format_medium};
  }
  
  sub datetime_format_default {
      return $_[0]->datetime_format_medium;
  }
  
  sub _make_datetime_format {
      my $self   = shift;
      my $length = shift;
  
      my $dt_key    = 'datetime_format_' . $length;
      my $date_meth = 'date_format_' . $length;
      my $time_meth = 'time_format_' . $length;
  
      my $dt_format = $self->{$dt_key};
      $dt_format =~ s/\{0\}/$self->$time_meth/eg;
      $dt_format =~ s/\{1\}/$self->$date_meth/eg;
  
      return $dt_format;
  }
  
  sub set_default_date_format_length {
      my $self = shift;
      my ($l)
          = validate_pos( @_, { regex => qr/^(?:full|long|medium|short)$/i } );
  
      $self->{default_date_format_length} = lc $l;
  }
  
  sub set_default_time_format_length {
      my $self = shift;
      my ($l)
          = validate_pos( @_, { regex => qr/^(?:full|long|medium|short)/i } );
  
      $self->{default_time_format_length} = lc $l;
  }
  
  sub date_formats {
      my %formats;
      for my $length (@FormatLengths) {
          my $meth = 'date_format_' . $length;
          $formats{$length} = $_[0]->$meth;
      }
      return \%formats;
  }
  
  sub time_formats {
      my %formats;
      for my $length (@FormatLengths) {
          my $meth = 'time_format_' . $length;
          $formats{$length} = $_[0]->$meth;
      }
      return \%formats;
  }
  
  sub available_formats {
      my $self = shift;
  
      $self->{computed_available_formats}
          ||= [ sort keys %{ $self->_available_formats } ];
  
      return @{ $self->{computed_available_formats} };
  }
  
  sub format_for {
      my $self = shift;
      my $for  = shift;
  
      return $self->_available_formats->{$for};
  }
  
  sub _available_formats { $_[0]->{available_formats} }
  
  sub prefers_24_hour_time {
      my $self = shift;
  
      return $self->{prefers_24_hour_time}
          if exists $self->{prefers_24_hour_time};
  
      $self->{prefers_24_hour_time} = $self->time_format_short =~ /h|K/ ? 0 : 1;
  }
  
  sub language_code {
      my $self = shift;
      return ( $self->{parsed_code} ||= { parse_locale_code( $self->code ) } )
          ->{language};
  }
  
  sub script_code {
      my $self = shift;
      return ( $self->{parsed_code} ||= { parse_locale_code( $self->code ) } )
          ->{script};
  }
  
  sub territory_code {
      my $self = shift;
      return ( $self->{parsed_code} ||= { parse_locale_code( $self->code ) } )
          ->{territory};
  }
  
  sub variant_code {
      my $self = shift;
      return ( $self->{parsed_code} ||= { parse_locale_code( $self->code ) } )
          ->{variant};
  }
  
  sub id {
      $_[0]->code;
  }
  
  sub language_id {
      $_[0]->language_code;
  }
  
  sub script_id {
      $_[0]->script_code;
  }
  
  sub territory_id {
      $_[0]->territory_code;
  }
  
  sub variant_id {
      $_[0]->variant_code;
  }
  
  sub STORABLE_freeze {
      my $self    = shift;
      my $cloning = shift;
  
      return if $cloning;
  
      return $self->code;
  }
  
  sub STORABLE_thaw {
      my $self = shift;
      shift;
      my $serialized = shift;
  
      my $obj = DateTime::Locale->load($serialized);
  
      %{$self} = %{$obj};
  
      return $self;
  }
  
  1;
  
  # ABSTRACT: Class for locale objects instantiated from pre-defined data
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::Locale::FromData - Class for locale objects instantiated from pre-defined data
  
  =head1 VERSION
  
  version 1.05
  
  =head1 SYNOPSIS
  
    my $locale = DateTime::Locale::FromData->new(%lots_of_data)
  
  =head1 DESCRIPTION
  
  This class is used to represent locales instantiated from the data in the
  DateTime::Locale::Data module.
  
  =head1 METHODS
  
  This class provides the following methods:
  
  =over 4
  
  =item * $locale->code
  
  The complete locale id, something like "en-US".
  
  =item * $locale->language_code
  
  The language portion of the code, like "en".
  
  =item * $locale->script_code
  
  The script portion of the code, like "Hant".
  
  =item * $locale->territory_code
  
  The territory portion of the code, like "US".
  
  =item * $locale->variant_code
  
  The variant portion of the code, like "POSIX".
  
  =item * $locale->name
  
  The locale's complete name, which always includes at least a language
  component, plus optional territory and variant components. Something like
  "English United States". The value returned will always be in English.
  
  =item * $locale->language
  
  =item * $locale->script
  
  =item * $locale->territory
  
  =item * $locale->variant
  
  The relevant component from the locale's complete name, like "English"
  or "United States".
  
  =item * $locale->native_name
  
  The locale's complete name in localized form as a UTF-8 string.
  
  =item * $locale->native_language
  
  =item * $locale->native_script
  
  =item * $locale->native_territory
  
  =item * $locale->native_variant
  
  The relevant component from the locale's complete native name as a UTF-8
  string.
  
  =back
  
  The following methods all return an array reference containing the specified
  data.
  
  The methods with "format" in the name should return strings that can be used a
  part of a string, like "the month of July". The stand alone values are for use
  in things like calendars as opposed to a sentence.
  
  The narrow forms may not be unique (for example, in the day column heading for
  a calendar it's okay to have "T" for both Tuesday and Thursday).
  
  The wide name should always be the full name of thing in question. The narrow
  name should be just one or two characters.
  
  =over 4
  
  =item * $locale->month_format_wide
  
  =item * $locale->month_format_abbreviated
  
  =item * $locale->month_format_narrow
  
  =item * $locale->month_stand_alone_wide
  
  =item * $locale->month_stand_alone_abbreviated
  
  =item * $locale->month_stand_alone_narrow
  
  =item * $locale->day_format_wide
  
  =item * $locale->day_format_abbreviated
  
  =item * $locale->day_format_narrow
  
  =item * $locale->day_stand_alone_wide
  
  =item * $locale->day_stand_alone_abbreviated
  
  =item * $locale->day_stand_alone_narrow
  
  =item * $locale->quarter_format_wide
  
  =item * $locale->quarter_format_abbreviated
  
  =item * $locale->quarter_format_narrow
  
  =item * $locale->quarter_stand_alone_wide
  
  =item * $locale->quarter_stand_alone_abbreviated
  
  =item * $locale->quarter_stand_alone_narrow
  
  =item * $locale->am_pm_abbreviated
  
  =item * $locale->era_wide
  
  =item * $locale->era_abbreviated
  
  =item * $locale->era_narrow
  
  =back
  
  The following methods return strings appropriate for the
  C<< DateTime->format_cldr >> method:
  
  =over 4
  
  =item * $locale->date_format_full
  
  =item * $locale->date_format_long
  
  =item * $locale->date_format_medium
  
  =item * $locale->date_format_short
  
  =item * $locale->time_format_full
  
  =item * $locale->time_format_long
  
  =item * $locale->time_format_medium
  
  =item * $locale->time_format_short
  
  =item * $locale->datetime_format_full
  
  =item * $locale->datetime_format_long
  
  =item * $locale->datetime_format_medium
  
  =item * $locale->datetime_format_short
  
  =back
  
  A locale may also offer one or more formats for displaying part of a datetime,
  such as the year and month, or hour and minute.
  
  =over 4
  
  =item * $locale->format_for($name)
  
  These are accessed by passing a name to C<< $locale->format_for(...)  >>,
  where the name is a CLDR-style format specifier.
  
  The return value is a string suitable for passing to C<< $dt->format_cldr >>,
  so you can do something like this:
  
    print $dt->format_cldr( $dt->locale->format_for('MMMdd') )
  
  which for the "en" locale would print out something like "08 Jul".
  
  Note that the localization may also include additional text specific to the
  locale. For example, the "MMMMd" format for the "zh" locale includes the
  Chinese characters for "day" (日) and month (月), so you get something like
  "S<8月23日>".
  
  =item * $locale->available_formats
  
  This should return a list of all the format names that could be passed
  to C<< $locale->format_for >>.
  
  =back
  
  There are also some miscellaneous methods:
  
  =over 4
  
  =item * $locale->prefers_24_hour_time
  
  Returns a boolean indicating whether or not the locale prefers 24-hour time.
  
  =item * $locale->first_day_of_week
  
  Returns a number from 1 to 7 indicating the I<local> first day of the
  week, with Monday being 1 and Sunday being 7.
  
  =item * $locale->version
  
  The CLDR version from which this locale was generated.
  
  =back
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime-Locale>
  (or L<bug-datetime-locale@rt.cpan.org|mailto:bug-datetime-locale@rt.cpan.org>).
  
  There is a mailing list available for users of this distribution,
  L<mailto:datetime@perl.org>.
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2016 by Dave Rolsky.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATETIME_LOCALE_FROMDATA

    $main::fatpacked{"DateTime/Locale/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_LOCALE_UTIL';
  package DateTime::Locale::Util;
  
  use strict;
  use warnings;
  
  use Exporter qw( import );
  
  our $VERSION = '1.05';
  
  our @EXPORT_OK = 'parse_locale_code';
  
  sub parse_locale_code {
      my @pieces = split /-/, $_[0];
  
      return unless @pieces;
  
      my %codes = ( language => lc shift @pieces );
      if ( @pieces == 1 ) {
          if ( length $pieces[0] == 2 || $pieces[0] =~ /^\d\d\d$/ ) {
              $codes{territory} = uc shift @pieces;
          }
      }
      elsif ( @pieces == 3 ) {
          $codes{script}    = _tc( shift @pieces );
          $codes{territory} = uc shift @pieces;
          $codes{variant}   = uc shift @pieces;
      }
      elsif ( @pieces == 2 ) {
  
          # I don't think it's possible to have a script + variant with also
          # having a territory.
          if ( length $pieces[1] == 2 || $pieces[1] =~ /^\d\d\d$/ ) {
              $codes{script}    = _tc( shift @pieces );
              $codes{territory} = uc shift @pieces;
          }
          else {
              $codes{territory} = uc shift @pieces;
              $codes{variant}   = uc shift @pieces;
          }
      }
  
      return %codes;
  }
  
  sub _tc {
      return ucfirst lc $_[0];
  }
  
  1;
  
  # ABSTRACT: Utility code for DateTime::Locale
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::Locale::Util - Utility code for DateTime::Locale
  
  =head1 VERSION
  
  version 1.05
  
  =head1 DESCRIPTION
  
  There are no user-facing parts in this module.
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime-Locale>
  (or L<bug-datetime-locale@rt.cpan.org|mailto:bug-datetime-locale@rt.cpan.org>).
  
  There is a mailing list available for users of this distribution,
  L<mailto:datetime@perl.org>.
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2016 by Dave Rolsky.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATETIME_LOCALE_UTIL

    $main::fatpacked{"DateTime/PP.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_PP';
  package DateTime::PP;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.36';
  
  $DateTime::IsPurePerl = 1;
  
  my @MonthLengths = ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
  
  my @LeapYearMonthLengths = @MonthLengths;
  $LeapYearMonthLengths[1]++;
  
  my @EndOfLastMonthDayOfYear;
  {
      my $x = 0;
      foreach my $length (@MonthLengths) {
          push @EndOfLastMonthDayOfYear, $x;
          $x += $length;
      }
  }
  
  my @EndOfLastMonthDayOfLeapYear = @EndOfLastMonthDayOfYear;
  $EndOfLastMonthDayOfLeapYear[$_]++ for 2 .. 11;
  
  sub _time_as_seconds {
      shift;
      my ( $hour, $min, $sec ) = @_;
  
      $hour ||= 0;
      $min  ||= 0;
      $sec  ||= 0;
  
      my $secs = $hour * 3600 + $min * 60 + $sec;
      return $secs;
  }
  
  sub _rd2ymd {
      my $class = shift;
  
      use integer;
      my $d  = shift;
      my $rd = $d;
  
      my $yadj = 0;
      my ( $c, $y, $m );
  
      # add 306 days to make relative to Mar 1, 0
      if ( ( $d += 306 ) <= 0 ) {
  
          # avoid ambiguity in C division of negatives
          $yadj = -( -$d / 146097 + 1 );
          $d -= $yadj * 146097;
      }
  
      $c = ( $d * 4 - 1 )
          / 146097;    # calc # of centuries $d is after 29 Feb of yr 0
      $d -= $c * 146097 / 4;    # (4 centuries = 146097 days)
      $y = ( $d * 4 - 1 ) / 1461;    # calc number of years into the century,
      $d -= $y * 1461 / 4;           # again March-based (4 yrs =~ 146[01] days)
      $m = ( $d * 12 + 1093 )
          / 367;    # get the month (3..14 represent March through
      $d -= ( $m * 367 - 1094 ) / 12;    # February of following year)
      $y += $c * 100 + $yadj * 400;      # get the real year, which is off by
      ++$y, $m -= 12 if $m > 12;         # one if month is January or February
  
      if ( $_[0] ) {
          my $dow;
  
          if ( $rd < -6 ) {
              $dow = ( $rd + 6 ) % 7;
              $dow += $dow ? 8 : 1;
          }
          else {
              $dow = ( ( $rd + 6 ) % 7 ) + 1;
          }
  
          my $doy = $class->_end_of_last_month_day_of_year( $y, $m );
  
          $doy += $d;
  
          my $quarter;
          {
              no integer;
              $quarter = int( ( 1 / 3.1 ) * $m ) + 1;
          }
  
          my $qm = ( 3 * $quarter ) - 2;
  
          my $doq
              = ( $doy - $class->_end_of_last_month_day_of_year( $y, $qm ) );
  
          return ( $y, $m, $d, $dow, $doy, $quarter, $doq );
      }
  
      return ( $y, $m, $d );
  }
  
  sub _ymd2rd {
      shift;    # ignore class
  
      use integer;
      my ( $y, $m, $d ) = @_;
      my $adj;
  
      # make month in range 3..14 (treat Jan & Feb as months 13..14 of
      # prev year)
      if ( $m <= 2 ) {
          $y -= ( $adj = ( 14 - $m ) / 12 );
          $m += 12 * $adj;
      }
      elsif ( $m > 14 ) {
          $y += ( $adj = ( $m - 3 ) / 12 );
          $m -= 12 * $adj;
      }
  
      # make year positive (oh, for a use integer 'sane_div'!)
      if ( $y < 0 ) {
          $d -= 146097 * ( $adj = ( 399 - $y ) / 400 );
          $y += 400 * $adj;
      }
  
      # add: day of month, days of previous 0-11 month period that began
      # w/March, days of previous 0-399 year period that began w/March
      # of a 400-multiple year), days of any 400-year periods before
      # that, and finally subtract 306 days to adjust from Mar 1, year
      # 0-relative to Jan 1, year 1-relative (whew)
  
      $d
          += ( $m * 367 - 1094 ) / 12
          + $y % 100 * 1461 / 4
          + ( $y / 100 * 36524 + $y / 400 )
          - 306;
  }
  
  sub _seconds_as_components {
      shift;
      my $secs     = shift;
      my $utc_secs = shift;
      my $modifier = shift || 0;
  
      use integer;
  
      $secs -= $modifier;
  
      my $hour = $secs / 3600;
      $secs -= $hour * 3600;
  
      my $minute = $secs / 60;
  
      my $second = $secs - ( $minute * 60 );
  
      if ( $utc_secs && $utc_secs >= 86400 ) {
  
          # there is no such thing as +3 or more leap seconds!
          die "Invalid UTC RD seconds value: $utc_secs"
              if $utc_secs > 86401;
  
          $second += $utc_secs - 86400 + 60;
  
          $minute = 59;
  
          $hour--;
          $hour = 23 if $hour < 0;
      }
  
      return ( $hour, $minute, $second );
  }
  
  sub _end_of_last_month_day_of_year {
      my $class = shift;
  
      my ( $y, $m ) = @_;
      $m--;
      return (
            $class->_is_leap_year($y)
          ? $EndOfLastMonthDayOfLeapYear[$m]
          : $EndOfLastMonthDayOfYear[$m]
      );
  }
  
  sub _is_leap_year {
      shift;
      my $year = shift;
  
      # According to Bjorn Tackmann, this line prevents an infinite loop
      # when running the tests under Qemu. I cannot reproduce this on
      # Ubuntu or with Strawberry Perl on Win2K.
      return 0
          if $year == DateTime::INFINITY() || $year == DateTime::NEG_INFINITY();
      return 0 if $year % 4;
      return 1 if $year % 100;
      return 0 if $year % 400;
  
      return 1;
  }
  
  sub _day_length { DateTime::LeapSecond::day_length( $_[1] ) }
  
  sub _accumulated_leap_seconds { DateTime::LeapSecond::leap_seconds( $_[1] ) }
  
  my @subs = qw(
      _time_as_seconds
      _rd2ymd
      _ymd2rd
      _seconds_as_components
      _end_of_last_month_day_of_year
      _is_leap_year
      _day_length
      _accumulated_leap_seconds
  );
  
  for my $sub (@subs) {
      no strict 'refs';
      *{ 'DateTime::' . $sub } = __PACKAGE__->can($sub);
  }
  
  # This is down here so that _ymd2rd is available when it loads,
  # because it will load DateTime::LeapSecond, which needs
  # DateTime->_ymd2rd to be available when it is loading
  require DateTime::PPExtra;
  
  1;
DATETIME_PP

    $main::fatpacked{"DateTime/PPExtra.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_PPEXTRA';
  package DateTime::PPExtra;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.36';
  
  use DateTime::LeapSecond;
  
  sub _normalize_tai_seconds {
      return
          if
          grep { $_ == DateTime::INFINITY() || $_ == DateTime::NEG_INFINITY() }
          @_[ 1, 2 ];
  
      # This must be after checking for infinity, because it breaks in
      # presence of use integer !
      use integer;
  
      my $adj;
  
      if ( $_[2] < 0 ) {
          $adj = ( $_[2] - 86399 ) / 86400;
      }
      else {
          $adj = $_[2] / 86400;
      }
  
      $_[1] += $adj;
  
      $_[2] -= $adj * 86400;
  }
  
  sub _normalize_leap_seconds {
  
      # args: 0 => days, 1 => seconds
      my $delta_days;
  
      use integer;
  
      # rough adjust - can adjust many days
      if ( $_[2] < 0 ) {
          $delta_days = ( $_[2] - 86399 ) / 86400;
      }
      else {
          $delta_days = $_[2] / 86400;
      }
  
      my $new_day = $_[1] + $delta_days;
      my $delta_seconds
          = ( 86400 * $delta_days )
          + DateTime::LeapSecond::leap_seconds($new_day)
          - DateTime::LeapSecond::leap_seconds( $_[1] );
  
      $_[2] -= $delta_seconds;
      $_[1] = $new_day;
  
      # fine adjust - up to 1 day
      my $day_length = DateTime::LeapSecond::day_length($new_day);
      if ( $_[2] >= $day_length ) {
          $_[2] -= $day_length;
          $_[1]++;
      }
      elsif ( $_[2] < 0 ) {
          $day_length = DateTime::LeapSecond::day_length( $new_day - 1 );
          $_[2] += $day_length;
          $_[1]--;
      }
  }
  
  my @subs = qw(
      _normalize_tai_seconds
      _normalize_leap_seconds
  );
  
  for my $sub (@subs) {
      no strict 'refs';
      *{ 'DateTime::' . $sub } = __PACKAGE__->can($sub);
  }
  
  1;
DATETIME_PPEXTRA

    $main::fatpacked{"DateTime/TimeZone.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE';
  package DateTime::TimeZone;
  $DateTime::TimeZone::VERSION = '2.01';
  use 5.006;
  
  use strict;
  use warnings;
  
  use DateTime::TimeZone::Catalog;
  use DateTime::TimeZone::Floating;
  use DateTime::TimeZone::Local;
  use DateTime::TimeZone::OffsetOnly;
  use DateTime::TimeZone::OlsonDB::Change;
  use DateTime::TimeZone::UTC;
  use Module::Runtime qw( require_module );
  use Params::Validate 0.72 qw( validate validate_pos SCALAR ARRAYREF BOOLEAN );
  use Try::Tiny;
  
  ## no critic (ValuesAndExpressions::ProhibitConstantPragma)
  use constant INFINITY => 100**1000;
  use constant NEG_INFINITY => -1 * ( 100**1000 );
  
  # the offsets for each span element
  use constant UTC_START   => 0;
  use constant UTC_END     => 1;
  use constant LOCAL_START => 2;
  use constant LOCAL_END   => 3;
  use constant OFFSET      => 4;
  use constant IS_DST      => 5;
  use constant SHORT_NAME  => 6;
  
  my %SpecialName = map { $_ => 1 }
      qw( EST MST HST CET EET MET WET EST5EDT CST6CDT MST7MDT PST8PDT );
  
  sub new {
      shift;
      my %p = validate(
          @_,
          { name => { type => SCALAR } },
      );
  
      if ( exists $DateTime::TimeZone::Catalog::LINKS{ $p{name} } ) {
          $p{name} = $DateTime::TimeZone::Catalog::LINKS{ $p{name} };
      }
      elsif ( exists $DateTime::TimeZone::Catalog::LINKS{ uc $p{name} } ) {
          $p{name} = $DateTime::TimeZone::Catalog::LINKS{ uc $p{name} };
      }
  
      unless ( $p{name} =~ m{/}
          || $SpecialName{ $p{name} } ) {
          if ( $p{name} eq 'floating' ) {
              return DateTime::TimeZone::Floating->instance;
          }
  
          if ( $p{name} eq 'local' ) {
              return DateTime::TimeZone::Local->TimeZone();
          }
  
          if ( $p{name} eq 'UTC' || $p{name} eq 'Z' ) {
              return DateTime::TimeZone::UTC->instance;
          }
  
          return DateTime::TimeZone::OffsetOnly->new( offset => $p{name} );
      }
  
      my $subclass = $p{name};
      $subclass =~ s{/}{::}g;
      $subclass =~ s/-(\d)/_Minus$1/;
      $subclass =~ s/\+/_Plus/;
      $subclass =~ s/-/_/g;
  
      my $real_class = "DateTime::TimeZone::$subclass";
  
      die "The timezone '$p{name}' is an invalid name.\n"
          unless $real_class =~ /^\w+(::\w+)*$/;
  
      unless ( $real_class->can('instance') ) {
          ($real_class)
              = $real_class =~ m{\A([a-zA-Z0-9_]+(?:::[a-zA-Z0-9_]+)*)\z};
  
          my $e;
          try {
              ## no critic (Variables::RequireInitializationForLocalVars)
              local $SIG{__DIE__};
              require_module($real_class);
          }
          catch {
              $e = $_;
          };
  
          if ($e) {
              my $regex = join '.', split /::/, $real_class;
              $regex .= '\\.pm';
  
              if ( $e =~ /^Can't locate $regex/i ) {
                  die
                      "The timezone '$p{name}' could not be loaded, or is an invalid name.\n";
              }
              else {
                  die $e;
              }
          }
      }
  
      my $zone = $real_class->instance( name => $p{name}, is_olson => 1 );
  
      if ( $zone->is_olson() ) {
          my $object_version
              = $zone->can('olson_version')
              ? $zone->olson_version()
              : 'unknown';
          my $catalog_version = DateTime::TimeZone::Catalog->OlsonVersion();
  
          if ( $object_version ne $catalog_version ) {
              warn
                  "Loaded $real_class, which is from a different version ($object_version) of the Olson database than this installation of DateTime::TimeZone ($catalog_version).\n";
          }
      }
  
      return $zone;
  }
  
  ## no critic (Subroutines::ProhibitUnusedPrivateSubroutines)
  sub _init {
      my $class = shift;
      my %p     = validate(
          @_, {
              name     => { type => SCALAR },
              spans    => { type => ARRAYREF },
              is_olson => { type => BOOLEAN, default => 0 },
          },
      );
  
      my $self = bless {
          name     => $p{name},
          spans    => $p{spans},
          is_olson => $p{is_olson},
      }, $class;
  
      foreach my $k (qw( last_offset last_observance rules max_year )) {
          my $m = "_$k";
          $self->{$k} = $self->$m() if $self->can($m);
      }
  
      return $self;
  }
  ## use critic
  
  sub is_olson { $_[0]->{is_olson} }
  
  sub is_dst_for_datetime {
      my $self = shift;
  
      my $span = $self->_span_for_datetime( 'utc', $_[0] );
  
      return $span->[IS_DST];
  }
  
  sub offset_for_datetime {
      my $self = shift;
  
      my $span = $self->_span_for_datetime( 'utc', $_[0] );
  
      return $span->[OFFSET];
  }
  
  sub offset_for_local_datetime {
      my $self = shift;
  
      my $span = $self->_span_for_datetime( 'local', $_[0] );
  
      return $span->[OFFSET];
  }
  
  sub short_name_for_datetime {
      my $self = shift;
  
      my $span = $self->_span_for_datetime( 'utc', $_[0] );
  
      return $span->[SHORT_NAME];
  }
  
  sub _span_for_datetime {
      my $self = shift;
      my $type = shift;
      my $dt   = shift;
  
      my $method = $type . '_rd_as_seconds';
  
      my $end = $type eq 'utc' ? UTC_END : LOCAL_END;
  
      my $span;
      my $seconds = $dt->$method();
      if ( $seconds < $self->max_span->[$end] ) {
          $span = $self->_spans_binary_search( $type, $seconds );
      }
      else {
          my $until_year = $dt->utc_year + 1;
          $span = $self->_generate_spans_until_match(
              $until_year, $seconds,
              $type
          );
      }
  
      # This means someone gave a local time that doesn't exist
      # (like during a transition into savings time)
      unless ( defined $span ) {
          my $err = 'Invalid local time for date';
          $err .= q{ } . $dt->iso8601 if $type eq 'utc';
          $err .= ' in time zone: ' . $self->name;
          $err .= "\n";
  
          die $err;
      }
  
      return $span;
  }
  
  sub _spans_binary_search {
      my $self = shift;
      my ( $type, $seconds ) = @_;
  
      my ( $start, $end ) = _keys_for_type($type);
  
      my $min = 0;
      my $max = scalar @{ $self->{spans} } + 1;
      my $i   = int( $max / 2 );
  
      # special case for when there are only 2 spans
      $i++ if $max % 2 && $max != 3;
  
      $i = 0 if @{ $self->{spans} } == 1;
  
      while (1) {
          my $current = $self->{spans}[$i];
  
          if ( $seconds < $current->[$start] ) {
              $max = $i;
              my $c = int( ( $i - $min ) / 2 );
              $c ||= 1;
  
              $i -= $c;
  
              return if $i < $min;
          }
          elsif ( $seconds >= $current->[$end] ) {
              $min = $i;
              my $c = int( ( $max - $i ) / 2 );
              $c ||= 1;
  
              $i += $c;
  
              return if $i >= $max;
          }
          else {
  
              # Special case for overlapping ranges because of DST and
              # other weirdness (like Alaska's change when bought from
              # Russia by the US).  Always prefer latest span.
              if ( $current->[IS_DST] && $type eq 'local' ) {
  
                  # Asia/Dhaka in 2009j goes into DST without any known
                  # end-of-DST date (wtf, Bangladesh).
                  return $current if $current->[UTC_END] == INFINITY;
  
                  my $next = $self->{spans}[ $i + 1 ];
  
                  # Sometimes we will get here and the span we're
                  # looking at is the last that's been generated so far.
                  # We need to try to generate one more or else we run
                  # out.
                  $next ||= $self->_generate_next_span;
  
                  die "No next span in $self->{max_year}" unless defined $next;
  
                  if (   ( !$next->[IS_DST] )
                      && $next->[$start] <= $seconds
                      && $seconds <= $next->[$end] ) {
                      return $next;
                  }
              }
  
              return $current;
          }
      }
  }
  
  sub _generate_next_span {
      my $self = shift;
  
      my $last_idx = $#{ $self->{spans} };
  
      my $max_span = $self->max_span;
  
      # Kind of a hack, but AFAIK there are no zones where it takes
      # _more_ than a year for a _future_ time zone change to occur, so
      # by looking two years out we can ensure that we will find at
      # least one more span.  Of course, I will no doubt be proved wrong
      # and this will cause errors.
      $self->_generate_spans_until_match(
          $self->{max_year} + 2,
          $max_span->[UTC_END] + ( 366 * 86400 ), 'utc'
      );
  
      return $self->{spans}[ $last_idx + 1 ];
  }
  
  sub _generate_spans_until_match {
      my $self                = shift;
      my $generate_until_year = shift;
      my $seconds             = shift;
      my $type                = shift;
  
      my @changes;
      my @rules = @{ $self->_rules };
      foreach my $year ( $self->{max_year} .. $generate_until_year ) {
          ## no critic (ControlStructures::ProhibitCStyleForLoops)
          for ( my $x = 0; $x < @rules; $x++ ) {
              my $last_offset_from_std;
  
              if ( @rules == 2 ) {
                  $last_offset_from_std
                      = $x
                      ? $rules[0]->offset_from_std
                      : $rules[1]->offset_from_std;
              }
              elsif ( @rules == 1 ) {
                  $last_offset_from_std = $rules[0]->offset_from_std;
              }
              else {
                  my $count = scalar @rules;
                  die
                      "Cannot generate future changes for zone with $count infinite rules\n";
              }
  
              my $rule = $rules[$x];
  
              my $next = $rule->utc_start_datetime_for_year(
                  $year,
                  $self->{last_offset}, $last_offset_from_std
              );
  
              # don't bother with changes we've seen already
              next if $next->utc_rd_as_seconds < $self->max_span->[UTC_END];
  
              push @changes,
                  DateTime::TimeZone::OlsonDB::Change->new(
                  type                 => 'rule',
                  utc_start_datetime   => $next,
                  local_start_datetime => $next + DateTime::Duration->new(
                      seconds => $self->{last_observance}->total_offset
                          + $rule->offset_from_std
                  ),
                  short_name => $self->{last_observance}
                      ->formatted_short_name( $rule->letter ),
                  observance => $self->{last_observance},
                  rule       => $rule,
                  );
          }
      }
  
      $self->{max_year} = $generate_until_year;
  
      my @sorted
          = sort { $a->utc_start_datetime <=> $b->utc_start_datetime } @changes;
  
      my ( $start, $end ) = _keys_for_type($type);
  
      my $match;
      ## no critic (ControlStructures::ProhibitCStyleForLoops)
      for ( my $x = 1; $x < @sorted; $x++ ) {
          my $span = DateTime::TimeZone::OlsonDB::Change::two_changes_as_span(
              @sorted[ $x - 1, $x ] );
  
          $span = _span_as_array($span);
  
          push @{ $self->{spans} }, $span;
  
          $match = $span
              if $seconds >= $span->[$start] && $seconds < $span->[$end];
      }
  
      return $match;
  }
  
  sub max_span { $_[0]->{spans}[-1] }
  
  sub _keys_for_type {
      $_[0] eq 'utc' ? ( UTC_START, UTC_END ) : ( LOCAL_START, LOCAL_END );
  }
  
  sub _span_as_array {
      [
          @{ $_[0] }{
              qw( utc_start utc_end local_start local_end offset is_dst short_name )
          }
      ];
  }
  
  sub is_floating {0}
  
  sub is_utc {0}
  
  sub has_dst_changes {0}
  
  sub name { $_[0]->{name} }
  sub category { ( split /\//, $_[0]->{name}, 2 )[0] }
  
  sub is_valid_name {
      my $class = shift;
      my $name  = shift;
  
      my $tz = try {
          ## no critic (Variables::RequireInitializationForLocalVars)
          local $SIG{__DIE__};
          $class->new( name => $name );
      };
  
      return $tz && $tz->isa('DateTime::TimeZone') ? 1 : 0;
  }
  
  sub STORABLE_freeze {
      my $self = shift;
  
      return $self->name;
  }
  
  sub STORABLE_thaw {
      my $self = shift;
      shift;
      my $serialized = shift;
  
      my $class = ref $self || $self;
  
      my $obj;
      if ( $class->isa(__PACKAGE__) ) {
          $obj = __PACKAGE__->new( name => $serialized );
      }
      else {
          $obj = $class->new( name => $serialized );
      }
  
      %$self = %$obj;
  
      return $self;
  }
  
  #
  # Functions
  #
  sub offset_as_seconds {
      my $offset = shift;
      $offset = shift if try {
          ## no critic (Variables::RequireInitializationForLocalVars)
          local $SIG{__DIE__};
          $offset->isa('DateTime::TimeZone');
      };
  
      return undef unless defined $offset;
  
      return 0 if $offset eq '0';
  
      my ( $sign, $hours, $minutes, $seconds );
      if ( $offset =~ /^([\+\-])?(\d\d?):(\d\d)(?::(\d\d))?$/ ) {
          ( $sign, $hours, $minutes, $seconds ) = ( $1, $2, $3, $4 );
      }
      elsif ( $offset =~ /^([\+\-])?(\d\d)(\d\d)(\d\d)?$/ ) {
          ( $sign, $hours, $minutes, $seconds ) = ( $1, $2, $3, $4 );
      }
      else {
          return undef;
      }
  
      $sign = '+' unless defined $sign;
      return undef unless $hours >= 0   && $hours <= 99;
      return undef unless $minutes >= 0 && $minutes <= 59;
      return undef
          unless !defined($seconds) || ( $seconds >= 0 && $seconds <= 59 );
  
      my $total = $hours * 3600 + $minutes * 60;
      $total += $seconds if $seconds;
      $total *= -1 if $sign eq '-';
  
      return $total;
  }
  
  sub offset_as_string {
      my $offset = shift;
      $offset = shift if try {
          ## no critic (Variables::RequireInitializationForLocalVars)
          local $SIG{__DIE__};
          $offset->isa('DateTime::TimeZone');
      };
  
      return undef unless defined $offset;
      return undef unless $offset >= -359999 && $offset <= 359999;
  
      my $sign = $offset < 0 ? '-' : '+';
  
      $offset = abs($offset);
  
      my $hours = int( $offset / 3600 );
      $offset %= 3600;
      my $mins = int( $offset / 60 );
      $offset %= 60;
      my $secs = int($offset);
  
      return (
          $secs
          ? sprintf( '%s%02d%02d%02d', $sign, $hours, $mins, $secs )
          : sprintf( '%s%02d%02d',     $sign, $hours, $mins )
      );
  }
  
  # These methods all operate on data contained in the DateTime/TimeZone/Catalog.pm file.
  
  sub all_names {
      return wantarray
          ? @DateTime::TimeZone::Catalog::ALL
          : [@DateTime::TimeZone::Catalog::ALL];
  }
  
  sub categories {
      return wantarray
          ? @DateTime::TimeZone::Catalog::CATEGORY_NAMES
          : [@DateTime::TimeZone::Catalog::CATEGORY_NAMES];
  }
  
  sub links {
      return wantarray
          ? %DateTime::TimeZone::Catalog::LINKS
          : {%DateTime::TimeZone::Catalog::LINKS};
  }
  
  sub names_in_category {
      shift if $_[0]->isa('DateTime::TimeZone');
      return unless exists $DateTime::TimeZone::Catalog::CATEGORIES{ $_[0] };
  
      return wantarray
          ? @{ $DateTime::TimeZone::Catalog::CATEGORIES{ $_[0] } }
          : $DateTime::TimeZone::Catalog::CATEGORIES{ $_[0] };
  }
  
  sub countries {
      wantarray
          ? ( sort keys %DateTime::TimeZone::Catalog::ZONES_BY_COUNTRY )
          : [ sort keys %DateTime::TimeZone::Catalog::ZONES_BY_COUNTRY ];
  }
  
  sub names_in_country {
      shift if $_[0]->isa('DateTime::TimeZone');
  
      return
          unless
          exists $DateTime::TimeZone::Catalog::ZONES_BY_COUNTRY{ lc $_[0] };
  
      return
          wantarray
          ? @{ $DateTime::TimeZone::Catalog::ZONES_BY_COUNTRY{ lc $_[0] } }
          : $DateTime::TimeZone::Catalog::ZONES_BY_COUNTRY{ lc $_[0] };
  }
  
  1;
  
  # ABSTRACT: Time zone object base class and factory
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::TimeZone - Time zone object base class and factory
  
  =head1 VERSION
  
  version 2.01
  
  =head1 SYNOPSIS
  
    use DateTime;
    use DateTime::TimeZone;
  
    my $tz = DateTime::TimeZone->new( name => 'America/Chicago' );
  
    my $dt = DateTime->now();
    my $offset = $tz->offset_for_datetime($dt);
  
  =head1 DESCRIPTION
  
  This class is the base class for all time zone objects.  A time zone
  is represented internally as a set of observances, each of which
  describes the offset from GMT for a given time period.
  
  Note that without the L<DateTime> module, this module does not do
  much.  It's primary interface is through a L<DateTime> object, and
  most users will not need to directly use C<DateTime::TimeZone>
  methods.
  
  =head2 Special Case Platforms
  
  If you are on the Win32 platform, you will want to also install
  L<DateTime::TimeZone::Local::Win32>. This will enable you to specify a time
  zone of C<'local'> when creating a L<DateTime> object.
  
  If you are on HPUX, install L<DateTime::TimeZone::HPUX>. This provides support
  for HPUX style time zones like C<'MET-1METDST'>.
  
  =head1 USAGE
  
  This class has the following methods:
  
  =head2 DateTime::TimeZone->new( name => $tz_name )
  
  Given a valid time zone name, this method returns a new time zone
  blessed into the appropriate subclass.  Subclasses are named for the
  given time zone, so that the time zone "America/Chicago" is the
  DateTime::TimeZone::America::Chicago class.
  
  If the name given is a "link" name in the Olson database, the object
  created may have a different name.  For example, there is a link from
  the old "EST5EDT" name to "America/New_York".
  
  When loading a time zone from the Olson database, the constructor
  checks the version of the loaded class to make sure it matches the
  version of the current DateTime::TimeZone installation. If they do not
  match it will issue a warning. This is useful because time zone names
  may fall out of use, but you may have an old module file installed for
  that time zone.
  
  There are also several special values that can be given as names.
  
  If the "name" parameter is "floating", then a
  C<DateTime::TimeZone::Floating> object is returned.  A floating time
  zone does have I<any> offset, and is always the same time.  This is
  useful for calendaring applications, which may need to specify that a
  given event happens at the same I<local> time, regardless of where it
  occurs.  See RFC 2445 for more details.
  
  If the "name" parameter is "UTC", then a C<DateTime::TimeZone::UTC>
  object is returned.
  
  If the "name" is an offset string, it is converted to a number, and a
  C<DateTime::TimeZone::OffsetOnly> object is returned.
  
  =head3 The "local" time zone
  
  If the "name" parameter is "local", then the module attempts to
  determine the local time zone for the system.
  
  The method for finding the local zone varies by operating system. See
  the appropriate module for details of how we check for the local time
  zone.
  
  =over 4
  
  =item * L<DateTime::TimeZone::Local::Unix>
  
  =item * L<DateTime::TimeZone::Local::Win32>
  
  =item * L<DateTime::TimeZone::Local::VMS>
  
  =back
  
  If a local time zone is not found, then an exception will be thrown.
  
  =head2 $tz->offset_for_datetime( $dt )
  
  Given a C<DateTime> object, this method returns the offset in seconds
  for the given datetime.  This takes into account historical time zone
  information, as well as Daylight Saving Time.  The offset is
  determined by looking at the object's UTC Rata Die days and seconds.
  
  =head2 $tz->offset_for_local_datetime( $dt )
  
  Given a C<DateTime> object, this method returns the offset in seconds
  for the given datetime.  Unlike the previous method, this method uses
  the local time's Rata Die days and seconds.  This should only be done
  when the corresponding UTC time is not yet known, because local times
  can be ambiguous due to Daylight Saving Time rules.
  
  =head2 $tz->is_dst_for_datetime( $dt )
  
  Given a C<DateTime> object, this method returns true if the DateTime is
  currently in Daylight Saving Time.
  
  =head2 $tz->name
  
  Returns the name of the time zone.
  
  =head2 $tz->short_name_for_datetime( $dt )
  
  Given a C<DateTime> object, this method returns the "short name" for
  the current observance and rule this datetime is in.  These are names
  like "EST", "GMT", etc.
  
  It is B<strongly> recommended that you do not rely on these names for
  anything other than display.  These names are not official, and many
  of them are simply the invention of the Olson database maintainers.
  Moreover, these names are not unique.  For example, there is an "EST"
  at both -0500 and +1000/+1100.
  
  =head2 $tz->is_floating
  
  Returns a boolean indicating whether or not this object represents a
  floating time zone, as defined by RFC 2445.
  
  =head2 $tz->is_utc
  
  Indicates whether or not this object represents the UTC (GMT) time
  zone.
  
  =head2 $tz->has_dst_changes
  
  Indicates whether or not this zone has I<ever> had a change to and
  from DST, either in the past or future.
  
  =head2 $tz->is_olson
  
  Returns true if the time zone is a named time zone from the Olson
  database.
  
  =head2 $tz->category
  
  Returns the part of the time zone name before the first slash.  For
  example, the "America/Chicago" time zone would return "America".
  
  =head2 DateTime::TimeZone->is_valid_name($name)
  
  Given a string, this method returns a boolean value indicating whether
  or not the string is a valid time zone name.  If you are using
  C<DateTime::TimeZone::Alias>, any aliases you've created will be valid.
  
  =head2 DateTime::TimeZone->all_names
  
  This returns a pre-sorted list of all the time zone names.  This list
  does not include link names.  In scalar context, it returns an array
  reference, while in list context it returns an array.
  
  =head2 DateTime::TimeZone->categories
  
  This returns a list of all time zone categories.  In scalar context,
  it returns an array reference, while in list context it returns an
  array.
  
  =head2 DateTime::TimeZone->links
  
  This returns a hash of all time zone links, where the keys are the
  old, deprecated names, and the values are the new names.  In scalar
  context, it returns a hash reference, while in list context it returns
  a hash.
  
  =head2 DateTime::TimeZone->names_in_category( $category )
  
  Given a valid category, this method returns a list of the names in
  that category, without the category portion.  So the list for the
  "America" category would include the strings "Chicago",
  "Kentucky/Monticello", and "New_York". In scalar context, it returns
  an array reference, while in list context it returns an array.
  
  =head2 DateTime::TimeZone->countries()
  
  Returns a sorted list of all the valid country codes (in lower-case)
  which can be passed to C<names_in_country()>. In scalar context, it
  returns an array reference, while in list context it returns an array.
  
  If you need to convert country codes to names or vice versa you can
  use C<Locale::Country> to do so.
  
  =head2 DateTime::TimeZone->names_in_country( $country_code )
  
  Given a two-letter ISO3166 country code, this method returns a list of
  time zones used in that country. The country code may be of any
  case. In scalar context, it returns an array reference, while in list
  context it returns an array.
  
  This list is returned in an order vaguely based on geography and
  population. In general, the least used zones come last, but there are not
  guarantees of a specific order from one release to the next. This order is
  probably the best option for presenting zones names to end users.
  
  =head2 DateTime::TimeZone->offset_as_seconds( $offset )
  
  Given an offset as a string, this returns the number of seconds
  represented by the offset as a positive or negative number.  Returns
  C<undef> if $offset is not in the range C<-99:59:59> to C<+99:59:59>.
  
  The offset is expected to match either
  C</^([\+\-])?(\d\d?):(\d\d)(?::(\d\d))?$/> or
  C</^([\+\-])?(\d\d)(\d\d)(\d\d)?$/>.  If it doesn't match either of
  these, C<undef> will be returned.
  
  This means that if you want to specify hours as a single digit, then
  each element of the offset must be separated by a colon (:).
  
  =head2 DateTime::TimeZone->offset_as_string( $offset )
  
  Given an offset as a number, this returns the offset as a string.
  Returns C<undef> if $offset is not in the range C<-359999> to C<359999>.
  
  =head2 Storable Hooks
  
  This module provides freeze and thaw hooks for C<Storable> so that the
  huge data structures for Olson time zones are not actually stored in
  the serialized structure.
  
  If you subclass C<DateTime::TimeZone>, you will inherit its hooks,
  which may not work for your module, so please test the interaction of
  your module with Storable.
  
  =head1 DONATIONS
  
  If you'd like to thank me for the work I've done on this module,
  please consider making a "donation" to me via PayPal. I spend a lot of
  free time creating free software, and would appreciate any support
  you'd care to offer.
  
  Please note that B<I am not suggesting that you must do this> in order
  for me to continue working on this particular software. I will
  continue to do so, inasmuch as I have in the past, for as long as it
  interests me.
  
  Similarly, a donation made in this way will probably not make me work
  on this software much more, unless I get so many donations that I can
  consider working on free software full time, which seems unlikely at
  best.
  
  To donate, log into PayPal and send money to autarch@urth.org or use
  the button on this page:
  L<http://www.urth.org/~autarch/fs-donation.html>
  
  =head1 CREDITS
  
  This module was inspired by Jesse Vincent's work on
  Date::ICal::Timezone, and written with much help from the
  datetime@perl.org list.
  
  =head1 SEE ALSO
  
  datetime@perl.org mailing list
  
  http://datetime.perl.org/
  
  The tools directory of the DateTime::TimeZone distribution includes
  two scripts that may be of interest to some people.  They are
  parse_olson and tests_from_zdump.  Please run them with the --help
  flag to see what they can be used for.
  
  =head1 SUPPORT
  
  Support for this module is provided via the datetime@perl.org email list. See
  http://datetime.perl.org/wiki/datetime/page/Mailing_List for details.
  
  Please submit bugs to the CPAN RT system at
  http://rt.cpan.org/NoAuth/ReportBug.html?Queue=datetime%3A%3Atimezone
  or via email at bug-datetime-timezone@rt.cpan.org.
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime-TimeZone>
  (or L<bug-datetime-timezone@rt.cpan.org|mailto:bug-datetime-timezone@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 DONATIONS
  
  If you'd like to thank me for the work I've done on this module, please
  consider making a "donation" to me via PayPal. I spend a lot of free time
  creating free software, and would appreciate any support you'd care to offer.
  
  Please note that B<I am not suggesting that you must do this> in order for me
  to continue working on this particular software. I will continue to do so,
  inasmuch as I have in the past, for as long as it interests me.
  
  Similarly, a donation made in this way will probably not make me work on this
  software much more, unless I get so many donations that I can consider working
  on free software full time (let's all have a chuckle at that together).
  
  To donate, log into PayPal and send money to autarch@urth.org, or use the
  button at L<http://www.urth.org/~autarch/fs-donation.html>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 CONTRIBUTORS
  
  =for stopwords Alexey Molchanov Alfie John Bron Gondwana Daisuke Maki David Pinkowitz Iain Truskett Joshua Hoblitt Karen Etheridge karupanerura Olaf Alders Peter Rabbitson
  
  =over 4
  
  =item *
  
  Alexey Molchanov <alexey.molchanov@gmail.com>
  
  =item *
  
  Alfie John <alfiej@fastmail.fm>
  
  =item *
  
  Bron Gondwana <brong@fastmail.fm>
  
  =item *
  
  Daisuke Maki <dmaki@cpan.org>
  
  =item *
  
  David Pinkowitz <dave@pinkowitz.com>
  
  =item *
  
  Iain Truskett <deceased>
  
  =item *
  
  Joshua Hoblitt <jhoblitt@cpan.org>
  
  =item *
  
  Karen Etheridge <ether@cpan.org>
  
  =item *
  
  karupanerura <karupa@cpan.org>
  
  =item *
  
  Olaf Alders <olaf@wundersolutions.com>
  
  =item *
  
  Peter Rabbitson <ribasushi@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2016 by Dave Rolsky.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATETIME_TIMEZONE

    $main::fatpacked{"DateTime/TimeZone/Africa/Abidjan.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_ABIDJAN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Abidjan;
  $DateTime::TimeZone::Africa::Abidjan::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Abidjan::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60305300168, #      utc_end 1912-01-01 00:16:08 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60305299200, #    local_end 1912-01-01 00:00:00 (Mon)
  -968,
  0,
  'LMT',
      ],
      [
  60305300168, #    utc_start 1912-01-01 00:16:08 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  60305300168, #  local_start 1912-01-01 00:16:08 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  0,
  0,
  'GMT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_ABIDJAN

    $main::fatpacked{"DateTime/TimeZone/Africa/Accra.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_ACCRA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Accra;
  $DateTime::TimeZone::Africa::Accra::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Accra::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60494688052, #      utc_end 1918-01-01 00:00:52 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60494688000, #    local_end 1918-01-01 00:00:00 (Tue)
  -52,
  0,
  'LMT',
      ],
      [
  60494688052, #    utc_start 1918-01-01 00:00:52 (Tue)
  60578841600, #      utc_end 1920-09-01 00:00:00 (Wed)
  60494688052, #  local_start 1918-01-01 00:00:52 (Tue)
  60578841600, #    local_end 1920-09-01 00:00:00 (Wed)
  0,
  0,
  'GMT',
      ],
      [
  60578841600, #    utc_start 1920-09-01 00:00:00 (Wed)
  60589294800, #      utc_end 1920-12-30 23:40:00 (Thu)
  60578842800, #  local_start 1920-09-01 00:20:00 (Wed)
  60589296000, #    local_end 1920-12-31 00:00:00 (Fri)
  1200,
  1,
  'GHST',
      ],
      [
  60589294800, #    utc_start 1920-12-30 23:40:00 (Thu)
  60610377600, #      utc_end 1921-09-01 00:00:00 (Thu)
  60589294800, #  local_start 1920-12-30 23:40:00 (Thu)
  60610377600, #    local_end 1921-09-01 00:00:00 (Thu)
  0,
  0,
  'GMT',
      ],
      [
  60610377600, #    utc_start 1921-09-01 00:00:00 (Thu)
  60620830800, #      utc_end 1921-12-30 23:40:00 (Fri)
  60610378800, #  local_start 1921-09-01 00:20:00 (Thu)
  60620832000, #    local_end 1921-12-31 00:00:00 (Sat)
  1200,
  1,
  'GHST',
      ],
      [
  60620830800, #    utc_start 1921-12-30 23:40:00 (Fri)
  60641913600, #      utc_end 1922-09-01 00:00:00 (Fri)
  60620830800, #  local_start 1921-12-30 23:40:00 (Fri)
  60641913600, #    local_end 1922-09-01 00:00:00 (Fri)
  0,
  0,
  'GMT',
      ],
      [
  60641913600, #    utc_start 1922-09-01 00:00:00 (Fri)
  60652366800, #      utc_end 1922-12-30 23:40:00 (Sat)
  60641914800, #  local_start 1922-09-01 00:20:00 (Fri)
  60652368000, #    local_end 1922-12-31 00:00:00 (Sun)
  1200,
  1,
  'GHST',
      ],
      [
  60652366800, #    utc_start 1922-12-30 23:40:00 (Sat)
  60673449600, #      utc_end 1923-09-01 00:00:00 (Sat)
  60652366800, #  local_start 1922-12-30 23:40:00 (Sat)
  60673449600, #    local_end 1923-09-01 00:00:00 (Sat)
  0,
  0,
  'GMT',
      ],
      [
  60673449600, #    utc_start 1923-09-01 00:00:00 (Sat)
  60683902800, #      utc_end 1923-12-30 23:40:00 (Sun)
  60673450800, #  local_start 1923-09-01 00:20:00 (Sat)
  60683904000, #    local_end 1923-12-31 00:00:00 (Mon)
  1200,
  1,
  'GHST',
      ],
      [
  60683902800, #    utc_start 1923-12-30 23:40:00 (Sun)
  60705072000, #      utc_end 1924-09-01 00:00:00 (Mon)
  60683902800, #  local_start 1923-12-30 23:40:00 (Sun)
  60705072000, #    local_end 1924-09-01 00:00:00 (Mon)
  0,
  0,
  'GMT',
      ],
      [
  60705072000, #    utc_start 1924-09-01 00:00:00 (Mon)
  60715525200, #      utc_end 1924-12-30 23:40:00 (Tue)
  60705073200, #  local_start 1924-09-01 00:20:00 (Mon)
  60715526400, #    local_end 1924-12-31 00:00:00 (Wed)
  1200,
  1,
  'GHST',
      ],
      [
  60715525200, #    utc_start 1924-12-30 23:40:00 (Tue)
  60736608000, #      utc_end 1925-09-01 00:00:00 (Tue)
  60715525200, #  local_start 1924-12-30 23:40:00 (Tue)
  60736608000, #    local_end 1925-09-01 00:00:00 (Tue)
  0,
  0,
  'GMT',
      ],
      [
  60736608000, #    utc_start 1925-09-01 00:00:00 (Tue)
  60747061200, #      utc_end 1925-12-30 23:40:00 (Wed)
  60736609200, #  local_start 1925-09-01 00:20:00 (Tue)
  60747062400, #    local_end 1925-12-31 00:00:00 (Thu)
  1200,
  1,
  'GHST',
      ],
      [
  60747061200, #    utc_start 1925-12-30 23:40:00 (Wed)
  60768144000, #      utc_end 1926-09-01 00:00:00 (Wed)
  60747061200, #  local_start 1925-12-30 23:40:00 (Wed)
  60768144000, #    local_end 1926-09-01 00:00:00 (Wed)
  0,
  0,
  'GMT',
      ],
      [
  60768144000, #    utc_start 1926-09-01 00:00:00 (Wed)
  60778597200, #      utc_end 1926-12-30 23:40:00 (Thu)
  60768145200, #  local_start 1926-09-01 00:20:00 (Wed)
  60778598400, #    local_end 1926-12-31 00:00:00 (Fri)
  1200,
  1,
  'GHST',
      ],
      [
  60778597200, #    utc_start 1926-12-30 23:40:00 (Thu)
  60799680000, #      utc_end 1927-09-01 00:00:00 (Thu)
  60778597200, #  local_start 1926-12-30 23:40:00 (Thu)
  60799680000, #    local_end 1927-09-01 00:00:00 (Thu)
  0,
  0,
  'GMT',
      ],
      [
  60799680000, #    utc_start 1927-09-01 00:00:00 (Thu)
  60810133200, #      utc_end 1927-12-30 23:40:00 (Fri)
  60799681200, #  local_start 1927-09-01 00:20:00 (Thu)
  60810134400, #    local_end 1927-12-31 00:00:00 (Sat)
  1200,
  1,
  'GHST',
      ],
      [
  60810133200, #    utc_start 1927-12-30 23:40:00 (Fri)
  60831302400, #      utc_end 1928-09-01 00:00:00 (Sat)
  60810133200, #  local_start 1927-12-30 23:40:00 (Fri)
  60831302400, #    local_end 1928-09-01 00:00:00 (Sat)
  0,
  0,
  'GMT',
      ],
      [
  60831302400, #    utc_start 1928-09-01 00:00:00 (Sat)
  60841755600, #      utc_end 1928-12-30 23:40:00 (Sun)
  60831303600, #  local_start 1928-09-01 00:20:00 (Sat)
  60841756800, #    local_end 1928-12-31 00:00:00 (Mon)
  1200,
  1,
  'GHST',
      ],
      [
  60841755600, #    utc_start 1928-12-30 23:40:00 (Sun)
  60862838400, #      utc_end 1929-09-01 00:00:00 (Sun)
  60841755600, #  local_start 1928-12-30 23:40:00 (Sun)
  60862838400, #    local_end 1929-09-01 00:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60862838400, #    utc_start 1929-09-01 00:00:00 (Sun)
  60873291600, #      utc_end 1929-12-30 23:40:00 (Mon)
  60862839600, #  local_start 1929-09-01 00:20:00 (Sun)
  60873292800, #    local_end 1929-12-31 00:00:00 (Tue)
  1200,
  1,
  'GHST',
      ],
      [
  60873291600, #    utc_start 1929-12-30 23:40:00 (Mon)
  60894374400, #      utc_end 1930-09-01 00:00:00 (Mon)
  60873291600, #  local_start 1929-12-30 23:40:00 (Mon)
  60894374400, #    local_end 1930-09-01 00:00:00 (Mon)
  0,
  0,
  'GMT',
      ],
      [
  60894374400, #    utc_start 1930-09-01 00:00:00 (Mon)
  60904827600, #      utc_end 1930-12-30 23:40:00 (Tue)
  60894375600, #  local_start 1930-09-01 00:20:00 (Mon)
  60904828800, #    local_end 1930-12-31 00:00:00 (Wed)
  1200,
  1,
  'GHST',
      ],
      [
  60904827600, #    utc_start 1930-12-30 23:40:00 (Tue)
  60925910400, #      utc_end 1931-09-01 00:00:00 (Tue)
  60904827600, #  local_start 1930-12-30 23:40:00 (Tue)
  60925910400, #    local_end 1931-09-01 00:00:00 (Tue)
  0,
  0,
  'GMT',
      ],
      [
  60925910400, #    utc_start 1931-09-01 00:00:00 (Tue)
  60936363600, #      utc_end 1931-12-30 23:40:00 (Wed)
  60925911600, #  local_start 1931-09-01 00:20:00 (Tue)
  60936364800, #    local_end 1931-12-31 00:00:00 (Thu)
  1200,
  1,
  'GHST',
      ],
      [
  60936363600, #    utc_start 1931-12-30 23:40:00 (Wed)
  60957532800, #      utc_end 1932-09-01 00:00:00 (Thu)
  60936363600, #  local_start 1931-12-30 23:40:00 (Wed)
  60957532800, #    local_end 1932-09-01 00:00:00 (Thu)
  0,
  0,
  'GMT',
      ],
      [
  60957532800, #    utc_start 1932-09-01 00:00:00 (Thu)
  60967986000, #      utc_end 1932-12-30 23:40:00 (Fri)
  60957534000, #  local_start 1932-09-01 00:20:00 (Thu)
  60967987200, #    local_end 1932-12-31 00:00:00 (Sat)
  1200,
  1,
  'GHST',
      ],
      [
  60967986000, #    utc_start 1932-12-30 23:40:00 (Fri)
  60989068800, #      utc_end 1933-09-01 00:00:00 (Fri)
  60967986000, #  local_start 1932-12-30 23:40:00 (Fri)
  60989068800, #    local_end 1933-09-01 00:00:00 (Fri)
  0,
  0,
  'GMT',
      ],
      [
  60989068800, #    utc_start 1933-09-01 00:00:00 (Fri)
  60999522000, #      utc_end 1933-12-30 23:40:00 (Sat)
  60989070000, #  local_start 1933-09-01 00:20:00 (Fri)
  60999523200, #    local_end 1933-12-31 00:00:00 (Sun)
  1200,
  1,
  'GHST',
      ],
      [
  60999522000, #    utc_start 1933-12-30 23:40:00 (Sat)
  61020604800, #      utc_end 1934-09-01 00:00:00 (Sat)
  60999522000, #  local_start 1933-12-30 23:40:00 (Sat)
  61020604800, #    local_end 1934-09-01 00:00:00 (Sat)
  0,
  0,
  'GMT',
      ],
      [
  61020604800, #    utc_start 1934-09-01 00:00:00 (Sat)
  61031058000, #      utc_end 1934-12-30 23:40:00 (Sun)
  61020606000, #  local_start 1934-09-01 00:20:00 (Sat)
  61031059200, #    local_end 1934-12-31 00:00:00 (Mon)
  1200,
  1,
  'GHST',
      ],
      [
  61031058000, #    utc_start 1934-12-30 23:40:00 (Sun)
  61052140800, #      utc_end 1935-09-01 00:00:00 (Sun)
  61031058000, #  local_start 1934-12-30 23:40:00 (Sun)
  61052140800, #    local_end 1935-09-01 00:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61052140800, #    utc_start 1935-09-01 00:00:00 (Sun)
  61062594000, #      utc_end 1935-12-30 23:40:00 (Mon)
  61052142000, #  local_start 1935-09-01 00:20:00 (Sun)
  61062595200, #    local_end 1935-12-31 00:00:00 (Tue)
  1200,
  1,
  'GHST',
      ],
      [
  61062594000, #    utc_start 1935-12-30 23:40:00 (Mon)
  61083763200, #      utc_end 1936-09-01 00:00:00 (Tue)
  61062594000, #  local_start 1935-12-30 23:40:00 (Mon)
  61083763200, #    local_end 1936-09-01 00:00:00 (Tue)
  0,
  0,
  'GMT',
      ],
      [
  61083763200, #    utc_start 1936-09-01 00:00:00 (Tue)
  61094216400, #      utc_end 1936-12-30 23:40:00 (Wed)
  61083764400, #  local_start 1936-09-01 00:20:00 (Tue)
  61094217600, #    local_end 1936-12-31 00:00:00 (Thu)
  1200,
  1,
  'GHST',
      ],
      [
  61094216400, #    utc_start 1936-12-30 23:40:00 (Wed)
  61115299200, #      utc_end 1937-09-01 00:00:00 (Wed)
  61094216400, #  local_start 1936-12-30 23:40:00 (Wed)
  61115299200, #    local_end 1937-09-01 00:00:00 (Wed)
  0,
  0,
  'GMT',
      ],
      [
  61115299200, #    utc_start 1937-09-01 00:00:00 (Wed)
  61125752400, #      utc_end 1937-12-30 23:40:00 (Thu)
  61115300400, #  local_start 1937-09-01 00:20:00 (Wed)
  61125753600, #    local_end 1937-12-31 00:00:00 (Fri)
  1200,
  1,
  'GHST',
      ],
      [
  61125752400, #    utc_start 1937-12-30 23:40:00 (Thu)
  61146835200, #      utc_end 1938-09-01 00:00:00 (Thu)
  61125752400, #  local_start 1937-12-30 23:40:00 (Thu)
  61146835200, #    local_end 1938-09-01 00:00:00 (Thu)
  0,
  0,
  'GMT',
      ],
      [
  61146835200, #    utc_start 1938-09-01 00:00:00 (Thu)
  61157288400, #      utc_end 1938-12-30 23:40:00 (Fri)
  61146836400, #  local_start 1938-09-01 00:20:00 (Thu)
  61157289600, #    local_end 1938-12-31 00:00:00 (Sat)
  1200,
  1,
  'GHST',
      ],
      [
  61157288400, #    utc_start 1938-12-30 23:40:00 (Fri)
  61178371200, #      utc_end 1939-09-01 00:00:00 (Fri)
  61157288400, #  local_start 1938-12-30 23:40:00 (Fri)
  61178371200, #    local_end 1939-09-01 00:00:00 (Fri)
  0,
  0,
  'GMT',
      ],
      [
  61178371200, #    utc_start 1939-09-01 00:00:00 (Fri)
  61188824400, #      utc_end 1939-12-30 23:40:00 (Sat)
  61178372400, #  local_start 1939-09-01 00:20:00 (Fri)
  61188825600, #    local_end 1939-12-31 00:00:00 (Sun)
  1200,
  1,
  'GHST',
      ],
      [
  61188824400, #    utc_start 1939-12-30 23:40:00 (Sat)
  61209993600, #      utc_end 1940-09-01 00:00:00 (Sun)
  61188824400, #  local_start 1939-12-30 23:40:00 (Sat)
  61209993600, #    local_end 1940-09-01 00:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61209993600, #    utc_start 1940-09-01 00:00:00 (Sun)
  61220446800, #      utc_end 1940-12-30 23:40:00 (Mon)
  61209994800, #  local_start 1940-09-01 00:20:00 (Sun)
  61220448000, #    local_end 1940-12-31 00:00:00 (Tue)
  1200,
  1,
  'GHST',
      ],
      [
  61220446800, #    utc_start 1940-12-30 23:40:00 (Mon)
  61241529600, #      utc_end 1941-09-01 00:00:00 (Mon)
  61220446800, #  local_start 1940-12-30 23:40:00 (Mon)
  61241529600, #    local_end 1941-09-01 00:00:00 (Mon)
  0,
  0,
  'GMT',
      ],
      [
  61241529600, #    utc_start 1941-09-01 00:00:00 (Mon)
  61251982800, #      utc_end 1941-12-30 23:40:00 (Tue)
  61241530800, #  local_start 1941-09-01 00:20:00 (Mon)
  61251984000, #    local_end 1941-12-31 00:00:00 (Wed)
  1200,
  1,
  'GHST',
      ],
      [
  61251982800, #    utc_start 1941-12-30 23:40:00 (Tue)
  61273065600, #      utc_end 1942-09-01 00:00:00 (Tue)
  61251982800, #  local_start 1941-12-30 23:40:00 (Tue)
  61273065600, #    local_end 1942-09-01 00:00:00 (Tue)
  0,
  0,
  'GMT',
      ],
      [
  61273065600, #    utc_start 1942-09-01 00:00:00 (Tue)
  61283518800, #      utc_end 1942-12-30 23:40:00 (Wed)
  61273066800, #  local_start 1942-09-01 00:20:00 (Tue)
  61283520000, #    local_end 1942-12-31 00:00:00 (Thu)
  1200,
  1,
  'GHST',
      ],
      [
  61283518800, #    utc_start 1942-12-30 23:40:00 (Wed)
  DateTime::TimeZone::INFINITY, #      utc_end
  61283518800, #  local_start 1942-12-30 23:40:00 (Wed)
  DateTime::TimeZone::INFINITY, #    local_end
  0,
  0,
  'GMT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {23}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_ACCRA

    $main::fatpacked{"DateTime/TimeZone/Africa/Algiers.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_ALGIERS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Algiers;
  $DateTime::TimeZone::Africa::Algiers::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Algiers::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59649004128, #      utc_end 1891-03-14 23:48:48 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59649004860, #    local_end 1891-03-15 00:01:00 (Sun)
  732,
  0,
  'LMT',
      ],
      [
  59649004128, #    utc_start 1891-03-14 23:48:48 (Sat)
  60279724239, #      utc_end 1911-03-10 23:50:39 (Fri)
  59649004689, #  local_start 1891-03-14 23:58:09 (Sat)
  60279724800, #    local_end 1911-03-11 00:00:00 (Sat)
  561,
  0,
  'PMT',
      ],
      [
  60279724239, #    utc_start 1911-03-10 23:50:39 (Fri)
  60445868400, #      utc_end 1916-06-14 23:00:00 (Wed)
  60279724239, #  local_start 1911-03-10 23:50:39 (Fri)
  60445868400, #    local_end 1916-06-14 23:00:00 (Wed)
  0,
  0,
  'WET',
      ],
      [
  60445868400, #    utc_start 1916-06-14 23:00:00 (Wed)
  60455286000, #      utc_end 1916-10-01 23:00:00 (Sun)
  60445872000, #  local_start 1916-06-15 00:00:00 (Thu)
  60455289600, #    local_end 1916-10-02 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  60455286000, #    utc_start 1916-10-01 23:00:00 (Sun)
  60470319600, #      utc_end 1917-03-24 23:00:00 (Sat)
  60455286000, #  local_start 1916-10-01 23:00:00 (Sun)
  60470319600, #    local_end 1917-03-24 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60470319600, #    utc_start 1917-03-24 23:00:00 (Sat)
  60487340400, #      utc_end 1917-10-07 23:00:00 (Sun)
  60470323200, #  local_start 1917-03-25 00:00:00 (Sun)
  60487344000, #    local_end 1917-10-08 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  60487340400, #    utc_start 1917-10-07 23:00:00 (Sun)
  60500559600, #      utc_end 1918-03-09 23:00:00 (Sat)
  60487340400, #  local_start 1917-10-07 23:00:00 (Sun)
  60500559600, #    local_end 1918-03-09 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60500559600, #    utc_start 1918-03-09 23:00:00 (Sat)
  60518790000, #      utc_end 1918-10-06 23:00:00 (Sun)
  60500563200, #  local_start 1918-03-10 00:00:00 (Sun)
  60518793600, #    local_end 1918-10-07 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  60518790000, #    utc_start 1918-10-06 23:00:00 (Sun)
  60531404400, #      utc_end 1919-03-01 23:00:00 (Sat)
  60518790000, #  local_start 1918-10-06 23:00:00 (Sun)
  60531404400, #    local_end 1919-03-01 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60531404400, #    utc_start 1919-03-01 23:00:00 (Sat)
  60550239600, #      utc_end 1919-10-05 23:00:00 (Sun)
  60531408000, #  local_start 1919-03-02 00:00:00 (Sun)
  60550243200, #    local_end 1919-10-06 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  60550239600, #    utc_start 1919-10-05 23:00:00 (Sun)
  60561644400, #      utc_end 1920-02-14 23:00:00 (Sat)
  60550239600, #  local_start 1919-10-05 23:00:00 (Sun)
  60561644400, #    local_end 1920-02-14 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60561644400, #    utc_start 1920-02-14 23:00:00 (Sat)
  60583417200, #      utc_end 1920-10-23 23:00:00 (Sat)
  60561648000, #  local_start 1920-02-15 00:00:00 (Sun)
  60583420800, #    local_end 1920-10-24 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60583417200, #    utc_start 1920-10-23 23:00:00 (Sat)
  60595686000, #      utc_end 1921-03-14 23:00:00 (Mon)
  60583417200, #  local_start 1920-10-23 23:00:00 (Sat)
  60595686000, #    local_end 1921-03-14 23:00:00 (Mon)
  0,
  0,
  'WET',
      ],
      [
  60595686000, #    utc_start 1921-03-14 23:00:00 (Mon)
  60604239600, #      utc_end 1921-06-21 23:00:00 (Tue)
  60595689600, #  local_start 1921-03-15 00:00:00 (Tue)
  60604243200, #    local_end 1921-06-22 00:00:00 (Wed)
  3600,
  1,
  'WEST',
      ],
      [
  60604239600, #    utc_start 1921-06-21 23:00:00 (Tue)
  61179318000, #      utc_end 1939-09-11 23:00:00 (Mon)
  60604239600, #  local_start 1921-06-21 23:00:00 (Tue)
  61179318000, #    local_end 1939-09-11 23:00:00 (Mon)
  0,
  0,
  'WET',
      ],
      [
  61179318000, #    utc_start 1939-09-11 23:00:00 (Mon)
  61185196800, #      utc_end 1939-11-19 00:00:00 (Sun)
  61179321600, #  local_start 1939-09-12 00:00:00 (Tue)
  61185200400, #    local_end 1939-11-19 01:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61185196800, #    utc_start 1939-11-19 00:00:00 (Sun)
  61193671200, #      utc_end 1940-02-25 02:00:00 (Sun)
  61185196800, #  local_start 1939-11-19 00:00:00 (Sun)
  61193671200, #    local_end 1940-02-25 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61193671200, #    utc_start 1940-02-25 02:00:00 (Sun)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61193674800, #  local_start 1940-02-25 03:00:00 (Sun)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61339420800, #      utc_end 1944-10-08 00:00:00 (Sun)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61339428000, #    local_end 1944-10-08 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61339420800, #    utc_start 1944-10-08 00:00:00 (Sun)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61339424400, #  local_start 1944-10-08 01:00:00 (Sun)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61369052400, #      utc_end 1945-09-15 23:00:00 (Sat)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61369059600, #    local_end 1945-09-16 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61369052400, #    utc_start 1945-09-15 23:00:00 (Sat)
  61402402800, #      utc_end 1946-10-06 23:00:00 (Sun)
  61369056000, #  local_start 1945-09-16 00:00:00 (Sun)
  61402406400, #    local_end 1946-10-07 00:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61402402800, #    utc_start 1946-10-06 23:00:00 (Sun)
  61696252800, #      utc_end 1956-01-29 00:00:00 (Sun)
  61402402800, #  local_start 1946-10-06 23:00:00 (Sun)
  61696252800, #    local_end 1956-01-29 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61696252800, #    utc_start 1956-01-29 00:00:00 (Sun)
  61923654000, #      utc_end 1963-04-13 23:00:00 (Sat)
  61696256400, #  local_start 1956-01-29 01:00:00 (Sun)
  61923657600, #    local_end 1963-04-14 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61923654000, #    utc_start 1963-04-13 23:00:00 (Sat)
  62177151600, #      utc_end 1971-04-25 23:00:00 (Sun)
  61923654000, #  local_start 1963-04-13 23:00:00 (Sat)
  62177151600, #    local_end 1971-04-25 23:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62177151600, #    utc_start 1971-04-25 23:00:00 (Sun)
  62190457200, #      utc_end 1971-09-26 23:00:00 (Sun)
  62177155200, #  local_start 1971-04-26 00:00:00 (Mon)
  62190460800, #    local_end 1971-09-27 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  62190457200, #    utc_start 1971-09-26 23:00:00 (Sun)
  62367408000, #      utc_end 1977-05-06 00:00:00 (Fri)
  62190457200, #  local_start 1971-09-26 23:00:00 (Sun)
  62367408000, #    local_end 1977-05-06 00:00:00 (Fri)
  0,
  0,
  'WET',
      ],
      [
  62367408000, #    utc_start 1977-05-06 00:00:00 (Fri)
  62381919600, #      utc_end 1977-10-20 23:00:00 (Thu)
  62367411600, #  local_start 1977-05-06 01:00:00 (Fri)
  62381923200, #    local_end 1977-10-21 00:00:00 (Fri)
  3600,
  1,
  'WEST',
      ],
      [
  62381919600, #    utc_start 1977-10-20 23:00:00 (Thu)
  62395228800, #      utc_end 1978-03-24 00:00:00 (Fri)
  62381923200, #  local_start 1977-10-21 00:00:00 (Fri)
  62395232400, #    local_end 1978-03-24 01:00:00 (Fri)
  3600,
  0,
  'CET',
      ],
      [
  62395228800, #    utc_start 1978-03-24 00:00:00 (Fri)
  62410957200, #      utc_end 1978-09-22 01:00:00 (Fri)
  62395236000, #  local_start 1978-03-24 02:00:00 (Fri)
  62410964400, #    local_end 1978-09-22 03:00:00 (Fri)
  7200,
  1,
  'CEST',
      ],
      [
  62410957200, #    utc_start 1978-09-22 01:00:00 (Fri)
  62445423600, #      utc_end 1979-10-25 23:00:00 (Thu)
  62410960800, #  local_start 1978-09-22 02:00:00 (Fri)
  62445427200, #    local_end 1979-10-26 00:00:00 (Fri)
  3600,
  0,
  'CET',
      ],
      [
  62445423600, #    utc_start 1979-10-25 23:00:00 (Thu)
  62461152000, #      utc_end 1980-04-25 00:00:00 (Fri)
  62445423600, #  local_start 1979-10-25 23:00:00 (Thu)
  62461152000, #    local_end 1980-04-25 00:00:00 (Fri)
  0,
  0,
  'WET',
      ],
      [
  62461152000, #    utc_start 1980-04-25 00:00:00 (Fri)
  62477485200, #      utc_end 1980-10-31 01:00:00 (Fri)
  62461155600, #  local_start 1980-04-25 01:00:00 (Fri)
  62477488800, #    local_end 1980-10-31 02:00:00 (Fri)
  3600,
  1,
  'WEST',
      ],
      [
  62477485200, #    utc_start 1980-10-31 01:00:00 (Fri)
  62493206400, #      utc_end 1981-05-01 00:00:00 (Fri)
  62477485200, #  local_start 1980-10-31 01:00:00 (Fri)
  62493206400, #    local_end 1981-05-01 00:00:00 (Fri)
  0,
  0,
  'WET',
      ],
      [
  62493206400, #    utc_start 1981-05-01 00:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #      utc_end
  62493210000, #  local_start 1981-05-01 01:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #    local_end
  3600,
  0,
  'CET',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {13}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_ALGIERS

    $main::fatpacked{"DateTime/TimeZone/Africa/Bissau.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_BISSAU';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Bissau;
  $DateTime::TimeZone::Africa::Bissau::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Bissau::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60305302940, #      utc_end 1912-01-01 01:02:20 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60305299200, #    local_end 1912-01-01 00:00:00 (Mon)
  -3740,
  0,
  'LMT',
      ],
      [
  60305302940, #    utc_start 1912-01-01 01:02:20 (Mon)
  62293453200, #      utc_end 1975-01-01 01:00:00 (Wed)
  60305299340, #  local_start 1912-01-01 00:02:20 (Mon)
  62293449600, #    local_end 1975-01-01 00:00:00 (Wed)
  -3600,
  0,
  'WAT',
      ],
      [
  62293453200, #    utc_start 1975-01-01 01:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #      utc_end
  62293453200, #  local_start 1975-01-01 01:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #    local_end
  0,
  0,
  'GMT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_BISSAU

    $main::fatpacked{"DateTime/TimeZone/Africa/Cairo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_CAIRO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Cairo;
  $DateTime::TimeZone::Africa::Cairo::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Cairo::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59950274091, #      utc_end 1900-09-30 21:54:51 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59950281600, #    local_end 1900-10-01 00:00:00 (Mon)
  7509,
  0,
  'LMT',
      ],
      [
  59950274091, #    utc_start 1900-09-30 21:54:51 (Sun)
  61205839200, #      utc_end 1940-07-14 22:00:00 (Sun)
  59950281291, #  local_start 1900-09-30 23:54:51 (Sun)
  61205846400, #    local_end 1940-07-15 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  61205839200, #    utc_start 1940-07-14 22:00:00 (Sun)
  61212574800, #      utc_end 1940-09-30 21:00:00 (Mon)
  61205850000, #  local_start 1940-07-15 01:00:00 (Mon)
  61212585600, #    local_end 1940-10-01 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  61212574800, #    utc_start 1940-09-30 21:00:00 (Mon)
  61229512800, #      utc_end 1941-04-14 22:00:00 (Mon)
  61212582000, #  local_start 1940-09-30 23:00:00 (Mon)
  61229520000, #    local_end 1941-04-15 00:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  61229512800, #    utc_start 1941-04-14 22:00:00 (Mon)
  61242814800, #      utc_end 1941-09-15 21:00:00 (Mon)
  61229523600, #  local_start 1941-04-15 01:00:00 (Tue)
  61242825600, #    local_end 1941-09-16 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  61242814800, #    utc_start 1941-09-15 21:00:00 (Mon)
  61259839200, #      utc_end 1942-03-31 22:00:00 (Tue)
  61242822000, #  local_start 1941-09-15 23:00:00 (Mon)
  61259846400, #    local_end 1942-04-01 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  61259839200, #    utc_start 1942-03-31 22:00:00 (Tue)
  61277893200, #      utc_end 1942-10-26 21:00:00 (Mon)
  61259850000, #  local_start 1942-04-01 01:00:00 (Wed)
  61277904000, #    local_end 1942-10-27 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  61277893200, #    utc_start 1942-10-26 21:00:00 (Mon)
  61291375200, #      utc_end 1943-03-31 22:00:00 (Wed)
  61277900400, #  local_start 1942-10-26 23:00:00 (Mon)
  61291382400, #    local_end 1943-04-01 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  61291375200, #    utc_start 1943-03-31 22:00:00 (Wed)
  61309861200, #      utc_end 1943-10-31 21:00:00 (Sun)
  61291386000, #  local_start 1943-04-01 01:00:00 (Thu)
  61309872000, #    local_end 1943-11-01 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  61309861200, #    utc_start 1943-10-31 21:00:00 (Sun)
  61322997600, #      utc_end 1944-03-31 22:00:00 (Fri)
  61309868400, #  local_start 1943-10-31 23:00:00 (Sun)
  61323004800, #    local_end 1944-04-01 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  61322997600, #    utc_start 1944-03-31 22:00:00 (Fri)
  61341483600, #      utc_end 1944-10-31 21:00:00 (Tue)
  61323008400, #  local_start 1944-04-01 01:00:00 (Sat)
  61341494400, #    local_end 1944-11-01 00:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  61341483600, #    utc_start 1944-10-31 21:00:00 (Tue)
  61355829600, #      utc_end 1945-04-15 22:00:00 (Sun)
  61341490800, #  local_start 1944-10-31 23:00:00 (Tue)
  61355836800, #    local_end 1945-04-16 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  61355829600, #    utc_start 1945-04-15 22:00:00 (Sun)
  61373019600, #      utc_end 1945-10-31 21:00:00 (Wed)
  61355840400, #  local_start 1945-04-16 01:00:00 (Mon)
  61373030400, #    local_end 1945-11-01 00:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  61373019600, #    utc_start 1945-10-31 21:00:00 (Wed)
  61736594400, #      utc_end 1957-05-09 22:00:00 (Thu)
  61373026800, #  local_start 1945-10-31 23:00:00 (Wed)
  61736601600, #    local_end 1957-05-10 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  61736594400, #    utc_start 1957-05-09 22:00:00 (Thu)
  61749032400, #      utc_end 1957-09-30 21:00:00 (Mon)
  61736605200, #  local_start 1957-05-10 01:00:00 (Fri)
  61749043200, #    local_end 1957-10-01 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  61749032400, #    utc_start 1957-09-30 21:00:00 (Mon)
  61767352800, #      utc_end 1958-04-30 22:00:00 (Wed)
  61749039600, #  local_start 1957-09-30 23:00:00 (Mon)
  61767360000, #    local_end 1958-05-01 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  61767352800, #    utc_start 1958-04-30 22:00:00 (Wed)
  61780568400, #      utc_end 1958-09-30 21:00:00 (Tue)
  61767363600, #  local_start 1958-05-01 01:00:00 (Thu)
  61780579200, #    local_end 1958-10-01 00:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  61780568400, #    utc_start 1958-09-30 21:00:00 (Tue)
  61798892400, #      utc_end 1959-04-30 23:00:00 (Thu)
  61780575600, #  local_start 1958-09-30 23:00:00 (Tue)
  61798899600, #    local_end 1959-05-01 01:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  61798892400, #    utc_start 1959-04-30 23:00:00 (Thu)
  61812028800, #      utc_end 1959-09-30 00:00:00 (Wed)
  61798903200, #  local_start 1959-05-01 02:00:00 (Fri)
  61812039600, #    local_end 1959-09-30 03:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  61812028800, #    utc_start 1959-09-30 00:00:00 (Wed)
  61830514800, #      utc_end 1960-04-30 23:00:00 (Sat)
  61812036000, #  local_start 1959-09-30 02:00:00 (Wed)
  61830522000, #    local_end 1960-05-01 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61830514800, #    utc_start 1960-04-30 23:00:00 (Sat)
  61843651200, #      utc_end 1960-09-30 00:00:00 (Fri)
  61830525600, #  local_start 1960-05-01 02:00:00 (Sun)
  61843662000, #    local_end 1960-09-30 03:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  61843651200, #    utc_start 1960-09-30 00:00:00 (Fri)
  61862050800, #      utc_end 1961-04-30 23:00:00 (Sun)
  61843658400, #  local_start 1960-09-30 02:00:00 (Fri)
  61862058000, #    local_end 1961-05-01 01:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  61862050800, #    utc_start 1961-04-30 23:00:00 (Sun)
  61875187200, #      utc_end 1961-09-30 00:00:00 (Sat)
  61862061600, #  local_start 1961-05-01 02:00:00 (Mon)
  61875198000, #    local_end 1961-09-30 03:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  61875187200, #    utc_start 1961-09-30 00:00:00 (Sat)
  61893586800, #      utc_end 1962-04-30 23:00:00 (Mon)
  61875194400, #  local_start 1961-09-30 02:00:00 (Sat)
  61893594000, #    local_end 1962-05-01 01:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  61893586800, #    utc_start 1962-04-30 23:00:00 (Mon)
  61906723200, #      utc_end 1962-09-30 00:00:00 (Sun)
  61893597600, #  local_start 1962-05-01 02:00:00 (Tue)
  61906734000, #    local_end 1962-09-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61906723200, #    utc_start 1962-09-30 00:00:00 (Sun)
  61925122800, #      utc_end 1963-04-30 23:00:00 (Tue)
  61906730400, #  local_start 1962-09-30 02:00:00 (Sun)
  61925130000, #    local_end 1963-05-01 01:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  61925122800, #    utc_start 1963-04-30 23:00:00 (Tue)
  61938259200, #      utc_end 1963-09-30 00:00:00 (Mon)
  61925133600, #  local_start 1963-05-01 02:00:00 (Wed)
  61938270000, #    local_end 1963-09-30 03:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  61938259200, #    utc_start 1963-09-30 00:00:00 (Mon)
  61956745200, #      utc_end 1964-04-30 23:00:00 (Thu)
  61938266400, #  local_start 1963-09-30 02:00:00 (Mon)
  61956752400, #    local_end 1964-05-01 01:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  61956745200, #    utc_start 1964-04-30 23:00:00 (Thu)
  61969881600, #      utc_end 1964-09-30 00:00:00 (Wed)
  61956756000, #  local_start 1964-05-01 02:00:00 (Fri)
  61969892400, #    local_end 1964-09-30 03:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  61969881600, #    utc_start 1964-09-30 00:00:00 (Wed)
  61988281200, #      utc_end 1965-04-30 23:00:00 (Fri)
  61969888800, #  local_start 1964-09-30 02:00:00 (Wed)
  61988288400, #    local_end 1965-05-01 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  61988281200, #    utc_start 1965-04-30 23:00:00 (Fri)
  62001417600, #      utc_end 1965-09-30 00:00:00 (Thu)
  61988292000, #  local_start 1965-05-01 02:00:00 (Sat)
  62001428400, #    local_end 1965-09-30 03:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  62001417600, #    utc_start 1965-09-30 00:00:00 (Thu)
  62019817200, #      utc_end 1966-04-30 23:00:00 (Sat)
  62001424800, #  local_start 1965-09-30 02:00:00 (Thu)
  62019824400, #    local_end 1966-05-01 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62019817200, #    utc_start 1966-04-30 23:00:00 (Sat)
  62033040000, #      utc_end 1966-10-01 00:00:00 (Sat)
  62019828000, #  local_start 1966-05-01 02:00:00 (Sun)
  62033050800, #    local_end 1966-10-01 03:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62033040000, #    utc_start 1966-10-01 00:00:00 (Sat)
  62051353200, #      utc_end 1967-04-30 23:00:00 (Sun)
  62033047200, #  local_start 1966-10-01 02:00:00 (Sat)
  62051360400, #    local_end 1967-05-01 01:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  62051353200, #    utc_start 1967-04-30 23:00:00 (Sun)
  62064576000, #      utc_end 1967-10-01 00:00:00 (Sun)
  62051364000, #  local_start 1967-05-01 02:00:00 (Mon)
  62064586800, #    local_end 1967-10-01 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62064576000, #    utc_start 1967-10-01 00:00:00 (Sun)
  62082975600, #      utc_end 1968-04-30 23:00:00 (Tue)
  62064583200, #  local_start 1967-10-01 02:00:00 (Sun)
  62082982800, #    local_end 1968-05-01 01:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62082975600, #    utc_start 1968-04-30 23:00:00 (Tue)
  62096198400, #      utc_end 1968-10-01 00:00:00 (Tue)
  62082986400, #  local_start 1968-05-01 02:00:00 (Wed)
  62096209200, #    local_end 1968-10-01 03:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  62096198400, #    utc_start 1968-10-01 00:00:00 (Tue)
  62114511600, #      utc_end 1969-04-30 23:00:00 (Wed)
  62096205600, #  local_start 1968-10-01 02:00:00 (Tue)
  62114518800, #    local_end 1969-05-01 01:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  62114511600, #    utc_start 1969-04-30 23:00:00 (Wed)
  62127734400, #      utc_end 1969-10-01 00:00:00 (Wed)
  62114522400, #  local_start 1969-05-01 02:00:00 (Thu)
  62127745200, #    local_end 1969-10-01 03:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  62127734400, #    utc_start 1969-10-01 00:00:00 (Wed)
  62146047600, #      utc_end 1970-04-30 23:00:00 (Thu)
  62127741600, #  local_start 1969-10-01 02:00:00 (Wed)
  62146054800, #    local_end 1970-05-01 01:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62146047600, #    utc_start 1970-04-30 23:00:00 (Thu)
  62159270400, #      utc_end 1970-10-01 00:00:00 (Thu)
  62146058400, #  local_start 1970-05-01 02:00:00 (Fri)
  62159281200, #    local_end 1970-10-01 03:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  62159270400, #    utc_start 1970-10-01 00:00:00 (Thu)
  62177583600, #      utc_end 1971-04-30 23:00:00 (Fri)
  62159277600, #  local_start 1970-10-01 02:00:00 (Thu)
  62177590800, #    local_end 1971-05-01 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62177583600, #    utc_start 1971-04-30 23:00:00 (Fri)
  62190806400, #      utc_end 1971-10-01 00:00:00 (Fri)
  62177594400, #  local_start 1971-05-01 02:00:00 (Sat)
  62190817200, #    local_end 1971-10-01 03:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62190806400, #    utc_start 1971-10-01 00:00:00 (Fri)
  62209206000, #      utc_end 1972-04-30 23:00:00 (Sun)
  62190813600, #  local_start 1971-10-01 02:00:00 (Fri)
  62209213200, #    local_end 1972-05-01 01:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  62209206000, #    utc_start 1972-04-30 23:00:00 (Sun)
  62222428800, #      utc_end 1972-10-01 00:00:00 (Sun)
  62209216800, #  local_start 1972-05-01 02:00:00 (Mon)
  62222439600, #    local_end 1972-10-01 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62222428800, #    utc_start 1972-10-01 00:00:00 (Sun)
  62240742000, #      utc_end 1973-04-30 23:00:00 (Mon)
  62222436000, #  local_start 1972-10-01 02:00:00 (Sun)
  62240749200, #    local_end 1973-05-01 01:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  62240742000, #    utc_start 1973-04-30 23:00:00 (Mon)
  62253964800, #      utc_end 1973-10-01 00:00:00 (Mon)
  62240752800, #  local_start 1973-05-01 02:00:00 (Tue)
  62253975600, #    local_end 1973-10-01 03:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62253964800, #    utc_start 1973-10-01 00:00:00 (Mon)
  62272278000, #      utc_end 1974-04-30 23:00:00 (Tue)
  62253972000, #  local_start 1973-10-01 02:00:00 (Mon)
  62272285200, #    local_end 1974-05-01 01:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62272278000, #    utc_start 1974-04-30 23:00:00 (Tue)
  62285500800, #      utc_end 1974-10-01 00:00:00 (Tue)
  62272288800, #  local_start 1974-05-01 02:00:00 (Wed)
  62285511600, #    local_end 1974-10-01 03:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  62285500800, #    utc_start 1974-10-01 00:00:00 (Tue)
  62303814000, #      utc_end 1975-04-30 23:00:00 (Wed)
  62285508000, #  local_start 1974-10-01 02:00:00 (Tue)
  62303821200, #    local_end 1975-05-01 01:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  62303814000, #    utc_start 1975-04-30 23:00:00 (Wed)
  62317036800, #      utc_end 1975-10-01 00:00:00 (Wed)
  62303824800, #  local_start 1975-05-01 02:00:00 (Thu)
  62317047600, #    local_end 1975-10-01 03:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  62317036800, #    utc_start 1975-10-01 00:00:00 (Wed)
  62335436400, #      utc_end 1976-04-30 23:00:00 (Fri)
  62317044000, #  local_start 1975-10-01 02:00:00 (Wed)
  62335443600, #    local_end 1976-05-01 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62335436400, #    utc_start 1976-04-30 23:00:00 (Fri)
  62348659200, #      utc_end 1976-10-01 00:00:00 (Fri)
  62335447200, #  local_start 1976-05-01 02:00:00 (Sat)
  62348670000, #    local_end 1976-10-01 03:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62348659200, #    utc_start 1976-10-01 00:00:00 (Fri)
  62366972400, #      utc_end 1977-04-30 23:00:00 (Sat)
  62348666400, #  local_start 1976-10-01 02:00:00 (Fri)
  62366979600, #    local_end 1977-05-01 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62366972400, #    utc_start 1977-04-30 23:00:00 (Sat)
  62380195200, #      utc_end 1977-10-01 00:00:00 (Sat)
  62366983200, #  local_start 1977-05-01 02:00:00 (Sun)
  62380206000, #    local_end 1977-10-01 03:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62380195200, #    utc_start 1977-10-01 00:00:00 (Sat)
  62398508400, #      utc_end 1978-04-30 23:00:00 (Sun)
  62380202400, #  local_start 1977-10-01 02:00:00 (Sat)
  62398515600, #    local_end 1978-05-01 01:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  62398508400, #    utc_start 1978-04-30 23:00:00 (Sun)
  62411731200, #      utc_end 1978-10-01 00:00:00 (Sun)
  62398519200, #  local_start 1978-05-01 02:00:00 (Mon)
  62411742000, #    local_end 1978-10-01 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62411731200, #    utc_start 1978-10-01 00:00:00 (Sun)
  62430044400, #      utc_end 1979-04-30 23:00:00 (Mon)
  62411738400, #  local_start 1978-10-01 02:00:00 (Sun)
  62430051600, #    local_end 1979-05-01 01:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  62430044400, #    utc_start 1979-04-30 23:00:00 (Mon)
  62443267200, #      utc_end 1979-10-01 00:00:00 (Mon)
  62430055200, #  local_start 1979-05-01 02:00:00 (Tue)
  62443278000, #    local_end 1979-10-01 03:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62443267200, #    utc_start 1979-10-01 00:00:00 (Mon)
  62461666800, #      utc_end 1980-04-30 23:00:00 (Wed)
  62443274400, #  local_start 1979-10-01 02:00:00 (Mon)
  62461674000, #    local_end 1980-05-01 01:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  62461666800, #    utc_start 1980-04-30 23:00:00 (Wed)
  62474889600, #      utc_end 1980-10-01 00:00:00 (Wed)
  62461677600, #  local_start 1980-05-01 02:00:00 (Thu)
  62474900400, #    local_end 1980-10-01 03:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  62474889600, #    utc_start 1980-10-01 00:00:00 (Wed)
  62493202800, #      utc_end 1981-04-30 23:00:00 (Thu)
  62474896800, #  local_start 1980-10-01 02:00:00 (Wed)
  62493210000, #    local_end 1981-05-01 01:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62493202800, #    utc_start 1981-04-30 23:00:00 (Thu)
  62506425600, #      utc_end 1981-10-01 00:00:00 (Thu)
  62493213600, #  local_start 1981-05-01 02:00:00 (Fri)
  62506436400, #    local_end 1981-10-01 03:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  62506425600, #    utc_start 1981-10-01 00:00:00 (Thu)
  62532082800, #      utc_end 1982-07-24 23:00:00 (Sat)
  62506432800, #  local_start 1981-10-01 02:00:00 (Thu)
  62532090000, #    local_end 1982-07-25 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62532082800, #    utc_start 1982-07-24 23:00:00 (Sat)
  62537961600, #      utc_end 1982-10-01 00:00:00 (Fri)
  62532093600, #  local_start 1982-07-25 02:00:00 (Sun)
  62537972400, #    local_end 1982-10-01 03:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62537961600, #    utc_start 1982-10-01 00:00:00 (Fri)
  62562495600, #      utc_end 1983-07-11 23:00:00 (Mon)
  62537968800, #  local_start 1982-10-01 02:00:00 (Fri)
  62562502800, #    local_end 1983-07-12 01:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  62562495600, #    utc_start 1983-07-11 23:00:00 (Mon)
  62569497600, #      utc_end 1983-10-01 00:00:00 (Sat)
  62562506400, #  local_start 1983-07-12 02:00:00 (Tue)
  62569508400, #    local_end 1983-10-01 03:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62569497600, #    utc_start 1983-10-01 00:00:00 (Sat)
  62587897200, #      utc_end 1984-04-30 23:00:00 (Mon)
  62569504800, #  local_start 1983-10-01 02:00:00 (Sat)
  62587904400, #    local_end 1984-05-01 01:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  62587897200, #    utc_start 1984-04-30 23:00:00 (Mon)
  62601120000, #      utc_end 1984-10-01 00:00:00 (Mon)
  62587908000, #  local_start 1984-05-01 02:00:00 (Tue)
  62601130800, #    local_end 1984-10-01 03:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62601120000, #    utc_start 1984-10-01 00:00:00 (Mon)
  62619433200, #      utc_end 1985-04-30 23:00:00 (Tue)
  62601127200, #  local_start 1984-10-01 02:00:00 (Mon)
  62619440400, #    local_end 1985-05-01 01:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62619433200, #    utc_start 1985-04-30 23:00:00 (Tue)
  62632656000, #      utc_end 1985-10-01 00:00:00 (Tue)
  62619444000, #  local_start 1985-05-01 02:00:00 (Wed)
  62632666800, #    local_end 1985-10-01 03:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  62632656000, #    utc_start 1985-10-01 00:00:00 (Tue)
  62650969200, #      utc_end 1986-04-30 23:00:00 (Wed)
  62632663200, #  local_start 1985-10-01 02:00:00 (Tue)
  62650976400, #    local_end 1986-05-01 01:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  62650969200, #    utc_start 1986-04-30 23:00:00 (Wed)
  62664192000, #      utc_end 1986-10-01 00:00:00 (Wed)
  62650980000, #  local_start 1986-05-01 02:00:00 (Thu)
  62664202800, #    local_end 1986-10-01 03:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  62664192000, #    utc_start 1986-10-01 00:00:00 (Wed)
  62682505200, #      utc_end 1987-04-30 23:00:00 (Thu)
  62664199200, #  local_start 1986-10-01 02:00:00 (Wed)
  62682512400, #    local_end 1987-05-01 01:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62682505200, #    utc_start 1987-04-30 23:00:00 (Thu)
  62695728000, #      utc_end 1987-10-01 00:00:00 (Thu)
  62682516000, #  local_start 1987-05-01 02:00:00 (Fri)
  62695738800, #    local_end 1987-10-01 03:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  62695728000, #    utc_start 1987-10-01 00:00:00 (Thu)
  62714127600, #      utc_end 1988-04-30 23:00:00 (Sat)
  62695735200, #  local_start 1987-10-01 02:00:00 (Thu)
  62714134800, #    local_end 1988-05-01 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62714127600, #    utc_start 1988-04-30 23:00:00 (Sat)
  62727350400, #      utc_end 1988-10-01 00:00:00 (Sat)
  62714138400, #  local_start 1988-05-01 02:00:00 (Sun)
  62727361200, #    local_end 1988-10-01 03:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62727350400, #    utc_start 1988-10-01 00:00:00 (Sat)
  62746095600, #      utc_end 1989-05-05 23:00:00 (Fri)
  62727357600, #  local_start 1988-10-01 02:00:00 (Sat)
  62746102800, #    local_end 1989-05-06 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62746095600, #    utc_start 1989-05-05 23:00:00 (Fri)
  62758886400, #      utc_end 1989-10-01 00:00:00 (Sun)
  62746106400, #  local_start 1989-05-06 02:00:00 (Sat)
  62758897200, #    local_end 1989-10-01 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62758886400, #    utc_start 1989-10-01 00:00:00 (Sun)
  62777199600, #      utc_end 1990-04-30 23:00:00 (Mon)
  62758893600, #  local_start 1989-10-01 02:00:00 (Sun)
  62777206800, #    local_end 1990-05-01 01:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  62777199600, #    utc_start 1990-04-30 23:00:00 (Mon)
  62790422400, #      utc_end 1990-10-01 00:00:00 (Mon)
  62777210400, #  local_start 1990-05-01 02:00:00 (Tue)
  62790433200, #    local_end 1990-10-01 03:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62790422400, #    utc_start 1990-10-01 00:00:00 (Mon)
  62808735600, #      utc_end 1991-04-30 23:00:00 (Tue)
  62790429600, #  local_start 1990-10-01 02:00:00 (Mon)
  62808742800, #    local_end 1991-05-01 01:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62808735600, #    utc_start 1991-04-30 23:00:00 (Tue)
  62821958400, #      utc_end 1991-10-01 00:00:00 (Tue)
  62808746400, #  local_start 1991-05-01 02:00:00 (Wed)
  62821969200, #    local_end 1991-10-01 03:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  62821958400, #    utc_start 1991-10-01 00:00:00 (Tue)
  62840358000, #      utc_end 1992-04-30 23:00:00 (Thu)
  62821965600, #  local_start 1991-10-01 02:00:00 (Tue)
  62840365200, #    local_end 1992-05-01 01:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62840358000, #    utc_start 1992-04-30 23:00:00 (Thu)
  62853580800, #      utc_end 1992-10-01 00:00:00 (Thu)
  62840368800, #  local_start 1992-05-01 02:00:00 (Fri)
  62853591600, #    local_end 1992-10-01 03:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  62853580800, #    utc_start 1992-10-01 00:00:00 (Thu)
  62871894000, #      utc_end 1993-04-30 23:00:00 (Fri)
  62853588000, #  local_start 1992-10-01 02:00:00 (Thu)
  62871901200, #    local_end 1993-05-01 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62871894000, #    utc_start 1993-04-30 23:00:00 (Fri)
  62885116800, #      utc_end 1993-10-01 00:00:00 (Fri)
  62871904800, #  local_start 1993-05-01 02:00:00 (Sat)
  62885127600, #    local_end 1993-10-01 03:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62885116800, #    utc_start 1993-10-01 00:00:00 (Fri)
  62903430000, #      utc_end 1994-04-30 23:00:00 (Sat)
  62885124000, #  local_start 1993-10-01 02:00:00 (Fri)
  62903437200, #    local_end 1994-05-01 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62903430000, #    utc_start 1994-04-30 23:00:00 (Sat)
  62916652800, #      utc_end 1994-10-01 00:00:00 (Sat)
  62903440800, #  local_start 1994-05-01 02:00:00 (Sun)
  62916663600, #    local_end 1994-10-01 03:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62916652800, #    utc_start 1994-10-01 00:00:00 (Sat)
  62934703200, #      utc_end 1995-04-27 22:00:00 (Thu)
  62916660000, #  local_start 1994-10-01 02:00:00 (Sat)
  62934710400, #    local_end 1995-04-28 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62934703200, #    utc_start 1995-04-27 22:00:00 (Thu)
  62948005200, #      utc_end 1995-09-28 21:00:00 (Thu)
  62934714000, #  local_start 1995-04-28 01:00:00 (Fri)
  62948016000, #    local_end 1995-09-29 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62948005200, #    utc_start 1995-09-28 21:00:00 (Thu)
  62966152800, #      utc_end 1996-04-25 22:00:00 (Thu)
  62948012400, #  local_start 1995-09-28 23:00:00 (Thu)
  62966160000, #    local_end 1996-04-26 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62966152800, #    utc_start 1996-04-25 22:00:00 (Thu)
  62979454800, #      utc_end 1996-09-26 21:00:00 (Thu)
  62966163600, #  local_start 1996-04-26 01:00:00 (Fri)
  62979465600, #    local_end 1996-09-27 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62979454800, #    utc_start 1996-09-26 21:00:00 (Thu)
  62997602400, #      utc_end 1997-04-24 22:00:00 (Thu)
  62979462000, #  local_start 1996-09-26 23:00:00 (Thu)
  62997609600, #    local_end 1997-04-25 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62997602400, #    utc_start 1997-04-24 22:00:00 (Thu)
  63010904400, #      utc_end 1997-09-25 21:00:00 (Thu)
  62997613200, #  local_start 1997-04-25 01:00:00 (Fri)
  63010915200, #    local_end 1997-09-26 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63010904400, #    utc_start 1997-09-25 21:00:00 (Thu)
  63029052000, #      utc_end 1998-04-23 22:00:00 (Thu)
  63010911600, #  local_start 1997-09-25 23:00:00 (Thu)
  63029059200, #    local_end 1998-04-24 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63029052000, #    utc_start 1998-04-23 22:00:00 (Thu)
  63042354000, #      utc_end 1998-09-24 21:00:00 (Thu)
  63029062800, #  local_start 1998-04-24 01:00:00 (Fri)
  63042364800, #    local_end 1998-09-25 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63042354000, #    utc_start 1998-09-24 21:00:00 (Thu)
  63061106400, #      utc_end 1999-04-29 22:00:00 (Thu)
  63042361200, #  local_start 1998-09-24 23:00:00 (Thu)
  63061113600, #    local_end 1999-04-30 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63061106400, #    utc_start 1999-04-29 22:00:00 (Thu)
  63074408400, #      utc_end 1999-09-30 21:00:00 (Thu)
  63061117200, #  local_start 1999-04-30 01:00:00 (Fri)
  63074419200, #    local_end 1999-10-01 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63074408400, #    utc_start 1999-09-30 21:00:00 (Thu)
  63092556000, #      utc_end 2000-04-27 22:00:00 (Thu)
  63074415600, #  local_start 1999-09-30 23:00:00 (Thu)
  63092563200, #    local_end 2000-04-28 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63092556000, #    utc_start 2000-04-27 22:00:00 (Thu)
  63105858000, #      utc_end 2000-09-28 21:00:00 (Thu)
  63092566800, #  local_start 2000-04-28 01:00:00 (Fri)
  63105868800, #    local_end 2000-09-29 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63105858000, #    utc_start 2000-09-28 21:00:00 (Thu)
  63124005600, #      utc_end 2001-04-26 22:00:00 (Thu)
  63105865200, #  local_start 2000-09-28 23:00:00 (Thu)
  63124012800, #    local_end 2001-04-27 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63124005600, #    utc_start 2001-04-26 22:00:00 (Thu)
  63137307600, #      utc_end 2001-09-27 21:00:00 (Thu)
  63124016400, #  local_start 2001-04-27 01:00:00 (Fri)
  63137318400, #    local_end 2001-09-28 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63137307600, #    utc_start 2001-09-27 21:00:00 (Thu)
  63155455200, #      utc_end 2002-04-25 22:00:00 (Thu)
  63137314800, #  local_start 2001-09-27 23:00:00 (Thu)
  63155462400, #    local_end 2002-04-26 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63155455200, #    utc_start 2002-04-25 22:00:00 (Thu)
  63168757200, #      utc_end 2002-09-26 21:00:00 (Thu)
  63155466000, #  local_start 2002-04-26 01:00:00 (Fri)
  63168768000, #    local_end 2002-09-27 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63168757200, #    utc_start 2002-09-26 21:00:00 (Thu)
  63186904800, #      utc_end 2003-04-24 22:00:00 (Thu)
  63168764400, #  local_start 2002-09-26 23:00:00 (Thu)
  63186912000, #    local_end 2003-04-25 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63186904800, #    utc_start 2003-04-24 22:00:00 (Thu)
  63200206800, #      utc_end 2003-09-25 21:00:00 (Thu)
  63186915600, #  local_start 2003-04-25 01:00:00 (Fri)
  63200217600, #    local_end 2003-09-26 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63200206800, #    utc_start 2003-09-25 21:00:00 (Thu)
  63218959200, #      utc_end 2004-04-29 22:00:00 (Thu)
  63200214000, #  local_start 2003-09-25 23:00:00 (Thu)
  63218966400, #    local_end 2004-04-30 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63218959200, #    utc_start 2004-04-29 22:00:00 (Thu)
  63232261200, #      utc_end 2004-09-30 21:00:00 (Thu)
  63218970000, #  local_start 2004-04-30 01:00:00 (Fri)
  63232272000, #    local_end 2004-10-01 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63232261200, #    utc_start 2004-09-30 21:00:00 (Thu)
  63250408800, #      utc_end 2005-04-28 22:00:00 (Thu)
  63232268400, #  local_start 2004-09-30 23:00:00 (Thu)
  63250416000, #    local_end 2005-04-29 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63250408800, #    utc_start 2005-04-28 22:00:00 (Thu)
  63263710800, #      utc_end 2005-09-29 21:00:00 (Thu)
  63250419600, #  local_start 2005-04-29 01:00:00 (Fri)
  63263721600, #    local_end 2005-09-30 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63263710800, #    utc_start 2005-09-29 21:00:00 (Thu)
  63281858400, #      utc_end 2006-04-27 22:00:00 (Thu)
  63263718000, #  local_start 2005-09-29 23:00:00 (Thu)
  63281865600, #    local_end 2006-04-28 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63281858400, #    utc_start 2006-04-27 22:00:00 (Thu)
  63294555600, #      utc_end 2006-09-21 21:00:00 (Thu)
  63281869200, #  local_start 2006-04-28 01:00:00 (Fri)
  63294566400, #    local_end 2006-09-22 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63294555600, #    utc_start 2006-09-21 21:00:00 (Thu)
  63313308000, #      utc_end 2007-04-26 22:00:00 (Thu)
  63294562800, #  local_start 2006-09-21 23:00:00 (Thu)
  63313315200, #    local_end 2007-04-27 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63313308000, #    utc_start 2007-04-26 22:00:00 (Thu)
  63324795600, #      utc_end 2007-09-06 21:00:00 (Thu)
  63313318800, #  local_start 2007-04-27 01:00:00 (Fri)
  63324806400, #    local_end 2007-09-07 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63324795600, #    utc_start 2007-09-06 21:00:00 (Thu)
  63344757600, #      utc_end 2008-04-24 22:00:00 (Thu)
  63324802800, #  local_start 2007-09-06 23:00:00 (Thu)
  63344764800, #    local_end 2008-04-25 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63344757600, #    utc_start 2008-04-24 22:00:00 (Thu)
  63355640400, #      utc_end 2008-08-28 21:00:00 (Thu)
  63344768400, #  local_start 2008-04-25 01:00:00 (Fri)
  63355651200, #    local_end 2008-08-29 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63355640400, #    utc_start 2008-08-28 21:00:00 (Thu)
  63376207200, #      utc_end 2009-04-23 22:00:00 (Thu)
  63355647600, #  local_start 2008-08-28 23:00:00 (Thu)
  63376214400, #    local_end 2009-04-24 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63376207200, #    utc_start 2009-04-23 22:00:00 (Thu)
  63386485200, #      utc_end 2009-08-20 21:00:00 (Thu)
  63376218000, #  local_start 2009-04-24 01:00:00 (Fri)
  63386496000, #    local_end 2009-08-21 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63386485200, #    utc_start 2009-08-20 21:00:00 (Thu)
  63408261600, #      utc_end 2010-04-29 22:00:00 (Thu)
  63386492400, #  local_start 2009-08-20 23:00:00 (Thu)
  63408268800, #    local_end 2010-04-30 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63408261600, #    utc_start 2010-04-29 22:00:00 (Thu)
  63417157200, #      utc_end 2010-08-10 21:00:00 (Tue)
  63408272400, #  local_start 2010-04-30 01:00:00 (Fri)
  63417168000, #    local_end 2010-08-11 00:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  63417157200, #    utc_start 2010-08-10 21:00:00 (Tue)
  63419752800, #      utc_end 2010-09-09 22:00:00 (Thu)
  63417164400, #  local_start 2010-08-10 23:00:00 (Tue)
  63419760000, #    local_end 2010-09-10 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63419752800, #    utc_start 2010-09-09 22:00:00 (Thu)
  63421563600, #      utc_end 2010-09-30 21:00:00 (Thu)
  63419763600, #  local_start 2010-09-10 01:00:00 (Fri)
  63421574400, #    local_end 2010-10-01 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63421563600, #    utc_start 2010-09-30 21:00:00 (Thu)
  63535874400, #      utc_end 2014-05-15 22:00:00 (Thu)
  63421570800, #  local_start 2010-09-30 23:00:00 (Thu)
  63535881600, #    local_end 2014-05-16 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63535874400, #    utc_start 2014-05-15 22:00:00 (Thu)
  63539499600, #      utc_end 2014-06-26 21:00:00 (Thu)
  63535885200, #  local_start 2014-05-16 01:00:00 (Fri)
  63539510400, #    local_end 2014-06-27 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63539499600, #    utc_start 2014-06-26 21:00:00 (Thu)
  63542527200, #      utc_end 2014-07-31 22:00:00 (Thu)
  63539506800, #  local_start 2014-06-26 23:00:00 (Thu)
  63542534400, #    local_end 2014-08-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63542527200, #    utc_start 2014-07-31 22:00:00 (Thu)
  63547362000, #      utc_end 2014-09-25 21:00:00 (Thu)
  63542538000, #  local_start 2014-08-01 01:00:00 (Fri)
  63547372800, #    local_end 2014-09-26 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63547362000, #    utc_start 2014-09-25 21:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  63547369200, #  local_start 2014-09-25 23:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  7200,
  0,
  'EET',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {63}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_CAIRO

    $main::fatpacked{"DateTime/TimeZone/Africa/Casablanca.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_CASABLANCA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Casablanca;
  $DateTime::TimeZone::Africa::Casablanca::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Casablanca::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60362670620, #      utc_end 1913-10-26 00:30:20 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60362668800, #    local_end 1913-10-26 00:00:00 (Sun)
  -1820,
  0,
  'LMT',
      ],
      [
  60362670620, #    utc_start 1913-10-26 00:30:20 (Sun)
  61179321600, #      utc_end 1939-09-12 00:00:00 (Tue)
  60362670620, #  local_start 1913-10-26 00:30:20 (Sun)
  61179321600, #    local_end 1939-09-12 00:00:00 (Tue)
  0,
  0,
  'WET',
      ],
      [
  61179321600, #    utc_start 1939-09-12 00:00:00 (Tue)
  61185193200, #      utc_end 1939-11-18 23:00:00 (Sat)
  61179325200, #  local_start 1939-09-12 01:00:00 (Tue)
  61185196800, #    local_end 1939-11-19 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61185193200, #    utc_start 1939-11-18 23:00:00 (Sat)
  61193664000, #      utc_end 1940-02-25 00:00:00 (Sun)
  61185193200, #  local_start 1939-11-18 23:00:00 (Sat)
  61193664000, #    local_end 1940-02-25 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61193664000, #    utc_start 1940-02-25 00:00:00 (Sun)
  61374495600, #      utc_end 1945-11-17 23:00:00 (Sat)
  61193667600, #  local_start 1940-02-25 01:00:00 (Sun)
  61374499200, #    local_end 1945-11-18 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61374495600, #    utc_start 1945-11-17 23:00:00 (Sat)
  61518441600, #      utc_end 1950-06-11 00:00:00 (Sun)
  61374495600, #  local_start 1945-11-17 23:00:00 (Sat)
  61518441600, #    local_end 1950-06-11 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61518441600, #    utc_start 1950-06-11 00:00:00 (Sun)
  61530534000, #      utc_end 1950-10-28 23:00:00 (Sat)
  61518445200, #  local_start 1950-06-11 01:00:00 (Sun)
  61530537600, #    local_end 1950-10-29 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61530534000, #    utc_start 1950-10-28 23:00:00 (Sat)
  62054251200, #      utc_end 1967-06-03 12:00:00 (Sat)
  61530534000, #  local_start 1950-10-28 23:00:00 (Sat)
  62054251200, #    local_end 1967-06-03 12:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  62054251200, #    utc_start 1967-06-03 12:00:00 (Sat)
  62064572400, #      utc_end 1967-09-30 23:00:00 (Sat)
  62054254800, #  local_start 1967-06-03 13:00:00 (Sat)
  62064576000, #    local_end 1967-10-01 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62064572400, #    utc_start 1967-09-30 23:00:00 (Sat)
  62276947200, #      utc_end 1974-06-24 00:00:00 (Mon)
  62064572400, #  local_start 1967-09-30 23:00:00 (Sat)
  62276947200, #    local_end 1974-06-24 00:00:00 (Mon)
  0,
  0,
  'WET',
      ],
      [
  62276947200, #    utc_start 1974-06-24 00:00:00 (Mon)
  62282905200, #      utc_end 1974-08-31 23:00:00 (Sat)
  62276950800, #  local_start 1974-06-24 01:00:00 (Mon)
  62282908800, #    local_end 1974-09-01 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62282905200, #    utc_start 1974-08-31 23:00:00 (Sat)
  62335440000, #      utc_end 1976-05-01 00:00:00 (Sat)
  62282905200, #  local_start 1974-08-31 23:00:00 (Sat)
  62335440000, #    local_end 1976-05-01 00:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  62335440000, #    utc_start 1976-05-01 00:00:00 (Sat)
  62343385200, #      utc_end 1976-07-31 23:00:00 (Sat)
  62335443600, #  local_start 1976-05-01 01:00:00 (Sat)
  62343388800, #    local_end 1976-08-01 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62343385200, #    utc_start 1976-07-31 23:00:00 (Sat)
  62366976000, #      utc_end 1977-05-01 00:00:00 (Sun)
  62343385200, #  local_start 1976-07-31 23:00:00 (Sat)
  62366976000, #    local_end 1977-05-01 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62366976000, #    utc_start 1977-05-01 00:00:00 (Sun)
  62379932400, #      utc_end 1977-09-27 23:00:00 (Tue)
  62366979600, #  local_start 1977-05-01 01:00:00 (Sun)
  62379936000, #    local_end 1977-09-28 00:00:00 (Wed)
  3600,
  1,
  'WEST',
      ],
      [
  62379932400, #    utc_start 1977-09-27 23:00:00 (Tue)
  62401190400, #      utc_end 1978-06-01 00:00:00 (Thu)
  62379932400, #  local_start 1977-09-27 23:00:00 (Tue)
  62401190400, #    local_end 1978-06-01 00:00:00 (Thu)
  0,
  0,
  'WET',
      ],
      [
  62401190400, #    utc_start 1978-06-01 00:00:00 (Thu)
  62406716400, #      utc_end 1978-08-03 23:00:00 (Thu)
  62401194000, #  local_start 1978-06-01 01:00:00 (Thu)
  62406720000, #    local_end 1978-08-04 00:00:00 (Fri)
  3600,
  1,
  'WEST',
      ],
      [
  62406716400, #    utc_start 1978-08-03 23:00:00 (Thu)
  62583926400, #      utc_end 1984-03-16 00:00:00 (Fri)
  62406716400, #  local_start 1978-08-03 23:00:00 (Thu)
  62583926400, #    local_end 1984-03-16 00:00:00 (Fri)
  0,
  0,
  'WET',
      ],
      [
  62583926400, #    utc_start 1984-03-16 00:00:00 (Fri)
  62640601200, #      utc_end 1985-12-31 23:00:00 (Tue)
  62583930000, #  local_start 1984-03-16 01:00:00 (Fri)
  62640604800, #    local_end 1986-01-01 00:00:00 (Wed)
  3600,
  0,
  'CET',
      ],
      [
  62640601200, #    utc_start 1985-12-31 23:00:00 (Tue)
  63347961600, #      utc_end 2008-06-01 00:00:00 (Sun)
  62640601200, #  local_start 1985-12-31 23:00:00 (Tue)
  63347961600, #    local_end 2008-06-01 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63347961600, #    utc_start 2008-06-01 00:00:00 (Sun)
  63355906800, #      utc_end 2008-08-31 23:00:00 (Sun)
  63347965200, #  local_start 2008-06-01 01:00:00 (Sun)
  63355910400, #    local_end 2008-09-01 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  63355906800, #    utc_start 2008-08-31 23:00:00 (Sun)
  63379497600, #      utc_end 2009-06-01 00:00:00 (Mon)
  63355906800, #  local_start 2008-08-31 23:00:00 (Sun)
  63379497600, #    local_end 2009-06-01 00:00:00 (Mon)
  0,
  0,
  'WET',
      ],
      [
  63379497600, #    utc_start 2009-06-01 00:00:00 (Mon)
  63386492400, #      utc_end 2009-08-20 23:00:00 (Thu)
  63379501200, #  local_start 2009-06-01 01:00:00 (Mon)
  63386496000, #    local_end 2009-08-21 00:00:00 (Fri)
  3600,
  1,
  'WEST',
      ],
      [
  63386492400, #    utc_start 2009-08-20 23:00:00 (Thu)
  63408441600, #      utc_end 2010-05-02 00:00:00 (Sun)
  63386492400, #  local_start 2009-08-20 23:00:00 (Thu)
  63408441600, #    local_end 2010-05-02 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63408441600, #    utc_start 2010-05-02 00:00:00 (Sun)
  63416905200, #      utc_end 2010-08-07 23:00:00 (Sat)
  63408445200, #  local_start 2010-05-02 01:00:00 (Sun)
  63416908800, #    local_end 2010-08-08 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63416905200, #    utc_start 2010-08-07 23:00:00 (Sat)
  63437472000, #      utc_end 2011-04-03 00:00:00 (Sun)
  63416905200, #  local_start 2010-08-07 23:00:00 (Sat)
  63437472000, #    local_end 2011-04-03 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63437472000, #    utc_start 2011-04-03 00:00:00 (Sun)
  63447750000, #      utc_end 2011-07-30 23:00:00 (Sat)
  63437475600, #  local_start 2011-04-03 01:00:00 (Sun)
  63447753600, #    local_end 2011-07-31 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63447750000, #    utc_start 2011-07-30 23:00:00 (Sat)
  63471348000, #      utc_end 2012-04-29 02:00:00 (Sun)
  63447750000, #  local_start 2011-07-30 23:00:00 (Sat)
  63471348000, #    local_end 2012-04-29 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63471348000, #    utc_start 2012-04-29 02:00:00 (Sun)
  63478432800, #      utc_end 2012-07-20 02:00:00 (Fri)
  63471351600, #  local_start 2012-04-29 03:00:00 (Sun)
  63478436400, #    local_end 2012-07-20 03:00:00 (Fri)
  3600,
  1,
  'WEST',
      ],
      [
  63478432800, #    utc_start 2012-07-20 02:00:00 (Fri)
  63481111200, #      utc_end 2012-08-20 02:00:00 (Mon)
  63478432800, #  local_start 2012-07-20 02:00:00 (Fri)
  63481111200, #    local_end 2012-08-20 02:00:00 (Mon)
  0,
  0,
  'WET',
      ],
      [
  63481111200, #    utc_start 2012-08-20 02:00:00 (Mon)
  63484653600, #      utc_end 2012-09-30 02:00:00 (Sun)
  63481114800, #  local_start 2012-08-20 03:00:00 (Mon)
  63484657200, #    local_end 2012-09-30 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63484653600, #    utc_start 2012-09-30 02:00:00 (Sun)
  63502797600, #      utc_end 2013-04-28 02:00:00 (Sun)
  63484653600, #  local_start 2012-09-30 02:00:00 (Sun)
  63502797600, #    local_end 2013-04-28 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63502797600, #    utc_start 2013-04-28 02:00:00 (Sun)
  63508845600, #      utc_end 2013-07-07 02:00:00 (Sun)
  63502801200, #  local_start 2013-04-28 03:00:00 (Sun)
  63508849200, #    local_end 2013-07-07 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63508845600, #    utc_start 2013-07-07 02:00:00 (Sun)
  63511783200, #      utc_end 2013-08-10 02:00:00 (Sat)
  63508845600, #  local_start 2013-07-07 02:00:00 (Sun)
  63511783200, #    local_end 2013-08-10 02:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  63511783200, #    utc_start 2013-08-10 02:00:00 (Sat)
  63518522400, #      utc_end 2013-10-27 02:00:00 (Sun)
  63511786800, #  local_start 2013-08-10 03:00:00 (Sat)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63518522400, #    utc_start 2013-10-27 02:00:00 (Sun)
  63531828000, #      utc_end 2014-03-30 02:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63531828000, #    utc_start 2014-03-30 02:00:00 (Sun)
  63539604000, #      utc_end 2014-06-28 02:00:00 (Sat)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63539607600, #    local_end 2014-06-28 03:00:00 (Sat)
  3600,
  1,
  'WEST',
      ],
      [
  63539604000, #    utc_start 2014-06-28 02:00:00 (Sat)
  63542628000, #      utc_end 2014-08-02 02:00:00 (Sat)
  63539604000, #  local_start 2014-06-28 02:00:00 (Sat)
  63542628000, #    local_end 2014-08-02 02:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  63542628000, #    utc_start 2014-08-02 02:00:00 (Sat)
  63549972000, #      utc_end 2014-10-26 02:00:00 (Sun)
  63542631600, #  local_start 2014-08-02 03:00:00 (Sat)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63549972000, #    utc_start 2014-10-26 02:00:00 (Sun)
  63563277600, #      utc_end 2015-03-29 02:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63563277600, #    utc_start 2015-03-29 02:00:00 (Sun)
  63569930400, #      utc_end 2015-06-14 02:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63569934000, #    local_end 2015-06-14 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63569930400, #    utc_start 2015-06-14 02:00:00 (Sun)
  63572954400, #      utc_end 2015-07-19 02:00:00 (Sun)
  63569930400, #  local_start 2015-06-14 02:00:00 (Sun)
  63572954400, #    local_end 2015-07-19 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63572954400, #    utc_start 2015-07-19 02:00:00 (Sun)
  63581421600, #      utc_end 2015-10-25 02:00:00 (Sun)
  63572958000, #  local_start 2015-07-19 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63581421600, #    utc_start 2015-10-25 02:00:00 (Sun)
  63594727200, #      utc_end 2016-03-27 02:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63594727200, #    utc_start 2016-03-27 02:00:00 (Sun)
  63600775200, #      utc_end 2016-06-05 02:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63600778800, #    local_end 2016-06-05 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63600775200, #    utc_start 2016-06-05 02:00:00 (Sun)
  63603799200, #      utc_end 2016-07-10 02:00:00 (Sun)
  63600775200, #  local_start 2016-06-05 02:00:00 (Sun)
  63603799200, #    local_end 2016-07-10 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63603799200, #    utc_start 2016-07-10 02:00:00 (Sun)
  63613476000, #      utc_end 2016-10-30 02:00:00 (Sun)
  63603802800, #  local_start 2016-07-10 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63613476000, #    utc_start 2016-10-30 02:00:00 (Sun)
  63626176800, #      utc_end 2017-03-26 02:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63626176800, #    utc_start 2017-03-26 02:00:00 (Sun)
  63631015200, #      utc_end 2017-05-21 02:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63631018800, #    local_end 2017-05-21 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63631015200, #    utc_start 2017-05-21 02:00:00 (Sun)
  63634644000, #      utc_end 2017-07-02 02:00:00 (Sun)
  63631015200, #  local_start 2017-05-21 02:00:00 (Sun)
  63634644000, #    local_end 2017-07-02 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63634644000, #    utc_start 2017-07-02 02:00:00 (Sun)
  63644925600, #      utc_end 2017-10-29 02:00:00 (Sun)
  63634647600, #  local_start 2017-07-02 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63644925600, #    utc_start 2017-10-29 02:00:00 (Sun)
  63657626400, #      utc_end 2018-03-25 02:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63657626400, #    utc_start 2018-03-25 02:00:00 (Sun)
  63661860000, #      utc_end 2018-05-13 02:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63661863600, #    local_end 2018-05-13 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63661860000, #    utc_start 2018-05-13 02:00:00 (Sun)
  63664884000, #      utc_end 2018-06-17 02:00:00 (Sun)
  63661860000, #  local_start 2018-05-13 02:00:00 (Sun)
  63664884000, #    local_end 2018-06-17 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63664884000, #    utc_start 2018-06-17 02:00:00 (Sun)
  63676375200, #      utc_end 2018-10-28 02:00:00 (Sun)
  63664887600, #  local_start 2018-06-17 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63676375200, #    utc_start 2018-10-28 02:00:00 (Sun)
  63689680800, #      utc_end 2019-03-31 02:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63689680800, #    utc_start 2019-03-31 02:00:00 (Sun)
  63692704800, #      utc_end 2019-05-05 02:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63692708400, #    local_end 2019-05-05 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63692704800, #    utc_start 2019-05-05 02:00:00 (Sun)
  63695728800, #      utc_end 2019-06-09 02:00:00 (Sun)
  63692704800, #  local_start 2019-05-05 02:00:00 (Sun)
  63695728800, #    local_end 2019-06-09 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63695728800, #    utc_start 2019-06-09 02:00:00 (Sun)
  63707824800, #      utc_end 2019-10-27 02:00:00 (Sun)
  63695732400, #  local_start 2019-06-09 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63707824800, #    utc_start 2019-10-27 02:00:00 (Sun)
  63721130400, #      utc_end 2020-03-29 02:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63721130400, #    utc_start 2020-03-29 02:00:00 (Sun)
  63722944800, #      utc_end 2020-04-19 02:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63722948400, #    local_end 2020-04-19 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63722944800, #    utc_start 2020-04-19 02:00:00 (Sun)
  63725968800, #      utc_end 2020-05-24 02:00:00 (Sun)
  63722944800, #  local_start 2020-04-19 02:00:00 (Sun)
  63725968800, #    local_end 2020-05-24 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63725968800, #    utc_start 2020-05-24 02:00:00 (Sun)
  63739274400, #      utc_end 2020-10-25 02:00:00 (Sun)
  63725972400, #  local_start 2020-05-24 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63739274400, #    utc_start 2020-10-25 02:00:00 (Sun)
  63752580000, #      utc_end 2021-03-28 02:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63752580000, #    utc_start 2021-03-28 02:00:00 (Sun)
  63753789600, #      utc_end 2021-04-11 02:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63753793200, #    local_end 2021-04-11 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63753789600, #    utc_start 2021-04-11 02:00:00 (Sun)
  63756813600, #      utc_end 2021-05-16 02:00:00 (Sun)
  63753789600, #  local_start 2021-04-11 02:00:00 (Sun)
  63756813600, #    local_end 2021-05-16 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63756813600, #    utc_start 2021-05-16 02:00:00 (Sun)
  63771328800, #      utc_end 2021-10-31 02:00:00 (Sun)
  63756817200, #  local_start 2021-05-16 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63771328800, #    utc_start 2021-10-31 02:00:00 (Sun)
  63787658400, #      utc_end 2022-05-08 02:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63787658400, #    local_end 2022-05-08 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63787658400, #    utc_start 2022-05-08 02:00:00 (Sun)
  63802778400, #      utc_end 2022-10-30 02:00:00 (Sun)
  63787662000, #  local_start 2022-05-08 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63802778400, #    utc_start 2022-10-30 02:00:00 (Sun)
  63817898400, #      utc_end 2023-04-23 02:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63817898400, #    local_end 2023-04-23 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63817898400, #    utc_start 2023-04-23 02:00:00 (Sun)
  63834228000, #      utc_end 2023-10-29 02:00:00 (Sun)
  63817902000, #  local_start 2023-04-23 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63834228000, #    utc_start 2023-10-29 02:00:00 (Sun)
  63848743200, #      utc_end 2024-04-14 02:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63848743200, #    local_end 2024-04-14 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63848743200, #    utc_start 2024-04-14 02:00:00 (Sun)
  63865677600, #      utc_end 2024-10-27 02:00:00 (Sun)
  63848746800, #  local_start 2024-04-14 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63865677600, #    utc_start 2024-10-27 02:00:00 (Sun)
  63879588000, #      utc_end 2025-04-06 02:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63879588000, #    local_end 2025-04-06 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63879588000, #    utc_start 2025-04-06 02:00:00 (Sun)
  63897127200, #      utc_end 2025-10-26 02:00:00 (Sun)
  63879591600, #  local_start 2025-04-06 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63897127200, #    utc_start 2025-10-26 02:00:00 (Sun)
  63910432800, #      utc_end 2026-03-29 02:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63910432800, #    utc_start 2026-03-29 02:00:00 (Sun)
  63928576800, #      utc_end 2026-10-25 02:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63928576800, #    utc_start 2026-10-25 02:00:00 (Sun)
  63941882400, #      utc_end 2027-03-28 02:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63941882400, #    utc_start 2027-03-28 02:00:00 (Sun)
  63960631200, #      utc_end 2027-10-31 02:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63960631200, #    utc_start 2027-10-31 02:00:00 (Sun)
  63973332000, #      utc_end 2028-03-26 02:00:00 (Sun)
  63960631200, #  local_start 2027-10-31 02:00:00 (Sun)
  63973332000, #    local_end 2028-03-26 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63973332000, #    utc_start 2028-03-26 02:00:00 (Sun)
  63992080800, #      utc_end 2028-10-29 02:00:00 (Sun)
  63973335600, #  local_start 2028-03-26 03:00:00 (Sun)
  63992084400, #    local_end 2028-10-29 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63992080800, #    utc_start 2028-10-29 02:00:00 (Sun)
  64004781600, #      utc_end 2029-03-25 02:00:00 (Sun)
  63992080800, #  local_start 2028-10-29 02:00:00 (Sun)
  64004781600, #    local_end 2029-03-25 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64004781600, #    utc_start 2029-03-25 02:00:00 (Sun)
  64023530400, #      utc_end 2029-10-28 02:00:00 (Sun)
  64004785200, #  local_start 2029-03-25 03:00:00 (Sun)
  64023534000, #    local_end 2029-10-28 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64023530400, #    utc_start 2029-10-28 02:00:00 (Sun)
  64036836000, #      utc_end 2030-03-31 02:00:00 (Sun)
  64023530400, #  local_start 2029-10-28 02:00:00 (Sun)
  64036836000, #    local_end 2030-03-31 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64036836000, #    utc_start 2030-03-31 02:00:00 (Sun)
  64054980000, #      utc_end 2030-10-27 02:00:00 (Sun)
  64036839600, #  local_start 2030-03-31 03:00:00 (Sun)
  64054983600, #    local_end 2030-10-27 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64054980000, #    utc_start 2030-10-27 02:00:00 (Sun)
  64068285600, #      utc_end 2031-03-30 02:00:00 (Sun)
  64054980000, #  local_start 2030-10-27 02:00:00 (Sun)
  64068285600, #    local_end 2031-03-30 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64068285600, #    utc_start 2031-03-30 02:00:00 (Sun)
  64086429600, #      utc_end 2031-10-26 02:00:00 (Sun)
  64068289200, #  local_start 2031-03-30 03:00:00 (Sun)
  64086433200, #    local_end 2031-10-26 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64086429600, #    utc_start 2031-10-26 02:00:00 (Sun)
  64099735200, #      utc_end 2032-03-28 02:00:00 (Sun)
  64086429600, #  local_start 2031-10-26 02:00:00 (Sun)
  64099735200, #    local_end 2032-03-28 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64099735200, #    utc_start 2032-03-28 02:00:00 (Sun)
  64118484000, #      utc_end 2032-10-31 02:00:00 (Sun)
  64099738800, #  local_start 2032-03-28 03:00:00 (Sun)
  64118487600, #    local_end 2032-10-31 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64118484000, #    utc_start 2032-10-31 02:00:00 (Sun)
  64131184800, #      utc_end 2033-03-27 02:00:00 (Sun)
  64118484000, #  local_start 2032-10-31 02:00:00 (Sun)
  64131184800, #    local_end 2033-03-27 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64131184800, #    utc_start 2033-03-27 02:00:00 (Sun)
  64149933600, #      utc_end 2033-10-30 02:00:00 (Sun)
  64131188400, #  local_start 2033-03-27 03:00:00 (Sun)
  64149937200, #    local_end 2033-10-30 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64149933600, #    utc_start 2033-10-30 02:00:00 (Sun)
  64162634400, #      utc_end 2034-03-26 02:00:00 (Sun)
  64149933600, #  local_start 2033-10-30 02:00:00 (Sun)
  64162634400, #    local_end 2034-03-26 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64162634400, #    utc_start 2034-03-26 02:00:00 (Sun)
  64181383200, #      utc_end 2034-10-29 02:00:00 (Sun)
  64162638000, #  local_start 2034-03-26 03:00:00 (Sun)
  64181386800, #    local_end 2034-10-29 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64181383200, #    utc_start 2034-10-29 02:00:00 (Sun)
  64194084000, #      utc_end 2035-03-25 02:00:00 (Sun)
  64181383200, #  local_start 2034-10-29 02:00:00 (Sun)
  64194084000, #    local_end 2035-03-25 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64194084000, #    utc_start 2035-03-25 02:00:00 (Sun)
  64212832800, #      utc_end 2035-10-28 02:00:00 (Sun)
  64194087600, #  local_start 2035-03-25 03:00:00 (Sun)
  64212836400, #    local_end 2035-10-28 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64212832800, #    utc_start 2035-10-28 02:00:00 (Sun)
  64226138400, #      utc_end 2036-03-30 02:00:00 (Sun)
  64212832800, #  local_start 2035-10-28 02:00:00 (Sun)
  64226138400, #    local_end 2036-03-30 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64226138400, #    utc_start 2036-03-30 02:00:00 (Sun)
  64243677600, #      utc_end 2036-10-19 02:00:00 (Sun)
  64226142000, #  local_start 2036-03-30 03:00:00 (Sun)
  64243681200, #    local_end 2036-10-19 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64243677600, #    utc_start 2036-10-19 02:00:00 (Sun)
  64257588000, #      utc_end 2037-03-29 02:00:00 (Sun)
  64243677600, #  local_start 2036-10-19 02:00:00 (Sun)
  64257588000, #    local_end 2037-03-29 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64257588000, #    utc_start 2037-03-29 02:00:00 (Sun)
  64273917600, #      utc_end 2037-10-04 02:00:00 (Sun)
  64257591600, #  local_start 2037-03-29 03:00:00 (Sun)
  64273921200, #    local_end 2037-10-04 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64273917600, #    utc_start 2037-10-04 02:00:00 (Sun)
  64289037600, #      utc_end 2038-03-28 02:00:00 (Sun)
  64273917600, #  local_start 2037-10-04 02:00:00 (Sun)
  64289037600, #    local_end 2038-03-28 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64289037600, #    utc_start 2038-03-28 02:00:00 (Sun)
  64307786400, #      utc_end 2038-10-31 02:00:00 (Sun)
  64289041200, #  local_start 2038-03-28 03:00:00 (Sun)
  64307790000, #    local_end 2038-10-31 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {49}
  
  sub _max_year {2037}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 0 }
  
  my $last_observance = bless( {
    'format' => 'WE%sT',
    'gmtoff' => '0:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 725006,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 725006,
      'utc_rd_secs' => 82800,
      'utc_year' => 1986
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 0,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 725006,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 725006,
      'utc_rd_secs' => 82800,
      'utc_year' => 1986
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '3:00',
      'from' => '2013',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'Morocco',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2026',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'Morocco',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_CASABLANCA

    $main::fatpacked{"DateTime/TimeZone/Africa/Ceuta.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_CEUTA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Ceuta;
  $DateTime::TimeZone::Africa::Ceuta::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Ceuta::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958231676, #      utc_end 1901-01-01 00:21:16 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  -1276,
  0,
  'LMT',
      ],
      [
  59958231676, #    utc_start 1901-01-01 00:21:16 (Tue)
  60505570800, #      utc_end 1918-05-06 23:00:00 (Mon)
  59958231676, #  local_start 1901-01-01 00:21:16 (Tue)
  60505570800, #    local_end 1918-05-06 23:00:00 (Mon)
  0,
  0,
  'WET',
      ],
      [
  60505570800, #    utc_start 1918-05-06 23:00:00 (Mon)
  60518872800, #      utc_end 1918-10-07 22:00:00 (Mon)
  60505574400, #  local_start 1918-05-07 00:00:00 (Tue)
  60518876400, #    local_end 1918-10-07 23:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  60518872800, #    utc_start 1918-10-07 22:00:00 (Mon)
  60683990400, #      utc_end 1924-01-01 00:00:00 (Tue)
  60518872800, #  local_start 1918-10-07 22:00:00 (Mon)
  60683990400, #    local_end 1924-01-01 00:00:00 (Tue)
  0,
  0,
  'WET',
      ],
      [
  60683990400, #    utc_start 1924-01-01 00:00:00 (Tue)
  60693231600, #      utc_end 1924-04-16 23:00:00 (Wed)
  60683990400, #  local_start 1924-01-01 00:00:00 (Tue)
  60693231600, #    local_end 1924-04-16 23:00:00 (Wed)
  0,
  0,
  'WET',
      ],
      [
  60693231600, #    utc_start 1924-04-16 23:00:00 (Wed)
  60708006000, #      utc_end 1924-10-04 23:00:00 (Sat)
  60693235200, #  local_start 1924-04-17 00:00:00 (Thu)
  60708009600, #    local_end 1924-10-05 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60708006000, #    utc_start 1924-10-04 23:00:00 (Sat)
  60756390000, #      utc_end 1926-04-17 23:00:00 (Sat)
  60708006000, #  local_start 1924-10-04 23:00:00 (Sat)
  60756390000, #    local_end 1926-04-17 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60756390000, #    utc_start 1926-04-17 23:00:00 (Sat)
  60770905200, #      utc_end 1926-10-02 23:00:00 (Sat)
  60756393600, #  local_start 1926-04-18 00:00:00 (Sun)
  60770908800, #    local_end 1926-10-03 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60770905200, #    utc_start 1926-10-02 23:00:00 (Sat)
  60787234800, #      utc_end 1927-04-09 23:00:00 (Sat)
  60770905200, #  local_start 1926-10-02 23:00:00 (Sat)
  60787234800, #    local_end 1927-04-09 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60787234800, #    utc_start 1927-04-09 23:00:00 (Sat)
  60802354800, #      utc_end 1927-10-01 23:00:00 (Sat)
  60787238400, #  local_start 1927-04-10 00:00:00 (Sun)
  60802358400, #    local_end 1927-10-02 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60802354800, #    utc_start 1927-10-01 23:00:00 (Sat)
  60819289200, #      utc_end 1928-04-14 23:00:00 (Sat)
  60802354800, #  local_start 1927-10-01 23:00:00 (Sat)
  60819289200, #    local_end 1928-04-14 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60819289200, #    utc_start 1928-04-14 23:00:00 (Sat)
  60834409200, #      utc_end 1928-10-06 23:00:00 (Sat)
  60819292800, #  local_start 1928-04-15 00:00:00 (Sun)
  60834412800, #    local_end 1928-10-07 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60834409200, #    utc_start 1928-10-06 23:00:00 (Sat)
  60841843200, #      utc_end 1929-01-01 00:00:00 (Tue)
  60834409200, #  local_start 1928-10-06 23:00:00 (Sat)
  60841843200, #    local_end 1929-01-01 00:00:00 (Tue)
  0,
  0,
  'WET',
      ],
      [
  60841843200, #    utc_start 1929-01-01 00:00:00 (Tue)
  62054251200, #      utc_end 1967-06-03 12:00:00 (Sat)
  60841843200, #  local_start 1929-01-01 00:00:00 (Tue)
  62054251200, #    local_end 1967-06-03 12:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  62054251200, #    utc_start 1967-06-03 12:00:00 (Sat)
  62064572400, #      utc_end 1967-09-30 23:00:00 (Sat)
  62054254800, #  local_start 1967-06-03 13:00:00 (Sat)
  62064576000, #    local_end 1967-10-01 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62064572400, #    utc_start 1967-09-30 23:00:00 (Sat)
  62276947200, #      utc_end 1974-06-24 00:00:00 (Mon)
  62064572400, #  local_start 1967-09-30 23:00:00 (Sat)
  62276947200, #    local_end 1974-06-24 00:00:00 (Mon)
  0,
  0,
  'WET',
      ],
      [
  62276947200, #    utc_start 1974-06-24 00:00:00 (Mon)
  62282905200, #      utc_end 1974-08-31 23:00:00 (Sat)
  62276950800, #  local_start 1974-06-24 01:00:00 (Mon)
  62282908800, #    local_end 1974-09-01 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62282905200, #    utc_start 1974-08-31 23:00:00 (Sat)
  62335440000, #      utc_end 1976-05-01 00:00:00 (Sat)
  62282905200, #  local_start 1974-08-31 23:00:00 (Sat)
  62335440000, #    local_end 1976-05-01 00:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  62335440000, #    utc_start 1976-05-01 00:00:00 (Sat)
  62343385200, #      utc_end 1976-07-31 23:00:00 (Sat)
  62335443600, #  local_start 1976-05-01 01:00:00 (Sat)
  62343388800, #    local_end 1976-08-01 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62343385200, #    utc_start 1976-07-31 23:00:00 (Sat)
  62366976000, #      utc_end 1977-05-01 00:00:00 (Sun)
  62343385200, #  local_start 1976-07-31 23:00:00 (Sat)
  62366976000, #    local_end 1977-05-01 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62366976000, #    utc_start 1977-05-01 00:00:00 (Sun)
  62379932400, #      utc_end 1977-09-27 23:00:00 (Tue)
  62366979600, #  local_start 1977-05-01 01:00:00 (Sun)
  62379936000, #    local_end 1977-09-28 00:00:00 (Wed)
  3600,
  1,
  'WEST',
      ],
      [
  62379932400, #    utc_start 1977-09-27 23:00:00 (Tue)
  62401190400, #      utc_end 1978-06-01 00:00:00 (Thu)
  62379932400, #  local_start 1977-09-27 23:00:00 (Tue)
  62401190400, #    local_end 1978-06-01 00:00:00 (Thu)
  0,
  0,
  'WET',
      ],
      [
  62401190400, #    utc_start 1978-06-01 00:00:00 (Thu)
  62406716400, #      utc_end 1978-08-03 23:00:00 (Thu)
  62401194000, #  local_start 1978-06-01 01:00:00 (Thu)
  62406720000, #    local_end 1978-08-04 00:00:00 (Fri)
  3600,
  1,
  'WEST',
      ],
      [
  62406716400, #    utc_start 1978-08-03 23:00:00 (Thu)
  62583926400, #      utc_end 1984-03-16 00:00:00 (Fri)
  62406716400, #  local_start 1978-08-03 23:00:00 (Thu)
  62583926400, #    local_end 1984-03-16 00:00:00 (Fri)
  0,
  0,
  'WET',
      ],
      [
  62583926400, #    utc_start 1984-03-16 00:00:00 (Fri)
  62640601200, #      utc_end 1985-12-31 23:00:00 (Tue)
  62583930000, #  local_start 1984-03-16 01:00:00 (Fri)
  62640604800, #    local_end 1986-01-01 00:00:00 (Wed)
  3600,
  0,
  'CET',
      ],
      [
  62640601200, #    utc_start 1985-12-31 23:00:00 (Tue)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62640604800, #  local_start 1986-01-01 00:00:00 (Wed)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {52}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 725007,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 725007,
      'utc_rd_secs' => 0,
      'utc_year' => 1987
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 725006,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 725006,
      'utc_rd_secs' => 82800,
      'utc_year' => 1986
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_CEUTA

    $main::fatpacked{"DateTime/TimeZone/Africa/El_Aaiun.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_EL_AAIUN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::El_Aaiun;
  $DateTime::TimeZone::Africa::El_Aaiun::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::El_Aaiun::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60999612768, #      utc_end 1934-01-01 00:52:48 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60999609600, #    local_end 1934-01-01 00:00:00 (Mon)
  -3168,
  0,
  'LMT',
      ],
      [
  60999612768, #    utc_start 1934-01-01 00:52:48 (Mon)
  62333974800, #      utc_end 1976-04-14 01:00:00 (Wed)
  60999609168, #  local_start 1933-12-31 23:52:48 (Sun)
  62333971200, #    local_end 1976-04-14 00:00:00 (Wed)
  -3600,
  0,
  'WAT',
      ],
      [
  62333974800, #    utc_start 1976-04-14 01:00:00 (Wed)
  62335440000, #      utc_end 1976-05-01 00:00:00 (Sat)
  62333974800, #  local_start 1976-04-14 01:00:00 (Wed)
  62335440000, #    local_end 1976-05-01 00:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  62335440000, #    utc_start 1976-05-01 00:00:00 (Sat)
  62343385200, #      utc_end 1976-07-31 23:00:00 (Sat)
  62335443600, #  local_start 1976-05-01 01:00:00 (Sat)
  62343388800, #    local_end 1976-08-01 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62343385200, #    utc_start 1976-07-31 23:00:00 (Sat)
  62366976000, #      utc_end 1977-05-01 00:00:00 (Sun)
  62343385200, #  local_start 1976-07-31 23:00:00 (Sat)
  62366976000, #    local_end 1977-05-01 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62366976000, #    utc_start 1977-05-01 00:00:00 (Sun)
  62379932400, #      utc_end 1977-09-27 23:00:00 (Tue)
  62366979600, #  local_start 1977-05-01 01:00:00 (Sun)
  62379936000, #    local_end 1977-09-28 00:00:00 (Wed)
  3600,
  1,
  'WEST',
      ],
      [
  62379932400, #    utc_start 1977-09-27 23:00:00 (Tue)
  62401190400, #      utc_end 1978-06-01 00:00:00 (Thu)
  62379932400, #  local_start 1977-09-27 23:00:00 (Tue)
  62401190400, #    local_end 1978-06-01 00:00:00 (Thu)
  0,
  0,
  'WET',
      ],
      [
  62401190400, #    utc_start 1978-06-01 00:00:00 (Thu)
  62406716400, #      utc_end 1978-08-03 23:00:00 (Thu)
  62401194000, #  local_start 1978-06-01 01:00:00 (Thu)
  62406720000, #    local_end 1978-08-04 00:00:00 (Fri)
  3600,
  1,
  'WEST',
      ],
      [
  62406716400, #    utc_start 1978-08-03 23:00:00 (Thu)
  63347961600, #      utc_end 2008-06-01 00:00:00 (Sun)
  62406716400, #  local_start 1978-08-03 23:00:00 (Thu)
  63347961600, #    local_end 2008-06-01 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63347961600, #    utc_start 2008-06-01 00:00:00 (Sun)
  63355906800, #      utc_end 2008-08-31 23:00:00 (Sun)
  63347965200, #  local_start 2008-06-01 01:00:00 (Sun)
  63355910400, #    local_end 2008-09-01 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  63355906800, #    utc_start 2008-08-31 23:00:00 (Sun)
  63379497600, #      utc_end 2009-06-01 00:00:00 (Mon)
  63355906800, #  local_start 2008-08-31 23:00:00 (Sun)
  63379497600, #    local_end 2009-06-01 00:00:00 (Mon)
  0,
  0,
  'WET',
      ],
      [
  63379497600, #    utc_start 2009-06-01 00:00:00 (Mon)
  63386492400, #      utc_end 2009-08-20 23:00:00 (Thu)
  63379501200, #  local_start 2009-06-01 01:00:00 (Mon)
  63386496000, #    local_end 2009-08-21 00:00:00 (Fri)
  3600,
  1,
  'WEST',
      ],
      [
  63386492400, #    utc_start 2009-08-20 23:00:00 (Thu)
  63408441600, #      utc_end 2010-05-02 00:00:00 (Sun)
  63386492400, #  local_start 2009-08-20 23:00:00 (Thu)
  63408441600, #    local_end 2010-05-02 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63408441600, #    utc_start 2010-05-02 00:00:00 (Sun)
  63416905200, #      utc_end 2010-08-07 23:00:00 (Sat)
  63408445200, #  local_start 2010-05-02 01:00:00 (Sun)
  63416908800, #    local_end 2010-08-08 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63416905200, #    utc_start 2010-08-07 23:00:00 (Sat)
  63437472000, #      utc_end 2011-04-03 00:00:00 (Sun)
  63416905200, #  local_start 2010-08-07 23:00:00 (Sat)
  63437472000, #    local_end 2011-04-03 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63437472000, #    utc_start 2011-04-03 00:00:00 (Sun)
  63447750000, #      utc_end 2011-07-30 23:00:00 (Sat)
  63437475600, #  local_start 2011-04-03 01:00:00 (Sun)
  63447753600, #    local_end 2011-07-31 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63447750000, #    utc_start 2011-07-30 23:00:00 (Sat)
  63471348000, #      utc_end 2012-04-29 02:00:00 (Sun)
  63447750000, #  local_start 2011-07-30 23:00:00 (Sat)
  63471348000, #    local_end 2012-04-29 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63471348000, #    utc_start 2012-04-29 02:00:00 (Sun)
  63478432800, #      utc_end 2012-07-20 02:00:00 (Fri)
  63471351600, #  local_start 2012-04-29 03:00:00 (Sun)
  63478436400, #    local_end 2012-07-20 03:00:00 (Fri)
  3600,
  1,
  'WEST',
      ],
      [
  63478432800, #    utc_start 2012-07-20 02:00:00 (Fri)
  63481111200, #      utc_end 2012-08-20 02:00:00 (Mon)
  63478432800, #  local_start 2012-07-20 02:00:00 (Fri)
  63481111200, #    local_end 2012-08-20 02:00:00 (Mon)
  0,
  0,
  'WET',
      ],
      [
  63481111200, #    utc_start 2012-08-20 02:00:00 (Mon)
  63484653600, #      utc_end 2012-09-30 02:00:00 (Sun)
  63481114800, #  local_start 2012-08-20 03:00:00 (Mon)
  63484657200, #    local_end 2012-09-30 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63484653600, #    utc_start 2012-09-30 02:00:00 (Sun)
  63502797600, #      utc_end 2013-04-28 02:00:00 (Sun)
  63484653600, #  local_start 2012-09-30 02:00:00 (Sun)
  63502797600, #    local_end 2013-04-28 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63502797600, #    utc_start 2013-04-28 02:00:00 (Sun)
  63508845600, #      utc_end 2013-07-07 02:00:00 (Sun)
  63502801200, #  local_start 2013-04-28 03:00:00 (Sun)
  63508849200, #    local_end 2013-07-07 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63508845600, #    utc_start 2013-07-07 02:00:00 (Sun)
  63511783200, #      utc_end 2013-08-10 02:00:00 (Sat)
  63508845600, #  local_start 2013-07-07 02:00:00 (Sun)
  63511783200, #    local_end 2013-08-10 02:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  63511783200, #    utc_start 2013-08-10 02:00:00 (Sat)
  63518522400, #      utc_end 2013-10-27 02:00:00 (Sun)
  63511786800, #  local_start 2013-08-10 03:00:00 (Sat)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63518522400, #    utc_start 2013-10-27 02:00:00 (Sun)
  63531828000, #      utc_end 2014-03-30 02:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63531828000, #    utc_start 2014-03-30 02:00:00 (Sun)
  63539604000, #      utc_end 2014-06-28 02:00:00 (Sat)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63539607600, #    local_end 2014-06-28 03:00:00 (Sat)
  3600,
  1,
  'WEST',
      ],
      [
  63539604000, #    utc_start 2014-06-28 02:00:00 (Sat)
  63542628000, #      utc_end 2014-08-02 02:00:00 (Sat)
  63539604000, #  local_start 2014-06-28 02:00:00 (Sat)
  63542628000, #    local_end 2014-08-02 02:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  63542628000, #    utc_start 2014-08-02 02:00:00 (Sat)
  63549972000, #      utc_end 2014-10-26 02:00:00 (Sun)
  63542631600, #  local_start 2014-08-02 03:00:00 (Sat)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63549972000, #    utc_start 2014-10-26 02:00:00 (Sun)
  63563277600, #      utc_end 2015-03-29 02:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63563277600, #    utc_start 2015-03-29 02:00:00 (Sun)
  63569930400, #      utc_end 2015-06-14 02:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63569934000, #    local_end 2015-06-14 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63569930400, #    utc_start 2015-06-14 02:00:00 (Sun)
  63572954400, #      utc_end 2015-07-19 02:00:00 (Sun)
  63569930400, #  local_start 2015-06-14 02:00:00 (Sun)
  63572954400, #    local_end 2015-07-19 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63572954400, #    utc_start 2015-07-19 02:00:00 (Sun)
  63581421600, #      utc_end 2015-10-25 02:00:00 (Sun)
  63572958000, #  local_start 2015-07-19 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63581421600, #    utc_start 2015-10-25 02:00:00 (Sun)
  63594727200, #      utc_end 2016-03-27 02:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63594727200, #    utc_start 2016-03-27 02:00:00 (Sun)
  63600775200, #      utc_end 2016-06-05 02:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63600778800, #    local_end 2016-06-05 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63600775200, #    utc_start 2016-06-05 02:00:00 (Sun)
  63603799200, #      utc_end 2016-07-10 02:00:00 (Sun)
  63600775200, #  local_start 2016-06-05 02:00:00 (Sun)
  63603799200, #    local_end 2016-07-10 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63603799200, #    utc_start 2016-07-10 02:00:00 (Sun)
  63613476000, #      utc_end 2016-10-30 02:00:00 (Sun)
  63603802800, #  local_start 2016-07-10 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63613476000, #    utc_start 2016-10-30 02:00:00 (Sun)
  63626176800, #      utc_end 2017-03-26 02:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63626176800, #    utc_start 2017-03-26 02:00:00 (Sun)
  63631015200, #      utc_end 2017-05-21 02:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63631018800, #    local_end 2017-05-21 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63631015200, #    utc_start 2017-05-21 02:00:00 (Sun)
  63634644000, #      utc_end 2017-07-02 02:00:00 (Sun)
  63631015200, #  local_start 2017-05-21 02:00:00 (Sun)
  63634644000, #    local_end 2017-07-02 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63634644000, #    utc_start 2017-07-02 02:00:00 (Sun)
  63644925600, #      utc_end 2017-10-29 02:00:00 (Sun)
  63634647600, #  local_start 2017-07-02 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63644925600, #    utc_start 2017-10-29 02:00:00 (Sun)
  63657626400, #      utc_end 2018-03-25 02:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63657626400, #    utc_start 2018-03-25 02:00:00 (Sun)
  63661860000, #      utc_end 2018-05-13 02:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63661863600, #    local_end 2018-05-13 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63661860000, #    utc_start 2018-05-13 02:00:00 (Sun)
  63664884000, #      utc_end 2018-06-17 02:00:00 (Sun)
  63661860000, #  local_start 2018-05-13 02:00:00 (Sun)
  63664884000, #    local_end 2018-06-17 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63664884000, #    utc_start 2018-06-17 02:00:00 (Sun)
  63676375200, #      utc_end 2018-10-28 02:00:00 (Sun)
  63664887600, #  local_start 2018-06-17 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63676375200, #    utc_start 2018-10-28 02:00:00 (Sun)
  63689680800, #      utc_end 2019-03-31 02:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63689680800, #    utc_start 2019-03-31 02:00:00 (Sun)
  63692704800, #      utc_end 2019-05-05 02:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63692708400, #    local_end 2019-05-05 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63692704800, #    utc_start 2019-05-05 02:00:00 (Sun)
  63695728800, #      utc_end 2019-06-09 02:00:00 (Sun)
  63692704800, #  local_start 2019-05-05 02:00:00 (Sun)
  63695728800, #    local_end 2019-06-09 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63695728800, #    utc_start 2019-06-09 02:00:00 (Sun)
  63707824800, #      utc_end 2019-10-27 02:00:00 (Sun)
  63695732400, #  local_start 2019-06-09 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63707824800, #    utc_start 2019-10-27 02:00:00 (Sun)
  63721130400, #      utc_end 2020-03-29 02:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63721130400, #    utc_start 2020-03-29 02:00:00 (Sun)
  63722944800, #      utc_end 2020-04-19 02:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63722948400, #    local_end 2020-04-19 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63722944800, #    utc_start 2020-04-19 02:00:00 (Sun)
  63725968800, #      utc_end 2020-05-24 02:00:00 (Sun)
  63722944800, #  local_start 2020-04-19 02:00:00 (Sun)
  63725968800, #    local_end 2020-05-24 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63725968800, #    utc_start 2020-05-24 02:00:00 (Sun)
  63739274400, #      utc_end 2020-10-25 02:00:00 (Sun)
  63725972400, #  local_start 2020-05-24 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63739274400, #    utc_start 2020-10-25 02:00:00 (Sun)
  63752580000, #      utc_end 2021-03-28 02:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63752580000, #    utc_start 2021-03-28 02:00:00 (Sun)
  63753789600, #      utc_end 2021-04-11 02:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63753793200, #    local_end 2021-04-11 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63753789600, #    utc_start 2021-04-11 02:00:00 (Sun)
  63756813600, #      utc_end 2021-05-16 02:00:00 (Sun)
  63753789600, #  local_start 2021-04-11 02:00:00 (Sun)
  63756813600, #    local_end 2021-05-16 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63756813600, #    utc_start 2021-05-16 02:00:00 (Sun)
  63771328800, #      utc_end 2021-10-31 02:00:00 (Sun)
  63756817200, #  local_start 2021-05-16 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63771328800, #    utc_start 2021-10-31 02:00:00 (Sun)
  63787658400, #      utc_end 2022-05-08 02:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63787658400, #    local_end 2022-05-08 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63787658400, #    utc_start 2022-05-08 02:00:00 (Sun)
  63802778400, #      utc_end 2022-10-30 02:00:00 (Sun)
  63787662000, #  local_start 2022-05-08 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63802778400, #    utc_start 2022-10-30 02:00:00 (Sun)
  63817898400, #      utc_end 2023-04-23 02:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63817898400, #    local_end 2023-04-23 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63817898400, #    utc_start 2023-04-23 02:00:00 (Sun)
  63834228000, #      utc_end 2023-10-29 02:00:00 (Sun)
  63817902000, #  local_start 2023-04-23 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63834228000, #    utc_start 2023-10-29 02:00:00 (Sun)
  63848743200, #      utc_end 2024-04-14 02:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63848743200, #    local_end 2024-04-14 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63848743200, #    utc_start 2024-04-14 02:00:00 (Sun)
  63865677600, #      utc_end 2024-10-27 02:00:00 (Sun)
  63848746800, #  local_start 2024-04-14 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63865677600, #    utc_start 2024-10-27 02:00:00 (Sun)
  63879588000, #      utc_end 2025-04-06 02:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63879588000, #    local_end 2025-04-06 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63879588000, #    utc_start 2025-04-06 02:00:00 (Sun)
  63897127200, #      utc_end 2025-10-26 02:00:00 (Sun)
  63879591600, #  local_start 2025-04-06 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63897127200, #    utc_start 2025-10-26 02:00:00 (Sun)
  63910432800, #      utc_end 2026-03-29 02:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63910432800, #    utc_start 2026-03-29 02:00:00 (Sun)
  63928576800, #      utc_end 2026-10-25 02:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63928576800, #    utc_start 2026-10-25 02:00:00 (Sun)
  63941882400, #      utc_end 2027-03-28 02:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63941882400, #    utc_start 2027-03-28 02:00:00 (Sun)
  63960631200, #      utc_end 2027-10-31 02:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63960631200, #    utc_start 2027-10-31 02:00:00 (Sun)
  63973332000, #      utc_end 2028-03-26 02:00:00 (Sun)
  63960631200, #  local_start 2027-10-31 02:00:00 (Sun)
  63973332000, #    local_end 2028-03-26 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63973332000, #    utc_start 2028-03-26 02:00:00 (Sun)
  63992080800, #      utc_end 2028-10-29 02:00:00 (Sun)
  63973335600, #  local_start 2028-03-26 03:00:00 (Sun)
  63992084400, #    local_end 2028-10-29 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63992080800, #    utc_start 2028-10-29 02:00:00 (Sun)
  64004781600, #      utc_end 2029-03-25 02:00:00 (Sun)
  63992080800, #  local_start 2028-10-29 02:00:00 (Sun)
  64004781600, #    local_end 2029-03-25 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64004781600, #    utc_start 2029-03-25 02:00:00 (Sun)
  64023530400, #      utc_end 2029-10-28 02:00:00 (Sun)
  64004785200, #  local_start 2029-03-25 03:00:00 (Sun)
  64023534000, #    local_end 2029-10-28 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64023530400, #    utc_start 2029-10-28 02:00:00 (Sun)
  64036836000, #      utc_end 2030-03-31 02:00:00 (Sun)
  64023530400, #  local_start 2029-10-28 02:00:00 (Sun)
  64036836000, #    local_end 2030-03-31 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64036836000, #    utc_start 2030-03-31 02:00:00 (Sun)
  64054980000, #      utc_end 2030-10-27 02:00:00 (Sun)
  64036839600, #  local_start 2030-03-31 03:00:00 (Sun)
  64054983600, #    local_end 2030-10-27 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64054980000, #    utc_start 2030-10-27 02:00:00 (Sun)
  64068285600, #      utc_end 2031-03-30 02:00:00 (Sun)
  64054980000, #  local_start 2030-10-27 02:00:00 (Sun)
  64068285600, #    local_end 2031-03-30 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64068285600, #    utc_start 2031-03-30 02:00:00 (Sun)
  64086429600, #      utc_end 2031-10-26 02:00:00 (Sun)
  64068289200, #  local_start 2031-03-30 03:00:00 (Sun)
  64086433200, #    local_end 2031-10-26 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64086429600, #    utc_start 2031-10-26 02:00:00 (Sun)
  64099735200, #      utc_end 2032-03-28 02:00:00 (Sun)
  64086429600, #  local_start 2031-10-26 02:00:00 (Sun)
  64099735200, #    local_end 2032-03-28 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64099735200, #    utc_start 2032-03-28 02:00:00 (Sun)
  64118484000, #      utc_end 2032-10-31 02:00:00 (Sun)
  64099738800, #  local_start 2032-03-28 03:00:00 (Sun)
  64118487600, #    local_end 2032-10-31 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64118484000, #    utc_start 2032-10-31 02:00:00 (Sun)
  64131184800, #      utc_end 2033-03-27 02:00:00 (Sun)
  64118484000, #  local_start 2032-10-31 02:00:00 (Sun)
  64131184800, #    local_end 2033-03-27 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64131184800, #    utc_start 2033-03-27 02:00:00 (Sun)
  64149933600, #      utc_end 2033-10-30 02:00:00 (Sun)
  64131188400, #  local_start 2033-03-27 03:00:00 (Sun)
  64149937200, #    local_end 2033-10-30 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64149933600, #    utc_start 2033-10-30 02:00:00 (Sun)
  64162634400, #      utc_end 2034-03-26 02:00:00 (Sun)
  64149933600, #  local_start 2033-10-30 02:00:00 (Sun)
  64162634400, #    local_end 2034-03-26 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64162634400, #    utc_start 2034-03-26 02:00:00 (Sun)
  64181383200, #      utc_end 2034-10-29 02:00:00 (Sun)
  64162638000, #  local_start 2034-03-26 03:00:00 (Sun)
  64181386800, #    local_end 2034-10-29 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64181383200, #    utc_start 2034-10-29 02:00:00 (Sun)
  64194084000, #      utc_end 2035-03-25 02:00:00 (Sun)
  64181383200, #  local_start 2034-10-29 02:00:00 (Sun)
  64194084000, #    local_end 2035-03-25 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64194084000, #    utc_start 2035-03-25 02:00:00 (Sun)
  64212832800, #      utc_end 2035-10-28 02:00:00 (Sun)
  64194087600, #  local_start 2035-03-25 03:00:00 (Sun)
  64212836400, #    local_end 2035-10-28 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64212832800, #    utc_start 2035-10-28 02:00:00 (Sun)
  64226138400, #      utc_end 2036-03-30 02:00:00 (Sun)
  64212832800, #  local_start 2035-10-28 02:00:00 (Sun)
  64226138400, #    local_end 2036-03-30 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64226138400, #    utc_start 2036-03-30 02:00:00 (Sun)
  64243677600, #      utc_end 2036-10-19 02:00:00 (Sun)
  64226142000, #  local_start 2036-03-30 03:00:00 (Sun)
  64243681200, #    local_end 2036-10-19 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64243677600, #    utc_start 2036-10-19 02:00:00 (Sun)
  64257588000, #      utc_end 2037-03-29 02:00:00 (Sun)
  64243677600, #  local_start 2036-10-19 02:00:00 (Sun)
  64257588000, #    local_end 2037-03-29 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64257588000, #    utc_start 2037-03-29 02:00:00 (Sun)
  64273917600, #      utc_end 2037-10-04 02:00:00 (Sun)
  64257591600, #  local_start 2037-03-29 03:00:00 (Sun)
  64273921200, #    local_end 2037-10-04 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  64273917600, #    utc_start 2037-10-04 02:00:00 (Sun)
  64289037600, #      utc_end 2038-03-28 02:00:00 (Sun)
  64273917600, #  local_start 2037-10-04 02:00:00 (Sun)
  64289037600, #    local_end 2038-03-28 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  64289037600, #    utc_start 2038-03-28 02:00:00 (Sun)
  64307786400, #      utc_end 2038-10-31 02:00:00 (Sun)
  64289041200, #  local_start 2038-03-28 03:00:00 (Sun)
  64307790000, #    local_end 2038-10-31 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {44}
  
  sub _max_year {2037}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 0 }
  
  my $last_observance = bless( {
    'format' => 'WE%sT',
    'gmtoff' => '0:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721458,
      'local_rd_secs' => 3600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721458,
      'utc_rd_secs' => 3600,
      'utc_year' => 1977
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 0,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721458,
      'local_rd_secs' => 3600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721458,
      'utc_rd_secs' => 3600,
      'utc_year' => 1977
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2026',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'Morocco',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '3:00',
      'from' => '2013',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'Morocco',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_EL_AAIUN

    $main::fatpacked{"DateTime/TimeZone/Africa/Johannesburg.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_JOHANNESBURG';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Johannesburg;
  $DateTime::TimeZone::Africa::Johannesburg::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Johannesburg::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59677510080, #      utc_end 1892-02-07 22:08:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59677516800, #    local_end 1892-02-08 00:00:00 (Mon)
  6720,
  0,
  'LMT',
      ],
      [
  59677510080, #    utc_start 1892-02-07 22:08:00 (Sun)
  60026394600, #      utc_end 1903-02-28 22:30:00 (Sat)
  59677515480, #  local_start 1892-02-07 23:38:00 (Sun)
  60026400000, #    local_end 1903-03-01 00:00:00 (Sun)
  5400,
  0,
  'SAST',
      ],
      [
  60026394600, #    utc_start 1903-02-28 22:30:00 (Sat)
  61274707200, #      utc_end 1942-09-20 00:00:00 (Sun)
  60026401800, #  local_start 1903-03-01 00:30:00 (Sun)
  61274714400, #    local_end 1942-09-20 02:00:00 (Sun)
  7200,
  0,
  'SAST',
      ],
      [
  61274707200, #    utc_start 1942-09-20 00:00:00 (Sun)
  61290428400, #      utc_end 1943-03-20 23:00:00 (Sat)
  61274718000, #  local_start 1942-09-20 03:00:00 (Sun)
  61290439200, #    local_end 1943-03-21 02:00:00 (Sun)
  10800,
  1,
  'SAST',
      ],
      [
  61290428400, #    utc_start 1943-03-20 23:00:00 (Sat)
  61306156800, #      utc_end 1943-09-19 00:00:00 (Sun)
  61290435600, #  local_start 1943-03-21 01:00:00 (Sun)
  61306164000, #    local_end 1943-09-19 02:00:00 (Sun)
  7200,
  0,
  'SAST',
      ],
      [
  61306156800, #    utc_start 1943-09-19 00:00:00 (Sun)
  61321878000, #      utc_end 1944-03-18 23:00:00 (Sat)
  61306167600, #  local_start 1943-09-19 03:00:00 (Sun)
  61321888800, #    local_end 1944-03-19 02:00:00 (Sun)
  10800,
  1,
  'SAST',
      ],
      [
  61321878000, #    utc_start 1944-03-18 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  61321885200, #  local_start 1944-03-19 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  7200,
  0,
  'SAST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {2}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_JOHANNESBURG

    $main::fatpacked{"DateTime/TimeZone/Africa/Khartoum.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_KHARTOUM';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Khartoum;
  $DateTime::TimeZone::Africa::Khartoum::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Khartoum::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60904907392, #      utc_end 1930-12-31 21:49:52 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60904915200, #    local_end 1931-01-01 00:00:00 (Thu)
  7808,
  0,
  'LMT',
      ],
      [
  60904907392, #    utc_start 1930-12-31 21:49:52 (Wed)
  62146044000, #      utc_end 1970-04-30 22:00:00 (Thu)
  60904914592, #  local_start 1930-12-31 23:49:52 (Wed)
  62146051200, #    local_end 1970-05-01 00:00:00 (Fri)
  7200,
  0,
  'CAT',
      ],
      [
  62146044000, #    utc_start 1970-04-30 22:00:00 (Thu)
  62160469200, #      utc_end 1970-10-14 21:00:00 (Wed)
  62146054800, #  local_start 1970-05-01 01:00:00 (Fri)
  62160480000, #    local_end 1970-10-15 00:00:00 (Thu)
  10800,
  1,
  'CAST',
      ],
      [
  62160469200, #    utc_start 1970-10-14 21:00:00 (Wed)
  62177493600, #      utc_end 1971-04-29 22:00:00 (Thu)
  62160476400, #  local_start 1970-10-14 23:00:00 (Wed)
  62177500800, #    local_end 1971-04-30 00:00:00 (Fri)
  7200,
  0,
  'CAT',
      ],
      [
  62177493600, #    utc_start 1971-04-29 22:00:00 (Thu)
  62192005200, #      utc_end 1971-10-14 21:00:00 (Thu)
  62177504400, #  local_start 1971-04-30 01:00:00 (Fri)
  62192016000, #    local_end 1971-10-15 00:00:00 (Fri)
  10800,
  1,
  'CAST',
      ],
      [
  62192005200, #    utc_start 1971-10-14 21:00:00 (Thu)
  62209116000, #      utc_end 1972-04-29 22:00:00 (Sat)
  62192012400, #  local_start 1971-10-14 23:00:00 (Thu)
  62209123200, #    local_end 1972-04-30 00:00:00 (Sun)
  7200,
  0,
  'CAT',
      ],
      [
  62209116000, #    utc_start 1972-04-29 22:00:00 (Sat)
  62223627600, #      utc_end 1972-10-14 21:00:00 (Sat)
  62209126800, #  local_start 1972-04-30 01:00:00 (Sun)
  62223638400, #    local_end 1972-10-15 00:00:00 (Sun)
  10800,
  1,
  'CAST',
      ],
      [
  62223627600, #    utc_start 1972-10-14 21:00:00 (Sat)
  62240565600, #      utc_end 1973-04-28 22:00:00 (Sat)
  62223634800, #  local_start 1972-10-14 23:00:00 (Sat)
  62240572800, #    local_end 1973-04-29 00:00:00 (Sun)
  7200,
  0,
  'CAT',
      ],
      [
  62240565600, #    utc_start 1973-04-28 22:00:00 (Sat)
  62255163600, #      utc_end 1973-10-14 21:00:00 (Sun)
  62240576400, #  local_start 1973-04-29 01:00:00 (Sun)
  62255174400, #    local_end 1973-10-15 00:00:00 (Mon)
  10800,
  1,
  'CAST',
      ],
      [
  62255163600, #    utc_start 1973-10-14 21:00:00 (Sun)
  62272015200, #      utc_end 1974-04-27 22:00:00 (Sat)
  62255170800, #  local_start 1973-10-14 23:00:00 (Sun)
  62272022400, #    local_end 1974-04-28 00:00:00 (Sun)
  7200,
  0,
  'CAT',
      ],
      [
  62272015200, #    utc_start 1974-04-27 22:00:00 (Sat)
  62286699600, #      utc_end 1974-10-14 21:00:00 (Mon)
  62272026000, #  local_start 1974-04-28 01:00:00 (Sun)
  62286710400, #    local_end 1974-10-15 00:00:00 (Tue)
  10800,
  1,
  'CAST',
      ],
      [
  62286699600, #    utc_start 1974-10-14 21:00:00 (Mon)
  62303464800, #      utc_end 1975-04-26 22:00:00 (Sat)
  62286706800, #  local_start 1974-10-14 23:00:00 (Mon)
  62303472000, #    local_end 1975-04-27 00:00:00 (Sun)
  7200,
  0,
  'CAT',
      ],
      [
  62303464800, #    utc_start 1975-04-26 22:00:00 (Sat)
  62318235600, #      utc_end 1975-10-14 21:00:00 (Tue)
  62303475600, #  local_start 1975-04-27 01:00:00 (Sun)
  62318246400, #    local_end 1975-10-15 00:00:00 (Wed)
  10800,
  1,
  'CAST',
      ],
      [
  62318235600, #    utc_start 1975-10-14 21:00:00 (Tue)
  62334914400, #      utc_end 1976-04-24 22:00:00 (Sat)
  62318242800, #  local_start 1975-10-14 23:00:00 (Tue)
  62334921600, #    local_end 1976-04-25 00:00:00 (Sun)
  7200,
  0,
  'CAT',
      ],
      [
  62334914400, #    utc_start 1976-04-24 22:00:00 (Sat)
  62349858000, #      utc_end 1976-10-14 21:00:00 (Thu)
  62334925200, #  local_start 1976-04-25 01:00:00 (Sun)
  62349868800, #    local_end 1976-10-15 00:00:00 (Fri)
  10800,
  1,
  'CAST',
      ],
      [
  62349858000, #    utc_start 1976-10-14 21:00:00 (Thu)
  62366364000, #      utc_end 1977-04-23 22:00:00 (Sat)
  62349865200, #  local_start 1976-10-14 23:00:00 (Thu)
  62366371200, #    local_end 1977-04-24 00:00:00 (Sun)
  7200,
  0,
  'CAT',
      ],
      [
  62366364000, #    utc_start 1977-04-23 22:00:00 (Sat)
  62381394000, #      utc_end 1977-10-14 21:00:00 (Fri)
  62366374800, #  local_start 1977-04-24 01:00:00 (Sun)
  62381404800, #    local_end 1977-10-15 00:00:00 (Sat)
  10800,
  1,
  'CAST',
      ],
      [
  62381394000, #    utc_start 1977-10-14 21:00:00 (Fri)
  62398418400, #      utc_end 1978-04-29 22:00:00 (Sat)
  62381401200, #  local_start 1977-10-14 23:00:00 (Fri)
  62398425600, #    local_end 1978-04-30 00:00:00 (Sun)
  7200,
  0,
  'CAT',
      ],
      [
  62398418400, #    utc_start 1978-04-29 22:00:00 (Sat)
  62412930000, #      utc_end 1978-10-14 21:00:00 (Sat)
  62398429200, #  local_start 1978-04-30 01:00:00 (Sun)
  62412940800, #    local_end 1978-10-15 00:00:00 (Sun)
  10800,
  1,
  'CAST',
      ],
      [
  62412930000, #    utc_start 1978-10-14 21:00:00 (Sat)
  62429868000, #      utc_end 1979-04-28 22:00:00 (Sat)
  62412937200, #  local_start 1978-10-14 23:00:00 (Sat)
  62429875200, #    local_end 1979-04-29 00:00:00 (Sun)
  7200,
  0,
  'CAT',
      ],
      [
  62429868000, #    utc_start 1979-04-28 22:00:00 (Sat)
  62444466000, #      utc_end 1979-10-14 21:00:00 (Sun)
  62429878800, #  local_start 1979-04-29 01:00:00 (Sun)
  62444476800, #    local_end 1979-10-15 00:00:00 (Mon)
  10800,
  1,
  'CAST',
      ],
      [
  62444466000, #    utc_start 1979-10-14 21:00:00 (Sun)
  62461317600, #      utc_end 1980-04-26 22:00:00 (Sat)
  62444473200, #  local_start 1979-10-14 23:00:00 (Sun)
  62461324800, #    local_end 1980-04-27 00:00:00 (Sun)
  7200,
  0,
  'CAT',
      ],
      [
  62461317600, #    utc_start 1980-04-26 22:00:00 (Sat)
  62476088400, #      utc_end 1980-10-14 21:00:00 (Tue)
  62461328400, #  local_start 1980-04-27 01:00:00 (Sun)
  62476099200, #    local_end 1980-10-15 00:00:00 (Wed)
  10800,
  1,
  'CAST',
      ],
      [
  62476088400, #    utc_start 1980-10-14 21:00:00 (Tue)
  62492767200, #      utc_end 1981-04-25 22:00:00 (Sat)
  62476095600, #  local_start 1980-10-14 23:00:00 (Tue)
  62492774400, #    local_end 1981-04-26 00:00:00 (Sun)
  7200,
  0,
  'CAT',
      ],
      [
  62492767200, #    utc_start 1981-04-25 22:00:00 (Sat)
  62507624400, #      utc_end 1981-10-14 21:00:00 (Wed)
  62492778000, #  local_start 1981-04-26 01:00:00 (Sun)
  62507635200, #    local_end 1981-10-15 00:00:00 (Thu)
  10800,
  1,
  'CAST',
      ],
      [
  62507624400, #    utc_start 1981-10-14 21:00:00 (Wed)
  62524216800, #      utc_end 1982-04-24 22:00:00 (Sat)
  62507631600, #  local_start 1981-10-14 23:00:00 (Wed)
  62524224000, #    local_end 1982-04-25 00:00:00 (Sun)
  7200,
  0,
  'CAT',
      ],
      [
  62524216800, #    utc_start 1982-04-24 22:00:00 (Sat)
  62539160400, #      utc_end 1982-10-14 21:00:00 (Thu)
  62524227600, #  local_start 1982-04-25 01:00:00 (Sun)
  62539171200, #    local_end 1982-10-15 00:00:00 (Fri)
  10800,
  1,
  'CAST',
      ],
      [
  62539160400, #    utc_start 1982-10-14 21:00:00 (Thu)
  62555666400, #      utc_end 1983-04-23 22:00:00 (Sat)
  62539167600, #  local_start 1982-10-14 23:00:00 (Thu)
  62555673600, #    local_end 1983-04-24 00:00:00 (Sun)
  7200,
  0,
  'CAT',
      ],
      [
  62555666400, #    utc_start 1983-04-23 22:00:00 (Sat)
  62570696400, #      utc_end 1983-10-14 21:00:00 (Fri)
  62555677200, #  local_start 1983-04-24 01:00:00 (Sun)
  62570707200, #    local_end 1983-10-15 00:00:00 (Sat)
  10800,
  1,
  'CAST',
      ],
      [
  62570696400, #    utc_start 1983-10-14 21:00:00 (Fri)
  62587720800, #      utc_end 1984-04-28 22:00:00 (Sat)
  62570703600, #  local_start 1983-10-14 23:00:00 (Fri)
  62587728000, #    local_end 1984-04-29 00:00:00 (Sun)
  7200,
  0,
  'CAT',
      ],
      [
  62587720800, #    utc_start 1984-04-28 22:00:00 (Sat)
  62602318800, #      utc_end 1984-10-14 21:00:00 (Sun)
  62587731600, #  local_start 1984-04-29 01:00:00 (Sun)
  62602329600, #    local_end 1984-10-15 00:00:00 (Mon)
  10800,
  1,
  'CAST',
      ],
      [
  62602318800, #    utc_start 1984-10-14 21:00:00 (Sun)
  62619170400, #      utc_end 1985-04-27 22:00:00 (Sat)
  62602326000, #  local_start 1984-10-14 23:00:00 (Sun)
  62619177600, #    local_end 1985-04-28 00:00:00 (Sun)
  7200,
  0,
  'CAT',
      ],
      [
  62619170400, #    utc_start 1985-04-27 22:00:00 (Sat)
  62633854800, #      utc_end 1985-10-14 21:00:00 (Mon)
  62619181200, #  local_start 1985-04-28 01:00:00 (Sun)
  62633865600, #    local_end 1985-10-15 00:00:00 (Tue)
  10800,
  1,
  'CAST',
      ],
      [
  62633854800, #    utc_start 1985-10-14 21:00:00 (Mon)
  63083613600, #      utc_end 2000-01-15 10:00:00 (Sat)
  62633862000, #  local_start 1985-10-14 23:00:00 (Mon)
  63083620800, #    local_end 2000-01-15 12:00:00 (Sat)
  7200,
  0,
  'CAT',
      ],
      [
  63083613600, #    utc_start 2000-01-15 10:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63083624400, #  local_start 2000-01-15 13:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  10800,
  0,
  'EAT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {16}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_KHARTOUM

    $main::fatpacked{"DateTime/TimeZone/Africa/Lagos.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_LAGOS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Lagos;
  $DateTime::TimeZone::Africa::Lagos::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Lagos::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60547218384, #      utc_end 1919-08-31 23:46:24 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60547219200, #    local_end 1919-09-01 00:00:00 (Mon)
  816,
  0,
  'LMT',
      ],
      [
  60547218384, #    utc_start 1919-08-31 23:46:24 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  60547221984, #  local_start 1919-09-01 00:46:24 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  3600,
  0,
  'WAT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_LAGOS

    $main::fatpacked{"DateTime/TimeZone/Africa/Maputo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_MAPUTO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Maputo;
  $DateTime::TimeZone::Africa::Maputo::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Maputo::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60026392180, #      utc_end 1903-02-28 21:49:40 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60026400000, #    local_end 1903-03-01 00:00:00 (Sun)
  7820,
  0,
  'LMT',
      ],
      [
  60026392180, #    utc_start 1903-02-28 21:49:40 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  60026399380, #  local_start 1903-02-28 23:49:40 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  7200,
  0,
  'CAT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_MAPUTO

    $main::fatpacked{"DateTime/TimeZone/Africa/Monrovia.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_MONROVIA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Monrovia;
  $DateTime::TimeZone::Africa::Monrovia::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Monrovia::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59358703388, #      utc_end 1882-01-01 00:43:08 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59358700800, #    local_end 1882-01-01 00:00:00 (Sun)
  -2588,
  0,
  'LMT',
      ],
      [
  59358703388, #    utc_start 1882-01-01 00:43:08 (Sun)
  60531324188, #      utc_end 1919-03-01 00:43:08 (Sat)
  59358700800, #  local_start 1882-01-01 00:00:00 (Sun)
  60531321600, #    local_end 1919-03-01 00:00:00 (Sat)
  -2588,
  0,
  'MMT',
      ],
      [
  60531324188, #    utc_start 1919-03-01 00:43:08 (Sat)
  62209212270, #      utc_end 1972-05-01 00:44:30 (Mon)
  60531321518, #  local_start 1919-02-28 23:58:38 (Fri)
  62209209600, #    local_end 1972-05-01 00:00:00 (Mon)
  -2670,
  0,
  'LRT',
      ],
      [
  62209212270, #    utc_start 1972-05-01 00:44:30 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  62209212270, #  local_start 1972-05-01 00:44:30 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  0,
  0,
  'GMT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_MONROVIA

    $main::fatpacked{"DateTime/TimeZone/Africa/Nairobi.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_NAIROBI';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Nairobi;
  $DateTime::TimeZone::Africa::Nairobi::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Nairobi::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60825936764, #      utc_end 1928-06-30 21:32:44 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60825945600, #    local_end 1928-07-01 00:00:00 (Sun)
  8836,
  0,
  'LMT',
      ],
      [
  60825936764, #    utc_start 1928-06-30 21:32:44 (Sat)
  60873368400, #      utc_end 1929-12-31 21:00:00 (Tue)
  60825947564, #  local_start 1928-07-01 00:32:44 (Sun)
  60873379200, #    local_end 1930-01-01 00:00:00 (Wed)
  10800,
  0,
  'EAT',
      ],
      [
  60873368400, #    utc_start 1929-12-31 21:00:00 (Tue)
  61188903000, #      utc_end 1939-12-31 21:30:00 (Sun)
  60873377400, #  local_start 1929-12-31 23:30:00 (Tue)
  61188912000, #    local_end 1940-01-01 00:00:00 (Mon)
  9000,
  0,
  'BEAT',
      ],
      [
  61188903000, #    utc_start 1939-12-31 21:30:00 (Sun)
  61820054100, #      utc_end 1959-12-31 21:15:00 (Thu)
  61188912900, #  local_start 1940-01-01 00:15:00 (Mon)
  61820064000, #    local_end 1960-01-01 00:00:00 (Fri)
  9900,
  0,
  'BEAUT',
      ],
      [
  61820054100, #    utc_start 1959-12-31 21:15:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  61820064900, #  local_start 1960-01-01 00:15:00 (Fri)
  DateTime::TimeZone::INFINITY, #    local_end
  10800,
  0,
  'EAT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_NAIROBI

    $main::fatpacked{"DateTime/TimeZone/Africa/Ndjamena.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_NDJAMENA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Ndjamena;
  $DateTime::TimeZone::Africa::Ndjamena::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Ndjamena::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60305295588, #      utc_end 1911-12-31 22:59:48 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60305299200, #    local_end 1912-01-01 00:00:00 (Mon)
  3612,
  0,
  'LMT',
      ],
      [
  60305295588, #    utc_start 1911-12-31 22:59:48 (Sun)
  62444386800, #      utc_end 1979-10-13 23:00:00 (Sat)
  60305299188, #  local_start 1911-12-31 23:59:48 (Sun)
  62444390400, #    local_end 1979-10-14 00:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  62444386800, #    utc_start 1979-10-13 23:00:00 (Sat)
  62456997600, #      utc_end 1980-03-07 22:00:00 (Fri)
  62444394000, #  local_start 1979-10-14 01:00:00 (Sun)
  62457004800, #    local_end 1980-03-08 00:00:00 (Sat)
  7200,
  1,
  'WAST',
      ],
      [
  62456997600, #    utc_start 1980-03-07 22:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #      utc_end
  62457001200, #  local_start 1980-03-07 23:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #    local_end
  3600,
  0,
  'WAT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {1}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_NDJAMENA

    $main::fatpacked{"DateTime/TimeZone/Africa/Tripoli.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_TRIPOLI';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Tripoli;
  $DateTime::TimeZone::Africa::Tripoli::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Tripoli::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60557756836, #      utc_end 1919-12-31 23:07:16 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60557760000, #    local_end 1920-01-01 00:00:00 (Thu)
  3164,
  0,
  'LMT',
      ],
      [
  60557756836, #    utc_start 1919-12-31 23:07:16 (Wed)
  61560781200, #      utc_end 1951-10-14 01:00:00 (Sun)
  60557760436, #  local_start 1920-01-01 00:07:16 (Thu)
  61560784800, #    local_end 1951-10-14 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61560781200, #    utc_start 1951-10-14 01:00:00 (Sun)
  61567596000, #      utc_end 1951-12-31 22:00:00 (Mon)
  61560788400, #  local_start 1951-10-14 03:00:00 (Sun)
  61567603200, #    local_end 1952-01-01 00:00:00 (Tue)
  7200,
  1,
  'CEST',
      ],
      [
  61567596000, #    utc_start 1951-12-31 22:00:00 (Mon)
  61623507600, #      utc_end 1953-10-09 01:00:00 (Fri)
  61567599600, #  local_start 1951-12-31 23:00:00 (Mon)
  61623511200, #    local_end 1953-10-09 02:00:00 (Fri)
  3600,
  0,
  'CET',
      ],
      [
  61623507600, #    utc_start 1953-10-09 01:00:00 (Fri)
  61630754400, #      utc_end 1953-12-31 22:00:00 (Thu)
  61623514800, #  local_start 1953-10-09 03:00:00 (Fri)
  61630761600, #    local_end 1954-01-01 00:00:00 (Fri)
  7200,
  1,
  'CEST',
      ],
      [
  61630754400, #    utc_start 1953-12-31 22:00:00 (Thu)
  61685794800, #      utc_end 1955-09-29 23:00:00 (Thu)
  61630758000, #  local_start 1953-12-31 23:00:00 (Thu)
  61685798400, #    local_end 1955-09-30 00:00:00 (Fri)
  3600,
  0,
  'CET',
      ],
      [
  61685794800, #    utc_start 1955-09-29 23:00:00 (Thu)
  61693826400, #      utc_end 1955-12-31 22:00:00 (Sat)
  61685802000, #  local_start 1955-09-30 01:00:00 (Fri)
  61693833600, #    local_end 1956-01-01 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61693826400, #    utc_start 1955-12-31 22:00:00 (Sat)
  61788524400, #      utc_end 1958-12-31 23:00:00 (Wed)
  61693830000, #  local_start 1955-12-31 23:00:00 (Sat)
  61788528000, #    local_end 1959-01-01 00:00:00 (Thu)
  3600,
  0,
  'CET',
      ],
      [
  61788524400, #    utc_start 1958-12-31 23:00:00 (Wed)
  62514367200, #      utc_end 1981-12-31 22:00:00 (Thu)
  61788531600, #  local_start 1959-01-01 01:00:00 (Thu)
  62514374400, #    local_end 1982-01-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62514367200, #    utc_start 1981-12-31 22:00:00 (Thu)
  62522146800, #      utc_end 1982-03-31 23:00:00 (Wed)
  62514370800, #  local_start 1981-12-31 23:00:00 (Thu)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  3600,
  0,
  'CET',
      ],
      [
  62522146800, #    utc_start 1982-03-31 23:00:00 (Wed)
  62537954400, #      utc_end 1982-09-30 22:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  7200,
  1,
  'CEST',
      ],
      [
  62537954400, #    utc_start 1982-09-30 22:00:00 (Thu)
  62553682800, #      utc_end 1983-03-31 23:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  3600,
  0,
  'CET',
      ],
      [
  62553682800, #    utc_start 1983-03-31 23:00:00 (Thu)
  62569490400, #      utc_end 1983-09-30 22:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  7200,
  1,
  'CEST',
      ],
      [
  62569490400, #    utc_start 1983-09-30 22:00:00 (Fri)
  62585305200, #      utc_end 1984-03-31 23:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62585305200, #    utc_start 1984-03-31 23:00:00 (Sat)
  62601112800, #      utc_end 1984-09-30 22:00:00 (Sun)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601120000, #    local_end 1984-10-01 00:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  62601112800, #    utc_start 1984-09-30 22:00:00 (Sun)
  62617273200, #      utc_end 1985-04-05 23:00:00 (Fri)
  62601116400, #  local_start 1984-09-30 23:00:00 (Sun)
  62617276800, #    local_end 1985-04-06 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62617273200, #    utc_start 1985-04-05 23:00:00 (Fri)
  62632648800, #      utc_end 1985-09-30 22:00:00 (Mon)
  62617280400, #  local_start 1985-04-06 01:00:00 (Sat)
  62632656000, #    local_end 1985-10-01 00:00:00 (Tue)
  7200,
  1,
  'CEST',
      ],
      [
  62632648800, #    utc_start 1985-09-30 22:00:00 (Mon)
  62648636400, #      utc_end 1986-04-03 23:00:00 (Thu)
  62632652400, #  local_start 1985-09-30 23:00:00 (Mon)
  62648640000, #    local_end 1986-04-04 00:00:00 (Fri)
  3600,
  0,
  'CET',
      ],
      [
  62648636400, #    utc_start 1986-04-03 23:00:00 (Thu)
  62664357600, #      utc_end 1986-10-02 22:00:00 (Thu)
  62648643600, #  local_start 1986-04-04 01:00:00 (Fri)
  62664364800, #    local_end 1986-10-03 00:00:00 (Fri)
  7200,
  1,
  'CEST',
      ],
      [
  62664357600, #    utc_start 1986-10-02 22:00:00 (Thu)
  62679913200, #      utc_end 1987-03-31 23:00:00 (Tue)
  62664361200, #  local_start 1986-10-02 23:00:00 (Thu)
  62679916800, #    local_end 1987-04-01 00:00:00 (Wed)
  3600,
  0,
  'CET',
      ],
      [
  62679913200, #    utc_start 1987-03-31 23:00:00 (Tue)
  62695720800, #      utc_end 1987-09-30 22:00:00 (Wed)
  62679920400, #  local_start 1987-04-01 01:00:00 (Wed)
  62695728000, #    local_end 1987-10-01 00:00:00 (Thu)
  7200,
  1,
  'CEST',
      ],
      [
  62695720800, #    utc_start 1987-09-30 22:00:00 (Wed)
  62711535600, #      utc_end 1988-03-31 23:00:00 (Thu)
  62695724400, #  local_start 1987-09-30 23:00:00 (Wed)
  62711539200, #    local_end 1988-04-01 00:00:00 (Fri)
  3600,
  0,
  'CET',
      ],
      [
  62711535600, #    utc_start 1988-03-31 23:00:00 (Thu)
  62727343200, #      utc_end 1988-09-30 22:00:00 (Fri)
  62711542800, #  local_start 1988-04-01 01:00:00 (Fri)
  62727350400, #    local_end 1988-10-01 00:00:00 (Sat)
  7200,
  1,
  'CEST',
      ],
      [
  62727343200, #    utc_start 1988-09-30 22:00:00 (Fri)
  62743071600, #      utc_end 1989-03-31 23:00:00 (Fri)
  62727346800, #  local_start 1988-09-30 23:00:00 (Fri)
  62743075200, #    local_end 1989-04-01 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62743071600, #    utc_start 1989-03-31 23:00:00 (Fri)
  62758879200, #      utc_end 1989-09-30 22:00:00 (Sat)
  62743078800, #  local_start 1989-04-01 01:00:00 (Sat)
  62758886400, #    local_end 1989-10-01 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758879200, #    utc_start 1989-09-30 22:00:00 (Sat)
  62777458800, #      utc_end 1990-05-03 23:00:00 (Thu)
  62758882800, #  local_start 1989-09-30 23:00:00 (Sat)
  62777462400, #    local_end 1990-05-04 00:00:00 (Fri)
  3600,
  0,
  'CET',
      ],
      [
  62777458800, #    utc_start 1990-05-03 23:00:00 (Thu)
  62979717600, #      utc_end 1996-09-29 22:00:00 (Sun)
  62777466000, #  local_start 1990-05-04 01:00:00 (Fri)
  62979724800, #    local_end 1996-09-30 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  62979717600, #    utc_start 1996-09-29 22:00:00 (Sun)
  62995791600, #      utc_end 1997-04-03 23:00:00 (Thu)
  62979721200, #  local_start 1996-09-29 23:00:00 (Sun)
  62995795200, #    local_end 1997-04-04 00:00:00 (Fri)
  3600,
  0,
  'CET',
      ],
      [
  62995791600, #    utc_start 1997-04-03 23:00:00 (Thu)
  63011599200, #      utc_end 1997-10-03 22:00:00 (Fri)
  62995798800, #  local_start 1997-04-04 01:00:00 (Fri)
  63011606400, #    local_end 1997-10-04 00:00:00 (Sat)
  7200,
  1,
  'CEST',
      ],
      [
  63011599200, #    utc_start 1997-10-03 22:00:00 (Fri)
  63488188800, #      utc_end 2012-11-10 00:00:00 (Sat)
  63011606400, #  local_start 1997-10-04 00:00:00 (Sat)
  63488196000, #    local_end 2012-11-10 02:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63488188800, #    utc_start 2012-11-10 00:00:00 (Sat)
  63500198400, #      utc_end 2013-03-29 00:00:00 (Fri)
  63488192400, #  local_start 2012-11-10 01:00:00 (Sat)
  63500202000, #    local_end 2013-03-29 01:00:00 (Fri)
  3600,
  0,
  'CET',
      ],
      [
  63500198400, #    utc_start 2013-03-29 00:00:00 (Fri)
  63518342400, #      utc_end 2013-10-25 00:00:00 (Fri)
  63500205600, #  local_start 2013-03-29 02:00:00 (Fri)
  63518349600, #    local_end 2013-10-25 02:00:00 (Fri)
  7200,
  1,
  'CEST',
      ],
      [
  63518342400, #    utc_start 2013-10-25 00:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #      utc_end
  63518349600, #  local_start 2013-10-25 02:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #    local_end
  7200,
  0,
  'EET',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {13}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_TRIPOLI

    $main::fatpacked{"DateTime/TimeZone/Africa/Tunis.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_TUNIS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Tunis;
  $DateTime::TimeZone::Africa::Tunis::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Tunis::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59338480756, #      utc_end 1881-05-11 23:19:16 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59338483200, #    local_end 1881-05-12 00:00:00 (Thu)
  2444,
  0,
  'LMT',
      ],
      [
  59338480756, #    utc_start 1881-05-11 23:19:16 (Wed)
  60279724239, #      utc_end 1911-03-10 23:50:39 (Fri)
  59338481317, #  local_start 1881-05-11 23:28:37 (Wed)
  60279724800, #    local_end 1911-03-11 00:00:00 (Sat)
  561,
  0,
  'PMT',
      ],
      [
  60279724239, #    utc_start 1911-03-10 23:50:39 (Fri)
  61166440800, #      utc_end 1939-04-15 22:00:00 (Sat)
  60279727839, #  local_start 1911-03-11 00:50:39 (Sat)
  61166444400, #    local_end 1939-04-15 23:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  61166440800, #    utc_start 1939-04-15 22:00:00 (Sat)
  61185189600, #      utc_end 1939-11-18 22:00:00 (Sat)
  61166448000, #  local_start 1939-04-16 00:00:00 (Sun)
  61185196800, #    local_end 1939-11-19 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61185189600, #    utc_start 1939-11-18 22:00:00 (Sat)
  61193743200, #      utc_end 1940-02-25 22:00:00 (Sun)
  61185193200, #  local_start 1939-11-18 23:00:00 (Sat)
  61193746800, #    local_end 1940-02-25 23:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61193743200, #    utc_start 1940-02-25 22:00:00 (Sun)
  61244546400, #      utc_end 1941-10-05 22:00:00 (Sun)
  61193750400, #  local_start 1940-02-26 00:00:00 (Mon)
  61244553600, #    local_end 1941-10-06 00:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61244546400, #    utc_start 1941-10-05 22:00:00 (Sun)
  61257855600, #      utc_end 1942-03-08 23:00:00 (Sun)
  61244550000, #  local_start 1941-10-05 23:00:00 (Sun)
  61257859200, #    local_end 1942-03-09 00:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61257855600, #    utc_start 1942-03-08 23:00:00 (Sun)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61257862800, #  local_start 1942-03-09 01:00:00 (Mon)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61292764800, #      utc_end 1943-04-17 00:00:00 (Sat)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61292772000, #    local_end 1943-04-17 02:00:00 (Sat)
  7200,
  1,
  'CEST',
      ],
      [
  61292764800, #    utc_start 1943-04-17 00:00:00 (Sat)
  61293459600, #      utc_end 1943-04-25 01:00:00 (Sun)
  61292768400, #  local_start 1943-04-17 01:00:00 (Sat)
  61293463200, #    local_end 1943-04-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61293459600, #    utc_start 1943-04-25 01:00:00 (Sun)
  61307452800, #      utc_end 1943-10-04 00:00:00 (Mon)
  61293466800, #  local_start 1943-04-25 03:00:00 (Sun)
  61307460000, #    local_end 1943-10-04 02:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307452800, #    utc_start 1943-10-04 00:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307456400, #  local_start 1943-10-04 01:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61339413600, #      utc_end 1944-10-07 22:00:00 (Sat)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61339420800, #    local_end 1944-10-08 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61339413600, #    utc_start 1944-10-07 22:00:00 (Sat)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61339417200, #  local_start 1944-10-07 23:00:00 (Sat)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61369048800, #      utc_end 1945-09-15 22:00:00 (Sat)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61369056000, #    local_end 1945-09-16 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61369048800, #    utc_start 1945-09-15 22:00:00 (Sat)
  62366886000, #      utc_end 1977-04-29 23:00:00 (Fri)
  61369052400, #  local_start 1945-09-15 23:00:00 (Sat)
  62366889600, #    local_end 1977-04-30 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62366886000, #    utc_start 1977-04-29 23:00:00 (Fri)
  62379586800, #      utc_end 1977-09-23 23:00:00 (Fri)
  62366893200, #  local_start 1977-04-30 01:00:00 (Sat)
  62379594000, #    local_end 1977-09-24 01:00:00 (Sat)
  7200,
  1,
  'CEST',
      ],
      [
  62379586800, #    utc_start 1977-09-23 23:00:00 (Fri)
  62398508400, #      utc_end 1978-04-30 23:00:00 (Sun)
  62379590400, #  local_start 1977-09-24 00:00:00 (Sat)
  62398512000, #    local_end 1978-05-01 00:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  62398508400, #    utc_start 1978-04-30 23:00:00 (Sun)
  62411727600, #      utc_end 1978-09-30 23:00:00 (Sat)
  62398515600, #  local_start 1978-05-01 01:00:00 (Mon)
  62411734800, #    local_end 1978-10-01 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62411727600, #    utc_start 1978-09-30 23:00:00 (Sat)
  62716806000, #      utc_end 1988-05-31 23:00:00 (Tue)
  62411731200, #  local_start 1978-10-01 00:00:00 (Sun)
  62716809600, #    local_end 1988-06-01 00:00:00 (Wed)
  3600,
  0,
  'CET',
      ],
      [
  62716806000, #    utc_start 1988-05-31 23:00:00 (Tue)
  62726828400, #      utc_end 1988-09-24 23:00:00 (Sat)
  62716813200, #  local_start 1988-06-01 01:00:00 (Wed)
  62726835600, #    local_end 1988-09-25 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726828400, #    utc_start 1988-09-24 23:00:00 (Sat)
  62742553200, #      utc_end 1989-03-25 23:00:00 (Sat)
  62726832000, #  local_start 1988-09-25 00:00:00 (Sun)
  62742556800, #    local_end 1989-03-26 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742553200, #    utc_start 1989-03-25 23:00:00 (Sat)
  62758278000, #      utc_end 1989-09-23 23:00:00 (Sat)
  62742560400, #  local_start 1989-03-26 01:00:00 (Sun)
  62758285200, #    local_end 1989-09-24 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758278000, #    utc_start 1989-09-23 23:00:00 (Sat)
  62777199600, #      utc_end 1990-04-30 23:00:00 (Mon)
  62758281600, #  local_start 1989-09-24 00:00:00 (Sun)
  62777203200, #    local_end 1990-05-01 00:00:00 (Tue)
  3600,
  0,
  'CET',
      ],
      [
  62777199600, #    utc_start 1990-04-30 23:00:00 (Mon)
  62790332400, #      utc_end 1990-09-29 23:00:00 (Sat)
  62777206800, #  local_start 1990-05-01 01:00:00 (Tue)
  62790339600, #    local_end 1990-09-30 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790332400, #    utc_start 1990-09-29 23:00:00 (Sat)
  63250585200, #      utc_end 2005-04-30 23:00:00 (Sat)
  62790336000, #  local_start 1990-09-30 00:00:00 (Sun)
  63250588800, #    local_end 2005-05-01 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63250585200, #    utc_start 2005-04-30 23:00:00 (Sat)
  63263721600, #      utc_end 2005-09-30 00:00:00 (Fri)
  63250592400, #  local_start 2005-05-01 01:00:00 (Sun)
  63263728800, #    local_end 2005-09-30 02:00:00 (Fri)
  7200,
  1,
  'CEST',
      ],
      [
  63263721600, #    utc_start 2005-09-30 00:00:00 (Fri)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63263725200, #  local_start 2005-09-30 01:00:00 (Fri)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  3600,
  0,
  'CET',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {16}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_TUNIS

    $main::fatpacked{"DateTime/TimeZone/Africa/Windhoek.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AFRICA_WINDHOEK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Africa::Windhoek;
  $DateTime::TimeZone::Africa::Windhoek::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Africa::Windhoek::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59677512696, #      utc_end 1892-02-07 22:51:36 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59677516800, #    local_end 1892-02-08 00:00:00 (Mon)
  4104,
  0,
  'LMT',
      ],
      [
  59677512696, #    utc_start 1892-02-07 22:51:36 (Sun)
  60026394600, #      utc_end 1903-02-28 22:30:00 (Sat)
  59677518096, #  local_start 1892-02-08 00:21:36 (Mon)
  60026400000, #    local_end 1903-03-01 00:00:00 (Sun)
  5400,
  0,
  'SWAT',
      ],
      [
  60026394600, #    utc_start 1903-02-28 22:30:00 (Sat)
  61274707200, #      utc_end 1942-09-20 00:00:00 (Sun)
  60026401800, #  local_start 1903-03-01 00:30:00 (Sun)
  61274714400, #    local_end 1942-09-20 02:00:00 (Sun)
  7200,
  0,
  'SAST',
      ],
      [
  61274707200, #    utc_start 1942-09-20 00:00:00 (Sun)
  61290428400, #      utc_end 1943-03-20 23:00:00 (Sat)
  61274718000, #  local_start 1942-09-20 03:00:00 (Sun)
  61290439200, #    local_end 1943-03-21 02:00:00 (Sun)
  10800,
  1,
  'SAST',
      ],
      [
  61290428400, #    utc_start 1943-03-20 23:00:00 (Sat)
  62773653600, #      utc_end 1990-03-20 22:00:00 (Tue)
  61290435600, #  local_start 1943-03-21 01:00:00 (Sun)
  62773660800, #    local_end 1990-03-21 00:00:00 (Wed)
  7200,
  0,
  'SAST',
      ],
      [
  62773653600, #    utc_start 1990-03-20 22:00:00 (Tue)
  62901007200, #      utc_end 1994-04-02 22:00:00 (Sat)
  62773660800, #  local_start 1990-03-21 00:00:00 (Wed)
  62901014400, #    local_end 1994-04-03 00:00:00 (Sun)
  7200,
  0,
  'CAT',
      ],
      [
  62901007200, #    utc_start 1994-04-02 22:00:00 (Sat)
  62914323600, #      utc_end 1994-09-04 01:00:00 (Sun)
  62901010800, #  local_start 1994-04-02 23:00:00 (Sat)
  62914327200, #    local_end 1994-09-04 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  62914323600, #    utc_start 1994-09-04 01:00:00 (Sun)
  62932464000, #      utc_end 1995-04-02 00:00:00 (Sun)
  62914330800, #  local_start 1994-09-04 03:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  62932464000, #    utc_start 1995-04-02 00:00:00 (Sun)
  62945773200, #      utc_end 1995-09-03 01:00:00 (Sun)
  62932467600, #  local_start 1995-04-02 01:00:00 (Sun)
  62945776800, #    local_end 1995-09-03 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  62945773200, #    utc_start 1995-09-03 01:00:00 (Sun)
  62964518400, #      utc_end 1996-04-07 00:00:00 (Sun)
  62945780400, #  local_start 1995-09-03 03:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  62964518400, #    utc_start 1996-04-07 00:00:00 (Sun)
  62977222800, #      utc_end 1996-09-01 01:00:00 (Sun)
  62964522000, #  local_start 1996-04-07 01:00:00 (Sun)
  62977226400, #    local_end 1996-09-01 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  62977222800, #    utc_start 1996-09-01 01:00:00 (Sun)
  62995968000, #      utc_end 1997-04-06 00:00:00 (Sun)
  62977230000, #  local_start 1996-09-01 03:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  62995968000, #    utc_start 1997-04-06 00:00:00 (Sun)
  63009277200, #      utc_end 1997-09-07 01:00:00 (Sun)
  62995971600, #  local_start 1997-04-06 01:00:00 (Sun)
  63009280800, #    local_end 1997-09-07 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63009277200, #    utc_start 1997-09-07 01:00:00 (Sun)
  63027417600, #      utc_end 1998-04-05 00:00:00 (Sun)
  63009284400, #  local_start 1997-09-07 03:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63027417600, #    utc_start 1998-04-05 00:00:00 (Sun)
  63040726800, #      utc_end 1998-09-06 01:00:00 (Sun)
  63027421200, #  local_start 1998-04-05 01:00:00 (Sun)
  63040730400, #    local_end 1998-09-06 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63040726800, #    utc_start 1998-09-06 01:00:00 (Sun)
  63058867200, #      utc_end 1999-04-04 00:00:00 (Sun)
  63040734000, #  local_start 1998-09-06 03:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63058867200, #    utc_start 1999-04-04 00:00:00 (Sun)
  63072176400, #      utc_end 1999-09-05 01:00:00 (Sun)
  63058870800, #  local_start 1999-04-04 01:00:00 (Sun)
  63072180000, #    local_end 1999-09-05 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63072176400, #    utc_start 1999-09-05 01:00:00 (Sun)
  63090316800, #      utc_end 2000-04-02 00:00:00 (Sun)
  63072183600, #  local_start 1999-09-05 03:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63090316800, #    utc_start 2000-04-02 00:00:00 (Sun)
  63103626000, #      utc_end 2000-09-03 01:00:00 (Sun)
  63090320400, #  local_start 2000-04-02 01:00:00 (Sun)
  63103629600, #    local_end 2000-09-03 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63103626000, #    utc_start 2000-09-03 01:00:00 (Sun)
  63121766400, #      utc_end 2001-04-01 00:00:00 (Sun)
  63103633200, #  local_start 2000-09-03 03:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63121766400, #    utc_start 2001-04-01 00:00:00 (Sun)
  63135075600, #      utc_end 2001-09-02 01:00:00 (Sun)
  63121770000, #  local_start 2001-04-01 01:00:00 (Sun)
  63135079200, #    local_end 2001-09-02 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63135075600, #    utc_start 2001-09-02 01:00:00 (Sun)
  63153820800, #      utc_end 2002-04-07 00:00:00 (Sun)
  63135082800, #  local_start 2001-09-02 03:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63153820800, #    utc_start 2002-04-07 00:00:00 (Sun)
  63166525200, #      utc_end 2002-09-01 01:00:00 (Sun)
  63153824400, #  local_start 2002-04-07 01:00:00 (Sun)
  63166528800, #    local_end 2002-09-01 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63166525200, #    utc_start 2002-09-01 01:00:00 (Sun)
  63185270400, #      utc_end 2003-04-06 00:00:00 (Sun)
  63166532400, #  local_start 2002-09-01 03:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63185270400, #    utc_start 2003-04-06 00:00:00 (Sun)
  63198579600, #      utc_end 2003-09-07 01:00:00 (Sun)
  63185274000, #  local_start 2003-04-06 01:00:00 (Sun)
  63198583200, #    local_end 2003-09-07 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63198579600, #    utc_start 2003-09-07 01:00:00 (Sun)
  63216720000, #      utc_end 2004-04-04 00:00:00 (Sun)
  63198586800, #  local_start 2003-09-07 03:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63216720000, #    utc_start 2004-04-04 00:00:00 (Sun)
  63230029200, #      utc_end 2004-09-05 01:00:00 (Sun)
  63216723600, #  local_start 2004-04-04 01:00:00 (Sun)
  63230032800, #    local_end 2004-09-05 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63230029200, #    utc_start 2004-09-05 01:00:00 (Sun)
  63248169600, #      utc_end 2005-04-03 00:00:00 (Sun)
  63230036400, #  local_start 2004-09-05 03:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63248169600, #    utc_start 2005-04-03 00:00:00 (Sun)
  63261478800, #      utc_end 2005-09-04 01:00:00 (Sun)
  63248173200, #  local_start 2005-04-03 01:00:00 (Sun)
  63261482400, #    local_end 2005-09-04 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63261478800, #    utc_start 2005-09-04 01:00:00 (Sun)
  63279619200, #      utc_end 2006-04-02 00:00:00 (Sun)
  63261486000, #  local_start 2005-09-04 03:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63279619200, #    utc_start 2006-04-02 00:00:00 (Sun)
  63292928400, #      utc_end 2006-09-03 01:00:00 (Sun)
  63279622800, #  local_start 2006-04-02 01:00:00 (Sun)
  63292932000, #    local_end 2006-09-03 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63292928400, #    utc_start 2006-09-03 01:00:00 (Sun)
  63311068800, #      utc_end 2007-04-01 00:00:00 (Sun)
  63292935600, #  local_start 2006-09-03 03:00:00 (Sun)
  63311076000, #    local_end 2007-04-01 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63311068800, #    utc_start 2007-04-01 00:00:00 (Sun)
  63324378000, #      utc_end 2007-09-02 01:00:00 (Sun)
  63311072400, #  local_start 2007-04-01 01:00:00 (Sun)
  63324381600, #    local_end 2007-09-02 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63324378000, #    utc_start 2007-09-02 01:00:00 (Sun)
  63343123200, #      utc_end 2008-04-06 00:00:00 (Sun)
  63324385200, #  local_start 2007-09-02 03:00:00 (Sun)
  63343130400, #    local_end 2008-04-06 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63343123200, #    utc_start 2008-04-06 00:00:00 (Sun)
  63356432400, #      utc_end 2008-09-07 01:00:00 (Sun)
  63343126800, #  local_start 2008-04-06 01:00:00 (Sun)
  63356436000, #    local_end 2008-09-07 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63356432400, #    utc_start 2008-09-07 01:00:00 (Sun)
  63374572800, #      utc_end 2009-04-05 00:00:00 (Sun)
  63356439600, #  local_start 2008-09-07 03:00:00 (Sun)
  63374580000, #    local_end 2009-04-05 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63374572800, #    utc_start 2009-04-05 00:00:00 (Sun)
  63387882000, #      utc_end 2009-09-06 01:00:00 (Sun)
  63374576400, #  local_start 2009-04-05 01:00:00 (Sun)
  63387885600, #    local_end 2009-09-06 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63387882000, #    utc_start 2009-09-06 01:00:00 (Sun)
  63406022400, #      utc_end 2010-04-04 00:00:00 (Sun)
  63387889200, #  local_start 2009-09-06 03:00:00 (Sun)
  63406029600, #    local_end 2010-04-04 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63406022400, #    utc_start 2010-04-04 00:00:00 (Sun)
  63419331600, #      utc_end 2010-09-05 01:00:00 (Sun)
  63406026000, #  local_start 2010-04-04 01:00:00 (Sun)
  63419335200, #    local_end 2010-09-05 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63419331600, #    utc_start 2010-09-05 01:00:00 (Sun)
  63437472000, #      utc_end 2011-04-03 00:00:00 (Sun)
  63419338800, #  local_start 2010-09-05 03:00:00 (Sun)
  63437479200, #    local_end 2011-04-03 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63437472000, #    utc_start 2011-04-03 00:00:00 (Sun)
  63450781200, #      utc_end 2011-09-04 01:00:00 (Sun)
  63437475600, #  local_start 2011-04-03 01:00:00 (Sun)
  63450784800, #    local_end 2011-09-04 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63450781200, #    utc_start 2011-09-04 01:00:00 (Sun)
  63468921600, #      utc_end 2012-04-01 00:00:00 (Sun)
  63450788400, #  local_start 2011-09-04 03:00:00 (Sun)
  63468928800, #    local_end 2012-04-01 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63468921600, #    utc_start 2012-04-01 00:00:00 (Sun)
  63482230800, #      utc_end 2012-09-02 01:00:00 (Sun)
  63468925200, #  local_start 2012-04-01 01:00:00 (Sun)
  63482234400, #    local_end 2012-09-02 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63482230800, #    utc_start 2012-09-02 01:00:00 (Sun)
  63500976000, #      utc_end 2013-04-07 00:00:00 (Sun)
  63482238000, #  local_start 2012-09-02 03:00:00 (Sun)
  63500983200, #    local_end 2013-04-07 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63500976000, #    utc_start 2013-04-07 00:00:00 (Sun)
  63513680400, #      utc_end 2013-09-01 01:00:00 (Sun)
  63500979600, #  local_start 2013-04-07 01:00:00 (Sun)
  63513684000, #    local_end 2013-09-01 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63513680400, #    utc_start 2013-09-01 01:00:00 (Sun)
  63532425600, #      utc_end 2014-04-06 00:00:00 (Sun)
  63513687600, #  local_start 2013-09-01 03:00:00 (Sun)
  63532432800, #    local_end 2014-04-06 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63532425600, #    utc_start 2014-04-06 00:00:00 (Sun)
  63545734800, #      utc_end 2014-09-07 01:00:00 (Sun)
  63532429200, #  local_start 2014-04-06 01:00:00 (Sun)
  63545738400, #    local_end 2014-09-07 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63545734800, #    utc_start 2014-09-07 01:00:00 (Sun)
  63563875200, #      utc_end 2015-04-05 00:00:00 (Sun)
  63545742000, #  local_start 2014-09-07 03:00:00 (Sun)
  63563882400, #    local_end 2015-04-05 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63563875200, #    utc_start 2015-04-05 00:00:00 (Sun)
  63577184400, #      utc_end 2015-09-06 01:00:00 (Sun)
  63563878800, #  local_start 2015-04-05 01:00:00 (Sun)
  63577188000, #    local_end 2015-09-06 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63577184400, #    utc_start 2015-09-06 01:00:00 (Sun)
  63595324800, #      utc_end 2016-04-03 00:00:00 (Sun)
  63577191600, #  local_start 2015-09-06 03:00:00 (Sun)
  63595332000, #    local_end 2016-04-03 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63595324800, #    utc_start 2016-04-03 00:00:00 (Sun)
  63608634000, #      utc_end 2016-09-04 01:00:00 (Sun)
  63595328400, #  local_start 2016-04-03 01:00:00 (Sun)
  63608637600, #    local_end 2016-09-04 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63608634000, #    utc_start 2016-09-04 01:00:00 (Sun)
  63626774400, #      utc_end 2017-04-02 00:00:00 (Sun)
  63608641200, #  local_start 2016-09-04 03:00:00 (Sun)
  63626781600, #    local_end 2017-04-02 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63626774400, #    utc_start 2017-04-02 00:00:00 (Sun)
  63640083600, #      utc_end 2017-09-03 01:00:00 (Sun)
  63626778000, #  local_start 2017-04-02 01:00:00 (Sun)
  63640087200, #    local_end 2017-09-03 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63640083600, #    utc_start 2017-09-03 01:00:00 (Sun)
  63658224000, #      utc_end 2018-04-01 00:00:00 (Sun)
  63640090800, #  local_start 2017-09-03 03:00:00 (Sun)
  63658231200, #    local_end 2018-04-01 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63658224000, #    utc_start 2018-04-01 00:00:00 (Sun)
  63671533200, #      utc_end 2018-09-02 01:00:00 (Sun)
  63658227600, #  local_start 2018-04-01 01:00:00 (Sun)
  63671536800, #    local_end 2018-09-02 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63671533200, #    utc_start 2018-09-02 01:00:00 (Sun)
  63690278400, #      utc_end 2019-04-07 00:00:00 (Sun)
  63671540400, #  local_start 2018-09-02 03:00:00 (Sun)
  63690285600, #    local_end 2019-04-07 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63690278400, #    utc_start 2019-04-07 00:00:00 (Sun)
  63702982800, #      utc_end 2019-09-01 01:00:00 (Sun)
  63690282000, #  local_start 2019-04-07 01:00:00 (Sun)
  63702986400, #    local_end 2019-09-01 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63702982800, #    utc_start 2019-09-01 01:00:00 (Sun)
  63721728000, #      utc_end 2020-04-05 00:00:00 (Sun)
  63702990000, #  local_start 2019-09-01 03:00:00 (Sun)
  63721735200, #    local_end 2020-04-05 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63721728000, #    utc_start 2020-04-05 00:00:00 (Sun)
  63735037200, #      utc_end 2020-09-06 01:00:00 (Sun)
  63721731600, #  local_start 2020-04-05 01:00:00 (Sun)
  63735040800, #    local_end 2020-09-06 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63735037200, #    utc_start 2020-09-06 01:00:00 (Sun)
  63753177600, #      utc_end 2021-04-04 00:00:00 (Sun)
  63735044400, #  local_start 2020-09-06 03:00:00 (Sun)
  63753184800, #    local_end 2021-04-04 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63753177600, #    utc_start 2021-04-04 00:00:00 (Sun)
  63766486800, #      utc_end 2021-09-05 01:00:00 (Sun)
  63753181200, #  local_start 2021-04-04 01:00:00 (Sun)
  63766490400, #    local_end 2021-09-05 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63766486800, #    utc_start 2021-09-05 01:00:00 (Sun)
  63784627200, #      utc_end 2022-04-03 00:00:00 (Sun)
  63766494000, #  local_start 2021-09-05 03:00:00 (Sun)
  63784634400, #    local_end 2022-04-03 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63784627200, #    utc_start 2022-04-03 00:00:00 (Sun)
  63797936400, #      utc_end 2022-09-04 01:00:00 (Sun)
  63784630800, #  local_start 2022-04-03 01:00:00 (Sun)
  63797940000, #    local_end 2022-09-04 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63797936400, #    utc_start 2022-09-04 01:00:00 (Sun)
  63816076800, #      utc_end 2023-04-02 00:00:00 (Sun)
  63797943600, #  local_start 2022-09-04 03:00:00 (Sun)
  63816084000, #    local_end 2023-04-02 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63816076800, #    utc_start 2023-04-02 00:00:00 (Sun)
  63829386000, #      utc_end 2023-09-03 01:00:00 (Sun)
  63816080400, #  local_start 2023-04-02 01:00:00 (Sun)
  63829389600, #    local_end 2023-09-03 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63829386000, #    utc_start 2023-09-03 01:00:00 (Sun)
  63848131200, #      utc_end 2024-04-07 00:00:00 (Sun)
  63829393200, #  local_start 2023-09-03 03:00:00 (Sun)
  63848138400, #    local_end 2024-04-07 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63848131200, #    utc_start 2024-04-07 00:00:00 (Sun)
  63860835600, #      utc_end 2024-09-01 01:00:00 (Sun)
  63848134800, #  local_start 2024-04-07 01:00:00 (Sun)
  63860839200, #    local_end 2024-09-01 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63860835600, #    utc_start 2024-09-01 01:00:00 (Sun)
  63879580800, #      utc_end 2025-04-06 00:00:00 (Sun)
  63860842800, #  local_start 2024-09-01 03:00:00 (Sun)
  63879588000, #    local_end 2025-04-06 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63879580800, #    utc_start 2025-04-06 00:00:00 (Sun)
  63892890000, #      utc_end 2025-09-07 01:00:00 (Sun)
  63879584400, #  local_start 2025-04-06 01:00:00 (Sun)
  63892893600, #    local_end 2025-09-07 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63892890000, #    utc_start 2025-09-07 01:00:00 (Sun)
  63911030400, #      utc_end 2026-04-05 00:00:00 (Sun)
  63892897200, #  local_start 2025-09-07 03:00:00 (Sun)
  63911037600, #    local_end 2026-04-05 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63911030400, #    utc_start 2026-04-05 00:00:00 (Sun)
  63924339600, #      utc_end 2026-09-06 01:00:00 (Sun)
  63911034000, #  local_start 2026-04-05 01:00:00 (Sun)
  63924343200, #    local_end 2026-09-06 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
      [
  63924339600, #    utc_start 2026-09-06 01:00:00 (Sun)
  63942480000, #      utc_end 2027-04-04 00:00:00 (Sun)
  63924346800, #  local_start 2026-09-06 03:00:00 (Sun)
  63942487200, #    local_end 2027-04-04 02:00:00 (Sun)
  7200,
  1,
  'WAST',
      ],
      [
  63942480000, #    utc_start 2027-04-04 00:00:00 (Sun)
  63955789200, #      utc_end 2027-09-05 01:00:00 (Sun)
  63942483600, #  local_start 2027-04-04 01:00:00 (Sun)
  63955792800, #    local_end 2027-09-05 02:00:00 (Sun)
  3600,
  0,
  'WAT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {35}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'WA%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 728020,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 728020,
      'utc_rd_secs' => 82800,
      'utc_year' => 1995
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 728020,
      'local_rd_secs' => 79200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 728020,
      'utc_rd_secs' => 79200,
      'utc_year' => 1995
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '1995',
      'in' => 'Apr',
      'letter' => '',
      'name' => 'Namibia',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '1994',
      'in' => 'Sep',
      'letter' => 'S',
      'name' => 'Namibia',
      'offset_from_std' => 3600,
      'on' => 'Sun>=1',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AFRICA_WINDHOEK

    $main::fatpacked{"DateTime/TimeZone/America/Adak.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ADAK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Adak;
  $DateTime::TimeZone::America::Adak::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Adak::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  58910327199, #      utc_end 1867-10-17 11:46:39 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  58910371200, #    local_end 1867-10-18 00:00:00 (Fri)
  44001,
  0,
  'LMT',
      ],
      [
  58910327199, #    utc_start 1867-10-17 11:46:39 (Thu)
  59946738398, #      utc_end 1900-08-20 23:46:38 (Mon)
  58910284801, #  local_start 1867-10-17 00:00:01 (Thu)
  59946696000, #    local_end 1900-08-20 12:00:00 (Mon)
  -42398,
  0,
  'LMT',
      ],
      [
  59946738398, #    utc_start 1900-08-20 23:46:38 (Mon)
  61252110000, #      utc_end 1942-01-01 11:00:00 (Thu)
  59946698798, #  local_start 1900-08-20 12:46:38 (Mon)
  61252070400, #    local_end 1942-01-01 00:00:00 (Thu)
  -39600,
  0,
  'NST',
      ],
      [
  61252110000, #    utc_start 1942-01-01 11:00:00 (Thu)
  61255486800, #      utc_end 1942-02-09 13:00:00 (Mon)
  61252070400, #  local_start 1942-01-01 00:00:00 (Thu)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -39600,
  0,
  'NST',
      ],
      [
  61255486800, #    utc_start 1942-02-09 13:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366251600, #    local_end 1945-08-14 13:00:00 (Tue)
  -36000,
  1,
  'NWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370308800, #      utc_end 1945-09-30 12:00:00 (Sun)
  61366251600, #  local_start 1945-08-14 13:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -36000,
  1,
  'NPT',
      ],
      [
  61370308800, #    utc_start 1945-09-30 12:00:00 (Sun)
  61378340400, #      utc_end 1946-01-01 11:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -39600,
  0,
  'NST',
      ],
      [
  61378340400, #    utc_start 1946-01-01 11:00:00 (Tue)
  62048804400, #      utc_end 1967-04-01 11:00:00 (Sat)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  62048764800, #    local_end 1967-04-01 00:00:00 (Sat)
  -39600,
  0,
  'NST',
      ],
      [
  62048804400, #    utc_start 1967-04-01 11:00:00 (Sat)
  62104186800, #      utc_end 1969-01-01 11:00:00 (Wed)
  62048764800, #  local_start 1967-04-01 00:00:00 (Sat)
  62104147200, #    local_end 1969-01-01 00:00:00 (Wed)
  -39600,
  0,
  'BST',
      ],
      [
  62104186800, #    utc_start 1969-01-01 11:00:00 (Wed)
  62114216400, #      utc_end 1969-04-27 13:00:00 (Sun)
  62104147200, #  local_start 1969-01-01 00:00:00 (Wed)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62114216400, #    utc_start 1969-04-27 13:00:00 (Sun)
  62129937600, #      utc_end 1969-10-26 12:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62129937600, #    utc_start 1969-10-26 12:00:00 (Sun)
  62145666000, #      utc_end 1970-04-26 13:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62145666000, #    utc_start 1970-04-26 13:00:00 (Sun)
  62161387200, #      utc_end 1970-10-25 12:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62161387200, #    utc_start 1970-10-25 12:00:00 (Sun)
  62177115600, #      utc_end 1971-04-25 13:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62177115600, #    utc_start 1971-04-25 13:00:00 (Sun)
  62193441600, #      utc_end 1971-10-31 12:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62193441600, #    utc_start 1971-10-31 12:00:00 (Sun)
  62209170000, #      utc_end 1972-04-30 13:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62209170000, #    utc_start 1972-04-30 13:00:00 (Sun)
  62224891200, #      utc_end 1972-10-29 12:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62224891200, #    utc_start 1972-10-29 12:00:00 (Sun)
  62240619600, #      utc_end 1973-04-29 13:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62240619600, #    utc_start 1973-04-29 13:00:00 (Sun)
  62256340800, #      utc_end 1973-10-28 12:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62256340800, #    utc_start 1973-10-28 12:00:00 (Sun)
  62262392400, #      utc_end 1974-01-06 13:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62262392400, #    utc_start 1974-01-06 13:00:00 (Sun)
  62287790400, #      utc_end 1974-10-27 12:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62287790400, #    utc_start 1974-10-27 12:00:00 (Sun)
  62298075600, #      utc_end 1975-02-23 13:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62298075600, #    utc_start 1975-02-23 13:00:00 (Sun)
  62319240000, #      utc_end 1975-10-26 12:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62319240000, #    utc_start 1975-10-26 12:00:00 (Sun)
  62334968400, #      utc_end 1976-04-25 13:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62334968400, #    utc_start 1976-04-25 13:00:00 (Sun)
  62351294400, #      utc_end 1976-10-31 12:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62351294400, #    utc_start 1976-10-31 12:00:00 (Sun)
  62366418000, #      utc_end 1977-04-24 13:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62366418000, #    utc_start 1977-04-24 13:00:00 (Sun)
  62382744000, #      utc_end 1977-10-30 12:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62382744000, #    utc_start 1977-10-30 12:00:00 (Sun)
  62398472400, #      utc_end 1978-04-30 13:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62398472400, #    utc_start 1978-04-30 13:00:00 (Sun)
  62414193600, #      utc_end 1978-10-29 12:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62414193600, #    utc_start 1978-10-29 12:00:00 (Sun)
  62429922000, #      utc_end 1979-04-29 13:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62429922000, #    utc_start 1979-04-29 13:00:00 (Sun)
  62445643200, #      utc_end 1979-10-28 12:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62445643200, #    utc_start 1979-10-28 12:00:00 (Sun)
  62461371600, #      utc_end 1980-04-27 13:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62461371600, #    utc_start 1980-04-27 13:00:00 (Sun)
  62477092800, #      utc_end 1980-10-26 12:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62477092800, #    utc_start 1980-10-26 12:00:00 (Sun)
  62492821200, #      utc_end 1981-04-26 13:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62492821200, #    utc_start 1981-04-26 13:00:00 (Sun)
  62508542400, #      utc_end 1981-10-25 12:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62508542400, #    utc_start 1981-10-25 12:00:00 (Sun)
  62524270800, #      utc_end 1982-04-25 13:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62524270800, #    utc_start 1982-04-25 13:00:00 (Sun)
  62540596800, #      utc_end 1982-10-31 12:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62540596800, #    utc_start 1982-10-31 12:00:00 (Sun)
  62555720400, #      utc_end 1983-04-24 13:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62555720400, #    utc_start 1983-04-24 13:00:00 (Sun)
  62572046400, #      utc_end 1983-10-30 12:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62572046400, #    utc_start 1983-10-30 12:00:00 (Sun)
  62574717600, #      utc_end 1983-11-30 10:00:00 (Wed)
  62572010400, #  local_start 1983-10-30 02:00:00 (Sun)
  62574681600, #    local_end 1983-11-30 00:00:00 (Wed)
  -36000,
  0,
  'AHST',
      ],
      [
  62574717600, #    utc_start 1983-11-30 10:00:00 (Wed)
  62587771200, #      utc_end 1984-04-29 12:00:00 (Sun)
  62574681600, #  local_start 1983-11-30 00:00:00 (Wed)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  62587771200, #    utc_start 1984-04-29 12:00:00 (Sun)
  62603492400, #      utc_end 1984-10-28 11:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  62603492400, #    utc_start 1984-10-28 11:00:00 (Sun)
  62619220800, #      utc_end 1985-04-28 12:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  62619220800, #    utc_start 1985-04-28 12:00:00 (Sun)
  62634942000, #      utc_end 1985-10-27 11:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  62634942000, #    utc_start 1985-10-27 11:00:00 (Sun)
  62650670400, #      utc_end 1986-04-27 12:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  62650670400, #    utc_start 1986-04-27 12:00:00 (Sun)
  62666391600, #      utc_end 1986-10-26 11:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  62666391600, #    utc_start 1986-10-26 11:00:00 (Sun)
  62680305600, #      utc_end 1987-04-05 12:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  62680305600, #    utc_start 1987-04-05 12:00:00 (Sun)
  62697841200, #      utc_end 1987-10-25 11:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  62697841200, #    utc_start 1987-10-25 11:00:00 (Sun)
  62711755200, #      utc_end 1988-04-03 12:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  62711755200, #    utc_start 1988-04-03 12:00:00 (Sun)
  62729895600, #      utc_end 1988-10-30 11:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  62729895600, #    utc_start 1988-10-30 11:00:00 (Sun)
  62743204800, #      utc_end 1989-04-02 12:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  62743204800, #    utc_start 1989-04-02 12:00:00 (Sun)
  62761345200, #      utc_end 1989-10-29 11:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  62761345200, #    utc_start 1989-10-29 11:00:00 (Sun)
  62774654400, #      utc_end 1990-04-01 12:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  62774654400, #    utc_start 1990-04-01 12:00:00 (Sun)
  62792794800, #      utc_end 1990-10-28 11:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  62792794800, #    utc_start 1990-10-28 11:00:00 (Sun)
  62806708800, #      utc_end 1991-04-07 12:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  62806708800, #    utc_start 1991-04-07 12:00:00 (Sun)
  62824244400, #      utc_end 1991-10-27 11:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  62824244400, #    utc_start 1991-10-27 11:00:00 (Sun)
  62838158400, #      utc_end 1992-04-05 12:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  62838158400, #    utc_start 1992-04-05 12:00:00 (Sun)
  62855694000, #      utc_end 1992-10-25 11:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  62855694000, #    utc_start 1992-10-25 11:00:00 (Sun)
  62869608000, #      utc_end 1993-04-04 12:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  62869608000, #    utc_start 1993-04-04 12:00:00 (Sun)
  62887748400, #      utc_end 1993-10-31 11:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  62887748400, #    utc_start 1993-10-31 11:00:00 (Sun)
  62901057600, #      utc_end 1994-04-03 12:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  62901057600, #    utc_start 1994-04-03 12:00:00 (Sun)
  62919198000, #      utc_end 1994-10-30 11:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  62919198000, #    utc_start 1994-10-30 11:00:00 (Sun)
  62932507200, #      utc_end 1995-04-02 12:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  62932507200, #    utc_start 1995-04-02 12:00:00 (Sun)
  62950647600, #      utc_end 1995-10-29 11:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  62950647600, #    utc_start 1995-10-29 11:00:00 (Sun)
  62964561600, #      utc_end 1996-04-07 12:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  62964561600, #    utc_start 1996-04-07 12:00:00 (Sun)
  62982097200, #      utc_end 1996-10-27 11:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  62982097200, #    utc_start 1996-10-27 11:00:00 (Sun)
  62996011200, #      utc_end 1997-04-06 12:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  62996011200, #    utc_start 1997-04-06 12:00:00 (Sun)
  63013546800, #      utc_end 1997-10-26 11:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63013546800, #    utc_start 1997-10-26 11:00:00 (Sun)
  63027460800, #      utc_end 1998-04-05 12:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63027460800, #    utc_start 1998-04-05 12:00:00 (Sun)
  63044996400, #      utc_end 1998-10-25 11:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63044996400, #    utc_start 1998-10-25 11:00:00 (Sun)
  63058910400, #      utc_end 1999-04-04 12:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63058910400, #    utc_start 1999-04-04 12:00:00 (Sun)
  63077050800, #      utc_end 1999-10-31 11:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63077050800, #    utc_start 1999-10-31 11:00:00 (Sun)
  63090360000, #      utc_end 2000-04-02 12:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63090360000, #    utc_start 2000-04-02 12:00:00 (Sun)
  63108500400, #      utc_end 2000-10-29 11:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63108500400, #    utc_start 2000-10-29 11:00:00 (Sun)
  63121809600, #      utc_end 2001-04-01 12:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63121809600, #    utc_start 2001-04-01 12:00:00 (Sun)
  63139950000, #      utc_end 2001-10-28 11:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63139950000, #    utc_start 2001-10-28 11:00:00 (Sun)
  63153864000, #      utc_end 2002-04-07 12:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63153864000, #    utc_start 2002-04-07 12:00:00 (Sun)
  63171399600, #      utc_end 2002-10-27 11:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63171399600, #    utc_start 2002-10-27 11:00:00 (Sun)
  63185313600, #      utc_end 2003-04-06 12:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63185313600, #    utc_start 2003-04-06 12:00:00 (Sun)
  63202849200, #      utc_end 2003-10-26 11:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63202849200, #    utc_start 2003-10-26 11:00:00 (Sun)
  63216763200, #      utc_end 2004-04-04 12:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63216763200, #    utc_start 2004-04-04 12:00:00 (Sun)
  63234903600, #      utc_end 2004-10-31 11:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63234903600, #    utc_start 2004-10-31 11:00:00 (Sun)
  63248212800, #      utc_end 2005-04-03 12:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63248212800, #    utc_start 2005-04-03 12:00:00 (Sun)
  63266353200, #      utc_end 2005-10-30 11:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63266353200, #    utc_start 2005-10-30 11:00:00 (Sun)
  63279662400, #      utc_end 2006-04-02 12:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63279662400, #    utc_start 2006-04-02 12:00:00 (Sun)
  63297802800, #      utc_end 2006-10-29 11:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63297802800, #    utc_start 2006-10-29 11:00:00 (Sun)
  63309297600, #      utc_end 2007-03-11 12:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63309297600, #    utc_start 2007-03-11 12:00:00 (Sun)
  63329857200, #      utc_end 2007-11-04 11:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63329857200, #    utc_start 2007-11-04 11:00:00 (Sun)
  63340747200, #      utc_end 2008-03-09 12:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63340747200, #    utc_start 2008-03-09 12:00:00 (Sun)
  63361306800, #      utc_end 2008-11-02 11:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63361306800, #    utc_start 2008-11-02 11:00:00 (Sun)
  63372196800, #      utc_end 2009-03-08 12:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63372196800, #    utc_start 2009-03-08 12:00:00 (Sun)
  63392756400, #      utc_end 2009-11-01 11:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63392756400, #    utc_start 2009-11-01 11:00:00 (Sun)
  63404251200, #      utc_end 2010-03-14 12:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63404251200, #    utc_start 2010-03-14 12:00:00 (Sun)
  63424810800, #      utc_end 2010-11-07 11:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63424810800, #    utc_start 2010-11-07 11:00:00 (Sun)
  63435700800, #      utc_end 2011-03-13 12:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63435700800, #    utc_start 2011-03-13 12:00:00 (Sun)
  63456260400, #      utc_end 2011-11-06 11:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63456260400, #    utc_start 2011-11-06 11:00:00 (Sun)
  63467150400, #      utc_end 2012-03-11 12:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63467150400, #    utc_start 2012-03-11 12:00:00 (Sun)
  63487710000, #      utc_end 2012-11-04 11:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63487710000, #    utc_start 2012-11-04 11:00:00 (Sun)
  63498600000, #      utc_end 2013-03-10 12:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63498600000, #    utc_start 2013-03-10 12:00:00 (Sun)
  63519159600, #      utc_end 2013-11-03 11:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63519159600, #    utc_start 2013-11-03 11:00:00 (Sun)
  63530049600, #      utc_end 2014-03-09 12:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63530049600, #    utc_start 2014-03-09 12:00:00 (Sun)
  63550609200, #      utc_end 2014-11-02 11:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63550609200, #    utc_start 2014-11-02 11:00:00 (Sun)
  63561499200, #      utc_end 2015-03-08 12:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63561499200, #    utc_start 2015-03-08 12:00:00 (Sun)
  63582058800, #      utc_end 2015-11-01 11:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63582058800, #    utc_start 2015-11-01 11:00:00 (Sun)
  63593553600, #      utc_end 2016-03-13 12:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63593553600, #    utc_start 2016-03-13 12:00:00 (Sun)
  63614113200, #      utc_end 2016-11-06 11:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63614113200, #    utc_start 2016-11-06 11:00:00 (Sun)
  63625003200, #      utc_end 2017-03-12 12:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63625003200, #    utc_start 2017-03-12 12:00:00 (Sun)
  63645562800, #      utc_end 2017-11-05 11:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63645562800, #    utc_start 2017-11-05 11:00:00 (Sun)
  63656452800, #      utc_end 2018-03-11 12:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63656452800, #    utc_start 2018-03-11 12:00:00 (Sun)
  63677012400, #      utc_end 2018-11-04 11:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63677012400, #    utc_start 2018-11-04 11:00:00 (Sun)
  63687902400, #      utc_end 2019-03-10 12:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63687902400, #    utc_start 2019-03-10 12:00:00 (Sun)
  63708462000, #      utc_end 2019-11-03 11:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63708462000, #    utc_start 2019-11-03 11:00:00 (Sun)
  63719352000, #      utc_end 2020-03-08 12:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63719352000, #    utc_start 2020-03-08 12:00:00 (Sun)
  63739911600, #      utc_end 2020-11-01 11:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63739911600, #    utc_start 2020-11-01 11:00:00 (Sun)
  63751406400, #      utc_end 2021-03-14 12:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63751406400, #    utc_start 2021-03-14 12:00:00 (Sun)
  63771966000, #      utc_end 2021-11-07 11:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63771966000, #    utc_start 2021-11-07 11:00:00 (Sun)
  63782856000, #      utc_end 2022-03-13 12:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63782856000, #    utc_start 2022-03-13 12:00:00 (Sun)
  63803415600, #      utc_end 2022-11-06 11:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63803415600, #    utc_start 2022-11-06 11:00:00 (Sun)
  63814305600, #      utc_end 2023-03-12 12:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63814305600, #    utc_start 2023-03-12 12:00:00 (Sun)
  63834865200, #      utc_end 2023-11-05 11:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63834865200, #    utc_start 2023-11-05 11:00:00 (Sun)
  63845755200, #      utc_end 2024-03-10 12:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63845755200, #    utc_start 2024-03-10 12:00:00 (Sun)
  63866314800, #      utc_end 2024-11-03 11:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63866314800, #    utc_start 2024-11-03 11:00:00 (Sun)
  63877204800, #      utc_end 2025-03-09 12:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63877204800, #    utc_start 2025-03-09 12:00:00 (Sun)
  63897764400, #      utc_end 2025-11-02 11:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63897764400, #    utc_start 2025-11-02 11:00:00 (Sun)
  63908654400, #      utc_end 2026-03-08 12:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63908654400, #    utc_start 2026-03-08 12:00:00 (Sun)
  63929214000, #      utc_end 2026-11-01 11:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
      [
  63929214000, #    utc_start 2026-11-01 11:00:00 (Sun)
  63940708800, #      utc_end 2027-03-14 12:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -36000,
  0,
  'HST',
      ],
      [
  63940708800, #    utc_start 2027-03-14 12:00:00 (Sun)
  63961268400, #      utc_end 2027-11-07 11:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -32400,
  1,
  'HDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {61}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -36000 }
  
  my $last_observance = bless( {
    'format' => 'H%sT',
    'gmtoff' => '-10:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724244,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724244,
      'utc_rd_secs' => 0,
      'utc_year' => 1984
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -36000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724244,
      'local_rd_secs' => 36000,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724244,
      'utc_rd_secs' => 36000,
      'utc_year' => 1984
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ADAK

    $main::fatpacked{"DateTime/TimeZone/America/Anchorage.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ANCHORAGE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Anchorage;
  $DateTime::TimeZone::America::Anchorage::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Anchorage::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  58910320776, #      utc_end 1867-10-17 09:59:36 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  58910371200, #    local_end 1867-10-18 00:00:00 (Fri)
  50424,
  0,
  'LMT',
      ],
      [
  58910320776, #    utc_start 1867-10-17 09:59:36 (Thu)
  59946731976, #      utc_end 1900-08-20 21:59:36 (Mon)
  58910284800, #  local_start 1867-10-17 00:00:00 (Thu)
  59946696000, #    local_end 1900-08-20 12:00:00 (Mon)
  -35976,
  0,
  'LMT',
      ],
      [
  59946731976, #    utc_start 1900-08-20 21:59:36 (Mon)
  61252106400, #      utc_end 1942-01-01 10:00:00 (Thu)
  59946695976, #  local_start 1900-08-20 11:59:36 (Mon)
  61252070400, #    local_end 1942-01-01 00:00:00 (Thu)
  -36000,
  0,
  'CAT',
      ],
      [
  61252106400, #    utc_start 1942-01-01 10:00:00 (Thu)
  61255483200, #      utc_end 1942-02-09 12:00:00 (Mon)
  61252070400, #  local_start 1942-01-01 00:00:00 (Thu)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -36000,
  0,
  'CAT',
      ],
      [
  61255483200, #    utc_start 1942-02-09 12:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366255200, #    local_end 1945-08-14 14:00:00 (Tue)
  -32400,
  1,
  'CAWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370305200, #      utc_end 1945-09-30 11:00:00 (Sun)
  61366255200, #  local_start 1945-08-14 14:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -32400,
  1,
  'CAPT',
      ],
      [
  61370305200, #    utc_start 1945-09-30 11:00:00 (Sun)
  61378336800, #      utc_end 1946-01-01 10:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -36000,
  0,
  'CAT',
      ],
      [
  61378336800, #    utc_start 1946-01-01 10:00:00 (Tue)
  62048800800, #      utc_end 1967-04-01 10:00:00 (Sat)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  62048764800, #    local_end 1967-04-01 00:00:00 (Sat)
  -36000,
  0,
  'CAT',
      ],
      [
  62048800800, #    utc_start 1967-04-01 10:00:00 (Sat)
  62104183200, #      utc_end 1969-01-01 10:00:00 (Wed)
  62048764800, #  local_start 1967-04-01 00:00:00 (Sat)
  62104147200, #    local_end 1969-01-01 00:00:00 (Wed)
  -36000,
  0,
  'AHST',
      ],
      [
  62104183200, #    utc_start 1969-01-01 10:00:00 (Wed)
  62114212800, #      utc_end 1969-04-27 12:00:00 (Sun)
  62104147200, #  local_start 1969-01-01 00:00:00 (Wed)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -36000,
  0,
  'AHST',
      ],
      [
  62114212800, #    utc_start 1969-04-27 12:00:00 (Sun)
  62129934000, #      utc_end 1969-10-26 11:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -32400,
  1,
  'AHDT',
      ],
      [
  62129934000, #    utc_start 1969-10-26 11:00:00 (Sun)
  62145662400, #      utc_end 1970-04-26 12:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -36000,
  0,
  'AHST',
      ],
      [
  62145662400, #    utc_start 1970-04-26 12:00:00 (Sun)
  62161383600, #      utc_end 1970-10-25 11:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -32400,
  1,
  'AHDT',
      ],
      [
  62161383600, #    utc_start 1970-10-25 11:00:00 (Sun)
  62177112000, #      utc_end 1971-04-25 12:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -36000,
  0,
  'AHST',
      ],
      [
  62177112000, #    utc_start 1971-04-25 12:00:00 (Sun)
  62193438000, #      utc_end 1971-10-31 11:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -32400,
  1,
  'AHDT',
      ],
      [
  62193438000, #    utc_start 1971-10-31 11:00:00 (Sun)
  62209166400, #      utc_end 1972-04-30 12:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -36000,
  0,
  'AHST',
      ],
      [
  62209166400, #    utc_start 1972-04-30 12:00:00 (Sun)
  62224887600, #      utc_end 1972-10-29 11:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -32400,
  1,
  'AHDT',
      ],
      [
  62224887600, #    utc_start 1972-10-29 11:00:00 (Sun)
  62240616000, #      utc_end 1973-04-29 12:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -36000,
  0,
  'AHST',
      ],
      [
  62240616000, #    utc_start 1973-04-29 12:00:00 (Sun)
  62256337200, #      utc_end 1973-10-28 11:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -32400,
  1,
  'AHDT',
      ],
      [
  62256337200, #    utc_start 1973-10-28 11:00:00 (Sun)
  62262388800, #      utc_end 1974-01-06 12:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -36000,
  0,
  'AHST',
      ],
      [
  62262388800, #    utc_start 1974-01-06 12:00:00 (Sun)
  62287786800, #      utc_end 1974-10-27 11:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -32400,
  1,
  'AHDT',
      ],
      [
  62287786800, #    utc_start 1974-10-27 11:00:00 (Sun)
  62298072000, #      utc_end 1975-02-23 12:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -36000,
  0,
  'AHST',
      ],
      [
  62298072000, #    utc_start 1975-02-23 12:00:00 (Sun)
  62319236400, #      utc_end 1975-10-26 11:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -32400,
  1,
  'AHDT',
      ],
      [
  62319236400, #    utc_start 1975-10-26 11:00:00 (Sun)
  62334964800, #      utc_end 1976-04-25 12:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -36000,
  0,
  'AHST',
      ],
      [
  62334964800, #    utc_start 1976-04-25 12:00:00 (Sun)
  62351290800, #      utc_end 1976-10-31 11:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -32400,
  1,
  'AHDT',
      ],
      [
  62351290800, #    utc_start 1976-10-31 11:00:00 (Sun)
  62366414400, #      utc_end 1977-04-24 12:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -36000,
  0,
  'AHST',
      ],
      [
  62366414400, #    utc_start 1977-04-24 12:00:00 (Sun)
  62382740400, #      utc_end 1977-10-30 11:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -32400,
  1,
  'AHDT',
      ],
      [
  62382740400, #    utc_start 1977-10-30 11:00:00 (Sun)
  62398468800, #      utc_end 1978-04-30 12:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -36000,
  0,
  'AHST',
      ],
      [
  62398468800, #    utc_start 1978-04-30 12:00:00 (Sun)
  62414190000, #      utc_end 1978-10-29 11:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -32400,
  1,
  'AHDT',
      ],
      [
  62414190000, #    utc_start 1978-10-29 11:00:00 (Sun)
  62429918400, #      utc_end 1979-04-29 12:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -36000,
  0,
  'AHST',
      ],
      [
  62429918400, #    utc_start 1979-04-29 12:00:00 (Sun)
  62445639600, #      utc_end 1979-10-28 11:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -32400,
  1,
  'AHDT',
      ],
      [
  62445639600, #    utc_start 1979-10-28 11:00:00 (Sun)
  62461368000, #      utc_end 1980-04-27 12:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -36000,
  0,
  'AHST',
      ],
      [
  62461368000, #    utc_start 1980-04-27 12:00:00 (Sun)
  62477089200, #      utc_end 1980-10-26 11:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -32400,
  1,
  'AHDT',
      ],
      [
  62477089200, #    utc_start 1980-10-26 11:00:00 (Sun)
  62492817600, #      utc_end 1981-04-26 12:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -36000,
  0,
  'AHST',
      ],
      [
  62492817600, #    utc_start 1981-04-26 12:00:00 (Sun)
  62508538800, #      utc_end 1981-10-25 11:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -32400,
  1,
  'AHDT',
      ],
      [
  62508538800, #    utc_start 1981-10-25 11:00:00 (Sun)
  62524267200, #      utc_end 1982-04-25 12:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -36000,
  0,
  'AHST',
      ],
      [
  62524267200, #    utc_start 1982-04-25 12:00:00 (Sun)
  62540593200, #      utc_end 1982-10-31 11:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -32400,
  1,
  'AHDT',
      ],
      [
  62540593200, #    utc_start 1982-10-31 11:00:00 (Sun)
  62555716800, #      utc_end 1983-04-24 12:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -36000,
  0,
  'AHST',
      ],
      [
  62555716800, #    utc_start 1983-04-24 12:00:00 (Sun)
  62572042800, #      utc_end 1983-10-30 11:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -32400,
  1,
  'AHDT',
      ],
      [
  62572042800, #    utc_start 1983-10-30 11:00:00 (Sun)
  62574714000, #      utc_end 1983-11-30 09:00:00 (Wed)
  62572010400, #  local_start 1983-10-30 02:00:00 (Sun)
  62574681600, #    local_end 1983-11-30 00:00:00 (Wed)
  -32400,
  0,
  'YST',
      ],
      [
  62574714000, #    utc_start 1983-11-30 09:00:00 (Wed)
  62587767600, #      utc_end 1984-04-29 11:00:00 (Sun)
  62574681600, #  local_start 1983-11-30 00:00:00 (Wed)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62587767600, #    utc_start 1984-04-29 11:00:00 (Sun)
  62603488800, #      utc_end 1984-10-28 10:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62603488800, #    utc_start 1984-10-28 10:00:00 (Sun)
  62619217200, #      utc_end 1985-04-28 11:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62619217200, #    utc_start 1985-04-28 11:00:00 (Sun)
  62634938400, #      utc_end 1985-10-27 10:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62634938400, #    utc_start 1985-10-27 10:00:00 (Sun)
  62650666800, #      utc_end 1986-04-27 11:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62650666800, #    utc_start 1986-04-27 11:00:00 (Sun)
  62666388000, #      utc_end 1986-10-26 10:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62666388000, #    utc_start 1986-10-26 10:00:00 (Sun)
  62680302000, #      utc_end 1987-04-05 11:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62680302000, #    utc_start 1987-04-05 11:00:00 (Sun)
  62697837600, #      utc_end 1987-10-25 10:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62697837600, #    utc_start 1987-10-25 10:00:00 (Sun)
  62711751600, #      utc_end 1988-04-03 11:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62711751600, #    utc_start 1988-04-03 11:00:00 (Sun)
  62729892000, #      utc_end 1988-10-30 10:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62729892000, #    utc_start 1988-10-30 10:00:00 (Sun)
  62743201200, #      utc_end 1989-04-02 11:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62743201200, #    utc_start 1989-04-02 11:00:00 (Sun)
  62761341600, #      utc_end 1989-10-29 10:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62761341600, #    utc_start 1989-10-29 10:00:00 (Sun)
  62774650800, #      utc_end 1990-04-01 11:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62774650800, #    utc_start 1990-04-01 11:00:00 (Sun)
  62792791200, #      utc_end 1990-10-28 10:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62792791200, #    utc_start 1990-10-28 10:00:00 (Sun)
  62806705200, #      utc_end 1991-04-07 11:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62806705200, #    utc_start 1991-04-07 11:00:00 (Sun)
  62824240800, #      utc_end 1991-10-27 10:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62824240800, #    utc_start 1991-10-27 10:00:00 (Sun)
  62838154800, #      utc_end 1992-04-05 11:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62838154800, #    utc_start 1992-04-05 11:00:00 (Sun)
  62855690400, #      utc_end 1992-10-25 10:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62855690400, #    utc_start 1992-10-25 10:00:00 (Sun)
  62869604400, #      utc_end 1993-04-04 11:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62869604400, #    utc_start 1993-04-04 11:00:00 (Sun)
  62887744800, #      utc_end 1993-10-31 10:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62887744800, #    utc_start 1993-10-31 10:00:00 (Sun)
  62901054000, #      utc_end 1994-04-03 11:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62901054000, #    utc_start 1994-04-03 11:00:00 (Sun)
  62919194400, #      utc_end 1994-10-30 10:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62919194400, #    utc_start 1994-10-30 10:00:00 (Sun)
  62932503600, #      utc_end 1995-04-02 11:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62932503600, #    utc_start 1995-04-02 11:00:00 (Sun)
  62950644000, #      utc_end 1995-10-29 10:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62950644000, #    utc_start 1995-10-29 10:00:00 (Sun)
  62964558000, #      utc_end 1996-04-07 11:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62964558000, #    utc_start 1996-04-07 11:00:00 (Sun)
  62982093600, #      utc_end 1996-10-27 10:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62982093600, #    utc_start 1996-10-27 10:00:00 (Sun)
  62996007600, #      utc_end 1997-04-06 11:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62996007600, #    utc_start 1997-04-06 11:00:00 (Sun)
  63013543200, #      utc_end 1997-10-26 10:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63013543200, #    utc_start 1997-10-26 10:00:00 (Sun)
  63027457200, #      utc_end 1998-04-05 11:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63027457200, #    utc_start 1998-04-05 11:00:00 (Sun)
  63044992800, #      utc_end 1998-10-25 10:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63044992800, #    utc_start 1998-10-25 10:00:00 (Sun)
  63058906800, #      utc_end 1999-04-04 11:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63058906800, #    utc_start 1999-04-04 11:00:00 (Sun)
  63077047200, #      utc_end 1999-10-31 10:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63077047200, #    utc_start 1999-10-31 10:00:00 (Sun)
  63090356400, #      utc_end 2000-04-02 11:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63090356400, #    utc_start 2000-04-02 11:00:00 (Sun)
  63108496800, #      utc_end 2000-10-29 10:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63108496800, #    utc_start 2000-10-29 10:00:00 (Sun)
  63121806000, #      utc_end 2001-04-01 11:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63121806000, #    utc_start 2001-04-01 11:00:00 (Sun)
  63139946400, #      utc_end 2001-10-28 10:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63139946400, #    utc_start 2001-10-28 10:00:00 (Sun)
  63153860400, #      utc_end 2002-04-07 11:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63153860400, #    utc_start 2002-04-07 11:00:00 (Sun)
  63171396000, #      utc_end 2002-10-27 10:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63171396000, #    utc_start 2002-10-27 10:00:00 (Sun)
  63185310000, #      utc_end 2003-04-06 11:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63185310000, #    utc_start 2003-04-06 11:00:00 (Sun)
  63202845600, #      utc_end 2003-10-26 10:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63202845600, #    utc_start 2003-10-26 10:00:00 (Sun)
  63216759600, #      utc_end 2004-04-04 11:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63216759600, #    utc_start 2004-04-04 11:00:00 (Sun)
  63234900000, #      utc_end 2004-10-31 10:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63234900000, #    utc_start 2004-10-31 10:00:00 (Sun)
  63248209200, #      utc_end 2005-04-03 11:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63248209200, #    utc_start 2005-04-03 11:00:00 (Sun)
  63266349600, #      utc_end 2005-10-30 10:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63266349600, #    utc_start 2005-10-30 10:00:00 (Sun)
  63279658800, #      utc_end 2006-04-02 11:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63279658800, #    utc_start 2006-04-02 11:00:00 (Sun)
  63297799200, #      utc_end 2006-10-29 10:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63297799200, #    utc_start 2006-10-29 10:00:00 (Sun)
  63309294000, #      utc_end 2007-03-11 11:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63309294000, #    utc_start 2007-03-11 11:00:00 (Sun)
  63329853600, #      utc_end 2007-11-04 10:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63329853600, #    utc_start 2007-11-04 10:00:00 (Sun)
  63340743600, #      utc_end 2008-03-09 11:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63340743600, #    utc_start 2008-03-09 11:00:00 (Sun)
  63361303200, #      utc_end 2008-11-02 10:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63361303200, #    utc_start 2008-11-02 10:00:00 (Sun)
  63372193200, #      utc_end 2009-03-08 11:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63372193200, #    utc_start 2009-03-08 11:00:00 (Sun)
  63392752800, #      utc_end 2009-11-01 10:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63392752800, #    utc_start 2009-11-01 10:00:00 (Sun)
  63404247600, #      utc_end 2010-03-14 11:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63404247600, #    utc_start 2010-03-14 11:00:00 (Sun)
  63424807200, #      utc_end 2010-11-07 10:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63424807200, #    utc_start 2010-11-07 10:00:00 (Sun)
  63435697200, #      utc_end 2011-03-13 11:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63435697200, #    utc_start 2011-03-13 11:00:00 (Sun)
  63456256800, #      utc_end 2011-11-06 10:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63456256800, #    utc_start 2011-11-06 10:00:00 (Sun)
  63467146800, #      utc_end 2012-03-11 11:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63467146800, #    utc_start 2012-03-11 11:00:00 (Sun)
  63487706400, #      utc_end 2012-11-04 10:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63487706400, #    utc_start 2012-11-04 10:00:00 (Sun)
  63498596400, #      utc_end 2013-03-10 11:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63498596400, #    utc_start 2013-03-10 11:00:00 (Sun)
  63519156000, #      utc_end 2013-11-03 10:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63519156000, #    utc_start 2013-11-03 10:00:00 (Sun)
  63530046000, #      utc_end 2014-03-09 11:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63530046000, #    utc_start 2014-03-09 11:00:00 (Sun)
  63550605600, #      utc_end 2014-11-02 10:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63550605600, #    utc_start 2014-11-02 10:00:00 (Sun)
  63561495600, #      utc_end 2015-03-08 11:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63561495600, #    utc_start 2015-03-08 11:00:00 (Sun)
  63582055200, #      utc_end 2015-11-01 10:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63582055200, #    utc_start 2015-11-01 10:00:00 (Sun)
  63593550000, #      utc_end 2016-03-13 11:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63593550000, #    utc_start 2016-03-13 11:00:00 (Sun)
  63614109600, #      utc_end 2016-11-06 10:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63614109600, #    utc_start 2016-11-06 10:00:00 (Sun)
  63624999600, #      utc_end 2017-03-12 11:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63624999600, #    utc_start 2017-03-12 11:00:00 (Sun)
  63645559200, #      utc_end 2017-11-05 10:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63645559200, #    utc_start 2017-11-05 10:00:00 (Sun)
  63656449200, #      utc_end 2018-03-11 11:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63656449200, #    utc_start 2018-03-11 11:00:00 (Sun)
  63677008800, #      utc_end 2018-11-04 10:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63677008800, #    utc_start 2018-11-04 10:00:00 (Sun)
  63687898800, #      utc_end 2019-03-10 11:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63687898800, #    utc_start 2019-03-10 11:00:00 (Sun)
  63708458400, #      utc_end 2019-11-03 10:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63708458400, #    utc_start 2019-11-03 10:00:00 (Sun)
  63719348400, #      utc_end 2020-03-08 11:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63719348400, #    utc_start 2020-03-08 11:00:00 (Sun)
  63739908000, #      utc_end 2020-11-01 10:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63739908000, #    utc_start 2020-11-01 10:00:00 (Sun)
  63751402800, #      utc_end 2021-03-14 11:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63751402800, #    utc_start 2021-03-14 11:00:00 (Sun)
  63771962400, #      utc_end 2021-11-07 10:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63771962400, #    utc_start 2021-11-07 10:00:00 (Sun)
  63782852400, #      utc_end 2022-03-13 11:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63782852400, #    utc_start 2022-03-13 11:00:00 (Sun)
  63803412000, #      utc_end 2022-11-06 10:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63803412000, #    utc_start 2022-11-06 10:00:00 (Sun)
  63814302000, #      utc_end 2023-03-12 11:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63814302000, #    utc_start 2023-03-12 11:00:00 (Sun)
  63834861600, #      utc_end 2023-11-05 10:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63834861600, #    utc_start 2023-11-05 10:00:00 (Sun)
  63845751600, #      utc_end 2024-03-10 11:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63845751600, #    utc_start 2024-03-10 11:00:00 (Sun)
  63866311200, #      utc_end 2024-11-03 10:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63866311200, #    utc_start 2024-11-03 10:00:00 (Sun)
  63877201200, #      utc_end 2025-03-09 11:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63877201200, #    utc_start 2025-03-09 11:00:00 (Sun)
  63897760800, #      utc_end 2025-11-02 10:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63897760800, #    utc_start 2025-11-02 10:00:00 (Sun)
  63908650800, #      utc_end 2026-03-08 11:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63908650800, #    utc_start 2026-03-08 11:00:00 (Sun)
  63929210400, #      utc_end 2026-11-01 10:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63929210400, #    utc_start 2026-11-01 10:00:00 (Sun)
  63940705200, #      utc_end 2027-03-14 11:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63940705200, #    utc_start 2027-03-14 11:00:00 (Sun)
  63961264800, #      utc_end 2027-11-07 10:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {61}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -32400 }
  
  my $last_observance = bless( {
    'format' => 'AK%sT',
    'gmtoff' => '-9:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724244,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724244,
      'utc_rd_secs' => 0,
      'utc_year' => 1984
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -32400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724244,
      'local_rd_secs' => 32400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724244,
      'utc_rd_secs' => 32400,
      'utc_year' => 1984
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ANCHORAGE

    $main::fatpacked{"DateTime/TimeZone/America/Araguaina.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ARAGUAINA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Araguaina;
  $DateTime::TimeZone::America::Araguaina::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Araguaina::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368469168, #      utc_end 1914-01-01 03:12:48 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  -11568,
  0,
  'LMT',
      ],
      [
  60368469168, #    utc_start 1914-01-01 03:12:48 (Thu)
  60928725600, #      utc_end 1931-10-03 14:00:00 (Sat)
  60368458368, #  local_start 1914-01-01 00:12:48 (Thu)
  60928714800, #    local_end 1931-10-03 11:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  60928725600, #    utc_start 1931-10-03 14:00:00 (Sat)
  60944320800, #      utc_end 1932-04-01 02:00:00 (Fri)
  60928718400, #  local_start 1931-10-03 12:00:00 (Sat)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -7200,
  1,
  'BRST',
      ],
      [
  60944320800, #    utc_start 1932-04-01 02:00:00 (Fri)
  60960308400, #      utc_end 1932-10-03 03:00:00 (Mon)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60960297600, #    local_end 1932-10-03 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  60960308400, #    utc_start 1932-10-03 03:00:00 (Mon)
  60975856800, #      utc_end 1933-04-01 02:00:00 (Sat)
  60960301200, #  local_start 1932-10-03 01:00:00 (Mon)
  60975849600, #    local_end 1933-04-01 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  60975856800, #    utc_start 1933-04-01 02:00:00 (Sat)
  61501863600, #      utc_end 1949-12-01 03:00:00 (Thu)
  60975846000, #  local_start 1933-03-31 23:00:00 (Fri)
  61501852800, #    local_end 1949-12-01 00:00:00 (Thu)
  -10800,
  0,
  'BRT',
      ],
      [
  61501863600, #    utc_start 1949-12-01 03:00:00 (Thu)
  61513614000, #      utc_end 1950-04-16 03:00:00 (Sun)
  61501856400, #  local_start 1949-12-01 01:00:00 (Thu)
  61513606800, #    local_end 1950-04-16 01:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61513614000, #    utc_start 1950-04-16 03:00:00 (Sun)
  61533399600, #      utc_end 1950-12-01 03:00:00 (Fri)
  61513603200, #  local_start 1950-04-16 00:00:00 (Sun)
  61533388800, #    local_end 1950-12-01 00:00:00 (Fri)
  -10800,
  0,
  'BRT',
      ],
      [
  61533399600, #    utc_start 1950-12-01 03:00:00 (Fri)
  61543850400, #      utc_end 1951-04-01 02:00:00 (Sun)
  61533392400, #  local_start 1950-12-01 01:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61543850400, #    utc_start 1951-04-01 02:00:00 (Sun)
  61564935600, #      utc_end 1951-12-01 03:00:00 (Sat)
  61543839600, #  local_start 1951-03-31 23:00:00 (Sat)
  61564924800, #    local_end 1951-12-01 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  61564935600, #    utc_start 1951-12-01 03:00:00 (Sat)
  61575472800, #      utc_end 1952-04-01 02:00:00 (Tue)
  61564928400, #  local_start 1951-12-01 01:00:00 (Sat)
  61575465600, #    local_end 1952-04-01 00:00:00 (Tue)
  -7200,
  1,
  'BRST',
      ],
      [
  61575472800, #    utc_start 1952-04-01 02:00:00 (Tue)
  61596558000, #      utc_end 1952-12-01 03:00:00 (Mon)
  61575462000, #  local_start 1952-03-31 23:00:00 (Mon)
  61596547200, #    local_end 1952-12-01 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  61596558000, #    utc_start 1952-12-01 03:00:00 (Mon)
  61604330400, #      utc_end 1953-03-01 02:00:00 (Sun)
  61596550800, #  local_start 1952-12-01 01:00:00 (Mon)
  61604323200, #    local_end 1953-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61604330400, #    utc_start 1953-03-01 02:00:00 (Sun)
  61944318000, #      utc_end 1963-12-09 03:00:00 (Mon)
  61604319600, #  local_start 1953-02-28 23:00:00 (Sat)
  61944307200, #    local_end 1963-12-09 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  61944318000, #    utc_start 1963-12-09 03:00:00 (Mon)
  61951485600, #      utc_end 1964-03-01 02:00:00 (Sun)
  61944310800, #  local_start 1963-12-09 01:00:00 (Mon)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61951485600, #    utc_start 1964-03-01 02:00:00 (Sun)
  61980519600, #      utc_end 1965-01-31 03:00:00 (Sun)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61980508800, #    local_end 1965-01-31 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  61980519600, #    utc_start 1965-01-31 03:00:00 (Sun)
  61985613600, #      utc_end 1965-03-31 02:00:00 (Wed)
  61980512400, #  local_start 1965-01-31 01:00:00 (Sun)
  61985606400, #    local_end 1965-03-31 00:00:00 (Wed)
  -7200,
  1,
  'BRST',
      ],
      [
  61985613600, #    utc_start 1965-03-31 02:00:00 (Wed)
  62006785200, #      utc_end 1965-12-01 03:00:00 (Wed)
  61985602800, #  local_start 1965-03-30 23:00:00 (Tue)
  62006774400, #    local_end 1965-12-01 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  62006785200, #    utc_start 1965-12-01 03:00:00 (Wed)
  62014557600, #      utc_end 1966-03-01 02:00:00 (Tue)
  62006778000, #  local_start 1965-12-01 01:00:00 (Wed)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -7200,
  1,
  'BRST',
      ],
      [
  62014557600, #    utc_start 1966-03-01 02:00:00 (Tue)
  62035729200, #      utc_end 1966-11-01 03:00:00 (Tue)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62035718400, #    local_end 1966-11-01 00:00:00 (Tue)
  -10800,
  0,
  'BRT',
      ],
      [
  62035729200, #    utc_start 1966-11-01 03:00:00 (Tue)
  62046093600, #      utc_end 1967-03-01 02:00:00 (Wed)
  62035722000, #  local_start 1966-11-01 01:00:00 (Tue)
  62046086400, #    local_end 1967-03-01 00:00:00 (Wed)
  -7200,
  1,
  'BRST',
      ],
      [
  62046093600, #    utc_start 1967-03-01 02:00:00 (Wed)
  62067265200, #      utc_end 1967-11-01 03:00:00 (Wed)
  62046082800, #  local_start 1967-02-28 23:00:00 (Tue)
  62067254400, #    local_end 1967-11-01 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  62067265200, #    utc_start 1967-11-01 03:00:00 (Wed)
  62077716000, #      utc_end 1968-03-01 02:00:00 (Fri)
  62067258000, #  local_start 1967-11-01 01:00:00 (Wed)
  62077708800, #    local_end 1968-03-01 00:00:00 (Fri)
  -7200,
  1,
  'BRST',
      ],
      [
  62077716000, #    utc_start 1968-03-01 02:00:00 (Fri)
  62635431600, #      utc_end 1985-11-02 03:00:00 (Sat)
  62077705200, #  local_start 1968-02-29 23:00:00 (Thu)
  62635420800, #    local_end 1985-11-02 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  62635431600, #    utc_start 1985-11-02 03:00:00 (Sat)
  62646919200, #      utc_end 1986-03-15 02:00:00 (Sat)
  62635424400, #  local_start 1985-11-02 01:00:00 (Sat)
  62646912000, #    local_end 1986-03-15 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  62646919200, #    utc_start 1986-03-15 02:00:00 (Sat)
  62666276400, #      utc_end 1986-10-25 03:00:00 (Sat)
  62646908400, #  local_start 1986-03-14 23:00:00 (Fri)
  62666265600, #    local_end 1986-10-25 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  62666276400, #    utc_start 1986-10-25 03:00:00 (Sat)
  62675949600, #      utc_end 1987-02-14 02:00:00 (Sat)
  62666269200, #  local_start 1986-10-25 01:00:00 (Sat)
  62675942400, #    local_end 1987-02-14 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  62675949600, #    utc_start 1987-02-14 02:00:00 (Sat)
  62697812400, #      utc_end 1987-10-25 03:00:00 (Sun)
  62675938800, #  local_start 1987-02-13 23:00:00 (Fri)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62697812400, #    utc_start 1987-10-25 03:00:00 (Sun)
  62706880800, #      utc_end 1988-02-07 02:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62706873600, #    local_end 1988-02-07 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62706880800, #    utc_start 1988-02-07 02:00:00 (Sun)
  62728657200, #      utc_end 1988-10-16 03:00:00 (Sun)
  62706870000, #  local_start 1988-02-06 23:00:00 (Sat)
  62728646400, #    local_end 1988-10-16 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62728657200, #    utc_start 1988-10-16 03:00:00 (Sun)
  62737725600, #      utc_end 1989-01-29 02:00:00 (Sun)
  62728650000, #  local_start 1988-10-16 01:00:00 (Sun)
  62737718400, #    local_end 1989-01-29 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62737725600, #    utc_start 1989-01-29 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62737714800, #  local_start 1989-01-28 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62770384800, #      utc_end 1990-02-11 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62770377600, #    local_end 1990-02-11 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62770384800, #    utc_start 1990-02-11 02:00:00 (Sun)
  62789223600, #      utc_end 1990-09-17 03:00:00 (Mon)
  62770374000, #  local_start 1990-02-10 23:00:00 (Sat)
  62789212800, #    local_end 1990-09-17 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  62789223600, #    utc_start 1990-09-17 03:00:00 (Mon)
  62946730800, #      utc_end 1995-09-14 03:00:00 (Thu)
  62789212800, #  local_start 1990-09-17 00:00:00 (Mon)
  62946720000, #    local_end 1995-09-14 00:00:00 (Thu)
  -10800,
  0,
  'BRT',
      ],
      [
  62946730800, #    utc_start 1995-09-14 03:00:00 (Thu)
  62949409200, #      utc_end 1995-10-15 03:00:00 (Sun)
  62946720000, #  local_start 1995-09-14 00:00:00 (Thu)
  62949398400, #    local_end 1995-10-15 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62949409200, #    utc_start 1995-10-15 03:00:00 (Sun)
  62959687200, #      utc_end 1996-02-11 02:00:00 (Sun)
  62949402000, #  local_start 1995-10-15 01:00:00 (Sun)
  62959680000, #    local_end 1996-02-11 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62959687200, #    utc_start 1996-02-11 02:00:00 (Sun)
  62980254000, #      utc_end 1996-10-06 03:00:00 (Sun)
  62959676400, #  local_start 1996-02-10 23:00:00 (Sat)
  62980243200, #    local_end 1996-10-06 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62980254000, #    utc_start 1996-10-06 03:00:00 (Sun)
  62991741600, #      utc_end 1997-02-16 02:00:00 (Sun)
  62980246800, #  local_start 1996-10-06 01:00:00 (Sun)
  62991734400, #    local_end 1997-02-16 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62991741600, #    utc_start 1997-02-16 02:00:00 (Sun)
  63011790000, #      utc_end 1997-10-06 03:00:00 (Mon)
  62991730800, #  local_start 1997-02-15 23:00:00 (Sat)
  63011779200, #    local_end 1997-10-06 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  63011790000, #    utc_start 1997-10-06 03:00:00 (Mon)
  63024400800, #      utc_end 1998-03-01 02:00:00 (Sun)
  63011782800, #  local_start 1997-10-06 01:00:00 (Mon)
  63024393600, #    local_end 1998-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63024400800, #    utc_start 1998-03-01 02:00:00 (Sun)
  63043758000, #      utc_end 1998-10-11 03:00:00 (Sun)
  63024390000, #  local_start 1998-02-28 23:00:00 (Sat)
  63043747200, #    local_end 1998-10-11 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63043758000, #    utc_start 1998-10-11 03:00:00 (Sun)
  63055245600, #      utc_end 1999-02-21 02:00:00 (Sun)
  63043750800, #  local_start 1998-10-11 01:00:00 (Sun)
  63055238400, #    local_end 1999-02-21 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63055245600, #    utc_start 1999-02-21 02:00:00 (Sun)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  63055234800, #  local_start 1999-02-20 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087300000, #      utc_end 2000-02-27 02:00:00 (Sun)
  63074595600, #  local_start 1999-10-03 01:00:00 (Sun)
  63087292800, #    local_end 2000-02-27 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63087300000, #    utc_start 2000-02-27 02:00:00 (Sun)
  63106657200, #      utc_end 2000-10-08 03:00:00 (Sun)
  63087289200, #  local_start 2000-02-26 23:00:00 (Sat)
  63106646400, #    local_end 2000-10-08 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63106657200, #    utc_start 2000-10-08 03:00:00 (Sun)
  63118144800, #      utc_end 2001-02-18 02:00:00 (Sun)
  63106650000, #  local_start 2000-10-08 01:00:00 (Sun)
  63118137600, #    local_end 2001-02-18 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63118144800, #    utc_start 2001-02-18 02:00:00 (Sun)
  63138711600, #      utc_end 2001-10-14 03:00:00 (Sun)
  63118134000, #  local_start 2001-02-17 23:00:00 (Sat)
  63138700800, #    local_end 2001-10-14 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63138711600, #    utc_start 2001-10-14 03:00:00 (Sun)
  63149594400, #      utc_end 2002-02-17 02:00:00 (Sun)
  63138704400, #  local_start 2001-10-14 01:00:00 (Sun)
  63149587200, #    local_end 2002-02-17 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63149594400, #    utc_start 2002-02-17 02:00:00 (Sun)
  63171975600, #      utc_end 2002-11-03 03:00:00 (Sun)
  63149583600, #  local_start 2002-02-16 23:00:00 (Sat)
  63171964800, #    local_end 2002-11-03 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63171975600, #    utc_start 2002-11-03 03:00:00 (Sun)
  63181044000, #      utc_end 2003-02-16 02:00:00 (Sun)
  63171968400, #  local_start 2002-11-03 01:00:00 (Sun)
  63181036800, #    local_end 2003-02-16 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63181044000, #    utc_start 2003-02-16 02:00:00 (Sun)
  63200055600, #      utc_end 2003-09-24 03:00:00 (Wed)
  63181033200, #  local_start 2003-02-15 23:00:00 (Sat)
  63200044800, #    local_end 2003-09-24 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  63200055600, #    utc_start 2003-09-24 03:00:00 (Wed)
  63486471600, #      utc_end 2012-10-21 03:00:00 (Sun)
  63200044800, #  local_start 2003-09-24 00:00:00 (Wed)
  63486460800, #    local_end 2012-10-21 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63486471600, #    utc_start 2012-10-21 03:00:00 (Sun)
  63496749600, #      utc_end 2013-02-17 02:00:00 (Sun)
  63486464400, #  local_start 2012-10-21 01:00:00 (Sun)
  63496742400, #    local_end 2013-02-17 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63496749600, #    utc_start 2013-02-17 02:00:00 (Sun)
  63513687600, #      utc_end 2013-09-01 03:00:00 (Sun)
  63496738800, #  local_start 2013-02-16 23:00:00 (Sat)
  63513676800, #    local_end 2013-09-01 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63513687600, #    utc_start 2013-09-01 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63513676800, #  local_start 2013-09-01 00:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'BRT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {25}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ARAGUAINA

    $main::fatpacked{"DateTime/TimeZone/America/Argentina/Buenos_Aires.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ARGENTINA_BUENOS_AIRES';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Argentina::Buenos_Aires;
  $DateTime::TimeZone::America::Argentina::Buenos_Aires::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Argentina::Buenos_Aires::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59763585228, #      utc_end 1894-10-31 03:53:48 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59763571200, #    local_end 1894-10-31 00:00:00 (Wed)
  -14028,
  0,
  'LMT',
      ],
      [
  59763585228, #    utc_start 1894-10-31 03:53:48 (Wed)
  60568229808, #      utc_end 1920-05-01 04:16:48 (Sat)
  59763569820, #  local_start 1894-10-30 23:37:00 (Tue)
  60568214400, #    local_end 1920-05-01 00:00:00 (Sat)
  -15408,
  0,
  'CMT',
      ],
      [
  60568229808, #    utc_start 1920-05-01 04:16:48 (Sat)
  60902251200, #      utc_end 1930-12-01 04:00:00 (Mon)
  60568215408, #  local_start 1920-05-01 00:16:48 (Sat)
  60902236800, #    local_end 1930-12-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  60902251200, #    utc_start 1930-12-01 04:00:00 (Mon)
  60912702000, #      utc_end 1931-04-01 03:00:00 (Wed)
  60902240400, #  local_start 1930-12-01 01:00:00 (Mon)
  60912691200, #    local_end 1931-04-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60912702000, #    utc_start 1931-04-01 03:00:00 (Wed)
  60929726400, #      utc_end 1931-10-15 04:00:00 (Thu)
  60912687600, #  local_start 1931-03-31 23:00:00 (Tue)
  60929712000, #    local_end 1931-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  60929726400, #    utc_start 1931-10-15 04:00:00 (Thu)
  60941646000, #      utc_end 1932-03-01 03:00:00 (Tue)
  60929715600, #  local_start 1931-10-15 01:00:00 (Thu)
  60941635200, #    local_end 1932-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  60941646000, #    utc_start 1932-03-01 03:00:00 (Tue)
  60962817600, #      utc_end 1932-11-01 04:00:00 (Tue)
  60941631600, #  local_start 1932-02-29 23:00:00 (Mon)
  60962803200, #    local_end 1932-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  60962817600, #    utc_start 1932-11-01 04:00:00 (Tue)
  60973182000, #      utc_end 1933-03-01 03:00:00 (Wed)
  60962806800, #  local_start 1932-11-01 01:00:00 (Tue)
  60973171200, #    local_end 1933-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60973182000, #    utc_start 1933-03-01 03:00:00 (Wed)
  60994353600, #      utc_end 1933-11-01 04:00:00 (Wed)
  60973167600, #  local_start 1933-02-28 23:00:00 (Tue)
  60994339200, #    local_end 1933-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  60994353600, #    utc_start 1933-11-01 04:00:00 (Wed)
  61004718000, #      utc_end 1934-03-01 03:00:00 (Thu)
  60994342800, #  local_start 1933-11-01 01:00:00 (Wed)
  61004707200, #    local_end 1934-03-01 00:00:00 (Thu)
  -10800,
  1,
  'ARST',
      ],
      [
  61004718000, #    utc_start 1934-03-01 03:00:00 (Thu)
  61025889600, #      utc_end 1934-11-01 04:00:00 (Thu)
  61004703600, #  local_start 1934-02-28 23:00:00 (Wed)
  61025875200, #    local_end 1934-11-01 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61025889600, #    utc_start 1934-11-01 04:00:00 (Thu)
  61036254000, #      utc_end 1935-03-01 03:00:00 (Fri)
  61025878800, #  local_start 1934-11-01 01:00:00 (Thu)
  61036243200, #    local_end 1935-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61036254000, #    utc_start 1935-03-01 03:00:00 (Fri)
  61057425600, #      utc_end 1935-11-01 04:00:00 (Fri)
  61036239600, #  local_start 1935-02-28 23:00:00 (Thu)
  61057411200, #    local_end 1935-11-01 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61057425600, #    utc_start 1935-11-01 04:00:00 (Fri)
  61067876400, #      utc_end 1936-03-01 03:00:00 (Sun)
  61057414800, #  local_start 1935-11-01 01:00:00 (Fri)
  61067865600, #    local_end 1936-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61067876400, #    utc_start 1936-03-01 03:00:00 (Sun)
  61089048000, #      utc_end 1936-11-01 04:00:00 (Sun)
  61067862000, #  local_start 1936-02-29 23:00:00 (Sat)
  61089033600, #    local_end 1936-11-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61089048000, #    utc_start 1936-11-01 04:00:00 (Sun)
  61099412400, #      utc_end 1937-03-01 03:00:00 (Mon)
  61089037200, #  local_start 1936-11-01 01:00:00 (Sun)
  61099401600, #    local_end 1937-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61099412400, #    utc_start 1937-03-01 03:00:00 (Mon)
  61120584000, #      utc_end 1937-11-01 04:00:00 (Mon)
  61099398000, #  local_start 1937-02-28 23:00:00 (Sun)
  61120569600, #    local_end 1937-11-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61120584000, #    utc_start 1937-11-01 04:00:00 (Mon)
  61130948400, #      utc_end 1938-03-01 03:00:00 (Tue)
  61120573200, #  local_start 1937-11-01 01:00:00 (Mon)
  61130937600, #    local_end 1938-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61130948400, #    utc_start 1938-03-01 03:00:00 (Tue)
  61152120000, #      utc_end 1938-11-01 04:00:00 (Tue)
  61130934000, #  local_start 1938-02-28 23:00:00 (Mon)
  61152105600, #    local_end 1938-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61152120000, #    utc_start 1938-11-01 04:00:00 (Tue)
  61162484400, #      utc_end 1939-03-01 03:00:00 (Wed)
  61152109200, #  local_start 1938-11-01 01:00:00 (Tue)
  61162473600, #    local_end 1939-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  61162484400, #    utc_start 1939-03-01 03:00:00 (Wed)
  61183656000, #      utc_end 1939-11-01 04:00:00 (Wed)
  61162470000, #  local_start 1939-02-28 23:00:00 (Tue)
  61183641600, #    local_end 1939-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61183656000, #    utc_start 1939-11-01 04:00:00 (Wed)
  61194106800, #      utc_end 1940-03-01 03:00:00 (Fri)
  61183645200, #  local_start 1939-11-01 01:00:00 (Wed)
  61194096000, #    local_end 1940-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61194106800, #    utc_start 1940-03-01 03:00:00 (Fri)
  61204651200, #      utc_end 1940-07-01 04:00:00 (Mon)
  61194092400, #  local_start 1940-02-29 23:00:00 (Thu)
  61204636800, #    local_end 1940-07-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61204651200, #    utc_start 1940-07-01 04:00:00 (Mon)
  61234801200, #      utc_end 1941-06-15 03:00:00 (Sun)
  61204640400, #  local_start 1940-07-01 01:00:00 (Mon)
  61234790400, #    local_end 1941-06-15 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61234801200, #    utc_start 1941-06-15 03:00:00 (Sun)
  61245345600, #      utc_end 1941-10-15 04:00:00 (Wed)
  61234786800, #  local_start 1941-06-14 23:00:00 (Sat)
  61245331200, #    local_end 1941-10-15 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61245345600, #    utc_start 1941-10-15 04:00:00 (Wed)
  61301934000, #      utc_end 1943-08-01 03:00:00 (Sun)
  61245334800, #  local_start 1941-10-15 01:00:00 (Wed)
  61301923200, #    local_end 1943-08-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61301934000, #    utc_start 1943-08-01 03:00:00 (Sun)
  61308417600, #      utc_end 1943-10-15 04:00:00 (Fri)
  61301919600, #  local_start 1943-07-31 23:00:00 (Sat)
  61308403200, #    local_end 1943-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61308417600, #    utc_start 1943-10-15 04:00:00 (Fri)
  61383409200, #      utc_end 1946-03-01 03:00:00 (Fri)
  61308406800, #  local_start 1943-10-15 01:00:00 (Fri)
  61383398400, #    local_end 1946-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61383409200, #    utc_start 1946-03-01 03:00:00 (Fri)
  61401902400, #      utc_end 1946-10-01 04:00:00 (Tue)
  61383394800, #  local_start 1946-02-28 23:00:00 (Thu)
  61401888000, #    local_end 1946-10-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61401902400, #    utc_start 1946-10-01 04:00:00 (Tue)
  61938356400, #      utc_end 1963-10-01 03:00:00 (Tue)
  61401891600, #  local_start 1946-10-01 01:00:00 (Tue)
  61938345600, #    local_end 1963-10-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61938356400, #    utc_start 1963-10-01 03:00:00 (Tue)
  61944840000, #      utc_end 1963-12-15 04:00:00 (Sun)
  61938342000, #  local_start 1963-09-30 23:00:00 (Mon)
  61944825600, #    local_end 1963-12-15 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61944840000, #    utc_start 1963-12-15 04:00:00 (Sun)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944829200, #  local_start 1963-12-15 01:00:00 (Sun)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61971192000, #      utc_end 1964-10-15 04:00:00 (Thu)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61971177600, #    local_end 1964-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61971192000, #    utc_start 1964-10-15 04:00:00 (Thu)
  61983025200, #      utc_end 1965-03-01 03:00:00 (Mon)
  61971181200, #  local_start 1964-10-15 01:00:00 (Thu)
  61983014400, #    local_end 1965-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61983025200, #    utc_start 1965-03-01 03:00:00 (Mon)
  62002728000, #      utc_end 1965-10-15 04:00:00 (Fri)
  61983010800, #  local_start 1965-02-28 23:00:00 (Sun)
  62002713600, #    local_end 1965-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  62002728000, #    utc_start 1965-10-15 04:00:00 (Fri)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62002717200, #  local_start 1965-10-15 01:00:00 (Fri)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62034264000, #      utc_end 1966-10-15 04:00:00 (Sat)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62034249600, #    local_end 1966-10-15 00:00:00 (Sat)
  -14400,
  0,
  'ART',
      ],
      [
  62034264000, #    utc_start 1966-10-15 04:00:00 (Sat)
  62048862000, #      utc_end 1967-04-02 03:00:00 (Sun)
  62034253200, #  local_start 1966-10-15 01:00:00 (Sat)
  62048851200, #    local_end 1967-04-02 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62048862000, #    utc_start 1967-04-02 03:00:00 (Sun)
  62064590400, #      utc_end 1967-10-01 04:00:00 (Sun)
  62048847600, #  local_start 1967-04-01 23:00:00 (Sat)
  62064576000, #    local_end 1967-10-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62064590400, #    utc_start 1967-10-01 04:00:00 (Sun)
  62080916400, #      utc_end 1968-04-07 03:00:00 (Sun)
  62064579600, #  local_start 1967-10-01 01:00:00 (Sun)
  62080905600, #    local_end 1968-04-07 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62080916400, #    utc_start 1968-04-07 03:00:00 (Sun)
  62096644800, #      utc_end 1968-10-06 04:00:00 (Sun)
  62080902000, #  local_start 1968-04-06 23:00:00 (Sat)
  62096630400, #    local_end 1968-10-06 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62096644800, #    utc_start 1968-10-06 04:00:00 (Sun)
  62112366000, #      utc_end 1969-04-06 03:00:00 (Sun)
  62096634000, #  local_start 1968-10-06 01:00:00 (Sun)
  62112355200, #    local_end 1969-04-06 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62112366000, #    utc_start 1969-04-06 03:00:00 (Sun)
  62128094400, #      utc_end 1969-10-05 04:00:00 (Sun)
  62112351600, #  local_start 1969-04-05 23:00:00 (Sat)
  62128080000, #    local_end 1969-10-05 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62128094400, #    utc_start 1969-10-05 04:00:00 (Sun)
  62263825200, #      utc_end 1974-01-23 03:00:00 (Wed)
  62128083600, #  local_start 1969-10-05 01:00:00 (Sun)
  62263814400, #    local_end 1974-01-23 00:00:00 (Wed)
  -10800,
  0,
  'ART',
      ],
      [
  62263825200, #    utc_start 1974-01-23 03:00:00 (Wed)
  62272288800, #      utc_end 1974-05-01 02:00:00 (Wed)
  62263818000, #  local_start 1974-01-23 01:00:00 (Wed)
  62272281600, #    local_end 1974-05-01 00:00:00 (Wed)
  -7200,
  1,
  'ARST',
      ],
      [
  62272288800, #    utc_start 1974-05-01 02:00:00 (Wed)
  62732631600, #      utc_end 1988-12-01 03:00:00 (Thu)
  62272278000, #  local_start 1974-04-30 23:00:00 (Tue)
  62732620800, #    local_end 1988-12-01 00:00:00 (Thu)
  -10800,
  0,
  'ART',
      ],
      [
  62732631600, #    utc_start 1988-12-01 03:00:00 (Thu)
  62740749600, #      utc_end 1989-03-05 02:00:00 (Sun)
  62732624400, #  local_start 1988-12-01 01:00:00 (Thu)
  62740742400, #    local_end 1989-03-05 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62740749600, #    utc_start 1989-03-05 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62740738800, #  local_start 1989-03-04 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62772199200, #      utc_end 1990-03-04 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62772192000, #    local_end 1990-03-04 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62772199200, #    utc_start 1990-03-04 02:00:00 (Sun)
  62792161200, #      utc_end 1990-10-21 03:00:00 (Sun)
  62772188400, #  local_start 1990-03-03 23:00:00 (Sat)
  62792150400, #    local_end 1990-10-21 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62792161200, #    utc_start 1990-10-21 03:00:00 (Sun)
  62803648800, #      utc_end 1991-03-03 02:00:00 (Sun)
  62792154000, #  local_start 1990-10-21 01:00:00 (Sun)
  62803641600, #    local_end 1991-03-03 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62803648800, #    utc_start 1991-03-03 02:00:00 (Sun)
  62823610800, #      utc_end 1991-10-20 03:00:00 (Sun)
  62803638000, #  local_start 1991-03-02 23:00:00 (Sat)
  62823600000, #    local_end 1991-10-20 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62823610800, #    utc_start 1991-10-20 03:00:00 (Sun)
  62835098400, #      utc_end 1992-03-01 02:00:00 (Sun)
  62823603600, #  local_start 1991-10-20 01:00:00 (Sun)
  62835091200, #    local_end 1992-03-01 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62835098400, #    utc_start 1992-03-01 02:00:00 (Sun)
  62855060400, #      utc_end 1992-10-18 03:00:00 (Sun)
  62835087600, #  local_start 1992-02-29 23:00:00 (Sat)
  62855049600, #    local_end 1992-10-18 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62855060400, #    utc_start 1992-10-18 03:00:00 (Sun)
  62867152800, #      utc_end 1993-03-07 02:00:00 (Sun)
  62855053200, #  local_start 1992-10-18 01:00:00 (Sun)
  62867145600, #    local_end 1993-03-07 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62867152800, #    utc_start 1993-03-07 02:00:00 (Sun)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  62867142000, #  local_start 1993-03-06 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087735600, #      utc_end 2000-03-03 03:00:00 (Fri)
  63074592000, #  local_start 1999-10-03 00:00:00 (Sun)
  63087724800, #    local_end 2000-03-03 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  63087735600, #    utc_start 2000-03-03 03:00:00 (Fri)
  63334666800, #      utc_end 2007-12-30 03:00:00 (Sun)
  63087724800, #  local_start 2000-03-03 00:00:00 (Fri)
  63334656000, #    local_end 2007-12-30 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63334666800, #    utc_start 2007-12-30 03:00:00 (Sun)
  63341316000, #      utc_end 2008-03-16 02:00:00 (Sun)
  63334659600, #  local_start 2007-12-30 01:00:00 (Sun)
  63341308800, #    local_end 2008-03-16 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  63341316000, #    utc_start 2008-03-16 02:00:00 (Sun)
  63360068400, #      utc_end 2008-10-19 03:00:00 (Sun)
  63341305200, #  local_start 2008-03-15 23:00:00 (Sat)
  63360057600, #    local_end 2008-10-19 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63360068400, #    utc_start 2008-10-19 03:00:00 (Sun)
  63372765600, #      utc_end 2009-03-15 02:00:00 (Sun)
  63360061200, #  local_start 2008-10-19 01:00:00 (Sun)
  63372758400, #    local_end 2009-03-15 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  63372765600, #    utc_start 2009-03-15 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63372754800, #  local_start 2009-03-14 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'ART',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {29}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ARGENTINA_BUENOS_AIRES

    $main::fatpacked{"DateTime/TimeZone/America/Argentina/Catamarca.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ARGENTINA_CATAMARCA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Argentina::Catamarca;
  $DateTime::TimeZone::America::Argentina::Catamarca::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Argentina::Catamarca::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59763586988, #      utc_end 1894-10-31 04:23:08 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59763571200, #    local_end 1894-10-31 00:00:00 (Wed)
  -15788,
  0,
  'LMT',
      ],
      [
  59763586988, #    utc_start 1894-10-31 04:23:08 (Wed)
  60568229808, #      utc_end 1920-05-01 04:16:48 (Sat)
  59763571580, #  local_start 1894-10-31 00:06:20 (Wed)
  60568214400, #    local_end 1920-05-01 00:00:00 (Sat)
  -15408,
  0,
  'CMT',
      ],
      [
  60568229808, #    utc_start 1920-05-01 04:16:48 (Sat)
  60902251200, #      utc_end 1930-12-01 04:00:00 (Mon)
  60568215408, #  local_start 1920-05-01 00:16:48 (Sat)
  60902236800, #    local_end 1930-12-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  60902251200, #    utc_start 1930-12-01 04:00:00 (Mon)
  60912702000, #      utc_end 1931-04-01 03:00:00 (Wed)
  60902240400, #  local_start 1930-12-01 01:00:00 (Mon)
  60912691200, #    local_end 1931-04-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60912702000, #    utc_start 1931-04-01 03:00:00 (Wed)
  60929726400, #      utc_end 1931-10-15 04:00:00 (Thu)
  60912687600, #  local_start 1931-03-31 23:00:00 (Tue)
  60929712000, #    local_end 1931-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  60929726400, #    utc_start 1931-10-15 04:00:00 (Thu)
  60941646000, #      utc_end 1932-03-01 03:00:00 (Tue)
  60929715600, #  local_start 1931-10-15 01:00:00 (Thu)
  60941635200, #    local_end 1932-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  60941646000, #    utc_start 1932-03-01 03:00:00 (Tue)
  60962817600, #      utc_end 1932-11-01 04:00:00 (Tue)
  60941631600, #  local_start 1932-02-29 23:00:00 (Mon)
  60962803200, #    local_end 1932-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  60962817600, #    utc_start 1932-11-01 04:00:00 (Tue)
  60973182000, #      utc_end 1933-03-01 03:00:00 (Wed)
  60962806800, #  local_start 1932-11-01 01:00:00 (Tue)
  60973171200, #    local_end 1933-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60973182000, #    utc_start 1933-03-01 03:00:00 (Wed)
  60994353600, #      utc_end 1933-11-01 04:00:00 (Wed)
  60973167600, #  local_start 1933-02-28 23:00:00 (Tue)
  60994339200, #    local_end 1933-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  60994353600, #    utc_start 1933-11-01 04:00:00 (Wed)
  61004718000, #      utc_end 1934-03-01 03:00:00 (Thu)
  60994342800, #  local_start 1933-11-01 01:00:00 (Wed)
  61004707200, #    local_end 1934-03-01 00:00:00 (Thu)
  -10800,
  1,
  'ARST',
      ],
      [
  61004718000, #    utc_start 1934-03-01 03:00:00 (Thu)
  61025889600, #      utc_end 1934-11-01 04:00:00 (Thu)
  61004703600, #  local_start 1934-02-28 23:00:00 (Wed)
  61025875200, #    local_end 1934-11-01 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61025889600, #    utc_start 1934-11-01 04:00:00 (Thu)
  61036254000, #      utc_end 1935-03-01 03:00:00 (Fri)
  61025878800, #  local_start 1934-11-01 01:00:00 (Thu)
  61036243200, #    local_end 1935-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61036254000, #    utc_start 1935-03-01 03:00:00 (Fri)
  61057425600, #      utc_end 1935-11-01 04:00:00 (Fri)
  61036239600, #  local_start 1935-02-28 23:00:00 (Thu)
  61057411200, #    local_end 1935-11-01 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61057425600, #    utc_start 1935-11-01 04:00:00 (Fri)
  61067876400, #      utc_end 1936-03-01 03:00:00 (Sun)
  61057414800, #  local_start 1935-11-01 01:00:00 (Fri)
  61067865600, #    local_end 1936-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61067876400, #    utc_start 1936-03-01 03:00:00 (Sun)
  61089048000, #      utc_end 1936-11-01 04:00:00 (Sun)
  61067862000, #  local_start 1936-02-29 23:00:00 (Sat)
  61089033600, #    local_end 1936-11-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61089048000, #    utc_start 1936-11-01 04:00:00 (Sun)
  61099412400, #      utc_end 1937-03-01 03:00:00 (Mon)
  61089037200, #  local_start 1936-11-01 01:00:00 (Sun)
  61099401600, #    local_end 1937-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61099412400, #    utc_start 1937-03-01 03:00:00 (Mon)
  61120584000, #      utc_end 1937-11-01 04:00:00 (Mon)
  61099398000, #  local_start 1937-02-28 23:00:00 (Sun)
  61120569600, #    local_end 1937-11-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61120584000, #    utc_start 1937-11-01 04:00:00 (Mon)
  61130948400, #      utc_end 1938-03-01 03:00:00 (Tue)
  61120573200, #  local_start 1937-11-01 01:00:00 (Mon)
  61130937600, #    local_end 1938-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61130948400, #    utc_start 1938-03-01 03:00:00 (Tue)
  61152120000, #      utc_end 1938-11-01 04:00:00 (Tue)
  61130934000, #  local_start 1938-02-28 23:00:00 (Mon)
  61152105600, #    local_end 1938-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61152120000, #    utc_start 1938-11-01 04:00:00 (Tue)
  61162484400, #      utc_end 1939-03-01 03:00:00 (Wed)
  61152109200, #  local_start 1938-11-01 01:00:00 (Tue)
  61162473600, #    local_end 1939-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  61162484400, #    utc_start 1939-03-01 03:00:00 (Wed)
  61183656000, #      utc_end 1939-11-01 04:00:00 (Wed)
  61162470000, #  local_start 1939-02-28 23:00:00 (Tue)
  61183641600, #    local_end 1939-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61183656000, #    utc_start 1939-11-01 04:00:00 (Wed)
  61194106800, #      utc_end 1940-03-01 03:00:00 (Fri)
  61183645200, #  local_start 1939-11-01 01:00:00 (Wed)
  61194096000, #    local_end 1940-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61194106800, #    utc_start 1940-03-01 03:00:00 (Fri)
  61204651200, #      utc_end 1940-07-01 04:00:00 (Mon)
  61194092400, #  local_start 1940-02-29 23:00:00 (Thu)
  61204636800, #    local_end 1940-07-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61204651200, #    utc_start 1940-07-01 04:00:00 (Mon)
  61234801200, #      utc_end 1941-06-15 03:00:00 (Sun)
  61204640400, #  local_start 1940-07-01 01:00:00 (Mon)
  61234790400, #    local_end 1941-06-15 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61234801200, #    utc_start 1941-06-15 03:00:00 (Sun)
  61245345600, #      utc_end 1941-10-15 04:00:00 (Wed)
  61234786800, #  local_start 1941-06-14 23:00:00 (Sat)
  61245331200, #    local_end 1941-10-15 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61245345600, #    utc_start 1941-10-15 04:00:00 (Wed)
  61301934000, #      utc_end 1943-08-01 03:00:00 (Sun)
  61245334800, #  local_start 1941-10-15 01:00:00 (Wed)
  61301923200, #    local_end 1943-08-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61301934000, #    utc_start 1943-08-01 03:00:00 (Sun)
  61308417600, #      utc_end 1943-10-15 04:00:00 (Fri)
  61301919600, #  local_start 1943-07-31 23:00:00 (Sat)
  61308403200, #    local_end 1943-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61308417600, #    utc_start 1943-10-15 04:00:00 (Fri)
  61383409200, #      utc_end 1946-03-01 03:00:00 (Fri)
  61308406800, #  local_start 1943-10-15 01:00:00 (Fri)
  61383398400, #    local_end 1946-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61383409200, #    utc_start 1946-03-01 03:00:00 (Fri)
  61401902400, #      utc_end 1946-10-01 04:00:00 (Tue)
  61383394800, #  local_start 1946-02-28 23:00:00 (Thu)
  61401888000, #    local_end 1946-10-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61401902400, #    utc_start 1946-10-01 04:00:00 (Tue)
  61938356400, #      utc_end 1963-10-01 03:00:00 (Tue)
  61401891600, #  local_start 1946-10-01 01:00:00 (Tue)
  61938345600, #    local_end 1963-10-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61938356400, #    utc_start 1963-10-01 03:00:00 (Tue)
  61944840000, #      utc_end 1963-12-15 04:00:00 (Sun)
  61938342000, #  local_start 1963-09-30 23:00:00 (Mon)
  61944825600, #    local_end 1963-12-15 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61944840000, #    utc_start 1963-12-15 04:00:00 (Sun)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944829200, #  local_start 1963-12-15 01:00:00 (Sun)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61971192000, #      utc_end 1964-10-15 04:00:00 (Thu)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61971177600, #    local_end 1964-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61971192000, #    utc_start 1964-10-15 04:00:00 (Thu)
  61983025200, #      utc_end 1965-03-01 03:00:00 (Mon)
  61971181200, #  local_start 1964-10-15 01:00:00 (Thu)
  61983014400, #    local_end 1965-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61983025200, #    utc_start 1965-03-01 03:00:00 (Mon)
  62002728000, #      utc_end 1965-10-15 04:00:00 (Fri)
  61983010800, #  local_start 1965-02-28 23:00:00 (Sun)
  62002713600, #    local_end 1965-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  62002728000, #    utc_start 1965-10-15 04:00:00 (Fri)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62002717200, #  local_start 1965-10-15 01:00:00 (Fri)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62034264000, #      utc_end 1966-10-15 04:00:00 (Sat)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62034249600, #    local_end 1966-10-15 00:00:00 (Sat)
  -14400,
  0,
  'ART',
      ],
      [
  62034264000, #    utc_start 1966-10-15 04:00:00 (Sat)
  62048862000, #      utc_end 1967-04-02 03:00:00 (Sun)
  62034253200, #  local_start 1966-10-15 01:00:00 (Sat)
  62048851200, #    local_end 1967-04-02 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62048862000, #    utc_start 1967-04-02 03:00:00 (Sun)
  62064590400, #      utc_end 1967-10-01 04:00:00 (Sun)
  62048847600, #  local_start 1967-04-01 23:00:00 (Sat)
  62064576000, #    local_end 1967-10-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62064590400, #    utc_start 1967-10-01 04:00:00 (Sun)
  62080916400, #      utc_end 1968-04-07 03:00:00 (Sun)
  62064579600, #  local_start 1967-10-01 01:00:00 (Sun)
  62080905600, #    local_end 1968-04-07 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62080916400, #    utc_start 1968-04-07 03:00:00 (Sun)
  62096644800, #      utc_end 1968-10-06 04:00:00 (Sun)
  62080902000, #  local_start 1968-04-06 23:00:00 (Sat)
  62096630400, #    local_end 1968-10-06 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62096644800, #    utc_start 1968-10-06 04:00:00 (Sun)
  62112366000, #      utc_end 1969-04-06 03:00:00 (Sun)
  62096634000, #  local_start 1968-10-06 01:00:00 (Sun)
  62112355200, #    local_end 1969-04-06 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62112366000, #    utc_start 1969-04-06 03:00:00 (Sun)
  62128094400, #      utc_end 1969-10-05 04:00:00 (Sun)
  62112351600, #  local_start 1969-04-05 23:00:00 (Sat)
  62128080000, #    local_end 1969-10-05 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62128094400, #    utc_start 1969-10-05 04:00:00 (Sun)
  62263825200, #      utc_end 1974-01-23 03:00:00 (Wed)
  62128083600, #  local_start 1969-10-05 01:00:00 (Sun)
  62263814400, #    local_end 1974-01-23 00:00:00 (Wed)
  -10800,
  0,
  'ART',
      ],
      [
  62263825200, #    utc_start 1974-01-23 03:00:00 (Wed)
  62272288800, #      utc_end 1974-05-01 02:00:00 (Wed)
  62263818000, #  local_start 1974-01-23 01:00:00 (Wed)
  62272281600, #    local_end 1974-05-01 00:00:00 (Wed)
  -7200,
  1,
  'ARST',
      ],
      [
  62272288800, #    utc_start 1974-05-01 02:00:00 (Wed)
  62732631600, #      utc_end 1988-12-01 03:00:00 (Thu)
  62272278000, #  local_start 1974-04-30 23:00:00 (Tue)
  62732620800, #    local_end 1988-12-01 00:00:00 (Thu)
  -10800,
  0,
  'ART',
      ],
      [
  62732631600, #    utc_start 1988-12-01 03:00:00 (Thu)
  62740749600, #      utc_end 1989-03-05 02:00:00 (Sun)
  62732624400, #  local_start 1988-12-01 01:00:00 (Thu)
  62740742400, #    local_end 1989-03-05 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62740749600, #    utc_start 1989-03-05 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62740738800, #  local_start 1989-03-04 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62772199200, #      utc_end 1990-03-04 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62772192000, #    local_end 1990-03-04 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62772199200, #    utc_start 1990-03-04 02:00:00 (Sun)
  62792161200, #      utc_end 1990-10-21 03:00:00 (Sun)
  62772188400, #  local_start 1990-03-03 23:00:00 (Sat)
  62792150400, #    local_end 1990-10-21 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62792161200, #    utc_start 1990-10-21 03:00:00 (Sun)
  62803648800, #      utc_end 1991-03-03 02:00:00 (Sun)
  62792154000, #  local_start 1990-10-21 01:00:00 (Sun)
  62803641600, #    local_end 1991-03-03 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62803648800, #    utc_start 1991-03-03 02:00:00 (Sun)
  62823614400, #      utc_end 1991-10-20 04:00:00 (Sun)
  62803634400, #  local_start 1991-03-02 22:00:00 (Sat)
  62823600000, #    local_end 1991-10-20 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  62823614400, #    utc_start 1991-10-20 04:00:00 (Sun)
  62835098400, #      utc_end 1992-03-01 02:00:00 (Sun)
  62823607200, #  local_start 1991-10-20 02:00:00 (Sun)
  62835091200, #    local_end 1992-03-01 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62835098400, #    utc_start 1992-03-01 02:00:00 (Sun)
  62855060400, #      utc_end 1992-10-18 03:00:00 (Sun)
  62835087600, #  local_start 1992-02-29 23:00:00 (Sat)
  62855049600, #    local_end 1992-10-18 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62855060400, #    utc_start 1992-10-18 03:00:00 (Sun)
  62867152800, #      utc_end 1993-03-07 02:00:00 (Sun)
  62855053200, #  local_start 1992-10-18 01:00:00 (Sun)
  62867145600, #    local_end 1993-03-07 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62867152800, #    utc_start 1993-03-07 02:00:00 (Sun)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  62867142000, #  local_start 1993-03-06 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087735600, #      utc_end 2000-03-03 03:00:00 (Fri)
  63074592000, #  local_start 1999-10-03 00:00:00 (Sun)
  63087724800, #    local_end 2000-03-03 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  63087735600, #    utc_start 2000-03-03 03:00:00 (Fri)
  63221742000, #      utc_end 2004-06-01 03:00:00 (Tue)
  63087724800, #  local_start 2000-03-03 00:00:00 (Fri)
  63221731200, #    local_end 2004-06-01 00:00:00 (Tue)
  -10800,
  0,
  'ART',
      ],
      [
  63221742000, #    utc_start 2004-06-01 03:00:00 (Tue)
  63223387200, #      utc_end 2004-06-20 04:00:00 (Sun)
  63221727600, #  local_start 2004-05-31 23:00:00 (Mon)
  63223372800, #    local_end 2004-06-20 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  63223387200, #    utc_start 2004-06-20 04:00:00 (Sun)
  63334666800, #      utc_end 2007-12-30 03:00:00 (Sun)
  63223376400, #  local_start 2004-06-20 01:00:00 (Sun)
  63334656000, #    local_end 2007-12-30 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63334666800, #    utc_start 2007-12-30 03:00:00 (Sun)
  63341316000, #      utc_end 2008-03-16 02:00:00 (Sun)
  63334659600, #  local_start 2007-12-30 01:00:00 (Sun)
  63341308800, #    local_end 2008-03-16 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  63341316000, #    utc_start 2008-03-16 02:00:00 (Sun)
  63359982000, #      utc_end 2008-10-18 03:00:00 (Sat)
  63341305200, #  local_start 2008-03-15 23:00:00 (Sat)
  63359971200, #    local_end 2008-10-18 00:00:00 (Sat)
  -10800,
  0,
  'ART',
      ],
      [
  63359982000, #    utc_start 2008-10-18 03:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63359971200, #  local_start 2008-10-18 00:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'ART',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {28}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ARGENTINA_CATAMARCA

    $main::fatpacked{"DateTime/TimeZone/America/Argentina/Cordoba.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ARGENTINA_CORDOBA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Argentina::Cordoba;
  $DateTime::TimeZone::America::Argentina::Cordoba::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Argentina::Cordoba::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59763586608, #      utc_end 1894-10-31 04:16:48 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59763571200, #    local_end 1894-10-31 00:00:00 (Wed)
  -15408,
  0,
  'LMT',
      ],
      [
  59763586608, #    utc_start 1894-10-31 04:16:48 (Wed)
  60568229808, #      utc_end 1920-05-01 04:16:48 (Sat)
  59763571200, #  local_start 1894-10-31 00:00:00 (Wed)
  60568214400, #    local_end 1920-05-01 00:00:00 (Sat)
  -15408,
  0,
  'CMT',
      ],
      [
  60568229808, #    utc_start 1920-05-01 04:16:48 (Sat)
  60902251200, #      utc_end 1930-12-01 04:00:00 (Mon)
  60568215408, #  local_start 1920-05-01 00:16:48 (Sat)
  60902236800, #    local_end 1930-12-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  60902251200, #    utc_start 1930-12-01 04:00:00 (Mon)
  60912702000, #      utc_end 1931-04-01 03:00:00 (Wed)
  60902240400, #  local_start 1930-12-01 01:00:00 (Mon)
  60912691200, #    local_end 1931-04-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60912702000, #    utc_start 1931-04-01 03:00:00 (Wed)
  60929726400, #      utc_end 1931-10-15 04:00:00 (Thu)
  60912687600, #  local_start 1931-03-31 23:00:00 (Tue)
  60929712000, #    local_end 1931-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  60929726400, #    utc_start 1931-10-15 04:00:00 (Thu)
  60941646000, #      utc_end 1932-03-01 03:00:00 (Tue)
  60929715600, #  local_start 1931-10-15 01:00:00 (Thu)
  60941635200, #    local_end 1932-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  60941646000, #    utc_start 1932-03-01 03:00:00 (Tue)
  60962817600, #      utc_end 1932-11-01 04:00:00 (Tue)
  60941631600, #  local_start 1932-02-29 23:00:00 (Mon)
  60962803200, #    local_end 1932-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  60962817600, #    utc_start 1932-11-01 04:00:00 (Tue)
  60973182000, #      utc_end 1933-03-01 03:00:00 (Wed)
  60962806800, #  local_start 1932-11-01 01:00:00 (Tue)
  60973171200, #    local_end 1933-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60973182000, #    utc_start 1933-03-01 03:00:00 (Wed)
  60994353600, #      utc_end 1933-11-01 04:00:00 (Wed)
  60973167600, #  local_start 1933-02-28 23:00:00 (Tue)
  60994339200, #    local_end 1933-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  60994353600, #    utc_start 1933-11-01 04:00:00 (Wed)
  61004718000, #      utc_end 1934-03-01 03:00:00 (Thu)
  60994342800, #  local_start 1933-11-01 01:00:00 (Wed)
  61004707200, #    local_end 1934-03-01 00:00:00 (Thu)
  -10800,
  1,
  'ARST',
      ],
      [
  61004718000, #    utc_start 1934-03-01 03:00:00 (Thu)
  61025889600, #      utc_end 1934-11-01 04:00:00 (Thu)
  61004703600, #  local_start 1934-02-28 23:00:00 (Wed)
  61025875200, #    local_end 1934-11-01 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61025889600, #    utc_start 1934-11-01 04:00:00 (Thu)
  61036254000, #      utc_end 1935-03-01 03:00:00 (Fri)
  61025878800, #  local_start 1934-11-01 01:00:00 (Thu)
  61036243200, #    local_end 1935-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61036254000, #    utc_start 1935-03-01 03:00:00 (Fri)
  61057425600, #      utc_end 1935-11-01 04:00:00 (Fri)
  61036239600, #  local_start 1935-02-28 23:00:00 (Thu)
  61057411200, #    local_end 1935-11-01 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61057425600, #    utc_start 1935-11-01 04:00:00 (Fri)
  61067876400, #      utc_end 1936-03-01 03:00:00 (Sun)
  61057414800, #  local_start 1935-11-01 01:00:00 (Fri)
  61067865600, #    local_end 1936-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61067876400, #    utc_start 1936-03-01 03:00:00 (Sun)
  61089048000, #      utc_end 1936-11-01 04:00:00 (Sun)
  61067862000, #  local_start 1936-02-29 23:00:00 (Sat)
  61089033600, #    local_end 1936-11-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61089048000, #    utc_start 1936-11-01 04:00:00 (Sun)
  61099412400, #      utc_end 1937-03-01 03:00:00 (Mon)
  61089037200, #  local_start 1936-11-01 01:00:00 (Sun)
  61099401600, #    local_end 1937-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61099412400, #    utc_start 1937-03-01 03:00:00 (Mon)
  61120584000, #      utc_end 1937-11-01 04:00:00 (Mon)
  61099398000, #  local_start 1937-02-28 23:00:00 (Sun)
  61120569600, #    local_end 1937-11-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61120584000, #    utc_start 1937-11-01 04:00:00 (Mon)
  61130948400, #      utc_end 1938-03-01 03:00:00 (Tue)
  61120573200, #  local_start 1937-11-01 01:00:00 (Mon)
  61130937600, #    local_end 1938-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61130948400, #    utc_start 1938-03-01 03:00:00 (Tue)
  61152120000, #      utc_end 1938-11-01 04:00:00 (Tue)
  61130934000, #  local_start 1938-02-28 23:00:00 (Mon)
  61152105600, #    local_end 1938-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61152120000, #    utc_start 1938-11-01 04:00:00 (Tue)
  61162484400, #      utc_end 1939-03-01 03:00:00 (Wed)
  61152109200, #  local_start 1938-11-01 01:00:00 (Tue)
  61162473600, #    local_end 1939-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  61162484400, #    utc_start 1939-03-01 03:00:00 (Wed)
  61183656000, #      utc_end 1939-11-01 04:00:00 (Wed)
  61162470000, #  local_start 1939-02-28 23:00:00 (Tue)
  61183641600, #    local_end 1939-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61183656000, #    utc_start 1939-11-01 04:00:00 (Wed)
  61194106800, #      utc_end 1940-03-01 03:00:00 (Fri)
  61183645200, #  local_start 1939-11-01 01:00:00 (Wed)
  61194096000, #    local_end 1940-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61194106800, #    utc_start 1940-03-01 03:00:00 (Fri)
  61204651200, #      utc_end 1940-07-01 04:00:00 (Mon)
  61194092400, #  local_start 1940-02-29 23:00:00 (Thu)
  61204636800, #    local_end 1940-07-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61204651200, #    utc_start 1940-07-01 04:00:00 (Mon)
  61234801200, #      utc_end 1941-06-15 03:00:00 (Sun)
  61204640400, #  local_start 1940-07-01 01:00:00 (Mon)
  61234790400, #    local_end 1941-06-15 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61234801200, #    utc_start 1941-06-15 03:00:00 (Sun)
  61245345600, #      utc_end 1941-10-15 04:00:00 (Wed)
  61234786800, #  local_start 1941-06-14 23:00:00 (Sat)
  61245331200, #    local_end 1941-10-15 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61245345600, #    utc_start 1941-10-15 04:00:00 (Wed)
  61301934000, #      utc_end 1943-08-01 03:00:00 (Sun)
  61245334800, #  local_start 1941-10-15 01:00:00 (Wed)
  61301923200, #    local_end 1943-08-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61301934000, #    utc_start 1943-08-01 03:00:00 (Sun)
  61308417600, #      utc_end 1943-10-15 04:00:00 (Fri)
  61301919600, #  local_start 1943-07-31 23:00:00 (Sat)
  61308403200, #    local_end 1943-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61308417600, #    utc_start 1943-10-15 04:00:00 (Fri)
  61383409200, #      utc_end 1946-03-01 03:00:00 (Fri)
  61308406800, #  local_start 1943-10-15 01:00:00 (Fri)
  61383398400, #    local_end 1946-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61383409200, #    utc_start 1946-03-01 03:00:00 (Fri)
  61401902400, #      utc_end 1946-10-01 04:00:00 (Tue)
  61383394800, #  local_start 1946-02-28 23:00:00 (Thu)
  61401888000, #    local_end 1946-10-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61401902400, #    utc_start 1946-10-01 04:00:00 (Tue)
  61938356400, #      utc_end 1963-10-01 03:00:00 (Tue)
  61401891600, #  local_start 1946-10-01 01:00:00 (Tue)
  61938345600, #    local_end 1963-10-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61938356400, #    utc_start 1963-10-01 03:00:00 (Tue)
  61944840000, #      utc_end 1963-12-15 04:00:00 (Sun)
  61938342000, #  local_start 1963-09-30 23:00:00 (Mon)
  61944825600, #    local_end 1963-12-15 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61944840000, #    utc_start 1963-12-15 04:00:00 (Sun)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944829200, #  local_start 1963-12-15 01:00:00 (Sun)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61971192000, #      utc_end 1964-10-15 04:00:00 (Thu)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61971177600, #    local_end 1964-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61971192000, #    utc_start 1964-10-15 04:00:00 (Thu)
  61983025200, #      utc_end 1965-03-01 03:00:00 (Mon)
  61971181200, #  local_start 1964-10-15 01:00:00 (Thu)
  61983014400, #    local_end 1965-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61983025200, #    utc_start 1965-03-01 03:00:00 (Mon)
  62002728000, #      utc_end 1965-10-15 04:00:00 (Fri)
  61983010800, #  local_start 1965-02-28 23:00:00 (Sun)
  62002713600, #    local_end 1965-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  62002728000, #    utc_start 1965-10-15 04:00:00 (Fri)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62002717200, #  local_start 1965-10-15 01:00:00 (Fri)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62034264000, #      utc_end 1966-10-15 04:00:00 (Sat)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62034249600, #    local_end 1966-10-15 00:00:00 (Sat)
  -14400,
  0,
  'ART',
      ],
      [
  62034264000, #    utc_start 1966-10-15 04:00:00 (Sat)
  62048862000, #      utc_end 1967-04-02 03:00:00 (Sun)
  62034253200, #  local_start 1966-10-15 01:00:00 (Sat)
  62048851200, #    local_end 1967-04-02 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62048862000, #    utc_start 1967-04-02 03:00:00 (Sun)
  62064590400, #      utc_end 1967-10-01 04:00:00 (Sun)
  62048847600, #  local_start 1967-04-01 23:00:00 (Sat)
  62064576000, #    local_end 1967-10-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62064590400, #    utc_start 1967-10-01 04:00:00 (Sun)
  62080916400, #      utc_end 1968-04-07 03:00:00 (Sun)
  62064579600, #  local_start 1967-10-01 01:00:00 (Sun)
  62080905600, #    local_end 1968-04-07 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62080916400, #    utc_start 1968-04-07 03:00:00 (Sun)
  62096644800, #      utc_end 1968-10-06 04:00:00 (Sun)
  62080902000, #  local_start 1968-04-06 23:00:00 (Sat)
  62096630400, #    local_end 1968-10-06 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62096644800, #    utc_start 1968-10-06 04:00:00 (Sun)
  62112366000, #      utc_end 1969-04-06 03:00:00 (Sun)
  62096634000, #  local_start 1968-10-06 01:00:00 (Sun)
  62112355200, #    local_end 1969-04-06 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62112366000, #    utc_start 1969-04-06 03:00:00 (Sun)
  62128094400, #      utc_end 1969-10-05 04:00:00 (Sun)
  62112351600, #  local_start 1969-04-05 23:00:00 (Sat)
  62128080000, #    local_end 1969-10-05 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62128094400, #    utc_start 1969-10-05 04:00:00 (Sun)
  62263825200, #      utc_end 1974-01-23 03:00:00 (Wed)
  62128083600, #  local_start 1969-10-05 01:00:00 (Sun)
  62263814400, #    local_end 1974-01-23 00:00:00 (Wed)
  -10800,
  0,
  'ART',
      ],
      [
  62263825200, #    utc_start 1974-01-23 03:00:00 (Wed)
  62272288800, #      utc_end 1974-05-01 02:00:00 (Wed)
  62263818000, #  local_start 1974-01-23 01:00:00 (Wed)
  62272281600, #    local_end 1974-05-01 00:00:00 (Wed)
  -7200,
  1,
  'ARST',
      ],
      [
  62272288800, #    utc_start 1974-05-01 02:00:00 (Wed)
  62732631600, #      utc_end 1988-12-01 03:00:00 (Thu)
  62272278000, #  local_start 1974-04-30 23:00:00 (Tue)
  62732620800, #    local_end 1988-12-01 00:00:00 (Thu)
  -10800,
  0,
  'ART',
      ],
      [
  62732631600, #    utc_start 1988-12-01 03:00:00 (Thu)
  62740749600, #      utc_end 1989-03-05 02:00:00 (Sun)
  62732624400, #  local_start 1988-12-01 01:00:00 (Thu)
  62740742400, #    local_end 1989-03-05 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62740749600, #    utc_start 1989-03-05 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62740738800, #  local_start 1989-03-04 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62772199200, #      utc_end 1990-03-04 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62772192000, #    local_end 1990-03-04 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62772199200, #    utc_start 1990-03-04 02:00:00 (Sun)
  62792161200, #      utc_end 1990-10-21 03:00:00 (Sun)
  62772188400, #  local_start 1990-03-03 23:00:00 (Sat)
  62792150400, #    local_end 1990-10-21 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62792161200, #    utc_start 1990-10-21 03:00:00 (Sun)
  62803648800, #      utc_end 1991-03-03 02:00:00 (Sun)
  62792154000, #  local_start 1990-10-21 01:00:00 (Sun)
  62803641600, #    local_end 1991-03-03 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62803648800, #    utc_start 1991-03-03 02:00:00 (Sun)
  62823614400, #      utc_end 1991-10-20 04:00:00 (Sun)
  62803634400, #  local_start 1991-03-02 22:00:00 (Sat)
  62823600000, #    local_end 1991-10-20 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  62823614400, #    utc_start 1991-10-20 04:00:00 (Sun)
  62835098400, #      utc_end 1992-03-01 02:00:00 (Sun)
  62823607200, #  local_start 1991-10-20 02:00:00 (Sun)
  62835091200, #    local_end 1992-03-01 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62835098400, #    utc_start 1992-03-01 02:00:00 (Sun)
  62855060400, #      utc_end 1992-10-18 03:00:00 (Sun)
  62835087600, #  local_start 1992-02-29 23:00:00 (Sat)
  62855049600, #    local_end 1992-10-18 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62855060400, #    utc_start 1992-10-18 03:00:00 (Sun)
  62867152800, #      utc_end 1993-03-07 02:00:00 (Sun)
  62855053200, #  local_start 1992-10-18 01:00:00 (Sun)
  62867145600, #    local_end 1993-03-07 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62867152800, #    utc_start 1993-03-07 02:00:00 (Sun)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  62867142000, #  local_start 1993-03-06 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087735600, #      utc_end 2000-03-03 03:00:00 (Fri)
  63074592000, #  local_start 1999-10-03 00:00:00 (Sun)
  63087724800, #    local_end 2000-03-03 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  63087735600, #    utc_start 2000-03-03 03:00:00 (Fri)
  63334666800, #      utc_end 2007-12-30 03:00:00 (Sun)
  63087724800, #  local_start 2000-03-03 00:00:00 (Fri)
  63334656000, #    local_end 2007-12-30 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63334666800, #    utc_start 2007-12-30 03:00:00 (Sun)
  63341316000, #      utc_end 2008-03-16 02:00:00 (Sun)
  63334659600, #  local_start 2007-12-30 01:00:00 (Sun)
  63341308800, #    local_end 2008-03-16 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  63341316000, #    utc_start 2008-03-16 02:00:00 (Sun)
  63360068400, #      utc_end 2008-10-19 03:00:00 (Sun)
  63341305200, #  local_start 2008-03-15 23:00:00 (Sat)
  63360057600, #    local_end 2008-10-19 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63360068400, #    utc_start 2008-10-19 03:00:00 (Sun)
  63372765600, #      utc_end 2009-03-15 02:00:00 (Sun)
  63360061200, #  local_start 2008-10-19 01:00:00 (Sun)
  63372758400, #    local_end 2009-03-15 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  63372765600, #    utc_start 2009-03-15 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63372754800, #  local_start 2009-03-14 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'ART',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {29}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ARGENTINA_CORDOBA

    $main::fatpacked{"DateTime/TimeZone/America/Argentina/Jujuy.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ARGENTINA_JUJUY';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Argentina::Jujuy;
  $DateTime::TimeZone::America::Argentina::Jujuy::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Argentina::Jujuy::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59763586872, #      utc_end 1894-10-31 04:21:12 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59763571200, #    local_end 1894-10-31 00:00:00 (Wed)
  -15672,
  0,
  'LMT',
      ],
      [
  59763586872, #    utc_start 1894-10-31 04:21:12 (Wed)
  60568229808, #      utc_end 1920-05-01 04:16:48 (Sat)
  59763571464, #  local_start 1894-10-31 00:04:24 (Wed)
  60568214400, #    local_end 1920-05-01 00:00:00 (Sat)
  -15408,
  0,
  'CMT',
      ],
      [
  60568229808, #    utc_start 1920-05-01 04:16:48 (Sat)
  60902251200, #      utc_end 1930-12-01 04:00:00 (Mon)
  60568215408, #  local_start 1920-05-01 00:16:48 (Sat)
  60902236800, #    local_end 1930-12-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  60902251200, #    utc_start 1930-12-01 04:00:00 (Mon)
  60912702000, #      utc_end 1931-04-01 03:00:00 (Wed)
  60902240400, #  local_start 1930-12-01 01:00:00 (Mon)
  60912691200, #    local_end 1931-04-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60912702000, #    utc_start 1931-04-01 03:00:00 (Wed)
  60929726400, #      utc_end 1931-10-15 04:00:00 (Thu)
  60912687600, #  local_start 1931-03-31 23:00:00 (Tue)
  60929712000, #    local_end 1931-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  60929726400, #    utc_start 1931-10-15 04:00:00 (Thu)
  60941646000, #      utc_end 1932-03-01 03:00:00 (Tue)
  60929715600, #  local_start 1931-10-15 01:00:00 (Thu)
  60941635200, #    local_end 1932-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  60941646000, #    utc_start 1932-03-01 03:00:00 (Tue)
  60962817600, #      utc_end 1932-11-01 04:00:00 (Tue)
  60941631600, #  local_start 1932-02-29 23:00:00 (Mon)
  60962803200, #    local_end 1932-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  60962817600, #    utc_start 1932-11-01 04:00:00 (Tue)
  60973182000, #      utc_end 1933-03-01 03:00:00 (Wed)
  60962806800, #  local_start 1932-11-01 01:00:00 (Tue)
  60973171200, #    local_end 1933-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60973182000, #    utc_start 1933-03-01 03:00:00 (Wed)
  60994353600, #      utc_end 1933-11-01 04:00:00 (Wed)
  60973167600, #  local_start 1933-02-28 23:00:00 (Tue)
  60994339200, #    local_end 1933-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  60994353600, #    utc_start 1933-11-01 04:00:00 (Wed)
  61004718000, #      utc_end 1934-03-01 03:00:00 (Thu)
  60994342800, #  local_start 1933-11-01 01:00:00 (Wed)
  61004707200, #    local_end 1934-03-01 00:00:00 (Thu)
  -10800,
  1,
  'ARST',
      ],
      [
  61004718000, #    utc_start 1934-03-01 03:00:00 (Thu)
  61025889600, #      utc_end 1934-11-01 04:00:00 (Thu)
  61004703600, #  local_start 1934-02-28 23:00:00 (Wed)
  61025875200, #    local_end 1934-11-01 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61025889600, #    utc_start 1934-11-01 04:00:00 (Thu)
  61036254000, #      utc_end 1935-03-01 03:00:00 (Fri)
  61025878800, #  local_start 1934-11-01 01:00:00 (Thu)
  61036243200, #    local_end 1935-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61036254000, #    utc_start 1935-03-01 03:00:00 (Fri)
  61057425600, #      utc_end 1935-11-01 04:00:00 (Fri)
  61036239600, #  local_start 1935-02-28 23:00:00 (Thu)
  61057411200, #    local_end 1935-11-01 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61057425600, #    utc_start 1935-11-01 04:00:00 (Fri)
  61067876400, #      utc_end 1936-03-01 03:00:00 (Sun)
  61057414800, #  local_start 1935-11-01 01:00:00 (Fri)
  61067865600, #    local_end 1936-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61067876400, #    utc_start 1936-03-01 03:00:00 (Sun)
  61089048000, #      utc_end 1936-11-01 04:00:00 (Sun)
  61067862000, #  local_start 1936-02-29 23:00:00 (Sat)
  61089033600, #    local_end 1936-11-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61089048000, #    utc_start 1936-11-01 04:00:00 (Sun)
  61099412400, #      utc_end 1937-03-01 03:00:00 (Mon)
  61089037200, #  local_start 1936-11-01 01:00:00 (Sun)
  61099401600, #    local_end 1937-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61099412400, #    utc_start 1937-03-01 03:00:00 (Mon)
  61120584000, #      utc_end 1937-11-01 04:00:00 (Mon)
  61099398000, #  local_start 1937-02-28 23:00:00 (Sun)
  61120569600, #    local_end 1937-11-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61120584000, #    utc_start 1937-11-01 04:00:00 (Mon)
  61130948400, #      utc_end 1938-03-01 03:00:00 (Tue)
  61120573200, #  local_start 1937-11-01 01:00:00 (Mon)
  61130937600, #    local_end 1938-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61130948400, #    utc_start 1938-03-01 03:00:00 (Tue)
  61152120000, #      utc_end 1938-11-01 04:00:00 (Tue)
  61130934000, #  local_start 1938-02-28 23:00:00 (Mon)
  61152105600, #    local_end 1938-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61152120000, #    utc_start 1938-11-01 04:00:00 (Tue)
  61162484400, #      utc_end 1939-03-01 03:00:00 (Wed)
  61152109200, #  local_start 1938-11-01 01:00:00 (Tue)
  61162473600, #    local_end 1939-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  61162484400, #    utc_start 1939-03-01 03:00:00 (Wed)
  61183656000, #      utc_end 1939-11-01 04:00:00 (Wed)
  61162470000, #  local_start 1939-02-28 23:00:00 (Tue)
  61183641600, #    local_end 1939-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61183656000, #    utc_start 1939-11-01 04:00:00 (Wed)
  61194106800, #      utc_end 1940-03-01 03:00:00 (Fri)
  61183645200, #  local_start 1939-11-01 01:00:00 (Wed)
  61194096000, #    local_end 1940-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61194106800, #    utc_start 1940-03-01 03:00:00 (Fri)
  61204651200, #      utc_end 1940-07-01 04:00:00 (Mon)
  61194092400, #  local_start 1940-02-29 23:00:00 (Thu)
  61204636800, #    local_end 1940-07-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61204651200, #    utc_start 1940-07-01 04:00:00 (Mon)
  61234801200, #      utc_end 1941-06-15 03:00:00 (Sun)
  61204640400, #  local_start 1940-07-01 01:00:00 (Mon)
  61234790400, #    local_end 1941-06-15 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61234801200, #    utc_start 1941-06-15 03:00:00 (Sun)
  61245345600, #      utc_end 1941-10-15 04:00:00 (Wed)
  61234786800, #  local_start 1941-06-14 23:00:00 (Sat)
  61245331200, #    local_end 1941-10-15 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61245345600, #    utc_start 1941-10-15 04:00:00 (Wed)
  61301934000, #      utc_end 1943-08-01 03:00:00 (Sun)
  61245334800, #  local_start 1941-10-15 01:00:00 (Wed)
  61301923200, #    local_end 1943-08-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61301934000, #    utc_start 1943-08-01 03:00:00 (Sun)
  61308417600, #      utc_end 1943-10-15 04:00:00 (Fri)
  61301919600, #  local_start 1943-07-31 23:00:00 (Sat)
  61308403200, #    local_end 1943-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61308417600, #    utc_start 1943-10-15 04:00:00 (Fri)
  61383409200, #      utc_end 1946-03-01 03:00:00 (Fri)
  61308406800, #  local_start 1943-10-15 01:00:00 (Fri)
  61383398400, #    local_end 1946-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61383409200, #    utc_start 1946-03-01 03:00:00 (Fri)
  61401902400, #      utc_end 1946-10-01 04:00:00 (Tue)
  61383394800, #  local_start 1946-02-28 23:00:00 (Thu)
  61401888000, #    local_end 1946-10-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61401902400, #    utc_start 1946-10-01 04:00:00 (Tue)
  61938356400, #      utc_end 1963-10-01 03:00:00 (Tue)
  61401891600, #  local_start 1946-10-01 01:00:00 (Tue)
  61938345600, #    local_end 1963-10-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61938356400, #    utc_start 1963-10-01 03:00:00 (Tue)
  61944840000, #      utc_end 1963-12-15 04:00:00 (Sun)
  61938342000, #  local_start 1963-09-30 23:00:00 (Mon)
  61944825600, #    local_end 1963-12-15 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61944840000, #    utc_start 1963-12-15 04:00:00 (Sun)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944829200, #  local_start 1963-12-15 01:00:00 (Sun)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61971192000, #      utc_end 1964-10-15 04:00:00 (Thu)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61971177600, #    local_end 1964-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61971192000, #    utc_start 1964-10-15 04:00:00 (Thu)
  61983025200, #      utc_end 1965-03-01 03:00:00 (Mon)
  61971181200, #  local_start 1964-10-15 01:00:00 (Thu)
  61983014400, #    local_end 1965-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61983025200, #    utc_start 1965-03-01 03:00:00 (Mon)
  62002728000, #      utc_end 1965-10-15 04:00:00 (Fri)
  61983010800, #  local_start 1965-02-28 23:00:00 (Sun)
  62002713600, #    local_end 1965-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  62002728000, #    utc_start 1965-10-15 04:00:00 (Fri)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62002717200, #  local_start 1965-10-15 01:00:00 (Fri)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62034264000, #      utc_end 1966-10-15 04:00:00 (Sat)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62034249600, #    local_end 1966-10-15 00:00:00 (Sat)
  -14400,
  0,
  'ART',
      ],
      [
  62034264000, #    utc_start 1966-10-15 04:00:00 (Sat)
  62048862000, #      utc_end 1967-04-02 03:00:00 (Sun)
  62034253200, #  local_start 1966-10-15 01:00:00 (Sat)
  62048851200, #    local_end 1967-04-02 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62048862000, #    utc_start 1967-04-02 03:00:00 (Sun)
  62064590400, #      utc_end 1967-10-01 04:00:00 (Sun)
  62048847600, #  local_start 1967-04-01 23:00:00 (Sat)
  62064576000, #    local_end 1967-10-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62064590400, #    utc_start 1967-10-01 04:00:00 (Sun)
  62080916400, #      utc_end 1968-04-07 03:00:00 (Sun)
  62064579600, #  local_start 1967-10-01 01:00:00 (Sun)
  62080905600, #    local_end 1968-04-07 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62080916400, #    utc_start 1968-04-07 03:00:00 (Sun)
  62096644800, #      utc_end 1968-10-06 04:00:00 (Sun)
  62080902000, #  local_start 1968-04-06 23:00:00 (Sat)
  62096630400, #    local_end 1968-10-06 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62096644800, #    utc_start 1968-10-06 04:00:00 (Sun)
  62112366000, #      utc_end 1969-04-06 03:00:00 (Sun)
  62096634000, #  local_start 1968-10-06 01:00:00 (Sun)
  62112355200, #    local_end 1969-04-06 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62112366000, #    utc_start 1969-04-06 03:00:00 (Sun)
  62128094400, #      utc_end 1969-10-05 04:00:00 (Sun)
  62112351600, #  local_start 1969-04-05 23:00:00 (Sat)
  62128080000, #    local_end 1969-10-05 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62128094400, #    utc_start 1969-10-05 04:00:00 (Sun)
  62263825200, #      utc_end 1974-01-23 03:00:00 (Wed)
  62128083600, #  local_start 1969-10-05 01:00:00 (Sun)
  62263814400, #    local_end 1974-01-23 00:00:00 (Wed)
  -10800,
  0,
  'ART',
      ],
      [
  62263825200, #    utc_start 1974-01-23 03:00:00 (Wed)
  62272288800, #      utc_end 1974-05-01 02:00:00 (Wed)
  62263818000, #  local_start 1974-01-23 01:00:00 (Wed)
  62272281600, #    local_end 1974-05-01 00:00:00 (Wed)
  -7200,
  1,
  'ARST',
      ],
      [
  62272288800, #    utc_start 1974-05-01 02:00:00 (Wed)
  62732631600, #      utc_end 1988-12-01 03:00:00 (Thu)
  62272278000, #  local_start 1974-04-30 23:00:00 (Tue)
  62732620800, #    local_end 1988-12-01 00:00:00 (Thu)
  -10800,
  0,
  'ART',
      ],
      [
  62732631600, #    utc_start 1988-12-01 03:00:00 (Thu)
  62740749600, #      utc_end 1989-03-05 02:00:00 (Sun)
  62732624400, #  local_start 1988-12-01 01:00:00 (Thu)
  62740742400, #    local_end 1989-03-05 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62740749600, #    utc_start 1989-03-05 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62740738800, #  local_start 1989-03-04 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62772199200, #      utc_end 1990-03-04 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62772192000, #    local_end 1990-03-04 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62772199200, #    utc_start 1990-03-04 02:00:00 (Sun)
  62792769600, #      utc_end 1990-10-28 04:00:00 (Sun)
  62772184800, #  local_start 1990-03-03 22:00:00 (Sat)
  62792755200, #    local_end 1990-10-28 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  62792769600, #    utc_start 1990-10-28 04:00:00 (Sun)
  62804862000, #      utc_end 1991-03-17 03:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62804851200, #    local_end 1991-03-17 00:00:00 (Sun)
  -10800,
  1,
  'WARST',
      ],
      [
  62804862000, #    utc_start 1991-03-17 03:00:00 (Sun)
  62822404800, #      utc_end 1991-10-06 04:00:00 (Sun)
  62804847600, #  local_start 1991-03-16 23:00:00 (Sat)
  62822390400, #    local_end 1991-10-06 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  62822404800, #    utc_start 1991-10-06 04:00:00 (Sun)
  62829914400, #      utc_end 1992-01-01 02:00:00 (Wed)
  62822397600, #  local_start 1991-10-06 02:00:00 (Sun)
  62829907200, #    local_end 1992-01-01 00:00:00 (Wed)
  -7200,
  1,
  'ARST',
      ],
      [
  62829914400, #    utc_start 1992-01-01 02:00:00 (Wed)
  62835098400, #      utc_end 1992-03-01 02:00:00 (Sun)
  62829907200, #  local_start 1992-01-01 00:00:00 (Wed)
  62835091200, #    local_end 1992-03-01 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62835098400, #    utc_start 1992-03-01 02:00:00 (Sun)
  62855060400, #      utc_end 1992-10-18 03:00:00 (Sun)
  62835087600, #  local_start 1992-02-29 23:00:00 (Sat)
  62855049600, #    local_end 1992-10-18 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62855060400, #    utc_start 1992-10-18 03:00:00 (Sun)
  62867152800, #      utc_end 1993-03-07 02:00:00 (Sun)
  62855053200, #  local_start 1992-10-18 01:00:00 (Sun)
  62867145600, #    local_end 1993-03-07 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62867152800, #    utc_start 1993-03-07 02:00:00 (Sun)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  62867142000, #  local_start 1993-03-06 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087735600, #      utc_end 2000-03-03 03:00:00 (Fri)
  63074592000, #  local_start 1999-10-03 00:00:00 (Sun)
  63087724800, #    local_end 2000-03-03 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  63087735600, #    utc_start 2000-03-03 03:00:00 (Fri)
  63334666800, #      utc_end 2007-12-30 03:00:00 (Sun)
  63087724800, #  local_start 2000-03-03 00:00:00 (Fri)
  63334656000, #    local_end 2007-12-30 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63334666800, #    utc_start 2007-12-30 03:00:00 (Sun)
  63341316000, #      utc_end 2008-03-16 02:00:00 (Sun)
  63334659600, #  local_start 2007-12-30 01:00:00 (Sun)
  63341308800, #    local_end 2008-03-16 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  63341316000, #    utc_start 2008-03-16 02:00:00 (Sun)
  63359982000, #      utc_end 2008-10-18 03:00:00 (Sat)
  63341305200, #  local_start 2008-03-15 23:00:00 (Sat)
  63359971200, #    local_end 2008-10-18 00:00:00 (Sat)
  -10800,
  0,
  'ART',
      ],
      [
  63359982000, #    utc_start 2008-10-18 03:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63359971200, #  local_start 2008-10-18 00:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'ART',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {29}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ARGENTINA_JUJUY

    $main::fatpacked{"DateTime/TimeZone/America/Argentina/La_Rioja.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ARGENTINA_LA_RIOJA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Argentina::La_Rioja;
  $DateTime::TimeZone::America::Argentina::La_Rioja::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Argentina::La_Rioja::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59763587244, #      utc_end 1894-10-31 04:27:24 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59763571200, #    local_end 1894-10-31 00:00:00 (Wed)
  -16044,
  0,
  'LMT',
      ],
      [
  59763587244, #    utc_start 1894-10-31 04:27:24 (Wed)
  60568229808, #      utc_end 1920-05-01 04:16:48 (Sat)
  59763571836, #  local_start 1894-10-31 00:10:36 (Wed)
  60568214400, #    local_end 1920-05-01 00:00:00 (Sat)
  -15408,
  0,
  'CMT',
      ],
      [
  60568229808, #    utc_start 1920-05-01 04:16:48 (Sat)
  60902251200, #      utc_end 1930-12-01 04:00:00 (Mon)
  60568215408, #  local_start 1920-05-01 00:16:48 (Sat)
  60902236800, #    local_end 1930-12-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  60902251200, #    utc_start 1930-12-01 04:00:00 (Mon)
  60912702000, #      utc_end 1931-04-01 03:00:00 (Wed)
  60902240400, #  local_start 1930-12-01 01:00:00 (Mon)
  60912691200, #    local_end 1931-04-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60912702000, #    utc_start 1931-04-01 03:00:00 (Wed)
  60929726400, #      utc_end 1931-10-15 04:00:00 (Thu)
  60912687600, #  local_start 1931-03-31 23:00:00 (Tue)
  60929712000, #    local_end 1931-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  60929726400, #    utc_start 1931-10-15 04:00:00 (Thu)
  60941646000, #      utc_end 1932-03-01 03:00:00 (Tue)
  60929715600, #  local_start 1931-10-15 01:00:00 (Thu)
  60941635200, #    local_end 1932-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  60941646000, #    utc_start 1932-03-01 03:00:00 (Tue)
  60962817600, #      utc_end 1932-11-01 04:00:00 (Tue)
  60941631600, #  local_start 1932-02-29 23:00:00 (Mon)
  60962803200, #    local_end 1932-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  60962817600, #    utc_start 1932-11-01 04:00:00 (Tue)
  60973182000, #      utc_end 1933-03-01 03:00:00 (Wed)
  60962806800, #  local_start 1932-11-01 01:00:00 (Tue)
  60973171200, #    local_end 1933-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60973182000, #    utc_start 1933-03-01 03:00:00 (Wed)
  60994353600, #      utc_end 1933-11-01 04:00:00 (Wed)
  60973167600, #  local_start 1933-02-28 23:00:00 (Tue)
  60994339200, #    local_end 1933-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  60994353600, #    utc_start 1933-11-01 04:00:00 (Wed)
  61004718000, #      utc_end 1934-03-01 03:00:00 (Thu)
  60994342800, #  local_start 1933-11-01 01:00:00 (Wed)
  61004707200, #    local_end 1934-03-01 00:00:00 (Thu)
  -10800,
  1,
  'ARST',
      ],
      [
  61004718000, #    utc_start 1934-03-01 03:00:00 (Thu)
  61025889600, #      utc_end 1934-11-01 04:00:00 (Thu)
  61004703600, #  local_start 1934-02-28 23:00:00 (Wed)
  61025875200, #    local_end 1934-11-01 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61025889600, #    utc_start 1934-11-01 04:00:00 (Thu)
  61036254000, #      utc_end 1935-03-01 03:00:00 (Fri)
  61025878800, #  local_start 1934-11-01 01:00:00 (Thu)
  61036243200, #    local_end 1935-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61036254000, #    utc_start 1935-03-01 03:00:00 (Fri)
  61057425600, #      utc_end 1935-11-01 04:00:00 (Fri)
  61036239600, #  local_start 1935-02-28 23:00:00 (Thu)
  61057411200, #    local_end 1935-11-01 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61057425600, #    utc_start 1935-11-01 04:00:00 (Fri)
  61067876400, #      utc_end 1936-03-01 03:00:00 (Sun)
  61057414800, #  local_start 1935-11-01 01:00:00 (Fri)
  61067865600, #    local_end 1936-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61067876400, #    utc_start 1936-03-01 03:00:00 (Sun)
  61089048000, #      utc_end 1936-11-01 04:00:00 (Sun)
  61067862000, #  local_start 1936-02-29 23:00:00 (Sat)
  61089033600, #    local_end 1936-11-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61089048000, #    utc_start 1936-11-01 04:00:00 (Sun)
  61099412400, #      utc_end 1937-03-01 03:00:00 (Mon)
  61089037200, #  local_start 1936-11-01 01:00:00 (Sun)
  61099401600, #    local_end 1937-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61099412400, #    utc_start 1937-03-01 03:00:00 (Mon)
  61120584000, #      utc_end 1937-11-01 04:00:00 (Mon)
  61099398000, #  local_start 1937-02-28 23:00:00 (Sun)
  61120569600, #    local_end 1937-11-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61120584000, #    utc_start 1937-11-01 04:00:00 (Mon)
  61130948400, #      utc_end 1938-03-01 03:00:00 (Tue)
  61120573200, #  local_start 1937-11-01 01:00:00 (Mon)
  61130937600, #    local_end 1938-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61130948400, #    utc_start 1938-03-01 03:00:00 (Tue)
  61152120000, #      utc_end 1938-11-01 04:00:00 (Tue)
  61130934000, #  local_start 1938-02-28 23:00:00 (Mon)
  61152105600, #    local_end 1938-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61152120000, #    utc_start 1938-11-01 04:00:00 (Tue)
  61162484400, #      utc_end 1939-03-01 03:00:00 (Wed)
  61152109200, #  local_start 1938-11-01 01:00:00 (Tue)
  61162473600, #    local_end 1939-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  61162484400, #    utc_start 1939-03-01 03:00:00 (Wed)
  61183656000, #      utc_end 1939-11-01 04:00:00 (Wed)
  61162470000, #  local_start 1939-02-28 23:00:00 (Tue)
  61183641600, #    local_end 1939-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61183656000, #    utc_start 1939-11-01 04:00:00 (Wed)
  61194106800, #      utc_end 1940-03-01 03:00:00 (Fri)
  61183645200, #  local_start 1939-11-01 01:00:00 (Wed)
  61194096000, #    local_end 1940-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61194106800, #    utc_start 1940-03-01 03:00:00 (Fri)
  61204651200, #      utc_end 1940-07-01 04:00:00 (Mon)
  61194092400, #  local_start 1940-02-29 23:00:00 (Thu)
  61204636800, #    local_end 1940-07-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61204651200, #    utc_start 1940-07-01 04:00:00 (Mon)
  61234801200, #      utc_end 1941-06-15 03:00:00 (Sun)
  61204640400, #  local_start 1940-07-01 01:00:00 (Mon)
  61234790400, #    local_end 1941-06-15 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61234801200, #    utc_start 1941-06-15 03:00:00 (Sun)
  61245345600, #      utc_end 1941-10-15 04:00:00 (Wed)
  61234786800, #  local_start 1941-06-14 23:00:00 (Sat)
  61245331200, #    local_end 1941-10-15 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61245345600, #    utc_start 1941-10-15 04:00:00 (Wed)
  61301934000, #      utc_end 1943-08-01 03:00:00 (Sun)
  61245334800, #  local_start 1941-10-15 01:00:00 (Wed)
  61301923200, #    local_end 1943-08-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61301934000, #    utc_start 1943-08-01 03:00:00 (Sun)
  61308417600, #      utc_end 1943-10-15 04:00:00 (Fri)
  61301919600, #  local_start 1943-07-31 23:00:00 (Sat)
  61308403200, #    local_end 1943-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61308417600, #    utc_start 1943-10-15 04:00:00 (Fri)
  61383409200, #      utc_end 1946-03-01 03:00:00 (Fri)
  61308406800, #  local_start 1943-10-15 01:00:00 (Fri)
  61383398400, #    local_end 1946-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61383409200, #    utc_start 1946-03-01 03:00:00 (Fri)
  61401902400, #      utc_end 1946-10-01 04:00:00 (Tue)
  61383394800, #  local_start 1946-02-28 23:00:00 (Thu)
  61401888000, #    local_end 1946-10-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61401902400, #    utc_start 1946-10-01 04:00:00 (Tue)
  61938356400, #      utc_end 1963-10-01 03:00:00 (Tue)
  61401891600, #  local_start 1946-10-01 01:00:00 (Tue)
  61938345600, #    local_end 1963-10-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61938356400, #    utc_start 1963-10-01 03:00:00 (Tue)
  61944840000, #      utc_end 1963-12-15 04:00:00 (Sun)
  61938342000, #  local_start 1963-09-30 23:00:00 (Mon)
  61944825600, #    local_end 1963-12-15 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61944840000, #    utc_start 1963-12-15 04:00:00 (Sun)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944829200, #  local_start 1963-12-15 01:00:00 (Sun)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61971192000, #      utc_end 1964-10-15 04:00:00 (Thu)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61971177600, #    local_end 1964-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61971192000, #    utc_start 1964-10-15 04:00:00 (Thu)
  61983025200, #      utc_end 1965-03-01 03:00:00 (Mon)
  61971181200, #  local_start 1964-10-15 01:00:00 (Thu)
  61983014400, #    local_end 1965-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61983025200, #    utc_start 1965-03-01 03:00:00 (Mon)
  62002728000, #      utc_end 1965-10-15 04:00:00 (Fri)
  61983010800, #  local_start 1965-02-28 23:00:00 (Sun)
  62002713600, #    local_end 1965-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  62002728000, #    utc_start 1965-10-15 04:00:00 (Fri)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62002717200, #  local_start 1965-10-15 01:00:00 (Fri)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62034264000, #      utc_end 1966-10-15 04:00:00 (Sat)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62034249600, #    local_end 1966-10-15 00:00:00 (Sat)
  -14400,
  0,
  'ART',
      ],
      [
  62034264000, #    utc_start 1966-10-15 04:00:00 (Sat)
  62048862000, #      utc_end 1967-04-02 03:00:00 (Sun)
  62034253200, #  local_start 1966-10-15 01:00:00 (Sat)
  62048851200, #    local_end 1967-04-02 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62048862000, #    utc_start 1967-04-02 03:00:00 (Sun)
  62064590400, #      utc_end 1967-10-01 04:00:00 (Sun)
  62048847600, #  local_start 1967-04-01 23:00:00 (Sat)
  62064576000, #    local_end 1967-10-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62064590400, #    utc_start 1967-10-01 04:00:00 (Sun)
  62080916400, #      utc_end 1968-04-07 03:00:00 (Sun)
  62064579600, #  local_start 1967-10-01 01:00:00 (Sun)
  62080905600, #    local_end 1968-04-07 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62080916400, #    utc_start 1968-04-07 03:00:00 (Sun)
  62096644800, #      utc_end 1968-10-06 04:00:00 (Sun)
  62080902000, #  local_start 1968-04-06 23:00:00 (Sat)
  62096630400, #    local_end 1968-10-06 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62096644800, #    utc_start 1968-10-06 04:00:00 (Sun)
  62112366000, #      utc_end 1969-04-06 03:00:00 (Sun)
  62096634000, #  local_start 1968-10-06 01:00:00 (Sun)
  62112355200, #    local_end 1969-04-06 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62112366000, #    utc_start 1969-04-06 03:00:00 (Sun)
  62128094400, #      utc_end 1969-10-05 04:00:00 (Sun)
  62112351600, #  local_start 1969-04-05 23:00:00 (Sat)
  62128080000, #    local_end 1969-10-05 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62128094400, #    utc_start 1969-10-05 04:00:00 (Sun)
  62263825200, #      utc_end 1974-01-23 03:00:00 (Wed)
  62128083600, #  local_start 1969-10-05 01:00:00 (Sun)
  62263814400, #    local_end 1974-01-23 00:00:00 (Wed)
  -10800,
  0,
  'ART',
      ],
      [
  62263825200, #    utc_start 1974-01-23 03:00:00 (Wed)
  62272288800, #      utc_end 1974-05-01 02:00:00 (Wed)
  62263818000, #  local_start 1974-01-23 01:00:00 (Wed)
  62272281600, #    local_end 1974-05-01 00:00:00 (Wed)
  -7200,
  1,
  'ARST',
      ],
      [
  62272288800, #    utc_start 1974-05-01 02:00:00 (Wed)
  62732631600, #      utc_end 1988-12-01 03:00:00 (Thu)
  62272278000, #  local_start 1974-04-30 23:00:00 (Tue)
  62732620800, #    local_end 1988-12-01 00:00:00 (Thu)
  -10800,
  0,
  'ART',
      ],
      [
  62732631600, #    utc_start 1988-12-01 03:00:00 (Thu)
  62740749600, #      utc_end 1989-03-05 02:00:00 (Sun)
  62732624400, #  local_start 1988-12-01 01:00:00 (Thu)
  62740742400, #    local_end 1989-03-05 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62740749600, #    utc_start 1989-03-05 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62740738800, #  local_start 1989-03-04 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62772199200, #      utc_end 1990-03-04 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62772192000, #    local_end 1990-03-04 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62772199200, #    utc_start 1990-03-04 02:00:00 (Sun)
  62792161200, #      utc_end 1990-10-21 03:00:00 (Sun)
  62772188400, #  local_start 1990-03-03 23:00:00 (Sat)
  62792150400, #    local_end 1990-10-21 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62792161200, #    utc_start 1990-10-21 03:00:00 (Sun)
  62803476000, #      utc_end 1991-03-01 02:00:00 (Fri)
  62792154000, #  local_start 1990-10-21 01:00:00 (Sun)
  62803468800, #    local_end 1991-03-01 00:00:00 (Fri)
  -7200,
  1,
  'ARST',
      ],
      [
  62803476000, #    utc_start 1991-03-01 02:00:00 (Fri)
  62809272000, #      utc_end 1991-05-07 04:00:00 (Tue)
  62803461600, #  local_start 1991-02-28 22:00:00 (Thu)
  62809257600, #    local_end 1991-05-07 00:00:00 (Tue)
  -14400,
  0,
  'WART',
      ],
      [
  62809272000, #    utc_start 1991-05-07 04:00:00 (Tue)
  62823610800, #      utc_end 1991-10-20 03:00:00 (Sun)
  62809261200, #  local_start 1991-05-07 01:00:00 (Tue)
  62823600000, #    local_end 1991-10-20 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62823610800, #    utc_start 1991-10-20 03:00:00 (Sun)
  62835098400, #      utc_end 1992-03-01 02:00:00 (Sun)
  62823603600, #  local_start 1991-10-20 01:00:00 (Sun)
  62835091200, #    local_end 1992-03-01 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62835098400, #    utc_start 1992-03-01 02:00:00 (Sun)
  62855060400, #      utc_end 1992-10-18 03:00:00 (Sun)
  62835087600, #  local_start 1992-02-29 23:00:00 (Sat)
  62855049600, #    local_end 1992-10-18 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62855060400, #    utc_start 1992-10-18 03:00:00 (Sun)
  62867152800, #      utc_end 1993-03-07 02:00:00 (Sun)
  62855053200, #  local_start 1992-10-18 01:00:00 (Sun)
  62867145600, #    local_end 1993-03-07 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62867152800, #    utc_start 1993-03-07 02:00:00 (Sun)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  62867142000, #  local_start 1993-03-06 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087735600, #      utc_end 2000-03-03 03:00:00 (Fri)
  63074592000, #  local_start 1999-10-03 00:00:00 (Sun)
  63087724800, #    local_end 2000-03-03 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  63087735600, #    utc_start 2000-03-03 03:00:00 (Fri)
  63221742000, #      utc_end 2004-06-01 03:00:00 (Tue)
  63087724800, #  local_start 2000-03-03 00:00:00 (Fri)
  63221731200, #    local_end 2004-06-01 00:00:00 (Tue)
  -10800,
  0,
  'ART',
      ],
      [
  63221742000, #    utc_start 2004-06-01 03:00:00 (Tue)
  63223387200, #      utc_end 2004-06-20 04:00:00 (Sun)
  63221727600, #  local_start 2004-05-31 23:00:00 (Mon)
  63223372800, #    local_end 2004-06-20 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  63223387200, #    utc_start 2004-06-20 04:00:00 (Sun)
  63334666800, #      utc_end 2007-12-30 03:00:00 (Sun)
  63223376400, #  local_start 2004-06-20 01:00:00 (Sun)
  63334656000, #    local_end 2007-12-30 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63334666800, #    utc_start 2007-12-30 03:00:00 (Sun)
  63341316000, #      utc_end 2008-03-16 02:00:00 (Sun)
  63334659600, #  local_start 2007-12-30 01:00:00 (Sun)
  63341308800, #    local_end 2008-03-16 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  63341316000, #    utc_start 2008-03-16 02:00:00 (Sun)
  63359982000, #      utc_end 2008-10-18 03:00:00 (Sat)
  63341305200, #  local_start 2008-03-15 23:00:00 (Sat)
  63359971200, #    local_end 2008-10-18 00:00:00 (Sat)
  -10800,
  0,
  'ART',
      ],
      [
  63359982000, #    utc_start 2008-10-18 03:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63359971200, #  local_start 2008-10-18 00:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'ART',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {28}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ARGENTINA_LA_RIOJA

    $main::fatpacked{"DateTime/TimeZone/America/Argentina/Mendoza.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ARGENTINA_MENDOZA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Argentina::Mendoza;
  $DateTime::TimeZone::America::Argentina::Mendoza::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Argentina::Mendoza::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59763587716, #      utc_end 1894-10-31 04:35:16 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59763571200, #    local_end 1894-10-31 00:00:00 (Wed)
  -16516,
  0,
  'LMT',
      ],
      [
  59763587716, #    utc_start 1894-10-31 04:35:16 (Wed)
  60568229808, #      utc_end 1920-05-01 04:16:48 (Sat)
  59763572308, #  local_start 1894-10-31 00:18:28 (Wed)
  60568214400, #    local_end 1920-05-01 00:00:00 (Sat)
  -15408,
  0,
  'CMT',
      ],
      [
  60568229808, #    utc_start 1920-05-01 04:16:48 (Sat)
  60902251200, #      utc_end 1930-12-01 04:00:00 (Mon)
  60568215408, #  local_start 1920-05-01 00:16:48 (Sat)
  60902236800, #    local_end 1930-12-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  60902251200, #    utc_start 1930-12-01 04:00:00 (Mon)
  60912702000, #      utc_end 1931-04-01 03:00:00 (Wed)
  60902240400, #  local_start 1930-12-01 01:00:00 (Mon)
  60912691200, #    local_end 1931-04-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60912702000, #    utc_start 1931-04-01 03:00:00 (Wed)
  60929726400, #      utc_end 1931-10-15 04:00:00 (Thu)
  60912687600, #  local_start 1931-03-31 23:00:00 (Tue)
  60929712000, #    local_end 1931-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  60929726400, #    utc_start 1931-10-15 04:00:00 (Thu)
  60941646000, #      utc_end 1932-03-01 03:00:00 (Tue)
  60929715600, #  local_start 1931-10-15 01:00:00 (Thu)
  60941635200, #    local_end 1932-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  60941646000, #    utc_start 1932-03-01 03:00:00 (Tue)
  60962817600, #      utc_end 1932-11-01 04:00:00 (Tue)
  60941631600, #  local_start 1932-02-29 23:00:00 (Mon)
  60962803200, #    local_end 1932-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  60962817600, #    utc_start 1932-11-01 04:00:00 (Tue)
  60973182000, #      utc_end 1933-03-01 03:00:00 (Wed)
  60962806800, #  local_start 1932-11-01 01:00:00 (Tue)
  60973171200, #    local_end 1933-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60973182000, #    utc_start 1933-03-01 03:00:00 (Wed)
  60994353600, #      utc_end 1933-11-01 04:00:00 (Wed)
  60973167600, #  local_start 1933-02-28 23:00:00 (Tue)
  60994339200, #    local_end 1933-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  60994353600, #    utc_start 1933-11-01 04:00:00 (Wed)
  61004718000, #      utc_end 1934-03-01 03:00:00 (Thu)
  60994342800, #  local_start 1933-11-01 01:00:00 (Wed)
  61004707200, #    local_end 1934-03-01 00:00:00 (Thu)
  -10800,
  1,
  'ARST',
      ],
      [
  61004718000, #    utc_start 1934-03-01 03:00:00 (Thu)
  61025889600, #      utc_end 1934-11-01 04:00:00 (Thu)
  61004703600, #  local_start 1934-02-28 23:00:00 (Wed)
  61025875200, #    local_end 1934-11-01 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61025889600, #    utc_start 1934-11-01 04:00:00 (Thu)
  61036254000, #      utc_end 1935-03-01 03:00:00 (Fri)
  61025878800, #  local_start 1934-11-01 01:00:00 (Thu)
  61036243200, #    local_end 1935-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61036254000, #    utc_start 1935-03-01 03:00:00 (Fri)
  61057425600, #      utc_end 1935-11-01 04:00:00 (Fri)
  61036239600, #  local_start 1935-02-28 23:00:00 (Thu)
  61057411200, #    local_end 1935-11-01 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61057425600, #    utc_start 1935-11-01 04:00:00 (Fri)
  61067876400, #      utc_end 1936-03-01 03:00:00 (Sun)
  61057414800, #  local_start 1935-11-01 01:00:00 (Fri)
  61067865600, #    local_end 1936-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61067876400, #    utc_start 1936-03-01 03:00:00 (Sun)
  61089048000, #      utc_end 1936-11-01 04:00:00 (Sun)
  61067862000, #  local_start 1936-02-29 23:00:00 (Sat)
  61089033600, #    local_end 1936-11-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61089048000, #    utc_start 1936-11-01 04:00:00 (Sun)
  61099412400, #      utc_end 1937-03-01 03:00:00 (Mon)
  61089037200, #  local_start 1936-11-01 01:00:00 (Sun)
  61099401600, #    local_end 1937-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61099412400, #    utc_start 1937-03-01 03:00:00 (Mon)
  61120584000, #      utc_end 1937-11-01 04:00:00 (Mon)
  61099398000, #  local_start 1937-02-28 23:00:00 (Sun)
  61120569600, #    local_end 1937-11-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61120584000, #    utc_start 1937-11-01 04:00:00 (Mon)
  61130948400, #      utc_end 1938-03-01 03:00:00 (Tue)
  61120573200, #  local_start 1937-11-01 01:00:00 (Mon)
  61130937600, #    local_end 1938-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61130948400, #    utc_start 1938-03-01 03:00:00 (Tue)
  61152120000, #      utc_end 1938-11-01 04:00:00 (Tue)
  61130934000, #  local_start 1938-02-28 23:00:00 (Mon)
  61152105600, #    local_end 1938-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61152120000, #    utc_start 1938-11-01 04:00:00 (Tue)
  61162484400, #      utc_end 1939-03-01 03:00:00 (Wed)
  61152109200, #  local_start 1938-11-01 01:00:00 (Tue)
  61162473600, #    local_end 1939-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  61162484400, #    utc_start 1939-03-01 03:00:00 (Wed)
  61183656000, #      utc_end 1939-11-01 04:00:00 (Wed)
  61162470000, #  local_start 1939-02-28 23:00:00 (Tue)
  61183641600, #    local_end 1939-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61183656000, #    utc_start 1939-11-01 04:00:00 (Wed)
  61194106800, #      utc_end 1940-03-01 03:00:00 (Fri)
  61183645200, #  local_start 1939-11-01 01:00:00 (Wed)
  61194096000, #    local_end 1940-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61194106800, #    utc_start 1940-03-01 03:00:00 (Fri)
  61204651200, #      utc_end 1940-07-01 04:00:00 (Mon)
  61194092400, #  local_start 1940-02-29 23:00:00 (Thu)
  61204636800, #    local_end 1940-07-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61204651200, #    utc_start 1940-07-01 04:00:00 (Mon)
  61234801200, #      utc_end 1941-06-15 03:00:00 (Sun)
  61204640400, #  local_start 1940-07-01 01:00:00 (Mon)
  61234790400, #    local_end 1941-06-15 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61234801200, #    utc_start 1941-06-15 03:00:00 (Sun)
  61245345600, #      utc_end 1941-10-15 04:00:00 (Wed)
  61234786800, #  local_start 1941-06-14 23:00:00 (Sat)
  61245331200, #    local_end 1941-10-15 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61245345600, #    utc_start 1941-10-15 04:00:00 (Wed)
  61301934000, #      utc_end 1943-08-01 03:00:00 (Sun)
  61245334800, #  local_start 1941-10-15 01:00:00 (Wed)
  61301923200, #    local_end 1943-08-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61301934000, #    utc_start 1943-08-01 03:00:00 (Sun)
  61308417600, #      utc_end 1943-10-15 04:00:00 (Fri)
  61301919600, #  local_start 1943-07-31 23:00:00 (Sat)
  61308403200, #    local_end 1943-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61308417600, #    utc_start 1943-10-15 04:00:00 (Fri)
  61383409200, #      utc_end 1946-03-01 03:00:00 (Fri)
  61308406800, #  local_start 1943-10-15 01:00:00 (Fri)
  61383398400, #    local_end 1946-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61383409200, #    utc_start 1946-03-01 03:00:00 (Fri)
  61401902400, #      utc_end 1946-10-01 04:00:00 (Tue)
  61383394800, #  local_start 1946-02-28 23:00:00 (Thu)
  61401888000, #    local_end 1946-10-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61401902400, #    utc_start 1946-10-01 04:00:00 (Tue)
  61938356400, #      utc_end 1963-10-01 03:00:00 (Tue)
  61401891600, #  local_start 1946-10-01 01:00:00 (Tue)
  61938345600, #    local_end 1963-10-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61938356400, #    utc_start 1963-10-01 03:00:00 (Tue)
  61944840000, #      utc_end 1963-12-15 04:00:00 (Sun)
  61938342000, #  local_start 1963-09-30 23:00:00 (Mon)
  61944825600, #    local_end 1963-12-15 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61944840000, #    utc_start 1963-12-15 04:00:00 (Sun)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944829200, #  local_start 1963-12-15 01:00:00 (Sun)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61971192000, #      utc_end 1964-10-15 04:00:00 (Thu)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61971177600, #    local_end 1964-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61971192000, #    utc_start 1964-10-15 04:00:00 (Thu)
  61983025200, #      utc_end 1965-03-01 03:00:00 (Mon)
  61971181200, #  local_start 1964-10-15 01:00:00 (Thu)
  61983014400, #    local_end 1965-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61983025200, #    utc_start 1965-03-01 03:00:00 (Mon)
  62002728000, #      utc_end 1965-10-15 04:00:00 (Fri)
  61983010800, #  local_start 1965-02-28 23:00:00 (Sun)
  62002713600, #    local_end 1965-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  62002728000, #    utc_start 1965-10-15 04:00:00 (Fri)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62002717200, #  local_start 1965-10-15 01:00:00 (Fri)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62034264000, #      utc_end 1966-10-15 04:00:00 (Sat)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62034249600, #    local_end 1966-10-15 00:00:00 (Sat)
  -14400,
  0,
  'ART',
      ],
      [
  62034264000, #    utc_start 1966-10-15 04:00:00 (Sat)
  62048862000, #      utc_end 1967-04-02 03:00:00 (Sun)
  62034253200, #  local_start 1966-10-15 01:00:00 (Sat)
  62048851200, #    local_end 1967-04-02 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62048862000, #    utc_start 1967-04-02 03:00:00 (Sun)
  62064590400, #      utc_end 1967-10-01 04:00:00 (Sun)
  62048847600, #  local_start 1967-04-01 23:00:00 (Sat)
  62064576000, #    local_end 1967-10-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62064590400, #    utc_start 1967-10-01 04:00:00 (Sun)
  62080916400, #      utc_end 1968-04-07 03:00:00 (Sun)
  62064579600, #  local_start 1967-10-01 01:00:00 (Sun)
  62080905600, #    local_end 1968-04-07 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62080916400, #    utc_start 1968-04-07 03:00:00 (Sun)
  62096644800, #      utc_end 1968-10-06 04:00:00 (Sun)
  62080902000, #  local_start 1968-04-06 23:00:00 (Sat)
  62096630400, #    local_end 1968-10-06 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62096644800, #    utc_start 1968-10-06 04:00:00 (Sun)
  62112366000, #      utc_end 1969-04-06 03:00:00 (Sun)
  62096634000, #  local_start 1968-10-06 01:00:00 (Sun)
  62112355200, #    local_end 1969-04-06 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62112366000, #    utc_start 1969-04-06 03:00:00 (Sun)
  62128094400, #      utc_end 1969-10-05 04:00:00 (Sun)
  62112351600, #  local_start 1969-04-05 23:00:00 (Sat)
  62128080000, #    local_end 1969-10-05 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62128094400, #    utc_start 1969-10-05 04:00:00 (Sun)
  62263825200, #      utc_end 1974-01-23 03:00:00 (Wed)
  62128083600, #  local_start 1969-10-05 01:00:00 (Sun)
  62263814400, #    local_end 1974-01-23 00:00:00 (Wed)
  -10800,
  0,
  'ART',
      ],
      [
  62263825200, #    utc_start 1974-01-23 03:00:00 (Wed)
  62272288800, #      utc_end 1974-05-01 02:00:00 (Wed)
  62263818000, #  local_start 1974-01-23 01:00:00 (Wed)
  62272281600, #    local_end 1974-05-01 00:00:00 (Wed)
  -7200,
  1,
  'ARST',
      ],
      [
  62272288800, #    utc_start 1974-05-01 02:00:00 (Wed)
  62732631600, #      utc_end 1988-12-01 03:00:00 (Thu)
  62272278000, #  local_start 1974-04-30 23:00:00 (Tue)
  62732620800, #    local_end 1988-12-01 00:00:00 (Thu)
  -10800,
  0,
  'ART',
      ],
      [
  62732631600, #    utc_start 1988-12-01 03:00:00 (Thu)
  62740749600, #      utc_end 1989-03-05 02:00:00 (Sun)
  62732624400, #  local_start 1988-12-01 01:00:00 (Thu)
  62740742400, #    local_end 1989-03-05 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62740749600, #    utc_start 1989-03-05 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62740738800, #  local_start 1989-03-04 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62772199200, #      utc_end 1990-03-04 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62772192000, #    local_end 1990-03-04 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62772199200, #    utc_start 1990-03-04 02:00:00 (Sun)
  62791646400, #      utc_end 1990-10-15 04:00:00 (Mon)
  62772184800, #  local_start 1990-03-03 22:00:00 (Sat)
  62791632000, #    local_end 1990-10-15 00:00:00 (Mon)
  -14400,
  0,
  'WART',
      ],
      [
  62791646400, #    utc_start 1990-10-15 04:00:00 (Mon)
  62803479600, #      utc_end 1991-03-01 03:00:00 (Fri)
  62791635600, #  local_start 1990-10-15 01:00:00 (Mon)
  62803468800, #    local_end 1991-03-01 00:00:00 (Fri)
  -10800,
  1,
  'WARST',
      ],
      [
  62803479600, #    utc_start 1991-03-01 03:00:00 (Fri)
  62823182400, #      utc_end 1991-10-15 04:00:00 (Tue)
  62803465200, #  local_start 1991-02-28 23:00:00 (Thu)
  62823168000, #    local_end 1991-10-15 00:00:00 (Tue)
  -14400,
  0,
  'WART',
      ],
      [
  62823182400, #    utc_start 1991-10-15 04:00:00 (Tue)
  62835102000, #      utc_end 1992-03-01 03:00:00 (Sun)
  62823171600, #  local_start 1991-10-15 01:00:00 (Tue)
  62835091200, #    local_end 1992-03-01 00:00:00 (Sun)
  -10800,
  1,
  'WARST',
      ],
      [
  62835102000, #    utc_start 1992-03-01 03:00:00 (Sun)
  62855064000, #      utc_end 1992-10-18 04:00:00 (Sun)
  62835087600, #  local_start 1992-02-29 23:00:00 (Sat)
  62855049600, #    local_end 1992-10-18 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  62855064000, #    utc_start 1992-10-18 04:00:00 (Sun)
  62867152800, #      utc_end 1993-03-07 02:00:00 (Sun)
  62855056800, #  local_start 1992-10-18 02:00:00 (Sun)
  62867145600, #    local_end 1993-03-07 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62867152800, #    utc_start 1993-03-07 02:00:00 (Sun)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  62867142000, #  local_start 1993-03-06 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087735600, #      utc_end 2000-03-03 03:00:00 (Fri)
  63074592000, #  local_start 1999-10-03 00:00:00 (Sun)
  63087724800, #    local_end 2000-03-03 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  63087735600, #    utc_start 2000-03-03 03:00:00 (Fri)
  63220964400, #      utc_end 2004-05-23 03:00:00 (Sun)
  63087724800, #  local_start 2000-03-03 00:00:00 (Fri)
  63220953600, #    local_end 2004-05-23 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63220964400, #    utc_start 2004-05-23 03:00:00 (Sun)
  63231854400, #      utc_end 2004-09-26 04:00:00 (Sun)
  63220950000, #  local_start 2004-05-22 23:00:00 (Sat)
  63231840000, #    local_end 2004-09-26 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  63231854400, #    utc_start 2004-09-26 04:00:00 (Sun)
  63334666800, #      utc_end 2007-12-30 03:00:00 (Sun)
  63231843600, #  local_start 2004-09-26 01:00:00 (Sun)
  63334656000, #    local_end 2007-12-30 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63334666800, #    utc_start 2007-12-30 03:00:00 (Sun)
  63341316000, #      utc_end 2008-03-16 02:00:00 (Sun)
  63334659600, #  local_start 2007-12-30 01:00:00 (Sun)
  63341308800, #    local_end 2008-03-16 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  63341316000, #    utc_start 2008-03-16 02:00:00 (Sun)
  63359982000, #      utc_end 2008-10-18 03:00:00 (Sat)
  63341305200, #  local_start 2008-03-15 23:00:00 (Sat)
  63359971200, #    local_end 2008-10-18 00:00:00 (Sat)
  -10800,
  0,
  'ART',
      ],
      [
  63359982000, #    utc_start 2008-10-18 03:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63359971200, #  local_start 2008-10-18 00:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'ART',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {28}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ARGENTINA_MENDOZA

    $main::fatpacked{"DateTime/TimeZone/America/Argentina/Rio_Gallegos.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ARGENTINA_RIO_GALLEGOS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Argentina::Rio_Gallegos;
  $DateTime::TimeZone::America::Argentina::Rio_Gallegos::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Argentina::Rio_Gallegos::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59763587812, #      utc_end 1894-10-31 04:36:52 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59763571200, #    local_end 1894-10-31 00:00:00 (Wed)
  -16612,
  0,
  'LMT',
      ],
      [
  59763587812, #    utc_start 1894-10-31 04:36:52 (Wed)
  60568229808, #      utc_end 1920-05-01 04:16:48 (Sat)
  59763572404, #  local_start 1894-10-31 00:20:04 (Wed)
  60568214400, #    local_end 1920-05-01 00:00:00 (Sat)
  -15408,
  0,
  'CMT',
      ],
      [
  60568229808, #    utc_start 1920-05-01 04:16:48 (Sat)
  60902251200, #      utc_end 1930-12-01 04:00:00 (Mon)
  60568215408, #  local_start 1920-05-01 00:16:48 (Sat)
  60902236800, #    local_end 1930-12-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  60902251200, #    utc_start 1930-12-01 04:00:00 (Mon)
  60912702000, #      utc_end 1931-04-01 03:00:00 (Wed)
  60902240400, #  local_start 1930-12-01 01:00:00 (Mon)
  60912691200, #    local_end 1931-04-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60912702000, #    utc_start 1931-04-01 03:00:00 (Wed)
  60929726400, #      utc_end 1931-10-15 04:00:00 (Thu)
  60912687600, #  local_start 1931-03-31 23:00:00 (Tue)
  60929712000, #    local_end 1931-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  60929726400, #    utc_start 1931-10-15 04:00:00 (Thu)
  60941646000, #      utc_end 1932-03-01 03:00:00 (Tue)
  60929715600, #  local_start 1931-10-15 01:00:00 (Thu)
  60941635200, #    local_end 1932-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  60941646000, #    utc_start 1932-03-01 03:00:00 (Tue)
  60962817600, #      utc_end 1932-11-01 04:00:00 (Tue)
  60941631600, #  local_start 1932-02-29 23:00:00 (Mon)
  60962803200, #    local_end 1932-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  60962817600, #    utc_start 1932-11-01 04:00:00 (Tue)
  60973182000, #      utc_end 1933-03-01 03:00:00 (Wed)
  60962806800, #  local_start 1932-11-01 01:00:00 (Tue)
  60973171200, #    local_end 1933-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60973182000, #    utc_start 1933-03-01 03:00:00 (Wed)
  60994353600, #      utc_end 1933-11-01 04:00:00 (Wed)
  60973167600, #  local_start 1933-02-28 23:00:00 (Tue)
  60994339200, #    local_end 1933-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  60994353600, #    utc_start 1933-11-01 04:00:00 (Wed)
  61004718000, #      utc_end 1934-03-01 03:00:00 (Thu)
  60994342800, #  local_start 1933-11-01 01:00:00 (Wed)
  61004707200, #    local_end 1934-03-01 00:00:00 (Thu)
  -10800,
  1,
  'ARST',
      ],
      [
  61004718000, #    utc_start 1934-03-01 03:00:00 (Thu)
  61025889600, #      utc_end 1934-11-01 04:00:00 (Thu)
  61004703600, #  local_start 1934-02-28 23:00:00 (Wed)
  61025875200, #    local_end 1934-11-01 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61025889600, #    utc_start 1934-11-01 04:00:00 (Thu)
  61036254000, #      utc_end 1935-03-01 03:00:00 (Fri)
  61025878800, #  local_start 1934-11-01 01:00:00 (Thu)
  61036243200, #    local_end 1935-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61036254000, #    utc_start 1935-03-01 03:00:00 (Fri)
  61057425600, #      utc_end 1935-11-01 04:00:00 (Fri)
  61036239600, #  local_start 1935-02-28 23:00:00 (Thu)
  61057411200, #    local_end 1935-11-01 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61057425600, #    utc_start 1935-11-01 04:00:00 (Fri)
  61067876400, #      utc_end 1936-03-01 03:00:00 (Sun)
  61057414800, #  local_start 1935-11-01 01:00:00 (Fri)
  61067865600, #    local_end 1936-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61067876400, #    utc_start 1936-03-01 03:00:00 (Sun)
  61089048000, #      utc_end 1936-11-01 04:00:00 (Sun)
  61067862000, #  local_start 1936-02-29 23:00:00 (Sat)
  61089033600, #    local_end 1936-11-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61089048000, #    utc_start 1936-11-01 04:00:00 (Sun)
  61099412400, #      utc_end 1937-03-01 03:00:00 (Mon)
  61089037200, #  local_start 1936-11-01 01:00:00 (Sun)
  61099401600, #    local_end 1937-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61099412400, #    utc_start 1937-03-01 03:00:00 (Mon)
  61120584000, #      utc_end 1937-11-01 04:00:00 (Mon)
  61099398000, #  local_start 1937-02-28 23:00:00 (Sun)
  61120569600, #    local_end 1937-11-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61120584000, #    utc_start 1937-11-01 04:00:00 (Mon)
  61130948400, #      utc_end 1938-03-01 03:00:00 (Tue)
  61120573200, #  local_start 1937-11-01 01:00:00 (Mon)
  61130937600, #    local_end 1938-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61130948400, #    utc_start 1938-03-01 03:00:00 (Tue)
  61152120000, #      utc_end 1938-11-01 04:00:00 (Tue)
  61130934000, #  local_start 1938-02-28 23:00:00 (Mon)
  61152105600, #    local_end 1938-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61152120000, #    utc_start 1938-11-01 04:00:00 (Tue)
  61162484400, #      utc_end 1939-03-01 03:00:00 (Wed)
  61152109200, #  local_start 1938-11-01 01:00:00 (Tue)
  61162473600, #    local_end 1939-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  61162484400, #    utc_start 1939-03-01 03:00:00 (Wed)
  61183656000, #      utc_end 1939-11-01 04:00:00 (Wed)
  61162470000, #  local_start 1939-02-28 23:00:00 (Tue)
  61183641600, #    local_end 1939-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61183656000, #    utc_start 1939-11-01 04:00:00 (Wed)
  61194106800, #      utc_end 1940-03-01 03:00:00 (Fri)
  61183645200, #  local_start 1939-11-01 01:00:00 (Wed)
  61194096000, #    local_end 1940-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61194106800, #    utc_start 1940-03-01 03:00:00 (Fri)
  61204651200, #      utc_end 1940-07-01 04:00:00 (Mon)
  61194092400, #  local_start 1940-02-29 23:00:00 (Thu)
  61204636800, #    local_end 1940-07-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61204651200, #    utc_start 1940-07-01 04:00:00 (Mon)
  61234801200, #      utc_end 1941-06-15 03:00:00 (Sun)
  61204640400, #  local_start 1940-07-01 01:00:00 (Mon)
  61234790400, #    local_end 1941-06-15 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61234801200, #    utc_start 1941-06-15 03:00:00 (Sun)
  61245345600, #      utc_end 1941-10-15 04:00:00 (Wed)
  61234786800, #  local_start 1941-06-14 23:00:00 (Sat)
  61245331200, #    local_end 1941-10-15 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61245345600, #    utc_start 1941-10-15 04:00:00 (Wed)
  61301934000, #      utc_end 1943-08-01 03:00:00 (Sun)
  61245334800, #  local_start 1941-10-15 01:00:00 (Wed)
  61301923200, #    local_end 1943-08-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61301934000, #    utc_start 1943-08-01 03:00:00 (Sun)
  61308417600, #      utc_end 1943-10-15 04:00:00 (Fri)
  61301919600, #  local_start 1943-07-31 23:00:00 (Sat)
  61308403200, #    local_end 1943-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61308417600, #    utc_start 1943-10-15 04:00:00 (Fri)
  61383409200, #      utc_end 1946-03-01 03:00:00 (Fri)
  61308406800, #  local_start 1943-10-15 01:00:00 (Fri)
  61383398400, #    local_end 1946-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61383409200, #    utc_start 1946-03-01 03:00:00 (Fri)
  61401902400, #      utc_end 1946-10-01 04:00:00 (Tue)
  61383394800, #  local_start 1946-02-28 23:00:00 (Thu)
  61401888000, #    local_end 1946-10-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61401902400, #    utc_start 1946-10-01 04:00:00 (Tue)
  61938356400, #      utc_end 1963-10-01 03:00:00 (Tue)
  61401891600, #  local_start 1946-10-01 01:00:00 (Tue)
  61938345600, #    local_end 1963-10-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61938356400, #    utc_start 1963-10-01 03:00:00 (Tue)
  61944840000, #      utc_end 1963-12-15 04:00:00 (Sun)
  61938342000, #  local_start 1963-09-30 23:00:00 (Mon)
  61944825600, #    local_end 1963-12-15 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61944840000, #    utc_start 1963-12-15 04:00:00 (Sun)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944829200, #  local_start 1963-12-15 01:00:00 (Sun)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61971192000, #      utc_end 1964-10-15 04:00:00 (Thu)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61971177600, #    local_end 1964-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61971192000, #    utc_start 1964-10-15 04:00:00 (Thu)
  61983025200, #      utc_end 1965-03-01 03:00:00 (Mon)
  61971181200, #  local_start 1964-10-15 01:00:00 (Thu)
  61983014400, #    local_end 1965-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61983025200, #    utc_start 1965-03-01 03:00:00 (Mon)
  62002728000, #      utc_end 1965-10-15 04:00:00 (Fri)
  61983010800, #  local_start 1965-02-28 23:00:00 (Sun)
  62002713600, #    local_end 1965-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  62002728000, #    utc_start 1965-10-15 04:00:00 (Fri)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62002717200, #  local_start 1965-10-15 01:00:00 (Fri)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62034264000, #      utc_end 1966-10-15 04:00:00 (Sat)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62034249600, #    local_end 1966-10-15 00:00:00 (Sat)
  -14400,
  0,
  'ART',
      ],
      [
  62034264000, #    utc_start 1966-10-15 04:00:00 (Sat)
  62048862000, #      utc_end 1967-04-02 03:00:00 (Sun)
  62034253200, #  local_start 1966-10-15 01:00:00 (Sat)
  62048851200, #    local_end 1967-04-02 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62048862000, #    utc_start 1967-04-02 03:00:00 (Sun)
  62064590400, #      utc_end 1967-10-01 04:00:00 (Sun)
  62048847600, #  local_start 1967-04-01 23:00:00 (Sat)
  62064576000, #    local_end 1967-10-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62064590400, #    utc_start 1967-10-01 04:00:00 (Sun)
  62080916400, #      utc_end 1968-04-07 03:00:00 (Sun)
  62064579600, #  local_start 1967-10-01 01:00:00 (Sun)
  62080905600, #    local_end 1968-04-07 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62080916400, #    utc_start 1968-04-07 03:00:00 (Sun)
  62096644800, #      utc_end 1968-10-06 04:00:00 (Sun)
  62080902000, #  local_start 1968-04-06 23:00:00 (Sat)
  62096630400, #    local_end 1968-10-06 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62096644800, #    utc_start 1968-10-06 04:00:00 (Sun)
  62112366000, #      utc_end 1969-04-06 03:00:00 (Sun)
  62096634000, #  local_start 1968-10-06 01:00:00 (Sun)
  62112355200, #    local_end 1969-04-06 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62112366000, #    utc_start 1969-04-06 03:00:00 (Sun)
  62128094400, #      utc_end 1969-10-05 04:00:00 (Sun)
  62112351600, #  local_start 1969-04-05 23:00:00 (Sat)
  62128080000, #    local_end 1969-10-05 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62128094400, #    utc_start 1969-10-05 04:00:00 (Sun)
  62263825200, #      utc_end 1974-01-23 03:00:00 (Wed)
  62128083600, #  local_start 1969-10-05 01:00:00 (Sun)
  62263814400, #    local_end 1974-01-23 00:00:00 (Wed)
  -10800,
  0,
  'ART',
      ],
      [
  62263825200, #    utc_start 1974-01-23 03:00:00 (Wed)
  62272288800, #      utc_end 1974-05-01 02:00:00 (Wed)
  62263818000, #  local_start 1974-01-23 01:00:00 (Wed)
  62272281600, #    local_end 1974-05-01 00:00:00 (Wed)
  -7200,
  1,
  'ARST',
      ],
      [
  62272288800, #    utc_start 1974-05-01 02:00:00 (Wed)
  62732631600, #      utc_end 1988-12-01 03:00:00 (Thu)
  62272278000, #  local_start 1974-04-30 23:00:00 (Tue)
  62732620800, #    local_end 1988-12-01 00:00:00 (Thu)
  -10800,
  0,
  'ART',
      ],
      [
  62732631600, #    utc_start 1988-12-01 03:00:00 (Thu)
  62740749600, #      utc_end 1989-03-05 02:00:00 (Sun)
  62732624400, #  local_start 1988-12-01 01:00:00 (Thu)
  62740742400, #    local_end 1989-03-05 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62740749600, #    utc_start 1989-03-05 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62740738800, #  local_start 1989-03-04 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62772199200, #      utc_end 1990-03-04 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62772192000, #    local_end 1990-03-04 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62772199200, #    utc_start 1990-03-04 02:00:00 (Sun)
  62792161200, #      utc_end 1990-10-21 03:00:00 (Sun)
  62772188400, #  local_start 1990-03-03 23:00:00 (Sat)
  62792150400, #    local_end 1990-10-21 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62792161200, #    utc_start 1990-10-21 03:00:00 (Sun)
  62803648800, #      utc_end 1991-03-03 02:00:00 (Sun)
  62792154000, #  local_start 1990-10-21 01:00:00 (Sun)
  62803641600, #    local_end 1991-03-03 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62803648800, #    utc_start 1991-03-03 02:00:00 (Sun)
  62823610800, #      utc_end 1991-10-20 03:00:00 (Sun)
  62803638000, #  local_start 1991-03-02 23:00:00 (Sat)
  62823600000, #    local_end 1991-10-20 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62823610800, #    utc_start 1991-10-20 03:00:00 (Sun)
  62835098400, #      utc_end 1992-03-01 02:00:00 (Sun)
  62823603600, #  local_start 1991-10-20 01:00:00 (Sun)
  62835091200, #    local_end 1992-03-01 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62835098400, #    utc_start 1992-03-01 02:00:00 (Sun)
  62855060400, #      utc_end 1992-10-18 03:00:00 (Sun)
  62835087600, #  local_start 1992-02-29 23:00:00 (Sat)
  62855049600, #    local_end 1992-10-18 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62855060400, #    utc_start 1992-10-18 03:00:00 (Sun)
  62867152800, #      utc_end 1993-03-07 02:00:00 (Sun)
  62855053200, #  local_start 1992-10-18 01:00:00 (Sun)
  62867145600, #    local_end 1993-03-07 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62867152800, #    utc_start 1993-03-07 02:00:00 (Sun)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  62867142000, #  local_start 1993-03-06 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087735600, #      utc_end 2000-03-03 03:00:00 (Fri)
  63074592000, #  local_start 1999-10-03 00:00:00 (Sun)
  63087724800, #    local_end 2000-03-03 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  63087735600, #    utc_start 2000-03-03 03:00:00 (Fri)
  63221742000, #      utc_end 2004-06-01 03:00:00 (Tue)
  63087724800, #  local_start 2000-03-03 00:00:00 (Fri)
  63221731200, #    local_end 2004-06-01 00:00:00 (Tue)
  -10800,
  0,
  'ART',
      ],
      [
  63221742000, #    utc_start 2004-06-01 03:00:00 (Tue)
  63223387200, #      utc_end 2004-06-20 04:00:00 (Sun)
  63221727600, #  local_start 2004-05-31 23:00:00 (Mon)
  63223372800, #    local_end 2004-06-20 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  63223387200, #    utc_start 2004-06-20 04:00:00 (Sun)
  63334666800, #      utc_end 2007-12-30 03:00:00 (Sun)
  63223376400, #  local_start 2004-06-20 01:00:00 (Sun)
  63334656000, #    local_end 2007-12-30 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63334666800, #    utc_start 2007-12-30 03:00:00 (Sun)
  63341316000, #      utc_end 2008-03-16 02:00:00 (Sun)
  63334659600, #  local_start 2007-12-30 01:00:00 (Sun)
  63341308800, #    local_end 2008-03-16 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  63341316000, #    utc_start 2008-03-16 02:00:00 (Sun)
  63359982000, #      utc_end 2008-10-18 03:00:00 (Sat)
  63341305200, #  local_start 2008-03-15 23:00:00 (Sat)
  63359971200, #    local_end 2008-10-18 00:00:00 (Sat)
  -10800,
  0,
  'ART',
      ],
      [
  63359982000, #    utc_start 2008-10-18 03:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63359971200, #  local_start 2008-10-18 00:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'ART',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {28}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ARGENTINA_RIO_GALLEGOS

    $main::fatpacked{"DateTime/TimeZone/America/Argentina/Salta.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ARGENTINA_SALTA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Argentina::Salta;
  $DateTime::TimeZone::America::Argentina::Salta::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Argentina::Salta::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59763586900, #      utc_end 1894-10-31 04:21:40 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59763571200, #    local_end 1894-10-31 00:00:00 (Wed)
  -15700,
  0,
  'LMT',
      ],
      [
  59763586900, #    utc_start 1894-10-31 04:21:40 (Wed)
  60568229808, #      utc_end 1920-05-01 04:16:48 (Sat)
  59763571492, #  local_start 1894-10-31 00:04:52 (Wed)
  60568214400, #    local_end 1920-05-01 00:00:00 (Sat)
  -15408,
  0,
  'CMT',
      ],
      [
  60568229808, #    utc_start 1920-05-01 04:16:48 (Sat)
  60902251200, #      utc_end 1930-12-01 04:00:00 (Mon)
  60568215408, #  local_start 1920-05-01 00:16:48 (Sat)
  60902236800, #    local_end 1930-12-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  60902251200, #    utc_start 1930-12-01 04:00:00 (Mon)
  60912702000, #      utc_end 1931-04-01 03:00:00 (Wed)
  60902240400, #  local_start 1930-12-01 01:00:00 (Mon)
  60912691200, #    local_end 1931-04-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60912702000, #    utc_start 1931-04-01 03:00:00 (Wed)
  60929726400, #      utc_end 1931-10-15 04:00:00 (Thu)
  60912687600, #  local_start 1931-03-31 23:00:00 (Tue)
  60929712000, #    local_end 1931-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  60929726400, #    utc_start 1931-10-15 04:00:00 (Thu)
  60941646000, #      utc_end 1932-03-01 03:00:00 (Tue)
  60929715600, #  local_start 1931-10-15 01:00:00 (Thu)
  60941635200, #    local_end 1932-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  60941646000, #    utc_start 1932-03-01 03:00:00 (Tue)
  60962817600, #      utc_end 1932-11-01 04:00:00 (Tue)
  60941631600, #  local_start 1932-02-29 23:00:00 (Mon)
  60962803200, #    local_end 1932-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  60962817600, #    utc_start 1932-11-01 04:00:00 (Tue)
  60973182000, #      utc_end 1933-03-01 03:00:00 (Wed)
  60962806800, #  local_start 1932-11-01 01:00:00 (Tue)
  60973171200, #    local_end 1933-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60973182000, #    utc_start 1933-03-01 03:00:00 (Wed)
  60994353600, #      utc_end 1933-11-01 04:00:00 (Wed)
  60973167600, #  local_start 1933-02-28 23:00:00 (Tue)
  60994339200, #    local_end 1933-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  60994353600, #    utc_start 1933-11-01 04:00:00 (Wed)
  61004718000, #      utc_end 1934-03-01 03:00:00 (Thu)
  60994342800, #  local_start 1933-11-01 01:00:00 (Wed)
  61004707200, #    local_end 1934-03-01 00:00:00 (Thu)
  -10800,
  1,
  'ARST',
      ],
      [
  61004718000, #    utc_start 1934-03-01 03:00:00 (Thu)
  61025889600, #      utc_end 1934-11-01 04:00:00 (Thu)
  61004703600, #  local_start 1934-02-28 23:00:00 (Wed)
  61025875200, #    local_end 1934-11-01 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61025889600, #    utc_start 1934-11-01 04:00:00 (Thu)
  61036254000, #      utc_end 1935-03-01 03:00:00 (Fri)
  61025878800, #  local_start 1934-11-01 01:00:00 (Thu)
  61036243200, #    local_end 1935-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61036254000, #    utc_start 1935-03-01 03:00:00 (Fri)
  61057425600, #      utc_end 1935-11-01 04:00:00 (Fri)
  61036239600, #  local_start 1935-02-28 23:00:00 (Thu)
  61057411200, #    local_end 1935-11-01 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61057425600, #    utc_start 1935-11-01 04:00:00 (Fri)
  61067876400, #      utc_end 1936-03-01 03:00:00 (Sun)
  61057414800, #  local_start 1935-11-01 01:00:00 (Fri)
  61067865600, #    local_end 1936-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61067876400, #    utc_start 1936-03-01 03:00:00 (Sun)
  61089048000, #      utc_end 1936-11-01 04:00:00 (Sun)
  61067862000, #  local_start 1936-02-29 23:00:00 (Sat)
  61089033600, #    local_end 1936-11-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61089048000, #    utc_start 1936-11-01 04:00:00 (Sun)
  61099412400, #      utc_end 1937-03-01 03:00:00 (Mon)
  61089037200, #  local_start 1936-11-01 01:00:00 (Sun)
  61099401600, #    local_end 1937-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61099412400, #    utc_start 1937-03-01 03:00:00 (Mon)
  61120584000, #      utc_end 1937-11-01 04:00:00 (Mon)
  61099398000, #  local_start 1937-02-28 23:00:00 (Sun)
  61120569600, #    local_end 1937-11-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61120584000, #    utc_start 1937-11-01 04:00:00 (Mon)
  61130948400, #      utc_end 1938-03-01 03:00:00 (Tue)
  61120573200, #  local_start 1937-11-01 01:00:00 (Mon)
  61130937600, #    local_end 1938-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61130948400, #    utc_start 1938-03-01 03:00:00 (Tue)
  61152120000, #      utc_end 1938-11-01 04:00:00 (Tue)
  61130934000, #  local_start 1938-02-28 23:00:00 (Mon)
  61152105600, #    local_end 1938-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61152120000, #    utc_start 1938-11-01 04:00:00 (Tue)
  61162484400, #      utc_end 1939-03-01 03:00:00 (Wed)
  61152109200, #  local_start 1938-11-01 01:00:00 (Tue)
  61162473600, #    local_end 1939-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  61162484400, #    utc_start 1939-03-01 03:00:00 (Wed)
  61183656000, #      utc_end 1939-11-01 04:00:00 (Wed)
  61162470000, #  local_start 1939-02-28 23:00:00 (Tue)
  61183641600, #    local_end 1939-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61183656000, #    utc_start 1939-11-01 04:00:00 (Wed)
  61194106800, #      utc_end 1940-03-01 03:00:00 (Fri)
  61183645200, #  local_start 1939-11-01 01:00:00 (Wed)
  61194096000, #    local_end 1940-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61194106800, #    utc_start 1940-03-01 03:00:00 (Fri)
  61204651200, #      utc_end 1940-07-01 04:00:00 (Mon)
  61194092400, #  local_start 1940-02-29 23:00:00 (Thu)
  61204636800, #    local_end 1940-07-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61204651200, #    utc_start 1940-07-01 04:00:00 (Mon)
  61234801200, #      utc_end 1941-06-15 03:00:00 (Sun)
  61204640400, #  local_start 1940-07-01 01:00:00 (Mon)
  61234790400, #    local_end 1941-06-15 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61234801200, #    utc_start 1941-06-15 03:00:00 (Sun)
  61245345600, #      utc_end 1941-10-15 04:00:00 (Wed)
  61234786800, #  local_start 1941-06-14 23:00:00 (Sat)
  61245331200, #    local_end 1941-10-15 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61245345600, #    utc_start 1941-10-15 04:00:00 (Wed)
  61301934000, #      utc_end 1943-08-01 03:00:00 (Sun)
  61245334800, #  local_start 1941-10-15 01:00:00 (Wed)
  61301923200, #    local_end 1943-08-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61301934000, #    utc_start 1943-08-01 03:00:00 (Sun)
  61308417600, #      utc_end 1943-10-15 04:00:00 (Fri)
  61301919600, #  local_start 1943-07-31 23:00:00 (Sat)
  61308403200, #    local_end 1943-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61308417600, #    utc_start 1943-10-15 04:00:00 (Fri)
  61383409200, #      utc_end 1946-03-01 03:00:00 (Fri)
  61308406800, #  local_start 1943-10-15 01:00:00 (Fri)
  61383398400, #    local_end 1946-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61383409200, #    utc_start 1946-03-01 03:00:00 (Fri)
  61401902400, #      utc_end 1946-10-01 04:00:00 (Tue)
  61383394800, #  local_start 1946-02-28 23:00:00 (Thu)
  61401888000, #    local_end 1946-10-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61401902400, #    utc_start 1946-10-01 04:00:00 (Tue)
  61938356400, #      utc_end 1963-10-01 03:00:00 (Tue)
  61401891600, #  local_start 1946-10-01 01:00:00 (Tue)
  61938345600, #    local_end 1963-10-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61938356400, #    utc_start 1963-10-01 03:00:00 (Tue)
  61944840000, #      utc_end 1963-12-15 04:00:00 (Sun)
  61938342000, #  local_start 1963-09-30 23:00:00 (Mon)
  61944825600, #    local_end 1963-12-15 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61944840000, #    utc_start 1963-12-15 04:00:00 (Sun)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944829200, #  local_start 1963-12-15 01:00:00 (Sun)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61971192000, #      utc_end 1964-10-15 04:00:00 (Thu)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61971177600, #    local_end 1964-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61971192000, #    utc_start 1964-10-15 04:00:00 (Thu)
  61983025200, #      utc_end 1965-03-01 03:00:00 (Mon)
  61971181200, #  local_start 1964-10-15 01:00:00 (Thu)
  61983014400, #    local_end 1965-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61983025200, #    utc_start 1965-03-01 03:00:00 (Mon)
  62002728000, #      utc_end 1965-10-15 04:00:00 (Fri)
  61983010800, #  local_start 1965-02-28 23:00:00 (Sun)
  62002713600, #    local_end 1965-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  62002728000, #    utc_start 1965-10-15 04:00:00 (Fri)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62002717200, #  local_start 1965-10-15 01:00:00 (Fri)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62034264000, #      utc_end 1966-10-15 04:00:00 (Sat)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62034249600, #    local_end 1966-10-15 00:00:00 (Sat)
  -14400,
  0,
  'ART',
      ],
      [
  62034264000, #    utc_start 1966-10-15 04:00:00 (Sat)
  62048862000, #      utc_end 1967-04-02 03:00:00 (Sun)
  62034253200, #  local_start 1966-10-15 01:00:00 (Sat)
  62048851200, #    local_end 1967-04-02 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62048862000, #    utc_start 1967-04-02 03:00:00 (Sun)
  62064590400, #      utc_end 1967-10-01 04:00:00 (Sun)
  62048847600, #  local_start 1967-04-01 23:00:00 (Sat)
  62064576000, #    local_end 1967-10-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62064590400, #    utc_start 1967-10-01 04:00:00 (Sun)
  62080916400, #      utc_end 1968-04-07 03:00:00 (Sun)
  62064579600, #  local_start 1967-10-01 01:00:00 (Sun)
  62080905600, #    local_end 1968-04-07 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62080916400, #    utc_start 1968-04-07 03:00:00 (Sun)
  62096644800, #      utc_end 1968-10-06 04:00:00 (Sun)
  62080902000, #  local_start 1968-04-06 23:00:00 (Sat)
  62096630400, #    local_end 1968-10-06 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62096644800, #    utc_start 1968-10-06 04:00:00 (Sun)
  62112366000, #      utc_end 1969-04-06 03:00:00 (Sun)
  62096634000, #  local_start 1968-10-06 01:00:00 (Sun)
  62112355200, #    local_end 1969-04-06 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62112366000, #    utc_start 1969-04-06 03:00:00 (Sun)
  62128094400, #      utc_end 1969-10-05 04:00:00 (Sun)
  62112351600, #  local_start 1969-04-05 23:00:00 (Sat)
  62128080000, #    local_end 1969-10-05 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62128094400, #    utc_start 1969-10-05 04:00:00 (Sun)
  62263825200, #      utc_end 1974-01-23 03:00:00 (Wed)
  62128083600, #  local_start 1969-10-05 01:00:00 (Sun)
  62263814400, #    local_end 1974-01-23 00:00:00 (Wed)
  -10800,
  0,
  'ART',
      ],
      [
  62263825200, #    utc_start 1974-01-23 03:00:00 (Wed)
  62272288800, #      utc_end 1974-05-01 02:00:00 (Wed)
  62263818000, #  local_start 1974-01-23 01:00:00 (Wed)
  62272281600, #    local_end 1974-05-01 00:00:00 (Wed)
  -7200,
  1,
  'ARST',
      ],
      [
  62272288800, #    utc_start 1974-05-01 02:00:00 (Wed)
  62732631600, #      utc_end 1988-12-01 03:00:00 (Thu)
  62272278000, #  local_start 1974-04-30 23:00:00 (Tue)
  62732620800, #    local_end 1988-12-01 00:00:00 (Thu)
  -10800,
  0,
  'ART',
      ],
      [
  62732631600, #    utc_start 1988-12-01 03:00:00 (Thu)
  62740749600, #      utc_end 1989-03-05 02:00:00 (Sun)
  62732624400, #  local_start 1988-12-01 01:00:00 (Thu)
  62740742400, #    local_end 1989-03-05 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62740749600, #    utc_start 1989-03-05 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62740738800, #  local_start 1989-03-04 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62772199200, #      utc_end 1990-03-04 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62772192000, #    local_end 1990-03-04 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62772199200, #    utc_start 1990-03-04 02:00:00 (Sun)
  62792161200, #      utc_end 1990-10-21 03:00:00 (Sun)
  62772188400, #  local_start 1990-03-03 23:00:00 (Sat)
  62792150400, #    local_end 1990-10-21 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62792161200, #    utc_start 1990-10-21 03:00:00 (Sun)
  62803648800, #      utc_end 1991-03-03 02:00:00 (Sun)
  62792154000, #  local_start 1990-10-21 01:00:00 (Sun)
  62803641600, #    local_end 1991-03-03 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62803648800, #    utc_start 1991-03-03 02:00:00 (Sun)
  62823614400, #      utc_end 1991-10-20 04:00:00 (Sun)
  62803634400, #  local_start 1991-03-02 22:00:00 (Sat)
  62823600000, #    local_end 1991-10-20 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  62823614400, #    utc_start 1991-10-20 04:00:00 (Sun)
  62835098400, #      utc_end 1992-03-01 02:00:00 (Sun)
  62823607200, #  local_start 1991-10-20 02:00:00 (Sun)
  62835091200, #    local_end 1992-03-01 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62835098400, #    utc_start 1992-03-01 02:00:00 (Sun)
  62855060400, #      utc_end 1992-10-18 03:00:00 (Sun)
  62835087600, #  local_start 1992-02-29 23:00:00 (Sat)
  62855049600, #    local_end 1992-10-18 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62855060400, #    utc_start 1992-10-18 03:00:00 (Sun)
  62867152800, #      utc_end 1993-03-07 02:00:00 (Sun)
  62855053200, #  local_start 1992-10-18 01:00:00 (Sun)
  62867145600, #    local_end 1993-03-07 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62867152800, #    utc_start 1993-03-07 02:00:00 (Sun)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  62867142000, #  local_start 1993-03-06 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087735600, #      utc_end 2000-03-03 03:00:00 (Fri)
  63074592000, #  local_start 1999-10-03 00:00:00 (Sun)
  63087724800, #    local_end 2000-03-03 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  63087735600, #    utc_start 2000-03-03 03:00:00 (Fri)
  63334666800, #      utc_end 2007-12-30 03:00:00 (Sun)
  63087724800, #  local_start 2000-03-03 00:00:00 (Fri)
  63334656000, #    local_end 2007-12-30 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63334666800, #    utc_start 2007-12-30 03:00:00 (Sun)
  63341316000, #      utc_end 2008-03-16 02:00:00 (Sun)
  63334659600, #  local_start 2007-12-30 01:00:00 (Sun)
  63341308800, #    local_end 2008-03-16 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  63341316000, #    utc_start 2008-03-16 02:00:00 (Sun)
  63359982000, #      utc_end 2008-10-18 03:00:00 (Sat)
  63341305200, #  local_start 2008-03-15 23:00:00 (Sat)
  63359971200, #    local_end 2008-10-18 00:00:00 (Sat)
  -10800,
  0,
  'ART',
      ],
      [
  63359982000, #    utc_start 2008-10-18 03:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63359971200, #  local_start 2008-10-18 00:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'ART',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {28}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ARGENTINA_SALTA

    $main::fatpacked{"DateTime/TimeZone/America/Argentina/San_Juan.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ARGENTINA_SAN_JUAN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Argentina::San_Juan;
  $DateTime::TimeZone::America::Argentina::San_Juan::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Argentina::San_Juan::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59763587644, #      utc_end 1894-10-31 04:34:04 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59763571200, #    local_end 1894-10-31 00:00:00 (Wed)
  -16444,
  0,
  'LMT',
      ],
      [
  59763587644, #    utc_start 1894-10-31 04:34:04 (Wed)
  60568229808, #      utc_end 1920-05-01 04:16:48 (Sat)
  59763572236, #  local_start 1894-10-31 00:17:16 (Wed)
  60568214400, #    local_end 1920-05-01 00:00:00 (Sat)
  -15408,
  0,
  'CMT',
      ],
      [
  60568229808, #    utc_start 1920-05-01 04:16:48 (Sat)
  60902251200, #      utc_end 1930-12-01 04:00:00 (Mon)
  60568215408, #  local_start 1920-05-01 00:16:48 (Sat)
  60902236800, #    local_end 1930-12-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  60902251200, #    utc_start 1930-12-01 04:00:00 (Mon)
  60912702000, #      utc_end 1931-04-01 03:00:00 (Wed)
  60902240400, #  local_start 1930-12-01 01:00:00 (Mon)
  60912691200, #    local_end 1931-04-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60912702000, #    utc_start 1931-04-01 03:00:00 (Wed)
  60929726400, #      utc_end 1931-10-15 04:00:00 (Thu)
  60912687600, #  local_start 1931-03-31 23:00:00 (Tue)
  60929712000, #    local_end 1931-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  60929726400, #    utc_start 1931-10-15 04:00:00 (Thu)
  60941646000, #      utc_end 1932-03-01 03:00:00 (Tue)
  60929715600, #  local_start 1931-10-15 01:00:00 (Thu)
  60941635200, #    local_end 1932-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  60941646000, #    utc_start 1932-03-01 03:00:00 (Tue)
  60962817600, #      utc_end 1932-11-01 04:00:00 (Tue)
  60941631600, #  local_start 1932-02-29 23:00:00 (Mon)
  60962803200, #    local_end 1932-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  60962817600, #    utc_start 1932-11-01 04:00:00 (Tue)
  60973182000, #      utc_end 1933-03-01 03:00:00 (Wed)
  60962806800, #  local_start 1932-11-01 01:00:00 (Tue)
  60973171200, #    local_end 1933-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60973182000, #    utc_start 1933-03-01 03:00:00 (Wed)
  60994353600, #      utc_end 1933-11-01 04:00:00 (Wed)
  60973167600, #  local_start 1933-02-28 23:00:00 (Tue)
  60994339200, #    local_end 1933-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  60994353600, #    utc_start 1933-11-01 04:00:00 (Wed)
  61004718000, #      utc_end 1934-03-01 03:00:00 (Thu)
  60994342800, #  local_start 1933-11-01 01:00:00 (Wed)
  61004707200, #    local_end 1934-03-01 00:00:00 (Thu)
  -10800,
  1,
  'ARST',
      ],
      [
  61004718000, #    utc_start 1934-03-01 03:00:00 (Thu)
  61025889600, #      utc_end 1934-11-01 04:00:00 (Thu)
  61004703600, #  local_start 1934-02-28 23:00:00 (Wed)
  61025875200, #    local_end 1934-11-01 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61025889600, #    utc_start 1934-11-01 04:00:00 (Thu)
  61036254000, #      utc_end 1935-03-01 03:00:00 (Fri)
  61025878800, #  local_start 1934-11-01 01:00:00 (Thu)
  61036243200, #    local_end 1935-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61036254000, #    utc_start 1935-03-01 03:00:00 (Fri)
  61057425600, #      utc_end 1935-11-01 04:00:00 (Fri)
  61036239600, #  local_start 1935-02-28 23:00:00 (Thu)
  61057411200, #    local_end 1935-11-01 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61057425600, #    utc_start 1935-11-01 04:00:00 (Fri)
  61067876400, #      utc_end 1936-03-01 03:00:00 (Sun)
  61057414800, #  local_start 1935-11-01 01:00:00 (Fri)
  61067865600, #    local_end 1936-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61067876400, #    utc_start 1936-03-01 03:00:00 (Sun)
  61089048000, #      utc_end 1936-11-01 04:00:00 (Sun)
  61067862000, #  local_start 1936-02-29 23:00:00 (Sat)
  61089033600, #    local_end 1936-11-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61089048000, #    utc_start 1936-11-01 04:00:00 (Sun)
  61099412400, #      utc_end 1937-03-01 03:00:00 (Mon)
  61089037200, #  local_start 1936-11-01 01:00:00 (Sun)
  61099401600, #    local_end 1937-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61099412400, #    utc_start 1937-03-01 03:00:00 (Mon)
  61120584000, #      utc_end 1937-11-01 04:00:00 (Mon)
  61099398000, #  local_start 1937-02-28 23:00:00 (Sun)
  61120569600, #    local_end 1937-11-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61120584000, #    utc_start 1937-11-01 04:00:00 (Mon)
  61130948400, #      utc_end 1938-03-01 03:00:00 (Tue)
  61120573200, #  local_start 1937-11-01 01:00:00 (Mon)
  61130937600, #    local_end 1938-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61130948400, #    utc_start 1938-03-01 03:00:00 (Tue)
  61152120000, #      utc_end 1938-11-01 04:00:00 (Tue)
  61130934000, #  local_start 1938-02-28 23:00:00 (Mon)
  61152105600, #    local_end 1938-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61152120000, #    utc_start 1938-11-01 04:00:00 (Tue)
  61162484400, #      utc_end 1939-03-01 03:00:00 (Wed)
  61152109200, #  local_start 1938-11-01 01:00:00 (Tue)
  61162473600, #    local_end 1939-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  61162484400, #    utc_start 1939-03-01 03:00:00 (Wed)
  61183656000, #      utc_end 1939-11-01 04:00:00 (Wed)
  61162470000, #  local_start 1939-02-28 23:00:00 (Tue)
  61183641600, #    local_end 1939-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61183656000, #    utc_start 1939-11-01 04:00:00 (Wed)
  61194106800, #      utc_end 1940-03-01 03:00:00 (Fri)
  61183645200, #  local_start 1939-11-01 01:00:00 (Wed)
  61194096000, #    local_end 1940-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61194106800, #    utc_start 1940-03-01 03:00:00 (Fri)
  61204651200, #      utc_end 1940-07-01 04:00:00 (Mon)
  61194092400, #  local_start 1940-02-29 23:00:00 (Thu)
  61204636800, #    local_end 1940-07-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61204651200, #    utc_start 1940-07-01 04:00:00 (Mon)
  61234801200, #      utc_end 1941-06-15 03:00:00 (Sun)
  61204640400, #  local_start 1940-07-01 01:00:00 (Mon)
  61234790400, #    local_end 1941-06-15 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61234801200, #    utc_start 1941-06-15 03:00:00 (Sun)
  61245345600, #      utc_end 1941-10-15 04:00:00 (Wed)
  61234786800, #  local_start 1941-06-14 23:00:00 (Sat)
  61245331200, #    local_end 1941-10-15 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61245345600, #    utc_start 1941-10-15 04:00:00 (Wed)
  61301934000, #      utc_end 1943-08-01 03:00:00 (Sun)
  61245334800, #  local_start 1941-10-15 01:00:00 (Wed)
  61301923200, #    local_end 1943-08-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61301934000, #    utc_start 1943-08-01 03:00:00 (Sun)
  61308417600, #      utc_end 1943-10-15 04:00:00 (Fri)
  61301919600, #  local_start 1943-07-31 23:00:00 (Sat)
  61308403200, #    local_end 1943-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61308417600, #    utc_start 1943-10-15 04:00:00 (Fri)
  61383409200, #      utc_end 1946-03-01 03:00:00 (Fri)
  61308406800, #  local_start 1943-10-15 01:00:00 (Fri)
  61383398400, #    local_end 1946-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61383409200, #    utc_start 1946-03-01 03:00:00 (Fri)
  61401902400, #      utc_end 1946-10-01 04:00:00 (Tue)
  61383394800, #  local_start 1946-02-28 23:00:00 (Thu)
  61401888000, #    local_end 1946-10-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61401902400, #    utc_start 1946-10-01 04:00:00 (Tue)
  61938356400, #      utc_end 1963-10-01 03:00:00 (Tue)
  61401891600, #  local_start 1946-10-01 01:00:00 (Tue)
  61938345600, #    local_end 1963-10-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61938356400, #    utc_start 1963-10-01 03:00:00 (Tue)
  61944840000, #      utc_end 1963-12-15 04:00:00 (Sun)
  61938342000, #  local_start 1963-09-30 23:00:00 (Mon)
  61944825600, #    local_end 1963-12-15 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61944840000, #    utc_start 1963-12-15 04:00:00 (Sun)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944829200, #  local_start 1963-12-15 01:00:00 (Sun)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61971192000, #      utc_end 1964-10-15 04:00:00 (Thu)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61971177600, #    local_end 1964-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61971192000, #    utc_start 1964-10-15 04:00:00 (Thu)
  61983025200, #      utc_end 1965-03-01 03:00:00 (Mon)
  61971181200, #  local_start 1964-10-15 01:00:00 (Thu)
  61983014400, #    local_end 1965-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61983025200, #    utc_start 1965-03-01 03:00:00 (Mon)
  62002728000, #      utc_end 1965-10-15 04:00:00 (Fri)
  61983010800, #  local_start 1965-02-28 23:00:00 (Sun)
  62002713600, #    local_end 1965-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  62002728000, #    utc_start 1965-10-15 04:00:00 (Fri)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62002717200, #  local_start 1965-10-15 01:00:00 (Fri)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62034264000, #      utc_end 1966-10-15 04:00:00 (Sat)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62034249600, #    local_end 1966-10-15 00:00:00 (Sat)
  -14400,
  0,
  'ART',
      ],
      [
  62034264000, #    utc_start 1966-10-15 04:00:00 (Sat)
  62048862000, #      utc_end 1967-04-02 03:00:00 (Sun)
  62034253200, #  local_start 1966-10-15 01:00:00 (Sat)
  62048851200, #    local_end 1967-04-02 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62048862000, #    utc_start 1967-04-02 03:00:00 (Sun)
  62064590400, #      utc_end 1967-10-01 04:00:00 (Sun)
  62048847600, #  local_start 1967-04-01 23:00:00 (Sat)
  62064576000, #    local_end 1967-10-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62064590400, #    utc_start 1967-10-01 04:00:00 (Sun)
  62080916400, #      utc_end 1968-04-07 03:00:00 (Sun)
  62064579600, #  local_start 1967-10-01 01:00:00 (Sun)
  62080905600, #    local_end 1968-04-07 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62080916400, #    utc_start 1968-04-07 03:00:00 (Sun)
  62096644800, #      utc_end 1968-10-06 04:00:00 (Sun)
  62080902000, #  local_start 1968-04-06 23:00:00 (Sat)
  62096630400, #    local_end 1968-10-06 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62096644800, #    utc_start 1968-10-06 04:00:00 (Sun)
  62112366000, #      utc_end 1969-04-06 03:00:00 (Sun)
  62096634000, #  local_start 1968-10-06 01:00:00 (Sun)
  62112355200, #    local_end 1969-04-06 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62112366000, #    utc_start 1969-04-06 03:00:00 (Sun)
  62128094400, #      utc_end 1969-10-05 04:00:00 (Sun)
  62112351600, #  local_start 1969-04-05 23:00:00 (Sat)
  62128080000, #    local_end 1969-10-05 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62128094400, #    utc_start 1969-10-05 04:00:00 (Sun)
  62263825200, #      utc_end 1974-01-23 03:00:00 (Wed)
  62128083600, #  local_start 1969-10-05 01:00:00 (Sun)
  62263814400, #    local_end 1974-01-23 00:00:00 (Wed)
  -10800,
  0,
  'ART',
      ],
      [
  62263825200, #    utc_start 1974-01-23 03:00:00 (Wed)
  62272288800, #      utc_end 1974-05-01 02:00:00 (Wed)
  62263818000, #  local_start 1974-01-23 01:00:00 (Wed)
  62272281600, #    local_end 1974-05-01 00:00:00 (Wed)
  -7200,
  1,
  'ARST',
      ],
      [
  62272288800, #    utc_start 1974-05-01 02:00:00 (Wed)
  62732631600, #      utc_end 1988-12-01 03:00:00 (Thu)
  62272278000, #  local_start 1974-04-30 23:00:00 (Tue)
  62732620800, #    local_end 1988-12-01 00:00:00 (Thu)
  -10800,
  0,
  'ART',
      ],
      [
  62732631600, #    utc_start 1988-12-01 03:00:00 (Thu)
  62740749600, #      utc_end 1989-03-05 02:00:00 (Sun)
  62732624400, #  local_start 1988-12-01 01:00:00 (Thu)
  62740742400, #    local_end 1989-03-05 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62740749600, #    utc_start 1989-03-05 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62740738800, #  local_start 1989-03-04 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62772199200, #      utc_end 1990-03-04 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62772192000, #    local_end 1990-03-04 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62772199200, #    utc_start 1990-03-04 02:00:00 (Sun)
  62792161200, #      utc_end 1990-10-21 03:00:00 (Sun)
  62772188400, #  local_start 1990-03-03 23:00:00 (Sat)
  62792150400, #    local_end 1990-10-21 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62792161200, #    utc_start 1990-10-21 03:00:00 (Sun)
  62803476000, #      utc_end 1991-03-01 02:00:00 (Fri)
  62792154000, #  local_start 1990-10-21 01:00:00 (Sun)
  62803468800, #    local_end 1991-03-01 00:00:00 (Fri)
  -7200,
  1,
  'ARST',
      ],
      [
  62803476000, #    utc_start 1991-03-01 02:00:00 (Fri)
  62809272000, #      utc_end 1991-05-07 04:00:00 (Tue)
  62803461600, #  local_start 1991-02-28 22:00:00 (Thu)
  62809257600, #    local_end 1991-05-07 00:00:00 (Tue)
  -14400,
  0,
  'WART',
      ],
      [
  62809272000, #    utc_start 1991-05-07 04:00:00 (Tue)
  62823610800, #      utc_end 1991-10-20 03:00:00 (Sun)
  62809261200, #  local_start 1991-05-07 01:00:00 (Tue)
  62823600000, #    local_end 1991-10-20 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62823610800, #    utc_start 1991-10-20 03:00:00 (Sun)
  62835098400, #      utc_end 1992-03-01 02:00:00 (Sun)
  62823603600, #  local_start 1991-10-20 01:00:00 (Sun)
  62835091200, #    local_end 1992-03-01 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62835098400, #    utc_start 1992-03-01 02:00:00 (Sun)
  62855060400, #      utc_end 1992-10-18 03:00:00 (Sun)
  62835087600, #  local_start 1992-02-29 23:00:00 (Sat)
  62855049600, #    local_end 1992-10-18 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62855060400, #    utc_start 1992-10-18 03:00:00 (Sun)
  62867152800, #      utc_end 1993-03-07 02:00:00 (Sun)
  62855053200, #  local_start 1992-10-18 01:00:00 (Sun)
  62867145600, #    local_end 1993-03-07 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62867152800, #    utc_start 1993-03-07 02:00:00 (Sun)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  62867142000, #  local_start 1993-03-06 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087735600, #      utc_end 2000-03-03 03:00:00 (Fri)
  63074592000, #  local_start 1999-10-03 00:00:00 (Sun)
  63087724800, #    local_end 2000-03-03 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  63087735600, #    utc_start 2000-03-03 03:00:00 (Fri)
  63221655600, #      utc_end 2004-05-31 03:00:00 (Mon)
  63087724800, #  local_start 2000-03-03 00:00:00 (Fri)
  63221644800, #    local_end 2004-05-31 00:00:00 (Mon)
  -10800,
  0,
  'ART',
      ],
      [
  63221655600, #    utc_start 2004-05-31 03:00:00 (Mon)
  63226411200, #      utc_end 2004-07-25 04:00:00 (Sun)
  63221641200, #  local_start 2004-05-30 23:00:00 (Sun)
  63226396800, #    local_end 2004-07-25 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  63226411200, #    utc_start 2004-07-25 04:00:00 (Sun)
  63334666800, #      utc_end 2007-12-30 03:00:00 (Sun)
  63226400400, #  local_start 2004-07-25 01:00:00 (Sun)
  63334656000, #    local_end 2007-12-30 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63334666800, #    utc_start 2007-12-30 03:00:00 (Sun)
  63341316000, #      utc_end 2008-03-16 02:00:00 (Sun)
  63334659600, #  local_start 2007-12-30 01:00:00 (Sun)
  63341308800, #    local_end 2008-03-16 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  63341316000, #    utc_start 2008-03-16 02:00:00 (Sun)
  63359982000, #      utc_end 2008-10-18 03:00:00 (Sat)
  63341305200, #  local_start 2008-03-15 23:00:00 (Sat)
  63359971200, #    local_end 2008-10-18 00:00:00 (Sat)
  -10800,
  0,
  'ART',
      ],
      [
  63359982000, #    utc_start 2008-10-18 03:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63359971200, #  local_start 2008-10-18 00:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'ART',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {28}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ARGENTINA_SAN_JUAN

    $main::fatpacked{"DateTime/TimeZone/America/Argentina/San_Luis.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ARGENTINA_SAN_LUIS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Argentina::San_Luis;
  $DateTime::TimeZone::America::Argentina::San_Luis::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Argentina::San_Luis::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59763587124, #      utc_end 1894-10-31 04:25:24 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59763571200, #    local_end 1894-10-31 00:00:00 (Wed)
  -15924,
  0,
  'LMT',
      ],
      [
  59763587124, #    utc_start 1894-10-31 04:25:24 (Wed)
  60568229808, #      utc_end 1920-05-01 04:16:48 (Sat)
  59763571716, #  local_start 1894-10-31 00:08:36 (Wed)
  60568214400, #    local_end 1920-05-01 00:00:00 (Sat)
  -15408,
  0,
  'CMT',
      ],
      [
  60568229808, #    utc_start 1920-05-01 04:16:48 (Sat)
  60902251200, #      utc_end 1930-12-01 04:00:00 (Mon)
  60568215408, #  local_start 1920-05-01 00:16:48 (Sat)
  60902236800, #    local_end 1930-12-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  60902251200, #    utc_start 1930-12-01 04:00:00 (Mon)
  60912702000, #      utc_end 1931-04-01 03:00:00 (Wed)
  60902240400, #  local_start 1930-12-01 01:00:00 (Mon)
  60912691200, #    local_end 1931-04-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60912702000, #    utc_start 1931-04-01 03:00:00 (Wed)
  60929726400, #      utc_end 1931-10-15 04:00:00 (Thu)
  60912687600, #  local_start 1931-03-31 23:00:00 (Tue)
  60929712000, #    local_end 1931-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  60929726400, #    utc_start 1931-10-15 04:00:00 (Thu)
  60941646000, #      utc_end 1932-03-01 03:00:00 (Tue)
  60929715600, #  local_start 1931-10-15 01:00:00 (Thu)
  60941635200, #    local_end 1932-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  60941646000, #    utc_start 1932-03-01 03:00:00 (Tue)
  60962817600, #      utc_end 1932-11-01 04:00:00 (Tue)
  60941631600, #  local_start 1932-02-29 23:00:00 (Mon)
  60962803200, #    local_end 1932-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  60962817600, #    utc_start 1932-11-01 04:00:00 (Tue)
  60973182000, #      utc_end 1933-03-01 03:00:00 (Wed)
  60962806800, #  local_start 1932-11-01 01:00:00 (Tue)
  60973171200, #    local_end 1933-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60973182000, #    utc_start 1933-03-01 03:00:00 (Wed)
  60994353600, #      utc_end 1933-11-01 04:00:00 (Wed)
  60973167600, #  local_start 1933-02-28 23:00:00 (Tue)
  60994339200, #    local_end 1933-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  60994353600, #    utc_start 1933-11-01 04:00:00 (Wed)
  61004718000, #      utc_end 1934-03-01 03:00:00 (Thu)
  60994342800, #  local_start 1933-11-01 01:00:00 (Wed)
  61004707200, #    local_end 1934-03-01 00:00:00 (Thu)
  -10800,
  1,
  'ARST',
      ],
      [
  61004718000, #    utc_start 1934-03-01 03:00:00 (Thu)
  61025889600, #      utc_end 1934-11-01 04:00:00 (Thu)
  61004703600, #  local_start 1934-02-28 23:00:00 (Wed)
  61025875200, #    local_end 1934-11-01 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61025889600, #    utc_start 1934-11-01 04:00:00 (Thu)
  61036254000, #      utc_end 1935-03-01 03:00:00 (Fri)
  61025878800, #  local_start 1934-11-01 01:00:00 (Thu)
  61036243200, #    local_end 1935-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61036254000, #    utc_start 1935-03-01 03:00:00 (Fri)
  61057425600, #      utc_end 1935-11-01 04:00:00 (Fri)
  61036239600, #  local_start 1935-02-28 23:00:00 (Thu)
  61057411200, #    local_end 1935-11-01 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61057425600, #    utc_start 1935-11-01 04:00:00 (Fri)
  61067876400, #      utc_end 1936-03-01 03:00:00 (Sun)
  61057414800, #  local_start 1935-11-01 01:00:00 (Fri)
  61067865600, #    local_end 1936-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61067876400, #    utc_start 1936-03-01 03:00:00 (Sun)
  61089048000, #      utc_end 1936-11-01 04:00:00 (Sun)
  61067862000, #  local_start 1936-02-29 23:00:00 (Sat)
  61089033600, #    local_end 1936-11-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61089048000, #    utc_start 1936-11-01 04:00:00 (Sun)
  61099412400, #      utc_end 1937-03-01 03:00:00 (Mon)
  61089037200, #  local_start 1936-11-01 01:00:00 (Sun)
  61099401600, #    local_end 1937-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61099412400, #    utc_start 1937-03-01 03:00:00 (Mon)
  61120584000, #      utc_end 1937-11-01 04:00:00 (Mon)
  61099398000, #  local_start 1937-02-28 23:00:00 (Sun)
  61120569600, #    local_end 1937-11-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61120584000, #    utc_start 1937-11-01 04:00:00 (Mon)
  61130948400, #      utc_end 1938-03-01 03:00:00 (Tue)
  61120573200, #  local_start 1937-11-01 01:00:00 (Mon)
  61130937600, #    local_end 1938-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61130948400, #    utc_start 1938-03-01 03:00:00 (Tue)
  61152120000, #      utc_end 1938-11-01 04:00:00 (Tue)
  61130934000, #  local_start 1938-02-28 23:00:00 (Mon)
  61152105600, #    local_end 1938-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61152120000, #    utc_start 1938-11-01 04:00:00 (Tue)
  61162484400, #      utc_end 1939-03-01 03:00:00 (Wed)
  61152109200, #  local_start 1938-11-01 01:00:00 (Tue)
  61162473600, #    local_end 1939-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  61162484400, #    utc_start 1939-03-01 03:00:00 (Wed)
  61183656000, #      utc_end 1939-11-01 04:00:00 (Wed)
  61162470000, #  local_start 1939-02-28 23:00:00 (Tue)
  61183641600, #    local_end 1939-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61183656000, #    utc_start 1939-11-01 04:00:00 (Wed)
  61194106800, #      utc_end 1940-03-01 03:00:00 (Fri)
  61183645200, #  local_start 1939-11-01 01:00:00 (Wed)
  61194096000, #    local_end 1940-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61194106800, #    utc_start 1940-03-01 03:00:00 (Fri)
  61204651200, #      utc_end 1940-07-01 04:00:00 (Mon)
  61194092400, #  local_start 1940-02-29 23:00:00 (Thu)
  61204636800, #    local_end 1940-07-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61204651200, #    utc_start 1940-07-01 04:00:00 (Mon)
  61234801200, #      utc_end 1941-06-15 03:00:00 (Sun)
  61204640400, #  local_start 1940-07-01 01:00:00 (Mon)
  61234790400, #    local_end 1941-06-15 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61234801200, #    utc_start 1941-06-15 03:00:00 (Sun)
  61245345600, #      utc_end 1941-10-15 04:00:00 (Wed)
  61234786800, #  local_start 1941-06-14 23:00:00 (Sat)
  61245331200, #    local_end 1941-10-15 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61245345600, #    utc_start 1941-10-15 04:00:00 (Wed)
  61301934000, #      utc_end 1943-08-01 03:00:00 (Sun)
  61245334800, #  local_start 1941-10-15 01:00:00 (Wed)
  61301923200, #    local_end 1943-08-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61301934000, #    utc_start 1943-08-01 03:00:00 (Sun)
  61308417600, #      utc_end 1943-10-15 04:00:00 (Fri)
  61301919600, #  local_start 1943-07-31 23:00:00 (Sat)
  61308403200, #    local_end 1943-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61308417600, #    utc_start 1943-10-15 04:00:00 (Fri)
  61383409200, #      utc_end 1946-03-01 03:00:00 (Fri)
  61308406800, #  local_start 1943-10-15 01:00:00 (Fri)
  61383398400, #    local_end 1946-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61383409200, #    utc_start 1946-03-01 03:00:00 (Fri)
  61401902400, #      utc_end 1946-10-01 04:00:00 (Tue)
  61383394800, #  local_start 1946-02-28 23:00:00 (Thu)
  61401888000, #    local_end 1946-10-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61401902400, #    utc_start 1946-10-01 04:00:00 (Tue)
  61938356400, #      utc_end 1963-10-01 03:00:00 (Tue)
  61401891600, #  local_start 1946-10-01 01:00:00 (Tue)
  61938345600, #    local_end 1963-10-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61938356400, #    utc_start 1963-10-01 03:00:00 (Tue)
  61944840000, #      utc_end 1963-12-15 04:00:00 (Sun)
  61938342000, #  local_start 1963-09-30 23:00:00 (Mon)
  61944825600, #    local_end 1963-12-15 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61944840000, #    utc_start 1963-12-15 04:00:00 (Sun)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944829200, #  local_start 1963-12-15 01:00:00 (Sun)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61971192000, #      utc_end 1964-10-15 04:00:00 (Thu)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61971177600, #    local_end 1964-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61971192000, #    utc_start 1964-10-15 04:00:00 (Thu)
  61983025200, #      utc_end 1965-03-01 03:00:00 (Mon)
  61971181200, #  local_start 1964-10-15 01:00:00 (Thu)
  61983014400, #    local_end 1965-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61983025200, #    utc_start 1965-03-01 03:00:00 (Mon)
  62002728000, #      utc_end 1965-10-15 04:00:00 (Fri)
  61983010800, #  local_start 1965-02-28 23:00:00 (Sun)
  62002713600, #    local_end 1965-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  62002728000, #    utc_start 1965-10-15 04:00:00 (Fri)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62002717200, #  local_start 1965-10-15 01:00:00 (Fri)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62034264000, #      utc_end 1966-10-15 04:00:00 (Sat)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62034249600, #    local_end 1966-10-15 00:00:00 (Sat)
  -14400,
  0,
  'ART',
      ],
      [
  62034264000, #    utc_start 1966-10-15 04:00:00 (Sat)
  62048862000, #      utc_end 1967-04-02 03:00:00 (Sun)
  62034253200, #  local_start 1966-10-15 01:00:00 (Sat)
  62048851200, #    local_end 1967-04-02 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62048862000, #    utc_start 1967-04-02 03:00:00 (Sun)
  62064590400, #      utc_end 1967-10-01 04:00:00 (Sun)
  62048847600, #  local_start 1967-04-01 23:00:00 (Sat)
  62064576000, #    local_end 1967-10-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62064590400, #    utc_start 1967-10-01 04:00:00 (Sun)
  62080916400, #      utc_end 1968-04-07 03:00:00 (Sun)
  62064579600, #  local_start 1967-10-01 01:00:00 (Sun)
  62080905600, #    local_end 1968-04-07 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62080916400, #    utc_start 1968-04-07 03:00:00 (Sun)
  62096644800, #      utc_end 1968-10-06 04:00:00 (Sun)
  62080902000, #  local_start 1968-04-06 23:00:00 (Sat)
  62096630400, #    local_end 1968-10-06 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62096644800, #    utc_start 1968-10-06 04:00:00 (Sun)
  62112366000, #      utc_end 1969-04-06 03:00:00 (Sun)
  62096634000, #  local_start 1968-10-06 01:00:00 (Sun)
  62112355200, #    local_end 1969-04-06 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62112366000, #    utc_start 1969-04-06 03:00:00 (Sun)
  62128094400, #      utc_end 1969-10-05 04:00:00 (Sun)
  62112351600, #  local_start 1969-04-05 23:00:00 (Sat)
  62128080000, #    local_end 1969-10-05 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62128094400, #    utc_start 1969-10-05 04:00:00 (Sun)
  62263825200, #      utc_end 1974-01-23 03:00:00 (Wed)
  62128083600, #  local_start 1969-10-05 01:00:00 (Sun)
  62263814400, #    local_end 1974-01-23 00:00:00 (Wed)
  -10800,
  0,
  'ART',
      ],
      [
  62263825200, #    utc_start 1974-01-23 03:00:00 (Wed)
  62272288800, #      utc_end 1974-05-01 02:00:00 (Wed)
  62263818000, #  local_start 1974-01-23 01:00:00 (Wed)
  62272281600, #    local_end 1974-05-01 00:00:00 (Wed)
  -7200,
  1,
  'ARST',
      ],
      [
  62272288800, #    utc_start 1974-05-01 02:00:00 (Wed)
  62732631600, #      utc_end 1988-12-01 03:00:00 (Thu)
  62272278000, #  local_start 1974-04-30 23:00:00 (Tue)
  62732620800, #    local_end 1988-12-01 00:00:00 (Thu)
  -10800,
  0,
  'ART',
      ],
      [
  62732631600, #    utc_start 1988-12-01 03:00:00 (Thu)
  62740749600, #      utc_end 1989-03-05 02:00:00 (Sun)
  62732624400, #  local_start 1988-12-01 01:00:00 (Thu)
  62740742400, #    local_end 1989-03-05 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62740749600, #    utc_start 1989-03-05 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62740738800, #  local_start 1989-03-04 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62766842400, #      utc_end 1990-01-01 02:00:00 (Mon)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62766835200, #    local_end 1990-01-01 00:00:00 (Mon)
  -7200,
  1,
  'ARST',
      ],
      [
  62766842400, #    utc_start 1990-01-01 02:00:00 (Mon)
  62773063200, #      utc_end 1990-03-14 02:00:00 (Wed)
  62766835200, #  local_start 1990-01-01 00:00:00 (Mon)
  62773056000, #    local_end 1990-03-14 00:00:00 (Wed)
  -7200,
  1,
  'ARST',
      ],
      [
  62773063200, #    utc_start 1990-03-14 02:00:00 (Wed)
  62791646400, #      utc_end 1990-10-15 04:00:00 (Mon)
  62773048800, #  local_start 1990-03-13 22:00:00 (Tue)
  62791632000, #    local_end 1990-10-15 00:00:00 (Mon)
  -14400,
  0,
  'WART',
      ],
      [
  62791646400, #    utc_start 1990-10-15 04:00:00 (Mon)
  62803479600, #      utc_end 1991-03-01 03:00:00 (Fri)
  62791635600, #  local_start 1990-10-15 01:00:00 (Mon)
  62803468800, #    local_end 1991-03-01 00:00:00 (Fri)
  -10800,
  1,
  'WARST',
      ],
      [
  62803479600, #    utc_start 1991-03-01 03:00:00 (Fri)
  62811432000, #      utc_end 1991-06-01 04:00:00 (Sat)
  62803465200, #  local_start 1991-02-28 23:00:00 (Thu)
  62811417600, #    local_end 1991-06-01 00:00:00 (Sat)
  -14400,
  0,
  'WART',
      ],
      [
  62811432000, #    utc_start 1991-06-01 04:00:00 (Sat)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  62811421200, #  local_start 1991-06-01 01:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087735600, #      utc_end 2000-03-03 03:00:00 (Fri)
  63074592000, #  local_start 1999-10-03 00:00:00 (Sun)
  63087724800, #    local_end 2000-03-03 00:00:00 (Fri)
  -10800,
  1,
  'WARST',
      ],
      [
  63087735600, #    utc_start 2000-03-03 03:00:00 (Fri)
  63221655600, #      utc_end 2004-05-31 03:00:00 (Mon)
  63087724800, #  local_start 2000-03-03 00:00:00 (Fri)
  63221644800, #    local_end 2004-05-31 00:00:00 (Mon)
  -10800,
  0,
  'ART',
      ],
      [
  63221655600, #    utc_start 2004-05-31 03:00:00 (Mon)
  63226411200, #      utc_end 2004-07-25 04:00:00 (Sun)
  63221641200, #  local_start 2004-05-30 23:00:00 (Sun)
  63226396800, #    local_end 2004-07-25 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  63226411200, #    utc_start 2004-07-25 04:00:00 (Sun)
  63334666800, #      utc_end 2007-12-30 03:00:00 (Sun)
  63226400400, #  local_start 2004-07-25 01:00:00 (Sun)
  63334656000, #    local_end 2007-12-30 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63334666800, #    utc_start 2007-12-30 03:00:00 (Sun)
  63336564000, #      utc_end 2008-01-21 02:00:00 (Mon)
  63334659600, #  local_start 2007-12-30 01:00:00 (Sun)
  63336556800, #    local_end 2008-01-21 00:00:00 (Mon)
  -7200,
  1,
  'ARST',
      ],
      [
  63336564000, #    utc_start 2008-01-21 02:00:00 (Mon)
  63340714800, #      utc_end 2008-03-09 03:00:00 (Sun)
  63336553200, #  local_start 2008-01-20 23:00:00 (Sun)
  63340704000, #    local_end 2008-03-09 00:00:00 (Sun)
  -10800,
  1,
  'WARST',
      ],
      [
  63340714800, #    utc_start 2008-03-09 03:00:00 (Sun)
  63359467200, #      utc_end 2008-10-12 04:00:00 (Sun)
  63340700400, #  local_start 2008-03-08 23:00:00 (Sat)
  63359452800, #    local_end 2008-10-12 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  63359467200, #    utc_start 2008-10-12 04:00:00 (Sun)
  63372164400, #      utc_end 2009-03-08 03:00:00 (Sun)
  63359456400, #  local_start 2008-10-12 01:00:00 (Sun)
  63372153600, #    local_end 2009-03-08 00:00:00 (Sun)
  -10800,
  1,
  'WARST',
      ],
      [
  63372164400, #    utc_start 2009-03-08 03:00:00 (Sun)
  63390916800, #      utc_end 2009-10-11 04:00:00 (Sun)
  63372150000, #  local_start 2009-03-07 23:00:00 (Sat)
  63390902400, #    local_end 2009-10-11 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  63390916800, #    utc_start 2009-10-11 04:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63390906000, #  local_start 2009-10-11 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'ART',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {29}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ARGENTINA_SAN_LUIS

    $main::fatpacked{"DateTime/TimeZone/America/Argentina/Tucuman.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ARGENTINA_TUCUMAN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Argentina::Tucuman;
  $DateTime::TimeZone::America::Argentina::Tucuman::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Argentina::Tucuman::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59763586852, #      utc_end 1894-10-31 04:20:52 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59763571200, #    local_end 1894-10-31 00:00:00 (Wed)
  -15652,
  0,
  'LMT',
      ],
      [
  59763586852, #    utc_start 1894-10-31 04:20:52 (Wed)
  60568229808, #      utc_end 1920-05-01 04:16:48 (Sat)
  59763571444, #  local_start 1894-10-31 00:04:04 (Wed)
  60568214400, #    local_end 1920-05-01 00:00:00 (Sat)
  -15408,
  0,
  'CMT',
      ],
      [
  60568229808, #    utc_start 1920-05-01 04:16:48 (Sat)
  60902251200, #      utc_end 1930-12-01 04:00:00 (Mon)
  60568215408, #  local_start 1920-05-01 00:16:48 (Sat)
  60902236800, #    local_end 1930-12-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  60902251200, #    utc_start 1930-12-01 04:00:00 (Mon)
  60912702000, #      utc_end 1931-04-01 03:00:00 (Wed)
  60902240400, #  local_start 1930-12-01 01:00:00 (Mon)
  60912691200, #    local_end 1931-04-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60912702000, #    utc_start 1931-04-01 03:00:00 (Wed)
  60929726400, #      utc_end 1931-10-15 04:00:00 (Thu)
  60912687600, #  local_start 1931-03-31 23:00:00 (Tue)
  60929712000, #    local_end 1931-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  60929726400, #    utc_start 1931-10-15 04:00:00 (Thu)
  60941646000, #      utc_end 1932-03-01 03:00:00 (Tue)
  60929715600, #  local_start 1931-10-15 01:00:00 (Thu)
  60941635200, #    local_end 1932-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  60941646000, #    utc_start 1932-03-01 03:00:00 (Tue)
  60962817600, #      utc_end 1932-11-01 04:00:00 (Tue)
  60941631600, #  local_start 1932-02-29 23:00:00 (Mon)
  60962803200, #    local_end 1932-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  60962817600, #    utc_start 1932-11-01 04:00:00 (Tue)
  60973182000, #      utc_end 1933-03-01 03:00:00 (Wed)
  60962806800, #  local_start 1932-11-01 01:00:00 (Tue)
  60973171200, #    local_end 1933-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60973182000, #    utc_start 1933-03-01 03:00:00 (Wed)
  60994353600, #      utc_end 1933-11-01 04:00:00 (Wed)
  60973167600, #  local_start 1933-02-28 23:00:00 (Tue)
  60994339200, #    local_end 1933-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  60994353600, #    utc_start 1933-11-01 04:00:00 (Wed)
  61004718000, #      utc_end 1934-03-01 03:00:00 (Thu)
  60994342800, #  local_start 1933-11-01 01:00:00 (Wed)
  61004707200, #    local_end 1934-03-01 00:00:00 (Thu)
  -10800,
  1,
  'ARST',
      ],
      [
  61004718000, #    utc_start 1934-03-01 03:00:00 (Thu)
  61025889600, #      utc_end 1934-11-01 04:00:00 (Thu)
  61004703600, #  local_start 1934-02-28 23:00:00 (Wed)
  61025875200, #    local_end 1934-11-01 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61025889600, #    utc_start 1934-11-01 04:00:00 (Thu)
  61036254000, #      utc_end 1935-03-01 03:00:00 (Fri)
  61025878800, #  local_start 1934-11-01 01:00:00 (Thu)
  61036243200, #    local_end 1935-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61036254000, #    utc_start 1935-03-01 03:00:00 (Fri)
  61057425600, #      utc_end 1935-11-01 04:00:00 (Fri)
  61036239600, #  local_start 1935-02-28 23:00:00 (Thu)
  61057411200, #    local_end 1935-11-01 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61057425600, #    utc_start 1935-11-01 04:00:00 (Fri)
  61067876400, #      utc_end 1936-03-01 03:00:00 (Sun)
  61057414800, #  local_start 1935-11-01 01:00:00 (Fri)
  61067865600, #    local_end 1936-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61067876400, #    utc_start 1936-03-01 03:00:00 (Sun)
  61089048000, #      utc_end 1936-11-01 04:00:00 (Sun)
  61067862000, #  local_start 1936-02-29 23:00:00 (Sat)
  61089033600, #    local_end 1936-11-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61089048000, #    utc_start 1936-11-01 04:00:00 (Sun)
  61099412400, #      utc_end 1937-03-01 03:00:00 (Mon)
  61089037200, #  local_start 1936-11-01 01:00:00 (Sun)
  61099401600, #    local_end 1937-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61099412400, #    utc_start 1937-03-01 03:00:00 (Mon)
  61120584000, #      utc_end 1937-11-01 04:00:00 (Mon)
  61099398000, #  local_start 1937-02-28 23:00:00 (Sun)
  61120569600, #    local_end 1937-11-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61120584000, #    utc_start 1937-11-01 04:00:00 (Mon)
  61130948400, #      utc_end 1938-03-01 03:00:00 (Tue)
  61120573200, #  local_start 1937-11-01 01:00:00 (Mon)
  61130937600, #    local_end 1938-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61130948400, #    utc_start 1938-03-01 03:00:00 (Tue)
  61152120000, #      utc_end 1938-11-01 04:00:00 (Tue)
  61130934000, #  local_start 1938-02-28 23:00:00 (Mon)
  61152105600, #    local_end 1938-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61152120000, #    utc_start 1938-11-01 04:00:00 (Tue)
  61162484400, #      utc_end 1939-03-01 03:00:00 (Wed)
  61152109200, #  local_start 1938-11-01 01:00:00 (Tue)
  61162473600, #    local_end 1939-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  61162484400, #    utc_start 1939-03-01 03:00:00 (Wed)
  61183656000, #      utc_end 1939-11-01 04:00:00 (Wed)
  61162470000, #  local_start 1939-02-28 23:00:00 (Tue)
  61183641600, #    local_end 1939-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61183656000, #    utc_start 1939-11-01 04:00:00 (Wed)
  61194106800, #      utc_end 1940-03-01 03:00:00 (Fri)
  61183645200, #  local_start 1939-11-01 01:00:00 (Wed)
  61194096000, #    local_end 1940-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61194106800, #    utc_start 1940-03-01 03:00:00 (Fri)
  61204651200, #      utc_end 1940-07-01 04:00:00 (Mon)
  61194092400, #  local_start 1940-02-29 23:00:00 (Thu)
  61204636800, #    local_end 1940-07-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61204651200, #    utc_start 1940-07-01 04:00:00 (Mon)
  61234801200, #      utc_end 1941-06-15 03:00:00 (Sun)
  61204640400, #  local_start 1940-07-01 01:00:00 (Mon)
  61234790400, #    local_end 1941-06-15 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61234801200, #    utc_start 1941-06-15 03:00:00 (Sun)
  61245345600, #      utc_end 1941-10-15 04:00:00 (Wed)
  61234786800, #  local_start 1941-06-14 23:00:00 (Sat)
  61245331200, #    local_end 1941-10-15 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61245345600, #    utc_start 1941-10-15 04:00:00 (Wed)
  61301934000, #      utc_end 1943-08-01 03:00:00 (Sun)
  61245334800, #  local_start 1941-10-15 01:00:00 (Wed)
  61301923200, #    local_end 1943-08-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61301934000, #    utc_start 1943-08-01 03:00:00 (Sun)
  61308417600, #      utc_end 1943-10-15 04:00:00 (Fri)
  61301919600, #  local_start 1943-07-31 23:00:00 (Sat)
  61308403200, #    local_end 1943-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61308417600, #    utc_start 1943-10-15 04:00:00 (Fri)
  61383409200, #      utc_end 1946-03-01 03:00:00 (Fri)
  61308406800, #  local_start 1943-10-15 01:00:00 (Fri)
  61383398400, #    local_end 1946-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61383409200, #    utc_start 1946-03-01 03:00:00 (Fri)
  61401902400, #      utc_end 1946-10-01 04:00:00 (Tue)
  61383394800, #  local_start 1946-02-28 23:00:00 (Thu)
  61401888000, #    local_end 1946-10-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61401902400, #    utc_start 1946-10-01 04:00:00 (Tue)
  61938356400, #      utc_end 1963-10-01 03:00:00 (Tue)
  61401891600, #  local_start 1946-10-01 01:00:00 (Tue)
  61938345600, #    local_end 1963-10-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61938356400, #    utc_start 1963-10-01 03:00:00 (Tue)
  61944840000, #      utc_end 1963-12-15 04:00:00 (Sun)
  61938342000, #  local_start 1963-09-30 23:00:00 (Mon)
  61944825600, #    local_end 1963-12-15 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61944840000, #    utc_start 1963-12-15 04:00:00 (Sun)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944829200, #  local_start 1963-12-15 01:00:00 (Sun)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61971192000, #      utc_end 1964-10-15 04:00:00 (Thu)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61971177600, #    local_end 1964-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61971192000, #    utc_start 1964-10-15 04:00:00 (Thu)
  61983025200, #      utc_end 1965-03-01 03:00:00 (Mon)
  61971181200, #  local_start 1964-10-15 01:00:00 (Thu)
  61983014400, #    local_end 1965-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61983025200, #    utc_start 1965-03-01 03:00:00 (Mon)
  62002728000, #      utc_end 1965-10-15 04:00:00 (Fri)
  61983010800, #  local_start 1965-02-28 23:00:00 (Sun)
  62002713600, #    local_end 1965-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  62002728000, #    utc_start 1965-10-15 04:00:00 (Fri)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62002717200, #  local_start 1965-10-15 01:00:00 (Fri)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62034264000, #      utc_end 1966-10-15 04:00:00 (Sat)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62034249600, #    local_end 1966-10-15 00:00:00 (Sat)
  -14400,
  0,
  'ART',
      ],
      [
  62034264000, #    utc_start 1966-10-15 04:00:00 (Sat)
  62048862000, #      utc_end 1967-04-02 03:00:00 (Sun)
  62034253200, #  local_start 1966-10-15 01:00:00 (Sat)
  62048851200, #    local_end 1967-04-02 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62048862000, #    utc_start 1967-04-02 03:00:00 (Sun)
  62064590400, #      utc_end 1967-10-01 04:00:00 (Sun)
  62048847600, #  local_start 1967-04-01 23:00:00 (Sat)
  62064576000, #    local_end 1967-10-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62064590400, #    utc_start 1967-10-01 04:00:00 (Sun)
  62080916400, #      utc_end 1968-04-07 03:00:00 (Sun)
  62064579600, #  local_start 1967-10-01 01:00:00 (Sun)
  62080905600, #    local_end 1968-04-07 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62080916400, #    utc_start 1968-04-07 03:00:00 (Sun)
  62096644800, #      utc_end 1968-10-06 04:00:00 (Sun)
  62080902000, #  local_start 1968-04-06 23:00:00 (Sat)
  62096630400, #    local_end 1968-10-06 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62096644800, #    utc_start 1968-10-06 04:00:00 (Sun)
  62112366000, #      utc_end 1969-04-06 03:00:00 (Sun)
  62096634000, #  local_start 1968-10-06 01:00:00 (Sun)
  62112355200, #    local_end 1969-04-06 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62112366000, #    utc_start 1969-04-06 03:00:00 (Sun)
  62128094400, #      utc_end 1969-10-05 04:00:00 (Sun)
  62112351600, #  local_start 1969-04-05 23:00:00 (Sat)
  62128080000, #    local_end 1969-10-05 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62128094400, #    utc_start 1969-10-05 04:00:00 (Sun)
  62263825200, #      utc_end 1974-01-23 03:00:00 (Wed)
  62128083600, #  local_start 1969-10-05 01:00:00 (Sun)
  62263814400, #    local_end 1974-01-23 00:00:00 (Wed)
  -10800,
  0,
  'ART',
      ],
      [
  62263825200, #    utc_start 1974-01-23 03:00:00 (Wed)
  62272288800, #      utc_end 1974-05-01 02:00:00 (Wed)
  62263818000, #  local_start 1974-01-23 01:00:00 (Wed)
  62272281600, #    local_end 1974-05-01 00:00:00 (Wed)
  -7200,
  1,
  'ARST',
      ],
      [
  62272288800, #    utc_start 1974-05-01 02:00:00 (Wed)
  62732631600, #      utc_end 1988-12-01 03:00:00 (Thu)
  62272278000, #  local_start 1974-04-30 23:00:00 (Tue)
  62732620800, #    local_end 1988-12-01 00:00:00 (Thu)
  -10800,
  0,
  'ART',
      ],
      [
  62732631600, #    utc_start 1988-12-01 03:00:00 (Thu)
  62740749600, #      utc_end 1989-03-05 02:00:00 (Sun)
  62732624400, #  local_start 1988-12-01 01:00:00 (Thu)
  62740742400, #    local_end 1989-03-05 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62740749600, #    utc_start 1989-03-05 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62740738800, #  local_start 1989-03-04 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62772199200, #      utc_end 1990-03-04 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62772192000, #    local_end 1990-03-04 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62772199200, #    utc_start 1990-03-04 02:00:00 (Sun)
  62792161200, #      utc_end 1990-10-21 03:00:00 (Sun)
  62772188400, #  local_start 1990-03-03 23:00:00 (Sat)
  62792150400, #    local_end 1990-10-21 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62792161200, #    utc_start 1990-10-21 03:00:00 (Sun)
  62803648800, #      utc_end 1991-03-03 02:00:00 (Sun)
  62792154000, #  local_start 1990-10-21 01:00:00 (Sun)
  62803641600, #    local_end 1991-03-03 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62803648800, #    utc_start 1991-03-03 02:00:00 (Sun)
  62823614400, #      utc_end 1991-10-20 04:00:00 (Sun)
  62803634400, #  local_start 1991-03-02 22:00:00 (Sat)
  62823600000, #    local_end 1991-10-20 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  62823614400, #    utc_start 1991-10-20 04:00:00 (Sun)
  62835098400, #      utc_end 1992-03-01 02:00:00 (Sun)
  62823607200, #  local_start 1991-10-20 02:00:00 (Sun)
  62835091200, #    local_end 1992-03-01 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62835098400, #    utc_start 1992-03-01 02:00:00 (Sun)
  62855060400, #      utc_end 1992-10-18 03:00:00 (Sun)
  62835087600, #  local_start 1992-02-29 23:00:00 (Sat)
  62855049600, #    local_end 1992-10-18 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62855060400, #    utc_start 1992-10-18 03:00:00 (Sun)
  62867152800, #      utc_end 1993-03-07 02:00:00 (Sun)
  62855053200, #  local_start 1992-10-18 01:00:00 (Sun)
  62867145600, #    local_end 1993-03-07 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62867152800, #    utc_start 1993-03-07 02:00:00 (Sun)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  62867142000, #  local_start 1993-03-06 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087735600, #      utc_end 2000-03-03 03:00:00 (Fri)
  63074592000, #  local_start 1999-10-03 00:00:00 (Sun)
  63087724800, #    local_end 2000-03-03 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  63087735600, #    utc_start 2000-03-03 03:00:00 (Fri)
  63221742000, #      utc_end 2004-06-01 03:00:00 (Tue)
  63087724800, #  local_start 2000-03-03 00:00:00 (Fri)
  63221731200, #    local_end 2004-06-01 00:00:00 (Tue)
  -10800,
  0,
  'ART',
      ],
      [
  63221742000, #    utc_start 2004-06-01 03:00:00 (Tue)
  63222782400, #      utc_end 2004-06-13 04:00:00 (Sun)
  63221727600, #  local_start 2004-05-31 23:00:00 (Mon)
  63222768000, #    local_end 2004-06-13 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  63222782400, #    utc_start 2004-06-13 04:00:00 (Sun)
  63334666800, #      utc_end 2007-12-30 03:00:00 (Sun)
  63222771600, #  local_start 2004-06-13 01:00:00 (Sun)
  63334656000, #    local_end 2007-12-30 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63334666800, #    utc_start 2007-12-30 03:00:00 (Sun)
  63341316000, #      utc_end 2008-03-16 02:00:00 (Sun)
  63334659600, #  local_start 2007-12-30 01:00:00 (Sun)
  63341308800, #    local_end 2008-03-16 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  63341316000, #    utc_start 2008-03-16 02:00:00 (Sun)
  63360068400, #      utc_end 2008-10-19 03:00:00 (Sun)
  63341305200, #  local_start 2008-03-15 23:00:00 (Sat)
  63360057600, #    local_end 2008-10-19 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63360068400, #    utc_start 2008-10-19 03:00:00 (Sun)
  63372765600, #      utc_end 2009-03-15 02:00:00 (Sun)
  63360061200, #  local_start 2008-10-19 01:00:00 (Sun)
  63372758400, #    local_end 2009-03-15 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  63372765600, #    utc_start 2009-03-15 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63372754800, #  local_start 2009-03-14 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'ART',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {29}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ARGENTINA_TUCUMAN

    $main::fatpacked{"DateTime/TimeZone/America/Argentina/Ushuaia.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ARGENTINA_USHUAIA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Argentina::Ushuaia;
  $DateTime::TimeZone::America::Argentina::Ushuaia::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Argentina::Ushuaia::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59763587592, #      utc_end 1894-10-31 04:33:12 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59763571200, #    local_end 1894-10-31 00:00:00 (Wed)
  -16392,
  0,
  'LMT',
      ],
      [
  59763587592, #    utc_start 1894-10-31 04:33:12 (Wed)
  60568229808, #      utc_end 1920-05-01 04:16:48 (Sat)
  59763572184, #  local_start 1894-10-31 00:16:24 (Wed)
  60568214400, #    local_end 1920-05-01 00:00:00 (Sat)
  -15408,
  0,
  'CMT',
      ],
      [
  60568229808, #    utc_start 1920-05-01 04:16:48 (Sat)
  60902251200, #      utc_end 1930-12-01 04:00:00 (Mon)
  60568215408, #  local_start 1920-05-01 00:16:48 (Sat)
  60902236800, #    local_end 1930-12-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  60902251200, #    utc_start 1930-12-01 04:00:00 (Mon)
  60912702000, #      utc_end 1931-04-01 03:00:00 (Wed)
  60902240400, #  local_start 1930-12-01 01:00:00 (Mon)
  60912691200, #    local_end 1931-04-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60912702000, #    utc_start 1931-04-01 03:00:00 (Wed)
  60929726400, #      utc_end 1931-10-15 04:00:00 (Thu)
  60912687600, #  local_start 1931-03-31 23:00:00 (Tue)
  60929712000, #    local_end 1931-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  60929726400, #    utc_start 1931-10-15 04:00:00 (Thu)
  60941646000, #      utc_end 1932-03-01 03:00:00 (Tue)
  60929715600, #  local_start 1931-10-15 01:00:00 (Thu)
  60941635200, #    local_end 1932-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  60941646000, #    utc_start 1932-03-01 03:00:00 (Tue)
  60962817600, #      utc_end 1932-11-01 04:00:00 (Tue)
  60941631600, #  local_start 1932-02-29 23:00:00 (Mon)
  60962803200, #    local_end 1932-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  60962817600, #    utc_start 1932-11-01 04:00:00 (Tue)
  60973182000, #      utc_end 1933-03-01 03:00:00 (Wed)
  60962806800, #  local_start 1932-11-01 01:00:00 (Tue)
  60973171200, #    local_end 1933-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  60973182000, #    utc_start 1933-03-01 03:00:00 (Wed)
  60994353600, #      utc_end 1933-11-01 04:00:00 (Wed)
  60973167600, #  local_start 1933-02-28 23:00:00 (Tue)
  60994339200, #    local_end 1933-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  60994353600, #    utc_start 1933-11-01 04:00:00 (Wed)
  61004718000, #      utc_end 1934-03-01 03:00:00 (Thu)
  60994342800, #  local_start 1933-11-01 01:00:00 (Wed)
  61004707200, #    local_end 1934-03-01 00:00:00 (Thu)
  -10800,
  1,
  'ARST',
      ],
      [
  61004718000, #    utc_start 1934-03-01 03:00:00 (Thu)
  61025889600, #      utc_end 1934-11-01 04:00:00 (Thu)
  61004703600, #  local_start 1934-02-28 23:00:00 (Wed)
  61025875200, #    local_end 1934-11-01 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61025889600, #    utc_start 1934-11-01 04:00:00 (Thu)
  61036254000, #      utc_end 1935-03-01 03:00:00 (Fri)
  61025878800, #  local_start 1934-11-01 01:00:00 (Thu)
  61036243200, #    local_end 1935-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61036254000, #    utc_start 1935-03-01 03:00:00 (Fri)
  61057425600, #      utc_end 1935-11-01 04:00:00 (Fri)
  61036239600, #  local_start 1935-02-28 23:00:00 (Thu)
  61057411200, #    local_end 1935-11-01 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61057425600, #    utc_start 1935-11-01 04:00:00 (Fri)
  61067876400, #      utc_end 1936-03-01 03:00:00 (Sun)
  61057414800, #  local_start 1935-11-01 01:00:00 (Fri)
  61067865600, #    local_end 1936-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61067876400, #    utc_start 1936-03-01 03:00:00 (Sun)
  61089048000, #      utc_end 1936-11-01 04:00:00 (Sun)
  61067862000, #  local_start 1936-02-29 23:00:00 (Sat)
  61089033600, #    local_end 1936-11-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61089048000, #    utc_start 1936-11-01 04:00:00 (Sun)
  61099412400, #      utc_end 1937-03-01 03:00:00 (Mon)
  61089037200, #  local_start 1936-11-01 01:00:00 (Sun)
  61099401600, #    local_end 1937-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61099412400, #    utc_start 1937-03-01 03:00:00 (Mon)
  61120584000, #      utc_end 1937-11-01 04:00:00 (Mon)
  61099398000, #  local_start 1937-02-28 23:00:00 (Sun)
  61120569600, #    local_end 1937-11-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61120584000, #    utc_start 1937-11-01 04:00:00 (Mon)
  61130948400, #      utc_end 1938-03-01 03:00:00 (Tue)
  61120573200, #  local_start 1937-11-01 01:00:00 (Mon)
  61130937600, #    local_end 1938-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61130948400, #    utc_start 1938-03-01 03:00:00 (Tue)
  61152120000, #      utc_end 1938-11-01 04:00:00 (Tue)
  61130934000, #  local_start 1938-02-28 23:00:00 (Mon)
  61152105600, #    local_end 1938-11-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61152120000, #    utc_start 1938-11-01 04:00:00 (Tue)
  61162484400, #      utc_end 1939-03-01 03:00:00 (Wed)
  61152109200, #  local_start 1938-11-01 01:00:00 (Tue)
  61162473600, #    local_end 1939-03-01 00:00:00 (Wed)
  -10800,
  1,
  'ARST',
      ],
      [
  61162484400, #    utc_start 1939-03-01 03:00:00 (Wed)
  61183656000, #      utc_end 1939-11-01 04:00:00 (Wed)
  61162470000, #  local_start 1939-02-28 23:00:00 (Tue)
  61183641600, #    local_end 1939-11-01 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61183656000, #    utc_start 1939-11-01 04:00:00 (Wed)
  61194106800, #      utc_end 1940-03-01 03:00:00 (Fri)
  61183645200, #  local_start 1939-11-01 01:00:00 (Wed)
  61194096000, #    local_end 1940-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61194106800, #    utc_start 1940-03-01 03:00:00 (Fri)
  61204651200, #      utc_end 1940-07-01 04:00:00 (Mon)
  61194092400, #  local_start 1940-02-29 23:00:00 (Thu)
  61204636800, #    local_end 1940-07-01 00:00:00 (Mon)
  -14400,
  0,
  'ART',
      ],
      [
  61204651200, #    utc_start 1940-07-01 04:00:00 (Mon)
  61234801200, #      utc_end 1941-06-15 03:00:00 (Sun)
  61204640400, #  local_start 1940-07-01 01:00:00 (Mon)
  61234790400, #    local_end 1941-06-15 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61234801200, #    utc_start 1941-06-15 03:00:00 (Sun)
  61245345600, #      utc_end 1941-10-15 04:00:00 (Wed)
  61234786800, #  local_start 1941-06-14 23:00:00 (Sat)
  61245331200, #    local_end 1941-10-15 00:00:00 (Wed)
  -14400,
  0,
  'ART',
      ],
      [
  61245345600, #    utc_start 1941-10-15 04:00:00 (Wed)
  61301934000, #      utc_end 1943-08-01 03:00:00 (Sun)
  61245334800, #  local_start 1941-10-15 01:00:00 (Wed)
  61301923200, #    local_end 1943-08-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61301934000, #    utc_start 1943-08-01 03:00:00 (Sun)
  61308417600, #      utc_end 1943-10-15 04:00:00 (Fri)
  61301919600, #  local_start 1943-07-31 23:00:00 (Sat)
  61308403200, #    local_end 1943-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  61308417600, #    utc_start 1943-10-15 04:00:00 (Fri)
  61383409200, #      utc_end 1946-03-01 03:00:00 (Fri)
  61308406800, #  local_start 1943-10-15 01:00:00 (Fri)
  61383398400, #    local_end 1946-03-01 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  61383409200, #    utc_start 1946-03-01 03:00:00 (Fri)
  61401902400, #      utc_end 1946-10-01 04:00:00 (Tue)
  61383394800, #  local_start 1946-02-28 23:00:00 (Thu)
  61401888000, #    local_end 1946-10-01 00:00:00 (Tue)
  -14400,
  0,
  'ART',
      ],
      [
  61401902400, #    utc_start 1946-10-01 04:00:00 (Tue)
  61938356400, #      utc_end 1963-10-01 03:00:00 (Tue)
  61401891600, #  local_start 1946-10-01 01:00:00 (Tue)
  61938345600, #    local_end 1963-10-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  61938356400, #    utc_start 1963-10-01 03:00:00 (Tue)
  61944840000, #      utc_end 1963-12-15 04:00:00 (Sun)
  61938342000, #  local_start 1963-09-30 23:00:00 (Mon)
  61944825600, #    local_end 1963-12-15 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  61944840000, #    utc_start 1963-12-15 04:00:00 (Sun)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944829200, #  local_start 1963-12-15 01:00:00 (Sun)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61971192000, #      utc_end 1964-10-15 04:00:00 (Thu)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61971177600, #    local_end 1964-10-15 00:00:00 (Thu)
  -14400,
  0,
  'ART',
      ],
      [
  61971192000, #    utc_start 1964-10-15 04:00:00 (Thu)
  61983025200, #      utc_end 1965-03-01 03:00:00 (Mon)
  61971181200, #  local_start 1964-10-15 01:00:00 (Thu)
  61983014400, #    local_end 1965-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61983025200, #    utc_start 1965-03-01 03:00:00 (Mon)
  62002728000, #      utc_end 1965-10-15 04:00:00 (Fri)
  61983010800, #  local_start 1965-02-28 23:00:00 (Sun)
  62002713600, #    local_end 1965-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  62002728000, #    utc_start 1965-10-15 04:00:00 (Fri)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62002717200, #  local_start 1965-10-15 01:00:00 (Fri)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62034264000, #      utc_end 1966-10-15 04:00:00 (Sat)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62034249600, #    local_end 1966-10-15 00:00:00 (Sat)
  -14400,
  0,
  'ART',
      ],
      [
  62034264000, #    utc_start 1966-10-15 04:00:00 (Sat)
  62048862000, #      utc_end 1967-04-02 03:00:00 (Sun)
  62034253200, #  local_start 1966-10-15 01:00:00 (Sat)
  62048851200, #    local_end 1967-04-02 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62048862000, #    utc_start 1967-04-02 03:00:00 (Sun)
  62064590400, #      utc_end 1967-10-01 04:00:00 (Sun)
  62048847600, #  local_start 1967-04-01 23:00:00 (Sat)
  62064576000, #    local_end 1967-10-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62064590400, #    utc_start 1967-10-01 04:00:00 (Sun)
  62080916400, #      utc_end 1968-04-07 03:00:00 (Sun)
  62064579600, #  local_start 1967-10-01 01:00:00 (Sun)
  62080905600, #    local_end 1968-04-07 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62080916400, #    utc_start 1968-04-07 03:00:00 (Sun)
  62096644800, #      utc_end 1968-10-06 04:00:00 (Sun)
  62080902000, #  local_start 1968-04-06 23:00:00 (Sat)
  62096630400, #    local_end 1968-10-06 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62096644800, #    utc_start 1968-10-06 04:00:00 (Sun)
  62112366000, #      utc_end 1969-04-06 03:00:00 (Sun)
  62096634000, #  local_start 1968-10-06 01:00:00 (Sun)
  62112355200, #    local_end 1969-04-06 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62112366000, #    utc_start 1969-04-06 03:00:00 (Sun)
  62128094400, #      utc_end 1969-10-05 04:00:00 (Sun)
  62112351600, #  local_start 1969-04-05 23:00:00 (Sat)
  62128080000, #    local_end 1969-10-05 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62128094400, #    utc_start 1969-10-05 04:00:00 (Sun)
  62263825200, #      utc_end 1974-01-23 03:00:00 (Wed)
  62128083600, #  local_start 1969-10-05 01:00:00 (Sun)
  62263814400, #    local_end 1974-01-23 00:00:00 (Wed)
  -10800,
  0,
  'ART',
      ],
      [
  62263825200, #    utc_start 1974-01-23 03:00:00 (Wed)
  62272288800, #      utc_end 1974-05-01 02:00:00 (Wed)
  62263818000, #  local_start 1974-01-23 01:00:00 (Wed)
  62272281600, #    local_end 1974-05-01 00:00:00 (Wed)
  -7200,
  1,
  'ARST',
      ],
      [
  62272288800, #    utc_start 1974-05-01 02:00:00 (Wed)
  62732631600, #      utc_end 1988-12-01 03:00:00 (Thu)
  62272278000, #  local_start 1974-04-30 23:00:00 (Tue)
  62732620800, #    local_end 1988-12-01 00:00:00 (Thu)
  -10800,
  0,
  'ART',
      ],
      [
  62732631600, #    utc_start 1988-12-01 03:00:00 (Thu)
  62740749600, #      utc_end 1989-03-05 02:00:00 (Sun)
  62732624400, #  local_start 1988-12-01 01:00:00 (Thu)
  62740742400, #    local_end 1989-03-05 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62740749600, #    utc_start 1989-03-05 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62740738800, #  local_start 1989-03-04 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62772199200, #      utc_end 1990-03-04 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62772192000, #    local_end 1990-03-04 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62772199200, #    utc_start 1990-03-04 02:00:00 (Sun)
  62792161200, #      utc_end 1990-10-21 03:00:00 (Sun)
  62772188400, #  local_start 1990-03-03 23:00:00 (Sat)
  62792150400, #    local_end 1990-10-21 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62792161200, #    utc_start 1990-10-21 03:00:00 (Sun)
  62803648800, #      utc_end 1991-03-03 02:00:00 (Sun)
  62792154000, #  local_start 1990-10-21 01:00:00 (Sun)
  62803641600, #    local_end 1991-03-03 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62803648800, #    utc_start 1991-03-03 02:00:00 (Sun)
  62823610800, #      utc_end 1991-10-20 03:00:00 (Sun)
  62803638000, #  local_start 1991-03-02 23:00:00 (Sat)
  62823600000, #    local_end 1991-10-20 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62823610800, #    utc_start 1991-10-20 03:00:00 (Sun)
  62835098400, #      utc_end 1992-03-01 02:00:00 (Sun)
  62823603600, #  local_start 1991-10-20 01:00:00 (Sun)
  62835091200, #    local_end 1992-03-01 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62835098400, #    utc_start 1992-03-01 02:00:00 (Sun)
  62855060400, #      utc_end 1992-10-18 03:00:00 (Sun)
  62835087600, #  local_start 1992-02-29 23:00:00 (Sat)
  62855049600, #    local_end 1992-10-18 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  62855060400, #    utc_start 1992-10-18 03:00:00 (Sun)
  62867152800, #      utc_end 1993-03-07 02:00:00 (Sun)
  62855053200, #  local_start 1992-10-18 01:00:00 (Sun)
  62867145600, #    local_end 1993-03-07 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  62867152800, #    utc_start 1993-03-07 02:00:00 (Sun)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  62867142000, #  local_start 1993-03-06 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087735600, #      utc_end 2000-03-03 03:00:00 (Fri)
  63074592000, #  local_start 1999-10-03 00:00:00 (Sun)
  63087724800, #    local_end 2000-03-03 00:00:00 (Fri)
  -10800,
  1,
  'ARST',
      ],
      [
  63087735600, #    utc_start 2000-03-03 03:00:00 (Fri)
  63221569200, #      utc_end 2004-05-30 03:00:00 (Sun)
  63087724800, #  local_start 2000-03-03 00:00:00 (Fri)
  63221558400, #    local_end 2004-05-30 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63221569200, #    utc_start 2004-05-30 03:00:00 (Sun)
  63223387200, #      utc_end 2004-06-20 04:00:00 (Sun)
  63221554800, #  local_start 2004-05-29 23:00:00 (Sat)
  63223372800, #    local_end 2004-06-20 00:00:00 (Sun)
  -14400,
  0,
  'WART',
      ],
      [
  63223387200, #    utc_start 2004-06-20 04:00:00 (Sun)
  63334666800, #      utc_end 2007-12-30 03:00:00 (Sun)
  63223376400, #  local_start 2004-06-20 01:00:00 (Sun)
  63334656000, #    local_end 2007-12-30 00:00:00 (Sun)
  -10800,
  0,
  'ART',
      ],
      [
  63334666800, #    utc_start 2007-12-30 03:00:00 (Sun)
  63341316000, #      utc_end 2008-03-16 02:00:00 (Sun)
  63334659600, #  local_start 2007-12-30 01:00:00 (Sun)
  63341308800, #    local_end 2008-03-16 00:00:00 (Sun)
  -7200,
  1,
  'ARST',
      ],
      [
  63341316000, #    utc_start 2008-03-16 02:00:00 (Sun)
  63359982000, #      utc_end 2008-10-18 03:00:00 (Sat)
  63341305200, #  local_start 2008-03-15 23:00:00 (Sat)
  63359971200, #    local_end 2008-10-18 00:00:00 (Sat)
  -10800,
  0,
  'ART',
      ],
      [
  63359982000, #    utc_start 2008-10-18 03:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63359971200, #  local_start 2008-10-18 00:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'ART',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {28}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ARGENTINA_USHUAIA

    $main::fatpacked{"DateTime/TimeZone/America/Asuncion.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ASUNCION';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Asuncion;
  $DateTime::TimeZone::America::Asuncion::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Asuncion::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611175440, #      utc_end 1890-01-01 03:50:40 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -13840,
  0,
  'LMT',
      ],
      [
  59611175440, #    utc_start 1890-01-01 03:50:40 (Wed)
  60929293840, #      utc_end 1931-10-10 03:50:40 (Sat)
  59611161600, #  local_start 1890-01-01 00:00:00 (Wed)
  60929280000, #    local_end 1931-10-10 00:00:00 (Sat)
  -13840,
  0,
  'AMT',
      ],
      [
  60929293840, #    utc_start 1931-10-10 03:50:40 (Sat)
  62222443200, #      utc_end 1972-10-01 04:00:00 (Sun)
  60929279440, #  local_start 1931-10-09 23:50:40 (Fri)
  62222428800, #    local_end 1972-10-01 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  62222443200, #    utc_start 1972-10-01 04:00:00 (Sun)
  62269700400, #      utc_end 1974-04-01 03:00:00 (Mon)
  62222432400, #  local_start 1972-10-01 01:00:00 (Sun)
  62269689600, #    local_end 1974-04-01 00:00:00 (Mon)
  -10800,
  0,
  'PYT',
      ],
      [
  62269700400, #    utc_start 1974-04-01 03:00:00 (Mon)
  62317051200, #      utc_end 1975-10-01 04:00:00 (Wed)
  62269686000, #  local_start 1974-03-31 23:00:00 (Sun)
  62317036800, #    local_end 1975-10-01 00:00:00 (Wed)
  -14400,
  0,
  'PYT',
      ],
      [
  62317051200, #    utc_start 1975-10-01 04:00:00 (Wed)
  62330180400, #      utc_end 1976-03-01 03:00:00 (Mon)
  62317040400, #  local_start 1975-10-01 01:00:00 (Wed)
  62330169600, #    local_end 1976-03-01 00:00:00 (Mon)
  -10800,
  1,
  'PYST',
      ],
      [
  62330180400, #    utc_start 1976-03-01 03:00:00 (Mon)
  62348673600, #      utc_end 1976-10-01 04:00:00 (Fri)
  62330166000, #  local_start 1976-02-29 23:00:00 (Sun)
  62348659200, #    local_end 1976-10-01 00:00:00 (Fri)
  -14400,
  0,
  'PYT',
      ],
      [
  62348673600, #    utc_start 1976-10-01 04:00:00 (Fri)
  62361716400, #      utc_end 1977-03-01 03:00:00 (Tue)
  62348662800, #  local_start 1976-10-01 01:00:00 (Fri)
  62361705600, #    local_end 1977-03-01 00:00:00 (Tue)
  -10800,
  1,
  'PYST',
      ],
      [
  62361716400, #    utc_start 1977-03-01 03:00:00 (Tue)
  62380209600, #      utc_end 1977-10-01 04:00:00 (Sat)
  62361702000, #  local_start 1977-02-28 23:00:00 (Mon)
  62380195200, #    local_end 1977-10-01 00:00:00 (Sat)
  -14400,
  0,
  'PYT',
      ],
      [
  62380209600, #    utc_start 1977-10-01 04:00:00 (Sat)
  62393252400, #      utc_end 1978-03-01 03:00:00 (Wed)
  62380198800, #  local_start 1977-10-01 01:00:00 (Sat)
  62393241600, #    local_end 1978-03-01 00:00:00 (Wed)
  -10800,
  1,
  'PYST',
      ],
      [
  62393252400, #    utc_start 1978-03-01 03:00:00 (Wed)
  62411745600, #      utc_end 1978-10-01 04:00:00 (Sun)
  62393238000, #  local_start 1978-02-28 23:00:00 (Tue)
  62411731200, #    local_end 1978-10-01 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  62411745600, #    utc_start 1978-10-01 04:00:00 (Sun)
  62427466800, #      utc_end 1979-04-01 03:00:00 (Sun)
  62411734800, #  local_start 1978-10-01 01:00:00 (Sun)
  62427456000, #    local_end 1979-04-01 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  62427466800, #    utc_start 1979-04-01 03:00:00 (Sun)
  62443281600, #      utc_end 1979-10-01 04:00:00 (Mon)
  62427452400, #  local_start 1979-03-31 23:00:00 (Sat)
  62443267200, #    local_end 1979-10-01 00:00:00 (Mon)
  -14400,
  0,
  'PYT',
      ],
      [
  62443281600, #    utc_start 1979-10-01 04:00:00 (Mon)
  62459089200, #      utc_end 1980-04-01 03:00:00 (Tue)
  62443270800, #  local_start 1979-10-01 01:00:00 (Mon)
  62459078400, #    local_end 1980-04-01 00:00:00 (Tue)
  -10800,
  1,
  'PYST',
      ],
      [
  62459089200, #    utc_start 1980-04-01 03:00:00 (Tue)
  62474904000, #      utc_end 1980-10-01 04:00:00 (Wed)
  62459074800, #  local_start 1980-03-31 23:00:00 (Mon)
  62474889600, #    local_end 1980-10-01 00:00:00 (Wed)
  -14400,
  0,
  'PYT',
      ],
      [
  62474904000, #    utc_start 1980-10-01 04:00:00 (Wed)
  62490625200, #      utc_end 1981-04-01 03:00:00 (Wed)
  62474893200, #  local_start 1980-10-01 01:00:00 (Wed)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  -10800,
  1,
  'PYST',
      ],
      [
  62490625200, #    utc_start 1981-04-01 03:00:00 (Wed)
  62506440000, #      utc_end 1981-10-01 04:00:00 (Thu)
  62490610800, #  local_start 1981-03-31 23:00:00 (Tue)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  -14400,
  0,
  'PYT',
      ],
      [
  62506440000, #    utc_start 1981-10-01 04:00:00 (Thu)
  62522161200, #      utc_end 1982-04-01 03:00:00 (Thu)
  62506429200, #  local_start 1981-10-01 01:00:00 (Thu)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  -10800,
  1,
  'PYST',
      ],
      [
  62522161200, #    utc_start 1982-04-01 03:00:00 (Thu)
  62537976000, #      utc_end 1982-10-01 04:00:00 (Fri)
  62522146800, #  local_start 1982-03-31 23:00:00 (Wed)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  -14400,
  0,
  'PYT',
      ],
      [
  62537976000, #    utc_start 1982-10-01 04:00:00 (Fri)
  62553697200, #      utc_end 1983-04-01 03:00:00 (Fri)
  62537965200, #  local_start 1982-10-01 01:00:00 (Fri)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  -10800,
  1,
  'PYST',
      ],
      [
  62553697200, #    utc_start 1983-04-01 03:00:00 (Fri)
  62569512000, #      utc_end 1983-10-01 04:00:00 (Sat)
  62553682800, #  local_start 1983-03-31 23:00:00 (Thu)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  -14400,
  0,
  'PYT',
      ],
      [
  62569512000, #    utc_start 1983-10-01 04:00:00 (Sat)
  62585319600, #      utc_end 1984-04-01 03:00:00 (Sun)
  62569501200, #  local_start 1983-10-01 01:00:00 (Sat)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  62585319600, #    utc_start 1984-04-01 03:00:00 (Sun)
  62601134400, #      utc_end 1984-10-01 04:00:00 (Mon)
  62585305200, #  local_start 1984-03-31 23:00:00 (Sat)
  62601120000, #    local_end 1984-10-01 00:00:00 (Mon)
  -14400,
  0,
  'PYT',
      ],
      [
  62601134400, #    utc_start 1984-10-01 04:00:00 (Mon)
  62616855600, #      utc_end 1985-04-01 03:00:00 (Mon)
  62601123600, #  local_start 1984-10-01 01:00:00 (Mon)
  62616844800, #    local_end 1985-04-01 00:00:00 (Mon)
  -10800,
  1,
  'PYST',
      ],
      [
  62616855600, #    utc_start 1985-04-01 03:00:00 (Mon)
  62632670400, #      utc_end 1985-10-01 04:00:00 (Tue)
  62616841200, #  local_start 1985-03-31 23:00:00 (Sun)
  62632656000, #    local_end 1985-10-01 00:00:00 (Tue)
  -14400,
  0,
  'PYT',
      ],
      [
  62632670400, #    utc_start 1985-10-01 04:00:00 (Tue)
  62648391600, #      utc_end 1986-04-01 03:00:00 (Tue)
  62632659600, #  local_start 1985-10-01 01:00:00 (Tue)
  62648380800, #    local_end 1986-04-01 00:00:00 (Tue)
  -10800,
  1,
  'PYST',
      ],
      [
  62648391600, #    utc_start 1986-04-01 03:00:00 (Tue)
  62664206400, #      utc_end 1986-10-01 04:00:00 (Wed)
  62648377200, #  local_start 1986-03-31 23:00:00 (Mon)
  62664192000, #    local_end 1986-10-01 00:00:00 (Wed)
  -14400,
  0,
  'PYT',
      ],
      [
  62664206400, #    utc_start 1986-10-01 04:00:00 (Wed)
  62679927600, #      utc_end 1987-04-01 03:00:00 (Wed)
  62664195600, #  local_start 1986-10-01 01:00:00 (Wed)
  62679916800, #    local_end 1987-04-01 00:00:00 (Wed)
  -10800,
  1,
  'PYST',
      ],
      [
  62679927600, #    utc_start 1987-04-01 03:00:00 (Wed)
  62695742400, #      utc_end 1987-10-01 04:00:00 (Thu)
  62679913200, #  local_start 1987-03-31 23:00:00 (Tue)
  62695728000, #    local_end 1987-10-01 00:00:00 (Thu)
  -14400,
  0,
  'PYT',
      ],
      [
  62695742400, #    utc_start 1987-10-01 04:00:00 (Thu)
  62711550000, #      utc_end 1988-04-01 03:00:00 (Fri)
  62695731600, #  local_start 1987-10-01 01:00:00 (Thu)
  62711539200, #    local_end 1988-04-01 00:00:00 (Fri)
  -10800,
  1,
  'PYST',
      ],
      [
  62711550000, #    utc_start 1988-04-01 03:00:00 (Fri)
  62727364800, #      utc_end 1988-10-01 04:00:00 (Sat)
  62711535600, #  local_start 1988-03-31 23:00:00 (Thu)
  62727350400, #    local_end 1988-10-01 00:00:00 (Sat)
  -14400,
  0,
  'PYT',
      ],
      [
  62727364800, #    utc_start 1988-10-01 04:00:00 (Sat)
  62743086000, #      utc_end 1989-04-01 03:00:00 (Sat)
  62727354000, #  local_start 1988-10-01 01:00:00 (Sat)
  62743075200, #    local_end 1989-04-01 00:00:00 (Sat)
  -10800,
  1,
  'PYST',
      ],
      [
  62743086000, #    utc_start 1989-04-01 03:00:00 (Sat)
  62760715200, #      utc_end 1989-10-22 04:00:00 (Sun)
  62743071600, #  local_start 1989-03-31 23:00:00 (Fri)
  62760700800, #    local_end 1989-10-22 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  62760715200, #    utc_start 1989-10-22 04:00:00 (Sun)
  62774622000, #      utc_end 1990-04-01 03:00:00 (Sun)
  62760704400, #  local_start 1989-10-22 01:00:00 (Sun)
  62774611200, #    local_end 1990-04-01 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  62774622000, #    utc_start 1990-04-01 03:00:00 (Sun)
  62790436800, #      utc_end 1990-10-01 04:00:00 (Mon)
  62774607600, #  local_start 1990-03-31 23:00:00 (Sat)
  62790422400, #    local_end 1990-10-01 00:00:00 (Mon)
  -14400,
  0,
  'PYT',
      ],
      [
  62790436800, #    utc_start 1990-10-01 04:00:00 (Mon)
  62806158000, #      utc_end 1991-04-01 03:00:00 (Mon)
  62790426000, #  local_start 1990-10-01 01:00:00 (Mon)
  62806147200, #    local_end 1991-04-01 00:00:00 (Mon)
  -10800,
  1,
  'PYST',
      ],
      [
  62806158000, #    utc_start 1991-04-01 03:00:00 (Mon)
  62822404800, #      utc_end 1991-10-06 04:00:00 (Sun)
  62806143600, #  local_start 1991-03-31 23:00:00 (Sun)
  62822390400, #    local_end 1991-10-06 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  62822404800, #    utc_start 1991-10-06 04:00:00 (Sun)
  62835102000, #      utc_end 1992-03-01 03:00:00 (Sun)
  62822394000, #  local_start 1991-10-06 01:00:00 (Sun)
  62835091200, #    local_end 1992-03-01 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  62835102000, #    utc_start 1992-03-01 03:00:00 (Sun)
  62853940800, #      utc_end 1992-10-05 04:00:00 (Mon)
  62835087600, #  local_start 1992-02-29 23:00:00 (Sat)
  62853926400, #    local_end 1992-10-05 00:00:00 (Mon)
  -14400,
  0,
  'PYT',
      ],
      [
  62853940800, #    utc_start 1992-10-05 04:00:00 (Mon)
  62869230000, #      utc_end 1993-03-31 03:00:00 (Wed)
  62853930000, #  local_start 1992-10-05 01:00:00 (Mon)
  62869219200, #    local_end 1993-03-31 00:00:00 (Wed)
  -10800,
  1,
  'PYST',
      ],
      [
  62869230000, #    utc_start 1993-03-31 03:00:00 (Wed)
  62885131200, #      utc_end 1993-10-01 04:00:00 (Fri)
  62869215600, #  local_start 1993-03-30 23:00:00 (Tue)
  62885116800, #    local_end 1993-10-01 00:00:00 (Fri)
  -14400,
  0,
  'PYT',
      ],
      [
  62885131200, #    utc_start 1993-10-01 04:00:00 (Fri)
  62898001200, #      utc_end 1994-02-27 03:00:00 (Sun)
  62885120400, #  local_start 1993-10-01 01:00:00 (Fri)
  62897990400, #    local_end 1994-02-27 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  62898001200, #    utc_start 1994-02-27 03:00:00 (Sun)
  62916667200, #      utc_end 1994-10-01 04:00:00 (Sat)
  62897986800, #  local_start 1994-02-26 23:00:00 (Sat)
  62916652800, #    local_end 1994-10-01 00:00:00 (Sat)
  -14400,
  0,
  'PYT',
      ],
      [
  62916667200, #    utc_start 1994-10-01 04:00:00 (Sat)
  62929450800, #      utc_end 1995-02-26 03:00:00 (Sun)
  62916656400, #  local_start 1994-10-01 01:00:00 (Sat)
  62929440000, #    local_end 1995-02-26 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  62929450800, #    utc_start 1995-02-26 03:00:00 (Sun)
  62948203200, #      utc_end 1995-10-01 04:00:00 (Sun)
  62929436400, #  local_start 1995-02-25 23:00:00 (Sat)
  62948188800, #    local_end 1995-10-01 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  62948203200, #    utc_start 1995-10-01 04:00:00 (Sun)
  62961332400, #      utc_end 1996-03-01 03:00:00 (Fri)
  62948192400, #  local_start 1995-10-01 01:00:00 (Sun)
  62961321600, #    local_end 1996-03-01 00:00:00 (Fri)
  -10800,
  1,
  'PYST',
      ],
      [
  62961332400, #    utc_start 1996-03-01 03:00:00 (Fri)
  62980257600, #      utc_end 1996-10-06 04:00:00 (Sun)
  62961318000, #  local_start 1996-02-29 23:00:00 (Thu)
  62980243200, #    local_end 1996-10-06 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  62980257600, #    utc_start 1996-10-06 04:00:00 (Sun)
  62992350000, #      utc_end 1997-02-23 03:00:00 (Sun)
  62980246800, #  local_start 1996-10-06 01:00:00 (Sun)
  62992339200, #    local_end 1997-02-23 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  62992350000, #    utc_start 1997-02-23 03:00:00 (Sun)
  63011707200, #      utc_end 1997-10-05 04:00:00 (Sun)
  62992335600, #  local_start 1997-02-22 23:00:00 (Sat)
  63011692800, #    local_end 1997-10-05 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63011707200, #    utc_start 1997-10-05 04:00:00 (Sun)
  63024404400, #      utc_end 1998-03-01 03:00:00 (Sun)
  63011696400, #  local_start 1997-10-05 01:00:00 (Sun)
  63024393600, #    local_end 1998-03-01 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63024404400, #    utc_start 1998-03-01 03:00:00 (Sun)
  63043156800, #      utc_end 1998-10-04 04:00:00 (Sun)
  63024390000, #  local_start 1998-02-28 23:00:00 (Sat)
  63043142400, #    local_end 1998-10-04 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63043156800, #    utc_start 1998-10-04 04:00:00 (Sun)
  63056458800, #      utc_end 1999-03-07 03:00:00 (Sun)
  63043146000, #  local_start 1998-10-04 01:00:00 (Sun)
  63056448000, #    local_end 1999-03-07 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63056458800, #    utc_start 1999-03-07 03:00:00 (Sun)
  63074606400, #      utc_end 1999-10-03 04:00:00 (Sun)
  63056444400, #  local_start 1999-03-06 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63074606400, #    utc_start 1999-10-03 04:00:00 (Sun)
  63087908400, #      utc_end 2000-03-05 03:00:00 (Sun)
  63074595600, #  local_start 1999-10-03 01:00:00 (Sun)
  63087897600, #    local_end 2000-03-05 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63087908400, #    utc_start 2000-03-05 03:00:00 (Sun)
  63106056000, #      utc_end 2000-10-01 04:00:00 (Sun)
  63087894000, #  local_start 2000-03-04 23:00:00 (Sat)
  63106041600, #    local_end 2000-10-01 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63106056000, #    utc_start 2000-10-01 04:00:00 (Sun)
  63119358000, #      utc_end 2001-03-04 03:00:00 (Sun)
  63106045200, #  local_start 2000-10-01 01:00:00 (Sun)
  63119347200, #    local_end 2001-03-04 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63119358000, #    utc_start 2001-03-04 03:00:00 (Sun)
  63138110400, #      utc_end 2001-10-07 04:00:00 (Sun)
  63119343600, #  local_start 2001-03-03 23:00:00 (Sat)
  63138096000, #    local_end 2001-10-07 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63138110400, #    utc_start 2001-10-07 04:00:00 (Sun)
  63153831600, #      utc_end 2002-04-07 03:00:00 (Sun)
  63138099600, #  local_start 2001-10-07 01:00:00 (Sun)
  63153820800, #    local_end 2002-04-07 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63153831600, #    utc_start 2002-04-07 03:00:00 (Sun)
  63166536000, #      utc_end 2002-09-01 04:00:00 (Sun)
  63153817200, #  local_start 2002-04-06 23:00:00 (Sat)
  63166521600, #    local_end 2002-09-01 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63166536000, #    utc_start 2002-09-01 04:00:00 (Sun)
  63185281200, #      utc_end 2003-04-06 03:00:00 (Sun)
  63166525200, #  local_start 2002-09-01 01:00:00 (Sun)
  63185270400, #    local_end 2003-04-06 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63185281200, #    utc_start 2003-04-06 03:00:00 (Sun)
  63198590400, #      utc_end 2003-09-07 04:00:00 (Sun)
  63185266800, #  local_start 2003-04-05 23:00:00 (Sat)
  63198576000, #    local_end 2003-09-07 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63198590400, #    utc_start 2003-09-07 04:00:00 (Sun)
  63216730800, #      utc_end 2004-04-04 03:00:00 (Sun)
  63198579600, #  local_start 2003-09-07 01:00:00 (Sun)
  63216720000, #    local_end 2004-04-04 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63216730800, #    utc_start 2004-04-04 03:00:00 (Sun)
  63233668800, #      utc_end 2004-10-17 04:00:00 (Sun)
  63216716400, #  local_start 2004-04-03 23:00:00 (Sat)
  63233654400, #    local_end 2004-10-17 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63233668800, #    utc_start 2004-10-17 04:00:00 (Sun)
  63246366000, #      utc_end 2005-03-13 03:00:00 (Sun)
  63233658000, #  local_start 2004-10-17 01:00:00 (Sun)
  63246355200, #    local_end 2005-03-13 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63246366000, #    utc_start 2005-03-13 03:00:00 (Sun)
  63265118400, #      utc_end 2005-10-16 04:00:00 (Sun)
  63246351600, #  local_start 2005-03-12 23:00:00 (Sat)
  63265104000, #    local_end 2005-10-16 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63265118400, #    utc_start 2005-10-16 04:00:00 (Sun)
  63277815600, #      utc_end 2006-03-12 03:00:00 (Sun)
  63265107600, #  local_start 2005-10-16 01:00:00 (Sun)
  63277804800, #    local_end 2006-03-12 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63277815600, #    utc_start 2006-03-12 03:00:00 (Sun)
  63296568000, #      utc_end 2006-10-15 04:00:00 (Sun)
  63277801200, #  local_start 2006-03-11 23:00:00 (Sat)
  63296553600, #    local_end 2006-10-15 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63296568000, #    utc_start 2006-10-15 04:00:00 (Sun)
  63309265200, #      utc_end 2007-03-11 03:00:00 (Sun)
  63296557200, #  local_start 2006-10-15 01:00:00 (Sun)
  63309254400, #    local_end 2007-03-11 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63309265200, #    utc_start 2007-03-11 03:00:00 (Sun)
  63328622400, #      utc_end 2007-10-21 04:00:00 (Sun)
  63309250800, #  local_start 2007-03-10 23:00:00 (Sat)
  63328608000, #    local_end 2007-10-21 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63328622400, #    utc_start 2007-10-21 04:00:00 (Sun)
  63340714800, #      utc_end 2008-03-09 03:00:00 (Sun)
  63328611600, #  local_start 2007-10-21 01:00:00 (Sun)
  63340704000, #    local_end 2008-03-09 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63340714800, #    utc_start 2008-03-09 03:00:00 (Sun)
  63360072000, #      utc_end 2008-10-19 04:00:00 (Sun)
  63340700400, #  local_start 2008-03-08 23:00:00 (Sat)
  63360057600, #    local_end 2008-10-19 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63360072000, #    utc_start 2008-10-19 04:00:00 (Sun)
  63372164400, #      utc_end 2009-03-08 03:00:00 (Sun)
  63360061200, #  local_start 2008-10-19 01:00:00 (Sun)
  63372153600, #    local_end 2009-03-08 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63372164400, #    utc_start 2009-03-08 03:00:00 (Sun)
  63391521600, #      utc_end 2009-10-18 04:00:00 (Sun)
  63372150000, #  local_start 2009-03-07 23:00:00 (Sat)
  63391507200, #    local_end 2009-10-18 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63391521600, #    utc_start 2009-10-18 04:00:00 (Sun)
  63406638000, #      utc_end 2010-04-11 03:00:00 (Sun)
  63391510800, #  local_start 2009-10-18 01:00:00 (Sun)
  63406627200, #    local_end 2010-04-11 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63406638000, #    utc_start 2010-04-11 03:00:00 (Sun)
  63421761600, #      utc_end 2010-10-03 04:00:00 (Sun)
  63406623600, #  local_start 2010-04-10 23:00:00 (Sat)
  63421747200, #    local_end 2010-10-03 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63421761600, #    utc_start 2010-10-03 04:00:00 (Sun)
  63438087600, #      utc_end 2011-04-10 03:00:00 (Sun)
  63421750800, #  local_start 2010-10-03 01:00:00 (Sun)
  63438076800, #    local_end 2011-04-10 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63438087600, #    utc_start 2011-04-10 03:00:00 (Sun)
  63453211200, #      utc_end 2011-10-02 04:00:00 (Sun)
  63438073200, #  local_start 2011-04-09 23:00:00 (Sat)
  63453196800, #    local_end 2011-10-02 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63453211200, #    utc_start 2011-10-02 04:00:00 (Sun)
  63469537200, #      utc_end 2012-04-08 03:00:00 (Sun)
  63453200400, #  local_start 2011-10-02 01:00:00 (Sun)
  63469526400, #    local_end 2012-04-08 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63469537200, #    utc_start 2012-04-08 03:00:00 (Sun)
  63485265600, #      utc_end 2012-10-07 04:00:00 (Sun)
  63469522800, #  local_start 2012-04-07 23:00:00 (Sat)
  63485251200, #    local_end 2012-10-07 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63485265600, #    utc_start 2012-10-07 04:00:00 (Sun)
  63499777200, #      utc_end 2013-03-24 03:00:00 (Sun)
  63485254800, #  local_start 2012-10-07 01:00:00 (Sun)
  63499766400, #    local_end 2013-03-24 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63499777200, #    utc_start 2013-03-24 03:00:00 (Sun)
  63516715200, #      utc_end 2013-10-06 04:00:00 (Sun)
  63499762800, #  local_start 2013-03-23 23:00:00 (Sat)
  63516700800, #    local_end 2013-10-06 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63516715200, #    utc_start 2013-10-06 04:00:00 (Sun)
  63531226800, #      utc_end 2014-03-23 03:00:00 (Sun)
  63516704400, #  local_start 2013-10-06 01:00:00 (Sun)
  63531216000, #    local_end 2014-03-23 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63531226800, #    utc_start 2014-03-23 03:00:00 (Sun)
  63548164800, #      utc_end 2014-10-05 04:00:00 (Sun)
  63531212400, #  local_start 2014-03-22 23:00:00 (Sat)
  63548150400, #    local_end 2014-10-05 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63548164800, #    utc_start 2014-10-05 04:00:00 (Sun)
  63562676400, #      utc_end 2015-03-22 03:00:00 (Sun)
  63548154000, #  local_start 2014-10-05 01:00:00 (Sun)
  63562665600, #    local_end 2015-03-22 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63562676400, #    utc_start 2015-03-22 03:00:00 (Sun)
  63579614400, #      utc_end 2015-10-04 04:00:00 (Sun)
  63562662000, #  local_start 2015-03-21 23:00:00 (Sat)
  63579600000, #    local_end 2015-10-04 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63579614400, #    utc_start 2015-10-04 04:00:00 (Sun)
  63594730800, #      utc_end 2016-03-27 03:00:00 (Sun)
  63579603600, #  local_start 2015-10-04 01:00:00 (Sun)
  63594720000, #    local_end 2016-03-27 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63594730800, #    utc_start 2016-03-27 03:00:00 (Sun)
  63611064000, #      utc_end 2016-10-02 04:00:00 (Sun)
  63594716400, #  local_start 2016-03-26 23:00:00 (Sat)
  63611049600, #    local_end 2016-10-02 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63611064000, #    utc_start 2016-10-02 04:00:00 (Sun)
  63626180400, #      utc_end 2017-03-26 03:00:00 (Sun)
  63611053200, #  local_start 2016-10-02 01:00:00 (Sun)
  63626169600, #    local_end 2017-03-26 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63626180400, #    utc_start 2017-03-26 03:00:00 (Sun)
  63642513600, #      utc_end 2017-10-01 04:00:00 (Sun)
  63626166000, #  local_start 2017-03-25 23:00:00 (Sat)
  63642499200, #    local_end 2017-10-01 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63642513600, #    utc_start 2017-10-01 04:00:00 (Sun)
  63657630000, #      utc_end 2018-03-25 03:00:00 (Sun)
  63642502800, #  local_start 2017-10-01 01:00:00 (Sun)
  63657619200, #    local_end 2018-03-25 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63657630000, #    utc_start 2018-03-25 03:00:00 (Sun)
  63674568000, #      utc_end 2018-10-07 04:00:00 (Sun)
  63657615600, #  local_start 2018-03-24 23:00:00 (Sat)
  63674553600, #    local_end 2018-10-07 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63674568000, #    utc_start 2018-10-07 04:00:00 (Sun)
  63689079600, #      utc_end 2019-03-24 03:00:00 (Sun)
  63674557200, #  local_start 2018-10-07 01:00:00 (Sun)
  63689068800, #    local_end 2019-03-24 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63689079600, #    utc_start 2019-03-24 03:00:00 (Sun)
  63706017600, #      utc_end 2019-10-06 04:00:00 (Sun)
  63689065200, #  local_start 2019-03-23 23:00:00 (Sat)
  63706003200, #    local_end 2019-10-06 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63706017600, #    utc_start 2019-10-06 04:00:00 (Sun)
  63720529200, #      utc_end 2020-03-22 03:00:00 (Sun)
  63706006800, #  local_start 2019-10-06 01:00:00 (Sun)
  63720518400, #    local_end 2020-03-22 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63720529200, #    utc_start 2020-03-22 03:00:00 (Sun)
  63737467200, #      utc_end 2020-10-04 04:00:00 (Sun)
  63720514800, #  local_start 2020-03-21 23:00:00 (Sat)
  63737452800, #    local_end 2020-10-04 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63737467200, #    utc_start 2020-10-04 04:00:00 (Sun)
  63752583600, #      utc_end 2021-03-28 03:00:00 (Sun)
  63737456400, #  local_start 2020-10-04 01:00:00 (Sun)
  63752572800, #    local_end 2021-03-28 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63752583600, #    utc_start 2021-03-28 03:00:00 (Sun)
  63768916800, #      utc_end 2021-10-03 04:00:00 (Sun)
  63752569200, #  local_start 2021-03-27 23:00:00 (Sat)
  63768902400, #    local_end 2021-10-03 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63768916800, #    utc_start 2021-10-03 04:00:00 (Sun)
  63784033200, #      utc_end 2022-03-27 03:00:00 (Sun)
  63768906000, #  local_start 2021-10-03 01:00:00 (Sun)
  63784022400, #    local_end 2022-03-27 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63784033200, #    utc_start 2022-03-27 03:00:00 (Sun)
  63800366400, #      utc_end 2022-10-02 04:00:00 (Sun)
  63784018800, #  local_start 2022-03-26 23:00:00 (Sat)
  63800352000, #    local_end 2022-10-02 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63800366400, #    utc_start 2022-10-02 04:00:00 (Sun)
  63815482800, #      utc_end 2023-03-26 03:00:00 (Sun)
  63800355600, #  local_start 2022-10-02 01:00:00 (Sun)
  63815472000, #    local_end 2023-03-26 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63815482800, #    utc_start 2023-03-26 03:00:00 (Sun)
  63831816000, #      utc_end 2023-10-01 04:00:00 (Sun)
  63815468400, #  local_start 2023-03-25 23:00:00 (Sat)
  63831801600, #    local_end 2023-10-01 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63831816000, #    utc_start 2023-10-01 04:00:00 (Sun)
  63846932400, #      utc_end 2024-03-24 03:00:00 (Sun)
  63831805200, #  local_start 2023-10-01 01:00:00 (Sun)
  63846921600, #    local_end 2024-03-24 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63846932400, #    utc_start 2024-03-24 03:00:00 (Sun)
  63863870400, #      utc_end 2024-10-06 04:00:00 (Sun)
  63846918000, #  local_start 2024-03-23 23:00:00 (Sat)
  63863856000, #    local_end 2024-10-06 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63863870400, #    utc_start 2024-10-06 04:00:00 (Sun)
  63878382000, #      utc_end 2025-03-23 03:00:00 (Sun)
  63863859600, #  local_start 2024-10-06 01:00:00 (Sun)
  63878371200, #    local_end 2025-03-23 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63878382000, #    utc_start 2025-03-23 03:00:00 (Sun)
  63895320000, #      utc_end 2025-10-05 04:00:00 (Sun)
  63878367600, #  local_start 2025-03-22 23:00:00 (Sat)
  63895305600, #    local_end 2025-10-05 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63895320000, #    utc_start 2025-10-05 04:00:00 (Sun)
  63909831600, #      utc_end 2026-03-22 03:00:00 (Sun)
  63895309200, #  local_start 2025-10-05 01:00:00 (Sun)
  63909820800, #    local_end 2026-03-22 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63909831600, #    utc_start 2026-03-22 03:00:00 (Sun)
  63926769600, #      utc_end 2026-10-04 04:00:00 (Sun)
  63909817200, #  local_start 2026-03-21 23:00:00 (Sat)
  63926755200, #    local_end 2026-10-04 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
      [
  63926769600, #    utc_start 2026-10-04 04:00:00 (Sun)
  63941886000, #      utc_end 2027-03-28 03:00:00 (Sun)
  63926758800, #  local_start 2026-10-04 01:00:00 (Sun)
  63941875200, #    local_end 2027-03-28 00:00:00 (Sun)
  -10800,
  1,
  'PYST',
      ],
      [
  63941886000, #    utc_start 2027-03-28 03:00:00 (Sun)
  63958219200, #      utc_end 2027-10-03 04:00:00 (Sun)
  63941871600, #  local_start 2027-03-27 23:00:00 (Sat)
  63958204800, #    local_end 2027-10-03 00:00:00 (Sun)
  -14400,
  0,
  'PYT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {53}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -14400 }
  
  my $last_observance = bless( {
    'format' => 'PY%sT',
    'gmtoff' => '-4:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 720713,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 720713,
      'utc_rd_secs' => 82800,
      'utc_year' => 1975
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -14400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 720714,
      'local_rd_secs' => 10800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 720714,
      'utc_rd_secs' => 10800,
      'utc_year' => 1975
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '0:00',
      'from' => '2013',
      'in' => 'Mar',
      'letter' => '',
      'name' => 'Para',
      'offset_from_std' => 0,
      'on' => 'Sun>=22',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '0:00',
      'from' => '2010',
      'in' => 'Oct',
      'letter' => 'S',
      'name' => 'Para',
      'offset_from_std' => 3600,
      'on' => 'Sun>=1',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ASUNCION

    $main::fatpacked{"DateTime/TimeZone/America/Atikokan.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ATIKOKAN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Atikokan;
  $DateTime::TimeZone::America::Atikokan::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Atikokan::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59768949988, #      utc_end 1895-01-01 06:06:28 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59768928000, #    local_end 1895-01-01 00:00:00 (Tue)
  -21988,
  0,
  'LMT',
      ],
      [
  59768949988, #    utc_start 1895-01-01 06:06:28 (Tue)
  60503616000, #      utc_end 1918-04-14 08:00:00 (Sun)
  59768928388, #  local_start 1895-01-01 00:06:28 (Tue)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60503616000, #    utc_start 1918-04-14 08:00:00 (Sun)
  60520546800, #      utc_end 1918-10-27 07:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60520546800, #    utc_start 1918-10-27 07:00:00 (Sun)
  61212434400, #      utc_end 1940-09-29 06:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  61212412800, #    local_end 1940-09-29 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61212434400, #    utc_start 1940-09-29 06:00:00 (Sun)
  61255468800, #      utc_end 1942-02-09 08:00:00 (Mon)
  61212416400, #  local_start 1940-09-29 01:00:00 (Sun)
  61255450800, #    local_end 1942-02-09 03:00:00 (Mon)
  -18000,
  1,
  'CDT',
      ],
      [
  61255468800, #    utc_start 1942-02-09 08:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366269600, #    local_end 1945-08-14 18:00:00 (Tue)
  -18000,
  1,
  'CWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370290800, #      utc_end 1945-09-30 07:00:00 (Sun)
  61366269600, #  local_start 1945-08-14 18:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CPT',
      ],
      [
  61370290800, #    utc_start 1945-09-30 07:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  61370272800, #  local_start 1945-09-30 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -18000,
  0,
  'EST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {4}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ATIKOKAN

    $main::fatpacked{"DateTime/TimeZone/America/Bahia.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_BAHIA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Bahia;
  $DateTime::TimeZone::America::Bahia::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Bahia::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368466844, #      utc_end 1914-01-01 02:34:04 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  -9244,
  0,
  'LMT',
      ],
      [
  60368466844, #    utc_start 1914-01-01 02:34:04 (Thu)
  60928725600, #      utc_end 1931-10-03 14:00:00 (Sat)
  60368456044, #  local_start 1913-12-31 23:34:04 (Wed)
  60928714800, #    local_end 1931-10-03 11:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  60928725600, #    utc_start 1931-10-03 14:00:00 (Sat)
  60944320800, #      utc_end 1932-04-01 02:00:00 (Fri)
  60928718400, #  local_start 1931-10-03 12:00:00 (Sat)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -7200,
  1,
  'BRST',
      ],
      [
  60944320800, #    utc_start 1932-04-01 02:00:00 (Fri)
  60960308400, #      utc_end 1932-10-03 03:00:00 (Mon)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60960297600, #    local_end 1932-10-03 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  60960308400, #    utc_start 1932-10-03 03:00:00 (Mon)
  60975856800, #      utc_end 1933-04-01 02:00:00 (Sat)
  60960301200, #  local_start 1932-10-03 01:00:00 (Mon)
  60975849600, #    local_end 1933-04-01 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  60975856800, #    utc_start 1933-04-01 02:00:00 (Sat)
  61501863600, #      utc_end 1949-12-01 03:00:00 (Thu)
  60975846000, #  local_start 1933-03-31 23:00:00 (Fri)
  61501852800, #    local_end 1949-12-01 00:00:00 (Thu)
  -10800,
  0,
  'BRT',
      ],
      [
  61501863600, #    utc_start 1949-12-01 03:00:00 (Thu)
  61513614000, #      utc_end 1950-04-16 03:00:00 (Sun)
  61501856400, #  local_start 1949-12-01 01:00:00 (Thu)
  61513606800, #    local_end 1950-04-16 01:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61513614000, #    utc_start 1950-04-16 03:00:00 (Sun)
  61533399600, #      utc_end 1950-12-01 03:00:00 (Fri)
  61513603200, #  local_start 1950-04-16 00:00:00 (Sun)
  61533388800, #    local_end 1950-12-01 00:00:00 (Fri)
  -10800,
  0,
  'BRT',
      ],
      [
  61533399600, #    utc_start 1950-12-01 03:00:00 (Fri)
  61543850400, #      utc_end 1951-04-01 02:00:00 (Sun)
  61533392400, #  local_start 1950-12-01 01:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61543850400, #    utc_start 1951-04-01 02:00:00 (Sun)
  61564935600, #      utc_end 1951-12-01 03:00:00 (Sat)
  61543839600, #  local_start 1951-03-31 23:00:00 (Sat)
  61564924800, #    local_end 1951-12-01 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  61564935600, #    utc_start 1951-12-01 03:00:00 (Sat)
  61575472800, #      utc_end 1952-04-01 02:00:00 (Tue)
  61564928400, #  local_start 1951-12-01 01:00:00 (Sat)
  61575465600, #    local_end 1952-04-01 00:00:00 (Tue)
  -7200,
  1,
  'BRST',
      ],
      [
  61575472800, #    utc_start 1952-04-01 02:00:00 (Tue)
  61596558000, #      utc_end 1952-12-01 03:00:00 (Mon)
  61575462000, #  local_start 1952-03-31 23:00:00 (Mon)
  61596547200, #    local_end 1952-12-01 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  61596558000, #    utc_start 1952-12-01 03:00:00 (Mon)
  61604330400, #      utc_end 1953-03-01 02:00:00 (Sun)
  61596550800, #  local_start 1952-12-01 01:00:00 (Mon)
  61604323200, #    local_end 1953-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61604330400, #    utc_start 1953-03-01 02:00:00 (Sun)
  61944318000, #      utc_end 1963-12-09 03:00:00 (Mon)
  61604319600, #  local_start 1953-02-28 23:00:00 (Sat)
  61944307200, #    local_end 1963-12-09 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  61944318000, #    utc_start 1963-12-09 03:00:00 (Mon)
  61951485600, #      utc_end 1964-03-01 02:00:00 (Sun)
  61944310800, #  local_start 1963-12-09 01:00:00 (Mon)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61951485600, #    utc_start 1964-03-01 02:00:00 (Sun)
  61980519600, #      utc_end 1965-01-31 03:00:00 (Sun)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61980508800, #    local_end 1965-01-31 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  61980519600, #    utc_start 1965-01-31 03:00:00 (Sun)
  61985613600, #      utc_end 1965-03-31 02:00:00 (Wed)
  61980512400, #  local_start 1965-01-31 01:00:00 (Sun)
  61985606400, #    local_end 1965-03-31 00:00:00 (Wed)
  -7200,
  1,
  'BRST',
      ],
      [
  61985613600, #    utc_start 1965-03-31 02:00:00 (Wed)
  62006785200, #      utc_end 1965-12-01 03:00:00 (Wed)
  61985602800, #  local_start 1965-03-30 23:00:00 (Tue)
  62006774400, #    local_end 1965-12-01 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  62006785200, #    utc_start 1965-12-01 03:00:00 (Wed)
  62014557600, #      utc_end 1966-03-01 02:00:00 (Tue)
  62006778000, #  local_start 1965-12-01 01:00:00 (Wed)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -7200,
  1,
  'BRST',
      ],
      [
  62014557600, #    utc_start 1966-03-01 02:00:00 (Tue)
  62035729200, #      utc_end 1966-11-01 03:00:00 (Tue)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62035718400, #    local_end 1966-11-01 00:00:00 (Tue)
  -10800,
  0,
  'BRT',
      ],
      [
  62035729200, #    utc_start 1966-11-01 03:00:00 (Tue)
  62046093600, #      utc_end 1967-03-01 02:00:00 (Wed)
  62035722000, #  local_start 1966-11-01 01:00:00 (Tue)
  62046086400, #    local_end 1967-03-01 00:00:00 (Wed)
  -7200,
  1,
  'BRST',
      ],
      [
  62046093600, #    utc_start 1967-03-01 02:00:00 (Wed)
  62067265200, #      utc_end 1967-11-01 03:00:00 (Wed)
  62046082800, #  local_start 1967-02-28 23:00:00 (Tue)
  62067254400, #    local_end 1967-11-01 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  62067265200, #    utc_start 1967-11-01 03:00:00 (Wed)
  62077716000, #      utc_end 1968-03-01 02:00:00 (Fri)
  62067258000, #  local_start 1967-11-01 01:00:00 (Wed)
  62077708800, #    local_end 1968-03-01 00:00:00 (Fri)
  -7200,
  1,
  'BRST',
      ],
      [
  62077716000, #    utc_start 1968-03-01 02:00:00 (Fri)
  62635431600, #      utc_end 1985-11-02 03:00:00 (Sat)
  62077705200, #  local_start 1968-02-29 23:00:00 (Thu)
  62635420800, #    local_end 1985-11-02 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  62635431600, #    utc_start 1985-11-02 03:00:00 (Sat)
  62646919200, #      utc_end 1986-03-15 02:00:00 (Sat)
  62635424400, #  local_start 1985-11-02 01:00:00 (Sat)
  62646912000, #    local_end 1986-03-15 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  62646919200, #    utc_start 1986-03-15 02:00:00 (Sat)
  62666276400, #      utc_end 1986-10-25 03:00:00 (Sat)
  62646908400, #  local_start 1986-03-14 23:00:00 (Fri)
  62666265600, #    local_end 1986-10-25 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  62666276400, #    utc_start 1986-10-25 03:00:00 (Sat)
  62675949600, #      utc_end 1987-02-14 02:00:00 (Sat)
  62666269200, #  local_start 1986-10-25 01:00:00 (Sat)
  62675942400, #    local_end 1987-02-14 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  62675949600, #    utc_start 1987-02-14 02:00:00 (Sat)
  62697812400, #      utc_end 1987-10-25 03:00:00 (Sun)
  62675938800, #  local_start 1987-02-13 23:00:00 (Fri)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62697812400, #    utc_start 1987-10-25 03:00:00 (Sun)
  62706880800, #      utc_end 1988-02-07 02:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62706873600, #    local_end 1988-02-07 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62706880800, #    utc_start 1988-02-07 02:00:00 (Sun)
  62728657200, #      utc_end 1988-10-16 03:00:00 (Sun)
  62706870000, #  local_start 1988-02-06 23:00:00 (Sat)
  62728646400, #    local_end 1988-10-16 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62728657200, #    utc_start 1988-10-16 03:00:00 (Sun)
  62737725600, #      utc_end 1989-01-29 02:00:00 (Sun)
  62728650000, #  local_start 1988-10-16 01:00:00 (Sun)
  62737718400, #    local_end 1989-01-29 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62737725600, #    utc_start 1989-01-29 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62737714800, #  local_start 1989-01-28 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62770384800, #      utc_end 1990-02-11 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62770377600, #    local_end 1990-02-11 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62770384800, #    utc_start 1990-02-11 02:00:00 (Sun)
  62792161200, #      utc_end 1990-10-21 03:00:00 (Sun)
  62770374000, #  local_start 1990-02-10 23:00:00 (Sat)
  62792150400, #    local_end 1990-10-21 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62792161200, #    utc_start 1990-10-21 03:00:00 (Sun)
  62802439200, #      utc_end 1991-02-17 02:00:00 (Sun)
  62792154000, #  local_start 1990-10-21 01:00:00 (Sun)
  62802432000, #    local_end 1991-02-17 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62802439200, #    utc_start 1991-02-17 02:00:00 (Sun)
  62823610800, #      utc_end 1991-10-20 03:00:00 (Sun)
  62802428400, #  local_start 1991-02-16 23:00:00 (Sat)
  62823600000, #    local_end 1991-10-20 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62823610800, #    utc_start 1991-10-20 03:00:00 (Sun)
  62833284000, #      utc_end 1992-02-09 02:00:00 (Sun)
  62823603600, #  local_start 1991-10-20 01:00:00 (Sun)
  62833276800, #    local_end 1992-02-09 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62833284000, #    utc_start 1992-02-09 02:00:00 (Sun)
  62855665200, #      utc_end 1992-10-25 03:00:00 (Sun)
  62833273200, #  local_start 1992-02-08 23:00:00 (Sat)
  62855654400, #    local_end 1992-10-25 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62855665200, #    utc_start 1992-10-25 03:00:00 (Sun)
  62864128800, #      utc_end 1993-01-31 02:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62864121600, #    local_end 1993-01-31 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62864128800, #    utc_start 1993-01-31 02:00:00 (Sun)
  62886510000, #      utc_end 1993-10-17 03:00:00 (Sun)
  62864118000, #  local_start 1993-01-30 23:00:00 (Sat)
  62886499200, #    local_end 1993-10-17 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62886510000, #    utc_start 1993-10-17 03:00:00 (Sun)
  62897392800, #      utc_end 1994-02-20 02:00:00 (Sun)
  62886502800, #  local_start 1993-10-17 01:00:00 (Sun)
  62897385600, #    local_end 1994-02-20 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62897392800, #    utc_start 1994-02-20 02:00:00 (Sun)
  62917959600, #      utc_end 1994-10-16 03:00:00 (Sun)
  62897382000, #  local_start 1994-02-19 23:00:00 (Sat)
  62917948800, #    local_end 1994-10-16 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62917959600, #    utc_start 1994-10-16 03:00:00 (Sun)
  62928842400, #      utc_end 1995-02-19 02:00:00 (Sun)
  62917952400, #  local_start 1994-10-16 01:00:00 (Sun)
  62928835200, #    local_end 1995-02-19 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62928842400, #    utc_start 1995-02-19 02:00:00 (Sun)
  62949409200, #      utc_end 1995-10-15 03:00:00 (Sun)
  62928831600, #  local_start 1995-02-18 23:00:00 (Sat)
  62949398400, #    local_end 1995-10-15 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62949409200, #    utc_start 1995-10-15 03:00:00 (Sun)
  62959687200, #      utc_end 1996-02-11 02:00:00 (Sun)
  62949402000, #  local_start 1995-10-15 01:00:00 (Sun)
  62959680000, #    local_end 1996-02-11 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62959687200, #    utc_start 1996-02-11 02:00:00 (Sun)
  62980254000, #      utc_end 1996-10-06 03:00:00 (Sun)
  62959676400, #  local_start 1996-02-10 23:00:00 (Sat)
  62980243200, #    local_end 1996-10-06 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62980254000, #    utc_start 1996-10-06 03:00:00 (Sun)
  62991741600, #      utc_end 1997-02-16 02:00:00 (Sun)
  62980246800, #  local_start 1996-10-06 01:00:00 (Sun)
  62991734400, #    local_end 1997-02-16 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62991741600, #    utc_start 1997-02-16 02:00:00 (Sun)
  63011790000, #      utc_end 1997-10-06 03:00:00 (Mon)
  62991730800, #  local_start 1997-02-15 23:00:00 (Sat)
  63011779200, #    local_end 1997-10-06 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  63011790000, #    utc_start 1997-10-06 03:00:00 (Mon)
  63024400800, #      utc_end 1998-03-01 02:00:00 (Sun)
  63011782800, #  local_start 1997-10-06 01:00:00 (Mon)
  63024393600, #    local_end 1998-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63024400800, #    utc_start 1998-03-01 02:00:00 (Sun)
  63043758000, #      utc_end 1998-10-11 03:00:00 (Sun)
  63024390000, #  local_start 1998-02-28 23:00:00 (Sat)
  63043747200, #    local_end 1998-10-11 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63043758000, #    utc_start 1998-10-11 03:00:00 (Sun)
  63055245600, #      utc_end 1999-02-21 02:00:00 (Sun)
  63043750800, #  local_start 1998-10-11 01:00:00 (Sun)
  63055238400, #    local_end 1999-02-21 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63055245600, #    utc_start 1999-02-21 02:00:00 (Sun)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  63055234800, #  local_start 1999-02-20 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087300000, #      utc_end 2000-02-27 02:00:00 (Sun)
  63074595600, #  local_start 1999-10-03 01:00:00 (Sun)
  63087292800, #    local_end 2000-02-27 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63087300000, #    utc_start 2000-02-27 02:00:00 (Sun)
  63106657200, #      utc_end 2000-10-08 03:00:00 (Sun)
  63087289200, #  local_start 2000-02-26 23:00:00 (Sat)
  63106646400, #    local_end 2000-10-08 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63106657200, #    utc_start 2000-10-08 03:00:00 (Sun)
  63118144800, #      utc_end 2001-02-18 02:00:00 (Sun)
  63106650000, #  local_start 2000-10-08 01:00:00 (Sun)
  63118137600, #    local_end 2001-02-18 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63118144800, #    utc_start 2001-02-18 02:00:00 (Sun)
  63138711600, #      utc_end 2001-10-14 03:00:00 (Sun)
  63118134000, #  local_start 2001-02-17 23:00:00 (Sat)
  63138700800, #    local_end 2001-10-14 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63138711600, #    utc_start 2001-10-14 03:00:00 (Sun)
  63149594400, #      utc_end 2002-02-17 02:00:00 (Sun)
  63138704400, #  local_start 2001-10-14 01:00:00 (Sun)
  63149587200, #    local_end 2002-02-17 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63149594400, #    utc_start 2002-02-17 02:00:00 (Sun)
  63171975600, #      utc_end 2002-11-03 03:00:00 (Sun)
  63149583600, #  local_start 2002-02-16 23:00:00 (Sat)
  63171964800, #    local_end 2002-11-03 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63171975600, #    utc_start 2002-11-03 03:00:00 (Sun)
  63181044000, #      utc_end 2003-02-16 02:00:00 (Sun)
  63171968400, #  local_start 2002-11-03 01:00:00 (Sun)
  63181036800, #    local_end 2003-02-16 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63181044000, #    utc_start 2003-02-16 02:00:00 (Sun)
  63200055600, #      utc_end 2003-09-24 03:00:00 (Wed)
  63181033200, #  local_start 2003-02-15 23:00:00 (Sat)
  63200044800, #    local_end 2003-09-24 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  63200055600, #    utc_start 2003-09-24 03:00:00 (Wed)
  63454417200, #      utc_end 2011-10-16 03:00:00 (Sun)
  63200044800, #  local_start 2003-09-24 00:00:00 (Wed)
  63454406400, #    local_end 2011-10-16 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63454417200, #    utc_start 2011-10-16 03:00:00 (Sun)
  63465904800, #      utc_end 2012-02-26 02:00:00 (Sun)
  63454410000, #  local_start 2011-10-16 01:00:00 (Sun)
  63465897600, #    local_end 2012-02-26 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63465904800, #    utc_start 2012-02-26 02:00:00 (Sun)
  63486471600, #      utc_end 2012-10-21 03:00:00 (Sun)
  63465894000, #  local_start 2012-02-25 23:00:00 (Sat)
  63486460800, #    local_end 2012-10-21 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63486471600, #    utc_start 2012-10-21 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63486460800, #  local_start 2012-10-21 00:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'BRT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_BAHIA

    $main::fatpacked{"DateTime/TimeZone/America/Bahia_Banderas.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_BAHIA_BANDERAS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Bahia_Banderas;
  $DateTime::TimeZone::America::Bahia_Banderas::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Bahia_Banderas::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60620943600, #      utc_end 1922-01-01 07:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60620918340, #    local_end 1921-12-31 23:59:00 (Sat)
  -25260,
  0,
  'LMT',
      ],
      [
  60620943600, #    utc_start 1922-01-01 07:00:00 (Sun)
  60792616800, #      utc_end 1927-06-11 06:00:00 (Sat)
  60620918400, #  local_start 1922-01-01 00:00:00 (Sun)
  60792591600, #    local_end 1927-06-10 23:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60792616800, #    utc_start 1927-06-11 06:00:00 (Sat)
  60900876000, #      utc_end 1930-11-15 06:00:00 (Sat)
  60792595200, #  local_start 1927-06-11 00:00:00 (Sat)
  60900854400, #    local_end 1930-11-15 00:00:00 (Sat)
  -21600,
  0,
  'CST',
      ],
      [
  60900876000, #    utc_start 1930-11-15 06:00:00 (Sat)
  60915391200, #      utc_end 1931-05-02 06:00:00 (Sat)
  60900850800, #  local_start 1930-11-14 23:00:00 (Fri)
  60915366000, #    local_end 1931-05-01 23:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60915391200, #    utc_start 1931-05-02 06:00:00 (Sat)
  60928524000, #      utc_end 1931-10-01 06:00:00 (Thu)
  60915369600, #  local_start 1931-05-02 00:00:00 (Sat)
  60928502400, #    local_end 1931-10-01 00:00:00 (Thu)
  -21600,
  0,
  'CST',
      ],
      [
  60928524000, #    utc_start 1931-10-01 06:00:00 (Thu)
  60944338800, #      utc_end 1932-04-01 07:00:00 (Fri)
  60928498800, #  local_start 1931-09-30 23:00:00 (Wed)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60944338800, #    utc_start 1932-04-01 07:00:00 (Fri)
  61261855200, #      utc_end 1942-04-24 06:00:00 (Fri)
  60944317200, #  local_start 1932-04-01 01:00:00 (Fri)
  61261833600, #    local_end 1942-04-24 00:00:00 (Fri)
  -21600,
  0,
  'CST',
      ],
      [
  61261855200, #    utc_start 1942-04-24 06:00:00 (Fri)
  61474143600, #      utc_end 1949-01-14 07:00:00 (Fri)
  61261830000, #  local_start 1942-04-23 23:00:00 (Thu)
  61474118400, #    local_end 1949-01-14 00:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  61474143600, #    utc_start 1949-01-14 07:00:00 (Fri)
  62135712000, #      utc_end 1970-01-01 08:00:00 (Thu)
  61474114800, #  local_start 1949-01-13 23:00:00 (Thu)
  62135683200, #    local_end 1970-01-01 00:00:00 (Thu)
  -28800,
  0,
  'PST',
      ],
      [
  62135712000, #    utc_start 1970-01-01 08:00:00 (Thu)
  62964550800, #      utc_end 1996-04-07 09:00:00 (Sun)
  62135686800, #  local_start 1970-01-01 01:00:00 (Thu)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62964550800, #    utc_start 1996-04-07 09:00:00 (Sun)
  62982086400, #      utc_end 1996-10-27 08:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62982086400, #    utc_start 1996-10-27 08:00:00 (Sun)
  62996000400, #      utc_end 1997-04-06 09:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62996000400, #    utc_start 1997-04-06 09:00:00 (Sun)
  63013536000, #      utc_end 1997-10-26 08:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63013536000, #    utc_start 1997-10-26 08:00:00 (Sun)
  63027450000, #      utc_end 1998-04-05 09:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63027450000, #    utc_start 1998-04-05 09:00:00 (Sun)
  63044985600, #      utc_end 1998-10-25 08:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63044985600, #    utc_start 1998-10-25 08:00:00 (Sun)
  63058899600, #      utc_end 1999-04-04 09:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63058899600, #    utc_start 1999-04-04 09:00:00 (Sun)
  63077040000, #      utc_end 1999-10-31 08:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63077040000, #    utc_start 1999-10-31 08:00:00 (Sun)
  63090349200, #      utc_end 2000-04-02 09:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63090349200, #    utc_start 2000-04-02 09:00:00 (Sun)
  63108489600, #      utc_end 2000-10-29 08:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63108489600, #    utc_start 2000-10-29 08:00:00 (Sun)
  63124822800, #      utc_end 2001-05-06 09:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63124797600, #    local_end 2001-05-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63124822800, #    utc_start 2001-05-06 09:00:00 (Sun)
  63137520000, #      utc_end 2001-09-30 08:00:00 (Sun)
  63124801200, #  local_start 2001-05-06 03:00:00 (Sun)
  63137498400, #    local_end 2001-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63137520000, #    utc_start 2001-09-30 08:00:00 (Sun)
  63153853200, #      utc_end 2002-04-07 09:00:00 (Sun)
  63137494800, #  local_start 2001-09-30 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63153853200, #    utc_start 2002-04-07 09:00:00 (Sun)
  63171388800, #      utc_end 2002-10-27 08:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63171388800, #    utc_start 2002-10-27 08:00:00 (Sun)
  63185302800, #      utc_end 2003-04-06 09:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63185302800, #    utc_start 2003-04-06 09:00:00 (Sun)
  63202838400, #      utc_end 2003-10-26 08:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63202838400, #    utc_start 2003-10-26 08:00:00 (Sun)
  63216752400, #      utc_end 2004-04-04 09:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63216752400, #    utc_start 2004-04-04 09:00:00 (Sun)
  63234892800, #      utc_end 2004-10-31 08:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63234892800, #    utc_start 2004-10-31 08:00:00 (Sun)
  63248202000, #      utc_end 2005-04-03 09:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63248202000, #    utc_start 2005-04-03 09:00:00 (Sun)
  63266342400, #      utc_end 2005-10-30 08:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63266342400, #    utc_start 2005-10-30 08:00:00 (Sun)
  63279651600, #      utc_end 2006-04-02 09:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63279651600, #    utc_start 2006-04-02 09:00:00 (Sun)
  63297792000, #      utc_end 2006-10-29 08:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63297792000, #    utc_start 2006-10-29 08:00:00 (Sun)
  63311101200, #      utc_end 2007-04-01 09:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63311076000, #    local_end 2007-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63311101200, #    utc_start 2007-04-01 09:00:00 (Sun)
  63329241600, #      utc_end 2007-10-28 08:00:00 (Sun)
  63311079600, #  local_start 2007-04-01 03:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63329241600, #    utc_start 2007-10-28 08:00:00 (Sun)
  63343155600, #      utc_end 2008-04-06 09:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63343130400, #    local_end 2008-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63343155600, #    utc_start 2008-04-06 09:00:00 (Sun)
  63360691200, #      utc_end 2008-10-26 08:00:00 (Sun)
  63343134000, #  local_start 2008-04-06 03:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63360691200, #    utc_start 2008-10-26 08:00:00 (Sun)
  63374605200, #      utc_end 2009-04-05 09:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63374580000, #    local_end 2009-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63374605200, #    utc_start 2009-04-05 09:00:00 (Sun)
  63392140800, #      utc_end 2009-10-25 08:00:00 (Sun)
  63374583600, #  local_start 2009-04-05 03:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63392140800, #    utc_start 2009-10-25 08:00:00 (Sun)
  63406054800, #      utc_end 2010-04-04 09:00:00 (Sun)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63406029600, #    local_end 2010-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63406054800, #    utc_start 2010-04-04 09:00:00 (Sun)
  63424191600, #      utc_end 2010-10-31 07:00:00 (Sun)
  63406036800, #  local_start 2010-04-04 04:00:00 (Sun)
  63424173600, #    local_end 2010-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424191600, #    utc_start 2010-10-31 07:00:00 (Sun)
  63437500800, #      utc_end 2011-04-03 08:00:00 (Sun)
  63424170000, #  local_start 2010-10-31 01:00:00 (Sun)
  63437479200, #    local_end 2011-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63437500800, #    utc_start 2011-04-03 08:00:00 (Sun)
  63455641200, #      utc_end 2011-10-30 07:00:00 (Sun)
  63437482800, #  local_start 2011-04-03 03:00:00 (Sun)
  63455623200, #    local_end 2011-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63455641200, #    utc_start 2011-10-30 07:00:00 (Sun)
  63468950400, #      utc_end 2012-04-01 08:00:00 (Sun)
  63455619600, #  local_start 2011-10-30 01:00:00 (Sun)
  63468928800, #    local_end 2012-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63468950400, #    utc_start 2012-04-01 08:00:00 (Sun)
  63487090800, #      utc_end 2012-10-28 07:00:00 (Sun)
  63468932400, #  local_start 2012-04-01 03:00:00 (Sun)
  63487072800, #    local_end 2012-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487090800, #    utc_start 2012-10-28 07:00:00 (Sun)
  63501004800, #      utc_end 2013-04-07 08:00:00 (Sun)
  63487069200, #  local_start 2012-10-28 01:00:00 (Sun)
  63500983200, #    local_end 2013-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63501004800, #    utc_start 2013-04-07 08:00:00 (Sun)
  63518540400, #      utc_end 2013-10-27 07:00:00 (Sun)
  63500986800, #  local_start 2013-04-07 03:00:00 (Sun)
  63518522400, #    local_end 2013-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63518540400, #    utc_start 2013-10-27 07:00:00 (Sun)
  63532454400, #      utc_end 2014-04-06 08:00:00 (Sun)
  63518518800, #  local_start 2013-10-27 01:00:00 (Sun)
  63532432800, #    local_end 2014-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63532454400, #    utc_start 2014-04-06 08:00:00 (Sun)
  63549990000, #      utc_end 2014-10-26 07:00:00 (Sun)
  63532436400, #  local_start 2014-04-06 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63549990000, #    utc_start 2014-10-26 07:00:00 (Sun)
  63563904000, #      utc_end 2015-04-05 08:00:00 (Sun)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63563882400, #    local_end 2015-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63563904000, #    utc_start 2015-04-05 08:00:00 (Sun)
  63581439600, #      utc_end 2015-10-25 07:00:00 (Sun)
  63563886000, #  local_start 2015-04-05 03:00:00 (Sun)
  63581421600, #    local_end 2015-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63581439600, #    utc_start 2015-10-25 07:00:00 (Sun)
  63595353600, #      utc_end 2016-04-03 08:00:00 (Sun)
  63581418000, #  local_start 2015-10-25 01:00:00 (Sun)
  63595332000, #    local_end 2016-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63595353600, #    utc_start 2016-04-03 08:00:00 (Sun)
  63613494000, #      utc_end 2016-10-30 07:00:00 (Sun)
  63595335600, #  local_start 2016-04-03 03:00:00 (Sun)
  63613476000, #    local_end 2016-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63613494000, #    utc_start 2016-10-30 07:00:00 (Sun)
  63626803200, #      utc_end 2017-04-02 08:00:00 (Sun)
  63613472400, #  local_start 2016-10-30 01:00:00 (Sun)
  63626781600, #    local_end 2017-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63626803200, #    utc_start 2017-04-02 08:00:00 (Sun)
  63644943600, #      utc_end 2017-10-29 07:00:00 (Sun)
  63626785200, #  local_start 2017-04-02 03:00:00 (Sun)
  63644925600, #    local_end 2017-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63644943600, #    utc_start 2017-10-29 07:00:00 (Sun)
  63658252800, #      utc_end 2018-04-01 08:00:00 (Sun)
  63644922000, #  local_start 2017-10-29 01:00:00 (Sun)
  63658231200, #    local_end 2018-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63658252800, #    utc_start 2018-04-01 08:00:00 (Sun)
  63676393200, #      utc_end 2018-10-28 07:00:00 (Sun)
  63658234800, #  local_start 2018-04-01 03:00:00 (Sun)
  63676375200, #    local_end 2018-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676393200, #    utc_start 2018-10-28 07:00:00 (Sun)
  63690307200, #      utc_end 2019-04-07 08:00:00 (Sun)
  63676371600, #  local_start 2018-10-28 01:00:00 (Sun)
  63690285600, #    local_end 2019-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63690307200, #    utc_start 2019-04-07 08:00:00 (Sun)
  63707842800, #      utc_end 2019-10-27 07:00:00 (Sun)
  63690289200, #  local_start 2019-04-07 03:00:00 (Sun)
  63707824800, #    local_end 2019-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63707842800, #    utc_start 2019-10-27 07:00:00 (Sun)
  63721756800, #      utc_end 2020-04-05 08:00:00 (Sun)
  63707821200, #  local_start 2019-10-27 01:00:00 (Sun)
  63721735200, #    local_end 2020-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63721756800, #    utc_start 2020-04-05 08:00:00 (Sun)
  63739292400, #      utc_end 2020-10-25 07:00:00 (Sun)
  63721738800, #  local_start 2020-04-05 03:00:00 (Sun)
  63739274400, #    local_end 2020-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739292400, #    utc_start 2020-10-25 07:00:00 (Sun)
  63753206400, #      utc_end 2021-04-04 08:00:00 (Sun)
  63739270800, #  local_start 2020-10-25 01:00:00 (Sun)
  63753184800, #    local_end 2021-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63753206400, #    utc_start 2021-04-04 08:00:00 (Sun)
  63771346800, #      utc_end 2021-10-31 07:00:00 (Sun)
  63753188400, #  local_start 2021-04-04 03:00:00 (Sun)
  63771328800, #    local_end 2021-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771346800, #    utc_start 2021-10-31 07:00:00 (Sun)
  63784656000, #      utc_end 2022-04-03 08:00:00 (Sun)
  63771325200, #  local_start 2021-10-31 01:00:00 (Sun)
  63784634400, #    local_end 2022-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63784656000, #    utc_start 2022-04-03 08:00:00 (Sun)
  63802796400, #      utc_end 2022-10-30 07:00:00 (Sun)
  63784638000, #  local_start 2022-04-03 03:00:00 (Sun)
  63802778400, #    local_end 2022-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63802796400, #    utc_start 2022-10-30 07:00:00 (Sun)
  63816105600, #      utc_end 2023-04-02 08:00:00 (Sun)
  63802774800, #  local_start 2022-10-30 01:00:00 (Sun)
  63816084000, #    local_end 2023-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63816105600, #    utc_start 2023-04-02 08:00:00 (Sun)
  63834246000, #      utc_end 2023-10-29 07:00:00 (Sun)
  63816087600, #  local_start 2023-04-02 03:00:00 (Sun)
  63834228000, #    local_end 2023-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834246000, #    utc_start 2023-10-29 07:00:00 (Sun)
  63848160000, #      utc_end 2024-04-07 08:00:00 (Sun)
  63834224400, #  local_start 2023-10-29 01:00:00 (Sun)
  63848138400, #    local_end 2024-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63848160000, #    utc_start 2024-04-07 08:00:00 (Sun)
  63865695600, #      utc_end 2024-10-27 07:00:00 (Sun)
  63848142000, #  local_start 2024-04-07 03:00:00 (Sun)
  63865677600, #    local_end 2024-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63865695600, #    utc_start 2024-10-27 07:00:00 (Sun)
  63879609600, #      utc_end 2025-04-06 08:00:00 (Sun)
  63865674000, #  local_start 2024-10-27 01:00:00 (Sun)
  63879588000, #    local_end 2025-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63879609600, #    utc_start 2025-04-06 08:00:00 (Sun)
  63897145200, #      utc_end 2025-10-26 07:00:00 (Sun)
  63879591600, #  local_start 2025-04-06 03:00:00 (Sun)
  63897127200, #    local_end 2025-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897145200, #    utc_start 2025-10-26 07:00:00 (Sun)
  63911059200, #      utc_end 2026-04-05 08:00:00 (Sun)
  63897123600, #  local_start 2025-10-26 01:00:00 (Sun)
  63911037600, #    local_end 2026-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63911059200, #    utc_start 2026-04-05 08:00:00 (Sun)
  63928594800, #      utc_end 2026-10-25 07:00:00 (Sun)
  63911041200, #  local_start 2026-04-05 03:00:00 (Sun)
  63928576800, #    local_end 2026-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63928594800, #    utc_start 2026-10-25 07:00:00 (Sun)
  63942508800, #      utc_end 2027-04-04 08:00:00 (Sun)
  63928573200, #  local_start 2026-10-25 01:00:00 (Sun)
  63942487200, #    local_end 2027-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63942508800, #    utc_start 2027-04-04 08:00:00 (Sun)
  63960649200, #      utc_end 2027-10-31 07:00:00 (Sun)
  63942490800, #  local_start 2027-04-04 03:00:00 (Sun)
  63960631200, #    local_end 2027-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {32}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 733866,
      'local_rd_secs' => 14400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 733866,
      'utc_rd_secs' => 14400,
      'utc_year' => 2011
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 733866,
      'local_rd_secs' => 32400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 733866,
      'utc_rd_secs' => 32400,
      'utc_year' => 2011
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2002',
      'in' => 'Apr',
      'letter' => 'D',
      'name' => 'Mexico',
      'offset_from_std' => 3600,
      'on' => 'Sun>=1',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2002',
      'in' => 'Oct',
      'letter' => 'S',
      'name' => 'Mexico',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_BAHIA_BANDERAS

    $main::fatpacked{"DateTime/TimeZone/America/Barbados.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_BARBADOS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Barbados;
  $DateTime::TimeZone::America::Barbados::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Barbados::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60684004709, #      utc_end 1924-01-01 03:58:29 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60683990400, #    local_end 1924-01-01 00:00:00 (Tue)
  -14309,
  0,
  'LMT',
      ],
      [
  60684004709, #    utc_start 1924-01-01 03:58:29 (Tue)
  60936465509, #      utc_end 1932-01-01 03:58:29 (Fri)
  60683990400, #  local_start 1924-01-01 00:00:00 (Tue)
  60936451200, #    local_end 1932-01-01 00:00:00 (Fri)
  -14309,
  0,
  'BMT',
      ],
      [
  60936465509, #    utc_start 1932-01-01 03:58:29 (Fri)
  62370626400, #      utc_end 1977-06-12 06:00:00 (Sun)
  60936451109, #  local_start 1931-12-31 23:58:29 (Thu)
  62370612000, #    local_end 1977-06-12 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62370626400, #    utc_start 1977-06-12 06:00:00 (Sun)
  62380299600, #      utc_end 1977-10-02 05:00:00 (Sun)
  62370615600, #  local_start 1977-06-12 03:00:00 (Sun)
  62380288800, #    local_end 1977-10-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62380299600, #    utc_start 1977-10-02 05:00:00 (Sun)
  62397237600, #      utc_end 1978-04-16 06:00:00 (Sun)
  62380285200, #  local_start 1977-10-02 01:00:00 (Sun)
  62397223200, #    local_end 1978-04-16 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62397237600, #    utc_start 1978-04-16 06:00:00 (Sun)
  62411749200, #      utc_end 1978-10-01 05:00:00 (Sun)
  62397226800, #  local_start 1978-04-16 03:00:00 (Sun)
  62411738400, #    local_end 1978-10-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62411749200, #    utc_start 1978-10-01 05:00:00 (Sun)
  62428687200, #      utc_end 1979-04-15 06:00:00 (Sun)
  62411734800, #  local_start 1978-10-01 01:00:00 (Sun)
  62428672800, #    local_end 1979-04-15 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62428687200, #    utc_start 1979-04-15 06:00:00 (Sun)
  62443198800, #      utc_end 1979-09-30 05:00:00 (Sun)
  62428676400, #  local_start 1979-04-15 03:00:00 (Sun)
  62443188000, #    local_end 1979-09-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62443198800, #    utc_start 1979-09-30 05:00:00 (Sun)
  62460741600, #      utc_end 1980-04-20 06:00:00 (Sun)
  62443184400, #  local_start 1979-09-30 01:00:00 (Sun)
  62460727200, #    local_end 1980-04-20 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62460741600, #    utc_start 1980-04-20 06:00:00 (Sun)
  62474389200, #      utc_end 1980-09-25 05:00:00 (Thu)
  62460730800, #  local_start 1980-04-20 03:00:00 (Sun)
  62474378400, #    local_end 1980-09-25 02:00:00 (Thu)
  -10800,
  1,
  'ADT',
      ],
      [
  62474389200, #    utc_start 1980-09-25 05:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  62474374800, #  local_start 1980-09-25 01:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  -14400,
  0,
  'AST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {4}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_BARBADOS

    $main::fatpacked{"DateTime/TimeZone/America/Belem.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_BELEM';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Belem;
  $DateTime::TimeZone::America::Belem::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Belem::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368469236, #      utc_end 1914-01-01 03:13:56 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  -11636,
  0,
  'LMT',
      ],
      [
  60368469236, #    utc_start 1914-01-01 03:13:56 (Thu)
  60928725600, #      utc_end 1931-10-03 14:00:00 (Sat)
  60368458436, #  local_start 1914-01-01 00:13:56 (Thu)
  60928714800, #    local_end 1931-10-03 11:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  60928725600, #    utc_start 1931-10-03 14:00:00 (Sat)
  60944320800, #      utc_end 1932-04-01 02:00:00 (Fri)
  60928718400, #  local_start 1931-10-03 12:00:00 (Sat)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -7200,
  1,
  'BRST',
      ],
      [
  60944320800, #    utc_start 1932-04-01 02:00:00 (Fri)
  60960308400, #      utc_end 1932-10-03 03:00:00 (Mon)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60960297600, #    local_end 1932-10-03 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  60960308400, #    utc_start 1932-10-03 03:00:00 (Mon)
  60975856800, #      utc_end 1933-04-01 02:00:00 (Sat)
  60960301200, #  local_start 1932-10-03 01:00:00 (Mon)
  60975849600, #    local_end 1933-04-01 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  60975856800, #    utc_start 1933-04-01 02:00:00 (Sat)
  61501863600, #      utc_end 1949-12-01 03:00:00 (Thu)
  60975846000, #  local_start 1933-03-31 23:00:00 (Fri)
  61501852800, #    local_end 1949-12-01 00:00:00 (Thu)
  -10800,
  0,
  'BRT',
      ],
      [
  61501863600, #    utc_start 1949-12-01 03:00:00 (Thu)
  61513614000, #      utc_end 1950-04-16 03:00:00 (Sun)
  61501856400, #  local_start 1949-12-01 01:00:00 (Thu)
  61513606800, #    local_end 1950-04-16 01:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61513614000, #    utc_start 1950-04-16 03:00:00 (Sun)
  61533399600, #      utc_end 1950-12-01 03:00:00 (Fri)
  61513603200, #  local_start 1950-04-16 00:00:00 (Sun)
  61533388800, #    local_end 1950-12-01 00:00:00 (Fri)
  -10800,
  0,
  'BRT',
      ],
      [
  61533399600, #    utc_start 1950-12-01 03:00:00 (Fri)
  61543850400, #      utc_end 1951-04-01 02:00:00 (Sun)
  61533392400, #  local_start 1950-12-01 01:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61543850400, #    utc_start 1951-04-01 02:00:00 (Sun)
  61564935600, #      utc_end 1951-12-01 03:00:00 (Sat)
  61543839600, #  local_start 1951-03-31 23:00:00 (Sat)
  61564924800, #    local_end 1951-12-01 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  61564935600, #    utc_start 1951-12-01 03:00:00 (Sat)
  61575472800, #      utc_end 1952-04-01 02:00:00 (Tue)
  61564928400, #  local_start 1951-12-01 01:00:00 (Sat)
  61575465600, #    local_end 1952-04-01 00:00:00 (Tue)
  -7200,
  1,
  'BRST',
      ],
      [
  61575472800, #    utc_start 1952-04-01 02:00:00 (Tue)
  61596558000, #      utc_end 1952-12-01 03:00:00 (Mon)
  61575462000, #  local_start 1952-03-31 23:00:00 (Mon)
  61596547200, #    local_end 1952-12-01 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  61596558000, #    utc_start 1952-12-01 03:00:00 (Mon)
  61604330400, #      utc_end 1953-03-01 02:00:00 (Sun)
  61596550800, #  local_start 1952-12-01 01:00:00 (Mon)
  61604323200, #    local_end 1953-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61604330400, #    utc_start 1953-03-01 02:00:00 (Sun)
  61944318000, #      utc_end 1963-12-09 03:00:00 (Mon)
  61604319600, #  local_start 1953-02-28 23:00:00 (Sat)
  61944307200, #    local_end 1963-12-09 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  61944318000, #    utc_start 1963-12-09 03:00:00 (Mon)
  61951485600, #      utc_end 1964-03-01 02:00:00 (Sun)
  61944310800, #  local_start 1963-12-09 01:00:00 (Mon)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61951485600, #    utc_start 1964-03-01 02:00:00 (Sun)
  61980519600, #      utc_end 1965-01-31 03:00:00 (Sun)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61980508800, #    local_end 1965-01-31 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  61980519600, #    utc_start 1965-01-31 03:00:00 (Sun)
  61985613600, #      utc_end 1965-03-31 02:00:00 (Wed)
  61980512400, #  local_start 1965-01-31 01:00:00 (Sun)
  61985606400, #    local_end 1965-03-31 00:00:00 (Wed)
  -7200,
  1,
  'BRST',
      ],
      [
  61985613600, #    utc_start 1965-03-31 02:00:00 (Wed)
  62006785200, #      utc_end 1965-12-01 03:00:00 (Wed)
  61985602800, #  local_start 1965-03-30 23:00:00 (Tue)
  62006774400, #    local_end 1965-12-01 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  62006785200, #    utc_start 1965-12-01 03:00:00 (Wed)
  62014557600, #      utc_end 1966-03-01 02:00:00 (Tue)
  62006778000, #  local_start 1965-12-01 01:00:00 (Wed)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -7200,
  1,
  'BRST',
      ],
      [
  62014557600, #    utc_start 1966-03-01 02:00:00 (Tue)
  62035729200, #      utc_end 1966-11-01 03:00:00 (Tue)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62035718400, #    local_end 1966-11-01 00:00:00 (Tue)
  -10800,
  0,
  'BRT',
      ],
      [
  62035729200, #    utc_start 1966-11-01 03:00:00 (Tue)
  62046093600, #      utc_end 1967-03-01 02:00:00 (Wed)
  62035722000, #  local_start 1966-11-01 01:00:00 (Tue)
  62046086400, #    local_end 1967-03-01 00:00:00 (Wed)
  -7200,
  1,
  'BRST',
      ],
      [
  62046093600, #    utc_start 1967-03-01 02:00:00 (Wed)
  62067265200, #      utc_end 1967-11-01 03:00:00 (Wed)
  62046082800, #  local_start 1967-02-28 23:00:00 (Tue)
  62067254400, #    local_end 1967-11-01 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  62067265200, #    utc_start 1967-11-01 03:00:00 (Wed)
  62077716000, #      utc_end 1968-03-01 02:00:00 (Fri)
  62067258000, #  local_start 1967-11-01 01:00:00 (Wed)
  62077708800, #    local_end 1968-03-01 00:00:00 (Fri)
  -7200,
  1,
  'BRST',
      ],
      [
  62077716000, #    utc_start 1968-03-01 02:00:00 (Fri)
  62635431600, #      utc_end 1985-11-02 03:00:00 (Sat)
  62077705200, #  local_start 1968-02-29 23:00:00 (Thu)
  62635420800, #    local_end 1985-11-02 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  62635431600, #    utc_start 1985-11-02 03:00:00 (Sat)
  62646919200, #      utc_end 1986-03-15 02:00:00 (Sat)
  62635424400, #  local_start 1985-11-02 01:00:00 (Sat)
  62646912000, #    local_end 1986-03-15 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  62646919200, #    utc_start 1986-03-15 02:00:00 (Sat)
  62666276400, #      utc_end 1986-10-25 03:00:00 (Sat)
  62646908400, #  local_start 1986-03-14 23:00:00 (Fri)
  62666265600, #    local_end 1986-10-25 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  62666276400, #    utc_start 1986-10-25 03:00:00 (Sat)
  62675949600, #      utc_end 1987-02-14 02:00:00 (Sat)
  62666269200, #  local_start 1986-10-25 01:00:00 (Sat)
  62675942400, #    local_end 1987-02-14 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  62675949600, #    utc_start 1987-02-14 02:00:00 (Sat)
  62697812400, #      utc_end 1987-10-25 03:00:00 (Sun)
  62675938800, #  local_start 1987-02-13 23:00:00 (Fri)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62697812400, #    utc_start 1987-10-25 03:00:00 (Sun)
  62706880800, #      utc_end 1988-02-07 02:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62706873600, #    local_end 1988-02-07 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62706880800, #    utc_start 1988-02-07 02:00:00 (Sun)
  62725719600, #      utc_end 1988-09-12 03:00:00 (Mon)
  62706870000, #  local_start 1988-02-06 23:00:00 (Sat)
  62725708800, #    local_end 1988-09-12 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  62725719600, #    utc_start 1988-09-12 03:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  62725708800, #  local_start 1988-09-12 00:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'BRT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {14}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_BELEM

    $main::fatpacked{"DateTime/TimeZone/America/Belize.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_BELIZE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Belize;
  $DateTime::TimeZone::America::Belize::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Belize::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60313182768, #      utc_end 1912-04-01 05:52:48 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60313161600, #    local_end 1912-04-01 00:00:00 (Mon)
  -21168,
  0,
  'LMT',
      ],
      [
  60313182768, #    utc_start 1912-04-01 05:52:48 (Mon)
  60518728800, #      utc_end 1918-10-06 06:00:00 (Sun)
  60313161168, #  local_start 1912-03-31 23:52:48 (Sun)
  60518707200, #    local_end 1918-10-06 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60518728800, #    utc_start 1918-10-06 06:00:00 (Sun)
  60529613400, #      utc_end 1919-02-09 05:30:00 (Sun)
  60518709000, #  local_start 1918-10-06 00:30:00 (Sun)
  60529593600, #    local_end 1919-02-09 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  60529613400, #    utc_start 1919-02-09 05:30:00 (Sun)
  60550178400, #      utc_end 1919-10-05 06:00:00 (Sun)
  60529591800, #  local_start 1919-02-08 23:30:00 (Sat)
  60550156800, #    local_end 1919-10-05 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60550178400, #    utc_start 1919-10-05 06:00:00 (Sun)
  60561667800, #      utc_end 1920-02-15 05:30:00 (Sun)
  60550158600, #  local_start 1919-10-05 00:30:00 (Sun)
  60561648000, #    local_end 1920-02-15 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  60561667800, #    utc_start 1920-02-15 05:30:00 (Sun)
  60581628000, #      utc_end 1920-10-03 06:00:00 (Sun)
  60561646200, #  local_start 1920-02-14 23:30:00 (Sat)
  60581606400, #    local_end 1920-10-03 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60581628000, #    utc_start 1920-10-03 06:00:00 (Sun)
  60593117400, #      utc_end 1921-02-13 05:30:00 (Sun)
  60581608200, #  local_start 1920-10-03 00:30:00 (Sun)
  60593097600, #    local_end 1921-02-13 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  60593117400, #    utc_start 1921-02-13 05:30:00 (Sun)
  60613077600, #      utc_end 1921-10-02 06:00:00 (Sun)
  60593095800, #  local_start 1921-02-12 23:30:00 (Sat)
  60613056000, #    local_end 1921-10-02 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60613077600, #    utc_start 1921-10-02 06:00:00 (Sun)
  60624567000, #      utc_end 1922-02-12 05:30:00 (Sun)
  60613057800, #  local_start 1921-10-02 00:30:00 (Sun)
  60624547200, #    local_end 1922-02-12 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  60624567000, #    utc_start 1922-02-12 05:30:00 (Sun)
  60645132000, #      utc_end 1922-10-08 06:00:00 (Sun)
  60624545400, #  local_start 1922-02-11 23:30:00 (Sat)
  60645110400, #    local_end 1922-10-08 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60645132000, #    utc_start 1922-10-08 06:00:00 (Sun)
  60656016600, #      utc_end 1923-02-11 05:30:00 (Sun)
  60645112200, #  local_start 1922-10-08 00:30:00 (Sun)
  60655996800, #    local_end 1923-02-11 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  60656016600, #    utc_start 1923-02-11 05:30:00 (Sun)
  60676581600, #      utc_end 1923-10-07 06:00:00 (Sun)
  60655995000, #  local_start 1923-02-10 23:30:00 (Sat)
  60676560000, #    local_end 1923-10-07 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60676581600, #    utc_start 1923-10-07 06:00:00 (Sun)
  60687466200, #      utc_end 1924-02-10 05:30:00 (Sun)
  60676561800, #  local_start 1923-10-07 00:30:00 (Sun)
  60687446400, #    local_end 1924-02-10 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  60687466200, #    utc_start 1924-02-10 05:30:00 (Sun)
  60708031200, #      utc_end 1924-10-05 06:00:00 (Sun)
  60687444600, #  local_start 1924-02-09 23:30:00 (Sat)
  60708009600, #    local_end 1924-10-05 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60708031200, #    utc_start 1924-10-05 06:00:00 (Sun)
  60719520600, #      utc_end 1925-02-15 05:30:00 (Sun)
  60708011400, #  local_start 1924-10-05 00:30:00 (Sun)
  60719500800, #    local_end 1925-02-15 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  60719520600, #    utc_start 1925-02-15 05:30:00 (Sun)
  60739480800, #      utc_end 1925-10-04 06:00:00 (Sun)
  60719499000, #  local_start 1925-02-14 23:30:00 (Sat)
  60739459200, #    local_end 1925-10-04 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60739480800, #    utc_start 1925-10-04 06:00:00 (Sun)
  60750970200, #      utc_end 1926-02-14 05:30:00 (Sun)
  60739461000, #  local_start 1925-10-04 00:30:00 (Sun)
  60750950400, #    local_end 1926-02-14 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  60750970200, #    utc_start 1926-02-14 05:30:00 (Sun)
  60770930400, #      utc_end 1926-10-03 06:00:00 (Sun)
  60750948600, #  local_start 1926-02-13 23:30:00 (Sat)
  60770908800, #    local_end 1926-10-03 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60770930400, #    utc_start 1926-10-03 06:00:00 (Sun)
  60782419800, #      utc_end 1927-02-13 05:30:00 (Sun)
  60770910600, #  local_start 1926-10-03 00:30:00 (Sun)
  60782400000, #    local_end 1927-02-13 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  60782419800, #    utc_start 1927-02-13 05:30:00 (Sun)
  60802380000, #      utc_end 1927-10-02 06:00:00 (Sun)
  60782398200, #  local_start 1927-02-12 23:30:00 (Sat)
  60802358400, #    local_end 1927-10-02 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60802380000, #    utc_start 1927-10-02 06:00:00 (Sun)
  60813869400, #      utc_end 1928-02-12 05:30:00 (Sun)
  60802360200, #  local_start 1927-10-02 00:30:00 (Sun)
  60813849600, #    local_end 1928-02-12 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  60813869400, #    utc_start 1928-02-12 05:30:00 (Sun)
  60834434400, #      utc_end 1928-10-07 06:00:00 (Sun)
  60813847800, #  local_start 1928-02-11 23:30:00 (Sat)
  60834412800, #    local_end 1928-10-07 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60834434400, #    utc_start 1928-10-07 06:00:00 (Sun)
  60845319000, #      utc_end 1929-02-10 05:30:00 (Sun)
  60834414600, #  local_start 1928-10-07 00:30:00 (Sun)
  60845299200, #    local_end 1929-02-10 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  60845319000, #    utc_start 1929-02-10 05:30:00 (Sun)
  60865884000, #      utc_end 1929-10-06 06:00:00 (Sun)
  60845297400, #  local_start 1929-02-09 23:30:00 (Sat)
  60865862400, #    local_end 1929-10-06 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60865884000, #    utc_start 1929-10-06 06:00:00 (Sun)
  60876768600, #      utc_end 1930-02-09 05:30:00 (Sun)
  60865864200, #  local_start 1929-10-06 00:30:00 (Sun)
  60876748800, #    local_end 1930-02-09 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  60876768600, #    utc_start 1930-02-09 05:30:00 (Sun)
  60897333600, #      utc_end 1930-10-05 06:00:00 (Sun)
  60876747000, #  local_start 1930-02-08 23:30:00 (Sat)
  60897312000, #    local_end 1930-10-05 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60897333600, #    utc_start 1930-10-05 06:00:00 (Sun)
  60908823000, #      utc_end 1931-02-15 05:30:00 (Sun)
  60897313800, #  local_start 1930-10-05 00:30:00 (Sun)
  60908803200, #    local_end 1931-02-15 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  60908823000, #    utc_start 1931-02-15 05:30:00 (Sun)
  60928783200, #      utc_end 1931-10-04 06:00:00 (Sun)
  60908801400, #  local_start 1931-02-14 23:30:00 (Sat)
  60928761600, #    local_end 1931-10-04 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60928783200, #    utc_start 1931-10-04 06:00:00 (Sun)
  60940272600, #      utc_end 1932-02-14 05:30:00 (Sun)
  60928763400, #  local_start 1931-10-04 00:30:00 (Sun)
  60940252800, #    local_end 1932-02-14 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  60940272600, #    utc_start 1932-02-14 05:30:00 (Sun)
  60960232800, #      utc_end 1932-10-02 06:00:00 (Sun)
  60940251000, #  local_start 1932-02-13 23:30:00 (Sat)
  60960211200, #    local_end 1932-10-02 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60960232800, #    utc_start 1932-10-02 06:00:00 (Sun)
  60971722200, #      utc_end 1933-02-12 05:30:00 (Sun)
  60960213000, #  local_start 1932-10-02 00:30:00 (Sun)
  60971702400, #    local_end 1933-02-12 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  60971722200, #    utc_start 1933-02-12 05:30:00 (Sun)
  60992287200, #      utc_end 1933-10-08 06:00:00 (Sun)
  60971700600, #  local_start 1933-02-11 23:30:00 (Sat)
  60992265600, #    local_end 1933-10-08 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60992287200, #    utc_start 1933-10-08 06:00:00 (Sun)
  61003171800, #      utc_end 1934-02-11 05:30:00 (Sun)
  60992267400, #  local_start 1933-10-08 00:30:00 (Sun)
  61003152000, #    local_end 1934-02-11 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  61003171800, #    utc_start 1934-02-11 05:30:00 (Sun)
  61023736800, #      utc_end 1934-10-07 06:00:00 (Sun)
  61003150200, #  local_start 1934-02-10 23:30:00 (Sat)
  61023715200, #    local_end 1934-10-07 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61023736800, #    utc_start 1934-10-07 06:00:00 (Sun)
  61034621400, #      utc_end 1935-02-10 05:30:00 (Sun)
  61023717000, #  local_start 1934-10-07 00:30:00 (Sun)
  61034601600, #    local_end 1935-02-10 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  61034621400, #    utc_start 1935-02-10 05:30:00 (Sun)
  61055186400, #      utc_end 1935-10-06 06:00:00 (Sun)
  61034599800, #  local_start 1935-02-09 23:30:00 (Sat)
  61055164800, #    local_end 1935-10-06 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61055186400, #    utc_start 1935-10-06 06:00:00 (Sun)
  61066071000, #      utc_end 1936-02-09 05:30:00 (Sun)
  61055166600, #  local_start 1935-10-06 00:30:00 (Sun)
  61066051200, #    local_end 1936-02-09 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  61066071000, #    utc_start 1936-02-09 05:30:00 (Sun)
  61086636000, #      utc_end 1936-10-04 06:00:00 (Sun)
  61066049400, #  local_start 1936-02-08 23:30:00 (Sat)
  61086614400, #    local_end 1936-10-04 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61086636000, #    utc_start 1936-10-04 06:00:00 (Sun)
  61098125400, #      utc_end 1937-02-14 05:30:00 (Sun)
  61086616200, #  local_start 1936-10-04 00:30:00 (Sun)
  61098105600, #    local_end 1937-02-14 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  61098125400, #    utc_start 1937-02-14 05:30:00 (Sun)
  61118085600, #      utc_end 1937-10-03 06:00:00 (Sun)
  61098103800, #  local_start 1937-02-13 23:30:00 (Sat)
  61118064000, #    local_end 1937-10-03 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61118085600, #    utc_start 1937-10-03 06:00:00 (Sun)
  61129575000, #      utc_end 1938-02-13 05:30:00 (Sun)
  61118065800, #  local_start 1937-10-03 00:30:00 (Sun)
  61129555200, #    local_end 1938-02-13 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  61129575000, #    utc_start 1938-02-13 05:30:00 (Sun)
  61149535200, #      utc_end 1938-10-02 06:00:00 (Sun)
  61129553400, #  local_start 1938-02-12 23:30:00 (Sat)
  61149513600, #    local_end 1938-10-02 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61149535200, #    utc_start 1938-10-02 06:00:00 (Sun)
  61161024600, #      utc_end 1939-02-12 05:30:00 (Sun)
  61149515400, #  local_start 1938-10-02 00:30:00 (Sun)
  61161004800, #    local_end 1939-02-12 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  61161024600, #    utc_start 1939-02-12 05:30:00 (Sun)
  61181589600, #      utc_end 1939-10-08 06:00:00 (Sun)
  61161003000, #  local_start 1939-02-11 23:30:00 (Sat)
  61181568000, #    local_end 1939-10-08 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61181589600, #    utc_start 1939-10-08 06:00:00 (Sun)
  61192474200, #      utc_end 1940-02-11 05:30:00 (Sun)
  61181569800, #  local_start 1939-10-08 00:30:00 (Sun)
  61192454400, #    local_end 1940-02-11 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  61192474200, #    utc_start 1940-02-11 05:30:00 (Sun)
  61213039200, #      utc_end 1940-10-06 06:00:00 (Sun)
  61192452600, #  local_start 1940-02-10 23:30:00 (Sat)
  61213017600, #    local_end 1940-10-06 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61213039200, #    utc_start 1940-10-06 06:00:00 (Sun)
  61223923800, #      utc_end 1941-02-09 05:30:00 (Sun)
  61213019400, #  local_start 1940-10-06 00:30:00 (Sun)
  61223904000, #    local_end 1941-02-09 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  61223923800, #    utc_start 1941-02-09 05:30:00 (Sun)
  61244488800, #      utc_end 1941-10-05 06:00:00 (Sun)
  61223902200, #  local_start 1941-02-08 23:30:00 (Sat)
  61244467200, #    local_end 1941-10-05 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61244488800, #    utc_start 1941-10-05 06:00:00 (Sun)
  61255978200, #      utc_end 1942-02-15 05:30:00 (Sun)
  61244469000, #  local_start 1941-10-05 00:30:00 (Sun)
  61255958400, #    local_end 1942-02-15 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  61255978200, #    utc_start 1942-02-15 05:30:00 (Sun)
  61275938400, #      utc_end 1942-10-04 06:00:00 (Sun)
  61255956600, #  local_start 1942-02-14 23:30:00 (Sat)
  61275916800, #    local_end 1942-10-04 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61275938400, #    utc_start 1942-10-04 06:00:00 (Sun)
  61287427800, #      utc_end 1943-02-14 05:30:00 (Sun)
  61275918600, #  local_start 1942-10-04 00:30:00 (Sun)
  61287408000, #    local_end 1943-02-14 00:00:00 (Sun)
  -19800,
  1,
  'CHDT',
      ],
      [
  61287427800, #    utc_start 1943-02-14 05:30:00 (Sun)
  62259602400, #      utc_end 1973-12-05 06:00:00 (Wed)
  61287406200, #  local_start 1943-02-13 23:30:00 (Sat)
  62259580800, #    local_end 1973-12-05 00:00:00 (Wed)
  -21600,
  0,
  'CST',
      ],
      [
  62259602400, #    utc_start 1973-12-05 06:00:00 (Wed)
  62265301200, #      utc_end 1974-02-09 05:00:00 (Sat)
  62259584400, #  local_start 1973-12-05 01:00:00 (Wed)
  62265283200, #    local_end 1974-02-09 00:00:00 (Sat)
  -18000,
  1,
  'CDT',
      ],
      [
  62265301200, #    utc_start 1974-02-09 05:00:00 (Sat)
  62544722400, #      utc_end 1982-12-18 06:00:00 (Sat)
  62265279600, #  local_start 1974-02-08 23:00:00 (Fri)
  62544700800, #    local_end 1982-12-18 00:00:00 (Sat)
  -21600,
  0,
  'CST',
      ],
      [
  62544722400, #    utc_start 1982-12-18 06:00:00 (Sat)
  62549557200, #      utc_end 1983-02-12 05:00:00 (Sat)
  62544704400, #  local_start 1982-12-18 01:00:00 (Sat)
  62549539200, #    local_end 1983-02-12 00:00:00 (Sat)
  -18000,
  1,
  'CDT',
      ],
      [
  62549557200, #    utc_start 1983-02-12 05:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  62549535600, #  local_start 1983-02-11 23:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #    local_end
  -21600,
  0,
  'CST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {27}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_BELIZE

    $main::fatpacked{"DateTime/TimeZone/America/Blanc_Sablon.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_BLANC_SABLON';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Blanc_Sablon;
  $DateTime::TimeZone::America::Blanc_Sablon::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Blanc_Sablon::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59421786508, #      utc_end 1884-01-01 03:48:28 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59421772800, #    local_end 1884-01-01 00:00:00 (Tue)
  -13708,
  0,
  'LMT',
      ],
      [
  59421786508, #    utc_start 1884-01-01 03:48:28 (Tue)
  60503608800, #      utc_end 1918-04-14 06:00:00 (Sun)
  59421772108, #  local_start 1883-12-31 23:48:28 (Mon)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60503608800, #    utc_start 1918-04-14 06:00:00 (Sun)
  60520539600, #      utc_end 1918-10-27 05:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  60520539600, #    utc_start 1918-10-27 05:00:00 (Sun)
  61255461600, #      utc_end 1942-02-09 06:00:00 (Mon)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -14400,
  0,
  'AST',
      ],
      [
  61255461600, #    utc_start 1942-02-09 06:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366276800, #    local_end 1945-08-14 20:00:00 (Tue)
  -10800,
  1,
  'AWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370283600, #      utc_end 1945-09-30 05:00:00 (Sun)
  61366276800, #  local_start 1945-08-14 20:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -10800,
  1,
  'APT',
      ],
      [
  61370283600, #    utc_start 1945-09-30 05:00:00 (Sun)
  62135697600, #      utc_end 1970-01-01 04:00:00 (Thu)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  62135683200, #    local_end 1970-01-01 00:00:00 (Thu)
  -14400,
  0,
  'AST',
      ],
      [
  62135697600, #    utc_start 1970-01-01 04:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  62135683200, #  local_start 1970-01-01 00:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  -14400,
  0,
  'AST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {3}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_BLANC_SABLON

    $main::fatpacked{"DateTime/TimeZone/America/Boa_Vista.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_BOA_VISTA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Boa_Vista;
  $DateTime::TimeZone::America::Boa_Vista::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Boa_Vista::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368472160, #      utc_end 1914-01-01 04:02:40 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  -14560,
  0,
  'LMT',
      ],
      [
  60368472160, #    utc_start 1914-01-01 04:02:40 (Thu)
  60928729200, #      utc_end 1931-10-03 15:00:00 (Sat)
  60368457760, #  local_start 1914-01-01 00:02:40 (Thu)
  60928714800, #    local_end 1931-10-03 11:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  60928729200, #    utc_start 1931-10-03 15:00:00 (Sat)
  60944324400, #      utc_end 1932-04-01 03:00:00 (Fri)
  60928718400, #  local_start 1931-10-03 12:00:00 (Sat)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -10800,
  1,
  'AMST',
      ],
      [
  60944324400, #    utc_start 1932-04-01 03:00:00 (Fri)
  60960312000, #      utc_end 1932-10-03 04:00:00 (Mon)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60960297600, #    local_end 1932-10-03 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  60960312000, #    utc_start 1932-10-03 04:00:00 (Mon)
  60975860400, #      utc_end 1933-04-01 03:00:00 (Sat)
  60960301200, #  local_start 1932-10-03 01:00:00 (Mon)
  60975849600, #    local_end 1933-04-01 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  60975860400, #    utc_start 1933-04-01 03:00:00 (Sat)
  61501867200, #      utc_end 1949-12-01 04:00:00 (Thu)
  60975846000, #  local_start 1933-03-31 23:00:00 (Fri)
  61501852800, #    local_end 1949-12-01 00:00:00 (Thu)
  -14400,
  0,
  'AMT',
      ],
      [
  61501867200, #    utc_start 1949-12-01 04:00:00 (Thu)
  61513617600, #      utc_end 1950-04-16 04:00:00 (Sun)
  61501856400, #  local_start 1949-12-01 01:00:00 (Thu)
  61513606800, #    local_end 1950-04-16 01:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61513617600, #    utc_start 1950-04-16 04:00:00 (Sun)
  61533403200, #      utc_end 1950-12-01 04:00:00 (Fri)
  61513603200, #  local_start 1950-04-16 00:00:00 (Sun)
  61533388800, #    local_end 1950-12-01 00:00:00 (Fri)
  -14400,
  0,
  'AMT',
      ],
      [
  61533403200, #    utc_start 1950-12-01 04:00:00 (Fri)
  61543854000, #      utc_end 1951-04-01 03:00:00 (Sun)
  61533392400, #  local_start 1950-12-01 01:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61543854000, #    utc_start 1951-04-01 03:00:00 (Sun)
  61564939200, #      utc_end 1951-12-01 04:00:00 (Sat)
  61543839600, #  local_start 1951-03-31 23:00:00 (Sat)
  61564924800, #    local_end 1951-12-01 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  61564939200, #    utc_start 1951-12-01 04:00:00 (Sat)
  61575476400, #      utc_end 1952-04-01 03:00:00 (Tue)
  61564928400, #  local_start 1951-12-01 01:00:00 (Sat)
  61575465600, #    local_end 1952-04-01 00:00:00 (Tue)
  -10800,
  1,
  'AMST',
      ],
      [
  61575476400, #    utc_start 1952-04-01 03:00:00 (Tue)
  61596561600, #      utc_end 1952-12-01 04:00:00 (Mon)
  61575462000, #  local_start 1952-03-31 23:00:00 (Mon)
  61596547200, #    local_end 1952-12-01 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  61596561600, #    utc_start 1952-12-01 04:00:00 (Mon)
  61604334000, #      utc_end 1953-03-01 03:00:00 (Sun)
  61596550800, #  local_start 1952-12-01 01:00:00 (Mon)
  61604323200, #    local_end 1953-03-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61604334000, #    utc_start 1953-03-01 03:00:00 (Sun)
  61944321600, #      utc_end 1963-12-09 04:00:00 (Mon)
  61604319600, #  local_start 1953-02-28 23:00:00 (Sat)
  61944307200, #    local_end 1963-12-09 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  61944321600, #    utc_start 1963-12-09 04:00:00 (Mon)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944310800, #  local_start 1963-12-09 01:00:00 (Mon)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61980523200, #      utc_end 1965-01-31 04:00:00 (Sun)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61980508800, #    local_end 1965-01-31 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  61980523200, #    utc_start 1965-01-31 04:00:00 (Sun)
  61985617200, #      utc_end 1965-03-31 03:00:00 (Wed)
  61980512400, #  local_start 1965-01-31 01:00:00 (Sun)
  61985606400, #    local_end 1965-03-31 00:00:00 (Wed)
  -10800,
  1,
  'AMST',
      ],
      [
  61985617200, #    utc_start 1965-03-31 03:00:00 (Wed)
  62006788800, #      utc_end 1965-12-01 04:00:00 (Wed)
  61985602800, #  local_start 1965-03-30 23:00:00 (Tue)
  62006774400, #    local_end 1965-12-01 00:00:00 (Wed)
  -14400,
  0,
  'AMT',
      ],
      [
  62006788800, #    utc_start 1965-12-01 04:00:00 (Wed)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62006778000, #  local_start 1965-12-01 01:00:00 (Wed)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'AMST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62035732800, #      utc_end 1966-11-01 04:00:00 (Tue)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62035718400, #    local_end 1966-11-01 00:00:00 (Tue)
  -14400,
  0,
  'AMT',
      ],
      [
  62035732800, #    utc_start 1966-11-01 04:00:00 (Tue)
  62046097200, #      utc_end 1967-03-01 03:00:00 (Wed)
  62035722000, #  local_start 1966-11-01 01:00:00 (Tue)
  62046086400, #    local_end 1967-03-01 00:00:00 (Wed)
  -10800,
  1,
  'AMST',
      ],
      [
  62046097200, #    utc_start 1967-03-01 03:00:00 (Wed)
  62067268800, #      utc_end 1967-11-01 04:00:00 (Wed)
  62046082800, #  local_start 1967-02-28 23:00:00 (Tue)
  62067254400, #    local_end 1967-11-01 00:00:00 (Wed)
  -14400,
  0,
  'AMT',
      ],
      [
  62067268800, #    utc_start 1967-11-01 04:00:00 (Wed)
  62077719600, #      utc_end 1968-03-01 03:00:00 (Fri)
  62067258000, #  local_start 1967-11-01 01:00:00 (Wed)
  62077708800, #    local_end 1968-03-01 00:00:00 (Fri)
  -10800,
  1,
  'AMST',
      ],
      [
  62077719600, #    utc_start 1968-03-01 03:00:00 (Fri)
  62635435200, #      utc_end 1985-11-02 04:00:00 (Sat)
  62077705200, #  local_start 1968-02-29 23:00:00 (Thu)
  62635420800, #    local_end 1985-11-02 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  62635435200, #    utc_start 1985-11-02 04:00:00 (Sat)
  62646922800, #      utc_end 1986-03-15 03:00:00 (Sat)
  62635424400, #  local_start 1985-11-02 01:00:00 (Sat)
  62646912000, #    local_end 1986-03-15 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  62646922800, #    utc_start 1986-03-15 03:00:00 (Sat)
  62666280000, #      utc_end 1986-10-25 04:00:00 (Sat)
  62646908400, #  local_start 1986-03-14 23:00:00 (Fri)
  62666265600, #    local_end 1986-10-25 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  62666280000, #    utc_start 1986-10-25 04:00:00 (Sat)
  62675953200, #      utc_end 1987-02-14 03:00:00 (Sat)
  62666269200, #  local_start 1986-10-25 01:00:00 (Sat)
  62675942400, #    local_end 1987-02-14 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  62675953200, #    utc_start 1987-02-14 03:00:00 (Sat)
  62697816000, #      utc_end 1987-10-25 04:00:00 (Sun)
  62675938800, #  local_start 1987-02-13 23:00:00 (Fri)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62697816000, #    utc_start 1987-10-25 04:00:00 (Sun)
  62706884400, #      utc_end 1988-02-07 03:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62706873600, #    local_end 1988-02-07 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62706884400, #    utc_start 1988-02-07 03:00:00 (Sun)
  62725723200, #      utc_end 1988-09-12 04:00:00 (Mon)
  62706870000, #  local_start 1988-02-06 23:00:00 (Sat)
  62725708800, #    local_end 1988-09-12 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  62725723200, #    utc_start 1988-09-12 04:00:00 (Mon)
  63074347200, #      utc_end 1999-09-30 04:00:00 (Thu)
  62725708800, #  local_start 1988-09-12 00:00:00 (Mon)
  63074332800, #    local_end 1999-09-30 00:00:00 (Thu)
  -14400,
  0,
  'AMT',
      ],
      [
  63074347200, #    utc_start 1999-09-30 04:00:00 (Thu)
  63074606400, #      utc_end 1999-10-03 04:00:00 (Sun)
  63074332800, #  local_start 1999-09-30 00:00:00 (Thu)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63074606400, #    utc_start 1999-10-03 04:00:00 (Sun)
  63087303600, #      utc_end 2000-02-27 03:00:00 (Sun)
  63074595600, #  local_start 1999-10-03 01:00:00 (Sun)
  63087292800, #    local_end 2000-02-27 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63087303600, #    utc_start 2000-02-27 03:00:00 (Sun)
  63106660800, #      utc_end 2000-10-08 04:00:00 (Sun)
  63087289200, #  local_start 2000-02-26 23:00:00 (Sat)
  63106646400, #    local_end 2000-10-08 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63106660800, #    utc_start 2000-10-08 04:00:00 (Sun)
  63107262000, #      utc_end 2000-10-15 03:00:00 (Sun)
  63106650000, #  local_start 2000-10-08 01:00:00 (Sun)
  63107251200, #    local_end 2000-10-15 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63107262000, #    utc_start 2000-10-15 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63107247600, #  local_start 2000-10-14 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -14400,
  0,
  'AMT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {16}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_BOA_VISTA

    $main::fatpacked{"DateTime/TimeZone/America/Bogota.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_BOGOTA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Bogota;
  $DateTime::TimeZone::America::Bogota::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Bogota::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59428011376, #      utc_end 1884-03-13 04:56:16 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59427993600, #    local_end 1884-03-13 00:00:00 (Thu)
  -17776,
  0,
  'LMT',
      ],
      [
  59428011376, #    utc_start 1884-03-13 04:56:16 (Thu)
  60396641776, #      utc_end 1914-11-23 04:56:16 (Mon)
  59427993600, #  local_start 1884-03-13 00:00:00 (Thu)
  60396624000, #    local_end 1914-11-23 00:00:00 (Mon)
  -17776,
  0,
  'BMT',
      ],
      [
  60396641776, #    utc_start 1914-11-23 04:56:16 (Mon)
  62840552400, #      utc_end 1992-05-03 05:00:00 (Sun)
  60396623776, #  local_start 1914-11-22 23:56:16 (Sun)
  62840534400, #    local_end 1992-05-03 00:00:00 (Sun)
  -18000,
  0,
  'COT',
      ],
      [
  62840552400, #    utc_start 1992-05-03 05:00:00 (Sun)
  62869579200, #      utc_end 1993-04-04 04:00:00 (Sun)
  62840538000, #  local_start 1992-05-03 01:00:00 (Sun)
  62869564800, #    local_end 1993-04-04 00:00:00 (Sun)
  -14400,
  1,
  'COST',
      ],
      [
  62869579200, #    utc_start 1993-04-04 04:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  62869561200, #  local_start 1993-04-03 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -18000,
  0,
  'COT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {1}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_BOGOTA

    $main::fatpacked{"DateTime/TimeZone/America/Boise.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_BOISE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Boise;
  $DateTime::TimeZone::America::Boise::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Boise::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418043200, #      utc_end 1883-11-18 20:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418015311, #    local_end 1883-11-18 12:15:11 (Sun)
  -27889,
  0,
  'LMT',
      ],
      [
  59418043200, #    utc_start 1883-11-18 20:00:00 (Sun)
  60502413600, #      utc_end 1918-03-31 10:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  60502413600, #    utc_start 1918-03-31 10:00:00 (Sun)
  60520554000, #      utc_end 1918-10-27 09:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  60520554000, #    utc_start 1918-10-27 09:00:00 (Sun)
  60533863200, #      utc_end 1919-03-30 10:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  60533863200, #    utc_start 1919-03-30 10:00:00 (Sun)
  60552003600, #      utc_end 1919-10-26 09:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  60552003600, #    utc_start 1919-10-26 09:00:00 (Sun)
  60663895200, #      utc_end 1923-05-13 10:00:00 (Sun)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  60663866400, #    local_end 1923-05-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  60663895200, #    utc_start 1923-05-13 10:00:00 (Sun)
  61255472400, #      utc_end 1942-02-09 09:00:00 (Mon)
  60663870000, #  local_start 1923-05-13 03:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -25200,
  0,
  'MST',
      ],
      [
  61255472400, #    utc_start 1942-02-09 09:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366266000, #    local_end 1945-08-14 17:00:00 (Tue)
  -21600,
  1,
  'MWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370294400, #      utc_end 1945-09-30 08:00:00 (Sun)
  61366266000, #  local_start 1945-08-14 17:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MPT',
      ],
      [
  61370294400, #    utc_start 1945-09-30 08:00:00 (Sun)
  62051302800, #      utc_end 1967-04-30 09:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62051302800, #    utc_start 1967-04-30 09:00:00 (Sun)
  62067024000, #      utc_end 1967-10-29 08:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62067024000, #    utc_start 1967-10-29 08:00:00 (Sun)
  62082752400, #      utc_end 1968-04-28 09:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62082752400, #    utc_start 1968-04-28 09:00:00 (Sun)
  62098473600, #      utc_end 1968-10-27 08:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62098473600, #    utc_start 1968-10-27 08:00:00 (Sun)
  62114202000, #      utc_end 1969-04-27 09:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62114202000, #    utc_start 1969-04-27 09:00:00 (Sun)
  62129923200, #      utc_end 1969-10-26 08:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62129923200, #    utc_start 1969-10-26 08:00:00 (Sun)
  62145651600, #      utc_end 1970-04-26 09:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62145651600, #    utc_start 1970-04-26 09:00:00 (Sun)
  62161372800, #      utc_end 1970-10-25 08:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62161372800, #    utc_start 1970-10-25 08:00:00 (Sun)
  62177101200, #      utc_end 1971-04-25 09:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62177101200, #    utc_start 1971-04-25 09:00:00 (Sun)
  62193427200, #      utc_end 1971-10-31 08:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62193427200, #    utc_start 1971-10-31 08:00:00 (Sun)
  62209155600, #      utc_end 1972-04-30 09:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62209155600, #    utc_start 1972-04-30 09:00:00 (Sun)
  62224876800, #      utc_end 1972-10-29 08:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62224876800, #    utc_start 1972-10-29 08:00:00 (Sun)
  62240605200, #      utc_end 1973-04-29 09:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62240605200, #    utc_start 1973-04-29 09:00:00 (Sun)
  62256326400, #      utc_end 1973-10-28 08:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62256326400, #    utc_start 1973-10-28 08:00:00 (Sun)
  62261938800, #      utc_end 1974-01-01 07:00:00 (Tue)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62261913600, #    local_end 1974-01-01 00:00:00 (Tue)
  -25200,
  0,
  'MST',
      ],
      [
  62261938800, #    utc_start 1974-01-01 07:00:00 (Tue)
  62264797200, #      utc_end 1974-02-03 09:00:00 (Sun)
  62261913600, #  local_start 1974-01-01 00:00:00 (Tue)
  62264772000, #    local_end 1974-02-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62264797200, #    utc_start 1974-02-03 09:00:00 (Sun)
  62287776000, #      utc_end 1974-10-27 08:00:00 (Sun)
  62264775600, #  local_start 1974-02-03 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62287776000, #    utc_start 1974-10-27 08:00:00 (Sun)
  62298061200, #      utc_end 1975-02-23 09:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62298061200, #    utc_start 1975-02-23 09:00:00 (Sun)
  62319225600, #      utc_end 1975-10-26 08:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62319225600, #    utc_start 1975-10-26 08:00:00 (Sun)
  62334954000, #      utc_end 1976-04-25 09:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62334954000, #    utc_start 1976-04-25 09:00:00 (Sun)
  62351280000, #      utc_end 1976-10-31 08:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62351280000, #    utc_start 1976-10-31 08:00:00 (Sun)
  62366403600, #      utc_end 1977-04-24 09:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62366403600, #    utc_start 1977-04-24 09:00:00 (Sun)
  62382729600, #      utc_end 1977-10-30 08:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62382729600, #    utc_start 1977-10-30 08:00:00 (Sun)
  62398458000, #      utc_end 1978-04-30 09:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62398458000, #    utc_start 1978-04-30 09:00:00 (Sun)
  62414179200, #      utc_end 1978-10-29 08:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62414179200, #    utc_start 1978-10-29 08:00:00 (Sun)
  62429907600, #      utc_end 1979-04-29 09:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62429907600, #    utc_start 1979-04-29 09:00:00 (Sun)
  62445628800, #      utc_end 1979-10-28 08:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62445628800, #    utc_start 1979-10-28 08:00:00 (Sun)
  62461357200, #      utc_end 1980-04-27 09:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62461357200, #    utc_start 1980-04-27 09:00:00 (Sun)
  62477078400, #      utc_end 1980-10-26 08:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62477078400, #    utc_start 1980-10-26 08:00:00 (Sun)
  62492806800, #      utc_end 1981-04-26 09:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62492806800, #    utc_start 1981-04-26 09:00:00 (Sun)
  62508528000, #      utc_end 1981-10-25 08:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62508528000, #    utc_start 1981-10-25 08:00:00 (Sun)
  62524256400, #      utc_end 1982-04-25 09:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62524256400, #    utc_start 1982-04-25 09:00:00 (Sun)
  62540582400, #      utc_end 1982-10-31 08:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62540582400, #    utc_start 1982-10-31 08:00:00 (Sun)
  62555706000, #      utc_end 1983-04-24 09:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62555706000, #    utc_start 1983-04-24 09:00:00 (Sun)
  62572032000, #      utc_end 1983-10-30 08:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62572032000, #    utc_start 1983-10-30 08:00:00 (Sun)
  62587760400, #      utc_end 1984-04-29 09:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62587760400, #    utc_start 1984-04-29 09:00:00 (Sun)
  62603481600, #      utc_end 1984-10-28 08:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62603481600, #    utc_start 1984-10-28 08:00:00 (Sun)
  62619210000, #      utc_end 1985-04-28 09:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62619210000, #    utc_start 1985-04-28 09:00:00 (Sun)
  62634931200, #      utc_end 1985-10-27 08:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62634931200, #    utc_start 1985-10-27 08:00:00 (Sun)
  62650659600, #      utc_end 1986-04-27 09:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62650659600, #    utc_start 1986-04-27 09:00:00 (Sun)
  62666380800, #      utc_end 1986-10-26 08:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62666380800, #    utc_start 1986-10-26 08:00:00 (Sun)
  62680294800, #      utc_end 1987-04-05 09:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62680294800, #    utc_start 1987-04-05 09:00:00 (Sun)
  62697830400, #      utc_end 1987-10-25 08:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62697830400, #    utc_start 1987-10-25 08:00:00 (Sun)
  62711744400, #      utc_end 1988-04-03 09:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62711744400, #    utc_start 1988-04-03 09:00:00 (Sun)
  62729884800, #      utc_end 1988-10-30 08:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62729884800, #    utc_start 1988-10-30 08:00:00 (Sun)
  62743194000, #      utc_end 1989-04-02 09:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62743194000, #    utc_start 1989-04-02 09:00:00 (Sun)
  62761334400, #      utc_end 1989-10-29 08:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62761334400, #    utc_start 1989-10-29 08:00:00 (Sun)
  62774643600, #      utc_end 1990-04-01 09:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62774643600, #    utc_start 1990-04-01 09:00:00 (Sun)
  62792784000, #      utc_end 1990-10-28 08:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62792784000, #    utc_start 1990-10-28 08:00:00 (Sun)
  62806698000, #      utc_end 1991-04-07 09:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62806698000, #    utc_start 1991-04-07 09:00:00 (Sun)
  62824233600, #      utc_end 1991-10-27 08:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62824233600, #    utc_start 1991-10-27 08:00:00 (Sun)
  62838147600, #      utc_end 1992-04-05 09:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62838147600, #    utc_start 1992-04-05 09:00:00 (Sun)
  62855683200, #      utc_end 1992-10-25 08:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62855683200, #    utc_start 1992-10-25 08:00:00 (Sun)
  62869597200, #      utc_end 1993-04-04 09:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62869597200, #    utc_start 1993-04-04 09:00:00 (Sun)
  62887737600, #      utc_end 1993-10-31 08:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62887737600, #    utc_start 1993-10-31 08:00:00 (Sun)
  62901046800, #      utc_end 1994-04-03 09:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62901046800, #    utc_start 1994-04-03 09:00:00 (Sun)
  62919187200, #      utc_end 1994-10-30 08:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62919187200, #    utc_start 1994-10-30 08:00:00 (Sun)
  62932496400, #      utc_end 1995-04-02 09:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62932496400, #    utc_start 1995-04-02 09:00:00 (Sun)
  62950636800, #      utc_end 1995-10-29 08:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62950636800, #    utc_start 1995-10-29 08:00:00 (Sun)
  62964550800, #      utc_end 1996-04-07 09:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62964550800, #    utc_start 1996-04-07 09:00:00 (Sun)
  62982086400, #      utc_end 1996-10-27 08:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62982086400, #    utc_start 1996-10-27 08:00:00 (Sun)
  62996000400, #      utc_end 1997-04-06 09:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62996000400, #    utc_start 1997-04-06 09:00:00 (Sun)
  63013536000, #      utc_end 1997-10-26 08:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63013536000, #    utc_start 1997-10-26 08:00:00 (Sun)
  63027450000, #      utc_end 1998-04-05 09:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63027450000, #    utc_start 1998-04-05 09:00:00 (Sun)
  63044985600, #      utc_end 1998-10-25 08:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63044985600, #    utc_start 1998-10-25 08:00:00 (Sun)
  63058899600, #      utc_end 1999-04-04 09:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63058899600, #    utc_start 1999-04-04 09:00:00 (Sun)
  63077040000, #      utc_end 1999-10-31 08:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63077040000, #    utc_start 1999-10-31 08:00:00 (Sun)
  63090349200, #      utc_end 2000-04-02 09:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63090349200, #    utc_start 2000-04-02 09:00:00 (Sun)
  63108489600, #      utc_end 2000-10-29 08:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63108489600, #    utc_start 2000-10-29 08:00:00 (Sun)
  63121798800, #      utc_end 2001-04-01 09:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63121798800, #    utc_start 2001-04-01 09:00:00 (Sun)
  63139939200, #      utc_end 2001-10-28 08:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63139939200, #    utc_start 2001-10-28 08:00:00 (Sun)
  63153853200, #      utc_end 2002-04-07 09:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63153853200, #    utc_start 2002-04-07 09:00:00 (Sun)
  63171388800, #      utc_end 2002-10-27 08:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63171388800, #    utc_start 2002-10-27 08:00:00 (Sun)
  63185302800, #      utc_end 2003-04-06 09:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63185302800, #    utc_start 2003-04-06 09:00:00 (Sun)
  63202838400, #      utc_end 2003-10-26 08:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63202838400, #    utc_start 2003-10-26 08:00:00 (Sun)
  63216752400, #      utc_end 2004-04-04 09:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63216752400, #    utc_start 2004-04-04 09:00:00 (Sun)
  63234892800, #      utc_end 2004-10-31 08:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63234892800, #    utc_start 2004-10-31 08:00:00 (Sun)
  63248202000, #      utc_end 2005-04-03 09:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63248202000, #    utc_start 2005-04-03 09:00:00 (Sun)
  63266342400, #      utc_end 2005-10-30 08:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63266342400, #    utc_start 2005-10-30 08:00:00 (Sun)
  63279651600, #      utc_end 2006-04-02 09:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63279651600, #    utc_start 2006-04-02 09:00:00 (Sun)
  63297792000, #      utc_end 2006-10-29 08:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63297792000, #    utc_start 2006-10-29 08:00:00 (Sun)
  63309286800, #      utc_end 2007-03-11 09:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63309286800, #    utc_start 2007-03-11 09:00:00 (Sun)
  63329846400, #      utc_end 2007-11-04 08:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63329846400, #    utc_start 2007-11-04 08:00:00 (Sun)
  63340736400, #      utc_end 2008-03-09 09:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63340736400, #    utc_start 2008-03-09 09:00:00 (Sun)
  63361296000, #      utc_end 2008-11-02 08:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63361296000, #    utc_start 2008-11-02 08:00:00 (Sun)
  63372186000, #      utc_end 2009-03-08 09:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63372186000, #    utc_start 2009-03-08 09:00:00 (Sun)
  63392745600, #      utc_end 2009-11-01 08:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63392745600, #    utc_start 2009-11-01 08:00:00 (Sun)
  63404240400, #      utc_end 2010-03-14 09:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63404240400, #    utc_start 2010-03-14 09:00:00 (Sun)
  63424800000, #      utc_end 2010-11-07 08:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63424800000, #    utc_start 2010-11-07 08:00:00 (Sun)
  63435690000, #      utc_end 2011-03-13 09:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63435690000, #    utc_start 2011-03-13 09:00:00 (Sun)
  63456249600, #      utc_end 2011-11-06 08:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63456249600, #    utc_start 2011-11-06 08:00:00 (Sun)
  63467139600, #      utc_end 2012-03-11 09:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63467139600, #    utc_start 2012-03-11 09:00:00 (Sun)
  63487699200, #      utc_end 2012-11-04 08:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63487699200, #    utc_start 2012-11-04 08:00:00 (Sun)
  63498589200, #      utc_end 2013-03-10 09:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63498589200, #    utc_start 2013-03-10 09:00:00 (Sun)
  63519148800, #      utc_end 2013-11-03 08:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63519148800, #    utc_start 2013-11-03 08:00:00 (Sun)
  63530038800, #      utc_end 2014-03-09 09:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63530038800, #    utc_start 2014-03-09 09:00:00 (Sun)
  63550598400, #      utc_end 2014-11-02 08:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63550598400, #    utc_start 2014-11-02 08:00:00 (Sun)
  63561488400, #      utc_end 2015-03-08 09:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63561488400, #    utc_start 2015-03-08 09:00:00 (Sun)
  63582048000, #      utc_end 2015-11-01 08:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63582048000, #    utc_start 2015-11-01 08:00:00 (Sun)
  63593542800, #      utc_end 2016-03-13 09:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63593542800, #    utc_start 2016-03-13 09:00:00 (Sun)
  63614102400, #      utc_end 2016-11-06 08:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63614102400, #    utc_start 2016-11-06 08:00:00 (Sun)
  63624992400, #      utc_end 2017-03-12 09:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63624992400, #    utc_start 2017-03-12 09:00:00 (Sun)
  63645552000, #      utc_end 2017-11-05 08:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63645552000, #    utc_start 2017-11-05 08:00:00 (Sun)
  63656442000, #      utc_end 2018-03-11 09:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63656442000, #    utc_start 2018-03-11 09:00:00 (Sun)
  63677001600, #      utc_end 2018-11-04 08:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63677001600, #    utc_start 2018-11-04 08:00:00 (Sun)
  63687891600, #      utc_end 2019-03-10 09:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63687891600, #    utc_start 2019-03-10 09:00:00 (Sun)
  63708451200, #      utc_end 2019-11-03 08:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63708451200, #    utc_start 2019-11-03 08:00:00 (Sun)
  63719341200, #      utc_end 2020-03-08 09:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63719341200, #    utc_start 2020-03-08 09:00:00 (Sun)
  63739900800, #      utc_end 2020-11-01 08:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63739900800, #    utc_start 2020-11-01 08:00:00 (Sun)
  63751395600, #      utc_end 2021-03-14 09:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63751395600, #    utc_start 2021-03-14 09:00:00 (Sun)
  63771955200, #      utc_end 2021-11-07 08:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63771955200, #    utc_start 2021-11-07 08:00:00 (Sun)
  63782845200, #      utc_end 2022-03-13 09:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63782845200, #    utc_start 2022-03-13 09:00:00 (Sun)
  63803404800, #      utc_end 2022-11-06 08:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63803404800, #    utc_start 2022-11-06 08:00:00 (Sun)
  63814294800, #      utc_end 2023-03-12 09:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63814294800, #    utc_start 2023-03-12 09:00:00 (Sun)
  63834854400, #      utc_end 2023-11-05 08:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63834854400, #    utc_start 2023-11-05 08:00:00 (Sun)
  63845744400, #      utc_end 2024-03-10 09:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63845744400, #    utc_start 2024-03-10 09:00:00 (Sun)
  63866304000, #      utc_end 2024-11-03 08:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63866304000, #    utc_start 2024-11-03 08:00:00 (Sun)
  63877194000, #      utc_end 2025-03-09 09:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63877194000, #    utc_start 2025-03-09 09:00:00 (Sun)
  63897753600, #      utc_end 2025-11-02 08:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63897753600, #    utc_start 2025-11-02 08:00:00 (Sun)
  63908643600, #      utc_end 2026-03-08 09:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63908643600, #    utc_start 2026-03-08 09:00:00 (Sun)
  63929203200, #      utc_end 2026-11-01 08:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63929203200, #    utc_start 2026-11-01 08:00:00 (Sun)
  63940698000, #      utc_end 2027-03-14 09:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63940698000, #    utc_start 2027-03-14 09:00:00 (Sun)
  63961257600, #      utc_end 2027-11-07 08:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {65}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -25200 }
  
  my $last_observance = bless( {
    'format' => 'M%sT',
    'gmtoff' => '-7:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 720657,
      'local_rd_secs' => 10800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 720657,
      'utc_rd_secs' => 10800,
      'utc_year' => 1975
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -25200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 720657,
      'local_rd_secs' => 32400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 720657,
      'utc_rd_secs' => 32400,
      'utc_year' => 1975
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_BOISE

    $main::fatpacked{"DateTime/TimeZone/America/Cambridge_Bay.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_CAMBRIDGE_BAY';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Cambridge_Bay;
  $DateTime::TimeZone::America::Cambridge_Bay::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Cambridge_Bay::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60557760000, #      utc_end 1920-01-01 00:00:00 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60557760000, #    local_end 1920-01-01 00:00:00 (Thu)
  0,
  0,
  '-00',
      ],
      [
  60557760000, #    utc_start 1920-01-01 00:00:00 (Thu)
  61255472400, #      utc_end 1942-02-09 09:00:00 (Mon)
  60557734800, #  local_start 1919-12-31 17:00:00 (Wed)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -25200,
  0,
  'MST',
      ],
      [
  61255472400, #    utc_start 1942-02-09 09:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366266000, #    local_end 1945-08-14 17:00:00 (Tue)
  -21600,
  1,
  'MWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370294400, #      utc_end 1945-09-30 08:00:00 (Sun)
  61366266000, #  local_start 1945-08-14 17:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MPT',
      ],
      [
  61370294400, #    utc_start 1945-09-30 08:00:00 (Sun)
  61987791600, #      utc_end 1965-04-25 07:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61987766400, #    local_end 1965-04-25 00:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61987791600, #    utc_start 1965-04-25 07:00:00 (Sun)
  62004121200, #      utc_end 1965-10-31 07:00:00 (Sun)
  61987773600, #  local_start 1965-04-25 02:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -18000,
  1,
  'MDDT',
      ],
      [
  62004121200, #    utc_start 1965-10-31 07:00:00 (Sun)
  62461357200, #      utc_end 1980-04-27 09:00:00 (Sun)
  62004096000, #  local_start 1965-10-31 00:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62461357200, #    utc_start 1980-04-27 09:00:00 (Sun)
  62477078400, #      utc_end 1980-10-26 08:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62477078400, #    utc_start 1980-10-26 08:00:00 (Sun)
  62492806800, #      utc_end 1981-04-26 09:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62492806800, #    utc_start 1981-04-26 09:00:00 (Sun)
  62508528000, #      utc_end 1981-10-25 08:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62508528000, #    utc_start 1981-10-25 08:00:00 (Sun)
  62524256400, #      utc_end 1982-04-25 09:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62524256400, #    utc_start 1982-04-25 09:00:00 (Sun)
  62540582400, #      utc_end 1982-10-31 08:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62540582400, #    utc_start 1982-10-31 08:00:00 (Sun)
  62555706000, #      utc_end 1983-04-24 09:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62555706000, #    utc_start 1983-04-24 09:00:00 (Sun)
  62572032000, #      utc_end 1983-10-30 08:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62572032000, #    utc_start 1983-10-30 08:00:00 (Sun)
  62587760400, #      utc_end 1984-04-29 09:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62587760400, #    utc_start 1984-04-29 09:00:00 (Sun)
  62603481600, #      utc_end 1984-10-28 08:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62603481600, #    utc_start 1984-10-28 08:00:00 (Sun)
  62619210000, #      utc_end 1985-04-28 09:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62619210000, #    utc_start 1985-04-28 09:00:00 (Sun)
  62634931200, #      utc_end 1985-10-27 08:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62634931200, #    utc_start 1985-10-27 08:00:00 (Sun)
  62650659600, #      utc_end 1986-04-27 09:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62650659600, #    utc_start 1986-04-27 09:00:00 (Sun)
  62666380800, #      utc_end 1986-10-26 08:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62666380800, #    utc_start 1986-10-26 08:00:00 (Sun)
  62680294800, #      utc_end 1987-04-05 09:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62680294800, #    utc_start 1987-04-05 09:00:00 (Sun)
  62697830400, #      utc_end 1987-10-25 08:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62697830400, #    utc_start 1987-10-25 08:00:00 (Sun)
  62711744400, #      utc_end 1988-04-03 09:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62711744400, #    utc_start 1988-04-03 09:00:00 (Sun)
  62729884800, #      utc_end 1988-10-30 08:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62729884800, #    utc_start 1988-10-30 08:00:00 (Sun)
  62743194000, #      utc_end 1989-04-02 09:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62743194000, #    utc_start 1989-04-02 09:00:00 (Sun)
  62761334400, #      utc_end 1989-10-29 08:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62761334400, #    utc_start 1989-10-29 08:00:00 (Sun)
  62774643600, #      utc_end 1990-04-01 09:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62774643600, #    utc_start 1990-04-01 09:00:00 (Sun)
  62792784000, #      utc_end 1990-10-28 08:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62792784000, #    utc_start 1990-10-28 08:00:00 (Sun)
  62806698000, #      utc_end 1991-04-07 09:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62806698000, #    utc_start 1991-04-07 09:00:00 (Sun)
  62824233600, #      utc_end 1991-10-27 08:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62824233600, #    utc_start 1991-10-27 08:00:00 (Sun)
  62838147600, #      utc_end 1992-04-05 09:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62838147600, #    utc_start 1992-04-05 09:00:00 (Sun)
  62855683200, #      utc_end 1992-10-25 08:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62855683200, #    utc_start 1992-10-25 08:00:00 (Sun)
  62869597200, #      utc_end 1993-04-04 09:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62869597200, #    utc_start 1993-04-04 09:00:00 (Sun)
  62887737600, #      utc_end 1993-10-31 08:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62887737600, #    utc_start 1993-10-31 08:00:00 (Sun)
  62901046800, #      utc_end 1994-04-03 09:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62901046800, #    utc_start 1994-04-03 09:00:00 (Sun)
  62919187200, #      utc_end 1994-10-30 08:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62919187200, #    utc_start 1994-10-30 08:00:00 (Sun)
  62932496400, #      utc_end 1995-04-02 09:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62932496400, #    utc_start 1995-04-02 09:00:00 (Sun)
  62950636800, #      utc_end 1995-10-29 08:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62950636800, #    utc_start 1995-10-29 08:00:00 (Sun)
  62964550800, #      utc_end 1996-04-07 09:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62964550800, #    utc_start 1996-04-07 09:00:00 (Sun)
  62982086400, #      utc_end 1996-10-27 08:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62982086400, #    utc_start 1996-10-27 08:00:00 (Sun)
  62996000400, #      utc_end 1997-04-06 09:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62996000400, #    utc_start 1997-04-06 09:00:00 (Sun)
  63013536000, #      utc_end 1997-10-26 08:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63013536000, #    utc_start 1997-10-26 08:00:00 (Sun)
  63027450000, #      utc_end 1998-04-05 09:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63027450000, #    utc_start 1998-04-05 09:00:00 (Sun)
  63044985600, #      utc_end 1998-10-25 08:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63044985600, #    utc_start 1998-10-25 08:00:00 (Sun)
  63058899600, #      utc_end 1999-04-04 09:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63058899600, #    utc_start 1999-04-04 09:00:00 (Sun)
  63077040000, #      utc_end 1999-10-31 08:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63077040000, #    utc_start 1999-10-31 08:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108486000, #      utc_end 2000-10-29 07:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108486000, #    utc_start 2000-10-29 07:00:00 (Sun)
  63109083600, #      utc_end 2000-11-05 05:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63109065600, #    local_end 2000-11-05 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63109083600, #    utc_start 2000-11-05 05:00:00 (Sun)
  63121798800, #      utc_end 2001-04-01 09:00:00 (Sun)
  63109062000, #  local_start 2000-11-04 23:00:00 (Sat)
  63121777200, #    local_end 2001-04-01 03:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63121798800, #    utc_start 2001-04-01 09:00:00 (Sun)
  63139939200, #      utc_end 2001-10-28 08:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63139939200, #    utc_start 2001-10-28 08:00:00 (Sun)
  63153853200, #      utc_end 2002-04-07 09:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63153853200, #    utc_start 2002-04-07 09:00:00 (Sun)
  63171388800, #      utc_end 2002-10-27 08:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63171388800, #    utc_start 2002-10-27 08:00:00 (Sun)
  63185302800, #      utc_end 2003-04-06 09:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63185302800, #    utc_start 2003-04-06 09:00:00 (Sun)
  63202838400, #      utc_end 2003-10-26 08:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63202838400, #    utc_start 2003-10-26 08:00:00 (Sun)
  63216752400, #      utc_end 2004-04-04 09:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63216752400, #    utc_start 2004-04-04 09:00:00 (Sun)
  63234892800, #      utc_end 2004-10-31 08:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63234892800, #    utc_start 2004-10-31 08:00:00 (Sun)
  63248202000, #      utc_end 2005-04-03 09:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63248202000, #    utc_start 2005-04-03 09:00:00 (Sun)
  63266342400, #      utc_end 2005-10-30 08:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63266342400, #    utc_start 2005-10-30 08:00:00 (Sun)
  63279651600, #      utc_end 2006-04-02 09:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63279651600, #    utc_start 2006-04-02 09:00:00 (Sun)
  63297792000, #      utc_end 2006-10-29 08:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63297792000, #    utc_start 2006-10-29 08:00:00 (Sun)
  63309286800, #      utc_end 2007-03-11 09:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63309286800, #    utc_start 2007-03-11 09:00:00 (Sun)
  63329846400, #      utc_end 2007-11-04 08:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63329846400, #    utc_start 2007-11-04 08:00:00 (Sun)
  63340736400, #      utc_end 2008-03-09 09:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63340736400, #    utc_start 2008-03-09 09:00:00 (Sun)
  63361296000, #      utc_end 2008-11-02 08:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63361296000, #    utc_start 2008-11-02 08:00:00 (Sun)
  63372186000, #      utc_end 2009-03-08 09:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63372186000, #    utc_start 2009-03-08 09:00:00 (Sun)
  63392745600, #      utc_end 2009-11-01 08:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63392745600, #    utc_start 2009-11-01 08:00:00 (Sun)
  63404240400, #      utc_end 2010-03-14 09:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63404240400, #    utc_start 2010-03-14 09:00:00 (Sun)
  63424800000, #      utc_end 2010-11-07 08:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63424800000, #    utc_start 2010-11-07 08:00:00 (Sun)
  63435690000, #      utc_end 2011-03-13 09:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63435690000, #    utc_start 2011-03-13 09:00:00 (Sun)
  63456249600, #      utc_end 2011-11-06 08:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63456249600, #    utc_start 2011-11-06 08:00:00 (Sun)
  63467139600, #      utc_end 2012-03-11 09:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63467139600, #    utc_start 2012-03-11 09:00:00 (Sun)
  63487699200, #      utc_end 2012-11-04 08:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63487699200, #    utc_start 2012-11-04 08:00:00 (Sun)
  63498589200, #      utc_end 2013-03-10 09:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63498589200, #    utc_start 2013-03-10 09:00:00 (Sun)
  63519148800, #      utc_end 2013-11-03 08:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63519148800, #    utc_start 2013-11-03 08:00:00 (Sun)
  63530038800, #      utc_end 2014-03-09 09:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63530038800, #    utc_start 2014-03-09 09:00:00 (Sun)
  63550598400, #      utc_end 2014-11-02 08:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63550598400, #    utc_start 2014-11-02 08:00:00 (Sun)
  63561488400, #      utc_end 2015-03-08 09:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63561488400, #    utc_start 2015-03-08 09:00:00 (Sun)
  63582048000, #      utc_end 2015-11-01 08:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63582048000, #    utc_start 2015-11-01 08:00:00 (Sun)
  63593542800, #      utc_end 2016-03-13 09:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63593542800, #    utc_start 2016-03-13 09:00:00 (Sun)
  63614102400, #      utc_end 2016-11-06 08:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63614102400, #    utc_start 2016-11-06 08:00:00 (Sun)
  63624992400, #      utc_end 2017-03-12 09:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63624992400, #    utc_start 2017-03-12 09:00:00 (Sun)
  63645552000, #      utc_end 2017-11-05 08:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63645552000, #    utc_start 2017-11-05 08:00:00 (Sun)
  63656442000, #      utc_end 2018-03-11 09:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63656442000, #    utc_start 2018-03-11 09:00:00 (Sun)
  63677001600, #      utc_end 2018-11-04 08:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63677001600, #    utc_start 2018-11-04 08:00:00 (Sun)
  63687891600, #      utc_end 2019-03-10 09:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63687891600, #    utc_start 2019-03-10 09:00:00 (Sun)
  63708451200, #      utc_end 2019-11-03 08:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63708451200, #    utc_start 2019-11-03 08:00:00 (Sun)
  63719341200, #      utc_end 2020-03-08 09:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63719341200, #    utc_start 2020-03-08 09:00:00 (Sun)
  63739900800, #      utc_end 2020-11-01 08:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63739900800, #    utc_start 2020-11-01 08:00:00 (Sun)
  63751395600, #      utc_end 2021-03-14 09:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63751395600, #    utc_start 2021-03-14 09:00:00 (Sun)
  63771955200, #      utc_end 2021-11-07 08:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63771955200, #    utc_start 2021-11-07 08:00:00 (Sun)
  63782845200, #      utc_end 2022-03-13 09:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63782845200, #    utc_start 2022-03-13 09:00:00 (Sun)
  63803404800, #      utc_end 2022-11-06 08:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63803404800, #    utc_start 2022-11-06 08:00:00 (Sun)
  63814294800, #      utc_end 2023-03-12 09:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63814294800, #    utc_start 2023-03-12 09:00:00 (Sun)
  63834854400, #      utc_end 2023-11-05 08:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63834854400, #    utc_start 2023-11-05 08:00:00 (Sun)
  63845744400, #      utc_end 2024-03-10 09:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63845744400, #    utc_start 2024-03-10 09:00:00 (Sun)
  63866304000, #      utc_end 2024-11-03 08:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63866304000, #    utc_start 2024-11-03 08:00:00 (Sun)
  63877194000, #      utc_end 2025-03-09 09:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63877194000, #    utc_start 2025-03-09 09:00:00 (Sun)
  63897753600, #      utc_end 2025-11-02 08:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63897753600, #    utc_start 2025-11-02 08:00:00 (Sun)
  63908643600, #      utc_end 2026-03-08 09:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63908643600, #    utc_start 2026-03-08 09:00:00 (Sun)
  63929203200, #      utc_end 2026-11-01 08:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63929203200, #    utc_start 2026-11-01 08:00:00 (Sun)
  63940698000, #      utc_end 2027-03-14 09:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63940698000, #    utc_start 2027-03-14 09:00:00 (Sun)
  63961257600, #      utc_end 2027-11-07 08:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {51}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -25200 }
  
  my $last_observance = bless( {
    'format' => 'M%sT',
    'gmtoff' => '-7:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730576,
      'local_rd_secs' => 10800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730576,
      'utc_rd_secs' => 10800,
      'utc_year' => 2002
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -25200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730576,
      'local_rd_secs' => 32400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730576,
      'utc_rd_secs' => 32400,
      'utc_year' => 2002
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_CAMBRIDGE_BAY

    $main::fatpacked{"DateTime/TimeZone/America/Campo_Grande.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_CAMPO_GRANDE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Campo_Grande;
  $DateTime::TimeZone::America::Campo_Grande::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Campo_Grande::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368470708, #      utc_end 1914-01-01 03:38:28 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  -13108,
  0,
  'LMT',
      ],
      [
  60368470708, #    utc_start 1914-01-01 03:38:28 (Thu)
  60928729200, #      utc_end 1931-10-03 15:00:00 (Sat)
  60368456308, #  local_start 1913-12-31 23:38:28 (Wed)
  60928714800, #    local_end 1931-10-03 11:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  60928729200, #    utc_start 1931-10-03 15:00:00 (Sat)
  60944324400, #      utc_end 1932-04-01 03:00:00 (Fri)
  60928718400, #  local_start 1931-10-03 12:00:00 (Sat)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -10800,
  1,
  'AMST',
      ],
      [
  60944324400, #    utc_start 1932-04-01 03:00:00 (Fri)
  60960312000, #      utc_end 1932-10-03 04:00:00 (Mon)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60960297600, #    local_end 1932-10-03 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  60960312000, #    utc_start 1932-10-03 04:00:00 (Mon)
  60975860400, #      utc_end 1933-04-01 03:00:00 (Sat)
  60960301200, #  local_start 1932-10-03 01:00:00 (Mon)
  60975849600, #    local_end 1933-04-01 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  60975860400, #    utc_start 1933-04-01 03:00:00 (Sat)
  61501867200, #      utc_end 1949-12-01 04:00:00 (Thu)
  60975846000, #  local_start 1933-03-31 23:00:00 (Fri)
  61501852800, #    local_end 1949-12-01 00:00:00 (Thu)
  -14400,
  0,
  'AMT',
      ],
      [
  61501867200, #    utc_start 1949-12-01 04:00:00 (Thu)
  61513617600, #      utc_end 1950-04-16 04:00:00 (Sun)
  61501856400, #  local_start 1949-12-01 01:00:00 (Thu)
  61513606800, #    local_end 1950-04-16 01:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61513617600, #    utc_start 1950-04-16 04:00:00 (Sun)
  61533403200, #      utc_end 1950-12-01 04:00:00 (Fri)
  61513603200, #  local_start 1950-04-16 00:00:00 (Sun)
  61533388800, #    local_end 1950-12-01 00:00:00 (Fri)
  -14400,
  0,
  'AMT',
      ],
      [
  61533403200, #    utc_start 1950-12-01 04:00:00 (Fri)
  61543854000, #      utc_end 1951-04-01 03:00:00 (Sun)
  61533392400, #  local_start 1950-12-01 01:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61543854000, #    utc_start 1951-04-01 03:00:00 (Sun)
  61564939200, #      utc_end 1951-12-01 04:00:00 (Sat)
  61543839600, #  local_start 1951-03-31 23:00:00 (Sat)
  61564924800, #    local_end 1951-12-01 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  61564939200, #    utc_start 1951-12-01 04:00:00 (Sat)
  61575476400, #      utc_end 1952-04-01 03:00:00 (Tue)
  61564928400, #  local_start 1951-12-01 01:00:00 (Sat)
  61575465600, #    local_end 1952-04-01 00:00:00 (Tue)
  -10800,
  1,
  'AMST',
      ],
      [
  61575476400, #    utc_start 1952-04-01 03:00:00 (Tue)
  61596561600, #      utc_end 1952-12-01 04:00:00 (Mon)
  61575462000, #  local_start 1952-03-31 23:00:00 (Mon)
  61596547200, #    local_end 1952-12-01 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  61596561600, #    utc_start 1952-12-01 04:00:00 (Mon)
  61604334000, #      utc_end 1953-03-01 03:00:00 (Sun)
  61596550800, #  local_start 1952-12-01 01:00:00 (Mon)
  61604323200, #    local_end 1953-03-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61604334000, #    utc_start 1953-03-01 03:00:00 (Sun)
  61944321600, #      utc_end 1963-12-09 04:00:00 (Mon)
  61604319600, #  local_start 1953-02-28 23:00:00 (Sat)
  61944307200, #    local_end 1963-12-09 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  61944321600, #    utc_start 1963-12-09 04:00:00 (Mon)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944310800, #  local_start 1963-12-09 01:00:00 (Mon)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61980523200, #      utc_end 1965-01-31 04:00:00 (Sun)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61980508800, #    local_end 1965-01-31 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  61980523200, #    utc_start 1965-01-31 04:00:00 (Sun)
  61985617200, #      utc_end 1965-03-31 03:00:00 (Wed)
  61980512400, #  local_start 1965-01-31 01:00:00 (Sun)
  61985606400, #    local_end 1965-03-31 00:00:00 (Wed)
  -10800,
  1,
  'AMST',
      ],
      [
  61985617200, #    utc_start 1965-03-31 03:00:00 (Wed)
  62006788800, #      utc_end 1965-12-01 04:00:00 (Wed)
  61985602800, #  local_start 1965-03-30 23:00:00 (Tue)
  62006774400, #    local_end 1965-12-01 00:00:00 (Wed)
  -14400,
  0,
  'AMT',
      ],
      [
  62006788800, #    utc_start 1965-12-01 04:00:00 (Wed)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62006778000, #  local_start 1965-12-01 01:00:00 (Wed)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'AMST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62035732800, #      utc_end 1966-11-01 04:00:00 (Tue)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62035718400, #    local_end 1966-11-01 00:00:00 (Tue)
  -14400,
  0,
  'AMT',
      ],
      [
  62035732800, #    utc_start 1966-11-01 04:00:00 (Tue)
  62046097200, #      utc_end 1967-03-01 03:00:00 (Wed)
  62035722000, #  local_start 1966-11-01 01:00:00 (Tue)
  62046086400, #    local_end 1967-03-01 00:00:00 (Wed)
  -10800,
  1,
  'AMST',
      ],
      [
  62046097200, #    utc_start 1967-03-01 03:00:00 (Wed)
  62067268800, #      utc_end 1967-11-01 04:00:00 (Wed)
  62046082800, #  local_start 1967-02-28 23:00:00 (Tue)
  62067254400, #    local_end 1967-11-01 00:00:00 (Wed)
  -14400,
  0,
  'AMT',
      ],
      [
  62067268800, #    utc_start 1967-11-01 04:00:00 (Wed)
  62077719600, #      utc_end 1968-03-01 03:00:00 (Fri)
  62067258000, #  local_start 1967-11-01 01:00:00 (Wed)
  62077708800, #    local_end 1968-03-01 00:00:00 (Fri)
  -10800,
  1,
  'AMST',
      ],
      [
  62077719600, #    utc_start 1968-03-01 03:00:00 (Fri)
  62635435200, #      utc_end 1985-11-02 04:00:00 (Sat)
  62077705200, #  local_start 1968-02-29 23:00:00 (Thu)
  62635420800, #    local_end 1985-11-02 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  62635435200, #    utc_start 1985-11-02 04:00:00 (Sat)
  62646922800, #      utc_end 1986-03-15 03:00:00 (Sat)
  62635424400, #  local_start 1985-11-02 01:00:00 (Sat)
  62646912000, #    local_end 1986-03-15 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  62646922800, #    utc_start 1986-03-15 03:00:00 (Sat)
  62666280000, #      utc_end 1986-10-25 04:00:00 (Sat)
  62646908400, #  local_start 1986-03-14 23:00:00 (Fri)
  62666265600, #    local_end 1986-10-25 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  62666280000, #    utc_start 1986-10-25 04:00:00 (Sat)
  62675953200, #      utc_end 1987-02-14 03:00:00 (Sat)
  62666269200, #  local_start 1986-10-25 01:00:00 (Sat)
  62675942400, #    local_end 1987-02-14 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  62675953200, #    utc_start 1987-02-14 03:00:00 (Sat)
  62697816000, #      utc_end 1987-10-25 04:00:00 (Sun)
  62675938800, #  local_start 1987-02-13 23:00:00 (Fri)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62697816000, #    utc_start 1987-10-25 04:00:00 (Sun)
  62706884400, #      utc_end 1988-02-07 03:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62706873600, #    local_end 1988-02-07 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62706884400, #    utc_start 1988-02-07 03:00:00 (Sun)
  62728660800, #      utc_end 1988-10-16 04:00:00 (Sun)
  62706870000, #  local_start 1988-02-06 23:00:00 (Sat)
  62728646400, #    local_end 1988-10-16 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62728660800, #    utc_start 1988-10-16 04:00:00 (Sun)
  62737729200, #      utc_end 1989-01-29 03:00:00 (Sun)
  62728650000, #  local_start 1988-10-16 01:00:00 (Sun)
  62737718400, #    local_end 1989-01-29 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62737729200, #    utc_start 1989-01-29 03:00:00 (Sun)
  62760110400, #      utc_end 1989-10-15 04:00:00 (Sun)
  62737714800, #  local_start 1989-01-28 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62760110400, #    utc_start 1989-10-15 04:00:00 (Sun)
  62770388400, #      utc_end 1990-02-11 03:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62770377600, #    local_end 1990-02-11 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62770388400, #    utc_start 1990-02-11 03:00:00 (Sun)
  62792164800, #      utc_end 1990-10-21 04:00:00 (Sun)
  62770374000, #  local_start 1990-02-10 23:00:00 (Sat)
  62792150400, #    local_end 1990-10-21 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62792164800, #    utc_start 1990-10-21 04:00:00 (Sun)
  62802442800, #      utc_end 1991-02-17 03:00:00 (Sun)
  62792154000, #  local_start 1990-10-21 01:00:00 (Sun)
  62802432000, #    local_end 1991-02-17 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62802442800, #    utc_start 1991-02-17 03:00:00 (Sun)
  62823614400, #      utc_end 1991-10-20 04:00:00 (Sun)
  62802428400, #  local_start 1991-02-16 23:00:00 (Sat)
  62823600000, #    local_end 1991-10-20 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62823614400, #    utc_start 1991-10-20 04:00:00 (Sun)
  62833287600, #      utc_end 1992-02-09 03:00:00 (Sun)
  62823603600, #  local_start 1991-10-20 01:00:00 (Sun)
  62833276800, #    local_end 1992-02-09 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62833287600, #    utc_start 1992-02-09 03:00:00 (Sun)
  62855668800, #      utc_end 1992-10-25 04:00:00 (Sun)
  62833273200, #  local_start 1992-02-08 23:00:00 (Sat)
  62855654400, #    local_end 1992-10-25 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62855668800, #    utc_start 1992-10-25 04:00:00 (Sun)
  62864132400, #      utc_end 1993-01-31 03:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62864121600, #    local_end 1993-01-31 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62864132400, #    utc_start 1993-01-31 03:00:00 (Sun)
  62886513600, #      utc_end 1993-10-17 04:00:00 (Sun)
  62864118000, #  local_start 1993-01-30 23:00:00 (Sat)
  62886499200, #    local_end 1993-10-17 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62886513600, #    utc_start 1993-10-17 04:00:00 (Sun)
  62897396400, #      utc_end 1994-02-20 03:00:00 (Sun)
  62886502800, #  local_start 1993-10-17 01:00:00 (Sun)
  62897385600, #    local_end 1994-02-20 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62897396400, #    utc_start 1994-02-20 03:00:00 (Sun)
  62917963200, #      utc_end 1994-10-16 04:00:00 (Sun)
  62897382000, #  local_start 1994-02-19 23:00:00 (Sat)
  62917948800, #    local_end 1994-10-16 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62917963200, #    utc_start 1994-10-16 04:00:00 (Sun)
  62928846000, #      utc_end 1995-02-19 03:00:00 (Sun)
  62917952400, #  local_start 1994-10-16 01:00:00 (Sun)
  62928835200, #    local_end 1995-02-19 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62928846000, #    utc_start 1995-02-19 03:00:00 (Sun)
  62949412800, #      utc_end 1995-10-15 04:00:00 (Sun)
  62928831600, #  local_start 1995-02-18 23:00:00 (Sat)
  62949398400, #    local_end 1995-10-15 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62949412800, #    utc_start 1995-10-15 04:00:00 (Sun)
  62959690800, #      utc_end 1996-02-11 03:00:00 (Sun)
  62949402000, #  local_start 1995-10-15 01:00:00 (Sun)
  62959680000, #    local_end 1996-02-11 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62959690800, #    utc_start 1996-02-11 03:00:00 (Sun)
  62980257600, #      utc_end 1996-10-06 04:00:00 (Sun)
  62959676400, #  local_start 1996-02-10 23:00:00 (Sat)
  62980243200, #    local_end 1996-10-06 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62980257600, #    utc_start 1996-10-06 04:00:00 (Sun)
  62991745200, #      utc_end 1997-02-16 03:00:00 (Sun)
  62980246800, #  local_start 1996-10-06 01:00:00 (Sun)
  62991734400, #    local_end 1997-02-16 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62991745200, #    utc_start 1997-02-16 03:00:00 (Sun)
  63011793600, #      utc_end 1997-10-06 04:00:00 (Mon)
  62991730800, #  local_start 1997-02-15 23:00:00 (Sat)
  63011779200, #    local_end 1997-10-06 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  63011793600, #    utc_start 1997-10-06 04:00:00 (Mon)
  63024404400, #      utc_end 1998-03-01 03:00:00 (Sun)
  63011782800, #  local_start 1997-10-06 01:00:00 (Mon)
  63024393600, #    local_end 1998-03-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63024404400, #    utc_start 1998-03-01 03:00:00 (Sun)
  63043761600, #      utc_end 1998-10-11 04:00:00 (Sun)
  63024390000, #  local_start 1998-02-28 23:00:00 (Sat)
  63043747200, #    local_end 1998-10-11 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63043761600, #    utc_start 1998-10-11 04:00:00 (Sun)
  63055249200, #      utc_end 1999-02-21 03:00:00 (Sun)
  63043750800, #  local_start 1998-10-11 01:00:00 (Sun)
  63055238400, #    local_end 1999-02-21 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63055249200, #    utc_start 1999-02-21 03:00:00 (Sun)
  63074606400, #      utc_end 1999-10-03 04:00:00 (Sun)
  63055234800, #  local_start 1999-02-20 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63074606400, #    utc_start 1999-10-03 04:00:00 (Sun)
  63087303600, #      utc_end 2000-02-27 03:00:00 (Sun)
  63074595600, #  local_start 1999-10-03 01:00:00 (Sun)
  63087292800, #    local_end 2000-02-27 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63087303600, #    utc_start 2000-02-27 03:00:00 (Sun)
  63106660800, #      utc_end 2000-10-08 04:00:00 (Sun)
  63087289200, #  local_start 2000-02-26 23:00:00 (Sat)
  63106646400, #    local_end 2000-10-08 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63106660800, #    utc_start 2000-10-08 04:00:00 (Sun)
  63118148400, #      utc_end 2001-02-18 03:00:00 (Sun)
  63106650000, #  local_start 2000-10-08 01:00:00 (Sun)
  63118137600, #    local_end 2001-02-18 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63118148400, #    utc_start 2001-02-18 03:00:00 (Sun)
  63138715200, #      utc_end 2001-10-14 04:00:00 (Sun)
  63118134000, #  local_start 2001-02-17 23:00:00 (Sat)
  63138700800, #    local_end 2001-10-14 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63138715200, #    utc_start 2001-10-14 04:00:00 (Sun)
  63149598000, #      utc_end 2002-02-17 03:00:00 (Sun)
  63138704400, #  local_start 2001-10-14 01:00:00 (Sun)
  63149587200, #    local_end 2002-02-17 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63149598000, #    utc_start 2002-02-17 03:00:00 (Sun)
  63171979200, #      utc_end 2002-11-03 04:00:00 (Sun)
  63149583600, #  local_start 2002-02-16 23:00:00 (Sat)
  63171964800, #    local_end 2002-11-03 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63171979200, #    utc_start 2002-11-03 04:00:00 (Sun)
  63181047600, #      utc_end 2003-02-16 03:00:00 (Sun)
  63171968400, #  local_start 2002-11-03 01:00:00 (Sun)
  63181036800, #    local_end 2003-02-16 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63181047600, #    utc_start 2003-02-16 03:00:00 (Sun)
  63202219200, #      utc_end 2003-10-19 04:00:00 (Sun)
  63181033200, #  local_start 2003-02-15 23:00:00 (Sat)
  63202204800, #    local_end 2003-10-19 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63202219200, #    utc_start 2003-10-19 04:00:00 (Sun)
  63212497200, #      utc_end 2004-02-15 03:00:00 (Sun)
  63202208400, #  local_start 2003-10-19 01:00:00 (Sun)
  63212486400, #    local_end 2004-02-15 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63212497200, #    utc_start 2004-02-15 03:00:00 (Sun)
  63235051200, #      utc_end 2004-11-02 04:00:00 (Tue)
  63212482800, #  local_start 2004-02-14 23:00:00 (Sat)
  63235036800, #    local_end 2004-11-02 00:00:00 (Tue)
  -14400,
  0,
  'AMT',
      ],
      [
  63235051200, #    utc_start 2004-11-02 04:00:00 (Tue)
  63244551600, #      utc_end 2005-02-20 03:00:00 (Sun)
  63235040400, #  local_start 2004-11-02 01:00:00 (Tue)
  63244540800, #    local_end 2005-02-20 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63244551600, #    utc_start 2005-02-20 03:00:00 (Sun)
  63265118400, #      utc_end 2005-10-16 04:00:00 (Sun)
  63244537200, #  local_start 2005-02-19 23:00:00 (Sat)
  63265104000, #    local_end 2005-10-16 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63265118400, #    utc_start 2005-10-16 04:00:00 (Sun)
  63276001200, #      utc_end 2006-02-19 03:00:00 (Sun)
  63265107600, #  local_start 2005-10-16 01:00:00 (Sun)
  63275990400, #    local_end 2006-02-19 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63276001200, #    utc_start 2006-02-19 03:00:00 (Sun)
  63298382400, #      utc_end 2006-11-05 04:00:00 (Sun)
  63275986800, #  local_start 2006-02-18 23:00:00 (Sat)
  63298368000, #    local_end 2006-11-05 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63298382400, #    utc_start 2006-11-05 04:00:00 (Sun)
  63308055600, #      utc_end 2007-02-25 03:00:00 (Sun)
  63298371600, #  local_start 2006-11-05 01:00:00 (Sun)
  63308044800, #    local_end 2007-02-25 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63308055600, #    utc_start 2007-02-25 03:00:00 (Sun)
  63328017600, #      utc_end 2007-10-14 04:00:00 (Sun)
  63308041200, #  local_start 2007-02-24 23:00:00 (Sat)
  63328003200, #    local_end 2007-10-14 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63328017600, #    utc_start 2007-10-14 04:00:00 (Sun)
  63338900400, #      utc_end 2008-02-17 03:00:00 (Sun)
  63328006800, #  local_start 2007-10-14 01:00:00 (Sun)
  63338889600, #    local_end 2008-02-17 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63338900400, #    utc_start 2008-02-17 03:00:00 (Sun)
  63360072000, #      utc_end 2008-10-19 04:00:00 (Sun)
  63338886000, #  local_start 2008-02-16 23:00:00 (Sat)
  63360057600, #    local_end 2008-10-19 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63360072000, #    utc_start 2008-10-19 04:00:00 (Sun)
  63370350000, #      utc_end 2009-02-15 03:00:00 (Sun)
  63360061200, #  local_start 2008-10-19 01:00:00 (Sun)
  63370339200, #    local_end 2009-02-15 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63370350000, #    utc_start 2009-02-15 03:00:00 (Sun)
  63391521600, #      utc_end 2009-10-18 04:00:00 (Sun)
  63370335600, #  local_start 2009-02-14 23:00:00 (Sat)
  63391507200, #    local_end 2009-10-18 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63391521600, #    utc_start 2009-10-18 04:00:00 (Sun)
  63402404400, #      utc_end 2010-02-21 03:00:00 (Sun)
  63391510800, #  local_start 2009-10-18 01:00:00 (Sun)
  63402393600, #    local_end 2010-02-21 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63402404400, #    utc_start 2010-02-21 03:00:00 (Sun)
  63422971200, #      utc_end 2010-10-17 04:00:00 (Sun)
  63402390000, #  local_start 2010-02-20 23:00:00 (Sat)
  63422956800, #    local_end 2010-10-17 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63422971200, #    utc_start 2010-10-17 04:00:00 (Sun)
  63433854000, #      utc_end 2011-02-20 03:00:00 (Sun)
  63422960400, #  local_start 2010-10-17 01:00:00 (Sun)
  63433843200, #    local_end 2011-02-20 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63433854000, #    utc_start 2011-02-20 03:00:00 (Sun)
  63454420800, #      utc_end 2011-10-16 04:00:00 (Sun)
  63433839600, #  local_start 2011-02-19 23:00:00 (Sat)
  63454406400, #    local_end 2011-10-16 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63454420800, #    utc_start 2011-10-16 04:00:00 (Sun)
  63465908400, #      utc_end 2012-02-26 03:00:00 (Sun)
  63454410000, #  local_start 2011-10-16 01:00:00 (Sun)
  63465897600, #    local_end 2012-02-26 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63465908400, #    utc_start 2012-02-26 03:00:00 (Sun)
  63486475200, #      utc_end 2012-10-21 04:00:00 (Sun)
  63465894000, #  local_start 2012-02-25 23:00:00 (Sat)
  63486460800, #    local_end 2012-10-21 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63486475200, #    utc_start 2012-10-21 04:00:00 (Sun)
  63496753200, #      utc_end 2013-02-17 03:00:00 (Sun)
  63486464400, #  local_start 2012-10-21 01:00:00 (Sun)
  63496742400, #    local_end 2013-02-17 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63496753200, #    utc_start 2013-02-17 03:00:00 (Sun)
  63517924800, #      utc_end 2013-10-20 04:00:00 (Sun)
  63496738800, #  local_start 2013-02-16 23:00:00 (Sat)
  63517910400, #    local_end 2013-10-20 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63517924800, #    utc_start 2013-10-20 04:00:00 (Sun)
  63528202800, #      utc_end 2014-02-16 03:00:00 (Sun)
  63517914000, #  local_start 2013-10-20 01:00:00 (Sun)
  63528192000, #    local_end 2014-02-16 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63528202800, #    utc_start 2014-02-16 03:00:00 (Sun)
  63549374400, #      utc_end 2014-10-19 04:00:00 (Sun)
  63528188400, #  local_start 2014-02-15 23:00:00 (Sat)
  63549360000, #    local_end 2014-10-19 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63549374400, #    utc_start 2014-10-19 04:00:00 (Sun)
  63560257200, #      utc_end 2015-02-22 03:00:00 (Sun)
  63549363600, #  local_start 2014-10-19 01:00:00 (Sun)
  63560246400, #    local_end 2015-02-22 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63560257200, #    utc_start 2015-02-22 03:00:00 (Sun)
  63580824000, #      utc_end 2015-10-18 04:00:00 (Sun)
  63560242800, #  local_start 2015-02-21 23:00:00 (Sat)
  63580809600, #    local_end 2015-10-18 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63580824000, #    utc_start 2015-10-18 04:00:00 (Sun)
  63591706800, #      utc_end 2016-02-21 03:00:00 (Sun)
  63580813200, #  local_start 2015-10-18 01:00:00 (Sun)
  63591696000, #    local_end 2016-02-21 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63591706800, #    utc_start 2016-02-21 03:00:00 (Sun)
  63612273600, #      utc_end 2016-10-16 04:00:00 (Sun)
  63591692400, #  local_start 2016-02-20 23:00:00 (Sat)
  63612259200, #    local_end 2016-10-16 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63612273600, #    utc_start 2016-10-16 04:00:00 (Sun)
  63623156400, #      utc_end 2017-02-19 03:00:00 (Sun)
  63612262800, #  local_start 2016-10-16 01:00:00 (Sun)
  63623145600, #    local_end 2017-02-19 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63623156400, #    utc_start 2017-02-19 03:00:00 (Sun)
  63643723200, #      utc_end 2017-10-15 04:00:00 (Sun)
  63623142000, #  local_start 2017-02-18 23:00:00 (Sat)
  63643708800, #    local_end 2017-10-15 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63643723200, #    utc_start 2017-10-15 04:00:00 (Sun)
  63654606000, #      utc_end 2018-02-18 03:00:00 (Sun)
  63643712400, #  local_start 2017-10-15 01:00:00 (Sun)
  63654595200, #    local_end 2018-02-18 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63654606000, #    utc_start 2018-02-18 03:00:00 (Sun)
  63675777600, #      utc_end 2018-10-21 04:00:00 (Sun)
  63654591600, #  local_start 2018-02-17 23:00:00 (Sat)
  63675763200, #    local_end 2018-10-21 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63675777600, #    utc_start 2018-10-21 04:00:00 (Sun)
  63686055600, #      utc_end 2019-02-17 03:00:00 (Sun)
  63675766800, #  local_start 2018-10-21 01:00:00 (Sun)
  63686044800, #    local_end 2019-02-17 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63686055600, #    utc_start 2019-02-17 03:00:00 (Sun)
  63707227200, #      utc_end 2019-10-20 04:00:00 (Sun)
  63686041200, #  local_start 2019-02-16 23:00:00 (Sat)
  63707212800, #    local_end 2019-10-20 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63707227200, #    utc_start 2019-10-20 04:00:00 (Sun)
  63717505200, #      utc_end 2020-02-16 03:00:00 (Sun)
  63707216400, #  local_start 2019-10-20 01:00:00 (Sun)
  63717494400, #    local_end 2020-02-16 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63717505200, #    utc_start 2020-02-16 03:00:00 (Sun)
  63738676800, #      utc_end 2020-10-18 04:00:00 (Sun)
  63717490800, #  local_start 2020-02-15 23:00:00 (Sat)
  63738662400, #    local_end 2020-10-18 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63738676800, #    utc_start 2020-10-18 04:00:00 (Sun)
  63749559600, #      utc_end 2021-02-21 03:00:00 (Sun)
  63738666000, #  local_start 2020-10-18 01:00:00 (Sun)
  63749548800, #    local_end 2021-02-21 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63749559600, #    utc_start 2021-02-21 03:00:00 (Sun)
  63770126400, #      utc_end 2021-10-17 04:00:00 (Sun)
  63749545200, #  local_start 2021-02-20 23:00:00 (Sat)
  63770112000, #    local_end 2021-10-17 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63770126400, #    utc_start 2021-10-17 04:00:00 (Sun)
  63781009200, #      utc_end 2022-02-20 03:00:00 (Sun)
  63770115600, #  local_start 2021-10-17 01:00:00 (Sun)
  63780998400, #    local_end 2022-02-20 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63781009200, #    utc_start 2022-02-20 03:00:00 (Sun)
  63801576000, #      utc_end 2022-10-16 04:00:00 (Sun)
  63780994800, #  local_start 2022-02-19 23:00:00 (Sat)
  63801561600, #    local_end 2022-10-16 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63801576000, #    utc_start 2022-10-16 04:00:00 (Sun)
  63813063600, #      utc_end 2023-02-26 03:00:00 (Sun)
  63801565200, #  local_start 2022-10-16 01:00:00 (Sun)
  63813052800, #    local_end 2023-02-26 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63813063600, #    utc_start 2023-02-26 03:00:00 (Sun)
  63833025600, #      utc_end 2023-10-15 04:00:00 (Sun)
  63813049200, #  local_start 2023-02-25 23:00:00 (Sat)
  63833011200, #    local_end 2023-10-15 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63833025600, #    utc_start 2023-10-15 04:00:00 (Sun)
  63843908400, #      utc_end 2024-02-18 03:00:00 (Sun)
  63833014800, #  local_start 2023-10-15 01:00:00 (Sun)
  63843897600, #    local_end 2024-02-18 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63843908400, #    utc_start 2024-02-18 03:00:00 (Sun)
  63865080000, #      utc_end 2024-10-20 04:00:00 (Sun)
  63843894000, #  local_start 2024-02-17 23:00:00 (Sat)
  63865065600, #    local_end 2024-10-20 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63865080000, #    utc_start 2024-10-20 04:00:00 (Sun)
  63875358000, #      utc_end 2025-02-16 03:00:00 (Sun)
  63865069200, #  local_start 2024-10-20 01:00:00 (Sun)
  63875347200, #    local_end 2025-02-16 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63875358000, #    utc_start 2025-02-16 03:00:00 (Sun)
  63896529600, #      utc_end 2025-10-19 04:00:00 (Sun)
  63875343600, #  local_start 2025-02-15 23:00:00 (Sat)
  63896515200, #    local_end 2025-10-19 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63896529600, #    utc_start 2025-10-19 04:00:00 (Sun)
  63907412400, #      utc_end 2026-02-22 03:00:00 (Sun)
  63896518800, #  local_start 2025-10-19 01:00:00 (Sun)
  63907401600, #    local_end 2026-02-22 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63907412400, #    utc_start 2026-02-22 03:00:00 (Sun)
  63927979200, #      utc_end 2026-10-18 04:00:00 (Sun)
  63907398000, #  local_start 2026-02-21 23:00:00 (Sat)
  63927964800, #    local_end 2026-10-18 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63927979200, #    utc_start 2026-10-18 04:00:00 (Sun)
  63938862000, #      utc_end 2027-02-21 03:00:00 (Sun)
  63927968400, #  local_start 2026-10-18 01:00:00 (Sun)
  63938851200, #    local_end 2027-02-21 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63938862000, #    utc_start 2027-02-21 03:00:00 (Sun)
  63959428800, #      utc_end 2027-10-17 04:00:00 (Sun)
  63938847600, #  local_start 2027-02-20 23:00:00 (Sat)
  63959414400, #    local_end 2027-10-17 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63959428800, #    utc_start 2027-10-17 04:00:00 (Sun)
  63970311600, #      utc_end 2028-02-20 03:00:00 (Sun)
  63959418000, #  local_start 2027-10-17 01:00:00 (Sun)
  63970300800, #    local_end 2028-02-20 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63970311600, #    utc_start 2028-02-20 03:00:00 (Sun)
  63990878400, #      utc_end 2028-10-15 04:00:00 (Sun)
  63970297200, #  local_start 2028-02-19 23:00:00 (Sat)
  63990864000, #    local_end 2028-10-15 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63990878400, #    utc_start 2028-10-15 04:00:00 (Sun)
  64001761200, #      utc_end 2029-02-18 03:00:00 (Sun)
  63990867600, #  local_start 2028-10-15 01:00:00 (Sun)
  64001750400, #    local_end 2029-02-18 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64001761200, #    utc_start 2029-02-18 03:00:00 (Sun)
  64022932800, #      utc_end 2029-10-21 04:00:00 (Sun)
  64001746800, #  local_start 2029-02-17 23:00:00 (Sat)
  64022918400, #    local_end 2029-10-21 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64022932800, #    utc_start 2029-10-21 04:00:00 (Sun)
  64033210800, #      utc_end 2030-02-17 03:00:00 (Sun)
  64022922000, #  local_start 2029-10-21 01:00:00 (Sun)
  64033200000, #    local_end 2030-02-17 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64033210800, #    utc_start 2030-02-17 03:00:00 (Sun)
  64054382400, #      utc_end 2030-10-20 04:00:00 (Sun)
  64033196400, #  local_start 2030-02-16 23:00:00 (Sat)
  64054368000, #    local_end 2030-10-20 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64054382400, #    utc_start 2030-10-20 04:00:00 (Sun)
  64064660400, #      utc_end 2031-02-16 03:00:00 (Sun)
  64054371600, #  local_start 2030-10-20 01:00:00 (Sun)
  64064649600, #    local_end 2031-02-16 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64064660400, #    utc_start 2031-02-16 03:00:00 (Sun)
  64085832000, #      utc_end 2031-10-19 04:00:00 (Sun)
  64064646000, #  local_start 2031-02-15 23:00:00 (Sat)
  64085817600, #    local_end 2031-10-19 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64085832000, #    utc_start 2031-10-19 04:00:00 (Sun)
  64096110000, #      utc_end 2032-02-15 03:00:00 (Sun)
  64085821200, #  local_start 2031-10-19 01:00:00 (Sun)
  64096099200, #    local_end 2032-02-15 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64096110000, #    utc_start 2032-02-15 03:00:00 (Sun)
  64117281600, #      utc_end 2032-10-17 04:00:00 (Sun)
  64096095600, #  local_start 2032-02-14 23:00:00 (Sat)
  64117267200, #    local_end 2032-10-17 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64117281600, #    utc_start 2032-10-17 04:00:00 (Sun)
  64128164400, #      utc_end 2033-02-20 03:00:00 (Sun)
  64117270800, #  local_start 2032-10-17 01:00:00 (Sun)
  64128153600, #    local_end 2033-02-20 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64128164400, #    utc_start 2033-02-20 03:00:00 (Sun)
  64148731200, #      utc_end 2033-10-16 04:00:00 (Sun)
  64128150000, #  local_start 2033-02-19 23:00:00 (Sat)
  64148716800, #    local_end 2033-10-16 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64148731200, #    utc_start 2033-10-16 04:00:00 (Sun)
  64160218800, #      utc_end 2034-02-26 03:00:00 (Sun)
  64148720400, #  local_start 2033-10-16 01:00:00 (Sun)
  64160208000, #    local_end 2034-02-26 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64160218800, #    utc_start 2034-02-26 03:00:00 (Sun)
  64180180800, #      utc_end 2034-10-15 04:00:00 (Sun)
  64160204400, #  local_start 2034-02-25 23:00:00 (Sat)
  64180166400, #    local_end 2034-10-15 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64180180800, #    utc_start 2034-10-15 04:00:00 (Sun)
  64191063600, #      utc_end 2035-02-18 03:00:00 (Sun)
  64180170000, #  local_start 2034-10-15 01:00:00 (Sun)
  64191052800, #    local_end 2035-02-18 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64191063600, #    utc_start 2035-02-18 03:00:00 (Sun)
  64212235200, #      utc_end 2035-10-21 04:00:00 (Sun)
  64191049200, #  local_start 2035-02-17 23:00:00 (Sat)
  64212220800, #    local_end 2035-10-21 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64212235200, #    utc_start 2035-10-21 04:00:00 (Sun)
  64222513200, #      utc_end 2036-02-17 03:00:00 (Sun)
  64212224400, #  local_start 2035-10-21 01:00:00 (Sun)
  64222502400, #    local_end 2036-02-17 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64222513200, #    utc_start 2036-02-17 03:00:00 (Sun)
  64243684800, #      utc_end 2036-10-19 04:00:00 (Sun)
  64222498800, #  local_start 2036-02-16 23:00:00 (Sat)
  64243670400, #    local_end 2036-10-19 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64243684800, #    utc_start 2036-10-19 04:00:00 (Sun)
  64254567600, #      utc_end 2037-02-22 03:00:00 (Sun)
  64243674000, #  local_start 2036-10-19 01:00:00 (Sun)
  64254556800, #    local_end 2037-02-22 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64254567600, #    utc_start 2037-02-22 03:00:00 (Sun)
  64275134400, #      utc_end 2037-10-18 04:00:00 (Sun)
  64254553200, #  local_start 2037-02-21 23:00:00 (Sat)
  64275120000, #    local_end 2037-10-18 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64275134400, #    utc_start 2037-10-18 04:00:00 (Sun)
  64286017200, #      utc_end 2038-02-21 03:00:00 (Sun)
  64275123600, #  local_start 2037-10-18 01:00:00 (Sun)
  64286006400, #    local_end 2038-02-21 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64286017200, #    utc_start 2038-02-21 03:00:00 (Sun)
  64306584000, #      utc_end 2038-10-17 04:00:00 (Sun)
  64286002800, #  local_start 2038-02-20 23:00:00 (Sat)
  64306569600, #    local_end 2038-10-17 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64306584000, #    utc_start 2038-10-17 04:00:00 (Sun)
  64317466800, #      utc_end 2039-02-20 03:00:00 (Sun)
  64306573200, #  local_start 2038-10-17 01:00:00 (Sun)
  64317456000, #    local_end 2039-02-20 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64317466800, #    utc_start 2039-02-20 03:00:00 (Sun)
  64338033600, #      utc_end 2039-10-16 04:00:00 (Sun)
  64317452400, #  local_start 2039-02-19 23:00:00 (Sat)
  64338019200, #    local_end 2039-10-16 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {66}
  
  sub _max_year {2038}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -14400 }
  
  my $last_observance = bless( {
    'format' => 'AM%sT',
    'gmtoff' => '-4:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 698708,
      'local_rd_secs' => 85108,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 698708,
      'utc_rd_secs' => 85108,
      'utc_year' => 1914
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -14400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 698709,
      'local_rd_secs' => 13108,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 698709,
      'utc_rd_secs' => 13108,
      'utc_year' => 1915
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '0:00',
      'from' => '2008',
      'in' => 'Oct',
      'letter' => 'S',
      'name' => 'Brazil',
      'offset_from_std' => 3600,
      'on' => 'Sun>=15',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '0:00',
      'from' => '2038',
      'in' => 'Feb',
      'letter' => '',
      'name' => 'Brazil',
      'offset_from_std' => 0,
      'on' => 'Sun>=15',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_CAMPO_GRANDE

    $main::fatpacked{"DateTime/TimeZone/America/Cancun.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_CANCUN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Cancun;
  $DateTime::TimeZone::America::Cancun::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Cancun::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60620940000, #      utc_end 1922-01-01 06:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60620919176, #    local_end 1922-01-01 00:12:56 (Sun)
  -20824,
  0,
  'LMT',
      ],
      [
  60620940000, #    utc_start 1922-01-01 06:00:00 (Sun)
  62513618400, #      utc_end 1981-12-23 06:00:00 (Wed)
  60620918400, #  local_start 1922-01-01 00:00:00 (Sun)
  62513596800, #    local_end 1981-12-23 00:00:00 (Wed)
  -21600,
  0,
  'CST',
      ],
      [
  62513618400, #    utc_start 1981-12-23 06:00:00 (Wed)
  62964543600, #      utc_end 1996-04-07 07:00:00 (Sun)
  62513600400, #  local_start 1981-12-23 01:00:00 (Wed)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62964543600, #    utc_start 1996-04-07 07:00:00 (Sun)
  62982079200, #      utc_end 1996-10-27 06:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62982079200, #    utc_start 1996-10-27 06:00:00 (Sun)
  62995993200, #      utc_end 1997-04-06 07:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62995993200, #    utc_start 1997-04-06 07:00:00 (Sun)
  63013528800, #      utc_end 1997-10-26 06:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63013528800, #    utc_start 1997-10-26 06:00:00 (Sun)
  63027442800, #      utc_end 1998-04-05 07:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63027442800, #    utc_start 1998-04-05 07:00:00 (Sun)
  63037720800, #      utc_end 1998-08-02 06:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63037706400, #    local_end 1998-08-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63037720800, #    utc_start 1998-08-02 06:00:00 (Sun)
  63044982000, #      utc_end 1998-10-25 07:00:00 (Sun)
  63037702800, #  local_start 1998-08-02 01:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63044982000, #    utc_start 1998-10-25 07:00:00 (Sun)
  63058896000, #      utc_end 1999-04-04 08:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63058896000, #    utc_start 1999-04-04 08:00:00 (Sun)
  63077036400, #      utc_end 1999-10-31 07:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63077036400, #    utc_start 1999-10-31 07:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108486000, #      utc_end 2000-10-29 07:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108486000, #    utc_start 2000-10-29 07:00:00 (Sun)
  63124819200, #      utc_end 2001-05-06 08:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63124797600, #    local_end 2001-05-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63124819200, #    utc_start 2001-05-06 08:00:00 (Sun)
  63137516400, #      utc_end 2001-09-30 07:00:00 (Sun)
  63124801200, #  local_start 2001-05-06 03:00:00 (Sun)
  63137498400, #    local_end 2001-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63137516400, #    utc_start 2001-09-30 07:00:00 (Sun)
  63153849600, #      utc_end 2002-04-07 08:00:00 (Sun)
  63137494800, #  local_start 2001-09-30 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63153849600, #    utc_start 2002-04-07 08:00:00 (Sun)
  63171385200, #      utc_end 2002-10-27 07:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63171385200, #    utc_start 2002-10-27 07:00:00 (Sun)
  63185299200, #      utc_end 2003-04-06 08:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63185299200, #    utc_start 2003-04-06 08:00:00 (Sun)
  63202834800, #      utc_end 2003-10-26 07:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63202834800, #    utc_start 2003-10-26 07:00:00 (Sun)
  63216748800, #      utc_end 2004-04-04 08:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63216748800, #    utc_start 2004-04-04 08:00:00 (Sun)
  63234889200, #      utc_end 2004-10-31 07:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63234889200, #    utc_start 2004-10-31 07:00:00 (Sun)
  63248198400, #      utc_end 2005-04-03 08:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63248198400, #    utc_start 2005-04-03 08:00:00 (Sun)
  63266338800, #      utc_end 2005-10-30 07:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63266338800, #    utc_start 2005-10-30 07:00:00 (Sun)
  63279648000, #      utc_end 2006-04-02 08:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63279648000, #    utc_start 2006-04-02 08:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63311097600, #      utc_end 2007-04-01 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63311076000, #    local_end 2007-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63311097600, #    utc_start 2007-04-01 08:00:00 (Sun)
  63329238000, #      utc_end 2007-10-28 07:00:00 (Sun)
  63311079600, #  local_start 2007-04-01 03:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329238000, #    utc_start 2007-10-28 07:00:00 (Sun)
  63343152000, #      utc_end 2008-04-06 08:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63343130400, #    local_end 2008-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63343152000, #    utc_start 2008-04-06 08:00:00 (Sun)
  63360687600, #      utc_end 2008-10-26 07:00:00 (Sun)
  63343134000, #  local_start 2008-04-06 03:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63360687600, #    utc_start 2008-10-26 07:00:00 (Sun)
  63374601600, #      utc_end 2009-04-05 08:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63374580000, #    local_end 2009-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63374601600, #    utc_start 2009-04-05 08:00:00 (Sun)
  63392137200, #      utc_end 2009-10-25 07:00:00 (Sun)
  63374583600, #  local_start 2009-04-05 03:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63392137200, #    utc_start 2009-10-25 07:00:00 (Sun)
  63406051200, #      utc_end 2010-04-04 08:00:00 (Sun)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63406029600, #    local_end 2010-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63406051200, #    utc_start 2010-04-04 08:00:00 (Sun)
  63424191600, #      utc_end 2010-10-31 07:00:00 (Sun)
  63406033200, #  local_start 2010-04-04 03:00:00 (Sun)
  63424173600, #    local_end 2010-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424191600, #    utc_start 2010-10-31 07:00:00 (Sun)
  63437500800, #      utc_end 2011-04-03 08:00:00 (Sun)
  63424170000, #  local_start 2010-10-31 01:00:00 (Sun)
  63437479200, #    local_end 2011-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63437500800, #    utc_start 2011-04-03 08:00:00 (Sun)
  63455641200, #      utc_end 2011-10-30 07:00:00 (Sun)
  63437482800, #  local_start 2011-04-03 03:00:00 (Sun)
  63455623200, #    local_end 2011-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63455641200, #    utc_start 2011-10-30 07:00:00 (Sun)
  63468950400, #      utc_end 2012-04-01 08:00:00 (Sun)
  63455619600, #  local_start 2011-10-30 01:00:00 (Sun)
  63468928800, #    local_end 2012-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63468950400, #    utc_start 2012-04-01 08:00:00 (Sun)
  63487090800, #      utc_end 2012-10-28 07:00:00 (Sun)
  63468932400, #  local_start 2012-04-01 03:00:00 (Sun)
  63487072800, #    local_end 2012-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487090800, #    utc_start 2012-10-28 07:00:00 (Sun)
  63501004800, #      utc_end 2013-04-07 08:00:00 (Sun)
  63487069200, #  local_start 2012-10-28 01:00:00 (Sun)
  63500983200, #    local_end 2013-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63501004800, #    utc_start 2013-04-07 08:00:00 (Sun)
  63518540400, #      utc_end 2013-10-27 07:00:00 (Sun)
  63500986800, #  local_start 2013-04-07 03:00:00 (Sun)
  63518522400, #    local_end 2013-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63518540400, #    utc_start 2013-10-27 07:00:00 (Sun)
  63532454400, #      utc_end 2014-04-06 08:00:00 (Sun)
  63518518800, #  local_start 2013-10-27 01:00:00 (Sun)
  63532432800, #    local_end 2014-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63532454400, #    utc_start 2014-04-06 08:00:00 (Sun)
  63549990000, #      utc_end 2014-10-26 07:00:00 (Sun)
  63532436400, #  local_start 2014-04-06 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63549990000, #    utc_start 2014-10-26 07:00:00 (Sun)
  63558460800, #      utc_end 2015-02-01 08:00:00 (Sun)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63558439200, #    local_end 2015-02-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63558460800, #    utc_start 2015-02-01 08:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63558442800, #  local_start 2015-02-01 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -18000,
  0,
  'EST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {20}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_CANCUN

    $main::fatpacked{"DateTime/TimeZone/America/Caracas.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_CARACAS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Caracas;
  $DateTime::TimeZone::America::Caracas::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Caracas::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611177664, #      utc_end 1890-01-01 04:27:44 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -16064,
  0,
  'LMT',
      ],
      [
  59611177664, #    utc_start 1890-01-01 04:27:44 (Wed)
  60308944060, #      utc_end 1912-02-12 04:27:40 (Mon)
  59611161604, #  local_start 1890-01-01 00:00:04 (Wed)
  60308928000, #    local_end 1912-02-12 00:00:00 (Mon)
  -16060,
  0,
  'CMT',
      ],
      [
  60308944060, #    utc_start 1912-02-12 04:27:40 (Mon)
  61977933000, #      utc_end 1965-01-01 04:30:00 (Fri)
  60308927860, #  local_start 1912-02-11 23:57:40 (Sun)
  61977916800, #    local_end 1965-01-01 00:00:00 (Fri)
  -16200,
  0,
  'VET',
      ],
      [
  61977933000, #    utc_start 1965-01-01 04:30:00 (Fri)
  63332866800, #      utc_end 2007-12-09 07:00:00 (Sun)
  61977918600, #  local_start 1965-01-01 00:30:00 (Fri)
  63332852400, #    local_end 2007-12-09 03:00:00 (Sun)
  -14400,
  0,
  'VET',
      ],
      [
  63332866800, #    utc_start 2007-12-09 07:00:00 (Sun)
  63597769200, #      utc_end 2016-05-01 07:00:00 (Sun)
  63332850600, #  local_start 2007-12-09 02:30:00 (Sun)
  63597753000, #    local_end 2016-05-01 02:30:00 (Sun)
  -16200,
  0,
  'VET',
      ],
      [
  63597769200, #    utc_start 2016-05-01 07:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63597754800, #  local_start 2016-05-01 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -14400,
  0,
  'VET',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_CARACAS

    $main::fatpacked{"DateTime/TimeZone/America/Cayenne.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_CAYENNE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Cayenne;
  $DateTime::TimeZone::America::Cayenne::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Cayenne::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60289414160, #      utc_end 1911-07-01 03:29:20 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60289401600, #    local_end 1911-07-01 00:00:00 (Sat)
  -12560,
  0,
  'LMT',
      ],
      [
  60289414160, #    utc_start 1911-07-01 03:29:20 (Sat)
  62064590400, #      utc_end 1967-10-01 04:00:00 (Sun)
  60289399760, #  local_start 1911-06-30 23:29:20 (Fri)
  62064576000, #    local_end 1967-10-01 00:00:00 (Sun)
  -14400,
  0,
  'GFT',
      ],
      [
  62064590400, #    utc_start 1967-10-01 04:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  62064579600, #  local_start 1967-10-01 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'GFT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_CAYENNE

    $main::fatpacked{"DateTime/TimeZone/America/Chicago.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_CHICAGO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Chicago;
  $DateTime::TimeZone::America::Chicago::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Chicago::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418036000, #      utc_end 1883-11-18 18:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418014964, #    local_end 1883-11-18 12:09:24 (Sun)
  -21036,
  0,
  'LMT',
      ],
      [
  59418036000, #    utc_start 1883-11-18 18:00:00 (Sun)
  60502406400, #      utc_end 1918-03-31 08:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60502406400, #    utc_start 1918-03-31 08:00:00 (Sun)
  60520546800, #      utc_end 1918-10-27 07:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60520546800, #    utc_start 1918-10-27 07:00:00 (Sun)
  60533856000, #      utc_end 1919-03-30 08:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60533856000, #    utc_start 1919-03-30 08:00:00 (Sun)
  60551996400, #      utc_end 1919-10-26 07:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60551996400, #    utc_start 1919-10-26 07:00:00 (Sun)
  60557781600, #      utc_end 1920-01-01 06:00:00 (Thu)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  60557760000, #    local_end 1920-01-01 00:00:00 (Thu)
  -21600,
  0,
  'CST',
      ],
      [
  60557781600, #    utc_start 1920-01-01 06:00:00 (Thu)
  60571958400, #      utc_end 1920-06-13 08:00:00 (Sun)
  60557760000, #  local_start 1920-01-01 00:00:00 (Thu)
  60571936800, #    local_end 1920-06-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60571958400, #    utc_start 1920-06-13 08:00:00 (Sun)
  60584050800, #      utc_end 1920-10-31 07:00:00 (Sun)
  60571940400, #  local_start 1920-06-13 03:00:00 (Sun)
  60584032800, #    local_end 1920-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60584050800, #    utc_start 1920-10-31 07:00:00 (Sun)
  60596755200, #      utc_end 1921-03-27 08:00:00 (Sun)
  60584029200, #  local_start 1920-10-31 01:00:00 (Sun)
  60596733600, #    local_end 1921-03-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60596755200, #    utc_start 1921-03-27 08:00:00 (Sun)
  60615500400, #      utc_end 1921-10-30 07:00:00 (Sun)
  60596737200, #  local_start 1921-03-27 03:00:00 (Sun)
  60615482400, #    local_end 1921-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60615500400, #    utc_start 1921-10-30 07:00:00 (Sun)
  60631228800, #      utc_end 1922-04-30 08:00:00 (Sun)
  60615478800, #  local_start 1921-10-30 01:00:00 (Sun)
  60631207200, #    local_end 1922-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60631228800, #    utc_start 1922-04-30 08:00:00 (Sun)
  60643926000, #      utc_end 1922-09-24 07:00:00 (Sun)
  60631210800, #  local_start 1922-04-30 03:00:00 (Sun)
  60643908000, #    local_end 1922-09-24 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60643926000, #    utc_start 1922-09-24 07:00:00 (Sun)
  60662678400, #      utc_end 1923-04-29 08:00:00 (Sun)
  60643904400, #  local_start 1922-09-24 01:00:00 (Sun)
  60662656800, #    local_end 1923-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60662678400, #    utc_start 1923-04-29 08:00:00 (Sun)
  60675980400, #      utc_end 1923-09-30 07:00:00 (Sun)
  60662660400, #  local_start 1923-04-29 03:00:00 (Sun)
  60675962400, #    local_end 1923-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60675980400, #    utc_start 1923-09-30 07:00:00 (Sun)
  60694128000, #      utc_end 1924-04-27 08:00:00 (Sun)
  60675958800, #  local_start 1923-09-30 01:00:00 (Sun)
  60694106400, #    local_end 1924-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60694128000, #    utc_start 1924-04-27 08:00:00 (Sun)
  60707430000, #      utc_end 1924-09-28 07:00:00 (Sun)
  60694110000, #  local_start 1924-04-27 03:00:00 (Sun)
  60707412000, #    local_end 1924-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60707430000, #    utc_start 1924-09-28 07:00:00 (Sun)
  60725577600, #      utc_end 1925-04-26 08:00:00 (Sun)
  60707408400, #  local_start 1924-09-28 01:00:00 (Sun)
  60725556000, #    local_end 1925-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60725577600, #    utc_start 1925-04-26 08:00:00 (Sun)
  60738879600, #      utc_end 1925-09-27 07:00:00 (Sun)
  60725559600, #  local_start 1925-04-26 03:00:00 (Sun)
  60738861600, #    local_end 1925-09-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60738879600, #    utc_start 1925-09-27 07:00:00 (Sun)
  60757027200, #      utc_end 1926-04-25 08:00:00 (Sun)
  60738858000, #  local_start 1925-09-27 01:00:00 (Sun)
  60757005600, #    local_end 1926-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60757027200, #    utc_start 1926-04-25 08:00:00 (Sun)
  60770329200, #      utc_end 1926-09-26 07:00:00 (Sun)
  60757009200, #  local_start 1926-04-25 03:00:00 (Sun)
  60770311200, #    local_end 1926-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60770329200, #    utc_start 1926-09-26 07:00:00 (Sun)
  60788476800, #      utc_end 1927-04-24 08:00:00 (Sun)
  60770307600, #  local_start 1926-09-26 01:00:00 (Sun)
  60788455200, #    local_end 1927-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60788476800, #    utc_start 1927-04-24 08:00:00 (Sun)
  60801778800, #      utc_end 1927-09-25 07:00:00 (Sun)
  60788458800, #  local_start 1927-04-24 03:00:00 (Sun)
  60801760800, #    local_end 1927-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60801778800, #    utc_start 1927-09-25 07:00:00 (Sun)
  60820531200, #      utc_end 1928-04-29 08:00:00 (Sun)
  60801757200, #  local_start 1927-09-25 01:00:00 (Sun)
  60820509600, #    local_end 1928-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60820531200, #    utc_start 1928-04-29 08:00:00 (Sun)
  60833833200, #      utc_end 1928-09-30 07:00:00 (Sun)
  60820513200, #  local_start 1928-04-29 03:00:00 (Sun)
  60833815200, #    local_end 1928-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60833833200, #    utc_start 1928-09-30 07:00:00 (Sun)
  60851980800, #      utc_end 1929-04-28 08:00:00 (Sun)
  60833811600, #  local_start 1928-09-30 01:00:00 (Sun)
  60851959200, #    local_end 1929-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60851980800, #    utc_start 1929-04-28 08:00:00 (Sun)
  60865282800, #      utc_end 1929-09-29 07:00:00 (Sun)
  60851962800, #  local_start 1929-04-28 03:00:00 (Sun)
  60865264800, #    local_end 1929-09-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60865282800, #    utc_start 1929-09-29 07:00:00 (Sun)
  60883430400, #      utc_end 1930-04-27 08:00:00 (Sun)
  60865261200, #  local_start 1929-09-29 01:00:00 (Sun)
  60883408800, #    local_end 1930-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60883430400, #    utc_start 1930-04-27 08:00:00 (Sun)
  60896732400, #      utc_end 1930-09-28 07:00:00 (Sun)
  60883412400, #  local_start 1930-04-27 03:00:00 (Sun)
  60896714400, #    local_end 1930-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60896732400, #    utc_start 1930-09-28 07:00:00 (Sun)
  60914880000, #      utc_end 1931-04-26 08:00:00 (Sun)
  60896710800, #  local_start 1930-09-28 01:00:00 (Sun)
  60914858400, #    local_end 1931-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60914880000, #    utc_start 1931-04-26 08:00:00 (Sun)
  60928182000, #      utc_end 1931-09-27 07:00:00 (Sun)
  60914862000, #  local_start 1931-04-26 03:00:00 (Sun)
  60928164000, #    local_end 1931-09-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60928182000, #    utc_start 1931-09-27 07:00:00 (Sun)
  60946329600, #      utc_end 1932-04-24 08:00:00 (Sun)
  60928160400, #  local_start 1931-09-27 01:00:00 (Sun)
  60946308000, #    local_end 1932-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60946329600, #    utc_start 1932-04-24 08:00:00 (Sun)
  60959631600, #      utc_end 1932-09-25 07:00:00 (Sun)
  60946311600, #  local_start 1932-04-24 03:00:00 (Sun)
  60959613600, #    local_end 1932-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60959631600, #    utc_start 1932-09-25 07:00:00 (Sun)
  60978384000, #      utc_end 1933-04-30 08:00:00 (Sun)
  60959610000, #  local_start 1932-09-25 01:00:00 (Sun)
  60978362400, #    local_end 1933-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60978384000, #    utc_start 1933-04-30 08:00:00 (Sun)
  60991081200, #      utc_end 1933-09-24 07:00:00 (Sun)
  60978366000, #  local_start 1933-04-30 03:00:00 (Sun)
  60991063200, #    local_end 1933-09-24 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60991081200, #    utc_start 1933-09-24 07:00:00 (Sun)
  61009833600, #      utc_end 1934-04-29 08:00:00 (Sun)
  60991059600, #  local_start 1933-09-24 01:00:00 (Sun)
  61009812000, #    local_end 1934-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61009833600, #    utc_start 1934-04-29 08:00:00 (Sun)
  61023135600, #      utc_end 1934-09-30 07:00:00 (Sun)
  61009815600, #  local_start 1934-04-29 03:00:00 (Sun)
  61023117600, #    local_end 1934-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61023135600, #    utc_start 1934-09-30 07:00:00 (Sun)
  61041283200, #      utc_end 1935-04-28 08:00:00 (Sun)
  61023114000, #  local_start 1934-09-30 01:00:00 (Sun)
  61041261600, #    local_end 1935-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61041283200, #    utc_start 1935-04-28 08:00:00 (Sun)
  61054585200, #      utc_end 1935-09-29 07:00:00 (Sun)
  61041265200, #  local_start 1935-04-28 03:00:00 (Sun)
  61054567200, #    local_end 1935-09-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61054585200, #    utc_start 1935-09-29 07:00:00 (Sun)
  61067894400, #      utc_end 1936-03-01 08:00:00 (Sun)
  61054563600, #  local_start 1935-09-29 01:00:00 (Sun)
  61067872800, #    local_end 1936-03-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61067894400, #    utc_start 1936-03-01 08:00:00 (Sun)
  61090268400, #      utc_end 1936-11-15 07:00:00 (Sun)
  61067876400, #  local_start 1936-03-01 03:00:00 (Sun)
  61090250400, #    local_end 1936-11-15 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61090268400, #    utc_start 1936-11-15 07:00:00 (Sun)
  61104182400, #      utc_end 1937-04-25 08:00:00 (Sun)
  61090246800, #  local_start 1936-11-15 01:00:00 (Sun)
  61104160800, #    local_end 1937-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61104182400, #    utc_start 1937-04-25 08:00:00 (Sun)
  61117484400, #      utc_end 1937-09-26 07:00:00 (Sun)
  61104164400, #  local_start 1937-04-25 03:00:00 (Sun)
  61117466400, #    local_end 1937-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61117484400, #    utc_start 1937-09-26 07:00:00 (Sun)
  61135632000, #      utc_end 1938-04-24 08:00:00 (Sun)
  61117462800, #  local_start 1937-09-26 01:00:00 (Sun)
  61135610400, #    local_end 1938-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61135632000, #    utc_start 1938-04-24 08:00:00 (Sun)
  61148934000, #      utc_end 1938-09-25 07:00:00 (Sun)
  61135614000, #  local_start 1938-04-24 03:00:00 (Sun)
  61148916000, #    local_end 1938-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61148934000, #    utc_start 1938-09-25 07:00:00 (Sun)
  61167686400, #      utc_end 1939-04-30 08:00:00 (Sun)
  61148912400, #  local_start 1938-09-25 01:00:00 (Sun)
  61167664800, #    local_end 1939-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61167686400, #    utc_start 1939-04-30 08:00:00 (Sun)
  61180383600, #      utc_end 1939-09-24 07:00:00 (Sun)
  61167668400, #  local_start 1939-04-30 03:00:00 (Sun)
  61180365600, #    local_end 1939-09-24 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61180383600, #    utc_start 1939-09-24 07:00:00 (Sun)
  61199136000, #      utc_end 1940-04-28 08:00:00 (Sun)
  61180362000, #  local_start 1939-09-24 01:00:00 (Sun)
  61199114400, #    local_end 1940-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61199136000, #    utc_start 1940-04-28 08:00:00 (Sun)
  61212438000, #      utc_end 1940-09-29 07:00:00 (Sun)
  61199118000, #  local_start 1940-04-28 03:00:00 (Sun)
  61212420000, #    local_end 1940-09-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61212438000, #    utc_start 1940-09-29 07:00:00 (Sun)
  61230585600, #      utc_end 1941-04-27 08:00:00 (Sun)
  61212416400, #  local_start 1940-09-29 01:00:00 (Sun)
  61230564000, #    local_end 1941-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61230585600, #    utc_start 1941-04-27 08:00:00 (Sun)
  61243887600, #      utc_end 1941-09-28 07:00:00 (Sun)
  61230567600, #  local_start 1941-04-27 03:00:00 (Sun)
  61243869600, #    local_end 1941-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61243887600, #    utc_start 1941-09-28 07:00:00 (Sun)
  61252092000, #      utc_end 1942-01-01 06:00:00 (Thu)
  61243866000, #  local_start 1941-09-28 01:00:00 (Sun)
  61252070400, #    local_end 1942-01-01 00:00:00 (Thu)
  -21600,
  0,
  'CST',
      ],
      [
  61252092000, #    utc_start 1942-01-01 06:00:00 (Thu)
  61255468800, #      utc_end 1942-02-09 08:00:00 (Mon)
  61252070400, #  local_start 1942-01-01 00:00:00 (Thu)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61255468800, #    utc_start 1942-02-09 08:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366269600, #    local_end 1945-08-14 18:00:00 (Tue)
  -18000,
  1,
  'CWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370290800, #      utc_end 1945-09-30 07:00:00 (Sun)
  61366269600, #  local_start 1945-08-14 18:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CPT',
      ],
      [
  61370290800, #    utc_start 1945-09-30 07:00:00 (Sun)
  61378322400, #      utc_end 1946-01-01 06:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -21600,
  0,
  'CST',
      ],
      [
  61378322400, #    utc_start 1946-01-01 06:00:00 (Tue)
  61388438400, #      utc_end 1946-04-28 08:00:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61388416800, #    local_end 1946-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61388438400, #    utc_start 1946-04-28 08:00:00 (Sun)
  61401740400, #      utc_end 1946-09-29 07:00:00 (Sun)
  61388420400, #  local_start 1946-04-28 03:00:00 (Sun)
  61401722400, #    local_end 1946-09-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61401740400, #    utc_start 1946-09-29 07:00:00 (Sun)
  61419888000, #      utc_end 1947-04-27 08:00:00 (Sun)
  61401718800, #  local_start 1946-09-29 01:00:00 (Sun)
  61419866400, #    local_end 1947-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61419888000, #    utc_start 1947-04-27 08:00:00 (Sun)
  61433190000, #      utc_end 1947-09-28 07:00:00 (Sun)
  61419870000, #  local_start 1947-04-27 03:00:00 (Sun)
  61433172000, #    local_end 1947-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61433190000, #    utc_start 1947-09-28 07:00:00 (Sun)
  61451337600, #      utc_end 1948-04-25 08:00:00 (Sun)
  61433168400, #  local_start 1947-09-28 01:00:00 (Sun)
  61451316000, #    local_end 1948-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61451337600, #    utc_start 1948-04-25 08:00:00 (Sun)
  61464639600, #      utc_end 1948-09-26 07:00:00 (Sun)
  61451319600, #  local_start 1948-04-25 03:00:00 (Sun)
  61464621600, #    local_end 1948-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61464639600, #    utc_start 1948-09-26 07:00:00 (Sun)
  61482787200, #      utc_end 1949-04-24 08:00:00 (Sun)
  61464618000, #  local_start 1948-09-26 01:00:00 (Sun)
  61482765600, #    local_end 1949-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61482787200, #    utc_start 1949-04-24 08:00:00 (Sun)
  61496089200, #      utc_end 1949-09-25 07:00:00 (Sun)
  61482769200, #  local_start 1949-04-24 03:00:00 (Sun)
  61496071200, #    local_end 1949-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61496089200, #    utc_start 1949-09-25 07:00:00 (Sun)
  61514841600, #      utc_end 1950-04-30 08:00:00 (Sun)
  61496067600, #  local_start 1949-09-25 01:00:00 (Sun)
  61514820000, #    local_end 1950-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61514841600, #    utc_start 1950-04-30 08:00:00 (Sun)
  61527538800, #      utc_end 1950-09-24 07:00:00 (Sun)
  61514823600, #  local_start 1950-04-30 03:00:00 (Sun)
  61527520800, #    local_end 1950-09-24 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61527538800, #    utc_start 1950-09-24 07:00:00 (Sun)
  61546291200, #      utc_end 1951-04-29 08:00:00 (Sun)
  61527517200, #  local_start 1950-09-24 01:00:00 (Sun)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61546291200, #    utc_start 1951-04-29 08:00:00 (Sun)
  61559593200, #      utc_end 1951-09-30 07:00:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61559593200, #    utc_start 1951-09-30 07:00:00 (Sun)
  61577740800, #      utc_end 1952-04-27 08:00:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61577740800, #    utc_start 1952-04-27 08:00:00 (Sun)
  61591042800, #      utc_end 1952-09-28 07:00:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61591042800, #    utc_start 1952-09-28 07:00:00 (Sun)
  61609190400, #      utc_end 1953-04-26 08:00:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61609190400, #    utc_start 1953-04-26 08:00:00 (Sun)
  61622492400, #      utc_end 1953-09-27 07:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61622492400, #    utc_start 1953-09-27 07:00:00 (Sun)
  61640640000, #      utc_end 1954-04-25 08:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61640640000, #    utc_start 1954-04-25 08:00:00 (Sun)
  61653942000, #      utc_end 1954-09-26 07:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61653942000, #    utc_start 1954-09-26 07:00:00 (Sun)
  61672089600, #      utc_end 1955-04-24 08:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61672089600, #    utc_start 1955-04-24 08:00:00 (Sun)
  61688415600, #      utc_end 1955-10-30 07:00:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61688397600, #    local_end 1955-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61688415600, #    utc_start 1955-10-30 07:00:00 (Sun)
  61704144000, #      utc_end 1956-04-29 08:00:00 (Sun)
  61688394000, #  local_start 1955-10-30 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61704144000, #    utc_start 1956-04-29 08:00:00 (Sun)
  61719865200, #      utc_end 1956-10-28 07:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61719847200, #    local_end 1956-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61719865200, #    utc_start 1956-10-28 07:00:00 (Sun)
  61735593600, #      utc_end 1957-04-28 08:00:00 (Sun)
  61719843600, #  local_start 1956-10-28 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61735593600, #    utc_start 1957-04-28 08:00:00 (Sun)
  61751314800, #      utc_end 1957-10-27 07:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61751296800, #    local_end 1957-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61751314800, #    utc_start 1957-10-27 07:00:00 (Sun)
  61767043200, #      utc_end 1958-04-27 08:00:00 (Sun)
  61751293200, #  local_start 1957-10-27 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61767043200, #    utc_start 1958-04-27 08:00:00 (Sun)
  61782764400, #      utc_end 1958-10-26 07:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61782746400, #    local_end 1958-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61782764400, #    utc_start 1958-10-26 07:00:00 (Sun)
  61798492800, #      utc_end 1959-04-26 08:00:00 (Sun)
  61782742800, #  local_start 1958-10-26 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61798492800, #    utc_start 1959-04-26 08:00:00 (Sun)
  61814214000, #      utc_end 1959-10-25 07:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61814196000, #    local_end 1959-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61814214000, #    utc_start 1959-10-25 07:00:00 (Sun)
  61829942400, #      utc_end 1960-04-24 08:00:00 (Sun)
  61814192400, #  local_start 1959-10-25 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61829942400, #    utc_start 1960-04-24 08:00:00 (Sun)
  61846268400, #      utc_end 1960-10-30 07:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61846250400, #    local_end 1960-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61846268400, #    utc_start 1960-10-30 07:00:00 (Sun)
  61861996800, #      utc_end 1961-04-30 08:00:00 (Sun)
  61846246800, #  local_start 1960-10-30 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61861996800, #    utc_start 1961-04-30 08:00:00 (Sun)
  61877718000, #      utc_end 1961-10-29 07:00:00 (Sun)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  61877700000, #    local_end 1961-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61877718000, #    utc_start 1961-10-29 07:00:00 (Sun)
  61893446400, #      utc_end 1962-04-29 08:00:00 (Sun)
  61877696400, #  local_start 1961-10-29 01:00:00 (Sun)
  61893424800, #    local_end 1962-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61893446400, #    utc_start 1962-04-29 08:00:00 (Sun)
  61909167600, #      utc_end 1962-10-28 07:00:00 (Sun)
  61893428400, #  local_start 1962-04-29 03:00:00 (Sun)
  61909149600, #    local_end 1962-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61909167600, #    utc_start 1962-10-28 07:00:00 (Sun)
  61924896000, #      utc_end 1963-04-28 08:00:00 (Sun)
  61909146000, #  local_start 1962-10-28 01:00:00 (Sun)
  61924874400, #    local_end 1963-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61924896000, #    utc_start 1963-04-28 08:00:00 (Sun)
  61940617200, #      utc_end 1963-10-27 07:00:00 (Sun)
  61924878000, #  local_start 1963-04-28 03:00:00 (Sun)
  61940599200, #    local_end 1963-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61940617200, #    utc_start 1963-10-27 07:00:00 (Sun)
  61956345600, #      utc_end 1964-04-26 08:00:00 (Sun)
  61940595600, #  local_start 1963-10-27 01:00:00 (Sun)
  61956324000, #    local_end 1964-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61956345600, #    utc_start 1964-04-26 08:00:00 (Sun)
  61972066800, #      utc_end 1964-10-25 07:00:00 (Sun)
  61956327600, #  local_start 1964-04-26 03:00:00 (Sun)
  61972048800, #    local_end 1964-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61972066800, #    utc_start 1964-10-25 07:00:00 (Sun)
  61987795200, #      utc_end 1965-04-25 08:00:00 (Sun)
  61972045200, #  local_start 1964-10-25 01:00:00 (Sun)
  61987773600, #    local_end 1965-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61987795200, #    utc_start 1965-04-25 08:00:00 (Sun)
  62004121200, #      utc_end 1965-10-31 07:00:00 (Sun)
  61987777200, #  local_start 1965-04-25 03:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62004121200, #    utc_start 1965-10-31 07:00:00 (Sun)
  62019244800, #      utc_end 1966-04-24 08:00:00 (Sun)
  62004099600, #  local_start 1965-10-31 01:00:00 (Sun)
  62019223200, #    local_end 1966-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62019244800, #    utc_start 1966-04-24 08:00:00 (Sun)
  62035570800, #      utc_end 1966-10-30 07:00:00 (Sun)
  62019226800, #  local_start 1966-04-24 03:00:00 (Sun)
  62035552800, #    local_end 1966-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62035570800, #    utc_start 1966-10-30 07:00:00 (Sun)
  62041010400, #      utc_end 1967-01-01 06:00:00 (Sun)
  62035549200, #  local_start 1966-10-30 01:00:00 (Sun)
  62040988800, #    local_end 1967-01-01 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62041010400, #    utc_start 1967-01-01 06:00:00 (Sun)
  62051299200, #      utc_end 1967-04-30 08:00:00 (Sun)
  62040988800, #  local_start 1967-01-01 00:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62051299200, #    utc_start 1967-04-30 08:00:00 (Sun)
  62067020400, #      utc_end 1967-10-29 07:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62067020400, #    utc_start 1967-10-29 07:00:00 (Sun)
  62082748800, #      utc_end 1968-04-28 08:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62082748800, #    utc_start 1968-04-28 08:00:00 (Sun)
  62098470000, #      utc_end 1968-10-27 07:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62098470000, #    utc_start 1968-10-27 07:00:00 (Sun)
  62114198400, #      utc_end 1969-04-27 08:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62114198400, #    utc_start 1969-04-27 08:00:00 (Sun)
  62129919600, #      utc_end 1969-10-26 07:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62129919600, #    utc_start 1969-10-26 07:00:00 (Sun)
  62145648000, #      utc_end 1970-04-26 08:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62145648000, #    utc_start 1970-04-26 08:00:00 (Sun)
  62161369200, #      utc_end 1970-10-25 07:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62161369200, #    utc_start 1970-10-25 07:00:00 (Sun)
  62177097600, #      utc_end 1971-04-25 08:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62177097600, #    utc_start 1971-04-25 08:00:00 (Sun)
  62193423600, #      utc_end 1971-10-31 07:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62193423600, #    utc_start 1971-10-31 07:00:00 (Sun)
  62209152000, #      utc_end 1972-04-30 08:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62209152000, #    utc_start 1972-04-30 08:00:00 (Sun)
  62224873200, #      utc_end 1972-10-29 07:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62224873200, #    utc_start 1972-10-29 07:00:00 (Sun)
  62240601600, #      utc_end 1973-04-29 08:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62240601600, #    utc_start 1973-04-29 08:00:00 (Sun)
  62256322800, #      utc_end 1973-10-28 07:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62256322800, #    utc_start 1973-10-28 07:00:00 (Sun)
  62262374400, #      utc_end 1974-01-06 08:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62262374400, #    utc_start 1974-01-06 08:00:00 (Sun)
  62287772400, #      utc_end 1974-10-27 07:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62287772400, #    utc_start 1974-10-27 07:00:00 (Sun)
  62298057600, #      utc_end 1975-02-23 08:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62298057600, #    utc_start 1975-02-23 08:00:00 (Sun)
  62319222000, #      utc_end 1975-10-26 07:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62319222000, #    utc_start 1975-10-26 07:00:00 (Sun)
  62334950400, #      utc_end 1976-04-25 08:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62334950400, #    utc_start 1976-04-25 08:00:00 (Sun)
  62351276400, #      utc_end 1976-10-31 07:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62351276400, #    utc_start 1976-10-31 07:00:00 (Sun)
  62366400000, #      utc_end 1977-04-24 08:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62366400000, #    utc_start 1977-04-24 08:00:00 (Sun)
  62382726000, #      utc_end 1977-10-30 07:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62382726000, #    utc_start 1977-10-30 07:00:00 (Sun)
  62398454400, #      utc_end 1978-04-30 08:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62398454400, #    utc_start 1978-04-30 08:00:00 (Sun)
  62414175600, #      utc_end 1978-10-29 07:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62414175600, #    utc_start 1978-10-29 07:00:00 (Sun)
  62429904000, #      utc_end 1979-04-29 08:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62429904000, #    utc_start 1979-04-29 08:00:00 (Sun)
  62445625200, #      utc_end 1979-10-28 07:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62445625200, #    utc_start 1979-10-28 07:00:00 (Sun)
  62461353600, #      utc_end 1980-04-27 08:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62461353600, #    utc_start 1980-04-27 08:00:00 (Sun)
  62477074800, #      utc_end 1980-10-26 07:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62477074800, #    utc_start 1980-10-26 07:00:00 (Sun)
  62492803200, #      utc_end 1981-04-26 08:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62492803200, #    utc_start 1981-04-26 08:00:00 (Sun)
  62508524400, #      utc_end 1981-10-25 07:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62508524400, #    utc_start 1981-10-25 07:00:00 (Sun)
  62524252800, #      utc_end 1982-04-25 08:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62524252800, #    utc_start 1982-04-25 08:00:00 (Sun)
  62540578800, #      utc_end 1982-10-31 07:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62540578800, #    utc_start 1982-10-31 07:00:00 (Sun)
  62555702400, #      utc_end 1983-04-24 08:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62555702400, #    utc_start 1983-04-24 08:00:00 (Sun)
  62572028400, #      utc_end 1983-10-30 07:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62572028400, #    utc_start 1983-10-30 07:00:00 (Sun)
  62587756800, #      utc_end 1984-04-29 08:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62587756800, #    utc_start 1984-04-29 08:00:00 (Sun)
  62603478000, #      utc_end 1984-10-28 07:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62603478000, #    utc_start 1984-10-28 07:00:00 (Sun)
  62619206400, #      utc_end 1985-04-28 08:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62619206400, #    utc_start 1985-04-28 08:00:00 (Sun)
  62634927600, #      utc_end 1985-10-27 07:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62634927600, #    utc_start 1985-10-27 07:00:00 (Sun)
  62650656000, #      utc_end 1986-04-27 08:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62650656000, #    utc_start 1986-04-27 08:00:00 (Sun)
  62666377200, #      utc_end 1986-10-26 07:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62666377200, #    utc_start 1986-10-26 07:00:00 (Sun)
  62680291200, #      utc_end 1987-04-05 08:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62680291200, #    utc_start 1987-04-05 08:00:00 (Sun)
  62697826800, #      utc_end 1987-10-25 07:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62697826800, #    utc_start 1987-10-25 07:00:00 (Sun)
  62711740800, #      utc_end 1988-04-03 08:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62711740800, #    utc_start 1988-04-03 08:00:00 (Sun)
  62729881200, #      utc_end 1988-10-30 07:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62729881200, #    utc_start 1988-10-30 07:00:00 (Sun)
  62743190400, #      utc_end 1989-04-02 08:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62743190400, #    utc_start 1989-04-02 08:00:00 (Sun)
  62761330800, #      utc_end 1989-10-29 07:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62761330800, #    utc_start 1989-10-29 07:00:00 (Sun)
  62774640000, #      utc_end 1990-04-01 08:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62774640000, #    utc_start 1990-04-01 08:00:00 (Sun)
  62792780400, #      utc_end 1990-10-28 07:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62792780400, #    utc_start 1990-10-28 07:00:00 (Sun)
  62806694400, #      utc_end 1991-04-07 08:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62806694400, #    utc_start 1991-04-07 08:00:00 (Sun)
  62824230000, #      utc_end 1991-10-27 07:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62824230000, #    utc_start 1991-10-27 07:00:00 (Sun)
  62838144000, #      utc_end 1992-04-05 08:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62838144000, #    utc_start 1992-04-05 08:00:00 (Sun)
  62855679600, #      utc_end 1992-10-25 07:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62855679600, #    utc_start 1992-10-25 07:00:00 (Sun)
  62869593600, #      utc_end 1993-04-04 08:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62869593600, #    utc_start 1993-04-04 08:00:00 (Sun)
  62887734000, #      utc_end 1993-10-31 07:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62887734000, #    utc_start 1993-10-31 07:00:00 (Sun)
  62901043200, #      utc_end 1994-04-03 08:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62901043200, #    utc_start 1994-04-03 08:00:00 (Sun)
  62919183600, #      utc_end 1994-10-30 07:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62919183600, #    utc_start 1994-10-30 07:00:00 (Sun)
  62932492800, #      utc_end 1995-04-02 08:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62932492800, #    utc_start 1995-04-02 08:00:00 (Sun)
  62950633200, #      utc_end 1995-10-29 07:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62950633200, #    utc_start 1995-10-29 07:00:00 (Sun)
  62964547200, #      utc_end 1996-04-07 08:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62964547200, #    utc_start 1996-04-07 08:00:00 (Sun)
  62982082800, #      utc_end 1996-10-27 07:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62982082800, #    utc_start 1996-10-27 07:00:00 (Sun)
  62995996800, #      utc_end 1997-04-06 08:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62995996800, #    utc_start 1997-04-06 08:00:00 (Sun)
  63013532400, #      utc_end 1997-10-26 07:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63013532400, #    utc_start 1997-10-26 07:00:00 (Sun)
  63027446400, #      utc_end 1998-04-05 08:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63027446400, #    utc_start 1998-04-05 08:00:00 (Sun)
  63044982000, #      utc_end 1998-10-25 07:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63044982000, #    utc_start 1998-10-25 07:00:00 (Sun)
  63058896000, #      utc_end 1999-04-04 08:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63058896000, #    utc_start 1999-04-04 08:00:00 (Sun)
  63077036400, #      utc_end 1999-10-31 07:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63077036400, #    utc_start 1999-10-31 07:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108486000, #      utc_end 2000-10-29 07:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108486000, #    utc_start 2000-10-29 07:00:00 (Sun)
  63121795200, #      utc_end 2001-04-01 08:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63121795200, #    utc_start 2001-04-01 08:00:00 (Sun)
  63139935600, #      utc_end 2001-10-28 07:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63139935600, #    utc_start 2001-10-28 07:00:00 (Sun)
  63153849600, #      utc_end 2002-04-07 08:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63153849600, #    utc_start 2002-04-07 08:00:00 (Sun)
  63171385200, #      utc_end 2002-10-27 07:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63171385200, #    utc_start 2002-10-27 07:00:00 (Sun)
  63185299200, #      utc_end 2003-04-06 08:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63185299200, #    utc_start 2003-04-06 08:00:00 (Sun)
  63202834800, #      utc_end 2003-10-26 07:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63202834800, #    utc_start 2003-10-26 07:00:00 (Sun)
  63216748800, #      utc_end 2004-04-04 08:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63216748800, #    utc_start 2004-04-04 08:00:00 (Sun)
  63234889200, #      utc_end 2004-10-31 07:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63234889200, #    utc_start 2004-10-31 07:00:00 (Sun)
  63248198400, #      utc_end 2005-04-03 08:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63248198400, #    utc_start 2005-04-03 08:00:00 (Sun)
  63266338800, #      utc_end 2005-10-30 07:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63266338800, #    utc_start 2005-10-30 07:00:00 (Sun)
  63279648000, #      utc_end 2006-04-02 08:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63279648000, #    utc_start 2006-04-02 08:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63309283200, #      utc_end 2007-03-11 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63309283200, #    utc_start 2007-03-11 08:00:00 (Sun)
  63329842800, #      utc_end 2007-11-04 07:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329842800, #    utc_start 2007-11-04 07:00:00 (Sun)
  63340732800, #      utc_end 2008-03-09 08:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63340732800, #    utc_start 2008-03-09 08:00:00 (Sun)
  63361292400, #      utc_end 2008-11-02 07:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63361292400, #    utc_start 2008-11-02 07:00:00 (Sun)
  63372182400, #      utc_end 2009-03-08 08:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63372182400, #    utc_start 2009-03-08 08:00:00 (Sun)
  63392742000, #      utc_end 2009-11-01 07:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63392742000, #    utc_start 2009-11-01 07:00:00 (Sun)
  63404236800, #      utc_end 2010-03-14 08:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63404236800, #    utc_start 2010-03-14 08:00:00 (Sun)
  63424796400, #      utc_end 2010-11-07 07:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424796400, #    utc_start 2010-11-07 07:00:00 (Sun)
  63435686400, #      utc_end 2011-03-13 08:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63435686400, #    utc_start 2011-03-13 08:00:00 (Sun)
  63456246000, #      utc_end 2011-11-06 07:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63456246000, #    utc_start 2011-11-06 07:00:00 (Sun)
  63467136000, #      utc_end 2012-03-11 08:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63467136000, #    utc_start 2012-03-11 08:00:00 (Sun)
  63487695600, #      utc_end 2012-11-04 07:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487695600, #    utc_start 2012-11-04 07:00:00 (Sun)
  63498585600, #      utc_end 2013-03-10 08:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63498585600, #    utc_start 2013-03-10 08:00:00 (Sun)
  63519145200, #      utc_end 2013-11-03 07:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63519145200, #    utc_start 2013-11-03 07:00:00 (Sun)
  63530035200, #      utc_end 2014-03-09 08:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63530035200, #    utc_start 2014-03-09 08:00:00 (Sun)
  63550594800, #      utc_end 2014-11-02 07:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63550594800, #    utc_start 2014-11-02 07:00:00 (Sun)
  63561484800, #      utc_end 2015-03-08 08:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63561484800, #    utc_start 2015-03-08 08:00:00 (Sun)
  63582044400, #      utc_end 2015-11-01 07:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63582044400, #    utc_start 2015-11-01 07:00:00 (Sun)
  63593539200, #      utc_end 2016-03-13 08:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63593539200, #    utc_start 2016-03-13 08:00:00 (Sun)
  63614098800, #      utc_end 2016-11-06 07:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63614098800, #    utc_start 2016-11-06 07:00:00 (Sun)
  63624988800, #      utc_end 2017-03-12 08:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63624988800, #    utc_start 2017-03-12 08:00:00 (Sun)
  63645548400, #      utc_end 2017-11-05 07:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63645548400, #    utc_start 2017-11-05 07:00:00 (Sun)
  63656438400, #      utc_end 2018-03-11 08:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63656438400, #    utc_start 2018-03-11 08:00:00 (Sun)
  63676998000, #      utc_end 2018-11-04 07:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676998000, #    utc_start 2018-11-04 07:00:00 (Sun)
  63687888000, #      utc_end 2019-03-10 08:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63687888000, #    utc_start 2019-03-10 08:00:00 (Sun)
  63708447600, #      utc_end 2019-11-03 07:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63708447600, #    utc_start 2019-11-03 07:00:00 (Sun)
  63719337600, #      utc_end 2020-03-08 08:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63719337600, #    utc_start 2020-03-08 08:00:00 (Sun)
  63739897200, #      utc_end 2020-11-01 07:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739897200, #    utc_start 2020-11-01 07:00:00 (Sun)
  63751392000, #      utc_end 2021-03-14 08:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63751392000, #    utc_start 2021-03-14 08:00:00 (Sun)
  63771951600, #      utc_end 2021-11-07 07:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771951600, #    utc_start 2021-11-07 07:00:00 (Sun)
  63782841600, #      utc_end 2022-03-13 08:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63782841600, #    utc_start 2022-03-13 08:00:00 (Sun)
  63803401200, #      utc_end 2022-11-06 07:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63803401200, #    utc_start 2022-11-06 07:00:00 (Sun)
  63814291200, #      utc_end 2023-03-12 08:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63814291200, #    utc_start 2023-03-12 08:00:00 (Sun)
  63834850800, #      utc_end 2023-11-05 07:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834850800, #    utc_start 2023-11-05 07:00:00 (Sun)
  63845740800, #      utc_end 2024-03-10 08:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63845740800, #    utc_start 2024-03-10 08:00:00 (Sun)
  63866300400, #      utc_end 2024-11-03 07:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63866300400, #    utc_start 2024-11-03 07:00:00 (Sun)
  63877190400, #      utc_end 2025-03-09 08:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63877190400, #    utc_start 2025-03-09 08:00:00 (Sun)
  63897750000, #      utc_end 2025-11-02 07:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897750000, #    utc_start 2025-11-02 07:00:00 (Sun)
  63908640000, #      utc_end 2026-03-08 08:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63908640000, #    utc_start 2026-03-08 08:00:00 (Sun)
  63929199600, #      utc_end 2026-11-01 07:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63929199600, #    utc_start 2026-11-01 07:00:00 (Sun)
  63940694400, #      utc_end 2027-03-14 08:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63940694400, #    utc_start 2027-03-14 08:00:00 (Sun)
  63961254000, #      utc_end 2027-11-07 07:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {107}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 718067,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 718067,
      'utc_rd_secs' => 0,
      'utc_year' => 1968
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 718067,
      'local_rd_secs' => 21600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 718067,
      'utc_rd_secs' => 21600,
      'utc_year' => 1968
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_CHICAGO

    $main::fatpacked{"DateTime/TimeZone/America/Chihuahua.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_CHIHUAHUA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Chihuahua;
  $DateTime::TimeZone::America::Chihuahua::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Chihuahua::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60620943600, #      utc_end 1922-01-01 07:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60620918140, #    local_end 1921-12-31 23:55:40 (Sat)
  -25460,
  0,
  'LMT',
      ],
      [
  60620943600, #    utc_start 1922-01-01 07:00:00 (Sun)
  60792616800, #      utc_end 1927-06-11 06:00:00 (Sat)
  60620918400, #  local_start 1922-01-01 00:00:00 (Sun)
  60792591600, #    local_end 1927-06-10 23:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60792616800, #    utc_start 1927-06-11 06:00:00 (Sat)
  60900876000, #      utc_end 1930-11-15 06:00:00 (Sat)
  60792595200, #  local_start 1927-06-11 00:00:00 (Sat)
  60900854400, #    local_end 1930-11-15 00:00:00 (Sat)
  -21600,
  0,
  'CST',
      ],
      [
  60900876000, #    utc_start 1930-11-15 06:00:00 (Sat)
  60915391200, #      utc_end 1931-05-02 06:00:00 (Sat)
  60900850800, #  local_start 1930-11-14 23:00:00 (Fri)
  60915366000, #    local_end 1931-05-01 23:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60915391200, #    utc_start 1931-05-02 06:00:00 (Sat)
  60928524000, #      utc_end 1931-10-01 06:00:00 (Thu)
  60915369600, #  local_start 1931-05-02 00:00:00 (Sat)
  60928502400, #    local_end 1931-10-01 00:00:00 (Thu)
  -21600,
  0,
  'CST',
      ],
      [
  60928524000, #    utc_start 1931-10-01 06:00:00 (Thu)
  60944338800, #      utc_end 1932-04-01 07:00:00 (Fri)
  60928498800, #  local_start 1931-09-30 23:00:00 (Wed)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60944338800, #    utc_start 1932-04-01 07:00:00 (Fri)
  62956159200, #      utc_end 1996-01-01 06:00:00 (Mon)
  60944317200, #  local_start 1932-04-01 01:00:00 (Fri)
  62956137600, #    local_end 1996-01-01 00:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  62956159200, #    utc_start 1996-01-01 06:00:00 (Mon)
  62964547200, #      utc_end 1996-04-07 08:00:00 (Sun)
  62956137600, #  local_start 1996-01-01 00:00:00 (Mon)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62964547200, #    utc_start 1996-04-07 08:00:00 (Sun)
  62982082800, #      utc_end 1996-10-27 07:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62982082800, #    utc_start 1996-10-27 07:00:00 (Sun)
  62995996800, #      utc_end 1997-04-06 08:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62995996800, #    utc_start 1997-04-06 08:00:00 (Sun)
  63013532400, #      utc_end 1997-10-26 07:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63013532400, #    utc_start 1997-10-26 07:00:00 (Sun)
  63019317600, #      utc_end 1998-01-01 06:00:00 (Thu)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63019296000, #    local_end 1998-01-01 00:00:00 (Thu)
  -21600,
  0,
  'CST',
      ],
      [
  63019317600, #    utc_start 1998-01-01 06:00:00 (Thu)
  63027450000, #      utc_end 1998-04-05 09:00:00 (Sun)
  63019296000, #  local_start 1998-01-01 00:00:00 (Thu)
  63027428400, #    local_end 1998-04-05 03:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63027450000, #    utc_start 1998-04-05 09:00:00 (Sun)
  63044985600, #      utc_end 1998-10-25 08:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63044985600, #    utc_start 1998-10-25 08:00:00 (Sun)
  63058899600, #      utc_end 1999-04-04 09:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63058899600, #    utc_start 1999-04-04 09:00:00 (Sun)
  63077040000, #      utc_end 1999-10-31 08:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63077040000, #    utc_start 1999-10-31 08:00:00 (Sun)
  63090349200, #      utc_end 2000-04-02 09:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63090349200, #    utc_start 2000-04-02 09:00:00 (Sun)
  63108489600, #      utc_end 2000-10-29 08:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63108489600, #    utc_start 2000-10-29 08:00:00 (Sun)
  63124822800, #      utc_end 2001-05-06 09:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63124797600, #    local_end 2001-05-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63124822800, #    utc_start 2001-05-06 09:00:00 (Sun)
  63137520000, #      utc_end 2001-09-30 08:00:00 (Sun)
  63124801200, #  local_start 2001-05-06 03:00:00 (Sun)
  63137498400, #    local_end 2001-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63137520000, #    utc_start 2001-09-30 08:00:00 (Sun)
  63153853200, #      utc_end 2002-04-07 09:00:00 (Sun)
  63137494800, #  local_start 2001-09-30 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63153853200, #    utc_start 2002-04-07 09:00:00 (Sun)
  63171388800, #      utc_end 2002-10-27 08:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63171388800, #    utc_start 2002-10-27 08:00:00 (Sun)
  63185302800, #      utc_end 2003-04-06 09:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63185302800, #    utc_start 2003-04-06 09:00:00 (Sun)
  63202838400, #      utc_end 2003-10-26 08:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63202838400, #    utc_start 2003-10-26 08:00:00 (Sun)
  63216752400, #      utc_end 2004-04-04 09:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63216752400, #    utc_start 2004-04-04 09:00:00 (Sun)
  63234892800, #      utc_end 2004-10-31 08:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63234892800, #    utc_start 2004-10-31 08:00:00 (Sun)
  63248202000, #      utc_end 2005-04-03 09:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63248202000, #    utc_start 2005-04-03 09:00:00 (Sun)
  63266342400, #      utc_end 2005-10-30 08:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63266342400, #    utc_start 2005-10-30 08:00:00 (Sun)
  63279651600, #      utc_end 2006-04-02 09:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63279651600, #    utc_start 2006-04-02 09:00:00 (Sun)
  63297792000, #      utc_end 2006-10-29 08:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63297792000, #    utc_start 2006-10-29 08:00:00 (Sun)
  63311101200, #      utc_end 2007-04-01 09:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63311076000, #    local_end 2007-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63311101200, #    utc_start 2007-04-01 09:00:00 (Sun)
  63329241600, #      utc_end 2007-10-28 08:00:00 (Sun)
  63311079600, #  local_start 2007-04-01 03:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63329241600, #    utc_start 2007-10-28 08:00:00 (Sun)
  63343155600, #      utc_end 2008-04-06 09:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63343130400, #    local_end 2008-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63343155600, #    utc_start 2008-04-06 09:00:00 (Sun)
  63360691200, #      utc_end 2008-10-26 08:00:00 (Sun)
  63343134000, #  local_start 2008-04-06 03:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63360691200, #    utc_start 2008-10-26 08:00:00 (Sun)
  63374605200, #      utc_end 2009-04-05 09:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63374580000, #    local_end 2009-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63374605200, #    utc_start 2009-04-05 09:00:00 (Sun)
  63392140800, #      utc_end 2009-10-25 08:00:00 (Sun)
  63374583600, #  local_start 2009-04-05 03:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63392140800, #    utc_start 2009-10-25 08:00:00 (Sun)
  63406054800, #      utc_end 2010-04-04 09:00:00 (Sun)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63406029600, #    local_end 2010-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63406054800, #    utc_start 2010-04-04 09:00:00 (Sun)
  63424195200, #      utc_end 2010-10-31 08:00:00 (Sun)
  63406033200, #  local_start 2010-04-04 03:00:00 (Sun)
  63424173600, #    local_end 2010-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63424195200, #    utc_start 2010-10-31 08:00:00 (Sun)
  63437504400, #      utc_end 2011-04-03 09:00:00 (Sun)
  63424170000, #  local_start 2010-10-31 01:00:00 (Sun)
  63437479200, #    local_end 2011-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63437504400, #    utc_start 2011-04-03 09:00:00 (Sun)
  63455644800, #      utc_end 2011-10-30 08:00:00 (Sun)
  63437482800, #  local_start 2011-04-03 03:00:00 (Sun)
  63455623200, #    local_end 2011-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63455644800, #    utc_start 2011-10-30 08:00:00 (Sun)
  63468954000, #      utc_end 2012-04-01 09:00:00 (Sun)
  63455619600, #  local_start 2011-10-30 01:00:00 (Sun)
  63468928800, #    local_end 2012-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63468954000, #    utc_start 2012-04-01 09:00:00 (Sun)
  63487094400, #      utc_end 2012-10-28 08:00:00 (Sun)
  63468932400, #  local_start 2012-04-01 03:00:00 (Sun)
  63487072800, #    local_end 2012-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63487094400, #    utc_start 2012-10-28 08:00:00 (Sun)
  63501008400, #      utc_end 2013-04-07 09:00:00 (Sun)
  63487069200, #  local_start 2012-10-28 01:00:00 (Sun)
  63500983200, #    local_end 2013-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63501008400, #    utc_start 2013-04-07 09:00:00 (Sun)
  63518544000, #      utc_end 2013-10-27 08:00:00 (Sun)
  63500986800, #  local_start 2013-04-07 03:00:00 (Sun)
  63518522400, #    local_end 2013-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63518544000, #    utc_start 2013-10-27 08:00:00 (Sun)
  63532458000, #      utc_end 2014-04-06 09:00:00 (Sun)
  63518518800, #  local_start 2013-10-27 01:00:00 (Sun)
  63532432800, #    local_end 2014-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63532458000, #    utc_start 2014-04-06 09:00:00 (Sun)
  63549993600, #      utc_end 2014-10-26 08:00:00 (Sun)
  63532436400, #  local_start 2014-04-06 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63549993600, #    utc_start 2014-10-26 08:00:00 (Sun)
  63563907600, #      utc_end 2015-04-05 09:00:00 (Sun)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63563882400, #    local_end 2015-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63563907600, #    utc_start 2015-04-05 09:00:00 (Sun)
  63581443200, #      utc_end 2015-10-25 08:00:00 (Sun)
  63563886000, #  local_start 2015-04-05 03:00:00 (Sun)
  63581421600, #    local_end 2015-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63581443200, #    utc_start 2015-10-25 08:00:00 (Sun)
  63595357200, #      utc_end 2016-04-03 09:00:00 (Sun)
  63581418000, #  local_start 2015-10-25 01:00:00 (Sun)
  63595332000, #    local_end 2016-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63595357200, #    utc_start 2016-04-03 09:00:00 (Sun)
  63613497600, #      utc_end 2016-10-30 08:00:00 (Sun)
  63595335600, #  local_start 2016-04-03 03:00:00 (Sun)
  63613476000, #    local_end 2016-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63613497600, #    utc_start 2016-10-30 08:00:00 (Sun)
  63626806800, #      utc_end 2017-04-02 09:00:00 (Sun)
  63613472400, #  local_start 2016-10-30 01:00:00 (Sun)
  63626781600, #    local_end 2017-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63626806800, #    utc_start 2017-04-02 09:00:00 (Sun)
  63644947200, #      utc_end 2017-10-29 08:00:00 (Sun)
  63626785200, #  local_start 2017-04-02 03:00:00 (Sun)
  63644925600, #    local_end 2017-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63644947200, #    utc_start 2017-10-29 08:00:00 (Sun)
  63658256400, #      utc_end 2018-04-01 09:00:00 (Sun)
  63644922000, #  local_start 2017-10-29 01:00:00 (Sun)
  63658231200, #    local_end 2018-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63658256400, #    utc_start 2018-04-01 09:00:00 (Sun)
  63676396800, #      utc_end 2018-10-28 08:00:00 (Sun)
  63658234800, #  local_start 2018-04-01 03:00:00 (Sun)
  63676375200, #    local_end 2018-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63676396800, #    utc_start 2018-10-28 08:00:00 (Sun)
  63690310800, #      utc_end 2019-04-07 09:00:00 (Sun)
  63676371600, #  local_start 2018-10-28 01:00:00 (Sun)
  63690285600, #    local_end 2019-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63690310800, #    utc_start 2019-04-07 09:00:00 (Sun)
  63707846400, #      utc_end 2019-10-27 08:00:00 (Sun)
  63690289200, #  local_start 2019-04-07 03:00:00 (Sun)
  63707824800, #    local_end 2019-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63707846400, #    utc_start 2019-10-27 08:00:00 (Sun)
  63721760400, #      utc_end 2020-04-05 09:00:00 (Sun)
  63707821200, #  local_start 2019-10-27 01:00:00 (Sun)
  63721735200, #    local_end 2020-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63721760400, #    utc_start 2020-04-05 09:00:00 (Sun)
  63739296000, #      utc_end 2020-10-25 08:00:00 (Sun)
  63721738800, #  local_start 2020-04-05 03:00:00 (Sun)
  63739274400, #    local_end 2020-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63739296000, #    utc_start 2020-10-25 08:00:00 (Sun)
  63753210000, #      utc_end 2021-04-04 09:00:00 (Sun)
  63739270800, #  local_start 2020-10-25 01:00:00 (Sun)
  63753184800, #    local_end 2021-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63753210000, #    utc_start 2021-04-04 09:00:00 (Sun)
  63771350400, #      utc_end 2021-10-31 08:00:00 (Sun)
  63753188400, #  local_start 2021-04-04 03:00:00 (Sun)
  63771328800, #    local_end 2021-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63771350400, #    utc_start 2021-10-31 08:00:00 (Sun)
  63784659600, #      utc_end 2022-04-03 09:00:00 (Sun)
  63771325200, #  local_start 2021-10-31 01:00:00 (Sun)
  63784634400, #    local_end 2022-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63784659600, #    utc_start 2022-04-03 09:00:00 (Sun)
  63802800000, #      utc_end 2022-10-30 08:00:00 (Sun)
  63784638000, #  local_start 2022-04-03 03:00:00 (Sun)
  63802778400, #    local_end 2022-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63802800000, #    utc_start 2022-10-30 08:00:00 (Sun)
  63816109200, #      utc_end 2023-04-02 09:00:00 (Sun)
  63802774800, #  local_start 2022-10-30 01:00:00 (Sun)
  63816084000, #    local_end 2023-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63816109200, #    utc_start 2023-04-02 09:00:00 (Sun)
  63834249600, #      utc_end 2023-10-29 08:00:00 (Sun)
  63816087600, #  local_start 2023-04-02 03:00:00 (Sun)
  63834228000, #    local_end 2023-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63834249600, #    utc_start 2023-10-29 08:00:00 (Sun)
  63848163600, #      utc_end 2024-04-07 09:00:00 (Sun)
  63834224400, #  local_start 2023-10-29 01:00:00 (Sun)
  63848138400, #    local_end 2024-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63848163600, #    utc_start 2024-04-07 09:00:00 (Sun)
  63865699200, #      utc_end 2024-10-27 08:00:00 (Sun)
  63848142000, #  local_start 2024-04-07 03:00:00 (Sun)
  63865677600, #    local_end 2024-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63865699200, #    utc_start 2024-10-27 08:00:00 (Sun)
  63879613200, #      utc_end 2025-04-06 09:00:00 (Sun)
  63865674000, #  local_start 2024-10-27 01:00:00 (Sun)
  63879588000, #    local_end 2025-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63879613200, #    utc_start 2025-04-06 09:00:00 (Sun)
  63897148800, #      utc_end 2025-10-26 08:00:00 (Sun)
  63879591600, #  local_start 2025-04-06 03:00:00 (Sun)
  63897127200, #    local_end 2025-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63897148800, #    utc_start 2025-10-26 08:00:00 (Sun)
  63911062800, #      utc_end 2026-04-05 09:00:00 (Sun)
  63897123600, #  local_start 2025-10-26 01:00:00 (Sun)
  63911037600, #    local_end 2026-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63911062800, #    utc_start 2026-04-05 09:00:00 (Sun)
  63928598400, #      utc_end 2026-10-25 08:00:00 (Sun)
  63911041200, #  local_start 2026-04-05 03:00:00 (Sun)
  63928576800, #    local_end 2026-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63928598400, #    utc_start 2026-10-25 08:00:00 (Sun)
  63942512400, #      utc_end 2027-04-04 09:00:00 (Sun)
  63928573200, #  local_start 2026-10-25 01:00:00 (Sun)
  63942487200, #    local_end 2027-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63942512400, #    utc_start 2027-04-04 09:00:00 (Sun)
  63960652800, #      utc_end 2027-10-31 08:00:00 (Sun)
  63942490800, #  local_start 2027-04-04 03:00:00 (Sun)
  63960631200, #    local_end 2027-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {32}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -25200 }
  
  my $last_observance = bless( {
    'format' => 'M%sT',
    'gmtoff' => '-7:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 729484,
      'local_rd_secs' => 10800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 729484,
      'utc_rd_secs' => 10800,
      'utc_year' => 1999
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -25200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 729484,
      'local_rd_secs' => 32400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 729484,
      'utc_rd_secs' => 32400,
      'utc_year' => 1999
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2002',
      'in' => 'Oct',
      'letter' => 'S',
      'name' => 'Mexico',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2002',
      'in' => 'Apr',
      'letter' => 'D',
      'name' => 'Mexico',
      'offset_from_std' => 3600,
      'on' => 'Sun>=1',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_CHIHUAHUA

    $main::fatpacked{"DateTime/TimeZone/America/Costa_Rica.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_COSTA_RICA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Costa_Rica;
  $DateTime::TimeZone::America::Costa_Rica::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Costa_Rica::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611181773, #      utc_end 1890-01-01 05:36:13 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -20173,
  0,
  'LMT',
      ],
      [
  59611181773, #    utc_start 1890-01-01 05:36:13 (Wed)
  60590612173, #      utc_end 1921-01-15 05:36:13 (Sat)
  59611161600, #  local_start 1890-01-01 00:00:00 (Wed)
  60590592000, #    local_end 1921-01-15 00:00:00 (Sat)
  -20173,
  0,
  'SJMT',
      ],
      [
  60590612173, #    utc_start 1921-01-15 05:36:13 (Sat)
  62424453600, #      utc_end 1979-02-25 06:00:00 (Sun)
  60590590573, #  local_start 1921-01-14 23:36:13 (Fri)
  62424432000, #    local_end 1979-02-25 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62424453600, #    utc_start 1979-02-25 06:00:00 (Sun)
  62432917200, #      utc_end 1979-06-03 05:00:00 (Sun)
  62424435600, #  local_start 1979-02-25 01:00:00 (Sun)
  62432899200, #    local_end 1979-06-03 00:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62432917200, #    utc_start 1979-06-03 05:00:00 (Sun)
  62455903200, #      utc_end 1980-02-24 06:00:00 (Sun)
  62432895600, #  local_start 1979-06-02 23:00:00 (Sat)
  62455881600, #    local_end 1980-02-24 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62455903200, #    utc_start 1980-02-24 06:00:00 (Sun)
  62464366800, #      utc_end 1980-06-01 05:00:00 (Sun)
  62455885200, #  local_start 1980-02-24 01:00:00 (Sun)
  62464348800, #    local_end 1980-06-01 00:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62464366800, #    utc_start 1980-06-01 05:00:00 (Sun)
  62799948000, #      utc_end 1991-01-19 06:00:00 (Sat)
  62464345200, #  local_start 1980-05-31 23:00:00 (Sat)
  62799926400, #    local_end 1991-01-19 00:00:00 (Sat)
  -21600,
  0,
  'CST',
      ],
      [
  62799948000, #    utc_start 1991-01-19 06:00:00 (Sat)
  62814027600, #      utc_end 1991-07-01 05:00:00 (Mon)
  62799930000, #  local_start 1991-01-19 01:00:00 (Sat)
  62814009600, #    local_end 1991-07-01 00:00:00 (Mon)
  -18000,
  1,
  'CDT',
      ],
      [
  62814027600, #    utc_start 1991-07-01 05:00:00 (Mon)
  62831397600, #      utc_end 1992-01-18 06:00:00 (Sat)
  62814006000, #  local_start 1991-06-30 23:00:00 (Sun)
  62831376000, #    local_end 1992-01-18 00:00:00 (Sat)
  -21600,
  0,
  'CST',
      ],
      [
  62831397600, #    utc_start 1992-01-18 06:00:00 (Sat)
  62836318800, #      utc_end 1992-03-15 05:00:00 (Sun)
  62831379600, #  local_start 1992-01-18 01:00:00 (Sat)
  62836300800, #    local_end 1992-03-15 00:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62836318800, #    utc_start 1992-03-15 05:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  62836297200, #  local_start 1992-03-14 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -21600,
  0,
  'CST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {4}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_COSTA_RICA

    $main::fatpacked{"DateTime/TimeZone/America/Creston.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_CRESTON';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Creston;
  $DateTime::TimeZone::America::Creston::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Creston::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59421800764, #      utc_end 1884-01-01 07:46:04 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59421772800, #    local_end 1884-01-01 00:00:00 (Tue)
  -27964,
  0,
  'LMT',
      ],
      [
  59421800764, #    utc_start 1884-01-01 07:46:04 (Tue)
  60455228400, #      utc_end 1916-10-01 07:00:00 (Sun)
  59421775564, #  local_start 1884-01-01 00:46:04 (Tue)
  60455203200, #    local_end 1916-10-01 00:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60455228400, #    utc_start 1916-10-01 07:00:00 (Sun)
  60507849600, #      utc_end 1918-06-02 08:00:00 (Sun)
  60455199600, #  local_start 1916-09-30 23:00:00 (Sat)
  60507820800, #    local_end 1918-06-02 00:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  60507849600, #    utc_start 1918-06-02 08:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  60507824400, #  local_start 1918-06-02 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -25200,
  0,
  'MST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_CRESTON

    $main::fatpacked{"DateTime/TimeZone/America/Cuiaba.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_CUIABA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Cuiaba;
  $DateTime::TimeZone::America::Cuiaba::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Cuiaba::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368471060, #      utc_end 1914-01-01 03:44:20 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  -13460,
  0,
  'LMT',
      ],
      [
  60368471060, #    utc_start 1914-01-01 03:44:20 (Thu)
  60928729200, #      utc_end 1931-10-03 15:00:00 (Sat)
  60368456660, #  local_start 1913-12-31 23:44:20 (Wed)
  60928714800, #    local_end 1931-10-03 11:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  60928729200, #    utc_start 1931-10-03 15:00:00 (Sat)
  60944324400, #      utc_end 1932-04-01 03:00:00 (Fri)
  60928718400, #  local_start 1931-10-03 12:00:00 (Sat)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -10800,
  1,
  'AMST',
      ],
      [
  60944324400, #    utc_start 1932-04-01 03:00:00 (Fri)
  60960312000, #      utc_end 1932-10-03 04:00:00 (Mon)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60960297600, #    local_end 1932-10-03 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  60960312000, #    utc_start 1932-10-03 04:00:00 (Mon)
  60975860400, #      utc_end 1933-04-01 03:00:00 (Sat)
  60960301200, #  local_start 1932-10-03 01:00:00 (Mon)
  60975849600, #    local_end 1933-04-01 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  60975860400, #    utc_start 1933-04-01 03:00:00 (Sat)
  61501867200, #      utc_end 1949-12-01 04:00:00 (Thu)
  60975846000, #  local_start 1933-03-31 23:00:00 (Fri)
  61501852800, #    local_end 1949-12-01 00:00:00 (Thu)
  -14400,
  0,
  'AMT',
      ],
      [
  61501867200, #    utc_start 1949-12-01 04:00:00 (Thu)
  61513617600, #      utc_end 1950-04-16 04:00:00 (Sun)
  61501856400, #  local_start 1949-12-01 01:00:00 (Thu)
  61513606800, #    local_end 1950-04-16 01:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61513617600, #    utc_start 1950-04-16 04:00:00 (Sun)
  61533403200, #      utc_end 1950-12-01 04:00:00 (Fri)
  61513603200, #  local_start 1950-04-16 00:00:00 (Sun)
  61533388800, #    local_end 1950-12-01 00:00:00 (Fri)
  -14400,
  0,
  'AMT',
      ],
      [
  61533403200, #    utc_start 1950-12-01 04:00:00 (Fri)
  61543854000, #      utc_end 1951-04-01 03:00:00 (Sun)
  61533392400, #  local_start 1950-12-01 01:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61543854000, #    utc_start 1951-04-01 03:00:00 (Sun)
  61564939200, #      utc_end 1951-12-01 04:00:00 (Sat)
  61543839600, #  local_start 1951-03-31 23:00:00 (Sat)
  61564924800, #    local_end 1951-12-01 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  61564939200, #    utc_start 1951-12-01 04:00:00 (Sat)
  61575476400, #      utc_end 1952-04-01 03:00:00 (Tue)
  61564928400, #  local_start 1951-12-01 01:00:00 (Sat)
  61575465600, #    local_end 1952-04-01 00:00:00 (Tue)
  -10800,
  1,
  'AMST',
      ],
      [
  61575476400, #    utc_start 1952-04-01 03:00:00 (Tue)
  61596561600, #      utc_end 1952-12-01 04:00:00 (Mon)
  61575462000, #  local_start 1952-03-31 23:00:00 (Mon)
  61596547200, #    local_end 1952-12-01 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  61596561600, #    utc_start 1952-12-01 04:00:00 (Mon)
  61604334000, #      utc_end 1953-03-01 03:00:00 (Sun)
  61596550800, #  local_start 1952-12-01 01:00:00 (Mon)
  61604323200, #    local_end 1953-03-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61604334000, #    utc_start 1953-03-01 03:00:00 (Sun)
  61944321600, #      utc_end 1963-12-09 04:00:00 (Mon)
  61604319600, #  local_start 1953-02-28 23:00:00 (Sat)
  61944307200, #    local_end 1963-12-09 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  61944321600, #    utc_start 1963-12-09 04:00:00 (Mon)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944310800, #  local_start 1963-12-09 01:00:00 (Mon)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61980523200, #      utc_end 1965-01-31 04:00:00 (Sun)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61980508800, #    local_end 1965-01-31 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  61980523200, #    utc_start 1965-01-31 04:00:00 (Sun)
  61985617200, #      utc_end 1965-03-31 03:00:00 (Wed)
  61980512400, #  local_start 1965-01-31 01:00:00 (Sun)
  61985606400, #    local_end 1965-03-31 00:00:00 (Wed)
  -10800,
  1,
  'AMST',
      ],
      [
  61985617200, #    utc_start 1965-03-31 03:00:00 (Wed)
  62006788800, #      utc_end 1965-12-01 04:00:00 (Wed)
  61985602800, #  local_start 1965-03-30 23:00:00 (Tue)
  62006774400, #    local_end 1965-12-01 00:00:00 (Wed)
  -14400,
  0,
  'AMT',
      ],
      [
  62006788800, #    utc_start 1965-12-01 04:00:00 (Wed)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62006778000, #  local_start 1965-12-01 01:00:00 (Wed)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'AMST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62035732800, #      utc_end 1966-11-01 04:00:00 (Tue)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62035718400, #    local_end 1966-11-01 00:00:00 (Tue)
  -14400,
  0,
  'AMT',
      ],
      [
  62035732800, #    utc_start 1966-11-01 04:00:00 (Tue)
  62046097200, #      utc_end 1967-03-01 03:00:00 (Wed)
  62035722000, #  local_start 1966-11-01 01:00:00 (Tue)
  62046086400, #    local_end 1967-03-01 00:00:00 (Wed)
  -10800,
  1,
  'AMST',
      ],
      [
  62046097200, #    utc_start 1967-03-01 03:00:00 (Wed)
  62067268800, #      utc_end 1967-11-01 04:00:00 (Wed)
  62046082800, #  local_start 1967-02-28 23:00:00 (Tue)
  62067254400, #    local_end 1967-11-01 00:00:00 (Wed)
  -14400,
  0,
  'AMT',
      ],
      [
  62067268800, #    utc_start 1967-11-01 04:00:00 (Wed)
  62077719600, #      utc_end 1968-03-01 03:00:00 (Fri)
  62067258000, #  local_start 1967-11-01 01:00:00 (Wed)
  62077708800, #    local_end 1968-03-01 00:00:00 (Fri)
  -10800,
  1,
  'AMST',
      ],
      [
  62077719600, #    utc_start 1968-03-01 03:00:00 (Fri)
  62635435200, #      utc_end 1985-11-02 04:00:00 (Sat)
  62077705200, #  local_start 1968-02-29 23:00:00 (Thu)
  62635420800, #    local_end 1985-11-02 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  62635435200, #    utc_start 1985-11-02 04:00:00 (Sat)
  62646922800, #      utc_end 1986-03-15 03:00:00 (Sat)
  62635424400, #  local_start 1985-11-02 01:00:00 (Sat)
  62646912000, #    local_end 1986-03-15 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  62646922800, #    utc_start 1986-03-15 03:00:00 (Sat)
  62666280000, #      utc_end 1986-10-25 04:00:00 (Sat)
  62646908400, #  local_start 1986-03-14 23:00:00 (Fri)
  62666265600, #    local_end 1986-10-25 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  62666280000, #    utc_start 1986-10-25 04:00:00 (Sat)
  62675953200, #      utc_end 1987-02-14 03:00:00 (Sat)
  62666269200, #  local_start 1986-10-25 01:00:00 (Sat)
  62675942400, #    local_end 1987-02-14 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  62675953200, #    utc_start 1987-02-14 03:00:00 (Sat)
  62697816000, #      utc_end 1987-10-25 04:00:00 (Sun)
  62675938800, #  local_start 1987-02-13 23:00:00 (Fri)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62697816000, #    utc_start 1987-10-25 04:00:00 (Sun)
  62706884400, #      utc_end 1988-02-07 03:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62706873600, #    local_end 1988-02-07 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62706884400, #    utc_start 1988-02-07 03:00:00 (Sun)
  62728660800, #      utc_end 1988-10-16 04:00:00 (Sun)
  62706870000, #  local_start 1988-02-06 23:00:00 (Sat)
  62728646400, #    local_end 1988-10-16 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62728660800, #    utc_start 1988-10-16 04:00:00 (Sun)
  62737729200, #      utc_end 1989-01-29 03:00:00 (Sun)
  62728650000, #  local_start 1988-10-16 01:00:00 (Sun)
  62737718400, #    local_end 1989-01-29 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62737729200, #    utc_start 1989-01-29 03:00:00 (Sun)
  62760110400, #      utc_end 1989-10-15 04:00:00 (Sun)
  62737714800, #  local_start 1989-01-28 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62760110400, #    utc_start 1989-10-15 04:00:00 (Sun)
  62770388400, #      utc_end 1990-02-11 03:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62770377600, #    local_end 1990-02-11 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62770388400, #    utc_start 1990-02-11 03:00:00 (Sun)
  62792164800, #      utc_end 1990-10-21 04:00:00 (Sun)
  62770374000, #  local_start 1990-02-10 23:00:00 (Sat)
  62792150400, #    local_end 1990-10-21 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62792164800, #    utc_start 1990-10-21 04:00:00 (Sun)
  62802442800, #      utc_end 1991-02-17 03:00:00 (Sun)
  62792154000, #  local_start 1990-10-21 01:00:00 (Sun)
  62802432000, #    local_end 1991-02-17 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62802442800, #    utc_start 1991-02-17 03:00:00 (Sun)
  62823614400, #      utc_end 1991-10-20 04:00:00 (Sun)
  62802428400, #  local_start 1991-02-16 23:00:00 (Sat)
  62823600000, #    local_end 1991-10-20 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62823614400, #    utc_start 1991-10-20 04:00:00 (Sun)
  62833287600, #      utc_end 1992-02-09 03:00:00 (Sun)
  62823603600, #  local_start 1991-10-20 01:00:00 (Sun)
  62833276800, #    local_end 1992-02-09 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62833287600, #    utc_start 1992-02-09 03:00:00 (Sun)
  62855668800, #      utc_end 1992-10-25 04:00:00 (Sun)
  62833273200, #  local_start 1992-02-08 23:00:00 (Sat)
  62855654400, #    local_end 1992-10-25 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62855668800, #    utc_start 1992-10-25 04:00:00 (Sun)
  62864132400, #      utc_end 1993-01-31 03:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62864121600, #    local_end 1993-01-31 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62864132400, #    utc_start 1993-01-31 03:00:00 (Sun)
  62886513600, #      utc_end 1993-10-17 04:00:00 (Sun)
  62864118000, #  local_start 1993-01-30 23:00:00 (Sat)
  62886499200, #    local_end 1993-10-17 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62886513600, #    utc_start 1993-10-17 04:00:00 (Sun)
  62897396400, #      utc_end 1994-02-20 03:00:00 (Sun)
  62886502800, #  local_start 1993-10-17 01:00:00 (Sun)
  62897385600, #    local_end 1994-02-20 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62897396400, #    utc_start 1994-02-20 03:00:00 (Sun)
  62917963200, #      utc_end 1994-10-16 04:00:00 (Sun)
  62897382000, #  local_start 1994-02-19 23:00:00 (Sat)
  62917948800, #    local_end 1994-10-16 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62917963200, #    utc_start 1994-10-16 04:00:00 (Sun)
  62928846000, #      utc_end 1995-02-19 03:00:00 (Sun)
  62917952400, #  local_start 1994-10-16 01:00:00 (Sun)
  62928835200, #    local_end 1995-02-19 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62928846000, #    utc_start 1995-02-19 03:00:00 (Sun)
  62949412800, #      utc_end 1995-10-15 04:00:00 (Sun)
  62928831600, #  local_start 1995-02-18 23:00:00 (Sat)
  62949398400, #    local_end 1995-10-15 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62949412800, #    utc_start 1995-10-15 04:00:00 (Sun)
  62959690800, #      utc_end 1996-02-11 03:00:00 (Sun)
  62949402000, #  local_start 1995-10-15 01:00:00 (Sun)
  62959680000, #    local_end 1996-02-11 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62959690800, #    utc_start 1996-02-11 03:00:00 (Sun)
  62980257600, #      utc_end 1996-10-06 04:00:00 (Sun)
  62959676400, #  local_start 1996-02-10 23:00:00 (Sat)
  62980243200, #    local_end 1996-10-06 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62980257600, #    utc_start 1996-10-06 04:00:00 (Sun)
  62991745200, #      utc_end 1997-02-16 03:00:00 (Sun)
  62980246800, #  local_start 1996-10-06 01:00:00 (Sun)
  62991734400, #    local_end 1997-02-16 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62991745200, #    utc_start 1997-02-16 03:00:00 (Sun)
  63011793600, #      utc_end 1997-10-06 04:00:00 (Mon)
  62991730800, #  local_start 1997-02-15 23:00:00 (Sat)
  63011779200, #    local_end 1997-10-06 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  63011793600, #    utc_start 1997-10-06 04:00:00 (Mon)
  63024404400, #      utc_end 1998-03-01 03:00:00 (Sun)
  63011782800, #  local_start 1997-10-06 01:00:00 (Mon)
  63024393600, #    local_end 1998-03-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63024404400, #    utc_start 1998-03-01 03:00:00 (Sun)
  63043761600, #      utc_end 1998-10-11 04:00:00 (Sun)
  63024390000, #  local_start 1998-02-28 23:00:00 (Sat)
  63043747200, #    local_end 1998-10-11 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63043761600, #    utc_start 1998-10-11 04:00:00 (Sun)
  63055249200, #      utc_end 1999-02-21 03:00:00 (Sun)
  63043750800, #  local_start 1998-10-11 01:00:00 (Sun)
  63055238400, #    local_end 1999-02-21 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63055249200, #    utc_start 1999-02-21 03:00:00 (Sun)
  63074606400, #      utc_end 1999-10-03 04:00:00 (Sun)
  63055234800, #  local_start 1999-02-20 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63074606400, #    utc_start 1999-10-03 04:00:00 (Sun)
  63087303600, #      utc_end 2000-02-27 03:00:00 (Sun)
  63074595600, #  local_start 1999-10-03 01:00:00 (Sun)
  63087292800, #    local_end 2000-02-27 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63087303600, #    utc_start 2000-02-27 03:00:00 (Sun)
  63106660800, #      utc_end 2000-10-08 04:00:00 (Sun)
  63087289200, #  local_start 2000-02-26 23:00:00 (Sat)
  63106646400, #    local_end 2000-10-08 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63106660800, #    utc_start 2000-10-08 04:00:00 (Sun)
  63118148400, #      utc_end 2001-02-18 03:00:00 (Sun)
  63106650000, #  local_start 2000-10-08 01:00:00 (Sun)
  63118137600, #    local_end 2001-02-18 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63118148400, #    utc_start 2001-02-18 03:00:00 (Sun)
  63138715200, #      utc_end 2001-10-14 04:00:00 (Sun)
  63118134000, #  local_start 2001-02-17 23:00:00 (Sat)
  63138700800, #    local_end 2001-10-14 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63138715200, #    utc_start 2001-10-14 04:00:00 (Sun)
  63149598000, #      utc_end 2002-02-17 03:00:00 (Sun)
  63138704400, #  local_start 2001-10-14 01:00:00 (Sun)
  63149587200, #    local_end 2002-02-17 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63149598000, #    utc_start 2002-02-17 03:00:00 (Sun)
  63171979200, #      utc_end 2002-11-03 04:00:00 (Sun)
  63149583600, #  local_start 2002-02-16 23:00:00 (Sat)
  63171964800, #    local_end 2002-11-03 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63171979200, #    utc_start 2002-11-03 04:00:00 (Sun)
  63181047600, #      utc_end 2003-02-16 03:00:00 (Sun)
  63171968400, #  local_start 2002-11-03 01:00:00 (Sun)
  63181036800, #    local_end 2003-02-16 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63181047600, #    utc_start 2003-02-16 03:00:00 (Sun)
  63200059200, #      utc_end 2003-09-24 04:00:00 (Wed)
  63181033200, #  local_start 2003-02-15 23:00:00 (Sat)
  63200044800, #    local_end 2003-09-24 00:00:00 (Wed)
  -14400,
  0,
  'AMT',
      ],
      [
  63200059200, #    utc_start 2003-09-24 04:00:00 (Wed)
  63232286400, #      utc_end 2004-10-01 04:00:00 (Fri)
  63200044800, #  local_start 2003-09-24 00:00:00 (Wed)
  63232272000, #    local_end 2004-10-01 00:00:00 (Fri)
  -14400,
  0,
  'AMT',
      ],
      [
  63232286400, #    utc_start 2004-10-01 04:00:00 (Fri)
  63235051200, #      utc_end 2004-11-02 04:00:00 (Tue)
  63232272000, #  local_start 2004-10-01 00:00:00 (Fri)
  63235036800, #    local_end 2004-11-02 00:00:00 (Tue)
  -14400,
  0,
  'AMT',
      ],
      [
  63235051200, #    utc_start 2004-11-02 04:00:00 (Tue)
  63244551600, #      utc_end 2005-02-20 03:00:00 (Sun)
  63235040400, #  local_start 2004-11-02 01:00:00 (Tue)
  63244540800, #    local_end 2005-02-20 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63244551600, #    utc_start 2005-02-20 03:00:00 (Sun)
  63265118400, #      utc_end 2005-10-16 04:00:00 (Sun)
  63244537200, #  local_start 2005-02-19 23:00:00 (Sat)
  63265104000, #    local_end 2005-10-16 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63265118400, #    utc_start 2005-10-16 04:00:00 (Sun)
  63276001200, #      utc_end 2006-02-19 03:00:00 (Sun)
  63265107600, #  local_start 2005-10-16 01:00:00 (Sun)
  63275990400, #    local_end 2006-02-19 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63276001200, #    utc_start 2006-02-19 03:00:00 (Sun)
  63298382400, #      utc_end 2006-11-05 04:00:00 (Sun)
  63275986800, #  local_start 2006-02-18 23:00:00 (Sat)
  63298368000, #    local_end 2006-11-05 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63298382400, #    utc_start 2006-11-05 04:00:00 (Sun)
  63308055600, #      utc_end 2007-02-25 03:00:00 (Sun)
  63298371600, #  local_start 2006-11-05 01:00:00 (Sun)
  63308044800, #    local_end 2007-02-25 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63308055600, #    utc_start 2007-02-25 03:00:00 (Sun)
  63328017600, #      utc_end 2007-10-14 04:00:00 (Sun)
  63308041200, #  local_start 2007-02-24 23:00:00 (Sat)
  63328003200, #    local_end 2007-10-14 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63328017600, #    utc_start 2007-10-14 04:00:00 (Sun)
  63338900400, #      utc_end 2008-02-17 03:00:00 (Sun)
  63328006800, #  local_start 2007-10-14 01:00:00 (Sun)
  63338889600, #    local_end 2008-02-17 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63338900400, #    utc_start 2008-02-17 03:00:00 (Sun)
  63360072000, #      utc_end 2008-10-19 04:00:00 (Sun)
  63338886000, #  local_start 2008-02-16 23:00:00 (Sat)
  63360057600, #    local_end 2008-10-19 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63360072000, #    utc_start 2008-10-19 04:00:00 (Sun)
  63370350000, #      utc_end 2009-02-15 03:00:00 (Sun)
  63360061200, #  local_start 2008-10-19 01:00:00 (Sun)
  63370339200, #    local_end 2009-02-15 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63370350000, #    utc_start 2009-02-15 03:00:00 (Sun)
  63391521600, #      utc_end 2009-10-18 04:00:00 (Sun)
  63370335600, #  local_start 2009-02-14 23:00:00 (Sat)
  63391507200, #    local_end 2009-10-18 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63391521600, #    utc_start 2009-10-18 04:00:00 (Sun)
  63402404400, #      utc_end 2010-02-21 03:00:00 (Sun)
  63391510800, #  local_start 2009-10-18 01:00:00 (Sun)
  63402393600, #    local_end 2010-02-21 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63402404400, #    utc_start 2010-02-21 03:00:00 (Sun)
  63422971200, #      utc_end 2010-10-17 04:00:00 (Sun)
  63402390000, #  local_start 2010-02-20 23:00:00 (Sat)
  63422956800, #    local_end 2010-10-17 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63422971200, #    utc_start 2010-10-17 04:00:00 (Sun)
  63433854000, #      utc_end 2011-02-20 03:00:00 (Sun)
  63422960400, #  local_start 2010-10-17 01:00:00 (Sun)
  63433843200, #    local_end 2011-02-20 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63433854000, #    utc_start 2011-02-20 03:00:00 (Sun)
  63454420800, #      utc_end 2011-10-16 04:00:00 (Sun)
  63433839600, #  local_start 2011-02-19 23:00:00 (Sat)
  63454406400, #    local_end 2011-10-16 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63454420800, #    utc_start 2011-10-16 04:00:00 (Sun)
  63465908400, #      utc_end 2012-02-26 03:00:00 (Sun)
  63454410000, #  local_start 2011-10-16 01:00:00 (Sun)
  63465897600, #    local_end 2012-02-26 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63465908400, #    utc_start 2012-02-26 03:00:00 (Sun)
  63486475200, #      utc_end 2012-10-21 04:00:00 (Sun)
  63465894000, #  local_start 2012-02-25 23:00:00 (Sat)
  63486460800, #    local_end 2012-10-21 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63486475200, #    utc_start 2012-10-21 04:00:00 (Sun)
  63496753200, #      utc_end 2013-02-17 03:00:00 (Sun)
  63486464400, #  local_start 2012-10-21 01:00:00 (Sun)
  63496742400, #    local_end 2013-02-17 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63496753200, #    utc_start 2013-02-17 03:00:00 (Sun)
  63517924800, #      utc_end 2013-10-20 04:00:00 (Sun)
  63496738800, #  local_start 2013-02-16 23:00:00 (Sat)
  63517910400, #    local_end 2013-10-20 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63517924800, #    utc_start 2013-10-20 04:00:00 (Sun)
  63528202800, #      utc_end 2014-02-16 03:00:00 (Sun)
  63517914000, #  local_start 2013-10-20 01:00:00 (Sun)
  63528192000, #    local_end 2014-02-16 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63528202800, #    utc_start 2014-02-16 03:00:00 (Sun)
  63549374400, #      utc_end 2014-10-19 04:00:00 (Sun)
  63528188400, #  local_start 2014-02-15 23:00:00 (Sat)
  63549360000, #    local_end 2014-10-19 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63549374400, #    utc_start 2014-10-19 04:00:00 (Sun)
  63560257200, #      utc_end 2015-02-22 03:00:00 (Sun)
  63549363600, #  local_start 2014-10-19 01:00:00 (Sun)
  63560246400, #    local_end 2015-02-22 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63560257200, #    utc_start 2015-02-22 03:00:00 (Sun)
  63580824000, #      utc_end 2015-10-18 04:00:00 (Sun)
  63560242800, #  local_start 2015-02-21 23:00:00 (Sat)
  63580809600, #    local_end 2015-10-18 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63580824000, #    utc_start 2015-10-18 04:00:00 (Sun)
  63591706800, #      utc_end 2016-02-21 03:00:00 (Sun)
  63580813200, #  local_start 2015-10-18 01:00:00 (Sun)
  63591696000, #    local_end 2016-02-21 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63591706800, #    utc_start 2016-02-21 03:00:00 (Sun)
  63612273600, #      utc_end 2016-10-16 04:00:00 (Sun)
  63591692400, #  local_start 2016-02-20 23:00:00 (Sat)
  63612259200, #    local_end 2016-10-16 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63612273600, #    utc_start 2016-10-16 04:00:00 (Sun)
  63623156400, #      utc_end 2017-02-19 03:00:00 (Sun)
  63612262800, #  local_start 2016-10-16 01:00:00 (Sun)
  63623145600, #    local_end 2017-02-19 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63623156400, #    utc_start 2017-02-19 03:00:00 (Sun)
  63643723200, #      utc_end 2017-10-15 04:00:00 (Sun)
  63623142000, #  local_start 2017-02-18 23:00:00 (Sat)
  63643708800, #    local_end 2017-10-15 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63643723200, #    utc_start 2017-10-15 04:00:00 (Sun)
  63654606000, #      utc_end 2018-02-18 03:00:00 (Sun)
  63643712400, #  local_start 2017-10-15 01:00:00 (Sun)
  63654595200, #    local_end 2018-02-18 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63654606000, #    utc_start 2018-02-18 03:00:00 (Sun)
  63675777600, #      utc_end 2018-10-21 04:00:00 (Sun)
  63654591600, #  local_start 2018-02-17 23:00:00 (Sat)
  63675763200, #    local_end 2018-10-21 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63675777600, #    utc_start 2018-10-21 04:00:00 (Sun)
  63686055600, #      utc_end 2019-02-17 03:00:00 (Sun)
  63675766800, #  local_start 2018-10-21 01:00:00 (Sun)
  63686044800, #    local_end 2019-02-17 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63686055600, #    utc_start 2019-02-17 03:00:00 (Sun)
  63707227200, #      utc_end 2019-10-20 04:00:00 (Sun)
  63686041200, #  local_start 2019-02-16 23:00:00 (Sat)
  63707212800, #    local_end 2019-10-20 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63707227200, #    utc_start 2019-10-20 04:00:00 (Sun)
  63717505200, #      utc_end 2020-02-16 03:00:00 (Sun)
  63707216400, #  local_start 2019-10-20 01:00:00 (Sun)
  63717494400, #    local_end 2020-02-16 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63717505200, #    utc_start 2020-02-16 03:00:00 (Sun)
  63738676800, #      utc_end 2020-10-18 04:00:00 (Sun)
  63717490800, #  local_start 2020-02-15 23:00:00 (Sat)
  63738662400, #    local_end 2020-10-18 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63738676800, #    utc_start 2020-10-18 04:00:00 (Sun)
  63749559600, #      utc_end 2021-02-21 03:00:00 (Sun)
  63738666000, #  local_start 2020-10-18 01:00:00 (Sun)
  63749548800, #    local_end 2021-02-21 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63749559600, #    utc_start 2021-02-21 03:00:00 (Sun)
  63770126400, #      utc_end 2021-10-17 04:00:00 (Sun)
  63749545200, #  local_start 2021-02-20 23:00:00 (Sat)
  63770112000, #    local_end 2021-10-17 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63770126400, #    utc_start 2021-10-17 04:00:00 (Sun)
  63781009200, #      utc_end 2022-02-20 03:00:00 (Sun)
  63770115600, #  local_start 2021-10-17 01:00:00 (Sun)
  63780998400, #    local_end 2022-02-20 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63781009200, #    utc_start 2022-02-20 03:00:00 (Sun)
  63801576000, #      utc_end 2022-10-16 04:00:00 (Sun)
  63780994800, #  local_start 2022-02-19 23:00:00 (Sat)
  63801561600, #    local_end 2022-10-16 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63801576000, #    utc_start 2022-10-16 04:00:00 (Sun)
  63813063600, #      utc_end 2023-02-26 03:00:00 (Sun)
  63801565200, #  local_start 2022-10-16 01:00:00 (Sun)
  63813052800, #    local_end 2023-02-26 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63813063600, #    utc_start 2023-02-26 03:00:00 (Sun)
  63833025600, #      utc_end 2023-10-15 04:00:00 (Sun)
  63813049200, #  local_start 2023-02-25 23:00:00 (Sat)
  63833011200, #    local_end 2023-10-15 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63833025600, #    utc_start 2023-10-15 04:00:00 (Sun)
  63843908400, #      utc_end 2024-02-18 03:00:00 (Sun)
  63833014800, #  local_start 2023-10-15 01:00:00 (Sun)
  63843897600, #    local_end 2024-02-18 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63843908400, #    utc_start 2024-02-18 03:00:00 (Sun)
  63865080000, #      utc_end 2024-10-20 04:00:00 (Sun)
  63843894000, #  local_start 2024-02-17 23:00:00 (Sat)
  63865065600, #    local_end 2024-10-20 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63865080000, #    utc_start 2024-10-20 04:00:00 (Sun)
  63875358000, #      utc_end 2025-02-16 03:00:00 (Sun)
  63865069200, #  local_start 2024-10-20 01:00:00 (Sun)
  63875347200, #    local_end 2025-02-16 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63875358000, #    utc_start 2025-02-16 03:00:00 (Sun)
  63896529600, #      utc_end 2025-10-19 04:00:00 (Sun)
  63875343600, #  local_start 2025-02-15 23:00:00 (Sat)
  63896515200, #    local_end 2025-10-19 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63896529600, #    utc_start 2025-10-19 04:00:00 (Sun)
  63907412400, #      utc_end 2026-02-22 03:00:00 (Sun)
  63896518800, #  local_start 2025-10-19 01:00:00 (Sun)
  63907401600, #    local_end 2026-02-22 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63907412400, #    utc_start 2026-02-22 03:00:00 (Sun)
  63927979200, #      utc_end 2026-10-18 04:00:00 (Sun)
  63907398000, #  local_start 2026-02-21 23:00:00 (Sat)
  63927964800, #    local_end 2026-10-18 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63927979200, #    utc_start 2026-10-18 04:00:00 (Sun)
  63938862000, #      utc_end 2027-02-21 03:00:00 (Sun)
  63927968400, #  local_start 2026-10-18 01:00:00 (Sun)
  63938851200, #    local_end 2027-02-21 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63938862000, #    utc_start 2027-02-21 03:00:00 (Sun)
  63959428800, #      utc_end 2027-10-17 04:00:00 (Sun)
  63938847600, #  local_start 2027-02-20 23:00:00 (Sat)
  63959414400, #    local_end 2027-10-17 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63959428800, #    utc_start 2027-10-17 04:00:00 (Sun)
  63970311600, #      utc_end 2028-02-20 03:00:00 (Sun)
  63959418000, #  local_start 2027-10-17 01:00:00 (Sun)
  63970300800, #    local_end 2028-02-20 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  63970311600, #    utc_start 2028-02-20 03:00:00 (Sun)
  63990878400, #      utc_end 2028-10-15 04:00:00 (Sun)
  63970297200, #  local_start 2028-02-19 23:00:00 (Sat)
  63990864000, #    local_end 2028-10-15 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63990878400, #    utc_start 2028-10-15 04:00:00 (Sun)
  64001761200, #      utc_end 2029-02-18 03:00:00 (Sun)
  63990867600, #  local_start 2028-10-15 01:00:00 (Sun)
  64001750400, #    local_end 2029-02-18 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64001761200, #    utc_start 2029-02-18 03:00:00 (Sun)
  64022932800, #      utc_end 2029-10-21 04:00:00 (Sun)
  64001746800, #  local_start 2029-02-17 23:00:00 (Sat)
  64022918400, #    local_end 2029-10-21 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64022932800, #    utc_start 2029-10-21 04:00:00 (Sun)
  64033210800, #      utc_end 2030-02-17 03:00:00 (Sun)
  64022922000, #  local_start 2029-10-21 01:00:00 (Sun)
  64033200000, #    local_end 2030-02-17 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64033210800, #    utc_start 2030-02-17 03:00:00 (Sun)
  64054382400, #      utc_end 2030-10-20 04:00:00 (Sun)
  64033196400, #  local_start 2030-02-16 23:00:00 (Sat)
  64054368000, #    local_end 2030-10-20 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64054382400, #    utc_start 2030-10-20 04:00:00 (Sun)
  64064660400, #      utc_end 2031-02-16 03:00:00 (Sun)
  64054371600, #  local_start 2030-10-20 01:00:00 (Sun)
  64064649600, #    local_end 2031-02-16 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64064660400, #    utc_start 2031-02-16 03:00:00 (Sun)
  64085832000, #      utc_end 2031-10-19 04:00:00 (Sun)
  64064646000, #  local_start 2031-02-15 23:00:00 (Sat)
  64085817600, #    local_end 2031-10-19 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64085832000, #    utc_start 2031-10-19 04:00:00 (Sun)
  64096110000, #      utc_end 2032-02-15 03:00:00 (Sun)
  64085821200, #  local_start 2031-10-19 01:00:00 (Sun)
  64096099200, #    local_end 2032-02-15 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64096110000, #    utc_start 2032-02-15 03:00:00 (Sun)
  64117281600, #      utc_end 2032-10-17 04:00:00 (Sun)
  64096095600, #  local_start 2032-02-14 23:00:00 (Sat)
  64117267200, #    local_end 2032-10-17 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64117281600, #    utc_start 2032-10-17 04:00:00 (Sun)
  64128164400, #      utc_end 2033-02-20 03:00:00 (Sun)
  64117270800, #  local_start 2032-10-17 01:00:00 (Sun)
  64128153600, #    local_end 2033-02-20 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64128164400, #    utc_start 2033-02-20 03:00:00 (Sun)
  64148731200, #      utc_end 2033-10-16 04:00:00 (Sun)
  64128150000, #  local_start 2033-02-19 23:00:00 (Sat)
  64148716800, #    local_end 2033-10-16 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64148731200, #    utc_start 2033-10-16 04:00:00 (Sun)
  64160218800, #      utc_end 2034-02-26 03:00:00 (Sun)
  64148720400, #  local_start 2033-10-16 01:00:00 (Sun)
  64160208000, #    local_end 2034-02-26 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64160218800, #    utc_start 2034-02-26 03:00:00 (Sun)
  64180180800, #      utc_end 2034-10-15 04:00:00 (Sun)
  64160204400, #  local_start 2034-02-25 23:00:00 (Sat)
  64180166400, #    local_end 2034-10-15 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64180180800, #    utc_start 2034-10-15 04:00:00 (Sun)
  64191063600, #      utc_end 2035-02-18 03:00:00 (Sun)
  64180170000, #  local_start 2034-10-15 01:00:00 (Sun)
  64191052800, #    local_end 2035-02-18 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64191063600, #    utc_start 2035-02-18 03:00:00 (Sun)
  64212235200, #      utc_end 2035-10-21 04:00:00 (Sun)
  64191049200, #  local_start 2035-02-17 23:00:00 (Sat)
  64212220800, #    local_end 2035-10-21 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64212235200, #    utc_start 2035-10-21 04:00:00 (Sun)
  64222513200, #      utc_end 2036-02-17 03:00:00 (Sun)
  64212224400, #  local_start 2035-10-21 01:00:00 (Sun)
  64222502400, #    local_end 2036-02-17 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64222513200, #    utc_start 2036-02-17 03:00:00 (Sun)
  64243684800, #      utc_end 2036-10-19 04:00:00 (Sun)
  64222498800, #  local_start 2036-02-16 23:00:00 (Sat)
  64243670400, #    local_end 2036-10-19 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64243684800, #    utc_start 2036-10-19 04:00:00 (Sun)
  64254567600, #      utc_end 2037-02-22 03:00:00 (Sun)
  64243674000, #  local_start 2036-10-19 01:00:00 (Sun)
  64254556800, #    local_end 2037-02-22 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64254567600, #    utc_start 2037-02-22 03:00:00 (Sun)
  64275134400, #      utc_end 2037-10-18 04:00:00 (Sun)
  64254553200, #  local_start 2037-02-21 23:00:00 (Sat)
  64275120000, #    local_end 2037-10-18 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64275134400, #    utc_start 2037-10-18 04:00:00 (Sun)
  64286017200, #      utc_end 2038-02-21 03:00:00 (Sun)
  64275123600, #  local_start 2037-10-18 01:00:00 (Sun)
  64286006400, #    local_end 2038-02-21 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64286017200, #    utc_start 2038-02-21 03:00:00 (Sun)
  64306584000, #      utc_end 2038-10-17 04:00:00 (Sun)
  64286002800, #  local_start 2038-02-20 23:00:00 (Sat)
  64306569600, #    local_end 2038-10-17 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  64306584000, #    utc_start 2038-10-17 04:00:00 (Sun)
  64317466800, #      utc_end 2039-02-20 03:00:00 (Sun)
  64306573200, #  local_start 2038-10-17 01:00:00 (Sun)
  64317456000, #    local_end 2039-02-20 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  64317466800, #    utc_start 2039-02-20 03:00:00 (Sun)
  64338033600, #      utc_end 2039-10-16 04:00:00 (Sun)
  64317452400, #  local_start 2039-02-19 23:00:00 (Sat)
  64338019200, #    local_end 2039-10-16 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {65}
  
  sub _max_year {2038}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -14400 }
  
  my $last_observance = bless( {
    'format' => 'AM%sT',
    'gmtoff' => '-4:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 731855,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 731855,
      'utc_rd_secs' => 0,
      'utc_year' => 2005
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -14400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 731855,
      'local_rd_secs' => 14400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 731855,
      'utc_rd_secs' => 14400,
      'utc_year' => 2005
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '0:00',
      'from' => '2038',
      'in' => 'Feb',
      'letter' => '',
      'name' => 'Brazil',
      'offset_from_std' => 0,
      'on' => 'Sun>=15',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '0:00',
      'from' => '2008',
      'in' => 'Oct',
      'letter' => 'S',
      'name' => 'Brazil',
      'offset_from_std' => 3600,
      'on' => 'Sun>=15',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_CUIABA

    $main::fatpacked{"DateTime/TimeZone/America/Curacao.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_CURACAO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Curacao;
  $DateTime::TimeZone::America::Curacao::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Curacao::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60308944547, #      utc_end 1912-02-12 04:35:47 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60308928000, #    local_end 1912-02-12 00:00:00 (Mon)
  -16547,
  0,
  'LMT',
      ],
      [
  60308944547, #    utc_start 1912-02-12 04:35:47 (Mon)
  61977933000, #      utc_end 1965-01-01 04:30:00 (Fri)
  60308928347, #  local_start 1912-02-12 00:05:47 (Mon)
  61977916800, #    local_end 1965-01-01 00:00:00 (Fri)
  -16200,
  0,
  'ANT',
      ],
      [
  61977933000, #    utc_start 1965-01-01 04:30:00 (Fri)
  DateTime::TimeZone::INFINITY, #      utc_end
  61977918600, #  local_start 1965-01-01 00:30:00 (Fri)
  DateTime::TimeZone::INFINITY, #    local_end
  -14400,
  0,
  'AST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_CURACAO

    $main::fatpacked{"DateTime/TimeZone/America/Danmarkshavn.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_DANMARKSHAVN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Danmarkshavn;
  $DateTime::TimeZone::America::Danmarkshavn::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Danmarkshavn::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60449591680, #      utc_end 1916-07-28 01:14:40 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60449587200, #    local_end 1916-07-28 00:00:00 (Fri)
  -4480,
  0,
  'LMT',
      ],
      [
  60449591680, #    utc_start 1916-07-28 01:14:40 (Fri)
  62459528400, #      utc_end 1980-04-06 05:00:00 (Sun)
  60449580880, #  local_start 1916-07-27 22:14:40 (Thu)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  -10800,
  0,
  'WGT',
      ],
      [
  62459528400, #    utc_start 1980-04-06 05:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474626800, #    local_end 1980-09-27 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474623200, #  local_start 1980-09-27 22:00:00 (Sat)
  62490348000, #    local_end 1981-03-28 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490351600, #  local_start 1981-03-28 23:00:00 (Sat)
  62506076400, #    local_end 1981-09-26 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506072800, #  local_start 1981-09-26 22:00:00 (Sat)
  62521797600, #    local_end 1982-03-27 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521801200, #  local_start 1982-03-27 23:00:00 (Sat)
  62537526000, #    local_end 1982-09-25 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537522400, #  local_start 1982-09-25 22:00:00 (Sat)
  62553247200, #    local_end 1983-03-26 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553250800, #  local_start 1983-03-26 23:00:00 (Sat)
  62568975600, #    local_end 1983-09-24 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568972000, #  local_start 1983-09-24 22:00:00 (Sat)
  62584696800, #    local_end 1984-03-24 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584700400, #  local_start 1984-03-24 23:00:00 (Sat)
  62601030000, #    local_end 1984-09-29 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601026400, #  local_start 1984-09-29 22:00:00 (Sat)
  62616751200, #    local_end 1985-03-30 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616754800, #  local_start 1985-03-30 23:00:00 (Sat)
  62632479600, #    local_end 1985-09-28 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632476000, #  local_start 1985-09-28 22:00:00 (Sat)
  62648200800, #    local_end 1986-03-29 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648204400, #  local_start 1986-03-29 23:00:00 (Sat)
  62663929200, #    local_end 1986-09-27 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663925600, #  local_start 1986-09-27 22:00:00 (Sat)
  62679650400, #    local_end 1987-03-28 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679654000, #  local_start 1987-03-28 23:00:00 (Sat)
  62695378800, #    local_end 1987-09-26 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695375200, #  local_start 1987-09-26 22:00:00 (Sat)
  62711100000, #    local_end 1988-03-26 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711103600, #  local_start 1988-03-26 23:00:00 (Sat)
  62726828400, #    local_end 1988-09-24 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726824800, #  local_start 1988-09-24 22:00:00 (Sat)
  62742549600, #    local_end 1989-03-25 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742553200, #  local_start 1989-03-25 23:00:00 (Sat)
  62758278000, #    local_end 1989-09-23 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758274400, #  local_start 1989-09-23 22:00:00 (Sat)
  62773999200, #    local_end 1990-03-24 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774002800, #  local_start 1990-03-24 23:00:00 (Sat)
  62790332400, #    local_end 1990-09-29 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790328800, #  local_start 1990-09-29 22:00:00 (Sat)
  62806053600, #    local_end 1991-03-30 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806057200, #  local_start 1991-03-30 23:00:00 (Sat)
  62821782000, #    local_end 1991-09-28 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821778400, #  local_start 1991-09-28 22:00:00 (Sat)
  62837503200, #    local_end 1992-03-28 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837506800, #  local_start 1992-03-28 23:00:00 (Sat)
  62853231600, #    local_end 1992-09-26 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853228000, #  local_start 1992-09-26 22:00:00 (Sat)
  62868952800, #    local_end 1993-03-27 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868956400, #  local_start 1993-03-27 23:00:00 (Sat)
  62884681200, #    local_end 1993-09-25 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884677600, #  local_start 1993-09-25 22:00:00 (Sat)
  62900402400, #    local_end 1994-03-26 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900406000, #  local_start 1994-03-26 23:00:00 (Sat)
  62916130800, #    local_end 1994-09-24 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916127200, #  local_start 1994-09-24 22:00:00 (Sat)
  62931852000, #    local_end 1995-03-25 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931855600, #  local_start 1995-03-25 23:00:00 (Sat)
  62947580400, #    local_end 1995-09-23 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62956148400, #      utc_end 1996-01-01 03:00:00 (Mon)
  62947576800, #  local_start 1995-09-23 22:00:00 (Sat)
  62956137600, #    local_end 1996-01-01 00:00:00 (Mon)
  -10800,
  0,
  'WGT',
      ],
      [
  62956148400, #    utc_start 1996-01-01 03:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  62956148400, #  local_start 1996-01-01 03:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  0,
  0,
  'GMT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {16}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_DANMARKSHAVN

    $main::fatpacked{"DateTime/TimeZone/America/Dawson.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_DAWSON';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Dawson;
  $DateTime::TimeZone::America::Dawson::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Dawson::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59946686260, #      utc_end 1900-08-20 09:17:40 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59946652800, #    local_end 1900-08-20 00:00:00 (Mon)
  -33460,
  0,
  'LMT',
      ],
      [
  59946686260, #    utc_start 1900-08-20 09:17:40 (Mon)
  60503626800, #      utc_end 1918-04-14 11:00:00 (Sun)
  59946653860, #  local_start 1900-08-20 00:17:40 (Mon)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  60503626800, #    utc_start 1918-04-14 11:00:00 (Sun)
  60520557600, #      utc_end 1918-10-27 10:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  60520557600, #    utc_start 1918-10-27 10:00:00 (Sun)
  60538705200, #      utc_end 1919-05-25 11:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60538672800, #    local_end 1919-05-25 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  60538705200, #    utc_start 1919-05-25 11:00:00 (Sun)
  60552518400, #      utc_end 1919-11-01 08:00:00 (Sat)
  60538676400, #  local_start 1919-05-25 03:00:00 (Sun)
  60552489600, #    local_end 1919-11-01 00:00:00 (Sat)
  -28800,
  1,
  'YDT',
      ],
      [
  60552518400, #    utc_start 1919-11-01 08:00:00 (Sat)
  61255479600, #      utc_end 1942-02-09 11:00:00 (Mon)
  60552486000, #  local_start 1919-10-31 23:00:00 (Fri)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -32400,
  0,
  'YST',
      ],
      [
  61255479600, #    utc_start 1942-02-09 11:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366258800, #    local_end 1945-08-14 15:00:00 (Tue)
  -28800,
  1,
  'YWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370301600, #      utc_end 1945-09-30 10:00:00 (Sun)
  61366258800, #  local_start 1945-08-14 15:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -28800,
  1,
  'YPT',
      ],
      [
  61370301600, #    utc_start 1945-09-30 10:00:00 (Sun)
  61987798800, #      utc_end 1965-04-25 09:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61987766400, #    local_end 1965-04-25 00:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  61987798800, #    utc_start 1965-04-25 09:00:00 (Sun)
  62004128400, #      utc_end 1965-10-31 09:00:00 (Sun)
  61987773600, #  local_start 1965-04-25 02:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -25200,
  1,
  'YDDT',
      ],
      [
  62004128400, #    utc_start 1965-10-31 09:00:00 (Sun)
  62256330000, #      utc_end 1973-10-28 09:00:00 (Sun)
  62004096000, #  local_start 1965-10-31 00:00:00 (Sun)
  62256297600, #    local_end 1973-10-28 00:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62256330000, #    utc_start 1973-10-28 09:00:00 (Sun)
  62451244800, #      utc_end 1980-01-01 08:00:00 (Tue)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62451216000, #    local_end 1980-01-01 00:00:00 (Tue)
  -28800,
  0,
  'PST',
      ],
      [
  62451244800, #    utc_start 1980-01-01 08:00:00 (Tue)
  62461360800, #      utc_end 1980-04-27 10:00:00 (Sun)
  62451216000, #  local_start 1980-01-01 00:00:00 (Tue)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62461360800, #    utc_start 1980-04-27 10:00:00 (Sun)
  62477082000, #      utc_end 1980-10-26 09:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62477082000, #    utc_start 1980-10-26 09:00:00 (Sun)
  62492810400, #      utc_end 1981-04-26 10:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62492810400, #    utc_start 1981-04-26 10:00:00 (Sun)
  62508531600, #      utc_end 1981-10-25 09:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62508531600, #    utc_start 1981-10-25 09:00:00 (Sun)
  62524260000, #      utc_end 1982-04-25 10:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62524260000, #    utc_start 1982-04-25 10:00:00 (Sun)
  62540586000, #      utc_end 1982-10-31 09:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62540586000, #    utc_start 1982-10-31 09:00:00 (Sun)
  62555709600, #      utc_end 1983-04-24 10:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62555709600, #    utc_start 1983-04-24 10:00:00 (Sun)
  62572035600, #      utc_end 1983-10-30 09:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62572035600, #    utc_start 1983-10-30 09:00:00 (Sun)
  62587764000, #      utc_end 1984-04-29 10:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62587764000, #    utc_start 1984-04-29 10:00:00 (Sun)
  62603485200, #      utc_end 1984-10-28 09:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62603485200, #    utc_start 1984-10-28 09:00:00 (Sun)
  62619213600, #      utc_end 1985-04-28 10:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62619213600, #    utc_start 1985-04-28 10:00:00 (Sun)
  62634934800, #      utc_end 1985-10-27 09:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62634934800, #    utc_start 1985-10-27 09:00:00 (Sun)
  62650663200, #      utc_end 1986-04-27 10:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62650663200, #    utc_start 1986-04-27 10:00:00 (Sun)
  62666384400, #      utc_end 1986-10-26 09:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62666384400, #    utc_start 1986-10-26 09:00:00 (Sun)
  62680298400, #      utc_end 1987-04-05 10:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62680298400, #    utc_start 1987-04-05 10:00:00 (Sun)
  62697834000, #      utc_end 1987-10-25 09:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62697834000, #    utc_start 1987-10-25 09:00:00 (Sun)
  62711748000, #      utc_end 1988-04-03 10:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62711748000, #    utc_start 1988-04-03 10:00:00 (Sun)
  62729888400, #      utc_end 1988-10-30 09:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62729888400, #    utc_start 1988-10-30 09:00:00 (Sun)
  62743197600, #      utc_end 1989-04-02 10:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62743197600, #    utc_start 1989-04-02 10:00:00 (Sun)
  62761338000, #      utc_end 1989-10-29 09:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62761338000, #    utc_start 1989-10-29 09:00:00 (Sun)
  62774647200, #      utc_end 1990-04-01 10:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62774647200, #    utc_start 1990-04-01 10:00:00 (Sun)
  62792787600, #      utc_end 1990-10-28 09:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62792787600, #    utc_start 1990-10-28 09:00:00 (Sun)
  62806701600, #      utc_end 1991-04-07 10:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62806701600, #    utc_start 1991-04-07 10:00:00 (Sun)
  62824237200, #      utc_end 1991-10-27 09:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62824237200, #    utc_start 1991-10-27 09:00:00 (Sun)
  62838151200, #      utc_end 1992-04-05 10:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62838151200, #    utc_start 1992-04-05 10:00:00 (Sun)
  62855686800, #      utc_end 1992-10-25 09:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62855686800, #    utc_start 1992-10-25 09:00:00 (Sun)
  62869600800, #      utc_end 1993-04-04 10:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62869600800, #    utc_start 1993-04-04 10:00:00 (Sun)
  62887741200, #      utc_end 1993-10-31 09:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62887741200, #    utc_start 1993-10-31 09:00:00 (Sun)
  62901050400, #      utc_end 1994-04-03 10:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62901050400, #    utc_start 1994-04-03 10:00:00 (Sun)
  62919190800, #      utc_end 1994-10-30 09:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62919190800, #    utc_start 1994-10-30 09:00:00 (Sun)
  62932500000, #      utc_end 1995-04-02 10:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62932500000, #    utc_start 1995-04-02 10:00:00 (Sun)
  62950640400, #      utc_end 1995-10-29 09:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62950640400, #    utc_start 1995-10-29 09:00:00 (Sun)
  62964554400, #      utc_end 1996-04-07 10:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62964554400, #    utc_start 1996-04-07 10:00:00 (Sun)
  62982090000, #      utc_end 1996-10-27 09:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62982090000, #    utc_start 1996-10-27 09:00:00 (Sun)
  62996004000, #      utc_end 1997-04-06 10:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62996004000, #    utc_start 1997-04-06 10:00:00 (Sun)
  63013539600, #      utc_end 1997-10-26 09:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63013539600, #    utc_start 1997-10-26 09:00:00 (Sun)
  63027453600, #      utc_end 1998-04-05 10:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63027453600, #    utc_start 1998-04-05 10:00:00 (Sun)
  63044989200, #      utc_end 1998-10-25 09:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63044989200, #    utc_start 1998-10-25 09:00:00 (Sun)
  63058903200, #      utc_end 1999-04-04 10:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63058903200, #    utc_start 1999-04-04 10:00:00 (Sun)
  63077043600, #      utc_end 1999-10-31 09:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63077043600, #    utc_start 1999-10-31 09:00:00 (Sun)
  63090352800, #      utc_end 2000-04-02 10:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63090352800, #    utc_start 2000-04-02 10:00:00 (Sun)
  63108493200, #      utc_end 2000-10-29 09:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63108493200, #    utc_start 2000-10-29 09:00:00 (Sun)
  63121802400, #      utc_end 2001-04-01 10:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63121802400, #    utc_start 2001-04-01 10:00:00 (Sun)
  63139942800, #      utc_end 2001-10-28 09:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63139942800, #    utc_start 2001-10-28 09:00:00 (Sun)
  63153856800, #      utc_end 2002-04-07 10:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63153856800, #    utc_start 2002-04-07 10:00:00 (Sun)
  63171392400, #      utc_end 2002-10-27 09:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63171392400, #    utc_start 2002-10-27 09:00:00 (Sun)
  63185306400, #      utc_end 2003-04-06 10:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63185306400, #    utc_start 2003-04-06 10:00:00 (Sun)
  63202842000, #      utc_end 2003-10-26 09:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63202842000, #    utc_start 2003-10-26 09:00:00 (Sun)
  63216756000, #      utc_end 2004-04-04 10:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63216756000, #    utc_start 2004-04-04 10:00:00 (Sun)
  63234896400, #      utc_end 2004-10-31 09:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63234896400, #    utc_start 2004-10-31 09:00:00 (Sun)
  63248205600, #      utc_end 2005-04-03 10:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63248205600, #    utc_start 2005-04-03 10:00:00 (Sun)
  63266346000, #      utc_end 2005-10-30 09:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63266346000, #    utc_start 2005-10-30 09:00:00 (Sun)
  63279655200, #      utc_end 2006-04-02 10:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63279655200, #    utc_start 2006-04-02 10:00:00 (Sun)
  63297795600, #      utc_end 2006-10-29 09:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63297795600, #    utc_start 2006-10-29 09:00:00 (Sun)
  63309290400, #      utc_end 2007-03-11 10:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63309290400, #    utc_start 2007-03-11 10:00:00 (Sun)
  63329850000, #      utc_end 2007-11-04 09:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63329850000, #    utc_start 2007-11-04 09:00:00 (Sun)
  63340740000, #      utc_end 2008-03-09 10:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63340740000, #    utc_start 2008-03-09 10:00:00 (Sun)
  63361299600, #      utc_end 2008-11-02 09:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63361299600, #    utc_start 2008-11-02 09:00:00 (Sun)
  63372189600, #      utc_end 2009-03-08 10:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63372189600, #    utc_start 2009-03-08 10:00:00 (Sun)
  63392749200, #      utc_end 2009-11-01 09:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63392749200, #    utc_start 2009-11-01 09:00:00 (Sun)
  63404244000, #      utc_end 2010-03-14 10:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63404244000, #    utc_start 2010-03-14 10:00:00 (Sun)
  63424803600, #      utc_end 2010-11-07 09:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63424803600, #    utc_start 2010-11-07 09:00:00 (Sun)
  63435693600, #      utc_end 2011-03-13 10:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63435693600, #    utc_start 2011-03-13 10:00:00 (Sun)
  63456253200, #      utc_end 2011-11-06 09:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63456253200, #    utc_start 2011-11-06 09:00:00 (Sun)
  63467143200, #      utc_end 2012-03-11 10:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63467143200, #    utc_start 2012-03-11 10:00:00 (Sun)
  63487702800, #      utc_end 2012-11-04 09:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63487702800, #    utc_start 2012-11-04 09:00:00 (Sun)
  63498592800, #      utc_end 2013-03-10 10:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63498592800, #    utc_start 2013-03-10 10:00:00 (Sun)
  63519152400, #      utc_end 2013-11-03 09:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63519152400, #    utc_start 2013-11-03 09:00:00 (Sun)
  63530042400, #      utc_end 2014-03-09 10:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63530042400, #    utc_start 2014-03-09 10:00:00 (Sun)
  63550602000, #      utc_end 2014-11-02 09:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63550602000, #    utc_start 2014-11-02 09:00:00 (Sun)
  63561492000, #      utc_end 2015-03-08 10:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63561492000, #    utc_start 2015-03-08 10:00:00 (Sun)
  63582051600, #      utc_end 2015-11-01 09:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63582051600, #    utc_start 2015-11-01 09:00:00 (Sun)
  63593546400, #      utc_end 2016-03-13 10:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63593546400, #    utc_start 2016-03-13 10:00:00 (Sun)
  63614106000, #      utc_end 2016-11-06 09:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63614106000, #    utc_start 2016-11-06 09:00:00 (Sun)
  63624996000, #      utc_end 2017-03-12 10:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63624996000, #    utc_start 2017-03-12 10:00:00 (Sun)
  63645555600, #      utc_end 2017-11-05 09:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63645555600, #    utc_start 2017-11-05 09:00:00 (Sun)
  63656445600, #      utc_end 2018-03-11 10:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63656445600, #    utc_start 2018-03-11 10:00:00 (Sun)
  63677005200, #      utc_end 2018-11-04 09:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63677005200, #    utc_start 2018-11-04 09:00:00 (Sun)
  63687895200, #      utc_end 2019-03-10 10:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63687895200, #    utc_start 2019-03-10 10:00:00 (Sun)
  63708454800, #      utc_end 2019-11-03 09:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63708454800, #    utc_start 2019-11-03 09:00:00 (Sun)
  63719344800, #      utc_end 2020-03-08 10:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63719344800, #    utc_start 2020-03-08 10:00:00 (Sun)
  63739904400, #      utc_end 2020-11-01 09:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63739904400, #    utc_start 2020-11-01 09:00:00 (Sun)
  63751399200, #      utc_end 2021-03-14 10:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63751399200, #    utc_start 2021-03-14 10:00:00 (Sun)
  63771958800, #      utc_end 2021-11-07 09:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63771958800, #    utc_start 2021-11-07 09:00:00 (Sun)
  63782848800, #      utc_end 2022-03-13 10:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63782848800, #    utc_start 2022-03-13 10:00:00 (Sun)
  63803408400, #      utc_end 2022-11-06 09:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63803408400, #    utc_start 2022-11-06 09:00:00 (Sun)
  63814298400, #      utc_end 2023-03-12 10:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63814298400, #    utc_start 2023-03-12 10:00:00 (Sun)
  63834858000, #      utc_end 2023-11-05 09:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63834858000, #    utc_start 2023-11-05 09:00:00 (Sun)
  63845748000, #      utc_end 2024-03-10 10:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63845748000, #    utc_start 2024-03-10 10:00:00 (Sun)
  63866307600, #      utc_end 2024-11-03 09:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63866307600, #    utc_start 2024-11-03 09:00:00 (Sun)
  63877197600, #      utc_end 2025-03-09 10:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63877197600, #    utc_start 2025-03-09 10:00:00 (Sun)
  63897757200, #      utc_end 2025-11-02 09:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63897757200, #    utc_start 2025-11-02 09:00:00 (Sun)
  63908647200, #      utc_end 2026-03-08 10:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63908647200, #    utc_start 2026-03-08 10:00:00 (Sun)
  63929206800, #      utc_end 2026-11-01 09:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63929206800, #    utc_start 2026-11-01 09:00:00 (Sun)
  63940701600, #      utc_end 2027-03-14 10:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63940701600, #    utc_start 2027-03-14 10:00:00 (Sun)
  63961261200, #      utc_end 2027-11-07 09:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {53}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -28800 }
  
  my $last_observance = bless( {
    'format' => 'P%sT',
    'gmtoff' => '-8:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722815,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722815,
      'utc_rd_secs' => 0,
      'utc_year' => 1981
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -28800,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722815,
      'local_rd_secs' => 28800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722815,
      'utc_rd_secs' => 28800,
      'utc_year' => 1981
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_DAWSON

    $main::fatpacked{"DateTime/TimeZone/America/Dawson_Creek.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_DAWSON_CREEK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Dawson_Creek;
  $DateTime::TimeZone::America::Dawson_Creek::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Dawson_Creek::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59421801656, #      utc_end 1884-01-01 08:00:56 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59421772800, #    local_end 1884-01-01 00:00:00 (Tue)
  -28856,
  0,
  'LMT',
      ],
      [
  59421801656, #    utc_start 1884-01-01 08:00:56 (Tue)
  60503623200, #      utc_end 1918-04-14 10:00:00 (Sun)
  59421772856, #  local_start 1884-01-01 00:00:56 (Tue)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  60503623200, #    utc_start 1918-04-14 10:00:00 (Sun)
  60520554000, #      utc_end 1918-10-27 09:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  60520554000, #    utc_start 1918-10-27 09:00:00 (Sun)
  61255476000, #      utc_end 1942-02-09 10:00:00 (Mon)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -28800,
  0,
  'PST',
      ],
      [
  61255476000, #    utc_start 1942-02-09 10:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366262400, #    local_end 1945-08-14 16:00:00 (Tue)
  -25200,
  1,
  'PWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370298000, #      utc_end 1945-09-30 09:00:00 (Sun)
  61366262400, #  local_start 1945-08-14 16:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PPT',
      ],
      [
  61370298000, #    utc_start 1945-09-30 09:00:00 (Sun)
  61409865600, #      utc_end 1947-01-01 08:00:00 (Wed)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61409836800, #    local_end 1947-01-01 00:00:00 (Wed)
  -28800,
  0,
  'PST',
      ],
      [
  61409865600, #    utc_start 1947-01-01 08:00:00 (Wed)
  61419895200, #      utc_end 1947-04-27 10:00:00 (Sun)
  61409836800, #  local_start 1947-01-01 00:00:00 (Wed)
  61419866400, #    local_end 1947-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61419895200, #    utc_start 1947-04-27 10:00:00 (Sun)
  61433197200, #      utc_end 1947-09-28 09:00:00 (Sun)
  61419870000, #  local_start 1947-04-27 03:00:00 (Sun)
  61433172000, #    local_end 1947-09-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61433197200, #    utc_start 1947-09-28 09:00:00 (Sun)
  61451344800, #      utc_end 1948-04-25 10:00:00 (Sun)
  61433168400, #  local_start 1947-09-28 01:00:00 (Sun)
  61451316000, #    local_end 1948-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61451344800, #    utc_start 1948-04-25 10:00:00 (Sun)
  61464646800, #      utc_end 1948-09-26 09:00:00 (Sun)
  61451319600, #  local_start 1948-04-25 03:00:00 (Sun)
  61464621600, #    local_end 1948-09-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61464646800, #    utc_start 1948-09-26 09:00:00 (Sun)
  61482794400, #      utc_end 1949-04-24 10:00:00 (Sun)
  61464618000, #  local_start 1948-09-26 01:00:00 (Sun)
  61482765600, #    local_end 1949-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61482794400, #    utc_start 1949-04-24 10:00:00 (Sun)
  61496096400, #      utc_end 1949-09-25 09:00:00 (Sun)
  61482769200, #  local_start 1949-04-24 03:00:00 (Sun)
  61496071200, #    local_end 1949-09-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61496096400, #    utc_start 1949-09-25 09:00:00 (Sun)
  61514848800, #      utc_end 1950-04-30 10:00:00 (Sun)
  61496067600, #  local_start 1949-09-25 01:00:00 (Sun)
  61514820000, #    local_end 1950-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61514848800, #    utc_start 1950-04-30 10:00:00 (Sun)
  61527546000, #      utc_end 1950-09-24 09:00:00 (Sun)
  61514823600, #  local_start 1950-04-30 03:00:00 (Sun)
  61527520800, #    local_end 1950-09-24 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61527546000, #    utc_start 1950-09-24 09:00:00 (Sun)
  61546298400, #      utc_end 1951-04-29 10:00:00 (Sun)
  61527517200, #  local_start 1950-09-24 01:00:00 (Sun)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61546298400, #    utc_start 1951-04-29 10:00:00 (Sun)
  61559600400, #      utc_end 1951-09-30 09:00:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61559600400, #    utc_start 1951-09-30 09:00:00 (Sun)
  61577748000, #      utc_end 1952-04-27 10:00:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61577748000, #    utc_start 1952-04-27 10:00:00 (Sun)
  61591050000, #      utc_end 1952-09-28 09:00:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61591050000, #    utc_start 1952-09-28 09:00:00 (Sun)
  61609197600, #      utc_end 1953-04-26 10:00:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61609197600, #    utc_start 1953-04-26 10:00:00 (Sun)
  61622499600, #      utc_end 1953-09-27 09:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61622499600, #    utc_start 1953-09-27 09:00:00 (Sun)
  61640647200, #      utc_end 1954-04-25 10:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61640647200, #    utc_start 1954-04-25 10:00:00 (Sun)
  61653949200, #      utc_end 1954-09-26 09:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61653949200, #    utc_start 1954-09-26 09:00:00 (Sun)
  61672096800, #      utc_end 1955-04-24 10:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61672096800, #    utc_start 1955-04-24 10:00:00 (Sun)
  61685398800, #      utc_end 1955-09-25 09:00:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61685373600, #    local_end 1955-09-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61685398800, #    utc_start 1955-09-25 09:00:00 (Sun)
  61704151200, #      utc_end 1956-04-29 10:00:00 (Sun)
  61685370000, #  local_start 1955-09-25 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61704151200, #    utc_start 1956-04-29 10:00:00 (Sun)
  61717453200, #      utc_end 1956-09-30 09:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61717428000, #    local_end 1956-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61717453200, #    utc_start 1956-09-30 09:00:00 (Sun)
  61735600800, #      utc_end 1957-04-28 10:00:00 (Sun)
  61717424400, #  local_start 1956-09-30 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61735600800, #    utc_start 1957-04-28 10:00:00 (Sun)
  61748902800, #      utc_end 1957-09-29 09:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61748902800, #    utc_start 1957-09-29 09:00:00 (Sun)
  61767050400, #      utc_end 1958-04-27 10:00:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61767050400, #    utc_start 1958-04-27 10:00:00 (Sun)
  61780352400, #      utc_end 1958-09-28 09:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61780327200, #    local_end 1958-09-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61780352400, #    utc_start 1958-09-28 09:00:00 (Sun)
  61798500000, #      utc_end 1959-04-26 10:00:00 (Sun)
  61780323600, #  local_start 1958-09-28 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61798500000, #    utc_start 1959-04-26 10:00:00 (Sun)
  61811802000, #      utc_end 1959-09-27 09:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61811776800, #    local_end 1959-09-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61811802000, #    utc_start 1959-09-27 09:00:00 (Sun)
  61829949600, #      utc_end 1960-04-24 10:00:00 (Sun)
  61811773200, #  local_start 1959-09-27 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61829949600, #    utc_start 1960-04-24 10:00:00 (Sun)
  61843251600, #      utc_end 1960-09-25 09:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61843226400, #    local_end 1960-09-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61843251600, #    utc_start 1960-09-25 09:00:00 (Sun)
  61862004000, #      utc_end 1961-04-30 10:00:00 (Sun)
  61843222800, #  local_start 1960-09-25 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61862004000, #    utc_start 1961-04-30 10:00:00 (Sun)
  61874701200, #      utc_end 1961-09-24 09:00:00 (Sun)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  61874676000, #    local_end 1961-09-24 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61874701200, #    utc_start 1961-09-24 09:00:00 (Sun)
  61893453600, #      utc_end 1962-04-29 10:00:00 (Sun)
  61874672400, #  local_start 1961-09-24 01:00:00 (Sun)
  61893424800, #    local_end 1962-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61893453600, #    utc_start 1962-04-29 10:00:00 (Sun)
  61909174800, #      utc_end 1962-10-28 09:00:00 (Sun)
  61893428400, #  local_start 1962-04-29 03:00:00 (Sun)
  61909149600, #    local_end 1962-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61909174800, #    utc_start 1962-10-28 09:00:00 (Sun)
  61924903200, #      utc_end 1963-04-28 10:00:00 (Sun)
  61909146000, #  local_start 1962-10-28 01:00:00 (Sun)
  61924874400, #    local_end 1963-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61924903200, #    utc_start 1963-04-28 10:00:00 (Sun)
  61940624400, #      utc_end 1963-10-27 09:00:00 (Sun)
  61924878000, #  local_start 1963-04-28 03:00:00 (Sun)
  61940599200, #    local_end 1963-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61940624400, #    utc_start 1963-10-27 09:00:00 (Sun)
  61956352800, #      utc_end 1964-04-26 10:00:00 (Sun)
  61940595600, #  local_start 1963-10-27 01:00:00 (Sun)
  61956324000, #    local_end 1964-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61956352800, #    utc_start 1964-04-26 10:00:00 (Sun)
  61972074000, #      utc_end 1964-10-25 09:00:00 (Sun)
  61956327600, #  local_start 1964-04-26 03:00:00 (Sun)
  61972048800, #    local_end 1964-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61972074000, #    utc_start 1964-10-25 09:00:00 (Sun)
  61987802400, #      utc_end 1965-04-25 10:00:00 (Sun)
  61972045200, #  local_start 1964-10-25 01:00:00 (Sun)
  61987773600, #    local_end 1965-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61987802400, #    utc_start 1965-04-25 10:00:00 (Sun)
  62004128400, #      utc_end 1965-10-31 09:00:00 (Sun)
  61987777200, #  local_start 1965-04-25 03:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62004128400, #    utc_start 1965-10-31 09:00:00 (Sun)
  62019252000, #      utc_end 1966-04-24 10:00:00 (Sun)
  62004099600, #  local_start 1965-10-31 01:00:00 (Sun)
  62019223200, #    local_end 1966-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62019252000, #    utc_start 1966-04-24 10:00:00 (Sun)
  62035578000, #      utc_end 1966-10-30 09:00:00 (Sun)
  62019226800, #  local_start 1966-04-24 03:00:00 (Sun)
  62035552800, #    local_end 1966-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62035578000, #    utc_start 1966-10-30 09:00:00 (Sun)
  62051306400, #      utc_end 1967-04-30 10:00:00 (Sun)
  62035549200, #  local_start 1966-10-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62051306400, #    utc_start 1967-04-30 10:00:00 (Sun)
  62067027600, #      utc_end 1967-10-29 09:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62067027600, #    utc_start 1967-10-29 09:00:00 (Sun)
  62082756000, #      utc_end 1968-04-28 10:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62082756000, #    utc_start 1968-04-28 10:00:00 (Sun)
  62098477200, #      utc_end 1968-10-27 09:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62098477200, #    utc_start 1968-10-27 09:00:00 (Sun)
  62114205600, #      utc_end 1969-04-27 10:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62114205600, #    utc_start 1969-04-27 10:00:00 (Sun)
  62129926800, #      utc_end 1969-10-26 09:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62129926800, #    utc_start 1969-10-26 09:00:00 (Sun)
  62145655200, #      utc_end 1970-04-26 10:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62145655200, #    utc_start 1970-04-26 10:00:00 (Sun)
  62161376400, #      utc_end 1970-10-25 09:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62161376400, #    utc_start 1970-10-25 09:00:00 (Sun)
  62177104800, #      utc_end 1971-04-25 10:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62177104800, #    utc_start 1971-04-25 10:00:00 (Sun)
  62193430800, #      utc_end 1971-10-31 09:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62193430800, #    utc_start 1971-10-31 09:00:00 (Sun)
  62209159200, #      utc_end 1972-04-30 10:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62209159200, #    utc_start 1972-04-30 10:00:00 (Sun)
  62219696400, #      utc_end 1972-08-30 09:00:00 (Wed)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62219671200, #    local_end 1972-08-30 02:00:00 (Wed)
  -25200,
  1,
  'PDT',
      ],
      [
  62219696400, #    utc_start 1972-08-30 09:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #      utc_end
  62219671200, #  local_start 1972-08-30 02:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #    local_end
  -25200,
  0,
  'MST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {29}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_DAWSON_CREEK

    $main::fatpacked{"DateTime/TimeZone/America/Denver.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_DENVER';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Denver;
  $DateTime::TimeZone::America::Denver::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Denver::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418039600, #      utc_end 1883-11-18 19:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418014404, #    local_end 1883-11-18 12:00:04 (Sun)
  -25196,
  0,
  'LMT',
      ],
      [
  59418039600, #    utc_start 1883-11-18 19:00:00 (Sun)
  60502410000, #      utc_end 1918-03-31 09:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60502410000, #    utc_start 1918-03-31 09:00:00 (Sun)
  60520550400, #      utc_end 1918-10-27 08:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60520550400, #    utc_start 1918-10-27 08:00:00 (Sun)
  60533859600, #      utc_end 1919-03-30 09:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60533859600, #    utc_start 1919-03-30 09:00:00 (Sun)
  60552000000, #      utc_end 1919-10-26 08:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60552000000, #    utc_start 1919-10-26 08:00:00 (Sun)
  60557785200, #      utc_end 1920-01-01 07:00:00 (Thu)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  60557760000, #    local_end 1920-01-01 00:00:00 (Thu)
  -25200,
  0,
  'MST',
      ],
      [
  60557785200, #    utc_start 1920-01-01 07:00:00 (Thu)
  60565309200, #      utc_end 1920-03-28 09:00:00 (Sun)
  60557760000, #  local_start 1920-01-01 00:00:00 (Thu)
  60565284000, #    local_end 1920-03-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60565309200, #    utc_start 1920-03-28 09:00:00 (Sun)
  60584054400, #      utc_end 1920-10-31 08:00:00 (Sun)
  60565287600, #  local_start 1920-03-28 03:00:00 (Sun)
  60584032800, #    local_end 1920-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60584054400, #    utc_start 1920-10-31 08:00:00 (Sun)
  60596758800, #      utc_end 1921-03-27 09:00:00 (Sun)
  60584029200, #  local_start 1920-10-31 01:00:00 (Sun)
  60596733600, #    local_end 1921-03-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60596758800, #    utc_start 1921-03-27 09:00:00 (Sun)
  60601593600, #      utc_end 1921-05-22 08:00:00 (Sun)
  60596737200, #  local_start 1921-03-27 03:00:00 (Sun)
  60601572000, #    local_end 1921-05-22 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60601593600, #    utc_start 1921-05-22 08:00:00 (Sun)
  61252095600, #      utc_end 1942-01-01 07:00:00 (Thu)
  60601568400, #  local_start 1921-05-22 01:00:00 (Sun)
  61252070400, #    local_end 1942-01-01 00:00:00 (Thu)
  -25200,
  0,
  'MST',
      ],
      [
  61252095600, #    utc_start 1942-01-01 07:00:00 (Thu)
  61255472400, #      utc_end 1942-02-09 09:00:00 (Mon)
  61252070400, #  local_start 1942-01-01 00:00:00 (Thu)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -25200,
  0,
  'MST',
      ],
      [
  61255472400, #    utc_start 1942-02-09 09:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366266000, #    local_end 1945-08-14 17:00:00 (Tue)
  -21600,
  1,
  'MWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370294400, #      utc_end 1945-09-30 08:00:00 (Sun)
  61366266000, #  local_start 1945-08-14 17:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MPT',
      ],
      [
  61370294400, #    utc_start 1945-09-30 08:00:00 (Sun)
  61378326000, #      utc_end 1946-01-01 07:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -25200,
  0,
  'MST',
      ],
      [
  61378326000, #    utc_start 1946-01-01 07:00:00 (Tue)
  61987798800, #      utc_end 1965-04-25 09:00:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61987773600, #    local_end 1965-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61987798800, #    utc_start 1965-04-25 09:00:00 (Sun)
  62004124800, #      utc_end 1965-10-31 08:00:00 (Sun)
  61987777200, #  local_start 1965-04-25 03:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62004124800, #    utc_start 1965-10-31 08:00:00 (Sun)
  62019248400, #      utc_end 1966-04-24 09:00:00 (Sun)
  62004099600, #  local_start 1965-10-31 01:00:00 (Sun)
  62019223200, #    local_end 1966-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62019248400, #    utc_start 1966-04-24 09:00:00 (Sun)
  62035574400, #      utc_end 1966-10-30 08:00:00 (Sun)
  62019226800, #  local_start 1966-04-24 03:00:00 (Sun)
  62035552800, #    local_end 1966-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62035574400, #    utc_start 1966-10-30 08:00:00 (Sun)
  62041014000, #      utc_end 1967-01-01 07:00:00 (Sun)
  62035549200, #  local_start 1966-10-30 01:00:00 (Sun)
  62040988800, #    local_end 1967-01-01 00:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62041014000, #    utc_start 1967-01-01 07:00:00 (Sun)
  62051302800, #      utc_end 1967-04-30 09:00:00 (Sun)
  62040988800, #  local_start 1967-01-01 00:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62051302800, #    utc_start 1967-04-30 09:00:00 (Sun)
  62067024000, #      utc_end 1967-10-29 08:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62067024000, #    utc_start 1967-10-29 08:00:00 (Sun)
  62082752400, #      utc_end 1968-04-28 09:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62082752400, #    utc_start 1968-04-28 09:00:00 (Sun)
  62098473600, #      utc_end 1968-10-27 08:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62098473600, #    utc_start 1968-10-27 08:00:00 (Sun)
  62114202000, #      utc_end 1969-04-27 09:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62114202000, #    utc_start 1969-04-27 09:00:00 (Sun)
  62129923200, #      utc_end 1969-10-26 08:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62129923200, #    utc_start 1969-10-26 08:00:00 (Sun)
  62145651600, #      utc_end 1970-04-26 09:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62145651600, #    utc_start 1970-04-26 09:00:00 (Sun)
  62161372800, #      utc_end 1970-10-25 08:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62161372800, #    utc_start 1970-10-25 08:00:00 (Sun)
  62177101200, #      utc_end 1971-04-25 09:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62177101200, #    utc_start 1971-04-25 09:00:00 (Sun)
  62193427200, #      utc_end 1971-10-31 08:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62193427200, #    utc_start 1971-10-31 08:00:00 (Sun)
  62209155600, #      utc_end 1972-04-30 09:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62209155600, #    utc_start 1972-04-30 09:00:00 (Sun)
  62224876800, #      utc_end 1972-10-29 08:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62224876800, #    utc_start 1972-10-29 08:00:00 (Sun)
  62240605200, #      utc_end 1973-04-29 09:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62240605200, #    utc_start 1973-04-29 09:00:00 (Sun)
  62256326400, #      utc_end 1973-10-28 08:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62256326400, #    utc_start 1973-10-28 08:00:00 (Sun)
  62262378000, #      utc_end 1974-01-06 09:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62262378000, #    utc_start 1974-01-06 09:00:00 (Sun)
  62287776000, #      utc_end 1974-10-27 08:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62287776000, #    utc_start 1974-10-27 08:00:00 (Sun)
  62298061200, #      utc_end 1975-02-23 09:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62298061200, #    utc_start 1975-02-23 09:00:00 (Sun)
  62319225600, #      utc_end 1975-10-26 08:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62319225600, #    utc_start 1975-10-26 08:00:00 (Sun)
  62334954000, #      utc_end 1976-04-25 09:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62334954000, #    utc_start 1976-04-25 09:00:00 (Sun)
  62351280000, #      utc_end 1976-10-31 08:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62351280000, #    utc_start 1976-10-31 08:00:00 (Sun)
  62366403600, #      utc_end 1977-04-24 09:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62366403600, #    utc_start 1977-04-24 09:00:00 (Sun)
  62382729600, #      utc_end 1977-10-30 08:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62382729600, #    utc_start 1977-10-30 08:00:00 (Sun)
  62398458000, #      utc_end 1978-04-30 09:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62398458000, #    utc_start 1978-04-30 09:00:00 (Sun)
  62414179200, #      utc_end 1978-10-29 08:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62414179200, #    utc_start 1978-10-29 08:00:00 (Sun)
  62429907600, #      utc_end 1979-04-29 09:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62429907600, #    utc_start 1979-04-29 09:00:00 (Sun)
  62445628800, #      utc_end 1979-10-28 08:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62445628800, #    utc_start 1979-10-28 08:00:00 (Sun)
  62461357200, #      utc_end 1980-04-27 09:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62461357200, #    utc_start 1980-04-27 09:00:00 (Sun)
  62477078400, #      utc_end 1980-10-26 08:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62477078400, #    utc_start 1980-10-26 08:00:00 (Sun)
  62492806800, #      utc_end 1981-04-26 09:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62492806800, #    utc_start 1981-04-26 09:00:00 (Sun)
  62508528000, #      utc_end 1981-10-25 08:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62508528000, #    utc_start 1981-10-25 08:00:00 (Sun)
  62524256400, #      utc_end 1982-04-25 09:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62524256400, #    utc_start 1982-04-25 09:00:00 (Sun)
  62540582400, #      utc_end 1982-10-31 08:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62540582400, #    utc_start 1982-10-31 08:00:00 (Sun)
  62555706000, #      utc_end 1983-04-24 09:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62555706000, #    utc_start 1983-04-24 09:00:00 (Sun)
  62572032000, #      utc_end 1983-10-30 08:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62572032000, #    utc_start 1983-10-30 08:00:00 (Sun)
  62587760400, #      utc_end 1984-04-29 09:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62587760400, #    utc_start 1984-04-29 09:00:00 (Sun)
  62603481600, #      utc_end 1984-10-28 08:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62603481600, #    utc_start 1984-10-28 08:00:00 (Sun)
  62619210000, #      utc_end 1985-04-28 09:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62619210000, #    utc_start 1985-04-28 09:00:00 (Sun)
  62634931200, #      utc_end 1985-10-27 08:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62634931200, #    utc_start 1985-10-27 08:00:00 (Sun)
  62650659600, #      utc_end 1986-04-27 09:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62650659600, #    utc_start 1986-04-27 09:00:00 (Sun)
  62666380800, #      utc_end 1986-10-26 08:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62666380800, #    utc_start 1986-10-26 08:00:00 (Sun)
  62680294800, #      utc_end 1987-04-05 09:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62680294800, #    utc_start 1987-04-05 09:00:00 (Sun)
  62697830400, #      utc_end 1987-10-25 08:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62697830400, #    utc_start 1987-10-25 08:00:00 (Sun)
  62711744400, #      utc_end 1988-04-03 09:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62711744400, #    utc_start 1988-04-03 09:00:00 (Sun)
  62729884800, #      utc_end 1988-10-30 08:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62729884800, #    utc_start 1988-10-30 08:00:00 (Sun)
  62743194000, #      utc_end 1989-04-02 09:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62743194000, #    utc_start 1989-04-02 09:00:00 (Sun)
  62761334400, #      utc_end 1989-10-29 08:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62761334400, #    utc_start 1989-10-29 08:00:00 (Sun)
  62774643600, #      utc_end 1990-04-01 09:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62774643600, #    utc_start 1990-04-01 09:00:00 (Sun)
  62792784000, #      utc_end 1990-10-28 08:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62792784000, #    utc_start 1990-10-28 08:00:00 (Sun)
  62806698000, #      utc_end 1991-04-07 09:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62806698000, #    utc_start 1991-04-07 09:00:00 (Sun)
  62824233600, #      utc_end 1991-10-27 08:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62824233600, #    utc_start 1991-10-27 08:00:00 (Sun)
  62838147600, #      utc_end 1992-04-05 09:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62838147600, #    utc_start 1992-04-05 09:00:00 (Sun)
  62855683200, #      utc_end 1992-10-25 08:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62855683200, #    utc_start 1992-10-25 08:00:00 (Sun)
  62869597200, #      utc_end 1993-04-04 09:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62869597200, #    utc_start 1993-04-04 09:00:00 (Sun)
  62887737600, #      utc_end 1993-10-31 08:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62887737600, #    utc_start 1993-10-31 08:00:00 (Sun)
  62901046800, #      utc_end 1994-04-03 09:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62901046800, #    utc_start 1994-04-03 09:00:00 (Sun)
  62919187200, #      utc_end 1994-10-30 08:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62919187200, #    utc_start 1994-10-30 08:00:00 (Sun)
  62932496400, #      utc_end 1995-04-02 09:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62932496400, #    utc_start 1995-04-02 09:00:00 (Sun)
  62950636800, #      utc_end 1995-10-29 08:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62950636800, #    utc_start 1995-10-29 08:00:00 (Sun)
  62964550800, #      utc_end 1996-04-07 09:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62964550800, #    utc_start 1996-04-07 09:00:00 (Sun)
  62982086400, #      utc_end 1996-10-27 08:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62982086400, #    utc_start 1996-10-27 08:00:00 (Sun)
  62996000400, #      utc_end 1997-04-06 09:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62996000400, #    utc_start 1997-04-06 09:00:00 (Sun)
  63013536000, #      utc_end 1997-10-26 08:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63013536000, #    utc_start 1997-10-26 08:00:00 (Sun)
  63027450000, #      utc_end 1998-04-05 09:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63027450000, #    utc_start 1998-04-05 09:00:00 (Sun)
  63044985600, #      utc_end 1998-10-25 08:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63044985600, #    utc_start 1998-10-25 08:00:00 (Sun)
  63058899600, #      utc_end 1999-04-04 09:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63058899600, #    utc_start 1999-04-04 09:00:00 (Sun)
  63077040000, #      utc_end 1999-10-31 08:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63077040000, #    utc_start 1999-10-31 08:00:00 (Sun)
  63090349200, #      utc_end 2000-04-02 09:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63090349200, #    utc_start 2000-04-02 09:00:00 (Sun)
  63108489600, #      utc_end 2000-10-29 08:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63108489600, #    utc_start 2000-10-29 08:00:00 (Sun)
  63121798800, #      utc_end 2001-04-01 09:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63121798800, #    utc_start 2001-04-01 09:00:00 (Sun)
  63139939200, #      utc_end 2001-10-28 08:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63139939200, #    utc_start 2001-10-28 08:00:00 (Sun)
  63153853200, #      utc_end 2002-04-07 09:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63153853200, #    utc_start 2002-04-07 09:00:00 (Sun)
  63171388800, #      utc_end 2002-10-27 08:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63171388800, #    utc_start 2002-10-27 08:00:00 (Sun)
  63185302800, #      utc_end 2003-04-06 09:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63185302800, #    utc_start 2003-04-06 09:00:00 (Sun)
  63202838400, #      utc_end 2003-10-26 08:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63202838400, #    utc_start 2003-10-26 08:00:00 (Sun)
  63216752400, #      utc_end 2004-04-04 09:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63216752400, #    utc_start 2004-04-04 09:00:00 (Sun)
  63234892800, #      utc_end 2004-10-31 08:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63234892800, #    utc_start 2004-10-31 08:00:00 (Sun)
  63248202000, #      utc_end 2005-04-03 09:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63248202000, #    utc_start 2005-04-03 09:00:00 (Sun)
  63266342400, #      utc_end 2005-10-30 08:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63266342400, #    utc_start 2005-10-30 08:00:00 (Sun)
  63279651600, #      utc_end 2006-04-02 09:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63279651600, #    utc_start 2006-04-02 09:00:00 (Sun)
  63297792000, #      utc_end 2006-10-29 08:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63297792000, #    utc_start 2006-10-29 08:00:00 (Sun)
  63309286800, #      utc_end 2007-03-11 09:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63309286800, #    utc_start 2007-03-11 09:00:00 (Sun)
  63329846400, #      utc_end 2007-11-04 08:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63329846400, #    utc_start 2007-11-04 08:00:00 (Sun)
  63340736400, #      utc_end 2008-03-09 09:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63340736400, #    utc_start 2008-03-09 09:00:00 (Sun)
  63361296000, #      utc_end 2008-11-02 08:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63361296000, #    utc_start 2008-11-02 08:00:00 (Sun)
  63372186000, #      utc_end 2009-03-08 09:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63372186000, #    utc_start 2009-03-08 09:00:00 (Sun)
  63392745600, #      utc_end 2009-11-01 08:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63392745600, #    utc_start 2009-11-01 08:00:00 (Sun)
  63404240400, #      utc_end 2010-03-14 09:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63404240400, #    utc_start 2010-03-14 09:00:00 (Sun)
  63424800000, #      utc_end 2010-11-07 08:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63424800000, #    utc_start 2010-11-07 08:00:00 (Sun)
  63435690000, #      utc_end 2011-03-13 09:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63435690000, #    utc_start 2011-03-13 09:00:00 (Sun)
  63456249600, #      utc_end 2011-11-06 08:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63456249600, #    utc_start 2011-11-06 08:00:00 (Sun)
  63467139600, #      utc_end 2012-03-11 09:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63467139600, #    utc_start 2012-03-11 09:00:00 (Sun)
  63487699200, #      utc_end 2012-11-04 08:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63487699200, #    utc_start 2012-11-04 08:00:00 (Sun)
  63498589200, #      utc_end 2013-03-10 09:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63498589200, #    utc_start 2013-03-10 09:00:00 (Sun)
  63519148800, #      utc_end 2013-11-03 08:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63519148800, #    utc_start 2013-11-03 08:00:00 (Sun)
  63530038800, #      utc_end 2014-03-09 09:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63530038800, #    utc_start 2014-03-09 09:00:00 (Sun)
  63550598400, #      utc_end 2014-11-02 08:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63550598400, #    utc_start 2014-11-02 08:00:00 (Sun)
  63561488400, #      utc_end 2015-03-08 09:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63561488400, #    utc_start 2015-03-08 09:00:00 (Sun)
  63582048000, #      utc_end 2015-11-01 08:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63582048000, #    utc_start 2015-11-01 08:00:00 (Sun)
  63593542800, #      utc_end 2016-03-13 09:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63593542800, #    utc_start 2016-03-13 09:00:00 (Sun)
  63614102400, #      utc_end 2016-11-06 08:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63614102400, #    utc_start 2016-11-06 08:00:00 (Sun)
  63624992400, #      utc_end 2017-03-12 09:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63624992400, #    utc_start 2017-03-12 09:00:00 (Sun)
  63645552000, #      utc_end 2017-11-05 08:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63645552000, #    utc_start 2017-11-05 08:00:00 (Sun)
  63656442000, #      utc_end 2018-03-11 09:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63656442000, #    utc_start 2018-03-11 09:00:00 (Sun)
  63677001600, #      utc_end 2018-11-04 08:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63677001600, #    utc_start 2018-11-04 08:00:00 (Sun)
  63687891600, #      utc_end 2019-03-10 09:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63687891600, #    utc_start 2019-03-10 09:00:00 (Sun)
  63708451200, #      utc_end 2019-11-03 08:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63708451200, #    utc_start 2019-11-03 08:00:00 (Sun)
  63719341200, #      utc_end 2020-03-08 09:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63719341200, #    utc_start 2020-03-08 09:00:00 (Sun)
  63739900800, #      utc_end 2020-11-01 08:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63739900800, #    utc_start 2020-11-01 08:00:00 (Sun)
  63751395600, #      utc_end 2021-03-14 09:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63751395600, #    utc_start 2021-03-14 09:00:00 (Sun)
  63771955200, #      utc_end 2021-11-07 08:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63771955200, #    utc_start 2021-11-07 08:00:00 (Sun)
  63782845200, #      utc_end 2022-03-13 09:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63782845200, #    utc_start 2022-03-13 09:00:00 (Sun)
  63803404800, #      utc_end 2022-11-06 08:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63803404800, #    utc_start 2022-11-06 08:00:00 (Sun)
  63814294800, #      utc_end 2023-03-12 09:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63814294800, #    utc_start 2023-03-12 09:00:00 (Sun)
  63834854400, #      utc_end 2023-11-05 08:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63834854400, #    utc_start 2023-11-05 08:00:00 (Sun)
  63845744400, #      utc_end 2024-03-10 09:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63845744400, #    utc_start 2024-03-10 09:00:00 (Sun)
  63866304000, #      utc_end 2024-11-03 08:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63866304000, #    utc_start 2024-11-03 08:00:00 (Sun)
  63877194000, #      utc_end 2025-03-09 09:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63877194000, #    utc_start 2025-03-09 09:00:00 (Sun)
  63897753600, #      utc_end 2025-11-02 08:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63897753600, #    utc_start 2025-11-02 08:00:00 (Sun)
  63908643600, #      utc_end 2026-03-08 09:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63908643600, #    utc_start 2026-03-08 09:00:00 (Sun)
  63929203200, #      utc_end 2026-11-01 08:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63929203200, #    utc_start 2026-11-01 08:00:00 (Sun)
  63940698000, #      utc_end 2027-03-14 09:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63940698000, #    utc_start 2027-03-14 09:00:00 (Sun)
  63961257600, #      utc_end 2027-11-07 08:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {69}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -25200 }
  
  my $last_observance = bless( {
    'format' => 'M%sT',
    'gmtoff' => '-7:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 718067,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 718067,
      'utc_rd_secs' => 0,
      'utc_year' => 1968
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -25200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 718067,
      'local_rd_secs' => 25200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 718067,
      'utc_rd_secs' => 25200,
      'utc_year' => 1968
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_DENVER

    $main::fatpacked{"DateTime/TimeZone/America/Detroit.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_DETROIT';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Detroit;
  $DateTime::TimeZone::America::Detroit::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Detroit::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60084480731, #      utc_end 1905-01-01 05:32:11 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60084460800, #    local_end 1905-01-01 00:00:00 (Sun)
  -19931,
  0,
  'LMT',
      ],
      [
  60084480731, #    utc_start 1905-01-01 05:32:11 (Sun)
  60411600000, #      utc_end 1915-05-15 08:00:00 (Sat)
  60084459131, #  local_start 1904-12-31 23:32:11 (Sat)
  60411578400, #    local_end 1915-05-15 02:00:00 (Sat)
  -21600,
  0,
  'CST',
      ],
      [
  60411600000, #    utc_start 1915-05-15 08:00:00 (Sat)
  61252088400, #      utc_end 1942-01-01 05:00:00 (Thu)
  60411582000, #  local_start 1915-05-15 03:00:00 (Sat)
  61252070400, #    local_end 1942-01-01 00:00:00 (Thu)
  -18000,
  0,
  'EST',
      ],
      [
  61252088400, #    utc_start 1942-01-01 05:00:00 (Thu)
  61255465200, #      utc_end 1942-02-09 07:00:00 (Mon)
  61252070400, #  local_start 1942-01-01 00:00:00 (Thu)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -18000,
  0,
  'EST',
      ],
      [
  61255465200, #    utc_start 1942-02-09 07:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366273200, #    local_end 1945-08-14 19:00:00 (Tue)
  -14400,
  1,
  'EWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370287200, #      utc_end 1945-09-30 06:00:00 (Sun)
  61366273200, #  local_start 1945-08-14 19:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -14400,
  1,
  'EPT',
      ],
      [
  61370287200, #    utc_start 1945-09-30 06:00:00 (Sun)
  61378318800, #      utc_end 1946-01-01 05:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -18000,
  0,
  'EST',
      ],
      [
  61378318800, #    utc_start 1946-01-01 05:00:00 (Tue)
  61451334000, #      utc_end 1948-04-25 07:00:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61451316000, #    local_end 1948-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61451334000, #    utc_start 1948-04-25 07:00:00 (Sun)
  61464636000, #      utc_end 1948-09-26 06:00:00 (Sun)
  61451319600, #  local_start 1948-04-25 03:00:00 (Sun)
  61464621600, #    local_end 1948-09-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61464636000, #    utc_start 1948-09-26 06:00:00 (Sun)
  62055183600, #      utc_end 1967-06-14 07:00:00 (Wed)
  61464618000, #  local_start 1948-09-26 01:00:00 (Sun)
  62055165600, #    local_end 1967-06-14 02:00:00 (Wed)
  -18000,
  0,
  'EST',
      ],
      [
  62055183600, #    utc_start 1967-06-14 07:00:00 (Wed)
  62067016800, #      utc_end 1967-10-29 06:00:00 (Sun)
  62055169200, #  local_start 1967-06-14 03:00:00 (Wed)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62067016800, #    utc_start 1967-10-29 06:00:00 (Sun)
  62230395600, #      utc_end 1973-01-01 05:00:00 (Mon)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62230377600, #    local_end 1973-01-01 00:00:00 (Mon)
  -18000,
  0,
  'EST',
      ],
      [
  62230395600, #    utc_start 1973-01-01 05:00:00 (Mon)
  62240598000, #      utc_end 1973-04-29 07:00:00 (Sun)
  62230377600, #  local_start 1973-01-01 00:00:00 (Mon)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62240598000, #    utc_start 1973-04-29 07:00:00 (Sun)
  62256319200, #      utc_end 1973-10-28 06:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62256319200, #    utc_start 1973-10-28 06:00:00 (Sun)
  62262370800, #      utc_end 1974-01-06 07:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62262370800, #    utc_start 1974-01-06 07:00:00 (Sun)
  62287768800, #      utc_end 1974-10-27 06:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62287768800, #    utc_start 1974-10-27 06:00:00 (Sun)
  62293467600, #      utc_end 1975-01-01 05:00:00 (Wed)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62293449600, #    local_end 1975-01-01 00:00:00 (Wed)
  -18000,
  0,
  'EST',
      ],
      [
  62293467600, #    utc_start 1975-01-01 05:00:00 (Wed)
  62303497200, #      utc_end 1975-04-27 07:00:00 (Sun)
  62293449600, #  local_start 1975-01-01 00:00:00 (Wed)
  62303479200, #    local_end 1975-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62303497200, #    utc_start 1975-04-27 07:00:00 (Sun)
  62319218400, #      utc_end 1975-10-26 06:00:00 (Sun)
  62303482800, #  local_start 1975-04-27 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62319218400, #    utc_start 1975-10-26 06:00:00 (Sun)
  62334946800, #      utc_end 1976-04-25 07:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62334946800, #    utc_start 1976-04-25 07:00:00 (Sun)
  62351272800, #      utc_end 1976-10-31 06:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62351272800, #    utc_start 1976-10-31 06:00:00 (Sun)
  62366396400, #      utc_end 1977-04-24 07:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62366396400, #    utc_start 1977-04-24 07:00:00 (Sun)
  62382722400, #      utc_end 1977-10-30 06:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62382722400, #    utc_start 1977-10-30 06:00:00 (Sun)
  62398450800, #      utc_end 1978-04-30 07:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62398450800, #    utc_start 1978-04-30 07:00:00 (Sun)
  62414172000, #      utc_end 1978-10-29 06:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62414172000, #    utc_start 1978-10-29 06:00:00 (Sun)
  62429900400, #      utc_end 1979-04-29 07:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62429900400, #    utc_start 1979-04-29 07:00:00 (Sun)
  62445621600, #      utc_end 1979-10-28 06:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62445621600, #    utc_start 1979-10-28 06:00:00 (Sun)
  62461350000, #      utc_end 1980-04-27 07:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62461350000, #    utc_start 1980-04-27 07:00:00 (Sun)
  62477071200, #      utc_end 1980-10-26 06:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62477071200, #    utc_start 1980-10-26 06:00:00 (Sun)
  62492799600, #      utc_end 1981-04-26 07:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62492799600, #    utc_start 1981-04-26 07:00:00 (Sun)
  62508520800, #      utc_end 1981-10-25 06:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62508520800, #    utc_start 1981-10-25 06:00:00 (Sun)
  62524249200, #      utc_end 1982-04-25 07:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62524249200, #    utc_start 1982-04-25 07:00:00 (Sun)
  62540575200, #      utc_end 1982-10-31 06:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62540575200, #    utc_start 1982-10-31 06:00:00 (Sun)
  62555698800, #      utc_end 1983-04-24 07:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62555698800, #    utc_start 1983-04-24 07:00:00 (Sun)
  62572024800, #      utc_end 1983-10-30 06:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62572024800, #    utc_start 1983-10-30 06:00:00 (Sun)
  62587753200, #      utc_end 1984-04-29 07:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62587753200, #    utc_start 1984-04-29 07:00:00 (Sun)
  62603474400, #      utc_end 1984-10-28 06:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62603474400, #    utc_start 1984-10-28 06:00:00 (Sun)
  62619202800, #      utc_end 1985-04-28 07:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62619202800, #    utc_start 1985-04-28 07:00:00 (Sun)
  62634924000, #      utc_end 1985-10-27 06:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62634924000, #    utc_start 1985-10-27 06:00:00 (Sun)
  62650652400, #      utc_end 1986-04-27 07:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62650652400, #    utc_start 1986-04-27 07:00:00 (Sun)
  62666373600, #      utc_end 1986-10-26 06:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62666373600, #    utc_start 1986-10-26 06:00:00 (Sun)
  62680287600, #      utc_end 1987-04-05 07:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62680287600, #    utc_start 1987-04-05 07:00:00 (Sun)
  62697823200, #      utc_end 1987-10-25 06:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62697823200, #    utc_start 1987-10-25 06:00:00 (Sun)
  62711737200, #      utc_end 1988-04-03 07:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62711737200, #    utc_start 1988-04-03 07:00:00 (Sun)
  62729877600, #      utc_end 1988-10-30 06:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62729877600, #    utc_start 1988-10-30 06:00:00 (Sun)
  62743186800, #      utc_end 1989-04-02 07:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62743186800, #    utc_start 1989-04-02 07:00:00 (Sun)
  62761327200, #      utc_end 1989-10-29 06:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62761327200, #    utc_start 1989-10-29 06:00:00 (Sun)
  62774636400, #      utc_end 1990-04-01 07:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62774636400, #    utc_start 1990-04-01 07:00:00 (Sun)
  62792776800, #      utc_end 1990-10-28 06:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62792776800, #    utc_start 1990-10-28 06:00:00 (Sun)
  62806690800, #      utc_end 1991-04-07 07:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62806690800, #    utc_start 1991-04-07 07:00:00 (Sun)
  62824226400, #      utc_end 1991-10-27 06:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62824226400, #    utc_start 1991-10-27 06:00:00 (Sun)
  62838140400, #      utc_end 1992-04-05 07:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62838140400, #    utc_start 1992-04-05 07:00:00 (Sun)
  62855676000, #      utc_end 1992-10-25 06:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62855676000, #    utc_start 1992-10-25 06:00:00 (Sun)
  62869590000, #      utc_end 1993-04-04 07:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62869590000, #    utc_start 1993-04-04 07:00:00 (Sun)
  62887730400, #      utc_end 1993-10-31 06:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62887730400, #    utc_start 1993-10-31 06:00:00 (Sun)
  62901039600, #      utc_end 1994-04-03 07:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62901039600, #    utc_start 1994-04-03 07:00:00 (Sun)
  62919180000, #      utc_end 1994-10-30 06:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62919180000, #    utc_start 1994-10-30 06:00:00 (Sun)
  62932489200, #      utc_end 1995-04-02 07:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62932489200, #    utc_start 1995-04-02 07:00:00 (Sun)
  62950629600, #      utc_end 1995-10-29 06:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62950629600, #    utc_start 1995-10-29 06:00:00 (Sun)
  62964543600, #      utc_end 1996-04-07 07:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62964543600, #    utc_start 1996-04-07 07:00:00 (Sun)
  62982079200, #      utc_end 1996-10-27 06:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62982079200, #    utc_start 1996-10-27 06:00:00 (Sun)
  62995993200, #      utc_end 1997-04-06 07:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62995993200, #    utc_start 1997-04-06 07:00:00 (Sun)
  63013528800, #      utc_end 1997-10-26 06:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63013528800, #    utc_start 1997-10-26 06:00:00 (Sun)
  63027442800, #      utc_end 1998-04-05 07:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63027442800, #    utc_start 1998-04-05 07:00:00 (Sun)
  63044978400, #      utc_end 1998-10-25 06:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63044978400, #    utc_start 1998-10-25 06:00:00 (Sun)
  63058892400, #      utc_end 1999-04-04 07:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63058892400, #    utc_start 1999-04-04 07:00:00 (Sun)
  63077032800, #      utc_end 1999-10-31 06:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63077032800, #    utc_start 1999-10-31 06:00:00 (Sun)
  63090342000, #      utc_end 2000-04-02 07:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63090342000, #    utc_start 2000-04-02 07:00:00 (Sun)
  63108482400, #      utc_end 2000-10-29 06:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63108482400, #    utc_start 2000-10-29 06:00:00 (Sun)
  63121791600, #      utc_end 2001-04-01 07:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63121791600, #    utc_start 2001-04-01 07:00:00 (Sun)
  63139932000, #      utc_end 2001-10-28 06:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63139932000, #    utc_start 2001-10-28 06:00:00 (Sun)
  63153846000, #      utc_end 2002-04-07 07:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63153846000, #    utc_start 2002-04-07 07:00:00 (Sun)
  63171381600, #      utc_end 2002-10-27 06:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63171381600, #    utc_start 2002-10-27 06:00:00 (Sun)
  63185295600, #      utc_end 2003-04-06 07:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63185295600, #    utc_start 2003-04-06 07:00:00 (Sun)
  63202831200, #      utc_end 2003-10-26 06:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63202831200, #    utc_start 2003-10-26 06:00:00 (Sun)
  63216745200, #      utc_end 2004-04-04 07:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63216745200, #    utc_start 2004-04-04 07:00:00 (Sun)
  63234885600, #      utc_end 2004-10-31 06:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63234885600, #    utc_start 2004-10-31 06:00:00 (Sun)
  63248194800, #      utc_end 2005-04-03 07:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63248194800, #    utc_start 2005-04-03 07:00:00 (Sun)
  63266335200, #      utc_end 2005-10-30 06:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63266335200, #    utc_start 2005-10-30 06:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297784800, #      utc_end 2006-10-29 06:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63297784800, #    utc_start 2006-10-29 06:00:00 (Sun)
  63309279600, #      utc_end 2007-03-11 07:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63309279600, #    utc_start 2007-03-11 07:00:00 (Sun)
  63329839200, #      utc_end 2007-11-04 06:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63329839200, #    utc_start 2007-11-04 06:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {59}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721105,
      'local_rd_secs' => 10800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721105,
      'utc_rd_secs' => 10800,
      'utc_year' => 1976
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721105,
      'local_rd_secs' => 25200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721105,
      'utc_rd_secs' => 25200,
      'utc_year' => 1976
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_DETROIT

    $main::fatpacked{"DateTime/TimeZone/America/Edmonton.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_EDMONTON';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Edmonton;
  $DateTime::TimeZone::America::Edmonton::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Edmonton::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60137019232, #      utc_end 1906-09-01 07:33:52 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60136992000, #    local_end 1906-09-01 00:00:00 (Sat)
  -27232,
  0,
  'LMT',
      ],
      [
  60137019232, #    utc_start 1906-09-01 07:33:52 (Sat)
  60503619600, #      utc_end 1918-04-14 09:00:00 (Sun)
  60136994032, #  local_start 1906-09-01 00:33:52 (Sat)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60503619600, #    utc_start 1918-04-14 09:00:00 (Sun)
  60520550400, #      utc_end 1918-10-27 08:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60520550400, #    utc_start 1918-10-27 08:00:00 (Sun)
  60535069200, #      utc_end 1919-04-13 09:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60535044000, #    local_end 1919-04-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60535069200, #    utc_start 1919-04-13 09:00:00 (Sun)
  60538867200, #      utc_end 1919-05-27 08:00:00 (Tue)
  60535047600, #  local_start 1919-04-13 03:00:00 (Sun)
  60538845600, #    local_end 1919-05-27 02:00:00 (Tue)
  -21600,
  1,
  'MDT',
      ],
      [
  60538867200, #    utc_start 1919-05-27 08:00:00 (Tue)
  60567728400, #      utc_end 1920-04-25 09:00:00 (Sun)
  60538842000, #  local_start 1919-05-27 01:00:00 (Tue)
  60567703200, #    local_end 1920-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60567728400, #    utc_start 1920-04-25 09:00:00 (Sun)
  60584054400, #      utc_end 1920-10-31 08:00:00 (Sun)
  60567706800, #  local_start 1920-04-25 03:00:00 (Sun)
  60584032800, #    local_end 1920-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60584054400, #    utc_start 1920-10-31 08:00:00 (Sun)
  60599178000, #      utc_end 1921-04-24 09:00:00 (Sun)
  60584029200, #  local_start 1920-10-31 01:00:00 (Sun)
  60599152800, #    local_end 1921-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60599178000, #    utc_start 1921-04-24 09:00:00 (Sun)
  60612480000, #      utc_end 1921-09-25 08:00:00 (Sun)
  60599156400, #  local_start 1921-04-24 03:00:00 (Sun)
  60612458400, #    local_end 1921-09-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60612480000, #    utc_start 1921-09-25 08:00:00 (Sun)
  60631232400, #      utc_end 1922-04-30 09:00:00 (Sun)
  60612454800, #  local_start 1921-09-25 01:00:00 (Sun)
  60631207200, #    local_end 1922-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60631232400, #    utc_start 1922-04-30 09:00:00 (Sun)
  60643929600, #      utc_end 1922-09-24 08:00:00 (Sun)
  60631210800, #  local_start 1922-04-30 03:00:00 (Sun)
  60643908000, #    local_end 1922-09-24 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60643929600, #    utc_start 1922-09-24 08:00:00 (Sun)
  60662682000, #      utc_end 1923-04-29 09:00:00 (Sun)
  60643904400, #  local_start 1922-09-24 01:00:00 (Sun)
  60662656800, #    local_end 1923-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60662682000, #    utc_start 1923-04-29 09:00:00 (Sun)
  60675984000, #      utc_end 1923-09-30 08:00:00 (Sun)
  60662660400, #  local_start 1923-04-29 03:00:00 (Sun)
  60675962400, #    local_end 1923-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60675984000, #    utc_start 1923-09-30 08:00:00 (Sun)
  61255472400, #      utc_end 1942-02-09 09:00:00 (Mon)
  60675958800, #  local_start 1923-09-30 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -25200,
  0,
  'MST',
      ],
      [
  61255472400, #    utc_start 1942-02-09 09:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366266000, #    local_end 1945-08-14 17:00:00 (Tue)
  -21600,
  1,
  'MWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370294400, #      utc_end 1945-09-30 08:00:00 (Sun)
  61366266000, #  local_start 1945-08-14 17:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MPT',
      ],
      [
  61370294400, #    utc_start 1945-09-30 08:00:00 (Sun)
  61419891600, #      utc_end 1947-04-27 09:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61419866400, #    local_end 1947-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61419891600, #    utc_start 1947-04-27 09:00:00 (Sun)
  61433193600, #      utc_end 1947-09-28 08:00:00 (Sun)
  61419870000, #  local_start 1947-04-27 03:00:00 (Sun)
  61433172000, #    local_end 1947-09-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61433193600, #    utc_start 1947-09-28 08:00:00 (Sun)
  62051302800, #      utc_end 1967-04-30 09:00:00 (Sun)
  61433168400, #  local_start 1947-09-28 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62051302800, #    utc_start 1967-04-30 09:00:00 (Sun)
  62067024000, #      utc_end 1967-10-29 08:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62067024000, #    utc_start 1967-10-29 08:00:00 (Sun)
  62114202000, #      utc_end 1969-04-27 09:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62114202000, #    utc_start 1969-04-27 09:00:00 (Sun)
  62129923200, #      utc_end 1969-10-26 08:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62129923200, #    utc_start 1969-10-26 08:00:00 (Sun)
  62209155600, #      utc_end 1972-04-30 09:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62209155600, #    utc_start 1972-04-30 09:00:00 (Sun)
  62224876800, #      utc_end 1972-10-29 08:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62224876800, #    utc_start 1972-10-29 08:00:00 (Sun)
  62240605200, #      utc_end 1973-04-29 09:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62240605200, #    utc_start 1973-04-29 09:00:00 (Sun)
  62256326400, #      utc_end 1973-10-28 08:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62256326400, #    utc_start 1973-10-28 08:00:00 (Sun)
  62272054800, #      utc_end 1974-04-28 09:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62272029600, #    local_end 1974-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62272054800, #    utc_start 1974-04-28 09:00:00 (Sun)
  62287776000, #      utc_end 1974-10-27 08:00:00 (Sun)
  62272033200, #  local_start 1974-04-28 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62287776000, #    utc_start 1974-10-27 08:00:00 (Sun)
  62303504400, #      utc_end 1975-04-27 09:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62303479200, #    local_end 1975-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62303504400, #    utc_start 1975-04-27 09:00:00 (Sun)
  62319225600, #      utc_end 1975-10-26 08:00:00 (Sun)
  62303482800, #  local_start 1975-04-27 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62319225600, #    utc_start 1975-10-26 08:00:00 (Sun)
  62334954000, #      utc_end 1976-04-25 09:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62334954000, #    utc_start 1976-04-25 09:00:00 (Sun)
  62351280000, #      utc_end 1976-10-31 08:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62351280000, #    utc_start 1976-10-31 08:00:00 (Sun)
  62366403600, #      utc_end 1977-04-24 09:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62366403600, #    utc_start 1977-04-24 09:00:00 (Sun)
  62382729600, #      utc_end 1977-10-30 08:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62382729600, #    utc_start 1977-10-30 08:00:00 (Sun)
  62398458000, #      utc_end 1978-04-30 09:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62398458000, #    utc_start 1978-04-30 09:00:00 (Sun)
  62414179200, #      utc_end 1978-10-29 08:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62414179200, #    utc_start 1978-10-29 08:00:00 (Sun)
  62429907600, #      utc_end 1979-04-29 09:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62429907600, #    utc_start 1979-04-29 09:00:00 (Sun)
  62445628800, #      utc_end 1979-10-28 08:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62445628800, #    utc_start 1979-10-28 08:00:00 (Sun)
  62461357200, #      utc_end 1980-04-27 09:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62461357200, #    utc_start 1980-04-27 09:00:00 (Sun)
  62477078400, #      utc_end 1980-10-26 08:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62477078400, #    utc_start 1980-10-26 08:00:00 (Sun)
  62492806800, #      utc_end 1981-04-26 09:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62492806800, #    utc_start 1981-04-26 09:00:00 (Sun)
  62508528000, #      utc_end 1981-10-25 08:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62508528000, #    utc_start 1981-10-25 08:00:00 (Sun)
  62524256400, #      utc_end 1982-04-25 09:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62524256400, #    utc_start 1982-04-25 09:00:00 (Sun)
  62540582400, #      utc_end 1982-10-31 08:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62540582400, #    utc_start 1982-10-31 08:00:00 (Sun)
  62555706000, #      utc_end 1983-04-24 09:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62555706000, #    utc_start 1983-04-24 09:00:00 (Sun)
  62572032000, #      utc_end 1983-10-30 08:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62572032000, #    utc_start 1983-10-30 08:00:00 (Sun)
  62587760400, #      utc_end 1984-04-29 09:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62587760400, #    utc_start 1984-04-29 09:00:00 (Sun)
  62603481600, #      utc_end 1984-10-28 08:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62603481600, #    utc_start 1984-10-28 08:00:00 (Sun)
  62619210000, #      utc_end 1985-04-28 09:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62619210000, #    utc_start 1985-04-28 09:00:00 (Sun)
  62634931200, #      utc_end 1985-10-27 08:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62634931200, #    utc_start 1985-10-27 08:00:00 (Sun)
  62650659600, #      utc_end 1986-04-27 09:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62650659600, #    utc_start 1986-04-27 09:00:00 (Sun)
  62666380800, #      utc_end 1986-10-26 08:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62666380800, #    utc_start 1986-10-26 08:00:00 (Sun)
  62672166000, #      utc_end 1987-01-01 07:00:00 (Thu)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62672140800, #    local_end 1987-01-01 00:00:00 (Thu)
  -25200,
  0,
  'MST',
      ],
      [
  62672166000, #    utc_start 1987-01-01 07:00:00 (Thu)
  62680294800, #      utc_end 1987-04-05 09:00:00 (Sun)
  62672140800, #  local_start 1987-01-01 00:00:00 (Thu)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62680294800, #    utc_start 1987-04-05 09:00:00 (Sun)
  62697830400, #      utc_end 1987-10-25 08:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62697830400, #    utc_start 1987-10-25 08:00:00 (Sun)
  62711744400, #      utc_end 1988-04-03 09:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62711744400, #    utc_start 1988-04-03 09:00:00 (Sun)
  62729884800, #      utc_end 1988-10-30 08:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62729884800, #    utc_start 1988-10-30 08:00:00 (Sun)
  62743194000, #      utc_end 1989-04-02 09:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62743194000, #    utc_start 1989-04-02 09:00:00 (Sun)
  62761334400, #      utc_end 1989-10-29 08:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62761334400, #    utc_start 1989-10-29 08:00:00 (Sun)
  62774643600, #      utc_end 1990-04-01 09:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62774643600, #    utc_start 1990-04-01 09:00:00 (Sun)
  62792784000, #      utc_end 1990-10-28 08:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62792784000, #    utc_start 1990-10-28 08:00:00 (Sun)
  62806698000, #      utc_end 1991-04-07 09:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62806698000, #    utc_start 1991-04-07 09:00:00 (Sun)
  62824233600, #      utc_end 1991-10-27 08:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62824233600, #    utc_start 1991-10-27 08:00:00 (Sun)
  62838147600, #      utc_end 1992-04-05 09:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62838147600, #    utc_start 1992-04-05 09:00:00 (Sun)
  62855683200, #      utc_end 1992-10-25 08:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62855683200, #    utc_start 1992-10-25 08:00:00 (Sun)
  62869597200, #      utc_end 1993-04-04 09:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62869597200, #    utc_start 1993-04-04 09:00:00 (Sun)
  62887737600, #      utc_end 1993-10-31 08:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62887737600, #    utc_start 1993-10-31 08:00:00 (Sun)
  62901046800, #      utc_end 1994-04-03 09:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62901046800, #    utc_start 1994-04-03 09:00:00 (Sun)
  62919187200, #      utc_end 1994-10-30 08:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62919187200, #    utc_start 1994-10-30 08:00:00 (Sun)
  62932496400, #      utc_end 1995-04-02 09:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62932496400, #    utc_start 1995-04-02 09:00:00 (Sun)
  62950636800, #      utc_end 1995-10-29 08:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62950636800, #    utc_start 1995-10-29 08:00:00 (Sun)
  62964550800, #      utc_end 1996-04-07 09:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62964550800, #    utc_start 1996-04-07 09:00:00 (Sun)
  62982086400, #      utc_end 1996-10-27 08:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62982086400, #    utc_start 1996-10-27 08:00:00 (Sun)
  62996000400, #      utc_end 1997-04-06 09:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62996000400, #    utc_start 1997-04-06 09:00:00 (Sun)
  63013536000, #      utc_end 1997-10-26 08:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63013536000, #    utc_start 1997-10-26 08:00:00 (Sun)
  63027450000, #      utc_end 1998-04-05 09:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63027450000, #    utc_start 1998-04-05 09:00:00 (Sun)
  63044985600, #      utc_end 1998-10-25 08:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63044985600, #    utc_start 1998-10-25 08:00:00 (Sun)
  63058899600, #      utc_end 1999-04-04 09:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63058899600, #    utc_start 1999-04-04 09:00:00 (Sun)
  63077040000, #      utc_end 1999-10-31 08:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63077040000, #    utc_start 1999-10-31 08:00:00 (Sun)
  63090349200, #      utc_end 2000-04-02 09:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63090349200, #    utc_start 2000-04-02 09:00:00 (Sun)
  63108489600, #      utc_end 2000-10-29 08:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63108489600, #    utc_start 2000-10-29 08:00:00 (Sun)
  63121798800, #      utc_end 2001-04-01 09:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63121798800, #    utc_start 2001-04-01 09:00:00 (Sun)
  63139939200, #      utc_end 2001-10-28 08:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63139939200, #    utc_start 2001-10-28 08:00:00 (Sun)
  63153853200, #      utc_end 2002-04-07 09:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63153853200, #    utc_start 2002-04-07 09:00:00 (Sun)
  63171388800, #      utc_end 2002-10-27 08:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63171388800, #    utc_start 2002-10-27 08:00:00 (Sun)
  63185302800, #      utc_end 2003-04-06 09:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63185302800, #    utc_start 2003-04-06 09:00:00 (Sun)
  63202838400, #      utc_end 2003-10-26 08:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63202838400, #    utc_start 2003-10-26 08:00:00 (Sun)
  63216752400, #      utc_end 2004-04-04 09:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63216752400, #    utc_start 2004-04-04 09:00:00 (Sun)
  63234892800, #      utc_end 2004-10-31 08:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63234892800, #    utc_start 2004-10-31 08:00:00 (Sun)
  63248202000, #      utc_end 2005-04-03 09:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63248202000, #    utc_start 2005-04-03 09:00:00 (Sun)
  63266342400, #      utc_end 2005-10-30 08:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63266342400, #    utc_start 2005-10-30 08:00:00 (Sun)
  63279651600, #      utc_end 2006-04-02 09:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63279651600, #    utc_start 2006-04-02 09:00:00 (Sun)
  63297792000, #      utc_end 2006-10-29 08:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63297792000, #    utc_start 2006-10-29 08:00:00 (Sun)
  63309286800, #      utc_end 2007-03-11 09:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63309286800, #    utc_start 2007-03-11 09:00:00 (Sun)
  63329846400, #      utc_end 2007-11-04 08:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63329846400, #    utc_start 2007-11-04 08:00:00 (Sun)
  63340736400, #      utc_end 2008-03-09 09:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63340736400, #    utc_start 2008-03-09 09:00:00 (Sun)
  63361296000, #      utc_end 2008-11-02 08:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63361296000, #    utc_start 2008-11-02 08:00:00 (Sun)
  63372186000, #      utc_end 2009-03-08 09:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63372186000, #    utc_start 2009-03-08 09:00:00 (Sun)
  63392745600, #      utc_end 2009-11-01 08:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63392745600, #    utc_start 2009-11-01 08:00:00 (Sun)
  63404240400, #      utc_end 2010-03-14 09:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63404240400, #    utc_start 2010-03-14 09:00:00 (Sun)
  63424800000, #      utc_end 2010-11-07 08:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63424800000, #    utc_start 2010-11-07 08:00:00 (Sun)
  63435690000, #      utc_end 2011-03-13 09:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63435690000, #    utc_start 2011-03-13 09:00:00 (Sun)
  63456249600, #      utc_end 2011-11-06 08:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63456249600, #    utc_start 2011-11-06 08:00:00 (Sun)
  63467139600, #      utc_end 2012-03-11 09:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63467139600, #    utc_start 2012-03-11 09:00:00 (Sun)
  63487699200, #      utc_end 2012-11-04 08:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63487699200, #    utc_start 2012-11-04 08:00:00 (Sun)
  63498589200, #      utc_end 2013-03-10 09:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63498589200, #    utc_start 2013-03-10 09:00:00 (Sun)
  63519148800, #      utc_end 2013-11-03 08:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63519148800, #    utc_start 2013-11-03 08:00:00 (Sun)
  63530038800, #      utc_end 2014-03-09 09:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63530038800, #    utc_start 2014-03-09 09:00:00 (Sun)
  63550598400, #      utc_end 2014-11-02 08:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63550598400, #    utc_start 2014-11-02 08:00:00 (Sun)
  63561488400, #      utc_end 2015-03-08 09:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63561488400, #    utc_start 2015-03-08 09:00:00 (Sun)
  63582048000, #      utc_end 2015-11-01 08:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63582048000, #    utc_start 2015-11-01 08:00:00 (Sun)
  63593542800, #      utc_end 2016-03-13 09:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63593542800, #    utc_start 2016-03-13 09:00:00 (Sun)
  63614102400, #      utc_end 2016-11-06 08:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63614102400, #    utc_start 2016-11-06 08:00:00 (Sun)
  63624992400, #      utc_end 2017-03-12 09:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63624992400, #    utc_start 2017-03-12 09:00:00 (Sun)
  63645552000, #      utc_end 2017-11-05 08:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63645552000, #    utc_start 2017-11-05 08:00:00 (Sun)
  63656442000, #      utc_end 2018-03-11 09:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63656442000, #    utc_start 2018-03-11 09:00:00 (Sun)
  63677001600, #      utc_end 2018-11-04 08:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63677001600, #    utc_start 2018-11-04 08:00:00 (Sun)
  63687891600, #      utc_end 2019-03-10 09:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63687891600, #    utc_start 2019-03-10 09:00:00 (Sun)
  63708451200, #      utc_end 2019-11-03 08:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63708451200, #    utc_start 2019-11-03 08:00:00 (Sun)
  63719341200, #      utc_end 2020-03-08 09:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63719341200, #    utc_start 2020-03-08 09:00:00 (Sun)
  63739900800, #      utc_end 2020-11-01 08:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63739900800, #    utc_start 2020-11-01 08:00:00 (Sun)
  63751395600, #      utc_end 2021-03-14 09:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63751395600, #    utc_start 2021-03-14 09:00:00 (Sun)
  63771955200, #      utc_end 2021-11-07 08:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63771955200, #    utc_start 2021-11-07 08:00:00 (Sun)
  63782845200, #      utc_end 2022-03-13 09:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63782845200, #    utc_start 2022-03-13 09:00:00 (Sun)
  63803404800, #      utc_end 2022-11-06 08:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63803404800, #    utc_start 2022-11-06 08:00:00 (Sun)
  63814294800, #      utc_end 2023-03-12 09:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63814294800, #    utc_start 2023-03-12 09:00:00 (Sun)
  63834854400, #      utc_end 2023-11-05 08:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63834854400, #    utc_start 2023-11-05 08:00:00 (Sun)
  63845744400, #      utc_end 2024-03-10 09:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63845744400, #    utc_start 2024-03-10 09:00:00 (Sun)
  63866304000, #      utc_end 2024-11-03 08:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63866304000, #    utc_start 2024-11-03 08:00:00 (Sun)
  63877194000, #      utc_end 2025-03-09 09:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63877194000, #    utc_start 2025-03-09 09:00:00 (Sun)
  63897753600, #      utc_end 2025-11-02 08:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63897753600, #    utc_start 2025-11-02 08:00:00 (Sun)
  63908643600, #      utc_end 2026-03-08 09:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63908643600, #    utc_start 2026-03-08 09:00:00 (Sun)
  63929203200, #      utc_end 2026-11-01 08:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63929203200, #    utc_start 2026-11-01 08:00:00 (Sun)
  63940698000, #      utc_end 2027-03-14 09:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63940698000, #    utc_start 2027-03-14 09:00:00 (Sun)
  63961257600, #      utc_end 2027-11-07 08:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {67}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -25200 }
  
  my $last_observance = bless( {
    'format' => 'M%sT',
    'gmtoff' => '-7:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 725372,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 725372,
      'utc_rd_secs' => 0,
      'utc_year' => 1988
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -25200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 725372,
      'local_rd_secs' => 25200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 725372,
      'utc_rd_secs' => 25200,
      'utc_year' => 1988
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_EDMONTON

    $main::fatpacked{"DateTime/TimeZone/America/Eirunepe.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_EIRUNEPE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Eirunepe;
  $DateTime::TimeZone::America::Eirunepe::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Eirunepe::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368474368, #      utc_end 1914-01-01 04:39:28 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  -16768,
  0,
  'LMT',
      ],
      [
  60368474368, #    utc_start 1914-01-01 04:39:28 (Thu)
  60928732800, #      utc_end 1931-10-03 16:00:00 (Sat)
  60368456368, #  local_start 1913-12-31 23:39:28 (Wed)
  60928714800, #    local_end 1931-10-03 11:00:00 (Sat)
  -18000,
  0,
  'ACT',
      ],
      [
  60928732800, #    utc_start 1931-10-03 16:00:00 (Sat)
  60944328000, #      utc_end 1932-04-01 04:00:00 (Fri)
  60928718400, #  local_start 1931-10-03 12:00:00 (Sat)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -14400,
  1,
  'ACST',
      ],
      [
  60944328000, #    utc_start 1932-04-01 04:00:00 (Fri)
  60960315600, #      utc_end 1932-10-03 05:00:00 (Mon)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60960297600, #    local_end 1932-10-03 00:00:00 (Mon)
  -18000,
  0,
  'ACT',
      ],
      [
  60960315600, #    utc_start 1932-10-03 05:00:00 (Mon)
  60975864000, #      utc_end 1933-04-01 04:00:00 (Sat)
  60960301200, #  local_start 1932-10-03 01:00:00 (Mon)
  60975849600, #    local_end 1933-04-01 00:00:00 (Sat)
  -14400,
  1,
  'ACST',
      ],
      [
  60975864000, #    utc_start 1933-04-01 04:00:00 (Sat)
  61501870800, #      utc_end 1949-12-01 05:00:00 (Thu)
  60975846000, #  local_start 1933-03-31 23:00:00 (Fri)
  61501852800, #    local_end 1949-12-01 00:00:00 (Thu)
  -18000,
  0,
  'ACT',
      ],
      [
  61501870800, #    utc_start 1949-12-01 05:00:00 (Thu)
  61513621200, #      utc_end 1950-04-16 05:00:00 (Sun)
  61501856400, #  local_start 1949-12-01 01:00:00 (Thu)
  61513606800, #    local_end 1950-04-16 01:00:00 (Sun)
  -14400,
  1,
  'ACST',
      ],
      [
  61513621200, #    utc_start 1950-04-16 05:00:00 (Sun)
  61533406800, #      utc_end 1950-12-01 05:00:00 (Fri)
  61513603200, #  local_start 1950-04-16 00:00:00 (Sun)
  61533388800, #    local_end 1950-12-01 00:00:00 (Fri)
  -18000,
  0,
  'ACT',
      ],
      [
  61533406800, #    utc_start 1950-12-01 05:00:00 (Fri)
  61543857600, #      utc_end 1951-04-01 04:00:00 (Sun)
  61533392400, #  local_start 1950-12-01 01:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  -14400,
  1,
  'ACST',
      ],
      [
  61543857600, #    utc_start 1951-04-01 04:00:00 (Sun)
  61564942800, #      utc_end 1951-12-01 05:00:00 (Sat)
  61543839600, #  local_start 1951-03-31 23:00:00 (Sat)
  61564924800, #    local_end 1951-12-01 00:00:00 (Sat)
  -18000,
  0,
  'ACT',
      ],
      [
  61564942800, #    utc_start 1951-12-01 05:00:00 (Sat)
  61575480000, #      utc_end 1952-04-01 04:00:00 (Tue)
  61564928400, #  local_start 1951-12-01 01:00:00 (Sat)
  61575465600, #    local_end 1952-04-01 00:00:00 (Tue)
  -14400,
  1,
  'ACST',
      ],
      [
  61575480000, #    utc_start 1952-04-01 04:00:00 (Tue)
  61596565200, #      utc_end 1952-12-01 05:00:00 (Mon)
  61575462000, #  local_start 1952-03-31 23:00:00 (Mon)
  61596547200, #    local_end 1952-12-01 00:00:00 (Mon)
  -18000,
  0,
  'ACT',
      ],
      [
  61596565200, #    utc_start 1952-12-01 05:00:00 (Mon)
  61604337600, #      utc_end 1953-03-01 04:00:00 (Sun)
  61596550800, #  local_start 1952-12-01 01:00:00 (Mon)
  61604323200, #    local_end 1953-03-01 00:00:00 (Sun)
  -14400,
  1,
  'ACST',
      ],
      [
  61604337600, #    utc_start 1953-03-01 04:00:00 (Sun)
  61944325200, #      utc_end 1963-12-09 05:00:00 (Mon)
  61604319600, #  local_start 1953-02-28 23:00:00 (Sat)
  61944307200, #    local_end 1963-12-09 00:00:00 (Mon)
  -18000,
  0,
  'ACT',
      ],
      [
  61944325200, #    utc_start 1963-12-09 05:00:00 (Mon)
  61951492800, #      utc_end 1964-03-01 04:00:00 (Sun)
  61944310800, #  local_start 1963-12-09 01:00:00 (Mon)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -14400,
  1,
  'ACST',
      ],
      [
  61951492800, #    utc_start 1964-03-01 04:00:00 (Sun)
  61980526800, #      utc_end 1965-01-31 05:00:00 (Sun)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61980508800, #    local_end 1965-01-31 00:00:00 (Sun)
  -18000,
  0,
  'ACT',
      ],
      [
  61980526800, #    utc_start 1965-01-31 05:00:00 (Sun)
  61985620800, #      utc_end 1965-03-31 04:00:00 (Wed)
  61980512400, #  local_start 1965-01-31 01:00:00 (Sun)
  61985606400, #    local_end 1965-03-31 00:00:00 (Wed)
  -14400,
  1,
  'ACST',
      ],
      [
  61985620800, #    utc_start 1965-03-31 04:00:00 (Wed)
  62006792400, #      utc_end 1965-12-01 05:00:00 (Wed)
  61985602800, #  local_start 1965-03-30 23:00:00 (Tue)
  62006774400, #    local_end 1965-12-01 00:00:00 (Wed)
  -18000,
  0,
  'ACT',
      ],
      [
  62006792400, #    utc_start 1965-12-01 05:00:00 (Wed)
  62014564800, #      utc_end 1966-03-01 04:00:00 (Tue)
  62006778000, #  local_start 1965-12-01 01:00:00 (Wed)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -14400,
  1,
  'ACST',
      ],
      [
  62014564800, #    utc_start 1966-03-01 04:00:00 (Tue)
  62035736400, #      utc_end 1966-11-01 05:00:00 (Tue)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62035718400, #    local_end 1966-11-01 00:00:00 (Tue)
  -18000,
  0,
  'ACT',
      ],
      [
  62035736400, #    utc_start 1966-11-01 05:00:00 (Tue)
  62046100800, #      utc_end 1967-03-01 04:00:00 (Wed)
  62035722000, #  local_start 1966-11-01 01:00:00 (Tue)
  62046086400, #    local_end 1967-03-01 00:00:00 (Wed)
  -14400,
  1,
  'ACST',
      ],
      [
  62046100800, #    utc_start 1967-03-01 04:00:00 (Wed)
  62067272400, #      utc_end 1967-11-01 05:00:00 (Wed)
  62046082800, #  local_start 1967-02-28 23:00:00 (Tue)
  62067254400, #    local_end 1967-11-01 00:00:00 (Wed)
  -18000,
  0,
  'ACT',
      ],
      [
  62067272400, #    utc_start 1967-11-01 05:00:00 (Wed)
  62077723200, #      utc_end 1968-03-01 04:00:00 (Fri)
  62067258000, #  local_start 1967-11-01 01:00:00 (Wed)
  62077708800, #    local_end 1968-03-01 00:00:00 (Fri)
  -14400,
  1,
  'ACST',
      ],
      [
  62077723200, #    utc_start 1968-03-01 04:00:00 (Fri)
  62635438800, #      utc_end 1985-11-02 05:00:00 (Sat)
  62077705200, #  local_start 1968-02-29 23:00:00 (Thu)
  62635420800, #    local_end 1985-11-02 00:00:00 (Sat)
  -18000,
  0,
  'ACT',
      ],
      [
  62635438800, #    utc_start 1985-11-02 05:00:00 (Sat)
  62646926400, #      utc_end 1986-03-15 04:00:00 (Sat)
  62635424400, #  local_start 1985-11-02 01:00:00 (Sat)
  62646912000, #    local_end 1986-03-15 00:00:00 (Sat)
  -14400,
  1,
  'ACST',
      ],
      [
  62646926400, #    utc_start 1986-03-15 04:00:00 (Sat)
  62666283600, #      utc_end 1986-10-25 05:00:00 (Sat)
  62646908400, #  local_start 1986-03-14 23:00:00 (Fri)
  62666265600, #    local_end 1986-10-25 00:00:00 (Sat)
  -18000,
  0,
  'ACT',
      ],
      [
  62666283600, #    utc_start 1986-10-25 05:00:00 (Sat)
  62675956800, #      utc_end 1987-02-14 04:00:00 (Sat)
  62666269200, #  local_start 1986-10-25 01:00:00 (Sat)
  62675942400, #    local_end 1987-02-14 00:00:00 (Sat)
  -14400,
  1,
  'ACST',
      ],
      [
  62675956800, #    utc_start 1987-02-14 04:00:00 (Sat)
  62697819600, #      utc_end 1987-10-25 05:00:00 (Sun)
  62675938800, #  local_start 1987-02-13 23:00:00 (Fri)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -18000,
  0,
  'ACT',
      ],
      [
  62697819600, #    utc_start 1987-10-25 05:00:00 (Sun)
  62706888000, #      utc_end 1988-02-07 04:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62706873600, #    local_end 1988-02-07 00:00:00 (Sun)
  -14400,
  1,
  'ACST',
      ],
      [
  62706888000, #    utc_start 1988-02-07 04:00:00 (Sun)
  62725726800, #      utc_end 1988-09-12 05:00:00 (Mon)
  62706870000, #  local_start 1988-02-06 23:00:00 (Sat)
  62725708800, #    local_end 1988-09-12 00:00:00 (Mon)
  -18000,
  0,
  'ACT',
      ],
      [
  62725726800, #    utc_start 1988-09-12 05:00:00 (Mon)
  62884875600, #      utc_end 1993-09-28 05:00:00 (Tue)
  62725708800, #  local_start 1988-09-12 00:00:00 (Mon)
  62884857600, #    local_end 1993-09-28 00:00:00 (Tue)
  -18000,
  0,
  'ACT',
      ],
      [
  62884875600, #    utc_start 1993-09-28 05:00:00 (Tue)
  62886517200, #      utc_end 1993-10-17 05:00:00 (Sun)
  62884857600, #  local_start 1993-09-28 00:00:00 (Tue)
  62886499200, #    local_end 1993-10-17 00:00:00 (Sun)
  -18000,
  0,
  'ACT',
      ],
      [
  62886517200, #    utc_start 1993-10-17 05:00:00 (Sun)
  62897400000, #      utc_end 1994-02-20 04:00:00 (Sun)
  62886502800, #  local_start 1993-10-17 01:00:00 (Sun)
  62897385600, #    local_end 1994-02-20 00:00:00 (Sun)
  -14400,
  1,
  'ACST',
      ],
      [
  62897400000, #    utc_start 1994-02-20 04:00:00 (Sun)
  62915893200, #      utc_end 1994-09-22 05:00:00 (Thu)
  62897382000, #  local_start 1994-02-19 23:00:00 (Sat)
  62915875200, #    local_end 1994-09-22 00:00:00 (Thu)
  -18000,
  0,
  'ACT',
      ],
      [
  62915893200, #    utc_start 1994-09-22 05:00:00 (Thu)
  63349966800, #      utc_end 2008-06-24 05:00:00 (Tue)
  62915875200, #  local_start 1994-09-22 00:00:00 (Thu)
  63349948800, #    local_end 2008-06-24 00:00:00 (Tue)
  -18000,
  0,
  'ACT',
      ],
      [
  63349966800, #    utc_start 2008-06-24 05:00:00 (Tue)
  63519739200, #      utc_end 2013-11-10 04:00:00 (Sun)
  63349952400, #  local_start 2008-06-24 01:00:00 (Tue)
  63519724800, #    local_end 2013-11-10 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63519739200, #    utc_start 2013-11-10 04:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63519721200, #  local_start 2013-11-09 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -18000,
  0,
  'ACT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {15}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_EIRUNEPE

    $main::fatpacked{"DateTime/TimeZone/America/El_Salvador.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_EL_SALVADOR';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::El_Salvador;
  $DateTime::TimeZone::America::El_Salvador::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::El_Salvador::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60589403808, #      utc_end 1921-01-01 05:56:48 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60589382400, #    local_end 1921-01-01 00:00:00 (Sat)
  -21408,
  0,
  'LMT',
      ],
      [
  60589403808, #    utc_start 1921-01-01 05:56:48 (Sat)
  62682703200, #      utc_end 1987-05-03 06:00:00 (Sun)
  60589382208, #  local_start 1920-12-31 23:56:48 (Fri)
  62682681600, #    local_end 1987-05-03 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62682703200, #    utc_start 1987-05-03 06:00:00 (Sun)
  62695400400, #      utc_end 1987-09-27 05:00:00 (Sun)
  62682685200, #  local_start 1987-05-03 01:00:00 (Sun)
  62695382400, #    local_end 1987-09-27 00:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62695400400, #    utc_start 1987-09-27 05:00:00 (Sun)
  62714152800, #      utc_end 1988-05-01 06:00:00 (Sun)
  62695378800, #  local_start 1987-09-26 23:00:00 (Sat)
  62714131200, #    local_end 1988-05-01 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62714152800, #    utc_start 1988-05-01 06:00:00 (Sun)
  62726850000, #      utc_end 1988-09-25 05:00:00 (Sun)
  62714134800, #  local_start 1988-05-01 01:00:00 (Sun)
  62726832000, #    local_end 1988-09-25 00:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62726850000, #    utc_start 1988-09-25 05:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  62726828400, #  local_start 1988-09-24 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -21600,
  0,
  'CST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {2}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_EL_SALVADOR

    $main::fatpacked{"DateTime/TimeZone/America/Fort_Nelson.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_FORT_NELSON';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Fort_Nelson;
  $DateTime::TimeZone::America::Fort_Nelson::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Fort_Nelson::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59421802247, #      utc_end 1884-01-01 08:10:47 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59421772800, #    local_end 1884-01-01 00:00:00 (Tue)
  -29447,
  0,
  'LMT',
      ],
      [
  59421802247, #    utc_start 1884-01-01 08:10:47 (Tue)
  60503623200, #      utc_end 1918-04-14 10:00:00 (Sun)
  59421773447, #  local_start 1884-01-01 00:10:47 (Tue)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  60503623200, #    utc_start 1918-04-14 10:00:00 (Sun)
  60520554000, #      utc_end 1918-10-27 09:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  60520554000, #    utc_start 1918-10-27 09:00:00 (Sun)
  61255476000, #      utc_end 1942-02-09 10:00:00 (Mon)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -28800,
  0,
  'PST',
      ],
      [
  61255476000, #    utc_start 1942-02-09 10:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366262400, #    local_end 1945-08-14 16:00:00 (Tue)
  -25200,
  1,
  'PWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370298000, #      utc_end 1945-09-30 09:00:00 (Sun)
  61366262400, #  local_start 1945-08-14 16:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PPT',
      ],
      [
  61370298000, #    utc_start 1945-09-30 09:00:00 (Sun)
  61378329600, #      utc_end 1946-01-01 08:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -28800,
  0,
  'PST',
      ],
      [
  61378329600, #    utc_start 1946-01-01 08:00:00 (Tue)
  61409865600, #      utc_end 1947-01-01 08:00:00 (Wed)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61409836800, #    local_end 1947-01-01 00:00:00 (Wed)
  -28800,
  0,
  'PST',
      ],
      [
  61409865600, #    utc_start 1947-01-01 08:00:00 (Wed)
  61419895200, #      utc_end 1947-04-27 10:00:00 (Sun)
  61409836800, #  local_start 1947-01-01 00:00:00 (Wed)
  61419866400, #    local_end 1947-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61419895200, #    utc_start 1947-04-27 10:00:00 (Sun)
  61433197200, #      utc_end 1947-09-28 09:00:00 (Sun)
  61419870000, #  local_start 1947-04-27 03:00:00 (Sun)
  61433172000, #    local_end 1947-09-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61433197200, #    utc_start 1947-09-28 09:00:00 (Sun)
  61451344800, #      utc_end 1948-04-25 10:00:00 (Sun)
  61433168400, #  local_start 1947-09-28 01:00:00 (Sun)
  61451316000, #    local_end 1948-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61451344800, #    utc_start 1948-04-25 10:00:00 (Sun)
  61464646800, #      utc_end 1948-09-26 09:00:00 (Sun)
  61451319600, #  local_start 1948-04-25 03:00:00 (Sun)
  61464621600, #    local_end 1948-09-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61464646800, #    utc_start 1948-09-26 09:00:00 (Sun)
  61482794400, #      utc_end 1949-04-24 10:00:00 (Sun)
  61464618000, #  local_start 1948-09-26 01:00:00 (Sun)
  61482765600, #    local_end 1949-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61482794400, #    utc_start 1949-04-24 10:00:00 (Sun)
  61496096400, #      utc_end 1949-09-25 09:00:00 (Sun)
  61482769200, #  local_start 1949-04-24 03:00:00 (Sun)
  61496071200, #    local_end 1949-09-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61496096400, #    utc_start 1949-09-25 09:00:00 (Sun)
  61514848800, #      utc_end 1950-04-30 10:00:00 (Sun)
  61496067600, #  local_start 1949-09-25 01:00:00 (Sun)
  61514820000, #    local_end 1950-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61514848800, #    utc_start 1950-04-30 10:00:00 (Sun)
  61527546000, #      utc_end 1950-09-24 09:00:00 (Sun)
  61514823600, #  local_start 1950-04-30 03:00:00 (Sun)
  61527520800, #    local_end 1950-09-24 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61527546000, #    utc_start 1950-09-24 09:00:00 (Sun)
  61546298400, #      utc_end 1951-04-29 10:00:00 (Sun)
  61527517200, #  local_start 1950-09-24 01:00:00 (Sun)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61546298400, #    utc_start 1951-04-29 10:00:00 (Sun)
  61559600400, #      utc_end 1951-09-30 09:00:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61559600400, #    utc_start 1951-09-30 09:00:00 (Sun)
  61577748000, #      utc_end 1952-04-27 10:00:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61577748000, #    utc_start 1952-04-27 10:00:00 (Sun)
  61591050000, #      utc_end 1952-09-28 09:00:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61591050000, #    utc_start 1952-09-28 09:00:00 (Sun)
  61609197600, #      utc_end 1953-04-26 10:00:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61609197600, #    utc_start 1953-04-26 10:00:00 (Sun)
  61622499600, #      utc_end 1953-09-27 09:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61622499600, #    utc_start 1953-09-27 09:00:00 (Sun)
  61640647200, #      utc_end 1954-04-25 10:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61640647200, #    utc_start 1954-04-25 10:00:00 (Sun)
  61653949200, #      utc_end 1954-09-26 09:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61653949200, #    utc_start 1954-09-26 09:00:00 (Sun)
  61672096800, #      utc_end 1955-04-24 10:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61672096800, #    utc_start 1955-04-24 10:00:00 (Sun)
  61685398800, #      utc_end 1955-09-25 09:00:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61685373600, #    local_end 1955-09-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61685398800, #    utc_start 1955-09-25 09:00:00 (Sun)
  61704151200, #      utc_end 1956-04-29 10:00:00 (Sun)
  61685370000, #  local_start 1955-09-25 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61704151200, #    utc_start 1956-04-29 10:00:00 (Sun)
  61717453200, #      utc_end 1956-09-30 09:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61717428000, #    local_end 1956-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61717453200, #    utc_start 1956-09-30 09:00:00 (Sun)
  61735600800, #      utc_end 1957-04-28 10:00:00 (Sun)
  61717424400, #  local_start 1956-09-30 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61735600800, #    utc_start 1957-04-28 10:00:00 (Sun)
  61748902800, #      utc_end 1957-09-29 09:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61748902800, #    utc_start 1957-09-29 09:00:00 (Sun)
  61767050400, #      utc_end 1958-04-27 10:00:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61767050400, #    utc_start 1958-04-27 10:00:00 (Sun)
  61780352400, #      utc_end 1958-09-28 09:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61780327200, #    local_end 1958-09-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61780352400, #    utc_start 1958-09-28 09:00:00 (Sun)
  61798500000, #      utc_end 1959-04-26 10:00:00 (Sun)
  61780323600, #  local_start 1958-09-28 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61798500000, #    utc_start 1959-04-26 10:00:00 (Sun)
  61811802000, #      utc_end 1959-09-27 09:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61811776800, #    local_end 1959-09-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61811802000, #    utc_start 1959-09-27 09:00:00 (Sun)
  61829949600, #      utc_end 1960-04-24 10:00:00 (Sun)
  61811773200, #  local_start 1959-09-27 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61829949600, #    utc_start 1960-04-24 10:00:00 (Sun)
  61843251600, #      utc_end 1960-09-25 09:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61843226400, #    local_end 1960-09-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61843251600, #    utc_start 1960-09-25 09:00:00 (Sun)
  61862004000, #      utc_end 1961-04-30 10:00:00 (Sun)
  61843222800, #  local_start 1960-09-25 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61862004000, #    utc_start 1961-04-30 10:00:00 (Sun)
  61874701200, #      utc_end 1961-09-24 09:00:00 (Sun)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  61874676000, #    local_end 1961-09-24 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61874701200, #    utc_start 1961-09-24 09:00:00 (Sun)
  61893453600, #      utc_end 1962-04-29 10:00:00 (Sun)
  61874672400, #  local_start 1961-09-24 01:00:00 (Sun)
  61893424800, #    local_end 1962-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61893453600, #    utc_start 1962-04-29 10:00:00 (Sun)
  61909174800, #      utc_end 1962-10-28 09:00:00 (Sun)
  61893428400, #  local_start 1962-04-29 03:00:00 (Sun)
  61909149600, #    local_end 1962-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61909174800, #    utc_start 1962-10-28 09:00:00 (Sun)
  61924903200, #      utc_end 1963-04-28 10:00:00 (Sun)
  61909146000, #  local_start 1962-10-28 01:00:00 (Sun)
  61924874400, #    local_end 1963-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61924903200, #    utc_start 1963-04-28 10:00:00 (Sun)
  61940624400, #      utc_end 1963-10-27 09:00:00 (Sun)
  61924878000, #  local_start 1963-04-28 03:00:00 (Sun)
  61940599200, #    local_end 1963-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61940624400, #    utc_start 1963-10-27 09:00:00 (Sun)
  61956352800, #      utc_end 1964-04-26 10:00:00 (Sun)
  61940595600, #  local_start 1963-10-27 01:00:00 (Sun)
  61956324000, #    local_end 1964-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61956352800, #    utc_start 1964-04-26 10:00:00 (Sun)
  61972074000, #      utc_end 1964-10-25 09:00:00 (Sun)
  61956327600, #  local_start 1964-04-26 03:00:00 (Sun)
  61972048800, #    local_end 1964-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61972074000, #    utc_start 1964-10-25 09:00:00 (Sun)
  61987802400, #      utc_end 1965-04-25 10:00:00 (Sun)
  61972045200, #  local_start 1964-10-25 01:00:00 (Sun)
  61987773600, #    local_end 1965-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61987802400, #    utc_start 1965-04-25 10:00:00 (Sun)
  62004128400, #      utc_end 1965-10-31 09:00:00 (Sun)
  61987777200, #  local_start 1965-04-25 03:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62004128400, #    utc_start 1965-10-31 09:00:00 (Sun)
  62019252000, #      utc_end 1966-04-24 10:00:00 (Sun)
  62004099600, #  local_start 1965-10-31 01:00:00 (Sun)
  62019223200, #    local_end 1966-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62019252000, #    utc_start 1966-04-24 10:00:00 (Sun)
  62035578000, #      utc_end 1966-10-30 09:00:00 (Sun)
  62019226800, #  local_start 1966-04-24 03:00:00 (Sun)
  62035552800, #    local_end 1966-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62035578000, #    utc_start 1966-10-30 09:00:00 (Sun)
  62051306400, #      utc_end 1967-04-30 10:00:00 (Sun)
  62035549200, #  local_start 1966-10-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62051306400, #    utc_start 1967-04-30 10:00:00 (Sun)
  62067027600, #      utc_end 1967-10-29 09:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62067027600, #    utc_start 1967-10-29 09:00:00 (Sun)
  62082756000, #      utc_end 1968-04-28 10:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62082756000, #    utc_start 1968-04-28 10:00:00 (Sun)
  62098477200, #      utc_end 1968-10-27 09:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62098477200, #    utc_start 1968-10-27 09:00:00 (Sun)
  62114205600, #      utc_end 1969-04-27 10:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62114205600, #    utc_start 1969-04-27 10:00:00 (Sun)
  62129926800, #      utc_end 1969-10-26 09:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62129926800, #    utc_start 1969-10-26 09:00:00 (Sun)
  62145655200, #      utc_end 1970-04-26 10:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62145655200, #    utc_start 1970-04-26 10:00:00 (Sun)
  62161376400, #      utc_end 1970-10-25 09:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62161376400, #    utc_start 1970-10-25 09:00:00 (Sun)
  62177104800, #      utc_end 1971-04-25 10:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62177104800, #    utc_start 1971-04-25 10:00:00 (Sun)
  62193430800, #      utc_end 1971-10-31 09:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62193430800, #    utc_start 1971-10-31 09:00:00 (Sun)
  62209159200, #      utc_end 1972-04-30 10:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62209159200, #    utc_start 1972-04-30 10:00:00 (Sun)
  62224880400, #      utc_end 1972-10-29 09:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62224880400, #    utc_start 1972-10-29 09:00:00 (Sun)
  62240608800, #      utc_end 1973-04-29 10:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62240608800, #    utc_start 1973-04-29 10:00:00 (Sun)
  62256330000, #      utc_end 1973-10-28 09:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62256330000, #    utc_start 1973-10-28 09:00:00 (Sun)
  62272058400, #      utc_end 1974-04-28 10:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62272029600, #    local_end 1974-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62272058400, #    utc_start 1974-04-28 10:00:00 (Sun)
  62287779600, #      utc_end 1974-10-27 09:00:00 (Sun)
  62272033200, #  local_start 1974-04-28 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62287779600, #    utc_start 1974-10-27 09:00:00 (Sun)
  62303508000, #      utc_end 1975-04-27 10:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62303479200, #    local_end 1975-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62303508000, #    utc_start 1975-04-27 10:00:00 (Sun)
  62319229200, #      utc_end 1975-10-26 09:00:00 (Sun)
  62303482800, #  local_start 1975-04-27 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62319229200, #    utc_start 1975-10-26 09:00:00 (Sun)
  62334957600, #      utc_end 1976-04-25 10:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62334957600, #    utc_start 1976-04-25 10:00:00 (Sun)
  62351283600, #      utc_end 1976-10-31 09:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62351283600, #    utc_start 1976-10-31 09:00:00 (Sun)
  62366407200, #      utc_end 1977-04-24 10:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62366407200, #    utc_start 1977-04-24 10:00:00 (Sun)
  62382733200, #      utc_end 1977-10-30 09:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62382733200, #    utc_start 1977-10-30 09:00:00 (Sun)
  62398461600, #      utc_end 1978-04-30 10:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62398461600, #    utc_start 1978-04-30 10:00:00 (Sun)
  62414182800, #      utc_end 1978-10-29 09:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62414182800, #    utc_start 1978-10-29 09:00:00 (Sun)
  62429911200, #      utc_end 1979-04-29 10:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62429911200, #    utc_start 1979-04-29 10:00:00 (Sun)
  62445632400, #      utc_end 1979-10-28 09:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62445632400, #    utc_start 1979-10-28 09:00:00 (Sun)
  62461360800, #      utc_end 1980-04-27 10:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62461360800, #    utc_start 1980-04-27 10:00:00 (Sun)
  62477082000, #      utc_end 1980-10-26 09:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62477082000, #    utc_start 1980-10-26 09:00:00 (Sun)
  62492810400, #      utc_end 1981-04-26 10:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62492810400, #    utc_start 1981-04-26 10:00:00 (Sun)
  62508531600, #      utc_end 1981-10-25 09:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62508531600, #    utc_start 1981-10-25 09:00:00 (Sun)
  62524260000, #      utc_end 1982-04-25 10:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62524260000, #    utc_start 1982-04-25 10:00:00 (Sun)
  62540586000, #      utc_end 1982-10-31 09:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62540586000, #    utc_start 1982-10-31 09:00:00 (Sun)
  62555709600, #      utc_end 1983-04-24 10:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62555709600, #    utc_start 1983-04-24 10:00:00 (Sun)
  62572035600, #      utc_end 1983-10-30 09:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62572035600, #    utc_start 1983-10-30 09:00:00 (Sun)
  62587764000, #      utc_end 1984-04-29 10:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62587764000, #    utc_start 1984-04-29 10:00:00 (Sun)
  62603485200, #      utc_end 1984-10-28 09:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62603485200, #    utc_start 1984-10-28 09:00:00 (Sun)
  62619213600, #      utc_end 1985-04-28 10:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62619213600, #    utc_start 1985-04-28 10:00:00 (Sun)
  62634934800, #      utc_end 1985-10-27 09:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62634934800, #    utc_start 1985-10-27 09:00:00 (Sun)
  62650663200, #      utc_end 1986-04-27 10:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62650663200, #    utc_start 1986-04-27 10:00:00 (Sun)
  62666384400, #      utc_end 1986-10-26 09:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62666384400, #    utc_start 1986-10-26 09:00:00 (Sun)
  62672169600, #      utc_end 1987-01-01 08:00:00 (Thu)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62672140800, #    local_end 1987-01-01 00:00:00 (Thu)
  -28800,
  0,
  'PST',
      ],
      [
  62672169600, #    utc_start 1987-01-01 08:00:00 (Thu)
  62680298400, #      utc_end 1987-04-05 10:00:00 (Sun)
  62672140800, #  local_start 1987-01-01 00:00:00 (Thu)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62680298400, #    utc_start 1987-04-05 10:00:00 (Sun)
  62697834000, #      utc_end 1987-10-25 09:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62697834000, #    utc_start 1987-10-25 09:00:00 (Sun)
  62711748000, #      utc_end 1988-04-03 10:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62711748000, #    utc_start 1988-04-03 10:00:00 (Sun)
  62729888400, #      utc_end 1988-10-30 09:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62729888400, #    utc_start 1988-10-30 09:00:00 (Sun)
  62743197600, #      utc_end 1989-04-02 10:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62743197600, #    utc_start 1989-04-02 10:00:00 (Sun)
  62761338000, #      utc_end 1989-10-29 09:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62761338000, #    utc_start 1989-10-29 09:00:00 (Sun)
  62774647200, #      utc_end 1990-04-01 10:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62774647200, #    utc_start 1990-04-01 10:00:00 (Sun)
  62792787600, #      utc_end 1990-10-28 09:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62792787600, #    utc_start 1990-10-28 09:00:00 (Sun)
  62806701600, #      utc_end 1991-04-07 10:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62806701600, #    utc_start 1991-04-07 10:00:00 (Sun)
  62824237200, #      utc_end 1991-10-27 09:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62824237200, #    utc_start 1991-10-27 09:00:00 (Sun)
  62838151200, #      utc_end 1992-04-05 10:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62838151200, #    utc_start 1992-04-05 10:00:00 (Sun)
  62855686800, #      utc_end 1992-10-25 09:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62855686800, #    utc_start 1992-10-25 09:00:00 (Sun)
  62869600800, #      utc_end 1993-04-04 10:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62869600800, #    utc_start 1993-04-04 10:00:00 (Sun)
  62887741200, #      utc_end 1993-10-31 09:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62887741200, #    utc_start 1993-10-31 09:00:00 (Sun)
  62901050400, #      utc_end 1994-04-03 10:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62901050400, #    utc_start 1994-04-03 10:00:00 (Sun)
  62919190800, #      utc_end 1994-10-30 09:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62919190800, #    utc_start 1994-10-30 09:00:00 (Sun)
  62932500000, #      utc_end 1995-04-02 10:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62932500000, #    utc_start 1995-04-02 10:00:00 (Sun)
  62950640400, #      utc_end 1995-10-29 09:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62950640400, #    utc_start 1995-10-29 09:00:00 (Sun)
  62964554400, #      utc_end 1996-04-07 10:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62964554400, #    utc_start 1996-04-07 10:00:00 (Sun)
  62982090000, #      utc_end 1996-10-27 09:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62982090000, #    utc_start 1996-10-27 09:00:00 (Sun)
  62996004000, #      utc_end 1997-04-06 10:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62996004000, #    utc_start 1997-04-06 10:00:00 (Sun)
  63013539600, #      utc_end 1997-10-26 09:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63013539600, #    utc_start 1997-10-26 09:00:00 (Sun)
  63027453600, #      utc_end 1998-04-05 10:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63027453600, #    utc_start 1998-04-05 10:00:00 (Sun)
  63044989200, #      utc_end 1998-10-25 09:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63044989200, #    utc_start 1998-10-25 09:00:00 (Sun)
  63058903200, #      utc_end 1999-04-04 10:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63058903200, #    utc_start 1999-04-04 10:00:00 (Sun)
  63077043600, #      utc_end 1999-10-31 09:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63077043600, #    utc_start 1999-10-31 09:00:00 (Sun)
  63090352800, #      utc_end 2000-04-02 10:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63090352800, #    utc_start 2000-04-02 10:00:00 (Sun)
  63108493200, #      utc_end 2000-10-29 09:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63108493200, #    utc_start 2000-10-29 09:00:00 (Sun)
  63121802400, #      utc_end 2001-04-01 10:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63121802400, #    utc_start 2001-04-01 10:00:00 (Sun)
  63139942800, #      utc_end 2001-10-28 09:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63139942800, #    utc_start 2001-10-28 09:00:00 (Sun)
  63153856800, #      utc_end 2002-04-07 10:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63153856800, #    utc_start 2002-04-07 10:00:00 (Sun)
  63171392400, #      utc_end 2002-10-27 09:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63171392400, #    utc_start 2002-10-27 09:00:00 (Sun)
  63185306400, #      utc_end 2003-04-06 10:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63185306400, #    utc_start 2003-04-06 10:00:00 (Sun)
  63202842000, #      utc_end 2003-10-26 09:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63202842000, #    utc_start 2003-10-26 09:00:00 (Sun)
  63216756000, #      utc_end 2004-04-04 10:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63216756000, #    utc_start 2004-04-04 10:00:00 (Sun)
  63234896400, #      utc_end 2004-10-31 09:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63234896400, #    utc_start 2004-10-31 09:00:00 (Sun)
  63248205600, #      utc_end 2005-04-03 10:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63248205600, #    utc_start 2005-04-03 10:00:00 (Sun)
  63266346000, #      utc_end 2005-10-30 09:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63266346000, #    utc_start 2005-10-30 09:00:00 (Sun)
  63279655200, #      utc_end 2006-04-02 10:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63279655200, #    utc_start 2006-04-02 10:00:00 (Sun)
  63297795600, #      utc_end 2006-10-29 09:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63297795600, #    utc_start 2006-10-29 09:00:00 (Sun)
  63309290400, #      utc_end 2007-03-11 10:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63309290400, #    utc_start 2007-03-11 10:00:00 (Sun)
  63329850000, #      utc_end 2007-11-04 09:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63329850000, #    utc_start 2007-11-04 09:00:00 (Sun)
  63340740000, #      utc_end 2008-03-09 10:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63340740000, #    utc_start 2008-03-09 10:00:00 (Sun)
  63361299600, #      utc_end 2008-11-02 09:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63361299600, #    utc_start 2008-11-02 09:00:00 (Sun)
  63372189600, #      utc_end 2009-03-08 10:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63372189600, #    utc_start 2009-03-08 10:00:00 (Sun)
  63392749200, #      utc_end 2009-11-01 09:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63392749200, #    utc_start 2009-11-01 09:00:00 (Sun)
  63404244000, #      utc_end 2010-03-14 10:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63404244000, #    utc_start 2010-03-14 10:00:00 (Sun)
  63424803600, #      utc_end 2010-11-07 09:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63424803600, #    utc_start 2010-11-07 09:00:00 (Sun)
  63435693600, #      utc_end 2011-03-13 10:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63435693600, #    utc_start 2011-03-13 10:00:00 (Sun)
  63456253200, #      utc_end 2011-11-06 09:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63456253200, #    utc_start 2011-11-06 09:00:00 (Sun)
  63467143200, #      utc_end 2012-03-11 10:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63467143200, #    utc_start 2012-03-11 10:00:00 (Sun)
  63487702800, #      utc_end 2012-11-04 09:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63487702800, #    utc_start 2012-11-04 09:00:00 (Sun)
  63498592800, #      utc_end 2013-03-10 10:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63498592800, #    utc_start 2013-03-10 10:00:00 (Sun)
  63519152400, #      utc_end 2013-11-03 09:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63519152400, #    utc_start 2013-11-03 09:00:00 (Sun)
  63530042400, #      utc_end 2014-03-09 10:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63530042400, #    utc_start 2014-03-09 10:00:00 (Sun)
  63550602000, #      utc_end 2014-11-02 09:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63550602000, #    utc_start 2014-11-02 09:00:00 (Sun)
  63561492000, #      utc_end 2015-03-08 10:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63561492000, #    utc_start 2015-03-08 10:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -25200,
  0,
  'MST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {71}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_FORT_NELSON

    $main::fatpacked{"DateTime/TimeZone/America/Fortaleza.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_FORTALEZA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Fortaleza;
  $DateTime::TimeZone::America::Fortaleza::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Fortaleza::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368466840, #      utc_end 1914-01-01 02:34:00 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  -9240,
  0,
  'LMT',
      ],
      [
  60368466840, #    utc_start 1914-01-01 02:34:00 (Thu)
  60928725600, #      utc_end 1931-10-03 14:00:00 (Sat)
  60368456040, #  local_start 1913-12-31 23:34:00 (Wed)
  60928714800, #    local_end 1931-10-03 11:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  60928725600, #    utc_start 1931-10-03 14:00:00 (Sat)
  60944320800, #      utc_end 1932-04-01 02:00:00 (Fri)
  60928718400, #  local_start 1931-10-03 12:00:00 (Sat)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -7200,
  1,
  'BRST',
      ],
      [
  60944320800, #    utc_start 1932-04-01 02:00:00 (Fri)
  60960308400, #      utc_end 1932-10-03 03:00:00 (Mon)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60960297600, #    local_end 1932-10-03 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  60960308400, #    utc_start 1932-10-03 03:00:00 (Mon)
  60975856800, #      utc_end 1933-04-01 02:00:00 (Sat)
  60960301200, #  local_start 1932-10-03 01:00:00 (Mon)
  60975849600, #    local_end 1933-04-01 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  60975856800, #    utc_start 1933-04-01 02:00:00 (Sat)
  61501863600, #      utc_end 1949-12-01 03:00:00 (Thu)
  60975846000, #  local_start 1933-03-31 23:00:00 (Fri)
  61501852800, #    local_end 1949-12-01 00:00:00 (Thu)
  -10800,
  0,
  'BRT',
      ],
      [
  61501863600, #    utc_start 1949-12-01 03:00:00 (Thu)
  61513614000, #      utc_end 1950-04-16 03:00:00 (Sun)
  61501856400, #  local_start 1949-12-01 01:00:00 (Thu)
  61513606800, #    local_end 1950-04-16 01:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61513614000, #    utc_start 1950-04-16 03:00:00 (Sun)
  61533399600, #      utc_end 1950-12-01 03:00:00 (Fri)
  61513603200, #  local_start 1950-04-16 00:00:00 (Sun)
  61533388800, #    local_end 1950-12-01 00:00:00 (Fri)
  -10800,
  0,
  'BRT',
      ],
      [
  61533399600, #    utc_start 1950-12-01 03:00:00 (Fri)
  61543850400, #      utc_end 1951-04-01 02:00:00 (Sun)
  61533392400, #  local_start 1950-12-01 01:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61543850400, #    utc_start 1951-04-01 02:00:00 (Sun)
  61564935600, #      utc_end 1951-12-01 03:00:00 (Sat)
  61543839600, #  local_start 1951-03-31 23:00:00 (Sat)
  61564924800, #    local_end 1951-12-01 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  61564935600, #    utc_start 1951-12-01 03:00:00 (Sat)
  61575472800, #      utc_end 1952-04-01 02:00:00 (Tue)
  61564928400, #  local_start 1951-12-01 01:00:00 (Sat)
  61575465600, #    local_end 1952-04-01 00:00:00 (Tue)
  -7200,
  1,
  'BRST',
      ],
      [
  61575472800, #    utc_start 1952-04-01 02:00:00 (Tue)
  61596558000, #      utc_end 1952-12-01 03:00:00 (Mon)
  61575462000, #  local_start 1952-03-31 23:00:00 (Mon)
  61596547200, #    local_end 1952-12-01 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  61596558000, #    utc_start 1952-12-01 03:00:00 (Mon)
  61604330400, #      utc_end 1953-03-01 02:00:00 (Sun)
  61596550800, #  local_start 1952-12-01 01:00:00 (Mon)
  61604323200, #    local_end 1953-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61604330400, #    utc_start 1953-03-01 02:00:00 (Sun)
  61944318000, #      utc_end 1963-12-09 03:00:00 (Mon)
  61604319600, #  local_start 1953-02-28 23:00:00 (Sat)
  61944307200, #    local_end 1963-12-09 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  61944318000, #    utc_start 1963-12-09 03:00:00 (Mon)
  61951485600, #      utc_end 1964-03-01 02:00:00 (Sun)
  61944310800, #  local_start 1963-12-09 01:00:00 (Mon)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61951485600, #    utc_start 1964-03-01 02:00:00 (Sun)
  61980519600, #      utc_end 1965-01-31 03:00:00 (Sun)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61980508800, #    local_end 1965-01-31 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  61980519600, #    utc_start 1965-01-31 03:00:00 (Sun)
  61985613600, #      utc_end 1965-03-31 02:00:00 (Wed)
  61980512400, #  local_start 1965-01-31 01:00:00 (Sun)
  61985606400, #    local_end 1965-03-31 00:00:00 (Wed)
  -7200,
  1,
  'BRST',
      ],
      [
  61985613600, #    utc_start 1965-03-31 02:00:00 (Wed)
  62006785200, #      utc_end 1965-12-01 03:00:00 (Wed)
  61985602800, #  local_start 1965-03-30 23:00:00 (Tue)
  62006774400, #    local_end 1965-12-01 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  62006785200, #    utc_start 1965-12-01 03:00:00 (Wed)
  62014557600, #      utc_end 1966-03-01 02:00:00 (Tue)
  62006778000, #  local_start 1965-12-01 01:00:00 (Wed)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -7200,
  1,
  'BRST',
      ],
      [
  62014557600, #    utc_start 1966-03-01 02:00:00 (Tue)
  62035729200, #      utc_end 1966-11-01 03:00:00 (Tue)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62035718400, #    local_end 1966-11-01 00:00:00 (Tue)
  -10800,
  0,
  'BRT',
      ],
      [
  62035729200, #    utc_start 1966-11-01 03:00:00 (Tue)
  62046093600, #      utc_end 1967-03-01 02:00:00 (Wed)
  62035722000, #  local_start 1966-11-01 01:00:00 (Tue)
  62046086400, #    local_end 1967-03-01 00:00:00 (Wed)
  -7200,
  1,
  'BRST',
      ],
      [
  62046093600, #    utc_start 1967-03-01 02:00:00 (Wed)
  62067265200, #      utc_end 1967-11-01 03:00:00 (Wed)
  62046082800, #  local_start 1967-02-28 23:00:00 (Tue)
  62067254400, #    local_end 1967-11-01 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  62067265200, #    utc_start 1967-11-01 03:00:00 (Wed)
  62077716000, #      utc_end 1968-03-01 02:00:00 (Fri)
  62067258000, #  local_start 1967-11-01 01:00:00 (Wed)
  62077708800, #    local_end 1968-03-01 00:00:00 (Fri)
  -7200,
  1,
  'BRST',
      ],
      [
  62077716000, #    utc_start 1968-03-01 02:00:00 (Fri)
  62635431600, #      utc_end 1985-11-02 03:00:00 (Sat)
  62077705200, #  local_start 1968-02-29 23:00:00 (Thu)
  62635420800, #    local_end 1985-11-02 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  62635431600, #    utc_start 1985-11-02 03:00:00 (Sat)
  62646919200, #      utc_end 1986-03-15 02:00:00 (Sat)
  62635424400, #  local_start 1985-11-02 01:00:00 (Sat)
  62646912000, #    local_end 1986-03-15 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  62646919200, #    utc_start 1986-03-15 02:00:00 (Sat)
  62666276400, #      utc_end 1986-10-25 03:00:00 (Sat)
  62646908400, #  local_start 1986-03-14 23:00:00 (Fri)
  62666265600, #    local_end 1986-10-25 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  62666276400, #    utc_start 1986-10-25 03:00:00 (Sat)
  62675949600, #      utc_end 1987-02-14 02:00:00 (Sat)
  62666269200, #  local_start 1986-10-25 01:00:00 (Sat)
  62675942400, #    local_end 1987-02-14 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  62675949600, #    utc_start 1987-02-14 02:00:00 (Sat)
  62697812400, #      utc_end 1987-10-25 03:00:00 (Sun)
  62675938800, #  local_start 1987-02-13 23:00:00 (Fri)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62697812400, #    utc_start 1987-10-25 03:00:00 (Sun)
  62706880800, #      utc_end 1988-02-07 02:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62706873600, #    local_end 1988-02-07 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62706880800, #    utc_start 1988-02-07 02:00:00 (Sun)
  62728657200, #      utc_end 1988-10-16 03:00:00 (Sun)
  62706870000, #  local_start 1988-02-06 23:00:00 (Sat)
  62728646400, #    local_end 1988-10-16 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62728657200, #    utc_start 1988-10-16 03:00:00 (Sun)
  62737725600, #      utc_end 1989-01-29 02:00:00 (Sun)
  62728650000, #  local_start 1988-10-16 01:00:00 (Sun)
  62737718400, #    local_end 1989-01-29 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62737725600, #    utc_start 1989-01-29 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62737714800, #  local_start 1989-01-28 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62770384800, #      utc_end 1990-02-11 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62770377600, #    local_end 1990-02-11 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62770384800, #    utc_start 1990-02-11 02:00:00 (Sun)
  62789223600, #      utc_end 1990-09-17 03:00:00 (Mon)
  62770374000, #  local_start 1990-02-10 23:00:00 (Sat)
  62789212800, #    local_end 1990-09-17 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  62789223600, #    utc_start 1990-09-17 03:00:00 (Mon)
  63074343600, #      utc_end 1999-09-30 03:00:00 (Thu)
  62789212800, #  local_start 1990-09-17 00:00:00 (Mon)
  63074332800, #    local_end 1999-09-30 00:00:00 (Thu)
  -10800,
  0,
  'BRT',
      ],
      [
  63074343600, #    utc_start 1999-09-30 03:00:00 (Thu)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  63074332800, #  local_start 1999-09-30 00:00:00 (Thu)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087300000, #      utc_end 2000-02-27 02:00:00 (Sun)
  63074595600, #  local_start 1999-10-03 01:00:00 (Sun)
  63087292800, #    local_end 2000-02-27 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63087300000, #    utc_start 2000-02-27 02:00:00 (Sun)
  63106657200, #      utc_end 2000-10-08 03:00:00 (Sun)
  63087289200, #  local_start 2000-02-26 23:00:00 (Sat)
  63106646400, #    local_end 2000-10-08 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63106657200, #    utc_start 2000-10-08 03:00:00 (Sun)
  63107863200, #      utc_end 2000-10-22 02:00:00 (Sun)
  63106650000, #  local_start 2000-10-08 01:00:00 (Sun)
  63107856000, #    local_end 2000-10-22 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63107863200, #    utc_start 2000-10-22 02:00:00 (Sun)
  63136033200, #      utc_end 2001-09-13 03:00:00 (Thu)
  63107852400, #  local_start 2000-10-21 23:00:00 (Sat)
  63136022400, #    local_end 2001-09-13 00:00:00 (Thu)
  -10800,
  0,
  'BRT',
      ],
      [
  63136033200, #    utc_start 2001-09-13 03:00:00 (Thu)
  63138711600, #      utc_end 2001-10-14 03:00:00 (Sun)
  63136022400, #  local_start 2001-09-13 00:00:00 (Thu)
  63138700800, #    local_end 2001-10-14 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63138711600, #    utc_start 2001-10-14 03:00:00 (Sun)
  63149594400, #      utc_end 2002-02-17 02:00:00 (Sun)
  63138704400, #  local_start 2001-10-14 01:00:00 (Sun)
  63149587200, #    local_end 2002-02-17 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63149594400, #    utc_start 2002-02-17 02:00:00 (Sun)
  63169124400, #      utc_end 2002-10-01 03:00:00 (Tue)
  63149583600, #  local_start 2002-02-16 23:00:00 (Sat)
  63169113600, #    local_end 2002-10-01 00:00:00 (Tue)
  -10800,
  0,
  'BRT',
      ],
      [
  63169124400, #    utc_start 2002-10-01 03:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  63169113600, #  local_start 2002-10-01 00:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'BRT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {19}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_FORTALEZA

    $main::fatpacked{"DateTime/TimeZone/America/Glace_Bay.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_GLACE_BAY';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Glace_Bay;
  $DateTime::TimeZone::America::Glace_Bay::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Glace_Bay::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60004036788, #      utc_end 1902-06-15 03:59:48 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60004022400, #    local_end 1902-06-15 00:00:00 (Sun)
  -14388,
  0,
  'LMT',
      ],
      [
  60004036788, #    utc_start 1902-06-15 03:59:48 (Sun)
  60503608800, #      utc_end 1918-04-14 06:00:00 (Sun)
  60004022388, #  local_start 1902-06-14 23:59:48 (Sat)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60503608800, #    utc_start 1918-04-14 06:00:00 (Sun)
  60520539600, #      utc_end 1918-10-27 05:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  60520539600, #    utc_start 1918-10-27 05:00:00 (Sun)
  61255461600, #      utc_end 1942-02-09 06:00:00 (Mon)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -14400,
  0,
  'AST',
      ],
      [
  61255461600, #    utc_start 1942-02-09 06:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366276800, #    local_end 1945-08-14 20:00:00 (Tue)
  -10800,
  1,
  'AWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370283600, #      utc_end 1945-09-30 05:00:00 (Sun)
  61366276800, #  local_start 1945-08-14 20:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -10800,
  1,
  'APT',
      ],
      [
  61370283600, #    utc_start 1945-09-30 05:00:00 (Sun)
  61599240000, #      utc_end 1953-01-01 04:00:00 (Thu)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61599225600, #    local_end 1953-01-01 00:00:00 (Thu)
  -14400,
  0,
  'AST',
      ],
      [
  61599240000, #    utc_start 1953-01-01 04:00:00 (Thu)
  61609183200, #      utc_end 1953-04-26 06:00:00 (Sun)
  61599225600, #  local_start 1953-01-01 00:00:00 (Thu)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61609183200, #    utc_start 1953-04-26 06:00:00 (Sun)
  61622485200, #      utc_end 1953-09-27 05:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61622485200, #    utc_start 1953-09-27 05:00:00 (Sun)
  61630776000, #      utc_end 1954-01-01 04:00:00 (Fri)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61630761600, #    local_end 1954-01-01 00:00:00 (Fri)
  -14400,
  0,
  'AST',
      ],
      [
  61630776000, #    utc_start 1954-01-01 04:00:00 (Fri)
  62198769600, #      utc_end 1972-01-01 04:00:00 (Sat)
  61630761600, #  local_start 1954-01-01 00:00:00 (Fri)
  62198755200, #    local_end 1972-01-01 00:00:00 (Sat)
  -14400,
  0,
  'AST',
      ],
      [
  62198769600, #    utc_start 1972-01-01 04:00:00 (Sat)
  62209144800, #      utc_end 1972-04-30 06:00:00 (Sun)
  62198755200, #  local_start 1972-01-01 00:00:00 (Sat)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62209144800, #    utc_start 1972-04-30 06:00:00 (Sun)
  62224866000, #      utc_end 1972-10-29 05:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62224866000, #    utc_start 1972-10-29 05:00:00 (Sun)
  62240594400, #      utc_end 1973-04-29 06:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62240594400, #    utc_start 1973-04-29 06:00:00 (Sun)
  62256315600, #      utc_end 1973-10-28 05:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62256315600, #    utc_start 1973-10-28 05:00:00 (Sun)
  62261928000, #      utc_end 1974-01-01 04:00:00 (Tue)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62261913600, #    local_end 1974-01-01 00:00:00 (Tue)
  -14400,
  0,
  'AST',
      ],
      [
  62261928000, #    utc_start 1974-01-01 04:00:00 (Tue)
  62272044000, #      utc_end 1974-04-28 06:00:00 (Sun)
  62261913600, #  local_start 1974-01-01 00:00:00 (Tue)
  62272029600, #    local_end 1974-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62272044000, #    utc_start 1974-04-28 06:00:00 (Sun)
  62287765200, #      utc_end 1974-10-27 05:00:00 (Sun)
  62272033200, #  local_start 1974-04-28 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62287765200, #    utc_start 1974-10-27 05:00:00 (Sun)
  62303493600, #      utc_end 1975-04-27 06:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62303479200, #    local_end 1975-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62303493600, #    utc_start 1975-04-27 06:00:00 (Sun)
  62319214800, #      utc_end 1975-10-26 05:00:00 (Sun)
  62303482800, #  local_start 1975-04-27 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62319214800, #    utc_start 1975-10-26 05:00:00 (Sun)
  62334943200, #      utc_end 1976-04-25 06:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62334943200, #    utc_start 1976-04-25 06:00:00 (Sun)
  62351269200, #      utc_end 1976-10-31 05:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62351269200, #    utc_start 1976-10-31 05:00:00 (Sun)
  62366392800, #      utc_end 1977-04-24 06:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62366392800, #    utc_start 1977-04-24 06:00:00 (Sun)
  62382718800, #      utc_end 1977-10-30 05:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62382718800, #    utc_start 1977-10-30 05:00:00 (Sun)
  62398447200, #      utc_end 1978-04-30 06:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62398447200, #    utc_start 1978-04-30 06:00:00 (Sun)
  62414168400, #      utc_end 1978-10-29 05:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62414168400, #    utc_start 1978-10-29 05:00:00 (Sun)
  62429896800, #      utc_end 1979-04-29 06:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62429896800, #    utc_start 1979-04-29 06:00:00 (Sun)
  62445618000, #      utc_end 1979-10-28 05:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62445618000, #    utc_start 1979-10-28 05:00:00 (Sun)
  62461346400, #      utc_end 1980-04-27 06:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62461346400, #    utc_start 1980-04-27 06:00:00 (Sun)
  62477067600, #      utc_end 1980-10-26 05:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62477067600, #    utc_start 1980-10-26 05:00:00 (Sun)
  62492796000, #      utc_end 1981-04-26 06:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62492796000, #    utc_start 1981-04-26 06:00:00 (Sun)
  62508517200, #      utc_end 1981-10-25 05:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62508517200, #    utc_start 1981-10-25 05:00:00 (Sun)
  62524245600, #      utc_end 1982-04-25 06:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62524245600, #    utc_start 1982-04-25 06:00:00 (Sun)
  62540571600, #      utc_end 1982-10-31 05:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62540571600, #    utc_start 1982-10-31 05:00:00 (Sun)
  62555695200, #      utc_end 1983-04-24 06:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62555695200, #    utc_start 1983-04-24 06:00:00 (Sun)
  62572021200, #      utc_end 1983-10-30 05:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62572021200, #    utc_start 1983-10-30 05:00:00 (Sun)
  62587749600, #      utc_end 1984-04-29 06:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62587749600, #    utc_start 1984-04-29 06:00:00 (Sun)
  62603470800, #      utc_end 1984-10-28 05:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62603470800, #    utc_start 1984-10-28 05:00:00 (Sun)
  62619199200, #      utc_end 1985-04-28 06:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62619199200, #    utc_start 1985-04-28 06:00:00 (Sun)
  62634920400, #      utc_end 1985-10-27 05:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62634920400, #    utc_start 1985-10-27 05:00:00 (Sun)
  62650648800, #      utc_end 1986-04-27 06:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62650648800, #    utc_start 1986-04-27 06:00:00 (Sun)
  62666370000, #      utc_end 1986-10-26 05:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62666370000, #    utc_start 1986-10-26 05:00:00 (Sun)
  62680284000, #      utc_end 1987-04-05 06:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62680284000, #    utc_start 1987-04-05 06:00:00 (Sun)
  62697819600, #      utc_end 1987-10-25 05:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62697819600, #    utc_start 1987-10-25 05:00:00 (Sun)
  62711733600, #      utc_end 1988-04-03 06:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62711733600, #    utc_start 1988-04-03 06:00:00 (Sun)
  62729874000, #      utc_end 1988-10-30 05:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62729874000, #    utc_start 1988-10-30 05:00:00 (Sun)
  62743183200, #      utc_end 1989-04-02 06:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62743183200, #    utc_start 1989-04-02 06:00:00 (Sun)
  62761323600, #      utc_end 1989-10-29 05:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62761323600, #    utc_start 1989-10-29 05:00:00 (Sun)
  62774632800, #      utc_end 1990-04-01 06:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62774632800, #    utc_start 1990-04-01 06:00:00 (Sun)
  62792773200, #      utc_end 1990-10-28 05:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62792773200, #    utc_start 1990-10-28 05:00:00 (Sun)
  62806687200, #      utc_end 1991-04-07 06:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62806687200, #    utc_start 1991-04-07 06:00:00 (Sun)
  62824222800, #      utc_end 1991-10-27 05:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62824222800, #    utc_start 1991-10-27 05:00:00 (Sun)
  62838136800, #      utc_end 1992-04-05 06:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62838136800, #    utc_start 1992-04-05 06:00:00 (Sun)
  62855672400, #      utc_end 1992-10-25 05:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62855672400, #    utc_start 1992-10-25 05:00:00 (Sun)
  62869586400, #      utc_end 1993-04-04 06:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62869586400, #    utc_start 1993-04-04 06:00:00 (Sun)
  62887726800, #      utc_end 1993-10-31 05:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62887726800, #    utc_start 1993-10-31 05:00:00 (Sun)
  62901036000, #      utc_end 1994-04-03 06:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62901036000, #    utc_start 1994-04-03 06:00:00 (Sun)
  62919176400, #      utc_end 1994-10-30 05:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62919176400, #    utc_start 1994-10-30 05:00:00 (Sun)
  62932485600, #      utc_end 1995-04-02 06:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62932485600, #    utc_start 1995-04-02 06:00:00 (Sun)
  62950626000, #      utc_end 1995-10-29 05:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62950626000, #    utc_start 1995-10-29 05:00:00 (Sun)
  62964540000, #      utc_end 1996-04-07 06:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62964540000, #    utc_start 1996-04-07 06:00:00 (Sun)
  62982075600, #      utc_end 1996-10-27 05:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62982075600, #    utc_start 1996-10-27 05:00:00 (Sun)
  62995989600, #      utc_end 1997-04-06 06:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62995989600, #    utc_start 1997-04-06 06:00:00 (Sun)
  63013525200, #      utc_end 1997-10-26 05:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63013525200, #    utc_start 1997-10-26 05:00:00 (Sun)
  63027439200, #      utc_end 1998-04-05 06:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63027439200, #    utc_start 1998-04-05 06:00:00 (Sun)
  63044974800, #      utc_end 1998-10-25 05:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63044974800, #    utc_start 1998-10-25 05:00:00 (Sun)
  63058888800, #      utc_end 1999-04-04 06:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63058888800, #    utc_start 1999-04-04 06:00:00 (Sun)
  63077029200, #      utc_end 1999-10-31 05:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63077029200, #    utc_start 1999-10-31 05:00:00 (Sun)
  63090338400, #      utc_end 2000-04-02 06:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63090338400, #    utc_start 2000-04-02 06:00:00 (Sun)
  63108478800, #      utc_end 2000-10-29 05:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63108478800, #    utc_start 2000-10-29 05:00:00 (Sun)
  63121788000, #      utc_end 2001-04-01 06:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63121788000, #    utc_start 2001-04-01 06:00:00 (Sun)
  63139928400, #      utc_end 2001-10-28 05:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63139928400, #    utc_start 2001-10-28 05:00:00 (Sun)
  63153842400, #      utc_end 2002-04-07 06:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63153842400, #    utc_start 2002-04-07 06:00:00 (Sun)
  63171378000, #      utc_end 2002-10-27 05:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63171378000, #    utc_start 2002-10-27 05:00:00 (Sun)
  63185292000, #      utc_end 2003-04-06 06:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63185292000, #    utc_start 2003-04-06 06:00:00 (Sun)
  63202827600, #      utc_end 2003-10-26 05:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63202827600, #    utc_start 2003-10-26 05:00:00 (Sun)
  63216741600, #      utc_end 2004-04-04 06:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63216741600, #    utc_start 2004-04-04 06:00:00 (Sun)
  63234882000, #      utc_end 2004-10-31 05:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63234882000, #    utc_start 2004-10-31 05:00:00 (Sun)
  63248191200, #      utc_end 2005-04-03 06:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63248191200, #    utc_start 2005-04-03 06:00:00 (Sun)
  63266331600, #      utc_end 2005-10-30 05:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63266331600, #    utc_start 2005-10-30 05:00:00 (Sun)
  63279640800, #      utc_end 2006-04-02 06:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63279640800, #    utc_start 2006-04-02 06:00:00 (Sun)
  63297781200, #      utc_end 2006-10-29 05:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63297781200, #    utc_start 2006-10-29 05:00:00 (Sun)
  63309276000, #      utc_end 2007-03-11 06:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63309276000, #    utc_start 2007-03-11 06:00:00 (Sun)
  63329835600, #      utc_end 2007-11-04 05:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63329835600, #    utc_start 2007-11-04 05:00:00 (Sun)
  63340725600, #      utc_end 2008-03-09 06:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63340725600, #    utc_start 2008-03-09 06:00:00 (Sun)
  63361285200, #      utc_end 2008-11-02 05:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63361285200, #    utc_start 2008-11-02 05:00:00 (Sun)
  63372175200, #      utc_end 2009-03-08 06:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63372175200, #    utc_start 2009-03-08 06:00:00 (Sun)
  63392734800, #      utc_end 2009-11-01 05:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63392734800, #    utc_start 2009-11-01 05:00:00 (Sun)
  63404229600, #      utc_end 2010-03-14 06:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63404229600, #    utc_start 2010-03-14 06:00:00 (Sun)
  63424789200, #      utc_end 2010-11-07 05:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63424789200, #    utc_start 2010-11-07 05:00:00 (Sun)
  63435679200, #      utc_end 2011-03-13 06:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63435679200, #    utc_start 2011-03-13 06:00:00 (Sun)
  63456238800, #      utc_end 2011-11-06 05:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63456238800, #    utc_start 2011-11-06 05:00:00 (Sun)
  63467128800, #      utc_end 2012-03-11 06:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63467128800, #    utc_start 2012-03-11 06:00:00 (Sun)
  63487688400, #      utc_end 2012-11-04 05:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63487688400, #    utc_start 2012-11-04 05:00:00 (Sun)
  63498578400, #      utc_end 2013-03-10 06:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63498578400, #    utc_start 2013-03-10 06:00:00 (Sun)
  63519138000, #      utc_end 2013-11-03 05:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63519138000, #    utc_start 2013-11-03 05:00:00 (Sun)
  63530028000, #      utc_end 2014-03-09 06:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63530028000, #    utc_start 2014-03-09 06:00:00 (Sun)
  63550587600, #      utc_end 2014-11-02 05:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63550587600, #    utc_start 2014-11-02 05:00:00 (Sun)
  63561477600, #      utc_end 2015-03-08 06:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63561477600, #    utc_start 2015-03-08 06:00:00 (Sun)
  63582037200, #      utc_end 2015-11-01 05:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63582037200, #    utc_start 2015-11-01 05:00:00 (Sun)
  63593532000, #      utc_end 2016-03-13 06:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63593532000, #    utc_start 2016-03-13 06:00:00 (Sun)
  63614091600, #      utc_end 2016-11-06 05:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63614091600, #    utc_start 2016-11-06 05:00:00 (Sun)
  63624981600, #      utc_end 2017-03-12 06:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63624981600, #    utc_start 2017-03-12 06:00:00 (Sun)
  63645541200, #      utc_end 2017-11-05 05:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63645541200, #    utc_start 2017-11-05 05:00:00 (Sun)
  63656431200, #      utc_end 2018-03-11 06:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63656431200, #    utc_start 2018-03-11 06:00:00 (Sun)
  63676990800, #      utc_end 2018-11-04 05:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63676990800, #    utc_start 2018-11-04 05:00:00 (Sun)
  63687880800, #      utc_end 2019-03-10 06:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63687880800, #    utc_start 2019-03-10 06:00:00 (Sun)
  63708440400, #      utc_end 2019-11-03 05:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63708440400, #    utc_start 2019-11-03 05:00:00 (Sun)
  63719330400, #      utc_end 2020-03-08 06:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63719330400, #    utc_start 2020-03-08 06:00:00 (Sun)
  63739890000, #      utc_end 2020-11-01 05:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63739890000, #    utc_start 2020-11-01 05:00:00 (Sun)
  63751384800, #      utc_end 2021-03-14 06:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63751384800, #    utc_start 2021-03-14 06:00:00 (Sun)
  63771944400, #      utc_end 2021-11-07 05:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63771944400, #    utc_start 2021-11-07 05:00:00 (Sun)
  63782834400, #      utc_end 2022-03-13 06:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63782834400, #    utc_start 2022-03-13 06:00:00 (Sun)
  63803394000, #      utc_end 2022-11-06 05:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63803394000, #    utc_start 2022-11-06 05:00:00 (Sun)
  63814284000, #      utc_end 2023-03-12 06:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63814284000, #    utc_start 2023-03-12 06:00:00 (Sun)
  63834843600, #      utc_end 2023-11-05 05:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63834843600, #    utc_start 2023-11-05 05:00:00 (Sun)
  63845733600, #      utc_end 2024-03-10 06:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63845733600, #    utc_start 2024-03-10 06:00:00 (Sun)
  63866293200, #      utc_end 2024-11-03 05:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63866293200, #    utc_start 2024-11-03 05:00:00 (Sun)
  63877183200, #      utc_end 2025-03-09 06:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63877183200, #    utc_start 2025-03-09 06:00:00 (Sun)
  63897742800, #      utc_end 2025-11-02 05:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63897742800, #    utc_start 2025-11-02 05:00:00 (Sun)
  63908632800, #      utc_end 2026-03-08 06:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63908632800, #    utc_start 2026-03-08 06:00:00 (Sun)
  63929192400, #      utc_end 2026-11-01 05:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63929192400, #    utc_start 2026-11-01 05:00:00 (Sun)
  63940687200, #      utc_end 2027-03-14 06:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63940687200, #    utc_start 2027-03-14 06:00:00 (Sun)
  63961246800, #      utc_end 2027-11-07 05:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {60}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -14400 }
  
  my $last_observance = bless( {
    'format' => 'A%sT',
    'gmtoff' => '-4:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 720624,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 720624,
      'utc_rd_secs' => 0,
      'utc_year' => 1975
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -14400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 720624,
      'local_rd_secs' => 14400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 720624,
      'utc_rd_secs' => 14400,
      'utc_year' => 1975
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_GLACE_BAY

    $main::fatpacked{"DateTime/TimeZone/America/Godthab.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_GODTHAB';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Godthab;
  $DateTime::TimeZone::America::Godthab::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Godthab::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60449599616, #      utc_end 1916-07-28 03:26:56 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60449587200, #    local_end 1916-07-28 00:00:00 (Fri)
  -12416,
  0,
  'LMT',
      ],
      [
  60449599616, #    utc_start 1916-07-28 03:26:56 (Fri)
  62459528400, #      utc_end 1980-04-06 05:00:00 (Sun)
  60449588816, #  local_start 1916-07-28 00:26:56 (Fri)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  -10800,
  0,
  'WGT',
      ],
      [
  62459528400, #    utc_start 1980-04-06 05:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474626800, #    local_end 1980-09-27 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474623200, #  local_start 1980-09-27 22:00:00 (Sat)
  62490348000, #    local_end 1981-03-28 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490351600, #  local_start 1981-03-28 23:00:00 (Sat)
  62506076400, #    local_end 1981-09-26 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506072800, #  local_start 1981-09-26 22:00:00 (Sat)
  62521797600, #    local_end 1982-03-27 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521801200, #  local_start 1982-03-27 23:00:00 (Sat)
  62537526000, #    local_end 1982-09-25 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537522400, #  local_start 1982-09-25 22:00:00 (Sat)
  62553247200, #    local_end 1983-03-26 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553250800, #  local_start 1983-03-26 23:00:00 (Sat)
  62568975600, #    local_end 1983-09-24 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568972000, #  local_start 1983-09-24 22:00:00 (Sat)
  62584696800, #    local_end 1984-03-24 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584700400, #  local_start 1984-03-24 23:00:00 (Sat)
  62601030000, #    local_end 1984-09-29 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601026400, #  local_start 1984-09-29 22:00:00 (Sat)
  62616751200, #    local_end 1985-03-30 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616754800, #  local_start 1985-03-30 23:00:00 (Sat)
  62632479600, #    local_end 1985-09-28 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632476000, #  local_start 1985-09-28 22:00:00 (Sat)
  62648200800, #    local_end 1986-03-29 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648204400, #  local_start 1986-03-29 23:00:00 (Sat)
  62663929200, #    local_end 1986-09-27 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663925600, #  local_start 1986-09-27 22:00:00 (Sat)
  62679650400, #    local_end 1987-03-28 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679654000, #  local_start 1987-03-28 23:00:00 (Sat)
  62695378800, #    local_end 1987-09-26 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695375200, #  local_start 1987-09-26 22:00:00 (Sat)
  62711100000, #    local_end 1988-03-26 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711103600, #  local_start 1988-03-26 23:00:00 (Sat)
  62726828400, #    local_end 1988-09-24 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726824800, #  local_start 1988-09-24 22:00:00 (Sat)
  62742549600, #    local_end 1989-03-25 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742553200, #  local_start 1989-03-25 23:00:00 (Sat)
  62758278000, #    local_end 1989-09-23 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758274400, #  local_start 1989-09-23 22:00:00 (Sat)
  62773999200, #    local_end 1990-03-24 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774002800, #  local_start 1990-03-24 23:00:00 (Sat)
  62790332400, #    local_end 1990-09-29 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790328800, #  local_start 1990-09-29 22:00:00 (Sat)
  62806053600, #    local_end 1991-03-30 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806057200, #  local_start 1991-03-30 23:00:00 (Sat)
  62821782000, #    local_end 1991-09-28 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821778400, #  local_start 1991-09-28 22:00:00 (Sat)
  62837503200, #    local_end 1992-03-28 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837506800, #  local_start 1992-03-28 23:00:00 (Sat)
  62853231600, #    local_end 1992-09-26 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853228000, #  local_start 1992-09-26 22:00:00 (Sat)
  62868952800, #    local_end 1993-03-27 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868956400, #  local_start 1993-03-27 23:00:00 (Sat)
  62884681200, #    local_end 1993-09-25 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884677600, #  local_start 1993-09-25 22:00:00 (Sat)
  62900402400, #    local_end 1994-03-26 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900406000, #  local_start 1994-03-26 23:00:00 (Sat)
  62916130800, #    local_end 1994-09-24 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916127200, #  local_start 1994-09-24 22:00:00 (Sat)
  62931852000, #    local_end 1995-03-25 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931855600, #  local_start 1995-03-25 23:00:00 (Sat)
  62947580400, #    local_end 1995-09-23 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947576800, #  local_start 1995-09-23 22:00:00 (Sat)
  62963906400, #    local_end 1996-03-30 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963910000, #  local_start 1996-03-30 23:00:00 (Sat)
  62982054000, #    local_end 1996-10-26 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982050400, #  local_start 1996-10-26 22:00:00 (Sat)
  62995356000, #    local_end 1997-03-29 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995359600, #  local_start 1997-03-29 23:00:00 (Sat)
  63013503600, #    local_end 1997-10-25 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013500000, #  local_start 1997-10-25 22:00:00 (Sat)
  63026805600, #    local_end 1998-03-28 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026809200, #  local_start 1998-03-28 23:00:00 (Sat)
  63044953200, #    local_end 1998-10-24 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044949600, #  local_start 1998-10-24 22:00:00 (Sat)
  63058255200, #    local_end 1999-03-27 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058258800, #  local_start 1999-03-27 23:00:00 (Sat)
  63077007600, #    local_end 1999-10-30 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077004000, #  local_start 1999-10-30 22:00:00 (Sat)
  63089704800, #    local_end 2000-03-25 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089708400, #  local_start 2000-03-25 23:00:00 (Sat)
  63108457200, #    local_end 2000-10-28 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108453600, #  local_start 2000-10-28 22:00:00 (Sat)
  63121154400, #    local_end 2001-03-24 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121158000, #  local_start 2001-03-24 23:00:00 (Sat)
  63139906800, #    local_end 2001-10-27 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139903200, #  local_start 2001-10-27 22:00:00 (Sat)
  63153208800, #    local_end 2002-03-30 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153212400, #  local_start 2002-03-30 23:00:00 (Sat)
  63171356400, #    local_end 2002-10-26 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171352800, #  local_start 2002-10-26 22:00:00 (Sat)
  63184658400, #    local_end 2003-03-29 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184662000, #  local_start 2003-03-29 23:00:00 (Sat)
  63202806000, #    local_end 2003-10-25 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202802400, #  local_start 2003-10-25 22:00:00 (Sat)
  63216108000, #    local_end 2004-03-27 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216111600, #  local_start 2004-03-27 23:00:00 (Sat)
  63234860400, #    local_end 2004-10-30 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234856800, #  local_start 2004-10-30 22:00:00 (Sat)
  63247557600, #    local_end 2005-03-26 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247561200, #  local_start 2005-03-26 23:00:00 (Sat)
  63266310000, #    local_end 2005-10-29 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266306400, #  local_start 2005-10-29 22:00:00 (Sat)
  63279007200, #    local_end 2006-03-25 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279010800, #  local_start 2006-03-25 23:00:00 (Sat)
  63297759600, #    local_end 2006-10-28 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297756000, #  local_start 2006-10-28 22:00:00 (Sat)
  63310456800, #    local_end 2007-03-24 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310460400, #  local_start 2007-03-24 23:00:00 (Sat)
  63329209200, #    local_end 2007-10-27 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329205600, #  local_start 2007-10-27 22:00:00 (Sat)
  63342511200, #    local_end 2008-03-29 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342514800, #  local_start 2008-03-29 23:00:00 (Sat)
  63360658800, #    local_end 2008-10-25 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360655200, #  local_start 2008-10-25 22:00:00 (Sat)
  63373960800, #    local_end 2009-03-28 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373964400, #  local_start 2009-03-28 23:00:00 (Sat)
  63392108400, #    local_end 2009-10-24 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392104800, #  local_start 2009-10-24 22:00:00 (Sat)
  63405410400, #    local_end 2010-03-27 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405414000, #  local_start 2010-03-27 23:00:00 (Sat)
  63424162800, #    local_end 2010-10-30 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424159200, #  local_start 2010-10-30 22:00:00 (Sat)
  63436860000, #    local_end 2011-03-26 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436863600, #  local_start 2011-03-26 23:00:00 (Sat)
  63455612400, #    local_end 2011-10-29 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455608800, #  local_start 2011-10-29 22:00:00 (Sat)
  63468309600, #    local_end 2012-03-24 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468313200, #  local_start 2012-03-24 23:00:00 (Sat)
  63487062000, #    local_end 2012-10-27 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487058400, #  local_start 2012-10-27 22:00:00 (Sat)
  63500364000, #    local_end 2013-03-30 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500367600, #  local_start 2013-03-30 23:00:00 (Sat)
  63518511600, #    local_end 2013-10-26 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518508000, #  local_start 2013-10-26 22:00:00 (Sat)
  63531813600, #    local_end 2014-03-29 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531817200, #  local_start 2014-03-29 23:00:00 (Sat)
  63549961200, #    local_end 2014-10-25 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549957600, #  local_start 2014-10-25 22:00:00 (Sat)
  63563263200, #    local_end 2015-03-28 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563266800, #  local_start 2015-03-28 23:00:00 (Sat)
  63581410800, #    local_end 2015-10-24 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581407200, #  local_start 2015-10-24 22:00:00 (Sat)
  63594712800, #    local_end 2016-03-26 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594716400, #  local_start 2016-03-26 23:00:00 (Sat)
  63613465200, #    local_end 2016-10-29 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613461600, #  local_start 2016-10-29 22:00:00 (Sat)
  63626162400, #    local_end 2017-03-25 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626166000, #  local_start 2017-03-25 23:00:00 (Sat)
  63644914800, #    local_end 2017-10-28 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644911200, #  local_start 2017-10-28 22:00:00 (Sat)
  63657612000, #    local_end 2018-03-24 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657615600, #  local_start 2018-03-24 23:00:00 (Sat)
  63676364400, #    local_end 2018-10-27 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676360800, #  local_start 2018-10-27 22:00:00 (Sat)
  63689666400, #    local_end 2019-03-30 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689670000, #  local_start 2019-03-30 23:00:00 (Sat)
  63707814000, #    local_end 2019-10-26 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707810400, #  local_start 2019-10-26 22:00:00 (Sat)
  63721116000, #    local_end 2020-03-28 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721119600, #  local_start 2020-03-28 23:00:00 (Sat)
  63739263600, #    local_end 2020-10-24 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739260000, #  local_start 2020-10-24 22:00:00 (Sat)
  63752565600, #    local_end 2021-03-27 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752569200, #  local_start 2021-03-27 23:00:00 (Sat)
  63771318000, #    local_end 2021-10-30 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771314400, #  local_start 2021-10-30 22:00:00 (Sat)
  63784015200, #    local_end 2022-03-26 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784018800, #  local_start 2022-03-26 23:00:00 (Sat)
  63802767600, #    local_end 2022-10-29 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802764000, #  local_start 2022-10-29 22:00:00 (Sat)
  63815464800, #    local_end 2023-03-25 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815468400, #  local_start 2023-03-25 23:00:00 (Sat)
  63834217200, #    local_end 2023-10-28 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834213600, #  local_start 2023-10-28 22:00:00 (Sat)
  63847519200, #    local_end 2024-03-30 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847522800, #  local_start 2024-03-30 23:00:00 (Sat)
  63865666800, #    local_end 2024-10-26 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865663200, #  local_start 2024-10-26 22:00:00 (Sat)
  63878968800, #    local_end 2025-03-29 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878972400, #  local_start 2025-03-29 23:00:00 (Sat)
  63897116400, #    local_end 2025-10-25 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897112800, #  local_start 2025-10-25 22:00:00 (Sat)
  63910418400, #    local_end 2026-03-28 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910422000, #  local_start 2026-03-28 23:00:00 (Sat)
  63928566000, #    local_end 2026-10-24 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928562400, #  local_start 2026-10-24 22:00:00 (Sat)
  63941868000, #    local_end 2027-03-27 22:00:00 (Sat)
  -10800,
  0,
  'WGT',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941871600, #  local_start 2027-03-27 23:00:00 (Sat)
  63960620400, #    local_end 2027-10-30 23:00:00 (Sat)
  -7200,
  1,
  'WGST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {48}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -10800 }
  
  my $last_observance = bless( {
    'format' => 'WG%sT',
    'gmtoff' => '-3:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722911,
      'local_rd_secs' => 10800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722911,
      'utc_rd_secs' => 10800,
      'utc_year' => 1981
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -10800,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722911,
      'local_rd_secs' => 18000,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722911,
      'utc_rd_secs' => 18000,
      'utc_year' => 1981
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_GODTHAB

    $main::fatpacked{"DateTime/TimeZone/America/Goose_Bay.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_GOOSE_BAY';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Goose_Bay;
  $DateTime::TimeZone::America::Goose_Bay::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Goose_Bay::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59421787300, #      utc_end 1884-01-01 04:01:40 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59421772800, #    local_end 1884-01-01 00:00:00 (Tue)
  -14500,
  0,
  'LMT',
      ],
      [
  59421787300, #    utc_start 1884-01-01 04:01:40 (Tue)
  60494700652, #      utc_end 1918-01-01 03:30:52 (Tue)
  59421774648, #  local_start 1884-01-01 00:30:48 (Tue)
  60494688000, #    local_end 1918-01-01 00:00:00 (Tue)
  -12652,
  0,
  'NST',
      ],
      [
  60494700652, #    utc_start 1918-01-01 03:30:52 (Tue)
  60503607052, #      utc_end 1918-04-14 05:30:52 (Sun)
  60494688000, #  local_start 1918-01-01 00:00:00 (Tue)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60503607052, #    utc_start 1918-04-14 05:30:52 (Sun)
  60520537852, #      utc_end 1918-10-27 04:30:52 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  60520537852, #    utc_start 1918-10-27 04:30:52 (Sun)
  60526236652, #      utc_end 1919-01-01 03:30:52 (Wed)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60526224000, #    local_end 1919-01-01 00:00:00 (Wed)
  -12652,
  0,
  'NST',
      ],
      [
  60526236652, #    utc_start 1919-01-01 03:30:52 (Wed)
  61038761452, #      utc_end 1935-03-30 03:30:52 (Sat)
  60526224000, #  local_start 1919-01-01 00:00:00 (Wed)
  61038748800, #    local_end 1935-03-30 00:00:00 (Sat)
  -12652,
  0,
  'NST',
      ],
      [
  61038761452, #    utc_start 1935-03-30 03:30:52 (Sat)
  61062694200, #      utc_end 1936-01-01 03:30:00 (Wed)
  61038748852, #  local_start 1935-03-30 00:00:52 (Sat)
  61062681600, #    local_end 1936-01-01 00:00:00 (Wed)
  -12600,
  0,
  'NST',
      ],
      [
  61062694200, #    utc_start 1936-01-01 03:30:00 (Wed)
  61074012600, #      utc_end 1936-05-11 03:30:00 (Mon)
  61062681600, #  local_start 1936-01-01 00:00:00 (Wed)
  61074000000, #    local_end 1936-05-11 00:00:00 (Mon)
  -12600,
  0,
  'NST',
      ],
      [
  61074012600, #    utc_start 1936-05-11 03:30:00 (Mon)
  61086709800, #      utc_end 1936-10-05 02:30:00 (Mon)
  61074003600, #  local_start 1936-05-11 01:00:00 (Mon)
  61086700800, #    local_end 1936-10-05 00:00:00 (Mon)
  -9000,
  1,
  'NDT',
      ],
      [
  61086709800, #    utc_start 1936-10-05 02:30:00 (Mon)
  61105462200, #      utc_end 1937-05-10 03:30:00 (Mon)
  61086697200, #  local_start 1936-10-04 23:00:00 (Sun)
  61105449600, #    local_end 1937-05-10 00:00:00 (Mon)
  -12600,
  0,
  'NST',
      ],
      [
  61105462200, #    utc_start 1937-05-10 03:30:00 (Mon)
  61118159400, #      utc_end 1937-10-04 02:30:00 (Mon)
  61105453200, #  local_start 1937-05-10 01:00:00 (Mon)
  61118150400, #    local_end 1937-10-04 00:00:00 (Mon)
  -9000,
  1,
  'NDT',
      ],
      [
  61118159400, #    utc_start 1937-10-04 02:30:00 (Mon)
  61136911800, #      utc_end 1938-05-09 03:30:00 (Mon)
  61118146800, #  local_start 1937-10-03 23:00:00 (Sun)
  61136899200, #    local_end 1938-05-09 00:00:00 (Mon)
  -12600,
  0,
  'NST',
      ],
      [
  61136911800, #    utc_start 1938-05-09 03:30:00 (Mon)
  61149609000, #      utc_end 1938-10-03 02:30:00 (Mon)
  61136902800, #  local_start 1938-05-09 01:00:00 (Mon)
  61149600000, #    local_end 1938-10-03 00:00:00 (Mon)
  -9000,
  1,
  'NDT',
      ],
      [
  61149609000, #    utc_start 1938-10-03 02:30:00 (Mon)
  61168966200, #      utc_end 1939-05-15 03:30:00 (Mon)
  61149596400, #  local_start 1938-10-02 23:00:00 (Sun)
  61168953600, #    local_end 1939-05-15 00:00:00 (Mon)
  -12600,
  0,
  'NST',
      ],
      [
  61168966200, #    utc_start 1939-05-15 03:30:00 (Mon)
  61181058600, #      utc_end 1939-10-02 02:30:00 (Mon)
  61168957200, #  local_start 1939-05-15 01:00:00 (Mon)
  61181049600, #    local_end 1939-10-02 00:00:00 (Mon)
  -9000,
  1,
  'NDT',
      ],
      [
  61181058600, #    utc_start 1939-10-02 02:30:00 (Mon)
  61200415800, #      utc_end 1940-05-13 03:30:00 (Mon)
  61181046000, #  local_start 1939-10-01 23:00:00 (Sun)
  61200403200, #    local_end 1940-05-13 00:00:00 (Mon)
  -12600,
  0,
  'NST',
      ],
      [
  61200415800, #    utc_start 1940-05-13 03:30:00 (Mon)
  61213113000, #      utc_end 1940-10-07 02:30:00 (Mon)
  61200406800, #  local_start 1940-05-13 01:00:00 (Mon)
  61213104000, #    local_end 1940-10-07 00:00:00 (Mon)
  -9000,
  1,
  'NDT',
      ],
      [
  61213113000, #    utc_start 1940-10-07 02:30:00 (Mon)
  61231865400, #      utc_end 1941-05-12 03:30:00 (Mon)
  61213100400, #  local_start 1940-10-06 23:00:00 (Sun)
  61231852800, #    local_end 1941-05-12 00:00:00 (Mon)
  -12600,
  0,
  'NST',
      ],
      [
  61231865400, #    utc_start 1941-05-12 03:30:00 (Mon)
  61244562600, #      utc_end 1941-10-06 02:30:00 (Mon)
  61231856400, #  local_start 1941-05-12 01:00:00 (Mon)
  61244553600, #    local_end 1941-10-06 00:00:00 (Mon)
  -9000,
  1,
  'NDT',
      ],
      [
  61244562600, #    utc_start 1941-10-06 02:30:00 (Mon)
  61263315000, #      utc_end 1942-05-11 03:30:00 (Mon)
  61244550000, #  local_start 1941-10-05 23:00:00 (Sun)
  61263302400, #    local_end 1942-05-11 00:00:00 (Mon)
  -12600,
  0,
  'NST',
      ],
      [
  61263315000, #    utc_start 1942-05-11 03:30:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61263306000, #  local_start 1942-05-11 01:00:00 (Mon)
  61366278600, #    local_end 1945-08-14 20:30:00 (Tue)
  -9000,
  1,
  'NWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370281800, #      utc_end 1945-09-30 04:30:00 (Sun)
  61366278600, #  local_start 1945-08-14 20:30:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -9000,
  1,
  'NPT',
      ],
      [
  61370281800, #    utc_start 1945-09-30 04:30:00 (Sun)
  61378313400, #      utc_end 1946-01-01 03:30:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -12600,
  0,
  'NST',
      ],
      [
  61378313400, #    utc_start 1946-01-01 03:30:00 (Tue)
  61389639000, #      utc_end 1946-05-12 05:30:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61389626400, #    local_end 1946-05-12 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61389639000, #    utc_start 1946-05-12 05:30:00 (Sun)
  61402336200, #      utc_end 1946-10-06 04:30:00 (Sun)
  61389630000, #  local_start 1946-05-12 03:00:00 (Sun)
  61402327200, #    local_end 1946-10-06 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61402336200, #    utc_start 1946-10-06 04:30:00 (Sun)
  61421088600, #      utc_end 1947-05-11 05:30:00 (Sun)
  61402323600, #  local_start 1946-10-06 01:00:00 (Sun)
  61421076000, #    local_end 1947-05-11 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61421088600, #    utc_start 1947-05-11 05:30:00 (Sun)
  61433785800, #      utc_end 1947-10-05 04:30:00 (Sun)
  61421079600, #  local_start 1947-05-11 03:00:00 (Sun)
  61433776800, #    local_end 1947-10-05 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61433785800, #    utc_start 1947-10-05 04:30:00 (Sun)
  61452538200, #      utc_end 1948-05-09 05:30:00 (Sun)
  61433773200, #  local_start 1947-10-05 01:00:00 (Sun)
  61452525600, #    local_end 1948-05-09 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61452538200, #    utc_start 1948-05-09 05:30:00 (Sun)
  61465235400, #      utc_end 1948-10-03 04:30:00 (Sun)
  61452529200, #  local_start 1948-05-09 03:00:00 (Sun)
  61465226400, #    local_end 1948-10-03 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61465235400, #    utc_start 1948-10-03 04:30:00 (Sun)
  61483987800, #      utc_end 1949-05-08 05:30:00 (Sun)
  61465222800, #  local_start 1948-10-03 01:00:00 (Sun)
  61483975200, #    local_end 1949-05-08 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61483987800, #    utc_start 1949-05-08 05:30:00 (Sun)
  61496685000, #      utc_end 1949-10-02 04:30:00 (Sun)
  61483978800, #  local_start 1949-05-08 03:00:00 (Sun)
  61496676000, #    local_end 1949-10-02 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61496685000, #    utc_start 1949-10-02 04:30:00 (Sun)
  61516042200, #      utc_end 1950-05-14 05:30:00 (Sun)
  61496672400, #  local_start 1949-10-02 01:00:00 (Sun)
  61516029600, #    local_end 1950-05-14 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61516042200, #    utc_start 1950-05-14 05:30:00 (Sun)
  61528739400, #      utc_end 1950-10-08 04:30:00 (Sun)
  61516033200, #  local_start 1950-05-14 03:00:00 (Sun)
  61528730400, #    local_end 1950-10-08 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61528739400, #    utc_start 1950-10-08 04:30:00 (Sun)
  61546282200, #      utc_end 1951-04-29 05:30:00 (Sun)
  61528726800, #  local_start 1950-10-08 01:00:00 (Sun)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61546282200, #    utc_start 1951-04-29 05:30:00 (Sun)
  61559584200, #      utc_end 1951-09-30 04:30:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61559584200, #    utc_start 1951-09-30 04:30:00 (Sun)
  61577731800, #      utc_end 1952-04-27 05:30:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61577731800, #    utc_start 1952-04-27 05:30:00 (Sun)
  61591033800, #      utc_end 1952-09-28 04:30:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61591033800, #    utc_start 1952-09-28 04:30:00 (Sun)
  61609181400, #      utc_end 1953-04-26 05:30:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61609181400, #    utc_start 1953-04-26 05:30:00 (Sun)
  61622483400, #      utc_end 1953-09-27 04:30:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61622483400, #    utc_start 1953-09-27 04:30:00 (Sun)
  61640631000, #      utc_end 1954-04-25 05:30:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61640631000, #    utc_start 1954-04-25 05:30:00 (Sun)
  61653933000, #      utc_end 1954-09-26 04:30:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61653933000, #    utc_start 1954-09-26 04:30:00 (Sun)
  61672080600, #      utc_end 1955-04-24 05:30:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61672080600, #    utc_start 1955-04-24 05:30:00 (Sun)
  61685382600, #      utc_end 1955-09-25 04:30:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61685373600, #    local_end 1955-09-25 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61685382600, #    utc_start 1955-09-25 04:30:00 (Sun)
  61704135000, #      utc_end 1956-04-29 05:30:00 (Sun)
  61685370000, #  local_start 1955-09-25 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61704135000, #    utc_start 1956-04-29 05:30:00 (Sun)
  61717437000, #      utc_end 1956-09-30 04:30:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61717428000, #    local_end 1956-09-30 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61717437000, #    utc_start 1956-09-30 04:30:00 (Sun)
  61735584600, #      utc_end 1957-04-28 05:30:00 (Sun)
  61717424400, #  local_start 1956-09-30 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61735584600, #    utc_start 1957-04-28 05:30:00 (Sun)
  61748886600, #      utc_end 1957-09-29 04:30:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61748886600, #    utc_start 1957-09-29 04:30:00 (Sun)
  61767034200, #      utc_end 1958-04-27 05:30:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61767034200, #    utc_start 1958-04-27 05:30:00 (Sun)
  61780336200, #      utc_end 1958-09-28 04:30:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61780327200, #    local_end 1958-09-28 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61780336200, #    utc_start 1958-09-28 04:30:00 (Sun)
  61798483800, #      utc_end 1959-04-26 05:30:00 (Sun)
  61780323600, #  local_start 1958-09-28 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61798483800, #    utc_start 1959-04-26 05:30:00 (Sun)
  61811785800, #      utc_end 1959-09-27 04:30:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61811776800, #    local_end 1959-09-27 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61811785800, #    utc_start 1959-09-27 04:30:00 (Sun)
  61829933400, #      utc_end 1960-04-24 05:30:00 (Sun)
  61811773200, #  local_start 1959-09-27 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61829933400, #    utc_start 1960-04-24 05:30:00 (Sun)
  61846259400, #      utc_end 1960-10-30 04:30:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61846250400, #    local_end 1960-10-30 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61846259400, #    utc_start 1960-10-30 04:30:00 (Sun)
  61861987800, #      utc_end 1961-04-30 05:30:00 (Sun)
  61846246800, #  local_start 1960-10-30 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61861987800, #    utc_start 1961-04-30 05:30:00 (Sun)
  61877709000, #      utc_end 1961-10-29 04:30:00 (Sun)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  61877700000, #    local_end 1961-10-29 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61877709000, #    utc_start 1961-10-29 04:30:00 (Sun)
  61893437400, #      utc_end 1962-04-29 05:30:00 (Sun)
  61877696400, #  local_start 1961-10-29 01:00:00 (Sun)
  61893424800, #    local_end 1962-04-29 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61893437400, #    utc_start 1962-04-29 05:30:00 (Sun)
  61909158600, #      utc_end 1962-10-28 04:30:00 (Sun)
  61893428400, #  local_start 1962-04-29 03:00:00 (Sun)
  61909149600, #    local_end 1962-10-28 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61909158600, #    utc_start 1962-10-28 04:30:00 (Sun)
  61924887000, #      utc_end 1963-04-28 05:30:00 (Sun)
  61909146000, #  local_start 1962-10-28 01:00:00 (Sun)
  61924874400, #    local_end 1963-04-28 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61924887000, #    utc_start 1963-04-28 05:30:00 (Sun)
  61940608200, #      utc_end 1963-10-27 04:30:00 (Sun)
  61924878000, #  local_start 1963-04-28 03:00:00 (Sun)
  61940599200, #    local_end 1963-10-27 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61940608200, #    utc_start 1963-10-27 04:30:00 (Sun)
  61956336600, #      utc_end 1964-04-26 05:30:00 (Sun)
  61940595600, #  local_start 1963-10-27 01:00:00 (Sun)
  61956324000, #    local_end 1964-04-26 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61956336600, #    utc_start 1964-04-26 05:30:00 (Sun)
  61972057800, #      utc_end 1964-10-25 04:30:00 (Sun)
  61956327600, #  local_start 1964-04-26 03:00:00 (Sun)
  61972048800, #    local_end 1964-10-25 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61972057800, #    utc_start 1964-10-25 04:30:00 (Sun)
  61987786200, #      utc_end 1965-04-25 05:30:00 (Sun)
  61972045200, #  local_start 1964-10-25 01:00:00 (Sun)
  61987773600, #    local_end 1965-04-25 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61987786200, #    utc_start 1965-04-25 05:30:00 (Sun)
  62004112200, #      utc_end 1965-10-31 04:30:00 (Sun)
  61987777200, #  local_start 1965-04-25 03:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62004112200, #    utc_start 1965-10-31 04:30:00 (Sun)
  62015779800, #      utc_end 1966-03-15 05:30:00 (Tue)
  62004099600, #  local_start 1965-10-31 01:00:00 (Sun)
  62015767200, #    local_end 1966-03-15 02:00:00 (Tue)
  -12600,
  0,
  'NST',
      ],
      [
  62015779800, #    utc_start 1966-03-15 05:30:00 (Tue)
  62019237600, #      utc_end 1966-04-24 06:00:00 (Sun)
  62015765400, #  local_start 1966-03-15 01:30:00 (Tue)
  62019223200, #    local_end 1966-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62019237600, #    utc_start 1966-04-24 06:00:00 (Sun)
  62035563600, #      utc_end 1966-10-30 05:00:00 (Sun)
  62019226800, #  local_start 1966-04-24 03:00:00 (Sun)
  62035552800, #    local_end 1966-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62035563600, #    utc_start 1966-10-30 05:00:00 (Sun)
  62051292000, #      utc_end 1967-04-30 06:00:00 (Sun)
  62035549200, #  local_start 1966-10-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62051292000, #    utc_start 1967-04-30 06:00:00 (Sun)
  62067013200, #      utc_end 1967-10-29 05:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62067013200, #    utc_start 1967-10-29 05:00:00 (Sun)
  62082741600, #      utc_end 1968-04-28 06:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62082741600, #    utc_start 1968-04-28 06:00:00 (Sun)
  62098462800, #      utc_end 1968-10-27 05:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62098462800, #    utc_start 1968-10-27 05:00:00 (Sun)
  62114191200, #      utc_end 1969-04-27 06:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62114191200, #    utc_start 1969-04-27 06:00:00 (Sun)
  62129912400, #      utc_end 1969-10-26 05:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62129912400, #    utc_start 1969-10-26 05:00:00 (Sun)
  62145640800, #      utc_end 1970-04-26 06:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62145640800, #    utc_start 1970-04-26 06:00:00 (Sun)
  62161362000, #      utc_end 1970-10-25 05:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62161362000, #    utc_start 1970-10-25 05:00:00 (Sun)
  62177090400, #      utc_end 1971-04-25 06:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62177090400, #    utc_start 1971-04-25 06:00:00 (Sun)
  62193416400, #      utc_end 1971-10-31 05:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62193416400, #    utc_start 1971-10-31 05:00:00 (Sun)
  62209144800, #      utc_end 1972-04-30 06:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62209144800, #    utc_start 1972-04-30 06:00:00 (Sun)
  62224866000, #      utc_end 1972-10-29 05:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62224866000, #    utc_start 1972-10-29 05:00:00 (Sun)
  62240594400, #      utc_end 1973-04-29 06:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62240594400, #    utc_start 1973-04-29 06:00:00 (Sun)
  62256315600, #      utc_end 1973-10-28 05:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62256315600, #    utc_start 1973-10-28 05:00:00 (Sun)
  62272044000, #      utc_end 1974-04-28 06:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62272029600, #    local_end 1974-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62272044000, #    utc_start 1974-04-28 06:00:00 (Sun)
  62287765200, #      utc_end 1974-10-27 05:00:00 (Sun)
  62272033200, #  local_start 1974-04-28 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62287765200, #    utc_start 1974-10-27 05:00:00 (Sun)
  62303493600, #      utc_end 1975-04-27 06:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62303479200, #    local_end 1975-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62303493600, #    utc_start 1975-04-27 06:00:00 (Sun)
  62319214800, #      utc_end 1975-10-26 05:00:00 (Sun)
  62303482800, #  local_start 1975-04-27 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62319214800, #    utc_start 1975-10-26 05:00:00 (Sun)
  62334943200, #      utc_end 1976-04-25 06:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62334943200, #    utc_start 1976-04-25 06:00:00 (Sun)
  62351269200, #      utc_end 1976-10-31 05:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62351269200, #    utc_start 1976-10-31 05:00:00 (Sun)
  62366392800, #      utc_end 1977-04-24 06:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62366392800, #    utc_start 1977-04-24 06:00:00 (Sun)
  62382718800, #      utc_end 1977-10-30 05:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62382718800, #    utc_start 1977-10-30 05:00:00 (Sun)
  62398447200, #      utc_end 1978-04-30 06:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62398447200, #    utc_start 1978-04-30 06:00:00 (Sun)
  62414168400, #      utc_end 1978-10-29 05:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62414168400, #    utc_start 1978-10-29 05:00:00 (Sun)
  62429896800, #      utc_end 1979-04-29 06:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62429896800, #    utc_start 1979-04-29 06:00:00 (Sun)
  62445618000, #      utc_end 1979-10-28 05:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62445618000, #    utc_start 1979-10-28 05:00:00 (Sun)
  62461346400, #      utc_end 1980-04-27 06:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62461346400, #    utc_start 1980-04-27 06:00:00 (Sun)
  62477067600, #      utc_end 1980-10-26 05:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62477067600, #    utc_start 1980-10-26 05:00:00 (Sun)
  62492796000, #      utc_end 1981-04-26 06:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62492796000, #    utc_start 1981-04-26 06:00:00 (Sun)
  62508517200, #      utc_end 1981-10-25 05:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62508517200, #    utc_start 1981-10-25 05:00:00 (Sun)
  62524245600, #      utc_end 1982-04-25 06:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62524245600, #    utc_start 1982-04-25 06:00:00 (Sun)
  62540571600, #      utc_end 1982-10-31 05:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62540571600, #    utc_start 1982-10-31 05:00:00 (Sun)
  62555695200, #      utc_end 1983-04-24 06:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62555695200, #    utc_start 1983-04-24 06:00:00 (Sun)
  62572021200, #      utc_end 1983-10-30 05:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62572021200, #    utc_start 1983-10-30 05:00:00 (Sun)
  62587749600, #      utc_end 1984-04-29 06:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62587749600, #    utc_start 1984-04-29 06:00:00 (Sun)
  62603470800, #      utc_end 1984-10-28 05:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62603470800, #    utc_start 1984-10-28 05:00:00 (Sun)
  62619199200, #      utc_end 1985-04-28 06:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62619199200, #    utc_start 1985-04-28 06:00:00 (Sun)
  62634920400, #      utc_end 1985-10-27 05:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62634920400, #    utc_start 1985-10-27 05:00:00 (Sun)
  62650648800, #      utc_end 1986-04-27 06:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62650648800, #    utc_start 1986-04-27 06:00:00 (Sun)
  62666370000, #      utc_end 1986-10-26 05:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62666370000, #    utc_start 1986-10-26 05:00:00 (Sun)
  62680276860, #      utc_end 1987-04-05 04:01:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680262460, #    local_end 1987-04-05 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62680276860, #    utc_start 1987-04-05 04:01:00 (Sun)
  62697812460, #      utc_end 1987-10-25 03:01:00 (Sun)
  62680266060, #  local_start 1987-04-05 01:01:00 (Sun)
  62697801660, #    local_end 1987-10-25 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62697812460, #    utc_start 1987-10-25 03:01:00 (Sun)
  62711726460, #      utc_end 1988-04-03 04:01:00 (Sun)
  62697798060, #  local_start 1987-10-24 23:01:00 (Sat)
  62711712060, #    local_end 1988-04-03 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62711726460, #    utc_start 1988-04-03 04:01:00 (Sun)
  62729863260, #      utc_end 1988-10-30 02:01:00 (Sun)
  62711719260, #  local_start 1988-04-03 02:01:00 (Sun)
  62729856060, #    local_end 1988-10-30 00:01:00 (Sun)
  -7200,
  1,
  'ADDT',
      ],
      [
  62729863260, #    utc_start 1988-10-30 02:01:00 (Sun)
  62743176060, #      utc_end 1989-04-02 04:01:00 (Sun)
  62729848860, #  local_start 1988-10-29 22:01:00 (Sat)
  62743161660, #    local_end 1989-04-02 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62743176060, #    utc_start 1989-04-02 04:01:00 (Sun)
  62761316460, #      utc_end 1989-10-29 03:01:00 (Sun)
  62743165260, #  local_start 1989-04-02 01:01:00 (Sun)
  62761305660, #    local_end 1989-10-29 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62761316460, #    utc_start 1989-10-29 03:01:00 (Sun)
  62774625660, #      utc_end 1990-04-01 04:01:00 (Sun)
  62761302060, #  local_start 1989-10-28 23:01:00 (Sat)
  62774611260, #    local_end 1990-04-01 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62774625660, #    utc_start 1990-04-01 04:01:00 (Sun)
  62792766060, #      utc_end 1990-10-28 03:01:00 (Sun)
  62774614860, #  local_start 1990-04-01 01:01:00 (Sun)
  62792755260, #    local_end 1990-10-28 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62792766060, #    utc_start 1990-10-28 03:01:00 (Sun)
  62806680060, #      utc_end 1991-04-07 04:01:00 (Sun)
  62792751660, #  local_start 1990-10-27 23:01:00 (Sat)
  62806665660, #    local_end 1991-04-07 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62806680060, #    utc_start 1991-04-07 04:01:00 (Sun)
  62824215660, #      utc_end 1991-10-27 03:01:00 (Sun)
  62806669260, #  local_start 1991-04-07 01:01:00 (Sun)
  62824204860, #    local_end 1991-10-27 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62824215660, #    utc_start 1991-10-27 03:01:00 (Sun)
  62838129660, #      utc_end 1992-04-05 04:01:00 (Sun)
  62824201260, #  local_start 1991-10-26 23:01:00 (Sat)
  62838115260, #    local_end 1992-04-05 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62838129660, #    utc_start 1992-04-05 04:01:00 (Sun)
  62855665260, #      utc_end 1992-10-25 03:01:00 (Sun)
  62838118860, #  local_start 1992-04-05 01:01:00 (Sun)
  62855654460, #    local_end 1992-10-25 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62855665260, #    utc_start 1992-10-25 03:01:00 (Sun)
  62869579260, #      utc_end 1993-04-04 04:01:00 (Sun)
  62855650860, #  local_start 1992-10-24 23:01:00 (Sat)
  62869564860, #    local_end 1993-04-04 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62869579260, #    utc_start 1993-04-04 04:01:00 (Sun)
  62887719660, #      utc_end 1993-10-31 03:01:00 (Sun)
  62869568460, #  local_start 1993-04-04 01:01:00 (Sun)
  62887708860, #    local_end 1993-10-31 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62887719660, #    utc_start 1993-10-31 03:01:00 (Sun)
  62901028860, #      utc_end 1994-04-03 04:01:00 (Sun)
  62887705260, #  local_start 1993-10-30 23:01:00 (Sat)
  62901014460, #    local_end 1994-04-03 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62901028860, #    utc_start 1994-04-03 04:01:00 (Sun)
  62919169260, #      utc_end 1994-10-30 03:01:00 (Sun)
  62901018060, #  local_start 1994-04-03 01:01:00 (Sun)
  62919158460, #    local_end 1994-10-30 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62919169260, #    utc_start 1994-10-30 03:01:00 (Sun)
  62932478460, #      utc_end 1995-04-02 04:01:00 (Sun)
  62919154860, #  local_start 1994-10-29 23:01:00 (Sat)
  62932464060, #    local_end 1995-04-02 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62932478460, #    utc_start 1995-04-02 04:01:00 (Sun)
  62950618860, #      utc_end 1995-10-29 03:01:00 (Sun)
  62932467660, #  local_start 1995-04-02 01:01:00 (Sun)
  62950608060, #    local_end 1995-10-29 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62950618860, #    utc_start 1995-10-29 03:01:00 (Sun)
  62964532860, #      utc_end 1996-04-07 04:01:00 (Sun)
  62950604460, #  local_start 1995-10-28 23:01:00 (Sat)
  62964518460, #    local_end 1996-04-07 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62964532860, #    utc_start 1996-04-07 04:01:00 (Sun)
  62982068460, #      utc_end 1996-10-27 03:01:00 (Sun)
  62964522060, #  local_start 1996-04-07 01:01:00 (Sun)
  62982057660, #    local_end 1996-10-27 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62982068460, #    utc_start 1996-10-27 03:01:00 (Sun)
  62995982460, #      utc_end 1997-04-06 04:01:00 (Sun)
  62982054060, #  local_start 1996-10-26 23:01:00 (Sat)
  62995968060, #    local_end 1997-04-06 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62995982460, #    utc_start 1997-04-06 04:01:00 (Sun)
  63013518060, #      utc_end 1997-10-26 03:01:00 (Sun)
  62995971660, #  local_start 1997-04-06 01:01:00 (Sun)
  63013507260, #    local_end 1997-10-26 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63013518060, #    utc_start 1997-10-26 03:01:00 (Sun)
  63027432060, #      utc_end 1998-04-05 04:01:00 (Sun)
  63013503660, #  local_start 1997-10-25 23:01:00 (Sat)
  63027417660, #    local_end 1998-04-05 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63027432060, #    utc_start 1998-04-05 04:01:00 (Sun)
  63044967660, #      utc_end 1998-10-25 03:01:00 (Sun)
  63027421260, #  local_start 1998-04-05 01:01:00 (Sun)
  63044956860, #    local_end 1998-10-25 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63044967660, #    utc_start 1998-10-25 03:01:00 (Sun)
  63058881660, #      utc_end 1999-04-04 04:01:00 (Sun)
  63044953260, #  local_start 1998-10-24 23:01:00 (Sat)
  63058867260, #    local_end 1999-04-04 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63058881660, #    utc_start 1999-04-04 04:01:00 (Sun)
  63077022060, #      utc_end 1999-10-31 03:01:00 (Sun)
  63058870860, #  local_start 1999-04-04 01:01:00 (Sun)
  63077011260, #    local_end 1999-10-31 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63077022060, #    utc_start 1999-10-31 03:01:00 (Sun)
  63090331260, #      utc_end 2000-04-02 04:01:00 (Sun)
  63077007660, #  local_start 1999-10-30 23:01:00 (Sat)
  63090316860, #    local_end 2000-04-02 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63090331260, #    utc_start 2000-04-02 04:01:00 (Sun)
  63108471660, #      utc_end 2000-10-29 03:01:00 (Sun)
  63090320460, #  local_start 2000-04-02 01:01:00 (Sun)
  63108460860, #    local_end 2000-10-29 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63108471660, #    utc_start 2000-10-29 03:01:00 (Sun)
  63121780860, #      utc_end 2001-04-01 04:01:00 (Sun)
  63108457260, #  local_start 2000-10-28 23:01:00 (Sat)
  63121766460, #    local_end 2001-04-01 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63121780860, #    utc_start 2001-04-01 04:01:00 (Sun)
  63139921260, #      utc_end 2001-10-28 03:01:00 (Sun)
  63121770060, #  local_start 2001-04-01 01:01:00 (Sun)
  63139910460, #    local_end 2001-10-28 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63139921260, #    utc_start 2001-10-28 03:01:00 (Sun)
  63153835260, #      utc_end 2002-04-07 04:01:00 (Sun)
  63139906860, #  local_start 2001-10-27 23:01:00 (Sat)
  63153820860, #    local_end 2002-04-07 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63153835260, #    utc_start 2002-04-07 04:01:00 (Sun)
  63171370860, #      utc_end 2002-10-27 03:01:00 (Sun)
  63153824460, #  local_start 2002-04-07 01:01:00 (Sun)
  63171360060, #    local_end 2002-10-27 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63171370860, #    utc_start 2002-10-27 03:01:00 (Sun)
  63185284860, #      utc_end 2003-04-06 04:01:00 (Sun)
  63171356460, #  local_start 2002-10-26 23:01:00 (Sat)
  63185270460, #    local_end 2003-04-06 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63185284860, #    utc_start 2003-04-06 04:01:00 (Sun)
  63202820460, #      utc_end 2003-10-26 03:01:00 (Sun)
  63185274060, #  local_start 2003-04-06 01:01:00 (Sun)
  63202809660, #    local_end 2003-10-26 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63202820460, #    utc_start 2003-10-26 03:01:00 (Sun)
  63216734460, #      utc_end 2004-04-04 04:01:00 (Sun)
  63202806060, #  local_start 2003-10-25 23:01:00 (Sat)
  63216720060, #    local_end 2004-04-04 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63216734460, #    utc_start 2004-04-04 04:01:00 (Sun)
  63234874860, #      utc_end 2004-10-31 03:01:00 (Sun)
  63216723660, #  local_start 2004-04-04 01:01:00 (Sun)
  63234864060, #    local_end 2004-10-31 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63234874860, #    utc_start 2004-10-31 03:01:00 (Sun)
  63248184060, #      utc_end 2005-04-03 04:01:00 (Sun)
  63234860460, #  local_start 2004-10-30 23:01:00 (Sat)
  63248169660, #    local_end 2005-04-03 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63248184060, #    utc_start 2005-04-03 04:01:00 (Sun)
  63266324460, #      utc_end 2005-10-30 03:01:00 (Sun)
  63248173260, #  local_start 2005-04-03 01:01:00 (Sun)
  63266313660, #    local_end 2005-10-30 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63266324460, #    utc_start 2005-10-30 03:01:00 (Sun)
  63279633660, #      utc_end 2006-04-02 04:01:00 (Sun)
  63266310060, #  local_start 2005-10-29 23:01:00 (Sat)
  63279619260, #    local_end 2006-04-02 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63279633660, #    utc_start 2006-04-02 04:01:00 (Sun)
  63297774060, #      utc_end 2006-10-29 03:01:00 (Sun)
  63279622860, #  local_start 2006-04-02 01:01:00 (Sun)
  63297763260, #    local_end 2006-10-29 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63297774060, #    utc_start 2006-10-29 03:01:00 (Sun)
  63309268860, #      utc_end 2007-03-11 04:01:00 (Sun)
  63297759660, #  local_start 2006-10-28 23:01:00 (Sat)
  63309254460, #    local_end 2007-03-11 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63309268860, #    utc_start 2007-03-11 04:01:00 (Sun)
  63329828460, #      utc_end 2007-11-04 03:01:00 (Sun)
  63309258060, #  local_start 2007-03-11 01:01:00 (Sun)
  63329817660, #    local_end 2007-11-04 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63329828460, #    utc_start 2007-11-04 03:01:00 (Sun)
  63340718460, #      utc_end 2008-03-09 04:01:00 (Sun)
  63329814060, #  local_start 2007-11-03 23:01:00 (Sat)
  63340704060, #    local_end 2008-03-09 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63340718460, #    utc_start 2008-03-09 04:01:00 (Sun)
  63361278060, #      utc_end 2008-11-02 03:01:00 (Sun)
  63340707660, #  local_start 2008-03-09 01:01:00 (Sun)
  63361267260, #    local_end 2008-11-02 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63361278060, #    utc_start 2008-11-02 03:01:00 (Sun)
  63372168060, #      utc_end 2009-03-08 04:01:00 (Sun)
  63361263660, #  local_start 2008-11-01 23:01:00 (Sat)
  63372153660, #    local_end 2009-03-08 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63372168060, #    utc_start 2009-03-08 04:01:00 (Sun)
  63392727660, #      utc_end 2009-11-01 03:01:00 (Sun)
  63372157260, #  local_start 2009-03-08 01:01:00 (Sun)
  63392716860, #    local_end 2009-11-01 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63392727660, #    utc_start 2009-11-01 03:01:00 (Sun)
  63404222460, #      utc_end 2010-03-14 04:01:00 (Sun)
  63392713260, #  local_start 2009-10-31 23:01:00 (Sat)
  63404208060, #    local_end 2010-03-14 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63404222460, #    utc_start 2010-03-14 04:01:00 (Sun)
  63424782060, #      utc_end 2010-11-07 03:01:00 (Sun)
  63404211660, #  local_start 2010-03-14 01:01:00 (Sun)
  63424771260, #    local_end 2010-11-07 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63424782060, #    utc_start 2010-11-07 03:01:00 (Sun)
  63435672060, #      utc_end 2011-03-13 04:01:00 (Sun)
  63424767660, #  local_start 2010-11-06 23:01:00 (Sat)
  63435657660, #    local_end 2011-03-13 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63435672060, #    utc_start 2011-03-13 04:01:00 (Sun)
  63455799600, #      utc_end 2011-11-01 03:00:00 (Tue)
  63435661260, #  local_start 2011-03-13 01:01:00 (Sun)
  63455788800, #    local_end 2011-11-01 00:00:00 (Tue)
  -10800,
  1,
  'ADT',
      ],
      [
  63455799600, #    utc_start 2011-11-01 03:00:00 (Tue)
  63456238800, #      utc_end 2011-11-06 05:00:00 (Sun)
  63455788800, #  local_start 2011-11-01 00:00:00 (Tue)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63456238800, #    utc_start 2011-11-06 05:00:00 (Sun)
  63467128800, #      utc_end 2012-03-11 06:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63467128800, #    utc_start 2012-03-11 06:00:00 (Sun)
  63487688400, #      utc_end 2012-11-04 05:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63487688400, #    utc_start 2012-11-04 05:00:00 (Sun)
  63498578400, #      utc_end 2013-03-10 06:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63498578400, #    utc_start 2013-03-10 06:00:00 (Sun)
  63519138000, #      utc_end 2013-11-03 05:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63519138000, #    utc_start 2013-11-03 05:00:00 (Sun)
  63530028000, #      utc_end 2014-03-09 06:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63530028000, #    utc_start 2014-03-09 06:00:00 (Sun)
  63550587600, #      utc_end 2014-11-02 05:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63550587600, #    utc_start 2014-11-02 05:00:00 (Sun)
  63561477600, #      utc_end 2015-03-08 06:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63561477600, #    utc_start 2015-03-08 06:00:00 (Sun)
  63582037200, #      utc_end 2015-11-01 05:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63582037200, #    utc_start 2015-11-01 05:00:00 (Sun)
  63593532000, #      utc_end 2016-03-13 06:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63593532000, #    utc_start 2016-03-13 06:00:00 (Sun)
  63614091600, #      utc_end 2016-11-06 05:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63614091600, #    utc_start 2016-11-06 05:00:00 (Sun)
  63624981600, #      utc_end 2017-03-12 06:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63624981600, #    utc_start 2017-03-12 06:00:00 (Sun)
  63645541200, #      utc_end 2017-11-05 05:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63645541200, #    utc_start 2017-11-05 05:00:00 (Sun)
  63656431200, #      utc_end 2018-03-11 06:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63656431200, #    utc_start 2018-03-11 06:00:00 (Sun)
  63676990800, #      utc_end 2018-11-04 05:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63676990800, #    utc_start 2018-11-04 05:00:00 (Sun)
  63687880800, #      utc_end 2019-03-10 06:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63687880800, #    utc_start 2019-03-10 06:00:00 (Sun)
  63708440400, #      utc_end 2019-11-03 05:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63708440400, #    utc_start 2019-11-03 05:00:00 (Sun)
  63719330400, #      utc_end 2020-03-08 06:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63719330400, #    utc_start 2020-03-08 06:00:00 (Sun)
  63739890000, #      utc_end 2020-11-01 05:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63739890000, #    utc_start 2020-11-01 05:00:00 (Sun)
  63751384800, #      utc_end 2021-03-14 06:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63751384800, #    utc_start 2021-03-14 06:00:00 (Sun)
  63771944400, #      utc_end 2021-11-07 05:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63771944400, #    utc_start 2021-11-07 05:00:00 (Sun)
  63782834400, #      utc_end 2022-03-13 06:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63782834400, #    utc_start 2022-03-13 06:00:00 (Sun)
  63803394000, #      utc_end 2022-11-06 05:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63803394000, #    utc_start 2022-11-06 05:00:00 (Sun)
  63814284000, #      utc_end 2023-03-12 06:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63814284000, #    utc_start 2023-03-12 06:00:00 (Sun)
  63834843600, #      utc_end 2023-11-05 05:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63834843600, #    utc_start 2023-11-05 05:00:00 (Sun)
  63845733600, #      utc_end 2024-03-10 06:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63845733600, #    utc_start 2024-03-10 06:00:00 (Sun)
  63866293200, #      utc_end 2024-11-03 05:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63866293200, #    utc_start 2024-11-03 05:00:00 (Sun)
  63877183200, #      utc_end 2025-03-09 06:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63877183200, #    utc_start 2025-03-09 06:00:00 (Sun)
  63897742800, #      utc_end 2025-11-02 05:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63897742800, #    utc_start 2025-11-02 05:00:00 (Sun)
  63908632800, #      utc_end 2026-03-08 06:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63908632800, #    utc_start 2026-03-08 06:00:00 (Sun)
  63929192400, #      utc_end 2026-11-01 05:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63929192400, #    utc_start 2026-11-01 05:00:00 (Sun)
  63940687200, #      utc_end 2027-03-14 06:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63940687200, #    utc_start 2027-03-14 06:00:00 (Sun)
  63961246800, #      utc_end 2027-11-07 05:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {92}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -14400 }
  
  my $last_observance = bless( {
    'format' => 'A%sT',
    'gmtoff' => '-4:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 734442,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 734442,
      'utc_rd_secs' => 0,
      'utc_year' => 2012
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -14400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 734442,
      'local_rd_secs' => 10800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 734442,
      'utc_rd_secs' => 10800,
      'utc_year' => 2012
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_GOOSE_BAY

    $main::fatpacked{"DateTime/TimeZone/America/Grand_Turk.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_GRAND_TURK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Grand_Turk;
  $DateTime::TimeZone::America::Grand_Turk::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Grand_Turk::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611178672, #      utc_end 1890-01-01 04:44:32 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -17072,
  0,
  'LMT',
      ],
      [
  59611178672, #    utc_start 1890-01-01 04:44:32 (Wed)
  60307996031, #      utc_end 1912-02-01 05:07:11 (Thu)
  59611160241, #  local_start 1889-12-31 23:37:21 (Tue)
  60307977600, #    local_end 1912-02-01 00:00:00 (Thu)
  -18431,
  0,
  'KMT',
      ],
      [
  60307996031, #    utc_start 1912-02-01 05:07:11 (Thu)
  62419698000, #      utc_end 1979-01-01 05:00:00 (Mon)
  60307978031, #  local_start 1912-02-01 00:07:11 (Thu)
  62419680000, #    local_end 1979-01-01 00:00:00 (Mon)
  -18000,
  0,
  'EST',
      ],
      [
  62419698000, #    utc_start 1979-01-01 05:00:00 (Mon)
  62429900400, #      utc_end 1979-04-29 07:00:00 (Sun)
  62419680000, #  local_start 1979-01-01 00:00:00 (Mon)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62429900400, #    utc_start 1979-04-29 07:00:00 (Sun)
  62445621600, #      utc_end 1979-10-28 06:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62445621600, #    utc_start 1979-10-28 06:00:00 (Sun)
  62461350000, #      utc_end 1980-04-27 07:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62461350000, #    utc_start 1980-04-27 07:00:00 (Sun)
  62477071200, #      utc_end 1980-10-26 06:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62477071200, #    utc_start 1980-10-26 06:00:00 (Sun)
  62492799600, #      utc_end 1981-04-26 07:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62492799600, #    utc_start 1981-04-26 07:00:00 (Sun)
  62508520800, #      utc_end 1981-10-25 06:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62508520800, #    utc_start 1981-10-25 06:00:00 (Sun)
  62524249200, #      utc_end 1982-04-25 07:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62524249200, #    utc_start 1982-04-25 07:00:00 (Sun)
  62540575200, #      utc_end 1982-10-31 06:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62540575200, #    utc_start 1982-10-31 06:00:00 (Sun)
  62555698800, #      utc_end 1983-04-24 07:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62555698800, #    utc_start 1983-04-24 07:00:00 (Sun)
  62572024800, #      utc_end 1983-10-30 06:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62572024800, #    utc_start 1983-10-30 06:00:00 (Sun)
  62587753200, #      utc_end 1984-04-29 07:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62587753200, #    utc_start 1984-04-29 07:00:00 (Sun)
  62603474400, #      utc_end 1984-10-28 06:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62603474400, #    utc_start 1984-10-28 06:00:00 (Sun)
  62619202800, #      utc_end 1985-04-28 07:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62619202800, #    utc_start 1985-04-28 07:00:00 (Sun)
  62634924000, #      utc_end 1985-10-27 06:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62634924000, #    utc_start 1985-10-27 06:00:00 (Sun)
  62650652400, #      utc_end 1986-04-27 07:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62650652400, #    utc_start 1986-04-27 07:00:00 (Sun)
  62666373600, #      utc_end 1986-10-26 06:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62666373600, #    utc_start 1986-10-26 06:00:00 (Sun)
  62680287600, #      utc_end 1987-04-05 07:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62680287600, #    utc_start 1987-04-05 07:00:00 (Sun)
  62697823200, #      utc_end 1987-10-25 06:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62697823200, #    utc_start 1987-10-25 06:00:00 (Sun)
  62711737200, #      utc_end 1988-04-03 07:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62711737200, #    utc_start 1988-04-03 07:00:00 (Sun)
  62729877600, #      utc_end 1988-10-30 06:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62729877600, #    utc_start 1988-10-30 06:00:00 (Sun)
  62743186800, #      utc_end 1989-04-02 07:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62743186800, #    utc_start 1989-04-02 07:00:00 (Sun)
  62761327200, #      utc_end 1989-10-29 06:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62761327200, #    utc_start 1989-10-29 06:00:00 (Sun)
  62774636400, #      utc_end 1990-04-01 07:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62774636400, #    utc_start 1990-04-01 07:00:00 (Sun)
  62792776800, #      utc_end 1990-10-28 06:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62792776800, #    utc_start 1990-10-28 06:00:00 (Sun)
  62806690800, #      utc_end 1991-04-07 07:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62806690800, #    utc_start 1991-04-07 07:00:00 (Sun)
  62824226400, #      utc_end 1991-10-27 06:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62824226400, #    utc_start 1991-10-27 06:00:00 (Sun)
  62838140400, #      utc_end 1992-04-05 07:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62838140400, #    utc_start 1992-04-05 07:00:00 (Sun)
  62855676000, #      utc_end 1992-10-25 06:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62855676000, #    utc_start 1992-10-25 06:00:00 (Sun)
  62869590000, #      utc_end 1993-04-04 07:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62869590000, #    utc_start 1993-04-04 07:00:00 (Sun)
  62887730400, #      utc_end 1993-10-31 06:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62887730400, #    utc_start 1993-10-31 06:00:00 (Sun)
  62901039600, #      utc_end 1994-04-03 07:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62901039600, #    utc_start 1994-04-03 07:00:00 (Sun)
  62919180000, #      utc_end 1994-10-30 06:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62919180000, #    utc_start 1994-10-30 06:00:00 (Sun)
  62932489200, #      utc_end 1995-04-02 07:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62932489200, #    utc_start 1995-04-02 07:00:00 (Sun)
  62950629600, #      utc_end 1995-10-29 06:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62950629600, #    utc_start 1995-10-29 06:00:00 (Sun)
  62964543600, #      utc_end 1996-04-07 07:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62964543600, #    utc_start 1996-04-07 07:00:00 (Sun)
  62982079200, #      utc_end 1996-10-27 06:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62982079200, #    utc_start 1996-10-27 06:00:00 (Sun)
  62995993200, #      utc_end 1997-04-06 07:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62995993200, #    utc_start 1997-04-06 07:00:00 (Sun)
  63013528800, #      utc_end 1997-10-26 06:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63013528800, #    utc_start 1997-10-26 06:00:00 (Sun)
  63027442800, #      utc_end 1998-04-05 07:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63027442800, #    utc_start 1998-04-05 07:00:00 (Sun)
  63044978400, #      utc_end 1998-10-25 06:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63044978400, #    utc_start 1998-10-25 06:00:00 (Sun)
  63058892400, #      utc_end 1999-04-04 07:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63058892400, #    utc_start 1999-04-04 07:00:00 (Sun)
  63077032800, #      utc_end 1999-10-31 06:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63077032800, #    utc_start 1999-10-31 06:00:00 (Sun)
  63090342000, #      utc_end 2000-04-02 07:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63090342000, #    utc_start 2000-04-02 07:00:00 (Sun)
  63108482400, #      utc_end 2000-10-29 06:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63108482400, #    utc_start 2000-10-29 06:00:00 (Sun)
  63121791600, #      utc_end 2001-04-01 07:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63121791600, #    utc_start 2001-04-01 07:00:00 (Sun)
  63139932000, #      utc_end 2001-10-28 06:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63139932000, #    utc_start 2001-10-28 06:00:00 (Sun)
  63153846000, #      utc_end 2002-04-07 07:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63153846000, #    utc_start 2002-04-07 07:00:00 (Sun)
  63171381600, #      utc_end 2002-10-27 06:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63171381600, #    utc_start 2002-10-27 06:00:00 (Sun)
  63185295600, #      utc_end 2003-04-06 07:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63185295600, #    utc_start 2003-04-06 07:00:00 (Sun)
  63202831200, #      utc_end 2003-10-26 06:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63202831200, #    utc_start 2003-10-26 06:00:00 (Sun)
  63216745200, #      utc_end 2004-04-04 07:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63216745200, #    utc_start 2004-04-04 07:00:00 (Sun)
  63234885600, #      utc_end 2004-10-31 06:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63234885600, #    utc_start 2004-10-31 06:00:00 (Sun)
  63248194800, #      utc_end 2005-04-03 07:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63248194800, #    utc_start 2005-04-03 07:00:00 (Sun)
  63266335200, #      utc_end 2005-10-30 06:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63266335200, #    utc_start 2005-10-30 06:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297784800, #      utc_end 2006-10-29 06:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63297784800, #    utc_start 2006-10-29 06:00:00 (Sun)
  63309279600, #      utc_end 2007-03-11 07:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63309279600, #    utc_start 2007-03-11 07:00:00 (Sun)
  63329839200, #      utc_end 2007-11-04 06:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63329839200, #    utc_start 2007-11-04 06:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63582026400, #  local_start 2015-11-01 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -14400,
  0,
  'AST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {37}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_GRAND_TURK

    $main::fatpacked{"DateTime/TimeZone/America/Guatemala.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_GUATEMALA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Guatemala;
  $DateTime::TimeZone::America::Guatemala::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Guatemala::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60518642524, #      utc_end 1918-10-05 06:02:04 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60518620800, #    local_end 1918-10-05 00:00:00 (Sat)
  -21724,
  0,
  'LMT',
      ],
      [
  60518642524, #    utc_start 1918-10-05 06:02:04 (Sat)
  62258738400, #      utc_end 1973-11-25 06:00:00 (Sun)
  60518620924, #  local_start 1918-10-05 00:02:04 (Sat)
  62258716800, #    local_end 1973-11-25 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62258738400, #    utc_start 1973-11-25 06:00:00 (Sun)
  62266597200, #      utc_end 1974-02-24 05:00:00 (Sun)
  62258720400, #  local_start 1973-11-25 01:00:00 (Sun)
  62266579200, #    local_end 1974-02-24 00:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62266597200, #    utc_start 1974-02-24 05:00:00 (Sun)
  62558028000, #      utc_end 1983-05-21 06:00:00 (Sat)
  62266575600, #  local_start 1974-02-23 23:00:00 (Sat)
  62558006400, #    local_end 1983-05-21 00:00:00 (Sat)
  -21600,
  0,
  'CST',
      ],
      [
  62558028000, #    utc_start 1983-05-21 06:00:00 (Sat)
  62568738000, #      utc_end 1983-09-22 05:00:00 (Thu)
  62558010000, #  local_start 1983-05-21 01:00:00 (Sat)
  62568720000, #    local_end 1983-09-22 00:00:00 (Thu)
  -18000,
  1,
  'CDT',
      ],
      [
  62568738000, #    utc_start 1983-09-22 05:00:00 (Thu)
  62805391200, #      utc_end 1991-03-23 06:00:00 (Sat)
  62568716400, #  local_start 1983-09-21 23:00:00 (Wed)
  62805369600, #    local_end 1991-03-23 00:00:00 (Sat)
  -21600,
  0,
  'CST',
      ],
      [
  62805391200, #    utc_start 1991-03-23 06:00:00 (Sat)
  62819902800, #      utc_end 1991-09-07 05:00:00 (Sat)
  62805373200, #  local_start 1991-03-23 01:00:00 (Sat)
  62819884800, #    local_end 1991-09-07 00:00:00 (Sat)
  -18000,
  1,
  'CDT',
      ],
      [
  62819902800, #    utc_start 1991-09-07 05:00:00 (Sat)
  63282060000, #      utc_end 2006-04-30 06:00:00 (Sun)
  62819881200, #  local_start 1991-09-06 23:00:00 (Fri)
  63282038400, #    local_end 2006-04-30 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63282060000, #    utc_start 2006-04-30 06:00:00 (Sun)
  63295362000, #      utc_end 2006-10-01 05:00:00 (Sun)
  63282042000, #  local_start 2006-04-30 01:00:00 (Sun)
  63295344000, #    local_end 2006-10-01 00:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63295362000, #    utc_start 2006-10-01 05:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63295340400, #  local_start 2006-09-30 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -21600,
  0,
  'CST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {4}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_GUATEMALA

    $main::fatpacked{"DateTime/TimeZone/America/Guayaquil.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_GUAYAQUIL';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Guayaquil;
  $DateTime::TimeZone::America::Guayaquil::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Guayaquil::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611180760, #      utc_end 1890-01-01 05:19:20 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -19160,
  0,
  'LMT',
      ],
      [
  59611180760, #    utc_start 1890-01-01 05:19:20 (Wed)
  60904934040, #      utc_end 1931-01-01 05:14:00 (Thu)
  59611161920, #  local_start 1890-01-01 00:05:20 (Wed)
  60904915200, #    local_end 1931-01-01 00:00:00 (Thu)
  -18840,
  0,
  'QMT',
      ],
      [
  60904934040, #    utc_start 1931-01-01 05:14:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  60904916040, #  local_start 1931-01-01 00:14:00 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  -18000,
  0,
  'ECT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_GUAYAQUIL

    $main::fatpacked{"DateTime/TimeZone/America/Guyana.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_GUYANA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Guyana;
  $DateTime::TimeZone::America::Guyana::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Guyana::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60405105160, #      utc_end 1915-03-01 03:52:40 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60405091200, #    local_end 1915-03-01 00:00:00 (Mon)
  -13960,
  0,
  'LMT',
      ],
      [
  60405105160, #    utc_start 1915-03-01 03:52:40 (Mon)
  62021994300, #      utc_end 1966-05-26 03:45:00 (Thu)
  60405091660, #  local_start 1915-03-01 00:07:40 (Mon)
  62021980800, #    local_end 1966-05-26 00:00:00 (Thu)
  -13500,
  0,
  'GBGT',
      ],
      [
  62021994300, #    utc_start 1966-05-26 03:45:00 (Thu)
  62311693500, #      utc_end 1975-07-31 03:45:00 (Thu)
  62021980800, #  local_start 1966-05-26 00:00:00 (Thu)
  62311680000, #    local_end 1975-07-31 00:00:00 (Thu)
  -13500,
  0,
  'GYT',
      ],
      [
  62311693500, #    utc_start 1975-07-31 03:45:00 (Thu)
  62798382000, #      utc_end 1991-01-01 03:00:00 (Tue)
  62311682700, #  local_start 1975-07-31 00:45:00 (Thu)
  62798371200, #    local_end 1991-01-01 00:00:00 (Tue)
  -10800,
  0,
  'GYT',
      ],
      [
  62798382000, #    utc_start 1991-01-01 03:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  62798367600, #  local_start 1990-12-31 23:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  -14400,
  0,
  'GYT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_GUYANA

    $main::fatpacked{"DateTime/TimeZone/America/Halifax.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_HALIFAX';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Halifax;
  $DateTime::TimeZone::America::Halifax::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Halifax::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60004037664, #      utc_end 1902-06-15 04:14:24 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60004022400, #    local_end 1902-06-15 00:00:00 (Sun)
  -15264,
  0,
  'LMT',
      ],
      [
  60004037664, #    utc_start 1902-06-15 04:14:24 (Sun)
  60439406400, #      utc_end 1916-04-01 04:00:00 (Sat)
  60004023264, #  local_start 1902-06-15 00:14:24 (Sun)
  60439392000, #    local_end 1916-04-01 00:00:00 (Sat)
  -14400,
  0,
  'AST',
      ],
      [
  60439406400, #    utc_start 1916-04-01 04:00:00 (Sat)
  60455214000, #      utc_end 1916-10-01 03:00:00 (Sun)
  60439395600, #  local_start 1916-04-01 01:00:00 (Sat)
  60455203200, #    local_end 1916-10-01 00:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  60455214000, #    utc_start 1916-10-01 03:00:00 (Sun)
  60494702400, #      utc_end 1918-01-01 04:00:00 (Tue)
  60455199600, #  local_start 1916-09-30 23:00:00 (Sat)
  60494688000, #    local_end 1918-01-01 00:00:00 (Tue)
  -14400,
  0,
  'AST',
      ],
      [
  60494702400, #    utc_start 1918-01-01 04:00:00 (Tue)
  60503608800, #      utc_end 1918-04-14 06:00:00 (Sun)
  60494688000, #  local_start 1918-01-01 00:00:00 (Tue)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60503608800, #    utc_start 1918-04-14 06:00:00 (Sun)
  60520539600, #      utc_end 1918-10-27 05:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  60520539600, #    utc_start 1918-10-27 05:00:00 (Sun)
  60526238400, #      utc_end 1919-01-01 04:00:00 (Wed)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60526224000, #    local_end 1919-01-01 00:00:00 (Wed)
  -14400,
  0,
  'AST',
      ],
      [
  60526238400, #    utc_start 1919-01-01 04:00:00 (Wed)
  60568920000, #      utc_end 1920-05-09 04:00:00 (Sun)
  60526224000, #  local_start 1919-01-01 00:00:00 (Wed)
  60568905600, #    local_end 1920-05-09 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60568920000, #    utc_start 1920-05-09 04:00:00 (Sun)
  60578593200, #      utc_end 1920-08-29 03:00:00 (Sun)
  60568909200, #  local_start 1920-05-09 01:00:00 (Sun)
  60578582400, #    local_end 1920-08-29 00:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  60578593200, #    utc_start 1920-08-29 03:00:00 (Sun)
  60600196800, #      utc_end 1921-05-06 04:00:00 (Fri)
  60578578800, #  local_start 1920-08-28 23:00:00 (Sat)
  60600182400, #    local_end 1921-05-06 00:00:00 (Fri)
  -14400,
  0,
  'AST',
      ],
      [
  60600196800, #    utc_start 1921-05-06 04:00:00 (Fri)
  60610734000, #      utc_end 1921-09-05 03:00:00 (Mon)
  60600186000, #  local_start 1921-05-06 01:00:00 (Fri)
  60610723200, #    local_end 1921-09-05 00:00:00 (Mon)
  -10800,
  1,
  'ADT',
      ],
      [
  60610734000, #    utc_start 1921-09-05 03:00:00 (Mon)
  60631214400, #      utc_end 1922-04-30 04:00:00 (Sun)
  60610719600, #  local_start 1921-09-04 23:00:00 (Sun)
  60631200000, #    local_end 1922-04-30 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60631214400, #    utc_start 1922-04-30 04:00:00 (Sun)
  60642270000, #      utc_end 1922-09-05 03:00:00 (Tue)
  60631203600, #  local_start 1922-04-30 01:00:00 (Sun)
  60642259200, #    local_end 1922-09-05 00:00:00 (Tue)
  -10800,
  1,
  'ADT',
      ],
      [
  60642270000, #    utc_start 1922-09-05 03:00:00 (Tue)
  60663268800, #      utc_end 1923-05-06 04:00:00 (Sun)
  60642255600, #  local_start 1922-09-04 23:00:00 (Mon)
  60663254400, #    local_end 1923-05-06 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60663268800, #    utc_start 1923-05-06 04:00:00 (Sun)
  60673719600, #      utc_end 1923-09-04 03:00:00 (Tue)
  60663258000, #  local_start 1923-05-06 01:00:00 (Sun)
  60673708800, #    local_end 1923-09-04 00:00:00 (Tue)
  -10800,
  1,
  'ADT',
      ],
      [
  60673719600, #    utc_start 1923-09-04 03:00:00 (Tue)
  60694718400, #      utc_end 1924-05-04 04:00:00 (Sun)
  60673705200, #  local_start 1923-09-03 23:00:00 (Mon)
  60694704000, #    local_end 1924-05-04 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60694718400, #    utc_start 1924-05-04 04:00:00 (Sun)
  60706292400, #      utc_end 1924-09-15 03:00:00 (Mon)
  60694707600, #  local_start 1924-05-04 01:00:00 (Sun)
  60706281600, #    local_end 1924-09-15 00:00:00 (Mon)
  -10800,
  1,
  'ADT',
      ],
      [
  60706292400, #    utc_start 1924-09-15 03:00:00 (Mon)
  60726168000, #      utc_end 1925-05-03 04:00:00 (Sun)
  60706278000, #  local_start 1924-09-14 23:00:00 (Sun)
  60726153600, #    local_end 1925-05-03 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60726168000, #    utc_start 1925-05-03 04:00:00 (Sun)
  60738951600, #      utc_end 1925-09-28 03:00:00 (Mon)
  60726157200, #  local_start 1925-05-03 01:00:00 (Sun)
  60738940800, #    local_end 1925-09-28 00:00:00 (Mon)
  -10800,
  1,
  'ADT',
      ],
      [
  60738951600, #    utc_start 1925-09-28 03:00:00 (Mon)
  60758827200, #      utc_end 1926-05-16 04:00:00 (Sun)
  60738937200, #  local_start 1925-09-27 23:00:00 (Sun)
  60758812800, #    local_end 1926-05-16 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60758827200, #    utc_start 1926-05-16 04:00:00 (Sun)
  60769191600, #      utc_end 1926-09-13 03:00:00 (Mon)
  60758816400, #  local_start 1926-05-16 01:00:00 (Sun)
  60769180800, #    local_end 1926-09-13 00:00:00 (Mon)
  -10800,
  1,
  'ADT',
      ],
      [
  60769191600, #    utc_start 1926-09-13 03:00:00 (Mon)
  60789067200, #      utc_end 1927-05-01 04:00:00 (Sun)
  60769177200, #  local_start 1926-09-12 23:00:00 (Sun)
  60789052800, #    local_end 1927-05-01 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60789067200, #    utc_start 1927-05-01 04:00:00 (Sun)
  60801850800, #      utc_end 1927-09-26 03:00:00 (Mon)
  60789056400, #  local_start 1927-05-01 01:00:00 (Sun)
  60801840000, #    local_end 1927-09-26 00:00:00 (Mon)
  -10800,
  1,
  'ADT',
      ],
      [
  60801850800, #    utc_start 1927-09-26 03:00:00 (Mon)
  60821726400, #      utc_end 1928-05-13 04:00:00 (Sun)
  60801836400, #  local_start 1927-09-25 23:00:00 (Sun)
  60821712000, #    local_end 1928-05-13 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60821726400, #    utc_start 1928-05-13 04:00:00 (Sun)
  60832004400, #      utc_end 1928-09-09 03:00:00 (Sun)
  60821715600, #  local_start 1928-05-13 01:00:00 (Sun)
  60831993600, #    local_end 1928-09-09 00:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  60832004400, #    utc_start 1928-09-09 03:00:00 (Sun)
  60853176000, #      utc_end 1929-05-12 04:00:00 (Sun)
  60831990000, #  local_start 1928-09-08 23:00:00 (Sat)
  60853161600, #    local_end 1929-05-12 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60853176000, #    utc_start 1929-05-12 04:00:00 (Sun)
  60863022000, #      utc_end 1929-09-03 03:00:00 (Tue)
  60853165200, #  local_start 1929-05-12 01:00:00 (Sun)
  60863011200, #    local_end 1929-09-03 00:00:00 (Tue)
  -10800,
  1,
  'ADT',
      ],
      [
  60863022000, #    utc_start 1929-09-03 03:00:00 (Tue)
  60884625600, #      utc_end 1930-05-11 04:00:00 (Sun)
  60863007600, #  local_start 1929-09-02 23:00:00 (Mon)
  60884611200, #    local_end 1930-05-11 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60884625600, #    utc_start 1930-05-11 04:00:00 (Sun)
  60895594800, #      utc_end 1930-09-15 03:00:00 (Mon)
  60884614800, #  local_start 1930-05-11 01:00:00 (Sun)
  60895584000, #    local_end 1930-09-15 00:00:00 (Mon)
  -10800,
  1,
  'ADT',
      ],
      [
  60895594800, #    utc_start 1930-09-15 03:00:00 (Mon)
  60916075200, #      utc_end 1931-05-10 04:00:00 (Sun)
  60895580400, #  local_start 1930-09-14 23:00:00 (Sun)
  60916060800, #    local_end 1931-05-10 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60916075200, #    utc_start 1931-05-10 04:00:00 (Sun)
  60928254000, #      utc_end 1931-09-28 03:00:00 (Mon)
  60916064400, #  local_start 1931-05-10 01:00:00 (Sun)
  60928243200, #    local_end 1931-09-28 00:00:00 (Mon)
  -10800,
  1,
  'ADT',
      ],
      [
  60928254000, #    utc_start 1931-09-28 03:00:00 (Mon)
  60946920000, #      utc_end 1932-05-01 04:00:00 (Sun)
  60928239600, #  local_start 1931-09-27 23:00:00 (Sun)
  60946905600, #    local_end 1932-05-01 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60946920000, #    utc_start 1932-05-01 04:00:00 (Sun)
  60959703600, #      utc_end 1932-09-26 03:00:00 (Mon)
  60946909200, #  local_start 1932-05-01 01:00:00 (Sun)
  60959692800, #    local_end 1932-09-26 00:00:00 (Mon)
  -10800,
  1,
  'ADT',
      ],
      [
  60959703600, #    utc_start 1932-09-26 03:00:00 (Mon)
  60978369600, #      utc_end 1933-04-30 04:00:00 (Sun)
  60959689200, #  local_start 1932-09-25 23:00:00 (Sun)
  60978355200, #    local_end 1933-04-30 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60978369600, #    utc_start 1933-04-30 04:00:00 (Sun)
  60991758000, #      utc_end 1933-10-02 03:00:00 (Mon)
  60978358800, #  local_start 1933-04-30 01:00:00 (Sun)
  60991747200, #    local_end 1933-10-02 00:00:00 (Mon)
  -10800,
  1,
  'ADT',
      ],
      [
  60991758000, #    utc_start 1933-10-02 03:00:00 (Mon)
  61011633600, #      utc_end 1934-05-20 04:00:00 (Sun)
  60991743600, #  local_start 1933-10-01 23:00:00 (Sun)
  61011619200, #    local_end 1934-05-20 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61011633600, #    utc_start 1934-05-20 04:00:00 (Sun)
  61021911600, #      utc_end 1934-09-16 03:00:00 (Sun)
  61011622800, #  local_start 1934-05-20 01:00:00 (Sun)
  61021900800, #    local_end 1934-09-16 00:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61021911600, #    utc_start 1934-09-16 03:00:00 (Sun)
  61044292800, #      utc_end 1935-06-02 04:00:00 (Sun)
  61021897200, #  local_start 1934-09-15 23:00:00 (Sat)
  61044278400, #    local_end 1935-06-02 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61044292800, #    utc_start 1935-06-02 04:00:00 (Sun)
  61054657200, #      utc_end 1935-09-30 03:00:00 (Mon)
  61044282000, #  local_start 1935-06-02 01:00:00 (Sun)
  61054646400, #    local_end 1935-09-30 00:00:00 (Mon)
  -10800,
  1,
  'ADT',
      ],
      [
  61054657200, #    utc_start 1935-09-30 03:00:00 (Mon)
  61075828800, #      utc_end 1936-06-01 04:00:00 (Mon)
  61054642800, #  local_start 1935-09-29 23:00:00 (Sun)
  61075814400, #    local_end 1936-06-01 00:00:00 (Mon)
  -14400,
  0,
  'AST',
      ],
      [
  61075828800, #    utc_start 1936-06-01 04:00:00 (Mon)
  61084897200, #      utc_end 1936-09-14 03:00:00 (Mon)
  61075818000, #  local_start 1936-06-01 01:00:00 (Mon)
  61084886400, #    local_end 1936-09-14 00:00:00 (Mon)
  -10800,
  1,
  'ADT',
      ],
      [
  61084897200, #    utc_start 1936-09-14 03:00:00 (Mon)
  61104772800, #      utc_end 1937-05-02 04:00:00 (Sun)
  61084882800, #  local_start 1936-09-13 23:00:00 (Sun)
  61104758400, #    local_end 1937-05-02 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61104772800, #    utc_start 1937-05-02 04:00:00 (Sun)
  61117556400, #      utc_end 1937-09-27 03:00:00 (Mon)
  61104762000, #  local_start 1937-05-02 01:00:00 (Sun)
  61117545600, #    local_end 1937-09-27 00:00:00 (Mon)
  -10800,
  1,
  'ADT',
      ],
      [
  61117556400, #    utc_start 1937-09-27 03:00:00 (Mon)
  61136222400, #      utc_end 1938-05-01 04:00:00 (Sun)
  61117542000, #  local_start 1937-09-26 23:00:00 (Sun)
  61136208000, #    local_end 1938-05-01 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61136222400, #    utc_start 1938-05-01 04:00:00 (Sun)
  61149006000, #      utc_end 1938-09-26 03:00:00 (Mon)
  61136211600, #  local_start 1938-05-01 01:00:00 (Sun)
  61148995200, #    local_end 1938-09-26 00:00:00 (Mon)
  -10800,
  1,
  'ADT',
      ],
      [
  61149006000, #    utc_start 1938-09-26 03:00:00 (Mon)
  61170091200, #      utc_end 1939-05-28 04:00:00 (Sun)
  61148991600, #  local_start 1938-09-25 23:00:00 (Sun)
  61170076800, #    local_end 1939-05-28 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61170091200, #    utc_start 1939-05-28 04:00:00 (Sun)
  61180455600, #      utc_end 1939-09-25 03:00:00 (Mon)
  61170080400, #  local_start 1939-05-28 01:00:00 (Sun)
  61180444800, #    local_end 1939-09-25 00:00:00 (Mon)
  -10800,
  1,
  'ADT',
      ],
      [
  61180455600, #    utc_start 1939-09-25 03:00:00 (Mon)
  61199726400, #      utc_end 1940-05-05 04:00:00 (Sun)
  61180441200, #  local_start 1939-09-24 23:00:00 (Sun)
  61199712000, #    local_end 1940-05-05 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61199726400, #    utc_start 1940-05-05 04:00:00 (Sun)
  61212510000, #      utc_end 1940-09-30 03:00:00 (Mon)
  61199715600, #  local_start 1940-05-05 01:00:00 (Sun)
  61212499200, #    local_end 1940-09-30 00:00:00 (Mon)
  -10800,
  1,
  'ADT',
      ],
      [
  61212510000, #    utc_start 1940-09-30 03:00:00 (Mon)
  61231176000, #      utc_end 1941-05-04 04:00:00 (Sun)
  61212495600, #  local_start 1940-09-29 23:00:00 (Sun)
  61231161600, #    local_end 1941-05-04 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61231176000, #    utc_start 1941-05-04 04:00:00 (Sun)
  61243959600, #      utc_end 1941-09-29 03:00:00 (Mon)
  61231165200, #  local_start 1941-05-04 01:00:00 (Sun)
  61243948800, #    local_end 1941-09-29 00:00:00 (Mon)
  -10800,
  1,
  'ADT',
      ],
      [
  61243959600, #    utc_start 1941-09-29 03:00:00 (Mon)
  61255461600, #      utc_end 1942-02-09 06:00:00 (Mon)
  61243945200, #  local_start 1941-09-28 23:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -14400,
  0,
  'AST',
      ],
      [
  61255461600, #    utc_start 1942-02-09 06:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366276800, #    local_end 1945-08-14 20:00:00 (Tue)
  -10800,
  1,
  'AWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370283600, #      utc_end 1945-09-30 05:00:00 (Sun)
  61366276800, #  local_start 1945-08-14 20:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -10800,
  1,
  'APT',
      ],
      [
  61370283600, #    utc_start 1945-09-30 05:00:00 (Sun)
  61378315200, #      utc_end 1946-01-01 04:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -14400,
  0,
  'AST',
      ],
      [
  61378315200, #    utc_start 1946-01-01 04:00:00 (Tue)
  61388431200, #      utc_end 1946-04-28 06:00:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61388416800, #    local_end 1946-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61388431200, #    utc_start 1946-04-28 06:00:00 (Sun)
  61401733200, #      utc_end 1946-09-29 05:00:00 (Sun)
  61388420400, #  local_start 1946-04-28 03:00:00 (Sun)
  61401722400, #    local_end 1946-09-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61401733200, #    utc_start 1946-09-29 05:00:00 (Sun)
  61419880800, #      utc_end 1947-04-27 06:00:00 (Sun)
  61401718800, #  local_start 1946-09-29 01:00:00 (Sun)
  61419866400, #    local_end 1947-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61419880800, #    utc_start 1947-04-27 06:00:00 (Sun)
  61433182800, #      utc_end 1947-09-28 05:00:00 (Sun)
  61419870000, #  local_start 1947-04-27 03:00:00 (Sun)
  61433172000, #    local_end 1947-09-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61433182800, #    utc_start 1947-09-28 05:00:00 (Sun)
  61451330400, #      utc_end 1948-04-25 06:00:00 (Sun)
  61433168400, #  local_start 1947-09-28 01:00:00 (Sun)
  61451316000, #    local_end 1948-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61451330400, #    utc_start 1948-04-25 06:00:00 (Sun)
  61464632400, #      utc_end 1948-09-26 05:00:00 (Sun)
  61451319600, #  local_start 1948-04-25 03:00:00 (Sun)
  61464621600, #    local_end 1948-09-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61464632400, #    utc_start 1948-09-26 05:00:00 (Sun)
  61482780000, #      utc_end 1949-04-24 06:00:00 (Sun)
  61464618000, #  local_start 1948-09-26 01:00:00 (Sun)
  61482765600, #    local_end 1949-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61482780000, #    utc_start 1949-04-24 06:00:00 (Sun)
  61496082000, #      utc_end 1949-09-25 05:00:00 (Sun)
  61482769200, #  local_start 1949-04-24 03:00:00 (Sun)
  61496071200, #    local_end 1949-09-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61496082000, #    utc_start 1949-09-25 05:00:00 (Sun)
  61546284000, #      utc_end 1951-04-29 06:00:00 (Sun)
  61496067600, #  local_start 1949-09-25 01:00:00 (Sun)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61546284000, #    utc_start 1951-04-29 06:00:00 (Sun)
  61559586000, #      utc_end 1951-09-30 05:00:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61559586000, #    utc_start 1951-09-30 05:00:00 (Sun)
  61577733600, #      utc_end 1952-04-27 06:00:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61577733600, #    utc_start 1952-04-27 06:00:00 (Sun)
  61591035600, #      utc_end 1952-09-28 05:00:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61591035600, #    utc_start 1952-09-28 05:00:00 (Sun)
  61609183200, #      utc_end 1953-04-26 06:00:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61609183200, #    utc_start 1953-04-26 06:00:00 (Sun)
  61622485200, #      utc_end 1953-09-27 05:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61622485200, #    utc_start 1953-09-27 05:00:00 (Sun)
  61640632800, #      utc_end 1954-04-25 06:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61640632800, #    utc_start 1954-04-25 06:00:00 (Sun)
  61653934800, #      utc_end 1954-09-26 05:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61653934800, #    utc_start 1954-09-26 05:00:00 (Sun)
  61704136800, #      utc_end 1956-04-29 06:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61704136800, #    utc_start 1956-04-29 06:00:00 (Sun)
  61717438800, #      utc_end 1956-09-30 05:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61717428000, #    local_end 1956-09-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61717438800, #    utc_start 1956-09-30 05:00:00 (Sun)
  61735586400, #      utc_end 1957-04-28 06:00:00 (Sun)
  61717424400, #  local_start 1956-09-30 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61735586400, #    utc_start 1957-04-28 06:00:00 (Sun)
  61748888400, #      utc_end 1957-09-29 05:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61748888400, #    utc_start 1957-09-29 05:00:00 (Sun)
  61767036000, #      utc_end 1958-04-27 06:00:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61767036000, #    utc_start 1958-04-27 06:00:00 (Sun)
  61780338000, #      utc_end 1958-09-28 05:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61780327200, #    local_end 1958-09-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61780338000, #    utc_start 1958-09-28 05:00:00 (Sun)
  61798485600, #      utc_end 1959-04-26 06:00:00 (Sun)
  61780323600, #  local_start 1958-09-28 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61798485600, #    utc_start 1959-04-26 06:00:00 (Sun)
  61811787600, #      utc_end 1959-09-27 05:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61811776800, #    local_end 1959-09-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61811787600, #    utc_start 1959-09-27 05:00:00 (Sun)
  61893439200, #      utc_end 1962-04-29 06:00:00 (Sun)
  61811773200, #  local_start 1959-09-27 01:00:00 (Sun)
  61893424800, #    local_end 1962-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61893439200, #    utc_start 1962-04-29 06:00:00 (Sun)
  61909160400, #      utc_end 1962-10-28 05:00:00 (Sun)
  61893428400, #  local_start 1962-04-29 03:00:00 (Sun)
  61909149600, #    local_end 1962-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61909160400, #    utc_start 1962-10-28 05:00:00 (Sun)
  61924888800, #      utc_end 1963-04-28 06:00:00 (Sun)
  61909146000, #  local_start 1962-10-28 01:00:00 (Sun)
  61924874400, #    local_end 1963-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61924888800, #    utc_start 1963-04-28 06:00:00 (Sun)
  61940610000, #      utc_end 1963-10-27 05:00:00 (Sun)
  61924878000, #  local_start 1963-04-28 03:00:00 (Sun)
  61940599200, #    local_end 1963-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61940610000, #    utc_start 1963-10-27 05:00:00 (Sun)
  61956338400, #      utc_end 1964-04-26 06:00:00 (Sun)
  61940595600, #  local_start 1963-10-27 01:00:00 (Sun)
  61956324000, #    local_end 1964-04-26 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61956338400, #    utc_start 1964-04-26 06:00:00 (Sun)
  61972059600, #      utc_end 1964-10-25 05:00:00 (Sun)
  61956327600, #  local_start 1964-04-26 03:00:00 (Sun)
  61972048800, #    local_end 1964-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61972059600, #    utc_start 1964-10-25 05:00:00 (Sun)
  61987788000, #      utc_end 1965-04-25 06:00:00 (Sun)
  61972045200, #  local_start 1964-10-25 01:00:00 (Sun)
  61987773600, #    local_end 1965-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61987788000, #    utc_start 1965-04-25 06:00:00 (Sun)
  62004114000, #      utc_end 1965-10-31 05:00:00 (Sun)
  61987777200, #  local_start 1965-04-25 03:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62004114000, #    utc_start 1965-10-31 05:00:00 (Sun)
  62019237600, #      utc_end 1966-04-24 06:00:00 (Sun)
  62004099600, #  local_start 1965-10-31 01:00:00 (Sun)
  62019223200, #    local_end 1966-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62019237600, #    utc_start 1966-04-24 06:00:00 (Sun)
  62035563600, #      utc_end 1966-10-30 05:00:00 (Sun)
  62019226800, #  local_start 1966-04-24 03:00:00 (Sun)
  62035552800, #    local_end 1966-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62035563600, #    utc_start 1966-10-30 05:00:00 (Sun)
  62051292000, #      utc_end 1967-04-30 06:00:00 (Sun)
  62035549200, #  local_start 1966-10-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62051292000, #    utc_start 1967-04-30 06:00:00 (Sun)
  62067013200, #      utc_end 1967-10-29 05:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62067013200, #    utc_start 1967-10-29 05:00:00 (Sun)
  62082741600, #      utc_end 1968-04-28 06:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62082741600, #    utc_start 1968-04-28 06:00:00 (Sun)
  62098462800, #      utc_end 1968-10-27 05:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62098462800, #    utc_start 1968-10-27 05:00:00 (Sun)
  62114191200, #      utc_end 1969-04-27 06:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62114191200, #    utc_start 1969-04-27 06:00:00 (Sun)
  62129912400, #      utc_end 1969-10-26 05:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62129912400, #    utc_start 1969-10-26 05:00:00 (Sun)
  62145640800, #      utc_end 1970-04-26 06:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62145640800, #    utc_start 1970-04-26 06:00:00 (Sun)
  62161362000, #      utc_end 1970-10-25 05:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62161362000, #    utc_start 1970-10-25 05:00:00 (Sun)
  62177090400, #      utc_end 1971-04-25 06:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62177090400, #    utc_start 1971-04-25 06:00:00 (Sun)
  62193416400, #      utc_end 1971-10-31 05:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62193416400, #    utc_start 1971-10-31 05:00:00 (Sun)
  62209144800, #      utc_end 1972-04-30 06:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62209144800, #    utc_start 1972-04-30 06:00:00 (Sun)
  62224866000, #      utc_end 1972-10-29 05:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62224866000, #    utc_start 1972-10-29 05:00:00 (Sun)
  62240594400, #      utc_end 1973-04-29 06:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62240594400, #    utc_start 1973-04-29 06:00:00 (Sun)
  62256315600, #      utc_end 1973-10-28 05:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62256315600, #    utc_start 1973-10-28 05:00:00 (Sun)
  62261928000, #      utc_end 1974-01-01 04:00:00 (Tue)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62261913600, #    local_end 1974-01-01 00:00:00 (Tue)
  -14400,
  0,
  'AST',
      ],
      [
  62261928000, #    utc_start 1974-01-01 04:00:00 (Tue)
  62272044000, #      utc_end 1974-04-28 06:00:00 (Sun)
  62261913600, #  local_start 1974-01-01 00:00:00 (Tue)
  62272029600, #    local_end 1974-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62272044000, #    utc_start 1974-04-28 06:00:00 (Sun)
  62287765200, #      utc_end 1974-10-27 05:00:00 (Sun)
  62272033200, #  local_start 1974-04-28 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62287765200, #    utc_start 1974-10-27 05:00:00 (Sun)
  62303493600, #      utc_end 1975-04-27 06:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62303479200, #    local_end 1975-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62303493600, #    utc_start 1975-04-27 06:00:00 (Sun)
  62319214800, #      utc_end 1975-10-26 05:00:00 (Sun)
  62303482800, #  local_start 1975-04-27 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62319214800, #    utc_start 1975-10-26 05:00:00 (Sun)
  62334943200, #      utc_end 1976-04-25 06:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62334943200, #    utc_start 1976-04-25 06:00:00 (Sun)
  62351269200, #      utc_end 1976-10-31 05:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62351269200, #    utc_start 1976-10-31 05:00:00 (Sun)
  62366392800, #      utc_end 1977-04-24 06:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62366392800, #    utc_start 1977-04-24 06:00:00 (Sun)
  62382718800, #      utc_end 1977-10-30 05:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62382718800, #    utc_start 1977-10-30 05:00:00 (Sun)
  62398447200, #      utc_end 1978-04-30 06:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62398447200, #    utc_start 1978-04-30 06:00:00 (Sun)
  62414168400, #      utc_end 1978-10-29 05:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62414168400, #    utc_start 1978-10-29 05:00:00 (Sun)
  62429896800, #      utc_end 1979-04-29 06:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62429896800, #    utc_start 1979-04-29 06:00:00 (Sun)
  62445618000, #      utc_end 1979-10-28 05:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62445618000, #    utc_start 1979-10-28 05:00:00 (Sun)
  62461346400, #      utc_end 1980-04-27 06:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62461346400, #    utc_start 1980-04-27 06:00:00 (Sun)
  62477067600, #      utc_end 1980-10-26 05:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62477067600, #    utc_start 1980-10-26 05:00:00 (Sun)
  62492796000, #      utc_end 1981-04-26 06:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62492796000, #    utc_start 1981-04-26 06:00:00 (Sun)
  62508517200, #      utc_end 1981-10-25 05:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62508517200, #    utc_start 1981-10-25 05:00:00 (Sun)
  62524245600, #      utc_end 1982-04-25 06:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62524245600, #    utc_start 1982-04-25 06:00:00 (Sun)
  62540571600, #      utc_end 1982-10-31 05:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62540571600, #    utc_start 1982-10-31 05:00:00 (Sun)
  62555695200, #      utc_end 1983-04-24 06:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62555695200, #    utc_start 1983-04-24 06:00:00 (Sun)
  62572021200, #      utc_end 1983-10-30 05:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62572021200, #    utc_start 1983-10-30 05:00:00 (Sun)
  62587749600, #      utc_end 1984-04-29 06:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62587749600, #    utc_start 1984-04-29 06:00:00 (Sun)
  62603470800, #      utc_end 1984-10-28 05:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62603470800, #    utc_start 1984-10-28 05:00:00 (Sun)
  62619199200, #      utc_end 1985-04-28 06:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62619199200, #    utc_start 1985-04-28 06:00:00 (Sun)
  62634920400, #      utc_end 1985-10-27 05:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62634920400, #    utc_start 1985-10-27 05:00:00 (Sun)
  62650648800, #      utc_end 1986-04-27 06:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62650648800, #    utc_start 1986-04-27 06:00:00 (Sun)
  62666370000, #      utc_end 1986-10-26 05:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62666370000, #    utc_start 1986-10-26 05:00:00 (Sun)
  62680284000, #      utc_end 1987-04-05 06:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62680284000, #    utc_start 1987-04-05 06:00:00 (Sun)
  62697819600, #      utc_end 1987-10-25 05:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62697819600, #    utc_start 1987-10-25 05:00:00 (Sun)
  62711733600, #      utc_end 1988-04-03 06:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62711733600, #    utc_start 1988-04-03 06:00:00 (Sun)
  62729874000, #      utc_end 1988-10-30 05:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62729874000, #    utc_start 1988-10-30 05:00:00 (Sun)
  62743183200, #      utc_end 1989-04-02 06:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62743183200, #    utc_start 1989-04-02 06:00:00 (Sun)
  62761323600, #      utc_end 1989-10-29 05:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62761323600, #    utc_start 1989-10-29 05:00:00 (Sun)
  62774632800, #      utc_end 1990-04-01 06:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62774632800, #    utc_start 1990-04-01 06:00:00 (Sun)
  62792773200, #      utc_end 1990-10-28 05:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62792773200, #    utc_start 1990-10-28 05:00:00 (Sun)
  62806687200, #      utc_end 1991-04-07 06:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62806687200, #    utc_start 1991-04-07 06:00:00 (Sun)
  62824222800, #      utc_end 1991-10-27 05:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62824222800, #    utc_start 1991-10-27 05:00:00 (Sun)
  62838136800, #      utc_end 1992-04-05 06:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62838136800, #    utc_start 1992-04-05 06:00:00 (Sun)
  62855672400, #      utc_end 1992-10-25 05:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62855672400, #    utc_start 1992-10-25 05:00:00 (Sun)
  62869586400, #      utc_end 1993-04-04 06:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62869586400, #    utc_start 1993-04-04 06:00:00 (Sun)
  62887726800, #      utc_end 1993-10-31 05:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62887726800, #    utc_start 1993-10-31 05:00:00 (Sun)
  62901036000, #      utc_end 1994-04-03 06:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62901036000, #    utc_start 1994-04-03 06:00:00 (Sun)
  62919176400, #      utc_end 1994-10-30 05:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62919176400, #    utc_start 1994-10-30 05:00:00 (Sun)
  62932485600, #      utc_end 1995-04-02 06:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62932485600, #    utc_start 1995-04-02 06:00:00 (Sun)
  62950626000, #      utc_end 1995-10-29 05:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62950626000, #    utc_start 1995-10-29 05:00:00 (Sun)
  62964540000, #      utc_end 1996-04-07 06:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62964540000, #    utc_start 1996-04-07 06:00:00 (Sun)
  62982075600, #      utc_end 1996-10-27 05:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62982075600, #    utc_start 1996-10-27 05:00:00 (Sun)
  62995989600, #      utc_end 1997-04-06 06:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62995989600, #    utc_start 1997-04-06 06:00:00 (Sun)
  63013525200, #      utc_end 1997-10-26 05:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63013525200, #    utc_start 1997-10-26 05:00:00 (Sun)
  63027439200, #      utc_end 1998-04-05 06:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63027439200, #    utc_start 1998-04-05 06:00:00 (Sun)
  63044974800, #      utc_end 1998-10-25 05:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63044974800, #    utc_start 1998-10-25 05:00:00 (Sun)
  63058888800, #      utc_end 1999-04-04 06:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63058888800, #    utc_start 1999-04-04 06:00:00 (Sun)
  63077029200, #      utc_end 1999-10-31 05:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63077029200, #    utc_start 1999-10-31 05:00:00 (Sun)
  63090338400, #      utc_end 2000-04-02 06:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63090338400, #    utc_start 2000-04-02 06:00:00 (Sun)
  63108478800, #      utc_end 2000-10-29 05:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63108478800, #    utc_start 2000-10-29 05:00:00 (Sun)
  63121788000, #      utc_end 2001-04-01 06:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63121788000, #    utc_start 2001-04-01 06:00:00 (Sun)
  63139928400, #      utc_end 2001-10-28 05:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63139928400, #    utc_start 2001-10-28 05:00:00 (Sun)
  63153842400, #      utc_end 2002-04-07 06:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63153842400, #    utc_start 2002-04-07 06:00:00 (Sun)
  63171378000, #      utc_end 2002-10-27 05:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63171378000, #    utc_start 2002-10-27 05:00:00 (Sun)
  63185292000, #      utc_end 2003-04-06 06:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63185292000, #    utc_start 2003-04-06 06:00:00 (Sun)
  63202827600, #      utc_end 2003-10-26 05:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63202827600, #    utc_start 2003-10-26 05:00:00 (Sun)
  63216741600, #      utc_end 2004-04-04 06:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63216741600, #    utc_start 2004-04-04 06:00:00 (Sun)
  63234882000, #      utc_end 2004-10-31 05:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63234882000, #    utc_start 2004-10-31 05:00:00 (Sun)
  63248191200, #      utc_end 2005-04-03 06:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63248191200, #    utc_start 2005-04-03 06:00:00 (Sun)
  63266331600, #      utc_end 2005-10-30 05:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63266331600, #    utc_start 2005-10-30 05:00:00 (Sun)
  63279640800, #      utc_end 2006-04-02 06:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63279640800, #    utc_start 2006-04-02 06:00:00 (Sun)
  63297781200, #      utc_end 2006-10-29 05:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63297781200, #    utc_start 2006-10-29 05:00:00 (Sun)
  63309276000, #      utc_end 2007-03-11 06:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63309276000, #    utc_start 2007-03-11 06:00:00 (Sun)
  63329835600, #      utc_end 2007-11-04 05:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63329835600, #    utc_start 2007-11-04 05:00:00 (Sun)
  63340725600, #      utc_end 2008-03-09 06:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63340725600, #    utc_start 2008-03-09 06:00:00 (Sun)
  63361285200, #      utc_end 2008-11-02 05:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63361285200, #    utc_start 2008-11-02 05:00:00 (Sun)
  63372175200, #      utc_end 2009-03-08 06:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63372175200, #    utc_start 2009-03-08 06:00:00 (Sun)
  63392734800, #      utc_end 2009-11-01 05:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63392734800, #    utc_start 2009-11-01 05:00:00 (Sun)
  63404229600, #      utc_end 2010-03-14 06:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63404229600, #    utc_start 2010-03-14 06:00:00 (Sun)
  63424789200, #      utc_end 2010-11-07 05:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63424789200, #    utc_start 2010-11-07 05:00:00 (Sun)
  63435679200, #      utc_end 2011-03-13 06:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63435679200, #    utc_start 2011-03-13 06:00:00 (Sun)
  63456238800, #      utc_end 2011-11-06 05:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63456238800, #    utc_start 2011-11-06 05:00:00 (Sun)
  63467128800, #      utc_end 2012-03-11 06:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63467128800, #    utc_start 2012-03-11 06:00:00 (Sun)
  63487688400, #      utc_end 2012-11-04 05:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63487688400, #    utc_start 2012-11-04 05:00:00 (Sun)
  63498578400, #      utc_end 2013-03-10 06:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63498578400, #    utc_start 2013-03-10 06:00:00 (Sun)
  63519138000, #      utc_end 2013-11-03 05:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63519138000, #    utc_start 2013-11-03 05:00:00 (Sun)
  63530028000, #      utc_end 2014-03-09 06:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63530028000, #    utc_start 2014-03-09 06:00:00 (Sun)
  63550587600, #      utc_end 2014-11-02 05:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63550587600, #    utc_start 2014-11-02 05:00:00 (Sun)
  63561477600, #      utc_end 2015-03-08 06:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63561477600, #    utc_start 2015-03-08 06:00:00 (Sun)
  63582037200, #      utc_end 2015-11-01 05:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63582037200, #    utc_start 2015-11-01 05:00:00 (Sun)
  63593532000, #      utc_end 2016-03-13 06:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63593532000, #    utc_start 2016-03-13 06:00:00 (Sun)
  63614091600, #      utc_end 2016-11-06 05:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63614091600, #    utc_start 2016-11-06 05:00:00 (Sun)
  63624981600, #      utc_end 2017-03-12 06:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63624981600, #    utc_start 2017-03-12 06:00:00 (Sun)
  63645541200, #      utc_end 2017-11-05 05:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63645541200, #    utc_start 2017-11-05 05:00:00 (Sun)
  63656431200, #      utc_end 2018-03-11 06:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63656431200, #    utc_start 2018-03-11 06:00:00 (Sun)
  63676990800, #      utc_end 2018-11-04 05:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63676990800, #    utc_start 2018-11-04 05:00:00 (Sun)
  63687880800, #      utc_end 2019-03-10 06:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63687880800, #    utc_start 2019-03-10 06:00:00 (Sun)
  63708440400, #      utc_end 2019-11-03 05:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63708440400, #    utc_start 2019-11-03 05:00:00 (Sun)
  63719330400, #      utc_end 2020-03-08 06:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63719330400, #    utc_start 2020-03-08 06:00:00 (Sun)
  63739890000, #      utc_end 2020-11-01 05:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63739890000, #    utc_start 2020-11-01 05:00:00 (Sun)
  63751384800, #      utc_end 2021-03-14 06:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63751384800, #    utc_start 2021-03-14 06:00:00 (Sun)
  63771944400, #      utc_end 2021-11-07 05:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63771944400, #    utc_start 2021-11-07 05:00:00 (Sun)
  63782834400, #      utc_end 2022-03-13 06:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63782834400, #    utc_start 2022-03-13 06:00:00 (Sun)
  63803394000, #      utc_end 2022-11-06 05:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63803394000, #    utc_start 2022-11-06 05:00:00 (Sun)
  63814284000, #      utc_end 2023-03-12 06:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63814284000, #    utc_start 2023-03-12 06:00:00 (Sun)
  63834843600, #      utc_end 2023-11-05 05:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63834843600, #    utc_start 2023-11-05 05:00:00 (Sun)
  63845733600, #      utc_end 2024-03-10 06:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63845733600, #    utc_start 2024-03-10 06:00:00 (Sun)
  63866293200, #      utc_end 2024-11-03 05:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63866293200, #    utc_start 2024-11-03 05:00:00 (Sun)
  63877183200, #      utc_end 2025-03-09 06:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63877183200, #    utc_start 2025-03-09 06:00:00 (Sun)
  63897742800, #      utc_end 2025-11-02 05:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63897742800, #    utc_start 2025-11-02 05:00:00 (Sun)
  63908632800, #      utc_end 2026-03-08 06:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63908632800, #    utc_start 2026-03-08 06:00:00 (Sun)
  63929192400, #      utc_end 2026-11-01 05:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63929192400, #    utc_start 2026-11-01 05:00:00 (Sun)
  63940687200, #      utc_end 2027-03-14 06:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63940687200, #    utc_start 2027-03-14 06:00:00 (Sun)
  63961246800, #      utc_end 2027-11-07 05:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {104}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -14400 }
  
  my $last_observance = bless( {
    'format' => 'A%sT',
    'gmtoff' => '-4:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 720624,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 720624,
      'utc_rd_secs' => 0,
      'utc_year' => 1975
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -14400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 720624,
      'local_rd_secs' => 14400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 720624,
      'utc_rd_secs' => 14400,
      'utc_year' => 1975
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_HALIFAX

    $main::fatpacked{"DateTime/TimeZone/America/Havana.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_HAVANA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Havana;
  $DateTime::TimeZone::America::Havana::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Havana::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611181368, #      utc_end 1890-01-01 05:29:28 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -19768,
  0,
  'LMT',
      ],
      [
  59611181368, #    utc_start 1890-01-01 05:29:28 (Wed)
  60732869376, #      utc_end 1925-07-19 17:29:36 (Sun)
  59611161592, #  local_start 1889-12-31 23:59:52 (Tue)
  60732849600, #    local_end 1925-07-19 12:00:00 (Sun)
  -19776,
  0,
  'HMT',
      ],
      [
  60732869376, #    utc_start 1925-07-19 17:29:36 (Sun)
  60824149200, #      utc_end 1928-06-10 05:00:00 (Sun)
  60732851376, #  local_start 1925-07-19 12:29:36 (Sun)
  60824131200, #    local_end 1928-06-10 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  60824149200, #    utc_start 1928-06-10 05:00:00 (Sun)
  60834686400, #      utc_end 1928-10-10 04:00:00 (Wed)
  60824134800, #  local_start 1928-06-10 01:00:00 (Sun)
  60834672000, #    local_end 1928-10-10 00:00:00 (Wed)
  -14400,
  1,
  'CDT',
      ],
      [
  60834686400, #    utc_start 1928-10-10 04:00:00 (Wed)
  61202149200, #      utc_end 1940-06-02 05:00:00 (Sun)
  60834668400, #  local_start 1928-10-09 23:00:00 (Tue)
  61202131200, #    local_end 1940-06-02 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  61202149200, #    utc_start 1940-06-02 05:00:00 (Sun)
  61210008000, #      utc_end 1940-09-01 04:00:00 (Sun)
  61202134800, #  local_start 1940-06-02 01:00:00 (Sun)
  61209993600, #    local_end 1940-09-01 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  61210008000, #    utc_start 1940-09-01 04:00:00 (Sun)
  61233598800, #      utc_end 1941-06-01 05:00:00 (Sun)
  61209990000, #  local_start 1940-08-31 23:00:00 (Sat)
  61233580800, #    local_end 1941-06-01 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  61233598800, #    utc_start 1941-06-01 05:00:00 (Sun)
  61242062400, #      utc_end 1941-09-07 04:00:00 (Sun)
  61233584400, #  local_start 1941-06-01 01:00:00 (Sun)
  61242048000, #    local_end 1941-09-07 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  61242062400, #    utc_start 1941-09-07 04:00:00 (Sun)
  61265653200, #      utc_end 1942-06-07 05:00:00 (Sun)
  61242044400, #  local_start 1941-09-06 23:00:00 (Sat)
  61265635200, #    local_end 1942-06-07 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  61265653200, #    utc_start 1942-06-07 05:00:00 (Sun)
  61273512000, #      utc_end 1942-09-06 04:00:00 (Sun)
  61265638800, #  local_start 1942-06-07 01:00:00 (Sun)
  61273497600, #    local_end 1942-09-06 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  61273512000, #    utc_start 1942-09-06 04:00:00 (Sun)
  61360002000, #      utc_end 1945-06-03 05:00:00 (Sun)
  61273494000, #  local_start 1942-09-05 23:00:00 (Sat)
  61359984000, #    local_end 1945-06-03 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  61360002000, #    utc_start 1945-06-03 05:00:00 (Sun)
  61367860800, #      utc_end 1945-09-02 04:00:00 (Sun)
  61359987600, #  local_start 1945-06-03 01:00:00 (Sun)
  61367846400, #    local_end 1945-09-02 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  61367860800, #    utc_start 1945-09-02 04:00:00 (Sun)
  61391451600, #      utc_end 1946-06-02 05:00:00 (Sun)
  61367842800, #  local_start 1945-09-01 23:00:00 (Sat)
  61391433600, #    local_end 1946-06-02 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  61391451600, #    utc_start 1946-06-02 05:00:00 (Sun)
  61399310400, #      utc_end 1946-09-01 04:00:00 (Sun)
  61391437200, #  local_start 1946-06-02 01:00:00 (Sun)
  61399296000, #    local_end 1946-09-01 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  61399310400, #    utc_start 1946-09-01 04:00:00 (Sun)
  61990981200, #      utc_end 1965-06-01 05:00:00 (Tue)
  61399292400, #  local_start 1946-08-31 23:00:00 (Sat)
  61990963200, #    local_end 1965-06-01 00:00:00 (Tue)
  -18000,
  0,
  'CST',
      ],
      [
  61990981200, #    utc_start 1965-06-01 05:00:00 (Tue)
  62001432000, #      utc_end 1965-09-30 04:00:00 (Thu)
  61990966800, #  local_start 1965-06-01 01:00:00 (Tue)
  62001417600, #    local_end 1965-09-30 00:00:00 (Thu)
  -14400,
  1,
  'CDT',
      ],
      [
  62001432000, #    utc_start 1965-09-30 04:00:00 (Thu)
  62022258000, #      utc_end 1966-05-29 05:00:00 (Sun)
  62001414000, #  local_start 1965-09-29 23:00:00 (Wed)
  62022240000, #    local_end 1966-05-29 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62022258000, #    utc_start 1966-05-29 05:00:00 (Sun)
  62033140800, #      utc_end 1966-10-02 04:00:00 (Sun)
  62022243600, #  local_start 1966-05-29 01:00:00 (Sun)
  62033126400, #    local_end 1966-10-02 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62033140800, #    utc_start 1966-10-02 04:00:00 (Sun)
  62049387600, #      utc_end 1967-04-08 05:00:00 (Sat)
  62033122800, #  local_start 1966-10-01 23:00:00 (Sat)
  62049369600, #    local_end 1967-04-08 00:00:00 (Sat)
  -18000,
  0,
  'CST',
      ],
      [
  62049387600, #    utc_start 1967-04-08 05:00:00 (Sat)
  62062776000, #      utc_end 1967-09-10 04:00:00 (Sun)
  62049373200, #  local_start 1967-04-08 01:00:00 (Sat)
  62062761600, #    local_end 1967-09-10 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62062776000, #    utc_start 1967-09-10 04:00:00 (Sun)
  62081528400, #      utc_end 1968-04-14 05:00:00 (Sun)
  62062758000, #  local_start 1967-09-09 23:00:00 (Sat)
  62081510400, #    local_end 1968-04-14 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62081528400, #    utc_start 1968-04-14 05:00:00 (Sun)
  62094225600, #      utc_end 1968-09-08 04:00:00 (Sun)
  62081514000, #  local_start 1968-04-14 01:00:00 (Sun)
  62094211200, #    local_end 1968-09-08 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62094225600, #    utc_start 1968-09-08 04:00:00 (Sun)
  62114187600, #      utc_end 1969-04-27 05:00:00 (Sun)
  62094207600, #  local_start 1968-09-07 23:00:00 (Sat)
  62114169600, #    local_end 1969-04-27 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62114187600, #    utc_start 1969-04-27 05:00:00 (Sun)
  62129908800, #      utc_end 1969-10-26 04:00:00 (Sun)
  62114173200, #  local_start 1969-04-27 01:00:00 (Sun)
  62129894400, #    local_end 1969-10-26 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62129908800, #    utc_start 1969-10-26 04:00:00 (Sun)
  62145637200, #      utc_end 1970-04-26 05:00:00 (Sun)
  62129890800, #  local_start 1969-10-25 23:00:00 (Sat)
  62145619200, #    local_end 1970-04-26 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62145637200, #    utc_start 1970-04-26 05:00:00 (Sun)
  62161358400, #      utc_end 1970-10-25 04:00:00 (Sun)
  62145622800, #  local_start 1970-04-26 01:00:00 (Sun)
  62161344000, #    local_end 1970-10-25 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62161358400, #    utc_start 1970-10-25 04:00:00 (Sun)
  62177086800, #      utc_end 1971-04-25 05:00:00 (Sun)
  62161340400, #  local_start 1970-10-24 23:00:00 (Sat)
  62177068800, #    local_end 1971-04-25 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62177086800, #    utc_start 1971-04-25 05:00:00 (Sun)
  62193412800, #      utc_end 1971-10-31 04:00:00 (Sun)
  62177072400, #  local_start 1971-04-25 01:00:00 (Sun)
  62193398400, #    local_end 1971-10-31 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62193412800, #    utc_start 1971-10-31 04:00:00 (Sun)
  62209141200, #      utc_end 1972-04-30 05:00:00 (Sun)
  62193394800, #  local_start 1971-10-30 23:00:00 (Sat)
  62209123200, #    local_end 1972-04-30 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62209141200, #    utc_start 1972-04-30 05:00:00 (Sun)
  62223048000, #      utc_end 1972-10-08 04:00:00 (Sun)
  62209126800, #  local_start 1972-04-30 01:00:00 (Sun)
  62223033600, #    local_end 1972-10-08 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62223048000, #    utc_start 1972-10-08 04:00:00 (Sun)
  62240590800, #      utc_end 1973-04-29 05:00:00 (Sun)
  62223030000, #  local_start 1972-10-07 23:00:00 (Sat)
  62240572800, #    local_end 1973-04-29 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62240590800, #    utc_start 1973-04-29 05:00:00 (Sun)
  62254584000, #      utc_end 1973-10-08 04:00:00 (Mon)
  62240576400, #  local_start 1973-04-29 01:00:00 (Sun)
  62254569600, #    local_end 1973-10-08 00:00:00 (Mon)
  -14400,
  1,
  'CDT',
      ],
      [
  62254584000, #    utc_start 1973-10-08 04:00:00 (Mon)
  62272040400, #      utc_end 1974-04-28 05:00:00 (Sun)
  62254566000, #  local_start 1973-10-07 23:00:00 (Sun)
  62272022400, #    local_end 1974-04-28 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62272040400, #    utc_start 1974-04-28 05:00:00 (Sun)
  62286120000, #      utc_end 1974-10-08 04:00:00 (Tue)
  62272026000, #  local_start 1974-04-28 01:00:00 (Sun)
  62286105600, #    local_end 1974-10-08 00:00:00 (Tue)
  -14400,
  1,
  'CDT',
      ],
      [
  62286120000, #    utc_start 1974-10-08 04:00:00 (Tue)
  62303490000, #      utc_end 1975-04-27 05:00:00 (Sun)
  62286102000, #  local_start 1974-10-07 23:00:00 (Mon)
  62303472000, #    local_end 1975-04-27 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62303490000, #    utc_start 1975-04-27 05:00:00 (Sun)
  62319211200, #      utc_end 1975-10-26 04:00:00 (Sun)
  62303475600, #  local_start 1975-04-27 01:00:00 (Sun)
  62319196800, #    local_end 1975-10-26 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62319211200, #    utc_start 1975-10-26 04:00:00 (Sun)
  62334939600, #      utc_end 1976-04-25 05:00:00 (Sun)
  62319193200, #  local_start 1975-10-25 23:00:00 (Sat)
  62334921600, #    local_end 1976-04-25 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62334939600, #    utc_start 1976-04-25 05:00:00 (Sun)
  62351265600, #      utc_end 1976-10-31 04:00:00 (Sun)
  62334925200, #  local_start 1976-04-25 01:00:00 (Sun)
  62351251200, #    local_end 1976-10-31 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62351265600, #    utc_start 1976-10-31 04:00:00 (Sun)
  62366389200, #      utc_end 1977-04-24 05:00:00 (Sun)
  62351247600, #  local_start 1976-10-30 23:00:00 (Sat)
  62366371200, #    local_end 1977-04-24 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62366389200, #    utc_start 1977-04-24 05:00:00 (Sun)
  62382715200, #      utc_end 1977-10-30 04:00:00 (Sun)
  62366374800, #  local_start 1977-04-24 01:00:00 (Sun)
  62382700800, #    local_end 1977-10-30 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62382715200, #    utc_start 1977-10-30 04:00:00 (Sun)
  62399048400, #      utc_end 1978-05-07 05:00:00 (Sun)
  62382697200, #  local_start 1977-10-29 23:00:00 (Sat)
  62399030400, #    local_end 1978-05-07 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62399048400, #    utc_start 1978-05-07 05:00:00 (Sun)
  62412350400, #      utc_end 1978-10-08 04:00:00 (Sun)
  62399034000, #  local_start 1978-05-07 01:00:00 (Sun)
  62412336000, #    local_end 1978-10-08 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62412350400, #    utc_start 1978-10-08 04:00:00 (Sun)
  62426264400, #      utc_end 1979-03-18 05:00:00 (Sun)
  62412332400, #  local_start 1978-10-07 23:00:00 (Sat)
  62426246400, #    local_end 1979-03-18 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62426264400, #    utc_start 1979-03-18 05:00:00 (Sun)
  62444404800, #      utc_end 1979-10-14 04:00:00 (Sun)
  62426250000, #  local_start 1979-03-18 01:00:00 (Sun)
  62444390400, #    local_end 1979-10-14 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62444404800, #    utc_start 1979-10-14 04:00:00 (Sun)
  62457714000, #      utc_end 1980-03-16 05:00:00 (Sun)
  62444386800, #  local_start 1979-10-13 23:00:00 (Sat)
  62457696000, #    local_end 1980-03-16 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62457714000, #    utc_start 1980-03-16 05:00:00 (Sun)
  62475854400, #      utc_end 1980-10-12 04:00:00 (Sun)
  62457699600, #  local_start 1980-03-16 01:00:00 (Sun)
  62475840000, #    local_end 1980-10-12 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62475854400, #    utc_start 1980-10-12 04:00:00 (Sun)
  62494002000, #      utc_end 1981-05-10 05:00:00 (Sun)
  62475836400, #  local_start 1980-10-11 23:00:00 (Sat)
  62493984000, #    local_end 1981-05-10 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62494002000, #    utc_start 1981-05-10 05:00:00 (Sun)
  62507304000, #      utc_end 1981-10-11 04:00:00 (Sun)
  62493987600, #  local_start 1981-05-10 01:00:00 (Sun)
  62507289600, #    local_end 1981-10-11 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62507304000, #    utc_start 1981-10-11 04:00:00 (Sun)
  62525451600, #      utc_end 1982-05-09 05:00:00 (Sun)
  62507286000, #  local_start 1981-10-10 23:00:00 (Sat)
  62525433600, #    local_end 1982-05-09 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62525451600, #    utc_start 1982-05-09 05:00:00 (Sun)
  62538753600, #      utc_end 1982-10-10 04:00:00 (Sun)
  62525437200, #  local_start 1982-05-09 01:00:00 (Sun)
  62538739200, #    local_end 1982-10-10 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62538753600, #    utc_start 1982-10-10 04:00:00 (Sun)
  62556901200, #      utc_end 1983-05-08 05:00:00 (Sun)
  62538735600, #  local_start 1982-10-09 23:00:00 (Sat)
  62556883200, #    local_end 1983-05-08 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62556901200, #    utc_start 1983-05-08 05:00:00 (Sun)
  62570203200, #      utc_end 1983-10-09 04:00:00 (Sun)
  62556886800, #  local_start 1983-05-08 01:00:00 (Sun)
  62570188800, #    local_end 1983-10-09 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62570203200, #    utc_start 1983-10-09 04:00:00 (Sun)
  62588350800, #      utc_end 1984-05-06 05:00:00 (Sun)
  62570185200, #  local_start 1983-10-08 23:00:00 (Sat)
  62588332800, #    local_end 1984-05-06 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62588350800, #    utc_start 1984-05-06 05:00:00 (Sun)
  62602257600, #      utc_end 1984-10-14 04:00:00 (Sun)
  62588336400, #  local_start 1984-05-06 01:00:00 (Sun)
  62602243200, #    local_end 1984-10-14 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62602257600, #    utc_start 1984-10-14 04:00:00 (Sun)
  62619800400, #      utc_end 1985-05-05 05:00:00 (Sun)
  62602239600, #  local_start 1984-10-13 23:00:00 (Sat)
  62619782400, #    local_end 1985-05-05 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62619800400, #    utc_start 1985-05-05 05:00:00 (Sun)
  62633707200, #      utc_end 1985-10-13 04:00:00 (Sun)
  62619786000, #  local_start 1985-05-05 01:00:00 (Sun)
  62633692800, #    local_end 1985-10-13 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62633707200, #    utc_start 1985-10-13 04:00:00 (Sun)
  62647016400, #      utc_end 1986-03-16 05:00:00 (Sun)
  62633689200, #  local_start 1985-10-12 23:00:00 (Sat)
  62646998400, #    local_end 1986-03-16 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62647016400, #    utc_start 1986-03-16 05:00:00 (Sun)
  62665156800, #      utc_end 1986-10-12 04:00:00 (Sun)
  62647002000, #  local_start 1986-03-16 01:00:00 (Sun)
  62665142400, #    local_end 1986-10-12 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62665156800, #    utc_start 1986-10-12 04:00:00 (Sun)
  62678466000, #      utc_end 1987-03-15 05:00:00 (Sun)
  62665138800, #  local_start 1986-10-11 23:00:00 (Sat)
  62678448000, #    local_end 1987-03-15 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62678466000, #    utc_start 1987-03-15 05:00:00 (Sun)
  62696606400, #      utc_end 1987-10-11 04:00:00 (Sun)
  62678451600, #  local_start 1987-03-15 01:00:00 (Sun)
  62696592000, #    local_end 1987-10-11 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62696606400, #    utc_start 1987-10-11 04:00:00 (Sun)
  62710520400, #      utc_end 1988-03-20 05:00:00 (Sun)
  62696588400, #  local_start 1987-10-10 23:00:00 (Sat)
  62710502400, #    local_end 1988-03-20 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62710520400, #    utc_start 1988-03-20 05:00:00 (Sun)
  62728056000, #      utc_end 1988-10-09 04:00:00 (Sun)
  62710506000, #  local_start 1988-03-20 01:00:00 (Sun)
  62728041600, #    local_end 1988-10-09 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62728056000, #    utc_start 1988-10-09 04:00:00 (Sun)
  62741970000, #      utc_end 1989-03-19 05:00:00 (Sun)
  62728038000, #  local_start 1988-10-08 23:00:00 (Sat)
  62741952000, #    local_end 1989-03-19 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62741970000, #    utc_start 1989-03-19 05:00:00 (Sun)
  62759505600, #      utc_end 1989-10-08 04:00:00 (Sun)
  62741955600, #  local_start 1989-03-19 01:00:00 (Sun)
  62759491200, #    local_end 1989-10-08 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62759505600, #    utc_start 1989-10-08 04:00:00 (Sun)
  62774629200, #      utc_end 1990-04-01 05:00:00 (Sun)
  62759487600, #  local_start 1989-10-07 23:00:00 (Sat)
  62774611200, #    local_end 1990-04-01 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62774629200, #    utc_start 1990-04-01 05:00:00 (Sun)
  62791560000, #      utc_end 1990-10-14 04:00:00 (Sun)
  62774614800, #  local_start 1990-04-01 01:00:00 (Sun)
  62791545600, #    local_end 1990-10-14 00:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62791560000, #    utc_start 1990-10-14 04:00:00 (Sun)
  62806683600, #      utc_end 1991-04-07 05:00:00 (Sun)
  62791542000, #  local_start 1990-10-13 23:00:00 (Sat)
  62806665600, #    local_end 1991-04-07 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62806683600, #    utc_start 1991-04-07 05:00:00 (Sun)
  62823013200, #      utc_end 1991-10-13 05:00:00 (Sun)
  62806669200, #  local_start 1991-04-07 01:00:00 (Sun)
  62822998800, #    local_end 1991-10-13 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62823013200, #    utc_start 1991-10-13 05:00:00 (Sun)
  62838133200, #      utc_end 1992-04-05 05:00:00 (Sun)
  62822995200, #  local_start 1991-10-13 00:00:00 (Sun)
  62838115200, #    local_end 1992-04-05 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62838133200, #    utc_start 1992-04-05 05:00:00 (Sun)
  62854462800, #      utc_end 1992-10-11 05:00:00 (Sun)
  62838118800, #  local_start 1992-04-05 01:00:00 (Sun)
  62854448400, #    local_end 1992-10-11 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62854462800, #    utc_start 1992-10-11 05:00:00 (Sun)
  62869582800, #      utc_end 1993-04-04 05:00:00 (Sun)
  62854444800, #  local_start 1992-10-11 00:00:00 (Sun)
  62869564800, #    local_end 1993-04-04 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62869582800, #    utc_start 1993-04-04 05:00:00 (Sun)
  62885912400, #      utc_end 1993-10-10 05:00:00 (Sun)
  62869568400, #  local_start 1993-04-04 01:00:00 (Sun)
  62885898000, #    local_end 1993-10-10 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62885912400, #    utc_start 1993-10-10 05:00:00 (Sun)
  62901032400, #      utc_end 1994-04-03 05:00:00 (Sun)
  62885894400, #  local_start 1993-10-10 00:00:00 (Sun)
  62901014400, #    local_end 1994-04-03 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62901032400, #    utc_start 1994-04-03 05:00:00 (Sun)
  62917362000, #      utc_end 1994-10-09 05:00:00 (Sun)
  62901018000, #  local_start 1994-04-03 01:00:00 (Sun)
  62917347600, #    local_end 1994-10-09 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62917362000, #    utc_start 1994-10-09 05:00:00 (Sun)
  62932482000, #      utc_end 1995-04-02 05:00:00 (Sun)
  62917344000, #  local_start 1994-10-09 00:00:00 (Sun)
  62932464000, #    local_end 1995-04-02 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62932482000, #    utc_start 1995-04-02 05:00:00 (Sun)
  62948811600, #      utc_end 1995-10-08 05:00:00 (Sun)
  62932467600, #  local_start 1995-04-02 01:00:00 (Sun)
  62948797200, #    local_end 1995-10-08 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62948811600, #    utc_start 1995-10-08 05:00:00 (Sun)
  62964536400, #      utc_end 1996-04-07 05:00:00 (Sun)
  62948793600, #  local_start 1995-10-08 00:00:00 (Sun)
  62964518400, #    local_end 1996-04-07 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62964536400, #    utc_start 1996-04-07 05:00:00 (Sun)
  62980261200, #      utc_end 1996-10-06 05:00:00 (Sun)
  62964522000, #  local_start 1996-04-07 01:00:00 (Sun)
  62980246800, #    local_end 1996-10-06 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  62980261200, #    utc_start 1996-10-06 05:00:00 (Sun)
  62995986000, #      utc_end 1997-04-06 05:00:00 (Sun)
  62980243200, #  local_start 1996-10-06 00:00:00 (Sun)
  62995968000, #    local_end 1997-04-06 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  62995986000, #    utc_start 1997-04-06 05:00:00 (Sun)
  63012315600, #      utc_end 1997-10-12 05:00:00 (Sun)
  62995971600, #  local_start 1997-04-06 01:00:00 (Sun)
  63012301200, #    local_end 1997-10-12 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63012315600, #    utc_start 1997-10-12 05:00:00 (Sun)
  63026830800, #      utc_end 1998-03-29 05:00:00 (Sun)
  63012297600, #  local_start 1997-10-12 00:00:00 (Sun)
  63026812800, #    local_end 1998-03-29 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63026830800, #    utc_start 1998-03-29 05:00:00 (Sun)
  63044974800, #      utc_end 1998-10-25 05:00:00 (Sun)
  63026816400, #  local_start 1998-03-29 01:00:00 (Sun)
  63044960400, #    local_end 1998-10-25 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63044974800, #    utc_start 1998-10-25 05:00:00 (Sun)
  63058280400, #      utc_end 1999-03-28 05:00:00 (Sun)
  63044956800, #  local_start 1998-10-25 00:00:00 (Sun)
  63058262400, #    local_end 1999-03-28 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63058280400, #    utc_start 1999-03-28 05:00:00 (Sun)
  63077029200, #      utc_end 1999-10-31 05:00:00 (Sun)
  63058266000, #  local_start 1999-03-28 01:00:00 (Sun)
  63077014800, #    local_end 1999-10-31 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63077029200, #    utc_start 1999-10-31 05:00:00 (Sun)
  63090334800, #      utc_end 2000-04-02 05:00:00 (Sun)
  63077011200, #  local_start 1999-10-31 00:00:00 (Sun)
  63090316800, #    local_end 2000-04-02 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63090334800, #    utc_start 2000-04-02 05:00:00 (Sun)
  63108478800, #      utc_end 2000-10-29 05:00:00 (Sun)
  63090320400, #  local_start 2000-04-02 01:00:00 (Sun)
  63108464400, #    local_end 2000-10-29 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63108478800, #    utc_start 2000-10-29 05:00:00 (Sun)
  63121784400, #      utc_end 2001-04-01 05:00:00 (Sun)
  63108460800, #  local_start 2000-10-29 00:00:00 (Sun)
  63121766400, #    local_end 2001-04-01 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63121784400, #    utc_start 2001-04-01 05:00:00 (Sun)
  63139928400, #      utc_end 2001-10-28 05:00:00 (Sun)
  63121770000, #  local_start 2001-04-01 01:00:00 (Sun)
  63139914000, #    local_end 2001-10-28 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63139928400, #    utc_start 2001-10-28 05:00:00 (Sun)
  63153838800, #      utc_end 2002-04-07 05:00:00 (Sun)
  63139910400, #  local_start 2001-10-28 00:00:00 (Sun)
  63153820800, #    local_end 2002-04-07 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63153838800, #    utc_start 2002-04-07 05:00:00 (Sun)
  63171378000, #      utc_end 2002-10-27 05:00:00 (Sun)
  63153824400, #  local_start 2002-04-07 01:00:00 (Sun)
  63171363600, #    local_end 2002-10-27 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63171378000, #    utc_start 2002-10-27 05:00:00 (Sun)
  63185288400, #      utc_end 2003-04-06 05:00:00 (Sun)
  63171360000, #  local_start 2002-10-27 00:00:00 (Sun)
  63185270400, #    local_end 2003-04-06 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63185288400, #    utc_start 2003-04-06 05:00:00 (Sun)
  63202827600, #      utc_end 2003-10-26 05:00:00 (Sun)
  63185274000, #  local_start 2003-04-06 01:00:00 (Sun)
  63202813200, #    local_end 2003-10-26 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63202827600, #    utc_start 2003-10-26 05:00:00 (Sun)
  63216133200, #      utc_end 2004-03-28 05:00:00 (Sun)
  63202809600, #  local_start 2003-10-26 00:00:00 (Sun)
  63216115200, #    local_end 2004-03-28 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63216133200, #    utc_start 2004-03-28 05:00:00 (Sun)
  63297781200, #      utc_end 2006-10-29 05:00:00 (Sun)
  63216118800, #  local_start 2004-03-28 01:00:00 (Sun)
  63297766800, #    local_end 2006-10-29 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63297781200, #    utc_start 2006-10-29 05:00:00 (Sun)
  63309272400, #      utc_end 2007-03-11 05:00:00 (Sun)
  63297763200, #  local_start 2006-10-29 00:00:00 (Sun)
  63309254400, #    local_end 2007-03-11 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63309272400, #    utc_start 2007-03-11 05:00:00 (Sun)
  63329230800, #      utc_end 2007-10-28 05:00:00 (Sun)
  63309258000, #  local_start 2007-03-11 01:00:00 (Sun)
  63329216400, #    local_end 2007-10-28 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63329230800, #    utc_start 2007-10-28 05:00:00 (Sun)
  63341326800, #      utc_end 2008-03-16 05:00:00 (Sun)
  63329212800, #  local_start 2007-10-28 00:00:00 (Sun)
  63341308800, #    local_end 2008-03-16 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63341326800, #    utc_start 2008-03-16 05:00:00 (Sun)
  63360680400, #      utc_end 2008-10-26 05:00:00 (Sun)
  63341312400, #  local_start 2008-03-16 01:00:00 (Sun)
  63360666000, #    local_end 2008-10-26 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63360680400, #    utc_start 2008-10-26 05:00:00 (Sun)
  63372171600, #      utc_end 2009-03-08 05:00:00 (Sun)
  63360662400, #  local_start 2008-10-26 00:00:00 (Sun)
  63372153600, #    local_end 2009-03-08 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63372171600, #    utc_start 2009-03-08 05:00:00 (Sun)
  63392130000, #      utc_end 2009-10-25 05:00:00 (Sun)
  63372157200, #  local_start 2009-03-08 01:00:00 (Sun)
  63392115600, #    local_end 2009-10-25 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63392130000, #    utc_start 2009-10-25 05:00:00 (Sun)
  63404226000, #      utc_end 2010-03-14 05:00:00 (Sun)
  63392112000, #  local_start 2009-10-25 00:00:00 (Sun)
  63404208000, #    local_end 2010-03-14 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63404226000, #    utc_start 2010-03-14 05:00:00 (Sun)
  63424184400, #      utc_end 2010-10-31 05:00:00 (Sun)
  63404211600, #  local_start 2010-03-14 01:00:00 (Sun)
  63424170000, #    local_end 2010-10-31 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63424184400, #    utc_start 2010-10-31 05:00:00 (Sun)
  63436280400, #      utc_end 2011-03-20 05:00:00 (Sun)
  63424166400, #  local_start 2010-10-31 00:00:00 (Sun)
  63436262400, #    local_end 2011-03-20 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63436280400, #    utc_start 2011-03-20 05:00:00 (Sun)
  63456843600, #      utc_end 2011-11-13 05:00:00 (Sun)
  63436266000, #  local_start 2011-03-20 01:00:00 (Sun)
  63456829200, #    local_end 2011-11-13 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63456843600, #    utc_start 2011-11-13 05:00:00 (Sun)
  63468939600, #      utc_end 2012-04-01 05:00:00 (Sun)
  63456825600, #  local_start 2011-11-13 00:00:00 (Sun)
  63468921600, #    local_end 2012-04-01 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63468939600, #    utc_start 2012-04-01 05:00:00 (Sun)
  63487688400, #      utc_end 2012-11-04 05:00:00 (Sun)
  63468925200, #  local_start 2012-04-01 01:00:00 (Sun)
  63487674000, #    local_end 2012-11-04 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63487688400, #    utc_start 2012-11-04 05:00:00 (Sun)
  63498574800, #      utc_end 2013-03-10 05:00:00 (Sun)
  63487670400, #  local_start 2012-11-04 00:00:00 (Sun)
  63498556800, #    local_end 2013-03-10 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63498574800, #    utc_start 2013-03-10 05:00:00 (Sun)
  63519138000, #      utc_end 2013-11-03 05:00:00 (Sun)
  63498560400, #  local_start 2013-03-10 01:00:00 (Sun)
  63519123600, #    local_end 2013-11-03 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63519138000, #    utc_start 2013-11-03 05:00:00 (Sun)
  63530024400, #      utc_end 2014-03-09 05:00:00 (Sun)
  63519120000, #  local_start 2013-11-03 00:00:00 (Sun)
  63530006400, #    local_end 2014-03-09 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63530024400, #    utc_start 2014-03-09 05:00:00 (Sun)
  63550587600, #      utc_end 2014-11-02 05:00:00 (Sun)
  63530010000, #  local_start 2014-03-09 01:00:00 (Sun)
  63550573200, #    local_end 2014-11-02 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63550587600, #    utc_start 2014-11-02 05:00:00 (Sun)
  63561474000, #      utc_end 2015-03-08 05:00:00 (Sun)
  63550569600, #  local_start 2014-11-02 00:00:00 (Sun)
  63561456000, #    local_end 2015-03-08 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63561474000, #    utc_start 2015-03-08 05:00:00 (Sun)
  63582037200, #      utc_end 2015-11-01 05:00:00 (Sun)
  63561459600, #  local_start 2015-03-08 01:00:00 (Sun)
  63582022800, #    local_end 2015-11-01 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63582037200, #    utc_start 2015-11-01 05:00:00 (Sun)
  63593528400, #      utc_end 2016-03-13 05:00:00 (Sun)
  63582019200, #  local_start 2015-11-01 00:00:00 (Sun)
  63593510400, #    local_end 2016-03-13 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63593528400, #    utc_start 2016-03-13 05:00:00 (Sun)
  63614091600, #      utc_end 2016-11-06 05:00:00 (Sun)
  63593514000, #  local_start 2016-03-13 01:00:00 (Sun)
  63614077200, #    local_end 2016-11-06 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63614091600, #    utc_start 2016-11-06 05:00:00 (Sun)
  63624978000, #      utc_end 2017-03-12 05:00:00 (Sun)
  63614073600, #  local_start 2016-11-06 00:00:00 (Sun)
  63624960000, #    local_end 2017-03-12 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63624978000, #    utc_start 2017-03-12 05:00:00 (Sun)
  63645541200, #      utc_end 2017-11-05 05:00:00 (Sun)
  63624963600, #  local_start 2017-03-12 01:00:00 (Sun)
  63645526800, #    local_end 2017-11-05 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63645541200, #    utc_start 2017-11-05 05:00:00 (Sun)
  63656427600, #      utc_end 2018-03-11 05:00:00 (Sun)
  63645523200, #  local_start 2017-11-05 00:00:00 (Sun)
  63656409600, #    local_end 2018-03-11 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63656427600, #    utc_start 2018-03-11 05:00:00 (Sun)
  63676990800, #      utc_end 2018-11-04 05:00:00 (Sun)
  63656413200, #  local_start 2018-03-11 01:00:00 (Sun)
  63676976400, #    local_end 2018-11-04 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63676990800, #    utc_start 2018-11-04 05:00:00 (Sun)
  63687877200, #      utc_end 2019-03-10 05:00:00 (Sun)
  63676972800, #  local_start 2018-11-04 00:00:00 (Sun)
  63687859200, #    local_end 2019-03-10 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63687877200, #    utc_start 2019-03-10 05:00:00 (Sun)
  63708440400, #      utc_end 2019-11-03 05:00:00 (Sun)
  63687862800, #  local_start 2019-03-10 01:00:00 (Sun)
  63708426000, #    local_end 2019-11-03 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63708440400, #    utc_start 2019-11-03 05:00:00 (Sun)
  63719326800, #      utc_end 2020-03-08 05:00:00 (Sun)
  63708422400, #  local_start 2019-11-03 00:00:00 (Sun)
  63719308800, #    local_end 2020-03-08 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63719326800, #    utc_start 2020-03-08 05:00:00 (Sun)
  63739890000, #      utc_end 2020-11-01 05:00:00 (Sun)
  63719312400, #  local_start 2020-03-08 01:00:00 (Sun)
  63739875600, #    local_end 2020-11-01 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63739890000, #    utc_start 2020-11-01 05:00:00 (Sun)
  63751381200, #      utc_end 2021-03-14 05:00:00 (Sun)
  63739872000, #  local_start 2020-11-01 00:00:00 (Sun)
  63751363200, #    local_end 2021-03-14 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63751381200, #    utc_start 2021-03-14 05:00:00 (Sun)
  63771944400, #      utc_end 2021-11-07 05:00:00 (Sun)
  63751366800, #  local_start 2021-03-14 01:00:00 (Sun)
  63771930000, #    local_end 2021-11-07 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63771944400, #    utc_start 2021-11-07 05:00:00 (Sun)
  63782830800, #      utc_end 2022-03-13 05:00:00 (Sun)
  63771926400, #  local_start 2021-11-07 00:00:00 (Sun)
  63782812800, #    local_end 2022-03-13 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63782830800, #    utc_start 2022-03-13 05:00:00 (Sun)
  63803394000, #      utc_end 2022-11-06 05:00:00 (Sun)
  63782816400, #  local_start 2022-03-13 01:00:00 (Sun)
  63803379600, #    local_end 2022-11-06 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63803394000, #    utc_start 2022-11-06 05:00:00 (Sun)
  63814280400, #      utc_end 2023-03-12 05:00:00 (Sun)
  63803376000, #  local_start 2022-11-06 00:00:00 (Sun)
  63814262400, #    local_end 2023-03-12 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63814280400, #    utc_start 2023-03-12 05:00:00 (Sun)
  63834843600, #      utc_end 2023-11-05 05:00:00 (Sun)
  63814266000, #  local_start 2023-03-12 01:00:00 (Sun)
  63834829200, #    local_end 2023-11-05 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63834843600, #    utc_start 2023-11-05 05:00:00 (Sun)
  63845730000, #      utc_end 2024-03-10 05:00:00 (Sun)
  63834825600, #  local_start 2023-11-05 00:00:00 (Sun)
  63845712000, #    local_end 2024-03-10 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63845730000, #    utc_start 2024-03-10 05:00:00 (Sun)
  63866293200, #      utc_end 2024-11-03 05:00:00 (Sun)
  63845715600, #  local_start 2024-03-10 01:00:00 (Sun)
  63866278800, #    local_end 2024-11-03 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63866293200, #    utc_start 2024-11-03 05:00:00 (Sun)
  63877179600, #      utc_end 2025-03-09 05:00:00 (Sun)
  63866275200, #  local_start 2024-11-03 00:00:00 (Sun)
  63877161600, #    local_end 2025-03-09 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63877179600, #    utc_start 2025-03-09 05:00:00 (Sun)
  63897742800, #      utc_end 2025-11-02 05:00:00 (Sun)
  63877165200, #  local_start 2025-03-09 01:00:00 (Sun)
  63897728400, #    local_end 2025-11-02 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63897742800, #    utc_start 2025-11-02 05:00:00 (Sun)
  63908629200, #      utc_end 2026-03-08 05:00:00 (Sun)
  63897724800, #  local_start 2025-11-02 00:00:00 (Sun)
  63908611200, #    local_end 2026-03-08 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63908629200, #    utc_start 2026-03-08 05:00:00 (Sun)
  63929192400, #      utc_end 2026-11-01 05:00:00 (Sun)
  63908614800, #  local_start 2026-03-08 01:00:00 (Sun)
  63929178000, #    local_end 2026-11-01 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
      [
  63929192400, #    utc_start 2026-11-01 05:00:00 (Sun)
  63940683600, #      utc_end 2027-03-14 05:00:00 (Sun)
  63929174400, #  local_start 2026-11-01 00:00:00 (Sun)
  63940665600, #    local_end 2027-03-14 00:00:00 (Sun)
  -18000,
  0,
  'CST',
      ],
      [
  63940683600, #    utc_start 2027-03-14 05:00:00 (Sun)
  63961246800, #      utc_end 2027-11-07 05:00:00 (Sun)
  63940669200, #  local_start 2027-03-14 01:00:00 (Sun)
  63961232400, #    local_end 2027-11-07 01:00:00 (Sun)
  -14400,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {67}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 702926,
      'local_rd_secs' => 44976,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 702926,
      'utc_rd_secs' => 44976,
      'utc_year' => 1926
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 702926,
      'local_rd_secs' => 62976,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 702926,
      'utc_rd_secs' => 62976,
      'utc_year' => 1926
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '0:00s',
      'from' => '2012',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Cuba',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '0:00s',
      'from' => '2013',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Cuba',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_HAVANA

    $main::fatpacked{"DateTime/TimeZone/America/Hermosillo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_HERMOSILLO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Hermosillo;
  $DateTime::TimeZone::America::Hermosillo::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Hermosillo::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60620943600, #      utc_end 1922-01-01 07:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60620916968, #    local_end 1921-12-31 23:36:08 (Sat)
  -26632,
  0,
  'LMT',
      ],
      [
  60620943600, #    utc_start 1922-01-01 07:00:00 (Sun)
  60792616800, #      utc_end 1927-06-11 06:00:00 (Sat)
  60620918400, #  local_start 1922-01-01 00:00:00 (Sun)
  60792591600, #    local_end 1927-06-10 23:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60792616800, #    utc_start 1927-06-11 06:00:00 (Sat)
  60900876000, #      utc_end 1930-11-15 06:00:00 (Sat)
  60792595200, #  local_start 1927-06-11 00:00:00 (Sat)
  60900854400, #    local_end 1930-11-15 00:00:00 (Sat)
  -21600,
  0,
  'CST',
      ],
      [
  60900876000, #    utc_start 1930-11-15 06:00:00 (Sat)
  60915391200, #      utc_end 1931-05-02 06:00:00 (Sat)
  60900850800, #  local_start 1930-11-14 23:00:00 (Fri)
  60915366000, #    local_end 1931-05-01 23:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60915391200, #    utc_start 1931-05-02 06:00:00 (Sat)
  60928524000, #      utc_end 1931-10-01 06:00:00 (Thu)
  60915369600, #  local_start 1931-05-02 00:00:00 (Sat)
  60928502400, #    local_end 1931-10-01 00:00:00 (Thu)
  -21600,
  0,
  'CST',
      ],
      [
  60928524000, #    utc_start 1931-10-01 06:00:00 (Thu)
  60944338800, #      utc_end 1932-04-01 07:00:00 (Fri)
  60928498800, #  local_start 1931-09-30 23:00:00 (Wed)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60944338800, #    utc_start 1932-04-01 07:00:00 (Fri)
  61261855200, #      utc_end 1942-04-24 06:00:00 (Fri)
  60944317200, #  local_start 1932-04-01 01:00:00 (Fri)
  61261833600, #    local_end 1942-04-24 00:00:00 (Fri)
  -21600,
  0,
  'CST',
      ],
      [
  61261855200, #    utc_start 1942-04-24 06:00:00 (Fri)
  61474143600, #      utc_end 1949-01-14 07:00:00 (Fri)
  61261830000, #  local_start 1942-04-23 23:00:00 (Thu)
  61474118400, #    local_end 1949-01-14 00:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  61474143600, #    utc_start 1949-01-14 07:00:00 (Fri)
  62135712000, #      utc_end 1970-01-01 08:00:00 (Thu)
  61474114800, #  local_start 1949-01-13 23:00:00 (Thu)
  62135683200, #    local_end 1970-01-01 00:00:00 (Thu)
  -28800,
  0,
  'PST',
      ],
      [
  62135712000, #    utc_start 1970-01-01 08:00:00 (Thu)
  62964550800, #      utc_end 1996-04-07 09:00:00 (Sun)
  62135686800, #  local_start 1970-01-01 01:00:00 (Thu)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62964550800, #    utc_start 1996-04-07 09:00:00 (Sun)
  62982086400, #      utc_end 1996-10-27 08:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62982086400, #    utc_start 1996-10-27 08:00:00 (Sun)
  62996000400, #      utc_end 1997-04-06 09:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62996000400, #    utc_start 1997-04-06 09:00:00 (Sun)
  63013536000, #      utc_end 1997-10-26 08:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63013536000, #    utc_start 1997-10-26 08:00:00 (Sun)
  63027450000, #      utc_end 1998-04-05 09:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63027450000, #    utc_start 1998-04-05 09:00:00 (Sun)
  63044985600, #      utc_end 1998-10-25 08:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63044985600, #    utc_start 1998-10-25 08:00:00 (Sun)
  63050857200, #      utc_end 1999-01-01 07:00:00 (Fri)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63050832000, #    local_end 1999-01-01 00:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  63050857200, #    utc_start 1999-01-01 07:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #      utc_end
  63050832000, #  local_start 1999-01-01 00:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #    local_end
  -25200,
  0,
  'MST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {3}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_HERMOSILLO

    $main::fatpacked{"DateTime/TimeZone/America/Indiana/Indianapolis.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_INDIANA_INDIANAPOLIS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Indiana::Indianapolis;
  $DateTime::TimeZone::America::Indiana::Indianapolis::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Indiana::Indianapolis::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418036000, #      utc_end 1883-11-18 18:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418015322, #    local_end 1883-11-18 12:15:22 (Sun)
  -20678,
  0,
  'LMT',
      ],
      [
  59418036000, #    utc_start 1883-11-18 18:00:00 (Sun)
  60502406400, #      utc_end 1918-03-31 08:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60502406400, #    utc_start 1918-03-31 08:00:00 (Sun)
  60520546800, #      utc_end 1918-10-27 07:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60520546800, #    utc_start 1918-10-27 07:00:00 (Sun)
  60533856000, #      utc_end 1919-03-30 08:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60533856000, #    utc_start 1919-03-30 08:00:00 (Sun)
  60551996400, #      utc_end 1919-10-26 07:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60551996400, #    utc_start 1919-10-26 07:00:00 (Sun)
  60557781600, #      utc_end 1920-01-01 06:00:00 (Thu)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  60557760000, #    local_end 1920-01-01 00:00:00 (Thu)
  -21600,
  0,
  'CST',
      ],
      [
  60557781600, #    utc_start 1920-01-01 06:00:00 (Thu)
  61235424000, #      utc_end 1941-06-22 08:00:00 (Sun)
  60557760000, #  local_start 1920-01-01 00:00:00 (Thu)
  61235402400, #    local_end 1941-06-22 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61235424000, #    utc_start 1941-06-22 08:00:00 (Sun)
  61243887600, #      utc_end 1941-09-28 07:00:00 (Sun)
  61235406000, #  local_start 1941-06-22 03:00:00 (Sun)
  61243869600, #    local_end 1941-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61243887600, #    utc_start 1941-09-28 07:00:00 (Sun)
  61252092000, #      utc_end 1942-01-01 06:00:00 (Thu)
  61243866000, #  local_start 1941-09-28 01:00:00 (Sun)
  61252070400, #    local_end 1942-01-01 00:00:00 (Thu)
  -21600,
  0,
  'CST',
      ],
      [
  61252092000, #    utc_start 1942-01-01 06:00:00 (Thu)
  61255468800, #      utc_end 1942-02-09 08:00:00 (Mon)
  61252070400, #  local_start 1942-01-01 00:00:00 (Thu)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61255468800, #    utc_start 1942-02-09 08:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366269600, #    local_end 1945-08-14 18:00:00 (Tue)
  -18000,
  1,
  'CWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370290800, #      utc_end 1945-09-30 07:00:00 (Sun)
  61366269600, #  local_start 1945-08-14 18:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CPT',
      ],
      [
  61370290800, #    utc_start 1945-09-30 07:00:00 (Sun)
  61378322400, #      utc_end 1946-01-01 06:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -21600,
  0,
  'CST',
      ],
      [
  61378322400, #    utc_start 1946-01-01 06:00:00 (Tue)
  61388438400, #      utc_end 1946-04-28 08:00:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61388416800, #    local_end 1946-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61388438400, #    utc_start 1946-04-28 08:00:00 (Sun)
  61401740400, #      utc_end 1946-09-29 07:00:00 (Sun)
  61388420400, #  local_start 1946-04-28 03:00:00 (Sun)
  61401722400, #    local_end 1946-09-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61401740400, #    utc_start 1946-09-29 07:00:00 (Sun)
  61419888000, #      utc_end 1947-04-27 08:00:00 (Sun)
  61401718800, #  local_start 1946-09-29 01:00:00 (Sun)
  61419866400, #    local_end 1947-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61419888000, #    utc_start 1947-04-27 08:00:00 (Sun)
  61433190000, #      utc_end 1947-09-28 07:00:00 (Sun)
  61419870000, #  local_start 1947-04-27 03:00:00 (Sun)
  61433172000, #    local_end 1947-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61433190000, #    utc_start 1947-09-28 07:00:00 (Sun)
  61451337600, #      utc_end 1948-04-25 08:00:00 (Sun)
  61433168400, #  local_start 1947-09-28 01:00:00 (Sun)
  61451316000, #    local_end 1948-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61451337600, #    utc_start 1948-04-25 08:00:00 (Sun)
  61464639600, #      utc_end 1948-09-26 07:00:00 (Sun)
  61451319600, #  local_start 1948-04-25 03:00:00 (Sun)
  61464621600, #    local_end 1948-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61464639600, #    utc_start 1948-09-26 07:00:00 (Sun)
  61482787200, #      utc_end 1949-04-24 08:00:00 (Sun)
  61464618000, #  local_start 1948-09-26 01:00:00 (Sun)
  61482765600, #    local_end 1949-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61482787200, #    utc_start 1949-04-24 08:00:00 (Sun)
  61496089200, #      utc_end 1949-09-25 07:00:00 (Sun)
  61482769200, #  local_start 1949-04-24 03:00:00 (Sun)
  61496071200, #    local_end 1949-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61496089200, #    utc_start 1949-09-25 07:00:00 (Sun)
  61514841600, #      utc_end 1950-04-30 08:00:00 (Sun)
  61496067600, #  local_start 1949-09-25 01:00:00 (Sun)
  61514820000, #    local_end 1950-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61514841600, #    utc_start 1950-04-30 08:00:00 (Sun)
  61527538800, #      utc_end 1950-09-24 07:00:00 (Sun)
  61514823600, #  local_start 1950-04-30 03:00:00 (Sun)
  61527520800, #    local_end 1950-09-24 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61527538800, #    utc_start 1950-09-24 07:00:00 (Sun)
  61546291200, #      utc_end 1951-04-29 08:00:00 (Sun)
  61527517200, #  local_start 1950-09-24 01:00:00 (Sun)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61546291200, #    utc_start 1951-04-29 08:00:00 (Sun)
  61559593200, #      utc_end 1951-09-30 07:00:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61559593200, #    utc_start 1951-09-30 07:00:00 (Sun)
  61577740800, #      utc_end 1952-04-27 08:00:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61577740800, #    utc_start 1952-04-27 08:00:00 (Sun)
  61591042800, #      utc_end 1952-09-28 07:00:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61591042800, #    utc_start 1952-09-28 07:00:00 (Sun)
  61609190400, #      utc_end 1953-04-26 08:00:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61609190400, #    utc_start 1953-04-26 08:00:00 (Sun)
  61622492400, #      utc_end 1953-09-27 07:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61622492400, #    utc_start 1953-09-27 07:00:00 (Sun)
  61640640000, #      utc_end 1954-04-25 08:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61640640000, #    utc_start 1954-04-25 08:00:00 (Sun)
  61653942000, #      utc_end 1954-09-26 07:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61653942000, #    utc_start 1954-09-26 07:00:00 (Sun)
  61672089600, #      utc_end 1955-04-24 08:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61672089600, #    utc_start 1955-04-24 08:00:00 (Sun)
  61748895600, #      utc_end 1957-09-29 07:00:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61748895600, #    utc_start 1957-09-29 07:00:00 (Sun)
  61767043200, #      utc_end 1958-04-27 08:00:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61767043200, #    utc_start 1958-04-27 08:00:00 (Sun)
  62104165200, #      utc_end 1969-01-01 05:00:00 (Wed)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  62104147200, #    local_end 1969-01-01 00:00:00 (Wed)
  -18000,
  0,
  'EST',
      ],
      [
  62104165200, #    utc_start 1969-01-01 05:00:00 (Wed)
  62114194800, #      utc_end 1969-04-27 07:00:00 (Sun)
  62104147200, #  local_start 1969-01-01 00:00:00 (Wed)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62114194800, #    utc_start 1969-04-27 07:00:00 (Sun)
  62129916000, #      utc_end 1969-10-26 06:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62129916000, #    utc_start 1969-10-26 06:00:00 (Sun)
  62145644400, #      utc_end 1970-04-26 07:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62145644400, #    utc_start 1970-04-26 07:00:00 (Sun)
  62161365600, #      utc_end 1970-10-25 06:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62161365600, #    utc_start 1970-10-25 06:00:00 (Sun)
  62167237200, #      utc_end 1971-01-01 05:00:00 (Fri)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62167219200, #    local_end 1971-01-01 00:00:00 (Fri)
  -18000,
  0,
  'EST',
      ],
      [
  62167237200, #    utc_start 1971-01-01 05:00:00 (Fri)
  63271774800, #      utc_end 2006-01-01 05:00:00 (Sun)
  62167219200, #  local_start 1971-01-01 00:00:00 (Fri)
  63271756800, #    local_end 2006-01-01 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63271774800, #    utc_start 2006-01-01 05:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  63271756800, #  local_start 2006-01-01 00:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297784800, #      utc_end 2006-10-29 06:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63297784800, #    utc_start 2006-10-29 06:00:00 (Sun)
  63309279600, #      utc_end 2007-03-11 07:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63309279600, #    utc_start 2007-03-11 07:00:00 (Sun)
  63329839200, #      utc_end 2007-11-04 06:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63329839200, #    utc_start 2007-11-04 06:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {38}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732312,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732312,
      'utc_rd_secs' => 0,
      'utc_year' => 2007
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732312,
      'local_rd_secs' => 18000,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732312,
      'utc_rd_secs' => 18000,
      'utc_year' => 2007
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_INDIANA_INDIANAPOLIS

    $main::fatpacked{"DateTime/TimeZone/America/Indiana/Knox.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_INDIANA_KNOX';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Indiana::Knox;
  $DateTime::TimeZone::America::Indiana::Knox::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Indiana::Knox::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418036000, #      utc_end 1883-11-18 18:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418015210, #    local_end 1883-11-18 12:13:30 (Sun)
  -20790,
  0,
  'LMT',
      ],
      [
  59418036000, #    utc_start 1883-11-18 18:00:00 (Sun)
  60502406400, #      utc_end 1918-03-31 08:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60502406400, #    utc_start 1918-03-31 08:00:00 (Sun)
  60520546800, #      utc_end 1918-10-27 07:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60520546800, #    utc_start 1918-10-27 07:00:00 (Sun)
  60533856000, #      utc_end 1919-03-30 08:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60533856000, #    utc_start 1919-03-30 08:00:00 (Sun)
  60551996400, #      utc_end 1919-10-26 07:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60551996400, #    utc_start 1919-10-26 07:00:00 (Sun)
  61255468800, #      utc_end 1942-02-09 08:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61255468800, #    utc_start 1942-02-09 08:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366269600, #    local_end 1945-08-14 18:00:00 (Tue)
  -18000,
  1,
  'CWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370290800, #      utc_end 1945-09-30 07:00:00 (Sun)
  61366269600, #  local_start 1945-08-14 18:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CPT',
      ],
      [
  61370290800, #    utc_start 1945-09-30 07:00:00 (Sun)
  61409858400, #      utc_end 1947-01-01 06:00:00 (Wed)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61409836800, #    local_end 1947-01-01 00:00:00 (Wed)
  -21600,
  0,
  'CST',
      ],
      [
  61409858400, #    utc_start 1947-01-01 06:00:00 (Wed)
  61419888000, #      utc_end 1947-04-27 08:00:00 (Sun)
  61409836800, #  local_start 1947-01-01 00:00:00 (Wed)
  61419866400, #    local_end 1947-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61419888000, #    utc_start 1947-04-27 08:00:00 (Sun)
  61433190000, #      utc_end 1947-09-28 07:00:00 (Sun)
  61419870000, #  local_start 1947-04-27 03:00:00 (Sun)
  61433172000, #    local_end 1947-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61433190000, #    utc_start 1947-09-28 07:00:00 (Sun)
  61451337600, #      utc_end 1948-04-25 08:00:00 (Sun)
  61433168400, #  local_start 1947-09-28 01:00:00 (Sun)
  61451316000, #    local_end 1948-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61451337600, #    utc_start 1948-04-25 08:00:00 (Sun)
  61464639600, #      utc_end 1948-09-26 07:00:00 (Sun)
  61451319600, #  local_start 1948-04-25 03:00:00 (Sun)
  61464621600, #    local_end 1948-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61464639600, #    utc_start 1948-09-26 07:00:00 (Sun)
  61482787200, #      utc_end 1949-04-24 08:00:00 (Sun)
  61464618000, #  local_start 1948-09-26 01:00:00 (Sun)
  61482765600, #    local_end 1949-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61482787200, #    utc_start 1949-04-24 08:00:00 (Sun)
  61496089200, #      utc_end 1949-09-25 07:00:00 (Sun)
  61482769200, #  local_start 1949-04-24 03:00:00 (Sun)
  61496071200, #    local_end 1949-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61496089200, #    utc_start 1949-09-25 07:00:00 (Sun)
  61514841600, #      utc_end 1950-04-30 08:00:00 (Sun)
  61496067600, #  local_start 1949-09-25 01:00:00 (Sun)
  61514820000, #    local_end 1950-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61514841600, #    utc_start 1950-04-30 08:00:00 (Sun)
  61527538800, #      utc_end 1950-09-24 07:00:00 (Sun)
  61514823600, #  local_start 1950-04-30 03:00:00 (Sun)
  61527520800, #    local_end 1950-09-24 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61527538800, #    utc_start 1950-09-24 07:00:00 (Sun)
  61546291200, #      utc_end 1951-04-29 08:00:00 (Sun)
  61527517200, #  local_start 1950-09-24 01:00:00 (Sun)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61546291200, #    utc_start 1951-04-29 08:00:00 (Sun)
  61559593200, #      utc_end 1951-09-30 07:00:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61559593200, #    utc_start 1951-09-30 07:00:00 (Sun)
  61577740800, #      utc_end 1952-04-27 08:00:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61577740800, #    utc_start 1952-04-27 08:00:00 (Sun)
  61591042800, #      utc_end 1952-09-28 07:00:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61591042800, #    utc_start 1952-09-28 07:00:00 (Sun)
  61609190400, #      utc_end 1953-04-26 08:00:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61609190400, #    utc_start 1953-04-26 08:00:00 (Sun)
  61622492400, #      utc_end 1953-09-27 07:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61622492400, #    utc_start 1953-09-27 07:00:00 (Sun)
  61640640000, #      utc_end 1954-04-25 08:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61640640000, #    utc_start 1954-04-25 08:00:00 (Sun)
  61653942000, #      utc_end 1954-09-26 07:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61653942000, #    utc_start 1954-09-26 07:00:00 (Sun)
  61672089600, #      utc_end 1955-04-24 08:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61672089600, #    utc_start 1955-04-24 08:00:00 (Sun)
  61688415600, #      utc_end 1955-10-30 07:00:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61688397600, #    local_end 1955-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61688415600, #    utc_start 1955-10-30 07:00:00 (Sun)
  61704144000, #      utc_end 1956-04-29 08:00:00 (Sun)
  61688394000, #  local_start 1955-10-30 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61704144000, #    utc_start 1956-04-29 08:00:00 (Sun)
  61719865200, #      utc_end 1956-10-28 07:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61719847200, #    local_end 1956-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61719865200, #    utc_start 1956-10-28 07:00:00 (Sun)
  61735593600, #      utc_end 1957-04-28 08:00:00 (Sun)
  61719843600, #  local_start 1956-10-28 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61735593600, #    utc_start 1957-04-28 08:00:00 (Sun)
  61748895600, #      utc_end 1957-09-29 07:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61748895600, #    utc_start 1957-09-29 07:00:00 (Sun)
  61767043200, #      utc_end 1958-04-27 08:00:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61767043200, #    utc_start 1958-04-27 08:00:00 (Sun)
  61780345200, #      utc_end 1958-09-28 07:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61780327200, #    local_end 1958-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61780345200, #    utc_start 1958-09-28 07:00:00 (Sun)
  61798492800, #      utc_end 1959-04-26 08:00:00 (Sun)
  61780323600, #  local_start 1958-09-28 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61798492800, #    utc_start 1959-04-26 08:00:00 (Sun)
  61814214000, #      utc_end 1959-10-25 07:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61814196000, #    local_end 1959-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61814214000, #    utc_start 1959-10-25 07:00:00 (Sun)
  61829942400, #      utc_end 1960-04-24 08:00:00 (Sun)
  61814192400, #  local_start 1959-10-25 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61829942400, #    utc_start 1960-04-24 08:00:00 (Sun)
  61846268400, #      utc_end 1960-10-30 07:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61846250400, #    local_end 1960-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61846268400, #    utc_start 1960-10-30 07:00:00 (Sun)
  61861996800, #      utc_end 1961-04-30 08:00:00 (Sun)
  61846246800, #  local_start 1960-10-30 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61861996800, #    utc_start 1961-04-30 08:00:00 (Sun)
  61877718000, #      utc_end 1961-10-29 07:00:00 (Sun)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  61877700000, #    local_end 1961-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61877718000, #    utc_start 1961-10-29 07:00:00 (Sun)
  61893446400, #      utc_end 1962-04-29 08:00:00 (Sun)
  61877696400, #  local_start 1961-10-29 01:00:00 (Sun)
  61893424800, #    local_end 1962-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61893446400, #    utc_start 1962-04-29 08:00:00 (Sun)
  61940617200, #      utc_end 1963-10-27 07:00:00 (Sun)
  61893428400, #  local_start 1962-04-29 03:00:00 (Sun)
  61940599200, #    local_end 1963-10-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61940617200, #    utc_start 1963-10-27 07:00:00 (Sun)
  62051299200, #      utc_end 1967-04-30 08:00:00 (Sun)
  61940595600, #  local_start 1963-10-27 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62051299200, #    utc_start 1967-04-30 08:00:00 (Sun)
  62067020400, #      utc_end 1967-10-29 07:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62067020400, #    utc_start 1967-10-29 07:00:00 (Sun)
  62082748800, #      utc_end 1968-04-28 08:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62082748800, #    utc_start 1968-04-28 08:00:00 (Sun)
  62098470000, #      utc_end 1968-10-27 07:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62098470000, #    utc_start 1968-10-27 07:00:00 (Sun)
  62114198400, #      utc_end 1969-04-27 08:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62114198400, #    utc_start 1969-04-27 08:00:00 (Sun)
  62129919600, #      utc_end 1969-10-26 07:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62129919600, #    utc_start 1969-10-26 07:00:00 (Sun)
  62145648000, #      utc_end 1970-04-26 08:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62145648000, #    utc_start 1970-04-26 08:00:00 (Sun)
  62161369200, #      utc_end 1970-10-25 07:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62161369200, #    utc_start 1970-10-25 07:00:00 (Sun)
  62177097600, #      utc_end 1971-04-25 08:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62177097600, #    utc_start 1971-04-25 08:00:00 (Sun)
  62193423600, #      utc_end 1971-10-31 07:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62193423600, #    utc_start 1971-10-31 07:00:00 (Sun)
  62209152000, #      utc_end 1972-04-30 08:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62209152000, #    utc_start 1972-04-30 08:00:00 (Sun)
  62224873200, #      utc_end 1972-10-29 07:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62224873200, #    utc_start 1972-10-29 07:00:00 (Sun)
  62240601600, #      utc_end 1973-04-29 08:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62240601600, #    utc_start 1973-04-29 08:00:00 (Sun)
  62256322800, #      utc_end 1973-10-28 07:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62256322800, #    utc_start 1973-10-28 07:00:00 (Sun)
  62262374400, #      utc_end 1974-01-06 08:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62262374400, #    utc_start 1974-01-06 08:00:00 (Sun)
  62287772400, #      utc_end 1974-10-27 07:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62287772400, #    utc_start 1974-10-27 07:00:00 (Sun)
  62298057600, #      utc_end 1975-02-23 08:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62298057600, #    utc_start 1975-02-23 08:00:00 (Sun)
  62319222000, #      utc_end 1975-10-26 07:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62319222000, #    utc_start 1975-10-26 07:00:00 (Sun)
  62334950400, #      utc_end 1976-04-25 08:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62334950400, #    utc_start 1976-04-25 08:00:00 (Sun)
  62351276400, #      utc_end 1976-10-31 07:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62351276400, #    utc_start 1976-10-31 07:00:00 (Sun)
  62366400000, #      utc_end 1977-04-24 08:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62366400000, #    utc_start 1977-04-24 08:00:00 (Sun)
  62382726000, #      utc_end 1977-10-30 07:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62382726000, #    utc_start 1977-10-30 07:00:00 (Sun)
  62398454400, #      utc_end 1978-04-30 08:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62398454400, #    utc_start 1978-04-30 08:00:00 (Sun)
  62414175600, #      utc_end 1978-10-29 07:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62414175600, #    utc_start 1978-10-29 07:00:00 (Sun)
  62429904000, #      utc_end 1979-04-29 08:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62429904000, #    utc_start 1979-04-29 08:00:00 (Sun)
  62445625200, #      utc_end 1979-10-28 07:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62445625200, #    utc_start 1979-10-28 07:00:00 (Sun)
  62461353600, #      utc_end 1980-04-27 08:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62461353600, #    utc_start 1980-04-27 08:00:00 (Sun)
  62477074800, #      utc_end 1980-10-26 07:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62477074800, #    utc_start 1980-10-26 07:00:00 (Sun)
  62492803200, #      utc_end 1981-04-26 08:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62492803200, #    utc_start 1981-04-26 08:00:00 (Sun)
  62508524400, #      utc_end 1981-10-25 07:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62508524400, #    utc_start 1981-10-25 07:00:00 (Sun)
  62524252800, #      utc_end 1982-04-25 08:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62524252800, #    utc_start 1982-04-25 08:00:00 (Sun)
  62540578800, #      utc_end 1982-10-31 07:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62540578800, #    utc_start 1982-10-31 07:00:00 (Sun)
  62555702400, #      utc_end 1983-04-24 08:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62555702400, #    utc_start 1983-04-24 08:00:00 (Sun)
  62572028400, #      utc_end 1983-10-30 07:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62572028400, #    utc_start 1983-10-30 07:00:00 (Sun)
  62587756800, #      utc_end 1984-04-29 08:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62587756800, #    utc_start 1984-04-29 08:00:00 (Sun)
  62603478000, #      utc_end 1984-10-28 07:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62603478000, #    utc_start 1984-10-28 07:00:00 (Sun)
  62619206400, #      utc_end 1985-04-28 08:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62619206400, #    utc_start 1985-04-28 08:00:00 (Sun)
  62634927600, #      utc_end 1985-10-27 07:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62634927600, #    utc_start 1985-10-27 07:00:00 (Sun)
  62650656000, #      utc_end 1986-04-27 08:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62650656000, #    utc_start 1986-04-27 08:00:00 (Sun)
  62666377200, #      utc_end 1986-10-26 07:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62666377200, #    utc_start 1986-10-26 07:00:00 (Sun)
  62680291200, #      utc_end 1987-04-05 08:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62680291200, #    utc_start 1987-04-05 08:00:00 (Sun)
  62697826800, #      utc_end 1987-10-25 07:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62697826800, #    utc_start 1987-10-25 07:00:00 (Sun)
  62711740800, #      utc_end 1988-04-03 08:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62711740800, #    utc_start 1988-04-03 08:00:00 (Sun)
  62729881200, #      utc_end 1988-10-30 07:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62729881200, #    utc_start 1988-10-30 07:00:00 (Sun)
  62743190400, #      utc_end 1989-04-02 08:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62743190400, #    utc_start 1989-04-02 08:00:00 (Sun)
  62761330800, #      utc_end 1989-10-29 07:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62761330800, #    utc_start 1989-10-29 07:00:00 (Sun)
  62774640000, #      utc_end 1990-04-01 08:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62774640000, #    utc_start 1990-04-01 08:00:00 (Sun)
  62792780400, #      utc_end 1990-10-28 07:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62792780400, #    utc_start 1990-10-28 07:00:00 (Sun)
  62806694400, #      utc_end 1991-04-07 08:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62806694400, #    utc_start 1991-04-07 08:00:00 (Sun)
  62824230000, #      utc_end 1991-10-27 07:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62824230000, #    utc_start 1991-10-27 07:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  62824212000, #  local_start 1991-10-27 02:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279626400, #  local_start 2006-04-02 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63309283200, #      utc_end 2007-03-11 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63309283200, #    utc_start 2007-03-11 08:00:00 (Sun)
  63329842800, #      utc_end 2007-11-04 07:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329842800, #    utc_start 2007-11-04 07:00:00 (Sun)
  63340732800, #      utc_end 2008-03-09 08:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63340732800, #    utc_start 2008-03-09 08:00:00 (Sun)
  63361292400, #      utc_end 2008-11-02 07:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63361292400, #    utc_start 2008-11-02 07:00:00 (Sun)
  63372182400, #      utc_end 2009-03-08 08:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63372182400, #    utc_start 2009-03-08 08:00:00 (Sun)
  63392742000, #      utc_end 2009-11-01 07:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63392742000, #    utc_start 2009-11-01 07:00:00 (Sun)
  63404236800, #      utc_end 2010-03-14 08:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63404236800, #    utc_start 2010-03-14 08:00:00 (Sun)
  63424796400, #      utc_end 2010-11-07 07:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424796400, #    utc_start 2010-11-07 07:00:00 (Sun)
  63435686400, #      utc_end 2011-03-13 08:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63435686400, #    utc_start 2011-03-13 08:00:00 (Sun)
  63456246000, #      utc_end 2011-11-06 07:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63456246000, #    utc_start 2011-11-06 07:00:00 (Sun)
  63467136000, #      utc_end 2012-03-11 08:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63467136000, #    utc_start 2012-03-11 08:00:00 (Sun)
  63487695600, #      utc_end 2012-11-04 07:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487695600, #    utc_start 2012-11-04 07:00:00 (Sun)
  63498585600, #      utc_end 2013-03-10 08:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63498585600, #    utc_start 2013-03-10 08:00:00 (Sun)
  63519145200, #      utc_end 2013-11-03 07:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63519145200, #    utc_start 2013-11-03 07:00:00 (Sun)
  63530035200, #      utc_end 2014-03-09 08:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63530035200, #    utc_start 2014-03-09 08:00:00 (Sun)
  63550594800, #      utc_end 2014-11-02 07:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63550594800, #    utc_start 2014-11-02 07:00:00 (Sun)
  63561484800, #      utc_end 2015-03-08 08:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63561484800, #    utc_start 2015-03-08 08:00:00 (Sun)
  63582044400, #      utc_end 2015-11-01 07:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63582044400, #    utc_start 2015-11-01 07:00:00 (Sun)
  63593539200, #      utc_end 2016-03-13 08:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63593539200, #    utc_start 2016-03-13 08:00:00 (Sun)
  63614098800, #      utc_end 2016-11-06 07:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63614098800, #    utc_start 2016-11-06 07:00:00 (Sun)
  63624988800, #      utc_end 2017-03-12 08:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63624988800, #    utc_start 2017-03-12 08:00:00 (Sun)
  63645548400, #      utc_end 2017-11-05 07:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63645548400, #    utc_start 2017-11-05 07:00:00 (Sun)
  63656438400, #      utc_end 2018-03-11 08:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63656438400, #    utc_start 2018-03-11 08:00:00 (Sun)
  63676998000, #      utc_end 2018-11-04 07:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676998000, #    utc_start 2018-11-04 07:00:00 (Sun)
  63687888000, #      utc_end 2019-03-10 08:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63687888000, #    utc_start 2019-03-10 08:00:00 (Sun)
  63708447600, #      utc_end 2019-11-03 07:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63708447600, #    utc_start 2019-11-03 07:00:00 (Sun)
  63719337600, #      utc_end 2020-03-08 08:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63719337600, #    utc_start 2020-03-08 08:00:00 (Sun)
  63739897200, #      utc_end 2020-11-01 07:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739897200, #    utc_start 2020-11-01 07:00:00 (Sun)
  63751392000, #      utc_end 2021-03-14 08:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63751392000, #    utc_start 2021-03-14 08:00:00 (Sun)
  63771951600, #      utc_end 2021-11-07 07:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771951600, #    utc_start 2021-11-07 07:00:00 (Sun)
  63782841600, #      utc_end 2022-03-13 08:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63782841600, #    utc_start 2022-03-13 08:00:00 (Sun)
  63803401200, #      utc_end 2022-11-06 07:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63803401200, #    utc_start 2022-11-06 07:00:00 (Sun)
  63814291200, #      utc_end 2023-03-12 08:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63814291200, #    utc_start 2023-03-12 08:00:00 (Sun)
  63834850800, #      utc_end 2023-11-05 07:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834850800, #    utc_start 2023-11-05 07:00:00 (Sun)
  63845740800, #      utc_end 2024-03-10 08:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63845740800, #    utc_start 2024-03-10 08:00:00 (Sun)
  63866300400, #      utc_end 2024-11-03 07:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63866300400, #    utc_start 2024-11-03 07:00:00 (Sun)
  63877190400, #      utc_end 2025-03-09 08:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63877190400, #    utc_start 2025-03-09 08:00:00 (Sun)
  63897750000, #      utc_end 2025-11-02 07:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897750000, #    utc_start 2025-11-02 07:00:00 (Sun)
  63908640000, #      utc_end 2026-03-08 08:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63908640000, #    utc_start 2026-03-08 08:00:00 (Sun)
  63929199600, #      utc_end 2026-11-01 07:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63929199600, #    utc_start 2026-11-01 07:00:00 (Sun)
  63940694400, #      utc_end 2027-03-14 08:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63940694400, #    utc_start 2027-03-14 08:00:00 (Sun)
  63961254000, #      utc_end 2027-11-07 07:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {66}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732403,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732403,
      'utc_rd_secs' => 7200,
      'utc_year' => 2007
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732403,
      'local_rd_secs' => 25200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732403,
      'utc_rd_secs' => 25200,
      'utc_year' => 2007
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_INDIANA_KNOX

    $main::fatpacked{"DateTime/TimeZone/America/Indiana/Marengo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_INDIANA_MARENGO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Indiana::Marengo;
  $DateTime::TimeZone::America::Indiana::Marengo::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Indiana::Marengo::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418036000, #      utc_end 1883-11-18 18:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418015277, #    local_end 1883-11-18 12:14:37 (Sun)
  -20723,
  0,
  'LMT',
      ],
      [
  59418036000, #    utc_start 1883-11-18 18:00:00 (Sun)
  60502406400, #      utc_end 1918-03-31 08:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60502406400, #    utc_start 1918-03-31 08:00:00 (Sun)
  60520546800, #      utc_end 1918-10-27 07:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60520546800, #    utc_start 1918-10-27 07:00:00 (Sun)
  60533856000, #      utc_end 1919-03-30 08:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60533856000, #    utc_start 1919-03-30 08:00:00 (Sun)
  60551996400, #      utc_end 1919-10-26 07:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60551996400, #    utc_start 1919-10-26 07:00:00 (Sun)
  61255468800, #      utc_end 1942-02-09 08:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61255468800, #    utc_start 1942-02-09 08:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366269600, #    local_end 1945-08-14 18:00:00 (Tue)
  -18000,
  1,
  'CWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370290800, #      utc_end 1945-09-30 07:00:00 (Sun)
  61366269600, #  local_start 1945-08-14 18:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CPT',
      ],
      [
  61370290800, #    utc_start 1945-09-30 07:00:00 (Sun)
  61536088800, #      utc_end 1951-01-01 06:00:00 (Mon)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61536067200, #    local_end 1951-01-01 00:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61536088800, #    utc_start 1951-01-01 06:00:00 (Mon)
  61546291200, #      utc_end 1951-04-29 08:00:00 (Sun)
  61536067200, #  local_start 1951-01-01 00:00:00 (Mon)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61546291200, #    utc_start 1951-04-29 08:00:00 (Sun)
  61559593200, #      utc_end 1951-09-30 07:00:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61559593200, #    utc_start 1951-09-30 07:00:00 (Sun)
  61640640000, #      utc_end 1954-04-25 08:00:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61640640000, #    utc_start 1954-04-25 08:00:00 (Sun)
  61653942000, #      utc_end 1954-09-26 07:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61653942000, #    utc_start 1954-09-26 07:00:00 (Sun)
  61672089600, #      utc_end 1955-04-24 08:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61672089600, #    utc_start 1955-04-24 08:00:00 (Sun)
  61685391600, #      utc_end 1955-09-25 07:00:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61685373600, #    local_end 1955-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61685391600, #    utc_start 1955-09-25 07:00:00 (Sun)
  61704144000, #      utc_end 1956-04-29 08:00:00 (Sun)
  61685370000, #  local_start 1955-09-25 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61704144000, #    utc_start 1956-04-29 08:00:00 (Sun)
  61717446000, #      utc_end 1956-09-30 07:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61717428000, #    local_end 1956-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61717446000, #    utc_start 1956-09-30 07:00:00 (Sun)
  61735593600, #      utc_end 1957-04-28 08:00:00 (Sun)
  61717424400, #  local_start 1956-09-30 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61735593600, #    utc_start 1957-04-28 08:00:00 (Sun)
  61748895600, #      utc_end 1957-09-29 07:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61748895600, #    utc_start 1957-09-29 07:00:00 (Sun)
  61767043200, #      utc_end 1958-04-27 08:00:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61767043200, #    utc_start 1958-04-27 08:00:00 (Sun)
  61780345200, #      utc_end 1958-09-28 07:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61780327200, #    local_end 1958-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61780345200, #    utc_start 1958-09-28 07:00:00 (Sun)
  61798492800, #      utc_end 1959-04-26 08:00:00 (Sun)
  61780323600, #  local_start 1958-09-28 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61798492800, #    utc_start 1959-04-26 08:00:00 (Sun)
  61811794800, #      utc_end 1959-09-27 07:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61811776800, #    local_end 1959-09-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61811794800, #    utc_start 1959-09-27 07:00:00 (Sun)
  61829942400, #      utc_end 1960-04-24 08:00:00 (Sun)
  61811773200, #  local_start 1959-09-27 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61829942400, #    utc_start 1960-04-24 08:00:00 (Sun)
  61843244400, #      utc_end 1960-09-25 07:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61843226400, #    local_end 1960-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61843244400, #    utc_start 1960-09-25 07:00:00 (Sun)
  61861996800, #      utc_end 1961-04-30 08:00:00 (Sun)
  61843222800, #  local_start 1960-09-25 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61861996800, #    utc_start 1961-04-30 08:00:00 (Sun)
  62104165200, #      utc_end 1969-01-01 05:00:00 (Wed)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  62104147200, #    local_end 1969-01-01 00:00:00 (Wed)
  -18000,
  0,
  'EST',
      ],
      [
  62104165200, #    utc_start 1969-01-01 05:00:00 (Wed)
  62114194800, #      utc_end 1969-04-27 07:00:00 (Sun)
  62104147200, #  local_start 1969-01-01 00:00:00 (Wed)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62114194800, #    utc_start 1969-04-27 07:00:00 (Sun)
  62129916000, #      utc_end 1969-10-26 06:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62129916000, #    utc_start 1969-10-26 06:00:00 (Sun)
  62145644400, #      utc_end 1970-04-26 07:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62145644400, #    utc_start 1970-04-26 07:00:00 (Sun)
  62161365600, #      utc_end 1970-10-25 06:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62161365600, #    utc_start 1970-10-25 06:00:00 (Sun)
  62177094000, #      utc_end 1971-04-25 07:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62177094000, #    utc_start 1971-04-25 07:00:00 (Sun)
  62193420000, #      utc_end 1971-10-31 06:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62193420000, #    utc_start 1971-10-31 06:00:00 (Sun)
  62209148400, #      utc_end 1972-04-30 07:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62209148400, #    utc_start 1972-04-30 07:00:00 (Sun)
  62224869600, #      utc_end 1972-10-29 06:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62224869600, #    utc_start 1972-10-29 06:00:00 (Sun)
  62240598000, #      utc_end 1973-04-29 07:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62240598000, #    utc_start 1973-04-29 07:00:00 (Sun)
  62256319200, #      utc_end 1973-10-28 06:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62256319200, #    utc_start 1973-10-28 06:00:00 (Sun)
  62262370800, #      utc_end 1974-01-06 07:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62262370800, #    utc_start 1974-01-06 07:00:00 (Sun)
  62287772400, #      utc_end 1974-10-27 07:00:00 (Sun)
  62262352800, #  local_start 1974-01-06 02:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62287772400, #    utc_start 1974-10-27 07:00:00 (Sun)
  62298054000, #      utc_end 1975-02-23 07:00:00 (Sun)
  62287754400, #  local_start 1974-10-27 02:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62298054000, #    utc_start 1975-02-23 07:00:00 (Sun)
  62319218400, #      utc_end 1975-10-26 06:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62319218400, #    utc_start 1975-10-26 06:00:00 (Sun)
  62325003600, #      utc_end 1976-01-01 05:00:00 (Thu)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62324985600, #    local_end 1976-01-01 00:00:00 (Thu)
  -18000,
  0,
  'EST',
      ],
      [
  62325003600, #    utc_start 1976-01-01 05:00:00 (Thu)
  63271774800, #      utc_end 2006-01-01 05:00:00 (Sun)
  62324985600, #  local_start 1976-01-01 00:00:00 (Thu)
  63271756800, #    local_end 2006-01-01 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63271774800, #    utc_start 2006-01-01 05:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  63271756800, #  local_start 2006-01-01 00:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297784800, #      utc_end 2006-10-29 06:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63297784800, #    utc_start 2006-10-29 06:00:00 (Sun)
  63309279600, #      utc_end 2007-03-11 07:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63309279600, #    utc_start 2007-03-11 07:00:00 (Sun)
  63329839200, #      utc_end 2007-11-04 06:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63329839200, #    utc_start 2007-11-04 06:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {41}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732312,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732312,
      'utc_rd_secs' => 0,
      'utc_year' => 2007
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732312,
      'local_rd_secs' => 18000,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732312,
      'utc_rd_secs' => 18000,
      'utc_year' => 2007
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_INDIANA_MARENGO

    $main::fatpacked{"DateTime/TimeZone/America/Indiana/Petersburg.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_INDIANA_PETERSBURG';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Indiana::Petersburg;
  $DateTime::TimeZone::America::Indiana::Petersburg::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Indiana::Petersburg::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418036000, #      utc_end 1883-11-18 18:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418015053, #    local_end 1883-11-18 12:10:53 (Sun)
  -20947,
  0,
  'LMT',
      ],
      [
  59418036000, #    utc_start 1883-11-18 18:00:00 (Sun)
  60502406400, #      utc_end 1918-03-31 08:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60502406400, #    utc_start 1918-03-31 08:00:00 (Sun)
  60520546800, #      utc_end 1918-10-27 07:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60520546800, #    utc_start 1918-10-27 07:00:00 (Sun)
  60533856000, #      utc_end 1919-03-30 08:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60533856000, #    utc_start 1919-03-30 08:00:00 (Sun)
  60551996400, #      utc_end 1919-10-26 07:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60551996400, #    utc_start 1919-10-26 07:00:00 (Sun)
  61255468800, #      utc_end 1942-02-09 08:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61255468800, #    utc_start 1942-02-09 08:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366269600, #    local_end 1945-08-14 18:00:00 (Tue)
  -18000,
  1,
  'CWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370290800, #      utc_end 1945-09-30 07:00:00 (Sun)
  61366269600, #  local_start 1945-08-14 18:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CPT',
      ],
      [
  61370290800, #    utc_start 1945-09-30 07:00:00 (Sun)
  61662319200, #      utc_end 1955-01-01 06:00:00 (Sat)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61662297600, #    local_end 1955-01-01 00:00:00 (Sat)
  -21600,
  0,
  'CST',
      ],
      [
  61662319200, #    utc_start 1955-01-01 06:00:00 (Sat)
  61672687200, #      utc_end 1955-05-01 06:00:00 (Sun)
  61662297600, #  local_start 1955-01-01 00:00:00 (Sat)
  61672665600, #    local_end 1955-05-01 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61672687200, #    utc_start 1955-05-01 06:00:00 (Sun)
  61685391600, #      utc_end 1955-09-25 07:00:00 (Sun)
  61672669200, #  local_start 1955-05-01 01:00:00 (Sun)
  61685373600, #    local_end 1955-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61685391600, #    utc_start 1955-09-25 07:00:00 (Sun)
  61704144000, #      utc_end 1956-04-29 08:00:00 (Sun)
  61685370000, #  local_start 1955-09-25 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61704144000, #    utc_start 1956-04-29 08:00:00 (Sun)
  61717446000, #      utc_end 1956-09-30 07:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61717428000, #    local_end 1956-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61717446000, #    utc_start 1956-09-30 07:00:00 (Sun)
  61735593600, #      utc_end 1957-04-28 08:00:00 (Sun)
  61717424400, #  local_start 1956-09-30 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61735593600, #    utc_start 1957-04-28 08:00:00 (Sun)
  61748895600, #      utc_end 1957-09-29 07:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61748895600, #    utc_start 1957-09-29 07:00:00 (Sun)
  61767043200, #      utc_end 1958-04-27 08:00:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61767043200, #    utc_start 1958-04-27 08:00:00 (Sun)
  61780345200, #      utc_end 1958-09-28 07:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61780327200, #    local_end 1958-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61780345200, #    utc_start 1958-09-28 07:00:00 (Sun)
  61798492800, #      utc_end 1959-04-26 08:00:00 (Sun)
  61780323600, #  local_start 1958-09-28 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61798492800, #    utc_start 1959-04-26 08:00:00 (Sun)
  61811794800, #      utc_end 1959-09-27 07:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61811776800, #    local_end 1959-09-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61811794800, #    utc_start 1959-09-27 07:00:00 (Sun)
  61829942400, #      utc_end 1960-04-24 08:00:00 (Sun)
  61811773200, #  local_start 1959-09-27 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61829942400, #    utc_start 1960-04-24 08:00:00 (Sun)
  61843244400, #      utc_end 1960-09-25 07:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61843226400, #    local_end 1960-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61843244400, #    utc_start 1960-09-25 07:00:00 (Sun)
  61861996800, #      utc_end 1961-04-30 08:00:00 (Sun)
  61843222800, #  local_start 1960-09-25 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61861996800, #    utc_start 1961-04-30 08:00:00 (Sun)
  61877718000, #      utc_end 1961-10-29 07:00:00 (Sun)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  61877700000, #    local_end 1961-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61877718000, #    utc_start 1961-10-29 07:00:00 (Sun)
  61893446400, #      utc_end 1962-04-29 08:00:00 (Sun)
  61877696400, #  local_start 1961-10-29 01:00:00 (Sun)
  61893424800, #    local_end 1962-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61893446400, #    utc_start 1962-04-29 08:00:00 (Sun)
  61909167600, #      utc_end 1962-10-28 07:00:00 (Sun)
  61893428400, #  local_start 1962-04-29 03:00:00 (Sun)
  61909149600, #    local_end 1962-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61909167600, #    utc_start 1962-10-28 07:00:00 (Sun)
  61924896000, #      utc_end 1963-04-28 08:00:00 (Sun)
  61909146000, #  local_start 1962-10-28 01:00:00 (Sun)
  61924874400, #    local_end 1963-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61924896000, #    utc_start 1963-04-28 08:00:00 (Sun)
  61940617200, #      utc_end 1963-10-27 07:00:00 (Sun)
  61924878000, #  local_start 1963-04-28 03:00:00 (Sun)
  61940599200, #    local_end 1963-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61940617200, #    utc_start 1963-10-27 07:00:00 (Sun)
  61956345600, #      utc_end 1964-04-26 08:00:00 (Sun)
  61940595600, #  local_start 1963-10-27 01:00:00 (Sun)
  61956324000, #    local_end 1964-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61956345600, #    utc_start 1964-04-26 08:00:00 (Sun)
  61972066800, #      utc_end 1964-10-25 07:00:00 (Sun)
  61956327600, #  local_start 1964-04-26 03:00:00 (Sun)
  61972048800, #    local_end 1964-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61972066800, #    utc_start 1964-10-25 07:00:00 (Sun)
  61987795200, #      utc_end 1965-04-25 08:00:00 (Sun)
  61972045200, #  local_start 1964-10-25 01:00:00 (Sun)
  61987773600, #    local_end 1965-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61987795200, #    utc_start 1965-04-25 08:00:00 (Sun)
  62035570800, #      utc_end 1966-10-30 07:00:00 (Sun)
  61987777200, #  local_start 1965-04-25 03:00:00 (Sun)
  62035552800, #    local_end 1966-10-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62035570800, #    utc_start 1966-10-30 07:00:00 (Sun)
  62051299200, #      utc_end 1967-04-30 08:00:00 (Sun)
  62035549200, #  local_start 1966-10-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62051299200, #    utc_start 1967-04-30 08:00:00 (Sun)
  62067020400, #      utc_end 1967-10-29 07:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62067020400, #    utc_start 1967-10-29 07:00:00 (Sun)
  62082748800, #      utc_end 1968-04-28 08:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62082748800, #    utc_start 1968-04-28 08:00:00 (Sun)
  62098470000, #      utc_end 1968-10-27 07:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62098470000, #    utc_start 1968-10-27 07:00:00 (Sun)
  62114198400, #      utc_end 1969-04-27 08:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62114198400, #    utc_start 1969-04-27 08:00:00 (Sun)
  62129919600, #      utc_end 1969-10-26 07:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62129919600, #    utc_start 1969-10-26 07:00:00 (Sun)
  62145648000, #      utc_end 1970-04-26 08:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62145648000, #    utc_start 1970-04-26 08:00:00 (Sun)
  62161369200, #      utc_end 1970-10-25 07:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62161369200, #    utc_start 1970-10-25 07:00:00 (Sun)
  62177097600, #      utc_end 1971-04-25 08:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62177097600, #    utc_start 1971-04-25 08:00:00 (Sun)
  62193423600, #      utc_end 1971-10-31 07:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62193423600, #    utc_start 1971-10-31 07:00:00 (Sun)
  62209152000, #      utc_end 1972-04-30 08:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62209152000, #    utc_start 1972-04-30 08:00:00 (Sun)
  62224873200, #      utc_end 1972-10-29 07:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62224873200, #    utc_start 1972-10-29 07:00:00 (Sun)
  62240601600, #      utc_end 1973-04-29 08:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62240601600, #    utc_start 1973-04-29 08:00:00 (Sun)
  62256322800, #      utc_end 1973-10-28 07:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62256322800, #    utc_start 1973-10-28 07:00:00 (Sun)
  62262374400, #      utc_end 1974-01-06 08:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62262374400, #    utc_start 1974-01-06 08:00:00 (Sun)
  62287772400, #      utc_end 1974-10-27 07:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62287772400, #    utc_start 1974-10-27 07:00:00 (Sun)
  62298057600, #      utc_end 1975-02-23 08:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62298057600, #    utc_start 1975-02-23 08:00:00 (Sun)
  62319222000, #      utc_end 1975-10-26 07:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62319222000, #    utc_start 1975-10-26 07:00:00 (Sun)
  62334950400, #      utc_end 1976-04-25 08:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62334950400, #    utc_start 1976-04-25 08:00:00 (Sun)
  62351276400, #      utc_end 1976-10-31 07:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62351276400, #    utc_start 1976-10-31 07:00:00 (Sun)
  62366400000, #      utc_end 1977-04-24 08:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62366400000, #    utc_start 1977-04-24 08:00:00 (Sun)
  62382726000, #      utc_end 1977-10-30 07:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62382726000, #    utc_start 1977-10-30 07:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  62382708000, #  local_start 1977-10-30 02:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279626400, #  local_start 2006-04-02 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63309283200, #      utc_end 2007-03-11 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63309283200, #    utc_start 2007-03-11 08:00:00 (Sun)
  63329842800, #      utc_end 2007-11-04 07:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329842800, #    utc_start 2007-11-04 07:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329824800, #  local_start 2007-11-04 02:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {47}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732984,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732984,
      'utc_rd_secs' => 7200,
      'utc_year' => 2008
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732984,
      'local_rd_secs' => 25200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732984,
      'utc_rd_secs' => 25200,
      'utc_year' => 2008
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_INDIANA_PETERSBURG

    $main::fatpacked{"DateTime/TimeZone/America/Indiana/Tell_City.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_INDIANA_TELL_CITY';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Indiana::Tell_City;
  $DateTime::TimeZone::America::Indiana::Tell_City::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Indiana::Tell_City::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418036000, #      utc_end 1883-11-18 18:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418015177, #    local_end 1883-11-18 12:12:57 (Sun)
  -20823,
  0,
  'LMT',
      ],
      [
  59418036000, #    utc_start 1883-11-18 18:00:00 (Sun)
  60502406400, #      utc_end 1918-03-31 08:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60502406400, #    utc_start 1918-03-31 08:00:00 (Sun)
  60520546800, #      utc_end 1918-10-27 07:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60520546800, #    utc_start 1918-10-27 07:00:00 (Sun)
  60533856000, #      utc_end 1919-03-30 08:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60533856000, #    utc_start 1919-03-30 08:00:00 (Sun)
  60551996400, #      utc_end 1919-10-26 07:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60551996400, #    utc_start 1919-10-26 07:00:00 (Sun)
  61255468800, #      utc_end 1942-02-09 08:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61255468800, #    utc_start 1942-02-09 08:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366269600, #    local_end 1945-08-14 18:00:00 (Tue)
  -18000,
  1,
  'CWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370290800, #      utc_end 1945-09-30 07:00:00 (Sun)
  61366269600, #  local_start 1945-08-14 18:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CPT',
      ],
      [
  61370290800, #    utc_start 1945-09-30 07:00:00 (Sun)
  61378322400, #      utc_end 1946-01-01 06:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -21600,
  0,
  'CST',
      ],
      [
  61378322400, #    utc_start 1946-01-01 06:00:00 (Tue)
  61388438400, #      utc_end 1946-04-28 08:00:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61388416800, #    local_end 1946-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61388438400, #    utc_start 1946-04-28 08:00:00 (Sun)
  61401740400, #      utc_end 1946-09-29 07:00:00 (Sun)
  61388420400, #  local_start 1946-04-28 03:00:00 (Sun)
  61401722400, #    local_end 1946-09-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61401740400, #    utc_start 1946-09-29 07:00:00 (Sun)
  61609190400, #      utc_end 1953-04-26 08:00:00 (Sun)
  61401718800, #  local_start 1946-09-29 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61609190400, #    utc_start 1953-04-26 08:00:00 (Sun)
  61622492400, #      utc_end 1953-09-27 07:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61622492400, #    utc_start 1953-09-27 07:00:00 (Sun)
  61640640000, #      utc_end 1954-04-25 08:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61640640000, #    utc_start 1954-04-25 08:00:00 (Sun)
  61653942000, #      utc_end 1954-09-26 07:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61653942000, #    utc_start 1954-09-26 07:00:00 (Sun)
  61672687200, #      utc_end 1955-05-01 06:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672665600, #    local_end 1955-05-01 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61672687200, #    utc_start 1955-05-01 06:00:00 (Sun)
  61685391600, #      utc_end 1955-09-25 07:00:00 (Sun)
  61672669200, #  local_start 1955-05-01 01:00:00 (Sun)
  61685373600, #    local_end 1955-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61685391600, #    utc_start 1955-09-25 07:00:00 (Sun)
  61704144000, #      utc_end 1956-04-29 08:00:00 (Sun)
  61685370000, #  local_start 1955-09-25 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61704144000, #    utc_start 1956-04-29 08:00:00 (Sun)
  61717446000, #      utc_end 1956-09-30 07:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61717428000, #    local_end 1956-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61717446000, #    utc_start 1956-09-30 07:00:00 (Sun)
  61735593600, #      utc_end 1957-04-28 08:00:00 (Sun)
  61717424400, #  local_start 1956-09-30 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61735593600, #    utc_start 1957-04-28 08:00:00 (Sun)
  61748895600, #      utc_end 1957-09-29 07:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61748895600, #    utc_start 1957-09-29 07:00:00 (Sun)
  61767043200, #      utc_end 1958-04-27 08:00:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61767043200, #    utc_start 1958-04-27 08:00:00 (Sun)
  61780345200, #      utc_end 1958-09-28 07:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61780327200, #    local_end 1958-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61780345200, #    utc_start 1958-09-28 07:00:00 (Sun)
  61798492800, #      utc_end 1959-04-26 08:00:00 (Sun)
  61780323600, #  local_start 1958-09-28 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61798492800, #    utc_start 1959-04-26 08:00:00 (Sun)
  61811794800, #      utc_end 1959-09-27 07:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61811776800, #    local_end 1959-09-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61811794800, #    utc_start 1959-09-27 07:00:00 (Sun)
  61829942400, #      utc_end 1960-04-24 08:00:00 (Sun)
  61811773200, #  local_start 1959-09-27 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61829942400, #    utc_start 1960-04-24 08:00:00 (Sun)
  61846268400, #      utc_end 1960-10-30 07:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61846250400, #    local_end 1960-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61846268400, #    utc_start 1960-10-30 07:00:00 (Sun)
  61861996800, #      utc_end 1961-04-30 08:00:00 (Sun)
  61846246800, #  local_start 1960-10-30 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61861996800, #    utc_start 1961-04-30 08:00:00 (Sun)
  61874694000, #      utc_end 1961-09-24 07:00:00 (Sun)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  61874676000, #    local_end 1961-09-24 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61874694000, #    utc_start 1961-09-24 07:00:00 (Sun)
  61893446400, #      utc_end 1962-04-29 08:00:00 (Sun)
  61874672400, #  local_start 1961-09-24 01:00:00 (Sun)
  61893424800, #    local_end 1962-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61893446400, #    utc_start 1962-04-29 08:00:00 (Sun)
  61909167600, #      utc_end 1962-10-28 07:00:00 (Sun)
  61893428400, #  local_start 1962-04-29 03:00:00 (Sun)
  61909149600, #    local_end 1962-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61909167600, #    utc_start 1962-10-28 07:00:00 (Sun)
  61924896000, #      utc_end 1963-04-28 08:00:00 (Sun)
  61909146000, #  local_start 1962-10-28 01:00:00 (Sun)
  61924874400, #    local_end 1963-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61924896000, #    utc_start 1963-04-28 08:00:00 (Sun)
  61940617200, #      utc_end 1963-10-27 07:00:00 (Sun)
  61924878000, #  local_start 1963-04-28 03:00:00 (Sun)
  61940599200, #    local_end 1963-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61940617200, #    utc_start 1963-10-27 07:00:00 (Sun)
  61956345600, #      utc_end 1964-04-26 08:00:00 (Sun)
  61940595600, #  local_start 1963-10-27 01:00:00 (Sun)
  61956324000, #    local_end 1964-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61956345600, #    utc_start 1964-04-26 08:00:00 (Sun)
  62104165200, #      utc_end 1969-01-01 05:00:00 (Wed)
  61956327600, #  local_start 1964-04-26 03:00:00 (Sun)
  62104147200, #    local_end 1969-01-01 00:00:00 (Wed)
  -18000,
  0,
  'EST',
      ],
      [
  62104165200, #    utc_start 1969-01-01 05:00:00 (Wed)
  62114194800, #      utc_end 1969-04-27 07:00:00 (Sun)
  62104147200, #  local_start 1969-01-01 00:00:00 (Wed)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62114194800, #    utc_start 1969-04-27 07:00:00 (Sun)
  62129916000, #      utc_end 1969-10-26 06:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62129916000, #    utc_start 1969-10-26 06:00:00 (Sun)
  62145644400, #      utc_end 1970-04-26 07:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62145644400, #    utc_start 1970-04-26 07:00:00 (Sun)
  62161365600, #      utc_end 1970-10-25 06:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62161365600, #    utc_start 1970-10-25 06:00:00 (Sun)
  62167237200, #      utc_end 1971-01-01 05:00:00 (Fri)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62167219200, #    local_end 1971-01-01 00:00:00 (Fri)
  -18000,
  0,
  'EST',
      ],
      [
  62167237200, #    utc_start 1971-01-01 05:00:00 (Fri)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  62167219200, #  local_start 1971-01-01 00:00:00 (Fri)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279626400, #  local_start 2006-04-02 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63309283200, #      utc_end 2007-03-11 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63309283200, #    utc_start 2007-03-11 08:00:00 (Sun)
  63329842800, #      utc_end 2007-11-04 07:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329842800, #    utc_start 2007-11-04 07:00:00 (Sun)
  63340732800, #      utc_end 2008-03-09 08:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63340732800, #    utc_start 2008-03-09 08:00:00 (Sun)
  63361292400, #      utc_end 2008-11-02 07:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63361292400, #    utc_start 2008-11-02 07:00:00 (Sun)
  63372182400, #      utc_end 2009-03-08 08:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63372182400, #    utc_start 2009-03-08 08:00:00 (Sun)
  63392742000, #      utc_end 2009-11-01 07:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63392742000, #    utc_start 2009-11-01 07:00:00 (Sun)
  63404236800, #      utc_end 2010-03-14 08:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63404236800, #    utc_start 2010-03-14 08:00:00 (Sun)
  63424796400, #      utc_end 2010-11-07 07:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424796400, #    utc_start 2010-11-07 07:00:00 (Sun)
  63435686400, #      utc_end 2011-03-13 08:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63435686400, #    utc_start 2011-03-13 08:00:00 (Sun)
  63456246000, #      utc_end 2011-11-06 07:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63456246000, #    utc_start 2011-11-06 07:00:00 (Sun)
  63467136000, #      utc_end 2012-03-11 08:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63467136000, #    utc_start 2012-03-11 08:00:00 (Sun)
  63487695600, #      utc_end 2012-11-04 07:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487695600, #    utc_start 2012-11-04 07:00:00 (Sun)
  63498585600, #      utc_end 2013-03-10 08:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63498585600, #    utc_start 2013-03-10 08:00:00 (Sun)
  63519145200, #      utc_end 2013-11-03 07:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63519145200, #    utc_start 2013-11-03 07:00:00 (Sun)
  63530035200, #      utc_end 2014-03-09 08:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63530035200, #    utc_start 2014-03-09 08:00:00 (Sun)
  63550594800, #      utc_end 2014-11-02 07:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63550594800, #    utc_start 2014-11-02 07:00:00 (Sun)
  63561484800, #      utc_end 2015-03-08 08:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63561484800, #    utc_start 2015-03-08 08:00:00 (Sun)
  63582044400, #      utc_end 2015-11-01 07:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63582044400, #    utc_start 2015-11-01 07:00:00 (Sun)
  63593539200, #      utc_end 2016-03-13 08:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63593539200, #    utc_start 2016-03-13 08:00:00 (Sun)
  63614098800, #      utc_end 2016-11-06 07:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63614098800, #    utc_start 2016-11-06 07:00:00 (Sun)
  63624988800, #      utc_end 2017-03-12 08:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63624988800, #    utc_start 2017-03-12 08:00:00 (Sun)
  63645548400, #      utc_end 2017-11-05 07:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63645548400, #    utc_start 2017-11-05 07:00:00 (Sun)
  63656438400, #      utc_end 2018-03-11 08:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63656438400, #    utc_start 2018-03-11 08:00:00 (Sun)
  63676998000, #      utc_end 2018-11-04 07:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676998000, #    utc_start 2018-11-04 07:00:00 (Sun)
  63687888000, #      utc_end 2019-03-10 08:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63687888000, #    utc_start 2019-03-10 08:00:00 (Sun)
  63708447600, #      utc_end 2019-11-03 07:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63708447600, #    utc_start 2019-11-03 07:00:00 (Sun)
  63719337600, #      utc_end 2020-03-08 08:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63719337600, #    utc_start 2020-03-08 08:00:00 (Sun)
  63739897200, #      utc_end 2020-11-01 07:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739897200, #    utc_start 2020-11-01 07:00:00 (Sun)
  63751392000, #      utc_end 2021-03-14 08:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63751392000, #    utc_start 2021-03-14 08:00:00 (Sun)
  63771951600, #      utc_end 2021-11-07 07:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771951600, #    utc_start 2021-11-07 07:00:00 (Sun)
  63782841600, #      utc_end 2022-03-13 08:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63782841600, #    utc_start 2022-03-13 08:00:00 (Sun)
  63803401200, #      utc_end 2022-11-06 07:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63803401200, #    utc_start 2022-11-06 07:00:00 (Sun)
  63814291200, #      utc_end 2023-03-12 08:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63814291200, #    utc_start 2023-03-12 08:00:00 (Sun)
  63834850800, #      utc_end 2023-11-05 07:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834850800, #    utc_start 2023-11-05 07:00:00 (Sun)
  63845740800, #      utc_end 2024-03-10 08:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63845740800, #    utc_start 2024-03-10 08:00:00 (Sun)
  63866300400, #      utc_end 2024-11-03 07:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63866300400, #    utc_start 2024-11-03 07:00:00 (Sun)
  63877190400, #      utc_end 2025-03-09 08:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63877190400, #    utc_start 2025-03-09 08:00:00 (Sun)
  63897750000, #      utc_end 2025-11-02 07:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897750000, #    utc_start 2025-11-02 07:00:00 (Sun)
  63908640000, #      utc_end 2026-03-08 08:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63908640000, #    utc_start 2026-03-08 08:00:00 (Sun)
  63929199600, #      utc_end 2026-11-01 07:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63929199600, #    utc_start 2026-11-01 07:00:00 (Sun)
  63940694400, #      utc_end 2027-03-14 08:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63940694400, #    utc_start 2027-03-14 08:00:00 (Sun)
  63961254000, #      utc_end 2027-11-07 07:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {40}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732403,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732403,
      'utc_rd_secs' => 7200,
      'utc_year' => 2007
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732403,
      'local_rd_secs' => 25200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732403,
      'utc_rd_secs' => 25200,
      'utc_year' => 2007
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_INDIANA_TELL_CITY

    $main::fatpacked{"DateTime/TimeZone/America/Indiana/Vevay.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_INDIANA_VEVAY';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Indiana::Vevay;
  $DateTime::TimeZone::America::Indiana::Vevay::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Indiana::Vevay::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418036000, #      utc_end 1883-11-18 18:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418015584, #    local_end 1883-11-18 12:19:44 (Sun)
  -20416,
  0,
  'LMT',
      ],
      [
  59418036000, #    utc_start 1883-11-18 18:00:00 (Sun)
  60502406400, #      utc_end 1918-03-31 08:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60502406400, #    utc_start 1918-03-31 08:00:00 (Sun)
  60520546800, #      utc_end 1918-10-27 07:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60520546800, #    utc_start 1918-10-27 07:00:00 (Sun)
  60533856000, #      utc_end 1919-03-30 08:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60533856000, #    utc_start 1919-03-30 08:00:00 (Sun)
  60551996400, #      utc_end 1919-10-26 07:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60551996400, #    utc_start 1919-10-26 07:00:00 (Sun)
  61255468800, #      utc_end 1942-02-09 08:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61255468800, #    utc_start 1942-02-09 08:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366269600, #    local_end 1945-08-14 18:00:00 (Tue)
  -18000,
  1,
  'CWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370290800, #      utc_end 1945-09-30 07:00:00 (Sun)
  61366269600, #  local_start 1945-08-14 18:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CPT',
      ],
      [
  61370290800, #    utc_start 1945-09-30 07:00:00 (Sun)
  61640640000, #      utc_end 1954-04-25 08:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61640640000, #    utc_start 1954-04-25 08:00:00 (Sun)
  62104165200, #      utc_end 1969-01-01 05:00:00 (Wed)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  62104147200, #    local_end 1969-01-01 00:00:00 (Wed)
  -18000,
  0,
  'EST',
      ],
      [
  62104165200, #    utc_start 1969-01-01 05:00:00 (Wed)
  62114194800, #      utc_end 1969-04-27 07:00:00 (Sun)
  62104147200, #  local_start 1969-01-01 00:00:00 (Wed)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62114194800, #    utc_start 1969-04-27 07:00:00 (Sun)
  62129916000, #      utc_end 1969-10-26 06:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62129916000, #    utc_start 1969-10-26 06:00:00 (Sun)
  62145644400, #      utc_end 1970-04-26 07:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62145644400, #    utc_start 1970-04-26 07:00:00 (Sun)
  62161365600, #      utc_end 1970-10-25 06:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62161365600, #    utc_start 1970-10-25 06:00:00 (Sun)
  62177094000, #      utc_end 1971-04-25 07:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62177094000, #    utc_start 1971-04-25 07:00:00 (Sun)
  62193420000, #      utc_end 1971-10-31 06:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62193420000, #    utc_start 1971-10-31 06:00:00 (Sun)
  62209148400, #      utc_end 1972-04-30 07:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62209148400, #    utc_start 1972-04-30 07:00:00 (Sun)
  62224869600, #      utc_end 1972-10-29 06:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62224869600, #    utc_start 1972-10-29 06:00:00 (Sun)
  62230395600, #      utc_end 1973-01-01 05:00:00 (Mon)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62230377600, #    local_end 1973-01-01 00:00:00 (Mon)
  -18000,
  0,
  'EST',
      ],
      [
  62230395600, #    utc_start 1973-01-01 05:00:00 (Mon)
  63271774800, #      utc_end 2006-01-01 05:00:00 (Sun)
  62230377600, #  local_start 1973-01-01 00:00:00 (Mon)
  63271756800, #    local_end 2006-01-01 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63271774800, #    utc_start 2006-01-01 05:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  63271756800, #  local_start 2006-01-01 00:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297784800, #      utc_end 2006-10-29 06:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63297784800, #    utc_start 2006-10-29 06:00:00 (Sun)
  63309279600, #      utc_end 2007-03-11 07:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63309279600, #    utc_start 2007-03-11 07:00:00 (Sun)
  63329839200, #      utc_end 2007-11-04 06:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63329839200, #    utc_start 2007-11-04 06:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732312,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732312,
      'utc_rd_secs' => 0,
      'utc_year' => 2007
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732312,
      'local_rd_secs' => 18000,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732312,
      'utc_rd_secs' => 18000,
      'utc_year' => 2007
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_INDIANA_VEVAY

    $main::fatpacked{"DateTime/TimeZone/America/Indiana/Vincennes.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_INDIANA_VINCENNES';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Indiana::Vincennes;
  $DateTime::TimeZone::America::Indiana::Vincennes::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Indiana::Vincennes::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418036000, #      utc_end 1883-11-18 18:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418014993, #    local_end 1883-11-18 12:09:53 (Sun)
  -21007,
  0,
  'LMT',
      ],
      [
  59418036000, #    utc_start 1883-11-18 18:00:00 (Sun)
  60502406400, #      utc_end 1918-03-31 08:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60502406400, #    utc_start 1918-03-31 08:00:00 (Sun)
  60520546800, #      utc_end 1918-10-27 07:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60520546800, #    utc_start 1918-10-27 07:00:00 (Sun)
  60533856000, #      utc_end 1919-03-30 08:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60533856000, #    utc_start 1919-03-30 08:00:00 (Sun)
  60551996400, #      utc_end 1919-10-26 07:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60551996400, #    utc_start 1919-10-26 07:00:00 (Sun)
  61255468800, #      utc_end 1942-02-09 08:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61255468800, #    utc_start 1942-02-09 08:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366269600, #    local_end 1945-08-14 18:00:00 (Tue)
  -18000,
  1,
  'CWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370290800, #      utc_end 1945-09-30 07:00:00 (Sun)
  61366269600, #  local_start 1945-08-14 18:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CPT',
      ],
      [
  61370290800, #    utc_start 1945-09-30 07:00:00 (Sun)
  61378322400, #      utc_end 1946-01-01 06:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -21600,
  0,
  'CST',
      ],
      [
  61378322400, #    utc_start 1946-01-01 06:00:00 (Tue)
  61388438400, #      utc_end 1946-04-28 08:00:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61388416800, #    local_end 1946-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61388438400, #    utc_start 1946-04-28 08:00:00 (Sun)
  61401740400, #      utc_end 1946-09-29 07:00:00 (Sun)
  61388420400, #  local_start 1946-04-28 03:00:00 (Sun)
  61401722400, #    local_end 1946-09-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61401740400, #    utc_start 1946-09-29 07:00:00 (Sun)
  61609190400, #      utc_end 1953-04-26 08:00:00 (Sun)
  61401718800, #  local_start 1946-09-29 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61609190400, #    utc_start 1953-04-26 08:00:00 (Sun)
  61622492400, #      utc_end 1953-09-27 07:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61622492400, #    utc_start 1953-09-27 07:00:00 (Sun)
  61640640000, #      utc_end 1954-04-25 08:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61640640000, #    utc_start 1954-04-25 08:00:00 (Sun)
  61653942000, #      utc_end 1954-09-26 07:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61653942000, #    utc_start 1954-09-26 07:00:00 (Sun)
  61672687200, #      utc_end 1955-05-01 06:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672665600, #    local_end 1955-05-01 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61672687200, #    utc_start 1955-05-01 06:00:00 (Sun)
  61685391600, #      utc_end 1955-09-25 07:00:00 (Sun)
  61672669200, #  local_start 1955-05-01 01:00:00 (Sun)
  61685373600, #    local_end 1955-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61685391600, #    utc_start 1955-09-25 07:00:00 (Sun)
  61704144000, #      utc_end 1956-04-29 08:00:00 (Sun)
  61685370000, #  local_start 1955-09-25 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61704144000, #    utc_start 1956-04-29 08:00:00 (Sun)
  61717446000, #      utc_end 1956-09-30 07:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61717428000, #    local_end 1956-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61717446000, #    utc_start 1956-09-30 07:00:00 (Sun)
  61735593600, #      utc_end 1957-04-28 08:00:00 (Sun)
  61717424400, #  local_start 1956-09-30 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61735593600, #    utc_start 1957-04-28 08:00:00 (Sun)
  61748895600, #      utc_end 1957-09-29 07:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61748895600, #    utc_start 1957-09-29 07:00:00 (Sun)
  61767043200, #      utc_end 1958-04-27 08:00:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61767043200, #    utc_start 1958-04-27 08:00:00 (Sun)
  61780345200, #      utc_end 1958-09-28 07:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61780327200, #    local_end 1958-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61780345200, #    utc_start 1958-09-28 07:00:00 (Sun)
  61798492800, #      utc_end 1959-04-26 08:00:00 (Sun)
  61780323600, #  local_start 1958-09-28 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61798492800, #    utc_start 1959-04-26 08:00:00 (Sun)
  61811794800, #      utc_end 1959-09-27 07:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61811776800, #    local_end 1959-09-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61811794800, #    utc_start 1959-09-27 07:00:00 (Sun)
  61829942400, #      utc_end 1960-04-24 08:00:00 (Sun)
  61811773200, #  local_start 1959-09-27 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61829942400, #    utc_start 1960-04-24 08:00:00 (Sun)
  61846268400, #      utc_end 1960-10-30 07:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61846250400, #    local_end 1960-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61846268400, #    utc_start 1960-10-30 07:00:00 (Sun)
  61861996800, #      utc_end 1961-04-30 08:00:00 (Sun)
  61846246800, #  local_start 1960-10-30 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61861996800, #    utc_start 1961-04-30 08:00:00 (Sun)
  61874694000, #      utc_end 1961-09-24 07:00:00 (Sun)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  61874676000, #    local_end 1961-09-24 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61874694000, #    utc_start 1961-09-24 07:00:00 (Sun)
  61893446400, #      utc_end 1962-04-29 08:00:00 (Sun)
  61874672400, #  local_start 1961-09-24 01:00:00 (Sun)
  61893424800, #    local_end 1962-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61893446400, #    utc_start 1962-04-29 08:00:00 (Sun)
  61909167600, #      utc_end 1962-10-28 07:00:00 (Sun)
  61893428400, #  local_start 1962-04-29 03:00:00 (Sun)
  61909149600, #    local_end 1962-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61909167600, #    utc_start 1962-10-28 07:00:00 (Sun)
  61924896000, #      utc_end 1963-04-28 08:00:00 (Sun)
  61909146000, #  local_start 1962-10-28 01:00:00 (Sun)
  61924874400, #    local_end 1963-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61924896000, #    utc_start 1963-04-28 08:00:00 (Sun)
  61940617200, #      utc_end 1963-10-27 07:00:00 (Sun)
  61924878000, #  local_start 1963-04-28 03:00:00 (Sun)
  61940599200, #    local_end 1963-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61940617200, #    utc_start 1963-10-27 07:00:00 (Sun)
  61956345600, #      utc_end 1964-04-26 08:00:00 (Sun)
  61940595600, #  local_start 1963-10-27 01:00:00 (Sun)
  61956324000, #    local_end 1964-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61956345600, #    utc_start 1964-04-26 08:00:00 (Sun)
  62104165200, #      utc_end 1969-01-01 05:00:00 (Wed)
  61956327600, #  local_start 1964-04-26 03:00:00 (Sun)
  62104147200, #    local_end 1969-01-01 00:00:00 (Wed)
  -18000,
  0,
  'EST',
      ],
      [
  62104165200, #    utc_start 1969-01-01 05:00:00 (Wed)
  62114194800, #      utc_end 1969-04-27 07:00:00 (Sun)
  62104147200, #  local_start 1969-01-01 00:00:00 (Wed)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62114194800, #    utc_start 1969-04-27 07:00:00 (Sun)
  62129916000, #      utc_end 1969-10-26 06:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62129916000, #    utc_start 1969-10-26 06:00:00 (Sun)
  62145644400, #      utc_end 1970-04-26 07:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62145644400, #    utc_start 1970-04-26 07:00:00 (Sun)
  62161365600, #      utc_end 1970-10-25 06:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62161365600, #    utc_start 1970-10-25 06:00:00 (Sun)
  62167237200, #      utc_end 1971-01-01 05:00:00 (Fri)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62167219200, #    local_end 1971-01-01 00:00:00 (Fri)
  -18000,
  0,
  'EST',
      ],
      [
  62167237200, #    utc_start 1971-01-01 05:00:00 (Fri)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  62167219200, #  local_start 1971-01-01 00:00:00 (Fri)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279626400, #  local_start 2006-04-02 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63309283200, #      utc_end 2007-03-11 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63309283200, #    utc_start 2007-03-11 08:00:00 (Sun)
  63329842800, #      utc_end 2007-11-04 07:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329842800, #    utc_start 2007-11-04 07:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329824800, #  local_start 2007-11-04 02:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {40}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732984,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732984,
      'utc_rd_secs' => 7200,
      'utc_year' => 2008
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732984,
      'local_rd_secs' => 25200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732984,
      'utc_rd_secs' => 25200,
      'utc_year' => 2008
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_INDIANA_VINCENNES

    $main::fatpacked{"DateTime/TimeZone/America/Indiana/Winamac.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_INDIANA_WINAMAC';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Indiana::Winamac;
  $DateTime::TimeZone::America::Indiana::Winamac::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Indiana::Winamac::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418036000, #      utc_end 1883-11-18 18:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418015215, #    local_end 1883-11-18 12:13:35 (Sun)
  -20785,
  0,
  'LMT',
      ],
      [
  59418036000, #    utc_start 1883-11-18 18:00:00 (Sun)
  60502406400, #      utc_end 1918-03-31 08:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60502406400, #    utc_start 1918-03-31 08:00:00 (Sun)
  60520546800, #      utc_end 1918-10-27 07:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60520546800, #    utc_start 1918-10-27 07:00:00 (Sun)
  60533856000, #      utc_end 1919-03-30 08:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60533856000, #    utc_start 1919-03-30 08:00:00 (Sun)
  60551996400, #      utc_end 1919-10-26 07:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60551996400, #    utc_start 1919-10-26 07:00:00 (Sun)
  61255468800, #      utc_end 1942-02-09 08:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61255468800, #    utc_start 1942-02-09 08:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366269600, #    local_end 1945-08-14 18:00:00 (Tue)
  -18000,
  1,
  'CWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370290800, #      utc_end 1945-09-30 07:00:00 (Sun)
  61366269600, #  local_start 1945-08-14 18:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CPT',
      ],
      [
  61370290800, #    utc_start 1945-09-30 07:00:00 (Sun)
  61378322400, #      utc_end 1946-01-01 06:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -21600,
  0,
  'CST',
      ],
      [
  61378322400, #    utc_start 1946-01-01 06:00:00 (Tue)
  61388438400, #      utc_end 1946-04-28 08:00:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61388416800, #    local_end 1946-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61388438400, #    utc_start 1946-04-28 08:00:00 (Sun)
  61401740400, #      utc_end 1946-09-29 07:00:00 (Sun)
  61388420400, #  local_start 1946-04-28 03:00:00 (Sun)
  61401722400, #    local_end 1946-09-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61401740400, #    utc_start 1946-09-29 07:00:00 (Sun)
  61419888000, #      utc_end 1947-04-27 08:00:00 (Sun)
  61401718800, #  local_start 1946-09-29 01:00:00 (Sun)
  61419866400, #    local_end 1947-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61419888000, #    utc_start 1947-04-27 08:00:00 (Sun)
  61433190000, #      utc_end 1947-09-28 07:00:00 (Sun)
  61419870000, #  local_start 1947-04-27 03:00:00 (Sun)
  61433172000, #    local_end 1947-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61433190000, #    utc_start 1947-09-28 07:00:00 (Sun)
  61451337600, #      utc_end 1948-04-25 08:00:00 (Sun)
  61433168400, #  local_start 1947-09-28 01:00:00 (Sun)
  61451316000, #    local_end 1948-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61451337600, #    utc_start 1948-04-25 08:00:00 (Sun)
  61464639600, #      utc_end 1948-09-26 07:00:00 (Sun)
  61451319600, #  local_start 1948-04-25 03:00:00 (Sun)
  61464621600, #    local_end 1948-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61464639600, #    utc_start 1948-09-26 07:00:00 (Sun)
  61482787200, #      utc_end 1949-04-24 08:00:00 (Sun)
  61464618000, #  local_start 1948-09-26 01:00:00 (Sun)
  61482765600, #    local_end 1949-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61482787200, #    utc_start 1949-04-24 08:00:00 (Sun)
  61496089200, #      utc_end 1949-09-25 07:00:00 (Sun)
  61482769200, #  local_start 1949-04-24 03:00:00 (Sun)
  61496071200, #    local_end 1949-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61496089200, #    utc_start 1949-09-25 07:00:00 (Sun)
  61514841600, #      utc_end 1950-04-30 08:00:00 (Sun)
  61496067600, #  local_start 1949-09-25 01:00:00 (Sun)
  61514820000, #    local_end 1950-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61514841600, #    utc_start 1950-04-30 08:00:00 (Sun)
  61527538800, #      utc_end 1950-09-24 07:00:00 (Sun)
  61514823600, #  local_start 1950-04-30 03:00:00 (Sun)
  61527520800, #    local_end 1950-09-24 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61527538800, #    utc_start 1950-09-24 07:00:00 (Sun)
  61546291200, #      utc_end 1951-04-29 08:00:00 (Sun)
  61527517200, #  local_start 1950-09-24 01:00:00 (Sun)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61546291200, #    utc_start 1951-04-29 08:00:00 (Sun)
  61559593200, #      utc_end 1951-09-30 07:00:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61559593200, #    utc_start 1951-09-30 07:00:00 (Sun)
  61577740800, #      utc_end 1952-04-27 08:00:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61577740800, #    utc_start 1952-04-27 08:00:00 (Sun)
  61591042800, #      utc_end 1952-09-28 07:00:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61591042800, #    utc_start 1952-09-28 07:00:00 (Sun)
  61609190400, #      utc_end 1953-04-26 08:00:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61609190400, #    utc_start 1953-04-26 08:00:00 (Sun)
  61622492400, #      utc_end 1953-09-27 07:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61622492400, #    utc_start 1953-09-27 07:00:00 (Sun)
  61640640000, #      utc_end 1954-04-25 08:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61640640000, #    utc_start 1954-04-25 08:00:00 (Sun)
  61653942000, #      utc_end 1954-09-26 07:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61653942000, #    utc_start 1954-09-26 07:00:00 (Sun)
  61672089600, #      utc_end 1955-04-24 08:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61672089600, #    utc_start 1955-04-24 08:00:00 (Sun)
  61688415600, #      utc_end 1955-10-30 07:00:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61688397600, #    local_end 1955-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61688415600, #    utc_start 1955-10-30 07:00:00 (Sun)
  61704144000, #      utc_end 1956-04-29 08:00:00 (Sun)
  61688394000, #  local_start 1955-10-30 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61704144000, #    utc_start 1956-04-29 08:00:00 (Sun)
  61719865200, #      utc_end 1956-10-28 07:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61719847200, #    local_end 1956-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61719865200, #    utc_start 1956-10-28 07:00:00 (Sun)
  61735593600, #      utc_end 1957-04-28 08:00:00 (Sun)
  61719843600, #  local_start 1956-10-28 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61735593600, #    utc_start 1957-04-28 08:00:00 (Sun)
  61748895600, #      utc_end 1957-09-29 07:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61748895600, #    utc_start 1957-09-29 07:00:00 (Sun)
  61767043200, #      utc_end 1958-04-27 08:00:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61767043200, #    utc_start 1958-04-27 08:00:00 (Sun)
  61780345200, #      utc_end 1958-09-28 07:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61780327200, #    local_end 1958-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61780345200, #    utc_start 1958-09-28 07:00:00 (Sun)
  61798492800, #      utc_end 1959-04-26 08:00:00 (Sun)
  61780323600, #  local_start 1958-09-28 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61798492800, #    utc_start 1959-04-26 08:00:00 (Sun)
  61811794800, #      utc_end 1959-09-27 07:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61811776800, #    local_end 1959-09-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61811794800, #    utc_start 1959-09-27 07:00:00 (Sun)
  61829942400, #      utc_end 1960-04-24 08:00:00 (Sun)
  61811773200, #  local_start 1959-09-27 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61829942400, #    utc_start 1960-04-24 08:00:00 (Sun)
  61843244400, #      utc_end 1960-09-25 07:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61843226400, #    local_end 1960-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61843244400, #    utc_start 1960-09-25 07:00:00 (Sun)
  61861996800, #      utc_end 1961-04-30 08:00:00 (Sun)
  61843222800, #  local_start 1960-09-25 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61861996800, #    utc_start 1961-04-30 08:00:00 (Sun)
  62104165200, #      utc_end 1969-01-01 05:00:00 (Wed)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  62104147200, #    local_end 1969-01-01 00:00:00 (Wed)
  -18000,
  0,
  'EST',
      ],
      [
  62104165200, #    utc_start 1969-01-01 05:00:00 (Wed)
  62114194800, #      utc_end 1969-04-27 07:00:00 (Sun)
  62104147200, #  local_start 1969-01-01 00:00:00 (Wed)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62114194800, #    utc_start 1969-04-27 07:00:00 (Sun)
  62129916000, #      utc_end 1969-10-26 06:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62129916000, #    utc_start 1969-10-26 06:00:00 (Sun)
  62145644400, #      utc_end 1970-04-26 07:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62145644400, #    utc_start 1970-04-26 07:00:00 (Sun)
  62161365600, #      utc_end 1970-10-25 06:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62161365600, #    utc_start 1970-10-25 06:00:00 (Sun)
  62167237200, #      utc_end 1971-01-01 05:00:00 (Fri)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62167219200, #    local_end 1971-01-01 00:00:00 (Fri)
  -18000,
  0,
  'EST',
      ],
      [
  62167237200, #    utc_start 1971-01-01 05:00:00 (Fri)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  62167219200, #  local_start 1971-01-01 00:00:00 (Fri)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279626400, #  local_start 2006-04-02 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63309283200, #      utc_end 2007-03-11 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63309283200, #    utc_start 2007-03-11 08:00:00 (Sun)
  63329839200, #      utc_end 2007-11-04 06:00:00 (Sun)
  63309268800, #  local_start 2007-03-11 04:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63329839200, #    utc_start 2007-11-04 06:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {43}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732746,
      'local_rd_secs' => 14400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732746,
      'utc_rd_secs' => 14400,
      'utc_year' => 2008
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732746,
      'local_rd_secs' => 28800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732746,
      'utc_rd_secs' => 28800,
      'utc_year' => 2008
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_INDIANA_WINAMAC

    $main::fatpacked{"DateTime/TimeZone/America/Inuvik.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_INUVIK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Inuvik;
  $DateTime::TimeZone::America::Inuvik::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Inuvik::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  61599225600, #      utc_end 1953-01-01 00:00:00 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  61599225600, #    local_end 1953-01-01 00:00:00 (Thu)
  0,
  0,
  '-00',
      ],
      [
  61599225600, #    utc_start 1953-01-01 00:00:00 (Thu)
  61987795200, #      utc_end 1965-04-25 08:00:00 (Sun)
  61599196800, #  local_start 1952-12-31 16:00:00 (Wed)
  61987766400, #    local_end 1965-04-25 00:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61987795200, #    utc_start 1965-04-25 08:00:00 (Sun)
  62004124800, #      utc_end 1965-10-31 08:00:00 (Sun)
  61987773600, #  local_start 1965-04-25 02:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -21600,
  1,
  'PDDT',
      ],
      [
  62004124800, #    utc_start 1965-10-31 08:00:00 (Sun)
  62429911200, #      utc_end 1979-04-29 10:00:00 (Sun)
  62004096000, #  local_start 1965-10-31 00:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62429911200, #    utc_start 1979-04-29 10:00:00 (Sun)
  62451241200, #      utc_end 1980-01-01 07:00:00 (Tue)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62451216000, #    local_end 1980-01-01 00:00:00 (Tue)
  -25200,
  0,
  'MST',
      ],
      [
  62451241200, #    utc_start 1980-01-01 07:00:00 (Tue)
  62461357200, #      utc_end 1980-04-27 09:00:00 (Sun)
  62451216000, #  local_start 1980-01-01 00:00:00 (Tue)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62461357200, #    utc_start 1980-04-27 09:00:00 (Sun)
  62477078400, #      utc_end 1980-10-26 08:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62477078400, #    utc_start 1980-10-26 08:00:00 (Sun)
  62492806800, #      utc_end 1981-04-26 09:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62492806800, #    utc_start 1981-04-26 09:00:00 (Sun)
  62508528000, #      utc_end 1981-10-25 08:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62508528000, #    utc_start 1981-10-25 08:00:00 (Sun)
  62524256400, #      utc_end 1982-04-25 09:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62524256400, #    utc_start 1982-04-25 09:00:00 (Sun)
  62540582400, #      utc_end 1982-10-31 08:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62540582400, #    utc_start 1982-10-31 08:00:00 (Sun)
  62555706000, #      utc_end 1983-04-24 09:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62555706000, #    utc_start 1983-04-24 09:00:00 (Sun)
  62572032000, #      utc_end 1983-10-30 08:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62572032000, #    utc_start 1983-10-30 08:00:00 (Sun)
  62587760400, #      utc_end 1984-04-29 09:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62587760400, #    utc_start 1984-04-29 09:00:00 (Sun)
  62603481600, #      utc_end 1984-10-28 08:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62603481600, #    utc_start 1984-10-28 08:00:00 (Sun)
  62619210000, #      utc_end 1985-04-28 09:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62619210000, #    utc_start 1985-04-28 09:00:00 (Sun)
  62634931200, #      utc_end 1985-10-27 08:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62634931200, #    utc_start 1985-10-27 08:00:00 (Sun)
  62650659600, #      utc_end 1986-04-27 09:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62650659600, #    utc_start 1986-04-27 09:00:00 (Sun)
  62666380800, #      utc_end 1986-10-26 08:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62666380800, #    utc_start 1986-10-26 08:00:00 (Sun)
  62680294800, #      utc_end 1987-04-05 09:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62680294800, #    utc_start 1987-04-05 09:00:00 (Sun)
  62697830400, #      utc_end 1987-10-25 08:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62697830400, #    utc_start 1987-10-25 08:00:00 (Sun)
  62711744400, #      utc_end 1988-04-03 09:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62711744400, #    utc_start 1988-04-03 09:00:00 (Sun)
  62729884800, #      utc_end 1988-10-30 08:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62729884800, #    utc_start 1988-10-30 08:00:00 (Sun)
  62743194000, #      utc_end 1989-04-02 09:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62743194000, #    utc_start 1989-04-02 09:00:00 (Sun)
  62761334400, #      utc_end 1989-10-29 08:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62761334400, #    utc_start 1989-10-29 08:00:00 (Sun)
  62774643600, #      utc_end 1990-04-01 09:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62774643600, #    utc_start 1990-04-01 09:00:00 (Sun)
  62792784000, #      utc_end 1990-10-28 08:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62792784000, #    utc_start 1990-10-28 08:00:00 (Sun)
  62806698000, #      utc_end 1991-04-07 09:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62806698000, #    utc_start 1991-04-07 09:00:00 (Sun)
  62824233600, #      utc_end 1991-10-27 08:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62824233600, #    utc_start 1991-10-27 08:00:00 (Sun)
  62838147600, #      utc_end 1992-04-05 09:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62838147600, #    utc_start 1992-04-05 09:00:00 (Sun)
  62855683200, #      utc_end 1992-10-25 08:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62855683200, #    utc_start 1992-10-25 08:00:00 (Sun)
  62869597200, #      utc_end 1993-04-04 09:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62869597200, #    utc_start 1993-04-04 09:00:00 (Sun)
  62887737600, #      utc_end 1993-10-31 08:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62887737600, #    utc_start 1993-10-31 08:00:00 (Sun)
  62901046800, #      utc_end 1994-04-03 09:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62901046800, #    utc_start 1994-04-03 09:00:00 (Sun)
  62919187200, #      utc_end 1994-10-30 08:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62919187200, #    utc_start 1994-10-30 08:00:00 (Sun)
  62932496400, #      utc_end 1995-04-02 09:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62932496400, #    utc_start 1995-04-02 09:00:00 (Sun)
  62950636800, #      utc_end 1995-10-29 08:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62950636800, #    utc_start 1995-10-29 08:00:00 (Sun)
  62964550800, #      utc_end 1996-04-07 09:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62964550800, #    utc_start 1996-04-07 09:00:00 (Sun)
  62982086400, #      utc_end 1996-10-27 08:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62982086400, #    utc_start 1996-10-27 08:00:00 (Sun)
  62996000400, #      utc_end 1997-04-06 09:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62996000400, #    utc_start 1997-04-06 09:00:00 (Sun)
  63013536000, #      utc_end 1997-10-26 08:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63013536000, #    utc_start 1997-10-26 08:00:00 (Sun)
  63027450000, #      utc_end 1998-04-05 09:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63027450000, #    utc_start 1998-04-05 09:00:00 (Sun)
  63044985600, #      utc_end 1998-10-25 08:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63044985600, #    utc_start 1998-10-25 08:00:00 (Sun)
  63058899600, #      utc_end 1999-04-04 09:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63058899600, #    utc_start 1999-04-04 09:00:00 (Sun)
  63077040000, #      utc_end 1999-10-31 08:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63077040000, #    utc_start 1999-10-31 08:00:00 (Sun)
  63090349200, #      utc_end 2000-04-02 09:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63090349200, #    utc_start 2000-04-02 09:00:00 (Sun)
  63108489600, #      utc_end 2000-10-29 08:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63108489600, #    utc_start 2000-10-29 08:00:00 (Sun)
  63121798800, #      utc_end 2001-04-01 09:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63121798800, #    utc_start 2001-04-01 09:00:00 (Sun)
  63139939200, #      utc_end 2001-10-28 08:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63139939200, #    utc_start 2001-10-28 08:00:00 (Sun)
  63153853200, #      utc_end 2002-04-07 09:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63153853200, #    utc_start 2002-04-07 09:00:00 (Sun)
  63171388800, #      utc_end 2002-10-27 08:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63171388800, #    utc_start 2002-10-27 08:00:00 (Sun)
  63185302800, #      utc_end 2003-04-06 09:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63185302800, #    utc_start 2003-04-06 09:00:00 (Sun)
  63202838400, #      utc_end 2003-10-26 08:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63202838400, #    utc_start 2003-10-26 08:00:00 (Sun)
  63216752400, #      utc_end 2004-04-04 09:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63216752400, #    utc_start 2004-04-04 09:00:00 (Sun)
  63234892800, #      utc_end 2004-10-31 08:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63234892800, #    utc_start 2004-10-31 08:00:00 (Sun)
  63248202000, #      utc_end 2005-04-03 09:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63248202000, #    utc_start 2005-04-03 09:00:00 (Sun)
  63266342400, #      utc_end 2005-10-30 08:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63266342400, #    utc_start 2005-10-30 08:00:00 (Sun)
  63279651600, #      utc_end 2006-04-02 09:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63279651600, #    utc_start 2006-04-02 09:00:00 (Sun)
  63297792000, #      utc_end 2006-10-29 08:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63297792000, #    utc_start 2006-10-29 08:00:00 (Sun)
  63309286800, #      utc_end 2007-03-11 09:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63309286800, #    utc_start 2007-03-11 09:00:00 (Sun)
  63329846400, #      utc_end 2007-11-04 08:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63329846400, #    utc_start 2007-11-04 08:00:00 (Sun)
  63340736400, #      utc_end 2008-03-09 09:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63340736400, #    utc_start 2008-03-09 09:00:00 (Sun)
  63361296000, #      utc_end 2008-11-02 08:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63361296000, #    utc_start 2008-11-02 08:00:00 (Sun)
  63372186000, #      utc_end 2009-03-08 09:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63372186000, #    utc_start 2009-03-08 09:00:00 (Sun)
  63392745600, #      utc_end 2009-11-01 08:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63392745600, #    utc_start 2009-11-01 08:00:00 (Sun)
  63404240400, #      utc_end 2010-03-14 09:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63404240400, #    utc_start 2010-03-14 09:00:00 (Sun)
  63424800000, #      utc_end 2010-11-07 08:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63424800000, #    utc_start 2010-11-07 08:00:00 (Sun)
  63435690000, #      utc_end 2011-03-13 09:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63435690000, #    utc_start 2011-03-13 09:00:00 (Sun)
  63456249600, #      utc_end 2011-11-06 08:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63456249600, #    utc_start 2011-11-06 08:00:00 (Sun)
  63467139600, #      utc_end 2012-03-11 09:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63467139600, #    utc_start 2012-03-11 09:00:00 (Sun)
  63487699200, #      utc_end 2012-11-04 08:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63487699200, #    utc_start 2012-11-04 08:00:00 (Sun)
  63498589200, #      utc_end 2013-03-10 09:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63498589200, #    utc_start 2013-03-10 09:00:00 (Sun)
  63519148800, #      utc_end 2013-11-03 08:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63519148800, #    utc_start 2013-11-03 08:00:00 (Sun)
  63530038800, #      utc_end 2014-03-09 09:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63530038800, #    utc_start 2014-03-09 09:00:00 (Sun)
  63550598400, #      utc_end 2014-11-02 08:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63550598400, #    utc_start 2014-11-02 08:00:00 (Sun)
  63561488400, #      utc_end 2015-03-08 09:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63561488400, #    utc_start 2015-03-08 09:00:00 (Sun)
  63582048000, #      utc_end 2015-11-01 08:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63582048000, #    utc_start 2015-11-01 08:00:00 (Sun)
  63593542800, #      utc_end 2016-03-13 09:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63593542800, #    utc_start 2016-03-13 09:00:00 (Sun)
  63614102400, #      utc_end 2016-11-06 08:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63614102400, #    utc_start 2016-11-06 08:00:00 (Sun)
  63624992400, #      utc_end 2017-03-12 09:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63624992400, #    utc_start 2017-03-12 09:00:00 (Sun)
  63645552000, #      utc_end 2017-11-05 08:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63645552000, #    utc_start 2017-11-05 08:00:00 (Sun)
  63656442000, #      utc_end 2018-03-11 09:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63656442000, #    utc_start 2018-03-11 09:00:00 (Sun)
  63677001600, #      utc_end 2018-11-04 08:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63677001600, #    utc_start 2018-11-04 08:00:00 (Sun)
  63687891600, #      utc_end 2019-03-10 09:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63687891600, #    utc_start 2019-03-10 09:00:00 (Sun)
  63708451200, #      utc_end 2019-11-03 08:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63708451200, #    utc_start 2019-11-03 08:00:00 (Sun)
  63719341200, #      utc_end 2020-03-08 09:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63719341200, #    utc_start 2020-03-08 09:00:00 (Sun)
  63739900800, #      utc_end 2020-11-01 08:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63739900800, #    utc_start 2020-11-01 08:00:00 (Sun)
  63751395600, #      utc_end 2021-03-14 09:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63751395600, #    utc_start 2021-03-14 09:00:00 (Sun)
  63771955200, #      utc_end 2021-11-07 08:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63771955200, #    utc_start 2021-11-07 08:00:00 (Sun)
  63782845200, #      utc_end 2022-03-13 09:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63782845200, #    utc_start 2022-03-13 09:00:00 (Sun)
  63803404800, #      utc_end 2022-11-06 08:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63803404800, #    utc_start 2022-11-06 08:00:00 (Sun)
  63814294800, #      utc_end 2023-03-12 09:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63814294800, #    utc_start 2023-03-12 09:00:00 (Sun)
  63834854400, #      utc_end 2023-11-05 08:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63834854400, #    utc_start 2023-11-05 08:00:00 (Sun)
  63845744400, #      utc_end 2024-03-10 09:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63845744400, #    utc_start 2024-03-10 09:00:00 (Sun)
  63866304000, #      utc_end 2024-11-03 08:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63866304000, #    utc_start 2024-11-03 08:00:00 (Sun)
  63877194000, #      utc_end 2025-03-09 09:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63877194000, #    utc_start 2025-03-09 09:00:00 (Sun)
  63897753600, #      utc_end 2025-11-02 08:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63897753600, #    utc_start 2025-11-02 08:00:00 (Sun)
  63908643600, #      utc_end 2026-03-08 09:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63908643600, #    utc_start 2026-03-08 09:00:00 (Sun)
  63929203200, #      utc_end 2026-11-01 08:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63929203200, #    utc_start 2026-11-01 08:00:00 (Sun)
  63940698000, #      utc_end 2027-03-14 09:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63940698000, #    utc_start 2027-03-14 09:00:00 (Sun)
  63961257600, #      utc_end 2027-11-07 08:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {49}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -25200 }
  
  my $last_observance = bless( {
    'format' => 'M%sT',
    'gmtoff' => '-7:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722815,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722815,
      'utc_rd_secs' => 0,
      'utc_year' => 1981
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -25200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722815,
      'local_rd_secs' => 25200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722815,
      'utc_rd_secs' => 25200,
      'utc_year' => 1981
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_INUVIK

    $main::fatpacked{"DateTime/TimeZone/America/Iqaluit.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_IQALUIT';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Iqaluit;
  $DateTime::TimeZone::America::Iqaluit::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Iqaluit::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  61270387200, #      utc_end 1942-08-01 00:00:00 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  61270387200, #    local_end 1942-08-01 00:00:00 (Sat)
  0,
  0,
  '-00',
      ],
      [
  61270387200, #    utc_start 1942-08-01 00:00:00 (Sat)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61270372800, #  local_start 1942-07-31 20:00:00 (Fri)
  61366273200, #    local_end 1945-08-14 19:00:00 (Tue)
  -14400,
  1,
  'EWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370287200, #      utc_end 1945-09-30 06:00:00 (Sun)
  61366273200, #  local_start 1945-08-14 19:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -14400,
  1,
  'EPT',
      ],
      [
  61370287200, #    utc_start 1945-09-30 06:00:00 (Sun)
  61987784400, #      utc_end 1965-04-25 05:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61987766400, #    local_end 1965-04-25 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61987784400, #    utc_start 1965-04-25 05:00:00 (Sun)
  62004114000, #      utc_end 1965-10-31 05:00:00 (Sun)
  61987773600, #  local_start 1965-04-25 02:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -10800,
  1,
  'EDDT',
      ],
      [
  62004114000, #    utc_start 1965-10-31 05:00:00 (Sun)
  62461350000, #      utc_end 1980-04-27 07:00:00 (Sun)
  62004096000, #  local_start 1965-10-31 00:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62461350000, #    utc_start 1980-04-27 07:00:00 (Sun)
  62477071200, #      utc_end 1980-10-26 06:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62477071200, #    utc_start 1980-10-26 06:00:00 (Sun)
  62492799600, #      utc_end 1981-04-26 07:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62492799600, #    utc_start 1981-04-26 07:00:00 (Sun)
  62508520800, #      utc_end 1981-10-25 06:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62508520800, #    utc_start 1981-10-25 06:00:00 (Sun)
  62524249200, #      utc_end 1982-04-25 07:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62524249200, #    utc_start 1982-04-25 07:00:00 (Sun)
  62540575200, #      utc_end 1982-10-31 06:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62540575200, #    utc_start 1982-10-31 06:00:00 (Sun)
  62555698800, #      utc_end 1983-04-24 07:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62555698800, #    utc_start 1983-04-24 07:00:00 (Sun)
  62572024800, #      utc_end 1983-10-30 06:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62572024800, #    utc_start 1983-10-30 06:00:00 (Sun)
  62587753200, #      utc_end 1984-04-29 07:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62587753200, #    utc_start 1984-04-29 07:00:00 (Sun)
  62603474400, #      utc_end 1984-10-28 06:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62603474400, #    utc_start 1984-10-28 06:00:00 (Sun)
  62619202800, #      utc_end 1985-04-28 07:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62619202800, #    utc_start 1985-04-28 07:00:00 (Sun)
  62634924000, #      utc_end 1985-10-27 06:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62634924000, #    utc_start 1985-10-27 06:00:00 (Sun)
  62650652400, #      utc_end 1986-04-27 07:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62650652400, #    utc_start 1986-04-27 07:00:00 (Sun)
  62666373600, #      utc_end 1986-10-26 06:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62666373600, #    utc_start 1986-10-26 06:00:00 (Sun)
  62680287600, #      utc_end 1987-04-05 07:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62680287600, #    utc_start 1987-04-05 07:00:00 (Sun)
  62697823200, #      utc_end 1987-10-25 06:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62697823200, #    utc_start 1987-10-25 06:00:00 (Sun)
  62711737200, #      utc_end 1988-04-03 07:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62711737200, #    utc_start 1988-04-03 07:00:00 (Sun)
  62729877600, #      utc_end 1988-10-30 06:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62729877600, #    utc_start 1988-10-30 06:00:00 (Sun)
  62743186800, #      utc_end 1989-04-02 07:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62743186800, #    utc_start 1989-04-02 07:00:00 (Sun)
  62761327200, #      utc_end 1989-10-29 06:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62761327200, #    utc_start 1989-10-29 06:00:00 (Sun)
  62774636400, #      utc_end 1990-04-01 07:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62774636400, #    utc_start 1990-04-01 07:00:00 (Sun)
  62792776800, #      utc_end 1990-10-28 06:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62792776800, #    utc_start 1990-10-28 06:00:00 (Sun)
  62806690800, #      utc_end 1991-04-07 07:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62806690800, #    utc_start 1991-04-07 07:00:00 (Sun)
  62824226400, #      utc_end 1991-10-27 06:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62824226400, #    utc_start 1991-10-27 06:00:00 (Sun)
  62838140400, #      utc_end 1992-04-05 07:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62838140400, #    utc_start 1992-04-05 07:00:00 (Sun)
  62855676000, #      utc_end 1992-10-25 06:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62855676000, #    utc_start 1992-10-25 06:00:00 (Sun)
  62869590000, #      utc_end 1993-04-04 07:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62869590000, #    utc_start 1993-04-04 07:00:00 (Sun)
  62887730400, #      utc_end 1993-10-31 06:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62887730400, #    utc_start 1993-10-31 06:00:00 (Sun)
  62901039600, #      utc_end 1994-04-03 07:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62901039600, #    utc_start 1994-04-03 07:00:00 (Sun)
  62919180000, #      utc_end 1994-10-30 06:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62919180000, #    utc_start 1994-10-30 06:00:00 (Sun)
  62932489200, #      utc_end 1995-04-02 07:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62932489200, #    utc_start 1995-04-02 07:00:00 (Sun)
  62950629600, #      utc_end 1995-10-29 06:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62950629600, #    utc_start 1995-10-29 06:00:00 (Sun)
  62964543600, #      utc_end 1996-04-07 07:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62964543600, #    utc_start 1996-04-07 07:00:00 (Sun)
  62982079200, #      utc_end 1996-10-27 06:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62982079200, #    utc_start 1996-10-27 06:00:00 (Sun)
  62995993200, #      utc_end 1997-04-06 07:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62995993200, #    utc_start 1997-04-06 07:00:00 (Sun)
  63013528800, #      utc_end 1997-10-26 06:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63013528800, #    utc_start 1997-10-26 06:00:00 (Sun)
  63027442800, #      utc_end 1998-04-05 07:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63027442800, #    utc_start 1998-04-05 07:00:00 (Sun)
  63044978400, #      utc_end 1998-10-25 06:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63044978400, #    utc_start 1998-10-25 06:00:00 (Sun)
  63058892400, #      utc_end 1999-04-04 07:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63058892400, #    utc_start 1999-04-04 07:00:00 (Sun)
  63077032800, #      utc_end 1999-10-31 06:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63077032800, #    utc_start 1999-10-31 06:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077011200, #  local_start 1999-10-31 00:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108486000, #      utc_end 2000-10-29 07:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108486000, #    utc_start 2000-10-29 07:00:00 (Sun)
  63121791600, #      utc_end 2001-04-01 07:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63121791600, #    utc_start 2001-04-01 07:00:00 (Sun)
  63139932000, #      utc_end 2001-10-28 06:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63139932000, #    utc_start 2001-10-28 06:00:00 (Sun)
  63153846000, #      utc_end 2002-04-07 07:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63153846000, #    utc_start 2002-04-07 07:00:00 (Sun)
  63171381600, #      utc_end 2002-10-27 06:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63171381600, #    utc_start 2002-10-27 06:00:00 (Sun)
  63185295600, #      utc_end 2003-04-06 07:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63185295600, #    utc_start 2003-04-06 07:00:00 (Sun)
  63202831200, #      utc_end 2003-10-26 06:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63202831200, #    utc_start 2003-10-26 06:00:00 (Sun)
  63216745200, #      utc_end 2004-04-04 07:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63216745200, #    utc_start 2004-04-04 07:00:00 (Sun)
  63234885600, #      utc_end 2004-10-31 06:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63234885600, #    utc_start 2004-10-31 06:00:00 (Sun)
  63248194800, #      utc_end 2005-04-03 07:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63248194800, #    utc_start 2005-04-03 07:00:00 (Sun)
  63266335200, #      utc_end 2005-10-30 06:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63266335200, #    utc_start 2005-10-30 06:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297784800, #      utc_end 2006-10-29 06:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63297784800, #    utc_start 2006-10-29 06:00:00 (Sun)
  63309279600, #      utc_end 2007-03-11 07:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63309279600, #    utc_start 2007-03-11 07:00:00 (Sun)
  63329839200, #      utc_end 2007-11-04 06:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63329839200, #    utc_start 2007-11-04 06:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {51}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730422,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730422,
      'utc_rd_secs' => 7200,
      'utc_year' => 2001
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730422,
      'local_rd_secs' => 25200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730422,
      'utc_rd_secs' => 25200,
      'utc_year' => 2001
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_IQALUIT

    $main::fatpacked{"DateTime/TimeZone/America/Jamaica.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_JAMAICA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Jamaica;
  $DateTime::TimeZone::America::Jamaica::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Jamaica::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611180031, #      utc_end 1890-01-01 05:07:11 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -18431,
  0,
  'LMT',
      ],
      [
  59611180031, #    utc_start 1890-01-01 05:07:11 (Wed)
  60307996031, #      utc_end 1912-02-01 05:07:11 (Thu)
  59611161600, #  local_start 1890-01-01 00:00:00 (Wed)
  60307977600, #    local_end 1912-02-01 00:00:00 (Thu)
  -18431,
  0,
  'KMT',
      ],
      [
  60307996031, #    utc_start 1912-02-01 05:07:11 (Thu)
  62261931600, #      utc_end 1974-01-01 05:00:00 (Tue)
  60307978031, #  local_start 1912-02-01 00:07:11 (Thu)
  62261913600, #    local_end 1974-01-01 00:00:00 (Tue)
  -18000,
  0,
  'EST',
      ],
      [
  62261931600, #    utc_start 1974-01-01 05:00:00 (Tue)
  62262370800, #      utc_end 1974-01-06 07:00:00 (Sun)
  62261913600, #  local_start 1974-01-01 00:00:00 (Tue)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62262370800, #    utc_start 1974-01-06 07:00:00 (Sun)
  62287768800, #      utc_end 1974-10-27 06:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62287768800, #    utc_start 1974-10-27 06:00:00 (Sun)
  62298054000, #      utc_end 1975-02-23 07:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62298054000, #    utc_start 1975-02-23 07:00:00 (Sun)
  62319218400, #      utc_end 1975-10-26 06:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62319218400, #    utc_start 1975-10-26 06:00:00 (Sun)
  62334946800, #      utc_end 1976-04-25 07:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62334946800, #    utc_start 1976-04-25 07:00:00 (Sun)
  62351272800, #      utc_end 1976-10-31 06:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62351272800, #    utc_start 1976-10-31 06:00:00 (Sun)
  62366396400, #      utc_end 1977-04-24 07:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62366396400, #    utc_start 1977-04-24 07:00:00 (Sun)
  62382722400, #      utc_end 1977-10-30 06:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62382722400, #    utc_start 1977-10-30 06:00:00 (Sun)
  62398450800, #      utc_end 1978-04-30 07:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62398450800, #    utc_start 1978-04-30 07:00:00 (Sun)
  62414172000, #      utc_end 1978-10-29 06:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62414172000, #    utc_start 1978-10-29 06:00:00 (Sun)
  62429900400, #      utc_end 1979-04-29 07:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62429900400, #    utc_start 1979-04-29 07:00:00 (Sun)
  62445621600, #      utc_end 1979-10-28 06:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62445621600, #    utc_start 1979-10-28 06:00:00 (Sun)
  62461350000, #      utc_end 1980-04-27 07:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62461350000, #    utc_start 1980-04-27 07:00:00 (Sun)
  62477071200, #      utc_end 1980-10-26 06:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62477071200, #    utc_start 1980-10-26 06:00:00 (Sun)
  62492799600, #      utc_end 1981-04-26 07:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62492799600, #    utc_start 1981-04-26 07:00:00 (Sun)
  62508520800, #      utc_end 1981-10-25 06:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62508520800, #    utc_start 1981-10-25 06:00:00 (Sun)
  62524249200, #      utc_end 1982-04-25 07:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62524249200, #    utc_start 1982-04-25 07:00:00 (Sun)
  62540575200, #      utc_end 1982-10-31 06:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62540575200, #    utc_start 1982-10-31 06:00:00 (Sun)
  62555698800, #      utc_end 1983-04-24 07:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62555698800, #    utc_start 1983-04-24 07:00:00 (Sun)
  62572024800, #      utc_end 1983-10-30 06:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62572024800, #    utc_start 1983-10-30 06:00:00 (Sun)
  62577464400, #      utc_end 1984-01-01 05:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62577446400, #    local_end 1984-01-01 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62577464400, #    utc_start 1984-01-01 05:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  62577446400, #  local_start 1984-01-01 00:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -18000,
  0,
  'EST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {10}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_JAMAICA

    $main::fatpacked{"DateTime/TimeZone/America/Juneau.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_JUNEAU';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Juneau;
  $DateTime::TimeZone::America::Juneau::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Juneau::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  58910317061, #      utc_end 1867-10-17 08:57:41 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  58910371200, #    local_end 1867-10-18 00:00:00 (Fri)
  54139,
  0,
  'LMT',
      ],
      [
  58910317061, #    utc_start 1867-10-17 08:57:41 (Thu)
  59946728261, #      utc_end 1900-08-20 20:57:41 (Mon)
  58910284800, #  local_start 1867-10-17 00:00:00 (Thu)
  59946696000, #    local_end 1900-08-20 12:00:00 (Mon)
  -32261,
  0,
  'LMT',
      ],
      [
  59946728261, #    utc_start 1900-08-20 20:57:41 (Mon)
  61252099200, #      utc_end 1942-01-01 08:00:00 (Thu)
  59946699461, #  local_start 1900-08-20 12:57:41 (Mon)
  61252070400, #    local_end 1942-01-01 00:00:00 (Thu)
  -28800,
  0,
  'PST',
      ],
      [
  61252099200, #    utc_start 1942-01-01 08:00:00 (Thu)
  61255476000, #      utc_end 1942-02-09 10:00:00 (Mon)
  61252070400, #  local_start 1942-01-01 00:00:00 (Thu)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -28800,
  0,
  'PST',
      ],
      [
  61255476000, #    utc_start 1942-02-09 10:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366262400, #    local_end 1945-08-14 16:00:00 (Tue)
  -25200,
  1,
  'PWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370298000, #      utc_end 1945-09-30 09:00:00 (Sun)
  61366262400, #  local_start 1945-08-14 16:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PPT',
      ],
      [
  61370298000, #    utc_start 1945-09-30 09:00:00 (Sun)
  61378329600, #      utc_end 1946-01-01 08:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -28800,
  0,
  'PST',
      ],
      [
  61378329600, #    utc_start 1946-01-01 08:00:00 (Tue)
  62104176000, #      utc_end 1969-01-01 08:00:00 (Wed)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  62104147200, #    local_end 1969-01-01 00:00:00 (Wed)
  -28800,
  0,
  'PST',
      ],
      [
  62104176000, #    utc_start 1969-01-01 08:00:00 (Wed)
  62114205600, #      utc_end 1969-04-27 10:00:00 (Sun)
  62104147200, #  local_start 1969-01-01 00:00:00 (Wed)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62114205600, #    utc_start 1969-04-27 10:00:00 (Sun)
  62129926800, #      utc_end 1969-10-26 09:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62129926800, #    utc_start 1969-10-26 09:00:00 (Sun)
  62145655200, #      utc_end 1970-04-26 10:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62145655200, #    utc_start 1970-04-26 10:00:00 (Sun)
  62161376400, #      utc_end 1970-10-25 09:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62161376400, #    utc_start 1970-10-25 09:00:00 (Sun)
  62177104800, #      utc_end 1971-04-25 10:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62177104800, #    utc_start 1971-04-25 10:00:00 (Sun)
  62193430800, #      utc_end 1971-10-31 09:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62193430800, #    utc_start 1971-10-31 09:00:00 (Sun)
  62209159200, #      utc_end 1972-04-30 10:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62209159200, #    utc_start 1972-04-30 10:00:00 (Sun)
  62224880400, #      utc_end 1972-10-29 09:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62224880400, #    utc_start 1972-10-29 09:00:00 (Sun)
  62240608800, #      utc_end 1973-04-29 10:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62240608800, #    utc_start 1973-04-29 10:00:00 (Sun)
  62256330000, #      utc_end 1973-10-28 09:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62256330000, #    utc_start 1973-10-28 09:00:00 (Sun)
  62262381600, #      utc_end 1974-01-06 10:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62262381600, #    utc_start 1974-01-06 10:00:00 (Sun)
  62287779600, #      utc_end 1974-10-27 09:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62287779600, #    utc_start 1974-10-27 09:00:00 (Sun)
  62298064800, #      utc_end 1975-02-23 10:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62298064800, #    utc_start 1975-02-23 10:00:00 (Sun)
  62319229200, #      utc_end 1975-10-26 09:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62319229200, #    utc_start 1975-10-26 09:00:00 (Sun)
  62334957600, #      utc_end 1976-04-25 10:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62334957600, #    utc_start 1976-04-25 10:00:00 (Sun)
  62351283600, #      utc_end 1976-10-31 09:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62351283600, #    utc_start 1976-10-31 09:00:00 (Sun)
  62366407200, #      utc_end 1977-04-24 10:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62366407200, #    utc_start 1977-04-24 10:00:00 (Sun)
  62382733200, #      utc_end 1977-10-30 09:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62382733200, #    utc_start 1977-10-30 09:00:00 (Sun)
  62398461600, #      utc_end 1978-04-30 10:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62398461600, #    utc_start 1978-04-30 10:00:00 (Sun)
  62414182800, #      utc_end 1978-10-29 09:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62414182800, #    utc_start 1978-10-29 09:00:00 (Sun)
  62429911200, #      utc_end 1979-04-29 10:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62429911200, #    utc_start 1979-04-29 10:00:00 (Sun)
  62445632400, #      utc_end 1979-10-28 09:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62445632400, #    utc_start 1979-10-28 09:00:00 (Sun)
  62461360800, #      utc_end 1980-04-27 10:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62461360800, #    utc_start 1980-04-27 10:00:00 (Sun)
  62477085600, #      utc_end 1980-10-26 10:00:00 (Sun)
  62461332000, #  local_start 1980-04-27 02:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  62477085600, #    utc_start 1980-10-26 10:00:00 (Sun)
  62492810400, #      utc_end 1981-04-26 10:00:00 (Sun)
  62477056800, #  local_start 1980-10-26 02:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62492810400, #    utc_start 1981-04-26 10:00:00 (Sun)
  62508531600, #      utc_end 1981-10-25 09:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62508531600, #    utc_start 1981-10-25 09:00:00 (Sun)
  62524260000, #      utc_end 1982-04-25 10:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62524260000, #    utc_start 1982-04-25 10:00:00 (Sun)
  62540586000, #      utc_end 1982-10-31 09:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62540586000, #    utc_start 1982-10-31 09:00:00 (Sun)
  62555709600, #      utc_end 1983-04-24 10:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62555709600, #    utc_start 1983-04-24 10:00:00 (Sun)
  62572035600, #      utc_end 1983-10-30 09:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62572035600, #    utc_start 1983-10-30 09:00:00 (Sun)
  62574714000, #      utc_end 1983-11-30 09:00:00 (Wed)
  62572003200, #  local_start 1983-10-30 00:00:00 (Sun)
  62574681600, #    local_end 1983-11-30 00:00:00 (Wed)
  -32400,
  0,
  'YST',
      ],
      [
  62574714000, #    utc_start 1983-11-30 09:00:00 (Wed)
  62587767600, #      utc_end 1984-04-29 11:00:00 (Sun)
  62574681600, #  local_start 1983-11-30 00:00:00 (Wed)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62587767600, #    utc_start 1984-04-29 11:00:00 (Sun)
  62603488800, #      utc_end 1984-10-28 10:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62603488800, #    utc_start 1984-10-28 10:00:00 (Sun)
  62619217200, #      utc_end 1985-04-28 11:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62619217200, #    utc_start 1985-04-28 11:00:00 (Sun)
  62634938400, #      utc_end 1985-10-27 10:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62634938400, #    utc_start 1985-10-27 10:00:00 (Sun)
  62650666800, #      utc_end 1986-04-27 11:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62650666800, #    utc_start 1986-04-27 11:00:00 (Sun)
  62666388000, #      utc_end 1986-10-26 10:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62666388000, #    utc_start 1986-10-26 10:00:00 (Sun)
  62680302000, #      utc_end 1987-04-05 11:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62680302000, #    utc_start 1987-04-05 11:00:00 (Sun)
  62697837600, #      utc_end 1987-10-25 10:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62697837600, #    utc_start 1987-10-25 10:00:00 (Sun)
  62711751600, #      utc_end 1988-04-03 11:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62711751600, #    utc_start 1988-04-03 11:00:00 (Sun)
  62729892000, #      utc_end 1988-10-30 10:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62729892000, #    utc_start 1988-10-30 10:00:00 (Sun)
  62743201200, #      utc_end 1989-04-02 11:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62743201200, #    utc_start 1989-04-02 11:00:00 (Sun)
  62761341600, #      utc_end 1989-10-29 10:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62761341600, #    utc_start 1989-10-29 10:00:00 (Sun)
  62774650800, #      utc_end 1990-04-01 11:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62774650800, #    utc_start 1990-04-01 11:00:00 (Sun)
  62792791200, #      utc_end 1990-10-28 10:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62792791200, #    utc_start 1990-10-28 10:00:00 (Sun)
  62806705200, #      utc_end 1991-04-07 11:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62806705200, #    utc_start 1991-04-07 11:00:00 (Sun)
  62824240800, #      utc_end 1991-10-27 10:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62824240800, #    utc_start 1991-10-27 10:00:00 (Sun)
  62838154800, #      utc_end 1992-04-05 11:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62838154800, #    utc_start 1992-04-05 11:00:00 (Sun)
  62855690400, #      utc_end 1992-10-25 10:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62855690400, #    utc_start 1992-10-25 10:00:00 (Sun)
  62869604400, #      utc_end 1993-04-04 11:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62869604400, #    utc_start 1993-04-04 11:00:00 (Sun)
  62887744800, #      utc_end 1993-10-31 10:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62887744800, #    utc_start 1993-10-31 10:00:00 (Sun)
  62901054000, #      utc_end 1994-04-03 11:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62901054000, #    utc_start 1994-04-03 11:00:00 (Sun)
  62919194400, #      utc_end 1994-10-30 10:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62919194400, #    utc_start 1994-10-30 10:00:00 (Sun)
  62932503600, #      utc_end 1995-04-02 11:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62932503600, #    utc_start 1995-04-02 11:00:00 (Sun)
  62950644000, #      utc_end 1995-10-29 10:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62950644000, #    utc_start 1995-10-29 10:00:00 (Sun)
  62964558000, #      utc_end 1996-04-07 11:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62964558000, #    utc_start 1996-04-07 11:00:00 (Sun)
  62982093600, #      utc_end 1996-10-27 10:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62982093600, #    utc_start 1996-10-27 10:00:00 (Sun)
  62996007600, #      utc_end 1997-04-06 11:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62996007600, #    utc_start 1997-04-06 11:00:00 (Sun)
  63013543200, #      utc_end 1997-10-26 10:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63013543200, #    utc_start 1997-10-26 10:00:00 (Sun)
  63027457200, #      utc_end 1998-04-05 11:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63027457200, #    utc_start 1998-04-05 11:00:00 (Sun)
  63044992800, #      utc_end 1998-10-25 10:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63044992800, #    utc_start 1998-10-25 10:00:00 (Sun)
  63058906800, #      utc_end 1999-04-04 11:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63058906800, #    utc_start 1999-04-04 11:00:00 (Sun)
  63077047200, #      utc_end 1999-10-31 10:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63077047200, #    utc_start 1999-10-31 10:00:00 (Sun)
  63090356400, #      utc_end 2000-04-02 11:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63090356400, #    utc_start 2000-04-02 11:00:00 (Sun)
  63108496800, #      utc_end 2000-10-29 10:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63108496800, #    utc_start 2000-10-29 10:00:00 (Sun)
  63121806000, #      utc_end 2001-04-01 11:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63121806000, #    utc_start 2001-04-01 11:00:00 (Sun)
  63139946400, #      utc_end 2001-10-28 10:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63139946400, #    utc_start 2001-10-28 10:00:00 (Sun)
  63153860400, #      utc_end 2002-04-07 11:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63153860400, #    utc_start 2002-04-07 11:00:00 (Sun)
  63171396000, #      utc_end 2002-10-27 10:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63171396000, #    utc_start 2002-10-27 10:00:00 (Sun)
  63185310000, #      utc_end 2003-04-06 11:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63185310000, #    utc_start 2003-04-06 11:00:00 (Sun)
  63202845600, #      utc_end 2003-10-26 10:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63202845600, #    utc_start 2003-10-26 10:00:00 (Sun)
  63216759600, #      utc_end 2004-04-04 11:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63216759600, #    utc_start 2004-04-04 11:00:00 (Sun)
  63234900000, #      utc_end 2004-10-31 10:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63234900000, #    utc_start 2004-10-31 10:00:00 (Sun)
  63248209200, #      utc_end 2005-04-03 11:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63248209200, #    utc_start 2005-04-03 11:00:00 (Sun)
  63266349600, #      utc_end 2005-10-30 10:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63266349600, #    utc_start 2005-10-30 10:00:00 (Sun)
  63279658800, #      utc_end 2006-04-02 11:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63279658800, #    utc_start 2006-04-02 11:00:00 (Sun)
  63297799200, #      utc_end 2006-10-29 10:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63297799200, #    utc_start 2006-10-29 10:00:00 (Sun)
  63309294000, #      utc_end 2007-03-11 11:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63309294000, #    utc_start 2007-03-11 11:00:00 (Sun)
  63329853600, #      utc_end 2007-11-04 10:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63329853600, #    utc_start 2007-11-04 10:00:00 (Sun)
  63340743600, #      utc_end 2008-03-09 11:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63340743600, #    utc_start 2008-03-09 11:00:00 (Sun)
  63361303200, #      utc_end 2008-11-02 10:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63361303200, #    utc_start 2008-11-02 10:00:00 (Sun)
  63372193200, #      utc_end 2009-03-08 11:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63372193200, #    utc_start 2009-03-08 11:00:00 (Sun)
  63392752800, #      utc_end 2009-11-01 10:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63392752800, #    utc_start 2009-11-01 10:00:00 (Sun)
  63404247600, #      utc_end 2010-03-14 11:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63404247600, #    utc_start 2010-03-14 11:00:00 (Sun)
  63424807200, #      utc_end 2010-11-07 10:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63424807200, #    utc_start 2010-11-07 10:00:00 (Sun)
  63435697200, #      utc_end 2011-03-13 11:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63435697200, #    utc_start 2011-03-13 11:00:00 (Sun)
  63456256800, #      utc_end 2011-11-06 10:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63456256800, #    utc_start 2011-11-06 10:00:00 (Sun)
  63467146800, #      utc_end 2012-03-11 11:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63467146800, #    utc_start 2012-03-11 11:00:00 (Sun)
  63487706400, #      utc_end 2012-11-04 10:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63487706400, #    utc_start 2012-11-04 10:00:00 (Sun)
  63498596400, #      utc_end 2013-03-10 11:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63498596400, #    utc_start 2013-03-10 11:00:00 (Sun)
  63519156000, #      utc_end 2013-11-03 10:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63519156000, #    utc_start 2013-11-03 10:00:00 (Sun)
  63530046000, #      utc_end 2014-03-09 11:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63530046000, #    utc_start 2014-03-09 11:00:00 (Sun)
  63550605600, #      utc_end 2014-11-02 10:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63550605600, #    utc_start 2014-11-02 10:00:00 (Sun)
  63561495600, #      utc_end 2015-03-08 11:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63561495600, #    utc_start 2015-03-08 11:00:00 (Sun)
  63582055200, #      utc_end 2015-11-01 10:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63582055200, #    utc_start 2015-11-01 10:00:00 (Sun)
  63593550000, #      utc_end 2016-03-13 11:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63593550000, #    utc_start 2016-03-13 11:00:00 (Sun)
  63614109600, #      utc_end 2016-11-06 10:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63614109600, #    utc_start 2016-11-06 10:00:00 (Sun)
  63624999600, #      utc_end 2017-03-12 11:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63624999600, #    utc_start 2017-03-12 11:00:00 (Sun)
  63645559200, #      utc_end 2017-11-05 10:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63645559200, #    utc_start 2017-11-05 10:00:00 (Sun)
  63656449200, #      utc_end 2018-03-11 11:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63656449200, #    utc_start 2018-03-11 11:00:00 (Sun)
  63677008800, #      utc_end 2018-11-04 10:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63677008800, #    utc_start 2018-11-04 10:00:00 (Sun)
  63687898800, #      utc_end 2019-03-10 11:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63687898800, #    utc_start 2019-03-10 11:00:00 (Sun)
  63708458400, #      utc_end 2019-11-03 10:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63708458400, #    utc_start 2019-11-03 10:00:00 (Sun)
  63719348400, #      utc_end 2020-03-08 11:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63719348400, #    utc_start 2020-03-08 11:00:00 (Sun)
  63739908000, #      utc_end 2020-11-01 10:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63739908000, #    utc_start 2020-11-01 10:00:00 (Sun)
  63751402800, #      utc_end 2021-03-14 11:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63751402800, #    utc_start 2021-03-14 11:00:00 (Sun)
  63771962400, #      utc_end 2021-11-07 10:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63771962400, #    utc_start 2021-11-07 10:00:00 (Sun)
  63782852400, #      utc_end 2022-03-13 11:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63782852400, #    utc_start 2022-03-13 11:00:00 (Sun)
  63803412000, #      utc_end 2022-11-06 10:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63803412000, #    utc_start 2022-11-06 10:00:00 (Sun)
  63814302000, #      utc_end 2023-03-12 11:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63814302000, #    utc_start 2023-03-12 11:00:00 (Sun)
  63834861600, #      utc_end 2023-11-05 10:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63834861600, #    utc_start 2023-11-05 10:00:00 (Sun)
  63845751600, #      utc_end 2024-03-10 11:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63845751600, #    utc_start 2024-03-10 11:00:00 (Sun)
  63866311200, #      utc_end 2024-11-03 10:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63866311200, #    utc_start 2024-11-03 10:00:00 (Sun)
  63877201200, #      utc_end 2025-03-09 11:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63877201200, #    utc_start 2025-03-09 11:00:00 (Sun)
  63897760800, #      utc_end 2025-11-02 10:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63897760800, #    utc_start 2025-11-02 10:00:00 (Sun)
  63908650800, #      utc_end 2026-03-08 11:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63908650800, #    utc_start 2026-03-08 11:00:00 (Sun)
  63929210400, #      utc_end 2026-11-01 10:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63929210400, #    utc_start 2026-11-01 10:00:00 (Sun)
  63940705200, #      utc_end 2027-03-14 11:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63940705200, #    utc_start 2027-03-14 11:00:00 (Sun)
  63961264800, #      utc_end 2027-11-07 10:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {61}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -32400 }
  
  my $last_observance = bless( {
    'format' => 'AK%sT',
    'gmtoff' => '-9:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724244,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724244,
      'utc_rd_secs' => 0,
      'utc_year' => 1984
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -32400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724244,
      'local_rd_secs' => 32400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724244,
      'utc_rd_secs' => 32400,
      'utc_year' => 1984
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_JUNEAU

    $main::fatpacked{"DateTime/TimeZone/America/Kentucky/Louisville.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_KENTUCKY_LOUISVILLE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Kentucky::Louisville;
  $DateTime::TimeZone::America::Kentucky::Louisville::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Kentucky::Louisville::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418036000, #      utc_end 1883-11-18 18:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418015418, #    local_end 1883-11-18 12:16:58 (Sun)
  -20582,
  0,
  'LMT',
      ],
      [
  59418036000, #    utc_start 1883-11-18 18:00:00 (Sun)
  60502406400, #      utc_end 1918-03-31 08:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60502406400, #    utc_start 1918-03-31 08:00:00 (Sun)
  60520546800, #      utc_end 1918-10-27 07:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60520546800, #    utc_start 1918-10-27 07:00:00 (Sun)
  60533856000, #      utc_end 1919-03-30 08:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60533856000, #    utc_start 1919-03-30 08:00:00 (Sun)
  60551996400, #      utc_end 1919-10-26 07:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60551996400, #    utc_start 1919-10-26 07:00:00 (Sun)
  60589404000, #      utc_end 1921-01-01 06:00:00 (Sat)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  60589382400, #    local_end 1921-01-01 00:00:00 (Sat)
  -21600,
  0,
  'CST',
      ],
      [
  60589404000, #    utc_start 1921-01-01 06:00:00 (Sat)
  60599779200, #      utc_end 1921-05-01 08:00:00 (Sun)
  60589382400, #  local_start 1921-01-01 00:00:00 (Sat)
  60599757600, #    local_end 1921-05-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60599779200, #    utc_start 1921-05-01 08:00:00 (Sun)
  60610402800, #      utc_end 1921-09-01 07:00:00 (Thu)
  60599761200, #  local_start 1921-05-01 03:00:00 (Sun)
  60610384800, #    local_end 1921-09-01 02:00:00 (Thu)
  -18000,
  1,
  'CDT',
      ],
      [
  60610402800, #    utc_start 1921-09-01 07:00:00 (Thu)
  61230585600, #      utc_end 1941-04-27 08:00:00 (Sun)
  60610381200, #  local_start 1921-09-01 01:00:00 (Thu)
  61230564000, #    local_end 1941-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61230585600, #    utc_start 1941-04-27 08:00:00 (Sun)
  61243887600, #      utc_end 1941-09-28 07:00:00 (Sun)
  61230567600, #  local_start 1941-04-27 03:00:00 (Sun)
  61243869600, #    local_end 1941-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61243887600, #    utc_start 1941-09-28 07:00:00 (Sun)
  61252092000, #      utc_end 1942-01-01 06:00:00 (Thu)
  61243866000, #  local_start 1941-09-28 01:00:00 (Sun)
  61252070400, #    local_end 1942-01-01 00:00:00 (Thu)
  -21600,
  0,
  'CST',
      ],
      [
  61252092000, #    utc_start 1942-01-01 06:00:00 (Thu)
  61255468800, #      utc_end 1942-02-09 08:00:00 (Mon)
  61252070400, #  local_start 1942-01-01 00:00:00 (Thu)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61255468800, #    utc_start 1942-02-09 08:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366269600, #    local_end 1945-08-14 18:00:00 (Tue)
  -18000,
  1,
  'CWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370290800, #      utc_end 1945-09-30 07:00:00 (Sun)
  61366269600, #  local_start 1945-08-14 18:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CPT',
      ],
      [
  61370290800, #    utc_start 1945-09-30 07:00:00 (Sun)
  61378322400, #      utc_end 1946-01-01 06:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -21600,
  0,
  'CST',
      ],
      [
  61378322400, #    utc_start 1946-01-01 06:00:00 (Tue)
  61391458800, #      utc_end 1946-06-02 07:00:00 (Sun)
  61378304400, #  local_start 1946-01-01 01:00:00 (Tue)
  61391440800, #    local_end 1946-06-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61391458800, #    utc_start 1946-06-02 07:00:00 (Sun)
  61419888000, #      utc_end 1947-04-27 08:00:00 (Sun)
  61391437200, #  local_start 1946-06-02 01:00:00 (Sun)
  61419866400, #    local_end 1947-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61419888000, #    utc_start 1947-04-27 08:00:00 (Sun)
  61527538800, #      utc_end 1950-09-24 07:00:00 (Sun)
  61419870000, #  local_start 1947-04-27 03:00:00 (Sun)
  61527520800, #    local_end 1950-09-24 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61527538800, #    utc_start 1950-09-24 07:00:00 (Sun)
  61546291200, #      utc_end 1951-04-29 08:00:00 (Sun)
  61527517200, #  local_start 1950-09-24 01:00:00 (Sun)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61546291200, #    utc_start 1951-04-29 08:00:00 (Sun)
  61559593200, #      utc_end 1951-09-30 07:00:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61559593200, #    utc_start 1951-09-30 07:00:00 (Sun)
  61577740800, #      utc_end 1952-04-27 08:00:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61577740800, #    utc_start 1952-04-27 08:00:00 (Sun)
  61591042800, #      utc_end 1952-09-28 07:00:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61591042800, #    utc_start 1952-09-28 07:00:00 (Sun)
  61609190400, #      utc_end 1953-04-26 08:00:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61609190400, #    utc_start 1953-04-26 08:00:00 (Sun)
  61622492400, #      utc_end 1953-09-27 07:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61622492400, #    utc_start 1953-09-27 07:00:00 (Sun)
  61640640000, #      utc_end 1954-04-25 08:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61640640000, #    utc_start 1954-04-25 08:00:00 (Sun)
  61653942000, #      utc_end 1954-09-26 07:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61653942000, #    utc_start 1954-09-26 07:00:00 (Sun)
  61672089600, #      utc_end 1955-04-24 08:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61672089600, #    utc_start 1955-04-24 08:00:00 (Sun)
  61685391600, #      utc_end 1955-09-25 07:00:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61685373600, #    local_end 1955-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61685391600, #    utc_start 1955-09-25 07:00:00 (Sun)
  61704144000, #      utc_end 1956-04-29 08:00:00 (Sun)
  61685370000, #  local_start 1955-09-25 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61704144000, #    utc_start 1956-04-29 08:00:00 (Sun)
  61719865200, #      utc_end 1956-10-28 07:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61719847200, #    local_end 1956-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61719865200, #    utc_start 1956-10-28 07:00:00 (Sun)
  61735593600, #      utc_end 1957-04-28 08:00:00 (Sun)
  61719843600, #  local_start 1956-10-28 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61735593600, #    utc_start 1957-04-28 08:00:00 (Sun)
  61751314800, #      utc_end 1957-10-27 07:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61751296800, #    local_end 1957-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61751314800, #    utc_start 1957-10-27 07:00:00 (Sun)
  61767043200, #      utc_end 1958-04-27 08:00:00 (Sun)
  61751293200, #  local_start 1957-10-27 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61767043200, #    utc_start 1958-04-27 08:00:00 (Sun)
  61782764400, #      utc_end 1958-10-26 07:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61782746400, #    local_end 1958-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61782764400, #    utc_start 1958-10-26 07:00:00 (Sun)
  61798492800, #      utc_end 1959-04-26 08:00:00 (Sun)
  61782742800, #  local_start 1958-10-26 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61798492800, #    utc_start 1959-04-26 08:00:00 (Sun)
  61814214000, #      utc_end 1959-10-25 07:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61814196000, #    local_end 1959-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61814214000, #    utc_start 1959-10-25 07:00:00 (Sun)
  61829942400, #      utc_end 1960-04-24 08:00:00 (Sun)
  61814192400, #  local_start 1959-10-25 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61829942400, #    utc_start 1960-04-24 08:00:00 (Sun)
  61846268400, #      utc_end 1960-10-30 07:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61846250400, #    local_end 1960-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61846268400, #    utc_start 1960-10-30 07:00:00 (Sun)
  61861996800, #      utc_end 1961-04-30 08:00:00 (Sun)
  61846246800, #  local_start 1960-10-30 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61861996800, #    utc_start 1961-04-30 08:00:00 (Sun)
  61869250800, #      utc_end 1961-07-23 07:00:00 (Sun)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  61869232800, #    local_end 1961-07-23 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61869250800, #    utc_start 1961-07-23 07:00:00 (Sun)
  62072542800, #      utc_end 1968-01-01 05:00:00 (Mon)
  61869232800, #  local_start 1961-07-23 02:00:00 (Sun)
  62072524800, #    local_end 1968-01-01 00:00:00 (Mon)
  -18000,
  0,
  'EST',
      ],
      [
  62072542800, #    utc_start 1968-01-01 05:00:00 (Mon)
  62082745200, #      utc_end 1968-04-28 07:00:00 (Sun)
  62072524800, #  local_start 1968-01-01 00:00:00 (Mon)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62082745200, #    utc_start 1968-04-28 07:00:00 (Sun)
  62098466400, #      utc_end 1968-10-27 06:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62098466400, #    utc_start 1968-10-27 06:00:00 (Sun)
  62114194800, #      utc_end 1969-04-27 07:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62114194800, #    utc_start 1969-04-27 07:00:00 (Sun)
  62129916000, #      utc_end 1969-10-26 06:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62129916000, #    utc_start 1969-10-26 06:00:00 (Sun)
  62145644400, #      utc_end 1970-04-26 07:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62145644400, #    utc_start 1970-04-26 07:00:00 (Sun)
  62161365600, #      utc_end 1970-10-25 06:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62161365600, #    utc_start 1970-10-25 06:00:00 (Sun)
  62177094000, #      utc_end 1971-04-25 07:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62177094000, #    utc_start 1971-04-25 07:00:00 (Sun)
  62193420000, #      utc_end 1971-10-31 06:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62193420000, #    utc_start 1971-10-31 06:00:00 (Sun)
  62209148400, #      utc_end 1972-04-30 07:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62209148400, #    utc_start 1972-04-30 07:00:00 (Sun)
  62224869600, #      utc_end 1972-10-29 06:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62224869600, #    utc_start 1972-10-29 06:00:00 (Sun)
  62240598000, #      utc_end 1973-04-29 07:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62240598000, #    utc_start 1973-04-29 07:00:00 (Sun)
  62256319200, #      utc_end 1973-10-28 06:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62256319200, #    utc_start 1973-10-28 06:00:00 (Sun)
  62262370800, #      utc_end 1974-01-06 07:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62262370800, #    utc_start 1974-01-06 07:00:00 (Sun)
  62287772400, #      utc_end 1974-10-27 07:00:00 (Sun)
  62262352800, #  local_start 1974-01-06 02:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62287772400, #    utc_start 1974-10-27 07:00:00 (Sun)
  62298054000, #      utc_end 1975-02-23 07:00:00 (Sun)
  62287754400, #  local_start 1974-10-27 02:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62298054000, #    utc_start 1975-02-23 07:00:00 (Sun)
  62319218400, #      utc_end 1975-10-26 06:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62319218400, #    utc_start 1975-10-26 06:00:00 (Sun)
  62334946800, #      utc_end 1976-04-25 07:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62334946800, #    utc_start 1976-04-25 07:00:00 (Sun)
  62351272800, #      utc_end 1976-10-31 06:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62351272800, #    utc_start 1976-10-31 06:00:00 (Sun)
  62366396400, #      utc_end 1977-04-24 07:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62366396400, #    utc_start 1977-04-24 07:00:00 (Sun)
  62382722400, #      utc_end 1977-10-30 06:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62382722400, #    utc_start 1977-10-30 06:00:00 (Sun)
  62398450800, #      utc_end 1978-04-30 07:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62398450800, #    utc_start 1978-04-30 07:00:00 (Sun)
  62414172000, #      utc_end 1978-10-29 06:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62414172000, #    utc_start 1978-10-29 06:00:00 (Sun)
  62429900400, #      utc_end 1979-04-29 07:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62429900400, #    utc_start 1979-04-29 07:00:00 (Sun)
  62445621600, #      utc_end 1979-10-28 06:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62445621600, #    utc_start 1979-10-28 06:00:00 (Sun)
  62461350000, #      utc_end 1980-04-27 07:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62461350000, #    utc_start 1980-04-27 07:00:00 (Sun)
  62477071200, #      utc_end 1980-10-26 06:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62477071200, #    utc_start 1980-10-26 06:00:00 (Sun)
  62492799600, #      utc_end 1981-04-26 07:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62492799600, #    utc_start 1981-04-26 07:00:00 (Sun)
  62508520800, #      utc_end 1981-10-25 06:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62508520800, #    utc_start 1981-10-25 06:00:00 (Sun)
  62524249200, #      utc_end 1982-04-25 07:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62524249200, #    utc_start 1982-04-25 07:00:00 (Sun)
  62540575200, #      utc_end 1982-10-31 06:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62540575200, #    utc_start 1982-10-31 06:00:00 (Sun)
  62555698800, #      utc_end 1983-04-24 07:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62555698800, #    utc_start 1983-04-24 07:00:00 (Sun)
  62572024800, #      utc_end 1983-10-30 06:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62572024800, #    utc_start 1983-10-30 06:00:00 (Sun)
  62587753200, #      utc_end 1984-04-29 07:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62587753200, #    utc_start 1984-04-29 07:00:00 (Sun)
  62603474400, #      utc_end 1984-10-28 06:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62603474400, #    utc_start 1984-10-28 06:00:00 (Sun)
  62619202800, #      utc_end 1985-04-28 07:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62619202800, #    utc_start 1985-04-28 07:00:00 (Sun)
  62634924000, #      utc_end 1985-10-27 06:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62634924000, #    utc_start 1985-10-27 06:00:00 (Sun)
  62650652400, #      utc_end 1986-04-27 07:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62650652400, #    utc_start 1986-04-27 07:00:00 (Sun)
  62666373600, #      utc_end 1986-10-26 06:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62666373600, #    utc_start 1986-10-26 06:00:00 (Sun)
  62680287600, #      utc_end 1987-04-05 07:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62680287600, #    utc_start 1987-04-05 07:00:00 (Sun)
  62697823200, #      utc_end 1987-10-25 06:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62697823200, #    utc_start 1987-10-25 06:00:00 (Sun)
  62711737200, #      utc_end 1988-04-03 07:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62711737200, #    utc_start 1988-04-03 07:00:00 (Sun)
  62729877600, #      utc_end 1988-10-30 06:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62729877600, #    utc_start 1988-10-30 06:00:00 (Sun)
  62743186800, #      utc_end 1989-04-02 07:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62743186800, #    utc_start 1989-04-02 07:00:00 (Sun)
  62761327200, #      utc_end 1989-10-29 06:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62761327200, #    utc_start 1989-10-29 06:00:00 (Sun)
  62774636400, #      utc_end 1990-04-01 07:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62774636400, #    utc_start 1990-04-01 07:00:00 (Sun)
  62792776800, #      utc_end 1990-10-28 06:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62792776800, #    utc_start 1990-10-28 06:00:00 (Sun)
  62806690800, #      utc_end 1991-04-07 07:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62806690800, #    utc_start 1991-04-07 07:00:00 (Sun)
  62824226400, #      utc_end 1991-10-27 06:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62824226400, #    utc_start 1991-10-27 06:00:00 (Sun)
  62838140400, #      utc_end 1992-04-05 07:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62838140400, #    utc_start 1992-04-05 07:00:00 (Sun)
  62855676000, #      utc_end 1992-10-25 06:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62855676000, #    utc_start 1992-10-25 06:00:00 (Sun)
  62869590000, #      utc_end 1993-04-04 07:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62869590000, #    utc_start 1993-04-04 07:00:00 (Sun)
  62887730400, #      utc_end 1993-10-31 06:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62887730400, #    utc_start 1993-10-31 06:00:00 (Sun)
  62901039600, #      utc_end 1994-04-03 07:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62901039600, #    utc_start 1994-04-03 07:00:00 (Sun)
  62919180000, #      utc_end 1994-10-30 06:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62919180000, #    utc_start 1994-10-30 06:00:00 (Sun)
  62932489200, #      utc_end 1995-04-02 07:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62932489200, #    utc_start 1995-04-02 07:00:00 (Sun)
  62950629600, #      utc_end 1995-10-29 06:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62950629600, #    utc_start 1995-10-29 06:00:00 (Sun)
  62964543600, #      utc_end 1996-04-07 07:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62964543600, #    utc_start 1996-04-07 07:00:00 (Sun)
  62982079200, #      utc_end 1996-10-27 06:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62982079200, #    utc_start 1996-10-27 06:00:00 (Sun)
  62995993200, #      utc_end 1997-04-06 07:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62995993200, #    utc_start 1997-04-06 07:00:00 (Sun)
  63013528800, #      utc_end 1997-10-26 06:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63013528800, #    utc_start 1997-10-26 06:00:00 (Sun)
  63027442800, #      utc_end 1998-04-05 07:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63027442800, #    utc_start 1998-04-05 07:00:00 (Sun)
  63044978400, #      utc_end 1998-10-25 06:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63044978400, #    utc_start 1998-10-25 06:00:00 (Sun)
  63058892400, #      utc_end 1999-04-04 07:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63058892400, #    utc_start 1999-04-04 07:00:00 (Sun)
  63077032800, #      utc_end 1999-10-31 06:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63077032800, #    utc_start 1999-10-31 06:00:00 (Sun)
  63090342000, #      utc_end 2000-04-02 07:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63090342000, #    utc_start 2000-04-02 07:00:00 (Sun)
  63108482400, #      utc_end 2000-10-29 06:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63108482400, #    utc_start 2000-10-29 06:00:00 (Sun)
  63121791600, #      utc_end 2001-04-01 07:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63121791600, #    utc_start 2001-04-01 07:00:00 (Sun)
  63139932000, #      utc_end 2001-10-28 06:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63139932000, #    utc_start 2001-10-28 06:00:00 (Sun)
  63153846000, #      utc_end 2002-04-07 07:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63153846000, #    utc_start 2002-04-07 07:00:00 (Sun)
  63171381600, #      utc_end 2002-10-27 06:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63171381600, #    utc_start 2002-10-27 06:00:00 (Sun)
  63185295600, #      utc_end 2003-04-06 07:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63185295600, #    utc_start 2003-04-06 07:00:00 (Sun)
  63202831200, #      utc_end 2003-10-26 06:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63202831200, #    utc_start 2003-10-26 06:00:00 (Sun)
  63216745200, #      utc_end 2004-04-04 07:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63216745200, #    utc_start 2004-04-04 07:00:00 (Sun)
  63234885600, #      utc_end 2004-10-31 06:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63234885600, #    utc_start 2004-10-31 06:00:00 (Sun)
  63248194800, #      utc_end 2005-04-03 07:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63248194800, #    utc_start 2005-04-03 07:00:00 (Sun)
  63266335200, #      utc_end 2005-10-30 06:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63266335200, #    utc_start 2005-10-30 06:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297784800, #      utc_end 2006-10-29 06:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63297784800, #    utc_start 2006-10-29 06:00:00 (Sun)
  63309279600, #      utc_end 2007-03-11 07:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63309279600, #    utc_start 2007-03-11 07:00:00 (Sun)
  63329839200, #      utc_end 2007-11-04 06:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63329839200, #    utc_start 2007-11-04 06:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {79}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 720923,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 720923,
      'utc_rd_secs' => 7200,
      'utc_year' => 1975
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 720923,
      'local_rd_secs' => 25200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 720923,
      'utc_rd_secs' => 25200,
      'utc_year' => 1975
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_KENTUCKY_LOUISVILLE

    $main::fatpacked{"DateTime/TimeZone/America/Kentucky/Monticello.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_KENTUCKY_MONTICELLO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Kentucky::Monticello;
  $DateTime::TimeZone::America::Kentucky::Monticello::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Kentucky::Monticello::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418036000, #      utc_end 1883-11-18 18:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418015636, #    local_end 1883-11-18 12:20:36 (Sun)
  -20364,
  0,
  'LMT',
      ],
      [
  59418036000, #    utc_start 1883-11-18 18:00:00 (Sun)
  60502406400, #      utc_end 1918-03-31 08:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60502406400, #    utc_start 1918-03-31 08:00:00 (Sun)
  60520546800, #      utc_end 1918-10-27 07:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60520546800, #    utc_start 1918-10-27 07:00:00 (Sun)
  60533856000, #      utc_end 1919-03-30 08:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60533856000, #    utc_start 1919-03-30 08:00:00 (Sun)
  60551996400, #      utc_end 1919-10-26 07:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60551996400, #    utc_start 1919-10-26 07:00:00 (Sun)
  61255468800, #      utc_end 1942-02-09 08:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61255468800, #    utc_start 1942-02-09 08:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366269600, #    local_end 1945-08-14 18:00:00 (Tue)
  -18000,
  1,
  'CWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370290800, #      utc_end 1945-09-30 07:00:00 (Sun)
  61366269600, #  local_start 1945-08-14 18:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CPT',
      ],
      [
  61370290800, #    utc_start 1945-09-30 07:00:00 (Sun)
  61378322400, #      utc_end 1946-01-01 06:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -21600,
  0,
  'CST',
      ],
      [
  61378322400, #    utc_start 1946-01-01 06:00:00 (Tue)
  62072546400, #      utc_end 1968-01-01 06:00:00 (Mon)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  62072524800, #    local_end 1968-01-01 00:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  62072546400, #    utc_start 1968-01-01 06:00:00 (Mon)
  62082748800, #      utc_end 1968-04-28 08:00:00 (Sun)
  62072524800, #  local_start 1968-01-01 00:00:00 (Mon)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62082748800, #    utc_start 1968-04-28 08:00:00 (Sun)
  62098470000, #      utc_end 1968-10-27 07:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62098470000, #    utc_start 1968-10-27 07:00:00 (Sun)
  62114198400, #      utc_end 1969-04-27 08:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62114198400, #    utc_start 1969-04-27 08:00:00 (Sun)
  62129919600, #      utc_end 1969-10-26 07:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62129919600, #    utc_start 1969-10-26 07:00:00 (Sun)
  62145648000, #      utc_end 1970-04-26 08:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62145648000, #    utc_start 1970-04-26 08:00:00 (Sun)
  62161369200, #      utc_end 1970-10-25 07:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62161369200, #    utc_start 1970-10-25 07:00:00 (Sun)
  62177097600, #      utc_end 1971-04-25 08:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62177097600, #    utc_start 1971-04-25 08:00:00 (Sun)
  62193423600, #      utc_end 1971-10-31 07:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62193423600, #    utc_start 1971-10-31 07:00:00 (Sun)
  62209152000, #      utc_end 1972-04-30 08:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62209152000, #    utc_start 1972-04-30 08:00:00 (Sun)
  62224873200, #      utc_end 1972-10-29 07:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62224873200, #    utc_start 1972-10-29 07:00:00 (Sun)
  62240601600, #      utc_end 1973-04-29 08:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62240601600, #    utc_start 1973-04-29 08:00:00 (Sun)
  62256322800, #      utc_end 1973-10-28 07:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62256322800, #    utc_start 1973-10-28 07:00:00 (Sun)
  62262374400, #      utc_end 1974-01-06 08:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62262374400, #    utc_start 1974-01-06 08:00:00 (Sun)
  62287772400, #      utc_end 1974-10-27 07:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62287772400, #    utc_start 1974-10-27 07:00:00 (Sun)
  62298057600, #      utc_end 1975-02-23 08:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62298057600, #    utc_start 1975-02-23 08:00:00 (Sun)
  62319222000, #      utc_end 1975-10-26 07:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62319222000, #    utc_start 1975-10-26 07:00:00 (Sun)
  62334950400, #      utc_end 1976-04-25 08:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62334950400, #    utc_start 1976-04-25 08:00:00 (Sun)
  62351276400, #      utc_end 1976-10-31 07:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62351276400, #    utc_start 1976-10-31 07:00:00 (Sun)
  62366400000, #      utc_end 1977-04-24 08:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62366400000, #    utc_start 1977-04-24 08:00:00 (Sun)
  62382726000, #      utc_end 1977-10-30 07:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62382726000, #    utc_start 1977-10-30 07:00:00 (Sun)
  62398454400, #      utc_end 1978-04-30 08:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62398454400, #    utc_start 1978-04-30 08:00:00 (Sun)
  62414175600, #      utc_end 1978-10-29 07:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62414175600, #    utc_start 1978-10-29 07:00:00 (Sun)
  62429904000, #      utc_end 1979-04-29 08:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62429904000, #    utc_start 1979-04-29 08:00:00 (Sun)
  62445625200, #      utc_end 1979-10-28 07:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62445625200, #    utc_start 1979-10-28 07:00:00 (Sun)
  62461353600, #      utc_end 1980-04-27 08:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62461353600, #    utc_start 1980-04-27 08:00:00 (Sun)
  62477074800, #      utc_end 1980-10-26 07:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62477074800, #    utc_start 1980-10-26 07:00:00 (Sun)
  62492803200, #      utc_end 1981-04-26 08:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62492803200, #    utc_start 1981-04-26 08:00:00 (Sun)
  62508524400, #      utc_end 1981-10-25 07:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62508524400, #    utc_start 1981-10-25 07:00:00 (Sun)
  62524252800, #      utc_end 1982-04-25 08:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62524252800, #    utc_start 1982-04-25 08:00:00 (Sun)
  62540578800, #      utc_end 1982-10-31 07:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62540578800, #    utc_start 1982-10-31 07:00:00 (Sun)
  62555702400, #      utc_end 1983-04-24 08:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62555702400, #    utc_start 1983-04-24 08:00:00 (Sun)
  62572028400, #      utc_end 1983-10-30 07:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62572028400, #    utc_start 1983-10-30 07:00:00 (Sun)
  62587756800, #      utc_end 1984-04-29 08:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62587756800, #    utc_start 1984-04-29 08:00:00 (Sun)
  62603478000, #      utc_end 1984-10-28 07:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62603478000, #    utc_start 1984-10-28 07:00:00 (Sun)
  62619206400, #      utc_end 1985-04-28 08:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62619206400, #    utc_start 1985-04-28 08:00:00 (Sun)
  62634927600, #      utc_end 1985-10-27 07:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62634927600, #    utc_start 1985-10-27 07:00:00 (Sun)
  62650656000, #      utc_end 1986-04-27 08:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62650656000, #    utc_start 1986-04-27 08:00:00 (Sun)
  62666377200, #      utc_end 1986-10-26 07:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62666377200, #    utc_start 1986-10-26 07:00:00 (Sun)
  62680291200, #      utc_end 1987-04-05 08:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62680291200, #    utc_start 1987-04-05 08:00:00 (Sun)
  62697826800, #      utc_end 1987-10-25 07:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62697826800, #    utc_start 1987-10-25 07:00:00 (Sun)
  62711740800, #      utc_end 1988-04-03 08:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62711740800, #    utc_start 1988-04-03 08:00:00 (Sun)
  62729881200, #      utc_end 1988-10-30 07:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62729881200, #    utc_start 1988-10-30 07:00:00 (Sun)
  62743190400, #      utc_end 1989-04-02 08:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62743190400, #    utc_start 1989-04-02 08:00:00 (Sun)
  62761330800, #      utc_end 1989-10-29 07:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62761330800, #    utc_start 1989-10-29 07:00:00 (Sun)
  62774640000, #      utc_end 1990-04-01 08:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62774640000, #    utc_start 1990-04-01 08:00:00 (Sun)
  62792780400, #      utc_end 1990-10-28 07:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62792780400, #    utc_start 1990-10-28 07:00:00 (Sun)
  62806694400, #      utc_end 1991-04-07 08:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62806694400, #    utc_start 1991-04-07 08:00:00 (Sun)
  62824230000, #      utc_end 1991-10-27 07:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62824230000, #    utc_start 1991-10-27 07:00:00 (Sun)
  62838144000, #      utc_end 1992-04-05 08:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62838144000, #    utc_start 1992-04-05 08:00:00 (Sun)
  62855679600, #      utc_end 1992-10-25 07:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62855679600, #    utc_start 1992-10-25 07:00:00 (Sun)
  62869593600, #      utc_end 1993-04-04 08:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62869593600, #    utc_start 1993-04-04 08:00:00 (Sun)
  62887734000, #      utc_end 1993-10-31 07:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62887734000, #    utc_start 1993-10-31 07:00:00 (Sun)
  62901043200, #      utc_end 1994-04-03 08:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62901043200, #    utc_start 1994-04-03 08:00:00 (Sun)
  62919183600, #      utc_end 1994-10-30 07:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62919183600, #    utc_start 1994-10-30 07:00:00 (Sun)
  62932492800, #      utc_end 1995-04-02 08:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62932492800, #    utc_start 1995-04-02 08:00:00 (Sun)
  62950633200, #      utc_end 1995-10-29 07:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62950633200, #    utc_start 1995-10-29 07:00:00 (Sun)
  62964547200, #      utc_end 1996-04-07 08:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62964547200, #    utc_start 1996-04-07 08:00:00 (Sun)
  62982082800, #      utc_end 1996-10-27 07:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62982082800, #    utc_start 1996-10-27 07:00:00 (Sun)
  62995996800, #      utc_end 1997-04-06 08:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62995996800, #    utc_start 1997-04-06 08:00:00 (Sun)
  63013532400, #      utc_end 1997-10-26 07:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63013532400, #    utc_start 1997-10-26 07:00:00 (Sun)
  63027446400, #      utc_end 1998-04-05 08:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63027446400, #    utc_start 1998-04-05 08:00:00 (Sun)
  63044982000, #      utc_end 1998-10-25 07:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63044982000, #    utc_start 1998-10-25 07:00:00 (Sun)
  63058896000, #      utc_end 1999-04-04 08:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63058896000, #    utc_start 1999-04-04 08:00:00 (Sun)
  63077036400, #      utc_end 1999-10-31 07:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63077036400, #    utc_start 1999-10-31 07:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108486000, #      utc_end 2000-10-29 07:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108486000, #    utc_start 2000-10-29 07:00:00 (Sun)
  63121791600, #      utc_end 2001-04-01 07:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63121791600, #    utc_start 2001-04-01 07:00:00 (Sun)
  63139932000, #      utc_end 2001-10-28 06:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63139932000, #    utc_start 2001-10-28 06:00:00 (Sun)
  63153846000, #      utc_end 2002-04-07 07:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63153846000, #    utc_start 2002-04-07 07:00:00 (Sun)
  63171381600, #      utc_end 2002-10-27 06:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63171381600, #    utc_start 2002-10-27 06:00:00 (Sun)
  63185295600, #      utc_end 2003-04-06 07:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63185295600, #    utc_start 2003-04-06 07:00:00 (Sun)
  63202831200, #      utc_end 2003-10-26 06:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63202831200, #    utc_start 2003-10-26 06:00:00 (Sun)
  63216745200, #      utc_end 2004-04-04 07:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63216745200, #    utc_start 2004-04-04 07:00:00 (Sun)
  63234885600, #      utc_end 2004-10-31 06:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63234885600, #    utc_start 2004-10-31 06:00:00 (Sun)
  63248194800, #      utc_end 2005-04-03 07:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63248194800, #    utc_start 2005-04-03 07:00:00 (Sun)
  63266335200, #      utc_end 2005-10-30 06:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63266335200, #    utc_start 2005-10-30 06:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297784800, #      utc_end 2006-10-29 06:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63297784800, #    utc_start 2006-10-29 06:00:00 (Sun)
  63309279600, #      utc_end 2007-03-11 07:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63309279600, #    utc_start 2007-03-11 07:00:00 (Sun)
  63329839200, #      utc_end 2007-11-04 06:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63329839200, #    utc_start 2007-11-04 06:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {64}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730422,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730422,
      'utc_rd_secs' => 7200,
      'utc_year' => 2001
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730422,
      'local_rd_secs' => 25200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730422,
      'utc_rd_secs' => 25200,
      'utc_year' => 2001
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_KENTUCKY_MONTICELLO

    $main::fatpacked{"DateTime/TimeZone/America/La_Paz.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_LA_PAZ';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::La_Paz;
  $DateTime::TimeZone::America::La_Paz::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::La_Paz::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611177956, #      utc_end 1890-01-01 04:32:36 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -16356,
  0,
  'LMT',
      ],
      [
  59611177956, #    utc_start 1890-01-01 04:32:36 (Wed)
  60929728356, #      utc_end 1931-10-15 04:32:36 (Thu)
  59611161600, #  local_start 1890-01-01 00:00:00 (Wed)
  60929712000, #    local_end 1931-10-15 00:00:00 (Thu)
  -16356,
  0,
  'CMT',
      ],
      [
  60929728356, #    utc_start 1931-10-15 04:32:36 (Thu)
  60943375956, #      utc_end 1932-03-21 03:32:36 (Mon)
  60929715600, #  local_start 1931-10-15 01:00:00 (Thu)
  60943363200, #    local_end 1932-03-21 00:00:00 (Mon)
  -12756,
  1,
  'BOST',
      ],
      [
  60943375956, #    utc_start 1932-03-21 03:32:36 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  60943361556, #  local_start 1932-03-20 23:32:36 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -14400,
  0,
  'BOT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {1}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_LA_PAZ

    $main::fatpacked{"DateTime/TimeZone/America/Lima.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_LIMA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Lima;
  $DateTime::TimeZone::America::Lima::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Lima::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611180092, #      utc_end 1890-01-01 05:08:12 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -18492,
  0,
  'LMT',
      ],
      [
  59611180092, #    utc_start 1890-01-01 05:08:12 (Wed)
  60197144916, #      utc_end 1908-07-28 05:08:36 (Tue)
  59611161576, #  local_start 1889-12-31 23:59:36 (Tue)
  60197126400, #    local_end 1908-07-28 00:00:00 (Tue)
  -18516,
  0,
  'LMT',
      ],
      [
  60197144916, #    utc_start 1908-07-28 05:08:36 (Tue)
  61125858000, #      utc_end 1938-01-01 05:00:00 (Sat)
  60197126916, #  local_start 1908-07-28 00:08:36 (Tue)
  61125840000, #    local_end 1938-01-01 00:00:00 (Sat)
  -18000,
  0,
  'PET',
      ],
      [
  61125858000, #    utc_start 1938-01-01 05:00:00 (Sat)
  61133630400, #      utc_end 1938-04-01 04:00:00 (Fri)
  61125843600, #  local_start 1938-01-01 01:00:00 (Sat)
  61133616000, #    local_end 1938-04-01 00:00:00 (Fri)
  -14400,
  1,
  'PEST',
      ],
      [
  61133630400, #    utc_start 1938-04-01 04:00:00 (Fri)
  61148926800, #      utc_end 1938-09-25 05:00:00 (Sun)
  61133612400, #  local_start 1938-03-31 23:00:00 (Thu)
  61148908800, #    local_end 1938-09-25 00:00:00 (Sun)
  -18000,
  0,
  'PET',
      ],
      [
  61148926800, #    utc_start 1938-09-25 05:00:00 (Sun)
  61164648000, #      utc_end 1939-03-26 04:00:00 (Sun)
  61148912400, #  local_start 1938-09-25 01:00:00 (Sun)
  61164633600, #    local_end 1939-03-26 00:00:00 (Sun)
  -14400,
  1,
  'PEST',
      ],
      [
  61164648000, #    utc_start 1939-03-26 04:00:00 (Sun)
  61180376400, #      utc_end 1939-09-24 05:00:00 (Sun)
  61164630000, #  local_start 1939-03-25 23:00:00 (Sat)
  61180358400, #    local_end 1939-09-24 00:00:00 (Sun)
  -18000,
  0,
  'PET',
      ],
      [
  61180376400, #    utc_start 1939-09-24 05:00:00 (Sun)
  61196097600, #      utc_end 1940-03-24 04:00:00 (Sun)
  61180362000, #  local_start 1939-09-24 01:00:00 (Sun)
  61196083200, #    local_end 1940-03-24 00:00:00 (Sun)
  -14400,
  1,
  'PEST',
      ],
      [
  61196097600, #    utc_start 1940-03-24 04:00:00 (Sun)
  62640622800, #      utc_end 1986-01-01 05:00:00 (Wed)
  61196079600, #  local_start 1940-03-23 23:00:00 (Sat)
  62640604800, #    local_end 1986-01-01 00:00:00 (Wed)
  -18000,
  0,
  'PET',
      ],
      [
  62640622800, #    utc_start 1986-01-01 05:00:00 (Wed)
  62648395200, #      utc_end 1986-04-01 04:00:00 (Tue)
  62640608400, #  local_start 1986-01-01 01:00:00 (Wed)
  62648380800, #    local_end 1986-04-01 00:00:00 (Tue)
  -14400,
  1,
  'PEST',
      ],
      [
  62648395200, #    utc_start 1986-04-01 04:00:00 (Tue)
  62672158800, #      utc_end 1987-01-01 05:00:00 (Thu)
  62648377200, #  local_start 1986-03-31 23:00:00 (Mon)
  62672140800, #    local_end 1987-01-01 00:00:00 (Thu)
  -18000,
  0,
  'PET',
      ],
      [
  62672158800, #    utc_start 1987-01-01 05:00:00 (Thu)
  62679931200, #      utc_end 1987-04-01 04:00:00 (Wed)
  62672144400, #  local_start 1987-01-01 01:00:00 (Thu)
  62679916800, #    local_end 1987-04-01 00:00:00 (Wed)
  -14400,
  1,
  'PEST',
      ],
      [
  62679931200, #    utc_start 1987-04-01 04:00:00 (Wed)
  62766853200, #      utc_end 1990-01-01 05:00:00 (Mon)
  62679913200, #  local_start 1987-03-31 23:00:00 (Tue)
  62766835200, #    local_end 1990-01-01 00:00:00 (Mon)
  -18000,
  0,
  'PET',
      ],
      [
  62766853200, #    utc_start 1990-01-01 05:00:00 (Mon)
  62774625600, #      utc_end 1990-04-01 04:00:00 (Sun)
  62766838800, #  local_start 1990-01-01 01:00:00 (Mon)
  62774611200, #    local_end 1990-04-01 00:00:00 (Sun)
  -14400,
  1,
  'PEST',
      ],
      [
  62774625600, #    utc_start 1990-04-01 04:00:00 (Sun)
  62893083600, #      utc_end 1994-01-01 05:00:00 (Sat)
  62774607600, #  local_start 1990-03-31 23:00:00 (Sat)
  62893065600, #    local_end 1994-01-01 00:00:00 (Sat)
  -18000,
  0,
  'PET',
      ],
      [
  62893083600, #    utc_start 1994-01-01 05:00:00 (Sat)
  62900856000, #      utc_end 1994-04-01 04:00:00 (Fri)
  62893069200, #  local_start 1994-01-01 01:00:00 (Sat)
  62900841600, #    local_end 1994-04-01 00:00:00 (Fri)
  -14400,
  1,
  'PEST',
      ],
      [
  62900856000, #    utc_start 1994-04-01 04:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #      utc_end
  62900838000, #  local_start 1994-03-31 23:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  -18000,
  0,
  'PET',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {7}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_LIMA

    $main::fatpacked{"DateTime/TimeZone/America/Los_Angeles.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_LOS_ANGELES';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Los_Angeles;
  $DateTime::TimeZone::America::Los_Angeles::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Los_Angeles::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418043200, #      utc_end 1883-11-18 20:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418014822, #    local_end 1883-11-18 12:07:02 (Sun)
  -28378,
  0,
  'LMT',
      ],
      [
  59418043200, #    utc_start 1883-11-18 20:00:00 (Sun)
  60502413600, #      utc_end 1918-03-31 10:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  60502413600, #    utc_start 1918-03-31 10:00:00 (Sun)
  60520554000, #      utc_end 1918-10-27 09:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  60520554000, #    utc_start 1918-10-27 09:00:00 (Sun)
  60533863200, #      utc_end 1919-03-30 10:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  60533863200, #    utc_start 1919-03-30 10:00:00 (Sun)
  60552003600, #      utc_end 1919-10-26 09:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  60552003600, #    utc_start 1919-10-26 09:00:00 (Sun)
  61255476000, #      utc_end 1942-02-09 10:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -28800,
  0,
  'PST',
      ],
      [
  61255476000, #    utc_start 1942-02-09 10:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366262400, #    local_end 1945-08-14 16:00:00 (Tue)
  -25200,
  1,
  'PWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370298000, #      utc_end 1945-09-30 09:00:00 (Sun)
  61366262400, #  local_start 1945-08-14 16:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PPT',
      ],
      [
  61370298000, #    utc_start 1945-09-30 09:00:00 (Sun)
  61378329600, #      utc_end 1946-01-01 08:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -28800,
  0,
  'PST',
      ],
      [
  61378329600, #    utc_start 1946-01-01 08:00:00 (Tue)
  61447716000, #      utc_end 1948-03-14 10:00:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61447687200, #    local_end 1948-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61447716000, #    utc_start 1948-03-14 10:00:00 (Sun)
  61473027600, #      utc_end 1949-01-01 09:00:00 (Sat)
  61447690800, #  local_start 1948-03-14 03:00:00 (Sun)
  61473002400, #    local_end 1949-01-01 02:00:00 (Sat)
  -25200,
  1,
  'PDT',
      ],
      [
  61473027600, #    utc_start 1949-01-01 09:00:00 (Sat)
  61514848800, #      utc_end 1950-04-30 10:00:00 (Sun)
  61472998800, #  local_start 1949-01-01 01:00:00 (Sat)
  61514820000, #    local_end 1950-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61514848800, #    utc_start 1950-04-30 10:00:00 (Sun)
  61527546000, #      utc_end 1950-09-24 09:00:00 (Sun)
  61514823600, #  local_start 1950-04-30 03:00:00 (Sun)
  61527520800, #    local_end 1950-09-24 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61527546000, #    utc_start 1950-09-24 09:00:00 (Sun)
  61546298400, #      utc_end 1951-04-29 10:00:00 (Sun)
  61527517200, #  local_start 1950-09-24 01:00:00 (Sun)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61546298400, #    utc_start 1951-04-29 10:00:00 (Sun)
  61559600400, #      utc_end 1951-09-30 09:00:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61559600400, #    utc_start 1951-09-30 09:00:00 (Sun)
  61577748000, #      utc_end 1952-04-27 10:00:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61577748000, #    utc_start 1952-04-27 10:00:00 (Sun)
  61591050000, #      utc_end 1952-09-28 09:00:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61591050000, #    utc_start 1952-09-28 09:00:00 (Sun)
  61609197600, #      utc_end 1953-04-26 10:00:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61609197600, #    utc_start 1953-04-26 10:00:00 (Sun)
  61622499600, #      utc_end 1953-09-27 09:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61622499600, #    utc_start 1953-09-27 09:00:00 (Sun)
  61640647200, #      utc_end 1954-04-25 10:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61640647200, #    utc_start 1954-04-25 10:00:00 (Sun)
  61653949200, #      utc_end 1954-09-26 09:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61653949200, #    utc_start 1954-09-26 09:00:00 (Sun)
  61672096800, #      utc_end 1955-04-24 10:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61672096800, #    utc_start 1955-04-24 10:00:00 (Sun)
  61685398800, #      utc_end 1955-09-25 09:00:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61685373600, #    local_end 1955-09-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61685398800, #    utc_start 1955-09-25 09:00:00 (Sun)
  61704151200, #      utc_end 1956-04-29 10:00:00 (Sun)
  61685370000, #  local_start 1955-09-25 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61704151200, #    utc_start 1956-04-29 10:00:00 (Sun)
  61717453200, #      utc_end 1956-09-30 09:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61717428000, #    local_end 1956-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61717453200, #    utc_start 1956-09-30 09:00:00 (Sun)
  61735600800, #      utc_end 1957-04-28 10:00:00 (Sun)
  61717424400, #  local_start 1956-09-30 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61735600800, #    utc_start 1957-04-28 10:00:00 (Sun)
  61748902800, #      utc_end 1957-09-29 09:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61748902800, #    utc_start 1957-09-29 09:00:00 (Sun)
  61767050400, #      utc_end 1958-04-27 10:00:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61767050400, #    utc_start 1958-04-27 10:00:00 (Sun)
  61780352400, #      utc_end 1958-09-28 09:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61780327200, #    local_end 1958-09-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61780352400, #    utc_start 1958-09-28 09:00:00 (Sun)
  61798500000, #      utc_end 1959-04-26 10:00:00 (Sun)
  61780323600, #  local_start 1958-09-28 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61798500000, #    utc_start 1959-04-26 10:00:00 (Sun)
  61811802000, #      utc_end 1959-09-27 09:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61811776800, #    local_end 1959-09-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61811802000, #    utc_start 1959-09-27 09:00:00 (Sun)
  61829949600, #      utc_end 1960-04-24 10:00:00 (Sun)
  61811773200, #  local_start 1959-09-27 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61829949600, #    utc_start 1960-04-24 10:00:00 (Sun)
  61843251600, #      utc_end 1960-09-25 09:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61843226400, #    local_end 1960-09-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61843251600, #    utc_start 1960-09-25 09:00:00 (Sun)
  61862004000, #      utc_end 1961-04-30 10:00:00 (Sun)
  61843222800, #  local_start 1960-09-25 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61862004000, #    utc_start 1961-04-30 10:00:00 (Sun)
  61874701200, #      utc_end 1961-09-24 09:00:00 (Sun)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  61874676000, #    local_end 1961-09-24 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61874701200, #    utc_start 1961-09-24 09:00:00 (Sun)
  61893453600, #      utc_end 1962-04-29 10:00:00 (Sun)
  61874672400, #  local_start 1961-09-24 01:00:00 (Sun)
  61893424800, #    local_end 1962-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61893453600, #    utc_start 1962-04-29 10:00:00 (Sun)
  61909174800, #      utc_end 1962-10-28 09:00:00 (Sun)
  61893428400, #  local_start 1962-04-29 03:00:00 (Sun)
  61909149600, #    local_end 1962-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61909174800, #    utc_start 1962-10-28 09:00:00 (Sun)
  61924903200, #      utc_end 1963-04-28 10:00:00 (Sun)
  61909146000, #  local_start 1962-10-28 01:00:00 (Sun)
  61924874400, #    local_end 1963-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61924903200, #    utc_start 1963-04-28 10:00:00 (Sun)
  61940624400, #      utc_end 1963-10-27 09:00:00 (Sun)
  61924878000, #  local_start 1963-04-28 03:00:00 (Sun)
  61940599200, #    local_end 1963-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61940624400, #    utc_start 1963-10-27 09:00:00 (Sun)
  61956352800, #      utc_end 1964-04-26 10:00:00 (Sun)
  61940595600, #  local_start 1963-10-27 01:00:00 (Sun)
  61956324000, #    local_end 1964-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61956352800, #    utc_start 1964-04-26 10:00:00 (Sun)
  61972074000, #      utc_end 1964-10-25 09:00:00 (Sun)
  61956327600, #  local_start 1964-04-26 03:00:00 (Sun)
  61972048800, #    local_end 1964-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61972074000, #    utc_start 1964-10-25 09:00:00 (Sun)
  61987802400, #      utc_end 1965-04-25 10:00:00 (Sun)
  61972045200, #  local_start 1964-10-25 01:00:00 (Sun)
  61987773600, #    local_end 1965-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61987802400, #    utc_start 1965-04-25 10:00:00 (Sun)
  62004128400, #      utc_end 1965-10-31 09:00:00 (Sun)
  61987777200, #  local_start 1965-04-25 03:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62004128400, #    utc_start 1965-10-31 09:00:00 (Sun)
  62019252000, #      utc_end 1966-04-24 10:00:00 (Sun)
  62004099600, #  local_start 1965-10-31 01:00:00 (Sun)
  62019223200, #    local_end 1966-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62019252000, #    utc_start 1966-04-24 10:00:00 (Sun)
  62035578000, #      utc_end 1966-10-30 09:00:00 (Sun)
  62019226800, #  local_start 1966-04-24 03:00:00 (Sun)
  62035552800, #    local_end 1966-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62035578000, #    utc_start 1966-10-30 09:00:00 (Sun)
  62041017600, #      utc_end 1967-01-01 08:00:00 (Sun)
  62035549200, #  local_start 1966-10-30 01:00:00 (Sun)
  62040988800, #    local_end 1967-01-01 00:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62041017600, #    utc_start 1967-01-01 08:00:00 (Sun)
  62051306400, #      utc_end 1967-04-30 10:00:00 (Sun)
  62040988800, #  local_start 1967-01-01 00:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62051306400, #    utc_start 1967-04-30 10:00:00 (Sun)
  62067027600, #      utc_end 1967-10-29 09:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62067027600, #    utc_start 1967-10-29 09:00:00 (Sun)
  62082756000, #      utc_end 1968-04-28 10:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62082756000, #    utc_start 1968-04-28 10:00:00 (Sun)
  62098477200, #      utc_end 1968-10-27 09:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62098477200, #    utc_start 1968-10-27 09:00:00 (Sun)
  62114205600, #      utc_end 1969-04-27 10:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62114205600, #    utc_start 1969-04-27 10:00:00 (Sun)
  62129926800, #      utc_end 1969-10-26 09:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62129926800, #    utc_start 1969-10-26 09:00:00 (Sun)
  62145655200, #      utc_end 1970-04-26 10:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62145655200, #    utc_start 1970-04-26 10:00:00 (Sun)
  62161376400, #      utc_end 1970-10-25 09:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62161376400, #    utc_start 1970-10-25 09:00:00 (Sun)
  62177104800, #      utc_end 1971-04-25 10:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62177104800, #    utc_start 1971-04-25 10:00:00 (Sun)
  62193430800, #      utc_end 1971-10-31 09:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62193430800, #    utc_start 1971-10-31 09:00:00 (Sun)
  62209159200, #      utc_end 1972-04-30 10:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62209159200, #    utc_start 1972-04-30 10:00:00 (Sun)
  62224880400, #      utc_end 1972-10-29 09:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62224880400, #    utc_start 1972-10-29 09:00:00 (Sun)
  62240608800, #      utc_end 1973-04-29 10:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62240608800, #    utc_start 1973-04-29 10:00:00 (Sun)
  62256330000, #      utc_end 1973-10-28 09:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62256330000, #    utc_start 1973-10-28 09:00:00 (Sun)
  62262381600, #      utc_end 1974-01-06 10:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62262381600, #    utc_start 1974-01-06 10:00:00 (Sun)
  62287779600, #      utc_end 1974-10-27 09:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62287779600, #    utc_start 1974-10-27 09:00:00 (Sun)
  62298064800, #      utc_end 1975-02-23 10:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62298064800, #    utc_start 1975-02-23 10:00:00 (Sun)
  62319229200, #      utc_end 1975-10-26 09:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62319229200, #    utc_start 1975-10-26 09:00:00 (Sun)
  62334957600, #      utc_end 1976-04-25 10:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62334957600, #    utc_start 1976-04-25 10:00:00 (Sun)
  62351283600, #      utc_end 1976-10-31 09:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62351283600, #    utc_start 1976-10-31 09:00:00 (Sun)
  62366407200, #      utc_end 1977-04-24 10:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62366407200, #    utc_start 1977-04-24 10:00:00 (Sun)
  62382733200, #      utc_end 1977-10-30 09:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62382733200, #    utc_start 1977-10-30 09:00:00 (Sun)
  62398461600, #      utc_end 1978-04-30 10:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62398461600, #    utc_start 1978-04-30 10:00:00 (Sun)
  62414182800, #      utc_end 1978-10-29 09:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62414182800, #    utc_start 1978-10-29 09:00:00 (Sun)
  62429911200, #      utc_end 1979-04-29 10:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62429911200, #    utc_start 1979-04-29 10:00:00 (Sun)
  62445632400, #      utc_end 1979-10-28 09:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62445632400, #    utc_start 1979-10-28 09:00:00 (Sun)
  62461360800, #      utc_end 1980-04-27 10:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62461360800, #    utc_start 1980-04-27 10:00:00 (Sun)
  62477082000, #      utc_end 1980-10-26 09:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62477082000, #    utc_start 1980-10-26 09:00:00 (Sun)
  62492810400, #      utc_end 1981-04-26 10:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62492810400, #    utc_start 1981-04-26 10:00:00 (Sun)
  62508531600, #      utc_end 1981-10-25 09:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62508531600, #    utc_start 1981-10-25 09:00:00 (Sun)
  62524260000, #      utc_end 1982-04-25 10:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62524260000, #    utc_start 1982-04-25 10:00:00 (Sun)
  62540586000, #      utc_end 1982-10-31 09:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62540586000, #    utc_start 1982-10-31 09:00:00 (Sun)
  62555709600, #      utc_end 1983-04-24 10:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62555709600, #    utc_start 1983-04-24 10:00:00 (Sun)
  62572035600, #      utc_end 1983-10-30 09:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62572035600, #    utc_start 1983-10-30 09:00:00 (Sun)
  62587764000, #      utc_end 1984-04-29 10:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62587764000, #    utc_start 1984-04-29 10:00:00 (Sun)
  62603485200, #      utc_end 1984-10-28 09:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62603485200, #    utc_start 1984-10-28 09:00:00 (Sun)
  62619213600, #      utc_end 1985-04-28 10:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62619213600, #    utc_start 1985-04-28 10:00:00 (Sun)
  62634934800, #      utc_end 1985-10-27 09:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62634934800, #    utc_start 1985-10-27 09:00:00 (Sun)
  62650663200, #      utc_end 1986-04-27 10:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62650663200, #    utc_start 1986-04-27 10:00:00 (Sun)
  62666384400, #      utc_end 1986-10-26 09:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62666384400, #    utc_start 1986-10-26 09:00:00 (Sun)
  62680298400, #      utc_end 1987-04-05 10:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62680298400, #    utc_start 1987-04-05 10:00:00 (Sun)
  62697834000, #      utc_end 1987-10-25 09:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62697834000, #    utc_start 1987-10-25 09:00:00 (Sun)
  62711748000, #      utc_end 1988-04-03 10:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62711748000, #    utc_start 1988-04-03 10:00:00 (Sun)
  62729888400, #      utc_end 1988-10-30 09:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62729888400, #    utc_start 1988-10-30 09:00:00 (Sun)
  62743197600, #      utc_end 1989-04-02 10:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62743197600, #    utc_start 1989-04-02 10:00:00 (Sun)
  62761338000, #      utc_end 1989-10-29 09:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62761338000, #    utc_start 1989-10-29 09:00:00 (Sun)
  62774647200, #      utc_end 1990-04-01 10:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62774647200, #    utc_start 1990-04-01 10:00:00 (Sun)
  62792787600, #      utc_end 1990-10-28 09:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62792787600, #    utc_start 1990-10-28 09:00:00 (Sun)
  62806701600, #      utc_end 1991-04-07 10:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62806701600, #    utc_start 1991-04-07 10:00:00 (Sun)
  62824237200, #      utc_end 1991-10-27 09:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62824237200, #    utc_start 1991-10-27 09:00:00 (Sun)
  62838151200, #      utc_end 1992-04-05 10:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62838151200, #    utc_start 1992-04-05 10:00:00 (Sun)
  62855686800, #      utc_end 1992-10-25 09:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62855686800, #    utc_start 1992-10-25 09:00:00 (Sun)
  62869600800, #      utc_end 1993-04-04 10:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62869600800, #    utc_start 1993-04-04 10:00:00 (Sun)
  62887741200, #      utc_end 1993-10-31 09:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62887741200, #    utc_start 1993-10-31 09:00:00 (Sun)
  62901050400, #      utc_end 1994-04-03 10:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62901050400, #    utc_start 1994-04-03 10:00:00 (Sun)
  62919190800, #      utc_end 1994-10-30 09:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62919190800, #    utc_start 1994-10-30 09:00:00 (Sun)
  62932500000, #      utc_end 1995-04-02 10:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62932500000, #    utc_start 1995-04-02 10:00:00 (Sun)
  62950640400, #      utc_end 1995-10-29 09:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62950640400, #    utc_start 1995-10-29 09:00:00 (Sun)
  62964554400, #      utc_end 1996-04-07 10:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62964554400, #    utc_start 1996-04-07 10:00:00 (Sun)
  62982090000, #      utc_end 1996-10-27 09:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62982090000, #    utc_start 1996-10-27 09:00:00 (Sun)
  62996004000, #      utc_end 1997-04-06 10:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62996004000, #    utc_start 1997-04-06 10:00:00 (Sun)
  63013539600, #      utc_end 1997-10-26 09:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63013539600, #    utc_start 1997-10-26 09:00:00 (Sun)
  63027453600, #      utc_end 1998-04-05 10:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63027453600, #    utc_start 1998-04-05 10:00:00 (Sun)
  63044989200, #      utc_end 1998-10-25 09:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63044989200, #    utc_start 1998-10-25 09:00:00 (Sun)
  63058903200, #      utc_end 1999-04-04 10:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63058903200, #    utc_start 1999-04-04 10:00:00 (Sun)
  63077043600, #      utc_end 1999-10-31 09:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63077043600, #    utc_start 1999-10-31 09:00:00 (Sun)
  63090352800, #      utc_end 2000-04-02 10:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63090352800, #    utc_start 2000-04-02 10:00:00 (Sun)
  63108493200, #      utc_end 2000-10-29 09:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63108493200, #    utc_start 2000-10-29 09:00:00 (Sun)
  63121802400, #      utc_end 2001-04-01 10:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63121802400, #    utc_start 2001-04-01 10:00:00 (Sun)
  63139942800, #      utc_end 2001-10-28 09:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63139942800, #    utc_start 2001-10-28 09:00:00 (Sun)
  63153856800, #      utc_end 2002-04-07 10:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63153856800, #    utc_start 2002-04-07 10:00:00 (Sun)
  63171392400, #      utc_end 2002-10-27 09:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63171392400, #    utc_start 2002-10-27 09:00:00 (Sun)
  63185306400, #      utc_end 2003-04-06 10:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63185306400, #    utc_start 2003-04-06 10:00:00 (Sun)
  63202842000, #      utc_end 2003-10-26 09:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63202842000, #    utc_start 2003-10-26 09:00:00 (Sun)
  63216756000, #      utc_end 2004-04-04 10:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63216756000, #    utc_start 2004-04-04 10:00:00 (Sun)
  63234896400, #      utc_end 2004-10-31 09:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63234896400, #    utc_start 2004-10-31 09:00:00 (Sun)
  63248205600, #      utc_end 2005-04-03 10:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63248205600, #    utc_start 2005-04-03 10:00:00 (Sun)
  63266346000, #      utc_end 2005-10-30 09:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63266346000, #    utc_start 2005-10-30 09:00:00 (Sun)
  63279655200, #      utc_end 2006-04-02 10:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63279655200, #    utc_start 2006-04-02 10:00:00 (Sun)
  63297795600, #      utc_end 2006-10-29 09:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63297795600, #    utc_start 2006-10-29 09:00:00 (Sun)
  63309290400, #      utc_end 2007-03-11 10:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63309290400, #    utc_start 2007-03-11 10:00:00 (Sun)
  63329850000, #      utc_end 2007-11-04 09:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63329850000, #    utc_start 2007-11-04 09:00:00 (Sun)
  63340740000, #      utc_end 2008-03-09 10:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63340740000, #    utc_start 2008-03-09 10:00:00 (Sun)
  63361299600, #      utc_end 2008-11-02 09:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63361299600, #    utc_start 2008-11-02 09:00:00 (Sun)
  63372189600, #      utc_end 2009-03-08 10:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63372189600, #    utc_start 2009-03-08 10:00:00 (Sun)
  63392749200, #      utc_end 2009-11-01 09:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63392749200, #    utc_start 2009-11-01 09:00:00 (Sun)
  63404244000, #      utc_end 2010-03-14 10:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63404244000, #    utc_start 2010-03-14 10:00:00 (Sun)
  63424803600, #      utc_end 2010-11-07 09:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63424803600, #    utc_start 2010-11-07 09:00:00 (Sun)
  63435693600, #      utc_end 2011-03-13 10:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63435693600, #    utc_start 2011-03-13 10:00:00 (Sun)
  63456253200, #      utc_end 2011-11-06 09:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63456253200, #    utc_start 2011-11-06 09:00:00 (Sun)
  63467143200, #      utc_end 2012-03-11 10:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63467143200, #    utc_start 2012-03-11 10:00:00 (Sun)
  63487702800, #      utc_end 2012-11-04 09:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63487702800, #    utc_start 2012-11-04 09:00:00 (Sun)
  63498592800, #      utc_end 2013-03-10 10:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63498592800, #    utc_start 2013-03-10 10:00:00 (Sun)
  63519152400, #      utc_end 2013-11-03 09:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63519152400, #    utc_start 2013-11-03 09:00:00 (Sun)
  63530042400, #      utc_end 2014-03-09 10:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63530042400, #    utc_start 2014-03-09 10:00:00 (Sun)
  63550602000, #      utc_end 2014-11-02 09:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63550602000, #    utc_start 2014-11-02 09:00:00 (Sun)
  63561492000, #      utc_end 2015-03-08 10:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63561492000, #    utc_start 2015-03-08 10:00:00 (Sun)
  63582051600, #      utc_end 2015-11-01 09:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63582051600, #    utc_start 2015-11-01 09:00:00 (Sun)
  63593546400, #      utc_end 2016-03-13 10:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63593546400, #    utc_start 2016-03-13 10:00:00 (Sun)
  63614106000, #      utc_end 2016-11-06 09:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63614106000, #    utc_start 2016-11-06 09:00:00 (Sun)
  63624996000, #      utc_end 2017-03-12 10:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63624996000, #    utc_start 2017-03-12 10:00:00 (Sun)
  63645555600, #      utc_end 2017-11-05 09:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63645555600, #    utc_start 2017-11-05 09:00:00 (Sun)
  63656445600, #      utc_end 2018-03-11 10:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63656445600, #    utc_start 2018-03-11 10:00:00 (Sun)
  63677005200, #      utc_end 2018-11-04 09:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63677005200, #    utc_start 2018-11-04 09:00:00 (Sun)
  63687895200, #      utc_end 2019-03-10 10:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63687895200, #    utc_start 2019-03-10 10:00:00 (Sun)
  63708454800, #      utc_end 2019-11-03 09:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63708454800, #    utc_start 2019-11-03 09:00:00 (Sun)
  63719344800, #      utc_end 2020-03-08 10:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63719344800, #    utc_start 2020-03-08 10:00:00 (Sun)
  63739904400, #      utc_end 2020-11-01 09:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63739904400, #    utc_start 2020-11-01 09:00:00 (Sun)
  63751399200, #      utc_end 2021-03-14 10:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63751399200, #    utc_start 2021-03-14 10:00:00 (Sun)
  63771958800, #      utc_end 2021-11-07 09:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63771958800, #    utc_start 2021-11-07 09:00:00 (Sun)
  63782848800, #      utc_end 2022-03-13 10:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63782848800, #    utc_start 2022-03-13 10:00:00 (Sun)
  63803408400, #      utc_end 2022-11-06 09:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63803408400, #    utc_start 2022-11-06 09:00:00 (Sun)
  63814298400, #      utc_end 2023-03-12 10:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63814298400, #    utc_start 2023-03-12 10:00:00 (Sun)
  63834858000, #      utc_end 2023-11-05 09:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63834858000, #    utc_start 2023-11-05 09:00:00 (Sun)
  63845748000, #      utc_end 2024-03-10 10:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63845748000, #    utc_start 2024-03-10 10:00:00 (Sun)
  63866307600, #      utc_end 2024-11-03 09:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63866307600, #    utc_start 2024-11-03 09:00:00 (Sun)
  63877197600, #      utc_end 2025-03-09 10:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63877197600, #    utc_start 2025-03-09 10:00:00 (Sun)
  63897757200, #      utc_end 2025-11-02 09:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63897757200, #    utc_start 2025-11-02 09:00:00 (Sun)
  63908647200, #      utc_end 2026-03-08 10:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63908647200, #    utc_start 2026-03-08 10:00:00 (Sun)
  63929206800, #      utc_end 2026-11-01 09:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63929206800, #    utc_start 2026-11-01 09:00:00 (Sun)
  63940701600, #      utc_end 2027-03-14 10:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63940701600, #    utc_start 2027-03-14 10:00:00 (Sun)
  63961261200, #      utc_end 2027-11-07 09:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {83}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -28800 }
  
  my $last_observance = bless( {
    'format' => 'P%sT',
    'gmtoff' => '-8:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 718067,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 718067,
      'utc_rd_secs' => 0,
      'utc_year' => 1968
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -28800,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 718067,
      'local_rd_secs' => 28800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 718067,
      'utc_rd_secs' => 28800,
      'utc_year' => 1968
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_LOS_ANGELES

    $main::fatpacked{"DateTime/TimeZone/America/Maceio.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_MACEIO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Maceio;
  $DateTime::TimeZone::America::Maceio::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Maceio::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368466172, #      utc_end 1914-01-01 02:22:52 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  -8572,
  0,
  'LMT',
      ],
      [
  60368466172, #    utc_start 1914-01-01 02:22:52 (Thu)
  60928725600, #      utc_end 1931-10-03 14:00:00 (Sat)
  60368455372, #  local_start 1913-12-31 23:22:52 (Wed)
  60928714800, #    local_end 1931-10-03 11:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  60928725600, #    utc_start 1931-10-03 14:00:00 (Sat)
  60944320800, #      utc_end 1932-04-01 02:00:00 (Fri)
  60928718400, #  local_start 1931-10-03 12:00:00 (Sat)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -7200,
  1,
  'BRST',
      ],
      [
  60944320800, #    utc_start 1932-04-01 02:00:00 (Fri)
  60960308400, #      utc_end 1932-10-03 03:00:00 (Mon)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60960297600, #    local_end 1932-10-03 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  60960308400, #    utc_start 1932-10-03 03:00:00 (Mon)
  60975856800, #      utc_end 1933-04-01 02:00:00 (Sat)
  60960301200, #  local_start 1932-10-03 01:00:00 (Mon)
  60975849600, #    local_end 1933-04-01 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  60975856800, #    utc_start 1933-04-01 02:00:00 (Sat)
  61501863600, #      utc_end 1949-12-01 03:00:00 (Thu)
  60975846000, #  local_start 1933-03-31 23:00:00 (Fri)
  61501852800, #    local_end 1949-12-01 00:00:00 (Thu)
  -10800,
  0,
  'BRT',
      ],
      [
  61501863600, #    utc_start 1949-12-01 03:00:00 (Thu)
  61513614000, #      utc_end 1950-04-16 03:00:00 (Sun)
  61501856400, #  local_start 1949-12-01 01:00:00 (Thu)
  61513606800, #    local_end 1950-04-16 01:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61513614000, #    utc_start 1950-04-16 03:00:00 (Sun)
  61533399600, #      utc_end 1950-12-01 03:00:00 (Fri)
  61513603200, #  local_start 1950-04-16 00:00:00 (Sun)
  61533388800, #    local_end 1950-12-01 00:00:00 (Fri)
  -10800,
  0,
  'BRT',
      ],
      [
  61533399600, #    utc_start 1950-12-01 03:00:00 (Fri)
  61543850400, #      utc_end 1951-04-01 02:00:00 (Sun)
  61533392400, #  local_start 1950-12-01 01:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61543850400, #    utc_start 1951-04-01 02:00:00 (Sun)
  61564935600, #      utc_end 1951-12-01 03:00:00 (Sat)
  61543839600, #  local_start 1951-03-31 23:00:00 (Sat)
  61564924800, #    local_end 1951-12-01 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  61564935600, #    utc_start 1951-12-01 03:00:00 (Sat)
  61575472800, #      utc_end 1952-04-01 02:00:00 (Tue)
  61564928400, #  local_start 1951-12-01 01:00:00 (Sat)
  61575465600, #    local_end 1952-04-01 00:00:00 (Tue)
  -7200,
  1,
  'BRST',
      ],
      [
  61575472800, #    utc_start 1952-04-01 02:00:00 (Tue)
  61596558000, #      utc_end 1952-12-01 03:00:00 (Mon)
  61575462000, #  local_start 1952-03-31 23:00:00 (Mon)
  61596547200, #    local_end 1952-12-01 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  61596558000, #    utc_start 1952-12-01 03:00:00 (Mon)
  61604330400, #      utc_end 1953-03-01 02:00:00 (Sun)
  61596550800, #  local_start 1952-12-01 01:00:00 (Mon)
  61604323200, #    local_end 1953-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61604330400, #    utc_start 1953-03-01 02:00:00 (Sun)
  61944318000, #      utc_end 1963-12-09 03:00:00 (Mon)
  61604319600, #  local_start 1953-02-28 23:00:00 (Sat)
  61944307200, #    local_end 1963-12-09 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  61944318000, #    utc_start 1963-12-09 03:00:00 (Mon)
  61951485600, #      utc_end 1964-03-01 02:00:00 (Sun)
  61944310800, #  local_start 1963-12-09 01:00:00 (Mon)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61951485600, #    utc_start 1964-03-01 02:00:00 (Sun)
  61980519600, #      utc_end 1965-01-31 03:00:00 (Sun)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61980508800, #    local_end 1965-01-31 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  61980519600, #    utc_start 1965-01-31 03:00:00 (Sun)
  61985613600, #      utc_end 1965-03-31 02:00:00 (Wed)
  61980512400, #  local_start 1965-01-31 01:00:00 (Sun)
  61985606400, #    local_end 1965-03-31 00:00:00 (Wed)
  -7200,
  1,
  'BRST',
      ],
      [
  61985613600, #    utc_start 1965-03-31 02:00:00 (Wed)
  62006785200, #      utc_end 1965-12-01 03:00:00 (Wed)
  61985602800, #  local_start 1965-03-30 23:00:00 (Tue)
  62006774400, #    local_end 1965-12-01 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  62006785200, #    utc_start 1965-12-01 03:00:00 (Wed)
  62014557600, #      utc_end 1966-03-01 02:00:00 (Tue)
  62006778000, #  local_start 1965-12-01 01:00:00 (Wed)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -7200,
  1,
  'BRST',
      ],
      [
  62014557600, #    utc_start 1966-03-01 02:00:00 (Tue)
  62035729200, #      utc_end 1966-11-01 03:00:00 (Tue)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62035718400, #    local_end 1966-11-01 00:00:00 (Tue)
  -10800,
  0,
  'BRT',
      ],
      [
  62035729200, #    utc_start 1966-11-01 03:00:00 (Tue)
  62046093600, #      utc_end 1967-03-01 02:00:00 (Wed)
  62035722000, #  local_start 1966-11-01 01:00:00 (Tue)
  62046086400, #    local_end 1967-03-01 00:00:00 (Wed)
  -7200,
  1,
  'BRST',
      ],
      [
  62046093600, #    utc_start 1967-03-01 02:00:00 (Wed)
  62067265200, #      utc_end 1967-11-01 03:00:00 (Wed)
  62046082800, #  local_start 1967-02-28 23:00:00 (Tue)
  62067254400, #    local_end 1967-11-01 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  62067265200, #    utc_start 1967-11-01 03:00:00 (Wed)
  62077716000, #      utc_end 1968-03-01 02:00:00 (Fri)
  62067258000, #  local_start 1967-11-01 01:00:00 (Wed)
  62077708800, #    local_end 1968-03-01 00:00:00 (Fri)
  -7200,
  1,
  'BRST',
      ],
      [
  62077716000, #    utc_start 1968-03-01 02:00:00 (Fri)
  62635431600, #      utc_end 1985-11-02 03:00:00 (Sat)
  62077705200, #  local_start 1968-02-29 23:00:00 (Thu)
  62635420800, #    local_end 1985-11-02 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  62635431600, #    utc_start 1985-11-02 03:00:00 (Sat)
  62646919200, #      utc_end 1986-03-15 02:00:00 (Sat)
  62635424400, #  local_start 1985-11-02 01:00:00 (Sat)
  62646912000, #    local_end 1986-03-15 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  62646919200, #    utc_start 1986-03-15 02:00:00 (Sat)
  62666276400, #      utc_end 1986-10-25 03:00:00 (Sat)
  62646908400, #  local_start 1986-03-14 23:00:00 (Fri)
  62666265600, #    local_end 1986-10-25 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  62666276400, #    utc_start 1986-10-25 03:00:00 (Sat)
  62675949600, #      utc_end 1987-02-14 02:00:00 (Sat)
  62666269200, #  local_start 1986-10-25 01:00:00 (Sat)
  62675942400, #    local_end 1987-02-14 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  62675949600, #    utc_start 1987-02-14 02:00:00 (Sat)
  62697812400, #      utc_end 1987-10-25 03:00:00 (Sun)
  62675938800, #  local_start 1987-02-13 23:00:00 (Fri)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62697812400, #    utc_start 1987-10-25 03:00:00 (Sun)
  62706880800, #      utc_end 1988-02-07 02:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62706873600, #    local_end 1988-02-07 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62706880800, #    utc_start 1988-02-07 02:00:00 (Sun)
  62728657200, #      utc_end 1988-10-16 03:00:00 (Sun)
  62706870000, #  local_start 1988-02-06 23:00:00 (Sat)
  62728646400, #    local_end 1988-10-16 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62728657200, #    utc_start 1988-10-16 03:00:00 (Sun)
  62737725600, #      utc_end 1989-01-29 02:00:00 (Sun)
  62728650000, #  local_start 1988-10-16 01:00:00 (Sun)
  62737718400, #    local_end 1989-01-29 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62737725600, #    utc_start 1989-01-29 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62737714800, #  local_start 1989-01-28 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62770384800, #      utc_end 1990-02-11 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62770377600, #    local_end 1990-02-11 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62770384800, #    utc_start 1990-02-11 02:00:00 (Sun)
  62789223600, #      utc_end 1990-09-17 03:00:00 (Mon)
  62770374000, #  local_start 1990-02-10 23:00:00 (Sat)
  62789212800, #    local_end 1990-09-17 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  62789223600, #    utc_start 1990-09-17 03:00:00 (Mon)
  62949236400, #      utc_end 1995-10-13 03:00:00 (Fri)
  62789212800, #  local_start 1990-09-17 00:00:00 (Mon)
  62949225600, #    local_end 1995-10-13 00:00:00 (Fri)
  -10800,
  0,
  'BRT',
      ],
      [
  62949236400, #    utc_start 1995-10-13 03:00:00 (Fri)
  62949409200, #      utc_end 1995-10-15 03:00:00 (Sun)
  62949225600, #  local_start 1995-10-13 00:00:00 (Fri)
  62949398400, #    local_end 1995-10-15 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62949409200, #    utc_start 1995-10-15 03:00:00 (Sun)
  62959687200, #      utc_end 1996-02-11 02:00:00 (Sun)
  62949402000, #  local_start 1995-10-15 01:00:00 (Sun)
  62959680000, #    local_end 1996-02-11 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62959687200, #    utc_start 1996-02-11 02:00:00 (Sun)
  62977489200, #      utc_end 1996-09-04 03:00:00 (Wed)
  62959676400, #  local_start 1996-02-10 23:00:00 (Sat)
  62977478400, #    local_end 1996-09-04 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  62977489200, #    utc_start 1996-09-04 03:00:00 (Wed)
  63074343600, #      utc_end 1999-09-30 03:00:00 (Thu)
  62977478400, #  local_start 1996-09-04 00:00:00 (Wed)
  63074332800, #    local_end 1999-09-30 00:00:00 (Thu)
  -10800,
  0,
  'BRT',
      ],
      [
  63074343600, #    utc_start 1999-09-30 03:00:00 (Thu)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  63074332800, #  local_start 1999-09-30 00:00:00 (Thu)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087300000, #      utc_end 2000-02-27 02:00:00 (Sun)
  63074595600, #  local_start 1999-10-03 01:00:00 (Sun)
  63087292800, #    local_end 2000-02-27 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63087300000, #    utc_start 2000-02-27 02:00:00 (Sun)
  63106657200, #      utc_end 2000-10-08 03:00:00 (Sun)
  63087289200, #  local_start 2000-02-26 23:00:00 (Sat)
  63106646400, #    local_end 2000-10-08 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63106657200, #    utc_start 2000-10-08 03:00:00 (Sun)
  63107863200, #      utc_end 2000-10-22 02:00:00 (Sun)
  63106650000, #  local_start 2000-10-08 01:00:00 (Sun)
  63107856000, #    local_end 2000-10-22 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63107863200, #    utc_start 2000-10-22 02:00:00 (Sun)
  63136033200, #      utc_end 2001-09-13 03:00:00 (Thu)
  63107852400, #  local_start 2000-10-21 23:00:00 (Sat)
  63136022400, #    local_end 2001-09-13 00:00:00 (Thu)
  -10800,
  0,
  'BRT',
      ],
      [
  63136033200, #    utc_start 2001-09-13 03:00:00 (Thu)
  63138711600, #      utc_end 2001-10-14 03:00:00 (Sun)
  63136022400, #  local_start 2001-09-13 00:00:00 (Thu)
  63138700800, #    local_end 2001-10-14 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63138711600, #    utc_start 2001-10-14 03:00:00 (Sun)
  63149594400, #      utc_end 2002-02-17 02:00:00 (Sun)
  63138704400, #  local_start 2001-10-14 01:00:00 (Sun)
  63149587200, #    local_end 2002-02-17 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63149594400, #    utc_start 2002-02-17 02:00:00 (Sun)
  63169124400, #      utc_end 2002-10-01 03:00:00 (Tue)
  63149583600, #  local_start 2002-02-16 23:00:00 (Sat)
  63169113600, #    local_end 2002-10-01 00:00:00 (Tue)
  -10800,
  0,
  'BRT',
      ],
      [
  63169124400, #    utc_start 2002-10-01 03:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  63169113600, #  local_start 2002-10-01 00:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'BRT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {20}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_MACEIO

    $main::fatpacked{"DateTime/TimeZone/America/Managua.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_MANAGUA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Managua;
  $DateTime::TimeZone::America::Managua::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Managua::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611182308, #      utc_end 1890-01-01 05:45:08 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -20708,
  0,
  'LMT',
      ],
      [
  59611182308, #    utc_start 1890-01-01 05:45:08 (Wed)
  61014577512, #      utc_end 1934-06-23 05:45:12 (Sat)
  59611161596, #  local_start 1889-12-31 23:59:56 (Tue)
  61014556800, #    local_end 1934-06-23 00:00:00 (Sat)
  -20712,
  0,
  'MMT',
      ],
      [
  61014577512, #    utc_start 1934-06-23 05:45:12 (Sat)
  62240767200, #      utc_end 1973-05-01 06:00:00 (Tue)
  61014555912, #  local_start 1934-06-22 23:45:12 (Fri)
  62240745600, #    local_end 1973-05-01 00:00:00 (Tue)
  -21600,
  0,
  'CST',
      ],
      [
  62240767200, #    utc_start 1973-05-01 06:00:00 (Tue)
  62297442000, #      utc_end 1975-02-16 05:00:00 (Sun)
  62240749200, #  local_start 1973-05-01 01:00:00 (Tue)
  62297424000, #    local_end 1975-02-16 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62297442000, #    utc_start 1975-02-16 05:00:00 (Sun)
  62426268000, #      utc_end 1979-03-18 06:00:00 (Sun)
  62297420400, #  local_start 1975-02-15 23:00:00 (Sat)
  62426246400, #    local_end 1979-03-18 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62426268000, #    utc_start 1979-03-18 06:00:00 (Sun)
  62434818000, #      utc_end 1979-06-25 05:00:00 (Mon)
  62426250000, #  local_start 1979-03-18 01:00:00 (Sun)
  62434800000, #    local_end 1979-06-25 00:00:00 (Mon)
  -18000,
  1,
  'CDT',
      ],
      [
  62434818000, #    utc_start 1979-06-25 05:00:00 (Mon)
  62457717600, #      utc_end 1980-03-16 06:00:00 (Sun)
  62434796400, #  local_start 1979-06-24 23:00:00 (Sun)
  62457696000, #    local_end 1980-03-16 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62457717600, #    utc_start 1980-03-16 06:00:00 (Sun)
  62466267600, #      utc_end 1980-06-23 05:00:00 (Mon)
  62457699600, #  local_start 1980-03-16 01:00:00 (Sun)
  62466249600, #    local_end 1980-06-23 00:00:00 (Mon)
  -18000,
  1,
  'CDT',
      ],
      [
  62466267600, #    utc_start 1980-06-23 05:00:00 (Mon)
  62829943200, #      utc_end 1992-01-01 10:00:00 (Wed)
  62466246000, #  local_start 1980-06-22 23:00:00 (Sun)
  62829921600, #    local_end 1992-01-01 04:00:00 (Wed)
  -21600,
  0,
  'CST',
      ],
      [
  62829943200, #    utc_start 1992-01-01 10:00:00 (Wed)
  62852994000, #      utc_end 1992-09-24 05:00:00 (Thu)
  62829925200, #  local_start 1992-01-01 05:00:00 (Wed)
  62852976000, #    local_end 1992-09-24 00:00:00 (Thu)
  -18000,
  0,
  'EST',
      ],
      [
  62852994000, #    utc_start 1992-09-24 05:00:00 (Thu)
  62861551200, #      utc_end 1993-01-01 06:00:00 (Fri)
  62852972400, #  local_start 1992-09-23 23:00:00 (Wed)
  62861529600, #    local_end 1993-01-01 00:00:00 (Fri)
  -21600,
  0,
  'CST',
      ],
      [
  62861551200, #    utc_start 1993-01-01 06:00:00 (Fri)
  62987778000, #      utc_end 1997-01-01 05:00:00 (Wed)
  62861533200, #  local_start 1993-01-01 01:00:00 (Fri)
  62987760000, #    local_end 1997-01-01 00:00:00 (Wed)
  -18000,
  0,
  'EST',
      ],
      [
  62987778000, #    utc_start 1997-01-01 05:00:00 (Wed)
  63248796000, #      utc_end 2005-04-10 06:00:00 (Sun)
  62987756400, #  local_start 1996-12-31 23:00:00 (Tue)
  63248774400, #    local_end 2005-04-10 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63248796000, #    utc_start 2005-04-10 06:00:00 (Sun)
  63263912400, #      utc_end 2005-10-02 05:00:00 (Sun)
  63248778000, #  local_start 2005-04-10 01:00:00 (Sun)
  63263894400, #    local_end 2005-10-02 00:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63263912400, #    utc_start 2005-10-02 05:00:00 (Sun)
  63282067200, #      utc_end 2006-04-30 08:00:00 (Sun)
  63263890800, #  local_start 2005-10-01 23:00:00 (Sat)
  63282045600, #    local_end 2006-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63282067200, #    utc_start 2006-04-30 08:00:00 (Sun)
  63295365600, #      utc_end 2006-10-01 06:00:00 (Sun)
  63282049200, #  local_start 2006-04-30 03:00:00 (Sun)
  63295347600, #    local_end 2006-10-01 01:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63295365600, #    utc_start 2006-10-01 06:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63295344000, #  local_start 2006-10-01 00:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -21600,
  0,
  'CST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {4}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_MANAGUA

    $main::fatpacked{"DateTime/TimeZone/America/Manaus.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_MANAUS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Manaus;
  $DateTime::TimeZone::America::Manaus::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Manaus::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368472004, #      utc_end 1914-01-01 04:00:04 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  -14404,
  0,
  'LMT',
      ],
      [
  60368472004, #    utc_start 1914-01-01 04:00:04 (Thu)
  60928729200, #      utc_end 1931-10-03 15:00:00 (Sat)
  60368457604, #  local_start 1914-01-01 00:00:04 (Thu)
  60928714800, #    local_end 1931-10-03 11:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  60928729200, #    utc_start 1931-10-03 15:00:00 (Sat)
  60944324400, #      utc_end 1932-04-01 03:00:00 (Fri)
  60928718400, #  local_start 1931-10-03 12:00:00 (Sat)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -10800,
  1,
  'AMST',
      ],
      [
  60944324400, #    utc_start 1932-04-01 03:00:00 (Fri)
  60960312000, #      utc_end 1932-10-03 04:00:00 (Mon)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60960297600, #    local_end 1932-10-03 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  60960312000, #    utc_start 1932-10-03 04:00:00 (Mon)
  60975860400, #      utc_end 1933-04-01 03:00:00 (Sat)
  60960301200, #  local_start 1932-10-03 01:00:00 (Mon)
  60975849600, #    local_end 1933-04-01 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  60975860400, #    utc_start 1933-04-01 03:00:00 (Sat)
  61501867200, #      utc_end 1949-12-01 04:00:00 (Thu)
  60975846000, #  local_start 1933-03-31 23:00:00 (Fri)
  61501852800, #    local_end 1949-12-01 00:00:00 (Thu)
  -14400,
  0,
  'AMT',
      ],
      [
  61501867200, #    utc_start 1949-12-01 04:00:00 (Thu)
  61513617600, #      utc_end 1950-04-16 04:00:00 (Sun)
  61501856400, #  local_start 1949-12-01 01:00:00 (Thu)
  61513606800, #    local_end 1950-04-16 01:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61513617600, #    utc_start 1950-04-16 04:00:00 (Sun)
  61533403200, #      utc_end 1950-12-01 04:00:00 (Fri)
  61513603200, #  local_start 1950-04-16 00:00:00 (Sun)
  61533388800, #    local_end 1950-12-01 00:00:00 (Fri)
  -14400,
  0,
  'AMT',
      ],
      [
  61533403200, #    utc_start 1950-12-01 04:00:00 (Fri)
  61543854000, #      utc_end 1951-04-01 03:00:00 (Sun)
  61533392400, #  local_start 1950-12-01 01:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61543854000, #    utc_start 1951-04-01 03:00:00 (Sun)
  61564939200, #      utc_end 1951-12-01 04:00:00 (Sat)
  61543839600, #  local_start 1951-03-31 23:00:00 (Sat)
  61564924800, #    local_end 1951-12-01 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  61564939200, #    utc_start 1951-12-01 04:00:00 (Sat)
  61575476400, #      utc_end 1952-04-01 03:00:00 (Tue)
  61564928400, #  local_start 1951-12-01 01:00:00 (Sat)
  61575465600, #    local_end 1952-04-01 00:00:00 (Tue)
  -10800,
  1,
  'AMST',
      ],
      [
  61575476400, #    utc_start 1952-04-01 03:00:00 (Tue)
  61596561600, #      utc_end 1952-12-01 04:00:00 (Mon)
  61575462000, #  local_start 1952-03-31 23:00:00 (Mon)
  61596547200, #    local_end 1952-12-01 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  61596561600, #    utc_start 1952-12-01 04:00:00 (Mon)
  61604334000, #      utc_end 1953-03-01 03:00:00 (Sun)
  61596550800, #  local_start 1952-12-01 01:00:00 (Mon)
  61604323200, #    local_end 1953-03-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61604334000, #    utc_start 1953-03-01 03:00:00 (Sun)
  61944321600, #      utc_end 1963-12-09 04:00:00 (Mon)
  61604319600, #  local_start 1953-02-28 23:00:00 (Sat)
  61944307200, #    local_end 1963-12-09 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  61944321600, #    utc_start 1963-12-09 04:00:00 (Mon)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944310800, #  local_start 1963-12-09 01:00:00 (Mon)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61980523200, #      utc_end 1965-01-31 04:00:00 (Sun)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61980508800, #    local_end 1965-01-31 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  61980523200, #    utc_start 1965-01-31 04:00:00 (Sun)
  61985617200, #      utc_end 1965-03-31 03:00:00 (Wed)
  61980512400, #  local_start 1965-01-31 01:00:00 (Sun)
  61985606400, #    local_end 1965-03-31 00:00:00 (Wed)
  -10800,
  1,
  'AMST',
      ],
      [
  61985617200, #    utc_start 1965-03-31 03:00:00 (Wed)
  62006788800, #      utc_end 1965-12-01 04:00:00 (Wed)
  61985602800, #  local_start 1965-03-30 23:00:00 (Tue)
  62006774400, #    local_end 1965-12-01 00:00:00 (Wed)
  -14400,
  0,
  'AMT',
      ],
      [
  62006788800, #    utc_start 1965-12-01 04:00:00 (Wed)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62006778000, #  local_start 1965-12-01 01:00:00 (Wed)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'AMST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62035732800, #      utc_end 1966-11-01 04:00:00 (Tue)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62035718400, #    local_end 1966-11-01 00:00:00 (Tue)
  -14400,
  0,
  'AMT',
      ],
      [
  62035732800, #    utc_start 1966-11-01 04:00:00 (Tue)
  62046097200, #      utc_end 1967-03-01 03:00:00 (Wed)
  62035722000, #  local_start 1966-11-01 01:00:00 (Tue)
  62046086400, #    local_end 1967-03-01 00:00:00 (Wed)
  -10800,
  1,
  'AMST',
      ],
      [
  62046097200, #    utc_start 1967-03-01 03:00:00 (Wed)
  62067268800, #      utc_end 1967-11-01 04:00:00 (Wed)
  62046082800, #  local_start 1967-02-28 23:00:00 (Tue)
  62067254400, #    local_end 1967-11-01 00:00:00 (Wed)
  -14400,
  0,
  'AMT',
      ],
      [
  62067268800, #    utc_start 1967-11-01 04:00:00 (Wed)
  62077719600, #      utc_end 1968-03-01 03:00:00 (Fri)
  62067258000, #  local_start 1967-11-01 01:00:00 (Wed)
  62077708800, #    local_end 1968-03-01 00:00:00 (Fri)
  -10800,
  1,
  'AMST',
      ],
      [
  62077719600, #    utc_start 1968-03-01 03:00:00 (Fri)
  62635435200, #      utc_end 1985-11-02 04:00:00 (Sat)
  62077705200, #  local_start 1968-02-29 23:00:00 (Thu)
  62635420800, #    local_end 1985-11-02 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  62635435200, #    utc_start 1985-11-02 04:00:00 (Sat)
  62646922800, #      utc_end 1986-03-15 03:00:00 (Sat)
  62635424400, #  local_start 1985-11-02 01:00:00 (Sat)
  62646912000, #    local_end 1986-03-15 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  62646922800, #    utc_start 1986-03-15 03:00:00 (Sat)
  62666280000, #      utc_end 1986-10-25 04:00:00 (Sat)
  62646908400, #  local_start 1986-03-14 23:00:00 (Fri)
  62666265600, #    local_end 1986-10-25 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  62666280000, #    utc_start 1986-10-25 04:00:00 (Sat)
  62675953200, #      utc_end 1987-02-14 03:00:00 (Sat)
  62666269200, #  local_start 1986-10-25 01:00:00 (Sat)
  62675942400, #    local_end 1987-02-14 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  62675953200, #    utc_start 1987-02-14 03:00:00 (Sat)
  62697816000, #      utc_end 1987-10-25 04:00:00 (Sun)
  62675938800, #  local_start 1987-02-13 23:00:00 (Fri)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62697816000, #    utc_start 1987-10-25 04:00:00 (Sun)
  62706884400, #      utc_end 1988-02-07 03:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62706873600, #    local_end 1988-02-07 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62706884400, #    utc_start 1988-02-07 03:00:00 (Sun)
  62725723200, #      utc_end 1988-09-12 04:00:00 (Mon)
  62706870000, #  local_start 1988-02-06 23:00:00 (Sat)
  62725708800, #    local_end 1988-09-12 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  62725723200, #    utc_start 1988-09-12 04:00:00 (Mon)
  62884872000, #      utc_end 1993-09-28 04:00:00 (Tue)
  62725708800, #  local_start 1988-09-12 00:00:00 (Mon)
  62884857600, #    local_end 1993-09-28 00:00:00 (Tue)
  -14400,
  0,
  'AMT',
      ],
      [
  62884872000, #    utc_start 1993-09-28 04:00:00 (Tue)
  62886513600, #      utc_end 1993-10-17 04:00:00 (Sun)
  62884857600, #  local_start 1993-09-28 00:00:00 (Tue)
  62886499200, #    local_end 1993-10-17 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62886513600, #    utc_start 1993-10-17 04:00:00 (Sun)
  62897396400, #      utc_end 1994-02-20 03:00:00 (Sun)
  62886502800, #  local_start 1993-10-17 01:00:00 (Sun)
  62897385600, #    local_end 1994-02-20 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62897396400, #    utc_start 1994-02-20 03:00:00 (Sun)
  62915889600, #      utc_end 1994-09-22 04:00:00 (Thu)
  62897382000, #  local_start 1994-02-19 23:00:00 (Sat)
  62915875200, #    local_end 1994-09-22 00:00:00 (Thu)
  -14400,
  0,
  'AMT',
      ],
      [
  62915889600, #    utc_start 1994-09-22 04:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  62915875200, #  local_start 1994-09-22 00:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  -14400,
  0,
  'AMT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {15}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_MANAUS

    $main::fatpacked{"DateTime/TimeZone/America/Martinique.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_MARTINIQUE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Martinique;
  $DateTime::TimeZone::America::Martinique::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Martinique::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611176260, #      utc_end 1890-01-01 04:04:20 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -14660,
  0,
  'LMT',
      ],
      [
  59611176260, #    utc_start 1890-01-01 04:04:20 (Wed)
  60284145860, #      utc_end 1911-05-01 04:04:20 (Mon)
  59611161600, #  local_start 1890-01-01 00:00:00 (Wed)
  60284131200, #    local_end 1911-05-01 00:00:00 (Mon)
  -14660,
  0,
  'FFMT',
      ],
      [
  60284145860, #    utc_start 1911-05-01 04:04:20 (Mon)
  62459524800, #      utc_end 1980-04-06 04:00:00 (Sun)
  60284131460, #  local_start 1911-05-01 00:04:20 (Mon)
  62459510400, #    local_end 1980-04-06 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62459524800, #    utc_start 1980-04-06 04:00:00 (Sun)
  62474641200, #      utc_end 1980-09-28 03:00:00 (Sun)
  62459514000, #  local_start 1980-04-06 01:00:00 (Sun)
  62474630400, #    local_end 1980-09-28 00:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62474641200, #    utc_start 1980-09-28 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  62474626800, #  local_start 1980-09-27 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -14400,
  0,
  'AST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {1}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_MARTINIQUE

    $main::fatpacked{"DateTime/TimeZone/America/Matamoros.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_MATAMOROS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Matamoros;
  $DateTime::TimeZone::America::Matamoros::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Matamoros::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60620940000, #      utc_end 1922-01-01 06:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60620916000, #    local_end 1921-12-31 23:20:00 (Sat)
  -24000,
  0,
  'LMT',
      ],
      [
  60620940000, #    utc_start 1922-01-01 06:00:00 (Sun)
  62703698400, #      utc_end 1988-01-01 06:00:00 (Fri)
  60620918400, #  local_start 1922-01-01 00:00:00 (Sun)
  62703676800, #    local_end 1988-01-01 00:00:00 (Fri)
  -21600,
  0,
  'CST',
      ],
      [
  62703698400, #    utc_start 1988-01-01 06:00:00 (Fri)
  62711740800, #      utc_end 1988-04-03 08:00:00 (Sun)
  62703676800, #  local_start 1988-01-01 00:00:00 (Fri)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62711740800, #    utc_start 1988-04-03 08:00:00 (Sun)
  62729881200, #      utc_end 1988-10-30 07:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62729881200, #    utc_start 1988-10-30 07:00:00 (Sun)
  62735320800, #      utc_end 1989-01-01 06:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62735299200, #    local_end 1989-01-01 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62735320800, #    utc_start 1989-01-01 06:00:00 (Sun)
  62964547200, #      utc_end 1996-04-07 08:00:00 (Sun)
  62735299200, #  local_start 1989-01-01 00:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62964547200, #    utc_start 1996-04-07 08:00:00 (Sun)
  62982082800, #      utc_end 1996-10-27 07:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62982082800, #    utc_start 1996-10-27 07:00:00 (Sun)
  62995996800, #      utc_end 1997-04-06 08:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62995996800, #    utc_start 1997-04-06 08:00:00 (Sun)
  63013532400, #      utc_end 1997-10-26 07:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63013532400, #    utc_start 1997-10-26 07:00:00 (Sun)
  63027446400, #      utc_end 1998-04-05 08:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63027446400, #    utc_start 1998-04-05 08:00:00 (Sun)
  63044982000, #      utc_end 1998-10-25 07:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63044982000, #    utc_start 1998-10-25 07:00:00 (Sun)
  63058896000, #      utc_end 1999-04-04 08:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63058896000, #    utc_start 1999-04-04 08:00:00 (Sun)
  63077036400, #      utc_end 1999-10-31 07:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63077036400, #    utc_start 1999-10-31 07:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108486000, #      utc_end 2000-10-29 07:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108486000, #    utc_start 2000-10-29 07:00:00 (Sun)
  63124819200, #      utc_end 2001-05-06 08:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63124797600, #    local_end 2001-05-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63124819200, #    utc_start 2001-05-06 08:00:00 (Sun)
  63137516400, #      utc_end 2001-09-30 07:00:00 (Sun)
  63124801200, #  local_start 2001-05-06 03:00:00 (Sun)
  63137498400, #    local_end 2001-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63137516400, #    utc_start 2001-09-30 07:00:00 (Sun)
  63153849600, #      utc_end 2002-04-07 08:00:00 (Sun)
  63137494800, #  local_start 2001-09-30 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63153849600, #    utc_start 2002-04-07 08:00:00 (Sun)
  63171385200, #      utc_end 2002-10-27 07:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63171385200, #    utc_start 2002-10-27 07:00:00 (Sun)
  63185299200, #      utc_end 2003-04-06 08:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63185299200, #    utc_start 2003-04-06 08:00:00 (Sun)
  63202834800, #      utc_end 2003-10-26 07:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63202834800, #    utc_start 2003-10-26 07:00:00 (Sun)
  63216748800, #      utc_end 2004-04-04 08:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63216748800, #    utc_start 2004-04-04 08:00:00 (Sun)
  63234889200, #      utc_end 2004-10-31 07:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63234889200, #    utc_start 2004-10-31 07:00:00 (Sun)
  63248198400, #      utc_end 2005-04-03 08:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63248198400, #    utc_start 2005-04-03 08:00:00 (Sun)
  63266338800, #      utc_end 2005-10-30 07:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63266338800, #    utc_start 2005-10-30 07:00:00 (Sun)
  63279648000, #      utc_end 2006-04-02 08:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63279648000, #    utc_start 2006-04-02 08:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63311097600, #      utc_end 2007-04-01 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63311076000, #    local_end 2007-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63311097600, #    utc_start 2007-04-01 08:00:00 (Sun)
  63329238000, #      utc_end 2007-10-28 07:00:00 (Sun)
  63311079600, #  local_start 2007-04-01 03:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329238000, #    utc_start 2007-10-28 07:00:00 (Sun)
  63343152000, #      utc_end 2008-04-06 08:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63343130400, #    local_end 2008-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63343152000, #    utc_start 2008-04-06 08:00:00 (Sun)
  63360687600, #      utc_end 2008-10-26 07:00:00 (Sun)
  63343134000, #  local_start 2008-04-06 03:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63360687600, #    utc_start 2008-10-26 07:00:00 (Sun)
  63374601600, #      utc_end 2009-04-05 08:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63374580000, #    local_end 2009-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63374601600, #    utc_start 2009-04-05 08:00:00 (Sun)
  63392137200, #      utc_end 2009-10-25 07:00:00 (Sun)
  63374583600, #  local_start 2009-04-05 03:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63392137200, #    utc_start 2009-10-25 07:00:00 (Sun)
  63398008800, #      utc_end 2010-01-01 06:00:00 (Fri)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63397987200, #    local_end 2010-01-01 00:00:00 (Fri)
  -21600,
  0,
  'CST',
      ],
      [
  63398008800, #    utc_start 2010-01-01 06:00:00 (Fri)
  63404236800, #      utc_end 2010-03-14 08:00:00 (Sun)
  63397987200, #  local_start 2010-01-01 00:00:00 (Fri)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63404236800, #    utc_start 2010-03-14 08:00:00 (Sun)
  63424796400, #      utc_end 2010-11-07 07:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424796400, #    utc_start 2010-11-07 07:00:00 (Sun)
  63435686400, #      utc_end 2011-03-13 08:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63435686400, #    utc_start 2011-03-13 08:00:00 (Sun)
  63456246000, #      utc_end 2011-11-06 07:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63456246000, #    utc_start 2011-11-06 07:00:00 (Sun)
  63467136000, #      utc_end 2012-03-11 08:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63467136000, #    utc_start 2012-03-11 08:00:00 (Sun)
  63487695600, #      utc_end 2012-11-04 07:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487695600, #    utc_start 2012-11-04 07:00:00 (Sun)
  63498585600, #      utc_end 2013-03-10 08:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63498585600, #    utc_start 2013-03-10 08:00:00 (Sun)
  63519145200, #      utc_end 2013-11-03 07:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63519145200, #    utc_start 2013-11-03 07:00:00 (Sun)
  63530035200, #      utc_end 2014-03-09 08:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63530035200, #    utc_start 2014-03-09 08:00:00 (Sun)
  63550594800, #      utc_end 2014-11-02 07:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63550594800, #    utc_start 2014-11-02 07:00:00 (Sun)
  63561484800, #      utc_end 2015-03-08 08:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63561484800, #    utc_start 2015-03-08 08:00:00 (Sun)
  63582044400, #      utc_end 2015-11-01 07:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63582044400, #    utc_start 2015-11-01 07:00:00 (Sun)
  63593539200, #      utc_end 2016-03-13 08:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63593539200, #    utc_start 2016-03-13 08:00:00 (Sun)
  63614098800, #      utc_end 2016-11-06 07:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63614098800, #    utc_start 2016-11-06 07:00:00 (Sun)
  63624988800, #      utc_end 2017-03-12 08:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63624988800, #    utc_start 2017-03-12 08:00:00 (Sun)
  63645548400, #      utc_end 2017-11-05 07:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63645548400, #    utc_start 2017-11-05 07:00:00 (Sun)
  63656438400, #      utc_end 2018-03-11 08:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63656438400, #    utc_start 2018-03-11 08:00:00 (Sun)
  63676998000, #      utc_end 2018-11-04 07:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676998000, #    utc_start 2018-11-04 07:00:00 (Sun)
  63687888000, #      utc_end 2019-03-10 08:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63687888000, #    utc_start 2019-03-10 08:00:00 (Sun)
  63708447600, #      utc_end 2019-11-03 07:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63708447600, #    utc_start 2019-11-03 07:00:00 (Sun)
  63719337600, #      utc_end 2020-03-08 08:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63719337600, #    utc_start 2020-03-08 08:00:00 (Sun)
  63739897200, #      utc_end 2020-11-01 07:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739897200, #    utc_start 2020-11-01 07:00:00 (Sun)
  63751392000, #      utc_end 2021-03-14 08:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63751392000, #    utc_start 2021-03-14 08:00:00 (Sun)
  63771951600, #      utc_end 2021-11-07 07:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771951600, #    utc_start 2021-11-07 07:00:00 (Sun)
  63782841600, #      utc_end 2022-03-13 08:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63782841600, #    utc_start 2022-03-13 08:00:00 (Sun)
  63803401200, #      utc_end 2022-11-06 07:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63803401200, #    utc_start 2022-11-06 07:00:00 (Sun)
  63814291200, #      utc_end 2023-03-12 08:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63814291200, #    utc_start 2023-03-12 08:00:00 (Sun)
  63834850800, #      utc_end 2023-11-05 07:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834850800, #    utc_start 2023-11-05 07:00:00 (Sun)
  63845740800, #      utc_end 2024-03-10 08:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63845740800, #    utc_start 2024-03-10 08:00:00 (Sun)
  63866300400, #      utc_end 2024-11-03 07:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63866300400, #    utc_start 2024-11-03 07:00:00 (Sun)
  63877190400, #      utc_end 2025-03-09 08:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63877190400, #    utc_start 2025-03-09 08:00:00 (Sun)
  63897750000, #      utc_end 2025-11-02 07:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897750000, #    utc_start 2025-11-02 07:00:00 (Sun)
  63908640000, #      utc_end 2026-03-08 08:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63908640000, #    utc_start 2026-03-08 08:00:00 (Sun)
  63929199600, #      utc_end 2026-11-01 07:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63929199600, #    utc_start 2026-11-01 07:00:00 (Sun)
  63940694400, #      utc_end 2027-03-14 08:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63940694400, #    utc_start 2027-03-14 08:00:00 (Sun)
  63961254000, #      utc_end 2027-11-07 07:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {33}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 733773,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 733773,
      'utc_rd_secs' => 0,
      'utc_year' => 2011
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 733773,
      'local_rd_secs' => 21600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 733773,
      'utc_rd_secs' => 21600,
      'utc_year' => 2011
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_MATAMOROS

    $main::fatpacked{"DateTime/TimeZone/America/Mazatlan.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_MAZATLAN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Mazatlan;
  $DateTime::TimeZone::America::Mazatlan::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Mazatlan::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60620943600, #      utc_end 1922-01-01 07:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60620918060, #    local_end 1921-12-31 23:54:20 (Sat)
  -25540,
  0,
  'LMT',
      ],
      [
  60620943600, #    utc_start 1922-01-01 07:00:00 (Sun)
  60792616800, #      utc_end 1927-06-11 06:00:00 (Sat)
  60620918400, #  local_start 1922-01-01 00:00:00 (Sun)
  60792591600, #    local_end 1927-06-10 23:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60792616800, #    utc_start 1927-06-11 06:00:00 (Sat)
  60900876000, #      utc_end 1930-11-15 06:00:00 (Sat)
  60792595200, #  local_start 1927-06-11 00:00:00 (Sat)
  60900854400, #    local_end 1930-11-15 00:00:00 (Sat)
  -21600,
  0,
  'CST',
      ],
      [
  60900876000, #    utc_start 1930-11-15 06:00:00 (Sat)
  60915391200, #      utc_end 1931-05-02 06:00:00 (Sat)
  60900850800, #  local_start 1930-11-14 23:00:00 (Fri)
  60915366000, #    local_end 1931-05-01 23:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60915391200, #    utc_start 1931-05-02 06:00:00 (Sat)
  60928524000, #      utc_end 1931-10-01 06:00:00 (Thu)
  60915369600, #  local_start 1931-05-02 00:00:00 (Sat)
  60928502400, #    local_end 1931-10-01 00:00:00 (Thu)
  -21600,
  0,
  'CST',
      ],
      [
  60928524000, #    utc_start 1931-10-01 06:00:00 (Thu)
  60944338800, #      utc_end 1932-04-01 07:00:00 (Fri)
  60928498800, #  local_start 1931-09-30 23:00:00 (Wed)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60944338800, #    utc_start 1932-04-01 07:00:00 (Fri)
  61261855200, #      utc_end 1942-04-24 06:00:00 (Fri)
  60944317200, #  local_start 1932-04-01 01:00:00 (Fri)
  61261833600, #    local_end 1942-04-24 00:00:00 (Fri)
  -21600,
  0,
  'CST',
      ],
      [
  61261855200, #    utc_start 1942-04-24 06:00:00 (Fri)
  61474143600, #      utc_end 1949-01-14 07:00:00 (Fri)
  61261830000, #  local_start 1942-04-23 23:00:00 (Thu)
  61474118400, #    local_end 1949-01-14 00:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  61474143600, #    utc_start 1949-01-14 07:00:00 (Fri)
  62135712000, #      utc_end 1970-01-01 08:00:00 (Thu)
  61474114800, #  local_start 1949-01-13 23:00:00 (Thu)
  62135683200, #    local_end 1970-01-01 00:00:00 (Thu)
  -28800,
  0,
  'PST',
      ],
      [
  62135712000, #    utc_start 1970-01-01 08:00:00 (Thu)
  62964550800, #      utc_end 1996-04-07 09:00:00 (Sun)
  62135686800, #  local_start 1970-01-01 01:00:00 (Thu)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62964550800, #    utc_start 1996-04-07 09:00:00 (Sun)
  62982086400, #      utc_end 1996-10-27 08:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62982086400, #    utc_start 1996-10-27 08:00:00 (Sun)
  62996000400, #      utc_end 1997-04-06 09:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62996000400, #    utc_start 1997-04-06 09:00:00 (Sun)
  63013536000, #      utc_end 1997-10-26 08:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63013536000, #    utc_start 1997-10-26 08:00:00 (Sun)
  63027450000, #      utc_end 1998-04-05 09:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63027450000, #    utc_start 1998-04-05 09:00:00 (Sun)
  63044985600, #      utc_end 1998-10-25 08:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63044985600, #    utc_start 1998-10-25 08:00:00 (Sun)
  63058899600, #      utc_end 1999-04-04 09:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63058899600, #    utc_start 1999-04-04 09:00:00 (Sun)
  63077040000, #      utc_end 1999-10-31 08:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63077040000, #    utc_start 1999-10-31 08:00:00 (Sun)
  63090349200, #      utc_end 2000-04-02 09:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63090349200, #    utc_start 2000-04-02 09:00:00 (Sun)
  63108489600, #      utc_end 2000-10-29 08:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63108489600, #    utc_start 2000-10-29 08:00:00 (Sun)
  63124822800, #      utc_end 2001-05-06 09:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63124797600, #    local_end 2001-05-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63124822800, #    utc_start 2001-05-06 09:00:00 (Sun)
  63137520000, #      utc_end 2001-09-30 08:00:00 (Sun)
  63124801200, #  local_start 2001-05-06 03:00:00 (Sun)
  63137498400, #    local_end 2001-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63137520000, #    utc_start 2001-09-30 08:00:00 (Sun)
  63153853200, #      utc_end 2002-04-07 09:00:00 (Sun)
  63137494800, #  local_start 2001-09-30 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63153853200, #    utc_start 2002-04-07 09:00:00 (Sun)
  63171388800, #      utc_end 2002-10-27 08:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63171388800, #    utc_start 2002-10-27 08:00:00 (Sun)
  63185302800, #      utc_end 2003-04-06 09:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63185302800, #    utc_start 2003-04-06 09:00:00 (Sun)
  63202838400, #      utc_end 2003-10-26 08:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63202838400, #    utc_start 2003-10-26 08:00:00 (Sun)
  63216752400, #      utc_end 2004-04-04 09:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63216752400, #    utc_start 2004-04-04 09:00:00 (Sun)
  63234892800, #      utc_end 2004-10-31 08:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63234892800, #    utc_start 2004-10-31 08:00:00 (Sun)
  63248202000, #      utc_end 2005-04-03 09:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63248202000, #    utc_start 2005-04-03 09:00:00 (Sun)
  63266342400, #      utc_end 2005-10-30 08:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63266342400, #    utc_start 2005-10-30 08:00:00 (Sun)
  63279651600, #      utc_end 2006-04-02 09:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63279651600, #    utc_start 2006-04-02 09:00:00 (Sun)
  63297792000, #      utc_end 2006-10-29 08:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63297792000, #    utc_start 2006-10-29 08:00:00 (Sun)
  63311101200, #      utc_end 2007-04-01 09:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63311076000, #    local_end 2007-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63311101200, #    utc_start 2007-04-01 09:00:00 (Sun)
  63329241600, #      utc_end 2007-10-28 08:00:00 (Sun)
  63311079600, #  local_start 2007-04-01 03:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63329241600, #    utc_start 2007-10-28 08:00:00 (Sun)
  63343155600, #      utc_end 2008-04-06 09:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63343130400, #    local_end 2008-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63343155600, #    utc_start 2008-04-06 09:00:00 (Sun)
  63360691200, #      utc_end 2008-10-26 08:00:00 (Sun)
  63343134000, #  local_start 2008-04-06 03:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63360691200, #    utc_start 2008-10-26 08:00:00 (Sun)
  63374605200, #      utc_end 2009-04-05 09:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63374580000, #    local_end 2009-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63374605200, #    utc_start 2009-04-05 09:00:00 (Sun)
  63392140800, #      utc_end 2009-10-25 08:00:00 (Sun)
  63374583600, #  local_start 2009-04-05 03:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63392140800, #    utc_start 2009-10-25 08:00:00 (Sun)
  63406054800, #      utc_end 2010-04-04 09:00:00 (Sun)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63406029600, #    local_end 2010-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63406054800, #    utc_start 2010-04-04 09:00:00 (Sun)
  63424195200, #      utc_end 2010-10-31 08:00:00 (Sun)
  63406033200, #  local_start 2010-04-04 03:00:00 (Sun)
  63424173600, #    local_end 2010-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63424195200, #    utc_start 2010-10-31 08:00:00 (Sun)
  63437504400, #      utc_end 2011-04-03 09:00:00 (Sun)
  63424170000, #  local_start 2010-10-31 01:00:00 (Sun)
  63437479200, #    local_end 2011-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63437504400, #    utc_start 2011-04-03 09:00:00 (Sun)
  63455644800, #      utc_end 2011-10-30 08:00:00 (Sun)
  63437482800, #  local_start 2011-04-03 03:00:00 (Sun)
  63455623200, #    local_end 2011-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63455644800, #    utc_start 2011-10-30 08:00:00 (Sun)
  63468954000, #      utc_end 2012-04-01 09:00:00 (Sun)
  63455619600, #  local_start 2011-10-30 01:00:00 (Sun)
  63468928800, #    local_end 2012-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63468954000, #    utc_start 2012-04-01 09:00:00 (Sun)
  63487094400, #      utc_end 2012-10-28 08:00:00 (Sun)
  63468932400, #  local_start 2012-04-01 03:00:00 (Sun)
  63487072800, #    local_end 2012-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63487094400, #    utc_start 2012-10-28 08:00:00 (Sun)
  63501008400, #      utc_end 2013-04-07 09:00:00 (Sun)
  63487069200, #  local_start 2012-10-28 01:00:00 (Sun)
  63500983200, #    local_end 2013-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63501008400, #    utc_start 2013-04-07 09:00:00 (Sun)
  63518544000, #      utc_end 2013-10-27 08:00:00 (Sun)
  63500986800, #  local_start 2013-04-07 03:00:00 (Sun)
  63518522400, #    local_end 2013-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63518544000, #    utc_start 2013-10-27 08:00:00 (Sun)
  63532458000, #      utc_end 2014-04-06 09:00:00 (Sun)
  63518518800, #  local_start 2013-10-27 01:00:00 (Sun)
  63532432800, #    local_end 2014-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63532458000, #    utc_start 2014-04-06 09:00:00 (Sun)
  63549993600, #      utc_end 2014-10-26 08:00:00 (Sun)
  63532436400, #  local_start 2014-04-06 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63549993600, #    utc_start 2014-10-26 08:00:00 (Sun)
  63563907600, #      utc_end 2015-04-05 09:00:00 (Sun)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63563882400, #    local_end 2015-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63563907600, #    utc_start 2015-04-05 09:00:00 (Sun)
  63581443200, #      utc_end 2015-10-25 08:00:00 (Sun)
  63563886000, #  local_start 2015-04-05 03:00:00 (Sun)
  63581421600, #    local_end 2015-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63581443200, #    utc_start 2015-10-25 08:00:00 (Sun)
  63595357200, #      utc_end 2016-04-03 09:00:00 (Sun)
  63581418000, #  local_start 2015-10-25 01:00:00 (Sun)
  63595332000, #    local_end 2016-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63595357200, #    utc_start 2016-04-03 09:00:00 (Sun)
  63613497600, #      utc_end 2016-10-30 08:00:00 (Sun)
  63595335600, #  local_start 2016-04-03 03:00:00 (Sun)
  63613476000, #    local_end 2016-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63613497600, #    utc_start 2016-10-30 08:00:00 (Sun)
  63626806800, #      utc_end 2017-04-02 09:00:00 (Sun)
  63613472400, #  local_start 2016-10-30 01:00:00 (Sun)
  63626781600, #    local_end 2017-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63626806800, #    utc_start 2017-04-02 09:00:00 (Sun)
  63644947200, #      utc_end 2017-10-29 08:00:00 (Sun)
  63626785200, #  local_start 2017-04-02 03:00:00 (Sun)
  63644925600, #    local_end 2017-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63644947200, #    utc_start 2017-10-29 08:00:00 (Sun)
  63658256400, #      utc_end 2018-04-01 09:00:00 (Sun)
  63644922000, #  local_start 2017-10-29 01:00:00 (Sun)
  63658231200, #    local_end 2018-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63658256400, #    utc_start 2018-04-01 09:00:00 (Sun)
  63676396800, #      utc_end 2018-10-28 08:00:00 (Sun)
  63658234800, #  local_start 2018-04-01 03:00:00 (Sun)
  63676375200, #    local_end 2018-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63676396800, #    utc_start 2018-10-28 08:00:00 (Sun)
  63690310800, #      utc_end 2019-04-07 09:00:00 (Sun)
  63676371600, #  local_start 2018-10-28 01:00:00 (Sun)
  63690285600, #    local_end 2019-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63690310800, #    utc_start 2019-04-07 09:00:00 (Sun)
  63707846400, #      utc_end 2019-10-27 08:00:00 (Sun)
  63690289200, #  local_start 2019-04-07 03:00:00 (Sun)
  63707824800, #    local_end 2019-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63707846400, #    utc_start 2019-10-27 08:00:00 (Sun)
  63721760400, #      utc_end 2020-04-05 09:00:00 (Sun)
  63707821200, #  local_start 2019-10-27 01:00:00 (Sun)
  63721735200, #    local_end 2020-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63721760400, #    utc_start 2020-04-05 09:00:00 (Sun)
  63739296000, #      utc_end 2020-10-25 08:00:00 (Sun)
  63721738800, #  local_start 2020-04-05 03:00:00 (Sun)
  63739274400, #    local_end 2020-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63739296000, #    utc_start 2020-10-25 08:00:00 (Sun)
  63753210000, #      utc_end 2021-04-04 09:00:00 (Sun)
  63739270800, #  local_start 2020-10-25 01:00:00 (Sun)
  63753184800, #    local_end 2021-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63753210000, #    utc_start 2021-04-04 09:00:00 (Sun)
  63771350400, #      utc_end 2021-10-31 08:00:00 (Sun)
  63753188400, #  local_start 2021-04-04 03:00:00 (Sun)
  63771328800, #    local_end 2021-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63771350400, #    utc_start 2021-10-31 08:00:00 (Sun)
  63784659600, #      utc_end 2022-04-03 09:00:00 (Sun)
  63771325200, #  local_start 2021-10-31 01:00:00 (Sun)
  63784634400, #    local_end 2022-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63784659600, #    utc_start 2022-04-03 09:00:00 (Sun)
  63802800000, #      utc_end 2022-10-30 08:00:00 (Sun)
  63784638000, #  local_start 2022-04-03 03:00:00 (Sun)
  63802778400, #    local_end 2022-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63802800000, #    utc_start 2022-10-30 08:00:00 (Sun)
  63816109200, #      utc_end 2023-04-02 09:00:00 (Sun)
  63802774800, #  local_start 2022-10-30 01:00:00 (Sun)
  63816084000, #    local_end 2023-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63816109200, #    utc_start 2023-04-02 09:00:00 (Sun)
  63834249600, #      utc_end 2023-10-29 08:00:00 (Sun)
  63816087600, #  local_start 2023-04-02 03:00:00 (Sun)
  63834228000, #    local_end 2023-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63834249600, #    utc_start 2023-10-29 08:00:00 (Sun)
  63848163600, #      utc_end 2024-04-07 09:00:00 (Sun)
  63834224400, #  local_start 2023-10-29 01:00:00 (Sun)
  63848138400, #    local_end 2024-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63848163600, #    utc_start 2024-04-07 09:00:00 (Sun)
  63865699200, #      utc_end 2024-10-27 08:00:00 (Sun)
  63848142000, #  local_start 2024-04-07 03:00:00 (Sun)
  63865677600, #    local_end 2024-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63865699200, #    utc_start 2024-10-27 08:00:00 (Sun)
  63879613200, #      utc_end 2025-04-06 09:00:00 (Sun)
  63865674000, #  local_start 2024-10-27 01:00:00 (Sun)
  63879588000, #    local_end 2025-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63879613200, #    utc_start 2025-04-06 09:00:00 (Sun)
  63897148800, #      utc_end 2025-10-26 08:00:00 (Sun)
  63879591600, #  local_start 2025-04-06 03:00:00 (Sun)
  63897127200, #    local_end 2025-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63897148800, #    utc_start 2025-10-26 08:00:00 (Sun)
  63911062800, #      utc_end 2026-04-05 09:00:00 (Sun)
  63897123600, #  local_start 2025-10-26 01:00:00 (Sun)
  63911037600, #    local_end 2026-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63911062800, #    utc_start 2026-04-05 09:00:00 (Sun)
  63928598400, #      utc_end 2026-10-25 08:00:00 (Sun)
  63911041200, #  local_start 2026-04-05 03:00:00 (Sun)
  63928576800, #    local_end 2026-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63928598400, #    utc_start 2026-10-25 08:00:00 (Sun)
  63942512400, #      utc_end 2027-04-04 09:00:00 (Sun)
  63928573200, #  local_start 2026-10-25 01:00:00 (Sun)
  63942487200, #    local_end 2027-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63942512400, #    utc_start 2027-04-04 09:00:00 (Sun)
  63960652800, #      utc_end 2027-10-31 08:00:00 (Sun)
  63942490800, #  local_start 2027-04-04 03:00:00 (Sun)
  63960631200, #    local_end 2027-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {32}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -25200 }
  
  my $last_observance = bless( {
    'format' => 'M%sT',
    'gmtoff' => '-7:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 719163,
      'local_rd_secs' => 3600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 719163,
      'utc_rd_secs' => 3600,
      'utc_year' => 1971
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -25200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 719163,
      'local_rd_secs' => 28800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 719163,
      'utc_rd_secs' => 28800,
      'utc_year' => 1971
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2002',
      'in' => 'Apr',
      'letter' => 'D',
      'name' => 'Mexico',
      'offset_from_std' => 3600,
      'on' => 'Sun>=1',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2002',
      'in' => 'Oct',
      'letter' => 'S',
      'name' => 'Mexico',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_MAZATLAN

    $main::fatpacked{"DateTime/TimeZone/America/Menominee.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_MENOMINEE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Menominee;
  $DateTime::TimeZone::America::Menominee::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Menominee::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59475923427, #      utc_end 1885-09-18 17:50:27 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59475902400, #    local_end 1885-09-18 12:00:00 (Fri)
  -21027,
  0,
  'LMT',
      ],
      [
  59475923427, #    utc_start 1885-09-18 17:50:27 (Fri)
  60502406400, #      utc_end 1918-03-31 08:00:00 (Sun)
  59475901827, #  local_start 1885-09-18 11:50:27 (Fri)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60502406400, #    utc_start 1918-03-31 08:00:00 (Sun)
  60520546800, #      utc_end 1918-10-27 07:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60520546800, #    utc_start 1918-10-27 07:00:00 (Sun)
  60533856000, #      utc_end 1919-03-30 08:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60533856000, #    utc_start 1919-03-30 08:00:00 (Sun)
  60551996400, #      utc_end 1919-10-26 07:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60551996400, #    utc_start 1919-10-26 07:00:00 (Sun)
  61255468800, #      utc_end 1942-02-09 08:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61255468800, #    utc_start 1942-02-09 08:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366269600, #    local_end 1945-08-14 18:00:00 (Tue)
  -18000,
  1,
  'CWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370290800, #      utc_end 1945-09-30 07:00:00 (Sun)
  61366269600, #  local_start 1945-08-14 18:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CPT',
      ],
      [
  61370290800, #    utc_start 1945-09-30 07:00:00 (Sun)
  61378322400, #      utc_end 1946-01-01 06:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -21600,
  0,
  'CST',
      ],
      [
  61378322400, #    utc_start 1946-01-01 06:00:00 (Tue)
  61388438400, #      utc_end 1946-04-28 08:00:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61388416800, #    local_end 1946-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61388438400, #    utc_start 1946-04-28 08:00:00 (Sun)
  61401740400, #      utc_end 1946-09-29 07:00:00 (Sun)
  61388420400, #  local_start 1946-04-28 03:00:00 (Sun)
  61401722400, #    local_end 1946-09-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61401740400, #    utc_start 1946-09-29 07:00:00 (Sun)
  62019244800, #      utc_end 1966-04-24 08:00:00 (Sun)
  61401718800, #  local_start 1946-09-29 01:00:00 (Sun)
  62019223200, #    local_end 1966-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62019244800, #    utc_start 1966-04-24 08:00:00 (Sun)
  62035570800, #      utc_end 1966-10-30 07:00:00 (Sun)
  62019226800, #  local_start 1966-04-24 03:00:00 (Sun)
  62035552800, #    local_end 1966-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62035570800, #    utc_start 1966-10-30 07:00:00 (Sun)
  62114198400, #      utc_end 1969-04-27 08:00:00 (Sun)
  62035549200, #  local_start 1966-10-30 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62114198400, #    utc_start 1969-04-27 08:00:00 (Sun)
  62240598000, #      utc_end 1973-04-29 07:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62240598000, #    utc_start 1973-04-29 07:00:00 (Sun)
  62256322800, #      utc_end 1973-10-28 07:00:00 (Sun)
  62240580000, #  local_start 1973-04-29 02:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62256322800, #    utc_start 1973-10-28 07:00:00 (Sun)
  62262374400, #      utc_end 1974-01-06 08:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62262374400, #    utc_start 1974-01-06 08:00:00 (Sun)
  62287772400, #      utc_end 1974-10-27 07:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62287772400, #    utc_start 1974-10-27 07:00:00 (Sun)
  62298057600, #      utc_end 1975-02-23 08:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62298057600, #    utc_start 1975-02-23 08:00:00 (Sun)
  62319222000, #      utc_end 1975-10-26 07:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62319222000, #    utc_start 1975-10-26 07:00:00 (Sun)
  62334950400, #      utc_end 1976-04-25 08:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62334950400, #    utc_start 1976-04-25 08:00:00 (Sun)
  62351276400, #      utc_end 1976-10-31 07:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62351276400, #    utc_start 1976-10-31 07:00:00 (Sun)
  62366400000, #      utc_end 1977-04-24 08:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62366400000, #    utc_start 1977-04-24 08:00:00 (Sun)
  62382726000, #      utc_end 1977-10-30 07:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62382726000, #    utc_start 1977-10-30 07:00:00 (Sun)
  62398454400, #      utc_end 1978-04-30 08:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62398454400, #    utc_start 1978-04-30 08:00:00 (Sun)
  62414175600, #      utc_end 1978-10-29 07:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62414175600, #    utc_start 1978-10-29 07:00:00 (Sun)
  62429904000, #      utc_end 1979-04-29 08:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62429904000, #    utc_start 1979-04-29 08:00:00 (Sun)
  62445625200, #      utc_end 1979-10-28 07:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62445625200, #    utc_start 1979-10-28 07:00:00 (Sun)
  62461353600, #      utc_end 1980-04-27 08:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62461353600, #    utc_start 1980-04-27 08:00:00 (Sun)
  62477074800, #      utc_end 1980-10-26 07:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62477074800, #    utc_start 1980-10-26 07:00:00 (Sun)
  62492803200, #      utc_end 1981-04-26 08:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62492803200, #    utc_start 1981-04-26 08:00:00 (Sun)
  62508524400, #      utc_end 1981-10-25 07:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62508524400, #    utc_start 1981-10-25 07:00:00 (Sun)
  62524252800, #      utc_end 1982-04-25 08:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62524252800, #    utc_start 1982-04-25 08:00:00 (Sun)
  62540578800, #      utc_end 1982-10-31 07:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62540578800, #    utc_start 1982-10-31 07:00:00 (Sun)
  62555702400, #      utc_end 1983-04-24 08:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62555702400, #    utc_start 1983-04-24 08:00:00 (Sun)
  62572028400, #      utc_end 1983-10-30 07:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62572028400, #    utc_start 1983-10-30 07:00:00 (Sun)
  62587756800, #      utc_end 1984-04-29 08:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62587756800, #    utc_start 1984-04-29 08:00:00 (Sun)
  62603478000, #      utc_end 1984-10-28 07:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62603478000, #    utc_start 1984-10-28 07:00:00 (Sun)
  62619206400, #      utc_end 1985-04-28 08:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62619206400, #    utc_start 1985-04-28 08:00:00 (Sun)
  62634927600, #      utc_end 1985-10-27 07:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62634927600, #    utc_start 1985-10-27 07:00:00 (Sun)
  62650656000, #      utc_end 1986-04-27 08:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62650656000, #    utc_start 1986-04-27 08:00:00 (Sun)
  62666377200, #      utc_end 1986-10-26 07:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62666377200, #    utc_start 1986-10-26 07:00:00 (Sun)
  62680291200, #      utc_end 1987-04-05 08:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62680291200, #    utc_start 1987-04-05 08:00:00 (Sun)
  62697826800, #      utc_end 1987-10-25 07:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62697826800, #    utc_start 1987-10-25 07:00:00 (Sun)
  62711740800, #      utc_end 1988-04-03 08:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62711740800, #    utc_start 1988-04-03 08:00:00 (Sun)
  62729881200, #      utc_end 1988-10-30 07:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62729881200, #    utc_start 1988-10-30 07:00:00 (Sun)
  62743190400, #      utc_end 1989-04-02 08:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62743190400, #    utc_start 1989-04-02 08:00:00 (Sun)
  62761330800, #      utc_end 1989-10-29 07:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62761330800, #    utc_start 1989-10-29 07:00:00 (Sun)
  62774640000, #      utc_end 1990-04-01 08:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62774640000, #    utc_start 1990-04-01 08:00:00 (Sun)
  62792780400, #      utc_end 1990-10-28 07:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62792780400, #    utc_start 1990-10-28 07:00:00 (Sun)
  62806694400, #      utc_end 1991-04-07 08:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62806694400, #    utc_start 1991-04-07 08:00:00 (Sun)
  62824230000, #      utc_end 1991-10-27 07:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62824230000, #    utc_start 1991-10-27 07:00:00 (Sun)
  62838144000, #      utc_end 1992-04-05 08:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62838144000, #    utc_start 1992-04-05 08:00:00 (Sun)
  62855679600, #      utc_end 1992-10-25 07:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62855679600, #    utc_start 1992-10-25 07:00:00 (Sun)
  62869593600, #      utc_end 1993-04-04 08:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62869593600, #    utc_start 1993-04-04 08:00:00 (Sun)
  62887734000, #      utc_end 1993-10-31 07:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62887734000, #    utc_start 1993-10-31 07:00:00 (Sun)
  62901043200, #      utc_end 1994-04-03 08:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62901043200, #    utc_start 1994-04-03 08:00:00 (Sun)
  62919183600, #      utc_end 1994-10-30 07:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62919183600, #    utc_start 1994-10-30 07:00:00 (Sun)
  62932492800, #      utc_end 1995-04-02 08:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62932492800, #    utc_start 1995-04-02 08:00:00 (Sun)
  62950633200, #      utc_end 1995-10-29 07:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62950633200, #    utc_start 1995-10-29 07:00:00 (Sun)
  62964547200, #      utc_end 1996-04-07 08:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62964547200, #    utc_start 1996-04-07 08:00:00 (Sun)
  62982082800, #      utc_end 1996-10-27 07:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62982082800, #    utc_start 1996-10-27 07:00:00 (Sun)
  62995996800, #      utc_end 1997-04-06 08:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62995996800, #    utc_start 1997-04-06 08:00:00 (Sun)
  63013532400, #      utc_end 1997-10-26 07:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63013532400, #    utc_start 1997-10-26 07:00:00 (Sun)
  63027446400, #      utc_end 1998-04-05 08:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63027446400, #    utc_start 1998-04-05 08:00:00 (Sun)
  63044982000, #      utc_end 1998-10-25 07:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63044982000, #    utc_start 1998-10-25 07:00:00 (Sun)
  63058896000, #      utc_end 1999-04-04 08:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63058896000, #    utc_start 1999-04-04 08:00:00 (Sun)
  63077036400, #      utc_end 1999-10-31 07:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63077036400, #    utc_start 1999-10-31 07:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108486000, #      utc_end 2000-10-29 07:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108486000, #    utc_start 2000-10-29 07:00:00 (Sun)
  63121795200, #      utc_end 2001-04-01 08:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63121795200, #    utc_start 2001-04-01 08:00:00 (Sun)
  63139935600, #      utc_end 2001-10-28 07:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63139935600, #    utc_start 2001-10-28 07:00:00 (Sun)
  63153849600, #      utc_end 2002-04-07 08:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63153849600, #    utc_start 2002-04-07 08:00:00 (Sun)
  63171385200, #      utc_end 2002-10-27 07:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63171385200, #    utc_start 2002-10-27 07:00:00 (Sun)
  63185299200, #      utc_end 2003-04-06 08:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63185299200, #    utc_start 2003-04-06 08:00:00 (Sun)
  63202834800, #      utc_end 2003-10-26 07:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63202834800, #    utc_start 2003-10-26 07:00:00 (Sun)
  63216748800, #      utc_end 2004-04-04 08:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63216748800, #    utc_start 2004-04-04 08:00:00 (Sun)
  63234889200, #      utc_end 2004-10-31 07:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63234889200, #    utc_start 2004-10-31 07:00:00 (Sun)
  63248198400, #      utc_end 2005-04-03 08:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63248198400, #    utc_start 2005-04-03 08:00:00 (Sun)
  63266338800, #      utc_end 2005-10-30 07:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63266338800, #    utc_start 2005-10-30 07:00:00 (Sun)
  63279648000, #      utc_end 2006-04-02 08:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63279648000, #    utc_start 2006-04-02 08:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63309283200, #      utc_end 2007-03-11 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63309283200, #    utc_start 2007-03-11 08:00:00 (Sun)
  63329842800, #      utc_end 2007-11-04 07:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329842800, #    utc_start 2007-11-04 07:00:00 (Sun)
  63340732800, #      utc_end 2008-03-09 08:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63340732800, #    utc_start 2008-03-09 08:00:00 (Sun)
  63361292400, #      utc_end 2008-11-02 07:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63361292400, #    utc_start 2008-11-02 07:00:00 (Sun)
  63372182400, #      utc_end 2009-03-08 08:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63372182400, #    utc_start 2009-03-08 08:00:00 (Sun)
  63392742000, #      utc_end 2009-11-01 07:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63392742000, #    utc_start 2009-11-01 07:00:00 (Sun)
  63404236800, #      utc_end 2010-03-14 08:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63404236800, #    utc_start 2010-03-14 08:00:00 (Sun)
  63424796400, #      utc_end 2010-11-07 07:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424796400, #    utc_start 2010-11-07 07:00:00 (Sun)
  63435686400, #      utc_end 2011-03-13 08:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63435686400, #    utc_start 2011-03-13 08:00:00 (Sun)
  63456246000, #      utc_end 2011-11-06 07:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63456246000, #    utc_start 2011-11-06 07:00:00 (Sun)
  63467136000, #      utc_end 2012-03-11 08:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63467136000, #    utc_start 2012-03-11 08:00:00 (Sun)
  63487695600, #      utc_end 2012-11-04 07:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487695600, #    utc_start 2012-11-04 07:00:00 (Sun)
  63498585600, #      utc_end 2013-03-10 08:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63498585600, #    utc_start 2013-03-10 08:00:00 (Sun)
  63519145200, #      utc_end 2013-11-03 07:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63519145200, #    utc_start 2013-11-03 07:00:00 (Sun)
  63530035200, #      utc_end 2014-03-09 08:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63530035200, #    utc_start 2014-03-09 08:00:00 (Sun)
  63550594800, #      utc_end 2014-11-02 07:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63550594800, #    utc_start 2014-11-02 07:00:00 (Sun)
  63561484800, #      utc_end 2015-03-08 08:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63561484800, #    utc_start 2015-03-08 08:00:00 (Sun)
  63582044400, #      utc_end 2015-11-01 07:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63582044400, #    utc_start 2015-11-01 07:00:00 (Sun)
  63593539200, #      utc_end 2016-03-13 08:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63593539200, #    utc_start 2016-03-13 08:00:00 (Sun)
  63614098800, #      utc_end 2016-11-06 07:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63614098800, #    utc_start 2016-11-06 07:00:00 (Sun)
  63624988800, #      utc_end 2017-03-12 08:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63624988800, #    utc_start 2017-03-12 08:00:00 (Sun)
  63645548400, #      utc_end 2017-11-05 07:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63645548400, #    utc_start 2017-11-05 07:00:00 (Sun)
  63656438400, #      utc_end 2018-03-11 08:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63656438400, #    utc_start 2018-03-11 08:00:00 (Sun)
  63676998000, #      utc_end 2018-11-04 07:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676998000, #    utc_start 2018-11-04 07:00:00 (Sun)
  63687888000, #      utc_end 2019-03-10 08:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63687888000, #    utc_start 2019-03-10 08:00:00 (Sun)
  63708447600, #      utc_end 2019-11-03 07:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63708447600, #    utc_start 2019-11-03 07:00:00 (Sun)
  63719337600, #      utc_end 2020-03-08 08:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63719337600, #    utc_start 2020-03-08 08:00:00 (Sun)
  63739897200, #      utc_end 2020-11-01 07:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739897200, #    utc_start 2020-11-01 07:00:00 (Sun)
  63751392000, #      utc_end 2021-03-14 08:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63751392000, #    utc_start 2021-03-14 08:00:00 (Sun)
  63771951600, #      utc_end 2021-11-07 07:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771951600, #    utc_start 2021-11-07 07:00:00 (Sun)
  63782841600, #      utc_end 2022-03-13 08:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63782841600, #    utc_start 2022-03-13 08:00:00 (Sun)
  63803401200, #      utc_end 2022-11-06 07:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63803401200, #    utc_start 2022-11-06 07:00:00 (Sun)
  63814291200, #      utc_end 2023-03-12 08:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63814291200, #    utc_start 2023-03-12 08:00:00 (Sun)
  63834850800, #      utc_end 2023-11-05 07:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834850800, #    utc_start 2023-11-05 07:00:00 (Sun)
  63845740800, #      utc_end 2024-03-10 08:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63845740800, #    utc_start 2024-03-10 08:00:00 (Sun)
  63866300400, #      utc_end 2024-11-03 07:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63866300400, #    utc_start 2024-11-03 07:00:00 (Sun)
  63877190400, #      utc_end 2025-03-09 08:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63877190400, #    utc_start 2025-03-09 08:00:00 (Sun)
  63897750000, #      utc_end 2025-11-02 07:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897750000, #    utc_start 2025-11-02 07:00:00 (Sun)
  63908640000, #      utc_end 2026-03-08 08:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63908640000, #    utc_start 2026-03-08 08:00:00 (Sun)
  63929199600, #      utc_end 2026-11-01 07:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63929199600, #    utc_start 2026-11-01 07:00:00 (Sun)
  63940694400, #      utc_end 2027-03-14 08:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63940694400, #    utc_start 2027-03-14 08:00:00 (Sun)
  63961254000, #      utc_end 2027-11-07 07:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {61}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 720377,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 720377,
      'utc_rd_secs' => 7200,
      'utc_year' => 1974
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 720377,
      'local_rd_secs' => 25200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 720377,
      'utc_rd_secs' => 25200,
      'utc_year' => 1974
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_MENOMINEE

    $main::fatpacked{"DateTime/TimeZone/America/Merida.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_MERIDA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Merida;
  $DateTime::TimeZone::America::Merida::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Merida::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60620940000, #      utc_end 1922-01-01 06:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60620918492, #    local_end 1922-01-01 00:01:32 (Sun)
  -21508,
  0,
  'LMT',
      ],
      [
  60620940000, #    utc_start 1922-01-01 06:00:00 (Sun)
  62513618400, #      utc_end 1981-12-23 06:00:00 (Wed)
  60620918400, #  local_start 1922-01-01 00:00:00 (Sun)
  62513596800, #    local_end 1981-12-23 00:00:00 (Wed)
  -21600,
  0,
  'CST',
      ],
      [
  62513618400, #    utc_start 1981-12-23 06:00:00 (Wed)
  62543336400, #      utc_end 1982-12-02 05:00:00 (Thu)
  62513600400, #  local_start 1981-12-23 01:00:00 (Wed)
  62543318400, #    local_end 1982-12-02 00:00:00 (Thu)
  -18000,
  0,
  'EST',
      ],
      [
  62543336400, #    utc_start 1982-12-02 05:00:00 (Thu)
  62964547200, #      utc_end 1996-04-07 08:00:00 (Sun)
  62543314800, #  local_start 1982-12-01 23:00:00 (Wed)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62964547200, #    utc_start 1996-04-07 08:00:00 (Sun)
  62982082800, #      utc_end 1996-10-27 07:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62982082800, #    utc_start 1996-10-27 07:00:00 (Sun)
  62995996800, #      utc_end 1997-04-06 08:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62995996800, #    utc_start 1997-04-06 08:00:00 (Sun)
  63013532400, #      utc_end 1997-10-26 07:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63013532400, #    utc_start 1997-10-26 07:00:00 (Sun)
  63027446400, #      utc_end 1998-04-05 08:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63027446400, #    utc_start 1998-04-05 08:00:00 (Sun)
  63044982000, #      utc_end 1998-10-25 07:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63044982000, #    utc_start 1998-10-25 07:00:00 (Sun)
  63058896000, #      utc_end 1999-04-04 08:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63058896000, #    utc_start 1999-04-04 08:00:00 (Sun)
  63077036400, #      utc_end 1999-10-31 07:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63077036400, #    utc_start 1999-10-31 07:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108486000, #      utc_end 2000-10-29 07:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108486000, #    utc_start 2000-10-29 07:00:00 (Sun)
  63124819200, #      utc_end 2001-05-06 08:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63124797600, #    local_end 2001-05-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63124819200, #    utc_start 2001-05-06 08:00:00 (Sun)
  63137516400, #      utc_end 2001-09-30 07:00:00 (Sun)
  63124801200, #  local_start 2001-05-06 03:00:00 (Sun)
  63137498400, #    local_end 2001-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63137516400, #    utc_start 2001-09-30 07:00:00 (Sun)
  63153849600, #      utc_end 2002-04-07 08:00:00 (Sun)
  63137494800, #  local_start 2001-09-30 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63153849600, #    utc_start 2002-04-07 08:00:00 (Sun)
  63171385200, #      utc_end 2002-10-27 07:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63171385200, #    utc_start 2002-10-27 07:00:00 (Sun)
  63185299200, #      utc_end 2003-04-06 08:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63185299200, #    utc_start 2003-04-06 08:00:00 (Sun)
  63202834800, #      utc_end 2003-10-26 07:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63202834800, #    utc_start 2003-10-26 07:00:00 (Sun)
  63216748800, #      utc_end 2004-04-04 08:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63216748800, #    utc_start 2004-04-04 08:00:00 (Sun)
  63234889200, #      utc_end 2004-10-31 07:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63234889200, #    utc_start 2004-10-31 07:00:00 (Sun)
  63248198400, #      utc_end 2005-04-03 08:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63248198400, #    utc_start 2005-04-03 08:00:00 (Sun)
  63266338800, #      utc_end 2005-10-30 07:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63266338800, #    utc_start 2005-10-30 07:00:00 (Sun)
  63279648000, #      utc_end 2006-04-02 08:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63279648000, #    utc_start 2006-04-02 08:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63311097600, #      utc_end 2007-04-01 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63311076000, #    local_end 2007-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63311097600, #    utc_start 2007-04-01 08:00:00 (Sun)
  63329238000, #      utc_end 2007-10-28 07:00:00 (Sun)
  63311079600, #  local_start 2007-04-01 03:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329238000, #    utc_start 2007-10-28 07:00:00 (Sun)
  63343152000, #      utc_end 2008-04-06 08:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63343130400, #    local_end 2008-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63343152000, #    utc_start 2008-04-06 08:00:00 (Sun)
  63360687600, #      utc_end 2008-10-26 07:00:00 (Sun)
  63343134000, #  local_start 2008-04-06 03:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63360687600, #    utc_start 2008-10-26 07:00:00 (Sun)
  63374601600, #      utc_end 2009-04-05 08:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63374580000, #    local_end 2009-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63374601600, #    utc_start 2009-04-05 08:00:00 (Sun)
  63392137200, #      utc_end 2009-10-25 07:00:00 (Sun)
  63374583600, #  local_start 2009-04-05 03:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63392137200, #    utc_start 2009-10-25 07:00:00 (Sun)
  63406051200, #      utc_end 2010-04-04 08:00:00 (Sun)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63406029600, #    local_end 2010-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63406051200, #    utc_start 2010-04-04 08:00:00 (Sun)
  63424191600, #      utc_end 2010-10-31 07:00:00 (Sun)
  63406033200, #  local_start 2010-04-04 03:00:00 (Sun)
  63424173600, #    local_end 2010-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424191600, #    utc_start 2010-10-31 07:00:00 (Sun)
  63437500800, #      utc_end 2011-04-03 08:00:00 (Sun)
  63424170000, #  local_start 2010-10-31 01:00:00 (Sun)
  63437479200, #    local_end 2011-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63437500800, #    utc_start 2011-04-03 08:00:00 (Sun)
  63455641200, #      utc_end 2011-10-30 07:00:00 (Sun)
  63437482800, #  local_start 2011-04-03 03:00:00 (Sun)
  63455623200, #    local_end 2011-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63455641200, #    utc_start 2011-10-30 07:00:00 (Sun)
  63468950400, #      utc_end 2012-04-01 08:00:00 (Sun)
  63455619600, #  local_start 2011-10-30 01:00:00 (Sun)
  63468928800, #    local_end 2012-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63468950400, #    utc_start 2012-04-01 08:00:00 (Sun)
  63487090800, #      utc_end 2012-10-28 07:00:00 (Sun)
  63468932400, #  local_start 2012-04-01 03:00:00 (Sun)
  63487072800, #    local_end 2012-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487090800, #    utc_start 2012-10-28 07:00:00 (Sun)
  63501004800, #      utc_end 2013-04-07 08:00:00 (Sun)
  63487069200, #  local_start 2012-10-28 01:00:00 (Sun)
  63500983200, #    local_end 2013-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63501004800, #    utc_start 2013-04-07 08:00:00 (Sun)
  63518540400, #      utc_end 2013-10-27 07:00:00 (Sun)
  63500986800, #  local_start 2013-04-07 03:00:00 (Sun)
  63518522400, #    local_end 2013-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63518540400, #    utc_start 2013-10-27 07:00:00 (Sun)
  63532454400, #      utc_end 2014-04-06 08:00:00 (Sun)
  63518518800, #  local_start 2013-10-27 01:00:00 (Sun)
  63532432800, #    local_end 2014-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63532454400, #    utc_start 2014-04-06 08:00:00 (Sun)
  63549990000, #      utc_end 2014-10-26 07:00:00 (Sun)
  63532436400, #  local_start 2014-04-06 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63549990000, #    utc_start 2014-10-26 07:00:00 (Sun)
  63563904000, #      utc_end 2015-04-05 08:00:00 (Sun)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63563882400, #    local_end 2015-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63563904000, #    utc_start 2015-04-05 08:00:00 (Sun)
  63581439600, #      utc_end 2015-10-25 07:00:00 (Sun)
  63563886000, #  local_start 2015-04-05 03:00:00 (Sun)
  63581421600, #    local_end 2015-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63581439600, #    utc_start 2015-10-25 07:00:00 (Sun)
  63595353600, #      utc_end 2016-04-03 08:00:00 (Sun)
  63581418000, #  local_start 2015-10-25 01:00:00 (Sun)
  63595332000, #    local_end 2016-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63595353600, #    utc_start 2016-04-03 08:00:00 (Sun)
  63613494000, #      utc_end 2016-10-30 07:00:00 (Sun)
  63595335600, #  local_start 2016-04-03 03:00:00 (Sun)
  63613476000, #    local_end 2016-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63613494000, #    utc_start 2016-10-30 07:00:00 (Sun)
  63626803200, #      utc_end 2017-04-02 08:00:00 (Sun)
  63613472400, #  local_start 2016-10-30 01:00:00 (Sun)
  63626781600, #    local_end 2017-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63626803200, #    utc_start 2017-04-02 08:00:00 (Sun)
  63644943600, #      utc_end 2017-10-29 07:00:00 (Sun)
  63626785200, #  local_start 2017-04-02 03:00:00 (Sun)
  63644925600, #    local_end 2017-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63644943600, #    utc_start 2017-10-29 07:00:00 (Sun)
  63658252800, #      utc_end 2018-04-01 08:00:00 (Sun)
  63644922000, #  local_start 2017-10-29 01:00:00 (Sun)
  63658231200, #    local_end 2018-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63658252800, #    utc_start 2018-04-01 08:00:00 (Sun)
  63676393200, #      utc_end 2018-10-28 07:00:00 (Sun)
  63658234800, #  local_start 2018-04-01 03:00:00 (Sun)
  63676375200, #    local_end 2018-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676393200, #    utc_start 2018-10-28 07:00:00 (Sun)
  63690307200, #      utc_end 2019-04-07 08:00:00 (Sun)
  63676371600, #  local_start 2018-10-28 01:00:00 (Sun)
  63690285600, #    local_end 2019-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63690307200, #    utc_start 2019-04-07 08:00:00 (Sun)
  63707842800, #      utc_end 2019-10-27 07:00:00 (Sun)
  63690289200, #  local_start 2019-04-07 03:00:00 (Sun)
  63707824800, #    local_end 2019-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63707842800, #    utc_start 2019-10-27 07:00:00 (Sun)
  63721756800, #      utc_end 2020-04-05 08:00:00 (Sun)
  63707821200, #  local_start 2019-10-27 01:00:00 (Sun)
  63721735200, #    local_end 2020-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63721756800, #    utc_start 2020-04-05 08:00:00 (Sun)
  63739292400, #      utc_end 2020-10-25 07:00:00 (Sun)
  63721738800, #  local_start 2020-04-05 03:00:00 (Sun)
  63739274400, #    local_end 2020-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739292400, #    utc_start 2020-10-25 07:00:00 (Sun)
  63753206400, #      utc_end 2021-04-04 08:00:00 (Sun)
  63739270800, #  local_start 2020-10-25 01:00:00 (Sun)
  63753184800, #    local_end 2021-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63753206400, #    utc_start 2021-04-04 08:00:00 (Sun)
  63771346800, #      utc_end 2021-10-31 07:00:00 (Sun)
  63753188400, #  local_start 2021-04-04 03:00:00 (Sun)
  63771328800, #    local_end 2021-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771346800, #    utc_start 2021-10-31 07:00:00 (Sun)
  63784656000, #      utc_end 2022-04-03 08:00:00 (Sun)
  63771325200, #  local_start 2021-10-31 01:00:00 (Sun)
  63784634400, #    local_end 2022-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63784656000, #    utc_start 2022-04-03 08:00:00 (Sun)
  63802796400, #      utc_end 2022-10-30 07:00:00 (Sun)
  63784638000, #  local_start 2022-04-03 03:00:00 (Sun)
  63802778400, #    local_end 2022-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63802796400, #    utc_start 2022-10-30 07:00:00 (Sun)
  63816105600, #      utc_end 2023-04-02 08:00:00 (Sun)
  63802774800, #  local_start 2022-10-30 01:00:00 (Sun)
  63816084000, #    local_end 2023-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63816105600, #    utc_start 2023-04-02 08:00:00 (Sun)
  63834246000, #      utc_end 2023-10-29 07:00:00 (Sun)
  63816087600, #  local_start 2023-04-02 03:00:00 (Sun)
  63834228000, #    local_end 2023-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834246000, #    utc_start 2023-10-29 07:00:00 (Sun)
  63848160000, #      utc_end 2024-04-07 08:00:00 (Sun)
  63834224400, #  local_start 2023-10-29 01:00:00 (Sun)
  63848138400, #    local_end 2024-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63848160000, #    utc_start 2024-04-07 08:00:00 (Sun)
  63865695600, #      utc_end 2024-10-27 07:00:00 (Sun)
  63848142000, #  local_start 2024-04-07 03:00:00 (Sun)
  63865677600, #    local_end 2024-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63865695600, #    utc_start 2024-10-27 07:00:00 (Sun)
  63879609600, #      utc_end 2025-04-06 08:00:00 (Sun)
  63865674000, #  local_start 2024-10-27 01:00:00 (Sun)
  63879588000, #    local_end 2025-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63879609600, #    utc_start 2025-04-06 08:00:00 (Sun)
  63897145200, #      utc_end 2025-10-26 07:00:00 (Sun)
  63879591600, #  local_start 2025-04-06 03:00:00 (Sun)
  63897127200, #    local_end 2025-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897145200, #    utc_start 2025-10-26 07:00:00 (Sun)
  63911059200, #      utc_end 2026-04-05 08:00:00 (Sun)
  63897123600, #  local_start 2025-10-26 01:00:00 (Sun)
  63911037600, #    local_end 2026-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63911059200, #    utc_start 2026-04-05 08:00:00 (Sun)
  63928594800, #      utc_end 2026-10-25 07:00:00 (Sun)
  63911041200, #  local_start 2026-04-05 03:00:00 (Sun)
  63928576800, #    local_end 2026-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63928594800, #    utc_start 2026-10-25 07:00:00 (Sun)
  63942508800, #      utc_end 2027-04-04 08:00:00 (Sun)
  63928573200, #  local_start 2026-10-25 01:00:00 (Sun)
  63942487200, #    local_end 2027-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63942508800, #    utc_start 2027-04-04 08:00:00 (Sun)
  63960649200, #      utc_end 2027-10-31 07:00:00 (Sun)
  63942490800, #  local_start 2027-04-04 03:00:00 (Sun)
  63960631200, #    local_end 2027-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {32}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723880,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723880,
      'utc_rd_secs' => 82800,
      'utc_year' => 1983
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723881,
      'local_rd_secs' => 18000,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723881,
      'utc_rd_secs' => 18000,
      'utc_year' => 1983
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2002',
      'in' => 'Oct',
      'letter' => 'S',
      'name' => 'Mexico',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2002',
      'in' => 'Apr',
      'letter' => 'D',
      'name' => 'Mexico',
      'offset_from_std' => 3600,
      'on' => 'Sun>=1',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_MERIDA

    $main::fatpacked{"DateTime/TimeZone/America/Metlakatla.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_METLAKATLA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Metlakatla;
  $DateTime::TimeZone::America::Metlakatla::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Metlakatla::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  58910316378, #      utc_end 1867-10-17 08:46:18 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  58910371200, #    local_end 1867-10-18 00:00:00 (Fri)
  54822,
  0,
  'LMT',
      ],
      [
  58910316378, #    utc_start 1867-10-17 08:46:18 (Thu)
  59946727578, #      utc_end 1900-08-20 20:46:18 (Mon)
  58910284800, #  local_start 1867-10-17 00:00:00 (Thu)
  59946696000, #    local_end 1900-08-20 12:00:00 (Mon)
  -31578,
  0,
  'LMT',
      ],
      [
  59946727578, #    utc_start 1900-08-20 20:46:18 (Mon)
  61252099200, #      utc_end 1942-01-01 08:00:00 (Thu)
  59946698778, #  local_start 1900-08-20 12:46:18 (Mon)
  61252070400, #    local_end 1942-01-01 00:00:00 (Thu)
  -28800,
  0,
  'PST',
      ],
      [
  61252099200, #    utc_start 1942-01-01 08:00:00 (Thu)
  61255476000, #      utc_end 1942-02-09 10:00:00 (Mon)
  61252070400, #  local_start 1942-01-01 00:00:00 (Thu)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -28800,
  0,
  'PST',
      ],
      [
  61255476000, #    utc_start 1942-02-09 10:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366262400, #    local_end 1945-08-14 16:00:00 (Tue)
  -25200,
  1,
  'PWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370298000, #      utc_end 1945-09-30 09:00:00 (Sun)
  61366262400, #  local_start 1945-08-14 16:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PPT',
      ],
      [
  61370298000, #    utc_start 1945-09-30 09:00:00 (Sun)
  61378329600, #      utc_end 1946-01-01 08:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -28800,
  0,
  'PST',
      ],
      [
  61378329600, #    utc_start 1946-01-01 08:00:00 (Tue)
  62104176000, #      utc_end 1969-01-01 08:00:00 (Wed)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  62104147200, #    local_end 1969-01-01 00:00:00 (Wed)
  -28800,
  0,
  'PST',
      ],
      [
  62104176000, #    utc_start 1969-01-01 08:00:00 (Wed)
  62114205600, #      utc_end 1969-04-27 10:00:00 (Sun)
  62104147200, #  local_start 1969-01-01 00:00:00 (Wed)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62114205600, #    utc_start 1969-04-27 10:00:00 (Sun)
  62129926800, #      utc_end 1969-10-26 09:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62129926800, #    utc_start 1969-10-26 09:00:00 (Sun)
  62145655200, #      utc_end 1970-04-26 10:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62145655200, #    utc_start 1970-04-26 10:00:00 (Sun)
  62161376400, #      utc_end 1970-10-25 09:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62161376400, #    utc_start 1970-10-25 09:00:00 (Sun)
  62177104800, #      utc_end 1971-04-25 10:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62177104800, #    utc_start 1971-04-25 10:00:00 (Sun)
  62193430800, #      utc_end 1971-10-31 09:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62193430800, #    utc_start 1971-10-31 09:00:00 (Sun)
  62209159200, #      utc_end 1972-04-30 10:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62209159200, #    utc_start 1972-04-30 10:00:00 (Sun)
  62224880400, #      utc_end 1972-10-29 09:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62224880400, #    utc_start 1972-10-29 09:00:00 (Sun)
  62240608800, #      utc_end 1973-04-29 10:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62240608800, #    utc_start 1973-04-29 10:00:00 (Sun)
  62256330000, #      utc_end 1973-10-28 09:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62256330000, #    utc_start 1973-10-28 09:00:00 (Sun)
  62262381600, #      utc_end 1974-01-06 10:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62262381600, #    utc_start 1974-01-06 10:00:00 (Sun)
  62287779600, #      utc_end 1974-10-27 09:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62287779600, #    utc_start 1974-10-27 09:00:00 (Sun)
  62298064800, #      utc_end 1975-02-23 10:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62298064800, #    utc_start 1975-02-23 10:00:00 (Sun)
  62319229200, #      utc_end 1975-10-26 09:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62319229200, #    utc_start 1975-10-26 09:00:00 (Sun)
  62334957600, #      utc_end 1976-04-25 10:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62334957600, #    utc_start 1976-04-25 10:00:00 (Sun)
  62351283600, #      utc_end 1976-10-31 09:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62351283600, #    utc_start 1976-10-31 09:00:00 (Sun)
  62366407200, #      utc_end 1977-04-24 10:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62366407200, #    utc_start 1977-04-24 10:00:00 (Sun)
  62382733200, #      utc_end 1977-10-30 09:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62382733200, #    utc_start 1977-10-30 09:00:00 (Sun)
  62398461600, #      utc_end 1978-04-30 10:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62398461600, #    utc_start 1978-04-30 10:00:00 (Sun)
  62414182800, #      utc_end 1978-10-29 09:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62414182800, #    utc_start 1978-10-29 09:00:00 (Sun)
  62429911200, #      utc_end 1979-04-29 10:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62429911200, #    utc_start 1979-04-29 10:00:00 (Sun)
  62445632400, #      utc_end 1979-10-28 09:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62445632400, #    utc_start 1979-10-28 09:00:00 (Sun)
  62461360800, #      utc_end 1980-04-27 10:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62461360800, #    utc_start 1980-04-27 10:00:00 (Sun)
  62477082000, #      utc_end 1980-10-26 09:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62477082000, #    utc_start 1980-10-26 09:00:00 (Sun)
  62492810400, #      utc_end 1981-04-26 10:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62492810400, #    utc_start 1981-04-26 10:00:00 (Sun)
  62508531600, #      utc_end 1981-10-25 09:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62508531600, #    utc_start 1981-10-25 09:00:00 (Sun)
  62524260000, #      utc_end 1982-04-25 10:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62524260000, #    utc_start 1982-04-25 10:00:00 (Sun)
  62540586000, #      utc_end 1982-10-31 09:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62540586000, #    utc_start 1982-10-31 09:00:00 (Sun)
  62555709600, #      utc_end 1983-04-24 10:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62555709600, #    utc_start 1983-04-24 10:00:00 (Sun)
  62572035600, #      utc_end 1983-10-30 09:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62572035600, #    utc_start 1983-10-30 09:00:00 (Sun)
  63582055200, #      utc_end 2015-11-01 10:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63582055200, #    utc_start 2015-11-01 10:00:00 (Sun)
  63593550000, #      utc_end 2016-03-13 11:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63593550000, #    utc_start 2016-03-13 11:00:00 (Sun)
  63614109600, #      utc_end 2016-11-06 10:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63614109600, #    utc_start 2016-11-06 10:00:00 (Sun)
  63624999600, #      utc_end 2017-03-12 11:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63624999600, #    utc_start 2017-03-12 11:00:00 (Sun)
  63645559200, #      utc_end 2017-11-05 10:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63645559200, #    utc_start 2017-11-05 10:00:00 (Sun)
  63656449200, #      utc_end 2018-03-11 11:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63656449200, #    utc_start 2018-03-11 11:00:00 (Sun)
  63677008800, #      utc_end 2018-11-04 10:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63677008800, #    utc_start 2018-11-04 10:00:00 (Sun)
  63687898800, #      utc_end 2019-03-10 11:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63687898800, #    utc_start 2019-03-10 11:00:00 (Sun)
  63708458400, #      utc_end 2019-11-03 10:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63708458400, #    utc_start 2019-11-03 10:00:00 (Sun)
  63719348400, #      utc_end 2020-03-08 11:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63719348400, #    utc_start 2020-03-08 11:00:00 (Sun)
  63739908000, #      utc_end 2020-11-01 10:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63739908000, #    utc_start 2020-11-01 10:00:00 (Sun)
  63751402800, #      utc_end 2021-03-14 11:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63751402800, #    utc_start 2021-03-14 11:00:00 (Sun)
  63771962400, #      utc_end 2021-11-07 10:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63771962400, #    utc_start 2021-11-07 10:00:00 (Sun)
  63782852400, #      utc_end 2022-03-13 11:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63782852400, #    utc_start 2022-03-13 11:00:00 (Sun)
  63803412000, #      utc_end 2022-11-06 10:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63803412000, #    utc_start 2022-11-06 10:00:00 (Sun)
  63814302000, #      utc_end 2023-03-12 11:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63814302000, #    utc_start 2023-03-12 11:00:00 (Sun)
  63834861600, #      utc_end 2023-11-05 10:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63834861600, #    utc_start 2023-11-05 10:00:00 (Sun)
  63845751600, #      utc_end 2024-03-10 11:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63845751600, #    utc_start 2024-03-10 11:00:00 (Sun)
  63866311200, #      utc_end 2024-11-03 10:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63866311200, #    utc_start 2024-11-03 10:00:00 (Sun)
  63877201200, #      utc_end 2025-03-09 11:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63877201200, #    utc_start 2025-03-09 11:00:00 (Sun)
  63897760800, #      utc_end 2025-11-02 10:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63897760800, #    utc_start 2025-11-02 10:00:00 (Sun)
  63908650800, #      utc_end 2026-03-08 11:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63908650800, #    utc_start 2026-03-08 11:00:00 (Sun)
  63929210400, #      utc_end 2026-11-01 10:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63929210400, #    utc_start 2026-11-01 10:00:00 (Sun)
  63940705200, #      utc_end 2027-03-14 11:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63940705200, #    utc_start 2027-03-14 11:00:00 (Sun)
  63961264800, #      utc_end 2027-11-07 10:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {29}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -32400 }
  
  my $last_observance = bless( {
    'format' => 'AK%sT',
    'gmtoff' => '-9:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 735903,
      'local_rd_secs' => 3600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 735903,
      'utc_rd_secs' => 3600,
      'utc_year' => 2016
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -32400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 735903,
      'local_rd_secs' => 36000,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 735903,
      'utc_rd_secs' => 36000,
      'utc_year' => 2016
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_METLAKATLA

    $main::fatpacked{"DateTime/TimeZone/America/Mexico_City.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_MEXICO_CITY';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Mexico_City;
  $DateTime::TimeZone::America::Mexico_City::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Mexico_City::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60620943600, #      utc_end 1922-01-01 07:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60620919804, #    local_end 1922-01-01 00:23:24 (Sun)
  -23796,
  0,
  'LMT',
      ],
      [
  60620943600, #    utc_start 1922-01-01 07:00:00 (Sun)
  60792616800, #      utc_end 1927-06-11 06:00:00 (Sat)
  60620918400, #  local_start 1922-01-01 00:00:00 (Sun)
  60792591600, #    local_end 1927-06-10 23:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60792616800, #    utc_start 1927-06-11 06:00:00 (Sat)
  60900876000, #      utc_end 1930-11-15 06:00:00 (Sat)
  60792595200, #  local_start 1927-06-11 00:00:00 (Sat)
  60900854400, #    local_end 1930-11-15 00:00:00 (Sat)
  -21600,
  0,
  'CST',
      ],
      [
  60900876000, #    utc_start 1930-11-15 06:00:00 (Sat)
  60915391200, #      utc_end 1931-05-02 06:00:00 (Sat)
  60900850800, #  local_start 1930-11-14 23:00:00 (Fri)
  60915366000, #    local_end 1931-05-01 23:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60915391200, #    utc_start 1931-05-02 06:00:00 (Sat)
  60928524000, #      utc_end 1931-10-01 06:00:00 (Thu)
  60915369600, #  local_start 1931-05-02 00:00:00 (Sat)
  60928502400, #    local_end 1931-10-01 00:00:00 (Thu)
  -21600,
  0,
  'CST',
      ],
      [
  60928524000, #    utc_start 1931-10-01 06:00:00 (Thu)
  60944338800, #      utc_end 1932-04-01 07:00:00 (Fri)
  60928498800, #  local_start 1931-09-30 23:00:00 (Wed)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60944338800, #    utc_start 1932-04-01 07:00:00 (Fri)
  61160421600, #      utc_end 1939-02-05 06:00:00 (Sun)
  60944317200, #  local_start 1932-04-01 01:00:00 (Fri)
  61160400000, #    local_end 1939-02-05 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61160421600, #    utc_start 1939-02-05 06:00:00 (Sun)
  61172514000, #      utc_end 1939-06-25 05:00:00 (Sun)
  61160403600, #  local_start 1939-02-05 01:00:00 (Sun)
  61172496000, #    local_end 1939-06-25 00:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61172514000, #    utc_start 1939-06-25 05:00:00 (Sun)
  61218568800, #      utc_end 1940-12-09 06:00:00 (Mon)
  61172492400, #  local_start 1939-06-24 23:00:00 (Sat)
  61218547200, #    local_end 1940-12-09 00:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61218568800, #    utc_start 1940-12-09 06:00:00 (Mon)
  61228328400, #      utc_end 1941-04-01 05:00:00 (Tue)
  61218550800, #  local_start 1940-12-09 01:00:00 (Mon)
  61228310400, #    local_end 1941-04-01 00:00:00 (Tue)
  -18000,
  1,
  'CDT',
      ],
      [
  61228328400, #    utc_start 1941-04-01 05:00:00 (Tue)
  61313781600, #      utc_end 1943-12-16 06:00:00 (Thu)
  61228306800, #  local_start 1941-03-31 23:00:00 (Mon)
  61313760000, #    local_end 1943-12-16 00:00:00 (Thu)
  -21600,
  0,
  'CST',
      ],
      [
  61313781600, #    utc_start 1943-12-16 06:00:00 (Thu)
  61325614800, #      utc_end 1944-05-01 05:00:00 (Mon)
  61313763600, #  local_start 1943-12-16 01:00:00 (Thu)
  61325596800, #    local_end 1944-05-01 00:00:00 (Mon)
  -18000,
  1,
  'CWT',
      ],
      [
  61325614800, #    utc_start 1944-05-01 05:00:00 (Mon)
  61508181600, #      utc_end 1950-02-12 06:00:00 (Sun)
  61325593200, #  local_start 1944-04-30 23:00:00 (Sun)
  61508160000, #    local_end 1950-02-12 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61508181600, #    utc_start 1950-02-12 06:00:00 (Sun)
  61522693200, #      utc_end 1950-07-30 05:00:00 (Sun)
  61508163600, #  local_start 1950-02-12 01:00:00 (Sun)
  61522675200, #    local_end 1950-07-30 00:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61522693200, #    utc_start 1950-07-30 05:00:00 (Sun)
  62964547200, #      utc_end 1996-04-07 08:00:00 (Sun)
  61522671600, #  local_start 1950-07-29 23:00:00 (Sat)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62964547200, #    utc_start 1996-04-07 08:00:00 (Sun)
  62982082800, #      utc_end 1996-10-27 07:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62982082800, #    utc_start 1996-10-27 07:00:00 (Sun)
  62995996800, #      utc_end 1997-04-06 08:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62995996800, #    utc_start 1997-04-06 08:00:00 (Sun)
  63013532400, #      utc_end 1997-10-26 07:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63013532400, #    utc_start 1997-10-26 07:00:00 (Sun)
  63027446400, #      utc_end 1998-04-05 08:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63027446400, #    utc_start 1998-04-05 08:00:00 (Sun)
  63044982000, #      utc_end 1998-10-25 07:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63044982000, #    utc_start 1998-10-25 07:00:00 (Sun)
  63058896000, #      utc_end 1999-04-04 08:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63058896000, #    utc_start 1999-04-04 08:00:00 (Sun)
  63077036400, #      utc_end 1999-10-31 07:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63077036400, #    utc_start 1999-10-31 07:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108486000, #      utc_end 2000-10-29 07:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108486000, #    utc_start 2000-10-29 07:00:00 (Sun)
  63124819200, #      utc_end 2001-05-06 08:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63124797600, #    local_end 2001-05-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63124819200, #    utc_start 2001-05-06 08:00:00 (Sun)
  63137516400, #      utc_end 2001-09-30 07:00:00 (Sun)
  63124801200, #  local_start 2001-05-06 03:00:00 (Sun)
  63137498400, #    local_end 2001-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63137516400, #    utc_start 2001-09-30 07:00:00 (Sun)
  63149868000, #      utc_end 2002-02-20 06:00:00 (Wed)
  63137494800, #  local_start 2001-09-30 01:00:00 (Sun)
  63149846400, #    local_end 2002-02-20 00:00:00 (Wed)
  -21600,
  0,
  'CST',
      ],
      [
  63149868000, #    utc_start 2002-02-20 06:00:00 (Wed)
  63153849600, #      utc_end 2002-04-07 08:00:00 (Sun)
  63149846400, #  local_start 2002-02-20 00:00:00 (Wed)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63153849600, #    utc_start 2002-04-07 08:00:00 (Sun)
  63171385200, #      utc_end 2002-10-27 07:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63171385200, #    utc_start 2002-10-27 07:00:00 (Sun)
  63185299200, #      utc_end 2003-04-06 08:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63185299200, #    utc_start 2003-04-06 08:00:00 (Sun)
  63202834800, #      utc_end 2003-10-26 07:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63202834800, #    utc_start 2003-10-26 07:00:00 (Sun)
  63216748800, #      utc_end 2004-04-04 08:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63216748800, #    utc_start 2004-04-04 08:00:00 (Sun)
  63234889200, #      utc_end 2004-10-31 07:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63234889200, #    utc_start 2004-10-31 07:00:00 (Sun)
  63248198400, #      utc_end 2005-04-03 08:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63248198400, #    utc_start 2005-04-03 08:00:00 (Sun)
  63266338800, #      utc_end 2005-10-30 07:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63266338800, #    utc_start 2005-10-30 07:00:00 (Sun)
  63279648000, #      utc_end 2006-04-02 08:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63279648000, #    utc_start 2006-04-02 08:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63311097600, #      utc_end 2007-04-01 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63311076000, #    local_end 2007-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63311097600, #    utc_start 2007-04-01 08:00:00 (Sun)
  63329238000, #      utc_end 2007-10-28 07:00:00 (Sun)
  63311079600, #  local_start 2007-04-01 03:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329238000, #    utc_start 2007-10-28 07:00:00 (Sun)
  63343152000, #      utc_end 2008-04-06 08:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63343130400, #    local_end 2008-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63343152000, #    utc_start 2008-04-06 08:00:00 (Sun)
  63360687600, #      utc_end 2008-10-26 07:00:00 (Sun)
  63343134000, #  local_start 2008-04-06 03:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63360687600, #    utc_start 2008-10-26 07:00:00 (Sun)
  63374601600, #      utc_end 2009-04-05 08:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63374580000, #    local_end 2009-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63374601600, #    utc_start 2009-04-05 08:00:00 (Sun)
  63392137200, #      utc_end 2009-10-25 07:00:00 (Sun)
  63374583600, #  local_start 2009-04-05 03:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63392137200, #    utc_start 2009-10-25 07:00:00 (Sun)
  63406051200, #      utc_end 2010-04-04 08:00:00 (Sun)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63406029600, #    local_end 2010-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63406051200, #    utc_start 2010-04-04 08:00:00 (Sun)
  63424191600, #      utc_end 2010-10-31 07:00:00 (Sun)
  63406033200, #  local_start 2010-04-04 03:00:00 (Sun)
  63424173600, #    local_end 2010-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424191600, #    utc_start 2010-10-31 07:00:00 (Sun)
  63437500800, #      utc_end 2011-04-03 08:00:00 (Sun)
  63424170000, #  local_start 2010-10-31 01:00:00 (Sun)
  63437479200, #    local_end 2011-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63437500800, #    utc_start 2011-04-03 08:00:00 (Sun)
  63455641200, #      utc_end 2011-10-30 07:00:00 (Sun)
  63437482800, #  local_start 2011-04-03 03:00:00 (Sun)
  63455623200, #    local_end 2011-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63455641200, #    utc_start 2011-10-30 07:00:00 (Sun)
  63468950400, #      utc_end 2012-04-01 08:00:00 (Sun)
  63455619600, #  local_start 2011-10-30 01:00:00 (Sun)
  63468928800, #    local_end 2012-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63468950400, #    utc_start 2012-04-01 08:00:00 (Sun)
  63487090800, #      utc_end 2012-10-28 07:00:00 (Sun)
  63468932400, #  local_start 2012-04-01 03:00:00 (Sun)
  63487072800, #    local_end 2012-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487090800, #    utc_start 2012-10-28 07:00:00 (Sun)
  63501004800, #      utc_end 2013-04-07 08:00:00 (Sun)
  63487069200, #  local_start 2012-10-28 01:00:00 (Sun)
  63500983200, #    local_end 2013-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63501004800, #    utc_start 2013-04-07 08:00:00 (Sun)
  63518540400, #      utc_end 2013-10-27 07:00:00 (Sun)
  63500986800, #  local_start 2013-04-07 03:00:00 (Sun)
  63518522400, #    local_end 2013-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63518540400, #    utc_start 2013-10-27 07:00:00 (Sun)
  63532454400, #      utc_end 2014-04-06 08:00:00 (Sun)
  63518518800, #  local_start 2013-10-27 01:00:00 (Sun)
  63532432800, #    local_end 2014-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63532454400, #    utc_start 2014-04-06 08:00:00 (Sun)
  63549990000, #      utc_end 2014-10-26 07:00:00 (Sun)
  63532436400, #  local_start 2014-04-06 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63549990000, #    utc_start 2014-10-26 07:00:00 (Sun)
  63563904000, #      utc_end 2015-04-05 08:00:00 (Sun)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63563882400, #    local_end 2015-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63563904000, #    utc_start 2015-04-05 08:00:00 (Sun)
  63581439600, #      utc_end 2015-10-25 07:00:00 (Sun)
  63563886000, #  local_start 2015-04-05 03:00:00 (Sun)
  63581421600, #    local_end 2015-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63581439600, #    utc_start 2015-10-25 07:00:00 (Sun)
  63595353600, #      utc_end 2016-04-03 08:00:00 (Sun)
  63581418000, #  local_start 2015-10-25 01:00:00 (Sun)
  63595332000, #    local_end 2016-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63595353600, #    utc_start 2016-04-03 08:00:00 (Sun)
  63613494000, #      utc_end 2016-10-30 07:00:00 (Sun)
  63595335600, #  local_start 2016-04-03 03:00:00 (Sun)
  63613476000, #    local_end 2016-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63613494000, #    utc_start 2016-10-30 07:00:00 (Sun)
  63626803200, #      utc_end 2017-04-02 08:00:00 (Sun)
  63613472400, #  local_start 2016-10-30 01:00:00 (Sun)
  63626781600, #    local_end 2017-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63626803200, #    utc_start 2017-04-02 08:00:00 (Sun)
  63644943600, #      utc_end 2017-10-29 07:00:00 (Sun)
  63626785200, #  local_start 2017-04-02 03:00:00 (Sun)
  63644925600, #    local_end 2017-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63644943600, #    utc_start 2017-10-29 07:00:00 (Sun)
  63658252800, #      utc_end 2018-04-01 08:00:00 (Sun)
  63644922000, #  local_start 2017-10-29 01:00:00 (Sun)
  63658231200, #    local_end 2018-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63658252800, #    utc_start 2018-04-01 08:00:00 (Sun)
  63676393200, #      utc_end 2018-10-28 07:00:00 (Sun)
  63658234800, #  local_start 2018-04-01 03:00:00 (Sun)
  63676375200, #    local_end 2018-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676393200, #    utc_start 2018-10-28 07:00:00 (Sun)
  63690307200, #      utc_end 2019-04-07 08:00:00 (Sun)
  63676371600, #  local_start 2018-10-28 01:00:00 (Sun)
  63690285600, #    local_end 2019-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63690307200, #    utc_start 2019-04-07 08:00:00 (Sun)
  63707842800, #      utc_end 2019-10-27 07:00:00 (Sun)
  63690289200, #  local_start 2019-04-07 03:00:00 (Sun)
  63707824800, #    local_end 2019-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63707842800, #    utc_start 2019-10-27 07:00:00 (Sun)
  63721756800, #      utc_end 2020-04-05 08:00:00 (Sun)
  63707821200, #  local_start 2019-10-27 01:00:00 (Sun)
  63721735200, #    local_end 2020-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63721756800, #    utc_start 2020-04-05 08:00:00 (Sun)
  63739292400, #      utc_end 2020-10-25 07:00:00 (Sun)
  63721738800, #  local_start 2020-04-05 03:00:00 (Sun)
  63739274400, #    local_end 2020-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739292400, #    utc_start 2020-10-25 07:00:00 (Sun)
  63753206400, #      utc_end 2021-04-04 08:00:00 (Sun)
  63739270800, #  local_start 2020-10-25 01:00:00 (Sun)
  63753184800, #    local_end 2021-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63753206400, #    utc_start 2021-04-04 08:00:00 (Sun)
  63771346800, #      utc_end 2021-10-31 07:00:00 (Sun)
  63753188400, #  local_start 2021-04-04 03:00:00 (Sun)
  63771328800, #    local_end 2021-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771346800, #    utc_start 2021-10-31 07:00:00 (Sun)
  63784656000, #      utc_end 2022-04-03 08:00:00 (Sun)
  63771325200, #  local_start 2021-10-31 01:00:00 (Sun)
  63784634400, #    local_end 2022-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63784656000, #    utc_start 2022-04-03 08:00:00 (Sun)
  63802796400, #      utc_end 2022-10-30 07:00:00 (Sun)
  63784638000, #  local_start 2022-04-03 03:00:00 (Sun)
  63802778400, #    local_end 2022-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63802796400, #    utc_start 2022-10-30 07:00:00 (Sun)
  63816105600, #      utc_end 2023-04-02 08:00:00 (Sun)
  63802774800, #  local_start 2022-10-30 01:00:00 (Sun)
  63816084000, #    local_end 2023-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63816105600, #    utc_start 2023-04-02 08:00:00 (Sun)
  63834246000, #      utc_end 2023-10-29 07:00:00 (Sun)
  63816087600, #  local_start 2023-04-02 03:00:00 (Sun)
  63834228000, #    local_end 2023-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834246000, #    utc_start 2023-10-29 07:00:00 (Sun)
  63848160000, #      utc_end 2024-04-07 08:00:00 (Sun)
  63834224400, #  local_start 2023-10-29 01:00:00 (Sun)
  63848138400, #    local_end 2024-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63848160000, #    utc_start 2024-04-07 08:00:00 (Sun)
  63865695600, #      utc_end 2024-10-27 07:00:00 (Sun)
  63848142000, #  local_start 2024-04-07 03:00:00 (Sun)
  63865677600, #    local_end 2024-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63865695600, #    utc_start 2024-10-27 07:00:00 (Sun)
  63879609600, #      utc_end 2025-04-06 08:00:00 (Sun)
  63865674000, #  local_start 2024-10-27 01:00:00 (Sun)
  63879588000, #    local_end 2025-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63879609600, #    utc_start 2025-04-06 08:00:00 (Sun)
  63897145200, #      utc_end 2025-10-26 07:00:00 (Sun)
  63879591600, #  local_start 2025-04-06 03:00:00 (Sun)
  63897127200, #    local_end 2025-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897145200, #    utc_start 2025-10-26 07:00:00 (Sun)
  63911059200, #      utc_end 2026-04-05 08:00:00 (Sun)
  63897123600, #  local_start 2025-10-26 01:00:00 (Sun)
  63911037600, #    local_end 2026-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63911059200, #    utc_start 2026-04-05 08:00:00 (Sun)
  63928594800, #      utc_end 2026-10-25 07:00:00 (Sun)
  63911041200, #  local_start 2026-04-05 03:00:00 (Sun)
  63928576800, #    local_end 2026-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63928594800, #    utc_start 2026-10-25 07:00:00 (Sun)
  63942508800, #      utc_end 2027-04-04 08:00:00 (Sun)
  63928573200, #  local_start 2026-10-25 01:00:00 (Sun)
  63942487200, #    local_end 2027-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63942508800, #    utc_start 2027-04-04 08:00:00 (Sun)
  63960649200, #      utc_end 2027-10-31 07:00:00 (Sun)
  63942490800, #  local_start 2027-04-04 03:00:00 (Sun)
  63960631200, #    local_end 2027-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {36}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730901,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730901,
      'utc_rd_secs' => 0,
      'utc_year' => 2003
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730901,
      'local_rd_secs' => 21600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730901,
      'utc_rd_secs' => 21600,
      'utc_year' => 2003
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2002',
      'in' => 'Apr',
      'letter' => 'D',
      'name' => 'Mexico',
      'offset_from_std' => 3600,
      'on' => 'Sun>=1',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2002',
      'in' => 'Oct',
      'letter' => 'S',
      'name' => 'Mexico',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_MEXICO_CITY

    $main::fatpacked{"DateTime/TimeZone/America/Miquelon.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_MIQUELON';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Miquelon;
  $DateTime::TimeZone::America::Miquelon::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Miquelon::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60285354280, #      utc_end 1911-05-15 03:44:40 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60285340800, #    local_end 1911-05-15 00:00:00 (Mon)
  -13480,
  0,
  'LMT',
      ],
      [
  60285354280, #    utc_start 1911-05-15 03:44:40 (Mon)
  62461684800, #      utc_end 1980-05-01 04:00:00 (Thu)
  60285339880, #  local_start 1911-05-14 23:44:40 (Sun)
  62461670400, #    local_end 1980-05-01 00:00:00 (Thu)
  -14400,
  0,
  'AST',
      ],
      [
  62461684800, #    utc_start 1980-05-01 04:00:00 (Thu)
  62672151600, #      utc_end 1987-01-01 03:00:00 (Thu)
  62461674000, #  local_start 1980-05-01 01:00:00 (Thu)
  62672140800, #    local_end 1987-01-01 00:00:00 (Thu)
  -10800,
  0,
  'PMST',
      ],
      [
  62672151600, #    utc_start 1987-01-01 03:00:00 (Thu)
  62680280400, #      utc_end 1987-04-05 05:00:00 (Sun)
  62672140800, #  local_start 1987-01-01 00:00:00 (Thu)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  62680280400, #    utc_start 1987-04-05 05:00:00 (Sun)
  62697816000, #      utc_end 1987-10-25 04:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  62697816000, #    utc_start 1987-10-25 04:00:00 (Sun)
  62711730000, #      utc_end 1988-04-03 05:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  62711730000, #    utc_start 1988-04-03 05:00:00 (Sun)
  62729870400, #      utc_end 1988-10-30 04:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  62729870400, #    utc_start 1988-10-30 04:00:00 (Sun)
  62743179600, #      utc_end 1989-04-02 05:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  62743179600, #    utc_start 1989-04-02 05:00:00 (Sun)
  62761320000, #      utc_end 1989-10-29 04:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  62761320000, #    utc_start 1989-10-29 04:00:00 (Sun)
  62774629200, #      utc_end 1990-04-01 05:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  62774629200, #    utc_start 1990-04-01 05:00:00 (Sun)
  62792769600, #      utc_end 1990-10-28 04:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  62792769600, #    utc_start 1990-10-28 04:00:00 (Sun)
  62806683600, #      utc_end 1991-04-07 05:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  62806683600, #    utc_start 1991-04-07 05:00:00 (Sun)
  62824219200, #      utc_end 1991-10-27 04:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  62824219200, #    utc_start 1991-10-27 04:00:00 (Sun)
  62838133200, #      utc_end 1992-04-05 05:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  62838133200, #    utc_start 1992-04-05 05:00:00 (Sun)
  62855668800, #      utc_end 1992-10-25 04:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  62855668800, #    utc_start 1992-10-25 04:00:00 (Sun)
  62869582800, #      utc_end 1993-04-04 05:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  62869582800, #    utc_start 1993-04-04 05:00:00 (Sun)
  62887723200, #      utc_end 1993-10-31 04:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  62887723200, #    utc_start 1993-10-31 04:00:00 (Sun)
  62901032400, #      utc_end 1994-04-03 05:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  62901032400, #    utc_start 1994-04-03 05:00:00 (Sun)
  62919172800, #      utc_end 1994-10-30 04:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  62919172800, #    utc_start 1994-10-30 04:00:00 (Sun)
  62932482000, #      utc_end 1995-04-02 05:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  62932482000, #    utc_start 1995-04-02 05:00:00 (Sun)
  62950622400, #      utc_end 1995-10-29 04:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  62950622400, #    utc_start 1995-10-29 04:00:00 (Sun)
  62964536400, #      utc_end 1996-04-07 05:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  62964536400, #    utc_start 1996-04-07 05:00:00 (Sun)
  62982072000, #      utc_end 1996-10-27 04:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  62982072000, #    utc_start 1996-10-27 04:00:00 (Sun)
  62995986000, #      utc_end 1997-04-06 05:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  62995986000, #    utc_start 1997-04-06 05:00:00 (Sun)
  63013521600, #      utc_end 1997-10-26 04:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63013521600, #    utc_start 1997-10-26 04:00:00 (Sun)
  63027435600, #      utc_end 1998-04-05 05:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63027435600, #    utc_start 1998-04-05 05:00:00 (Sun)
  63044971200, #      utc_end 1998-10-25 04:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63044971200, #    utc_start 1998-10-25 04:00:00 (Sun)
  63058885200, #      utc_end 1999-04-04 05:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63058885200, #    utc_start 1999-04-04 05:00:00 (Sun)
  63077025600, #      utc_end 1999-10-31 04:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63077025600, #    utc_start 1999-10-31 04:00:00 (Sun)
  63090334800, #      utc_end 2000-04-02 05:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63090334800, #    utc_start 2000-04-02 05:00:00 (Sun)
  63108475200, #      utc_end 2000-10-29 04:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63108475200, #    utc_start 2000-10-29 04:00:00 (Sun)
  63121784400, #      utc_end 2001-04-01 05:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63121784400, #    utc_start 2001-04-01 05:00:00 (Sun)
  63139924800, #      utc_end 2001-10-28 04:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63139924800, #    utc_start 2001-10-28 04:00:00 (Sun)
  63153838800, #      utc_end 2002-04-07 05:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63153838800, #    utc_start 2002-04-07 05:00:00 (Sun)
  63171374400, #      utc_end 2002-10-27 04:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63171374400, #    utc_start 2002-10-27 04:00:00 (Sun)
  63185288400, #      utc_end 2003-04-06 05:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63185288400, #    utc_start 2003-04-06 05:00:00 (Sun)
  63202824000, #      utc_end 2003-10-26 04:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63202824000, #    utc_start 2003-10-26 04:00:00 (Sun)
  63216738000, #      utc_end 2004-04-04 05:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63216738000, #    utc_start 2004-04-04 05:00:00 (Sun)
  63234878400, #      utc_end 2004-10-31 04:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63234878400, #    utc_start 2004-10-31 04:00:00 (Sun)
  63248187600, #      utc_end 2005-04-03 05:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63248187600, #    utc_start 2005-04-03 05:00:00 (Sun)
  63266328000, #      utc_end 2005-10-30 04:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63266328000, #    utc_start 2005-10-30 04:00:00 (Sun)
  63279637200, #      utc_end 2006-04-02 05:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63279637200, #    utc_start 2006-04-02 05:00:00 (Sun)
  63297777600, #      utc_end 2006-10-29 04:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63297777600, #    utc_start 2006-10-29 04:00:00 (Sun)
  63309272400, #      utc_end 2007-03-11 05:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63309272400, #    utc_start 2007-03-11 05:00:00 (Sun)
  63329832000, #      utc_end 2007-11-04 04:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63329832000, #    utc_start 2007-11-04 04:00:00 (Sun)
  63340722000, #      utc_end 2008-03-09 05:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63340722000, #    utc_start 2008-03-09 05:00:00 (Sun)
  63361281600, #      utc_end 2008-11-02 04:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63361281600, #    utc_start 2008-11-02 04:00:00 (Sun)
  63372171600, #      utc_end 2009-03-08 05:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63372171600, #    utc_start 2009-03-08 05:00:00 (Sun)
  63392731200, #      utc_end 2009-11-01 04:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63392731200, #    utc_start 2009-11-01 04:00:00 (Sun)
  63404226000, #      utc_end 2010-03-14 05:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63404226000, #    utc_start 2010-03-14 05:00:00 (Sun)
  63424785600, #      utc_end 2010-11-07 04:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63424785600, #    utc_start 2010-11-07 04:00:00 (Sun)
  63435675600, #      utc_end 2011-03-13 05:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63435675600, #    utc_start 2011-03-13 05:00:00 (Sun)
  63456235200, #      utc_end 2011-11-06 04:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63456235200, #    utc_start 2011-11-06 04:00:00 (Sun)
  63467125200, #      utc_end 2012-03-11 05:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63467125200, #    utc_start 2012-03-11 05:00:00 (Sun)
  63487684800, #      utc_end 2012-11-04 04:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63487684800, #    utc_start 2012-11-04 04:00:00 (Sun)
  63498574800, #      utc_end 2013-03-10 05:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63498574800, #    utc_start 2013-03-10 05:00:00 (Sun)
  63519134400, #      utc_end 2013-11-03 04:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63519134400, #    utc_start 2013-11-03 04:00:00 (Sun)
  63530024400, #      utc_end 2014-03-09 05:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63530024400, #    utc_start 2014-03-09 05:00:00 (Sun)
  63550584000, #      utc_end 2014-11-02 04:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63550584000, #    utc_start 2014-11-02 04:00:00 (Sun)
  63561474000, #      utc_end 2015-03-08 05:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63561474000, #    utc_start 2015-03-08 05:00:00 (Sun)
  63582033600, #      utc_end 2015-11-01 04:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63582033600, #    utc_start 2015-11-01 04:00:00 (Sun)
  63593528400, #      utc_end 2016-03-13 05:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63593528400, #    utc_start 2016-03-13 05:00:00 (Sun)
  63614088000, #      utc_end 2016-11-06 04:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63614088000, #    utc_start 2016-11-06 04:00:00 (Sun)
  63624978000, #      utc_end 2017-03-12 05:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63624978000, #    utc_start 2017-03-12 05:00:00 (Sun)
  63645537600, #      utc_end 2017-11-05 04:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63645537600, #    utc_start 2017-11-05 04:00:00 (Sun)
  63656427600, #      utc_end 2018-03-11 05:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63656427600, #    utc_start 2018-03-11 05:00:00 (Sun)
  63676987200, #      utc_end 2018-11-04 04:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63676987200, #    utc_start 2018-11-04 04:00:00 (Sun)
  63687877200, #      utc_end 2019-03-10 05:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63687877200, #    utc_start 2019-03-10 05:00:00 (Sun)
  63708436800, #      utc_end 2019-11-03 04:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63708436800, #    utc_start 2019-11-03 04:00:00 (Sun)
  63719326800, #      utc_end 2020-03-08 05:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63719326800, #    utc_start 2020-03-08 05:00:00 (Sun)
  63739886400, #      utc_end 2020-11-01 04:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63739886400, #    utc_start 2020-11-01 04:00:00 (Sun)
  63751381200, #      utc_end 2021-03-14 05:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63751381200, #    utc_start 2021-03-14 05:00:00 (Sun)
  63771940800, #      utc_end 2021-11-07 04:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63771940800, #    utc_start 2021-11-07 04:00:00 (Sun)
  63782830800, #      utc_end 2022-03-13 05:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63782830800, #    utc_start 2022-03-13 05:00:00 (Sun)
  63803390400, #      utc_end 2022-11-06 04:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63803390400, #    utc_start 2022-11-06 04:00:00 (Sun)
  63814280400, #      utc_end 2023-03-12 05:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63814280400, #    utc_start 2023-03-12 05:00:00 (Sun)
  63834840000, #      utc_end 2023-11-05 04:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63834840000, #    utc_start 2023-11-05 04:00:00 (Sun)
  63845730000, #      utc_end 2024-03-10 05:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63845730000, #    utc_start 2024-03-10 05:00:00 (Sun)
  63866289600, #      utc_end 2024-11-03 04:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63866289600, #    utc_start 2024-11-03 04:00:00 (Sun)
  63877179600, #      utc_end 2025-03-09 05:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63877179600, #    utc_start 2025-03-09 05:00:00 (Sun)
  63897739200, #      utc_end 2025-11-02 04:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63897739200, #    utc_start 2025-11-02 04:00:00 (Sun)
  63908629200, #      utc_end 2026-03-08 05:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63908629200, #    utc_start 2026-03-08 05:00:00 (Sun)
  63929188800, #      utc_end 2026-11-01 04:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
      [
  63929188800, #    utc_start 2026-11-01 04:00:00 (Sun)
  63940683600, #      utc_end 2027-03-14 05:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -10800,
  0,
  'PMST',
      ],
      [
  63940683600, #    utc_start 2027-03-14 05:00:00 (Sun)
  63961243200, #      utc_end 2027-11-07 04:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -7200,
  1,
  'PMDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {41}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -10800 }
  
  my $last_observance = bless( {
    'format' => 'PM%sT',
    'gmtoff' => '-3:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 725372,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 725372,
      'utc_rd_secs' => 0,
      'utc_year' => 1988
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -10800,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 725372,
      'local_rd_secs' => 10800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 725372,
      'utc_rd_secs' => 10800,
      'utc_year' => 1988
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_MIQUELON

    $main::fatpacked{"DateTime/TimeZone/America/Moncton.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_MONCTON';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Moncton;
  $DateTime::TimeZone::America::Moncton::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Moncton::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59419801148, #      utc_end 1883-12-09 04:19:08 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59419785600, #    local_end 1883-12-09 00:00:00 (Sun)
  -15548,
  0,
  'LMT',
      ],
      [
  59419801148, #    utc_start 1883-12-09 04:19:08 (Sun)
  60004040400, #      utc_end 1902-06-15 05:00:00 (Sun)
  59419783148, #  local_start 1883-12-08 23:19:08 (Sat)
  60004022400, #    local_end 1902-06-15 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60004040400, #    utc_start 1902-06-15 05:00:00 (Sun)
  60503608800, #      utc_end 1918-04-14 06:00:00 (Sun)
  60004026000, #  local_start 1902-06-15 01:00:00 (Sun)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60503608800, #    utc_start 1918-04-14 06:00:00 (Sun)
  60520539600, #      utc_end 1918-10-27 05:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  60520539600, #    utc_start 1918-10-27 05:00:00 (Sun)
  60968088000, #      utc_end 1933-01-01 04:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60968073600, #    local_end 1933-01-01 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60968088000, #    utc_start 1933-01-01 04:00:00 (Sun)
  60982002000, #      utc_end 1933-06-11 05:00:00 (Sun)
  60968073600, #  local_start 1933-01-01 00:00:00 (Sun)
  60981987600, #    local_end 1933-06-11 01:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  60982002000, #    utc_start 1933-06-11 05:00:00 (Sun)
  60989860800, #      utc_end 1933-09-10 04:00:00 (Sun)
  60981991200, #  local_start 1933-06-11 02:00:00 (Sun)
  60989850000, #    local_end 1933-09-10 01:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  60989860800, #    utc_start 1933-09-10 04:00:00 (Sun)
  61013451600, #      utc_end 1934-06-10 05:00:00 (Sun)
  60989846400, #  local_start 1933-09-10 00:00:00 (Sun)
  61013437200, #    local_end 1934-06-10 01:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61013451600, #    utc_start 1934-06-10 05:00:00 (Sun)
  61021310400, #      utc_end 1934-09-09 04:00:00 (Sun)
  61013440800, #  local_start 1934-06-10 02:00:00 (Sun)
  61021299600, #    local_end 1934-09-09 01:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61021310400, #    utc_start 1934-09-09 04:00:00 (Sun)
  61044901200, #      utc_end 1935-06-09 05:00:00 (Sun)
  61021296000, #  local_start 1934-09-09 00:00:00 (Sun)
  61044886800, #    local_end 1935-06-09 01:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61044901200, #    utc_start 1935-06-09 05:00:00 (Sun)
  61052760000, #      utc_end 1935-09-08 04:00:00 (Sun)
  61044890400, #  local_start 1935-06-09 02:00:00 (Sun)
  61052749200, #    local_end 1935-09-08 01:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61052760000, #    utc_start 1935-09-08 04:00:00 (Sun)
  61076350800, #      utc_end 1936-06-07 05:00:00 (Sun)
  61052745600, #  local_start 1935-09-08 00:00:00 (Sun)
  61076336400, #    local_end 1936-06-07 01:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61076350800, #    utc_start 1936-06-07 05:00:00 (Sun)
  61084209600, #      utc_end 1936-09-06 04:00:00 (Sun)
  61076340000, #  local_start 1936-06-07 02:00:00 (Sun)
  61084198800, #    local_end 1936-09-06 01:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61084209600, #    utc_start 1936-09-06 04:00:00 (Sun)
  61107800400, #      utc_end 1937-06-06 05:00:00 (Sun)
  61084195200, #  local_start 1936-09-06 00:00:00 (Sun)
  61107786000, #    local_end 1937-06-06 01:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61107800400, #    utc_start 1937-06-06 05:00:00 (Sun)
  61115659200, #      utc_end 1937-09-05 04:00:00 (Sun)
  61107789600, #  local_start 1937-06-06 02:00:00 (Sun)
  61115648400, #    local_end 1937-09-05 01:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61115659200, #    utc_start 1937-09-05 04:00:00 (Sun)
  61139250000, #      utc_end 1938-06-05 05:00:00 (Sun)
  61115644800, #  local_start 1937-09-05 00:00:00 (Sun)
  61139235600, #    local_end 1938-06-05 01:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61139250000, #    utc_start 1938-06-05 05:00:00 (Sun)
  61147108800, #      utc_end 1938-09-04 04:00:00 (Sun)
  61139239200, #  local_start 1938-06-05 02:00:00 (Sun)
  61147098000, #    local_end 1938-09-04 01:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61147108800, #    utc_start 1938-09-04 04:00:00 (Sun)
  61170008400, #      utc_end 1939-05-27 05:00:00 (Sat)
  61147094400, #  local_start 1938-09-04 00:00:00 (Sun)
  61169994000, #    local_end 1939-05-27 01:00:00 (Sat)
  -14400,
  0,
  'AST',
      ],
      [
  61170008400, #    utc_start 1939-05-27 05:00:00 (Sat)
  61180286400, #      utc_end 1939-09-23 04:00:00 (Sat)
  61169997600, #  local_start 1939-05-27 02:00:00 (Sat)
  61180275600, #    local_end 1939-09-23 01:00:00 (Sat)
  -10800,
  1,
  'ADT',
      ],
      [
  61180286400, #    utc_start 1939-09-23 04:00:00 (Sat)
  61200939600, #      utc_end 1940-05-19 05:00:00 (Sun)
  61180272000, #  local_start 1939-09-23 00:00:00 (Sat)
  61200925200, #    local_end 1940-05-19 01:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61200939600, #    utc_start 1940-05-19 05:00:00 (Sun)
  61211736000, #      utc_end 1940-09-21 04:00:00 (Sat)
  61200928800, #  local_start 1940-05-19 02:00:00 (Sun)
  61211725200, #    local_end 1940-09-21 01:00:00 (Sat)
  -10800,
  1,
  'ADT',
      ],
      [
  61211736000, #    utc_start 1940-09-21 04:00:00 (Sat)
  61231179600, #      utc_end 1941-05-04 05:00:00 (Sun)
  61211721600, #  local_start 1940-09-21 00:00:00 (Sat)
  61231165200, #    local_end 1941-05-04 01:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61231179600, #    utc_start 1941-05-04 05:00:00 (Sun)
  61243790400, #      utc_end 1941-09-27 04:00:00 (Sat)
  61231168800, #  local_start 1941-05-04 02:00:00 (Sun)
  61243779600, #    local_end 1941-09-27 01:00:00 (Sat)
  -10800,
  1,
  'ADT',
      ],
      [
  61243790400, #    utc_start 1941-09-27 04:00:00 (Sat)
  61252084800, #      utc_end 1942-01-01 04:00:00 (Thu)
  61243776000, #  local_start 1941-09-27 00:00:00 (Sat)
  61252070400, #    local_end 1942-01-01 00:00:00 (Thu)
  -14400,
  0,
  'AST',
      ],
      [
  61252084800, #    utc_start 1942-01-01 04:00:00 (Thu)
  61255461600, #      utc_end 1942-02-09 06:00:00 (Mon)
  61252070400, #  local_start 1942-01-01 00:00:00 (Thu)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -14400,
  0,
  'AST',
      ],
      [
  61255461600, #    utc_start 1942-02-09 06:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366276800, #    local_end 1945-08-14 20:00:00 (Tue)
  -10800,
  1,
  'AWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370283600, #      utc_end 1945-09-30 05:00:00 (Sun)
  61366276800, #  local_start 1945-08-14 20:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -10800,
  1,
  'APT',
      ],
      [
  61370283600, #    utc_start 1945-09-30 05:00:00 (Sun)
  61378315200, #      utc_end 1946-01-01 04:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -14400,
  0,
  'AST',
      ],
      [
  61378315200, #    utc_start 1946-01-01 04:00:00 (Tue)
  61388431200, #      utc_end 1946-04-28 06:00:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61388416800, #    local_end 1946-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61388431200, #    utc_start 1946-04-28 06:00:00 (Sun)
  61401733200, #      utc_end 1946-09-29 05:00:00 (Sun)
  61388420400, #  local_start 1946-04-28 03:00:00 (Sun)
  61401722400, #    local_end 1946-09-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61401733200, #    utc_start 1946-09-29 05:00:00 (Sun)
  61419880800, #      utc_end 1947-04-27 06:00:00 (Sun)
  61401718800, #  local_start 1946-09-29 01:00:00 (Sun)
  61419866400, #    local_end 1947-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61419880800, #    utc_start 1947-04-27 06:00:00 (Sun)
  61433182800, #      utc_end 1947-09-28 05:00:00 (Sun)
  61419870000, #  local_start 1947-04-27 03:00:00 (Sun)
  61433172000, #    local_end 1947-09-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61433182800, #    utc_start 1947-09-28 05:00:00 (Sun)
  61451330400, #      utc_end 1948-04-25 06:00:00 (Sun)
  61433168400, #  local_start 1947-09-28 01:00:00 (Sun)
  61451316000, #    local_end 1948-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61451330400, #    utc_start 1948-04-25 06:00:00 (Sun)
  61464632400, #      utc_end 1948-09-26 05:00:00 (Sun)
  61451319600, #  local_start 1948-04-25 03:00:00 (Sun)
  61464621600, #    local_end 1948-09-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61464632400, #    utc_start 1948-09-26 05:00:00 (Sun)
  61482780000, #      utc_end 1949-04-24 06:00:00 (Sun)
  61464618000, #  local_start 1948-09-26 01:00:00 (Sun)
  61482765600, #    local_end 1949-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61482780000, #    utc_start 1949-04-24 06:00:00 (Sun)
  61496082000, #      utc_end 1949-09-25 05:00:00 (Sun)
  61482769200, #  local_start 1949-04-24 03:00:00 (Sun)
  61496071200, #    local_end 1949-09-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61496082000, #    utc_start 1949-09-25 05:00:00 (Sun)
  61514834400, #      utc_end 1950-04-30 06:00:00 (Sun)
  61496067600, #  local_start 1949-09-25 01:00:00 (Sun)
  61514820000, #    local_end 1950-04-30 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61514834400, #    utc_start 1950-04-30 06:00:00 (Sun)
  61527531600, #      utc_end 1950-09-24 05:00:00 (Sun)
  61514823600, #  local_start 1950-04-30 03:00:00 (Sun)
  61527520800, #    local_end 1950-09-24 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61527531600, #    utc_start 1950-09-24 05:00:00 (Sun)
  61546284000, #      utc_end 1951-04-29 06:00:00 (Sun)
  61527517200, #  local_start 1950-09-24 01:00:00 (Sun)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61546284000, #    utc_start 1951-04-29 06:00:00 (Sun)
  61559586000, #      utc_end 1951-09-30 05:00:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61559586000, #    utc_start 1951-09-30 05:00:00 (Sun)
  61577733600, #      utc_end 1952-04-27 06:00:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61577733600, #    utc_start 1952-04-27 06:00:00 (Sun)
  61591035600, #      utc_end 1952-09-28 05:00:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61591035600, #    utc_start 1952-09-28 05:00:00 (Sun)
  61609183200, #      utc_end 1953-04-26 06:00:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61609183200, #    utc_start 1953-04-26 06:00:00 (Sun)
  61622485200, #      utc_end 1953-09-27 05:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61622485200, #    utc_start 1953-09-27 05:00:00 (Sun)
  61640632800, #      utc_end 1954-04-25 06:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61640632800, #    utc_start 1954-04-25 06:00:00 (Sun)
  61653934800, #      utc_end 1954-09-26 05:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61653934800, #    utc_start 1954-09-26 05:00:00 (Sun)
  61672082400, #      utc_end 1955-04-24 06:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61672082400, #    utc_start 1955-04-24 06:00:00 (Sun)
  61685384400, #      utc_end 1955-09-25 05:00:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61685373600, #    local_end 1955-09-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61685384400, #    utc_start 1955-09-25 05:00:00 (Sun)
  61704136800, #      utc_end 1956-04-29 06:00:00 (Sun)
  61685370000, #  local_start 1955-09-25 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61704136800, #    utc_start 1956-04-29 06:00:00 (Sun)
  61717438800, #      utc_end 1956-09-30 05:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61717428000, #    local_end 1956-09-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61717438800, #    utc_start 1956-09-30 05:00:00 (Sun)
  61735586400, #      utc_end 1957-04-28 06:00:00 (Sun)
  61717424400, #  local_start 1956-09-30 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61735586400, #    utc_start 1957-04-28 06:00:00 (Sun)
  61751307600, #      utc_end 1957-10-27 05:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61751296800, #    local_end 1957-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61751307600, #    utc_start 1957-10-27 05:00:00 (Sun)
  61767036000, #      utc_end 1958-04-27 06:00:00 (Sun)
  61751293200, #  local_start 1957-10-27 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61767036000, #    utc_start 1958-04-27 06:00:00 (Sun)
  61782757200, #      utc_end 1958-10-26 05:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61782746400, #    local_end 1958-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61782757200, #    utc_start 1958-10-26 05:00:00 (Sun)
  61798485600, #      utc_end 1959-04-26 06:00:00 (Sun)
  61782742800, #  local_start 1958-10-26 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61798485600, #    utc_start 1959-04-26 06:00:00 (Sun)
  61814206800, #      utc_end 1959-10-25 05:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61814196000, #    local_end 1959-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61814206800, #    utc_start 1959-10-25 05:00:00 (Sun)
  61829935200, #      utc_end 1960-04-24 06:00:00 (Sun)
  61814192400, #  local_start 1959-10-25 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61829935200, #    utc_start 1960-04-24 06:00:00 (Sun)
  61846261200, #      utc_end 1960-10-30 05:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61846250400, #    local_end 1960-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61846261200, #    utc_start 1960-10-30 05:00:00 (Sun)
  61861989600, #      utc_end 1961-04-30 06:00:00 (Sun)
  61846246800, #  local_start 1960-10-30 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61861989600, #    utc_start 1961-04-30 06:00:00 (Sun)
  61877710800, #      utc_end 1961-10-29 05:00:00 (Sun)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  61877700000, #    local_end 1961-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61877710800, #    utc_start 1961-10-29 05:00:00 (Sun)
  61893439200, #      utc_end 1962-04-29 06:00:00 (Sun)
  61877696400, #  local_start 1961-10-29 01:00:00 (Sun)
  61893424800, #    local_end 1962-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61893439200, #    utc_start 1962-04-29 06:00:00 (Sun)
  61909160400, #      utc_end 1962-10-28 05:00:00 (Sun)
  61893428400, #  local_start 1962-04-29 03:00:00 (Sun)
  61909149600, #    local_end 1962-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61909160400, #    utc_start 1962-10-28 05:00:00 (Sun)
  61924888800, #      utc_end 1963-04-28 06:00:00 (Sun)
  61909146000, #  local_start 1962-10-28 01:00:00 (Sun)
  61924874400, #    local_end 1963-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61924888800, #    utc_start 1963-04-28 06:00:00 (Sun)
  61940610000, #      utc_end 1963-10-27 05:00:00 (Sun)
  61924878000, #  local_start 1963-04-28 03:00:00 (Sun)
  61940599200, #    local_end 1963-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61940610000, #    utc_start 1963-10-27 05:00:00 (Sun)
  61956338400, #      utc_end 1964-04-26 06:00:00 (Sun)
  61940595600, #  local_start 1963-10-27 01:00:00 (Sun)
  61956324000, #    local_end 1964-04-26 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61956338400, #    utc_start 1964-04-26 06:00:00 (Sun)
  61972059600, #      utc_end 1964-10-25 05:00:00 (Sun)
  61956327600, #  local_start 1964-04-26 03:00:00 (Sun)
  61972048800, #    local_end 1964-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  61972059600, #    utc_start 1964-10-25 05:00:00 (Sun)
  61987788000, #      utc_end 1965-04-25 06:00:00 (Sun)
  61972045200, #  local_start 1964-10-25 01:00:00 (Sun)
  61987773600, #    local_end 1965-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61987788000, #    utc_start 1965-04-25 06:00:00 (Sun)
  62004114000, #      utc_end 1965-10-31 05:00:00 (Sun)
  61987777200, #  local_start 1965-04-25 03:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62004114000, #    utc_start 1965-10-31 05:00:00 (Sun)
  62019237600, #      utc_end 1966-04-24 06:00:00 (Sun)
  62004099600, #  local_start 1965-10-31 01:00:00 (Sun)
  62019223200, #    local_end 1966-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62019237600, #    utc_start 1966-04-24 06:00:00 (Sun)
  62035563600, #      utc_end 1966-10-30 05:00:00 (Sun)
  62019226800, #  local_start 1966-04-24 03:00:00 (Sun)
  62035552800, #    local_end 1966-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62035563600, #    utc_start 1966-10-30 05:00:00 (Sun)
  62051292000, #      utc_end 1967-04-30 06:00:00 (Sun)
  62035549200, #  local_start 1966-10-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62051292000, #    utc_start 1967-04-30 06:00:00 (Sun)
  62067013200, #      utc_end 1967-10-29 05:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62067013200, #    utc_start 1967-10-29 05:00:00 (Sun)
  62082741600, #      utc_end 1968-04-28 06:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62082741600, #    utc_start 1968-04-28 06:00:00 (Sun)
  62098462800, #      utc_end 1968-10-27 05:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62098462800, #    utc_start 1968-10-27 05:00:00 (Sun)
  62114191200, #      utc_end 1969-04-27 06:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62114191200, #    utc_start 1969-04-27 06:00:00 (Sun)
  62129912400, #      utc_end 1969-10-26 05:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62129912400, #    utc_start 1969-10-26 05:00:00 (Sun)
  62145640800, #      utc_end 1970-04-26 06:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62145640800, #    utc_start 1970-04-26 06:00:00 (Sun)
  62161362000, #      utc_end 1970-10-25 05:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62161362000, #    utc_start 1970-10-25 05:00:00 (Sun)
  62177090400, #      utc_end 1971-04-25 06:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62177090400, #    utc_start 1971-04-25 06:00:00 (Sun)
  62193416400, #      utc_end 1971-10-31 05:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62193416400, #    utc_start 1971-10-31 05:00:00 (Sun)
  62209144800, #      utc_end 1972-04-30 06:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62209144800, #    utc_start 1972-04-30 06:00:00 (Sun)
  62224866000, #      utc_end 1972-10-29 05:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62224866000, #    utc_start 1972-10-29 05:00:00 (Sun)
  62230392000, #      utc_end 1973-01-01 04:00:00 (Mon)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62230377600, #    local_end 1973-01-01 00:00:00 (Mon)
  -14400,
  0,
  'AST',
      ],
      [
  62230392000, #    utc_start 1973-01-01 04:00:00 (Mon)
  62272044000, #      utc_end 1974-04-28 06:00:00 (Sun)
  62230377600, #  local_start 1973-01-01 00:00:00 (Mon)
  62272029600, #    local_end 1974-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62272044000, #    utc_start 1974-04-28 06:00:00 (Sun)
  62287765200, #      utc_end 1974-10-27 05:00:00 (Sun)
  62272033200, #  local_start 1974-04-28 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62287765200, #    utc_start 1974-10-27 05:00:00 (Sun)
  62303493600, #      utc_end 1975-04-27 06:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62303479200, #    local_end 1975-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62303493600, #    utc_start 1975-04-27 06:00:00 (Sun)
  62319214800, #      utc_end 1975-10-26 05:00:00 (Sun)
  62303482800, #  local_start 1975-04-27 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62319214800, #    utc_start 1975-10-26 05:00:00 (Sun)
  62334943200, #      utc_end 1976-04-25 06:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62334943200, #    utc_start 1976-04-25 06:00:00 (Sun)
  62351269200, #      utc_end 1976-10-31 05:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62351269200, #    utc_start 1976-10-31 05:00:00 (Sun)
  62366392800, #      utc_end 1977-04-24 06:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62366392800, #    utc_start 1977-04-24 06:00:00 (Sun)
  62382718800, #      utc_end 1977-10-30 05:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62382718800, #    utc_start 1977-10-30 05:00:00 (Sun)
  62398447200, #      utc_end 1978-04-30 06:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62398447200, #    utc_start 1978-04-30 06:00:00 (Sun)
  62414168400, #      utc_end 1978-10-29 05:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62414168400, #    utc_start 1978-10-29 05:00:00 (Sun)
  62429896800, #      utc_end 1979-04-29 06:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62429896800, #    utc_start 1979-04-29 06:00:00 (Sun)
  62445618000, #      utc_end 1979-10-28 05:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62445618000, #    utc_start 1979-10-28 05:00:00 (Sun)
  62461346400, #      utc_end 1980-04-27 06:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62461346400, #    utc_start 1980-04-27 06:00:00 (Sun)
  62477067600, #      utc_end 1980-10-26 05:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62477067600, #    utc_start 1980-10-26 05:00:00 (Sun)
  62492796000, #      utc_end 1981-04-26 06:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62492796000, #    utc_start 1981-04-26 06:00:00 (Sun)
  62508517200, #      utc_end 1981-10-25 05:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62508517200, #    utc_start 1981-10-25 05:00:00 (Sun)
  62524245600, #      utc_end 1982-04-25 06:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62524245600, #    utc_start 1982-04-25 06:00:00 (Sun)
  62540571600, #      utc_end 1982-10-31 05:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62540571600, #    utc_start 1982-10-31 05:00:00 (Sun)
  62555695200, #      utc_end 1983-04-24 06:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62555695200, #    utc_start 1983-04-24 06:00:00 (Sun)
  62572021200, #      utc_end 1983-10-30 05:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62572021200, #    utc_start 1983-10-30 05:00:00 (Sun)
  62587749600, #      utc_end 1984-04-29 06:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62587749600, #    utc_start 1984-04-29 06:00:00 (Sun)
  62603470800, #      utc_end 1984-10-28 05:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62603470800, #    utc_start 1984-10-28 05:00:00 (Sun)
  62619199200, #      utc_end 1985-04-28 06:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62619199200, #    utc_start 1985-04-28 06:00:00 (Sun)
  62634920400, #      utc_end 1985-10-27 05:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62634920400, #    utc_start 1985-10-27 05:00:00 (Sun)
  62650648800, #      utc_end 1986-04-27 06:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62650648800, #    utc_start 1986-04-27 06:00:00 (Sun)
  62666370000, #      utc_end 1986-10-26 05:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62666370000, #    utc_start 1986-10-26 05:00:00 (Sun)
  62680284000, #      utc_end 1987-04-05 06:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62680284000, #    utc_start 1987-04-05 06:00:00 (Sun)
  62697819600, #      utc_end 1987-10-25 05:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62697819600, #    utc_start 1987-10-25 05:00:00 (Sun)
  62711733600, #      utc_end 1988-04-03 06:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62711733600, #    utc_start 1988-04-03 06:00:00 (Sun)
  62729874000, #      utc_end 1988-10-30 05:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62729874000, #    utc_start 1988-10-30 05:00:00 (Sun)
  62743183200, #      utc_end 1989-04-02 06:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62743183200, #    utc_start 1989-04-02 06:00:00 (Sun)
  62761323600, #      utc_end 1989-10-29 05:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62761323600, #    utc_start 1989-10-29 05:00:00 (Sun)
  62774632800, #      utc_end 1990-04-01 06:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62774632800, #    utc_start 1990-04-01 06:00:00 (Sun)
  62792773200, #      utc_end 1990-10-28 05:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62792773200, #    utc_start 1990-10-28 05:00:00 (Sun)
  62806687200, #      utc_end 1991-04-07 06:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62806687200, #    utc_start 1991-04-07 06:00:00 (Sun)
  62824222800, #      utc_end 1991-10-27 05:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62824222800, #    utc_start 1991-10-27 05:00:00 (Sun)
  62838136800, #      utc_end 1992-04-05 06:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62838136800, #    utc_start 1992-04-05 06:00:00 (Sun)
  62855672400, #      utc_end 1992-10-25 05:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62855672400, #    utc_start 1992-10-25 05:00:00 (Sun)
  62861544000, #      utc_end 1993-01-01 04:00:00 (Fri)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62861529600, #    local_end 1993-01-01 00:00:00 (Fri)
  -14400,
  0,
  'AST',
      ],
      [
  62861544000, #    utc_start 1993-01-01 04:00:00 (Fri)
  62869579260, #      utc_end 1993-04-04 04:01:00 (Sun)
  62861529600, #  local_start 1993-01-01 00:00:00 (Fri)
  62869564860, #    local_end 1993-04-04 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62869579260, #    utc_start 1993-04-04 04:01:00 (Sun)
  62887719660, #      utc_end 1993-10-31 03:01:00 (Sun)
  62869568460, #  local_start 1993-04-04 01:01:00 (Sun)
  62887708860, #    local_end 1993-10-31 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62887719660, #    utc_start 1993-10-31 03:01:00 (Sun)
  62901028860, #      utc_end 1994-04-03 04:01:00 (Sun)
  62887705260, #  local_start 1993-10-30 23:01:00 (Sat)
  62901014460, #    local_end 1994-04-03 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62901028860, #    utc_start 1994-04-03 04:01:00 (Sun)
  62919169260, #      utc_end 1994-10-30 03:01:00 (Sun)
  62901018060, #  local_start 1994-04-03 01:01:00 (Sun)
  62919158460, #    local_end 1994-10-30 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62919169260, #    utc_start 1994-10-30 03:01:00 (Sun)
  62932478460, #      utc_end 1995-04-02 04:01:00 (Sun)
  62919154860, #  local_start 1994-10-29 23:01:00 (Sat)
  62932464060, #    local_end 1995-04-02 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62932478460, #    utc_start 1995-04-02 04:01:00 (Sun)
  62950618860, #      utc_end 1995-10-29 03:01:00 (Sun)
  62932467660, #  local_start 1995-04-02 01:01:00 (Sun)
  62950608060, #    local_end 1995-10-29 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62950618860, #    utc_start 1995-10-29 03:01:00 (Sun)
  62964532860, #      utc_end 1996-04-07 04:01:00 (Sun)
  62950604460, #  local_start 1995-10-28 23:01:00 (Sat)
  62964518460, #    local_end 1996-04-07 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62964532860, #    utc_start 1996-04-07 04:01:00 (Sun)
  62982068460, #      utc_end 1996-10-27 03:01:00 (Sun)
  62964522060, #  local_start 1996-04-07 01:01:00 (Sun)
  62982057660, #    local_end 1996-10-27 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62982068460, #    utc_start 1996-10-27 03:01:00 (Sun)
  62995982460, #      utc_end 1997-04-06 04:01:00 (Sun)
  62982054060, #  local_start 1996-10-26 23:01:00 (Sat)
  62995968060, #    local_end 1997-04-06 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62995982460, #    utc_start 1997-04-06 04:01:00 (Sun)
  63013518060, #      utc_end 1997-10-26 03:01:00 (Sun)
  62995971660, #  local_start 1997-04-06 01:01:00 (Sun)
  63013507260, #    local_end 1997-10-26 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63013518060, #    utc_start 1997-10-26 03:01:00 (Sun)
  63027432060, #      utc_end 1998-04-05 04:01:00 (Sun)
  63013503660, #  local_start 1997-10-25 23:01:00 (Sat)
  63027417660, #    local_end 1998-04-05 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63027432060, #    utc_start 1998-04-05 04:01:00 (Sun)
  63044967660, #      utc_end 1998-10-25 03:01:00 (Sun)
  63027421260, #  local_start 1998-04-05 01:01:00 (Sun)
  63044956860, #    local_end 1998-10-25 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63044967660, #    utc_start 1998-10-25 03:01:00 (Sun)
  63058881660, #      utc_end 1999-04-04 04:01:00 (Sun)
  63044953260, #  local_start 1998-10-24 23:01:00 (Sat)
  63058867260, #    local_end 1999-04-04 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63058881660, #    utc_start 1999-04-04 04:01:00 (Sun)
  63077022060, #      utc_end 1999-10-31 03:01:00 (Sun)
  63058870860, #  local_start 1999-04-04 01:01:00 (Sun)
  63077011260, #    local_end 1999-10-31 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63077022060, #    utc_start 1999-10-31 03:01:00 (Sun)
  63090331260, #      utc_end 2000-04-02 04:01:00 (Sun)
  63077007660, #  local_start 1999-10-30 23:01:00 (Sat)
  63090316860, #    local_end 2000-04-02 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63090331260, #    utc_start 2000-04-02 04:01:00 (Sun)
  63108471660, #      utc_end 2000-10-29 03:01:00 (Sun)
  63090320460, #  local_start 2000-04-02 01:01:00 (Sun)
  63108460860, #    local_end 2000-10-29 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63108471660, #    utc_start 2000-10-29 03:01:00 (Sun)
  63121780860, #      utc_end 2001-04-01 04:01:00 (Sun)
  63108457260, #  local_start 2000-10-28 23:01:00 (Sat)
  63121766460, #    local_end 2001-04-01 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63121780860, #    utc_start 2001-04-01 04:01:00 (Sun)
  63139921260, #      utc_end 2001-10-28 03:01:00 (Sun)
  63121770060, #  local_start 2001-04-01 01:01:00 (Sun)
  63139910460, #    local_end 2001-10-28 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63139921260, #    utc_start 2001-10-28 03:01:00 (Sun)
  63153835260, #      utc_end 2002-04-07 04:01:00 (Sun)
  63139906860, #  local_start 2001-10-27 23:01:00 (Sat)
  63153820860, #    local_end 2002-04-07 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63153835260, #    utc_start 2002-04-07 04:01:00 (Sun)
  63171370860, #      utc_end 2002-10-27 03:01:00 (Sun)
  63153824460, #  local_start 2002-04-07 01:01:00 (Sun)
  63171360060, #    local_end 2002-10-27 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63171370860, #    utc_start 2002-10-27 03:01:00 (Sun)
  63185284860, #      utc_end 2003-04-06 04:01:00 (Sun)
  63171356460, #  local_start 2002-10-26 23:01:00 (Sat)
  63185270460, #    local_end 2003-04-06 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63185284860, #    utc_start 2003-04-06 04:01:00 (Sun)
  63202820460, #      utc_end 2003-10-26 03:01:00 (Sun)
  63185274060, #  local_start 2003-04-06 01:01:00 (Sun)
  63202809660, #    local_end 2003-10-26 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63202820460, #    utc_start 2003-10-26 03:01:00 (Sun)
  63216734460, #      utc_end 2004-04-04 04:01:00 (Sun)
  63202806060, #  local_start 2003-10-25 23:01:00 (Sat)
  63216720060, #    local_end 2004-04-04 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63216734460, #    utc_start 2004-04-04 04:01:00 (Sun)
  63234874860, #      utc_end 2004-10-31 03:01:00 (Sun)
  63216723660, #  local_start 2004-04-04 01:01:00 (Sun)
  63234864060, #    local_end 2004-10-31 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63234874860, #    utc_start 2004-10-31 03:01:00 (Sun)
  63248184060, #      utc_end 2005-04-03 04:01:00 (Sun)
  63234860460, #  local_start 2004-10-30 23:01:00 (Sat)
  63248169660, #    local_end 2005-04-03 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63248184060, #    utc_start 2005-04-03 04:01:00 (Sun)
  63266324460, #      utc_end 2005-10-30 03:01:00 (Sun)
  63248173260, #  local_start 2005-04-03 01:01:00 (Sun)
  63266313660, #    local_end 2005-10-30 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63266324460, #    utc_start 2005-10-30 03:01:00 (Sun)
  63279633660, #      utc_end 2006-04-02 04:01:00 (Sun)
  63266310060, #  local_start 2005-10-29 23:01:00 (Sat)
  63279619260, #    local_end 2006-04-02 00:01:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63279633660, #    utc_start 2006-04-02 04:01:00 (Sun)
  63297774060, #      utc_end 2006-10-29 03:01:00 (Sun)
  63279622860, #  local_start 2006-04-02 01:01:00 (Sun)
  63297763260, #    local_end 2006-10-29 00:01:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63297774060, #    utc_start 2006-10-29 03:01:00 (Sun)
  63303307200, #      utc_end 2007-01-01 04:00:00 (Mon)
  63297759660, #  local_start 2006-10-28 23:01:00 (Sat)
  63303292800, #    local_end 2007-01-01 00:00:00 (Mon)
  -14400,
  0,
  'AST',
      ],
      [
  63303307200, #    utc_start 2007-01-01 04:00:00 (Mon)
  63309276000, #      utc_end 2007-03-11 06:00:00 (Sun)
  63303292800, #  local_start 2007-01-01 00:00:00 (Mon)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63309276000, #    utc_start 2007-03-11 06:00:00 (Sun)
  63329835600, #      utc_end 2007-11-04 05:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63329835600, #    utc_start 2007-11-04 05:00:00 (Sun)
  63340725600, #      utc_end 2008-03-09 06:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63340725600, #    utc_start 2008-03-09 06:00:00 (Sun)
  63361285200, #      utc_end 2008-11-02 05:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63361285200, #    utc_start 2008-11-02 05:00:00 (Sun)
  63372175200, #      utc_end 2009-03-08 06:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63372175200, #    utc_start 2009-03-08 06:00:00 (Sun)
  63392734800, #      utc_end 2009-11-01 05:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63392734800, #    utc_start 2009-11-01 05:00:00 (Sun)
  63404229600, #      utc_end 2010-03-14 06:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63404229600, #    utc_start 2010-03-14 06:00:00 (Sun)
  63424789200, #      utc_end 2010-11-07 05:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63424789200, #    utc_start 2010-11-07 05:00:00 (Sun)
  63435679200, #      utc_end 2011-03-13 06:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63435679200, #    utc_start 2011-03-13 06:00:00 (Sun)
  63456238800, #      utc_end 2011-11-06 05:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63456238800, #    utc_start 2011-11-06 05:00:00 (Sun)
  63467128800, #      utc_end 2012-03-11 06:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63467128800, #    utc_start 2012-03-11 06:00:00 (Sun)
  63487688400, #      utc_end 2012-11-04 05:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63487688400, #    utc_start 2012-11-04 05:00:00 (Sun)
  63498578400, #      utc_end 2013-03-10 06:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63498578400, #    utc_start 2013-03-10 06:00:00 (Sun)
  63519138000, #      utc_end 2013-11-03 05:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63519138000, #    utc_start 2013-11-03 05:00:00 (Sun)
  63530028000, #      utc_end 2014-03-09 06:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63530028000, #    utc_start 2014-03-09 06:00:00 (Sun)
  63550587600, #      utc_end 2014-11-02 05:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63550587600, #    utc_start 2014-11-02 05:00:00 (Sun)
  63561477600, #      utc_end 2015-03-08 06:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63561477600, #    utc_start 2015-03-08 06:00:00 (Sun)
  63582037200, #      utc_end 2015-11-01 05:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63582037200, #    utc_start 2015-11-01 05:00:00 (Sun)
  63593532000, #      utc_end 2016-03-13 06:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63593532000, #    utc_start 2016-03-13 06:00:00 (Sun)
  63614091600, #      utc_end 2016-11-06 05:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63614091600, #    utc_start 2016-11-06 05:00:00 (Sun)
  63624981600, #      utc_end 2017-03-12 06:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63624981600, #    utc_start 2017-03-12 06:00:00 (Sun)
  63645541200, #      utc_end 2017-11-05 05:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63645541200, #    utc_start 2017-11-05 05:00:00 (Sun)
  63656431200, #      utc_end 2018-03-11 06:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63656431200, #    utc_start 2018-03-11 06:00:00 (Sun)
  63676990800, #      utc_end 2018-11-04 05:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63676990800, #    utc_start 2018-11-04 05:00:00 (Sun)
  63687880800, #      utc_end 2019-03-10 06:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63687880800, #    utc_start 2019-03-10 06:00:00 (Sun)
  63708440400, #      utc_end 2019-11-03 05:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63708440400, #    utc_start 2019-11-03 05:00:00 (Sun)
  63719330400, #      utc_end 2020-03-08 06:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63719330400, #    utc_start 2020-03-08 06:00:00 (Sun)
  63739890000, #      utc_end 2020-11-01 05:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63739890000, #    utc_start 2020-11-01 05:00:00 (Sun)
  63751384800, #      utc_end 2021-03-14 06:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63751384800, #    utc_start 2021-03-14 06:00:00 (Sun)
  63771944400, #      utc_end 2021-11-07 05:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63771944400, #    utc_start 2021-11-07 05:00:00 (Sun)
  63782834400, #      utc_end 2022-03-13 06:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63782834400, #    utc_start 2022-03-13 06:00:00 (Sun)
  63803394000, #      utc_end 2022-11-06 05:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63803394000, #    utc_start 2022-11-06 05:00:00 (Sun)
  63814284000, #      utc_end 2023-03-12 06:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63814284000, #    utc_start 2023-03-12 06:00:00 (Sun)
  63834843600, #      utc_end 2023-11-05 05:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63834843600, #    utc_start 2023-11-05 05:00:00 (Sun)
  63845733600, #      utc_end 2024-03-10 06:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63845733600, #    utc_start 2024-03-10 06:00:00 (Sun)
  63866293200, #      utc_end 2024-11-03 05:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63866293200, #    utc_start 2024-11-03 05:00:00 (Sun)
  63877183200, #      utc_end 2025-03-09 06:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63877183200, #    utc_start 2025-03-09 06:00:00 (Sun)
  63897742800, #      utc_end 2025-11-02 05:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63897742800, #    utc_start 2025-11-02 05:00:00 (Sun)
  63908632800, #      utc_end 2026-03-08 06:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63908632800, #    utc_start 2026-03-08 06:00:00 (Sun)
  63929192400, #      utc_end 2026-11-01 05:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63929192400, #    utc_start 2026-11-01 05:00:00 (Sun)
  63940687200, #      utc_end 2027-03-14 06:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63940687200, #    utc_start 2027-03-14 06:00:00 (Sun)
  63961246800, #      utc_end 2027-11-07 05:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {93}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -14400 }
  
  my $last_observance = bless( {
    'format' => 'A%sT',
    'gmtoff' => '-4:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732677,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732677,
      'utc_rd_secs' => 0,
      'utc_year' => 2008
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -14400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732677,
      'local_rd_secs' => 14400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732677,
      'utc_rd_secs' => 14400,
      'utc_year' => 2008
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_MONCTON

    $main::fatpacked{"DateTime/TimeZone/America/Monterrey.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_MONTERREY';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Monterrey;
  $DateTime::TimeZone::America::Monterrey::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Monterrey::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60620940000, #      utc_end 1922-01-01 06:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60620915924, #    local_end 1921-12-31 23:18:44 (Sat)
  -24076,
  0,
  'LMT',
      ],
      [
  60620940000, #    utc_start 1922-01-01 06:00:00 (Sun)
  62703698400, #      utc_end 1988-01-01 06:00:00 (Fri)
  60620918400, #  local_start 1922-01-01 00:00:00 (Sun)
  62703676800, #    local_end 1988-01-01 00:00:00 (Fri)
  -21600,
  0,
  'CST',
      ],
      [
  62703698400, #    utc_start 1988-01-01 06:00:00 (Fri)
  62711740800, #      utc_end 1988-04-03 08:00:00 (Sun)
  62703676800, #  local_start 1988-01-01 00:00:00 (Fri)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62711740800, #    utc_start 1988-04-03 08:00:00 (Sun)
  62729881200, #      utc_end 1988-10-30 07:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62729881200, #    utc_start 1988-10-30 07:00:00 (Sun)
  62735320800, #      utc_end 1989-01-01 06:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62735299200, #    local_end 1989-01-01 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62735320800, #    utc_start 1989-01-01 06:00:00 (Sun)
  62964547200, #      utc_end 1996-04-07 08:00:00 (Sun)
  62735299200, #  local_start 1989-01-01 00:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62964547200, #    utc_start 1996-04-07 08:00:00 (Sun)
  62982082800, #      utc_end 1996-10-27 07:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62982082800, #    utc_start 1996-10-27 07:00:00 (Sun)
  62995996800, #      utc_end 1997-04-06 08:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62995996800, #    utc_start 1997-04-06 08:00:00 (Sun)
  63013532400, #      utc_end 1997-10-26 07:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63013532400, #    utc_start 1997-10-26 07:00:00 (Sun)
  63027446400, #      utc_end 1998-04-05 08:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63027446400, #    utc_start 1998-04-05 08:00:00 (Sun)
  63044982000, #      utc_end 1998-10-25 07:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63044982000, #    utc_start 1998-10-25 07:00:00 (Sun)
  63058896000, #      utc_end 1999-04-04 08:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63058896000, #    utc_start 1999-04-04 08:00:00 (Sun)
  63077036400, #      utc_end 1999-10-31 07:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63077036400, #    utc_start 1999-10-31 07:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108486000, #      utc_end 2000-10-29 07:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108486000, #    utc_start 2000-10-29 07:00:00 (Sun)
  63124819200, #      utc_end 2001-05-06 08:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63124797600, #    local_end 2001-05-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63124819200, #    utc_start 2001-05-06 08:00:00 (Sun)
  63137516400, #      utc_end 2001-09-30 07:00:00 (Sun)
  63124801200, #  local_start 2001-05-06 03:00:00 (Sun)
  63137498400, #    local_end 2001-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63137516400, #    utc_start 2001-09-30 07:00:00 (Sun)
  63153849600, #      utc_end 2002-04-07 08:00:00 (Sun)
  63137494800, #  local_start 2001-09-30 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63153849600, #    utc_start 2002-04-07 08:00:00 (Sun)
  63171385200, #      utc_end 2002-10-27 07:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63171385200, #    utc_start 2002-10-27 07:00:00 (Sun)
  63185299200, #      utc_end 2003-04-06 08:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63185299200, #    utc_start 2003-04-06 08:00:00 (Sun)
  63202834800, #      utc_end 2003-10-26 07:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63202834800, #    utc_start 2003-10-26 07:00:00 (Sun)
  63216748800, #      utc_end 2004-04-04 08:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63216748800, #    utc_start 2004-04-04 08:00:00 (Sun)
  63234889200, #      utc_end 2004-10-31 07:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63234889200, #    utc_start 2004-10-31 07:00:00 (Sun)
  63248198400, #      utc_end 2005-04-03 08:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63248198400, #    utc_start 2005-04-03 08:00:00 (Sun)
  63266338800, #      utc_end 2005-10-30 07:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63266338800, #    utc_start 2005-10-30 07:00:00 (Sun)
  63279648000, #      utc_end 2006-04-02 08:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63279648000, #    utc_start 2006-04-02 08:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63311097600, #      utc_end 2007-04-01 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63311076000, #    local_end 2007-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63311097600, #    utc_start 2007-04-01 08:00:00 (Sun)
  63329238000, #      utc_end 2007-10-28 07:00:00 (Sun)
  63311079600, #  local_start 2007-04-01 03:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329238000, #    utc_start 2007-10-28 07:00:00 (Sun)
  63343152000, #      utc_end 2008-04-06 08:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63343130400, #    local_end 2008-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63343152000, #    utc_start 2008-04-06 08:00:00 (Sun)
  63360687600, #      utc_end 2008-10-26 07:00:00 (Sun)
  63343134000, #  local_start 2008-04-06 03:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63360687600, #    utc_start 2008-10-26 07:00:00 (Sun)
  63374601600, #      utc_end 2009-04-05 08:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63374580000, #    local_end 2009-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63374601600, #    utc_start 2009-04-05 08:00:00 (Sun)
  63392137200, #      utc_end 2009-10-25 07:00:00 (Sun)
  63374583600, #  local_start 2009-04-05 03:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63392137200, #    utc_start 2009-10-25 07:00:00 (Sun)
  63406051200, #      utc_end 2010-04-04 08:00:00 (Sun)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63406029600, #    local_end 2010-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63406051200, #    utc_start 2010-04-04 08:00:00 (Sun)
  63424191600, #      utc_end 2010-10-31 07:00:00 (Sun)
  63406033200, #  local_start 2010-04-04 03:00:00 (Sun)
  63424173600, #    local_end 2010-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424191600, #    utc_start 2010-10-31 07:00:00 (Sun)
  63437500800, #      utc_end 2011-04-03 08:00:00 (Sun)
  63424170000, #  local_start 2010-10-31 01:00:00 (Sun)
  63437479200, #    local_end 2011-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63437500800, #    utc_start 2011-04-03 08:00:00 (Sun)
  63455641200, #      utc_end 2011-10-30 07:00:00 (Sun)
  63437482800, #  local_start 2011-04-03 03:00:00 (Sun)
  63455623200, #    local_end 2011-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63455641200, #    utc_start 2011-10-30 07:00:00 (Sun)
  63468950400, #      utc_end 2012-04-01 08:00:00 (Sun)
  63455619600, #  local_start 2011-10-30 01:00:00 (Sun)
  63468928800, #    local_end 2012-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63468950400, #    utc_start 2012-04-01 08:00:00 (Sun)
  63487090800, #      utc_end 2012-10-28 07:00:00 (Sun)
  63468932400, #  local_start 2012-04-01 03:00:00 (Sun)
  63487072800, #    local_end 2012-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487090800, #    utc_start 2012-10-28 07:00:00 (Sun)
  63501004800, #      utc_end 2013-04-07 08:00:00 (Sun)
  63487069200, #  local_start 2012-10-28 01:00:00 (Sun)
  63500983200, #    local_end 2013-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63501004800, #    utc_start 2013-04-07 08:00:00 (Sun)
  63518540400, #      utc_end 2013-10-27 07:00:00 (Sun)
  63500986800, #  local_start 2013-04-07 03:00:00 (Sun)
  63518522400, #    local_end 2013-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63518540400, #    utc_start 2013-10-27 07:00:00 (Sun)
  63532454400, #      utc_end 2014-04-06 08:00:00 (Sun)
  63518518800, #  local_start 2013-10-27 01:00:00 (Sun)
  63532432800, #    local_end 2014-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63532454400, #    utc_start 2014-04-06 08:00:00 (Sun)
  63549990000, #      utc_end 2014-10-26 07:00:00 (Sun)
  63532436400, #  local_start 2014-04-06 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63549990000, #    utc_start 2014-10-26 07:00:00 (Sun)
  63563904000, #      utc_end 2015-04-05 08:00:00 (Sun)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63563882400, #    local_end 2015-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63563904000, #    utc_start 2015-04-05 08:00:00 (Sun)
  63581439600, #      utc_end 2015-10-25 07:00:00 (Sun)
  63563886000, #  local_start 2015-04-05 03:00:00 (Sun)
  63581421600, #    local_end 2015-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63581439600, #    utc_start 2015-10-25 07:00:00 (Sun)
  63595353600, #      utc_end 2016-04-03 08:00:00 (Sun)
  63581418000, #  local_start 2015-10-25 01:00:00 (Sun)
  63595332000, #    local_end 2016-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63595353600, #    utc_start 2016-04-03 08:00:00 (Sun)
  63613494000, #      utc_end 2016-10-30 07:00:00 (Sun)
  63595335600, #  local_start 2016-04-03 03:00:00 (Sun)
  63613476000, #    local_end 2016-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63613494000, #    utc_start 2016-10-30 07:00:00 (Sun)
  63626803200, #      utc_end 2017-04-02 08:00:00 (Sun)
  63613472400, #  local_start 2016-10-30 01:00:00 (Sun)
  63626781600, #    local_end 2017-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63626803200, #    utc_start 2017-04-02 08:00:00 (Sun)
  63644943600, #      utc_end 2017-10-29 07:00:00 (Sun)
  63626785200, #  local_start 2017-04-02 03:00:00 (Sun)
  63644925600, #    local_end 2017-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63644943600, #    utc_start 2017-10-29 07:00:00 (Sun)
  63658252800, #      utc_end 2018-04-01 08:00:00 (Sun)
  63644922000, #  local_start 2017-10-29 01:00:00 (Sun)
  63658231200, #    local_end 2018-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63658252800, #    utc_start 2018-04-01 08:00:00 (Sun)
  63676393200, #      utc_end 2018-10-28 07:00:00 (Sun)
  63658234800, #  local_start 2018-04-01 03:00:00 (Sun)
  63676375200, #    local_end 2018-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676393200, #    utc_start 2018-10-28 07:00:00 (Sun)
  63690307200, #      utc_end 2019-04-07 08:00:00 (Sun)
  63676371600, #  local_start 2018-10-28 01:00:00 (Sun)
  63690285600, #    local_end 2019-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63690307200, #    utc_start 2019-04-07 08:00:00 (Sun)
  63707842800, #      utc_end 2019-10-27 07:00:00 (Sun)
  63690289200, #  local_start 2019-04-07 03:00:00 (Sun)
  63707824800, #    local_end 2019-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63707842800, #    utc_start 2019-10-27 07:00:00 (Sun)
  63721756800, #      utc_end 2020-04-05 08:00:00 (Sun)
  63707821200, #  local_start 2019-10-27 01:00:00 (Sun)
  63721735200, #    local_end 2020-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63721756800, #    utc_start 2020-04-05 08:00:00 (Sun)
  63739292400, #      utc_end 2020-10-25 07:00:00 (Sun)
  63721738800, #  local_start 2020-04-05 03:00:00 (Sun)
  63739274400, #    local_end 2020-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739292400, #    utc_start 2020-10-25 07:00:00 (Sun)
  63753206400, #      utc_end 2021-04-04 08:00:00 (Sun)
  63739270800, #  local_start 2020-10-25 01:00:00 (Sun)
  63753184800, #    local_end 2021-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63753206400, #    utc_start 2021-04-04 08:00:00 (Sun)
  63771346800, #      utc_end 2021-10-31 07:00:00 (Sun)
  63753188400, #  local_start 2021-04-04 03:00:00 (Sun)
  63771328800, #    local_end 2021-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771346800, #    utc_start 2021-10-31 07:00:00 (Sun)
  63784656000, #      utc_end 2022-04-03 08:00:00 (Sun)
  63771325200, #  local_start 2021-10-31 01:00:00 (Sun)
  63784634400, #    local_end 2022-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63784656000, #    utc_start 2022-04-03 08:00:00 (Sun)
  63802796400, #      utc_end 2022-10-30 07:00:00 (Sun)
  63784638000, #  local_start 2022-04-03 03:00:00 (Sun)
  63802778400, #    local_end 2022-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63802796400, #    utc_start 2022-10-30 07:00:00 (Sun)
  63816105600, #      utc_end 2023-04-02 08:00:00 (Sun)
  63802774800, #  local_start 2022-10-30 01:00:00 (Sun)
  63816084000, #    local_end 2023-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63816105600, #    utc_start 2023-04-02 08:00:00 (Sun)
  63834246000, #      utc_end 2023-10-29 07:00:00 (Sun)
  63816087600, #  local_start 2023-04-02 03:00:00 (Sun)
  63834228000, #    local_end 2023-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834246000, #    utc_start 2023-10-29 07:00:00 (Sun)
  63848160000, #      utc_end 2024-04-07 08:00:00 (Sun)
  63834224400, #  local_start 2023-10-29 01:00:00 (Sun)
  63848138400, #    local_end 2024-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63848160000, #    utc_start 2024-04-07 08:00:00 (Sun)
  63865695600, #      utc_end 2024-10-27 07:00:00 (Sun)
  63848142000, #  local_start 2024-04-07 03:00:00 (Sun)
  63865677600, #    local_end 2024-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63865695600, #    utc_start 2024-10-27 07:00:00 (Sun)
  63879609600, #      utc_end 2025-04-06 08:00:00 (Sun)
  63865674000, #  local_start 2024-10-27 01:00:00 (Sun)
  63879588000, #    local_end 2025-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63879609600, #    utc_start 2025-04-06 08:00:00 (Sun)
  63897145200, #      utc_end 2025-10-26 07:00:00 (Sun)
  63879591600, #  local_start 2025-04-06 03:00:00 (Sun)
  63897127200, #    local_end 2025-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897145200, #    utc_start 2025-10-26 07:00:00 (Sun)
  63911059200, #      utc_end 2026-04-05 08:00:00 (Sun)
  63897123600, #  local_start 2025-10-26 01:00:00 (Sun)
  63911037600, #    local_end 2026-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63911059200, #    utc_start 2026-04-05 08:00:00 (Sun)
  63928594800, #      utc_end 2026-10-25 07:00:00 (Sun)
  63911041200, #  local_start 2026-04-05 03:00:00 (Sun)
  63928576800, #    local_end 2026-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63928594800, #    utc_start 2026-10-25 07:00:00 (Sun)
  63942508800, #      utc_end 2027-04-04 08:00:00 (Sun)
  63928573200, #  local_start 2026-10-25 01:00:00 (Sun)
  63942487200, #    local_end 2027-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63942508800, #    utc_start 2027-04-04 08:00:00 (Sun)
  63960649200, #      utc_end 2027-10-31 07:00:00 (Sun)
  63942490800, #  local_start 2027-04-04 03:00:00 (Sun)
  63960631200, #    local_end 2027-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {33}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 726103,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 726103,
      'utc_rd_secs' => 0,
      'utc_year' => 1990
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 726103,
      'local_rd_secs' => 21600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 726103,
      'utc_rd_secs' => 21600,
      'utc_year' => 1990
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2002',
      'in' => 'Oct',
      'letter' => 'S',
      'name' => 'Mexico',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2002',
      'in' => 'Apr',
      'letter' => 'D',
      'name' => 'Mexico',
      'offset_from_std' => 3600,
      'on' => 'Sun>=1',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_MONTERREY

    $main::fatpacked{"DateTime/TimeZone/America/Montevideo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_MONTEVIDEO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Montevideo;
  $DateTime::TimeZone::America::Montevideo::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Montevideo::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59879015084, #      utc_end 1898-06-28 03:44:44 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59879001600, #    local_end 1898-06-28 00:00:00 (Tue)
  -13484,
  0,
  'LMT',
      ],
      [
  59879015084, #    utc_start 1898-06-28 03:44:44 (Tue)
  60568227884, #      utc_end 1920-05-01 03:44:44 (Sat)
  59879001600, #  local_start 1898-06-28 00:00:00 (Tue)
  60568214400, #    local_end 1920-05-01 00:00:00 (Sat)
  -13484,
  0,
  'MMT',
      ],
      [
  60568227884, #    utc_start 1920-05-01 03:44:44 (Sat)
  60676140600, #      utc_end 1923-10-02 03:30:00 (Tue)
  60568215284, #  local_start 1920-05-01 00:14:44 (Sat)
  60676128000, #    local_end 1923-10-02 00:00:00 (Tue)
  -12600,
  0,
  'UYT',
      ],
      [
  60676140600, #    utc_start 1923-10-02 03:30:00 (Tue)
  60691863600, #      utc_end 1924-04-01 03:00:00 (Tue)
  60676129800, #  local_start 1923-10-02 00:30:00 (Tue)
  60691852800, #    local_end 1924-04-01 00:00:00 (Tue)
  -10800,
  1,
  'UYHST',
      ],
      [
  60691863600, #    utc_start 1924-04-01 03:00:00 (Tue)
  60707676600, #      utc_end 1924-10-01 03:30:00 (Wed)
  60691851000, #  local_start 1924-03-31 23:30:00 (Mon)
  60707664000, #    local_end 1924-10-01 00:00:00 (Wed)
  -12600,
  0,
  'UYT',
      ],
      [
  60707676600, #    utc_start 1924-10-01 03:30:00 (Wed)
  60723399600, #      utc_end 1925-04-01 03:00:00 (Wed)
  60707665800, #  local_start 1924-10-01 00:30:00 (Wed)
  60723388800, #    local_end 1925-04-01 00:00:00 (Wed)
  -10800,
  1,
  'UYHST',
      ],
      [
  60723399600, #    utc_start 1925-04-01 03:00:00 (Wed)
  60739212600, #      utc_end 1925-10-01 03:30:00 (Thu)
  60723387000, #  local_start 1925-03-31 23:30:00 (Tue)
  60739200000, #    local_end 1925-10-01 00:00:00 (Thu)
  -12600,
  0,
  'UYT',
      ],
      [
  60739212600, #    utc_start 1925-10-01 03:30:00 (Thu)
  60754935600, #      utc_end 1926-04-01 03:00:00 (Thu)
  60739201800, #  local_start 1925-10-01 00:30:00 (Thu)
  60754924800, #    local_end 1926-04-01 00:00:00 (Thu)
  -10800,
  1,
  'UYHST',
      ],
      [
  60754935600, #    utc_start 1926-04-01 03:00:00 (Thu)
  60994092600, #      utc_end 1933-10-29 03:30:00 (Sun)
  60754923000, #  local_start 1926-03-31 23:30:00 (Wed)
  60994080000, #    local_end 1933-10-29 00:00:00 (Sun)
  -12600,
  0,
  'UYT',
      ],
      [
  60994092600, #    utc_start 1933-10-29 03:30:00 (Sun)
  61007396400, #      utc_end 1934-04-01 03:00:00 (Sun)
  60994081800, #  local_start 1933-10-29 00:30:00 (Sun)
  61007385600, #    local_end 1934-04-01 00:00:00 (Sun)
  -10800,
  1,
  'UYHST',
      ],
      [
  61007396400, #    utc_start 1934-04-01 03:00:00 (Sun)
  61025542200, #      utc_end 1934-10-28 03:30:00 (Sun)
  61007383800, #  local_start 1934-03-31 23:30:00 (Sat)
  61025529600, #    local_end 1934-10-28 00:00:00 (Sun)
  -12600,
  0,
  'UYT',
      ],
      [
  61025542200, #    utc_start 1934-10-28 03:30:00 (Sun)
  61038846000, #      utc_end 1935-03-31 03:00:00 (Sun)
  61025531400, #  local_start 1934-10-28 00:30:00 (Sun)
  61038835200, #    local_end 1935-03-31 00:00:00 (Sun)
  -10800,
  1,
  'UYHST',
      ],
      [
  61038846000, #    utc_start 1935-03-31 03:00:00 (Sun)
  61056991800, #      utc_end 1935-10-27 03:30:00 (Sun)
  61038833400, #  local_start 1935-03-30 23:30:00 (Sat)
  61056979200, #    local_end 1935-10-27 00:00:00 (Sun)
  -12600,
  0,
  'UYT',
      ],
      [
  61056991800, #    utc_start 1935-10-27 03:30:00 (Sun)
  61070295600, #      utc_end 1936-03-29 03:00:00 (Sun)
  61056981000, #  local_start 1935-10-27 00:30:00 (Sun)
  61070284800, #    local_end 1936-03-29 00:00:00 (Sun)
  -10800,
  1,
  'UYHST',
      ],
      [
  61070295600, #    utc_start 1936-03-29 03:00:00 (Sun)
  61089046200, #      utc_end 1936-11-01 03:30:00 (Sun)
  61070283000, #  local_start 1936-03-28 23:30:00 (Sat)
  61089033600, #    local_end 1936-11-01 00:00:00 (Sun)
  -12600,
  0,
  'UYT',
      ],
      [
  61089046200, #    utc_start 1936-11-01 03:30:00 (Sun)
  61101745200, #      utc_end 1937-03-28 03:00:00 (Sun)
  61089035400, #  local_start 1936-11-01 00:30:00 (Sun)
  61101734400, #    local_end 1937-03-28 00:00:00 (Sun)
  -10800,
  1,
  'UYHST',
      ],
      [
  61101745200, #    utc_start 1937-03-28 03:00:00 (Sun)
  61120495800, #      utc_end 1937-10-31 03:30:00 (Sun)
  61101732600, #  local_start 1937-03-27 23:30:00 (Sat)
  61120483200, #    local_end 1937-10-31 00:00:00 (Sun)
  -12600,
  0,
  'UYT',
      ],
      [
  61120495800, #    utc_start 1937-10-31 03:30:00 (Sun)
  61133194800, #      utc_end 1938-03-27 03:00:00 (Sun)
  61120485000, #  local_start 1937-10-31 00:30:00 (Sun)
  61133184000, #    local_end 1938-03-27 00:00:00 (Sun)
  -10800,
  1,
  'UYHST',
      ],
      [
  61133194800, #    utc_start 1938-03-27 03:00:00 (Sun)
  61151945400, #      utc_end 1938-10-30 03:30:00 (Sun)
  61133182200, #  local_start 1938-03-26 23:30:00 (Sat)
  61151932800, #    local_end 1938-10-30 00:00:00 (Sun)
  -12600,
  0,
  'UYT',
      ],
      [
  61151945400, #    utc_start 1938-10-30 03:30:00 (Sun)
  61164644400, #      utc_end 1939-03-26 03:00:00 (Sun)
  61151934600, #  local_start 1938-10-30 00:30:00 (Sun)
  61164633600, #    local_end 1939-03-26 00:00:00 (Sun)
  -10800,
  1,
  'UYHST',
      ],
      [
  61164644400, #    utc_start 1939-03-26 03:00:00 (Sun)
  61183395000, #      utc_end 1939-10-29 03:30:00 (Sun)
  61164631800, #  local_start 1939-03-25 23:30:00 (Sat)
  61183382400, #    local_end 1939-10-29 00:00:00 (Sun)
  -12600,
  0,
  'UYT',
      ],
      [
  61183395000, #    utc_start 1939-10-29 03:30:00 (Sun)
  61196698800, #      utc_end 1940-03-31 03:00:00 (Sun)
  61183384200, #  local_start 1939-10-29 00:30:00 (Sun)
  61196688000, #    local_end 1940-03-31 00:00:00 (Sun)
  -10800,
  1,
  'UYHST',
      ],
      [
  61196698800, #    utc_start 1940-03-31 03:00:00 (Sun)
  61214844600, #      utc_end 1940-10-27 03:30:00 (Sun)
  61196686200, #  local_start 1940-03-30 23:30:00 (Sat)
  61214832000, #    local_end 1940-10-27 00:00:00 (Sun)
  -12600,
  0,
  'UYT',
      ],
      [
  61214844600, #    utc_start 1940-10-27 03:30:00 (Sun)
  61228148400, #      utc_end 1941-03-30 03:00:00 (Sun)
  61214833800, #  local_start 1940-10-27 00:30:00 (Sun)
  61228137600, #    local_end 1941-03-30 00:00:00 (Sun)
  -10800,
  1,
  'UYHST',
      ],
      [
  61228148400, #    utc_start 1941-03-30 03:00:00 (Sun)
  61238863800, #      utc_end 1941-08-01 03:30:00 (Fri)
  61228135800, #  local_start 1941-03-29 23:30:00 (Sat)
  61238851200, #    local_end 1941-08-01 00:00:00 (Fri)
  -12600,
  0,
  'UYT',
      ],
      [
  61238863800, #    utc_start 1941-08-01 03:30:00 (Fri)
  61252081200, #      utc_end 1942-01-01 03:00:00 (Thu)
  61238853000, #  local_start 1941-08-01 00:30:00 (Fri)
  61252070400, #    local_end 1942-01-01 00:00:00 (Thu)
  -10800,
  1,
  'UYHST',
      ],
      [
  61252081200, #    utc_start 1942-01-01 03:00:00 (Thu)
  61282063800, #      utc_end 1942-12-14 03:30:00 (Mon)
  61252068600, #  local_start 1941-12-31 23:30:00 (Wed)
  61282051200, #    local_end 1942-12-14 00:00:00 (Mon)
  -12600,
  0,
  'UYT',
      ],
      [
  61282063800, #    utc_start 1942-12-14 03:30:00 (Mon)
  61289834400, #      utc_end 1943-03-14 02:00:00 (Sun)
  61282056600, #  local_start 1942-12-14 01:30:00 (Mon)
  61289827200, #    local_end 1943-03-14 00:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  61289834400, #    utc_start 1943-03-14 02:00:00 (Sun)
  61800894000, #      utc_end 1959-05-24 03:00:00 (Sun)
  61289823600, #  local_start 1943-03-13 23:00:00 (Sat)
  61800883200, #    local_end 1959-05-24 00:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  61800894000, #    utc_start 1959-05-24 03:00:00 (Sun)
  61816010400, #      utc_end 1959-11-15 02:00:00 (Sun)
  61800886800, #  local_start 1959-05-24 01:00:00 (Sun)
  61816003200, #    local_end 1959-11-15 00:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  61816010400, #    utc_start 1959-11-15 02:00:00 (Sun)
  61821457200, #      utc_end 1960-01-17 03:00:00 (Sun)
  61815999600, #  local_start 1959-11-14 23:00:00 (Sat)
  61821446400, #    local_end 1960-01-17 00:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  61821457200, #    utc_start 1960-01-17 03:00:00 (Sun)
  61825687200, #      utc_end 1960-03-06 02:00:00 (Sun)
  61821450000, #  local_start 1960-01-17 01:00:00 (Sun)
  61825680000, #    local_end 1960-03-06 00:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  61825687200, #    utc_start 1960-03-06 02:00:00 (Sun)
  61985962800, #      utc_end 1965-04-04 03:00:00 (Sun)
  61825676400, #  local_start 1960-03-05 23:00:00 (Sat)
  61985952000, #    local_end 1965-04-04 00:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  61985962800, #    utc_start 1965-04-04 03:00:00 (Sun)
  62001079200, #      utc_end 1965-09-26 02:00:00 (Sun)
  61985955600, #  local_start 1965-04-04 01:00:00 (Sun)
  62001072000, #    local_end 1965-09-26 00:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  62001079200, #    utc_start 1965-09-26 02:00:00 (Sun)
  62017412400, #      utc_end 1966-04-03 03:00:00 (Sun)
  62001068400, #  local_start 1965-09-25 23:00:00 (Sat)
  62017401600, #    local_end 1966-04-03 00:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  62017412400, #    utc_start 1966-04-03 03:00:00 (Sun)
  62035639200, #      utc_end 1966-10-31 02:00:00 (Mon)
  62017405200, #  local_start 1966-04-03 01:00:00 (Sun)
  62035632000, #    local_end 1966-10-31 00:00:00 (Mon)
  -7200,
  1,
  'UYST',
      ],
      [
  62035639200, #    utc_start 1966-10-31 02:00:00 (Mon)
  62048862000, #      utc_end 1967-04-02 03:00:00 (Sun)
  62035628400, #  local_start 1966-10-30 23:00:00 (Sun)
  62048851200, #    local_end 1967-04-02 00:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  62048862000, #    utc_start 1967-04-02 03:00:00 (Sun)
  62067175200, #      utc_end 1967-10-31 02:00:00 (Tue)
  62048854800, #  local_start 1967-04-02 01:00:00 (Sun)
  62067168000, #    local_end 1967-10-31 00:00:00 (Tue)
  -7200,
  1,
  'UYST',
      ],
      [
  62067175200, #    utc_start 1967-10-31 02:00:00 (Tue)
  62085236400, #      utc_end 1968-05-27 03:00:00 (Mon)
  62067164400, #  local_start 1967-10-30 23:00:00 (Mon)
  62085225600, #    local_end 1968-05-27 00:00:00 (Mon)
  -10800,
  0,
  'UYT',
      ],
      [
  62085236400, #    utc_start 1968-05-27 03:00:00 (Mon)
  62101564200, #      utc_end 1968-12-02 02:30:00 (Mon)
  62085227400, #  local_start 1968-05-27 00:30:00 (Mon)
  62101555200, #    local_end 1968-12-02 00:00:00 (Mon)
  -9000,
  1,
  'UYHST',
      ],
      [
  62101564200, #    utc_start 1968-12-02 02:30:00 (Mon)
  62116772400, #      utc_end 1969-05-27 03:00:00 (Tue)
  62101553400, #  local_start 1968-12-01 23:30:00 (Sun)
  62116761600, #    local_end 1969-05-27 00:00:00 (Tue)
  -10800,
  0,
  'UYT',
      ],
      [
  62116772400, #    utc_start 1969-05-27 03:00:00 (Tue)
  62133100200, #      utc_end 1969-12-02 02:30:00 (Tue)
  62116763400, #  local_start 1969-05-27 00:30:00 (Tue)
  62133091200, #    local_end 1969-12-02 00:00:00 (Tue)
  -9000,
  1,
  'UYHST',
      ],
      [
  62133100200, #    utc_start 1969-12-02 02:30:00 (Tue)
  62148308400, #      utc_end 1970-05-27 03:00:00 (Wed)
  62133089400, #  local_start 1969-12-01 23:30:00 (Mon)
  62148297600, #    local_end 1970-05-27 00:00:00 (Wed)
  -10800,
  0,
  'UYT',
      ],
      [
  62148308400, #    utc_start 1970-05-27 03:00:00 (Wed)
  62164636200, #      utc_end 1970-12-02 02:30:00 (Wed)
  62148299400, #  local_start 1970-05-27 00:30:00 (Wed)
  62164627200, #    local_end 1970-12-02 00:00:00 (Wed)
  -9000,
  1,
  'UYHST',
      ],
      [
  62164636200, #    utc_start 1970-12-02 02:30:00 (Wed)
  62208615600, #      utc_end 1972-04-24 03:00:00 (Mon)
  62164625400, #  local_start 1970-12-01 23:30:00 (Tue)
  62208604800, #    local_end 1972-04-24 00:00:00 (Mon)
  -10800,
  0,
  'UYT',
      ],
      [
  62208615600, #    utc_start 1972-04-24 03:00:00 (Mon)
  62218375200, #      utc_end 1972-08-15 02:00:00 (Tue)
  62208608400, #  local_start 1972-04-24 01:00:00 (Mon)
  62218368000, #    local_end 1972-08-15 00:00:00 (Tue)
  -7200,
  1,
  'UYST',
      ],
      [
  62218375200, #    utc_start 1972-08-15 02:00:00 (Tue)
  62267799600, #      utc_end 1974-03-10 03:00:00 (Sun)
  62218364400, #  local_start 1972-08-14 23:00:00 (Mon)
  62267788800, #    local_end 1974-03-10 00:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  62267799600, #    utc_start 1974-03-10 03:00:00 (Sun)
  62292594600, #      utc_end 1974-12-22 02:30:00 (Sun)
  62267790600, #  local_start 1974-03-10 00:30:00 (Sun)
  62292585600, #    local_end 1974-12-22 00:00:00 (Sun)
  -9000,
  1,
  'UYHST',
      ],
      [
  62292594600, #    utc_start 1974-12-22 02:30:00 (Sun)
  62348666400, #      utc_end 1976-10-01 02:00:00 (Fri)
  62292587400, #  local_start 1974-12-22 00:30:00 (Sun)
  62348659200, #    local_end 1976-10-01 00:00:00 (Fri)
  -7200,
  1,
  'UYST',
      ],
      [
  62348666400, #    utc_start 1976-10-01 02:00:00 (Fri)
  62385735600, #      utc_end 1977-12-04 03:00:00 (Sun)
  62348655600, #  local_start 1976-09-30 23:00:00 (Thu)
  62385724800, #    local_end 1977-12-04 00:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  62385735600, #    utc_start 1977-12-04 03:00:00 (Sun)
  62395927200, #      utc_end 1978-04-01 02:00:00 (Sat)
  62385728400, #  local_start 1977-12-04 01:00:00 (Sun)
  62395920000, #    local_end 1978-04-01 00:00:00 (Sat)
  -7200,
  1,
  'UYST',
      ],
      [
  62395927200, #    utc_start 1978-04-01 02:00:00 (Sat)
  62443278000, #      utc_end 1979-10-01 03:00:00 (Mon)
  62395916400, #  local_start 1978-03-31 23:00:00 (Fri)
  62443267200, #    local_end 1979-10-01 00:00:00 (Mon)
  -10800,
  0,
  'UYT',
      ],
      [
  62443278000, #    utc_start 1979-10-01 03:00:00 (Mon)
  62461677600, #      utc_end 1980-05-01 02:00:00 (Thu)
  62443270800, #  local_start 1979-10-01 01:00:00 (Mon)
  62461670400, #    local_end 1980-05-01 00:00:00 (Thu)
  -7200,
  1,
  'UYST',
      ],
      [
  62461677600, #    utc_start 1980-05-01 02:00:00 (Thu)
  62702132400, #      utc_end 1987-12-14 03:00:00 (Mon)
  62461666800, #  local_start 1980-04-30 23:00:00 (Wed)
  62702121600, #    local_end 1987-12-14 00:00:00 (Mon)
  -10800,
  0,
  'UYT',
      ],
      [
  62702132400, #    utc_start 1987-12-14 03:00:00 (Mon)
  62709991200, #      utc_end 1988-03-14 02:00:00 (Mon)
  62702125200, #  local_start 1987-12-14 01:00:00 (Mon)
  62709984000, #    local_end 1988-03-14 00:00:00 (Mon)
  -7200,
  1,
  'UYST',
      ],
      [
  62709991200, #    utc_start 1988-03-14 02:00:00 (Mon)
  62733495600, #      utc_end 1988-12-11 03:00:00 (Sun)
  62709980400, #  local_start 1988-03-13 23:00:00 (Sun)
  62733484800, #    local_end 1988-12-11 00:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  62733495600, #    utc_start 1988-12-11 03:00:00 (Sun)
  62741354400, #      utc_end 1989-03-12 02:00:00 (Sun)
  62733488400, #  local_start 1988-12-11 01:00:00 (Sun)
  62741347200, #    local_end 1989-03-12 00:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  62741354400, #    utc_start 1989-03-12 02:00:00 (Sun)
  62761316400, #      utc_end 1989-10-29 03:00:00 (Sun)
  62741343600, #  local_start 1989-03-11 23:00:00 (Sat)
  62761305600, #    local_end 1989-10-29 00:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  62761316400, #    utc_start 1989-10-29 03:00:00 (Sun)
  62772199200, #      utc_end 1990-03-04 02:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62772192000, #    local_end 1990-03-04 00:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  62772199200, #    utc_start 1990-03-04 02:00:00 (Sun)
  62792161200, #      utc_end 1990-10-21 03:00:00 (Sun)
  62772188400, #  local_start 1990-03-03 23:00:00 (Sat)
  62792150400, #    local_end 1990-10-21 00:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  62792161200, #    utc_start 1990-10-21 03:00:00 (Sun)
  62803648800, #      utc_end 1991-03-03 02:00:00 (Sun)
  62792154000, #  local_start 1990-10-21 01:00:00 (Sun)
  62803641600, #    local_end 1991-03-03 00:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  62803648800, #    utc_start 1991-03-03 02:00:00 (Sun)
  62824215600, #      utc_end 1991-10-27 03:00:00 (Sun)
  62803638000, #  local_start 1991-03-02 23:00:00 (Sat)
  62824204800, #    local_end 1991-10-27 00:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  62824215600, #    utc_start 1991-10-27 03:00:00 (Sun)
  62835098400, #      utc_end 1992-03-01 02:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62835091200, #    local_end 1992-03-01 00:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  62835098400, #    utc_start 1992-03-01 02:00:00 (Sun)
  62855060400, #      utc_end 1992-10-18 03:00:00 (Sun)
  62835087600, #  local_start 1992-02-29 23:00:00 (Sat)
  62855049600, #    local_end 1992-10-18 00:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  62855060400, #    utc_start 1992-10-18 03:00:00 (Sun)
  62866548000, #      utc_end 1993-02-28 02:00:00 (Sun)
  62855053200, #  local_start 1992-10-18 01:00:00 (Sun)
  62866540800, #    local_end 1993-02-28 00:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  62866548000, #    utc_start 1993-02-28 02:00:00 (Sun)
  63231246000, #      utc_end 2004-09-19 03:00:00 (Sun)
  62866537200, #  local_start 1993-02-27 23:00:00 (Sat)
  63231235200, #    local_end 2004-09-19 00:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  63231246000, #    utc_start 2004-09-19 03:00:00 (Sun)
  63247579200, #      utc_end 2005-03-27 04:00:00 (Sun)
  63231238800, #  local_start 2004-09-19 01:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  63247579200, #    utc_start 2005-03-27 04:00:00 (Sun)
  63264517200, #      utc_end 2005-10-09 05:00:00 (Sun)
  63247568400, #  local_start 2005-03-27 01:00:00 (Sun)
  63264506400, #    local_end 2005-10-09 02:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  63264517200, #    utc_start 2005-10-09 05:00:00 (Sun)
  63277819200, #      utc_end 2006-03-12 04:00:00 (Sun)
  63264510000, #  local_start 2005-10-09 03:00:00 (Sun)
  63277812000, #    local_end 2006-03-12 02:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  63277819200, #    utc_start 2006-03-12 04:00:00 (Sun)
  63295362000, #      utc_end 2006-10-01 05:00:00 (Sun)
  63277808400, #  local_start 2006-03-12 01:00:00 (Sun)
  63295351200, #    local_end 2006-10-01 02:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  63295362000, #    utc_start 2006-10-01 05:00:00 (Sun)
  63309268800, #      utc_end 2007-03-11 04:00:00 (Sun)
  63295354800, #  local_start 2006-10-01 03:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  63309268800, #    utc_start 2007-03-11 04:00:00 (Sun)
  63327416400, #      utc_end 2007-10-07 05:00:00 (Sun)
  63309258000, #  local_start 2007-03-11 01:00:00 (Sun)
  63327405600, #    local_end 2007-10-07 02:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  63327416400, #    utc_start 2007-10-07 05:00:00 (Sun)
  63340718400, #      utc_end 2008-03-09 04:00:00 (Sun)
  63327409200, #  local_start 2007-10-07 03:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  63340718400, #    utc_start 2008-03-09 04:00:00 (Sun)
  63358866000, #      utc_end 2008-10-05 05:00:00 (Sun)
  63340707600, #  local_start 2008-03-09 01:00:00 (Sun)
  63358855200, #    local_end 2008-10-05 02:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  63358866000, #    utc_start 2008-10-05 05:00:00 (Sun)
  63372168000, #      utc_end 2009-03-08 04:00:00 (Sun)
  63358858800, #  local_start 2008-10-05 03:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  63372168000, #    utc_start 2009-03-08 04:00:00 (Sun)
  63390315600, #      utc_end 2009-10-04 05:00:00 (Sun)
  63372157200, #  local_start 2009-03-08 01:00:00 (Sun)
  63390304800, #    local_end 2009-10-04 02:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  63390315600, #    utc_start 2009-10-04 05:00:00 (Sun)
  63404222400, #      utc_end 2010-03-14 04:00:00 (Sun)
  63390308400, #  local_start 2009-10-04 03:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  63404222400, #    utc_start 2010-03-14 04:00:00 (Sun)
  63421765200, #      utc_end 2010-10-03 05:00:00 (Sun)
  63404211600, #  local_start 2010-03-14 01:00:00 (Sun)
  63421754400, #    local_end 2010-10-03 02:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  63421765200, #    utc_start 2010-10-03 05:00:00 (Sun)
  63435672000, #      utc_end 2011-03-13 04:00:00 (Sun)
  63421758000, #  local_start 2010-10-03 03:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  63435672000, #    utc_start 2011-03-13 04:00:00 (Sun)
  63453214800, #      utc_end 2011-10-02 05:00:00 (Sun)
  63435661200, #  local_start 2011-03-13 01:00:00 (Sun)
  63453204000, #    local_end 2011-10-02 02:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  63453214800, #    utc_start 2011-10-02 05:00:00 (Sun)
  63467121600, #      utc_end 2012-03-11 04:00:00 (Sun)
  63453207600, #  local_start 2011-10-02 03:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  63467121600, #    utc_start 2012-03-11 04:00:00 (Sun)
  63485269200, #      utc_end 2012-10-07 05:00:00 (Sun)
  63467110800, #  local_start 2012-03-11 01:00:00 (Sun)
  63485258400, #    local_end 2012-10-07 02:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  63485269200, #    utc_start 2012-10-07 05:00:00 (Sun)
  63498571200, #      utc_end 2013-03-10 04:00:00 (Sun)
  63485262000, #  local_start 2012-10-07 03:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  63498571200, #    utc_start 2013-03-10 04:00:00 (Sun)
  63516718800, #      utc_end 2013-10-06 05:00:00 (Sun)
  63498560400, #  local_start 2013-03-10 01:00:00 (Sun)
  63516708000, #    local_end 2013-10-06 02:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  63516718800, #    utc_start 2013-10-06 05:00:00 (Sun)
  63530020800, #      utc_end 2014-03-09 04:00:00 (Sun)
  63516711600, #  local_start 2013-10-06 03:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  63530020800, #    utc_start 2014-03-09 04:00:00 (Sun)
  63548168400, #      utc_end 2014-10-05 05:00:00 (Sun)
  63530010000, #  local_start 2014-03-09 01:00:00 (Sun)
  63548157600, #    local_end 2014-10-05 02:00:00 (Sun)
  -10800,
  0,
  'UYT',
      ],
      [
  63548168400, #    utc_start 2014-10-05 05:00:00 (Sun)
  63561470400, #      utc_end 2015-03-08 04:00:00 (Sun)
  63548161200, #  local_start 2014-10-05 03:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -7200,
  1,
  'UYST',
      ],
      [
  63561470400, #    utc_start 2015-03-08 04:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63561459600, #  local_start 2015-03-08 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'UYT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {43}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_MONTEVIDEO

    $main::fatpacked{"DateTime/TimeZone/America/Nassau.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_NASSAU';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Nassau;
  $DateTime::TimeZone::America::Nassau::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Nassau::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60310588170, #      utc_end 1912-03-02 05:09:30 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60310569600, #    local_end 1912-03-02 00:00:00 (Sat)
  -18570,
  0,
  'LMT',
      ],
      [
  60310588170, #    utc_start 1912-03-02 05:09:30 (Sat)
  61956342000, #      utc_end 1964-04-26 07:00:00 (Sun)
  60310570170, #  local_start 1912-03-02 00:09:30 (Sat)
  61956324000, #    local_end 1964-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61956342000, #    utc_start 1964-04-26 07:00:00 (Sun)
  61972063200, #      utc_end 1964-10-25 06:00:00 (Sun)
  61956327600, #  local_start 1964-04-26 03:00:00 (Sun)
  61972048800, #    local_end 1964-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61972063200, #    utc_start 1964-10-25 06:00:00 (Sun)
  61987791600, #      utc_end 1965-04-25 07:00:00 (Sun)
  61972045200, #  local_start 1964-10-25 01:00:00 (Sun)
  61987773600, #    local_end 1965-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61987791600, #    utc_start 1965-04-25 07:00:00 (Sun)
  62004117600, #      utc_end 1965-10-31 06:00:00 (Sun)
  61987777200, #  local_start 1965-04-25 03:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62004117600, #    utc_start 1965-10-31 06:00:00 (Sun)
  62019241200, #      utc_end 1966-04-24 07:00:00 (Sun)
  62004099600, #  local_start 1965-10-31 01:00:00 (Sun)
  62019223200, #    local_end 1966-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62019241200, #    utc_start 1966-04-24 07:00:00 (Sun)
  62035567200, #      utc_end 1966-10-30 06:00:00 (Sun)
  62019226800, #  local_start 1966-04-24 03:00:00 (Sun)
  62035552800, #    local_end 1966-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62035567200, #    utc_start 1966-10-30 06:00:00 (Sun)
  62051295600, #      utc_end 1967-04-30 07:00:00 (Sun)
  62035549200, #  local_start 1966-10-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62051295600, #    utc_start 1967-04-30 07:00:00 (Sun)
  62067016800, #      utc_end 1967-10-29 06:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62067016800, #    utc_start 1967-10-29 06:00:00 (Sun)
  62082745200, #      utc_end 1968-04-28 07:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62082745200, #    utc_start 1968-04-28 07:00:00 (Sun)
  62098466400, #      utc_end 1968-10-27 06:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62098466400, #    utc_start 1968-10-27 06:00:00 (Sun)
  62114194800, #      utc_end 1969-04-27 07:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62114194800, #    utc_start 1969-04-27 07:00:00 (Sun)
  62129916000, #      utc_end 1969-10-26 06:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62129916000, #    utc_start 1969-10-26 06:00:00 (Sun)
  62145644400, #      utc_end 1970-04-26 07:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62145644400, #    utc_start 1970-04-26 07:00:00 (Sun)
  62161365600, #      utc_end 1970-10-25 06:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62161365600, #    utc_start 1970-10-25 06:00:00 (Sun)
  62177094000, #      utc_end 1971-04-25 07:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62177094000, #    utc_start 1971-04-25 07:00:00 (Sun)
  62193420000, #      utc_end 1971-10-31 06:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62193420000, #    utc_start 1971-10-31 06:00:00 (Sun)
  62209148400, #      utc_end 1972-04-30 07:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62209148400, #    utc_start 1972-04-30 07:00:00 (Sun)
  62224869600, #      utc_end 1972-10-29 06:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62224869600, #    utc_start 1972-10-29 06:00:00 (Sun)
  62240598000, #      utc_end 1973-04-29 07:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62240598000, #    utc_start 1973-04-29 07:00:00 (Sun)
  62256319200, #      utc_end 1973-10-28 06:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62256319200, #    utc_start 1973-10-28 06:00:00 (Sun)
  62272047600, #      utc_end 1974-04-28 07:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62272029600, #    local_end 1974-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62272047600, #    utc_start 1974-04-28 07:00:00 (Sun)
  62287768800, #      utc_end 1974-10-27 06:00:00 (Sun)
  62272033200, #  local_start 1974-04-28 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62287768800, #    utc_start 1974-10-27 06:00:00 (Sun)
  62303497200, #      utc_end 1975-04-27 07:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62303479200, #    local_end 1975-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62303497200, #    utc_start 1975-04-27 07:00:00 (Sun)
  62319218400, #      utc_end 1975-10-26 06:00:00 (Sun)
  62303482800, #  local_start 1975-04-27 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62319218400, #    utc_start 1975-10-26 06:00:00 (Sun)
  62325003600, #      utc_end 1976-01-01 05:00:00 (Thu)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62324985600, #    local_end 1976-01-01 00:00:00 (Thu)
  -18000,
  0,
  'EST',
      ],
      [
  62325003600, #    utc_start 1976-01-01 05:00:00 (Thu)
  62334946800, #      utc_end 1976-04-25 07:00:00 (Sun)
  62324985600, #  local_start 1976-01-01 00:00:00 (Thu)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62334946800, #    utc_start 1976-04-25 07:00:00 (Sun)
  62351272800, #      utc_end 1976-10-31 06:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62351272800, #    utc_start 1976-10-31 06:00:00 (Sun)
  62366396400, #      utc_end 1977-04-24 07:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62366396400, #    utc_start 1977-04-24 07:00:00 (Sun)
  62382722400, #      utc_end 1977-10-30 06:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62382722400, #    utc_start 1977-10-30 06:00:00 (Sun)
  62398450800, #      utc_end 1978-04-30 07:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62398450800, #    utc_start 1978-04-30 07:00:00 (Sun)
  62414172000, #      utc_end 1978-10-29 06:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62414172000, #    utc_start 1978-10-29 06:00:00 (Sun)
  62429900400, #      utc_end 1979-04-29 07:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62429900400, #    utc_start 1979-04-29 07:00:00 (Sun)
  62445621600, #      utc_end 1979-10-28 06:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62445621600, #    utc_start 1979-10-28 06:00:00 (Sun)
  62461350000, #      utc_end 1980-04-27 07:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62461350000, #    utc_start 1980-04-27 07:00:00 (Sun)
  62477071200, #      utc_end 1980-10-26 06:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62477071200, #    utc_start 1980-10-26 06:00:00 (Sun)
  62492799600, #      utc_end 1981-04-26 07:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62492799600, #    utc_start 1981-04-26 07:00:00 (Sun)
  62508520800, #      utc_end 1981-10-25 06:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62508520800, #    utc_start 1981-10-25 06:00:00 (Sun)
  62524249200, #      utc_end 1982-04-25 07:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62524249200, #    utc_start 1982-04-25 07:00:00 (Sun)
  62540575200, #      utc_end 1982-10-31 06:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62540575200, #    utc_start 1982-10-31 06:00:00 (Sun)
  62555698800, #      utc_end 1983-04-24 07:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62555698800, #    utc_start 1983-04-24 07:00:00 (Sun)
  62572024800, #      utc_end 1983-10-30 06:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62572024800, #    utc_start 1983-10-30 06:00:00 (Sun)
  62587753200, #      utc_end 1984-04-29 07:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62587753200, #    utc_start 1984-04-29 07:00:00 (Sun)
  62603474400, #      utc_end 1984-10-28 06:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62603474400, #    utc_start 1984-10-28 06:00:00 (Sun)
  62619202800, #      utc_end 1985-04-28 07:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62619202800, #    utc_start 1985-04-28 07:00:00 (Sun)
  62634924000, #      utc_end 1985-10-27 06:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62634924000, #    utc_start 1985-10-27 06:00:00 (Sun)
  62650652400, #      utc_end 1986-04-27 07:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62650652400, #    utc_start 1986-04-27 07:00:00 (Sun)
  62666373600, #      utc_end 1986-10-26 06:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62666373600, #    utc_start 1986-10-26 06:00:00 (Sun)
  62680287600, #      utc_end 1987-04-05 07:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62680287600, #    utc_start 1987-04-05 07:00:00 (Sun)
  62697823200, #      utc_end 1987-10-25 06:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62697823200, #    utc_start 1987-10-25 06:00:00 (Sun)
  62711737200, #      utc_end 1988-04-03 07:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62711737200, #    utc_start 1988-04-03 07:00:00 (Sun)
  62729877600, #      utc_end 1988-10-30 06:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62729877600, #    utc_start 1988-10-30 06:00:00 (Sun)
  62743186800, #      utc_end 1989-04-02 07:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62743186800, #    utc_start 1989-04-02 07:00:00 (Sun)
  62761327200, #      utc_end 1989-10-29 06:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62761327200, #    utc_start 1989-10-29 06:00:00 (Sun)
  62774636400, #      utc_end 1990-04-01 07:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62774636400, #    utc_start 1990-04-01 07:00:00 (Sun)
  62792776800, #      utc_end 1990-10-28 06:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62792776800, #    utc_start 1990-10-28 06:00:00 (Sun)
  62806690800, #      utc_end 1991-04-07 07:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62806690800, #    utc_start 1991-04-07 07:00:00 (Sun)
  62824226400, #      utc_end 1991-10-27 06:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62824226400, #    utc_start 1991-10-27 06:00:00 (Sun)
  62838140400, #      utc_end 1992-04-05 07:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62838140400, #    utc_start 1992-04-05 07:00:00 (Sun)
  62855676000, #      utc_end 1992-10-25 06:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62855676000, #    utc_start 1992-10-25 06:00:00 (Sun)
  62869590000, #      utc_end 1993-04-04 07:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62869590000, #    utc_start 1993-04-04 07:00:00 (Sun)
  62887730400, #      utc_end 1993-10-31 06:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62887730400, #    utc_start 1993-10-31 06:00:00 (Sun)
  62901039600, #      utc_end 1994-04-03 07:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62901039600, #    utc_start 1994-04-03 07:00:00 (Sun)
  62919180000, #      utc_end 1994-10-30 06:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62919180000, #    utc_start 1994-10-30 06:00:00 (Sun)
  62932489200, #      utc_end 1995-04-02 07:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62932489200, #    utc_start 1995-04-02 07:00:00 (Sun)
  62950629600, #      utc_end 1995-10-29 06:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62950629600, #    utc_start 1995-10-29 06:00:00 (Sun)
  62964543600, #      utc_end 1996-04-07 07:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62964543600, #    utc_start 1996-04-07 07:00:00 (Sun)
  62982079200, #      utc_end 1996-10-27 06:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62982079200, #    utc_start 1996-10-27 06:00:00 (Sun)
  62995993200, #      utc_end 1997-04-06 07:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62995993200, #    utc_start 1997-04-06 07:00:00 (Sun)
  63013528800, #      utc_end 1997-10-26 06:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63013528800, #    utc_start 1997-10-26 06:00:00 (Sun)
  63027442800, #      utc_end 1998-04-05 07:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63027442800, #    utc_start 1998-04-05 07:00:00 (Sun)
  63044978400, #      utc_end 1998-10-25 06:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63044978400, #    utc_start 1998-10-25 06:00:00 (Sun)
  63058892400, #      utc_end 1999-04-04 07:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63058892400, #    utc_start 1999-04-04 07:00:00 (Sun)
  63077032800, #      utc_end 1999-10-31 06:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63077032800, #    utc_start 1999-10-31 06:00:00 (Sun)
  63090342000, #      utc_end 2000-04-02 07:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63090342000, #    utc_start 2000-04-02 07:00:00 (Sun)
  63108482400, #      utc_end 2000-10-29 06:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63108482400, #    utc_start 2000-10-29 06:00:00 (Sun)
  63121791600, #      utc_end 2001-04-01 07:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63121791600, #    utc_start 2001-04-01 07:00:00 (Sun)
  63139932000, #      utc_end 2001-10-28 06:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63139932000, #    utc_start 2001-10-28 06:00:00 (Sun)
  63153846000, #      utc_end 2002-04-07 07:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63153846000, #    utc_start 2002-04-07 07:00:00 (Sun)
  63171381600, #      utc_end 2002-10-27 06:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63171381600, #    utc_start 2002-10-27 06:00:00 (Sun)
  63185295600, #      utc_end 2003-04-06 07:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63185295600, #    utc_start 2003-04-06 07:00:00 (Sun)
  63202831200, #      utc_end 2003-10-26 06:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63202831200, #    utc_start 2003-10-26 06:00:00 (Sun)
  63216745200, #      utc_end 2004-04-04 07:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63216745200, #    utc_start 2004-04-04 07:00:00 (Sun)
  63234885600, #      utc_end 2004-10-31 06:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63234885600, #    utc_start 2004-10-31 06:00:00 (Sun)
  63248194800, #      utc_end 2005-04-03 07:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63248194800, #    utc_start 2005-04-03 07:00:00 (Sun)
  63266335200, #      utc_end 2005-10-30 06:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63266335200, #    utc_start 2005-10-30 06:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297784800, #      utc_end 2006-10-29 06:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63297784800, #    utc_start 2006-10-29 06:00:00 (Sun)
  63309279600, #      utc_end 2007-03-11 07:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63309279600, #    utc_start 2007-03-11 07:00:00 (Sun)
  63329839200, #      utc_end 2007-11-04 06:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63329839200, #    utc_start 2007-11-04 06:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {64}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721354,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721354,
      'utc_rd_secs' => 0,
      'utc_year' => 1977
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721354,
      'local_rd_secs' => 18000,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721354,
      'utc_rd_secs' => 18000,
      'utc_year' => 1977
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_NASSAU

    $main::fatpacked{"DateTime/TimeZone/America/New_York.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_NEW_YORK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::New_York;
  $DateTime::TimeZone::America::New_York::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::New_York::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418032400, #      utc_end 1883-11-18 17:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418014638, #    local_end 1883-11-18 12:03:58 (Sun)
  -17762,
  0,
  'LMT',
      ],
      [
  59418032400, #    utc_start 1883-11-18 17:00:00 (Sun)
  60502402800, #      utc_end 1918-03-31 07:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60502402800, #    utc_start 1918-03-31 07:00:00 (Sun)
  60520543200, #      utc_end 1918-10-27 06:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60520543200, #    utc_start 1918-10-27 06:00:00 (Sun)
  60533852400, #      utc_end 1919-03-30 07:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60533852400, #    utc_start 1919-03-30 07:00:00 (Sun)
  60551992800, #      utc_end 1919-10-26 06:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60551992800, #    utc_start 1919-10-26 06:00:00 (Sun)
  60557778000, #      utc_end 1920-01-01 05:00:00 (Thu)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  60557760000, #    local_end 1920-01-01 00:00:00 (Thu)
  -18000,
  0,
  'EST',
      ],
      [
  60557778000, #    utc_start 1920-01-01 05:00:00 (Thu)
  60565302000, #      utc_end 1920-03-28 07:00:00 (Sun)
  60557760000, #  local_start 1920-01-01 00:00:00 (Thu)
  60565284000, #    local_end 1920-03-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60565302000, #    utc_start 1920-03-28 07:00:00 (Sun)
  60584047200, #      utc_end 1920-10-31 06:00:00 (Sun)
  60565287600, #  local_start 1920-03-28 03:00:00 (Sun)
  60584032800, #    local_end 1920-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60584047200, #    utc_start 1920-10-31 06:00:00 (Sun)
  60599170800, #      utc_end 1921-04-24 07:00:00 (Sun)
  60584029200, #  local_start 1920-10-31 01:00:00 (Sun)
  60599152800, #    local_end 1921-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60599170800, #    utc_start 1921-04-24 07:00:00 (Sun)
  60612472800, #      utc_end 1921-09-25 06:00:00 (Sun)
  60599156400, #  local_start 1921-04-24 03:00:00 (Sun)
  60612458400, #    local_end 1921-09-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60612472800, #    utc_start 1921-09-25 06:00:00 (Sun)
  60631225200, #      utc_end 1922-04-30 07:00:00 (Sun)
  60612454800, #  local_start 1921-09-25 01:00:00 (Sun)
  60631207200, #    local_end 1922-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60631225200, #    utc_start 1922-04-30 07:00:00 (Sun)
  60643922400, #      utc_end 1922-09-24 06:00:00 (Sun)
  60631210800, #  local_start 1922-04-30 03:00:00 (Sun)
  60643908000, #    local_end 1922-09-24 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60643922400, #    utc_start 1922-09-24 06:00:00 (Sun)
  60662674800, #      utc_end 1923-04-29 07:00:00 (Sun)
  60643904400, #  local_start 1922-09-24 01:00:00 (Sun)
  60662656800, #    local_end 1923-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60662674800, #    utc_start 1923-04-29 07:00:00 (Sun)
  60675976800, #      utc_end 1923-09-30 06:00:00 (Sun)
  60662660400, #  local_start 1923-04-29 03:00:00 (Sun)
  60675962400, #    local_end 1923-09-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60675976800, #    utc_start 1923-09-30 06:00:00 (Sun)
  60694124400, #      utc_end 1924-04-27 07:00:00 (Sun)
  60675958800, #  local_start 1923-09-30 01:00:00 (Sun)
  60694106400, #    local_end 1924-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60694124400, #    utc_start 1924-04-27 07:00:00 (Sun)
  60707426400, #      utc_end 1924-09-28 06:00:00 (Sun)
  60694110000, #  local_start 1924-04-27 03:00:00 (Sun)
  60707412000, #    local_end 1924-09-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60707426400, #    utc_start 1924-09-28 06:00:00 (Sun)
  60725574000, #      utc_end 1925-04-26 07:00:00 (Sun)
  60707408400, #  local_start 1924-09-28 01:00:00 (Sun)
  60725556000, #    local_end 1925-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60725574000, #    utc_start 1925-04-26 07:00:00 (Sun)
  60738876000, #      utc_end 1925-09-27 06:00:00 (Sun)
  60725559600, #  local_start 1925-04-26 03:00:00 (Sun)
  60738861600, #    local_end 1925-09-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60738876000, #    utc_start 1925-09-27 06:00:00 (Sun)
  60757023600, #      utc_end 1926-04-25 07:00:00 (Sun)
  60738858000, #  local_start 1925-09-27 01:00:00 (Sun)
  60757005600, #    local_end 1926-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60757023600, #    utc_start 1926-04-25 07:00:00 (Sun)
  60770325600, #      utc_end 1926-09-26 06:00:00 (Sun)
  60757009200, #  local_start 1926-04-25 03:00:00 (Sun)
  60770311200, #    local_end 1926-09-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60770325600, #    utc_start 1926-09-26 06:00:00 (Sun)
  60788473200, #      utc_end 1927-04-24 07:00:00 (Sun)
  60770307600, #  local_start 1926-09-26 01:00:00 (Sun)
  60788455200, #    local_end 1927-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60788473200, #    utc_start 1927-04-24 07:00:00 (Sun)
  60801775200, #      utc_end 1927-09-25 06:00:00 (Sun)
  60788458800, #  local_start 1927-04-24 03:00:00 (Sun)
  60801760800, #    local_end 1927-09-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60801775200, #    utc_start 1927-09-25 06:00:00 (Sun)
  60820527600, #      utc_end 1928-04-29 07:00:00 (Sun)
  60801757200, #  local_start 1927-09-25 01:00:00 (Sun)
  60820509600, #    local_end 1928-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60820527600, #    utc_start 1928-04-29 07:00:00 (Sun)
  60833829600, #      utc_end 1928-09-30 06:00:00 (Sun)
  60820513200, #  local_start 1928-04-29 03:00:00 (Sun)
  60833815200, #    local_end 1928-09-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60833829600, #    utc_start 1928-09-30 06:00:00 (Sun)
  60851977200, #      utc_end 1929-04-28 07:00:00 (Sun)
  60833811600, #  local_start 1928-09-30 01:00:00 (Sun)
  60851959200, #    local_end 1929-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60851977200, #    utc_start 1929-04-28 07:00:00 (Sun)
  60865279200, #      utc_end 1929-09-29 06:00:00 (Sun)
  60851962800, #  local_start 1929-04-28 03:00:00 (Sun)
  60865264800, #    local_end 1929-09-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60865279200, #    utc_start 1929-09-29 06:00:00 (Sun)
  60883426800, #      utc_end 1930-04-27 07:00:00 (Sun)
  60865261200, #  local_start 1929-09-29 01:00:00 (Sun)
  60883408800, #    local_end 1930-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60883426800, #    utc_start 1930-04-27 07:00:00 (Sun)
  60896728800, #      utc_end 1930-09-28 06:00:00 (Sun)
  60883412400, #  local_start 1930-04-27 03:00:00 (Sun)
  60896714400, #    local_end 1930-09-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60896728800, #    utc_start 1930-09-28 06:00:00 (Sun)
  60914876400, #      utc_end 1931-04-26 07:00:00 (Sun)
  60896710800, #  local_start 1930-09-28 01:00:00 (Sun)
  60914858400, #    local_end 1931-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60914876400, #    utc_start 1931-04-26 07:00:00 (Sun)
  60928178400, #      utc_end 1931-09-27 06:00:00 (Sun)
  60914862000, #  local_start 1931-04-26 03:00:00 (Sun)
  60928164000, #    local_end 1931-09-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60928178400, #    utc_start 1931-09-27 06:00:00 (Sun)
  60946326000, #      utc_end 1932-04-24 07:00:00 (Sun)
  60928160400, #  local_start 1931-09-27 01:00:00 (Sun)
  60946308000, #    local_end 1932-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60946326000, #    utc_start 1932-04-24 07:00:00 (Sun)
  60959628000, #      utc_end 1932-09-25 06:00:00 (Sun)
  60946311600, #  local_start 1932-04-24 03:00:00 (Sun)
  60959613600, #    local_end 1932-09-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60959628000, #    utc_start 1932-09-25 06:00:00 (Sun)
  60978380400, #      utc_end 1933-04-30 07:00:00 (Sun)
  60959610000, #  local_start 1932-09-25 01:00:00 (Sun)
  60978362400, #    local_end 1933-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60978380400, #    utc_start 1933-04-30 07:00:00 (Sun)
  60991077600, #      utc_end 1933-09-24 06:00:00 (Sun)
  60978366000, #  local_start 1933-04-30 03:00:00 (Sun)
  60991063200, #    local_end 1933-09-24 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60991077600, #    utc_start 1933-09-24 06:00:00 (Sun)
  61009830000, #      utc_end 1934-04-29 07:00:00 (Sun)
  60991059600, #  local_start 1933-09-24 01:00:00 (Sun)
  61009812000, #    local_end 1934-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61009830000, #    utc_start 1934-04-29 07:00:00 (Sun)
  61023132000, #      utc_end 1934-09-30 06:00:00 (Sun)
  61009815600, #  local_start 1934-04-29 03:00:00 (Sun)
  61023117600, #    local_end 1934-09-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61023132000, #    utc_start 1934-09-30 06:00:00 (Sun)
  61041279600, #      utc_end 1935-04-28 07:00:00 (Sun)
  61023114000, #  local_start 1934-09-30 01:00:00 (Sun)
  61041261600, #    local_end 1935-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61041279600, #    utc_start 1935-04-28 07:00:00 (Sun)
  61054581600, #      utc_end 1935-09-29 06:00:00 (Sun)
  61041265200, #  local_start 1935-04-28 03:00:00 (Sun)
  61054567200, #    local_end 1935-09-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61054581600, #    utc_start 1935-09-29 06:00:00 (Sun)
  61072729200, #      utc_end 1936-04-26 07:00:00 (Sun)
  61054563600, #  local_start 1935-09-29 01:00:00 (Sun)
  61072711200, #    local_end 1936-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61072729200, #    utc_start 1936-04-26 07:00:00 (Sun)
  61086031200, #      utc_end 1936-09-27 06:00:00 (Sun)
  61072714800, #  local_start 1936-04-26 03:00:00 (Sun)
  61086016800, #    local_end 1936-09-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61086031200, #    utc_start 1936-09-27 06:00:00 (Sun)
  61104178800, #      utc_end 1937-04-25 07:00:00 (Sun)
  61086013200, #  local_start 1936-09-27 01:00:00 (Sun)
  61104160800, #    local_end 1937-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61104178800, #    utc_start 1937-04-25 07:00:00 (Sun)
  61117480800, #      utc_end 1937-09-26 06:00:00 (Sun)
  61104164400, #  local_start 1937-04-25 03:00:00 (Sun)
  61117466400, #    local_end 1937-09-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61117480800, #    utc_start 1937-09-26 06:00:00 (Sun)
  61135628400, #      utc_end 1938-04-24 07:00:00 (Sun)
  61117462800, #  local_start 1937-09-26 01:00:00 (Sun)
  61135610400, #    local_end 1938-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61135628400, #    utc_start 1938-04-24 07:00:00 (Sun)
  61148930400, #      utc_end 1938-09-25 06:00:00 (Sun)
  61135614000, #  local_start 1938-04-24 03:00:00 (Sun)
  61148916000, #    local_end 1938-09-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61148930400, #    utc_start 1938-09-25 06:00:00 (Sun)
  61167682800, #      utc_end 1939-04-30 07:00:00 (Sun)
  61148912400, #  local_start 1938-09-25 01:00:00 (Sun)
  61167664800, #    local_end 1939-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61167682800, #    utc_start 1939-04-30 07:00:00 (Sun)
  61180380000, #      utc_end 1939-09-24 06:00:00 (Sun)
  61167668400, #  local_start 1939-04-30 03:00:00 (Sun)
  61180365600, #    local_end 1939-09-24 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61180380000, #    utc_start 1939-09-24 06:00:00 (Sun)
  61199132400, #      utc_end 1940-04-28 07:00:00 (Sun)
  61180362000, #  local_start 1939-09-24 01:00:00 (Sun)
  61199114400, #    local_end 1940-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61199132400, #    utc_start 1940-04-28 07:00:00 (Sun)
  61212434400, #      utc_end 1940-09-29 06:00:00 (Sun)
  61199118000, #  local_start 1940-04-28 03:00:00 (Sun)
  61212420000, #    local_end 1940-09-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61212434400, #    utc_start 1940-09-29 06:00:00 (Sun)
  61230582000, #      utc_end 1941-04-27 07:00:00 (Sun)
  61212416400, #  local_start 1940-09-29 01:00:00 (Sun)
  61230564000, #    local_end 1941-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61230582000, #    utc_start 1941-04-27 07:00:00 (Sun)
  61243884000, #      utc_end 1941-09-28 06:00:00 (Sun)
  61230567600, #  local_start 1941-04-27 03:00:00 (Sun)
  61243869600, #    local_end 1941-09-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61243884000, #    utc_start 1941-09-28 06:00:00 (Sun)
  61252088400, #      utc_end 1942-01-01 05:00:00 (Thu)
  61243866000, #  local_start 1941-09-28 01:00:00 (Sun)
  61252070400, #    local_end 1942-01-01 00:00:00 (Thu)
  -18000,
  0,
  'EST',
      ],
      [
  61252088400, #    utc_start 1942-01-01 05:00:00 (Thu)
  61255465200, #      utc_end 1942-02-09 07:00:00 (Mon)
  61252070400, #  local_start 1942-01-01 00:00:00 (Thu)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -18000,
  0,
  'EST',
      ],
      [
  61255465200, #    utc_start 1942-02-09 07:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366273200, #    local_end 1945-08-14 19:00:00 (Tue)
  -14400,
  1,
  'EWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370287200, #      utc_end 1945-09-30 06:00:00 (Sun)
  61366273200, #  local_start 1945-08-14 19:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -14400,
  1,
  'EPT',
      ],
      [
  61370287200, #    utc_start 1945-09-30 06:00:00 (Sun)
  61378318800, #      utc_end 1946-01-01 05:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -18000,
  0,
  'EST',
      ],
      [
  61378318800, #    utc_start 1946-01-01 05:00:00 (Tue)
  61388434800, #      utc_end 1946-04-28 07:00:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61388416800, #    local_end 1946-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61388434800, #    utc_start 1946-04-28 07:00:00 (Sun)
  61401736800, #      utc_end 1946-09-29 06:00:00 (Sun)
  61388420400, #  local_start 1946-04-28 03:00:00 (Sun)
  61401722400, #    local_end 1946-09-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61401736800, #    utc_start 1946-09-29 06:00:00 (Sun)
  61419884400, #      utc_end 1947-04-27 07:00:00 (Sun)
  61401718800, #  local_start 1946-09-29 01:00:00 (Sun)
  61419866400, #    local_end 1947-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61419884400, #    utc_start 1947-04-27 07:00:00 (Sun)
  61433186400, #      utc_end 1947-09-28 06:00:00 (Sun)
  61419870000, #  local_start 1947-04-27 03:00:00 (Sun)
  61433172000, #    local_end 1947-09-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61433186400, #    utc_start 1947-09-28 06:00:00 (Sun)
  61451334000, #      utc_end 1948-04-25 07:00:00 (Sun)
  61433168400, #  local_start 1947-09-28 01:00:00 (Sun)
  61451316000, #    local_end 1948-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61451334000, #    utc_start 1948-04-25 07:00:00 (Sun)
  61464636000, #      utc_end 1948-09-26 06:00:00 (Sun)
  61451319600, #  local_start 1948-04-25 03:00:00 (Sun)
  61464621600, #    local_end 1948-09-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61464636000, #    utc_start 1948-09-26 06:00:00 (Sun)
  61482783600, #      utc_end 1949-04-24 07:00:00 (Sun)
  61464618000, #  local_start 1948-09-26 01:00:00 (Sun)
  61482765600, #    local_end 1949-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61482783600, #    utc_start 1949-04-24 07:00:00 (Sun)
  61496085600, #      utc_end 1949-09-25 06:00:00 (Sun)
  61482769200, #  local_start 1949-04-24 03:00:00 (Sun)
  61496071200, #    local_end 1949-09-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61496085600, #    utc_start 1949-09-25 06:00:00 (Sun)
  61514838000, #      utc_end 1950-04-30 07:00:00 (Sun)
  61496067600, #  local_start 1949-09-25 01:00:00 (Sun)
  61514820000, #    local_end 1950-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61514838000, #    utc_start 1950-04-30 07:00:00 (Sun)
  61527535200, #      utc_end 1950-09-24 06:00:00 (Sun)
  61514823600, #  local_start 1950-04-30 03:00:00 (Sun)
  61527520800, #    local_end 1950-09-24 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61527535200, #    utc_start 1950-09-24 06:00:00 (Sun)
  61546287600, #      utc_end 1951-04-29 07:00:00 (Sun)
  61527517200, #  local_start 1950-09-24 01:00:00 (Sun)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61546287600, #    utc_start 1951-04-29 07:00:00 (Sun)
  61559589600, #      utc_end 1951-09-30 06:00:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61559589600, #    utc_start 1951-09-30 06:00:00 (Sun)
  61577737200, #      utc_end 1952-04-27 07:00:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61577737200, #    utc_start 1952-04-27 07:00:00 (Sun)
  61591039200, #      utc_end 1952-09-28 06:00:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61591039200, #    utc_start 1952-09-28 06:00:00 (Sun)
  61609186800, #      utc_end 1953-04-26 07:00:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61609186800, #    utc_start 1953-04-26 07:00:00 (Sun)
  61622488800, #      utc_end 1953-09-27 06:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61622488800, #    utc_start 1953-09-27 06:00:00 (Sun)
  61640636400, #      utc_end 1954-04-25 07:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61640636400, #    utc_start 1954-04-25 07:00:00 (Sun)
  61653938400, #      utc_end 1954-09-26 06:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61653938400, #    utc_start 1954-09-26 06:00:00 (Sun)
  61672086000, #      utc_end 1955-04-24 07:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61672086000, #    utc_start 1955-04-24 07:00:00 (Sun)
  61688412000, #      utc_end 1955-10-30 06:00:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61688397600, #    local_end 1955-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61688412000, #    utc_start 1955-10-30 06:00:00 (Sun)
  61704140400, #      utc_end 1956-04-29 07:00:00 (Sun)
  61688394000, #  local_start 1955-10-30 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61704140400, #    utc_start 1956-04-29 07:00:00 (Sun)
  61719861600, #      utc_end 1956-10-28 06:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61719847200, #    local_end 1956-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61719861600, #    utc_start 1956-10-28 06:00:00 (Sun)
  61735590000, #      utc_end 1957-04-28 07:00:00 (Sun)
  61719843600, #  local_start 1956-10-28 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61735590000, #    utc_start 1957-04-28 07:00:00 (Sun)
  61751311200, #      utc_end 1957-10-27 06:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61751296800, #    local_end 1957-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61751311200, #    utc_start 1957-10-27 06:00:00 (Sun)
  61767039600, #      utc_end 1958-04-27 07:00:00 (Sun)
  61751293200, #  local_start 1957-10-27 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61767039600, #    utc_start 1958-04-27 07:00:00 (Sun)
  61782760800, #      utc_end 1958-10-26 06:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61782746400, #    local_end 1958-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61782760800, #    utc_start 1958-10-26 06:00:00 (Sun)
  61798489200, #      utc_end 1959-04-26 07:00:00 (Sun)
  61782742800, #  local_start 1958-10-26 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61798489200, #    utc_start 1959-04-26 07:00:00 (Sun)
  61814210400, #      utc_end 1959-10-25 06:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61814196000, #    local_end 1959-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61814210400, #    utc_start 1959-10-25 06:00:00 (Sun)
  61829938800, #      utc_end 1960-04-24 07:00:00 (Sun)
  61814192400, #  local_start 1959-10-25 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61829938800, #    utc_start 1960-04-24 07:00:00 (Sun)
  61846264800, #      utc_end 1960-10-30 06:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61846250400, #    local_end 1960-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61846264800, #    utc_start 1960-10-30 06:00:00 (Sun)
  61861993200, #      utc_end 1961-04-30 07:00:00 (Sun)
  61846246800, #  local_start 1960-10-30 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61861993200, #    utc_start 1961-04-30 07:00:00 (Sun)
  61877714400, #      utc_end 1961-10-29 06:00:00 (Sun)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  61877700000, #    local_end 1961-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61877714400, #    utc_start 1961-10-29 06:00:00 (Sun)
  61893442800, #      utc_end 1962-04-29 07:00:00 (Sun)
  61877696400, #  local_start 1961-10-29 01:00:00 (Sun)
  61893424800, #    local_end 1962-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61893442800, #    utc_start 1962-04-29 07:00:00 (Sun)
  61909164000, #      utc_end 1962-10-28 06:00:00 (Sun)
  61893428400, #  local_start 1962-04-29 03:00:00 (Sun)
  61909149600, #    local_end 1962-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61909164000, #    utc_start 1962-10-28 06:00:00 (Sun)
  61924892400, #      utc_end 1963-04-28 07:00:00 (Sun)
  61909146000, #  local_start 1962-10-28 01:00:00 (Sun)
  61924874400, #    local_end 1963-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61924892400, #    utc_start 1963-04-28 07:00:00 (Sun)
  61940613600, #      utc_end 1963-10-27 06:00:00 (Sun)
  61924878000, #  local_start 1963-04-28 03:00:00 (Sun)
  61940599200, #    local_end 1963-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61940613600, #    utc_start 1963-10-27 06:00:00 (Sun)
  61956342000, #      utc_end 1964-04-26 07:00:00 (Sun)
  61940595600, #  local_start 1963-10-27 01:00:00 (Sun)
  61956324000, #    local_end 1964-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61956342000, #    utc_start 1964-04-26 07:00:00 (Sun)
  61972063200, #      utc_end 1964-10-25 06:00:00 (Sun)
  61956327600, #  local_start 1964-04-26 03:00:00 (Sun)
  61972048800, #    local_end 1964-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61972063200, #    utc_start 1964-10-25 06:00:00 (Sun)
  61987791600, #      utc_end 1965-04-25 07:00:00 (Sun)
  61972045200, #  local_start 1964-10-25 01:00:00 (Sun)
  61987773600, #    local_end 1965-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61987791600, #    utc_start 1965-04-25 07:00:00 (Sun)
  62004117600, #      utc_end 1965-10-31 06:00:00 (Sun)
  61987777200, #  local_start 1965-04-25 03:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62004117600, #    utc_start 1965-10-31 06:00:00 (Sun)
  62019241200, #      utc_end 1966-04-24 07:00:00 (Sun)
  62004099600, #  local_start 1965-10-31 01:00:00 (Sun)
  62019223200, #    local_end 1966-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62019241200, #    utc_start 1966-04-24 07:00:00 (Sun)
  62035567200, #      utc_end 1966-10-30 06:00:00 (Sun)
  62019226800, #  local_start 1966-04-24 03:00:00 (Sun)
  62035552800, #    local_end 1966-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62035567200, #    utc_start 1966-10-30 06:00:00 (Sun)
  62041006800, #      utc_end 1967-01-01 05:00:00 (Sun)
  62035549200, #  local_start 1966-10-30 01:00:00 (Sun)
  62040988800, #    local_end 1967-01-01 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62041006800, #    utc_start 1967-01-01 05:00:00 (Sun)
  62051295600, #      utc_end 1967-04-30 07:00:00 (Sun)
  62040988800, #  local_start 1967-01-01 00:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62051295600, #    utc_start 1967-04-30 07:00:00 (Sun)
  62067016800, #      utc_end 1967-10-29 06:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62067016800, #    utc_start 1967-10-29 06:00:00 (Sun)
  62082745200, #      utc_end 1968-04-28 07:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62082745200, #    utc_start 1968-04-28 07:00:00 (Sun)
  62098466400, #      utc_end 1968-10-27 06:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62098466400, #    utc_start 1968-10-27 06:00:00 (Sun)
  62114194800, #      utc_end 1969-04-27 07:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62114194800, #    utc_start 1969-04-27 07:00:00 (Sun)
  62129916000, #      utc_end 1969-10-26 06:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62129916000, #    utc_start 1969-10-26 06:00:00 (Sun)
  62145644400, #      utc_end 1970-04-26 07:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62145644400, #    utc_start 1970-04-26 07:00:00 (Sun)
  62161365600, #      utc_end 1970-10-25 06:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62161365600, #    utc_start 1970-10-25 06:00:00 (Sun)
  62177094000, #      utc_end 1971-04-25 07:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62177094000, #    utc_start 1971-04-25 07:00:00 (Sun)
  62193420000, #      utc_end 1971-10-31 06:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62193420000, #    utc_start 1971-10-31 06:00:00 (Sun)
  62209148400, #      utc_end 1972-04-30 07:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62209148400, #    utc_start 1972-04-30 07:00:00 (Sun)
  62224869600, #      utc_end 1972-10-29 06:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62224869600, #    utc_start 1972-10-29 06:00:00 (Sun)
  62240598000, #      utc_end 1973-04-29 07:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62240598000, #    utc_start 1973-04-29 07:00:00 (Sun)
  62256319200, #      utc_end 1973-10-28 06:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62256319200, #    utc_start 1973-10-28 06:00:00 (Sun)
  62262370800, #      utc_end 1974-01-06 07:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62262370800, #    utc_start 1974-01-06 07:00:00 (Sun)
  62287768800, #      utc_end 1974-10-27 06:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62287768800, #    utc_start 1974-10-27 06:00:00 (Sun)
  62298054000, #      utc_end 1975-02-23 07:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62298054000, #    utc_start 1975-02-23 07:00:00 (Sun)
  62319218400, #      utc_end 1975-10-26 06:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62319218400, #    utc_start 1975-10-26 06:00:00 (Sun)
  62334946800, #      utc_end 1976-04-25 07:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62334946800, #    utc_start 1976-04-25 07:00:00 (Sun)
  62351272800, #      utc_end 1976-10-31 06:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62351272800, #    utc_start 1976-10-31 06:00:00 (Sun)
  62366396400, #      utc_end 1977-04-24 07:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62366396400, #    utc_start 1977-04-24 07:00:00 (Sun)
  62382722400, #      utc_end 1977-10-30 06:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62382722400, #    utc_start 1977-10-30 06:00:00 (Sun)
  62398450800, #      utc_end 1978-04-30 07:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62398450800, #    utc_start 1978-04-30 07:00:00 (Sun)
  62414172000, #      utc_end 1978-10-29 06:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62414172000, #    utc_start 1978-10-29 06:00:00 (Sun)
  62429900400, #      utc_end 1979-04-29 07:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62429900400, #    utc_start 1979-04-29 07:00:00 (Sun)
  62445621600, #      utc_end 1979-10-28 06:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62445621600, #    utc_start 1979-10-28 06:00:00 (Sun)
  62461350000, #      utc_end 1980-04-27 07:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62461350000, #    utc_start 1980-04-27 07:00:00 (Sun)
  62477071200, #      utc_end 1980-10-26 06:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62477071200, #    utc_start 1980-10-26 06:00:00 (Sun)
  62492799600, #      utc_end 1981-04-26 07:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62492799600, #    utc_start 1981-04-26 07:00:00 (Sun)
  62508520800, #      utc_end 1981-10-25 06:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62508520800, #    utc_start 1981-10-25 06:00:00 (Sun)
  62524249200, #      utc_end 1982-04-25 07:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62524249200, #    utc_start 1982-04-25 07:00:00 (Sun)
  62540575200, #      utc_end 1982-10-31 06:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62540575200, #    utc_start 1982-10-31 06:00:00 (Sun)
  62555698800, #      utc_end 1983-04-24 07:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62555698800, #    utc_start 1983-04-24 07:00:00 (Sun)
  62572024800, #      utc_end 1983-10-30 06:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62572024800, #    utc_start 1983-10-30 06:00:00 (Sun)
  62587753200, #      utc_end 1984-04-29 07:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62587753200, #    utc_start 1984-04-29 07:00:00 (Sun)
  62603474400, #      utc_end 1984-10-28 06:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62603474400, #    utc_start 1984-10-28 06:00:00 (Sun)
  62619202800, #      utc_end 1985-04-28 07:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62619202800, #    utc_start 1985-04-28 07:00:00 (Sun)
  62634924000, #      utc_end 1985-10-27 06:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62634924000, #    utc_start 1985-10-27 06:00:00 (Sun)
  62650652400, #      utc_end 1986-04-27 07:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62650652400, #    utc_start 1986-04-27 07:00:00 (Sun)
  62666373600, #      utc_end 1986-10-26 06:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62666373600, #    utc_start 1986-10-26 06:00:00 (Sun)
  62680287600, #      utc_end 1987-04-05 07:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62680287600, #    utc_start 1987-04-05 07:00:00 (Sun)
  62697823200, #      utc_end 1987-10-25 06:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62697823200, #    utc_start 1987-10-25 06:00:00 (Sun)
  62711737200, #      utc_end 1988-04-03 07:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62711737200, #    utc_start 1988-04-03 07:00:00 (Sun)
  62729877600, #      utc_end 1988-10-30 06:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62729877600, #    utc_start 1988-10-30 06:00:00 (Sun)
  62743186800, #      utc_end 1989-04-02 07:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62743186800, #    utc_start 1989-04-02 07:00:00 (Sun)
  62761327200, #      utc_end 1989-10-29 06:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62761327200, #    utc_start 1989-10-29 06:00:00 (Sun)
  62774636400, #      utc_end 1990-04-01 07:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62774636400, #    utc_start 1990-04-01 07:00:00 (Sun)
  62792776800, #      utc_end 1990-10-28 06:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62792776800, #    utc_start 1990-10-28 06:00:00 (Sun)
  62806690800, #      utc_end 1991-04-07 07:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62806690800, #    utc_start 1991-04-07 07:00:00 (Sun)
  62824226400, #      utc_end 1991-10-27 06:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62824226400, #    utc_start 1991-10-27 06:00:00 (Sun)
  62838140400, #      utc_end 1992-04-05 07:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62838140400, #    utc_start 1992-04-05 07:00:00 (Sun)
  62855676000, #      utc_end 1992-10-25 06:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62855676000, #    utc_start 1992-10-25 06:00:00 (Sun)
  62869590000, #      utc_end 1993-04-04 07:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62869590000, #    utc_start 1993-04-04 07:00:00 (Sun)
  62887730400, #      utc_end 1993-10-31 06:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62887730400, #    utc_start 1993-10-31 06:00:00 (Sun)
  62901039600, #      utc_end 1994-04-03 07:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62901039600, #    utc_start 1994-04-03 07:00:00 (Sun)
  62919180000, #      utc_end 1994-10-30 06:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62919180000, #    utc_start 1994-10-30 06:00:00 (Sun)
  62932489200, #      utc_end 1995-04-02 07:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62932489200, #    utc_start 1995-04-02 07:00:00 (Sun)
  62950629600, #      utc_end 1995-10-29 06:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62950629600, #    utc_start 1995-10-29 06:00:00 (Sun)
  62964543600, #      utc_end 1996-04-07 07:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62964543600, #    utc_start 1996-04-07 07:00:00 (Sun)
  62982079200, #      utc_end 1996-10-27 06:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62982079200, #    utc_start 1996-10-27 06:00:00 (Sun)
  62995993200, #      utc_end 1997-04-06 07:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62995993200, #    utc_start 1997-04-06 07:00:00 (Sun)
  63013528800, #      utc_end 1997-10-26 06:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63013528800, #    utc_start 1997-10-26 06:00:00 (Sun)
  63027442800, #      utc_end 1998-04-05 07:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63027442800, #    utc_start 1998-04-05 07:00:00 (Sun)
  63044978400, #      utc_end 1998-10-25 06:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63044978400, #    utc_start 1998-10-25 06:00:00 (Sun)
  63058892400, #      utc_end 1999-04-04 07:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63058892400, #    utc_start 1999-04-04 07:00:00 (Sun)
  63077032800, #      utc_end 1999-10-31 06:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63077032800, #    utc_start 1999-10-31 06:00:00 (Sun)
  63090342000, #      utc_end 2000-04-02 07:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63090342000, #    utc_start 2000-04-02 07:00:00 (Sun)
  63108482400, #      utc_end 2000-10-29 06:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63108482400, #    utc_start 2000-10-29 06:00:00 (Sun)
  63121791600, #      utc_end 2001-04-01 07:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63121791600, #    utc_start 2001-04-01 07:00:00 (Sun)
  63139932000, #      utc_end 2001-10-28 06:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63139932000, #    utc_start 2001-10-28 06:00:00 (Sun)
  63153846000, #      utc_end 2002-04-07 07:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63153846000, #    utc_start 2002-04-07 07:00:00 (Sun)
  63171381600, #      utc_end 2002-10-27 06:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63171381600, #    utc_start 2002-10-27 06:00:00 (Sun)
  63185295600, #      utc_end 2003-04-06 07:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63185295600, #    utc_start 2003-04-06 07:00:00 (Sun)
  63202831200, #      utc_end 2003-10-26 06:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63202831200, #    utc_start 2003-10-26 06:00:00 (Sun)
  63216745200, #      utc_end 2004-04-04 07:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63216745200, #    utc_start 2004-04-04 07:00:00 (Sun)
  63234885600, #      utc_end 2004-10-31 06:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63234885600, #    utc_start 2004-10-31 06:00:00 (Sun)
  63248194800, #      utc_end 2005-04-03 07:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63248194800, #    utc_start 2005-04-03 07:00:00 (Sun)
  63266335200, #      utc_end 2005-10-30 06:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63266335200, #    utc_start 2005-10-30 06:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297784800, #      utc_end 2006-10-29 06:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63297784800, #    utc_start 2006-10-29 06:00:00 (Sun)
  63309279600, #      utc_end 2007-03-11 07:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63309279600, #    utc_start 2007-03-11 07:00:00 (Sun)
  63329839200, #      utc_end 2007-11-04 06:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63329839200, #    utc_start 2007-11-04 06:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {108}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 718067,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 718067,
      'utc_rd_secs' => 0,
      'utc_year' => 1968
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 718067,
      'local_rd_secs' => 18000,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 718067,
      'utc_rd_secs' => 18000,
      'utc_year' => 1968
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_NEW_YORK

    $main::fatpacked{"DateTime/TimeZone/America/Nipigon.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_NIPIGON';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Nipigon;
  $DateTime::TimeZone::America::Nipigon::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Nipigon::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59768949184, #      utc_end 1895-01-01 05:53:04 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59768928000, #    local_end 1895-01-01 00:00:00 (Tue)
  -21184,
  0,
  'LMT',
      ],
      [
  59768949184, #    utc_start 1895-01-01 05:53:04 (Tue)
  60503612400, #      utc_end 1918-04-14 07:00:00 (Sun)
  59768931184, #  local_start 1895-01-01 00:53:04 (Tue)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60503612400, #    utc_start 1918-04-14 07:00:00 (Sun)
  60520543200, #      utc_end 1918-10-27 06:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60520543200, #    utc_start 1918-10-27 06:00:00 (Sun)
  61212430800, #      utc_end 1940-09-29 05:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  61212412800, #    local_end 1940-09-29 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61212430800, #    utc_start 1940-09-29 05:00:00 (Sun)
  61255465200, #      utc_end 1942-02-09 07:00:00 (Mon)
  61212416400, #  local_start 1940-09-29 01:00:00 (Sun)
  61255450800, #    local_end 1942-02-09 03:00:00 (Mon)
  -14400,
  1,
  'EDT',
      ],
      [
  61255465200, #    utc_start 1942-02-09 07:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366273200, #    local_end 1945-08-14 19:00:00 (Tue)
  -14400,
  1,
  'EWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370287200, #      utc_end 1945-09-30 06:00:00 (Sun)
  61366273200, #  local_start 1945-08-14 19:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -14400,
  1,
  'EPT',
      ],
      [
  61370287200, #    utc_start 1945-09-30 06:00:00 (Sun)
  62272047600, #      utc_end 1974-04-28 07:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  62272029600, #    local_end 1974-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62272047600, #    utc_start 1974-04-28 07:00:00 (Sun)
  62287768800, #      utc_end 1974-10-27 06:00:00 (Sun)
  62272033200, #  local_start 1974-04-28 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62287768800, #    utc_start 1974-10-27 06:00:00 (Sun)
  62303497200, #      utc_end 1975-04-27 07:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62303479200, #    local_end 1975-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62303497200, #    utc_start 1975-04-27 07:00:00 (Sun)
  62319218400, #      utc_end 1975-10-26 06:00:00 (Sun)
  62303482800, #  local_start 1975-04-27 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62319218400, #    utc_start 1975-10-26 06:00:00 (Sun)
  62334946800, #      utc_end 1976-04-25 07:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62334946800, #    utc_start 1976-04-25 07:00:00 (Sun)
  62351272800, #      utc_end 1976-10-31 06:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62351272800, #    utc_start 1976-10-31 06:00:00 (Sun)
  62366396400, #      utc_end 1977-04-24 07:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62366396400, #    utc_start 1977-04-24 07:00:00 (Sun)
  62382722400, #      utc_end 1977-10-30 06:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62382722400, #    utc_start 1977-10-30 06:00:00 (Sun)
  62398450800, #      utc_end 1978-04-30 07:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62398450800, #    utc_start 1978-04-30 07:00:00 (Sun)
  62414172000, #      utc_end 1978-10-29 06:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62414172000, #    utc_start 1978-10-29 06:00:00 (Sun)
  62429900400, #      utc_end 1979-04-29 07:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62429900400, #    utc_start 1979-04-29 07:00:00 (Sun)
  62445621600, #      utc_end 1979-10-28 06:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62445621600, #    utc_start 1979-10-28 06:00:00 (Sun)
  62461350000, #      utc_end 1980-04-27 07:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62461350000, #    utc_start 1980-04-27 07:00:00 (Sun)
  62477071200, #      utc_end 1980-10-26 06:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62477071200, #    utc_start 1980-10-26 06:00:00 (Sun)
  62492799600, #      utc_end 1981-04-26 07:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62492799600, #    utc_start 1981-04-26 07:00:00 (Sun)
  62508520800, #      utc_end 1981-10-25 06:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62508520800, #    utc_start 1981-10-25 06:00:00 (Sun)
  62524249200, #      utc_end 1982-04-25 07:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62524249200, #    utc_start 1982-04-25 07:00:00 (Sun)
  62540575200, #      utc_end 1982-10-31 06:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62540575200, #    utc_start 1982-10-31 06:00:00 (Sun)
  62555698800, #      utc_end 1983-04-24 07:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62555698800, #    utc_start 1983-04-24 07:00:00 (Sun)
  62572024800, #      utc_end 1983-10-30 06:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62572024800, #    utc_start 1983-10-30 06:00:00 (Sun)
  62587753200, #      utc_end 1984-04-29 07:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62587753200, #    utc_start 1984-04-29 07:00:00 (Sun)
  62603474400, #      utc_end 1984-10-28 06:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62603474400, #    utc_start 1984-10-28 06:00:00 (Sun)
  62619202800, #      utc_end 1985-04-28 07:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62619202800, #    utc_start 1985-04-28 07:00:00 (Sun)
  62634924000, #      utc_end 1985-10-27 06:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62634924000, #    utc_start 1985-10-27 06:00:00 (Sun)
  62650652400, #      utc_end 1986-04-27 07:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62650652400, #    utc_start 1986-04-27 07:00:00 (Sun)
  62666373600, #      utc_end 1986-10-26 06:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62666373600, #    utc_start 1986-10-26 06:00:00 (Sun)
  62680287600, #      utc_end 1987-04-05 07:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62680287600, #    utc_start 1987-04-05 07:00:00 (Sun)
  62697823200, #      utc_end 1987-10-25 06:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62697823200, #    utc_start 1987-10-25 06:00:00 (Sun)
  62711737200, #      utc_end 1988-04-03 07:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62711737200, #    utc_start 1988-04-03 07:00:00 (Sun)
  62729877600, #      utc_end 1988-10-30 06:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62729877600, #    utc_start 1988-10-30 06:00:00 (Sun)
  62743186800, #      utc_end 1989-04-02 07:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62743186800, #    utc_start 1989-04-02 07:00:00 (Sun)
  62761327200, #      utc_end 1989-10-29 06:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62761327200, #    utc_start 1989-10-29 06:00:00 (Sun)
  62774636400, #      utc_end 1990-04-01 07:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62774636400, #    utc_start 1990-04-01 07:00:00 (Sun)
  62792776800, #      utc_end 1990-10-28 06:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62792776800, #    utc_start 1990-10-28 06:00:00 (Sun)
  62806690800, #      utc_end 1991-04-07 07:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62806690800, #    utc_start 1991-04-07 07:00:00 (Sun)
  62824226400, #      utc_end 1991-10-27 06:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62824226400, #    utc_start 1991-10-27 06:00:00 (Sun)
  62838140400, #      utc_end 1992-04-05 07:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62838140400, #    utc_start 1992-04-05 07:00:00 (Sun)
  62855676000, #      utc_end 1992-10-25 06:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62855676000, #    utc_start 1992-10-25 06:00:00 (Sun)
  62869590000, #      utc_end 1993-04-04 07:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62869590000, #    utc_start 1993-04-04 07:00:00 (Sun)
  62887730400, #      utc_end 1993-10-31 06:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62887730400, #    utc_start 1993-10-31 06:00:00 (Sun)
  62901039600, #      utc_end 1994-04-03 07:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62901039600, #    utc_start 1994-04-03 07:00:00 (Sun)
  62919180000, #      utc_end 1994-10-30 06:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62919180000, #    utc_start 1994-10-30 06:00:00 (Sun)
  62932489200, #      utc_end 1995-04-02 07:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62932489200, #    utc_start 1995-04-02 07:00:00 (Sun)
  62950629600, #      utc_end 1995-10-29 06:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62950629600, #    utc_start 1995-10-29 06:00:00 (Sun)
  62964543600, #      utc_end 1996-04-07 07:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62964543600, #    utc_start 1996-04-07 07:00:00 (Sun)
  62982079200, #      utc_end 1996-10-27 06:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62982079200, #    utc_start 1996-10-27 06:00:00 (Sun)
  62995993200, #      utc_end 1997-04-06 07:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62995993200, #    utc_start 1997-04-06 07:00:00 (Sun)
  63013528800, #      utc_end 1997-10-26 06:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63013528800, #    utc_start 1997-10-26 06:00:00 (Sun)
  63027442800, #      utc_end 1998-04-05 07:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63027442800, #    utc_start 1998-04-05 07:00:00 (Sun)
  63044978400, #      utc_end 1998-10-25 06:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63044978400, #    utc_start 1998-10-25 06:00:00 (Sun)
  63058892400, #      utc_end 1999-04-04 07:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63058892400, #    utc_start 1999-04-04 07:00:00 (Sun)
  63077032800, #      utc_end 1999-10-31 06:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63077032800, #    utc_start 1999-10-31 06:00:00 (Sun)
  63090342000, #      utc_end 2000-04-02 07:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63090342000, #    utc_start 2000-04-02 07:00:00 (Sun)
  63108482400, #      utc_end 2000-10-29 06:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63108482400, #    utc_start 2000-10-29 06:00:00 (Sun)
  63121791600, #      utc_end 2001-04-01 07:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63121791600, #    utc_start 2001-04-01 07:00:00 (Sun)
  63139932000, #      utc_end 2001-10-28 06:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63139932000, #    utc_start 2001-10-28 06:00:00 (Sun)
  63153846000, #      utc_end 2002-04-07 07:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63153846000, #    utc_start 2002-04-07 07:00:00 (Sun)
  63171381600, #      utc_end 2002-10-27 06:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63171381600, #    utc_start 2002-10-27 06:00:00 (Sun)
  63185295600, #      utc_end 2003-04-06 07:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63185295600, #    utc_start 2003-04-06 07:00:00 (Sun)
  63202831200, #      utc_end 2003-10-26 06:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63202831200, #    utc_start 2003-10-26 06:00:00 (Sun)
  63216745200, #      utc_end 2004-04-04 07:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63216745200, #    utc_start 2004-04-04 07:00:00 (Sun)
  63234885600, #      utc_end 2004-10-31 06:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63234885600, #    utc_start 2004-10-31 06:00:00 (Sun)
  63248194800, #      utc_end 2005-04-03 07:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63248194800, #    utc_start 2005-04-03 07:00:00 (Sun)
  63266335200, #      utc_end 2005-10-30 06:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63266335200, #    utc_start 2005-10-30 06:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297784800, #      utc_end 2006-10-29 06:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63297784800, #    utc_start 2006-10-29 06:00:00 (Sun)
  63309279600, #      utc_end 2007-03-11 07:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63309279600, #    utc_start 2007-03-11 07:00:00 (Sun)
  63329839200, #      utc_end 2007-11-04 06:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63329839200, #    utc_start 2007-11-04 06:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {58}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 708975,
      'local_rd_secs' => 10800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 708975,
      'utc_rd_secs' => 10800,
      'utc_year' => 1943
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 708975,
      'local_rd_secs' => 25200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 708975,
      'utc_rd_secs' => 25200,
      'utc_year' => 1943
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_NIPIGON

    $main::fatpacked{"DateTime/TimeZone/America/Nome.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_NOME';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Nome;
  $DateTime::TimeZone::America::Nome::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Nome::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  58910324499, #      utc_end 1867-10-17 11:01:39 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  58910371200, #    local_end 1867-10-18 00:00:00 (Fri)
  46701,
  0,
  'LMT',
      ],
      [
  58910324499, #    utc_start 1867-10-17 11:01:39 (Thu)
  59946735698, #      utc_end 1900-08-20 23:01:38 (Mon)
  58910284801, #  local_start 1867-10-17 00:00:01 (Thu)
  59946696000, #    local_end 1900-08-20 12:00:00 (Mon)
  -39698,
  0,
  'LMT',
      ],
      [
  59946735698, #    utc_start 1900-08-20 23:01:38 (Mon)
  61252110000, #      utc_end 1942-01-01 11:00:00 (Thu)
  59946696098, #  local_start 1900-08-20 12:01:38 (Mon)
  61252070400, #    local_end 1942-01-01 00:00:00 (Thu)
  -39600,
  0,
  'NST',
      ],
      [
  61252110000, #    utc_start 1942-01-01 11:00:00 (Thu)
  61255486800, #      utc_end 1942-02-09 13:00:00 (Mon)
  61252070400, #  local_start 1942-01-01 00:00:00 (Thu)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -39600,
  0,
  'NST',
      ],
      [
  61255486800, #    utc_start 1942-02-09 13:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366251600, #    local_end 1945-08-14 13:00:00 (Tue)
  -36000,
  1,
  'NWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370308800, #      utc_end 1945-09-30 12:00:00 (Sun)
  61366251600, #  local_start 1945-08-14 13:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -36000,
  1,
  'NPT',
      ],
      [
  61370308800, #    utc_start 1945-09-30 12:00:00 (Sun)
  61378340400, #      utc_end 1946-01-01 11:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -39600,
  0,
  'NST',
      ],
      [
  61378340400, #    utc_start 1946-01-01 11:00:00 (Tue)
  62048804400, #      utc_end 1967-04-01 11:00:00 (Sat)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  62048764800, #    local_end 1967-04-01 00:00:00 (Sat)
  -39600,
  0,
  'NST',
      ],
      [
  62048804400, #    utc_start 1967-04-01 11:00:00 (Sat)
  62104186800, #      utc_end 1969-01-01 11:00:00 (Wed)
  62048764800, #  local_start 1967-04-01 00:00:00 (Sat)
  62104147200, #    local_end 1969-01-01 00:00:00 (Wed)
  -39600,
  0,
  'BST',
      ],
      [
  62104186800, #    utc_start 1969-01-01 11:00:00 (Wed)
  62114216400, #      utc_end 1969-04-27 13:00:00 (Sun)
  62104147200, #  local_start 1969-01-01 00:00:00 (Wed)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62114216400, #    utc_start 1969-04-27 13:00:00 (Sun)
  62129937600, #      utc_end 1969-10-26 12:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62129937600, #    utc_start 1969-10-26 12:00:00 (Sun)
  62145666000, #      utc_end 1970-04-26 13:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62145666000, #    utc_start 1970-04-26 13:00:00 (Sun)
  62161387200, #      utc_end 1970-10-25 12:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62161387200, #    utc_start 1970-10-25 12:00:00 (Sun)
  62177115600, #      utc_end 1971-04-25 13:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62177115600, #    utc_start 1971-04-25 13:00:00 (Sun)
  62193441600, #      utc_end 1971-10-31 12:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62193441600, #    utc_start 1971-10-31 12:00:00 (Sun)
  62209170000, #      utc_end 1972-04-30 13:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62209170000, #    utc_start 1972-04-30 13:00:00 (Sun)
  62224891200, #      utc_end 1972-10-29 12:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62224891200, #    utc_start 1972-10-29 12:00:00 (Sun)
  62240619600, #      utc_end 1973-04-29 13:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62240619600, #    utc_start 1973-04-29 13:00:00 (Sun)
  62256340800, #      utc_end 1973-10-28 12:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62256340800, #    utc_start 1973-10-28 12:00:00 (Sun)
  62262392400, #      utc_end 1974-01-06 13:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62262392400, #    utc_start 1974-01-06 13:00:00 (Sun)
  62287790400, #      utc_end 1974-10-27 12:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62287790400, #    utc_start 1974-10-27 12:00:00 (Sun)
  62298075600, #      utc_end 1975-02-23 13:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62298075600, #    utc_start 1975-02-23 13:00:00 (Sun)
  62319240000, #      utc_end 1975-10-26 12:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62319240000, #    utc_start 1975-10-26 12:00:00 (Sun)
  62334968400, #      utc_end 1976-04-25 13:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62334968400, #    utc_start 1976-04-25 13:00:00 (Sun)
  62351294400, #      utc_end 1976-10-31 12:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62351294400, #    utc_start 1976-10-31 12:00:00 (Sun)
  62366418000, #      utc_end 1977-04-24 13:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62366418000, #    utc_start 1977-04-24 13:00:00 (Sun)
  62382744000, #      utc_end 1977-10-30 12:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62382744000, #    utc_start 1977-10-30 12:00:00 (Sun)
  62398472400, #      utc_end 1978-04-30 13:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62398472400, #    utc_start 1978-04-30 13:00:00 (Sun)
  62414193600, #      utc_end 1978-10-29 12:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62414193600, #    utc_start 1978-10-29 12:00:00 (Sun)
  62429922000, #      utc_end 1979-04-29 13:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62429922000, #    utc_start 1979-04-29 13:00:00 (Sun)
  62445643200, #      utc_end 1979-10-28 12:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62445643200, #    utc_start 1979-10-28 12:00:00 (Sun)
  62461371600, #      utc_end 1980-04-27 13:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62461371600, #    utc_start 1980-04-27 13:00:00 (Sun)
  62477092800, #      utc_end 1980-10-26 12:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62477092800, #    utc_start 1980-10-26 12:00:00 (Sun)
  62492821200, #      utc_end 1981-04-26 13:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62492821200, #    utc_start 1981-04-26 13:00:00 (Sun)
  62508542400, #      utc_end 1981-10-25 12:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62508542400, #    utc_start 1981-10-25 12:00:00 (Sun)
  62524270800, #      utc_end 1982-04-25 13:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62524270800, #    utc_start 1982-04-25 13:00:00 (Sun)
  62540596800, #      utc_end 1982-10-31 12:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62540596800, #    utc_start 1982-10-31 12:00:00 (Sun)
  62555720400, #      utc_end 1983-04-24 13:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -39600,
  0,
  'BST',
      ],
      [
  62555720400, #    utc_start 1983-04-24 13:00:00 (Sun)
  62572046400, #      utc_end 1983-10-30 12:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -36000,
  1,
  'BDT',
      ],
      [
  62572046400, #    utc_start 1983-10-30 12:00:00 (Sun)
  62574714000, #      utc_end 1983-11-30 09:00:00 (Wed)
  62572014000, #  local_start 1983-10-30 03:00:00 (Sun)
  62574681600, #    local_end 1983-11-30 00:00:00 (Wed)
  -32400,
  0,
  'YST',
      ],
      [
  62574714000, #    utc_start 1983-11-30 09:00:00 (Wed)
  62587767600, #      utc_end 1984-04-29 11:00:00 (Sun)
  62574681600, #  local_start 1983-11-30 00:00:00 (Wed)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62587767600, #    utc_start 1984-04-29 11:00:00 (Sun)
  62603488800, #      utc_end 1984-10-28 10:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62603488800, #    utc_start 1984-10-28 10:00:00 (Sun)
  62619217200, #      utc_end 1985-04-28 11:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62619217200, #    utc_start 1985-04-28 11:00:00 (Sun)
  62634938400, #      utc_end 1985-10-27 10:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62634938400, #    utc_start 1985-10-27 10:00:00 (Sun)
  62650666800, #      utc_end 1986-04-27 11:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62650666800, #    utc_start 1986-04-27 11:00:00 (Sun)
  62666388000, #      utc_end 1986-10-26 10:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62666388000, #    utc_start 1986-10-26 10:00:00 (Sun)
  62680302000, #      utc_end 1987-04-05 11:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62680302000, #    utc_start 1987-04-05 11:00:00 (Sun)
  62697837600, #      utc_end 1987-10-25 10:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62697837600, #    utc_start 1987-10-25 10:00:00 (Sun)
  62711751600, #      utc_end 1988-04-03 11:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62711751600, #    utc_start 1988-04-03 11:00:00 (Sun)
  62729892000, #      utc_end 1988-10-30 10:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62729892000, #    utc_start 1988-10-30 10:00:00 (Sun)
  62743201200, #      utc_end 1989-04-02 11:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62743201200, #    utc_start 1989-04-02 11:00:00 (Sun)
  62761341600, #      utc_end 1989-10-29 10:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62761341600, #    utc_start 1989-10-29 10:00:00 (Sun)
  62774650800, #      utc_end 1990-04-01 11:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62774650800, #    utc_start 1990-04-01 11:00:00 (Sun)
  62792791200, #      utc_end 1990-10-28 10:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62792791200, #    utc_start 1990-10-28 10:00:00 (Sun)
  62806705200, #      utc_end 1991-04-07 11:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62806705200, #    utc_start 1991-04-07 11:00:00 (Sun)
  62824240800, #      utc_end 1991-10-27 10:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62824240800, #    utc_start 1991-10-27 10:00:00 (Sun)
  62838154800, #      utc_end 1992-04-05 11:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62838154800, #    utc_start 1992-04-05 11:00:00 (Sun)
  62855690400, #      utc_end 1992-10-25 10:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62855690400, #    utc_start 1992-10-25 10:00:00 (Sun)
  62869604400, #      utc_end 1993-04-04 11:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62869604400, #    utc_start 1993-04-04 11:00:00 (Sun)
  62887744800, #      utc_end 1993-10-31 10:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62887744800, #    utc_start 1993-10-31 10:00:00 (Sun)
  62901054000, #      utc_end 1994-04-03 11:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62901054000, #    utc_start 1994-04-03 11:00:00 (Sun)
  62919194400, #      utc_end 1994-10-30 10:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62919194400, #    utc_start 1994-10-30 10:00:00 (Sun)
  62932503600, #      utc_end 1995-04-02 11:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62932503600, #    utc_start 1995-04-02 11:00:00 (Sun)
  62950644000, #      utc_end 1995-10-29 10:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62950644000, #    utc_start 1995-10-29 10:00:00 (Sun)
  62964558000, #      utc_end 1996-04-07 11:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62964558000, #    utc_start 1996-04-07 11:00:00 (Sun)
  62982093600, #      utc_end 1996-10-27 10:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62982093600, #    utc_start 1996-10-27 10:00:00 (Sun)
  62996007600, #      utc_end 1997-04-06 11:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62996007600, #    utc_start 1997-04-06 11:00:00 (Sun)
  63013543200, #      utc_end 1997-10-26 10:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63013543200, #    utc_start 1997-10-26 10:00:00 (Sun)
  63027457200, #      utc_end 1998-04-05 11:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63027457200, #    utc_start 1998-04-05 11:00:00 (Sun)
  63044992800, #      utc_end 1998-10-25 10:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63044992800, #    utc_start 1998-10-25 10:00:00 (Sun)
  63058906800, #      utc_end 1999-04-04 11:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63058906800, #    utc_start 1999-04-04 11:00:00 (Sun)
  63077047200, #      utc_end 1999-10-31 10:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63077047200, #    utc_start 1999-10-31 10:00:00 (Sun)
  63090356400, #      utc_end 2000-04-02 11:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63090356400, #    utc_start 2000-04-02 11:00:00 (Sun)
  63108496800, #      utc_end 2000-10-29 10:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63108496800, #    utc_start 2000-10-29 10:00:00 (Sun)
  63121806000, #      utc_end 2001-04-01 11:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63121806000, #    utc_start 2001-04-01 11:00:00 (Sun)
  63139946400, #      utc_end 2001-10-28 10:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63139946400, #    utc_start 2001-10-28 10:00:00 (Sun)
  63153860400, #      utc_end 2002-04-07 11:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63153860400, #    utc_start 2002-04-07 11:00:00 (Sun)
  63171396000, #      utc_end 2002-10-27 10:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63171396000, #    utc_start 2002-10-27 10:00:00 (Sun)
  63185310000, #      utc_end 2003-04-06 11:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63185310000, #    utc_start 2003-04-06 11:00:00 (Sun)
  63202845600, #      utc_end 2003-10-26 10:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63202845600, #    utc_start 2003-10-26 10:00:00 (Sun)
  63216759600, #      utc_end 2004-04-04 11:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63216759600, #    utc_start 2004-04-04 11:00:00 (Sun)
  63234900000, #      utc_end 2004-10-31 10:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63234900000, #    utc_start 2004-10-31 10:00:00 (Sun)
  63248209200, #      utc_end 2005-04-03 11:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63248209200, #    utc_start 2005-04-03 11:00:00 (Sun)
  63266349600, #      utc_end 2005-10-30 10:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63266349600, #    utc_start 2005-10-30 10:00:00 (Sun)
  63279658800, #      utc_end 2006-04-02 11:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63279658800, #    utc_start 2006-04-02 11:00:00 (Sun)
  63297799200, #      utc_end 2006-10-29 10:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63297799200, #    utc_start 2006-10-29 10:00:00 (Sun)
  63309294000, #      utc_end 2007-03-11 11:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63309294000, #    utc_start 2007-03-11 11:00:00 (Sun)
  63329853600, #      utc_end 2007-11-04 10:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63329853600, #    utc_start 2007-11-04 10:00:00 (Sun)
  63340743600, #      utc_end 2008-03-09 11:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63340743600, #    utc_start 2008-03-09 11:00:00 (Sun)
  63361303200, #      utc_end 2008-11-02 10:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63361303200, #    utc_start 2008-11-02 10:00:00 (Sun)
  63372193200, #      utc_end 2009-03-08 11:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63372193200, #    utc_start 2009-03-08 11:00:00 (Sun)
  63392752800, #      utc_end 2009-11-01 10:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63392752800, #    utc_start 2009-11-01 10:00:00 (Sun)
  63404247600, #      utc_end 2010-03-14 11:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63404247600, #    utc_start 2010-03-14 11:00:00 (Sun)
  63424807200, #      utc_end 2010-11-07 10:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63424807200, #    utc_start 2010-11-07 10:00:00 (Sun)
  63435697200, #      utc_end 2011-03-13 11:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63435697200, #    utc_start 2011-03-13 11:00:00 (Sun)
  63456256800, #      utc_end 2011-11-06 10:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63456256800, #    utc_start 2011-11-06 10:00:00 (Sun)
  63467146800, #      utc_end 2012-03-11 11:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63467146800, #    utc_start 2012-03-11 11:00:00 (Sun)
  63487706400, #      utc_end 2012-11-04 10:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63487706400, #    utc_start 2012-11-04 10:00:00 (Sun)
  63498596400, #      utc_end 2013-03-10 11:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63498596400, #    utc_start 2013-03-10 11:00:00 (Sun)
  63519156000, #      utc_end 2013-11-03 10:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63519156000, #    utc_start 2013-11-03 10:00:00 (Sun)
  63530046000, #      utc_end 2014-03-09 11:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63530046000, #    utc_start 2014-03-09 11:00:00 (Sun)
  63550605600, #      utc_end 2014-11-02 10:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63550605600, #    utc_start 2014-11-02 10:00:00 (Sun)
  63561495600, #      utc_end 2015-03-08 11:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63561495600, #    utc_start 2015-03-08 11:00:00 (Sun)
  63582055200, #      utc_end 2015-11-01 10:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63582055200, #    utc_start 2015-11-01 10:00:00 (Sun)
  63593550000, #      utc_end 2016-03-13 11:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63593550000, #    utc_start 2016-03-13 11:00:00 (Sun)
  63614109600, #      utc_end 2016-11-06 10:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63614109600, #    utc_start 2016-11-06 10:00:00 (Sun)
  63624999600, #      utc_end 2017-03-12 11:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63624999600, #    utc_start 2017-03-12 11:00:00 (Sun)
  63645559200, #      utc_end 2017-11-05 10:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63645559200, #    utc_start 2017-11-05 10:00:00 (Sun)
  63656449200, #      utc_end 2018-03-11 11:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63656449200, #    utc_start 2018-03-11 11:00:00 (Sun)
  63677008800, #      utc_end 2018-11-04 10:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63677008800, #    utc_start 2018-11-04 10:00:00 (Sun)
  63687898800, #      utc_end 2019-03-10 11:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63687898800, #    utc_start 2019-03-10 11:00:00 (Sun)
  63708458400, #      utc_end 2019-11-03 10:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63708458400, #    utc_start 2019-11-03 10:00:00 (Sun)
  63719348400, #      utc_end 2020-03-08 11:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63719348400, #    utc_start 2020-03-08 11:00:00 (Sun)
  63739908000, #      utc_end 2020-11-01 10:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63739908000, #    utc_start 2020-11-01 10:00:00 (Sun)
  63751402800, #      utc_end 2021-03-14 11:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63751402800, #    utc_start 2021-03-14 11:00:00 (Sun)
  63771962400, #      utc_end 2021-11-07 10:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63771962400, #    utc_start 2021-11-07 10:00:00 (Sun)
  63782852400, #      utc_end 2022-03-13 11:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63782852400, #    utc_start 2022-03-13 11:00:00 (Sun)
  63803412000, #      utc_end 2022-11-06 10:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63803412000, #    utc_start 2022-11-06 10:00:00 (Sun)
  63814302000, #      utc_end 2023-03-12 11:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63814302000, #    utc_start 2023-03-12 11:00:00 (Sun)
  63834861600, #      utc_end 2023-11-05 10:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63834861600, #    utc_start 2023-11-05 10:00:00 (Sun)
  63845751600, #      utc_end 2024-03-10 11:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63845751600, #    utc_start 2024-03-10 11:00:00 (Sun)
  63866311200, #      utc_end 2024-11-03 10:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63866311200, #    utc_start 2024-11-03 10:00:00 (Sun)
  63877201200, #      utc_end 2025-03-09 11:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63877201200, #    utc_start 2025-03-09 11:00:00 (Sun)
  63897760800, #      utc_end 2025-11-02 10:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63897760800, #    utc_start 2025-11-02 10:00:00 (Sun)
  63908650800, #      utc_end 2026-03-08 11:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63908650800, #    utc_start 2026-03-08 11:00:00 (Sun)
  63929210400, #      utc_end 2026-11-01 10:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63929210400, #    utc_start 2026-11-01 10:00:00 (Sun)
  63940705200, #      utc_end 2027-03-14 11:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63940705200, #    utc_start 2027-03-14 11:00:00 (Sun)
  63961264800, #      utc_end 2027-11-07 10:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {61}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -32400 }
  
  my $last_observance = bless( {
    'format' => 'AK%sT',
    'gmtoff' => '-9:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724244,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724244,
      'utc_rd_secs' => 0,
      'utc_year' => 1984
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -32400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724244,
      'local_rd_secs' => 32400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724244,
      'utc_rd_secs' => 32400,
      'utc_year' => 1984
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_NOME

    $main::fatpacked{"DateTime/TimeZone/America/Noronha.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_NORONHA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Noronha;
  $DateTime::TimeZone::America::Noronha::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Noronha::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368465380, #      utc_end 1914-01-01 02:09:40 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  -7780,
  0,
  'LMT',
      ],
      [
  60368465380, #    utc_start 1914-01-01 02:09:40 (Thu)
  60928722000, #      utc_end 1931-10-03 13:00:00 (Sat)
  60368458180, #  local_start 1914-01-01 00:09:40 (Thu)
  60928714800, #    local_end 1931-10-03 11:00:00 (Sat)
  -7200,
  0,
  'FNT',
      ],
      [
  60928722000, #    utc_start 1931-10-03 13:00:00 (Sat)
  60944317200, #      utc_end 1932-04-01 01:00:00 (Fri)
  60928718400, #  local_start 1931-10-03 12:00:00 (Sat)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -3600,
  1,
  'FNST',
      ],
      [
  60944317200, #    utc_start 1932-04-01 01:00:00 (Fri)
  60960304800, #      utc_end 1932-10-03 02:00:00 (Mon)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60960297600, #    local_end 1932-10-03 00:00:00 (Mon)
  -7200,
  0,
  'FNT',
      ],
      [
  60960304800, #    utc_start 1932-10-03 02:00:00 (Mon)
  60975853200, #      utc_end 1933-04-01 01:00:00 (Sat)
  60960301200, #  local_start 1932-10-03 01:00:00 (Mon)
  60975849600, #    local_end 1933-04-01 00:00:00 (Sat)
  -3600,
  1,
  'FNST',
      ],
      [
  60975853200, #    utc_start 1933-04-01 01:00:00 (Sat)
  61501860000, #      utc_end 1949-12-01 02:00:00 (Thu)
  60975846000, #  local_start 1933-03-31 23:00:00 (Fri)
  61501852800, #    local_end 1949-12-01 00:00:00 (Thu)
  -7200,
  0,
  'FNT',
      ],
      [
  61501860000, #    utc_start 1949-12-01 02:00:00 (Thu)
  61513610400, #      utc_end 1950-04-16 02:00:00 (Sun)
  61501856400, #  local_start 1949-12-01 01:00:00 (Thu)
  61513606800, #    local_end 1950-04-16 01:00:00 (Sun)
  -3600,
  1,
  'FNST',
      ],
      [
  61513610400, #    utc_start 1950-04-16 02:00:00 (Sun)
  61533396000, #      utc_end 1950-12-01 02:00:00 (Fri)
  61513603200, #  local_start 1950-04-16 00:00:00 (Sun)
  61533388800, #    local_end 1950-12-01 00:00:00 (Fri)
  -7200,
  0,
  'FNT',
      ],
      [
  61533396000, #    utc_start 1950-12-01 02:00:00 (Fri)
  61543846800, #      utc_end 1951-04-01 01:00:00 (Sun)
  61533392400, #  local_start 1950-12-01 01:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  -3600,
  1,
  'FNST',
      ],
      [
  61543846800, #    utc_start 1951-04-01 01:00:00 (Sun)
  61564932000, #      utc_end 1951-12-01 02:00:00 (Sat)
  61543839600, #  local_start 1951-03-31 23:00:00 (Sat)
  61564924800, #    local_end 1951-12-01 00:00:00 (Sat)
  -7200,
  0,
  'FNT',
      ],
      [
  61564932000, #    utc_start 1951-12-01 02:00:00 (Sat)
  61575469200, #      utc_end 1952-04-01 01:00:00 (Tue)
  61564928400, #  local_start 1951-12-01 01:00:00 (Sat)
  61575465600, #    local_end 1952-04-01 00:00:00 (Tue)
  -3600,
  1,
  'FNST',
      ],
      [
  61575469200, #    utc_start 1952-04-01 01:00:00 (Tue)
  61596554400, #      utc_end 1952-12-01 02:00:00 (Mon)
  61575462000, #  local_start 1952-03-31 23:00:00 (Mon)
  61596547200, #    local_end 1952-12-01 00:00:00 (Mon)
  -7200,
  0,
  'FNT',
      ],
      [
  61596554400, #    utc_start 1952-12-01 02:00:00 (Mon)
  61604326800, #      utc_end 1953-03-01 01:00:00 (Sun)
  61596550800, #  local_start 1952-12-01 01:00:00 (Mon)
  61604323200, #    local_end 1953-03-01 00:00:00 (Sun)
  -3600,
  1,
  'FNST',
      ],
      [
  61604326800, #    utc_start 1953-03-01 01:00:00 (Sun)
  61944314400, #      utc_end 1963-12-09 02:00:00 (Mon)
  61604319600, #  local_start 1953-02-28 23:00:00 (Sat)
  61944307200, #    local_end 1963-12-09 00:00:00 (Mon)
  -7200,
  0,
  'FNT',
      ],
      [
  61944314400, #    utc_start 1963-12-09 02:00:00 (Mon)
  61951482000, #      utc_end 1964-03-01 01:00:00 (Sun)
  61944310800, #  local_start 1963-12-09 01:00:00 (Mon)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -3600,
  1,
  'FNST',
      ],
      [
  61951482000, #    utc_start 1964-03-01 01:00:00 (Sun)
  61980516000, #      utc_end 1965-01-31 02:00:00 (Sun)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61980508800, #    local_end 1965-01-31 00:00:00 (Sun)
  -7200,
  0,
  'FNT',
      ],
      [
  61980516000, #    utc_start 1965-01-31 02:00:00 (Sun)
  61985610000, #      utc_end 1965-03-31 01:00:00 (Wed)
  61980512400, #  local_start 1965-01-31 01:00:00 (Sun)
  61985606400, #    local_end 1965-03-31 00:00:00 (Wed)
  -3600,
  1,
  'FNST',
      ],
      [
  61985610000, #    utc_start 1965-03-31 01:00:00 (Wed)
  62006781600, #      utc_end 1965-12-01 02:00:00 (Wed)
  61985602800, #  local_start 1965-03-30 23:00:00 (Tue)
  62006774400, #    local_end 1965-12-01 00:00:00 (Wed)
  -7200,
  0,
  'FNT',
      ],
      [
  62006781600, #    utc_start 1965-12-01 02:00:00 (Wed)
  62014554000, #      utc_end 1966-03-01 01:00:00 (Tue)
  62006778000, #  local_start 1965-12-01 01:00:00 (Wed)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -3600,
  1,
  'FNST',
      ],
      [
  62014554000, #    utc_start 1966-03-01 01:00:00 (Tue)
  62035725600, #      utc_end 1966-11-01 02:00:00 (Tue)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62035718400, #    local_end 1966-11-01 00:00:00 (Tue)
  -7200,
  0,
  'FNT',
      ],
      [
  62035725600, #    utc_start 1966-11-01 02:00:00 (Tue)
  62046090000, #      utc_end 1967-03-01 01:00:00 (Wed)
  62035722000, #  local_start 1966-11-01 01:00:00 (Tue)
  62046086400, #    local_end 1967-03-01 00:00:00 (Wed)
  -3600,
  1,
  'FNST',
      ],
      [
  62046090000, #    utc_start 1967-03-01 01:00:00 (Wed)
  62067261600, #      utc_end 1967-11-01 02:00:00 (Wed)
  62046082800, #  local_start 1967-02-28 23:00:00 (Tue)
  62067254400, #    local_end 1967-11-01 00:00:00 (Wed)
  -7200,
  0,
  'FNT',
      ],
      [
  62067261600, #    utc_start 1967-11-01 02:00:00 (Wed)
  62077712400, #      utc_end 1968-03-01 01:00:00 (Fri)
  62067258000, #  local_start 1967-11-01 01:00:00 (Wed)
  62077708800, #    local_end 1968-03-01 00:00:00 (Fri)
  -3600,
  1,
  'FNST',
      ],
      [
  62077712400, #    utc_start 1968-03-01 01:00:00 (Fri)
  62635428000, #      utc_end 1985-11-02 02:00:00 (Sat)
  62077705200, #  local_start 1968-02-29 23:00:00 (Thu)
  62635420800, #    local_end 1985-11-02 00:00:00 (Sat)
  -7200,
  0,
  'FNT',
      ],
      [
  62635428000, #    utc_start 1985-11-02 02:00:00 (Sat)
  62646915600, #      utc_end 1986-03-15 01:00:00 (Sat)
  62635424400, #  local_start 1985-11-02 01:00:00 (Sat)
  62646912000, #    local_end 1986-03-15 00:00:00 (Sat)
  -3600,
  1,
  'FNST',
      ],
      [
  62646915600, #    utc_start 1986-03-15 01:00:00 (Sat)
  62666272800, #      utc_end 1986-10-25 02:00:00 (Sat)
  62646908400, #  local_start 1986-03-14 23:00:00 (Fri)
  62666265600, #    local_end 1986-10-25 00:00:00 (Sat)
  -7200,
  0,
  'FNT',
      ],
      [
  62666272800, #    utc_start 1986-10-25 02:00:00 (Sat)
  62675946000, #      utc_end 1987-02-14 01:00:00 (Sat)
  62666269200, #  local_start 1986-10-25 01:00:00 (Sat)
  62675942400, #    local_end 1987-02-14 00:00:00 (Sat)
  -3600,
  1,
  'FNST',
      ],
      [
  62675946000, #    utc_start 1987-02-14 01:00:00 (Sat)
  62697808800, #      utc_end 1987-10-25 02:00:00 (Sun)
  62675938800, #  local_start 1987-02-13 23:00:00 (Fri)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -7200,
  0,
  'FNT',
      ],
      [
  62697808800, #    utc_start 1987-10-25 02:00:00 (Sun)
  62706877200, #      utc_end 1988-02-07 01:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62706873600, #    local_end 1988-02-07 00:00:00 (Sun)
  -3600,
  1,
  'FNST',
      ],
      [
  62706877200, #    utc_start 1988-02-07 01:00:00 (Sun)
  62728653600, #      utc_end 1988-10-16 02:00:00 (Sun)
  62706870000, #  local_start 1988-02-06 23:00:00 (Sat)
  62728646400, #    local_end 1988-10-16 00:00:00 (Sun)
  -7200,
  0,
  'FNT',
      ],
      [
  62728653600, #    utc_start 1988-10-16 02:00:00 (Sun)
  62737722000, #      utc_end 1989-01-29 01:00:00 (Sun)
  62728650000, #  local_start 1988-10-16 01:00:00 (Sun)
  62737718400, #    local_end 1989-01-29 00:00:00 (Sun)
  -3600,
  1,
  'FNST',
      ],
      [
  62737722000, #    utc_start 1989-01-29 01:00:00 (Sun)
  62760103200, #      utc_end 1989-10-15 02:00:00 (Sun)
  62737714800, #  local_start 1989-01-28 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -7200,
  0,
  'FNT',
      ],
      [
  62760103200, #    utc_start 1989-10-15 02:00:00 (Sun)
  62770381200, #      utc_end 1990-02-11 01:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62770377600, #    local_end 1990-02-11 00:00:00 (Sun)
  -3600,
  1,
  'FNST',
      ],
      [
  62770381200, #    utc_start 1990-02-11 01:00:00 (Sun)
  62789220000, #      utc_end 1990-09-17 02:00:00 (Mon)
  62770374000, #  local_start 1990-02-10 23:00:00 (Sat)
  62789212800, #    local_end 1990-09-17 00:00:00 (Mon)
  -7200,
  0,
  'FNT',
      ],
      [
  62789220000, #    utc_start 1990-09-17 02:00:00 (Mon)
  63074340000, #      utc_end 1999-09-30 02:00:00 (Thu)
  62789212800, #  local_start 1990-09-17 00:00:00 (Mon)
  63074332800, #    local_end 1999-09-30 00:00:00 (Thu)
  -7200,
  0,
  'FNT',
      ],
      [
  63074340000, #    utc_start 1999-09-30 02:00:00 (Thu)
  63074599200, #      utc_end 1999-10-03 02:00:00 (Sun)
  63074332800, #  local_start 1999-09-30 00:00:00 (Thu)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -7200,
  0,
  'FNT',
      ],
      [
  63074599200, #    utc_start 1999-10-03 02:00:00 (Sun)
  63087296400, #      utc_end 2000-02-27 01:00:00 (Sun)
  63074595600, #  local_start 1999-10-03 01:00:00 (Sun)
  63087292800, #    local_end 2000-02-27 00:00:00 (Sun)
  -3600,
  1,
  'FNST',
      ],
      [
  63087296400, #    utc_start 2000-02-27 01:00:00 (Sun)
  63106653600, #      utc_end 2000-10-08 02:00:00 (Sun)
  63087289200, #  local_start 2000-02-26 23:00:00 (Sat)
  63106646400, #    local_end 2000-10-08 00:00:00 (Sun)
  -7200,
  0,
  'FNT',
      ],
      [
  63106653600, #    utc_start 2000-10-08 02:00:00 (Sun)
  63107254800, #      utc_end 2000-10-15 01:00:00 (Sun)
  63106650000, #  local_start 2000-10-08 01:00:00 (Sun)
  63107251200, #    local_end 2000-10-15 00:00:00 (Sun)
  -3600,
  1,
  'FNST',
      ],
      [
  63107254800, #    utc_start 2000-10-15 01:00:00 (Sun)
  63136029600, #      utc_end 2001-09-13 02:00:00 (Thu)
  63107247600, #  local_start 2000-10-14 23:00:00 (Sat)
  63136022400, #    local_end 2001-09-13 00:00:00 (Thu)
  -7200,
  0,
  'FNT',
      ],
      [
  63136029600, #    utc_start 2001-09-13 02:00:00 (Thu)
  63138708000, #      utc_end 2001-10-14 02:00:00 (Sun)
  63136022400, #  local_start 2001-09-13 00:00:00 (Thu)
  63138700800, #    local_end 2001-10-14 00:00:00 (Sun)
  -7200,
  0,
  'FNT',
      ],
      [
  63138708000, #    utc_start 2001-10-14 02:00:00 (Sun)
  63149590800, #      utc_end 2002-02-17 01:00:00 (Sun)
  63138704400, #  local_start 2001-10-14 01:00:00 (Sun)
  63149587200, #    local_end 2002-02-17 00:00:00 (Sun)
  -3600,
  1,
  'FNST',
      ],
      [
  63149590800, #    utc_start 2002-02-17 01:00:00 (Sun)
  63169120800, #      utc_end 2002-10-01 02:00:00 (Tue)
  63149583600, #  local_start 2002-02-16 23:00:00 (Sat)
  63169113600, #    local_end 2002-10-01 00:00:00 (Tue)
  -7200,
  0,
  'FNT',
      ],
      [
  63169120800, #    utc_start 2002-10-01 02:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  63169113600, #  local_start 2002-10-01 00:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  -7200,
  0,
  'FNT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {19}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_NORONHA

    $main::fatpacked{"DateTime/TimeZone/America/North_Dakota/Beulah.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_NORTH_DAKOTA_BEULAH';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::North_Dakota::Beulah;
  $DateTime::TimeZone::America::North_Dakota::Beulah::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::North_Dakota::Beulah::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418039600, #      utc_end 1883-11-18 19:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418015173, #    local_end 1883-11-18 12:12:53 (Sun)
  -24427,
  0,
  'LMT',
      ],
      [
  59418039600, #    utc_start 1883-11-18 19:00:00 (Sun)
  60502410000, #      utc_end 1918-03-31 09:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60502410000, #    utc_start 1918-03-31 09:00:00 (Sun)
  60520550400, #      utc_end 1918-10-27 08:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60520550400, #    utc_start 1918-10-27 08:00:00 (Sun)
  60533859600, #      utc_end 1919-03-30 09:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60533859600, #    utc_start 1919-03-30 09:00:00 (Sun)
  60552000000, #      utc_end 1919-10-26 08:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60552000000, #    utc_start 1919-10-26 08:00:00 (Sun)
  61255472400, #      utc_end 1942-02-09 09:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -25200,
  0,
  'MST',
      ],
      [
  61255472400, #    utc_start 1942-02-09 09:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366266000, #    local_end 1945-08-14 17:00:00 (Tue)
  -21600,
  1,
  'MWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370294400, #      utc_end 1945-09-30 08:00:00 (Sun)
  61366266000, #  local_start 1945-08-14 17:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MPT',
      ],
      [
  61370294400, #    utc_start 1945-09-30 08:00:00 (Sun)
  62051302800, #      utc_end 1967-04-30 09:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62051302800, #    utc_start 1967-04-30 09:00:00 (Sun)
  62067024000, #      utc_end 1967-10-29 08:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62067024000, #    utc_start 1967-10-29 08:00:00 (Sun)
  62082752400, #      utc_end 1968-04-28 09:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62082752400, #    utc_start 1968-04-28 09:00:00 (Sun)
  62098473600, #      utc_end 1968-10-27 08:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62098473600, #    utc_start 1968-10-27 08:00:00 (Sun)
  62114202000, #      utc_end 1969-04-27 09:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62114202000, #    utc_start 1969-04-27 09:00:00 (Sun)
  62129923200, #      utc_end 1969-10-26 08:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62129923200, #    utc_start 1969-10-26 08:00:00 (Sun)
  62145651600, #      utc_end 1970-04-26 09:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62145651600, #    utc_start 1970-04-26 09:00:00 (Sun)
  62161372800, #      utc_end 1970-10-25 08:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62161372800, #    utc_start 1970-10-25 08:00:00 (Sun)
  62177101200, #      utc_end 1971-04-25 09:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62177101200, #    utc_start 1971-04-25 09:00:00 (Sun)
  62193427200, #      utc_end 1971-10-31 08:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62193427200, #    utc_start 1971-10-31 08:00:00 (Sun)
  62209155600, #      utc_end 1972-04-30 09:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62209155600, #    utc_start 1972-04-30 09:00:00 (Sun)
  62224876800, #      utc_end 1972-10-29 08:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62224876800, #    utc_start 1972-10-29 08:00:00 (Sun)
  62240605200, #      utc_end 1973-04-29 09:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62240605200, #    utc_start 1973-04-29 09:00:00 (Sun)
  62256326400, #      utc_end 1973-10-28 08:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62256326400, #    utc_start 1973-10-28 08:00:00 (Sun)
  62262378000, #      utc_end 1974-01-06 09:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62262378000, #    utc_start 1974-01-06 09:00:00 (Sun)
  62287776000, #      utc_end 1974-10-27 08:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62287776000, #    utc_start 1974-10-27 08:00:00 (Sun)
  62298061200, #      utc_end 1975-02-23 09:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62298061200, #    utc_start 1975-02-23 09:00:00 (Sun)
  62319225600, #      utc_end 1975-10-26 08:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62319225600, #    utc_start 1975-10-26 08:00:00 (Sun)
  62334954000, #      utc_end 1976-04-25 09:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62334954000, #    utc_start 1976-04-25 09:00:00 (Sun)
  62351280000, #      utc_end 1976-10-31 08:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62351280000, #    utc_start 1976-10-31 08:00:00 (Sun)
  62366403600, #      utc_end 1977-04-24 09:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62366403600, #    utc_start 1977-04-24 09:00:00 (Sun)
  62382729600, #      utc_end 1977-10-30 08:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62382729600, #    utc_start 1977-10-30 08:00:00 (Sun)
  62398458000, #      utc_end 1978-04-30 09:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62398458000, #    utc_start 1978-04-30 09:00:00 (Sun)
  62414179200, #      utc_end 1978-10-29 08:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62414179200, #    utc_start 1978-10-29 08:00:00 (Sun)
  62429907600, #      utc_end 1979-04-29 09:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62429907600, #    utc_start 1979-04-29 09:00:00 (Sun)
  62445628800, #      utc_end 1979-10-28 08:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62445628800, #    utc_start 1979-10-28 08:00:00 (Sun)
  62461357200, #      utc_end 1980-04-27 09:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62461357200, #    utc_start 1980-04-27 09:00:00 (Sun)
  62477078400, #      utc_end 1980-10-26 08:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62477078400, #    utc_start 1980-10-26 08:00:00 (Sun)
  62492806800, #      utc_end 1981-04-26 09:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62492806800, #    utc_start 1981-04-26 09:00:00 (Sun)
  62508528000, #      utc_end 1981-10-25 08:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62508528000, #    utc_start 1981-10-25 08:00:00 (Sun)
  62524256400, #      utc_end 1982-04-25 09:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62524256400, #    utc_start 1982-04-25 09:00:00 (Sun)
  62540582400, #      utc_end 1982-10-31 08:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62540582400, #    utc_start 1982-10-31 08:00:00 (Sun)
  62555706000, #      utc_end 1983-04-24 09:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62555706000, #    utc_start 1983-04-24 09:00:00 (Sun)
  62572032000, #      utc_end 1983-10-30 08:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62572032000, #    utc_start 1983-10-30 08:00:00 (Sun)
  62587760400, #      utc_end 1984-04-29 09:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62587760400, #    utc_start 1984-04-29 09:00:00 (Sun)
  62603481600, #      utc_end 1984-10-28 08:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62603481600, #    utc_start 1984-10-28 08:00:00 (Sun)
  62619210000, #      utc_end 1985-04-28 09:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62619210000, #    utc_start 1985-04-28 09:00:00 (Sun)
  62634931200, #      utc_end 1985-10-27 08:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62634931200, #    utc_start 1985-10-27 08:00:00 (Sun)
  62650659600, #      utc_end 1986-04-27 09:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62650659600, #    utc_start 1986-04-27 09:00:00 (Sun)
  62666380800, #      utc_end 1986-10-26 08:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62666380800, #    utc_start 1986-10-26 08:00:00 (Sun)
  62680294800, #      utc_end 1987-04-05 09:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62680294800, #    utc_start 1987-04-05 09:00:00 (Sun)
  62697830400, #      utc_end 1987-10-25 08:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62697830400, #    utc_start 1987-10-25 08:00:00 (Sun)
  62711744400, #      utc_end 1988-04-03 09:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62711744400, #    utc_start 1988-04-03 09:00:00 (Sun)
  62729884800, #      utc_end 1988-10-30 08:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62729884800, #    utc_start 1988-10-30 08:00:00 (Sun)
  62743194000, #      utc_end 1989-04-02 09:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62743194000, #    utc_start 1989-04-02 09:00:00 (Sun)
  62761334400, #      utc_end 1989-10-29 08:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62761334400, #    utc_start 1989-10-29 08:00:00 (Sun)
  62774643600, #      utc_end 1990-04-01 09:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62774643600, #    utc_start 1990-04-01 09:00:00 (Sun)
  62792784000, #      utc_end 1990-10-28 08:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62792784000, #    utc_start 1990-10-28 08:00:00 (Sun)
  62806698000, #      utc_end 1991-04-07 09:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62806698000, #    utc_start 1991-04-07 09:00:00 (Sun)
  62824233600, #      utc_end 1991-10-27 08:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62824233600, #    utc_start 1991-10-27 08:00:00 (Sun)
  62838147600, #      utc_end 1992-04-05 09:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62838147600, #    utc_start 1992-04-05 09:00:00 (Sun)
  62855683200, #      utc_end 1992-10-25 08:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62855683200, #    utc_start 1992-10-25 08:00:00 (Sun)
  62869597200, #      utc_end 1993-04-04 09:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62869597200, #    utc_start 1993-04-04 09:00:00 (Sun)
  62887737600, #      utc_end 1993-10-31 08:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62887737600, #    utc_start 1993-10-31 08:00:00 (Sun)
  62901046800, #      utc_end 1994-04-03 09:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62901046800, #    utc_start 1994-04-03 09:00:00 (Sun)
  62919187200, #      utc_end 1994-10-30 08:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62919187200, #    utc_start 1994-10-30 08:00:00 (Sun)
  62932496400, #      utc_end 1995-04-02 09:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62932496400, #    utc_start 1995-04-02 09:00:00 (Sun)
  62950636800, #      utc_end 1995-10-29 08:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62950636800, #    utc_start 1995-10-29 08:00:00 (Sun)
  62964550800, #      utc_end 1996-04-07 09:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62964550800, #    utc_start 1996-04-07 09:00:00 (Sun)
  62982086400, #      utc_end 1996-10-27 08:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62982086400, #    utc_start 1996-10-27 08:00:00 (Sun)
  62996000400, #      utc_end 1997-04-06 09:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62996000400, #    utc_start 1997-04-06 09:00:00 (Sun)
  63013536000, #      utc_end 1997-10-26 08:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63013536000, #    utc_start 1997-10-26 08:00:00 (Sun)
  63027450000, #      utc_end 1998-04-05 09:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63027450000, #    utc_start 1998-04-05 09:00:00 (Sun)
  63044985600, #      utc_end 1998-10-25 08:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63044985600, #    utc_start 1998-10-25 08:00:00 (Sun)
  63058899600, #      utc_end 1999-04-04 09:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63058899600, #    utc_start 1999-04-04 09:00:00 (Sun)
  63077040000, #      utc_end 1999-10-31 08:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63077040000, #    utc_start 1999-10-31 08:00:00 (Sun)
  63090349200, #      utc_end 2000-04-02 09:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63090349200, #    utc_start 2000-04-02 09:00:00 (Sun)
  63108489600, #      utc_end 2000-10-29 08:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63108489600, #    utc_start 2000-10-29 08:00:00 (Sun)
  63121798800, #      utc_end 2001-04-01 09:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63121798800, #    utc_start 2001-04-01 09:00:00 (Sun)
  63139939200, #      utc_end 2001-10-28 08:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63139939200, #    utc_start 2001-10-28 08:00:00 (Sun)
  63153853200, #      utc_end 2002-04-07 09:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63153853200, #    utc_start 2002-04-07 09:00:00 (Sun)
  63171388800, #      utc_end 2002-10-27 08:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63171388800, #    utc_start 2002-10-27 08:00:00 (Sun)
  63185302800, #      utc_end 2003-04-06 09:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63185302800, #    utc_start 2003-04-06 09:00:00 (Sun)
  63202838400, #      utc_end 2003-10-26 08:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63202838400, #    utc_start 2003-10-26 08:00:00 (Sun)
  63216752400, #      utc_end 2004-04-04 09:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63216752400, #    utc_start 2004-04-04 09:00:00 (Sun)
  63234892800, #      utc_end 2004-10-31 08:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63234892800, #    utc_start 2004-10-31 08:00:00 (Sun)
  63248202000, #      utc_end 2005-04-03 09:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63248202000, #    utc_start 2005-04-03 09:00:00 (Sun)
  63266342400, #      utc_end 2005-10-30 08:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63266342400, #    utc_start 2005-10-30 08:00:00 (Sun)
  63279651600, #      utc_end 2006-04-02 09:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63279651600, #    utc_start 2006-04-02 09:00:00 (Sun)
  63297792000, #      utc_end 2006-10-29 08:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63297792000, #    utc_start 2006-10-29 08:00:00 (Sun)
  63309286800, #      utc_end 2007-03-11 09:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63309286800, #    utc_start 2007-03-11 09:00:00 (Sun)
  63329846400, #      utc_end 2007-11-04 08:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63329846400, #    utc_start 2007-11-04 08:00:00 (Sun)
  63340736400, #      utc_end 2008-03-09 09:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63340736400, #    utc_start 2008-03-09 09:00:00 (Sun)
  63361296000, #      utc_end 2008-11-02 08:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63361296000, #    utc_start 2008-11-02 08:00:00 (Sun)
  63372186000, #      utc_end 2009-03-08 09:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63372186000, #    utc_start 2009-03-08 09:00:00 (Sun)
  63392745600, #      utc_end 2009-11-01 08:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63392745600, #    utc_start 2009-11-01 08:00:00 (Sun)
  63404240400, #      utc_end 2010-03-14 09:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63404240400, #    utc_start 2010-03-14 09:00:00 (Sun)
  63424800000, #      utc_end 2010-11-07 08:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63424800000, #    utc_start 2010-11-07 08:00:00 (Sun)
  63435686400, #      utc_end 2011-03-13 08:00:00 (Sun)
  63424778400, #  local_start 2010-11-07 02:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63435686400, #    utc_start 2011-03-13 08:00:00 (Sun)
  63456246000, #      utc_end 2011-11-06 07:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63456246000, #    utc_start 2011-11-06 07:00:00 (Sun)
  63467136000, #      utc_end 2012-03-11 08:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63467136000, #    utc_start 2012-03-11 08:00:00 (Sun)
  63487695600, #      utc_end 2012-11-04 07:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487695600, #    utc_start 2012-11-04 07:00:00 (Sun)
  63498585600, #      utc_end 2013-03-10 08:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63498585600, #    utc_start 2013-03-10 08:00:00 (Sun)
  63519145200, #      utc_end 2013-11-03 07:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63519145200, #    utc_start 2013-11-03 07:00:00 (Sun)
  63530035200, #      utc_end 2014-03-09 08:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63530035200, #    utc_start 2014-03-09 08:00:00 (Sun)
  63550594800, #      utc_end 2014-11-02 07:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63550594800, #    utc_start 2014-11-02 07:00:00 (Sun)
  63561484800, #      utc_end 2015-03-08 08:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63561484800, #    utc_start 2015-03-08 08:00:00 (Sun)
  63582044400, #      utc_end 2015-11-01 07:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63582044400, #    utc_start 2015-11-01 07:00:00 (Sun)
  63593539200, #      utc_end 2016-03-13 08:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63593539200, #    utc_start 2016-03-13 08:00:00 (Sun)
  63614098800, #      utc_end 2016-11-06 07:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63614098800, #    utc_start 2016-11-06 07:00:00 (Sun)
  63624988800, #      utc_end 2017-03-12 08:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63624988800, #    utc_start 2017-03-12 08:00:00 (Sun)
  63645548400, #      utc_end 2017-11-05 07:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63645548400, #    utc_start 2017-11-05 07:00:00 (Sun)
  63656438400, #      utc_end 2018-03-11 08:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63656438400, #    utc_start 2018-03-11 08:00:00 (Sun)
  63676998000, #      utc_end 2018-11-04 07:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676998000, #    utc_start 2018-11-04 07:00:00 (Sun)
  63687888000, #      utc_end 2019-03-10 08:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63687888000, #    utc_start 2019-03-10 08:00:00 (Sun)
  63708447600, #      utc_end 2019-11-03 07:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63708447600, #    utc_start 2019-11-03 07:00:00 (Sun)
  63719337600, #      utc_end 2020-03-08 08:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63719337600, #    utc_start 2020-03-08 08:00:00 (Sun)
  63739897200, #      utc_end 2020-11-01 07:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739897200, #    utc_start 2020-11-01 07:00:00 (Sun)
  63751392000, #      utc_end 2021-03-14 08:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63751392000, #    utc_start 2021-03-14 08:00:00 (Sun)
  63771951600, #      utc_end 2021-11-07 07:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771951600, #    utc_start 2021-11-07 07:00:00 (Sun)
  63782841600, #      utc_end 2022-03-13 08:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63782841600, #    utc_start 2022-03-13 08:00:00 (Sun)
  63803401200, #      utc_end 2022-11-06 07:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63803401200, #    utc_start 2022-11-06 07:00:00 (Sun)
  63814291200, #      utc_end 2023-03-12 08:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63814291200, #    utc_start 2023-03-12 08:00:00 (Sun)
  63834850800, #      utc_end 2023-11-05 07:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834850800, #    utc_start 2023-11-05 07:00:00 (Sun)
  63845740800, #      utc_end 2024-03-10 08:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63845740800, #    utc_start 2024-03-10 08:00:00 (Sun)
  63866300400, #      utc_end 2024-11-03 07:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63866300400, #    utc_start 2024-11-03 07:00:00 (Sun)
  63877190400, #      utc_end 2025-03-09 08:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63877190400, #    utc_start 2025-03-09 08:00:00 (Sun)
  63897750000, #      utc_end 2025-11-02 07:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897750000, #    utc_start 2025-11-02 07:00:00 (Sun)
  63908640000, #      utc_end 2026-03-08 08:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63908640000, #    utc_start 2026-03-08 08:00:00 (Sun)
  63929199600, #      utc_end 2026-11-01 07:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63929199600, #    utc_start 2026-11-01 07:00:00 (Sun)
  63940694400, #      utc_end 2027-03-14 08:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63940694400, #    utc_start 2027-03-14 08:00:00 (Sun)
  63961254000, #      utc_end 2027-11-07 07:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {65}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 734083,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 734083,
      'utc_rd_secs' => 7200,
      'utc_year' => 2011
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 734083,
      'local_rd_secs' => 28800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 734083,
      'utc_rd_secs' => 28800,
      'utc_year' => 2011
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_NORTH_DAKOTA_BEULAH

    $main::fatpacked{"DateTime/TimeZone/America/North_Dakota/Center.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_NORTH_DAKOTA_CENTER';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::North_Dakota::Center;
  $DateTime::TimeZone::America::North_Dakota::Center::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::North_Dakota::Center::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418039600, #      utc_end 1883-11-18 19:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418015288, #    local_end 1883-11-18 12:14:48 (Sun)
  -24312,
  0,
  'LMT',
      ],
      [
  59418039600, #    utc_start 1883-11-18 19:00:00 (Sun)
  60502410000, #      utc_end 1918-03-31 09:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60502410000, #    utc_start 1918-03-31 09:00:00 (Sun)
  60520550400, #      utc_end 1918-10-27 08:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60520550400, #    utc_start 1918-10-27 08:00:00 (Sun)
  60533859600, #      utc_end 1919-03-30 09:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60533859600, #    utc_start 1919-03-30 09:00:00 (Sun)
  60552000000, #      utc_end 1919-10-26 08:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60552000000, #    utc_start 1919-10-26 08:00:00 (Sun)
  61255472400, #      utc_end 1942-02-09 09:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -25200,
  0,
  'MST',
      ],
      [
  61255472400, #    utc_start 1942-02-09 09:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366266000, #    local_end 1945-08-14 17:00:00 (Tue)
  -21600,
  1,
  'MWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370294400, #      utc_end 1945-09-30 08:00:00 (Sun)
  61366266000, #  local_start 1945-08-14 17:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MPT',
      ],
      [
  61370294400, #    utc_start 1945-09-30 08:00:00 (Sun)
  62051302800, #      utc_end 1967-04-30 09:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62051302800, #    utc_start 1967-04-30 09:00:00 (Sun)
  62067024000, #      utc_end 1967-10-29 08:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62067024000, #    utc_start 1967-10-29 08:00:00 (Sun)
  62082752400, #      utc_end 1968-04-28 09:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62082752400, #    utc_start 1968-04-28 09:00:00 (Sun)
  62098473600, #      utc_end 1968-10-27 08:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62098473600, #    utc_start 1968-10-27 08:00:00 (Sun)
  62114202000, #      utc_end 1969-04-27 09:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62114202000, #    utc_start 1969-04-27 09:00:00 (Sun)
  62129923200, #      utc_end 1969-10-26 08:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62129923200, #    utc_start 1969-10-26 08:00:00 (Sun)
  62145651600, #      utc_end 1970-04-26 09:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62145651600, #    utc_start 1970-04-26 09:00:00 (Sun)
  62161372800, #      utc_end 1970-10-25 08:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62161372800, #    utc_start 1970-10-25 08:00:00 (Sun)
  62177101200, #      utc_end 1971-04-25 09:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62177101200, #    utc_start 1971-04-25 09:00:00 (Sun)
  62193427200, #      utc_end 1971-10-31 08:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62193427200, #    utc_start 1971-10-31 08:00:00 (Sun)
  62209155600, #      utc_end 1972-04-30 09:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62209155600, #    utc_start 1972-04-30 09:00:00 (Sun)
  62224876800, #      utc_end 1972-10-29 08:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62224876800, #    utc_start 1972-10-29 08:00:00 (Sun)
  62240605200, #      utc_end 1973-04-29 09:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62240605200, #    utc_start 1973-04-29 09:00:00 (Sun)
  62256326400, #      utc_end 1973-10-28 08:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62256326400, #    utc_start 1973-10-28 08:00:00 (Sun)
  62262378000, #      utc_end 1974-01-06 09:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62262378000, #    utc_start 1974-01-06 09:00:00 (Sun)
  62287776000, #      utc_end 1974-10-27 08:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62287776000, #    utc_start 1974-10-27 08:00:00 (Sun)
  62298061200, #      utc_end 1975-02-23 09:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62298061200, #    utc_start 1975-02-23 09:00:00 (Sun)
  62319225600, #      utc_end 1975-10-26 08:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62319225600, #    utc_start 1975-10-26 08:00:00 (Sun)
  62334954000, #      utc_end 1976-04-25 09:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62334954000, #    utc_start 1976-04-25 09:00:00 (Sun)
  62351280000, #      utc_end 1976-10-31 08:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62351280000, #    utc_start 1976-10-31 08:00:00 (Sun)
  62366403600, #      utc_end 1977-04-24 09:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62366403600, #    utc_start 1977-04-24 09:00:00 (Sun)
  62382729600, #      utc_end 1977-10-30 08:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62382729600, #    utc_start 1977-10-30 08:00:00 (Sun)
  62398458000, #      utc_end 1978-04-30 09:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62398458000, #    utc_start 1978-04-30 09:00:00 (Sun)
  62414179200, #      utc_end 1978-10-29 08:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62414179200, #    utc_start 1978-10-29 08:00:00 (Sun)
  62429907600, #      utc_end 1979-04-29 09:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62429907600, #    utc_start 1979-04-29 09:00:00 (Sun)
  62445628800, #      utc_end 1979-10-28 08:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62445628800, #    utc_start 1979-10-28 08:00:00 (Sun)
  62461357200, #      utc_end 1980-04-27 09:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62461357200, #    utc_start 1980-04-27 09:00:00 (Sun)
  62477078400, #      utc_end 1980-10-26 08:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62477078400, #    utc_start 1980-10-26 08:00:00 (Sun)
  62492806800, #      utc_end 1981-04-26 09:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62492806800, #    utc_start 1981-04-26 09:00:00 (Sun)
  62508528000, #      utc_end 1981-10-25 08:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62508528000, #    utc_start 1981-10-25 08:00:00 (Sun)
  62524256400, #      utc_end 1982-04-25 09:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62524256400, #    utc_start 1982-04-25 09:00:00 (Sun)
  62540582400, #      utc_end 1982-10-31 08:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62540582400, #    utc_start 1982-10-31 08:00:00 (Sun)
  62555706000, #      utc_end 1983-04-24 09:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62555706000, #    utc_start 1983-04-24 09:00:00 (Sun)
  62572032000, #      utc_end 1983-10-30 08:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62572032000, #    utc_start 1983-10-30 08:00:00 (Sun)
  62587760400, #      utc_end 1984-04-29 09:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62587760400, #    utc_start 1984-04-29 09:00:00 (Sun)
  62603481600, #      utc_end 1984-10-28 08:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62603481600, #    utc_start 1984-10-28 08:00:00 (Sun)
  62619210000, #      utc_end 1985-04-28 09:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62619210000, #    utc_start 1985-04-28 09:00:00 (Sun)
  62634931200, #      utc_end 1985-10-27 08:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62634931200, #    utc_start 1985-10-27 08:00:00 (Sun)
  62650659600, #      utc_end 1986-04-27 09:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62650659600, #    utc_start 1986-04-27 09:00:00 (Sun)
  62666380800, #      utc_end 1986-10-26 08:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62666380800, #    utc_start 1986-10-26 08:00:00 (Sun)
  62680294800, #      utc_end 1987-04-05 09:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62680294800, #    utc_start 1987-04-05 09:00:00 (Sun)
  62697830400, #      utc_end 1987-10-25 08:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62697830400, #    utc_start 1987-10-25 08:00:00 (Sun)
  62711744400, #      utc_end 1988-04-03 09:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62711744400, #    utc_start 1988-04-03 09:00:00 (Sun)
  62729884800, #      utc_end 1988-10-30 08:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62729884800, #    utc_start 1988-10-30 08:00:00 (Sun)
  62743194000, #      utc_end 1989-04-02 09:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62743194000, #    utc_start 1989-04-02 09:00:00 (Sun)
  62761334400, #      utc_end 1989-10-29 08:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62761334400, #    utc_start 1989-10-29 08:00:00 (Sun)
  62774643600, #      utc_end 1990-04-01 09:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62774643600, #    utc_start 1990-04-01 09:00:00 (Sun)
  62792784000, #      utc_end 1990-10-28 08:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62792784000, #    utc_start 1990-10-28 08:00:00 (Sun)
  62806698000, #      utc_end 1991-04-07 09:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62806698000, #    utc_start 1991-04-07 09:00:00 (Sun)
  62824233600, #      utc_end 1991-10-27 08:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62824233600, #    utc_start 1991-10-27 08:00:00 (Sun)
  62838147600, #      utc_end 1992-04-05 09:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62838147600, #    utc_start 1992-04-05 09:00:00 (Sun)
  62855683200, #      utc_end 1992-10-25 08:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62855683200, #    utc_start 1992-10-25 08:00:00 (Sun)
  62869593600, #      utc_end 1993-04-04 08:00:00 (Sun)
  62855661600, #  local_start 1992-10-25 02:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62869593600, #    utc_start 1993-04-04 08:00:00 (Sun)
  62887734000, #      utc_end 1993-10-31 07:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62887734000, #    utc_start 1993-10-31 07:00:00 (Sun)
  62901043200, #      utc_end 1994-04-03 08:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62901043200, #    utc_start 1994-04-03 08:00:00 (Sun)
  62919183600, #      utc_end 1994-10-30 07:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62919183600, #    utc_start 1994-10-30 07:00:00 (Sun)
  62932492800, #      utc_end 1995-04-02 08:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62932492800, #    utc_start 1995-04-02 08:00:00 (Sun)
  62950633200, #      utc_end 1995-10-29 07:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62950633200, #    utc_start 1995-10-29 07:00:00 (Sun)
  62964547200, #      utc_end 1996-04-07 08:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62964547200, #    utc_start 1996-04-07 08:00:00 (Sun)
  62982082800, #      utc_end 1996-10-27 07:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62982082800, #    utc_start 1996-10-27 07:00:00 (Sun)
  62995996800, #      utc_end 1997-04-06 08:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62995996800, #    utc_start 1997-04-06 08:00:00 (Sun)
  63013532400, #      utc_end 1997-10-26 07:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63013532400, #    utc_start 1997-10-26 07:00:00 (Sun)
  63027446400, #      utc_end 1998-04-05 08:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63027446400, #    utc_start 1998-04-05 08:00:00 (Sun)
  63044982000, #      utc_end 1998-10-25 07:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63044982000, #    utc_start 1998-10-25 07:00:00 (Sun)
  63058896000, #      utc_end 1999-04-04 08:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63058896000, #    utc_start 1999-04-04 08:00:00 (Sun)
  63077036400, #      utc_end 1999-10-31 07:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63077036400, #    utc_start 1999-10-31 07:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108486000, #      utc_end 2000-10-29 07:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108486000, #    utc_start 2000-10-29 07:00:00 (Sun)
  63121795200, #      utc_end 2001-04-01 08:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63121795200, #    utc_start 2001-04-01 08:00:00 (Sun)
  63139935600, #      utc_end 2001-10-28 07:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63139935600, #    utc_start 2001-10-28 07:00:00 (Sun)
  63153849600, #      utc_end 2002-04-07 08:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63153849600, #    utc_start 2002-04-07 08:00:00 (Sun)
  63171385200, #      utc_end 2002-10-27 07:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63171385200, #    utc_start 2002-10-27 07:00:00 (Sun)
  63185299200, #      utc_end 2003-04-06 08:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63185299200, #    utc_start 2003-04-06 08:00:00 (Sun)
  63202834800, #      utc_end 2003-10-26 07:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63202834800, #    utc_start 2003-10-26 07:00:00 (Sun)
  63216748800, #      utc_end 2004-04-04 08:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63216748800, #    utc_start 2004-04-04 08:00:00 (Sun)
  63234889200, #      utc_end 2004-10-31 07:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63234889200, #    utc_start 2004-10-31 07:00:00 (Sun)
  63248198400, #      utc_end 2005-04-03 08:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63248198400, #    utc_start 2005-04-03 08:00:00 (Sun)
  63266338800, #      utc_end 2005-10-30 07:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63266338800, #    utc_start 2005-10-30 07:00:00 (Sun)
  63279648000, #      utc_end 2006-04-02 08:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63279648000, #    utc_start 2006-04-02 08:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63309283200, #      utc_end 2007-03-11 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63309283200, #    utc_start 2007-03-11 08:00:00 (Sun)
  63329842800, #      utc_end 2007-11-04 07:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329842800, #    utc_start 2007-11-04 07:00:00 (Sun)
  63340732800, #      utc_end 2008-03-09 08:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63340732800, #    utc_start 2008-03-09 08:00:00 (Sun)
  63361292400, #      utc_end 2008-11-02 07:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63361292400, #    utc_start 2008-11-02 07:00:00 (Sun)
  63372182400, #      utc_end 2009-03-08 08:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63372182400, #    utc_start 2009-03-08 08:00:00 (Sun)
  63392742000, #      utc_end 2009-11-01 07:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63392742000, #    utc_start 2009-11-01 07:00:00 (Sun)
  63404236800, #      utc_end 2010-03-14 08:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63404236800, #    utc_start 2010-03-14 08:00:00 (Sun)
  63424796400, #      utc_end 2010-11-07 07:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424796400, #    utc_start 2010-11-07 07:00:00 (Sun)
  63435686400, #      utc_end 2011-03-13 08:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63435686400, #    utc_start 2011-03-13 08:00:00 (Sun)
  63456246000, #      utc_end 2011-11-06 07:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63456246000, #    utc_start 2011-11-06 07:00:00 (Sun)
  63467136000, #      utc_end 2012-03-11 08:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63467136000, #    utc_start 2012-03-11 08:00:00 (Sun)
  63487695600, #      utc_end 2012-11-04 07:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487695600, #    utc_start 2012-11-04 07:00:00 (Sun)
  63498585600, #      utc_end 2013-03-10 08:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63498585600, #    utc_start 2013-03-10 08:00:00 (Sun)
  63519145200, #      utc_end 2013-11-03 07:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63519145200, #    utc_start 2013-11-03 07:00:00 (Sun)
  63530035200, #      utc_end 2014-03-09 08:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63530035200, #    utc_start 2014-03-09 08:00:00 (Sun)
  63550594800, #      utc_end 2014-11-02 07:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63550594800, #    utc_start 2014-11-02 07:00:00 (Sun)
  63561484800, #      utc_end 2015-03-08 08:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63561484800, #    utc_start 2015-03-08 08:00:00 (Sun)
  63582044400, #      utc_end 2015-11-01 07:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63582044400, #    utc_start 2015-11-01 07:00:00 (Sun)
  63593539200, #      utc_end 2016-03-13 08:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63593539200, #    utc_start 2016-03-13 08:00:00 (Sun)
  63614098800, #      utc_end 2016-11-06 07:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63614098800, #    utc_start 2016-11-06 07:00:00 (Sun)
  63624988800, #      utc_end 2017-03-12 08:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63624988800, #    utc_start 2017-03-12 08:00:00 (Sun)
  63645548400, #      utc_end 2017-11-05 07:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63645548400, #    utc_start 2017-11-05 07:00:00 (Sun)
  63656438400, #      utc_end 2018-03-11 08:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63656438400, #    utc_start 2018-03-11 08:00:00 (Sun)
  63676998000, #      utc_end 2018-11-04 07:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676998000, #    utc_start 2018-11-04 07:00:00 (Sun)
  63687888000, #      utc_end 2019-03-10 08:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63687888000, #    utc_start 2019-03-10 08:00:00 (Sun)
  63708447600, #      utc_end 2019-11-03 07:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63708447600, #    utc_start 2019-11-03 07:00:00 (Sun)
  63719337600, #      utc_end 2020-03-08 08:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63719337600, #    utc_start 2020-03-08 08:00:00 (Sun)
  63739897200, #      utc_end 2020-11-01 07:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739897200, #    utc_start 2020-11-01 07:00:00 (Sun)
  63751392000, #      utc_end 2021-03-14 08:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63751392000, #    utc_start 2021-03-14 08:00:00 (Sun)
  63771951600, #      utc_end 2021-11-07 07:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771951600, #    utc_start 2021-11-07 07:00:00 (Sun)
  63782841600, #      utc_end 2022-03-13 08:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63782841600, #    utc_start 2022-03-13 08:00:00 (Sun)
  63803401200, #      utc_end 2022-11-06 07:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63803401200, #    utc_start 2022-11-06 07:00:00 (Sun)
  63814291200, #      utc_end 2023-03-12 08:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63814291200, #    utc_start 2023-03-12 08:00:00 (Sun)
  63834850800, #      utc_end 2023-11-05 07:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834850800, #    utc_start 2023-11-05 07:00:00 (Sun)
  63845740800, #      utc_end 2024-03-10 08:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63845740800, #    utc_start 2024-03-10 08:00:00 (Sun)
  63866300400, #      utc_end 2024-11-03 07:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63866300400, #    utc_start 2024-11-03 07:00:00 (Sun)
  63877190400, #      utc_end 2025-03-09 08:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63877190400, #    utc_start 2025-03-09 08:00:00 (Sun)
  63897750000, #      utc_end 2025-11-02 07:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897750000, #    utc_start 2025-11-02 07:00:00 (Sun)
  63908640000, #      utc_end 2026-03-08 08:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63908640000, #    utc_start 2026-03-08 08:00:00 (Sun)
  63929199600, #      utc_end 2026-11-01 07:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63929199600, #    utc_start 2026-11-01 07:00:00 (Sun)
  63940694400, #      utc_end 2027-03-14 08:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63940694400, #    utc_start 2027-03-14 08:00:00 (Sun)
  63961254000, #      utc_end 2027-11-07 07:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {65}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 727496,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 727496,
      'utc_rd_secs' => 7200,
      'utc_year' => 1993
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 727496,
      'local_rd_secs' => 28800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 727496,
      'utc_rd_secs' => 28800,
      'utc_year' => 1993
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_NORTH_DAKOTA_CENTER

    $main::fatpacked{"DateTime/TimeZone/America/North_Dakota/New_Salem.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_NORTH_DAKOTA_NEW_SALEM';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::North_Dakota::New_Salem;
  $DateTime::TimeZone::America::North_Dakota::New_Salem::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::North_Dakota::New_Salem::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418039600, #      utc_end 1883-11-18 19:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418015261, #    local_end 1883-11-18 12:14:21 (Sun)
  -24339,
  0,
  'LMT',
      ],
      [
  59418039600, #    utc_start 1883-11-18 19:00:00 (Sun)
  60502410000, #      utc_end 1918-03-31 09:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60502410000, #    utc_start 1918-03-31 09:00:00 (Sun)
  60520550400, #      utc_end 1918-10-27 08:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60520550400, #    utc_start 1918-10-27 08:00:00 (Sun)
  60533859600, #      utc_end 1919-03-30 09:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60533859600, #    utc_start 1919-03-30 09:00:00 (Sun)
  60552000000, #      utc_end 1919-10-26 08:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60552000000, #    utc_start 1919-10-26 08:00:00 (Sun)
  61255472400, #      utc_end 1942-02-09 09:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -25200,
  0,
  'MST',
      ],
      [
  61255472400, #    utc_start 1942-02-09 09:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366266000, #    local_end 1945-08-14 17:00:00 (Tue)
  -21600,
  1,
  'MWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370294400, #      utc_end 1945-09-30 08:00:00 (Sun)
  61366266000, #  local_start 1945-08-14 17:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MPT',
      ],
      [
  61370294400, #    utc_start 1945-09-30 08:00:00 (Sun)
  62051302800, #      utc_end 1967-04-30 09:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62051302800, #    utc_start 1967-04-30 09:00:00 (Sun)
  62067024000, #      utc_end 1967-10-29 08:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62067024000, #    utc_start 1967-10-29 08:00:00 (Sun)
  62082752400, #      utc_end 1968-04-28 09:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62082752400, #    utc_start 1968-04-28 09:00:00 (Sun)
  62098473600, #      utc_end 1968-10-27 08:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62098473600, #    utc_start 1968-10-27 08:00:00 (Sun)
  62114202000, #      utc_end 1969-04-27 09:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62114202000, #    utc_start 1969-04-27 09:00:00 (Sun)
  62129923200, #      utc_end 1969-10-26 08:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62129923200, #    utc_start 1969-10-26 08:00:00 (Sun)
  62145651600, #      utc_end 1970-04-26 09:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62145651600, #    utc_start 1970-04-26 09:00:00 (Sun)
  62161372800, #      utc_end 1970-10-25 08:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62161372800, #    utc_start 1970-10-25 08:00:00 (Sun)
  62177101200, #      utc_end 1971-04-25 09:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62177101200, #    utc_start 1971-04-25 09:00:00 (Sun)
  62193427200, #      utc_end 1971-10-31 08:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62193427200, #    utc_start 1971-10-31 08:00:00 (Sun)
  62209155600, #      utc_end 1972-04-30 09:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62209155600, #    utc_start 1972-04-30 09:00:00 (Sun)
  62224876800, #      utc_end 1972-10-29 08:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62224876800, #    utc_start 1972-10-29 08:00:00 (Sun)
  62240605200, #      utc_end 1973-04-29 09:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62240605200, #    utc_start 1973-04-29 09:00:00 (Sun)
  62256326400, #      utc_end 1973-10-28 08:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62256326400, #    utc_start 1973-10-28 08:00:00 (Sun)
  62262378000, #      utc_end 1974-01-06 09:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62262378000, #    utc_start 1974-01-06 09:00:00 (Sun)
  62287776000, #      utc_end 1974-10-27 08:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62287776000, #    utc_start 1974-10-27 08:00:00 (Sun)
  62298061200, #      utc_end 1975-02-23 09:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62298061200, #    utc_start 1975-02-23 09:00:00 (Sun)
  62319225600, #      utc_end 1975-10-26 08:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62319225600, #    utc_start 1975-10-26 08:00:00 (Sun)
  62334954000, #      utc_end 1976-04-25 09:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62334954000, #    utc_start 1976-04-25 09:00:00 (Sun)
  62351280000, #      utc_end 1976-10-31 08:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62351280000, #    utc_start 1976-10-31 08:00:00 (Sun)
  62366403600, #      utc_end 1977-04-24 09:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62366403600, #    utc_start 1977-04-24 09:00:00 (Sun)
  62382729600, #      utc_end 1977-10-30 08:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62382729600, #    utc_start 1977-10-30 08:00:00 (Sun)
  62398458000, #      utc_end 1978-04-30 09:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62398458000, #    utc_start 1978-04-30 09:00:00 (Sun)
  62414179200, #      utc_end 1978-10-29 08:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62414179200, #    utc_start 1978-10-29 08:00:00 (Sun)
  62429907600, #      utc_end 1979-04-29 09:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62429907600, #    utc_start 1979-04-29 09:00:00 (Sun)
  62445628800, #      utc_end 1979-10-28 08:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62445628800, #    utc_start 1979-10-28 08:00:00 (Sun)
  62461357200, #      utc_end 1980-04-27 09:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62461357200, #    utc_start 1980-04-27 09:00:00 (Sun)
  62477078400, #      utc_end 1980-10-26 08:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62477078400, #    utc_start 1980-10-26 08:00:00 (Sun)
  62492806800, #      utc_end 1981-04-26 09:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62492806800, #    utc_start 1981-04-26 09:00:00 (Sun)
  62508528000, #      utc_end 1981-10-25 08:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62508528000, #    utc_start 1981-10-25 08:00:00 (Sun)
  62524256400, #      utc_end 1982-04-25 09:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62524256400, #    utc_start 1982-04-25 09:00:00 (Sun)
  62540582400, #      utc_end 1982-10-31 08:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62540582400, #    utc_start 1982-10-31 08:00:00 (Sun)
  62555706000, #      utc_end 1983-04-24 09:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62555706000, #    utc_start 1983-04-24 09:00:00 (Sun)
  62572032000, #      utc_end 1983-10-30 08:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62572032000, #    utc_start 1983-10-30 08:00:00 (Sun)
  62587760400, #      utc_end 1984-04-29 09:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62587760400, #    utc_start 1984-04-29 09:00:00 (Sun)
  62603481600, #      utc_end 1984-10-28 08:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62603481600, #    utc_start 1984-10-28 08:00:00 (Sun)
  62619210000, #      utc_end 1985-04-28 09:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62619210000, #    utc_start 1985-04-28 09:00:00 (Sun)
  62634931200, #      utc_end 1985-10-27 08:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62634931200, #    utc_start 1985-10-27 08:00:00 (Sun)
  62650659600, #      utc_end 1986-04-27 09:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62650659600, #    utc_start 1986-04-27 09:00:00 (Sun)
  62666380800, #      utc_end 1986-10-26 08:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62666380800, #    utc_start 1986-10-26 08:00:00 (Sun)
  62680294800, #      utc_end 1987-04-05 09:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62680294800, #    utc_start 1987-04-05 09:00:00 (Sun)
  62697830400, #      utc_end 1987-10-25 08:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62697830400, #    utc_start 1987-10-25 08:00:00 (Sun)
  62711744400, #      utc_end 1988-04-03 09:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62711744400, #    utc_start 1988-04-03 09:00:00 (Sun)
  62729884800, #      utc_end 1988-10-30 08:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62729884800, #    utc_start 1988-10-30 08:00:00 (Sun)
  62743194000, #      utc_end 1989-04-02 09:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62743194000, #    utc_start 1989-04-02 09:00:00 (Sun)
  62761334400, #      utc_end 1989-10-29 08:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62761334400, #    utc_start 1989-10-29 08:00:00 (Sun)
  62774643600, #      utc_end 1990-04-01 09:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62774643600, #    utc_start 1990-04-01 09:00:00 (Sun)
  62792784000, #      utc_end 1990-10-28 08:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62792784000, #    utc_start 1990-10-28 08:00:00 (Sun)
  62806698000, #      utc_end 1991-04-07 09:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62806698000, #    utc_start 1991-04-07 09:00:00 (Sun)
  62824233600, #      utc_end 1991-10-27 08:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62824233600, #    utc_start 1991-10-27 08:00:00 (Sun)
  62838147600, #      utc_end 1992-04-05 09:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62838147600, #    utc_start 1992-04-05 09:00:00 (Sun)
  62855683200, #      utc_end 1992-10-25 08:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62855683200, #    utc_start 1992-10-25 08:00:00 (Sun)
  62869597200, #      utc_end 1993-04-04 09:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62869597200, #    utc_start 1993-04-04 09:00:00 (Sun)
  62887737600, #      utc_end 1993-10-31 08:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62887737600, #    utc_start 1993-10-31 08:00:00 (Sun)
  62901046800, #      utc_end 1994-04-03 09:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62901046800, #    utc_start 1994-04-03 09:00:00 (Sun)
  62919187200, #      utc_end 1994-10-30 08:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62919187200, #    utc_start 1994-10-30 08:00:00 (Sun)
  62932496400, #      utc_end 1995-04-02 09:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62932496400, #    utc_start 1995-04-02 09:00:00 (Sun)
  62950636800, #      utc_end 1995-10-29 08:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62950636800, #    utc_start 1995-10-29 08:00:00 (Sun)
  62964550800, #      utc_end 1996-04-07 09:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62964550800, #    utc_start 1996-04-07 09:00:00 (Sun)
  62982086400, #      utc_end 1996-10-27 08:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62982086400, #    utc_start 1996-10-27 08:00:00 (Sun)
  62996000400, #      utc_end 1997-04-06 09:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62996000400, #    utc_start 1997-04-06 09:00:00 (Sun)
  63013536000, #      utc_end 1997-10-26 08:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63013536000, #    utc_start 1997-10-26 08:00:00 (Sun)
  63027450000, #      utc_end 1998-04-05 09:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63027450000, #    utc_start 1998-04-05 09:00:00 (Sun)
  63044985600, #      utc_end 1998-10-25 08:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63044985600, #    utc_start 1998-10-25 08:00:00 (Sun)
  63058899600, #      utc_end 1999-04-04 09:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63058899600, #    utc_start 1999-04-04 09:00:00 (Sun)
  63077040000, #      utc_end 1999-10-31 08:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63077040000, #    utc_start 1999-10-31 08:00:00 (Sun)
  63090349200, #      utc_end 2000-04-02 09:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63090349200, #    utc_start 2000-04-02 09:00:00 (Sun)
  63108489600, #      utc_end 2000-10-29 08:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63108489600, #    utc_start 2000-10-29 08:00:00 (Sun)
  63121798800, #      utc_end 2001-04-01 09:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63121798800, #    utc_start 2001-04-01 09:00:00 (Sun)
  63139939200, #      utc_end 2001-10-28 08:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63139939200, #    utc_start 2001-10-28 08:00:00 (Sun)
  63153853200, #      utc_end 2002-04-07 09:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63153853200, #    utc_start 2002-04-07 09:00:00 (Sun)
  63171388800, #      utc_end 2002-10-27 08:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63171388800, #    utc_start 2002-10-27 08:00:00 (Sun)
  63185302800, #      utc_end 2003-04-06 09:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63185302800, #    utc_start 2003-04-06 09:00:00 (Sun)
  63202838400, #      utc_end 2003-10-26 08:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63202838400, #    utc_start 2003-10-26 08:00:00 (Sun)
  63216748800, #      utc_end 2004-04-04 08:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63216748800, #    utc_start 2004-04-04 08:00:00 (Sun)
  63234889200, #      utc_end 2004-10-31 07:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63234889200, #    utc_start 2004-10-31 07:00:00 (Sun)
  63248198400, #      utc_end 2005-04-03 08:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63248198400, #    utc_start 2005-04-03 08:00:00 (Sun)
  63266338800, #      utc_end 2005-10-30 07:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63266338800, #    utc_start 2005-10-30 07:00:00 (Sun)
  63279648000, #      utc_end 2006-04-02 08:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63279648000, #    utc_start 2006-04-02 08:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63309283200, #      utc_end 2007-03-11 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63309283200, #    utc_start 2007-03-11 08:00:00 (Sun)
  63329842800, #      utc_end 2007-11-04 07:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329842800, #    utc_start 2007-11-04 07:00:00 (Sun)
  63340732800, #      utc_end 2008-03-09 08:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63340732800, #    utc_start 2008-03-09 08:00:00 (Sun)
  63361292400, #      utc_end 2008-11-02 07:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63361292400, #    utc_start 2008-11-02 07:00:00 (Sun)
  63372182400, #      utc_end 2009-03-08 08:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63372182400, #    utc_start 2009-03-08 08:00:00 (Sun)
  63392742000, #      utc_end 2009-11-01 07:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63392742000, #    utc_start 2009-11-01 07:00:00 (Sun)
  63404236800, #      utc_end 2010-03-14 08:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63404236800, #    utc_start 2010-03-14 08:00:00 (Sun)
  63424796400, #      utc_end 2010-11-07 07:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424796400, #    utc_start 2010-11-07 07:00:00 (Sun)
  63435686400, #      utc_end 2011-03-13 08:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63435686400, #    utc_start 2011-03-13 08:00:00 (Sun)
  63456246000, #      utc_end 2011-11-06 07:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63456246000, #    utc_start 2011-11-06 07:00:00 (Sun)
  63467136000, #      utc_end 2012-03-11 08:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63467136000, #    utc_start 2012-03-11 08:00:00 (Sun)
  63487695600, #      utc_end 2012-11-04 07:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487695600, #    utc_start 2012-11-04 07:00:00 (Sun)
  63498585600, #      utc_end 2013-03-10 08:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63498585600, #    utc_start 2013-03-10 08:00:00 (Sun)
  63519145200, #      utc_end 2013-11-03 07:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63519145200, #    utc_start 2013-11-03 07:00:00 (Sun)
  63530035200, #      utc_end 2014-03-09 08:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63530035200, #    utc_start 2014-03-09 08:00:00 (Sun)
  63550594800, #      utc_end 2014-11-02 07:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63550594800, #    utc_start 2014-11-02 07:00:00 (Sun)
  63561484800, #      utc_end 2015-03-08 08:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63561484800, #    utc_start 2015-03-08 08:00:00 (Sun)
  63582044400, #      utc_end 2015-11-01 07:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63582044400, #    utc_start 2015-11-01 07:00:00 (Sun)
  63593539200, #      utc_end 2016-03-13 08:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63593539200, #    utc_start 2016-03-13 08:00:00 (Sun)
  63614098800, #      utc_end 2016-11-06 07:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63614098800, #    utc_start 2016-11-06 07:00:00 (Sun)
  63624988800, #      utc_end 2017-03-12 08:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63624988800, #    utc_start 2017-03-12 08:00:00 (Sun)
  63645548400, #      utc_end 2017-11-05 07:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63645548400, #    utc_start 2017-11-05 07:00:00 (Sun)
  63656438400, #      utc_end 2018-03-11 08:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63656438400, #    utc_start 2018-03-11 08:00:00 (Sun)
  63676998000, #      utc_end 2018-11-04 07:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676998000, #    utc_start 2018-11-04 07:00:00 (Sun)
  63687888000, #      utc_end 2019-03-10 08:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63687888000, #    utc_start 2019-03-10 08:00:00 (Sun)
  63708447600, #      utc_end 2019-11-03 07:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63708447600, #    utc_start 2019-11-03 07:00:00 (Sun)
  63719337600, #      utc_end 2020-03-08 08:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63719337600, #    utc_start 2020-03-08 08:00:00 (Sun)
  63739897200, #      utc_end 2020-11-01 07:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739897200, #    utc_start 2020-11-01 07:00:00 (Sun)
  63751392000, #      utc_end 2021-03-14 08:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63751392000, #    utc_start 2021-03-14 08:00:00 (Sun)
  63771951600, #      utc_end 2021-11-07 07:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771951600, #    utc_start 2021-11-07 07:00:00 (Sun)
  63782841600, #      utc_end 2022-03-13 08:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63782841600, #    utc_start 2022-03-13 08:00:00 (Sun)
  63803401200, #      utc_end 2022-11-06 07:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63803401200, #    utc_start 2022-11-06 07:00:00 (Sun)
  63814291200, #      utc_end 2023-03-12 08:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63814291200, #    utc_start 2023-03-12 08:00:00 (Sun)
  63834850800, #      utc_end 2023-11-05 07:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834850800, #    utc_start 2023-11-05 07:00:00 (Sun)
  63845740800, #      utc_end 2024-03-10 08:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63845740800, #    utc_start 2024-03-10 08:00:00 (Sun)
  63866300400, #      utc_end 2024-11-03 07:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63866300400, #    utc_start 2024-11-03 07:00:00 (Sun)
  63877190400, #      utc_end 2025-03-09 08:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63877190400, #    utc_start 2025-03-09 08:00:00 (Sun)
  63897750000, #      utc_end 2025-11-02 07:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897750000, #    utc_start 2025-11-02 07:00:00 (Sun)
  63908640000, #      utc_end 2026-03-08 08:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63908640000, #    utc_start 2026-03-08 08:00:00 (Sun)
  63929199600, #      utc_end 2026-11-01 07:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63929199600, #    utc_start 2026-11-01 07:00:00 (Sun)
  63940694400, #      utc_end 2027-03-14 08:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63940694400, #    utc_start 2027-03-14 08:00:00 (Sun)
  63961254000, #      utc_end 2027-11-07 07:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {65}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 731514,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 731514,
      'utc_rd_secs' => 7200,
      'utc_year' => 2004
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 731514,
      'local_rd_secs' => 28800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 731514,
      'utc_rd_secs' => 28800,
      'utc_year' => 2004
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_NORTH_DAKOTA_NEW_SALEM

    $main::fatpacked{"DateTime/TimeZone/America/Ojinaga.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_OJINAGA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Ojinaga;
  $DateTime::TimeZone::America::Ojinaga::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Ojinaga::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60620943600, #      utc_end 1922-01-01 07:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60620918540, #    local_end 1922-01-01 00:02:20 (Sun)
  -25060,
  0,
  'LMT',
      ],
      [
  60620943600, #    utc_start 1922-01-01 07:00:00 (Sun)
  60792616800, #      utc_end 1927-06-11 06:00:00 (Sat)
  60620918400, #  local_start 1922-01-01 00:00:00 (Sun)
  60792591600, #    local_end 1927-06-10 23:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60792616800, #    utc_start 1927-06-11 06:00:00 (Sat)
  60900876000, #      utc_end 1930-11-15 06:00:00 (Sat)
  60792595200, #  local_start 1927-06-11 00:00:00 (Sat)
  60900854400, #    local_end 1930-11-15 00:00:00 (Sat)
  -21600,
  0,
  'CST',
      ],
      [
  60900876000, #    utc_start 1930-11-15 06:00:00 (Sat)
  60915391200, #      utc_end 1931-05-02 06:00:00 (Sat)
  60900850800, #  local_start 1930-11-14 23:00:00 (Fri)
  60915366000, #    local_end 1931-05-01 23:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60915391200, #    utc_start 1931-05-02 06:00:00 (Sat)
  60928524000, #      utc_end 1931-10-01 06:00:00 (Thu)
  60915369600, #  local_start 1931-05-02 00:00:00 (Sat)
  60928502400, #    local_end 1931-10-01 00:00:00 (Thu)
  -21600,
  0,
  'CST',
      ],
      [
  60928524000, #    utc_start 1931-10-01 06:00:00 (Thu)
  60944338800, #      utc_end 1932-04-01 07:00:00 (Fri)
  60928498800, #  local_start 1931-09-30 23:00:00 (Wed)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  60944338800, #    utc_start 1932-04-01 07:00:00 (Fri)
  62956159200, #      utc_end 1996-01-01 06:00:00 (Mon)
  60944317200, #  local_start 1932-04-01 01:00:00 (Fri)
  62956137600, #    local_end 1996-01-01 00:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  62956159200, #    utc_start 1996-01-01 06:00:00 (Mon)
  62964547200, #      utc_end 1996-04-07 08:00:00 (Sun)
  62956137600, #  local_start 1996-01-01 00:00:00 (Mon)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62964547200, #    utc_start 1996-04-07 08:00:00 (Sun)
  62982082800, #      utc_end 1996-10-27 07:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62982082800, #    utc_start 1996-10-27 07:00:00 (Sun)
  62995996800, #      utc_end 1997-04-06 08:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62995996800, #    utc_start 1997-04-06 08:00:00 (Sun)
  63013532400, #      utc_end 1997-10-26 07:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63013532400, #    utc_start 1997-10-26 07:00:00 (Sun)
  63019317600, #      utc_end 1998-01-01 06:00:00 (Thu)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63019296000, #    local_end 1998-01-01 00:00:00 (Thu)
  -21600,
  0,
  'CST',
      ],
      [
  63019317600, #    utc_start 1998-01-01 06:00:00 (Thu)
  63027450000, #      utc_end 1998-04-05 09:00:00 (Sun)
  63019296000, #  local_start 1998-01-01 00:00:00 (Thu)
  63027428400, #    local_end 1998-04-05 03:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63027450000, #    utc_start 1998-04-05 09:00:00 (Sun)
  63044985600, #      utc_end 1998-10-25 08:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63044985600, #    utc_start 1998-10-25 08:00:00 (Sun)
  63058899600, #      utc_end 1999-04-04 09:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63058899600, #    utc_start 1999-04-04 09:00:00 (Sun)
  63077040000, #      utc_end 1999-10-31 08:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63077040000, #    utc_start 1999-10-31 08:00:00 (Sun)
  63090349200, #      utc_end 2000-04-02 09:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63090349200, #    utc_start 2000-04-02 09:00:00 (Sun)
  63108489600, #      utc_end 2000-10-29 08:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63108489600, #    utc_start 2000-10-29 08:00:00 (Sun)
  63124822800, #      utc_end 2001-05-06 09:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63124797600, #    local_end 2001-05-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63124822800, #    utc_start 2001-05-06 09:00:00 (Sun)
  63137520000, #      utc_end 2001-09-30 08:00:00 (Sun)
  63124801200, #  local_start 2001-05-06 03:00:00 (Sun)
  63137498400, #    local_end 2001-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63137520000, #    utc_start 2001-09-30 08:00:00 (Sun)
  63153853200, #      utc_end 2002-04-07 09:00:00 (Sun)
  63137494800, #  local_start 2001-09-30 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63153853200, #    utc_start 2002-04-07 09:00:00 (Sun)
  63171388800, #      utc_end 2002-10-27 08:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63171388800, #    utc_start 2002-10-27 08:00:00 (Sun)
  63185302800, #      utc_end 2003-04-06 09:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63185302800, #    utc_start 2003-04-06 09:00:00 (Sun)
  63202838400, #      utc_end 2003-10-26 08:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63202838400, #    utc_start 2003-10-26 08:00:00 (Sun)
  63216752400, #      utc_end 2004-04-04 09:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63216752400, #    utc_start 2004-04-04 09:00:00 (Sun)
  63234892800, #      utc_end 2004-10-31 08:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63234892800, #    utc_start 2004-10-31 08:00:00 (Sun)
  63248202000, #      utc_end 2005-04-03 09:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63248202000, #    utc_start 2005-04-03 09:00:00 (Sun)
  63266342400, #      utc_end 2005-10-30 08:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63266342400, #    utc_start 2005-10-30 08:00:00 (Sun)
  63279651600, #      utc_end 2006-04-02 09:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63279651600, #    utc_start 2006-04-02 09:00:00 (Sun)
  63297792000, #      utc_end 2006-10-29 08:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63297792000, #    utc_start 2006-10-29 08:00:00 (Sun)
  63311101200, #      utc_end 2007-04-01 09:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63311076000, #    local_end 2007-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63311101200, #    utc_start 2007-04-01 09:00:00 (Sun)
  63329241600, #      utc_end 2007-10-28 08:00:00 (Sun)
  63311079600, #  local_start 2007-04-01 03:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63329241600, #    utc_start 2007-10-28 08:00:00 (Sun)
  63343155600, #      utc_end 2008-04-06 09:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63343130400, #    local_end 2008-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63343155600, #    utc_start 2008-04-06 09:00:00 (Sun)
  63360691200, #      utc_end 2008-10-26 08:00:00 (Sun)
  63343134000, #  local_start 2008-04-06 03:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63360691200, #    utc_start 2008-10-26 08:00:00 (Sun)
  63374605200, #      utc_end 2009-04-05 09:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63374580000, #    local_end 2009-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63374605200, #    utc_start 2009-04-05 09:00:00 (Sun)
  63392140800, #      utc_end 2009-10-25 08:00:00 (Sun)
  63374583600, #  local_start 2009-04-05 03:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63392140800, #    utc_start 2009-10-25 08:00:00 (Sun)
  63398012400, #      utc_end 2010-01-01 07:00:00 (Fri)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63397987200, #    local_end 2010-01-01 00:00:00 (Fri)
  -25200,
  0,
  'MST',
      ],
      [
  63398012400, #    utc_start 2010-01-01 07:00:00 (Fri)
  63404240400, #      utc_end 2010-03-14 09:00:00 (Sun)
  63397987200, #  local_start 2010-01-01 00:00:00 (Fri)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63404240400, #    utc_start 2010-03-14 09:00:00 (Sun)
  63424800000, #      utc_end 2010-11-07 08:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63424800000, #    utc_start 2010-11-07 08:00:00 (Sun)
  63435690000, #      utc_end 2011-03-13 09:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63435690000, #    utc_start 2011-03-13 09:00:00 (Sun)
  63456249600, #      utc_end 2011-11-06 08:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63456249600, #    utc_start 2011-11-06 08:00:00 (Sun)
  63467139600, #      utc_end 2012-03-11 09:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63467139600, #    utc_start 2012-03-11 09:00:00 (Sun)
  63487699200, #      utc_end 2012-11-04 08:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63487699200, #    utc_start 2012-11-04 08:00:00 (Sun)
  63498589200, #      utc_end 2013-03-10 09:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63498589200, #    utc_start 2013-03-10 09:00:00 (Sun)
  63519148800, #      utc_end 2013-11-03 08:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63519148800, #    utc_start 2013-11-03 08:00:00 (Sun)
  63530038800, #      utc_end 2014-03-09 09:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63530038800, #    utc_start 2014-03-09 09:00:00 (Sun)
  63550598400, #      utc_end 2014-11-02 08:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63550598400, #    utc_start 2014-11-02 08:00:00 (Sun)
  63561488400, #      utc_end 2015-03-08 09:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63561488400, #    utc_start 2015-03-08 09:00:00 (Sun)
  63582048000, #      utc_end 2015-11-01 08:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63582048000, #    utc_start 2015-11-01 08:00:00 (Sun)
  63593542800, #      utc_end 2016-03-13 09:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63593542800, #    utc_start 2016-03-13 09:00:00 (Sun)
  63614102400, #      utc_end 2016-11-06 08:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63614102400, #    utc_start 2016-11-06 08:00:00 (Sun)
  63624992400, #      utc_end 2017-03-12 09:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63624992400, #    utc_start 2017-03-12 09:00:00 (Sun)
  63645552000, #      utc_end 2017-11-05 08:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63645552000, #    utc_start 2017-11-05 08:00:00 (Sun)
  63656442000, #      utc_end 2018-03-11 09:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63656442000, #    utc_start 2018-03-11 09:00:00 (Sun)
  63677001600, #      utc_end 2018-11-04 08:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63677001600, #    utc_start 2018-11-04 08:00:00 (Sun)
  63687891600, #      utc_end 2019-03-10 09:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63687891600, #    utc_start 2019-03-10 09:00:00 (Sun)
  63708451200, #      utc_end 2019-11-03 08:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63708451200, #    utc_start 2019-11-03 08:00:00 (Sun)
  63719341200, #      utc_end 2020-03-08 09:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63719341200, #    utc_start 2020-03-08 09:00:00 (Sun)
  63739900800, #      utc_end 2020-11-01 08:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63739900800, #    utc_start 2020-11-01 08:00:00 (Sun)
  63751395600, #      utc_end 2021-03-14 09:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63751395600, #    utc_start 2021-03-14 09:00:00 (Sun)
  63771955200, #      utc_end 2021-11-07 08:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63771955200, #    utc_start 2021-11-07 08:00:00 (Sun)
  63782845200, #      utc_end 2022-03-13 09:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63782845200, #    utc_start 2022-03-13 09:00:00 (Sun)
  63803404800, #      utc_end 2022-11-06 08:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63803404800, #    utc_start 2022-11-06 08:00:00 (Sun)
  63814294800, #      utc_end 2023-03-12 09:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63814294800, #    utc_start 2023-03-12 09:00:00 (Sun)
  63834854400, #      utc_end 2023-11-05 08:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63834854400, #    utc_start 2023-11-05 08:00:00 (Sun)
  63845744400, #      utc_end 2024-03-10 09:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63845744400, #    utc_start 2024-03-10 09:00:00 (Sun)
  63866304000, #      utc_end 2024-11-03 08:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63866304000, #    utc_start 2024-11-03 08:00:00 (Sun)
  63877194000, #      utc_end 2025-03-09 09:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63877194000, #    utc_start 2025-03-09 09:00:00 (Sun)
  63897753600, #      utc_end 2025-11-02 08:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63897753600, #    utc_start 2025-11-02 08:00:00 (Sun)
  63908643600, #      utc_end 2026-03-08 09:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63908643600, #    utc_start 2026-03-08 09:00:00 (Sun)
  63929203200, #      utc_end 2026-11-01 08:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63929203200, #    utc_start 2026-11-01 08:00:00 (Sun)
  63940698000, #      utc_end 2027-03-14 09:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63940698000, #    utc_start 2027-03-14 09:00:00 (Sun)
  63961257600, #      utc_end 2027-11-07 08:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {32}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -25200 }
  
  my $last_observance = bless( {
    'format' => 'M%sT',
    'gmtoff' => '-7:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 733773,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 733773,
      'utc_rd_secs' => 0,
      'utc_year' => 2011
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -25200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 733773,
      'local_rd_secs' => 25200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 733773,
      'utc_rd_secs' => 25200,
      'utc_year' => 2011
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_OJINAGA

    $main::fatpacked{"DateTime/TimeZone/America/Panama.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_PANAMA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Panama;
  $DateTime::TimeZone::America::Panama::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Panama::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611180688, #      utc_end 1890-01-01 05:18:08 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -19088,
  0,
  'LMT',
      ],
      [
  59611180688, #    utc_start 1890-01-01 05:18:08 (Wed)
  60188764776, #      utc_end 1908-04-22 05:19:36 (Wed)
  59611161512, #  local_start 1889-12-31 23:58:32 (Tue)
  60188745600, #    local_end 1908-04-22 00:00:00 (Wed)
  -19176,
  0,
  'CMT',
      ],
      [
  60188764776, #    utc_start 1908-04-22 05:19:36 (Wed)
  DateTime::TimeZone::INFINITY, #      utc_end
  60188746776, #  local_start 1908-04-22 00:19:36 (Wed)
  DateTime::TimeZone::INFINITY, #    local_end
  -18000,
  0,
  'EST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_PANAMA

    $main::fatpacked{"DateTime/TimeZone/America/Pangnirtung.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_PANGNIRTUNG';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Pangnirtung;
  $DateTime::TimeZone::America::Pangnirtung::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Pangnirtung::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60589382400, #      utc_end 1921-01-01 00:00:00 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60589382400, #    local_end 1921-01-01 00:00:00 (Sat)
  0,
  0,
  '-00',
      ],
      [
  60589382400, #    utc_start 1921-01-01 00:00:00 (Sat)
  61255461600, #      utc_end 1942-02-09 06:00:00 (Mon)
  60589368000, #  local_start 1920-12-31 20:00:00 (Fri)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -14400,
  0,
  'AST',
      ],
      [
  61255461600, #    utc_start 1942-02-09 06:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366276800, #    local_end 1945-08-14 20:00:00 (Tue)
  -10800,
  1,
  'AWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370283600, #      utc_end 1945-09-30 05:00:00 (Sun)
  61366276800, #  local_start 1945-08-14 20:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -10800,
  1,
  'APT',
      ],
      [
  61370283600, #    utc_start 1945-09-30 05:00:00 (Sun)
  61987780800, #      utc_end 1965-04-25 04:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61987766400, #    local_end 1965-04-25 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61987780800, #    utc_start 1965-04-25 04:00:00 (Sun)
  62004110400, #      utc_end 1965-10-31 04:00:00 (Sun)
  61987773600, #  local_start 1965-04-25 02:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -7200,
  1,
  'ADDT',
      ],
      [
  62004110400, #    utc_start 1965-10-31 04:00:00 (Sun)
  62461346400, #      utc_end 1980-04-27 06:00:00 (Sun)
  62004096000, #  local_start 1965-10-31 00:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62461346400, #    utc_start 1980-04-27 06:00:00 (Sun)
  62477067600, #      utc_end 1980-10-26 05:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62477067600, #    utc_start 1980-10-26 05:00:00 (Sun)
  62492796000, #      utc_end 1981-04-26 06:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62492796000, #    utc_start 1981-04-26 06:00:00 (Sun)
  62508517200, #      utc_end 1981-10-25 05:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62508517200, #    utc_start 1981-10-25 05:00:00 (Sun)
  62524245600, #      utc_end 1982-04-25 06:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62524245600, #    utc_start 1982-04-25 06:00:00 (Sun)
  62540571600, #      utc_end 1982-10-31 05:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62540571600, #    utc_start 1982-10-31 05:00:00 (Sun)
  62555695200, #      utc_end 1983-04-24 06:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62555695200, #    utc_start 1983-04-24 06:00:00 (Sun)
  62572021200, #      utc_end 1983-10-30 05:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62572021200, #    utc_start 1983-10-30 05:00:00 (Sun)
  62587749600, #      utc_end 1984-04-29 06:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62587749600, #    utc_start 1984-04-29 06:00:00 (Sun)
  62603470800, #      utc_end 1984-10-28 05:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62603470800, #    utc_start 1984-10-28 05:00:00 (Sun)
  62619199200, #      utc_end 1985-04-28 06:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62619199200, #    utc_start 1985-04-28 06:00:00 (Sun)
  62634920400, #      utc_end 1985-10-27 05:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62634920400, #    utc_start 1985-10-27 05:00:00 (Sun)
  62650648800, #      utc_end 1986-04-27 06:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62650648800, #    utc_start 1986-04-27 06:00:00 (Sun)
  62666370000, #      utc_end 1986-10-26 05:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62666370000, #    utc_start 1986-10-26 05:00:00 (Sun)
  62680284000, #      utc_end 1987-04-05 06:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62680284000, #    utc_start 1987-04-05 06:00:00 (Sun)
  62697819600, #      utc_end 1987-10-25 05:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62697819600, #    utc_start 1987-10-25 05:00:00 (Sun)
  62711733600, #      utc_end 1988-04-03 06:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62711733600, #    utc_start 1988-04-03 06:00:00 (Sun)
  62729874000, #      utc_end 1988-10-30 05:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62729874000, #    utc_start 1988-10-30 05:00:00 (Sun)
  62743183200, #      utc_end 1989-04-02 06:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62743183200, #    utc_start 1989-04-02 06:00:00 (Sun)
  62761323600, #      utc_end 1989-10-29 05:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62761323600, #    utc_start 1989-10-29 05:00:00 (Sun)
  62774632800, #      utc_end 1990-04-01 06:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62774632800, #    utc_start 1990-04-01 06:00:00 (Sun)
  62792773200, #      utc_end 1990-10-28 05:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62792773200, #    utc_start 1990-10-28 05:00:00 (Sun)
  62806687200, #      utc_end 1991-04-07 06:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62806687200, #    utc_start 1991-04-07 06:00:00 (Sun)
  62824222800, #      utc_end 1991-10-27 05:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62824222800, #    utc_start 1991-10-27 05:00:00 (Sun)
  62838136800, #      utc_end 1992-04-05 06:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62838136800, #    utc_start 1992-04-05 06:00:00 (Sun)
  62855672400, #      utc_end 1992-10-25 05:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62855672400, #    utc_start 1992-10-25 05:00:00 (Sun)
  62869586400, #      utc_end 1993-04-04 06:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62869586400, #    utc_start 1993-04-04 06:00:00 (Sun)
  62887726800, #      utc_end 1993-10-31 05:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62887726800, #    utc_start 1993-10-31 05:00:00 (Sun)
  62901036000, #      utc_end 1994-04-03 06:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62901036000, #    utc_start 1994-04-03 06:00:00 (Sun)
  62919176400, #      utc_end 1994-10-30 05:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62919176400, #    utc_start 1994-10-30 05:00:00 (Sun)
  62932485600, #      utc_end 1995-04-02 06:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62932485600, #    utc_start 1995-04-02 06:00:00 (Sun)
  62950629600, #      utc_end 1995-10-29 06:00:00 (Sun)
  62932471200, #  local_start 1995-04-02 02:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62950629600, #    utc_start 1995-10-29 06:00:00 (Sun)
  62964543600, #      utc_end 1996-04-07 07:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62964543600, #    utc_start 1996-04-07 07:00:00 (Sun)
  62982079200, #      utc_end 1996-10-27 06:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62982079200, #    utc_start 1996-10-27 06:00:00 (Sun)
  62995993200, #      utc_end 1997-04-06 07:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62995993200, #    utc_start 1997-04-06 07:00:00 (Sun)
  63013528800, #      utc_end 1997-10-26 06:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63013528800, #    utc_start 1997-10-26 06:00:00 (Sun)
  63027442800, #      utc_end 1998-04-05 07:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63027442800, #    utc_start 1998-04-05 07:00:00 (Sun)
  63044978400, #      utc_end 1998-10-25 06:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63044978400, #    utc_start 1998-10-25 06:00:00 (Sun)
  63058892400, #      utc_end 1999-04-04 07:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63058892400, #    utc_start 1999-04-04 07:00:00 (Sun)
  63077032800, #      utc_end 1999-10-31 06:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63077032800, #    utc_start 1999-10-31 06:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077011200, #  local_start 1999-10-31 00:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108486000, #      utc_end 2000-10-29 07:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108486000, #    utc_start 2000-10-29 07:00:00 (Sun)
  63121791600, #      utc_end 2001-04-01 07:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63121791600, #    utc_start 2001-04-01 07:00:00 (Sun)
  63139932000, #      utc_end 2001-10-28 06:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63139932000, #    utc_start 2001-10-28 06:00:00 (Sun)
  63153846000, #      utc_end 2002-04-07 07:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63153846000, #    utc_start 2002-04-07 07:00:00 (Sun)
  63171381600, #      utc_end 2002-10-27 06:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63171381600, #    utc_start 2002-10-27 06:00:00 (Sun)
  63185295600, #      utc_end 2003-04-06 07:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63185295600, #    utc_start 2003-04-06 07:00:00 (Sun)
  63202831200, #      utc_end 2003-10-26 06:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63202831200, #    utc_start 2003-10-26 06:00:00 (Sun)
  63216745200, #      utc_end 2004-04-04 07:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63216745200, #    utc_start 2004-04-04 07:00:00 (Sun)
  63234885600, #      utc_end 2004-10-31 06:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63234885600, #    utc_start 2004-10-31 06:00:00 (Sun)
  63248194800, #      utc_end 2005-04-03 07:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63248194800, #    utc_start 2005-04-03 07:00:00 (Sun)
  63266335200, #      utc_end 2005-10-30 06:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63266335200, #    utc_start 2005-10-30 06:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297784800, #      utc_end 2006-10-29 06:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63297784800, #    utc_start 2006-10-29 06:00:00 (Sun)
  63309279600, #      utc_end 2007-03-11 07:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63309279600, #    utc_start 2007-03-11 07:00:00 (Sun)
  63329839200, #      utc_end 2007-11-04 06:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63329839200, #    utc_start 2007-11-04 06:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {51}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730422,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730422,
      'utc_rd_secs' => 7200,
      'utc_year' => 2001
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730422,
      'local_rd_secs' => 25200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730422,
      'utc_rd_secs' => 25200,
      'utc_year' => 2001
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_PANGNIRTUNG

    $main::fatpacked{"DateTime/TimeZone/America/Paramaribo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_PARAMARIBO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Paramaribo;
  $DateTime::TimeZone::America::Paramaribo::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Paramaribo::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60273776440, #      utc_end 1911-01-01 03:40:40 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60273763200, #    local_end 1911-01-01 00:00:00 (Sun)
  -13240,
  0,
  'LMT',
      ],
      [
  60273776440, #    utc_start 1911-01-01 03:40:40 (Sun)
  61031158852, #      utc_end 1935-01-01 03:40:52 (Tue)
  60273763188, #  local_start 1910-12-31 23:59:48 (Sat)
  61031145600, #    local_end 1935-01-01 00:00:00 (Tue)
  -13252,
  0,
  'PMT',
      ],
      [
  61031158852, #    utc_start 1935-01-01 03:40:52 (Tue)
  61370365236, #      utc_end 1945-10-01 03:40:36 (Mon)
  61031145616, #  local_start 1935-01-01 00:00:16 (Tue)
  61370352000, #    local_end 1945-10-01 00:00:00 (Mon)
  -13236,
  0,
  'PMT',
      ],
      [
  61370365236, #    utc_start 1945-10-01 03:40:36 (Mon)
  62321369400, #      utc_end 1975-11-20 03:30:00 (Thu)
  61370352636, #  local_start 1945-10-01 00:10:36 (Mon)
  62321356800, #    local_end 1975-11-20 00:00:00 (Thu)
  -12600,
  0,
  'NEGT',
      ],
      [
  62321369400, #    utc_start 1975-11-20 03:30:00 (Thu)
  62601132600, #      utc_end 1984-10-01 03:30:00 (Mon)
  62321356800, #  local_start 1975-11-20 00:00:00 (Thu)
  62601120000, #    local_end 1984-10-01 00:00:00 (Mon)
  -12600,
  0,
  'SRT',
      ],
      [
  62601132600, #    utc_start 1984-10-01 03:30:00 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  62601121800, #  local_start 1984-10-01 00:30:00 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'SRT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_PARAMARIBO

    $main::fatpacked{"DateTime/TimeZone/America/Phoenix.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_PHOENIX';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Phoenix;
  $DateTime::TimeZone::America::Phoenix::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Phoenix::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59418039600, #      utc_end 1883-11-18 19:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59418012702, #    local_end 1883-11-18 11:31:42 (Sun)
  -26898,
  0,
  'LMT',
      ],
      [
  59418039600, #    utc_start 1883-11-18 19:00:00 (Sun)
  60502410000, #      utc_end 1918-03-31 09:00:00 (Sun)
  59418014400, #  local_start 1883-11-18 12:00:00 (Sun)
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60502410000, #    utc_start 1918-03-31 09:00:00 (Sun)
  60520550400, #      utc_end 1918-10-27 08:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60520550400, #    utc_start 1918-10-27 08:00:00 (Sun)
  60533859600, #      utc_end 1919-03-30 09:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60533859600, #    utc_start 1919-03-30 09:00:00 (Sun)
  60552000000, #      utc_end 1919-10-26 08:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60552000000, #    utc_start 1919-10-26 08:00:00 (Sun)
  61255472400, #      utc_end 1942-02-09 09:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -25200,
  0,
  'MST',
      ],
      [
  61255472400, #    utc_start 1942-02-09 09:00:00 (Mon)
  61315164060, #      utc_end 1944-01-01 06:01:00 (Sat)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61315142460, #    local_end 1944-01-01 00:01:00 (Sat)
  -21600,
  1,
  'MWT',
      ],
      [
  61315164060, #    utc_start 1944-01-01 06:01:00 (Sat)
  61323030060, #      utc_end 1944-04-01 07:01:00 (Sat)
  61315138860, #  local_start 1943-12-31 23:01:00 (Fri)
  61323004860, #    local_end 1944-04-01 00:01:00 (Sat)
  -25200,
  0,
  'MST',
      ],
      [
  61323030060, #    utc_start 1944-04-01 07:01:00 (Sat)
  61338837660, #      utc_end 1944-10-01 06:01:00 (Sun)
  61323008460, #  local_start 1944-04-01 01:01:00 (Sat)
  61338816060, #    local_end 1944-10-01 00:01:00 (Sun)
  -21600,
  1,
  'MWT',
      ],
      [
  61338837660, #    utc_start 1944-10-01 06:01:00 (Sun)
  62041014000, #      utc_end 1967-01-01 07:00:00 (Sun)
  61338812460, #  local_start 1944-09-30 23:01:00 (Sat)
  62040988800, #    local_end 1967-01-01 00:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62041014000, #    utc_start 1967-01-01 07:00:00 (Sun)
  62051302800, #      utc_end 1967-04-30 09:00:00 (Sun)
  62040988800, #  local_start 1967-01-01 00:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62051302800, #    utc_start 1967-04-30 09:00:00 (Sun)
  62067024000, #      utc_end 1967-10-29 08:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62067024000, #    utc_start 1967-10-29 08:00:00 (Sun)
  62079462000, #      utc_end 1968-03-21 07:00:00 (Thu)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62079436800, #    local_end 1968-03-21 00:00:00 (Thu)
  -25200,
  0,
  'MST',
      ],
      [
  62079462000, #    utc_start 1968-03-21 07:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  62079436800, #  local_start 1968-03-21 00:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  -25200,
  0,
  'MST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {5}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_PHOENIX

    $main::fatpacked{"DateTime/TimeZone/America/Port_au_Prince.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_PORT_AU_PRINCE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Port_au_Prince;
  $DateTime::TimeZone::America::Port_au_Prince::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Port_au_Prince::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611178960, #      utc_end 1890-01-01 04:49:20 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -17360,
  0,
  'LMT',
      ],
      [
  59611178960, #    utc_start 1890-01-01 04:49:20 (Wed)
  60465199740, #      utc_end 1917-01-24 16:49:00 (Wed)
  59611161620, #  local_start 1890-01-01 00:00:20 (Wed)
  60465182400, #    local_end 1917-01-24 12:00:00 (Wed)
  -17340,
  0,
  'PPMT',
      ],
      [
  60465199740, #    utc_start 1917-01-24 16:49:00 (Wed)
  62556901200, #      utc_end 1983-05-08 05:00:00 (Sun)
  60465181740, #  local_start 1917-01-24 11:49:00 (Wed)
  62556883200, #    local_end 1983-05-08 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62556901200, #    utc_start 1983-05-08 05:00:00 (Sun)
  62572017600, #      utc_end 1983-10-30 04:00:00 (Sun)
  62556886800, #  local_start 1983-05-08 01:00:00 (Sun)
  62572003200, #    local_end 1983-10-30 00:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62572017600, #    utc_start 1983-10-30 04:00:00 (Sun)
  62587746000, #      utc_end 1984-04-29 05:00:00 (Sun)
  62571999600, #  local_start 1983-10-29 23:00:00 (Sat)
  62587728000, #    local_end 1984-04-29 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62587746000, #    utc_start 1984-04-29 05:00:00 (Sun)
  62603467200, #      utc_end 1984-10-28 04:00:00 (Sun)
  62587731600, #  local_start 1984-04-29 01:00:00 (Sun)
  62603452800, #    local_end 1984-10-28 00:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62603467200, #    utc_start 1984-10-28 04:00:00 (Sun)
  62619195600, #      utc_end 1985-04-28 05:00:00 (Sun)
  62603449200, #  local_start 1984-10-27 23:00:00 (Sat)
  62619177600, #    local_end 1985-04-28 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62619195600, #    utc_start 1985-04-28 05:00:00 (Sun)
  62634916800, #      utc_end 1985-10-27 04:00:00 (Sun)
  62619181200, #  local_start 1985-04-28 01:00:00 (Sun)
  62634902400, #    local_end 1985-10-27 00:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62634916800, #    utc_start 1985-10-27 04:00:00 (Sun)
  62650645200, #      utc_end 1986-04-27 05:00:00 (Sun)
  62634898800, #  local_start 1985-10-26 23:00:00 (Sat)
  62650627200, #    local_end 1986-04-27 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62650645200, #    utc_start 1986-04-27 05:00:00 (Sun)
  62666366400, #      utc_end 1986-10-26 04:00:00 (Sun)
  62650630800, #  local_start 1986-04-27 01:00:00 (Sun)
  62666352000, #    local_end 1986-10-26 00:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62666366400, #    utc_start 1986-10-26 04:00:00 (Sun)
  62682094800, #      utc_end 1987-04-26 05:00:00 (Sun)
  62666348400, #  local_start 1986-10-25 23:00:00 (Sat)
  62682076800, #    local_end 1987-04-26 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62682094800, #    utc_start 1987-04-26 05:00:00 (Sun)
  62697816000, #      utc_end 1987-10-25 04:00:00 (Sun)
  62682080400, #  local_start 1987-04-26 01:00:00 (Sun)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62697816000, #    utc_start 1987-10-25 04:00:00 (Sun)
  62711733600, #      utc_end 1988-04-03 06:00:00 (Sun)
  62697798000, #  local_start 1987-10-24 23:00:00 (Sat)
  62711715600, #    local_end 1988-04-03 01:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62711733600, #    utc_start 1988-04-03 06:00:00 (Sun)
  62729877600, #      utc_end 1988-10-30 06:00:00 (Sun)
  62711719200, #  local_start 1988-04-03 02:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62729877600, #    utc_start 1988-10-30 06:00:00 (Sun)
  62743183200, #      utc_end 1989-04-02 06:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743165200, #    local_end 1989-04-02 01:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62743183200, #    utc_start 1989-04-02 06:00:00 (Sun)
  62761327200, #      utc_end 1989-10-29 06:00:00 (Sun)
  62743168800, #  local_start 1989-04-02 02:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62761327200, #    utc_start 1989-10-29 06:00:00 (Sun)
  62774632800, #      utc_end 1990-04-01 06:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774614800, #    local_end 1990-04-01 01:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62774632800, #    utc_start 1990-04-01 06:00:00 (Sun)
  62792776800, #      utc_end 1990-10-28 06:00:00 (Sun)
  62774618400, #  local_start 1990-04-01 02:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62792776800, #    utc_start 1990-10-28 06:00:00 (Sun)
  62806687200, #      utc_end 1991-04-07 06:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806669200, #    local_end 1991-04-07 01:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62806687200, #    utc_start 1991-04-07 06:00:00 (Sun)
  62824226400, #      utc_end 1991-10-27 06:00:00 (Sun)
  62806672800, #  local_start 1991-04-07 02:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62824226400, #    utc_start 1991-10-27 06:00:00 (Sun)
  62838136800, #      utc_end 1992-04-05 06:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838118800, #    local_end 1992-04-05 01:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62838136800, #    utc_start 1992-04-05 06:00:00 (Sun)
  62855676000, #      utc_end 1992-10-25 06:00:00 (Sun)
  62838122400, #  local_start 1992-04-05 02:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62855676000, #    utc_start 1992-10-25 06:00:00 (Sun)
  62869586400, #      utc_end 1993-04-04 06:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869568400, #    local_end 1993-04-04 01:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62869586400, #    utc_start 1993-04-04 06:00:00 (Sun)
  62887730400, #      utc_end 1993-10-31 06:00:00 (Sun)
  62869572000, #  local_start 1993-04-04 02:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62887730400, #    utc_start 1993-10-31 06:00:00 (Sun)
  62901036000, #      utc_end 1994-04-03 06:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901018000, #    local_end 1994-04-03 01:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62901036000, #    utc_start 1994-04-03 06:00:00 (Sun)
  62919180000, #      utc_end 1994-10-30 06:00:00 (Sun)
  62901021600, #  local_start 1994-04-03 02:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62919180000, #    utc_start 1994-10-30 06:00:00 (Sun)
  62932485600, #      utc_end 1995-04-02 06:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932467600, #    local_end 1995-04-02 01:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62932485600, #    utc_start 1995-04-02 06:00:00 (Sun)
  62950629600, #      utc_end 1995-10-29 06:00:00 (Sun)
  62932471200, #  local_start 1995-04-02 02:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62950629600, #    utc_start 1995-10-29 06:00:00 (Sun)
  62964540000, #      utc_end 1996-04-07 06:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964522000, #    local_end 1996-04-07 01:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62964540000, #    utc_start 1996-04-07 06:00:00 (Sun)
  62982079200, #      utc_end 1996-10-27 06:00:00 (Sun)
  62964525600, #  local_start 1996-04-07 02:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62982079200, #    utc_start 1996-10-27 06:00:00 (Sun)
  62995989600, #      utc_end 1997-04-06 06:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995971600, #    local_end 1997-04-06 01:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62995989600, #    utc_start 1997-04-06 06:00:00 (Sun)
  63013528800, #      utc_end 1997-10-26 06:00:00 (Sun)
  62995975200, #  local_start 1997-04-06 02:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63013528800, #    utc_start 1997-10-26 06:00:00 (Sun)
  63248187600, #      utc_end 2005-04-03 05:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63248169600, #    local_end 2005-04-03 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63248187600, #    utc_start 2005-04-03 05:00:00 (Sun)
  63266328000, #      utc_end 2005-10-30 04:00:00 (Sun)
  63248173200, #  local_start 2005-04-03 01:00:00 (Sun)
  63266313600, #    local_end 2005-10-30 00:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63266328000, #    utc_start 2005-10-30 04:00:00 (Sun)
  63279637200, #      utc_end 2006-04-02 05:00:00 (Sun)
  63266310000, #  local_start 2005-10-29 23:00:00 (Sat)
  63279619200, #    local_end 2006-04-02 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279637200, #    utc_start 2006-04-02 05:00:00 (Sun)
  63297777600, #      utc_end 2006-10-29 04:00:00 (Sun)
  63279622800, #  local_start 2006-04-02 01:00:00 (Sun)
  63297763200, #    local_end 2006-10-29 00:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63297777600, #    utc_start 2006-10-29 04:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63297759600, #  local_start 2006-10-28 23:00:00 (Sat)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -18000,
  0,
  'EST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {21}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_PORT_AU_PRINCE

    $main::fatpacked{"DateTime/TimeZone/America/Port_of_Spain.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_PORT_OF_SPAIN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Port_of_Spain;
  $DateTime::TimeZone::America::Port_of_Spain::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Port_of_Spain::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60310584364, #      utc_end 1912-03-02 04:06:04 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60310569600, #    local_end 1912-03-02 00:00:00 (Sat)
  -14764,
  0,
  'LMT',
      ],
      [
  60310584364, #    utc_start 1912-03-02 04:06:04 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  60310569964, #  local_start 1912-03-02 00:06:04 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -14400,
  0,
  'AST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_PORT_OF_SPAIN

    $main::fatpacked{"DateTime/TimeZone/America/Porto_Velho.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_PORTO_VELHO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Porto_Velho;
  $DateTime::TimeZone::America::Porto_Velho::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Porto_Velho::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368472936, #      utc_end 1914-01-01 04:15:36 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  -15336,
  0,
  'LMT',
      ],
      [
  60368472936, #    utc_start 1914-01-01 04:15:36 (Thu)
  60928729200, #      utc_end 1931-10-03 15:00:00 (Sat)
  60368458536, #  local_start 1914-01-01 00:15:36 (Thu)
  60928714800, #    local_end 1931-10-03 11:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  60928729200, #    utc_start 1931-10-03 15:00:00 (Sat)
  60944324400, #      utc_end 1932-04-01 03:00:00 (Fri)
  60928718400, #  local_start 1931-10-03 12:00:00 (Sat)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -10800,
  1,
  'AMST',
      ],
      [
  60944324400, #    utc_start 1932-04-01 03:00:00 (Fri)
  60960312000, #      utc_end 1932-10-03 04:00:00 (Mon)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60960297600, #    local_end 1932-10-03 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  60960312000, #    utc_start 1932-10-03 04:00:00 (Mon)
  60975860400, #      utc_end 1933-04-01 03:00:00 (Sat)
  60960301200, #  local_start 1932-10-03 01:00:00 (Mon)
  60975849600, #    local_end 1933-04-01 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  60975860400, #    utc_start 1933-04-01 03:00:00 (Sat)
  61501867200, #      utc_end 1949-12-01 04:00:00 (Thu)
  60975846000, #  local_start 1933-03-31 23:00:00 (Fri)
  61501852800, #    local_end 1949-12-01 00:00:00 (Thu)
  -14400,
  0,
  'AMT',
      ],
      [
  61501867200, #    utc_start 1949-12-01 04:00:00 (Thu)
  61513617600, #      utc_end 1950-04-16 04:00:00 (Sun)
  61501856400, #  local_start 1949-12-01 01:00:00 (Thu)
  61513606800, #    local_end 1950-04-16 01:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61513617600, #    utc_start 1950-04-16 04:00:00 (Sun)
  61533403200, #      utc_end 1950-12-01 04:00:00 (Fri)
  61513603200, #  local_start 1950-04-16 00:00:00 (Sun)
  61533388800, #    local_end 1950-12-01 00:00:00 (Fri)
  -14400,
  0,
  'AMT',
      ],
      [
  61533403200, #    utc_start 1950-12-01 04:00:00 (Fri)
  61543854000, #      utc_end 1951-04-01 03:00:00 (Sun)
  61533392400, #  local_start 1950-12-01 01:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61543854000, #    utc_start 1951-04-01 03:00:00 (Sun)
  61564939200, #      utc_end 1951-12-01 04:00:00 (Sat)
  61543839600, #  local_start 1951-03-31 23:00:00 (Sat)
  61564924800, #    local_end 1951-12-01 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  61564939200, #    utc_start 1951-12-01 04:00:00 (Sat)
  61575476400, #      utc_end 1952-04-01 03:00:00 (Tue)
  61564928400, #  local_start 1951-12-01 01:00:00 (Sat)
  61575465600, #    local_end 1952-04-01 00:00:00 (Tue)
  -10800,
  1,
  'AMST',
      ],
      [
  61575476400, #    utc_start 1952-04-01 03:00:00 (Tue)
  61596561600, #      utc_end 1952-12-01 04:00:00 (Mon)
  61575462000, #  local_start 1952-03-31 23:00:00 (Mon)
  61596547200, #    local_end 1952-12-01 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  61596561600, #    utc_start 1952-12-01 04:00:00 (Mon)
  61604334000, #      utc_end 1953-03-01 03:00:00 (Sun)
  61596550800, #  local_start 1952-12-01 01:00:00 (Mon)
  61604323200, #    local_end 1953-03-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61604334000, #    utc_start 1953-03-01 03:00:00 (Sun)
  61944321600, #      utc_end 1963-12-09 04:00:00 (Mon)
  61604319600, #  local_start 1953-02-28 23:00:00 (Sat)
  61944307200, #    local_end 1963-12-09 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  61944321600, #    utc_start 1963-12-09 04:00:00 (Mon)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944310800, #  local_start 1963-12-09 01:00:00 (Mon)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61980523200, #      utc_end 1965-01-31 04:00:00 (Sun)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61980508800, #    local_end 1965-01-31 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  61980523200, #    utc_start 1965-01-31 04:00:00 (Sun)
  61985617200, #      utc_end 1965-03-31 03:00:00 (Wed)
  61980512400, #  local_start 1965-01-31 01:00:00 (Sun)
  61985606400, #    local_end 1965-03-31 00:00:00 (Wed)
  -10800,
  1,
  'AMST',
      ],
      [
  61985617200, #    utc_start 1965-03-31 03:00:00 (Wed)
  62006788800, #      utc_end 1965-12-01 04:00:00 (Wed)
  61985602800, #  local_start 1965-03-30 23:00:00 (Tue)
  62006774400, #    local_end 1965-12-01 00:00:00 (Wed)
  -14400,
  0,
  'AMT',
      ],
      [
  62006788800, #    utc_start 1965-12-01 04:00:00 (Wed)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62006778000, #  local_start 1965-12-01 01:00:00 (Wed)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'AMST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62035732800, #      utc_end 1966-11-01 04:00:00 (Tue)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62035718400, #    local_end 1966-11-01 00:00:00 (Tue)
  -14400,
  0,
  'AMT',
      ],
      [
  62035732800, #    utc_start 1966-11-01 04:00:00 (Tue)
  62046097200, #      utc_end 1967-03-01 03:00:00 (Wed)
  62035722000, #  local_start 1966-11-01 01:00:00 (Tue)
  62046086400, #    local_end 1967-03-01 00:00:00 (Wed)
  -10800,
  1,
  'AMST',
      ],
      [
  62046097200, #    utc_start 1967-03-01 03:00:00 (Wed)
  62067268800, #      utc_end 1967-11-01 04:00:00 (Wed)
  62046082800, #  local_start 1967-02-28 23:00:00 (Tue)
  62067254400, #    local_end 1967-11-01 00:00:00 (Wed)
  -14400,
  0,
  'AMT',
      ],
      [
  62067268800, #    utc_start 1967-11-01 04:00:00 (Wed)
  62077719600, #      utc_end 1968-03-01 03:00:00 (Fri)
  62067258000, #  local_start 1967-11-01 01:00:00 (Wed)
  62077708800, #    local_end 1968-03-01 00:00:00 (Fri)
  -10800,
  1,
  'AMST',
      ],
      [
  62077719600, #    utc_start 1968-03-01 03:00:00 (Fri)
  62635435200, #      utc_end 1985-11-02 04:00:00 (Sat)
  62077705200, #  local_start 1968-02-29 23:00:00 (Thu)
  62635420800, #    local_end 1985-11-02 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  62635435200, #    utc_start 1985-11-02 04:00:00 (Sat)
  62646922800, #      utc_end 1986-03-15 03:00:00 (Sat)
  62635424400, #  local_start 1985-11-02 01:00:00 (Sat)
  62646912000, #    local_end 1986-03-15 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  62646922800, #    utc_start 1986-03-15 03:00:00 (Sat)
  62666280000, #      utc_end 1986-10-25 04:00:00 (Sat)
  62646908400, #  local_start 1986-03-14 23:00:00 (Fri)
  62666265600, #    local_end 1986-10-25 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  62666280000, #    utc_start 1986-10-25 04:00:00 (Sat)
  62675953200, #      utc_end 1987-02-14 03:00:00 (Sat)
  62666269200, #  local_start 1986-10-25 01:00:00 (Sat)
  62675942400, #    local_end 1987-02-14 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  62675953200, #    utc_start 1987-02-14 03:00:00 (Sat)
  62697816000, #      utc_end 1987-10-25 04:00:00 (Sun)
  62675938800, #  local_start 1987-02-13 23:00:00 (Fri)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62697816000, #    utc_start 1987-10-25 04:00:00 (Sun)
  62706884400, #      utc_end 1988-02-07 03:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62706873600, #    local_end 1988-02-07 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62706884400, #    utc_start 1988-02-07 03:00:00 (Sun)
  62725723200, #      utc_end 1988-09-12 04:00:00 (Mon)
  62706870000, #  local_start 1988-02-06 23:00:00 (Sat)
  62725708800, #    local_end 1988-09-12 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  62725723200, #    utc_start 1988-09-12 04:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  62725708800, #  local_start 1988-09-12 00:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  -14400,
  0,
  'AMT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {14}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_PORTO_VELHO

    $main::fatpacked{"DateTime/TimeZone/America/Puerto_Rico.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_PUERTO_RICO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Puerto_Rico;
  $DateTime::TimeZone::America::Puerto_Rico::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Puerto_Rico::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59902647865, #      utc_end 1899-03-28 16:24:25 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59902632000, #    local_end 1899-03-28 12:00:00 (Tue)
  -15865,
  0,
  'LMT',
      ],
      [
  59902647865, #    utc_start 1899-03-28 16:24:25 (Tue)
  61262625600, #      utc_end 1942-05-03 04:00:00 (Sun)
  59902633465, #  local_start 1899-03-28 12:24:25 (Tue)
  61262611200, #    local_end 1942-05-03 00:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  61262625600, #    utc_start 1942-05-03 04:00:00 (Sun)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61262614800, #  local_start 1942-05-03 01:00:00 (Sun)
  61366276800, #    local_end 1945-08-14 20:00:00 (Tue)
  -10800,
  1,
  'AWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370283600, #      utc_end 1945-09-30 05:00:00 (Sun)
  61366276800, #  local_start 1945-08-14 20:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -10800,
  1,
  'APT',
      ],
      [
  61370283600, #    utc_start 1945-09-30 05:00:00 (Sun)
  61378315200, #      utc_end 1946-01-01 04:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -14400,
  0,
  'AST',
      ],
      [
  61378315200, #    utc_start 1946-01-01 04:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  -14400,
  0,
  'AST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {2}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_PUERTO_RICO

    $main::fatpacked{"DateTime/TimeZone/America/Rainy_River.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_RAINY_RIVER';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Rainy_River;
  $DateTime::TimeZone::America::Rainy_River::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Rainy_River::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59768950696, #      utc_end 1895-01-01 06:18:16 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59768928000, #    local_end 1895-01-01 00:00:00 (Tue)
  -22696,
  0,
  'LMT',
      ],
      [
  59768950696, #    utc_start 1895-01-01 06:18:16 (Tue)
  60503616000, #      utc_end 1918-04-14 08:00:00 (Sun)
  59768929096, #  local_start 1895-01-01 00:18:16 (Tue)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60503616000, #    utc_start 1918-04-14 08:00:00 (Sun)
  60520546800, #      utc_end 1918-10-27 07:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60520546800, #    utc_start 1918-10-27 07:00:00 (Sun)
  61212434400, #      utc_end 1940-09-29 06:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  61212412800, #    local_end 1940-09-29 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61212434400, #    utc_start 1940-09-29 06:00:00 (Sun)
  61255468800, #      utc_end 1942-02-09 08:00:00 (Mon)
  61212416400, #  local_start 1940-09-29 01:00:00 (Sun)
  61255450800, #    local_end 1942-02-09 03:00:00 (Mon)
  -18000,
  1,
  'CDT',
      ],
      [
  61255468800, #    utc_start 1942-02-09 08:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366269600, #    local_end 1945-08-14 18:00:00 (Tue)
  -18000,
  1,
  'CWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370290800, #      utc_end 1945-09-30 07:00:00 (Sun)
  61366269600, #  local_start 1945-08-14 18:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CPT',
      ],
      [
  61370290800, #    utc_start 1945-09-30 07:00:00 (Sun)
  62272051200, #      utc_end 1974-04-28 08:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  62272029600, #    local_end 1974-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62272051200, #    utc_start 1974-04-28 08:00:00 (Sun)
  62287772400, #      utc_end 1974-10-27 07:00:00 (Sun)
  62272033200, #  local_start 1974-04-28 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62287772400, #    utc_start 1974-10-27 07:00:00 (Sun)
  62303500800, #      utc_end 1975-04-27 08:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62303479200, #    local_end 1975-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62303500800, #    utc_start 1975-04-27 08:00:00 (Sun)
  62319222000, #      utc_end 1975-10-26 07:00:00 (Sun)
  62303482800, #  local_start 1975-04-27 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62319222000, #    utc_start 1975-10-26 07:00:00 (Sun)
  62334950400, #      utc_end 1976-04-25 08:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62334950400, #    utc_start 1976-04-25 08:00:00 (Sun)
  62351276400, #      utc_end 1976-10-31 07:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62351276400, #    utc_start 1976-10-31 07:00:00 (Sun)
  62366400000, #      utc_end 1977-04-24 08:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62366400000, #    utc_start 1977-04-24 08:00:00 (Sun)
  62382726000, #      utc_end 1977-10-30 07:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62382726000, #    utc_start 1977-10-30 07:00:00 (Sun)
  62398454400, #      utc_end 1978-04-30 08:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62398454400, #    utc_start 1978-04-30 08:00:00 (Sun)
  62414175600, #      utc_end 1978-10-29 07:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62414175600, #    utc_start 1978-10-29 07:00:00 (Sun)
  62429904000, #      utc_end 1979-04-29 08:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62429904000, #    utc_start 1979-04-29 08:00:00 (Sun)
  62445625200, #      utc_end 1979-10-28 07:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62445625200, #    utc_start 1979-10-28 07:00:00 (Sun)
  62461353600, #      utc_end 1980-04-27 08:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62461353600, #    utc_start 1980-04-27 08:00:00 (Sun)
  62477074800, #      utc_end 1980-10-26 07:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62477074800, #    utc_start 1980-10-26 07:00:00 (Sun)
  62492803200, #      utc_end 1981-04-26 08:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62492803200, #    utc_start 1981-04-26 08:00:00 (Sun)
  62508524400, #      utc_end 1981-10-25 07:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62508524400, #    utc_start 1981-10-25 07:00:00 (Sun)
  62524252800, #      utc_end 1982-04-25 08:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62524252800, #    utc_start 1982-04-25 08:00:00 (Sun)
  62540578800, #      utc_end 1982-10-31 07:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62540578800, #    utc_start 1982-10-31 07:00:00 (Sun)
  62555702400, #      utc_end 1983-04-24 08:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62555702400, #    utc_start 1983-04-24 08:00:00 (Sun)
  62572028400, #      utc_end 1983-10-30 07:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62572028400, #    utc_start 1983-10-30 07:00:00 (Sun)
  62587756800, #      utc_end 1984-04-29 08:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62587756800, #    utc_start 1984-04-29 08:00:00 (Sun)
  62603478000, #      utc_end 1984-10-28 07:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62603478000, #    utc_start 1984-10-28 07:00:00 (Sun)
  62619206400, #      utc_end 1985-04-28 08:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62619206400, #    utc_start 1985-04-28 08:00:00 (Sun)
  62634927600, #      utc_end 1985-10-27 07:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62634927600, #    utc_start 1985-10-27 07:00:00 (Sun)
  62650656000, #      utc_end 1986-04-27 08:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62650656000, #    utc_start 1986-04-27 08:00:00 (Sun)
  62666377200, #      utc_end 1986-10-26 07:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62666377200, #    utc_start 1986-10-26 07:00:00 (Sun)
  62680291200, #      utc_end 1987-04-05 08:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62680291200, #    utc_start 1987-04-05 08:00:00 (Sun)
  62697826800, #      utc_end 1987-10-25 07:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62697826800, #    utc_start 1987-10-25 07:00:00 (Sun)
  62711740800, #      utc_end 1988-04-03 08:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62711740800, #    utc_start 1988-04-03 08:00:00 (Sun)
  62729881200, #      utc_end 1988-10-30 07:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62729881200, #    utc_start 1988-10-30 07:00:00 (Sun)
  62743190400, #      utc_end 1989-04-02 08:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62743190400, #    utc_start 1989-04-02 08:00:00 (Sun)
  62761330800, #      utc_end 1989-10-29 07:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62761330800, #    utc_start 1989-10-29 07:00:00 (Sun)
  62774640000, #      utc_end 1990-04-01 08:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62774640000, #    utc_start 1990-04-01 08:00:00 (Sun)
  62792780400, #      utc_end 1990-10-28 07:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62792780400, #    utc_start 1990-10-28 07:00:00 (Sun)
  62806694400, #      utc_end 1991-04-07 08:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62806694400, #    utc_start 1991-04-07 08:00:00 (Sun)
  62824230000, #      utc_end 1991-10-27 07:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62824230000, #    utc_start 1991-10-27 07:00:00 (Sun)
  62838144000, #      utc_end 1992-04-05 08:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62838144000, #    utc_start 1992-04-05 08:00:00 (Sun)
  62855679600, #      utc_end 1992-10-25 07:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62855679600, #    utc_start 1992-10-25 07:00:00 (Sun)
  62869593600, #      utc_end 1993-04-04 08:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62869593600, #    utc_start 1993-04-04 08:00:00 (Sun)
  62887734000, #      utc_end 1993-10-31 07:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62887734000, #    utc_start 1993-10-31 07:00:00 (Sun)
  62901043200, #      utc_end 1994-04-03 08:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62901043200, #    utc_start 1994-04-03 08:00:00 (Sun)
  62919183600, #      utc_end 1994-10-30 07:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62919183600, #    utc_start 1994-10-30 07:00:00 (Sun)
  62932492800, #      utc_end 1995-04-02 08:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62932492800, #    utc_start 1995-04-02 08:00:00 (Sun)
  62950633200, #      utc_end 1995-10-29 07:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62950633200, #    utc_start 1995-10-29 07:00:00 (Sun)
  62964547200, #      utc_end 1996-04-07 08:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62964547200, #    utc_start 1996-04-07 08:00:00 (Sun)
  62982082800, #      utc_end 1996-10-27 07:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62982082800, #    utc_start 1996-10-27 07:00:00 (Sun)
  62995996800, #      utc_end 1997-04-06 08:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62995996800, #    utc_start 1997-04-06 08:00:00 (Sun)
  63013532400, #      utc_end 1997-10-26 07:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63013532400, #    utc_start 1997-10-26 07:00:00 (Sun)
  63027446400, #      utc_end 1998-04-05 08:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63027446400, #    utc_start 1998-04-05 08:00:00 (Sun)
  63044982000, #      utc_end 1998-10-25 07:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63044982000, #    utc_start 1998-10-25 07:00:00 (Sun)
  63058896000, #      utc_end 1999-04-04 08:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63058896000, #    utc_start 1999-04-04 08:00:00 (Sun)
  63077036400, #      utc_end 1999-10-31 07:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63077036400, #    utc_start 1999-10-31 07:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108486000, #      utc_end 2000-10-29 07:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108486000, #    utc_start 2000-10-29 07:00:00 (Sun)
  63121795200, #      utc_end 2001-04-01 08:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63121795200, #    utc_start 2001-04-01 08:00:00 (Sun)
  63139935600, #      utc_end 2001-10-28 07:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63139935600, #    utc_start 2001-10-28 07:00:00 (Sun)
  63153849600, #      utc_end 2002-04-07 08:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63153849600, #    utc_start 2002-04-07 08:00:00 (Sun)
  63171385200, #      utc_end 2002-10-27 07:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63171385200, #    utc_start 2002-10-27 07:00:00 (Sun)
  63185299200, #      utc_end 2003-04-06 08:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63185299200, #    utc_start 2003-04-06 08:00:00 (Sun)
  63202834800, #      utc_end 2003-10-26 07:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63202834800, #    utc_start 2003-10-26 07:00:00 (Sun)
  63216748800, #      utc_end 2004-04-04 08:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63216748800, #    utc_start 2004-04-04 08:00:00 (Sun)
  63234889200, #      utc_end 2004-10-31 07:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63234889200, #    utc_start 2004-10-31 07:00:00 (Sun)
  63248198400, #      utc_end 2005-04-03 08:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63248198400, #    utc_start 2005-04-03 08:00:00 (Sun)
  63266338800, #      utc_end 2005-10-30 07:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63266338800, #    utc_start 2005-10-30 07:00:00 (Sun)
  63279648000, #      utc_end 2006-04-02 08:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63279648000, #    utc_start 2006-04-02 08:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63309283200, #      utc_end 2007-03-11 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63309283200, #    utc_start 2007-03-11 08:00:00 (Sun)
  63329842800, #      utc_end 2007-11-04 07:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329842800, #    utc_start 2007-11-04 07:00:00 (Sun)
  63340732800, #      utc_end 2008-03-09 08:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63340732800, #    utc_start 2008-03-09 08:00:00 (Sun)
  63361292400, #      utc_end 2008-11-02 07:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63361292400, #    utc_start 2008-11-02 07:00:00 (Sun)
  63372182400, #      utc_end 2009-03-08 08:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63372182400, #    utc_start 2009-03-08 08:00:00 (Sun)
  63392742000, #      utc_end 2009-11-01 07:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63392742000, #    utc_start 2009-11-01 07:00:00 (Sun)
  63404236800, #      utc_end 2010-03-14 08:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63404236800, #    utc_start 2010-03-14 08:00:00 (Sun)
  63424796400, #      utc_end 2010-11-07 07:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424796400, #    utc_start 2010-11-07 07:00:00 (Sun)
  63435686400, #      utc_end 2011-03-13 08:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63435686400, #    utc_start 2011-03-13 08:00:00 (Sun)
  63456246000, #      utc_end 2011-11-06 07:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63456246000, #    utc_start 2011-11-06 07:00:00 (Sun)
  63467136000, #      utc_end 2012-03-11 08:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63467136000, #    utc_start 2012-03-11 08:00:00 (Sun)
  63487695600, #      utc_end 2012-11-04 07:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487695600, #    utc_start 2012-11-04 07:00:00 (Sun)
  63498585600, #      utc_end 2013-03-10 08:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63498585600, #    utc_start 2013-03-10 08:00:00 (Sun)
  63519145200, #      utc_end 2013-11-03 07:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63519145200, #    utc_start 2013-11-03 07:00:00 (Sun)
  63530035200, #      utc_end 2014-03-09 08:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63530035200, #    utc_start 2014-03-09 08:00:00 (Sun)
  63550594800, #      utc_end 2014-11-02 07:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63550594800, #    utc_start 2014-11-02 07:00:00 (Sun)
  63561484800, #      utc_end 2015-03-08 08:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63561484800, #    utc_start 2015-03-08 08:00:00 (Sun)
  63582044400, #      utc_end 2015-11-01 07:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63582044400, #    utc_start 2015-11-01 07:00:00 (Sun)
  63593539200, #      utc_end 2016-03-13 08:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63593539200, #    utc_start 2016-03-13 08:00:00 (Sun)
  63614098800, #      utc_end 2016-11-06 07:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63614098800, #    utc_start 2016-11-06 07:00:00 (Sun)
  63624988800, #      utc_end 2017-03-12 08:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63624988800, #    utc_start 2017-03-12 08:00:00 (Sun)
  63645548400, #      utc_end 2017-11-05 07:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63645548400, #    utc_start 2017-11-05 07:00:00 (Sun)
  63656438400, #      utc_end 2018-03-11 08:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63656438400, #    utc_start 2018-03-11 08:00:00 (Sun)
  63676998000, #      utc_end 2018-11-04 07:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676998000, #    utc_start 2018-11-04 07:00:00 (Sun)
  63687888000, #      utc_end 2019-03-10 08:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63687888000, #    utc_start 2019-03-10 08:00:00 (Sun)
  63708447600, #      utc_end 2019-11-03 07:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63708447600, #    utc_start 2019-11-03 07:00:00 (Sun)
  63719337600, #      utc_end 2020-03-08 08:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63719337600, #    utc_start 2020-03-08 08:00:00 (Sun)
  63739897200, #      utc_end 2020-11-01 07:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739897200, #    utc_start 2020-11-01 07:00:00 (Sun)
  63751392000, #      utc_end 2021-03-14 08:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63751392000, #    utc_start 2021-03-14 08:00:00 (Sun)
  63771951600, #      utc_end 2021-11-07 07:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771951600, #    utc_start 2021-11-07 07:00:00 (Sun)
  63782841600, #      utc_end 2022-03-13 08:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63782841600, #    utc_start 2022-03-13 08:00:00 (Sun)
  63803401200, #      utc_end 2022-11-06 07:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63803401200, #    utc_start 2022-11-06 07:00:00 (Sun)
  63814291200, #      utc_end 2023-03-12 08:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63814291200, #    utc_start 2023-03-12 08:00:00 (Sun)
  63834850800, #      utc_end 2023-11-05 07:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834850800, #    utc_start 2023-11-05 07:00:00 (Sun)
  63845740800, #      utc_end 2024-03-10 08:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63845740800, #    utc_start 2024-03-10 08:00:00 (Sun)
  63866300400, #      utc_end 2024-11-03 07:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63866300400, #    utc_start 2024-11-03 07:00:00 (Sun)
  63877190400, #      utc_end 2025-03-09 08:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63877190400, #    utc_start 2025-03-09 08:00:00 (Sun)
  63897750000, #      utc_end 2025-11-02 07:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897750000, #    utc_start 2025-11-02 07:00:00 (Sun)
  63908640000, #      utc_end 2026-03-08 08:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63908640000, #    utc_start 2026-03-08 08:00:00 (Sun)
  63929199600, #      utc_end 2026-11-01 07:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63929199600, #    utc_start 2026-11-01 07:00:00 (Sun)
  63940694400, #      utc_end 2027-03-14 08:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63940694400, #    utc_start 2027-03-14 08:00:00 (Sun)
  63961254000, #      utc_end 2027-11-07 07:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {58}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 708975,
      'local_rd_secs' => 10800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 708975,
      'utc_rd_secs' => 10800,
      'utc_year' => 1943
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 708975,
      'local_rd_secs' => 28800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 708975,
      'utc_rd_secs' => 28800,
      'utc_year' => 1943
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_RAINY_RIVER

    $main::fatpacked{"DateTime/TimeZone/America/Rankin_Inlet.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_RANKIN_INLET';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Rankin_Inlet;
  $DateTime::TimeZone::America::Rankin_Inlet::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Rankin_Inlet::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  61725456000, #      utc_end 1957-01-01 00:00:00 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  61725456000, #    local_end 1957-01-01 00:00:00 (Tue)
  0,
  0,
  '-00',
      ],
      [
  61725456000, #    utc_start 1957-01-01 00:00:00 (Tue)
  61987788000, #      utc_end 1965-04-25 06:00:00 (Sun)
  61725434400, #  local_start 1956-12-31 18:00:00 (Mon)
  61987766400, #    local_end 1965-04-25 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61987788000, #    utc_start 1965-04-25 06:00:00 (Sun)
  62004117600, #      utc_end 1965-10-31 06:00:00 (Sun)
  61987773600, #  local_start 1965-04-25 02:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -14400,
  1,
  'CDDT',
      ],
      [
  62004117600, #    utc_start 1965-10-31 06:00:00 (Sun)
  62461353600, #      utc_end 1980-04-27 08:00:00 (Sun)
  62004096000, #  local_start 1965-10-31 00:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62461353600, #    utc_start 1980-04-27 08:00:00 (Sun)
  62477074800, #      utc_end 1980-10-26 07:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62477074800, #    utc_start 1980-10-26 07:00:00 (Sun)
  62492803200, #      utc_end 1981-04-26 08:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62492803200, #    utc_start 1981-04-26 08:00:00 (Sun)
  62508524400, #      utc_end 1981-10-25 07:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62508524400, #    utc_start 1981-10-25 07:00:00 (Sun)
  62524252800, #      utc_end 1982-04-25 08:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62524252800, #    utc_start 1982-04-25 08:00:00 (Sun)
  62540578800, #      utc_end 1982-10-31 07:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62540578800, #    utc_start 1982-10-31 07:00:00 (Sun)
  62555702400, #      utc_end 1983-04-24 08:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62555702400, #    utc_start 1983-04-24 08:00:00 (Sun)
  62572028400, #      utc_end 1983-10-30 07:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62572028400, #    utc_start 1983-10-30 07:00:00 (Sun)
  62587756800, #      utc_end 1984-04-29 08:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62587756800, #    utc_start 1984-04-29 08:00:00 (Sun)
  62603478000, #      utc_end 1984-10-28 07:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62603478000, #    utc_start 1984-10-28 07:00:00 (Sun)
  62619206400, #      utc_end 1985-04-28 08:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62619206400, #    utc_start 1985-04-28 08:00:00 (Sun)
  62634927600, #      utc_end 1985-10-27 07:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62634927600, #    utc_start 1985-10-27 07:00:00 (Sun)
  62650656000, #      utc_end 1986-04-27 08:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62650656000, #    utc_start 1986-04-27 08:00:00 (Sun)
  62666377200, #      utc_end 1986-10-26 07:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62666377200, #    utc_start 1986-10-26 07:00:00 (Sun)
  62680291200, #      utc_end 1987-04-05 08:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62680291200, #    utc_start 1987-04-05 08:00:00 (Sun)
  62697826800, #      utc_end 1987-10-25 07:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62697826800, #    utc_start 1987-10-25 07:00:00 (Sun)
  62711740800, #      utc_end 1988-04-03 08:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62711740800, #    utc_start 1988-04-03 08:00:00 (Sun)
  62729881200, #      utc_end 1988-10-30 07:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62729881200, #    utc_start 1988-10-30 07:00:00 (Sun)
  62743190400, #      utc_end 1989-04-02 08:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62743190400, #    utc_start 1989-04-02 08:00:00 (Sun)
  62761330800, #      utc_end 1989-10-29 07:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62761330800, #    utc_start 1989-10-29 07:00:00 (Sun)
  62774640000, #      utc_end 1990-04-01 08:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62774640000, #    utc_start 1990-04-01 08:00:00 (Sun)
  62792780400, #      utc_end 1990-10-28 07:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62792780400, #    utc_start 1990-10-28 07:00:00 (Sun)
  62806694400, #      utc_end 1991-04-07 08:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62806694400, #    utc_start 1991-04-07 08:00:00 (Sun)
  62824230000, #      utc_end 1991-10-27 07:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62824230000, #    utc_start 1991-10-27 07:00:00 (Sun)
  62838144000, #      utc_end 1992-04-05 08:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62838144000, #    utc_start 1992-04-05 08:00:00 (Sun)
  62855679600, #      utc_end 1992-10-25 07:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62855679600, #    utc_start 1992-10-25 07:00:00 (Sun)
  62869593600, #      utc_end 1993-04-04 08:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62869593600, #    utc_start 1993-04-04 08:00:00 (Sun)
  62887734000, #      utc_end 1993-10-31 07:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62887734000, #    utc_start 1993-10-31 07:00:00 (Sun)
  62901043200, #      utc_end 1994-04-03 08:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62901043200, #    utc_start 1994-04-03 08:00:00 (Sun)
  62919183600, #      utc_end 1994-10-30 07:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62919183600, #    utc_start 1994-10-30 07:00:00 (Sun)
  62932492800, #      utc_end 1995-04-02 08:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62932492800, #    utc_start 1995-04-02 08:00:00 (Sun)
  62950633200, #      utc_end 1995-10-29 07:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62950633200, #    utc_start 1995-10-29 07:00:00 (Sun)
  62964547200, #      utc_end 1996-04-07 08:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62964547200, #    utc_start 1996-04-07 08:00:00 (Sun)
  62982082800, #      utc_end 1996-10-27 07:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62982082800, #    utc_start 1996-10-27 07:00:00 (Sun)
  62995996800, #      utc_end 1997-04-06 08:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62995996800, #    utc_start 1997-04-06 08:00:00 (Sun)
  63013532400, #      utc_end 1997-10-26 07:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63013532400, #    utc_start 1997-10-26 07:00:00 (Sun)
  63027446400, #      utc_end 1998-04-05 08:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63027446400, #    utc_start 1998-04-05 08:00:00 (Sun)
  63044982000, #      utc_end 1998-10-25 07:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63044982000, #    utc_start 1998-10-25 07:00:00 (Sun)
  63058896000, #      utc_end 1999-04-04 08:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63058896000, #    utc_start 1999-04-04 08:00:00 (Sun)
  63077036400, #      utc_end 1999-10-31 07:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63077036400, #    utc_start 1999-10-31 07:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108486000, #      utc_end 2000-10-29 07:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108486000, #    utc_start 2000-10-29 07:00:00 (Sun)
  63121795200, #      utc_end 2001-04-01 08:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121777200, #    local_end 2001-04-01 03:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63121795200, #    utc_start 2001-04-01 08:00:00 (Sun)
  63139935600, #      utc_end 2001-10-28 07:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63139935600, #    utc_start 2001-10-28 07:00:00 (Sun)
  63153849600, #      utc_end 2002-04-07 08:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63153849600, #    utc_start 2002-04-07 08:00:00 (Sun)
  63171385200, #      utc_end 2002-10-27 07:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63171385200, #    utc_start 2002-10-27 07:00:00 (Sun)
  63185299200, #      utc_end 2003-04-06 08:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63185299200, #    utc_start 2003-04-06 08:00:00 (Sun)
  63202834800, #      utc_end 2003-10-26 07:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63202834800, #    utc_start 2003-10-26 07:00:00 (Sun)
  63216748800, #      utc_end 2004-04-04 08:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63216748800, #    utc_start 2004-04-04 08:00:00 (Sun)
  63234889200, #      utc_end 2004-10-31 07:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63234889200, #    utc_start 2004-10-31 07:00:00 (Sun)
  63248198400, #      utc_end 2005-04-03 08:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63248198400, #    utc_start 2005-04-03 08:00:00 (Sun)
  63266338800, #      utc_end 2005-10-30 07:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63266338800, #    utc_start 2005-10-30 07:00:00 (Sun)
  63279648000, #      utc_end 2006-04-02 08:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63279648000, #    utc_start 2006-04-02 08:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63309283200, #      utc_end 2007-03-11 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63309283200, #    utc_start 2007-03-11 08:00:00 (Sun)
  63329842800, #      utc_end 2007-11-04 07:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329842800, #    utc_start 2007-11-04 07:00:00 (Sun)
  63340732800, #      utc_end 2008-03-09 08:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63340732800, #    utc_start 2008-03-09 08:00:00 (Sun)
  63361292400, #      utc_end 2008-11-02 07:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63361292400, #    utc_start 2008-11-02 07:00:00 (Sun)
  63372182400, #      utc_end 2009-03-08 08:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63372182400, #    utc_start 2009-03-08 08:00:00 (Sun)
  63392742000, #      utc_end 2009-11-01 07:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63392742000, #    utc_start 2009-11-01 07:00:00 (Sun)
  63404236800, #      utc_end 2010-03-14 08:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63404236800, #    utc_start 2010-03-14 08:00:00 (Sun)
  63424796400, #      utc_end 2010-11-07 07:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424796400, #    utc_start 2010-11-07 07:00:00 (Sun)
  63435686400, #      utc_end 2011-03-13 08:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63435686400, #    utc_start 2011-03-13 08:00:00 (Sun)
  63456246000, #      utc_end 2011-11-06 07:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63456246000, #    utc_start 2011-11-06 07:00:00 (Sun)
  63467136000, #      utc_end 2012-03-11 08:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63467136000, #    utc_start 2012-03-11 08:00:00 (Sun)
  63487695600, #      utc_end 2012-11-04 07:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487695600, #    utc_start 2012-11-04 07:00:00 (Sun)
  63498585600, #      utc_end 2013-03-10 08:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63498585600, #    utc_start 2013-03-10 08:00:00 (Sun)
  63519145200, #      utc_end 2013-11-03 07:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63519145200, #    utc_start 2013-11-03 07:00:00 (Sun)
  63530035200, #      utc_end 2014-03-09 08:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63530035200, #    utc_start 2014-03-09 08:00:00 (Sun)
  63550594800, #      utc_end 2014-11-02 07:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63550594800, #    utc_start 2014-11-02 07:00:00 (Sun)
  63561484800, #      utc_end 2015-03-08 08:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63561484800, #    utc_start 2015-03-08 08:00:00 (Sun)
  63582044400, #      utc_end 2015-11-01 07:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63582044400, #    utc_start 2015-11-01 07:00:00 (Sun)
  63593539200, #      utc_end 2016-03-13 08:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63593539200, #    utc_start 2016-03-13 08:00:00 (Sun)
  63614098800, #      utc_end 2016-11-06 07:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63614098800, #    utc_start 2016-11-06 07:00:00 (Sun)
  63624988800, #      utc_end 2017-03-12 08:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63624988800, #    utc_start 2017-03-12 08:00:00 (Sun)
  63645548400, #      utc_end 2017-11-05 07:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63645548400, #    utc_start 2017-11-05 07:00:00 (Sun)
  63656438400, #      utc_end 2018-03-11 08:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63656438400, #    utc_start 2018-03-11 08:00:00 (Sun)
  63676998000, #      utc_end 2018-11-04 07:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676998000, #    utc_start 2018-11-04 07:00:00 (Sun)
  63687888000, #      utc_end 2019-03-10 08:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63687888000, #    utc_start 2019-03-10 08:00:00 (Sun)
  63708447600, #      utc_end 2019-11-03 07:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63708447600, #    utc_start 2019-11-03 07:00:00 (Sun)
  63719337600, #      utc_end 2020-03-08 08:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63719337600, #    utc_start 2020-03-08 08:00:00 (Sun)
  63739897200, #      utc_end 2020-11-01 07:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739897200, #    utc_start 2020-11-01 07:00:00 (Sun)
  63751392000, #      utc_end 2021-03-14 08:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63751392000, #    utc_start 2021-03-14 08:00:00 (Sun)
  63771951600, #      utc_end 2021-11-07 07:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771951600, #    utc_start 2021-11-07 07:00:00 (Sun)
  63782841600, #      utc_end 2022-03-13 08:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63782841600, #    utc_start 2022-03-13 08:00:00 (Sun)
  63803401200, #      utc_end 2022-11-06 07:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63803401200, #    utc_start 2022-11-06 07:00:00 (Sun)
  63814291200, #      utc_end 2023-03-12 08:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63814291200, #    utc_start 2023-03-12 08:00:00 (Sun)
  63834850800, #      utc_end 2023-11-05 07:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834850800, #    utc_start 2023-11-05 07:00:00 (Sun)
  63845740800, #      utc_end 2024-03-10 08:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63845740800, #    utc_start 2024-03-10 08:00:00 (Sun)
  63866300400, #      utc_end 2024-11-03 07:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63866300400, #    utc_start 2024-11-03 07:00:00 (Sun)
  63877190400, #      utc_end 2025-03-09 08:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63877190400, #    utc_start 2025-03-09 08:00:00 (Sun)
  63897750000, #      utc_end 2025-11-02 07:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897750000, #    utc_start 2025-11-02 07:00:00 (Sun)
  63908640000, #      utc_end 2026-03-08 08:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63908640000, #    utc_start 2026-03-08 08:00:00 (Sun)
  63929199600, #      utc_end 2026-11-01 07:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63929199600, #    utc_start 2026-11-01 07:00:00 (Sun)
  63940694400, #      utc_end 2027-03-14 08:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63940694400, #    utc_start 2027-03-14 08:00:00 (Sun)
  63961254000, #      utc_end 2027-11-07 07:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {49}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730576,
      'local_rd_secs' => 10800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730576,
      'utc_rd_secs' => 10800,
      'utc_year' => 2002
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730576,
      'local_rd_secs' => 28800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730576,
      'utc_rd_secs' => 28800,
      'utc_year' => 2002
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_RANKIN_INLET

    $main::fatpacked{"DateTime/TimeZone/America/Recife.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_RECIFE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Recife;
  $DateTime::TimeZone::America::Recife::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Recife::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368465976, #      utc_end 1914-01-01 02:19:36 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  -8376,
  0,
  'LMT',
      ],
      [
  60368465976, #    utc_start 1914-01-01 02:19:36 (Thu)
  60928725600, #      utc_end 1931-10-03 14:00:00 (Sat)
  60368455176, #  local_start 1913-12-31 23:19:36 (Wed)
  60928714800, #    local_end 1931-10-03 11:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  60928725600, #    utc_start 1931-10-03 14:00:00 (Sat)
  60944320800, #      utc_end 1932-04-01 02:00:00 (Fri)
  60928718400, #  local_start 1931-10-03 12:00:00 (Sat)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -7200,
  1,
  'BRST',
      ],
      [
  60944320800, #    utc_start 1932-04-01 02:00:00 (Fri)
  60960308400, #      utc_end 1932-10-03 03:00:00 (Mon)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60960297600, #    local_end 1932-10-03 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  60960308400, #    utc_start 1932-10-03 03:00:00 (Mon)
  60975856800, #      utc_end 1933-04-01 02:00:00 (Sat)
  60960301200, #  local_start 1932-10-03 01:00:00 (Mon)
  60975849600, #    local_end 1933-04-01 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  60975856800, #    utc_start 1933-04-01 02:00:00 (Sat)
  61501863600, #      utc_end 1949-12-01 03:00:00 (Thu)
  60975846000, #  local_start 1933-03-31 23:00:00 (Fri)
  61501852800, #    local_end 1949-12-01 00:00:00 (Thu)
  -10800,
  0,
  'BRT',
      ],
      [
  61501863600, #    utc_start 1949-12-01 03:00:00 (Thu)
  61513614000, #      utc_end 1950-04-16 03:00:00 (Sun)
  61501856400, #  local_start 1949-12-01 01:00:00 (Thu)
  61513606800, #    local_end 1950-04-16 01:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61513614000, #    utc_start 1950-04-16 03:00:00 (Sun)
  61533399600, #      utc_end 1950-12-01 03:00:00 (Fri)
  61513603200, #  local_start 1950-04-16 00:00:00 (Sun)
  61533388800, #    local_end 1950-12-01 00:00:00 (Fri)
  -10800,
  0,
  'BRT',
      ],
      [
  61533399600, #    utc_start 1950-12-01 03:00:00 (Fri)
  61543850400, #      utc_end 1951-04-01 02:00:00 (Sun)
  61533392400, #  local_start 1950-12-01 01:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61543850400, #    utc_start 1951-04-01 02:00:00 (Sun)
  61564935600, #      utc_end 1951-12-01 03:00:00 (Sat)
  61543839600, #  local_start 1951-03-31 23:00:00 (Sat)
  61564924800, #    local_end 1951-12-01 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  61564935600, #    utc_start 1951-12-01 03:00:00 (Sat)
  61575472800, #      utc_end 1952-04-01 02:00:00 (Tue)
  61564928400, #  local_start 1951-12-01 01:00:00 (Sat)
  61575465600, #    local_end 1952-04-01 00:00:00 (Tue)
  -7200,
  1,
  'BRST',
      ],
      [
  61575472800, #    utc_start 1952-04-01 02:00:00 (Tue)
  61596558000, #      utc_end 1952-12-01 03:00:00 (Mon)
  61575462000, #  local_start 1952-03-31 23:00:00 (Mon)
  61596547200, #    local_end 1952-12-01 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  61596558000, #    utc_start 1952-12-01 03:00:00 (Mon)
  61604330400, #      utc_end 1953-03-01 02:00:00 (Sun)
  61596550800, #  local_start 1952-12-01 01:00:00 (Mon)
  61604323200, #    local_end 1953-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61604330400, #    utc_start 1953-03-01 02:00:00 (Sun)
  61944318000, #      utc_end 1963-12-09 03:00:00 (Mon)
  61604319600, #  local_start 1953-02-28 23:00:00 (Sat)
  61944307200, #    local_end 1963-12-09 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  61944318000, #    utc_start 1963-12-09 03:00:00 (Mon)
  61951485600, #      utc_end 1964-03-01 02:00:00 (Sun)
  61944310800, #  local_start 1963-12-09 01:00:00 (Mon)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61951485600, #    utc_start 1964-03-01 02:00:00 (Sun)
  61980519600, #      utc_end 1965-01-31 03:00:00 (Sun)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61980508800, #    local_end 1965-01-31 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  61980519600, #    utc_start 1965-01-31 03:00:00 (Sun)
  61985613600, #      utc_end 1965-03-31 02:00:00 (Wed)
  61980512400, #  local_start 1965-01-31 01:00:00 (Sun)
  61985606400, #    local_end 1965-03-31 00:00:00 (Wed)
  -7200,
  1,
  'BRST',
      ],
      [
  61985613600, #    utc_start 1965-03-31 02:00:00 (Wed)
  62006785200, #      utc_end 1965-12-01 03:00:00 (Wed)
  61985602800, #  local_start 1965-03-30 23:00:00 (Tue)
  62006774400, #    local_end 1965-12-01 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  62006785200, #    utc_start 1965-12-01 03:00:00 (Wed)
  62014557600, #      utc_end 1966-03-01 02:00:00 (Tue)
  62006778000, #  local_start 1965-12-01 01:00:00 (Wed)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -7200,
  1,
  'BRST',
      ],
      [
  62014557600, #    utc_start 1966-03-01 02:00:00 (Tue)
  62035729200, #      utc_end 1966-11-01 03:00:00 (Tue)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62035718400, #    local_end 1966-11-01 00:00:00 (Tue)
  -10800,
  0,
  'BRT',
      ],
      [
  62035729200, #    utc_start 1966-11-01 03:00:00 (Tue)
  62046093600, #      utc_end 1967-03-01 02:00:00 (Wed)
  62035722000, #  local_start 1966-11-01 01:00:00 (Tue)
  62046086400, #    local_end 1967-03-01 00:00:00 (Wed)
  -7200,
  1,
  'BRST',
      ],
      [
  62046093600, #    utc_start 1967-03-01 02:00:00 (Wed)
  62067265200, #      utc_end 1967-11-01 03:00:00 (Wed)
  62046082800, #  local_start 1967-02-28 23:00:00 (Tue)
  62067254400, #    local_end 1967-11-01 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  62067265200, #    utc_start 1967-11-01 03:00:00 (Wed)
  62077716000, #      utc_end 1968-03-01 02:00:00 (Fri)
  62067258000, #  local_start 1967-11-01 01:00:00 (Wed)
  62077708800, #    local_end 1968-03-01 00:00:00 (Fri)
  -7200,
  1,
  'BRST',
      ],
      [
  62077716000, #    utc_start 1968-03-01 02:00:00 (Fri)
  62635431600, #      utc_end 1985-11-02 03:00:00 (Sat)
  62077705200, #  local_start 1968-02-29 23:00:00 (Thu)
  62635420800, #    local_end 1985-11-02 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  62635431600, #    utc_start 1985-11-02 03:00:00 (Sat)
  62646919200, #      utc_end 1986-03-15 02:00:00 (Sat)
  62635424400, #  local_start 1985-11-02 01:00:00 (Sat)
  62646912000, #    local_end 1986-03-15 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  62646919200, #    utc_start 1986-03-15 02:00:00 (Sat)
  62666276400, #      utc_end 1986-10-25 03:00:00 (Sat)
  62646908400, #  local_start 1986-03-14 23:00:00 (Fri)
  62666265600, #    local_end 1986-10-25 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  62666276400, #    utc_start 1986-10-25 03:00:00 (Sat)
  62675949600, #      utc_end 1987-02-14 02:00:00 (Sat)
  62666269200, #  local_start 1986-10-25 01:00:00 (Sat)
  62675942400, #    local_end 1987-02-14 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  62675949600, #    utc_start 1987-02-14 02:00:00 (Sat)
  62697812400, #      utc_end 1987-10-25 03:00:00 (Sun)
  62675938800, #  local_start 1987-02-13 23:00:00 (Fri)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62697812400, #    utc_start 1987-10-25 03:00:00 (Sun)
  62706880800, #      utc_end 1988-02-07 02:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62706873600, #    local_end 1988-02-07 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62706880800, #    utc_start 1988-02-07 02:00:00 (Sun)
  62728657200, #      utc_end 1988-10-16 03:00:00 (Sun)
  62706870000, #  local_start 1988-02-06 23:00:00 (Sat)
  62728646400, #    local_end 1988-10-16 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62728657200, #    utc_start 1988-10-16 03:00:00 (Sun)
  62737725600, #      utc_end 1989-01-29 02:00:00 (Sun)
  62728650000, #  local_start 1988-10-16 01:00:00 (Sun)
  62737718400, #    local_end 1989-01-29 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62737725600, #    utc_start 1989-01-29 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62737714800, #  local_start 1989-01-28 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62770384800, #      utc_end 1990-02-11 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62770377600, #    local_end 1990-02-11 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62770384800, #    utc_start 1990-02-11 02:00:00 (Sun)
  62789223600, #      utc_end 1990-09-17 03:00:00 (Mon)
  62770374000, #  local_start 1990-02-10 23:00:00 (Sat)
  62789212800, #    local_end 1990-09-17 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  62789223600, #    utc_start 1990-09-17 03:00:00 (Mon)
  63074343600, #      utc_end 1999-09-30 03:00:00 (Thu)
  62789212800, #  local_start 1990-09-17 00:00:00 (Mon)
  63074332800, #    local_end 1999-09-30 00:00:00 (Thu)
  -10800,
  0,
  'BRT',
      ],
      [
  63074343600, #    utc_start 1999-09-30 03:00:00 (Thu)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  63074332800, #  local_start 1999-09-30 00:00:00 (Thu)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087300000, #      utc_end 2000-02-27 02:00:00 (Sun)
  63074595600, #  local_start 1999-10-03 01:00:00 (Sun)
  63087292800, #    local_end 2000-02-27 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63087300000, #    utc_start 2000-02-27 02:00:00 (Sun)
  63106657200, #      utc_end 2000-10-08 03:00:00 (Sun)
  63087289200, #  local_start 2000-02-26 23:00:00 (Sat)
  63106646400, #    local_end 2000-10-08 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63106657200, #    utc_start 2000-10-08 03:00:00 (Sun)
  63107258400, #      utc_end 2000-10-15 02:00:00 (Sun)
  63106650000, #  local_start 2000-10-08 01:00:00 (Sun)
  63107251200, #    local_end 2000-10-15 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63107258400, #    utc_start 2000-10-15 02:00:00 (Sun)
  63136033200, #      utc_end 2001-09-13 03:00:00 (Thu)
  63107247600, #  local_start 2000-10-14 23:00:00 (Sat)
  63136022400, #    local_end 2001-09-13 00:00:00 (Thu)
  -10800,
  0,
  'BRT',
      ],
      [
  63136033200, #    utc_start 2001-09-13 03:00:00 (Thu)
  63138711600, #      utc_end 2001-10-14 03:00:00 (Sun)
  63136022400, #  local_start 2001-09-13 00:00:00 (Thu)
  63138700800, #    local_end 2001-10-14 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63138711600, #    utc_start 2001-10-14 03:00:00 (Sun)
  63149594400, #      utc_end 2002-02-17 02:00:00 (Sun)
  63138704400, #  local_start 2001-10-14 01:00:00 (Sun)
  63149587200, #    local_end 2002-02-17 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63149594400, #    utc_start 2002-02-17 02:00:00 (Sun)
  63169124400, #      utc_end 2002-10-01 03:00:00 (Tue)
  63149583600, #  local_start 2002-02-16 23:00:00 (Sat)
  63169113600, #    local_end 2002-10-01 00:00:00 (Tue)
  -10800,
  0,
  'BRT',
      ],
      [
  63169124400, #    utc_start 2002-10-01 03:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  63169113600, #  local_start 2002-10-01 00:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'BRT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {19}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_RECIFE

    $main::fatpacked{"DateTime/TimeZone/America/Regina.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_REGINA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Regina;
  $DateTime::TimeZone::America::Regina::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Regina::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60105481116, #      utc_end 1905-09-01 06:58:36 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60105456000, #    local_end 1905-09-01 00:00:00 (Fri)
  -25116,
  0,
  'LMT',
      ],
      [
  60105481116, #    utc_start 1905-09-01 06:58:36 (Fri)
  60503619600, #      utc_end 1918-04-14 09:00:00 (Sun)
  60105455916, #  local_start 1905-08-31 23:58:36 (Thu)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60503619600, #    utc_start 1918-04-14 09:00:00 (Sun)
  60520550400, #      utc_end 1918-10-27 08:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60520550400, #    utc_start 1918-10-27 08:00:00 (Sun)
  60884031600, #      utc_end 1930-05-04 07:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60884006400, #    local_end 1930-05-04 00:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60884031600, #    utc_start 1930-05-04 07:00:00 (Sun)
  60897333600, #      utc_end 1930-10-05 06:00:00 (Sun)
  60884010000, #  local_start 1930-05-04 01:00:00 (Sun)
  60897312000, #    local_end 1930-10-05 00:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60897333600, #    utc_start 1930-10-05 06:00:00 (Sun)
  60915481200, #      utc_end 1931-05-03 07:00:00 (Sun)
  60897308400, #  local_start 1930-10-04 23:00:00 (Sat)
  60915456000, #    local_end 1931-05-03 00:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60915481200, #    utc_start 1931-05-03 07:00:00 (Sun)
  60928783200, #      utc_end 1931-10-04 06:00:00 (Sun)
  60915459600, #  local_start 1931-05-03 01:00:00 (Sun)
  60928761600, #    local_end 1931-10-04 00:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60928783200, #    utc_start 1931-10-04 06:00:00 (Sun)
  60946930800, #      utc_end 1932-05-01 07:00:00 (Sun)
  60928758000, #  local_start 1931-10-03 23:00:00 (Sat)
  60946905600, #    local_end 1932-05-01 00:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60946930800, #    utc_start 1932-05-01 07:00:00 (Sun)
  60960232800, #      utc_end 1932-10-02 06:00:00 (Sun)
  60946909200, #  local_start 1932-05-01 01:00:00 (Sun)
  60960211200, #    local_end 1932-10-02 00:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60960232800, #    utc_start 1932-10-02 06:00:00 (Sun)
  60978985200, #      utc_end 1933-05-07 07:00:00 (Sun)
  60960207600, #  local_start 1932-10-01 23:00:00 (Sat)
  60978960000, #    local_end 1933-05-07 00:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60978985200, #    utc_start 1933-05-07 07:00:00 (Sun)
  60991682400, #      utc_end 1933-10-01 06:00:00 (Sun)
  60978963600, #  local_start 1933-05-07 01:00:00 (Sun)
  60991660800, #    local_end 1933-10-01 00:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60991682400, #    utc_start 1933-10-01 06:00:00 (Sun)
  61010434800, #      utc_end 1934-05-06 07:00:00 (Sun)
  60991657200, #  local_start 1933-09-30 23:00:00 (Sat)
  61010409600, #    local_end 1934-05-06 00:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61010434800, #    utc_start 1934-05-06 07:00:00 (Sun)
  61023736800, #      utc_end 1934-10-07 06:00:00 (Sun)
  61010413200, #  local_start 1934-05-06 01:00:00 (Sun)
  61023715200, #    local_end 1934-10-07 00:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61023736800, #    utc_start 1934-10-07 06:00:00 (Sun)
  61102969200, #      utc_end 1937-04-11 07:00:00 (Sun)
  61023711600, #  local_start 1934-10-06 23:00:00 (Sat)
  61102944000, #    local_end 1937-04-11 00:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61102969200, #    utc_start 1937-04-11 07:00:00 (Sun)
  61118690400, #      utc_end 1937-10-10 06:00:00 (Sun)
  61102947600, #  local_start 1937-04-11 01:00:00 (Sun)
  61118668800, #    local_end 1937-10-10 00:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61118690400, #    utc_start 1937-10-10 06:00:00 (Sun)
  61134418800, #      utc_end 1938-04-10 07:00:00 (Sun)
  61118665200, #  local_start 1937-10-09 23:00:00 (Sat)
  61134393600, #    local_end 1938-04-10 00:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61134418800, #    utc_start 1938-04-10 07:00:00 (Sun)
  61149535200, #      utc_end 1938-10-02 06:00:00 (Sun)
  61134397200, #  local_start 1938-04-10 01:00:00 (Sun)
  61149513600, #    local_end 1938-10-02 00:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61149535200, #    utc_start 1938-10-02 06:00:00 (Sun)
  61165868400, #      utc_end 1939-04-09 07:00:00 (Sun)
  61149510000, #  local_start 1938-10-01 23:00:00 (Sat)
  61165843200, #    local_end 1939-04-09 00:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61165868400, #    utc_start 1939-04-09 07:00:00 (Sun)
  61181589600, #      utc_end 1939-10-08 06:00:00 (Sun)
  61165846800, #  local_start 1939-04-09 01:00:00 (Sun)
  61181568000, #    local_end 1939-10-08 00:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61181589600, #    utc_start 1939-10-08 06:00:00 (Sun)
  61197922800, #      utc_end 1940-04-14 07:00:00 (Sun)
  61181564400, #  local_start 1939-10-07 23:00:00 (Sat)
  61197897600, #    local_end 1940-04-14 00:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61197922800, #    utc_start 1940-04-14 07:00:00 (Sun)
  61213644000, #      utc_end 1940-10-13 06:00:00 (Sun)
  61197901200, #  local_start 1940-04-14 01:00:00 (Sun)
  61213622400, #    local_end 1940-10-13 00:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61213644000, #    utc_start 1940-10-13 06:00:00 (Sun)
  61229372400, #      utc_end 1941-04-13 07:00:00 (Sun)
  61213618800, #  local_start 1940-10-12 23:00:00 (Sat)
  61229347200, #    local_end 1941-04-13 00:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61229372400, #    utc_start 1941-04-13 07:00:00 (Sun)
  61245093600, #      utc_end 1941-10-12 06:00:00 (Sun)
  61229350800, #  local_start 1941-04-13 01:00:00 (Sun)
  61245072000, #    local_end 1941-10-12 00:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61245093600, #    utc_start 1941-10-12 06:00:00 (Sun)
  61255472400, #      utc_end 1942-02-09 09:00:00 (Mon)
  61245068400, #  local_start 1941-10-11 23:00:00 (Sat)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -25200,
  0,
  'MST',
      ],
      [
  61255472400, #    utc_start 1942-02-09 09:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366266000, #    local_end 1945-08-14 17:00:00 (Tue)
  -21600,
  1,
  'MWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370294400, #      utc_end 1945-09-30 08:00:00 (Sun)
  61366266000, #  local_start 1945-08-14 17:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MPT',
      ],
      [
  61370294400, #    utc_start 1945-09-30 08:00:00 (Sun)
  61387232400, #      utc_end 1946-04-14 09:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61387207200, #    local_end 1946-04-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61387232400, #    utc_start 1946-04-14 09:00:00 (Sun)
  61402953600, #      utc_end 1946-10-13 08:00:00 (Sun)
  61387210800, #  local_start 1946-04-14 03:00:00 (Sun)
  61402932000, #    local_end 1946-10-13 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61402953600, #    utc_start 1946-10-13 08:00:00 (Sun)
  61419891600, #      utc_end 1947-04-27 09:00:00 (Sun)
  61402928400, #  local_start 1946-10-13 01:00:00 (Sun)
  61419866400, #    local_end 1947-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61419891600, #    utc_start 1947-04-27 09:00:00 (Sun)
  61433193600, #      utc_end 1947-09-28 08:00:00 (Sun)
  61419870000, #  local_start 1947-04-27 03:00:00 (Sun)
  61433172000, #    local_end 1947-09-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61433193600, #    utc_start 1947-09-28 08:00:00 (Sun)
  61451341200, #      utc_end 1948-04-25 09:00:00 (Sun)
  61433168400, #  local_start 1947-09-28 01:00:00 (Sun)
  61451316000, #    local_end 1948-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61451341200, #    utc_start 1948-04-25 09:00:00 (Sun)
  61464643200, #      utc_end 1948-09-26 08:00:00 (Sun)
  61451319600, #  local_start 1948-04-25 03:00:00 (Sun)
  61464621600, #    local_end 1948-09-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61464643200, #    utc_start 1948-09-26 08:00:00 (Sun)
  61482790800, #      utc_end 1949-04-24 09:00:00 (Sun)
  61464618000, #  local_start 1948-09-26 01:00:00 (Sun)
  61482765600, #    local_end 1949-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61482790800, #    utc_start 1949-04-24 09:00:00 (Sun)
  61496092800, #      utc_end 1949-09-25 08:00:00 (Sun)
  61482769200, #  local_start 1949-04-24 03:00:00 (Sun)
  61496071200, #    local_end 1949-09-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61496092800, #    utc_start 1949-09-25 08:00:00 (Sun)
  61514845200, #      utc_end 1950-04-30 09:00:00 (Sun)
  61496067600, #  local_start 1949-09-25 01:00:00 (Sun)
  61514820000, #    local_end 1950-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61514845200, #    utc_start 1950-04-30 09:00:00 (Sun)
  61527542400, #      utc_end 1950-09-24 08:00:00 (Sun)
  61514823600, #  local_start 1950-04-30 03:00:00 (Sun)
  61527520800, #    local_end 1950-09-24 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61527542400, #    utc_start 1950-09-24 08:00:00 (Sun)
  61546294800, #      utc_end 1951-04-29 09:00:00 (Sun)
  61527517200, #  local_start 1950-09-24 01:00:00 (Sun)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61546294800, #    utc_start 1951-04-29 09:00:00 (Sun)
  61559596800, #      utc_end 1951-09-30 08:00:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61559596800, #    utc_start 1951-09-30 08:00:00 (Sun)
  61577744400, #      utc_end 1952-04-27 09:00:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61577744400, #    utc_start 1952-04-27 09:00:00 (Sun)
  61591046400, #      utc_end 1952-09-28 08:00:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61591046400, #    utc_start 1952-09-28 08:00:00 (Sun)
  61609194000, #      utc_end 1953-04-26 09:00:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61609194000, #    utc_start 1953-04-26 09:00:00 (Sun)
  61622496000, #      utc_end 1953-09-27 08:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61622496000, #    utc_start 1953-09-27 08:00:00 (Sun)
  61640643600, #      utc_end 1954-04-25 09:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61640643600, #    utc_start 1954-04-25 09:00:00 (Sun)
  61653945600, #      utc_end 1954-09-26 08:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61653945600, #    utc_start 1954-09-26 08:00:00 (Sun)
  61672093200, #      utc_end 1955-04-24 09:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61672093200, #    utc_start 1955-04-24 09:00:00 (Sun)
  61685395200, #      utc_end 1955-09-25 08:00:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61685373600, #    local_end 1955-09-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61685395200, #    utc_start 1955-09-25 08:00:00 (Sun)
  61704147600, #      utc_end 1956-04-29 09:00:00 (Sun)
  61685370000, #  local_start 1955-09-25 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61704147600, #    utc_start 1956-04-29 09:00:00 (Sun)
  61717449600, #      utc_end 1956-09-30 08:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61717428000, #    local_end 1956-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61717449600, #    utc_start 1956-09-30 08:00:00 (Sun)
  61735597200, #      utc_end 1957-04-28 09:00:00 (Sun)
  61717424400, #  local_start 1956-09-30 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61735597200, #    utc_start 1957-04-28 09:00:00 (Sun)
  61748899200, #      utc_end 1957-09-29 08:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61748899200, #    utc_start 1957-09-29 08:00:00 (Sun)
  61798496400, #      utc_end 1959-04-26 09:00:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61798496400, #    utc_start 1959-04-26 09:00:00 (Sun)
  61814217600, #      utc_end 1959-10-25 08:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61814196000, #    local_end 1959-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61814217600, #    utc_start 1959-10-25 08:00:00 (Sun)
  61829946000, #      utc_end 1960-04-24 09:00:00 (Sun)
  61814192400, #  local_start 1959-10-25 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61829946000, #    utc_start 1960-04-24 09:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -21600,
  0,
  'CST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {26}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_REGINA

    $main::fatpacked{"DateTime/TimeZone/America/Resolute.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_RESOLUTE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Resolute;
  $DateTime::TimeZone::America::Resolute::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Resolute::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  61430745600, #      utc_end 1947-08-31 00:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  61430745600, #    local_end 1947-08-31 00:00:00 (Sun)
  0,
  0,
  '-00',
      ],
      [
  61430745600, #    utc_start 1947-08-31 00:00:00 (Sun)
  61987788000, #      utc_end 1965-04-25 06:00:00 (Sun)
  61430724000, #  local_start 1947-08-30 18:00:00 (Sat)
  61987766400, #    local_end 1965-04-25 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61987788000, #    utc_start 1965-04-25 06:00:00 (Sun)
  62004117600, #      utc_end 1965-10-31 06:00:00 (Sun)
  61987773600, #  local_start 1965-04-25 02:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -14400,
  1,
  'CDDT',
      ],
      [
  62004117600, #    utc_start 1965-10-31 06:00:00 (Sun)
  62461353600, #      utc_end 1980-04-27 08:00:00 (Sun)
  62004096000, #  local_start 1965-10-31 00:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62461353600, #    utc_start 1980-04-27 08:00:00 (Sun)
  62477074800, #      utc_end 1980-10-26 07:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62477074800, #    utc_start 1980-10-26 07:00:00 (Sun)
  62492803200, #      utc_end 1981-04-26 08:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62492803200, #    utc_start 1981-04-26 08:00:00 (Sun)
  62508524400, #      utc_end 1981-10-25 07:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62508524400, #    utc_start 1981-10-25 07:00:00 (Sun)
  62524252800, #      utc_end 1982-04-25 08:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62524252800, #    utc_start 1982-04-25 08:00:00 (Sun)
  62540578800, #      utc_end 1982-10-31 07:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62540578800, #    utc_start 1982-10-31 07:00:00 (Sun)
  62555702400, #      utc_end 1983-04-24 08:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62555702400, #    utc_start 1983-04-24 08:00:00 (Sun)
  62572028400, #      utc_end 1983-10-30 07:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62572028400, #    utc_start 1983-10-30 07:00:00 (Sun)
  62587756800, #      utc_end 1984-04-29 08:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62587756800, #    utc_start 1984-04-29 08:00:00 (Sun)
  62603478000, #      utc_end 1984-10-28 07:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62603478000, #    utc_start 1984-10-28 07:00:00 (Sun)
  62619206400, #      utc_end 1985-04-28 08:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62619206400, #    utc_start 1985-04-28 08:00:00 (Sun)
  62634927600, #      utc_end 1985-10-27 07:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62634927600, #    utc_start 1985-10-27 07:00:00 (Sun)
  62650656000, #      utc_end 1986-04-27 08:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62650656000, #    utc_start 1986-04-27 08:00:00 (Sun)
  62666377200, #      utc_end 1986-10-26 07:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62666377200, #    utc_start 1986-10-26 07:00:00 (Sun)
  62680291200, #      utc_end 1987-04-05 08:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62680291200, #    utc_start 1987-04-05 08:00:00 (Sun)
  62697826800, #      utc_end 1987-10-25 07:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62697826800, #    utc_start 1987-10-25 07:00:00 (Sun)
  62711740800, #      utc_end 1988-04-03 08:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62711740800, #    utc_start 1988-04-03 08:00:00 (Sun)
  62729881200, #      utc_end 1988-10-30 07:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62729881200, #    utc_start 1988-10-30 07:00:00 (Sun)
  62743190400, #      utc_end 1989-04-02 08:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62743190400, #    utc_start 1989-04-02 08:00:00 (Sun)
  62761330800, #      utc_end 1989-10-29 07:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62761330800, #    utc_start 1989-10-29 07:00:00 (Sun)
  62774640000, #      utc_end 1990-04-01 08:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62774640000, #    utc_start 1990-04-01 08:00:00 (Sun)
  62792780400, #      utc_end 1990-10-28 07:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62792780400, #    utc_start 1990-10-28 07:00:00 (Sun)
  62806694400, #      utc_end 1991-04-07 08:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62806694400, #    utc_start 1991-04-07 08:00:00 (Sun)
  62824230000, #      utc_end 1991-10-27 07:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62824230000, #    utc_start 1991-10-27 07:00:00 (Sun)
  62838144000, #      utc_end 1992-04-05 08:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62838144000, #    utc_start 1992-04-05 08:00:00 (Sun)
  62855679600, #      utc_end 1992-10-25 07:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62855679600, #    utc_start 1992-10-25 07:00:00 (Sun)
  62869593600, #      utc_end 1993-04-04 08:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62869593600, #    utc_start 1993-04-04 08:00:00 (Sun)
  62887734000, #      utc_end 1993-10-31 07:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62887734000, #    utc_start 1993-10-31 07:00:00 (Sun)
  62901043200, #      utc_end 1994-04-03 08:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62901043200, #    utc_start 1994-04-03 08:00:00 (Sun)
  62919183600, #      utc_end 1994-10-30 07:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62919183600, #    utc_start 1994-10-30 07:00:00 (Sun)
  62932492800, #      utc_end 1995-04-02 08:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62932492800, #    utc_start 1995-04-02 08:00:00 (Sun)
  62950633200, #      utc_end 1995-10-29 07:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62950633200, #    utc_start 1995-10-29 07:00:00 (Sun)
  62964547200, #      utc_end 1996-04-07 08:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62964547200, #    utc_start 1996-04-07 08:00:00 (Sun)
  62982082800, #      utc_end 1996-10-27 07:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62982082800, #    utc_start 1996-10-27 07:00:00 (Sun)
  62995996800, #      utc_end 1997-04-06 08:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62995996800, #    utc_start 1997-04-06 08:00:00 (Sun)
  63013532400, #      utc_end 1997-10-26 07:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63013532400, #    utc_start 1997-10-26 07:00:00 (Sun)
  63027446400, #      utc_end 1998-04-05 08:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63027446400, #    utc_start 1998-04-05 08:00:00 (Sun)
  63044982000, #      utc_end 1998-10-25 07:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63044982000, #    utc_start 1998-10-25 07:00:00 (Sun)
  63058896000, #      utc_end 1999-04-04 08:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63058896000, #    utc_start 1999-04-04 08:00:00 (Sun)
  63077036400, #      utc_end 1999-10-31 07:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63077036400, #    utc_start 1999-10-31 07:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108486000, #      utc_end 2000-10-29 07:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108486000, #    utc_start 2000-10-29 07:00:00 (Sun)
  63121795200, #      utc_end 2001-04-01 08:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121777200, #    local_end 2001-04-01 03:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63121795200, #    utc_start 2001-04-01 08:00:00 (Sun)
  63139935600, #      utc_end 2001-10-28 07:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63139935600, #    utc_start 2001-10-28 07:00:00 (Sun)
  63153849600, #      utc_end 2002-04-07 08:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63153849600, #    utc_start 2002-04-07 08:00:00 (Sun)
  63171385200, #      utc_end 2002-10-27 07:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63171385200, #    utc_start 2002-10-27 07:00:00 (Sun)
  63185299200, #      utc_end 2003-04-06 08:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63185299200, #    utc_start 2003-04-06 08:00:00 (Sun)
  63202834800, #      utc_end 2003-10-26 07:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63202834800, #    utc_start 2003-10-26 07:00:00 (Sun)
  63216748800, #      utc_end 2004-04-04 08:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63216748800, #    utc_start 2004-04-04 08:00:00 (Sun)
  63234889200, #      utc_end 2004-10-31 07:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63234889200, #    utc_start 2004-10-31 07:00:00 (Sun)
  63248198400, #      utc_end 2005-04-03 08:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63248198400, #    utc_start 2005-04-03 08:00:00 (Sun)
  63266338800, #      utc_end 2005-10-30 07:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63266338800, #    utc_start 2005-10-30 07:00:00 (Sun)
  63279648000, #      utc_end 2006-04-02 08:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63279648000, #    utc_start 2006-04-02 08:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63309283200, #      utc_end 2007-03-11 08:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63309265200, #    local_end 2007-03-11 03:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63309283200, #    utc_start 2007-03-11 08:00:00 (Sun)
  63329842800, #      utc_end 2007-11-04 07:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329842800, #    utc_start 2007-11-04 07:00:00 (Sun)
  63340732800, #      utc_end 2008-03-09 08:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63340732800, #    utc_start 2008-03-09 08:00:00 (Sun)
  63361292400, #      utc_end 2008-11-02 07:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63361292400, #    utc_start 2008-11-02 07:00:00 (Sun)
  63372182400, #      utc_end 2009-03-08 08:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63372182400, #    utc_start 2009-03-08 08:00:00 (Sun)
  63392742000, #      utc_end 2009-11-01 07:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63392742000, #    utc_start 2009-11-01 07:00:00 (Sun)
  63404236800, #      utc_end 2010-03-14 08:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63404236800, #    utc_start 2010-03-14 08:00:00 (Sun)
  63424796400, #      utc_end 2010-11-07 07:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424796400, #    utc_start 2010-11-07 07:00:00 (Sun)
  63435686400, #      utc_end 2011-03-13 08:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63435686400, #    utc_start 2011-03-13 08:00:00 (Sun)
  63456246000, #      utc_end 2011-11-06 07:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63456246000, #    utc_start 2011-11-06 07:00:00 (Sun)
  63467136000, #      utc_end 2012-03-11 08:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63467136000, #    utc_start 2012-03-11 08:00:00 (Sun)
  63487695600, #      utc_end 2012-11-04 07:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487695600, #    utc_start 2012-11-04 07:00:00 (Sun)
  63498585600, #      utc_end 2013-03-10 08:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63498585600, #    utc_start 2013-03-10 08:00:00 (Sun)
  63519145200, #      utc_end 2013-11-03 07:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63519145200, #    utc_start 2013-11-03 07:00:00 (Sun)
  63530035200, #      utc_end 2014-03-09 08:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63530035200, #    utc_start 2014-03-09 08:00:00 (Sun)
  63550594800, #      utc_end 2014-11-02 07:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63550594800, #    utc_start 2014-11-02 07:00:00 (Sun)
  63561484800, #      utc_end 2015-03-08 08:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63561484800, #    utc_start 2015-03-08 08:00:00 (Sun)
  63582044400, #      utc_end 2015-11-01 07:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63582044400, #    utc_start 2015-11-01 07:00:00 (Sun)
  63593539200, #      utc_end 2016-03-13 08:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63593539200, #    utc_start 2016-03-13 08:00:00 (Sun)
  63614098800, #      utc_end 2016-11-06 07:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63614098800, #    utc_start 2016-11-06 07:00:00 (Sun)
  63624988800, #      utc_end 2017-03-12 08:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63624988800, #    utc_start 2017-03-12 08:00:00 (Sun)
  63645548400, #      utc_end 2017-11-05 07:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63645548400, #    utc_start 2017-11-05 07:00:00 (Sun)
  63656438400, #      utc_end 2018-03-11 08:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63656438400, #    utc_start 2018-03-11 08:00:00 (Sun)
  63676998000, #      utc_end 2018-11-04 07:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676998000, #    utc_start 2018-11-04 07:00:00 (Sun)
  63687888000, #      utc_end 2019-03-10 08:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63687888000, #    utc_start 2019-03-10 08:00:00 (Sun)
  63708447600, #      utc_end 2019-11-03 07:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63708447600, #    utc_start 2019-11-03 07:00:00 (Sun)
  63719337600, #      utc_end 2020-03-08 08:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63719337600, #    utc_start 2020-03-08 08:00:00 (Sun)
  63739897200, #      utc_end 2020-11-01 07:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739897200, #    utc_start 2020-11-01 07:00:00 (Sun)
  63751392000, #      utc_end 2021-03-14 08:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63751392000, #    utc_start 2021-03-14 08:00:00 (Sun)
  63771951600, #      utc_end 2021-11-07 07:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771951600, #    utc_start 2021-11-07 07:00:00 (Sun)
  63782841600, #      utc_end 2022-03-13 08:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63782841600, #    utc_start 2022-03-13 08:00:00 (Sun)
  63803401200, #      utc_end 2022-11-06 07:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63803401200, #    utc_start 2022-11-06 07:00:00 (Sun)
  63814291200, #      utc_end 2023-03-12 08:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63814291200, #    utc_start 2023-03-12 08:00:00 (Sun)
  63834850800, #      utc_end 2023-11-05 07:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834850800, #    utc_start 2023-11-05 07:00:00 (Sun)
  63845740800, #      utc_end 2024-03-10 08:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63845740800, #    utc_start 2024-03-10 08:00:00 (Sun)
  63866300400, #      utc_end 2024-11-03 07:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63866300400, #    utc_start 2024-11-03 07:00:00 (Sun)
  63877190400, #      utc_end 2025-03-09 08:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63877190400, #    utc_start 2025-03-09 08:00:00 (Sun)
  63897750000, #      utc_end 2025-11-02 07:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897750000, #    utc_start 2025-11-02 07:00:00 (Sun)
  63908640000, #      utc_end 2026-03-08 08:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63908640000, #    utc_start 2026-03-08 08:00:00 (Sun)
  63929199600, #      utc_end 2026-11-01 07:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63929199600, #    utc_start 2026-11-01 07:00:00 (Sun)
  63940694400, #      utc_end 2027-03-14 08:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63940694400, #    utc_start 2027-03-14 08:00:00 (Sun)
  63961254000, #      utc_end 2027-11-07 07:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {49}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732746,
      'local_rd_secs' => 10800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732746,
      'utc_rd_secs' => 10800,
      'utc_year' => 2008
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732746,
      'local_rd_secs' => 28800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732746,
      'utc_rd_secs' => 28800,
      'utc_year' => 2008
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_RESOLUTE

    $main::fatpacked{"DateTime/TimeZone/America/Rio_Branco.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_RIO_BRANCO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Rio_Branco;
  $DateTime::TimeZone::America::Rio_Branco::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Rio_Branco::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368473872, #      utc_end 1914-01-01 04:31:12 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  -16272,
  0,
  'LMT',
      ],
      [
  60368473872, #    utc_start 1914-01-01 04:31:12 (Thu)
  60928732800, #      utc_end 1931-10-03 16:00:00 (Sat)
  60368455872, #  local_start 1913-12-31 23:31:12 (Wed)
  60928714800, #    local_end 1931-10-03 11:00:00 (Sat)
  -18000,
  0,
  'ACT',
      ],
      [
  60928732800, #    utc_start 1931-10-03 16:00:00 (Sat)
  60944328000, #      utc_end 1932-04-01 04:00:00 (Fri)
  60928718400, #  local_start 1931-10-03 12:00:00 (Sat)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -14400,
  1,
  'ACST',
      ],
      [
  60944328000, #    utc_start 1932-04-01 04:00:00 (Fri)
  60960315600, #      utc_end 1932-10-03 05:00:00 (Mon)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60960297600, #    local_end 1932-10-03 00:00:00 (Mon)
  -18000,
  0,
  'ACT',
      ],
      [
  60960315600, #    utc_start 1932-10-03 05:00:00 (Mon)
  60975864000, #      utc_end 1933-04-01 04:00:00 (Sat)
  60960301200, #  local_start 1932-10-03 01:00:00 (Mon)
  60975849600, #    local_end 1933-04-01 00:00:00 (Sat)
  -14400,
  1,
  'ACST',
      ],
      [
  60975864000, #    utc_start 1933-04-01 04:00:00 (Sat)
  61501870800, #      utc_end 1949-12-01 05:00:00 (Thu)
  60975846000, #  local_start 1933-03-31 23:00:00 (Fri)
  61501852800, #    local_end 1949-12-01 00:00:00 (Thu)
  -18000,
  0,
  'ACT',
      ],
      [
  61501870800, #    utc_start 1949-12-01 05:00:00 (Thu)
  61513621200, #      utc_end 1950-04-16 05:00:00 (Sun)
  61501856400, #  local_start 1949-12-01 01:00:00 (Thu)
  61513606800, #    local_end 1950-04-16 01:00:00 (Sun)
  -14400,
  1,
  'ACST',
      ],
      [
  61513621200, #    utc_start 1950-04-16 05:00:00 (Sun)
  61533406800, #      utc_end 1950-12-01 05:00:00 (Fri)
  61513603200, #  local_start 1950-04-16 00:00:00 (Sun)
  61533388800, #    local_end 1950-12-01 00:00:00 (Fri)
  -18000,
  0,
  'ACT',
      ],
      [
  61533406800, #    utc_start 1950-12-01 05:00:00 (Fri)
  61543857600, #      utc_end 1951-04-01 04:00:00 (Sun)
  61533392400, #  local_start 1950-12-01 01:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  -14400,
  1,
  'ACST',
      ],
      [
  61543857600, #    utc_start 1951-04-01 04:00:00 (Sun)
  61564942800, #      utc_end 1951-12-01 05:00:00 (Sat)
  61543839600, #  local_start 1951-03-31 23:00:00 (Sat)
  61564924800, #    local_end 1951-12-01 00:00:00 (Sat)
  -18000,
  0,
  'ACT',
      ],
      [
  61564942800, #    utc_start 1951-12-01 05:00:00 (Sat)
  61575480000, #      utc_end 1952-04-01 04:00:00 (Tue)
  61564928400, #  local_start 1951-12-01 01:00:00 (Sat)
  61575465600, #    local_end 1952-04-01 00:00:00 (Tue)
  -14400,
  1,
  'ACST',
      ],
      [
  61575480000, #    utc_start 1952-04-01 04:00:00 (Tue)
  61596565200, #      utc_end 1952-12-01 05:00:00 (Mon)
  61575462000, #  local_start 1952-03-31 23:00:00 (Mon)
  61596547200, #    local_end 1952-12-01 00:00:00 (Mon)
  -18000,
  0,
  'ACT',
      ],
      [
  61596565200, #    utc_start 1952-12-01 05:00:00 (Mon)
  61604337600, #      utc_end 1953-03-01 04:00:00 (Sun)
  61596550800, #  local_start 1952-12-01 01:00:00 (Mon)
  61604323200, #    local_end 1953-03-01 00:00:00 (Sun)
  -14400,
  1,
  'ACST',
      ],
      [
  61604337600, #    utc_start 1953-03-01 04:00:00 (Sun)
  61944325200, #      utc_end 1963-12-09 05:00:00 (Mon)
  61604319600, #  local_start 1953-02-28 23:00:00 (Sat)
  61944307200, #    local_end 1963-12-09 00:00:00 (Mon)
  -18000,
  0,
  'ACT',
      ],
      [
  61944325200, #    utc_start 1963-12-09 05:00:00 (Mon)
  61951492800, #      utc_end 1964-03-01 04:00:00 (Sun)
  61944310800, #  local_start 1963-12-09 01:00:00 (Mon)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -14400,
  1,
  'ACST',
      ],
      [
  61951492800, #    utc_start 1964-03-01 04:00:00 (Sun)
  61980526800, #      utc_end 1965-01-31 05:00:00 (Sun)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61980508800, #    local_end 1965-01-31 00:00:00 (Sun)
  -18000,
  0,
  'ACT',
      ],
      [
  61980526800, #    utc_start 1965-01-31 05:00:00 (Sun)
  61985620800, #      utc_end 1965-03-31 04:00:00 (Wed)
  61980512400, #  local_start 1965-01-31 01:00:00 (Sun)
  61985606400, #    local_end 1965-03-31 00:00:00 (Wed)
  -14400,
  1,
  'ACST',
      ],
      [
  61985620800, #    utc_start 1965-03-31 04:00:00 (Wed)
  62006792400, #      utc_end 1965-12-01 05:00:00 (Wed)
  61985602800, #  local_start 1965-03-30 23:00:00 (Tue)
  62006774400, #    local_end 1965-12-01 00:00:00 (Wed)
  -18000,
  0,
  'ACT',
      ],
      [
  62006792400, #    utc_start 1965-12-01 05:00:00 (Wed)
  62014564800, #      utc_end 1966-03-01 04:00:00 (Tue)
  62006778000, #  local_start 1965-12-01 01:00:00 (Wed)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -14400,
  1,
  'ACST',
      ],
      [
  62014564800, #    utc_start 1966-03-01 04:00:00 (Tue)
  62035736400, #      utc_end 1966-11-01 05:00:00 (Tue)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62035718400, #    local_end 1966-11-01 00:00:00 (Tue)
  -18000,
  0,
  'ACT',
      ],
      [
  62035736400, #    utc_start 1966-11-01 05:00:00 (Tue)
  62046100800, #      utc_end 1967-03-01 04:00:00 (Wed)
  62035722000, #  local_start 1966-11-01 01:00:00 (Tue)
  62046086400, #    local_end 1967-03-01 00:00:00 (Wed)
  -14400,
  1,
  'ACST',
      ],
      [
  62046100800, #    utc_start 1967-03-01 04:00:00 (Wed)
  62067272400, #      utc_end 1967-11-01 05:00:00 (Wed)
  62046082800, #  local_start 1967-02-28 23:00:00 (Tue)
  62067254400, #    local_end 1967-11-01 00:00:00 (Wed)
  -18000,
  0,
  'ACT',
      ],
      [
  62067272400, #    utc_start 1967-11-01 05:00:00 (Wed)
  62077723200, #      utc_end 1968-03-01 04:00:00 (Fri)
  62067258000, #  local_start 1967-11-01 01:00:00 (Wed)
  62077708800, #    local_end 1968-03-01 00:00:00 (Fri)
  -14400,
  1,
  'ACST',
      ],
      [
  62077723200, #    utc_start 1968-03-01 04:00:00 (Fri)
  62635438800, #      utc_end 1985-11-02 05:00:00 (Sat)
  62077705200, #  local_start 1968-02-29 23:00:00 (Thu)
  62635420800, #    local_end 1985-11-02 00:00:00 (Sat)
  -18000,
  0,
  'ACT',
      ],
      [
  62635438800, #    utc_start 1985-11-02 05:00:00 (Sat)
  62646926400, #      utc_end 1986-03-15 04:00:00 (Sat)
  62635424400, #  local_start 1985-11-02 01:00:00 (Sat)
  62646912000, #    local_end 1986-03-15 00:00:00 (Sat)
  -14400,
  1,
  'ACST',
      ],
      [
  62646926400, #    utc_start 1986-03-15 04:00:00 (Sat)
  62666283600, #      utc_end 1986-10-25 05:00:00 (Sat)
  62646908400, #  local_start 1986-03-14 23:00:00 (Fri)
  62666265600, #    local_end 1986-10-25 00:00:00 (Sat)
  -18000,
  0,
  'ACT',
      ],
      [
  62666283600, #    utc_start 1986-10-25 05:00:00 (Sat)
  62675956800, #      utc_end 1987-02-14 04:00:00 (Sat)
  62666269200, #  local_start 1986-10-25 01:00:00 (Sat)
  62675942400, #    local_end 1987-02-14 00:00:00 (Sat)
  -14400,
  1,
  'ACST',
      ],
      [
  62675956800, #    utc_start 1987-02-14 04:00:00 (Sat)
  62697819600, #      utc_end 1987-10-25 05:00:00 (Sun)
  62675938800, #  local_start 1987-02-13 23:00:00 (Fri)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -18000,
  0,
  'ACT',
      ],
      [
  62697819600, #    utc_start 1987-10-25 05:00:00 (Sun)
  62706888000, #      utc_end 1988-02-07 04:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62706873600, #    local_end 1988-02-07 00:00:00 (Sun)
  -14400,
  1,
  'ACST',
      ],
      [
  62706888000, #    utc_start 1988-02-07 04:00:00 (Sun)
  62725726800, #      utc_end 1988-09-12 05:00:00 (Mon)
  62706870000, #  local_start 1988-02-06 23:00:00 (Sat)
  62725708800, #    local_end 1988-09-12 00:00:00 (Mon)
  -18000,
  0,
  'ACT',
      ],
      [
  62725726800, #    utc_start 1988-09-12 05:00:00 (Mon)
  63349966800, #      utc_end 2008-06-24 05:00:00 (Tue)
  62725708800, #  local_start 1988-09-12 00:00:00 (Mon)
  63349948800, #    local_end 2008-06-24 00:00:00 (Tue)
  -18000,
  0,
  'ACT',
      ],
      [
  63349966800, #    utc_start 2008-06-24 05:00:00 (Tue)
  63519739200, #      utc_end 2013-11-10 04:00:00 (Sun)
  63349952400, #  local_start 2008-06-24 01:00:00 (Tue)
  63519724800, #    local_end 2013-11-10 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  63519739200, #    utc_start 2013-11-10 04:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63519721200, #  local_start 2013-11-09 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -18000,
  0,
  'ACT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {14}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_RIO_BRANCO

    $main::fatpacked{"DateTime/TimeZone/America/Santarem.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_SANTAREM';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Santarem;
  $DateTime::TimeZone::America::Santarem::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Santarem::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368470728, #      utc_end 1914-01-01 03:38:48 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  -13128,
  0,
  'LMT',
      ],
      [
  60368470728, #    utc_start 1914-01-01 03:38:48 (Thu)
  60928729200, #      utc_end 1931-10-03 15:00:00 (Sat)
  60368456328, #  local_start 1913-12-31 23:38:48 (Wed)
  60928714800, #    local_end 1931-10-03 11:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  60928729200, #    utc_start 1931-10-03 15:00:00 (Sat)
  60944324400, #      utc_end 1932-04-01 03:00:00 (Fri)
  60928718400, #  local_start 1931-10-03 12:00:00 (Sat)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -10800,
  1,
  'AMST',
      ],
      [
  60944324400, #    utc_start 1932-04-01 03:00:00 (Fri)
  60960312000, #      utc_end 1932-10-03 04:00:00 (Mon)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60960297600, #    local_end 1932-10-03 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  60960312000, #    utc_start 1932-10-03 04:00:00 (Mon)
  60975860400, #      utc_end 1933-04-01 03:00:00 (Sat)
  60960301200, #  local_start 1932-10-03 01:00:00 (Mon)
  60975849600, #    local_end 1933-04-01 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  60975860400, #    utc_start 1933-04-01 03:00:00 (Sat)
  61501867200, #      utc_end 1949-12-01 04:00:00 (Thu)
  60975846000, #  local_start 1933-03-31 23:00:00 (Fri)
  61501852800, #    local_end 1949-12-01 00:00:00 (Thu)
  -14400,
  0,
  'AMT',
      ],
      [
  61501867200, #    utc_start 1949-12-01 04:00:00 (Thu)
  61513617600, #      utc_end 1950-04-16 04:00:00 (Sun)
  61501856400, #  local_start 1949-12-01 01:00:00 (Thu)
  61513606800, #    local_end 1950-04-16 01:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61513617600, #    utc_start 1950-04-16 04:00:00 (Sun)
  61533403200, #      utc_end 1950-12-01 04:00:00 (Fri)
  61513603200, #  local_start 1950-04-16 00:00:00 (Sun)
  61533388800, #    local_end 1950-12-01 00:00:00 (Fri)
  -14400,
  0,
  'AMT',
      ],
      [
  61533403200, #    utc_start 1950-12-01 04:00:00 (Fri)
  61543854000, #      utc_end 1951-04-01 03:00:00 (Sun)
  61533392400, #  local_start 1950-12-01 01:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61543854000, #    utc_start 1951-04-01 03:00:00 (Sun)
  61564939200, #      utc_end 1951-12-01 04:00:00 (Sat)
  61543839600, #  local_start 1951-03-31 23:00:00 (Sat)
  61564924800, #    local_end 1951-12-01 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  61564939200, #    utc_start 1951-12-01 04:00:00 (Sat)
  61575476400, #      utc_end 1952-04-01 03:00:00 (Tue)
  61564928400, #  local_start 1951-12-01 01:00:00 (Sat)
  61575465600, #    local_end 1952-04-01 00:00:00 (Tue)
  -10800,
  1,
  'AMST',
      ],
      [
  61575476400, #    utc_start 1952-04-01 03:00:00 (Tue)
  61596561600, #      utc_end 1952-12-01 04:00:00 (Mon)
  61575462000, #  local_start 1952-03-31 23:00:00 (Mon)
  61596547200, #    local_end 1952-12-01 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  61596561600, #    utc_start 1952-12-01 04:00:00 (Mon)
  61604334000, #      utc_end 1953-03-01 03:00:00 (Sun)
  61596550800, #  local_start 1952-12-01 01:00:00 (Mon)
  61604323200, #    local_end 1953-03-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61604334000, #    utc_start 1953-03-01 03:00:00 (Sun)
  61944321600, #      utc_end 1963-12-09 04:00:00 (Mon)
  61604319600, #  local_start 1953-02-28 23:00:00 (Sat)
  61944307200, #    local_end 1963-12-09 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  61944321600, #    utc_start 1963-12-09 04:00:00 (Mon)
  61951489200, #      utc_end 1964-03-01 03:00:00 (Sun)
  61944310800, #  local_start 1963-12-09 01:00:00 (Mon)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  61951489200, #    utc_start 1964-03-01 03:00:00 (Sun)
  61980523200, #      utc_end 1965-01-31 04:00:00 (Sun)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61980508800, #    local_end 1965-01-31 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  61980523200, #    utc_start 1965-01-31 04:00:00 (Sun)
  61985617200, #      utc_end 1965-03-31 03:00:00 (Wed)
  61980512400, #  local_start 1965-01-31 01:00:00 (Sun)
  61985606400, #    local_end 1965-03-31 00:00:00 (Wed)
  -10800,
  1,
  'AMST',
      ],
      [
  61985617200, #    utc_start 1965-03-31 03:00:00 (Wed)
  62006788800, #      utc_end 1965-12-01 04:00:00 (Wed)
  61985602800, #  local_start 1965-03-30 23:00:00 (Tue)
  62006774400, #    local_end 1965-12-01 00:00:00 (Wed)
  -14400,
  0,
  'AMT',
      ],
      [
  62006788800, #    utc_start 1965-12-01 04:00:00 (Wed)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62006778000, #  local_start 1965-12-01 01:00:00 (Wed)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'AMST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62035732800, #      utc_end 1966-11-01 04:00:00 (Tue)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62035718400, #    local_end 1966-11-01 00:00:00 (Tue)
  -14400,
  0,
  'AMT',
      ],
      [
  62035732800, #    utc_start 1966-11-01 04:00:00 (Tue)
  62046097200, #      utc_end 1967-03-01 03:00:00 (Wed)
  62035722000, #  local_start 1966-11-01 01:00:00 (Tue)
  62046086400, #    local_end 1967-03-01 00:00:00 (Wed)
  -10800,
  1,
  'AMST',
      ],
      [
  62046097200, #    utc_start 1967-03-01 03:00:00 (Wed)
  62067268800, #      utc_end 1967-11-01 04:00:00 (Wed)
  62046082800, #  local_start 1967-02-28 23:00:00 (Tue)
  62067254400, #    local_end 1967-11-01 00:00:00 (Wed)
  -14400,
  0,
  'AMT',
      ],
      [
  62067268800, #    utc_start 1967-11-01 04:00:00 (Wed)
  62077719600, #      utc_end 1968-03-01 03:00:00 (Fri)
  62067258000, #  local_start 1967-11-01 01:00:00 (Wed)
  62077708800, #    local_end 1968-03-01 00:00:00 (Fri)
  -10800,
  1,
  'AMST',
      ],
      [
  62077719600, #    utc_start 1968-03-01 03:00:00 (Fri)
  62635435200, #      utc_end 1985-11-02 04:00:00 (Sat)
  62077705200, #  local_start 1968-02-29 23:00:00 (Thu)
  62635420800, #    local_end 1985-11-02 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  62635435200, #    utc_start 1985-11-02 04:00:00 (Sat)
  62646922800, #      utc_end 1986-03-15 03:00:00 (Sat)
  62635424400, #  local_start 1985-11-02 01:00:00 (Sat)
  62646912000, #    local_end 1986-03-15 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  62646922800, #    utc_start 1986-03-15 03:00:00 (Sat)
  62666280000, #      utc_end 1986-10-25 04:00:00 (Sat)
  62646908400, #  local_start 1986-03-14 23:00:00 (Fri)
  62666265600, #    local_end 1986-10-25 00:00:00 (Sat)
  -14400,
  0,
  'AMT',
      ],
      [
  62666280000, #    utc_start 1986-10-25 04:00:00 (Sat)
  62675953200, #      utc_end 1987-02-14 03:00:00 (Sat)
  62666269200, #  local_start 1986-10-25 01:00:00 (Sat)
  62675942400, #    local_end 1987-02-14 00:00:00 (Sat)
  -10800,
  1,
  'AMST',
      ],
      [
  62675953200, #    utc_start 1987-02-14 03:00:00 (Sat)
  62697816000, #      utc_end 1987-10-25 04:00:00 (Sun)
  62675938800, #  local_start 1987-02-13 23:00:00 (Fri)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -14400,
  0,
  'AMT',
      ],
      [
  62697816000, #    utc_start 1987-10-25 04:00:00 (Sun)
  62706884400, #      utc_end 1988-02-07 03:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62706873600, #    local_end 1988-02-07 00:00:00 (Sun)
  -10800,
  1,
  'AMST',
      ],
      [
  62706884400, #    utc_start 1988-02-07 03:00:00 (Sun)
  62725723200, #      utc_end 1988-09-12 04:00:00 (Mon)
  62706870000, #  local_start 1988-02-06 23:00:00 (Sat)
  62725708800, #    local_end 1988-09-12 00:00:00 (Mon)
  -14400,
  0,
  'AMT',
      ],
      [
  62725723200, #    utc_start 1988-09-12 04:00:00 (Mon)
  63349963200, #      utc_end 2008-06-24 04:00:00 (Tue)
  62725708800, #  local_start 1988-09-12 00:00:00 (Mon)
  63349948800, #    local_end 2008-06-24 00:00:00 (Tue)
  -14400,
  0,
  'AMT',
      ],
      [
  63349963200, #    utc_start 2008-06-24 04:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  63349952400, #  local_start 2008-06-24 01:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'BRT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {14}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_SANTAREM

    $main::fatpacked{"DateTime/TimeZone/America/Santiago.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_SANTIAGO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Santiago;
  $DateTime::TimeZone::America::Santiago::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Santiago::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611178566, #      utc_end 1890-01-01 04:42:46 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -16966,
  0,
  'LMT',
      ],
      [
  59611178566, #    utc_start 1890-01-01 04:42:46 (Wed)
  60243021766, #      utc_end 1910-01-10 04:42:46 (Mon)
  59611161600, #  local_start 1890-01-01 00:00:00 (Wed)
  60243004800, #    local_end 1910-01-10 00:00:00 (Mon)
  -16966,
  0,
  'SMT',
      ],
      [
  60243021766, #    utc_start 1910-01-10 04:42:46 (Mon)
  60447272400, #      utc_end 1916-07-01 05:00:00 (Sat)
  60243003766, #  local_start 1910-01-09 23:42:46 (Sun)
  60447254400, #    local_end 1916-07-01 00:00:00 (Sat)
  -18000,
  0,
  'CLT',
      ],
      [
  60447272400, #    utc_start 1916-07-01 05:00:00 (Sat)
  60516477766, #      utc_end 1918-09-10 04:42:46 (Tue)
  60447255434, #  local_start 1916-07-01 00:17:14 (Sat)
  60516460800, #    local_end 1918-09-10 00:00:00 (Tue)
  -16966,
  0,
  'SMT',
      ],
      [
  60516477766, #    utc_start 1918-09-10 04:42:46 (Tue)
  60541876800, #      utc_end 1919-07-01 04:00:00 (Tue)
  60516463366, #  local_start 1918-09-10 00:42:46 (Tue)
  60541862400, #    local_end 1919-07-01 00:00:00 (Tue)
  -14400,
  0,
  'CLT',
      ],
      [
  60541876800, #    utc_start 1919-07-01 04:00:00 (Tue)
  60799696966, #      utc_end 1927-09-01 04:42:46 (Thu)
  60541859834, #  local_start 1919-06-30 23:17:14 (Mon)
  60799680000, #    local_end 1927-09-01 00:00:00 (Thu)
  -16966,
  0,
  'SMT',
      ],
      [
  60799696966, #    utc_start 1927-09-01 04:42:46 (Thu)
  60818097600, #      utc_end 1928-04-01 04:00:00 (Sun)
  60799682566, #  local_start 1927-09-01 00:42:46 (Thu)
  60818083200, #    local_end 1928-04-01 00:00:00 (Sun)
  -14400,
  1,
  'CLST',
      ],
      [
  60818097600, #    utc_start 1928-04-01 04:00:00 (Sun)
  60831320400, #      utc_end 1928-09-01 05:00:00 (Sat)
  60818079600, #  local_start 1928-03-31 23:00:00 (Sat)
  60831302400, #    local_end 1928-09-01 00:00:00 (Sat)
  -18000,
  0,
  'CLT',
      ],
      [
  60831320400, #    utc_start 1928-09-01 05:00:00 (Sat)
  60849633600, #      utc_end 1929-04-01 04:00:00 (Mon)
  60831306000, #  local_start 1928-09-01 01:00:00 (Sat)
  60849619200, #    local_end 1929-04-01 00:00:00 (Mon)
  -14400,
  1,
  'CLST',
      ],
      [
  60849633600, #    utc_start 1929-04-01 04:00:00 (Mon)
  60862856400, #      utc_end 1929-09-01 05:00:00 (Sun)
  60849615600, #  local_start 1929-03-31 23:00:00 (Sun)
  60862838400, #    local_end 1929-09-01 00:00:00 (Sun)
  -18000,
  0,
  'CLT',
      ],
      [
  60862856400, #    utc_start 1929-09-01 05:00:00 (Sun)
  60881169600, #      utc_end 1930-04-01 04:00:00 (Tue)
  60862842000, #  local_start 1929-09-01 01:00:00 (Sun)
  60881155200, #    local_end 1930-04-01 00:00:00 (Tue)
  -14400,
  1,
  'CLST',
      ],
      [
  60881169600, #    utc_start 1930-04-01 04:00:00 (Tue)
  60894392400, #      utc_end 1930-09-01 05:00:00 (Mon)
  60881151600, #  local_start 1930-03-31 23:00:00 (Mon)
  60894374400, #    local_end 1930-09-01 00:00:00 (Mon)
  -18000,
  0,
  'CLT',
      ],
      [
  60894392400, #    utc_start 1930-09-01 05:00:00 (Mon)
  60912705600, #      utc_end 1931-04-01 04:00:00 (Wed)
  60894378000, #  local_start 1930-09-01 01:00:00 (Mon)
  60912691200, #    local_end 1931-04-01 00:00:00 (Wed)
  -14400,
  1,
  'CLST',
      ],
      [
  60912705600, #    utc_start 1931-04-01 04:00:00 (Wed)
  60925928400, #      utc_end 1931-09-01 05:00:00 (Tue)
  60912687600, #  local_start 1931-03-31 23:00:00 (Tue)
  60925910400, #    local_end 1931-09-01 00:00:00 (Tue)
  -18000,
  0,
  'CLT',
      ],
      [
  60925928400, #    utc_start 1931-09-01 05:00:00 (Tue)
  60944328000, #      utc_end 1932-04-01 04:00:00 (Fri)
  60925914000, #  local_start 1931-09-01 01:00:00 (Tue)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -14400,
  1,
  'CLST',
      ],
      [
  60944328000, #    utc_start 1932-04-01 04:00:00 (Fri)
  60957550800, #      utc_end 1932-09-01 05:00:00 (Thu)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60957532800, #    local_end 1932-09-01 00:00:00 (Thu)
  -18000,
  0,
  'CLT',
      ],
      [
  60957550800, #    utc_start 1932-09-01 05:00:00 (Thu)
  61265131200, #      utc_end 1942-06-01 04:00:00 (Mon)
  60957536400, #  local_start 1932-09-01 01:00:00 (Thu)
  61265116800, #    local_end 1942-06-01 00:00:00 (Mon)
  -14400,
  0,
  'CLT',
      ],
      [
  61265131200, #    utc_start 1942-06-01 04:00:00 (Mon)
  61270405200, #      utc_end 1942-08-01 05:00:00 (Sat)
  61265113200, #  local_start 1942-05-31 23:00:00 (Sun)
  61270387200, #    local_end 1942-08-01 00:00:00 (Sat)
  -18000,
  0,
  'CLT',
      ],
      [
  61270405200, #    utc_start 1942-08-01 05:00:00 (Sat)
  61395163200, #      utc_end 1946-07-15 04:00:00 (Mon)
  61270390800, #  local_start 1942-08-01 01:00:00 (Sat)
  61395148800, #    local_end 1946-07-15 00:00:00 (Mon)
  -14400,
  0,
  'CLT',
      ],
      [
  61395163200, #    utc_start 1946-07-15 04:00:00 (Mon)
  61399306800, #      utc_end 1946-09-01 03:00:00 (Sun)
  61395152400, #  local_start 1946-07-15 01:00:00 (Mon)
  61399296000, #    local_end 1946-09-01 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  61399306800, #    utc_start 1946-09-01 03:00:00 (Sun)
  61417627200, #      utc_end 1947-04-01 04:00:00 (Tue)
  61399292400, #  local_start 1946-08-31 23:00:00 (Sat)
  61417612800, #    local_end 1947-04-01 00:00:00 (Tue)
  -14400,
  0,
  'CLT',
      ],
      [
  61417627200, #    utc_start 1947-04-01 04:00:00 (Tue)
  61422033600, #      utc_end 1947-05-22 04:00:00 (Thu)
  61417609200, #  local_start 1947-03-31 23:00:00 (Mon)
  61422015600, #    local_end 1947-05-21 23:00:00 (Wed)
  -18000,
  0,
  'CLT',
      ],
      [
  61422033600, #    utc_start 1947-05-22 04:00:00 (Thu)
  62099064000, #      utc_end 1968-11-03 04:00:00 (Sun)
  61422019200, #  local_start 1947-05-22 00:00:00 (Thu)
  62099049600, #    local_end 1968-11-03 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62099064000, #    utc_start 1968-11-03 04:00:00 (Sun)
  62111761200, #      utc_end 1969-03-30 03:00:00 (Sun)
  62099053200, #  local_start 1968-11-03 01:00:00 (Sun)
  62111750400, #    local_end 1969-03-30 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62111761200, #    utc_start 1969-03-30 03:00:00 (Sun)
  62132328000, #      utc_end 1969-11-23 04:00:00 (Sun)
  62111746800, #  local_start 1969-03-29 23:00:00 (Sat)
  62132313600, #    local_end 1969-11-23 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62132328000, #    utc_start 1969-11-23 04:00:00 (Sun)
  62143210800, #      utc_end 1970-03-29 03:00:00 (Sun)
  62132317200, #  local_start 1969-11-23 01:00:00 (Sun)
  62143200000, #    local_end 1970-03-29 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62143210800, #    utc_start 1970-03-29 03:00:00 (Sun)
  62160148800, #      utc_end 1970-10-11 04:00:00 (Sun)
  62143196400, #  local_start 1970-03-28 23:00:00 (Sat)
  62160134400, #    local_end 1970-10-11 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62160148800, #    utc_start 1970-10-11 04:00:00 (Sun)
  62173450800, #      utc_end 1971-03-14 03:00:00 (Sun)
  62160138000, #  local_start 1970-10-11 01:00:00 (Sun)
  62173440000, #    local_end 1971-03-14 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62173450800, #    utc_start 1971-03-14 03:00:00 (Sun)
  62191598400, #      utc_end 1971-10-10 04:00:00 (Sun)
  62173436400, #  local_start 1971-03-13 23:00:00 (Sat)
  62191584000, #    local_end 1971-10-10 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62191598400, #    utc_start 1971-10-10 04:00:00 (Sun)
  62204900400, #      utc_end 1972-03-12 03:00:00 (Sun)
  62191587600, #  local_start 1971-10-10 01:00:00 (Sun)
  62204889600, #    local_end 1972-03-12 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62204900400, #    utc_start 1972-03-12 03:00:00 (Sun)
  62223652800, #      utc_end 1972-10-15 04:00:00 (Sun)
  62204886000, #  local_start 1972-03-11 23:00:00 (Sat)
  62223638400, #    local_end 1972-10-15 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62223652800, #    utc_start 1972-10-15 04:00:00 (Sun)
  62236350000, #      utc_end 1973-03-11 03:00:00 (Sun)
  62223642000, #  local_start 1972-10-15 01:00:00 (Sun)
  62236339200, #    local_end 1973-03-11 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62236350000, #    utc_start 1973-03-11 03:00:00 (Sun)
  62253892800, #      utc_end 1973-09-30 04:00:00 (Sun)
  62236335600, #  local_start 1973-03-10 23:00:00 (Sat)
  62253878400, #    local_end 1973-09-30 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62253892800, #    utc_start 1973-09-30 04:00:00 (Sun)
  62267799600, #      utc_end 1974-03-10 03:00:00 (Sun)
  62253882000, #  local_start 1973-09-30 01:00:00 (Sun)
  62267788800, #    local_end 1974-03-10 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62267799600, #    utc_start 1974-03-10 03:00:00 (Sun)
  62286552000, #      utc_end 1974-10-13 04:00:00 (Sun)
  62267785200, #  local_start 1974-03-09 23:00:00 (Sat)
  62286537600, #    local_end 1974-10-13 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62286552000, #    utc_start 1974-10-13 04:00:00 (Sun)
  62299249200, #      utc_end 1975-03-09 03:00:00 (Sun)
  62286541200, #  local_start 1974-10-13 01:00:00 (Sun)
  62299238400, #    local_end 1975-03-09 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62299249200, #    utc_start 1975-03-09 03:00:00 (Sun)
  62318001600, #      utc_end 1975-10-12 04:00:00 (Sun)
  62299234800, #  local_start 1975-03-08 23:00:00 (Sat)
  62317987200, #    local_end 1975-10-12 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62318001600, #    utc_start 1975-10-12 04:00:00 (Sun)
  62331303600, #      utc_end 1976-03-14 03:00:00 (Sun)
  62317990800, #  local_start 1975-10-12 01:00:00 (Sun)
  62331292800, #    local_end 1976-03-14 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62331303600, #    utc_start 1976-03-14 03:00:00 (Sun)
  62349451200, #      utc_end 1976-10-10 04:00:00 (Sun)
  62331289200, #  local_start 1976-03-13 23:00:00 (Sat)
  62349436800, #    local_end 1976-10-10 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62349451200, #    utc_start 1976-10-10 04:00:00 (Sun)
  62362753200, #      utc_end 1977-03-13 03:00:00 (Sun)
  62349440400, #  local_start 1976-10-10 01:00:00 (Sun)
  62362742400, #    local_end 1977-03-13 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62362753200, #    utc_start 1977-03-13 03:00:00 (Sun)
  62380900800, #      utc_end 1977-10-09 04:00:00 (Sun)
  62362738800, #  local_start 1977-03-12 23:00:00 (Sat)
  62380886400, #    local_end 1977-10-09 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62380900800, #    utc_start 1977-10-09 04:00:00 (Sun)
  62394202800, #      utc_end 1978-03-12 03:00:00 (Sun)
  62380890000, #  local_start 1977-10-09 01:00:00 (Sun)
  62394192000, #    local_end 1978-03-12 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62394202800, #    utc_start 1978-03-12 03:00:00 (Sun)
  62412955200, #      utc_end 1978-10-15 04:00:00 (Sun)
  62394188400, #  local_start 1978-03-11 23:00:00 (Sat)
  62412940800, #    local_end 1978-10-15 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62412955200, #    utc_start 1978-10-15 04:00:00 (Sun)
  62425652400, #      utc_end 1979-03-11 03:00:00 (Sun)
  62412944400, #  local_start 1978-10-15 01:00:00 (Sun)
  62425641600, #    local_end 1979-03-11 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62425652400, #    utc_start 1979-03-11 03:00:00 (Sun)
  62444404800, #      utc_end 1979-10-14 04:00:00 (Sun)
  62425638000, #  local_start 1979-03-10 23:00:00 (Sat)
  62444390400, #    local_end 1979-10-14 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62444404800, #    utc_start 1979-10-14 04:00:00 (Sun)
  62457102000, #      utc_end 1980-03-09 03:00:00 (Sun)
  62444394000, #  local_start 1979-10-14 01:00:00 (Sun)
  62457091200, #    local_end 1980-03-09 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62457102000, #    utc_start 1980-03-09 03:00:00 (Sun)
  62475854400, #      utc_end 1980-10-12 04:00:00 (Sun)
  62457087600, #  local_start 1980-03-08 23:00:00 (Sat)
  62475840000, #    local_end 1980-10-12 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62475854400, #    utc_start 1980-10-12 04:00:00 (Sun)
  62489156400, #      utc_end 1981-03-15 03:00:00 (Sun)
  62475843600, #  local_start 1980-10-12 01:00:00 (Sun)
  62489145600, #    local_end 1981-03-15 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62489156400, #    utc_start 1981-03-15 03:00:00 (Sun)
  62507304000, #      utc_end 1981-10-11 04:00:00 (Sun)
  62489142000, #  local_start 1981-03-14 23:00:00 (Sat)
  62507289600, #    local_end 1981-10-11 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62507304000, #    utc_start 1981-10-11 04:00:00 (Sun)
  62520606000, #      utc_end 1982-03-14 03:00:00 (Sun)
  62507293200, #  local_start 1981-10-11 01:00:00 (Sun)
  62520595200, #    local_end 1982-03-14 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62520606000, #    utc_start 1982-03-14 03:00:00 (Sun)
  62538753600, #      utc_end 1982-10-10 04:00:00 (Sun)
  62520591600, #  local_start 1982-03-13 23:00:00 (Sat)
  62538739200, #    local_end 1982-10-10 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62538753600, #    utc_start 1982-10-10 04:00:00 (Sun)
  62552055600, #      utc_end 1983-03-13 03:00:00 (Sun)
  62538742800, #  local_start 1982-10-10 01:00:00 (Sun)
  62552044800, #    local_end 1983-03-13 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62552055600, #    utc_start 1983-03-13 03:00:00 (Sun)
  62570203200, #      utc_end 1983-10-09 04:00:00 (Sun)
  62552041200, #  local_start 1983-03-12 23:00:00 (Sat)
  62570188800, #    local_end 1983-10-09 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62570203200, #    utc_start 1983-10-09 04:00:00 (Sun)
  62583505200, #      utc_end 1984-03-11 03:00:00 (Sun)
  62570192400, #  local_start 1983-10-09 01:00:00 (Sun)
  62583494400, #    local_end 1984-03-11 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62583505200, #    utc_start 1984-03-11 03:00:00 (Sun)
  62602257600, #      utc_end 1984-10-14 04:00:00 (Sun)
  62583490800, #  local_start 1984-03-10 23:00:00 (Sat)
  62602243200, #    local_end 1984-10-14 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62602257600, #    utc_start 1984-10-14 04:00:00 (Sun)
  62614954800, #      utc_end 1985-03-10 03:00:00 (Sun)
  62602246800, #  local_start 1984-10-14 01:00:00 (Sun)
  62614944000, #    local_end 1985-03-10 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62614954800, #    utc_start 1985-03-10 03:00:00 (Sun)
  62633707200, #      utc_end 1985-10-13 04:00:00 (Sun)
  62614940400, #  local_start 1985-03-09 23:00:00 (Sat)
  62633692800, #    local_end 1985-10-13 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62633707200, #    utc_start 1985-10-13 04:00:00 (Sun)
  62646404400, #      utc_end 1986-03-09 03:00:00 (Sun)
  62633696400, #  local_start 1985-10-13 01:00:00 (Sun)
  62646393600, #    local_end 1986-03-09 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62646404400, #    utc_start 1986-03-09 03:00:00 (Sun)
  62665156800, #      utc_end 1986-10-12 04:00:00 (Sun)
  62646390000, #  local_start 1986-03-08 23:00:00 (Sat)
  62665142400, #    local_end 1986-10-12 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62665156800, #    utc_start 1986-10-12 04:00:00 (Sun)
  62680878000, #      utc_end 1987-04-12 03:00:00 (Sun)
  62665146000, #  local_start 1986-10-12 01:00:00 (Sun)
  62680867200, #    local_end 1987-04-12 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62680878000, #    utc_start 1987-04-12 03:00:00 (Sun)
  62696606400, #      utc_end 1987-10-11 04:00:00 (Sun)
  62680863600, #  local_start 1987-04-11 23:00:00 (Sat)
  62696592000, #    local_end 1987-10-11 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62696606400, #    utc_start 1987-10-11 04:00:00 (Sun)
  62709908400, #      utc_end 1988-03-13 03:00:00 (Sun)
  62696595600, #  local_start 1987-10-11 01:00:00 (Sun)
  62709897600, #    local_end 1988-03-13 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62709908400, #    utc_start 1988-03-13 03:00:00 (Sun)
  62728056000, #      utc_end 1988-10-09 04:00:00 (Sun)
  62709894000, #  local_start 1988-03-12 23:00:00 (Sat)
  62728041600, #    local_end 1988-10-09 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62728056000, #    utc_start 1988-10-09 04:00:00 (Sun)
  62741358000, #      utc_end 1989-03-12 03:00:00 (Sun)
  62728045200, #  local_start 1988-10-09 01:00:00 (Sun)
  62741347200, #    local_end 1989-03-12 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62741358000, #    utc_start 1989-03-12 03:00:00 (Sun)
  62760110400, #      utc_end 1989-10-15 04:00:00 (Sun)
  62741343600, #  local_start 1989-03-11 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62760110400, #    utc_start 1989-10-15 04:00:00 (Sun)
  62772807600, #      utc_end 1990-03-11 03:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62772796800, #    local_end 1990-03-11 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62772807600, #    utc_start 1990-03-11 03:00:00 (Sun)
  62789140800, #      utc_end 1990-09-16 04:00:00 (Sun)
  62772793200, #  local_start 1990-03-10 23:00:00 (Sat)
  62789126400, #    local_end 1990-09-16 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62789140800, #    utc_start 1990-09-16 04:00:00 (Sun)
  62804257200, #      utc_end 1991-03-10 03:00:00 (Sun)
  62789130000, #  local_start 1990-09-16 01:00:00 (Sun)
  62804246400, #    local_end 1991-03-10 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62804257200, #    utc_start 1991-03-10 03:00:00 (Sun)
  62823009600, #      utc_end 1991-10-13 04:00:00 (Sun)
  62804242800, #  local_start 1991-03-09 23:00:00 (Sat)
  62822995200, #    local_end 1991-10-13 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62823009600, #    utc_start 1991-10-13 04:00:00 (Sun)
  62836311600, #      utc_end 1992-03-15 03:00:00 (Sun)
  62822998800, #  local_start 1991-10-13 01:00:00 (Sun)
  62836300800, #    local_end 1992-03-15 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62836311600, #    utc_start 1992-03-15 03:00:00 (Sun)
  62854459200, #      utc_end 1992-10-11 04:00:00 (Sun)
  62836297200, #  local_start 1992-03-14 23:00:00 (Sat)
  62854444800, #    local_end 1992-10-11 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62854459200, #    utc_start 1992-10-11 04:00:00 (Sun)
  62867761200, #      utc_end 1993-03-14 03:00:00 (Sun)
  62854448400, #  local_start 1992-10-11 01:00:00 (Sun)
  62867750400, #    local_end 1993-03-14 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62867761200, #    utc_start 1993-03-14 03:00:00 (Sun)
  62885908800, #      utc_end 1993-10-10 04:00:00 (Sun)
  62867746800, #  local_start 1993-03-13 23:00:00 (Sat)
  62885894400, #    local_end 1993-10-10 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62885908800, #    utc_start 1993-10-10 04:00:00 (Sun)
  62899210800, #      utc_end 1994-03-13 03:00:00 (Sun)
  62885898000, #  local_start 1993-10-10 01:00:00 (Sun)
  62899200000, #    local_end 1994-03-13 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62899210800, #    utc_start 1994-03-13 03:00:00 (Sun)
  62917358400, #      utc_end 1994-10-09 04:00:00 (Sun)
  62899196400, #  local_start 1994-03-12 23:00:00 (Sat)
  62917344000, #    local_end 1994-10-09 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62917358400, #    utc_start 1994-10-09 04:00:00 (Sun)
  62930660400, #      utc_end 1995-03-12 03:00:00 (Sun)
  62917347600, #  local_start 1994-10-09 01:00:00 (Sun)
  62930649600, #    local_end 1995-03-12 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62930660400, #    utc_start 1995-03-12 03:00:00 (Sun)
  62949412800, #      utc_end 1995-10-15 04:00:00 (Sun)
  62930646000, #  local_start 1995-03-11 23:00:00 (Sat)
  62949398400, #    local_end 1995-10-15 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62949412800, #    utc_start 1995-10-15 04:00:00 (Sun)
  62962110000, #      utc_end 1996-03-10 03:00:00 (Sun)
  62949402000, #  local_start 1995-10-15 01:00:00 (Sun)
  62962099200, #    local_end 1996-03-10 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62962110000, #    utc_start 1996-03-10 03:00:00 (Sun)
  62980862400, #      utc_end 1996-10-13 04:00:00 (Sun)
  62962095600, #  local_start 1996-03-09 23:00:00 (Sat)
  62980848000, #    local_end 1996-10-13 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62980862400, #    utc_start 1996-10-13 04:00:00 (Sun)
  62995374000, #      utc_end 1997-03-30 03:00:00 (Sun)
  62980851600, #  local_start 1996-10-13 01:00:00 (Sun)
  62995363200, #    local_end 1997-03-30 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62995374000, #    utc_start 1997-03-30 03:00:00 (Sun)
  63012312000, #      utc_end 1997-10-12 04:00:00 (Sun)
  62995359600, #  local_start 1997-03-29 23:00:00 (Sat)
  63012297600, #    local_end 1997-10-12 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63012312000, #    utc_start 1997-10-12 04:00:00 (Sun)
  63025614000, #      utc_end 1998-03-15 03:00:00 (Sun)
  63012301200, #  local_start 1997-10-12 01:00:00 (Sun)
  63025603200, #    local_end 1998-03-15 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63025614000, #    utc_start 1998-03-15 03:00:00 (Sun)
  63042552000, #      utc_end 1998-09-27 04:00:00 (Sun)
  63025599600, #  local_start 1998-03-14 23:00:00 (Sat)
  63042537600, #    local_end 1998-09-27 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63042552000, #    utc_start 1998-09-27 04:00:00 (Sun)
  63058878000, #      utc_end 1999-04-04 03:00:00 (Sun)
  63042541200, #  local_start 1998-09-27 01:00:00 (Sun)
  63058867200, #    local_end 1999-04-04 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63058878000, #    utc_start 1999-04-04 03:00:00 (Sun)
  63075211200, #      utc_end 1999-10-10 04:00:00 (Sun)
  63058863600, #  local_start 1999-04-03 23:00:00 (Sat)
  63075196800, #    local_end 1999-10-10 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63075211200, #    utc_start 1999-10-10 04:00:00 (Sun)
  63088513200, #      utc_end 2000-03-12 03:00:00 (Sun)
  63075200400, #  local_start 1999-10-10 01:00:00 (Sun)
  63088502400, #    local_end 2000-03-12 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63088513200, #    utc_start 2000-03-12 03:00:00 (Sun)
  63107265600, #      utc_end 2000-10-15 04:00:00 (Sun)
  63088498800, #  local_start 2000-03-11 23:00:00 (Sat)
  63107251200, #    local_end 2000-10-15 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63107265600, #    utc_start 2000-10-15 04:00:00 (Sun)
  63119962800, #      utc_end 2001-03-11 03:00:00 (Sun)
  63107254800, #  local_start 2000-10-15 01:00:00 (Sun)
  63119952000, #    local_end 2001-03-11 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63119962800, #    utc_start 2001-03-11 03:00:00 (Sun)
  63138715200, #      utc_end 2001-10-14 04:00:00 (Sun)
  63119948400, #  local_start 2001-03-10 23:00:00 (Sat)
  63138700800, #    local_end 2001-10-14 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63138715200, #    utc_start 2001-10-14 04:00:00 (Sun)
  63151412400, #      utc_end 2002-03-10 03:00:00 (Sun)
  63138704400, #  local_start 2001-10-14 01:00:00 (Sun)
  63151401600, #    local_end 2002-03-10 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63151412400, #    utc_start 2002-03-10 03:00:00 (Sun)
  63170164800, #      utc_end 2002-10-13 04:00:00 (Sun)
  63151398000, #  local_start 2002-03-09 23:00:00 (Sat)
  63170150400, #    local_end 2002-10-13 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63170164800, #    utc_start 2002-10-13 04:00:00 (Sun)
  63182862000, #      utc_end 2003-03-09 03:00:00 (Sun)
  63170154000, #  local_start 2002-10-13 01:00:00 (Sun)
  63182851200, #    local_end 2003-03-09 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63182862000, #    utc_start 2003-03-09 03:00:00 (Sun)
  63201614400, #      utc_end 2003-10-12 04:00:00 (Sun)
  63182847600, #  local_start 2003-03-08 23:00:00 (Sat)
  63201600000, #    local_end 2003-10-12 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63201614400, #    utc_start 2003-10-12 04:00:00 (Sun)
  63214916400, #      utc_end 2004-03-14 03:00:00 (Sun)
  63201603600, #  local_start 2003-10-12 01:00:00 (Sun)
  63214905600, #    local_end 2004-03-14 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63214916400, #    utc_start 2004-03-14 03:00:00 (Sun)
  63233064000, #      utc_end 2004-10-10 04:00:00 (Sun)
  63214902000, #  local_start 2004-03-13 23:00:00 (Sat)
  63233049600, #    local_end 2004-10-10 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63233064000, #    utc_start 2004-10-10 04:00:00 (Sun)
  63246366000, #      utc_end 2005-03-13 03:00:00 (Sun)
  63233053200, #  local_start 2004-10-10 01:00:00 (Sun)
  63246355200, #    local_end 2005-03-13 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63246366000, #    utc_start 2005-03-13 03:00:00 (Sun)
  63264513600, #      utc_end 2005-10-09 04:00:00 (Sun)
  63246351600, #  local_start 2005-03-12 23:00:00 (Sat)
  63264499200, #    local_end 2005-10-09 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63264513600, #    utc_start 2005-10-09 04:00:00 (Sun)
  63277815600, #      utc_end 2006-03-12 03:00:00 (Sun)
  63264502800, #  local_start 2005-10-09 01:00:00 (Sun)
  63277804800, #    local_end 2006-03-12 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63277815600, #    utc_start 2006-03-12 03:00:00 (Sun)
  63296568000, #      utc_end 2006-10-15 04:00:00 (Sun)
  63277801200, #  local_start 2006-03-11 23:00:00 (Sat)
  63296553600, #    local_end 2006-10-15 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63296568000, #    utc_start 2006-10-15 04:00:00 (Sun)
  63309265200, #      utc_end 2007-03-11 03:00:00 (Sun)
  63296557200, #  local_start 2006-10-15 01:00:00 (Sun)
  63309254400, #    local_end 2007-03-11 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63309265200, #    utc_start 2007-03-11 03:00:00 (Sun)
  63328017600, #      utc_end 2007-10-14 04:00:00 (Sun)
  63309250800, #  local_start 2007-03-10 23:00:00 (Sat)
  63328003200, #    local_end 2007-10-14 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63328017600, #    utc_start 2007-10-14 04:00:00 (Sun)
  63342529200, #      utc_end 2008-03-30 03:00:00 (Sun)
  63328006800, #  local_start 2007-10-14 01:00:00 (Sun)
  63342518400, #    local_end 2008-03-30 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63342529200, #    utc_start 2008-03-30 03:00:00 (Sun)
  63359467200, #      utc_end 2008-10-12 04:00:00 (Sun)
  63342514800, #  local_start 2008-03-29 23:00:00 (Sat)
  63359452800, #    local_end 2008-10-12 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63359467200, #    utc_start 2008-10-12 04:00:00 (Sun)
  63372769200, #      utc_end 2009-03-15 03:00:00 (Sun)
  63359456400, #  local_start 2008-10-12 01:00:00 (Sun)
  63372758400, #    local_end 2009-03-15 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63372769200, #    utc_start 2009-03-15 03:00:00 (Sun)
  63390916800, #      utc_end 2009-10-11 04:00:00 (Sun)
  63372754800, #  local_start 2009-03-14 23:00:00 (Sat)
  63390902400, #    local_end 2009-10-11 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63390916800, #    utc_start 2009-10-11 04:00:00 (Sun)
  63406033200, #      utc_end 2010-04-04 03:00:00 (Sun)
  63390906000, #  local_start 2009-10-11 01:00:00 (Sun)
  63406022400, #    local_end 2010-04-04 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63406033200, #    utc_start 2010-04-04 03:00:00 (Sun)
  63422366400, #      utc_end 2010-10-10 04:00:00 (Sun)
  63406018800, #  local_start 2010-04-03 23:00:00 (Sat)
  63422352000, #    local_end 2010-10-10 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63422366400, #    utc_start 2010-10-10 04:00:00 (Sun)
  63440506800, #      utc_end 2011-05-08 03:00:00 (Sun)
  63422355600, #  local_start 2010-10-10 01:00:00 (Sun)
  63440496000, #    local_end 2011-05-08 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63440506800, #    utc_start 2011-05-08 03:00:00 (Sun)
  63449582400, #      utc_end 2011-08-21 04:00:00 (Sun)
  63440492400, #  local_start 2011-05-07 23:00:00 (Sat)
  63449568000, #    local_end 2011-08-21 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63449582400, #    utc_start 2011-08-21 04:00:00 (Sun)
  63471351600, #      utc_end 2012-04-29 03:00:00 (Sun)
  63449571600, #  local_start 2011-08-21 01:00:00 (Sun)
  63471340800, #    local_end 2012-04-29 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63471351600, #    utc_start 2012-04-29 03:00:00 (Sun)
  63482241600, #      utc_end 2012-09-02 04:00:00 (Sun)
  63471337200, #  local_start 2012-04-28 23:00:00 (Sat)
  63482227200, #    local_end 2012-09-02 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63482241600, #    utc_start 2012-09-02 04:00:00 (Sun)
  63502801200, #      utc_end 2013-04-28 03:00:00 (Sun)
  63482230800, #  local_start 2012-09-02 01:00:00 (Sun)
  63502790400, #    local_end 2013-04-28 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63502801200, #    utc_start 2013-04-28 03:00:00 (Sun)
  63514296000, #      utc_end 2013-09-08 04:00:00 (Sun)
  63502786800, #  local_start 2013-04-27 23:00:00 (Sat)
  63514281600, #    local_end 2013-09-08 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63514296000, #    utc_start 2013-09-08 04:00:00 (Sun)
  63534250800, #      utc_end 2014-04-27 03:00:00 (Sun)
  63514285200, #  local_start 2013-09-08 01:00:00 (Sun)
  63534240000, #    local_end 2014-04-27 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63534250800, #    utc_start 2014-04-27 03:00:00 (Sun)
  63545745600, #      utc_end 2014-09-07 04:00:00 (Sun)
  63534236400, #  local_start 2014-04-26 23:00:00 (Sat)
  63545731200, #    local_end 2014-09-07 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63545745600, #    utc_start 2014-09-07 04:00:00 (Sun)
  63598964400, #      utc_end 2016-05-15 03:00:00 (Sun)
  63545734800, #  local_start 2014-09-07 01:00:00 (Sun)
  63598953600, #    local_end 2016-05-15 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63598964400, #    utc_start 2016-05-15 03:00:00 (Sun)
  63606830400, #      utc_end 2016-08-14 04:00:00 (Sun)
  63598950000, #  local_start 2016-05-14 23:00:00 (Sat)
  63606816000, #    local_end 2016-08-14 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63606830400, #    utc_start 2016-08-14 04:00:00 (Sun)
  63630414000, #      utc_end 2017-05-14 03:00:00 (Sun)
  63606819600, #  local_start 2016-08-14 01:00:00 (Sun)
  63630403200, #    local_end 2017-05-14 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63630414000, #    utc_start 2017-05-14 03:00:00 (Sun)
  63638280000, #      utc_end 2017-08-13 04:00:00 (Sun)
  63630399600, #  local_start 2017-05-13 23:00:00 (Sat)
  63638265600, #    local_end 2017-08-13 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63638280000, #    utc_start 2017-08-13 04:00:00 (Sun)
  63661863600, #      utc_end 2018-05-13 03:00:00 (Sun)
  63638269200, #  local_start 2017-08-13 01:00:00 (Sun)
  63661852800, #    local_end 2018-05-13 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63661863600, #    utc_start 2018-05-13 03:00:00 (Sun)
  63669729600, #      utc_end 2018-08-12 04:00:00 (Sun)
  63661849200, #  local_start 2018-05-12 23:00:00 (Sat)
  63669715200, #    local_end 2018-08-12 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63669729600, #    utc_start 2018-08-12 04:00:00 (Sun)
  63693313200, #      utc_end 2019-05-12 03:00:00 (Sun)
  63669718800, #  local_start 2018-08-12 01:00:00 (Sun)
  63693302400, #    local_end 2019-05-12 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63693313200, #    utc_start 2019-05-12 03:00:00 (Sun)
  63701179200, #      utc_end 2019-08-11 04:00:00 (Sun)
  63693298800, #  local_start 2019-05-11 23:00:00 (Sat)
  63701164800, #    local_end 2019-08-11 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63701179200, #    utc_start 2019-08-11 04:00:00 (Sun)
  63724762800, #      utc_end 2020-05-10 03:00:00 (Sun)
  63701168400, #  local_start 2019-08-11 01:00:00 (Sun)
  63724752000, #    local_end 2020-05-10 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63724762800, #    utc_start 2020-05-10 03:00:00 (Sun)
  63732628800, #      utc_end 2020-08-09 04:00:00 (Sun)
  63724748400, #  local_start 2020-05-09 23:00:00 (Sat)
  63732614400, #    local_end 2020-08-09 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63732628800, #    utc_start 2020-08-09 04:00:00 (Sun)
  63756212400, #      utc_end 2021-05-09 03:00:00 (Sun)
  63732618000, #  local_start 2020-08-09 01:00:00 (Sun)
  63756201600, #    local_end 2021-05-09 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63756212400, #    utc_start 2021-05-09 03:00:00 (Sun)
  63764683200, #      utc_end 2021-08-15 04:00:00 (Sun)
  63756198000, #  local_start 2021-05-08 23:00:00 (Sat)
  63764668800, #    local_end 2021-08-15 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63764683200, #    utc_start 2021-08-15 04:00:00 (Sun)
  63788266800, #      utc_end 2022-05-15 03:00:00 (Sun)
  63764672400, #  local_start 2021-08-15 01:00:00 (Sun)
  63788256000, #    local_end 2022-05-15 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63788266800, #    utc_start 2022-05-15 03:00:00 (Sun)
  63796132800, #      utc_end 2022-08-14 04:00:00 (Sun)
  63788252400, #  local_start 2022-05-14 23:00:00 (Sat)
  63796118400, #    local_end 2022-08-14 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63796132800, #    utc_start 2022-08-14 04:00:00 (Sun)
  63819716400, #      utc_end 2023-05-14 03:00:00 (Sun)
  63796122000, #  local_start 2022-08-14 01:00:00 (Sun)
  63819705600, #    local_end 2023-05-14 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63819716400, #    utc_start 2023-05-14 03:00:00 (Sun)
  63827582400, #      utc_end 2023-08-13 04:00:00 (Sun)
  63819702000, #  local_start 2023-05-13 23:00:00 (Sat)
  63827568000, #    local_end 2023-08-13 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63827582400, #    utc_start 2023-08-13 04:00:00 (Sun)
  63851166000, #      utc_end 2024-05-12 03:00:00 (Sun)
  63827571600, #  local_start 2023-08-13 01:00:00 (Sun)
  63851155200, #    local_end 2024-05-12 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63851166000, #    utc_start 2024-05-12 03:00:00 (Sun)
  63859032000, #      utc_end 2024-08-11 04:00:00 (Sun)
  63851151600, #  local_start 2024-05-11 23:00:00 (Sat)
  63859017600, #    local_end 2024-08-11 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63859032000, #    utc_start 2024-08-11 04:00:00 (Sun)
  63882615600, #      utc_end 2025-05-11 03:00:00 (Sun)
  63859021200, #  local_start 2024-08-11 01:00:00 (Sun)
  63882604800, #    local_end 2025-05-11 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63882615600, #    utc_start 2025-05-11 03:00:00 (Sun)
  63890481600, #      utc_end 2025-08-10 04:00:00 (Sun)
  63882601200, #  local_start 2025-05-10 23:00:00 (Sat)
  63890467200, #    local_end 2025-08-10 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63890481600, #    utc_start 2025-08-10 04:00:00 (Sun)
  63914065200, #      utc_end 2026-05-10 03:00:00 (Sun)
  63890470800, #  local_start 2025-08-10 01:00:00 (Sun)
  63914054400, #    local_end 2026-05-10 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63914065200, #    utc_start 2026-05-10 03:00:00 (Sun)
  63921931200, #      utc_end 2026-08-09 04:00:00 (Sun)
  63914050800, #  local_start 2026-05-09 23:00:00 (Sat)
  63921916800, #    local_end 2026-08-09 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63921931200, #    utc_start 2026-08-09 04:00:00 (Sun)
  63945514800, #      utc_end 2027-05-09 03:00:00 (Sun)
  63921920400, #  local_start 2026-08-09 01:00:00 (Sun)
  63945504000, #    local_end 2027-05-09 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63945514800, #    utc_start 2027-05-09 03:00:00 (Sun)
  63953985600, #      utc_end 2027-08-15 04:00:00 (Sun)
  63945500400, #  local_start 2027-05-08 23:00:00 (Sat)
  63953971200, #    local_end 2027-08-15 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {65}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -14400 }
  
  my $last_observance = bless( {
    'format' => 'CL%sT',
    'gmtoff' => '-4:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 710903,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 710903,
      'utc_rd_secs' => 0,
      'utc_year' => 1948
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -14400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 710903,
      'local_rd_secs' => 14400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 710903,
      'utc_rd_secs' => 14400,
      'utc_year' => 1948
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '3:00u',
      'from' => '2016',
      'in' => 'May',
      'letter' => '',
      'name' => 'Chile',
      'offset_from_std' => 0,
      'on' => 'Sun>=9',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '4:00u',
      'from' => '2016',
      'in' => 'Aug',
      'letter' => 'S',
      'name' => 'Chile',
      'offset_from_std' => 3600,
      'on' => 'Sun>=9',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_SANTIAGO

    $main::fatpacked{"DateTime/TimeZone/America/Santo_Domingo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_SANTO_DOMINGO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Santo_Domingo;
  $DateTime::TimeZone::America::Santo_Domingo::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Santo_Domingo::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611178376, #      utc_end 1890-01-01 04:39:36 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -16776,
  0,
  'LMT',
      ],
      [
  59611178376, #    utc_start 1890-01-01 04:39:36 (Wed)
  60975909600, #      utc_end 1933-04-01 16:40:00 (Sat)
  59611161576, #  local_start 1889-12-31 23:59:36 (Tue)
  60975892800, #    local_end 1933-04-01 12:00:00 (Sat)
  -16800,
  0,
  'SDMT',
      ],
      [
  60975909600, #    utc_start 1933-04-01 16:40:00 (Sat)
  62035563600, #      utc_end 1966-10-30 05:00:00 (Sun)
  60975891600, #  local_start 1933-04-01 11:40:00 (Sat)
  62035545600, #    local_end 1966-10-30 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62035563600, #    utc_start 1966-10-30 05:00:00 (Sun)
  62046014400, #      utc_end 1967-02-28 04:00:00 (Tue)
  62035549200, #  local_start 1966-10-30 01:00:00 (Sun)
  62046000000, #    local_end 1967-02-28 00:00:00 (Tue)
  -14400,
  1,
  'EDT',
      ],
      [
  62046014400, #    utc_start 1967-02-28 04:00:00 (Tue)
  62129912400, #      utc_end 1969-10-26 05:00:00 (Sun)
  62045996400, #  local_start 1967-02-27 23:00:00 (Mon)
  62129894400, #    local_end 1969-10-26 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62129912400, #    utc_start 1969-10-26 05:00:00 (Sun)
  62140105800, #      utc_end 1970-02-21 04:30:00 (Sat)
  62129896200, #  local_start 1969-10-26 00:30:00 (Sun)
  62140089600, #    local_end 1970-02-21 00:00:00 (Sat)
  -16200,
  1,
  'EHDT',
      ],
      [
  62140105800, #    utc_start 1970-02-21 04:30:00 (Sat)
  62161362000, #      utc_end 1970-10-25 05:00:00 (Sun)
  62140087800, #  local_start 1970-02-20 23:30:00 (Fri)
  62161344000, #    local_end 1970-10-25 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62161362000, #    utc_start 1970-10-25 05:00:00 (Sun)
  62168877000, #      utc_end 1971-01-20 04:30:00 (Wed)
  62161345800, #  local_start 1970-10-25 00:30:00 (Sun)
  62168860800, #    local_end 1971-01-20 00:00:00 (Wed)
  -16200,
  1,
  'EHDT',
      ],
      [
  62168877000, #    utc_start 1971-01-20 04:30:00 (Wed)
  62193416400, #      utc_end 1971-10-31 05:00:00 (Sun)
  62168859000, #  local_start 1971-01-19 23:30:00 (Tue)
  62193398400, #    local_end 1971-10-31 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62193416400, #    utc_start 1971-10-31 05:00:00 (Sun)
  62200499400, #      utc_end 1972-01-21 04:30:00 (Fri)
  62193400200, #  local_start 1971-10-31 00:30:00 (Sun)
  62200483200, #    local_end 1972-01-21 00:00:00 (Fri)
  -16200,
  1,
  'EHDT',
      ],
      [
  62200499400, #    utc_start 1972-01-21 04:30:00 (Fri)
  62224866000, #      utc_end 1972-10-29 05:00:00 (Sun)
  62200481400, #  local_start 1972-01-20 23:30:00 (Thu)
  62224848000, #    local_end 1972-10-29 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62224866000, #    utc_start 1972-10-29 05:00:00 (Sun)
  62232121800, #      utc_end 1973-01-21 04:30:00 (Sun)
  62224849800, #  local_start 1972-10-29 00:30:00 (Sun)
  62232105600, #    local_end 1973-01-21 00:00:00 (Sun)
  -16200,
  1,
  'EHDT',
      ],
      [
  62232121800, #    utc_start 1973-01-21 04:30:00 (Sun)
  62256315600, #      utc_end 1973-10-28 05:00:00 (Sun)
  62232103800, #  local_start 1973-01-20 23:30:00 (Sat)
  62256297600, #    local_end 1973-10-28 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62256315600, #    utc_start 1973-10-28 05:00:00 (Sun)
  62263657800, #      utc_end 1974-01-21 04:30:00 (Mon)
  62256299400, #  local_start 1973-10-28 00:30:00 (Sun)
  62263641600, #    local_end 1974-01-21 00:00:00 (Mon)
  -16200,
  1,
  'EHDT',
      ],
      [
  62263657800, #    utc_start 1974-01-21 04:30:00 (Mon)
  62287765200, #      utc_end 1974-10-27 05:00:00 (Sun)
  62263639800, #  local_start 1974-01-20 23:30:00 (Sun)
  62287747200, #    local_end 1974-10-27 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62287765200, #    utc_start 1974-10-27 05:00:00 (Sun)
  63108482400, #      utc_end 2000-10-29 06:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63108482400, #    utc_start 2000-10-29 06:00:00 (Sun)
  63111506400, #      utc_end 2000-12-03 06:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63111488400, #    local_end 2000-12-03 01:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63111506400, #    utc_start 2000-12-03 06:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63111492000, #  local_start 2000-12-03 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -14400,
  0,
  'AST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {6}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_SANTO_DOMINGO

    $main::fatpacked{"DateTime/TimeZone/America/Sao_Paulo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_SAO_PAULO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Sao_Paulo;
  $DateTime::TimeZone::America::Sao_Paulo::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Sao_Paulo::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368468788, #      utc_end 1914-01-01 03:06:28 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  -11188,
  0,
  'LMT',
      ],
      [
  60368468788, #    utc_start 1914-01-01 03:06:28 (Thu)
  60928725600, #      utc_end 1931-10-03 14:00:00 (Sat)
  60368457988, #  local_start 1914-01-01 00:06:28 (Thu)
  60928714800, #    local_end 1931-10-03 11:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  60928725600, #    utc_start 1931-10-03 14:00:00 (Sat)
  60944320800, #      utc_end 1932-04-01 02:00:00 (Fri)
  60928718400, #  local_start 1931-10-03 12:00:00 (Sat)
  60944313600, #    local_end 1932-04-01 00:00:00 (Fri)
  -7200,
  1,
  'BRST',
      ],
      [
  60944320800, #    utc_start 1932-04-01 02:00:00 (Fri)
  60960308400, #      utc_end 1932-10-03 03:00:00 (Mon)
  60944310000, #  local_start 1932-03-31 23:00:00 (Thu)
  60960297600, #    local_end 1932-10-03 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  60960308400, #    utc_start 1932-10-03 03:00:00 (Mon)
  60975856800, #      utc_end 1933-04-01 02:00:00 (Sat)
  60960301200, #  local_start 1932-10-03 01:00:00 (Mon)
  60975849600, #    local_end 1933-04-01 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  60975856800, #    utc_start 1933-04-01 02:00:00 (Sat)
  61501863600, #      utc_end 1949-12-01 03:00:00 (Thu)
  60975846000, #  local_start 1933-03-31 23:00:00 (Fri)
  61501852800, #    local_end 1949-12-01 00:00:00 (Thu)
  -10800,
  0,
  'BRT',
      ],
      [
  61501863600, #    utc_start 1949-12-01 03:00:00 (Thu)
  61513614000, #      utc_end 1950-04-16 03:00:00 (Sun)
  61501856400, #  local_start 1949-12-01 01:00:00 (Thu)
  61513606800, #    local_end 1950-04-16 01:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61513614000, #    utc_start 1950-04-16 03:00:00 (Sun)
  61533399600, #      utc_end 1950-12-01 03:00:00 (Fri)
  61513603200, #  local_start 1950-04-16 00:00:00 (Sun)
  61533388800, #    local_end 1950-12-01 00:00:00 (Fri)
  -10800,
  0,
  'BRT',
      ],
      [
  61533399600, #    utc_start 1950-12-01 03:00:00 (Fri)
  61543850400, #      utc_end 1951-04-01 02:00:00 (Sun)
  61533392400, #  local_start 1950-12-01 01:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61543850400, #    utc_start 1951-04-01 02:00:00 (Sun)
  61564935600, #      utc_end 1951-12-01 03:00:00 (Sat)
  61543839600, #  local_start 1951-03-31 23:00:00 (Sat)
  61564924800, #    local_end 1951-12-01 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  61564935600, #    utc_start 1951-12-01 03:00:00 (Sat)
  61575472800, #      utc_end 1952-04-01 02:00:00 (Tue)
  61564928400, #  local_start 1951-12-01 01:00:00 (Sat)
  61575465600, #    local_end 1952-04-01 00:00:00 (Tue)
  -7200,
  1,
  'BRST',
      ],
      [
  61575472800, #    utc_start 1952-04-01 02:00:00 (Tue)
  61596558000, #      utc_end 1952-12-01 03:00:00 (Mon)
  61575462000, #  local_start 1952-03-31 23:00:00 (Mon)
  61596547200, #    local_end 1952-12-01 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  61596558000, #    utc_start 1952-12-01 03:00:00 (Mon)
  61604330400, #      utc_end 1953-03-01 02:00:00 (Sun)
  61596550800, #  local_start 1952-12-01 01:00:00 (Mon)
  61604323200, #    local_end 1953-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61604330400, #    utc_start 1953-03-01 02:00:00 (Sun)
  61940257200, #      utc_end 1963-10-23 03:00:00 (Wed)
  61604319600, #  local_start 1953-02-28 23:00:00 (Sat)
  61940246400, #    local_end 1963-10-23 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  61940257200, #    utc_start 1963-10-23 03:00:00 (Wed)
  61946301600, #      utc_end 1964-01-01 02:00:00 (Wed)
  61940250000, #  local_start 1963-10-23 01:00:00 (Wed)
  61946294400, #    local_end 1964-01-01 00:00:00 (Wed)
  -7200,
  1,
  'BRST',
      ],
      [
  61946301600, #    utc_start 1964-01-01 02:00:00 (Wed)
  61951485600, #      utc_end 1964-03-01 02:00:00 (Sun)
  61946294400, #  local_start 1964-01-01 00:00:00 (Wed)
  61951478400, #    local_end 1964-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  61951485600, #    utc_start 1964-03-01 02:00:00 (Sun)
  61980519600, #      utc_end 1965-01-31 03:00:00 (Sun)
  61951474800, #  local_start 1964-02-29 23:00:00 (Sat)
  61980508800, #    local_end 1965-01-31 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  61980519600, #    utc_start 1965-01-31 03:00:00 (Sun)
  61985613600, #      utc_end 1965-03-31 02:00:00 (Wed)
  61980512400, #  local_start 1965-01-31 01:00:00 (Sun)
  61985606400, #    local_end 1965-03-31 00:00:00 (Wed)
  -7200,
  1,
  'BRST',
      ],
      [
  61985613600, #    utc_start 1965-03-31 02:00:00 (Wed)
  62006785200, #      utc_end 1965-12-01 03:00:00 (Wed)
  61985602800, #  local_start 1965-03-30 23:00:00 (Tue)
  62006774400, #    local_end 1965-12-01 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  62006785200, #    utc_start 1965-12-01 03:00:00 (Wed)
  62014557600, #      utc_end 1966-03-01 02:00:00 (Tue)
  62006778000, #  local_start 1965-12-01 01:00:00 (Wed)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -7200,
  1,
  'BRST',
      ],
      [
  62014557600, #    utc_start 1966-03-01 02:00:00 (Tue)
  62035729200, #      utc_end 1966-11-01 03:00:00 (Tue)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62035718400, #    local_end 1966-11-01 00:00:00 (Tue)
  -10800,
  0,
  'BRT',
      ],
      [
  62035729200, #    utc_start 1966-11-01 03:00:00 (Tue)
  62046093600, #      utc_end 1967-03-01 02:00:00 (Wed)
  62035722000, #  local_start 1966-11-01 01:00:00 (Tue)
  62046086400, #    local_end 1967-03-01 00:00:00 (Wed)
  -7200,
  1,
  'BRST',
      ],
      [
  62046093600, #    utc_start 1967-03-01 02:00:00 (Wed)
  62067265200, #      utc_end 1967-11-01 03:00:00 (Wed)
  62046082800, #  local_start 1967-02-28 23:00:00 (Tue)
  62067254400, #    local_end 1967-11-01 00:00:00 (Wed)
  -10800,
  0,
  'BRT',
      ],
      [
  62067265200, #    utc_start 1967-11-01 03:00:00 (Wed)
  62077716000, #      utc_end 1968-03-01 02:00:00 (Fri)
  62067258000, #  local_start 1967-11-01 01:00:00 (Wed)
  62077708800, #    local_end 1968-03-01 00:00:00 (Fri)
  -7200,
  1,
  'BRST',
      ],
      [
  62077716000, #    utc_start 1968-03-01 02:00:00 (Fri)
  62635431600, #      utc_end 1985-11-02 03:00:00 (Sat)
  62077705200, #  local_start 1968-02-29 23:00:00 (Thu)
  62635420800, #    local_end 1985-11-02 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  62635431600, #    utc_start 1985-11-02 03:00:00 (Sat)
  62646919200, #      utc_end 1986-03-15 02:00:00 (Sat)
  62635424400, #  local_start 1985-11-02 01:00:00 (Sat)
  62646912000, #    local_end 1986-03-15 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  62646919200, #    utc_start 1986-03-15 02:00:00 (Sat)
  62666276400, #      utc_end 1986-10-25 03:00:00 (Sat)
  62646908400, #  local_start 1986-03-14 23:00:00 (Fri)
  62666265600, #    local_end 1986-10-25 00:00:00 (Sat)
  -10800,
  0,
  'BRT',
      ],
      [
  62666276400, #    utc_start 1986-10-25 03:00:00 (Sat)
  62675949600, #      utc_end 1987-02-14 02:00:00 (Sat)
  62666269200, #  local_start 1986-10-25 01:00:00 (Sat)
  62675942400, #    local_end 1987-02-14 00:00:00 (Sat)
  -7200,
  1,
  'BRST',
      ],
      [
  62675949600, #    utc_start 1987-02-14 02:00:00 (Sat)
  62697812400, #      utc_end 1987-10-25 03:00:00 (Sun)
  62675938800, #  local_start 1987-02-13 23:00:00 (Fri)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62697812400, #    utc_start 1987-10-25 03:00:00 (Sun)
  62706880800, #      utc_end 1988-02-07 02:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62706873600, #    local_end 1988-02-07 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62706880800, #    utc_start 1988-02-07 02:00:00 (Sun)
  62728657200, #      utc_end 1988-10-16 03:00:00 (Sun)
  62706870000, #  local_start 1988-02-06 23:00:00 (Sat)
  62728646400, #    local_end 1988-10-16 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62728657200, #    utc_start 1988-10-16 03:00:00 (Sun)
  62737725600, #      utc_end 1989-01-29 02:00:00 (Sun)
  62728650000, #  local_start 1988-10-16 01:00:00 (Sun)
  62737718400, #    local_end 1989-01-29 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62737725600, #    utc_start 1989-01-29 02:00:00 (Sun)
  62760106800, #      utc_end 1989-10-15 03:00:00 (Sun)
  62737714800, #  local_start 1989-01-28 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62760106800, #    utc_start 1989-10-15 03:00:00 (Sun)
  62770384800, #      utc_end 1990-02-11 02:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62770377600, #    local_end 1990-02-11 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62770384800, #    utc_start 1990-02-11 02:00:00 (Sun)
  62792161200, #      utc_end 1990-10-21 03:00:00 (Sun)
  62770374000, #  local_start 1990-02-10 23:00:00 (Sat)
  62792150400, #    local_end 1990-10-21 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62792161200, #    utc_start 1990-10-21 03:00:00 (Sun)
  62802439200, #      utc_end 1991-02-17 02:00:00 (Sun)
  62792154000, #  local_start 1990-10-21 01:00:00 (Sun)
  62802432000, #    local_end 1991-02-17 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62802439200, #    utc_start 1991-02-17 02:00:00 (Sun)
  62823610800, #      utc_end 1991-10-20 03:00:00 (Sun)
  62802428400, #  local_start 1991-02-16 23:00:00 (Sat)
  62823600000, #    local_end 1991-10-20 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62823610800, #    utc_start 1991-10-20 03:00:00 (Sun)
  62833284000, #      utc_end 1992-02-09 02:00:00 (Sun)
  62823603600, #  local_start 1991-10-20 01:00:00 (Sun)
  62833276800, #    local_end 1992-02-09 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62833284000, #    utc_start 1992-02-09 02:00:00 (Sun)
  62855665200, #      utc_end 1992-10-25 03:00:00 (Sun)
  62833273200, #  local_start 1992-02-08 23:00:00 (Sat)
  62855654400, #    local_end 1992-10-25 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62855665200, #    utc_start 1992-10-25 03:00:00 (Sun)
  62864128800, #      utc_end 1993-01-31 02:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62864121600, #    local_end 1993-01-31 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62864128800, #    utc_start 1993-01-31 02:00:00 (Sun)
  62886510000, #      utc_end 1993-10-17 03:00:00 (Sun)
  62864118000, #  local_start 1993-01-30 23:00:00 (Sat)
  62886499200, #    local_end 1993-10-17 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62886510000, #    utc_start 1993-10-17 03:00:00 (Sun)
  62897392800, #      utc_end 1994-02-20 02:00:00 (Sun)
  62886502800, #  local_start 1993-10-17 01:00:00 (Sun)
  62897385600, #    local_end 1994-02-20 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62897392800, #    utc_start 1994-02-20 02:00:00 (Sun)
  62917959600, #      utc_end 1994-10-16 03:00:00 (Sun)
  62897382000, #  local_start 1994-02-19 23:00:00 (Sat)
  62917948800, #    local_end 1994-10-16 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62917959600, #    utc_start 1994-10-16 03:00:00 (Sun)
  62928842400, #      utc_end 1995-02-19 02:00:00 (Sun)
  62917952400, #  local_start 1994-10-16 01:00:00 (Sun)
  62928835200, #    local_end 1995-02-19 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62928842400, #    utc_start 1995-02-19 02:00:00 (Sun)
  62949409200, #      utc_end 1995-10-15 03:00:00 (Sun)
  62928831600, #  local_start 1995-02-18 23:00:00 (Sat)
  62949398400, #    local_end 1995-10-15 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62949409200, #    utc_start 1995-10-15 03:00:00 (Sun)
  62959687200, #      utc_end 1996-02-11 02:00:00 (Sun)
  62949402000, #  local_start 1995-10-15 01:00:00 (Sun)
  62959680000, #    local_end 1996-02-11 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62959687200, #    utc_start 1996-02-11 02:00:00 (Sun)
  62980254000, #      utc_end 1996-10-06 03:00:00 (Sun)
  62959676400, #  local_start 1996-02-10 23:00:00 (Sat)
  62980243200, #    local_end 1996-10-06 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  62980254000, #    utc_start 1996-10-06 03:00:00 (Sun)
  62991741600, #      utc_end 1997-02-16 02:00:00 (Sun)
  62980246800, #  local_start 1996-10-06 01:00:00 (Sun)
  62991734400, #    local_end 1997-02-16 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  62991741600, #    utc_start 1997-02-16 02:00:00 (Sun)
  63011790000, #      utc_end 1997-10-06 03:00:00 (Mon)
  62991730800, #  local_start 1997-02-15 23:00:00 (Sat)
  63011779200, #    local_end 1997-10-06 00:00:00 (Mon)
  -10800,
  0,
  'BRT',
      ],
      [
  63011790000, #    utc_start 1997-10-06 03:00:00 (Mon)
  63024400800, #      utc_end 1998-03-01 02:00:00 (Sun)
  63011782800, #  local_start 1997-10-06 01:00:00 (Mon)
  63024393600, #    local_end 1998-03-01 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63024400800, #    utc_start 1998-03-01 02:00:00 (Sun)
  63043758000, #      utc_end 1998-10-11 03:00:00 (Sun)
  63024390000, #  local_start 1998-02-28 23:00:00 (Sat)
  63043747200, #    local_end 1998-10-11 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63043758000, #    utc_start 1998-10-11 03:00:00 (Sun)
  63055245600, #      utc_end 1999-02-21 02:00:00 (Sun)
  63043750800, #  local_start 1998-10-11 01:00:00 (Sun)
  63055238400, #    local_end 1999-02-21 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63055245600, #    utc_start 1999-02-21 02:00:00 (Sun)
  63074602800, #      utc_end 1999-10-03 03:00:00 (Sun)
  63055234800, #  local_start 1999-02-20 23:00:00 (Sat)
  63074592000, #    local_end 1999-10-03 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63074602800, #    utc_start 1999-10-03 03:00:00 (Sun)
  63087300000, #      utc_end 2000-02-27 02:00:00 (Sun)
  63074595600, #  local_start 1999-10-03 01:00:00 (Sun)
  63087292800, #    local_end 2000-02-27 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63087300000, #    utc_start 2000-02-27 02:00:00 (Sun)
  63106657200, #      utc_end 2000-10-08 03:00:00 (Sun)
  63087289200, #  local_start 2000-02-26 23:00:00 (Sat)
  63106646400, #    local_end 2000-10-08 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63106657200, #    utc_start 2000-10-08 03:00:00 (Sun)
  63118144800, #      utc_end 2001-02-18 02:00:00 (Sun)
  63106650000, #  local_start 2000-10-08 01:00:00 (Sun)
  63118137600, #    local_end 2001-02-18 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63118144800, #    utc_start 2001-02-18 02:00:00 (Sun)
  63138711600, #      utc_end 2001-10-14 03:00:00 (Sun)
  63118134000, #  local_start 2001-02-17 23:00:00 (Sat)
  63138700800, #    local_end 2001-10-14 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63138711600, #    utc_start 2001-10-14 03:00:00 (Sun)
  63149594400, #      utc_end 2002-02-17 02:00:00 (Sun)
  63138704400, #  local_start 2001-10-14 01:00:00 (Sun)
  63149587200, #    local_end 2002-02-17 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63149594400, #    utc_start 2002-02-17 02:00:00 (Sun)
  63171975600, #      utc_end 2002-11-03 03:00:00 (Sun)
  63149583600, #  local_start 2002-02-16 23:00:00 (Sat)
  63171964800, #    local_end 2002-11-03 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63171975600, #    utc_start 2002-11-03 03:00:00 (Sun)
  63181044000, #      utc_end 2003-02-16 02:00:00 (Sun)
  63171968400, #  local_start 2002-11-03 01:00:00 (Sun)
  63181036800, #    local_end 2003-02-16 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63181044000, #    utc_start 2003-02-16 02:00:00 (Sun)
  63202215600, #      utc_end 2003-10-19 03:00:00 (Sun)
  63181033200, #  local_start 2003-02-15 23:00:00 (Sat)
  63202204800, #    local_end 2003-10-19 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63202215600, #    utc_start 2003-10-19 03:00:00 (Sun)
  63212493600, #      utc_end 2004-02-15 02:00:00 (Sun)
  63202208400, #  local_start 2003-10-19 01:00:00 (Sun)
  63212486400, #    local_end 2004-02-15 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63212493600, #    utc_start 2004-02-15 02:00:00 (Sun)
  63235047600, #      utc_end 2004-11-02 03:00:00 (Tue)
  63212482800, #  local_start 2004-02-14 23:00:00 (Sat)
  63235036800, #    local_end 2004-11-02 00:00:00 (Tue)
  -10800,
  0,
  'BRT',
      ],
      [
  63235047600, #    utc_start 2004-11-02 03:00:00 (Tue)
  63244548000, #      utc_end 2005-02-20 02:00:00 (Sun)
  63235040400, #  local_start 2004-11-02 01:00:00 (Tue)
  63244540800, #    local_end 2005-02-20 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63244548000, #    utc_start 2005-02-20 02:00:00 (Sun)
  63265114800, #      utc_end 2005-10-16 03:00:00 (Sun)
  63244537200, #  local_start 2005-02-19 23:00:00 (Sat)
  63265104000, #    local_end 2005-10-16 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63265114800, #    utc_start 2005-10-16 03:00:00 (Sun)
  63275997600, #      utc_end 2006-02-19 02:00:00 (Sun)
  63265107600, #  local_start 2005-10-16 01:00:00 (Sun)
  63275990400, #    local_end 2006-02-19 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63275997600, #    utc_start 2006-02-19 02:00:00 (Sun)
  63298378800, #      utc_end 2006-11-05 03:00:00 (Sun)
  63275986800, #  local_start 2006-02-18 23:00:00 (Sat)
  63298368000, #    local_end 2006-11-05 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63298378800, #    utc_start 2006-11-05 03:00:00 (Sun)
  63308052000, #      utc_end 2007-02-25 02:00:00 (Sun)
  63298371600, #  local_start 2006-11-05 01:00:00 (Sun)
  63308044800, #    local_end 2007-02-25 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63308052000, #    utc_start 2007-02-25 02:00:00 (Sun)
  63328014000, #      utc_end 2007-10-14 03:00:00 (Sun)
  63308041200, #  local_start 2007-02-24 23:00:00 (Sat)
  63328003200, #    local_end 2007-10-14 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63328014000, #    utc_start 2007-10-14 03:00:00 (Sun)
  63338896800, #      utc_end 2008-02-17 02:00:00 (Sun)
  63328006800, #  local_start 2007-10-14 01:00:00 (Sun)
  63338889600, #    local_end 2008-02-17 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63338896800, #    utc_start 2008-02-17 02:00:00 (Sun)
  63360068400, #      utc_end 2008-10-19 03:00:00 (Sun)
  63338886000, #  local_start 2008-02-16 23:00:00 (Sat)
  63360057600, #    local_end 2008-10-19 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63360068400, #    utc_start 2008-10-19 03:00:00 (Sun)
  63370346400, #      utc_end 2009-02-15 02:00:00 (Sun)
  63360061200, #  local_start 2008-10-19 01:00:00 (Sun)
  63370339200, #    local_end 2009-02-15 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63370346400, #    utc_start 2009-02-15 02:00:00 (Sun)
  63391518000, #      utc_end 2009-10-18 03:00:00 (Sun)
  63370335600, #  local_start 2009-02-14 23:00:00 (Sat)
  63391507200, #    local_end 2009-10-18 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63391518000, #    utc_start 2009-10-18 03:00:00 (Sun)
  63402400800, #      utc_end 2010-02-21 02:00:00 (Sun)
  63391510800, #  local_start 2009-10-18 01:00:00 (Sun)
  63402393600, #    local_end 2010-02-21 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63402400800, #    utc_start 2010-02-21 02:00:00 (Sun)
  63422967600, #      utc_end 2010-10-17 03:00:00 (Sun)
  63402390000, #  local_start 2010-02-20 23:00:00 (Sat)
  63422956800, #    local_end 2010-10-17 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63422967600, #    utc_start 2010-10-17 03:00:00 (Sun)
  63433850400, #      utc_end 2011-02-20 02:00:00 (Sun)
  63422960400, #  local_start 2010-10-17 01:00:00 (Sun)
  63433843200, #    local_end 2011-02-20 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63433850400, #    utc_start 2011-02-20 02:00:00 (Sun)
  63454417200, #      utc_end 2011-10-16 03:00:00 (Sun)
  63433839600, #  local_start 2011-02-19 23:00:00 (Sat)
  63454406400, #    local_end 2011-10-16 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63454417200, #    utc_start 2011-10-16 03:00:00 (Sun)
  63465904800, #      utc_end 2012-02-26 02:00:00 (Sun)
  63454410000, #  local_start 2011-10-16 01:00:00 (Sun)
  63465897600, #    local_end 2012-02-26 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63465904800, #    utc_start 2012-02-26 02:00:00 (Sun)
  63486471600, #      utc_end 2012-10-21 03:00:00 (Sun)
  63465894000, #  local_start 2012-02-25 23:00:00 (Sat)
  63486460800, #    local_end 2012-10-21 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63486471600, #    utc_start 2012-10-21 03:00:00 (Sun)
  63496749600, #      utc_end 2013-02-17 02:00:00 (Sun)
  63486464400, #  local_start 2012-10-21 01:00:00 (Sun)
  63496742400, #    local_end 2013-02-17 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63496749600, #    utc_start 2013-02-17 02:00:00 (Sun)
  63517921200, #      utc_end 2013-10-20 03:00:00 (Sun)
  63496738800, #  local_start 2013-02-16 23:00:00 (Sat)
  63517910400, #    local_end 2013-10-20 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63517921200, #    utc_start 2013-10-20 03:00:00 (Sun)
  63528199200, #      utc_end 2014-02-16 02:00:00 (Sun)
  63517914000, #  local_start 2013-10-20 01:00:00 (Sun)
  63528192000, #    local_end 2014-02-16 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63528199200, #    utc_start 2014-02-16 02:00:00 (Sun)
  63549370800, #      utc_end 2014-10-19 03:00:00 (Sun)
  63528188400, #  local_start 2014-02-15 23:00:00 (Sat)
  63549360000, #    local_end 2014-10-19 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63549370800, #    utc_start 2014-10-19 03:00:00 (Sun)
  63560253600, #      utc_end 2015-02-22 02:00:00 (Sun)
  63549363600, #  local_start 2014-10-19 01:00:00 (Sun)
  63560246400, #    local_end 2015-02-22 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63560253600, #    utc_start 2015-02-22 02:00:00 (Sun)
  63580820400, #      utc_end 2015-10-18 03:00:00 (Sun)
  63560242800, #  local_start 2015-02-21 23:00:00 (Sat)
  63580809600, #    local_end 2015-10-18 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63580820400, #    utc_start 2015-10-18 03:00:00 (Sun)
  63591703200, #      utc_end 2016-02-21 02:00:00 (Sun)
  63580813200, #  local_start 2015-10-18 01:00:00 (Sun)
  63591696000, #    local_end 2016-02-21 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63591703200, #    utc_start 2016-02-21 02:00:00 (Sun)
  63612270000, #      utc_end 2016-10-16 03:00:00 (Sun)
  63591692400, #  local_start 2016-02-20 23:00:00 (Sat)
  63612259200, #    local_end 2016-10-16 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63612270000, #    utc_start 2016-10-16 03:00:00 (Sun)
  63623152800, #      utc_end 2017-02-19 02:00:00 (Sun)
  63612262800, #  local_start 2016-10-16 01:00:00 (Sun)
  63623145600, #    local_end 2017-02-19 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63623152800, #    utc_start 2017-02-19 02:00:00 (Sun)
  63643719600, #      utc_end 2017-10-15 03:00:00 (Sun)
  63623142000, #  local_start 2017-02-18 23:00:00 (Sat)
  63643708800, #    local_end 2017-10-15 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63643719600, #    utc_start 2017-10-15 03:00:00 (Sun)
  63654602400, #      utc_end 2018-02-18 02:00:00 (Sun)
  63643712400, #  local_start 2017-10-15 01:00:00 (Sun)
  63654595200, #    local_end 2018-02-18 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63654602400, #    utc_start 2018-02-18 02:00:00 (Sun)
  63675774000, #      utc_end 2018-10-21 03:00:00 (Sun)
  63654591600, #  local_start 2018-02-17 23:00:00 (Sat)
  63675763200, #    local_end 2018-10-21 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63675774000, #    utc_start 2018-10-21 03:00:00 (Sun)
  63686052000, #      utc_end 2019-02-17 02:00:00 (Sun)
  63675766800, #  local_start 2018-10-21 01:00:00 (Sun)
  63686044800, #    local_end 2019-02-17 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63686052000, #    utc_start 2019-02-17 02:00:00 (Sun)
  63707223600, #      utc_end 2019-10-20 03:00:00 (Sun)
  63686041200, #  local_start 2019-02-16 23:00:00 (Sat)
  63707212800, #    local_end 2019-10-20 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63707223600, #    utc_start 2019-10-20 03:00:00 (Sun)
  63717501600, #      utc_end 2020-02-16 02:00:00 (Sun)
  63707216400, #  local_start 2019-10-20 01:00:00 (Sun)
  63717494400, #    local_end 2020-02-16 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63717501600, #    utc_start 2020-02-16 02:00:00 (Sun)
  63738673200, #      utc_end 2020-10-18 03:00:00 (Sun)
  63717490800, #  local_start 2020-02-15 23:00:00 (Sat)
  63738662400, #    local_end 2020-10-18 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63738673200, #    utc_start 2020-10-18 03:00:00 (Sun)
  63749556000, #      utc_end 2021-02-21 02:00:00 (Sun)
  63738666000, #  local_start 2020-10-18 01:00:00 (Sun)
  63749548800, #    local_end 2021-02-21 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63749556000, #    utc_start 2021-02-21 02:00:00 (Sun)
  63770122800, #      utc_end 2021-10-17 03:00:00 (Sun)
  63749545200, #  local_start 2021-02-20 23:00:00 (Sat)
  63770112000, #    local_end 2021-10-17 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63770122800, #    utc_start 2021-10-17 03:00:00 (Sun)
  63781005600, #      utc_end 2022-02-20 02:00:00 (Sun)
  63770115600, #  local_start 2021-10-17 01:00:00 (Sun)
  63780998400, #    local_end 2022-02-20 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63781005600, #    utc_start 2022-02-20 02:00:00 (Sun)
  63801572400, #      utc_end 2022-10-16 03:00:00 (Sun)
  63780994800, #  local_start 2022-02-19 23:00:00 (Sat)
  63801561600, #    local_end 2022-10-16 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63801572400, #    utc_start 2022-10-16 03:00:00 (Sun)
  63813060000, #      utc_end 2023-02-26 02:00:00 (Sun)
  63801565200, #  local_start 2022-10-16 01:00:00 (Sun)
  63813052800, #    local_end 2023-02-26 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63813060000, #    utc_start 2023-02-26 02:00:00 (Sun)
  63833022000, #      utc_end 2023-10-15 03:00:00 (Sun)
  63813049200, #  local_start 2023-02-25 23:00:00 (Sat)
  63833011200, #    local_end 2023-10-15 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63833022000, #    utc_start 2023-10-15 03:00:00 (Sun)
  63843904800, #      utc_end 2024-02-18 02:00:00 (Sun)
  63833014800, #  local_start 2023-10-15 01:00:00 (Sun)
  63843897600, #    local_end 2024-02-18 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63843904800, #    utc_start 2024-02-18 02:00:00 (Sun)
  63865076400, #      utc_end 2024-10-20 03:00:00 (Sun)
  63843894000, #  local_start 2024-02-17 23:00:00 (Sat)
  63865065600, #    local_end 2024-10-20 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63865076400, #    utc_start 2024-10-20 03:00:00 (Sun)
  63875354400, #      utc_end 2025-02-16 02:00:00 (Sun)
  63865069200, #  local_start 2024-10-20 01:00:00 (Sun)
  63875347200, #    local_end 2025-02-16 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63875354400, #    utc_start 2025-02-16 02:00:00 (Sun)
  63896526000, #      utc_end 2025-10-19 03:00:00 (Sun)
  63875343600, #  local_start 2025-02-15 23:00:00 (Sat)
  63896515200, #    local_end 2025-10-19 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63896526000, #    utc_start 2025-10-19 03:00:00 (Sun)
  63907408800, #      utc_end 2026-02-22 02:00:00 (Sun)
  63896518800, #  local_start 2025-10-19 01:00:00 (Sun)
  63907401600, #    local_end 2026-02-22 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63907408800, #    utc_start 2026-02-22 02:00:00 (Sun)
  63927975600, #      utc_end 2026-10-18 03:00:00 (Sun)
  63907398000, #  local_start 2026-02-21 23:00:00 (Sat)
  63927964800, #    local_end 2026-10-18 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63927975600, #    utc_start 2026-10-18 03:00:00 (Sun)
  63938858400, #      utc_end 2027-02-21 02:00:00 (Sun)
  63927968400, #  local_start 2026-10-18 01:00:00 (Sun)
  63938851200, #    local_end 2027-02-21 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63938858400, #    utc_start 2027-02-21 02:00:00 (Sun)
  63959425200, #      utc_end 2027-10-17 03:00:00 (Sun)
  63938847600, #  local_start 2027-02-20 23:00:00 (Sat)
  63959414400, #    local_end 2027-10-17 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63959425200, #    utc_start 2027-10-17 03:00:00 (Sun)
  63970308000, #      utc_end 2028-02-20 02:00:00 (Sun)
  63959418000, #  local_start 2027-10-17 01:00:00 (Sun)
  63970300800, #    local_end 2028-02-20 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  63970308000, #    utc_start 2028-02-20 02:00:00 (Sun)
  63990874800, #      utc_end 2028-10-15 03:00:00 (Sun)
  63970297200, #  local_start 2028-02-19 23:00:00 (Sat)
  63990864000, #    local_end 2028-10-15 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  63990874800, #    utc_start 2028-10-15 03:00:00 (Sun)
  64001757600, #      utc_end 2029-02-18 02:00:00 (Sun)
  63990867600, #  local_start 2028-10-15 01:00:00 (Sun)
  64001750400, #    local_end 2029-02-18 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  64001757600, #    utc_start 2029-02-18 02:00:00 (Sun)
  64022929200, #      utc_end 2029-10-21 03:00:00 (Sun)
  64001746800, #  local_start 2029-02-17 23:00:00 (Sat)
  64022918400, #    local_end 2029-10-21 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  64022929200, #    utc_start 2029-10-21 03:00:00 (Sun)
  64033207200, #      utc_end 2030-02-17 02:00:00 (Sun)
  64022922000, #  local_start 2029-10-21 01:00:00 (Sun)
  64033200000, #    local_end 2030-02-17 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  64033207200, #    utc_start 2030-02-17 02:00:00 (Sun)
  64054378800, #      utc_end 2030-10-20 03:00:00 (Sun)
  64033196400, #  local_start 2030-02-16 23:00:00 (Sat)
  64054368000, #    local_end 2030-10-20 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  64054378800, #    utc_start 2030-10-20 03:00:00 (Sun)
  64064656800, #      utc_end 2031-02-16 02:00:00 (Sun)
  64054371600, #  local_start 2030-10-20 01:00:00 (Sun)
  64064649600, #    local_end 2031-02-16 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  64064656800, #    utc_start 2031-02-16 02:00:00 (Sun)
  64085828400, #      utc_end 2031-10-19 03:00:00 (Sun)
  64064646000, #  local_start 2031-02-15 23:00:00 (Sat)
  64085817600, #    local_end 2031-10-19 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  64085828400, #    utc_start 2031-10-19 03:00:00 (Sun)
  64096106400, #      utc_end 2032-02-15 02:00:00 (Sun)
  64085821200, #  local_start 2031-10-19 01:00:00 (Sun)
  64096099200, #    local_end 2032-02-15 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  64096106400, #    utc_start 2032-02-15 02:00:00 (Sun)
  64117278000, #      utc_end 2032-10-17 03:00:00 (Sun)
  64096095600, #  local_start 2032-02-14 23:00:00 (Sat)
  64117267200, #    local_end 2032-10-17 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  64117278000, #    utc_start 2032-10-17 03:00:00 (Sun)
  64128160800, #      utc_end 2033-02-20 02:00:00 (Sun)
  64117270800, #  local_start 2032-10-17 01:00:00 (Sun)
  64128153600, #    local_end 2033-02-20 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  64128160800, #    utc_start 2033-02-20 02:00:00 (Sun)
  64148727600, #      utc_end 2033-10-16 03:00:00 (Sun)
  64128150000, #  local_start 2033-02-19 23:00:00 (Sat)
  64148716800, #    local_end 2033-10-16 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  64148727600, #    utc_start 2033-10-16 03:00:00 (Sun)
  64160215200, #      utc_end 2034-02-26 02:00:00 (Sun)
  64148720400, #  local_start 2033-10-16 01:00:00 (Sun)
  64160208000, #    local_end 2034-02-26 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  64160215200, #    utc_start 2034-02-26 02:00:00 (Sun)
  64180177200, #      utc_end 2034-10-15 03:00:00 (Sun)
  64160204400, #  local_start 2034-02-25 23:00:00 (Sat)
  64180166400, #    local_end 2034-10-15 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  64180177200, #    utc_start 2034-10-15 03:00:00 (Sun)
  64191060000, #      utc_end 2035-02-18 02:00:00 (Sun)
  64180170000, #  local_start 2034-10-15 01:00:00 (Sun)
  64191052800, #    local_end 2035-02-18 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  64191060000, #    utc_start 2035-02-18 02:00:00 (Sun)
  64212231600, #      utc_end 2035-10-21 03:00:00 (Sun)
  64191049200, #  local_start 2035-02-17 23:00:00 (Sat)
  64212220800, #    local_end 2035-10-21 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  64212231600, #    utc_start 2035-10-21 03:00:00 (Sun)
  64222509600, #      utc_end 2036-02-17 02:00:00 (Sun)
  64212224400, #  local_start 2035-10-21 01:00:00 (Sun)
  64222502400, #    local_end 2036-02-17 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  64222509600, #    utc_start 2036-02-17 02:00:00 (Sun)
  64243681200, #      utc_end 2036-10-19 03:00:00 (Sun)
  64222498800, #  local_start 2036-02-16 23:00:00 (Sat)
  64243670400, #    local_end 2036-10-19 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  64243681200, #    utc_start 2036-10-19 03:00:00 (Sun)
  64254564000, #      utc_end 2037-02-22 02:00:00 (Sun)
  64243674000, #  local_start 2036-10-19 01:00:00 (Sun)
  64254556800, #    local_end 2037-02-22 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  64254564000, #    utc_start 2037-02-22 02:00:00 (Sun)
  64275130800, #      utc_end 2037-10-18 03:00:00 (Sun)
  64254553200, #  local_start 2037-02-21 23:00:00 (Sat)
  64275120000, #    local_end 2037-10-18 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  64275130800, #    utc_start 2037-10-18 03:00:00 (Sun)
  64286013600, #      utc_end 2038-02-21 02:00:00 (Sun)
  64275123600, #  local_start 2037-10-18 01:00:00 (Sun)
  64286006400, #    local_end 2038-02-21 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  64286013600, #    utc_start 2038-02-21 02:00:00 (Sun)
  64306580400, #      utc_end 2038-10-17 03:00:00 (Sun)
  64286002800, #  local_start 2038-02-20 23:00:00 (Sat)
  64306569600, #    local_end 2038-10-17 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
      [
  64306580400, #    utc_start 2038-10-17 03:00:00 (Sun)
  64317463200, #      utc_end 2039-02-20 02:00:00 (Sun)
  64306573200, #  local_start 2038-10-17 01:00:00 (Sun)
  64317456000, #    local_end 2039-02-20 00:00:00 (Sun)
  -7200,
  1,
  'BRST',
      ],
      [
  64317463200, #    utc_start 2039-02-20 02:00:00 (Sun)
  64338030000, #      utc_end 2039-10-16 03:00:00 (Sun)
  64317452400, #  local_start 2039-02-19 23:00:00 (Sat)
  64338019200, #    local_end 2039-10-16 00:00:00 (Sun)
  -10800,
  0,
  'BRT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {67}
  
  sub _max_year {2038}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -10800 }
  
  my $last_observance = bless( {
    'format' => 'BR%sT',
    'gmtoff' => '-3:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 716971,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 716971,
      'utc_rd_secs' => 0,
      'utc_year' => 1965
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -10800,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 716971,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 716971,
      'utc_rd_secs' => 7200,
      'utc_year' => 1965
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '0:00',
      'from' => '2038',
      'in' => 'Feb',
      'letter' => '',
      'name' => 'Brazil',
      'offset_from_std' => 0,
      'on' => 'Sun>=15',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '0:00',
      'from' => '2008',
      'in' => 'Oct',
      'letter' => 'S',
      'name' => 'Brazil',
      'offset_from_std' => 3600,
      'on' => 'Sun>=15',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_SAO_PAULO

    $main::fatpacked{"DateTime/TimeZone/America/Scoresbysund.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_SCORESBYSUND';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Scoresbysund;
  $DateTime::TimeZone::America::Scoresbysund::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Scoresbysund::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60449592472, #      utc_end 1916-07-28 01:27:52 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60449587200, #    local_end 1916-07-28 00:00:00 (Fri)
  -5272,
  0,
  'LMT',
      ],
      [
  60449592472, #    utc_start 1916-07-28 01:27:52 (Fri)
  62459524800, #      utc_end 1980-04-06 04:00:00 (Sun)
  60449585272, #  local_start 1916-07-27 23:27:52 (Thu)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  -7200,
  0,
  'CGT',
      ],
      [
  62459524800, #    utc_start 1980-04-06 04:00:00 (Sun)
  62474644800, #      utc_end 1980-09-28 04:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474641200, #    local_end 1980-09-28 03:00:00 (Sun)
  -3600,
  1,
  'CGST',
      ],
      [
  62474644800, #    utc_start 1980-09-28 04:00:00 (Sun)
  62490362400, #      utc_end 1981-03-29 02:00:00 (Sun)
  62474637600, #  local_start 1980-09-28 02:00:00 (Sun)
  62490355200, #    local_end 1981-03-29 00:00:00 (Sun)
  -7200,
  0,
  'CGT',
      ],
      [
  62490362400, #    utc_start 1981-03-29 02:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490362400, #  local_start 1981-03-29 02:00:00 (Sun)
  62506083600, #    local_end 1981-09-27 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506080000, #  local_start 1981-09-27 00:00:00 (Sun)
  62521804800, #    local_end 1982-03-28 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521808400, #  local_start 1982-03-28 01:00:00 (Sun)
  62537533200, #    local_end 1982-09-26 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537529600, #  local_start 1982-09-26 00:00:00 (Sun)
  62553254400, #    local_end 1983-03-27 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553258000, #  local_start 1983-03-27 01:00:00 (Sun)
  62568982800, #    local_end 1983-09-25 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568979200, #  local_start 1983-09-25 00:00:00 (Sun)
  62584704000, #    local_end 1984-03-25 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584707600, #  local_start 1984-03-25 01:00:00 (Sun)
  62601037200, #    local_end 1984-09-30 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601033600, #  local_start 1984-09-30 00:00:00 (Sun)
  62616758400, #    local_end 1985-03-31 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616762000, #  local_start 1985-03-31 01:00:00 (Sun)
  62632486800, #    local_end 1985-09-29 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632483200, #  local_start 1985-09-29 00:00:00 (Sun)
  62648208000, #    local_end 1986-03-30 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648211600, #  local_start 1986-03-30 01:00:00 (Sun)
  62663936400, #    local_end 1986-09-28 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663932800, #  local_start 1986-09-28 00:00:00 (Sun)
  62679657600, #    local_end 1987-03-29 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679661200, #  local_start 1987-03-29 01:00:00 (Sun)
  62695386000, #    local_end 1987-09-27 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695382400, #  local_start 1987-09-27 00:00:00 (Sun)
  62711107200, #    local_end 1988-03-27 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711110800, #  local_start 1988-03-27 01:00:00 (Sun)
  62726835600, #    local_end 1988-09-25 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726832000, #  local_start 1988-09-25 00:00:00 (Sun)
  62742556800, #    local_end 1989-03-26 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742560400, #  local_start 1989-03-26 01:00:00 (Sun)
  62758285200, #    local_end 1989-09-24 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758281600, #  local_start 1989-09-24 00:00:00 (Sun)
  62774006400, #    local_end 1990-03-25 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774010000, #  local_start 1990-03-25 01:00:00 (Sun)
  62790339600, #    local_end 1990-09-30 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790336000, #  local_start 1990-09-30 00:00:00 (Sun)
  62806060800, #    local_end 1991-03-31 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806064400, #  local_start 1991-03-31 01:00:00 (Sun)
  62821789200, #    local_end 1991-09-29 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821785600, #  local_start 1991-09-29 00:00:00 (Sun)
  62837510400, #    local_end 1992-03-29 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837514000, #  local_start 1992-03-29 01:00:00 (Sun)
  62853238800, #    local_end 1992-09-27 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853235200, #  local_start 1992-09-27 00:00:00 (Sun)
  62868960000, #    local_end 1993-03-28 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868963600, #  local_start 1993-03-28 01:00:00 (Sun)
  62884688400, #    local_end 1993-09-26 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884684800, #  local_start 1993-09-26 00:00:00 (Sun)
  62900409600, #    local_end 1994-03-27 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900413200, #  local_start 1994-03-27 01:00:00 (Sun)
  62916138000, #    local_end 1994-09-25 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916134400, #  local_start 1994-09-25 00:00:00 (Sun)
  62931859200, #    local_end 1995-03-26 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931862800, #  local_start 1995-03-26 01:00:00 (Sun)
  62947587600, #    local_end 1995-09-24 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947584000, #  local_start 1995-09-24 00:00:00 (Sun)
  62963913600, #    local_end 1996-03-31 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963917200, #  local_start 1996-03-31 01:00:00 (Sun)
  62982061200, #    local_end 1996-10-27 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982057600, #  local_start 1996-10-27 00:00:00 (Sun)
  62995363200, #    local_end 1997-03-30 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995366800, #  local_start 1997-03-30 01:00:00 (Sun)
  63013510800, #    local_end 1997-10-26 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013507200, #  local_start 1997-10-26 00:00:00 (Sun)
  63026812800, #    local_end 1998-03-29 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026816400, #  local_start 1998-03-29 01:00:00 (Sun)
  63044960400, #    local_end 1998-10-25 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044956800, #  local_start 1998-10-25 00:00:00 (Sun)
  63058262400, #    local_end 1999-03-28 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058266000, #  local_start 1999-03-28 01:00:00 (Sun)
  63077014800, #    local_end 1999-10-31 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077011200, #  local_start 1999-10-31 00:00:00 (Sun)
  63089712000, #    local_end 2000-03-26 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089715600, #  local_start 2000-03-26 01:00:00 (Sun)
  63108464400, #    local_end 2000-10-29 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108460800, #  local_start 2000-10-29 00:00:00 (Sun)
  63121161600, #    local_end 2001-03-25 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121165200, #  local_start 2001-03-25 01:00:00 (Sun)
  63139914000, #    local_end 2001-10-28 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139910400, #  local_start 2001-10-28 00:00:00 (Sun)
  63153216000, #    local_end 2002-03-31 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153219600, #  local_start 2002-03-31 01:00:00 (Sun)
  63171363600, #    local_end 2002-10-27 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171360000, #  local_start 2002-10-27 00:00:00 (Sun)
  63184665600, #    local_end 2003-03-30 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184669200, #  local_start 2003-03-30 01:00:00 (Sun)
  63202813200, #    local_end 2003-10-26 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202809600, #  local_start 2003-10-26 00:00:00 (Sun)
  63216115200, #    local_end 2004-03-28 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216118800, #  local_start 2004-03-28 01:00:00 (Sun)
  63234867600, #    local_end 2004-10-31 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234864000, #  local_start 2004-10-31 00:00:00 (Sun)
  63247564800, #    local_end 2005-03-27 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247568400, #  local_start 2005-03-27 01:00:00 (Sun)
  63266317200, #    local_end 2005-10-30 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266313600, #  local_start 2005-10-30 00:00:00 (Sun)
  63279014400, #    local_end 2006-03-26 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279018000, #  local_start 2006-03-26 01:00:00 (Sun)
  63297766800, #    local_end 2006-10-29 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297763200, #  local_start 2006-10-29 00:00:00 (Sun)
  63310464000, #    local_end 2007-03-25 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310467600, #  local_start 2007-03-25 01:00:00 (Sun)
  63329216400, #    local_end 2007-10-28 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329212800, #  local_start 2007-10-28 00:00:00 (Sun)
  63342518400, #    local_end 2008-03-30 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342522000, #  local_start 2008-03-30 01:00:00 (Sun)
  63360666000, #    local_end 2008-10-26 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360662400, #  local_start 2008-10-26 00:00:00 (Sun)
  63373968000, #    local_end 2009-03-29 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373971600, #  local_start 2009-03-29 01:00:00 (Sun)
  63392115600, #    local_end 2009-10-25 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392112000, #  local_start 2009-10-25 00:00:00 (Sun)
  63405417600, #    local_end 2010-03-28 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405421200, #  local_start 2010-03-28 01:00:00 (Sun)
  63424170000, #    local_end 2010-10-31 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424166400, #  local_start 2010-10-31 00:00:00 (Sun)
  63436867200, #    local_end 2011-03-27 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436870800, #  local_start 2011-03-27 01:00:00 (Sun)
  63455619600, #    local_end 2011-10-30 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455616000, #  local_start 2011-10-30 00:00:00 (Sun)
  63468316800, #    local_end 2012-03-25 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468320400, #  local_start 2012-03-25 01:00:00 (Sun)
  63487069200, #    local_end 2012-10-28 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487065600, #  local_start 2012-10-28 00:00:00 (Sun)
  63500371200, #    local_end 2013-03-31 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500374800, #  local_start 2013-03-31 01:00:00 (Sun)
  63518518800, #    local_end 2013-10-27 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518515200, #  local_start 2013-10-27 00:00:00 (Sun)
  63531820800, #    local_end 2014-03-30 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531824400, #  local_start 2014-03-30 01:00:00 (Sun)
  63549968400, #    local_end 2014-10-26 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549964800, #  local_start 2014-10-26 00:00:00 (Sun)
  63563270400, #    local_end 2015-03-29 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563274000, #  local_start 2015-03-29 01:00:00 (Sun)
  63581418000, #    local_end 2015-10-25 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581414400, #  local_start 2015-10-25 00:00:00 (Sun)
  63594720000, #    local_end 2016-03-27 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594723600, #  local_start 2016-03-27 01:00:00 (Sun)
  63613472400, #    local_end 2016-10-30 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613468800, #  local_start 2016-10-30 00:00:00 (Sun)
  63626169600, #    local_end 2017-03-26 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626173200, #  local_start 2017-03-26 01:00:00 (Sun)
  63644922000, #    local_end 2017-10-29 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644918400, #  local_start 2017-10-29 00:00:00 (Sun)
  63657619200, #    local_end 2018-03-25 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657622800, #  local_start 2018-03-25 01:00:00 (Sun)
  63676371600, #    local_end 2018-10-28 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676368000, #  local_start 2018-10-28 00:00:00 (Sun)
  63689673600, #    local_end 2019-03-31 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689677200, #  local_start 2019-03-31 01:00:00 (Sun)
  63707821200, #    local_end 2019-10-27 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707817600, #  local_start 2019-10-27 00:00:00 (Sun)
  63721123200, #    local_end 2020-03-29 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721126800, #  local_start 2020-03-29 01:00:00 (Sun)
  63739270800, #    local_end 2020-10-25 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739267200, #  local_start 2020-10-25 00:00:00 (Sun)
  63752572800, #    local_end 2021-03-28 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752576400, #  local_start 2021-03-28 01:00:00 (Sun)
  63771325200, #    local_end 2021-10-31 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771321600, #  local_start 2021-10-31 00:00:00 (Sun)
  63784022400, #    local_end 2022-03-27 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784026000, #  local_start 2022-03-27 01:00:00 (Sun)
  63802774800, #    local_end 2022-10-30 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802771200, #  local_start 2022-10-30 00:00:00 (Sun)
  63815472000, #    local_end 2023-03-26 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815475600, #  local_start 2023-03-26 01:00:00 (Sun)
  63834224400, #    local_end 2023-10-29 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834220800, #  local_start 2023-10-29 00:00:00 (Sun)
  63847526400, #    local_end 2024-03-31 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847530000, #  local_start 2024-03-31 01:00:00 (Sun)
  63865674000, #    local_end 2024-10-27 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865670400, #  local_start 2024-10-27 00:00:00 (Sun)
  63878976000, #    local_end 2025-03-30 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878979600, #  local_start 2025-03-30 01:00:00 (Sun)
  63897123600, #    local_end 2025-10-26 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897120000, #  local_start 2025-10-26 00:00:00 (Sun)
  63910425600, #    local_end 2026-03-29 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910429200, #  local_start 2026-03-29 01:00:00 (Sun)
  63928573200, #    local_end 2026-10-25 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928569600, #  local_start 2026-10-25 00:00:00 (Sun)
  63941875200, #    local_end 2027-03-28 00:00:00 (Sun)
  -3600,
  0,
  'EGT',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941878800, #  local_start 2027-03-28 01:00:00 (Sun)
  63960627600, #    local_end 2027-10-31 01:00:00 (Sun)
  0,
  1,
  'EGST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {48}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -3600 }
  
  my $last_observance = bless( {
    'format' => 'EG%sT',
    'gmtoff' => '-1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723268,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723268,
      'utc_rd_secs' => 7200,
      'utc_year' => 1982
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723268,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723268,
      'utc_rd_secs' => 7200,
      'utc_year' => 1982
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_SCORESBYSUND

    $main::fatpacked{"DateTime/TimeZone/America/Sitka.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_SITKA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Sitka;
  $DateTime::TimeZone::America::Sitka::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Sitka::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  58910317273, #      utc_end 1867-10-17 09:01:13 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  58910371200, #    local_end 1867-10-18 00:00:00 (Fri)
  53927,
  0,
  'LMT',
      ],
      [
  58910317273, #    utc_start 1867-10-17 09:01:13 (Thu)
  59946728473, #      utc_end 1900-08-20 21:01:13 (Mon)
  58910284800, #  local_start 1867-10-17 00:00:00 (Thu)
  59946696000, #    local_end 1900-08-20 12:00:00 (Mon)
  -32473,
  0,
  'LMT',
      ],
      [
  59946728473, #    utc_start 1900-08-20 21:01:13 (Mon)
  61252099200, #      utc_end 1942-01-01 08:00:00 (Thu)
  59946699673, #  local_start 1900-08-20 13:01:13 (Mon)
  61252070400, #    local_end 1942-01-01 00:00:00 (Thu)
  -28800,
  0,
  'PST',
      ],
      [
  61252099200, #    utc_start 1942-01-01 08:00:00 (Thu)
  61255476000, #      utc_end 1942-02-09 10:00:00 (Mon)
  61252070400, #  local_start 1942-01-01 00:00:00 (Thu)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -28800,
  0,
  'PST',
      ],
      [
  61255476000, #    utc_start 1942-02-09 10:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366262400, #    local_end 1945-08-14 16:00:00 (Tue)
  -25200,
  1,
  'PWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370298000, #      utc_end 1945-09-30 09:00:00 (Sun)
  61366262400, #  local_start 1945-08-14 16:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PPT',
      ],
      [
  61370298000, #    utc_start 1945-09-30 09:00:00 (Sun)
  61378329600, #      utc_end 1946-01-01 08:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -28800,
  0,
  'PST',
      ],
      [
  61378329600, #    utc_start 1946-01-01 08:00:00 (Tue)
  62104176000, #      utc_end 1969-01-01 08:00:00 (Wed)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  62104147200, #    local_end 1969-01-01 00:00:00 (Wed)
  -28800,
  0,
  'PST',
      ],
      [
  62104176000, #    utc_start 1969-01-01 08:00:00 (Wed)
  62114205600, #      utc_end 1969-04-27 10:00:00 (Sun)
  62104147200, #  local_start 1969-01-01 00:00:00 (Wed)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62114205600, #    utc_start 1969-04-27 10:00:00 (Sun)
  62129926800, #      utc_end 1969-10-26 09:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62129926800, #    utc_start 1969-10-26 09:00:00 (Sun)
  62145655200, #      utc_end 1970-04-26 10:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62145655200, #    utc_start 1970-04-26 10:00:00 (Sun)
  62161376400, #      utc_end 1970-10-25 09:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62161376400, #    utc_start 1970-10-25 09:00:00 (Sun)
  62177104800, #      utc_end 1971-04-25 10:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62177104800, #    utc_start 1971-04-25 10:00:00 (Sun)
  62193430800, #      utc_end 1971-10-31 09:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62193430800, #    utc_start 1971-10-31 09:00:00 (Sun)
  62209159200, #      utc_end 1972-04-30 10:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62209159200, #    utc_start 1972-04-30 10:00:00 (Sun)
  62224880400, #      utc_end 1972-10-29 09:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62224880400, #    utc_start 1972-10-29 09:00:00 (Sun)
  62240608800, #      utc_end 1973-04-29 10:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62240608800, #    utc_start 1973-04-29 10:00:00 (Sun)
  62256330000, #      utc_end 1973-10-28 09:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62256330000, #    utc_start 1973-10-28 09:00:00 (Sun)
  62262381600, #      utc_end 1974-01-06 10:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62262381600, #    utc_start 1974-01-06 10:00:00 (Sun)
  62287779600, #      utc_end 1974-10-27 09:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62287779600, #    utc_start 1974-10-27 09:00:00 (Sun)
  62298064800, #      utc_end 1975-02-23 10:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62298064800, #    utc_start 1975-02-23 10:00:00 (Sun)
  62319229200, #      utc_end 1975-10-26 09:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62319229200, #    utc_start 1975-10-26 09:00:00 (Sun)
  62334957600, #      utc_end 1976-04-25 10:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62334957600, #    utc_start 1976-04-25 10:00:00 (Sun)
  62351283600, #      utc_end 1976-10-31 09:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62351283600, #    utc_start 1976-10-31 09:00:00 (Sun)
  62366407200, #      utc_end 1977-04-24 10:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62366407200, #    utc_start 1977-04-24 10:00:00 (Sun)
  62382733200, #      utc_end 1977-10-30 09:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62382733200, #    utc_start 1977-10-30 09:00:00 (Sun)
  62398461600, #      utc_end 1978-04-30 10:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62398461600, #    utc_start 1978-04-30 10:00:00 (Sun)
  62414182800, #      utc_end 1978-10-29 09:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62414182800, #    utc_start 1978-10-29 09:00:00 (Sun)
  62429911200, #      utc_end 1979-04-29 10:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62429911200, #    utc_start 1979-04-29 10:00:00 (Sun)
  62445632400, #      utc_end 1979-10-28 09:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62445632400, #    utc_start 1979-10-28 09:00:00 (Sun)
  62461360800, #      utc_end 1980-04-27 10:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62461360800, #    utc_start 1980-04-27 10:00:00 (Sun)
  62477082000, #      utc_end 1980-10-26 09:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62477082000, #    utc_start 1980-10-26 09:00:00 (Sun)
  62492810400, #      utc_end 1981-04-26 10:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62492810400, #    utc_start 1981-04-26 10:00:00 (Sun)
  62508531600, #      utc_end 1981-10-25 09:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62508531600, #    utc_start 1981-10-25 09:00:00 (Sun)
  62524260000, #      utc_end 1982-04-25 10:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62524260000, #    utc_start 1982-04-25 10:00:00 (Sun)
  62540586000, #      utc_end 1982-10-31 09:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62540586000, #    utc_start 1982-10-31 09:00:00 (Sun)
  62555709600, #      utc_end 1983-04-24 10:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62555709600, #    utc_start 1983-04-24 10:00:00 (Sun)
  62572035600, #      utc_end 1983-10-30 09:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62572035600, #    utc_start 1983-10-30 09:00:00 (Sun)
  62574714000, #      utc_end 1983-11-30 09:00:00 (Wed)
  62572003200, #  local_start 1983-10-30 00:00:00 (Sun)
  62574681600, #    local_end 1983-11-30 00:00:00 (Wed)
  -32400,
  0,
  'YST',
      ],
      [
  62574714000, #    utc_start 1983-11-30 09:00:00 (Wed)
  62587767600, #      utc_end 1984-04-29 11:00:00 (Sun)
  62574681600, #  local_start 1983-11-30 00:00:00 (Wed)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62587767600, #    utc_start 1984-04-29 11:00:00 (Sun)
  62603488800, #      utc_end 1984-10-28 10:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62603488800, #    utc_start 1984-10-28 10:00:00 (Sun)
  62619217200, #      utc_end 1985-04-28 11:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62619217200, #    utc_start 1985-04-28 11:00:00 (Sun)
  62634938400, #      utc_end 1985-10-27 10:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62634938400, #    utc_start 1985-10-27 10:00:00 (Sun)
  62650666800, #      utc_end 1986-04-27 11:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62650666800, #    utc_start 1986-04-27 11:00:00 (Sun)
  62666388000, #      utc_end 1986-10-26 10:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62666388000, #    utc_start 1986-10-26 10:00:00 (Sun)
  62680302000, #      utc_end 1987-04-05 11:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62680302000, #    utc_start 1987-04-05 11:00:00 (Sun)
  62697837600, #      utc_end 1987-10-25 10:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62697837600, #    utc_start 1987-10-25 10:00:00 (Sun)
  62711751600, #      utc_end 1988-04-03 11:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62711751600, #    utc_start 1988-04-03 11:00:00 (Sun)
  62729892000, #      utc_end 1988-10-30 10:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62729892000, #    utc_start 1988-10-30 10:00:00 (Sun)
  62743201200, #      utc_end 1989-04-02 11:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62743201200, #    utc_start 1989-04-02 11:00:00 (Sun)
  62761341600, #      utc_end 1989-10-29 10:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62761341600, #    utc_start 1989-10-29 10:00:00 (Sun)
  62774650800, #      utc_end 1990-04-01 11:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62774650800, #    utc_start 1990-04-01 11:00:00 (Sun)
  62792791200, #      utc_end 1990-10-28 10:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62792791200, #    utc_start 1990-10-28 10:00:00 (Sun)
  62806705200, #      utc_end 1991-04-07 11:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62806705200, #    utc_start 1991-04-07 11:00:00 (Sun)
  62824240800, #      utc_end 1991-10-27 10:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62824240800, #    utc_start 1991-10-27 10:00:00 (Sun)
  62838154800, #      utc_end 1992-04-05 11:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62838154800, #    utc_start 1992-04-05 11:00:00 (Sun)
  62855690400, #      utc_end 1992-10-25 10:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62855690400, #    utc_start 1992-10-25 10:00:00 (Sun)
  62869604400, #      utc_end 1993-04-04 11:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62869604400, #    utc_start 1993-04-04 11:00:00 (Sun)
  62887744800, #      utc_end 1993-10-31 10:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62887744800, #    utc_start 1993-10-31 10:00:00 (Sun)
  62901054000, #      utc_end 1994-04-03 11:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62901054000, #    utc_start 1994-04-03 11:00:00 (Sun)
  62919194400, #      utc_end 1994-10-30 10:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62919194400, #    utc_start 1994-10-30 10:00:00 (Sun)
  62932503600, #      utc_end 1995-04-02 11:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62932503600, #    utc_start 1995-04-02 11:00:00 (Sun)
  62950644000, #      utc_end 1995-10-29 10:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62950644000, #    utc_start 1995-10-29 10:00:00 (Sun)
  62964558000, #      utc_end 1996-04-07 11:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62964558000, #    utc_start 1996-04-07 11:00:00 (Sun)
  62982093600, #      utc_end 1996-10-27 10:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62982093600, #    utc_start 1996-10-27 10:00:00 (Sun)
  62996007600, #      utc_end 1997-04-06 11:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62996007600, #    utc_start 1997-04-06 11:00:00 (Sun)
  63013543200, #      utc_end 1997-10-26 10:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63013543200, #    utc_start 1997-10-26 10:00:00 (Sun)
  63027457200, #      utc_end 1998-04-05 11:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63027457200, #    utc_start 1998-04-05 11:00:00 (Sun)
  63044992800, #      utc_end 1998-10-25 10:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63044992800, #    utc_start 1998-10-25 10:00:00 (Sun)
  63058906800, #      utc_end 1999-04-04 11:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63058906800, #    utc_start 1999-04-04 11:00:00 (Sun)
  63077047200, #      utc_end 1999-10-31 10:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63077047200, #    utc_start 1999-10-31 10:00:00 (Sun)
  63090356400, #      utc_end 2000-04-02 11:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63090356400, #    utc_start 2000-04-02 11:00:00 (Sun)
  63108496800, #      utc_end 2000-10-29 10:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63108496800, #    utc_start 2000-10-29 10:00:00 (Sun)
  63121806000, #      utc_end 2001-04-01 11:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63121806000, #    utc_start 2001-04-01 11:00:00 (Sun)
  63139946400, #      utc_end 2001-10-28 10:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63139946400, #    utc_start 2001-10-28 10:00:00 (Sun)
  63153860400, #      utc_end 2002-04-07 11:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63153860400, #    utc_start 2002-04-07 11:00:00 (Sun)
  63171396000, #      utc_end 2002-10-27 10:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63171396000, #    utc_start 2002-10-27 10:00:00 (Sun)
  63185310000, #      utc_end 2003-04-06 11:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63185310000, #    utc_start 2003-04-06 11:00:00 (Sun)
  63202845600, #      utc_end 2003-10-26 10:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63202845600, #    utc_start 2003-10-26 10:00:00 (Sun)
  63216759600, #      utc_end 2004-04-04 11:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63216759600, #    utc_start 2004-04-04 11:00:00 (Sun)
  63234900000, #      utc_end 2004-10-31 10:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63234900000, #    utc_start 2004-10-31 10:00:00 (Sun)
  63248209200, #      utc_end 2005-04-03 11:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63248209200, #    utc_start 2005-04-03 11:00:00 (Sun)
  63266349600, #      utc_end 2005-10-30 10:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63266349600, #    utc_start 2005-10-30 10:00:00 (Sun)
  63279658800, #      utc_end 2006-04-02 11:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63279658800, #    utc_start 2006-04-02 11:00:00 (Sun)
  63297799200, #      utc_end 2006-10-29 10:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63297799200, #    utc_start 2006-10-29 10:00:00 (Sun)
  63309294000, #      utc_end 2007-03-11 11:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63309294000, #    utc_start 2007-03-11 11:00:00 (Sun)
  63329853600, #      utc_end 2007-11-04 10:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63329853600, #    utc_start 2007-11-04 10:00:00 (Sun)
  63340743600, #      utc_end 2008-03-09 11:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63340743600, #    utc_start 2008-03-09 11:00:00 (Sun)
  63361303200, #      utc_end 2008-11-02 10:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63361303200, #    utc_start 2008-11-02 10:00:00 (Sun)
  63372193200, #      utc_end 2009-03-08 11:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63372193200, #    utc_start 2009-03-08 11:00:00 (Sun)
  63392752800, #      utc_end 2009-11-01 10:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63392752800, #    utc_start 2009-11-01 10:00:00 (Sun)
  63404247600, #      utc_end 2010-03-14 11:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63404247600, #    utc_start 2010-03-14 11:00:00 (Sun)
  63424807200, #      utc_end 2010-11-07 10:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63424807200, #    utc_start 2010-11-07 10:00:00 (Sun)
  63435697200, #      utc_end 2011-03-13 11:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63435697200, #    utc_start 2011-03-13 11:00:00 (Sun)
  63456256800, #      utc_end 2011-11-06 10:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63456256800, #    utc_start 2011-11-06 10:00:00 (Sun)
  63467146800, #      utc_end 2012-03-11 11:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63467146800, #    utc_start 2012-03-11 11:00:00 (Sun)
  63487706400, #      utc_end 2012-11-04 10:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63487706400, #    utc_start 2012-11-04 10:00:00 (Sun)
  63498596400, #      utc_end 2013-03-10 11:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63498596400, #    utc_start 2013-03-10 11:00:00 (Sun)
  63519156000, #      utc_end 2013-11-03 10:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63519156000, #    utc_start 2013-11-03 10:00:00 (Sun)
  63530046000, #      utc_end 2014-03-09 11:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63530046000, #    utc_start 2014-03-09 11:00:00 (Sun)
  63550605600, #      utc_end 2014-11-02 10:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63550605600, #    utc_start 2014-11-02 10:00:00 (Sun)
  63561495600, #      utc_end 2015-03-08 11:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63561495600, #    utc_start 2015-03-08 11:00:00 (Sun)
  63582055200, #      utc_end 2015-11-01 10:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63582055200, #    utc_start 2015-11-01 10:00:00 (Sun)
  63593550000, #      utc_end 2016-03-13 11:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63593550000, #    utc_start 2016-03-13 11:00:00 (Sun)
  63614109600, #      utc_end 2016-11-06 10:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63614109600, #    utc_start 2016-11-06 10:00:00 (Sun)
  63624999600, #      utc_end 2017-03-12 11:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63624999600, #    utc_start 2017-03-12 11:00:00 (Sun)
  63645559200, #      utc_end 2017-11-05 10:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63645559200, #    utc_start 2017-11-05 10:00:00 (Sun)
  63656449200, #      utc_end 2018-03-11 11:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63656449200, #    utc_start 2018-03-11 11:00:00 (Sun)
  63677008800, #      utc_end 2018-11-04 10:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63677008800, #    utc_start 2018-11-04 10:00:00 (Sun)
  63687898800, #      utc_end 2019-03-10 11:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63687898800, #    utc_start 2019-03-10 11:00:00 (Sun)
  63708458400, #      utc_end 2019-11-03 10:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63708458400, #    utc_start 2019-11-03 10:00:00 (Sun)
  63719348400, #      utc_end 2020-03-08 11:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63719348400, #    utc_start 2020-03-08 11:00:00 (Sun)
  63739908000, #      utc_end 2020-11-01 10:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63739908000, #    utc_start 2020-11-01 10:00:00 (Sun)
  63751402800, #      utc_end 2021-03-14 11:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63751402800, #    utc_start 2021-03-14 11:00:00 (Sun)
  63771962400, #      utc_end 2021-11-07 10:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63771962400, #    utc_start 2021-11-07 10:00:00 (Sun)
  63782852400, #      utc_end 2022-03-13 11:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63782852400, #    utc_start 2022-03-13 11:00:00 (Sun)
  63803412000, #      utc_end 2022-11-06 10:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63803412000, #    utc_start 2022-11-06 10:00:00 (Sun)
  63814302000, #      utc_end 2023-03-12 11:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63814302000, #    utc_start 2023-03-12 11:00:00 (Sun)
  63834861600, #      utc_end 2023-11-05 10:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63834861600, #    utc_start 2023-11-05 10:00:00 (Sun)
  63845751600, #      utc_end 2024-03-10 11:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63845751600, #    utc_start 2024-03-10 11:00:00 (Sun)
  63866311200, #      utc_end 2024-11-03 10:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63866311200, #    utc_start 2024-11-03 10:00:00 (Sun)
  63877201200, #      utc_end 2025-03-09 11:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63877201200, #    utc_start 2025-03-09 11:00:00 (Sun)
  63897760800, #      utc_end 2025-11-02 10:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63897760800, #    utc_start 2025-11-02 10:00:00 (Sun)
  63908650800, #      utc_end 2026-03-08 11:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63908650800, #    utc_start 2026-03-08 11:00:00 (Sun)
  63929210400, #      utc_end 2026-11-01 10:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63929210400, #    utc_start 2026-11-01 10:00:00 (Sun)
  63940705200, #      utc_end 2027-03-14 11:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63940705200, #    utc_start 2027-03-14 11:00:00 (Sun)
  63961264800, #      utc_end 2027-11-07 10:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {61}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -32400 }
  
  my $last_observance = bless( {
    'format' => 'AK%sT',
    'gmtoff' => '-9:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724244,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724244,
      'utc_rd_secs' => 0,
      'utc_year' => 1984
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -32400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724244,
      'local_rd_secs' => 32400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724244,
      'utc_rd_secs' => 32400,
      'utc_year' => 1984
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_SITKA

    $main::fatpacked{"DateTime/TimeZone/America/St_Johns.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_ST_JOHNS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::St_Johns;
  $DateTime::TimeZone::America::St_Johns::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::St_Johns::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59421785452, #      utc_end 1884-01-01 03:30:52 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59421772800, #    local_end 1884-01-01 00:00:00 (Tue)
  -12652,
  0,
  'LMT',
      ],
      [
  59421785452, #    utc_start 1884-01-01 03:30:52 (Tue)
  60471552652, #      utc_end 1917-04-08 05:30:52 (Sun)
  59421772800, #  local_start 1884-01-01 00:00:00 (Tue)
  60471540000, #    local_end 1917-04-08 02:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60471552652, #    utc_start 1917-04-08 05:30:52 (Sun)
  60485545852, #      utc_end 1917-09-17 04:30:52 (Mon)
  60471543600, #  local_start 1917-04-08 03:00:00 (Sun)
  60485536800, #    local_end 1917-09-17 02:00:00 (Mon)
  -9052,
  1,
  'NDT',
      ],
      [
  60485545852, #    utc_start 1917-09-17 04:30:52 (Mon)
  60494700652, #      utc_end 1918-01-01 03:30:52 (Tue)
  60485533200, #  local_start 1917-09-17 01:00:00 (Mon)
  60494688000, #    local_end 1918-01-01 00:00:00 (Tue)
  -12652,
  0,
  'NST',
      ],
      [
  60494700652, #    utc_start 1918-01-01 03:30:52 (Tue)
  60503607052, #      utc_end 1918-04-14 05:30:52 (Sun)
  60494688000, #  local_start 1918-01-01 00:00:00 (Tue)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60503607052, #    utc_start 1918-04-14 05:30:52 (Sun)
  60520537852, #      utc_end 1918-10-27 04:30:52 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  60520537852, #    utc_start 1918-10-27 04:30:52 (Sun)
  60526236652, #      utc_end 1919-01-01 03:30:52 (Wed)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60526224000, #    local_end 1919-01-01 00:00:00 (Wed)
  -12652,
  0,
  'NST',
      ],
      [
  60526236652, #    utc_start 1919-01-01 03:30:52 (Wed)
  60537033052, #      utc_end 1919-05-06 02:30:52 (Tue)
  60526224000, #  local_start 1919-01-01 00:00:00 (Wed)
  60537020400, #    local_end 1919-05-05 23:00:00 (Mon)
  -12652,
  0,
  'NST',
      ],
      [
  60537033052, #    utc_start 1919-05-06 02:30:52 (Tue)
  60545583052, #      utc_end 1919-08-13 01:30:52 (Wed)
  60537024000, #  local_start 1919-05-06 00:00:00 (Tue)
  60545574000, #    local_end 1919-08-12 23:00:00 (Tue)
  -9052,
  1,
  'NDT',
      ],
      [
  60545583052, #    utc_start 1919-08-13 01:30:52 (Wed)
  60568396252, #      utc_end 1920-05-03 02:30:52 (Mon)
  60545570400, #  local_start 1919-08-12 22:00:00 (Tue)
  60568383600, #    local_end 1920-05-02 23:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60568396252, #    utc_start 1920-05-03 02:30:52 (Mon)
  60584117452, #      utc_end 1920-11-01 01:30:52 (Mon)
  60568387200, #  local_start 1920-05-03 00:00:00 (Mon)
  60584108400, #    local_end 1920-10-31 23:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  60584117452, #    utc_start 1920-11-01 01:30:52 (Mon)
  60599845852, #      utc_end 1921-05-02 02:30:52 (Mon)
  60584104800, #  local_start 1920-10-31 22:00:00 (Sun)
  60599833200, #    local_end 1921-05-01 23:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60599845852, #    utc_start 1921-05-02 02:30:52 (Mon)
  60615567052, #      utc_end 1921-10-31 01:30:52 (Mon)
  60599836800, #  local_start 1921-05-02 00:00:00 (Mon)
  60615558000, #    local_end 1921-10-30 23:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  60615567052, #    utc_start 1921-10-31 01:30:52 (Mon)
  60631900252, #      utc_end 1922-05-08 02:30:52 (Mon)
  60615554400, #  local_start 1921-10-30 22:00:00 (Sun)
  60631887600, #    local_end 1922-05-07 23:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60631900252, #    utc_start 1922-05-08 02:30:52 (Mon)
  60647016652, #      utc_end 1922-10-30 01:30:52 (Mon)
  60631891200, #  local_start 1922-05-08 00:00:00 (Mon)
  60647007600, #    local_end 1922-10-29 23:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  60647016652, #    utc_start 1922-10-30 01:30:52 (Mon)
  60663349852, #      utc_end 1923-05-07 02:30:52 (Mon)
  60647004000, #  local_start 1922-10-29 22:00:00 (Sun)
  60663337200, #    local_end 1923-05-06 23:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60663349852, #    utc_start 1923-05-07 02:30:52 (Mon)
  60678466252, #      utc_end 1923-10-29 01:30:52 (Mon)
  60663340800, #  local_start 1923-05-07 00:00:00 (Mon)
  60678457200, #    local_end 1923-10-28 23:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  60678466252, #    utc_start 1923-10-29 01:30:52 (Mon)
  60694799452, #      utc_end 1924-05-05 02:30:52 (Mon)
  60678453600, #  local_start 1923-10-28 22:00:00 (Sun)
  60694786800, #    local_end 1924-05-04 23:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60694799452, #    utc_start 1924-05-05 02:30:52 (Mon)
  60709915852, #      utc_end 1924-10-27 01:30:52 (Mon)
  60694790400, #  local_start 1924-05-05 00:00:00 (Mon)
  60709906800, #    local_end 1924-10-26 23:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  60709915852, #    utc_start 1924-10-27 01:30:52 (Mon)
  60726249052, #      utc_end 1925-05-04 02:30:52 (Mon)
  60709903200, #  local_start 1924-10-26 22:00:00 (Sun)
  60726236400, #    local_end 1925-05-03 23:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60726249052, #    utc_start 1925-05-04 02:30:52 (Mon)
  60741365452, #      utc_end 1925-10-26 01:30:52 (Mon)
  60726240000, #  local_start 1925-05-04 00:00:00 (Mon)
  60741356400, #    local_end 1925-10-25 23:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  60741365452, #    utc_start 1925-10-26 01:30:52 (Mon)
  60757698652, #      utc_end 1926-05-03 02:30:52 (Mon)
  60741352800, #  local_start 1925-10-25 22:00:00 (Sun)
  60757686000, #    local_end 1926-05-02 23:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60757698652, #    utc_start 1926-05-03 02:30:52 (Mon)
  60773419852, #      utc_end 1926-11-01 01:30:52 (Mon)
  60757689600, #  local_start 1926-05-03 00:00:00 (Mon)
  60773410800, #    local_end 1926-10-31 23:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  60773419852, #    utc_start 1926-11-01 01:30:52 (Mon)
  60789148252, #      utc_end 1927-05-02 02:30:52 (Mon)
  60773407200, #  local_start 1926-10-31 22:00:00 (Sun)
  60789135600, #    local_end 1927-05-01 23:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60789148252, #    utc_start 1927-05-02 02:30:52 (Mon)
  60804869452, #      utc_end 1927-10-31 01:30:52 (Mon)
  60789139200, #  local_start 1927-05-02 00:00:00 (Mon)
  60804860400, #    local_end 1927-10-30 23:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  60804869452, #    utc_start 1927-10-31 01:30:52 (Mon)
  60821202652, #      utc_end 1928-05-07 02:30:52 (Mon)
  60804856800, #  local_start 1927-10-30 22:00:00 (Sun)
  60821190000, #    local_end 1928-05-06 23:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60821202652, #    utc_start 1928-05-07 02:30:52 (Mon)
  60836319052, #      utc_end 1928-10-29 01:30:52 (Mon)
  60821193600, #  local_start 1928-05-07 00:00:00 (Mon)
  60836310000, #    local_end 1928-10-28 23:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  60836319052, #    utc_start 1928-10-29 01:30:52 (Mon)
  60852652252, #      utc_end 1929-05-06 02:30:52 (Mon)
  60836306400, #  local_start 1928-10-28 22:00:00 (Sun)
  60852639600, #    local_end 1929-05-05 23:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60852652252, #    utc_start 1929-05-06 02:30:52 (Mon)
  60867768652, #      utc_end 1929-10-28 01:30:52 (Mon)
  60852643200, #  local_start 1929-05-06 00:00:00 (Mon)
  60867759600, #    local_end 1929-10-27 23:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  60867768652, #    utc_start 1929-10-28 01:30:52 (Mon)
  60884101852, #      utc_end 1930-05-05 02:30:52 (Mon)
  60867756000, #  local_start 1929-10-27 22:00:00 (Sun)
  60884089200, #    local_end 1930-05-04 23:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60884101852, #    utc_start 1930-05-05 02:30:52 (Mon)
  60899218252, #      utc_end 1930-10-27 01:30:52 (Mon)
  60884092800, #  local_start 1930-05-05 00:00:00 (Mon)
  60899209200, #    local_end 1930-10-26 23:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  60899218252, #    utc_start 1930-10-27 01:30:52 (Mon)
  60915551452, #      utc_end 1931-05-04 02:30:52 (Mon)
  60899205600, #  local_start 1930-10-26 22:00:00 (Sun)
  60915538800, #    local_end 1931-05-03 23:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60915551452, #    utc_start 1931-05-04 02:30:52 (Mon)
  60930667852, #      utc_end 1931-10-26 01:30:52 (Mon)
  60915542400, #  local_start 1931-05-04 00:00:00 (Mon)
  60930658800, #    local_end 1931-10-25 23:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  60930667852, #    utc_start 1931-10-26 01:30:52 (Mon)
  60947001052, #      utc_end 1932-05-02 02:30:52 (Mon)
  60930655200, #  local_start 1931-10-25 22:00:00 (Sun)
  60946988400, #    local_end 1932-05-01 23:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60947001052, #    utc_start 1932-05-02 02:30:52 (Mon)
  60962722252, #      utc_end 1932-10-31 01:30:52 (Mon)
  60946992000, #  local_start 1932-05-02 00:00:00 (Mon)
  60962713200, #    local_end 1932-10-30 23:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  60962722252, #    utc_start 1932-10-31 01:30:52 (Mon)
  60979055452, #      utc_end 1933-05-08 02:30:52 (Mon)
  60962709600, #  local_start 1932-10-30 22:00:00 (Sun)
  60979042800, #    local_end 1933-05-07 23:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  60979055452, #    utc_start 1933-05-08 02:30:52 (Mon)
  60994171852, #      utc_end 1933-10-30 01:30:52 (Mon)
  60979046400, #  local_start 1933-05-08 00:00:00 (Mon)
  60994162800, #    local_end 1933-10-29 23:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  60994171852, #    utc_start 1933-10-30 01:30:52 (Mon)
  61010505052, #      utc_end 1934-05-07 02:30:52 (Mon)
  60994159200, #  local_start 1933-10-29 22:00:00 (Sun)
  61010492400, #    local_end 1934-05-06 23:00:00 (Sun)
  -12652,
  0,
  'NST',
      ],
      [
  61010505052, #    utc_start 1934-05-07 02:30:52 (Mon)
  61025621452, #      utc_end 1934-10-29 01:30:52 (Mon)
  61010496000, #  local_start 1934-05-07 00:00:00 (Mon)
  61025612400, #    local_end 1934-10-28 23:00:00 (Sun)
  -9052,
  1,
  'NDT',
      ],
      [
  61025621452, #    utc_start 1934-10-29 01:30:52 (Mon)
  61038761452, #      utc_end 1935-03-30 03:30:52 (Sat)
  61025608800, #  local_start 1934-10-28 22:00:00 (Sun)
  61038748800, #    local_end 1935-03-30 00:00:00 (Sat)
  -12652,
  0,
  'NST',
      ],
      [
  61038761452, #    utc_start 1935-03-30 03:30:52 (Sat)
  61041954600, #      utc_end 1935-05-06 02:30:00 (Mon)
  61038748852, #  local_start 1935-03-30 00:00:52 (Sat)
  61041942000, #    local_end 1935-05-05 23:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61041954600, #    utc_start 1935-05-06 02:30:00 (Mon)
  61057071000, #      utc_end 1935-10-28 01:30:00 (Mon)
  61041945600, #  local_start 1935-05-06 00:00:00 (Mon)
  61057062000, #    local_end 1935-10-27 23:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61057071000, #    utc_start 1935-10-28 01:30:00 (Mon)
  61074012600, #      utc_end 1936-05-11 03:30:00 (Mon)
  61057058400, #  local_start 1935-10-27 22:00:00 (Sun)
  61074000000, #    local_end 1936-05-11 00:00:00 (Mon)
  -12600,
  0,
  'NST',
      ],
      [
  61074012600, #    utc_start 1936-05-11 03:30:00 (Mon)
  61086709800, #      utc_end 1936-10-05 02:30:00 (Mon)
  61074003600, #  local_start 1936-05-11 01:00:00 (Mon)
  61086700800, #    local_end 1936-10-05 00:00:00 (Mon)
  -9000,
  1,
  'NDT',
      ],
      [
  61086709800, #    utc_start 1936-10-05 02:30:00 (Mon)
  61105462200, #      utc_end 1937-05-10 03:30:00 (Mon)
  61086697200, #  local_start 1936-10-04 23:00:00 (Sun)
  61105449600, #    local_end 1937-05-10 00:00:00 (Mon)
  -12600,
  0,
  'NST',
      ],
      [
  61105462200, #    utc_start 1937-05-10 03:30:00 (Mon)
  61118159400, #      utc_end 1937-10-04 02:30:00 (Mon)
  61105453200, #  local_start 1937-05-10 01:00:00 (Mon)
  61118150400, #    local_end 1937-10-04 00:00:00 (Mon)
  -9000,
  1,
  'NDT',
      ],
      [
  61118159400, #    utc_start 1937-10-04 02:30:00 (Mon)
  61136911800, #      utc_end 1938-05-09 03:30:00 (Mon)
  61118146800, #  local_start 1937-10-03 23:00:00 (Sun)
  61136899200, #    local_end 1938-05-09 00:00:00 (Mon)
  -12600,
  0,
  'NST',
      ],
      [
  61136911800, #    utc_start 1938-05-09 03:30:00 (Mon)
  61149609000, #      utc_end 1938-10-03 02:30:00 (Mon)
  61136902800, #  local_start 1938-05-09 01:00:00 (Mon)
  61149600000, #    local_end 1938-10-03 00:00:00 (Mon)
  -9000,
  1,
  'NDT',
      ],
      [
  61149609000, #    utc_start 1938-10-03 02:30:00 (Mon)
  61168966200, #      utc_end 1939-05-15 03:30:00 (Mon)
  61149596400, #  local_start 1938-10-02 23:00:00 (Sun)
  61168953600, #    local_end 1939-05-15 00:00:00 (Mon)
  -12600,
  0,
  'NST',
      ],
      [
  61168966200, #    utc_start 1939-05-15 03:30:00 (Mon)
  61181058600, #      utc_end 1939-10-02 02:30:00 (Mon)
  61168957200, #  local_start 1939-05-15 01:00:00 (Mon)
  61181049600, #    local_end 1939-10-02 00:00:00 (Mon)
  -9000,
  1,
  'NDT',
      ],
      [
  61181058600, #    utc_start 1939-10-02 02:30:00 (Mon)
  61200415800, #      utc_end 1940-05-13 03:30:00 (Mon)
  61181046000, #  local_start 1939-10-01 23:00:00 (Sun)
  61200403200, #    local_end 1940-05-13 00:00:00 (Mon)
  -12600,
  0,
  'NST',
      ],
      [
  61200415800, #    utc_start 1940-05-13 03:30:00 (Mon)
  61213113000, #      utc_end 1940-10-07 02:30:00 (Mon)
  61200406800, #  local_start 1940-05-13 01:00:00 (Mon)
  61213104000, #    local_end 1940-10-07 00:00:00 (Mon)
  -9000,
  1,
  'NDT',
      ],
      [
  61213113000, #    utc_start 1940-10-07 02:30:00 (Mon)
  61231865400, #      utc_end 1941-05-12 03:30:00 (Mon)
  61213100400, #  local_start 1940-10-06 23:00:00 (Sun)
  61231852800, #    local_end 1941-05-12 00:00:00 (Mon)
  -12600,
  0,
  'NST',
      ],
      [
  61231865400, #    utc_start 1941-05-12 03:30:00 (Mon)
  61244562600, #      utc_end 1941-10-06 02:30:00 (Mon)
  61231856400, #  local_start 1941-05-12 01:00:00 (Mon)
  61244553600, #    local_end 1941-10-06 00:00:00 (Mon)
  -9000,
  1,
  'NDT',
      ],
      [
  61244562600, #    utc_start 1941-10-06 02:30:00 (Mon)
  61263315000, #      utc_end 1942-05-11 03:30:00 (Mon)
  61244550000, #  local_start 1941-10-05 23:00:00 (Sun)
  61263302400, #    local_end 1942-05-11 00:00:00 (Mon)
  -12600,
  0,
  'NST',
      ],
      [
  61263315000, #    utc_start 1942-05-11 03:30:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61263306000, #  local_start 1942-05-11 01:00:00 (Mon)
  61366278600, #    local_end 1945-08-14 20:30:00 (Tue)
  -9000,
  1,
  'NWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370281800, #      utc_end 1945-09-30 04:30:00 (Sun)
  61366278600, #  local_start 1945-08-14 20:30:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -9000,
  1,
  'NPT',
      ],
      [
  61370281800, #    utc_start 1945-09-30 04:30:00 (Sun)
  61378313400, #      utc_end 1946-01-01 03:30:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -12600,
  0,
  'NST',
      ],
      [
  61378313400, #    utc_start 1946-01-01 03:30:00 (Tue)
  61389639000, #      utc_end 1946-05-12 05:30:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61389626400, #    local_end 1946-05-12 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61389639000, #    utc_start 1946-05-12 05:30:00 (Sun)
  61402336200, #      utc_end 1946-10-06 04:30:00 (Sun)
  61389630000, #  local_start 1946-05-12 03:00:00 (Sun)
  61402327200, #    local_end 1946-10-06 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61402336200, #    utc_start 1946-10-06 04:30:00 (Sun)
  61421088600, #      utc_end 1947-05-11 05:30:00 (Sun)
  61402323600, #  local_start 1946-10-06 01:00:00 (Sun)
  61421076000, #    local_end 1947-05-11 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61421088600, #    utc_start 1947-05-11 05:30:00 (Sun)
  61433785800, #      utc_end 1947-10-05 04:30:00 (Sun)
  61421079600, #  local_start 1947-05-11 03:00:00 (Sun)
  61433776800, #    local_end 1947-10-05 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61433785800, #    utc_start 1947-10-05 04:30:00 (Sun)
  61452538200, #      utc_end 1948-05-09 05:30:00 (Sun)
  61433773200, #  local_start 1947-10-05 01:00:00 (Sun)
  61452525600, #    local_end 1948-05-09 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61452538200, #    utc_start 1948-05-09 05:30:00 (Sun)
  61465235400, #      utc_end 1948-10-03 04:30:00 (Sun)
  61452529200, #  local_start 1948-05-09 03:00:00 (Sun)
  61465226400, #    local_end 1948-10-03 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61465235400, #    utc_start 1948-10-03 04:30:00 (Sun)
  61483987800, #      utc_end 1949-05-08 05:30:00 (Sun)
  61465222800, #  local_start 1948-10-03 01:00:00 (Sun)
  61483975200, #    local_end 1949-05-08 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61483987800, #    utc_start 1949-05-08 05:30:00 (Sun)
  61496685000, #      utc_end 1949-10-02 04:30:00 (Sun)
  61483978800, #  local_start 1949-05-08 03:00:00 (Sun)
  61496676000, #    local_end 1949-10-02 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61496685000, #    utc_start 1949-10-02 04:30:00 (Sun)
  61516042200, #      utc_end 1950-05-14 05:30:00 (Sun)
  61496672400, #  local_start 1949-10-02 01:00:00 (Sun)
  61516029600, #    local_end 1950-05-14 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61516042200, #    utc_start 1950-05-14 05:30:00 (Sun)
  61528739400, #      utc_end 1950-10-08 04:30:00 (Sun)
  61516033200, #  local_start 1950-05-14 03:00:00 (Sun)
  61528730400, #    local_end 1950-10-08 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61528739400, #    utc_start 1950-10-08 04:30:00 (Sun)
  61546282200, #      utc_end 1951-04-29 05:30:00 (Sun)
  61528726800, #  local_start 1950-10-08 01:00:00 (Sun)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61546282200, #    utc_start 1951-04-29 05:30:00 (Sun)
  61559584200, #      utc_end 1951-09-30 04:30:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61559584200, #    utc_start 1951-09-30 04:30:00 (Sun)
  61577731800, #      utc_end 1952-04-27 05:30:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61577731800, #    utc_start 1952-04-27 05:30:00 (Sun)
  61591033800, #      utc_end 1952-09-28 04:30:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61591033800, #    utc_start 1952-09-28 04:30:00 (Sun)
  61609181400, #      utc_end 1953-04-26 05:30:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61609181400, #    utc_start 1953-04-26 05:30:00 (Sun)
  61622483400, #      utc_end 1953-09-27 04:30:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61622483400, #    utc_start 1953-09-27 04:30:00 (Sun)
  61640631000, #      utc_end 1954-04-25 05:30:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61640631000, #    utc_start 1954-04-25 05:30:00 (Sun)
  61653933000, #      utc_end 1954-09-26 04:30:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61653933000, #    utc_start 1954-09-26 04:30:00 (Sun)
  61672080600, #      utc_end 1955-04-24 05:30:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61672080600, #    utc_start 1955-04-24 05:30:00 (Sun)
  61685382600, #      utc_end 1955-09-25 04:30:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61685373600, #    local_end 1955-09-25 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61685382600, #    utc_start 1955-09-25 04:30:00 (Sun)
  61704135000, #      utc_end 1956-04-29 05:30:00 (Sun)
  61685370000, #  local_start 1955-09-25 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61704135000, #    utc_start 1956-04-29 05:30:00 (Sun)
  61717437000, #      utc_end 1956-09-30 04:30:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61717428000, #    local_end 1956-09-30 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61717437000, #    utc_start 1956-09-30 04:30:00 (Sun)
  61735584600, #      utc_end 1957-04-28 05:30:00 (Sun)
  61717424400, #  local_start 1956-09-30 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61735584600, #    utc_start 1957-04-28 05:30:00 (Sun)
  61748886600, #      utc_end 1957-09-29 04:30:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61748886600, #    utc_start 1957-09-29 04:30:00 (Sun)
  61767034200, #      utc_end 1958-04-27 05:30:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61767034200, #    utc_start 1958-04-27 05:30:00 (Sun)
  61780336200, #      utc_end 1958-09-28 04:30:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61780327200, #    local_end 1958-09-28 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61780336200, #    utc_start 1958-09-28 04:30:00 (Sun)
  61798483800, #      utc_end 1959-04-26 05:30:00 (Sun)
  61780323600, #  local_start 1958-09-28 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61798483800, #    utc_start 1959-04-26 05:30:00 (Sun)
  61811785800, #      utc_end 1959-09-27 04:30:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61811776800, #    local_end 1959-09-27 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61811785800, #    utc_start 1959-09-27 04:30:00 (Sun)
  61829933400, #      utc_end 1960-04-24 05:30:00 (Sun)
  61811773200, #  local_start 1959-09-27 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61829933400, #    utc_start 1960-04-24 05:30:00 (Sun)
  61846259400, #      utc_end 1960-10-30 04:30:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61846250400, #    local_end 1960-10-30 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61846259400, #    utc_start 1960-10-30 04:30:00 (Sun)
  61861987800, #      utc_end 1961-04-30 05:30:00 (Sun)
  61846246800, #  local_start 1960-10-30 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61861987800, #    utc_start 1961-04-30 05:30:00 (Sun)
  61877709000, #      utc_end 1961-10-29 04:30:00 (Sun)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  61877700000, #    local_end 1961-10-29 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61877709000, #    utc_start 1961-10-29 04:30:00 (Sun)
  61893437400, #      utc_end 1962-04-29 05:30:00 (Sun)
  61877696400, #  local_start 1961-10-29 01:00:00 (Sun)
  61893424800, #    local_end 1962-04-29 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61893437400, #    utc_start 1962-04-29 05:30:00 (Sun)
  61909158600, #      utc_end 1962-10-28 04:30:00 (Sun)
  61893428400, #  local_start 1962-04-29 03:00:00 (Sun)
  61909149600, #    local_end 1962-10-28 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61909158600, #    utc_start 1962-10-28 04:30:00 (Sun)
  61924887000, #      utc_end 1963-04-28 05:30:00 (Sun)
  61909146000, #  local_start 1962-10-28 01:00:00 (Sun)
  61924874400, #    local_end 1963-04-28 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61924887000, #    utc_start 1963-04-28 05:30:00 (Sun)
  61940608200, #      utc_end 1963-10-27 04:30:00 (Sun)
  61924878000, #  local_start 1963-04-28 03:00:00 (Sun)
  61940599200, #    local_end 1963-10-27 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61940608200, #    utc_start 1963-10-27 04:30:00 (Sun)
  61956336600, #      utc_end 1964-04-26 05:30:00 (Sun)
  61940595600, #  local_start 1963-10-27 01:00:00 (Sun)
  61956324000, #    local_end 1964-04-26 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61956336600, #    utc_start 1964-04-26 05:30:00 (Sun)
  61972057800, #      utc_end 1964-10-25 04:30:00 (Sun)
  61956327600, #  local_start 1964-04-26 03:00:00 (Sun)
  61972048800, #    local_end 1964-10-25 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  61972057800, #    utc_start 1964-10-25 04:30:00 (Sun)
  61987786200, #      utc_end 1965-04-25 05:30:00 (Sun)
  61972045200, #  local_start 1964-10-25 01:00:00 (Sun)
  61987773600, #    local_end 1965-04-25 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  61987786200, #    utc_start 1965-04-25 05:30:00 (Sun)
  62004112200, #      utc_end 1965-10-31 04:30:00 (Sun)
  61987777200, #  local_start 1965-04-25 03:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62004112200, #    utc_start 1965-10-31 04:30:00 (Sun)
  62019235800, #      utc_end 1966-04-24 05:30:00 (Sun)
  62004099600, #  local_start 1965-10-31 01:00:00 (Sun)
  62019223200, #    local_end 1966-04-24 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62019235800, #    utc_start 1966-04-24 05:30:00 (Sun)
  62035561800, #      utc_end 1966-10-30 04:30:00 (Sun)
  62019226800, #  local_start 1966-04-24 03:00:00 (Sun)
  62035552800, #    local_end 1966-10-30 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62035561800, #    utc_start 1966-10-30 04:30:00 (Sun)
  62051290200, #      utc_end 1967-04-30 05:30:00 (Sun)
  62035549200, #  local_start 1966-10-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62051290200, #    utc_start 1967-04-30 05:30:00 (Sun)
  62067011400, #      utc_end 1967-10-29 04:30:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62067011400, #    utc_start 1967-10-29 04:30:00 (Sun)
  62082739800, #      utc_end 1968-04-28 05:30:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62082739800, #    utc_start 1968-04-28 05:30:00 (Sun)
  62098461000, #      utc_end 1968-10-27 04:30:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62098461000, #    utc_start 1968-10-27 04:30:00 (Sun)
  62114189400, #      utc_end 1969-04-27 05:30:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62114189400, #    utc_start 1969-04-27 05:30:00 (Sun)
  62129910600, #      utc_end 1969-10-26 04:30:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62129910600, #    utc_start 1969-10-26 04:30:00 (Sun)
  62145639000, #      utc_end 1970-04-26 05:30:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62145639000, #    utc_start 1970-04-26 05:30:00 (Sun)
  62161360200, #      utc_end 1970-10-25 04:30:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62161360200, #    utc_start 1970-10-25 04:30:00 (Sun)
  62177088600, #      utc_end 1971-04-25 05:30:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62177088600, #    utc_start 1971-04-25 05:30:00 (Sun)
  62193414600, #      utc_end 1971-10-31 04:30:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62193414600, #    utc_start 1971-10-31 04:30:00 (Sun)
  62209143000, #      utc_end 1972-04-30 05:30:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62209143000, #    utc_start 1972-04-30 05:30:00 (Sun)
  62224864200, #      utc_end 1972-10-29 04:30:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62224864200, #    utc_start 1972-10-29 04:30:00 (Sun)
  62240592600, #      utc_end 1973-04-29 05:30:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62240592600, #    utc_start 1973-04-29 05:30:00 (Sun)
  62256313800, #      utc_end 1973-10-28 04:30:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62256313800, #    utc_start 1973-10-28 04:30:00 (Sun)
  62272042200, #      utc_end 1974-04-28 05:30:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62272029600, #    local_end 1974-04-28 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62272042200, #    utc_start 1974-04-28 05:30:00 (Sun)
  62287763400, #      utc_end 1974-10-27 04:30:00 (Sun)
  62272033200, #  local_start 1974-04-28 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62287763400, #    utc_start 1974-10-27 04:30:00 (Sun)
  62303491800, #      utc_end 1975-04-27 05:30:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62303479200, #    local_end 1975-04-27 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62303491800, #    utc_start 1975-04-27 05:30:00 (Sun)
  62319213000, #      utc_end 1975-10-26 04:30:00 (Sun)
  62303482800, #  local_start 1975-04-27 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62319213000, #    utc_start 1975-10-26 04:30:00 (Sun)
  62334941400, #      utc_end 1976-04-25 05:30:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62334941400, #    utc_start 1976-04-25 05:30:00 (Sun)
  62351267400, #      utc_end 1976-10-31 04:30:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62351267400, #    utc_start 1976-10-31 04:30:00 (Sun)
  62366391000, #      utc_end 1977-04-24 05:30:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62366391000, #    utc_start 1977-04-24 05:30:00 (Sun)
  62382717000, #      utc_end 1977-10-30 04:30:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62382717000, #    utc_start 1977-10-30 04:30:00 (Sun)
  62398445400, #      utc_end 1978-04-30 05:30:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62398445400, #    utc_start 1978-04-30 05:30:00 (Sun)
  62414166600, #      utc_end 1978-10-29 04:30:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62414166600, #    utc_start 1978-10-29 04:30:00 (Sun)
  62429895000, #      utc_end 1979-04-29 05:30:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62429895000, #    utc_start 1979-04-29 05:30:00 (Sun)
  62445616200, #      utc_end 1979-10-28 04:30:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62445616200, #    utc_start 1979-10-28 04:30:00 (Sun)
  62461344600, #      utc_end 1980-04-27 05:30:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62461344600, #    utc_start 1980-04-27 05:30:00 (Sun)
  62477065800, #      utc_end 1980-10-26 04:30:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62477065800, #    utc_start 1980-10-26 04:30:00 (Sun)
  62492794200, #      utc_end 1981-04-26 05:30:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62492794200, #    utc_start 1981-04-26 05:30:00 (Sun)
  62508515400, #      utc_end 1981-10-25 04:30:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62508515400, #    utc_start 1981-10-25 04:30:00 (Sun)
  62524243800, #      utc_end 1982-04-25 05:30:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62524243800, #    utc_start 1982-04-25 05:30:00 (Sun)
  62540569800, #      utc_end 1982-10-31 04:30:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62540569800, #    utc_start 1982-10-31 04:30:00 (Sun)
  62555693400, #      utc_end 1983-04-24 05:30:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62555693400, #    utc_start 1983-04-24 05:30:00 (Sun)
  62572019400, #      utc_end 1983-10-30 04:30:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62572019400, #    utc_start 1983-10-30 04:30:00 (Sun)
  62587747800, #      utc_end 1984-04-29 05:30:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62587747800, #    utc_start 1984-04-29 05:30:00 (Sun)
  62603469000, #      utc_end 1984-10-28 04:30:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62603469000, #    utc_start 1984-10-28 04:30:00 (Sun)
  62619197400, #      utc_end 1985-04-28 05:30:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62619197400, #    utc_start 1985-04-28 05:30:00 (Sun)
  62634918600, #      utc_end 1985-10-27 04:30:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62634918600, #    utc_start 1985-10-27 04:30:00 (Sun)
  62650647000, #      utc_end 1986-04-27 05:30:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62650647000, #    utc_start 1986-04-27 05:30:00 (Sun)
  62666368200, #      utc_end 1986-10-26 04:30:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62666368200, #    utc_start 1986-10-26 04:30:00 (Sun)
  62680275060, #      utc_end 1987-04-05 03:31:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680262460, #    local_end 1987-04-05 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62680275060, #    utc_start 1987-04-05 03:31:00 (Sun)
  62697810660, #      utc_end 1987-10-25 02:31:00 (Sun)
  62680266060, #  local_start 1987-04-05 01:01:00 (Sun)
  62697801660, #    local_end 1987-10-25 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62697810660, #    utc_start 1987-10-25 02:31:00 (Sun)
  62711724660, #      utc_end 1988-04-03 03:31:00 (Sun)
  62697798060, #  local_start 1987-10-24 23:01:00 (Sat)
  62711712060, #    local_end 1988-04-03 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62711724660, #    utc_start 1988-04-03 03:31:00 (Sun)
  62729861460, #      utc_end 1988-10-30 01:31:00 (Sun)
  62711719260, #  local_start 1988-04-03 02:01:00 (Sun)
  62729856060, #    local_end 1988-10-30 00:01:00 (Sun)
  -5400,
  1,
  'NDDT',
      ],
      [
  62729861460, #    utc_start 1988-10-30 01:31:00 (Sun)
  62743174260, #      utc_end 1989-04-02 03:31:00 (Sun)
  62729848860, #  local_start 1988-10-29 22:01:00 (Sat)
  62743161660, #    local_end 1989-04-02 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62743174260, #    utc_start 1989-04-02 03:31:00 (Sun)
  62761314660, #      utc_end 1989-10-29 02:31:00 (Sun)
  62743165260, #  local_start 1989-04-02 01:01:00 (Sun)
  62761305660, #    local_end 1989-10-29 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62761314660, #    utc_start 1989-10-29 02:31:00 (Sun)
  62774623860, #      utc_end 1990-04-01 03:31:00 (Sun)
  62761302060, #  local_start 1989-10-28 23:01:00 (Sat)
  62774611260, #    local_end 1990-04-01 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62774623860, #    utc_start 1990-04-01 03:31:00 (Sun)
  62792764260, #      utc_end 1990-10-28 02:31:00 (Sun)
  62774614860, #  local_start 1990-04-01 01:01:00 (Sun)
  62792755260, #    local_end 1990-10-28 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62792764260, #    utc_start 1990-10-28 02:31:00 (Sun)
  62806678260, #      utc_end 1991-04-07 03:31:00 (Sun)
  62792751660, #  local_start 1990-10-27 23:01:00 (Sat)
  62806665660, #    local_end 1991-04-07 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62806678260, #    utc_start 1991-04-07 03:31:00 (Sun)
  62824213860, #      utc_end 1991-10-27 02:31:00 (Sun)
  62806669260, #  local_start 1991-04-07 01:01:00 (Sun)
  62824204860, #    local_end 1991-10-27 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62824213860, #    utc_start 1991-10-27 02:31:00 (Sun)
  62838127860, #      utc_end 1992-04-05 03:31:00 (Sun)
  62824201260, #  local_start 1991-10-26 23:01:00 (Sat)
  62838115260, #    local_end 1992-04-05 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62838127860, #    utc_start 1992-04-05 03:31:00 (Sun)
  62855663460, #      utc_end 1992-10-25 02:31:00 (Sun)
  62838118860, #  local_start 1992-04-05 01:01:00 (Sun)
  62855654460, #    local_end 1992-10-25 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62855663460, #    utc_start 1992-10-25 02:31:00 (Sun)
  62869577460, #      utc_end 1993-04-04 03:31:00 (Sun)
  62855650860, #  local_start 1992-10-24 23:01:00 (Sat)
  62869564860, #    local_end 1993-04-04 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62869577460, #    utc_start 1993-04-04 03:31:00 (Sun)
  62887717860, #      utc_end 1993-10-31 02:31:00 (Sun)
  62869568460, #  local_start 1993-04-04 01:01:00 (Sun)
  62887708860, #    local_end 1993-10-31 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62887717860, #    utc_start 1993-10-31 02:31:00 (Sun)
  62901027060, #      utc_end 1994-04-03 03:31:00 (Sun)
  62887705260, #  local_start 1993-10-30 23:01:00 (Sat)
  62901014460, #    local_end 1994-04-03 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62901027060, #    utc_start 1994-04-03 03:31:00 (Sun)
  62919167460, #      utc_end 1994-10-30 02:31:00 (Sun)
  62901018060, #  local_start 1994-04-03 01:01:00 (Sun)
  62919158460, #    local_end 1994-10-30 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62919167460, #    utc_start 1994-10-30 02:31:00 (Sun)
  62932476660, #      utc_end 1995-04-02 03:31:00 (Sun)
  62919154860, #  local_start 1994-10-29 23:01:00 (Sat)
  62932464060, #    local_end 1995-04-02 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62932476660, #    utc_start 1995-04-02 03:31:00 (Sun)
  62950617060, #      utc_end 1995-10-29 02:31:00 (Sun)
  62932467660, #  local_start 1995-04-02 01:01:00 (Sun)
  62950608060, #    local_end 1995-10-29 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62950617060, #    utc_start 1995-10-29 02:31:00 (Sun)
  62964531060, #      utc_end 1996-04-07 03:31:00 (Sun)
  62950604460, #  local_start 1995-10-28 23:01:00 (Sat)
  62964518460, #    local_end 1996-04-07 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62964531060, #    utc_start 1996-04-07 03:31:00 (Sun)
  62982066660, #      utc_end 1996-10-27 02:31:00 (Sun)
  62964522060, #  local_start 1996-04-07 01:01:00 (Sun)
  62982057660, #    local_end 1996-10-27 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  62982066660, #    utc_start 1996-10-27 02:31:00 (Sun)
  62995980660, #      utc_end 1997-04-06 03:31:00 (Sun)
  62982054060, #  local_start 1996-10-26 23:01:00 (Sat)
  62995968060, #    local_end 1997-04-06 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  62995980660, #    utc_start 1997-04-06 03:31:00 (Sun)
  63013516260, #      utc_end 1997-10-26 02:31:00 (Sun)
  62995971660, #  local_start 1997-04-06 01:01:00 (Sun)
  63013507260, #    local_end 1997-10-26 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63013516260, #    utc_start 1997-10-26 02:31:00 (Sun)
  63027430260, #      utc_end 1998-04-05 03:31:00 (Sun)
  63013503660, #  local_start 1997-10-25 23:01:00 (Sat)
  63027417660, #    local_end 1998-04-05 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63027430260, #    utc_start 1998-04-05 03:31:00 (Sun)
  63044965860, #      utc_end 1998-10-25 02:31:00 (Sun)
  63027421260, #  local_start 1998-04-05 01:01:00 (Sun)
  63044956860, #    local_end 1998-10-25 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63044965860, #    utc_start 1998-10-25 02:31:00 (Sun)
  63058879860, #      utc_end 1999-04-04 03:31:00 (Sun)
  63044953260, #  local_start 1998-10-24 23:01:00 (Sat)
  63058867260, #    local_end 1999-04-04 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63058879860, #    utc_start 1999-04-04 03:31:00 (Sun)
  63077020260, #      utc_end 1999-10-31 02:31:00 (Sun)
  63058870860, #  local_start 1999-04-04 01:01:00 (Sun)
  63077011260, #    local_end 1999-10-31 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63077020260, #    utc_start 1999-10-31 02:31:00 (Sun)
  63090329460, #      utc_end 2000-04-02 03:31:00 (Sun)
  63077007660, #  local_start 1999-10-30 23:01:00 (Sat)
  63090316860, #    local_end 2000-04-02 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63090329460, #    utc_start 2000-04-02 03:31:00 (Sun)
  63108469860, #      utc_end 2000-10-29 02:31:00 (Sun)
  63090320460, #  local_start 2000-04-02 01:01:00 (Sun)
  63108460860, #    local_end 2000-10-29 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63108469860, #    utc_start 2000-10-29 02:31:00 (Sun)
  63121779060, #      utc_end 2001-04-01 03:31:00 (Sun)
  63108457260, #  local_start 2000-10-28 23:01:00 (Sat)
  63121766460, #    local_end 2001-04-01 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63121779060, #    utc_start 2001-04-01 03:31:00 (Sun)
  63139919460, #      utc_end 2001-10-28 02:31:00 (Sun)
  63121770060, #  local_start 2001-04-01 01:01:00 (Sun)
  63139910460, #    local_end 2001-10-28 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63139919460, #    utc_start 2001-10-28 02:31:00 (Sun)
  63153833460, #      utc_end 2002-04-07 03:31:00 (Sun)
  63139906860, #  local_start 2001-10-27 23:01:00 (Sat)
  63153820860, #    local_end 2002-04-07 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63153833460, #    utc_start 2002-04-07 03:31:00 (Sun)
  63171369060, #      utc_end 2002-10-27 02:31:00 (Sun)
  63153824460, #  local_start 2002-04-07 01:01:00 (Sun)
  63171360060, #    local_end 2002-10-27 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63171369060, #    utc_start 2002-10-27 02:31:00 (Sun)
  63185283060, #      utc_end 2003-04-06 03:31:00 (Sun)
  63171356460, #  local_start 2002-10-26 23:01:00 (Sat)
  63185270460, #    local_end 2003-04-06 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63185283060, #    utc_start 2003-04-06 03:31:00 (Sun)
  63202818660, #      utc_end 2003-10-26 02:31:00 (Sun)
  63185274060, #  local_start 2003-04-06 01:01:00 (Sun)
  63202809660, #    local_end 2003-10-26 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63202818660, #    utc_start 2003-10-26 02:31:00 (Sun)
  63216732660, #      utc_end 2004-04-04 03:31:00 (Sun)
  63202806060, #  local_start 2003-10-25 23:01:00 (Sat)
  63216720060, #    local_end 2004-04-04 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63216732660, #    utc_start 2004-04-04 03:31:00 (Sun)
  63234873060, #      utc_end 2004-10-31 02:31:00 (Sun)
  63216723660, #  local_start 2004-04-04 01:01:00 (Sun)
  63234864060, #    local_end 2004-10-31 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63234873060, #    utc_start 2004-10-31 02:31:00 (Sun)
  63248182260, #      utc_end 2005-04-03 03:31:00 (Sun)
  63234860460, #  local_start 2004-10-30 23:01:00 (Sat)
  63248169660, #    local_end 2005-04-03 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63248182260, #    utc_start 2005-04-03 03:31:00 (Sun)
  63266322660, #      utc_end 2005-10-30 02:31:00 (Sun)
  63248173260, #  local_start 2005-04-03 01:01:00 (Sun)
  63266313660, #    local_end 2005-10-30 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63266322660, #    utc_start 2005-10-30 02:31:00 (Sun)
  63279631860, #      utc_end 2006-04-02 03:31:00 (Sun)
  63266310060, #  local_start 2005-10-29 23:01:00 (Sat)
  63279619260, #    local_end 2006-04-02 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63279631860, #    utc_start 2006-04-02 03:31:00 (Sun)
  63297772260, #      utc_end 2006-10-29 02:31:00 (Sun)
  63279622860, #  local_start 2006-04-02 01:01:00 (Sun)
  63297763260, #    local_end 2006-10-29 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63297772260, #    utc_start 2006-10-29 02:31:00 (Sun)
  63309267060, #      utc_end 2007-03-11 03:31:00 (Sun)
  63297759660, #  local_start 2006-10-28 23:01:00 (Sat)
  63309254460, #    local_end 2007-03-11 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63309267060, #    utc_start 2007-03-11 03:31:00 (Sun)
  63329826660, #      utc_end 2007-11-04 02:31:00 (Sun)
  63309258060, #  local_start 2007-03-11 01:01:00 (Sun)
  63329817660, #    local_end 2007-11-04 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63329826660, #    utc_start 2007-11-04 02:31:00 (Sun)
  63340716660, #      utc_end 2008-03-09 03:31:00 (Sun)
  63329814060, #  local_start 2007-11-03 23:01:00 (Sat)
  63340704060, #    local_end 2008-03-09 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63340716660, #    utc_start 2008-03-09 03:31:00 (Sun)
  63361276260, #      utc_end 2008-11-02 02:31:00 (Sun)
  63340707660, #  local_start 2008-03-09 01:01:00 (Sun)
  63361267260, #    local_end 2008-11-02 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63361276260, #    utc_start 2008-11-02 02:31:00 (Sun)
  63372166260, #      utc_end 2009-03-08 03:31:00 (Sun)
  63361263660, #  local_start 2008-11-01 23:01:00 (Sat)
  63372153660, #    local_end 2009-03-08 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63372166260, #    utc_start 2009-03-08 03:31:00 (Sun)
  63392725860, #      utc_end 2009-11-01 02:31:00 (Sun)
  63372157260, #  local_start 2009-03-08 01:01:00 (Sun)
  63392716860, #    local_end 2009-11-01 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63392725860, #    utc_start 2009-11-01 02:31:00 (Sun)
  63404220660, #      utc_end 2010-03-14 03:31:00 (Sun)
  63392713260, #  local_start 2009-10-31 23:01:00 (Sat)
  63404208060, #    local_end 2010-03-14 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63404220660, #    utc_start 2010-03-14 03:31:00 (Sun)
  63424780260, #      utc_end 2010-11-07 02:31:00 (Sun)
  63404211660, #  local_start 2010-03-14 01:01:00 (Sun)
  63424771260, #    local_end 2010-11-07 00:01:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63424780260, #    utc_start 2010-11-07 02:31:00 (Sun)
  63435670260, #      utc_end 2011-03-13 03:31:00 (Sun)
  63424767660, #  local_start 2010-11-06 23:01:00 (Sat)
  63435657660, #    local_end 2011-03-13 00:01:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63435670260, #    utc_start 2011-03-13 03:31:00 (Sun)
  63455797800, #      utc_end 2011-11-01 02:30:00 (Tue)
  63435661260, #  local_start 2011-03-13 01:01:00 (Sun)
  63455788800, #    local_end 2011-11-01 00:00:00 (Tue)
  -9000,
  1,
  'NDT',
      ],
      [
  63455797800, #    utc_start 2011-11-01 02:30:00 (Tue)
  63456237000, #      utc_end 2011-11-06 04:30:00 (Sun)
  63455788800, #  local_start 2011-11-01 00:00:00 (Tue)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63456237000, #    utc_start 2011-11-06 04:30:00 (Sun)
  63467127000, #      utc_end 2012-03-11 05:30:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63467127000, #    utc_start 2012-03-11 05:30:00 (Sun)
  63487686600, #      utc_end 2012-11-04 04:30:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63487686600, #    utc_start 2012-11-04 04:30:00 (Sun)
  63498576600, #      utc_end 2013-03-10 05:30:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63498576600, #    utc_start 2013-03-10 05:30:00 (Sun)
  63519136200, #      utc_end 2013-11-03 04:30:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63519136200, #    utc_start 2013-11-03 04:30:00 (Sun)
  63530026200, #      utc_end 2014-03-09 05:30:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63530026200, #    utc_start 2014-03-09 05:30:00 (Sun)
  63550585800, #      utc_end 2014-11-02 04:30:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63550585800, #    utc_start 2014-11-02 04:30:00 (Sun)
  63561475800, #      utc_end 2015-03-08 05:30:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63561475800, #    utc_start 2015-03-08 05:30:00 (Sun)
  63582035400, #      utc_end 2015-11-01 04:30:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63582035400, #    utc_start 2015-11-01 04:30:00 (Sun)
  63593530200, #      utc_end 2016-03-13 05:30:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63593530200, #    utc_start 2016-03-13 05:30:00 (Sun)
  63614089800, #      utc_end 2016-11-06 04:30:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63614089800, #    utc_start 2016-11-06 04:30:00 (Sun)
  63624979800, #      utc_end 2017-03-12 05:30:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63624979800, #    utc_start 2017-03-12 05:30:00 (Sun)
  63645539400, #      utc_end 2017-11-05 04:30:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63645539400, #    utc_start 2017-11-05 04:30:00 (Sun)
  63656429400, #      utc_end 2018-03-11 05:30:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63656429400, #    utc_start 2018-03-11 05:30:00 (Sun)
  63676989000, #      utc_end 2018-11-04 04:30:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63676989000, #    utc_start 2018-11-04 04:30:00 (Sun)
  63687879000, #      utc_end 2019-03-10 05:30:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63687879000, #    utc_start 2019-03-10 05:30:00 (Sun)
  63708438600, #      utc_end 2019-11-03 04:30:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63708438600, #    utc_start 2019-11-03 04:30:00 (Sun)
  63719328600, #      utc_end 2020-03-08 05:30:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63719328600, #    utc_start 2020-03-08 05:30:00 (Sun)
  63739888200, #      utc_end 2020-11-01 04:30:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63739888200, #    utc_start 2020-11-01 04:30:00 (Sun)
  63751383000, #      utc_end 2021-03-14 05:30:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63751383000, #    utc_start 2021-03-14 05:30:00 (Sun)
  63771942600, #      utc_end 2021-11-07 04:30:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63771942600, #    utc_start 2021-11-07 04:30:00 (Sun)
  63782832600, #      utc_end 2022-03-13 05:30:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63782832600, #    utc_start 2022-03-13 05:30:00 (Sun)
  63803392200, #      utc_end 2022-11-06 04:30:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63803392200, #    utc_start 2022-11-06 04:30:00 (Sun)
  63814282200, #      utc_end 2023-03-12 05:30:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63814282200, #    utc_start 2023-03-12 05:30:00 (Sun)
  63834841800, #      utc_end 2023-11-05 04:30:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63834841800, #    utc_start 2023-11-05 04:30:00 (Sun)
  63845731800, #      utc_end 2024-03-10 05:30:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63845731800, #    utc_start 2024-03-10 05:30:00 (Sun)
  63866291400, #      utc_end 2024-11-03 04:30:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63866291400, #    utc_start 2024-11-03 04:30:00 (Sun)
  63877181400, #      utc_end 2025-03-09 05:30:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63877181400, #    utc_start 2025-03-09 05:30:00 (Sun)
  63897741000, #      utc_end 2025-11-02 04:30:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63897741000, #    utc_start 2025-11-02 04:30:00 (Sun)
  63908631000, #      utc_end 2026-03-08 05:30:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63908631000, #    utc_start 2026-03-08 05:30:00 (Sun)
  63929190600, #      utc_end 2026-11-01 04:30:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
      [
  63929190600, #    utc_start 2026-11-01 04:30:00 (Sun)
  63940685400, #      utc_end 2027-03-14 05:30:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -12600,
  0,
  'NST',
      ],
      [
  63940685400, #    utc_start 2027-03-14 05:30:00 (Sun)
  63961245000, #      utc_end 2027-11-07 04:30:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -9000,
  1,
  'NDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {110}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -12600 }
  
  my $last_observance = bless( {
    'format' => 'N%sT',
    'gmtoff' => '-3:30',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 734442,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 734442,
      'utc_rd_secs' => 0,
      'utc_year' => 2012
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -12600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 734442,
      'local_rd_secs' => 9000,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 734442,
      'utc_rd_secs' => 9000,
      'utc_year' => 2012
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_ST_JOHNS

    $main::fatpacked{"DateTime/TimeZone/America/Swift_Current.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_SWIFT_CURRENT';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Swift_Current;
  $DateTime::TimeZone::America::Swift_Current::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Swift_Current::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60105481880, #      utc_end 1905-09-01 07:11:20 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60105456000, #    local_end 1905-09-01 00:00:00 (Fri)
  -25880,
  0,
  'LMT',
      ],
      [
  60105481880, #    utc_start 1905-09-01 07:11:20 (Fri)
  60503619600, #      utc_end 1918-04-14 09:00:00 (Sun)
  60105456680, #  local_start 1905-09-01 00:11:20 (Fri)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60503619600, #    utc_start 1918-04-14 09:00:00 (Sun)
  60520550400, #      utc_end 1918-10-27 08:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60520550400, #    utc_start 1918-10-27 08:00:00 (Sun)
  61255472400, #      utc_end 1942-02-09 09:00:00 (Mon)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -25200,
  0,
  'MST',
      ],
      [
  61255472400, #    utc_start 1942-02-09 09:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366266000, #    local_end 1945-08-14 17:00:00 (Tue)
  -21600,
  1,
  'MWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370294400, #      utc_end 1945-09-30 08:00:00 (Sun)
  61366266000, #  local_start 1945-08-14 17:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MPT',
      ],
      [
  61370294400, #    utc_start 1945-09-30 08:00:00 (Sun)
  61388442000, #      utc_end 1946-04-28 09:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61388416800, #    local_end 1946-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61388442000, #    utc_start 1946-04-28 09:00:00 (Sun)
  61402953600, #      utc_end 1946-10-13 08:00:00 (Sun)
  61388420400, #  local_start 1946-04-28 03:00:00 (Sun)
  61402932000, #    local_end 1946-10-13 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61402953600, #    utc_start 1946-10-13 08:00:00 (Sun)
  61419891600, #      utc_end 1947-04-27 09:00:00 (Sun)
  61402928400, #  local_start 1946-10-13 01:00:00 (Sun)
  61419866400, #    local_end 1947-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61419891600, #    utc_start 1947-04-27 09:00:00 (Sun)
  61433193600, #      utc_end 1947-09-28 08:00:00 (Sun)
  61419870000, #  local_start 1947-04-27 03:00:00 (Sun)
  61433172000, #    local_end 1947-09-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61433193600, #    utc_start 1947-09-28 08:00:00 (Sun)
  61451341200, #      utc_end 1948-04-25 09:00:00 (Sun)
  61433168400, #  local_start 1947-09-28 01:00:00 (Sun)
  61451316000, #    local_end 1948-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61451341200, #    utc_start 1948-04-25 09:00:00 (Sun)
  61464643200, #      utc_end 1948-09-26 08:00:00 (Sun)
  61451319600, #  local_start 1948-04-25 03:00:00 (Sun)
  61464621600, #    local_end 1948-09-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61464643200, #    utc_start 1948-09-26 08:00:00 (Sun)
  61482790800, #      utc_end 1949-04-24 09:00:00 (Sun)
  61464618000, #  local_start 1948-09-26 01:00:00 (Sun)
  61482765600, #    local_end 1949-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61482790800, #    utc_start 1949-04-24 09:00:00 (Sun)
  61496092800, #      utc_end 1949-09-25 08:00:00 (Sun)
  61482769200, #  local_start 1949-04-24 03:00:00 (Sun)
  61496071200, #    local_end 1949-09-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61496092800, #    utc_start 1949-09-25 08:00:00 (Sun)
  61504556400, #      utc_end 1950-01-01 07:00:00 (Sun)
  61496067600, #  local_start 1949-09-25 01:00:00 (Sun)
  61504531200, #    local_end 1950-01-01 00:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61504556400, #    utc_start 1950-01-01 07:00:00 (Sun)
  61735597200, #      utc_end 1957-04-28 09:00:00 (Sun)
  61504531200, #  local_start 1950-01-01 00:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61735597200, #    utc_start 1957-04-28 09:00:00 (Sun)
  61751318400, #      utc_end 1957-10-27 08:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61751296800, #    local_end 1957-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61751318400, #    utc_start 1957-10-27 08:00:00 (Sun)
  61798496400, #      utc_end 1959-04-26 09:00:00 (Sun)
  61751293200, #  local_start 1957-10-27 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61798496400, #    utc_start 1959-04-26 09:00:00 (Sun)
  61814217600, #      utc_end 1959-10-25 08:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61814196000, #    local_end 1959-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61814217600, #    utc_start 1959-10-25 08:00:00 (Sun)
  61829946000, #      utc_end 1960-04-24 09:00:00 (Sun)
  61814192400, #  local_start 1959-10-25 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61829946000, #    utc_start 1960-04-24 09:00:00 (Sun)
  61843248000, #      utc_end 1960-09-25 08:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61843226400, #    local_end 1960-09-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61843248000, #    utc_start 1960-09-25 08:00:00 (Sun)
  61862000400, #      utc_end 1961-04-30 09:00:00 (Sun)
  61843222800, #  local_start 1960-09-25 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61862000400, #    utc_start 1961-04-30 09:00:00 (Sun)
  61874697600, #      utc_end 1961-09-24 08:00:00 (Sun)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  61874676000, #    local_end 1961-09-24 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  61874697600, #    utc_start 1961-09-24 08:00:00 (Sun)
  62209155600, #      utc_end 1972-04-30 09:00:00 (Sun)
  61874672400, #  local_start 1961-09-24 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62209155600, #    utc_start 1972-04-30 09:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -21600,
  0,
  'CST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {11}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_SWIFT_CURRENT

    $main::fatpacked{"DateTime/TimeZone/America/Tegucigalpa.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_TEGUCIGALPA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Tegucigalpa;
  $DateTime::TimeZone::America::Tegucigalpa::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Tegucigalpa::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60597179332, #      utc_end 1921-04-01 05:48:52 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60597158400, #    local_end 1921-04-01 00:00:00 (Fri)
  -20932,
  0,
  'LMT',
      ],
      [
  60597179332, #    utc_start 1921-04-01 05:48:52 (Fri)
  62682703200, #      utc_end 1987-05-03 06:00:00 (Sun)
  60597157732, #  local_start 1921-03-31 23:48:52 (Thu)
  62682681600, #    local_end 1987-05-03 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62682703200, #    utc_start 1987-05-03 06:00:00 (Sun)
  62695400400, #      utc_end 1987-09-27 05:00:00 (Sun)
  62682685200, #  local_start 1987-05-03 01:00:00 (Sun)
  62695382400, #    local_end 1987-09-27 00:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62695400400, #    utc_start 1987-09-27 05:00:00 (Sun)
  62714152800, #      utc_end 1988-05-01 06:00:00 (Sun)
  62695378800, #  local_start 1987-09-26 23:00:00 (Sat)
  62714131200, #    local_end 1988-05-01 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62714152800, #    utc_start 1988-05-01 06:00:00 (Sun)
  62726850000, #      utc_end 1988-09-25 05:00:00 (Sun)
  62714134800, #  local_start 1988-05-01 01:00:00 (Sun)
  62726832000, #    local_end 1988-09-25 00:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62726850000, #    utc_start 1988-09-25 05:00:00 (Sun)
  63282664800, #      utc_end 2006-05-07 06:00:00 (Sun)
  62726828400, #  local_start 1988-09-24 23:00:00 (Sat)
  63282643200, #    local_end 2006-05-07 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63282664800, #    utc_start 2006-05-07 06:00:00 (Sun)
  63290610000, #      utc_end 2006-08-07 05:00:00 (Mon)
  63282646800, #  local_start 2006-05-07 01:00:00 (Sun)
  63290592000, #    local_end 2006-08-07 00:00:00 (Mon)
  -18000,
  1,
  'CDT',
      ],
      [
  63290610000, #    utc_start 2006-08-07 05:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  63290588400, #  local_start 2006-08-06 23:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -21600,
  0,
  'CST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {3}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_TEGUCIGALPA

    $main::fatpacked{"DateTime/TimeZone/America/Thule.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_THULE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Thule;
  $DateTime::TimeZone::America::Thule::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Thule::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60449603708, #      utc_end 1916-07-28 04:35:08 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60449587200, #    local_end 1916-07-28 00:00:00 (Fri)
  -16508,
  0,
  'LMT',
      ],
      [
  60449603708, #    utc_start 1916-07-28 04:35:08 (Fri)
  62806082400, #      utc_end 1991-03-31 06:00:00 (Sun)
  60449589308, #  local_start 1916-07-28 00:35:08 (Fri)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62806082400, #    utc_start 1991-03-31 06:00:00 (Sun)
  62821803600, #      utc_end 1991-09-29 05:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821792800, #    local_end 1991-09-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62821803600, #    utc_start 1991-09-29 05:00:00 (Sun)
  62837532000, #      utc_end 1992-03-29 06:00:00 (Sun)
  62821789200, #  local_start 1991-09-29 01:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62837532000, #    utc_start 1992-03-29 06:00:00 (Sun)
  62853253200, #      utc_end 1992-09-27 05:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853242400, #    local_end 1992-09-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62853253200, #    utc_start 1992-09-27 05:00:00 (Sun)
  62869586400, #      utc_end 1993-04-04 06:00:00 (Sun)
  62853238800, #  local_start 1992-09-27 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62869586400, #    utc_start 1993-04-04 06:00:00 (Sun)
  62887726800, #      utc_end 1993-10-31 05:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62887726800, #    utc_start 1993-10-31 05:00:00 (Sun)
  62901036000, #      utc_end 1994-04-03 06:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62901036000, #    utc_start 1994-04-03 06:00:00 (Sun)
  62919176400, #      utc_end 1994-10-30 05:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62919176400, #    utc_start 1994-10-30 05:00:00 (Sun)
  62932485600, #      utc_end 1995-04-02 06:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62932485600, #    utc_start 1995-04-02 06:00:00 (Sun)
  62950626000, #      utc_end 1995-10-29 05:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62950626000, #    utc_start 1995-10-29 05:00:00 (Sun)
  62964540000, #      utc_end 1996-04-07 06:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62964540000, #    utc_start 1996-04-07 06:00:00 (Sun)
  62982075600, #      utc_end 1996-10-27 05:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62982075600, #    utc_start 1996-10-27 05:00:00 (Sun)
  62995989600, #      utc_end 1997-04-06 06:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62995989600, #    utc_start 1997-04-06 06:00:00 (Sun)
  63013525200, #      utc_end 1997-10-26 05:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63013525200, #    utc_start 1997-10-26 05:00:00 (Sun)
  63027439200, #      utc_end 1998-04-05 06:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63027439200, #    utc_start 1998-04-05 06:00:00 (Sun)
  63044974800, #      utc_end 1998-10-25 05:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63044974800, #    utc_start 1998-10-25 05:00:00 (Sun)
  63058888800, #      utc_end 1999-04-04 06:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63058888800, #    utc_start 1999-04-04 06:00:00 (Sun)
  63077029200, #      utc_end 1999-10-31 05:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63077029200, #    utc_start 1999-10-31 05:00:00 (Sun)
  63090338400, #      utc_end 2000-04-02 06:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63090338400, #    utc_start 2000-04-02 06:00:00 (Sun)
  63108478800, #      utc_end 2000-10-29 05:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63108478800, #    utc_start 2000-10-29 05:00:00 (Sun)
  63121788000, #      utc_end 2001-04-01 06:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63121788000, #    utc_start 2001-04-01 06:00:00 (Sun)
  63139928400, #      utc_end 2001-10-28 05:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63139928400, #    utc_start 2001-10-28 05:00:00 (Sun)
  63153842400, #      utc_end 2002-04-07 06:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63153842400, #    utc_start 2002-04-07 06:00:00 (Sun)
  63171378000, #      utc_end 2002-10-27 05:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63171378000, #    utc_start 2002-10-27 05:00:00 (Sun)
  63185292000, #      utc_end 2003-04-06 06:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63185292000, #    utc_start 2003-04-06 06:00:00 (Sun)
  63202827600, #      utc_end 2003-10-26 05:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63202827600, #    utc_start 2003-10-26 05:00:00 (Sun)
  63216741600, #      utc_end 2004-04-04 06:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63216741600, #    utc_start 2004-04-04 06:00:00 (Sun)
  63234882000, #      utc_end 2004-10-31 05:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63234882000, #    utc_start 2004-10-31 05:00:00 (Sun)
  63248191200, #      utc_end 2005-04-03 06:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63248191200, #    utc_start 2005-04-03 06:00:00 (Sun)
  63266331600, #      utc_end 2005-10-30 05:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63266331600, #    utc_start 2005-10-30 05:00:00 (Sun)
  63279640800, #      utc_end 2006-04-02 06:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63279640800, #    utc_start 2006-04-02 06:00:00 (Sun)
  63297781200, #      utc_end 2006-10-29 05:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63297781200, #    utc_start 2006-10-29 05:00:00 (Sun)
  63309276000, #      utc_end 2007-03-11 06:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63309276000, #    utc_start 2007-03-11 06:00:00 (Sun)
  63329835600, #      utc_end 2007-11-04 05:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63329835600, #    utc_start 2007-11-04 05:00:00 (Sun)
  63340725600, #      utc_end 2008-03-09 06:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63340725600, #    utc_start 2008-03-09 06:00:00 (Sun)
  63361285200, #      utc_end 2008-11-02 05:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63361285200, #    utc_start 2008-11-02 05:00:00 (Sun)
  63372175200, #      utc_end 2009-03-08 06:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63372175200, #    utc_start 2009-03-08 06:00:00 (Sun)
  63392734800, #      utc_end 2009-11-01 05:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63392734800, #    utc_start 2009-11-01 05:00:00 (Sun)
  63404229600, #      utc_end 2010-03-14 06:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63404229600, #    utc_start 2010-03-14 06:00:00 (Sun)
  63424789200, #      utc_end 2010-11-07 05:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63424789200, #    utc_start 2010-11-07 05:00:00 (Sun)
  63435679200, #      utc_end 2011-03-13 06:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63435679200, #    utc_start 2011-03-13 06:00:00 (Sun)
  63456238800, #      utc_end 2011-11-06 05:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63456238800, #    utc_start 2011-11-06 05:00:00 (Sun)
  63467128800, #      utc_end 2012-03-11 06:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63467128800, #    utc_start 2012-03-11 06:00:00 (Sun)
  63487688400, #      utc_end 2012-11-04 05:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63487688400, #    utc_start 2012-11-04 05:00:00 (Sun)
  63498578400, #      utc_end 2013-03-10 06:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63498578400, #    utc_start 2013-03-10 06:00:00 (Sun)
  63519138000, #      utc_end 2013-11-03 05:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63519138000, #    utc_start 2013-11-03 05:00:00 (Sun)
  63530028000, #      utc_end 2014-03-09 06:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63530028000, #    utc_start 2014-03-09 06:00:00 (Sun)
  63550587600, #      utc_end 2014-11-02 05:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63550587600, #    utc_start 2014-11-02 05:00:00 (Sun)
  63561477600, #      utc_end 2015-03-08 06:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63561477600, #    utc_start 2015-03-08 06:00:00 (Sun)
  63582037200, #      utc_end 2015-11-01 05:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63582037200, #    utc_start 2015-11-01 05:00:00 (Sun)
  63593532000, #      utc_end 2016-03-13 06:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63593532000, #    utc_start 2016-03-13 06:00:00 (Sun)
  63614091600, #      utc_end 2016-11-06 05:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63614091600, #    utc_start 2016-11-06 05:00:00 (Sun)
  63624981600, #      utc_end 2017-03-12 06:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63624981600, #    utc_start 2017-03-12 06:00:00 (Sun)
  63645541200, #      utc_end 2017-11-05 05:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63645541200, #    utc_start 2017-11-05 05:00:00 (Sun)
  63656431200, #      utc_end 2018-03-11 06:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63656431200, #    utc_start 2018-03-11 06:00:00 (Sun)
  63676990800, #      utc_end 2018-11-04 05:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63676990800, #    utc_start 2018-11-04 05:00:00 (Sun)
  63687880800, #      utc_end 2019-03-10 06:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63687880800, #    utc_start 2019-03-10 06:00:00 (Sun)
  63708440400, #      utc_end 2019-11-03 05:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63708440400, #    utc_start 2019-11-03 05:00:00 (Sun)
  63719330400, #      utc_end 2020-03-08 06:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63719330400, #    utc_start 2020-03-08 06:00:00 (Sun)
  63739890000, #      utc_end 2020-11-01 05:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63739890000, #    utc_start 2020-11-01 05:00:00 (Sun)
  63751384800, #      utc_end 2021-03-14 06:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63751384800, #    utc_start 2021-03-14 06:00:00 (Sun)
  63771944400, #      utc_end 2021-11-07 05:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63771944400, #    utc_start 2021-11-07 05:00:00 (Sun)
  63782834400, #      utc_end 2022-03-13 06:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63782834400, #    utc_start 2022-03-13 06:00:00 (Sun)
  63803394000, #      utc_end 2022-11-06 05:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63803394000, #    utc_start 2022-11-06 05:00:00 (Sun)
  63814284000, #      utc_end 2023-03-12 06:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63814284000, #    utc_start 2023-03-12 06:00:00 (Sun)
  63834843600, #      utc_end 2023-11-05 05:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63834843600, #    utc_start 2023-11-05 05:00:00 (Sun)
  63845733600, #      utc_end 2024-03-10 06:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63845733600, #    utc_start 2024-03-10 06:00:00 (Sun)
  63866293200, #      utc_end 2024-11-03 05:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63866293200, #    utc_start 2024-11-03 05:00:00 (Sun)
  63877183200, #      utc_end 2025-03-09 06:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63877183200, #    utc_start 2025-03-09 06:00:00 (Sun)
  63897742800, #      utc_end 2025-11-02 05:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63897742800, #    utc_start 2025-11-02 05:00:00 (Sun)
  63908632800, #      utc_end 2026-03-08 06:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63908632800, #    utc_start 2026-03-08 06:00:00 (Sun)
  63929192400, #      utc_end 2026-11-01 05:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63929192400, #    utc_start 2026-11-01 05:00:00 (Sun)
  63940687200, #      utc_end 2027-03-14 06:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63940687200, #    utc_start 2027-03-14 06:00:00 (Sun)
  63961246800, #      utc_end 2027-11-07 05:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {37}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -14400 }
  
  my $last_observance = bless( {
    'format' => 'A%sT',
    'gmtoff' => '-4:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 699648,
      'local_rd_secs' => 2108,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 699648,
      'utc_rd_secs' => 2108,
      'utc_year' => 1917
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -14400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 699648,
      'local_rd_secs' => 16508,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 699648,
      'utc_rd_secs' => 16508,
      'utc_year' => 1917
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Thule',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Thule',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_THULE

    $main::fatpacked{"DateTime/TimeZone/America/Thunder_Bay.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_THUNDER_BAY';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Thunder_Bay;
  $DateTime::TimeZone::America::Thunder_Bay::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Thunder_Bay::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59768949420, #      utc_end 1895-01-01 05:57:00 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59768928000, #    local_end 1895-01-01 00:00:00 (Tue)
  -21420,
  0,
  'LMT',
      ],
      [
  59768949420, #    utc_start 1895-01-01 05:57:00 (Tue)
  60242248800, #      utc_end 1910-01-01 06:00:00 (Sat)
  59768927820, #  local_start 1894-12-31 23:57:00 (Mon)
  60242227200, #    local_end 1910-01-01 00:00:00 (Sat)
  -21600,
  0,
  'CST',
      ],
      [
  60242248800, #    utc_start 1910-01-01 06:00:00 (Sat)
  61252088400, #      utc_end 1942-01-01 05:00:00 (Thu)
  60242230800, #  local_start 1910-01-01 01:00:00 (Sat)
  61252070400, #    local_end 1942-01-01 00:00:00 (Thu)
  -18000,
  0,
  'EST',
      ],
      [
  61252088400, #    utc_start 1942-01-01 05:00:00 (Thu)
  61255465200, #      utc_end 1942-02-09 07:00:00 (Mon)
  61252070400, #  local_start 1942-01-01 00:00:00 (Thu)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -18000,
  0,
  'EST',
      ],
      [
  61255465200, #    utc_start 1942-02-09 07:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366273200, #    local_end 1945-08-14 19:00:00 (Tue)
  -14400,
  1,
  'EWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370287200, #      utc_end 1945-09-30 06:00:00 (Sun)
  61366273200, #  local_start 1945-08-14 19:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -14400,
  1,
  'EPT',
      ],
      [
  61370287200, #    utc_start 1945-09-30 06:00:00 (Sun)
  62135701200, #      utc_end 1970-01-01 05:00:00 (Thu)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  62135683200, #    local_end 1970-01-01 00:00:00 (Thu)
  -18000,
  0,
  'EST',
      ],
      [
  62135701200, #    utc_start 1970-01-01 05:00:00 (Thu)
  62145644400, #      utc_end 1970-04-26 07:00:00 (Sun)
  62135683200, #  local_start 1970-01-01 00:00:00 (Thu)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62145644400, #    utc_start 1970-04-26 07:00:00 (Sun)
  62161365600, #      utc_end 1970-10-25 06:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62161365600, #    utc_start 1970-10-25 06:00:00 (Sun)
  62177094000, #      utc_end 1971-04-25 07:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62177094000, #    utc_start 1971-04-25 07:00:00 (Sun)
  62193420000, #      utc_end 1971-10-31 06:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62193420000, #    utc_start 1971-10-31 06:00:00 (Sun)
  62209148400, #      utc_end 1972-04-30 07:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62209148400, #    utc_start 1972-04-30 07:00:00 (Sun)
  62224869600, #      utc_end 1972-10-29 06:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62224869600, #    utc_start 1972-10-29 06:00:00 (Sun)
  62230395600, #      utc_end 1973-01-01 05:00:00 (Mon)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62230377600, #    local_end 1973-01-01 00:00:00 (Mon)
  -18000,
  0,
  'EST',
      ],
      [
  62230395600, #    utc_start 1973-01-01 05:00:00 (Mon)
  62261931600, #      utc_end 1974-01-01 05:00:00 (Tue)
  62230377600, #  local_start 1973-01-01 00:00:00 (Mon)
  62261913600, #    local_end 1974-01-01 00:00:00 (Tue)
  -18000,
  0,
  'EST',
      ],
      [
  62261931600, #    utc_start 1974-01-01 05:00:00 (Tue)
  62272047600, #      utc_end 1974-04-28 07:00:00 (Sun)
  62261913600, #  local_start 1974-01-01 00:00:00 (Tue)
  62272029600, #    local_end 1974-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62272047600, #    utc_start 1974-04-28 07:00:00 (Sun)
  62287768800, #      utc_end 1974-10-27 06:00:00 (Sun)
  62272033200, #  local_start 1974-04-28 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62287768800, #    utc_start 1974-10-27 06:00:00 (Sun)
  62303497200, #      utc_end 1975-04-27 07:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62303479200, #    local_end 1975-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62303497200, #    utc_start 1975-04-27 07:00:00 (Sun)
  62319218400, #      utc_end 1975-10-26 06:00:00 (Sun)
  62303482800, #  local_start 1975-04-27 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62319218400, #    utc_start 1975-10-26 06:00:00 (Sun)
  62334946800, #      utc_end 1976-04-25 07:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62334946800, #    utc_start 1976-04-25 07:00:00 (Sun)
  62351272800, #      utc_end 1976-10-31 06:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62351272800, #    utc_start 1976-10-31 06:00:00 (Sun)
  62366396400, #      utc_end 1977-04-24 07:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62366396400, #    utc_start 1977-04-24 07:00:00 (Sun)
  62382722400, #      utc_end 1977-10-30 06:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62382722400, #    utc_start 1977-10-30 06:00:00 (Sun)
  62398450800, #      utc_end 1978-04-30 07:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62398450800, #    utc_start 1978-04-30 07:00:00 (Sun)
  62414172000, #      utc_end 1978-10-29 06:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62414172000, #    utc_start 1978-10-29 06:00:00 (Sun)
  62429900400, #      utc_end 1979-04-29 07:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62429900400, #    utc_start 1979-04-29 07:00:00 (Sun)
  62445621600, #      utc_end 1979-10-28 06:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62445621600, #    utc_start 1979-10-28 06:00:00 (Sun)
  62461350000, #      utc_end 1980-04-27 07:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62461350000, #    utc_start 1980-04-27 07:00:00 (Sun)
  62477071200, #      utc_end 1980-10-26 06:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62477071200, #    utc_start 1980-10-26 06:00:00 (Sun)
  62492799600, #      utc_end 1981-04-26 07:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62492799600, #    utc_start 1981-04-26 07:00:00 (Sun)
  62508520800, #      utc_end 1981-10-25 06:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62508520800, #    utc_start 1981-10-25 06:00:00 (Sun)
  62524249200, #      utc_end 1982-04-25 07:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62524249200, #    utc_start 1982-04-25 07:00:00 (Sun)
  62540575200, #      utc_end 1982-10-31 06:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62540575200, #    utc_start 1982-10-31 06:00:00 (Sun)
  62555698800, #      utc_end 1983-04-24 07:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62555698800, #    utc_start 1983-04-24 07:00:00 (Sun)
  62572024800, #      utc_end 1983-10-30 06:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62572024800, #    utc_start 1983-10-30 06:00:00 (Sun)
  62587753200, #      utc_end 1984-04-29 07:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62587753200, #    utc_start 1984-04-29 07:00:00 (Sun)
  62603474400, #      utc_end 1984-10-28 06:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62603474400, #    utc_start 1984-10-28 06:00:00 (Sun)
  62619202800, #      utc_end 1985-04-28 07:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62619202800, #    utc_start 1985-04-28 07:00:00 (Sun)
  62634924000, #      utc_end 1985-10-27 06:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62634924000, #    utc_start 1985-10-27 06:00:00 (Sun)
  62650652400, #      utc_end 1986-04-27 07:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62650652400, #    utc_start 1986-04-27 07:00:00 (Sun)
  62666373600, #      utc_end 1986-10-26 06:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62666373600, #    utc_start 1986-10-26 06:00:00 (Sun)
  62680287600, #      utc_end 1987-04-05 07:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62680287600, #    utc_start 1987-04-05 07:00:00 (Sun)
  62697823200, #      utc_end 1987-10-25 06:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62697823200, #    utc_start 1987-10-25 06:00:00 (Sun)
  62711737200, #      utc_end 1988-04-03 07:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62711737200, #    utc_start 1988-04-03 07:00:00 (Sun)
  62729877600, #      utc_end 1988-10-30 06:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62729877600, #    utc_start 1988-10-30 06:00:00 (Sun)
  62743186800, #      utc_end 1989-04-02 07:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62743186800, #    utc_start 1989-04-02 07:00:00 (Sun)
  62761327200, #      utc_end 1989-10-29 06:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62761327200, #    utc_start 1989-10-29 06:00:00 (Sun)
  62774636400, #      utc_end 1990-04-01 07:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62774636400, #    utc_start 1990-04-01 07:00:00 (Sun)
  62792776800, #      utc_end 1990-10-28 06:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62792776800, #    utc_start 1990-10-28 06:00:00 (Sun)
  62806690800, #      utc_end 1991-04-07 07:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62806690800, #    utc_start 1991-04-07 07:00:00 (Sun)
  62824226400, #      utc_end 1991-10-27 06:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62824226400, #    utc_start 1991-10-27 06:00:00 (Sun)
  62838140400, #      utc_end 1992-04-05 07:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62838140400, #    utc_start 1992-04-05 07:00:00 (Sun)
  62855676000, #      utc_end 1992-10-25 06:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62855676000, #    utc_start 1992-10-25 06:00:00 (Sun)
  62869590000, #      utc_end 1993-04-04 07:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62869590000, #    utc_start 1993-04-04 07:00:00 (Sun)
  62887730400, #      utc_end 1993-10-31 06:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62887730400, #    utc_start 1993-10-31 06:00:00 (Sun)
  62901039600, #      utc_end 1994-04-03 07:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62901039600, #    utc_start 1994-04-03 07:00:00 (Sun)
  62919180000, #      utc_end 1994-10-30 06:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62919180000, #    utc_start 1994-10-30 06:00:00 (Sun)
  62932489200, #      utc_end 1995-04-02 07:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62932489200, #    utc_start 1995-04-02 07:00:00 (Sun)
  62950629600, #      utc_end 1995-10-29 06:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62950629600, #    utc_start 1995-10-29 06:00:00 (Sun)
  62964543600, #      utc_end 1996-04-07 07:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62964543600, #    utc_start 1996-04-07 07:00:00 (Sun)
  62982079200, #      utc_end 1996-10-27 06:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62982079200, #    utc_start 1996-10-27 06:00:00 (Sun)
  62995993200, #      utc_end 1997-04-06 07:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62995993200, #    utc_start 1997-04-06 07:00:00 (Sun)
  63013528800, #      utc_end 1997-10-26 06:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63013528800, #    utc_start 1997-10-26 06:00:00 (Sun)
  63027442800, #      utc_end 1998-04-05 07:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63027442800, #    utc_start 1998-04-05 07:00:00 (Sun)
  63044978400, #      utc_end 1998-10-25 06:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63044978400, #    utc_start 1998-10-25 06:00:00 (Sun)
  63058892400, #      utc_end 1999-04-04 07:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63058892400, #    utc_start 1999-04-04 07:00:00 (Sun)
  63077032800, #      utc_end 1999-10-31 06:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63077032800, #    utc_start 1999-10-31 06:00:00 (Sun)
  63090342000, #      utc_end 2000-04-02 07:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63090342000, #    utc_start 2000-04-02 07:00:00 (Sun)
  63108482400, #      utc_end 2000-10-29 06:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63108482400, #    utc_start 2000-10-29 06:00:00 (Sun)
  63121791600, #      utc_end 2001-04-01 07:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63121791600, #    utc_start 2001-04-01 07:00:00 (Sun)
  63139932000, #      utc_end 2001-10-28 06:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63139932000, #    utc_start 2001-10-28 06:00:00 (Sun)
  63153846000, #      utc_end 2002-04-07 07:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63153846000, #    utc_start 2002-04-07 07:00:00 (Sun)
  63171381600, #      utc_end 2002-10-27 06:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63171381600, #    utc_start 2002-10-27 06:00:00 (Sun)
  63185295600, #      utc_end 2003-04-06 07:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63185295600, #    utc_start 2003-04-06 07:00:00 (Sun)
  63202831200, #      utc_end 2003-10-26 06:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63202831200, #    utc_start 2003-10-26 06:00:00 (Sun)
  63216745200, #      utc_end 2004-04-04 07:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63216745200, #    utc_start 2004-04-04 07:00:00 (Sun)
  63234885600, #      utc_end 2004-10-31 06:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63234885600, #    utc_start 2004-10-31 06:00:00 (Sun)
  63248194800, #      utc_end 2005-04-03 07:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63248194800, #    utc_start 2005-04-03 07:00:00 (Sun)
  63266335200, #      utc_end 2005-10-30 06:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63266335200, #    utc_start 2005-10-30 06:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297784800, #      utc_end 2006-10-29 06:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63297784800, #    utc_start 2006-10-29 06:00:00 (Sun)
  63309279600, #      utc_end 2007-03-11 07:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63309279600, #    utc_start 2007-03-11 07:00:00 (Sun)
  63329839200, #      utc_end 2007-11-04 06:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63329839200, #    utc_start 2007-11-04 06:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {59}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 720624,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 720624,
      'utc_rd_secs' => 0,
      'utc_year' => 1975
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 720624,
      'local_rd_secs' => 18000,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 720624,
      'utc_rd_secs' => 18000,
      'utc_year' => 1975
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_THUNDER_BAY

    $main::fatpacked{"DateTime/TimeZone/America/Tijuana.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_TIJUANA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Tijuana;
  $DateTime::TimeZone::America::Tijuana::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Tijuana::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60620947200, #      utc_end 1922-01-01 08:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60620919116, #    local_end 1922-01-01 00:11:56 (Sun)
  -28084,
  0,
  'LMT',
      ],
      [
  60620947200, #    utc_start 1922-01-01 08:00:00 (Sun)
  60684015600, #      utc_end 1924-01-01 07:00:00 (Tue)
  60620922000, #  local_start 1922-01-01 01:00:00 (Sun)
  60683990400, #    local_end 1924-01-01 00:00:00 (Tue)
  -25200,
  0,
  'MST',
      ],
      [
  60684015600, #    utc_start 1924-01-01 07:00:00 (Tue)
  60792620400, #      utc_end 1927-06-11 07:00:00 (Sat)
  60683986800, #  local_start 1923-12-31 23:00:00 (Mon)
  60792591600, #    local_end 1927-06-10 23:00:00 (Fri)
  -28800,
  0,
  'PST',
      ],
      [
  60792620400, #    utc_start 1927-06-11 07:00:00 (Sat)
  60900879600, #      utc_end 1930-11-15 07:00:00 (Sat)
  60792595200, #  local_start 1927-06-11 00:00:00 (Sat)
  60900854400, #    local_end 1930-11-15 00:00:00 (Sat)
  -25200,
  0,
  'MST',
      ],
      [
  60900879600, #    utc_start 1930-11-15 07:00:00 (Sat)
  60912720000, #      utc_end 1931-04-01 08:00:00 (Wed)
  60900850800, #  local_start 1930-11-14 23:00:00 (Fri)
  60912691200, #    local_end 1931-04-01 00:00:00 (Wed)
  -28800,
  0,
  'PST',
      ],
      [
  60912720000, #    utc_start 1931-04-01 08:00:00 (Wed)
  60928441200, #      utc_end 1931-09-30 07:00:00 (Wed)
  60912694800, #  local_start 1931-04-01 01:00:00 (Wed)
  60928416000, #    local_end 1931-09-30 00:00:00 (Wed)
  -25200,
  1,
  'PDT',
      ],
      [
  60928441200, #    utc_start 1931-09-30 07:00:00 (Wed)
  61261862400, #      utc_end 1942-04-24 08:00:00 (Fri)
  60928412400, #  local_start 1931-09-29 23:00:00 (Tue)
  61261833600, #    local_end 1942-04-24 00:00:00 (Fri)
  -28800,
  0,
  'PST',
      ],
      [
  61261862400, #    utc_start 1942-04-24 08:00:00 (Fri)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61261837200, #  local_start 1942-04-24 01:00:00 (Fri)
  61366262400, #    local_end 1945-08-14 16:00:00 (Tue)
  -25200,
  1,
  'PWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61374006000, #      utc_end 1945-11-12 07:00:00 (Mon)
  61366262400, #  local_start 1945-08-14 16:00:00 (Tue)
  61373980800, #    local_end 1945-11-12 00:00:00 (Mon)
  -25200,
  1,
  'PPT',
      ],
      [
  61374006000, #    utc_start 1945-11-12 07:00:00 (Mon)
  61449609600, #      utc_end 1948-04-05 08:00:00 (Mon)
  61373977200, #  local_start 1945-11-11 23:00:00 (Sun)
  61449580800, #    local_end 1948-04-05 00:00:00 (Mon)
  -28800,
  0,
  'PST',
      ],
      [
  61449609600, #    utc_start 1948-04-05 08:00:00 (Mon)
  61474143600, #      utc_end 1949-01-14 07:00:00 (Fri)
  61449584400, #  local_start 1948-04-05 01:00:00 (Mon)
  61474118400, #    local_end 1949-01-14 00:00:00 (Fri)
  -25200,
  1,
  'PDT',
      ],
      [
  61474143600, #    utc_start 1949-01-14 07:00:00 (Fri)
  61630790400, #      utc_end 1954-01-01 08:00:00 (Fri)
  61474114800, #  local_start 1949-01-13 23:00:00 (Thu)
  61630761600, #    local_end 1954-01-01 00:00:00 (Fri)
  -28800,
  0,
  'PST',
      ],
      [
  61630790400, #    utc_start 1954-01-01 08:00:00 (Fri)
  61640647200, #      utc_end 1954-04-25 10:00:00 (Sun)
  61630761600, #  local_start 1954-01-01 00:00:00 (Fri)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61640647200, #    utc_start 1954-04-25 10:00:00 (Sun)
  61653949200, #      utc_end 1954-09-26 09:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61653949200, #    utc_start 1954-09-26 09:00:00 (Sun)
  61672096800, #      utc_end 1955-04-24 10:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61672096800, #    utc_start 1955-04-24 10:00:00 (Sun)
  61685398800, #      utc_end 1955-09-25 09:00:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61685373600, #    local_end 1955-09-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61685398800, #    utc_start 1955-09-25 09:00:00 (Sun)
  61704151200, #      utc_end 1956-04-29 10:00:00 (Sun)
  61685370000, #  local_start 1955-09-25 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61704151200, #    utc_start 1956-04-29 10:00:00 (Sun)
  61717453200, #      utc_end 1956-09-30 09:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61717428000, #    local_end 1956-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61717453200, #    utc_start 1956-09-30 09:00:00 (Sun)
  61735600800, #      utc_end 1957-04-28 10:00:00 (Sun)
  61717424400, #  local_start 1956-09-30 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61735600800, #    utc_start 1957-04-28 10:00:00 (Sun)
  61748902800, #      utc_end 1957-09-29 09:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61748902800, #    utc_start 1957-09-29 09:00:00 (Sun)
  61767050400, #      utc_end 1958-04-27 10:00:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61767050400, #    utc_start 1958-04-27 10:00:00 (Sun)
  61780352400, #      utc_end 1958-09-28 09:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61780327200, #    local_end 1958-09-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61780352400, #    utc_start 1958-09-28 09:00:00 (Sun)
  61798500000, #      utc_end 1959-04-26 10:00:00 (Sun)
  61780323600, #  local_start 1958-09-28 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61798500000, #    utc_start 1959-04-26 10:00:00 (Sun)
  61811802000, #      utc_end 1959-09-27 09:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61811776800, #    local_end 1959-09-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61811802000, #    utc_start 1959-09-27 09:00:00 (Sun)
  61829949600, #      utc_end 1960-04-24 10:00:00 (Sun)
  61811773200, #  local_start 1959-09-27 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61829949600, #    utc_start 1960-04-24 10:00:00 (Sun)
  61843251600, #      utc_end 1960-09-25 09:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61843226400, #    local_end 1960-09-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61843251600, #    utc_start 1960-09-25 09:00:00 (Sun)
  61851715200, #      utc_end 1961-01-01 08:00:00 (Sun)
  61843222800, #  local_start 1960-09-25 01:00:00 (Sun)
  61851686400, #    local_end 1961-01-01 00:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61851715200, #    utc_start 1961-01-01 08:00:00 (Sun)
  62325014400, #      utc_end 1976-01-01 08:00:00 (Thu)
  61851686400, #  local_start 1961-01-01 00:00:00 (Sun)
  62324985600, #    local_end 1976-01-01 00:00:00 (Thu)
  -28800,
  0,
  'PST',
      ],
      [
  62325014400, #    utc_start 1976-01-01 08:00:00 (Thu)
  62334957600, #      utc_end 1976-04-25 10:00:00 (Sun)
  62324985600, #  local_start 1976-01-01 00:00:00 (Thu)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62334957600, #    utc_start 1976-04-25 10:00:00 (Sun)
  62351283600, #      utc_end 1976-10-31 09:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62351283600, #    utc_start 1976-10-31 09:00:00 (Sun)
  62366407200, #      utc_end 1977-04-24 10:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62366407200, #    utc_start 1977-04-24 10:00:00 (Sun)
  62382733200, #      utc_end 1977-10-30 09:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62382733200, #    utc_start 1977-10-30 09:00:00 (Sun)
  62398461600, #      utc_end 1978-04-30 10:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62398461600, #    utc_start 1978-04-30 10:00:00 (Sun)
  62414182800, #      utc_end 1978-10-29 09:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62414182800, #    utc_start 1978-10-29 09:00:00 (Sun)
  62429911200, #      utc_end 1979-04-29 10:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62429911200, #    utc_start 1979-04-29 10:00:00 (Sun)
  62445632400, #      utc_end 1979-10-28 09:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62445632400, #    utc_start 1979-10-28 09:00:00 (Sun)
  62461360800, #      utc_end 1980-04-27 10:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62461360800, #    utc_start 1980-04-27 10:00:00 (Sun)
  62477082000, #      utc_end 1980-10-26 09:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62477082000, #    utc_start 1980-10-26 09:00:00 (Sun)
  62492810400, #      utc_end 1981-04-26 10:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62492810400, #    utc_start 1981-04-26 10:00:00 (Sun)
  62508531600, #      utc_end 1981-10-25 09:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62508531600, #    utc_start 1981-10-25 09:00:00 (Sun)
  62524260000, #      utc_end 1982-04-25 10:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62524260000, #    utc_start 1982-04-25 10:00:00 (Sun)
  62540586000, #      utc_end 1982-10-31 09:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62540586000, #    utc_start 1982-10-31 09:00:00 (Sun)
  62555709600, #      utc_end 1983-04-24 10:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62555709600, #    utc_start 1983-04-24 10:00:00 (Sun)
  62572035600, #      utc_end 1983-10-30 09:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62572035600, #    utc_start 1983-10-30 09:00:00 (Sun)
  62587764000, #      utc_end 1984-04-29 10:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62587764000, #    utc_start 1984-04-29 10:00:00 (Sun)
  62603485200, #      utc_end 1984-10-28 09:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62603485200, #    utc_start 1984-10-28 09:00:00 (Sun)
  62619213600, #      utc_end 1985-04-28 10:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62619213600, #    utc_start 1985-04-28 10:00:00 (Sun)
  62634934800, #      utc_end 1985-10-27 09:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62634934800, #    utc_start 1985-10-27 09:00:00 (Sun)
  62650663200, #      utc_end 1986-04-27 10:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62650663200, #    utc_start 1986-04-27 10:00:00 (Sun)
  62666384400, #      utc_end 1986-10-26 09:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62666384400, #    utc_start 1986-10-26 09:00:00 (Sun)
  62680298400, #      utc_end 1987-04-05 10:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62680298400, #    utc_start 1987-04-05 10:00:00 (Sun)
  62697834000, #      utc_end 1987-10-25 09:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62697834000, #    utc_start 1987-10-25 09:00:00 (Sun)
  62711748000, #      utc_end 1988-04-03 10:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62711748000, #    utc_start 1988-04-03 10:00:00 (Sun)
  62729888400, #      utc_end 1988-10-30 09:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62729888400, #    utc_start 1988-10-30 09:00:00 (Sun)
  62743197600, #      utc_end 1989-04-02 10:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62743197600, #    utc_start 1989-04-02 10:00:00 (Sun)
  62761338000, #      utc_end 1989-10-29 09:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62761338000, #    utc_start 1989-10-29 09:00:00 (Sun)
  62774647200, #      utc_end 1990-04-01 10:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62774647200, #    utc_start 1990-04-01 10:00:00 (Sun)
  62792787600, #      utc_end 1990-10-28 09:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62792787600, #    utc_start 1990-10-28 09:00:00 (Sun)
  62806701600, #      utc_end 1991-04-07 10:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62806701600, #    utc_start 1991-04-07 10:00:00 (Sun)
  62824237200, #      utc_end 1991-10-27 09:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62824237200, #    utc_start 1991-10-27 09:00:00 (Sun)
  62838151200, #      utc_end 1992-04-05 10:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62838151200, #    utc_start 1992-04-05 10:00:00 (Sun)
  62855686800, #      utc_end 1992-10-25 09:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62855686800, #    utc_start 1992-10-25 09:00:00 (Sun)
  62869600800, #      utc_end 1993-04-04 10:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62869600800, #    utc_start 1993-04-04 10:00:00 (Sun)
  62887741200, #      utc_end 1993-10-31 09:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62887741200, #    utc_start 1993-10-31 09:00:00 (Sun)
  62901050400, #      utc_end 1994-04-03 10:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62901050400, #    utc_start 1994-04-03 10:00:00 (Sun)
  62919190800, #      utc_end 1994-10-30 09:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62919190800, #    utc_start 1994-10-30 09:00:00 (Sun)
  62932500000, #      utc_end 1995-04-02 10:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62932500000, #    utc_start 1995-04-02 10:00:00 (Sun)
  62950640400, #      utc_end 1995-10-29 09:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62950640400, #    utc_start 1995-10-29 09:00:00 (Sun)
  62956166400, #      utc_end 1996-01-01 08:00:00 (Mon)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62956137600, #    local_end 1996-01-01 00:00:00 (Mon)
  -28800,
  0,
  'PST',
      ],
      [
  62956166400, #    utc_start 1996-01-01 08:00:00 (Mon)
  62964554400, #      utc_end 1996-04-07 10:00:00 (Sun)
  62956137600, #  local_start 1996-01-01 00:00:00 (Mon)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62964554400, #    utc_start 1996-04-07 10:00:00 (Sun)
  62982090000, #      utc_end 1996-10-27 09:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62982090000, #    utc_start 1996-10-27 09:00:00 (Sun)
  62996004000, #      utc_end 1997-04-06 10:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62996004000, #    utc_start 1997-04-06 10:00:00 (Sun)
  63013539600, #      utc_end 1997-10-26 09:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63013539600, #    utc_start 1997-10-26 09:00:00 (Sun)
  63027453600, #      utc_end 1998-04-05 10:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63027453600, #    utc_start 1998-04-05 10:00:00 (Sun)
  63044989200, #      utc_end 1998-10-25 09:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63044989200, #    utc_start 1998-10-25 09:00:00 (Sun)
  63058903200, #      utc_end 1999-04-04 10:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63058903200, #    utc_start 1999-04-04 10:00:00 (Sun)
  63077043600, #      utc_end 1999-10-31 09:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63077043600, #    utc_start 1999-10-31 09:00:00 (Sun)
  63090352800, #      utc_end 2000-04-02 10:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63090352800, #    utc_start 2000-04-02 10:00:00 (Sun)
  63108493200, #      utc_end 2000-10-29 09:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63108493200, #    utc_start 2000-10-29 09:00:00 (Sun)
  63114019200, #      utc_end 2001-01-01 08:00:00 (Mon)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63113990400, #    local_end 2001-01-01 00:00:00 (Mon)
  -28800,
  0,
  'PST',
      ],
      [
  63114019200, #    utc_start 2001-01-01 08:00:00 (Mon)
  63121802400, #      utc_end 2001-04-01 10:00:00 (Sun)
  63113990400, #  local_start 2001-01-01 00:00:00 (Mon)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63121802400, #    utc_start 2001-04-01 10:00:00 (Sun)
  63139942800, #      utc_end 2001-10-28 09:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63139942800, #    utc_start 2001-10-28 09:00:00 (Sun)
  63149875200, #      utc_end 2002-02-20 08:00:00 (Wed)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63149846400, #    local_end 2002-02-20 00:00:00 (Wed)
  -28800,
  0,
  'PST',
      ],
      [
  63149875200, #    utc_start 2002-02-20 08:00:00 (Wed)
  63153856800, #      utc_end 2002-04-07 10:00:00 (Sun)
  63149846400, #  local_start 2002-02-20 00:00:00 (Wed)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63153856800, #    utc_start 2002-04-07 10:00:00 (Sun)
  63171392400, #      utc_end 2002-10-27 09:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63171392400, #    utc_start 2002-10-27 09:00:00 (Sun)
  63185306400, #      utc_end 2003-04-06 10:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63185306400, #    utc_start 2003-04-06 10:00:00 (Sun)
  63202842000, #      utc_end 2003-10-26 09:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63202842000, #    utc_start 2003-10-26 09:00:00 (Sun)
  63216756000, #      utc_end 2004-04-04 10:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63216756000, #    utc_start 2004-04-04 10:00:00 (Sun)
  63234896400, #      utc_end 2004-10-31 09:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63234896400, #    utc_start 2004-10-31 09:00:00 (Sun)
  63248205600, #      utc_end 2005-04-03 10:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63248205600, #    utc_start 2005-04-03 10:00:00 (Sun)
  63266346000, #      utc_end 2005-10-30 09:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63266346000, #    utc_start 2005-10-30 09:00:00 (Sun)
  63279655200, #      utc_end 2006-04-02 10:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63279655200, #    utc_start 2006-04-02 10:00:00 (Sun)
  63297795600, #      utc_end 2006-10-29 09:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63297795600, #    utc_start 2006-10-29 09:00:00 (Sun)
  63311104800, #      utc_end 2007-04-01 10:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63311076000, #    local_end 2007-04-01 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63311104800, #    utc_start 2007-04-01 10:00:00 (Sun)
  63329245200, #      utc_end 2007-10-28 09:00:00 (Sun)
  63311079600, #  local_start 2007-04-01 03:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63329245200, #    utc_start 2007-10-28 09:00:00 (Sun)
  63343159200, #      utc_end 2008-04-06 10:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63343130400, #    local_end 2008-04-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63343159200, #    utc_start 2008-04-06 10:00:00 (Sun)
  63360694800, #      utc_end 2008-10-26 09:00:00 (Sun)
  63343134000, #  local_start 2008-04-06 03:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63360694800, #    utc_start 2008-10-26 09:00:00 (Sun)
  63374608800, #      utc_end 2009-04-05 10:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63374580000, #    local_end 2009-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63374608800, #    utc_start 2009-04-05 10:00:00 (Sun)
  63392144400, #      utc_end 2009-10-25 09:00:00 (Sun)
  63374583600, #  local_start 2009-04-05 03:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63392144400, #    utc_start 2009-10-25 09:00:00 (Sun)
  63398016000, #      utc_end 2010-01-01 08:00:00 (Fri)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63397987200, #    local_end 2010-01-01 00:00:00 (Fri)
  -28800,
  0,
  'PST',
      ],
      [
  63398016000, #    utc_start 2010-01-01 08:00:00 (Fri)
  63404244000, #      utc_end 2010-03-14 10:00:00 (Sun)
  63397987200, #  local_start 2010-01-01 00:00:00 (Fri)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63404244000, #    utc_start 2010-03-14 10:00:00 (Sun)
  63424803600, #      utc_end 2010-11-07 09:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63424803600, #    utc_start 2010-11-07 09:00:00 (Sun)
  63435693600, #      utc_end 2011-03-13 10:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63435693600, #    utc_start 2011-03-13 10:00:00 (Sun)
  63456253200, #      utc_end 2011-11-06 09:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63456253200, #    utc_start 2011-11-06 09:00:00 (Sun)
  63467143200, #      utc_end 2012-03-11 10:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63467143200, #    utc_start 2012-03-11 10:00:00 (Sun)
  63487702800, #      utc_end 2012-11-04 09:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63487702800, #    utc_start 2012-11-04 09:00:00 (Sun)
  63498592800, #      utc_end 2013-03-10 10:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63498592800, #    utc_start 2013-03-10 10:00:00 (Sun)
  63519152400, #      utc_end 2013-11-03 09:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63519152400, #    utc_start 2013-11-03 09:00:00 (Sun)
  63530042400, #      utc_end 2014-03-09 10:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63530042400, #    utc_start 2014-03-09 10:00:00 (Sun)
  63550602000, #      utc_end 2014-11-02 09:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63550602000, #    utc_start 2014-11-02 09:00:00 (Sun)
  63561492000, #      utc_end 2015-03-08 10:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63561492000, #    utc_start 2015-03-08 10:00:00 (Sun)
  63582051600, #      utc_end 2015-11-01 09:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63582051600, #    utc_start 2015-11-01 09:00:00 (Sun)
  63593546400, #      utc_end 2016-03-13 10:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63593546400, #    utc_start 2016-03-13 10:00:00 (Sun)
  63614106000, #      utc_end 2016-11-06 09:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63614106000, #    utc_start 2016-11-06 09:00:00 (Sun)
  63624996000, #      utc_end 2017-03-12 10:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63624996000, #    utc_start 2017-03-12 10:00:00 (Sun)
  63645555600, #      utc_end 2017-11-05 09:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63645555600, #    utc_start 2017-11-05 09:00:00 (Sun)
  63656445600, #      utc_end 2018-03-11 10:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63656445600, #    utc_start 2018-03-11 10:00:00 (Sun)
  63677005200, #      utc_end 2018-11-04 09:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63677005200, #    utc_start 2018-11-04 09:00:00 (Sun)
  63687895200, #      utc_end 2019-03-10 10:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63687895200, #    utc_start 2019-03-10 10:00:00 (Sun)
  63708454800, #      utc_end 2019-11-03 09:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63708454800, #    utc_start 2019-11-03 09:00:00 (Sun)
  63719344800, #      utc_end 2020-03-08 10:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63719344800, #    utc_start 2020-03-08 10:00:00 (Sun)
  63739904400, #      utc_end 2020-11-01 09:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63739904400, #    utc_start 2020-11-01 09:00:00 (Sun)
  63751399200, #      utc_end 2021-03-14 10:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63751399200, #    utc_start 2021-03-14 10:00:00 (Sun)
  63771958800, #      utc_end 2021-11-07 09:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63771958800, #    utc_start 2021-11-07 09:00:00 (Sun)
  63782848800, #      utc_end 2022-03-13 10:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63782848800, #    utc_start 2022-03-13 10:00:00 (Sun)
  63803408400, #      utc_end 2022-11-06 09:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63803408400, #    utc_start 2022-11-06 09:00:00 (Sun)
  63814298400, #      utc_end 2023-03-12 10:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63814298400, #    utc_start 2023-03-12 10:00:00 (Sun)
  63834858000, #      utc_end 2023-11-05 09:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63834858000, #    utc_start 2023-11-05 09:00:00 (Sun)
  63845748000, #      utc_end 2024-03-10 10:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63845748000, #    utc_start 2024-03-10 10:00:00 (Sun)
  63866307600, #      utc_end 2024-11-03 09:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63866307600, #    utc_start 2024-11-03 09:00:00 (Sun)
  63877197600, #      utc_end 2025-03-09 10:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63877197600, #    utc_start 2025-03-09 10:00:00 (Sun)
  63897757200, #      utc_end 2025-11-02 09:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63897757200, #    utc_start 2025-11-02 09:00:00 (Sun)
  63908647200, #      utc_end 2026-03-08 10:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63908647200, #    utc_start 2026-03-08 10:00:00 (Sun)
  63929206800, #      utc_end 2026-11-01 09:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63929206800, #    utc_start 2026-11-01 09:00:00 (Sun)
  63940701600, #      utc_end 2027-03-14 10:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63940701600, #    utc_start 2027-03-14 10:00:00 (Sun)
  63961261200, #      utc_end 2027-11-07 09:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {63}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -28800 }
  
  my $last_observance = bless( {
    'format' => 'P%sT',
    'gmtoff' => '-8:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 733773,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 733773,
      'utc_rd_secs' => 0,
      'utc_year' => 2011
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -28800,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 733773,
      'local_rd_secs' => 28800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 733773,
      'utc_rd_secs' => 28800,
      'utc_year' => 2011
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_TIJUANA

    $main::fatpacked{"DateTime/TimeZone/America/Toronto.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_TORONTO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Toronto;
  $DateTime::TimeZone::America::Toronto::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Toronto::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59768947052, #      utc_end 1895-01-01 05:17:32 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59768928000, #    local_end 1895-01-01 00:00:00 (Tue)
  -19052,
  0,
  'LMT',
      ],
      [
  59768947052, #    utc_start 1895-01-01 05:17:32 (Tue)
  60503612400, #      utc_end 1918-04-14 07:00:00 (Sun)
  59768929052, #  local_start 1895-01-01 00:17:32 (Tue)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60503612400, #    utc_start 1918-04-14 07:00:00 (Sun)
  60520543200, #      utc_end 1918-10-27 06:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60520543200, #    utc_start 1918-10-27 06:00:00 (Sun)
  60526242000, #      utc_end 1919-01-01 05:00:00 (Wed)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60526224000, #    local_end 1919-01-01 00:00:00 (Wed)
  -18000,
  0,
  'EST',
      ],
      [
  60526242000, #    utc_start 1919-01-01 05:00:00 (Wed)
  60533929800, #      utc_end 1919-03-31 04:30:00 (Mon)
  60526224000, #  local_start 1919-01-01 00:00:00 (Wed)
  60533911800, #    local_end 1919-03-30 23:30:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60533929800, #    utc_start 1919-03-31 04:30:00 (Mon)
  60551985600, #      utc_end 1919-10-26 04:00:00 (Sun)
  60533915400, #  local_start 1919-03-31 00:30:00 (Mon)
  60551971200, #    local_end 1919-10-26 00:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60551985600, #    utc_start 1919-10-26 04:00:00 (Sun)
  60568326000, #      utc_end 1920-05-02 07:00:00 (Sun)
  60551967600, #  local_start 1919-10-25 23:00:00 (Sat)
  60568308000, #    local_end 1920-05-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60568326000, #    utc_start 1920-05-02 07:00:00 (Sun)
  60581016000, #      utc_end 1920-09-26 04:00:00 (Sun)
  60568311600, #  local_start 1920-05-02 03:00:00 (Sun)
  60581001600, #    local_end 1920-09-26 00:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60581016000, #    utc_start 1920-09-26 04:00:00 (Sun)
  60600985200, #      utc_end 1921-05-15 07:00:00 (Sun)
  60580998000, #  local_start 1920-09-25 23:00:00 (Sat)
  60600967200, #    local_end 1921-05-15 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60600985200, #    utc_start 1921-05-15 07:00:00 (Sun)
  60611608800, #      utc_end 1921-09-15 06:00:00 (Thu)
  60600970800, #  local_start 1921-05-15 03:00:00 (Sun)
  60611594400, #    local_end 1921-09-15 02:00:00 (Thu)
  -14400,
  1,
  'EDT',
      ],
      [
  60611608800, #    utc_start 1921-09-15 06:00:00 (Thu)
  60632434800, #      utc_end 1922-05-14 07:00:00 (Sun)
  60611590800, #  local_start 1921-09-15 01:00:00 (Thu)
  60632416800, #    local_end 1922-05-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60632434800, #    utc_start 1922-05-14 07:00:00 (Sun)
  60643317600, #      utc_end 1922-09-17 06:00:00 (Sun)
  60632420400, #  local_start 1922-05-14 03:00:00 (Sun)
  60643303200, #    local_end 1922-09-17 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60643317600, #    utc_start 1922-09-17 06:00:00 (Sun)
  60663884400, #      utc_end 1923-05-13 07:00:00 (Sun)
  60643299600, #  local_start 1922-09-17 01:00:00 (Sun)
  60663866400, #    local_end 1923-05-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60663884400, #    utc_start 1923-05-13 07:00:00 (Sun)
  60674767200, #      utc_end 1923-09-16 06:00:00 (Sun)
  60663870000, #  local_start 1923-05-13 03:00:00 (Sun)
  60674752800, #    local_end 1923-09-16 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60674767200, #    utc_start 1923-09-16 06:00:00 (Sun)
  60694729200, #      utc_end 1924-05-04 07:00:00 (Sun)
  60674749200, #  local_start 1923-09-16 01:00:00 (Sun)
  60694711200, #    local_end 1924-05-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60694729200, #    utc_start 1924-05-04 07:00:00 (Sun)
  60706821600, #      utc_end 1924-09-21 06:00:00 (Sun)
  60694714800, #  local_start 1924-05-04 03:00:00 (Sun)
  60706807200, #    local_end 1924-09-21 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60706821600, #    utc_start 1924-09-21 06:00:00 (Sun)
  60726178800, #      utc_end 1925-05-03 07:00:00 (Sun)
  60706803600, #  local_start 1924-09-21 01:00:00 (Sun)
  60726160800, #    local_end 1925-05-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60726178800, #    utc_start 1925-05-03 07:00:00 (Sun)
  60738271200, #      utc_end 1925-09-20 06:00:00 (Sun)
  60726164400, #  local_start 1925-05-03 03:00:00 (Sun)
  60738256800, #    local_end 1925-09-20 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60738271200, #    utc_start 1925-09-20 06:00:00 (Sun)
  60757628400, #      utc_end 1926-05-02 07:00:00 (Sun)
  60738253200, #  local_start 1925-09-20 01:00:00 (Sun)
  60757610400, #    local_end 1926-05-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60757628400, #    utc_start 1926-05-02 07:00:00 (Sun)
  60769720800, #      utc_end 1926-09-19 06:00:00 (Sun)
  60757614000, #  local_start 1926-05-02 03:00:00 (Sun)
  60769706400, #    local_end 1926-09-19 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60769720800, #    utc_start 1926-09-19 06:00:00 (Sun)
  60789078000, #      utc_end 1927-05-01 07:00:00 (Sun)
  60769702800, #  local_start 1926-09-19 01:00:00 (Sun)
  60789060000, #    local_end 1927-05-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60789078000, #    utc_start 1927-05-01 07:00:00 (Sun)
  60801775200, #      utc_end 1927-09-25 06:00:00 (Sun)
  60789063600, #  local_start 1927-05-01 03:00:00 (Sun)
  60801760800, #    local_end 1927-09-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60801775200, #    utc_start 1927-09-25 06:00:00 (Sun)
  60820527600, #      utc_end 1928-04-29 07:00:00 (Sun)
  60801757200, #  local_start 1927-09-25 01:00:00 (Sun)
  60820509600, #    local_end 1928-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60820527600, #    utc_start 1928-04-29 07:00:00 (Sun)
  60833829600, #      utc_end 1928-09-30 06:00:00 (Sun)
  60820513200, #  local_start 1928-04-29 03:00:00 (Sun)
  60833815200, #    local_end 1928-09-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60833829600, #    utc_start 1928-09-30 06:00:00 (Sun)
  60851977200, #      utc_end 1929-04-28 07:00:00 (Sun)
  60833811600, #  local_start 1928-09-30 01:00:00 (Sun)
  60851959200, #    local_end 1929-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60851977200, #    utc_start 1929-04-28 07:00:00 (Sun)
  60865279200, #      utc_end 1929-09-29 06:00:00 (Sun)
  60851962800, #  local_start 1929-04-28 03:00:00 (Sun)
  60865264800, #    local_end 1929-09-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60865279200, #    utc_start 1929-09-29 06:00:00 (Sun)
  60883426800, #      utc_end 1930-04-27 07:00:00 (Sun)
  60865261200, #  local_start 1929-09-29 01:00:00 (Sun)
  60883408800, #    local_end 1930-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60883426800, #    utc_start 1930-04-27 07:00:00 (Sun)
  60896728800, #      utc_end 1930-09-28 06:00:00 (Sun)
  60883412400, #  local_start 1930-04-27 03:00:00 (Sun)
  60896714400, #    local_end 1930-09-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60896728800, #    utc_start 1930-09-28 06:00:00 (Sun)
  60914876400, #      utc_end 1931-04-26 07:00:00 (Sun)
  60896710800, #  local_start 1930-09-28 01:00:00 (Sun)
  60914858400, #    local_end 1931-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60914876400, #    utc_start 1931-04-26 07:00:00 (Sun)
  60928178400, #      utc_end 1931-09-27 06:00:00 (Sun)
  60914862000, #  local_start 1931-04-26 03:00:00 (Sun)
  60928164000, #    local_end 1931-09-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60928178400, #    utc_start 1931-09-27 06:00:00 (Sun)
  60946930800, #      utc_end 1932-05-01 07:00:00 (Sun)
  60928160400, #  local_start 1931-09-27 01:00:00 (Sun)
  60946912800, #    local_end 1932-05-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60946930800, #    utc_start 1932-05-01 07:00:00 (Sun)
  60959628000, #      utc_end 1932-09-25 06:00:00 (Sun)
  60946916400, #  local_start 1932-05-01 03:00:00 (Sun)
  60959613600, #    local_end 1932-09-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60959628000, #    utc_start 1932-09-25 06:00:00 (Sun)
  60978380400, #      utc_end 1933-04-30 07:00:00 (Sun)
  60959610000, #  local_start 1932-09-25 01:00:00 (Sun)
  60978362400, #    local_end 1933-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60978380400, #    utc_start 1933-04-30 07:00:00 (Sun)
  60991682400, #      utc_end 1933-10-01 06:00:00 (Sun)
  60978366000, #  local_start 1933-04-30 03:00:00 (Sun)
  60991668000, #    local_end 1933-10-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60991682400, #    utc_start 1933-10-01 06:00:00 (Sun)
  61009830000, #      utc_end 1934-04-29 07:00:00 (Sun)
  60991664400, #  local_start 1933-10-01 01:00:00 (Sun)
  61009812000, #    local_end 1934-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61009830000, #    utc_start 1934-04-29 07:00:00 (Sun)
  61023132000, #      utc_end 1934-09-30 06:00:00 (Sun)
  61009815600, #  local_start 1934-04-29 03:00:00 (Sun)
  61023117600, #    local_end 1934-09-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61023132000, #    utc_start 1934-09-30 06:00:00 (Sun)
  61041279600, #      utc_end 1935-04-28 07:00:00 (Sun)
  61023114000, #  local_start 1934-09-30 01:00:00 (Sun)
  61041261600, #    local_end 1935-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61041279600, #    utc_start 1935-04-28 07:00:00 (Sun)
  61054581600, #      utc_end 1935-09-29 06:00:00 (Sun)
  61041265200, #  local_start 1935-04-28 03:00:00 (Sun)
  61054567200, #    local_end 1935-09-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61054581600, #    utc_start 1935-09-29 06:00:00 (Sun)
  61072729200, #      utc_end 1936-04-26 07:00:00 (Sun)
  61054563600, #  local_start 1935-09-29 01:00:00 (Sun)
  61072711200, #    local_end 1936-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61072729200, #    utc_start 1936-04-26 07:00:00 (Sun)
  61086031200, #      utc_end 1936-09-27 06:00:00 (Sun)
  61072714800, #  local_start 1936-04-26 03:00:00 (Sun)
  61086016800, #    local_end 1936-09-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61086031200, #    utc_start 1936-09-27 06:00:00 (Sun)
  61104178800, #      utc_end 1937-04-25 07:00:00 (Sun)
  61086013200, #  local_start 1936-09-27 01:00:00 (Sun)
  61104160800, #    local_end 1937-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61104178800, #    utc_start 1937-04-25 07:00:00 (Sun)
  61117480800, #      utc_end 1937-09-26 06:00:00 (Sun)
  61104164400, #  local_start 1937-04-25 03:00:00 (Sun)
  61117466400, #    local_end 1937-09-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61117480800, #    utc_start 1937-09-26 06:00:00 (Sun)
  61135628400, #      utc_end 1938-04-24 07:00:00 (Sun)
  61117462800, #  local_start 1937-09-26 01:00:00 (Sun)
  61135610400, #    local_end 1938-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61135628400, #    utc_start 1938-04-24 07:00:00 (Sun)
  61148930400, #      utc_end 1938-09-25 06:00:00 (Sun)
  61135614000, #  local_start 1938-04-24 03:00:00 (Sun)
  61148916000, #    local_end 1938-09-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61148930400, #    utc_start 1938-09-25 06:00:00 (Sun)
  61167682800, #      utc_end 1939-04-30 07:00:00 (Sun)
  61148912400, #  local_start 1938-09-25 01:00:00 (Sun)
  61167664800, #    local_end 1939-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61167682800, #    utc_start 1939-04-30 07:00:00 (Sun)
  61180380000, #      utc_end 1939-09-24 06:00:00 (Sun)
  61167668400, #  local_start 1939-04-30 03:00:00 (Sun)
  61180365600, #    local_end 1939-09-24 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61180380000, #    utc_start 1939-09-24 06:00:00 (Sun)
  61199132400, #      utc_end 1940-04-28 07:00:00 (Sun)
  61180362000, #  local_start 1939-09-24 01:00:00 (Sun)
  61199114400, #    local_end 1940-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61199132400, #    utc_start 1940-04-28 07:00:00 (Sun)
  61255465200, #      utc_end 1942-02-09 07:00:00 (Mon)
  61199118000, #  local_start 1940-04-28 03:00:00 (Sun)
  61255450800, #    local_end 1942-02-09 03:00:00 (Mon)
  -14400,
  1,
  'EDT',
      ],
      [
  61255465200, #    utc_start 1942-02-09 07:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366273200, #    local_end 1945-08-14 19:00:00 (Tue)
  -14400,
  1,
  'EWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370287200, #      utc_end 1945-09-30 06:00:00 (Sun)
  61366273200, #  local_start 1945-08-14 19:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -14400,
  1,
  'EPT',
      ],
      [
  61370287200, #    utc_start 1945-09-30 06:00:00 (Sun)
  61378318800, #      utc_end 1946-01-01 05:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -18000,
  0,
  'EST',
      ],
      [
  61378318800, #    utc_start 1946-01-01 05:00:00 (Tue)
  61388434800, #      utc_end 1946-04-28 07:00:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61388416800, #    local_end 1946-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61388434800, #    utc_start 1946-04-28 07:00:00 (Sun)
  61401736800, #      utc_end 1946-09-29 06:00:00 (Sun)
  61388420400, #  local_start 1946-04-28 03:00:00 (Sun)
  61401722400, #    local_end 1946-09-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61401736800, #    utc_start 1946-09-29 06:00:00 (Sun)
  61419877200, #      utc_end 1947-04-27 05:00:00 (Sun)
  61401718800, #  local_start 1946-09-29 01:00:00 (Sun)
  61419859200, #    local_end 1947-04-27 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61419877200, #    utc_start 1947-04-27 05:00:00 (Sun)
  61433179200, #      utc_end 1947-09-28 04:00:00 (Sun)
  61419862800, #  local_start 1947-04-27 01:00:00 (Sun)
  61433164800, #    local_end 1947-09-28 00:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61433179200, #    utc_start 1947-09-28 04:00:00 (Sun)
  61451326800, #      utc_end 1948-04-25 05:00:00 (Sun)
  61433161200, #  local_start 1947-09-27 23:00:00 (Sat)
  61451308800, #    local_end 1948-04-25 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61451326800, #    utc_start 1948-04-25 05:00:00 (Sun)
  61464628800, #      utc_end 1948-09-26 04:00:00 (Sun)
  61451312400, #  local_start 1948-04-25 01:00:00 (Sun)
  61464614400, #    local_end 1948-09-26 00:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61464628800, #    utc_start 1948-09-26 04:00:00 (Sun)
  61482776400, #      utc_end 1949-04-24 05:00:00 (Sun)
  61464610800, #  local_start 1948-09-25 23:00:00 (Sat)
  61482758400, #    local_end 1949-04-24 00:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61482776400, #    utc_start 1949-04-24 05:00:00 (Sun)
  61501521600, #      utc_end 1949-11-27 04:00:00 (Sun)
  61482762000, #  local_start 1949-04-24 01:00:00 (Sun)
  61501507200, #    local_end 1949-11-27 00:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61501521600, #    utc_start 1949-11-27 04:00:00 (Sun)
  61514838000, #      utc_end 1950-04-30 07:00:00 (Sun)
  61501503600, #  local_start 1949-11-26 23:00:00 (Sat)
  61514820000, #    local_end 1950-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61514838000, #    utc_start 1950-04-30 07:00:00 (Sun)
  61532978400, #      utc_end 1950-11-26 06:00:00 (Sun)
  61514823600, #  local_start 1950-04-30 03:00:00 (Sun)
  61532964000, #    local_end 1950-11-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61532978400, #    utc_start 1950-11-26 06:00:00 (Sun)
  61546287600, #      utc_end 1951-04-29 07:00:00 (Sun)
  61532960400, #  local_start 1950-11-26 01:00:00 (Sun)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61546287600, #    utc_start 1951-04-29 07:00:00 (Sun)
  61559589600, #      utc_end 1951-09-30 06:00:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61559589600, #    utc_start 1951-09-30 06:00:00 (Sun)
  61577737200, #      utc_end 1952-04-27 07:00:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61577737200, #    utc_start 1952-04-27 07:00:00 (Sun)
  61591039200, #      utc_end 1952-09-28 06:00:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61591039200, #    utc_start 1952-09-28 06:00:00 (Sun)
  61609186800, #      utc_end 1953-04-26 07:00:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61609186800, #    utc_start 1953-04-26 07:00:00 (Sun)
  61622488800, #      utc_end 1953-09-27 06:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61622488800, #    utc_start 1953-09-27 06:00:00 (Sun)
  61640636400, #      utc_end 1954-04-25 07:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61640636400, #    utc_start 1954-04-25 07:00:00 (Sun)
  61653938400, #      utc_end 1954-09-26 06:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61653938400, #    utc_start 1954-09-26 06:00:00 (Sun)
  61672086000, #      utc_end 1955-04-24 07:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61672086000, #    utc_start 1955-04-24 07:00:00 (Sun)
  61685388000, #      utc_end 1955-09-25 06:00:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61685373600, #    local_end 1955-09-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61685388000, #    utc_start 1955-09-25 06:00:00 (Sun)
  61704140400, #      utc_end 1956-04-29 07:00:00 (Sun)
  61685370000, #  local_start 1955-09-25 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61704140400, #    utc_start 1956-04-29 07:00:00 (Sun)
  61717442400, #      utc_end 1956-09-30 06:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61717428000, #    local_end 1956-09-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61717442400, #    utc_start 1956-09-30 06:00:00 (Sun)
  61735590000, #      utc_end 1957-04-28 07:00:00 (Sun)
  61717424400, #  local_start 1956-09-30 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61735590000, #    utc_start 1957-04-28 07:00:00 (Sun)
  61751311200, #      utc_end 1957-10-27 06:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61751296800, #    local_end 1957-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61751311200, #    utc_start 1957-10-27 06:00:00 (Sun)
  61767039600, #      utc_end 1958-04-27 07:00:00 (Sun)
  61751293200, #  local_start 1957-10-27 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61767039600, #    utc_start 1958-04-27 07:00:00 (Sun)
  61782760800, #      utc_end 1958-10-26 06:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61782746400, #    local_end 1958-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61782760800, #    utc_start 1958-10-26 06:00:00 (Sun)
  61798489200, #      utc_end 1959-04-26 07:00:00 (Sun)
  61782742800, #  local_start 1958-10-26 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61798489200, #    utc_start 1959-04-26 07:00:00 (Sun)
  61814210400, #      utc_end 1959-10-25 06:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61814196000, #    local_end 1959-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61814210400, #    utc_start 1959-10-25 06:00:00 (Sun)
  61829938800, #      utc_end 1960-04-24 07:00:00 (Sun)
  61814192400, #  local_start 1959-10-25 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61829938800, #    utc_start 1960-04-24 07:00:00 (Sun)
  61846264800, #      utc_end 1960-10-30 06:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61846250400, #    local_end 1960-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61846264800, #    utc_start 1960-10-30 06:00:00 (Sun)
  61861993200, #      utc_end 1961-04-30 07:00:00 (Sun)
  61846246800, #  local_start 1960-10-30 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61861993200, #    utc_start 1961-04-30 07:00:00 (Sun)
  61877714400, #      utc_end 1961-10-29 06:00:00 (Sun)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  61877700000, #    local_end 1961-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61877714400, #    utc_start 1961-10-29 06:00:00 (Sun)
  61893442800, #      utc_end 1962-04-29 07:00:00 (Sun)
  61877696400, #  local_start 1961-10-29 01:00:00 (Sun)
  61893424800, #    local_end 1962-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61893442800, #    utc_start 1962-04-29 07:00:00 (Sun)
  61909164000, #      utc_end 1962-10-28 06:00:00 (Sun)
  61893428400, #  local_start 1962-04-29 03:00:00 (Sun)
  61909149600, #    local_end 1962-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61909164000, #    utc_start 1962-10-28 06:00:00 (Sun)
  61924892400, #      utc_end 1963-04-28 07:00:00 (Sun)
  61909146000, #  local_start 1962-10-28 01:00:00 (Sun)
  61924874400, #    local_end 1963-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61924892400, #    utc_start 1963-04-28 07:00:00 (Sun)
  61940613600, #      utc_end 1963-10-27 06:00:00 (Sun)
  61924878000, #  local_start 1963-04-28 03:00:00 (Sun)
  61940599200, #    local_end 1963-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61940613600, #    utc_start 1963-10-27 06:00:00 (Sun)
  61956342000, #      utc_end 1964-04-26 07:00:00 (Sun)
  61940595600, #  local_start 1963-10-27 01:00:00 (Sun)
  61956324000, #    local_end 1964-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61956342000, #    utc_start 1964-04-26 07:00:00 (Sun)
  61972063200, #      utc_end 1964-10-25 06:00:00 (Sun)
  61956327600, #  local_start 1964-04-26 03:00:00 (Sun)
  61972048800, #    local_end 1964-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  61972063200, #    utc_start 1964-10-25 06:00:00 (Sun)
  61987791600, #      utc_end 1965-04-25 07:00:00 (Sun)
  61972045200, #  local_start 1964-10-25 01:00:00 (Sun)
  61987773600, #    local_end 1965-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  61987791600, #    utc_start 1965-04-25 07:00:00 (Sun)
  62004117600, #      utc_end 1965-10-31 06:00:00 (Sun)
  61987777200, #  local_start 1965-04-25 03:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62004117600, #    utc_start 1965-10-31 06:00:00 (Sun)
  62019241200, #      utc_end 1966-04-24 07:00:00 (Sun)
  62004099600, #  local_start 1965-10-31 01:00:00 (Sun)
  62019223200, #    local_end 1966-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62019241200, #    utc_start 1966-04-24 07:00:00 (Sun)
  62035567200, #      utc_end 1966-10-30 06:00:00 (Sun)
  62019226800, #  local_start 1966-04-24 03:00:00 (Sun)
  62035552800, #    local_end 1966-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62035567200, #    utc_start 1966-10-30 06:00:00 (Sun)
  62051295600, #      utc_end 1967-04-30 07:00:00 (Sun)
  62035549200, #  local_start 1966-10-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62051295600, #    utc_start 1967-04-30 07:00:00 (Sun)
  62067016800, #      utc_end 1967-10-29 06:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62067016800, #    utc_start 1967-10-29 06:00:00 (Sun)
  62082745200, #      utc_end 1968-04-28 07:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62082745200, #    utc_start 1968-04-28 07:00:00 (Sun)
  62098466400, #      utc_end 1968-10-27 06:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62098466400, #    utc_start 1968-10-27 06:00:00 (Sun)
  62114194800, #      utc_end 1969-04-27 07:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62114194800, #    utc_start 1969-04-27 07:00:00 (Sun)
  62129916000, #      utc_end 1969-10-26 06:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62129916000, #    utc_start 1969-10-26 06:00:00 (Sun)
  62145644400, #      utc_end 1970-04-26 07:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62145644400, #    utc_start 1970-04-26 07:00:00 (Sun)
  62161365600, #      utc_end 1970-10-25 06:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62161365600, #    utc_start 1970-10-25 06:00:00 (Sun)
  62177094000, #      utc_end 1971-04-25 07:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62177094000, #    utc_start 1971-04-25 07:00:00 (Sun)
  62193420000, #      utc_end 1971-10-31 06:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62193420000, #    utc_start 1971-10-31 06:00:00 (Sun)
  62209148400, #      utc_end 1972-04-30 07:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62209148400, #    utc_start 1972-04-30 07:00:00 (Sun)
  62224869600, #      utc_end 1972-10-29 06:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62224869600, #    utc_start 1972-10-29 06:00:00 (Sun)
  62240598000, #      utc_end 1973-04-29 07:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62240598000, #    utc_start 1973-04-29 07:00:00 (Sun)
  62256319200, #      utc_end 1973-10-28 06:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62256319200, #    utc_start 1973-10-28 06:00:00 (Sun)
  62261931600, #      utc_end 1974-01-01 05:00:00 (Tue)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62261913600, #    local_end 1974-01-01 00:00:00 (Tue)
  -18000,
  0,
  'EST',
      ],
      [
  62261931600, #    utc_start 1974-01-01 05:00:00 (Tue)
  62272047600, #      utc_end 1974-04-28 07:00:00 (Sun)
  62261913600, #  local_start 1974-01-01 00:00:00 (Tue)
  62272029600, #    local_end 1974-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62272047600, #    utc_start 1974-04-28 07:00:00 (Sun)
  62287768800, #      utc_end 1974-10-27 06:00:00 (Sun)
  62272033200, #  local_start 1974-04-28 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62287768800, #    utc_start 1974-10-27 06:00:00 (Sun)
  62303497200, #      utc_end 1975-04-27 07:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62303479200, #    local_end 1975-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62303497200, #    utc_start 1975-04-27 07:00:00 (Sun)
  62319218400, #      utc_end 1975-10-26 06:00:00 (Sun)
  62303482800, #  local_start 1975-04-27 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62319218400, #    utc_start 1975-10-26 06:00:00 (Sun)
  62334946800, #      utc_end 1976-04-25 07:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62334946800, #    utc_start 1976-04-25 07:00:00 (Sun)
  62351272800, #      utc_end 1976-10-31 06:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62351272800, #    utc_start 1976-10-31 06:00:00 (Sun)
  62366396400, #      utc_end 1977-04-24 07:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62366396400, #    utc_start 1977-04-24 07:00:00 (Sun)
  62382722400, #      utc_end 1977-10-30 06:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62382722400, #    utc_start 1977-10-30 06:00:00 (Sun)
  62398450800, #      utc_end 1978-04-30 07:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62398450800, #    utc_start 1978-04-30 07:00:00 (Sun)
  62414172000, #      utc_end 1978-10-29 06:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62414172000, #    utc_start 1978-10-29 06:00:00 (Sun)
  62429900400, #      utc_end 1979-04-29 07:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62429900400, #    utc_start 1979-04-29 07:00:00 (Sun)
  62445621600, #      utc_end 1979-10-28 06:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62445621600, #    utc_start 1979-10-28 06:00:00 (Sun)
  62461350000, #      utc_end 1980-04-27 07:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62461350000, #    utc_start 1980-04-27 07:00:00 (Sun)
  62477071200, #      utc_end 1980-10-26 06:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62477071200, #    utc_start 1980-10-26 06:00:00 (Sun)
  62492799600, #      utc_end 1981-04-26 07:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62492799600, #    utc_start 1981-04-26 07:00:00 (Sun)
  62508520800, #      utc_end 1981-10-25 06:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62508520800, #    utc_start 1981-10-25 06:00:00 (Sun)
  62524249200, #      utc_end 1982-04-25 07:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62524249200, #    utc_start 1982-04-25 07:00:00 (Sun)
  62540575200, #      utc_end 1982-10-31 06:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62540575200, #    utc_start 1982-10-31 06:00:00 (Sun)
  62555698800, #      utc_end 1983-04-24 07:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62555698800, #    utc_start 1983-04-24 07:00:00 (Sun)
  62572024800, #      utc_end 1983-10-30 06:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62572024800, #    utc_start 1983-10-30 06:00:00 (Sun)
  62587753200, #      utc_end 1984-04-29 07:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62587753200, #    utc_start 1984-04-29 07:00:00 (Sun)
  62603474400, #      utc_end 1984-10-28 06:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62603474400, #    utc_start 1984-10-28 06:00:00 (Sun)
  62619202800, #      utc_end 1985-04-28 07:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62619202800, #    utc_start 1985-04-28 07:00:00 (Sun)
  62634924000, #      utc_end 1985-10-27 06:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62634924000, #    utc_start 1985-10-27 06:00:00 (Sun)
  62650652400, #      utc_end 1986-04-27 07:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62650652400, #    utc_start 1986-04-27 07:00:00 (Sun)
  62666373600, #      utc_end 1986-10-26 06:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62666373600, #    utc_start 1986-10-26 06:00:00 (Sun)
  62680287600, #      utc_end 1987-04-05 07:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62680287600, #    utc_start 1987-04-05 07:00:00 (Sun)
  62697823200, #      utc_end 1987-10-25 06:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62697823200, #    utc_start 1987-10-25 06:00:00 (Sun)
  62711737200, #      utc_end 1988-04-03 07:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62711737200, #    utc_start 1988-04-03 07:00:00 (Sun)
  62729877600, #      utc_end 1988-10-30 06:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62729877600, #    utc_start 1988-10-30 06:00:00 (Sun)
  62743186800, #      utc_end 1989-04-02 07:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62743186800, #    utc_start 1989-04-02 07:00:00 (Sun)
  62761327200, #      utc_end 1989-10-29 06:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62761327200, #    utc_start 1989-10-29 06:00:00 (Sun)
  62774636400, #      utc_end 1990-04-01 07:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62774636400, #    utc_start 1990-04-01 07:00:00 (Sun)
  62792776800, #      utc_end 1990-10-28 06:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62792776800, #    utc_start 1990-10-28 06:00:00 (Sun)
  62806690800, #      utc_end 1991-04-07 07:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62806690800, #    utc_start 1991-04-07 07:00:00 (Sun)
  62824226400, #      utc_end 1991-10-27 06:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62824226400, #    utc_start 1991-10-27 06:00:00 (Sun)
  62838140400, #      utc_end 1992-04-05 07:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62838140400, #    utc_start 1992-04-05 07:00:00 (Sun)
  62855676000, #      utc_end 1992-10-25 06:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62855676000, #    utc_start 1992-10-25 06:00:00 (Sun)
  62869590000, #      utc_end 1993-04-04 07:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62869590000, #    utc_start 1993-04-04 07:00:00 (Sun)
  62887730400, #      utc_end 1993-10-31 06:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62887730400, #    utc_start 1993-10-31 06:00:00 (Sun)
  62901039600, #      utc_end 1994-04-03 07:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62901039600, #    utc_start 1994-04-03 07:00:00 (Sun)
  62919180000, #      utc_end 1994-10-30 06:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62919180000, #    utc_start 1994-10-30 06:00:00 (Sun)
  62932489200, #      utc_end 1995-04-02 07:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62932489200, #    utc_start 1995-04-02 07:00:00 (Sun)
  62950629600, #      utc_end 1995-10-29 06:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62950629600, #    utc_start 1995-10-29 06:00:00 (Sun)
  62964543600, #      utc_end 1996-04-07 07:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62964543600, #    utc_start 1996-04-07 07:00:00 (Sun)
  62982079200, #      utc_end 1996-10-27 06:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62982079200, #    utc_start 1996-10-27 06:00:00 (Sun)
  62995993200, #      utc_end 1997-04-06 07:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62995993200, #    utc_start 1997-04-06 07:00:00 (Sun)
  63013528800, #      utc_end 1997-10-26 06:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63013528800, #    utc_start 1997-10-26 06:00:00 (Sun)
  63027442800, #      utc_end 1998-04-05 07:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63027442800, #    utc_start 1998-04-05 07:00:00 (Sun)
  63044978400, #      utc_end 1998-10-25 06:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63044978400, #    utc_start 1998-10-25 06:00:00 (Sun)
  63058892400, #      utc_end 1999-04-04 07:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63058892400, #    utc_start 1999-04-04 07:00:00 (Sun)
  63077032800, #      utc_end 1999-10-31 06:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63077032800, #    utc_start 1999-10-31 06:00:00 (Sun)
  63090342000, #      utc_end 2000-04-02 07:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63090342000, #    utc_start 2000-04-02 07:00:00 (Sun)
  63108482400, #      utc_end 2000-10-29 06:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63108482400, #    utc_start 2000-10-29 06:00:00 (Sun)
  63121791600, #      utc_end 2001-04-01 07:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63121791600, #    utc_start 2001-04-01 07:00:00 (Sun)
  63139932000, #      utc_end 2001-10-28 06:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63139932000, #    utc_start 2001-10-28 06:00:00 (Sun)
  63153846000, #      utc_end 2002-04-07 07:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63153846000, #    utc_start 2002-04-07 07:00:00 (Sun)
  63171381600, #      utc_end 2002-10-27 06:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63171381600, #    utc_start 2002-10-27 06:00:00 (Sun)
  63185295600, #      utc_end 2003-04-06 07:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63185295600, #    utc_start 2003-04-06 07:00:00 (Sun)
  63202831200, #      utc_end 2003-10-26 06:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63202831200, #    utc_start 2003-10-26 06:00:00 (Sun)
  63216745200, #      utc_end 2004-04-04 07:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63216745200, #    utc_start 2004-04-04 07:00:00 (Sun)
  63234885600, #      utc_end 2004-10-31 06:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63234885600, #    utc_start 2004-10-31 06:00:00 (Sun)
  63248194800, #      utc_end 2005-04-03 07:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63248194800, #    utc_start 2005-04-03 07:00:00 (Sun)
  63266335200, #      utc_end 2005-10-30 06:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63266335200, #    utc_start 2005-10-30 06:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297784800, #      utc_end 2006-10-29 06:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63297784800, #    utc_start 2006-10-29 06:00:00 (Sun)
  63309279600, #      utc_end 2007-03-11 07:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63309279600, #    utc_start 2007-03-11 07:00:00 (Sun)
  63329839200, #      utc_end 2007-11-04 06:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63329839200, #    utc_start 2007-11-04 06:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {107}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 720624,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 720624,
      'utc_rd_secs' => 0,
      'utc_year' => 1975
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 720624,
      'local_rd_secs' => 18000,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 720624,
      'utc_rd_secs' => 18000,
      'utc_year' => 1975
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_TORONTO

    $main::fatpacked{"DateTime/TimeZone/America/Vancouver.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_VANCOUVER';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Vancouver;
  $DateTime::TimeZone::America::Vancouver::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Vancouver::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59421802348, #      utc_end 1884-01-01 08:12:28 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59421772800, #    local_end 1884-01-01 00:00:00 (Tue)
  -29548,
  0,
  'LMT',
      ],
      [
  59421802348, #    utc_start 1884-01-01 08:12:28 (Tue)
  60503623200, #      utc_end 1918-04-14 10:00:00 (Sun)
  59421773548, #  local_start 1884-01-01 00:12:28 (Tue)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  60503623200, #    utc_start 1918-04-14 10:00:00 (Sun)
  60520554000, #      utc_end 1918-10-27 09:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  60520554000, #    utc_start 1918-10-27 09:00:00 (Sun)
  61255476000, #      utc_end 1942-02-09 10:00:00 (Mon)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -28800,
  0,
  'PST',
      ],
      [
  61255476000, #    utc_start 1942-02-09 10:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366262400, #    local_end 1945-08-14 16:00:00 (Tue)
  -25200,
  1,
  'PWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370298000, #      utc_end 1945-09-30 09:00:00 (Sun)
  61366262400, #  local_start 1945-08-14 16:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PPT',
      ],
      [
  61370298000, #    utc_start 1945-09-30 09:00:00 (Sun)
  61388445600, #      utc_end 1946-04-28 10:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61388416800, #    local_end 1946-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61388445600, #    utc_start 1946-04-28 10:00:00 (Sun)
  61402957200, #      utc_end 1946-10-13 09:00:00 (Sun)
  61388420400, #  local_start 1946-04-28 03:00:00 (Sun)
  61402932000, #    local_end 1946-10-13 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61402957200, #    utc_start 1946-10-13 09:00:00 (Sun)
  61419895200, #      utc_end 1947-04-27 10:00:00 (Sun)
  61402928400, #  local_start 1946-10-13 01:00:00 (Sun)
  61419866400, #    local_end 1947-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61419895200, #    utc_start 1947-04-27 10:00:00 (Sun)
  61433197200, #      utc_end 1947-09-28 09:00:00 (Sun)
  61419870000, #  local_start 1947-04-27 03:00:00 (Sun)
  61433172000, #    local_end 1947-09-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61433197200, #    utc_start 1947-09-28 09:00:00 (Sun)
  61451344800, #      utc_end 1948-04-25 10:00:00 (Sun)
  61433168400, #  local_start 1947-09-28 01:00:00 (Sun)
  61451316000, #    local_end 1948-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61451344800, #    utc_start 1948-04-25 10:00:00 (Sun)
  61464646800, #      utc_end 1948-09-26 09:00:00 (Sun)
  61451319600, #  local_start 1948-04-25 03:00:00 (Sun)
  61464621600, #    local_end 1948-09-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61464646800, #    utc_start 1948-09-26 09:00:00 (Sun)
  61482794400, #      utc_end 1949-04-24 10:00:00 (Sun)
  61464618000, #  local_start 1948-09-26 01:00:00 (Sun)
  61482765600, #    local_end 1949-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61482794400, #    utc_start 1949-04-24 10:00:00 (Sun)
  61496096400, #      utc_end 1949-09-25 09:00:00 (Sun)
  61482769200, #  local_start 1949-04-24 03:00:00 (Sun)
  61496071200, #    local_end 1949-09-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61496096400, #    utc_start 1949-09-25 09:00:00 (Sun)
  61514848800, #      utc_end 1950-04-30 10:00:00 (Sun)
  61496067600, #  local_start 1949-09-25 01:00:00 (Sun)
  61514820000, #    local_end 1950-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61514848800, #    utc_start 1950-04-30 10:00:00 (Sun)
  61527546000, #      utc_end 1950-09-24 09:00:00 (Sun)
  61514823600, #  local_start 1950-04-30 03:00:00 (Sun)
  61527520800, #    local_end 1950-09-24 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61527546000, #    utc_start 1950-09-24 09:00:00 (Sun)
  61546298400, #      utc_end 1951-04-29 10:00:00 (Sun)
  61527517200, #  local_start 1950-09-24 01:00:00 (Sun)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61546298400, #    utc_start 1951-04-29 10:00:00 (Sun)
  61559600400, #      utc_end 1951-09-30 09:00:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61559600400, #    utc_start 1951-09-30 09:00:00 (Sun)
  61577748000, #      utc_end 1952-04-27 10:00:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61577748000, #    utc_start 1952-04-27 10:00:00 (Sun)
  61591050000, #      utc_end 1952-09-28 09:00:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61591050000, #    utc_start 1952-09-28 09:00:00 (Sun)
  61609197600, #      utc_end 1953-04-26 10:00:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61609197600, #    utc_start 1953-04-26 10:00:00 (Sun)
  61622499600, #      utc_end 1953-09-27 09:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61622499600, #    utc_start 1953-09-27 09:00:00 (Sun)
  61640647200, #      utc_end 1954-04-25 10:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61640647200, #    utc_start 1954-04-25 10:00:00 (Sun)
  61653949200, #      utc_end 1954-09-26 09:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61653949200, #    utc_start 1954-09-26 09:00:00 (Sun)
  61672096800, #      utc_end 1955-04-24 10:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61672096800, #    utc_start 1955-04-24 10:00:00 (Sun)
  61685398800, #      utc_end 1955-09-25 09:00:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61685373600, #    local_end 1955-09-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61685398800, #    utc_start 1955-09-25 09:00:00 (Sun)
  61704151200, #      utc_end 1956-04-29 10:00:00 (Sun)
  61685370000, #  local_start 1955-09-25 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61704151200, #    utc_start 1956-04-29 10:00:00 (Sun)
  61717453200, #      utc_end 1956-09-30 09:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61717428000, #    local_end 1956-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61717453200, #    utc_start 1956-09-30 09:00:00 (Sun)
  61735600800, #      utc_end 1957-04-28 10:00:00 (Sun)
  61717424400, #  local_start 1956-09-30 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61735600800, #    utc_start 1957-04-28 10:00:00 (Sun)
  61748902800, #      utc_end 1957-09-29 09:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61748902800, #    utc_start 1957-09-29 09:00:00 (Sun)
  61767050400, #      utc_end 1958-04-27 10:00:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61767050400, #    utc_start 1958-04-27 10:00:00 (Sun)
  61780352400, #      utc_end 1958-09-28 09:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61780327200, #    local_end 1958-09-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61780352400, #    utc_start 1958-09-28 09:00:00 (Sun)
  61798500000, #      utc_end 1959-04-26 10:00:00 (Sun)
  61780323600, #  local_start 1958-09-28 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61798500000, #    utc_start 1959-04-26 10:00:00 (Sun)
  61811802000, #      utc_end 1959-09-27 09:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61811776800, #    local_end 1959-09-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61811802000, #    utc_start 1959-09-27 09:00:00 (Sun)
  61829949600, #      utc_end 1960-04-24 10:00:00 (Sun)
  61811773200, #  local_start 1959-09-27 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61829949600, #    utc_start 1960-04-24 10:00:00 (Sun)
  61843251600, #      utc_end 1960-09-25 09:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61843226400, #    local_end 1960-09-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61843251600, #    utc_start 1960-09-25 09:00:00 (Sun)
  61862004000, #      utc_end 1961-04-30 10:00:00 (Sun)
  61843222800, #  local_start 1960-09-25 01:00:00 (Sun)
  61861975200, #    local_end 1961-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61862004000, #    utc_start 1961-04-30 10:00:00 (Sun)
  61874701200, #      utc_end 1961-09-24 09:00:00 (Sun)
  61861978800, #  local_start 1961-04-30 03:00:00 (Sun)
  61874676000, #    local_end 1961-09-24 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61874701200, #    utc_start 1961-09-24 09:00:00 (Sun)
  61893453600, #      utc_end 1962-04-29 10:00:00 (Sun)
  61874672400, #  local_start 1961-09-24 01:00:00 (Sun)
  61893424800, #    local_end 1962-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61893453600, #    utc_start 1962-04-29 10:00:00 (Sun)
  61909174800, #      utc_end 1962-10-28 09:00:00 (Sun)
  61893428400, #  local_start 1962-04-29 03:00:00 (Sun)
  61909149600, #    local_end 1962-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61909174800, #    utc_start 1962-10-28 09:00:00 (Sun)
  61924903200, #      utc_end 1963-04-28 10:00:00 (Sun)
  61909146000, #  local_start 1962-10-28 01:00:00 (Sun)
  61924874400, #    local_end 1963-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61924903200, #    utc_start 1963-04-28 10:00:00 (Sun)
  61940624400, #      utc_end 1963-10-27 09:00:00 (Sun)
  61924878000, #  local_start 1963-04-28 03:00:00 (Sun)
  61940599200, #    local_end 1963-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61940624400, #    utc_start 1963-10-27 09:00:00 (Sun)
  61956352800, #      utc_end 1964-04-26 10:00:00 (Sun)
  61940595600, #  local_start 1963-10-27 01:00:00 (Sun)
  61956324000, #    local_end 1964-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61956352800, #    utc_start 1964-04-26 10:00:00 (Sun)
  61972074000, #      utc_end 1964-10-25 09:00:00 (Sun)
  61956327600, #  local_start 1964-04-26 03:00:00 (Sun)
  61972048800, #    local_end 1964-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  61972074000, #    utc_start 1964-10-25 09:00:00 (Sun)
  61987802400, #      utc_end 1965-04-25 10:00:00 (Sun)
  61972045200, #  local_start 1964-10-25 01:00:00 (Sun)
  61987773600, #    local_end 1965-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  61987802400, #    utc_start 1965-04-25 10:00:00 (Sun)
  62004128400, #      utc_end 1965-10-31 09:00:00 (Sun)
  61987777200, #  local_start 1965-04-25 03:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62004128400, #    utc_start 1965-10-31 09:00:00 (Sun)
  62019252000, #      utc_end 1966-04-24 10:00:00 (Sun)
  62004099600, #  local_start 1965-10-31 01:00:00 (Sun)
  62019223200, #    local_end 1966-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62019252000, #    utc_start 1966-04-24 10:00:00 (Sun)
  62035578000, #      utc_end 1966-10-30 09:00:00 (Sun)
  62019226800, #  local_start 1966-04-24 03:00:00 (Sun)
  62035552800, #    local_end 1966-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62035578000, #    utc_start 1966-10-30 09:00:00 (Sun)
  62051306400, #      utc_end 1967-04-30 10:00:00 (Sun)
  62035549200, #  local_start 1966-10-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62051306400, #    utc_start 1967-04-30 10:00:00 (Sun)
  62067027600, #      utc_end 1967-10-29 09:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62067027600, #    utc_start 1967-10-29 09:00:00 (Sun)
  62082756000, #      utc_end 1968-04-28 10:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62082756000, #    utc_start 1968-04-28 10:00:00 (Sun)
  62098477200, #      utc_end 1968-10-27 09:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62098477200, #    utc_start 1968-10-27 09:00:00 (Sun)
  62114205600, #      utc_end 1969-04-27 10:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62114205600, #    utc_start 1969-04-27 10:00:00 (Sun)
  62129926800, #      utc_end 1969-10-26 09:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62129926800, #    utc_start 1969-10-26 09:00:00 (Sun)
  62145655200, #      utc_end 1970-04-26 10:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62145655200, #    utc_start 1970-04-26 10:00:00 (Sun)
  62161376400, #      utc_end 1970-10-25 09:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62161376400, #    utc_start 1970-10-25 09:00:00 (Sun)
  62177104800, #      utc_end 1971-04-25 10:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62177104800, #    utc_start 1971-04-25 10:00:00 (Sun)
  62193430800, #      utc_end 1971-10-31 09:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62193430800, #    utc_start 1971-10-31 09:00:00 (Sun)
  62209159200, #      utc_end 1972-04-30 10:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62209159200, #    utc_start 1972-04-30 10:00:00 (Sun)
  62224880400, #      utc_end 1972-10-29 09:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62224880400, #    utc_start 1972-10-29 09:00:00 (Sun)
  62240608800, #      utc_end 1973-04-29 10:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62240608800, #    utc_start 1973-04-29 10:00:00 (Sun)
  62256330000, #      utc_end 1973-10-28 09:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62256330000, #    utc_start 1973-10-28 09:00:00 (Sun)
  62272058400, #      utc_end 1974-04-28 10:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62272029600, #    local_end 1974-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62272058400, #    utc_start 1974-04-28 10:00:00 (Sun)
  62287779600, #      utc_end 1974-10-27 09:00:00 (Sun)
  62272033200, #  local_start 1974-04-28 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62287779600, #    utc_start 1974-10-27 09:00:00 (Sun)
  62303508000, #      utc_end 1975-04-27 10:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62303479200, #    local_end 1975-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62303508000, #    utc_start 1975-04-27 10:00:00 (Sun)
  62319229200, #      utc_end 1975-10-26 09:00:00 (Sun)
  62303482800, #  local_start 1975-04-27 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62319229200, #    utc_start 1975-10-26 09:00:00 (Sun)
  62334957600, #      utc_end 1976-04-25 10:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62334957600, #    utc_start 1976-04-25 10:00:00 (Sun)
  62351283600, #      utc_end 1976-10-31 09:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62351283600, #    utc_start 1976-10-31 09:00:00 (Sun)
  62366407200, #      utc_end 1977-04-24 10:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62366407200, #    utc_start 1977-04-24 10:00:00 (Sun)
  62382733200, #      utc_end 1977-10-30 09:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62382733200, #    utc_start 1977-10-30 09:00:00 (Sun)
  62398461600, #      utc_end 1978-04-30 10:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62398461600, #    utc_start 1978-04-30 10:00:00 (Sun)
  62414182800, #      utc_end 1978-10-29 09:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62414182800, #    utc_start 1978-10-29 09:00:00 (Sun)
  62429911200, #      utc_end 1979-04-29 10:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62429911200, #    utc_start 1979-04-29 10:00:00 (Sun)
  62445632400, #      utc_end 1979-10-28 09:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62445632400, #    utc_start 1979-10-28 09:00:00 (Sun)
  62461360800, #      utc_end 1980-04-27 10:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62461360800, #    utc_start 1980-04-27 10:00:00 (Sun)
  62477082000, #      utc_end 1980-10-26 09:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62477082000, #    utc_start 1980-10-26 09:00:00 (Sun)
  62492810400, #      utc_end 1981-04-26 10:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62492810400, #    utc_start 1981-04-26 10:00:00 (Sun)
  62508531600, #      utc_end 1981-10-25 09:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62508531600, #    utc_start 1981-10-25 09:00:00 (Sun)
  62524260000, #      utc_end 1982-04-25 10:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62524260000, #    utc_start 1982-04-25 10:00:00 (Sun)
  62540586000, #      utc_end 1982-10-31 09:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62540586000, #    utc_start 1982-10-31 09:00:00 (Sun)
  62555709600, #      utc_end 1983-04-24 10:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62555709600, #    utc_start 1983-04-24 10:00:00 (Sun)
  62572035600, #      utc_end 1983-10-30 09:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62572035600, #    utc_start 1983-10-30 09:00:00 (Sun)
  62587764000, #      utc_end 1984-04-29 10:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62587764000, #    utc_start 1984-04-29 10:00:00 (Sun)
  62603485200, #      utc_end 1984-10-28 09:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62603485200, #    utc_start 1984-10-28 09:00:00 (Sun)
  62619213600, #      utc_end 1985-04-28 10:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62619213600, #    utc_start 1985-04-28 10:00:00 (Sun)
  62634934800, #      utc_end 1985-10-27 09:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62634934800, #    utc_start 1985-10-27 09:00:00 (Sun)
  62650663200, #      utc_end 1986-04-27 10:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62650663200, #    utc_start 1986-04-27 10:00:00 (Sun)
  62666384400, #      utc_end 1986-10-26 09:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62666384400, #    utc_start 1986-10-26 09:00:00 (Sun)
  62672169600, #      utc_end 1987-01-01 08:00:00 (Thu)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62672140800, #    local_end 1987-01-01 00:00:00 (Thu)
  -28800,
  0,
  'PST',
      ],
      [
  62672169600, #    utc_start 1987-01-01 08:00:00 (Thu)
  62680298400, #      utc_end 1987-04-05 10:00:00 (Sun)
  62672140800, #  local_start 1987-01-01 00:00:00 (Thu)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62680298400, #    utc_start 1987-04-05 10:00:00 (Sun)
  62697834000, #      utc_end 1987-10-25 09:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62697834000, #    utc_start 1987-10-25 09:00:00 (Sun)
  62711748000, #      utc_end 1988-04-03 10:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62711748000, #    utc_start 1988-04-03 10:00:00 (Sun)
  62729888400, #      utc_end 1988-10-30 09:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62729888400, #    utc_start 1988-10-30 09:00:00 (Sun)
  62743197600, #      utc_end 1989-04-02 10:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62743197600, #    utc_start 1989-04-02 10:00:00 (Sun)
  62761338000, #      utc_end 1989-10-29 09:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62761338000, #    utc_start 1989-10-29 09:00:00 (Sun)
  62774647200, #      utc_end 1990-04-01 10:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62774647200, #    utc_start 1990-04-01 10:00:00 (Sun)
  62792787600, #      utc_end 1990-10-28 09:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62792787600, #    utc_start 1990-10-28 09:00:00 (Sun)
  62806701600, #      utc_end 1991-04-07 10:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62806701600, #    utc_start 1991-04-07 10:00:00 (Sun)
  62824237200, #      utc_end 1991-10-27 09:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62824237200, #    utc_start 1991-10-27 09:00:00 (Sun)
  62838151200, #      utc_end 1992-04-05 10:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62838151200, #    utc_start 1992-04-05 10:00:00 (Sun)
  62855686800, #      utc_end 1992-10-25 09:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62855686800, #    utc_start 1992-10-25 09:00:00 (Sun)
  62869600800, #      utc_end 1993-04-04 10:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62869600800, #    utc_start 1993-04-04 10:00:00 (Sun)
  62887741200, #      utc_end 1993-10-31 09:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62887741200, #    utc_start 1993-10-31 09:00:00 (Sun)
  62901050400, #      utc_end 1994-04-03 10:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62901050400, #    utc_start 1994-04-03 10:00:00 (Sun)
  62919190800, #      utc_end 1994-10-30 09:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62919190800, #    utc_start 1994-10-30 09:00:00 (Sun)
  62932500000, #      utc_end 1995-04-02 10:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62932500000, #    utc_start 1995-04-02 10:00:00 (Sun)
  62950640400, #      utc_end 1995-10-29 09:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62950640400, #    utc_start 1995-10-29 09:00:00 (Sun)
  62964554400, #      utc_end 1996-04-07 10:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62964554400, #    utc_start 1996-04-07 10:00:00 (Sun)
  62982090000, #      utc_end 1996-10-27 09:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62982090000, #    utc_start 1996-10-27 09:00:00 (Sun)
  62996004000, #      utc_end 1997-04-06 10:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62996004000, #    utc_start 1997-04-06 10:00:00 (Sun)
  63013539600, #      utc_end 1997-10-26 09:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63013539600, #    utc_start 1997-10-26 09:00:00 (Sun)
  63027453600, #      utc_end 1998-04-05 10:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63027453600, #    utc_start 1998-04-05 10:00:00 (Sun)
  63044989200, #      utc_end 1998-10-25 09:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63044989200, #    utc_start 1998-10-25 09:00:00 (Sun)
  63058903200, #      utc_end 1999-04-04 10:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63058903200, #    utc_start 1999-04-04 10:00:00 (Sun)
  63077043600, #      utc_end 1999-10-31 09:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63077043600, #    utc_start 1999-10-31 09:00:00 (Sun)
  63090352800, #      utc_end 2000-04-02 10:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63090352800, #    utc_start 2000-04-02 10:00:00 (Sun)
  63108493200, #      utc_end 2000-10-29 09:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63108493200, #    utc_start 2000-10-29 09:00:00 (Sun)
  63121802400, #      utc_end 2001-04-01 10:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63121802400, #    utc_start 2001-04-01 10:00:00 (Sun)
  63139942800, #      utc_end 2001-10-28 09:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63139942800, #    utc_start 2001-10-28 09:00:00 (Sun)
  63153856800, #      utc_end 2002-04-07 10:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63153856800, #    utc_start 2002-04-07 10:00:00 (Sun)
  63171392400, #      utc_end 2002-10-27 09:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63171392400, #    utc_start 2002-10-27 09:00:00 (Sun)
  63185306400, #      utc_end 2003-04-06 10:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63185306400, #    utc_start 2003-04-06 10:00:00 (Sun)
  63202842000, #      utc_end 2003-10-26 09:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63202842000, #    utc_start 2003-10-26 09:00:00 (Sun)
  63216756000, #      utc_end 2004-04-04 10:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63216756000, #    utc_start 2004-04-04 10:00:00 (Sun)
  63234896400, #      utc_end 2004-10-31 09:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63234896400, #    utc_start 2004-10-31 09:00:00 (Sun)
  63248205600, #      utc_end 2005-04-03 10:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63248205600, #    utc_start 2005-04-03 10:00:00 (Sun)
  63266346000, #      utc_end 2005-10-30 09:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63266346000, #    utc_start 2005-10-30 09:00:00 (Sun)
  63279655200, #      utc_end 2006-04-02 10:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63279655200, #    utc_start 2006-04-02 10:00:00 (Sun)
  63297795600, #      utc_end 2006-10-29 09:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63297795600, #    utc_start 2006-10-29 09:00:00 (Sun)
  63309290400, #      utc_end 2007-03-11 10:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63309290400, #    utc_start 2007-03-11 10:00:00 (Sun)
  63329850000, #      utc_end 2007-11-04 09:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63329850000, #    utc_start 2007-11-04 09:00:00 (Sun)
  63340740000, #      utc_end 2008-03-09 10:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63340740000, #    utc_start 2008-03-09 10:00:00 (Sun)
  63361299600, #      utc_end 2008-11-02 09:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63361299600, #    utc_start 2008-11-02 09:00:00 (Sun)
  63372189600, #      utc_end 2009-03-08 10:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63372189600, #    utc_start 2009-03-08 10:00:00 (Sun)
  63392749200, #      utc_end 2009-11-01 09:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63392749200, #    utc_start 2009-11-01 09:00:00 (Sun)
  63404244000, #      utc_end 2010-03-14 10:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63404244000, #    utc_start 2010-03-14 10:00:00 (Sun)
  63424803600, #      utc_end 2010-11-07 09:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63424803600, #    utc_start 2010-11-07 09:00:00 (Sun)
  63435693600, #      utc_end 2011-03-13 10:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63435693600, #    utc_start 2011-03-13 10:00:00 (Sun)
  63456253200, #      utc_end 2011-11-06 09:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63456253200, #    utc_start 2011-11-06 09:00:00 (Sun)
  63467143200, #      utc_end 2012-03-11 10:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63467143200, #    utc_start 2012-03-11 10:00:00 (Sun)
  63487702800, #      utc_end 2012-11-04 09:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63487702800, #    utc_start 2012-11-04 09:00:00 (Sun)
  63498592800, #      utc_end 2013-03-10 10:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63498592800, #    utc_start 2013-03-10 10:00:00 (Sun)
  63519152400, #      utc_end 2013-11-03 09:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63519152400, #    utc_start 2013-11-03 09:00:00 (Sun)
  63530042400, #      utc_end 2014-03-09 10:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63530042400, #    utc_start 2014-03-09 10:00:00 (Sun)
  63550602000, #      utc_end 2014-11-02 09:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63550602000, #    utc_start 2014-11-02 09:00:00 (Sun)
  63561492000, #      utc_end 2015-03-08 10:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63561492000, #    utc_start 2015-03-08 10:00:00 (Sun)
  63582051600, #      utc_end 2015-11-01 09:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63582051600, #    utc_start 2015-11-01 09:00:00 (Sun)
  63593546400, #      utc_end 2016-03-13 10:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63593546400, #    utc_start 2016-03-13 10:00:00 (Sun)
  63614106000, #      utc_end 2016-11-06 09:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63614106000, #    utc_start 2016-11-06 09:00:00 (Sun)
  63624996000, #      utc_end 2017-03-12 10:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63624996000, #    utc_start 2017-03-12 10:00:00 (Sun)
  63645555600, #      utc_end 2017-11-05 09:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63645555600, #    utc_start 2017-11-05 09:00:00 (Sun)
  63656445600, #      utc_end 2018-03-11 10:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63656445600, #    utc_start 2018-03-11 10:00:00 (Sun)
  63677005200, #      utc_end 2018-11-04 09:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63677005200, #    utc_start 2018-11-04 09:00:00 (Sun)
  63687895200, #      utc_end 2019-03-10 10:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63687895200, #    utc_start 2019-03-10 10:00:00 (Sun)
  63708454800, #      utc_end 2019-11-03 09:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63708454800, #    utc_start 2019-11-03 09:00:00 (Sun)
  63719344800, #      utc_end 2020-03-08 10:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63719344800, #    utc_start 2020-03-08 10:00:00 (Sun)
  63739904400, #      utc_end 2020-11-01 09:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63739904400, #    utc_start 2020-11-01 09:00:00 (Sun)
  63751399200, #      utc_end 2021-03-14 10:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63751399200, #    utc_start 2021-03-14 10:00:00 (Sun)
  63771958800, #      utc_end 2021-11-07 09:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63771958800, #    utc_start 2021-11-07 09:00:00 (Sun)
  63782848800, #      utc_end 2022-03-13 10:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63782848800, #    utc_start 2022-03-13 10:00:00 (Sun)
  63803408400, #      utc_end 2022-11-06 09:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63803408400, #    utc_start 2022-11-06 09:00:00 (Sun)
  63814298400, #      utc_end 2023-03-12 10:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63814298400, #    utc_start 2023-03-12 10:00:00 (Sun)
  63834858000, #      utc_end 2023-11-05 09:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63834858000, #    utc_start 2023-11-05 09:00:00 (Sun)
  63845748000, #      utc_end 2024-03-10 10:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63845748000, #    utc_start 2024-03-10 10:00:00 (Sun)
  63866307600, #      utc_end 2024-11-03 09:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63866307600, #    utc_start 2024-11-03 09:00:00 (Sun)
  63877197600, #      utc_end 2025-03-09 10:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63877197600, #    utc_start 2025-03-09 10:00:00 (Sun)
  63897757200, #      utc_end 2025-11-02 09:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63897757200, #    utc_start 2025-11-02 09:00:00 (Sun)
  63908647200, #      utc_end 2026-03-08 10:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63908647200, #    utc_start 2026-03-08 10:00:00 (Sun)
  63929206800, #      utc_end 2026-11-01 09:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63929206800, #    utc_start 2026-11-01 09:00:00 (Sun)
  63940701600, #      utc_end 2027-03-14 10:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63940701600, #    utc_start 2027-03-14 10:00:00 (Sun)
  63961261200, #      utc_end 2027-11-07 09:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {85}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -28800 }
  
  my $last_observance = bless( {
    'format' => 'P%sT',
    'gmtoff' => '-8:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 725372,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 725372,
      'utc_rd_secs' => 0,
      'utc_year' => 1988
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -28800,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 725372,
      'local_rd_secs' => 28800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 725372,
      'utc_rd_secs' => 28800,
      'utc_year' => 1988
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_VANCOUVER

    $main::fatpacked{"DateTime/TimeZone/America/Whitehorse.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_WHITEHORSE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Whitehorse;
  $DateTime::TimeZone::America::Whitehorse::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Whitehorse::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59946685212, #      utc_end 1900-08-20 09:00:12 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59946652800, #    local_end 1900-08-20 00:00:00 (Mon)
  -32412,
  0,
  'LMT',
      ],
      [
  59946685212, #    utc_start 1900-08-20 09:00:12 (Mon)
  60503626800, #      utc_end 1918-04-14 11:00:00 (Sun)
  59946652812, #  local_start 1900-08-20 00:00:12 (Mon)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  60503626800, #    utc_start 1918-04-14 11:00:00 (Sun)
  60520557600, #      utc_end 1918-10-27 10:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  60520557600, #    utc_start 1918-10-27 10:00:00 (Sun)
  60538705200, #      utc_end 1919-05-25 11:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60538672800, #    local_end 1919-05-25 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  60538705200, #    utc_start 1919-05-25 11:00:00 (Sun)
  60552518400, #      utc_end 1919-11-01 08:00:00 (Sat)
  60538676400, #  local_start 1919-05-25 03:00:00 (Sun)
  60552489600, #    local_end 1919-11-01 00:00:00 (Sat)
  -28800,
  1,
  'YDT',
      ],
      [
  60552518400, #    utc_start 1919-11-01 08:00:00 (Sat)
  61255479600, #      utc_end 1942-02-09 11:00:00 (Mon)
  60552486000, #  local_start 1919-10-31 23:00:00 (Fri)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -32400,
  0,
  'YST',
      ],
      [
  61255479600, #    utc_start 1942-02-09 11:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366258800, #    local_end 1945-08-14 15:00:00 (Tue)
  -28800,
  1,
  'YWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370301600, #      utc_end 1945-09-30 10:00:00 (Sun)
  61366258800, #  local_start 1945-08-14 15:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -28800,
  1,
  'YPT',
      ],
      [
  61370301600, #    utc_start 1945-09-30 10:00:00 (Sun)
  61987798800, #      utc_end 1965-04-25 09:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61987766400, #    local_end 1965-04-25 00:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  61987798800, #    utc_start 1965-04-25 09:00:00 (Sun)
  62004128400, #      utc_end 1965-10-31 09:00:00 (Sun)
  61987773600, #  local_start 1965-04-25 02:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -25200,
  1,
  'YDDT',
      ],
      [
  62004128400, #    utc_start 1965-10-31 09:00:00 (Sun)
  62053722000, #      utc_end 1967-05-28 09:00:00 (Sun)
  62004096000, #  local_start 1965-10-31 00:00:00 (Sun)
  62053689600, #    local_end 1967-05-28 00:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62053722000, #    utc_start 1967-05-28 09:00:00 (Sun)
  62451244800, #      utc_end 1980-01-01 08:00:00 (Tue)
  62053693200, #  local_start 1967-05-28 01:00:00 (Sun)
  62451216000, #    local_end 1980-01-01 00:00:00 (Tue)
  -28800,
  0,
  'PST',
      ],
      [
  62451244800, #    utc_start 1980-01-01 08:00:00 (Tue)
  62461360800, #      utc_end 1980-04-27 10:00:00 (Sun)
  62451216000, #  local_start 1980-01-01 00:00:00 (Tue)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62461360800, #    utc_start 1980-04-27 10:00:00 (Sun)
  62477082000, #      utc_end 1980-10-26 09:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62477082000, #    utc_start 1980-10-26 09:00:00 (Sun)
  62492810400, #      utc_end 1981-04-26 10:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62492810400, #    utc_start 1981-04-26 10:00:00 (Sun)
  62508531600, #      utc_end 1981-10-25 09:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62508531600, #    utc_start 1981-10-25 09:00:00 (Sun)
  62524260000, #      utc_end 1982-04-25 10:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62524260000, #    utc_start 1982-04-25 10:00:00 (Sun)
  62540586000, #      utc_end 1982-10-31 09:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62540586000, #    utc_start 1982-10-31 09:00:00 (Sun)
  62555709600, #      utc_end 1983-04-24 10:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62555709600, #    utc_start 1983-04-24 10:00:00 (Sun)
  62572035600, #      utc_end 1983-10-30 09:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62572035600, #    utc_start 1983-10-30 09:00:00 (Sun)
  62587764000, #      utc_end 1984-04-29 10:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62587764000, #    utc_start 1984-04-29 10:00:00 (Sun)
  62603485200, #      utc_end 1984-10-28 09:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62603485200, #    utc_start 1984-10-28 09:00:00 (Sun)
  62619213600, #      utc_end 1985-04-28 10:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62619213600, #    utc_start 1985-04-28 10:00:00 (Sun)
  62634934800, #      utc_end 1985-10-27 09:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62634934800, #    utc_start 1985-10-27 09:00:00 (Sun)
  62650663200, #      utc_end 1986-04-27 10:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62650663200, #    utc_start 1986-04-27 10:00:00 (Sun)
  62666384400, #      utc_end 1986-10-26 09:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62666384400, #    utc_start 1986-10-26 09:00:00 (Sun)
  62680298400, #      utc_end 1987-04-05 10:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62680298400, #    utc_start 1987-04-05 10:00:00 (Sun)
  62697834000, #      utc_end 1987-10-25 09:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62697834000, #    utc_start 1987-10-25 09:00:00 (Sun)
  62711748000, #      utc_end 1988-04-03 10:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62711748000, #    utc_start 1988-04-03 10:00:00 (Sun)
  62729888400, #      utc_end 1988-10-30 09:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62729888400, #    utc_start 1988-10-30 09:00:00 (Sun)
  62743197600, #      utc_end 1989-04-02 10:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62743197600, #    utc_start 1989-04-02 10:00:00 (Sun)
  62761338000, #      utc_end 1989-10-29 09:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62761338000, #    utc_start 1989-10-29 09:00:00 (Sun)
  62774647200, #      utc_end 1990-04-01 10:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62774647200, #    utc_start 1990-04-01 10:00:00 (Sun)
  62792787600, #      utc_end 1990-10-28 09:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62792787600, #    utc_start 1990-10-28 09:00:00 (Sun)
  62806701600, #      utc_end 1991-04-07 10:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62806701600, #    utc_start 1991-04-07 10:00:00 (Sun)
  62824237200, #      utc_end 1991-10-27 09:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62824237200, #    utc_start 1991-10-27 09:00:00 (Sun)
  62838151200, #      utc_end 1992-04-05 10:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62838151200, #    utc_start 1992-04-05 10:00:00 (Sun)
  62855686800, #      utc_end 1992-10-25 09:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62855686800, #    utc_start 1992-10-25 09:00:00 (Sun)
  62869600800, #      utc_end 1993-04-04 10:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62869600800, #    utc_start 1993-04-04 10:00:00 (Sun)
  62887741200, #      utc_end 1993-10-31 09:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62887741200, #    utc_start 1993-10-31 09:00:00 (Sun)
  62901050400, #      utc_end 1994-04-03 10:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62901050400, #    utc_start 1994-04-03 10:00:00 (Sun)
  62919190800, #      utc_end 1994-10-30 09:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62919190800, #    utc_start 1994-10-30 09:00:00 (Sun)
  62932500000, #      utc_end 1995-04-02 10:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62932500000, #    utc_start 1995-04-02 10:00:00 (Sun)
  62950640400, #      utc_end 1995-10-29 09:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62950640400, #    utc_start 1995-10-29 09:00:00 (Sun)
  62964554400, #      utc_end 1996-04-07 10:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62964554400, #    utc_start 1996-04-07 10:00:00 (Sun)
  62982090000, #      utc_end 1996-10-27 09:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62982090000, #    utc_start 1996-10-27 09:00:00 (Sun)
  62996004000, #      utc_end 1997-04-06 10:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62996004000, #    utc_start 1997-04-06 10:00:00 (Sun)
  63013539600, #      utc_end 1997-10-26 09:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63013539600, #    utc_start 1997-10-26 09:00:00 (Sun)
  63027453600, #      utc_end 1998-04-05 10:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63027453600, #    utc_start 1998-04-05 10:00:00 (Sun)
  63044989200, #      utc_end 1998-10-25 09:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63044989200, #    utc_start 1998-10-25 09:00:00 (Sun)
  63058903200, #      utc_end 1999-04-04 10:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63058903200, #    utc_start 1999-04-04 10:00:00 (Sun)
  63077043600, #      utc_end 1999-10-31 09:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63077043600, #    utc_start 1999-10-31 09:00:00 (Sun)
  63090352800, #      utc_end 2000-04-02 10:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63090352800, #    utc_start 2000-04-02 10:00:00 (Sun)
  63108493200, #      utc_end 2000-10-29 09:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63108493200, #    utc_start 2000-10-29 09:00:00 (Sun)
  63121802400, #      utc_end 2001-04-01 10:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63121802400, #    utc_start 2001-04-01 10:00:00 (Sun)
  63139942800, #      utc_end 2001-10-28 09:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63139942800, #    utc_start 2001-10-28 09:00:00 (Sun)
  63153856800, #      utc_end 2002-04-07 10:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63153856800, #    utc_start 2002-04-07 10:00:00 (Sun)
  63171392400, #      utc_end 2002-10-27 09:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63171392400, #    utc_start 2002-10-27 09:00:00 (Sun)
  63185306400, #      utc_end 2003-04-06 10:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63185306400, #    utc_start 2003-04-06 10:00:00 (Sun)
  63202842000, #      utc_end 2003-10-26 09:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63202842000, #    utc_start 2003-10-26 09:00:00 (Sun)
  63216756000, #      utc_end 2004-04-04 10:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63216756000, #    utc_start 2004-04-04 10:00:00 (Sun)
  63234896400, #      utc_end 2004-10-31 09:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63234896400, #    utc_start 2004-10-31 09:00:00 (Sun)
  63248205600, #      utc_end 2005-04-03 10:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63248205600, #    utc_start 2005-04-03 10:00:00 (Sun)
  63266346000, #      utc_end 2005-10-30 09:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63266346000, #    utc_start 2005-10-30 09:00:00 (Sun)
  63279655200, #      utc_end 2006-04-02 10:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63279655200, #    utc_start 2006-04-02 10:00:00 (Sun)
  63297795600, #      utc_end 2006-10-29 09:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63297795600, #    utc_start 2006-10-29 09:00:00 (Sun)
  63309290400, #      utc_end 2007-03-11 10:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63309290400, #    utc_start 2007-03-11 10:00:00 (Sun)
  63329850000, #      utc_end 2007-11-04 09:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63329850000, #    utc_start 2007-11-04 09:00:00 (Sun)
  63340740000, #      utc_end 2008-03-09 10:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63340740000, #    utc_start 2008-03-09 10:00:00 (Sun)
  63361299600, #      utc_end 2008-11-02 09:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63361299600, #    utc_start 2008-11-02 09:00:00 (Sun)
  63372189600, #      utc_end 2009-03-08 10:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63372189600, #    utc_start 2009-03-08 10:00:00 (Sun)
  63392749200, #      utc_end 2009-11-01 09:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63392749200, #    utc_start 2009-11-01 09:00:00 (Sun)
  63404244000, #      utc_end 2010-03-14 10:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63404244000, #    utc_start 2010-03-14 10:00:00 (Sun)
  63424803600, #      utc_end 2010-11-07 09:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63424803600, #    utc_start 2010-11-07 09:00:00 (Sun)
  63435693600, #      utc_end 2011-03-13 10:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63435693600, #    utc_start 2011-03-13 10:00:00 (Sun)
  63456253200, #      utc_end 2011-11-06 09:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63456253200, #    utc_start 2011-11-06 09:00:00 (Sun)
  63467143200, #      utc_end 2012-03-11 10:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63467143200, #    utc_start 2012-03-11 10:00:00 (Sun)
  63487702800, #      utc_end 2012-11-04 09:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63487702800, #    utc_start 2012-11-04 09:00:00 (Sun)
  63498592800, #      utc_end 2013-03-10 10:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63498592800, #    utc_start 2013-03-10 10:00:00 (Sun)
  63519152400, #      utc_end 2013-11-03 09:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63519152400, #    utc_start 2013-11-03 09:00:00 (Sun)
  63530042400, #      utc_end 2014-03-09 10:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63530042400, #    utc_start 2014-03-09 10:00:00 (Sun)
  63550602000, #      utc_end 2014-11-02 09:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63550602000, #    utc_start 2014-11-02 09:00:00 (Sun)
  63561492000, #      utc_end 2015-03-08 10:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63561492000, #    utc_start 2015-03-08 10:00:00 (Sun)
  63582051600, #      utc_end 2015-11-01 09:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63582051600, #    utc_start 2015-11-01 09:00:00 (Sun)
  63593546400, #      utc_end 2016-03-13 10:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63593546400, #    utc_start 2016-03-13 10:00:00 (Sun)
  63614106000, #      utc_end 2016-11-06 09:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63614106000, #    utc_start 2016-11-06 09:00:00 (Sun)
  63624996000, #      utc_end 2017-03-12 10:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63624996000, #    utc_start 2017-03-12 10:00:00 (Sun)
  63645555600, #      utc_end 2017-11-05 09:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63645555600, #    utc_start 2017-11-05 09:00:00 (Sun)
  63656445600, #      utc_end 2018-03-11 10:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63656445600, #    utc_start 2018-03-11 10:00:00 (Sun)
  63677005200, #      utc_end 2018-11-04 09:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63677005200, #    utc_start 2018-11-04 09:00:00 (Sun)
  63687895200, #      utc_end 2019-03-10 10:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63687895200, #    utc_start 2019-03-10 10:00:00 (Sun)
  63708454800, #      utc_end 2019-11-03 09:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63708454800, #    utc_start 2019-11-03 09:00:00 (Sun)
  63719344800, #      utc_end 2020-03-08 10:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63719344800, #    utc_start 2020-03-08 10:00:00 (Sun)
  63739904400, #      utc_end 2020-11-01 09:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63739904400, #    utc_start 2020-11-01 09:00:00 (Sun)
  63751399200, #      utc_end 2021-03-14 10:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63751399200, #    utc_start 2021-03-14 10:00:00 (Sun)
  63771958800, #      utc_end 2021-11-07 09:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63771958800, #    utc_start 2021-11-07 09:00:00 (Sun)
  63782848800, #      utc_end 2022-03-13 10:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63782848800, #    utc_start 2022-03-13 10:00:00 (Sun)
  63803408400, #      utc_end 2022-11-06 09:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63803408400, #    utc_start 2022-11-06 09:00:00 (Sun)
  63814298400, #      utc_end 2023-03-12 10:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63814298400, #    utc_start 2023-03-12 10:00:00 (Sun)
  63834858000, #      utc_end 2023-11-05 09:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63834858000, #    utc_start 2023-11-05 09:00:00 (Sun)
  63845748000, #      utc_end 2024-03-10 10:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63845748000, #    utc_start 2024-03-10 10:00:00 (Sun)
  63866307600, #      utc_end 2024-11-03 09:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63866307600, #    utc_start 2024-11-03 09:00:00 (Sun)
  63877197600, #      utc_end 2025-03-09 10:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63877197600, #    utc_start 2025-03-09 10:00:00 (Sun)
  63897757200, #      utc_end 2025-11-02 09:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63897757200, #    utc_start 2025-11-02 09:00:00 (Sun)
  63908647200, #      utc_end 2026-03-08 10:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63908647200, #    utc_start 2026-03-08 10:00:00 (Sun)
  63929206800, #      utc_end 2026-11-01 09:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63929206800, #    utc_start 2026-11-01 09:00:00 (Sun)
  63940701600, #      utc_end 2027-03-14 10:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63940701600, #    utc_start 2027-03-14 10:00:00 (Sun)
  63961261200, #      utc_end 2027-11-07 09:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {53}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -28800 }
  
  my $last_observance = bless( {
    'format' => 'P%sT',
    'gmtoff' => '-8:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722815,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722815,
      'utc_rd_secs' => 0,
      'utc_year' => 1981
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -28800,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722815,
      'local_rd_secs' => 28800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722815,
      'utc_rd_secs' => 28800,
      'utc_year' => 1981
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_WHITEHORSE

    $main::fatpacked{"DateTime/TimeZone/America/Winnipeg.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_WINNIPEG';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Winnipeg;
  $DateTime::TimeZone::America::Winnipeg::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Winnipeg::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59533424916, #      utc_end 1887-07-16 06:28:36 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59533401600, #    local_end 1887-07-16 00:00:00 (Sat)
  -23316,
  0,
  'LMT',
      ],
      [
  59533424916, #    utc_start 1887-07-16 06:28:36 (Sat)
  60441314400, #      utc_end 1916-04-23 06:00:00 (Sun)
  59533403316, #  local_start 1887-07-16 00:28:36 (Sat)
  60441292800, #    local_end 1916-04-23 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60441314400, #    utc_start 1916-04-23 06:00:00 (Sun)
  60454011600, #      utc_end 1916-09-17 05:00:00 (Sun)
  60441296400, #  local_start 1916-04-23 01:00:00 (Sun)
  60453993600, #    local_end 1916-09-17 00:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60454011600, #    utc_start 1916-09-17 05:00:00 (Sun)
  60503616000, #      utc_end 1918-04-14 08:00:00 (Sun)
  60453990000, #  local_start 1916-09-16 23:00:00 (Sat)
  60503594400, #    local_end 1918-04-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60503616000, #    utc_start 1918-04-14 08:00:00 (Sun)
  60520546800, #      utc_end 1918-10-27 07:00:00 (Sun)
  60503598000, #  local_start 1918-04-14 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60520546800, #    utc_start 1918-10-27 07:00:00 (Sun)
  61105996800, #      utc_end 1937-05-16 08:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  61105975200, #    local_end 1937-05-16 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61105996800, #    utc_start 1937-05-16 08:00:00 (Sun)
  61117484400, #      utc_end 1937-09-26 07:00:00 (Sun)
  61105978800, #  local_start 1937-05-16 03:00:00 (Sun)
  61117466400, #    local_end 1937-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61117484400, #    utc_start 1937-09-26 07:00:00 (Sun)
  61255468800, #      utc_end 1942-02-09 08:00:00 (Mon)
  61117462800, #  local_start 1937-09-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61255468800, #    utc_start 1942-02-09 08:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366269600, #    local_end 1945-08-14 18:00:00 (Tue)
  -18000,
  1,
  'CWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370290800, #      utc_end 1945-09-30 07:00:00 (Sun)
  61366269600, #  local_start 1945-08-14 18:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CPT',
      ],
      [
  61370290800, #    utc_start 1945-09-30 07:00:00 (Sun)
  61389648000, #      utc_end 1946-05-12 08:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61389626400, #    local_end 1946-05-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61389648000, #    utc_start 1946-05-12 08:00:00 (Sun)
  61402950000, #      utc_end 1946-10-13 07:00:00 (Sun)
  61389630000, #  local_start 1946-05-12 03:00:00 (Sun)
  61402932000, #    local_end 1946-10-13 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61402950000, #    utc_start 1946-10-13 07:00:00 (Sun)
  61419888000, #      utc_end 1947-04-27 08:00:00 (Sun)
  61402928400, #  local_start 1946-10-13 01:00:00 (Sun)
  61419866400, #    local_end 1947-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61419888000, #    utc_start 1947-04-27 08:00:00 (Sun)
  61433190000, #      utc_end 1947-09-28 07:00:00 (Sun)
  61419870000, #  local_start 1947-04-27 03:00:00 (Sun)
  61433172000, #    local_end 1947-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61433190000, #    utc_start 1947-09-28 07:00:00 (Sun)
  61451337600, #      utc_end 1948-04-25 08:00:00 (Sun)
  61433168400, #  local_start 1947-09-28 01:00:00 (Sun)
  61451316000, #    local_end 1948-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61451337600, #    utc_start 1948-04-25 08:00:00 (Sun)
  61464639600, #      utc_end 1948-09-26 07:00:00 (Sun)
  61451319600, #  local_start 1948-04-25 03:00:00 (Sun)
  61464621600, #    local_end 1948-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61464639600, #    utc_start 1948-09-26 07:00:00 (Sun)
  61482787200, #      utc_end 1949-04-24 08:00:00 (Sun)
  61464618000, #  local_start 1948-09-26 01:00:00 (Sun)
  61482765600, #    local_end 1949-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61482787200, #    utc_start 1949-04-24 08:00:00 (Sun)
  61496089200, #      utc_end 1949-09-25 07:00:00 (Sun)
  61482769200, #  local_start 1949-04-24 03:00:00 (Sun)
  61496071200, #    local_end 1949-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61496089200, #    utc_start 1949-09-25 07:00:00 (Sun)
  61514928000, #      utc_end 1950-05-01 08:00:00 (Mon)
  61496067600, #  local_start 1949-09-25 01:00:00 (Sun)
  61514906400, #    local_end 1950-05-01 02:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61514928000, #    utc_start 1950-05-01 08:00:00 (Mon)
  61528057200, #      utc_end 1950-09-30 07:00:00 (Sat)
  61514910000, #  local_start 1950-05-01 03:00:00 (Mon)
  61528039200, #    local_end 1950-09-30 02:00:00 (Sat)
  -18000,
  1,
  'CDT',
      ],
      [
  61528057200, #    utc_start 1950-09-30 07:00:00 (Sat)
  61546291200, #      utc_end 1951-04-29 08:00:00 (Sun)
  61528035600, #  local_start 1950-09-30 01:00:00 (Sat)
  61546269600, #    local_end 1951-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61546291200, #    utc_start 1951-04-29 08:00:00 (Sun)
  61559593200, #      utc_end 1951-09-30 07:00:00 (Sun)
  61546273200, #  local_start 1951-04-29 03:00:00 (Sun)
  61559575200, #    local_end 1951-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61559593200, #    utc_start 1951-09-30 07:00:00 (Sun)
  61577740800, #      utc_end 1952-04-27 08:00:00 (Sun)
  61559571600, #  local_start 1951-09-30 01:00:00 (Sun)
  61577719200, #    local_end 1952-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61577740800, #    utc_start 1952-04-27 08:00:00 (Sun)
  61591042800, #      utc_end 1952-09-28 07:00:00 (Sun)
  61577722800, #  local_start 1952-04-27 03:00:00 (Sun)
  61591024800, #    local_end 1952-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61591042800, #    utc_start 1952-09-28 07:00:00 (Sun)
  61609190400, #      utc_end 1953-04-26 08:00:00 (Sun)
  61591021200, #  local_start 1952-09-28 01:00:00 (Sun)
  61609168800, #    local_end 1953-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61609190400, #    utc_start 1953-04-26 08:00:00 (Sun)
  61622492400, #      utc_end 1953-09-27 07:00:00 (Sun)
  61609172400, #  local_start 1953-04-26 03:00:00 (Sun)
  61622474400, #    local_end 1953-09-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61622492400, #    utc_start 1953-09-27 07:00:00 (Sun)
  61640640000, #      utc_end 1954-04-25 08:00:00 (Sun)
  61622470800, #  local_start 1953-09-27 01:00:00 (Sun)
  61640618400, #    local_end 1954-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61640640000, #    utc_start 1954-04-25 08:00:00 (Sun)
  61653942000, #      utc_end 1954-09-26 07:00:00 (Sun)
  61640622000, #  local_start 1954-04-25 03:00:00 (Sun)
  61653924000, #    local_end 1954-09-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61653942000, #    utc_start 1954-09-26 07:00:00 (Sun)
  61672089600, #      utc_end 1955-04-24 08:00:00 (Sun)
  61653920400, #  local_start 1954-09-26 01:00:00 (Sun)
  61672068000, #    local_end 1955-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61672089600, #    utc_start 1955-04-24 08:00:00 (Sun)
  61685391600, #      utc_end 1955-09-25 07:00:00 (Sun)
  61672071600, #  local_start 1955-04-24 03:00:00 (Sun)
  61685373600, #    local_end 1955-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61685391600, #    utc_start 1955-09-25 07:00:00 (Sun)
  61704144000, #      utc_end 1956-04-29 08:00:00 (Sun)
  61685370000, #  local_start 1955-09-25 01:00:00 (Sun)
  61704122400, #    local_end 1956-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61704144000, #    utc_start 1956-04-29 08:00:00 (Sun)
  61717446000, #      utc_end 1956-09-30 07:00:00 (Sun)
  61704126000, #  local_start 1956-04-29 03:00:00 (Sun)
  61717428000, #    local_end 1956-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61717446000, #    utc_start 1956-09-30 07:00:00 (Sun)
  61735593600, #      utc_end 1957-04-28 08:00:00 (Sun)
  61717424400, #  local_start 1956-09-30 01:00:00 (Sun)
  61735572000, #    local_end 1957-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61735593600, #    utc_start 1957-04-28 08:00:00 (Sun)
  61748895600, #      utc_end 1957-09-29 07:00:00 (Sun)
  61735575600, #  local_start 1957-04-28 03:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61748895600, #    utc_start 1957-09-29 07:00:00 (Sun)
  61767043200, #      utc_end 1958-04-27 08:00:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61767021600, #    local_end 1958-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61767043200, #    utc_start 1958-04-27 08:00:00 (Sun)
  61780345200, #      utc_end 1958-09-28 07:00:00 (Sun)
  61767025200, #  local_start 1958-04-27 03:00:00 (Sun)
  61780327200, #    local_end 1958-09-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61780345200, #    utc_start 1958-09-28 07:00:00 (Sun)
  61798492800, #      utc_end 1959-04-26 08:00:00 (Sun)
  61780323600, #  local_start 1958-09-28 01:00:00 (Sun)
  61798471200, #    local_end 1959-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61798492800, #    utc_start 1959-04-26 08:00:00 (Sun)
  61814214000, #      utc_end 1959-10-25 07:00:00 (Sun)
  61798474800, #  local_start 1959-04-26 03:00:00 (Sun)
  61814196000, #    local_end 1959-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61814214000, #    utc_start 1959-10-25 07:00:00 (Sun)
  61829942400, #      utc_end 1960-04-24 08:00:00 (Sun)
  61814192400, #  local_start 1959-10-25 01:00:00 (Sun)
  61829920800, #    local_end 1960-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61829942400, #    utc_start 1960-04-24 08:00:00 (Sun)
  61843244400, #      utc_end 1960-09-25 07:00:00 (Sun)
  61829924400, #  local_start 1960-04-24 03:00:00 (Sun)
  61843226400, #    local_end 1960-09-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61843244400, #    utc_start 1960-09-25 07:00:00 (Sun)
  61924896000, #      utc_end 1963-04-28 08:00:00 (Sun)
  61843222800, #  local_start 1960-09-25 01:00:00 (Sun)
  61924874400, #    local_end 1963-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  61924896000, #    utc_start 1963-04-28 08:00:00 (Sun)
  61937593200, #      utc_end 1963-09-22 07:00:00 (Sun)
  61924878000, #  local_start 1963-04-28 03:00:00 (Sun)
  61937575200, #    local_end 1963-09-22 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  61937593200, #    utc_start 1963-09-22 07:00:00 (Sun)
  62019244800, #      utc_end 1966-04-24 08:00:00 (Sun)
  61937571600, #  local_start 1963-09-22 01:00:00 (Sun)
  62019223200, #    local_end 1966-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62019244800, #    utc_start 1966-04-24 08:00:00 (Sun)
  62035574400, #      utc_end 1966-10-30 08:00:00 (Sun)
  62019226800, #  local_start 1966-04-24 03:00:00 (Sun)
  62035556400, #    local_end 1966-10-30 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62035574400, #    utc_start 1966-10-30 08:00:00 (Sun)
  62051299200, #      utc_end 1967-04-30 08:00:00 (Sun)
  62035552800, #  local_start 1966-10-30 02:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62051299200, #    utc_start 1967-04-30 08:00:00 (Sun)
  62067024000, #      utc_end 1967-10-29 08:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067006000, #    local_end 1967-10-29 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62067024000, #    utc_start 1967-10-29 08:00:00 (Sun)
  62082748800, #      utc_end 1968-04-28 08:00:00 (Sun)
  62067002400, #  local_start 1967-10-29 02:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62082748800, #    utc_start 1968-04-28 08:00:00 (Sun)
  62098473600, #      utc_end 1968-10-27 08:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098455600, #    local_end 1968-10-27 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62098473600, #    utc_start 1968-10-27 08:00:00 (Sun)
  62114198400, #      utc_end 1969-04-27 08:00:00 (Sun)
  62098452000, #  local_start 1968-10-27 02:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62114198400, #    utc_start 1969-04-27 08:00:00 (Sun)
  62129923200, #      utc_end 1969-10-26 08:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129905200, #    local_end 1969-10-26 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62129923200, #    utc_start 1969-10-26 08:00:00 (Sun)
  62145648000, #      utc_end 1970-04-26 08:00:00 (Sun)
  62129901600, #  local_start 1969-10-26 02:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62145648000, #    utc_start 1970-04-26 08:00:00 (Sun)
  62161372800, #      utc_end 1970-10-25 08:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161354800, #    local_end 1970-10-25 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62161372800, #    utc_start 1970-10-25 08:00:00 (Sun)
  62177097600, #      utc_end 1971-04-25 08:00:00 (Sun)
  62161351200, #  local_start 1970-10-25 02:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62177097600, #    utc_start 1971-04-25 08:00:00 (Sun)
  62193427200, #      utc_end 1971-10-31 08:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193409200, #    local_end 1971-10-31 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62193427200, #    utc_start 1971-10-31 08:00:00 (Sun)
  62209152000, #      utc_end 1972-04-30 08:00:00 (Sun)
  62193405600, #  local_start 1971-10-31 02:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62209152000, #    utc_start 1972-04-30 08:00:00 (Sun)
  62224876800, #      utc_end 1972-10-29 08:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224858800, #    local_end 1972-10-29 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62224876800, #    utc_start 1972-10-29 08:00:00 (Sun)
  62240601600, #      utc_end 1973-04-29 08:00:00 (Sun)
  62224855200, #  local_start 1972-10-29 02:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62240601600, #    utc_start 1973-04-29 08:00:00 (Sun)
  62256326400, #      utc_end 1973-10-28 08:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256308400, #    local_end 1973-10-28 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62256326400, #    utc_start 1973-10-28 08:00:00 (Sun)
  62272051200, #      utc_end 1974-04-28 08:00:00 (Sun)
  62256304800, #  local_start 1973-10-28 02:00:00 (Sun)
  62272029600, #    local_end 1974-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62272051200, #    utc_start 1974-04-28 08:00:00 (Sun)
  62287776000, #      utc_end 1974-10-27 08:00:00 (Sun)
  62272033200, #  local_start 1974-04-28 03:00:00 (Sun)
  62287758000, #    local_end 1974-10-27 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62287776000, #    utc_start 1974-10-27 08:00:00 (Sun)
  62303500800, #      utc_end 1975-04-27 08:00:00 (Sun)
  62287754400, #  local_start 1974-10-27 02:00:00 (Sun)
  62303479200, #    local_end 1975-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62303500800, #    utc_start 1975-04-27 08:00:00 (Sun)
  62319225600, #      utc_end 1975-10-26 08:00:00 (Sun)
  62303482800, #  local_start 1975-04-27 03:00:00 (Sun)
  62319207600, #    local_end 1975-10-26 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62319225600, #    utc_start 1975-10-26 08:00:00 (Sun)
  62334950400, #      utc_end 1976-04-25 08:00:00 (Sun)
  62319204000, #  local_start 1975-10-26 02:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62334950400, #    utc_start 1976-04-25 08:00:00 (Sun)
  62351280000, #      utc_end 1976-10-31 08:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351262000, #    local_end 1976-10-31 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62351280000, #    utc_start 1976-10-31 08:00:00 (Sun)
  62366400000, #      utc_end 1977-04-24 08:00:00 (Sun)
  62351258400, #  local_start 1976-10-31 02:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62366400000, #    utc_start 1977-04-24 08:00:00 (Sun)
  62382729600, #      utc_end 1977-10-30 08:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382711600, #    local_end 1977-10-30 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62382729600, #    utc_start 1977-10-30 08:00:00 (Sun)
  62398454400, #      utc_end 1978-04-30 08:00:00 (Sun)
  62382708000, #  local_start 1977-10-30 02:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62398454400, #    utc_start 1978-04-30 08:00:00 (Sun)
  62414179200, #      utc_end 1978-10-29 08:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414161200, #    local_end 1978-10-29 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62414179200, #    utc_start 1978-10-29 08:00:00 (Sun)
  62429904000, #      utc_end 1979-04-29 08:00:00 (Sun)
  62414157600, #  local_start 1978-10-29 02:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62429904000, #    utc_start 1979-04-29 08:00:00 (Sun)
  62445628800, #      utc_end 1979-10-28 08:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445610800, #    local_end 1979-10-28 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62445628800, #    utc_start 1979-10-28 08:00:00 (Sun)
  62461353600, #      utc_end 1980-04-27 08:00:00 (Sun)
  62445607200, #  local_start 1979-10-28 02:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62461353600, #    utc_start 1980-04-27 08:00:00 (Sun)
  62477078400, #      utc_end 1980-10-26 08:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477060400, #    local_end 1980-10-26 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62477078400, #    utc_start 1980-10-26 08:00:00 (Sun)
  62492803200, #      utc_end 1981-04-26 08:00:00 (Sun)
  62477056800, #  local_start 1980-10-26 02:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62492803200, #    utc_start 1981-04-26 08:00:00 (Sun)
  62508528000, #      utc_end 1981-10-25 08:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508510000, #    local_end 1981-10-25 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62508528000, #    utc_start 1981-10-25 08:00:00 (Sun)
  62524252800, #      utc_end 1982-04-25 08:00:00 (Sun)
  62508506400, #  local_start 1981-10-25 02:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62524252800, #    utc_start 1982-04-25 08:00:00 (Sun)
  62540582400, #      utc_end 1982-10-31 08:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540564400, #    local_end 1982-10-31 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62540582400, #    utc_start 1982-10-31 08:00:00 (Sun)
  62555702400, #      utc_end 1983-04-24 08:00:00 (Sun)
  62540560800, #  local_start 1982-10-31 02:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62555702400, #    utc_start 1983-04-24 08:00:00 (Sun)
  62572032000, #      utc_end 1983-10-30 08:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572014000, #    local_end 1983-10-30 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62572032000, #    utc_start 1983-10-30 08:00:00 (Sun)
  62587756800, #      utc_end 1984-04-29 08:00:00 (Sun)
  62572010400, #  local_start 1983-10-30 02:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62587756800, #    utc_start 1984-04-29 08:00:00 (Sun)
  62603481600, #      utc_end 1984-10-28 08:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603463600, #    local_end 1984-10-28 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62603481600, #    utc_start 1984-10-28 08:00:00 (Sun)
  62619206400, #      utc_end 1985-04-28 08:00:00 (Sun)
  62603460000, #  local_start 1984-10-28 02:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62619206400, #    utc_start 1985-04-28 08:00:00 (Sun)
  62634931200, #      utc_end 1985-10-27 08:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634913200, #    local_end 1985-10-27 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62634931200, #    utc_start 1985-10-27 08:00:00 (Sun)
  62650656000, #      utc_end 1986-04-27 08:00:00 (Sun)
  62634909600, #  local_start 1985-10-27 02:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62650656000, #    utc_start 1986-04-27 08:00:00 (Sun)
  62666380800, #      utc_end 1986-10-26 08:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666362800, #    local_end 1986-10-26 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62666380800, #    utc_start 1986-10-26 08:00:00 (Sun)
  62680291200, #      utc_end 1987-04-05 08:00:00 (Sun)
  62666359200, #  local_start 1986-10-26 02:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62680291200, #    utc_start 1987-04-05 08:00:00 (Sun)
  62697830400, #      utc_end 1987-10-25 08:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697812400, #    local_end 1987-10-25 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62697830400, #    utc_start 1987-10-25 08:00:00 (Sun)
  62711740800, #      utc_end 1988-04-03 08:00:00 (Sun)
  62697808800, #  local_start 1987-10-25 02:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62711740800, #    utc_start 1988-04-03 08:00:00 (Sun)
  62729884800, #      utc_end 1988-10-30 08:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729866800, #    local_end 1988-10-30 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62729884800, #    utc_start 1988-10-30 08:00:00 (Sun)
  62743190400, #      utc_end 1989-04-02 08:00:00 (Sun)
  62729863200, #  local_start 1988-10-30 02:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62743190400, #    utc_start 1989-04-02 08:00:00 (Sun)
  62761334400, #      utc_end 1989-10-29 08:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761316400, #    local_end 1989-10-29 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62761334400, #    utc_start 1989-10-29 08:00:00 (Sun)
  62774640000, #      utc_end 1990-04-01 08:00:00 (Sun)
  62761312800, #  local_start 1989-10-29 02:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62774640000, #    utc_start 1990-04-01 08:00:00 (Sun)
  62792784000, #      utc_end 1990-10-28 08:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792766000, #    local_end 1990-10-28 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62792784000, #    utc_start 1990-10-28 08:00:00 (Sun)
  62806694400, #      utc_end 1991-04-07 08:00:00 (Sun)
  62792762400, #  local_start 1990-10-28 02:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62806694400, #    utc_start 1991-04-07 08:00:00 (Sun)
  62824233600, #      utc_end 1991-10-27 08:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824215600, #    local_end 1991-10-27 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62824233600, #    utc_start 1991-10-27 08:00:00 (Sun)
  62838144000, #      utc_end 1992-04-05 08:00:00 (Sun)
  62824212000, #  local_start 1991-10-27 02:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62838144000, #    utc_start 1992-04-05 08:00:00 (Sun)
  62855683200, #      utc_end 1992-10-25 08:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855665200, #    local_end 1992-10-25 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62855683200, #    utc_start 1992-10-25 08:00:00 (Sun)
  62869593600, #      utc_end 1993-04-04 08:00:00 (Sun)
  62855661600, #  local_start 1992-10-25 02:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62869593600, #    utc_start 1993-04-04 08:00:00 (Sun)
  62887737600, #      utc_end 1993-10-31 08:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887719600, #    local_end 1993-10-31 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62887737600, #    utc_start 1993-10-31 08:00:00 (Sun)
  62901043200, #      utc_end 1994-04-03 08:00:00 (Sun)
  62887716000, #  local_start 1993-10-31 02:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62901043200, #    utc_start 1994-04-03 08:00:00 (Sun)
  62919187200, #      utc_end 1994-10-30 08:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919169200, #    local_end 1994-10-30 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62919187200, #    utc_start 1994-10-30 08:00:00 (Sun)
  62932492800, #      utc_end 1995-04-02 08:00:00 (Sun)
  62919165600, #  local_start 1994-10-30 02:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62932492800, #    utc_start 1995-04-02 08:00:00 (Sun)
  62950636800, #      utc_end 1995-10-29 08:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950618800, #    local_end 1995-10-29 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62950636800, #    utc_start 1995-10-29 08:00:00 (Sun)
  62964547200, #      utc_end 1996-04-07 08:00:00 (Sun)
  62950615200, #  local_start 1995-10-29 02:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62964547200, #    utc_start 1996-04-07 08:00:00 (Sun)
  62982086400, #      utc_end 1996-10-27 08:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62982086400, #    utc_start 1996-10-27 08:00:00 (Sun)
  62995996800, #      utc_end 1997-04-06 08:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62995996800, #    utc_start 1997-04-06 08:00:00 (Sun)
  63013536000, #      utc_end 1997-10-26 08:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63013536000, #    utc_start 1997-10-26 08:00:00 (Sun)
  63027446400, #      utc_end 1998-04-05 08:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63027446400, #    utc_start 1998-04-05 08:00:00 (Sun)
  63044985600, #      utc_end 1998-10-25 08:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63044985600, #    utc_start 1998-10-25 08:00:00 (Sun)
  63058896000, #      utc_end 1999-04-04 08:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63058896000, #    utc_start 1999-04-04 08:00:00 (Sun)
  63077040000, #      utc_end 1999-10-31 08:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63077040000, #    utc_start 1999-10-31 08:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108489600, #      utc_end 2000-10-29 08:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108489600, #    utc_start 2000-10-29 08:00:00 (Sun)
  63121795200, #      utc_end 2001-04-01 08:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63121795200, #    utc_start 2001-04-01 08:00:00 (Sun)
  63139939200, #      utc_end 2001-10-28 08:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63139939200, #    utc_start 2001-10-28 08:00:00 (Sun)
  63153849600, #      utc_end 2002-04-07 08:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63153849600, #    utc_start 2002-04-07 08:00:00 (Sun)
  63171388800, #      utc_end 2002-10-27 08:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63171388800, #    utc_start 2002-10-27 08:00:00 (Sun)
  63185299200, #      utc_end 2003-04-06 08:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63185299200, #    utc_start 2003-04-06 08:00:00 (Sun)
  63202838400, #      utc_end 2003-10-26 08:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63202838400, #    utc_start 2003-10-26 08:00:00 (Sun)
  63216748800, #      utc_end 2004-04-04 08:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63216748800, #    utc_start 2004-04-04 08:00:00 (Sun)
  63234892800, #      utc_end 2004-10-31 08:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63234892800, #    utc_start 2004-10-31 08:00:00 (Sun)
  63248198400, #      utc_end 2005-04-03 08:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63248198400, #    utc_start 2005-04-03 08:00:00 (Sun)
  63266342400, #      utc_end 2005-10-30 08:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63266342400, #    utc_start 2005-10-30 08:00:00 (Sun)
  63271778400, #      utc_end 2006-01-01 06:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63271756800, #    local_end 2006-01-01 00:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63271778400, #    utc_start 2006-01-01 06:00:00 (Sun)
  63279648000, #      utc_end 2006-04-02 08:00:00 (Sun)
  63271756800, #  local_start 2006-01-01 00:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63279648000, #    utc_start 2006-04-02 08:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63309283200, #      utc_end 2007-03-11 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63309283200, #    utc_start 2007-03-11 08:00:00 (Sun)
  63329842800, #      utc_end 2007-11-04 07:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329842800, #    utc_start 2007-11-04 07:00:00 (Sun)
  63340732800, #      utc_end 2008-03-09 08:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63340732800, #    utc_start 2008-03-09 08:00:00 (Sun)
  63361292400, #      utc_end 2008-11-02 07:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63361292400, #    utc_start 2008-11-02 07:00:00 (Sun)
  63372182400, #      utc_end 2009-03-08 08:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63372182400, #    utc_start 2009-03-08 08:00:00 (Sun)
  63392742000, #      utc_end 2009-11-01 07:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63392742000, #    utc_start 2009-11-01 07:00:00 (Sun)
  63404236800, #      utc_end 2010-03-14 08:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63404236800, #    utc_start 2010-03-14 08:00:00 (Sun)
  63424796400, #      utc_end 2010-11-07 07:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424796400, #    utc_start 2010-11-07 07:00:00 (Sun)
  63435686400, #      utc_end 2011-03-13 08:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63435686400, #    utc_start 2011-03-13 08:00:00 (Sun)
  63456246000, #      utc_end 2011-11-06 07:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63456246000, #    utc_start 2011-11-06 07:00:00 (Sun)
  63467136000, #      utc_end 2012-03-11 08:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63467136000, #    utc_start 2012-03-11 08:00:00 (Sun)
  63487695600, #      utc_end 2012-11-04 07:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487695600, #    utc_start 2012-11-04 07:00:00 (Sun)
  63498585600, #      utc_end 2013-03-10 08:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63498585600, #    utc_start 2013-03-10 08:00:00 (Sun)
  63519145200, #      utc_end 2013-11-03 07:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63519145200, #    utc_start 2013-11-03 07:00:00 (Sun)
  63530035200, #      utc_end 2014-03-09 08:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63530035200, #    utc_start 2014-03-09 08:00:00 (Sun)
  63550594800, #      utc_end 2014-11-02 07:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63550594800, #    utc_start 2014-11-02 07:00:00 (Sun)
  63561484800, #      utc_end 2015-03-08 08:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63561484800, #    utc_start 2015-03-08 08:00:00 (Sun)
  63582044400, #      utc_end 2015-11-01 07:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63582044400, #    utc_start 2015-11-01 07:00:00 (Sun)
  63593539200, #      utc_end 2016-03-13 08:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63593539200, #    utc_start 2016-03-13 08:00:00 (Sun)
  63614098800, #      utc_end 2016-11-06 07:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63614098800, #    utc_start 2016-11-06 07:00:00 (Sun)
  63624988800, #      utc_end 2017-03-12 08:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63624988800, #    utc_start 2017-03-12 08:00:00 (Sun)
  63645548400, #      utc_end 2017-11-05 07:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63645548400, #    utc_start 2017-11-05 07:00:00 (Sun)
  63656438400, #      utc_end 2018-03-11 08:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63656438400, #    utc_start 2018-03-11 08:00:00 (Sun)
  63676998000, #      utc_end 2018-11-04 07:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676998000, #    utc_start 2018-11-04 07:00:00 (Sun)
  63687888000, #      utc_end 2019-03-10 08:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63687888000, #    utc_start 2019-03-10 08:00:00 (Sun)
  63708447600, #      utc_end 2019-11-03 07:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63708447600, #    utc_start 2019-11-03 07:00:00 (Sun)
  63719337600, #      utc_end 2020-03-08 08:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63719337600, #    utc_start 2020-03-08 08:00:00 (Sun)
  63739897200, #      utc_end 2020-11-01 07:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739897200, #    utc_start 2020-11-01 07:00:00 (Sun)
  63751392000, #      utc_end 2021-03-14 08:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63751392000, #    utc_start 2021-03-14 08:00:00 (Sun)
  63771951600, #      utc_end 2021-11-07 07:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771951600, #    utc_start 2021-11-07 07:00:00 (Sun)
  63782841600, #      utc_end 2022-03-13 08:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63782841600, #    utc_start 2022-03-13 08:00:00 (Sun)
  63803401200, #      utc_end 2022-11-06 07:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63803401200, #    utc_start 2022-11-06 07:00:00 (Sun)
  63814291200, #      utc_end 2023-03-12 08:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63814291200, #    utc_start 2023-03-12 08:00:00 (Sun)
  63834850800, #      utc_end 2023-11-05 07:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834850800, #    utc_start 2023-11-05 07:00:00 (Sun)
  63845740800, #      utc_end 2024-03-10 08:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63845740800, #    utc_start 2024-03-10 08:00:00 (Sun)
  63866300400, #      utc_end 2024-11-03 07:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63866300400, #    utc_start 2024-11-03 07:00:00 (Sun)
  63877190400, #      utc_end 2025-03-09 08:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63877190400, #    utc_start 2025-03-09 08:00:00 (Sun)
  63897750000, #      utc_end 2025-11-02 07:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897750000, #    utc_start 2025-11-02 07:00:00 (Sun)
  63908640000, #      utc_end 2026-03-08 08:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63908640000, #    utc_start 2026-03-08 08:00:00 (Sun)
  63929199600, #      utc_end 2026-11-01 07:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63929199600, #    utc_start 2026-11-01 07:00:00 (Sun)
  63940694400, #      utc_end 2027-03-14 08:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63940694400, #    utc_start 2027-03-14 08:00:00 (Sun)
  63961254000, #      utc_end 2027-11-07 07:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {83}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732312,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732312,
      'utc_rd_secs' => 0,
      'utc_year' => 2007
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 732312,
      'local_rd_secs' => 21600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 732312,
      'utc_rd_secs' => 21600,
      'utc_year' => 2007
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_WINNIPEG

    $main::fatpacked{"DateTime/TimeZone/America/Yakutat.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_YAKUTAT';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Yakutat;
  $DateTime::TimeZone::America::Yakutat::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Yakutat::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  58910318335, #      utc_end 1867-10-17 09:18:55 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  58910371200, #    local_end 1867-10-18 00:00:00 (Fri)
  52865,
  0,
  'LMT',
      ],
      [
  58910318335, #    utc_start 1867-10-17 09:18:55 (Thu)
  59946729535, #      utc_end 1900-08-20 21:18:55 (Mon)
  58910284800, #  local_start 1867-10-17 00:00:00 (Thu)
  59946696000, #    local_end 1900-08-20 12:00:00 (Mon)
  -33535,
  0,
  'LMT',
      ],
      [
  59946729535, #    utc_start 1900-08-20 21:18:55 (Mon)
  61252102800, #      utc_end 1942-01-01 09:00:00 (Thu)
  59946697135, #  local_start 1900-08-20 12:18:55 (Mon)
  61252070400, #    local_end 1942-01-01 00:00:00 (Thu)
  -32400,
  0,
  'YST',
      ],
      [
  61252102800, #    utc_start 1942-01-01 09:00:00 (Thu)
  61255479600, #      utc_end 1942-02-09 11:00:00 (Mon)
  61252070400, #  local_start 1942-01-01 00:00:00 (Thu)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -32400,
  0,
  'YST',
      ],
      [
  61255479600, #    utc_start 1942-02-09 11:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366258800, #    local_end 1945-08-14 15:00:00 (Tue)
  -28800,
  1,
  'YWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370301600, #      utc_end 1945-09-30 10:00:00 (Sun)
  61366258800, #  local_start 1945-08-14 15:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -28800,
  1,
  'YPT',
      ],
      [
  61370301600, #    utc_start 1945-09-30 10:00:00 (Sun)
  61378333200, #      utc_end 1946-01-01 09:00:00 (Tue)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  -32400,
  0,
  'YST',
      ],
      [
  61378333200, #    utc_start 1946-01-01 09:00:00 (Tue)
  62104179600, #      utc_end 1969-01-01 09:00:00 (Wed)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  62104147200, #    local_end 1969-01-01 00:00:00 (Wed)
  -32400,
  0,
  'YST',
      ],
      [
  62104179600, #    utc_start 1969-01-01 09:00:00 (Wed)
  62114209200, #      utc_end 1969-04-27 11:00:00 (Sun)
  62104147200, #  local_start 1969-01-01 00:00:00 (Wed)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62114209200, #    utc_start 1969-04-27 11:00:00 (Sun)
  62129930400, #      utc_end 1969-10-26 10:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  62129930400, #    utc_start 1969-10-26 10:00:00 (Sun)
  62145658800, #      utc_end 1970-04-26 11:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62145658800, #    utc_start 1970-04-26 11:00:00 (Sun)
  62161380000, #      utc_end 1970-10-25 10:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  62161380000, #    utc_start 1970-10-25 10:00:00 (Sun)
  62177108400, #      utc_end 1971-04-25 11:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62177108400, #    utc_start 1971-04-25 11:00:00 (Sun)
  62193434400, #      utc_end 1971-10-31 10:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  62193434400, #    utc_start 1971-10-31 10:00:00 (Sun)
  62209162800, #      utc_end 1972-04-30 11:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62209162800, #    utc_start 1972-04-30 11:00:00 (Sun)
  62224884000, #      utc_end 1972-10-29 10:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  62224884000, #    utc_start 1972-10-29 10:00:00 (Sun)
  62240612400, #      utc_end 1973-04-29 11:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62240612400, #    utc_start 1973-04-29 11:00:00 (Sun)
  62256333600, #      utc_end 1973-10-28 10:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  62256333600, #    utc_start 1973-10-28 10:00:00 (Sun)
  62262385200, #      utc_end 1974-01-06 11:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62262385200, #    utc_start 1974-01-06 11:00:00 (Sun)
  62287783200, #      utc_end 1974-10-27 10:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  62287783200, #    utc_start 1974-10-27 10:00:00 (Sun)
  62298068400, #      utc_end 1975-02-23 11:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62298068400, #    utc_start 1975-02-23 11:00:00 (Sun)
  62319232800, #      utc_end 1975-10-26 10:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  62319232800, #    utc_start 1975-10-26 10:00:00 (Sun)
  62334961200, #      utc_end 1976-04-25 11:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62334961200, #    utc_start 1976-04-25 11:00:00 (Sun)
  62351287200, #      utc_end 1976-10-31 10:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  62351287200, #    utc_start 1976-10-31 10:00:00 (Sun)
  62366410800, #      utc_end 1977-04-24 11:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62366410800, #    utc_start 1977-04-24 11:00:00 (Sun)
  62382736800, #      utc_end 1977-10-30 10:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  62382736800, #    utc_start 1977-10-30 10:00:00 (Sun)
  62398465200, #      utc_end 1978-04-30 11:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62398465200, #    utc_start 1978-04-30 11:00:00 (Sun)
  62414186400, #      utc_end 1978-10-29 10:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  62414186400, #    utc_start 1978-10-29 10:00:00 (Sun)
  62429914800, #      utc_end 1979-04-29 11:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62429914800, #    utc_start 1979-04-29 11:00:00 (Sun)
  62445636000, #      utc_end 1979-10-28 10:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  62445636000, #    utc_start 1979-10-28 10:00:00 (Sun)
  62461364400, #      utc_end 1980-04-27 11:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62461364400, #    utc_start 1980-04-27 11:00:00 (Sun)
  62477085600, #      utc_end 1980-10-26 10:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  62477085600, #    utc_start 1980-10-26 10:00:00 (Sun)
  62492814000, #      utc_end 1981-04-26 11:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62492814000, #    utc_start 1981-04-26 11:00:00 (Sun)
  62508535200, #      utc_end 1981-10-25 10:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  62508535200, #    utc_start 1981-10-25 10:00:00 (Sun)
  62524263600, #      utc_end 1982-04-25 11:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62524263600, #    utc_start 1982-04-25 11:00:00 (Sun)
  62540589600, #      utc_end 1982-10-31 10:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  62540589600, #    utc_start 1982-10-31 10:00:00 (Sun)
  62555713200, #      utc_end 1983-04-24 11:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -32400,
  0,
  'YST',
      ],
      [
  62555713200, #    utc_start 1983-04-24 11:00:00 (Sun)
  62572039200, #      utc_end 1983-10-30 10:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -28800,
  1,
  'YDT',
      ],
      [
  62572039200, #    utc_start 1983-10-30 10:00:00 (Sun)
  62574714000, #      utc_end 1983-11-30 09:00:00 (Wed)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62574681600, #    local_end 1983-11-30 00:00:00 (Wed)
  -32400,
  0,
  'YST',
      ],
      [
  62574714000, #    utc_start 1983-11-30 09:00:00 (Wed)
  62587767600, #      utc_end 1984-04-29 11:00:00 (Sun)
  62574681600, #  local_start 1983-11-30 00:00:00 (Wed)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62587767600, #    utc_start 1984-04-29 11:00:00 (Sun)
  62603488800, #      utc_end 1984-10-28 10:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62603488800, #    utc_start 1984-10-28 10:00:00 (Sun)
  62619217200, #      utc_end 1985-04-28 11:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62619217200, #    utc_start 1985-04-28 11:00:00 (Sun)
  62634938400, #      utc_end 1985-10-27 10:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62634938400, #    utc_start 1985-10-27 10:00:00 (Sun)
  62650666800, #      utc_end 1986-04-27 11:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62650666800, #    utc_start 1986-04-27 11:00:00 (Sun)
  62666388000, #      utc_end 1986-10-26 10:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62666388000, #    utc_start 1986-10-26 10:00:00 (Sun)
  62680302000, #      utc_end 1987-04-05 11:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62680302000, #    utc_start 1987-04-05 11:00:00 (Sun)
  62697837600, #      utc_end 1987-10-25 10:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62697837600, #    utc_start 1987-10-25 10:00:00 (Sun)
  62711751600, #      utc_end 1988-04-03 11:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62711751600, #    utc_start 1988-04-03 11:00:00 (Sun)
  62729892000, #      utc_end 1988-10-30 10:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62729892000, #    utc_start 1988-10-30 10:00:00 (Sun)
  62743201200, #      utc_end 1989-04-02 11:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62743201200, #    utc_start 1989-04-02 11:00:00 (Sun)
  62761341600, #      utc_end 1989-10-29 10:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62761341600, #    utc_start 1989-10-29 10:00:00 (Sun)
  62774650800, #      utc_end 1990-04-01 11:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62774650800, #    utc_start 1990-04-01 11:00:00 (Sun)
  62792791200, #      utc_end 1990-10-28 10:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62792791200, #    utc_start 1990-10-28 10:00:00 (Sun)
  62806705200, #      utc_end 1991-04-07 11:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62806705200, #    utc_start 1991-04-07 11:00:00 (Sun)
  62824240800, #      utc_end 1991-10-27 10:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62824240800, #    utc_start 1991-10-27 10:00:00 (Sun)
  62838154800, #      utc_end 1992-04-05 11:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62838154800, #    utc_start 1992-04-05 11:00:00 (Sun)
  62855690400, #      utc_end 1992-10-25 10:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62855690400, #    utc_start 1992-10-25 10:00:00 (Sun)
  62869604400, #      utc_end 1993-04-04 11:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62869604400, #    utc_start 1993-04-04 11:00:00 (Sun)
  62887744800, #      utc_end 1993-10-31 10:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62887744800, #    utc_start 1993-10-31 10:00:00 (Sun)
  62901054000, #      utc_end 1994-04-03 11:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62901054000, #    utc_start 1994-04-03 11:00:00 (Sun)
  62919194400, #      utc_end 1994-10-30 10:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62919194400, #    utc_start 1994-10-30 10:00:00 (Sun)
  62932503600, #      utc_end 1995-04-02 11:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62932503600, #    utc_start 1995-04-02 11:00:00 (Sun)
  62950644000, #      utc_end 1995-10-29 10:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62950644000, #    utc_start 1995-10-29 10:00:00 (Sun)
  62964558000, #      utc_end 1996-04-07 11:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62964558000, #    utc_start 1996-04-07 11:00:00 (Sun)
  62982093600, #      utc_end 1996-10-27 10:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  62982093600, #    utc_start 1996-10-27 10:00:00 (Sun)
  62996007600, #      utc_end 1997-04-06 11:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  62996007600, #    utc_start 1997-04-06 11:00:00 (Sun)
  63013543200, #      utc_end 1997-10-26 10:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63013543200, #    utc_start 1997-10-26 10:00:00 (Sun)
  63027457200, #      utc_end 1998-04-05 11:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63027457200, #    utc_start 1998-04-05 11:00:00 (Sun)
  63044992800, #      utc_end 1998-10-25 10:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63044992800, #    utc_start 1998-10-25 10:00:00 (Sun)
  63058906800, #      utc_end 1999-04-04 11:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63058906800, #    utc_start 1999-04-04 11:00:00 (Sun)
  63077047200, #      utc_end 1999-10-31 10:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63077047200, #    utc_start 1999-10-31 10:00:00 (Sun)
  63090356400, #      utc_end 2000-04-02 11:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63090356400, #    utc_start 2000-04-02 11:00:00 (Sun)
  63108496800, #      utc_end 2000-10-29 10:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63108496800, #    utc_start 2000-10-29 10:00:00 (Sun)
  63121806000, #      utc_end 2001-04-01 11:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63121806000, #    utc_start 2001-04-01 11:00:00 (Sun)
  63139946400, #      utc_end 2001-10-28 10:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63139946400, #    utc_start 2001-10-28 10:00:00 (Sun)
  63153860400, #      utc_end 2002-04-07 11:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63153860400, #    utc_start 2002-04-07 11:00:00 (Sun)
  63171396000, #      utc_end 2002-10-27 10:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63171396000, #    utc_start 2002-10-27 10:00:00 (Sun)
  63185310000, #      utc_end 2003-04-06 11:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63185310000, #    utc_start 2003-04-06 11:00:00 (Sun)
  63202845600, #      utc_end 2003-10-26 10:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63202845600, #    utc_start 2003-10-26 10:00:00 (Sun)
  63216759600, #      utc_end 2004-04-04 11:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63216759600, #    utc_start 2004-04-04 11:00:00 (Sun)
  63234900000, #      utc_end 2004-10-31 10:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63234900000, #    utc_start 2004-10-31 10:00:00 (Sun)
  63248209200, #      utc_end 2005-04-03 11:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63248209200, #    utc_start 2005-04-03 11:00:00 (Sun)
  63266349600, #      utc_end 2005-10-30 10:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63266349600, #    utc_start 2005-10-30 10:00:00 (Sun)
  63279658800, #      utc_end 2006-04-02 11:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63279658800, #    utc_start 2006-04-02 11:00:00 (Sun)
  63297799200, #      utc_end 2006-10-29 10:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63297799200, #    utc_start 2006-10-29 10:00:00 (Sun)
  63309294000, #      utc_end 2007-03-11 11:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63309294000, #    utc_start 2007-03-11 11:00:00 (Sun)
  63329853600, #      utc_end 2007-11-04 10:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63329853600, #    utc_start 2007-11-04 10:00:00 (Sun)
  63340743600, #      utc_end 2008-03-09 11:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63340743600, #    utc_start 2008-03-09 11:00:00 (Sun)
  63361303200, #      utc_end 2008-11-02 10:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63361303200, #    utc_start 2008-11-02 10:00:00 (Sun)
  63372193200, #      utc_end 2009-03-08 11:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63372193200, #    utc_start 2009-03-08 11:00:00 (Sun)
  63392752800, #      utc_end 2009-11-01 10:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63392752800, #    utc_start 2009-11-01 10:00:00 (Sun)
  63404247600, #      utc_end 2010-03-14 11:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63404247600, #    utc_start 2010-03-14 11:00:00 (Sun)
  63424807200, #      utc_end 2010-11-07 10:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63424807200, #    utc_start 2010-11-07 10:00:00 (Sun)
  63435697200, #      utc_end 2011-03-13 11:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63435697200, #    utc_start 2011-03-13 11:00:00 (Sun)
  63456256800, #      utc_end 2011-11-06 10:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63456256800, #    utc_start 2011-11-06 10:00:00 (Sun)
  63467146800, #      utc_end 2012-03-11 11:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63467146800, #    utc_start 2012-03-11 11:00:00 (Sun)
  63487706400, #      utc_end 2012-11-04 10:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63487706400, #    utc_start 2012-11-04 10:00:00 (Sun)
  63498596400, #      utc_end 2013-03-10 11:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63498596400, #    utc_start 2013-03-10 11:00:00 (Sun)
  63519156000, #      utc_end 2013-11-03 10:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63519156000, #    utc_start 2013-11-03 10:00:00 (Sun)
  63530046000, #      utc_end 2014-03-09 11:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63530046000, #    utc_start 2014-03-09 11:00:00 (Sun)
  63550605600, #      utc_end 2014-11-02 10:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63550605600, #    utc_start 2014-11-02 10:00:00 (Sun)
  63561495600, #      utc_end 2015-03-08 11:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63561495600, #    utc_start 2015-03-08 11:00:00 (Sun)
  63582055200, #      utc_end 2015-11-01 10:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63582055200, #    utc_start 2015-11-01 10:00:00 (Sun)
  63593550000, #      utc_end 2016-03-13 11:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63593550000, #    utc_start 2016-03-13 11:00:00 (Sun)
  63614109600, #      utc_end 2016-11-06 10:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63614109600, #    utc_start 2016-11-06 10:00:00 (Sun)
  63624999600, #      utc_end 2017-03-12 11:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63624999600, #    utc_start 2017-03-12 11:00:00 (Sun)
  63645559200, #      utc_end 2017-11-05 10:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63645559200, #    utc_start 2017-11-05 10:00:00 (Sun)
  63656449200, #      utc_end 2018-03-11 11:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63656449200, #    utc_start 2018-03-11 11:00:00 (Sun)
  63677008800, #      utc_end 2018-11-04 10:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63677008800, #    utc_start 2018-11-04 10:00:00 (Sun)
  63687898800, #      utc_end 2019-03-10 11:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63687898800, #    utc_start 2019-03-10 11:00:00 (Sun)
  63708458400, #      utc_end 2019-11-03 10:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63708458400, #    utc_start 2019-11-03 10:00:00 (Sun)
  63719348400, #      utc_end 2020-03-08 11:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63719348400, #    utc_start 2020-03-08 11:00:00 (Sun)
  63739908000, #      utc_end 2020-11-01 10:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63739908000, #    utc_start 2020-11-01 10:00:00 (Sun)
  63751402800, #      utc_end 2021-03-14 11:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63751402800, #    utc_start 2021-03-14 11:00:00 (Sun)
  63771962400, #      utc_end 2021-11-07 10:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63771962400, #    utc_start 2021-11-07 10:00:00 (Sun)
  63782852400, #      utc_end 2022-03-13 11:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63782852400, #    utc_start 2022-03-13 11:00:00 (Sun)
  63803412000, #      utc_end 2022-11-06 10:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63803412000, #    utc_start 2022-11-06 10:00:00 (Sun)
  63814302000, #      utc_end 2023-03-12 11:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63814302000, #    utc_start 2023-03-12 11:00:00 (Sun)
  63834861600, #      utc_end 2023-11-05 10:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63834861600, #    utc_start 2023-11-05 10:00:00 (Sun)
  63845751600, #      utc_end 2024-03-10 11:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63845751600, #    utc_start 2024-03-10 11:00:00 (Sun)
  63866311200, #      utc_end 2024-11-03 10:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63866311200, #    utc_start 2024-11-03 10:00:00 (Sun)
  63877201200, #      utc_end 2025-03-09 11:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63877201200, #    utc_start 2025-03-09 11:00:00 (Sun)
  63897760800, #      utc_end 2025-11-02 10:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63897760800, #    utc_start 2025-11-02 10:00:00 (Sun)
  63908650800, #      utc_end 2026-03-08 11:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63908650800, #    utc_start 2026-03-08 11:00:00 (Sun)
  63929210400, #      utc_end 2026-11-01 10:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
      [
  63929210400, #    utc_start 2026-11-01 10:00:00 (Sun)
  63940705200, #      utc_end 2027-03-14 11:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -32400,
  0,
  'AKST',
      ],
      [
  63940705200, #    utc_start 2027-03-14 11:00:00 (Sun)
  63961264800, #      utc_end 2027-11-07 10:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -28800,
  1,
  'AKDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {61}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -32400 }
  
  my $last_observance = bless( {
    'format' => 'AK%sT',
    'gmtoff' => '-9:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724244,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724244,
      'utc_rd_secs' => 0,
      'utc_year' => 1984
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -32400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724244,
      'local_rd_secs' => 32400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724244,
      'utc_rd_secs' => 32400,
      'utc_year' => 1984
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_YAKUTAT

    $main::fatpacked{"DateTime/TimeZone/America/Yellowknife.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AMERICA_YELLOWKNIFE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::America::Yellowknife;
  $DateTime::TimeZone::America::Yellowknife::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::America::Yellowknife::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  61031145600, #      utc_end 1935-01-01 00:00:00 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  61031145600, #    local_end 1935-01-01 00:00:00 (Tue)
  0,
  0,
  '-00',
      ],
      [
  61031145600, #    utc_start 1935-01-01 00:00:00 (Tue)
  61255472400, #      utc_end 1942-02-09 09:00:00 (Mon)
  61031120400, #  local_start 1934-12-31 17:00:00 (Mon)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -25200,
  0,
  'MST',
      ],
      [
  61255472400, #    utc_start 1942-02-09 09:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366266000, #    local_end 1945-08-14 17:00:00 (Tue)
  -21600,
  1,
  'MWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370294400, #      utc_end 1945-09-30 08:00:00 (Sun)
  61366266000, #  local_start 1945-08-14 17:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MPT',
      ],
      [
  61370294400, #    utc_start 1945-09-30 08:00:00 (Sun)
  61987791600, #      utc_end 1965-04-25 07:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61987766400, #    local_end 1965-04-25 00:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  61987791600, #    utc_start 1965-04-25 07:00:00 (Sun)
  62004121200, #      utc_end 1965-10-31 07:00:00 (Sun)
  61987773600, #  local_start 1965-04-25 02:00:00 (Sun)
  62004103200, #    local_end 1965-10-31 02:00:00 (Sun)
  -18000,
  1,
  'MDDT',
      ],
      [
  62004121200, #    utc_start 1965-10-31 07:00:00 (Sun)
  62451241200, #      utc_end 1980-01-01 07:00:00 (Tue)
  62004096000, #  local_start 1965-10-31 00:00:00 (Sun)
  62451216000, #    local_end 1980-01-01 00:00:00 (Tue)
  -25200,
  0,
  'MST',
      ],
      [
  62451241200, #    utc_start 1980-01-01 07:00:00 (Tue)
  62461357200, #      utc_end 1980-04-27 09:00:00 (Sun)
  62451216000, #  local_start 1980-01-01 00:00:00 (Tue)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62461357200, #    utc_start 1980-04-27 09:00:00 (Sun)
  62477078400, #      utc_end 1980-10-26 08:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62477078400, #    utc_start 1980-10-26 08:00:00 (Sun)
  62492806800, #      utc_end 1981-04-26 09:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62492806800, #    utc_start 1981-04-26 09:00:00 (Sun)
  62508528000, #      utc_end 1981-10-25 08:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62508528000, #    utc_start 1981-10-25 08:00:00 (Sun)
  62524256400, #      utc_end 1982-04-25 09:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62524256400, #    utc_start 1982-04-25 09:00:00 (Sun)
  62540582400, #      utc_end 1982-10-31 08:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62540582400, #    utc_start 1982-10-31 08:00:00 (Sun)
  62555706000, #      utc_end 1983-04-24 09:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62555706000, #    utc_start 1983-04-24 09:00:00 (Sun)
  62572032000, #      utc_end 1983-10-30 08:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62572032000, #    utc_start 1983-10-30 08:00:00 (Sun)
  62587760400, #      utc_end 1984-04-29 09:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62587760400, #    utc_start 1984-04-29 09:00:00 (Sun)
  62603481600, #      utc_end 1984-10-28 08:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62603481600, #    utc_start 1984-10-28 08:00:00 (Sun)
  62619210000, #      utc_end 1985-04-28 09:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62619210000, #    utc_start 1985-04-28 09:00:00 (Sun)
  62634931200, #      utc_end 1985-10-27 08:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62634931200, #    utc_start 1985-10-27 08:00:00 (Sun)
  62650659600, #      utc_end 1986-04-27 09:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62650659600, #    utc_start 1986-04-27 09:00:00 (Sun)
  62666380800, #      utc_end 1986-10-26 08:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62666380800, #    utc_start 1986-10-26 08:00:00 (Sun)
  62680294800, #      utc_end 1987-04-05 09:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62680294800, #    utc_start 1987-04-05 09:00:00 (Sun)
  62697830400, #      utc_end 1987-10-25 08:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62697830400, #    utc_start 1987-10-25 08:00:00 (Sun)
  62711744400, #      utc_end 1988-04-03 09:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62711744400, #    utc_start 1988-04-03 09:00:00 (Sun)
  62729884800, #      utc_end 1988-10-30 08:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62729884800, #    utc_start 1988-10-30 08:00:00 (Sun)
  62743194000, #      utc_end 1989-04-02 09:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62743194000, #    utc_start 1989-04-02 09:00:00 (Sun)
  62761334400, #      utc_end 1989-10-29 08:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62761334400, #    utc_start 1989-10-29 08:00:00 (Sun)
  62774643600, #      utc_end 1990-04-01 09:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62774643600, #    utc_start 1990-04-01 09:00:00 (Sun)
  62792784000, #      utc_end 1990-10-28 08:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62792784000, #    utc_start 1990-10-28 08:00:00 (Sun)
  62806698000, #      utc_end 1991-04-07 09:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62806698000, #    utc_start 1991-04-07 09:00:00 (Sun)
  62824233600, #      utc_end 1991-10-27 08:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62824233600, #    utc_start 1991-10-27 08:00:00 (Sun)
  62838147600, #      utc_end 1992-04-05 09:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62838147600, #    utc_start 1992-04-05 09:00:00 (Sun)
  62855683200, #      utc_end 1992-10-25 08:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62855683200, #    utc_start 1992-10-25 08:00:00 (Sun)
  62869597200, #      utc_end 1993-04-04 09:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62869597200, #    utc_start 1993-04-04 09:00:00 (Sun)
  62887737600, #      utc_end 1993-10-31 08:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62887737600, #    utc_start 1993-10-31 08:00:00 (Sun)
  62901046800, #      utc_end 1994-04-03 09:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62901046800, #    utc_start 1994-04-03 09:00:00 (Sun)
  62919187200, #      utc_end 1994-10-30 08:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62919187200, #    utc_start 1994-10-30 08:00:00 (Sun)
  62932496400, #      utc_end 1995-04-02 09:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62932496400, #    utc_start 1995-04-02 09:00:00 (Sun)
  62950636800, #      utc_end 1995-10-29 08:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62950636800, #    utc_start 1995-10-29 08:00:00 (Sun)
  62964550800, #      utc_end 1996-04-07 09:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62964550800, #    utc_start 1996-04-07 09:00:00 (Sun)
  62982086400, #      utc_end 1996-10-27 08:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62982086400, #    utc_start 1996-10-27 08:00:00 (Sun)
  62996000400, #      utc_end 1997-04-06 09:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62996000400, #    utc_start 1997-04-06 09:00:00 (Sun)
  63013536000, #      utc_end 1997-10-26 08:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63013536000, #    utc_start 1997-10-26 08:00:00 (Sun)
  63027450000, #      utc_end 1998-04-05 09:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63027450000, #    utc_start 1998-04-05 09:00:00 (Sun)
  63044985600, #      utc_end 1998-10-25 08:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63044985600, #    utc_start 1998-10-25 08:00:00 (Sun)
  63058899600, #      utc_end 1999-04-04 09:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63058899600, #    utc_start 1999-04-04 09:00:00 (Sun)
  63077040000, #      utc_end 1999-10-31 08:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63077040000, #    utc_start 1999-10-31 08:00:00 (Sun)
  63090349200, #      utc_end 2000-04-02 09:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63090349200, #    utc_start 2000-04-02 09:00:00 (Sun)
  63108489600, #      utc_end 2000-10-29 08:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63108489600, #    utc_start 2000-10-29 08:00:00 (Sun)
  63121798800, #      utc_end 2001-04-01 09:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63121798800, #    utc_start 2001-04-01 09:00:00 (Sun)
  63139939200, #      utc_end 2001-10-28 08:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63139939200, #    utc_start 2001-10-28 08:00:00 (Sun)
  63153853200, #      utc_end 2002-04-07 09:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63153853200, #    utc_start 2002-04-07 09:00:00 (Sun)
  63171388800, #      utc_end 2002-10-27 08:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63171388800, #    utc_start 2002-10-27 08:00:00 (Sun)
  63185302800, #      utc_end 2003-04-06 09:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63185302800, #    utc_start 2003-04-06 09:00:00 (Sun)
  63202838400, #      utc_end 2003-10-26 08:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63202838400, #    utc_start 2003-10-26 08:00:00 (Sun)
  63216752400, #      utc_end 2004-04-04 09:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63216752400, #    utc_start 2004-04-04 09:00:00 (Sun)
  63234892800, #      utc_end 2004-10-31 08:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63234892800, #    utc_start 2004-10-31 08:00:00 (Sun)
  63248202000, #      utc_end 2005-04-03 09:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63248202000, #    utc_start 2005-04-03 09:00:00 (Sun)
  63266342400, #      utc_end 2005-10-30 08:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63266342400, #    utc_start 2005-10-30 08:00:00 (Sun)
  63279651600, #      utc_end 2006-04-02 09:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63279651600, #    utc_start 2006-04-02 09:00:00 (Sun)
  63297792000, #      utc_end 2006-10-29 08:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63297792000, #    utc_start 2006-10-29 08:00:00 (Sun)
  63309286800, #      utc_end 2007-03-11 09:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63309286800, #    utc_start 2007-03-11 09:00:00 (Sun)
  63329846400, #      utc_end 2007-11-04 08:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63329846400, #    utc_start 2007-11-04 08:00:00 (Sun)
  63340736400, #      utc_end 2008-03-09 09:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63340736400, #    utc_start 2008-03-09 09:00:00 (Sun)
  63361296000, #      utc_end 2008-11-02 08:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63361296000, #    utc_start 2008-11-02 08:00:00 (Sun)
  63372186000, #      utc_end 2009-03-08 09:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63372186000, #    utc_start 2009-03-08 09:00:00 (Sun)
  63392745600, #      utc_end 2009-11-01 08:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63392745600, #    utc_start 2009-11-01 08:00:00 (Sun)
  63404240400, #      utc_end 2010-03-14 09:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63404240400, #    utc_start 2010-03-14 09:00:00 (Sun)
  63424800000, #      utc_end 2010-11-07 08:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63424800000, #    utc_start 2010-11-07 08:00:00 (Sun)
  63435690000, #      utc_end 2011-03-13 09:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63435690000, #    utc_start 2011-03-13 09:00:00 (Sun)
  63456249600, #      utc_end 2011-11-06 08:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63456249600, #    utc_start 2011-11-06 08:00:00 (Sun)
  63467139600, #      utc_end 2012-03-11 09:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63467139600, #    utc_start 2012-03-11 09:00:00 (Sun)
  63487699200, #      utc_end 2012-11-04 08:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63487699200, #    utc_start 2012-11-04 08:00:00 (Sun)
  63498589200, #      utc_end 2013-03-10 09:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63498589200, #    utc_start 2013-03-10 09:00:00 (Sun)
  63519148800, #      utc_end 2013-11-03 08:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63519148800, #    utc_start 2013-11-03 08:00:00 (Sun)
  63530038800, #      utc_end 2014-03-09 09:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63530038800, #    utc_start 2014-03-09 09:00:00 (Sun)
  63550598400, #      utc_end 2014-11-02 08:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63550598400, #    utc_start 2014-11-02 08:00:00 (Sun)
  63561488400, #      utc_end 2015-03-08 09:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63561488400, #    utc_start 2015-03-08 09:00:00 (Sun)
  63582048000, #      utc_end 2015-11-01 08:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63582048000, #    utc_start 2015-11-01 08:00:00 (Sun)
  63593542800, #      utc_end 2016-03-13 09:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63593542800, #    utc_start 2016-03-13 09:00:00 (Sun)
  63614102400, #      utc_end 2016-11-06 08:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63614102400, #    utc_start 2016-11-06 08:00:00 (Sun)
  63624992400, #      utc_end 2017-03-12 09:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63624992400, #    utc_start 2017-03-12 09:00:00 (Sun)
  63645552000, #      utc_end 2017-11-05 08:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63645552000, #    utc_start 2017-11-05 08:00:00 (Sun)
  63656442000, #      utc_end 2018-03-11 09:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63656442000, #    utc_start 2018-03-11 09:00:00 (Sun)
  63677001600, #      utc_end 2018-11-04 08:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63677001600, #    utc_start 2018-11-04 08:00:00 (Sun)
  63687891600, #      utc_end 2019-03-10 09:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63687891600, #    utc_start 2019-03-10 09:00:00 (Sun)
  63708451200, #      utc_end 2019-11-03 08:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63708451200, #    utc_start 2019-11-03 08:00:00 (Sun)
  63719341200, #      utc_end 2020-03-08 09:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63719341200, #    utc_start 2020-03-08 09:00:00 (Sun)
  63739900800, #      utc_end 2020-11-01 08:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63739900800, #    utc_start 2020-11-01 08:00:00 (Sun)
  63751395600, #      utc_end 2021-03-14 09:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63751395600, #    utc_start 2021-03-14 09:00:00 (Sun)
  63771955200, #      utc_end 2021-11-07 08:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63771955200, #    utc_start 2021-11-07 08:00:00 (Sun)
  63782845200, #      utc_end 2022-03-13 09:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63782845200, #    utc_start 2022-03-13 09:00:00 (Sun)
  63803404800, #      utc_end 2022-11-06 08:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63803404800, #    utc_start 2022-11-06 08:00:00 (Sun)
  63814294800, #      utc_end 2023-03-12 09:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63814294800, #    utc_start 2023-03-12 09:00:00 (Sun)
  63834854400, #      utc_end 2023-11-05 08:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63834854400, #    utc_start 2023-11-05 08:00:00 (Sun)
  63845744400, #      utc_end 2024-03-10 09:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63845744400, #    utc_start 2024-03-10 09:00:00 (Sun)
  63866304000, #      utc_end 2024-11-03 08:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63866304000, #    utc_start 2024-11-03 08:00:00 (Sun)
  63877194000, #      utc_end 2025-03-09 09:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63877194000, #    utc_start 2025-03-09 09:00:00 (Sun)
  63897753600, #      utc_end 2025-11-02 08:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63897753600, #    utc_start 2025-11-02 08:00:00 (Sun)
  63908643600, #      utc_end 2026-03-08 09:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63908643600, #    utc_start 2026-03-08 09:00:00 (Sun)
  63929203200, #      utc_end 2026-11-01 08:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63929203200, #    utc_start 2026-11-01 08:00:00 (Sun)
  63940698000, #      utc_end 2027-03-14 09:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63940698000, #    utc_start 2027-03-14 09:00:00 (Sun)
  63961257600, #      utc_end 2027-11-07 08:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {51}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -25200 }
  
  my $last_observance = bless( {
    'format' => 'M%sT',
    'gmtoff' => '-7:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722815,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722815,
      'utc_rd_secs' => 0,
      'utc_year' => 1981
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -25200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722815,
      'local_rd_secs' => 25200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722815,
      'utc_rd_secs' => 25200,
      'utc_year' => 1981
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Canada',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Canada',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AMERICA_YELLOWKNIFE

    $main::fatpacked{"DateTime/TimeZone/Antarctica/Casey.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ANTARCTICA_CASEY';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/antarctica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Antarctica::Casey;
  $DateTime::TimeZone::Antarctica::Casey::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Antarctica::Casey::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  62104147200, #      utc_end 1969-01-01 00:00:00 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  62104147200, #    local_end 1969-01-01 00:00:00 (Wed)
  0,
  0,
  '-00',
      ],
      [
  62104147200, #    utc_start 1969-01-01 00:00:00 (Wed)
  63391485600, #      utc_end 2009-10-17 18:00:00 (Sat)
  62104176000, #  local_start 1969-01-01 08:00:00 (Wed)
  63391514400, #    local_end 2009-10-18 02:00:00 (Sun)
  28800,
  0,
  'AWST',
      ],
      [
  63391485600, #    utc_start 2009-10-17 18:00:00 (Sat)
  63403398000, #      utc_end 2010-03-04 15:00:00 (Thu)
  63391525200, #  local_start 2009-10-18 05:00:00 (Sun)
  63403437600, #    local_end 2010-03-05 02:00:00 (Fri)
  39600,
  0,
  'CAST',
      ],
      [
  63403398000, #    utc_start 2010-03-04 15:00:00 (Thu)
  63455421600, #      utc_end 2011-10-27 18:00:00 (Thu)
  63403426800, #  local_start 2010-03-04 23:00:00 (Thu)
  63455450400, #    local_end 2011-10-28 02:00:00 (Fri)
  28800,
  0,
  'AWST',
      ],
      [
  63455421600, #    utc_start 2011-10-27 18:00:00 (Thu)
  63465526800, #      utc_end 2012-02-21 17:00:00 (Tue)
  63455461200, #  local_start 2011-10-28 05:00:00 (Fri)
  63465566400, #    local_end 2012-02-22 04:00:00 (Wed)
  39600,
  0,
  'CAST',
      ],
      [
  63465526800, #    utc_start 2012-02-21 17:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  63465555600, #  local_start 2012-02-22 01:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #    local_end
  28800,
  0,
  'AWST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ANTARCTICA_CASEY

    $main::fatpacked{"DateTime/TimeZone/Antarctica/Davis.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ANTARCTICA_DAVIS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/antarctica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Antarctica::Davis;
  $DateTime::TimeZone::Antarctica::Davis::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Antarctica::Davis::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  61726492800, #      utc_end 1957-01-13 00:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  61726492800, #    local_end 1957-01-13 00:00:00 (Sun)
  0,
  0,
  '-00',
      ],
      [
  61726492800, #    utc_start 1957-01-13 00:00:00 (Sun)
  61972621200, #      utc_end 1964-10-31 17:00:00 (Sat)
  61726518000, #  local_start 1957-01-13 07:00:00 (Sun)
  61972646400, #    local_end 1964-11-01 00:00:00 (Sun)
  25200,
  0,
  'DAVT',
      ],
      [
  61972621200, #    utc_start 1964-10-31 17:00:00 (Sat)
  62106825600, #      utc_end 1969-02-01 00:00:00 (Sat)
  61972621200, #  local_start 1964-10-31 17:00:00 (Sat)
  62106825600, #    local_end 1969-02-01 00:00:00 (Sat)
  0,
  0,
  '-00',
      ],
      [
  62106825600, #    utc_start 1969-02-01 00:00:00 (Sat)
  63391489200, #      utc_end 2009-10-17 19:00:00 (Sat)
  62106850800, #  local_start 1969-02-01 07:00:00 (Sat)
  63391514400, #    local_end 2009-10-18 02:00:00 (Sun)
  25200,
  0,
  'DAVT',
      ],
      [
  63391489200, #    utc_start 2009-10-17 19:00:00 (Sat)
  63403934400, #      utc_end 2010-03-10 20:00:00 (Wed)
  63391507200, #  local_start 2009-10-18 00:00:00 (Sun)
  63403952400, #    local_end 2010-03-11 01:00:00 (Thu)
  18000,
  0,
  'DAVT',
      ],
      [
  63403934400, #    utc_start 2010-03-10 20:00:00 (Wed)
  63455425200, #      utc_end 2011-10-27 19:00:00 (Thu)
  63403959600, #  local_start 2010-03-11 03:00:00 (Thu)
  63455450400, #    local_end 2011-10-28 02:00:00 (Fri)
  25200,
  0,
  'DAVT',
      ],
      [
  63455425200, #    utc_start 2011-10-27 19:00:00 (Thu)
  63465537600, #      utc_end 2012-02-21 20:00:00 (Tue)
  63455443200, #  local_start 2011-10-28 00:00:00 (Fri)
  63465555600, #    local_end 2012-02-22 01:00:00 (Wed)
  18000,
  0,
  'DAVT',
      ],
      [
  63465537600, #    utc_start 2012-02-21 20:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  63465562800, #  local_start 2012-02-22 03:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #    local_end
  25200,
  0,
  'DAVT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ANTARCTICA_DAVIS

    $main::fatpacked{"DateTime/TimeZone/Antarctica/DumontDUrville.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ANTARCTICA_DUMONTDURVILLE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/antarctica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Antarctica::DumontDUrville;
  $DateTime::TimeZone::Antarctica::DumontDUrville::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Antarctica::DumontDUrville::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  61409836800, #      utc_end 1947-01-01 00:00:00 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  61409836800, #    local_end 1947-01-01 00:00:00 (Wed)
  0,
  0,
  '-00',
      ],
      [
  61409836800, #    utc_start 1947-01-01 00:00:00 (Wed)
  61568690400, #      utc_end 1952-01-13 14:00:00 (Sun)
  61409872800, #  local_start 1947-01-01 10:00:00 (Wed)
  61568726400, #    local_end 1952-01-14 00:00:00 (Mon)
  36000,
  0,
  'PMT',
      ],
      [
  61568690400, #    utc_start 1952-01-13 14:00:00 (Sun)
  61720185600, #      utc_end 1956-11-01 00:00:00 (Thu)
  61568690400, #  local_start 1952-01-13 14:00:00 (Sun)
  61720185600, #    local_end 1956-11-01 00:00:00 (Thu)
  0,
  0,
  '-00',
      ],
      [
  61720185600, #    utc_start 1956-11-01 00:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  61720221600, #  local_start 1956-11-01 10:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  36000,
  0,
  'DDUT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ANTARCTICA_DUMONTDURVILLE

    $main::fatpacked{"DateTime/TimeZone/Antarctica/Macquarie.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ANTARCTICA_MACQUARIE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Antarctica::Macquarie;
  $DateTime::TimeZone::Antarctica::Macquarie::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Antarctica::Macquarie::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59921424000, #      utc_end 1899-11-01 00:00:00 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59921424000, #    local_end 1899-11-01 00:00:00 (Wed)
  0,
  0,
  '-00',
      ],
      [
  59921424000, #    utc_start 1899-11-01 00:00:00 (Wed)
  60455174400, #      utc_end 1916-09-30 16:00:00 (Sat)
  59921460000, #  local_start 1899-11-01 10:00:00 (Wed)
  60455210400, #    local_end 1916-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  60455174400, #    utc_start 1916-09-30 16:00:00 (Sat)
  60465790800, #      utc_end 1917-01-31 13:00:00 (Wed)
  60455214000, #  local_start 1916-10-01 03:00:00 (Sun)
  60465830400, #    local_end 1917-02-01 00:00:00 (Thu)
  39600,
  1,
  'AEDT',
      ],
      [
  60465790800, #    utc_start 1917-01-31 13:00:00 (Wed)
  60470290800, #      utc_end 1917-03-24 15:00:00 (Sat)
  60465830400, #  local_start 1917-02-01 00:00:00 (Thu)
  60470330400, #    local_end 1917-03-25 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  60470290800, #    utc_start 1917-03-24 15:00:00 (Sat)
  60533964000, #      utc_end 1919-03-31 14:00:00 (Mon)
  60470326800, #  local_start 1917-03-25 01:00:00 (Sun)
  60534000000, #    local_end 1919-04-01 00:00:00 (Tue)
  36000,
  0,
  'AEST',
      ],
      [
  60533964000, #    utc_start 1919-03-31 14:00:00 (Mon)
  61448630400, #      utc_end 1948-03-25 00:00:00 (Thu)
  60533964000, #  local_start 1919-03-31 14:00:00 (Mon)
  61448630400, #    local_end 1948-03-25 00:00:00 (Thu)
  0,
  0,
  '-00',
      ],
      [
  61448630400, #    utc_start 1948-03-25 00:00:00 (Thu)
  62040952800, #      utc_end 1966-12-31 14:00:00 (Sat)
  61448666400, #  local_start 1948-03-25 10:00:00 (Thu)
  62040988800, #    local_end 1967-01-01 00:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62040952800, #    utc_start 1966-12-31 14:00:00 (Sat)
  62064547200, #      utc_end 1967-09-30 16:00:00 (Sat)
  62040988800, #  local_start 1967-01-01 00:00:00 (Sun)
  62064583200, #    local_end 1967-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62064547200, #    utc_start 1967-09-30 16:00:00 (Sat)
  62080272000, #      utc_end 1968-03-30 16:00:00 (Sat)
  62064586800, #  local_start 1967-10-01 03:00:00 (Sun)
  62080311600, #    local_end 1968-03-31 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62080272000, #    utc_start 1968-03-30 16:00:00 (Sat)
  62098416000, #      utc_end 1968-10-26 16:00:00 (Sat)
  62080308000, #  local_start 1968-03-31 02:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62098416000, #    utc_start 1968-10-26 16:00:00 (Sat)
  62109907200, #      utc_end 1969-03-08 16:00:00 (Sat)
  62098455600, #  local_start 1968-10-27 03:00:00 (Sun)
  62109946800, #    local_end 1969-03-09 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62109907200, #    utc_start 1969-03-08 16:00:00 (Sat)
  62129865600, #      utc_end 1969-10-25 16:00:00 (Sat)
  62109943200, #  local_start 1969-03-09 02:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62129865600, #    utc_start 1969-10-25 16:00:00 (Sat)
  62141356800, #      utc_end 1970-03-07 16:00:00 (Sat)
  62129905200, #  local_start 1969-10-26 03:00:00 (Sun)
  62141396400, #    local_end 1970-03-08 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62141356800, #    utc_start 1970-03-07 16:00:00 (Sat)
  62161315200, #      utc_end 1970-10-24 16:00:00 (Sat)
  62141392800, #  local_start 1970-03-08 02:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62161315200, #    utc_start 1970-10-24 16:00:00 (Sat)
  62173411200, #      utc_end 1971-03-13 16:00:00 (Sat)
  62161354800, #  local_start 1970-10-25 03:00:00 (Sun)
  62173450800, #    local_end 1971-03-14 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62173411200, #    utc_start 1971-03-13 16:00:00 (Sat)
  62193369600, #      utc_end 1971-10-30 16:00:00 (Sat)
  62173447200, #  local_start 1971-03-14 02:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62193369600, #    utc_start 1971-10-30 16:00:00 (Sat)
  62203651200, #      utc_end 1972-02-26 16:00:00 (Sat)
  62193409200, #  local_start 1971-10-31 03:00:00 (Sun)
  62203690800, #    local_end 1972-02-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62203651200, #    utc_start 1972-02-26 16:00:00 (Sat)
  62224819200, #      utc_end 1972-10-28 16:00:00 (Sat)
  62203687200, #  local_start 1972-02-27 02:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62224819200, #    utc_start 1972-10-28 16:00:00 (Sat)
  62235705600, #      utc_end 1973-03-03 16:00:00 (Sat)
  62224858800, #  local_start 1972-10-29 03:00:00 (Sun)
  62235745200, #    local_end 1973-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62235705600, #    utc_start 1973-03-03 16:00:00 (Sat)
  62256268800, #      utc_end 1973-10-27 16:00:00 (Sat)
  62235741600, #  local_start 1973-03-04 02:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62256268800, #    utc_start 1973-10-27 16:00:00 (Sat)
  62267155200, #      utc_end 1974-03-02 16:00:00 (Sat)
  62256308400, #  local_start 1973-10-28 03:00:00 (Sun)
  62267194800, #    local_end 1974-03-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62267155200, #    utc_start 1974-03-02 16:00:00 (Sat)
  62287718400, #      utc_end 1974-10-26 16:00:00 (Sat)
  62267191200, #  local_start 1974-03-03 02:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62287718400, #    utc_start 1974-10-26 16:00:00 (Sat)
  62298604800, #      utc_end 1975-03-01 16:00:00 (Sat)
  62287758000, #  local_start 1974-10-27 03:00:00 (Sun)
  62298644400, #    local_end 1975-03-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62298604800, #    utc_start 1975-03-01 16:00:00 (Sat)
  62319168000, #      utc_end 1975-10-25 16:00:00 (Sat)
  62298640800, #  local_start 1975-03-02 02:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62319168000, #    utc_start 1975-10-25 16:00:00 (Sat)
  62330659200, #      utc_end 1976-03-06 16:00:00 (Sat)
  62319207600, #  local_start 1975-10-26 03:00:00 (Sun)
  62330698800, #    local_end 1976-03-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62330659200, #    utc_start 1976-03-06 16:00:00 (Sat)
  62351222400, #      utc_end 1976-10-30 16:00:00 (Sat)
  62330695200, #  local_start 1976-03-07 02:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62351222400, #    utc_start 1976-10-30 16:00:00 (Sat)
  62362108800, #      utc_end 1977-03-05 16:00:00 (Sat)
  62351262000, #  local_start 1976-10-31 03:00:00 (Sun)
  62362148400, #    local_end 1977-03-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62362108800, #    utc_start 1977-03-05 16:00:00 (Sat)
  62382672000, #      utc_end 1977-10-29 16:00:00 (Sat)
  62362144800, #  local_start 1977-03-06 02:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62382672000, #    utc_start 1977-10-29 16:00:00 (Sat)
  62393558400, #      utc_end 1978-03-04 16:00:00 (Sat)
  62382711600, #  local_start 1977-10-30 03:00:00 (Sun)
  62393598000, #    local_end 1978-03-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62393558400, #    utc_start 1978-03-04 16:00:00 (Sat)
  62414121600, #      utc_end 1978-10-28 16:00:00 (Sat)
  62393594400, #  local_start 1978-03-05 02:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62414121600, #    utc_start 1978-10-28 16:00:00 (Sat)
  62425008000, #      utc_end 1979-03-03 16:00:00 (Sat)
  62414161200, #  local_start 1978-10-29 03:00:00 (Sun)
  62425047600, #    local_end 1979-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62425008000, #    utc_start 1979-03-03 16:00:00 (Sat)
  62445571200, #      utc_end 1979-10-27 16:00:00 (Sat)
  62425044000, #  local_start 1979-03-04 02:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62445571200, #    utc_start 1979-10-27 16:00:00 (Sat)
  62456457600, #      utc_end 1980-03-01 16:00:00 (Sat)
  62445610800, #  local_start 1979-10-28 03:00:00 (Sun)
  62456497200, #    local_end 1980-03-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62456457600, #    utc_start 1980-03-01 16:00:00 (Sat)
  62477020800, #      utc_end 1980-10-25 16:00:00 (Sat)
  62456493600, #  local_start 1980-03-02 02:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62477020800, #    utc_start 1980-10-25 16:00:00 (Sat)
  62487907200, #      utc_end 1981-02-28 16:00:00 (Sat)
  62477060400, #  local_start 1980-10-26 03:00:00 (Sun)
  62487946800, #    local_end 1981-03-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62487907200, #    utc_start 1981-02-28 16:00:00 (Sat)
  62508470400, #      utc_end 1981-10-24 16:00:00 (Sat)
  62487943200, #  local_start 1981-03-01 02:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62508470400, #    utc_start 1981-10-24 16:00:00 (Sat)
  62521776000, #      utc_end 1982-03-27 16:00:00 (Sat)
  62508510000, #  local_start 1981-10-25 03:00:00 (Sun)
  62521815600, #    local_end 1982-03-28 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62521776000, #    utc_start 1982-03-27 16:00:00 (Sat)
  62540524800, #      utc_end 1982-10-30 16:00:00 (Sat)
  62521812000, #  local_start 1982-03-28 02:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62540524800, #    utc_start 1982-10-30 16:00:00 (Sat)
  62553225600, #      utc_end 1983-03-26 16:00:00 (Sat)
  62540564400, #  local_start 1982-10-31 03:00:00 (Sun)
  62553265200, #    local_end 1983-03-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62553225600, #    utc_start 1983-03-26 16:00:00 (Sat)
  62571974400, #      utc_end 1983-10-29 16:00:00 (Sat)
  62553261600, #  local_start 1983-03-27 02:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62571974400, #    utc_start 1983-10-29 16:00:00 (Sat)
  62582860800, #      utc_end 1984-03-03 16:00:00 (Sat)
  62572014000, #  local_start 1983-10-30 03:00:00 (Sun)
  62582900400, #    local_end 1984-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62582860800, #    utc_start 1984-03-03 16:00:00 (Sat)
  62603424000, #      utc_end 1984-10-27 16:00:00 (Sat)
  62582896800, #  local_start 1984-03-04 02:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62603424000, #    utc_start 1984-10-27 16:00:00 (Sat)
  62614310400, #      utc_end 1985-03-02 16:00:00 (Sat)
  62603463600, #  local_start 1984-10-28 03:00:00 (Sun)
  62614350000, #    local_end 1985-03-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62614310400, #    utc_start 1985-03-02 16:00:00 (Sat)
  62634873600, #      utc_end 1985-10-26 16:00:00 (Sat)
  62614346400, #  local_start 1985-03-03 02:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62634873600, #    utc_start 1985-10-26 16:00:00 (Sat)
  62645760000, #      utc_end 1986-03-01 16:00:00 (Sat)
  62634913200, #  local_start 1985-10-27 03:00:00 (Sun)
  62645799600, #    local_end 1986-03-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62645760000, #    utc_start 1986-03-01 16:00:00 (Sat)
  62665718400, #      utc_end 1986-10-18 16:00:00 (Sat)
  62645796000, #  local_start 1986-03-02 02:00:00 (Sun)
  62665754400, #    local_end 1986-10-19 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62665718400, #    utc_start 1986-10-18 16:00:00 (Sat)
  62678419200, #      utc_end 1987-03-14 16:00:00 (Sat)
  62665758000, #  local_start 1986-10-19 03:00:00 (Sun)
  62678458800, #    local_end 1987-03-15 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62678419200, #    utc_start 1987-03-14 16:00:00 (Sat)
  62697772800, #      utc_end 1987-10-24 16:00:00 (Sat)
  62678455200, #  local_start 1987-03-15 02:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62697772800, #    utc_start 1987-10-24 16:00:00 (Sat)
  62710473600, #      utc_end 1988-03-19 16:00:00 (Sat)
  62697812400, #  local_start 1987-10-25 03:00:00 (Sun)
  62710513200, #    local_end 1988-03-20 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62710473600, #    utc_start 1988-03-19 16:00:00 (Sat)
  62729827200, #      utc_end 1988-10-29 16:00:00 (Sat)
  62710509600, #  local_start 1988-03-20 02:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62729827200, #    utc_start 1988-10-29 16:00:00 (Sat)
  62741923200, #      utc_end 1989-03-18 16:00:00 (Sat)
  62729866800, #  local_start 1988-10-30 03:00:00 (Sun)
  62741962800, #    local_end 1989-03-19 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62741923200, #    utc_start 1989-03-18 16:00:00 (Sat)
  62761276800, #      utc_end 1989-10-28 16:00:00 (Sat)
  62741959200, #  local_start 1989-03-19 02:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62761276800, #    utc_start 1989-10-28 16:00:00 (Sat)
  62773372800, #      utc_end 1990-03-17 16:00:00 (Sat)
  62761316400, #  local_start 1989-10-29 03:00:00 (Sun)
  62773412400, #    local_end 1990-03-18 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62773372800, #    utc_start 1990-03-17 16:00:00 (Sat)
  62792726400, #      utc_end 1990-10-27 16:00:00 (Sat)
  62773408800, #  local_start 1990-03-18 02:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62792726400, #    utc_start 1990-10-27 16:00:00 (Sat)
  62806032000, #      utc_end 1991-03-30 16:00:00 (Sat)
  62792766000, #  local_start 1990-10-28 03:00:00 (Sun)
  62806071600, #    local_end 1991-03-31 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62806032000, #    utc_start 1991-03-30 16:00:00 (Sat)
  62822361600, #      utc_end 1991-10-05 16:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62822397600, #    local_end 1991-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62822361600, #    utc_start 1991-10-05 16:00:00 (Sat)
  62837481600, #      utc_end 1992-03-28 16:00:00 (Sat)
  62822401200, #  local_start 1991-10-06 03:00:00 (Sun)
  62837521200, #    local_end 1992-03-29 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62837481600, #    utc_start 1992-03-28 16:00:00 (Sat)
  62853811200, #      utc_end 1992-10-03 16:00:00 (Sat)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62853847200, #    local_end 1992-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62853811200, #    utc_start 1992-10-03 16:00:00 (Sat)
  62868931200, #      utc_end 1993-03-27 16:00:00 (Sat)
  62853850800, #  local_start 1992-10-04 03:00:00 (Sun)
  62868970800, #    local_end 1993-03-28 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62868931200, #    utc_start 1993-03-27 16:00:00 (Sat)
  62885260800, #      utc_end 1993-10-02 16:00:00 (Sat)
  62868967200, #  local_start 1993-03-28 02:00:00 (Sun)
  62885296800, #    local_end 1993-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62885260800, #    utc_start 1993-10-02 16:00:00 (Sat)
  62900380800, #      utc_end 1994-03-26 16:00:00 (Sat)
  62885300400, #  local_start 1993-10-03 03:00:00 (Sun)
  62900420400, #    local_end 1994-03-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62900380800, #    utc_start 1994-03-26 16:00:00 (Sat)
  62916710400, #      utc_end 1994-10-01 16:00:00 (Sat)
  62900416800, #  local_start 1994-03-27 02:00:00 (Sun)
  62916746400, #    local_end 1994-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62916710400, #    utc_start 1994-10-01 16:00:00 (Sat)
  62931830400, #      utc_end 1995-03-25 16:00:00 (Sat)
  62916750000, #  local_start 1994-10-02 03:00:00 (Sun)
  62931870000, #    local_end 1995-03-26 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62931830400, #    utc_start 1995-03-25 16:00:00 (Sat)
  62948160000, #      utc_end 1995-09-30 16:00:00 (Sat)
  62931866400, #  local_start 1995-03-26 02:00:00 (Sun)
  62948196000, #    local_end 1995-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62948160000, #    utc_start 1995-09-30 16:00:00 (Sat)
  62963884800, #      utc_end 1996-03-30 16:00:00 (Sat)
  62948199600, #  local_start 1995-10-01 03:00:00 (Sun)
  62963924400, #    local_end 1996-03-31 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62963884800, #    utc_start 1996-03-30 16:00:00 (Sat)
  62980214400, #      utc_end 1996-10-05 16:00:00 (Sat)
  62963920800, #  local_start 1996-03-31 02:00:00 (Sun)
  62980250400, #    local_end 1996-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62980214400, #    utc_start 1996-10-05 16:00:00 (Sat)
  62995334400, #      utc_end 1997-03-29 16:00:00 (Sat)
  62980254000, #  local_start 1996-10-06 03:00:00 (Sun)
  62995374000, #    local_end 1997-03-30 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62995334400, #    utc_start 1997-03-29 16:00:00 (Sat)
  63011664000, #      utc_end 1997-10-04 16:00:00 (Sat)
  62995370400, #  local_start 1997-03-30 02:00:00 (Sun)
  63011700000, #    local_end 1997-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63011664000, #    utc_start 1997-10-04 16:00:00 (Sat)
  63026784000, #      utc_end 1998-03-28 16:00:00 (Sat)
  63011703600, #  local_start 1997-10-05 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63026784000, #    utc_start 1998-03-28 16:00:00 (Sat)
  63043113600, #      utc_end 1998-10-03 16:00:00 (Sat)
  63026820000, #  local_start 1998-03-29 02:00:00 (Sun)
  63043149600, #    local_end 1998-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63043113600, #    utc_start 1998-10-03 16:00:00 (Sat)
  63058233600, #      utc_end 1999-03-27 16:00:00 (Sat)
  63043153200, #  local_start 1998-10-04 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63058233600, #    utc_start 1999-03-27 16:00:00 (Sat)
  63074563200, #      utc_end 1999-10-02 16:00:00 (Sat)
  63058269600, #  local_start 1999-03-28 02:00:00 (Sun)
  63074599200, #    local_end 1999-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63074563200, #    utc_start 1999-10-02 16:00:00 (Sat)
  63089683200, #      utc_end 2000-03-25 16:00:00 (Sat)
  63074602800, #  local_start 1999-10-03 03:00:00 (Sun)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63089683200, #    utc_start 2000-03-25 16:00:00 (Sat)
  63102988800, #      utc_end 2000-08-26 16:00:00 (Sat)
  63089719200, #  local_start 2000-03-26 02:00:00 (Sun)
  63103024800, #    local_end 2000-08-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63102988800, #    utc_start 2000-08-26 16:00:00 (Sat)
  63121132800, #      utc_end 2001-03-24 16:00:00 (Sat)
  63103028400, #  local_start 2000-08-27 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63121132800, #    utc_start 2001-03-24 16:00:00 (Sat)
  63138067200, #      utc_end 2001-10-06 16:00:00 (Sat)
  63121168800, #  local_start 2001-03-25 02:00:00 (Sun)
  63138103200, #    local_end 2001-10-07 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63138067200, #    utc_start 2001-10-06 16:00:00 (Sat)
  63153187200, #      utc_end 2002-03-30 16:00:00 (Sat)
  63138106800, #  local_start 2001-10-07 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63153187200, #    utc_start 2002-03-30 16:00:00 (Sat)
  63169516800, #      utc_end 2002-10-05 16:00:00 (Sat)
  63153223200, #  local_start 2002-03-31 02:00:00 (Sun)
  63169552800, #    local_end 2002-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63169516800, #    utc_start 2002-10-05 16:00:00 (Sat)
  63184636800, #      utc_end 2003-03-29 16:00:00 (Sat)
  63169556400, #  local_start 2002-10-06 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63184636800, #    utc_start 2003-03-29 16:00:00 (Sat)
  63200966400, #      utc_end 2003-10-04 16:00:00 (Sat)
  63184672800, #  local_start 2003-03-30 02:00:00 (Sun)
  63201002400, #    local_end 2003-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63200966400, #    utc_start 2003-10-04 16:00:00 (Sat)
  63216086400, #      utc_end 2004-03-27 16:00:00 (Sat)
  63201006000, #  local_start 2003-10-05 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63216086400, #    utc_start 2004-03-27 16:00:00 (Sat)
  63232416000, #      utc_end 2004-10-02 16:00:00 (Sat)
  63216122400, #  local_start 2004-03-28 02:00:00 (Sun)
  63232452000, #    local_end 2004-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63232416000, #    utc_start 2004-10-02 16:00:00 (Sat)
  63247536000, #      utc_end 2005-03-26 16:00:00 (Sat)
  63232455600, #  local_start 2004-10-03 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63247536000, #    utc_start 2005-03-26 16:00:00 (Sat)
  63263865600, #      utc_end 2005-10-01 16:00:00 (Sat)
  63247572000, #  local_start 2005-03-27 02:00:00 (Sun)
  63263901600, #    local_end 2005-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63263865600, #    utc_start 2005-10-01 16:00:00 (Sat)
  63279590400, #      utc_end 2006-04-01 16:00:00 (Sat)
  63263905200, #  local_start 2005-10-02 03:00:00 (Sun)
  63279630000, #    local_end 2006-04-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63279590400, #    utc_start 2006-04-01 16:00:00 (Sat)
  63295315200, #      utc_end 2006-09-30 16:00:00 (Sat)
  63279626400, #  local_start 2006-04-02 02:00:00 (Sun)
  63295351200, #    local_end 2006-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63295315200, #    utc_start 2006-09-30 16:00:00 (Sat)
  63310435200, #      utc_end 2007-03-24 16:00:00 (Sat)
  63295354800, #  local_start 2006-10-01 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63310435200, #    utc_start 2007-03-24 16:00:00 (Sat)
  63327369600, #      utc_end 2007-10-06 16:00:00 (Sat)
  63310471200, #  local_start 2007-03-25 02:00:00 (Sun)
  63327405600, #    local_end 2007-10-07 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63327369600, #    utc_start 2007-10-06 16:00:00 (Sat)
  63343094400, #      utc_end 2008-04-05 16:00:00 (Sat)
  63327409200, #  local_start 2007-10-07 03:00:00 (Sun)
  63343134000, #    local_end 2008-04-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63343094400, #    utc_start 2008-04-05 16:00:00 (Sat)
  63358819200, #      utc_end 2008-10-04 16:00:00 (Sat)
  63343130400, #  local_start 2008-04-06 02:00:00 (Sun)
  63358855200, #    local_end 2008-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63358819200, #    utc_start 2008-10-04 16:00:00 (Sat)
  63374544000, #      utc_end 2009-04-04 16:00:00 (Sat)
  63358858800, #  local_start 2008-10-05 03:00:00 (Sun)
  63374583600, #    local_end 2009-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63374544000, #    utc_start 2009-04-04 16:00:00 (Sat)
  63390268800, #      utc_end 2009-10-03 16:00:00 (Sat)
  63374580000, #  local_start 2009-04-05 02:00:00 (Sun)
  63390304800, #    local_end 2009-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63390268800, #    utc_start 2009-10-03 16:00:00 (Sat)
  63405993600, #      utc_end 2010-04-03 16:00:00 (Sat)
  63390308400, #  local_start 2009-10-04 03:00:00 (Sun)
  63406033200, #    local_end 2010-04-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63405993600, #    utc_start 2010-04-03 16:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63406033200, #  local_start 2010-04-04 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  39600,
  0,
  'MIST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {45}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ANTARCTICA_MACQUARIE

    $main::fatpacked{"DateTime/TimeZone/Antarctica/Mawson.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ANTARCTICA_MAWSON';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/antarctica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Antarctica::Mawson;
  $DateTime::TimeZone::Antarctica::Mawson::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Antarctica::Mawson::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  61634476800, #      utc_end 1954-02-13 00:00:00 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  61634476800, #    local_end 1954-02-13 00:00:00 (Sat)
  0,
  0,
  '-00',
      ],
      [
  61634476800, #    utc_start 1954-02-13 00:00:00 (Sat)
  63391492800, #      utc_end 2009-10-17 20:00:00 (Sat)
  61634498400, #  local_start 1954-02-13 06:00:00 (Sat)
  63391514400, #    local_end 2009-10-18 02:00:00 (Sun)
  21600,
  0,
  'MAWT',
      ],
      [
  63391492800, #    utc_start 2009-10-17 20:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63391510800, #  local_start 2009-10-18 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  18000,
  0,
  'MAWT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ANTARCTICA_MAWSON

    $main::fatpacked{"DateTime/TimeZone/Antarctica/Palmer.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ANTARCTICA_PALMER';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Antarctica::Palmer;
  $DateTime::TimeZone::Antarctica::Palmer::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Antarctica::Palmer::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  61977916800, #      utc_end 1965-01-01 00:00:00 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  61977916800, #    local_end 1965-01-01 00:00:00 (Fri)
  0,
  0,
  '-00',
      ],
      [
  61977916800, #    utc_start 1965-01-01 00:00:00 (Fri)
  61983025200, #      utc_end 1965-03-01 03:00:00 (Mon)
  61977906000, #  local_start 1964-12-31 21:00:00 (Thu)
  61983014400, #    local_end 1965-03-01 00:00:00 (Mon)
  -10800,
  1,
  'ARST',
      ],
      [
  61983025200, #    utc_start 1965-03-01 03:00:00 (Mon)
  62002728000, #      utc_end 1965-10-15 04:00:00 (Fri)
  61983010800, #  local_start 1965-02-28 23:00:00 (Sun)
  62002713600, #    local_end 1965-10-15 00:00:00 (Fri)
  -14400,
  0,
  'ART',
      ],
      [
  62002728000, #    utc_start 1965-10-15 04:00:00 (Fri)
  62014561200, #      utc_end 1966-03-01 03:00:00 (Tue)
  62002717200, #  local_start 1965-10-15 01:00:00 (Fri)
  62014550400, #    local_end 1966-03-01 00:00:00 (Tue)
  -10800,
  1,
  'ARST',
      ],
      [
  62014561200, #    utc_start 1966-03-01 03:00:00 (Tue)
  62034264000, #      utc_end 1966-10-15 04:00:00 (Sat)
  62014546800, #  local_start 1966-02-28 23:00:00 (Mon)
  62034249600, #    local_end 1966-10-15 00:00:00 (Sat)
  -14400,
  0,
  'ART',
      ],
      [
  62034264000, #    utc_start 1966-10-15 04:00:00 (Sat)
  62048862000, #      utc_end 1967-04-02 03:00:00 (Sun)
  62034253200, #  local_start 1966-10-15 01:00:00 (Sat)
  62048851200, #    local_end 1967-04-02 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62048862000, #    utc_start 1967-04-02 03:00:00 (Sun)
  62064590400, #      utc_end 1967-10-01 04:00:00 (Sun)
  62048847600, #  local_start 1967-04-01 23:00:00 (Sat)
  62064576000, #    local_end 1967-10-01 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62064590400, #    utc_start 1967-10-01 04:00:00 (Sun)
  62080916400, #      utc_end 1968-04-07 03:00:00 (Sun)
  62064579600, #  local_start 1967-10-01 01:00:00 (Sun)
  62080905600, #    local_end 1968-04-07 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62080916400, #    utc_start 1968-04-07 03:00:00 (Sun)
  62096644800, #      utc_end 1968-10-06 04:00:00 (Sun)
  62080902000, #  local_start 1968-04-06 23:00:00 (Sat)
  62096630400, #    local_end 1968-10-06 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62096644800, #    utc_start 1968-10-06 04:00:00 (Sun)
  62112366000, #      utc_end 1969-04-06 03:00:00 (Sun)
  62096634000, #  local_start 1968-10-06 01:00:00 (Sun)
  62112355200, #    local_end 1969-04-06 00:00:00 (Sun)
  -10800,
  1,
  'ARST',
      ],
      [
  62112366000, #    utc_start 1969-04-06 03:00:00 (Sun)
  62128094400, #      utc_end 1969-10-05 04:00:00 (Sun)
  62112351600, #  local_start 1969-04-05 23:00:00 (Sat)
  62128080000, #    local_end 1969-10-05 00:00:00 (Sun)
  -14400,
  0,
  'ART',
      ],
      [
  62128094400, #    utc_start 1969-10-05 04:00:00 (Sun)
  62263825200, #      utc_end 1974-01-23 03:00:00 (Wed)
  62128083600, #  local_start 1969-10-05 01:00:00 (Sun)
  62263814400, #    local_end 1974-01-23 00:00:00 (Wed)
  -10800,
  0,
  'ART',
      ],
      [
  62263825200, #    utc_start 1974-01-23 03:00:00 (Wed)
  62272288800, #      utc_end 1974-05-01 02:00:00 (Wed)
  62263818000, #  local_start 1974-01-23 01:00:00 (Wed)
  62272281600, #    local_end 1974-05-01 00:00:00 (Wed)
  -7200,
  1,
  'ARST',
      ],
      [
  62272288800, #    utc_start 1974-05-01 02:00:00 (Wed)
  62524753200, #      utc_end 1982-05-01 03:00:00 (Sat)
  62272278000, #  local_start 1974-04-30 23:00:00 (Tue)
  62524742400, #    local_end 1982-05-01 00:00:00 (Sat)
  -10800,
  0,
  'ART',
      ],
      [
  62524753200, #    utc_start 1982-05-01 03:00:00 (Sat)
  62538753600, #      utc_end 1982-10-10 04:00:00 (Sun)
  62524738800, #  local_start 1982-04-30 23:00:00 (Fri)
  62538739200, #    local_end 1982-10-10 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62538753600, #    utc_start 1982-10-10 04:00:00 (Sun)
  62552055600, #      utc_end 1983-03-13 03:00:00 (Sun)
  62538742800, #  local_start 1982-10-10 01:00:00 (Sun)
  62552044800, #    local_end 1983-03-13 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62552055600, #    utc_start 1983-03-13 03:00:00 (Sun)
  62570203200, #      utc_end 1983-10-09 04:00:00 (Sun)
  62552041200, #  local_start 1983-03-12 23:00:00 (Sat)
  62570188800, #    local_end 1983-10-09 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62570203200, #    utc_start 1983-10-09 04:00:00 (Sun)
  62583505200, #      utc_end 1984-03-11 03:00:00 (Sun)
  62570192400, #  local_start 1983-10-09 01:00:00 (Sun)
  62583494400, #    local_end 1984-03-11 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62583505200, #    utc_start 1984-03-11 03:00:00 (Sun)
  62602257600, #      utc_end 1984-10-14 04:00:00 (Sun)
  62583490800, #  local_start 1984-03-10 23:00:00 (Sat)
  62602243200, #    local_end 1984-10-14 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62602257600, #    utc_start 1984-10-14 04:00:00 (Sun)
  62614954800, #      utc_end 1985-03-10 03:00:00 (Sun)
  62602246800, #  local_start 1984-10-14 01:00:00 (Sun)
  62614944000, #    local_end 1985-03-10 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62614954800, #    utc_start 1985-03-10 03:00:00 (Sun)
  62633707200, #      utc_end 1985-10-13 04:00:00 (Sun)
  62614940400, #  local_start 1985-03-09 23:00:00 (Sat)
  62633692800, #    local_end 1985-10-13 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62633707200, #    utc_start 1985-10-13 04:00:00 (Sun)
  62646404400, #      utc_end 1986-03-09 03:00:00 (Sun)
  62633696400, #  local_start 1985-10-13 01:00:00 (Sun)
  62646393600, #    local_end 1986-03-09 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62646404400, #    utc_start 1986-03-09 03:00:00 (Sun)
  62665156800, #      utc_end 1986-10-12 04:00:00 (Sun)
  62646390000, #  local_start 1986-03-08 23:00:00 (Sat)
  62665142400, #    local_end 1986-10-12 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62665156800, #    utc_start 1986-10-12 04:00:00 (Sun)
  62680878000, #      utc_end 1987-04-12 03:00:00 (Sun)
  62665146000, #  local_start 1986-10-12 01:00:00 (Sun)
  62680867200, #    local_end 1987-04-12 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62680878000, #    utc_start 1987-04-12 03:00:00 (Sun)
  62696606400, #      utc_end 1987-10-11 04:00:00 (Sun)
  62680863600, #  local_start 1987-04-11 23:00:00 (Sat)
  62696592000, #    local_end 1987-10-11 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62696606400, #    utc_start 1987-10-11 04:00:00 (Sun)
  62709908400, #      utc_end 1988-03-13 03:00:00 (Sun)
  62696595600, #  local_start 1987-10-11 01:00:00 (Sun)
  62709897600, #    local_end 1988-03-13 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62709908400, #    utc_start 1988-03-13 03:00:00 (Sun)
  62728056000, #      utc_end 1988-10-09 04:00:00 (Sun)
  62709894000, #  local_start 1988-03-12 23:00:00 (Sat)
  62728041600, #    local_end 1988-10-09 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62728056000, #    utc_start 1988-10-09 04:00:00 (Sun)
  62741358000, #      utc_end 1989-03-12 03:00:00 (Sun)
  62728045200, #  local_start 1988-10-09 01:00:00 (Sun)
  62741347200, #    local_end 1989-03-12 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62741358000, #    utc_start 1989-03-12 03:00:00 (Sun)
  62760110400, #      utc_end 1989-10-15 04:00:00 (Sun)
  62741343600, #  local_start 1989-03-11 23:00:00 (Sat)
  62760096000, #    local_end 1989-10-15 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62760110400, #    utc_start 1989-10-15 04:00:00 (Sun)
  62772807600, #      utc_end 1990-03-11 03:00:00 (Sun)
  62760099600, #  local_start 1989-10-15 01:00:00 (Sun)
  62772796800, #    local_end 1990-03-11 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62772807600, #    utc_start 1990-03-11 03:00:00 (Sun)
  62789140800, #      utc_end 1990-09-16 04:00:00 (Sun)
  62772793200, #  local_start 1990-03-10 23:00:00 (Sat)
  62789126400, #    local_end 1990-09-16 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62789140800, #    utc_start 1990-09-16 04:00:00 (Sun)
  62804257200, #      utc_end 1991-03-10 03:00:00 (Sun)
  62789130000, #  local_start 1990-09-16 01:00:00 (Sun)
  62804246400, #    local_end 1991-03-10 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62804257200, #    utc_start 1991-03-10 03:00:00 (Sun)
  62823009600, #      utc_end 1991-10-13 04:00:00 (Sun)
  62804242800, #  local_start 1991-03-09 23:00:00 (Sat)
  62822995200, #    local_end 1991-10-13 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62823009600, #    utc_start 1991-10-13 04:00:00 (Sun)
  62836311600, #      utc_end 1992-03-15 03:00:00 (Sun)
  62822998800, #  local_start 1991-10-13 01:00:00 (Sun)
  62836300800, #    local_end 1992-03-15 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62836311600, #    utc_start 1992-03-15 03:00:00 (Sun)
  62854459200, #      utc_end 1992-10-11 04:00:00 (Sun)
  62836297200, #  local_start 1992-03-14 23:00:00 (Sat)
  62854444800, #    local_end 1992-10-11 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62854459200, #    utc_start 1992-10-11 04:00:00 (Sun)
  62867761200, #      utc_end 1993-03-14 03:00:00 (Sun)
  62854448400, #  local_start 1992-10-11 01:00:00 (Sun)
  62867750400, #    local_end 1993-03-14 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62867761200, #    utc_start 1993-03-14 03:00:00 (Sun)
  62885908800, #      utc_end 1993-10-10 04:00:00 (Sun)
  62867746800, #  local_start 1993-03-13 23:00:00 (Sat)
  62885894400, #    local_end 1993-10-10 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62885908800, #    utc_start 1993-10-10 04:00:00 (Sun)
  62899210800, #      utc_end 1994-03-13 03:00:00 (Sun)
  62885898000, #  local_start 1993-10-10 01:00:00 (Sun)
  62899200000, #    local_end 1994-03-13 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62899210800, #    utc_start 1994-03-13 03:00:00 (Sun)
  62917358400, #      utc_end 1994-10-09 04:00:00 (Sun)
  62899196400, #  local_start 1994-03-12 23:00:00 (Sat)
  62917344000, #    local_end 1994-10-09 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62917358400, #    utc_start 1994-10-09 04:00:00 (Sun)
  62930660400, #      utc_end 1995-03-12 03:00:00 (Sun)
  62917347600, #  local_start 1994-10-09 01:00:00 (Sun)
  62930649600, #    local_end 1995-03-12 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62930660400, #    utc_start 1995-03-12 03:00:00 (Sun)
  62949412800, #      utc_end 1995-10-15 04:00:00 (Sun)
  62930646000, #  local_start 1995-03-11 23:00:00 (Sat)
  62949398400, #    local_end 1995-10-15 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62949412800, #    utc_start 1995-10-15 04:00:00 (Sun)
  62962110000, #      utc_end 1996-03-10 03:00:00 (Sun)
  62949402000, #  local_start 1995-10-15 01:00:00 (Sun)
  62962099200, #    local_end 1996-03-10 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62962110000, #    utc_start 1996-03-10 03:00:00 (Sun)
  62980862400, #      utc_end 1996-10-13 04:00:00 (Sun)
  62962095600, #  local_start 1996-03-09 23:00:00 (Sat)
  62980848000, #    local_end 1996-10-13 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  62980862400, #    utc_start 1996-10-13 04:00:00 (Sun)
  62995374000, #      utc_end 1997-03-30 03:00:00 (Sun)
  62980851600, #  local_start 1996-10-13 01:00:00 (Sun)
  62995363200, #    local_end 1997-03-30 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  62995374000, #    utc_start 1997-03-30 03:00:00 (Sun)
  63012312000, #      utc_end 1997-10-12 04:00:00 (Sun)
  62995359600, #  local_start 1997-03-29 23:00:00 (Sat)
  63012297600, #    local_end 1997-10-12 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63012312000, #    utc_start 1997-10-12 04:00:00 (Sun)
  63025614000, #      utc_end 1998-03-15 03:00:00 (Sun)
  63012301200, #  local_start 1997-10-12 01:00:00 (Sun)
  63025603200, #    local_end 1998-03-15 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63025614000, #    utc_start 1998-03-15 03:00:00 (Sun)
  63042552000, #      utc_end 1998-09-27 04:00:00 (Sun)
  63025599600, #  local_start 1998-03-14 23:00:00 (Sat)
  63042537600, #    local_end 1998-09-27 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63042552000, #    utc_start 1998-09-27 04:00:00 (Sun)
  63058878000, #      utc_end 1999-04-04 03:00:00 (Sun)
  63042541200, #  local_start 1998-09-27 01:00:00 (Sun)
  63058867200, #    local_end 1999-04-04 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63058878000, #    utc_start 1999-04-04 03:00:00 (Sun)
  63075211200, #      utc_end 1999-10-10 04:00:00 (Sun)
  63058863600, #  local_start 1999-04-03 23:00:00 (Sat)
  63075196800, #    local_end 1999-10-10 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63075211200, #    utc_start 1999-10-10 04:00:00 (Sun)
  63088513200, #      utc_end 2000-03-12 03:00:00 (Sun)
  63075200400, #  local_start 1999-10-10 01:00:00 (Sun)
  63088502400, #    local_end 2000-03-12 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63088513200, #    utc_start 2000-03-12 03:00:00 (Sun)
  63107265600, #      utc_end 2000-10-15 04:00:00 (Sun)
  63088498800, #  local_start 2000-03-11 23:00:00 (Sat)
  63107251200, #    local_end 2000-10-15 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63107265600, #    utc_start 2000-10-15 04:00:00 (Sun)
  63119962800, #      utc_end 2001-03-11 03:00:00 (Sun)
  63107254800, #  local_start 2000-10-15 01:00:00 (Sun)
  63119952000, #    local_end 2001-03-11 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63119962800, #    utc_start 2001-03-11 03:00:00 (Sun)
  63138715200, #      utc_end 2001-10-14 04:00:00 (Sun)
  63119948400, #  local_start 2001-03-10 23:00:00 (Sat)
  63138700800, #    local_end 2001-10-14 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63138715200, #    utc_start 2001-10-14 04:00:00 (Sun)
  63151412400, #      utc_end 2002-03-10 03:00:00 (Sun)
  63138704400, #  local_start 2001-10-14 01:00:00 (Sun)
  63151401600, #    local_end 2002-03-10 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63151412400, #    utc_start 2002-03-10 03:00:00 (Sun)
  63170164800, #      utc_end 2002-10-13 04:00:00 (Sun)
  63151398000, #  local_start 2002-03-09 23:00:00 (Sat)
  63170150400, #    local_end 2002-10-13 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63170164800, #    utc_start 2002-10-13 04:00:00 (Sun)
  63182862000, #      utc_end 2003-03-09 03:00:00 (Sun)
  63170154000, #  local_start 2002-10-13 01:00:00 (Sun)
  63182851200, #    local_end 2003-03-09 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63182862000, #    utc_start 2003-03-09 03:00:00 (Sun)
  63201614400, #      utc_end 2003-10-12 04:00:00 (Sun)
  63182847600, #  local_start 2003-03-08 23:00:00 (Sat)
  63201600000, #    local_end 2003-10-12 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63201614400, #    utc_start 2003-10-12 04:00:00 (Sun)
  63214916400, #      utc_end 2004-03-14 03:00:00 (Sun)
  63201603600, #  local_start 2003-10-12 01:00:00 (Sun)
  63214905600, #    local_end 2004-03-14 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63214916400, #    utc_start 2004-03-14 03:00:00 (Sun)
  63233064000, #      utc_end 2004-10-10 04:00:00 (Sun)
  63214902000, #  local_start 2004-03-13 23:00:00 (Sat)
  63233049600, #    local_end 2004-10-10 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63233064000, #    utc_start 2004-10-10 04:00:00 (Sun)
  63246366000, #      utc_end 2005-03-13 03:00:00 (Sun)
  63233053200, #  local_start 2004-10-10 01:00:00 (Sun)
  63246355200, #    local_end 2005-03-13 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63246366000, #    utc_start 2005-03-13 03:00:00 (Sun)
  63264513600, #      utc_end 2005-10-09 04:00:00 (Sun)
  63246351600, #  local_start 2005-03-12 23:00:00 (Sat)
  63264499200, #    local_end 2005-10-09 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63264513600, #    utc_start 2005-10-09 04:00:00 (Sun)
  63277815600, #      utc_end 2006-03-12 03:00:00 (Sun)
  63264502800, #  local_start 2005-10-09 01:00:00 (Sun)
  63277804800, #    local_end 2006-03-12 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63277815600, #    utc_start 2006-03-12 03:00:00 (Sun)
  63296568000, #      utc_end 2006-10-15 04:00:00 (Sun)
  63277801200, #  local_start 2006-03-11 23:00:00 (Sat)
  63296553600, #    local_end 2006-10-15 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63296568000, #    utc_start 2006-10-15 04:00:00 (Sun)
  63309265200, #      utc_end 2007-03-11 03:00:00 (Sun)
  63296557200, #  local_start 2006-10-15 01:00:00 (Sun)
  63309254400, #    local_end 2007-03-11 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63309265200, #    utc_start 2007-03-11 03:00:00 (Sun)
  63328017600, #      utc_end 2007-10-14 04:00:00 (Sun)
  63309250800, #  local_start 2007-03-10 23:00:00 (Sat)
  63328003200, #    local_end 2007-10-14 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63328017600, #    utc_start 2007-10-14 04:00:00 (Sun)
  63342529200, #      utc_end 2008-03-30 03:00:00 (Sun)
  63328006800, #  local_start 2007-10-14 01:00:00 (Sun)
  63342518400, #    local_end 2008-03-30 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63342529200, #    utc_start 2008-03-30 03:00:00 (Sun)
  63359467200, #      utc_end 2008-10-12 04:00:00 (Sun)
  63342514800, #  local_start 2008-03-29 23:00:00 (Sat)
  63359452800, #    local_end 2008-10-12 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63359467200, #    utc_start 2008-10-12 04:00:00 (Sun)
  63372769200, #      utc_end 2009-03-15 03:00:00 (Sun)
  63359456400, #  local_start 2008-10-12 01:00:00 (Sun)
  63372758400, #    local_end 2009-03-15 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63372769200, #    utc_start 2009-03-15 03:00:00 (Sun)
  63390916800, #      utc_end 2009-10-11 04:00:00 (Sun)
  63372754800, #  local_start 2009-03-14 23:00:00 (Sat)
  63390902400, #    local_end 2009-10-11 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63390916800, #    utc_start 2009-10-11 04:00:00 (Sun)
  63406033200, #      utc_end 2010-04-04 03:00:00 (Sun)
  63390906000, #  local_start 2009-10-11 01:00:00 (Sun)
  63406022400, #    local_end 2010-04-04 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63406033200, #    utc_start 2010-04-04 03:00:00 (Sun)
  63422366400, #      utc_end 2010-10-10 04:00:00 (Sun)
  63406018800, #  local_start 2010-04-03 23:00:00 (Sat)
  63422352000, #    local_end 2010-10-10 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63422366400, #    utc_start 2010-10-10 04:00:00 (Sun)
  63440506800, #      utc_end 2011-05-08 03:00:00 (Sun)
  63422355600, #  local_start 2010-10-10 01:00:00 (Sun)
  63440496000, #    local_end 2011-05-08 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63440506800, #    utc_start 2011-05-08 03:00:00 (Sun)
  63449582400, #      utc_end 2011-08-21 04:00:00 (Sun)
  63440492400, #  local_start 2011-05-07 23:00:00 (Sat)
  63449568000, #    local_end 2011-08-21 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63449582400, #    utc_start 2011-08-21 04:00:00 (Sun)
  63471351600, #      utc_end 2012-04-29 03:00:00 (Sun)
  63449571600, #  local_start 2011-08-21 01:00:00 (Sun)
  63471340800, #    local_end 2012-04-29 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63471351600, #    utc_start 2012-04-29 03:00:00 (Sun)
  63482241600, #      utc_end 2012-09-02 04:00:00 (Sun)
  63471337200, #  local_start 2012-04-28 23:00:00 (Sat)
  63482227200, #    local_end 2012-09-02 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63482241600, #    utc_start 2012-09-02 04:00:00 (Sun)
  63502801200, #      utc_end 2013-04-28 03:00:00 (Sun)
  63482230800, #  local_start 2012-09-02 01:00:00 (Sun)
  63502790400, #    local_end 2013-04-28 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63502801200, #    utc_start 2013-04-28 03:00:00 (Sun)
  63514296000, #      utc_end 2013-09-08 04:00:00 (Sun)
  63502786800, #  local_start 2013-04-27 23:00:00 (Sat)
  63514281600, #    local_end 2013-09-08 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63514296000, #    utc_start 2013-09-08 04:00:00 (Sun)
  63534250800, #      utc_end 2014-04-27 03:00:00 (Sun)
  63514285200, #  local_start 2013-09-08 01:00:00 (Sun)
  63534240000, #    local_end 2014-04-27 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63534250800, #    utc_start 2014-04-27 03:00:00 (Sun)
  63545745600, #      utc_end 2014-09-07 04:00:00 (Sun)
  63534236400, #  local_start 2014-04-26 23:00:00 (Sat)
  63545731200, #    local_end 2014-09-07 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63545745600, #    utc_start 2014-09-07 04:00:00 (Sun)
  63598964400, #      utc_end 2016-05-15 03:00:00 (Sun)
  63545734800, #  local_start 2014-09-07 01:00:00 (Sun)
  63598953600, #    local_end 2016-05-15 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63598964400, #    utc_start 2016-05-15 03:00:00 (Sun)
  63606830400, #      utc_end 2016-08-14 04:00:00 (Sun)
  63598950000, #  local_start 2016-05-14 23:00:00 (Sat)
  63606816000, #    local_end 2016-08-14 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63606830400, #    utc_start 2016-08-14 04:00:00 (Sun)
  63630414000, #      utc_end 2017-05-14 03:00:00 (Sun)
  63606819600, #  local_start 2016-08-14 01:00:00 (Sun)
  63630403200, #    local_end 2017-05-14 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63630414000, #    utc_start 2017-05-14 03:00:00 (Sun)
  63638280000, #      utc_end 2017-08-13 04:00:00 (Sun)
  63630399600, #  local_start 2017-05-13 23:00:00 (Sat)
  63638265600, #    local_end 2017-08-13 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63638280000, #    utc_start 2017-08-13 04:00:00 (Sun)
  63661863600, #      utc_end 2018-05-13 03:00:00 (Sun)
  63638269200, #  local_start 2017-08-13 01:00:00 (Sun)
  63661852800, #    local_end 2018-05-13 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63661863600, #    utc_start 2018-05-13 03:00:00 (Sun)
  63669729600, #      utc_end 2018-08-12 04:00:00 (Sun)
  63661849200, #  local_start 2018-05-12 23:00:00 (Sat)
  63669715200, #    local_end 2018-08-12 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63669729600, #    utc_start 2018-08-12 04:00:00 (Sun)
  63693313200, #      utc_end 2019-05-12 03:00:00 (Sun)
  63669718800, #  local_start 2018-08-12 01:00:00 (Sun)
  63693302400, #    local_end 2019-05-12 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63693313200, #    utc_start 2019-05-12 03:00:00 (Sun)
  63701179200, #      utc_end 2019-08-11 04:00:00 (Sun)
  63693298800, #  local_start 2019-05-11 23:00:00 (Sat)
  63701164800, #    local_end 2019-08-11 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63701179200, #    utc_start 2019-08-11 04:00:00 (Sun)
  63724762800, #      utc_end 2020-05-10 03:00:00 (Sun)
  63701168400, #  local_start 2019-08-11 01:00:00 (Sun)
  63724752000, #    local_end 2020-05-10 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63724762800, #    utc_start 2020-05-10 03:00:00 (Sun)
  63732628800, #      utc_end 2020-08-09 04:00:00 (Sun)
  63724748400, #  local_start 2020-05-09 23:00:00 (Sat)
  63732614400, #    local_end 2020-08-09 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63732628800, #    utc_start 2020-08-09 04:00:00 (Sun)
  63756212400, #      utc_end 2021-05-09 03:00:00 (Sun)
  63732618000, #  local_start 2020-08-09 01:00:00 (Sun)
  63756201600, #    local_end 2021-05-09 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63756212400, #    utc_start 2021-05-09 03:00:00 (Sun)
  63764683200, #      utc_end 2021-08-15 04:00:00 (Sun)
  63756198000, #  local_start 2021-05-08 23:00:00 (Sat)
  63764668800, #    local_end 2021-08-15 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63764683200, #    utc_start 2021-08-15 04:00:00 (Sun)
  63788266800, #      utc_end 2022-05-15 03:00:00 (Sun)
  63764672400, #  local_start 2021-08-15 01:00:00 (Sun)
  63788256000, #    local_end 2022-05-15 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63788266800, #    utc_start 2022-05-15 03:00:00 (Sun)
  63796132800, #      utc_end 2022-08-14 04:00:00 (Sun)
  63788252400, #  local_start 2022-05-14 23:00:00 (Sat)
  63796118400, #    local_end 2022-08-14 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63796132800, #    utc_start 2022-08-14 04:00:00 (Sun)
  63819716400, #      utc_end 2023-05-14 03:00:00 (Sun)
  63796122000, #  local_start 2022-08-14 01:00:00 (Sun)
  63819705600, #    local_end 2023-05-14 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63819716400, #    utc_start 2023-05-14 03:00:00 (Sun)
  63827582400, #      utc_end 2023-08-13 04:00:00 (Sun)
  63819702000, #  local_start 2023-05-13 23:00:00 (Sat)
  63827568000, #    local_end 2023-08-13 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63827582400, #    utc_start 2023-08-13 04:00:00 (Sun)
  63851166000, #      utc_end 2024-05-12 03:00:00 (Sun)
  63827571600, #  local_start 2023-08-13 01:00:00 (Sun)
  63851155200, #    local_end 2024-05-12 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63851166000, #    utc_start 2024-05-12 03:00:00 (Sun)
  63859032000, #      utc_end 2024-08-11 04:00:00 (Sun)
  63851151600, #  local_start 2024-05-11 23:00:00 (Sat)
  63859017600, #    local_end 2024-08-11 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63859032000, #    utc_start 2024-08-11 04:00:00 (Sun)
  63882615600, #      utc_end 2025-05-11 03:00:00 (Sun)
  63859021200, #  local_start 2024-08-11 01:00:00 (Sun)
  63882604800, #    local_end 2025-05-11 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63882615600, #    utc_start 2025-05-11 03:00:00 (Sun)
  63890481600, #      utc_end 2025-08-10 04:00:00 (Sun)
  63882601200, #  local_start 2025-05-10 23:00:00 (Sat)
  63890467200, #    local_end 2025-08-10 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63890481600, #    utc_start 2025-08-10 04:00:00 (Sun)
  63914065200, #      utc_end 2026-05-10 03:00:00 (Sun)
  63890470800, #  local_start 2025-08-10 01:00:00 (Sun)
  63914054400, #    local_end 2026-05-10 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63914065200, #    utc_start 2026-05-10 03:00:00 (Sun)
  63921931200, #      utc_end 2026-08-09 04:00:00 (Sun)
  63914050800, #  local_start 2026-05-09 23:00:00 (Sat)
  63921916800, #    local_end 2026-08-09 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
      [
  63921931200, #    utc_start 2026-08-09 04:00:00 (Sun)
  63945514800, #      utc_end 2027-05-09 03:00:00 (Sun)
  63921920400, #  local_start 2026-08-09 01:00:00 (Sun)
  63945504000, #    local_end 2027-05-09 00:00:00 (Sun)
  -10800,
  1,
  'CLST',
      ],
      [
  63945514800, #    utc_start 2027-05-09 03:00:00 (Sun)
  63953985600, #      utc_end 2027-08-15 04:00:00 (Sun)
  63945500400, #  local_start 2027-05-08 23:00:00 (Sat)
  63953971200, #    local_end 2027-08-15 00:00:00 (Sun)
  -14400,
  0,
  'CLT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {51}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -14400 }
  
  my $last_observance = bless( {
    'format' => 'CL%sT',
    'gmtoff' => '-4:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723665,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723665,
      'utc_rd_secs' => 82800,
      'utc_year' => 1983
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -14400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723666,
      'local_rd_secs' => 10800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723666,
      'utc_rd_secs' => 10800,
      'utc_year' => 1983
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '3:00u',
      'from' => '2016',
      'in' => 'May',
      'letter' => '',
      'name' => 'Chile',
      'offset_from_std' => 0,
      'on' => 'Sun>=9',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '4:00u',
      'from' => '2016',
      'in' => 'Aug',
      'letter' => 'S',
      'name' => 'Chile',
      'offset_from_std' => 3600,
      'on' => 'Sun>=9',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ANTARCTICA_PALMER

    $main::fatpacked{"DateTime/TimeZone/Antarctica/Rothera.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ANTARCTICA_ROTHERA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/antarctica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Antarctica::Rothera;
  $DateTime::TimeZone::Antarctica::Rothera::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Antarctica::Rothera::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  62353929600, #      utc_end 1976-12-01 00:00:00 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  62353929600, #    local_end 1976-12-01 00:00:00 (Wed)
  0,
  0,
  '-00',
      ],
      [
  62353929600, #    utc_start 1976-12-01 00:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #      utc_end
  62353918800, #  local_start 1976-11-30 21:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'ROTT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ANTARCTICA_ROTHERA

    $main::fatpacked{"DateTime/TimeZone/Antarctica/Syowa.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ANTARCTICA_SYOWA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/antarctica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Antarctica::Syowa;
  $DateTime::TimeZone::Antarctica::Syowa::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Antarctica::Syowa::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  61727875200, #      utc_end 1957-01-29 00:00:00 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  61727875200, #    local_end 1957-01-29 00:00:00 (Tue)
  0,
  0,
  '-00',
      ],
      [
  61727875200, #    utc_start 1957-01-29 00:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  61727886000, #  local_start 1957-01-29 03:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  10800,
  0,
  'SYOT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ANTARCTICA_SYOWA

    $main::fatpacked{"DateTime/TimeZone/Antarctica/Troll.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ANTARCTICA_TROLL';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/antarctica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Antarctica::Troll;
  $DateTime::TimeZone::Antarctica::Troll::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Antarctica::Troll::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  63243849600, #      utc_end 2005-02-12 00:00:00 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  63243849600, #    local_end 2005-02-12 00:00:00 (Sat)
  0,
  0,
  '-00',
      ],
      [
  63243849600, #    utc_start 2005-02-12 00:00:00 (Sat)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63243849600, #  local_start 2005-02-12 00:00:00 (Sat)
  63247568400, #    local_end 2005-03-27 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279018000, #    local_end 2006-03-26 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63310467600, #    local_end 2007-03-25 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63342522000, #    local_end 2008-03-30 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63373971600, #    local_end 2009-03-29 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63405421200, #    local_end 2010-03-28 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424170000, #  local_start 2010-10-31 01:00:00 (Sun)
  63436870800, #    local_end 2011-03-27 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455619600, #  local_start 2011-10-30 01:00:00 (Sun)
  63468320400, #    local_end 2012-03-25 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487069200, #  local_start 2012-10-28 01:00:00 (Sun)
  63500374800, #    local_end 2013-03-31 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518518800, #  local_start 2013-10-27 01:00:00 (Sun)
  63531824400, #    local_end 2014-03-30 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63563274000, #    local_end 2015-03-29 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581418000, #  local_start 2015-10-25 01:00:00 (Sun)
  63594723600, #    local_end 2016-03-27 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613472400, #  local_start 2016-10-30 01:00:00 (Sun)
  63626173200, #    local_end 2017-03-26 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644922000, #  local_start 2017-10-29 01:00:00 (Sun)
  63657622800, #    local_end 2018-03-25 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676371600, #  local_start 2018-10-28 01:00:00 (Sun)
  63689677200, #    local_end 2019-03-31 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707821200, #  local_start 2019-10-27 01:00:00 (Sun)
  63721126800, #    local_end 2020-03-29 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739270800, #  local_start 2020-10-25 01:00:00 (Sun)
  63752576400, #    local_end 2021-03-28 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771325200, #  local_start 2021-10-31 01:00:00 (Sun)
  63784026000, #    local_end 2022-03-27 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802774800, #  local_start 2022-10-30 01:00:00 (Sun)
  63815475600, #    local_end 2023-03-26 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834224400, #  local_start 2023-10-29 01:00:00 (Sun)
  63847530000, #    local_end 2024-03-31 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865674000, #  local_start 2024-10-27 01:00:00 (Sun)
  63878979600, #    local_end 2025-03-30 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897123600, #  local_start 2025-10-26 01:00:00 (Sun)
  63910429200, #    local_end 2026-03-29 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928573200, #  local_start 2026-10-25 01:00:00 (Sun)
  63941878800, #    local_end 2027-03-28 01:00:00 (Sun)
  0,
  0,
  'UTC',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {23}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 0 }
  
  my $last_observance = bless( {
    'format' => '%s',
    'gmtoff' => '0:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 731989,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 731989,
      'utc_rd_secs' => 0,
      'utc_year' => 2006
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 0,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 731989,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 731989,
      'utc_rd_secs' => 0,
      'utc_year' => 2006
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '2004',
      'in' => 'Oct',
      'letter' => 'UTC',
      'name' => 'Troll',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '2005',
      'in' => 'Mar',
      'letter' => 'CEST',
      'name' => 'Troll',
      'offset_from_std' => 7200,
      'on' => 'lastSun',
      'save' => '2:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ANTARCTICA_TROLL

    $main::fatpacked{"DateTime/TimeZone/Antarctica/Vostok.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ANTARCTICA_VOSTOK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/antarctica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Antarctica::Vostok;
  $DateTime::TimeZone::Antarctica::Vostok::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Antarctica::Vostok::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  61755609600, #      utc_end 1957-12-16 00:00:00 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  61755609600, #    local_end 1957-12-16 00:00:00 (Mon)
  0,
  0,
  '-00',
      ],
      [
  61755609600, #    utc_start 1957-12-16 00:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  61755631200, #  local_start 1957-12-16 06:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  21600,
  0,
  'VOST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ANTARCTICA_VOSTOK

    $main::fatpacked{"DateTime/TimeZone/Asia/Almaty.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_ALMATY';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Almaty;
  $DateTime::TimeZone::Asia::Almaty::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Almaty::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694512732, #      utc_end 1924-05-01 18:52:12 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  18468,
  0,
  'LMT',
      ],
      [
  60694512732, #    utc_start 1924-05-01 18:52:12 (Thu)
  60888135600, #      utc_end 1930-06-20 19:00:00 (Fri)
  60694530732, #  local_start 1924-05-01 23:52:12 (Thu)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  18000,
  0,
  '+05',
      ],
      [
  60888135600, #    utc_start 1930-06-20 19:00:00 (Fri)
  62490592800, #      utc_end 1981-03-31 18:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  21600,
  0,
  '+06',
      ],
      [
  62490592800, #    utc_start 1981-03-31 18:00:00 (Tue)
  62506400400, #      utc_end 1981-09-30 17:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  25200,
  1,
  '+07',
      ],
      [
  62506400400, #    utc_start 1981-09-30 17:00:00 (Wed)
  62522128800, #      utc_end 1982-03-31 18:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  21600,
  0,
  '+06',
      ],
      [
  62522128800, #    utc_start 1982-03-31 18:00:00 (Wed)
  62537936400, #      utc_end 1982-09-30 17:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  25200,
  1,
  '+07',
      ],
      [
  62537936400, #    utc_start 1982-09-30 17:00:00 (Thu)
  62553664800, #      utc_end 1983-03-31 18:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  21600,
  0,
  '+06',
      ],
      [
  62553664800, #    utc_start 1983-03-31 18:00:00 (Thu)
  62569472400, #      utc_end 1983-09-30 17:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  25200,
  1,
  '+07',
      ],
      [
  62569472400, #    utc_start 1983-09-30 17:00:00 (Fri)
  62585287200, #      utc_end 1984-03-31 18:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62585287200, #    utc_start 1984-03-31 18:00:00 (Sat)
  62601019200, #      utc_end 1984-09-29 20:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62601019200, #    utc_start 1984-09-29 20:00:00 (Sat)
  62616744000, #      utc_end 1985-03-30 20:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62616744000, #    utc_start 1985-03-30 20:00:00 (Sat)
  62632468800, #      utc_end 1985-09-28 20:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62632468800, #    utc_start 1985-09-28 20:00:00 (Sat)
  62648193600, #      utc_end 1986-03-29 20:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62648193600, #    utc_start 1986-03-29 20:00:00 (Sat)
  62663918400, #      utc_end 1986-09-27 20:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62663918400, #    utc_start 1986-09-27 20:00:00 (Sat)
  62679643200, #      utc_end 1987-03-28 20:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62679643200, #    utc_start 1987-03-28 20:00:00 (Sat)
  62695368000, #      utc_end 1987-09-26 20:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62695368000, #    utc_start 1987-09-26 20:00:00 (Sat)
  62711092800, #      utc_end 1988-03-26 20:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62711092800, #    utc_start 1988-03-26 20:00:00 (Sat)
  62726817600, #      utc_end 1988-09-24 20:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62726817600, #    utc_start 1988-09-24 20:00:00 (Sat)
  62742542400, #      utc_end 1989-03-25 20:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62742542400, #    utc_start 1989-03-25 20:00:00 (Sat)
  62758267200, #      utc_end 1989-09-23 20:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62758267200, #    utc_start 1989-09-23 20:00:00 (Sat)
  62773992000, #      utc_end 1990-03-24 20:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62773992000, #    utc_start 1990-03-24 20:00:00 (Sat)
  62790321600, #      utc_end 1990-09-29 20:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62790321600, #    utc_start 1990-09-29 20:00:00 (Sat)
  62806046400, #      utc_end 1991-03-30 20:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62806046400, #    utc_start 1991-03-30 20:00:00 (Sat)
  62821774800, #      utc_end 1991-09-28 21:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62821774800, #    utc_start 1991-09-28 21:00:00 (Sat)
  62831451600, #      utc_end 1992-01-18 21:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62831451600, #    utc_start 1992-01-18 21:00:00 (Sat)
  62837496000, #      utc_end 1992-03-28 20:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62837496000, #    utc_start 1992-03-28 20:00:00 (Sat)
  62853220800, #      utc_end 1992-09-26 20:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62853220800, #    utc_start 1992-09-26 20:00:00 (Sat)
  62868945600, #      utc_end 1993-03-27 20:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62868945600, #    utc_start 1993-03-27 20:00:00 (Sat)
  62884670400, #      utc_end 1993-09-25 20:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62884670400, #    utc_start 1993-09-25 20:00:00 (Sat)
  62900395200, #      utc_end 1994-03-26 20:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62900395200, #    utc_start 1994-03-26 20:00:00 (Sat)
  62916120000, #      utc_end 1994-09-24 20:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62916120000, #    utc_start 1994-09-24 20:00:00 (Sat)
  62931844800, #      utc_end 1995-03-25 20:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62931844800, #    utc_start 1995-03-25 20:00:00 (Sat)
  62947569600, #      utc_end 1995-09-23 20:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62947569600, #    utc_start 1995-09-23 20:00:00 (Sat)
  62963899200, #      utc_end 1996-03-30 20:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62963899200, #    utc_start 1996-03-30 20:00:00 (Sat)
  62982043200, #      utc_end 1996-10-26 20:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62982043200, #    utc_start 1996-10-26 20:00:00 (Sat)
  62995348800, #      utc_end 1997-03-29 20:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62995348800, #    utc_start 1997-03-29 20:00:00 (Sat)
  63013492800, #      utc_end 1997-10-25 20:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63013492800, #    utc_start 1997-10-25 20:00:00 (Sat)
  63026798400, #      utc_end 1998-03-28 20:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63026798400, #    utc_start 1998-03-28 20:00:00 (Sat)
  63044942400, #      utc_end 1998-10-24 20:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63044942400, #    utc_start 1998-10-24 20:00:00 (Sat)
  63058248000, #      utc_end 1999-03-27 20:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63058248000, #    utc_start 1999-03-27 20:00:00 (Sat)
  63076996800, #      utc_end 1999-10-30 20:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63076996800, #    utc_start 1999-10-30 20:00:00 (Sat)
  63089697600, #      utc_end 2000-03-25 20:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63089697600, #    utc_start 2000-03-25 20:00:00 (Sat)
  63108446400, #      utc_end 2000-10-28 20:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63108446400, #    utc_start 2000-10-28 20:00:00 (Sat)
  63121147200, #      utc_end 2001-03-24 20:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63121147200, #    utc_start 2001-03-24 20:00:00 (Sat)
  63139896000, #      utc_end 2001-10-27 20:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63139896000, #    utc_start 2001-10-27 20:00:00 (Sat)
  63153201600, #      utc_end 2002-03-30 20:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63153201600, #    utc_start 2002-03-30 20:00:00 (Sat)
  63171345600, #      utc_end 2002-10-26 20:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63171345600, #    utc_start 2002-10-26 20:00:00 (Sat)
  63184651200, #      utc_end 2003-03-29 20:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63184651200, #    utc_start 2003-03-29 20:00:00 (Sat)
  63202795200, #      utc_end 2003-10-25 20:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63202795200, #    utc_start 2003-10-25 20:00:00 (Sat)
  63216100800, #      utc_end 2004-03-27 20:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63216100800, #    utc_start 2004-03-27 20:00:00 (Sat)
  63234849600, #      utc_end 2004-10-30 20:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63234849600, #    utc_start 2004-10-30 20:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  21600,
  0,
  '+06',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {24}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_ALMATY

    $main::fatpacked{"DateTime/TimeZone/Asia/Amman.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_AMMAN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Amman;
  $DateTime::TimeZone::Asia::Amman::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Amman::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60904906576, #      utc_end 1930-12-31 21:36:16 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60904915200, #    local_end 1931-01-01 00:00:00 (Thu)
  8624,
  0,
  'LMT',
      ],
      [
  60904906576, #    utc_start 1930-12-31 21:36:16 (Wed)
  62243848800, #      utc_end 1973-06-05 22:00:00 (Tue)
  60904913776, #  local_start 1930-12-31 23:36:16 (Wed)
  62243856000, #    local_end 1973-06-06 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62243848800, #    utc_start 1973-06-05 22:00:00 (Tue)
  62253954000, #      utc_end 1973-09-30 21:00:00 (Sun)
  62243859600, #  local_start 1973-06-06 01:00:00 (Wed)
  62253964800, #    local_end 1973-10-01 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62253954000, #    utc_start 1973-09-30 21:00:00 (Sun)
  62272274400, #      utc_end 1974-04-30 22:00:00 (Tue)
  62253961200, #  local_start 1973-09-30 23:00:00 (Sun)
  62272281600, #    local_end 1974-05-01 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62272274400, #    utc_start 1974-04-30 22:00:00 (Tue)
  62285490000, #      utc_end 1974-09-30 21:00:00 (Mon)
  62272285200, #  local_start 1974-05-01 01:00:00 (Wed)
  62285500800, #    local_end 1974-10-01 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  62285490000, #    utc_start 1974-09-30 21:00:00 (Mon)
  62303810400, #      utc_end 1975-04-30 22:00:00 (Wed)
  62285497200, #  local_start 1974-09-30 23:00:00 (Mon)
  62303817600, #    local_end 1975-05-01 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  62303810400, #    utc_start 1975-04-30 22:00:00 (Wed)
  62317026000, #      utc_end 1975-09-30 21:00:00 (Tue)
  62303821200, #  local_start 1975-05-01 01:00:00 (Thu)
  62317036800, #    local_end 1975-10-01 00:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  62317026000, #    utc_start 1975-09-30 21:00:00 (Tue)
  62335432800, #      utc_end 1976-04-30 22:00:00 (Fri)
  62317033200, #  local_start 1975-09-30 23:00:00 (Tue)
  62335440000, #    local_end 1976-05-01 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62335432800, #    utc_start 1976-04-30 22:00:00 (Fri)
  62351326800, #      utc_end 1976-10-31 21:00:00 (Sun)
  62335443600, #  local_start 1976-05-01 01:00:00 (Sat)
  62351337600, #    local_end 1976-11-01 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62351326800, #    utc_start 1976-10-31 21:00:00 (Sun)
  62366968800, #      utc_end 1977-04-30 22:00:00 (Sat)
  62351334000, #  local_start 1976-10-31 23:00:00 (Sun)
  62366976000, #    local_end 1977-05-01 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62366968800, #    utc_start 1977-04-30 22:00:00 (Sat)
  62380184400, #      utc_end 1977-09-30 21:00:00 (Fri)
  62366979600, #  local_start 1977-05-01 01:00:00 (Sun)
  62380195200, #    local_end 1977-10-01 00:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62380184400, #    utc_start 1977-09-30 21:00:00 (Fri)
  62398418400, #      utc_end 1978-04-29 22:00:00 (Sat)
  62380191600, #  local_start 1977-09-30 23:00:00 (Fri)
  62398425600, #    local_end 1978-04-30 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62398418400, #    utc_start 1978-04-29 22:00:00 (Sat)
  62411634000, #      utc_end 1978-09-29 21:00:00 (Fri)
  62398429200, #  local_start 1978-04-30 01:00:00 (Sun)
  62411644800, #    local_end 1978-09-30 00:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62411634000, #    utc_start 1978-09-29 21:00:00 (Fri)
  62616837600, #      utc_end 1985-03-31 22:00:00 (Sun)
  62411641200, #  local_start 1978-09-29 23:00:00 (Fri)
  62616844800, #    local_end 1985-04-01 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  62616837600, #    utc_start 1985-03-31 22:00:00 (Sun)
  62632645200, #      utc_end 1985-09-30 21:00:00 (Mon)
  62616848400, #  local_start 1985-04-01 01:00:00 (Mon)
  62632656000, #    local_end 1985-10-01 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  62632645200, #    utc_start 1985-09-30 21:00:00 (Mon)
  62648632800, #      utc_end 1986-04-03 22:00:00 (Thu)
  62632652400, #  local_start 1985-09-30 23:00:00 (Mon)
  62648640000, #    local_end 1986-04-04 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62648632800, #    utc_start 1986-04-03 22:00:00 (Thu)
  62664354000, #      utc_end 1986-10-02 21:00:00 (Thu)
  62648643600, #  local_start 1986-04-04 01:00:00 (Fri)
  62664364800, #    local_end 1986-10-03 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62664354000, #    utc_start 1986-10-02 21:00:00 (Thu)
  62680082400, #      utc_end 1987-04-02 22:00:00 (Thu)
  62664361200, #  local_start 1986-10-02 23:00:00 (Thu)
  62680089600, #    local_end 1987-04-03 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62680082400, #    utc_start 1987-04-02 22:00:00 (Thu)
  62695803600, #      utc_end 1987-10-01 21:00:00 (Thu)
  62680093200, #  local_start 1987-04-03 01:00:00 (Fri)
  62695814400, #    local_end 1987-10-02 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62695803600, #    utc_start 1987-10-01 21:00:00 (Thu)
  62711532000, #      utc_end 1988-03-31 22:00:00 (Thu)
  62695810800, #  local_start 1987-10-01 23:00:00 (Thu)
  62711539200, #    local_end 1988-04-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62711532000, #    utc_start 1988-03-31 22:00:00 (Thu)
  62727858000, #      utc_end 1988-10-06 21:00:00 (Thu)
  62711542800, #  local_start 1988-04-01 01:00:00 (Fri)
  62727868800, #    local_end 1988-10-07 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62727858000, #    utc_start 1988-10-06 21:00:00 (Thu)
  62746264800, #      utc_end 1989-05-07 22:00:00 (Sun)
  62727865200, #  local_start 1988-10-06 23:00:00 (Thu)
  62746272000, #    local_end 1989-05-08 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  62746264800, #    utc_start 1989-05-07 22:00:00 (Sun)
  62759307600, #      utc_end 1989-10-05 21:00:00 (Thu)
  62746275600, #  local_start 1989-05-08 01:00:00 (Mon)
  62759318400, #    local_end 1989-10-06 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62759307600, #    utc_start 1989-10-05 21:00:00 (Thu)
  62776850400, #      utc_end 1990-04-26 22:00:00 (Thu)
  62759314800, #  local_start 1989-10-05 23:00:00 (Thu)
  62776857600, #    local_end 1990-04-27 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62776850400, #    utc_start 1990-04-26 22:00:00 (Thu)
  62790757200, #      utc_end 1990-10-04 21:00:00 (Thu)
  62776861200, #  local_start 1990-04-27 01:00:00 (Fri)
  62790768000, #    local_end 1990-10-05 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62790757200, #    utc_start 1990-10-04 21:00:00 (Thu)
  62807522400, #      utc_end 1991-04-16 22:00:00 (Tue)
  62790764400, #  local_start 1990-10-04 23:00:00 (Thu)
  62807529600, #    local_end 1991-04-17 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62807522400, #    utc_start 1991-04-16 22:00:00 (Tue)
  62821602000, #      utc_end 1991-09-26 21:00:00 (Thu)
  62807533200, #  local_start 1991-04-17 01:00:00 (Wed)
  62821612800, #    local_end 1991-09-27 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62821602000, #    utc_start 1991-09-26 21:00:00 (Thu)
  62838540000, #      utc_end 1992-04-09 22:00:00 (Thu)
  62821609200, #  local_start 1991-09-26 23:00:00 (Thu)
  62838547200, #    local_end 1992-04-10 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62838540000, #    utc_start 1992-04-09 22:00:00 (Thu)
  62853656400, #      utc_end 1992-10-01 21:00:00 (Thu)
  62838550800, #  local_start 1992-04-10 01:00:00 (Fri)
  62853667200, #    local_end 1992-10-02 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62853656400, #    utc_start 1992-10-01 21:00:00 (Thu)
  62869384800, #      utc_end 1993-04-01 22:00:00 (Thu)
  62853663600, #  local_start 1992-10-01 23:00:00 (Thu)
  62869392000, #    local_end 1993-04-02 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62869384800, #    utc_start 1993-04-01 22:00:00 (Thu)
  62885106000, #      utc_end 1993-09-30 21:00:00 (Thu)
  62869395600, #  local_start 1993-04-02 01:00:00 (Fri)
  62885116800, #    local_end 1993-10-01 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62885106000, #    utc_start 1993-09-30 21:00:00 (Thu)
  62900834400, #      utc_end 1994-03-31 22:00:00 (Thu)
  62885113200, #  local_start 1993-09-30 23:00:00 (Thu)
  62900841600, #    local_end 1994-04-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62900834400, #    utc_start 1994-03-31 22:00:00 (Thu)
  62915346000, #      utc_end 1994-09-15 21:00:00 (Thu)
  62900845200, #  local_start 1994-04-01 01:00:00 (Fri)
  62915356800, #    local_end 1994-09-16 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62915346000, #    utc_start 1994-09-15 21:00:00 (Thu)
  62932888800, #      utc_end 1995-04-06 22:00:00 (Thu)
  62915353200, #  local_start 1994-09-15 23:00:00 (Thu)
  62932896000, #    local_end 1995-04-07 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62932888800, #    utc_start 1995-04-06 22:00:00 (Thu)
  62946799200, #      utc_end 1995-09-14 22:00:00 (Thu)
  62932899600, #  local_start 1995-04-07 01:00:00 (Fri)
  62946810000, #    local_end 1995-09-15 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62946799200, #    utc_start 1995-09-14 22:00:00 (Thu)
  62964338400, #      utc_end 1996-04-04 22:00:00 (Thu)
  62946806400, #  local_start 1995-09-15 00:00:00 (Fri)
  62964345600, #    local_end 1996-04-05 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62964338400, #    utc_start 1996-04-04 22:00:00 (Thu)
  62978853600, #      utc_end 1996-09-19 22:00:00 (Thu)
  62964349200, #  local_start 1996-04-05 01:00:00 (Fri)
  62978864400, #    local_end 1996-09-20 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62978853600, #    utc_start 1996-09-19 22:00:00 (Thu)
  62995788000, #      utc_end 1997-04-03 22:00:00 (Thu)
  62978860800, #  local_start 1996-09-20 00:00:00 (Fri)
  62995795200, #    local_end 1997-04-04 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62995788000, #    utc_start 1997-04-03 22:00:00 (Thu)
  63010303200, #      utc_end 1997-09-18 22:00:00 (Thu)
  62995798800, #  local_start 1997-04-04 01:00:00 (Fri)
  63010314000, #    local_end 1997-09-19 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63010303200, #    utc_start 1997-09-18 22:00:00 (Thu)
  63027237600, #      utc_end 1998-04-02 22:00:00 (Thu)
  63010310400, #  local_start 1997-09-19 00:00:00 (Fri)
  63027244800, #    local_end 1998-04-03 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63027237600, #    utc_start 1998-04-02 22:00:00 (Thu)
  63041752800, #      utc_end 1998-09-17 22:00:00 (Thu)
  63027248400, #  local_start 1998-04-03 01:00:00 (Fri)
  63041763600, #    local_end 1998-09-18 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63041752800, #    utc_start 1998-09-17 22:00:00 (Thu)
  63066463200, #      utc_end 1999-06-30 22:00:00 (Wed)
  63041760000, #  local_start 1998-09-18 00:00:00 (Fri)
  63066470400, #    local_end 1999-07-01 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  63066463200, #    utc_start 1999-06-30 22:00:00 (Wed)
  63073807200, #      utc_end 1999-09-23 22:00:00 (Thu)
  63066474000, #  local_start 1999-07-01 01:00:00 (Thu)
  63073818000, #    local_end 1999-09-24 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63073807200, #    utc_start 1999-09-23 22:00:00 (Thu)
  63090050400, #      utc_end 2000-03-29 22:00:00 (Wed)
  63073814400, #  local_start 1999-09-24 00:00:00 (Fri)
  63090057600, #    local_end 2000-03-30 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  63090050400, #    utc_start 2000-03-29 22:00:00 (Wed)
  63105861600, #      utc_end 2000-09-28 22:00:00 (Thu)
  63090061200, #  local_start 2000-03-30 01:00:00 (Thu)
  63105872400, #    local_end 2000-09-29 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63105861600, #    utc_start 2000-09-28 22:00:00 (Thu)
  63121500000, #      utc_end 2001-03-28 22:00:00 (Wed)
  63105868800, #  local_start 2000-09-29 00:00:00 (Fri)
  63121507200, #    local_end 2001-03-29 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  63121500000, #    utc_start 2001-03-28 22:00:00 (Wed)
  63137311200, #      utc_end 2001-09-27 22:00:00 (Thu)
  63121510800, #  local_start 2001-03-29 01:00:00 (Thu)
  63137322000, #    local_end 2001-09-28 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63137311200, #    utc_start 2001-09-27 22:00:00 (Thu)
  63153036000, #      utc_end 2002-03-28 22:00:00 (Thu)
  63137318400, #  local_start 2001-09-28 00:00:00 (Fri)
  63153043200, #    local_end 2002-03-29 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63153036000, #    utc_start 2002-03-28 22:00:00 (Thu)
  63168760800, #      utc_end 2002-09-26 22:00:00 (Thu)
  63153046800, #  local_start 2002-03-29 01:00:00 (Fri)
  63168771600, #    local_end 2002-09-27 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63168760800, #    utc_start 2002-09-26 22:00:00 (Thu)
  63184485600, #      utc_end 2003-03-27 22:00:00 (Thu)
  63168768000, #  local_start 2002-09-27 00:00:00 (Fri)
  63184492800, #    local_end 2003-03-28 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63184485600, #    utc_start 2003-03-27 22:00:00 (Thu)
  63202629600, #      utc_end 2003-10-23 22:00:00 (Thu)
  63184496400, #  local_start 2003-03-28 01:00:00 (Fri)
  63202640400, #    local_end 2003-10-24 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63202629600, #    utc_start 2003-10-23 22:00:00 (Thu)
  63215935200, #      utc_end 2004-03-25 22:00:00 (Thu)
  63202636800, #  local_start 2003-10-24 00:00:00 (Fri)
  63215942400, #    local_end 2004-03-26 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63215935200, #    utc_start 2004-03-25 22:00:00 (Thu)
  63233474400, #      utc_end 2004-10-14 22:00:00 (Thu)
  63215946000, #  local_start 2004-03-26 01:00:00 (Fri)
  63233485200, #    local_end 2004-10-15 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63233474400, #    utc_start 2004-10-14 22:00:00 (Thu)
  63247989600, #      utc_end 2005-03-31 22:00:00 (Thu)
  63233481600, #  local_start 2004-10-15 00:00:00 (Fri)
  63247996800, #    local_end 2005-04-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63247989600, #    utc_start 2005-03-31 22:00:00 (Thu)
  63263714400, #      utc_end 2005-09-29 22:00:00 (Thu)
  63248000400, #  local_start 2005-04-01 01:00:00 (Fri)
  63263725200, #    local_end 2005-09-30 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63263714400, #    utc_start 2005-09-29 22:00:00 (Thu)
  63279439200, #      utc_end 2006-03-30 22:00:00 (Thu)
  63263721600, #  local_start 2005-09-30 00:00:00 (Fri)
  63279446400, #    local_end 2006-03-31 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63279439200, #    utc_start 2006-03-30 22:00:00 (Thu)
  63297583200, #      utc_end 2006-10-26 22:00:00 (Thu)
  63279450000, #  local_start 2006-03-31 01:00:00 (Fri)
  63297594000, #    local_end 2006-10-27 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63297583200, #    utc_start 2006-10-26 22:00:00 (Thu)
  63310888800, #      utc_end 2007-03-29 22:00:00 (Thu)
  63297590400, #  local_start 2006-10-27 00:00:00 (Fri)
  63310896000, #    local_end 2007-03-30 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63310888800, #    utc_start 2007-03-29 22:00:00 (Thu)
  63329032800, #      utc_end 2007-10-25 22:00:00 (Thu)
  63310899600, #  local_start 2007-03-30 01:00:00 (Fri)
  63329043600, #    local_end 2007-10-26 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63329032800, #    utc_start 2007-10-25 22:00:00 (Thu)
  63342338400, #      utc_end 2008-03-27 22:00:00 (Thu)
  63329040000, #  local_start 2007-10-26 00:00:00 (Fri)
  63342345600, #    local_end 2008-03-28 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63342338400, #    utc_start 2008-03-27 22:00:00 (Thu)
  63361087200, #      utc_end 2008-10-30 22:00:00 (Thu)
  63342349200, #  local_start 2008-03-28 01:00:00 (Fri)
  63361098000, #    local_end 2008-10-31 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63361087200, #    utc_start 2008-10-30 22:00:00 (Thu)
  63373788000, #      utc_end 2009-03-26 22:00:00 (Thu)
  63361094400, #  local_start 2008-10-31 00:00:00 (Fri)
  63373795200, #    local_end 2009-03-27 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63373788000, #    utc_start 2009-03-26 22:00:00 (Thu)
  63392536800, #      utc_end 2009-10-29 22:00:00 (Thu)
  63373798800, #  local_start 2009-03-27 01:00:00 (Fri)
  63392547600, #    local_end 2009-10-30 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63392536800, #    utc_start 2009-10-29 22:00:00 (Thu)
  63405237600, #      utc_end 2010-03-25 22:00:00 (Thu)
  63392544000, #  local_start 2009-10-30 00:00:00 (Fri)
  63405244800, #    local_end 2010-03-26 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63405237600, #    utc_start 2010-03-25 22:00:00 (Thu)
  63423986400, #      utc_end 2010-10-28 22:00:00 (Thu)
  63405248400, #  local_start 2010-03-26 01:00:00 (Fri)
  63423997200, #    local_end 2010-10-29 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63423986400, #    utc_start 2010-10-28 22:00:00 (Thu)
  63437292000, #      utc_end 2011-03-31 22:00:00 (Thu)
  63423993600, #  local_start 2010-10-29 00:00:00 (Fri)
  63437299200, #    local_end 2011-04-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63437292000, #    utc_start 2011-03-31 22:00:00 (Thu)
  63455436000, #      utc_end 2011-10-27 22:00:00 (Thu)
  63437302800, #  local_start 2011-04-01 01:00:00 (Fri)
  63455446800, #    local_end 2011-10-28 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63455436000, #    utc_start 2011-10-27 22:00:00 (Thu)
  63468741600, #      utc_end 2012-03-29 22:00:00 (Thu)
  63455443200, #  local_start 2011-10-28 00:00:00 (Fri)
  63468748800, #    local_end 2012-03-30 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63468741600, #    utc_start 2012-03-29 22:00:00 (Thu)
  63523170000, #      utc_end 2013-12-19 21:00:00 (Thu)
  63468752400, #  local_start 2012-03-30 01:00:00 (Fri)
  63523180800, #    local_end 2013-12-20 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63523170000, #    utc_start 2013-12-19 21:00:00 (Thu)
  63531640800, #      utc_end 2014-03-27 22:00:00 (Thu)
  63523177200, #  local_start 2013-12-19 23:00:00 (Thu)
  63531648000, #    local_end 2014-03-28 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63531640800, #    utc_start 2014-03-27 22:00:00 (Thu)
  63550389600, #      utc_end 2014-10-30 22:00:00 (Thu)
  63531651600, #  local_start 2014-03-28 01:00:00 (Fri)
  63550400400, #    local_end 2014-10-31 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63550389600, #    utc_start 2014-10-30 22:00:00 (Thu)
  63563090400, #      utc_end 2015-03-26 22:00:00 (Thu)
  63550396800, #  local_start 2014-10-31 00:00:00 (Fri)
  63563097600, #    local_end 2015-03-27 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63563090400, #    utc_start 2015-03-26 22:00:00 (Thu)
  63581839200, #      utc_end 2015-10-29 22:00:00 (Thu)
  63563101200, #  local_start 2015-03-27 01:00:00 (Fri)
  63581850000, #    local_end 2015-10-30 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63581839200, #    utc_start 2015-10-29 22:00:00 (Thu)
  63595144800, #      utc_end 2016-03-31 22:00:00 (Thu)
  63581846400, #  local_start 2015-10-30 00:00:00 (Fri)
  63595152000, #    local_end 2016-04-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63595144800, #    utc_start 2016-03-31 22:00:00 (Thu)
  63613288800, #      utc_end 2016-10-27 22:00:00 (Thu)
  63595155600, #  local_start 2016-04-01 01:00:00 (Fri)
  63613299600, #    local_end 2016-10-28 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63613288800, #    utc_start 2016-10-27 22:00:00 (Thu)
  63626594400, #      utc_end 2017-03-30 22:00:00 (Thu)
  63613296000, #  local_start 2016-10-28 00:00:00 (Fri)
  63626601600, #    local_end 2017-03-31 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63626594400, #    utc_start 2017-03-30 22:00:00 (Thu)
  63644738400, #      utc_end 2017-10-26 22:00:00 (Thu)
  63626605200, #  local_start 2017-03-31 01:00:00 (Fri)
  63644749200, #    local_end 2017-10-27 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63644738400, #    utc_start 2017-10-26 22:00:00 (Thu)
  63658044000, #      utc_end 2018-03-29 22:00:00 (Thu)
  63644745600, #  local_start 2017-10-27 00:00:00 (Fri)
  63658051200, #    local_end 2018-03-30 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63658044000, #    utc_start 2018-03-29 22:00:00 (Thu)
  63676188000, #      utc_end 2018-10-25 22:00:00 (Thu)
  63658054800, #  local_start 2018-03-30 01:00:00 (Fri)
  63676198800, #    local_end 2018-10-26 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63676188000, #    utc_start 2018-10-25 22:00:00 (Thu)
  63689493600, #      utc_end 2019-03-28 22:00:00 (Thu)
  63676195200, #  local_start 2018-10-26 00:00:00 (Fri)
  63689500800, #    local_end 2019-03-29 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63689493600, #    utc_start 2019-03-28 22:00:00 (Thu)
  63707637600, #      utc_end 2019-10-24 22:00:00 (Thu)
  63689504400, #  local_start 2019-03-29 01:00:00 (Fri)
  63707648400, #    local_end 2019-10-25 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63707637600, #    utc_start 2019-10-24 22:00:00 (Thu)
  63720943200, #      utc_end 2020-03-26 22:00:00 (Thu)
  63707644800, #  local_start 2019-10-25 00:00:00 (Fri)
  63720950400, #    local_end 2020-03-27 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63720943200, #    utc_start 2020-03-26 22:00:00 (Thu)
  63739692000, #      utc_end 2020-10-29 22:00:00 (Thu)
  63720954000, #  local_start 2020-03-27 01:00:00 (Fri)
  63739702800, #    local_end 2020-10-30 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63739692000, #    utc_start 2020-10-29 22:00:00 (Thu)
  63752392800, #      utc_end 2021-03-25 22:00:00 (Thu)
  63739699200, #  local_start 2020-10-30 00:00:00 (Fri)
  63752400000, #    local_end 2021-03-26 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63752392800, #    utc_start 2021-03-25 22:00:00 (Thu)
  63771141600, #      utc_end 2021-10-28 22:00:00 (Thu)
  63752403600, #  local_start 2021-03-26 01:00:00 (Fri)
  63771152400, #    local_end 2021-10-29 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63771141600, #    utc_start 2021-10-28 22:00:00 (Thu)
  63784447200, #      utc_end 2022-03-31 22:00:00 (Thu)
  63771148800, #  local_start 2021-10-29 00:00:00 (Fri)
  63784454400, #    local_end 2022-04-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63784447200, #    utc_start 2022-03-31 22:00:00 (Thu)
  63802591200, #      utc_end 2022-10-27 22:00:00 (Thu)
  63784458000, #  local_start 2022-04-01 01:00:00 (Fri)
  63802602000, #    local_end 2022-10-28 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63802591200, #    utc_start 2022-10-27 22:00:00 (Thu)
  63815896800, #      utc_end 2023-03-30 22:00:00 (Thu)
  63802598400, #  local_start 2022-10-28 00:00:00 (Fri)
  63815904000, #    local_end 2023-03-31 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63815896800, #    utc_start 2023-03-30 22:00:00 (Thu)
  63834040800, #      utc_end 2023-10-26 22:00:00 (Thu)
  63815907600, #  local_start 2023-03-31 01:00:00 (Fri)
  63834051600, #    local_end 2023-10-27 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63834040800, #    utc_start 2023-10-26 22:00:00 (Thu)
  63847346400, #      utc_end 2024-03-28 22:00:00 (Thu)
  63834048000, #  local_start 2023-10-27 00:00:00 (Fri)
  63847353600, #    local_end 2024-03-29 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63847346400, #    utc_start 2024-03-28 22:00:00 (Thu)
  63865490400, #      utc_end 2024-10-24 22:00:00 (Thu)
  63847357200, #  local_start 2024-03-29 01:00:00 (Fri)
  63865501200, #    local_end 2024-10-25 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63865490400, #    utc_start 2024-10-24 22:00:00 (Thu)
  63878796000, #      utc_end 2025-03-27 22:00:00 (Thu)
  63865497600, #  local_start 2024-10-25 00:00:00 (Fri)
  63878803200, #    local_end 2025-03-28 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63878796000, #    utc_start 2025-03-27 22:00:00 (Thu)
  63897544800, #      utc_end 2025-10-30 22:00:00 (Thu)
  63878806800, #  local_start 2025-03-28 01:00:00 (Fri)
  63897555600, #    local_end 2025-10-31 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63897544800, #    utc_start 2025-10-30 22:00:00 (Thu)
  63910245600, #      utc_end 2026-03-26 22:00:00 (Thu)
  63897552000, #  local_start 2025-10-31 00:00:00 (Fri)
  63910252800, #    local_end 2026-03-27 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63910245600, #    utc_start 2026-03-26 22:00:00 (Thu)
  63928994400, #      utc_end 2026-10-29 22:00:00 (Thu)
  63910256400, #  local_start 2026-03-27 01:00:00 (Fri)
  63929005200, #    local_end 2026-10-30 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63928994400, #    utc_start 2026-10-29 22:00:00 (Thu)
  63941695200, #      utc_end 2027-03-25 22:00:00 (Thu)
  63929001600, #  local_start 2026-10-30 00:00:00 (Fri)
  63941702400, #    local_end 2027-03-26 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63941695200, #    utc_start 2027-03-25 22:00:00 (Thu)
  63960444000, #      utc_end 2027-10-28 22:00:00 (Thu)
  63941706000, #  local_start 2027-03-26 01:00:00 (Fri)
  63960454800, #    local_end 2027-10-29 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {48}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 704917,
      'local_rd_secs' => 84976,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 704917,
      'utc_rd_secs' => 84976,
      'utc_year' => 1931
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 704917,
      'local_rd_secs' => 77776,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 704917,
      'utc_rd_secs' => 77776,
      'utc_year' => 1931
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '24:00',
      'from' => '2014',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'Jordan',
      'offset_from_std' => 3600,
      'on' => 'lastThu',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '0:00s',
      'from' => '2014',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'Jordan',
      'offset_from_std' => 0,
      'on' => 'lastFri',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_AMMAN

    $main::fatpacked{"DateTime/TimeZone/Asia/Anadyr.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_ANADYR';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Anadyr;
  $DateTime::TimeZone::Asia::Anadyr::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Anadyr::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694488604, #      utc_end 1924-05-01 12:10:04 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  42596,
  0,
  'LMT',
      ],
      [
  60694488604, #    utc_start 1924-05-01 12:10:04 (Thu)
  60888110400, #      utc_end 1930-06-20 12:00:00 (Fri)
  60694531804, #  local_start 1924-05-02 00:10:04 (Fri)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  43200,
  0,
  'ANAT',
      ],
      [
  60888110400, #    utc_start 1930-06-20 12:00:00 (Fri)
  62490567600, #      utc_end 1981-03-31 11:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  46800,
  0,
  'ANAT',
      ],
      [
  62490567600, #    utc_start 1981-03-31 11:00:00 (Tue)
  62506375200, #      utc_end 1981-09-30 10:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  50400,
  1,
  'ANAST',
      ],
      [
  62506375200, #    utc_start 1981-09-30 10:00:00 (Wed)
  62522103600, #      utc_end 1982-03-31 11:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  46800,
  0,
  'ANAT',
      ],
      [
  62522103600, #    utc_start 1982-03-31 11:00:00 (Wed)
  62537914800, #      utc_end 1982-09-30 11:00:00 (Thu)
  62522150400, #  local_start 1982-04-01 00:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  46800,
  1,
  'ANAST',
      ],
      [
  62537914800, #    utc_start 1982-09-30 11:00:00 (Thu)
  62553643200, #      utc_end 1983-03-31 12:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  43200,
  0,
  'ANAT',
      ],
      [
  62553643200, #    utc_start 1983-03-31 12:00:00 (Thu)
  62569450800, #      utc_end 1983-09-30 11:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  46800,
  1,
  'ANAST',
      ],
      [
  62569450800, #    utc_start 1983-09-30 11:00:00 (Fri)
  62585265600, #      utc_end 1984-03-31 12:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  62585265600, #    utc_start 1984-03-31 12:00:00 (Sat)
  62600997600, #      utc_end 1984-09-29 14:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  62600997600, #    utc_start 1984-09-29 14:00:00 (Sat)
  62616722400, #      utc_end 1985-03-30 14:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  62616722400, #    utc_start 1985-03-30 14:00:00 (Sat)
  62632447200, #      utc_end 1985-09-28 14:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  62632447200, #    utc_start 1985-09-28 14:00:00 (Sat)
  62648172000, #      utc_end 1986-03-29 14:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  62648172000, #    utc_start 1986-03-29 14:00:00 (Sat)
  62663896800, #      utc_end 1986-09-27 14:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  62663896800, #    utc_start 1986-09-27 14:00:00 (Sat)
  62679621600, #      utc_end 1987-03-28 14:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  62679621600, #    utc_start 1987-03-28 14:00:00 (Sat)
  62695346400, #      utc_end 1987-09-26 14:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  62695346400, #    utc_start 1987-09-26 14:00:00 (Sat)
  62711071200, #      utc_end 1988-03-26 14:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  62711071200, #    utc_start 1988-03-26 14:00:00 (Sat)
  62726796000, #      utc_end 1988-09-24 14:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  62726796000, #    utc_start 1988-09-24 14:00:00 (Sat)
  62742520800, #      utc_end 1989-03-25 14:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  62742520800, #    utc_start 1989-03-25 14:00:00 (Sat)
  62758245600, #      utc_end 1989-09-23 14:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  62758245600, #    utc_start 1989-09-23 14:00:00 (Sat)
  62773970400, #      utc_end 1990-03-24 14:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  62773970400, #    utc_start 1990-03-24 14:00:00 (Sat)
  62790300000, #      utc_end 1990-09-29 14:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  62790300000, #    utc_start 1990-09-29 14:00:00 (Sat)
  62806024800, #      utc_end 1991-03-30 14:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  62806024800, #    utc_start 1991-03-30 14:00:00 (Sat)
  62821753200, #      utc_end 1991-09-28 15:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  43200,
  1,
  'ANAST',
      ],
      [
  62821753200, #    utc_start 1991-09-28 15:00:00 (Sat)
  62831430000, #      utc_end 1992-01-18 15:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  39600,
  0,
  'ANAT',
      ],
      [
  62831430000, #    utc_start 1992-01-18 15:00:00 (Sat)
  62837474400, #      utc_end 1992-03-28 14:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  62837474400, #    utc_start 1992-03-28 14:00:00 (Sat)
  62853199200, #      utc_end 1992-09-26 14:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  62853199200, #    utc_start 1992-09-26 14:00:00 (Sat)
  62868924000, #      utc_end 1993-03-27 14:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  62868924000, #    utc_start 1993-03-27 14:00:00 (Sat)
  62884648800, #      utc_end 1993-09-25 14:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  62884648800, #    utc_start 1993-09-25 14:00:00 (Sat)
  62900373600, #      utc_end 1994-03-26 14:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  62900373600, #    utc_start 1994-03-26 14:00:00 (Sat)
  62916098400, #      utc_end 1994-09-24 14:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  62916098400, #    utc_start 1994-09-24 14:00:00 (Sat)
  62931823200, #      utc_end 1995-03-25 14:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  62931823200, #    utc_start 1995-03-25 14:00:00 (Sat)
  62947548000, #      utc_end 1995-09-23 14:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  62947548000, #    utc_start 1995-09-23 14:00:00 (Sat)
  62963877600, #      utc_end 1996-03-30 14:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  62963877600, #    utc_start 1996-03-30 14:00:00 (Sat)
  62982021600, #      utc_end 1996-10-26 14:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  62982021600, #    utc_start 1996-10-26 14:00:00 (Sat)
  62995327200, #      utc_end 1997-03-29 14:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  62995327200, #    utc_start 1997-03-29 14:00:00 (Sat)
  63013471200, #      utc_end 1997-10-25 14:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  63013471200, #    utc_start 1997-10-25 14:00:00 (Sat)
  63026776800, #      utc_end 1998-03-28 14:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  63026776800, #    utc_start 1998-03-28 14:00:00 (Sat)
  63044920800, #      utc_end 1998-10-24 14:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  63044920800, #    utc_start 1998-10-24 14:00:00 (Sat)
  63058226400, #      utc_end 1999-03-27 14:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  63058226400, #    utc_start 1999-03-27 14:00:00 (Sat)
  63076975200, #      utc_end 1999-10-30 14:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  63076975200, #    utc_start 1999-10-30 14:00:00 (Sat)
  63089676000, #      utc_end 2000-03-25 14:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  63089676000, #    utc_start 2000-03-25 14:00:00 (Sat)
  63108424800, #      utc_end 2000-10-28 14:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  63108424800, #    utc_start 2000-10-28 14:00:00 (Sat)
  63121125600, #      utc_end 2001-03-24 14:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  63121125600, #    utc_start 2001-03-24 14:00:00 (Sat)
  63139874400, #      utc_end 2001-10-27 14:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  63139874400, #    utc_start 2001-10-27 14:00:00 (Sat)
  63153180000, #      utc_end 2002-03-30 14:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  63153180000, #    utc_start 2002-03-30 14:00:00 (Sat)
  63171324000, #      utc_end 2002-10-26 14:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  63171324000, #    utc_start 2002-10-26 14:00:00 (Sat)
  63184629600, #      utc_end 2003-03-29 14:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  63184629600, #    utc_start 2003-03-29 14:00:00 (Sat)
  63202773600, #      utc_end 2003-10-25 14:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  63202773600, #    utc_start 2003-10-25 14:00:00 (Sat)
  63216079200, #      utc_end 2004-03-27 14:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  63216079200, #    utc_start 2004-03-27 14:00:00 (Sat)
  63234828000, #      utc_end 2004-10-30 14:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  63234828000, #    utc_start 2004-10-30 14:00:00 (Sat)
  63247528800, #      utc_end 2005-03-26 14:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  63247528800, #    utc_start 2005-03-26 14:00:00 (Sat)
  63266277600, #      utc_end 2005-10-29 14:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  63266277600, #    utc_start 2005-10-29 14:00:00 (Sat)
  63278978400, #      utc_end 2006-03-25 14:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  63278978400, #    utc_start 2006-03-25 14:00:00 (Sat)
  63297727200, #      utc_end 2006-10-28 14:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  63297727200, #    utc_start 2006-10-28 14:00:00 (Sat)
  63310428000, #      utc_end 2007-03-24 14:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  63310428000, #    utc_start 2007-03-24 14:00:00 (Sat)
  63329176800, #      utc_end 2007-10-27 14:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  63329176800, #    utc_start 2007-10-27 14:00:00 (Sat)
  63342482400, #      utc_end 2008-03-29 14:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  63342482400, #    utc_start 2008-03-29 14:00:00 (Sat)
  63360626400, #      utc_end 2008-10-25 14:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  63360626400, #    utc_start 2008-10-25 14:00:00 (Sat)
  63373932000, #      utc_end 2009-03-28 14:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  63373932000, #    utc_start 2009-03-28 14:00:00 (Sat)
  63392076000, #      utc_end 2009-10-24 14:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  46800,
  1,
  'ANAST',
      ],
      [
  63392076000, #    utc_start 2009-10-24 14:00:00 (Sat)
  63405381600, #      utc_end 2010-03-27 14:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  43200,
  0,
  'ANAT',
      ],
      [
  63405381600, #    utc_start 2010-03-27 14:00:00 (Sat)
  63424134000, #      utc_end 2010-10-30 15:00:00 (Sat)
  63405424800, #  local_start 2010-03-28 02:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  43200,
  1,
  'ANAST',
      ],
      [
  63424134000, #    utc_start 2010-10-30 15:00:00 (Sat)
  63436834800, #      utc_end 2011-03-26 15:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  39600,
  0,
  'ANAT',
      ],
      [
  63436834800, #    utc_start 2011-03-26 15:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  43200,
  0,
  'ANAT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_ANADYR

    $main::fatpacked{"DateTime/TimeZone/Asia/Aqtau.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_AQTAU';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Aqtau;
  $DateTime::TimeZone::Asia::Aqtau::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Aqtau::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694519136, #      utc_end 1924-05-01 20:38:56 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  12064,
  0,
  'LMT',
      ],
      [
  60694519136, #    utc_start 1924-05-01 20:38:56 (Thu)
  60888139200, #      utc_end 1930-06-20 20:00:00 (Fri)
  60694533536, #  local_start 1924-05-02 00:38:56 (Fri)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  14400,
  0,
  '+04',
      ],
      [
  60888139200, #    utc_start 1930-06-20 20:00:00 (Fri)
  61914740400, #      utc_end 1962-12-31 19:00:00 (Mon)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  61914758400, #    local_end 1963-01-01 00:00:00 (Tue)
  18000,
  0,
  '+05',
      ],
      [
  61914740400, #    utc_start 1962-12-31 19:00:00 (Mon)
  62506407600, #      utc_end 1981-09-30 19:00:00 (Wed)
  61914758400, #  local_start 1963-01-01 00:00:00 (Tue)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  18000,
  0,
  '+05',
      ],
      [
  62506407600, #    utc_start 1981-09-30 19:00:00 (Wed)
  62522128800, #      utc_end 1982-03-31 18:00:00 (Wed)
  62506429200, #  local_start 1981-10-01 01:00:00 (Thu)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  21600,
  0,
  '+06',
      ],
      [
  62522128800, #    utc_start 1982-03-31 18:00:00 (Wed)
  62537940000, #      utc_end 1982-09-30 18:00:00 (Thu)
  62522150400, #  local_start 1982-04-01 00:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  21600,
  1,
  '+06',
      ],
      [
  62537940000, #    utc_start 1982-09-30 18:00:00 (Thu)
  62553668400, #      utc_end 1983-03-31 19:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  18000,
  0,
  '+05',
      ],
      [
  62553668400, #    utc_start 1983-03-31 19:00:00 (Thu)
  62569476000, #      utc_end 1983-09-30 18:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  21600,
  1,
  '+06',
      ],
      [
  62569476000, #    utc_start 1983-09-30 18:00:00 (Fri)
  62585290800, #      utc_end 1984-03-31 19:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62585290800, #    utc_start 1984-03-31 19:00:00 (Sat)
  62601022800, #      utc_end 1984-09-29 21:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62601022800, #    utc_start 1984-09-29 21:00:00 (Sat)
  62616747600, #      utc_end 1985-03-30 21:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62616747600, #    utc_start 1985-03-30 21:00:00 (Sat)
  62632472400, #      utc_end 1985-09-28 21:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62632472400, #    utc_start 1985-09-28 21:00:00 (Sat)
  62648197200, #      utc_end 1986-03-29 21:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62648197200, #    utc_start 1986-03-29 21:00:00 (Sat)
  62663922000, #      utc_end 1986-09-27 21:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62663922000, #    utc_start 1986-09-27 21:00:00 (Sat)
  62679646800, #      utc_end 1987-03-28 21:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62679646800, #    utc_start 1987-03-28 21:00:00 (Sat)
  62695371600, #      utc_end 1987-09-26 21:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62695371600, #    utc_start 1987-09-26 21:00:00 (Sat)
  62711096400, #      utc_end 1988-03-26 21:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62711096400, #    utc_start 1988-03-26 21:00:00 (Sat)
  62726821200, #      utc_end 1988-09-24 21:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62726821200, #    utc_start 1988-09-24 21:00:00 (Sat)
  62742546000, #      utc_end 1989-03-25 21:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62742546000, #    utc_start 1989-03-25 21:00:00 (Sat)
  62758270800, #      utc_end 1989-09-23 21:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62758270800, #    utc_start 1989-09-23 21:00:00 (Sat)
  62773995600, #      utc_end 1990-03-24 21:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62773995600, #    utc_start 1990-03-24 21:00:00 (Sat)
  62790325200, #      utc_end 1990-09-29 21:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62790325200, #    utc_start 1990-09-29 21:00:00 (Sat)
  62806050000, #      utc_end 1991-03-30 21:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62806050000, #    utc_start 1991-03-30 21:00:00 (Sat)
  62821778400, #      utc_end 1991-09-28 22:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62821778400, #    utc_start 1991-09-28 22:00:00 (Sat)
  62831455200, #      utc_end 1992-01-18 22:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62831455200, #    utc_start 1992-01-18 22:00:00 (Sat)
  62837499600, #      utc_end 1992-03-28 21:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62837499600, #    utc_start 1992-03-28 21:00:00 (Sat)
  62853224400, #      utc_end 1992-09-26 21:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62853224400, #    utc_start 1992-09-26 21:00:00 (Sat)
  62868949200, #      utc_end 1993-03-27 21:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62868949200, #    utc_start 1993-03-27 21:00:00 (Sat)
  62884674000, #      utc_end 1993-09-25 21:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62884674000, #    utc_start 1993-09-25 21:00:00 (Sat)
  62900398800, #      utc_end 1994-03-26 21:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62900398800, #    utc_start 1994-03-26 21:00:00 (Sat)
  62916123600, #      utc_end 1994-09-24 21:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62916123600, #    utc_start 1994-09-24 21:00:00 (Sat)
  62931852000, #      utc_end 1995-03-25 22:00:00 (Sat)
  62916138000, #  local_start 1994-09-25 01:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62931852000, #    utc_start 1995-03-25 22:00:00 (Sat)
  62947576800, #      utc_end 1995-09-23 22:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62947576800, #    utc_start 1995-09-23 22:00:00 (Sat)
  62963906400, #      utc_end 1996-03-30 22:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62963906400, #    utc_start 1996-03-30 22:00:00 (Sat)
  62982050400, #      utc_end 1996-10-26 22:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62982050400, #    utc_start 1996-10-26 22:00:00 (Sat)
  62995356000, #      utc_end 1997-03-29 22:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62995356000, #    utc_start 1997-03-29 22:00:00 (Sat)
  63013500000, #      utc_end 1997-10-25 22:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  63013500000, #    utc_start 1997-10-25 22:00:00 (Sat)
  63026805600, #      utc_end 1998-03-28 22:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63026805600, #    utc_start 1998-03-28 22:00:00 (Sat)
  63044949600, #      utc_end 1998-10-24 22:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  63044949600, #    utc_start 1998-10-24 22:00:00 (Sat)
  63058255200, #      utc_end 1999-03-27 22:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63058255200, #    utc_start 1999-03-27 22:00:00 (Sat)
  63077004000, #      utc_end 1999-10-30 22:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  63077004000, #    utc_start 1999-10-30 22:00:00 (Sat)
  63089704800, #      utc_end 2000-03-25 22:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63089704800, #    utc_start 2000-03-25 22:00:00 (Sat)
  63108453600, #      utc_end 2000-10-28 22:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  63108453600, #    utc_start 2000-10-28 22:00:00 (Sat)
  63121154400, #      utc_end 2001-03-24 22:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63121154400, #    utc_start 2001-03-24 22:00:00 (Sat)
  63139903200, #      utc_end 2001-10-27 22:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  63139903200, #    utc_start 2001-10-27 22:00:00 (Sat)
  63153208800, #      utc_end 2002-03-30 22:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63153208800, #    utc_start 2002-03-30 22:00:00 (Sat)
  63171352800, #      utc_end 2002-10-26 22:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  63171352800, #    utc_start 2002-10-26 22:00:00 (Sat)
  63184658400, #      utc_end 2003-03-29 22:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63184658400, #    utc_start 2003-03-29 22:00:00 (Sat)
  63202802400, #      utc_end 2003-10-25 22:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  63202802400, #    utc_start 2003-10-25 22:00:00 (Sat)
  63216108000, #      utc_end 2004-03-27 22:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63216108000, #    utc_start 2004-03-27 22:00:00 (Sat)
  63234856800, #      utc_end 2004-10-30 22:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  63234856800, #    utc_start 2004-10-30 22:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  18000,
  0,
  '+05',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {23}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_AQTAU

    $main::fatpacked{"DateTime/TimeZone/Asia/Aqtobe.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_AQTOBE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Aqtobe;
  $DateTime::TimeZone::Asia::Aqtobe::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Aqtobe::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694517480, #      utc_end 1924-05-01 20:11:20 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  13720,
  0,
  'LMT',
      ],
      [
  60694517480, #    utc_start 1924-05-01 20:11:20 (Thu)
  60888139200, #      utc_end 1930-06-20 20:00:00 (Fri)
  60694531880, #  local_start 1924-05-02 00:11:20 (Fri)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  14400,
  0,
  '+04',
      ],
      [
  60888139200, #    utc_start 1930-06-20 20:00:00 (Fri)
  62490596400, #      utc_end 1981-03-31 19:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  18000,
  0,
  '+05',
      ],
      [
  62490596400, #    utc_start 1981-03-31 19:00:00 (Tue)
  62506404000, #      utc_end 1981-09-30 18:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  21600,
  1,
  '+06',
      ],
      [
  62506404000, #    utc_start 1981-09-30 18:00:00 (Wed)
  62522128800, #      utc_end 1982-03-31 18:00:00 (Wed)
  62506425600, #  local_start 1981-10-01 00:00:00 (Thu)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  21600,
  0,
  '+06',
      ],
      [
  62522128800, #    utc_start 1982-03-31 18:00:00 (Wed)
  62537940000, #      utc_end 1982-09-30 18:00:00 (Thu)
  62522150400, #  local_start 1982-04-01 00:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  21600,
  1,
  '+06',
      ],
      [
  62537940000, #    utc_start 1982-09-30 18:00:00 (Thu)
  62553668400, #      utc_end 1983-03-31 19:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  18000,
  0,
  '+05',
      ],
      [
  62553668400, #    utc_start 1983-03-31 19:00:00 (Thu)
  62569476000, #      utc_end 1983-09-30 18:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  21600,
  1,
  '+06',
      ],
      [
  62569476000, #    utc_start 1983-09-30 18:00:00 (Fri)
  62585290800, #      utc_end 1984-03-31 19:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62585290800, #    utc_start 1984-03-31 19:00:00 (Sat)
  62601022800, #      utc_end 1984-09-29 21:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62601022800, #    utc_start 1984-09-29 21:00:00 (Sat)
  62616747600, #      utc_end 1985-03-30 21:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62616747600, #    utc_start 1985-03-30 21:00:00 (Sat)
  62632472400, #      utc_end 1985-09-28 21:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62632472400, #    utc_start 1985-09-28 21:00:00 (Sat)
  62648197200, #      utc_end 1986-03-29 21:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62648197200, #    utc_start 1986-03-29 21:00:00 (Sat)
  62663922000, #      utc_end 1986-09-27 21:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62663922000, #    utc_start 1986-09-27 21:00:00 (Sat)
  62679646800, #      utc_end 1987-03-28 21:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62679646800, #    utc_start 1987-03-28 21:00:00 (Sat)
  62695371600, #      utc_end 1987-09-26 21:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62695371600, #    utc_start 1987-09-26 21:00:00 (Sat)
  62711096400, #      utc_end 1988-03-26 21:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62711096400, #    utc_start 1988-03-26 21:00:00 (Sat)
  62726821200, #      utc_end 1988-09-24 21:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62726821200, #    utc_start 1988-09-24 21:00:00 (Sat)
  62742546000, #      utc_end 1989-03-25 21:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62742546000, #    utc_start 1989-03-25 21:00:00 (Sat)
  62758270800, #      utc_end 1989-09-23 21:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62758270800, #    utc_start 1989-09-23 21:00:00 (Sat)
  62773995600, #      utc_end 1990-03-24 21:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62773995600, #    utc_start 1990-03-24 21:00:00 (Sat)
  62790325200, #      utc_end 1990-09-29 21:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62790325200, #    utc_start 1990-09-29 21:00:00 (Sat)
  62806050000, #      utc_end 1991-03-30 21:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62806050000, #    utc_start 1991-03-30 21:00:00 (Sat)
  62821778400, #      utc_end 1991-09-28 22:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62821778400, #    utc_start 1991-09-28 22:00:00 (Sat)
  62831455200, #      utc_end 1992-01-18 22:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62831455200, #    utc_start 1992-01-18 22:00:00 (Sat)
  62837499600, #      utc_end 1992-03-28 21:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62837499600, #    utc_start 1992-03-28 21:00:00 (Sat)
  62853224400, #      utc_end 1992-09-26 21:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62853224400, #    utc_start 1992-09-26 21:00:00 (Sat)
  62868949200, #      utc_end 1993-03-27 21:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62868949200, #    utc_start 1993-03-27 21:00:00 (Sat)
  62884674000, #      utc_end 1993-09-25 21:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62884674000, #    utc_start 1993-09-25 21:00:00 (Sat)
  62900398800, #      utc_end 1994-03-26 21:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62900398800, #    utc_start 1994-03-26 21:00:00 (Sat)
  62916123600, #      utc_end 1994-09-24 21:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62916123600, #    utc_start 1994-09-24 21:00:00 (Sat)
  62931848400, #      utc_end 1995-03-25 21:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62931848400, #    utc_start 1995-03-25 21:00:00 (Sat)
  62947573200, #      utc_end 1995-09-23 21:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62947573200, #    utc_start 1995-09-23 21:00:00 (Sat)
  62963902800, #      utc_end 1996-03-30 21:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62963902800, #    utc_start 1996-03-30 21:00:00 (Sat)
  62982046800, #      utc_end 1996-10-26 21:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62982046800, #    utc_start 1996-10-26 21:00:00 (Sat)
  62995352400, #      utc_end 1997-03-29 21:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62995352400, #    utc_start 1997-03-29 21:00:00 (Sat)
  63013496400, #      utc_end 1997-10-25 21:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  63013496400, #    utc_start 1997-10-25 21:00:00 (Sat)
  63026802000, #      utc_end 1998-03-28 21:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  63026802000, #    utc_start 1998-03-28 21:00:00 (Sat)
  63044946000, #      utc_end 1998-10-24 21:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  63044946000, #    utc_start 1998-10-24 21:00:00 (Sat)
  63058251600, #      utc_end 1999-03-27 21:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  63058251600, #    utc_start 1999-03-27 21:00:00 (Sat)
  63077000400, #      utc_end 1999-10-30 21:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  63077000400, #    utc_start 1999-10-30 21:00:00 (Sat)
  63089701200, #      utc_end 2000-03-25 21:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  63089701200, #    utc_start 2000-03-25 21:00:00 (Sat)
  63108450000, #      utc_end 2000-10-28 21:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  63108450000, #    utc_start 2000-10-28 21:00:00 (Sat)
  63121150800, #      utc_end 2001-03-24 21:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  63121150800, #    utc_start 2001-03-24 21:00:00 (Sat)
  63139899600, #      utc_end 2001-10-27 21:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  63139899600, #    utc_start 2001-10-27 21:00:00 (Sat)
  63153205200, #      utc_end 2002-03-30 21:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  63153205200, #    utc_start 2002-03-30 21:00:00 (Sat)
  63171349200, #      utc_end 2002-10-26 21:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  63171349200, #    utc_start 2002-10-26 21:00:00 (Sat)
  63184654800, #      utc_end 2003-03-29 21:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  63184654800, #    utc_start 2003-03-29 21:00:00 (Sat)
  63202798800, #      utc_end 2003-10-25 21:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  63202798800, #    utc_start 2003-10-25 21:00:00 (Sat)
  63216104400, #      utc_end 2004-03-27 21:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  63216104400, #    utc_start 2004-03-27 21:00:00 (Sat)
  63234853200, #      utc_end 2004-10-30 21:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  63234853200, #    utc_start 2004-10-30 21:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  18000,
  0,
  '+05',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {24}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_AQTOBE

    $main::fatpacked{"DateTime/TimeZone/Asia/Ashgabat.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_ASHGABAT';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Ashgabat;
  $DateTime::TimeZone::Asia::Ashgabat::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Ashgabat::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694517188, #      utc_end 1924-05-01 20:06:28 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  14012,
  0,
  'LMT',
      ],
      [
  60694517188, #    utc_start 1924-05-01 20:06:28 (Thu)
  60888139200, #      utc_end 1930-06-20 20:00:00 (Fri)
  60694531588, #  local_start 1924-05-02 00:06:28 (Fri)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  14400,
  0,
  'ASHT',
      ],
      [
  60888139200, #    utc_start 1930-06-20 20:00:00 (Fri)
  62490596400, #      utc_end 1981-03-31 19:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  18000,
  0,
  'ASHT',
      ],
      [
  62490596400, #    utc_start 1981-03-31 19:00:00 (Tue)
  62506404000, #      utc_end 1981-09-30 18:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  21600,
  1,
  'ASHST',
      ],
      [
  62506404000, #    utc_start 1981-09-30 18:00:00 (Wed)
  62522132400, #      utc_end 1982-03-31 19:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  18000,
  0,
  'ASHT',
      ],
      [
  62522132400, #    utc_start 1982-03-31 19:00:00 (Wed)
  62537940000, #      utc_end 1982-09-30 18:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  21600,
  1,
  'ASHST',
      ],
      [
  62537940000, #    utc_start 1982-09-30 18:00:00 (Thu)
  62553668400, #      utc_end 1983-03-31 19:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  18000,
  0,
  'ASHT',
      ],
      [
  62553668400, #    utc_start 1983-03-31 19:00:00 (Thu)
  62569476000, #      utc_end 1983-09-30 18:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  21600,
  1,
  'ASHST',
      ],
      [
  62569476000, #    utc_start 1983-09-30 18:00:00 (Fri)
  62585290800, #      utc_end 1984-03-31 19:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  18000,
  0,
  'ASHT',
      ],
      [
  62585290800, #    utc_start 1984-03-31 19:00:00 (Sat)
  62601022800, #      utc_end 1984-09-29 21:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  21600,
  1,
  'ASHST',
      ],
      [
  62601022800, #    utc_start 1984-09-29 21:00:00 (Sat)
  62616747600, #      utc_end 1985-03-30 21:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  18000,
  0,
  'ASHT',
      ],
      [
  62616747600, #    utc_start 1985-03-30 21:00:00 (Sat)
  62632472400, #      utc_end 1985-09-28 21:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  21600,
  1,
  'ASHST',
      ],
      [
  62632472400, #    utc_start 1985-09-28 21:00:00 (Sat)
  62648197200, #      utc_end 1986-03-29 21:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  18000,
  0,
  'ASHT',
      ],
      [
  62648197200, #    utc_start 1986-03-29 21:00:00 (Sat)
  62663922000, #      utc_end 1986-09-27 21:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  21600,
  1,
  'ASHST',
      ],
      [
  62663922000, #    utc_start 1986-09-27 21:00:00 (Sat)
  62679646800, #      utc_end 1987-03-28 21:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  18000,
  0,
  'ASHT',
      ],
      [
  62679646800, #    utc_start 1987-03-28 21:00:00 (Sat)
  62695371600, #      utc_end 1987-09-26 21:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  21600,
  1,
  'ASHST',
      ],
      [
  62695371600, #    utc_start 1987-09-26 21:00:00 (Sat)
  62711096400, #      utc_end 1988-03-26 21:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  18000,
  0,
  'ASHT',
      ],
      [
  62711096400, #    utc_start 1988-03-26 21:00:00 (Sat)
  62726821200, #      utc_end 1988-09-24 21:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  21600,
  1,
  'ASHST',
      ],
      [
  62726821200, #    utc_start 1988-09-24 21:00:00 (Sat)
  62742546000, #      utc_end 1989-03-25 21:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  18000,
  0,
  'ASHT',
      ],
      [
  62742546000, #    utc_start 1989-03-25 21:00:00 (Sat)
  62758270800, #      utc_end 1989-09-23 21:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  21600,
  1,
  'ASHST',
      ],
      [
  62758270800, #    utc_start 1989-09-23 21:00:00 (Sat)
  62773995600, #      utc_end 1990-03-24 21:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  18000,
  0,
  'ASHT',
      ],
      [
  62773995600, #    utc_start 1990-03-24 21:00:00 (Sat)
  62790325200, #      utc_end 1990-09-29 21:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  21600,
  1,
  'ASHST',
      ],
      [
  62790325200, #    utc_start 1990-09-29 21:00:00 (Sat)
  62806050000, #      utc_end 1991-03-30 21:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  18000,
  0,
  'ASHT',
      ],
      [
  62806050000, #    utc_start 1991-03-30 21:00:00 (Sat)
  62821778400, #      utc_end 1991-09-28 22:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  18000,
  1,
  'ASHST',
      ],
      [
  62821778400, #    utc_start 1991-09-28 22:00:00 (Sat)
  62824190400, #      utc_end 1991-10-26 20:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62824204800, #    local_end 1991-10-27 00:00:00 (Sun)
  14400,
  0,
  'ASHT',
      ],
      [
  62824190400, #    utc_start 1991-10-26 20:00:00 (Sat)
  62831455200, #      utc_end 1992-01-18 22:00:00 (Sat)
  62824204800, #  local_start 1991-10-27 00:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  14400,
  0,
  'TMT',
      ],
      [
  62831455200, #    utc_start 1992-01-18 22:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  18000,
  0,
  'TMT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {11}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_ASHGABAT

    $main::fatpacked{"DateTime/TimeZone/Asia/Baghdad.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_BAGHDAD';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Baghdad;
  $DateTime::TimeZone::Asia::Baghdad::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Baghdad::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611150940, #      utc_end 1889-12-31 21:02:20 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  10660,
  0,
  'LMT',
      ],
      [
  59611150940, #    utc_start 1889-12-31 21:02:20 (Tue)
  60494677344, #      utc_end 1917-12-31 21:02:24 (Mon)
  59611161596, #  local_start 1889-12-31 23:59:56 (Tue)
  60494688000, #    local_end 1918-01-01 00:00:00 (Tue)
  10656,
  0,
  'BMT',
      ],
      [
  60494677344, #    utc_start 1917-12-31 21:02:24 (Mon)
  62524731600, #      utc_end 1982-04-30 21:00:00 (Fri)
  60494688144, #  local_start 1918-01-01 00:02:24 (Tue)
  62524742400, #    local_end 1982-05-01 00:00:00 (Sat)
  10800,
  0,
  'AST',
      ],
      [
  62524731600, #    utc_start 1982-04-30 21:00:00 (Fri)
  62537947200, #      utc_end 1982-09-30 20:00:00 (Thu)
  62524746000, #  local_start 1982-05-01 01:00:00 (Sat)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  14400,
  1,
  'ADT',
      ],
      [
  62537947200, #    utc_start 1982-09-30 20:00:00 (Thu)
  62553589200, #      utc_end 1983-03-30 21:00:00 (Wed)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553600000, #    local_end 1983-03-31 00:00:00 (Thu)
  10800,
  0,
  'AST',
      ],
      [
  62553589200, #    utc_start 1983-03-30 21:00:00 (Wed)
  62569483200, #      utc_end 1983-09-30 20:00:00 (Fri)
  62553603600, #  local_start 1983-03-31 01:00:00 (Thu)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  14400,
  1,
  'ADT',
      ],
      [
  62569483200, #    utc_start 1983-09-30 20:00:00 (Fri)
  62585298000, #      utc_end 1984-03-31 21:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  10800,
  0,
  'AST',
      ],
      [
  62585298000, #    utc_start 1984-03-31 21:00:00 (Sat)
  62601105600, #      utc_end 1984-09-30 20:00:00 (Sun)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601120000, #    local_end 1984-10-01 00:00:00 (Mon)
  14400,
  1,
  'ADT',
      ],
      [
  62601105600, #    utc_start 1984-09-30 20:00:00 (Sun)
  62616834000, #      utc_end 1985-03-31 21:00:00 (Sun)
  62601116400, #  local_start 1984-09-30 23:00:00 (Sun)
  62616844800, #    local_end 1985-04-01 00:00:00 (Mon)
  10800,
  0,
  'AST',
      ],
      [
  62616834000, #    utc_start 1985-03-31 21:00:00 (Sun)
  62632476000, #      utc_end 1985-09-28 22:00:00 (Sat)
  62616848400, #  local_start 1985-04-01 01:00:00 (Mon)
  62632490400, #    local_end 1985-09-29 02:00:00 (Sun)
  14400,
  1,
  'ADT',
      ],
      [
  62632476000, #    utc_start 1985-09-28 22:00:00 (Sat)
  62648200800, #      utc_end 1986-03-29 22:00:00 (Sat)
  62632486800, #  local_start 1985-09-29 01:00:00 (Sun)
  62648211600, #    local_end 1986-03-30 01:00:00 (Sun)
  10800,
  0,
  'AST',
      ],
      [
  62648200800, #    utc_start 1986-03-29 22:00:00 (Sat)
  62663925600, #      utc_end 1986-09-27 22:00:00 (Sat)
  62648215200, #  local_start 1986-03-30 02:00:00 (Sun)
  62663940000, #    local_end 1986-09-28 02:00:00 (Sun)
  14400,
  1,
  'ADT',
      ],
      [
  62663925600, #    utc_start 1986-09-27 22:00:00 (Sat)
  62679650400, #      utc_end 1987-03-28 22:00:00 (Sat)
  62663936400, #  local_start 1986-09-28 01:00:00 (Sun)
  62679661200, #    local_end 1987-03-29 01:00:00 (Sun)
  10800,
  0,
  'AST',
      ],
      [
  62679650400, #    utc_start 1987-03-28 22:00:00 (Sat)
  62695375200, #      utc_end 1987-09-26 22:00:00 (Sat)
  62679664800, #  local_start 1987-03-29 02:00:00 (Sun)
  62695389600, #    local_end 1987-09-27 02:00:00 (Sun)
  14400,
  1,
  'ADT',
      ],
      [
  62695375200, #    utc_start 1987-09-26 22:00:00 (Sat)
  62711100000, #      utc_end 1988-03-26 22:00:00 (Sat)
  62695386000, #  local_start 1987-09-27 01:00:00 (Sun)
  62711110800, #    local_end 1988-03-27 01:00:00 (Sun)
  10800,
  0,
  'AST',
      ],
      [
  62711100000, #    utc_start 1988-03-26 22:00:00 (Sat)
  62726824800, #      utc_end 1988-09-24 22:00:00 (Sat)
  62711114400, #  local_start 1988-03-27 02:00:00 (Sun)
  62726839200, #    local_end 1988-09-25 02:00:00 (Sun)
  14400,
  1,
  'ADT',
      ],
      [
  62726824800, #    utc_start 1988-09-24 22:00:00 (Sat)
  62742549600, #      utc_end 1989-03-25 22:00:00 (Sat)
  62726835600, #  local_start 1988-09-25 01:00:00 (Sun)
  62742560400, #    local_end 1989-03-26 01:00:00 (Sun)
  10800,
  0,
  'AST',
      ],
      [
  62742549600, #    utc_start 1989-03-25 22:00:00 (Sat)
  62758274400, #      utc_end 1989-09-23 22:00:00 (Sat)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62758288800, #    local_end 1989-09-24 02:00:00 (Sun)
  14400,
  1,
  'ADT',
      ],
      [
  62758274400, #    utc_start 1989-09-23 22:00:00 (Sat)
  62773999200, #      utc_end 1990-03-24 22:00:00 (Sat)
  62758285200, #  local_start 1989-09-24 01:00:00 (Sun)
  62774010000, #    local_end 1990-03-25 01:00:00 (Sun)
  10800,
  0,
  'AST',
      ],
      [
  62773999200, #    utc_start 1990-03-24 22:00:00 (Sat)
  62790328800, #      utc_end 1990-09-29 22:00:00 (Sat)
  62774013600, #  local_start 1990-03-25 02:00:00 (Sun)
  62790343200, #    local_end 1990-09-30 02:00:00 (Sun)
  14400,
  1,
  'ADT',
      ],
      [
  62790328800, #    utc_start 1990-09-29 22:00:00 (Sat)
  62806147200, #      utc_end 1991-04-01 00:00:00 (Mon)
  62790339600, #  local_start 1990-09-30 01:00:00 (Sun)
  62806158000, #    local_end 1991-04-01 03:00:00 (Mon)
  10800,
  0,
  'AST',
      ],
      [
  62806147200, #    utc_start 1991-04-01 00:00:00 (Mon)
  62821958400, #      utc_end 1991-10-01 00:00:00 (Tue)
  62806161600, #  local_start 1991-04-01 04:00:00 (Mon)
  62821972800, #    local_end 1991-10-01 04:00:00 (Tue)
  14400,
  1,
  'ADT',
      ],
      [
  62821958400, #    utc_start 1991-10-01 00:00:00 (Tue)
  62837769600, #      utc_end 1992-04-01 00:00:00 (Wed)
  62821969200, #  local_start 1991-10-01 03:00:00 (Tue)
  62837780400, #    local_end 1992-04-01 03:00:00 (Wed)
  10800,
  0,
  'AST',
      ],
      [
  62837769600, #    utc_start 1992-04-01 00:00:00 (Wed)
  62853580800, #      utc_end 1992-10-01 00:00:00 (Thu)
  62837784000, #  local_start 1992-04-01 04:00:00 (Wed)
  62853595200, #    local_end 1992-10-01 04:00:00 (Thu)
  14400,
  1,
  'ADT',
      ],
      [
  62853580800, #    utc_start 1992-10-01 00:00:00 (Thu)
  62869305600, #      utc_end 1993-04-01 00:00:00 (Thu)
  62853591600, #  local_start 1992-10-01 03:00:00 (Thu)
  62869316400, #    local_end 1993-04-01 03:00:00 (Thu)
  10800,
  0,
  'AST',
      ],
      [
  62869305600, #    utc_start 1993-04-01 00:00:00 (Thu)
  62885116800, #      utc_end 1993-10-01 00:00:00 (Fri)
  62869320000, #  local_start 1993-04-01 04:00:00 (Thu)
  62885131200, #    local_end 1993-10-01 04:00:00 (Fri)
  14400,
  1,
  'ADT',
      ],
      [
  62885116800, #    utc_start 1993-10-01 00:00:00 (Fri)
  62900841600, #      utc_end 1994-04-01 00:00:00 (Fri)
  62885127600, #  local_start 1993-10-01 03:00:00 (Fri)
  62900852400, #    local_end 1994-04-01 03:00:00 (Fri)
  10800,
  0,
  'AST',
      ],
      [
  62900841600, #    utc_start 1994-04-01 00:00:00 (Fri)
  62916652800, #      utc_end 1994-10-01 00:00:00 (Sat)
  62900856000, #  local_start 1994-04-01 04:00:00 (Fri)
  62916667200, #    local_end 1994-10-01 04:00:00 (Sat)
  14400,
  1,
  'ADT',
      ],
      [
  62916652800, #    utc_start 1994-10-01 00:00:00 (Sat)
  62932377600, #      utc_end 1995-04-01 00:00:00 (Sat)
  62916663600, #  local_start 1994-10-01 03:00:00 (Sat)
  62932388400, #    local_end 1995-04-01 03:00:00 (Sat)
  10800,
  0,
  'AST',
      ],
      [
  62932377600, #    utc_start 1995-04-01 00:00:00 (Sat)
  62948188800, #      utc_end 1995-10-01 00:00:00 (Sun)
  62932392000, #  local_start 1995-04-01 04:00:00 (Sat)
  62948203200, #    local_end 1995-10-01 04:00:00 (Sun)
  14400,
  1,
  'ADT',
      ],
      [
  62948188800, #    utc_start 1995-10-01 00:00:00 (Sun)
  62964000000, #      utc_end 1996-04-01 00:00:00 (Mon)
  62948199600, #  local_start 1995-10-01 03:00:00 (Sun)
  62964010800, #    local_end 1996-04-01 03:00:00 (Mon)
  10800,
  0,
  'AST',
      ],
      [
  62964000000, #    utc_start 1996-04-01 00:00:00 (Mon)
  62979811200, #      utc_end 1996-10-01 00:00:00 (Tue)
  62964014400, #  local_start 1996-04-01 04:00:00 (Mon)
  62979825600, #    local_end 1996-10-01 04:00:00 (Tue)
  14400,
  1,
  'ADT',
      ],
      [
  62979811200, #    utc_start 1996-10-01 00:00:00 (Tue)
  62995536000, #      utc_end 1997-04-01 00:00:00 (Tue)
  62979822000, #  local_start 1996-10-01 03:00:00 (Tue)
  62995546800, #    local_end 1997-04-01 03:00:00 (Tue)
  10800,
  0,
  'AST',
      ],
      [
  62995536000, #    utc_start 1997-04-01 00:00:00 (Tue)
  63011347200, #      utc_end 1997-10-01 00:00:00 (Wed)
  62995550400, #  local_start 1997-04-01 04:00:00 (Tue)
  63011361600, #    local_end 1997-10-01 04:00:00 (Wed)
  14400,
  1,
  'ADT',
      ],
      [
  63011347200, #    utc_start 1997-10-01 00:00:00 (Wed)
  63027072000, #      utc_end 1998-04-01 00:00:00 (Wed)
  63011358000, #  local_start 1997-10-01 03:00:00 (Wed)
  63027082800, #    local_end 1998-04-01 03:00:00 (Wed)
  10800,
  0,
  'AST',
      ],
      [
  63027072000, #    utc_start 1998-04-01 00:00:00 (Wed)
  63042883200, #      utc_end 1998-10-01 00:00:00 (Thu)
  63027086400, #  local_start 1998-04-01 04:00:00 (Wed)
  63042897600, #    local_end 1998-10-01 04:00:00 (Thu)
  14400,
  1,
  'ADT',
      ],
      [
  63042883200, #    utc_start 1998-10-01 00:00:00 (Thu)
  63058608000, #      utc_end 1999-04-01 00:00:00 (Thu)
  63042894000, #  local_start 1998-10-01 03:00:00 (Thu)
  63058618800, #    local_end 1999-04-01 03:00:00 (Thu)
  10800,
  0,
  'AST',
      ],
      [
  63058608000, #    utc_start 1999-04-01 00:00:00 (Thu)
  63074419200, #      utc_end 1999-10-01 00:00:00 (Fri)
  63058622400, #  local_start 1999-04-01 04:00:00 (Thu)
  63074433600, #    local_end 1999-10-01 04:00:00 (Fri)
  14400,
  1,
  'ADT',
      ],
      [
  63074419200, #    utc_start 1999-10-01 00:00:00 (Fri)
  63090230400, #      utc_end 2000-04-01 00:00:00 (Sat)
  63074430000, #  local_start 1999-10-01 03:00:00 (Fri)
  63090241200, #    local_end 2000-04-01 03:00:00 (Sat)
  10800,
  0,
  'AST',
      ],
      [
  63090230400, #    utc_start 2000-04-01 00:00:00 (Sat)
  63106041600, #      utc_end 2000-10-01 00:00:00 (Sun)
  63090244800, #  local_start 2000-04-01 04:00:00 (Sat)
  63106056000, #    local_end 2000-10-01 04:00:00 (Sun)
  14400,
  1,
  'ADT',
      ],
      [
  63106041600, #    utc_start 2000-10-01 00:00:00 (Sun)
  63121766400, #      utc_end 2001-04-01 00:00:00 (Sun)
  63106052400, #  local_start 2000-10-01 03:00:00 (Sun)
  63121777200, #    local_end 2001-04-01 03:00:00 (Sun)
  10800,
  0,
  'AST',
      ],
      [
  63121766400, #    utc_start 2001-04-01 00:00:00 (Sun)
  63137577600, #      utc_end 2001-10-01 00:00:00 (Mon)
  63121780800, #  local_start 2001-04-01 04:00:00 (Sun)
  63137592000, #    local_end 2001-10-01 04:00:00 (Mon)
  14400,
  1,
  'ADT',
      ],
      [
  63137577600, #    utc_start 2001-10-01 00:00:00 (Mon)
  63153302400, #      utc_end 2002-04-01 00:00:00 (Mon)
  63137588400, #  local_start 2001-10-01 03:00:00 (Mon)
  63153313200, #    local_end 2002-04-01 03:00:00 (Mon)
  10800,
  0,
  'AST',
      ],
      [
  63153302400, #    utc_start 2002-04-01 00:00:00 (Mon)
  63169113600, #      utc_end 2002-10-01 00:00:00 (Tue)
  63153316800, #  local_start 2002-04-01 04:00:00 (Mon)
  63169128000, #    local_end 2002-10-01 04:00:00 (Tue)
  14400,
  1,
  'ADT',
      ],
      [
  63169113600, #    utc_start 2002-10-01 00:00:00 (Tue)
  63184838400, #      utc_end 2003-04-01 00:00:00 (Tue)
  63169124400, #  local_start 2002-10-01 03:00:00 (Tue)
  63184849200, #    local_end 2003-04-01 03:00:00 (Tue)
  10800,
  0,
  'AST',
      ],
      [
  63184838400, #    utc_start 2003-04-01 00:00:00 (Tue)
  63200649600, #      utc_end 2003-10-01 00:00:00 (Wed)
  63184852800, #  local_start 2003-04-01 04:00:00 (Tue)
  63200664000, #    local_end 2003-10-01 04:00:00 (Wed)
  14400,
  1,
  'ADT',
      ],
      [
  63200649600, #    utc_start 2003-10-01 00:00:00 (Wed)
  63216460800, #      utc_end 2004-04-01 00:00:00 (Thu)
  63200660400, #  local_start 2003-10-01 03:00:00 (Wed)
  63216471600, #    local_end 2004-04-01 03:00:00 (Thu)
  10800,
  0,
  'AST',
      ],
      [
  63216460800, #    utc_start 2004-04-01 00:00:00 (Thu)
  63232272000, #      utc_end 2004-10-01 00:00:00 (Fri)
  63216475200, #  local_start 2004-04-01 04:00:00 (Thu)
  63232286400, #    local_end 2004-10-01 04:00:00 (Fri)
  14400,
  1,
  'ADT',
      ],
      [
  63232272000, #    utc_start 2004-10-01 00:00:00 (Fri)
  63247996800, #      utc_end 2005-04-01 00:00:00 (Fri)
  63232282800, #  local_start 2004-10-01 03:00:00 (Fri)
  63248007600, #    local_end 2005-04-01 03:00:00 (Fri)
  10800,
  0,
  'AST',
      ],
      [
  63247996800, #    utc_start 2005-04-01 00:00:00 (Fri)
  63263808000, #      utc_end 2005-10-01 00:00:00 (Sat)
  63248011200, #  local_start 2005-04-01 04:00:00 (Fri)
  63263822400, #    local_end 2005-10-01 04:00:00 (Sat)
  14400,
  1,
  'ADT',
      ],
      [
  63263808000, #    utc_start 2005-10-01 00:00:00 (Sat)
  63279532800, #      utc_end 2006-04-01 00:00:00 (Sat)
  63263818800, #  local_start 2005-10-01 03:00:00 (Sat)
  63279543600, #    local_end 2006-04-01 03:00:00 (Sat)
  10800,
  0,
  'AST',
      ],
      [
  63279532800, #    utc_start 2006-04-01 00:00:00 (Sat)
  63295344000, #      utc_end 2006-10-01 00:00:00 (Sun)
  63279547200, #  local_start 2006-04-01 04:00:00 (Sat)
  63295358400, #    local_end 2006-10-01 04:00:00 (Sun)
  14400,
  1,
  'ADT',
      ],
      [
  63295344000, #    utc_start 2006-10-01 00:00:00 (Sun)
  63311068800, #      utc_end 2007-04-01 00:00:00 (Sun)
  63295354800, #  local_start 2006-10-01 03:00:00 (Sun)
  63311079600, #    local_end 2007-04-01 03:00:00 (Sun)
  10800,
  0,
  'AST',
      ],
      [
  63311068800, #    utc_start 2007-04-01 00:00:00 (Sun)
  63326880000, #      utc_end 2007-10-01 00:00:00 (Mon)
  63311083200, #  local_start 2007-04-01 04:00:00 (Sun)
  63326894400, #    local_end 2007-10-01 04:00:00 (Mon)
  14400,
  1,
  'ADT',
      ],
      [
  63326880000, #    utc_start 2007-10-01 00:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  63326890800, #  local_start 2007-10-01 03:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  10800,
  0,
  'AST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {26}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_BAGHDAD

    $main::fatpacked{"DateTime/TimeZone/Asia/Baku.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_BAKU';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Baku;
  $DateTime::TimeZone::Asia::Baku::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Baku::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694519236, #      utc_end 1924-05-01 20:40:36 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  11964,
  0,
  'LMT',
      ],
      [
  60694519236, #    utc_start 1924-05-01 20:40:36 (Thu)
  61730542800, #      utc_end 1957-02-28 21:00:00 (Thu)
  60694530036, #  local_start 1924-05-01 23:40:36 (Thu)
  61730553600, #    local_end 1957-03-01 00:00:00 (Fri)
  10800,
  0,
  'BAKT',
      ],
      [
  61730542800, #    utc_start 1957-02-28 21:00:00 (Thu)
  62490600000, #      utc_end 1981-03-31 20:00:00 (Tue)
  61730557200, #  local_start 1957-03-01 01:00:00 (Fri)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  14400,
  0,
  'BAKT',
      ],
      [
  62490600000, #    utc_start 1981-03-31 20:00:00 (Tue)
  62506407600, #      utc_end 1981-09-30 19:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  18000,
  1,
  'BAKST',
      ],
      [
  62506407600, #    utc_start 1981-09-30 19:00:00 (Wed)
  62522136000, #      utc_end 1982-03-31 20:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  14400,
  0,
  'BAKT',
      ],
      [
  62522136000, #    utc_start 1982-03-31 20:00:00 (Wed)
  62537943600, #      utc_end 1982-09-30 19:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  18000,
  1,
  'BAKST',
      ],
      [
  62537943600, #    utc_start 1982-09-30 19:00:00 (Thu)
  62553672000, #      utc_end 1983-03-31 20:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  14400,
  0,
  'BAKT',
      ],
      [
  62553672000, #    utc_start 1983-03-31 20:00:00 (Thu)
  62569479600, #      utc_end 1983-09-30 19:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  18000,
  1,
  'BAKST',
      ],
      [
  62569479600, #    utc_start 1983-09-30 19:00:00 (Fri)
  62585294400, #      utc_end 1984-03-31 20:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  14400,
  0,
  'BAKT',
      ],
      [
  62585294400, #    utc_start 1984-03-31 20:00:00 (Sat)
  62601026400, #      utc_end 1984-09-29 22:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  18000,
  1,
  'BAKST',
      ],
      [
  62601026400, #    utc_start 1984-09-29 22:00:00 (Sat)
  62616751200, #      utc_end 1985-03-30 22:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  14400,
  0,
  'BAKT',
      ],
      [
  62616751200, #    utc_start 1985-03-30 22:00:00 (Sat)
  62632476000, #      utc_end 1985-09-28 22:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  18000,
  1,
  'BAKST',
      ],
      [
  62632476000, #    utc_start 1985-09-28 22:00:00 (Sat)
  62648200800, #      utc_end 1986-03-29 22:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  14400,
  0,
  'BAKT',
      ],
      [
  62648200800, #    utc_start 1986-03-29 22:00:00 (Sat)
  62663925600, #      utc_end 1986-09-27 22:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  18000,
  1,
  'BAKST',
      ],
      [
  62663925600, #    utc_start 1986-09-27 22:00:00 (Sat)
  62679650400, #      utc_end 1987-03-28 22:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  14400,
  0,
  'BAKT',
      ],
      [
  62679650400, #    utc_start 1987-03-28 22:00:00 (Sat)
  62695375200, #      utc_end 1987-09-26 22:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  18000,
  1,
  'BAKST',
      ],
      [
  62695375200, #    utc_start 1987-09-26 22:00:00 (Sat)
  62711100000, #      utc_end 1988-03-26 22:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  14400,
  0,
  'BAKT',
      ],
      [
  62711100000, #    utc_start 1988-03-26 22:00:00 (Sat)
  62726824800, #      utc_end 1988-09-24 22:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  18000,
  1,
  'BAKST',
      ],
      [
  62726824800, #    utc_start 1988-09-24 22:00:00 (Sat)
  62742549600, #      utc_end 1989-03-25 22:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  14400,
  0,
  'BAKT',
      ],
      [
  62742549600, #    utc_start 1989-03-25 22:00:00 (Sat)
  62758274400, #      utc_end 1989-09-23 22:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  18000,
  1,
  'BAKST',
      ],
      [
  62758274400, #    utc_start 1989-09-23 22:00:00 (Sat)
  62773999200, #      utc_end 1990-03-24 22:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  14400,
  0,
  'BAKT',
      ],
      [
  62773999200, #    utc_start 1990-03-24 22:00:00 (Sat)
  62790328800, #      utc_end 1990-09-29 22:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  18000,
  1,
  'BAKST',
      ],
      [
  62790328800, #    utc_start 1990-09-29 22:00:00 (Sat)
  62806053600, #      utc_end 1991-03-30 22:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  14400,
  0,
  'BAKT',
      ],
      [
  62806053600, #    utc_start 1991-03-30 22:00:00 (Sat)
  62819179200, #      utc_end 1991-08-29 20:00:00 (Thu)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62819193600, #    local_end 1991-08-30 00:00:00 (Fri)
  14400,
  1,
  'BAKST',
      ],
      [
  62819179200, #    utc_start 1991-08-29 20:00:00 (Thu)
  62821782000, #      utc_end 1991-09-28 23:00:00 (Sat)
  62819193600, #  local_start 1991-08-30 00:00:00 (Fri)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  14400,
  1,
  'AZST',
      ],
      [
  62821782000, #    utc_start 1991-09-28 23:00:00 (Sat)
  62837506800, #      utc_end 1992-03-28 23:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  10800,
  0,
  'AZT',
      ],
      [
  62837506800, #    utc_start 1992-03-28 23:00:00 (Sat)
  62853231600, #      utc_end 1992-09-26 23:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  14400,
  1,
  'AZST',
      ],
      [
  62853231600, #    utc_start 1992-09-26 23:00:00 (Sat)
  62956123200, #      utc_end 1995-12-31 20:00:00 (Sun)
  62853246000, #  local_start 1992-09-27 03:00:00 (Sun)
  62956137600, #    local_end 1996-01-01 00:00:00 (Mon)
  14400,
  0,
  'AZT',
      ],
      [
  62956123200, #    utc_start 1995-12-31 20:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62956137600, #  local_start 1996-01-01 00:00:00 (Mon)
  62963931600, #    local_end 1996-03-31 05:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963935200, #  local_start 1996-03-31 06:00:00 (Sun)
  62982079200, #    local_end 1996-10-27 06:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62987745600, #      utc_end 1996-12-31 20:00:00 (Tue)
  62982075600, #  local_start 1996-10-27 05:00:00 (Sun)
  62987760000, #    local_end 1997-01-01 00:00:00 (Wed)
  14400,
  0,
  'AZT',
      ],
      [
  62987745600, #    utc_start 1996-12-31 20:00:00 (Tue)
  62995363200, #      utc_end 1997-03-30 00:00:00 (Sun)
  62987760000, #  local_start 1997-01-01 00:00:00 (Wed)
  62995377600, #    local_end 1997-03-30 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  62995363200, #    utc_start 1997-03-30 00:00:00 (Sun)
  63013507200, #      utc_end 1997-10-26 00:00:00 (Sun)
  62995381200, #  local_start 1997-03-30 05:00:00 (Sun)
  63013525200, #    local_end 1997-10-26 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63013507200, #    utc_start 1997-10-26 00:00:00 (Sun)
  63026812800, #      utc_end 1998-03-29 00:00:00 (Sun)
  63013521600, #  local_start 1997-10-26 04:00:00 (Sun)
  63026827200, #    local_end 1998-03-29 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63026812800, #    utc_start 1998-03-29 00:00:00 (Sun)
  63044956800, #      utc_end 1998-10-25 00:00:00 (Sun)
  63026830800, #  local_start 1998-03-29 05:00:00 (Sun)
  63044974800, #    local_end 1998-10-25 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63044956800, #    utc_start 1998-10-25 00:00:00 (Sun)
  63058262400, #      utc_end 1999-03-28 00:00:00 (Sun)
  63044971200, #  local_start 1998-10-25 04:00:00 (Sun)
  63058276800, #    local_end 1999-03-28 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63058262400, #    utc_start 1999-03-28 00:00:00 (Sun)
  63077011200, #      utc_end 1999-10-31 00:00:00 (Sun)
  63058280400, #  local_start 1999-03-28 05:00:00 (Sun)
  63077029200, #    local_end 1999-10-31 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63077011200, #    utc_start 1999-10-31 00:00:00 (Sun)
  63089712000, #      utc_end 2000-03-26 00:00:00 (Sun)
  63077025600, #  local_start 1999-10-31 04:00:00 (Sun)
  63089726400, #    local_end 2000-03-26 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63089712000, #    utc_start 2000-03-26 00:00:00 (Sun)
  63108460800, #      utc_end 2000-10-29 00:00:00 (Sun)
  63089730000, #  local_start 2000-03-26 05:00:00 (Sun)
  63108478800, #    local_end 2000-10-29 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63108460800, #    utc_start 2000-10-29 00:00:00 (Sun)
  63121161600, #      utc_end 2001-03-25 00:00:00 (Sun)
  63108475200, #  local_start 2000-10-29 04:00:00 (Sun)
  63121176000, #    local_end 2001-03-25 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63121161600, #    utc_start 2001-03-25 00:00:00 (Sun)
  63139910400, #      utc_end 2001-10-28 00:00:00 (Sun)
  63121179600, #  local_start 2001-03-25 05:00:00 (Sun)
  63139928400, #    local_end 2001-10-28 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63139910400, #    utc_start 2001-10-28 00:00:00 (Sun)
  63153216000, #      utc_end 2002-03-31 00:00:00 (Sun)
  63139924800, #  local_start 2001-10-28 04:00:00 (Sun)
  63153230400, #    local_end 2002-03-31 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63153216000, #    utc_start 2002-03-31 00:00:00 (Sun)
  63171360000, #      utc_end 2002-10-27 00:00:00 (Sun)
  63153234000, #  local_start 2002-03-31 05:00:00 (Sun)
  63171378000, #    local_end 2002-10-27 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63171360000, #    utc_start 2002-10-27 00:00:00 (Sun)
  63184665600, #      utc_end 2003-03-30 00:00:00 (Sun)
  63171374400, #  local_start 2002-10-27 04:00:00 (Sun)
  63184680000, #    local_end 2003-03-30 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63184665600, #    utc_start 2003-03-30 00:00:00 (Sun)
  63202809600, #      utc_end 2003-10-26 00:00:00 (Sun)
  63184683600, #  local_start 2003-03-30 05:00:00 (Sun)
  63202827600, #    local_end 2003-10-26 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63202809600, #    utc_start 2003-10-26 00:00:00 (Sun)
  63216115200, #      utc_end 2004-03-28 00:00:00 (Sun)
  63202824000, #  local_start 2003-10-26 04:00:00 (Sun)
  63216129600, #    local_end 2004-03-28 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63216115200, #    utc_start 2004-03-28 00:00:00 (Sun)
  63234864000, #      utc_end 2004-10-31 00:00:00 (Sun)
  63216133200, #  local_start 2004-03-28 05:00:00 (Sun)
  63234882000, #    local_end 2004-10-31 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63234864000, #    utc_start 2004-10-31 00:00:00 (Sun)
  63247564800, #      utc_end 2005-03-27 00:00:00 (Sun)
  63234878400, #  local_start 2004-10-31 04:00:00 (Sun)
  63247579200, #    local_end 2005-03-27 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63247564800, #    utc_start 2005-03-27 00:00:00 (Sun)
  63266313600, #      utc_end 2005-10-30 00:00:00 (Sun)
  63247582800, #  local_start 2005-03-27 05:00:00 (Sun)
  63266331600, #    local_end 2005-10-30 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63266313600, #    utc_start 2005-10-30 00:00:00 (Sun)
  63279014400, #      utc_end 2006-03-26 00:00:00 (Sun)
  63266328000, #  local_start 2005-10-30 04:00:00 (Sun)
  63279028800, #    local_end 2006-03-26 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63279014400, #    utc_start 2006-03-26 00:00:00 (Sun)
  63297763200, #      utc_end 2006-10-29 00:00:00 (Sun)
  63279032400, #  local_start 2006-03-26 05:00:00 (Sun)
  63297781200, #    local_end 2006-10-29 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63297763200, #    utc_start 2006-10-29 00:00:00 (Sun)
  63310464000, #      utc_end 2007-03-25 00:00:00 (Sun)
  63297777600, #  local_start 2006-10-29 04:00:00 (Sun)
  63310478400, #    local_end 2007-03-25 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63310464000, #    utc_start 2007-03-25 00:00:00 (Sun)
  63329212800, #      utc_end 2007-10-28 00:00:00 (Sun)
  63310482000, #  local_start 2007-03-25 05:00:00 (Sun)
  63329230800, #    local_end 2007-10-28 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63329212800, #    utc_start 2007-10-28 00:00:00 (Sun)
  63342518400, #      utc_end 2008-03-30 00:00:00 (Sun)
  63329227200, #  local_start 2007-10-28 04:00:00 (Sun)
  63342532800, #    local_end 2008-03-30 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63342518400, #    utc_start 2008-03-30 00:00:00 (Sun)
  63360662400, #      utc_end 2008-10-26 00:00:00 (Sun)
  63342536400, #  local_start 2008-03-30 05:00:00 (Sun)
  63360680400, #    local_end 2008-10-26 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63360662400, #    utc_start 2008-10-26 00:00:00 (Sun)
  63373968000, #      utc_end 2009-03-29 00:00:00 (Sun)
  63360676800, #  local_start 2008-10-26 04:00:00 (Sun)
  63373982400, #    local_end 2009-03-29 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63373968000, #    utc_start 2009-03-29 00:00:00 (Sun)
  63392112000, #      utc_end 2009-10-25 00:00:00 (Sun)
  63373986000, #  local_start 2009-03-29 05:00:00 (Sun)
  63392130000, #    local_end 2009-10-25 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63392112000, #    utc_start 2009-10-25 00:00:00 (Sun)
  63405417600, #      utc_end 2010-03-28 00:00:00 (Sun)
  63392126400, #  local_start 2009-10-25 04:00:00 (Sun)
  63405432000, #    local_end 2010-03-28 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63405417600, #    utc_start 2010-03-28 00:00:00 (Sun)
  63424166400, #      utc_end 2010-10-31 00:00:00 (Sun)
  63405435600, #  local_start 2010-03-28 05:00:00 (Sun)
  63424184400, #    local_end 2010-10-31 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63424166400, #    utc_start 2010-10-31 00:00:00 (Sun)
  63436867200, #      utc_end 2011-03-27 00:00:00 (Sun)
  63424180800, #  local_start 2010-10-31 04:00:00 (Sun)
  63436881600, #    local_end 2011-03-27 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63436867200, #    utc_start 2011-03-27 00:00:00 (Sun)
  63455616000, #      utc_end 2011-10-30 00:00:00 (Sun)
  63436885200, #  local_start 2011-03-27 05:00:00 (Sun)
  63455634000, #    local_end 2011-10-30 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63455616000, #    utc_start 2011-10-30 00:00:00 (Sun)
  63468316800, #      utc_end 2012-03-25 00:00:00 (Sun)
  63455630400, #  local_start 2011-10-30 04:00:00 (Sun)
  63468331200, #    local_end 2012-03-25 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63468316800, #    utc_start 2012-03-25 00:00:00 (Sun)
  63487065600, #      utc_end 2012-10-28 00:00:00 (Sun)
  63468334800, #  local_start 2012-03-25 05:00:00 (Sun)
  63487083600, #    local_end 2012-10-28 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63487065600, #    utc_start 2012-10-28 00:00:00 (Sun)
  63500371200, #      utc_end 2013-03-31 00:00:00 (Sun)
  63487080000, #  local_start 2012-10-28 04:00:00 (Sun)
  63500385600, #    local_end 2013-03-31 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63500371200, #    utc_start 2013-03-31 00:00:00 (Sun)
  63518515200, #      utc_end 2013-10-27 00:00:00 (Sun)
  63500389200, #  local_start 2013-03-31 05:00:00 (Sun)
  63518533200, #    local_end 2013-10-27 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63518515200, #    utc_start 2013-10-27 00:00:00 (Sun)
  63531820800, #      utc_end 2014-03-30 00:00:00 (Sun)
  63518529600, #  local_start 2013-10-27 04:00:00 (Sun)
  63531835200, #    local_end 2014-03-30 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63531820800, #    utc_start 2014-03-30 00:00:00 (Sun)
  63549964800, #      utc_end 2014-10-26 00:00:00 (Sun)
  63531838800, #  local_start 2014-03-30 05:00:00 (Sun)
  63549982800, #    local_end 2014-10-26 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63549964800, #    utc_start 2014-10-26 00:00:00 (Sun)
  63563270400, #      utc_end 2015-03-29 00:00:00 (Sun)
  63549979200, #  local_start 2014-10-26 04:00:00 (Sun)
  63563284800, #    local_end 2015-03-29 04:00:00 (Sun)
  14400,
  0,
  'AZT',
      ],
      [
  63563270400, #    utc_start 2015-03-29 00:00:00 (Sun)
  63581414400, #      utc_end 2015-10-25 00:00:00 (Sun)
  63563288400, #  local_start 2015-03-29 05:00:00 (Sun)
  63581432400, #    local_end 2015-10-25 05:00:00 (Sun)
  18000,
  1,
  'AZST',
      ],
      [
  63581414400, #    utc_start 2015-10-25 00:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63581428800, #  local_start 2015-10-25 04:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  14400,
  0,
  'AZT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {33}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_BAKU

    $main::fatpacked{"DateTime/TimeZone/Asia/Bangkok.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_BANGKOK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Bangkok;
  $DateTime::TimeZone::Asia::Bangkok::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Bangkok::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295518276, #      utc_end 1879-12-31 17:17:56 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  24124,
  0,
  'LMT',
      ],
      [
  59295518276, #    utc_start 1879-12-31 17:17:56 (Wed)
  60565598276, #      utc_end 1920-03-31 17:17:56 (Wed)
  59295542400, #  local_start 1880-01-01 00:00:00 (Thu)
  60565622400, #    local_end 1920-04-01 00:00:00 (Thu)
  24124,
  0,
  'BMT',
      ],
      [
  60565598276, #    utc_start 1920-03-31 17:17:56 (Wed)
  DateTime::TimeZone::INFINITY, #      utc_end
  60565623476, #  local_start 1920-04-01 00:17:56 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  25200,
  0,
  'ICT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_BANGKOK

    $main::fatpacked{"DateTime/TimeZone/Asia/Barnaul.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_BARNAUL';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Barnaul;
  $DateTime::TimeZone::Asia::Barnaul::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Barnaul::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60555839100, #      utc_end 1919-12-09 18:25:00 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60555859200, #    local_end 1919-12-10 00:00:00 (Wed)
  20100,
  0,
  'LMT',
      ],
      [
  60555839100, #    utc_start 1919-12-09 18:25:00 (Tue)
  60888132000, #      utc_end 1930-06-20 18:00:00 (Fri)
  60555860700, #  local_start 1919-12-10 00:25:00 (Wed)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  21600,
  0,
  '+06',
      ],
      [
  60888132000, #    utc_start 1930-06-20 18:00:00 (Fri)
  62490589200, #      utc_end 1981-03-31 17:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  25200,
  0,
  '+07',
      ],
      [
  62490589200, #    utc_start 1981-03-31 17:00:00 (Tue)
  62506396800, #      utc_end 1981-09-30 16:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  28800,
  1,
  '+08',
      ],
      [
  62506396800, #    utc_start 1981-09-30 16:00:00 (Wed)
  62522125200, #      utc_end 1982-03-31 17:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  25200,
  0,
  '+07',
      ],
      [
  62522125200, #    utc_start 1982-03-31 17:00:00 (Wed)
  62537932800, #      utc_end 1982-09-30 16:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  28800,
  1,
  '+08',
      ],
      [
  62537932800, #    utc_start 1982-09-30 16:00:00 (Thu)
  62553661200, #      utc_end 1983-03-31 17:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  25200,
  0,
  '+07',
      ],
      [
  62553661200, #    utc_start 1983-03-31 17:00:00 (Thu)
  62569468800, #      utc_end 1983-09-30 16:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  28800,
  1,
  '+08',
      ],
      [
  62569468800, #    utc_start 1983-09-30 16:00:00 (Fri)
  62585283600, #      utc_end 1984-03-31 17:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62585283600, #    utc_start 1984-03-31 17:00:00 (Sat)
  62601015600, #      utc_end 1984-09-29 19:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62601015600, #    utc_start 1984-09-29 19:00:00 (Sat)
  62616740400, #      utc_end 1985-03-30 19:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62616740400, #    utc_start 1985-03-30 19:00:00 (Sat)
  62632465200, #      utc_end 1985-09-28 19:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62632465200, #    utc_start 1985-09-28 19:00:00 (Sat)
  62648190000, #      utc_end 1986-03-29 19:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62648190000, #    utc_start 1986-03-29 19:00:00 (Sat)
  62663914800, #      utc_end 1986-09-27 19:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62663914800, #    utc_start 1986-09-27 19:00:00 (Sat)
  62679639600, #      utc_end 1987-03-28 19:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62679639600, #    utc_start 1987-03-28 19:00:00 (Sat)
  62695364400, #      utc_end 1987-09-26 19:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62695364400, #    utc_start 1987-09-26 19:00:00 (Sat)
  62711089200, #      utc_end 1988-03-26 19:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62711089200, #    utc_start 1988-03-26 19:00:00 (Sat)
  62726814000, #      utc_end 1988-09-24 19:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62726814000, #    utc_start 1988-09-24 19:00:00 (Sat)
  62742538800, #      utc_end 1989-03-25 19:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62742538800, #    utc_start 1989-03-25 19:00:00 (Sat)
  62758263600, #      utc_end 1989-09-23 19:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62758263600, #    utc_start 1989-09-23 19:00:00 (Sat)
  62773988400, #      utc_end 1990-03-24 19:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62773988400, #    utc_start 1990-03-24 19:00:00 (Sat)
  62790318000, #      utc_end 1990-09-29 19:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62790318000, #    utc_start 1990-09-29 19:00:00 (Sat)
  62806042800, #      utc_end 1991-03-30 19:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62806042800, #    utc_start 1991-03-30 19:00:00 (Sat)
  62821771200, #      utc_end 1991-09-28 20:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62821771200, #    utc_start 1991-09-28 20:00:00 (Sat)
  62831448000, #      utc_end 1992-01-18 20:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62831448000, #    utc_start 1992-01-18 20:00:00 (Sat)
  62837492400, #      utc_end 1992-03-28 19:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62837492400, #    utc_start 1992-03-28 19:00:00 (Sat)
  62853217200, #      utc_end 1992-09-26 19:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62853217200, #    utc_start 1992-09-26 19:00:00 (Sat)
  62868942000, #      utc_end 1993-03-27 19:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62868942000, #    utc_start 1993-03-27 19:00:00 (Sat)
  62884666800, #      utc_end 1993-09-25 19:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62884666800, #    utc_start 1993-09-25 19:00:00 (Sat)
  62900391600, #      utc_end 1994-03-26 19:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62900391600, #    utc_start 1994-03-26 19:00:00 (Sat)
  62916116400, #      utc_end 1994-09-24 19:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62916116400, #    utc_start 1994-09-24 19:00:00 (Sat)
  62931841200, #      utc_end 1995-03-25 19:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62931841200, #    utc_start 1995-03-25 19:00:00 (Sat)
  62937273600, #      utc_end 1995-05-27 16:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62937302400, #    local_end 1995-05-28 00:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62937273600, #    utc_start 1995-05-27 16:00:00 (Sat)
  62947569600, #      utc_end 1995-09-23 20:00:00 (Sat)
  62937298800, #  local_start 1995-05-27 23:00:00 (Sat)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62947569600, #    utc_start 1995-09-23 20:00:00 (Sat)
  62963899200, #      utc_end 1996-03-30 20:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62963899200, #    utc_start 1996-03-30 20:00:00 (Sat)
  62982043200, #      utc_end 1996-10-26 20:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62982043200, #    utc_start 1996-10-26 20:00:00 (Sat)
  62995348800, #      utc_end 1997-03-29 20:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62995348800, #    utc_start 1997-03-29 20:00:00 (Sat)
  63013492800, #      utc_end 1997-10-25 20:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63013492800, #    utc_start 1997-10-25 20:00:00 (Sat)
  63026798400, #      utc_end 1998-03-28 20:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63026798400, #    utc_start 1998-03-28 20:00:00 (Sat)
  63044942400, #      utc_end 1998-10-24 20:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63044942400, #    utc_start 1998-10-24 20:00:00 (Sat)
  63058248000, #      utc_end 1999-03-27 20:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63058248000, #    utc_start 1999-03-27 20:00:00 (Sat)
  63076996800, #      utc_end 1999-10-30 20:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63076996800, #    utc_start 1999-10-30 20:00:00 (Sat)
  63089697600, #      utc_end 2000-03-25 20:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63089697600, #    utc_start 2000-03-25 20:00:00 (Sat)
  63108446400, #      utc_end 2000-10-28 20:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63108446400, #    utc_start 2000-10-28 20:00:00 (Sat)
  63121147200, #      utc_end 2001-03-24 20:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63121147200, #    utc_start 2001-03-24 20:00:00 (Sat)
  63139896000, #      utc_end 2001-10-27 20:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63139896000, #    utc_start 2001-10-27 20:00:00 (Sat)
  63153201600, #      utc_end 2002-03-30 20:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63153201600, #    utc_start 2002-03-30 20:00:00 (Sat)
  63171345600, #      utc_end 2002-10-26 20:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63171345600, #    utc_start 2002-10-26 20:00:00 (Sat)
  63184651200, #      utc_end 2003-03-29 20:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63184651200, #    utc_start 2003-03-29 20:00:00 (Sat)
  63202795200, #      utc_end 2003-10-25 20:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63202795200, #    utc_start 2003-10-25 20:00:00 (Sat)
  63216100800, #      utc_end 2004-03-27 20:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63216100800, #    utc_start 2004-03-27 20:00:00 (Sat)
  63234849600, #      utc_end 2004-10-30 20:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63234849600, #    utc_start 2004-10-30 20:00:00 (Sat)
  63247550400, #      utc_end 2005-03-26 20:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63247550400, #    utc_start 2005-03-26 20:00:00 (Sat)
  63266299200, #      utc_end 2005-10-29 20:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63266299200, #    utc_start 2005-10-29 20:00:00 (Sat)
  63279000000, #      utc_end 2006-03-25 20:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63279000000, #    utc_start 2006-03-25 20:00:00 (Sat)
  63297748800, #      utc_end 2006-10-28 20:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63297748800, #    utc_start 2006-10-28 20:00:00 (Sat)
  63310449600, #      utc_end 2007-03-24 20:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63310449600, #    utc_start 2007-03-24 20:00:00 (Sat)
  63329198400, #      utc_end 2007-10-27 20:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63329198400, #    utc_start 2007-10-27 20:00:00 (Sat)
  63342504000, #      utc_end 2008-03-29 20:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63342504000, #    utc_start 2008-03-29 20:00:00 (Sat)
  63360648000, #      utc_end 2008-10-25 20:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63360648000, #    utc_start 2008-10-25 20:00:00 (Sat)
  63373953600, #      utc_end 2009-03-28 20:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63373953600, #    utc_start 2009-03-28 20:00:00 (Sat)
  63392097600, #      utc_end 2009-10-24 20:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63392097600, #    utc_start 2009-10-24 20:00:00 (Sat)
  63405403200, #      utc_end 2010-03-27 20:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63405403200, #    utc_start 2010-03-27 20:00:00 (Sat)
  63424152000, #      utc_end 2010-10-30 20:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63424152000, #    utc_start 2010-10-30 20:00:00 (Sat)
  63436852800, #      utc_end 2011-03-26 20:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63436852800, #    utc_start 2011-03-26 20:00:00 (Sat)
  63549946800, #      utc_end 2014-10-25 19:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63549946800, #    utc_start 2014-10-25 19:00:00 (Sat)
  63594705600, #      utc_end 2016-03-26 20:00:00 (Sat)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63594705600, #    utc_start 2016-03-26 20:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  25200,
  0,
  '+07',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {31}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_BARNAUL

    $main::fatpacked{"DateTime/TimeZone/Asia/Beirut.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_BEIRUT';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Beirut;
  $DateTime::TimeZone::Asia::Beirut::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Beirut::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295533880, #      utc_end 1879-12-31 21:38:00 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  8520,
  0,
  'LMT',
      ],
      [
  59295533880, #    utc_start 1879-12-31 21:38:00 (Wed)
  60565269600, #      utc_end 1920-03-27 22:00:00 (Sat)
  59295541080, #  local_start 1879-12-31 23:38:00 (Wed)
  60565276800, #    local_end 1920-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  60565269600, #    utc_start 1920-03-27 22:00:00 (Sat)
  60583496400, #      utc_end 1920-10-24 21:00:00 (Sun)
  60565280400, #  local_start 1920-03-28 01:00:00 (Sun)
  60583507200, #    local_end 1920-10-25 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  60583496400, #    utc_start 1920-10-24 21:00:00 (Sun)
  60597324000, #      utc_end 1921-04-02 22:00:00 (Sat)
  60583503600, #  local_start 1920-10-24 23:00:00 (Sun)
  60597331200, #    local_end 1921-04-03 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  60597324000, #    utc_start 1921-04-02 22:00:00 (Sat)
  60613131600, #      utc_end 1921-10-02 21:00:00 (Sun)
  60597334800, #  local_start 1921-04-03 01:00:00 (Sun)
  60613142400, #    local_end 1921-10-03 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  60613131600, #    utc_start 1921-10-02 21:00:00 (Sun)
  60628168800, #      utc_end 1922-03-25 22:00:00 (Sat)
  60613138800, #  local_start 1921-10-02 23:00:00 (Sun)
  60628176000, #    local_end 1922-03-26 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  60628168800, #    utc_start 1922-03-25 22:00:00 (Sat)
  60645099600, #      utc_end 1922-10-07 21:00:00 (Sat)
  60628179600, #  local_start 1922-03-26 01:00:00 (Sun)
  60645110400, #    local_end 1922-10-08 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  60645099600, #    utc_start 1922-10-07 21:00:00 (Sat)
  60662037600, #      utc_end 1923-04-21 22:00:00 (Sat)
  60645106800, #  local_start 1922-10-07 23:00:00 (Sat)
  60662044800, #    local_end 1923-04-22 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  60662037600, #    utc_start 1923-04-21 22:00:00 (Sat)
  60674734800, #      utc_end 1923-09-15 21:00:00 (Sat)
  60662048400, #  local_start 1923-04-22 01:00:00 (Sun)
  60674745600, #    local_end 1923-09-16 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  60674734800, #    utc_start 1923-09-15 21:00:00 (Sat)
  61735816800, #      utc_end 1957-04-30 22:00:00 (Tue)
  60674742000, #  local_start 1923-09-15 23:00:00 (Sat)
  61735824000, #    local_end 1957-05-01 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  61735816800, #    utc_start 1957-04-30 22:00:00 (Tue)
  61749032400, #      utc_end 1957-09-30 21:00:00 (Mon)
  61735827600, #  local_start 1957-05-01 01:00:00 (Wed)
  61749043200, #    local_end 1957-10-01 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  61749032400, #    utc_start 1957-09-30 21:00:00 (Mon)
  61767352800, #      utc_end 1958-04-30 22:00:00 (Wed)
  61749039600, #  local_start 1957-09-30 23:00:00 (Mon)
  61767360000, #    local_end 1958-05-01 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  61767352800, #    utc_start 1958-04-30 22:00:00 (Wed)
  61780568400, #      utc_end 1958-09-30 21:00:00 (Tue)
  61767363600, #  local_start 1958-05-01 01:00:00 (Thu)
  61780579200, #    local_end 1958-10-01 00:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  61780568400, #    utc_start 1958-09-30 21:00:00 (Tue)
  61798888800, #      utc_end 1959-04-30 22:00:00 (Thu)
  61780575600, #  local_start 1958-09-30 23:00:00 (Tue)
  61798896000, #    local_end 1959-05-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  61798888800, #    utc_start 1959-04-30 22:00:00 (Thu)
  61812104400, #      utc_end 1959-09-30 21:00:00 (Wed)
  61798899600, #  local_start 1959-05-01 01:00:00 (Fri)
  61812115200, #    local_end 1959-10-01 00:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  61812104400, #    utc_start 1959-09-30 21:00:00 (Wed)
  61830511200, #      utc_end 1960-04-30 22:00:00 (Sat)
  61812111600, #  local_start 1959-09-30 23:00:00 (Wed)
  61830518400, #    local_end 1960-05-01 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61830511200, #    utc_start 1960-04-30 22:00:00 (Sat)
  61843726800, #      utc_end 1960-09-30 21:00:00 (Fri)
  61830522000, #  local_start 1960-05-01 01:00:00 (Sun)
  61843737600, #    local_end 1960-10-01 00:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  61843726800, #    utc_start 1960-09-30 21:00:00 (Fri)
  61862047200, #      utc_end 1961-04-30 22:00:00 (Sun)
  61843734000, #  local_start 1960-09-30 23:00:00 (Fri)
  61862054400, #    local_end 1961-05-01 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  61862047200, #    utc_start 1961-04-30 22:00:00 (Sun)
  61875262800, #      utc_end 1961-09-30 21:00:00 (Sat)
  61862058000, #  local_start 1961-05-01 01:00:00 (Mon)
  61875273600, #    local_end 1961-10-01 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61875262800, #    utc_start 1961-09-30 21:00:00 (Sat)
  62213695200, #      utc_end 1972-06-21 22:00:00 (Wed)
  61875270000, #  local_start 1961-09-30 23:00:00 (Sat)
  62213702400, #    local_end 1972-06-22 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  62213695200, #    utc_start 1972-06-21 22:00:00 (Wed)
  62222418000, #      utc_end 1972-09-30 21:00:00 (Sat)
  62213706000, #  local_start 1972-06-22 01:00:00 (Thu)
  62222428800, #    local_end 1972-10-01 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62222418000, #    utc_start 1972-09-30 21:00:00 (Sat)
  62240738400, #      utc_end 1973-04-30 22:00:00 (Mon)
  62222425200, #  local_start 1972-09-30 23:00:00 (Sat)
  62240745600, #    local_end 1973-05-01 00:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  62240738400, #    utc_start 1973-04-30 22:00:00 (Mon)
  62253954000, #      utc_end 1973-09-30 21:00:00 (Sun)
  62240749200, #  local_start 1973-05-01 01:00:00 (Tue)
  62253964800, #    local_end 1973-10-01 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62253954000, #    utc_start 1973-09-30 21:00:00 (Sun)
  62272274400, #      utc_end 1974-04-30 22:00:00 (Tue)
  62253961200, #  local_start 1973-09-30 23:00:00 (Sun)
  62272281600, #    local_end 1974-05-01 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62272274400, #    utc_start 1974-04-30 22:00:00 (Tue)
  62285490000, #      utc_end 1974-09-30 21:00:00 (Mon)
  62272285200, #  local_start 1974-05-01 01:00:00 (Wed)
  62285500800, #    local_end 1974-10-01 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  62285490000, #    utc_start 1974-09-30 21:00:00 (Mon)
  62303810400, #      utc_end 1975-04-30 22:00:00 (Wed)
  62285497200, #  local_start 1974-09-30 23:00:00 (Mon)
  62303817600, #    local_end 1975-05-01 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  62303810400, #    utc_start 1975-04-30 22:00:00 (Wed)
  62317026000, #      utc_end 1975-09-30 21:00:00 (Tue)
  62303821200, #  local_start 1975-05-01 01:00:00 (Thu)
  62317036800, #    local_end 1975-10-01 00:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  62317026000, #    utc_start 1975-09-30 21:00:00 (Tue)
  62335432800, #      utc_end 1976-04-30 22:00:00 (Fri)
  62317033200, #  local_start 1975-09-30 23:00:00 (Tue)
  62335440000, #    local_end 1976-05-01 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62335432800, #    utc_start 1976-04-30 22:00:00 (Fri)
  62348648400, #      utc_end 1976-09-30 21:00:00 (Thu)
  62335443600, #  local_start 1976-05-01 01:00:00 (Sat)
  62348659200, #    local_end 1976-10-01 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62348648400, #    utc_start 1976-09-30 21:00:00 (Thu)
  62366968800, #      utc_end 1977-04-30 22:00:00 (Sat)
  62348655600, #  local_start 1976-09-30 23:00:00 (Thu)
  62366976000, #    local_end 1977-05-01 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62366968800, #    utc_start 1977-04-30 22:00:00 (Sat)
  62380184400, #      utc_end 1977-09-30 21:00:00 (Fri)
  62366979600, #  local_start 1977-05-01 01:00:00 (Sun)
  62380195200, #    local_end 1977-10-01 00:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62380184400, #    utc_start 1977-09-30 21:00:00 (Fri)
  62398418400, #      utc_end 1978-04-29 22:00:00 (Sat)
  62380191600, #  local_start 1977-09-30 23:00:00 (Fri)
  62398425600, #    local_end 1978-04-30 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62398418400, #    utc_start 1978-04-29 22:00:00 (Sat)
  62411634000, #      utc_end 1978-09-29 21:00:00 (Fri)
  62398429200, #  local_start 1978-04-30 01:00:00 (Sun)
  62411644800, #    local_end 1978-09-30 00:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62411634000, #    utc_start 1978-09-29 21:00:00 (Fri)
  62587893600, #      utc_end 1984-04-30 22:00:00 (Mon)
  62411641200, #  local_start 1978-09-29 23:00:00 (Fri)
  62587900800, #    local_end 1984-05-01 00:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  62587893600, #    utc_start 1984-04-30 22:00:00 (Mon)
  62602405200, #      utc_end 1984-10-15 21:00:00 (Mon)
  62587904400, #  local_start 1984-05-01 01:00:00 (Tue)
  62602416000, #    local_end 1984-10-16 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  62602405200, #    utc_start 1984-10-15 21:00:00 (Mon)
  62619429600, #      utc_end 1985-04-30 22:00:00 (Tue)
  62602412400, #  local_start 1984-10-15 23:00:00 (Mon)
  62619436800, #    local_end 1985-05-01 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62619429600, #    utc_start 1985-04-30 22:00:00 (Tue)
  62633941200, #      utc_end 1985-10-15 21:00:00 (Tue)
  62619440400, #  local_start 1985-05-01 01:00:00 (Wed)
  62633952000, #    local_end 1985-10-16 00:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  62633941200, #    utc_start 1985-10-15 21:00:00 (Tue)
  62650965600, #      utc_end 1986-04-30 22:00:00 (Wed)
  62633948400, #  local_start 1985-10-15 23:00:00 (Tue)
  62650972800, #    local_end 1986-05-01 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  62650965600, #    utc_start 1986-04-30 22:00:00 (Wed)
  62665477200, #      utc_end 1986-10-15 21:00:00 (Wed)
  62650976400, #  local_start 1986-05-01 01:00:00 (Thu)
  62665488000, #    local_end 1986-10-16 00:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  62665477200, #    utc_start 1986-10-15 21:00:00 (Wed)
  62682501600, #      utc_end 1987-04-30 22:00:00 (Thu)
  62665484400, #  local_start 1986-10-15 23:00:00 (Wed)
  62682508800, #    local_end 1987-05-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62682501600, #    utc_start 1987-04-30 22:00:00 (Thu)
  62697013200, #      utc_end 1987-10-15 21:00:00 (Thu)
  62682512400, #  local_start 1987-05-01 01:00:00 (Fri)
  62697024000, #    local_end 1987-10-16 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62697013200, #    utc_start 1987-10-15 21:00:00 (Thu)
  62716802400, #      utc_end 1988-05-31 22:00:00 (Tue)
  62697020400, #  local_start 1987-10-15 23:00:00 (Thu)
  62716809600, #    local_end 1988-06-01 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62716802400, #    utc_start 1988-05-31 22:00:00 (Tue)
  62728635600, #      utc_end 1988-10-15 21:00:00 (Sat)
  62716813200, #  local_start 1988-06-01 01:00:00 (Wed)
  62728646400, #    local_end 1988-10-16 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62728635600, #    utc_start 1988-10-15 21:00:00 (Sat)
  62746437600, #      utc_end 1989-05-09 22:00:00 (Tue)
  62728642800, #  local_start 1988-10-15 23:00:00 (Sat)
  62746444800, #    local_end 1989-05-10 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62746437600, #    utc_start 1989-05-09 22:00:00 (Tue)
  62760171600, #      utc_end 1989-10-15 21:00:00 (Sun)
  62746448400, #  local_start 1989-05-10 01:00:00 (Wed)
  62760182400, #    local_end 1989-10-16 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62760171600, #    utc_start 1989-10-15 21:00:00 (Sun)
  62777196000, #      utc_end 1990-04-30 22:00:00 (Mon)
  62760178800, #  local_start 1989-10-15 23:00:00 (Sun)
  62777203200, #    local_end 1990-05-01 00:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  62777196000, #    utc_start 1990-04-30 22:00:00 (Mon)
  62791707600, #      utc_end 1990-10-15 21:00:00 (Mon)
  62777206800, #  local_start 1990-05-01 01:00:00 (Tue)
  62791718400, #    local_end 1990-10-16 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  62791707600, #    utc_start 1990-10-15 21:00:00 (Mon)
  62808732000, #      utc_end 1991-04-30 22:00:00 (Tue)
  62791714800, #  local_start 1990-10-15 23:00:00 (Mon)
  62808739200, #    local_end 1991-05-01 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62808732000, #    utc_start 1991-04-30 22:00:00 (Tue)
  62823243600, #      utc_end 1991-10-15 21:00:00 (Tue)
  62808742800, #  local_start 1991-05-01 01:00:00 (Wed)
  62823254400, #    local_end 1991-10-16 00:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  62823243600, #    utc_start 1991-10-15 21:00:00 (Tue)
  62840354400, #      utc_end 1992-04-30 22:00:00 (Thu)
  62823250800, #  local_start 1991-10-15 23:00:00 (Tue)
  62840361600, #    local_end 1992-05-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62840354400, #    utc_start 1992-04-30 22:00:00 (Thu)
  62853829200, #      utc_end 1992-10-03 21:00:00 (Sat)
  62840365200, #  local_start 1992-05-01 01:00:00 (Fri)
  62853840000, #    local_end 1992-10-04 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853829200, #    utc_start 1992-10-03 21:00:00 (Sat)
  62868952800, #      utc_end 1993-03-27 22:00:00 (Sat)
  62853836400, #  local_start 1992-10-03 23:00:00 (Sat)
  62868960000, #    local_end 1993-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868952800, #    utc_start 1993-03-27 22:00:00 (Sat)
  62884674000, #      utc_end 1993-09-25 21:00:00 (Sat)
  62868963600, #  local_start 1993-03-28 01:00:00 (Sun)
  62884684800, #    local_end 1993-09-26 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884674000, #    utc_start 1993-09-25 21:00:00 (Sat)
  62900402400, #      utc_end 1994-03-26 22:00:00 (Sat)
  62884681200, #  local_start 1993-09-25 23:00:00 (Sat)
  62900409600, #    local_end 1994-03-27 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900402400, #    utc_start 1994-03-26 22:00:00 (Sat)
  62916123600, #      utc_end 1994-09-24 21:00:00 (Sat)
  62900413200, #  local_start 1994-03-27 01:00:00 (Sun)
  62916134400, #    local_end 1994-09-25 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916123600, #    utc_start 1994-09-24 21:00:00 (Sat)
  62931852000, #      utc_end 1995-03-25 22:00:00 (Sat)
  62916130800, #  local_start 1994-09-24 23:00:00 (Sat)
  62931859200, #    local_end 1995-03-26 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931852000, #    utc_start 1995-03-25 22:00:00 (Sat)
  62947573200, #      utc_end 1995-09-23 21:00:00 (Sat)
  62931862800, #  local_start 1995-03-26 01:00:00 (Sun)
  62947584000, #    local_end 1995-09-24 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947573200, #    utc_start 1995-09-23 21:00:00 (Sat)
  62963906400, #      utc_end 1996-03-30 22:00:00 (Sat)
  62947580400, #  local_start 1995-09-23 23:00:00 (Sat)
  62963913600, #    local_end 1996-03-31 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963906400, #    utc_start 1996-03-30 22:00:00 (Sat)
  62979627600, #      utc_end 1996-09-28 21:00:00 (Sat)
  62963917200, #  local_start 1996-03-31 01:00:00 (Sun)
  62979638400, #    local_end 1996-09-29 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62979627600, #    utc_start 1996-09-28 21:00:00 (Sat)
  62995356000, #      utc_end 1997-03-29 22:00:00 (Sat)
  62979634800, #  local_start 1996-09-28 23:00:00 (Sat)
  62995363200, #    local_end 1997-03-30 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995356000, #    utc_start 1997-03-29 22:00:00 (Sat)
  63011077200, #      utc_end 1997-09-27 21:00:00 (Sat)
  62995366800, #  local_start 1997-03-30 01:00:00 (Sun)
  63011088000, #    local_end 1997-09-28 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63011077200, #    utc_start 1997-09-27 21:00:00 (Sat)
  63026805600, #      utc_end 1998-03-28 22:00:00 (Sat)
  63011084400, #  local_start 1997-09-27 23:00:00 (Sat)
  63026812800, #    local_end 1998-03-29 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026805600, #    utc_start 1998-03-28 22:00:00 (Sat)
  63042526800, #      utc_end 1998-09-26 21:00:00 (Sat)
  63026816400, #  local_start 1998-03-29 01:00:00 (Sun)
  63042537600, #    local_end 1998-09-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63042526800, #    utc_start 1998-09-26 21:00:00 (Sat)
  63058255200, #      utc_end 1999-03-27 22:00:00 (Sat)
  63042534000, #  local_start 1998-09-26 23:00:00 (Sat)
  63058262400, #    local_end 1999-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058255200, #    utc_start 1999-03-27 22:00:00 (Sat)
  63077000400, #      utc_end 1999-10-30 21:00:00 (Sat)
  63058266000, #  local_start 1999-03-28 01:00:00 (Sun)
  63077011200, #    local_end 1999-10-31 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077000400, #    utc_start 1999-10-30 21:00:00 (Sat)
  63089704800, #      utc_end 2000-03-25 22:00:00 (Sat)
  63077007600, #  local_start 1999-10-30 23:00:00 (Sat)
  63089712000, #    local_end 2000-03-26 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63089704800, #    utc_start 2000-03-25 22:00:00 (Sat)
  63108450000, #      utc_end 2000-10-28 21:00:00 (Sat)
  63089715600, #  local_start 2000-03-26 01:00:00 (Sun)
  63108460800, #    local_end 2000-10-29 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63108450000, #    utc_start 2000-10-28 21:00:00 (Sat)
  63121154400, #      utc_end 2001-03-24 22:00:00 (Sat)
  63108457200, #  local_start 2000-10-28 23:00:00 (Sat)
  63121161600, #    local_end 2001-03-25 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121154400, #    utc_start 2001-03-24 22:00:00 (Sat)
  63139899600, #      utc_end 2001-10-27 21:00:00 (Sat)
  63121165200, #  local_start 2001-03-25 01:00:00 (Sun)
  63139910400, #    local_end 2001-10-28 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63139899600, #    utc_start 2001-10-27 21:00:00 (Sat)
  63153208800, #      utc_end 2002-03-30 22:00:00 (Sat)
  63139906800, #  local_start 2001-10-27 23:00:00 (Sat)
  63153216000, #    local_end 2002-03-31 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153208800, #    utc_start 2002-03-30 22:00:00 (Sat)
  63171349200, #      utc_end 2002-10-26 21:00:00 (Sat)
  63153219600, #  local_start 2002-03-31 01:00:00 (Sun)
  63171360000, #    local_end 2002-10-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171349200, #    utc_start 2002-10-26 21:00:00 (Sat)
  63184658400, #      utc_end 2003-03-29 22:00:00 (Sat)
  63171356400, #  local_start 2002-10-26 23:00:00 (Sat)
  63184665600, #    local_end 2003-03-30 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184658400, #    utc_start 2003-03-29 22:00:00 (Sat)
  63202798800, #      utc_end 2003-10-25 21:00:00 (Sat)
  63184669200, #  local_start 2003-03-30 01:00:00 (Sun)
  63202809600, #    local_end 2003-10-26 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202798800, #    utc_start 2003-10-25 21:00:00 (Sat)
  63216108000, #      utc_end 2004-03-27 22:00:00 (Sat)
  63202806000, #  local_start 2003-10-25 23:00:00 (Sat)
  63216115200, #    local_end 2004-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216108000, #    utc_start 2004-03-27 22:00:00 (Sat)
  63234853200, #      utc_end 2004-10-30 21:00:00 (Sat)
  63216118800, #  local_start 2004-03-28 01:00:00 (Sun)
  63234864000, #    local_end 2004-10-31 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234853200, #    utc_start 2004-10-30 21:00:00 (Sat)
  63247557600, #      utc_end 2005-03-26 22:00:00 (Sat)
  63234860400, #  local_start 2004-10-30 23:00:00 (Sat)
  63247564800, #    local_end 2005-03-27 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247557600, #    utc_start 2005-03-26 22:00:00 (Sat)
  63266302800, #      utc_end 2005-10-29 21:00:00 (Sat)
  63247568400, #  local_start 2005-03-27 01:00:00 (Sun)
  63266313600, #    local_end 2005-10-30 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266302800, #    utc_start 2005-10-29 21:00:00 (Sat)
  63279007200, #      utc_end 2006-03-25 22:00:00 (Sat)
  63266310000, #  local_start 2005-10-29 23:00:00 (Sat)
  63279014400, #    local_end 2006-03-26 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279007200, #    utc_start 2006-03-25 22:00:00 (Sat)
  63297752400, #      utc_end 2006-10-28 21:00:00 (Sat)
  63279018000, #  local_start 2006-03-26 01:00:00 (Sun)
  63297763200, #    local_end 2006-10-29 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297752400, #    utc_start 2006-10-28 21:00:00 (Sat)
  63310456800, #      utc_end 2007-03-24 22:00:00 (Sat)
  63297759600, #  local_start 2006-10-28 23:00:00 (Sat)
  63310464000, #    local_end 2007-03-25 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310456800, #    utc_start 2007-03-24 22:00:00 (Sat)
  63329202000, #      utc_end 2007-10-27 21:00:00 (Sat)
  63310467600, #  local_start 2007-03-25 01:00:00 (Sun)
  63329212800, #    local_end 2007-10-28 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329202000, #    utc_start 2007-10-27 21:00:00 (Sat)
  63342511200, #      utc_end 2008-03-29 22:00:00 (Sat)
  63329209200, #  local_start 2007-10-27 23:00:00 (Sat)
  63342518400, #    local_end 2008-03-30 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342511200, #    utc_start 2008-03-29 22:00:00 (Sat)
  63360651600, #      utc_end 2008-10-25 21:00:00 (Sat)
  63342522000, #  local_start 2008-03-30 01:00:00 (Sun)
  63360662400, #    local_end 2008-10-26 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360651600, #    utc_start 2008-10-25 21:00:00 (Sat)
  63373960800, #      utc_end 2009-03-28 22:00:00 (Sat)
  63360658800, #  local_start 2008-10-25 23:00:00 (Sat)
  63373968000, #    local_end 2009-03-29 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373960800, #    utc_start 2009-03-28 22:00:00 (Sat)
  63392101200, #      utc_end 2009-10-24 21:00:00 (Sat)
  63373971600, #  local_start 2009-03-29 01:00:00 (Sun)
  63392112000, #    local_end 2009-10-25 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392101200, #    utc_start 2009-10-24 21:00:00 (Sat)
  63405410400, #      utc_end 2010-03-27 22:00:00 (Sat)
  63392108400, #  local_start 2009-10-24 23:00:00 (Sat)
  63405417600, #    local_end 2010-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405410400, #    utc_start 2010-03-27 22:00:00 (Sat)
  63424155600, #      utc_end 2010-10-30 21:00:00 (Sat)
  63405421200, #  local_start 2010-03-28 01:00:00 (Sun)
  63424166400, #    local_end 2010-10-31 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424155600, #    utc_start 2010-10-30 21:00:00 (Sat)
  63436860000, #      utc_end 2011-03-26 22:00:00 (Sat)
  63424162800, #  local_start 2010-10-30 23:00:00 (Sat)
  63436867200, #    local_end 2011-03-27 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436860000, #    utc_start 2011-03-26 22:00:00 (Sat)
  63455605200, #      utc_end 2011-10-29 21:00:00 (Sat)
  63436870800, #  local_start 2011-03-27 01:00:00 (Sun)
  63455616000, #    local_end 2011-10-30 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63455605200, #    utc_start 2011-10-29 21:00:00 (Sat)
  63468309600, #      utc_end 2012-03-24 22:00:00 (Sat)
  63455612400, #  local_start 2011-10-29 23:00:00 (Sat)
  63468316800, #    local_end 2012-03-25 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63468309600, #    utc_start 2012-03-24 22:00:00 (Sat)
  63487054800, #      utc_end 2012-10-27 21:00:00 (Sat)
  63468320400, #  local_start 2012-03-25 01:00:00 (Sun)
  63487065600, #    local_end 2012-10-28 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63487054800, #    utc_start 2012-10-27 21:00:00 (Sat)
  63500364000, #      utc_end 2013-03-30 22:00:00 (Sat)
  63487062000, #  local_start 2012-10-27 23:00:00 (Sat)
  63500371200, #    local_end 2013-03-31 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63500364000, #    utc_start 2013-03-30 22:00:00 (Sat)
  63518504400, #      utc_end 2013-10-26 21:00:00 (Sat)
  63500374800, #  local_start 2013-03-31 01:00:00 (Sun)
  63518515200, #    local_end 2013-10-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63518504400, #    utc_start 2013-10-26 21:00:00 (Sat)
  63531813600, #      utc_end 2014-03-29 22:00:00 (Sat)
  63518511600, #  local_start 2013-10-26 23:00:00 (Sat)
  63531820800, #    local_end 2014-03-30 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63531813600, #    utc_start 2014-03-29 22:00:00 (Sat)
  63549954000, #      utc_end 2014-10-25 21:00:00 (Sat)
  63531824400, #  local_start 2014-03-30 01:00:00 (Sun)
  63549964800, #    local_end 2014-10-26 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63549954000, #    utc_start 2014-10-25 21:00:00 (Sat)
  63563263200, #      utc_end 2015-03-28 22:00:00 (Sat)
  63549961200, #  local_start 2014-10-25 23:00:00 (Sat)
  63563270400, #    local_end 2015-03-29 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63563263200, #    utc_start 2015-03-28 22:00:00 (Sat)
  63581403600, #      utc_end 2015-10-24 21:00:00 (Sat)
  63563274000, #  local_start 2015-03-29 01:00:00 (Sun)
  63581414400, #    local_end 2015-10-25 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63581403600, #    utc_start 2015-10-24 21:00:00 (Sat)
  63594712800, #      utc_end 2016-03-26 22:00:00 (Sat)
  63581410800, #  local_start 2015-10-24 23:00:00 (Sat)
  63594720000, #    local_end 2016-03-27 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63594712800, #    utc_start 2016-03-26 22:00:00 (Sat)
  63613458000, #      utc_end 2016-10-29 21:00:00 (Sat)
  63594723600, #  local_start 2016-03-27 01:00:00 (Sun)
  63613468800, #    local_end 2016-10-30 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63613458000, #    utc_start 2016-10-29 21:00:00 (Sat)
  63626162400, #      utc_end 2017-03-25 22:00:00 (Sat)
  63613465200, #  local_start 2016-10-29 23:00:00 (Sat)
  63626169600, #    local_end 2017-03-26 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63626162400, #    utc_start 2017-03-25 22:00:00 (Sat)
  63644907600, #      utc_end 2017-10-28 21:00:00 (Sat)
  63626173200, #  local_start 2017-03-26 01:00:00 (Sun)
  63644918400, #    local_end 2017-10-29 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63644907600, #    utc_start 2017-10-28 21:00:00 (Sat)
  63657612000, #      utc_end 2018-03-24 22:00:00 (Sat)
  63644914800, #  local_start 2017-10-28 23:00:00 (Sat)
  63657619200, #    local_end 2018-03-25 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63657612000, #    utc_start 2018-03-24 22:00:00 (Sat)
  63676357200, #      utc_end 2018-10-27 21:00:00 (Sat)
  63657622800, #  local_start 2018-03-25 01:00:00 (Sun)
  63676368000, #    local_end 2018-10-28 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63676357200, #    utc_start 2018-10-27 21:00:00 (Sat)
  63689666400, #      utc_end 2019-03-30 22:00:00 (Sat)
  63676364400, #  local_start 2018-10-27 23:00:00 (Sat)
  63689673600, #    local_end 2019-03-31 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63689666400, #    utc_start 2019-03-30 22:00:00 (Sat)
  63707806800, #      utc_end 2019-10-26 21:00:00 (Sat)
  63689677200, #  local_start 2019-03-31 01:00:00 (Sun)
  63707817600, #    local_end 2019-10-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63707806800, #    utc_start 2019-10-26 21:00:00 (Sat)
  63721116000, #      utc_end 2020-03-28 22:00:00 (Sat)
  63707814000, #  local_start 2019-10-26 23:00:00 (Sat)
  63721123200, #    local_end 2020-03-29 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63721116000, #    utc_start 2020-03-28 22:00:00 (Sat)
  63739256400, #      utc_end 2020-10-24 21:00:00 (Sat)
  63721126800, #  local_start 2020-03-29 01:00:00 (Sun)
  63739267200, #    local_end 2020-10-25 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63739256400, #    utc_start 2020-10-24 21:00:00 (Sat)
  63752565600, #      utc_end 2021-03-27 22:00:00 (Sat)
  63739263600, #  local_start 2020-10-24 23:00:00 (Sat)
  63752572800, #    local_end 2021-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63752565600, #    utc_start 2021-03-27 22:00:00 (Sat)
  63771310800, #      utc_end 2021-10-30 21:00:00 (Sat)
  63752576400, #  local_start 2021-03-28 01:00:00 (Sun)
  63771321600, #    local_end 2021-10-31 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63771310800, #    utc_start 2021-10-30 21:00:00 (Sat)
  63784015200, #      utc_end 2022-03-26 22:00:00 (Sat)
  63771318000, #  local_start 2021-10-30 23:00:00 (Sat)
  63784022400, #    local_end 2022-03-27 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63784015200, #    utc_start 2022-03-26 22:00:00 (Sat)
  63802760400, #      utc_end 2022-10-29 21:00:00 (Sat)
  63784026000, #  local_start 2022-03-27 01:00:00 (Sun)
  63802771200, #    local_end 2022-10-30 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63802760400, #    utc_start 2022-10-29 21:00:00 (Sat)
  63815464800, #      utc_end 2023-03-25 22:00:00 (Sat)
  63802767600, #  local_start 2022-10-29 23:00:00 (Sat)
  63815472000, #    local_end 2023-03-26 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63815464800, #    utc_start 2023-03-25 22:00:00 (Sat)
  63834210000, #      utc_end 2023-10-28 21:00:00 (Sat)
  63815475600, #  local_start 2023-03-26 01:00:00 (Sun)
  63834220800, #    local_end 2023-10-29 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63834210000, #    utc_start 2023-10-28 21:00:00 (Sat)
  63847519200, #      utc_end 2024-03-30 22:00:00 (Sat)
  63834217200, #  local_start 2023-10-28 23:00:00 (Sat)
  63847526400, #    local_end 2024-03-31 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63847519200, #    utc_start 2024-03-30 22:00:00 (Sat)
  63865659600, #      utc_end 2024-10-26 21:00:00 (Sat)
  63847530000, #  local_start 2024-03-31 01:00:00 (Sun)
  63865670400, #    local_end 2024-10-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63865659600, #    utc_start 2024-10-26 21:00:00 (Sat)
  63878968800, #      utc_end 2025-03-29 22:00:00 (Sat)
  63865666800, #  local_start 2024-10-26 23:00:00 (Sat)
  63878976000, #    local_end 2025-03-30 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63878968800, #    utc_start 2025-03-29 22:00:00 (Sat)
  63897109200, #      utc_end 2025-10-25 21:00:00 (Sat)
  63878979600, #  local_start 2025-03-30 01:00:00 (Sun)
  63897120000, #    local_end 2025-10-26 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63897109200, #    utc_start 2025-10-25 21:00:00 (Sat)
  63910418400, #      utc_end 2026-03-28 22:00:00 (Sat)
  63897116400, #  local_start 2025-10-25 23:00:00 (Sat)
  63910425600, #    local_end 2026-03-29 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63910418400, #    utc_start 2026-03-28 22:00:00 (Sat)
  63928558800, #      utc_end 2026-10-24 21:00:00 (Sat)
  63910429200, #  local_start 2026-03-29 01:00:00 (Sun)
  63928569600, #    local_end 2026-10-25 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63928558800, #    utc_start 2026-10-24 21:00:00 (Sat)
  63941868000, #      utc_end 2027-03-27 22:00:00 (Sat)
  63928566000, #  local_start 2026-10-24 23:00:00 (Sat)
  63941875200, #    local_end 2027-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63941868000, #    utc_start 2027-03-27 22:00:00 (Sat)
  63960613200, #      utc_end 2027-10-30 21:00:00 (Sat)
  63941878800, #  local_start 2027-03-28 01:00:00 (Sun)
  63960624000, #    local_end 2027-10-31 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {60}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 686290,
      'local_rd_secs' => 85080,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 686290,
      'utc_rd_secs' => 85080,
      'utc_year' => 1880
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 686290,
      'local_rd_secs' => 77880,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 686290,
      'utc_rd_secs' => 77880,
      'utc_year' => 1880
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '0:00',
      'from' => '1999',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'Lebanon',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '0:00',
      'from' => '1993',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'Lebanon',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_BEIRUT

    $main::fatpacked{"DateTime/TimeZone/Asia/Bishkek.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_BISHKEK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Bishkek;
  $DateTime::TimeZone::Asia::Bishkek::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Bishkek::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694513296, #      utc_end 1924-05-01 19:01:36 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  17904,
  0,
  'LMT',
      ],
      [
  60694513296, #    utc_start 1924-05-01 19:01:36 (Thu)
  60888135600, #      utc_end 1930-06-20 19:00:00 (Fri)
  60694531296, #  local_start 1924-05-02 00:01:36 (Fri)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  18000,
  0,
  'FRUT',
      ],
      [
  60888135600, #    utc_start 1930-06-20 19:00:00 (Fri)
  62490592800, #      utc_end 1981-03-31 18:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  21600,
  0,
  'FRUT',
      ],
      [
  62490592800, #    utc_start 1981-03-31 18:00:00 (Tue)
  62506400400, #      utc_end 1981-09-30 17:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  25200,
  1,
  'FRUST',
      ],
      [
  62506400400, #    utc_start 1981-09-30 17:00:00 (Wed)
  62522128800, #      utc_end 1982-03-31 18:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  21600,
  0,
  'FRUT',
      ],
      [
  62522128800, #    utc_start 1982-03-31 18:00:00 (Wed)
  62537936400, #      utc_end 1982-09-30 17:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  25200,
  1,
  'FRUST',
      ],
      [
  62537936400, #    utc_start 1982-09-30 17:00:00 (Thu)
  62553664800, #      utc_end 1983-03-31 18:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  21600,
  0,
  'FRUT',
      ],
      [
  62553664800, #    utc_start 1983-03-31 18:00:00 (Thu)
  62569472400, #      utc_end 1983-09-30 17:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  25200,
  1,
  'FRUST',
      ],
      [
  62569472400, #    utc_start 1983-09-30 17:00:00 (Fri)
  62585287200, #      utc_end 1984-03-31 18:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  21600,
  0,
  'FRUT',
      ],
      [
  62585287200, #    utc_start 1984-03-31 18:00:00 (Sat)
  62601019200, #      utc_end 1984-09-29 20:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  25200,
  1,
  'FRUST',
      ],
      [
  62601019200, #    utc_start 1984-09-29 20:00:00 (Sat)
  62616744000, #      utc_end 1985-03-30 20:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  21600,
  0,
  'FRUT',
      ],
      [
  62616744000, #    utc_start 1985-03-30 20:00:00 (Sat)
  62632468800, #      utc_end 1985-09-28 20:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  25200,
  1,
  'FRUST',
      ],
      [
  62632468800, #    utc_start 1985-09-28 20:00:00 (Sat)
  62648193600, #      utc_end 1986-03-29 20:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  21600,
  0,
  'FRUT',
      ],
      [
  62648193600, #    utc_start 1986-03-29 20:00:00 (Sat)
  62663918400, #      utc_end 1986-09-27 20:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  25200,
  1,
  'FRUST',
      ],
      [
  62663918400, #    utc_start 1986-09-27 20:00:00 (Sat)
  62679643200, #      utc_end 1987-03-28 20:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  21600,
  0,
  'FRUT',
      ],
      [
  62679643200, #    utc_start 1987-03-28 20:00:00 (Sat)
  62695368000, #      utc_end 1987-09-26 20:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  25200,
  1,
  'FRUST',
      ],
      [
  62695368000, #    utc_start 1987-09-26 20:00:00 (Sat)
  62711092800, #      utc_end 1988-03-26 20:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  21600,
  0,
  'FRUT',
      ],
      [
  62711092800, #    utc_start 1988-03-26 20:00:00 (Sat)
  62726817600, #      utc_end 1988-09-24 20:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  25200,
  1,
  'FRUST',
      ],
      [
  62726817600, #    utc_start 1988-09-24 20:00:00 (Sat)
  62742542400, #      utc_end 1989-03-25 20:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  21600,
  0,
  'FRUT',
      ],
      [
  62742542400, #    utc_start 1989-03-25 20:00:00 (Sat)
  62758267200, #      utc_end 1989-09-23 20:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  25200,
  1,
  'FRUST',
      ],
      [
  62758267200, #    utc_start 1989-09-23 20:00:00 (Sat)
  62773992000, #      utc_end 1990-03-24 20:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  21600,
  0,
  'FRUT',
      ],
      [
  62773992000, #    utc_start 1990-03-24 20:00:00 (Sat)
  62790321600, #      utc_end 1990-09-29 20:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  25200,
  1,
  'FRUST',
      ],
      [
  62790321600, #    utc_start 1990-09-29 20:00:00 (Sat)
  62806046400, #      utc_end 1991-03-30 20:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  21600,
  0,
  'FRUT',
      ],
      [
  62806046400, #    utc_start 1991-03-30 20:00:00 (Sat)
  62819265600, #      utc_end 1991-08-30 20:00:00 (Fri)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62819287200, #    local_end 1991-08-31 02:00:00 (Sat)
  21600,
  1,
  'FRUST',
      ],
      [
  62819265600, #    utc_start 1991-08-30 20:00:00 (Fri)
  62838702000, #      utc_end 1992-04-11 19:00:00 (Sat)
  62819283600, #  local_start 1991-08-31 01:00:00 (Sat)
  62838720000, #    local_end 1992-04-12 00:00:00 (Sun)
  18000,
  0,
  'KGT',
      ],
      [
  62838702000, #    utc_start 1992-04-11 19:00:00 (Sat)
  62853213600, #      utc_end 1992-09-26 18:00:00 (Sat)
  62838723600, #  local_start 1992-04-12 01:00:00 (Sun)
  62853235200, #    local_end 1992-09-27 00:00:00 (Sun)
  21600,
  1,
  'KGST',
      ],
      [
  62853213600, #    utc_start 1992-09-26 18:00:00 (Sat)
  62870151600, #      utc_end 1993-04-10 19:00:00 (Sat)
  62853231600, #  local_start 1992-09-26 23:00:00 (Sat)
  62870169600, #    local_end 1993-04-11 00:00:00 (Sun)
  18000,
  0,
  'KGT',
      ],
      [
  62870151600, #    utc_start 1993-04-10 19:00:00 (Sat)
  62884663200, #      utc_end 1993-09-25 18:00:00 (Sat)
  62870173200, #  local_start 1993-04-11 01:00:00 (Sun)
  62884684800, #    local_end 1993-09-26 00:00:00 (Sun)
  21600,
  1,
  'KGST',
      ],
      [
  62884663200, #    utc_start 1993-09-25 18:00:00 (Sat)
  62901601200, #      utc_end 1994-04-09 19:00:00 (Sat)
  62884681200, #  local_start 1993-09-25 23:00:00 (Sat)
  62901619200, #    local_end 1994-04-10 00:00:00 (Sun)
  18000,
  0,
  'KGT',
      ],
      [
  62901601200, #    utc_start 1994-04-09 19:00:00 (Sat)
  62916112800, #      utc_end 1994-09-24 18:00:00 (Sat)
  62901622800, #  local_start 1994-04-10 01:00:00 (Sun)
  62916134400, #    local_end 1994-09-25 00:00:00 (Sun)
  21600,
  1,
  'KGST',
      ],
      [
  62916112800, #    utc_start 1994-09-24 18:00:00 (Sat)
  62933050800, #      utc_end 1995-04-08 19:00:00 (Sat)
  62916130800, #  local_start 1994-09-24 23:00:00 (Sat)
  62933068800, #    local_end 1995-04-09 00:00:00 (Sun)
  18000,
  0,
  'KGT',
      ],
      [
  62933050800, #    utc_start 1995-04-08 19:00:00 (Sat)
  62947562400, #      utc_end 1995-09-23 18:00:00 (Sat)
  62933072400, #  local_start 1995-04-09 01:00:00 (Sun)
  62947584000, #    local_end 1995-09-24 00:00:00 (Sun)
  21600,
  1,
  'KGST',
      ],
      [
  62947562400, #    utc_start 1995-09-23 18:00:00 (Sat)
  62964500400, #      utc_end 1996-04-06 19:00:00 (Sat)
  62947580400, #  local_start 1995-09-23 23:00:00 (Sat)
  62964518400, #    local_end 1996-04-07 00:00:00 (Sun)
  18000,
  0,
  'KGT',
      ],
      [
  62964500400, #    utc_start 1996-04-06 19:00:00 (Sat)
  62979616800, #      utc_end 1996-09-28 18:00:00 (Sat)
  62964522000, #  local_start 1996-04-07 01:00:00 (Sun)
  62979638400, #    local_end 1996-09-29 00:00:00 (Sun)
  21600,
  1,
  'KGST',
      ],
      [
  62979616800, #    utc_start 1996-09-28 18:00:00 (Sat)
  62995354200, #      utc_end 1997-03-29 21:30:00 (Sat)
  62979634800, #  local_start 1996-09-28 23:00:00 (Sat)
  62995372200, #    local_end 1997-03-30 02:30:00 (Sun)
  18000,
  0,
  'KGT',
      ],
      [
  62995354200, #    utc_start 1997-03-29 21:30:00 (Sat)
  63013494600, #      utc_end 1997-10-25 20:30:00 (Sat)
  62995375800, #  local_start 1997-03-30 03:30:00 (Sun)
  63013516200, #    local_end 1997-10-26 02:30:00 (Sun)
  21600,
  1,
  'KGST',
      ],
      [
  63013494600, #    utc_start 1997-10-25 20:30:00 (Sat)
  63026803800, #      utc_end 1998-03-28 21:30:00 (Sat)
  63013512600, #  local_start 1997-10-26 01:30:00 (Sun)
  63026821800, #    local_end 1998-03-29 02:30:00 (Sun)
  18000,
  0,
  'KGT',
      ],
      [
  63026803800, #    utc_start 1998-03-28 21:30:00 (Sat)
  63044944200, #      utc_end 1998-10-24 20:30:00 (Sat)
  63026825400, #  local_start 1998-03-29 03:30:00 (Sun)
  63044965800, #    local_end 1998-10-25 02:30:00 (Sun)
  21600,
  1,
  'KGST',
      ],
      [
  63044944200, #    utc_start 1998-10-24 20:30:00 (Sat)
  63058253400, #      utc_end 1999-03-27 21:30:00 (Sat)
  63044962200, #  local_start 1998-10-25 01:30:00 (Sun)
  63058271400, #    local_end 1999-03-28 02:30:00 (Sun)
  18000,
  0,
  'KGT',
      ],
      [
  63058253400, #    utc_start 1999-03-27 21:30:00 (Sat)
  63076998600, #      utc_end 1999-10-30 20:30:00 (Sat)
  63058275000, #  local_start 1999-03-28 03:30:00 (Sun)
  63077020200, #    local_end 1999-10-31 02:30:00 (Sun)
  21600,
  1,
  'KGST',
      ],
      [
  63076998600, #    utc_start 1999-10-30 20:30:00 (Sat)
  63089703000, #      utc_end 2000-03-25 21:30:00 (Sat)
  63077016600, #  local_start 1999-10-31 01:30:00 (Sun)
  63089721000, #    local_end 2000-03-26 02:30:00 (Sun)
  18000,
  0,
  'KGT',
      ],
      [
  63089703000, #    utc_start 2000-03-25 21:30:00 (Sat)
  63108448200, #      utc_end 2000-10-28 20:30:00 (Sat)
  63089724600, #  local_start 2000-03-26 03:30:00 (Sun)
  63108469800, #    local_end 2000-10-29 02:30:00 (Sun)
  21600,
  1,
  'KGST',
      ],
      [
  63108448200, #    utc_start 2000-10-28 20:30:00 (Sat)
  63121152600, #      utc_end 2001-03-24 21:30:00 (Sat)
  63108466200, #  local_start 2000-10-29 01:30:00 (Sun)
  63121170600, #    local_end 2001-03-25 02:30:00 (Sun)
  18000,
  0,
  'KGT',
      ],
      [
  63121152600, #    utc_start 2001-03-24 21:30:00 (Sat)
  63139897800, #      utc_end 2001-10-27 20:30:00 (Sat)
  63121174200, #  local_start 2001-03-25 03:30:00 (Sun)
  63139919400, #    local_end 2001-10-28 02:30:00 (Sun)
  21600,
  1,
  'KGST',
      ],
      [
  63139897800, #    utc_start 2001-10-27 20:30:00 (Sat)
  63153207000, #      utc_end 2002-03-30 21:30:00 (Sat)
  63139915800, #  local_start 2001-10-28 01:30:00 (Sun)
  63153225000, #    local_end 2002-03-31 02:30:00 (Sun)
  18000,
  0,
  'KGT',
      ],
      [
  63153207000, #    utc_start 2002-03-30 21:30:00 (Sat)
  63171347400, #      utc_end 2002-10-26 20:30:00 (Sat)
  63153228600, #  local_start 2002-03-31 03:30:00 (Sun)
  63171369000, #    local_end 2002-10-27 02:30:00 (Sun)
  21600,
  1,
  'KGST',
      ],
      [
  63171347400, #    utc_start 2002-10-26 20:30:00 (Sat)
  63184656600, #      utc_end 2003-03-29 21:30:00 (Sat)
  63171365400, #  local_start 2002-10-27 01:30:00 (Sun)
  63184674600, #    local_end 2003-03-30 02:30:00 (Sun)
  18000,
  0,
  'KGT',
      ],
      [
  63184656600, #    utc_start 2003-03-29 21:30:00 (Sat)
  63202797000, #      utc_end 2003-10-25 20:30:00 (Sat)
  63184678200, #  local_start 2003-03-30 03:30:00 (Sun)
  63202818600, #    local_end 2003-10-26 02:30:00 (Sun)
  21600,
  1,
  'KGST',
      ],
      [
  63202797000, #    utc_start 2003-10-25 20:30:00 (Sat)
  63216106200, #      utc_end 2004-03-27 21:30:00 (Sat)
  63202815000, #  local_start 2003-10-26 01:30:00 (Sun)
  63216124200, #    local_end 2004-03-28 02:30:00 (Sun)
  18000,
  0,
  'KGT',
      ],
      [
  63216106200, #    utc_start 2004-03-27 21:30:00 (Sat)
  63234851400, #      utc_end 2004-10-30 20:30:00 (Sat)
  63216127800, #  local_start 2004-03-28 03:30:00 (Sun)
  63234873000, #    local_end 2004-10-31 02:30:00 (Sun)
  21600,
  1,
  'KGST',
      ],
      [
  63234851400, #    utc_start 2004-10-30 20:30:00 (Sat)
  63247555800, #      utc_end 2005-03-26 21:30:00 (Sat)
  63234869400, #  local_start 2004-10-31 01:30:00 (Sun)
  63247573800, #    local_end 2005-03-27 02:30:00 (Sun)
  18000,
  0,
  'KGT',
      ],
      [
  63247555800, #    utc_start 2005-03-26 21:30:00 (Sat)
  63259466400, #      utc_end 2005-08-11 18:00:00 (Thu)
  63247577400, #  local_start 2005-03-27 03:30:00 (Sun)
  63259488000, #    local_end 2005-08-12 00:00:00 (Fri)
  21600,
  1,
  'KGST',
      ],
      [
  63259466400, #    utc_start 2005-08-11 18:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  63259488000, #  local_start 2005-08-12 00:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #    local_end
  21600,
  0,
  'KGT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {25}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_BISHKEK

    $main::fatpacked{"DateTime/TimeZone/Asia/Brunei.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_BRUNEI';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Brunei;
  $DateTime::TimeZone::Asia::Brunei::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Brunei::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60752218820, #      utc_end 1926-02-28 16:20:20 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60752246400, #    local_end 1926-03-01 00:00:00 (Mon)
  27580,
  0,
  'LMT',
      ],
      [
  60752218820, #    utc_start 1926-02-28 16:20:20 (Sun)
  60968046600, #      utc_end 1932-12-31 16:30:00 (Sat)
  60752245820, #  local_start 1926-02-28 23:50:20 (Sun)
  60968073600, #    local_end 1933-01-01 00:00:00 (Sun)
  27000,
  0,
  'BNT',
      ],
      [
  60968046600, #    utc_start 1932-12-31 16:30:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  60968075400, #  local_start 1933-01-01 00:30:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  28800,
  0,
  'BNT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_BRUNEI

    $main::fatpacked{"DateTime/TimeZone/Asia/Chita.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_CHITA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Chita;
  $DateTime::TimeZone::Asia::Chita::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Chita::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60556263968, #      utc_end 1919-12-14 16:26:08 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60556291200, #    local_end 1919-12-15 00:00:00 (Mon)
  27232,
  0,
  'LMT',
      ],
      [
  60556263968, #    utc_start 1919-12-14 16:26:08 (Sun)
  60888124800, #      utc_end 1930-06-20 16:00:00 (Fri)
  60556292768, #  local_start 1919-12-15 00:26:08 (Mon)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  28800,
  0,
  'YAKT',
      ],
      [
  60888124800, #    utc_start 1930-06-20 16:00:00 (Fri)
  62490582000, #      utc_end 1981-03-31 15:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  32400,
  0,
  'YAKT',
      ],
      [
  62490582000, #    utc_start 1981-03-31 15:00:00 (Tue)
  62506389600, #      utc_end 1981-09-30 14:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  36000,
  1,
  'YAKST',
      ],
      [
  62506389600, #    utc_start 1981-09-30 14:00:00 (Wed)
  62522118000, #      utc_end 1982-03-31 15:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  32400,
  0,
  'YAKT',
      ],
      [
  62522118000, #    utc_start 1982-03-31 15:00:00 (Wed)
  62537925600, #      utc_end 1982-09-30 14:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  36000,
  1,
  'YAKST',
      ],
      [
  62537925600, #    utc_start 1982-09-30 14:00:00 (Thu)
  62553654000, #      utc_end 1983-03-31 15:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  32400,
  0,
  'YAKT',
      ],
      [
  62553654000, #    utc_start 1983-03-31 15:00:00 (Thu)
  62569461600, #      utc_end 1983-09-30 14:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  36000,
  1,
  'YAKST',
      ],
      [
  62569461600, #    utc_start 1983-09-30 14:00:00 (Fri)
  62585276400, #      utc_end 1984-03-31 15:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62585276400, #    utc_start 1984-03-31 15:00:00 (Sat)
  62601008400, #      utc_end 1984-09-29 17:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62601008400, #    utc_start 1984-09-29 17:00:00 (Sat)
  62616733200, #      utc_end 1985-03-30 17:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62616733200, #    utc_start 1985-03-30 17:00:00 (Sat)
  62632458000, #      utc_end 1985-09-28 17:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62632458000, #    utc_start 1985-09-28 17:00:00 (Sat)
  62648182800, #      utc_end 1986-03-29 17:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62648182800, #    utc_start 1986-03-29 17:00:00 (Sat)
  62663907600, #      utc_end 1986-09-27 17:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62663907600, #    utc_start 1986-09-27 17:00:00 (Sat)
  62679632400, #      utc_end 1987-03-28 17:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62679632400, #    utc_start 1987-03-28 17:00:00 (Sat)
  62695357200, #      utc_end 1987-09-26 17:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62695357200, #    utc_start 1987-09-26 17:00:00 (Sat)
  62711082000, #      utc_end 1988-03-26 17:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62711082000, #    utc_start 1988-03-26 17:00:00 (Sat)
  62726806800, #      utc_end 1988-09-24 17:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62726806800, #    utc_start 1988-09-24 17:00:00 (Sat)
  62742531600, #      utc_end 1989-03-25 17:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62742531600, #    utc_start 1989-03-25 17:00:00 (Sat)
  62758256400, #      utc_end 1989-09-23 17:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62758256400, #    utc_start 1989-09-23 17:00:00 (Sat)
  62773981200, #      utc_end 1990-03-24 17:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62773981200, #    utc_start 1990-03-24 17:00:00 (Sat)
  62790310800, #      utc_end 1990-09-29 17:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62790310800, #    utc_start 1990-09-29 17:00:00 (Sat)
  62806035600, #      utc_end 1991-03-30 17:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62806035600, #    utc_start 1991-03-30 17:00:00 (Sat)
  62821764000, #      utc_end 1991-09-28 18:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  32400,
  1,
  'YAKST',
      ],
      [
  62821764000, #    utc_start 1991-09-28 18:00:00 (Sat)
  62831440800, #      utc_end 1992-01-18 18:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  28800,
  0,
  'YAKT',
      ],
      [
  62831440800, #    utc_start 1992-01-18 18:00:00 (Sat)
  62837485200, #      utc_end 1992-03-28 17:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62837485200, #    utc_start 1992-03-28 17:00:00 (Sat)
  62853210000, #      utc_end 1992-09-26 17:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62853210000, #    utc_start 1992-09-26 17:00:00 (Sat)
  62868934800, #      utc_end 1993-03-27 17:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62868934800, #    utc_start 1993-03-27 17:00:00 (Sat)
  62884659600, #      utc_end 1993-09-25 17:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62884659600, #    utc_start 1993-09-25 17:00:00 (Sat)
  62900384400, #      utc_end 1994-03-26 17:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62900384400, #    utc_start 1994-03-26 17:00:00 (Sat)
  62916109200, #      utc_end 1994-09-24 17:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62916109200, #    utc_start 1994-09-24 17:00:00 (Sat)
  62931834000, #      utc_end 1995-03-25 17:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62931834000, #    utc_start 1995-03-25 17:00:00 (Sat)
  62947558800, #      utc_end 1995-09-23 17:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62947558800, #    utc_start 1995-09-23 17:00:00 (Sat)
  62963888400, #      utc_end 1996-03-30 17:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62963888400, #    utc_start 1996-03-30 17:00:00 (Sat)
  62982032400, #      utc_end 1996-10-26 17:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62982032400, #    utc_start 1996-10-26 17:00:00 (Sat)
  62995338000, #      utc_end 1997-03-29 17:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62995338000, #    utc_start 1997-03-29 17:00:00 (Sat)
  63013482000, #      utc_end 1997-10-25 17:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63013482000, #    utc_start 1997-10-25 17:00:00 (Sat)
  63026787600, #      utc_end 1998-03-28 17:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63026787600, #    utc_start 1998-03-28 17:00:00 (Sat)
  63044931600, #      utc_end 1998-10-24 17:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63044931600, #    utc_start 1998-10-24 17:00:00 (Sat)
  63058237200, #      utc_end 1999-03-27 17:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63058237200, #    utc_start 1999-03-27 17:00:00 (Sat)
  63076986000, #      utc_end 1999-10-30 17:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63076986000, #    utc_start 1999-10-30 17:00:00 (Sat)
  63089686800, #      utc_end 2000-03-25 17:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63089686800, #    utc_start 2000-03-25 17:00:00 (Sat)
  63108435600, #      utc_end 2000-10-28 17:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63108435600, #    utc_start 2000-10-28 17:00:00 (Sat)
  63121136400, #      utc_end 2001-03-24 17:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63121136400, #    utc_start 2001-03-24 17:00:00 (Sat)
  63139885200, #      utc_end 2001-10-27 17:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63139885200, #    utc_start 2001-10-27 17:00:00 (Sat)
  63153190800, #      utc_end 2002-03-30 17:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63153190800, #    utc_start 2002-03-30 17:00:00 (Sat)
  63171334800, #      utc_end 2002-10-26 17:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63171334800, #    utc_start 2002-10-26 17:00:00 (Sat)
  63184640400, #      utc_end 2003-03-29 17:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63184640400, #    utc_start 2003-03-29 17:00:00 (Sat)
  63202784400, #      utc_end 2003-10-25 17:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63202784400, #    utc_start 2003-10-25 17:00:00 (Sat)
  63216090000, #      utc_end 2004-03-27 17:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63216090000, #    utc_start 2004-03-27 17:00:00 (Sat)
  63234838800, #      utc_end 2004-10-30 17:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63234838800, #    utc_start 2004-10-30 17:00:00 (Sat)
  63247539600, #      utc_end 2005-03-26 17:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63247539600, #    utc_start 2005-03-26 17:00:00 (Sat)
  63266288400, #      utc_end 2005-10-29 17:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63266288400, #    utc_start 2005-10-29 17:00:00 (Sat)
  63278989200, #      utc_end 2006-03-25 17:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63278989200, #    utc_start 2006-03-25 17:00:00 (Sat)
  63297738000, #      utc_end 2006-10-28 17:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63297738000, #    utc_start 2006-10-28 17:00:00 (Sat)
  63310438800, #      utc_end 2007-03-24 17:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63310438800, #    utc_start 2007-03-24 17:00:00 (Sat)
  63329187600, #      utc_end 2007-10-27 17:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63329187600, #    utc_start 2007-10-27 17:00:00 (Sat)
  63342493200, #      utc_end 2008-03-29 17:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63342493200, #    utc_start 2008-03-29 17:00:00 (Sat)
  63360637200, #      utc_end 2008-10-25 17:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63360637200, #    utc_start 2008-10-25 17:00:00 (Sat)
  63373942800, #      utc_end 2009-03-28 17:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63373942800, #    utc_start 2009-03-28 17:00:00 (Sat)
  63392086800, #      utc_end 2009-10-24 17:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63392086800, #    utc_start 2009-10-24 17:00:00 (Sat)
  63405392400, #      utc_end 2010-03-27 17:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63405392400, #    utc_start 2010-03-27 17:00:00 (Sat)
  63424141200, #      utc_end 2010-10-30 17:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63424141200, #    utc_start 2010-10-30 17:00:00 (Sat)
  63436842000, #      utc_end 2011-03-26 17:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63436842000, #    utc_start 2011-03-26 17:00:00 (Sat)
  63549936000, #      utc_end 2014-10-25 16:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  36000,
  0,
  'YAKT',
      ],
      [
  63549936000, #    utc_start 2014-10-25 16:00:00 (Sat)
  63594698400, #      utc_end 2016-03-26 18:00:00 (Sat)
  63549964800, #  local_start 2014-10-26 00:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  63594698400, #    utc_start 2016-03-26 18:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  32400,
  0,
  'YAKT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_CHITA

    $main::fatpacked{"DateTime/TimeZone/Asia/Choibalsan.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_CHOIBALSAN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Choibalsan;
  $DateTime::TimeZone::Asia::Choibalsan::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Choibalsan::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60102750120, #      utc_end 1905-07-31 16:22:00 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60102777600, #    local_end 1905-08-01 00:00:00 (Tue)
  27480,
  0,
  'LMT',
      ],
      [
  60102750120, #    utc_start 1905-07-31 16:22:00 (Mon)
  62388118800, #      utc_end 1977-12-31 17:00:00 (Sat)
  60102775320, #  local_start 1905-07-31 23:22:00 (Mon)
  62388144000, #    local_end 1978-01-01 00:00:00 (Sun)
  25200,
  0,
  'ULAT',
      ],
      [
  62388118800, #    utc_start 1977-12-31 17:00:00 (Sat)
  62553657600, #      utc_end 1983-03-31 16:00:00 (Thu)
  62388147600, #  local_start 1978-01-01 01:00:00 (Sun)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  28800,
  0,
  'ULAT',
      ],
      [
  62553657600, #    utc_start 1983-03-31 16:00:00 (Thu)
  62569461600, #      utc_end 1983-09-30 14:00:00 (Fri)
  62553693600, #  local_start 1983-04-01 02:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  36000,
  1,
  'CHOST',
      ],
      [
  62569461600, #    utc_start 1983-09-30 14:00:00 (Fri)
  62585276400, #      utc_end 1984-03-31 15:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  32400,
  0,
  'CHOT',
      ],
      [
  62585276400, #    utc_start 1984-03-31 15:00:00 (Sat)
  62600997600, #      utc_end 1984-09-29 14:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601033600, #    local_end 1984-09-30 00:00:00 (Sun)
  36000,
  1,
  'CHOST',
      ],
      [
  62600997600, #    utc_start 1984-09-29 14:00:00 (Sat)
  62616726000, #      utc_end 1985-03-30 15:00:00 (Sat)
  62601030000, #  local_start 1984-09-29 23:00:00 (Sat)
  62616758400, #    local_end 1985-03-31 00:00:00 (Sun)
  32400,
  0,
  'CHOT',
      ],
      [
  62616726000, #    utc_start 1985-03-30 15:00:00 (Sat)
  62632447200, #      utc_end 1985-09-28 14:00:00 (Sat)
  62616762000, #  local_start 1985-03-31 01:00:00 (Sun)
  62632483200, #    local_end 1985-09-29 00:00:00 (Sun)
  36000,
  1,
  'CHOST',
      ],
      [
  62632447200, #    utc_start 1985-09-28 14:00:00 (Sat)
  62648175600, #      utc_end 1986-03-29 15:00:00 (Sat)
  62632479600, #  local_start 1985-09-28 23:00:00 (Sat)
  62648208000, #    local_end 1986-03-30 00:00:00 (Sun)
  32400,
  0,
  'CHOT',
      ],
      [
  62648175600, #    utc_start 1986-03-29 15:00:00 (Sat)
  62663896800, #      utc_end 1986-09-27 14:00:00 (Sat)
  62648211600, #  local_start 1986-03-30 01:00:00 (Sun)
  62663932800, #    local_end 1986-09-28 00:00:00 (Sun)
  36000,
  1,
  'CHOST',
      ],
      [
  62663896800, #    utc_start 1986-09-27 14:00:00 (Sat)
  62679625200, #      utc_end 1987-03-28 15:00:00 (Sat)
  62663929200, #  local_start 1986-09-27 23:00:00 (Sat)
  62679657600, #    local_end 1987-03-29 00:00:00 (Sun)
  32400,
  0,
  'CHOT',
      ],
      [
  62679625200, #    utc_start 1987-03-28 15:00:00 (Sat)
  62695346400, #      utc_end 1987-09-26 14:00:00 (Sat)
  62679661200, #  local_start 1987-03-29 01:00:00 (Sun)
  62695382400, #    local_end 1987-09-27 00:00:00 (Sun)
  36000,
  1,
  'CHOST',
      ],
      [
  62695346400, #    utc_start 1987-09-26 14:00:00 (Sat)
  62711074800, #      utc_end 1988-03-26 15:00:00 (Sat)
  62695378800, #  local_start 1987-09-26 23:00:00 (Sat)
  62711107200, #    local_end 1988-03-27 00:00:00 (Sun)
  32400,
  0,
  'CHOT',
      ],
      [
  62711074800, #    utc_start 1988-03-26 15:00:00 (Sat)
  62726796000, #      utc_end 1988-09-24 14:00:00 (Sat)
  62711110800, #  local_start 1988-03-27 01:00:00 (Sun)
  62726832000, #    local_end 1988-09-25 00:00:00 (Sun)
  36000,
  1,
  'CHOST',
      ],
      [
  62726796000, #    utc_start 1988-09-24 14:00:00 (Sat)
  62742524400, #      utc_end 1989-03-25 15:00:00 (Sat)
  62726828400, #  local_start 1988-09-24 23:00:00 (Sat)
  62742556800, #    local_end 1989-03-26 00:00:00 (Sun)
  32400,
  0,
  'CHOT',
      ],
      [
  62742524400, #    utc_start 1989-03-25 15:00:00 (Sat)
  62758245600, #      utc_end 1989-09-23 14:00:00 (Sat)
  62742560400, #  local_start 1989-03-26 01:00:00 (Sun)
  62758281600, #    local_end 1989-09-24 00:00:00 (Sun)
  36000,
  1,
  'CHOST',
      ],
      [
  62758245600, #    utc_start 1989-09-23 14:00:00 (Sat)
  62773974000, #      utc_end 1990-03-24 15:00:00 (Sat)
  62758278000, #  local_start 1989-09-23 23:00:00 (Sat)
  62774006400, #    local_end 1990-03-25 00:00:00 (Sun)
  32400,
  0,
  'CHOT',
      ],
      [
  62773974000, #    utc_start 1990-03-24 15:00:00 (Sat)
  62790300000, #      utc_end 1990-09-29 14:00:00 (Sat)
  62774010000, #  local_start 1990-03-25 01:00:00 (Sun)
  62790336000, #    local_end 1990-09-30 00:00:00 (Sun)
  36000,
  1,
  'CHOST',
      ],
      [
  62790300000, #    utc_start 1990-09-29 14:00:00 (Sat)
  62806028400, #      utc_end 1991-03-30 15:00:00 (Sat)
  62790332400, #  local_start 1990-09-29 23:00:00 (Sat)
  62806060800, #    local_end 1991-03-31 00:00:00 (Sun)
  32400,
  0,
  'CHOT',
      ],
      [
  62806028400, #    utc_start 1991-03-30 15:00:00 (Sat)
  62821749600, #      utc_end 1991-09-28 14:00:00 (Sat)
  62806064400, #  local_start 1991-03-31 01:00:00 (Sun)
  62821785600, #    local_end 1991-09-29 00:00:00 (Sun)
  36000,
  1,
  'CHOST',
      ],
      [
  62821749600, #    utc_start 1991-09-28 14:00:00 (Sat)
  62837478000, #      utc_end 1992-03-28 15:00:00 (Sat)
  62821782000, #  local_start 1991-09-28 23:00:00 (Sat)
  62837510400, #    local_end 1992-03-29 00:00:00 (Sun)
  32400,
  0,
  'CHOT',
      ],
      [
  62837478000, #    utc_start 1992-03-28 15:00:00 (Sat)
  62853199200, #      utc_end 1992-09-26 14:00:00 (Sat)
  62837514000, #  local_start 1992-03-29 01:00:00 (Sun)
  62853235200, #    local_end 1992-09-27 00:00:00 (Sun)
  36000,
  1,
  'CHOST',
      ],
      [
  62853199200, #    utc_start 1992-09-26 14:00:00 (Sat)
  62868927600, #      utc_end 1993-03-27 15:00:00 (Sat)
  62853231600, #  local_start 1992-09-26 23:00:00 (Sat)
  62868960000, #    local_end 1993-03-28 00:00:00 (Sun)
  32400,
  0,
  'CHOT',
      ],
      [
  62868927600, #    utc_start 1993-03-27 15:00:00 (Sat)
  62884648800, #      utc_end 1993-09-25 14:00:00 (Sat)
  62868963600, #  local_start 1993-03-28 01:00:00 (Sun)
  62884684800, #    local_end 1993-09-26 00:00:00 (Sun)
  36000,
  1,
  'CHOST',
      ],
      [
  62884648800, #    utc_start 1993-09-25 14:00:00 (Sat)
  62900377200, #      utc_end 1994-03-26 15:00:00 (Sat)
  62884681200, #  local_start 1993-09-25 23:00:00 (Sat)
  62900409600, #    local_end 1994-03-27 00:00:00 (Sun)
  32400,
  0,
  'CHOT',
      ],
      [
  62900377200, #    utc_start 1994-03-26 15:00:00 (Sat)
  62916098400, #      utc_end 1994-09-24 14:00:00 (Sat)
  62900413200, #  local_start 1994-03-27 01:00:00 (Sun)
  62916134400, #    local_end 1994-09-25 00:00:00 (Sun)
  36000,
  1,
  'CHOST',
      ],
      [
  62916098400, #    utc_start 1994-09-24 14:00:00 (Sat)
  62931826800, #      utc_end 1995-03-25 15:00:00 (Sat)
  62916130800, #  local_start 1994-09-24 23:00:00 (Sat)
  62931859200, #    local_end 1995-03-26 00:00:00 (Sun)
  32400,
  0,
  'CHOT',
      ],
      [
  62931826800, #    utc_start 1995-03-25 15:00:00 (Sat)
  62947548000, #      utc_end 1995-09-23 14:00:00 (Sat)
  62931862800, #  local_start 1995-03-26 01:00:00 (Sun)
  62947584000, #    local_end 1995-09-24 00:00:00 (Sun)
  36000,
  1,
  'CHOST',
      ],
      [
  62947548000, #    utc_start 1995-09-23 14:00:00 (Sat)
  62963881200, #      utc_end 1996-03-30 15:00:00 (Sat)
  62947580400, #  local_start 1995-09-23 23:00:00 (Sat)
  62963913600, #    local_end 1996-03-31 00:00:00 (Sun)
  32400,
  0,
  'CHOT',
      ],
      [
  62963881200, #    utc_start 1996-03-30 15:00:00 (Sat)
  62979602400, #      utc_end 1996-09-28 14:00:00 (Sat)
  62963917200, #  local_start 1996-03-31 01:00:00 (Sun)
  62979638400, #    local_end 1996-09-29 00:00:00 (Sun)
  36000,
  1,
  'CHOST',
      ],
      [
  62979602400, #    utc_start 1996-09-28 14:00:00 (Sat)
  62995330800, #      utc_end 1997-03-29 15:00:00 (Sat)
  62979634800, #  local_start 1996-09-28 23:00:00 (Sat)
  62995363200, #    local_end 1997-03-30 00:00:00 (Sun)
  32400,
  0,
  'CHOT',
      ],
      [
  62995330800, #    utc_start 1997-03-29 15:00:00 (Sat)
  63011052000, #      utc_end 1997-09-27 14:00:00 (Sat)
  62995366800, #  local_start 1997-03-30 01:00:00 (Sun)
  63011088000, #    local_end 1997-09-28 00:00:00 (Sun)
  36000,
  1,
  'CHOST',
      ],
      [
  63011052000, #    utc_start 1997-09-27 14:00:00 (Sat)
  63026780400, #      utc_end 1998-03-28 15:00:00 (Sat)
  63011084400, #  local_start 1997-09-27 23:00:00 (Sat)
  63026812800, #    local_end 1998-03-29 00:00:00 (Sun)
  32400,
  0,
  'CHOT',
      ],
      [
  63026780400, #    utc_start 1998-03-28 15:00:00 (Sat)
  63042501600, #      utc_end 1998-09-26 14:00:00 (Sat)
  63026816400, #  local_start 1998-03-29 01:00:00 (Sun)
  63042537600, #    local_end 1998-09-27 00:00:00 (Sun)
  36000,
  1,
  'CHOST',
      ],
      [
  63042501600, #    utc_start 1998-09-26 14:00:00 (Sat)
  63124074000, #      utc_end 2001-04-27 17:00:00 (Fri)
  63042534000, #  local_start 1998-09-26 23:00:00 (Sat)
  63124106400, #    local_end 2001-04-28 02:00:00 (Sat)
  32400,
  0,
  'CHOT',
      ],
      [
  63124074000, #    utc_start 2001-04-27 17:00:00 (Fri)
  63137376000, #      utc_end 2001-09-28 16:00:00 (Fri)
  63124110000, #  local_start 2001-04-28 03:00:00 (Sat)
  63137412000, #    local_end 2001-09-29 02:00:00 (Sat)
  36000,
  1,
  'CHOST',
      ],
      [
  63137376000, #    utc_start 2001-09-28 16:00:00 (Fri)
  63153104400, #      utc_end 2002-03-29 17:00:00 (Fri)
  63137408400, #  local_start 2001-09-29 01:00:00 (Sat)
  63153136800, #    local_end 2002-03-30 02:00:00 (Sat)
  32400,
  0,
  'CHOT',
      ],
      [
  63153104400, #    utc_start 2002-03-29 17:00:00 (Fri)
  63168825600, #      utc_end 2002-09-27 16:00:00 (Fri)
  63153140400, #  local_start 2002-03-30 03:00:00 (Sat)
  63168861600, #    local_end 2002-09-28 02:00:00 (Sat)
  36000,
  1,
  'CHOST',
      ],
      [
  63168825600, #    utc_start 2002-09-27 16:00:00 (Fri)
  63184554000, #      utc_end 2003-03-28 17:00:00 (Fri)
  63168858000, #  local_start 2002-09-28 01:00:00 (Sat)
  63184586400, #    local_end 2003-03-29 02:00:00 (Sat)
  32400,
  0,
  'CHOT',
      ],
      [
  63184554000, #    utc_start 2003-03-28 17:00:00 (Fri)
  63200275200, #      utc_end 2003-09-26 16:00:00 (Fri)
  63184590000, #  local_start 2003-03-29 03:00:00 (Sat)
  63200311200, #    local_end 2003-09-27 02:00:00 (Sat)
  36000,
  1,
  'CHOST',
      ],
      [
  63200275200, #    utc_start 2003-09-26 16:00:00 (Fri)
  63216003600, #      utc_end 2004-03-26 17:00:00 (Fri)
  63200307600, #  local_start 2003-09-27 01:00:00 (Sat)
  63216036000, #    local_end 2004-03-27 02:00:00 (Sat)
  32400,
  0,
  'CHOT',
      ],
      [
  63216003600, #    utc_start 2004-03-26 17:00:00 (Fri)
  63231724800, #      utc_end 2004-09-24 16:00:00 (Fri)
  63216039600, #  local_start 2004-03-27 03:00:00 (Sat)
  63231760800, #    local_end 2004-09-25 02:00:00 (Sat)
  36000,
  1,
  'CHOST',
      ],
      [
  63231724800, #    utc_start 2004-09-24 16:00:00 (Fri)
  63247453200, #      utc_end 2005-03-25 17:00:00 (Fri)
  63231757200, #  local_start 2004-09-25 01:00:00 (Sat)
  63247485600, #    local_end 2005-03-26 02:00:00 (Sat)
  32400,
  0,
  'CHOT',
      ],
      [
  63247453200, #    utc_start 2005-03-25 17:00:00 (Fri)
  63263174400, #      utc_end 2005-09-23 16:00:00 (Fri)
  63247489200, #  local_start 2005-03-26 03:00:00 (Sat)
  63263210400, #    local_end 2005-09-24 02:00:00 (Sat)
  36000,
  1,
  'CHOST',
      ],
      [
  63263174400, #    utc_start 2005-09-23 16:00:00 (Fri)
  63278902800, #      utc_end 2006-03-24 17:00:00 (Fri)
  63263206800, #  local_start 2005-09-24 01:00:00 (Sat)
  63278935200, #    local_end 2006-03-25 02:00:00 (Sat)
  32400,
  0,
  'CHOT',
      ],
      [
  63278902800, #    utc_start 2006-03-24 17:00:00 (Fri)
  63295228800, #      utc_end 2006-09-29 16:00:00 (Fri)
  63278938800, #  local_start 2006-03-25 03:00:00 (Sat)
  63295264800, #    local_end 2006-09-30 02:00:00 (Sat)
  36000,
  1,
  'CHOST',
      ],
      [
  63295228800, #    utc_start 2006-09-29 16:00:00 (Fri)
  63342572400, #      utc_end 2008-03-30 15:00:00 (Sun)
  63295261200, #  local_start 2006-09-30 01:00:00 (Sat)
  63342604800, #    local_end 2008-03-31 00:00:00 (Mon)
  32400,
  0,
  'CHOT',
      ],
      [
  63342572400, #    utc_start 2008-03-30 15:00:00 (Sun)
  63563162400, #      utc_end 2015-03-27 18:00:00 (Fri)
  63342601200, #  local_start 2008-03-30 23:00:00 (Sun)
  63563191200, #    local_end 2015-03-28 02:00:00 (Sat)
  28800,
  0,
  'CHOT',
      ],
      [
  63563162400, #    utc_start 2015-03-27 18:00:00 (Fri)
  63578876400, #      utc_end 2015-09-25 15:00:00 (Fri)
  63563194800, #  local_start 2015-03-28 03:00:00 (Sat)
  63578908800, #    local_end 2015-09-26 00:00:00 (Sat)
  32400,
  1,
  'CHOST',
      ],
      [
  63578876400, #    utc_start 2015-09-25 15:00:00 (Fri)
  63594612000, #      utc_end 2016-03-25 18:00:00 (Fri)
  63578905200, #  local_start 2015-09-25 23:00:00 (Fri)
  63594640800, #    local_end 2016-03-26 02:00:00 (Sat)
  28800,
  0,
  'CHOT',
      ],
      [
  63594612000, #    utc_start 2016-03-25 18:00:00 (Fri)
  63610326000, #      utc_end 2016-09-23 15:00:00 (Fri)
  63594644400, #  local_start 2016-03-26 03:00:00 (Sat)
  63610358400, #    local_end 2016-09-24 00:00:00 (Sat)
  32400,
  1,
  'CHOST',
      ],
      [
  63610326000, #    utc_start 2016-09-23 15:00:00 (Fri)
  63626061600, #      utc_end 2017-03-24 18:00:00 (Fri)
  63610354800, #  local_start 2016-09-23 23:00:00 (Fri)
  63626090400, #    local_end 2017-03-25 02:00:00 (Sat)
  28800,
  0,
  'CHOT',
      ],
      [
  63626061600, #    utc_start 2017-03-24 18:00:00 (Fri)
  63642380400, #      utc_end 2017-09-29 15:00:00 (Fri)
  63626094000, #  local_start 2017-03-25 03:00:00 (Sat)
  63642412800, #    local_end 2017-09-30 00:00:00 (Sat)
  32400,
  1,
  'CHOST',
      ],
      [
  63642380400, #    utc_start 2017-09-29 15:00:00 (Fri)
  63658116000, #      utc_end 2018-03-30 18:00:00 (Fri)
  63642409200, #  local_start 2017-09-29 23:00:00 (Fri)
  63658144800, #    local_end 2018-03-31 02:00:00 (Sat)
  28800,
  0,
  'CHOT',
      ],
      [
  63658116000, #    utc_start 2018-03-30 18:00:00 (Fri)
  63673830000, #      utc_end 2018-09-28 15:00:00 (Fri)
  63658148400, #  local_start 2018-03-31 03:00:00 (Sat)
  63673862400, #    local_end 2018-09-29 00:00:00 (Sat)
  32400,
  1,
  'CHOST',
      ],
      [
  63673830000, #    utc_start 2018-09-28 15:00:00 (Fri)
  63689565600, #      utc_end 2019-03-29 18:00:00 (Fri)
  63673858800, #  local_start 2018-09-28 23:00:00 (Fri)
  63689594400, #    local_end 2019-03-30 02:00:00 (Sat)
  28800,
  0,
  'CHOT',
      ],
      [
  63689565600, #    utc_start 2019-03-29 18:00:00 (Fri)
  63705279600, #      utc_end 2019-09-27 15:00:00 (Fri)
  63689598000, #  local_start 2019-03-30 03:00:00 (Sat)
  63705312000, #    local_end 2019-09-28 00:00:00 (Sat)
  32400,
  1,
  'CHOST',
      ],
      [
  63705279600, #    utc_start 2019-09-27 15:00:00 (Fri)
  63721015200, #      utc_end 2020-03-27 18:00:00 (Fri)
  63705308400, #  local_start 2019-09-27 23:00:00 (Fri)
  63721044000, #    local_end 2020-03-28 02:00:00 (Sat)
  28800,
  0,
  'CHOT',
      ],
      [
  63721015200, #    utc_start 2020-03-27 18:00:00 (Fri)
  63736729200, #      utc_end 2020-09-25 15:00:00 (Fri)
  63721047600, #  local_start 2020-03-28 03:00:00 (Sat)
  63736761600, #    local_end 2020-09-26 00:00:00 (Sat)
  32400,
  1,
  'CHOST',
      ],
      [
  63736729200, #    utc_start 2020-09-25 15:00:00 (Fri)
  63752464800, #      utc_end 2021-03-26 18:00:00 (Fri)
  63736758000, #  local_start 2020-09-25 23:00:00 (Fri)
  63752493600, #    local_end 2021-03-27 02:00:00 (Sat)
  28800,
  0,
  'CHOT',
      ],
      [
  63752464800, #    utc_start 2021-03-26 18:00:00 (Fri)
  63768178800, #      utc_end 2021-09-24 15:00:00 (Fri)
  63752497200, #  local_start 2021-03-27 03:00:00 (Sat)
  63768211200, #    local_end 2021-09-25 00:00:00 (Sat)
  32400,
  1,
  'CHOST',
      ],
      [
  63768178800, #    utc_start 2021-09-24 15:00:00 (Fri)
  63783914400, #      utc_end 2022-03-25 18:00:00 (Fri)
  63768207600, #  local_start 2021-09-24 23:00:00 (Fri)
  63783943200, #    local_end 2022-03-26 02:00:00 (Sat)
  28800,
  0,
  'CHOT',
      ],
      [
  63783914400, #    utc_start 2022-03-25 18:00:00 (Fri)
  63799628400, #      utc_end 2022-09-23 15:00:00 (Fri)
  63783946800, #  local_start 2022-03-26 03:00:00 (Sat)
  63799660800, #    local_end 2022-09-24 00:00:00 (Sat)
  32400,
  1,
  'CHOST',
      ],
      [
  63799628400, #    utc_start 2022-09-23 15:00:00 (Fri)
  63815364000, #      utc_end 2023-03-24 18:00:00 (Fri)
  63799657200, #  local_start 2022-09-23 23:00:00 (Fri)
  63815392800, #    local_end 2023-03-25 02:00:00 (Sat)
  28800,
  0,
  'CHOT',
      ],
      [
  63815364000, #    utc_start 2023-03-24 18:00:00 (Fri)
  63831682800, #      utc_end 2023-09-29 15:00:00 (Fri)
  63815396400, #  local_start 2023-03-25 03:00:00 (Sat)
  63831715200, #    local_end 2023-09-30 00:00:00 (Sat)
  32400,
  1,
  'CHOST',
      ],
      [
  63831682800, #    utc_start 2023-09-29 15:00:00 (Fri)
  63847418400, #      utc_end 2024-03-29 18:00:00 (Fri)
  63831711600, #  local_start 2023-09-29 23:00:00 (Fri)
  63847447200, #    local_end 2024-03-30 02:00:00 (Sat)
  28800,
  0,
  'CHOT',
      ],
      [
  63847418400, #    utc_start 2024-03-29 18:00:00 (Fri)
  63863132400, #      utc_end 2024-09-27 15:00:00 (Fri)
  63847450800, #  local_start 2024-03-30 03:00:00 (Sat)
  63863164800, #    local_end 2024-09-28 00:00:00 (Sat)
  32400,
  1,
  'CHOST',
      ],
      [
  63863132400, #    utc_start 2024-09-27 15:00:00 (Fri)
  63878868000, #      utc_end 2025-03-28 18:00:00 (Fri)
  63863161200, #  local_start 2024-09-27 23:00:00 (Fri)
  63878896800, #    local_end 2025-03-29 02:00:00 (Sat)
  28800,
  0,
  'CHOT',
      ],
      [
  63878868000, #    utc_start 2025-03-28 18:00:00 (Fri)
  63894582000, #      utc_end 2025-09-26 15:00:00 (Fri)
  63878900400, #  local_start 2025-03-29 03:00:00 (Sat)
  63894614400, #    local_end 2025-09-27 00:00:00 (Sat)
  32400,
  1,
  'CHOST',
      ],
      [
  63894582000, #    utc_start 2025-09-26 15:00:00 (Fri)
  63910317600, #      utc_end 2026-03-27 18:00:00 (Fri)
  63894610800, #  local_start 2025-09-26 23:00:00 (Fri)
  63910346400, #    local_end 2026-03-28 02:00:00 (Sat)
  28800,
  0,
  'CHOT',
      ],
      [
  63910317600, #    utc_start 2026-03-27 18:00:00 (Fri)
  63926031600, #      utc_end 2026-09-25 15:00:00 (Fri)
  63910350000, #  local_start 2026-03-28 03:00:00 (Sat)
  63926064000, #    local_end 2026-09-26 00:00:00 (Sat)
  32400,
  1,
  'CHOST',
      ],
      [
  63926031600, #    utc_start 2026-09-25 15:00:00 (Fri)
  63941767200, #      utc_end 2027-03-26 18:00:00 (Fri)
  63926060400, #  local_start 2026-09-25 23:00:00 (Fri)
  63941796000, #    local_end 2027-03-27 02:00:00 (Sat)
  28800,
  0,
  'CHOT',
      ],
      [
  63941767200, #    utc_start 2027-03-26 18:00:00 (Fri)
  63957481200, #      utc_end 2027-09-24 15:00:00 (Fri)
  63941799600, #  local_start 2027-03-27 03:00:00 (Sat)
  63957513600, #    local_end 2027-09-25 00:00:00 (Sat)
  32400,
  1,
  'CHOST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {35}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 28800 }
  
  my $last_observance = bless( {
    'format' => 'CHO%sT',
    'gmtoff' => '8:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 733131,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 733131,
      'utc_rd_secs' => 82800,
      'utc_year' => 2009
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 28800,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 733131,
      'local_rd_secs' => 54000,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 733131,
      'utc_rd_secs' => 54000,
      'utc_year' => 2009
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2015',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'Mongol',
      'offset_from_std' => 3600,
      'on' => 'lastSat',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '0:00',
      'from' => '2015',
      'in' => 'Sep',
      'letter' => '',
      'name' => 'Mongol',
      'offset_from_std' => 0,
      'on' => 'lastSat',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_CHOIBALSAN

    $main::fatpacked{"DateTime/TimeZone/Asia/Colombo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_COLOMBO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Colombo;
  $DateTime::TimeZone::Asia::Colombo::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Colombo::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295523236, #      utc_end 1879-12-31 18:40:36 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  19164,
  0,
  'LMT',
      ],
      [
  59295523236, #    utc_start 1879-12-31 18:40:36 (Wed)
  60115977628, #      utc_end 1905-12-31 18:40:28 (Sun)
  59295542408, #  local_start 1880-01-01 00:00:08 (Thu)
  60115996800, #    local_end 1906-01-01 00:00:00 (Mon)
  19172,
  0,
  'MMT',
      ],
      [
  60115977628, #    utc_start 1905-12-31 18:40:28 (Sun)
  61252396200, #      utc_end 1942-01-04 18:30:00 (Sun)
  60115997428, #  local_start 1906-01-01 00:10:28 (Mon)
  61252416000, #    local_end 1942-01-05 00:00:00 (Mon)
  19800,
  0,
  'IST',
      ],
      [
  61252396200, #    utc_start 1942-01-04 18:30:00 (Sun)
  61273044000, #      utc_end 1942-08-31 18:00:00 (Mon)
  61252417800, #  local_start 1942-01-05 00:30:00 (Mon)
  61273065600, #    local_end 1942-09-01 00:00:00 (Tue)
  21600,
  1,
  'IHST',
      ],
      [
  61273044000, #    utc_start 1942-08-31 18:00:00 (Mon)
  61371631800, #      utc_end 1945-10-15 19:30:00 (Mon)
  61273067400, #  local_start 1942-09-01 00:30:00 (Tue)
  61371655200, #    local_end 1945-10-16 02:00:00 (Tue)
  23400,
  1,
  'IST',
      ],
      [
  61371631800, #    utc_start 1945-10-15 19:30:00 (Mon)
  62968645800, #      utc_end 1996-05-24 18:30:00 (Fri)
  61371651600, #  local_start 1945-10-16 01:00:00 (Tue)
  62968665600, #    local_end 1996-05-25 00:00:00 (Sat)
  19800,
  0,
  'IST',
      ],
      [
  62968645800, #    utc_start 1996-05-24 18:30:00 (Fri)
  62981949600, #      utc_end 1996-10-25 18:00:00 (Fri)
  62968669200, #  local_start 1996-05-25 01:00:00 (Sat)
  62981973000, #    local_end 1996-10-26 00:30:00 (Sat)
  23400,
  0,
  'LKT',
      ],
      [
  62981949600, #    utc_start 1996-10-25 18:00:00 (Fri)
  63280722600, #      utc_end 2006-04-14 18:30:00 (Fri)
  62981971200, #  local_start 1996-10-26 00:00:00 (Sat)
  63280744200, #    local_end 2006-04-15 00:30:00 (Sat)
  21600,
  0,
  'LKT',
      ],
      [
  63280722600, #    utc_start 2006-04-14 18:30:00 (Fri)
  DateTime::TimeZone::INFINITY, #      utc_end
  63280742400, #  local_start 2006-04-15 00:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  19800,
  0,
  'IST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {2}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_COLOMBO

    $main::fatpacked{"DateTime/TimeZone/Asia/Damascus.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_DAMASCUS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Damascus;
  $DateTime::TimeZone::Asia::Damascus::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Damascus::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60557751288, #      utc_end 1919-12-31 21:34:48 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60557760000, #    local_end 1920-01-01 00:00:00 (Thu)
  8712,
  0,
  'LMT',
      ],
      [
  60557751288, #    utc_start 1919-12-31 21:34:48 (Wed)
  60567091200, #      utc_end 1920-04-18 00:00:00 (Sun)
  60557758488, #  local_start 1919-12-31 23:34:48 (Wed)
  60567098400, #    local_end 1920-04-18 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  60567091200, #    utc_start 1920-04-18 00:00:00 (Sun)
  60581602800, #      utc_end 1920-10-02 23:00:00 (Sat)
  60567102000, #  local_start 1920-04-18 03:00:00 (Sun)
  60581613600, #    local_end 1920-10-03 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  60581602800, #    utc_start 1920-10-02 23:00:00 (Sat)
  60598540800, #      utc_end 1921-04-17 00:00:00 (Sun)
  60581610000, #  local_start 1920-10-03 01:00:00 (Sun)
  60598548000, #    local_end 1921-04-17 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  60598540800, #    utc_start 1921-04-17 00:00:00 (Sun)
  60613052400, #      utc_end 1921-10-01 23:00:00 (Sat)
  60598551600, #  local_start 1921-04-17 03:00:00 (Sun)
  60613063200, #    local_end 1921-10-02 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  60613052400, #    utc_start 1921-10-01 23:00:00 (Sat)
  60629990400, #      utc_end 1922-04-16 00:00:00 (Sun)
  60613059600, #  local_start 1921-10-02 01:00:00 (Sun)
  60629997600, #    local_end 1922-04-16 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  60629990400, #    utc_start 1922-04-16 00:00:00 (Sun)
  60644502000, #      utc_end 1922-09-30 23:00:00 (Sat)
  60630001200, #  local_start 1922-04-16 03:00:00 (Sun)
  60644512800, #    local_end 1922-10-01 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  60644502000, #    utc_start 1922-09-30 23:00:00 (Sat)
  60661440000, #      utc_end 1923-04-15 00:00:00 (Sun)
  60644509200, #  local_start 1922-10-01 01:00:00 (Sun)
  60661447200, #    local_end 1923-04-15 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  60661440000, #    utc_start 1923-04-15 00:00:00 (Sun)
  60676556400, #      utc_end 1923-10-06 23:00:00 (Sat)
  60661450800, #  local_start 1923-04-15 03:00:00 (Sun)
  60676567200, #    local_end 1923-10-07 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  60676556400, #    utc_start 1923-10-06 23:00:00 (Sat)
  61893417600, #      utc_end 1962-04-29 00:00:00 (Sun)
  60676563600, #  local_start 1923-10-07 01:00:00 (Sun)
  61893424800, #    local_end 1962-04-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61893417600, #    utc_start 1962-04-29 00:00:00 (Sun)
  61906806000, #      utc_end 1962-09-30 23:00:00 (Sun)
  61893428400, #  local_start 1962-04-29 03:00:00 (Sun)
  61906816800, #    local_end 1962-10-01 02:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  61906806000, #    utc_start 1962-09-30 23:00:00 (Sun)
  61925126400, #      utc_end 1963-05-01 00:00:00 (Wed)
  61906813200, #  local_start 1962-10-01 01:00:00 (Mon)
  61925133600, #    local_end 1963-05-01 02:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  61925126400, #    utc_start 1963-05-01 00:00:00 (Wed)
  61938255600, #      utc_end 1963-09-29 23:00:00 (Sun)
  61925137200, #  local_start 1963-05-01 03:00:00 (Wed)
  61938266400, #    local_end 1963-09-30 02:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  61938255600, #    utc_start 1963-09-29 23:00:00 (Sun)
  61956748800, #      utc_end 1964-05-01 00:00:00 (Fri)
  61938262800, #  local_start 1963-09-30 01:00:00 (Mon)
  61956756000, #    local_end 1964-05-01 02:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  61956748800, #    utc_start 1964-05-01 00:00:00 (Fri)
  61969964400, #      utc_end 1964-09-30 23:00:00 (Wed)
  61956759600, #  local_start 1964-05-01 03:00:00 (Fri)
  61969975200, #    local_end 1964-10-01 02:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  61969964400, #    utc_start 1964-09-30 23:00:00 (Wed)
  61988284800, #      utc_end 1965-05-01 00:00:00 (Sat)
  61969971600, #  local_start 1964-10-01 01:00:00 (Thu)
  61988292000, #    local_end 1965-05-01 02:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  61988284800, #    utc_start 1965-05-01 00:00:00 (Sat)
  62001414000, #      utc_end 1965-09-29 23:00:00 (Wed)
  61988295600, #  local_start 1965-05-01 03:00:00 (Sat)
  62001424800, #    local_end 1965-09-30 02:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  62001414000, #    utc_start 1965-09-29 23:00:00 (Wed)
  62019216000, #      utc_end 1966-04-24 00:00:00 (Sun)
  62001421200, #  local_start 1965-09-30 01:00:00 (Thu)
  62019223200, #    local_end 1966-04-24 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62019216000, #    utc_start 1966-04-24 00:00:00 (Sun)
  62033036400, #      utc_end 1966-09-30 23:00:00 (Fri)
  62019226800, #  local_start 1966-04-24 03:00:00 (Sun)
  62033047200, #    local_end 1966-10-01 02:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62033036400, #    utc_start 1966-09-30 23:00:00 (Fri)
  62051356800, #      utc_end 1967-05-01 00:00:00 (Mon)
  62033043600, #  local_start 1966-10-01 01:00:00 (Sat)
  62051364000, #    local_end 1967-05-01 02:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  62051356800, #    utc_start 1967-05-01 00:00:00 (Mon)
  62064572400, #      utc_end 1967-09-30 23:00:00 (Sat)
  62051367600, #  local_start 1967-05-01 03:00:00 (Mon)
  62064583200, #    local_end 1967-10-01 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62064572400, #    utc_start 1967-09-30 23:00:00 (Sat)
  62082979200, #      utc_end 1968-05-01 00:00:00 (Wed)
  62064579600, #  local_start 1967-10-01 01:00:00 (Sun)
  62082986400, #    local_end 1968-05-01 02:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62082979200, #    utc_start 1968-05-01 00:00:00 (Wed)
  62096194800, #      utc_end 1968-09-30 23:00:00 (Mon)
  62082990000, #  local_start 1968-05-01 03:00:00 (Wed)
  62096205600, #    local_end 1968-10-01 02:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  62096194800, #    utc_start 1968-09-30 23:00:00 (Mon)
  62114515200, #      utc_end 1969-05-01 00:00:00 (Thu)
  62096202000, #  local_start 1968-10-01 01:00:00 (Tue)
  62114522400, #    local_end 1969-05-01 02:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  62114515200, #    utc_start 1969-05-01 00:00:00 (Thu)
  62127730800, #      utc_end 1969-09-30 23:00:00 (Tue)
  62114526000, #  local_start 1969-05-01 03:00:00 (Thu)
  62127741600, #    local_end 1969-10-01 02:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  62127730800, #    utc_start 1969-09-30 23:00:00 (Tue)
  62146051200, #      utc_end 1970-05-01 00:00:00 (Fri)
  62127738000, #  local_start 1969-10-01 01:00:00 (Wed)
  62146058400, #    local_end 1970-05-01 02:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62146051200, #    utc_start 1970-05-01 00:00:00 (Fri)
  62159266800, #      utc_end 1970-09-30 23:00:00 (Wed)
  62146062000, #  local_start 1970-05-01 03:00:00 (Fri)
  62159277600, #    local_end 1970-10-01 02:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  62159266800, #    utc_start 1970-09-30 23:00:00 (Wed)
  62177587200, #      utc_end 1971-05-01 00:00:00 (Sat)
  62159274000, #  local_start 1970-10-01 01:00:00 (Thu)
  62177594400, #    local_end 1971-05-01 02:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62177587200, #    utc_start 1971-05-01 00:00:00 (Sat)
  62190802800, #      utc_end 1971-09-30 23:00:00 (Thu)
  62177598000, #  local_start 1971-05-01 03:00:00 (Sat)
  62190813600, #    local_end 1971-10-01 02:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62190802800, #    utc_start 1971-09-30 23:00:00 (Thu)
  62209209600, #      utc_end 1972-05-01 00:00:00 (Mon)
  62190810000, #  local_start 1971-10-01 01:00:00 (Fri)
  62209216800, #    local_end 1972-05-01 02:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  62209209600, #    utc_start 1972-05-01 00:00:00 (Mon)
  62222425200, #      utc_end 1972-09-30 23:00:00 (Sat)
  62209220400, #  local_start 1972-05-01 03:00:00 (Mon)
  62222436000, #    local_end 1972-10-01 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62222425200, #    utc_start 1972-09-30 23:00:00 (Sat)
  62240745600, #      utc_end 1973-05-01 00:00:00 (Tue)
  62222432400, #  local_start 1972-10-01 01:00:00 (Sun)
  62240752800, #    local_end 1973-05-01 02:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  62240745600, #    utc_start 1973-05-01 00:00:00 (Tue)
  62253961200, #      utc_end 1973-09-30 23:00:00 (Sun)
  62240756400, #  local_start 1973-05-01 03:00:00 (Tue)
  62253972000, #    local_end 1973-10-01 02:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62253961200, #    utc_start 1973-09-30 23:00:00 (Sun)
  62272281600, #      utc_end 1974-05-01 00:00:00 (Wed)
  62253968400, #  local_start 1973-10-01 01:00:00 (Mon)
  62272288800, #    local_end 1974-05-01 02:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62272281600, #    utc_start 1974-05-01 00:00:00 (Wed)
  62285497200, #      utc_end 1974-09-30 23:00:00 (Mon)
  62272292400, #  local_start 1974-05-01 03:00:00 (Wed)
  62285508000, #    local_end 1974-10-01 02:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  62285497200, #    utc_start 1974-09-30 23:00:00 (Mon)
  62303817600, #      utc_end 1975-05-01 00:00:00 (Thu)
  62285504400, #  local_start 1974-10-01 01:00:00 (Tue)
  62303824800, #    local_end 1975-05-01 02:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  62303817600, #    utc_start 1975-05-01 00:00:00 (Thu)
  62317033200, #      utc_end 1975-09-30 23:00:00 (Tue)
  62303828400, #  local_start 1975-05-01 03:00:00 (Thu)
  62317044000, #    local_end 1975-10-01 02:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  62317033200, #    utc_start 1975-09-30 23:00:00 (Tue)
  62335440000, #      utc_end 1976-05-01 00:00:00 (Sat)
  62317040400, #  local_start 1975-10-01 01:00:00 (Wed)
  62335447200, #    local_end 1976-05-01 02:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62335440000, #    utc_start 1976-05-01 00:00:00 (Sat)
  62348655600, #      utc_end 1976-09-30 23:00:00 (Thu)
  62335450800, #  local_start 1976-05-01 03:00:00 (Sat)
  62348666400, #    local_end 1976-10-01 02:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62348655600, #    utc_start 1976-09-30 23:00:00 (Thu)
  62366976000, #      utc_end 1977-05-01 00:00:00 (Sun)
  62348662800, #  local_start 1976-10-01 01:00:00 (Fri)
  62366983200, #    local_end 1977-05-01 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62366976000, #    utc_start 1977-05-01 00:00:00 (Sun)
  62377599600, #      utc_end 1977-08-31 23:00:00 (Wed)
  62366986800, #  local_start 1977-05-01 03:00:00 (Sun)
  62377610400, #    local_end 1977-09-01 02:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  62377599600, #    utc_start 1977-08-31 23:00:00 (Wed)
  62398512000, #      utc_end 1978-05-01 00:00:00 (Mon)
  62377606800, #  local_start 1977-09-01 01:00:00 (Thu)
  62398519200, #    local_end 1978-05-01 02:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  62398512000, #    utc_start 1978-05-01 00:00:00 (Mon)
  62409135600, #      utc_end 1978-08-31 23:00:00 (Thu)
  62398522800, #  local_start 1978-05-01 03:00:00 (Mon)
  62409146400, #    local_end 1978-09-01 02:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62409135600, #    utc_start 1978-08-31 23:00:00 (Thu)
  62554377600, #      utc_end 1983-04-09 00:00:00 (Sat)
  62409142800, #  local_start 1978-09-01 01:00:00 (Fri)
  62554384800, #    local_end 1983-04-09 02:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62554377600, #    utc_start 1983-04-09 00:00:00 (Sat)
  62569494000, #      utc_end 1983-09-30 23:00:00 (Fri)
  62554388400, #  local_start 1983-04-09 03:00:00 (Sat)
  62569504800, #    local_end 1983-10-01 02:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62569494000, #    utc_start 1983-09-30 23:00:00 (Fri)
  62586000000, #      utc_end 1984-04-09 00:00:00 (Mon)
  62569501200, #  local_start 1983-10-01 01:00:00 (Sat)
  62586007200, #    local_end 1984-04-09 02:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  62586000000, #    utc_start 1984-04-09 00:00:00 (Mon)
  62601116400, #      utc_end 1984-09-30 23:00:00 (Sun)
  62586010800, #  local_start 1984-04-09 03:00:00 (Mon)
  62601127200, #    local_end 1984-10-01 02:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62601116400, #    utc_start 1984-09-30 23:00:00 (Sun)
  62644579200, #      utc_end 1986-02-16 00:00:00 (Sun)
  62601123600, #  local_start 1984-10-01 01:00:00 (Mon)
  62644586400, #    local_end 1986-02-16 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62644579200, #    utc_start 1986-02-16 00:00:00 (Sun)
  62664879600, #      utc_end 1986-10-08 23:00:00 (Wed)
  62644590000, #  local_start 1986-02-16 03:00:00 (Sun)
  62664890400, #    local_end 1986-10-09 02:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  62664879600, #    utc_start 1986-10-08 23:00:00 (Wed)
  62677238400, #      utc_end 1987-03-01 00:00:00 (Sun)
  62664886800, #  local_start 1986-10-09 01:00:00 (Thu)
  62677245600, #    local_end 1987-03-01 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62677238400, #    utc_start 1987-03-01 00:00:00 (Sun)
  62698316400, #      utc_end 1987-10-30 23:00:00 (Fri)
  62677249200, #  local_start 1987-03-01 03:00:00 (Sun)
  62698327200, #    local_end 1987-10-31 02:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62698316400, #    utc_start 1987-10-30 23:00:00 (Fri)
  62710070400, #      utc_end 1988-03-15 00:00:00 (Tue)
  62698323600, #  local_start 1987-10-31 01:00:00 (Sat)
  62710077600, #    local_end 1988-03-15 02:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  62710070400, #    utc_start 1988-03-15 00:00:00 (Tue)
  62729938800, #      utc_end 1988-10-30 23:00:00 (Sun)
  62710081200, #  local_start 1988-03-15 03:00:00 (Tue)
  62729949600, #    local_end 1988-10-31 02:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62729938800, #    utc_start 1988-10-30 23:00:00 (Sun)
  62742988800, #      utc_end 1989-03-31 00:00:00 (Fri)
  62729946000, #  local_start 1988-10-31 01:00:00 (Mon)
  62742996000, #    local_end 1989-03-31 02:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62742988800, #    utc_start 1989-03-31 00:00:00 (Fri)
  62758882800, #      utc_end 1989-09-30 23:00:00 (Sat)
  62742999600, #  local_start 1989-03-31 03:00:00 (Fri)
  62758893600, #    local_end 1989-10-01 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62758882800, #    utc_start 1989-09-30 23:00:00 (Sat)
  62774611200, #      utc_end 1990-04-01 00:00:00 (Sun)
  62758890000, #  local_start 1989-10-01 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62774611200, #    utc_start 1990-04-01 00:00:00 (Sun)
  62790332400, #      utc_end 1990-09-29 23:00:00 (Sat)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62790343200, #    local_end 1990-09-30 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62790332400, #    utc_start 1990-09-29 23:00:00 (Sat)
  62806140000, #      utc_end 1991-03-31 22:00:00 (Sun)
  62790339600, #  local_start 1990-09-30 01:00:00 (Sun)
  62806147200, #    local_end 1991-04-01 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  62806140000, #    utc_start 1991-03-31 22:00:00 (Sun)
  62821947600, #      utc_end 1991-09-30 21:00:00 (Mon)
  62806150800, #  local_start 1991-04-01 01:00:00 (Mon)
  62821958400, #    local_end 1991-10-01 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  62821947600, #    utc_start 1991-09-30 21:00:00 (Mon)
  62838367200, #      utc_end 1992-04-07 22:00:00 (Tue)
  62821954800, #  local_start 1991-09-30 23:00:00 (Mon)
  62838374400, #    local_end 1992-04-08 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62838367200, #    utc_start 1992-04-07 22:00:00 (Tue)
  62853570000, #      utc_end 1992-09-30 21:00:00 (Wed)
  62838378000, #  local_start 1992-04-08 01:00:00 (Wed)
  62853580800, #    local_end 1992-10-01 00:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  62853570000, #    utc_start 1992-09-30 21:00:00 (Wed)
  62868780000, #      utc_end 1993-03-25 22:00:00 (Thu)
  62853577200, #  local_start 1992-09-30 23:00:00 (Wed)
  62868787200, #    local_end 1993-03-26 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62868780000, #    utc_start 1993-03-25 22:00:00 (Thu)
  62884587600, #      utc_end 1993-09-24 21:00:00 (Fri)
  62868790800, #  local_start 1993-03-26 01:00:00 (Fri)
  62884598400, #    local_end 1993-09-25 00:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62884587600, #    utc_start 1993-09-24 21:00:00 (Fri)
  62900834400, #      utc_end 1994-03-31 22:00:00 (Thu)
  62884594800, #  local_start 1993-09-24 23:00:00 (Fri)
  62900841600, #    local_end 1994-04-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62900834400, #    utc_start 1994-03-31 22:00:00 (Thu)
  62916642000, #      utc_end 1994-09-30 21:00:00 (Fri)
  62900845200, #  local_start 1994-04-01 01:00:00 (Fri)
  62916652800, #    local_end 1994-10-01 00:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62916642000, #    utc_start 1994-09-30 21:00:00 (Fri)
  62932370400, #      utc_end 1995-03-31 22:00:00 (Fri)
  62916649200, #  local_start 1994-09-30 23:00:00 (Fri)
  62932377600, #    local_end 1995-04-01 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62932370400, #    utc_start 1995-03-31 22:00:00 (Fri)
  62948178000, #      utc_end 1995-09-30 21:00:00 (Sat)
  62932381200, #  local_start 1995-04-01 01:00:00 (Sat)
  62948188800, #    local_end 1995-10-01 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62948178000, #    utc_start 1995-09-30 21:00:00 (Sat)
  62963992800, #      utc_end 1996-03-31 22:00:00 (Sun)
  62948185200, #  local_start 1995-09-30 23:00:00 (Sat)
  62964000000, #    local_end 1996-04-01 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  62963992800, #    utc_start 1996-03-31 22:00:00 (Sun)
  62979800400, #      utc_end 1996-09-30 21:00:00 (Mon)
  62964003600, #  local_start 1996-04-01 01:00:00 (Mon)
  62979811200, #    local_end 1996-10-01 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  62979800400, #    utc_start 1996-09-30 21:00:00 (Mon)
  62995442400, #      utc_end 1997-03-30 22:00:00 (Sun)
  62979807600, #  local_start 1996-09-30 23:00:00 (Mon)
  62995449600, #    local_end 1997-03-31 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  62995442400, #    utc_start 1997-03-30 22:00:00 (Sun)
  63011336400, #      utc_end 1997-09-30 21:00:00 (Tue)
  62995453200, #  local_start 1997-03-31 01:00:00 (Mon)
  63011347200, #    local_end 1997-10-01 00:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  63011336400, #    utc_start 1997-09-30 21:00:00 (Tue)
  63026892000, #      utc_end 1998-03-29 22:00:00 (Sun)
  63011343600, #  local_start 1997-09-30 23:00:00 (Tue)
  63026899200, #    local_end 1998-03-30 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  63026892000, #    utc_start 1998-03-29 22:00:00 (Sun)
  63042872400, #      utc_end 1998-09-30 21:00:00 (Wed)
  63026902800, #  local_start 1998-03-30 01:00:00 (Mon)
  63042883200, #    local_end 1998-10-01 00:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  63042872400, #    utc_start 1998-09-30 21:00:00 (Wed)
  63058600800, #      utc_end 1999-03-31 22:00:00 (Wed)
  63042879600, #  local_start 1998-09-30 23:00:00 (Wed)
  63058608000, #    local_end 1999-04-01 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  63058600800, #    utc_start 1999-03-31 22:00:00 (Wed)
  63074408400, #      utc_end 1999-09-30 21:00:00 (Thu)
  63058611600, #  local_start 1999-04-01 01:00:00 (Thu)
  63074419200, #    local_end 1999-10-01 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63074408400, #    utc_start 1999-09-30 21:00:00 (Thu)
  63090223200, #      utc_end 2000-03-31 22:00:00 (Fri)
  63074415600, #  local_start 1999-09-30 23:00:00 (Thu)
  63090230400, #    local_end 2000-04-01 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63090223200, #    utc_start 2000-03-31 22:00:00 (Fri)
  63106030800, #      utc_end 2000-09-30 21:00:00 (Sat)
  63090234000, #  local_start 2000-04-01 01:00:00 (Sat)
  63106041600, #    local_end 2000-10-01 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63106030800, #    utc_start 2000-09-30 21:00:00 (Sat)
  63121759200, #      utc_end 2001-03-31 22:00:00 (Sat)
  63106038000, #  local_start 2000-09-30 23:00:00 (Sat)
  63121766400, #    local_end 2001-04-01 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121759200, #    utc_start 2001-03-31 22:00:00 (Sat)
  63137566800, #      utc_end 2001-09-30 21:00:00 (Sun)
  63121770000, #  local_start 2001-04-01 01:00:00 (Sun)
  63137577600, #    local_end 2001-10-01 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  63137566800, #    utc_start 2001-09-30 21:00:00 (Sun)
  63153295200, #      utc_end 2002-03-31 22:00:00 (Sun)
  63137574000, #  local_start 2001-09-30 23:00:00 (Sun)
  63153302400, #    local_end 2002-04-01 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  63153295200, #    utc_start 2002-03-31 22:00:00 (Sun)
  63169102800, #      utc_end 2002-09-30 21:00:00 (Mon)
  63153306000, #  local_start 2002-04-01 01:00:00 (Mon)
  63169113600, #    local_end 2002-10-01 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  63169102800, #    utc_start 2002-09-30 21:00:00 (Mon)
  63184831200, #      utc_end 2003-03-31 22:00:00 (Mon)
  63169110000, #  local_start 2002-09-30 23:00:00 (Mon)
  63184838400, #    local_end 2003-04-01 00:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  63184831200, #    utc_start 2003-03-31 22:00:00 (Mon)
  63200638800, #      utc_end 2003-09-30 21:00:00 (Tue)
  63184842000, #  local_start 2003-04-01 01:00:00 (Tue)
  63200649600, #    local_end 2003-10-01 00:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  63200638800, #    utc_start 2003-09-30 21:00:00 (Tue)
  63216453600, #      utc_end 2004-03-31 22:00:00 (Wed)
  63200646000, #  local_start 2003-09-30 23:00:00 (Tue)
  63216460800, #    local_end 2004-04-01 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  63216453600, #    utc_start 2004-03-31 22:00:00 (Wed)
  63232261200, #      utc_end 2004-09-30 21:00:00 (Thu)
  63216464400, #  local_start 2004-04-01 01:00:00 (Thu)
  63232272000, #    local_end 2004-10-01 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63232261200, #    utc_start 2004-09-30 21:00:00 (Thu)
  63247989600, #      utc_end 2005-03-31 22:00:00 (Thu)
  63232268400, #  local_start 2004-09-30 23:00:00 (Thu)
  63247996800, #    local_end 2005-04-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63247989600, #    utc_start 2005-03-31 22:00:00 (Thu)
  63263797200, #      utc_end 2005-09-30 21:00:00 (Fri)
  63248000400, #  local_start 2005-04-01 01:00:00 (Fri)
  63263808000, #    local_end 2005-10-01 00:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  63263797200, #    utc_start 2005-09-30 21:00:00 (Fri)
  63279525600, #      utc_end 2006-03-31 22:00:00 (Fri)
  63263804400, #  local_start 2005-09-30 23:00:00 (Fri)
  63279532800, #    local_end 2006-04-01 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63279525600, #    utc_start 2006-03-31 22:00:00 (Fri)
  63294555600, #      utc_end 2006-09-21 21:00:00 (Thu)
  63279536400, #  local_start 2006-04-01 01:00:00 (Sat)
  63294566400, #    local_end 2006-09-22 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63294555600, #    utc_start 2006-09-21 21:00:00 (Thu)
  63310888800, #      utc_end 2007-03-29 22:00:00 (Thu)
  63294562800, #  local_start 2006-09-21 23:00:00 (Thu)
  63310896000, #    local_end 2007-03-30 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63310888800, #    utc_start 2007-03-29 22:00:00 (Thu)
  63329634000, #      utc_end 2007-11-01 21:00:00 (Thu)
  63310899600, #  local_start 2007-03-30 01:00:00 (Fri)
  63329644800, #    local_end 2007-11-02 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63329634000, #    utc_start 2007-11-01 21:00:00 (Thu)
  63342943200, #      utc_end 2008-04-03 22:00:00 (Thu)
  63329641200, #  local_start 2007-11-01 23:00:00 (Thu)
  63342950400, #    local_end 2008-04-04 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63342943200, #    utc_start 2008-04-03 22:00:00 (Thu)
  63361170000, #      utc_end 2008-10-31 21:00:00 (Fri)
  63342954000, #  local_start 2008-04-04 01:00:00 (Fri)
  63361180800, #    local_end 2008-11-01 00:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  63361170000, #    utc_start 2008-10-31 21:00:00 (Fri)
  63373788000, #      utc_end 2009-03-26 22:00:00 (Thu)
  63361177200, #  local_start 2008-10-31 23:00:00 (Fri)
  63373795200, #    local_end 2009-03-27 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63373788000, #    utc_start 2009-03-26 22:00:00 (Thu)
  63392533200, #      utc_end 2009-10-29 21:00:00 (Thu)
  63373798800, #  local_start 2009-03-27 01:00:00 (Fri)
  63392544000, #    local_end 2009-10-30 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63392533200, #    utc_start 2009-10-29 21:00:00 (Thu)
  63405842400, #      utc_end 2010-04-01 22:00:00 (Thu)
  63392540400, #  local_start 2009-10-29 23:00:00 (Thu)
  63405849600, #    local_end 2010-04-02 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63405842400, #    utc_start 2010-04-01 22:00:00 (Thu)
  63423982800, #      utc_end 2010-10-28 21:00:00 (Thu)
  63405853200, #  local_start 2010-04-02 01:00:00 (Fri)
  63423993600, #    local_end 2010-10-29 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63423982800, #    utc_start 2010-10-28 21:00:00 (Thu)
  63437292000, #      utc_end 2011-03-31 22:00:00 (Thu)
  63423990000, #  local_start 2010-10-28 23:00:00 (Thu)
  63437299200, #    local_end 2011-04-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63437292000, #    utc_start 2011-03-31 22:00:00 (Thu)
  63455432400, #      utc_end 2011-10-27 21:00:00 (Thu)
  63437302800, #  local_start 2011-04-01 01:00:00 (Fri)
  63455443200, #    local_end 2011-10-28 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63455432400, #    utc_start 2011-10-27 21:00:00 (Thu)
  63468741600, #      utc_end 2012-03-29 22:00:00 (Thu)
  63455439600, #  local_start 2011-10-27 23:00:00 (Thu)
  63468748800, #    local_end 2012-03-30 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63468741600, #    utc_start 2012-03-29 22:00:00 (Thu)
  63486882000, #      utc_end 2012-10-25 21:00:00 (Thu)
  63468752400, #  local_start 2012-03-30 01:00:00 (Fri)
  63486892800, #    local_end 2012-10-26 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63486882000, #    utc_start 2012-10-25 21:00:00 (Thu)
  63500191200, #      utc_end 2013-03-28 22:00:00 (Thu)
  63486889200, #  local_start 2012-10-25 23:00:00 (Thu)
  63500198400, #    local_end 2013-03-29 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63500191200, #    utc_start 2013-03-28 22:00:00 (Thu)
  63518331600, #      utc_end 2013-10-24 21:00:00 (Thu)
  63500202000, #  local_start 2013-03-29 01:00:00 (Fri)
  63518342400, #    local_end 2013-10-25 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63518331600, #    utc_start 2013-10-24 21:00:00 (Thu)
  63531640800, #      utc_end 2014-03-27 22:00:00 (Thu)
  63518338800, #  local_start 2013-10-24 23:00:00 (Thu)
  63531648000, #    local_end 2014-03-28 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63531640800, #    utc_start 2014-03-27 22:00:00 (Thu)
  63550386000, #      utc_end 2014-10-30 21:00:00 (Thu)
  63531651600, #  local_start 2014-03-28 01:00:00 (Fri)
  63550396800, #    local_end 2014-10-31 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63550386000, #    utc_start 2014-10-30 21:00:00 (Thu)
  63563090400, #      utc_end 2015-03-26 22:00:00 (Thu)
  63550393200, #  local_start 2014-10-30 23:00:00 (Thu)
  63563097600, #    local_end 2015-03-27 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63563090400, #    utc_start 2015-03-26 22:00:00 (Thu)
  63581835600, #      utc_end 2015-10-29 21:00:00 (Thu)
  63563101200, #  local_start 2015-03-27 01:00:00 (Fri)
  63581846400, #    local_end 2015-10-30 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63581835600, #    utc_start 2015-10-29 21:00:00 (Thu)
  63594540000, #      utc_end 2016-03-24 22:00:00 (Thu)
  63581842800, #  local_start 2015-10-29 23:00:00 (Thu)
  63594547200, #    local_end 2016-03-25 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63594540000, #    utc_start 2016-03-24 22:00:00 (Thu)
  63613285200, #      utc_end 2016-10-27 21:00:00 (Thu)
  63594550800, #  local_start 2016-03-25 01:00:00 (Fri)
  63613296000, #    local_end 2016-10-28 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63613285200, #    utc_start 2016-10-27 21:00:00 (Thu)
  63626594400, #      utc_end 2017-03-30 22:00:00 (Thu)
  63613292400, #  local_start 2016-10-27 23:00:00 (Thu)
  63626601600, #    local_end 2017-03-31 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63626594400, #    utc_start 2017-03-30 22:00:00 (Thu)
  63644734800, #      utc_end 2017-10-26 21:00:00 (Thu)
  63626605200, #  local_start 2017-03-31 01:00:00 (Fri)
  63644745600, #    local_end 2017-10-27 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63644734800, #    utc_start 2017-10-26 21:00:00 (Thu)
  63658044000, #      utc_end 2018-03-29 22:00:00 (Thu)
  63644742000, #  local_start 2017-10-26 23:00:00 (Thu)
  63658051200, #    local_end 2018-03-30 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63658044000, #    utc_start 2018-03-29 22:00:00 (Thu)
  63676184400, #      utc_end 2018-10-25 21:00:00 (Thu)
  63658054800, #  local_start 2018-03-30 01:00:00 (Fri)
  63676195200, #    local_end 2018-10-26 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63676184400, #    utc_start 2018-10-25 21:00:00 (Thu)
  63689493600, #      utc_end 2019-03-28 22:00:00 (Thu)
  63676191600, #  local_start 2018-10-25 23:00:00 (Thu)
  63689500800, #    local_end 2019-03-29 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63689493600, #    utc_start 2019-03-28 22:00:00 (Thu)
  63707634000, #      utc_end 2019-10-24 21:00:00 (Thu)
  63689504400, #  local_start 2019-03-29 01:00:00 (Fri)
  63707644800, #    local_end 2019-10-25 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63707634000, #    utc_start 2019-10-24 21:00:00 (Thu)
  63720943200, #      utc_end 2020-03-26 22:00:00 (Thu)
  63707641200, #  local_start 2019-10-24 23:00:00 (Thu)
  63720950400, #    local_end 2020-03-27 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63720943200, #    utc_start 2020-03-26 22:00:00 (Thu)
  63739688400, #      utc_end 2020-10-29 21:00:00 (Thu)
  63720954000, #  local_start 2020-03-27 01:00:00 (Fri)
  63739699200, #    local_end 2020-10-30 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63739688400, #    utc_start 2020-10-29 21:00:00 (Thu)
  63752392800, #      utc_end 2021-03-25 22:00:00 (Thu)
  63739695600, #  local_start 2020-10-29 23:00:00 (Thu)
  63752400000, #    local_end 2021-03-26 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63752392800, #    utc_start 2021-03-25 22:00:00 (Thu)
  63771138000, #      utc_end 2021-10-28 21:00:00 (Thu)
  63752403600, #  local_start 2021-03-26 01:00:00 (Fri)
  63771148800, #    local_end 2021-10-29 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63771138000, #    utc_start 2021-10-28 21:00:00 (Thu)
  63783842400, #      utc_end 2022-03-24 22:00:00 (Thu)
  63771145200, #  local_start 2021-10-28 23:00:00 (Thu)
  63783849600, #    local_end 2022-03-25 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63783842400, #    utc_start 2022-03-24 22:00:00 (Thu)
  63802587600, #      utc_end 2022-10-27 21:00:00 (Thu)
  63783853200, #  local_start 2022-03-25 01:00:00 (Fri)
  63802598400, #    local_end 2022-10-28 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63802587600, #    utc_start 2022-10-27 21:00:00 (Thu)
  63815896800, #      utc_end 2023-03-30 22:00:00 (Thu)
  63802594800, #  local_start 2022-10-27 23:00:00 (Thu)
  63815904000, #    local_end 2023-03-31 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63815896800, #    utc_start 2023-03-30 22:00:00 (Thu)
  63834037200, #      utc_end 2023-10-26 21:00:00 (Thu)
  63815907600, #  local_start 2023-03-31 01:00:00 (Fri)
  63834048000, #    local_end 2023-10-27 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63834037200, #    utc_start 2023-10-26 21:00:00 (Thu)
  63847346400, #      utc_end 2024-03-28 22:00:00 (Thu)
  63834044400, #  local_start 2023-10-26 23:00:00 (Thu)
  63847353600, #    local_end 2024-03-29 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63847346400, #    utc_start 2024-03-28 22:00:00 (Thu)
  63865486800, #      utc_end 2024-10-24 21:00:00 (Thu)
  63847357200, #  local_start 2024-03-29 01:00:00 (Fri)
  63865497600, #    local_end 2024-10-25 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63865486800, #    utc_start 2024-10-24 21:00:00 (Thu)
  63878796000, #      utc_end 2025-03-27 22:00:00 (Thu)
  63865494000, #  local_start 2024-10-24 23:00:00 (Thu)
  63878803200, #    local_end 2025-03-28 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63878796000, #    utc_start 2025-03-27 22:00:00 (Thu)
  63897541200, #      utc_end 2025-10-30 21:00:00 (Thu)
  63878806800, #  local_start 2025-03-28 01:00:00 (Fri)
  63897552000, #    local_end 2025-10-31 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63897541200, #    utc_start 2025-10-30 21:00:00 (Thu)
  63910245600, #      utc_end 2026-03-26 22:00:00 (Thu)
  63897548400, #  local_start 2025-10-30 23:00:00 (Thu)
  63910252800, #    local_end 2026-03-27 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63910245600, #    utc_start 2026-03-26 22:00:00 (Thu)
  63928990800, #      utc_end 2026-10-29 21:00:00 (Thu)
  63910256400, #  local_start 2026-03-27 01:00:00 (Fri)
  63929001600, #    local_end 2026-10-30 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63928990800, #    utc_start 2026-10-29 21:00:00 (Thu)
  63941695200, #      utc_end 2027-03-25 22:00:00 (Thu)
  63928998000, #  local_start 2026-10-29 23:00:00 (Thu)
  63941702400, #    local_end 2027-03-26 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63941695200, #    utc_start 2027-03-25 22:00:00 (Thu)
  63960440400, #      utc_end 2027-10-28 21:00:00 (Thu)
  63941706000, #  local_start 2027-03-26 01:00:00 (Fri)
  63960451200, #    local_end 2027-10-29 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {65}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 700899,
      'local_rd_secs' => 84888,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 700899,
      'utc_rd_secs' => 84888,
      'utc_year' => 1920
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 700899,
      'local_rd_secs' => 77688,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 700899,
      'utc_rd_secs' => 77688,
      'utc_year' => 1920
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '0:00',
      'from' => '2012',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'Syria',
      'offset_from_std' => 3600,
      'on' => 'lastFri',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '0:00',
      'from' => '2009',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'Syria',
      'offset_from_std' => 0,
      'on' => 'lastFri',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_DAMASCUS

    $main::fatpacked{"DateTime/TimeZone/Asia/Dhaka.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_DHAKA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Dhaka;
  $DateTime::TimeZone::Asia::Dhaka::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Dhaka::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611139900, #      utc_end 1889-12-31 17:58:20 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  21700,
  0,
  'LMT',
      ],
      [
  59611139900, #    utc_start 1889-12-31 17:58:20 (Tue)
  61244100400, #      utc_end 1941-09-30 18:06:40 (Tue)
  59611161100, #  local_start 1889-12-31 23:51:40 (Tue)
  61244121600, #    local_end 1941-10-01 00:00:00 (Wed)
  21200,
  0,
  'HMT',
      ],
      [
  61244100400, #    utc_start 1941-09-30 18:06:40 (Tue)
  61263624600, #      utc_end 1942-05-14 17:30:00 (Thu)
  61244123800, #  local_start 1941-10-01 00:36:40 (Wed)
  61263648000, #    local_end 1942-05-15 00:00:00 (Fri)
  23400,
  0,
  'BURT',
      ],
      [
  61263624600, #    utc_start 1942-05-14 17:30:00 (Thu)
  61273045800, #      utc_end 1942-08-31 18:30:00 (Mon)
  61263644400, #  local_start 1942-05-14 23:00:00 (Thu)
  61273065600, #    local_end 1942-09-01 00:00:00 (Tue)
  19800,
  0,
  'IST',
      ],
      [
  61273045800, #    utc_start 1942-08-31 18:30:00 (Mon)
  61559544600, #      utc_end 1951-09-29 17:30:00 (Sat)
  61273069200, #  local_start 1942-09-01 01:00:00 (Tue)
  61559568000, #    local_end 1951-09-30 00:00:00 (Sun)
  23400,
  0,
  'BURT',
      ],
      [
  61559544600, #    utc_start 1951-09-29 17:30:00 (Sat)
  62174455200, #      utc_end 1971-03-25 18:00:00 (Thu)
  61559566200, #  local_start 1951-09-29 23:30:00 (Sat)
  62174476800, #    local_end 1971-03-26 00:00:00 (Fri)
  21600,
  0,
  'DACT',
      ],
      [
  62174455200, #    utc_start 1971-03-25 18:00:00 (Thu)
  63366429600, #      utc_end 2008-12-31 18:00:00 (Wed)
  62174476800, #  local_start 1971-03-26 00:00:00 (Fri)
  63366451200, #    local_end 2009-01-01 00:00:00 (Thu)
  21600,
  0,
  'BDT',
      ],
      [
  63366429600, #    utc_start 2008-12-31 18:00:00 (Wed)
  63381114000, #      utc_end 2009-06-19 17:00:00 (Fri)
  63366451200, #  local_start 2009-01-01 00:00:00 (Thu)
  63381135600, #    local_end 2009-06-19 23:00:00 (Fri)
  21600,
  0,
  'BDT',
      ],
      [
  63381114000, #    utc_start 2009-06-19 17:00:00 (Fri)
  63397962000, #      utc_end 2009-12-31 17:00:00 (Thu)
  63381139200, #  local_start 2009-06-20 00:00:00 (Sat)
  63397987200, #    local_end 2010-01-01 00:00:00 (Fri)
  25200,
  1,
  'BDST',
      ],
      [
  63397962000, #    utc_start 2009-12-31 17:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  63397983600, #  local_start 2009-12-31 23:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  21600,
  0,
  'BDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {1}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_DHAKA

    $main::fatpacked{"DateTime/TimeZone/Asia/Dili.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_DILI';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Dili;
  $DateTime::TimeZone::Asia::Dili::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Dili::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60305269060, #      utc_end 1911-12-31 15:37:40 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60305299200, #    local_end 1912-01-01 00:00:00 (Mon)
  30140,
  0,
  'LMT',
      ],
      [
  60305269060, #    utc_start 1911-12-31 15:37:40 (Sun)
  61256530800, #      utc_end 1942-02-21 15:00:00 (Sat)
  60305297860, #  local_start 1911-12-31 23:37:40 (Sun)
  61256559600, #    local_end 1942-02-21 23:00:00 (Sat)
  28800,
  0,
  'TLT',
      ],
      [
  61256530800, #    utc_start 1942-02-21 15:00:00 (Sat)
  61369628400, #      utc_end 1945-09-22 15:00:00 (Sat)
  61256563200, #  local_start 1942-02-22 00:00:00 (Sun)
  61369660800, #    local_end 1945-09-23 00:00:00 (Sun)
  32400,
  0,
  'JST',
      ],
      [
  61369628400, #    utc_start 1945-09-22 15:00:00 (Sat)
  62335580400, #      utc_end 1976-05-02 15:00:00 (Sun)
  61369660800, #  local_start 1945-09-23 00:00:00 (Sun)
  62335612800, #    local_end 1976-05-03 00:00:00 (Mon)
  32400,
  0,
  'TLT',
      ],
      [
  62335580400, #    utc_start 1976-05-02 15:00:00 (Sun)
  63104803200, #      utc_end 2000-09-16 16:00:00 (Sat)
  62335609200, #  local_start 1976-05-02 23:00:00 (Sun)
  63104832000, #    local_end 2000-09-17 00:00:00 (Sun)
  28800,
  0,
  'WITA',
      ],
      [
  63104803200, #    utc_start 2000-09-16 16:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63104835600, #  local_start 2000-09-17 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  32400,
  0,
  'TLT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_DILI

    $main::fatpacked{"DateTime/TimeZone/Asia/Dubai.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_DUBAI';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Dubai;
  $DateTime::TimeZone::Asia::Dubai::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Dubai::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60557746728, #      utc_end 1919-12-31 20:18:48 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60557760000, #    local_end 1920-01-01 00:00:00 (Thu)
  13272,
  0,
  'LMT',
      ],
      [
  60557746728, #    utc_start 1919-12-31 20:18:48 (Wed)
  DateTime::TimeZone::INFINITY, #      utc_end
  60557761128, #  local_start 1920-01-01 00:18:48 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  14400,
  0,
  'GST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_DUBAI

    $main::fatpacked{"DateTime/TimeZone/Asia/Dushanbe.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_DUSHANBE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Dushanbe;
  $DateTime::TimeZone::Asia::Dushanbe::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Dushanbe::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694514688, #      utc_end 1924-05-01 19:24:48 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  16512,
  0,
  'LMT',
      ],
      [
  60694514688, #    utc_start 1924-05-01 19:24:48 (Thu)
  60888135600, #      utc_end 1930-06-20 19:00:00 (Fri)
  60694532688, #  local_start 1924-05-02 00:24:48 (Fri)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  18000,
  0,
  'DUST',
      ],
      [
  60888135600, #    utc_start 1930-06-20 19:00:00 (Fri)
  62490592800, #      utc_end 1981-03-31 18:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  21600,
  0,
  'DUST',
      ],
      [
  62490592800, #    utc_start 1981-03-31 18:00:00 (Tue)
  62506400400, #      utc_end 1981-09-30 17:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  25200,
  1,
  'DUSST',
      ],
      [
  62506400400, #    utc_start 1981-09-30 17:00:00 (Wed)
  62522128800, #      utc_end 1982-03-31 18:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  21600,
  0,
  'DUST',
      ],
      [
  62522128800, #    utc_start 1982-03-31 18:00:00 (Wed)
  62537936400, #      utc_end 1982-09-30 17:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  25200,
  1,
  'DUSST',
      ],
      [
  62537936400, #    utc_start 1982-09-30 17:00:00 (Thu)
  62553664800, #      utc_end 1983-03-31 18:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  21600,
  0,
  'DUST',
      ],
      [
  62553664800, #    utc_start 1983-03-31 18:00:00 (Thu)
  62569472400, #      utc_end 1983-09-30 17:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  25200,
  1,
  'DUSST',
      ],
      [
  62569472400, #    utc_start 1983-09-30 17:00:00 (Fri)
  62585287200, #      utc_end 1984-03-31 18:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  21600,
  0,
  'DUST',
      ],
      [
  62585287200, #    utc_start 1984-03-31 18:00:00 (Sat)
  62601019200, #      utc_end 1984-09-29 20:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  25200,
  1,
  'DUSST',
      ],
      [
  62601019200, #    utc_start 1984-09-29 20:00:00 (Sat)
  62616744000, #      utc_end 1985-03-30 20:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  21600,
  0,
  'DUST',
      ],
      [
  62616744000, #    utc_start 1985-03-30 20:00:00 (Sat)
  62632468800, #      utc_end 1985-09-28 20:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  25200,
  1,
  'DUSST',
      ],
      [
  62632468800, #    utc_start 1985-09-28 20:00:00 (Sat)
  62648193600, #      utc_end 1986-03-29 20:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  21600,
  0,
  'DUST',
      ],
      [
  62648193600, #    utc_start 1986-03-29 20:00:00 (Sat)
  62663918400, #      utc_end 1986-09-27 20:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  25200,
  1,
  'DUSST',
      ],
      [
  62663918400, #    utc_start 1986-09-27 20:00:00 (Sat)
  62679643200, #      utc_end 1987-03-28 20:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  21600,
  0,
  'DUST',
      ],
      [
  62679643200, #    utc_start 1987-03-28 20:00:00 (Sat)
  62695368000, #      utc_end 1987-09-26 20:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  25200,
  1,
  'DUSST',
      ],
      [
  62695368000, #    utc_start 1987-09-26 20:00:00 (Sat)
  62711092800, #      utc_end 1988-03-26 20:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  21600,
  0,
  'DUST',
      ],
      [
  62711092800, #    utc_start 1988-03-26 20:00:00 (Sat)
  62726817600, #      utc_end 1988-09-24 20:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  25200,
  1,
  'DUSST',
      ],
      [
  62726817600, #    utc_start 1988-09-24 20:00:00 (Sat)
  62742542400, #      utc_end 1989-03-25 20:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  21600,
  0,
  'DUST',
      ],
      [
  62742542400, #    utc_start 1989-03-25 20:00:00 (Sat)
  62758267200, #      utc_end 1989-09-23 20:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  25200,
  1,
  'DUSST',
      ],
      [
  62758267200, #    utc_start 1989-09-23 20:00:00 (Sat)
  62773992000, #      utc_end 1990-03-24 20:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  21600,
  0,
  'DUST',
      ],
      [
  62773992000, #    utc_start 1990-03-24 20:00:00 (Sat)
  62790321600, #      utc_end 1990-09-29 20:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  25200,
  1,
  'DUSST',
      ],
      [
  62790321600, #    utc_start 1990-09-29 20:00:00 (Sat)
  62806046400, #      utc_end 1991-03-30 20:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  21600,
  0,
  'DUST',
      ],
      [
  62806046400, #    utc_start 1991-03-30 20:00:00 (Sat)
  62820046800, #      utc_end 1991-09-08 21:00:00 (Sun)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62820068400, #    local_end 1991-09-09 03:00:00 (Mon)
  21600,
  1,
  'DUSST',
      ],
      [
  62820046800, #    utc_start 1991-09-08 21:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  62820064800, #  local_start 1991-09-09 02:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  18000,
  0,
  'TJT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {11}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_DUSHANBE

    $main::fatpacked{"DateTime/TimeZone/Asia/Gaza.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_GAZA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Gaza;
  $DateTime::TimeZone::Asia::Gaza::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Gaza::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59950273328, #      utc_end 1900-09-30 21:42:08 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59950281600, #    local_end 1900-10-01 00:00:00 (Mon)
  8272,
  0,
  'LMT',
      ],
      [
  59950273328, #    utc_start 1900-09-30 21:42:08 (Sun)
  61202037600, #      utc_end 1940-05-31 22:00:00 (Fri)
  59950280528, #  local_start 1900-09-30 23:42:08 (Sun)
  61202044800, #    local_end 1940-06-01 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  61202037600, #    utc_start 1940-05-31 22:00:00 (Fri)
  61278325200, #      utc_end 1942-10-31 21:00:00 (Sat)
  61202048400, #  local_start 1940-06-01 01:00:00 (Sat)
  61278336000, #    local_end 1942-11-01 00:00:00 (Sun)
  10800,
  1,
  'EET',
      ],
      [
  61278325200, #    utc_start 1942-10-31 21:00:00 (Sat)
  61291382400, #      utc_end 1943-04-01 00:00:00 (Thu)
  61278332400, #  local_start 1942-10-31 23:00:00 (Sat)
  61291389600, #    local_end 1943-04-01 02:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  61291382400, #    utc_start 1943-04-01 00:00:00 (Thu)
  61309861200, #      utc_end 1943-10-31 21:00:00 (Sun)
  61291393200, #  local_start 1943-04-01 03:00:00 (Thu)
  61309872000, #    local_end 1943-11-01 00:00:00 (Mon)
  10800,
  1,
  'EET',
      ],
      [
  61309861200, #    utc_start 1943-10-31 21:00:00 (Sun)
  61322997600, #      utc_end 1944-03-31 22:00:00 (Fri)
  61309868400, #  local_start 1943-10-31 23:00:00 (Sun)
  61323004800, #    local_end 1944-04-01 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  61322997600, #    utc_start 1944-03-31 22:00:00 (Fri)
  61341483600, #      utc_end 1944-10-31 21:00:00 (Tue)
  61323008400, #  local_start 1944-04-01 01:00:00 (Sat)
  61341494400, #    local_end 1944-11-01 00:00:00 (Wed)
  10800,
  1,
  'EET',
      ],
      [
  61341483600, #    utc_start 1944-10-31 21:00:00 (Tue)
  61355829600, #      utc_end 1945-04-15 22:00:00 (Sun)
  61341490800, #  local_start 1944-10-31 23:00:00 (Tue)
  61355836800, #    local_end 1945-04-16 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  61355829600, #    utc_start 1945-04-15 22:00:00 (Sun)
  61373026800, #      utc_end 1945-10-31 23:00:00 (Wed)
  61355840400, #  local_start 1945-04-16 01:00:00 (Mon)
  61373037600, #    local_end 1945-11-01 02:00:00 (Thu)
  10800,
  1,
  'EET',
      ],
      [
  61373026800, #    utc_start 1945-10-31 23:00:00 (Wed)
  61387372800, #      utc_end 1946-04-16 00:00:00 (Tue)
  61373034000, #  local_start 1945-11-01 01:00:00 (Thu)
  61387380000, #    local_end 1946-04-16 02:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  61387372800, #    utc_start 1946-04-16 00:00:00 (Tue)
  61404555600, #      utc_end 1946-10-31 21:00:00 (Thu)
  61387383600, #  local_start 1946-04-16 03:00:00 (Tue)
  61404566400, #    local_end 1946-11-01 00:00:00 (Fri)
  10800,
  1,
  'EET',
      ],
      [
  61404555600, #    utc_start 1946-10-31 21:00:00 (Thu)
  61453029600, #      utc_end 1948-05-14 22:00:00 (Fri)
  61404562800, #  local_start 1946-10-31 23:00:00 (Thu)
  61453036800, #    local_end 1948-05-15 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  61453029600, #    utc_start 1948-05-14 22:00:00 (Fri)
  61736594400, #      utc_end 1957-05-09 22:00:00 (Thu)
  61453036800, #  local_start 1948-05-15 00:00:00 (Sat)
  61736601600, #    local_end 1957-05-10 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  61736594400, #    utc_start 1957-05-09 22:00:00 (Thu)
  61749032400, #      utc_end 1957-09-30 21:00:00 (Mon)
  61736605200, #  local_start 1957-05-10 01:00:00 (Fri)
  61749043200, #    local_end 1957-10-01 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  61749032400, #    utc_start 1957-09-30 21:00:00 (Mon)
  61767352800, #      utc_end 1958-04-30 22:00:00 (Wed)
  61749039600, #  local_start 1957-09-30 23:00:00 (Mon)
  61767360000, #    local_end 1958-05-01 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  61767352800, #    utc_start 1958-04-30 22:00:00 (Wed)
  61780568400, #      utc_end 1958-09-30 21:00:00 (Tue)
  61767363600, #  local_start 1958-05-01 01:00:00 (Thu)
  61780579200, #    local_end 1958-10-01 00:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  61780568400, #    utc_start 1958-09-30 21:00:00 (Tue)
  61798892400, #      utc_end 1959-04-30 23:00:00 (Thu)
  61780575600, #  local_start 1958-09-30 23:00:00 (Tue)
  61798899600, #    local_end 1959-05-01 01:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  61798892400, #    utc_start 1959-04-30 23:00:00 (Thu)
  61812028800, #      utc_end 1959-09-30 00:00:00 (Wed)
  61798903200, #  local_start 1959-05-01 02:00:00 (Fri)
  61812039600, #    local_end 1959-09-30 03:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  61812028800, #    utc_start 1959-09-30 00:00:00 (Wed)
  61830514800, #      utc_end 1960-04-30 23:00:00 (Sat)
  61812036000, #  local_start 1959-09-30 02:00:00 (Wed)
  61830522000, #    local_end 1960-05-01 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61830514800, #    utc_start 1960-04-30 23:00:00 (Sat)
  61843651200, #      utc_end 1960-09-30 00:00:00 (Fri)
  61830525600, #  local_start 1960-05-01 02:00:00 (Sun)
  61843662000, #    local_end 1960-09-30 03:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  61843651200, #    utc_start 1960-09-30 00:00:00 (Fri)
  61862050800, #      utc_end 1961-04-30 23:00:00 (Sun)
  61843658400, #  local_start 1960-09-30 02:00:00 (Fri)
  61862058000, #    local_end 1961-05-01 01:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  61862050800, #    utc_start 1961-04-30 23:00:00 (Sun)
  61875187200, #      utc_end 1961-09-30 00:00:00 (Sat)
  61862061600, #  local_start 1961-05-01 02:00:00 (Mon)
  61875198000, #    local_end 1961-09-30 03:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  61875187200, #    utc_start 1961-09-30 00:00:00 (Sat)
  61893586800, #      utc_end 1962-04-30 23:00:00 (Mon)
  61875194400, #  local_start 1961-09-30 02:00:00 (Sat)
  61893594000, #    local_end 1962-05-01 01:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  61893586800, #    utc_start 1962-04-30 23:00:00 (Mon)
  61906723200, #      utc_end 1962-09-30 00:00:00 (Sun)
  61893597600, #  local_start 1962-05-01 02:00:00 (Tue)
  61906734000, #    local_end 1962-09-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61906723200, #    utc_start 1962-09-30 00:00:00 (Sun)
  61925122800, #      utc_end 1963-04-30 23:00:00 (Tue)
  61906730400, #  local_start 1962-09-30 02:00:00 (Sun)
  61925130000, #    local_end 1963-05-01 01:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  61925122800, #    utc_start 1963-04-30 23:00:00 (Tue)
  61938259200, #      utc_end 1963-09-30 00:00:00 (Mon)
  61925133600, #  local_start 1963-05-01 02:00:00 (Wed)
  61938270000, #    local_end 1963-09-30 03:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  61938259200, #    utc_start 1963-09-30 00:00:00 (Mon)
  61956745200, #      utc_end 1964-04-30 23:00:00 (Thu)
  61938266400, #  local_start 1963-09-30 02:00:00 (Mon)
  61956752400, #    local_end 1964-05-01 01:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  61956745200, #    utc_start 1964-04-30 23:00:00 (Thu)
  61969881600, #      utc_end 1964-09-30 00:00:00 (Wed)
  61956756000, #  local_start 1964-05-01 02:00:00 (Fri)
  61969892400, #    local_end 1964-09-30 03:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  61969881600, #    utc_start 1964-09-30 00:00:00 (Wed)
  61988281200, #      utc_end 1965-04-30 23:00:00 (Fri)
  61969888800, #  local_start 1964-09-30 02:00:00 (Wed)
  61988288400, #    local_end 1965-05-01 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  61988281200, #    utc_start 1965-04-30 23:00:00 (Fri)
  62001417600, #      utc_end 1965-09-30 00:00:00 (Thu)
  61988292000, #  local_start 1965-05-01 02:00:00 (Sat)
  62001428400, #    local_end 1965-09-30 03:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  62001417600, #    utc_start 1965-09-30 00:00:00 (Thu)
  62019817200, #      utc_end 1966-04-30 23:00:00 (Sat)
  62001424800, #  local_start 1965-09-30 02:00:00 (Thu)
  62019824400, #    local_end 1966-05-01 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62019817200, #    utc_start 1966-04-30 23:00:00 (Sat)
  62033040000, #      utc_end 1966-10-01 00:00:00 (Sat)
  62019828000, #  local_start 1966-05-01 02:00:00 (Sun)
  62033050800, #    local_end 1966-10-01 03:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62033040000, #    utc_start 1966-10-01 00:00:00 (Sat)
  62051353200, #      utc_end 1967-04-30 23:00:00 (Sun)
  62033047200, #  local_start 1966-10-01 02:00:00 (Sat)
  62051360400, #    local_end 1967-05-01 01:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  62051353200, #    utc_start 1967-04-30 23:00:00 (Sun)
  62054370000, #      utc_end 1967-06-04 21:00:00 (Sun)
  62051364000, #  local_start 1967-05-01 02:00:00 (Mon)
  62054380800, #    local_end 1967-06-05 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62054370000, #    utc_start 1967-06-04 21:00:00 (Sun)
  62278063200, #      utc_end 1974-07-06 22:00:00 (Sat)
  62054377200, #  local_start 1967-06-04 23:00:00 (Sun)
  62278070400, #    local_end 1974-07-07 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62278063200, #    utc_start 1974-07-06 22:00:00 (Sat)
  62286526800, #      utc_end 1974-10-12 21:00:00 (Sat)
  62278074000, #  local_start 1974-07-07 01:00:00 (Sun)
  62286537600, #    local_end 1974-10-13 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62286526800, #    utc_start 1974-10-12 21:00:00 (Sat)
  62302860000, #      utc_end 1975-04-19 22:00:00 (Sat)
  62286534000, #  local_start 1974-10-12 23:00:00 (Sat)
  62302867200, #    local_end 1975-04-20 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62302860000, #    utc_start 1975-04-19 22:00:00 (Sat)
  62314347600, #      utc_end 1975-08-30 21:00:00 (Sat)
  62302870800, #  local_start 1975-04-20 01:00:00 (Sun)
  62314358400, #    local_end 1975-08-31 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62314347600, #    utc_start 1975-08-30 21:00:00 (Sat)
  62617960800, #      utc_end 1985-04-13 22:00:00 (Sat)
  62314354800, #  local_start 1975-08-30 23:00:00 (Sat)
  62617968000, #    local_end 1985-04-14 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62617960800, #    utc_start 1985-04-13 22:00:00 (Sat)
  62631262800, #      utc_end 1985-09-14 21:00:00 (Sat)
  62617971600, #  local_start 1985-04-14 01:00:00 (Sun)
  62631273600, #    local_end 1985-09-15 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62631262800, #    utc_start 1985-09-14 21:00:00 (Sat)
  62652434400, #      utc_end 1986-05-17 22:00:00 (Sat)
  62631270000, #  local_start 1985-09-14 23:00:00 (Sat)
  62652441600, #    local_end 1986-05-18 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62652434400, #    utc_start 1986-05-17 22:00:00 (Sat)
  62662107600, #      utc_end 1986-09-06 21:00:00 (Sat)
  62652445200, #  local_start 1986-05-18 01:00:00 (Sun)
  62662118400, #    local_end 1986-09-07 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62662107600, #    utc_start 1986-09-06 21:00:00 (Sat)
  62681119200, #      utc_end 1987-04-14 22:00:00 (Tue)
  62662114800, #  local_start 1986-09-06 23:00:00 (Sat)
  62681126400, #    local_end 1987-04-15 00:00:00 (Wed)
  7200,
  0,
  'IST',
      ],
      [
  62681119200, #    utc_start 1987-04-14 22:00:00 (Tue)
  62694162000, #      utc_end 1987-09-12 21:00:00 (Sat)
  62681130000, #  local_start 1987-04-15 01:00:00 (Wed)
  62694172800, #    local_end 1987-09-13 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62694162000, #    utc_start 1987-09-12 21:00:00 (Sat)
  62712309600, #      utc_end 1988-04-09 22:00:00 (Sat)
  62694169200, #  local_start 1987-09-12 23:00:00 (Sat)
  62712316800, #    local_end 1988-04-10 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62712309600, #    utc_start 1988-04-09 22:00:00 (Sat)
  62725006800, #      utc_end 1988-09-03 21:00:00 (Sat)
  62712320400, #  local_start 1988-04-10 01:00:00 (Sun)
  62725017600, #    local_end 1988-09-04 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62725006800, #    utc_start 1988-09-03 21:00:00 (Sat)
  62745573600, #      utc_end 1989-04-29 22:00:00 (Sat)
  62725014000, #  local_start 1988-09-03 23:00:00 (Sat)
  62745580800, #    local_end 1989-04-30 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62745573600, #    utc_start 1989-04-29 22:00:00 (Sat)
  62756456400, #      utc_end 1989-09-02 21:00:00 (Sat)
  62745584400, #  local_start 1989-04-30 01:00:00 (Sun)
  62756467200, #    local_end 1989-09-03 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62756456400, #    utc_start 1989-09-02 21:00:00 (Sat)
  62773999200, #      utc_end 1990-03-24 22:00:00 (Sat)
  62756463600, #  local_start 1989-09-02 23:00:00 (Sat)
  62774006400, #    local_end 1990-03-25 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62773999200, #    utc_start 1990-03-24 22:00:00 (Sat)
  62787301200, #      utc_end 1990-08-25 21:00:00 (Sat)
  62774010000, #  local_start 1990-03-25 01:00:00 (Sun)
  62787312000, #    local_end 1990-08-26 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62787301200, #    utc_start 1990-08-25 21:00:00 (Sat)
  62805448800, #      utc_end 1991-03-23 22:00:00 (Sat)
  62787308400, #  local_start 1990-08-25 23:00:00 (Sat)
  62805456000, #    local_end 1991-03-24 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62805448800, #    utc_start 1991-03-23 22:00:00 (Sat)
  62819355600, #      utc_end 1991-08-31 21:00:00 (Sat)
  62805459600, #  local_start 1991-03-24 01:00:00 (Sun)
  62819366400, #    local_end 1991-09-01 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62819355600, #    utc_start 1991-08-31 21:00:00 (Sat)
  62837503200, #      utc_end 1992-03-28 22:00:00 (Sat)
  62819362800, #  local_start 1991-08-31 23:00:00 (Sat)
  62837510400, #    local_end 1992-03-29 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62837503200, #    utc_start 1992-03-28 22:00:00 (Sat)
  62851410000, #      utc_end 1992-09-05 21:00:00 (Sat)
  62837514000, #  local_start 1992-03-29 01:00:00 (Sun)
  62851420800, #    local_end 1992-09-06 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62851410000, #    utc_start 1992-09-05 21:00:00 (Sat)
  62869384800, #      utc_end 1993-04-01 22:00:00 (Thu)
  62851417200, #  local_start 1992-09-05 23:00:00 (Sat)
  62869392000, #    local_end 1993-04-02 00:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  62869384800, #    utc_start 1993-04-01 22:00:00 (Thu)
  62882859600, #      utc_end 1993-09-04 21:00:00 (Sat)
  62869395600, #  local_start 1993-04-02 01:00:00 (Fri)
  62882870400, #    local_end 1993-09-05 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62882859600, #    utc_start 1993-09-04 21:00:00 (Sat)
  62900834400, #      utc_end 1994-03-31 22:00:00 (Thu)
  62882866800, #  local_start 1993-09-04 23:00:00 (Sat)
  62900841600, #    local_end 1994-04-01 00:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  62900834400, #    utc_start 1994-03-31 22:00:00 (Thu)
  62913704400, #      utc_end 1994-08-27 21:00:00 (Sat)
  62900845200, #  local_start 1994-04-01 01:00:00 (Fri)
  62913715200, #    local_end 1994-08-28 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62913704400, #    utc_start 1994-08-27 21:00:00 (Sat)
  62932284000, #      utc_end 1995-03-30 22:00:00 (Thu)
  62913711600, #  local_start 1994-08-27 23:00:00 (Sat)
  62932291200, #    local_end 1995-03-31 00:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  62932284000, #    utc_start 1995-03-30 22:00:00 (Thu)
  62945758800, #      utc_end 1995-09-02 21:00:00 (Sat)
  62932294800, #  local_start 1995-03-31 01:00:00 (Fri)
  62945769600, #    local_end 1995-09-03 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62945758800, #    utc_start 1995-09-02 21:00:00 (Sat)
  62956130400, #      utc_end 1995-12-31 22:00:00 (Sun)
  62945766000, #  local_start 1995-09-02 23:00:00 (Sat)
  62956137600, #    local_end 1996-01-01 00:00:00 (Mon)
  7200,
  0,
  'IST',
      ],
      [
  62956130400, #    utc_start 1995-12-31 22:00:00 (Sun)
  62964338400, #      utc_end 1996-04-04 22:00:00 (Thu)
  62956137600, #  local_start 1996-01-01 00:00:00 (Mon)
  62964345600, #    local_end 1996-04-05 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62964338400, #    utc_start 1996-04-04 22:00:00 (Thu)
  62978853600, #      utc_end 1996-09-19 22:00:00 (Thu)
  62964349200, #  local_start 1996-04-05 01:00:00 (Fri)
  62978864400, #    local_end 1996-09-20 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62978853600, #    utc_start 1996-09-19 22:00:00 (Thu)
  62995788000, #      utc_end 1997-04-03 22:00:00 (Thu)
  62978860800, #  local_start 1996-09-20 00:00:00 (Fri)
  62995795200, #    local_end 1997-04-04 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62995788000, #    utc_start 1997-04-03 22:00:00 (Thu)
  63010303200, #      utc_end 1997-09-18 22:00:00 (Thu)
  62995798800, #  local_start 1997-04-04 01:00:00 (Fri)
  63010314000, #    local_end 1997-09-19 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63010303200, #    utc_start 1997-09-18 22:00:00 (Thu)
  63027237600, #      utc_end 1998-04-02 22:00:00 (Thu)
  63010310400, #  local_start 1997-09-19 00:00:00 (Fri)
  63027244800, #    local_end 1998-04-03 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63027237600, #    utc_start 1998-04-02 22:00:00 (Thu)
  63041752800, #      utc_end 1998-09-17 22:00:00 (Thu)
  63027248400, #  local_start 1998-04-03 01:00:00 (Fri)
  63041763600, #    local_end 1998-09-18 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63041752800, #    utc_start 1998-09-17 22:00:00 (Thu)
  63050824800, #      utc_end 1998-12-31 22:00:00 (Thu)
  63041760000, #  local_start 1998-09-18 00:00:00 (Fri)
  63050832000, #    local_end 1999-01-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63050824800, #    utc_start 1998-12-31 22:00:00 (Thu)
  63059896800, #      utc_end 1999-04-15 22:00:00 (Thu)
  63050832000, #  local_start 1999-01-01 00:00:00 (Fri)
  63059904000, #    local_end 1999-04-16 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63059896800, #    utc_start 1999-04-15 22:00:00 (Thu)
  63075618000, #      utc_end 1999-10-14 21:00:00 (Thu)
  63059907600, #  local_start 1999-04-16 01:00:00 (Fri)
  63075628800, #    local_end 1999-10-15 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63075618000, #    utc_start 1999-10-14 21:00:00 (Thu)
  63091951200, #      utc_end 2000-04-20 22:00:00 (Thu)
  63075625200, #  local_start 1999-10-14 23:00:00 (Thu)
  63091958400, #    local_end 2000-04-21 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63091951200, #    utc_start 2000-04-20 22:00:00 (Thu)
  63107672400, #      utc_end 2000-10-19 21:00:00 (Thu)
  63091962000, #  local_start 2000-04-21 01:00:00 (Fri)
  63107683200, #    local_end 2000-10-20 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63107672400, #    utc_start 2000-10-19 21:00:00 (Thu)
  63123400800, #      utc_end 2001-04-19 22:00:00 (Thu)
  63107679600, #  local_start 2000-10-19 23:00:00 (Thu)
  63123408000, #    local_end 2001-04-20 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63123400800, #    utc_start 2001-04-19 22:00:00 (Thu)
  63139122000, #      utc_end 2001-10-18 21:00:00 (Thu)
  63123411600, #  local_start 2001-04-20 01:00:00 (Fri)
  63139132800, #    local_end 2001-10-19 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63139122000, #    utc_start 2001-10-18 21:00:00 (Thu)
  63154850400, #      utc_end 2002-04-18 22:00:00 (Thu)
  63139129200, #  local_start 2001-10-18 23:00:00 (Thu)
  63154857600, #    local_end 2002-04-19 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63154850400, #    utc_start 2002-04-18 22:00:00 (Thu)
  63170571600, #      utc_end 2002-10-17 21:00:00 (Thu)
  63154861200, #  local_start 2002-04-19 01:00:00 (Fri)
  63170582400, #    local_end 2002-10-18 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63170571600, #    utc_start 2002-10-17 21:00:00 (Thu)
  63186300000, #      utc_end 2003-04-17 22:00:00 (Thu)
  63170578800, #  local_start 2002-10-17 23:00:00 (Thu)
  63186307200, #    local_end 2003-04-18 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63186300000, #    utc_start 2003-04-17 22:00:00 (Thu)
  63202021200, #      utc_end 2003-10-16 21:00:00 (Thu)
  63186310800, #  local_start 2003-04-18 01:00:00 (Fri)
  63202032000, #    local_end 2003-10-17 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63202021200, #    utc_start 2003-10-16 21:00:00 (Thu)
  63217749600, #      utc_end 2004-04-15 22:00:00 (Thu)
  63202028400, #  local_start 2003-10-16 23:00:00 (Thu)
  63217756800, #    local_end 2004-04-16 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63217749600, #    utc_start 2004-04-15 22:00:00 (Thu)
  63232264800, #      utc_end 2004-09-30 22:00:00 (Thu)
  63217760400, #  local_start 2004-04-16 01:00:00 (Fri)
  63232275600, #    local_end 2004-10-01 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63232264800, #    utc_start 2004-09-30 22:00:00 (Thu)
  63249199200, #      utc_end 2005-04-14 22:00:00 (Thu)
  63232272000, #  local_start 2004-10-01 00:00:00 (Fri)
  63249206400, #    local_end 2005-04-15 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63249199200, #    utc_start 2005-04-14 22:00:00 (Thu)
  63264063600, #      utc_end 2005-10-03 23:00:00 (Mon)
  63249210000, #  local_start 2005-04-15 01:00:00 (Fri)
  63264074400, #    local_end 2005-10-04 02:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  63264063600, #    utc_start 2005-10-03 23:00:00 (Mon)
  63279525600, #      utc_end 2006-03-31 22:00:00 (Fri)
  63264070800, #  local_start 2005-10-04 01:00:00 (Tue)
  63279532800, #    local_end 2006-04-01 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63279525600, #    utc_start 2006-03-31 22:00:00 (Fri)
  63294555600, #      utc_end 2006-09-21 21:00:00 (Thu)
  63279536400, #  local_start 2006-04-01 01:00:00 (Sat)
  63294566400, #    local_end 2006-09-22 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63294555600, #    utc_start 2006-09-21 21:00:00 (Thu)
  63311061600, #      utc_end 2007-03-31 22:00:00 (Sat)
  63294562800, #  local_start 2006-09-21 23:00:00 (Thu)
  63311068800, #    local_end 2007-04-01 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63311061600, #    utc_start 2007-03-31 22:00:00 (Sat)
  63325321200, #      utc_end 2007-09-12 23:00:00 (Wed)
  63311072400, #  local_start 2007-04-01 01:00:00 (Sun)
  63325332000, #    local_end 2007-09-13 02:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  63325321200, #    utc_start 2007-09-12 23:00:00 (Wed)
  63342338400, #      utc_end 2008-03-27 22:00:00 (Thu)
  63325328400, #  local_start 2007-09-13 01:00:00 (Thu)
  63342345600, #    local_end 2008-03-28 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63342338400, #    utc_start 2008-03-27 22:00:00 (Thu)
  63355640400, #      utc_end 2008-08-28 21:00:00 (Thu)
  63342349200, #  local_start 2008-03-28 01:00:00 (Fri)
  63355651200, #    local_end 2008-08-29 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63355640400, #    utc_start 2008-08-28 21:00:00 (Thu)
  63355903200, #      utc_end 2008-08-31 22:00:00 (Sun)
  63355647600, #  local_start 2008-08-28 23:00:00 (Thu)
  63355910400, #    local_end 2008-09-01 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  63355903200, #    utc_start 2008-08-31 22:00:00 (Sun)
  63373788000, #      utc_end 2009-03-26 22:00:00 (Thu)
  63355910400, #  local_start 2008-09-01 00:00:00 (Mon)
  63373795200, #    local_end 2009-03-27 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63373788000, #    utc_start 2009-03-26 22:00:00 (Thu)
  63387698400, #      utc_end 2009-09-03 22:00:00 (Thu)
  63373798800, #  local_start 2009-03-27 01:00:00 (Fri)
  63387709200, #    local_end 2009-09-04 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63387698400, #    utc_start 2009-09-03 22:00:00 (Thu)
  63397980000, #      utc_end 2009-12-31 22:00:00 (Thu)
  63387705600, #  local_start 2009-09-04 00:00:00 (Fri)
  63397987200, #    local_end 2010-01-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63397980000, #    utc_start 2009-12-31 22:00:00 (Thu)
  63405324060, #      utc_end 2010-03-26 22:01:00 (Fri)
  63397987200, #  local_start 2010-01-01 00:00:00 (Fri)
  63405331260, #    local_end 2010-03-27 00:01:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63405324060, #    utc_start 2010-03-26 22:01:00 (Fri)
  63417157200, #      utc_end 2010-08-10 21:00:00 (Tue)
  63405334860, #  local_start 2010-03-27 01:01:00 (Sat)
  63417168000, #    local_end 2010-08-11 00:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  63417157200, #    utc_start 2010-08-10 21:00:00 (Tue)
  63437292060, #      utc_end 2011-03-31 22:01:00 (Thu)
  63417164400, #  local_start 2010-08-10 23:00:00 (Tue)
  63437299260, #    local_end 2011-04-01 00:01:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63437292060, #    utc_start 2011-03-31 22:01:00 (Thu)
  63447829200, #      utc_end 2011-07-31 21:00:00 (Sun)
  63437302860, #  local_start 2011-04-01 01:01:00 (Fri)
  63447840000, #    local_end 2011-08-01 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  63447829200, #    utc_start 2011-07-31 21:00:00 (Sun)
  63461052000, #      utc_end 2011-12-31 22:00:00 (Sat)
  63447836400, #  local_start 2011-07-31 23:00:00 (Sun)
  63461059200, #    local_end 2012-01-01 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63461052000, #    utc_start 2011-12-31 22:00:00 (Sat)
  63468741600, #      utc_end 2012-03-29 22:00:00 (Thu)
  63461059200, #  local_start 2012-01-01 00:00:00 (Sun)
  63468748800, #    local_end 2012-03-30 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63468741600, #    utc_start 2012-03-29 22:00:00 (Thu)
  63483861600, #      utc_end 2012-09-20 22:00:00 (Thu)
  63468752400, #  local_start 2012-03-30 01:00:00 (Fri)
  63483872400, #    local_end 2012-09-21 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63483861600, #    utc_start 2012-09-20 22:00:00 (Thu)
  63500191200, #      utc_end 2013-03-28 22:00:00 (Thu)
  63483868800, #  local_start 2012-09-21 00:00:00 (Fri)
  63500198400, #    local_end 2013-03-29 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63500191200, #    utc_start 2013-03-28 22:00:00 (Thu)
  63515912400, #      utc_end 2013-09-26 21:00:00 (Thu)
  63500202000, #  local_start 2013-03-29 01:00:00 (Fri)
  63515923200, #    local_end 2013-09-27 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63515912400, #    utc_start 2013-09-26 21:00:00 (Thu)
  63531640800, #      utc_end 2014-03-27 22:00:00 (Thu)
  63515919600, #  local_start 2013-09-26 23:00:00 (Thu)
  63531648000, #    local_end 2014-03-28 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63531640800, #    utc_start 2014-03-27 22:00:00 (Thu)
  63549781200, #      utc_end 2014-10-23 21:00:00 (Thu)
  63531651600, #  local_start 2014-03-28 01:00:00 (Fri)
  63549792000, #    local_end 2014-10-24 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63549781200, #    utc_start 2014-10-23 21:00:00 (Thu)
  63563176800, #      utc_end 2015-03-27 22:00:00 (Fri)
  63549788400, #  local_start 2014-10-23 23:00:00 (Thu)
  63563184000, #    local_end 2015-03-28 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63563176800, #    utc_start 2015-03-27 22:00:00 (Fri)
  63581230800, #      utc_end 2015-10-22 21:00:00 (Thu)
  63563187600, #  local_start 2015-03-28 01:00:00 (Sat)
  63581241600, #    local_end 2015-10-23 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63581230800, #    utc_start 2015-10-22 21:00:00 (Thu)
  63594630000, #      utc_end 2016-03-25 23:00:00 (Fri)
  63581238000, #  local_start 2015-10-22 23:00:00 (Thu)
  63594637200, #    local_end 2016-03-26 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63594630000, #    utc_start 2016-03-25 23:00:00 (Fri)
  63612680400, #      utc_end 2016-10-20 21:00:00 (Thu)
  63594640800, #  local_start 2016-03-26 02:00:00 (Sat)
  63612691200, #    local_end 2016-10-21 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63612680400, #    utc_start 2016-10-20 21:00:00 (Thu)
  63626079600, #      utc_end 2017-03-24 23:00:00 (Fri)
  63612687600, #  local_start 2016-10-20 23:00:00 (Thu)
  63626086800, #    local_end 2017-03-25 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63626079600, #    utc_start 2017-03-24 23:00:00 (Fri)
  63644734800, #      utc_end 2017-10-26 21:00:00 (Thu)
  63626090400, #  local_start 2017-03-25 02:00:00 (Sat)
  63644745600, #    local_end 2017-10-27 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63644734800, #    utc_start 2017-10-26 21:00:00 (Thu)
  63658134000, #      utc_end 2018-03-30 23:00:00 (Fri)
  63644742000, #  local_start 2017-10-26 23:00:00 (Thu)
  63658141200, #    local_end 2018-03-31 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63658134000, #    utc_start 2018-03-30 23:00:00 (Fri)
  63676184400, #      utc_end 2018-10-25 21:00:00 (Thu)
  63658144800, #  local_start 2018-03-31 02:00:00 (Sat)
  63676195200, #    local_end 2018-10-26 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63676184400, #    utc_start 2018-10-25 21:00:00 (Thu)
  63689583600, #      utc_end 2019-03-29 23:00:00 (Fri)
  63676191600, #  local_start 2018-10-25 23:00:00 (Thu)
  63689590800, #    local_end 2019-03-30 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63689583600, #    utc_start 2019-03-29 23:00:00 (Fri)
  63707634000, #      utc_end 2019-10-24 21:00:00 (Thu)
  63689594400, #  local_start 2019-03-30 02:00:00 (Sat)
  63707644800, #    local_end 2019-10-25 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63707634000, #    utc_start 2019-10-24 21:00:00 (Thu)
  63721033200, #      utc_end 2020-03-27 23:00:00 (Fri)
  63707641200, #  local_start 2019-10-24 23:00:00 (Thu)
  63721040400, #    local_end 2020-03-28 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63721033200, #    utc_start 2020-03-27 23:00:00 (Fri)
  63739083600, #      utc_end 2020-10-22 21:00:00 (Thu)
  63721044000, #  local_start 2020-03-28 02:00:00 (Sat)
  63739094400, #    local_end 2020-10-23 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63739083600, #    utc_start 2020-10-22 21:00:00 (Thu)
  63752482800, #      utc_end 2021-03-26 23:00:00 (Fri)
  63739090800, #  local_start 2020-10-22 23:00:00 (Thu)
  63752490000, #    local_end 2021-03-27 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63752482800, #    utc_start 2021-03-26 23:00:00 (Fri)
  63770533200, #      utc_end 2021-10-21 21:00:00 (Thu)
  63752493600, #  local_start 2021-03-27 02:00:00 (Sat)
  63770544000, #    local_end 2021-10-22 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63770533200, #    utc_start 2021-10-21 21:00:00 (Thu)
  63783932400, #      utc_end 2022-03-25 23:00:00 (Fri)
  63770540400, #  local_start 2021-10-21 23:00:00 (Thu)
  63783939600, #    local_end 2022-03-26 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63783932400, #    utc_start 2022-03-25 23:00:00 (Fri)
  63801982800, #      utc_end 2022-10-20 21:00:00 (Thu)
  63783943200, #  local_start 2022-03-26 02:00:00 (Sat)
  63801993600, #    local_end 2022-10-21 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63801982800, #    utc_start 2022-10-20 21:00:00 (Thu)
  63815382000, #      utc_end 2023-03-24 23:00:00 (Fri)
  63801990000, #  local_start 2022-10-20 23:00:00 (Thu)
  63815389200, #    local_end 2023-03-25 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63815382000, #    utc_start 2023-03-24 23:00:00 (Fri)
  63834037200, #      utc_end 2023-10-26 21:00:00 (Thu)
  63815392800, #  local_start 2023-03-25 02:00:00 (Sat)
  63834048000, #    local_end 2023-10-27 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63834037200, #    utc_start 2023-10-26 21:00:00 (Thu)
  63847436400, #      utc_end 2024-03-29 23:00:00 (Fri)
  63834044400, #  local_start 2023-10-26 23:00:00 (Thu)
  63847443600, #    local_end 2024-03-30 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63847436400, #    utc_start 2024-03-29 23:00:00 (Fri)
  63865486800, #      utc_end 2024-10-24 21:00:00 (Thu)
  63847447200, #  local_start 2024-03-30 02:00:00 (Sat)
  63865497600, #    local_end 2024-10-25 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63865486800, #    utc_start 2024-10-24 21:00:00 (Thu)
  63878886000, #      utc_end 2025-03-28 23:00:00 (Fri)
  63865494000, #  local_start 2024-10-24 23:00:00 (Thu)
  63878893200, #    local_end 2025-03-29 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63878886000, #    utc_start 2025-03-28 23:00:00 (Fri)
  63896936400, #      utc_end 2025-10-23 21:00:00 (Thu)
  63878896800, #  local_start 2025-03-29 02:00:00 (Sat)
  63896947200, #    local_end 2025-10-24 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63896936400, #    utc_start 2025-10-23 21:00:00 (Thu)
  63910335600, #      utc_end 2026-03-27 23:00:00 (Fri)
  63896943600, #  local_start 2025-10-23 23:00:00 (Thu)
  63910342800, #    local_end 2026-03-28 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63910335600, #    utc_start 2026-03-27 23:00:00 (Fri)
  63928386000, #      utc_end 2026-10-22 21:00:00 (Thu)
  63910346400, #  local_start 2026-03-28 02:00:00 (Sat)
  63928396800, #    local_end 2026-10-23 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63928386000, #    utc_start 2026-10-22 21:00:00 (Thu)
  63941785200, #      utc_end 2027-03-26 23:00:00 (Fri)
  63928393200, #  local_start 2026-10-22 23:00:00 (Thu)
  63941792400, #    local_end 2027-03-27 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63941785200, #    utc_start 2027-03-26 23:00:00 (Fri)
  63959835600, #      utc_end 2027-10-21 21:00:00 (Thu)
  63941796000, #  local_start 2027-03-27 02:00:00 (Sat)
  63959846400, #    local_end 2027-10-22 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {61}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 734503,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 734503,
      'utc_rd_secs' => 0,
      'utc_year' => 2013
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 734502,
      'local_rd_secs' => 79200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 734502,
      'utc_rd_secs' => 79200,
      'utc_year' => 2012
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '0:00',
      'from' => '2014',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'Palestine',
      'offset_from_std' => 0,
      'on' => 'Fri>=21',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00',
      'from' => '2016',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'Palestine',
      'offset_from_std' => 3600,
      'on' => 'lastSat',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_GAZA

    $main::fatpacked{"DateTime/TimeZone/Asia/Hebron.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_HEBRON';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Hebron;
  $DateTime::TimeZone::Asia::Hebron::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Hebron::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59950273177, #      utc_end 1900-09-30 21:39:37 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59950281600, #    local_end 1900-10-01 00:00:00 (Mon)
  8423,
  0,
  'LMT',
      ],
      [
  59950273177, #    utc_start 1900-09-30 21:39:37 (Sun)
  61202037600, #      utc_end 1940-05-31 22:00:00 (Fri)
  59950280377, #  local_start 1900-09-30 23:39:37 (Sun)
  61202044800, #    local_end 1940-06-01 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  61202037600, #    utc_start 1940-05-31 22:00:00 (Fri)
  61278325200, #      utc_end 1942-10-31 21:00:00 (Sat)
  61202048400, #  local_start 1940-06-01 01:00:00 (Sat)
  61278336000, #    local_end 1942-11-01 00:00:00 (Sun)
  10800,
  1,
  'EET',
      ],
      [
  61278325200, #    utc_start 1942-10-31 21:00:00 (Sat)
  61291382400, #      utc_end 1943-04-01 00:00:00 (Thu)
  61278332400, #  local_start 1942-10-31 23:00:00 (Sat)
  61291389600, #    local_end 1943-04-01 02:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  61291382400, #    utc_start 1943-04-01 00:00:00 (Thu)
  61309861200, #      utc_end 1943-10-31 21:00:00 (Sun)
  61291393200, #  local_start 1943-04-01 03:00:00 (Thu)
  61309872000, #    local_end 1943-11-01 00:00:00 (Mon)
  10800,
  1,
  'EET',
      ],
      [
  61309861200, #    utc_start 1943-10-31 21:00:00 (Sun)
  61322997600, #      utc_end 1944-03-31 22:00:00 (Fri)
  61309868400, #  local_start 1943-10-31 23:00:00 (Sun)
  61323004800, #    local_end 1944-04-01 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  61322997600, #    utc_start 1944-03-31 22:00:00 (Fri)
  61341483600, #      utc_end 1944-10-31 21:00:00 (Tue)
  61323008400, #  local_start 1944-04-01 01:00:00 (Sat)
  61341494400, #    local_end 1944-11-01 00:00:00 (Wed)
  10800,
  1,
  'EET',
      ],
      [
  61341483600, #    utc_start 1944-10-31 21:00:00 (Tue)
  61355829600, #      utc_end 1945-04-15 22:00:00 (Sun)
  61341490800, #  local_start 1944-10-31 23:00:00 (Tue)
  61355836800, #    local_end 1945-04-16 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  61355829600, #    utc_start 1945-04-15 22:00:00 (Sun)
  61373026800, #      utc_end 1945-10-31 23:00:00 (Wed)
  61355840400, #  local_start 1945-04-16 01:00:00 (Mon)
  61373037600, #    local_end 1945-11-01 02:00:00 (Thu)
  10800,
  1,
  'EET',
      ],
      [
  61373026800, #    utc_start 1945-10-31 23:00:00 (Wed)
  61387372800, #      utc_end 1946-04-16 00:00:00 (Tue)
  61373034000, #  local_start 1945-11-01 01:00:00 (Thu)
  61387380000, #    local_end 1946-04-16 02:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  61387372800, #    utc_start 1946-04-16 00:00:00 (Tue)
  61404555600, #      utc_end 1946-10-31 21:00:00 (Thu)
  61387383600, #  local_start 1946-04-16 03:00:00 (Tue)
  61404566400, #    local_end 1946-11-01 00:00:00 (Fri)
  10800,
  1,
  'EET',
      ],
      [
  61404555600, #    utc_start 1946-10-31 21:00:00 (Thu)
  61453029600, #      utc_end 1948-05-14 22:00:00 (Fri)
  61404562800, #  local_start 1946-10-31 23:00:00 (Thu)
  61453036800, #    local_end 1948-05-15 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  61453029600, #    utc_start 1948-05-14 22:00:00 (Fri)
  61736594400, #      utc_end 1957-05-09 22:00:00 (Thu)
  61453036800, #  local_start 1948-05-15 00:00:00 (Sat)
  61736601600, #    local_end 1957-05-10 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  61736594400, #    utc_start 1957-05-09 22:00:00 (Thu)
  61749032400, #      utc_end 1957-09-30 21:00:00 (Mon)
  61736605200, #  local_start 1957-05-10 01:00:00 (Fri)
  61749043200, #    local_end 1957-10-01 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  61749032400, #    utc_start 1957-09-30 21:00:00 (Mon)
  61767352800, #      utc_end 1958-04-30 22:00:00 (Wed)
  61749039600, #  local_start 1957-09-30 23:00:00 (Mon)
  61767360000, #    local_end 1958-05-01 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  61767352800, #    utc_start 1958-04-30 22:00:00 (Wed)
  61780568400, #      utc_end 1958-09-30 21:00:00 (Tue)
  61767363600, #  local_start 1958-05-01 01:00:00 (Thu)
  61780579200, #    local_end 1958-10-01 00:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  61780568400, #    utc_start 1958-09-30 21:00:00 (Tue)
  61798892400, #      utc_end 1959-04-30 23:00:00 (Thu)
  61780575600, #  local_start 1958-09-30 23:00:00 (Tue)
  61798899600, #    local_end 1959-05-01 01:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  61798892400, #    utc_start 1959-04-30 23:00:00 (Thu)
  61812028800, #      utc_end 1959-09-30 00:00:00 (Wed)
  61798903200, #  local_start 1959-05-01 02:00:00 (Fri)
  61812039600, #    local_end 1959-09-30 03:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  61812028800, #    utc_start 1959-09-30 00:00:00 (Wed)
  61830514800, #      utc_end 1960-04-30 23:00:00 (Sat)
  61812036000, #  local_start 1959-09-30 02:00:00 (Wed)
  61830522000, #    local_end 1960-05-01 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61830514800, #    utc_start 1960-04-30 23:00:00 (Sat)
  61843651200, #      utc_end 1960-09-30 00:00:00 (Fri)
  61830525600, #  local_start 1960-05-01 02:00:00 (Sun)
  61843662000, #    local_end 1960-09-30 03:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  61843651200, #    utc_start 1960-09-30 00:00:00 (Fri)
  61862050800, #      utc_end 1961-04-30 23:00:00 (Sun)
  61843658400, #  local_start 1960-09-30 02:00:00 (Fri)
  61862058000, #    local_end 1961-05-01 01:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  61862050800, #    utc_start 1961-04-30 23:00:00 (Sun)
  61875187200, #      utc_end 1961-09-30 00:00:00 (Sat)
  61862061600, #  local_start 1961-05-01 02:00:00 (Mon)
  61875198000, #    local_end 1961-09-30 03:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  61875187200, #    utc_start 1961-09-30 00:00:00 (Sat)
  61893586800, #      utc_end 1962-04-30 23:00:00 (Mon)
  61875194400, #  local_start 1961-09-30 02:00:00 (Sat)
  61893594000, #    local_end 1962-05-01 01:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  61893586800, #    utc_start 1962-04-30 23:00:00 (Mon)
  61906723200, #      utc_end 1962-09-30 00:00:00 (Sun)
  61893597600, #  local_start 1962-05-01 02:00:00 (Tue)
  61906734000, #    local_end 1962-09-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61906723200, #    utc_start 1962-09-30 00:00:00 (Sun)
  61925122800, #      utc_end 1963-04-30 23:00:00 (Tue)
  61906730400, #  local_start 1962-09-30 02:00:00 (Sun)
  61925130000, #    local_end 1963-05-01 01:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  61925122800, #    utc_start 1963-04-30 23:00:00 (Tue)
  61938259200, #      utc_end 1963-09-30 00:00:00 (Mon)
  61925133600, #  local_start 1963-05-01 02:00:00 (Wed)
  61938270000, #    local_end 1963-09-30 03:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  61938259200, #    utc_start 1963-09-30 00:00:00 (Mon)
  61956745200, #      utc_end 1964-04-30 23:00:00 (Thu)
  61938266400, #  local_start 1963-09-30 02:00:00 (Mon)
  61956752400, #    local_end 1964-05-01 01:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  61956745200, #    utc_start 1964-04-30 23:00:00 (Thu)
  61969881600, #      utc_end 1964-09-30 00:00:00 (Wed)
  61956756000, #  local_start 1964-05-01 02:00:00 (Fri)
  61969892400, #    local_end 1964-09-30 03:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  61969881600, #    utc_start 1964-09-30 00:00:00 (Wed)
  61988281200, #      utc_end 1965-04-30 23:00:00 (Fri)
  61969888800, #  local_start 1964-09-30 02:00:00 (Wed)
  61988288400, #    local_end 1965-05-01 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  61988281200, #    utc_start 1965-04-30 23:00:00 (Fri)
  62001417600, #      utc_end 1965-09-30 00:00:00 (Thu)
  61988292000, #  local_start 1965-05-01 02:00:00 (Sat)
  62001428400, #    local_end 1965-09-30 03:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  62001417600, #    utc_start 1965-09-30 00:00:00 (Thu)
  62019817200, #      utc_end 1966-04-30 23:00:00 (Sat)
  62001424800, #  local_start 1965-09-30 02:00:00 (Thu)
  62019824400, #    local_end 1966-05-01 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62019817200, #    utc_start 1966-04-30 23:00:00 (Sat)
  62033040000, #      utc_end 1966-10-01 00:00:00 (Sat)
  62019828000, #  local_start 1966-05-01 02:00:00 (Sun)
  62033050800, #    local_end 1966-10-01 03:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62033040000, #    utc_start 1966-10-01 00:00:00 (Sat)
  62051353200, #      utc_end 1967-04-30 23:00:00 (Sun)
  62033047200, #  local_start 1966-10-01 02:00:00 (Sat)
  62051360400, #    local_end 1967-05-01 01:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  62051353200, #    utc_start 1967-04-30 23:00:00 (Sun)
  62054370000, #      utc_end 1967-06-04 21:00:00 (Sun)
  62051364000, #  local_start 1967-05-01 02:00:00 (Mon)
  62054380800, #    local_end 1967-06-05 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62054370000, #    utc_start 1967-06-04 21:00:00 (Sun)
  62278063200, #      utc_end 1974-07-06 22:00:00 (Sat)
  62054377200, #  local_start 1967-06-04 23:00:00 (Sun)
  62278070400, #    local_end 1974-07-07 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62278063200, #    utc_start 1974-07-06 22:00:00 (Sat)
  62286526800, #      utc_end 1974-10-12 21:00:00 (Sat)
  62278074000, #  local_start 1974-07-07 01:00:00 (Sun)
  62286537600, #    local_end 1974-10-13 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62286526800, #    utc_start 1974-10-12 21:00:00 (Sat)
  62302860000, #      utc_end 1975-04-19 22:00:00 (Sat)
  62286534000, #  local_start 1974-10-12 23:00:00 (Sat)
  62302867200, #    local_end 1975-04-20 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62302860000, #    utc_start 1975-04-19 22:00:00 (Sat)
  62314347600, #      utc_end 1975-08-30 21:00:00 (Sat)
  62302870800, #  local_start 1975-04-20 01:00:00 (Sun)
  62314358400, #    local_end 1975-08-31 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62314347600, #    utc_start 1975-08-30 21:00:00 (Sat)
  62617960800, #      utc_end 1985-04-13 22:00:00 (Sat)
  62314354800, #  local_start 1975-08-30 23:00:00 (Sat)
  62617968000, #    local_end 1985-04-14 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62617960800, #    utc_start 1985-04-13 22:00:00 (Sat)
  62631262800, #      utc_end 1985-09-14 21:00:00 (Sat)
  62617971600, #  local_start 1985-04-14 01:00:00 (Sun)
  62631273600, #    local_end 1985-09-15 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62631262800, #    utc_start 1985-09-14 21:00:00 (Sat)
  62652434400, #      utc_end 1986-05-17 22:00:00 (Sat)
  62631270000, #  local_start 1985-09-14 23:00:00 (Sat)
  62652441600, #    local_end 1986-05-18 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62652434400, #    utc_start 1986-05-17 22:00:00 (Sat)
  62662107600, #      utc_end 1986-09-06 21:00:00 (Sat)
  62652445200, #  local_start 1986-05-18 01:00:00 (Sun)
  62662118400, #    local_end 1986-09-07 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62662107600, #    utc_start 1986-09-06 21:00:00 (Sat)
  62681119200, #      utc_end 1987-04-14 22:00:00 (Tue)
  62662114800, #  local_start 1986-09-06 23:00:00 (Sat)
  62681126400, #    local_end 1987-04-15 00:00:00 (Wed)
  7200,
  0,
  'IST',
      ],
      [
  62681119200, #    utc_start 1987-04-14 22:00:00 (Tue)
  62694162000, #      utc_end 1987-09-12 21:00:00 (Sat)
  62681130000, #  local_start 1987-04-15 01:00:00 (Wed)
  62694172800, #    local_end 1987-09-13 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62694162000, #    utc_start 1987-09-12 21:00:00 (Sat)
  62712309600, #      utc_end 1988-04-09 22:00:00 (Sat)
  62694169200, #  local_start 1987-09-12 23:00:00 (Sat)
  62712316800, #    local_end 1988-04-10 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62712309600, #    utc_start 1988-04-09 22:00:00 (Sat)
  62725006800, #      utc_end 1988-09-03 21:00:00 (Sat)
  62712320400, #  local_start 1988-04-10 01:00:00 (Sun)
  62725017600, #    local_end 1988-09-04 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62725006800, #    utc_start 1988-09-03 21:00:00 (Sat)
  62745573600, #      utc_end 1989-04-29 22:00:00 (Sat)
  62725014000, #  local_start 1988-09-03 23:00:00 (Sat)
  62745580800, #    local_end 1989-04-30 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62745573600, #    utc_start 1989-04-29 22:00:00 (Sat)
  62756456400, #      utc_end 1989-09-02 21:00:00 (Sat)
  62745584400, #  local_start 1989-04-30 01:00:00 (Sun)
  62756467200, #    local_end 1989-09-03 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62756456400, #    utc_start 1989-09-02 21:00:00 (Sat)
  62773999200, #      utc_end 1990-03-24 22:00:00 (Sat)
  62756463600, #  local_start 1989-09-02 23:00:00 (Sat)
  62774006400, #    local_end 1990-03-25 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62773999200, #    utc_start 1990-03-24 22:00:00 (Sat)
  62787301200, #      utc_end 1990-08-25 21:00:00 (Sat)
  62774010000, #  local_start 1990-03-25 01:00:00 (Sun)
  62787312000, #    local_end 1990-08-26 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62787301200, #    utc_start 1990-08-25 21:00:00 (Sat)
  62805448800, #      utc_end 1991-03-23 22:00:00 (Sat)
  62787308400, #  local_start 1990-08-25 23:00:00 (Sat)
  62805456000, #    local_end 1991-03-24 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62805448800, #    utc_start 1991-03-23 22:00:00 (Sat)
  62819355600, #      utc_end 1991-08-31 21:00:00 (Sat)
  62805459600, #  local_start 1991-03-24 01:00:00 (Sun)
  62819366400, #    local_end 1991-09-01 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62819355600, #    utc_start 1991-08-31 21:00:00 (Sat)
  62837503200, #      utc_end 1992-03-28 22:00:00 (Sat)
  62819362800, #  local_start 1991-08-31 23:00:00 (Sat)
  62837510400, #    local_end 1992-03-29 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62837503200, #    utc_start 1992-03-28 22:00:00 (Sat)
  62851410000, #      utc_end 1992-09-05 21:00:00 (Sat)
  62837514000, #  local_start 1992-03-29 01:00:00 (Sun)
  62851420800, #    local_end 1992-09-06 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62851410000, #    utc_start 1992-09-05 21:00:00 (Sat)
  62869384800, #      utc_end 1993-04-01 22:00:00 (Thu)
  62851417200, #  local_start 1992-09-05 23:00:00 (Sat)
  62869392000, #    local_end 1993-04-02 00:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  62869384800, #    utc_start 1993-04-01 22:00:00 (Thu)
  62882859600, #      utc_end 1993-09-04 21:00:00 (Sat)
  62869395600, #  local_start 1993-04-02 01:00:00 (Fri)
  62882870400, #    local_end 1993-09-05 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62882859600, #    utc_start 1993-09-04 21:00:00 (Sat)
  62900834400, #      utc_end 1994-03-31 22:00:00 (Thu)
  62882866800, #  local_start 1993-09-04 23:00:00 (Sat)
  62900841600, #    local_end 1994-04-01 00:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  62900834400, #    utc_start 1994-03-31 22:00:00 (Thu)
  62913704400, #      utc_end 1994-08-27 21:00:00 (Sat)
  62900845200, #  local_start 1994-04-01 01:00:00 (Fri)
  62913715200, #    local_end 1994-08-28 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62913704400, #    utc_start 1994-08-27 21:00:00 (Sat)
  62932284000, #      utc_end 1995-03-30 22:00:00 (Thu)
  62913711600, #  local_start 1994-08-27 23:00:00 (Sat)
  62932291200, #    local_end 1995-03-31 00:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  62932284000, #    utc_start 1995-03-30 22:00:00 (Thu)
  62945758800, #      utc_end 1995-09-02 21:00:00 (Sat)
  62932294800, #  local_start 1995-03-31 01:00:00 (Fri)
  62945769600, #    local_end 1995-09-03 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62945758800, #    utc_start 1995-09-02 21:00:00 (Sat)
  62956130400, #      utc_end 1995-12-31 22:00:00 (Sun)
  62945766000, #  local_start 1995-09-02 23:00:00 (Sat)
  62956137600, #    local_end 1996-01-01 00:00:00 (Mon)
  7200,
  0,
  'IST',
      ],
      [
  62956130400, #    utc_start 1995-12-31 22:00:00 (Sun)
  62964338400, #      utc_end 1996-04-04 22:00:00 (Thu)
  62956137600, #  local_start 1996-01-01 00:00:00 (Mon)
  62964345600, #    local_end 1996-04-05 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62964338400, #    utc_start 1996-04-04 22:00:00 (Thu)
  62978853600, #      utc_end 1996-09-19 22:00:00 (Thu)
  62964349200, #  local_start 1996-04-05 01:00:00 (Fri)
  62978864400, #    local_end 1996-09-20 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  62978853600, #    utc_start 1996-09-19 22:00:00 (Thu)
  62995788000, #      utc_end 1997-04-03 22:00:00 (Thu)
  62978860800, #  local_start 1996-09-20 00:00:00 (Fri)
  62995795200, #    local_end 1997-04-04 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  62995788000, #    utc_start 1997-04-03 22:00:00 (Thu)
  63010303200, #      utc_end 1997-09-18 22:00:00 (Thu)
  62995798800, #  local_start 1997-04-04 01:00:00 (Fri)
  63010314000, #    local_end 1997-09-19 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63010303200, #    utc_start 1997-09-18 22:00:00 (Thu)
  63027237600, #      utc_end 1998-04-02 22:00:00 (Thu)
  63010310400, #  local_start 1997-09-19 00:00:00 (Fri)
  63027244800, #    local_end 1998-04-03 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63027237600, #    utc_start 1998-04-02 22:00:00 (Thu)
  63041752800, #      utc_end 1998-09-17 22:00:00 (Thu)
  63027248400, #  local_start 1998-04-03 01:00:00 (Fri)
  63041763600, #    local_end 1998-09-18 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63041752800, #    utc_start 1998-09-17 22:00:00 (Thu)
  63050824800, #      utc_end 1998-12-31 22:00:00 (Thu)
  63041760000, #  local_start 1998-09-18 00:00:00 (Fri)
  63050832000, #    local_end 1999-01-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63050824800, #    utc_start 1998-12-31 22:00:00 (Thu)
  63059896800, #      utc_end 1999-04-15 22:00:00 (Thu)
  63050832000, #  local_start 1999-01-01 00:00:00 (Fri)
  63059904000, #    local_end 1999-04-16 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63059896800, #    utc_start 1999-04-15 22:00:00 (Thu)
  63075618000, #      utc_end 1999-10-14 21:00:00 (Thu)
  63059907600, #  local_start 1999-04-16 01:00:00 (Fri)
  63075628800, #    local_end 1999-10-15 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63075618000, #    utc_start 1999-10-14 21:00:00 (Thu)
  63091951200, #      utc_end 2000-04-20 22:00:00 (Thu)
  63075625200, #  local_start 1999-10-14 23:00:00 (Thu)
  63091958400, #    local_end 2000-04-21 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63091951200, #    utc_start 2000-04-20 22:00:00 (Thu)
  63107672400, #      utc_end 2000-10-19 21:00:00 (Thu)
  63091962000, #  local_start 2000-04-21 01:00:00 (Fri)
  63107683200, #    local_end 2000-10-20 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63107672400, #    utc_start 2000-10-19 21:00:00 (Thu)
  63123400800, #      utc_end 2001-04-19 22:00:00 (Thu)
  63107679600, #  local_start 2000-10-19 23:00:00 (Thu)
  63123408000, #    local_end 2001-04-20 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63123400800, #    utc_start 2001-04-19 22:00:00 (Thu)
  63139122000, #      utc_end 2001-10-18 21:00:00 (Thu)
  63123411600, #  local_start 2001-04-20 01:00:00 (Fri)
  63139132800, #    local_end 2001-10-19 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63139122000, #    utc_start 2001-10-18 21:00:00 (Thu)
  63154850400, #      utc_end 2002-04-18 22:00:00 (Thu)
  63139129200, #  local_start 2001-10-18 23:00:00 (Thu)
  63154857600, #    local_end 2002-04-19 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63154850400, #    utc_start 2002-04-18 22:00:00 (Thu)
  63170571600, #      utc_end 2002-10-17 21:00:00 (Thu)
  63154861200, #  local_start 2002-04-19 01:00:00 (Fri)
  63170582400, #    local_end 2002-10-18 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63170571600, #    utc_start 2002-10-17 21:00:00 (Thu)
  63186300000, #      utc_end 2003-04-17 22:00:00 (Thu)
  63170578800, #  local_start 2002-10-17 23:00:00 (Thu)
  63186307200, #    local_end 2003-04-18 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63186300000, #    utc_start 2003-04-17 22:00:00 (Thu)
  63202021200, #      utc_end 2003-10-16 21:00:00 (Thu)
  63186310800, #  local_start 2003-04-18 01:00:00 (Fri)
  63202032000, #    local_end 2003-10-17 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63202021200, #    utc_start 2003-10-16 21:00:00 (Thu)
  63217749600, #      utc_end 2004-04-15 22:00:00 (Thu)
  63202028400, #  local_start 2003-10-16 23:00:00 (Thu)
  63217756800, #    local_end 2004-04-16 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63217749600, #    utc_start 2004-04-15 22:00:00 (Thu)
  63232264800, #      utc_end 2004-09-30 22:00:00 (Thu)
  63217760400, #  local_start 2004-04-16 01:00:00 (Fri)
  63232275600, #    local_end 2004-10-01 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63232264800, #    utc_start 2004-09-30 22:00:00 (Thu)
  63249199200, #      utc_end 2005-04-14 22:00:00 (Thu)
  63232272000, #  local_start 2004-10-01 00:00:00 (Fri)
  63249206400, #    local_end 2005-04-15 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63249199200, #    utc_start 2005-04-14 22:00:00 (Thu)
  63264063600, #      utc_end 2005-10-03 23:00:00 (Mon)
  63249210000, #  local_start 2005-04-15 01:00:00 (Fri)
  63264074400, #    local_end 2005-10-04 02:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  63264063600, #    utc_start 2005-10-03 23:00:00 (Mon)
  63279525600, #      utc_end 2006-03-31 22:00:00 (Fri)
  63264070800, #  local_start 2005-10-04 01:00:00 (Tue)
  63279532800, #    local_end 2006-04-01 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63279525600, #    utc_start 2006-03-31 22:00:00 (Fri)
  63294555600, #      utc_end 2006-09-21 21:00:00 (Thu)
  63279536400, #  local_start 2006-04-01 01:00:00 (Sat)
  63294566400, #    local_end 2006-09-22 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63294555600, #    utc_start 2006-09-21 21:00:00 (Thu)
  63311061600, #      utc_end 2007-03-31 22:00:00 (Sat)
  63294562800, #  local_start 2006-09-21 23:00:00 (Thu)
  63311068800, #    local_end 2007-04-01 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63311061600, #    utc_start 2007-03-31 22:00:00 (Sat)
  63325321200, #      utc_end 2007-09-12 23:00:00 (Wed)
  63311072400, #  local_start 2007-04-01 01:00:00 (Sun)
  63325332000, #    local_end 2007-09-13 02:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  63325321200, #    utc_start 2007-09-12 23:00:00 (Wed)
  63342338400, #      utc_end 2008-03-27 22:00:00 (Thu)
  63325328400, #  local_start 2007-09-13 01:00:00 (Thu)
  63342345600, #    local_end 2008-03-28 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63342338400, #    utc_start 2008-03-27 22:00:00 (Thu)
  63355899600, #      utc_end 2008-08-31 21:00:00 (Sun)
  63342349200, #  local_start 2008-03-28 01:00:00 (Fri)
  63355910400, #    local_end 2008-09-01 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  63355899600, #    utc_start 2008-08-31 21:00:00 (Sun)
  63373788000, #      utc_end 2009-03-26 22:00:00 (Thu)
  63355906800, #  local_start 2008-08-31 23:00:00 (Sun)
  63373795200, #    local_end 2009-03-27 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63373788000, #    utc_start 2009-03-26 22:00:00 (Thu)
  63387698400, #      utc_end 2009-09-03 22:00:00 (Thu)
  63373798800, #  local_start 2009-03-27 01:00:00 (Fri)
  63387709200, #    local_end 2009-09-04 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63387698400, #    utc_start 2009-09-03 22:00:00 (Thu)
  63405237600, #      utc_end 2010-03-25 22:00:00 (Thu)
  63387705600, #  local_start 2009-09-04 00:00:00 (Fri)
  63405244800, #    local_end 2010-03-26 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63405237600, #    utc_start 2010-03-25 22:00:00 (Thu)
  63417157200, #      utc_end 2010-08-10 21:00:00 (Tue)
  63405248400, #  local_start 2010-03-26 01:00:00 (Fri)
  63417168000, #    local_end 2010-08-11 00:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  63417157200, #    utc_start 2010-08-10 21:00:00 (Tue)
  63437292060, #      utc_end 2011-03-31 22:01:00 (Thu)
  63417164400, #  local_start 2010-08-10 23:00:00 (Tue)
  63437299260, #    local_end 2011-04-01 00:01:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63437292060, #    utc_start 2011-03-31 22:01:00 (Thu)
  63447829200, #      utc_end 2011-07-31 21:00:00 (Sun)
  63437302860, #  local_start 2011-04-01 01:01:00 (Fri)
  63447840000, #    local_end 2011-08-01 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  63447829200, #    utc_start 2011-07-31 21:00:00 (Sun)
  63450338400, #      utc_end 2011-08-29 22:00:00 (Mon)
  63447836400, #  local_start 2011-07-31 23:00:00 (Sun)
  63450345600, #    local_end 2011-08-30 00:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  63450338400, #    utc_start 2011-08-29 22:00:00 (Mon)
  63453013200, #      utc_end 2011-09-29 21:00:00 (Thu)
  63450349200, #  local_start 2011-08-30 01:00:00 (Tue)
  63453024000, #    local_end 2011-09-30 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63453013200, #    utc_start 2011-09-29 21:00:00 (Thu)
  63468741600, #      utc_end 2012-03-29 22:00:00 (Thu)
  63453020400, #  local_start 2011-09-29 23:00:00 (Thu)
  63468748800, #    local_end 2012-03-30 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63468741600, #    utc_start 2012-03-29 22:00:00 (Thu)
  63483861600, #      utc_end 2012-09-20 22:00:00 (Thu)
  63468752400, #  local_start 2012-03-30 01:00:00 (Fri)
  63483872400, #    local_end 2012-09-21 01:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63483861600, #    utc_start 2012-09-20 22:00:00 (Thu)
  63500191200, #      utc_end 2013-03-28 22:00:00 (Thu)
  63483868800, #  local_start 2012-09-21 00:00:00 (Fri)
  63500198400, #    local_end 2013-03-29 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63500191200, #    utc_start 2013-03-28 22:00:00 (Thu)
  63515912400, #      utc_end 2013-09-26 21:00:00 (Thu)
  63500202000, #  local_start 2013-03-29 01:00:00 (Fri)
  63515923200, #    local_end 2013-09-27 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63515912400, #    utc_start 2013-09-26 21:00:00 (Thu)
  63531640800, #      utc_end 2014-03-27 22:00:00 (Thu)
  63515919600, #  local_start 2013-09-26 23:00:00 (Thu)
  63531648000, #    local_end 2014-03-28 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  63531640800, #    utc_start 2014-03-27 22:00:00 (Thu)
  63549781200, #      utc_end 2014-10-23 21:00:00 (Thu)
  63531651600, #  local_start 2014-03-28 01:00:00 (Fri)
  63549792000, #    local_end 2014-10-24 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63549781200, #    utc_start 2014-10-23 21:00:00 (Thu)
  63563176800, #      utc_end 2015-03-27 22:00:00 (Fri)
  63549788400, #  local_start 2014-10-23 23:00:00 (Thu)
  63563184000, #    local_end 2015-03-28 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63563176800, #    utc_start 2015-03-27 22:00:00 (Fri)
  63581230800, #      utc_end 2015-10-22 21:00:00 (Thu)
  63563187600, #  local_start 2015-03-28 01:00:00 (Sat)
  63581241600, #    local_end 2015-10-23 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63581230800, #    utc_start 2015-10-22 21:00:00 (Thu)
  63594630000, #      utc_end 2016-03-25 23:00:00 (Fri)
  63581238000, #  local_start 2015-10-22 23:00:00 (Thu)
  63594637200, #    local_end 2016-03-26 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63594630000, #    utc_start 2016-03-25 23:00:00 (Fri)
  63612680400, #      utc_end 2016-10-20 21:00:00 (Thu)
  63594640800, #  local_start 2016-03-26 02:00:00 (Sat)
  63612691200, #    local_end 2016-10-21 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63612680400, #    utc_start 2016-10-20 21:00:00 (Thu)
  63626079600, #      utc_end 2017-03-24 23:00:00 (Fri)
  63612687600, #  local_start 2016-10-20 23:00:00 (Thu)
  63626086800, #    local_end 2017-03-25 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63626079600, #    utc_start 2017-03-24 23:00:00 (Fri)
  63644734800, #      utc_end 2017-10-26 21:00:00 (Thu)
  63626090400, #  local_start 2017-03-25 02:00:00 (Sat)
  63644745600, #    local_end 2017-10-27 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63644734800, #    utc_start 2017-10-26 21:00:00 (Thu)
  63658134000, #      utc_end 2018-03-30 23:00:00 (Fri)
  63644742000, #  local_start 2017-10-26 23:00:00 (Thu)
  63658141200, #    local_end 2018-03-31 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63658134000, #    utc_start 2018-03-30 23:00:00 (Fri)
  63676184400, #      utc_end 2018-10-25 21:00:00 (Thu)
  63658144800, #  local_start 2018-03-31 02:00:00 (Sat)
  63676195200, #    local_end 2018-10-26 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63676184400, #    utc_start 2018-10-25 21:00:00 (Thu)
  63689583600, #      utc_end 2019-03-29 23:00:00 (Fri)
  63676191600, #  local_start 2018-10-25 23:00:00 (Thu)
  63689590800, #    local_end 2019-03-30 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63689583600, #    utc_start 2019-03-29 23:00:00 (Fri)
  63707634000, #      utc_end 2019-10-24 21:00:00 (Thu)
  63689594400, #  local_start 2019-03-30 02:00:00 (Sat)
  63707644800, #    local_end 2019-10-25 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63707634000, #    utc_start 2019-10-24 21:00:00 (Thu)
  63721033200, #      utc_end 2020-03-27 23:00:00 (Fri)
  63707641200, #  local_start 2019-10-24 23:00:00 (Thu)
  63721040400, #    local_end 2020-03-28 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63721033200, #    utc_start 2020-03-27 23:00:00 (Fri)
  63739083600, #      utc_end 2020-10-22 21:00:00 (Thu)
  63721044000, #  local_start 2020-03-28 02:00:00 (Sat)
  63739094400, #    local_end 2020-10-23 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63739083600, #    utc_start 2020-10-22 21:00:00 (Thu)
  63752482800, #      utc_end 2021-03-26 23:00:00 (Fri)
  63739090800, #  local_start 2020-10-22 23:00:00 (Thu)
  63752490000, #    local_end 2021-03-27 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63752482800, #    utc_start 2021-03-26 23:00:00 (Fri)
  63770533200, #      utc_end 2021-10-21 21:00:00 (Thu)
  63752493600, #  local_start 2021-03-27 02:00:00 (Sat)
  63770544000, #    local_end 2021-10-22 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63770533200, #    utc_start 2021-10-21 21:00:00 (Thu)
  63783932400, #      utc_end 2022-03-25 23:00:00 (Fri)
  63770540400, #  local_start 2021-10-21 23:00:00 (Thu)
  63783939600, #    local_end 2022-03-26 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63783932400, #    utc_start 2022-03-25 23:00:00 (Fri)
  63801982800, #      utc_end 2022-10-20 21:00:00 (Thu)
  63783943200, #  local_start 2022-03-26 02:00:00 (Sat)
  63801993600, #    local_end 2022-10-21 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63801982800, #    utc_start 2022-10-20 21:00:00 (Thu)
  63815382000, #      utc_end 2023-03-24 23:00:00 (Fri)
  63801990000, #  local_start 2022-10-20 23:00:00 (Thu)
  63815389200, #    local_end 2023-03-25 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63815382000, #    utc_start 2023-03-24 23:00:00 (Fri)
  63834037200, #      utc_end 2023-10-26 21:00:00 (Thu)
  63815392800, #  local_start 2023-03-25 02:00:00 (Sat)
  63834048000, #    local_end 2023-10-27 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63834037200, #    utc_start 2023-10-26 21:00:00 (Thu)
  63847436400, #      utc_end 2024-03-29 23:00:00 (Fri)
  63834044400, #  local_start 2023-10-26 23:00:00 (Thu)
  63847443600, #    local_end 2024-03-30 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63847436400, #    utc_start 2024-03-29 23:00:00 (Fri)
  63865486800, #      utc_end 2024-10-24 21:00:00 (Thu)
  63847447200, #  local_start 2024-03-30 02:00:00 (Sat)
  63865497600, #    local_end 2024-10-25 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63865486800, #    utc_start 2024-10-24 21:00:00 (Thu)
  63878886000, #      utc_end 2025-03-28 23:00:00 (Fri)
  63865494000, #  local_start 2024-10-24 23:00:00 (Thu)
  63878893200, #    local_end 2025-03-29 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63878886000, #    utc_start 2025-03-28 23:00:00 (Fri)
  63896936400, #      utc_end 2025-10-23 21:00:00 (Thu)
  63878896800, #  local_start 2025-03-29 02:00:00 (Sat)
  63896947200, #    local_end 2025-10-24 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63896936400, #    utc_start 2025-10-23 21:00:00 (Thu)
  63910335600, #      utc_end 2026-03-27 23:00:00 (Fri)
  63896943600, #  local_start 2025-10-23 23:00:00 (Thu)
  63910342800, #    local_end 2026-03-28 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63910335600, #    utc_start 2026-03-27 23:00:00 (Fri)
  63928386000, #      utc_end 2026-10-22 21:00:00 (Thu)
  63910346400, #  local_start 2026-03-28 02:00:00 (Sat)
  63928396800, #    local_end 2026-10-23 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
      [
  63928386000, #    utc_start 2026-10-22 21:00:00 (Thu)
  63941785200, #      utc_end 2027-03-26 23:00:00 (Fri)
  63928393200, #  local_start 2026-10-22 23:00:00 (Thu)
  63941792400, #    local_end 2027-03-27 01:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  63941785200, #    utc_start 2027-03-26 23:00:00 (Fri)
  63959835600, #      utc_end 2027-10-21 21:00:00 (Thu)
  63941796000, #  local_start 2027-03-27 02:00:00 (Sat)
  63959846400, #    local_end 2027-10-22 00:00:00 (Fri)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {62}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 729755,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 729755,
      'utc_rd_secs' => 0,
      'utc_year' => 2000
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 729754,
      'local_rd_secs' => 79200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 729754,
      'utc_rd_secs' => 79200,
      'utc_year' => 1999
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '0:00',
      'from' => '2014',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'Palestine',
      'offset_from_std' => 0,
      'on' => 'Fri>=21',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00',
      'from' => '2016',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'Palestine',
      'offset_from_std' => 3600,
      'on' => 'lastSat',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_HEBRON

    $main::fatpacked{"DateTime/TimeZone/Asia/Ho_Chi_Minh.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_HO_CHI_MINH';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Ho_Chi_Minh;
  $DateTime::TimeZone::Asia::Ho_Chi_Minh::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Ho_Chi_Minh::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60131609600, #      utc_end 1906-06-30 16:53:20 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60131635200, #    local_end 1906-07-01 00:00:00 (Sun)
  25600,
  0,
  'LMT',
      ],
      [
  60131609600, #    utc_start 1906-06-30 16:53:20 (Sat)
  60284105610, #      utc_end 1911-04-30 16:53:30 (Sun)
  60131635190, #  local_start 1906-06-30 23:59:50 (Sat)
  60284131200, #    local_end 1911-05-01 00:00:00 (Mon)
  25590,
  0,
  'PLMT',
      ],
      [
  60284105610, #    utc_start 1911-04-30 16:53:30 (Sun)
  61283577600, #      utc_end 1942-12-31 16:00:00 (Thu)
  60284130810, #  local_start 1911-04-30 23:53:30 (Sun)
  61283602800, #    local_end 1942-12-31 23:00:00 (Thu)
  25200,
  0,
  'ICT',
      ],
      [
  61283577600, #    utc_start 1942-12-31 16:00:00 (Thu)
  61353039600, #      utc_end 1945-03-14 15:00:00 (Wed)
  61283606400, #  local_start 1943-01-01 00:00:00 (Fri)
  61353068400, #    local_end 1945-03-14 23:00:00 (Wed)
  28800,
  0,
  'IDT',
      ],
      [
  61353039600, #    utc_start 1945-03-14 15:00:00 (Wed)
  61367814000, #      utc_end 1945-09-01 15:00:00 (Sat)
  61353072000, #  local_start 1945-03-15 00:00:00 (Thu)
  61367846400, #    local_end 1945-09-02 00:00:00 (Sun)
  32400,
  0,
  'JST',
      ],
      [
  61367814000, #    utc_start 1945-09-01 15:00:00 (Sat)
  61417587600, #      utc_end 1947-03-31 17:00:00 (Mon)
  61367839200, #  local_start 1945-09-01 22:00:00 (Sat)
  61417612800, #    local_end 1947-04-01 00:00:00 (Tue)
  25200,
  0,
  'ICT',
      ],
      [
  61417587600, #    utc_start 1947-03-31 17:00:00 (Mon)
  61677907200, #      utc_end 1955-06-30 16:00:00 (Thu)
  61417616400, #  local_start 1947-04-01 01:00:00 (Tue)
  61677936000, #    local_end 1955-07-01 00:00:00 (Fri)
  28800,
  0,
  'IDT',
      ],
      [
  61677907200, #    utc_start 1955-06-30 16:00:00 (Thu)
  61820035200, #      utc_end 1959-12-31 16:00:00 (Thu)
  61677932400, #  local_start 1955-06-30 23:00:00 (Thu)
  61820060400, #    local_end 1959-12-31 23:00:00 (Thu)
  25200,
  0,
  'ICT',
      ],
      [
  61820035200, #    utc_start 1959-12-31 16:00:00 (Thu)
  62307504000, #      utc_end 1975-06-12 16:00:00 (Thu)
  61820064000, #  local_start 1960-01-01 00:00:00 (Fri)
  62307532800, #    local_end 1975-06-13 00:00:00 (Fri)
  28800,
  0,
  'IDT',
      ],
      [
  62307504000, #    utc_start 1975-06-12 16:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  62307529200, #  local_start 1975-06-12 23:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  25200,
  0,
  'ICT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_HO_CHI_MINH

    $main::fatpacked{"DateTime/TimeZone/Asia/Hong_Kong.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_HONG_KONG';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Hong_Kong;
  $DateTime::TimeZone::Asia::Hong_Kong::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Hong_Kong::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60078990198, #      utc_end 1904-10-29 16:23:18 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60079017600, #    local_end 1904-10-30 00:00:00 (Sun)
  27402,
  0,
  'LMT',
      ],
      [
  60078990198, #    utc_start 1904-10-29 16:23:18 (Sat)
  61228294200, #      utc_end 1941-03-31 19:30:00 (Mon)
  60079018998, #  local_start 1904-10-30 00:23:18 (Sun)
  61228323000, #    local_end 1941-04-01 03:30:00 (Tue)
  28800,
  0,
  'HKT',
      ],
      [
  61228294200, #    utc_start 1941-03-31 19:30:00 (Mon)
  61244015400, #      utc_end 1941-09-29 18:30:00 (Mon)
  61228326600, #  local_start 1941-04-01 04:30:00 (Tue)
  61244047800, #    local_end 1941-09-30 03:30:00 (Tue)
  32400,
  1,
  'HKST',
      ],
      [
  61244015400, #    utc_start 1941-09-29 18:30:00 (Mon)
  61251436800, #      utc_end 1941-12-24 16:00:00 (Wed)
  61244044200, #  local_start 1941-09-30 02:30:00 (Tue)
  61251465600, #    local_end 1941-12-25 00:00:00 (Thu)
  28800,
  0,
  'HKT',
      ],
      [
  61251436800, #    utc_start 1941-12-24 16:00:00 (Wed)
  61368937200, #      utc_end 1945-09-14 15:00:00 (Fri)
  61251469200, #  local_start 1941-12-25 01:00:00 (Thu)
  61368969600, #    local_end 1945-09-15 00:00:00 (Sat)
  32400,
  0,
  'JST',
      ],
      [
  61368937200, #    utc_start 1945-09-14 15:00:00 (Fri)
  61387702200, #      utc_end 1946-04-19 19:30:00 (Fri)
  61368966000, #  local_start 1945-09-14 23:00:00 (Fri)
  61387731000, #    local_end 1946-04-20 03:30:00 (Sat)
  28800,
  0,
  'HKT',
      ],
      [
  61387702200, #    utc_start 1946-04-19 19:30:00 (Fri)
  61407138600, #      utc_end 1946-11-30 18:30:00 (Sat)
  61387734600, #  local_start 1946-04-20 04:30:00 (Sat)
  61407171000, #    local_end 1946-12-01 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61407138600, #    utc_start 1946-11-30 18:30:00 (Sat)
  61418633400, #      utc_end 1947-04-12 19:30:00 (Sat)
  61407167400, #  local_start 1946-12-01 02:30:00 (Sun)
  61418662200, #    local_end 1947-04-13 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61418633400, #    utc_start 1947-04-12 19:30:00 (Sat)
  61441180200, #      utc_end 1947-12-29 18:30:00 (Mon)
  61418665800, #  local_start 1947-04-13 04:30:00 (Sun)
  61441212600, #    local_end 1947-12-30 03:30:00 (Tue)
  32400,
  1,
  'HKST',
      ],
      [
  61441180200, #    utc_start 1947-12-29 18:30:00 (Mon)
  61451897400, #      utc_end 1948-05-01 19:30:00 (Sat)
  61441209000, #  local_start 1947-12-30 02:30:00 (Tue)
  61451926200, #    local_end 1948-05-02 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61451897400, #    utc_start 1948-05-01 19:30:00 (Sat)
  61467618600, #      utc_end 1948-10-30 18:30:00 (Sat)
  61451929800, #  local_start 1948-05-02 04:30:00 (Sun)
  61467651000, #    local_end 1948-10-31 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61467618600, #    utc_start 1948-10-30 18:30:00 (Sat)
  61480927800, #      utc_end 1949-04-02 19:30:00 (Sat)
  61467647400, #  local_start 1948-10-31 02:30:00 (Sun)
  61480956600, #    local_end 1949-04-03 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61480927800, #    utc_start 1949-04-02 19:30:00 (Sat)
  61499068200, #      utc_end 1949-10-29 18:30:00 (Sat)
  61480960200, #  local_start 1949-04-03 04:30:00 (Sun)
  61499100600, #    local_end 1949-10-30 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61499068200, #    utc_start 1949-10-29 18:30:00 (Sat)
  61512377400, #      utc_end 1950-04-01 19:30:00 (Sat)
  61499097000, #  local_start 1949-10-30 02:30:00 (Sun)
  61512406200, #    local_end 1950-04-02 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61512377400, #    utc_start 1950-04-01 19:30:00 (Sat)
  61530517800, #      utc_end 1950-10-28 18:30:00 (Sat)
  61512409800, #  local_start 1950-04-02 04:30:00 (Sun)
  61530550200, #    local_end 1950-10-29 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61530517800, #    utc_start 1950-10-28 18:30:00 (Sat)
  61543827000, #      utc_end 1951-03-31 19:30:00 (Sat)
  61530546600, #  local_start 1950-10-29 02:30:00 (Sun)
  61543855800, #    local_end 1951-04-01 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61543827000, #    utc_start 1951-03-31 19:30:00 (Sat)
  61561967400, #      utc_end 1951-10-27 18:30:00 (Sat)
  61543859400, #  local_start 1951-04-01 04:30:00 (Sun)
  61561999800, #    local_end 1951-10-28 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61561967400, #    utc_start 1951-10-27 18:30:00 (Sat)
  61575881400, #      utc_end 1952-04-05 19:30:00 (Sat)
  61561996200, #  local_start 1951-10-28 02:30:00 (Sun)
  61575910200, #    local_end 1952-04-06 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61575881400, #    utc_start 1952-04-05 19:30:00 (Sat)
  61593330600, #      utc_end 1952-10-24 18:30:00 (Fri)
  61575913800, #  local_start 1952-04-06 04:30:00 (Sun)
  61593363000, #    local_end 1952-10-25 03:30:00 (Sat)
  32400,
  1,
  'HKST',
      ],
      [
  61593330600, #    utc_start 1952-10-24 18:30:00 (Fri)
  61607331000, #      utc_end 1953-04-04 19:30:00 (Sat)
  61593359400, #  local_start 1952-10-25 02:30:00 (Sat)
  61607359800, #    local_end 1953-04-05 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61607331000, #    utc_start 1953-04-04 19:30:00 (Sat)
  61625471400, #      utc_end 1953-10-31 18:30:00 (Sat)
  61607363400, #  local_start 1953-04-05 04:30:00 (Sun)
  61625503800, #    local_end 1953-11-01 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61625471400, #    utc_start 1953-10-31 18:30:00 (Sat)
  61637571000, #      utc_end 1954-03-20 19:30:00 (Sat)
  61625500200, #  local_start 1953-11-01 02:30:00 (Sun)
  61637599800, #    local_end 1954-03-21 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61637571000, #    utc_start 1954-03-20 19:30:00 (Sat)
  61656921000, #      utc_end 1954-10-30 18:30:00 (Sat)
  61637603400, #  local_start 1954-03-21 04:30:00 (Sun)
  61656953400, #    local_end 1954-10-31 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61656921000, #    utc_start 1954-10-30 18:30:00 (Sat)
  61669020600, #      utc_end 1955-03-19 19:30:00 (Sat)
  61656949800, #  local_start 1954-10-31 02:30:00 (Sun)
  61669049400, #    local_end 1955-03-20 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61669020600, #    utc_start 1955-03-19 19:30:00 (Sat)
  61688975400, #      utc_end 1955-11-05 18:30:00 (Sat)
  61669053000, #  local_start 1955-03-20 04:30:00 (Sun)
  61689007800, #    local_end 1955-11-06 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61688975400, #    utc_start 1955-11-05 18:30:00 (Sat)
  61700470200, #      utc_end 1956-03-17 19:30:00 (Sat)
  61689004200, #  local_start 1955-11-06 02:30:00 (Sun)
  61700499000, #    local_end 1956-03-18 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61700470200, #    utc_start 1956-03-17 19:30:00 (Sat)
  61720425000, #      utc_end 1956-11-03 18:30:00 (Sat)
  61700502600, #  local_start 1956-03-18 04:30:00 (Sun)
  61720457400, #    local_end 1956-11-04 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61720425000, #    utc_start 1956-11-03 18:30:00 (Sat)
  61732524600, #      utc_end 1957-03-23 19:30:00 (Sat)
  61720453800, #  local_start 1956-11-04 02:30:00 (Sun)
  61732553400, #    local_end 1957-03-24 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61732524600, #    utc_start 1957-03-23 19:30:00 (Sat)
  61751874600, #      utc_end 1957-11-02 18:30:00 (Sat)
  61732557000, #  local_start 1957-03-24 04:30:00 (Sun)
  61751907000, #    local_end 1957-11-03 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61751874600, #    utc_start 1957-11-02 18:30:00 (Sat)
  61763974200, #      utc_end 1958-03-22 19:30:00 (Sat)
  61751903400, #  local_start 1957-11-03 02:30:00 (Sun)
  61764003000, #    local_end 1958-03-23 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61763974200, #    utc_start 1958-03-22 19:30:00 (Sat)
  61783324200, #      utc_end 1958-11-01 18:30:00 (Sat)
  61764006600, #  local_start 1958-03-23 04:30:00 (Sun)
  61783356600, #    local_end 1958-11-02 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61783324200, #    utc_start 1958-11-01 18:30:00 (Sat)
  61795423800, #      utc_end 1959-03-21 19:30:00 (Sat)
  61783353000, #  local_start 1958-11-02 02:30:00 (Sun)
  61795452600, #    local_end 1959-03-22 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61795423800, #    utc_start 1959-03-21 19:30:00 (Sat)
  61814773800, #      utc_end 1959-10-31 18:30:00 (Sat)
  61795456200, #  local_start 1959-03-22 04:30:00 (Sun)
  61814806200, #    local_end 1959-11-01 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61814773800, #    utc_start 1959-10-31 18:30:00 (Sat)
  61826873400, #      utc_end 1960-03-19 19:30:00 (Sat)
  61814802600, #  local_start 1959-11-01 02:30:00 (Sun)
  61826902200, #    local_end 1960-03-20 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61826873400, #    utc_start 1960-03-19 19:30:00 (Sat)
  61846828200, #      utc_end 1960-11-05 18:30:00 (Sat)
  61826905800, #  local_start 1960-03-20 04:30:00 (Sun)
  61846860600, #    local_end 1960-11-06 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61846828200, #    utc_start 1960-11-05 18:30:00 (Sat)
  61858323000, #      utc_end 1961-03-18 19:30:00 (Sat)
  61846857000, #  local_start 1960-11-06 02:30:00 (Sun)
  61858351800, #    local_end 1961-03-19 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61858323000, #    utc_start 1961-03-18 19:30:00 (Sat)
  61878277800, #      utc_end 1961-11-04 18:30:00 (Sat)
  61858355400, #  local_start 1961-03-19 04:30:00 (Sun)
  61878310200, #    local_end 1961-11-05 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61878277800, #    utc_start 1961-11-04 18:30:00 (Sat)
  61889772600, #      utc_end 1962-03-17 19:30:00 (Sat)
  61878306600, #  local_start 1961-11-05 02:30:00 (Sun)
  61889801400, #    local_end 1962-03-18 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61889772600, #    utc_start 1962-03-17 19:30:00 (Sat)
  61909727400, #      utc_end 1962-11-03 18:30:00 (Sat)
  61889805000, #  local_start 1962-03-18 04:30:00 (Sun)
  61909759800, #    local_end 1962-11-04 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61909727400, #    utc_start 1962-11-03 18:30:00 (Sat)
  61921827000, #      utc_end 1963-03-23 19:30:00 (Sat)
  61909756200, #  local_start 1962-11-04 02:30:00 (Sun)
  61921855800, #    local_end 1963-03-24 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61921827000, #    utc_start 1963-03-23 19:30:00 (Sat)
  61941177000, #      utc_end 1963-11-02 18:30:00 (Sat)
  61921859400, #  local_start 1963-03-24 04:30:00 (Sun)
  61941209400, #    local_end 1963-11-03 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61941177000, #    utc_start 1963-11-02 18:30:00 (Sat)
  61953276600, #      utc_end 1964-03-21 19:30:00 (Sat)
  61941205800, #  local_start 1963-11-03 02:30:00 (Sun)
  61953305400, #    local_end 1964-03-22 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61953276600, #    utc_start 1964-03-21 19:30:00 (Sat)
  61972626600, #      utc_end 1964-10-31 18:30:00 (Sat)
  61953309000, #  local_start 1964-03-22 04:30:00 (Sun)
  61972659000, #    local_end 1964-11-01 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  61972626600, #    utc_start 1964-10-31 18:30:00 (Sat)
  61987145400, #      utc_end 1965-04-17 19:30:00 (Sat)
  61972655400, #  local_start 1964-11-01 02:30:00 (Sun)
  61987174200, #    local_end 1965-04-18 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  61987145400, #    utc_start 1965-04-17 19:30:00 (Sat)
  62002866600, #      utc_end 1965-10-16 18:30:00 (Sat)
  61987177800, #  local_start 1965-04-18 04:30:00 (Sun)
  62002899000, #    local_end 1965-10-17 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  62002866600, #    utc_start 1965-10-16 18:30:00 (Sat)
  62018595000, #      utc_end 1966-04-16 19:30:00 (Sat)
  62002895400, #  local_start 1965-10-17 02:30:00 (Sun)
  62018623800, #    local_end 1966-04-17 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  62018595000, #    utc_start 1966-04-16 19:30:00 (Sat)
  62034316200, #      utc_end 1966-10-15 18:30:00 (Sat)
  62018627400, #  local_start 1966-04-17 04:30:00 (Sun)
  62034348600, #    local_end 1966-10-16 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  62034316200, #    utc_start 1966-10-15 18:30:00 (Sat)
  62050044600, #      utc_end 1967-04-15 19:30:00 (Sat)
  62034345000, #  local_start 1966-10-16 02:30:00 (Sun)
  62050073400, #    local_end 1967-04-16 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  62050044600, #    utc_start 1967-04-15 19:30:00 (Sat)
  62066370600, #      utc_end 1967-10-21 18:30:00 (Sat)
  62050077000, #  local_start 1967-04-16 04:30:00 (Sun)
  62066403000, #    local_end 1967-10-22 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  62066370600, #    utc_start 1967-10-21 18:30:00 (Sat)
  62082099000, #      utc_end 1968-04-20 19:30:00 (Sat)
  62066399400, #  local_start 1967-10-22 02:30:00 (Sun)
  62082127800, #    local_end 1968-04-21 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  62082099000, #    utc_start 1968-04-20 19:30:00 (Sat)
  62097820200, #      utc_end 1968-10-19 18:30:00 (Sat)
  62082131400, #  local_start 1968-04-21 04:30:00 (Sun)
  62097852600, #    local_end 1968-10-20 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  62097820200, #    utc_start 1968-10-19 18:30:00 (Sat)
  62113548600, #      utc_end 1969-04-19 19:30:00 (Sat)
  62097849000, #  local_start 1968-10-20 02:30:00 (Sun)
  62113577400, #    local_end 1969-04-20 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  62113548600, #    utc_start 1969-04-19 19:30:00 (Sat)
  62129269800, #      utc_end 1969-10-18 18:30:00 (Sat)
  62113581000, #  local_start 1969-04-20 04:30:00 (Sun)
  62129302200, #    local_end 1969-10-19 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  62129269800, #    utc_start 1969-10-18 18:30:00 (Sat)
  62144998200, #      utc_end 1970-04-18 19:30:00 (Sat)
  62129298600, #  local_start 1969-10-19 02:30:00 (Sun)
  62145027000, #    local_end 1970-04-19 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  62144998200, #    utc_start 1970-04-18 19:30:00 (Sat)
  62160719400, #      utc_end 1970-10-17 18:30:00 (Sat)
  62145030600, #  local_start 1970-04-19 04:30:00 (Sun)
  62160751800, #    local_end 1970-10-18 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  62160719400, #    utc_start 1970-10-17 18:30:00 (Sat)
  62176447800, #      utc_end 1971-04-17 19:30:00 (Sat)
  62160748200, #  local_start 1970-10-18 02:30:00 (Sun)
  62176476600, #    local_end 1971-04-18 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  62176447800, #    utc_start 1971-04-17 19:30:00 (Sat)
  62192169000, #      utc_end 1971-10-16 18:30:00 (Sat)
  62176480200, #  local_start 1971-04-18 04:30:00 (Sun)
  62192201400, #    local_end 1971-10-17 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  62192169000, #    utc_start 1971-10-16 18:30:00 (Sat)
  62207897400, #      utc_end 1972-04-15 19:30:00 (Sat)
  62192197800, #  local_start 1971-10-17 02:30:00 (Sun)
  62207926200, #    local_end 1972-04-16 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  62207897400, #    utc_start 1972-04-15 19:30:00 (Sat)
  62224223400, #      utc_end 1972-10-21 18:30:00 (Sat)
  62207929800, #  local_start 1972-04-16 04:30:00 (Sun)
  62224255800, #    local_end 1972-10-22 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  62224223400, #    utc_start 1972-10-21 18:30:00 (Sat)
  62239951800, #      utc_end 1973-04-21 19:30:00 (Sat)
  62224252200, #  local_start 1972-10-22 02:30:00 (Sun)
  62239980600, #    local_end 1973-04-22 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  62239951800, #    utc_start 1973-04-21 19:30:00 (Sat)
  62255673000, #      utc_end 1973-10-20 18:30:00 (Sat)
  62239984200, #  local_start 1973-04-22 04:30:00 (Sun)
  62255705400, #    local_end 1973-10-21 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  62255673000, #    utc_start 1973-10-20 18:30:00 (Sat)
  62261724600, #      utc_end 1973-12-29 19:30:00 (Sat)
  62255701800, #  local_start 1973-10-21 02:30:00 (Sun)
  62261753400, #    local_end 1973-12-30 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  62261724600, #    utc_start 1973-12-29 19:30:00 (Sat)
  62271397800, #      utc_end 1974-04-20 18:30:00 (Sat)
  62261757000, #  local_start 1973-12-30 04:30:00 (Sun)
  62271430200, #    local_end 1974-04-21 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  62271397800, #    utc_start 1974-04-20 18:30:00 (Sat)
  62287122600, #      utc_end 1974-10-19 18:30:00 (Sat)
  62271430200, #  local_start 1974-04-21 03:30:00 (Sun)
  62287155000, #    local_end 1974-10-20 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  62287122600, #    utc_start 1974-10-19 18:30:00 (Sat)
  62302851000, #      utc_end 1975-04-19 19:30:00 (Sat)
  62287151400, #  local_start 1974-10-20 02:30:00 (Sun)
  62302879800, #    local_end 1975-04-20 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  62302851000, #    utc_start 1975-04-19 19:30:00 (Sat)
  62318572200, #      utc_end 1975-10-18 18:30:00 (Sat)
  62302883400, #  local_start 1975-04-20 04:30:00 (Sun)
  62318604600, #    local_end 1975-10-19 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  62318572200, #    utc_start 1975-10-18 18:30:00 (Sat)
  62334300600, #      utc_end 1976-04-17 19:30:00 (Sat)
  62318601000, #  local_start 1975-10-19 02:30:00 (Sun)
  62334329400, #    local_end 1976-04-18 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  62334300600, #    utc_start 1976-04-17 19:30:00 (Sat)
  62350021800, #      utc_end 1976-10-16 18:30:00 (Sat)
  62334333000, #  local_start 1976-04-18 04:30:00 (Sun)
  62350054200, #    local_end 1976-10-17 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  62350021800, #    utc_start 1976-10-16 18:30:00 (Sat)
  62431068600, #      utc_end 1979-05-12 19:30:00 (Sat)
  62350050600, #  local_start 1976-10-17 02:30:00 (Sun)
  62431097400, #    local_end 1979-05-13 03:30:00 (Sun)
  28800,
  0,
  'HKT',
      ],
      [
  62431068600, #    utc_start 1979-05-12 19:30:00 (Sat)
  62444975400, #      utc_end 1979-10-20 18:30:00 (Sat)
  62431101000, #  local_start 1979-05-13 04:30:00 (Sun)
  62445007800, #    local_end 1979-10-21 03:30:00 (Sun)
  32400,
  1,
  'HKST',
      ],
      [
  62444975400, #    utc_start 1979-10-20 18:30:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  62445004200, #  local_start 1979-10-21 02:30:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  28800,
  0,
  'HKT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {34}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_HONG_KONG

    $main::fatpacked{"DateTime/TimeZone/Asia/Hovd.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_HOVD';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Hovd;
  $DateTime::TimeZone::Asia::Hovd::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Hovd::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60102755604, #      utc_end 1905-07-31 17:53:24 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60102777600, #    local_end 1905-08-01 00:00:00 (Tue)
  21996,
  0,
  'LMT',
      ],
      [
  60102755604, #    utc_start 1905-07-31 17:53:24 (Mon)
  62388122400, #      utc_end 1977-12-31 18:00:00 (Sat)
  60102777204, #  local_start 1905-07-31 23:53:24 (Mon)
  62388144000, #    local_end 1978-01-01 00:00:00 (Sun)
  21600,
  0,
  'HOVT',
      ],
      [
  62388122400, #    utc_start 1977-12-31 18:00:00 (Sat)
  62553661200, #      utc_end 1983-03-31 17:00:00 (Thu)
  62388147600, #  local_start 1978-01-01 01:00:00 (Sun)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  25200,
  0,
  'HOVT',
      ],
      [
  62553661200, #    utc_start 1983-03-31 17:00:00 (Thu)
  62569468800, #      utc_end 1983-09-30 16:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  62569468800, #    utc_start 1983-09-30 16:00:00 (Fri)
  62585283600, #      utc_end 1984-03-31 17:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  25200,
  0,
  'HOVT',
      ],
      [
  62585283600, #    utc_start 1984-03-31 17:00:00 (Sat)
  62601004800, #      utc_end 1984-09-29 16:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601033600, #    local_end 1984-09-30 00:00:00 (Sun)
  28800,
  1,
  'HOVST',
      ],
      [
  62601004800, #    utc_start 1984-09-29 16:00:00 (Sat)
  62616733200, #      utc_end 1985-03-30 17:00:00 (Sat)
  62601030000, #  local_start 1984-09-29 23:00:00 (Sat)
  62616758400, #    local_end 1985-03-31 00:00:00 (Sun)
  25200,
  0,
  'HOVT',
      ],
      [
  62616733200, #    utc_start 1985-03-30 17:00:00 (Sat)
  62632454400, #      utc_end 1985-09-28 16:00:00 (Sat)
  62616762000, #  local_start 1985-03-31 01:00:00 (Sun)
  62632483200, #    local_end 1985-09-29 00:00:00 (Sun)
  28800,
  1,
  'HOVST',
      ],
      [
  62632454400, #    utc_start 1985-09-28 16:00:00 (Sat)
  62648182800, #      utc_end 1986-03-29 17:00:00 (Sat)
  62632479600, #  local_start 1985-09-28 23:00:00 (Sat)
  62648208000, #    local_end 1986-03-30 00:00:00 (Sun)
  25200,
  0,
  'HOVT',
      ],
      [
  62648182800, #    utc_start 1986-03-29 17:00:00 (Sat)
  62663904000, #      utc_end 1986-09-27 16:00:00 (Sat)
  62648211600, #  local_start 1986-03-30 01:00:00 (Sun)
  62663932800, #    local_end 1986-09-28 00:00:00 (Sun)
  28800,
  1,
  'HOVST',
      ],
      [
  62663904000, #    utc_start 1986-09-27 16:00:00 (Sat)
  62679632400, #      utc_end 1987-03-28 17:00:00 (Sat)
  62663929200, #  local_start 1986-09-27 23:00:00 (Sat)
  62679657600, #    local_end 1987-03-29 00:00:00 (Sun)
  25200,
  0,
  'HOVT',
      ],
      [
  62679632400, #    utc_start 1987-03-28 17:00:00 (Sat)
  62695353600, #      utc_end 1987-09-26 16:00:00 (Sat)
  62679661200, #  local_start 1987-03-29 01:00:00 (Sun)
  62695382400, #    local_end 1987-09-27 00:00:00 (Sun)
  28800,
  1,
  'HOVST',
      ],
      [
  62695353600, #    utc_start 1987-09-26 16:00:00 (Sat)
  62711082000, #      utc_end 1988-03-26 17:00:00 (Sat)
  62695378800, #  local_start 1987-09-26 23:00:00 (Sat)
  62711107200, #    local_end 1988-03-27 00:00:00 (Sun)
  25200,
  0,
  'HOVT',
      ],
      [
  62711082000, #    utc_start 1988-03-26 17:00:00 (Sat)
  62726803200, #      utc_end 1988-09-24 16:00:00 (Sat)
  62711110800, #  local_start 1988-03-27 01:00:00 (Sun)
  62726832000, #    local_end 1988-09-25 00:00:00 (Sun)
  28800,
  1,
  'HOVST',
      ],
      [
  62726803200, #    utc_start 1988-09-24 16:00:00 (Sat)
  62742531600, #      utc_end 1989-03-25 17:00:00 (Sat)
  62726828400, #  local_start 1988-09-24 23:00:00 (Sat)
  62742556800, #    local_end 1989-03-26 00:00:00 (Sun)
  25200,
  0,
  'HOVT',
      ],
      [
  62742531600, #    utc_start 1989-03-25 17:00:00 (Sat)
  62758252800, #      utc_end 1989-09-23 16:00:00 (Sat)
  62742560400, #  local_start 1989-03-26 01:00:00 (Sun)
  62758281600, #    local_end 1989-09-24 00:00:00 (Sun)
  28800,
  1,
  'HOVST',
      ],
      [
  62758252800, #    utc_start 1989-09-23 16:00:00 (Sat)
  62773981200, #      utc_end 1990-03-24 17:00:00 (Sat)
  62758278000, #  local_start 1989-09-23 23:00:00 (Sat)
  62774006400, #    local_end 1990-03-25 00:00:00 (Sun)
  25200,
  0,
  'HOVT',
      ],
      [
  62773981200, #    utc_start 1990-03-24 17:00:00 (Sat)
  62790307200, #      utc_end 1990-09-29 16:00:00 (Sat)
  62774010000, #  local_start 1990-03-25 01:00:00 (Sun)
  62790336000, #    local_end 1990-09-30 00:00:00 (Sun)
  28800,
  1,
  'HOVST',
      ],
      [
  62790307200, #    utc_start 1990-09-29 16:00:00 (Sat)
  62806035600, #      utc_end 1991-03-30 17:00:00 (Sat)
  62790332400, #  local_start 1990-09-29 23:00:00 (Sat)
  62806060800, #    local_end 1991-03-31 00:00:00 (Sun)
  25200,
  0,
  'HOVT',
      ],
      [
  62806035600, #    utc_start 1991-03-30 17:00:00 (Sat)
  62821756800, #      utc_end 1991-09-28 16:00:00 (Sat)
  62806064400, #  local_start 1991-03-31 01:00:00 (Sun)
  62821785600, #    local_end 1991-09-29 00:00:00 (Sun)
  28800,
  1,
  'HOVST',
      ],
      [
  62821756800, #    utc_start 1991-09-28 16:00:00 (Sat)
  62837485200, #      utc_end 1992-03-28 17:00:00 (Sat)
  62821782000, #  local_start 1991-09-28 23:00:00 (Sat)
  62837510400, #    local_end 1992-03-29 00:00:00 (Sun)
  25200,
  0,
  'HOVT',
      ],
      [
  62837485200, #    utc_start 1992-03-28 17:00:00 (Sat)
  62853206400, #      utc_end 1992-09-26 16:00:00 (Sat)
  62837514000, #  local_start 1992-03-29 01:00:00 (Sun)
  62853235200, #    local_end 1992-09-27 00:00:00 (Sun)
  28800,
  1,
  'HOVST',
      ],
      [
  62853206400, #    utc_start 1992-09-26 16:00:00 (Sat)
  62868934800, #      utc_end 1993-03-27 17:00:00 (Sat)
  62853231600, #  local_start 1992-09-26 23:00:00 (Sat)
  62868960000, #    local_end 1993-03-28 00:00:00 (Sun)
  25200,
  0,
  'HOVT',
      ],
      [
  62868934800, #    utc_start 1993-03-27 17:00:00 (Sat)
  62884656000, #      utc_end 1993-09-25 16:00:00 (Sat)
  62868963600, #  local_start 1993-03-28 01:00:00 (Sun)
  62884684800, #    local_end 1993-09-26 00:00:00 (Sun)
  28800,
  1,
  'HOVST',
      ],
      [
  62884656000, #    utc_start 1993-09-25 16:00:00 (Sat)
  62900384400, #      utc_end 1994-03-26 17:00:00 (Sat)
  62884681200, #  local_start 1993-09-25 23:00:00 (Sat)
  62900409600, #    local_end 1994-03-27 00:00:00 (Sun)
  25200,
  0,
  'HOVT',
      ],
      [
  62900384400, #    utc_start 1994-03-26 17:00:00 (Sat)
  62916105600, #      utc_end 1994-09-24 16:00:00 (Sat)
  62900413200, #  local_start 1994-03-27 01:00:00 (Sun)
  62916134400, #    local_end 1994-09-25 00:00:00 (Sun)
  28800,
  1,
  'HOVST',
      ],
      [
  62916105600, #    utc_start 1994-09-24 16:00:00 (Sat)
  62931834000, #      utc_end 1995-03-25 17:00:00 (Sat)
  62916130800, #  local_start 1994-09-24 23:00:00 (Sat)
  62931859200, #    local_end 1995-03-26 00:00:00 (Sun)
  25200,
  0,
  'HOVT',
      ],
      [
  62931834000, #    utc_start 1995-03-25 17:00:00 (Sat)
  62947555200, #      utc_end 1995-09-23 16:00:00 (Sat)
  62931862800, #  local_start 1995-03-26 01:00:00 (Sun)
  62947584000, #    local_end 1995-09-24 00:00:00 (Sun)
  28800,
  1,
  'HOVST',
      ],
      [
  62947555200, #    utc_start 1995-09-23 16:00:00 (Sat)
  62963888400, #      utc_end 1996-03-30 17:00:00 (Sat)
  62947580400, #  local_start 1995-09-23 23:00:00 (Sat)
  62963913600, #    local_end 1996-03-31 00:00:00 (Sun)
  25200,
  0,
  'HOVT',
      ],
      [
  62963888400, #    utc_start 1996-03-30 17:00:00 (Sat)
  62979609600, #      utc_end 1996-09-28 16:00:00 (Sat)
  62963917200, #  local_start 1996-03-31 01:00:00 (Sun)
  62979638400, #    local_end 1996-09-29 00:00:00 (Sun)
  28800,
  1,
  'HOVST',
      ],
      [
  62979609600, #    utc_start 1996-09-28 16:00:00 (Sat)
  62995338000, #      utc_end 1997-03-29 17:00:00 (Sat)
  62979634800, #  local_start 1996-09-28 23:00:00 (Sat)
  62995363200, #    local_end 1997-03-30 00:00:00 (Sun)
  25200,
  0,
  'HOVT',
      ],
      [
  62995338000, #    utc_start 1997-03-29 17:00:00 (Sat)
  63011059200, #      utc_end 1997-09-27 16:00:00 (Sat)
  62995366800, #  local_start 1997-03-30 01:00:00 (Sun)
  63011088000, #    local_end 1997-09-28 00:00:00 (Sun)
  28800,
  1,
  'HOVST',
      ],
      [
  63011059200, #    utc_start 1997-09-27 16:00:00 (Sat)
  63026787600, #      utc_end 1998-03-28 17:00:00 (Sat)
  63011084400, #  local_start 1997-09-27 23:00:00 (Sat)
  63026812800, #    local_end 1998-03-29 00:00:00 (Sun)
  25200,
  0,
  'HOVT',
      ],
      [
  63026787600, #    utc_start 1998-03-28 17:00:00 (Sat)
  63042508800, #      utc_end 1998-09-26 16:00:00 (Sat)
  63026816400, #  local_start 1998-03-29 01:00:00 (Sun)
  63042537600, #    local_end 1998-09-27 00:00:00 (Sun)
  28800,
  1,
  'HOVST',
      ],
      [
  63042508800, #    utc_start 1998-09-26 16:00:00 (Sat)
  63124081200, #      utc_end 2001-04-27 19:00:00 (Fri)
  63042534000, #  local_start 1998-09-26 23:00:00 (Sat)
  63124106400, #    local_end 2001-04-28 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63124081200, #    utc_start 2001-04-27 19:00:00 (Fri)
  63137383200, #      utc_end 2001-09-28 18:00:00 (Fri)
  63124110000, #  local_start 2001-04-28 03:00:00 (Sat)
  63137412000, #    local_end 2001-09-29 02:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63137383200, #    utc_start 2001-09-28 18:00:00 (Fri)
  63153111600, #      utc_end 2002-03-29 19:00:00 (Fri)
  63137408400, #  local_start 2001-09-29 01:00:00 (Sat)
  63153136800, #    local_end 2002-03-30 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63153111600, #    utc_start 2002-03-29 19:00:00 (Fri)
  63168832800, #      utc_end 2002-09-27 18:00:00 (Fri)
  63153140400, #  local_start 2002-03-30 03:00:00 (Sat)
  63168861600, #    local_end 2002-09-28 02:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63168832800, #    utc_start 2002-09-27 18:00:00 (Fri)
  63184561200, #      utc_end 2003-03-28 19:00:00 (Fri)
  63168858000, #  local_start 2002-09-28 01:00:00 (Sat)
  63184586400, #    local_end 2003-03-29 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63184561200, #    utc_start 2003-03-28 19:00:00 (Fri)
  63200282400, #      utc_end 2003-09-26 18:00:00 (Fri)
  63184590000, #  local_start 2003-03-29 03:00:00 (Sat)
  63200311200, #    local_end 2003-09-27 02:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63200282400, #    utc_start 2003-09-26 18:00:00 (Fri)
  63216010800, #      utc_end 2004-03-26 19:00:00 (Fri)
  63200307600, #  local_start 2003-09-27 01:00:00 (Sat)
  63216036000, #    local_end 2004-03-27 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63216010800, #    utc_start 2004-03-26 19:00:00 (Fri)
  63231732000, #      utc_end 2004-09-24 18:00:00 (Fri)
  63216039600, #  local_start 2004-03-27 03:00:00 (Sat)
  63231760800, #    local_end 2004-09-25 02:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63231732000, #    utc_start 2004-09-24 18:00:00 (Fri)
  63247460400, #      utc_end 2005-03-25 19:00:00 (Fri)
  63231757200, #  local_start 2004-09-25 01:00:00 (Sat)
  63247485600, #    local_end 2005-03-26 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63247460400, #    utc_start 2005-03-25 19:00:00 (Fri)
  63263181600, #      utc_end 2005-09-23 18:00:00 (Fri)
  63247489200, #  local_start 2005-03-26 03:00:00 (Sat)
  63263210400, #    local_end 2005-09-24 02:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63263181600, #    utc_start 2005-09-23 18:00:00 (Fri)
  63278910000, #      utc_end 2006-03-24 19:00:00 (Fri)
  63263206800, #  local_start 2005-09-24 01:00:00 (Sat)
  63278935200, #    local_end 2006-03-25 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63278910000, #    utc_start 2006-03-24 19:00:00 (Fri)
  63295236000, #      utc_end 2006-09-29 18:00:00 (Fri)
  63278938800, #  local_start 2006-03-25 03:00:00 (Sat)
  63295264800, #    local_end 2006-09-30 02:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63295236000, #    utc_start 2006-09-29 18:00:00 (Fri)
  63563166000, #      utc_end 2015-03-27 19:00:00 (Fri)
  63295261200, #  local_start 2006-09-30 01:00:00 (Sat)
  63563191200, #    local_end 2015-03-28 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63563166000, #    utc_start 2015-03-27 19:00:00 (Fri)
  63578880000, #      utc_end 2015-09-25 16:00:00 (Fri)
  63563194800, #  local_start 2015-03-28 03:00:00 (Sat)
  63578908800, #    local_end 2015-09-26 00:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63578880000, #    utc_start 2015-09-25 16:00:00 (Fri)
  63594615600, #      utc_end 2016-03-25 19:00:00 (Fri)
  63578905200, #  local_start 2015-09-25 23:00:00 (Fri)
  63594640800, #    local_end 2016-03-26 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63594615600, #    utc_start 2016-03-25 19:00:00 (Fri)
  63610329600, #      utc_end 2016-09-23 16:00:00 (Fri)
  63594644400, #  local_start 2016-03-26 03:00:00 (Sat)
  63610358400, #    local_end 2016-09-24 00:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63610329600, #    utc_start 2016-09-23 16:00:00 (Fri)
  63626065200, #      utc_end 2017-03-24 19:00:00 (Fri)
  63610354800, #  local_start 2016-09-23 23:00:00 (Fri)
  63626090400, #    local_end 2017-03-25 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63626065200, #    utc_start 2017-03-24 19:00:00 (Fri)
  63642384000, #      utc_end 2017-09-29 16:00:00 (Fri)
  63626094000, #  local_start 2017-03-25 03:00:00 (Sat)
  63642412800, #    local_end 2017-09-30 00:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63642384000, #    utc_start 2017-09-29 16:00:00 (Fri)
  63658119600, #      utc_end 2018-03-30 19:00:00 (Fri)
  63642409200, #  local_start 2017-09-29 23:00:00 (Fri)
  63658144800, #    local_end 2018-03-31 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63658119600, #    utc_start 2018-03-30 19:00:00 (Fri)
  63673833600, #      utc_end 2018-09-28 16:00:00 (Fri)
  63658148400, #  local_start 2018-03-31 03:00:00 (Sat)
  63673862400, #    local_end 2018-09-29 00:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63673833600, #    utc_start 2018-09-28 16:00:00 (Fri)
  63689569200, #      utc_end 2019-03-29 19:00:00 (Fri)
  63673858800, #  local_start 2018-09-28 23:00:00 (Fri)
  63689594400, #    local_end 2019-03-30 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63689569200, #    utc_start 2019-03-29 19:00:00 (Fri)
  63705283200, #      utc_end 2019-09-27 16:00:00 (Fri)
  63689598000, #  local_start 2019-03-30 03:00:00 (Sat)
  63705312000, #    local_end 2019-09-28 00:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63705283200, #    utc_start 2019-09-27 16:00:00 (Fri)
  63721018800, #      utc_end 2020-03-27 19:00:00 (Fri)
  63705308400, #  local_start 2019-09-27 23:00:00 (Fri)
  63721044000, #    local_end 2020-03-28 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63721018800, #    utc_start 2020-03-27 19:00:00 (Fri)
  63736732800, #      utc_end 2020-09-25 16:00:00 (Fri)
  63721047600, #  local_start 2020-03-28 03:00:00 (Sat)
  63736761600, #    local_end 2020-09-26 00:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63736732800, #    utc_start 2020-09-25 16:00:00 (Fri)
  63752468400, #      utc_end 2021-03-26 19:00:00 (Fri)
  63736758000, #  local_start 2020-09-25 23:00:00 (Fri)
  63752493600, #    local_end 2021-03-27 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63752468400, #    utc_start 2021-03-26 19:00:00 (Fri)
  63768182400, #      utc_end 2021-09-24 16:00:00 (Fri)
  63752497200, #  local_start 2021-03-27 03:00:00 (Sat)
  63768211200, #    local_end 2021-09-25 00:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63768182400, #    utc_start 2021-09-24 16:00:00 (Fri)
  63783918000, #      utc_end 2022-03-25 19:00:00 (Fri)
  63768207600, #  local_start 2021-09-24 23:00:00 (Fri)
  63783943200, #    local_end 2022-03-26 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63783918000, #    utc_start 2022-03-25 19:00:00 (Fri)
  63799632000, #      utc_end 2022-09-23 16:00:00 (Fri)
  63783946800, #  local_start 2022-03-26 03:00:00 (Sat)
  63799660800, #    local_end 2022-09-24 00:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63799632000, #    utc_start 2022-09-23 16:00:00 (Fri)
  63815367600, #      utc_end 2023-03-24 19:00:00 (Fri)
  63799657200, #  local_start 2022-09-23 23:00:00 (Fri)
  63815392800, #    local_end 2023-03-25 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63815367600, #    utc_start 2023-03-24 19:00:00 (Fri)
  63831686400, #      utc_end 2023-09-29 16:00:00 (Fri)
  63815396400, #  local_start 2023-03-25 03:00:00 (Sat)
  63831715200, #    local_end 2023-09-30 00:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63831686400, #    utc_start 2023-09-29 16:00:00 (Fri)
  63847422000, #      utc_end 2024-03-29 19:00:00 (Fri)
  63831711600, #  local_start 2023-09-29 23:00:00 (Fri)
  63847447200, #    local_end 2024-03-30 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63847422000, #    utc_start 2024-03-29 19:00:00 (Fri)
  63863136000, #      utc_end 2024-09-27 16:00:00 (Fri)
  63847450800, #  local_start 2024-03-30 03:00:00 (Sat)
  63863164800, #    local_end 2024-09-28 00:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63863136000, #    utc_start 2024-09-27 16:00:00 (Fri)
  63878871600, #      utc_end 2025-03-28 19:00:00 (Fri)
  63863161200, #  local_start 2024-09-27 23:00:00 (Fri)
  63878896800, #    local_end 2025-03-29 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63878871600, #    utc_start 2025-03-28 19:00:00 (Fri)
  63894585600, #      utc_end 2025-09-26 16:00:00 (Fri)
  63878900400, #  local_start 2025-03-29 03:00:00 (Sat)
  63894614400, #    local_end 2025-09-27 00:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63894585600, #    utc_start 2025-09-26 16:00:00 (Fri)
  63910321200, #      utc_end 2026-03-27 19:00:00 (Fri)
  63894610800, #  local_start 2025-09-26 23:00:00 (Fri)
  63910346400, #    local_end 2026-03-28 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63910321200, #    utc_start 2026-03-27 19:00:00 (Fri)
  63926035200, #      utc_end 2026-09-25 16:00:00 (Fri)
  63910350000, #  local_start 2026-03-28 03:00:00 (Sat)
  63926064000, #    local_end 2026-09-26 00:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
      [
  63926035200, #    utc_start 2026-09-25 16:00:00 (Fri)
  63941770800, #      utc_end 2027-03-26 19:00:00 (Fri)
  63926060400, #  local_start 2026-09-25 23:00:00 (Fri)
  63941796000, #    local_end 2027-03-27 02:00:00 (Sat)
  25200,
  0,
  'HOVT',
      ],
      [
  63941770800, #    utc_start 2027-03-26 19:00:00 (Fri)
  63957484800, #      utc_end 2027-09-24 16:00:00 (Fri)
  63941799600, #  local_start 2027-03-27 03:00:00 (Sat)
  63957513600, #    local_end 2027-09-25 00:00:00 (Sat)
  28800,
  1,
  'HOVST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {35}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 25200 }
  
  my $last_observance = bless( {
    'format' => 'HOV%sT',
    'gmtoff' => '7:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722085,
      'local_rd_secs' => 3600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722085,
      'utc_rd_secs' => 3600,
      'utc_year' => 1979
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 25200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722084,
      'local_rd_secs' => 64800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722084,
      'utc_rd_secs' => 64800,
      'utc_year' => 1978
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2015',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'Mongol',
      'offset_from_std' => 3600,
      'on' => 'lastSat',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '0:00',
      'from' => '2015',
      'in' => 'Sep',
      'letter' => '',
      'name' => 'Mongol',
      'offset_from_std' => 0,
      'on' => 'lastSat',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_HOVD

    $main::fatpacked{"DateTime/TimeZone/Asia/Irkutsk.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_IRKUTSK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Irkutsk;
  $DateTime::TimeZone::Asia::Irkutsk::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Irkutsk::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295517375, #      utc_end 1879-12-31 17:02:55 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  25025,
  0,
  'LMT',
      ],
      [
  59295517375, #    utc_start 1879-12-31 17:02:55 (Wed)
  60559808575, #      utc_end 1920-01-24 17:02:55 (Sat)
  59295542400, #  local_start 1880-01-01 00:00:00 (Thu)
  60559833600, #    local_end 1920-01-25 00:00:00 (Sun)
  25025,
  0,
  'IMT',
      ],
      [
  60559808575, #    utc_start 1920-01-24 17:02:55 (Sat)
  60888128400, #      utc_end 1930-06-20 17:00:00 (Fri)
  60559833775, #  local_start 1920-01-25 00:02:55 (Sun)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  25200,
  0,
  'IRKT',
      ],
      [
  60888128400, #    utc_start 1930-06-20 17:00:00 (Fri)
  62490585600, #      utc_end 1981-03-31 16:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  28800,
  0,
  'IRKT',
      ],
      [
  62490585600, #    utc_start 1981-03-31 16:00:00 (Tue)
  62506393200, #      utc_end 1981-09-30 15:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  32400,
  1,
  'IRKST',
      ],
      [
  62506393200, #    utc_start 1981-09-30 15:00:00 (Wed)
  62522121600, #      utc_end 1982-03-31 16:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  28800,
  0,
  'IRKT',
      ],
      [
  62522121600, #    utc_start 1982-03-31 16:00:00 (Wed)
  62537929200, #      utc_end 1982-09-30 15:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  32400,
  1,
  'IRKST',
      ],
      [
  62537929200, #    utc_start 1982-09-30 15:00:00 (Thu)
  62553657600, #      utc_end 1983-03-31 16:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  28800,
  0,
  'IRKT',
      ],
      [
  62553657600, #    utc_start 1983-03-31 16:00:00 (Thu)
  62569465200, #      utc_end 1983-09-30 15:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  32400,
  1,
  'IRKST',
      ],
      [
  62569465200, #    utc_start 1983-09-30 15:00:00 (Fri)
  62585280000, #      utc_end 1984-03-31 16:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  62585280000, #    utc_start 1984-03-31 16:00:00 (Sat)
  62601012000, #      utc_end 1984-09-29 18:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  62601012000, #    utc_start 1984-09-29 18:00:00 (Sat)
  62616736800, #      utc_end 1985-03-30 18:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  62616736800, #    utc_start 1985-03-30 18:00:00 (Sat)
  62632461600, #      utc_end 1985-09-28 18:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  62632461600, #    utc_start 1985-09-28 18:00:00 (Sat)
  62648186400, #      utc_end 1986-03-29 18:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  62648186400, #    utc_start 1986-03-29 18:00:00 (Sat)
  62663911200, #      utc_end 1986-09-27 18:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  62663911200, #    utc_start 1986-09-27 18:00:00 (Sat)
  62679636000, #      utc_end 1987-03-28 18:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  62679636000, #    utc_start 1987-03-28 18:00:00 (Sat)
  62695360800, #      utc_end 1987-09-26 18:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  62695360800, #    utc_start 1987-09-26 18:00:00 (Sat)
  62711085600, #      utc_end 1988-03-26 18:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  62711085600, #    utc_start 1988-03-26 18:00:00 (Sat)
  62726810400, #      utc_end 1988-09-24 18:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  62726810400, #    utc_start 1988-09-24 18:00:00 (Sat)
  62742535200, #      utc_end 1989-03-25 18:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  62742535200, #    utc_start 1989-03-25 18:00:00 (Sat)
  62758260000, #      utc_end 1989-09-23 18:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  62758260000, #    utc_start 1989-09-23 18:00:00 (Sat)
  62773984800, #      utc_end 1990-03-24 18:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  62773984800, #    utc_start 1990-03-24 18:00:00 (Sat)
  62790314400, #      utc_end 1990-09-29 18:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  62790314400, #    utc_start 1990-09-29 18:00:00 (Sat)
  62806039200, #      utc_end 1991-03-30 18:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  62806039200, #    utc_start 1991-03-30 18:00:00 (Sat)
  62821767600, #      utc_end 1991-09-28 19:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  28800,
  1,
  'IRKST',
      ],
      [
  62821767600, #    utc_start 1991-09-28 19:00:00 (Sat)
  62831444400, #      utc_end 1992-01-18 19:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  25200,
  0,
  'IRKT',
      ],
      [
  62831444400, #    utc_start 1992-01-18 19:00:00 (Sat)
  62837488800, #      utc_end 1992-03-28 18:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  62837488800, #    utc_start 1992-03-28 18:00:00 (Sat)
  62853213600, #      utc_end 1992-09-26 18:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  62853213600, #    utc_start 1992-09-26 18:00:00 (Sat)
  62868938400, #      utc_end 1993-03-27 18:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  62868938400, #    utc_start 1993-03-27 18:00:00 (Sat)
  62884663200, #      utc_end 1993-09-25 18:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  62884663200, #    utc_start 1993-09-25 18:00:00 (Sat)
  62900388000, #      utc_end 1994-03-26 18:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  62900388000, #    utc_start 1994-03-26 18:00:00 (Sat)
  62916112800, #      utc_end 1994-09-24 18:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  62916112800, #    utc_start 1994-09-24 18:00:00 (Sat)
  62931837600, #      utc_end 1995-03-25 18:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  62931837600, #    utc_start 1995-03-25 18:00:00 (Sat)
  62947562400, #      utc_end 1995-09-23 18:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  62947562400, #    utc_start 1995-09-23 18:00:00 (Sat)
  62963892000, #      utc_end 1996-03-30 18:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  62963892000, #    utc_start 1996-03-30 18:00:00 (Sat)
  62982036000, #      utc_end 1996-10-26 18:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  62982036000, #    utc_start 1996-10-26 18:00:00 (Sat)
  62995341600, #      utc_end 1997-03-29 18:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  62995341600, #    utc_start 1997-03-29 18:00:00 (Sat)
  63013485600, #      utc_end 1997-10-25 18:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  63013485600, #    utc_start 1997-10-25 18:00:00 (Sat)
  63026791200, #      utc_end 1998-03-28 18:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  63026791200, #    utc_start 1998-03-28 18:00:00 (Sat)
  63044935200, #      utc_end 1998-10-24 18:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  63044935200, #    utc_start 1998-10-24 18:00:00 (Sat)
  63058240800, #      utc_end 1999-03-27 18:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  63058240800, #    utc_start 1999-03-27 18:00:00 (Sat)
  63076989600, #      utc_end 1999-10-30 18:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  63076989600, #    utc_start 1999-10-30 18:00:00 (Sat)
  63089690400, #      utc_end 2000-03-25 18:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  63089690400, #    utc_start 2000-03-25 18:00:00 (Sat)
  63108439200, #      utc_end 2000-10-28 18:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  63108439200, #    utc_start 2000-10-28 18:00:00 (Sat)
  63121140000, #      utc_end 2001-03-24 18:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  63121140000, #    utc_start 2001-03-24 18:00:00 (Sat)
  63139888800, #      utc_end 2001-10-27 18:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  63139888800, #    utc_start 2001-10-27 18:00:00 (Sat)
  63153194400, #      utc_end 2002-03-30 18:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  63153194400, #    utc_start 2002-03-30 18:00:00 (Sat)
  63171338400, #      utc_end 2002-10-26 18:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  63171338400, #    utc_start 2002-10-26 18:00:00 (Sat)
  63184644000, #      utc_end 2003-03-29 18:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  63184644000, #    utc_start 2003-03-29 18:00:00 (Sat)
  63202788000, #      utc_end 2003-10-25 18:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  63202788000, #    utc_start 2003-10-25 18:00:00 (Sat)
  63216093600, #      utc_end 2004-03-27 18:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  63216093600, #    utc_start 2004-03-27 18:00:00 (Sat)
  63234842400, #      utc_end 2004-10-30 18:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  63234842400, #    utc_start 2004-10-30 18:00:00 (Sat)
  63247543200, #      utc_end 2005-03-26 18:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  63247543200, #    utc_start 2005-03-26 18:00:00 (Sat)
  63266292000, #      utc_end 2005-10-29 18:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  63266292000, #    utc_start 2005-10-29 18:00:00 (Sat)
  63278992800, #      utc_end 2006-03-25 18:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  63278992800, #    utc_start 2006-03-25 18:00:00 (Sat)
  63297741600, #      utc_end 2006-10-28 18:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  63297741600, #    utc_start 2006-10-28 18:00:00 (Sat)
  63310442400, #      utc_end 2007-03-24 18:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  63310442400, #    utc_start 2007-03-24 18:00:00 (Sat)
  63329191200, #      utc_end 2007-10-27 18:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  63329191200, #    utc_start 2007-10-27 18:00:00 (Sat)
  63342496800, #      utc_end 2008-03-29 18:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  63342496800, #    utc_start 2008-03-29 18:00:00 (Sat)
  63360640800, #      utc_end 2008-10-25 18:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  63360640800, #    utc_start 2008-10-25 18:00:00 (Sat)
  63373946400, #      utc_end 2009-03-28 18:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  63373946400, #    utc_start 2009-03-28 18:00:00 (Sat)
  63392090400, #      utc_end 2009-10-24 18:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  63392090400, #    utc_start 2009-10-24 18:00:00 (Sat)
  63405396000, #      utc_end 2010-03-27 18:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  63405396000, #    utc_start 2010-03-27 18:00:00 (Sat)
  63424144800, #      utc_end 2010-10-30 18:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  32400,
  1,
  'IRKST',
      ],
      [
  63424144800, #    utc_start 2010-10-30 18:00:00 (Sat)
  63436845600, #      utc_end 2011-03-26 18:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  28800,
  0,
  'IRKT',
      ],
      [
  63436845600, #    utc_start 2011-03-26 18:00:00 (Sat)
  63549939600, #      utc_end 2014-10-25 17:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  32400,
  0,
  'IRKT',
      ],
      [
  63549939600, #    utc_start 2014-10-25 17:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  28800,
  0,
  'IRKT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_IRKUTSK

    $main::fatpacked{"DateTime/TimeZone/Asia/Jakarta.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_JAKARTA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Jakarta;
  $DateTime::TimeZone::Asia::Jakarta::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Jakarta::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  58904383968, #      utc_end 1867-08-09 16:52:48 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  58904409600, #    local_end 1867-08-10 00:00:00 (Sat)
  25632,
  0,
  'LMT',
      ],
      [
  58904383968, #    utc_start 1867-08-09 16:52:48 (Fri)
  60683964000, #      utc_end 1923-12-31 16:40:00 (Mon)
  58904409600, #  local_start 1867-08-10 00:00:00 (Sat)
  60683989632, #    local_end 1923-12-31 23:47:12 (Mon)
  25632,
  0,
  'BMT',
      ],
      [
  60683964000, #    utc_start 1923-12-31 16:40:00 (Mon)
  60962776800, #      utc_end 1932-10-31 16:40:00 (Mon)
  60683990400, #  local_start 1924-01-01 00:00:00 (Tue)
  60962803200, #    local_end 1932-11-01 00:00:00 (Tue)
  26400,
  0,
  'JAVT',
      ],
      [
  60962776800, #    utc_start 1932-10-31 16:40:00 (Mon)
  61259041800, #      utc_end 1942-03-22 16:30:00 (Sun)
  60962803800, #  local_start 1932-11-01 00:10:00 (Tue)
  61259068800, #    local_end 1942-03-23 00:00:00 (Mon)
  27000,
  0,
  'WIB',
      ],
      [
  61259041800, #    utc_start 1942-03-22 16:30:00 (Sun)
  61369628400, #      utc_end 1945-09-22 15:00:00 (Sat)
  61259074200, #  local_start 1942-03-23 01:30:00 (Mon)
  61369660800, #    local_end 1945-09-23 00:00:00 (Sun)
  32400,
  0,
  'JST',
      ],
      [
  61369628400, #    utc_start 1945-09-22 15:00:00 (Sat)
  61451800200, #      utc_end 1948-04-30 16:30:00 (Fri)
  61369655400, #  local_start 1945-09-22 22:30:00 (Sat)
  61451827200, #    local_end 1948-05-01 00:00:00 (Sat)
  27000,
  0,
  'WIB',
      ],
      [
  61451800200, #    utc_start 1948-04-30 16:30:00 (Fri)
  61514870400, #      utc_end 1950-04-30 16:00:00 (Sun)
  61451829000, #  local_start 1948-05-01 00:30:00 (Sat)
  61514899200, #    local_end 1950-05-01 00:00:00 (Mon)
  28800,
  0,
  'WIB',
      ],
      [
  61514870400, #    utc_start 1950-04-30 16:00:00 (Sun)
  61946267400, #      utc_end 1963-12-31 16:30:00 (Tue)
  61514897400, #  local_start 1950-04-30 23:30:00 (Sun)
  61946294400, #    local_end 1964-01-01 00:00:00 (Wed)
  27000,
  0,
  'WIB',
      ],
      [
  61946267400, #    utc_start 1963-12-31 16:30:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  61946292600, #  local_start 1963-12-31 23:30:00 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  25200,
  0,
  'WIB',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_JAKARTA

    $main::fatpacked{"DateTime/TimeZone/Asia/Jayapura.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_JAYAPURA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Jayapura;
  $DateTime::TimeZone::Asia::Jayapura::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Jayapura::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60962769432, #      utc_end 1932-10-31 14:37:12 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60962803200, #    local_end 1932-11-01 00:00:00 (Tue)
  33768,
  0,
  'LMT',
      ],
      [
  60962769432, #    utc_start 1932-10-31 14:37:12 (Mon)
  61336191600, #      utc_end 1944-08-31 15:00:00 (Thu)
  60962801832, #  local_start 1932-10-31 23:37:12 (Mon)
  61336224000, #    local_end 1944-09-01 00:00:00 (Fri)
  32400,
  0,
  'WIT',
      ],
      [
  61336191600, #    utc_start 1944-08-31 15:00:00 (Thu)
  61946260200, #      utc_end 1963-12-31 14:30:00 (Tue)
  61336225800, #  local_start 1944-09-01 00:30:00 (Fri)
  61946294400, #    local_end 1964-01-01 00:00:00 (Wed)
  34200,
  0,
  'ACST',
      ],
      [
  61946260200, #    utc_start 1963-12-31 14:30:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  61946292600, #  local_start 1963-12-31 23:30:00 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  32400,
  0,
  'WIT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_JAYAPURA

    $main::fatpacked{"DateTime/TimeZone/Asia/Jerusalem.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_JERUSALEM';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Jerusalem;
  $DateTime::TimeZone::Asia::Jerusalem::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Jerusalem::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295533946, #      utc_end 1879-12-31 21:39:06 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  8454,
  0,
  'LMT',
      ],
      [
  59295533946, #    utc_start 1879-12-31 21:39:06 (Wed)
  60494679560, #      utc_end 1917-12-31 21:39:20 (Mon)
  59295542386, #  local_start 1879-12-31 23:59:46 (Wed)
  60494688000, #    local_end 1918-01-01 00:00:00 (Tue)
  8440,
  0,
  'JMT',
      ],
      [
  60494679560, #    utc_start 1917-12-31 21:39:20 (Mon)
  61202037600, #      utc_end 1940-05-31 22:00:00 (Fri)
  60494686760, #  local_start 1917-12-31 23:39:20 (Mon)
  61202044800, #    local_end 1940-06-01 00:00:00 (Sat)
  7200,
  0,
  'IST',
      ],
      [
  61202037600, #    utc_start 1940-05-31 22:00:00 (Fri)
  61278325200, #      utc_end 1942-10-31 21:00:00 (Sat)
  61202048400, #  local_start 1940-06-01 01:00:00 (Sat)
  61278336000, #    local_end 1942-11-01 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  61278325200, #    utc_start 1942-10-31 21:00:00 (Sat)
  61291382400, #      utc_end 1943-04-01 00:00:00 (Thu)
  61278332400, #  local_start 1942-10-31 23:00:00 (Sat)
  61291389600, #    local_end 1943-04-01 02:00:00 (Thu)
  7200,
  0,
  'IST',
      ],
      [
  61291382400, #    utc_start 1943-04-01 00:00:00 (Thu)
  61309861200, #      utc_end 1943-10-31 21:00:00 (Sun)
  61291393200, #  local_start 1943-04-01 03:00:00 (Thu)
  61309872000, #    local_end 1943-11-01 00:00:00 (Mon)
  10800,
  1,
  'IDT',
      ],
      [
  61309861200, #    utc_start 1943-10-31 21:00:00 (Sun)
  61322997600, #      utc_end 1944-03-31 22:00:00 (Fri)
  61309868400, #  local_start 1943-10-31 23:00:00 (Sun)
  61323004800, #    local_end 1944-04-01 00:00:00 (Sat)
  7200,
  0,
  'IST',
      ],
      [
  61322997600, #    utc_start 1944-03-31 22:00:00 (Fri)
  61341483600, #      utc_end 1944-10-31 21:00:00 (Tue)
  61323008400, #  local_start 1944-04-01 01:00:00 (Sat)
  61341494400, #    local_end 1944-11-01 00:00:00 (Wed)
  10800,
  1,
  'IDT',
      ],
      [
  61341483600, #    utc_start 1944-10-31 21:00:00 (Tue)
  61355829600, #      utc_end 1945-04-15 22:00:00 (Sun)
  61341490800, #  local_start 1944-10-31 23:00:00 (Tue)
  61355836800, #    local_end 1945-04-16 00:00:00 (Mon)
  7200,
  0,
  'IST',
      ],
      [
  61355829600, #    utc_start 1945-04-15 22:00:00 (Sun)
  61373026800, #      utc_end 1945-10-31 23:00:00 (Wed)
  61355840400, #  local_start 1945-04-16 01:00:00 (Mon)
  61373037600, #    local_end 1945-11-01 02:00:00 (Thu)
  10800,
  1,
  'IDT',
      ],
      [
  61373026800, #    utc_start 1945-10-31 23:00:00 (Wed)
  61387372800, #      utc_end 1946-04-16 00:00:00 (Tue)
  61373034000, #  local_start 1945-11-01 01:00:00 (Thu)
  61387380000, #    local_end 1946-04-16 02:00:00 (Tue)
  7200,
  0,
  'IST',
      ],
      [
  61387372800, #    utc_start 1946-04-16 00:00:00 (Tue)
  61404555600, #      utc_end 1946-10-31 21:00:00 (Thu)
  61387383600, #  local_start 1946-04-16 03:00:00 (Tue)
  61404566400, #    local_end 1946-11-01 00:00:00 (Fri)
  10800,
  1,
  'IDT',
      ],
      [
  61404555600, #    utc_start 1946-10-31 21:00:00 (Thu)
  61453720800, #      utc_end 1948-05-22 22:00:00 (Sat)
  61404562800, #  local_start 1946-10-31 23:00:00 (Thu)
  61453728000, #    local_end 1948-05-23 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  61453720800, #    utc_start 1948-05-22 22:00:00 (Sat)
  61462440000, #      utc_end 1948-08-31 20:00:00 (Tue)
  61453735200, #  local_start 1948-05-23 02:00:00 (Sun)
  61462454400, #    local_end 1948-09-01 00:00:00 (Wed)
  14400,
  1,
  'IDDT',
      ],
      [
  61462440000, #    utc_start 1948-08-31 20:00:00 (Tue)
  61467721200, #      utc_end 1948-10-31 23:00:00 (Sun)
  61462450800, #  local_start 1948-08-31 23:00:00 (Tue)
  61467732000, #    local_end 1948-11-01 02:00:00 (Mon)
  10800,
  1,
  'IDT',
      ],
      [
  61467721200, #    utc_start 1948-10-31 23:00:00 (Sun)
  61483356000, #      utc_end 1949-04-30 22:00:00 (Sat)
  61467728400, #  local_start 1948-11-01 01:00:00 (Mon)
  61483363200, #    local_end 1949-05-01 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  61483356000, #    utc_start 1949-04-30 22:00:00 (Sat)
  61499257200, #      utc_end 1949-10-31 23:00:00 (Mon)
  61483366800, #  local_start 1949-05-01 01:00:00 (Sun)
  61499268000, #    local_end 1949-11-01 02:00:00 (Tue)
  10800,
  1,
  'IDT',
      ],
      [
  61499257200, #    utc_start 1949-10-31 23:00:00 (Mon)
  61513596000, #      utc_end 1950-04-15 22:00:00 (Sat)
  61499264400, #  local_start 1949-11-01 01:00:00 (Tue)
  61513603200, #    local_end 1950-04-16 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  61513596000, #    utc_start 1950-04-15 22:00:00 (Sat)
  61526736000, #      utc_end 1950-09-15 00:00:00 (Fri)
  61513606800, #  local_start 1950-04-16 01:00:00 (Sun)
  61526746800, #    local_end 1950-09-15 03:00:00 (Fri)
  10800,
  1,
  'IDT',
      ],
      [
  61526736000, #    utc_start 1950-09-15 00:00:00 (Fri)
  61543836000, #      utc_end 1951-03-31 22:00:00 (Sat)
  61526743200, #  local_start 1950-09-15 02:00:00 (Fri)
  61543843200, #    local_end 1951-04-01 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  61543836000, #    utc_start 1951-03-31 22:00:00 (Sat)
  61563196800, #      utc_end 1951-11-11 00:00:00 (Sun)
  61543846800, #  local_start 1951-04-01 01:00:00 (Sun)
  61563207600, #    local_end 1951-11-11 03:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  61563196800, #    utc_start 1951-11-11 00:00:00 (Sun)
  61577107200, #      utc_end 1952-04-20 00:00:00 (Sun)
  61563204000, #  local_start 1951-11-11 02:00:00 (Sun)
  61577114400, #    local_end 1952-04-20 02:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  61577107200, #    utc_start 1952-04-20 00:00:00 (Sun)
  61592832000, #      utc_end 1952-10-19 00:00:00 (Sun)
  61577118000, #  local_start 1952-04-20 03:00:00 (Sun)
  61592842800, #    local_end 1952-10-19 03:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  61592832000, #    utc_start 1952-10-19 00:00:00 (Sun)
  61607952000, #      utc_end 1953-04-12 00:00:00 (Sun)
  61592839200, #  local_start 1952-10-19 02:00:00 (Sun)
  61607959200, #    local_end 1953-04-12 02:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  61607952000, #    utc_start 1953-04-12 00:00:00 (Sun)
  61621257600, #      utc_end 1953-09-13 00:00:00 (Sun)
  61607962800, #  local_start 1953-04-12 03:00:00 (Sun)
  61621268400, #    local_end 1953-09-13 03:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  61621257600, #    utc_start 1953-09-13 00:00:00 (Sun)
  61644837600, #      utc_end 1954-06-12 22:00:00 (Sat)
  61621264800, #  local_start 1953-09-13 02:00:00 (Sun)
  61644844800, #    local_end 1954-06-13 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  61644837600, #    utc_start 1954-06-12 22:00:00 (Sat)
  61652696400, #      utc_end 1954-09-11 21:00:00 (Sat)
  61644848400, #  local_start 1954-06-13 01:00:00 (Sun)
  61652707200, #    local_end 1954-09-12 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  61652696400, #    utc_start 1954-09-11 21:00:00 (Sat)
  61676208000, #      utc_end 1955-06-11 00:00:00 (Sat)
  61652703600, #  local_start 1954-09-11 23:00:00 (Sat)
  61676215200, #    local_end 1955-06-11 02:00:00 (Sat)
  7200,
  0,
  'IST',
      ],
      [
  61676208000, #    utc_start 1955-06-11 00:00:00 (Sat)
  61684146000, #      utc_end 1955-09-10 21:00:00 (Sat)
  61676218800, #  local_start 1955-06-11 03:00:00 (Sat)
  61684156800, #    local_end 1955-09-11 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  61684146000, #    utc_start 1955-09-10 21:00:00 (Sat)
  61707132000, #      utc_end 1956-06-02 22:00:00 (Sat)
  61684153200, #  local_start 1955-09-10 23:00:00 (Sat)
  61707139200, #    local_end 1956-06-03 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  61707132000, #    utc_start 1956-06-02 22:00:00 (Sat)
  61717420800, #      utc_end 1956-09-30 00:00:00 (Sun)
  61707142800, #  local_start 1956-06-03 01:00:00 (Sun)
  61717431600, #    local_end 1956-09-30 03:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  61717420800, #    utc_start 1956-09-30 00:00:00 (Sun)
  61735651200, #      utc_end 1957-04-29 00:00:00 (Mon)
  61717428000, #  local_start 1956-09-30 02:00:00 (Sun)
  61735658400, #    local_end 1957-04-29 02:00:00 (Mon)
  7200,
  0,
  'IST',
      ],
      [
  61735651200, #    utc_start 1957-04-29 00:00:00 (Mon)
  61748254800, #      utc_end 1957-09-21 21:00:00 (Sat)
  61735662000, #  local_start 1957-04-29 03:00:00 (Mon)
  61748265600, #    local_end 1957-09-22 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  61748254800, #    utc_start 1957-09-21 21:00:00 (Sat)
  62278063200, #      utc_end 1974-07-06 22:00:00 (Sat)
  61748262000, #  local_start 1957-09-21 23:00:00 (Sat)
  62278070400, #    local_end 1974-07-07 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62278063200, #    utc_start 1974-07-06 22:00:00 (Sat)
  62286526800, #      utc_end 1974-10-12 21:00:00 (Sat)
  62278074000, #  local_start 1974-07-07 01:00:00 (Sun)
  62286537600, #    local_end 1974-10-13 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62286526800, #    utc_start 1974-10-12 21:00:00 (Sat)
  62302860000, #      utc_end 1975-04-19 22:00:00 (Sat)
  62286534000, #  local_start 1974-10-12 23:00:00 (Sat)
  62302867200, #    local_end 1975-04-20 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62302860000, #    utc_start 1975-04-19 22:00:00 (Sat)
  62314347600, #      utc_end 1975-08-30 21:00:00 (Sat)
  62302870800, #  local_start 1975-04-20 01:00:00 (Sun)
  62314358400, #    local_end 1975-08-31 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62314347600, #    utc_start 1975-08-30 21:00:00 (Sat)
  62617960800, #      utc_end 1985-04-13 22:00:00 (Sat)
  62314354800, #  local_start 1975-08-30 23:00:00 (Sat)
  62617968000, #    local_end 1985-04-14 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62617960800, #    utc_start 1985-04-13 22:00:00 (Sat)
  62631262800, #      utc_end 1985-09-14 21:00:00 (Sat)
  62617971600, #  local_start 1985-04-14 01:00:00 (Sun)
  62631273600, #    local_end 1985-09-15 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62631262800, #    utc_start 1985-09-14 21:00:00 (Sat)
  62652434400, #      utc_end 1986-05-17 22:00:00 (Sat)
  62631270000, #  local_start 1985-09-14 23:00:00 (Sat)
  62652441600, #    local_end 1986-05-18 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62652434400, #    utc_start 1986-05-17 22:00:00 (Sat)
  62662107600, #      utc_end 1986-09-06 21:00:00 (Sat)
  62652445200, #  local_start 1986-05-18 01:00:00 (Sun)
  62662118400, #    local_end 1986-09-07 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62662107600, #    utc_start 1986-09-06 21:00:00 (Sat)
  62681119200, #      utc_end 1987-04-14 22:00:00 (Tue)
  62662114800, #  local_start 1986-09-06 23:00:00 (Sat)
  62681126400, #    local_end 1987-04-15 00:00:00 (Wed)
  7200,
  0,
  'IST',
      ],
      [
  62681119200, #    utc_start 1987-04-14 22:00:00 (Tue)
  62694162000, #      utc_end 1987-09-12 21:00:00 (Sat)
  62681130000, #  local_start 1987-04-15 01:00:00 (Wed)
  62694172800, #    local_end 1987-09-13 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62694162000, #    utc_start 1987-09-12 21:00:00 (Sat)
  62712309600, #      utc_end 1988-04-09 22:00:00 (Sat)
  62694169200, #  local_start 1987-09-12 23:00:00 (Sat)
  62712316800, #    local_end 1988-04-10 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62712309600, #    utc_start 1988-04-09 22:00:00 (Sat)
  62725006800, #      utc_end 1988-09-03 21:00:00 (Sat)
  62712320400, #  local_start 1988-04-10 01:00:00 (Sun)
  62725017600, #    local_end 1988-09-04 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62725006800, #    utc_start 1988-09-03 21:00:00 (Sat)
  62745573600, #      utc_end 1989-04-29 22:00:00 (Sat)
  62725014000, #  local_start 1988-09-03 23:00:00 (Sat)
  62745580800, #    local_end 1989-04-30 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62745573600, #    utc_start 1989-04-29 22:00:00 (Sat)
  62756456400, #      utc_end 1989-09-02 21:00:00 (Sat)
  62745584400, #  local_start 1989-04-30 01:00:00 (Sun)
  62756467200, #    local_end 1989-09-03 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62756456400, #    utc_start 1989-09-02 21:00:00 (Sat)
  62773999200, #      utc_end 1990-03-24 22:00:00 (Sat)
  62756463600, #  local_start 1989-09-02 23:00:00 (Sat)
  62774006400, #    local_end 1990-03-25 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62773999200, #    utc_start 1990-03-24 22:00:00 (Sat)
  62787301200, #      utc_end 1990-08-25 21:00:00 (Sat)
  62774010000, #  local_start 1990-03-25 01:00:00 (Sun)
  62787312000, #    local_end 1990-08-26 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62787301200, #    utc_start 1990-08-25 21:00:00 (Sat)
  62805448800, #      utc_end 1991-03-23 22:00:00 (Sat)
  62787308400, #  local_start 1990-08-25 23:00:00 (Sat)
  62805456000, #    local_end 1991-03-24 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62805448800, #    utc_start 1991-03-23 22:00:00 (Sat)
  62819355600, #      utc_end 1991-08-31 21:00:00 (Sat)
  62805459600, #  local_start 1991-03-24 01:00:00 (Sun)
  62819366400, #    local_end 1991-09-01 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62819355600, #    utc_start 1991-08-31 21:00:00 (Sat)
  62837503200, #      utc_end 1992-03-28 22:00:00 (Sat)
  62819362800, #  local_start 1991-08-31 23:00:00 (Sat)
  62837510400, #    local_end 1992-03-29 00:00:00 (Sun)
  7200,
  0,
  'IST',
      ],
      [
  62837503200, #    utc_start 1992-03-28 22:00:00 (Sat)
  62851410000, #      utc_end 1992-09-05 21:00:00 (Sat)
  62837514000, #  local_start 1992-03-29 01:00:00 (Sun)
  62851420800, #    local_end 1992-09-06 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62851410000, #    utc_start 1992-09-05 21:00:00 (Sat)
  62869384800, #      utc_end 1993-04-01 22:00:00 (Thu)
  62851417200, #  local_start 1992-09-05 23:00:00 (Sat)
  62869392000, #    local_end 1993-04-02 00:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  62869384800, #    utc_start 1993-04-01 22:00:00 (Thu)
  62882859600, #      utc_end 1993-09-04 21:00:00 (Sat)
  62869395600, #  local_start 1993-04-02 01:00:00 (Fri)
  62882870400, #    local_end 1993-09-05 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62882859600, #    utc_start 1993-09-04 21:00:00 (Sat)
  62900834400, #      utc_end 1994-03-31 22:00:00 (Thu)
  62882866800, #  local_start 1993-09-04 23:00:00 (Sat)
  62900841600, #    local_end 1994-04-01 00:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  62900834400, #    utc_start 1994-03-31 22:00:00 (Thu)
  62913704400, #      utc_end 1994-08-27 21:00:00 (Sat)
  62900845200, #  local_start 1994-04-01 01:00:00 (Fri)
  62913715200, #    local_end 1994-08-28 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62913704400, #    utc_start 1994-08-27 21:00:00 (Sat)
  62932284000, #      utc_end 1995-03-30 22:00:00 (Thu)
  62913711600, #  local_start 1994-08-27 23:00:00 (Sat)
  62932291200, #    local_end 1995-03-31 00:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  62932284000, #    utc_start 1995-03-30 22:00:00 (Thu)
  62945758800, #      utc_end 1995-09-02 21:00:00 (Sat)
  62932294800, #  local_start 1995-03-31 01:00:00 (Fri)
  62945769600, #    local_end 1995-09-03 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  62945758800, #    utc_start 1995-09-02 21:00:00 (Sat)
  62962524000, #      utc_end 1996-03-14 22:00:00 (Thu)
  62945766000, #  local_start 1995-09-02 23:00:00 (Sat)
  62962531200, #    local_end 1996-03-15 00:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  62962524000, #    utc_start 1996-03-14 22:00:00 (Thu)
  62978504400, #      utc_end 1996-09-15 21:00:00 (Sun)
  62962534800, #  local_start 1996-03-15 01:00:00 (Fri)
  62978515200, #    local_end 1996-09-16 00:00:00 (Mon)
  10800,
  1,
  'IDT',
      ],
      [
  62978504400, #    utc_start 1996-09-15 21:00:00 (Sun)
  62994578400, #      utc_end 1997-03-20 22:00:00 (Thu)
  62978511600, #  local_start 1996-09-15 23:00:00 (Sun)
  62994585600, #    local_end 1997-03-21 00:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  62994578400, #    utc_start 1997-03-20 22:00:00 (Thu)
  63009867600, #      utc_end 1997-09-13 21:00:00 (Sat)
  62994589200, #  local_start 1997-03-21 01:00:00 (Fri)
  63009878400, #    local_end 1997-09-14 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63009867600, #    utc_start 1997-09-13 21:00:00 (Sat)
  63026028000, #      utc_end 1998-03-19 22:00:00 (Thu)
  63009874800, #  local_start 1997-09-13 23:00:00 (Sat)
  63026035200, #    local_end 1998-03-20 00:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63026028000, #    utc_start 1998-03-19 22:00:00 (Thu)
  63040712400, #      utc_end 1998-09-05 21:00:00 (Sat)
  63026038800, #  local_start 1998-03-20 01:00:00 (Fri)
  63040723200, #    local_end 1998-09-06 00:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63040712400, #    utc_start 1998-09-05 21:00:00 (Sat)
  63058694400, #      utc_end 1999-04-02 00:00:00 (Fri)
  63040719600, #  local_start 1998-09-05 23:00:00 (Sat)
  63058701600, #    local_end 1999-04-02 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63058694400, #    utc_start 1999-04-02 00:00:00 (Fri)
  63071996400, #      utc_end 1999-09-02 23:00:00 (Thu)
  63058705200, #  local_start 1999-04-02 03:00:00 (Fri)
  63072007200, #    local_end 1999-09-03 02:00:00 (Fri)
  10800,
  1,
  'IDT',
      ],
      [
  63071996400, #    utc_start 1999-09-02 23:00:00 (Thu)
  63091353600, #      utc_end 2000-04-14 00:00:00 (Fri)
  63072003600, #  local_start 1999-09-03 01:00:00 (Fri)
  63091360800, #    local_end 2000-04-14 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63091353600, #    utc_start 2000-04-14 00:00:00 (Fri)
  63106466400, #      utc_end 2000-10-05 22:00:00 (Thu)
  63091364400, #  local_start 2000-04-14 03:00:00 (Fri)
  63106477200, #    local_end 2000-10-06 01:00:00 (Fri)
  10800,
  1,
  'IDT',
      ],
      [
  63106466400, #    utc_start 2000-10-05 22:00:00 (Thu)
  63122454000, #      utc_end 2001-04-08 23:00:00 (Sun)
  63106473600, #  local_start 2000-10-06 00:00:00 (Fri)
  63122461200, #    local_end 2001-04-09 01:00:00 (Mon)
  7200,
  0,
  'IST',
      ],
      [
  63122454000, #    utc_start 2001-04-08 23:00:00 (Sun)
  63136965600, #      utc_end 2001-09-23 22:00:00 (Sun)
  63122464800, #  local_start 2001-04-09 02:00:00 (Mon)
  63136976400, #    local_end 2001-09-24 01:00:00 (Mon)
  10800,
  1,
  'IDT',
      ],
      [
  63136965600, #    utc_start 2001-09-23 22:00:00 (Sun)
  63153039600, #      utc_end 2002-03-28 23:00:00 (Thu)
  63136972800, #  local_start 2001-09-24 00:00:00 (Mon)
  63153046800, #    local_end 2002-03-29 01:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63153039600, #    utc_start 2002-03-28 23:00:00 (Thu)
  63169624800, #      utc_end 2002-10-06 22:00:00 (Sun)
  63153050400, #  local_start 2002-03-29 02:00:00 (Fri)
  63169635600, #    local_end 2002-10-07 01:00:00 (Mon)
  10800,
  1,
  'IDT',
      ],
      [
  63169624800, #    utc_start 2002-10-06 22:00:00 (Sun)
  63184489200, #      utc_end 2003-03-27 23:00:00 (Thu)
  63169632000, #  local_start 2002-10-07 00:00:00 (Mon)
  63184496400, #    local_end 2003-03-28 01:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63184489200, #    utc_start 2003-03-27 23:00:00 (Thu)
  63200815200, #      utc_end 2003-10-02 22:00:00 (Thu)
  63184500000, #  local_start 2003-03-28 02:00:00 (Fri)
  63200826000, #    local_end 2003-10-03 01:00:00 (Fri)
  10800,
  1,
  'IDT',
      ],
      [
  63200815200, #    utc_start 2003-10-02 22:00:00 (Thu)
  63216975600, #      utc_end 2004-04-06 23:00:00 (Tue)
  63200822400, #  local_start 2003-10-03 00:00:00 (Fri)
  63216982800, #    local_end 2004-04-07 01:00:00 (Wed)
  7200,
  0,
  'IST',
      ],
      [
  63216975600, #    utc_start 2004-04-06 23:00:00 (Tue)
  63231487200, #      utc_end 2004-09-21 22:00:00 (Tue)
  63216986400, #  local_start 2004-04-07 02:00:00 (Wed)
  63231498000, #    local_end 2004-09-22 01:00:00 (Wed)
  10800,
  1,
  'IDT',
      ],
      [
  63231487200, #    utc_start 2004-09-21 22:00:00 (Tue)
  63247996800, #      utc_end 2005-04-01 00:00:00 (Fri)
  63231494400, #  local_start 2004-09-22 00:00:00 (Wed)
  63248004000, #    local_end 2005-04-01 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63247996800, #    utc_start 2005-04-01 00:00:00 (Fri)
  63264495600, #      utc_end 2005-10-08 23:00:00 (Sat)
  63248007600, #  local_start 2005-04-01 03:00:00 (Fri)
  63264506400, #    local_end 2005-10-09 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63264495600, #    utc_start 2005-10-08 23:00:00 (Sat)
  63279446400, #      utc_end 2006-03-31 00:00:00 (Fri)
  63264502800, #  local_start 2005-10-09 01:00:00 (Sun)
  63279453600, #    local_end 2006-03-31 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63279446400, #    utc_start 2006-03-31 00:00:00 (Fri)
  63295340400, #      utc_end 2006-09-30 23:00:00 (Sat)
  63279457200, #  local_start 2006-03-31 03:00:00 (Fri)
  63295351200, #    local_end 2006-10-01 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63295340400, #    utc_start 2006-09-30 23:00:00 (Sat)
  63310896000, #      utc_end 2007-03-30 00:00:00 (Fri)
  63295347600, #  local_start 2006-10-01 01:00:00 (Sun)
  63310903200, #    local_end 2007-03-30 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63310896000, #    utc_start 2007-03-30 00:00:00 (Fri)
  63325580400, #      utc_end 2007-09-15 23:00:00 (Sat)
  63310906800, #  local_start 2007-03-30 03:00:00 (Fri)
  63325591200, #    local_end 2007-09-16 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63325580400, #    utc_start 2007-09-15 23:00:00 (Sat)
  63342345600, #      utc_end 2008-03-28 00:00:00 (Fri)
  63325587600, #  local_start 2007-09-16 01:00:00 (Sun)
  63342352800, #    local_end 2008-03-28 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63342345600, #    utc_start 2008-03-28 00:00:00 (Fri)
  63358844400, #      utc_end 2008-10-04 23:00:00 (Sat)
  63342356400, #  local_start 2008-03-28 03:00:00 (Fri)
  63358855200, #    local_end 2008-10-05 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63358844400, #    utc_start 2008-10-04 23:00:00 (Sat)
  63373795200, #      utc_end 2009-03-27 00:00:00 (Fri)
  63358851600, #  local_start 2008-10-05 01:00:00 (Sun)
  63373802400, #    local_end 2009-03-27 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63373795200, #    utc_start 2009-03-27 00:00:00 (Fri)
  63389689200, #      utc_end 2009-09-26 23:00:00 (Sat)
  63373806000, #  local_start 2009-03-27 03:00:00 (Fri)
  63389700000, #    local_end 2009-09-27 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63389689200, #    utc_start 2009-09-26 23:00:00 (Sat)
  63405244800, #      utc_end 2010-03-26 00:00:00 (Fri)
  63389696400, #  local_start 2009-09-27 01:00:00 (Sun)
  63405252000, #    local_end 2010-03-26 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63405244800, #    utc_start 2010-03-26 00:00:00 (Fri)
  63419929200, #      utc_end 2010-09-11 23:00:00 (Sat)
  63405255600, #  local_start 2010-03-26 03:00:00 (Fri)
  63419940000, #    local_end 2010-09-12 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63419929200, #    utc_start 2010-09-11 23:00:00 (Sat)
  63437299200, #      utc_end 2011-04-01 00:00:00 (Fri)
  63419936400, #  local_start 2010-09-12 01:00:00 (Sun)
  63437306400, #    local_end 2011-04-01 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63437299200, #    utc_start 2011-04-01 00:00:00 (Fri)
  63453193200, #      utc_end 2011-10-01 23:00:00 (Sat)
  63437310000, #  local_start 2011-04-01 03:00:00 (Fri)
  63453204000, #    local_end 2011-10-02 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63453193200, #    utc_start 2011-10-01 23:00:00 (Sat)
  63468748800, #      utc_end 2012-03-30 00:00:00 (Fri)
  63453200400, #  local_start 2011-10-02 01:00:00 (Sun)
  63468756000, #    local_end 2012-03-30 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63468748800, #    utc_start 2012-03-30 00:00:00 (Fri)
  63484038000, #      utc_end 2012-09-22 23:00:00 (Sat)
  63468759600, #  local_start 2012-03-30 03:00:00 (Fri)
  63484048800, #    local_end 2012-09-23 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63484038000, #    utc_start 2012-09-22 23:00:00 (Sat)
  63500198400, #      utc_end 2013-03-29 00:00:00 (Fri)
  63484045200, #  local_start 2012-09-23 01:00:00 (Sun)
  63500205600, #    local_end 2013-03-29 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63500198400, #    utc_start 2013-03-29 00:00:00 (Fri)
  63518511600, #      utc_end 2013-10-26 23:00:00 (Sat)
  63500209200, #  local_start 2013-03-29 03:00:00 (Fri)
  63518522400, #    local_end 2013-10-27 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63518511600, #    utc_start 2013-10-26 23:00:00 (Sat)
  63531648000, #      utc_end 2014-03-28 00:00:00 (Fri)
  63518518800, #  local_start 2013-10-27 01:00:00 (Sun)
  63531655200, #    local_end 2014-03-28 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63531648000, #    utc_start 2014-03-28 00:00:00 (Fri)
  63549961200, #      utc_end 2014-10-25 23:00:00 (Sat)
  63531658800, #  local_start 2014-03-28 03:00:00 (Fri)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63549961200, #    utc_start 2014-10-25 23:00:00 (Sat)
  63563097600, #      utc_end 2015-03-27 00:00:00 (Fri)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63563104800, #    local_end 2015-03-27 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63563097600, #    utc_start 2015-03-27 00:00:00 (Fri)
  63581410800, #      utc_end 2015-10-24 23:00:00 (Sat)
  63563108400, #  local_start 2015-03-27 03:00:00 (Fri)
  63581421600, #    local_end 2015-10-25 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63581410800, #    utc_start 2015-10-24 23:00:00 (Sat)
  63594547200, #      utc_end 2016-03-25 00:00:00 (Fri)
  63581418000, #  local_start 2015-10-25 01:00:00 (Sun)
  63594554400, #    local_end 2016-03-25 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63594547200, #    utc_start 2016-03-25 00:00:00 (Fri)
  63613465200, #      utc_end 2016-10-29 23:00:00 (Sat)
  63594558000, #  local_start 2016-03-25 03:00:00 (Fri)
  63613476000, #    local_end 2016-10-30 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63613465200, #    utc_start 2016-10-29 23:00:00 (Sat)
  63625996800, #      utc_end 2017-03-24 00:00:00 (Fri)
  63613472400, #  local_start 2016-10-30 01:00:00 (Sun)
  63626004000, #    local_end 2017-03-24 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63625996800, #    utc_start 2017-03-24 00:00:00 (Fri)
  63644914800, #      utc_end 2017-10-28 23:00:00 (Sat)
  63626007600, #  local_start 2017-03-24 03:00:00 (Fri)
  63644925600, #    local_end 2017-10-29 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63644914800, #    utc_start 2017-10-28 23:00:00 (Sat)
  63657446400, #      utc_end 2018-03-23 00:00:00 (Fri)
  63644922000, #  local_start 2017-10-29 01:00:00 (Sun)
  63657453600, #    local_end 2018-03-23 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63657446400, #    utc_start 2018-03-23 00:00:00 (Fri)
  63676364400, #      utc_end 2018-10-27 23:00:00 (Sat)
  63657457200, #  local_start 2018-03-23 03:00:00 (Fri)
  63676375200, #    local_end 2018-10-28 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63676364400, #    utc_start 2018-10-27 23:00:00 (Sat)
  63689500800, #      utc_end 2019-03-29 00:00:00 (Fri)
  63676371600, #  local_start 2018-10-28 01:00:00 (Sun)
  63689508000, #    local_end 2019-03-29 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63689500800, #    utc_start 2019-03-29 00:00:00 (Fri)
  63707814000, #      utc_end 2019-10-26 23:00:00 (Sat)
  63689511600, #  local_start 2019-03-29 03:00:00 (Fri)
  63707824800, #    local_end 2019-10-27 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63707814000, #    utc_start 2019-10-26 23:00:00 (Sat)
  63720950400, #      utc_end 2020-03-27 00:00:00 (Fri)
  63707821200, #  local_start 2019-10-27 01:00:00 (Sun)
  63720957600, #    local_end 2020-03-27 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63720950400, #    utc_start 2020-03-27 00:00:00 (Fri)
  63739263600, #      utc_end 2020-10-24 23:00:00 (Sat)
  63720961200, #  local_start 2020-03-27 03:00:00 (Fri)
  63739274400, #    local_end 2020-10-25 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63739263600, #    utc_start 2020-10-24 23:00:00 (Sat)
  63752400000, #      utc_end 2021-03-26 00:00:00 (Fri)
  63739270800, #  local_start 2020-10-25 01:00:00 (Sun)
  63752407200, #    local_end 2021-03-26 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63752400000, #    utc_start 2021-03-26 00:00:00 (Fri)
  63771318000, #      utc_end 2021-10-30 23:00:00 (Sat)
  63752410800, #  local_start 2021-03-26 03:00:00 (Fri)
  63771328800, #    local_end 2021-10-31 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63771318000, #    utc_start 2021-10-30 23:00:00 (Sat)
  63783849600, #      utc_end 2022-03-25 00:00:00 (Fri)
  63771325200, #  local_start 2021-10-31 01:00:00 (Sun)
  63783856800, #    local_end 2022-03-25 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63783849600, #    utc_start 2022-03-25 00:00:00 (Fri)
  63802767600, #      utc_end 2022-10-29 23:00:00 (Sat)
  63783860400, #  local_start 2022-03-25 03:00:00 (Fri)
  63802778400, #    local_end 2022-10-30 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63802767600, #    utc_start 2022-10-29 23:00:00 (Sat)
  63815299200, #      utc_end 2023-03-24 00:00:00 (Fri)
  63802774800, #  local_start 2022-10-30 01:00:00 (Sun)
  63815306400, #    local_end 2023-03-24 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63815299200, #    utc_start 2023-03-24 00:00:00 (Fri)
  63834217200, #      utc_end 2023-10-28 23:00:00 (Sat)
  63815310000, #  local_start 2023-03-24 03:00:00 (Fri)
  63834228000, #    local_end 2023-10-29 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63834217200, #    utc_start 2023-10-28 23:00:00 (Sat)
  63847353600, #      utc_end 2024-03-29 00:00:00 (Fri)
  63834224400, #  local_start 2023-10-29 01:00:00 (Sun)
  63847360800, #    local_end 2024-03-29 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63847353600, #    utc_start 2024-03-29 00:00:00 (Fri)
  63865666800, #      utc_end 2024-10-26 23:00:00 (Sat)
  63847364400, #  local_start 2024-03-29 03:00:00 (Fri)
  63865677600, #    local_end 2024-10-27 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63865666800, #    utc_start 2024-10-26 23:00:00 (Sat)
  63878803200, #      utc_end 2025-03-28 00:00:00 (Fri)
  63865674000, #  local_start 2024-10-27 01:00:00 (Sun)
  63878810400, #    local_end 2025-03-28 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63878803200, #    utc_start 2025-03-28 00:00:00 (Fri)
  63897116400, #      utc_end 2025-10-25 23:00:00 (Sat)
  63878814000, #  local_start 2025-03-28 03:00:00 (Fri)
  63897127200, #    local_end 2025-10-26 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63897116400, #    utc_start 2025-10-25 23:00:00 (Sat)
  63910252800, #      utc_end 2026-03-27 00:00:00 (Fri)
  63897123600, #  local_start 2025-10-26 01:00:00 (Sun)
  63910260000, #    local_end 2026-03-27 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63910252800, #    utc_start 2026-03-27 00:00:00 (Fri)
  63928566000, #      utc_end 2026-10-24 23:00:00 (Sat)
  63910263600, #  local_start 2026-03-27 03:00:00 (Fri)
  63928576800, #    local_end 2026-10-25 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
      [
  63928566000, #    utc_start 2026-10-24 23:00:00 (Sat)
  63941702400, #      utc_end 2027-03-26 00:00:00 (Fri)
  63928573200, #  local_start 2026-10-25 01:00:00 (Sun)
  63941709600, #    local_end 2027-03-26 02:00:00 (Fri)
  7200,
  0,
  'IST',
      ],
      [
  63941702400, #    utc_start 2027-03-26 00:00:00 (Fri)
  63960620400, #      utc_end 2027-10-30 23:00:00 (Sat)
  63941713200, #  local_start 2027-03-26 03:00:00 (Fri)
  63960631200, #    local_end 2027-10-31 02:00:00 (Sun)
  10800,
  1,
  'IDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {61}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'I%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 700169,
      'local_rd_secs' => 85160,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 700169,
      'utc_rd_secs' => 85160,
      'utc_year' => 1918
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 700169,
      'local_rd_secs' => 77960,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 700169,
      'utc_rd_secs' => 77960,
      'utc_year' => 1918
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2013',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Zion',
      'offset_from_std' => 3600,
      'on' => 'Fri>=23',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2013',
      'in' => 'Oct',
      'letter' => 'S',
      'name' => 'Zion',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_JERUSALEM

    $main::fatpacked{"DateTime/TimeZone/Asia/Kabul.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_KABUL';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Kabul;
  $DateTime::TimeZone::Asia::Kabul::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Kabul::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611144992, #      utc_end 1889-12-31 19:23:12 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  16608,
  0,
  'LMT',
      ],
      [
  59611144992, #    utc_start 1889-12-31 19:23:12 (Tue)
  61346750400, #      utc_end 1944-12-31 20:00:00 (Sun)
  59611159392, #  local_start 1889-12-31 23:23:12 (Tue)
  61346764800, #    local_end 1945-01-01 00:00:00 (Mon)
  14400,
  0,
  'AFT',
      ],
      [
  61346750400, #    utc_start 1944-12-31 20:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  61346766600, #  local_start 1945-01-01 00:30:00 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  16200,
  0,
  'AFT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_KABUL

    $main::fatpacked{"DateTime/TimeZone/Asia/Kamchatka.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_KAMCHATKA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Kamchatka;
  $DateTime::TimeZone::Asia::Kamchatka::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Kamchatka::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60647923524, #      utc_end 1922-11-09 13:25:24 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60647961600, #    local_end 1922-11-10 00:00:00 (Fri)
  38076,
  0,
  'LMT',
      ],
      [
  60647923524, #    utc_start 1922-11-09 13:25:24 (Thu)
  60888114000, #      utc_end 1930-06-20 13:00:00 (Fri)
  60647963124, #  local_start 1922-11-10 00:25:24 (Fri)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  39600,
  0,
  'PETT',
      ],
      [
  60888114000, #    utc_start 1930-06-20 13:00:00 (Fri)
  62490571200, #      utc_end 1981-03-31 12:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  43200,
  0,
  'PETT',
      ],
      [
  62490571200, #    utc_start 1981-03-31 12:00:00 (Tue)
  62506378800, #      utc_end 1981-09-30 11:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  46800,
  1,
  'PETST',
      ],
      [
  62506378800, #    utc_start 1981-09-30 11:00:00 (Wed)
  62522107200, #      utc_end 1982-03-31 12:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  43200,
  0,
  'PETT',
      ],
      [
  62522107200, #    utc_start 1982-03-31 12:00:00 (Wed)
  62537914800, #      utc_end 1982-09-30 11:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  46800,
  1,
  'PETST',
      ],
      [
  62537914800, #    utc_start 1982-09-30 11:00:00 (Thu)
  62553643200, #      utc_end 1983-03-31 12:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  43200,
  0,
  'PETT',
      ],
      [
  62553643200, #    utc_start 1983-03-31 12:00:00 (Thu)
  62569450800, #      utc_end 1983-09-30 11:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  46800,
  1,
  'PETST',
      ],
      [
  62569450800, #    utc_start 1983-09-30 11:00:00 (Fri)
  62585265600, #      utc_end 1984-03-31 12:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  62585265600, #    utc_start 1984-03-31 12:00:00 (Sat)
  62600997600, #      utc_end 1984-09-29 14:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  62600997600, #    utc_start 1984-09-29 14:00:00 (Sat)
  62616722400, #      utc_end 1985-03-30 14:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  62616722400, #    utc_start 1985-03-30 14:00:00 (Sat)
  62632447200, #      utc_end 1985-09-28 14:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  62632447200, #    utc_start 1985-09-28 14:00:00 (Sat)
  62648172000, #      utc_end 1986-03-29 14:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  62648172000, #    utc_start 1986-03-29 14:00:00 (Sat)
  62663896800, #      utc_end 1986-09-27 14:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  62663896800, #    utc_start 1986-09-27 14:00:00 (Sat)
  62679621600, #      utc_end 1987-03-28 14:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  62679621600, #    utc_start 1987-03-28 14:00:00 (Sat)
  62695346400, #      utc_end 1987-09-26 14:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  62695346400, #    utc_start 1987-09-26 14:00:00 (Sat)
  62711071200, #      utc_end 1988-03-26 14:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  62711071200, #    utc_start 1988-03-26 14:00:00 (Sat)
  62726796000, #      utc_end 1988-09-24 14:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  62726796000, #    utc_start 1988-09-24 14:00:00 (Sat)
  62742520800, #      utc_end 1989-03-25 14:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  62742520800, #    utc_start 1989-03-25 14:00:00 (Sat)
  62758245600, #      utc_end 1989-09-23 14:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  62758245600, #    utc_start 1989-09-23 14:00:00 (Sat)
  62773970400, #      utc_end 1990-03-24 14:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  62773970400, #    utc_start 1990-03-24 14:00:00 (Sat)
  62790300000, #      utc_end 1990-09-29 14:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  62790300000, #    utc_start 1990-09-29 14:00:00 (Sat)
  62806024800, #      utc_end 1991-03-30 14:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  62806024800, #    utc_start 1991-03-30 14:00:00 (Sat)
  62821753200, #      utc_end 1991-09-28 15:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  43200,
  1,
  'PETST',
      ],
      [
  62821753200, #    utc_start 1991-09-28 15:00:00 (Sat)
  62831430000, #      utc_end 1992-01-18 15:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  39600,
  0,
  'PETT',
      ],
      [
  62831430000, #    utc_start 1992-01-18 15:00:00 (Sat)
  62837474400, #      utc_end 1992-03-28 14:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  62837474400, #    utc_start 1992-03-28 14:00:00 (Sat)
  62853199200, #      utc_end 1992-09-26 14:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  62853199200, #    utc_start 1992-09-26 14:00:00 (Sat)
  62868924000, #      utc_end 1993-03-27 14:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  62868924000, #    utc_start 1993-03-27 14:00:00 (Sat)
  62884648800, #      utc_end 1993-09-25 14:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  62884648800, #    utc_start 1993-09-25 14:00:00 (Sat)
  62900373600, #      utc_end 1994-03-26 14:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  62900373600, #    utc_start 1994-03-26 14:00:00 (Sat)
  62916098400, #      utc_end 1994-09-24 14:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  62916098400, #    utc_start 1994-09-24 14:00:00 (Sat)
  62931823200, #      utc_end 1995-03-25 14:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  62931823200, #    utc_start 1995-03-25 14:00:00 (Sat)
  62947548000, #      utc_end 1995-09-23 14:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  62947548000, #    utc_start 1995-09-23 14:00:00 (Sat)
  62963877600, #      utc_end 1996-03-30 14:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  62963877600, #    utc_start 1996-03-30 14:00:00 (Sat)
  62982021600, #      utc_end 1996-10-26 14:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  62982021600, #    utc_start 1996-10-26 14:00:00 (Sat)
  62995327200, #      utc_end 1997-03-29 14:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  62995327200, #    utc_start 1997-03-29 14:00:00 (Sat)
  63013471200, #      utc_end 1997-10-25 14:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  63013471200, #    utc_start 1997-10-25 14:00:00 (Sat)
  63026776800, #      utc_end 1998-03-28 14:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  63026776800, #    utc_start 1998-03-28 14:00:00 (Sat)
  63044920800, #      utc_end 1998-10-24 14:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  63044920800, #    utc_start 1998-10-24 14:00:00 (Sat)
  63058226400, #      utc_end 1999-03-27 14:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  63058226400, #    utc_start 1999-03-27 14:00:00 (Sat)
  63076975200, #      utc_end 1999-10-30 14:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  63076975200, #    utc_start 1999-10-30 14:00:00 (Sat)
  63089676000, #      utc_end 2000-03-25 14:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  63089676000, #    utc_start 2000-03-25 14:00:00 (Sat)
  63108424800, #      utc_end 2000-10-28 14:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  63108424800, #    utc_start 2000-10-28 14:00:00 (Sat)
  63121125600, #      utc_end 2001-03-24 14:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  63121125600, #    utc_start 2001-03-24 14:00:00 (Sat)
  63139874400, #      utc_end 2001-10-27 14:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  63139874400, #    utc_start 2001-10-27 14:00:00 (Sat)
  63153180000, #      utc_end 2002-03-30 14:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  63153180000, #    utc_start 2002-03-30 14:00:00 (Sat)
  63171324000, #      utc_end 2002-10-26 14:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  63171324000, #    utc_start 2002-10-26 14:00:00 (Sat)
  63184629600, #      utc_end 2003-03-29 14:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  63184629600, #    utc_start 2003-03-29 14:00:00 (Sat)
  63202773600, #      utc_end 2003-10-25 14:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  63202773600, #    utc_start 2003-10-25 14:00:00 (Sat)
  63216079200, #      utc_end 2004-03-27 14:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  63216079200, #    utc_start 2004-03-27 14:00:00 (Sat)
  63234828000, #      utc_end 2004-10-30 14:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  63234828000, #    utc_start 2004-10-30 14:00:00 (Sat)
  63247528800, #      utc_end 2005-03-26 14:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  63247528800, #    utc_start 2005-03-26 14:00:00 (Sat)
  63266277600, #      utc_end 2005-10-29 14:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  63266277600, #    utc_start 2005-10-29 14:00:00 (Sat)
  63278978400, #      utc_end 2006-03-25 14:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  63278978400, #    utc_start 2006-03-25 14:00:00 (Sat)
  63297727200, #      utc_end 2006-10-28 14:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  63297727200, #    utc_start 2006-10-28 14:00:00 (Sat)
  63310428000, #      utc_end 2007-03-24 14:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  63310428000, #    utc_start 2007-03-24 14:00:00 (Sat)
  63329176800, #      utc_end 2007-10-27 14:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  63329176800, #    utc_start 2007-10-27 14:00:00 (Sat)
  63342482400, #      utc_end 2008-03-29 14:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  63342482400, #    utc_start 2008-03-29 14:00:00 (Sat)
  63360626400, #      utc_end 2008-10-25 14:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  63360626400, #    utc_start 2008-10-25 14:00:00 (Sat)
  63373932000, #      utc_end 2009-03-28 14:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  63373932000, #    utc_start 2009-03-28 14:00:00 (Sat)
  63392076000, #      utc_end 2009-10-24 14:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  46800,
  1,
  'PETST',
      ],
      [
  63392076000, #    utc_start 2009-10-24 14:00:00 (Sat)
  63405381600, #      utc_end 2010-03-27 14:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  43200,
  0,
  'PETT',
      ],
      [
  63405381600, #    utc_start 2010-03-27 14:00:00 (Sat)
  63424134000, #      utc_end 2010-10-30 15:00:00 (Sat)
  63405424800, #  local_start 2010-03-28 02:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  43200,
  1,
  'PETST',
      ],
      [
  63424134000, #    utc_start 2010-10-30 15:00:00 (Sat)
  63436834800, #      utc_end 2011-03-26 15:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  39600,
  0,
  'PETT',
      ],
      [
  63436834800, #    utc_start 2011-03-26 15:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  43200,
  0,
  'PETT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_KAMCHATKA

    $main::fatpacked{"DateTime/TimeZone/Asia/Karachi.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_KARACHI';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Karachi;
  $DateTime::TimeZone::Asia::Karachi::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Karachi::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60147516708, #      utc_end 1906-12-31 19:31:48 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60147532800, #    local_end 1907-01-01 00:00:00 (Tue)
  16092,
  0,
  'LMT',
      ],
      [
  60147516708, #    utc_start 1906-12-31 19:31:48 (Mon)
  61273045800, #      utc_end 1942-08-31 18:30:00 (Mon)
  60147536508, #  local_start 1907-01-01 01:01:48 (Tue)
  61273065600, #    local_end 1942-09-01 00:00:00 (Tue)
  19800,
  0,
  'IST',
      ],
      [
  61273045800, #    utc_start 1942-08-31 18:30:00 (Mon)
  61371538200, #      utc_end 1945-10-14 17:30:00 (Sun)
  61273069200, #  local_start 1942-09-01 01:00:00 (Tue)
  61371561600, #    local_end 1945-10-15 00:00:00 (Mon)
  23400,
  1,
  'IST',
      ],
      [
  61371538200, #    utc_start 1945-10-14 17:30:00 (Sun)
  61559548200, #      utc_end 1951-09-29 18:30:00 (Sat)
  61371558000, #  local_start 1945-10-14 23:00:00 (Sun)
  61559568000, #    local_end 1951-09-30 00:00:00 (Sun)
  19800,
  0,
  'IST',
      ],
      [
  61559548200, #    utc_start 1951-09-29 18:30:00 (Sat)
  62174458800, #      utc_end 1971-03-25 19:00:00 (Thu)
  61559566200, #  local_start 1951-09-29 23:30:00 (Sat)
  62174476800, #    local_end 1971-03-26 00:00:00 (Fri)
  18000,
  0,
  'KART',
      ],
      [
  62174458800, #    utc_start 1971-03-25 19:00:00 (Thu)
  63153802800, #      utc_end 2002-04-06 19:00:00 (Sat)
  62174476800, #  local_start 1971-03-26 00:00:00 (Fri)
  63153820800, #    local_end 2002-04-07 00:00:00 (Sun)
  18000,
  0,
  'PKT',
      ],
      [
  63153802800, #    utc_start 2002-04-06 19:00:00 (Sat)
  63169524000, #      utc_end 2002-10-05 18:00:00 (Sat)
  63153824400, #  local_start 2002-04-07 01:00:00 (Sun)
  63169545600, #    local_end 2002-10-06 00:00:00 (Sun)
  21600,
  1,
  'PKST',
      ],
      [
  63169524000, #    utc_start 2002-10-05 18:00:00 (Sat)
  63347943600, #      utc_end 2008-05-31 19:00:00 (Sat)
  63169542000, #  local_start 2002-10-05 23:00:00 (Sat)
  63347961600, #    local_end 2008-06-01 00:00:00 (Sun)
  18000,
  0,
  'PKT',
      ],
      [
  63347943600, #    utc_start 2008-05-31 19:00:00 (Sat)
  63361159200, #      utc_end 2008-10-31 18:00:00 (Fri)
  63347965200, #  local_start 2008-06-01 01:00:00 (Sun)
  63361180800, #    local_end 2008-11-01 00:00:00 (Sat)
  21600,
  1,
  'PKST',
      ],
      [
  63361159200, #    utc_start 2008-10-31 18:00:00 (Fri)
  63375418800, #      utc_end 2009-04-14 19:00:00 (Tue)
  63361177200, #  local_start 2008-10-31 23:00:00 (Fri)
  63375436800, #    local_end 2009-04-15 00:00:00 (Wed)
  18000,
  0,
  'PKT',
      ],
      [
  63375418800, #    utc_start 2009-04-14 19:00:00 (Tue)
  63392695200, #      utc_end 2009-10-31 18:00:00 (Sat)
  63375440400, #  local_start 2009-04-15 01:00:00 (Wed)
  63392716800, #    local_end 2009-11-01 00:00:00 (Sun)
  21600,
  1,
  'PKST',
      ],
      [
  63392695200, #    utc_start 2009-10-31 18:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63392713200, #  local_start 2009-10-31 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  18000,
  0,
  'PKT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {4}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_KARACHI

    $main::fatpacked{"DateTime/TimeZone/Asia/Kathmandu.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_KATHMANDU';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Kathmandu;
  $DateTime::TimeZone::Asia::Kathmandu::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Kathmandu::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60557739524, #      utc_end 1919-12-31 18:18:44 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60557760000, #    local_end 1920-01-01 00:00:00 (Thu)
  20476,
  0,
  'LMT',
      ],
      [
  60557739524, #    utc_start 1919-12-31 18:18:44 (Wed)
  62640585000, #      utc_end 1985-12-31 18:30:00 (Tue)
  60557759324, #  local_start 1919-12-31 23:48:44 (Wed)
  62640604800, #    local_end 1986-01-01 00:00:00 (Wed)
  19800,
  0,
  'IST',
      ],
      [
  62640585000, #    utc_start 1985-12-31 18:30:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  62640605700, #  local_start 1986-01-01 00:15:00 (Wed)
  DateTime::TimeZone::INFINITY, #    local_end
  20700,
  0,
  'NPT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_KATHMANDU

    $main::fatpacked{"DateTime/TimeZone/Asia/Khandyga.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_KHANDYGA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Khandyga;
  $DateTime::TimeZone::Asia::Khandyga::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Khandyga::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60556258667, #      utc_end 1919-12-14 14:57:47 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60556291200, #    local_end 1919-12-15 00:00:00 (Mon)
  32533,
  0,
  'LMT',
      ],
      [
  60556258667, #    utc_start 1919-12-14 14:57:47 (Sun)
  60888124800, #      utc_end 1930-06-20 16:00:00 (Fri)
  60556287467, #  local_start 1919-12-14 22:57:47 (Sun)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  28800,
  0,
  'YAKT',
      ],
      [
  60888124800, #    utc_start 1930-06-20 16:00:00 (Fri)
  62490582000, #      utc_end 1981-03-31 15:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  32400,
  0,
  'YAKT',
      ],
      [
  62490582000, #    utc_start 1981-03-31 15:00:00 (Tue)
  62506389600, #      utc_end 1981-09-30 14:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  36000,
  1,
  'YAKST',
      ],
      [
  62506389600, #    utc_start 1981-09-30 14:00:00 (Wed)
  62522118000, #      utc_end 1982-03-31 15:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  32400,
  0,
  'YAKT',
      ],
      [
  62522118000, #    utc_start 1982-03-31 15:00:00 (Wed)
  62537925600, #      utc_end 1982-09-30 14:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  36000,
  1,
  'YAKST',
      ],
      [
  62537925600, #    utc_start 1982-09-30 14:00:00 (Thu)
  62553654000, #      utc_end 1983-03-31 15:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  32400,
  0,
  'YAKT',
      ],
      [
  62553654000, #    utc_start 1983-03-31 15:00:00 (Thu)
  62569461600, #      utc_end 1983-09-30 14:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  36000,
  1,
  'YAKST',
      ],
      [
  62569461600, #    utc_start 1983-09-30 14:00:00 (Fri)
  62585276400, #      utc_end 1984-03-31 15:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62585276400, #    utc_start 1984-03-31 15:00:00 (Sat)
  62601008400, #      utc_end 1984-09-29 17:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62601008400, #    utc_start 1984-09-29 17:00:00 (Sat)
  62616733200, #      utc_end 1985-03-30 17:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62616733200, #    utc_start 1985-03-30 17:00:00 (Sat)
  62632458000, #      utc_end 1985-09-28 17:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62632458000, #    utc_start 1985-09-28 17:00:00 (Sat)
  62648182800, #      utc_end 1986-03-29 17:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62648182800, #    utc_start 1986-03-29 17:00:00 (Sat)
  62663907600, #      utc_end 1986-09-27 17:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62663907600, #    utc_start 1986-09-27 17:00:00 (Sat)
  62679632400, #      utc_end 1987-03-28 17:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62679632400, #    utc_start 1987-03-28 17:00:00 (Sat)
  62695357200, #      utc_end 1987-09-26 17:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62695357200, #    utc_start 1987-09-26 17:00:00 (Sat)
  62711082000, #      utc_end 1988-03-26 17:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62711082000, #    utc_start 1988-03-26 17:00:00 (Sat)
  62726806800, #      utc_end 1988-09-24 17:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62726806800, #    utc_start 1988-09-24 17:00:00 (Sat)
  62742531600, #      utc_end 1989-03-25 17:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62742531600, #    utc_start 1989-03-25 17:00:00 (Sat)
  62758256400, #      utc_end 1989-09-23 17:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62758256400, #    utc_start 1989-09-23 17:00:00 (Sat)
  62773981200, #      utc_end 1990-03-24 17:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62773981200, #    utc_start 1990-03-24 17:00:00 (Sat)
  62790310800, #      utc_end 1990-09-29 17:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62790310800, #    utc_start 1990-09-29 17:00:00 (Sat)
  62806035600, #      utc_end 1991-03-30 17:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62806035600, #    utc_start 1991-03-30 17:00:00 (Sat)
  62821764000, #      utc_end 1991-09-28 18:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  32400,
  1,
  'YAKST',
      ],
      [
  62821764000, #    utc_start 1991-09-28 18:00:00 (Sat)
  62831440800, #      utc_end 1992-01-18 18:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  28800,
  0,
  'YAKT',
      ],
      [
  62831440800, #    utc_start 1992-01-18 18:00:00 (Sat)
  62837485200, #      utc_end 1992-03-28 17:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62837485200, #    utc_start 1992-03-28 17:00:00 (Sat)
  62853210000, #      utc_end 1992-09-26 17:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62853210000, #    utc_start 1992-09-26 17:00:00 (Sat)
  62868934800, #      utc_end 1993-03-27 17:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62868934800, #    utc_start 1993-03-27 17:00:00 (Sat)
  62884659600, #      utc_end 1993-09-25 17:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62884659600, #    utc_start 1993-09-25 17:00:00 (Sat)
  62900384400, #      utc_end 1994-03-26 17:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62900384400, #    utc_start 1994-03-26 17:00:00 (Sat)
  62916109200, #      utc_end 1994-09-24 17:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62916109200, #    utc_start 1994-09-24 17:00:00 (Sat)
  62931834000, #      utc_end 1995-03-25 17:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62931834000, #    utc_start 1995-03-25 17:00:00 (Sat)
  62947558800, #      utc_end 1995-09-23 17:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62947558800, #    utc_start 1995-09-23 17:00:00 (Sat)
  62963888400, #      utc_end 1996-03-30 17:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62963888400, #    utc_start 1996-03-30 17:00:00 (Sat)
  62982032400, #      utc_end 1996-10-26 17:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62982032400, #    utc_start 1996-10-26 17:00:00 (Sat)
  62995338000, #      utc_end 1997-03-29 17:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62995338000, #    utc_start 1997-03-29 17:00:00 (Sat)
  63013482000, #      utc_end 1997-10-25 17:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63013482000, #    utc_start 1997-10-25 17:00:00 (Sat)
  63026787600, #      utc_end 1998-03-28 17:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63026787600, #    utc_start 1998-03-28 17:00:00 (Sat)
  63044931600, #      utc_end 1998-10-24 17:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63044931600, #    utc_start 1998-10-24 17:00:00 (Sat)
  63058237200, #      utc_end 1999-03-27 17:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63058237200, #    utc_start 1999-03-27 17:00:00 (Sat)
  63076986000, #      utc_end 1999-10-30 17:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63076986000, #    utc_start 1999-10-30 17:00:00 (Sat)
  63089686800, #      utc_end 2000-03-25 17:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63089686800, #    utc_start 2000-03-25 17:00:00 (Sat)
  63108435600, #      utc_end 2000-10-28 17:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63108435600, #    utc_start 2000-10-28 17:00:00 (Sat)
  63121136400, #      utc_end 2001-03-24 17:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63121136400, #    utc_start 2001-03-24 17:00:00 (Sat)
  63139885200, #      utc_end 2001-10-27 17:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63139885200, #    utc_start 2001-10-27 17:00:00 (Sat)
  63153190800, #      utc_end 2002-03-30 17:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63153190800, #    utc_start 2002-03-30 17:00:00 (Sat)
  63171334800, #      utc_end 2002-10-26 17:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63171334800, #    utc_start 2002-10-26 17:00:00 (Sat)
  63184640400, #      utc_end 2003-03-29 17:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63184640400, #    utc_start 2003-03-29 17:00:00 (Sat)
  63202784400, #      utc_end 2003-10-25 17:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63202784400, #    utc_start 2003-10-25 17:00:00 (Sat)
  63208566000, #      utc_end 2003-12-31 15:00:00 (Wed)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63208598400, #    local_end 2004-01-01 00:00:00 (Thu)
  32400,
  0,
  'YAKT',
      ],
      [
  63208566000, #    utc_start 2003-12-31 15:00:00 (Wed)
  63216086400, #      utc_end 2004-03-27 16:00:00 (Sat)
  63208602000, #  local_start 2004-01-01 01:00:00 (Thu)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63216086400, #    utc_start 2004-03-27 16:00:00 (Sat)
  63234835200, #      utc_end 2004-10-30 16:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63234835200, #    utc_start 2004-10-30 16:00:00 (Sat)
  63247536000, #      utc_end 2005-03-26 16:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63247536000, #    utc_start 2005-03-26 16:00:00 (Sat)
  63266284800, #      utc_end 2005-10-29 16:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63266284800, #    utc_start 2005-10-29 16:00:00 (Sat)
  63278985600, #      utc_end 2006-03-25 16:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63278985600, #    utc_start 2006-03-25 16:00:00 (Sat)
  63297734400, #      utc_end 2006-10-28 16:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63297734400, #    utc_start 2006-10-28 16:00:00 (Sat)
  63310435200, #      utc_end 2007-03-24 16:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63310435200, #    utc_start 2007-03-24 16:00:00 (Sat)
  63329184000, #      utc_end 2007-10-27 16:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63329184000, #    utc_start 2007-10-27 16:00:00 (Sat)
  63342489600, #      utc_end 2008-03-29 16:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63342489600, #    utc_start 2008-03-29 16:00:00 (Sat)
  63360633600, #      utc_end 2008-10-25 16:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63360633600, #    utc_start 2008-10-25 16:00:00 (Sat)
  63373939200, #      utc_end 2009-03-28 16:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63373939200, #    utc_start 2009-03-28 16:00:00 (Sat)
  63392083200, #      utc_end 2009-10-24 16:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63392083200, #    utc_start 2009-10-24 16:00:00 (Sat)
  63405388800, #      utc_end 2010-03-27 16:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63405388800, #    utc_start 2010-03-27 16:00:00 (Sat)
  63424137600, #      utc_end 2010-10-30 16:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63424137600, #    utc_start 2010-10-30 16:00:00 (Sat)
  63436838400, #      utc_end 2011-03-26 16:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63436838400, #    utc_start 2011-03-26 16:00:00 (Sat)
  63451515600, #      utc_end 2011-09-12 13:00:00 (Mon)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63451555200, #    local_end 2011-09-13 00:00:00 (Tue)
  39600,
  0,
  'VLAT',
      ],
      [
  63451515600, #    utc_start 2011-09-12 13:00:00 (Mon)
  63549936000, #      utc_end 2014-10-25 16:00:00 (Sat)
  63451551600, #  local_start 2011-09-12 23:00:00 (Mon)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  36000,
  0,
  'YAKT',
      ],
      [
  63549936000, #    utc_start 2014-10-25 16:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  32400,
  0,
  'YAKT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_KHANDYGA

    $main::fatpacked{"DateTime/TimeZone/Asia/Kolkata.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_KOLKATA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Kolkata;
  $DateTime::TimeZone::Asia::Kolkata::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Kolkata::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295521192, #      utc_end 1879-12-31 18:06:32 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  21208,
  0,
  'LMT',
      ],
      [
  59295521192, #    utc_start 1879-12-31 18:06:32 (Wed)
  61244100400, #      utc_end 1941-09-30 18:06:40 (Tue)
  59295542392, #  local_start 1879-12-31 23:59:52 (Wed)
  61244121600, #    local_end 1941-10-01 00:00:00 (Wed)
  21200,
  0,
  'HMT',
      ],
      [
  61244100400, #    utc_start 1941-09-30 18:06:40 (Tue)
  61263624600, #      utc_end 1942-05-14 17:30:00 (Thu)
  61244123800, #  local_start 1941-10-01 00:36:40 (Wed)
  61263648000, #    local_end 1942-05-15 00:00:00 (Fri)
  23400,
  0,
  'BURT',
      ],
      [
  61263624600, #    utc_start 1942-05-14 17:30:00 (Thu)
  61273045800, #      utc_end 1942-08-31 18:30:00 (Mon)
  61263644400, #  local_start 1942-05-14 23:00:00 (Thu)
  61273065600, #    local_end 1942-09-01 00:00:00 (Tue)
  19800,
  0,
  'IST',
      ],
      [
  61273045800, #    utc_start 1942-08-31 18:30:00 (Mon)
  61371538200, #      utc_end 1945-10-14 17:30:00 (Sun)
  61273069200, #  local_start 1942-09-01 01:00:00 (Tue)
  61371561600, #    local_end 1945-10-15 00:00:00 (Mon)
  23400,
  1,
  'IST',
      ],
      [
  61371538200, #    utc_start 1945-10-14 17:30:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  61371558000, #  local_start 1945-10-14 23:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  19800,
  0,
  'IST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {1}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_KOLKATA

    $main::fatpacked{"DateTime/TimeZone/Asia/Krasnoyarsk.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_KRASNOYARSK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Krasnoyarsk;
  $DateTime::TimeZone::Asia::Krasnoyarsk::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Krasnoyarsk::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60558169714, #      utc_end 1920-01-05 17:48:34 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60558192000, #    local_end 1920-01-06 00:00:00 (Tue)
  22286,
  0,
  'LMT',
      ],
      [
  60558169714, #    utc_start 1920-01-05 17:48:34 (Mon)
  60888132000, #      utc_end 1930-06-20 18:00:00 (Fri)
  60558191314, #  local_start 1920-01-05 23:48:34 (Mon)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  21600,
  0,
  'KRAT',
      ],
      [
  60888132000, #    utc_start 1930-06-20 18:00:00 (Fri)
  62490589200, #      utc_end 1981-03-31 17:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  25200,
  0,
  'KRAT',
      ],
      [
  62490589200, #    utc_start 1981-03-31 17:00:00 (Tue)
  62506396800, #      utc_end 1981-09-30 16:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  28800,
  1,
  'KRAST',
      ],
      [
  62506396800, #    utc_start 1981-09-30 16:00:00 (Wed)
  62522125200, #      utc_end 1982-03-31 17:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  25200,
  0,
  'KRAT',
      ],
      [
  62522125200, #    utc_start 1982-03-31 17:00:00 (Wed)
  62537932800, #      utc_end 1982-09-30 16:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  28800,
  1,
  'KRAST',
      ],
      [
  62537932800, #    utc_start 1982-09-30 16:00:00 (Thu)
  62553661200, #      utc_end 1983-03-31 17:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  25200,
  0,
  'KRAT',
      ],
      [
  62553661200, #    utc_start 1983-03-31 17:00:00 (Thu)
  62569468800, #      utc_end 1983-09-30 16:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  28800,
  1,
  'KRAST',
      ],
      [
  62569468800, #    utc_start 1983-09-30 16:00:00 (Fri)
  62585283600, #      utc_end 1984-03-31 17:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  62585283600, #    utc_start 1984-03-31 17:00:00 (Sat)
  62601015600, #      utc_end 1984-09-29 19:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  62601015600, #    utc_start 1984-09-29 19:00:00 (Sat)
  62616740400, #      utc_end 1985-03-30 19:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  62616740400, #    utc_start 1985-03-30 19:00:00 (Sat)
  62632465200, #      utc_end 1985-09-28 19:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  62632465200, #    utc_start 1985-09-28 19:00:00 (Sat)
  62648190000, #      utc_end 1986-03-29 19:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  62648190000, #    utc_start 1986-03-29 19:00:00 (Sat)
  62663914800, #      utc_end 1986-09-27 19:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  62663914800, #    utc_start 1986-09-27 19:00:00 (Sat)
  62679639600, #      utc_end 1987-03-28 19:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  62679639600, #    utc_start 1987-03-28 19:00:00 (Sat)
  62695364400, #      utc_end 1987-09-26 19:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  62695364400, #    utc_start 1987-09-26 19:00:00 (Sat)
  62711089200, #      utc_end 1988-03-26 19:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  62711089200, #    utc_start 1988-03-26 19:00:00 (Sat)
  62726814000, #      utc_end 1988-09-24 19:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  62726814000, #    utc_start 1988-09-24 19:00:00 (Sat)
  62742538800, #      utc_end 1989-03-25 19:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  62742538800, #    utc_start 1989-03-25 19:00:00 (Sat)
  62758263600, #      utc_end 1989-09-23 19:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  62758263600, #    utc_start 1989-09-23 19:00:00 (Sat)
  62773988400, #      utc_end 1990-03-24 19:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  62773988400, #    utc_start 1990-03-24 19:00:00 (Sat)
  62790318000, #      utc_end 1990-09-29 19:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  62790318000, #    utc_start 1990-09-29 19:00:00 (Sat)
  62806042800, #      utc_end 1991-03-30 19:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  62806042800, #    utc_start 1991-03-30 19:00:00 (Sat)
  62821771200, #      utc_end 1991-09-28 20:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  25200,
  1,
  'KRAST',
      ],
      [
  62821771200, #    utc_start 1991-09-28 20:00:00 (Sat)
  62831448000, #      utc_end 1992-01-18 20:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  21600,
  0,
  'KRAT',
      ],
      [
  62831448000, #    utc_start 1992-01-18 20:00:00 (Sat)
  62837492400, #      utc_end 1992-03-28 19:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  62837492400, #    utc_start 1992-03-28 19:00:00 (Sat)
  62853217200, #      utc_end 1992-09-26 19:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  62853217200, #    utc_start 1992-09-26 19:00:00 (Sat)
  62868942000, #      utc_end 1993-03-27 19:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  62868942000, #    utc_start 1993-03-27 19:00:00 (Sat)
  62884666800, #      utc_end 1993-09-25 19:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  62884666800, #    utc_start 1993-09-25 19:00:00 (Sat)
  62900391600, #      utc_end 1994-03-26 19:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  62900391600, #    utc_start 1994-03-26 19:00:00 (Sat)
  62916116400, #      utc_end 1994-09-24 19:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  62916116400, #    utc_start 1994-09-24 19:00:00 (Sat)
  62931841200, #      utc_end 1995-03-25 19:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  62931841200, #    utc_start 1995-03-25 19:00:00 (Sat)
  62947566000, #      utc_end 1995-09-23 19:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  62947566000, #    utc_start 1995-09-23 19:00:00 (Sat)
  62963895600, #      utc_end 1996-03-30 19:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  62963895600, #    utc_start 1996-03-30 19:00:00 (Sat)
  62982039600, #      utc_end 1996-10-26 19:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  62982039600, #    utc_start 1996-10-26 19:00:00 (Sat)
  62995345200, #      utc_end 1997-03-29 19:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  62995345200, #    utc_start 1997-03-29 19:00:00 (Sat)
  63013489200, #      utc_end 1997-10-25 19:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  63013489200, #    utc_start 1997-10-25 19:00:00 (Sat)
  63026794800, #      utc_end 1998-03-28 19:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  63026794800, #    utc_start 1998-03-28 19:00:00 (Sat)
  63044938800, #      utc_end 1998-10-24 19:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  63044938800, #    utc_start 1998-10-24 19:00:00 (Sat)
  63058244400, #      utc_end 1999-03-27 19:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  63058244400, #    utc_start 1999-03-27 19:00:00 (Sat)
  63076993200, #      utc_end 1999-10-30 19:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  63076993200, #    utc_start 1999-10-30 19:00:00 (Sat)
  63089694000, #      utc_end 2000-03-25 19:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  63089694000, #    utc_start 2000-03-25 19:00:00 (Sat)
  63108442800, #      utc_end 2000-10-28 19:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  63108442800, #    utc_start 2000-10-28 19:00:00 (Sat)
  63121143600, #      utc_end 2001-03-24 19:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  63121143600, #    utc_start 2001-03-24 19:00:00 (Sat)
  63139892400, #      utc_end 2001-10-27 19:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  63139892400, #    utc_start 2001-10-27 19:00:00 (Sat)
  63153198000, #      utc_end 2002-03-30 19:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  63153198000, #    utc_start 2002-03-30 19:00:00 (Sat)
  63171342000, #      utc_end 2002-10-26 19:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  63171342000, #    utc_start 2002-10-26 19:00:00 (Sat)
  63184647600, #      utc_end 2003-03-29 19:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  63184647600, #    utc_start 2003-03-29 19:00:00 (Sat)
  63202791600, #      utc_end 2003-10-25 19:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  63202791600, #    utc_start 2003-10-25 19:00:00 (Sat)
  63216097200, #      utc_end 2004-03-27 19:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  63216097200, #    utc_start 2004-03-27 19:00:00 (Sat)
  63234846000, #      utc_end 2004-10-30 19:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  63234846000, #    utc_start 2004-10-30 19:00:00 (Sat)
  63247546800, #      utc_end 2005-03-26 19:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  63247546800, #    utc_start 2005-03-26 19:00:00 (Sat)
  63266295600, #      utc_end 2005-10-29 19:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  63266295600, #    utc_start 2005-10-29 19:00:00 (Sat)
  63278996400, #      utc_end 2006-03-25 19:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  63278996400, #    utc_start 2006-03-25 19:00:00 (Sat)
  63297745200, #      utc_end 2006-10-28 19:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  63297745200, #    utc_start 2006-10-28 19:00:00 (Sat)
  63310446000, #      utc_end 2007-03-24 19:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  63310446000, #    utc_start 2007-03-24 19:00:00 (Sat)
  63329194800, #      utc_end 2007-10-27 19:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  63329194800, #    utc_start 2007-10-27 19:00:00 (Sat)
  63342500400, #      utc_end 2008-03-29 19:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  63342500400, #    utc_start 2008-03-29 19:00:00 (Sat)
  63360644400, #      utc_end 2008-10-25 19:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  63360644400, #    utc_start 2008-10-25 19:00:00 (Sat)
  63373950000, #      utc_end 2009-03-28 19:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  63373950000, #    utc_start 2009-03-28 19:00:00 (Sat)
  63392094000, #      utc_end 2009-10-24 19:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  63392094000, #    utc_start 2009-10-24 19:00:00 (Sat)
  63405399600, #      utc_end 2010-03-27 19:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  63405399600, #    utc_start 2010-03-27 19:00:00 (Sat)
  63424148400, #      utc_end 2010-10-30 19:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  28800,
  1,
  'KRAST',
      ],
      [
  63424148400, #    utc_start 2010-10-30 19:00:00 (Sat)
  63436849200, #      utc_end 2011-03-26 19:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  25200,
  0,
  'KRAT',
      ],
      [
  63436849200, #    utc_start 2011-03-26 19:00:00 (Sat)
  63549943200, #      utc_end 2014-10-25 18:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  28800,
  0,
  'KRAT',
      ],
      [
  63549943200, #    utc_start 2014-10-25 18:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  25200,
  0,
  'KRAT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_KRASNOYARSK

    $main::fatpacked{"DateTime/TimeZone/Asia/Kuala_Lumpur.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_KUALA_LUMPUR';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Kuala_Lumpur;
  $DateTime::TimeZone::Asia::Kuala_Lumpur::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Kuala_Lumpur::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958205994, #      utc_end 1900-12-31 17:13:14 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  24406,
  0,
  'LMT',
      ],
      [
  59958205994, #    utc_start 1900-12-31 17:13:14 (Mon)
  60097482275, #      utc_end 1905-05-31 17:04:35 (Wed)
  59958230919, #  local_start 1901-01-01 00:08:39 (Tue)
  60097507200, #    local_end 1905-06-01 00:00:00 (Thu)
  24925,
  0,
  'SMT',
      ],
      [
  60097482275, #    utc_start 1905-05-31 17:04:35 (Wed)
  60968048400, #      utc_end 1932-12-31 17:00:00 (Sat)
  60097507475, #  local_start 1905-06-01 00:04:35 (Thu)
  60968073600, #    local_end 1933-01-01 00:00:00 (Sun)
  25200,
  0,
  'MALT',
      ],
      [
  60968048400, #    utc_start 1932-12-31 17:00:00 (Sat)
  61062655200, #      utc_end 1935-12-31 16:40:00 (Tue)
  60968074800, #  local_start 1933-01-01 00:20:00 (Sun)
  61062681600, #    local_end 1936-01-01 00:00:00 (Wed)
  26400,
  1,
  'MALST',
      ],
      [
  61062655200, #    utc_start 1935-12-31 16:40:00 (Tue)
  61241503200, #      utc_end 1941-08-31 16:40:00 (Sun)
  61062681600, #  local_start 1936-01-01 00:00:00 (Wed)
  61241529600, #    local_end 1941-09-01 00:00:00 (Mon)
  26400,
  0,
  'MALT',
      ],
      [
  61241503200, #    utc_start 1941-08-31 16:40:00 (Sun)
  61256017800, #      utc_end 1942-02-15 16:30:00 (Sun)
  61241530200, #  local_start 1941-09-01 00:10:00 (Mon)
  61256044800, #    local_end 1942-02-16 00:00:00 (Mon)
  27000,
  0,
  'MALT',
      ],
      [
  61256017800, #    utc_start 1942-02-15 16:30:00 (Sun)
  61368678000, #      utc_end 1945-09-11 15:00:00 (Tue)
  61256050200, #  local_start 1942-02-16 01:30:00 (Mon)
  61368710400, #    local_end 1945-09-12 00:00:00 (Wed)
  32400,
  0,
  'JST',
      ],
      [
  61368678000, #    utc_start 1945-09-11 15:00:00 (Tue)
  62514347400, #      utc_end 1981-12-31 16:30:00 (Thu)
  61368705000, #  local_start 1945-09-11 22:30:00 (Tue)
  62514374400, #    local_end 1982-01-01 00:00:00 (Fri)
  27000,
  0,
  'MALT',
      ],
      [
  62514347400, #    utc_start 1981-12-31 16:30:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  62514376200, #  local_start 1982-01-01 00:30:00 (Fri)
  DateTime::TimeZone::INFINITY, #    local_end
  28800,
  0,
  'MYT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {1}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_KUALA_LUMPUR

    $main::fatpacked{"DateTime/TimeZone/Asia/Kuching.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_KUCHING';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Kuching;
  $DateTime::TimeZone::Asia::Kuching::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Kuching::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60752219920, #      utc_end 1926-02-28 16:38:40 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60752246400, #    local_end 1926-03-01 00:00:00 (Mon)
  26480,
  0,
  'LMT',
      ],
      [
  60752219920, #    utc_start 1926-02-28 16:38:40 (Sun)
  60968046600, #      utc_end 1932-12-31 16:30:00 (Sat)
  60752246920, #  local_start 1926-03-01 00:08:40 (Mon)
  60968073600, #    local_end 1933-01-01 00:00:00 (Sun)
  27000,
  0,
  'BORT',
      ],
      [
  60968046600, #    utc_start 1932-12-31 16:30:00 (Sat)
  61053235200, #      utc_end 1935-09-13 16:00:00 (Fri)
  60968075400, #  local_start 1933-01-01 00:30:00 (Sun)
  61053264000, #    local_end 1935-09-14 00:00:00 (Sat)
  28800,
  0,
  'BORT',
      ],
      [
  61053235200, #    utc_start 1935-09-13 16:00:00 (Fri)
  61061096400, #      utc_end 1935-12-13 15:40:00 (Fri)
  61053265200, #  local_start 1935-09-14 00:20:00 (Sat)
  61061126400, #    local_end 1935-12-14 00:00:00 (Sat)
  30000,
  1,
  'BORTST',
      ],
      [
  61061096400, #    utc_start 1935-12-13 15:40:00 (Fri)
  61084857600, #      utc_end 1936-09-13 16:00:00 (Sun)
  61061125200, #  local_start 1935-12-13 23:40:00 (Fri)
  61084886400, #    local_end 1936-09-14 00:00:00 (Mon)
  28800,
  0,
  'BORT',
      ],
      [
  61084857600, #    utc_start 1936-09-13 16:00:00 (Sun)
  61092718800, #      utc_end 1936-12-13 15:40:00 (Sun)
  61084887600, #  local_start 1936-09-14 00:20:00 (Mon)
  61092748800, #    local_end 1936-12-14 00:00:00 (Mon)
  30000,
  1,
  'BORTST',
      ],
      [
  61092718800, #    utc_start 1936-12-13 15:40:00 (Sun)
  61116393600, #      utc_end 1937-09-13 16:00:00 (Mon)
  61092747600, #  local_start 1936-12-13 23:40:00 (Sun)
  61116422400, #    local_end 1937-09-14 00:00:00 (Tue)
  28800,
  0,
  'BORT',
      ],
      [
  61116393600, #    utc_start 1937-09-13 16:00:00 (Mon)
  61124254800, #      utc_end 1937-12-13 15:40:00 (Mon)
  61116423600, #  local_start 1937-09-14 00:20:00 (Tue)
  61124284800, #    local_end 1937-12-14 00:00:00 (Tue)
  30000,
  1,
  'BORTST',
      ],
      [
  61124254800, #    utc_start 1937-12-13 15:40:00 (Mon)
  61147929600, #      utc_end 1938-09-13 16:00:00 (Tue)
  61124283600, #  local_start 1937-12-13 23:40:00 (Mon)
  61147958400, #    local_end 1938-09-14 00:00:00 (Wed)
  28800,
  0,
  'BORT',
      ],
      [
  61147929600, #    utc_start 1938-09-13 16:00:00 (Tue)
  61155790800, #      utc_end 1938-12-13 15:40:00 (Tue)
  61147959600, #  local_start 1938-09-14 00:20:00 (Wed)
  61155820800, #    local_end 1938-12-14 00:00:00 (Wed)
  30000,
  1,
  'BORTST',
      ],
      [
  61155790800, #    utc_start 1938-12-13 15:40:00 (Tue)
  61179465600, #      utc_end 1939-09-13 16:00:00 (Wed)
  61155819600, #  local_start 1938-12-13 23:40:00 (Tue)
  61179494400, #    local_end 1939-09-14 00:00:00 (Thu)
  28800,
  0,
  'BORT',
      ],
      [
  61179465600, #    utc_start 1939-09-13 16:00:00 (Wed)
  61187326800, #      utc_end 1939-12-13 15:40:00 (Wed)
  61179495600, #  local_start 1939-09-14 00:20:00 (Thu)
  61187356800, #    local_end 1939-12-14 00:00:00 (Thu)
  30000,
  1,
  'BORTST',
      ],
      [
  61187326800, #    utc_start 1939-12-13 15:40:00 (Wed)
  61211088000, #      utc_end 1940-09-13 16:00:00 (Fri)
  61187355600, #  local_start 1939-12-13 23:40:00 (Wed)
  61211116800, #    local_end 1940-09-14 00:00:00 (Sat)
  28800,
  0,
  'BORT',
      ],
      [
  61211088000, #    utc_start 1940-09-13 16:00:00 (Fri)
  61218949200, #      utc_end 1940-12-13 15:40:00 (Fri)
  61211118000, #  local_start 1940-09-14 00:20:00 (Sat)
  61218979200, #    local_end 1940-12-14 00:00:00 (Sat)
  30000,
  1,
  'BORTST',
      ],
      [
  61218949200, #    utc_start 1940-12-13 15:40:00 (Fri)
  61242624000, #      utc_end 1941-09-13 16:00:00 (Sat)
  61218978000, #  local_start 1940-12-13 23:40:00 (Fri)
  61242652800, #    local_end 1941-09-14 00:00:00 (Sun)
  28800,
  0,
  'BORT',
      ],
      [
  61242624000, #    utc_start 1941-09-13 16:00:00 (Sat)
  61250485200, #      utc_end 1941-12-13 15:40:00 (Sat)
  61242654000, #  local_start 1941-09-14 00:20:00 (Sun)
  61250515200, #    local_end 1941-12-14 00:00:00 (Sun)
  30000,
  1,
  'BORTST',
      ],
      [
  61250485200, #    utc_start 1941-12-13 15:40:00 (Sat)
  61256016000, #      utc_end 1942-02-15 16:00:00 (Sun)
  61250514000, #  local_start 1941-12-13 23:40:00 (Sat)
  61256044800, #    local_end 1942-02-16 00:00:00 (Mon)
  28800,
  0,
  'BORT',
      ],
      [
  61256016000, #    utc_start 1942-02-15 16:00:00 (Sun)
  61368678000, #      utc_end 1945-09-11 15:00:00 (Tue)
  61256048400, #  local_start 1942-02-16 01:00:00 (Mon)
  61368710400, #    local_end 1945-09-12 00:00:00 (Wed)
  32400,
  0,
  'JST',
      ],
      [
  61368678000, #    utc_start 1945-09-11 15:00:00 (Tue)
  62514345600, #      utc_end 1981-12-31 16:00:00 (Thu)
  61368706800, #  local_start 1945-09-11 23:00:00 (Tue)
  62514374400, #    local_end 1982-01-01 00:00:00 (Fri)
  28800,
  0,
  'BORT',
      ],
      [
  62514345600, #    utc_start 1981-12-31 16:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  62514374400, #  local_start 1982-01-01 00:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #    local_end
  28800,
  0,
  'MYT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {7}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_KUCHING

    $main::fatpacked{"DateTime/TimeZone/Asia/Macau.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_MACAU';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Macau;
  $DateTime::TimeZone::Asia::Macau::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Macau::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60305271940, #      utc_end 1911-12-31 16:25:40 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60305299200, #    local_end 1912-01-01 00:00:00 (Mon)
  27260,
  0,
  'LMT',
      ],
      [
  60305271940, #    utc_start 1911-12-31 16:25:40 (Sun)
  61858323000, #      utc_end 1961-03-18 19:30:00 (Sat)
  60305300740, #  local_start 1912-01-01 00:25:40 (Mon)
  61858351800, #    local_end 1961-03-19 03:30:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  61858323000, #    utc_start 1961-03-18 19:30:00 (Sat)
  61878277800, #      utc_end 1961-11-04 18:30:00 (Sat)
  61858355400, #  local_start 1961-03-19 04:30:00 (Sun)
  61878310200, #    local_end 1961-11-05 03:30:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  61878277800, #    utc_start 1961-11-04 18:30:00 (Sat)
  61889772600, #      utc_end 1962-03-17 19:30:00 (Sat)
  61878306600, #  local_start 1961-11-05 02:30:00 (Sun)
  61889801400, #    local_end 1962-03-18 03:30:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  61889772600, #    utc_start 1962-03-17 19:30:00 (Sat)
  61909727400, #      utc_end 1962-11-03 18:30:00 (Sat)
  61889805000, #  local_start 1962-03-18 04:30:00 (Sun)
  61909759800, #    local_end 1962-11-04 03:30:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  61909727400, #    utc_start 1962-11-03 18:30:00 (Sat)
  61921209600, #      utc_end 1963-03-16 16:00:00 (Sat)
  61909756200, #  local_start 1962-11-04 02:30:00 (Sun)
  61921238400, #    local_end 1963-03-17 00:00:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  61921209600, #    utc_start 1963-03-16 16:00:00 (Sat)
  61941177000, #      utc_end 1963-11-02 18:30:00 (Sat)
  61921242000, #  local_start 1963-03-17 01:00:00 (Sun)
  61941209400, #    local_end 1963-11-03 03:30:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  61941177000, #    utc_start 1963-11-02 18:30:00 (Sat)
  61953276600, #      utc_end 1964-03-21 19:30:00 (Sat)
  61941205800, #  local_start 1963-11-03 02:30:00 (Sun)
  61953305400, #    local_end 1964-03-22 03:30:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  61953276600, #    utc_start 1964-03-21 19:30:00 (Sat)
  61972626600, #      utc_end 1964-10-31 18:30:00 (Sat)
  61953309000, #  local_start 1964-03-22 04:30:00 (Sun)
  61972659000, #    local_end 1964-11-01 03:30:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  61972626600, #    utc_start 1964-10-31 18:30:00 (Sat)
  61984713600, #      utc_end 1965-03-20 16:00:00 (Sat)
  61972655400, #  local_start 1964-11-01 02:30:00 (Sun)
  61984742400, #    local_end 1965-03-21 00:00:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  61984713600, #    utc_start 1965-03-20 16:00:00 (Sat)
  62004063600, #      utc_end 1965-10-30 15:00:00 (Sat)
  61984746000, #  local_start 1965-03-21 01:00:00 (Sun)
  62004096000, #    local_end 1965-10-31 00:00:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  62004063600, #    utc_start 1965-10-30 15:00:00 (Sat)
  62018595000, #      utc_end 1966-04-16 19:30:00 (Sat)
  62004092400, #  local_start 1965-10-30 23:00:00 (Sat)
  62018623800, #    local_end 1966-04-17 03:30:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  62018595000, #    utc_start 1966-04-16 19:30:00 (Sat)
  62034316200, #      utc_end 1966-10-15 18:30:00 (Sat)
  62018627400, #  local_start 1966-04-17 04:30:00 (Sun)
  62034348600, #    local_end 1966-10-16 03:30:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  62034316200, #    utc_start 1966-10-15 18:30:00 (Sat)
  62050044600, #      utc_end 1967-04-15 19:30:00 (Sat)
  62034345000, #  local_start 1966-10-16 02:30:00 (Sun)
  62050073400, #    local_end 1967-04-16 03:30:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  62050044600, #    utc_start 1967-04-15 19:30:00 (Sat)
  62066370600, #      utc_end 1967-10-21 18:30:00 (Sat)
  62050077000, #  local_start 1967-04-16 04:30:00 (Sun)
  62066403000, #    local_end 1967-10-22 03:30:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  62066370600, #    utc_start 1967-10-21 18:30:00 (Sat)
  62082099000, #      utc_end 1968-04-20 19:30:00 (Sat)
  62066399400, #  local_start 1967-10-22 02:30:00 (Sun)
  62082127800, #    local_end 1968-04-21 03:30:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  62082099000, #    utc_start 1968-04-20 19:30:00 (Sat)
  62097820200, #      utc_end 1968-10-19 18:30:00 (Sat)
  62082131400, #  local_start 1968-04-21 04:30:00 (Sun)
  62097852600, #    local_end 1968-10-20 03:30:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  62097820200, #    utc_start 1968-10-19 18:30:00 (Sat)
  62113548600, #      utc_end 1969-04-19 19:30:00 (Sat)
  62097849000, #  local_start 1968-10-20 02:30:00 (Sun)
  62113577400, #    local_end 1969-04-20 03:30:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  62113548600, #    utc_start 1969-04-19 19:30:00 (Sat)
  62129269800, #      utc_end 1969-10-18 18:30:00 (Sat)
  62113581000, #  local_start 1969-04-20 04:30:00 (Sun)
  62129302200, #    local_end 1969-10-19 03:30:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  62129269800, #    utc_start 1969-10-18 18:30:00 (Sat)
  62144998200, #      utc_end 1970-04-18 19:30:00 (Sat)
  62129298600, #  local_start 1969-10-19 02:30:00 (Sun)
  62145027000, #    local_end 1970-04-19 03:30:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  62144998200, #    utc_start 1970-04-18 19:30:00 (Sat)
  62160719400, #      utc_end 1970-10-17 18:30:00 (Sat)
  62145030600, #  local_start 1970-04-19 04:30:00 (Sun)
  62160751800, #    local_end 1970-10-18 03:30:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  62160719400, #    utc_start 1970-10-17 18:30:00 (Sat)
  62176447800, #      utc_end 1971-04-17 19:30:00 (Sat)
  62160748200, #  local_start 1970-10-18 02:30:00 (Sun)
  62176476600, #    local_end 1971-04-18 03:30:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  62176447800, #    utc_start 1971-04-17 19:30:00 (Sat)
  62192169000, #      utc_end 1971-10-16 18:30:00 (Sat)
  62176480200, #  local_start 1971-04-18 04:30:00 (Sun)
  62192201400, #    local_end 1971-10-17 03:30:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  62192169000, #    utc_start 1971-10-16 18:30:00 (Sat)
  62207884800, #      utc_end 1972-04-15 16:00:00 (Sat)
  62192197800, #  local_start 1971-10-17 02:30:00 (Sun)
  62207913600, #    local_end 1972-04-16 00:00:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  62207884800, #    utc_start 1972-04-15 16:00:00 (Sat)
  62223606000, #      utc_end 1972-10-14 15:00:00 (Sat)
  62207917200, #  local_start 1972-04-16 01:00:00 (Sun)
  62223638400, #    local_end 1972-10-15 00:00:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  62223606000, #    utc_start 1972-10-14 15:00:00 (Sat)
  62239334400, #      utc_end 1973-04-14 16:00:00 (Sat)
  62223634800, #  local_start 1972-10-14 23:00:00 (Sat)
  62239363200, #    local_end 1973-04-15 00:00:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  62239334400, #    utc_start 1973-04-14 16:00:00 (Sat)
  62255660400, #      utc_end 1973-10-20 15:00:00 (Sat)
  62239366800, #  local_start 1973-04-15 01:00:00 (Sun)
  62255692800, #    local_end 1973-10-21 00:00:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  62255660400, #    utc_start 1973-10-20 15:00:00 (Sat)
  62271388800, #      utc_end 1974-04-20 16:00:00 (Sat)
  62255689200, #  local_start 1973-10-20 23:00:00 (Sat)
  62271417600, #    local_end 1974-04-21 00:00:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  62271388800, #    utc_start 1974-04-20 16:00:00 (Sat)
  62287122600, #      utc_end 1974-10-19 18:30:00 (Sat)
  62271421200, #  local_start 1974-04-21 01:00:00 (Sun)
  62287155000, #    local_end 1974-10-20 03:30:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  62287122600, #    utc_start 1974-10-19 18:30:00 (Sat)
  62302851000, #      utc_end 1975-04-19 19:30:00 (Sat)
  62287151400, #  local_start 1974-10-20 02:30:00 (Sun)
  62302879800, #    local_end 1975-04-20 03:30:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  62302851000, #    utc_start 1975-04-19 19:30:00 (Sat)
  62318572200, #      utc_end 1975-10-18 18:30:00 (Sat)
  62302883400, #  local_start 1975-04-20 04:30:00 (Sun)
  62318604600, #    local_end 1975-10-19 03:30:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  62318572200, #    utc_start 1975-10-18 18:30:00 (Sat)
  62334300600, #      utc_end 1976-04-17 19:30:00 (Sat)
  62318601000, #  local_start 1975-10-19 02:30:00 (Sun)
  62334329400, #    local_end 1976-04-18 03:30:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  62334300600, #    utc_start 1976-04-17 19:30:00 (Sat)
  62350021800, #      utc_end 1976-10-16 18:30:00 (Sat)
  62334333000, #  local_start 1976-04-18 04:30:00 (Sun)
  62350054200, #    local_end 1976-10-17 03:30:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  62350021800, #    utc_start 1976-10-16 18:30:00 (Sat)
  62365750200, #      utc_end 1977-04-16 19:30:00 (Sat)
  62350050600, #  local_start 1976-10-17 02:30:00 (Sun)
  62365779000, #    local_end 1977-04-17 03:30:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  62365750200, #    utc_start 1977-04-16 19:30:00 (Sat)
  62381471400, #      utc_end 1977-10-15 18:30:00 (Sat)
  62365782600, #  local_start 1977-04-17 04:30:00 (Sun)
  62381503800, #    local_end 1977-10-16 03:30:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  62381471400, #    utc_start 1977-10-15 18:30:00 (Sat)
  62397187200, #      utc_end 1978-04-15 16:00:00 (Sat)
  62381500200, #  local_start 1977-10-16 02:30:00 (Sun)
  62397216000, #    local_end 1978-04-16 00:00:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  62397187200, #    utc_start 1978-04-15 16:00:00 (Sat)
  62412908400, #      utc_end 1978-10-14 15:00:00 (Sat)
  62397219600, #  local_start 1978-04-16 01:00:00 (Sun)
  62412940800, #    local_end 1978-10-15 00:00:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  62412908400, #    utc_start 1978-10-14 15:00:00 (Sat)
  62428636800, #      utc_end 1979-04-14 16:00:00 (Sat)
  62412937200, #  local_start 1978-10-14 23:00:00 (Sat)
  62428665600, #    local_end 1979-04-15 00:00:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  62428636800, #    utc_start 1979-04-14 16:00:00 (Sat)
  62444962800, #      utc_end 1979-10-20 15:00:00 (Sat)
  62428669200, #  local_start 1979-04-15 01:00:00 (Sun)
  62444995200, #    local_end 1979-10-21 00:00:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  62444962800, #    utc_start 1979-10-20 15:00:00 (Sat)
  62460691200, #      utc_end 1980-04-19 16:00:00 (Sat)
  62444991600, #  local_start 1979-10-20 23:00:00 (Sat)
  62460720000, #    local_end 1980-04-20 00:00:00 (Sun)
  28800,
  0,
  'MOT',
      ],
      [
  62460691200, #    utc_start 1980-04-19 16:00:00 (Sat)
  62476412400, #      utc_end 1980-10-18 15:00:00 (Sat)
  62460723600, #  local_start 1980-04-20 01:00:00 (Sun)
  62476444800, #    local_end 1980-10-19 00:00:00 (Sun)
  32400,
  1,
  'MOST',
      ],
      [
  62476412400, #    utc_start 1980-10-18 15:00:00 (Sat)
  63081302400, #      utc_end 1999-12-19 16:00:00 (Sun)
  62476441200, #  local_start 1980-10-18 23:00:00 (Sat)
  63081331200, #    local_end 1999-12-20 00:00:00 (Mon)
  28800,
  0,
  'MOT',
      ],
      [
  63081302400, #    utc_start 1999-12-19 16:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63081331200, #  local_start 1999-12-20 00:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  28800,
  0,
  'CST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {20}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_MACAU

    $main::fatpacked{"DateTime/TimeZone/Asia/Magadan.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_MAGADAN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Magadan;
  $DateTime::TimeZone::Asia::Magadan::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Magadan::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694495008, #      utc_end 1924-05-01 13:56:48 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  36192,
  0,
  'LMT',
      ],
      [
  60694495008, #    utc_start 1924-05-01 13:56:48 (Thu)
  60888117600, #      utc_end 1930-06-20 14:00:00 (Fri)
  60694531008, #  local_start 1924-05-01 23:56:48 (Thu)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  36000,
  0,
  'MAGT',
      ],
      [
  60888117600, #    utc_start 1930-06-20 14:00:00 (Fri)
  62490574800, #      utc_end 1981-03-31 13:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  39600,
  0,
  'MAGT',
      ],
      [
  62490574800, #    utc_start 1981-03-31 13:00:00 (Tue)
  62506382400, #      utc_end 1981-09-30 12:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  43200,
  1,
  'MAGST',
      ],
      [
  62506382400, #    utc_start 1981-09-30 12:00:00 (Wed)
  62522110800, #      utc_end 1982-03-31 13:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  39600,
  0,
  'MAGT',
      ],
      [
  62522110800, #    utc_start 1982-03-31 13:00:00 (Wed)
  62537918400, #      utc_end 1982-09-30 12:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  43200,
  1,
  'MAGST',
      ],
      [
  62537918400, #    utc_start 1982-09-30 12:00:00 (Thu)
  62553646800, #      utc_end 1983-03-31 13:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  39600,
  0,
  'MAGT',
      ],
      [
  62553646800, #    utc_start 1983-03-31 13:00:00 (Thu)
  62569454400, #      utc_end 1983-09-30 12:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  43200,
  1,
  'MAGST',
      ],
      [
  62569454400, #    utc_start 1983-09-30 12:00:00 (Fri)
  62585269200, #      utc_end 1984-03-31 13:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62585269200, #    utc_start 1984-03-31 13:00:00 (Sat)
  62601001200, #      utc_end 1984-09-29 15:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62601001200, #    utc_start 1984-09-29 15:00:00 (Sat)
  62616726000, #      utc_end 1985-03-30 15:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62616726000, #    utc_start 1985-03-30 15:00:00 (Sat)
  62632450800, #      utc_end 1985-09-28 15:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62632450800, #    utc_start 1985-09-28 15:00:00 (Sat)
  62648175600, #      utc_end 1986-03-29 15:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62648175600, #    utc_start 1986-03-29 15:00:00 (Sat)
  62663900400, #      utc_end 1986-09-27 15:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62663900400, #    utc_start 1986-09-27 15:00:00 (Sat)
  62679625200, #      utc_end 1987-03-28 15:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62679625200, #    utc_start 1987-03-28 15:00:00 (Sat)
  62695350000, #      utc_end 1987-09-26 15:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62695350000, #    utc_start 1987-09-26 15:00:00 (Sat)
  62711074800, #      utc_end 1988-03-26 15:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62711074800, #    utc_start 1988-03-26 15:00:00 (Sat)
  62726799600, #      utc_end 1988-09-24 15:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62726799600, #    utc_start 1988-09-24 15:00:00 (Sat)
  62742524400, #      utc_end 1989-03-25 15:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62742524400, #    utc_start 1989-03-25 15:00:00 (Sat)
  62758249200, #      utc_end 1989-09-23 15:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62758249200, #    utc_start 1989-09-23 15:00:00 (Sat)
  62773974000, #      utc_end 1990-03-24 15:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62773974000, #    utc_start 1990-03-24 15:00:00 (Sat)
  62790303600, #      utc_end 1990-09-29 15:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62790303600, #    utc_start 1990-09-29 15:00:00 (Sat)
  62806028400, #      utc_end 1991-03-30 15:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62806028400, #    utc_start 1991-03-30 15:00:00 (Sat)
  62821756800, #      utc_end 1991-09-28 16:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  39600,
  1,
  'MAGST',
      ],
      [
  62821756800, #    utc_start 1991-09-28 16:00:00 (Sat)
  62831433600, #      utc_end 1992-01-18 16:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  36000,
  0,
  'MAGT',
      ],
      [
  62831433600, #    utc_start 1992-01-18 16:00:00 (Sat)
  62837478000, #      utc_end 1992-03-28 15:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62837478000, #    utc_start 1992-03-28 15:00:00 (Sat)
  62853202800, #      utc_end 1992-09-26 15:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62853202800, #    utc_start 1992-09-26 15:00:00 (Sat)
  62868927600, #      utc_end 1993-03-27 15:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62868927600, #    utc_start 1993-03-27 15:00:00 (Sat)
  62884652400, #      utc_end 1993-09-25 15:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62884652400, #    utc_start 1993-09-25 15:00:00 (Sat)
  62900377200, #      utc_end 1994-03-26 15:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62900377200, #    utc_start 1994-03-26 15:00:00 (Sat)
  62916102000, #      utc_end 1994-09-24 15:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62916102000, #    utc_start 1994-09-24 15:00:00 (Sat)
  62931826800, #      utc_end 1995-03-25 15:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62931826800, #    utc_start 1995-03-25 15:00:00 (Sat)
  62947551600, #      utc_end 1995-09-23 15:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62947551600, #    utc_start 1995-09-23 15:00:00 (Sat)
  62963881200, #      utc_end 1996-03-30 15:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62963881200, #    utc_start 1996-03-30 15:00:00 (Sat)
  62982025200, #      utc_end 1996-10-26 15:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62982025200, #    utc_start 1996-10-26 15:00:00 (Sat)
  62995330800, #      utc_end 1997-03-29 15:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62995330800, #    utc_start 1997-03-29 15:00:00 (Sat)
  63013474800, #      utc_end 1997-10-25 15:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63013474800, #    utc_start 1997-10-25 15:00:00 (Sat)
  63026780400, #      utc_end 1998-03-28 15:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63026780400, #    utc_start 1998-03-28 15:00:00 (Sat)
  63044924400, #      utc_end 1998-10-24 15:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63044924400, #    utc_start 1998-10-24 15:00:00 (Sat)
  63058230000, #      utc_end 1999-03-27 15:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63058230000, #    utc_start 1999-03-27 15:00:00 (Sat)
  63076978800, #      utc_end 1999-10-30 15:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63076978800, #    utc_start 1999-10-30 15:00:00 (Sat)
  63089679600, #      utc_end 2000-03-25 15:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63089679600, #    utc_start 2000-03-25 15:00:00 (Sat)
  63108428400, #      utc_end 2000-10-28 15:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63108428400, #    utc_start 2000-10-28 15:00:00 (Sat)
  63121129200, #      utc_end 2001-03-24 15:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63121129200, #    utc_start 2001-03-24 15:00:00 (Sat)
  63139878000, #      utc_end 2001-10-27 15:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63139878000, #    utc_start 2001-10-27 15:00:00 (Sat)
  63153183600, #      utc_end 2002-03-30 15:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63153183600, #    utc_start 2002-03-30 15:00:00 (Sat)
  63171327600, #      utc_end 2002-10-26 15:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63171327600, #    utc_start 2002-10-26 15:00:00 (Sat)
  63184633200, #      utc_end 2003-03-29 15:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63184633200, #    utc_start 2003-03-29 15:00:00 (Sat)
  63202777200, #      utc_end 2003-10-25 15:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63202777200, #    utc_start 2003-10-25 15:00:00 (Sat)
  63216082800, #      utc_end 2004-03-27 15:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63216082800, #    utc_start 2004-03-27 15:00:00 (Sat)
  63234831600, #      utc_end 2004-10-30 15:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63234831600, #    utc_start 2004-10-30 15:00:00 (Sat)
  63247532400, #      utc_end 2005-03-26 15:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63247532400, #    utc_start 2005-03-26 15:00:00 (Sat)
  63266281200, #      utc_end 2005-10-29 15:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63266281200, #    utc_start 2005-10-29 15:00:00 (Sat)
  63278982000, #      utc_end 2006-03-25 15:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63278982000, #    utc_start 2006-03-25 15:00:00 (Sat)
  63297730800, #      utc_end 2006-10-28 15:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63297730800, #    utc_start 2006-10-28 15:00:00 (Sat)
  63310431600, #      utc_end 2007-03-24 15:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63310431600, #    utc_start 2007-03-24 15:00:00 (Sat)
  63329180400, #      utc_end 2007-10-27 15:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63329180400, #    utc_start 2007-10-27 15:00:00 (Sat)
  63342486000, #      utc_end 2008-03-29 15:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63342486000, #    utc_start 2008-03-29 15:00:00 (Sat)
  63360630000, #      utc_end 2008-10-25 15:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63360630000, #    utc_start 2008-10-25 15:00:00 (Sat)
  63373935600, #      utc_end 2009-03-28 15:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63373935600, #    utc_start 2009-03-28 15:00:00 (Sat)
  63392079600, #      utc_end 2009-10-24 15:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63392079600, #    utc_start 2009-10-24 15:00:00 (Sat)
  63405385200, #      utc_end 2010-03-27 15:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63405385200, #    utc_start 2010-03-27 15:00:00 (Sat)
  63424134000, #      utc_end 2010-10-30 15:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63424134000, #    utc_start 2010-10-30 15:00:00 (Sat)
  63436834800, #      utc_end 2011-03-26 15:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63436834800, #    utc_start 2011-03-26 15:00:00 (Sat)
  63549928800, #      utc_end 2014-10-25 14:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  43200,
  0,
  'MAGT',
      ],
      [
  63549928800, #    utc_start 2014-10-25 14:00:00 (Sat)
  63597110400, #      utc_end 2016-04-23 16:00:00 (Sat)
  63549964800, #  local_start 2014-10-26 00:00:00 (Sun)
  63597146400, #    local_end 2016-04-24 02:00:00 (Sun)
  36000,
  0,
  'MAGT',
      ],
      [
  63597110400, #    utc_start 2016-04-23 16:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63597150000, #  local_start 2016-04-24 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  39600,
  0,
  'MAGT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_MAGADAN

    $main::fatpacked{"DateTime/TimeZone/Asia/Makassar.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_MAKASSAR';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Makassar;
  $DateTime::TimeZone::Asia::Makassar::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Makassar::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60557731344, #      utc_end 1919-12-31 16:02:24 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60557760000, #    local_end 1920-01-01 00:00:00 (Thu)
  28656,
  0,
  'LMT',
      ],
      [
  60557731344, #    utc_start 1919-12-31 16:02:24 (Wed)
  60962774544, #      utc_end 1932-10-31 16:02:24 (Mon)
  60557760000, #  local_start 1920-01-01 00:00:00 (Thu)
  60962803200, #    local_end 1932-11-01 00:00:00 (Tue)
  28656,
  0,
  'MMT',
      ],
      [
  60962774544, #    utc_start 1932-10-31 16:02:24 (Mon)
  61255411200, #      utc_end 1942-02-08 16:00:00 (Sun)
  60962803344, #  local_start 1932-11-01 00:02:24 (Tue)
  61255440000, #    local_end 1942-02-09 00:00:00 (Mon)
  28800,
  0,
  'WITA',
      ],
      [
  61255411200, #    utc_start 1942-02-08 16:00:00 (Sun)
  61369628400, #      utc_end 1945-09-22 15:00:00 (Sat)
  61255443600, #  local_start 1942-02-09 01:00:00 (Mon)
  61369660800, #    local_end 1945-09-23 00:00:00 (Sun)
  32400,
  0,
  'JST',
      ],
      [
  61369628400, #    utc_start 1945-09-22 15:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  61369657200, #  local_start 1945-09-22 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  28800,
  0,
  'WITA',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_MAKASSAR

    $main::fatpacked{"DateTime/TimeZone/Asia/Manila.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_MANILA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Manila;
  $DateTime::TimeZone::Asia::Manila::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Manila::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  58191062160, #      utc_end 1844-12-31 15:56:00 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  58191004800, #    local_end 1844-12-31 00:00:00 (Tue)
  -57360,
  0,
  'LMT',
      ],
      [
  58191062160, #    utc_start 1844-12-31 15:56:00 (Tue)
  59906361360, #      utc_end 1899-05-10 15:56:00 (Wed)
  58191091200, #  local_start 1845-01-01 00:00:00 (Wed)
  59906390400, #    local_end 1899-05-11 00:00:00 (Thu)
  29040,
  0,
  'LMT',
      ],
      [
  59906361360, #    utc_start 1899-05-10 15:56:00 (Wed)
  61089004800, #      utc_end 1936-10-31 16:00:00 (Sat)
  59906390160, #  local_start 1899-05-10 23:56:00 (Wed)
  61089033600, #    local_end 1936-11-01 00:00:00 (Sun)
  28800,
  0,
  'PHT',
      ],
      [
  61089004800, #    utc_start 1936-10-31 16:00:00 (Sat)
  61096950000, #      utc_end 1937-01-31 15:00:00 (Sun)
  61089037200, #  local_start 1936-11-01 01:00:00 (Sun)
  61096982400, #    local_end 1937-02-01 00:00:00 (Mon)
  32400,
  1,
  'PHST',
      ],
      [
  61096950000, #    utc_start 1937-01-31 15:00:00 (Sun)
  61262409600, #      utc_end 1942-04-30 16:00:00 (Thu)
  61096978800, #  local_start 1937-01-31 23:00:00 (Sun)
  61262438400, #    local_end 1942-05-01 00:00:00 (Fri)
  28800,
  0,
  'PHT',
      ],
      [
  61262409600, #    utc_start 1942-04-30 16:00:00 (Thu)
  61341462000, #      utc_end 1944-10-31 15:00:00 (Tue)
  61262442000, #  local_start 1942-05-01 01:00:00 (Fri)
  61341494400, #    local_end 1944-11-01 00:00:00 (Wed)
  32400,
  0,
  'JST',
      ],
      [
  61341462000, #    utc_start 1944-10-31 15:00:00 (Tue)
  61639459200, #      utc_end 1954-04-11 16:00:00 (Sun)
  61341490800, #  local_start 1944-10-31 23:00:00 (Tue)
  61639488000, #    local_end 1954-04-12 00:00:00 (Mon)
  28800,
  0,
  'PHT',
      ],
      [
  61639459200, #    utc_start 1954-04-11 16:00:00 (Sun)
  61646367600, #      utc_end 1954-06-30 15:00:00 (Wed)
  61639491600, #  local_start 1954-04-12 01:00:00 (Mon)
  61646400000, #    local_end 1954-07-01 00:00:00 (Thu)
  32400,
  1,
  'PHST',
      ],
      [
  61646367600, #    utc_start 1954-06-30 15:00:00 (Wed)
  62395027200, #      utc_end 1978-03-21 16:00:00 (Tue)
  61646396400, #  local_start 1954-06-30 23:00:00 (Wed)
  62395056000, #    local_end 1978-03-22 00:00:00 (Wed)
  28800,
  0,
  'PHT',
      ],
      [
  62395027200, #    utc_start 1978-03-21 16:00:00 (Tue)
  62410834800, #      utc_end 1978-09-20 15:00:00 (Wed)
  62395059600, #  local_start 1978-03-22 01:00:00 (Wed)
  62410867200, #    local_end 1978-09-21 00:00:00 (Thu)
  32400,
  1,
  'PHST',
      ],
      [
  62410834800, #    utc_start 1978-09-20 15:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #      utc_end
  62410863600, #  local_start 1978-09-20 23:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #    local_end
  28800,
  0,
  'PHT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {3}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_MANILA

    $main::fatpacked{"DateTime/TimeZone/Asia/Nicosia.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_NICOSIA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Nicosia;
  $DateTime::TimeZone::Asia::Nicosia::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Nicosia::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60616763192, #      utc_end 1921-11-13 21:46:32 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60616771200, #    local_end 1921-11-14 00:00:00 (Mon)
  8008,
  0,
  'LMT',
      ],
      [
  60616763192, #    utc_start 1921-11-13 21:46:32 (Sun)
  62302255200, #      utc_end 1975-04-12 22:00:00 (Sat)
  60616770392, #  local_start 1921-11-13 23:46:32 (Sun)
  62302262400, #    local_end 1975-04-13 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62302255200, #    utc_start 1975-04-12 22:00:00 (Sat)
  62317976400, #      utc_end 1975-10-11 21:00:00 (Sat)
  62302266000, #  local_start 1975-04-13 01:00:00 (Sun)
  62317987200, #    local_end 1975-10-12 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62317976400, #    utc_start 1975-10-11 21:00:00 (Sat)
  62336642400, #      utc_end 1976-05-14 22:00:00 (Fri)
  62317983600, #  local_start 1975-10-11 23:00:00 (Sat)
  62336649600, #    local_end 1976-05-15 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62336642400, #    utc_start 1976-05-14 22:00:00 (Fri)
  62349512400, #      utc_end 1976-10-10 21:00:00 (Sun)
  62336653200, #  local_start 1976-05-15 01:00:00 (Sat)
  62349523200, #    local_end 1976-10-11 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62349512400, #    utc_start 1976-10-10 21:00:00 (Sun)
  62364549600, #      utc_end 1977-04-02 22:00:00 (Sat)
  62349519600, #  local_start 1976-10-10 23:00:00 (Sun)
  62364556800, #    local_end 1977-04-03 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62364549600, #    utc_start 1977-04-02 22:00:00 (Sat)
  62379666000, #      utc_end 1977-09-24 21:00:00 (Sat)
  62364560400, #  local_start 1977-04-03 01:00:00 (Sun)
  62379676800, #    local_end 1977-09-25 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62379666000, #    utc_start 1977-09-24 21:00:00 (Sat)
  62395999200, #      utc_end 1978-04-01 22:00:00 (Sat)
  62379673200, #  local_start 1977-09-24 23:00:00 (Sat)
  62396006400, #    local_end 1978-04-02 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62395999200, #    utc_start 1978-04-01 22:00:00 (Sat)
  62411806800, #      utc_end 1978-10-01 21:00:00 (Sun)
  62396010000, #  local_start 1978-04-02 01:00:00 (Sun)
  62411817600, #    local_end 1978-10-02 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62411806800, #    utc_start 1978-10-01 21:00:00 (Sun)
  62427448800, #      utc_end 1979-03-31 22:00:00 (Sat)
  62411814000, #  local_start 1978-10-01 23:00:00 (Sun)
  62427456000, #    local_end 1979-04-01 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62427448800, #    utc_start 1979-03-31 22:00:00 (Sat)
  62443170000, #      utc_end 1979-09-29 21:00:00 (Sat)
  62427459600, #  local_start 1979-04-01 01:00:00 (Sun)
  62443180800, #    local_end 1979-09-30 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62443170000, #    utc_start 1979-09-29 21:00:00 (Sat)
  62459503200, #      utc_end 1980-04-05 22:00:00 (Sat)
  62443177200, #  local_start 1979-09-29 23:00:00 (Sat)
  62459510400, #    local_end 1980-04-06 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62459503200, #    utc_start 1980-04-05 22:00:00 (Sat)
  62474619600, #      utc_end 1980-09-27 21:00:00 (Sat)
  62459514000, #  local_start 1980-04-06 01:00:00 (Sun)
  62474630400, #    local_end 1980-09-28 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62474619600, #    utc_start 1980-09-27 21:00:00 (Sat)
  62490348000, #      utc_end 1981-03-28 22:00:00 (Sat)
  62474626800, #  local_start 1980-09-27 23:00:00 (Sat)
  62490355200, #    local_end 1981-03-29 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62490348000, #    utc_start 1981-03-28 22:00:00 (Sat)
  62506069200, #      utc_end 1981-09-26 21:00:00 (Sat)
  62490358800, #  local_start 1981-03-29 01:00:00 (Sun)
  62506080000, #    local_end 1981-09-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62506069200, #    utc_start 1981-09-26 21:00:00 (Sat)
  62521797600, #      utc_end 1982-03-27 22:00:00 (Sat)
  62506076400, #  local_start 1981-09-26 23:00:00 (Sat)
  62521804800, #    local_end 1982-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62521797600, #    utc_start 1982-03-27 22:00:00 (Sat)
  62537518800, #      utc_end 1982-09-25 21:00:00 (Sat)
  62521808400, #  local_start 1982-03-28 01:00:00 (Sun)
  62537529600, #    local_end 1982-09-26 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62537518800, #    utc_start 1982-09-25 21:00:00 (Sat)
  62553247200, #      utc_end 1983-03-26 22:00:00 (Sat)
  62537526000, #  local_start 1982-09-25 23:00:00 (Sat)
  62553254400, #    local_end 1983-03-27 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62553247200, #    utc_start 1983-03-26 22:00:00 (Sat)
  62568968400, #      utc_end 1983-09-24 21:00:00 (Sat)
  62553258000, #  local_start 1983-03-27 01:00:00 (Sun)
  62568979200, #    local_end 1983-09-25 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62568968400, #    utc_start 1983-09-24 21:00:00 (Sat)
  62584696800, #      utc_end 1984-03-24 22:00:00 (Sat)
  62568975600, #  local_start 1983-09-24 23:00:00 (Sat)
  62584704000, #    local_end 1984-03-25 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62584696800, #    utc_start 1984-03-24 22:00:00 (Sat)
  62601022800, #      utc_end 1984-09-29 21:00:00 (Sat)
  62584707600, #  local_start 1984-03-25 01:00:00 (Sun)
  62601033600, #    local_end 1984-09-30 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62601022800, #    utc_start 1984-09-29 21:00:00 (Sat)
  62616751200, #      utc_end 1985-03-30 22:00:00 (Sat)
  62601030000, #  local_start 1984-09-29 23:00:00 (Sat)
  62616758400, #    local_end 1985-03-31 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62616751200, #    utc_start 1985-03-30 22:00:00 (Sat)
  62632472400, #      utc_end 1985-09-28 21:00:00 (Sat)
  62616762000, #  local_start 1985-03-31 01:00:00 (Sun)
  62632483200, #    local_end 1985-09-29 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62632472400, #    utc_start 1985-09-28 21:00:00 (Sat)
  62648200800, #      utc_end 1986-03-29 22:00:00 (Sat)
  62632479600, #  local_start 1985-09-28 23:00:00 (Sat)
  62648208000, #    local_end 1986-03-30 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62648200800, #    utc_start 1986-03-29 22:00:00 (Sat)
  62663922000, #      utc_end 1986-09-27 21:00:00 (Sat)
  62648211600, #  local_start 1986-03-30 01:00:00 (Sun)
  62663932800, #    local_end 1986-09-28 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62663922000, #    utc_start 1986-09-27 21:00:00 (Sat)
  62679650400, #      utc_end 1987-03-28 22:00:00 (Sat)
  62663929200, #  local_start 1986-09-27 23:00:00 (Sat)
  62679657600, #    local_end 1987-03-29 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62679650400, #    utc_start 1987-03-28 22:00:00 (Sat)
  62695371600, #      utc_end 1987-09-26 21:00:00 (Sat)
  62679661200, #  local_start 1987-03-29 01:00:00 (Sun)
  62695382400, #    local_end 1987-09-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62695371600, #    utc_start 1987-09-26 21:00:00 (Sat)
  62711100000, #      utc_end 1988-03-26 22:00:00 (Sat)
  62695378800, #  local_start 1987-09-26 23:00:00 (Sat)
  62711107200, #    local_end 1988-03-27 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62711100000, #    utc_start 1988-03-26 22:00:00 (Sat)
  62726821200, #      utc_end 1988-09-24 21:00:00 (Sat)
  62711110800, #  local_start 1988-03-27 01:00:00 (Sun)
  62726832000, #    local_end 1988-09-25 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62726821200, #    utc_start 1988-09-24 21:00:00 (Sat)
  62742549600, #      utc_end 1989-03-25 22:00:00 (Sat)
  62726828400, #  local_start 1988-09-24 23:00:00 (Sat)
  62742556800, #    local_end 1989-03-26 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62742549600, #    utc_start 1989-03-25 22:00:00 (Sat)
  62758270800, #      utc_end 1989-09-23 21:00:00 (Sat)
  62742560400, #  local_start 1989-03-26 01:00:00 (Sun)
  62758281600, #    local_end 1989-09-24 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62758270800, #    utc_start 1989-09-23 21:00:00 (Sat)
  62773999200, #      utc_end 1990-03-24 22:00:00 (Sat)
  62758278000, #  local_start 1989-09-23 23:00:00 (Sat)
  62774006400, #    local_end 1990-03-25 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62773999200, #    utc_start 1990-03-24 22:00:00 (Sat)
  62790325200, #      utc_end 1990-09-29 21:00:00 (Sat)
  62774010000, #  local_start 1990-03-25 01:00:00 (Sun)
  62790336000, #    local_end 1990-09-30 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62790325200, #    utc_start 1990-09-29 21:00:00 (Sat)
  62806053600, #      utc_end 1991-03-30 22:00:00 (Sat)
  62790332400, #  local_start 1990-09-29 23:00:00 (Sat)
  62806060800, #    local_end 1991-03-31 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62806053600, #    utc_start 1991-03-30 22:00:00 (Sat)
  62821774800, #      utc_end 1991-09-28 21:00:00 (Sat)
  62806064400, #  local_start 1991-03-31 01:00:00 (Sun)
  62821785600, #    local_end 1991-09-29 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821774800, #    utc_start 1991-09-28 21:00:00 (Sat)
  62837503200, #      utc_end 1992-03-28 22:00:00 (Sat)
  62821782000, #  local_start 1991-09-28 23:00:00 (Sat)
  62837510400, #    local_end 1992-03-29 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837503200, #    utc_start 1992-03-28 22:00:00 (Sat)
  62853224400, #      utc_end 1992-09-26 21:00:00 (Sat)
  62837514000, #  local_start 1992-03-29 01:00:00 (Sun)
  62853235200, #    local_end 1992-09-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853224400, #    utc_start 1992-09-26 21:00:00 (Sat)
  62868952800, #      utc_end 1993-03-27 22:00:00 (Sat)
  62853231600, #  local_start 1992-09-26 23:00:00 (Sat)
  62868960000, #    local_end 1993-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868952800, #    utc_start 1993-03-27 22:00:00 (Sat)
  62884674000, #      utc_end 1993-09-25 21:00:00 (Sat)
  62868963600, #  local_start 1993-03-28 01:00:00 (Sun)
  62884684800, #    local_end 1993-09-26 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884674000, #    utc_start 1993-09-25 21:00:00 (Sat)
  62900402400, #      utc_end 1994-03-26 22:00:00 (Sat)
  62884681200, #  local_start 1993-09-25 23:00:00 (Sat)
  62900409600, #    local_end 1994-03-27 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900402400, #    utc_start 1994-03-26 22:00:00 (Sat)
  62916123600, #      utc_end 1994-09-24 21:00:00 (Sat)
  62900413200, #  local_start 1994-03-27 01:00:00 (Sun)
  62916134400, #    local_end 1994-09-25 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916123600, #    utc_start 1994-09-24 21:00:00 (Sat)
  62931852000, #      utc_end 1995-03-25 22:00:00 (Sat)
  62916130800, #  local_start 1994-09-24 23:00:00 (Sat)
  62931859200, #    local_end 1995-03-26 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931852000, #    utc_start 1995-03-25 22:00:00 (Sat)
  62947573200, #      utc_end 1995-09-23 21:00:00 (Sat)
  62931862800, #  local_start 1995-03-26 01:00:00 (Sun)
  62947584000, #    local_end 1995-09-24 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947573200, #    utc_start 1995-09-23 21:00:00 (Sat)
  62963906400, #      utc_end 1996-03-30 22:00:00 (Sat)
  62947580400, #  local_start 1995-09-23 23:00:00 (Sat)
  62963913600, #    local_end 1996-03-31 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963906400, #    utc_start 1996-03-30 22:00:00 (Sat)
  62979627600, #      utc_end 1996-09-28 21:00:00 (Sat)
  62963917200, #  local_start 1996-03-31 01:00:00 (Sun)
  62979638400, #    local_end 1996-09-29 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62979627600, #    utc_start 1996-09-28 21:00:00 (Sat)
  62995356000, #      utc_end 1997-03-29 22:00:00 (Sat)
  62979634800, #  local_start 1996-09-28 23:00:00 (Sat)
  62995363200, #    local_end 1997-03-30 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995356000, #    utc_start 1997-03-29 22:00:00 (Sat)
  63011077200, #      utc_end 1997-09-27 21:00:00 (Sat)
  62995366800, #  local_start 1997-03-30 01:00:00 (Sun)
  63011088000, #    local_end 1997-09-28 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63011077200, #    utc_start 1997-09-27 21:00:00 (Sat)
  63026805600, #      utc_end 1998-03-28 22:00:00 (Sat)
  63011084400, #  local_start 1997-09-27 23:00:00 (Sat)
  63026812800, #    local_end 1998-03-29 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026805600, #    utc_start 1998-03-28 22:00:00 (Sat)
  63040280400, #      utc_end 1998-08-31 21:00:00 (Mon)
  63026816400, #  local_start 1998-03-29 01:00:00 (Sun)
  63040291200, #    local_end 1998-09-01 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  63040280400, #    utc_start 1998-08-31 21:00:00 (Mon)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63040291200, #  local_start 1998-09-01 00:00:00 (Tue)
  63044971200, #    local_end 1998-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044967600, #  local_start 1998-10-25 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058276800, #  local_start 1999-03-28 04:00:00 (Sun)
  63077025600, #    local_end 1999-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089726400, #  local_start 2000-03-26 04:00:00 (Sun)
  63108475200, #    local_end 2000-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108471600, #  local_start 2000-10-29 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121176000, #  local_start 2001-03-25 04:00:00 (Sun)
  63139924800, #    local_end 2001-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139921200, #  local_start 2001-10-28 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153230400, #  local_start 2002-03-31 04:00:00 (Sun)
  63171374400, #    local_end 2002-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171370800, #  local_start 2002-10-27 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184680000, #  local_start 2003-03-30 04:00:00 (Sun)
  63202824000, #    local_end 2003-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216129600, #  local_start 2004-03-28 04:00:00 (Sun)
  63234878400, #    local_end 2004-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247579200, #  local_start 2005-03-27 04:00:00 (Sun)
  63266328000, #    local_end 2005-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279025200, #    local_end 2006-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279028800, #  local_start 2006-03-26 04:00:00 (Sun)
  63297777600, #    local_end 2006-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310478400, #  local_start 2007-03-25 04:00:00 (Sun)
  63329227200, #    local_end 2007-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63342529200, #    local_end 2008-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342532800, #  local_start 2008-03-30 04:00:00 (Sun)
  63360676800, #    local_end 2008-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373978800, #    local_end 2009-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373982400, #  local_start 2009-03-29 04:00:00 (Sun)
  63392126400, #    local_end 2009-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392122800, #  local_start 2009-10-25 03:00:00 (Sun)
  63405428400, #    local_end 2010-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405432000, #  local_start 2010-03-28 04:00:00 (Sun)
  63424180800, #    local_end 2010-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424177200, #  local_start 2010-10-31 03:00:00 (Sun)
  63436878000, #    local_end 2011-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436881600, #  local_start 2011-03-27 04:00:00 (Sun)
  63455630400, #    local_end 2011-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455626800, #  local_start 2011-10-30 03:00:00 (Sun)
  63468327600, #    local_end 2012-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468331200, #  local_start 2012-03-25 04:00:00 (Sun)
  63487080000, #    local_end 2012-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487076400, #  local_start 2012-10-28 03:00:00 (Sun)
  63500382000, #    local_end 2013-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500385600, #  local_start 2013-03-31 04:00:00 (Sun)
  63518529600, #    local_end 2013-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518526000, #  local_start 2013-10-27 03:00:00 (Sun)
  63531831600, #    local_end 2014-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531835200, #  local_start 2014-03-30 04:00:00 (Sun)
  63549979200, #    local_end 2014-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549975600, #  local_start 2014-10-26 03:00:00 (Sun)
  63563281200, #    local_end 2015-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563284800, #  local_start 2015-03-29 04:00:00 (Sun)
  63581428800, #    local_end 2015-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581425200, #  local_start 2015-10-25 03:00:00 (Sun)
  63594730800, #    local_end 2016-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594734400, #  local_start 2016-03-27 04:00:00 (Sun)
  63613483200, #    local_end 2016-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613479600, #  local_start 2016-10-30 03:00:00 (Sun)
  63626180400, #    local_end 2017-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626184000, #  local_start 2017-03-26 04:00:00 (Sun)
  63644932800, #    local_end 2017-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644929200, #  local_start 2017-10-29 03:00:00 (Sun)
  63657630000, #    local_end 2018-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657633600, #  local_start 2018-03-25 04:00:00 (Sun)
  63676382400, #    local_end 2018-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676378800, #  local_start 2018-10-28 03:00:00 (Sun)
  63689684400, #    local_end 2019-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689688000, #  local_start 2019-03-31 04:00:00 (Sun)
  63707832000, #    local_end 2019-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707828400, #  local_start 2019-10-27 03:00:00 (Sun)
  63721134000, #    local_end 2020-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721137600, #  local_start 2020-03-29 04:00:00 (Sun)
  63739281600, #    local_end 2020-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739278000, #  local_start 2020-10-25 03:00:00 (Sun)
  63752583600, #    local_end 2021-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752587200, #  local_start 2021-03-28 04:00:00 (Sun)
  63771336000, #    local_end 2021-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771332400, #  local_start 2021-10-31 03:00:00 (Sun)
  63784033200, #    local_end 2022-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784036800, #  local_start 2022-03-27 04:00:00 (Sun)
  63802785600, #    local_end 2022-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802782000, #  local_start 2022-10-30 03:00:00 (Sun)
  63815482800, #    local_end 2023-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815486400, #  local_start 2023-03-26 04:00:00 (Sun)
  63834235200, #    local_end 2023-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834231600, #  local_start 2023-10-29 03:00:00 (Sun)
  63847537200, #    local_end 2024-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847540800, #  local_start 2024-03-31 04:00:00 (Sun)
  63865684800, #    local_end 2024-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865681200, #  local_start 2024-10-27 03:00:00 (Sun)
  63878986800, #    local_end 2025-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878990400, #  local_start 2025-03-30 04:00:00 (Sun)
  63897134400, #    local_end 2025-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897130800, #  local_start 2025-10-26 03:00:00 (Sun)
  63910436400, #    local_end 2026-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910440000, #  local_start 2026-03-29 04:00:00 (Sun)
  63928584000, #    local_end 2026-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928580400, #  local_start 2026-10-25 03:00:00 (Sun)
  63941886000, #    local_end 2027-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941889600, #  local_start 2027-03-28 04:00:00 (Sun)
  63960638400, #    local_end 2027-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {54}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 729633,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 729633,
      'utc_rd_secs' => 0,
      'utc_year' => 1999
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 729632,
      'local_rd_secs' => 75600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 729632,
      'utc_rd_secs' => 75600,
      'utc_year' => 1999
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EUAsia',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EUAsia',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_NICOSIA

    $main::fatpacked{"DateTime/TimeZone/Asia/Novokuznetsk.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_NOVOKUZNETSK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Novokuznetsk;
  $DateTime::TimeZone::Asia::Novokuznetsk::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Novokuznetsk::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694423872, #      utc_end 1924-04-30 18:11:12 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694444800, #    local_end 1924-05-01 00:00:00 (Thu)
  20928,
  0,
  'LMT',
      ],
      [
  60694423872, #    utc_start 1924-04-30 18:11:12 (Wed)
  60888132000, #      utc_end 1930-06-20 18:00:00 (Fri)
  60694445472, #  local_start 1924-05-01 00:11:12 (Thu)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  21600,
  0,
  '+06',
      ],
      [
  60888132000, #    utc_start 1930-06-20 18:00:00 (Fri)
  62490589200, #      utc_end 1981-03-31 17:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  25200,
  0,
  '+07',
      ],
      [
  62490589200, #    utc_start 1981-03-31 17:00:00 (Tue)
  62506396800, #      utc_end 1981-09-30 16:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  28800,
  1,
  '+08',
      ],
      [
  62506396800, #    utc_start 1981-09-30 16:00:00 (Wed)
  62522125200, #      utc_end 1982-03-31 17:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  25200,
  0,
  '+07',
      ],
      [
  62522125200, #    utc_start 1982-03-31 17:00:00 (Wed)
  62537932800, #      utc_end 1982-09-30 16:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  28800,
  1,
  '+08',
      ],
      [
  62537932800, #    utc_start 1982-09-30 16:00:00 (Thu)
  62553661200, #      utc_end 1983-03-31 17:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  25200,
  0,
  '+07',
      ],
      [
  62553661200, #    utc_start 1983-03-31 17:00:00 (Thu)
  62569468800, #      utc_end 1983-09-30 16:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  28800,
  1,
  '+08',
      ],
      [
  62569468800, #    utc_start 1983-09-30 16:00:00 (Fri)
  62585283600, #      utc_end 1984-03-31 17:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62585283600, #    utc_start 1984-03-31 17:00:00 (Sat)
  62601015600, #      utc_end 1984-09-29 19:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62601015600, #    utc_start 1984-09-29 19:00:00 (Sat)
  62616740400, #      utc_end 1985-03-30 19:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62616740400, #    utc_start 1985-03-30 19:00:00 (Sat)
  62632465200, #      utc_end 1985-09-28 19:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62632465200, #    utc_start 1985-09-28 19:00:00 (Sat)
  62648190000, #      utc_end 1986-03-29 19:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62648190000, #    utc_start 1986-03-29 19:00:00 (Sat)
  62663914800, #      utc_end 1986-09-27 19:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62663914800, #    utc_start 1986-09-27 19:00:00 (Sat)
  62679639600, #      utc_end 1987-03-28 19:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62679639600, #    utc_start 1987-03-28 19:00:00 (Sat)
  62695364400, #      utc_end 1987-09-26 19:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62695364400, #    utc_start 1987-09-26 19:00:00 (Sat)
  62711089200, #      utc_end 1988-03-26 19:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62711089200, #    utc_start 1988-03-26 19:00:00 (Sat)
  62726814000, #      utc_end 1988-09-24 19:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62726814000, #    utc_start 1988-09-24 19:00:00 (Sat)
  62742538800, #      utc_end 1989-03-25 19:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62742538800, #    utc_start 1989-03-25 19:00:00 (Sat)
  62758263600, #      utc_end 1989-09-23 19:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62758263600, #    utc_start 1989-09-23 19:00:00 (Sat)
  62773988400, #      utc_end 1990-03-24 19:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62773988400, #    utc_start 1990-03-24 19:00:00 (Sat)
  62790318000, #      utc_end 1990-09-29 19:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62790318000, #    utc_start 1990-09-29 19:00:00 (Sat)
  62806042800, #      utc_end 1991-03-30 19:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62806042800, #    utc_start 1991-03-30 19:00:00 (Sat)
  62821771200, #      utc_end 1991-09-28 20:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62821771200, #    utc_start 1991-09-28 20:00:00 (Sat)
  62831448000, #      utc_end 1992-01-18 20:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62831448000, #    utc_start 1992-01-18 20:00:00 (Sat)
  62837492400, #      utc_end 1992-03-28 19:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62837492400, #    utc_start 1992-03-28 19:00:00 (Sat)
  62853217200, #      utc_end 1992-09-26 19:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62853217200, #    utc_start 1992-09-26 19:00:00 (Sat)
  62868942000, #      utc_end 1993-03-27 19:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62868942000, #    utc_start 1993-03-27 19:00:00 (Sat)
  62884666800, #      utc_end 1993-09-25 19:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62884666800, #    utc_start 1993-09-25 19:00:00 (Sat)
  62900391600, #      utc_end 1994-03-26 19:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62900391600, #    utc_start 1994-03-26 19:00:00 (Sat)
  62916116400, #      utc_end 1994-09-24 19:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62916116400, #    utc_start 1994-09-24 19:00:00 (Sat)
  62931841200, #      utc_end 1995-03-25 19:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62931841200, #    utc_start 1995-03-25 19:00:00 (Sat)
  62947566000, #      utc_end 1995-09-23 19:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62947566000, #    utc_start 1995-09-23 19:00:00 (Sat)
  62963895600, #      utc_end 1996-03-30 19:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62963895600, #    utc_start 1996-03-30 19:00:00 (Sat)
  62982039600, #      utc_end 1996-10-26 19:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62982039600, #    utc_start 1996-10-26 19:00:00 (Sat)
  62995345200, #      utc_end 1997-03-29 19:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62995345200, #    utc_start 1997-03-29 19:00:00 (Sat)
  63013489200, #      utc_end 1997-10-25 19:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63013489200, #    utc_start 1997-10-25 19:00:00 (Sat)
  63026794800, #      utc_end 1998-03-28 19:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63026794800, #    utc_start 1998-03-28 19:00:00 (Sat)
  63044938800, #      utc_end 1998-10-24 19:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63044938800, #    utc_start 1998-10-24 19:00:00 (Sat)
  63058244400, #      utc_end 1999-03-27 19:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63058244400, #    utc_start 1999-03-27 19:00:00 (Sat)
  63076993200, #      utc_end 1999-10-30 19:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63076993200, #    utc_start 1999-10-30 19:00:00 (Sat)
  63089694000, #      utc_end 2000-03-25 19:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63089694000, #    utc_start 2000-03-25 19:00:00 (Sat)
  63108442800, #      utc_end 2000-10-28 19:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63108442800, #    utc_start 2000-10-28 19:00:00 (Sat)
  63121143600, #      utc_end 2001-03-24 19:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63121143600, #    utc_start 2001-03-24 19:00:00 (Sat)
  63139892400, #      utc_end 2001-10-27 19:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63139892400, #    utc_start 2001-10-27 19:00:00 (Sat)
  63153198000, #      utc_end 2002-03-30 19:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63153198000, #    utc_start 2002-03-30 19:00:00 (Sat)
  63171342000, #      utc_end 2002-10-26 19:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63171342000, #    utc_start 2002-10-26 19:00:00 (Sat)
  63184647600, #      utc_end 2003-03-29 19:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63184647600, #    utc_start 2003-03-29 19:00:00 (Sat)
  63202791600, #      utc_end 2003-10-25 19:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63202791600, #    utc_start 2003-10-25 19:00:00 (Sat)
  63216097200, #      utc_end 2004-03-27 19:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63216097200, #    utc_start 2004-03-27 19:00:00 (Sat)
  63234846000, #      utc_end 2004-10-30 19:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63234846000, #    utc_start 2004-10-30 19:00:00 (Sat)
  63247546800, #      utc_end 2005-03-26 19:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63247546800, #    utc_start 2005-03-26 19:00:00 (Sat)
  63266295600, #      utc_end 2005-10-29 19:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63266295600, #    utc_start 2005-10-29 19:00:00 (Sat)
  63278996400, #      utc_end 2006-03-25 19:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63278996400, #    utc_start 2006-03-25 19:00:00 (Sat)
  63297745200, #      utc_end 2006-10-28 19:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63297745200, #    utc_start 2006-10-28 19:00:00 (Sat)
  63310446000, #      utc_end 2007-03-24 19:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63310446000, #    utc_start 2007-03-24 19:00:00 (Sat)
  63329194800, #      utc_end 2007-10-27 19:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63329194800, #    utc_start 2007-10-27 19:00:00 (Sat)
  63342500400, #      utc_end 2008-03-29 19:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63342500400, #    utc_start 2008-03-29 19:00:00 (Sat)
  63360644400, #      utc_end 2008-10-25 19:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63360644400, #    utc_start 2008-10-25 19:00:00 (Sat)
  63373950000, #      utc_end 2009-03-28 19:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63373950000, #    utc_start 2009-03-28 19:00:00 (Sat)
  63392094000, #      utc_end 2009-10-24 19:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63392094000, #    utc_start 2009-10-24 19:00:00 (Sat)
  63405399600, #      utc_end 2010-03-27 19:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63405399600, #    utc_start 2010-03-27 19:00:00 (Sat)
  63424152000, #      utc_end 2010-10-30 20:00:00 (Sat)
  63405424800, #  local_start 2010-03-28 02:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63424152000, #    utc_start 2010-10-30 20:00:00 (Sat)
  63436852800, #      utc_end 2011-03-26 20:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63436852800, #    utc_start 2011-03-26 20:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  25200,
  0,
  '+07',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_NOVOKUZNETSK

    $main::fatpacked{"DateTime/TimeZone/Asia/Novosibirsk.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_NOVOSIBIRSK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Novosibirsk;
  $DateTime::TimeZone::Asia::Novosibirsk::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Novosibirsk::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60556206500, #      utc_end 1919-12-14 00:28:20 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60556226400, #    local_end 1919-12-14 06:00:00 (Sun)
  19900,
  0,
  'LMT',
      ],
      [
  60556206500, #    utc_start 1919-12-14 00:28:20 (Sun)
  60888132000, #      utc_end 1930-06-20 18:00:00 (Fri)
  60556228100, #  local_start 1919-12-14 06:28:20 (Sun)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  21600,
  0,
  '+06',
      ],
      [
  60888132000, #    utc_start 1930-06-20 18:00:00 (Fri)
  62490589200, #      utc_end 1981-03-31 17:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  25200,
  0,
  '+07',
      ],
      [
  62490589200, #    utc_start 1981-03-31 17:00:00 (Tue)
  62506396800, #      utc_end 1981-09-30 16:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  28800,
  1,
  '+08',
      ],
      [
  62506396800, #    utc_start 1981-09-30 16:00:00 (Wed)
  62522125200, #      utc_end 1982-03-31 17:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  25200,
  0,
  '+07',
      ],
      [
  62522125200, #    utc_start 1982-03-31 17:00:00 (Wed)
  62537932800, #      utc_end 1982-09-30 16:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  28800,
  1,
  '+08',
      ],
      [
  62537932800, #    utc_start 1982-09-30 16:00:00 (Thu)
  62553661200, #      utc_end 1983-03-31 17:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  25200,
  0,
  '+07',
      ],
      [
  62553661200, #    utc_start 1983-03-31 17:00:00 (Thu)
  62569468800, #      utc_end 1983-09-30 16:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  28800,
  1,
  '+08',
      ],
      [
  62569468800, #    utc_start 1983-09-30 16:00:00 (Fri)
  62585283600, #      utc_end 1984-03-31 17:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62585283600, #    utc_start 1984-03-31 17:00:00 (Sat)
  62601015600, #      utc_end 1984-09-29 19:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62601015600, #    utc_start 1984-09-29 19:00:00 (Sat)
  62616740400, #      utc_end 1985-03-30 19:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62616740400, #    utc_start 1985-03-30 19:00:00 (Sat)
  62632465200, #      utc_end 1985-09-28 19:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62632465200, #    utc_start 1985-09-28 19:00:00 (Sat)
  62648190000, #      utc_end 1986-03-29 19:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62648190000, #    utc_start 1986-03-29 19:00:00 (Sat)
  62663914800, #      utc_end 1986-09-27 19:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62663914800, #    utc_start 1986-09-27 19:00:00 (Sat)
  62679639600, #      utc_end 1987-03-28 19:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62679639600, #    utc_start 1987-03-28 19:00:00 (Sat)
  62695364400, #      utc_end 1987-09-26 19:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62695364400, #    utc_start 1987-09-26 19:00:00 (Sat)
  62711089200, #      utc_end 1988-03-26 19:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62711089200, #    utc_start 1988-03-26 19:00:00 (Sat)
  62726814000, #      utc_end 1988-09-24 19:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62726814000, #    utc_start 1988-09-24 19:00:00 (Sat)
  62742538800, #      utc_end 1989-03-25 19:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62742538800, #    utc_start 1989-03-25 19:00:00 (Sat)
  62758263600, #      utc_end 1989-09-23 19:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62758263600, #    utc_start 1989-09-23 19:00:00 (Sat)
  62773988400, #      utc_end 1990-03-24 19:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62773988400, #    utc_start 1990-03-24 19:00:00 (Sat)
  62790318000, #      utc_end 1990-09-29 19:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62790318000, #    utc_start 1990-09-29 19:00:00 (Sat)
  62806042800, #      utc_end 1991-03-30 19:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62806042800, #    utc_start 1991-03-30 19:00:00 (Sat)
  62821771200, #      utc_end 1991-09-28 20:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62821771200, #    utc_start 1991-09-28 20:00:00 (Sat)
  62831448000, #      utc_end 1992-01-18 20:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62831448000, #    utc_start 1992-01-18 20:00:00 (Sat)
  62837492400, #      utc_end 1992-03-28 19:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62837492400, #    utc_start 1992-03-28 19:00:00 (Sat)
  62853217200, #      utc_end 1992-09-26 19:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62853217200, #    utc_start 1992-09-26 19:00:00 (Sat)
  62868942000, #      utc_end 1993-03-27 19:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62868942000, #    utc_start 1993-03-27 19:00:00 (Sat)
  62873769600, #      utc_end 1993-05-22 16:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62873798400, #    local_end 1993-05-23 00:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62873769600, #    utc_start 1993-05-22 16:00:00 (Sat)
  62884670400, #      utc_end 1993-09-25 20:00:00 (Sat)
  62873794800, #  local_start 1993-05-22 23:00:00 (Sat)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62884670400, #    utc_start 1993-09-25 20:00:00 (Sat)
  62900395200, #      utc_end 1994-03-26 20:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62900395200, #    utc_start 1994-03-26 20:00:00 (Sat)
  62916120000, #      utc_end 1994-09-24 20:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62916120000, #    utc_start 1994-09-24 20:00:00 (Sat)
  62931844800, #      utc_end 1995-03-25 20:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62931844800, #    utc_start 1995-03-25 20:00:00 (Sat)
  62947569600, #      utc_end 1995-09-23 20:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62947569600, #    utc_start 1995-09-23 20:00:00 (Sat)
  62963899200, #      utc_end 1996-03-30 20:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62963899200, #    utc_start 1996-03-30 20:00:00 (Sat)
  62982043200, #      utc_end 1996-10-26 20:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62982043200, #    utc_start 1996-10-26 20:00:00 (Sat)
  62995348800, #      utc_end 1997-03-29 20:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62995348800, #    utc_start 1997-03-29 20:00:00 (Sat)
  63013492800, #      utc_end 1997-10-25 20:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63013492800, #    utc_start 1997-10-25 20:00:00 (Sat)
  63026798400, #      utc_end 1998-03-28 20:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63026798400, #    utc_start 1998-03-28 20:00:00 (Sat)
  63044942400, #      utc_end 1998-10-24 20:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63044942400, #    utc_start 1998-10-24 20:00:00 (Sat)
  63058248000, #      utc_end 1999-03-27 20:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63058248000, #    utc_start 1999-03-27 20:00:00 (Sat)
  63076996800, #      utc_end 1999-10-30 20:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63076996800, #    utc_start 1999-10-30 20:00:00 (Sat)
  63089697600, #      utc_end 2000-03-25 20:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63089697600, #    utc_start 2000-03-25 20:00:00 (Sat)
  63108446400, #      utc_end 2000-10-28 20:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63108446400, #    utc_start 2000-10-28 20:00:00 (Sat)
  63121147200, #      utc_end 2001-03-24 20:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63121147200, #    utc_start 2001-03-24 20:00:00 (Sat)
  63139896000, #      utc_end 2001-10-27 20:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63139896000, #    utc_start 2001-10-27 20:00:00 (Sat)
  63153201600, #      utc_end 2002-03-30 20:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63153201600, #    utc_start 2002-03-30 20:00:00 (Sat)
  63171345600, #      utc_end 2002-10-26 20:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63171345600, #    utc_start 2002-10-26 20:00:00 (Sat)
  63184651200, #      utc_end 2003-03-29 20:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63184651200, #    utc_start 2003-03-29 20:00:00 (Sat)
  63202795200, #      utc_end 2003-10-25 20:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63202795200, #    utc_start 2003-10-25 20:00:00 (Sat)
  63216100800, #      utc_end 2004-03-27 20:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63216100800, #    utc_start 2004-03-27 20:00:00 (Sat)
  63234849600, #      utc_end 2004-10-30 20:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63234849600, #    utc_start 2004-10-30 20:00:00 (Sat)
  63247550400, #      utc_end 2005-03-26 20:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63247550400, #    utc_start 2005-03-26 20:00:00 (Sat)
  63266299200, #      utc_end 2005-10-29 20:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63266299200, #    utc_start 2005-10-29 20:00:00 (Sat)
  63279000000, #      utc_end 2006-03-25 20:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63279000000, #    utc_start 2006-03-25 20:00:00 (Sat)
  63297748800, #      utc_end 2006-10-28 20:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63297748800, #    utc_start 2006-10-28 20:00:00 (Sat)
  63310449600, #      utc_end 2007-03-24 20:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63310449600, #    utc_start 2007-03-24 20:00:00 (Sat)
  63329198400, #      utc_end 2007-10-27 20:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63329198400, #    utc_start 2007-10-27 20:00:00 (Sat)
  63342504000, #      utc_end 2008-03-29 20:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63342504000, #    utc_start 2008-03-29 20:00:00 (Sat)
  63360648000, #      utc_end 2008-10-25 20:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63360648000, #    utc_start 2008-10-25 20:00:00 (Sat)
  63373953600, #      utc_end 2009-03-28 20:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63373953600, #    utc_start 2009-03-28 20:00:00 (Sat)
  63392097600, #      utc_end 2009-10-24 20:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63392097600, #    utc_start 2009-10-24 20:00:00 (Sat)
  63405403200, #      utc_end 2010-03-27 20:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63405403200, #    utc_start 2010-03-27 20:00:00 (Sat)
  63424152000, #      utc_end 2010-10-30 20:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63424152000, #    utc_start 2010-10-30 20:00:00 (Sat)
  63436852800, #      utc_end 2011-03-26 20:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63436852800, #    utc_start 2011-03-26 20:00:00 (Sat)
  63549946800, #      utc_end 2014-10-25 19:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63549946800, #    utc_start 2014-10-25 19:00:00 (Sat)
  63604987200, #      utc_end 2016-07-23 20:00:00 (Sat)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63605008800, #    local_end 2016-07-24 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63604987200, #    utc_start 2016-07-23 20:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63605012400, #  local_start 2016-07-24 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  25200,
  0,
  '+07',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {31}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_NOVOSIBIRSK

    $main::fatpacked{"DateTime/TimeZone/Asia/Omsk.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_OMSK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Omsk;
  $DateTime::TimeZone::Asia::Omsk::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Omsk::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60553595190, #      utc_end 1919-11-13 19:06:30 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60553612800, #    local_end 1919-11-14 00:00:00 (Fri)
  17610,
  0,
  'LMT',
      ],
      [
  60553595190, #    utc_start 1919-11-13 19:06:30 (Thu)
  60888135600, #      utc_end 1930-06-20 19:00:00 (Fri)
  60553613190, #  local_start 1919-11-14 00:06:30 (Fri)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  18000,
  0,
  'OMST',
      ],
      [
  60888135600, #    utc_start 1930-06-20 19:00:00 (Fri)
  62490592800, #      utc_end 1981-03-31 18:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  21600,
  0,
  'OMST',
      ],
      [
  62490592800, #    utc_start 1981-03-31 18:00:00 (Tue)
  62506400400, #      utc_end 1981-09-30 17:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  25200,
  1,
  'OMSST',
      ],
      [
  62506400400, #    utc_start 1981-09-30 17:00:00 (Wed)
  62522128800, #      utc_end 1982-03-31 18:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  21600,
  0,
  'OMST',
      ],
      [
  62522128800, #    utc_start 1982-03-31 18:00:00 (Wed)
  62537936400, #      utc_end 1982-09-30 17:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  25200,
  1,
  'OMSST',
      ],
      [
  62537936400, #    utc_start 1982-09-30 17:00:00 (Thu)
  62553664800, #      utc_end 1983-03-31 18:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  21600,
  0,
  'OMST',
      ],
      [
  62553664800, #    utc_start 1983-03-31 18:00:00 (Thu)
  62569472400, #      utc_end 1983-09-30 17:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  25200,
  1,
  'OMSST',
      ],
      [
  62569472400, #    utc_start 1983-09-30 17:00:00 (Fri)
  62585287200, #      utc_end 1984-03-31 18:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  62585287200, #    utc_start 1984-03-31 18:00:00 (Sat)
  62601019200, #      utc_end 1984-09-29 20:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  62601019200, #    utc_start 1984-09-29 20:00:00 (Sat)
  62616744000, #      utc_end 1985-03-30 20:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  62616744000, #    utc_start 1985-03-30 20:00:00 (Sat)
  62632468800, #      utc_end 1985-09-28 20:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  62632468800, #    utc_start 1985-09-28 20:00:00 (Sat)
  62648193600, #      utc_end 1986-03-29 20:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  62648193600, #    utc_start 1986-03-29 20:00:00 (Sat)
  62663918400, #      utc_end 1986-09-27 20:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  62663918400, #    utc_start 1986-09-27 20:00:00 (Sat)
  62679643200, #      utc_end 1987-03-28 20:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  62679643200, #    utc_start 1987-03-28 20:00:00 (Sat)
  62695368000, #      utc_end 1987-09-26 20:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  62695368000, #    utc_start 1987-09-26 20:00:00 (Sat)
  62711092800, #      utc_end 1988-03-26 20:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  62711092800, #    utc_start 1988-03-26 20:00:00 (Sat)
  62726817600, #      utc_end 1988-09-24 20:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  62726817600, #    utc_start 1988-09-24 20:00:00 (Sat)
  62742542400, #      utc_end 1989-03-25 20:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  62742542400, #    utc_start 1989-03-25 20:00:00 (Sat)
  62758267200, #      utc_end 1989-09-23 20:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  62758267200, #    utc_start 1989-09-23 20:00:00 (Sat)
  62773992000, #      utc_end 1990-03-24 20:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  62773992000, #    utc_start 1990-03-24 20:00:00 (Sat)
  62790321600, #      utc_end 1990-09-29 20:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  62790321600, #    utc_start 1990-09-29 20:00:00 (Sat)
  62806046400, #      utc_end 1991-03-30 20:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  62806046400, #    utc_start 1991-03-30 20:00:00 (Sat)
  62821774800, #      utc_end 1991-09-28 21:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  21600,
  1,
  'OMSST',
      ],
      [
  62821774800, #    utc_start 1991-09-28 21:00:00 (Sat)
  62831451600, #      utc_end 1992-01-18 21:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  18000,
  0,
  'OMST',
      ],
      [
  62831451600, #    utc_start 1992-01-18 21:00:00 (Sat)
  62837496000, #      utc_end 1992-03-28 20:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  62837496000, #    utc_start 1992-03-28 20:00:00 (Sat)
  62853220800, #      utc_end 1992-09-26 20:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  62853220800, #    utc_start 1992-09-26 20:00:00 (Sat)
  62868945600, #      utc_end 1993-03-27 20:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  62868945600, #    utc_start 1993-03-27 20:00:00 (Sat)
  62884670400, #      utc_end 1993-09-25 20:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  62884670400, #    utc_start 1993-09-25 20:00:00 (Sat)
  62900395200, #      utc_end 1994-03-26 20:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  62900395200, #    utc_start 1994-03-26 20:00:00 (Sat)
  62916120000, #      utc_end 1994-09-24 20:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  62916120000, #    utc_start 1994-09-24 20:00:00 (Sat)
  62931844800, #      utc_end 1995-03-25 20:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  62931844800, #    utc_start 1995-03-25 20:00:00 (Sat)
  62947569600, #      utc_end 1995-09-23 20:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  62947569600, #    utc_start 1995-09-23 20:00:00 (Sat)
  62963899200, #      utc_end 1996-03-30 20:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  62963899200, #    utc_start 1996-03-30 20:00:00 (Sat)
  62982043200, #      utc_end 1996-10-26 20:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  62982043200, #    utc_start 1996-10-26 20:00:00 (Sat)
  62995348800, #      utc_end 1997-03-29 20:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  62995348800, #    utc_start 1997-03-29 20:00:00 (Sat)
  63013492800, #      utc_end 1997-10-25 20:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  63013492800, #    utc_start 1997-10-25 20:00:00 (Sat)
  63026798400, #      utc_end 1998-03-28 20:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  63026798400, #    utc_start 1998-03-28 20:00:00 (Sat)
  63044942400, #      utc_end 1998-10-24 20:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  63044942400, #    utc_start 1998-10-24 20:00:00 (Sat)
  63058248000, #      utc_end 1999-03-27 20:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  63058248000, #    utc_start 1999-03-27 20:00:00 (Sat)
  63076996800, #      utc_end 1999-10-30 20:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  63076996800, #    utc_start 1999-10-30 20:00:00 (Sat)
  63089697600, #      utc_end 2000-03-25 20:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  63089697600, #    utc_start 2000-03-25 20:00:00 (Sat)
  63108446400, #      utc_end 2000-10-28 20:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  63108446400, #    utc_start 2000-10-28 20:00:00 (Sat)
  63121147200, #      utc_end 2001-03-24 20:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  63121147200, #    utc_start 2001-03-24 20:00:00 (Sat)
  63139896000, #      utc_end 2001-10-27 20:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  63139896000, #    utc_start 2001-10-27 20:00:00 (Sat)
  63153201600, #      utc_end 2002-03-30 20:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  63153201600, #    utc_start 2002-03-30 20:00:00 (Sat)
  63171345600, #      utc_end 2002-10-26 20:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  63171345600, #    utc_start 2002-10-26 20:00:00 (Sat)
  63184651200, #      utc_end 2003-03-29 20:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  63184651200, #    utc_start 2003-03-29 20:00:00 (Sat)
  63202795200, #      utc_end 2003-10-25 20:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  63202795200, #    utc_start 2003-10-25 20:00:00 (Sat)
  63216100800, #      utc_end 2004-03-27 20:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  63216100800, #    utc_start 2004-03-27 20:00:00 (Sat)
  63234849600, #      utc_end 2004-10-30 20:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  63234849600, #    utc_start 2004-10-30 20:00:00 (Sat)
  63247550400, #      utc_end 2005-03-26 20:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  63247550400, #    utc_start 2005-03-26 20:00:00 (Sat)
  63266299200, #      utc_end 2005-10-29 20:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  63266299200, #    utc_start 2005-10-29 20:00:00 (Sat)
  63279000000, #      utc_end 2006-03-25 20:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  63279000000, #    utc_start 2006-03-25 20:00:00 (Sat)
  63297748800, #      utc_end 2006-10-28 20:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  63297748800, #    utc_start 2006-10-28 20:00:00 (Sat)
  63310449600, #      utc_end 2007-03-24 20:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  63310449600, #    utc_start 2007-03-24 20:00:00 (Sat)
  63329198400, #      utc_end 2007-10-27 20:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  63329198400, #    utc_start 2007-10-27 20:00:00 (Sat)
  63342504000, #      utc_end 2008-03-29 20:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  63342504000, #    utc_start 2008-03-29 20:00:00 (Sat)
  63360648000, #      utc_end 2008-10-25 20:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  63360648000, #    utc_start 2008-10-25 20:00:00 (Sat)
  63373953600, #      utc_end 2009-03-28 20:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  63373953600, #    utc_start 2009-03-28 20:00:00 (Sat)
  63392097600, #      utc_end 2009-10-24 20:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  63392097600, #    utc_start 2009-10-24 20:00:00 (Sat)
  63405403200, #      utc_end 2010-03-27 20:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  63405403200, #    utc_start 2010-03-27 20:00:00 (Sat)
  63424152000, #      utc_end 2010-10-30 20:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  25200,
  1,
  'OMSST',
      ],
      [
  63424152000, #    utc_start 2010-10-30 20:00:00 (Sat)
  63436852800, #      utc_end 2011-03-26 20:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  21600,
  0,
  'OMST',
      ],
      [
  63436852800, #    utc_start 2011-03-26 20:00:00 (Sat)
  63549946800, #      utc_end 2014-10-25 19:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  25200,
  0,
  'OMST',
      ],
      [
  63549946800, #    utc_start 2014-10-25 19:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  21600,
  0,
  'OMST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_OMSK

    $main::fatpacked{"DateTime/TimeZone/Asia/Oral.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_ORAL';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Oral;
  $DateTime::TimeZone::Asia::Oral::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Oral::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694518876, #      utc_end 1924-05-01 20:34:36 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  12324,
  0,
  'LMT',
      ],
      [
  60694518876, #    utc_start 1924-05-01 20:34:36 (Thu)
  60888139200, #      utc_end 1930-06-20 20:00:00 (Fri)
  60694533276, #  local_start 1924-05-02 00:34:36 (Fri)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  14400,
  0,
  '+04',
      ],
      [
  60888139200, #    utc_start 1930-06-20 20:00:00 (Fri)
  62490596400, #      utc_end 1981-03-31 19:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  18000,
  0,
  '+05',
      ],
      [
  62490596400, #    utc_start 1981-03-31 19:00:00 (Tue)
  62506404000, #      utc_end 1981-09-30 18:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  21600,
  1,
  '+06',
      ],
      [
  62506404000, #    utc_start 1981-09-30 18:00:00 (Wed)
  62522128800, #      utc_end 1982-03-31 18:00:00 (Wed)
  62506425600, #  local_start 1981-10-01 00:00:00 (Thu)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  21600,
  0,
  '+06',
      ],
      [
  62522128800, #    utc_start 1982-03-31 18:00:00 (Wed)
  62537940000, #      utc_end 1982-09-30 18:00:00 (Thu)
  62522150400, #  local_start 1982-04-01 00:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  21600,
  1,
  '+06',
      ],
      [
  62537940000, #    utc_start 1982-09-30 18:00:00 (Thu)
  62553668400, #      utc_end 1983-03-31 19:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  18000,
  0,
  '+05',
      ],
      [
  62553668400, #    utc_start 1983-03-31 19:00:00 (Thu)
  62569476000, #      utc_end 1983-09-30 18:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  21600,
  1,
  '+06',
      ],
      [
  62569476000, #    utc_start 1983-09-30 18:00:00 (Fri)
  62585290800, #      utc_end 1984-03-31 19:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62585290800, #    utc_start 1984-03-31 19:00:00 (Sat)
  62601022800, #      utc_end 1984-09-29 21:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62601022800, #    utc_start 1984-09-29 21:00:00 (Sat)
  62616747600, #      utc_end 1985-03-30 21:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62616747600, #    utc_start 1985-03-30 21:00:00 (Sat)
  62632472400, #      utc_end 1985-09-28 21:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62632472400, #    utc_start 1985-09-28 21:00:00 (Sat)
  62648197200, #      utc_end 1986-03-29 21:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62648197200, #    utc_start 1986-03-29 21:00:00 (Sat)
  62663922000, #      utc_end 1986-09-27 21:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62663922000, #    utc_start 1986-09-27 21:00:00 (Sat)
  62679646800, #      utc_end 1987-03-28 21:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62679646800, #    utc_start 1987-03-28 21:00:00 (Sat)
  62695371600, #      utc_end 1987-09-26 21:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62695371600, #    utc_start 1987-09-26 21:00:00 (Sat)
  62711096400, #      utc_end 1988-03-26 21:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62711096400, #    utc_start 1988-03-26 21:00:00 (Sat)
  62726821200, #      utc_end 1988-09-24 21:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62726821200, #    utc_start 1988-09-24 21:00:00 (Sat)
  62742546000, #      utc_end 1989-03-25 21:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62742546000, #    utc_start 1989-03-25 21:00:00 (Sat)
  62758274400, #      utc_end 1989-09-23 22:00:00 (Sat)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62758274400, #    utc_start 1989-09-23 22:00:00 (Sat)
  62773999200, #      utc_end 1990-03-24 22:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62773999200, #    utc_start 1990-03-24 22:00:00 (Sat)
  62790328800, #      utc_end 1990-09-29 22:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62790328800, #    utc_start 1990-09-29 22:00:00 (Sat)
  62806053600, #      utc_end 1991-03-30 22:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62806053600, #    utc_start 1991-03-30 22:00:00 (Sat)
  62821778400, #      utc_end 1991-09-28 22:00:00 (Sat)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62821778400, #    utc_start 1991-09-28 22:00:00 (Sat)
  62831455200, #      utc_end 1992-01-18 22:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62831455200, #    utc_start 1992-01-18 22:00:00 (Sat)
  62837499600, #      utc_end 1992-03-28 21:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62837499600, #    utc_start 1992-03-28 21:00:00 (Sat)
  62853228000, #      utc_end 1992-09-26 22:00:00 (Sat)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62853228000, #    utc_start 1992-09-26 22:00:00 (Sat)
  62868952800, #      utc_end 1993-03-27 22:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62868952800, #    utc_start 1993-03-27 22:00:00 (Sat)
  62884677600, #      utc_end 1993-09-25 22:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62884677600, #    utc_start 1993-09-25 22:00:00 (Sat)
  62900402400, #      utc_end 1994-03-26 22:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62900402400, #    utc_start 1994-03-26 22:00:00 (Sat)
  62916127200, #      utc_end 1994-09-24 22:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62916127200, #    utc_start 1994-09-24 22:00:00 (Sat)
  62931852000, #      utc_end 1995-03-25 22:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62931852000, #    utc_start 1995-03-25 22:00:00 (Sat)
  62947576800, #      utc_end 1995-09-23 22:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62947576800, #    utc_start 1995-09-23 22:00:00 (Sat)
  62963906400, #      utc_end 1996-03-30 22:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62963906400, #    utc_start 1996-03-30 22:00:00 (Sat)
  62982050400, #      utc_end 1996-10-26 22:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62982050400, #    utc_start 1996-10-26 22:00:00 (Sat)
  62995356000, #      utc_end 1997-03-29 22:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62995356000, #    utc_start 1997-03-29 22:00:00 (Sat)
  63013500000, #      utc_end 1997-10-25 22:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  63013500000, #    utc_start 1997-10-25 22:00:00 (Sat)
  63026805600, #      utc_end 1998-03-28 22:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63026805600, #    utc_start 1998-03-28 22:00:00 (Sat)
  63044949600, #      utc_end 1998-10-24 22:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  63044949600, #    utc_start 1998-10-24 22:00:00 (Sat)
  63058255200, #      utc_end 1999-03-27 22:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63058255200, #    utc_start 1999-03-27 22:00:00 (Sat)
  63077004000, #      utc_end 1999-10-30 22:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  63077004000, #    utc_start 1999-10-30 22:00:00 (Sat)
  63089704800, #      utc_end 2000-03-25 22:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63089704800, #    utc_start 2000-03-25 22:00:00 (Sat)
  63108453600, #      utc_end 2000-10-28 22:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  63108453600, #    utc_start 2000-10-28 22:00:00 (Sat)
  63121154400, #      utc_end 2001-03-24 22:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63121154400, #    utc_start 2001-03-24 22:00:00 (Sat)
  63139903200, #      utc_end 2001-10-27 22:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  63139903200, #    utc_start 2001-10-27 22:00:00 (Sat)
  63153208800, #      utc_end 2002-03-30 22:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63153208800, #    utc_start 2002-03-30 22:00:00 (Sat)
  63171352800, #      utc_end 2002-10-26 22:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  63171352800, #    utc_start 2002-10-26 22:00:00 (Sat)
  63184658400, #      utc_end 2003-03-29 22:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63184658400, #    utc_start 2003-03-29 22:00:00 (Sat)
  63202802400, #      utc_end 2003-10-25 22:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  63202802400, #    utc_start 2003-10-25 22:00:00 (Sat)
  63216108000, #      utc_end 2004-03-27 22:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63216108000, #    utc_start 2004-03-27 22:00:00 (Sat)
  63234856800, #      utc_end 2004-10-30 22:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  63234856800, #    utc_start 2004-10-30 22:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  18000,
  0,
  '+05',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {24}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_ORAL

    $main::fatpacked{"DateTime/TimeZone/Asia/Pontianak.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_PONTIANAK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Pontianak;
  $DateTime::TimeZone::Asia::Pontianak::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Pontianak::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60189496960, #      utc_end 1908-04-30 16:42:40 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60189523200, #    local_end 1908-05-01 00:00:00 (Fri)
  26240,
  0,
  'LMT',
      ],
      [
  60189496960, #    utc_start 1908-04-30 16:42:40 (Thu)
  60962776960, #      utc_end 1932-10-31 16:42:40 (Mon)
  60189523200, #  local_start 1908-05-01 00:00:00 (Fri)
  60962803200, #    local_end 1932-11-01 00:00:00 (Tue)
  26240,
  0,
  'PMT',
      ],
      [
  60962776960, #    utc_start 1932-10-31 16:42:40 (Mon)
  61254462600, #      utc_end 1942-01-28 16:30:00 (Wed)
  60962803960, #  local_start 1932-11-01 00:12:40 (Tue)
  61254489600, #    local_end 1942-01-29 00:00:00 (Thu)
  27000,
  0,
  'WIB',
      ],
      [
  61254462600, #    utc_start 1942-01-28 16:30:00 (Wed)
  61369628400, #      utc_end 1945-09-22 15:00:00 (Sat)
  61254495000, #  local_start 1942-01-29 01:30:00 (Thu)
  61369660800, #    local_end 1945-09-23 00:00:00 (Sun)
  32400,
  0,
  'JST',
      ],
      [
  61369628400, #    utc_start 1945-09-22 15:00:00 (Sat)
  61451800200, #      utc_end 1948-04-30 16:30:00 (Fri)
  61369655400, #  local_start 1945-09-22 22:30:00 (Sat)
  61451827200, #    local_end 1948-05-01 00:00:00 (Sat)
  27000,
  0,
  'WIB',
      ],
      [
  61451800200, #    utc_start 1948-04-30 16:30:00 (Fri)
  61514870400, #      utc_end 1950-04-30 16:00:00 (Sun)
  61451829000, #  local_start 1948-05-01 00:30:00 (Sat)
  61514899200, #    local_end 1950-05-01 00:00:00 (Mon)
  28800,
  0,
  'WIB',
      ],
      [
  61514870400, #    utc_start 1950-04-30 16:00:00 (Sun)
  61946267400, #      utc_end 1963-12-31 16:30:00 (Tue)
  61514897400, #  local_start 1950-04-30 23:30:00 (Sun)
  61946294400, #    local_end 1964-01-01 00:00:00 (Wed)
  27000,
  0,
  'WIB',
      ],
      [
  61946267400, #    utc_start 1963-12-31 16:30:00 (Tue)
  62703648000, #      utc_end 1987-12-31 16:00:00 (Thu)
  61946296200, #  local_start 1964-01-01 00:30:00 (Wed)
  62703676800, #    local_end 1988-01-01 00:00:00 (Fri)
  28800,
  0,
  'WITA',
      ],
      [
  62703648000, #    utc_start 1987-12-31 16:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  62703673200, #  local_start 1987-12-31 23:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  25200,
  0,
  'WIB',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_PONTIANAK

    $main::fatpacked{"DateTime/TimeZone/Asia/Pyongyang.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_PYONGYANG';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Pyongyang;
  $DateTime::TimeZone::Asia::Pyongyang::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Pyongyang::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60186901020, #      utc_end 1908-03-31 15:37:00 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60186931200, #    local_end 1908-04-01 00:00:00 (Wed)
  30180,
  0,
  'LMT',
      ],
      [
  60186901020, #    utc_start 1908-03-31 15:37:00 (Tue)
  60305268600, #      utc_end 1911-12-31 15:30:00 (Sun)
  60186931620, #  local_start 1908-04-01 00:07:00 (Wed)
  60305299200, #    local_end 1912-01-01 00:00:00 (Mon)
  30600,
  0,
  'KST',
      ],
      [
  60305268600, #    utc_start 1911-12-31 15:30:00 (Sun)
  61117858800, #      utc_end 1937-09-30 15:00:00 (Thu)
  60305301000, #  local_start 1912-01-01 00:30:00 (Mon)
  61117891200, #    local_end 1937-10-01 00:00:00 (Fri)
  32400,
  0,
  'JCST',
      ],
      [
  61117858800, #    utc_start 1937-09-30 15:00:00 (Thu)
  61367036400, #      utc_end 1945-08-23 15:00:00 (Thu)
  61117891200, #  local_start 1937-10-01 00:00:00 (Fri)
  61367068800, #    local_end 1945-08-24 00:00:00 (Fri)
  32400,
  0,
  'JST',
      ],
      [
  61367036400, #    utc_start 1945-08-23 15:00:00 (Thu)
  63575247600, #      utc_end 2015-08-14 15:00:00 (Fri)
  61367068800, #  local_start 1945-08-24 00:00:00 (Fri)
  63575280000, #    local_end 2015-08-15 00:00:00 (Sat)
  32400,
  0,
  'KST',
      ],
      [
  63575247600, #    utc_start 2015-08-14 15:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #      utc_end
  63575278200, #  local_start 2015-08-14 23:30:00 (Fri)
  DateTime::TimeZone::INFINITY, #    local_end
  30600,
  0,
  'KST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_PYONGYANG

    $main::fatpacked{"DateTime/TimeZone/Asia/Qatar.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_QATAR';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Qatar;
  $DateTime::TimeZone::Asia::Qatar::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Qatar::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60557747632, #      utc_end 1919-12-31 20:33:52 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60557760000, #    local_end 1920-01-01 00:00:00 (Thu)
  12368,
  0,
  'LMT',
      ],
      [
  60557747632, #    utc_start 1919-12-31 20:33:52 (Wed)
  62211873600, #      utc_end 1972-05-31 20:00:00 (Wed)
  60557762032, #  local_start 1920-01-01 00:33:52 (Thu)
  62211888000, #    local_end 1972-06-01 00:00:00 (Thu)
  14400,
  0,
  'GST',
      ],
      [
  62211873600, #    utc_start 1972-05-31 20:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #      utc_end
  62211884400, #  local_start 1972-05-31 23:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #    local_end
  10800,
  0,
  'AST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_QATAR

    $main::fatpacked{"DateTime/TimeZone/Asia/Qyzylorda.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_QYZYLORDA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Qyzylorda;
  $DateTime::TimeZone::Asia::Qyzylorda::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Qyzylorda::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694515488, #      utc_end 1924-05-01 19:38:08 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  15712,
  0,
  'LMT',
      ],
      [
  60694515488, #    utc_start 1924-05-01 19:38:08 (Thu)
  60888139200, #      utc_end 1930-06-20 20:00:00 (Fri)
  60694529888, #  local_start 1924-05-01 23:38:08 (Thu)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  14400,
  0,
  '+04',
      ],
      [
  60888139200, #    utc_start 1930-06-20 20:00:00 (Fri)
  62490596400, #      utc_end 1981-03-31 19:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  18000,
  0,
  '+05',
      ],
      [
  62490596400, #    utc_start 1981-03-31 19:00:00 (Tue)
  62506404000, #      utc_end 1981-09-30 18:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  21600,
  1,
  '+06',
      ],
      [
  62506404000, #    utc_start 1981-09-30 18:00:00 (Wed)
  62522128800, #      utc_end 1982-03-31 18:00:00 (Wed)
  62506425600, #  local_start 1981-10-01 00:00:00 (Thu)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  21600,
  0,
  '+06',
      ],
      [
  62522128800, #    utc_start 1982-03-31 18:00:00 (Wed)
  62537940000, #      utc_end 1982-09-30 18:00:00 (Thu)
  62522150400, #  local_start 1982-04-01 00:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  21600,
  1,
  '+06',
      ],
      [
  62537940000, #    utc_start 1982-09-30 18:00:00 (Thu)
  62553668400, #      utc_end 1983-03-31 19:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  18000,
  0,
  '+05',
      ],
      [
  62553668400, #    utc_start 1983-03-31 19:00:00 (Thu)
  62569476000, #      utc_end 1983-09-30 18:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  21600,
  1,
  '+06',
      ],
      [
  62569476000, #    utc_start 1983-09-30 18:00:00 (Fri)
  62585290800, #      utc_end 1984-03-31 19:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62585290800, #    utc_start 1984-03-31 19:00:00 (Sat)
  62601022800, #      utc_end 1984-09-29 21:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62601022800, #    utc_start 1984-09-29 21:00:00 (Sat)
  62616747600, #      utc_end 1985-03-30 21:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62616747600, #    utc_start 1985-03-30 21:00:00 (Sat)
  62632472400, #      utc_end 1985-09-28 21:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62632472400, #    utc_start 1985-09-28 21:00:00 (Sat)
  62648197200, #      utc_end 1986-03-29 21:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62648197200, #    utc_start 1986-03-29 21:00:00 (Sat)
  62663922000, #      utc_end 1986-09-27 21:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62663922000, #    utc_start 1986-09-27 21:00:00 (Sat)
  62679646800, #      utc_end 1987-03-28 21:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62679646800, #    utc_start 1987-03-28 21:00:00 (Sat)
  62695371600, #      utc_end 1987-09-26 21:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62695371600, #    utc_start 1987-09-26 21:00:00 (Sat)
  62711096400, #      utc_end 1988-03-26 21:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62711096400, #    utc_start 1988-03-26 21:00:00 (Sat)
  62726821200, #      utc_end 1988-09-24 21:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62726821200, #    utc_start 1988-09-24 21:00:00 (Sat)
  62742546000, #      utc_end 1989-03-25 21:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62742546000, #    utc_start 1989-03-25 21:00:00 (Sat)
  62758270800, #      utc_end 1989-09-23 21:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62758270800, #    utc_start 1989-09-23 21:00:00 (Sat)
  62773995600, #      utc_end 1990-03-24 21:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62773995600, #    utc_start 1990-03-24 21:00:00 (Sat)
  62790325200, #      utc_end 1990-09-29 21:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62790325200, #    utc_start 1990-09-29 21:00:00 (Sat)
  62806050000, #      utc_end 1991-03-30 21:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62806050000, #    utc_start 1991-03-30 21:00:00 (Sat)
  62821778400, #      utc_end 1991-09-28 22:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62821778400, #    utc_start 1991-09-28 22:00:00 (Sat)
  62831451600, #      utc_end 1992-01-18 21:00:00 (Sat)
  62821796400, #  local_start 1991-09-29 03:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62831451600, #    utc_start 1992-01-18 21:00:00 (Sat)
  62837496000, #      utc_end 1992-03-28 20:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62837496000, #    utc_start 1992-03-28 20:00:00 (Sat)
  62853224400, #      utc_end 1992-09-26 21:00:00 (Sat)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62853224400, #    utc_start 1992-09-26 21:00:00 (Sat)
  62868949200, #      utc_end 1993-03-27 21:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62868949200, #    utc_start 1993-03-27 21:00:00 (Sat)
  62884674000, #      utc_end 1993-09-25 21:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62884674000, #    utc_start 1993-09-25 21:00:00 (Sat)
  62900398800, #      utc_end 1994-03-26 21:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62900398800, #    utc_start 1994-03-26 21:00:00 (Sat)
  62916123600, #      utc_end 1994-09-24 21:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62916123600, #    utc_start 1994-09-24 21:00:00 (Sat)
  62931848400, #      utc_end 1995-03-25 21:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62931848400, #    utc_start 1995-03-25 21:00:00 (Sat)
  62947573200, #      utc_end 1995-09-23 21:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62947573200, #    utc_start 1995-09-23 21:00:00 (Sat)
  62963902800, #      utc_end 1996-03-30 21:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62963902800, #    utc_start 1996-03-30 21:00:00 (Sat)
  62982046800, #      utc_end 1996-10-26 21:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  62982046800, #    utc_start 1996-10-26 21:00:00 (Sat)
  62995352400, #      utc_end 1997-03-29 21:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  62995352400, #    utc_start 1997-03-29 21:00:00 (Sat)
  63013496400, #      utc_end 1997-10-25 21:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  63013496400, #    utc_start 1997-10-25 21:00:00 (Sat)
  63026802000, #      utc_end 1998-03-28 21:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  63026802000, #    utc_start 1998-03-28 21:00:00 (Sat)
  63044946000, #      utc_end 1998-10-24 21:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  63044946000, #    utc_start 1998-10-24 21:00:00 (Sat)
  63058251600, #      utc_end 1999-03-27 21:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  63058251600, #    utc_start 1999-03-27 21:00:00 (Sat)
  63077000400, #      utc_end 1999-10-30 21:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  63077000400, #    utc_start 1999-10-30 21:00:00 (Sat)
  63089701200, #      utc_end 2000-03-25 21:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  63089701200, #    utc_start 2000-03-25 21:00:00 (Sat)
  63108450000, #      utc_end 2000-10-28 21:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  63108450000, #    utc_start 2000-10-28 21:00:00 (Sat)
  63121150800, #      utc_end 2001-03-24 21:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  63121150800, #    utc_start 2001-03-24 21:00:00 (Sat)
  63139899600, #      utc_end 2001-10-27 21:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  63139899600, #    utc_start 2001-10-27 21:00:00 (Sat)
  63153205200, #      utc_end 2002-03-30 21:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  63153205200, #    utc_start 2002-03-30 21:00:00 (Sat)
  63171349200, #      utc_end 2002-10-26 21:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  63171349200, #    utc_start 2002-10-26 21:00:00 (Sat)
  63184654800, #      utc_end 2003-03-29 21:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  63184654800, #    utc_start 2003-03-29 21:00:00 (Sat)
  63202798800, #      utc_end 2003-10-25 21:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  63202798800, #    utc_start 2003-10-25 21:00:00 (Sat)
  63216104400, #      utc_end 2004-03-27 21:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  18000,
  0,
  '+05',
      ],
      [
  63216104400, #    utc_start 2004-03-27 21:00:00 (Sat)
  63234853200, #      utc_end 2004-10-30 21:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  21600,
  1,
  '+06',
      ],
      [
  63234853200, #    utc_start 2004-10-30 21:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  21600,
  0,
  '+06',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {24}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_QYZYLORDA

    $main::fatpacked{"DateTime/TimeZone/Asia/Riyadh.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_RIYADH';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Riyadh;
  $DateTime::TimeZone::Asia::Riyadh::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Riyadh::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  61416046388, #      utc_end 1947-03-13 20:53:08 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  61416057600, #    local_end 1947-03-14 00:00:00 (Fri)
  11212,
  0,
  'LMT',
      ],
      [
  61416046388, #    utc_start 1947-03-13 20:53:08 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  61416057188, #  local_start 1947-03-13 23:53:08 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  10800,
  0,
  'AST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_RIYADH

    $main::fatpacked{"DateTime/TimeZone/Asia/Sakhalin.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_SAKHALIN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Sakhalin;
  $DateTime::TimeZone::Asia::Sakhalin::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Sakhalin::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60104644152, #      utc_end 1905-08-22 14:29:12 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60104678400, #    local_end 1905-08-23 00:00:00 (Wed)
  34248,
  0,
  'LMT',
      ],
      [
  60104644152, #    utc_start 1905-08-22 14:29:12 (Tue)
  61117858800, #      utc_end 1937-09-30 15:00:00 (Thu)
  60104676552, #  local_start 1905-08-22 23:29:12 (Tue)
  61117891200, #    local_end 1937-10-01 00:00:00 (Fri)
  32400,
  0,
  'JCST',
      ],
      [
  61117858800, #    utc_start 1937-09-30 15:00:00 (Thu)
  61367122800, #      utc_end 1945-08-24 15:00:00 (Fri)
  61117891200, #  local_start 1937-10-01 00:00:00 (Fri)
  61367155200, #    local_end 1945-08-25 00:00:00 (Sat)
  32400,
  0,
  'JST',
      ],
      [
  61367122800, #    utc_start 1945-08-24 15:00:00 (Fri)
  62490574800, #      utc_end 1981-03-31 13:00:00 (Tue)
  61367162400, #  local_start 1945-08-25 02:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  39600,
  0,
  'SAKT',
      ],
      [
  62490574800, #    utc_start 1981-03-31 13:00:00 (Tue)
  62506382400, #      utc_end 1981-09-30 12:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  43200,
  1,
  'SAKST',
      ],
      [
  62506382400, #    utc_start 1981-09-30 12:00:00 (Wed)
  62522110800, #      utc_end 1982-03-31 13:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  39600,
  0,
  'SAKT',
      ],
      [
  62522110800, #    utc_start 1982-03-31 13:00:00 (Wed)
  62537918400, #      utc_end 1982-09-30 12:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  43200,
  1,
  'SAKST',
      ],
      [
  62537918400, #    utc_start 1982-09-30 12:00:00 (Thu)
  62553646800, #      utc_end 1983-03-31 13:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  39600,
  0,
  'SAKT',
      ],
      [
  62553646800, #    utc_start 1983-03-31 13:00:00 (Thu)
  62569454400, #      utc_end 1983-09-30 12:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  43200,
  1,
  'SAKST',
      ],
      [
  62569454400, #    utc_start 1983-09-30 12:00:00 (Fri)
  62585269200, #      utc_end 1984-03-31 13:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  39600,
  0,
  'SAKT',
      ],
      [
  62585269200, #    utc_start 1984-03-31 13:00:00 (Sat)
  62601001200, #      utc_end 1984-09-29 15:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  43200,
  1,
  'SAKST',
      ],
      [
  62601001200, #    utc_start 1984-09-29 15:00:00 (Sat)
  62616726000, #      utc_end 1985-03-30 15:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  39600,
  0,
  'SAKT',
      ],
      [
  62616726000, #    utc_start 1985-03-30 15:00:00 (Sat)
  62632450800, #      utc_end 1985-09-28 15:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  43200,
  1,
  'SAKST',
      ],
      [
  62632450800, #    utc_start 1985-09-28 15:00:00 (Sat)
  62648175600, #      utc_end 1986-03-29 15:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  39600,
  0,
  'SAKT',
      ],
      [
  62648175600, #    utc_start 1986-03-29 15:00:00 (Sat)
  62663900400, #      utc_end 1986-09-27 15:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  43200,
  1,
  'SAKST',
      ],
      [
  62663900400, #    utc_start 1986-09-27 15:00:00 (Sat)
  62679625200, #      utc_end 1987-03-28 15:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  39600,
  0,
  'SAKT',
      ],
      [
  62679625200, #    utc_start 1987-03-28 15:00:00 (Sat)
  62695350000, #      utc_end 1987-09-26 15:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  43200,
  1,
  'SAKST',
      ],
      [
  62695350000, #    utc_start 1987-09-26 15:00:00 (Sat)
  62711074800, #      utc_end 1988-03-26 15:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  39600,
  0,
  'SAKT',
      ],
      [
  62711074800, #    utc_start 1988-03-26 15:00:00 (Sat)
  62726799600, #      utc_end 1988-09-24 15:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  43200,
  1,
  'SAKST',
      ],
      [
  62726799600, #    utc_start 1988-09-24 15:00:00 (Sat)
  62742524400, #      utc_end 1989-03-25 15:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  39600,
  0,
  'SAKT',
      ],
      [
  62742524400, #    utc_start 1989-03-25 15:00:00 (Sat)
  62758249200, #      utc_end 1989-09-23 15:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  43200,
  1,
  'SAKST',
      ],
      [
  62758249200, #    utc_start 1989-09-23 15:00:00 (Sat)
  62773974000, #      utc_end 1990-03-24 15:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  39600,
  0,
  'SAKT',
      ],
      [
  62773974000, #    utc_start 1990-03-24 15:00:00 (Sat)
  62790303600, #      utc_end 1990-09-29 15:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  43200,
  1,
  'SAKST',
      ],
      [
  62790303600, #    utc_start 1990-09-29 15:00:00 (Sat)
  62806028400, #      utc_end 1991-03-30 15:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  39600,
  0,
  'SAKT',
      ],
      [
  62806028400, #    utc_start 1991-03-30 15:00:00 (Sat)
  62821756800, #      utc_end 1991-09-28 16:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  39600,
  1,
  'SAKST',
      ],
      [
  62821756800, #    utc_start 1991-09-28 16:00:00 (Sat)
  62831433600, #      utc_end 1992-01-18 16:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  36000,
  0,
  'SAKT',
      ],
      [
  62831433600, #    utc_start 1992-01-18 16:00:00 (Sat)
  62837478000, #      utc_end 1992-03-28 15:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  39600,
  0,
  'SAKT',
      ],
      [
  62837478000, #    utc_start 1992-03-28 15:00:00 (Sat)
  62853202800, #      utc_end 1992-09-26 15:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  43200,
  1,
  'SAKST',
      ],
      [
  62853202800, #    utc_start 1992-09-26 15:00:00 (Sat)
  62868927600, #      utc_end 1993-03-27 15:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  39600,
  0,
  'SAKT',
      ],
      [
  62868927600, #    utc_start 1993-03-27 15:00:00 (Sat)
  62884652400, #      utc_end 1993-09-25 15:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  43200,
  1,
  'SAKST',
      ],
      [
  62884652400, #    utc_start 1993-09-25 15:00:00 (Sat)
  62900377200, #      utc_end 1994-03-26 15:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  39600,
  0,
  'SAKT',
      ],
      [
  62900377200, #    utc_start 1994-03-26 15:00:00 (Sat)
  62916102000, #      utc_end 1994-09-24 15:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  43200,
  1,
  'SAKST',
      ],
      [
  62916102000, #    utc_start 1994-09-24 15:00:00 (Sat)
  62931826800, #      utc_end 1995-03-25 15:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  39600,
  0,
  'SAKT',
      ],
      [
  62931826800, #    utc_start 1995-03-25 15:00:00 (Sat)
  62947551600, #      utc_end 1995-09-23 15:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  43200,
  1,
  'SAKST',
      ],
      [
  62947551600, #    utc_start 1995-09-23 15:00:00 (Sat)
  62963881200, #      utc_end 1996-03-30 15:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  39600,
  0,
  'SAKT',
      ],
      [
  62963881200, #    utc_start 1996-03-30 15:00:00 (Sat)
  62982025200, #      utc_end 1996-10-26 15:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  43200,
  1,
  'SAKST',
      ],
      [
  62982025200, #    utc_start 1996-10-26 15:00:00 (Sat)
  62995330800, #      utc_end 1997-03-29 15:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  39600,
  0,
  'SAKT',
      ],
      [
  62995330800, #    utc_start 1997-03-29 15:00:00 (Sat)
  63013478400, #      utc_end 1997-10-25 16:00:00 (Sat)
  62995370400, #  local_start 1997-03-30 02:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  39600,
  1,
  'SAKST',
      ],
      [
  63013478400, #    utc_start 1997-10-25 16:00:00 (Sat)
  63026784000, #      utc_end 1998-03-28 16:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  36000,
  0,
  'SAKT',
      ],
      [
  63026784000, #    utc_start 1998-03-28 16:00:00 (Sat)
  63044928000, #      utc_end 1998-10-24 16:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  39600,
  1,
  'SAKST',
      ],
      [
  63044928000, #    utc_start 1998-10-24 16:00:00 (Sat)
  63058233600, #      utc_end 1999-03-27 16:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  36000,
  0,
  'SAKT',
      ],
      [
  63058233600, #    utc_start 1999-03-27 16:00:00 (Sat)
  63076982400, #      utc_end 1999-10-30 16:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  39600,
  1,
  'SAKST',
      ],
      [
  63076982400, #    utc_start 1999-10-30 16:00:00 (Sat)
  63089683200, #      utc_end 2000-03-25 16:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  36000,
  0,
  'SAKT',
      ],
      [
  63089683200, #    utc_start 2000-03-25 16:00:00 (Sat)
  63108432000, #      utc_end 2000-10-28 16:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  39600,
  1,
  'SAKST',
      ],
      [
  63108432000, #    utc_start 2000-10-28 16:00:00 (Sat)
  63121132800, #      utc_end 2001-03-24 16:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  36000,
  0,
  'SAKT',
      ],
      [
  63121132800, #    utc_start 2001-03-24 16:00:00 (Sat)
  63139881600, #      utc_end 2001-10-27 16:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  39600,
  1,
  'SAKST',
      ],
      [
  63139881600, #    utc_start 2001-10-27 16:00:00 (Sat)
  63153187200, #      utc_end 2002-03-30 16:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  36000,
  0,
  'SAKT',
      ],
      [
  63153187200, #    utc_start 2002-03-30 16:00:00 (Sat)
  63171331200, #      utc_end 2002-10-26 16:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  39600,
  1,
  'SAKST',
      ],
      [
  63171331200, #    utc_start 2002-10-26 16:00:00 (Sat)
  63184636800, #      utc_end 2003-03-29 16:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  36000,
  0,
  'SAKT',
      ],
      [
  63184636800, #    utc_start 2003-03-29 16:00:00 (Sat)
  63202780800, #      utc_end 2003-10-25 16:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  39600,
  1,
  'SAKST',
      ],
      [
  63202780800, #    utc_start 2003-10-25 16:00:00 (Sat)
  63216086400, #      utc_end 2004-03-27 16:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  36000,
  0,
  'SAKT',
      ],
      [
  63216086400, #    utc_start 2004-03-27 16:00:00 (Sat)
  63234835200, #      utc_end 2004-10-30 16:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  39600,
  1,
  'SAKST',
      ],
      [
  63234835200, #    utc_start 2004-10-30 16:00:00 (Sat)
  63247536000, #      utc_end 2005-03-26 16:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  36000,
  0,
  'SAKT',
      ],
      [
  63247536000, #    utc_start 2005-03-26 16:00:00 (Sat)
  63266284800, #      utc_end 2005-10-29 16:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  39600,
  1,
  'SAKST',
      ],
      [
  63266284800, #    utc_start 2005-10-29 16:00:00 (Sat)
  63278985600, #      utc_end 2006-03-25 16:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  36000,
  0,
  'SAKT',
      ],
      [
  63278985600, #    utc_start 2006-03-25 16:00:00 (Sat)
  63297734400, #      utc_end 2006-10-28 16:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  39600,
  1,
  'SAKST',
      ],
      [
  63297734400, #    utc_start 2006-10-28 16:00:00 (Sat)
  63310435200, #      utc_end 2007-03-24 16:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  36000,
  0,
  'SAKT',
      ],
      [
  63310435200, #    utc_start 2007-03-24 16:00:00 (Sat)
  63329184000, #      utc_end 2007-10-27 16:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  39600,
  1,
  'SAKST',
      ],
      [
  63329184000, #    utc_start 2007-10-27 16:00:00 (Sat)
  63342489600, #      utc_end 2008-03-29 16:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  36000,
  0,
  'SAKT',
      ],
      [
  63342489600, #    utc_start 2008-03-29 16:00:00 (Sat)
  63360633600, #      utc_end 2008-10-25 16:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  39600,
  1,
  'SAKST',
      ],
      [
  63360633600, #    utc_start 2008-10-25 16:00:00 (Sat)
  63373939200, #      utc_end 2009-03-28 16:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  36000,
  0,
  'SAKT',
      ],
      [
  63373939200, #    utc_start 2009-03-28 16:00:00 (Sat)
  63392083200, #      utc_end 2009-10-24 16:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  39600,
  1,
  'SAKST',
      ],
      [
  63392083200, #    utc_start 2009-10-24 16:00:00 (Sat)
  63405388800, #      utc_end 2010-03-27 16:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  36000,
  0,
  'SAKT',
      ],
      [
  63405388800, #    utc_start 2010-03-27 16:00:00 (Sat)
  63424137600, #      utc_end 2010-10-30 16:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  39600,
  1,
  'SAKST',
      ],
      [
  63424137600, #    utc_start 2010-10-30 16:00:00 (Sat)
  63436838400, #      utc_end 2011-03-26 16:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  36000,
  0,
  'SAKT',
      ],
      [
  63436838400, #    utc_start 2011-03-26 16:00:00 (Sat)
  63549932400, #      utc_end 2014-10-25 15:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  39600,
  0,
  'SAKT',
      ],
      [
  63549932400, #    utc_start 2014-10-25 15:00:00 (Sat)
  63594691200, #      utc_end 2016-03-26 16:00:00 (Sat)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  36000,
  0,
  'SAKT',
      ],
      [
  63594691200, #    utc_start 2016-03-26 16:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  39600,
  0,
  'SAKT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_SAKHALIN

    $main::fatpacked{"DateTime/TimeZone/Asia/Samarkand.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_SAMARKAND';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Samarkand;
  $DateTime::TimeZone::Asia::Samarkand::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Samarkand::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694515127, #      utc_end 1924-05-01 19:32:07 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  16073,
  0,
  'LMT',
      ],
      [
  60694515127, #    utc_start 1924-05-01 19:32:07 (Thu)
  60888139200, #      utc_end 1930-06-20 20:00:00 (Fri)
  60694529527, #  local_start 1924-05-01 23:32:07 (Thu)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  14400,
  0,
  'SAMT',
      ],
      [
  60888139200, #    utc_start 1930-06-20 20:00:00 (Fri)
  62490596400, #      utc_end 1981-03-31 19:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  18000,
  0,
  'SAMT',
      ],
      [
  62490596400, #    utc_start 1981-03-31 19:00:00 (Tue)
  62506404000, #      utc_end 1981-09-30 18:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  21600,
  1,
  'SAMST',
      ],
      [
  62506404000, #    utc_start 1981-09-30 18:00:00 (Wed)
  62522128800, #      utc_end 1982-03-31 18:00:00 (Wed)
  62506425600, #  local_start 1981-10-01 00:00:00 (Thu)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  21600,
  0,
  'TAST',
      ],
      [
  62522128800, #    utc_start 1982-03-31 18:00:00 (Wed)
  62537940000, #      utc_end 1982-09-30 18:00:00 (Thu)
  62522150400, #  local_start 1982-04-01 00:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  21600,
  1,
  'SAMST',
      ],
      [
  62537940000, #    utc_start 1982-09-30 18:00:00 (Thu)
  62553668400, #      utc_end 1983-03-31 19:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  18000,
  0,
  'SAMT',
      ],
      [
  62553668400, #    utc_start 1983-03-31 19:00:00 (Thu)
  62569476000, #      utc_end 1983-09-30 18:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  21600,
  1,
  'SAMST',
      ],
      [
  62569476000, #    utc_start 1983-09-30 18:00:00 (Fri)
  62585290800, #      utc_end 1984-03-31 19:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  18000,
  0,
  'SAMT',
      ],
      [
  62585290800, #    utc_start 1984-03-31 19:00:00 (Sat)
  62601022800, #      utc_end 1984-09-29 21:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  21600,
  1,
  'SAMST',
      ],
      [
  62601022800, #    utc_start 1984-09-29 21:00:00 (Sat)
  62616747600, #      utc_end 1985-03-30 21:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  18000,
  0,
  'SAMT',
      ],
      [
  62616747600, #    utc_start 1985-03-30 21:00:00 (Sat)
  62632472400, #      utc_end 1985-09-28 21:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  21600,
  1,
  'SAMST',
      ],
      [
  62632472400, #    utc_start 1985-09-28 21:00:00 (Sat)
  62648197200, #      utc_end 1986-03-29 21:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  18000,
  0,
  'SAMT',
      ],
      [
  62648197200, #    utc_start 1986-03-29 21:00:00 (Sat)
  62663922000, #      utc_end 1986-09-27 21:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  21600,
  1,
  'SAMST',
      ],
      [
  62663922000, #    utc_start 1986-09-27 21:00:00 (Sat)
  62679646800, #      utc_end 1987-03-28 21:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  18000,
  0,
  'SAMT',
      ],
      [
  62679646800, #    utc_start 1987-03-28 21:00:00 (Sat)
  62695371600, #      utc_end 1987-09-26 21:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  21600,
  1,
  'SAMST',
      ],
      [
  62695371600, #    utc_start 1987-09-26 21:00:00 (Sat)
  62711096400, #      utc_end 1988-03-26 21:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  18000,
  0,
  'SAMT',
      ],
      [
  62711096400, #    utc_start 1988-03-26 21:00:00 (Sat)
  62726821200, #      utc_end 1988-09-24 21:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  21600,
  1,
  'SAMST',
      ],
      [
  62726821200, #    utc_start 1988-09-24 21:00:00 (Sat)
  62742546000, #      utc_end 1989-03-25 21:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  18000,
  0,
  'SAMT',
      ],
      [
  62742546000, #    utc_start 1989-03-25 21:00:00 (Sat)
  62758270800, #      utc_end 1989-09-23 21:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  21600,
  1,
  'SAMST',
      ],
      [
  62758270800, #    utc_start 1989-09-23 21:00:00 (Sat)
  62773995600, #      utc_end 1990-03-24 21:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  18000,
  0,
  'SAMT',
      ],
      [
  62773995600, #    utc_start 1990-03-24 21:00:00 (Sat)
  62790325200, #      utc_end 1990-09-29 21:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  21600,
  1,
  'SAMST',
      ],
      [
  62790325200, #    utc_start 1990-09-29 21:00:00 (Sat)
  62806050000, #      utc_end 1991-03-30 21:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  18000,
  0,
  'SAMT',
      ],
      [
  62806050000, #    utc_start 1991-03-30 21:00:00 (Sat)
  62819344800, #      utc_end 1991-08-31 18:00:00 (Sat)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62819366400, #    local_end 1991-09-01 00:00:00 (Sun)
  21600,
  1,
  'SAMST',
      ],
      [
  62819344800, #    utc_start 1991-08-31 18:00:00 (Sat)
  62821774800, #      utc_end 1991-09-28 21:00:00 (Sat)
  62819366400, #  local_start 1991-09-01 00:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  21600,
  1,
  'UZST',
      ],
      [
  62821774800, #    utc_start 1991-09-28 21:00:00 (Sat)
  62829889200, #      utc_end 1991-12-31 19:00:00 (Tue)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62829907200, #    local_end 1992-01-01 00:00:00 (Wed)
  18000,
  0,
  'UZT',
      ],
      [
  62829889200, #    utc_start 1991-12-31 19:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  62829907200, #  local_start 1992-01-01 00:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #    local_end
  18000,
  0,
  'UZT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {12}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_SAMARKAND

    $main::fatpacked{"DateTime/TimeZone/Asia/Seoul.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_SEOUL';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Seoul;
  $DateTime::TimeZone::Asia::Seoul::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Seoul::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60186900728, #      utc_end 1908-03-31 15:32:08 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60186931200, #    local_end 1908-04-01 00:00:00 (Wed)
  30472,
  0,
  'LMT',
      ],
      [
  60186900728, #    utc_start 1908-03-31 15:32:08 (Tue)
  60305268600, #      utc_end 1911-12-31 15:30:00 (Sun)
  60186931328, #  local_start 1908-04-01 00:02:08 (Wed)
  60305299200, #    local_end 1912-01-01 00:00:00 (Mon)
  30600,
  0,
  'KST',
      ],
      [
  60305268600, #    utc_start 1911-12-31 15:30:00 (Sun)
  61117858800, #      utc_end 1937-09-30 15:00:00 (Thu)
  60305301000, #  local_start 1912-01-01 00:30:00 (Mon)
  61117891200, #    local_end 1937-10-01 00:00:00 (Fri)
  32400,
  0,
  'JCST',
      ],
      [
  61117858800, #    utc_start 1937-09-30 15:00:00 (Thu)
  61368332400, #      utc_end 1945-09-07 15:00:00 (Fri)
  61117891200, #  local_start 1937-10-01 00:00:00 (Fri)
  61368364800, #    local_end 1945-09-08 00:00:00 (Sat)
  32400,
  0,
  'JST',
      ],
      [
  61368332400, #    utc_start 1945-09-07 15:00:00 (Fri)
  61637554800, #      utc_end 1954-03-20 15:00:00 (Sat)
  61368364800, #  local_start 1945-09-08 00:00:00 (Sat)
  61637587200, #    local_end 1954-03-21 00:00:00 (Sun)
  32400,
  0,
  'KST',
      ],
      [
  61637554800, #    utc_start 1954-03-20 15:00:00 (Sat)
  61672980600, #      utc_end 1955-05-04 15:30:00 (Wed)
  61637585400, #  local_start 1954-03-20 23:30:00 (Sat)
  61673011200, #    local_end 1955-05-05 00:00:00 (Thu)
  30600,
  0,
  'KST',
      ],
      [
  61672980600, #    utc_start 1955-05-04 15:30:00 (Wed)
  61683949800, #      utc_end 1955-09-08 14:30:00 (Thu)
  61673014800, #  local_start 1955-05-05 01:00:00 (Thu)
  61683984000, #    local_end 1955-09-09 00:00:00 (Fri)
  34200,
  1,
  'KDT',
      ],
      [
  61683949800, #    utc_start 1955-09-08 14:30:00 (Thu)
  61705899000, #      utc_end 1956-05-19 15:30:00 (Sat)
  61683980400, #  local_start 1955-09-08 23:00:00 (Thu)
  61705929600, #    local_end 1956-05-20 00:00:00 (Sun)
  30600,
  0,
  'KST',
      ],
      [
  61705899000, #    utc_start 1956-05-19 15:30:00 (Sat)
  61717386600, #      utc_end 1956-09-29 14:30:00 (Sat)
  61705933200, #  local_start 1956-05-20 01:00:00 (Sun)
  61717420800, #    local_end 1956-09-30 00:00:00 (Sun)
  34200,
  1,
  'KDT',
      ],
      [
  61717386600, #    utc_start 1956-09-29 14:30:00 (Sat)
  61736139000, #      utc_end 1957-05-04 15:30:00 (Sat)
  61717417200, #  local_start 1956-09-29 23:00:00 (Sat)
  61736169600, #    local_end 1957-05-05 00:00:00 (Sun)
  30600,
  0,
  'KST',
      ],
      [
  61736139000, #    utc_start 1957-05-04 15:30:00 (Sat)
  61748231400, #      utc_end 1957-09-21 14:30:00 (Sat)
  61736173200, #  local_start 1957-05-05 01:00:00 (Sun)
  61748265600, #    local_end 1957-09-22 00:00:00 (Sun)
  34200,
  1,
  'KDT',
      ],
      [
  61748231400, #    utc_start 1957-09-21 14:30:00 (Sat)
  61767588600, #      utc_end 1958-05-03 15:30:00 (Sat)
  61748262000, #  local_start 1957-09-21 23:00:00 (Sat)
  61767619200, #    local_end 1958-05-04 00:00:00 (Sun)
  30600,
  0,
  'KST',
      ],
      [
  61767588600, #    utc_start 1958-05-03 15:30:00 (Sat)
  61779681000, #      utc_end 1958-09-20 14:30:00 (Sat)
  61767622800, #  local_start 1958-05-04 01:00:00 (Sun)
  61779715200, #    local_end 1958-09-21 00:00:00 (Sun)
  34200,
  1,
  'KDT',
      ],
      [
  61779681000, #    utc_start 1958-09-20 14:30:00 (Sat)
  61799038200, #      utc_end 1959-05-02 15:30:00 (Sat)
  61779711600, #  local_start 1958-09-20 23:00:00 (Sat)
  61799068800, #    local_end 1959-05-03 00:00:00 (Sun)
  30600,
  0,
  'KST',
      ],
      [
  61799038200, #    utc_start 1959-05-02 15:30:00 (Sat)
  61811130600, #      utc_end 1959-09-19 14:30:00 (Sat)
  61799072400, #  local_start 1959-05-03 01:00:00 (Sun)
  61811164800, #    local_end 1959-09-20 00:00:00 (Sun)
  34200,
  1,
  'KDT',
      ],
      [
  61811130600, #    utc_start 1959-09-19 14:30:00 (Sat)
  61830487800, #      utc_end 1960-04-30 15:30:00 (Sat)
  61811161200, #  local_start 1959-09-19 23:00:00 (Sat)
  61830518400, #    local_end 1960-05-01 00:00:00 (Sun)
  30600,
  0,
  'KST',
      ],
      [
  61830487800, #    utc_start 1960-04-30 15:30:00 (Sat)
  61842580200, #      utc_end 1960-09-17 14:30:00 (Sat)
  61830522000, #  local_start 1960-05-01 01:00:00 (Sun)
  61842614400, #    local_end 1960-09-18 00:00:00 (Sun)
  34200,
  1,
  'KDT',
      ],
      [
  61842580200, #    utc_start 1960-09-17 14:30:00 (Sat)
  61870750200, #      utc_end 1961-08-09 15:30:00 (Wed)
  61842610800, #  local_start 1960-09-17 23:00:00 (Sat)
  61870780800, #    local_end 1961-08-10 00:00:00 (Thu)
  30600,
  0,
  'KST',
      ],
      [
  61870750200, #    utc_start 1961-08-09 15:30:00 (Wed)
  62683261200, #      utc_end 1987-05-09 17:00:00 (Sat)
  61870782600, #  local_start 1961-08-10 00:30:00 (Thu)
  62683293600, #    local_end 1987-05-10 02:00:00 (Sun)
  32400,
  0,
  'KST',
      ],
      [
  62683261200, #    utc_start 1987-05-09 17:00:00 (Sat)
  62696566800, #      utc_end 1987-10-10 17:00:00 (Sat)
  62683297200, #  local_start 1987-05-10 03:00:00 (Sun)
  62696602800, #    local_end 1987-10-11 03:00:00 (Sun)
  36000,
  1,
  'KDT',
      ],
      [
  62696566800, #    utc_start 1987-10-10 17:00:00 (Sat)
  62714710800, #      utc_end 1988-05-07 17:00:00 (Sat)
  62696599200, #  local_start 1987-10-11 02:00:00 (Sun)
  62714743200, #    local_end 1988-05-08 02:00:00 (Sun)
  32400,
  0,
  'KST',
      ],
      [
  62714710800, #    utc_start 1988-05-07 17:00:00 (Sat)
  62728016400, #      utc_end 1988-10-08 17:00:00 (Sat)
  62714746800, #  local_start 1988-05-08 03:00:00 (Sun)
  62728052400, #    local_end 1988-10-09 03:00:00 (Sun)
  36000,
  1,
  'KDT',
      ],
      [
  62728016400, #    utc_start 1988-10-08 17:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  62728048800, #  local_start 1988-10-09 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  32400,
  0,
  'KST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {8}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_SEOUL

    $main::fatpacked{"DateTime/TimeZone/Asia/Shanghai.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_SHANGHAI';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Shanghai;
  $DateTime::TimeZone::Asia::Shanghai::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Shanghai::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958201257, #      utc_end 1900-12-31 15:54:17 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  29143,
  0,
  'LMT',
      ],
      [
  59958201257, #    utc_start 1900-12-31 15:54:17 (Mon)
  61202188800, #      utc_end 1940-06-02 16:00:00 (Sun)
  59958230057, #  local_start 1900-12-31 23:54:17 (Mon)
  61202217600, #    local_end 1940-06-03 00:00:00 (Mon)
  28800,
  0,
  'CST',
      ],
      [
  61202188800, #    utc_start 1940-06-02 16:00:00 (Sun)
  61212553200, #      utc_end 1940-09-30 15:00:00 (Mon)
  61202221200, #  local_start 1940-06-03 01:00:00 (Mon)
  61212585600, #    local_end 1940-10-01 00:00:00 (Tue)
  32400,
  1,
  'CDT',
      ],
      [
  61212553200, #    utc_start 1940-09-30 15:00:00 (Mon)
  61226899200, #      utc_end 1941-03-15 16:00:00 (Sat)
  61212582000, #  local_start 1940-09-30 23:00:00 (Mon)
  61226928000, #    local_end 1941-03-16 00:00:00 (Sun)
  28800,
  0,
  'CST',
      ],
      [
  61226899200, #    utc_start 1941-03-15 16:00:00 (Sat)
  61244089200, #      utc_end 1941-09-30 15:00:00 (Tue)
  61226931600, #  local_start 1941-03-16 01:00:00 (Sun)
  61244121600, #    local_end 1941-10-01 00:00:00 (Wed)
  32400,
  1,
  'CDT',
      ],
      [
  61244089200, #    utc_start 1941-09-30 15:00:00 (Tue)
  61472966400, #      utc_end 1948-12-31 16:00:00 (Fri)
  61244118000, #  local_start 1941-09-30 23:00:00 (Tue)
  61472995200, #    local_end 1949-01-01 00:00:00 (Sat)
  28800,
  0,
  'CST',
      ],
      [
  61472966400, #    utc_start 1948-12-31 16:00:00 (Fri)
  62651203200, #      utc_end 1986-05-03 16:00:00 (Sat)
  61472995200, #  local_start 1949-01-01 00:00:00 (Sat)
  62651232000, #    local_end 1986-05-04 00:00:00 (Sun)
  28800,
  0,
  'CST',
      ],
      [
  62651203200, #    utc_start 1986-05-03 16:00:00 (Sat)
  62662690800, #      utc_end 1986-09-13 15:00:00 (Sat)
  62651235600, #  local_start 1986-05-04 01:00:00 (Sun)
  62662723200, #    local_end 1986-09-14 00:00:00 (Sun)
  32400,
  1,
  'CDT',
      ],
      [
  62662690800, #    utc_start 1986-09-13 15:00:00 (Sat)
  62680838400, #      utc_end 1987-04-11 16:00:00 (Sat)
  62662719600, #  local_start 1986-09-13 23:00:00 (Sat)
  62680867200, #    local_end 1987-04-12 00:00:00 (Sun)
  28800,
  0,
  'CST',
      ],
      [
  62680838400, #    utc_start 1987-04-11 16:00:00 (Sat)
  62694140400, #      utc_end 1987-09-12 15:00:00 (Sat)
  62680870800, #  local_start 1987-04-12 01:00:00 (Sun)
  62694172800, #    local_end 1987-09-13 00:00:00 (Sun)
  32400,
  1,
  'CDT',
      ],
      [
  62694140400, #    utc_start 1987-09-12 15:00:00 (Sat)
  62712288000, #      utc_end 1988-04-09 16:00:00 (Sat)
  62694169200, #  local_start 1987-09-12 23:00:00 (Sat)
  62712316800, #    local_end 1988-04-10 00:00:00 (Sun)
  28800,
  0,
  'CST',
      ],
      [
  62712288000, #    utc_start 1988-04-09 16:00:00 (Sat)
  62725590000, #      utc_end 1988-09-10 15:00:00 (Sat)
  62712320400, #  local_start 1988-04-10 01:00:00 (Sun)
  62725622400, #    local_end 1988-09-11 00:00:00 (Sun)
  32400,
  1,
  'CDT',
      ],
      [
  62725590000, #    utc_start 1988-09-10 15:00:00 (Sat)
  62744342400, #      utc_end 1989-04-15 16:00:00 (Sat)
  62725618800, #  local_start 1988-09-10 23:00:00 (Sat)
  62744371200, #    local_end 1989-04-16 00:00:00 (Sun)
  28800,
  0,
  'CST',
      ],
      [
  62744342400, #    utc_start 1989-04-15 16:00:00 (Sat)
  62757644400, #      utc_end 1989-09-16 15:00:00 (Sat)
  62744374800, #  local_start 1989-04-16 01:00:00 (Sun)
  62757676800, #    local_end 1989-09-17 00:00:00 (Sun)
  32400,
  1,
  'CDT',
      ],
      [
  62757644400, #    utc_start 1989-09-16 15:00:00 (Sat)
  62775792000, #      utc_end 1990-04-14 16:00:00 (Sat)
  62757673200, #  local_start 1989-09-16 23:00:00 (Sat)
  62775820800, #    local_end 1990-04-15 00:00:00 (Sun)
  28800,
  0,
  'CST',
      ],
      [
  62775792000, #    utc_start 1990-04-14 16:00:00 (Sat)
  62789094000, #      utc_end 1990-09-15 15:00:00 (Sat)
  62775824400, #  local_start 1990-04-15 01:00:00 (Sun)
  62789126400, #    local_end 1990-09-16 00:00:00 (Sun)
  32400,
  1,
  'CDT',
      ],
      [
  62789094000, #    utc_start 1990-09-15 15:00:00 (Sat)
  62807241600, #      utc_end 1991-04-13 16:00:00 (Sat)
  62789122800, #  local_start 1990-09-15 23:00:00 (Sat)
  62807270400, #    local_end 1991-04-14 00:00:00 (Sun)
  28800,
  0,
  'CST',
      ],
      [
  62807241600, #    utc_start 1991-04-13 16:00:00 (Sat)
  62820543600, #      utc_end 1991-09-14 15:00:00 (Sat)
  62807274000, #  local_start 1991-04-14 01:00:00 (Sun)
  62820576000, #    local_end 1991-09-15 00:00:00 (Sun)
  32400,
  1,
  'CDT',
      ],
      [
  62820543600, #    utc_start 1991-09-14 15:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  62820572400, #  local_start 1991-09-14 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  28800,
  0,
  'CST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {8}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_SHANGHAI

    $main::fatpacked{"DateTime/TimeZone/Asia/Singapore.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_SINGAPORE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Singapore;
  $DateTime::TimeZone::Asia::Singapore::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Singapore::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958205475, #      utc_end 1900-12-31 17:04:35 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  24925,
  0,
  'LMT',
      ],
      [
  59958205475, #    utc_start 1900-12-31 17:04:35 (Mon)
  60097482275, #      utc_end 1905-05-31 17:04:35 (Wed)
  59958230400, #  local_start 1901-01-01 00:00:00 (Tue)
  60097507200, #    local_end 1905-06-01 00:00:00 (Thu)
  24925,
  0,
  'SMT',
      ],
      [
  60097482275, #    utc_start 1905-05-31 17:04:35 (Wed)
  60968048400, #      utc_end 1932-12-31 17:00:00 (Sat)
  60097507475, #  local_start 1905-06-01 00:04:35 (Thu)
  60968073600, #    local_end 1933-01-01 00:00:00 (Sun)
  25200,
  0,
  'MALT',
      ],
      [
  60968048400, #    utc_start 1932-12-31 17:00:00 (Sat)
  61062655200, #      utc_end 1935-12-31 16:40:00 (Tue)
  60968074800, #  local_start 1933-01-01 00:20:00 (Sun)
  61062681600, #    local_end 1936-01-01 00:00:00 (Wed)
  26400,
  1,
  'MALST',
      ],
      [
  61062655200, #    utc_start 1935-12-31 16:40:00 (Tue)
  61241503200, #      utc_end 1941-08-31 16:40:00 (Sun)
  61062681600, #  local_start 1936-01-01 00:00:00 (Wed)
  61241529600, #    local_end 1941-09-01 00:00:00 (Mon)
  26400,
  0,
  'MALT',
      ],
      [
  61241503200, #    utc_start 1941-08-31 16:40:00 (Sun)
  61256017800, #      utc_end 1942-02-15 16:30:00 (Sun)
  61241530200, #  local_start 1941-09-01 00:10:00 (Mon)
  61256044800, #    local_end 1942-02-16 00:00:00 (Mon)
  27000,
  0,
  'MALT',
      ],
      [
  61256017800, #    utc_start 1942-02-15 16:30:00 (Sun)
  61368678000, #      utc_end 1945-09-11 15:00:00 (Tue)
  61256050200, #  local_start 1942-02-16 01:30:00 (Mon)
  61368710400, #    local_end 1945-09-12 00:00:00 (Wed)
  32400,
  0,
  'JST',
      ],
      [
  61368678000, #    utc_start 1945-09-11 15:00:00 (Tue)
  61996897800, #      utc_end 1965-08-08 16:30:00 (Sun)
  61368705000, #  local_start 1945-09-11 22:30:00 (Tue)
  61996924800, #    local_end 1965-08-09 00:00:00 (Mon)
  27000,
  0,
  'MALT',
      ],
      [
  61996897800, #    utc_start 1965-08-08 16:30:00 (Sun)
  62514347400, #      utc_end 1981-12-31 16:30:00 (Thu)
  61996924800, #  local_start 1965-08-09 00:00:00 (Mon)
  62514374400, #    local_end 1982-01-01 00:00:00 (Fri)
  27000,
  0,
  'SGT',
      ],
      [
  62514347400, #    utc_start 1981-12-31 16:30:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  62514376200, #  local_start 1982-01-01 00:30:00 (Fri)
  DateTime::TimeZone::INFINITY, #    local_end
  28800,
  0,
  'SGT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {1}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_SINGAPORE

    $main::fatpacked{"DateTime/TimeZone/Asia/Srednekolymsk.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_SREDNEKOLYMSK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Srednekolymsk;
  $DateTime::TimeZone::Asia::Srednekolymsk::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Srednekolymsk::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694494308, #      utc_end 1924-05-01 13:45:08 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  36892,
  0,
  'LMT',
      ],
      [
  60694494308, #    utc_start 1924-05-01 13:45:08 (Thu)
  60888117600, #      utc_end 1930-06-20 14:00:00 (Fri)
  60694530308, #  local_start 1924-05-01 23:45:08 (Thu)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  36000,
  0,
  'MAGT',
      ],
      [
  60888117600, #    utc_start 1930-06-20 14:00:00 (Fri)
  62490574800, #      utc_end 1981-03-31 13:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  39600,
  0,
  'MAGT',
      ],
      [
  62490574800, #    utc_start 1981-03-31 13:00:00 (Tue)
  62506382400, #      utc_end 1981-09-30 12:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  43200,
  1,
  'MAGST',
      ],
      [
  62506382400, #    utc_start 1981-09-30 12:00:00 (Wed)
  62522110800, #      utc_end 1982-03-31 13:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  39600,
  0,
  'MAGT',
      ],
      [
  62522110800, #    utc_start 1982-03-31 13:00:00 (Wed)
  62537918400, #      utc_end 1982-09-30 12:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  43200,
  1,
  'MAGST',
      ],
      [
  62537918400, #    utc_start 1982-09-30 12:00:00 (Thu)
  62553646800, #      utc_end 1983-03-31 13:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  39600,
  0,
  'MAGT',
      ],
      [
  62553646800, #    utc_start 1983-03-31 13:00:00 (Thu)
  62569454400, #      utc_end 1983-09-30 12:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  43200,
  1,
  'MAGST',
      ],
      [
  62569454400, #    utc_start 1983-09-30 12:00:00 (Fri)
  62585269200, #      utc_end 1984-03-31 13:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62585269200, #    utc_start 1984-03-31 13:00:00 (Sat)
  62601001200, #      utc_end 1984-09-29 15:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62601001200, #    utc_start 1984-09-29 15:00:00 (Sat)
  62616726000, #      utc_end 1985-03-30 15:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62616726000, #    utc_start 1985-03-30 15:00:00 (Sat)
  62632450800, #      utc_end 1985-09-28 15:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62632450800, #    utc_start 1985-09-28 15:00:00 (Sat)
  62648175600, #      utc_end 1986-03-29 15:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62648175600, #    utc_start 1986-03-29 15:00:00 (Sat)
  62663900400, #      utc_end 1986-09-27 15:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62663900400, #    utc_start 1986-09-27 15:00:00 (Sat)
  62679625200, #      utc_end 1987-03-28 15:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62679625200, #    utc_start 1987-03-28 15:00:00 (Sat)
  62695350000, #      utc_end 1987-09-26 15:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62695350000, #    utc_start 1987-09-26 15:00:00 (Sat)
  62711074800, #      utc_end 1988-03-26 15:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62711074800, #    utc_start 1988-03-26 15:00:00 (Sat)
  62726799600, #      utc_end 1988-09-24 15:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62726799600, #    utc_start 1988-09-24 15:00:00 (Sat)
  62742524400, #      utc_end 1989-03-25 15:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62742524400, #    utc_start 1989-03-25 15:00:00 (Sat)
  62758249200, #      utc_end 1989-09-23 15:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62758249200, #    utc_start 1989-09-23 15:00:00 (Sat)
  62773974000, #      utc_end 1990-03-24 15:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62773974000, #    utc_start 1990-03-24 15:00:00 (Sat)
  62790303600, #      utc_end 1990-09-29 15:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62790303600, #    utc_start 1990-09-29 15:00:00 (Sat)
  62806028400, #      utc_end 1991-03-30 15:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62806028400, #    utc_start 1991-03-30 15:00:00 (Sat)
  62821756800, #      utc_end 1991-09-28 16:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  39600,
  1,
  'MAGST',
      ],
      [
  62821756800, #    utc_start 1991-09-28 16:00:00 (Sat)
  62831433600, #      utc_end 1992-01-18 16:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  36000,
  0,
  'MAGT',
      ],
      [
  62831433600, #    utc_start 1992-01-18 16:00:00 (Sat)
  62837478000, #      utc_end 1992-03-28 15:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62837478000, #    utc_start 1992-03-28 15:00:00 (Sat)
  62853202800, #      utc_end 1992-09-26 15:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62853202800, #    utc_start 1992-09-26 15:00:00 (Sat)
  62868927600, #      utc_end 1993-03-27 15:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62868927600, #    utc_start 1993-03-27 15:00:00 (Sat)
  62884652400, #      utc_end 1993-09-25 15:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62884652400, #    utc_start 1993-09-25 15:00:00 (Sat)
  62900377200, #      utc_end 1994-03-26 15:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62900377200, #    utc_start 1994-03-26 15:00:00 (Sat)
  62916102000, #      utc_end 1994-09-24 15:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62916102000, #    utc_start 1994-09-24 15:00:00 (Sat)
  62931826800, #      utc_end 1995-03-25 15:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62931826800, #    utc_start 1995-03-25 15:00:00 (Sat)
  62947551600, #      utc_end 1995-09-23 15:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62947551600, #    utc_start 1995-09-23 15:00:00 (Sat)
  62963881200, #      utc_end 1996-03-30 15:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62963881200, #    utc_start 1996-03-30 15:00:00 (Sat)
  62982025200, #      utc_end 1996-10-26 15:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62982025200, #    utc_start 1996-10-26 15:00:00 (Sat)
  62995330800, #      utc_end 1997-03-29 15:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62995330800, #    utc_start 1997-03-29 15:00:00 (Sat)
  63013474800, #      utc_end 1997-10-25 15:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63013474800, #    utc_start 1997-10-25 15:00:00 (Sat)
  63026780400, #      utc_end 1998-03-28 15:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63026780400, #    utc_start 1998-03-28 15:00:00 (Sat)
  63044924400, #      utc_end 1998-10-24 15:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63044924400, #    utc_start 1998-10-24 15:00:00 (Sat)
  63058230000, #      utc_end 1999-03-27 15:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63058230000, #    utc_start 1999-03-27 15:00:00 (Sat)
  63076978800, #      utc_end 1999-10-30 15:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63076978800, #    utc_start 1999-10-30 15:00:00 (Sat)
  63089679600, #      utc_end 2000-03-25 15:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63089679600, #    utc_start 2000-03-25 15:00:00 (Sat)
  63108428400, #      utc_end 2000-10-28 15:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63108428400, #    utc_start 2000-10-28 15:00:00 (Sat)
  63121129200, #      utc_end 2001-03-24 15:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63121129200, #    utc_start 2001-03-24 15:00:00 (Sat)
  63139878000, #      utc_end 2001-10-27 15:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63139878000, #    utc_start 2001-10-27 15:00:00 (Sat)
  63153183600, #      utc_end 2002-03-30 15:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63153183600, #    utc_start 2002-03-30 15:00:00 (Sat)
  63171327600, #      utc_end 2002-10-26 15:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63171327600, #    utc_start 2002-10-26 15:00:00 (Sat)
  63184633200, #      utc_end 2003-03-29 15:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63184633200, #    utc_start 2003-03-29 15:00:00 (Sat)
  63202777200, #      utc_end 2003-10-25 15:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63202777200, #    utc_start 2003-10-25 15:00:00 (Sat)
  63216082800, #      utc_end 2004-03-27 15:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63216082800, #    utc_start 2004-03-27 15:00:00 (Sat)
  63234831600, #      utc_end 2004-10-30 15:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63234831600, #    utc_start 2004-10-30 15:00:00 (Sat)
  63247532400, #      utc_end 2005-03-26 15:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63247532400, #    utc_start 2005-03-26 15:00:00 (Sat)
  63266281200, #      utc_end 2005-10-29 15:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63266281200, #    utc_start 2005-10-29 15:00:00 (Sat)
  63278982000, #      utc_end 2006-03-25 15:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63278982000, #    utc_start 2006-03-25 15:00:00 (Sat)
  63297730800, #      utc_end 2006-10-28 15:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63297730800, #    utc_start 2006-10-28 15:00:00 (Sat)
  63310431600, #      utc_end 2007-03-24 15:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63310431600, #    utc_start 2007-03-24 15:00:00 (Sat)
  63329180400, #      utc_end 2007-10-27 15:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63329180400, #    utc_start 2007-10-27 15:00:00 (Sat)
  63342486000, #      utc_end 2008-03-29 15:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63342486000, #    utc_start 2008-03-29 15:00:00 (Sat)
  63360630000, #      utc_end 2008-10-25 15:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63360630000, #    utc_start 2008-10-25 15:00:00 (Sat)
  63373935600, #      utc_end 2009-03-28 15:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63373935600, #    utc_start 2009-03-28 15:00:00 (Sat)
  63392079600, #      utc_end 2009-10-24 15:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63392079600, #    utc_start 2009-10-24 15:00:00 (Sat)
  63405385200, #      utc_end 2010-03-27 15:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63405385200, #    utc_start 2010-03-27 15:00:00 (Sat)
  63424134000, #      utc_end 2010-10-30 15:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63424134000, #    utc_start 2010-10-30 15:00:00 (Sat)
  63436834800, #      utc_end 2011-03-26 15:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63436834800, #    utc_start 2011-03-26 15:00:00 (Sat)
  63549928800, #      utc_end 2014-10-25 14:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  43200,
  0,
  'MAGT',
      ],
      [
  63549928800, #    utc_start 2014-10-25 14:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  39600,
  0,
  'SRET',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_SREDNEKOLYMSK

    $main::fatpacked{"DateTime/TimeZone/Asia/Taipei.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_TAIPEI';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Taipei;
  $DateTime::TimeZone::Asia::Taipei::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Taipei::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59800434840, #      utc_end 1895-12-31 15:54:00 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59800464000, #    local_end 1896-01-01 00:00:00 (Wed)
  29160,
  0,
  'LMT',
      ],
      [
  59800434840, #    utc_start 1895-12-31 15:54:00 (Tue)
  61117862400, #      utc_end 1937-09-30 16:00:00 (Thu)
  59800463640, #  local_start 1895-12-31 23:54:00 (Tue)
  61117891200, #    local_end 1937-10-01 00:00:00 (Fri)
  28800,
  0,
  'JWST',
      ],
      [
  61117862400, #    utc_start 1937-09-30 16:00:00 (Thu)
  61369459200, #      utc_end 1945-09-20 16:00:00 (Thu)
  61117894800, #  local_start 1937-10-01 01:00:00 (Fri)
  61369491600, #    local_end 1945-09-21 01:00:00 (Fri)
  32400,
  0,
  'JST',
      ],
      [
  61369459200, #    utc_start 1945-09-20 16:00:00 (Thu)
  61389849600, #      utc_end 1946-05-14 16:00:00 (Tue)
  61369488000, #  local_start 1945-09-21 00:00:00 (Fri)
  61389878400, #    local_end 1946-05-15 00:00:00 (Wed)
  28800,
  0,
  'CST',
      ],
      [
  61389849600, #    utc_start 1946-05-14 16:00:00 (Tue)
  61401855600, #      utc_end 1946-09-30 15:00:00 (Mon)
  61389882000, #  local_start 1946-05-15 01:00:00 (Wed)
  61401888000, #    local_end 1946-10-01 00:00:00 (Tue)
  32400,
  1,
  'CDT',
      ],
      [
  61401855600, #    utc_start 1946-09-30 15:00:00 (Mon)
  61418793600, #      utc_end 1947-04-14 16:00:00 (Mon)
  61401884400, #  local_start 1946-09-30 23:00:00 (Mon)
  61418822400, #    local_end 1947-04-15 00:00:00 (Tue)
  28800,
  0,
  'CST',
      ],
      [
  61418793600, #    utc_start 1947-04-14 16:00:00 (Mon)
  61436070000, #      utc_end 1947-10-31 15:00:00 (Fri)
  61418826000, #  local_start 1947-04-15 01:00:00 (Tue)
  61436102400, #    local_end 1947-11-01 00:00:00 (Sat)
  32400,
  1,
  'CDT',
      ],
      [
  61436070000, #    utc_start 1947-10-31 15:00:00 (Fri)
  61451798400, #      utc_end 1948-04-30 16:00:00 (Fri)
  61436098800, #  local_start 1947-10-31 23:00:00 (Fri)
  61451827200, #    local_end 1948-05-01 00:00:00 (Sat)
  28800,
  0,
  'CST',
      ],
      [
  61451798400, #    utc_start 1948-04-30 16:00:00 (Fri)
  61465014000, #      utc_end 1948-09-30 15:00:00 (Thu)
  61451830800, #  local_start 1948-05-01 01:00:00 (Sat)
  61465046400, #    local_end 1948-10-01 00:00:00 (Fri)
  32400,
  1,
  'CDT',
      ],
      [
  61465014000, #    utc_start 1948-09-30 15:00:00 (Thu)
  61483334400, #      utc_end 1949-04-30 16:00:00 (Sat)
  61465042800, #  local_start 1948-09-30 23:00:00 (Thu)
  61483363200, #    local_end 1949-05-01 00:00:00 (Sun)
  28800,
  0,
  'CST',
      ],
      [
  61483334400, #    utc_start 1949-04-30 16:00:00 (Sat)
  61496550000, #      utc_end 1949-09-30 15:00:00 (Fri)
  61483366800, #  local_start 1949-05-01 01:00:00 (Sun)
  61496582400, #    local_end 1949-10-01 00:00:00 (Sat)
  32400,
  1,
  'CDT',
      ],
      [
  61496550000, #    utc_start 1949-09-30 15:00:00 (Fri)
  61514870400, #      utc_end 1950-04-30 16:00:00 (Sun)
  61496578800, #  local_start 1949-09-30 23:00:00 (Fri)
  61514899200, #    local_end 1950-05-01 00:00:00 (Mon)
  28800,
  0,
  'CST',
      ],
      [
  61514870400, #    utc_start 1950-04-30 16:00:00 (Sun)
  61528086000, #      utc_end 1950-09-30 15:00:00 (Sat)
  61514902800, #  local_start 1950-05-01 01:00:00 (Mon)
  61528118400, #    local_end 1950-10-01 00:00:00 (Sun)
  32400,
  1,
  'CDT',
      ],
      [
  61528086000, #    utc_start 1950-09-30 15:00:00 (Sat)
  61546406400, #      utc_end 1951-04-30 16:00:00 (Mon)
  61528114800, #  local_start 1950-09-30 23:00:00 (Sat)
  61546435200, #    local_end 1951-05-01 00:00:00 (Tue)
  28800,
  0,
  'CST',
      ],
      [
  61546406400, #    utc_start 1951-04-30 16:00:00 (Mon)
  61559622000, #      utc_end 1951-09-30 15:00:00 (Sun)
  61546438800, #  local_start 1951-05-01 01:00:00 (Tue)
  61559654400, #    local_end 1951-10-01 00:00:00 (Mon)
  32400,
  1,
  'CDT',
      ],
      [
  61559622000, #    utc_start 1951-09-30 15:00:00 (Sun)
  61572758400, #      utc_end 1952-02-29 16:00:00 (Fri)
  61559650800, #  local_start 1951-09-30 23:00:00 (Sun)
  61572787200, #    local_end 1952-03-01 00:00:00 (Sat)
  28800,
  0,
  'CST',
      ],
      [
  61572758400, #    utc_start 1952-02-29 16:00:00 (Fri)
  61593922800, #      utc_end 1952-10-31 15:00:00 (Fri)
  61572790800, #  local_start 1952-03-01 01:00:00 (Sat)
  61593955200, #    local_end 1952-11-01 00:00:00 (Sat)
  32400,
  1,
  'CDT',
      ],
      [
  61593922800, #    utc_start 1952-10-31 15:00:00 (Fri)
  61606972800, #      utc_end 1953-03-31 16:00:00 (Tue)
  61593951600, #  local_start 1952-10-31 23:00:00 (Fri)
  61607001600, #    local_end 1953-04-01 00:00:00 (Wed)
  28800,
  0,
  'CST',
      ],
      [
  61606972800, #    utc_start 1953-03-31 16:00:00 (Tue)
  61625458800, #      utc_end 1953-10-31 15:00:00 (Sat)
  61607005200, #  local_start 1953-04-01 01:00:00 (Wed)
  61625491200, #    local_end 1953-11-01 00:00:00 (Sun)
  32400,
  1,
  'CDT',
      ],
      [
  61625458800, #    utc_start 1953-10-31 15:00:00 (Sat)
  61638508800, #      utc_end 1954-03-31 16:00:00 (Wed)
  61625487600, #  local_start 1953-10-31 23:00:00 (Sat)
  61638537600, #    local_end 1954-04-01 00:00:00 (Thu)
  28800,
  0,
  'CST',
      ],
      [
  61638508800, #    utc_start 1954-03-31 16:00:00 (Wed)
  61656994800, #      utc_end 1954-10-31 15:00:00 (Sun)
  61638541200, #  local_start 1954-04-01 01:00:00 (Thu)
  61657027200, #    local_end 1954-11-01 00:00:00 (Mon)
  32400,
  1,
  'CDT',
      ],
      [
  61656994800, #    utc_start 1954-10-31 15:00:00 (Sun)
  61670044800, #      utc_end 1955-03-31 16:00:00 (Thu)
  61657023600, #  local_start 1954-10-31 23:00:00 (Sun)
  61670073600, #    local_end 1955-04-01 00:00:00 (Fri)
  28800,
  0,
  'CST',
      ],
      [
  61670044800, #    utc_start 1955-03-31 16:00:00 (Thu)
  61685852400, #      utc_end 1955-09-30 15:00:00 (Fri)
  61670077200, #  local_start 1955-04-01 01:00:00 (Fri)
  61685884800, #    local_end 1955-10-01 00:00:00 (Sat)
  32400,
  1,
  'CDT',
      ],
      [
  61685852400, #    utc_start 1955-09-30 15:00:00 (Fri)
  61701667200, #      utc_end 1956-03-31 16:00:00 (Sat)
  61685881200, #  local_start 1955-09-30 23:00:00 (Fri)
  61701696000, #    local_end 1956-04-01 00:00:00 (Sun)
  28800,
  0,
  'CST',
      ],
      [
  61701667200, #    utc_start 1956-03-31 16:00:00 (Sat)
  61717474800, #      utc_end 1956-09-30 15:00:00 (Sun)
  61701699600, #  local_start 1956-04-01 01:00:00 (Sun)
  61717507200, #    local_end 1956-10-01 00:00:00 (Mon)
  32400,
  1,
  'CDT',
      ],
      [
  61717474800, #    utc_start 1956-09-30 15:00:00 (Sun)
  61733203200, #      utc_end 1957-03-31 16:00:00 (Sun)
  61717503600, #  local_start 1956-09-30 23:00:00 (Sun)
  61733232000, #    local_end 1957-04-01 00:00:00 (Mon)
  28800,
  0,
  'CST',
      ],
      [
  61733203200, #    utc_start 1957-03-31 16:00:00 (Sun)
  61749010800, #      utc_end 1957-09-30 15:00:00 (Mon)
  61733235600, #  local_start 1957-04-01 01:00:00 (Mon)
  61749043200, #    local_end 1957-10-01 00:00:00 (Tue)
  32400,
  1,
  'CDT',
      ],
      [
  61749010800, #    utc_start 1957-09-30 15:00:00 (Mon)
  61764739200, #      utc_end 1958-03-31 16:00:00 (Mon)
  61749039600, #  local_start 1957-09-30 23:00:00 (Mon)
  61764768000, #    local_end 1958-04-01 00:00:00 (Tue)
  28800,
  0,
  'CST',
      ],
      [
  61764739200, #    utc_start 1958-03-31 16:00:00 (Mon)
  61780546800, #      utc_end 1958-09-30 15:00:00 (Tue)
  61764771600, #  local_start 1958-04-01 01:00:00 (Tue)
  61780579200, #    local_end 1958-10-01 00:00:00 (Wed)
  32400,
  1,
  'CDT',
      ],
      [
  61780546800, #    utc_start 1958-09-30 15:00:00 (Tue)
  61796275200, #      utc_end 1959-03-31 16:00:00 (Tue)
  61780575600, #  local_start 1958-09-30 23:00:00 (Tue)
  61796304000, #    local_end 1959-04-01 00:00:00 (Wed)
  28800,
  0,
  'CST',
      ],
      [
  61796275200, #    utc_start 1959-03-31 16:00:00 (Tue)
  61812082800, #      utc_end 1959-09-30 15:00:00 (Wed)
  61796307600, #  local_start 1959-04-01 01:00:00 (Wed)
  61812115200, #    local_end 1959-10-01 00:00:00 (Thu)
  32400,
  1,
  'CDT',
      ],
      [
  61812082800, #    utc_start 1959-09-30 15:00:00 (Wed)
  61833168000, #      utc_end 1960-05-31 16:00:00 (Tue)
  61812111600, #  local_start 1959-09-30 23:00:00 (Wed)
  61833196800, #    local_end 1960-06-01 00:00:00 (Wed)
  28800,
  0,
  'CST',
      ],
      [
  61833168000, #    utc_start 1960-05-31 16:00:00 (Tue)
  61843705200, #      utc_end 1960-09-30 15:00:00 (Fri)
  61833200400, #  local_start 1960-06-01 01:00:00 (Wed)
  61843737600, #    local_end 1960-10-01 00:00:00 (Sat)
  32400,
  1,
  'CDT',
      ],
      [
  61843705200, #    utc_start 1960-09-30 15:00:00 (Fri)
  61864704000, #      utc_end 1961-05-31 16:00:00 (Wed)
  61843734000, #  local_start 1960-09-30 23:00:00 (Fri)
  61864732800, #    local_end 1961-06-01 00:00:00 (Thu)
  28800,
  0,
  'CST',
      ],
      [
  61864704000, #    utc_start 1961-05-31 16:00:00 (Wed)
  61875241200, #      utc_end 1961-09-30 15:00:00 (Sat)
  61864736400, #  local_start 1961-06-01 01:00:00 (Thu)
  61875273600, #    local_end 1961-10-01 00:00:00 (Sun)
  32400,
  1,
  'CDT',
      ],
      [
  61875241200, #    utc_start 1961-09-30 15:00:00 (Sat)
  62269660800, #      utc_end 1974-03-31 16:00:00 (Sun)
  61875270000, #  local_start 1961-09-30 23:00:00 (Sat)
  62269689600, #    local_end 1974-04-01 00:00:00 (Mon)
  28800,
  0,
  'CST',
      ],
      [
  62269660800, #    utc_start 1974-03-31 16:00:00 (Sun)
  62285468400, #      utc_end 1974-09-30 15:00:00 (Mon)
  62269693200, #  local_start 1974-04-01 01:00:00 (Mon)
  62285500800, #    local_end 1974-10-01 00:00:00 (Tue)
  32400,
  1,
  'CDT',
      ],
      [
  62285468400, #    utc_start 1974-09-30 15:00:00 (Mon)
  62301196800, #      utc_end 1975-03-31 16:00:00 (Mon)
  62285497200, #  local_start 1974-09-30 23:00:00 (Mon)
  62301225600, #    local_end 1975-04-01 00:00:00 (Tue)
  28800,
  0,
  'CST',
      ],
      [
  62301196800, #    utc_start 1975-03-31 16:00:00 (Mon)
  62317004400, #      utc_end 1975-09-30 15:00:00 (Tue)
  62301229200, #  local_start 1975-04-01 01:00:00 (Tue)
  62317036800, #    local_end 1975-10-01 00:00:00 (Wed)
  32400,
  1,
  'CDT',
      ],
      [
  62317004400, #    utc_start 1975-09-30 15:00:00 (Tue)
  62435289600, #      utc_end 1979-06-30 16:00:00 (Sat)
  62317033200, #  local_start 1975-09-30 23:00:00 (Tue)
  62435318400, #    local_end 1979-07-01 00:00:00 (Sun)
  28800,
  0,
  'CST',
      ],
      [
  62435289600, #    utc_start 1979-06-30 16:00:00 (Sat)
  62443234800, #      utc_end 1979-09-30 15:00:00 (Sun)
  62435322000, #  local_start 1979-07-01 01:00:00 (Sun)
  62443267200, #    local_end 1979-10-01 00:00:00 (Mon)
  32400,
  1,
  'CDT',
      ],
      [
  62443234800, #    utc_start 1979-09-30 15:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  62443263600, #  local_start 1979-09-30 23:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  28800,
  0,
  'CST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {19}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_TAIPEI

    $main::fatpacked{"DateTime/TimeZone/Asia/Tashkent.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_TASHKENT';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Tashkent;
  $DateTime::TimeZone::Asia::Tashkent::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Tashkent::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694514569, #      utc_end 1924-05-01 19:22:49 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  16631,
  0,
  'LMT',
      ],
      [
  60694514569, #    utc_start 1924-05-01 19:22:49 (Thu)
  60888135600, #      utc_end 1930-06-20 19:00:00 (Fri)
  60694532569, #  local_start 1924-05-02 00:22:49 (Fri)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  18000,
  0,
  'TAST',
      ],
      [
  60888135600, #    utc_start 1930-06-20 19:00:00 (Fri)
  62490592800, #      utc_end 1981-03-31 18:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  21600,
  0,
  'TAST',
      ],
      [
  62490592800, #    utc_start 1981-03-31 18:00:00 (Tue)
  62506400400, #      utc_end 1981-09-30 17:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  25200,
  1,
  'TASST',
      ],
      [
  62506400400, #    utc_start 1981-09-30 17:00:00 (Wed)
  62522128800, #      utc_end 1982-03-31 18:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  21600,
  0,
  'TAST',
      ],
      [
  62522128800, #    utc_start 1982-03-31 18:00:00 (Wed)
  62537936400, #      utc_end 1982-09-30 17:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  25200,
  1,
  'TASST',
      ],
      [
  62537936400, #    utc_start 1982-09-30 17:00:00 (Thu)
  62553664800, #      utc_end 1983-03-31 18:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  21600,
  0,
  'TAST',
      ],
      [
  62553664800, #    utc_start 1983-03-31 18:00:00 (Thu)
  62569472400, #      utc_end 1983-09-30 17:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  25200,
  1,
  'TASST',
      ],
      [
  62569472400, #    utc_start 1983-09-30 17:00:00 (Fri)
  62585287200, #      utc_end 1984-03-31 18:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  21600,
  0,
  'TAST',
      ],
      [
  62585287200, #    utc_start 1984-03-31 18:00:00 (Sat)
  62601019200, #      utc_end 1984-09-29 20:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  25200,
  1,
  'TASST',
      ],
      [
  62601019200, #    utc_start 1984-09-29 20:00:00 (Sat)
  62616744000, #      utc_end 1985-03-30 20:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  21600,
  0,
  'TAST',
      ],
      [
  62616744000, #    utc_start 1985-03-30 20:00:00 (Sat)
  62632468800, #      utc_end 1985-09-28 20:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  25200,
  1,
  'TASST',
      ],
      [
  62632468800, #    utc_start 1985-09-28 20:00:00 (Sat)
  62648193600, #      utc_end 1986-03-29 20:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  21600,
  0,
  'TAST',
      ],
      [
  62648193600, #    utc_start 1986-03-29 20:00:00 (Sat)
  62663918400, #      utc_end 1986-09-27 20:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  25200,
  1,
  'TASST',
      ],
      [
  62663918400, #    utc_start 1986-09-27 20:00:00 (Sat)
  62679643200, #      utc_end 1987-03-28 20:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  21600,
  0,
  'TAST',
      ],
      [
  62679643200, #    utc_start 1987-03-28 20:00:00 (Sat)
  62695368000, #      utc_end 1987-09-26 20:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  25200,
  1,
  'TASST',
      ],
      [
  62695368000, #    utc_start 1987-09-26 20:00:00 (Sat)
  62711092800, #      utc_end 1988-03-26 20:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  21600,
  0,
  'TAST',
      ],
      [
  62711092800, #    utc_start 1988-03-26 20:00:00 (Sat)
  62726817600, #      utc_end 1988-09-24 20:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  25200,
  1,
  'TASST',
      ],
      [
  62726817600, #    utc_start 1988-09-24 20:00:00 (Sat)
  62742542400, #      utc_end 1989-03-25 20:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  21600,
  0,
  'TAST',
      ],
      [
  62742542400, #    utc_start 1989-03-25 20:00:00 (Sat)
  62758267200, #      utc_end 1989-09-23 20:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  25200,
  1,
  'TASST',
      ],
      [
  62758267200, #    utc_start 1989-09-23 20:00:00 (Sat)
  62773992000, #      utc_end 1990-03-24 20:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  21600,
  0,
  'TAST',
      ],
      [
  62773992000, #    utc_start 1990-03-24 20:00:00 (Sat)
  62790321600, #      utc_end 1990-09-29 20:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  25200,
  1,
  'TASST',
      ],
      [
  62790321600, #    utc_start 1990-09-29 20:00:00 (Sat)
  62806046400, #      utc_end 1991-03-30 20:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  21600,
  0,
  'TAST',
      ],
      [
  62806046400, #    utc_start 1991-03-30 20:00:00 (Sat)
  62819344800, #      utc_end 1991-08-31 18:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62819366400, #    local_end 1991-09-01 00:00:00 (Sun)
  21600,
  1,
  'TASST',
      ],
      [
  62819344800, #    utc_start 1991-08-31 18:00:00 (Sat)
  62821774800, #      utc_end 1991-09-28 21:00:00 (Sat)
  62819366400, #  local_start 1991-09-01 00:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  21600,
  1,
  'UZST',
      ],
      [
  62821774800, #    utc_start 1991-09-28 21:00:00 (Sat)
  62829889200, #      utc_end 1991-12-31 19:00:00 (Tue)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62829907200, #    local_end 1992-01-01 00:00:00 (Wed)
  18000,
  0,
  'UZT',
      ],
      [
  62829889200, #    utc_start 1991-12-31 19:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  62829907200, #  local_start 1992-01-01 00:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #    local_end
  18000,
  0,
  'UZT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {12}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_TASHKENT

    $main::fatpacked{"DateTime/TimeZone/Asia/Tbilisi.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_TBILISI';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Tbilisi;
  $DateTime::TimeZone::Asia::Tbilisi::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Tbilisi::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295531649, #      utc_end 1879-12-31 21:00:49 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  10751,
  0,
  'LMT',
      ],
      [
  59295531649, #    utc_start 1879-12-31 21:00:49 (Wed)
  60694520449, #      utc_end 1924-05-01 21:00:49 (Thu)
  59295542400, #  local_start 1880-01-01 00:00:00 (Thu)
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  10751,
  0,
  'TBMT',
      ],
      [
  60694520449, #    utc_start 1924-05-01 21:00:49 (Thu)
  61730542800, #      utc_end 1957-02-28 21:00:00 (Thu)
  60694531249, #  local_start 1924-05-02 00:00:49 (Fri)
  61730553600, #    local_end 1957-03-01 00:00:00 (Fri)
  10800,
  0,
  'TBIT',
      ],
      [
  61730542800, #    utc_start 1957-02-28 21:00:00 (Thu)
  62490600000, #      utc_end 1981-03-31 20:00:00 (Tue)
  61730557200, #  local_start 1957-03-01 01:00:00 (Fri)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  14400,
  0,
  'TBIT',
      ],
      [
  62490600000, #    utc_start 1981-03-31 20:00:00 (Tue)
  62506407600, #      utc_end 1981-09-30 19:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  18000,
  1,
  'TBIST',
      ],
      [
  62506407600, #    utc_start 1981-09-30 19:00:00 (Wed)
  62522136000, #      utc_end 1982-03-31 20:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  14400,
  0,
  'TBIT',
      ],
      [
  62522136000, #    utc_start 1982-03-31 20:00:00 (Wed)
  62537943600, #      utc_end 1982-09-30 19:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  18000,
  1,
  'TBIST',
      ],
      [
  62537943600, #    utc_start 1982-09-30 19:00:00 (Thu)
  62553672000, #      utc_end 1983-03-31 20:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  14400,
  0,
  'TBIT',
      ],
      [
  62553672000, #    utc_start 1983-03-31 20:00:00 (Thu)
  62569479600, #      utc_end 1983-09-30 19:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  18000,
  1,
  'TBIST',
      ],
      [
  62569479600, #    utc_start 1983-09-30 19:00:00 (Fri)
  62585294400, #      utc_end 1984-03-31 20:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  14400,
  0,
  'TBIT',
      ],
      [
  62585294400, #    utc_start 1984-03-31 20:00:00 (Sat)
  62601026400, #      utc_end 1984-09-29 22:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  18000,
  1,
  'TBIST',
      ],
      [
  62601026400, #    utc_start 1984-09-29 22:00:00 (Sat)
  62616751200, #      utc_end 1985-03-30 22:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  14400,
  0,
  'TBIT',
      ],
      [
  62616751200, #    utc_start 1985-03-30 22:00:00 (Sat)
  62632476000, #      utc_end 1985-09-28 22:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  18000,
  1,
  'TBIST',
      ],
      [
  62632476000, #    utc_start 1985-09-28 22:00:00 (Sat)
  62648200800, #      utc_end 1986-03-29 22:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  14400,
  0,
  'TBIT',
      ],
      [
  62648200800, #    utc_start 1986-03-29 22:00:00 (Sat)
  62663925600, #      utc_end 1986-09-27 22:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  18000,
  1,
  'TBIST',
      ],
      [
  62663925600, #    utc_start 1986-09-27 22:00:00 (Sat)
  62679650400, #      utc_end 1987-03-28 22:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  14400,
  0,
  'TBIT',
      ],
      [
  62679650400, #    utc_start 1987-03-28 22:00:00 (Sat)
  62695375200, #      utc_end 1987-09-26 22:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  18000,
  1,
  'TBIST',
      ],
      [
  62695375200, #    utc_start 1987-09-26 22:00:00 (Sat)
  62711100000, #      utc_end 1988-03-26 22:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  14400,
  0,
  'TBIT',
      ],
      [
  62711100000, #    utc_start 1988-03-26 22:00:00 (Sat)
  62726824800, #      utc_end 1988-09-24 22:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  18000,
  1,
  'TBIST',
      ],
      [
  62726824800, #    utc_start 1988-09-24 22:00:00 (Sat)
  62742549600, #      utc_end 1989-03-25 22:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  14400,
  0,
  'TBIT',
      ],
      [
  62742549600, #    utc_start 1989-03-25 22:00:00 (Sat)
  62758274400, #      utc_end 1989-09-23 22:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  18000,
  1,
  'TBIST',
      ],
      [
  62758274400, #    utc_start 1989-09-23 22:00:00 (Sat)
  62773999200, #      utc_end 1990-03-24 22:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  14400,
  0,
  'TBIT',
      ],
      [
  62773999200, #    utc_start 1990-03-24 22:00:00 (Sat)
  62790328800, #      utc_end 1990-09-29 22:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  18000,
  1,
  'TBIST',
      ],
      [
  62790328800, #    utc_start 1990-09-29 22:00:00 (Sat)
  62806053600, #      utc_end 1991-03-30 22:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  14400,
  0,
  'TBIT',
      ],
      [
  62806053600, #    utc_start 1991-03-30 22:00:00 (Sat)
  62806824000, #      utc_end 1991-04-08 20:00:00 (Mon)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62806838400, #    local_end 1991-04-09 00:00:00 (Tue)
  14400,
  1,
  'TBIST',
      ],
      [
  62806824000, #    utc_start 1991-04-08 20:00:00 (Mon)
  62821782000, #      utc_end 1991-09-28 23:00:00 (Sat)
  62806838400, #  local_start 1991-04-09 00:00:00 (Tue)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  14400,
  1,
  'GEST',
      ],
      [
  62821782000, #    utc_start 1991-09-28 23:00:00 (Sat)
  62829896400, #      utc_end 1991-12-31 21:00:00 (Tue)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62829907200, #    local_end 1992-01-01 00:00:00 (Wed)
  10800,
  0,
  'GET',
      ],
      [
  62829896400, #    utc_start 1991-12-31 21:00:00 (Tue)
  62837499600, #      utc_end 1992-03-28 21:00:00 (Sat)
  62829907200, #  local_start 1992-01-01 00:00:00 (Wed)
  62837510400, #    local_end 1992-03-29 00:00:00 (Sun)
  10800,
  0,
  'GET',
      ],
      [
  62837499600, #    utc_start 1992-03-28 21:00:00 (Sat)
  62853220800, #      utc_end 1992-09-26 20:00:00 (Sat)
  62837514000, #  local_start 1992-03-29 01:00:00 (Sun)
  62853235200, #    local_end 1992-09-27 00:00:00 (Sun)
  14400,
  1,
  'GEST',
      ],
      [
  62853220800, #    utc_start 1992-09-26 20:00:00 (Sat)
  62868949200, #      utc_end 1993-03-27 21:00:00 (Sat)
  62853231600, #  local_start 1992-09-26 23:00:00 (Sat)
  62868960000, #    local_end 1993-03-28 00:00:00 (Sun)
  10800,
  0,
  'GET',
      ],
      [
  62868949200, #    utc_start 1993-03-27 21:00:00 (Sat)
  62884670400, #      utc_end 1993-09-25 20:00:00 (Sat)
  62868963600, #  local_start 1993-03-28 01:00:00 (Sun)
  62884684800, #    local_end 1993-09-26 00:00:00 (Sun)
  14400,
  1,
  'GEST',
      ],
      [
  62884670400, #    utc_start 1993-09-25 20:00:00 (Sat)
  62900398800, #      utc_end 1994-03-26 21:00:00 (Sat)
  62884681200, #  local_start 1993-09-25 23:00:00 (Sat)
  62900409600, #    local_end 1994-03-27 00:00:00 (Sun)
  10800,
  0,
  'GET',
      ],
      [
  62900398800, #    utc_start 1994-03-26 21:00:00 (Sat)
  62916120000, #      utc_end 1994-09-24 20:00:00 (Sat)
  62900413200, #  local_start 1994-03-27 01:00:00 (Sun)
  62916134400, #    local_end 1994-09-25 00:00:00 (Sun)
  14400,
  1,
  'GEST',
      ],
      [
  62916120000, #    utc_start 1994-09-24 20:00:00 (Sat)
  62931844800, #      utc_end 1995-03-25 20:00:00 (Sat)
  62916134400, #  local_start 1994-09-25 00:00:00 (Sun)
  62931859200, #    local_end 1995-03-26 00:00:00 (Sun)
  14400,
  0,
  'GET',
      ],
      [
  62931844800, #    utc_start 1995-03-25 20:00:00 (Sat)
  62947566000, #      utc_end 1995-09-23 19:00:00 (Sat)
  62931862800, #  local_start 1995-03-26 01:00:00 (Sun)
  62947584000, #    local_end 1995-09-24 00:00:00 (Sun)
  18000,
  1,
  'GEST',
      ],
      [
  62947566000, #    utc_start 1995-09-23 19:00:00 (Sat)
  62963899200, #      utc_end 1996-03-30 20:00:00 (Sat)
  62947580400, #  local_start 1995-09-23 23:00:00 (Sat)
  62963913600, #    local_end 1996-03-31 00:00:00 (Sun)
  14400,
  0,
  'GET',
      ],
      [
  62963899200, #    utc_start 1996-03-30 20:00:00 (Sat)
  62982039600, #      utc_end 1996-10-26 19:00:00 (Sat)
  62963917200, #  local_start 1996-03-31 01:00:00 (Sun)
  62982057600, #    local_end 1996-10-27 00:00:00 (Sun)
  18000,
  1,
  'GEST',
      ],
      [
  62982039600, #    utc_start 1996-10-26 19:00:00 (Sat)
  62995345200, #      utc_end 1997-03-29 19:00:00 (Sat)
  62982057600, #  local_start 1996-10-27 00:00:00 (Sun)
  62995363200, #    local_end 1997-03-30 00:00:00 (Sun)
  18000,
  1,
  'GEST',
      ],
      [
  62995345200, #    utc_start 1997-03-29 19:00:00 (Sat)
  63013489200, #      utc_end 1997-10-25 19:00:00 (Sat)
  62995363200, #  local_start 1997-03-30 00:00:00 (Sun)
  63013507200, #    local_end 1997-10-26 00:00:00 (Sun)
  18000,
  1,
  'GEST',
      ],
      [
  63013489200, #    utc_start 1997-10-25 19:00:00 (Sat)
  63026798400, #      utc_end 1998-03-28 20:00:00 (Sat)
  63013503600, #  local_start 1997-10-25 23:00:00 (Sat)
  63026812800, #    local_end 1998-03-29 00:00:00 (Sun)
  14400,
  0,
  'GET',
      ],
      [
  63026798400, #    utc_start 1998-03-28 20:00:00 (Sat)
  63044938800, #      utc_end 1998-10-24 19:00:00 (Sat)
  63026816400, #  local_start 1998-03-29 01:00:00 (Sun)
  63044956800, #    local_end 1998-10-25 00:00:00 (Sun)
  18000,
  1,
  'GEST',
      ],
      [
  63044938800, #    utc_start 1998-10-24 19:00:00 (Sat)
  63058248000, #      utc_end 1999-03-27 20:00:00 (Sat)
  63044953200, #  local_start 1998-10-24 23:00:00 (Sat)
  63058262400, #    local_end 1999-03-28 00:00:00 (Sun)
  14400,
  0,
  'GET',
      ],
      [
  63058248000, #    utc_start 1999-03-27 20:00:00 (Sat)
  63076993200, #      utc_end 1999-10-30 19:00:00 (Sat)
  63058266000, #  local_start 1999-03-28 01:00:00 (Sun)
  63077011200, #    local_end 1999-10-31 00:00:00 (Sun)
  18000,
  1,
  'GEST',
      ],
      [
  63076993200, #    utc_start 1999-10-30 19:00:00 (Sat)
  63089697600, #      utc_end 2000-03-25 20:00:00 (Sat)
  63077007600, #  local_start 1999-10-30 23:00:00 (Sat)
  63089712000, #    local_end 2000-03-26 00:00:00 (Sun)
  14400,
  0,
  'GET',
      ],
      [
  63089697600, #    utc_start 2000-03-25 20:00:00 (Sat)
  63108442800, #      utc_end 2000-10-28 19:00:00 (Sat)
  63089715600, #  local_start 2000-03-26 01:00:00 (Sun)
  63108460800, #    local_end 2000-10-29 00:00:00 (Sun)
  18000,
  1,
  'GEST',
      ],
      [
  63108442800, #    utc_start 2000-10-28 19:00:00 (Sat)
  63121147200, #      utc_end 2001-03-24 20:00:00 (Sat)
  63108457200, #  local_start 2000-10-28 23:00:00 (Sat)
  63121161600, #    local_end 2001-03-25 00:00:00 (Sun)
  14400,
  0,
  'GET',
      ],
      [
  63121147200, #    utc_start 2001-03-24 20:00:00 (Sat)
  63139892400, #      utc_end 2001-10-27 19:00:00 (Sat)
  63121165200, #  local_start 2001-03-25 01:00:00 (Sun)
  63139910400, #    local_end 2001-10-28 00:00:00 (Sun)
  18000,
  1,
  'GEST',
      ],
      [
  63139892400, #    utc_start 2001-10-27 19:00:00 (Sat)
  63153201600, #      utc_end 2002-03-30 20:00:00 (Sat)
  63139906800, #  local_start 2001-10-27 23:00:00 (Sat)
  63153216000, #    local_end 2002-03-31 00:00:00 (Sun)
  14400,
  0,
  'GET',
      ],
      [
  63153201600, #    utc_start 2002-03-30 20:00:00 (Sat)
  63171342000, #      utc_end 2002-10-26 19:00:00 (Sat)
  63153219600, #  local_start 2002-03-31 01:00:00 (Sun)
  63171360000, #    local_end 2002-10-27 00:00:00 (Sun)
  18000,
  1,
  'GEST',
      ],
      [
  63171342000, #    utc_start 2002-10-26 19:00:00 (Sat)
  63184651200, #      utc_end 2003-03-29 20:00:00 (Sat)
  63171356400, #  local_start 2002-10-26 23:00:00 (Sat)
  63184665600, #    local_end 2003-03-30 00:00:00 (Sun)
  14400,
  0,
  'GET',
      ],
      [
  63184651200, #    utc_start 2003-03-29 20:00:00 (Sat)
  63202791600, #      utc_end 2003-10-25 19:00:00 (Sat)
  63184669200, #  local_start 2003-03-30 01:00:00 (Sun)
  63202809600, #    local_end 2003-10-26 00:00:00 (Sun)
  18000,
  1,
  'GEST',
      ],
      [
  63202791600, #    utc_start 2003-10-25 19:00:00 (Sat)
  63216100800, #      utc_end 2004-03-27 20:00:00 (Sat)
  63202806000, #  local_start 2003-10-25 23:00:00 (Sat)
  63216115200, #    local_end 2004-03-28 00:00:00 (Sun)
  14400,
  0,
  'GET',
      ],
      [
  63216100800, #    utc_start 2004-03-27 20:00:00 (Sat)
  63223959600, #      utc_end 2004-06-26 19:00:00 (Sat)
  63216118800, #  local_start 2004-03-28 01:00:00 (Sun)
  63223977600, #    local_end 2004-06-27 00:00:00 (Sun)
  18000,
  1,
  'GEST',
      ],
      [
  63223959600, #    utc_start 2004-06-26 19:00:00 (Sat)
  63234860400, #      utc_end 2004-10-30 23:00:00 (Sat)
  63223974000, #  local_start 2004-06-26 23:00:00 (Sat)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  14400,
  1,
  'GEST',
      ],
      [
  63234860400, #    utc_start 2004-10-30 23:00:00 (Sat)
  63247561200, #      utc_end 2005-03-26 23:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  10800,
  0,
  'GET',
      ],
      [
  63247561200, #    utc_start 2005-03-26 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  14400,
  0,
  'GET',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {27}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_TBILISI

    $main::fatpacked{"DateTime/TimeZone/Asia/Tehran.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_TEHRAN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Tehran;
  $DateTime::TimeZone::Asia::Tehran::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Tehran::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60431517256, #      utc_end 1915-12-31 20:34:16 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60431529600, #    local_end 1916-01-01 00:00:00 (Sat)
  12344,
  0,
  'LMT',
      ],
      [
  60431517256, #    utc_start 1915-12-31 20:34:16 (Fri)
  61378288456, #      utc_end 1945-12-31 20:34:16 (Mon)
  60431529600, #  local_start 1916-01-01 00:00:00 (Sat)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  12344,
  0,
  'TMT',
      ],
      [
  61378288456, #    utc_start 1945-12-31 20:34:16 (Mon)
  62382861000, #      utc_end 1977-10-31 20:30:00 (Mon)
  61378301056, #  local_start 1946-01-01 00:04:16 (Tue)
  62382873600, #    local_end 1977-11-01 00:00:00 (Tue)
  12600,
  0,
  'IRST',
      ],
      [
  62382861000, #    utc_start 1977-10-31 20:30:00 (Mon)
  62394955200, #      utc_end 1978-03-20 20:00:00 (Mon)
  62382875400, #  local_start 1977-11-01 00:30:00 (Tue)
  62394969600, #    local_end 1978-03-21 00:00:00 (Tue)
  14400,
  0,
  'IRST',
      ],
      [
  62394955200, #    utc_start 1978-03-20 20:00:00 (Mon)
  62413441200, #      utc_end 1978-10-20 19:00:00 (Fri)
  62394973200, #  local_start 1978-03-21 01:00:00 (Tue)
  62413459200, #    local_end 1978-10-21 00:00:00 (Sat)
  18000,
  1,
  'IRDT',
      ],
      [
  62413441200, #    utc_start 1978-10-20 19:00:00 (Fri)
  62419665600, #      utc_end 1978-12-31 20:00:00 (Sun)
  62413455600, #  local_start 1978-10-20 23:00:00 (Fri)
  62419680000, #    local_end 1979-01-01 00:00:00 (Mon)
  14400,
  0,
  'IRST',
      ],
      [
  62419665600, #    utc_start 1978-12-31 20:00:00 (Sun)
  62426493000, #      utc_end 1979-03-20 20:30:00 (Tue)
  62419678200, #  local_start 1978-12-31 23:30:00 (Sun)
  62426505600, #    local_end 1979-03-21 00:00:00 (Wed)
  12600,
  0,
  'IRST',
      ],
      [
  62426493000, #    utc_start 1979-03-20 20:30:00 (Tue)
  62442214200, #      utc_end 1979-09-18 19:30:00 (Tue)
  62426509200, #  local_start 1979-03-21 01:00:00 (Wed)
  62442230400, #    local_end 1979-09-19 00:00:00 (Wed)
  16200,
  1,
  'IRDT',
      ],
      [
  62442214200, #    utc_start 1979-09-18 19:30:00 (Tue)
  62458115400, #      utc_end 1980-03-20 20:30:00 (Thu)
  62442226800, #  local_start 1979-09-18 23:00:00 (Tue)
  62458128000, #    local_end 1980-03-21 00:00:00 (Fri)
  12600,
  0,
  'IRST',
      ],
      [
  62458115400, #    utc_start 1980-03-20 20:30:00 (Thu)
  62474182200, #      utc_end 1980-09-22 19:30:00 (Mon)
  62458131600, #  local_start 1980-03-21 01:00:00 (Fri)
  62474198400, #    local_end 1980-09-23 00:00:00 (Tue)
  16200,
  1,
  'IRDT',
      ],
      [
  62474182200, #    utc_start 1980-09-22 19:30:00 (Mon)
  62808899400, #      utc_end 1991-05-02 20:30:00 (Thu)
  62474194800, #  local_start 1980-09-22 23:00:00 (Mon)
  62808912000, #    local_end 1991-05-03 00:00:00 (Fri)
  12600,
  0,
  'IRST',
      ],
      [
  62808899400, #    utc_start 1991-05-02 20:30:00 (Thu)
  62821164600, #      utc_end 1991-09-21 19:30:00 (Sat)
  62808915600, #  local_start 1991-05-03 01:00:00 (Fri)
  62821180800, #    local_end 1991-09-22 00:00:00 (Sun)
  16200,
  1,
  'IRDT',
      ],
      [
  62821164600, #    utc_start 1991-09-21 19:30:00 (Sat)
  62836893000, #      utc_end 1992-03-21 20:30:00 (Sat)
  62821177200, #  local_start 1991-09-21 23:00:00 (Sat)
  62836905600, #    local_end 1992-03-22 00:00:00 (Sun)
  12600,
  0,
  'IRST',
      ],
      [
  62836893000, #    utc_start 1992-03-21 20:30:00 (Sat)
  62852787000, #      utc_end 1992-09-21 19:30:00 (Mon)
  62836909200, #  local_start 1992-03-22 01:00:00 (Sun)
  62852803200, #    local_end 1992-09-22 00:00:00 (Tue)
  16200,
  1,
  'IRDT',
      ],
      [
  62852787000, #    utc_start 1992-09-21 19:30:00 (Mon)
  62868429000, #      utc_end 1993-03-21 20:30:00 (Sun)
  62852799600, #  local_start 1992-09-21 23:00:00 (Mon)
  62868441600, #    local_end 1993-03-22 00:00:00 (Mon)
  12600,
  0,
  'IRST',
      ],
      [
  62868429000, #    utc_start 1993-03-21 20:30:00 (Sun)
  62884323000, #      utc_end 1993-09-21 19:30:00 (Tue)
  62868445200, #  local_start 1993-03-22 01:00:00 (Mon)
  62884339200, #    local_end 1993-09-22 00:00:00 (Wed)
  16200,
  1,
  'IRDT',
      ],
      [
  62884323000, #    utc_start 1993-09-21 19:30:00 (Tue)
  62899965000, #      utc_end 1994-03-21 20:30:00 (Mon)
  62884335600, #  local_start 1993-09-21 23:00:00 (Tue)
  62899977600, #    local_end 1994-03-22 00:00:00 (Tue)
  12600,
  0,
  'IRST',
      ],
      [
  62899965000, #    utc_start 1994-03-21 20:30:00 (Mon)
  62915859000, #      utc_end 1994-09-21 19:30:00 (Wed)
  62899981200, #  local_start 1994-03-22 01:00:00 (Tue)
  62915875200, #    local_end 1994-09-22 00:00:00 (Thu)
  16200,
  1,
  'IRDT',
      ],
      [
  62915859000, #    utc_start 1994-09-21 19:30:00 (Wed)
  62931501000, #      utc_end 1995-03-21 20:30:00 (Tue)
  62915871600, #  local_start 1994-09-21 23:00:00 (Wed)
  62931513600, #    local_end 1995-03-22 00:00:00 (Wed)
  12600,
  0,
  'IRST',
      ],
      [
  62931501000, #    utc_start 1995-03-21 20:30:00 (Tue)
  62947395000, #      utc_end 1995-09-21 19:30:00 (Thu)
  62931517200, #  local_start 1995-03-22 01:00:00 (Wed)
  62947411200, #    local_end 1995-09-22 00:00:00 (Fri)
  16200,
  1,
  'IRDT',
      ],
      [
  62947395000, #    utc_start 1995-09-21 19:30:00 (Thu)
  62963037000, #      utc_end 1996-03-20 20:30:00 (Wed)
  62947407600, #  local_start 1995-09-21 23:00:00 (Thu)
  62963049600, #    local_end 1996-03-21 00:00:00 (Thu)
  12600,
  0,
  'IRST',
      ],
      [
  62963037000, #    utc_start 1996-03-20 20:30:00 (Wed)
  62978931000, #      utc_end 1996-09-20 19:30:00 (Fri)
  62963053200, #  local_start 1996-03-21 01:00:00 (Thu)
  62978947200, #    local_end 1996-09-21 00:00:00 (Sat)
  16200,
  1,
  'IRDT',
      ],
      [
  62978931000, #    utc_start 1996-09-20 19:30:00 (Fri)
  62994659400, #      utc_end 1997-03-21 20:30:00 (Fri)
  62978943600, #  local_start 1996-09-20 23:00:00 (Fri)
  62994672000, #    local_end 1997-03-22 00:00:00 (Sat)
  12600,
  0,
  'IRST',
      ],
      [
  62994659400, #    utc_start 1997-03-21 20:30:00 (Fri)
  63010553400, #      utc_end 1997-09-21 19:30:00 (Sun)
  62994675600, #  local_start 1997-03-22 01:00:00 (Sat)
  63010569600, #    local_end 1997-09-22 00:00:00 (Mon)
  16200,
  1,
  'IRDT',
      ],
      [
  63010553400, #    utc_start 1997-09-21 19:30:00 (Sun)
  63026195400, #      utc_end 1998-03-21 20:30:00 (Sat)
  63010566000, #  local_start 1997-09-21 23:00:00 (Sun)
  63026208000, #    local_end 1998-03-22 00:00:00 (Sun)
  12600,
  0,
  'IRST',
      ],
      [
  63026195400, #    utc_start 1998-03-21 20:30:00 (Sat)
  63042089400, #      utc_end 1998-09-21 19:30:00 (Mon)
  63026211600, #  local_start 1998-03-22 01:00:00 (Sun)
  63042105600, #    local_end 1998-09-22 00:00:00 (Tue)
  16200,
  1,
  'IRDT',
      ],
      [
  63042089400, #    utc_start 1998-09-21 19:30:00 (Mon)
  63057731400, #      utc_end 1999-03-21 20:30:00 (Sun)
  63042102000, #  local_start 1998-09-21 23:00:00 (Mon)
  63057744000, #    local_end 1999-03-22 00:00:00 (Mon)
  12600,
  0,
  'IRST',
      ],
      [
  63057731400, #    utc_start 1999-03-21 20:30:00 (Sun)
  63073625400, #      utc_end 1999-09-21 19:30:00 (Tue)
  63057747600, #  local_start 1999-03-22 01:00:00 (Mon)
  63073641600, #    local_end 1999-09-22 00:00:00 (Wed)
  16200,
  1,
  'IRDT',
      ],
      [
  63073625400, #    utc_start 1999-09-21 19:30:00 (Tue)
  63089267400, #      utc_end 2000-03-20 20:30:00 (Mon)
  63073638000, #  local_start 1999-09-21 23:00:00 (Tue)
  63089280000, #    local_end 2000-03-21 00:00:00 (Tue)
  12600,
  0,
  'IRST',
      ],
      [
  63089267400, #    utc_start 2000-03-20 20:30:00 (Mon)
  63105161400, #      utc_end 2000-09-20 19:30:00 (Wed)
  63089283600, #  local_start 2000-03-21 01:00:00 (Tue)
  63105177600, #    local_end 2000-09-21 00:00:00 (Thu)
  16200,
  1,
  'IRDT',
      ],
      [
  63105161400, #    utc_start 2000-09-20 19:30:00 (Wed)
  63120889800, #      utc_end 2001-03-21 20:30:00 (Wed)
  63105174000, #  local_start 2000-09-20 23:00:00 (Wed)
  63120902400, #    local_end 2001-03-22 00:00:00 (Thu)
  12600,
  0,
  'IRST',
      ],
      [
  63120889800, #    utc_start 2001-03-21 20:30:00 (Wed)
  63136783800, #      utc_end 2001-09-21 19:30:00 (Fri)
  63120906000, #  local_start 2001-03-22 01:00:00 (Thu)
  63136800000, #    local_end 2001-09-22 00:00:00 (Sat)
  16200,
  1,
  'IRDT',
      ],
      [
  63136783800, #    utc_start 2001-09-21 19:30:00 (Fri)
  63152425800, #      utc_end 2002-03-21 20:30:00 (Thu)
  63136796400, #  local_start 2001-09-21 23:00:00 (Fri)
  63152438400, #    local_end 2002-03-22 00:00:00 (Fri)
  12600,
  0,
  'IRST',
      ],
      [
  63152425800, #    utc_start 2002-03-21 20:30:00 (Thu)
  63168319800, #      utc_end 2002-09-21 19:30:00 (Sat)
  63152442000, #  local_start 2002-03-22 01:00:00 (Fri)
  63168336000, #    local_end 2002-09-22 00:00:00 (Sun)
  16200,
  1,
  'IRDT',
      ],
      [
  63168319800, #    utc_start 2002-09-21 19:30:00 (Sat)
  63183961800, #      utc_end 2003-03-21 20:30:00 (Fri)
  63168332400, #  local_start 2002-09-21 23:00:00 (Sat)
  63183974400, #    local_end 2003-03-22 00:00:00 (Sat)
  12600,
  0,
  'IRST',
      ],
      [
  63183961800, #    utc_start 2003-03-21 20:30:00 (Fri)
  63199855800, #      utc_end 2003-09-21 19:30:00 (Sun)
  63183978000, #  local_start 2003-03-22 01:00:00 (Sat)
  63199872000, #    local_end 2003-09-22 00:00:00 (Mon)
  16200,
  1,
  'IRDT',
      ],
      [
  63199855800, #    utc_start 2003-09-21 19:30:00 (Sun)
  63215497800, #      utc_end 2004-03-20 20:30:00 (Sat)
  63199868400, #  local_start 2003-09-21 23:00:00 (Sun)
  63215510400, #    local_end 2004-03-21 00:00:00 (Sun)
  12600,
  0,
  'IRST',
      ],
      [
  63215497800, #    utc_start 2004-03-20 20:30:00 (Sat)
  63231391800, #      utc_end 2004-09-20 19:30:00 (Mon)
  63215514000, #  local_start 2004-03-21 01:00:00 (Sun)
  63231408000, #    local_end 2004-09-21 00:00:00 (Tue)
  16200,
  1,
  'IRDT',
      ],
      [
  63231391800, #    utc_start 2004-09-20 19:30:00 (Mon)
  63247120200, #      utc_end 2005-03-21 20:30:00 (Mon)
  63231404400, #  local_start 2004-09-20 23:00:00 (Mon)
  63247132800, #    local_end 2005-03-22 00:00:00 (Tue)
  12600,
  0,
  'IRST',
      ],
      [
  63247120200, #    utc_start 2005-03-21 20:30:00 (Mon)
  63263014200, #      utc_end 2005-09-21 19:30:00 (Wed)
  63247136400, #  local_start 2005-03-22 01:00:00 (Tue)
  63263030400, #    local_end 2005-09-22 00:00:00 (Thu)
  16200,
  1,
  'IRDT',
      ],
      [
  63263014200, #    utc_start 2005-09-21 19:30:00 (Wed)
  63341728200, #      utc_end 2008-03-20 20:30:00 (Thu)
  63263026800, #  local_start 2005-09-21 23:00:00 (Wed)
  63341740800, #    local_end 2008-03-21 00:00:00 (Fri)
  12600,
  0,
  'IRST',
      ],
      [
  63341728200, #    utc_start 2008-03-20 20:30:00 (Thu)
  63357622200, #      utc_end 2008-09-20 19:30:00 (Sat)
  63341744400, #  local_start 2008-03-21 01:00:00 (Fri)
  63357638400, #    local_end 2008-09-21 00:00:00 (Sun)
  16200,
  1,
  'IRDT',
      ],
      [
  63357622200, #    utc_start 2008-09-20 19:30:00 (Sat)
  63373350600, #      utc_end 2009-03-21 20:30:00 (Sat)
  63357634800, #  local_start 2008-09-20 23:00:00 (Sat)
  63373363200, #    local_end 2009-03-22 00:00:00 (Sun)
  12600,
  0,
  'IRST',
      ],
      [
  63373350600, #    utc_start 2009-03-21 20:30:00 (Sat)
  63389244600, #      utc_end 2009-09-21 19:30:00 (Mon)
  63373366800, #  local_start 2009-03-22 01:00:00 (Sun)
  63389260800, #    local_end 2009-09-22 00:00:00 (Tue)
  16200,
  1,
  'IRDT',
      ],
      [
  63389244600, #    utc_start 2009-09-21 19:30:00 (Mon)
  63404886600, #      utc_end 2010-03-21 20:30:00 (Sun)
  63389257200, #  local_start 2009-09-21 23:00:00 (Mon)
  63404899200, #    local_end 2010-03-22 00:00:00 (Mon)
  12600,
  0,
  'IRST',
      ],
      [
  63404886600, #    utc_start 2010-03-21 20:30:00 (Sun)
  63420780600, #      utc_end 2010-09-21 19:30:00 (Tue)
  63404902800, #  local_start 2010-03-22 01:00:00 (Mon)
  63420796800, #    local_end 2010-09-22 00:00:00 (Wed)
  16200,
  1,
  'IRDT',
      ],
      [
  63420780600, #    utc_start 2010-09-21 19:30:00 (Tue)
  63436422600, #      utc_end 2011-03-21 20:30:00 (Mon)
  63420793200, #  local_start 2010-09-21 23:00:00 (Tue)
  63436435200, #    local_end 2011-03-22 00:00:00 (Tue)
  12600,
  0,
  'IRST',
      ],
      [
  63436422600, #    utc_start 2011-03-21 20:30:00 (Mon)
  63452316600, #      utc_end 2011-09-21 19:30:00 (Wed)
  63436438800, #  local_start 2011-03-22 01:00:00 (Tue)
  63452332800, #    local_end 2011-09-22 00:00:00 (Thu)
  16200,
  1,
  'IRDT',
      ],
      [
  63452316600, #    utc_start 2011-09-21 19:30:00 (Wed)
  63467958600, #      utc_end 2012-03-20 20:30:00 (Tue)
  63452329200, #  local_start 2011-09-21 23:00:00 (Wed)
  63467971200, #    local_end 2012-03-21 00:00:00 (Wed)
  12600,
  0,
  'IRST',
      ],
      [
  63467958600, #    utc_start 2012-03-20 20:30:00 (Tue)
  63483852600, #      utc_end 2012-09-20 19:30:00 (Thu)
  63467974800, #  local_start 2012-03-21 01:00:00 (Wed)
  63483868800, #    local_end 2012-09-21 00:00:00 (Fri)
  16200,
  1,
  'IRDT',
      ],
      [
  63483852600, #    utc_start 2012-09-20 19:30:00 (Thu)
  63499581000, #      utc_end 2013-03-21 20:30:00 (Thu)
  63483865200, #  local_start 2012-09-20 23:00:00 (Thu)
  63499593600, #    local_end 2013-03-22 00:00:00 (Fri)
  12600,
  0,
  'IRST',
      ],
      [
  63499581000, #    utc_start 2013-03-21 20:30:00 (Thu)
  63515475000, #      utc_end 2013-09-21 19:30:00 (Sat)
  63499597200, #  local_start 2013-03-22 01:00:00 (Fri)
  63515491200, #    local_end 2013-09-22 00:00:00 (Sun)
  16200,
  1,
  'IRDT',
      ],
      [
  63515475000, #    utc_start 2013-09-21 19:30:00 (Sat)
  63531117000, #      utc_end 2014-03-21 20:30:00 (Fri)
  63515487600, #  local_start 2013-09-21 23:00:00 (Sat)
  63531129600, #    local_end 2014-03-22 00:00:00 (Sat)
  12600,
  0,
  'IRST',
      ],
      [
  63531117000, #    utc_start 2014-03-21 20:30:00 (Fri)
  63547011000, #      utc_end 2014-09-21 19:30:00 (Sun)
  63531133200, #  local_start 2014-03-22 01:00:00 (Sat)
  63547027200, #    local_end 2014-09-22 00:00:00 (Mon)
  16200,
  1,
  'IRDT',
      ],
      [
  63547011000, #    utc_start 2014-09-21 19:30:00 (Sun)
  63562653000, #      utc_end 2015-03-21 20:30:00 (Sat)
  63547023600, #  local_start 2014-09-21 23:00:00 (Sun)
  63562665600, #    local_end 2015-03-22 00:00:00 (Sun)
  12600,
  0,
  'IRST',
      ],
      [
  63562653000, #    utc_start 2015-03-21 20:30:00 (Sat)
  63578547000, #      utc_end 2015-09-21 19:30:00 (Mon)
  63562669200, #  local_start 2015-03-22 01:00:00 (Sun)
  63578563200, #    local_end 2015-09-22 00:00:00 (Tue)
  16200,
  1,
  'IRDT',
      ],
      [
  63578547000, #    utc_start 2015-09-21 19:30:00 (Mon)
  63594189000, #      utc_end 2016-03-20 20:30:00 (Sun)
  63578559600, #  local_start 2015-09-21 23:00:00 (Mon)
  63594201600, #    local_end 2016-03-21 00:00:00 (Mon)
  12600,
  0,
  'IRST',
      ],
      [
  63594189000, #    utc_start 2016-03-20 20:30:00 (Sun)
  63610083000, #      utc_end 2016-09-20 19:30:00 (Tue)
  63594205200, #  local_start 2016-03-21 01:00:00 (Mon)
  63610099200, #    local_end 2016-09-21 00:00:00 (Wed)
  16200,
  1,
  'IRDT',
      ],
      [
  63610083000, #    utc_start 2016-09-20 19:30:00 (Tue)
  63625811400, #      utc_end 2017-03-21 20:30:00 (Tue)
  63610095600, #  local_start 2016-09-20 23:00:00 (Tue)
  63625824000, #    local_end 2017-03-22 00:00:00 (Wed)
  12600,
  0,
  'IRST',
      ],
      [
  63625811400, #    utc_start 2017-03-21 20:30:00 (Tue)
  63641705400, #      utc_end 2017-09-21 19:30:00 (Thu)
  63625827600, #  local_start 2017-03-22 01:00:00 (Wed)
  63641721600, #    local_end 2017-09-22 00:00:00 (Fri)
  16200,
  1,
  'IRDT',
      ],
      [
  63641705400, #    utc_start 2017-09-21 19:30:00 (Thu)
  63657347400, #      utc_end 2018-03-21 20:30:00 (Wed)
  63641718000, #  local_start 2017-09-21 23:00:00 (Thu)
  63657360000, #    local_end 2018-03-22 00:00:00 (Thu)
  12600,
  0,
  'IRST',
      ],
      [
  63657347400, #    utc_start 2018-03-21 20:30:00 (Wed)
  63673241400, #      utc_end 2018-09-21 19:30:00 (Fri)
  63657363600, #  local_start 2018-03-22 01:00:00 (Thu)
  63673257600, #    local_end 2018-09-22 00:00:00 (Sat)
  16200,
  1,
  'IRDT',
      ],
      [
  63673241400, #    utc_start 2018-09-21 19:30:00 (Fri)
  63688883400, #      utc_end 2019-03-21 20:30:00 (Thu)
  63673254000, #  local_start 2018-09-21 23:00:00 (Fri)
  63688896000, #    local_end 2019-03-22 00:00:00 (Fri)
  12600,
  0,
  'IRST',
      ],
      [
  63688883400, #    utc_start 2019-03-21 20:30:00 (Thu)
  63704777400, #      utc_end 2019-09-21 19:30:00 (Sat)
  63688899600, #  local_start 2019-03-22 01:00:00 (Fri)
  63704793600, #    local_end 2019-09-22 00:00:00 (Sun)
  16200,
  1,
  'IRDT',
      ],
      [
  63704777400, #    utc_start 2019-09-21 19:30:00 (Sat)
  63720419400, #      utc_end 2020-03-20 20:30:00 (Fri)
  63704790000, #  local_start 2019-09-21 23:00:00 (Sat)
  63720432000, #    local_end 2020-03-21 00:00:00 (Sat)
  12600,
  0,
  'IRST',
      ],
      [
  63720419400, #    utc_start 2020-03-20 20:30:00 (Fri)
  63736313400, #      utc_end 2020-09-20 19:30:00 (Sun)
  63720435600, #  local_start 2020-03-21 01:00:00 (Sat)
  63736329600, #    local_end 2020-09-21 00:00:00 (Mon)
  16200,
  1,
  'IRDT',
      ],
      [
  63736313400, #    utc_start 2020-09-20 19:30:00 (Sun)
  63752041800, #      utc_end 2021-03-21 20:30:00 (Sun)
  63736326000, #  local_start 2020-09-20 23:00:00 (Sun)
  63752054400, #    local_end 2021-03-22 00:00:00 (Mon)
  12600,
  0,
  'IRST',
      ],
      [
  63752041800, #    utc_start 2021-03-21 20:30:00 (Sun)
  63767935800, #      utc_end 2021-09-21 19:30:00 (Tue)
  63752058000, #  local_start 2021-03-22 01:00:00 (Mon)
  63767952000, #    local_end 2021-09-22 00:00:00 (Wed)
  16200,
  1,
  'IRDT',
      ],
      [
  63767935800, #    utc_start 2021-09-21 19:30:00 (Tue)
  63783577800, #      utc_end 2022-03-21 20:30:00 (Mon)
  63767948400, #  local_start 2021-09-21 23:00:00 (Tue)
  63783590400, #    local_end 2022-03-22 00:00:00 (Tue)
  12600,
  0,
  'IRST',
      ],
      [
  63783577800, #    utc_start 2022-03-21 20:30:00 (Mon)
  63799471800, #      utc_end 2022-09-21 19:30:00 (Wed)
  63783594000, #  local_start 2022-03-22 01:00:00 (Tue)
  63799488000, #    local_end 2022-09-22 00:00:00 (Thu)
  16200,
  1,
  'IRDT',
      ],
      [
  63799471800, #    utc_start 2022-09-21 19:30:00 (Wed)
  63815113800, #      utc_end 2023-03-21 20:30:00 (Tue)
  63799484400, #  local_start 2022-09-21 23:00:00 (Wed)
  63815126400, #    local_end 2023-03-22 00:00:00 (Wed)
  12600,
  0,
  'IRST',
      ],
      [
  63815113800, #    utc_start 2023-03-21 20:30:00 (Tue)
  63831007800, #      utc_end 2023-09-21 19:30:00 (Thu)
  63815130000, #  local_start 2023-03-22 01:00:00 (Wed)
  63831024000, #    local_end 2023-09-22 00:00:00 (Fri)
  16200,
  1,
  'IRDT',
      ],
      [
  63831007800, #    utc_start 2023-09-21 19:30:00 (Thu)
  63846649800, #      utc_end 2024-03-20 20:30:00 (Wed)
  63831020400, #  local_start 2023-09-21 23:00:00 (Thu)
  63846662400, #    local_end 2024-03-21 00:00:00 (Thu)
  12600,
  0,
  'IRST',
      ],
      [
  63846649800, #    utc_start 2024-03-20 20:30:00 (Wed)
  63862543800, #      utc_end 2024-09-20 19:30:00 (Fri)
  63846666000, #  local_start 2024-03-21 01:00:00 (Thu)
  63862560000, #    local_end 2024-09-21 00:00:00 (Sat)
  16200,
  1,
  'IRDT',
      ],
      [
  63862543800, #    utc_start 2024-09-20 19:30:00 (Fri)
  63878272200, #      utc_end 2025-03-21 20:30:00 (Fri)
  63862556400, #  local_start 2024-09-20 23:00:00 (Fri)
  63878284800, #    local_end 2025-03-22 00:00:00 (Sat)
  12600,
  0,
  'IRST',
      ],
      [
  63878272200, #    utc_start 2025-03-21 20:30:00 (Fri)
  63894166200, #      utc_end 2025-09-21 19:30:00 (Sun)
  63878288400, #  local_start 2025-03-22 01:00:00 (Sat)
  63894182400, #    local_end 2025-09-22 00:00:00 (Mon)
  16200,
  1,
  'IRDT',
      ],
      [
  63894166200, #    utc_start 2025-09-21 19:30:00 (Sun)
  63909808200, #      utc_end 2026-03-21 20:30:00 (Sat)
  63894178800, #  local_start 2025-09-21 23:00:00 (Sun)
  63909820800, #    local_end 2026-03-22 00:00:00 (Sun)
  12600,
  0,
  'IRST',
      ],
      [
  63909808200, #    utc_start 2026-03-21 20:30:00 (Sat)
  63925702200, #      utc_end 2026-09-21 19:30:00 (Mon)
  63909824400, #  local_start 2026-03-22 01:00:00 (Sun)
  63925718400, #    local_end 2026-09-22 00:00:00 (Tue)
  16200,
  1,
  'IRDT',
      ],
      [
  63925702200, #    utc_start 2026-09-21 19:30:00 (Mon)
  63941344200, #      utc_end 2027-03-21 20:30:00 (Sun)
  63925714800, #  local_start 2026-09-21 23:00:00 (Mon)
  63941356800, #    local_end 2027-03-22 00:00:00 (Mon)
  12600,
  0,
  'IRST',
      ],
      [
  63941344200, #    utc_start 2027-03-21 20:30:00 (Sun)
  63957238200, #      utc_end 2027-09-21 19:30:00 (Tue)
  63941360400, #  local_start 2027-03-22 01:00:00 (Mon)
  63957254400, #    local_end 2027-09-22 00:00:00 (Wed)
  16200,
  1,
  'IRDT',
      ],
      [
  63957238200, #    utc_start 2027-09-21 19:30:00 (Tue)
  63972880200, #      utc_end 2028-03-20 20:30:00 (Mon)
  63957250800, #  local_start 2027-09-21 23:00:00 (Tue)
  63972892800, #    local_end 2028-03-21 00:00:00 (Tue)
  12600,
  0,
  'IRST',
      ],
      [
  63972880200, #    utc_start 2028-03-20 20:30:00 (Mon)
  63988774200, #      utc_end 2028-09-20 19:30:00 (Wed)
  63972896400, #  local_start 2028-03-21 01:00:00 (Tue)
  63988790400, #    local_end 2028-09-21 00:00:00 (Thu)
  16200,
  1,
  'IRDT',
      ],
      [
  63988774200, #    utc_start 2028-09-20 19:30:00 (Wed)
  64004416200, #      utc_end 2029-03-20 20:30:00 (Tue)
  63988786800, #  local_start 2028-09-20 23:00:00 (Wed)
  64004428800, #    local_end 2029-03-21 00:00:00 (Wed)
  12600,
  0,
  'IRST',
      ],
      [
  64004416200, #    utc_start 2029-03-20 20:30:00 (Tue)
  64020310200, #      utc_end 2029-09-20 19:30:00 (Thu)
  64004432400, #  local_start 2029-03-21 01:00:00 (Wed)
  64020326400, #    local_end 2029-09-21 00:00:00 (Fri)
  16200,
  1,
  'IRDT',
      ],
      [
  64020310200, #    utc_start 2029-09-20 19:30:00 (Thu)
  64036038600, #      utc_end 2030-03-21 20:30:00 (Thu)
  64020322800, #  local_start 2029-09-20 23:00:00 (Thu)
  64036051200, #    local_end 2030-03-22 00:00:00 (Fri)
  12600,
  0,
  'IRST',
      ],
      [
  64036038600, #    utc_start 2030-03-21 20:30:00 (Thu)
  64051932600, #      utc_end 2030-09-21 19:30:00 (Sat)
  64036054800, #  local_start 2030-03-22 01:00:00 (Fri)
  64051948800, #    local_end 2030-09-22 00:00:00 (Sun)
  16200,
  1,
  'IRDT',
      ],
      [
  64051932600, #    utc_start 2030-09-21 19:30:00 (Sat)
  64067574600, #      utc_end 2031-03-21 20:30:00 (Fri)
  64051945200, #  local_start 2030-09-21 23:00:00 (Sat)
  64067587200, #    local_end 2031-03-22 00:00:00 (Sat)
  12600,
  0,
  'IRST',
      ],
      [
  64067574600, #    utc_start 2031-03-21 20:30:00 (Fri)
  64083468600, #      utc_end 2031-09-21 19:30:00 (Sun)
  64067590800, #  local_start 2031-03-22 01:00:00 (Sat)
  64083484800, #    local_end 2031-09-22 00:00:00 (Mon)
  16200,
  1,
  'IRDT',
      ],
      [
  64083468600, #    utc_start 2031-09-21 19:30:00 (Sun)
  64099110600, #      utc_end 2032-03-20 20:30:00 (Sat)
  64083481200, #  local_start 2031-09-21 23:00:00 (Sun)
  64099123200, #    local_end 2032-03-21 00:00:00 (Sun)
  12600,
  0,
  'IRST',
      ],
      [
  64099110600, #    utc_start 2032-03-20 20:30:00 (Sat)
  64115004600, #      utc_end 2032-09-20 19:30:00 (Mon)
  64099126800, #  local_start 2032-03-21 01:00:00 (Sun)
  64115020800, #    local_end 2032-09-21 00:00:00 (Tue)
  16200,
  1,
  'IRDT',
      ],
      [
  64115004600, #    utc_start 2032-09-20 19:30:00 (Mon)
  64130646600, #      utc_end 2033-03-20 20:30:00 (Sun)
  64115017200, #  local_start 2032-09-20 23:00:00 (Mon)
  64130659200, #    local_end 2033-03-21 00:00:00 (Mon)
  12600,
  0,
  'IRST',
      ],
      [
  64130646600, #    utc_start 2033-03-20 20:30:00 (Sun)
  64146540600, #      utc_end 2033-09-20 19:30:00 (Tue)
  64130662800, #  local_start 2033-03-21 01:00:00 (Mon)
  64146556800, #    local_end 2033-09-21 00:00:00 (Wed)
  16200,
  1,
  'IRDT',
      ],
      [
  64146540600, #    utc_start 2033-09-20 19:30:00 (Tue)
  64162269000, #      utc_end 2034-03-21 20:30:00 (Tue)
  64146553200, #  local_start 2033-09-20 23:00:00 (Tue)
  64162281600, #    local_end 2034-03-22 00:00:00 (Wed)
  12600,
  0,
  'IRST',
      ],
      [
  64162269000, #    utc_start 2034-03-21 20:30:00 (Tue)
  64178163000, #      utc_end 2034-09-21 19:30:00 (Thu)
  64162285200, #  local_start 2034-03-22 01:00:00 (Wed)
  64178179200, #    local_end 2034-09-22 00:00:00 (Fri)
  16200,
  1,
  'IRDT',
      ],
      [
  64178163000, #    utc_start 2034-09-21 19:30:00 (Thu)
  64193805000, #      utc_end 2035-03-21 20:30:00 (Wed)
  64178175600, #  local_start 2034-09-21 23:00:00 (Thu)
  64193817600, #    local_end 2035-03-22 00:00:00 (Thu)
  12600,
  0,
  'IRST',
      ],
      [
  64193805000, #    utc_start 2035-03-21 20:30:00 (Wed)
  64209699000, #      utc_end 2035-09-21 19:30:00 (Fri)
  64193821200, #  local_start 2035-03-22 01:00:00 (Thu)
  64209715200, #    local_end 2035-09-22 00:00:00 (Sat)
  16200,
  1,
  'IRDT',
      ],
      [
  64209699000, #    utc_start 2035-09-21 19:30:00 (Fri)
  64225341000, #      utc_end 2036-03-20 20:30:00 (Thu)
  64209711600, #  local_start 2035-09-21 23:00:00 (Fri)
  64225353600, #    local_end 2036-03-21 00:00:00 (Fri)
  12600,
  0,
  'IRST',
      ],
      [
  64225341000, #    utc_start 2036-03-20 20:30:00 (Thu)
  64241235000, #      utc_end 2036-09-20 19:30:00 (Sat)
  64225357200, #  local_start 2036-03-21 01:00:00 (Fri)
  64241251200, #    local_end 2036-09-21 00:00:00 (Sun)
  16200,
  1,
  'IRDT',
      ],
      [
  64241235000, #    utc_start 2036-09-20 19:30:00 (Sat)
  64256877000, #      utc_end 2037-03-20 20:30:00 (Fri)
  64241247600, #  local_start 2036-09-20 23:00:00 (Sat)
  64256889600, #    local_end 2037-03-21 00:00:00 (Sat)
  12600,
  0,
  'IRST',
      ],
      [
  64256877000, #    utc_start 2037-03-20 20:30:00 (Fri)
  64272771000, #      utc_end 2037-09-20 19:30:00 (Sun)
  64256893200, #  local_start 2037-03-21 01:00:00 (Sat)
  64272787200, #    local_end 2037-09-21 00:00:00 (Mon)
  16200,
  1,
  'IRDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {48}
  
  sub _max_year {2036}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 12600 }
  
  my $last_observance = bless( {
    'format' => 'IR%sT',
    'gmtoff' => '3:30',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722449,
      'local_rd_secs' => 84600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722449,
      'utc_rd_secs' => 84600,
      'utc_year' => 1979
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 12600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722449,
      'local_rd_secs' => 72000,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722449,
      'utc_rd_secs' => 72000,
      'utc_year' => 1979
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '0:00',
      'from' => '2036',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'Iran',
      'offset_from_std' => 3600,
      'on' => '21',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '0:00',
      'from' => '2036',
      'in' => 'Sep',
      'letter' => 'S',
      'name' => 'Iran',
      'offset_from_std' => 0,
      'on' => '21',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_TEHRAN

    $main::fatpacked{"DateTime/TimeZone/Asia/Thimphu.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_THIMPHU';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Thimphu;
  $DateTime::TimeZone::Asia::Thimphu::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Thimphu::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  61429341684, #      utc_end 1947-08-14 18:01:24 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  61429363200, #    local_end 1947-08-15 00:00:00 (Fri)
  21516,
  0,
  'LMT',
      ],
      [
  61429341684, #    utc_start 1947-08-14 18:01:24 (Thu)
  62695708200, #      utc_end 1987-09-30 18:30:00 (Wed)
  61429361484, #  local_start 1947-08-14 23:31:24 (Thu)
  62695728000, #    local_end 1987-10-01 00:00:00 (Thu)
  19800,
  0,
  'IST',
      ],
      [
  62695708200, #    utc_start 1987-09-30 18:30:00 (Wed)
  DateTime::TimeZone::INFINITY, #      utc_end
  62695729800, #  local_start 1987-10-01 00:30:00 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  21600,
  0,
  'BTT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_THIMPHU

    $main::fatpacked{"DateTime/TimeZone/Asia/Tokyo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_TOKYO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Tokyo;
  $DateTime::TimeZone::Asia::Tokyo::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Tokyo::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59547970800, #      utc_end 1887-12-31 15:00:00 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59548004339, #    local_end 1888-01-01 00:18:59 (Sun)
  33539,
  0,
  'LMT',
      ],
      [
  59547970800, #    utc_start 1887-12-31 15:00:00 (Sat)
  59800431600, #      utc_end 1895-12-31 15:00:00 (Tue)
  59548003200, #  local_start 1888-01-01 00:00:00 (Sun)
  59800464000, #    local_end 1896-01-01 00:00:00 (Wed)
  32400,
  0,
  'JST',
      ],
      [
  59800431600, #    utc_start 1895-12-31 15:00:00 (Tue)
  61117858800, #      utc_end 1937-09-30 15:00:00 (Thu)
  59800464000, #  local_start 1896-01-01 00:00:00 (Wed)
  61117891200, #    local_end 1937-10-01 00:00:00 (Fri)
  32400,
  0,
  'JCST',
      ],
      [
  61117858800, #    utc_start 1937-09-30 15:00:00 (Thu)
  61451888400, #      utc_end 1948-05-01 17:00:00 (Sat)
  61117891200, #  local_start 1937-10-01 00:00:00 (Fri)
  61451920800, #    local_end 1948-05-02 02:00:00 (Sun)
  32400,
  0,
  'JST',
      ],
      [
  61451888400, #    utc_start 1948-05-01 17:00:00 (Sat)
  61463289600, #      utc_end 1948-09-10 16:00:00 (Fri)
  61451924400, #  local_start 1948-05-02 03:00:00 (Sun)
  61463325600, #    local_end 1948-09-11 02:00:00 (Sat)
  36000,
  1,
  'JDT',
      ],
      [
  61463289600, #    utc_start 1948-09-10 16:00:00 (Fri)
  61480918800, #      utc_end 1949-04-02 17:00:00 (Sat)
  61463322000, #  local_start 1948-09-11 01:00:00 (Sat)
  61480951200, #    local_end 1949-04-03 02:00:00 (Sun)
  32400,
  0,
  'JST',
      ],
      [
  61480918800, #    utc_start 1949-04-02 17:00:00 (Sat)
  61494739200, #      utc_end 1949-09-09 16:00:00 (Fri)
  61480954800, #  local_start 1949-04-03 03:00:00 (Sun)
  61494775200, #    local_end 1949-09-10 02:00:00 (Sat)
  36000,
  1,
  'JDT',
      ],
      [
  61494739200, #    utc_start 1949-09-09 16:00:00 (Fri)
  61515392400, #      utc_end 1950-05-06 17:00:00 (Sat)
  61494771600, #  local_start 1949-09-10 01:00:00 (Sat)
  61515424800, #    local_end 1950-05-07 02:00:00 (Sun)
  32400,
  0,
  'JST',
      ],
      [
  61515392400, #    utc_start 1950-05-06 17:00:00 (Sat)
  61526188800, #      utc_end 1950-09-08 16:00:00 (Fri)
  61515428400, #  local_start 1950-05-07 03:00:00 (Sun)
  61526224800, #    local_end 1950-09-09 02:00:00 (Sat)
  36000,
  1,
  'JDT',
      ],
      [
  61526188800, #    utc_start 1950-09-08 16:00:00 (Fri)
  61546842000, #      utc_end 1951-05-05 17:00:00 (Sat)
  61526221200, #  local_start 1950-09-09 01:00:00 (Sat)
  61546874400, #    local_end 1951-05-06 02:00:00 (Sun)
  32400,
  0,
  'JST',
      ],
      [
  61546842000, #    utc_start 1951-05-05 17:00:00 (Sat)
  61557638400, #      utc_end 1951-09-07 16:00:00 (Fri)
  61546878000, #  local_start 1951-05-06 03:00:00 (Sun)
  61557674400, #    local_end 1951-09-08 02:00:00 (Sat)
  36000,
  1,
  'JDT',
      ],
      [
  61557638400, #    utc_start 1951-09-07 16:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #      utc_end
  61557670800, #  local_start 1951-09-08 01:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  32400,
  0,
  'JST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {4}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_TOKYO

    $main::fatpacked{"DateTime/TimeZone/Asia/Tomsk.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_TOMSK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Tomsk;
  $DateTime::TimeZone::Asia::Tomsk::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Tomsk::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60556875609, #      utc_end 1919-12-21 18:20:09 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60556896000, #    local_end 1919-12-22 00:00:00 (Mon)
  20391,
  0,
  'LMT',
      ],
      [
  60556875609, #    utc_start 1919-12-21 18:20:09 (Sun)
  60888132000, #      utc_end 1930-06-20 18:00:00 (Fri)
  60556897209, #  local_start 1919-12-22 00:20:09 (Mon)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  21600,
  0,
  '+06',
      ],
      [
  60888132000, #    utc_start 1930-06-20 18:00:00 (Fri)
  62490589200, #      utc_end 1981-03-31 17:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  25200,
  0,
  '+07',
      ],
      [
  62490589200, #    utc_start 1981-03-31 17:00:00 (Tue)
  62506396800, #      utc_end 1981-09-30 16:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  28800,
  1,
  '+08',
      ],
      [
  62506396800, #    utc_start 1981-09-30 16:00:00 (Wed)
  62522125200, #      utc_end 1982-03-31 17:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  25200,
  0,
  '+07',
      ],
      [
  62522125200, #    utc_start 1982-03-31 17:00:00 (Wed)
  62537932800, #      utc_end 1982-09-30 16:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  28800,
  1,
  '+08',
      ],
      [
  62537932800, #    utc_start 1982-09-30 16:00:00 (Thu)
  62553661200, #      utc_end 1983-03-31 17:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  25200,
  0,
  '+07',
      ],
      [
  62553661200, #    utc_start 1983-03-31 17:00:00 (Thu)
  62569468800, #      utc_end 1983-09-30 16:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  28800,
  1,
  '+08',
      ],
      [
  62569468800, #    utc_start 1983-09-30 16:00:00 (Fri)
  62585283600, #      utc_end 1984-03-31 17:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62585283600, #    utc_start 1984-03-31 17:00:00 (Sat)
  62601015600, #      utc_end 1984-09-29 19:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62601015600, #    utc_start 1984-09-29 19:00:00 (Sat)
  62616740400, #      utc_end 1985-03-30 19:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62616740400, #    utc_start 1985-03-30 19:00:00 (Sat)
  62632465200, #      utc_end 1985-09-28 19:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62632465200, #    utc_start 1985-09-28 19:00:00 (Sat)
  62648190000, #      utc_end 1986-03-29 19:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62648190000, #    utc_start 1986-03-29 19:00:00 (Sat)
  62663914800, #      utc_end 1986-09-27 19:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62663914800, #    utc_start 1986-09-27 19:00:00 (Sat)
  62679639600, #      utc_end 1987-03-28 19:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62679639600, #    utc_start 1987-03-28 19:00:00 (Sat)
  62695364400, #      utc_end 1987-09-26 19:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62695364400, #    utc_start 1987-09-26 19:00:00 (Sat)
  62711089200, #      utc_end 1988-03-26 19:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62711089200, #    utc_start 1988-03-26 19:00:00 (Sat)
  62726814000, #      utc_end 1988-09-24 19:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62726814000, #    utc_start 1988-09-24 19:00:00 (Sat)
  62742538800, #      utc_end 1989-03-25 19:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62742538800, #    utc_start 1989-03-25 19:00:00 (Sat)
  62758263600, #      utc_end 1989-09-23 19:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62758263600, #    utc_start 1989-09-23 19:00:00 (Sat)
  62773988400, #      utc_end 1990-03-24 19:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62773988400, #    utc_start 1990-03-24 19:00:00 (Sat)
  62790318000, #      utc_end 1990-09-29 19:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62790318000, #    utc_start 1990-09-29 19:00:00 (Sat)
  62806042800, #      utc_end 1991-03-30 19:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62806042800, #    utc_start 1991-03-30 19:00:00 (Sat)
  62821771200, #      utc_end 1991-09-28 20:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  62821771200, #    utc_start 1991-09-28 20:00:00 (Sat)
  62831448000, #      utc_end 1992-01-18 20:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  62831448000, #    utc_start 1992-01-18 20:00:00 (Sat)
  62837492400, #      utc_end 1992-03-28 19:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62837492400, #    utc_start 1992-03-28 19:00:00 (Sat)
  62853217200, #      utc_end 1992-09-26 19:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62853217200, #    utc_start 1992-09-26 19:00:00 (Sat)
  62868942000, #      utc_end 1993-03-27 19:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62868942000, #    utc_start 1993-03-27 19:00:00 (Sat)
  62884666800, #      utc_end 1993-09-25 19:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62884666800, #    utc_start 1993-09-25 19:00:00 (Sat)
  62900391600, #      utc_end 1994-03-26 19:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62900391600, #    utc_start 1994-03-26 19:00:00 (Sat)
  62916116400, #      utc_end 1994-09-24 19:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62916116400, #    utc_start 1994-09-24 19:00:00 (Sat)
  62931841200, #      utc_end 1995-03-25 19:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62931841200, #    utc_start 1995-03-25 19:00:00 (Sat)
  62947566000, #      utc_end 1995-09-23 19:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62947566000, #    utc_start 1995-09-23 19:00:00 (Sat)
  62963895600, #      utc_end 1996-03-30 19:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62963895600, #    utc_start 1996-03-30 19:00:00 (Sat)
  62982039600, #      utc_end 1996-10-26 19:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  62982039600, #    utc_start 1996-10-26 19:00:00 (Sat)
  62995345200, #      utc_end 1997-03-29 19:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  62995345200, #    utc_start 1997-03-29 19:00:00 (Sat)
  63013489200, #      utc_end 1997-10-25 19:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63013489200, #    utc_start 1997-10-25 19:00:00 (Sat)
  63026794800, #      utc_end 1998-03-28 19:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63026794800, #    utc_start 1998-03-28 19:00:00 (Sat)
  63044938800, #      utc_end 1998-10-24 19:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63044938800, #    utc_start 1998-10-24 19:00:00 (Sat)
  63058244400, #      utc_end 1999-03-27 19:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63058244400, #    utc_start 1999-03-27 19:00:00 (Sat)
  63076993200, #      utc_end 1999-10-30 19:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63076993200, #    utc_start 1999-10-30 19:00:00 (Sat)
  63089694000, #      utc_end 2000-03-25 19:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63089694000, #    utc_start 2000-03-25 19:00:00 (Sat)
  63108442800, #      utc_end 2000-10-28 19:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63108442800, #    utc_start 2000-10-28 19:00:00 (Sat)
  63121143600, #      utc_end 2001-03-24 19:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63121143600, #    utc_start 2001-03-24 19:00:00 (Sat)
  63139892400, #      utc_end 2001-10-27 19:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  28800,
  1,
  '+08',
      ],
      [
  63139892400, #    utc_start 2001-10-27 19:00:00 (Sat)
  63153198000, #      utc_end 2002-03-30 19:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63153198000, #    utc_start 2002-03-30 19:00:00 (Sat)
  63155876400, #      utc_end 2002-04-30 19:00:00 (Tue)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63155905200, #    local_end 2002-05-01 03:00:00 (Wed)
  28800,
  1,
  '+08',
      ],
      [
  63155876400, #    utc_start 2002-04-30 19:00:00 (Tue)
  63171345600, #      utc_end 2002-10-26 20:00:00 (Sat)
  63155901600, #  local_start 2002-05-01 02:00:00 (Wed)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63171345600, #    utc_start 2002-10-26 20:00:00 (Sat)
  63184651200, #      utc_end 2003-03-29 20:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63184651200, #    utc_start 2003-03-29 20:00:00 (Sat)
  63202795200, #      utc_end 2003-10-25 20:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63202795200, #    utc_start 2003-10-25 20:00:00 (Sat)
  63216100800, #      utc_end 2004-03-27 20:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63216100800, #    utc_start 2004-03-27 20:00:00 (Sat)
  63234849600, #      utc_end 2004-10-30 20:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63234849600, #    utc_start 2004-10-30 20:00:00 (Sat)
  63247550400, #      utc_end 2005-03-26 20:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63247550400, #    utc_start 2005-03-26 20:00:00 (Sat)
  63266299200, #      utc_end 2005-10-29 20:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63266299200, #    utc_start 2005-10-29 20:00:00 (Sat)
  63279000000, #      utc_end 2006-03-25 20:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63279000000, #    utc_start 2006-03-25 20:00:00 (Sat)
  63297748800, #      utc_end 2006-10-28 20:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63297748800, #    utc_start 2006-10-28 20:00:00 (Sat)
  63310449600, #      utc_end 2007-03-24 20:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63310449600, #    utc_start 2007-03-24 20:00:00 (Sat)
  63329198400, #      utc_end 2007-10-27 20:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63329198400, #    utc_start 2007-10-27 20:00:00 (Sat)
  63342504000, #      utc_end 2008-03-29 20:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63342504000, #    utc_start 2008-03-29 20:00:00 (Sat)
  63360648000, #      utc_end 2008-10-25 20:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63360648000, #    utc_start 2008-10-25 20:00:00 (Sat)
  63373953600, #      utc_end 2009-03-28 20:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63373953600, #    utc_start 2009-03-28 20:00:00 (Sat)
  63392097600, #      utc_end 2009-10-24 20:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63392097600, #    utc_start 2009-10-24 20:00:00 (Sat)
  63405403200, #      utc_end 2010-03-27 20:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63405403200, #    utc_start 2010-03-27 20:00:00 (Sat)
  63424152000, #      utc_end 2010-10-30 20:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  25200,
  1,
  '+07',
      ],
      [
  63424152000, #    utc_start 2010-10-30 20:00:00 (Sat)
  63436852800, #      utc_end 2011-03-26 20:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63436852800, #    utc_start 2011-03-26 20:00:00 (Sat)
  63549946800, #      utc_end 2014-10-25 19:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  25200,
  0,
  '+07',
      ],
      [
  63549946800, #    utc_start 2014-10-25 19:00:00 (Sat)
  63600148800, #      utc_end 2016-05-28 20:00:00 (Sat)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63600170400, #    local_end 2016-05-29 02:00:00 (Sun)
  21600,
  0,
  '+06',
      ],
      [
  63600148800, #    utc_start 2016-05-28 20:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63600174000, #  local_start 2016-05-29 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  25200,
  0,
  '+07',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {31}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_TOMSK

    $main::fatpacked{"DateTime/TimeZone/Asia/Ulaanbaatar.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_ULAANBAATAR';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Ulaanbaatar;
  $DateTime::TimeZone::Asia::Ulaanbaatar::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Ulaanbaatar::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60102751948, #      utc_end 1905-07-31 16:52:28 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60102777600, #    local_end 1905-08-01 00:00:00 (Tue)
  25652,
  0,
  'LMT',
      ],
      [
  60102751948, #    utc_start 1905-07-31 16:52:28 (Mon)
  62388118800, #      utc_end 1977-12-31 17:00:00 (Sat)
  60102777148, #  local_start 1905-07-31 23:52:28 (Mon)
  62388144000, #    local_end 1978-01-01 00:00:00 (Sun)
  25200,
  0,
  'ULAT',
      ],
      [
  62388118800, #    utc_start 1977-12-31 17:00:00 (Sat)
  62553657600, #      utc_end 1983-03-31 16:00:00 (Thu)
  62388147600, #  local_start 1978-01-01 01:00:00 (Sun)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  28800,
  0,
  'ULAT',
      ],
      [
  62553657600, #    utc_start 1983-03-31 16:00:00 (Thu)
  62569465200, #      utc_end 1983-09-30 15:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  62569465200, #    utc_start 1983-09-30 15:00:00 (Fri)
  62585280000, #      utc_end 1984-03-31 16:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  28800,
  0,
  'ULAT',
      ],
      [
  62585280000, #    utc_start 1984-03-31 16:00:00 (Sat)
  62601001200, #      utc_end 1984-09-29 15:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601033600, #    local_end 1984-09-30 00:00:00 (Sun)
  32400,
  1,
  'ULAST',
      ],
      [
  62601001200, #    utc_start 1984-09-29 15:00:00 (Sat)
  62616729600, #      utc_end 1985-03-30 16:00:00 (Sat)
  62601030000, #  local_start 1984-09-29 23:00:00 (Sat)
  62616758400, #    local_end 1985-03-31 00:00:00 (Sun)
  28800,
  0,
  'ULAT',
      ],
      [
  62616729600, #    utc_start 1985-03-30 16:00:00 (Sat)
  62632450800, #      utc_end 1985-09-28 15:00:00 (Sat)
  62616762000, #  local_start 1985-03-31 01:00:00 (Sun)
  62632483200, #    local_end 1985-09-29 00:00:00 (Sun)
  32400,
  1,
  'ULAST',
      ],
      [
  62632450800, #    utc_start 1985-09-28 15:00:00 (Sat)
  62648179200, #      utc_end 1986-03-29 16:00:00 (Sat)
  62632479600, #  local_start 1985-09-28 23:00:00 (Sat)
  62648208000, #    local_end 1986-03-30 00:00:00 (Sun)
  28800,
  0,
  'ULAT',
      ],
      [
  62648179200, #    utc_start 1986-03-29 16:00:00 (Sat)
  62663900400, #      utc_end 1986-09-27 15:00:00 (Sat)
  62648211600, #  local_start 1986-03-30 01:00:00 (Sun)
  62663932800, #    local_end 1986-09-28 00:00:00 (Sun)
  32400,
  1,
  'ULAST',
      ],
      [
  62663900400, #    utc_start 1986-09-27 15:00:00 (Sat)
  62679628800, #      utc_end 1987-03-28 16:00:00 (Sat)
  62663929200, #  local_start 1986-09-27 23:00:00 (Sat)
  62679657600, #    local_end 1987-03-29 00:00:00 (Sun)
  28800,
  0,
  'ULAT',
      ],
      [
  62679628800, #    utc_start 1987-03-28 16:00:00 (Sat)
  62695350000, #      utc_end 1987-09-26 15:00:00 (Sat)
  62679661200, #  local_start 1987-03-29 01:00:00 (Sun)
  62695382400, #    local_end 1987-09-27 00:00:00 (Sun)
  32400,
  1,
  'ULAST',
      ],
      [
  62695350000, #    utc_start 1987-09-26 15:00:00 (Sat)
  62711078400, #      utc_end 1988-03-26 16:00:00 (Sat)
  62695378800, #  local_start 1987-09-26 23:00:00 (Sat)
  62711107200, #    local_end 1988-03-27 00:00:00 (Sun)
  28800,
  0,
  'ULAT',
      ],
      [
  62711078400, #    utc_start 1988-03-26 16:00:00 (Sat)
  62726799600, #      utc_end 1988-09-24 15:00:00 (Sat)
  62711110800, #  local_start 1988-03-27 01:00:00 (Sun)
  62726832000, #    local_end 1988-09-25 00:00:00 (Sun)
  32400,
  1,
  'ULAST',
      ],
      [
  62726799600, #    utc_start 1988-09-24 15:00:00 (Sat)
  62742528000, #      utc_end 1989-03-25 16:00:00 (Sat)
  62726828400, #  local_start 1988-09-24 23:00:00 (Sat)
  62742556800, #    local_end 1989-03-26 00:00:00 (Sun)
  28800,
  0,
  'ULAT',
      ],
      [
  62742528000, #    utc_start 1989-03-25 16:00:00 (Sat)
  62758249200, #      utc_end 1989-09-23 15:00:00 (Sat)
  62742560400, #  local_start 1989-03-26 01:00:00 (Sun)
  62758281600, #    local_end 1989-09-24 00:00:00 (Sun)
  32400,
  1,
  'ULAST',
      ],
      [
  62758249200, #    utc_start 1989-09-23 15:00:00 (Sat)
  62773977600, #      utc_end 1990-03-24 16:00:00 (Sat)
  62758278000, #  local_start 1989-09-23 23:00:00 (Sat)
  62774006400, #    local_end 1990-03-25 00:00:00 (Sun)
  28800,
  0,
  'ULAT',
      ],
      [
  62773977600, #    utc_start 1990-03-24 16:00:00 (Sat)
  62790303600, #      utc_end 1990-09-29 15:00:00 (Sat)
  62774010000, #  local_start 1990-03-25 01:00:00 (Sun)
  62790336000, #    local_end 1990-09-30 00:00:00 (Sun)
  32400,
  1,
  'ULAST',
      ],
      [
  62790303600, #    utc_start 1990-09-29 15:00:00 (Sat)
  62806032000, #      utc_end 1991-03-30 16:00:00 (Sat)
  62790332400, #  local_start 1990-09-29 23:00:00 (Sat)
  62806060800, #    local_end 1991-03-31 00:00:00 (Sun)
  28800,
  0,
  'ULAT',
      ],
      [
  62806032000, #    utc_start 1991-03-30 16:00:00 (Sat)
  62821753200, #      utc_end 1991-09-28 15:00:00 (Sat)
  62806064400, #  local_start 1991-03-31 01:00:00 (Sun)
  62821785600, #    local_end 1991-09-29 00:00:00 (Sun)
  32400,
  1,
  'ULAST',
      ],
      [
  62821753200, #    utc_start 1991-09-28 15:00:00 (Sat)
  62837481600, #      utc_end 1992-03-28 16:00:00 (Sat)
  62821782000, #  local_start 1991-09-28 23:00:00 (Sat)
  62837510400, #    local_end 1992-03-29 00:00:00 (Sun)
  28800,
  0,
  'ULAT',
      ],
      [
  62837481600, #    utc_start 1992-03-28 16:00:00 (Sat)
  62853202800, #      utc_end 1992-09-26 15:00:00 (Sat)
  62837514000, #  local_start 1992-03-29 01:00:00 (Sun)
  62853235200, #    local_end 1992-09-27 00:00:00 (Sun)
  32400,
  1,
  'ULAST',
      ],
      [
  62853202800, #    utc_start 1992-09-26 15:00:00 (Sat)
  62868931200, #      utc_end 1993-03-27 16:00:00 (Sat)
  62853231600, #  local_start 1992-09-26 23:00:00 (Sat)
  62868960000, #    local_end 1993-03-28 00:00:00 (Sun)
  28800,
  0,
  'ULAT',
      ],
      [
  62868931200, #    utc_start 1993-03-27 16:00:00 (Sat)
  62884652400, #      utc_end 1993-09-25 15:00:00 (Sat)
  62868963600, #  local_start 1993-03-28 01:00:00 (Sun)
  62884684800, #    local_end 1993-09-26 00:00:00 (Sun)
  32400,
  1,
  'ULAST',
      ],
      [
  62884652400, #    utc_start 1993-09-25 15:00:00 (Sat)
  62900380800, #      utc_end 1994-03-26 16:00:00 (Sat)
  62884681200, #  local_start 1993-09-25 23:00:00 (Sat)
  62900409600, #    local_end 1994-03-27 00:00:00 (Sun)
  28800,
  0,
  'ULAT',
      ],
      [
  62900380800, #    utc_start 1994-03-26 16:00:00 (Sat)
  62916102000, #      utc_end 1994-09-24 15:00:00 (Sat)
  62900413200, #  local_start 1994-03-27 01:00:00 (Sun)
  62916134400, #    local_end 1994-09-25 00:00:00 (Sun)
  32400,
  1,
  'ULAST',
      ],
      [
  62916102000, #    utc_start 1994-09-24 15:00:00 (Sat)
  62931830400, #      utc_end 1995-03-25 16:00:00 (Sat)
  62916130800, #  local_start 1994-09-24 23:00:00 (Sat)
  62931859200, #    local_end 1995-03-26 00:00:00 (Sun)
  28800,
  0,
  'ULAT',
      ],
      [
  62931830400, #    utc_start 1995-03-25 16:00:00 (Sat)
  62947551600, #      utc_end 1995-09-23 15:00:00 (Sat)
  62931862800, #  local_start 1995-03-26 01:00:00 (Sun)
  62947584000, #    local_end 1995-09-24 00:00:00 (Sun)
  32400,
  1,
  'ULAST',
      ],
      [
  62947551600, #    utc_start 1995-09-23 15:00:00 (Sat)
  62963884800, #      utc_end 1996-03-30 16:00:00 (Sat)
  62947580400, #  local_start 1995-09-23 23:00:00 (Sat)
  62963913600, #    local_end 1996-03-31 00:00:00 (Sun)
  28800,
  0,
  'ULAT',
      ],
      [
  62963884800, #    utc_start 1996-03-30 16:00:00 (Sat)
  62979606000, #      utc_end 1996-09-28 15:00:00 (Sat)
  62963917200, #  local_start 1996-03-31 01:00:00 (Sun)
  62979638400, #    local_end 1996-09-29 00:00:00 (Sun)
  32400,
  1,
  'ULAST',
      ],
      [
  62979606000, #    utc_start 1996-09-28 15:00:00 (Sat)
  62995334400, #      utc_end 1997-03-29 16:00:00 (Sat)
  62979634800, #  local_start 1996-09-28 23:00:00 (Sat)
  62995363200, #    local_end 1997-03-30 00:00:00 (Sun)
  28800,
  0,
  'ULAT',
      ],
      [
  62995334400, #    utc_start 1997-03-29 16:00:00 (Sat)
  63011055600, #      utc_end 1997-09-27 15:00:00 (Sat)
  62995366800, #  local_start 1997-03-30 01:00:00 (Sun)
  63011088000, #    local_end 1997-09-28 00:00:00 (Sun)
  32400,
  1,
  'ULAST',
      ],
      [
  63011055600, #    utc_start 1997-09-27 15:00:00 (Sat)
  63026784000, #      utc_end 1998-03-28 16:00:00 (Sat)
  63011084400, #  local_start 1997-09-27 23:00:00 (Sat)
  63026812800, #    local_end 1998-03-29 00:00:00 (Sun)
  28800,
  0,
  'ULAT',
      ],
      [
  63026784000, #    utc_start 1998-03-28 16:00:00 (Sat)
  63042505200, #      utc_end 1998-09-26 15:00:00 (Sat)
  63026816400, #  local_start 1998-03-29 01:00:00 (Sun)
  63042537600, #    local_end 1998-09-27 00:00:00 (Sun)
  32400,
  1,
  'ULAST',
      ],
      [
  63042505200, #    utc_start 1998-09-26 15:00:00 (Sat)
  63124077600, #      utc_end 2001-04-27 18:00:00 (Fri)
  63042534000, #  local_start 1998-09-26 23:00:00 (Sat)
  63124106400, #    local_end 2001-04-28 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63124077600, #    utc_start 2001-04-27 18:00:00 (Fri)
  63137379600, #      utc_end 2001-09-28 17:00:00 (Fri)
  63124110000, #  local_start 2001-04-28 03:00:00 (Sat)
  63137412000, #    local_end 2001-09-29 02:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63137379600, #    utc_start 2001-09-28 17:00:00 (Fri)
  63153108000, #      utc_end 2002-03-29 18:00:00 (Fri)
  63137408400, #  local_start 2001-09-29 01:00:00 (Sat)
  63153136800, #    local_end 2002-03-30 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63153108000, #    utc_start 2002-03-29 18:00:00 (Fri)
  63168829200, #      utc_end 2002-09-27 17:00:00 (Fri)
  63153140400, #  local_start 2002-03-30 03:00:00 (Sat)
  63168861600, #    local_end 2002-09-28 02:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63168829200, #    utc_start 2002-09-27 17:00:00 (Fri)
  63184557600, #      utc_end 2003-03-28 18:00:00 (Fri)
  63168858000, #  local_start 2002-09-28 01:00:00 (Sat)
  63184586400, #    local_end 2003-03-29 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63184557600, #    utc_start 2003-03-28 18:00:00 (Fri)
  63200278800, #      utc_end 2003-09-26 17:00:00 (Fri)
  63184590000, #  local_start 2003-03-29 03:00:00 (Sat)
  63200311200, #    local_end 2003-09-27 02:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63200278800, #    utc_start 2003-09-26 17:00:00 (Fri)
  63216007200, #      utc_end 2004-03-26 18:00:00 (Fri)
  63200307600, #  local_start 2003-09-27 01:00:00 (Sat)
  63216036000, #    local_end 2004-03-27 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63216007200, #    utc_start 2004-03-26 18:00:00 (Fri)
  63231728400, #      utc_end 2004-09-24 17:00:00 (Fri)
  63216039600, #  local_start 2004-03-27 03:00:00 (Sat)
  63231760800, #    local_end 2004-09-25 02:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63231728400, #    utc_start 2004-09-24 17:00:00 (Fri)
  63247456800, #      utc_end 2005-03-25 18:00:00 (Fri)
  63231757200, #  local_start 2004-09-25 01:00:00 (Sat)
  63247485600, #    local_end 2005-03-26 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63247456800, #    utc_start 2005-03-25 18:00:00 (Fri)
  63263178000, #      utc_end 2005-09-23 17:00:00 (Fri)
  63247489200, #  local_start 2005-03-26 03:00:00 (Sat)
  63263210400, #    local_end 2005-09-24 02:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63263178000, #    utc_start 2005-09-23 17:00:00 (Fri)
  63278906400, #      utc_end 2006-03-24 18:00:00 (Fri)
  63263206800, #  local_start 2005-09-24 01:00:00 (Sat)
  63278935200, #    local_end 2006-03-25 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63278906400, #    utc_start 2006-03-24 18:00:00 (Fri)
  63295232400, #      utc_end 2006-09-29 17:00:00 (Fri)
  63278938800, #  local_start 2006-03-25 03:00:00 (Sat)
  63295264800, #    local_end 2006-09-30 02:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63295232400, #    utc_start 2006-09-29 17:00:00 (Fri)
  63563162400, #      utc_end 2015-03-27 18:00:00 (Fri)
  63295261200, #  local_start 2006-09-30 01:00:00 (Sat)
  63563191200, #    local_end 2015-03-28 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63563162400, #    utc_start 2015-03-27 18:00:00 (Fri)
  63578876400, #      utc_end 2015-09-25 15:00:00 (Fri)
  63563194800, #  local_start 2015-03-28 03:00:00 (Sat)
  63578908800, #    local_end 2015-09-26 00:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63578876400, #    utc_start 2015-09-25 15:00:00 (Fri)
  63594612000, #      utc_end 2016-03-25 18:00:00 (Fri)
  63578905200, #  local_start 2015-09-25 23:00:00 (Fri)
  63594640800, #    local_end 2016-03-26 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63594612000, #    utc_start 2016-03-25 18:00:00 (Fri)
  63610326000, #      utc_end 2016-09-23 15:00:00 (Fri)
  63594644400, #  local_start 2016-03-26 03:00:00 (Sat)
  63610358400, #    local_end 2016-09-24 00:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63610326000, #    utc_start 2016-09-23 15:00:00 (Fri)
  63626061600, #      utc_end 2017-03-24 18:00:00 (Fri)
  63610354800, #  local_start 2016-09-23 23:00:00 (Fri)
  63626090400, #    local_end 2017-03-25 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63626061600, #    utc_start 2017-03-24 18:00:00 (Fri)
  63642380400, #      utc_end 2017-09-29 15:00:00 (Fri)
  63626094000, #  local_start 2017-03-25 03:00:00 (Sat)
  63642412800, #    local_end 2017-09-30 00:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63642380400, #    utc_start 2017-09-29 15:00:00 (Fri)
  63658116000, #      utc_end 2018-03-30 18:00:00 (Fri)
  63642409200, #  local_start 2017-09-29 23:00:00 (Fri)
  63658144800, #    local_end 2018-03-31 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63658116000, #    utc_start 2018-03-30 18:00:00 (Fri)
  63673830000, #      utc_end 2018-09-28 15:00:00 (Fri)
  63658148400, #  local_start 2018-03-31 03:00:00 (Sat)
  63673862400, #    local_end 2018-09-29 00:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63673830000, #    utc_start 2018-09-28 15:00:00 (Fri)
  63689565600, #      utc_end 2019-03-29 18:00:00 (Fri)
  63673858800, #  local_start 2018-09-28 23:00:00 (Fri)
  63689594400, #    local_end 2019-03-30 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63689565600, #    utc_start 2019-03-29 18:00:00 (Fri)
  63705279600, #      utc_end 2019-09-27 15:00:00 (Fri)
  63689598000, #  local_start 2019-03-30 03:00:00 (Sat)
  63705312000, #    local_end 2019-09-28 00:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63705279600, #    utc_start 2019-09-27 15:00:00 (Fri)
  63721015200, #      utc_end 2020-03-27 18:00:00 (Fri)
  63705308400, #  local_start 2019-09-27 23:00:00 (Fri)
  63721044000, #    local_end 2020-03-28 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63721015200, #    utc_start 2020-03-27 18:00:00 (Fri)
  63736729200, #      utc_end 2020-09-25 15:00:00 (Fri)
  63721047600, #  local_start 2020-03-28 03:00:00 (Sat)
  63736761600, #    local_end 2020-09-26 00:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63736729200, #    utc_start 2020-09-25 15:00:00 (Fri)
  63752464800, #      utc_end 2021-03-26 18:00:00 (Fri)
  63736758000, #  local_start 2020-09-25 23:00:00 (Fri)
  63752493600, #    local_end 2021-03-27 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63752464800, #    utc_start 2021-03-26 18:00:00 (Fri)
  63768178800, #      utc_end 2021-09-24 15:00:00 (Fri)
  63752497200, #  local_start 2021-03-27 03:00:00 (Sat)
  63768211200, #    local_end 2021-09-25 00:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63768178800, #    utc_start 2021-09-24 15:00:00 (Fri)
  63783914400, #      utc_end 2022-03-25 18:00:00 (Fri)
  63768207600, #  local_start 2021-09-24 23:00:00 (Fri)
  63783943200, #    local_end 2022-03-26 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63783914400, #    utc_start 2022-03-25 18:00:00 (Fri)
  63799628400, #      utc_end 2022-09-23 15:00:00 (Fri)
  63783946800, #  local_start 2022-03-26 03:00:00 (Sat)
  63799660800, #    local_end 2022-09-24 00:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63799628400, #    utc_start 2022-09-23 15:00:00 (Fri)
  63815364000, #      utc_end 2023-03-24 18:00:00 (Fri)
  63799657200, #  local_start 2022-09-23 23:00:00 (Fri)
  63815392800, #    local_end 2023-03-25 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63815364000, #    utc_start 2023-03-24 18:00:00 (Fri)
  63831682800, #      utc_end 2023-09-29 15:00:00 (Fri)
  63815396400, #  local_start 2023-03-25 03:00:00 (Sat)
  63831715200, #    local_end 2023-09-30 00:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63831682800, #    utc_start 2023-09-29 15:00:00 (Fri)
  63847418400, #      utc_end 2024-03-29 18:00:00 (Fri)
  63831711600, #  local_start 2023-09-29 23:00:00 (Fri)
  63847447200, #    local_end 2024-03-30 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63847418400, #    utc_start 2024-03-29 18:00:00 (Fri)
  63863132400, #      utc_end 2024-09-27 15:00:00 (Fri)
  63847450800, #  local_start 2024-03-30 03:00:00 (Sat)
  63863164800, #    local_end 2024-09-28 00:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63863132400, #    utc_start 2024-09-27 15:00:00 (Fri)
  63878868000, #      utc_end 2025-03-28 18:00:00 (Fri)
  63863161200, #  local_start 2024-09-27 23:00:00 (Fri)
  63878896800, #    local_end 2025-03-29 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63878868000, #    utc_start 2025-03-28 18:00:00 (Fri)
  63894582000, #      utc_end 2025-09-26 15:00:00 (Fri)
  63878900400, #  local_start 2025-03-29 03:00:00 (Sat)
  63894614400, #    local_end 2025-09-27 00:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63894582000, #    utc_start 2025-09-26 15:00:00 (Fri)
  63910317600, #      utc_end 2026-03-27 18:00:00 (Fri)
  63894610800, #  local_start 2025-09-26 23:00:00 (Fri)
  63910346400, #    local_end 2026-03-28 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63910317600, #    utc_start 2026-03-27 18:00:00 (Fri)
  63926031600, #      utc_end 2026-09-25 15:00:00 (Fri)
  63910350000, #  local_start 2026-03-28 03:00:00 (Sat)
  63926064000, #    local_end 2026-09-26 00:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
      [
  63926031600, #    utc_start 2026-09-25 15:00:00 (Fri)
  63941767200, #      utc_end 2027-03-26 18:00:00 (Fri)
  63926060400, #  local_start 2026-09-25 23:00:00 (Fri)
  63941796000, #    local_end 2027-03-27 02:00:00 (Sat)
  28800,
  0,
  'ULAT',
      ],
      [
  63941767200, #    utc_start 2027-03-26 18:00:00 (Fri)
  63957481200, #      utc_end 2027-09-24 15:00:00 (Fri)
  63941799600, #  local_start 2027-03-27 03:00:00 (Sat)
  63957513600, #    local_end 2027-09-25 00:00:00 (Sat)
  32400,
  1,
  'ULAST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {35}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 28800 }
  
  my $last_observance = bless( {
    'format' => 'ULA%sT',
    'gmtoff' => '8:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722085,
      'local_rd_secs' => 3600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722085,
      'utc_rd_secs' => 3600,
      'utc_year' => 1979
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 28800,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722084,
      'local_rd_secs' => 61200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722084,
      'utc_rd_secs' => 61200,
      'utc_year' => 1978
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '0:00',
      'from' => '2015',
      'in' => 'Sep',
      'letter' => '',
      'name' => 'Mongol',
      'offset_from_std' => 0,
      'on' => 'lastSat',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2015',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'Mongol',
      'offset_from_std' => 3600,
      'on' => 'lastSat',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_ULAANBAATAR

    $main::fatpacked{"DateTime/TimeZone/Asia/Urumqi.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_URUMQI';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Urumqi;
  $DateTime::TimeZone::Asia::Urumqi::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Urumqi::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60810199780, #      utc_end 1927-12-31 18:09:40 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60810220800, #    local_end 1928-01-01 00:00:00 (Sun)
  21020,
  0,
  'LMT',
      ],
      [
  60810199780, #    utc_start 1927-12-31 18:09:40 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  60810221380, #  local_start 1928-01-01 00:09:40 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  21600,
  0,
  'XJT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_URUMQI

    $main::fatpacked{"DateTime/TimeZone/Asia/Ust_Nera.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_UST_NERA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Ust_Nera;
  $DateTime::TimeZone::Asia::Ust_Nera::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Ust_Nera::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60556256826, #      utc_end 1919-12-14 14:27:06 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60556291200, #    local_end 1919-12-15 00:00:00 (Mon)
  34374,
  0,
  'LMT',
      ],
      [
  60556256826, #    utc_start 1919-12-14 14:27:06 (Sun)
  60888124800, #      utc_end 1930-06-20 16:00:00 (Fri)
  60556285626, #  local_start 1919-12-14 22:27:06 (Sun)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  28800,
  0,
  'YAKT',
      ],
      [
  60888124800, #    utc_start 1930-06-20 16:00:00 (Fri)
  62490582000, #      utc_end 1981-03-31 15:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  32400,
  0,
  'YAKT',
      ],
      [
  62490582000, #    utc_start 1981-03-31 15:00:00 (Tue)
  62506382400, #      utc_end 1981-09-30 12:00:00 (Wed)
  62490625200, #  local_start 1981-04-01 03:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  43200,
  1,
  'MAGST',
      ],
      [
  62506382400, #    utc_start 1981-09-30 12:00:00 (Wed)
  62522110800, #      utc_end 1982-03-31 13:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  39600,
  0,
  'MAGT',
      ],
      [
  62522110800, #    utc_start 1982-03-31 13:00:00 (Wed)
  62537918400, #      utc_end 1982-09-30 12:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  43200,
  1,
  'MAGST',
      ],
      [
  62537918400, #    utc_start 1982-09-30 12:00:00 (Thu)
  62553646800, #      utc_end 1983-03-31 13:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  39600,
  0,
  'MAGT',
      ],
      [
  62553646800, #    utc_start 1983-03-31 13:00:00 (Thu)
  62569454400, #      utc_end 1983-09-30 12:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  43200,
  1,
  'MAGST',
      ],
      [
  62569454400, #    utc_start 1983-09-30 12:00:00 (Fri)
  62585269200, #      utc_end 1984-03-31 13:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62585269200, #    utc_start 1984-03-31 13:00:00 (Sat)
  62601001200, #      utc_end 1984-09-29 15:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62601001200, #    utc_start 1984-09-29 15:00:00 (Sat)
  62616726000, #      utc_end 1985-03-30 15:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62616726000, #    utc_start 1985-03-30 15:00:00 (Sat)
  62632450800, #      utc_end 1985-09-28 15:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62632450800, #    utc_start 1985-09-28 15:00:00 (Sat)
  62648175600, #      utc_end 1986-03-29 15:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62648175600, #    utc_start 1986-03-29 15:00:00 (Sat)
  62663900400, #      utc_end 1986-09-27 15:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62663900400, #    utc_start 1986-09-27 15:00:00 (Sat)
  62679625200, #      utc_end 1987-03-28 15:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62679625200, #    utc_start 1987-03-28 15:00:00 (Sat)
  62695350000, #      utc_end 1987-09-26 15:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62695350000, #    utc_start 1987-09-26 15:00:00 (Sat)
  62711074800, #      utc_end 1988-03-26 15:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62711074800, #    utc_start 1988-03-26 15:00:00 (Sat)
  62726799600, #      utc_end 1988-09-24 15:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62726799600, #    utc_start 1988-09-24 15:00:00 (Sat)
  62742524400, #      utc_end 1989-03-25 15:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62742524400, #    utc_start 1989-03-25 15:00:00 (Sat)
  62758249200, #      utc_end 1989-09-23 15:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62758249200, #    utc_start 1989-09-23 15:00:00 (Sat)
  62773974000, #      utc_end 1990-03-24 15:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62773974000, #    utc_start 1990-03-24 15:00:00 (Sat)
  62790303600, #      utc_end 1990-09-29 15:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62790303600, #    utc_start 1990-09-29 15:00:00 (Sat)
  62806028400, #      utc_end 1991-03-30 15:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62806028400, #    utc_start 1991-03-30 15:00:00 (Sat)
  62821756800, #      utc_end 1991-09-28 16:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  39600,
  1,
  'MAGST',
      ],
      [
  62821756800, #    utc_start 1991-09-28 16:00:00 (Sat)
  62831433600, #      utc_end 1992-01-18 16:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  36000,
  0,
  'MAGT',
      ],
      [
  62831433600, #    utc_start 1992-01-18 16:00:00 (Sat)
  62837478000, #      utc_end 1992-03-28 15:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62837478000, #    utc_start 1992-03-28 15:00:00 (Sat)
  62853202800, #      utc_end 1992-09-26 15:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62853202800, #    utc_start 1992-09-26 15:00:00 (Sat)
  62868927600, #      utc_end 1993-03-27 15:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62868927600, #    utc_start 1993-03-27 15:00:00 (Sat)
  62884652400, #      utc_end 1993-09-25 15:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62884652400, #    utc_start 1993-09-25 15:00:00 (Sat)
  62900377200, #      utc_end 1994-03-26 15:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62900377200, #    utc_start 1994-03-26 15:00:00 (Sat)
  62916102000, #      utc_end 1994-09-24 15:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62916102000, #    utc_start 1994-09-24 15:00:00 (Sat)
  62931826800, #      utc_end 1995-03-25 15:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62931826800, #    utc_start 1995-03-25 15:00:00 (Sat)
  62947551600, #      utc_end 1995-09-23 15:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62947551600, #    utc_start 1995-09-23 15:00:00 (Sat)
  62963881200, #      utc_end 1996-03-30 15:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62963881200, #    utc_start 1996-03-30 15:00:00 (Sat)
  62982025200, #      utc_end 1996-10-26 15:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  62982025200, #    utc_start 1996-10-26 15:00:00 (Sat)
  62995330800, #      utc_end 1997-03-29 15:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  62995330800, #    utc_start 1997-03-29 15:00:00 (Sat)
  63013474800, #      utc_end 1997-10-25 15:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63013474800, #    utc_start 1997-10-25 15:00:00 (Sat)
  63026780400, #      utc_end 1998-03-28 15:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63026780400, #    utc_start 1998-03-28 15:00:00 (Sat)
  63044924400, #      utc_end 1998-10-24 15:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63044924400, #    utc_start 1998-10-24 15:00:00 (Sat)
  63058230000, #      utc_end 1999-03-27 15:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63058230000, #    utc_start 1999-03-27 15:00:00 (Sat)
  63076978800, #      utc_end 1999-10-30 15:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63076978800, #    utc_start 1999-10-30 15:00:00 (Sat)
  63089679600, #      utc_end 2000-03-25 15:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63089679600, #    utc_start 2000-03-25 15:00:00 (Sat)
  63108428400, #      utc_end 2000-10-28 15:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63108428400, #    utc_start 2000-10-28 15:00:00 (Sat)
  63121129200, #      utc_end 2001-03-24 15:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63121129200, #    utc_start 2001-03-24 15:00:00 (Sat)
  63139878000, #      utc_end 2001-10-27 15:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63139878000, #    utc_start 2001-10-27 15:00:00 (Sat)
  63153183600, #      utc_end 2002-03-30 15:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63153183600, #    utc_start 2002-03-30 15:00:00 (Sat)
  63171327600, #      utc_end 2002-10-26 15:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63171327600, #    utc_start 2002-10-26 15:00:00 (Sat)
  63184633200, #      utc_end 2003-03-29 15:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63184633200, #    utc_start 2003-03-29 15:00:00 (Sat)
  63202777200, #      utc_end 2003-10-25 15:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63202777200, #    utc_start 2003-10-25 15:00:00 (Sat)
  63216082800, #      utc_end 2004-03-27 15:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63216082800, #    utc_start 2004-03-27 15:00:00 (Sat)
  63234831600, #      utc_end 2004-10-30 15:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63234831600, #    utc_start 2004-10-30 15:00:00 (Sat)
  63247532400, #      utc_end 2005-03-26 15:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63247532400, #    utc_start 2005-03-26 15:00:00 (Sat)
  63266281200, #      utc_end 2005-10-29 15:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63266281200, #    utc_start 2005-10-29 15:00:00 (Sat)
  63278982000, #      utc_end 2006-03-25 15:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63278982000, #    utc_start 2006-03-25 15:00:00 (Sat)
  63297730800, #      utc_end 2006-10-28 15:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63297730800, #    utc_start 2006-10-28 15:00:00 (Sat)
  63310431600, #      utc_end 2007-03-24 15:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63310431600, #    utc_start 2007-03-24 15:00:00 (Sat)
  63329180400, #      utc_end 2007-10-27 15:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63329180400, #    utc_start 2007-10-27 15:00:00 (Sat)
  63342486000, #      utc_end 2008-03-29 15:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63342486000, #    utc_start 2008-03-29 15:00:00 (Sat)
  63360630000, #      utc_end 2008-10-25 15:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63360630000, #    utc_start 2008-10-25 15:00:00 (Sat)
  63373935600, #      utc_end 2009-03-28 15:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63373935600, #    utc_start 2009-03-28 15:00:00 (Sat)
  63392079600, #      utc_end 2009-10-24 15:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63392079600, #    utc_start 2009-10-24 15:00:00 (Sat)
  63405385200, #      utc_end 2010-03-27 15:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63405385200, #    utc_start 2010-03-27 15:00:00 (Sat)
  63424134000, #      utc_end 2010-10-30 15:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  43200,
  1,
  'MAGST',
      ],
      [
  63424134000, #    utc_start 2010-10-30 15:00:00 (Sat)
  63436834800, #      utc_end 2011-03-26 15:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  39600,
  0,
  'MAGT',
      ],
      [
  63436834800, #    utc_start 2011-03-26 15:00:00 (Sat)
  63451512000, #      utc_end 2011-09-12 12:00:00 (Mon)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63451555200, #    local_end 2011-09-13 00:00:00 (Tue)
  43200,
  0,
  'MAGT',
      ],
      [
  63451512000, #    utc_start 2011-09-12 12:00:00 (Mon)
  63549932400, #      utc_end 2014-10-25 15:00:00 (Sat)
  63451551600, #  local_start 2011-09-12 23:00:00 (Mon)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  39600,
  0,
  'VLAT',
      ],
      [
  63549932400, #    utc_start 2014-10-25 15:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  36000,
  0,
  'VLAT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_UST_NERA

    $main::fatpacked{"DateTime/TimeZone/Asia/Vladivostok.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_VLADIVOSTOK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Vladivostok;
  $DateTime::TimeZone::Asia::Vladivostok::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Vladivostok::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60648361949, #      utc_end 1922-11-14 15:12:29 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60648393600, #    local_end 1922-11-15 00:00:00 (Wed)
  31651,
  0,
  'LMT',
      ],
      [
  60648361949, #    utc_start 1922-11-14 15:12:29 (Tue)
  60888121200, #      utc_end 1930-06-20 15:00:00 (Fri)
  60648394349, #  local_start 1922-11-15 00:12:29 (Wed)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  32400,
  0,
  'VLAT',
      ],
      [
  60888121200, #    utc_start 1930-06-20 15:00:00 (Fri)
  62490578400, #      utc_end 1981-03-31 14:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  36000,
  0,
  'VLAT',
      ],
      [
  62490578400, #    utc_start 1981-03-31 14:00:00 (Tue)
  62506386000, #      utc_end 1981-09-30 13:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  39600,
  1,
  'VLAST',
      ],
      [
  62506386000, #    utc_start 1981-09-30 13:00:00 (Wed)
  62522114400, #      utc_end 1982-03-31 14:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  36000,
  0,
  'VLAT',
      ],
      [
  62522114400, #    utc_start 1982-03-31 14:00:00 (Wed)
  62537922000, #      utc_end 1982-09-30 13:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  39600,
  1,
  'VLAST',
      ],
      [
  62537922000, #    utc_start 1982-09-30 13:00:00 (Thu)
  62553650400, #      utc_end 1983-03-31 14:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  36000,
  0,
  'VLAT',
      ],
      [
  62553650400, #    utc_start 1983-03-31 14:00:00 (Thu)
  62569458000, #      utc_end 1983-09-30 13:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  39600,
  1,
  'VLAST',
      ],
      [
  62569458000, #    utc_start 1983-09-30 13:00:00 (Fri)
  62585272800, #      utc_end 1984-03-31 14:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  62585272800, #    utc_start 1984-03-31 14:00:00 (Sat)
  62601004800, #      utc_end 1984-09-29 16:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  62601004800, #    utc_start 1984-09-29 16:00:00 (Sat)
  62616729600, #      utc_end 1985-03-30 16:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  62616729600, #    utc_start 1985-03-30 16:00:00 (Sat)
  62632454400, #      utc_end 1985-09-28 16:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  62632454400, #    utc_start 1985-09-28 16:00:00 (Sat)
  62648179200, #      utc_end 1986-03-29 16:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  62648179200, #    utc_start 1986-03-29 16:00:00 (Sat)
  62663904000, #      utc_end 1986-09-27 16:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  62663904000, #    utc_start 1986-09-27 16:00:00 (Sat)
  62679628800, #      utc_end 1987-03-28 16:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  62679628800, #    utc_start 1987-03-28 16:00:00 (Sat)
  62695353600, #      utc_end 1987-09-26 16:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  62695353600, #    utc_start 1987-09-26 16:00:00 (Sat)
  62711078400, #      utc_end 1988-03-26 16:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  62711078400, #    utc_start 1988-03-26 16:00:00 (Sat)
  62726803200, #      utc_end 1988-09-24 16:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  62726803200, #    utc_start 1988-09-24 16:00:00 (Sat)
  62742528000, #      utc_end 1989-03-25 16:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  62742528000, #    utc_start 1989-03-25 16:00:00 (Sat)
  62758252800, #      utc_end 1989-09-23 16:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  62758252800, #    utc_start 1989-09-23 16:00:00 (Sat)
  62773977600, #      utc_end 1990-03-24 16:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  62773977600, #    utc_start 1990-03-24 16:00:00 (Sat)
  62790307200, #      utc_end 1990-09-29 16:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  62790307200, #    utc_start 1990-09-29 16:00:00 (Sat)
  62806032000, #      utc_end 1991-03-30 16:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  62806032000, #    utc_start 1991-03-30 16:00:00 (Sat)
  62821760400, #      utc_end 1991-09-28 17:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  36000,
  1,
  'VLAST',
      ],
      [
  62821760400, #    utc_start 1991-09-28 17:00:00 (Sat)
  62831437200, #      utc_end 1992-01-18 17:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  32400,
  0,
  'VLAT',
      ],
      [
  62831437200, #    utc_start 1992-01-18 17:00:00 (Sat)
  62837481600, #      utc_end 1992-03-28 16:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  62837481600, #    utc_start 1992-03-28 16:00:00 (Sat)
  62853206400, #      utc_end 1992-09-26 16:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  62853206400, #    utc_start 1992-09-26 16:00:00 (Sat)
  62868931200, #      utc_end 1993-03-27 16:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  62868931200, #    utc_start 1993-03-27 16:00:00 (Sat)
  62884656000, #      utc_end 1993-09-25 16:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  62884656000, #    utc_start 1993-09-25 16:00:00 (Sat)
  62900380800, #      utc_end 1994-03-26 16:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  62900380800, #    utc_start 1994-03-26 16:00:00 (Sat)
  62916105600, #      utc_end 1994-09-24 16:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  62916105600, #    utc_start 1994-09-24 16:00:00 (Sat)
  62931830400, #      utc_end 1995-03-25 16:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  62931830400, #    utc_start 1995-03-25 16:00:00 (Sat)
  62947555200, #      utc_end 1995-09-23 16:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  62947555200, #    utc_start 1995-09-23 16:00:00 (Sat)
  62963884800, #      utc_end 1996-03-30 16:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  62963884800, #    utc_start 1996-03-30 16:00:00 (Sat)
  62982028800, #      utc_end 1996-10-26 16:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  62982028800, #    utc_start 1996-10-26 16:00:00 (Sat)
  62995334400, #      utc_end 1997-03-29 16:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  62995334400, #    utc_start 1997-03-29 16:00:00 (Sat)
  63013478400, #      utc_end 1997-10-25 16:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63013478400, #    utc_start 1997-10-25 16:00:00 (Sat)
  63026784000, #      utc_end 1998-03-28 16:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63026784000, #    utc_start 1998-03-28 16:00:00 (Sat)
  63044928000, #      utc_end 1998-10-24 16:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63044928000, #    utc_start 1998-10-24 16:00:00 (Sat)
  63058233600, #      utc_end 1999-03-27 16:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63058233600, #    utc_start 1999-03-27 16:00:00 (Sat)
  63076982400, #      utc_end 1999-10-30 16:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63076982400, #    utc_start 1999-10-30 16:00:00 (Sat)
  63089683200, #      utc_end 2000-03-25 16:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63089683200, #    utc_start 2000-03-25 16:00:00 (Sat)
  63108432000, #      utc_end 2000-10-28 16:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63108432000, #    utc_start 2000-10-28 16:00:00 (Sat)
  63121132800, #      utc_end 2001-03-24 16:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63121132800, #    utc_start 2001-03-24 16:00:00 (Sat)
  63139881600, #      utc_end 2001-10-27 16:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63139881600, #    utc_start 2001-10-27 16:00:00 (Sat)
  63153187200, #      utc_end 2002-03-30 16:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63153187200, #    utc_start 2002-03-30 16:00:00 (Sat)
  63171331200, #      utc_end 2002-10-26 16:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63171331200, #    utc_start 2002-10-26 16:00:00 (Sat)
  63184636800, #      utc_end 2003-03-29 16:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63184636800, #    utc_start 2003-03-29 16:00:00 (Sat)
  63202780800, #      utc_end 2003-10-25 16:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63202780800, #    utc_start 2003-10-25 16:00:00 (Sat)
  63216086400, #      utc_end 2004-03-27 16:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63216086400, #    utc_start 2004-03-27 16:00:00 (Sat)
  63234835200, #      utc_end 2004-10-30 16:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63234835200, #    utc_start 2004-10-30 16:00:00 (Sat)
  63247536000, #      utc_end 2005-03-26 16:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63247536000, #    utc_start 2005-03-26 16:00:00 (Sat)
  63266284800, #      utc_end 2005-10-29 16:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63266284800, #    utc_start 2005-10-29 16:00:00 (Sat)
  63278985600, #      utc_end 2006-03-25 16:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63278985600, #    utc_start 2006-03-25 16:00:00 (Sat)
  63297734400, #      utc_end 2006-10-28 16:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63297734400, #    utc_start 2006-10-28 16:00:00 (Sat)
  63310435200, #      utc_end 2007-03-24 16:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63310435200, #    utc_start 2007-03-24 16:00:00 (Sat)
  63329184000, #      utc_end 2007-10-27 16:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63329184000, #    utc_start 2007-10-27 16:00:00 (Sat)
  63342489600, #      utc_end 2008-03-29 16:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63342489600, #    utc_start 2008-03-29 16:00:00 (Sat)
  63360633600, #      utc_end 2008-10-25 16:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63360633600, #    utc_start 2008-10-25 16:00:00 (Sat)
  63373939200, #      utc_end 2009-03-28 16:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63373939200, #    utc_start 2009-03-28 16:00:00 (Sat)
  63392083200, #      utc_end 2009-10-24 16:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63392083200, #    utc_start 2009-10-24 16:00:00 (Sat)
  63405388800, #      utc_end 2010-03-27 16:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63405388800, #    utc_start 2010-03-27 16:00:00 (Sat)
  63424137600, #      utc_end 2010-10-30 16:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  39600,
  1,
  'VLAST',
      ],
      [
  63424137600, #    utc_start 2010-10-30 16:00:00 (Sat)
  63436838400, #      utc_end 2011-03-26 16:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  36000,
  0,
  'VLAT',
      ],
      [
  63436838400, #    utc_start 2011-03-26 16:00:00 (Sat)
  63549932400, #      utc_end 2014-10-25 15:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  39600,
  0,
  'VLAT',
      ],
      [
  63549932400, #    utc_start 2014-10-25 15:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  36000,
  0,
  'VLAT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_VLADIVOSTOK

    $main::fatpacked{"DateTime/TimeZone/Asia/Yakutsk.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_YAKUTSK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Yakutsk;
  $DateTime::TimeZone::Asia::Yakutsk::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Yakutsk::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60556260062, #      utc_end 1919-12-14 15:21:02 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60556291200, #    local_end 1919-12-15 00:00:00 (Mon)
  31138,
  0,
  'LMT',
      ],
      [
  60556260062, #    utc_start 1919-12-14 15:21:02 (Sun)
  60888124800, #      utc_end 1930-06-20 16:00:00 (Fri)
  60556288862, #  local_start 1919-12-14 23:21:02 (Sun)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  28800,
  0,
  'YAKT',
      ],
      [
  60888124800, #    utc_start 1930-06-20 16:00:00 (Fri)
  62490582000, #      utc_end 1981-03-31 15:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  32400,
  0,
  'YAKT',
      ],
      [
  62490582000, #    utc_start 1981-03-31 15:00:00 (Tue)
  62506389600, #      utc_end 1981-09-30 14:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  36000,
  1,
  'YAKST',
      ],
      [
  62506389600, #    utc_start 1981-09-30 14:00:00 (Wed)
  62522118000, #      utc_end 1982-03-31 15:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  32400,
  0,
  'YAKT',
      ],
      [
  62522118000, #    utc_start 1982-03-31 15:00:00 (Wed)
  62537925600, #      utc_end 1982-09-30 14:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  36000,
  1,
  'YAKST',
      ],
      [
  62537925600, #    utc_start 1982-09-30 14:00:00 (Thu)
  62553654000, #      utc_end 1983-03-31 15:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  32400,
  0,
  'YAKT',
      ],
      [
  62553654000, #    utc_start 1983-03-31 15:00:00 (Thu)
  62569461600, #      utc_end 1983-09-30 14:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  36000,
  1,
  'YAKST',
      ],
      [
  62569461600, #    utc_start 1983-09-30 14:00:00 (Fri)
  62585276400, #      utc_end 1984-03-31 15:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62585276400, #    utc_start 1984-03-31 15:00:00 (Sat)
  62601008400, #      utc_end 1984-09-29 17:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62601008400, #    utc_start 1984-09-29 17:00:00 (Sat)
  62616733200, #      utc_end 1985-03-30 17:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62616733200, #    utc_start 1985-03-30 17:00:00 (Sat)
  62632458000, #      utc_end 1985-09-28 17:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62632458000, #    utc_start 1985-09-28 17:00:00 (Sat)
  62648182800, #      utc_end 1986-03-29 17:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62648182800, #    utc_start 1986-03-29 17:00:00 (Sat)
  62663907600, #      utc_end 1986-09-27 17:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62663907600, #    utc_start 1986-09-27 17:00:00 (Sat)
  62679632400, #      utc_end 1987-03-28 17:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62679632400, #    utc_start 1987-03-28 17:00:00 (Sat)
  62695357200, #      utc_end 1987-09-26 17:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62695357200, #    utc_start 1987-09-26 17:00:00 (Sat)
  62711082000, #      utc_end 1988-03-26 17:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62711082000, #    utc_start 1988-03-26 17:00:00 (Sat)
  62726806800, #      utc_end 1988-09-24 17:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62726806800, #    utc_start 1988-09-24 17:00:00 (Sat)
  62742531600, #      utc_end 1989-03-25 17:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62742531600, #    utc_start 1989-03-25 17:00:00 (Sat)
  62758256400, #      utc_end 1989-09-23 17:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62758256400, #    utc_start 1989-09-23 17:00:00 (Sat)
  62773981200, #      utc_end 1990-03-24 17:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62773981200, #    utc_start 1990-03-24 17:00:00 (Sat)
  62790310800, #      utc_end 1990-09-29 17:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62790310800, #    utc_start 1990-09-29 17:00:00 (Sat)
  62806035600, #      utc_end 1991-03-30 17:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62806035600, #    utc_start 1991-03-30 17:00:00 (Sat)
  62821764000, #      utc_end 1991-09-28 18:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  32400,
  1,
  'YAKST',
      ],
      [
  62821764000, #    utc_start 1991-09-28 18:00:00 (Sat)
  62831440800, #      utc_end 1992-01-18 18:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  28800,
  0,
  'YAKT',
      ],
      [
  62831440800, #    utc_start 1992-01-18 18:00:00 (Sat)
  62837485200, #      utc_end 1992-03-28 17:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62837485200, #    utc_start 1992-03-28 17:00:00 (Sat)
  62853210000, #      utc_end 1992-09-26 17:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62853210000, #    utc_start 1992-09-26 17:00:00 (Sat)
  62868934800, #      utc_end 1993-03-27 17:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62868934800, #    utc_start 1993-03-27 17:00:00 (Sat)
  62884659600, #      utc_end 1993-09-25 17:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62884659600, #    utc_start 1993-09-25 17:00:00 (Sat)
  62900384400, #      utc_end 1994-03-26 17:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62900384400, #    utc_start 1994-03-26 17:00:00 (Sat)
  62916109200, #      utc_end 1994-09-24 17:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62916109200, #    utc_start 1994-09-24 17:00:00 (Sat)
  62931834000, #      utc_end 1995-03-25 17:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62931834000, #    utc_start 1995-03-25 17:00:00 (Sat)
  62947558800, #      utc_end 1995-09-23 17:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62947558800, #    utc_start 1995-09-23 17:00:00 (Sat)
  62963888400, #      utc_end 1996-03-30 17:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62963888400, #    utc_start 1996-03-30 17:00:00 (Sat)
  62982032400, #      utc_end 1996-10-26 17:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  62982032400, #    utc_start 1996-10-26 17:00:00 (Sat)
  62995338000, #      utc_end 1997-03-29 17:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  62995338000, #    utc_start 1997-03-29 17:00:00 (Sat)
  63013482000, #      utc_end 1997-10-25 17:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63013482000, #    utc_start 1997-10-25 17:00:00 (Sat)
  63026787600, #      utc_end 1998-03-28 17:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63026787600, #    utc_start 1998-03-28 17:00:00 (Sat)
  63044931600, #      utc_end 1998-10-24 17:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63044931600, #    utc_start 1998-10-24 17:00:00 (Sat)
  63058237200, #      utc_end 1999-03-27 17:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63058237200, #    utc_start 1999-03-27 17:00:00 (Sat)
  63076986000, #      utc_end 1999-10-30 17:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63076986000, #    utc_start 1999-10-30 17:00:00 (Sat)
  63089686800, #      utc_end 2000-03-25 17:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63089686800, #    utc_start 2000-03-25 17:00:00 (Sat)
  63108435600, #      utc_end 2000-10-28 17:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63108435600, #    utc_start 2000-10-28 17:00:00 (Sat)
  63121136400, #      utc_end 2001-03-24 17:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63121136400, #    utc_start 2001-03-24 17:00:00 (Sat)
  63139885200, #      utc_end 2001-10-27 17:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63139885200, #    utc_start 2001-10-27 17:00:00 (Sat)
  63153190800, #      utc_end 2002-03-30 17:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63153190800, #    utc_start 2002-03-30 17:00:00 (Sat)
  63171334800, #      utc_end 2002-10-26 17:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63171334800, #    utc_start 2002-10-26 17:00:00 (Sat)
  63184640400, #      utc_end 2003-03-29 17:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63184640400, #    utc_start 2003-03-29 17:00:00 (Sat)
  63202784400, #      utc_end 2003-10-25 17:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63202784400, #    utc_start 2003-10-25 17:00:00 (Sat)
  63216090000, #      utc_end 2004-03-27 17:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63216090000, #    utc_start 2004-03-27 17:00:00 (Sat)
  63234838800, #      utc_end 2004-10-30 17:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63234838800, #    utc_start 2004-10-30 17:00:00 (Sat)
  63247539600, #      utc_end 2005-03-26 17:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63247539600, #    utc_start 2005-03-26 17:00:00 (Sat)
  63266288400, #      utc_end 2005-10-29 17:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63266288400, #    utc_start 2005-10-29 17:00:00 (Sat)
  63278989200, #      utc_end 2006-03-25 17:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63278989200, #    utc_start 2006-03-25 17:00:00 (Sat)
  63297738000, #      utc_end 2006-10-28 17:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63297738000, #    utc_start 2006-10-28 17:00:00 (Sat)
  63310438800, #      utc_end 2007-03-24 17:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63310438800, #    utc_start 2007-03-24 17:00:00 (Sat)
  63329187600, #      utc_end 2007-10-27 17:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63329187600, #    utc_start 2007-10-27 17:00:00 (Sat)
  63342493200, #      utc_end 2008-03-29 17:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63342493200, #    utc_start 2008-03-29 17:00:00 (Sat)
  63360637200, #      utc_end 2008-10-25 17:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63360637200, #    utc_start 2008-10-25 17:00:00 (Sat)
  63373942800, #      utc_end 2009-03-28 17:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63373942800, #    utc_start 2009-03-28 17:00:00 (Sat)
  63392086800, #      utc_end 2009-10-24 17:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63392086800, #    utc_start 2009-10-24 17:00:00 (Sat)
  63405392400, #      utc_end 2010-03-27 17:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63405392400, #    utc_start 2010-03-27 17:00:00 (Sat)
  63424141200, #      utc_end 2010-10-30 17:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  36000,
  1,
  'YAKST',
      ],
      [
  63424141200, #    utc_start 2010-10-30 17:00:00 (Sat)
  63436842000, #      utc_end 2011-03-26 17:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  32400,
  0,
  'YAKT',
      ],
      [
  63436842000, #    utc_start 2011-03-26 17:00:00 (Sat)
  63549936000, #      utc_end 2014-10-25 16:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  36000,
  0,
  'YAKT',
      ],
      [
  63549936000, #    utc_start 2014-10-25 16:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  32400,
  0,
  'YAKT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_YAKUTSK

    $main::fatpacked{"DateTime/TimeZone/Asia/Yekaterinburg.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_YEKATERINBURG';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Yekaterinburg;
  $DateTime::TimeZone::Asia::Yekaterinburg::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Yekaterinburg::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60447412647, #      utc_end 1916-07-02 19:57:27 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60447427200, #    local_end 1916-07-03 00:00:00 (Mon)
  14553,
  0,
  'LMT',
      ],
      [
  60447412647, #    utc_start 1916-07-02 19:57:27 (Sun)
  60543072895, #      utc_end 1919-07-15 00:14:55 (Tue)
  60447426152, #  local_start 1916-07-02 23:42:32 (Sun)
  60543086400, #    local_end 1919-07-15 04:00:00 (Tue)
  13505,
  0,
  'PMT',
      ],
      [
  60543072895, #    utc_start 1919-07-15 00:14:55 (Tue)
  60888139200, #      utc_end 1930-06-20 20:00:00 (Fri)
  60543087295, #  local_start 1919-07-15 04:14:55 (Tue)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  14400,
  0,
  'SVET',
      ],
      [
  60888139200, #    utc_start 1930-06-20 20:00:00 (Fri)
  62490596400, #      utc_end 1981-03-31 19:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  18000,
  0,
  'SVET',
      ],
      [
  62490596400, #    utc_start 1981-03-31 19:00:00 (Tue)
  62506404000, #      utc_end 1981-09-30 18:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  21600,
  1,
  'SVEST',
      ],
      [
  62506404000, #    utc_start 1981-09-30 18:00:00 (Wed)
  62522132400, #      utc_end 1982-03-31 19:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  18000,
  0,
  'SVET',
      ],
      [
  62522132400, #    utc_start 1982-03-31 19:00:00 (Wed)
  62537940000, #      utc_end 1982-09-30 18:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  21600,
  1,
  'SVEST',
      ],
      [
  62537940000, #    utc_start 1982-09-30 18:00:00 (Thu)
  62553668400, #      utc_end 1983-03-31 19:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  18000,
  0,
  'SVET',
      ],
      [
  62553668400, #    utc_start 1983-03-31 19:00:00 (Thu)
  62569476000, #      utc_end 1983-09-30 18:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  21600,
  1,
  'SVEST',
      ],
      [
  62569476000, #    utc_start 1983-09-30 18:00:00 (Fri)
  62585290800, #      utc_end 1984-03-31 19:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  18000,
  0,
  'SVET',
      ],
      [
  62585290800, #    utc_start 1984-03-31 19:00:00 (Sat)
  62601022800, #      utc_end 1984-09-29 21:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  21600,
  1,
  'SVEST',
      ],
      [
  62601022800, #    utc_start 1984-09-29 21:00:00 (Sat)
  62616747600, #      utc_end 1985-03-30 21:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  18000,
  0,
  'SVET',
      ],
      [
  62616747600, #    utc_start 1985-03-30 21:00:00 (Sat)
  62632472400, #      utc_end 1985-09-28 21:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  21600,
  1,
  'SVEST',
      ],
      [
  62632472400, #    utc_start 1985-09-28 21:00:00 (Sat)
  62648197200, #      utc_end 1986-03-29 21:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  18000,
  0,
  'SVET',
      ],
      [
  62648197200, #    utc_start 1986-03-29 21:00:00 (Sat)
  62663922000, #      utc_end 1986-09-27 21:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  21600,
  1,
  'SVEST',
      ],
      [
  62663922000, #    utc_start 1986-09-27 21:00:00 (Sat)
  62679646800, #      utc_end 1987-03-28 21:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  18000,
  0,
  'SVET',
      ],
      [
  62679646800, #    utc_start 1987-03-28 21:00:00 (Sat)
  62695371600, #      utc_end 1987-09-26 21:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  21600,
  1,
  'SVEST',
      ],
      [
  62695371600, #    utc_start 1987-09-26 21:00:00 (Sat)
  62711096400, #      utc_end 1988-03-26 21:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  18000,
  0,
  'SVET',
      ],
      [
  62711096400, #    utc_start 1988-03-26 21:00:00 (Sat)
  62726821200, #      utc_end 1988-09-24 21:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  21600,
  1,
  'SVEST',
      ],
      [
  62726821200, #    utc_start 1988-09-24 21:00:00 (Sat)
  62742546000, #      utc_end 1989-03-25 21:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  18000,
  0,
  'SVET',
      ],
      [
  62742546000, #    utc_start 1989-03-25 21:00:00 (Sat)
  62758270800, #      utc_end 1989-09-23 21:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  21600,
  1,
  'SVEST',
      ],
      [
  62758270800, #    utc_start 1989-09-23 21:00:00 (Sat)
  62773995600, #      utc_end 1990-03-24 21:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  18000,
  0,
  'SVET',
      ],
      [
  62773995600, #    utc_start 1990-03-24 21:00:00 (Sat)
  62790325200, #      utc_end 1990-09-29 21:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  21600,
  1,
  'SVEST',
      ],
      [
  62790325200, #    utc_start 1990-09-29 21:00:00 (Sat)
  62806050000, #      utc_end 1991-03-30 21:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  18000,
  0,
  'SVET',
      ],
      [
  62806050000, #    utc_start 1991-03-30 21:00:00 (Sat)
  62821778400, #      utc_end 1991-09-28 22:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  18000,
  1,
  'SVEST',
      ],
      [
  62821778400, #    utc_start 1991-09-28 22:00:00 (Sat)
  62831455200, #      utc_end 1992-01-18 22:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  14400,
  0,
  'SVET',
      ],
      [
  62831455200, #    utc_start 1992-01-18 22:00:00 (Sat)
  62837499600, #      utc_end 1992-03-28 21:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  62837499600, #    utc_start 1992-03-28 21:00:00 (Sat)
  62853224400, #      utc_end 1992-09-26 21:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  62853224400, #    utc_start 1992-09-26 21:00:00 (Sat)
  62868949200, #      utc_end 1993-03-27 21:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  62868949200, #    utc_start 1993-03-27 21:00:00 (Sat)
  62884674000, #      utc_end 1993-09-25 21:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  62884674000, #    utc_start 1993-09-25 21:00:00 (Sat)
  62900398800, #      utc_end 1994-03-26 21:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  62900398800, #    utc_start 1994-03-26 21:00:00 (Sat)
  62916123600, #      utc_end 1994-09-24 21:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  62916123600, #    utc_start 1994-09-24 21:00:00 (Sat)
  62931848400, #      utc_end 1995-03-25 21:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  62931848400, #    utc_start 1995-03-25 21:00:00 (Sat)
  62947573200, #      utc_end 1995-09-23 21:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  62947573200, #    utc_start 1995-09-23 21:00:00 (Sat)
  62963902800, #      utc_end 1996-03-30 21:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  62963902800, #    utc_start 1996-03-30 21:00:00 (Sat)
  62982046800, #      utc_end 1996-10-26 21:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  62982046800, #    utc_start 1996-10-26 21:00:00 (Sat)
  62995352400, #      utc_end 1997-03-29 21:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  62995352400, #    utc_start 1997-03-29 21:00:00 (Sat)
  63013496400, #      utc_end 1997-10-25 21:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  63013496400, #    utc_start 1997-10-25 21:00:00 (Sat)
  63026802000, #      utc_end 1998-03-28 21:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  63026802000, #    utc_start 1998-03-28 21:00:00 (Sat)
  63044946000, #      utc_end 1998-10-24 21:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  63044946000, #    utc_start 1998-10-24 21:00:00 (Sat)
  63058251600, #      utc_end 1999-03-27 21:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  63058251600, #    utc_start 1999-03-27 21:00:00 (Sat)
  63077000400, #      utc_end 1999-10-30 21:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  63077000400, #    utc_start 1999-10-30 21:00:00 (Sat)
  63089701200, #      utc_end 2000-03-25 21:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  63089701200, #    utc_start 2000-03-25 21:00:00 (Sat)
  63108450000, #      utc_end 2000-10-28 21:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  63108450000, #    utc_start 2000-10-28 21:00:00 (Sat)
  63121150800, #      utc_end 2001-03-24 21:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  63121150800, #    utc_start 2001-03-24 21:00:00 (Sat)
  63139899600, #      utc_end 2001-10-27 21:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  63139899600, #    utc_start 2001-10-27 21:00:00 (Sat)
  63153205200, #      utc_end 2002-03-30 21:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  63153205200, #    utc_start 2002-03-30 21:00:00 (Sat)
  63171349200, #      utc_end 2002-10-26 21:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  63171349200, #    utc_start 2002-10-26 21:00:00 (Sat)
  63184654800, #      utc_end 2003-03-29 21:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  63184654800, #    utc_start 2003-03-29 21:00:00 (Sat)
  63202798800, #      utc_end 2003-10-25 21:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  63202798800, #    utc_start 2003-10-25 21:00:00 (Sat)
  63216104400, #      utc_end 2004-03-27 21:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  63216104400, #    utc_start 2004-03-27 21:00:00 (Sat)
  63234853200, #      utc_end 2004-10-30 21:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  63234853200, #    utc_start 2004-10-30 21:00:00 (Sat)
  63247554000, #      utc_end 2005-03-26 21:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  63247554000, #    utc_start 2005-03-26 21:00:00 (Sat)
  63266302800, #      utc_end 2005-10-29 21:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  63266302800, #    utc_start 2005-10-29 21:00:00 (Sat)
  63279003600, #      utc_end 2006-03-25 21:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  63279003600, #    utc_start 2006-03-25 21:00:00 (Sat)
  63297752400, #      utc_end 2006-10-28 21:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  63297752400, #    utc_start 2006-10-28 21:00:00 (Sat)
  63310453200, #      utc_end 2007-03-24 21:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  63310453200, #    utc_start 2007-03-24 21:00:00 (Sat)
  63329202000, #      utc_end 2007-10-27 21:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  63329202000, #    utc_start 2007-10-27 21:00:00 (Sat)
  63342507600, #      utc_end 2008-03-29 21:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  63342507600, #    utc_start 2008-03-29 21:00:00 (Sat)
  63360651600, #      utc_end 2008-10-25 21:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  63360651600, #    utc_start 2008-10-25 21:00:00 (Sat)
  63373957200, #      utc_end 2009-03-28 21:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  63373957200, #    utc_start 2009-03-28 21:00:00 (Sat)
  63392101200, #      utc_end 2009-10-24 21:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  63392101200, #    utc_start 2009-10-24 21:00:00 (Sat)
  63405406800, #      utc_end 2010-03-27 21:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  63405406800, #    utc_start 2010-03-27 21:00:00 (Sat)
  63424155600, #      utc_end 2010-10-30 21:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  21600,
  1,
  'YEKST',
      ],
      [
  63424155600, #    utc_start 2010-10-30 21:00:00 (Sat)
  63436856400, #      utc_end 2011-03-26 21:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  18000,
  0,
  'YEKT',
      ],
      [
  63436856400, #    utc_start 2011-03-26 21:00:00 (Sat)
  63549950400, #      utc_end 2014-10-25 20:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  21600,
  0,
  'YEKT',
      ],
      [
  63549950400, #    utc_start 2014-10-25 20:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  18000,
  0,
  'YEKT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_YEKATERINBURG

    $main::fatpacked{"DateTime/TimeZone/Asia/Yerevan.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ASIA_YEREVAN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Asia::Yerevan;
  $DateTime::TimeZone::Asia::Yerevan::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Asia::Yerevan::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694520520, #      utc_end 1924-05-01 21:02:00 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  10680,
  0,
  'LMT',
      ],
      [
  60694520520, #    utc_start 1924-05-01 21:02:00 (Thu)
  61730542800, #      utc_end 1957-02-28 21:00:00 (Thu)
  60694531320, #  local_start 1924-05-02 00:02:00 (Fri)
  61730553600, #    local_end 1957-03-01 00:00:00 (Fri)
  10800,
  0,
  'YERT',
      ],
      [
  61730542800, #    utc_start 1957-02-28 21:00:00 (Thu)
  62490600000, #      utc_end 1981-03-31 20:00:00 (Tue)
  61730557200, #  local_start 1957-03-01 01:00:00 (Fri)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  14400,
  0,
  'YERT',
      ],
      [
  62490600000, #    utc_start 1981-03-31 20:00:00 (Tue)
  62506407600, #      utc_end 1981-09-30 19:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  18000,
  1,
  'YERST',
      ],
      [
  62506407600, #    utc_start 1981-09-30 19:00:00 (Wed)
  62522136000, #      utc_end 1982-03-31 20:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  14400,
  0,
  'YERT',
      ],
      [
  62522136000, #    utc_start 1982-03-31 20:00:00 (Wed)
  62537943600, #      utc_end 1982-09-30 19:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  18000,
  1,
  'YERST',
      ],
      [
  62537943600, #    utc_start 1982-09-30 19:00:00 (Thu)
  62553672000, #      utc_end 1983-03-31 20:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  14400,
  0,
  'YERT',
      ],
      [
  62553672000, #    utc_start 1983-03-31 20:00:00 (Thu)
  62569479600, #      utc_end 1983-09-30 19:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  18000,
  1,
  'YERST',
      ],
      [
  62569479600, #    utc_start 1983-09-30 19:00:00 (Fri)
  62585294400, #      utc_end 1984-03-31 20:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  14400,
  0,
  'YERT',
      ],
      [
  62585294400, #    utc_start 1984-03-31 20:00:00 (Sat)
  62601026400, #      utc_end 1984-09-29 22:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  18000,
  1,
  'YERST',
      ],
      [
  62601026400, #    utc_start 1984-09-29 22:00:00 (Sat)
  62616751200, #      utc_end 1985-03-30 22:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  14400,
  0,
  'YERT',
      ],
      [
  62616751200, #    utc_start 1985-03-30 22:00:00 (Sat)
  62632476000, #      utc_end 1985-09-28 22:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  18000,
  1,
  'YERST',
      ],
      [
  62632476000, #    utc_start 1985-09-28 22:00:00 (Sat)
  62648200800, #      utc_end 1986-03-29 22:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  14400,
  0,
  'YERT',
      ],
      [
  62648200800, #    utc_start 1986-03-29 22:00:00 (Sat)
  62663925600, #      utc_end 1986-09-27 22:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  18000,
  1,
  'YERST',
      ],
      [
  62663925600, #    utc_start 1986-09-27 22:00:00 (Sat)
  62679650400, #      utc_end 1987-03-28 22:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  14400,
  0,
  'YERT',
      ],
      [
  62679650400, #    utc_start 1987-03-28 22:00:00 (Sat)
  62695375200, #      utc_end 1987-09-26 22:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  18000,
  1,
  'YERST',
      ],
      [
  62695375200, #    utc_start 1987-09-26 22:00:00 (Sat)
  62711100000, #      utc_end 1988-03-26 22:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  14400,
  0,
  'YERT',
      ],
      [
  62711100000, #    utc_start 1988-03-26 22:00:00 (Sat)
  62726824800, #      utc_end 1988-09-24 22:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  18000,
  1,
  'YERST',
      ],
      [
  62726824800, #    utc_start 1988-09-24 22:00:00 (Sat)
  62742549600, #      utc_end 1989-03-25 22:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  14400,
  0,
  'YERT',
      ],
      [
  62742549600, #    utc_start 1989-03-25 22:00:00 (Sat)
  62758274400, #      utc_end 1989-09-23 22:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  18000,
  1,
  'YERST',
      ],
      [
  62758274400, #    utc_start 1989-09-23 22:00:00 (Sat)
  62773999200, #      utc_end 1990-03-24 22:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  14400,
  0,
  'YERT',
      ],
      [
  62773999200, #    utc_start 1990-03-24 22:00:00 (Sat)
  62790328800, #      utc_end 1990-09-29 22:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  18000,
  1,
  'YERST',
      ],
      [
  62790328800, #    utc_start 1990-09-29 22:00:00 (Sat)
  62806053600, #      utc_end 1991-03-30 22:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  14400,
  0,
  'YERT',
      ],
      [
  62806053600, #    utc_start 1991-03-30 22:00:00 (Sat)
  62821252800, #      utc_end 1991-09-22 20:00:00 (Sun)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821267200, #    local_end 1991-09-23 00:00:00 (Mon)
  14400,
  1,
  'YERST',
      ],
      [
  62821252800, #    utc_start 1991-09-22 20:00:00 (Sun)
  62821782000, #      utc_end 1991-09-28 23:00:00 (Sat)
  62821267200, #  local_start 1991-09-23 00:00:00 (Mon)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  14400,
  1,
  'AMST',
      ],
      [
  62821782000, #    utc_start 1991-09-28 23:00:00 (Sat)
  62837506800, #      utc_end 1992-03-28 23:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  10800,
  0,
  'AMT',
      ],
      [
  62837506800, #    utc_start 1992-03-28 23:00:00 (Sat)
  62853231600, #      utc_end 1992-09-26 23:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  14400,
  1,
  'AMST',
      ],
      [
  62853231600, #    utc_start 1992-09-26 23:00:00 (Sat)
  62868956400, #      utc_end 1993-03-27 23:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  10800,
  0,
  'AMT',
      ],
      [
  62868956400, #    utc_start 1993-03-27 23:00:00 (Sat)
  62884681200, #      utc_end 1993-09-25 23:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  14400,
  1,
  'AMST',
      ],
      [
  62884681200, #    utc_start 1993-09-25 23:00:00 (Sat)
  62900406000, #      utc_end 1994-03-26 23:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  10800,
  0,
  'AMT',
      ],
      [
  62900406000, #    utc_start 1994-03-26 23:00:00 (Sat)
  62916130800, #      utc_end 1994-09-24 23:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  14400,
  1,
  'AMST',
      ],
      [
  62916130800, #    utc_start 1994-09-24 23:00:00 (Sat)
  62931855600, #      utc_end 1995-03-25 23:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  10800,
  0,
  'AMT',
      ],
      [
  62931855600, #    utc_start 1995-03-25 23:00:00 (Sat)
  62947580400, #      utc_end 1995-09-23 23:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  14400,
  1,
  'AMST',
      ],
      [
  62947580400, #    utc_start 1995-09-23 23:00:00 (Sat)
  62987745600, #      utc_end 1996-12-31 20:00:00 (Tue)
  62947594800, #  local_start 1995-09-24 03:00:00 (Sun)
  62987760000, #    local_end 1997-01-01 00:00:00 (Wed)
  14400,
  0,
  'AMT',
      ],
      [
  62987745600, #    utc_start 1996-12-31 20:00:00 (Tue)
  62995356000, #      utc_end 1997-03-29 22:00:00 (Sat)
  62987760000, #  local_start 1997-01-01 00:00:00 (Wed)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  14400,
  0,
  'AMT',
      ],
      [
  62995356000, #    utc_start 1997-03-29 22:00:00 (Sat)
  63013500000, #      utc_end 1997-10-25 22:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  18000,
  1,
  'AMST',
      ],
      [
  63013500000, #    utc_start 1997-10-25 22:00:00 (Sat)
  63026805600, #      utc_end 1998-03-28 22:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  14400,
  0,
  'AMT',
      ],
      [
  63026805600, #    utc_start 1998-03-28 22:00:00 (Sat)
  63044949600, #      utc_end 1998-10-24 22:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  18000,
  1,
  'AMST',
      ],
      [
  63044949600, #    utc_start 1998-10-24 22:00:00 (Sat)
  63058255200, #      utc_end 1999-03-27 22:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  14400,
  0,
  'AMT',
      ],
      [
  63058255200, #    utc_start 1999-03-27 22:00:00 (Sat)
  63077004000, #      utc_end 1999-10-30 22:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  18000,
  1,
  'AMST',
      ],
      [
  63077004000, #    utc_start 1999-10-30 22:00:00 (Sat)
  63089704800, #      utc_end 2000-03-25 22:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  14400,
  0,
  'AMT',
      ],
      [
  63089704800, #    utc_start 2000-03-25 22:00:00 (Sat)
  63108453600, #      utc_end 2000-10-28 22:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  18000,
  1,
  'AMST',
      ],
      [
  63108453600, #    utc_start 2000-10-28 22:00:00 (Sat)
  63121154400, #      utc_end 2001-03-24 22:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  14400,
  0,
  'AMT',
      ],
      [
  63121154400, #    utc_start 2001-03-24 22:00:00 (Sat)
  63139903200, #      utc_end 2001-10-27 22:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  18000,
  1,
  'AMST',
      ],
      [
  63139903200, #    utc_start 2001-10-27 22:00:00 (Sat)
  63153208800, #      utc_end 2002-03-30 22:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  14400,
  0,
  'AMT',
      ],
      [
  63153208800, #    utc_start 2002-03-30 22:00:00 (Sat)
  63171352800, #      utc_end 2002-10-26 22:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  18000,
  1,
  'AMST',
      ],
      [
  63171352800, #    utc_start 2002-10-26 22:00:00 (Sat)
  63184658400, #      utc_end 2003-03-29 22:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  14400,
  0,
  'AMT',
      ],
      [
  63184658400, #    utc_start 2003-03-29 22:00:00 (Sat)
  63202802400, #      utc_end 2003-10-25 22:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  18000,
  1,
  'AMST',
      ],
      [
  63202802400, #    utc_start 2003-10-25 22:00:00 (Sat)
  63216108000, #      utc_end 2004-03-27 22:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  14400,
  0,
  'AMT',
      ],
      [
  63216108000, #    utc_start 2004-03-27 22:00:00 (Sat)
  63234856800, #      utc_end 2004-10-30 22:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  18000,
  1,
  'AMST',
      ],
      [
  63234856800, #    utc_start 2004-10-30 22:00:00 (Sat)
  63247557600, #      utc_end 2005-03-26 22:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  14400,
  0,
  'AMT',
      ],
      [
  63247557600, #    utc_start 2005-03-26 22:00:00 (Sat)
  63266306400, #      utc_end 2005-10-29 22:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  18000,
  1,
  'AMST',
      ],
      [
  63266306400, #    utc_start 2005-10-29 22:00:00 (Sat)
  63279007200, #      utc_end 2006-03-25 22:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  14400,
  0,
  'AMT',
      ],
      [
  63279007200, #    utc_start 2006-03-25 22:00:00 (Sat)
  63297756000, #      utc_end 2006-10-28 22:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  18000,
  1,
  'AMST',
      ],
      [
  63297756000, #    utc_start 2006-10-28 22:00:00 (Sat)
  63310456800, #      utc_end 2007-03-24 22:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  14400,
  0,
  'AMT',
      ],
      [
  63310456800, #    utc_start 2007-03-24 22:00:00 (Sat)
  63329205600, #      utc_end 2007-10-27 22:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  18000,
  1,
  'AMST',
      ],
      [
  63329205600, #    utc_start 2007-10-27 22:00:00 (Sat)
  63342511200, #      utc_end 2008-03-29 22:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  14400,
  0,
  'AMT',
      ],
      [
  63342511200, #    utc_start 2008-03-29 22:00:00 (Sat)
  63360655200, #      utc_end 2008-10-25 22:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  18000,
  1,
  'AMST',
      ],
      [
  63360655200, #    utc_start 2008-10-25 22:00:00 (Sat)
  63373960800, #      utc_end 2009-03-28 22:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  14400,
  0,
  'AMT',
      ],
      [
  63373960800, #    utc_start 2009-03-28 22:00:00 (Sat)
  63392104800, #      utc_end 2009-10-24 22:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  18000,
  1,
  'AMST',
      ],
      [
  63392104800, #    utc_start 2009-10-24 22:00:00 (Sat)
  63405410400, #      utc_end 2010-03-27 22:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  14400,
  0,
  'AMT',
      ],
      [
  63405410400, #    utc_start 2010-03-27 22:00:00 (Sat)
  63424159200, #      utc_end 2010-10-30 22:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  18000,
  1,
  'AMST',
      ],
      [
  63424159200, #    utc_start 2010-10-30 22:00:00 (Sat)
  63436860000, #      utc_end 2011-03-26 22:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  14400,
  0,
  'AMT',
      ],
      [
  63436860000, #    utc_start 2011-03-26 22:00:00 (Sat)
  63455608800, #      utc_end 2011-10-29 22:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  18000,
  1,
  'AMST',
      ],
      [
  63455608800, #    utc_start 2011-10-29 22:00:00 (Sat)
  63464414400, #      utc_end 2012-02-08 20:00:00 (Wed)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63464428800, #    local_end 2012-02-09 00:00:00 (Thu)
  14400,
  0,
  'AMT',
      ],
      [
  63464414400, #    utc_start 2012-02-08 20:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #      utc_end
  63464428800, #  local_start 2012-02-09 00:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  14400,
  0,
  'AMT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {31}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ASIA_YEREVAN

    $main::fatpacked{"DateTime/TimeZone/Atlantic/Azores.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ATLANTIC_AZORES';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Atlantic::Azores;
  $DateTime::TimeZone::Atlantic::Azores::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Atlantic::Azores::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59421778960, #      utc_end 1884-01-01 01:42:40 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59421772800, #    local_end 1884-01-01 00:00:00 (Tue)
  -6160,
  0,
  'LMT',
      ],
      [
  59421778960, #    utc_start 1884-01-01 01:42:40 (Tue)
  60305306072, #      utc_end 1912-01-01 01:54:32 (Mon)
  59421772088, #  local_start 1883-12-31 23:48:08 (Mon)
  60305299200, #    local_end 1912-01-01 00:00:00 (Mon)
  -6872,
  0,
  'HMT',
      ],
      [
  60305306072, #    utc_start 1912-01-01 01:54:32 (Mon)
  60446134800, #      utc_end 1916-06-18 01:00:00 (Sun)
  60305298872, #  local_start 1911-12-31 23:54:32 (Sun)
  60446127600, #    local_end 1916-06-17 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  60446134800, #    utc_start 1916-06-18 01:00:00 (Sun)
  60457888800, #      utc_end 1916-11-01 02:00:00 (Wed)
  60446131200, #  local_start 1916-06-18 00:00:00 (Sun)
  60457885200, #    local_end 1916-11-01 01:00:00 (Wed)
  -3600,
  1,
  'AZOST',
      ],
      [
  60457888800, #    utc_start 1916-11-01 02:00:00 (Wed)
  60468253200, #      utc_end 1917-03-01 01:00:00 (Thu)
  60457881600, #  local_start 1916-11-01 00:00:00 (Wed)
  60468246000, #    local_end 1917-02-28 23:00:00 (Wed)
  -7200,
  0,
  'AZOT',
      ],
      [
  60468253200, #    utc_start 1917-03-01 01:00:00 (Thu)
  60487952400, #      utc_end 1917-10-15 01:00:00 (Mon)
  60468249600, #  local_start 1917-03-01 00:00:00 (Thu)
  60487948800, #    local_end 1917-10-15 00:00:00 (Mon)
  -3600,
  1,
  'AZOST',
      ],
      [
  60487952400, #    utc_start 1917-10-15 01:00:00 (Mon)
  60499875600, #      utc_end 1918-03-02 01:00:00 (Sat)
  60487945200, #  local_start 1917-10-14 23:00:00 (Sun)
  60499868400, #    local_end 1918-03-01 23:00:00 (Fri)
  -7200,
  0,
  'AZOT',
      ],
      [
  60499875600, #    utc_start 1918-03-02 01:00:00 (Sat)
  60519488400, #      utc_end 1918-10-15 01:00:00 (Tue)
  60499872000, #  local_start 1918-03-02 00:00:00 (Sat)
  60519484800, #    local_end 1918-10-15 00:00:00 (Tue)
  -3600,
  1,
  'AZOST',
      ],
      [
  60519488400, #    utc_start 1918-10-15 01:00:00 (Tue)
  60531325200, #      utc_end 1919-03-01 01:00:00 (Sat)
  60519481200, #  local_start 1918-10-14 23:00:00 (Mon)
  60531318000, #    local_end 1919-02-28 23:00:00 (Fri)
  -7200,
  0,
  'AZOT',
      ],
      [
  60531325200, #    utc_start 1919-03-01 01:00:00 (Sat)
  60551024400, #      utc_end 1919-10-15 01:00:00 (Wed)
  60531321600, #  local_start 1919-03-01 00:00:00 (Sat)
  60551020800, #    local_end 1919-10-15 00:00:00 (Wed)
  -3600,
  1,
  'AZOST',
      ],
      [
  60551024400, #    utc_start 1919-10-15 01:00:00 (Wed)
  60562947600, #      utc_end 1920-03-01 01:00:00 (Mon)
  60551017200, #  local_start 1919-10-14 23:00:00 (Tue)
  60562940400, #    local_end 1920-02-29 23:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  60562947600, #    utc_start 1920-03-01 01:00:00 (Mon)
  60582646800, #      utc_end 1920-10-15 01:00:00 (Fri)
  60562944000, #  local_start 1920-03-01 00:00:00 (Mon)
  60582643200, #    local_end 1920-10-15 00:00:00 (Fri)
  -3600,
  1,
  'AZOST',
      ],
      [
  60582646800, #    utc_start 1920-10-15 01:00:00 (Fri)
  60594483600, #      utc_end 1921-03-01 01:00:00 (Tue)
  60582639600, #  local_start 1920-10-14 23:00:00 (Thu)
  60594476400, #    local_end 1921-02-28 23:00:00 (Mon)
  -7200,
  0,
  'AZOT',
      ],
      [
  60594483600, #    utc_start 1921-03-01 01:00:00 (Tue)
  60614182800, #      utc_end 1921-10-15 01:00:00 (Sat)
  60594480000, #  local_start 1921-03-01 00:00:00 (Tue)
  60614179200, #    local_end 1921-10-15 00:00:00 (Sat)
  -3600,
  1,
  'AZOST',
      ],
      [
  60614182800, #    utc_start 1921-10-15 01:00:00 (Sat)
  60693238800, #      utc_end 1924-04-17 01:00:00 (Thu)
  60614175600, #  local_start 1921-10-14 23:00:00 (Fri)
  60693231600, #    local_end 1924-04-16 23:00:00 (Wed)
  -7200,
  0,
  'AZOT',
      ],
      [
  60693238800, #    utc_start 1924-04-17 01:00:00 (Thu)
  60708877200, #      utc_end 1924-10-15 01:00:00 (Wed)
  60693235200, #  local_start 1924-04-17 00:00:00 (Thu)
  60708873600, #    local_end 1924-10-15 00:00:00 (Wed)
  -3600,
  1,
  'AZOST',
      ],
      [
  60708877200, #    utc_start 1924-10-15 01:00:00 (Wed)
  60756397200, #      utc_end 1926-04-18 01:00:00 (Sun)
  60708870000, #  local_start 1924-10-14 23:00:00 (Tue)
  60756390000, #    local_end 1926-04-17 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  60756397200, #    utc_start 1926-04-18 01:00:00 (Sun)
  60770912400, #      utc_end 1926-10-03 01:00:00 (Sun)
  60756393600, #  local_start 1926-04-18 00:00:00 (Sun)
  60770908800, #    local_end 1926-10-03 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  60770912400, #    utc_start 1926-10-03 01:00:00 (Sun)
  60787242000, #      utc_end 1927-04-10 01:00:00 (Sun)
  60770905200, #  local_start 1926-10-02 23:00:00 (Sat)
  60787234800, #    local_end 1927-04-09 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  60787242000, #    utc_start 1927-04-10 01:00:00 (Sun)
  60802362000, #      utc_end 1927-10-02 01:00:00 (Sun)
  60787238400, #  local_start 1927-04-10 00:00:00 (Sun)
  60802358400, #    local_end 1927-10-02 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  60802362000, #    utc_start 1927-10-02 01:00:00 (Sun)
  60819296400, #      utc_end 1928-04-15 01:00:00 (Sun)
  60802354800, #  local_start 1927-10-01 23:00:00 (Sat)
  60819289200, #    local_end 1928-04-14 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  60819296400, #    utc_start 1928-04-15 01:00:00 (Sun)
  60834416400, #      utc_end 1928-10-07 01:00:00 (Sun)
  60819292800, #  local_start 1928-04-15 00:00:00 (Sun)
  60834412800, #    local_end 1928-10-07 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  60834416400, #    utc_start 1928-10-07 01:00:00 (Sun)
  60851350800, #      utc_end 1929-04-21 01:00:00 (Sun)
  60834409200, #  local_start 1928-10-06 23:00:00 (Sat)
  60851343600, #    local_end 1929-04-20 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  60851350800, #    utc_start 1929-04-21 01:00:00 (Sun)
  60865866000, #      utc_end 1929-10-06 01:00:00 (Sun)
  60851347200, #  local_start 1929-04-21 00:00:00 (Sun)
  60865862400, #    local_end 1929-10-06 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  60865866000, #    utc_start 1929-10-06 01:00:00 (Sun)
  60914250000, #      utc_end 1931-04-19 01:00:00 (Sun)
  60865858800, #  local_start 1929-10-05 23:00:00 (Sat)
  60914242800, #    local_end 1931-04-18 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  60914250000, #    utc_start 1931-04-19 01:00:00 (Sun)
  60928765200, #      utc_end 1931-10-04 01:00:00 (Sun)
  60914246400, #  local_start 1931-04-19 00:00:00 (Sun)
  60928761600, #    local_end 1931-10-04 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  60928765200, #    utc_start 1931-10-04 01:00:00 (Sun)
  60944490000, #      utc_end 1932-04-03 01:00:00 (Sun)
  60928758000, #  local_start 1931-10-03 23:00:00 (Sat)
  60944482800, #    local_end 1932-04-02 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  60944490000, #    utc_start 1932-04-03 01:00:00 (Sun)
  60960214800, #      utc_end 1932-10-02 01:00:00 (Sun)
  60944486400, #  local_start 1932-04-03 00:00:00 (Sun)
  60960211200, #    local_end 1932-10-02 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  60960214800, #    utc_start 1932-10-02 01:00:00 (Sun)
  61007994000, #      utc_end 1934-04-08 01:00:00 (Sun)
  60960207600, #  local_start 1932-10-01 23:00:00 (Sat)
  61007986800, #    local_end 1934-04-07 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  61007994000, #    utc_start 1934-04-08 01:00:00 (Sun)
  61023718800, #      utc_end 1934-10-07 01:00:00 (Sun)
  61007990400, #  local_start 1934-04-08 00:00:00 (Sun)
  61023715200, #    local_end 1934-10-07 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61023718800, #    utc_start 1934-10-07 01:00:00 (Sun)
  61038838800, #      utc_end 1935-03-31 01:00:00 (Sun)
  61023711600, #  local_start 1934-10-06 23:00:00 (Sat)
  61038831600, #    local_end 1935-03-30 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  61038838800, #    utc_start 1935-03-31 01:00:00 (Sun)
  61055168400, #      utc_end 1935-10-06 01:00:00 (Sun)
  61038835200, #  local_start 1935-03-31 00:00:00 (Sun)
  61055164800, #    local_end 1935-10-06 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61055168400, #    utc_start 1935-10-06 01:00:00 (Sun)
  61072102800, #      utc_end 1936-04-19 01:00:00 (Sun)
  61055161200, #  local_start 1935-10-05 23:00:00 (Sat)
  61072095600, #    local_end 1936-04-18 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  61072102800, #    utc_start 1936-04-19 01:00:00 (Sun)
  61086618000, #      utc_end 1936-10-04 01:00:00 (Sun)
  61072099200, #  local_start 1936-04-19 00:00:00 (Sun)
  61086614400, #    local_end 1936-10-04 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61086618000, #    utc_start 1936-10-04 01:00:00 (Sun)
  61102342800, #      utc_end 1937-04-04 01:00:00 (Sun)
  61086610800, #  local_start 1936-10-03 23:00:00 (Sat)
  61102335600, #    local_end 1937-04-03 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  61102342800, #    utc_start 1937-04-04 01:00:00 (Sun)
  61118067600, #      utc_end 1937-10-03 01:00:00 (Sun)
  61102339200, #  local_start 1937-04-04 00:00:00 (Sun)
  61118064000, #    local_end 1937-10-03 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61118067600, #    utc_start 1937-10-03 01:00:00 (Sun)
  61133187600, #      utc_end 1938-03-27 01:00:00 (Sun)
  61118060400, #  local_start 1937-10-02 23:00:00 (Sat)
  61133180400, #    local_end 1938-03-26 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  61133187600, #    utc_start 1938-03-27 01:00:00 (Sun)
  61149517200, #      utc_end 1938-10-02 01:00:00 (Sun)
  61133184000, #  local_start 1938-03-27 00:00:00 (Sun)
  61149513600, #    local_end 1938-10-02 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61149517200, #    utc_start 1938-10-02 01:00:00 (Sun)
  61166451600, #      utc_end 1939-04-16 01:00:00 (Sun)
  61149510000, #  local_start 1938-10-01 23:00:00 (Sat)
  61166444400, #    local_end 1939-04-15 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  61166451600, #    utc_start 1939-04-16 01:00:00 (Sun)
  61185200400, #      utc_end 1939-11-19 01:00:00 (Sun)
  61166448000, #  local_start 1939-04-16 00:00:00 (Sun)
  61185196800, #    local_end 1939-11-19 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61185200400, #    utc_start 1939-11-19 01:00:00 (Sun)
  61193667600, #      utc_end 1940-02-25 01:00:00 (Sun)
  61185193200, #  local_start 1939-11-18 23:00:00 (Sat)
  61193660400, #    local_end 1940-02-24 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  61193667600, #    utc_start 1940-02-25 01:00:00 (Sun)
  61213021200, #      utc_end 1940-10-06 01:00:00 (Sun)
  61193664000, #  local_start 1940-02-25 00:00:00 (Sun)
  61213017600, #    local_end 1940-10-06 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61213021200, #    utc_start 1940-10-06 01:00:00 (Sun)
  61228746000, #      utc_end 1941-04-06 01:00:00 (Sun)
  61213014000, #  local_start 1940-10-05 23:00:00 (Sat)
  61228738800, #    local_end 1941-04-05 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  61228746000, #    utc_start 1941-04-06 01:00:00 (Sun)
  61244557200, #      utc_end 1941-10-06 01:00:00 (Mon)
  61228742400, #  local_start 1941-04-06 00:00:00 (Sun)
  61244553600, #    local_end 1941-10-06 00:00:00 (Mon)
  -3600,
  1,
  'AZOST',
      ],
      [
  61244557200, #    utc_start 1941-10-06 01:00:00 (Mon)
  61258381200, #      utc_end 1942-03-15 01:00:00 (Sun)
  61244550000, #  local_start 1941-10-05 23:00:00 (Sun)
  61258374000, #    local_end 1942-03-14 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  61258381200, #    utc_start 1942-03-15 01:00:00 (Sun)
  61262006400, #      utc_end 1942-04-26 00:00:00 (Sun)
  61258377600, #  local_start 1942-03-15 00:00:00 (Sun)
  61262002800, #    local_end 1942-04-25 23:00:00 (Sat)
  -3600,
  1,
  'AZOST',
      ],
      [
  61262006400, #    utc_start 1942-04-26 00:00:00 (Sun)
  61271683200, #      utc_end 1942-08-16 00:00:00 (Sun)
  61262006400, #  local_start 1942-04-26 00:00:00 (Sun)
  61271683200, #    local_end 1942-08-16 00:00:00 (Sun)
  0,
  1,
  'AZOMT',
      ],
      [
  61271683200, #    utc_start 1942-08-16 00:00:00 (Sun)
  61277734800, #      utc_end 1942-10-25 01:00:00 (Sun)
  61271679600, #  local_start 1942-08-15 23:00:00 (Sat)
  61277731200, #    local_end 1942-10-25 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61277734800, #    utc_start 1942-10-25 01:00:00 (Sun)
  61289830800, #      utc_end 1943-03-14 01:00:00 (Sun)
  61277727600, #  local_start 1942-10-24 23:00:00 (Sat)
  61289823600, #    local_end 1943-03-13 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  61289830800, #    utc_start 1943-03-14 01:00:00 (Sun)
  61292851200, #      utc_end 1943-04-18 00:00:00 (Sun)
  61289827200, #  local_start 1943-03-14 00:00:00 (Sun)
  61292847600, #    local_end 1943-04-17 23:00:00 (Sat)
  -3600,
  1,
  'AZOST',
      ],
      [
  61292851200, #    utc_start 1943-04-18 00:00:00 (Sun)
  61304342400, #      utc_end 1943-08-29 00:00:00 (Sun)
  61292851200, #  local_start 1943-04-18 00:00:00 (Sun)
  61304342400, #    local_end 1943-08-29 00:00:00 (Sun)
  0,
  1,
  'AZOMT',
      ],
      [
  61304342400, #    utc_start 1943-08-29 00:00:00 (Sun)
  61309789200, #      utc_end 1943-10-31 01:00:00 (Sun)
  61304338800, #  local_start 1943-08-28 23:00:00 (Sat)
  61309785600, #    local_end 1943-10-31 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61309789200, #    utc_start 1943-10-31 01:00:00 (Sun)
  61321280400, #      utc_end 1944-03-12 01:00:00 (Sun)
  61309782000, #  local_start 1943-10-30 23:00:00 (Sat)
  61321273200, #    local_end 1944-03-11 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  61321280400, #    utc_start 1944-03-12 01:00:00 (Sun)
  61324905600, #      utc_end 1944-04-23 00:00:00 (Sun)
  61321276800, #  local_start 1944-03-12 00:00:00 (Sun)
  61324902000, #    local_end 1944-04-22 23:00:00 (Sat)
  -3600,
  1,
  'AZOST',
      ],
      [
  61324905600, #    utc_start 1944-04-23 00:00:00 (Sun)
  61335792000, #      utc_end 1944-08-27 00:00:00 (Sun)
  61324905600, #  local_start 1944-04-23 00:00:00 (Sun)
  61335792000, #    local_end 1944-08-27 00:00:00 (Sun)
  0,
  1,
  'AZOMT',
      ],
      [
  61335792000, #    utc_start 1944-08-27 00:00:00 (Sun)
  61341238800, #      utc_end 1944-10-29 01:00:00 (Sun)
  61335788400, #  local_start 1944-08-26 23:00:00 (Sat)
  61341235200, #    local_end 1944-10-29 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61341238800, #    utc_start 1944-10-29 01:00:00 (Sun)
  61352730000, #      utc_end 1945-03-11 01:00:00 (Sun)
  61341231600, #  local_start 1944-10-28 23:00:00 (Sat)
  61352722800, #    local_end 1945-03-10 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  61352730000, #    utc_start 1945-03-11 01:00:00 (Sun)
  61356355200, #      utc_end 1945-04-22 00:00:00 (Sun)
  61352726400, #  local_start 1945-03-11 00:00:00 (Sun)
  61356351600, #    local_end 1945-04-21 23:00:00 (Sat)
  -3600,
  1,
  'AZOST',
      ],
      [
  61356355200, #    utc_start 1945-04-22 00:00:00 (Sun)
  61367241600, #      utc_end 1945-08-26 00:00:00 (Sun)
  61356355200, #  local_start 1945-04-22 00:00:00 (Sun)
  61367241600, #    local_end 1945-08-26 00:00:00 (Sun)
  0,
  1,
  'AZOMT',
      ],
      [
  61367241600, #    utc_start 1945-08-26 00:00:00 (Sun)
  61372688400, #      utc_end 1945-10-28 01:00:00 (Sun)
  61367238000, #  local_start 1945-08-25 23:00:00 (Sat)
  61372684800, #    local_end 1945-10-28 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61372688400, #    utc_start 1945-10-28 01:00:00 (Sun)
  61386598800, #      utc_end 1946-04-07 01:00:00 (Sun)
  61372681200, #  local_start 1945-10-27 23:00:00 (Sat)
  61386591600, #    local_end 1946-04-06 23:00:00 (Sat)
  -7200,
  0,
  'AZOT',
      ],
      [
  61386598800, #    utc_start 1946-04-07 01:00:00 (Sun)
  61402323600, #      utc_end 1946-10-06 01:00:00 (Sun)
  61386595200, #  local_start 1946-04-07 00:00:00 (Sun)
  61402320000, #    local_end 1946-10-06 00:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61402323600, #    utc_start 1946-10-06 01:00:00 (Sun)
  61418059200, #      utc_end 1947-04-06 04:00:00 (Sun)
  61402316400, #  local_start 1946-10-05 23:00:00 (Sat)
  61418052000, #    local_end 1947-04-06 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61418059200, #    utc_start 1947-04-06 04:00:00 (Sun)
  61433784000, #      utc_end 1947-10-05 04:00:00 (Sun)
  61418055600, #  local_start 1947-04-06 03:00:00 (Sun)
  61433780400, #    local_end 1947-10-05 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61433784000, #    utc_start 1947-10-05 04:00:00 (Sun)
  61449508800, #      utc_end 1948-04-04 04:00:00 (Sun)
  61433776800, #  local_start 1947-10-05 02:00:00 (Sun)
  61449501600, #    local_end 1948-04-04 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61449508800, #    utc_start 1948-04-04 04:00:00 (Sun)
  61465233600, #      utc_end 1948-10-03 04:00:00 (Sun)
  61449505200, #  local_start 1948-04-04 03:00:00 (Sun)
  61465230000, #    local_end 1948-10-03 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61465233600, #    utc_start 1948-10-03 04:00:00 (Sun)
  61480958400, #      utc_end 1949-04-03 04:00:00 (Sun)
  61465226400, #  local_start 1948-10-03 02:00:00 (Sun)
  61480951200, #    local_end 1949-04-03 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61480958400, #    utc_start 1949-04-03 04:00:00 (Sun)
  61496683200, #      utc_end 1949-10-02 04:00:00 (Sun)
  61480954800, #  local_start 1949-04-03 03:00:00 (Sun)
  61496679600, #    local_end 1949-10-02 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61496683200, #    utc_start 1949-10-02 04:00:00 (Sun)
  61543857600, #      utc_end 1951-04-01 04:00:00 (Sun)
  61496676000, #  local_start 1949-10-02 02:00:00 (Sun)
  61543850400, #    local_end 1951-04-01 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61543857600, #    utc_start 1951-04-01 04:00:00 (Sun)
  61560187200, #      utc_end 1951-10-07 04:00:00 (Sun)
  61543854000, #  local_start 1951-04-01 03:00:00 (Sun)
  61560183600, #    local_end 1951-10-07 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61560187200, #    utc_start 1951-10-07 04:00:00 (Sun)
  61575912000, #      utc_end 1952-04-06 04:00:00 (Sun)
  61560180000, #  local_start 1951-10-07 02:00:00 (Sun)
  61575904800, #    local_end 1952-04-06 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61575912000, #    utc_start 1952-04-06 04:00:00 (Sun)
  61591636800, #      utc_end 1952-10-05 04:00:00 (Sun)
  61575908400, #  local_start 1952-04-06 03:00:00 (Sun)
  61591633200, #    local_end 1952-10-05 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61591636800, #    utc_start 1952-10-05 04:00:00 (Sun)
  61607361600, #      utc_end 1953-04-05 04:00:00 (Sun)
  61591629600, #  local_start 1952-10-05 02:00:00 (Sun)
  61607354400, #    local_end 1953-04-05 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61607361600, #    utc_start 1953-04-05 04:00:00 (Sun)
  61623086400, #      utc_end 1953-10-04 04:00:00 (Sun)
  61607358000, #  local_start 1953-04-05 03:00:00 (Sun)
  61623082800, #    local_end 1953-10-04 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61623086400, #    utc_start 1953-10-04 04:00:00 (Sun)
  61638811200, #      utc_end 1954-04-04 04:00:00 (Sun)
  61623079200, #  local_start 1953-10-04 02:00:00 (Sun)
  61638804000, #    local_end 1954-04-04 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61638811200, #    utc_start 1954-04-04 04:00:00 (Sun)
  61654536000, #      utc_end 1954-10-03 04:00:00 (Sun)
  61638807600, #  local_start 1954-04-04 03:00:00 (Sun)
  61654532400, #    local_end 1954-10-03 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61654536000, #    utc_start 1954-10-03 04:00:00 (Sun)
  61670260800, #      utc_end 1955-04-03 04:00:00 (Sun)
  61654528800, #  local_start 1954-10-03 02:00:00 (Sun)
  61670253600, #    local_end 1955-04-03 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61670260800, #    utc_start 1955-04-03 04:00:00 (Sun)
  61685985600, #      utc_end 1955-10-02 04:00:00 (Sun)
  61670257200, #  local_start 1955-04-03 03:00:00 (Sun)
  61685982000, #    local_end 1955-10-02 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61685985600, #    utc_start 1955-10-02 04:00:00 (Sun)
  61701710400, #      utc_end 1956-04-01 04:00:00 (Sun)
  61685978400, #  local_start 1955-10-02 02:00:00 (Sun)
  61701703200, #    local_end 1956-04-01 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61701710400, #    utc_start 1956-04-01 04:00:00 (Sun)
  61718040000, #      utc_end 1956-10-07 04:00:00 (Sun)
  61701706800, #  local_start 1956-04-01 03:00:00 (Sun)
  61718036400, #    local_end 1956-10-07 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61718040000, #    utc_start 1956-10-07 04:00:00 (Sun)
  61733764800, #      utc_end 1957-04-07 04:00:00 (Sun)
  61718032800, #  local_start 1956-10-07 02:00:00 (Sun)
  61733757600, #    local_end 1957-04-07 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61733764800, #    utc_start 1957-04-07 04:00:00 (Sun)
  61749489600, #      utc_end 1957-10-06 04:00:00 (Sun)
  61733761200, #  local_start 1957-04-07 03:00:00 (Sun)
  61749486000, #    local_end 1957-10-06 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61749489600, #    utc_start 1957-10-06 04:00:00 (Sun)
  61765214400, #      utc_end 1958-04-06 04:00:00 (Sun)
  61749482400, #  local_start 1957-10-06 02:00:00 (Sun)
  61765207200, #    local_end 1958-04-06 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61765214400, #    utc_start 1958-04-06 04:00:00 (Sun)
  61780939200, #      utc_end 1958-10-05 04:00:00 (Sun)
  61765210800, #  local_start 1958-04-06 03:00:00 (Sun)
  61780935600, #    local_end 1958-10-05 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61780939200, #    utc_start 1958-10-05 04:00:00 (Sun)
  61796664000, #      utc_end 1959-04-05 04:00:00 (Sun)
  61780932000, #  local_start 1958-10-05 02:00:00 (Sun)
  61796656800, #    local_end 1959-04-05 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61796664000, #    utc_start 1959-04-05 04:00:00 (Sun)
  61812388800, #      utc_end 1959-10-04 04:00:00 (Sun)
  61796660400, #  local_start 1959-04-05 03:00:00 (Sun)
  61812385200, #    local_end 1959-10-04 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61812388800, #    utc_start 1959-10-04 04:00:00 (Sun)
  61828113600, #      utc_end 1960-04-03 04:00:00 (Sun)
  61812381600, #  local_start 1959-10-04 02:00:00 (Sun)
  61828106400, #    local_end 1960-04-03 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61828113600, #    utc_start 1960-04-03 04:00:00 (Sun)
  61843838400, #      utc_end 1960-10-02 04:00:00 (Sun)
  61828110000, #  local_start 1960-04-03 03:00:00 (Sun)
  61843834800, #    local_end 1960-10-02 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61843838400, #    utc_start 1960-10-02 04:00:00 (Sun)
  61859563200, #      utc_end 1961-04-02 04:00:00 (Sun)
  61843831200, #  local_start 1960-10-02 02:00:00 (Sun)
  61859556000, #    local_end 1961-04-02 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61859563200, #    utc_start 1961-04-02 04:00:00 (Sun)
  61875288000, #      utc_end 1961-10-01 04:00:00 (Sun)
  61859559600, #  local_start 1961-04-02 03:00:00 (Sun)
  61875284400, #    local_end 1961-10-01 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61875288000, #    utc_start 1961-10-01 04:00:00 (Sun)
  61891012800, #      utc_end 1962-04-01 04:00:00 (Sun)
  61875280800, #  local_start 1961-10-01 02:00:00 (Sun)
  61891005600, #    local_end 1962-04-01 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61891012800, #    utc_start 1962-04-01 04:00:00 (Sun)
  61907342400, #      utc_end 1962-10-07 04:00:00 (Sun)
  61891009200, #  local_start 1962-04-01 03:00:00 (Sun)
  61907338800, #    local_end 1962-10-07 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61907342400, #    utc_start 1962-10-07 04:00:00 (Sun)
  61923067200, #      utc_end 1963-04-07 04:00:00 (Sun)
  61907335200, #  local_start 1962-10-07 02:00:00 (Sun)
  61923060000, #    local_end 1963-04-07 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61923067200, #    utc_start 1963-04-07 04:00:00 (Sun)
  61938792000, #      utc_end 1963-10-06 04:00:00 (Sun)
  61923063600, #  local_start 1963-04-07 03:00:00 (Sun)
  61938788400, #    local_end 1963-10-06 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61938792000, #    utc_start 1963-10-06 04:00:00 (Sun)
  61954516800, #      utc_end 1964-04-05 04:00:00 (Sun)
  61938784800, #  local_start 1963-10-06 02:00:00 (Sun)
  61954509600, #    local_end 1964-04-05 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61954516800, #    utc_start 1964-04-05 04:00:00 (Sun)
  61970241600, #      utc_end 1964-10-04 04:00:00 (Sun)
  61954513200, #  local_start 1964-04-05 03:00:00 (Sun)
  61970238000, #    local_end 1964-10-04 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  61970241600, #    utc_start 1964-10-04 04:00:00 (Sun)
  61985966400, #      utc_end 1965-04-04 04:00:00 (Sun)
  61970234400, #  local_start 1964-10-04 02:00:00 (Sun)
  61985959200, #    local_end 1965-04-04 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  61985966400, #    utc_start 1965-04-04 04:00:00 (Sun)
  62001691200, #      utc_end 1965-10-03 04:00:00 (Sun)
  61985962800, #  local_start 1965-04-04 03:00:00 (Sun)
  62001687600, #    local_end 1965-10-03 03:00:00 (Sun)
  -3600,
  1,
  'AZOST',
      ],
      [
  62001691200, #    utc_start 1965-10-03 04:00:00 (Sun)
  62017416000, #      utc_end 1966-04-03 04:00:00 (Sun)
  62001684000, #  local_start 1965-10-03 02:00:00 (Sun)
  62017408800, #    local_end 1966-04-03 02:00:00 (Sun)
  -7200,
  0,
  'AZOT',
      ],
      [
  62017416000, #    utc_start 1966-04-03 04:00:00 (Sun)
  62363955600, #      utc_end 1977-03-27 01:00:00 (Sun)
  62017412400, #  local_start 1966-04-03 03:00:00 (Sun)
  62363952000, #    local_end 1977-03-27 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62363955600, #    utc_start 1977-03-27 01:00:00 (Sun)
  62379680400, #      utc_end 1977-09-25 01:00:00 (Sun)
  62363955600, #  local_start 1977-03-27 01:00:00 (Sun)
  62379680400, #    local_end 1977-09-25 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62379680400, #    utc_start 1977-09-25 01:00:00 (Sun)
  62396010000, #      utc_end 1978-04-02 01:00:00 (Sun)
  62379676800, #  local_start 1977-09-25 00:00:00 (Sun)
  62396006400, #    local_end 1978-04-02 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62396010000, #    utc_start 1978-04-02 01:00:00 (Sun)
  62411734800, #      utc_end 1978-10-01 01:00:00 (Sun)
  62396010000, #  local_start 1978-04-02 01:00:00 (Sun)
  62411734800, #    local_end 1978-10-01 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62411734800, #    utc_start 1978-10-01 01:00:00 (Sun)
  62427459600, #      utc_end 1979-04-01 01:00:00 (Sun)
  62411731200, #  local_start 1978-10-01 00:00:00 (Sun)
  62427456000, #    local_end 1979-04-01 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62427459600, #    utc_start 1979-04-01 01:00:00 (Sun)
  62443188000, #      utc_end 1979-09-30 02:00:00 (Sun)
  62427459600, #  local_start 1979-04-01 01:00:00 (Sun)
  62443188000, #    local_end 1979-09-30 02:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62443188000, #    utc_start 1979-09-30 02:00:00 (Sun)
  62458909200, #      utc_end 1980-03-30 01:00:00 (Sun)
  62443184400, #  local_start 1979-09-30 01:00:00 (Sun)
  62458905600, #    local_end 1980-03-30 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62458909200, #    utc_start 1980-03-30 01:00:00 (Sun)
  62474637600, #      utc_end 1980-09-28 02:00:00 (Sun)
  62458909200, #  local_start 1980-03-30 01:00:00 (Sun)
  62474637600, #    local_end 1980-09-28 02:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62474637600, #    utc_start 1980-09-28 02:00:00 (Sun)
  62490362400, #      utc_end 1981-03-29 02:00:00 (Sun)
  62474634000, #  local_start 1980-09-28 01:00:00 (Sun)
  62490358800, #    local_end 1981-03-29 01:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62490362400, #    utc_start 1981-03-29 02:00:00 (Sun)
  62506087200, #      utc_end 1981-09-27 02:00:00 (Sun)
  62490362400, #  local_start 1981-03-29 02:00:00 (Sun)
  62506087200, #    local_end 1981-09-27 02:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62506087200, #    utc_start 1981-09-27 02:00:00 (Sun)
  62521812000, #      utc_end 1982-03-28 02:00:00 (Sun)
  62506083600, #  local_start 1981-09-27 01:00:00 (Sun)
  62521808400, #    local_end 1982-03-28 01:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62521812000, #    utc_start 1982-03-28 02:00:00 (Sun)
  62537536800, #      utc_end 1982-09-26 02:00:00 (Sun)
  62521812000, #  local_start 1982-03-28 02:00:00 (Sun)
  62537536800, #    local_end 1982-09-26 02:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62537536800, #    utc_start 1982-09-26 02:00:00 (Sun)
  62553265200, #      utc_end 1983-03-27 03:00:00 (Sun)
  62537533200, #  local_start 1982-09-26 01:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62553265200, #    utc_start 1983-03-27 03:00:00 (Sun)
  62568986400, #      utc_end 1983-09-25 02:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568986400, #    local_end 1983-09-25 02:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62568986400, #    utc_start 1983-09-25 02:00:00 (Sun)
  62584711200, #      utc_end 1984-03-25 02:00:00 (Sun)
  62568982800, #  local_start 1983-09-25 01:00:00 (Sun)
  62584707600, #    local_end 1984-03-25 01:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62584711200, #    utc_start 1984-03-25 02:00:00 (Sun)
  62601040800, #      utc_end 1984-09-30 02:00:00 (Sun)
  62584711200, #  local_start 1984-03-25 02:00:00 (Sun)
  62601040800, #    local_end 1984-09-30 02:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62601040800, #    utc_start 1984-09-30 02:00:00 (Sun)
  62616765600, #      utc_end 1985-03-31 02:00:00 (Sun)
  62601037200, #  local_start 1984-09-30 01:00:00 (Sun)
  62616762000, #    local_end 1985-03-31 01:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62616765600, #    utc_start 1985-03-31 02:00:00 (Sun)
  62632490400, #      utc_end 1985-09-29 02:00:00 (Sun)
  62616765600, #  local_start 1985-03-31 02:00:00 (Sun)
  62632490400, #    local_end 1985-09-29 02:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62632490400, #    utc_start 1985-09-29 02:00:00 (Sun)
  62648215200, #      utc_end 1986-03-30 02:00:00 (Sun)
  62632486800, #  local_start 1985-09-29 01:00:00 (Sun)
  62648211600, #    local_end 1986-03-30 01:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62648215200, #    utc_start 1986-03-30 02:00:00 (Sun)
  62663940000, #      utc_end 1986-09-28 02:00:00 (Sun)
  62648215200, #  local_start 1986-03-30 02:00:00 (Sun)
  62663940000, #    local_end 1986-09-28 02:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62663940000, #    utc_start 1986-09-28 02:00:00 (Sun)
  62679664800, #      utc_end 1987-03-29 02:00:00 (Sun)
  62663936400, #  local_start 1986-09-28 01:00:00 (Sun)
  62679661200, #    local_end 1987-03-29 01:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62679664800, #    utc_start 1987-03-29 02:00:00 (Sun)
  62695389600, #      utc_end 1987-09-27 02:00:00 (Sun)
  62679664800, #  local_start 1987-03-29 02:00:00 (Sun)
  62695389600, #    local_end 1987-09-27 02:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62695389600, #    utc_start 1987-09-27 02:00:00 (Sun)
  62711114400, #      utc_end 1988-03-27 02:00:00 (Sun)
  62695386000, #  local_start 1987-09-27 01:00:00 (Sun)
  62711110800, #    local_end 1988-03-27 01:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62711114400, #    utc_start 1988-03-27 02:00:00 (Sun)
  62726839200, #      utc_end 1988-09-25 02:00:00 (Sun)
  62711114400, #  local_start 1988-03-27 02:00:00 (Sun)
  62726839200, #    local_end 1988-09-25 02:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62726839200, #    utc_start 1988-09-25 02:00:00 (Sun)
  62742564000, #      utc_end 1989-03-26 02:00:00 (Sun)
  62726835600, #  local_start 1988-09-25 01:00:00 (Sun)
  62742560400, #    local_end 1989-03-26 01:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62742564000, #    utc_start 1989-03-26 02:00:00 (Sun)
  62758288800, #      utc_end 1989-09-24 02:00:00 (Sun)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62758288800, #    local_end 1989-09-24 02:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62758288800, #    utc_start 1989-09-24 02:00:00 (Sun)
  62774013600, #      utc_end 1990-03-25 02:00:00 (Sun)
  62758285200, #  local_start 1989-09-24 01:00:00 (Sun)
  62774010000, #    local_end 1990-03-25 01:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62774013600, #    utc_start 1990-03-25 02:00:00 (Sun)
  62790343200, #      utc_end 1990-09-30 02:00:00 (Sun)
  62774013600, #  local_start 1990-03-25 02:00:00 (Sun)
  62790343200, #    local_end 1990-09-30 02:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62790343200, #    utc_start 1990-09-30 02:00:00 (Sun)
  62806068000, #      utc_end 1991-03-31 02:00:00 (Sun)
  62790339600, #  local_start 1990-09-30 01:00:00 (Sun)
  62806064400, #    local_end 1991-03-31 01:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62806068000, #    utc_start 1991-03-31 02:00:00 (Sun)
  62821792800, #      utc_end 1991-09-29 02:00:00 (Sun)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821792800, #    local_end 1991-09-29 02:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62821792800, #    utc_start 1991-09-29 02:00:00 (Sun)
  62837517600, #      utc_end 1992-03-29 02:00:00 (Sun)
  62821789200, #  local_start 1991-09-29 01:00:00 (Sun)
  62837514000, #    local_end 1992-03-29 01:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62837517600, #    utc_start 1992-03-29 02:00:00 (Sun)
  62853242400, #      utc_end 1992-09-27 02:00:00 (Sun)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62853242400, #    local_end 1992-09-27 02:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62853242400, #    utc_start 1992-09-27 02:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868963600, #    local_end 1993-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868963600, #  local_start 1993-03-28 01:00:00 (Sun)
  62884688400, #    local_end 1993-09-26 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884684800, #  local_start 1993-09-26 00:00:00 (Sun)
  62900409600, #    local_end 1994-03-27 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900413200, #  local_start 1994-03-27 01:00:00 (Sun)
  62916138000, #    local_end 1994-09-25 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916134400, #  local_start 1994-09-25 00:00:00 (Sun)
  62931859200, #    local_end 1995-03-26 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931862800, #  local_start 1995-03-26 01:00:00 (Sun)
  62947587600, #    local_end 1995-09-24 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947584000, #  local_start 1995-09-24 00:00:00 (Sun)
  62963913600, #    local_end 1996-03-31 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963917200, #  local_start 1996-03-31 01:00:00 (Sun)
  62982061200, #    local_end 1996-10-27 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982057600, #  local_start 1996-10-27 00:00:00 (Sun)
  62995363200, #    local_end 1997-03-30 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995366800, #  local_start 1997-03-30 01:00:00 (Sun)
  63013510800, #    local_end 1997-10-26 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013507200, #  local_start 1997-10-26 00:00:00 (Sun)
  63026812800, #    local_end 1998-03-29 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026816400, #  local_start 1998-03-29 01:00:00 (Sun)
  63044960400, #    local_end 1998-10-25 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044956800, #  local_start 1998-10-25 00:00:00 (Sun)
  63058262400, #    local_end 1999-03-28 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058266000, #  local_start 1999-03-28 01:00:00 (Sun)
  63077014800, #    local_end 1999-10-31 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077011200, #  local_start 1999-10-31 00:00:00 (Sun)
  63089712000, #    local_end 2000-03-26 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089715600, #  local_start 2000-03-26 01:00:00 (Sun)
  63108464400, #    local_end 2000-10-29 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108460800, #  local_start 2000-10-29 00:00:00 (Sun)
  63121161600, #    local_end 2001-03-25 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121165200, #  local_start 2001-03-25 01:00:00 (Sun)
  63139914000, #    local_end 2001-10-28 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139910400, #  local_start 2001-10-28 00:00:00 (Sun)
  63153216000, #    local_end 2002-03-31 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153219600, #  local_start 2002-03-31 01:00:00 (Sun)
  63171363600, #    local_end 2002-10-27 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171360000, #  local_start 2002-10-27 00:00:00 (Sun)
  63184665600, #    local_end 2003-03-30 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184669200, #  local_start 2003-03-30 01:00:00 (Sun)
  63202813200, #    local_end 2003-10-26 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202809600, #  local_start 2003-10-26 00:00:00 (Sun)
  63216115200, #    local_end 2004-03-28 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216118800, #  local_start 2004-03-28 01:00:00 (Sun)
  63234867600, #    local_end 2004-10-31 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234864000, #  local_start 2004-10-31 00:00:00 (Sun)
  63247564800, #    local_end 2005-03-27 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247568400, #  local_start 2005-03-27 01:00:00 (Sun)
  63266317200, #    local_end 2005-10-30 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266313600, #  local_start 2005-10-30 00:00:00 (Sun)
  63279014400, #    local_end 2006-03-26 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279018000, #  local_start 2006-03-26 01:00:00 (Sun)
  63297766800, #    local_end 2006-10-29 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297763200, #  local_start 2006-10-29 00:00:00 (Sun)
  63310464000, #    local_end 2007-03-25 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310467600, #  local_start 2007-03-25 01:00:00 (Sun)
  63329216400, #    local_end 2007-10-28 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329212800, #  local_start 2007-10-28 00:00:00 (Sun)
  63342518400, #    local_end 2008-03-30 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342522000, #  local_start 2008-03-30 01:00:00 (Sun)
  63360666000, #    local_end 2008-10-26 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360662400, #  local_start 2008-10-26 00:00:00 (Sun)
  63373968000, #    local_end 2009-03-29 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373971600, #  local_start 2009-03-29 01:00:00 (Sun)
  63392115600, #    local_end 2009-10-25 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392112000, #  local_start 2009-10-25 00:00:00 (Sun)
  63405417600, #    local_end 2010-03-28 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405421200, #  local_start 2010-03-28 01:00:00 (Sun)
  63424170000, #    local_end 2010-10-31 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424166400, #  local_start 2010-10-31 00:00:00 (Sun)
  63436867200, #    local_end 2011-03-27 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436870800, #  local_start 2011-03-27 01:00:00 (Sun)
  63455619600, #    local_end 2011-10-30 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455616000, #  local_start 2011-10-30 00:00:00 (Sun)
  63468316800, #    local_end 2012-03-25 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468320400, #  local_start 2012-03-25 01:00:00 (Sun)
  63487069200, #    local_end 2012-10-28 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487065600, #  local_start 2012-10-28 00:00:00 (Sun)
  63500371200, #    local_end 2013-03-31 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500374800, #  local_start 2013-03-31 01:00:00 (Sun)
  63518518800, #    local_end 2013-10-27 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518515200, #  local_start 2013-10-27 00:00:00 (Sun)
  63531820800, #    local_end 2014-03-30 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531824400, #  local_start 2014-03-30 01:00:00 (Sun)
  63549968400, #    local_end 2014-10-26 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549964800, #  local_start 2014-10-26 00:00:00 (Sun)
  63563270400, #    local_end 2015-03-29 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563274000, #  local_start 2015-03-29 01:00:00 (Sun)
  63581418000, #    local_end 2015-10-25 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581414400, #  local_start 2015-10-25 00:00:00 (Sun)
  63594720000, #    local_end 2016-03-27 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594723600, #  local_start 2016-03-27 01:00:00 (Sun)
  63613472400, #    local_end 2016-10-30 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613468800, #  local_start 2016-10-30 00:00:00 (Sun)
  63626169600, #    local_end 2017-03-26 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626173200, #  local_start 2017-03-26 01:00:00 (Sun)
  63644922000, #    local_end 2017-10-29 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644918400, #  local_start 2017-10-29 00:00:00 (Sun)
  63657619200, #    local_end 2018-03-25 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657622800, #  local_start 2018-03-25 01:00:00 (Sun)
  63676371600, #    local_end 2018-10-28 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676368000, #  local_start 2018-10-28 00:00:00 (Sun)
  63689673600, #    local_end 2019-03-31 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689677200, #  local_start 2019-03-31 01:00:00 (Sun)
  63707821200, #    local_end 2019-10-27 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707817600, #  local_start 2019-10-27 00:00:00 (Sun)
  63721123200, #    local_end 2020-03-29 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721126800, #  local_start 2020-03-29 01:00:00 (Sun)
  63739270800, #    local_end 2020-10-25 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739267200, #  local_start 2020-10-25 00:00:00 (Sun)
  63752572800, #    local_end 2021-03-28 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752576400, #  local_start 2021-03-28 01:00:00 (Sun)
  63771325200, #    local_end 2021-10-31 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771321600, #  local_start 2021-10-31 00:00:00 (Sun)
  63784022400, #    local_end 2022-03-27 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784026000, #  local_start 2022-03-27 01:00:00 (Sun)
  63802774800, #    local_end 2022-10-30 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802771200, #  local_start 2022-10-30 00:00:00 (Sun)
  63815472000, #    local_end 2023-03-26 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815475600, #  local_start 2023-03-26 01:00:00 (Sun)
  63834224400, #    local_end 2023-10-29 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834220800, #  local_start 2023-10-29 00:00:00 (Sun)
  63847526400, #    local_end 2024-03-31 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847530000, #  local_start 2024-03-31 01:00:00 (Sun)
  63865674000, #    local_end 2024-10-27 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865670400, #  local_start 2024-10-27 00:00:00 (Sun)
  63878976000, #    local_end 2025-03-30 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878979600, #  local_start 2025-03-30 01:00:00 (Sun)
  63897123600, #    local_end 2025-10-26 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897120000, #  local_start 2025-10-26 00:00:00 (Sun)
  63910425600, #    local_end 2026-03-29 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910429200, #  local_start 2026-03-29 01:00:00 (Sun)
  63928573200, #    local_end 2026-10-25 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928569600, #  local_start 2026-10-25 00:00:00 (Sun)
  63941875200, #    local_end 2027-03-28 00:00:00 (Sun)
  -3600,
  0,
  'AZOT',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941878800, #  local_start 2027-03-28 01:00:00 (Sun)
  63960627600, #    local_end 2027-10-31 01:00:00 (Sun)
  0,
  1,
  'AZOST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {103}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -3600 }
  
  my $last_observance = bless( {
    'format' => 'AZO%sT',
    'gmtoff' => '-1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 727650,
      'local_rd_secs' => 3600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 727650,
      'utc_rd_secs' => 3600,
      'utc_year' => 1994
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 727650,
      'local_rd_secs' => 3600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 727650,
      'utc_rd_secs' => 3600,
      'utc_year' => 1994
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ATLANTIC_AZORES

    $main::fatpacked{"DateTime/TimeZone/Atlantic/Bermuda.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ATLANTIC_BERMUDA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Atlantic::Bermuda;
  $DateTime::TimeZone::Atlantic::Bermuda::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Atlantic::Bermuda::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60873401958, #      utc_end 1930-01-01 06:19:18 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60873386400, #    local_end 1930-01-01 02:00:00 (Wed)
  -15558,
  0,
  'LMT',
      ],
      [
  60873401958, #    utc_start 1930-01-01 06:19:18 (Wed)
  62272044000, #      utc_end 1974-04-28 06:00:00 (Sun)
  60873387558, #  local_start 1930-01-01 02:19:18 (Wed)
  62272029600, #    local_end 1974-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62272044000, #    utc_start 1974-04-28 06:00:00 (Sun)
  62287765200, #      utc_end 1974-10-27 05:00:00 (Sun)
  62272033200, #  local_start 1974-04-28 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62287765200, #    utc_start 1974-10-27 05:00:00 (Sun)
  62303493600, #      utc_end 1975-04-27 06:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62303479200, #    local_end 1975-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62303493600, #    utc_start 1975-04-27 06:00:00 (Sun)
  62319214800, #      utc_end 1975-10-26 05:00:00 (Sun)
  62303482800, #  local_start 1975-04-27 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62319214800, #    utc_start 1975-10-26 05:00:00 (Sun)
  62325000000, #      utc_end 1976-01-01 04:00:00 (Thu)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62324985600, #    local_end 1976-01-01 00:00:00 (Thu)
  -14400,
  0,
  'AST',
      ],
      [
  62325000000, #    utc_start 1976-01-01 04:00:00 (Thu)
  62334943200, #      utc_end 1976-04-25 06:00:00 (Sun)
  62324985600, #  local_start 1976-01-01 00:00:00 (Thu)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62334943200, #    utc_start 1976-04-25 06:00:00 (Sun)
  62351269200, #      utc_end 1976-10-31 05:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62351269200, #    utc_start 1976-10-31 05:00:00 (Sun)
  62366392800, #      utc_end 1977-04-24 06:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62366392800, #    utc_start 1977-04-24 06:00:00 (Sun)
  62382718800, #      utc_end 1977-10-30 05:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62382718800, #    utc_start 1977-10-30 05:00:00 (Sun)
  62398447200, #      utc_end 1978-04-30 06:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62398447200, #    utc_start 1978-04-30 06:00:00 (Sun)
  62414168400, #      utc_end 1978-10-29 05:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62414168400, #    utc_start 1978-10-29 05:00:00 (Sun)
  62429896800, #      utc_end 1979-04-29 06:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62429896800, #    utc_start 1979-04-29 06:00:00 (Sun)
  62445618000, #      utc_end 1979-10-28 05:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62445618000, #    utc_start 1979-10-28 05:00:00 (Sun)
  62461346400, #      utc_end 1980-04-27 06:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62461346400, #    utc_start 1980-04-27 06:00:00 (Sun)
  62477067600, #      utc_end 1980-10-26 05:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62477067600, #    utc_start 1980-10-26 05:00:00 (Sun)
  62492796000, #      utc_end 1981-04-26 06:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62492796000, #    utc_start 1981-04-26 06:00:00 (Sun)
  62508517200, #      utc_end 1981-10-25 05:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62508517200, #    utc_start 1981-10-25 05:00:00 (Sun)
  62524245600, #      utc_end 1982-04-25 06:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62524245600, #    utc_start 1982-04-25 06:00:00 (Sun)
  62540571600, #      utc_end 1982-10-31 05:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62540571600, #    utc_start 1982-10-31 05:00:00 (Sun)
  62555695200, #      utc_end 1983-04-24 06:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62555695200, #    utc_start 1983-04-24 06:00:00 (Sun)
  62572021200, #      utc_end 1983-10-30 05:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62572021200, #    utc_start 1983-10-30 05:00:00 (Sun)
  62587749600, #      utc_end 1984-04-29 06:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62587749600, #    utc_start 1984-04-29 06:00:00 (Sun)
  62603470800, #      utc_end 1984-10-28 05:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62603470800, #    utc_start 1984-10-28 05:00:00 (Sun)
  62619199200, #      utc_end 1985-04-28 06:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62619199200, #    utc_start 1985-04-28 06:00:00 (Sun)
  62634920400, #      utc_end 1985-10-27 05:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62634920400, #    utc_start 1985-10-27 05:00:00 (Sun)
  62650648800, #      utc_end 1986-04-27 06:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62650648800, #    utc_start 1986-04-27 06:00:00 (Sun)
  62666370000, #      utc_end 1986-10-26 05:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62666370000, #    utc_start 1986-10-26 05:00:00 (Sun)
  62680284000, #      utc_end 1987-04-05 06:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62680284000, #    utc_start 1987-04-05 06:00:00 (Sun)
  62697819600, #      utc_end 1987-10-25 05:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62697819600, #    utc_start 1987-10-25 05:00:00 (Sun)
  62711733600, #      utc_end 1988-04-03 06:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62711733600, #    utc_start 1988-04-03 06:00:00 (Sun)
  62729874000, #      utc_end 1988-10-30 05:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62729874000, #    utc_start 1988-10-30 05:00:00 (Sun)
  62743183200, #      utc_end 1989-04-02 06:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62743183200, #    utc_start 1989-04-02 06:00:00 (Sun)
  62761323600, #      utc_end 1989-10-29 05:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62761323600, #    utc_start 1989-10-29 05:00:00 (Sun)
  62774632800, #      utc_end 1990-04-01 06:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62774632800, #    utc_start 1990-04-01 06:00:00 (Sun)
  62792773200, #      utc_end 1990-10-28 05:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62792773200, #    utc_start 1990-10-28 05:00:00 (Sun)
  62806687200, #      utc_end 1991-04-07 06:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62806687200, #    utc_start 1991-04-07 06:00:00 (Sun)
  62824222800, #      utc_end 1991-10-27 05:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62824222800, #    utc_start 1991-10-27 05:00:00 (Sun)
  62838136800, #      utc_end 1992-04-05 06:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62838136800, #    utc_start 1992-04-05 06:00:00 (Sun)
  62855672400, #      utc_end 1992-10-25 05:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62855672400, #    utc_start 1992-10-25 05:00:00 (Sun)
  62869586400, #      utc_end 1993-04-04 06:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62869586400, #    utc_start 1993-04-04 06:00:00 (Sun)
  62887726800, #      utc_end 1993-10-31 05:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62887726800, #    utc_start 1993-10-31 05:00:00 (Sun)
  62901036000, #      utc_end 1994-04-03 06:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62901036000, #    utc_start 1994-04-03 06:00:00 (Sun)
  62919176400, #      utc_end 1994-10-30 05:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62919176400, #    utc_start 1994-10-30 05:00:00 (Sun)
  62932485600, #      utc_end 1995-04-02 06:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62932485600, #    utc_start 1995-04-02 06:00:00 (Sun)
  62950626000, #      utc_end 1995-10-29 05:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62950626000, #    utc_start 1995-10-29 05:00:00 (Sun)
  62964540000, #      utc_end 1996-04-07 06:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62964540000, #    utc_start 1996-04-07 06:00:00 (Sun)
  62982075600, #      utc_end 1996-10-27 05:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  62982075600, #    utc_start 1996-10-27 05:00:00 (Sun)
  62995989600, #      utc_end 1997-04-06 06:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  62995989600, #    utc_start 1997-04-06 06:00:00 (Sun)
  63013525200, #      utc_end 1997-10-26 05:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63013525200, #    utc_start 1997-10-26 05:00:00 (Sun)
  63027439200, #      utc_end 1998-04-05 06:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63027439200, #    utc_start 1998-04-05 06:00:00 (Sun)
  63044974800, #      utc_end 1998-10-25 05:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63044974800, #    utc_start 1998-10-25 05:00:00 (Sun)
  63058888800, #      utc_end 1999-04-04 06:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63058888800, #    utc_start 1999-04-04 06:00:00 (Sun)
  63077029200, #      utc_end 1999-10-31 05:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63077029200, #    utc_start 1999-10-31 05:00:00 (Sun)
  63090338400, #      utc_end 2000-04-02 06:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63090338400, #    utc_start 2000-04-02 06:00:00 (Sun)
  63108478800, #      utc_end 2000-10-29 05:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63108478800, #    utc_start 2000-10-29 05:00:00 (Sun)
  63121788000, #      utc_end 2001-04-01 06:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63121788000, #    utc_start 2001-04-01 06:00:00 (Sun)
  63139928400, #      utc_end 2001-10-28 05:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63139928400, #    utc_start 2001-10-28 05:00:00 (Sun)
  63153842400, #      utc_end 2002-04-07 06:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63153842400, #    utc_start 2002-04-07 06:00:00 (Sun)
  63171378000, #      utc_end 2002-10-27 05:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63171378000, #    utc_start 2002-10-27 05:00:00 (Sun)
  63185292000, #      utc_end 2003-04-06 06:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63185292000, #    utc_start 2003-04-06 06:00:00 (Sun)
  63202827600, #      utc_end 2003-10-26 05:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63202827600, #    utc_start 2003-10-26 05:00:00 (Sun)
  63216741600, #      utc_end 2004-04-04 06:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63216741600, #    utc_start 2004-04-04 06:00:00 (Sun)
  63234882000, #      utc_end 2004-10-31 05:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63234882000, #    utc_start 2004-10-31 05:00:00 (Sun)
  63248191200, #      utc_end 2005-04-03 06:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63248191200, #    utc_start 2005-04-03 06:00:00 (Sun)
  63266331600, #      utc_end 2005-10-30 05:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63266331600, #    utc_start 2005-10-30 05:00:00 (Sun)
  63279640800, #      utc_end 2006-04-02 06:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63279640800, #    utc_start 2006-04-02 06:00:00 (Sun)
  63297781200, #      utc_end 2006-10-29 05:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63297781200, #    utc_start 2006-10-29 05:00:00 (Sun)
  63309276000, #      utc_end 2007-03-11 06:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63309276000, #    utc_start 2007-03-11 06:00:00 (Sun)
  63329835600, #      utc_end 2007-11-04 05:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63329835600, #    utc_start 2007-11-04 05:00:00 (Sun)
  63340725600, #      utc_end 2008-03-09 06:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63340725600, #    utc_start 2008-03-09 06:00:00 (Sun)
  63361285200, #      utc_end 2008-11-02 05:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63361285200, #    utc_start 2008-11-02 05:00:00 (Sun)
  63372175200, #      utc_end 2009-03-08 06:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63372175200, #    utc_start 2009-03-08 06:00:00 (Sun)
  63392734800, #      utc_end 2009-11-01 05:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63392734800, #    utc_start 2009-11-01 05:00:00 (Sun)
  63404229600, #      utc_end 2010-03-14 06:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63404229600, #    utc_start 2010-03-14 06:00:00 (Sun)
  63424789200, #      utc_end 2010-11-07 05:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63424789200, #    utc_start 2010-11-07 05:00:00 (Sun)
  63435679200, #      utc_end 2011-03-13 06:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63435679200, #    utc_start 2011-03-13 06:00:00 (Sun)
  63456238800, #      utc_end 2011-11-06 05:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63456238800, #    utc_start 2011-11-06 05:00:00 (Sun)
  63467128800, #      utc_end 2012-03-11 06:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63467128800, #    utc_start 2012-03-11 06:00:00 (Sun)
  63487688400, #      utc_end 2012-11-04 05:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63487688400, #    utc_start 2012-11-04 05:00:00 (Sun)
  63498578400, #      utc_end 2013-03-10 06:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63498578400, #    utc_start 2013-03-10 06:00:00 (Sun)
  63519138000, #      utc_end 2013-11-03 05:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63519138000, #    utc_start 2013-11-03 05:00:00 (Sun)
  63530028000, #      utc_end 2014-03-09 06:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63530028000, #    utc_start 2014-03-09 06:00:00 (Sun)
  63550587600, #      utc_end 2014-11-02 05:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63550587600, #    utc_start 2014-11-02 05:00:00 (Sun)
  63561477600, #      utc_end 2015-03-08 06:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63561477600, #    utc_start 2015-03-08 06:00:00 (Sun)
  63582037200, #      utc_end 2015-11-01 05:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63582037200, #    utc_start 2015-11-01 05:00:00 (Sun)
  63593532000, #      utc_end 2016-03-13 06:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63593532000, #    utc_start 2016-03-13 06:00:00 (Sun)
  63614091600, #      utc_end 2016-11-06 05:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63614091600, #    utc_start 2016-11-06 05:00:00 (Sun)
  63624981600, #      utc_end 2017-03-12 06:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63624981600, #    utc_start 2017-03-12 06:00:00 (Sun)
  63645541200, #      utc_end 2017-11-05 05:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63645541200, #    utc_start 2017-11-05 05:00:00 (Sun)
  63656431200, #      utc_end 2018-03-11 06:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63656431200, #    utc_start 2018-03-11 06:00:00 (Sun)
  63676990800, #      utc_end 2018-11-04 05:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63676990800, #    utc_start 2018-11-04 05:00:00 (Sun)
  63687880800, #      utc_end 2019-03-10 06:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63687880800, #    utc_start 2019-03-10 06:00:00 (Sun)
  63708440400, #      utc_end 2019-11-03 05:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63708440400, #    utc_start 2019-11-03 05:00:00 (Sun)
  63719330400, #      utc_end 2020-03-08 06:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63719330400, #    utc_start 2020-03-08 06:00:00 (Sun)
  63739890000, #      utc_end 2020-11-01 05:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63739890000, #    utc_start 2020-11-01 05:00:00 (Sun)
  63751384800, #      utc_end 2021-03-14 06:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63751384800, #    utc_start 2021-03-14 06:00:00 (Sun)
  63771944400, #      utc_end 2021-11-07 05:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63771944400, #    utc_start 2021-11-07 05:00:00 (Sun)
  63782834400, #      utc_end 2022-03-13 06:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63782834400, #    utc_start 2022-03-13 06:00:00 (Sun)
  63803394000, #      utc_end 2022-11-06 05:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63803394000, #    utc_start 2022-11-06 05:00:00 (Sun)
  63814284000, #      utc_end 2023-03-12 06:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63814284000, #    utc_start 2023-03-12 06:00:00 (Sun)
  63834843600, #      utc_end 2023-11-05 05:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63834843600, #    utc_start 2023-11-05 05:00:00 (Sun)
  63845733600, #      utc_end 2024-03-10 06:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63845733600, #    utc_start 2024-03-10 06:00:00 (Sun)
  63866293200, #      utc_end 2024-11-03 05:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63866293200, #    utc_start 2024-11-03 05:00:00 (Sun)
  63877183200, #      utc_end 2025-03-09 06:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63877183200, #    utc_start 2025-03-09 06:00:00 (Sun)
  63897742800, #      utc_end 2025-11-02 05:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63897742800, #    utc_start 2025-11-02 05:00:00 (Sun)
  63908632800, #      utc_end 2026-03-08 06:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63908632800, #    utc_start 2026-03-08 06:00:00 (Sun)
  63929192400, #      utc_end 2026-11-01 05:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
      [
  63929192400, #    utc_start 2026-11-01 05:00:00 (Sun)
  63940687200, #      utc_end 2027-03-14 06:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -14400,
  0,
  'AST',
      ],
      [
  63940687200, #    utc_start 2027-03-14 06:00:00 (Sun)
  63961246800, #      utc_end 2027-11-07 05:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -10800,
  1,
  'ADT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {54}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -14400 }
  
  my $last_observance = bless( {
    'format' => 'A%sT',
    'gmtoff' => '-4:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721354,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721354,
      'utc_rd_secs' => 0,
      'utc_year' => 1977
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -14400,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721354,
      'local_rd_secs' => 14400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721354,
      'utc_rd_secs' => 14400,
      'utc_year' => 1977
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ATLANTIC_BERMUDA

    $main::fatpacked{"DateTime/TimeZone/Atlantic/Canary.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ATLANTIC_CANARY';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Atlantic::Canary;
  $DateTime::TimeZone::Atlantic::Canary::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Atlantic::Canary::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60626019696, #      utc_end 1922-03-01 01:01:36 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60626016000, #    local_end 1922-03-01 00:00:00 (Wed)
  -3696,
  0,
  'LMT',
      ],
      [
  60626019696, #    utc_start 1922-03-01 01:01:36 (Wed)
  61401808800, #      utc_end 1946-09-30 02:00:00 (Mon)
  60626016096, #  local_start 1922-03-01 00:01:36 (Wed)
  61401805200, #    local_end 1946-09-30 01:00:00 (Mon)
  -3600,
  0,
  'CANT',
      ],
      [
  61401808800, #    utc_start 1946-09-30 02:00:00 (Mon)
  62459510400, #      utc_end 1980-04-06 00:00:00 (Sun)
  61401808800, #  local_start 1946-09-30 02:00:00 (Mon)
  62459510400, #    local_end 1980-04-06 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62459510400, #    utc_start 1980-04-06 00:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459514000, #  local_start 1980-04-06 01:00:00 (Sun)
  62474637600, #    local_end 1980-09-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474634000, #  local_start 1980-09-28 01:00:00 (Sun)
  62490358800, #    local_end 1981-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490362400, #  local_start 1981-03-29 02:00:00 (Sun)
  62506087200, #    local_end 1981-09-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506083600, #  local_start 1981-09-27 01:00:00 (Sun)
  62521808400, #    local_end 1982-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521812000, #  local_start 1982-03-28 02:00:00 (Sun)
  62537536800, #    local_end 1982-09-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537533200, #  local_start 1982-09-26 01:00:00 (Sun)
  62553258000, #    local_end 1983-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553261600, #  local_start 1983-03-27 02:00:00 (Sun)
  62568986400, #    local_end 1983-09-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568982800, #  local_start 1983-09-25 01:00:00 (Sun)
  62584707600, #    local_end 1984-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584711200, #  local_start 1984-03-25 02:00:00 (Sun)
  62601040800, #    local_end 1984-09-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601037200, #  local_start 1984-09-30 01:00:00 (Sun)
  62616762000, #    local_end 1985-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616765600, #  local_start 1985-03-31 02:00:00 (Sun)
  62632490400, #    local_end 1985-09-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632486800, #  local_start 1985-09-29 01:00:00 (Sun)
  62648211600, #    local_end 1986-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648215200, #  local_start 1986-03-30 02:00:00 (Sun)
  62663940000, #    local_end 1986-09-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663936400, #  local_start 1986-09-28 01:00:00 (Sun)
  62679661200, #    local_end 1987-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679664800, #  local_start 1987-03-29 02:00:00 (Sun)
  62695389600, #    local_end 1987-09-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695386000, #  local_start 1987-09-27 01:00:00 (Sun)
  62711110800, #    local_end 1988-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711114400, #  local_start 1988-03-27 02:00:00 (Sun)
  62726839200, #    local_end 1988-09-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726835600, #  local_start 1988-09-25 01:00:00 (Sun)
  62742560400, #    local_end 1989-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62758288800, #    local_end 1989-09-24 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758285200, #  local_start 1989-09-24 01:00:00 (Sun)
  62774010000, #    local_end 1990-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774013600, #  local_start 1990-03-25 02:00:00 (Sun)
  62790343200, #    local_end 1990-09-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790339600, #  local_start 1990-09-30 01:00:00 (Sun)
  62806064400, #    local_end 1991-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821792800, #    local_end 1991-09-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821789200, #  local_start 1991-09-29 01:00:00 (Sun)
  62837514000, #    local_end 1992-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62853242400, #    local_end 1992-09-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853238800, #  local_start 1992-09-27 01:00:00 (Sun)
  62868963600, #    local_end 1993-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868967200, #  local_start 1993-03-28 02:00:00 (Sun)
  62884692000, #    local_end 1993-09-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884688400, #  local_start 1993-09-26 01:00:00 (Sun)
  62900413200, #    local_end 1994-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900416800, #  local_start 1994-03-27 02:00:00 (Sun)
  62916141600, #    local_end 1994-09-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916138000, #  local_start 1994-09-25 01:00:00 (Sun)
  62931862800, #    local_end 1995-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931866400, #  local_start 1995-03-26 02:00:00 (Sun)
  62947591200, #    local_end 1995-09-24 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947587600, #  local_start 1995-09-24 01:00:00 (Sun)
  62963917200, #    local_end 1996-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963920800, #  local_start 1996-03-31 02:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995366800, #    local_end 1997-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995370400, #  local_start 1997-03-30 02:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63026816400, #    local_end 1998-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026820000, #  local_start 1998-03-29 02:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058266000, #    local_end 1999-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058269600, #  local_start 1999-03-28 02:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63089715600, #    local_end 2000-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089719200, #  local_start 2000-03-26 02:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121165200, #    local_end 2001-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121168800, #  local_start 2001-03-25 02:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153219600, #    local_end 2002-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153223200, #  local_start 2002-03-31 02:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63184669200, #    local_end 2003-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184672800, #  local_start 2003-03-30 02:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216118800, #    local_end 2004-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216122400, #  local_start 2004-03-28 02:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63247568400, #    local_end 2005-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247572000, #  local_start 2005-03-27 02:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279018000, #    local_end 2006-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279021600, #  local_start 2006-03-26 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63310467600, #    local_end 2007-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310471200, #  local_start 2007-03-25 02:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63342522000, #    local_end 2008-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342525600, #  local_start 2008-03-30 02:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63373971600, #    local_end 2009-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373975200, #  local_start 2009-03-29 02:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63405421200, #    local_end 2010-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405424800, #  local_start 2010-03-28 02:00:00 (Sun)
  63424173600, #    local_end 2010-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424170000, #  local_start 2010-10-31 01:00:00 (Sun)
  63436870800, #    local_end 2011-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436874400, #  local_start 2011-03-27 02:00:00 (Sun)
  63455623200, #    local_end 2011-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455619600, #  local_start 2011-10-30 01:00:00 (Sun)
  63468320400, #    local_end 2012-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468324000, #  local_start 2012-03-25 02:00:00 (Sun)
  63487072800, #    local_end 2012-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487069200, #  local_start 2012-10-28 01:00:00 (Sun)
  63500374800, #    local_end 2013-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500378400, #  local_start 2013-03-31 02:00:00 (Sun)
  63518522400, #    local_end 2013-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518518800, #  local_start 2013-10-27 01:00:00 (Sun)
  63531824400, #    local_end 2014-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531828000, #  local_start 2014-03-30 02:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63563274000, #    local_end 2015-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563277600, #  local_start 2015-03-29 02:00:00 (Sun)
  63581421600, #    local_end 2015-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581418000, #  local_start 2015-10-25 01:00:00 (Sun)
  63594723600, #    local_end 2016-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594727200, #  local_start 2016-03-27 02:00:00 (Sun)
  63613476000, #    local_end 2016-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613472400, #  local_start 2016-10-30 01:00:00 (Sun)
  63626173200, #    local_end 2017-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626176800, #  local_start 2017-03-26 02:00:00 (Sun)
  63644925600, #    local_end 2017-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644922000, #  local_start 2017-10-29 01:00:00 (Sun)
  63657622800, #    local_end 2018-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657626400, #  local_start 2018-03-25 02:00:00 (Sun)
  63676375200, #    local_end 2018-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676371600, #  local_start 2018-10-28 01:00:00 (Sun)
  63689677200, #    local_end 2019-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689680800, #  local_start 2019-03-31 02:00:00 (Sun)
  63707824800, #    local_end 2019-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707821200, #  local_start 2019-10-27 01:00:00 (Sun)
  63721126800, #    local_end 2020-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721130400, #  local_start 2020-03-29 02:00:00 (Sun)
  63739274400, #    local_end 2020-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739270800, #  local_start 2020-10-25 01:00:00 (Sun)
  63752576400, #    local_end 2021-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752580000, #  local_start 2021-03-28 02:00:00 (Sun)
  63771328800, #    local_end 2021-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771325200, #  local_start 2021-10-31 01:00:00 (Sun)
  63784026000, #    local_end 2022-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784029600, #  local_start 2022-03-27 02:00:00 (Sun)
  63802778400, #    local_end 2022-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802774800, #  local_start 2022-10-30 01:00:00 (Sun)
  63815475600, #    local_end 2023-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815479200, #  local_start 2023-03-26 02:00:00 (Sun)
  63834228000, #    local_end 2023-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834224400, #  local_start 2023-10-29 01:00:00 (Sun)
  63847530000, #    local_end 2024-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847533600, #  local_start 2024-03-31 02:00:00 (Sun)
  63865677600, #    local_end 2024-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865674000, #  local_start 2024-10-27 01:00:00 (Sun)
  63878979600, #    local_end 2025-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878983200, #  local_start 2025-03-30 02:00:00 (Sun)
  63897127200, #    local_end 2025-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897123600, #  local_start 2025-10-26 01:00:00 (Sun)
  63910429200, #    local_end 2026-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910432800, #  local_start 2026-03-29 02:00:00 (Sun)
  63928576800, #    local_end 2026-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928573200, #  local_start 2026-10-25 01:00:00 (Sun)
  63941878800, #    local_end 2027-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941882400, #  local_start 2027-03-28 02:00:00 (Sun)
  63960631200, #    local_end 2027-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {48}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 0 }
  
  my $last_observance = bless( {
    'format' => 'WE%sT',
    'gmtoff' => '0:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723086,
      'local_rd_secs' => 3600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723086,
      'utc_rd_secs' => 3600,
      'utc_year' => 1981
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 0,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723086,
      'local_rd_secs' => 3600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723086,
      'utc_rd_secs' => 3600,
      'utc_year' => 1981
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ATLANTIC_CANARY

    $main::fatpacked{"DateTime/TimeZone/Atlantic/Cape_Verde.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ATLANTIC_CAPE_VERDE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Atlantic::Cape_Verde;
  $DateTime::TimeZone::Atlantic::Cape_Verde::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Atlantic::Cape_Verde::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60147538444, #      utc_end 1907-01-01 01:34:04 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60147532800, #    local_end 1907-01-01 00:00:00 (Tue)
  -5644,
  0,
  'LMT',
      ],
      [
  60147538444, #    utc_start 1907-01-01 01:34:04 (Tue)
  61273072800, #      utc_end 1942-09-01 02:00:00 (Tue)
  60147531244, #  local_start 1906-12-31 23:34:04 (Mon)
  61273065600, #    local_end 1942-09-01 00:00:00 (Tue)
  -7200,
  0,
  'CVT',
      ],
      [
  61273072800, #    utc_start 1942-09-01 02:00:00 (Tue)
  61371565200, #      utc_end 1945-10-15 01:00:00 (Mon)
  61273069200, #  local_start 1942-09-01 01:00:00 (Tue)
  61371561600, #    local_end 1945-10-15 00:00:00 (Mon)
  -3600,
  1,
  'CVST',
      ],
      [
  61371565200, #    utc_start 1945-10-15 01:00:00 (Mon)
  62321803200, #      utc_end 1975-11-25 04:00:00 (Tue)
  61371558000, #  local_start 1945-10-14 23:00:00 (Sun)
  62321796000, #    local_end 1975-11-25 02:00:00 (Tue)
  -7200,
  0,
  'CVT',
      ],
      [
  62321803200, #    utc_start 1975-11-25 04:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  62321799600, #  local_start 1975-11-25 03:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  -3600,
  0,
  'CVT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {1}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ATLANTIC_CAPE_VERDE

    $main::fatpacked{"DateTime/TimeZone/Atlantic/Faroe.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ATLANTIC_FAROE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Atlantic::Faroe;
  $DateTime::TimeZone::Atlantic::Faroe::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Atlantic::Faroe::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60179934424, #      utc_end 1908-01-11 00:27:04 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60179932800, #    local_end 1908-01-11 00:00:00 (Sat)
  -1624,
  0,
  'LMT',
      ],
      [
  60179934424, #    utc_start 1908-01-11 00:27:04 (Sat)
  62482838400, #      utc_end 1981-01-01 00:00:00 (Thu)
  60179934424, #  local_start 1908-01-11 00:27:04 (Sat)
  62482838400, #    local_end 1981-01-01 00:00:00 (Thu)
  0,
  0,
  'WET',
      ],
      [
  62482838400, #    utc_start 1981-01-01 00:00:00 (Thu)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62482838400, #  local_start 1981-01-01 00:00:00 (Thu)
  62490358800, #    local_end 1981-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490362400, #  local_start 1981-03-29 02:00:00 (Sun)
  62506087200, #    local_end 1981-09-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506083600, #  local_start 1981-09-27 01:00:00 (Sun)
  62521808400, #    local_end 1982-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521812000, #  local_start 1982-03-28 02:00:00 (Sun)
  62537536800, #    local_end 1982-09-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537533200, #  local_start 1982-09-26 01:00:00 (Sun)
  62553258000, #    local_end 1983-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553261600, #  local_start 1983-03-27 02:00:00 (Sun)
  62568986400, #    local_end 1983-09-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568982800, #  local_start 1983-09-25 01:00:00 (Sun)
  62584707600, #    local_end 1984-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584711200, #  local_start 1984-03-25 02:00:00 (Sun)
  62601040800, #    local_end 1984-09-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601037200, #  local_start 1984-09-30 01:00:00 (Sun)
  62616762000, #    local_end 1985-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616765600, #  local_start 1985-03-31 02:00:00 (Sun)
  62632490400, #    local_end 1985-09-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632486800, #  local_start 1985-09-29 01:00:00 (Sun)
  62648211600, #    local_end 1986-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648215200, #  local_start 1986-03-30 02:00:00 (Sun)
  62663940000, #    local_end 1986-09-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663936400, #  local_start 1986-09-28 01:00:00 (Sun)
  62679661200, #    local_end 1987-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679664800, #  local_start 1987-03-29 02:00:00 (Sun)
  62695389600, #    local_end 1987-09-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695386000, #  local_start 1987-09-27 01:00:00 (Sun)
  62711110800, #    local_end 1988-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711114400, #  local_start 1988-03-27 02:00:00 (Sun)
  62726839200, #    local_end 1988-09-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726835600, #  local_start 1988-09-25 01:00:00 (Sun)
  62742560400, #    local_end 1989-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62758288800, #    local_end 1989-09-24 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758285200, #  local_start 1989-09-24 01:00:00 (Sun)
  62774010000, #    local_end 1990-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774013600, #  local_start 1990-03-25 02:00:00 (Sun)
  62790343200, #    local_end 1990-09-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790339600, #  local_start 1990-09-30 01:00:00 (Sun)
  62806064400, #    local_end 1991-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821792800, #    local_end 1991-09-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821789200, #  local_start 1991-09-29 01:00:00 (Sun)
  62837514000, #    local_end 1992-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62853242400, #    local_end 1992-09-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853238800, #  local_start 1992-09-27 01:00:00 (Sun)
  62868963600, #    local_end 1993-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868967200, #  local_start 1993-03-28 02:00:00 (Sun)
  62884692000, #    local_end 1993-09-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884688400, #  local_start 1993-09-26 01:00:00 (Sun)
  62900413200, #    local_end 1994-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900416800, #  local_start 1994-03-27 02:00:00 (Sun)
  62916141600, #    local_end 1994-09-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916138000, #  local_start 1994-09-25 01:00:00 (Sun)
  62931862800, #    local_end 1995-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931866400, #  local_start 1995-03-26 02:00:00 (Sun)
  62947591200, #    local_end 1995-09-24 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947587600, #  local_start 1995-09-24 01:00:00 (Sun)
  62963917200, #    local_end 1996-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963920800, #  local_start 1996-03-31 02:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995366800, #    local_end 1997-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995370400, #  local_start 1997-03-30 02:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63026816400, #    local_end 1998-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026820000, #  local_start 1998-03-29 02:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058266000, #    local_end 1999-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058269600, #  local_start 1999-03-28 02:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63089715600, #    local_end 2000-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089719200, #  local_start 2000-03-26 02:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121165200, #    local_end 2001-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121168800, #  local_start 2001-03-25 02:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153219600, #    local_end 2002-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153223200, #  local_start 2002-03-31 02:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63184669200, #    local_end 2003-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184672800, #  local_start 2003-03-30 02:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216118800, #    local_end 2004-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216122400, #  local_start 2004-03-28 02:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63247568400, #    local_end 2005-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247572000, #  local_start 2005-03-27 02:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279018000, #    local_end 2006-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279021600, #  local_start 2006-03-26 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63310467600, #    local_end 2007-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310471200, #  local_start 2007-03-25 02:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63342522000, #    local_end 2008-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342525600, #  local_start 2008-03-30 02:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63373971600, #    local_end 2009-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373975200, #  local_start 2009-03-29 02:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63405421200, #    local_end 2010-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405424800, #  local_start 2010-03-28 02:00:00 (Sun)
  63424173600, #    local_end 2010-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424170000, #  local_start 2010-10-31 01:00:00 (Sun)
  63436870800, #    local_end 2011-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436874400, #  local_start 2011-03-27 02:00:00 (Sun)
  63455623200, #    local_end 2011-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455619600, #  local_start 2011-10-30 01:00:00 (Sun)
  63468320400, #    local_end 2012-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468324000, #  local_start 2012-03-25 02:00:00 (Sun)
  63487072800, #    local_end 2012-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487069200, #  local_start 2012-10-28 01:00:00 (Sun)
  63500374800, #    local_end 2013-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500378400, #  local_start 2013-03-31 02:00:00 (Sun)
  63518522400, #    local_end 2013-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518518800, #  local_start 2013-10-27 01:00:00 (Sun)
  63531824400, #    local_end 2014-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531828000, #  local_start 2014-03-30 02:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63563274000, #    local_end 2015-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563277600, #  local_start 2015-03-29 02:00:00 (Sun)
  63581421600, #    local_end 2015-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581418000, #  local_start 2015-10-25 01:00:00 (Sun)
  63594723600, #    local_end 2016-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594727200, #  local_start 2016-03-27 02:00:00 (Sun)
  63613476000, #    local_end 2016-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613472400, #  local_start 2016-10-30 01:00:00 (Sun)
  63626173200, #    local_end 2017-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626176800, #  local_start 2017-03-26 02:00:00 (Sun)
  63644925600, #    local_end 2017-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644922000, #  local_start 2017-10-29 01:00:00 (Sun)
  63657622800, #    local_end 2018-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657626400, #  local_start 2018-03-25 02:00:00 (Sun)
  63676375200, #    local_end 2018-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676371600, #  local_start 2018-10-28 01:00:00 (Sun)
  63689677200, #    local_end 2019-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689680800, #  local_start 2019-03-31 02:00:00 (Sun)
  63707824800, #    local_end 2019-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707821200, #  local_start 2019-10-27 01:00:00 (Sun)
  63721126800, #    local_end 2020-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721130400, #  local_start 2020-03-29 02:00:00 (Sun)
  63739274400, #    local_end 2020-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739270800, #  local_start 2020-10-25 01:00:00 (Sun)
  63752576400, #    local_end 2021-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752580000, #  local_start 2021-03-28 02:00:00 (Sun)
  63771328800, #    local_end 2021-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771325200, #  local_start 2021-10-31 01:00:00 (Sun)
  63784026000, #    local_end 2022-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784029600, #  local_start 2022-03-27 02:00:00 (Sun)
  63802778400, #    local_end 2022-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802774800, #  local_start 2022-10-30 01:00:00 (Sun)
  63815475600, #    local_end 2023-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815479200, #  local_start 2023-03-26 02:00:00 (Sun)
  63834228000, #    local_end 2023-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834224400, #  local_start 2023-10-29 01:00:00 (Sun)
  63847530000, #    local_end 2024-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847533600, #  local_start 2024-03-31 02:00:00 (Sun)
  63865677600, #    local_end 2024-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865674000, #  local_start 2024-10-27 01:00:00 (Sun)
  63878979600, #    local_end 2025-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878983200, #  local_start 2025-03-30 02:00:00 (Sun)
  63897127200, #    local_end 2025-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897123600, #  local_start 2025-10-26 01:00:00 (Sun)
  63910429200, #    local_end 2026-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910432800, #  local_start 2026-03-29 02:00:00 (Sun)
  63928576800, #    local_end 2026-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928573200, #  local_start 2026-10-25 01:00:00 (Sun)
  63941878800, #    local_end 2027-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941882400, #  local_start 2027-03-28 02:00:00 (Sun)
  63960631200, #    local_end 2027-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {47}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 0 }
  
  my $last_observance = bless( {
    'format' => 'WE%sT',
    'gmtoff' => '0:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723181,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723181,
      'utc_rd_secs' => 0,
      'utc_year' => 1982
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 0,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723181,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723181,
      'utc_rd_secs' => 0,
      'utc_year' => 1982
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ATLANTIC_FAROE

    $main::fatpacked{"DateTime/TimeZone/Atlantic/Madeira.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ATLANTIC_MADEIRA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Atlantic::Madeira;
  $DateTime::TimeZone::Atlantic::Madeira::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Atlantic::Madeira::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59421776856, #      utc_end 1884-01-01 01:07:36 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59421772800, #    local_end 1884-01-01 00:00:00 (Tue)
  -4056,
  0,
  'LMT',
      ],
      [
  59421776856, #    utc_start 1884-01-01 01:07:36 (Tue)
  60305303256, #      utc_end 1912-01-01 01:07:36 (Mon)
  59421772800, #  local_start 1884-01-01 00:00:00 (Tue)
  60305299200, #    local_end 1912-01-01 00:00:00 (Mon)
  -4056,
  0,
  'FMT',
      ],
      [
  60305303256, #    utc_start 1912-01-01 01:07:36 (Mon)
  60446131200, #      utc_end 1916-06-18 00:00:00 (Sun)
  60305299656, #  local_start 1912-01-01 00:07:36 (Mon)
  60446127600, #    local_end 1916-06-17 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  60446131200, #    utc_start 1916-06-18 00:00:00 (Sun)
  60457885200, #      utc_end 1916-11-01 01:00:00 (Wed)
  60446131200, #  local_start 1916-06-18 00:00:00 (Sun)
  60457885200, #    local_end 1916-11-01 01:00:00 (Wed)
  0,
  1,
  'MADST',
      ],
      [
  60457885200, #    utc_start 1916-11-01 01:00:00 (Wed)
  60468249600, #      utc_end 1917-03-01 00:00:00 (Thu)
  60457881600, #  local_start 1916-11-01 00:00:00 (Wed)
  60468246000, #    local_end 1917-02-28 23:00:00 (Wed)
  -3600,
  0,
  'MADT',
      ],
      [
  60468249600, #    utc_start 1917-03-01 00:00:00 (Thu)
  60487948800, #      utc_end 1917-10-15 00:00:00 (Mon)
  60468249600, #  local_start 1917-03-01 00:00:00 (Thu)
  60487948800, #    local_end 1917-10-15 00:00:00 (Mon)
  0,
  1,
  'MADST',
      ],
      [
  60487948800, #    utc_start 1917-10-15 00:00:00 (Mon)
  60499872000, #      utc_end 1918-03-02 00:00:00 (Sat)
  60487945200, #  local_start 1917-10-14 23:00:00 (Sun)
  60499868400, #    local_end 1918-03-01 23:00:00 (Fri)
  -3600,
  0,
  'MADT',
      ],
      [
  60499872000, #    utc_start 1918-03-02 00:00:00 (Sat)
  60519484800, #      utc_end 1918-10-15 00:00:00 (Tue)
  60499872000, #  local_start 1918-03-02 00:00:00 (Sat)
  60519484800, #    local_end 1918-10-15 00:00:00 (Tue)
  0,
  1,
  'MADST',
      ],
      [
  60519484800, #    utc_start 1918-10-15 00:00:00 (Tue)
  60531321600, #      utc_end 1919-03-01 00:00:00 (Sat)
  60519481200, #  local_start 1918-10-14 23:00:00 (Mon)
  60531318000, #    local_end 1919-02-28 23:00:00 (Fri)
  -3600,
  0,
  'MADT',
      ],
      [
  60531321600, #    utc_start 1919-03-01 00:00:00 (Sat)
  60551020800, #      utc_end 1919-10-15 00:00:00 (Wed)
  60531321600, #  local_start 1919-03-01 00:00:00 (Sat)
  60551020800, #    local_end 1919-10-15 00:00:00 (Wed)
  0,
  1,
  'MADST',
      ],
      [
  60551020800, #    utc_start 1919-10-15 00:00:00 (Wed)
  60562944000, #      utc_end 1920-03-01 00:00:00 (Mon)
  60551017200, #  local_start 1919-10-14 23:00:00 (Tue)
  60562940400, #    local_end 1920-02-29 23:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  60562944000, #    utc_start 1920-03-01 00:00:00 (Mon)
  60582643200, #      utc_end 1920-10-15 00:00:00 (Fri)
  60562944000, #  local_start 1920-03-01 00:00:00 (Mon)
  60582643200, #    local_end 1920-10-15 00:00:00 (Fri)
  0,
  1,
  'MADST',
      ],
      [
  60582643200, #    utc_start 1920-10-15 00:00:00 (Fri)
  60594480000, #      utc_end 1921-03-01 00:00:00 (Tue)
  60582639600, #  local_start 1920-10-14 23:00:00 (Thu)
  60594476400, #    local_end 1921-02-28 23:00:00 (Mon)
  -3600,
  0,
  'MADT',
      ],
      [
  60594480000, #    utc_start 1921-03-01 00:00:00 (Tue)
  60614179200, #      utc_end 1921-10-15 00:00:00 (Sat)
  60594480000, #  local_start 1921-03-01 00:00:00 (Tue)
  60614179200, #    local_end 1921-10-15 00:00:00 (Sat)
  0,
  1,
  'MADST',
      ],
      [
  60614179200, #    utc_start 1921-10-15 00:00:00 (Sat)
  60693235200, #      utc_end 1924-04-17 00:00:00 (Thu)
  60614175600, #  local_start 1921-10-14 23:00:00 (Fri)
  60693231600, #    local_end 1924-04-16 23:00:00 (Wed)
  -3600,
  0,
  'MADT',
      ],
      [
  60693235200, #    utc_start 1924-04-17 00:00:00 (Thu)
  60708873600, #      utc_end 1924-10-15 00:00:00 (Wed)
  60693235200, #  local_start 1924-04-17 00:00:00 (Thu)
  60708873600, #    local_end 1924-10-15 00:00:00 (Wed)
  0,
  1,
  'MADST',
      ],
      [
  60708873600, #    utc_start 1924-10-15 00:00:00 (Wed)
  60756393600, #      utc_end 1926-04-18 00:00:00 (Sun)
  60708870000, #  local_start 1924-10-14 23:00:00 (Tue)
  60756390000, #    local_end 1926-04-17 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  60756393600, #    utc_start 1926-04-18 00:00:00 (Sun)
  60770908800, #      utc_end 1926-10-03 00:00:00 (Sun)
  60756393600, #  local_start 1926-04-18 00:00:00 (Sun)
  60770908800, #    local_end 1926-10-03 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  60770908800, #    utc_start 1926-10-03 00:00:00 (Sun)
  60787238400, #      utc_end 1927-04-10 00:00:00 (Sun)
  60770905200, #  local_start 1926-10-02 23:00:00 (Sat)
  60787234800, #    local_end 1927-04-09 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  60787238400, #    utc_start 1927-04-10 00:00:00 (Sun)
  60802358400, #      utc_end 1927-10-02 00:00:00 (Sun)
  60787238400, #  local_start 1927-04-10 00:00:00 (Sun)
  60802358400, #    local_end 1927-10-02 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  60802358400, #    utc_start 1927-10-02 00:00:00 (Sun)
  60819292800, #      utc_end 1928-04-15 00:00:00 (Sun)
  60802354800, #  local_start 1927-10-01 23:00:00 (Sat)
  60819289200, #    local_end 1928-04-14 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  60819292800, #    utc_start 1928-04-15 00:00:00 (Sun)
  60834412800, #      utc_end 1928-10-07 00:00:00 (Sun)
  60819292800, #  local_start 1928-04-15 00:00:00 (Sun)
  60834412800, #    local_end 1928-10-07 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  60834412800, #    utc_start 1928-10-07 00:00:00 (Sun)
  60851347200, #      utc_end 1929-04-21 00:00:00 (Sun)
  60834409200, #  local_start 1928-10-06 23:00:00 (Sat)
  60851343600, #    local_end 1929-04-20 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  60851347200, #    utc_start 1929-04-21 00:00:00 (Sun)
  60865862400, #      utc_end 1929-10-06 00:00:00 (Sun)
  60851347200, #  local_start 1929-04-21 00:00:00 (Sun)
  60865862400, #    local_end 1929-10-06 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  60865862400, #    utc_start 1929-10-06 00:00:00 (Sun)
  60914246400, #      utc_end 1931-04-19 00:00:00 (Sun)
  60865858800, #  local_start 1929-10-05 23:00:00 (Sat)
  60914242800, #    local_end 1931-04-18 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  60914246400, #    utc_start 1931-04-19 00:00:00 (Sun)
  60928761600, #      utc_end 1931-10-04 00:00:00 (Sun)
  60914246400, #  local_start 1931-04-19 00:00:00 (Sun)
  60928761600, #    local_end 1931-10-04 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  60928761600, #    utc_start 1931-10-04 00:00:00 (Sun)
  60944486400, #      utc_end 1932-04-03 00:00:00 (Sun)
  60928758000, #  local_start 1931-10-03 23:00:00 (Sat)
  60944482800, #    local_end 1932-04-02 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  60944486400, #    utc_start 1932-04-03 00:00:00 (Sun)
  60960211200, #      utc_end 1932-10-02 00:00:00 (Sun)
  60944486400, #  local_start 1932-04-03 00:00:00 (Sun)
  60960211200, #    local_end 1932-10-02 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  60960211200, #    utc_start 1932-10-02 00:00:00 (Sun)
  61007990400, #      utc_end 1934-04-08 00:00:00 (Sun)
  60960207600, #  local_start 1932-10-01 23:00:00 (Sat)
  61007986800, #    local_end 1934-04-07 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  61007990400, #    utc_start 1934-04-08 00:00:00 (Sun)
  61023715200, #      utc_end 1934-10-07 00:00:00 (Sun)
  61007990400, #  local_start 1934-04-08 00:00:00 (Sun)
  61023715200, #    local_end 1934-10-07 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61023715200, #    utc_start 1934-10-07 00:00:00 (Sun)
  61038835200, #      utc_end 1935-03-31 00:00:00 (Sun)
  61023711600, #  local_start 1934-10-06 23:00:00 (Sat)
  61038831600, #    local_end 1935-03-30 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  61038835200, #    utc_start 1935-03-31 00:00:00 (Sun)
  61055164800, #      utc_end 1935-10-06 00:00:00 (Sun)
  61038835200, #  local_start 1935-03-31 00:00:00 (Sun)
  61055164800, #    local_end 1935-10-06 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61055164800, #    utc_start 1935-10-06 00:00:00 (Sun)
  61072099200, #      utc_end 1936-04-19 00:00:00 (Sun)
  61055161200, #  local_start 1935-10-05 23:00:00 (Sat)
  61072095600, #    local_end 1936-04-18 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  61072099200, #    utc_start 1936-04-19 00:00:00 (Sun)
  61086614400, #      utc_end 1936-10-04 00:00:00 (Sun)
  61072099200, #  local_start 1936-04-19 00:00:00 (Sun)
  61086614400, #    local_end 1936-10-04 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61086614400, #    utc_start 1936-10-04 00:00:00 (Sun)
  61102339200, #      utc_end 1937-04-04 00:00:00 (Sun)
  61086610800, #  local_start 1936-10-03 23:00:00 (Sat)
  61102335600, #    local_end 1937-04-03 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  61102339200, #    utc_start 1937-04-04 00:00:00 (Sun)
  61118064000, #      utc_end 1937-10-03 00:00:00 (Sun)
  61102339200, #  local_start 1937-04-04 00:00:00 (Sun)
  61118064000, #    local_end 1937-10-03 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61118064000, #    utc_start 1937-10-03 00:00:00 (Sun)
  61133184000, #      utc_end 1938-03-27 00:00:00 (Sun)
  61118060400, #  local_start 1937-10-02 23:00:00 (Sat)
  61133180400, #    local_end 1938-03-26 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  61133184000, #    utc_start 1938-03-27 00:00:00 (Sun)
  61149513600, #      utc_end 1938-10-02 00:00:00 (Sun)
  61133184000, #  local_start 1938-03-27 00:00:00 (Sun)
  61149513600, #    local_end 1938-10-02 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61149513600, #    utc_start 1938-10-02 00:00:00 (Sun)
  61166448000, #      utc_end 1939-04-16 00:00:00 (Sun)
  61149510000, #  local_start 1938-10-01 23:00:00 (Sat)
  61166444400, #    local_end 1939-04-15 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  61166448000, #    utc_start 1939-04-16 00:00:00 (Sun)
  61185196800, #      utc_end 1939-11-19 00:00:00 (Sun)
  61166448000, #  local_start 1939-04-16 00:00:00 (Sun)
  61185196800, #    local_end 1939-11-19 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61185196800, #    utc_start 1939-11-19 00:00:00 (Sun)
  61193664000, #      utc_end 1940-02-25 00:00:00 (Sun)
  61185193200, #  local_start 1939-11-18 23:00:00 (Sat)
  61193660400, #    local_end 1940-02-24 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  61193664000, #    utc_start 1940-02-25 00:00:00 (Sun)
  61213017600, #      utc_end 1940-10-06 00:00:00 (Sun)
  61193664000, #  local_start 1940-02-25 00:00:00 (Sun)
  61213017600, #    local_end 1940-10-06 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61213017600, #    utc_start 1940-10-06 00:00:00 (Sun)
  61228742400, #      utc_end 1941-04-06 00:00:00 (Sun)
  61213014000, #  local_start 1940-10-05 23:00:00 (Sat)
  61228738800, #    local_end 1941-04-05 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  61228742400, #    utc_start 1941-04-06 00:00:00 (Sun)
  61244553600, #      utc_end 1941-10-06 00:00:00 (Mon)
  61228742400, #  local_start 1941-04-06 00:00:00 (Sun)
  61244553600, #    local_end 1941-10-06 00:00:00 (Mon)
  0,
  1,
  'MADST',
      ],
      [
  61244553600, #    utc_start 1941-10-06 00:00:00 (Mon)
  61258377600, #      utc_end 1942-03-15 00:00:00 (Sun)
  61244550000, #  local_start 1941-10-05 23:00:00 (Sun)
  61258374000, #    local_end 1942-03-14 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  61258377600, #    utc_start 1942-03-15 00:00:00 (Sun)
  61262002800, #      utc_end 1942-04-25 23:00:00 (Sat)
  61258377600, #  local_start 1942-03-15 00:00:00 (Sun)
  61262002800, #    local_end 1942-04-25 23:00:00 (Sat)
  0,
  1,
  'MADST',
      ],
      [
  61262002800, #    utc_start 1942-04-25 23:00:00 (Sat)
  61271679600, #      utc_end 1942-08-15 23:00:00 (Sat)
  61262006400, #  local_start 1942-04-26 00:00:00 (Sun)
  61271683200, #    local_end 1942-08-16 00:00:00 (Sun)
  3600,
  1,
  'MADMT',
      ],
      [
  61271679600, #    utc_start 1942-08-15 23:00:00 (Sat)
  61277731200, #      utc_end 1942-10-25 00:00:00 (Sun)
  61271679600, #  local_start 1942-08-15 23:00:00 (Sat)
  61277731200, #    local_end 1942-10-25 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61277731200, #    utc_start 1942-10-25 00:00:00 (Sun)
  61289827200, #      utc_end 1943-03-14 00:00:00 (Sun)
  61277727600, #  local_start 1942-10-24 23:00:00 (Sat)
  61289823600, #    local_end 1943-03-13 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  61289827200, #    utc_start 1943-03-14 00:00:00 (Sun)
  61292847600, #      utc_end 1943-04-17 23:00:00 (Sat)
  61289827200, #  local_start 1943-03-14 00:00:00 (Sun)
  61292847600, #    local_end 1943-04-17 23:00:00 (Sat)
  0,
  1,
  'MADST',
      ],
      [
  61292847600, #    utc_start 1943-04-17 23:00:00 (Sat)
  61304338800, #      utc_end 1943-08-28 23:00:00 (Sat)
  61292851200, #  local_start 1943-04-18 00:00:00 (Sun)
  61304342400, #    local_end 1943-08-29 00:00:00 (Sun)
  3600,
  1,
  'MADMT',
      ],
      [
  61304338800, #    utc_start 1943-08-28 23:00:00 (Sat)
  61309785600, #      utc_end 1943-10-31 00:00:00 (Sun)
  61304338800, #  local_start 1943-08-28 23:00:00 (Sat)
  61309785600, #    local_end 1943-10-31 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61309785600, #    utc_start 1943-10-31 00:00:00 (Sun)
  61321276800, #      utc_end 1944-03-12 00:00:00 (Sun)
  61309782000, #  local_start 1943-10-30 23:00:00 (Sat)
  61321273200, #    local_end 1944-03-11 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  61321276800, #    utc_start 1944-03-12 00:00:00 (Sun)
  61324902000, #      utc_end 1944-04-22 23:00:00 (Sat)
  61321276800, #  local_start 1944-03-12 00:00:00 (Sun)
  61324902000, #    local_end 1944-04-22 23:00:00 (Sat)
  0,
  1,
  'MADST',
      ],
      [
  61324902000, #    utc_start 1944-04-22 23:00:00 (Sat)
  61335788400, #      utc_end 1944-08-26 23:00:00 (Sat)
  61324905600, #  local_start 1944-04-23 00:00:00 (Sun)
  61335792000, #    local_end 1944-08-27 00:00:00 (Sun)
  3600,
  1,
  'MADMT',
      ],
      [
  61335788400, #    utc_start 1944-08-26 23:00:00 (Sat)
  61341235200, #      utc_end 1944-10-29 00:00:00 (Sun)
  61335788400, #  local_start 1944-08-26 23:00:00 (Sat)
  61341235200, #    local_end 1944-10-29 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61341235200, #    utc_start 1944-10-29 00:00:00 (Sun)
  61352726400, #      utc_end 1945-03-11 00:00:00 (Sun)
  61341231600, #  local_start 1944-10-28 23:00:00 (Sat)
  61352722800, #    local_end 1945-03-10 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  61352726400, #    utc_start 1945-03-11 00:00:00 (Sun)
  61356351600, #      utc_end 1945-04-21 23:00:00 (Sat)
  61352726400, #  local_start 1945-03-11 00:00:00 (Sun)
  61356351600, #    local_end 1945-04-21 23:00:00 (Sat)
  0,
  1,
  'MADST',
      ],
      [
  61356351600, #    utc_start 1945-04-21 23:00:00 (Sat)
  61367238000, #      utc_end 1945-08-25 23:00:00 (Sat)
  61356355200, #  local_start 1945-04-22 00:00:00 (Sun)
  61367241600, #    local_end 1945-08-26 00:00:00 (Sun)
  3600,
  1,
  'MADMT',
      ],
      [
  61367238000, #    utc_start 1945-08-25 23:00:00 (Sat)
  61372684800, #      utc_end 1945-10-28 00:00:00 (Sun)
  61367238000, #  local_start 1945-08-25 23:00:00 (Sat)
  61372684800, #    local_end 1945-10-28 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61372684800, #    utc_start 1945-10-28 00:00:00 (Sun)
  61386595200, #      utc_end 1946-04-07 00:00:00 (Sun)
  61372681200, #  local_start 1945-10-27 23:00:00 (Sat)
  61386591600, #    local_end 1946-04-06 23:00:00 (Sat)
  -3600,
  0,
  'MADT',
      ],
      [
  61386595200, #    utc_start 1946-04-07 00:00:00 (Sun)
  61402320000, #      utc_end 1946-10-06 00:00:00 (Sun)
  61386595200, #  local_start 1946-04-07 00:00:00 (Sun)
  61402320000, #    local_end 1946-10-06 00:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61402320000, #    utc_start 1946-10-06 00:00:00 (Sun)
  61418055600, #      utc_end 1947-04-06 03:00:00 (Sun)
  61402316400, #  local_start 1946-10-05 23:00:00 (Sat)
  61418052000, #    local_end 1947-04-06 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61418055600, #    utc_start 1947-04-06 03:00:00 (Sun)
  61433780400, #      utc_end 1947-10-05 03:00:00 (Sun)
  61418055600, #  local_start 1947-04-06 03:00:00 (Sun)
  61433780400, #    local_end 1947-10-05 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61433780400, #    utc_start 1947-10-05 03:00:00 (Sun)
  61449505200, #      utc_end 1948-04-04 03:00:00 (Sun)
  61433776800, #  local_start 1947-10-05 02:00:00 (Sun)
  61449501600, #    local_end 1948-04-04 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61449505200, #    utc_start 1948-04-04 03:00:00 (Sun)
  61465230000, #      utc_end 1948-10-03 03:00:00 (Sun)
  61449505200, #  local_start 1948-04-04 03:00:00 (Sun)
  61465230000, #    local_end 1948-10-03 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61465230000, #    utc_start 1948-10-03 03:00:00 (Sun)
  61480954800, #      utc_end 1949-04-03 03:00:00 (Sun)
  61465226400, #  local_start 1948-10-03 02:00:00 (Sun)
  61480951200, #    local_end 1949-04-03 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61480954800, #    utc_start 1949-04-03 03:00:00 (Sun)
  61496679600, #      utc_end 1949-10-02 03:00:00 (Sun)
  61480954800, #  local_start 1949-04-03 03:00:00 (Sun)
  61496679600, #    local_end 1949-10-02 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61496679600, #    utc_start 1949-10-02 03:00:00 (Sun)
  61543854000, #      utc_end 1951-04-01 03:00:00 (Sun)
  61496676000, #  local_start 1949-10-02 02:00:00 (Sun)
  61543850400, #    local_end 1951-04-01 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61543854000, #    utc_start 1951-04-01 03:00:00 (Sun)
  61560183600, #      utc_end 1951-10-07 03:00:00 (Sun)
  61543854000, #  local_start 1951-04-01 03:00:00 (Sun)
  61560183600, #    local_end 1951-10-07 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61560183600, #    utc_start 1951-10-07 03:00:00 (Sun)
  61575908400, #      utc_end 1952-04-06 03:00:00 (Sun)
  61560180000, #  local_start 1951-10-07 02:00:00 (Sun)
  61575904800, #    local_end 1952-04-06 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61575908400, #    utc_start 1952-04-06 03:00:00 (Sun)
  61591633200, #      utc_end 1952-10-05 03:00:00 (Sun)
  61575908400, #  local_start 1952-04-06 03:00:00 (Sun)
  61591633200, #    local_end 1952-10-05 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61591633200, #    utc_start 1952-10-05 03:00:00 (Sun)
  61607358000, #      utc_end 1953-04-05 03:00:00 (Sun)
  61591629600, #  local_start 1952-10-05 02:00:00 (Sun)
  61607354400, #    local_end 1953-04-05 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61607358000, #    utc_start 1953-04-05 03:00:00 (Sun)
  61623082800, #      utc_end 1953-10-04 03:00:00 (Sun)
  61607358000, #  local_start 1953-04-05 03:00:00 (Sun)
  61623082800, #    local_end 1953-10-04 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61623082800, #    utc_start 1953-10-04 03:00:00 (Sun)
  61638807600, #      utc_end 1954-04-04 03:00:00 (Sun)
  61623079200, #  local_start 1953-10-04 02:00:00 (Sun)
  61638804000, #    local_end 1954-04-04 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61638807600, #    utc_start 1954-04-04 03:00:00 (Sun)
  61654532400, #      utc_end 1954-10-03 03:00:00 (Sun)
  61638807600, #  local_start 1954-04-04 03:00:00 (Sun)
  61654532400, #    local_end 1954-10-03 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61654532400, #    utc_start 1954-10-03 03:00:00 (Sun)
  61670257200, #      utc_end 1955-04-03 03:00:00 (Sun)
  61654528800, #  local_start 1954-10-03 02:00:00 (Sun)
  61670253600, #    local_end 1955-04-03 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61670257200, #    utc_start 1955-04-03 03:00:00 (Sun)
  61685982000, #      utc_end 1955-10-02 03:00:00 (Sun)
  61670257200, #  local_start 1955-04-03 03:00:00 (Sun)
  61685982000, #    local_end 1955-10-02 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61685982000, #    utc_start 1955-10-02 03:00:00 (Sun)
  61701706800, #      utc_end 1956-04-01 03:00:00 (Sun)
  61685978400, #  local_start 1955-10-02 02:00:00 (Sun)
  61701703200, #    local_end 1956-04-01 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61701706800, #    utc_start 1956-04-01 03:00:00 (Sun)
  61718036400, #      utc_end 1956-10-07 03:00:00 (Sun)
  61701706800, #  local_start 1956-04-01 03:00:00 (Sun)
  61718036400, #    local_end 1956-10-07 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61718036400, #    utc_start 1956-10-07 03:00:00 (Sun)
  61733761200, #      utc_end 1957-04-07 03:00:00 (Sun)
  61718032800, #  local_start 1956-10-07 02:00:00 (Sun)
  61733757600, #    local_end 1957-04-07 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61733761200, #    utc_start 1957-04-07 03:00:00 (Sun)
  61749486000, #      utc_end 1957-10-06 03:00:00 (Sun)
  61733761200, #  local_start 1957-04-07 03:00:00 (Sun)
  61749486000, #    local_end 1957-10-06 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61749486000, #    utc_start 1957-10-06 03:00:00 (Sun)
  61765210800, #      utc_end 1958-04-06 03:00:00 (Sun)
  61749482400, #  local_start 1957-10-06 02:00:00 (Sun)
  61765207200, #    local_end 1958-04-06 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61765210800, #    utc_start 1958-04-06 03:00:00 (Sun)
  61780935600, #      utc_end 1958-10-05 03:00:00 (Sun)
  61765210800, #  local_start 1958-04-06 03:00:00 (Sun)
  61780935600, #    local_end 1958-10-05 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61780935600, #    utc_start 1958-10-05 03:00:00 (Sun)
  61796660400, #      utc_end 1959-04-05 03:00:00 (Sun)
  61780932000, #  local_start 1958-10-05 02:00:00 (Sun)
  61796656800, #    local_end 1959-04-05 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61796660400, #    utc_start 1959-04-05 03:00:00 (Sun)
  61812385200, #      utc_end 1959-10-04 03:00:00 (Sun)
  61796660400, #  local_start 1959-04-05 03:00:00 (Sun)
  61812385200, #    local_end 1959-10-04 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61812385200, #    utc_start 1959-10-04 03:00:00 (Sun)
  61828110000, #      utc_end 1960-04-03 03:00:00 (Sun)
  61812381600, #  local_start 1959-10-04 02:00:00 (Sun)
  61828106400, #    local_end 1960-04-03 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61828110000, #    utc_start 1960-04-03 03:00:00 (Sun)
  61843834800, #      utc_end 1960-10-02 03:00:00 (Sun)
  61828110000, #  local_start 1960-04-03 03:00:00 (Sun)
  61843834800, #    local_end 1960-10-02 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61843834800, #    utc_start 1960-10-02 03:00:00 (Sun)
  61859559600, #      utc_end 1961-04-02 03:00:00 (Sun)
  61843831200, #  local_start 1960-10-02 02:00:00 (Sun)
  61859556000, #    local_end 1961-04-02 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61859559600, #    utc_start 1961-04-02 03:00:00 (Sun)
  61875284400, #      utc_end 1961-10-01 03:00:00 (Sun)
  61859559600, #  local_start 1961-04-02 03:00:00 (Sun)
  61875284400, #    local_end 1961-10-01 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61875284400, #    utc_start 1961-10-01 03:00:00 (Sun)
  61891009200, #      utc_end 1962-04-01 03:00:00 (Sun)
  61875280800, #  local_start 1961-10-01 02:00:00 (Sun)
  61891005600, #    local_end 1962-04-01 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61891009200, #    utc_start 1962-04-01 03:00:00 (Sun)
  61907338800, #      utc_end 1962-10-07 03:00:00 (Sun)
  61891009200, #  local_start 1962-04-01 03:00:00 (Sun)
  61907338800, #    local_end 1962-10-07 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61907338800, #    utc_start 1962-10-07 03:00:00 (Sun)
  61923063600, #      utc_end 1963-04-07 03:00:00 (Sun)
  61907335200, #  local_start 1962-10-07 02:00:00 (Sun)
  61923060000, #    local_end 1963-04-07 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61923063600, #    utc_start 1963-04-07 03:00:00 (Sun)
  61938788400, #      utc_end 1963-10-06 03:00:00 (Sun)
  61923063600, #  local_start 1963-04-07 03:00:00 (Sun)
  61938788400, #    local_end 1963-10-06 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61938788400, #    utc_start 1963-10-06 03:00:00 (Sun)
  61954513200, #      utc_end 1964-04-05 03:00:00 (Sun)
  61938784800, #  local_start 1963-10-06 02:00:00 (Sun)
  61954509600, #    local_end 1964-04-05 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61954513200, #    utc_start 1964-04-05 03:00:00 (Sun)
  61970238000, #      utc_end 1964-10-04 03:00:00 (Sun)
  61954513200, #  local_start 1964-04-05 03:00:00 (Sun)
  61970238000, #    local_end 1964-10-04 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  61970238000, #    utc_start 1964-10-04 03:00:00 (Sun)
  61985962800, #      utc_end 1965-04-04 03:00:00 (Sun)
  61970234400, #  local_start 1964-10-04 02:00:00 (Sun)
  61985959200, #    local_end 1965-04-04 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  61985962800, #    utc_start 1965-04-04 03:00:00 (Sun)
  62001687600, #      utc_end 1965-10-03 03:00:00 (Sun)
  61985962800, #  local_start 1965-04-04 03:00:00 (Sun)
  62001687600, #    local_end 1965-10-03 03:00:00 (Sun)
  0,
  1,
  'MADST',
      ],
      [
  62001687600, #    utc_start 1965-10-03 03:00:00 (Sun)
  62017412400, #      utc_end 1966-04-03 03:00:00 (Sun)
  62001684000, #  local_start 1965-10-03 02:00:00 (Sun)
  62017408800, #    local_end 1966-04-03 02:00:00 (Sun)
  -3600,
  0,
  'MADT',
      ],
      [
  62017412400, #    utc_start 1966-04-03 03:00:00 (Sun)
  62363952000, #      utc_end 1977-03-27 00:00:00 (Sun)
  62017412400, #  local_start 1966-04-03 03:00:00 (Sun)
  62363952000, #    local_end 1977-03-27 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62363952000, #    utc_start 1977-03-27 00:00:00 (Sun)
  62379676800, #      utc_end 1977-09-25 00:00:00 (Sun)
  62363955600, #  local_start 1977-03-27 01:00:00 (Sun)
  62379680400, #    local_end 1977-09-25 01:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62379676800, #    utc_start 1977-09-25 00:00:00 (Sun)
  62396006400, #      utc_end 1978-04-02 00:00:00 (Sun)
  62379676800, #  local_start 1977-09-25 00:00:00 (Sun)
  62396006400, #    local_end 1978-04-02 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62396006400, #    utc_start 1978-04-02 00:00:00 (Sun)
  62411731200, #      utc_end 1978-10-01 00:00:00 (Sun)
  62396010000, #  local_start 1978-04-02 01:00:00 (Sun)
  62411734800, #    local_end 1978-10-01 01:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62411731200, #    utc_start 1978-10-01 00:00:00 (Sun)
  62427456000, #      utc_end 1979-04-01 00:00:00 (Sun)
  62411731200, #  local_start 1978-10-01 00:00:00 (Sun)
  62427456000, #    local_end 1979-04-01 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62427456000, #    utc_start 1979-04-01 00:00:00 (Sun)
  62443184400, #      utc_end 1979-09-30 01:00:00 (Sun)
  62427459600, #  local_start 1979-04-01 01:00:00 (Sun)
  62443188000, #    local_end 1979-09-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62443184400, #    utc_start 1979-09-30 01:00:00 (Sun)
  62458905600, #      utc_end 1980-03-30 00:00:00 (Sun)
  62443184400, #  local_start 1979-09-30 01:00:00 (Sun)
  62458905600, #    local_end 1980-03-30 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62458905600, #    utc_start 1980-03-30 00:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62458909200, #  local_start 1980-03-30 01:00:00 (Sun)
  62474637600, #    local_end 1980-09-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474634000, #  local_start 1980-09-28 01:00:00 (Sun)
  62490358800, #    local_end 1981-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490362400, #  local_start 1981-03-29 02:00:00 (Sun)
  62506087200, #    local_end 1981-09-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506083600, #  local_start 1981-09-27 01:00:00 (Sun)
  62521808400, #    local_end 1982-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521812000, #  local_start 1982-03-28 02:00:00 (Sun)
  62537536800, #    local_end 1982-09-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553261600, #      utc_end 1983-03-27 02:00:00 (Sun)
  62537533200, #  local_start 1982-09-26 01:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62553261600, #    utc_start 1983-03-27 02:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568986400, #    local_end 1983-09-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568982800, #  local_start 1983-09-25 01:00:00 (Sun)
  62584707600, #    local_end 1984-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584711200, #  local_start 1984-03-25 02:00:00 (Sun)
  62601040800, #    local_end 1984-09-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601037200, #  local_start 1984-09-30 01:00:00 (Sun)
  62616762000, #    local_end 1985-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616765600, #  local_start 1985-03-31 02:00:00 (Sun)
  62632490400, #    local_end 1985-09-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632486800, #  local_start 1985-09-29 01:00:00 (Sun)
  62648211600, #    local_end 1986-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648215200, #  local_start 1986-03-30 02:00:00 (Sun)
  62663940000, #    local_end 1986-09-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663936400, #  local_start 1986-09-28 01:00:00 (Sun)
  62679661200, #    local_end 1987-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679664800, #  local_start 1987-03-29 02:00:00 (Sun)
  62695389600, #    local_end 1987-09-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695386000, #  local_start 1987-09-27 01:00:00 (Sun)
  62711110800, #    local_end 1988-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711114400, #  local_start 1988-03-27 02:00:00 (Sun)
  62726839200, #    local_end 1988-09-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726835600, #  local_start 1988-09-25 01:00:00 (Sun)
  62742560400, #    local_end 1989-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62758288800, #    local_end 1989-09-24 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758285200, #  local_start 1989-09-24 01:00:00 (Sun)
  62774010000, #    local_end 1990-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774013600, #  local_start 1990-03-25 02:00:00 (Sun)
  62790343200, #    local_end 1990-09-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790339600, #  local_start 1990-09-30 01:00:00 (Sun)
  62806064400, #    local_end 1991-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821792800, #    local_end 1991-09-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821789200, #  local_start 1991-09-29 01:00:00 (Sun)
  62837514000, #    local_end 1992-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62853242400, #    local_end 1992-09-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853238800, #  local_start 1992-09-27 01:00:00 (Sun)
  62868963600, #    local_end 1993-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868967200, #  local_start 1993-03-28 02:00:00 (Sun)
  62884692000, #    local_end 1993-09-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884688400, #  local_start 1993-09-26 01:00:00 (Sun)
  62900413200, #    local_end 1994-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900416800, #  local_start 1994-03-27 02:00:00 (Sun)
  62916141600, #    local_end 1994-09-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916138000, #  local_start 1994-09-25 01:00:00 (Sun)
  62931862800, #    local_end 1995-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931866400, #  local_start 1995-03-26 02:00:00 (Sun)
  62947591200, #    local_end 1995-09-24 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947587600, #  local_start 1995-09-24 01:00:00 (Sun)
  62963917200, #    local_end 1996-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963920800, #  local_start 1996-03-31 02:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995366800, #    local_end 1997-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995370400, #  local_start 1997-03-30 02:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63026816400, #    local_end 1998-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026820000, #  local_start 1998-03-29 02:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058266000, #    local_end 1999-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058269600, #  local_start 1999-03-28 02:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63089715600, #    local_end 2000-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089719200, #  local_start 2000-03-26 02:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121165200, #    local_end 2001-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121168800, #  local_start 2001-03-25 02:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153219600, #    local_end 2002-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153223200, #  local_start 2002-03-31 02:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63184669200, #    local_end 2003-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184672800, #  local_start 2003-03-30 02:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216118800, #    local_end 2004-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216122400, #  local_start 2004-03-28 02:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63247568400, #    local_end 2005-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247572000, #  local_start 2005-03-27 02:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279018000, #    local_end 2006-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279021600, #  local_start 2006-03-26 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63310467600, #    local_end 2007-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310471200, #  local_start 2007-03-25 02:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63342522000, #    local_end 2008-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342525600, #  local_start 2008-03-30 02:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63373971600, #    local_end 2009-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373975200, #  local_start 2009-03-29 02:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63405421200, #    local_end 2010-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405424800, #  local_start 2010-03-28 02:00:00 (Sun)
  63424173600, #    local_end 2010-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424170000, #  local_start 2010-10-31 01:00:00 (Sun)
  63436870800, #    local_end 2011-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436874400, #  local_start 2011-03-27 02:00:00 (Sun)
  63455623200, #    local_end 2011-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455619600, #  local_start 2011-10-30 01:00:00 (Sun)
  63468320400, #    local_end 2012-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468324000, #  local_start 2012-03-25 02:00:00 (Sun)
  63487072800, #    local_end 2012-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487069200, #  local_start 2012-10-28 01:00:00 (Sun)
  63500374800, #    local_end 2013-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500378400, #  local_start 2013-03-31 02:00:00 (Sun)
  63518522400, #    local_end 2013-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518518800, #  local_start 2013-10-27 01:00:00 (Sun)
  63531824400, #    local_end 2014-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531828000, #  local_start 2014-03-30 02:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63563274000, #    local_end 2015-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563277600, #  local_start 2015-03-29 02:00:00 (Sun)
  63581421600, #    local_end 2015-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581418000, #  local_start 2015-10-25 01:00:00 (Sun)
  63594723600, #    local_end 2016-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594727200, #  local_start 2016-03-27 02:00:00 (Sun)
  63613476000, #    local_end 2016-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613472400, #  local_start 2016-10-30 01:00:00 (Sun)
  63626173200, #    local_end 2017-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626176800, #  local_start 2017-03-26 02:00:00 (Sun)
  63644925600, #    local_end 2017-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644922000, #  local_start 2017-10-29 01:00:00 (Sun)
  63657622800, #    local_end 2018-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657626400, #  local_start 2018-03-25 02:00:00 (Sun)
  63676375200, #    local_end 2018-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676371600, #  local_start 2018-10-28 01:00:00 (Sun)
  63689677200, #    local_end 2019-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689680800, #  local_start 2019-03-31 02:00:00 (Sun)
  63707824800, #    local_end 2019-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707821200, #  local_start 2019-10-27 01:00:00 (Sun)
  63721126800, #    local_end 2020-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721130400, #  local_start 2020-03-29 02:00:00 (Sun)
  63739274400, #    local_end 2020-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739270800, #  local_start 2020-10-25 01:00:00 (Sun)
  63752576400, #    local_end 2021-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752580000, #  local_start 2021-03-28 02:00:00 (Sun)
  63771328800, #    local_end 2021-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771325200, #  local_start 2021-10-31 01:00:00 (Sun)
  63784026000, #    local_end 2022-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784029600, #  local_start 2022-03-27 02:00:00 (Sun)
  63802778400, #    local_end 2022-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802774800, #  local_start 2022-10-30 01:00:00 (Sun)
  63815475600, #    local_end 2023-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815479200, #  local_start 2023-03-26 02:00:00 (Sun)
  63834228000, #    local_end 2023-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834224400, #  local_start 2023-10-29 01:00:00 (Sun)
  63847530000, #    local_end 2024-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847533600, #  local_start 2024-03-31 02:00:00 (Sun)
  63865677600, #    local_end 2024-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865674000, #  local_start 2024-10-27 01:00:00 (Sun)
  63878979600, #    local_end 2025-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878983200, #  local_start 2025-03-30 02:00:00 (Sun)
  63897127200, #    local_end 2025-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897123600, #  local_start 2025-10-26 01:00:00 (Sun)
  63910429200, #    local_end 2026-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910432800, #  local_start 2026-03-29 02:00:00 (Sun)
  63928576800, #    local_end 2026-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928573200, #  local_start 2026-10-25 01:00:00 (Sun)
  63941878800, #    local_end 2027-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941882400, #  local_start 2027-03-28 02:00:00 (Sun)
  63960631200, #    local_end 2027-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {103}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 0 }
  
  my $last_observance = bless( {
    'format' => 'WE%sT',
    'gmtoff' => '0:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724178,
      'local_rd_secs' => 3600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724178,
      'utc_rd_secs' => 3600,
      'utc_year' => 1984
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 0,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724178,
      'local_rd_secs' => 3600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724178,
      'utc_rd_secs' => 3600,
      'utc_year' => 1984
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_ATLANTIC_MADEIRA

    $main::fatpacked{"DateTime/TimeZone/Atlantic/Reykjavik.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ATLANTIC_REYKJAVIK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Atlantic::Reykjavik;
  $DateTime::TimeZone::Atlantic::Reykjavik::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Atlantic::Reykjavik::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60179074080, #      utc_end 1908-01-01 01:28:00 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60179068800, #    local_end 1908-01-01 00:00:00 (Wed)
  -5280,
  0,
  'LMT',
      ],
      [
  60179074080, #    utc_start 1908-01-01 01:28:00 (Wed)
  60467472000, #      utc_end 1917-02-20 00:00:00 (Tue)
  60179070480, #  local_start 1908-01-01 00:28:00 (Wed)
  60467468400, #    local_end 1917-02-19 23:00:00 (Mon)
  -3600,
  0,
  'IST',
      ],
      [
  60467472000, #    utc_start 1917-02-20 00:00:00 (Tue)
  60488470800, #      utc_end 1917-10-21 01:00:00 (Sun)
  60467472000, #  local_start 1917-02-20 00:00:00 (Tue)
  60488470800, #    local_end 1917-10-21 01:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  60488470800, #    utc_start 1917-10-21 01:00:00 (Sun)
  60499008000, #      utc_end 1918-02-20 00:00:00 (Wed)
  60488467200, #  local_start 1917-10-21 00:00:00 (Sun)
  60499004400, #    local_end 1918-02-19 23:00:00 (Tue)
  -3600,
  0,
  'IST',
      ],
      [
  60499008000, #    utc_start 1918-02-20 00:00:00 (Wed)
  60522253200, #      utc_end 1918-11-16 01:00:00 (Sat)
  60499008000, #  local_start 1918-02-20 00:00:00 (Wed)
  60522253200, #    local_end 1918-11-16 01:00:00 (Sat)
  0,
  1,
  'ISST',
      ],
      [
  60522253200, #    utc_start 1918-11-16 01:00:00 (Sat)
  60530544000, #      utc_end 1919-02-20 00:00:00 (Thu)
  60522249600, #  local_start 1918-11-16 00:00:00 (Sat)
  60530540400, #    local_end 1919-02-19 23:00:00 (Wed)
  -3600,
  0,
  'IST',
      ],
      [
  60530544000, #    utc_start 1919-02-20 00:00:00 (Thu)
  60553789200, #      utc_end 1919-11-16 01:00:00 (Sun)
  60530544000, #  local_start 1919-02-20 00:00:00 (Thu)
  60553789200, #    local_end 1919-11-16 01:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  60553789200, #    utc_start 1919-11-16 01:00:00 (Sun)
  60596121600, #      utc_end 1921-03-20 00:00:00 (Sun)
  60553785600, #  local_start 1919-11-16 00:00:00 (Sun)
  60596118000, #    local_end 1921-03-19 23:00:00 (Sat)
  -3600,
  0,
  'IST',
      ],
      [
  60596121600, #    utc_start 1921-03-20 00:00:00 (Sun)
  60604333200, #      utc_end 1921-06-23 01:00:00 (Thu)
  60596121600, #  local_start 1921-03-20 00:00:00 (Sun)
  60604333200, #    local_end 1921-06-23 01:00:00 (Thu)
  0,
  1,
  'ISST',
      ],
      [
  60604333200, #    utc_start 1921-06-23 01:00:00 (Thu)
  61167657600, #      utc_end 1939-04-30 00:00:00 (Sun)
  60604329600, #  local_start 1921-06-23 00:00:00 (Thu)
  61167654000, #    local_end 1939-04-29 23:00:00 (Sat)
  -3600,
  0,
  'IST',
      ],
      [
  61167657600, #    utc_start 1939-04-30 00:00:00 (Sun)
  61183389600, #      utc_end 1939-10-29 02:00:00 (Sun)
  61167657600, #  local_start 1939-04-30 00:00:00 (Sun)
  61183389600, #    local_end 1939-10-29 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61183389600, #    utc_start 1939-10-29 02:00:00 (Sun)
  61193674800, #      utc_end 1940-02-25 03:00:00 (Sun)
  61183386000, #  local_start 1939-10-29 01:00:00 (Sun)
  61193671200, #    local_end 1940-02-25 02:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61193674800, #    utc_start 1940-02-25 03:00:00 (Sun)
  61215444000, #      utc_end 1940-11-03 02:00:00 (Sun)
  61193674800, #  local_start 1940-02-25 03:00:00 (Sun)
  61215444000, #    local_end 1940-11-03 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61215444000, #    utc_start 1940-11-03 02:00:00 (Sun)
  61225725600, #      utc_end 1941-03-02 02:00:00 (Sun)
  61215440400, #  local_start 1940-11-03 01:00:00 (Sun)
  61225722000, #    local_end 1941-03-02 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61225725600, #    utc_start 1941-03-02 02:00:00 (Sun)
  61246893600, #      utc_end 1941-11-02 02:00:00 (Sun)
  61225725600, #  local_start 1941-03-02 02:00:00 (Sun)
  61246893600, #    local_end 1941-11-02 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61246893600, #    utc_start 1941-11-02 02:00:00 (Sun)
  61257780000, #      utc_end 1942-03-08 02:00:00 (Sun)
  61246890000, #  local_start 1941-11-02 01:00:00 (Sun)
  61257776400, #    local_end 1942-03-08 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61257780000, #    utc_start 1942-03-08 02:00:00 (Sun)
  61277738400, #      utc_end 1942-10-25 02:00:00 (Sun)
  61257780000, #  local_start 1942-03-08 02:00:00 (Sun)
  61277738400, #    local_end 1942-10-25 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61277738400, #    utc_start 1942-10-25 02:00:00 (Sun)
  61289229600, #      utc_end 1943-03-07 02:00:00 (Sun)
  61277734800, #  local_start 1942-10-25 01:00:00 (Sun)
  61289226000, #    local_end 1943-03-07 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61289229600, #    utc_start 1943-03-07 02:00:00 (Sun)
  61309188000, #      utc_end 1943-10-24 02:00:00 (Sun)
  61289229600, #  local_start 1943-03-07 02:00:00 (Sun)
  61309188000, #    local_end 1943-10-24 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61309188000, #    utc_start 1943-10-24 02:00:00 (Sun)
  61320679200, #      utc_end 1944-03-05 02:00:00 (Sun)
  61309184400, #  local_start 1943-10-24 01:00:00 (Sun)
  61320675600, #    local_end 1944-03-05 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61320679200, #    utc_start 1944-03-05 02:00:00 (Sun)
  61340637600, #      utc_end 1944-10-22 02:00:00 (Sun)
  61320679200, #  local_start 1944-03-05 02:00:00 (Sun)
  61340637600, #    local_end 1944-10-22 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61340637600, #    utc_start 1944-10-22 02:00:00 (Sun)
  61352128800, #      utc_end 1945-03-04 02:00:00 (Sun)
  61340634000, #  local_start 1944-10-22 01:00:00 (Sun)
  61352125200, #    local_end 1945-03-04 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61352128800, #    utc_start 1945-03-04 02:00:00 (Sun)
  61372692000, #      utc_end 1945-10-28 02:00:00 (Sun)
  61352128800, #  local_start 1945-03-04 02:00:00 (Sun)
  61372692000, #    local_end 1945-10-28 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61372692000, #    utc_start 1945-10-28 02:00:00 (Sun)
  61383578400, #      utc_end 1946-03-03 02:00:00 (Sun)
  61372688400, #  local_start 1945-10-28 01:00:00 (Sun)
  61383574800, #    local_end 1946-03-03 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61383578400, #    utc_start 1946-03-03 02:00:00 (Sun)
  61404141600, #      utc_end 1946-10-27 02:00:00 (Sun)
  61383578400, #  local_start 1946-03-03 02:00:00 (Sun)
  61404141600, #    local_end 1946-10-27 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61404141600, #    utc_start 1946-10-27 02:00:00 (Sun)
  61418052000, #      utc_end 1947-04-06 02:00:00 (Sun)
  61404138000, #  local_start 1946-10-27 01:00:00 (Sun)
  61418048400, #    local_end 1947-04-06 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61418052000, #    utc_start 1947-04-06 02:00:00 (Sun)
  61435591200, #      utc_end 1947-10-26 02:00:00 (Sun)
  61418052000, #  local_start 1947-04-06 02:00:00 (Sun)
  61435591200, #    local_end 1947-10-26 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61435591200, #    utc_start 1947-10-26 02:00:00 (Sun)
  61449501600, #      utc_end 1948-04-04 02:00:00 (Sun)
  61435587600, #  local_start 1947-10-26 01:00:00 (Sun)
  61449498000, #    local_end 1948-04-04 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61449501600, #    utc_start 1948-04-04 02:00:00 (Sun)
  61467040800, #      utc_end 1948-10-24 02:00:00 (Sun)
  61449501600, #  local_start 1948-04-04 02:00:00 (Sun)
  61467040800, #    local_end 1948-10-24 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61467040800, #    utc_start 1948-10-24 02:00:00 (Sun)
  61480951200, #      utc_end 1949-04-03 02:00:00 (Sun)
  61467037200, #  local_start 1948-10-24 01:00:00 (Sun)
  61480947600, #    local_end 1949-04-03 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61480951200, #    utc_start 1949-04-03 02:00:00 (Sun)
  61499095200, #      utc_end 1949-10-30 02:00:00 (Sun)
  61480951200, #  local_start 1949-04-03 02:00:00 (Sun)
  61499095200, #    local_end 1949-10-30 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61499095200, #    utc_start 1949-10-30 02:00:00 (Sun)
  61512400800, #      utc_end 1950-04-02 02:00:00 (Sun)
  61499091600, #  local_start 1949-10-30 01:00:00 (Sun)
  61512397200, #    local_end 1950-04-02 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61512400800, #    utc_start 1950-04-02 02:00:00 (Sun)
  61529940000, #      utc_end 1950-10-22 02:00:00 (Sun)
  61512400800, #  local_start 1950-04-02 02:00:00 (Sun)
  61529940000, #    local_end 1950-10-22 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61529940000, #    utc_start 1950-10-22 02:00:00 (Sun)
  61543850400, #      utc_end 1951-04-01 02:00:00 (Sun)
  61529936400, #  local_start 1950-10-22 01:00:00 (Sun)
  61543846800, #    local_end 1951-04-01 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61543850400, #    utc_start 1951-04-01 02:00:00 (Sun)
  61561994400, #      utc_end 1951-10-28 02:00:00 (Sun)
  61543850400, #  local_start 1951-04-01 02:00:00 (Sun)
  61561994400, #    local_end 1951-10-28 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61561994400, #    utc_start 1951-10-28 02:00:00 (Sun)
  61575904800, #      utc_end 1952-04-06 02:00:00 (Sun)
  61561990800, #  local_start 1951-10-28 01:00:00 (Sun)
  61575901200, #    local_end 1952-04-06 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61575904800, #    utc_start 1952-04-06 02:00:00 (Sun)
  61593444000, #      utc_end 1952-10-26 02:00:00 (Sun)
  61575904800, #  local_start 1952-04-06 02:00:00 (Sun)
  61593444000, #    local_end 1952-10-26 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61593444000, #    utc_start 1952-10-26 02:00:00 (Sun)
  61607354400, #      utc_end 1953-04-05 02:00:00 (Sun)
  61593440400, #  local_start 1952-10-26 01:00:00 (Sun)
  61607350800, #    local_end 1953-04-05 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61607354400, #    utc_start 1953-04-05 02:00:00 (Sun)
  61624893600, #      utc_end 1953-10-25 02:00:00 (Sun)
  61607354400, #  local_start 1953-04-05 02:00:00 (Sun)
  61624893600, #    local_end 1953-10-25 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61624893600, #    utc_start 1953-10-25 02:00:00 (Sun)
  61638804000, #      utc_end 1954-04-04 02:00:00 (Sun)
  61624890000, #  local_start 1953-10-25 01:00:00 (Sun)
  61638800400, #    local_end 1954-04-04 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61638804000, #    utc_start 1954-04-04 02:00:00 (Sun)
  61656343200, #      utc_end 1954-10-24 02:00:00 (Sun)
  61638804000, #  local_start 1954-04-04 02:00:00 (Sun)
  61656343200, #    local_end 1954-10-24 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61656343200, #    utc_start 1954-10-24 02:00:00 (Sun)
  61670253600, #      utc_end 1955-04-03 02:00:00 (Sun)
  61656339600, #  local_start 1954-10-24 01:00:00 (Sun)
  61670250000, #    local_end 1955-04-03 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61670253600, #    utc_start 1955-04-03 02:00:00 (Sun)
  61687792800, #      utc_end 1955-10-23 02:00:00 (Sun)
  61670253600, #  local_start 1955-04-03 02:00:00 (Sun)
  61687792800, #    local_end 1955-10-23 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61687792800, #    utc_start 1955-10-23 02:00:00 (Sun)
  61701703200, #      utc_end 1956-04-01 02:00:00 (Sun)
  61687789200, #  local_start 1955-10-23 01:00:00 (Sun)
  61701699600, #    local_end 1956-04-01 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61701703200, #    utc_start 1956-04-01 02:00:00 (Sun)
  61719847200, #      utc_end 1956-10-28 02:00:00 (Sun)
  61701703200, #  local_start 1956-04-01 02:00:00 (Sun)
  61719847200, #    local_end 1956-10-28 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61719847200, #    utc_start 1956-10-28 02:00:00 (Sun)
  61733757600, #      utc_end 1957-04-07 02:00:00 (Sun)
  61719843600, #  local_start 1956-10-28 01:00:00 (Sun)
  61733754000, #    local_end 1957-04-07 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61733757600, #    utc_start 1957-04-07 02:00:00 (Sun)
  61751296800, #      utc_end 1957-10-27 02:00:00 (Sun)
  61733757600, #  local_start 1957-04-07 02:00:00 (Sun)
  61751296800, #    local_end 1957-10-27 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61751296800, #    utc_start 1957-10-27 02:00:00 (Sun)
  61765207200, #      utc_end 1958-04-06 02:00:00 (Sun)
  61751293200, #  local_start 1957-10-27 01:00:00 (Sun)
  61765203600, #    local_end 1958-04-06 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61765207200, #    utc_start 1958-04-06 02:00:00 (Sun)
  61782746400, #      utc_end 1958-10-26 02:00:00 (Sun)
  61765207200, #  local_start 1958-04-06 02:00:00 (Sun)
  61782746400, #    local_end 1958-10-26 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61782746400, #    utc_start 1958-10-26 02:00:00 (Sun)
  61796656800, #      utc_end 1959-04-05 02:00:00 (Sun)
  61782742800, #  local_start 1958-10-26 01:00:00 (Sun)
  61796653200, #    local_end 1959-04-05 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61796656800, #    utc_start 1959-04-05 02:00:00 (Sun)
  61814196000, #      utc_end 1959-10-25 02:00:00 (Sun)
  61796656800, #  local_start 1959-04-05 02:00:00 (Sun)
  61814196000, #    local_end 1959-10-25 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61814196000, #    utc_start 1959-10-25 02:00:00 (Sun)
  61828106400, #      utc_end 1960-04-03 02:00:00 (Sun)
  61814192400, #  local_start 1959-10-25 01:00:00 (Sun)
  61828102800, #    local_end 1960-04-03 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61828106400, #    utc_start 1960-04-03 02:00:00 (Sun)
  61845645600, #      utc_end 1960-10-23 02:00:00 (Sun)
  61828106400, #  local_start 1960-04-03 02:00:00 (Sun)
  61845645600, #    local_end 1960-10-23 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61845645600, #    utc_start 1960-10-23 02:00:00 (Sun)
  61859556000, #      utc_end 1961-04-02 02:00:00 (Sun)
  61845642000, #  local_start 1960-10-23 01:00:00 (Sun)
  61859552400, #    local_end 1961-04-02 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61859556000, #    utc_start 1961-04-02 02:00:00 (Sun)
  61877095200, #      utc_end 1961-10-22 02:00:00 (Sun)
  61859556000, #  local_start 1961-04-02 02:00:00 (Sun)
  61877095200, #    local_end 1961-10-22 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61877095200, #    utc_start 1961-10-22 02:00:00 (Sun)
  61891005600, #      utc_end 1962-04-01 02:00:00 (Sun)
  61877091600, #  local_start 1961-10-22 01:00:00 (Sun)
  61891002000, #    local_end 1962-04-01 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61891005600, #    utc_start 1962-04-01 02:00:00 (Sun)
  61909149600, #      utc_end 1962-10-28 02:00:00 (Sun)
  61891005600, #  local_start 1962-04-01 02:00:00 (Sun)
  61909149600, #    local_end 1962-10-28 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61909149600, #    utc_start 1962-10-28 02:00:00 (Sun)
  61923060000, #      utc_end 1963-04-07 02:00:00 (Sun)
  61909146000, #  local_start 1962-10-28 01:00:00 (Sun)
  61923056400, #    local_end 1963-04-07 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61923060000, #    utc_start 1963-04-07 02:00:00 (Sun)
  61940599200, #      utc_end 1963-10-27 02:00:00 (Sun)
  61923060000, #  local_start 1963-04-07 02:00:00 (Sun)
  61940599200, #    local_end 1963-10-27 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61940599200, #    utc_start 1963-10-27 02:00:00 (Sun)
  61954509600, #      utc_end 1964-04-05 02:00:00 (Sun)
  61940595600, #  local_start 1963-10-27 01:00:00 (Sun)
  61954506000, #    local_end 1964-04-05 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61954509600, #    utc_start 1964-04-05 02:00:00 (Sun)
  61972048800, #      utc_end 1964-10-25 02:00:00 (Sun)
  61954509600, #  local_start 1964-04-05 02:00:00 (Sun)
  61972048800, #    local_end 1964-10-25 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  61972048800, #    utc_start 1964-10-25 02:00:00 (Sun)
  61985959200, #      utc_end 1965-04-04 02:00:00 (Sun)
  61972045200, #  local_start 1964-10-25 01:00:00 (Sun)
  61985955600, #    local_end 1965-04-04 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  61985959200, #    utc_start 1965-04-04 02:00:00 (Sun)
  62003498400, #      utc_end 1965-10-24 02:00:00 (Sun)
  61985959200, #  local_start 1965-04-04 02:00:00 (Sun)
  62003498400, #    local_end 1965-10-24 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  62003498400, #    utc_start 1965-10-24 02:00:00 (Sun)
  62017408800, #      utc_end 1966-04-03 02:00:00 (Sun)
  62003494800, #  local_start 1965-10-24 01:00:00 (Sun)
  62017405200, #    local_end 1966-04-03 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  62017408800, #    utc_start 1966-04-03 02:00:00 (Sun)
  62034948000, #      utc_end 1966-10-23 02:00:00 (Sun)
  62017408800, #  local_start 1966-04-03 02:00:00 (Sun)
  62034948000, #    local_end 1966-10-23 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  62034948000, #    utc_start 1966-10-23 02:00:00 (Sun)
  62048858400, #      utc_end 1967-04-02 02:00:00 (Sun)
  62034944400, #  local_start 1966-10-23 01:00:00 (Sun)
  62048854800, #    local_end 1967-04-02 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  62048858400, #    utc_start 1967-04-02 02:00:00 (Sun)
  62067002400, #      utc_end 1967-10-29 02:00:00 (Sun)
  62048858400, #  local_start 1967-04-02 02:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  0,
  1,
  'ISST',
      ],
      [
  62067002400, #    utc_start 1967-10-29 02:00:00 (Sun)
  62080912800, #      utc_end 1968-04-07 02:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62080909200, #    local_end 1968-04-07 01:00:00 (Sun)
  -3600,
  0,
  'IST',
      ],
      [
  62080912800, #    utc_start 1968-04-07 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  62080912800, #  local_start 1968-04-07 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  0,
  0,
  'GMT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {33}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ATLANTIC_REYKJAVIK

    $main::fatpacked{"DateTime/TimeZone/Atlantic/South_Georgia.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ATLANTIC_SOUTH_GEORGIA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Atlantic::South_Georgia;
  $DateTime::TimeZone::Atlantic::South_Georgia::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Atlantic::South_Georgia::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611170368, #      utc_end 1890-01-01 02:26:08 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -8768,
  0,
  'LMT',
      ],
      [
  59611170368, #    utc_start 1890-01-01 02:26:08 (Wed)
  DateTime::TimeZone::INFINITY, #      utc_end
  59611163168, #  local_start 1890-01-01 00:26:08 (Wed)
  DateTime::TimeZone::INFINITY, #    local_end
  -7200,
  0,
  'GST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ATLANTIC_SOUTH_GEORGIA

    $main::fatpacked{"DateTime/TimeZone/Atlantic/Stanley.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_ATLANTIC_STANLEY';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Atlantic::Stanley;
  $DateTime::TimeZone::Atlantic::Stanley::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Atlantic::Stanley::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611175484, #      utc_end 1890-01-01 03:51:24 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -13884,
  0,
  'LMT',
      ],
      [
  59611175484, #    utc_start 1890-01-01 03:51:24 (Wed)
  60311447484, #      utc_end 1912-03-12 03:51:24 (Tue)
  59611161600, #  local_start 1890-01-01 00:00:00 (Wed)
  60311433600, #    local_end 1912-03-12 00:00:00 (Tue)
  -13884,
  0,
  'SMT',
      ],
      [
  60311447484, #    utc_start 1912-03-12 03:51:24 (Tue)
  61117473600, #      utc_end 1937-09-26 04:00:00 (Sun)
  60311433084, #  local_start 1912-03-11 23:51:24 (Mon)
  61117459200, #    local_end 1937-09-26 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  61117473600, #    utc_start 1937-09-26 04:00:00 (Sun)
  61132590000, #      utc_end 1938-03-20 03:00:00 (Sun)
  61117462800, #  local_start 1937-09-26 01:00:00 (Sun)
  61132579200, #    local_end 1938-03-20 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  61132590000, #    utc_start 1938-03-20 03:00:00 (Sun)
  61148923200, #      utc_end 1938-09-25 04:00:00 (Sun)
  61132575600, #  local_start 1938-03-19 23:00:00 (Sat)
  61148908800, #    local_end 1938-09-25 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  61148923200, #    utc_start 1938-09-25 04:00:00 (Sun)
  61164039600, #      utc_end 1939-03-19 03:00:00 (Sun)
  61148912400, #  local_start 1938-09-25 01:00:00 (Sun)
  61164028800, #    local_end 1939-03-19 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  61164039600, #    utc_start 1939-03-19 03:00:00 (Sun)
  61180977600, #      utc_end 1939-10-01 04:00:00 (Sun)
  61164025200, #  local_start 1939-03-18 23:00:00 (Sat)
  61180963200, #    local_end 1939-10-01 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  61180977600, #    utc_start 1939-10-01 04:00:00 (Sun)
  61196094000, #      utc_end 1940-03-24 03:00:00 (Sun)
  61180966800, #  local_start 1939-10-01 01:00:00 (Sun)
  61196083200, #    local_end 1940-03-24 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  61196094000, #    utc_start 1940-03-24 03:00:00 (Sun)
  61212427200, #      utc_end 1940-09-29 04:00:00 (Sun)
  61196079600, #  local_start 1940-03-23 23:00:00 (Sat)
  61212412800, #    local_end 1940-09-29 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  61212427200, #    utc_start 1940-09-29 04:00:00 (Sun)
  61227543600, #      utc_end 1941-03-23 03:00:00 (Sun)
  61212416400, #  local_start 1940-09-29 01:00:00 (Sun)
  61227532800, #    local_end 1941-03-23 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  61227543600, #    utc_start 1941-03-23 03:00:00 (Sun)
  61243876800, #      utc_end 1941-09-28 04:00:00 (Sun)
  61227529200, #  local_start 1941-03-22 23:00:00 (Sat)
  61243862400, #    local_end 1941-09-28 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  61243876800, #    utc_start 1941-09-28 04:00:00 (Sun)
  61258993200, #      utc_end 1942-03-22 03:00:00 (Sun)
  61243866000, #  local_start 1941-09-28 01:00:00 (Sun)
  61258982400, #    local_end 1942-03-22 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  61258993200, #    utc_start 1942-03-22 03:00:00 (Sun)
  61275326400, #      utc_end 1942-09-27 04:00:00 (Sun)
  61258978800, #  local_start 1942-03-21 23:00:00 (Sat)
  61275312000, #    local_end 1942-09-27 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  61275326400, #    utc_start 1942-09-27 04:00:00 (Sun)
  61283617200, #      utc_end 1943-01-01 03:00:00 (Fri)
  61275315600, #  local_start 1942-09-27 01:00:00 (Sun)
  61283606400, #    local_end 1943-01-01 00:00:00 (Fri)
  -10800,
  1,
  'FKST',
      ],
      [
  61283617200, #    utc_start 1943-01-01 03:00:00 (Fri)
  62556292800, #      utc_end 1983-05-01 04:00:00 (Sun)
  61283602800, #  local_start 1942-12-31 23:00:00 (Thu)
  62556278400, #    local_end 1983-05-01 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  62556292800, #    utc_start 1983-05-01 04:00:00 (Sun)
  62568990000, #      utc_end 1983-09-25 03:00:00 (Sun)
  62556282000, #  local_start 1983-05-01 01:00:00 (Sun)
  62568979200, #    local_end 1983-09-25 00:00:00 (Sun)
  -10800,
  0,
  'FKT',
      ],
      [
  62568990000, #    utc_start 1983-09-25 03:00:00 (Sun)
  62587735200, #      utc_end 1984-04-29 02:00:00 (Sun)
  62568982800, #  local_start 1983-09-25 01:00:00 (Sun)
  62587728000, #    local_end 1984-04-29 00:00:00 (Sun)
  -7200,
  1,
  'FKST',
      ],
      [
  62587735200, #    utc_start 1984-04-29 02:00:00 (Sun)
  62599834800, #      utc_end 1984-09-16 03:00:00 (Sun)
  62587724400, #  local_start 1984-04-28 23:00:00 (Sat)
  62599824000, #    local_end 1984-09-16 00:00:00 (Sun)
  -10800,
  0,
  'FKT',
      ],
      [
  62599834800, #    utc_start 1984-09-16 03:00:00 (Sun)
  62619184800, #      utc_end 1985-04-28 02:00:00 (Sun)
  62599827600, #  local_start 1984-09-16 01:00:00 (Sun)
  62619177600, #    local_end 1985-04-28 00:00:00 (Sun)
  -7200,
  1,
  'FKST',
      ],
      [
  62619184800, #    utc_start 1985-04-28 02:00:00 (Sun)
  62631284400, #      utc_end 1985-09-15 03:00:00 (Sun)
  62619174000, #  local_start 1985-04-27 23:00:00 (Sat)
  62631273600, #    local_end 1985-09-15 00:00:00 (Sun)
  -10800,
  0,
  'FKT',
      ],
      [
  62631284400, #    utc_start 1985-09-15 03:00:00 (Sun)
  62650033200, #      utc_end 1986-04-20 03:00:00 (Sun)
  62631273600, #  local_start 1985-09-15 00:00:00 (Sun)
  62650022400, #    local_end 1986-04-20 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  62650033200, #    utc_start 1986-04-20 03:00:00 (Sun)
  62662737600, #      utc_end 1986-09-14 04:00:00 (Sun)
  62650018800, #  local_start 1986-04-19 23:00:00 (Sat)
  62662723200, #    local_end 1986-09-14 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  62662737600, #    utc_start 1986-09-14 04:00:00 (Sun)
  62681482800, #      utc_end 1987-04-19 03:00:00 (Sun)
  62662726800, #  local_start 1986-09-14 01:00:00 (Sun)
  62681472000, #    local_end 1987-04-19 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  62681482800, #    utc_start 1987-04-19 03:00:00 (Sun)
  62694187200, #      utc_end 1987-09-13 04:00:00 (Sun)
  62681468400, #  local_start 1987-04-18 23:00:00 (Sat)
  62694172800, #    local_end 1987-09-13 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  62694187200, #    utc_start 1987-09-13 04:00:00 (Sun)
  62712932400, #      utc_end 1988-04-17 03:00:00 (Sun)
  62694176400, #  local_start 1987-09-13 01:00:00 (Sun)
  62712921600, #    local_end 1988-04-17 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  62712932400, #    utc_start 1988-04-17 03:00:00 (Sun)
  62725636800, #      utc_end 1988-09-11 04:00:00 (Sun)
  62712918000, #  local_start 1988-04-16 23:00:00 (Sat)
  62725622400, #    local_end 1988-09-11 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  62725636800, #    utc_start 1988-09-11 04:00:00 (Sun)
  62744382000, #      utc_end 1989-04-16 03:00:00 (Sun)
  62725626000, #  local_start 1988-09-11 01:00:00 (Sun)
  62744371200, #    local_end 1989-04-16 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  62744382000, #    utc_start 1989-04-16 03:00:00 (Sun)
  62757086400, #      utc_end 1989-09-10 04:00:00 (Sun)
  62744367600, #  local_start 1989-04-15 23:00:00 (Sat)
  62757072000, #    local_end 1989-09-10 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  62757086400, #    utc_start 1989-09-10 04:00:00 (Sun)
  62776436400, #      utc_end 1990-04-22 03:00:00 (Sun)
  62757075600, #  local_start 1989-09-10 01:00:00 (Sun)
  62776425600, #    local_end 1990-04-22 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  62776436400, #    utc_start 1990-04-22 03:00:00 (Sun)
  62788536000, #      utc_end 1990-09-09 04:00:00 (Sun)
  62776422000, #  local_start 1990-04-21 23:00:00 (Sat)
  62788521600, #    local_end 1990-09-09 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  62788536000, #    utc_start 1990-09-09 04:00:00 (Sun)
  62807886000, #      utc_end 1991-04-21 03:00:00 (Sun)
  62788525200, #  local_start 1990-09-09 01:00:00 (Sun)
  62807875200, #    local_end 1991-04-21 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  62807886000, #    utc_start 1991-04-21 03:00:00 (Sun)
  62820590400, #      utc_end 1991-09-15 04:00:00 (Sun)
  62807871600, #  local_start 1991-04-20 23:00:00 (Sat)
  62820576000, #    local_end 1991-09-15 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  62820590400, #    utc_start 1991-09-15 04:00:00 (Sun)
  62839335600, #      utc_end 1992-04-19 03:00:00 (Sun)
  62820579600, #  local_start 1991-09-15 01:00:00 (Sun)
  62839324800, #    local_end 1992-04-19 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  62839335600, #    utc_start 1992-04-19 03:00:00 (Sun)
  62852040000, #      utc_end 1992-09-13 04:00:00 (Sun)
  62839321200, #  local_start 1992-04-18 23:00:00 (Sat)
  62852025600, #    local_end 1992-09-13 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  62852040000, #    utc_start 1992-09-13 04:00:00 (Sun)
  62870785200, #      utc_end 1993-04-18 03:00:00 (Sun)
  62852029200, #  local_start 1992-09-13 01:00:00 (Sun)
  62870774400, #    local_end 1993-04-18 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  62870785200, #    utc_start 1993-04-18 03:00:00 (Sun)
  62883489600, #      utc_end 1993-09-12 04:00:00 (Sun)
  62870770800, #  local_start 1993-04-17 23:00:00 (Sat)
  62883475200, #    local_end 1993-09-12 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  62883489600, #    utc_start 1993-09-12 04:00:00 (Sun)
  62902234800, #      utc_end 1994-04-17 03:00:00 (Sun)
  62883478800, #  local_start 1993-09-12 01:00:00 (Sun)
  62902224000, #    local_end 1994-04-17 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  62902234800, #    utc_start 1994-04-17 03:00:00 (Sun)
  62914939200, #      utc_end 1994-09-11 04:00:00 (Sun)
  62902220400, #  local_start 1994-04-16 23:00:00 (Sat)
  62914924800, #    local_end 1994-09-11 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  62914939200, #    utc_start 1994-09-11 04:00:00 (Sun)
  62933684400, #      utc_end 1995-04-16 03:00:00 (Sun)
  62914928400, #  local_start 1994-09-11 01:00:00 (Sun)
  62933673600, #    local_end 1995-04-16 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  62933684400, #    utc_start 1995-04-16 03:00:00 (Sun)
  62946388800, #      utc_end 1995-09-10 04:00:00 (Sun)
  62933670000, #  local_start 1995-04-15 23:00:00 (Sat)
  62946374400, #    local_end 1995-09-10 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  62946388800, #    utc_start 1995-09-10 04:00:00 (Sun)
  62965738800, #      utc_end 1996-04-21 03:00:00 (Sun)
  62946378000, #  local_start 1995-09-10 01:00:00 (Sun)
  62965728000, #    local_end 1996-04-21 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  62965738800, #    utc_start 1996-04-21 03:00:00 (Sun)
  62978443200, #      utc_end 1996-09-15 04:00:00 (Sun)
  62965724400, #  local_start 1996-04-20 23:00:00 (Sat)
  62978428800, #    local_end 1996-09-15 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  62978443200, #    utc_start 1996-09-15 04:00:00 (Sun)
  62997188400, #      utc_end 1997-04-20 03:00:00 (Sun)
  62978432400, #  local_start 1996-09-15 01:00:00 (Sun)
  62997177600, #    local_end 1997-04-20 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  62997188400, #    utc_start 1997-04-20 03:00:00 (Sun)
  63009892800, #      utc_end 1997-09-14 04:00:00 (Sun)
  62997174000, #  local_start 1997-04-19 23:00:00 (Sat)
  63009878400, #    local_end 1997-09-14 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  63009892800, #    utc_start 1997-09-14 04:00:00 (Sun)
  63028638000, #      utc_end 1998-04-19 03:00:00 (Sun)
  63009882000, #  local_start 1997-09-14 01:00:00 (Sun)
  63028627200, #    local_end 1998-04-19 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  63028638000, #    utc_start 1998-04-19 03:00:00 (Sun)
  63041342400, #      utc_end 1998-09-13 04:00:00 (Sun)
  63028623600, #  local_start 1998-04-18 23:00:00 (Sat)
  63041328000, #    local_end 1998-09-13 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  63041342400, #    utc_start 1998-09-13 04:00:00 (Sun)
  63060087600, #      utc_end 1999-04-18 03:00:00 (Sun)
  63041331600, #  local_start 1998-09-13 01:00:00 (Sun)
  63060076800, #    local_end 1999-04-18 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  63060087600, #    utc_start 1999-04-18 03:00:00 (Sun)
  63072792000, #      utc_end 1999-09-12 04:00:00 (Sun)
  63060073200, #  local_start 1999-04-17 23:00:00 (Sat)
  63072777600, #    local_end 1999-09-12 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  63072792000, #    utc_start 1999-09-12 04:00:00 (Sun)
  63091537200, #      utc_end 2000-04-16 03:00:00 (Sun)
  63072781200, #  local_start 1999-09-12 01:00:00 (Sun)
  63091526400, #    local_end 2000-04-16 00:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  63091537200, #    utc_start 2000-04-16 03:00:00 (Sun)
  63104241600, #      utc_end 2000-09-10 04:00:00 (Sun)
  63091522800, #  local_start 2000-04-15 23:00:00 (Sat)
  63104227200, #    local_end 2000-09-10 00:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  63104241600, #    utc_start 2000-09-10 04:00:00 (Sun)
  63122994000, #      utc_end 2001-04-15 05:00:00 (Sun)
  63104230800, #  local_start 2000-09-10 01:00:00 (Sun)
  63122983200, #    local_end 2001-04-15 02:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  63122994000, #    utc_start 2001-04-15 05:00:00 (Sun)
  63135093600, #      utc_end 2001-09-02 06:00:00 (Sun)
  63122979600, #  local_start 2001-04-15 01:00:00 (Sun)
  63135079200, #    local_end 2001-09-02 02:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  63135093600, #    utc_start 2001-09-02 06:00:00 (Sun)
  63155048400, #      utc_end 2002-04-21 05:00:00 (Sun)
  63135082800, #  local_start 2001-09-02 03:00:00 (Sun)
  63155037600, #    local_end 2002-04-21 02:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  63155048400, #    utc_start 2002-04-21 05:00:00 (Sun)
  63166543200, #      utc_end 2002-09-01 06:00:00 (Sun)
  63155034000, #  local_start 2002-04-21 01:00:00 (Sun)
  63166528800, #    local_end 2002-09-01 02:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  63166543200, #    utc_start 2002-09-01 06:00:00 (Sun)
  63186498000, #      utc_end 2003-04-20 05:00:00 (Sun)
  63166532400, #  local_start 2002-09-01 03:00:00 (Sun)
  63186487200, #    local_end 2003-04-20 02:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  63186498000, #    utc_start 2003-04-20 05:00:00 (Sun)
  63198597600, #      utc_end 2003-09-07 06:00:00 (Sun)
  63186483600, #  local_start 2003-04-20 01:00:00 (Sun)
  63198583200, #    local_end 2003-09-07 02:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  63198597600, #    utc_start 2003-09-07 06:00:00 (Sun)
  63217947600, #      utc_end 2004-04-18 05:00:00 (Sun)
  63198586800, #  local_start 2003-09-07 03:00:00 (Sun)
  63217936800, #    local_end 2004-04-18 02:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  63217947600, #    utc_start 2004-04-18 05:00:00 (Sun)
  63230047200, #      utc_end 2004-09-05 06:00:00 (Sun)
  63217933200, #  local_start 2004-04-18 01:00:00 (Sun)
  63230032800, #    local_end 2004-09-05 02:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  63230047200, #    utc_start 2004-09-05 06:00:00 (Sun)
  63249397200, #      utc_end 2005-04-17 05:00:00 (Sun)
  63230036400, #  local_start 2004-09-05 03:00:00 (Sun)
  63249386400, #    local_end 2005-04-17 02:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  63249397200, #    utc_start 2005-04-17 05:00:00 (Sun)
  63261496800, #      utc_end 2005-09-04 06:00:00 (Sun)
  63249382800, #  local_start 2005-04-17 01:00:00 (Sun)
  63261482400, #    local_end 2005-09-04 02:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  63261496800, #    utc_start 2005-09-04 06:00:00 (Sun)
  63280846800, #      utc_end 2006-04-16 05:00:00 (Sun)
  63261486000, #  local_start 2005-09-04 03:00:00 (Sun)
  63280836000, #    local_end 2006-04-16 02:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  63280846800, #    utc_start 2006-04-16 05:00:00 (Sun)
  63292946400, #      utc_end 2006-09-03 06:00:00 (Sun)
  63280832400, #  local_start 2006-04-16 01:00:00 (Sun)
  63292932000, #    local_end 2006-09-03 02:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  63292946400, #    utc_start 2006-09-03 06:00:00 (Sun)
  63312296400, #      utc_end 2007-04-15 05:00:00 (Sun)
  63292935600, #  local_start 2006-09-03 03:00:00 (Sun)
  63312285600, #    local_end 2007-04-15 02:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  63312296400, #    utc_start 2007-04-15 05:00:00 (Sun)
  63324396000, #      utc_end 2007-09-02 06:00:00 (Sun)
  63312282000, #  local_start 2007-04-15 01:00:00 (Sun)
  63324381600, #    local_end 2007-09-02 02:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  63324396000, #    utc_start 2007-09-02 06:00:00 (Sun)
  63344350800, #      utc_end 2008-04-20 05:00:00 (Sun)
  63324385200, #  local_start 2007-09-02 03:00:00 (Sun)
  63344340000, #    local_end 2008-04-20 02:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  63344350800, #    utc_start 2008-04-20 05:00:00 (Sun)
  63356450400, #      utc_end 2008-09-07 06:00:00 (Sun)
  63344336400, #  local_start 2008-04-20 01:00:00 (Sun)
  63356436000, #    local_end 2008-09-07 02:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  63356450400, #    utc_start 2008-09-07 06:00:00 (Sun)
  63375800400, #      utc_end 2009-04-19 05:00:00 (Sun)
  63356439600, #  local_start 2008-09-07 03:00:00 (Sun)
  63375789600, #    local_end 2009-04-19 02:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  63375800400, #    utc_start 2009-04-19 05:00:00 (Sun)
  63387900000, #      utc_end 2009-09-06 06:00:00 (Sun)
  63375786000, #  local_start 2009-04-19 01:00:00 (Sun)
  63387885600, #    local_end 2009-09-06 02:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  63387900000, #    utc_start 2009-09-06 06:00:00 (Sun)
  63407250000, #      utc_end 2010-04-18 05:00:00 (Sun)
  63387889200, #  local_start 2009-09-06 03:00:00 (Sun)
  63407239200, #    local_end 2010-04-18 02:00:00 (Sun)
  -10800,
  1,
  'FKST',
      ],
      [
  63407250000, #    utc_start 2010-04-18 05:00:00 (Sun)
  63419349600, #      utc_end 2010-09-05 06:00:00 (Sun)
  63407235600, #  local_start 2010-04-18 01:00:00 (Sun)
  63419335200, #    local_end 2010-09-05 02:00:00 (Sun)
  -14400,
  0,
  'FKT',
      ],
      [
  63419349600, #    utc_start 2010-09-05 06:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  63419338800, #  local_start 2010-09-05 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -10800,
  0,
  'FKST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {33}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_ATLANTIC_STANLEY

    $main::fatpacked{"DateTime/TimeZone/Australia/Adelaide.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AUSTRALIA_ADELAIDE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Australia::Adelaide;
  $DateTime::TimeZone::Australia::Adelaide::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Australia::Adelaide::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59771573140, #      utc_end 1895-01-31 14:45:40 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59771606400, #    local_end 1895-02-01 00:00:00 (Fri)
  33260,
  0,
  'LMT',
      ],
      [
  59771573140, #    utc_start 1895-01-31 14:45:40 (Thu)
  59905494000, #      utc_end 1899-04-30 15:00:00 (Sun)
  59771605540, #  local_start 1895-01-31 23:45:40 (Thu)
  59905526400, #    local_end 1899-05-01 00:00:00 (Mon)
  32400,
  0,
  'ACST',
      ],
      [
  59905494000, #    utc_start 1899-04-30 15:00:00 (Sun)
  60463117860, #      utc_end 1916-12-31 14:31:00 (Sun)
  59905528200, #  local_start 1899-05-01 00:30:00 (Mon)
  60463152060, #    local_end 1917-01-01 00:01:00 (Mon)
  34200,
  0,
  'ACST',
      ],
      [
  60463117860, #    utc_start 1916-12-31 14:31:00 (Sun)
  60470292600, #      utc_end 1917-03-24 15:30:00 (Sat)
  60463155660, #  local_start 1917-01-01 01:01:00 (Mon)
  60470330400, #    local_end 1917-03-25 02:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  60470292600, #    utc_start 1917-03-24 15:30:00 (Sat)
  61252043400, #      utc_end 1941-12-31 16:30:00 (Wed)
  60470326800, #  local_start 1917-03-25 01:00:00 (Sun)
  61252077600, #    local_end 1942-01-01 02:00:00 (Thu)
  34200,
  0,
  'ACST',
      ],
      [
  61252043400, #    utc_start 1941-12-31 16:30:00 (Wed)
  61259556600, #      utc_end 1942-03-28 15:30:00 (Sat)
  61252081200, #  local_start 1942-01-01 03:00:00 (Thu)
  61259594400, #    local_end 1942-03-29 02:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  61259556600, #    utc_start 1942-03-28 15:30:00 (Sat)
  61275285000, #      utc_end 1942-09-26 16:30:00 (Sat)
  61259590800, #  local_start 1942-03-29 01:00:00 (Sun)
  61275319200, #    local_end 1942-09-27 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  61275285000, #    utc_start 1942-09-26 16:30:00 (Sat)
  61291006200, #      utc_end 1943-03-27 15:30:00 (Sat)
  61275322800, #  local_start 1942-09-27 03:00:00 (Sun)
  61291044000, #    local_end 1943-03-28 02:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  61291006200, #    utc_start 1943-03-27 15:30:00 (Sat)
  61307339400, #      utc_end 1943-10-02 16:30:00 (Sat)
  61291040400, #  local_start 1943-03-28 01:00:00 (Sun)
  61307373600, #    local_end 1943-10-03 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  61307339400, #    utc_start 1943-10-02 16:30:00 (Sat)
  61322455800, #      utc_end 1944-03-25 15:30:00 (Sat)
  61307377200, #  local_start 1943-10-03 03:00:00 (Sun)
  61322493600, #    local_end 1944-03-26 02:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  61322455800, #    utc_start 1944-03-25 15:30:00 (Sat)
  62167185000, #      utc_end 1970-12-31 14:30:00 (Thu)
  61322490000, #  local_start 1944-03-26 01:00:00 (Sun)
  62167219200, #    local_end 1971-01-01 00:00:00 (Fri)
  34200,
  0,
  'ACST',
      ],
      [
  62167185000, #    utc_start 1970-12-31 14:30:00 (Thu)
  62193371400, #      utc_end 1971-10-30 16:30:00 (Sat)
  62167219200, #  local_start 1971-01-01 00:00:00 (Fri)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62193371400, #    utc_start 1971-10-30 16:30:00 (Sat)
  62203653000, #      utc_end 1972-02-26 16:30:00 (Sat)
  62193409200, #  local_start 1971-10-31 03:00:00 (Sun)
  62203690800, #    local_end 1972-02-27 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62203653000, #    utc_start 1972-02-26 16:30:00 (Sat)
  62224821000, #      utc_end 1972-10-28 16:30:00 (Sat)
  62203687200, #  local_start 1972-02-27 02:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62224821000, #    utc_start 1972-10-28 16:30:00 (Sat)
  62235707400, #      utc_end 1973-03-03 16:30:00 (Sat)
  62224858800, #  local_start 1972-10-29 03:00:00 (Sun)
  62235745200, #    local_end 1973-03-04 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62235707400, #    utc_start 1973-03-03 16:30:00 (Sat)
  62256270600, #      utc_end 1973-10-27 16:30:00 (Sat)
  62235741600, #  local_start 1973-03-04 02:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62256270600, #    utc_start 1973-10-27 16:30:00 (Sat)
  62267157000, #      utc_end 1974-03-02 16:30:00 (Sat)
  62256308400, #  local_start 1973-10-28 03:00:00 (Sun)
  62267194800, #    local_end 1974-03-03 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62267157000, #    utc_start 1974-03-02 16:30:00 (Sat)
  62287720200, #      utc_end 1974-10-26 16:30:00 (Sat)
  62267191200, #  local_start 1974-03-03 02:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62287720200, #    utc_start 1974-10-26 16:30:00 (Sat)
  62298606600, #      utc_end 1975-03-01 16:30:00 (Sat)
  62287758000, #  local_start 1974-10-27 03:00:00 (Sun)
  62298644400, #    local_end 1975-03-02 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62298606600, #    utc_start 1975-03-01 16:30:00 (Sat)
  62319169800, #      utc_end 1975-10-25 16:30:00 (Sat)
  62298640800, #  local_start 1975-03-02 02:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62319169800, #    utc_start 1975-10-25 16:30:00 (Sat)
  62330661000, #      utc_end 1976-03-06 16:30:00 (Sat)
  62319207600, #  local_start 1975-10-26 03:00:00 (Sun)
  62330698800, #    local_end 1976-03-07 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62330661000, #    utc_start 1976-03-06 16:30:00 (Sat)
  62351224200, #      utc_end 1976-10-30 16:30:00 (Sat)
  62330695200, #  local_start 1976-03-07 02:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62351224200, #    utc_start 1976-10-30 16:30:00 (Sat)
  62362110600, #      utc_end 1977-03-05 16:30:00 (Sat)
  62351262000, #  local_start 1976-10-31 03:00:00 (Sun)
  62362148400, #    local_end 1977-03-06 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62362110600, #    utc_start 1977-03-05 16:30:00 (Sat)
  62382673800, #      utc_end 1977-10-29 16:30:00 (Sat)
  62362144800, #  local_start 1977-03-06 02:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62382673800, #    utc_start 1977-10-29 16:30:00 (Sat)
  62393560200, #      utc_end 1978-03-04 16:30:00 (Sat)
  62382711600, #  local_start 1977-10-30 03:00:00 (Sun)
  62393598000, #    local_end 1978-03-05 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62393560200, #    utc_start 1978-03-04 16:30:00 (Sat)
  62414123400, #      utc_end 1978-10-28 16:30:00 (Sat)
  62393594400, #  local_start 1978-03-05 02:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62414123400, #    utc_start 1978-10-28 16:30:00 (Sat)
  62425009800, #      utc_end 1979-03-03 16:30:00 (Sat)
  62414161200, #  local_start 1978-10-29 03:00:00 (Sun)
  62425047600, #    local_end 1979-03-04 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62425009800, #    utc_start 1979-03-03 16:30:00 (Sat)
  62445573000, #      utc_end 1979-10-27 16:30:00 (Sat)
  62425044000, #  local_start 1979-03-04 02:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62445573000, #    utc_start 1979-10-27 16:30:00 (Sat)
  62456459400, #      utc_end 1980-03-01 16:30:00 (Sat)
  62445610800, #  local_start 1979-10-28 03:00:00 (Sun)
  62456497200, #    local_end 1980-03-02 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62456459400, #    utc_start 1980-03-01 16:30:00 (Sat)
  62477022600, #      utc_end 1980-10-25 16:30:00 (Sat)
  62456493600, #  local_start 1980-03-02 02:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62477022600, #    utc_start 1980-10-25 16:30:00 (Sat)
  62487909000, #      utc_end 1981-02-28 16:30:00 (Sat)
  62477060400, #  local_start 1980-10-26 03:00:00 (Sun)
  62487946800, #    local_end 1981-03-01 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62487909000, #    utc_start 1981-02-28 16:30:00 (Sat)
  62508472200, #      utc_end 1981-10-24 16:30:00 (Sat)
  62487943200, #  local_start 1981-03-01 02:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62508472200, #    utc_start 1981-10-24 16:30:00 (Sat)
  62519963400, #      utc_end 1982-03-06 16:30:00 (Sat)
  62508510000, #  local_start 1981-10-25 03:00:00 (Sun)
  62520001200, #    local_end 1982-03-07 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62519963400, #    utc_start 1982-03-06 16:30:00 (Sat)
  62540526600, #      utc_end 1982-10-30 16:30:00 (Sat)
  62519997600, #  local_start 1982-03-07 02:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62540526600, #    utc_start 1982-10-30 16:30:00 (Sat)
  62551413000, #      utc_end 1983-03-05 16:30:00 (Sat)
  62540564400, #  local_start 1982-10-31 03:00:00 (Sun)
  62551450800, #    local_end 1983-03-06 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62551413000, #    utc_start 1983-03-05 16:30:00 (Sat)
  62571976200, #      utc_end 1983-10-29 16:30:00 (Sat)
  62551447200, #  local_start 1983-03-06 02:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62571976200, #    utc_start 1983-10-29 16:30:00 (Sat)
  62582862600, #      utc_end 1984-03-03 16:30:00 (Sat)
  62572014000, #  local_start 1983-10-30 03:00:00 (Sun)
  62582900400, #    local_end 1984-03-04 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62582862600, #    utc_start 1984-03-03 16:30:00 (Sat)
  62603425800, #      utc_end 1984-10-27 16:30:00 (Sat)
  62582896800, #  local_start 1984-03-04 02:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62603425800, #    utc_start 1984-10-27 16:30:00 (Sat)
  62614312200, #      utc_end 1985-03-02 16:30:00 (Sat)
  62603463600, #  local_start 1984-10-28 03:00:00 (Sun)
  62614350000, #    local_end 1985-03-03 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62614312200, #    utc_start 1985-03-02 16:30:00 (Sat)
  62634875400, #      utc_end 1985-10-26 16:30:00 (Sat)
  62614346400, #  local_start 1985-03-03 02:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62634875400, #    utc_start 1985-10-26 16:30:00 (Sat)
  62646971400, #      utc_end 1986-03-15 16:30:00 (Sat)
  62634913200, #  local_start 1985-10-27 03:00:00 (Sun)
  62647009200, #    local_end 1986-03-16 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62646971400, #    utc_start 1986-03-15 16:30:00 (Sat)
  62665720200, #      utc_end 1986-10-18 16:30:00 (Sat)
  62647005600, #  local_start 1986-03-16 02:00:00 (Sun)
  62665754400, #    local_end 1986-10-19 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62665720200, #    utc_start 1986-10-18 16:30:00 (Sat)
  62678421000, #      utc_end 1987-03-14 16:30:00 (Sat)
  62665758000, #  local_start 1986-10-19 03:00:00 (Sun)
  62678458800, #    local_end 1987-03-15 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62678421000, #    utc_start 1987-03-14 16:30:00 (Sat)
  62697774600, #      utc_end 1987-10-24 16:30:00 (Sat)
  62678455200, #  local_start 1987-03-15 02:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62697774600, #    utc_start 1987-10-24 16:30:00 (Sat)
  62710475400, #      utc_end 1988-03-19 16:30:00 (Sat)
  62697812400, #  local_start 1987-10-25 03:00:00 (Sun)
  62710513200, #    local_end 1988-03-20 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62710475400, #    utc_start 1988-03-19 16:30:00 (Sat)
  62729829000, #      utc_end 1988-10-29 16:30:00 (Sat)
  62710509600, #  local_start 1988-03-20 02:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62729829000, #    utc_start 1988-10-29 16:30:00 (Sat)
  62741925000, #      utc_end 1989-03-18 16:30:00 (Sat)
  62729866800, #  local_start 1988-10-30 03:00:00 (Sun)
  62741962800, #    local_end 1989-03-19 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62741925000, #    utc_start 1989-03-18 16:30:00 (Sat)
  62761278600, #      utc_end 1989-10-28 16:30:00 (Sat)
  62741959200, #  local_start 1989-03-19 02:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62761278600, #    utc_start 1989-10-28 16:30:00 (Sat)
  62773374600, #      utc_end 1990-03-17 16:30:00 (Sat)
  62761316400, #  local_start 1989-10-29 03:00:00 (Sun)
  62773412400, #    local_end 1990-03-18 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62773374600, #    utc_start 1990-03-17 16:30:00 (Sat)
  62792728200, #      utc_end 1990-10-27 16:30:00 (Sat)
  62773408800, #  local_start 1990-03-18 02:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62792728200, #    utc_start 1990-10-27 16:30:00 (Sat)
  62803614600, #      utc_end 1991-03-02 16:30:00 (Sat)
  62792766000, #  local_start 1990-10-28 03:00:00 (Sun)
  62803652400, #    local_end 1991-03-03 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62803614600, #    utc_start 1991-03-02 16:30:00 (Sat)
  62824177800, #      utc_end 1991-10-26 16:30:00 (Sat)
  62803648800, #  local_start 1991-03-03 02:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62824177800, #    utc_start 1991-10-26 16:30:00 (Sat)
  62836878600, #      utc_end 1992-03-21 16:30:00 (Sat)
  62824215600, #  local_start 1991-10-27 03:00:00 (Sun)
  62836916400, #    local_end 1992-03-22 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62836878600, #    utc_start 1992-03-21 16:30:00 (Sat)
  62855627400, #      utc_end 1992-10-24 16:30:00 (Sat)
  62836912800, #  local_start 1992-03-22 02:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62855627400, #    utc_start 1992-10-24 16:30:00 (Sat)
  62867118600, #      utc_end 1993-03-06 16:30:00 (Sat)
  62855665200, #  local_start 1992-10-25 03:00:00 (Sun)
  62867156400, #    local_end 1993-03-07 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62867118600, #    utc_start 1993-03-06 16:30:00 (Sat)
  62887681800, #      utc_end 1993-10-30 16:30:00 (Sat)
  62867152800, #  local_start 1993-03-07 02:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62887681800, #    utc_start 1993-10-30 16:30:00 (Sat)
  62899777800, #      utc_end 1994-03-19 16:30:00 (Sat)
  62887719600, #  local_start 1993-10-31 03:00:00 (Sun)
  62899815600, #    local_end 1994-03-20 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62899777800, #    utc_start 1994-03-19 16:30:00 (Sat)
  62919131400, #      utc_end 1994-10-29 16:30:00 (Sat)
  62899812000, #  local_start 1994-03-20 02:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62919131400, #    utc_start 1994-10-29 16:30:00 (Sat)
  62931832200, #      utc_end 1995-03-25 16:30:00 (Sat)
  62919169200, #  local_start 1994-10-30 03:00:00 (Sun)
  62931870000, #    local_end 1995-03-26 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62931832200, #    utc_start 1995-03-25 16:30:00 (Sat)
  62950581000, #      utc_end 1995-10-28 16:30:00 (Sat)
  62931866400, #  local_start 1995-03-26 02:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62950581000, #    utc_start 1995-10-28 16:30:00 (Sat)
  62963886600, #      utc_end 1996-03-30 16:30:00 (Sat)
  62950618800, #  local_start 1995-10-29 03:00:00 (Sun)
  62963924400, #    local_end 1996-03-31 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62963886600, #    utc_start 1996-03-30 16:30:00 (Sat)
  62982030600, #      utc_end 1996-10-26 16:30:00 (Sat)
  62963920800, #  local_start 1996-03-31 02:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62982030600, #    utc_start 1996-10-26 16:30:00 (Sat)
  62995336200, #      utc_end 1997-03-29 16:30:00 (Sat)
  62982068400, #  local_start 1996-10-27 03:00:00 (Sun)
  62995374000, #    local_end 1997-03-30 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62995336200, #    utc_start 1997-03-29 16:30:00 (Sat)
  63013480200, #      utc_end 1997-10-25 16:30:00 (Sat)
  62995370400, #  local_start 1997-03-30 02:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63013480200, #    utc_start 1997-10-25 16:30:00 (Sat)
  63026785800, #      utc_end 1998-03-28 16:30:00 (Sat)
  63013518000, #  local_start 1997-10-26 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63026785800, #    utc_start 1998-03-28 16:30:00 (Sat)
  63044929800, #      utc_end 1998-10-24 16:30:00 (Sat)
  63026820000, #  local_start 1998-03-29 02:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63044929800, #    utc_start 1998-10-24 16:30:00 (Sat)
  63058235400, #      utc_end 1999-03-27 16:30:00 (Sat)
  63044967600, #  local_start 1998-10-25 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63058235400, #    utc_start 1999-03-27 16:30:00 (Sat)
  63076984200, #      utc_end 1999-10-30 16:30:00 (Sat)
  63058269600, #  local_start 1999-03-28 02:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63076984200, #    utc_start 1999-10-30 16:30:00 (Sat)
  63089685000, #      utc_end 2000-03-25 16:30:00 (Sat)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63089685000, #    utc_start 2000-03-25 16:30:00 (Sat)
  63108433800, #      utc_end 2000-10-28 16:30:00 (Sat)
  63089719200, #  local_start 2000-03-26 02:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63108433800, #    utc_start 2000-10-28 16:30:00 (Sat)
  63121134600, #      utc_end 2001-03-24 16:30:00 (Sat)
  63108471600, #  local_start 2000-10-29 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63121134600, #    utc_start 2001-03-24 16:30:00 (Sat)
  63139883400, #      utc_end 2001-10-27 16:30:00 (Sat)
  63121168800, #  local_start 2001-03-25 02:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63139883400, #    utc_start 2001-10-27 16:30:00 (Sat)
  63153189000, #      utc_end 2002-03-30 16:30:00 (Sat)
  63139921200, #  local_start 2001-10-28 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63153189000, #    utc_start 2002-03-30 16:30:00 (Sat)
  63171333000, #      utc_end 2002-10-26 16:30:00 (Sat)
  63153223200, #  local_start 2002-03-31 02:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63171333000, #    utc_start 2002-10-26 16:30:00 (Sat)
  63184638600, #      utc_end 2003-03-29 16:30:00 (Sat)
  63171370800, #  local_start 2002-10-27 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63184638600, #    utc_start 2003-03-29 16:30:00 (Sat)
  63202782600, #      utc_end 2003-10-25 16:30:00 (Sat)
  63184672800, #  local_start 2003-03-30 02:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63202782600, #    utc_start 2003-10-25 16:30:00 (Sat)
  63216088200, #      utc_end 2004-03-27 16:30:00 (Sat)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63216088200, #    utc_start 2004-03-27 16:30:00 (Sat)
  63234837000, #      utc_end 2004-10-30 16:30:00 (Sat)
  63216122400, #  local_start 2004-03-28 02:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63234837000, #    utc_start 2004-10-30 16:30:00 (Sat)
  63247537800, #      utc_end 2005-03-26 16:30:00 (Sat)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63247537800, #    utc_start 2005-03-26 16:30:00 (Sat)
  63266286600, #      utc_end 2005-10-29 16:30:00 (Sat)
  63247572000, #  local_start 2005-03-27 02:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63266286600, #    utc_start 2005-10-29 16:30:00 (Sat)
  63279592200, #      utc_end 2006-04-01 16:30:00 (Sat)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279630000, #    local_end 2006-04-02 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63279592200, #    utc_start 2006-04-01 16:30:00 (Sat)
  63297736200, #      utc_end 2006-10-28 16:30:00 (Sat)
  63279626400, #  local_start 2006-04-02 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63297736200, #    utc_start 2006-10-28 16:30:00 (Sat)
  63310437000, #      utc_end 2007-03-24 16:30:00 (Sat)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63310437000, #    utc_start 2007-03-24 16:30:00 (Sat)
  63329185800, #      utc_end 2007-10-27 16:30:00 (Sat)
  63310471200, #  local_start 2007-03-25 02:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63329185800, #    utc_start 2007-10-27 16:30:00 (Sat)
  63343096200, #      utc_end 2008-04-05 16:30:00 (Sat)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63343134000, #    local_end 2008-04-06 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63343096200, #    utc_start 2008-04-05 16:30:00 (Sat)
  63358821000, #      utc_end 2008-10-04 16:30:00 (Sat)
  63343130400, #  local_start 2008-04-06 02:00:00 (Sun)
  63358855200, #    local_end 2008-10-05 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63358821000, #    utc_start 2008-10-04 16:30:00 (Sat)
  63374545800, #      utc_end 2009-04-04 16:30:00 (Sat)
  63358858800, #  local_start 2008-10-05 03:00:00 (Sun)
  63374583600, #    local_end 2009-04-05 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63374545800, #    utc_start 2009-04-04 16:30:00 (Sat)
  63390270600, #      utc_end 2009-10-03 16:30:00 (Sat)
  63374580000, #  local_start 2009-04-05 02:00:00 (Sun)
  63390304800, #    local_end 2009-10-04 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63390270600, #    utc_start 2009-10-03 16:30:00 (Sat)
  63405995400, #      utc_end 2010-04-03 16:30:00 (Sat)
  63390308400, #  local_start 2009-10-04 03:00:00 (Sun)
  63406033200, #    local_end 2010-04-04 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63405995400, #    utc_start 2010-04-03 16:30:00 (Sat)
  63421720200, #      utc_end 2010-10-02 16:30:00 (Sat)
  63406029600, #  local_start 2010-04-04 02:00:00 (Sun)
  63421754400, #    local_end 2010-10-03 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63421720200, #    utc_start 2010-10-02 16:30:00 (Sat)
  63437445000, #      utc_end 2011-04-02 16:30:00 (Sat)
  63421758000, #  local_start 2010-10-03 03:00:00 (Sun)
  63437482800, #    local_end 2011-04-03 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63437445000, #    utc_start 2011-04-02 16:30:00 (Sat)
  63453169800, #      utc_end 2011-10-01 16:30:00 (Sat)
  63437479200, #  local_start 2011-04-03 02:00:00 (Sun)
  63453204000, #    local_end 2011-10-02 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63453169800, #    utc_start 2011-10-01 16:30:00 (Sat)
  63468894600, #      utc_end 2012-03-31 16:30:00 (Sat)
  63453207600, #  local_start 2011-10-02 03:00:00 (Sun)
  63468932400, #    local_end 2012-04-01 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63468894600, #    utc_start 2012-03-31 16:30:00 (Sat)
  63485224200, #      utc_end 2012-10-06 16:30:00 (Sat)
  63468928800, #  local_start 2012-04-01 02:00:00 (Sun)
  63485258400, #    local_end 2012-10-07 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63485224200, #    utc_start 2012-10-06 16:30:00 (Sat)
  63500949000, #      utc_end 2013-04-06 16:30:00 (Sat)
  63485262000, #  local_start 2012-10-07 03:00:00 (Sun)
  63500986800, #    local_end 2013-04-07 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63500949000, #    utc_start 2013-04-06 16:30:00 (Sat)
  63516673800, #      utc_end 2013-10-05 16:30:00 (Sat)
  63500983200, #  local_start 2013-04-07 02:00:00 (Sun)
  63516708000, #    local_end 2013-10-06 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63516673800, #    utc_start 2013-10-05 16:30:00 (Sat)
  63532398600, #      utc_end 2014-04-05 16:30:00 (Sat)
  63516711600, #  local_start 2013-10-06 03:00:00 (Sun)
  63532436400, #    local_end 2014-04-06 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63532398600, #    utc_start 2014-04-05 16:30:00 (Sat)
  63548123400, #      utc_end 2014-10-04 16:30:00 (Sat)
  63532432800, #  local_start 2014-04-06 02:00:00 (Sun)
  63548157600, #    local_end 2014-10-05 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63548123400, #    utc_start 2014-10-04 16:30:00 (Sat)
  63563848200, #      utc_end 2015-04-04 16:30:00 (Sat)
  63548161200, #  local_start 2014-10-05 03:00:00 (Sun)
  63563886000, #    local_end 2015-04-05 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63563848200, #    utc_start 2015-04-04 16:30:00 (Sat)
  63579573000, #      utc_end 2015-10-03 16:30:00 (Sat)
  63563882400, #  local_start 2015-04-05 02:00:00 (Sun)
  63579607200, #    local_end 2015-10-04 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63579573000, #    utc_start 2015-10-03 16:30:00 (Sat)
  63595297800, #      utc_end 2016-04-02 16:30:00 (Sat)
  63579610800, #  local_start 2015-10-04 03:00:00 (Sun)
  63595335600, #    local_end 2016-04-03 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63595297800, #    utc_start 2016-04-02 16:30:00 (Sat)
  63611022600, #      utc_end 2016-10-01 16:30:00 (Sat)
  63595332000, #  local_start 2016-04-03 02:00:00 (Sun)
  63611056800, #    local_end 2016-10-02 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63611022600, #    utc_start 2016-10-01 16:30:00 (Sat)
  63626747400, #      utc_end 2017-04-01 16:30:00 (Sat)
  63611060400, #  local_start 2016-10-02 03:00:00 (Sun)
  63626785200, #    local_end 2017-04-02 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63626747400, #    utc_start 2017-04-01 16:30:00 (Sat)
  63642472200, #      utc_end 2017-09-30 16:30:00 (Sat)
  63626781600, #  local_start 2017-04-02 02:00:00 (Sun)
  63642506400, #    local_end 2017-10-01 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63642472200, #    utc_start 2017-09-30 16:30:00 (Sat)
  63658197000, #      utc_end 2018-03-31 16:30:00 (Sat)
  63642510000, #  local_start 2017-10-01 03:00:00 (Sun)
  63658234800, #    local_end 2018-04-01 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63658197000, #    utc_start 2018-03-31 16:30:00 (Sat)
  63674526600, #      utc_end 2018-10-06 16:30:00 (Sat)
  63658231200, #  local_start 2018-04-01 02:00:00 (Sun)
  63674560800, #    local_end 2018-10-07 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63674526600, #    utc_start 2018-10-06 16:30:00 (Sat)
  63690251400, #      utc_end 2019-04-06 16:30:00 (Sat)
  63674564400, #  local_start 2018-10-07 03:00:00 (Sun)
  63690289200, #    local_end 2019-04-07 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63690251400, #    utc_start 2019-04-06 16:30:00 (Sat)
  63705976200, #      utc_end 2019-10-05 16:30:00 (Sat)
  63690285600, #  local_start 2019-04-07 02:00:00 (Sun)
  63706010400, #    local_end 2019-10-06 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63705976200, #    utc_start 2019-10-05 16:30:00 (Sat)
  63721701000, #      utc_end 2020-04-04 16:30:00 (Sat)
  63706014000, #  local_start 2019-10-06 03:00:00 (Sun)
  63721738800, #    local_end 2020-04-05 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63721701000, #    utc_start 2020-04-04 16:30:00 (Sat)
  63737425800, #      utc_end 2020-10-03 16:30:00 (Sat)
  63721735200, #  local_start 2020-04-05 02:00:00 (Sun)
  63737460000, #    local_end 2020-10-04 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63737425800, #    utc_start 2020-10-03 16:30:00 (Sat)
  63753150600, #      utc_end 2021-04-03 16:30:00 (Sat)
  63737463600, #  local_start 2020-10-04 03:00:00 (Sun)
  63753188400, #    local_end 2021-04-04 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63753150600, #    utc_start 2021-04-03 16:30:00 (Sat)
  63768875400, #      utc_end 2021-10-02 16:30:00 (Sat)
  63753184800, #  local_start 2021-04-04 02:00:00 (Sun)
  63768909600, #    local_end 2021-10-03 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63768875400, #    utc_start 2021-10-02 16:30:00 (Sat)
  63784600200, #      utc_end 2022-04-02 16:30:00 (Sat)
  63768913200, #  local_start 2021-10-03 03:00:00 (Sun)
  63784638000, #    local_end 2022-04-03 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63784600200, #    utc_start 2022-04-02 16:30:00 (Sat)
  63800325000, #      utc_end 2022-10-01 16:30:00 (Sat)
  63784634400, #  local_start 2022-04-03 02:00:00 (Sun)
  63800359200, #    local_end 2022-10-02 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63800325000, #    utc_start 2022-10-01 16:30:00 (Sat)
  63816049800, #      utc_end 2023-04-01 16:30:00 (Sat)
  63800362800, #  local_start 2022-10-02 03:00:00 (Sun)
  63816087600, #    local_end 2023-04-02 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63816049800, #    utc_start 2023-04-01 16:30:00 (Sat)
  63831774600, #      utc_end 2023-09-30 16:30:00 (Sat)
  63816084000, #  local_start 2023-04-02 02:00:00 (Sun)
  63831808800, #    local_end 2023-10-01 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63831774600, #    utc_start 2023-09-30 16:30:00 (Sat)
  63848104200, #      utc_end 2024-04-06 16:30:00 (Sat)
  63831812400, #  local_start 2023-10-01 03:00:00 (Sun)
  63848142000, #    local_end 2024-04-07 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63848104200, #    utc_start 2024-04-06 16:30:00 (Sat)
  63863829000, #      utc_end 2024-10-05 16:30:00 (Sat)
  63848138400, #  local_start 2024-04-07 02:00:00 (Sun)
  63863863200, #    local_end 2024-10-06 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63863829000, #    utc_start 2024-10-05 16:30:00 (Sat)
  63879553800, #      utc_end 2025-04-05 16:30:00 (Sat)
  63863866800, #  local_start 2024-10-06 03:00:00 (Sun)
  63879591600, #    local_end 2025-04-06 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63879553800, #    utc_start 2025-04-05 16:30:00 (Sat)
  63895278600, #      utc_end 2025-10-04 16:30:00 (Sat)
  63879588000, #  local_start 2025-04-06 02:00:00 (Sun)
  63895312800, #    local_end 2025-10-05 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63895278600, #    utc_start 2025-10-04 16:30:00 (Sat)
  63911003400, #      utc_end 2026-04-04 16:30:00 (Sat)
  63895316400, #  local_start 2025-10-05 03:00:00 (Sun)
  63911041200, #    local_end 2026-04-05 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63911003400, #    utc_start 2026-04-04 16:30:00 (Sat)
  63926728200, #      utc_end 2026-10-03 16:30:00 (Sat)
  63911037600, #  local_start 2026-04-05 02:00:00 (Sun)
  63926762400, #    local_end 2026-10-04 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63926728200, #    utc_start 2026-10-03 16:30:00 (Sat)
  63942453000, #      utc_end 2027-04-03 16:30:00 (Sat)
  63926766000, #  local_start 2026-10-04 03:00:00 (Sun)
  63942490800, #    local_end 2027-04-04 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63942453000, #    utc_start 2027-04-03 16:30:00 (Sat)
  63958177800, #      utc_end 2027-10-02 16:30:00 (Sat)
  63942487200, #  local_start 2027-04-04 02:00:00 (Sun)
  63958212000, #    local_end 2027-10-03 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {61}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 34200 }
  
  my $last_observance = bless( {
    'format' => 'AC%sT',
    'gmtoff' => '9:30',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 719528,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 719528,
      'utc_rd_secs' => 0,
      'utc_year' => 1972
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 34200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 719527,
      'local_rd_secs' => 52200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 719527,
      'utc_rd_secs' => 52200,
      'utc_year' => 1971
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00s',
      'from' => '2008',
      'in' => 'Apr',
      'letter' => 'S',
      'name' => 'AS',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00s',
      'from' => '2008',
      'in' => 'Oct',
      'letter' => 'D',
      'name' => 'AS',
      'offset_from_std' => 3600,
      'on' => 'Sun>=1',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AUSTRALIA_ADELAIDE

    $main::fatpacked{"DateTime/TimeZone/Australia/Brisbane.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AUSTRALIA_BRISBANE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Australia::Brisbane;
  $DateTime::TimeZone::Australia::Brisbane::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Australia::Brisbane::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59768891272, #      utc_end 1894-12-31 13:47:52 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59768928000, #    local_end 1895-01-01 00:00:00 (Tue)
  36728,
  0,
  'LMT',
      ],
      [
  59768891272, #    utc_start 1894-12-31 13:47:52 (Mon)
  60463116060, #      utc_end 1916-12-31 14:01:00 (Sun)
  59768927272, #  local_start 1894-12-31 23:47:52 (Mon)
  60463152060, #    local_end 1917-01-01 00:01:00 (Mon)
  36000,
  0,
  'AEST',
      ],
      [
  60463116060, #    utc_start 1916-12-31 14:01:00 (Sun)
  60470290800, #      utc_end 1917-03-24 15:00:00 (Sat)
  60463155660, #  local_start 1917-01-01 01:01:00 (Mon)
  60470330400, #    local_end 1917-03-25 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  60470290800, #    utc_start 1917-03-24 15:00:00 (Sat)
  61252041600, #      utc_end 1941-12-31 16:00:00 (Wed)
  60470326800, #  local_start 1917-03-25 01:00:00 (Sun)
  61252077600, #    local_end 1942-01-01 02:00:00 (Thu)
  36000,
  0,
  'AEST',
      ],
      [
  61252041600, #    utc_start 1941-12-31 16:00:00 (Wed)
  61259554800, #      utc_end 1942-03-28 15:00:00 (Sat)
  61252081200, #  local_start 1942-01-01 03:00:00 (Thu)
  61259594400, #    local_end 1942-03-29 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61259554800, #    utc_start 1942-03-28 15:00:00 (Sat)
  61275283200, #      utc_end 1942-09-26 16:00:00 (Sat)
  61259590800, #  local_start 1942-03-29 01:00:00 (Sun)
  61275319200, #    local_end 1942-09-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  61275283200, #    utc_start 1942-09-26 16:00:00 (Sat)
  61291004400, #      utc_end 1943-03-27 15:00:00 (Sat)
  61275322800, #  local_start 1942-09-27 03:00:00 (Sun)
  61291044000, #    local_end 1943-03-28 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61291004400, #    utc_start 1943-03-27 15:00:00 (Sat)
  61307337600, #      utc_end 1943-10-02 16:00:00 (Sat)
  61291040400, #  local_start 1943-03-28 01:00:00 (Sun)
  61307373600, #    local_end 1943-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  61307337600, #    utc_start 1943-10-02 16:00:00 (Sat)
  61322454000, #      utc_end 1944-03-25 15:00:00 (Sat)
  61307377200, #  local_start 1943-10-03 03:00:00 (Sun)
  61322493600, #    local_end 1944-03-26 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61322454000, #    utc_start 1944-03-25 15:00:00 (Sat)
  62167183200, #      utc_end 1970-12-31 14:00:00 (Thu)
  61322490000, #  local_start 1944-03-26 01:00:00 (Sun)
  62167219200, #    local_end 1971-01-01 00:00:00 (Fri)
  36000,
  0,
  'AEST',
      ],
      [
  62167183200, #    utc_start 1970-12-31 14:00:00 (Thu)
  62193369600, #      utc_end 1971-10-30 16:00:00 (Sat)
  62167219200, #  local_start 1971-01-01 00:00:00 (Fri)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62193369600, #    utc_start 1971-10-30 16:00:00 (Sat)
  62203651200, #      utc_end 1972-02-26 16:00:00 (Sat)
  62193409200, #  local_start 1971-10-31 03:00:00 (Sun)
  62203690800, #    local_end 1972-02-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62203651200, #    utc_start 1972-02-26 16:00:00 (Sat)
  62761276800, #      utc_end 1989-10-28 16:00:00 (Sat)
  62203687200, #  local_start 1972-02-27 02:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62761276800, #    utc_start 1989-10-28 16:00:00 (Sat)
  62772163200, #      utc_end 1990-03-03 16:00:00 (Sat)
  62761316400, #  local_start 1989-10-29 03:00:00 (Sun)
  62772202800, #    local_end 1990-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62772163200, #    utc_start 1990-03-03 16:00:00 (Sat)
  62792726400, #      utc_end 1990-10-27 16:00:00 (Sat)
  62772199200, #  local_start 1990-03-04 02:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62792726400, #    utc_start 1990-10-27 16:00:00 (Sat)
  62803612800, #      utc_end 1991-03-02 16:00:00 (Sat)
  62792766000, #  local_start 1990-10-28 03:00:00 (Sun)
  62803652400, #    local_end 1991-03-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62803612800, #    utc_start 1991-03-02 16:00:00 (Sat)
  62824176000, #      utc_end 1991-10-26 16:00:00 (Sat)
  62803648800, #  local_start 1991-03-03 02:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62824176000, #    utc_start 1991-10-26 16:00:00 (Sat)
  62835062400, #      utc_end 1992-02-29 16:00:00 (Sat)
  62824215600, #  local_start 1991-10-27 03:00:00 (Sun)
  62835102000, #    local_end 1992-03-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62835062400, #    utc_start 1992-02-29 16:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  62835098400, #  local_start 1992-03-01 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  36000,
  0,
  'AEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {8}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AUSTRALIA_BRISBANE

    $main::fatpacked{"DateTime/TimeZone/Australia/Broken_Hill.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AUSTRALIA_BROKEN_HILL';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Australia::Broken_Hill;
  $DateTime::TimeZone::Australia::Broken_Hill::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Australia::Broken_Hill::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59771572452, #      utc_end 1895-01-31 14:34:12 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59771606400, #    local_end 1895-02-01 00:00:00 (Fri)
  33948,
  0,
  'LMT',
      ],
      [
  59771572452, #    utc_start 1895-01-31 14:34:12 (Thu)
  59820732000, #      utc_end 1896-08-22 14:00:00 (Sat)
  59771608452, #  local_start 1895-02-01 00:34:12 (Fri)
  59820768000, #    local_end 1896-08-23 00:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  59820732000, #    utc_start 1896-08-22 14:00:00 (Sat)
  59905494000, #      utc_end 1899-04-30 15:00:00 (Sun)
  59820764400, #  local_start 1896-08-22 23:00:00 (Sat)
  59905526400, #    local_end 1899-05-01 00:00:00 (Mon)
  32400,
  0,
  'ACST',
      ],
      [
  59905494000, #    utc_start 1899-04-30 15:00:00 (Sun)
  60463117860, #      utc_end 1916-12-31 14:31:00 (Sun)
  59905528200, #  local_start 1899-05-01 00:30:00 (Mon)
  60463152060, #    local_end 1917-01-01 00:01:00 (Mon)
  34200,
  0,
  'ACST',
      ],
      [
  60463117860, #    utc_start 1916-12-31 14:31:00 (Sun)
  60470292600, #      utc_end 1917-03-24 15:30:00 (Sat)
  60463155660, #  local_start 1917-01-01 01:01:00 (Mon)
  60470330400, #    local_end 1917-03-25 02:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  60470292600, #    utc_start 1917-03-24 15:30:00 (Sat)
  61252043400, #      utc_end 1941-12-31 16:30:00 (Wed)
  60470326800, #  local_start 1917-03-25 01:00:00 (Sun)
  61252077600, #    local_end 1942-01-01 02:00:00 (Thu)
  34200,
  0,
  'ACST',
      ],
      [
  61252043400, #    utc_start 1941-12-31 16:30:00 (Wed)
  61259556600, #      utc_end 1942-03-28 15:30:00 (Sat)
  61252081200, #  local_start 1942-01-01 03:00:00 (Thu)
  61259594400, #    local_end 1942-03-29 02:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  61259556600, #    utc_start 1942-03-28 15:30:00 (Sat)
  61275285000, #      utc_end 1942-09-26 16:30:00 (Sat)
  61259590800, #  local_start 1942-03-29 01:00:00 (Sun)
  61275319200, #    local_end 1942-09-27 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  61275285000, #    utc_start 1942-09-26 16:30:00 (Sat)
  61291006200, #      utc_end 1943-03-27 15:30:00 (Sat)
  61275322800, #  local_start 1942-09-27 03:00:00 (Sun)
  61291044000, #    local_end 1943-03-28 02:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  61291006200, #    utc_start 1943-03-27 15:30:00 (Sat)
  61307339400, #      utc_end 1943-10-02 16:30:00 (Sat)
  61291040400, #  local_start 1943-03-28 01:00:00 (Sun)
  61307373600, #    local_end 1943-10-03 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  61307339400, #    utc_start 1943-10-02 16:30:00 (Sat)
  61322455800, #      utc_end 1944-03-25 15:30:00 (Sat)
  61307377200, #  local_start 1943-10-03 03:00:00 (Sun)
  61322493600, #    local_end 1944-03-26 02:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  61322455800, #    utc_start 1944-03-25 15:30:00 (Sat)
  62167185000, #      utc_end 1970-12-31 14:30:00 (Thu)
  61322490000, #  local_start 1944-03-26 01:00:00 (Sun)
  62167219200, #    local_end 1971-01-01 00:00:00 (Fri)
  34200,
  0,
  'ACST',
      ],
      [
  62167185000, #    utc_start 1970-12-31 14:30:00 (Thu)
  62193371400, #      utc_end 1971-10-30 16:30:00 (Sat)
  62167219200, #  local_start 1971-01-01 00:00:00 (Fri)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62193371400, #    utc_start 1971-10-30 16:30:00 (Sat)
  62203653000, #      utc_end 1972-02-26 16:30:00 (Sat)
  62193409200, #  local_start 1971-10-31 03:00:00 (Sun)
  62203690800, #    local_end 1972-02-27 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62203653000, #    utc_start 1972-02-26 16:30:00 (Sat)
  62224821000, #      utc_end 1972-10-28 16:30:00 (Sat)
  62203687200, #  local_start 1972-02-27 02:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62224821000, #    utc_start 1972-10-28 16:30:00 (Sat)
  62235707400, #      utc_end 1973-03-03 16:30:00 (Sat)
  62224858800, #  local_start 1972-10-29 03:00:00 (Sun)
  62235745200, #    local_end 1973-03-04 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62235707400, #    utc_start 1973-03-03 16:30:00 (Sat)
  62256270600, #      utc_end 1973-10-27 16:30:00 (Sat)
  62235741600, #  local_start 1973-03-04 02:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62256270600, #    utc_start 1973-10-27 16:30:00 (Sat)
  62267157000, #      utc_end 1974-03-02 16:30:00 (Sat)
  62256308400, #  local_start 1973-10-28 03:00:00 (Sun)
  62267194800, #    local_end 1974-03-03 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62267157000, #    utc_start 1974-03-02 16:30:00 (Sat)
  62287720200, #      utc_end 1974-10-26 16:30:00 (Sat)
  62267191200, #  local_start 1974-03-03 02:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62287720200, #    utc_start 1974-10-26 16:30:00 (Sat)
  62298606600, #      utc_end 1975-03-01 16:30:00 (Sat)
  62287758000, #  local_start 1974-10-27 03:00:00 (Sun)
  62298644400, #    local_end 1975-03-02 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62298606600, #    utc_start 1975-03-01 16:30:00 (Sat)
  62319169800, #      utc_end 1975-10-25 16:30:00 (Sat)
  62298640800, #  local_start 1975-03-02 02:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62319169800, #    utc_start 1975-10-25 16:30:00 (Sat)
  62330661000, #      utc_end 1976-03-06 16:30:00 (Sat)
  62319207600, #  local_start 1975-10-26 03:00:00 (Sun)
  62330698800, #    local_end 1976-03-07 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62330661000, #    utc_start 1976-03-06 16:30:00 (Sat)
  62351224200, #      utc_end 1976-10-30 16:30:00 (Sat)
  62330695200, #  local_start 1976-03-07 02:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62351224200, #    utc_start 1976-10-30 16:30:00 (Sat)
  62362110600, #      utc_end 1977-03-05 16:30:00 (Sat)
  62351262000, #  local_start 1976-10-31 03:00:00 (Sun)
  62362148400, #    local_end 1977-03-06 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62362110600, #    utc_start 1977-03-05 16:30:00 (Sat)
  62382673800, #      utc_end 1977-10-29 16:30:00 (Sat)
  62362144800, #  local_start 1977-03-06 02:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62382673800, #    utc_start 1977-10-29 16:30:00 (Sat)
  62393560200, #      utc_end 1978-03-04 16:30:00 (Sat)
  62382711600, #  local_start 1977-10-30 03:00:00 (Sun)
  62393598000, #    local_end 1978-03-05 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62393560200, #    utc_start 1978-03-04 16:30:00 (Sat)
  62414123400, #      utc_end 1978-10-28 16:30:00 (Sat)
  62393594400, #  local_start 1978-03-05 02:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62414123400, #    utc_start 1978-10-28 16:30:00 (Sat)
  62425009800, #      utc_end 1979-03-03 16:30:00 (Sat)
  62414161200, #  local_start 1978-10-29 03:00:00 (Sun)
  62425047600, #    local_end 1979-03-04 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62425009800, #    utc_start 1979-03-03 16:30:00 (Sat)
  62445573000, #      utc_end 1979-10-27 16:30:00 (Sat)
  62425044000, #  local_start 1979-03-04 02:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62445573000, #    utc_start 1979-10-27 16:30:00 (Sat)
  62456459400, #      utc_end 1980-03-01 16:30:00 (Sat)
  62445610800, #  local_start 1979-10-28 03:00:00 (Sun)
  62456497200, #    local_end 1980-03-02 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62456459400, #    utc_start 1980-03-01 16:30:00 (Sat)
  62477022600, #      utc_end 1980-10-25 16:30:00 (Sat)
  62456493600, #  local_start 1980-03-02 02:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62477022600, #    utc_start 1980-10-25 16:30:00 (Sat)
  62487909000, #      utc_end 1981-02-28 16:30:00 (Sat)
  62477060400, #  local_start 1980-10-26 03:00:00 (Sun)
  62487946800, #    local_end 1981-03-01 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62487909000, #    utc_start 1981-02-28 16:30:00 (Sat)
  62508472200, #      utc_end 1981-10-24 16:30:00 (Sat)
  62487943200, #  local_start 1981-03-01 02:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62508472200, #    utc_start 1981-10-24 16:30:00 (Sat)
  62522382600, #      utc_end 1982-04-03 16:30:00 (Sat)
  62508510000, #  local_start 1981-10-25 03:00:00 (Sun)
  62522420400, #    local_end 1982-04-04 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62522382600, #    utc_start 1982-04-03 16:30:00 (Sat)
  62540526600, #      utc_end 1982-10-30 16:30:00 (Sat)
  62522416800, #  local_start 1982-04-04 02:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62540526600, #    utc_start 1982-10-30 16:30:00 (Sat)
  62551413000, #      utc_end 1983-03-05 16:30:00 (Sat)
  62540564400, #  local_start 1982-10-31 03:00:00 (Sun)
  62551450800, #    local_end 1983-03-06 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62551413000, #    utc_start 1983-03-05 16:30:00 (Sat)
  62571976200, #      utc_end 1983-10-29 16:30:00 (Sat)
  62551447200, #  local_start 1983-03-06 02:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62571976200, #    utc_start 1983-10-29 16:30:00 (Sat)
  62582862600, #      utc_end 1984-03-03 16:30:00 (Sat)
  62572014000, #  local_start 1983-10-30 03:00:00 (Sun)
  62582900400, #    local_end 1984-03-04 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62582862600, #    utc_start 1984-03-03 16:30:00 (Sat)
  62603425800, #      utc_end 1984-10-27 16:30:00 (Sat)
  62582896800, #  local_start 1984-03-04 02:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62603425800, #    utc_start 1984-10-27 16:30:00 (Sat)
  62614312200, #      utc_end 1985-03-02 16:30:00 (Sat)
  62603463600, #  local_start 1984-10-28 03:00:00 (Sun)
  62614350000, #    local_end 1985-03-03 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62614312200, #    utc_start 1985-03-02 16:30:00 (Sat)
  62634875400, #      utc_end 1985-10-26 16:30:00 (Sat)
  62614346400, #  local_start 1985-03-03 02:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62634875400, #    utc_start 1985-10-26 16:30:00 (Sat)
  62646971400, #      utc_end 1986-03-15 16:30:00 (Sat)
  62634913200, #  local_start 1985-10-27 03:00:00 (Sun)
  62647009200, #    local_end 1986-03-16 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62646971400, #    utc_start 1986-03-15 16:30:00 (Sat)
  62665720200, #      utc_end 1986-10-18 16:30:00 (Sat)
  62647005600, #  local_start 1986-03-16 02:00:00 (Sun)
  62665754400, #    local_end 1986-10-19 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62665720200, #    utc_start 1986-10-18 16:30:00 (Sat)
  62678421000, #      utc_end 1987-03-14 16:30:00 (Sat)
  62665758000, #  local_start 1986-10-19 03:00:00 (Sun)
  62678458800, #    local_end 1987-03-15 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62678421000, #    utc_start 1987-03-14 16:30:00 (Sat)
  62697774600, #      utc_end 1987-10-24 16:30:00 (Sat)
  62678455200, #  local_start 1987-03-15 02:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62697774600, #    utc_start 1987-10-24 16:30:00 (Sat)
  62710475400, #      utc_end 1988-03-19 16:30:00 (Sat)
  62697812400, #  local_start 1987-10-25 03:00:00 (Sun)
  62710513200, #    local_end 1988-03-20 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62710475400, #    utc_start 1988-03-19 16:30:00 (Sat)
  62729829000, #      utc_end 1988-10-29 16:30:00 (Sat)
  62710509600, #  local_start 1988-03-20 02:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62729829000, #    utc_start 1988-10-29 16:30:00 (Sat)
  62741925000, #      utc_end 1989-03-18 16:30:00 (Sat)
  62729866800, #  local_start 1988-10-30 03:00:00 (Sun)
  62741962800, #    local_end 1989-03-19 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62741925000, #    utc_start 1989-03-18 16:30:00 (Sat)
  62761278600, #      utc_end 1989-10-28 16:30:00 (Sat)
  62741959200, #  local_start 1989-03-19 02:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62761278600, #    utc_start 1989-10-28 16:30:00 (Sat)
  62772165000, #      utc_end 1990-03-03 16:30:00 (Sat)
  62761316400, #  local_start 1989-10-29 03:00:00 (Sun)
  62772202800, #    local_end 1990-03-04 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62772165000, #    utc_start 1990-03-03 16:30:00 (Sat)
  62792728200, #      utc_end 1990-10-27 16:30:00 (Sat)
  62772199200, #  local_start 1990-03-04 02:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62792728200, #    utc_start 1990-10-27 16:30:00 (Sat)
  62803614600, #      utc_end 1991-03-02 16:30:00 (Sat)
  62792766000, #  local_start 1990-10-28 03:00:00 (Sun)
  62803652400, #    local_end 1991-03-03 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62803614600, #    utc_start 1991-03-02 16:30:00 (Sat)
  62824177800, #      utc_end 1991-10-26 16:30:00 (Sat)
  62803648800, #  local_start 1991-03-03 02:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62824177800, #    utc_start 1991-10-26 16:30:00 (Sat)
  62835064200, #      utc_end 1992-02-29 16:30:00 (Sat)
  62824215600, #  local_start 1991-10-27 03:00:00 (Sun)
  62835102000, #    local_end 1992-03-01 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62835064200, #    utc_start 1992-02-29 16:30:00 (Sat)
  62855627400, #      utc_end 1992-10-24 16:30:00 (Sat)
  62835098400, #  local_start 1992-03-01 02:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62855627400, #    utc_start 1992-10-24 16:30:00 (Sat)
  62867118600, #      utc_end 1993-03-06 16:30:00 (Sat)
  62855665200, #  local_start 1992-10-25 03:00:00 (Sun)
  62867156400, #    local_end 1993-03-07 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62867118600, #    utc_start 1993-03-06 16:30:00 (Sat)
  62887681800, #      utc_end 1993-10-30 16:30:00 (Sat)
  62867152800, #  local_start 1993-03-07 02:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62887681800, #    utc_start 1993-10-30 16:30:00 (Sat)
  62898568200, #      utc_end 1994-03-05 16:30:00 (Sat)
  62887719600, #  local_start 1993-10-31 03:00:00 (Sun)
  62898606000, #    local_end 1994-03-06 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62898568200, #    utc_start 1994-03-05 16:30:00 (Sat)
  62919131400, #      utc_end 1994-10-29 16:30:00 (Sat)
  62898602400, #  local_start 1994-03-06 02:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62919131400, #    utc_start 1994-10-29 16:30:00 (Sat)
  62930017800, #      utc_end 1995-03-04 16:30:00 (Sat)
  62919169200, #  local_start 1994-10-30 03:00:00 (Sun)
  62930055600, #    local_end 1995-03-05 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62930017800, #    utc_start 1995-03-04 16:30:00 (Sat)
  62950581000, #      utc_end 1995-10-28 16:30:00 (Sat)
  62930052000, #  local_start 1995-03-05 02:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62950581000, #    utc_start 1995-10-28 16:30:00 (Sat)
  62963886600, #      utc_end 1996-03-30 16:30:00 (Sat)
  62950618800, #  local_start 1995-10-29 03:00:00 (Sun)
  62963924400, #    local_end 1996-03-31 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62963886600, #    utc_start 1996-03-30 16:30:00 (Sat)
  62982030600, #      utc_end 1996-10-26 16:30:00 (Sat)
  62963920800, #  local_start 1996-03-31 02:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  62982030600, #    utc_start 1996-10-26 16:30:00 (Sat)
  62995336200, #      utc_end 1997-03-29 16:30:00 (Sat)
  62982068400, #  local_start 1996-10-27 03:00:00 (Sun)
  62995374000, #    local_end 1997-03-30 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  62995336200, #    utc_start 1997-03-29 16:30:00 (Sat)
  63013480200, #      utc_end 1997-10-25 16:30:00 (Sat)
  62995370400, #  local_start 1997-03-30 02:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63013480200, #    utc_start 1997-10-25 16:30:00 (Sat)
  63026785800, #      utc_end 1998-03-28 16:30:00 (Sat)
  63013518000, #  local_start 1997-10-26 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63026785800, #    utc_start 1998-03-28 16:30:00 (Sat)
  63044929800, #      utc_end 1998-10-24 16:30:00 (Sat)
  63026820000, #  local_start 1998-03-29 02:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63044929800, #    utc_start 1998-10-24 16:30:00 (Sat)
  63058235400, #      utc_end 1999-03-27 16:30:00 (Sat)
  63044967600, #  local_start 1998-10-25 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63058235400, #    utc_start 1999-03-27 16:30:00 (Sat)
  63076984200, #      utc_end 1999-10-30 16:30:00 (Sat)
  63058269600, #  local_start 1999-03-28 02:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63076984200, #    utc_start 1999-10-30 16:30:00 (Sat)
  63082330200, #      utc_end 1999-12-31 13:30:00 (Fri)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63082368000, #    local_end 2000-01-01 00:00:00 (Sat)
  37800,
  1,
  'ACDT',
      ],
      [
  63082330200, #    utc_start 1999-12-31 13:30:00 (Fri)
  63089685000, #      utc_end 2000-03-25 16:30:00 (Sat)
  63082368000, #  local_start 2000-01-01 00:00:00 (Sat)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63089685000, #    utc_start 2000-03-25 16:30:00 (Sat)
  63108433800, #      utc_end 2000-10-28 16:30:00 (Sat)
  63089719200, #  local_start 2000-03-26 02:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63108433800, #    utc_start 2000-10-28 16:30:00 (Sat)
  63121134600, #      utc_end 2001-03-24 16:30:00 (Sat)
  63108471600, #  local_start 2000-10-29 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63121134600, #    utc_start 2001-03-24 16:30:00 (Sat)
  63139883400, #      utc_end 2001-10-27 16:30:00 (Sat)
  63121168800, #  local_start 2001-03-25 02:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63139883400, #    utc_start 2001-10-27 16:30:00 (Sat)
  63153189000, #      utc_end 2002-03-30 16:30:00 (Sat)
  63139921200, #  local_start 2001-10-28 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63153189000, #    utc_start 2002-03-30 16:30:00 (Sat)
  63171333000, #      utc_end 2002-10-26 16:30:00 (Sat)
  63153223200, #  local_start 2002-03-31 02:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63171333000, #    utc_start 2002-10-26 16:30:00 (Sat)
  63184638600, #      utc_end 2003-03-29 16:30:00 (Sat)
  63171370800, #  local_start 2002-10-27 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63184638600, #    utc_start 2003-03-29 16:30:00 (Sat)
  63202782600, #      utc_end 2003-10-25 16:30:00 (Sat)
  63184672800, #  local_start 2003-03-30 02:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63202782600, #    utc_start 2003-10-25 16:30:00 (Sat)
  63216088200, #      utc_end 2004-03-27 16:30:00 (Sat)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63216088200, #    utc_start 2004-03-27 16:30:00 (Sat)
  63234837000, #      utc_end 2004-10-30 16:30:00 (Sat)
  63216122400, #  local_start 2004-03-28 02:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63234837000, #    utc_start 2004-10-30 16:30:00 (Sat)
  63247537800, #      utc_end 2005-03-26 16:30:00 (Sat)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63247537800, #    utc_start 2005-03-26 16:30:00 (Sat)
  63266286600, #      utc_end 2005-10-29 16:30:00 (Sat)
  63247572000, #  local_start 2005-03-27 02:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63266286600, #    utc_start 2005-10-29 16:30:00 (Sat)
  63279592200, #      utc_end 2006-04-01 16:30:00 (Sat)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279630000, #    local_end 2006-04-02 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63279592200, #    utc_start 2006-04-01 16:30:00 (Sat)
  63297736200, #      utc_end 2006-10-28 16:30:00 (Sat)
  63279626400, #  local_start 2006-04-02 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63297736200, #    utc_start 2006-10-28 16:30:00 (Sat)
  63310437000, #      utc_end 2007-03-24 16:30:00 (Sat)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63310437000, #    utc_start 2007-03-24 16:30:00 (Sat)
  63329185800, #      utc_end 2007-10-27 16:30:00 (Sat)
  63310471200, #  local_start 2007-03-25 02:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63329185800, #    utc_start 2007-10-27 16:30:00 (Sat)
  63343096200, #      utc_end 2008-04-05 16:30:00 (Sat)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63343134000, #    local_end 2008-04-06 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63343096200, #    utc_start 2008-04-05 16:30:00 (Sat)
  63358821000, #      utc_end 2008-10-04 16:30:00 (Sat)
  63343130400, #  local_start 2008-04-06 02:00:00 (Sun)
  63358855200, #    local_end 2008-10-05 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63358821000, #    utc_start 2008-10-04 16:30:00 (Sat)
  63374545800, #      utc_end 2009-04-04 16:30:00 (Sat)
  63358858800, #  local_start 2008-10-05 03:00:00 (Sun)
  63374583600, #    local_end 2009-04-05 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63374545800, #    utc_start 2009-04-04 16:30:00 (Sat)
  63390270600, #      utc_end 2009-10-03 16:30:00 (Sat)
  63374580000, #  local_start 2009-04-05 02:00:00 (Sun)
  63390304800, #    local_end 2009-10-04 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63390270600, #    utc_start 2009-10-03 16:30:00 (Sat)
  63405995400, #      utc_end 2010-04-03 16:30:00 (Sat)
  63390308400, #  local_start 2009-10-04 03:00:00 (Sun)
  63406033200, #    local_end 2010-04-04 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63405995400, #    utc_start 2010-04-03 16:30:00 (Sat)
  63421720200, #      utc_end 2010-10-02 16:30:00 (Sat)
  63406029600, #  local_start 2010-04-04 02:00:00 (Sun)
  63421754400, #    local_end 2010-10-03 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63421720200, #    utc_start 2010-10-02 16:30:00 (Sat)
  63437445000, #      utc_end 2011-04-02 16:30:00 (Sat)
  63421758000, #  local_start 2010-10-03 03:00:00 (Sun)
  63437482800, #    local_end 2011-04-03 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63437445000, #    utc_start 2011-04-02 16:30:00 (Sat)
  63453169800, #      utc_end 2011-10-01 16:30:00 (Sat)
  63437479200, #  local_start 2011-04-03 02:00:00 (Sun)
  63453204000, #    local_end 2011-10-02 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63453169800, #    utc_start 2011-10-01 16:30:00 (Sat)
  63468894600, #      utc_end 2012-03-31 16:30:00 (Sat)
  63453207600, #  local_start 2011-10-02 03:00:00 (Sun)
  63468932400, #    local_end 2012-04-01 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63468894600, #    utc_start 2012-03-31 16:30:00 (Sat)
  63485224200, #      utc_end 2012-10-06 16:30:00 (Sat)
  63468928800, #  local_start 2012-04-01 02:00:00 (Sun)
  63485258400, #    local_end 2012-10-07 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63485224200, #    utc_start 2012-10-06 16:30:00 (Sat)
  63500949000, #      utc_end 2013-04-06 16:30:00 (Sat)
  63485262000, #  local_start 2012-10-07 03:00:00 (Sun)
  63500986800, #    local_end 2013-04-07 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63500949000, #    utc_start 2013-04-06 16:30:00 (Sat)
  63516673800, #      utc_end 2013-10-05 16:30:00 (Sat)
  63500983200, #  local_start 2013-04-07 02:00:00 (Sun)
  63516708000, #    local_end 2013-10-06 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63516673800, #    utc_start 2013-10-05 16:30:00 (Sat)
  63532398600, #      utc_end 2014-04-05 16:30:00 (Sat)
  63516711600, #  local_start 2013-10-06 03:00:00 (Sun)
  63532436400, #    local_end 2014-04-06 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63532398600, #    utc_start 2014-04-05 16:30:00 (Sat)
  63548123400, #      utc_end 2014-10-04 16:30:00 (Sat)
  63532432800, #  local_start 2014-04-06 02:00:00 (Sun)
  63548157600, #    local_end 2014-10-05 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63548123400, #    utc_start 2014-10-04 16:30:00 (Sat)
  63563848200, #      utc_end 2015-04-04 16:30:00 (Sat)
  63548161200, #  local_start 2014-10-05 03:00:00 (Sun)
  63563886000, #    local_end 2015-04-05 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63563848200, #    utc_start 2015-04-04 16:30:00 (Sat)
  63579573000, #      utc_end 2015-10-03 16:30:00 (Sat)
  63563882400, #  local_start 2015-04-05 02:00:00 (Sun)
  63579607200, #    local_end 2015-10-04 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63579573000, #    utc_start 2015-10-03 16:30:00 (Sat)
  63595297800, #      utc_end 2016-04-02 16:30:00 (Sat)
  63579610800, #  local_start 2015-10-04 03:00:00 (Sun)
  63595335600, #    local_end 2016-04-03 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63595297800, #    utc_start 2016-04-02 16:30:00 (Sat)
  63611022600, #      utc_end 2016-10-01 16:30:00 (Sat)
  63595332000, #  local_start 2016-04-03 02:00:00 (Sun)
  63611056800, #    local_end 2016-10-02 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63611022600, #    utc_start 2016-10-01 16:30:00 (Sat)
  63626747400, #      utc_end 2017-04-01 16:30:00 (Sat)
  63611060400, #  local_start 2016-10-02 03:00:00 (Sun)
  63626785200, #    local_end 2017-04-02 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63626747400, #    utc_start 2017-04-01 16:30:00 (Sat)
  63642472200, #      utc_end 2017-09-30 16:30:00 (Sat)
  63626781600, #  local_start 2017-04-02 02:00:00 (Sun)
  63642506400, #    local_end 2017-10-01 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63642472200, #    utc_start 2017-09-30 16:30:00 (Sat)
  63658197000, #      utc_end 2018-03-31 16:30:00 (Sat)
  63642510000, #  local_start 2017-10-01 03:00:00 (Sun)
  63658234800, #    local_end 2018-04-01 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63658197000, #    utc_start 2018-03-31 16:30:00 (Sat)
  63674526600, #      utc_end 2018-10-06 16:30:00 (Sat)
  63658231200, #  local_start 2018-04-01 02:00:00 (Sun)
  63674560800, #    local_end 2018-10-07 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63674526600, #    utc_start 2018-10-06 16:30:00 (Sat)
  63690251400, #      utc_end 2019-04-06 16:30:00 (Sat)
  63674564400, #  local_start 2018-10-07 03:00:00 (Sun)
  63690289200, #    local_end 2019-04-07 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63690251400, #    utc_start 2019-04-06 16:30:00 (Sat)
  63705976200, #      utc_end 2019-10-05 16:30:00 (Sat)
  63690285600, #  local_start 2019-04-07 02:00:00 (Sun)
  63706010400, #    local_end 2019-10-06 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63705976200, #    utc_start 2019-10-05 16:30:00 (Sat)
  63721701000, #      utc_end 2020-04-04 16:30:00 (Sat)
  63706014000, #  local_start 2019-10-06 03:00:00 (Sun)
  63721738800, #    local_end 2020-04-05 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63721701000, #    utc_start 2020-04-04 16:30:00 (Sat)
  63737425800, #      utc_end 2020-10-03 16:30:00 (Sat)
  63721735200, #  local_start 2020-04-05 02:00:00 (Sun)
  63737460000, #    local_end 2020-10-04 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63737425800, #    utc_start 2020-10-03 16:30:00 (Sat)
  63753150600, #      utc_end 2021-04-03 16:30:00 (Sat)
  63737463600, #  local_start 2020-10-04 03:00:00 (Sun)
  63753188400, #    local_end 2021-04-04 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63753150600, #    utc_start 2021-04-03 16:30:00 (Sat)
  63768875400, #      utc_end 2021-10-02 16:30:00 (Sat)
  63753184800, #  local_start 2021-04-04 02:00:00 (Sun)
  63768909600, #    local_end 2021-10-03 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63768875400, #    utc_start 2021-10-02 16:30:00 (Sat)
  63784600200, #      utc_end 2022-04-02 16:30:00 (Sat)
  63768913200, #  local_start 2021-10-03 03:00:00 (Sun)
  63784638000, #    local_end 2022-04-03 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63784600200, #    utc_start 2022-04-02 16:30:00 (Sat)
  63800325000, #      utc_end 2022-10-01 16:30:00 (Sat)
  63784634400, #  local_start 2022-04-03 02:00:00 (Sun)
  63800359200, #    local_end 2022-10-02 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63800325000, #    utc_start 2022-10-01 16:30:00 (Sat)
  63816049800, #      utc_end 2023-04-01 16:30:00 (Sat)
  63800362800, #  local_start 2022-10-02 03:00:00 (Sun)
  63816087600, #    local_end 2023-04-02 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63816049800, #    utc_start 2023-04-01 16:30:00 (Sat)
  63831774600, #      utc_end 2023-09-30 16:30:00 (Sat)
  63816084000, #  local_start 2023-04-02 02:00:00 (Sun)
  63831808800, #    local_end 2023-10-01 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63831774600, #    utc_start 2023-09-30 16:30:00 (Sat)
  63848104200, #      utc_end 2024-04-06 16:30:00 (Sat)
  63831812400, #  local_start 2023-10-01 03:00:00 (Sun)
  63848142000, #    local_end 2024-04-07 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63848104200, #    utc_start 2024-04-06 16:30:00 (Sat)
  63863829000, #      utc_end 2024-10-05 16:30:00 (Sat)
  63848138400, #  local_start 2024-04-07 02:00:00 (Sun)
  63863863200, #    local_end 2024-10-06 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63863829000, #    utc_start 2024-10-05 16:30:00 (Sat)
  63879553800, #      utc_end 2025-04-05 16:30:00 (Sat)
  63863866800, #  local_start 2024-10-06 03:00:00 (Sun)
  63879591600, #    local_end 2025-04-06 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63879553800, #    utc_start 2025-04-05 16:30:00 (Sat)
  63895278600, #      utc_end 2025-10-04 16:30:00 (Sat)
  63879588000, #  local_start 2025-04-06 02:00:00 (Sun)
  63895312800, #    local_end 2025-10-05 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63895278600, #    utc_start 2025-10-04 16:30:00 (Sat)
  63911003400, #      utc_end 2026-04-04 16:30:00 (Sat)
  63895316400, #  local_start 2025-10-05 03:00:00 (Sun)
  63911041200, #    local_end 2026-04-05 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63911003400, #    utc_start 2026-04-04 16:30:00 (Sat)
  63926728200, #      utc_end 2026-10-03 16:30:00 (Sat)
  63911037600, #  local_start 2026-04-05 02:00:00 (Sun)
  63926762400, #    local_end 2026-10-04 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  63926728200, #    utc_start 2026-10-03 16:30:00 (Sat)
  63942453000, #      utc_end 2027-04-03 16:30:00 (Sat)
  63926766000, #  local_start 2026-10-04 03:00:00 (Sun)
  63942490800, #    local_end 2027-04-04 03:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  63942453000, #    utc_start 2027-04-03 16:30:00 (Sat)
  63958177800, #      utc_end 2027-10-02 16:30:00 (Sat)
  63942487200, #  local_start 2027-04-04 02:00:00 (Sun)
  63958212000, #    local_end 2027-10-03 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {62}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 34200 }
  
  my $last_observance = bless( {
    'format' => 'AC%sT',
    'gmtoff' => '9:30',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730120,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730120,
      'utc_rd_secs' => 0,
      'utc_year' => 2001
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 34200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730119,
      'local_rd_secs' => 48600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730119,
      'utc_rd_secs' => 48600,
      'utc_year' => 2000
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00s',
      'from' => '2008',
      'in' => 'Oct',
      'letter' => 'D',
      'name' => 'AS',
      'offset_from_std' => 3600,
      'on' => 'Sun>=1',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00s',
      'from' => '2008',
      'in' => 'Apr',
      'letter' => 'S',
      'name' => 'AS',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AUSTRALIA_BROKEN_HILL

    $main::fatpacked{"DateTime/TimeZone/Australia/Currie.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AUSTRALIA_CURRIE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Australia::Currie;
  $DateTime::TimeZone::Australia::Currie::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Australia::Currie::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59789888672, #      utc_end 1895-08-31 14:24:32 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59789923200, #    local_end 1895-09-01 00:00:00 (Sun)
  34528,
  0,
  'LMT',
      ],
      [
  59789888672, #    utc_start 1895-08-31 14:24:32 (Sat)
  60455174400, #      utc_end 1916-09-30 16:00:00 (Sat)
  59789924672, #  local_start 1895-09-01 00:24:32 (Sun)
  60455210400, #    local_end 1916-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  60455174400, #    utc_start 1916-09-30 16:00:00 (Sat)
  60465790800, #      utc_end 1917-01-31 13:00:00 (Wed)
  60455214000, #  local_start 1916-10-01 03:00:00 (Sun)
  60465830400, #    local_end 1917-02-01 00:00:00 (Thu)
  39600,
  1,
  'AEDT',
      ],
      [
  60465790800, #    utc_start 1917-01-31 13:00:00 (Wed)
  60470290800, #      utc_end 1917-03-24 15:00:00 (Sat)
  60465830400, #  local_start 1917-02-01 00:00:00 (Thu)
  60470330400, #    local_end 1917-03-25 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  60470290800, #    utc_start 1917-03-24 15:00:00 (Sat)
  61252041600, #      utc_end 1941-12-31 16:00:00 (Wed)
  60470326800, #  local_start 1917-03-25 01:00:00 (Sun)
  61252077600, #    local_end 1942-01-01 02:00:00 (Thu)
  36000,
  0,
  'AEST',
      ],
      [
  61252041600, #    utc_start 1941-12-31 16:00:00 (Wed)
  61259554800, #      utc_end 1942-03-28 15:00:00 (Sat)
  61252081200, #  local_start 1942-01-01 03:00:00 (Thu)
  61259594400, #    local_end 1942-03-29 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61259554800, #    utc_start 1942-03-28 15:00:00 (Sat)
  61275283200, #      utc_end 1942-09-26 16:00:00 (Sat)
  61259590800, #  local_start 1942-03-29 01:00:00 (Sun)
  61275319200, #    local_end 1942-09-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  61275283200, #    utc_start 1942-09-26 16:00:00 (Sat)
  61291004400, #      utc_end 1943-03-27 15:00:00 (Sat)
  61275322800, #  local_start 1942-09-27 03:00:00 (Sun)
  61291044000, #    local_end 1943-03-28 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61291004400, #    utc_start 1943-03-27 15:00:00 (Sat)
  61307337600, #      utc_end 1943-10-02 16:00:00 (Sat)
  61291040400, #  local_start 1943-03-28 01:00:00 (Sun)
  61307373600, #    local_end 1943-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  61307337600, #    utc_start 1943-10-02 16:00:00 (Sat)
  61322454000, #      utc_end 1944-03-25 15:00:00 (Sat)
  61307377200, #  local_start 1943-10-03 03:00:00 (Sun)
  61322493600, #    local_end 1944-03-26 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61322454000, #    utc_start 1944-03-25 15:00:00 (Sat)
  62182821600, #      utc_end 1971-06-30 14:00:00 (Wed)
  61322490000, #  local_start 1944-03-26 01:00:00 (Sun)
  62182857600, #    local_end 1971-07-01 00:00:00 (Thu)
  36000,
  0,
  'AEST',
      ],
      [
  62182821600, #    utc_start 1971-06-30 14:00:00 (Wed)
  62193369600, #      utc_end 1971-10-30 16:00:00 (Sat)
  62182857600, #  local_start 1971-07-01 00:00:00 (Thu)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62193369600, #    utc_start 1971-10-30 16:00:00 (Sat)
  62203651200, #      utc_end 1972-02-26 16:00:00 (Sat)
  62193409200, #  local_start 1971-10-31 03:00:00 (Sun)
  62203690800, #    local_end 1972-02-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62203651200, #    utc_start 1972-02-26 16:00:00 (Sat)
  62224819200, #      utc_end 1972-10-28 16:00:00 (Sat)
  62203687200, #  local_start 1972-02-27 02:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62224819200, #    utc_start 1972-10-28 16:00:00 (Sat)
  62235705600, #      utc_end 1973-03-03 16:00:00 (Sat)
  62224858800, #  local_start 1972-10-29 03:00:00 (Sun)
  62235745200, #    local_end 1973-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62235705600, #    utc_start 1973-03-03 16:00:00 (Sat)
  62256268800, #      utc_end 1973-10-27 16:00:00 (Sat)
  62235741600, #  local_start 1973-03-04 02:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62256268800, #    utc_start 1973-10-27 16:00:00 (Sat)
  62267155200, #      utc_end 1974-03-02 16:00:00 (Sat)
  62256308400, #  local_start 1973-10-28 03:00:00 (Sun)
  62267194800, #    local_end 1974-03-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62267155200, #    utc_start 1974-03-02 16:00:00 (Sat)
  62287718400, #      utc_end 1974-10-26 16:00:00 (Sat)
  62267191200, #  local_start 1974-03-03 02:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62287718400, #    utc_start 1974-10-26 16:00:00 (Sat)
  62298604800, #      utc_end 1975-03-01 16:00:00 (Sat)
  62287758000, #  local_start 1974-10-27 03:00:00 (Sun)
  62298644400, #    local_end 1975-03-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62298604800, #    utc_start 1975-03-01 16:00:00 (Sat)
  62319168000, #      utc_end 1975-10-25 16:00:00 (Sat)
  62298640800, #  local_start 1975-03-02 02:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62319168000, #    utc_start 1975-10-25 16:00:00 (Sat)
  62330659200, #      utc_end 1976-03-06 16:00:00 (Sat)
  62319207600, #  local_start 1975-10-26 03:00:00 (Sun)
  62330698800, #    local_end 1976-03-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62330659200, #    utc_start 1976-03-06 16:00:00 (Sat)
  62351222400, #      utc_end 1976-10-30 16:00:00 (Sat)
  62330695200, #  local_start 1976-03-07 02:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62351222400, #    utc_start 1976-10-30 16:00:00 (Sat)
  62362108800, #      utc_end 1977-03-05 16:00:00 (Sat)
  62351262000, #  local_start 1976-10-31 03:00:00 (Sun)
  62362148400, #    local_end 1977-03-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62362108800, #    utc_start 1977-03-05 16:00:00 (Sat)
  62382672000, #      utc_end 1977-10-29 16:00:00 (Sat)
  62362144800, #  local_start 1977-03-06 02:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62382672000, #    utc_start 1977-10-29 16:00:00 (Sat)
  62393558400, #      utc_end 1978-03-04 16:00:00 (Sat)
  62382711600, #  local_start 1977-10-30 03:00:00 (Sun)
  62393598000, #    local_end 1978-03-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62393558400, #    utc_start 1978-03-04 16:00:00 (Sat)
  62414121600, #      utc_end 1978-10-28 16:00:00 (Sat)
  62393594400, #  local_start 1978-03-05 02:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62414121600, #    utc_start 1978-10-28 16:00:00 (Sat)
  62425008000, #      utc_end 1979-03-03 16:00:00 (Sat)
  62414161200, #  local_start 1978-10-29 03:00:00 (Sun)
  62425047600, #    local_end 1979-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62425008000, #    utc_start 1979-03-03 16:00:00 (Sat)
  62445571200, #      utc_end 1979-10-27 16:00:00 (Sat)
  62425044000, #  local_start 1979-03-04 02:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62445571200, #    utc_start 1979-10-27 16:00:00 (Sat)
  62456457600, #      utc_end 1980-03-01 16:00:00 (Sat)
  62445610800, #  local_start 1979-10-28 03:00:00 (Sun)
  62456497200, #    local_end 1980-03-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62456457600, #    utc_start 1980-03-01 16:00:00 (Sat)
  62477020800, #      utc_end 1980-10-25 16:00:00 (Sat)
  62456493600, #  local_start 1980-03-02 02:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62477020800, #    utc_start 1980-10-25 16:00:00 (Sat)
  62487907200, #      utc_end 1981-02-28 16:00:00 (Sat)
  62477060400, #  local_start 1980-10-26 03:00:00 (Sun)
  62487946800, #    local_end 1981-03-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62487907200, #    utc_start 1981-02-28 16:00:00 (Sat)
  62508470400, #      utc_end 1981-10-24 16:00:00 (Sat)
  62487943200, #  local_start 1981-03-01 02:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62508470400, #    utc_start 1981-10-24 16:00:00 (Sat)
  62521776000, #      utc_end 1982-03-27 16:00:00 (Sat)
  62508510000, #  local_start 1981-10-25 03:00:00 (Sun)
  62521815600, #    local_end 1982-03-28 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62521776000, #    utc_start 1982-03-27 16:00:00 (Sat)
  62540524800, #      utc_end 1982-10-30 16:00:00 (Sat)
  62521812000, #  local_start 1982-03-28 02:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62540524800, #    utc_start 1982-10-30 16:00:00 (Sat)
  62553225600, #      utc_end 1983-03-26 16:00:00 (Sat)
  62540564400, #  local_start 1982-10-31 03:00:00 (Sun)
  62553265200, #    local_end 1983-03-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62553225600, #    utc_start 1983-03-26 16:00:00 (Sat)
  62571974400, #      utc_end 1983-10-29 16:00:00 (Sat)
  62553261600, #  local_start 1983-03-27 02:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62571974400, #    utc_start 1983-10-29 16:00:00 (Sat)
  62582860800, #      utc_end 1984-03-03 16:00:00 (Sat)
  62572014000, #  local_start 1983-10-30 03:00:00 (Sun)
  62582900400, #    local_end 1984-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62582860800, #    utc_start 1984-03-03 16:00:00 (Sat)
  62603424000, #      utc_end 1984-10-27 16:00:00 (Sat)
  62582896800, #  local_start 1984-03-04 02:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62603424000, #    utc_start 1984-10-27 16:00:00 (Sat)
  62614310400, #      utc_end 1985-03-02 16:00:00 (Sat)
  62603463600, #  local_start 1984-10-28 03:00:00 (Sun)
  62614350000, #    local_end 1985-03-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62614310400, #    utc_start 1985-03-02 16:00:00 (Sat)
  62634873600, #      utc_end 1985-10-26 16:00:00 (Sat)
  62614346400, #  local_start 1985-03-03 02:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62634873600, #    utc_start 1985-10-26 16:00:00 (Sat)
  62645760000, #      utc_end 1986-03-01 16:00:00 (Sat)
  62634913200, #  local_start 1985-10-27 03:00:00 (Sun)
  62645799600, #    local_end 1986-03-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62645760000, #    utc_start 1986-03-01 16:00:00 (Sat)
  62665718400, #      utc_end 1986-10-18 16:00:00 (Sat)
  62645796000, #  local_start 1986-03-02 02:00:00 (Sun)
  62665754400, #    local_end 1986-10-19 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62665718400, #    utc_start 1986-10-18 16:00:00 (Sat)
  62678419200, #      utc_end 1987-03-14 16:00:00 (Sat)
  62665758000, #  local_start 1986-10-19 03:00:00 (Sun)
  62678458800, #    local_end 1987-03-15 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62678419200, #    utc_start 1987-03-14 16:00:00 (Sat)
  62697772800, #      utc_end 1987-10-24 16:00:00 (Sat)
  62678455200, #  local_start 1987-03-15 02:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62697772800, #    utc_start 1987-10-24 16:00:00 (Sat)
  62710473600, #      utc_end 1988-03-19 16:00:00 (Sat)
  62697812400, #  local_start 1987-10-25 03:00:00 (Sun)
  62710513200, #    local_end 1988-03-20 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62710473600, #    utc_start 1988-03-19 16:00:00 (Sat)
  62729827200, #      utc_end 1988-10-29 16:00:00 (Sat)
  62710509600, #  local_start 1988-03-20 02:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62729827200, #    utc_start 1988-10-29 16:00:00 (Sat)
  62741923200, #      utc_end 1989-03-18 16:00:00 (Sat)
  62729866800, #  local_start 1988-10-30 03:00:00 (Sun)
  62741962800, #    local_end 1989-03-19 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62741923200, #    utc_start 1989-03-18 16:00:00 (Sat)
  62761276800, #      utc_end 1989-10-28 16:00:00 (Sat)
  62741959200, #  local_start 1989-03-19 02:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62761276800, #    utc_start 1989-10-28 16:00:00 (Sat)
  62773372800, #      utc_end 1990-03-17 16:00:00 (Sat)
  62761316400, #  local_start 1989-10-29 03:00:00 (Sun)
  62773412400, #    local_end 1990-03-18 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62773372800, #    utc_start 1990-03-17 16:00:00 (Sat)
  62792726400, #      utc_end 1990-10-27 16:00:00 (Sat)
  62773408800, #  local_start 1990-03-18 02:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62792726400, #    utc_start 1990-10-27 16:00:00 (Sat)
  62806032000, #      utc_end 1991-03-30 16:00:00 (Sat)
  62792766000, #  local_start 1990-10-28 03:00:00 (Sun)
  62806071600, #    local_end 1991-03-31 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62806032000, #    utc_start 1991-03-30 16:00:00 (Sat)
  62822361600, #      utc_end 1991-10-05 16:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62822397600, #    local_end 1991-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62822361600, #    utc_start 1991-10-05 16:00:00 (Sat)
  62837481600, #      utc_end 1992-03-28 16:00:00 (Sat)
  62822401200, #  local_start 1991-10-06 03:00:00 (Sun)
  62837521200, #    local_end 1992-03-29 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62837481600, #    utc_start 1992-03-28 16:00:00 (Sat)
  62853811200, #      utc_end 1992-10-03 16:00:00 (Sat)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62853847200, #    local_end 1992-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62853811200, #    utc_start 1992-10-03 16:00:00 (Sat)
  62868931200, #      utc_end 1993-03-27 16:00:00 (Sat)
  62853850800, #  local_start 1992-10-04 03:00:00 (Sun)
  62868970800, #    local_end 1993-03-28 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62868931200, #    utc_start 1993-03-27 16:00:00 (Sat)
  62885260800, #      utc_end 1993-10-02 16:00:00 (Sat)
  62868967200, #  local_start 1993-03-28 02:00:00 (Sun)
  62885296800, #    local_end 1993-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62885260800, #    utc_start 1993-10-02 16:00:00 (Sat)
  62900380800, #      utc_end 1994-03-26 16:00:00 (Sat)
  62885300400, #  local_start 1993-10-03 03:00:00 (Sun)
  62900420400, #    local_end 1994-03-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62900380800, #    utc_start 1994-03-26 16:00:00 (Sat)
  62916710400, #      utc_end 1994-10-01 16:00:00 (Sat)
  62900416800, #  local_start 1994-03-27 02:00:00 (Sun)
  62916746400, #    local_end 1994-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62916710400, #    utc_start 1994-10-01 16:00:00 (Sat)
  62931830400, #      utc_end 1995-03-25 16:00:00 (Sat)
  62916750000, #  local_start 1994-10-02 03:00:00 (Sun)
  62931870000, #    local_end 1995-03-26 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62931830400, #    utc_start 1995-03-25 16:00:00 (Sat)
  62948160000, #      utc_end 1995-09-30 16:00:00 (Sat)
  62931866400, #  local_start 1995-03-26 02:00:00 (Sun)
  62948196000, #    local_end 1995-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62948160000, #    utc_start 1995-09-30 16:00:00 (Sat)
  62963884800, #      utc_end 1996-03-30 16:00:00 (Sat)
  62948199600, #  local_start 1995-10-01 03:00:00 (Sun)
  62963924400, #    local_end 1996-03-31 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62963884800, #    utc_start 1996-03-30 16:00:00 (Sat)
  62980214400, #      utc_end 1996-10-05 16:00:00 (Sat)
  62963920800, #  local_start 1996-03-31 02:00:00 (Sun)
  62980250400, #    local_end 1996-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62980214400, #    utc_start 1996-10-05 16:00:00 (Sat)
  62995334400, #      utc_end 1997-03-29 16:00:00 (Sat)
  62980254000, #  local_start 1996-10-06 03:00:00 (Sun)
  62995374000, #    local_end 1997-03-30 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62995334400, #    utc_start 1997-03-29 16:00:00 (Sat)
  63011664000, #      utc_end 1997-10-04 16:00:00 (Sat)
  62995370400, #  local_start 1997-03-30 02:00:00 (Sun)
  63011700000, #    local_end 1997-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63011664000, #    utc_start 1997-10-04 16:00:00 (Sat)
  63026784000, #      utc_end 1998-03-28 16:00:00 (Sat)
  63011703600, #  local_start 1997-10-05 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63026784000, #    utc_start 1998-03-28 16:00:00 (Sat)
  63043113600, #      utc_end 1998-10-03 16:00:00 (Sat)
  63026820000, #  local_start 1998-03-29 02:00:00 (Sun)
  63043149600, #    local_end 1998-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63043113600, #    utc_start 1998-10-03 16:00:00 (Sat)
  63058233600, #      utc_end 1999-03-27 16:00:00 (Sat)
  63043153200, #  local_start 1998-10-04 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63058233600, #    utc_start 1999-03-27 16:00:00 (Sat)
  63074563200, #      utc_end 1999-10-02 16:00:00 (Sat)
  63058269600, #  local_start 1999-03-28 02:00:00 (Sun)
  63074599200, #    local_end 1999-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63074563200, #    utc_start 1999-10-02 16:00:00 (Sat)
  63089683200, #      utc_end 2000-03-25 16:00:00 (Sat)
  63074602800, #  local_start 1999-10-03 03:00:00 (Sun)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63089683200, #    utc_start 2000-03-25 16:00:00 (Sat)
  63102988800, #      utc_end 2000-08-26 16:00:00 (Sat)
  63089719200, #  local_start 2000-03-26 02:00:00 (Sun)
  63103024800, #    local_end 2000-08-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63102988800, #    utc_start 2000-08-26 16:00:00 (Sat)
  63121132800, #      utc_end 2001-03-24 16:00:00 (Sat)
  63103028400, #  local_start 2000-08-27 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63121132800, #    utc_start 2001-03-24 16:00:00 (Sat)
  63138067200, #      utc_end 2001-10-06 16:00:00 (Sat)
  63121168800, #  local_start 2001-03-25 02:00:00 (Sun)
  63138103200, #    local_end 2001-10-07 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63138067200, #    utc_start 2001-10-06 16:00:00 (Sat)
  63153187200, #      utc_end 2002-03-30 16:00:00 (Sat)
  63138106800, #  local_start 2001-10-07 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63153187200, #    utc_start 2002-03-30 16:00:00 (Sat)
  63169516800, #      utc_end 2002-10-05 16:00:00 (Sat)
  63153223200, #  local_start 2002-03-31 02:00:00 (Sun)
  63169552800, #    local_end 2002-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63169516800, #    utc_start 2002-10-05 16:00:00 (Sat)
  63184636800, #      utc_end 2003-03-29 16:00:00 (Sat)
  63169556400, #  local_start 2002-10-06 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63184636800, #    utc_start 2003-03-29 16:00:00 (Sat)
  63200966400, #      utc_end 2003-10-04 16:00:00 (Sat)
  63184672800, #  local_start 2003-03-30 02:00:00 (Sun)
  63201002400, #    local_end 2003-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63200966400, #    utc_start 2003-10-04 16:00:00 (Sat)
  63216086400, #      utc_end 2004-03-27 16:00:00 (Sat)
  63201006000, #  local_start 2003-10-05 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63216086400, #    utc_start 2004-03-27 16:00:00 (Sat)
  63232416000, #      utc_end 2004-10-02 16:00:00 (Sat)
  63216122400, #  local_start 2004-03-28 02:00:00 (Sun)
  63232452000, #    local_end 2004-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63232416000, #    utc_start 2004-10-02 16:00:00 (Sat)
  63247536000, #      utc_end 2005-03-26 16:00:00 (Sat)
  63232455600, #  local_start 2004-10-03 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63247536000, #    utc_start 2005-03-26 16:00:00 (Sat)
  63263865600, #      utc_end 2005-10-01 16:00:00 (Sat)
  63247572000, #  local_start 2005-03-27 02:00:00 (Sun)
  63263901600, #    local_end 2005-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63263865600, #    utc_start 2005-10-01 16:00:00 (Sat)
  63279590400, #      utc_end 2006-04-01 16:00:00 (Sat)
  63263905200, #  local_start 2005-10-02 03:00:00 (Sun)
  63279630000, #    local_end 2006-04-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63279590400, #    utc_start 2006-04-01 16:00:00 (Sat)
  63295315200, #      utc_end 2006-09-30 16:00:00 (Sat)
  63279626400, #  local_start 2006-04-02 02:00:00 (Sun)
  63295351200, #    local_end 2006-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63295315200, #    utc_start 2006-09-30 16:00:00 (Sat)
  63310435200, #      utc_end 2007-03-24 16:00:00 (Sat)
  63295354800, #  local_start 2006-10-01 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63310435200, #    utc_start 2007-03-24 16:00:00 (Sat)
  63327369600, #      utc_end 2007-10-06 16:00:00 (Sat)
  63310471200, #  local_start 2007-03-25 02:00:00 (Sun)
  63327405600, #    local_end 2007-10-07 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63327369600, #    utc_start 2007-10-06 16:00:00 (Sat)
  63343094400, #      utc_end 2008-04-05 16:00:00 (Sat)
  63327409200, #  local_start 2007-10-07 03:00:00 (Sun)
  63343134000, #    local_end 2008-04-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63343094400, #    utc_start 2008-04-05 16:00:00 (Sat)
  63358819200, #      utc_end 2008-10-04 16:00:00 (Sat)
  63343130400, #  local_start 2008-04-06 02:00:00 (Sun)
  63358855200, #    local_end 2008-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63358819200, #    utc_start 2008-10-04 16:00:00 (Sat)
  63374544000, #      utc_end 2009-04-04 16:00:00 (Sat)
  63358858800, #  local_start 2008-10-05 03:00:00 (Sun)
  63374583600, #    local_end 2009-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63374544000, #    utc_start 2009-04-04 16:00:00 (Sat)
  63390268800, #      utc_end 2009-10-03 16:00:00 (Sat)
  63374580000, #  local_start 2009-04-05 02:00:00 (Sun)
  63390304800, #    local_end 2009-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63390268800, #    utc_start 2009-10-03 16:00:00 (Sat)
  63405993600, #      utc_end 2010-04-03 16:00:00 (Sat)
  63390308400, #  local_start 2009-10-04 03:00:00 (Sun)
  63406033200, #    local_end 2010-04-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63405993600, #    utc_start 2010-04-03 16:00:00 (Sat)
  63421718400, #      utc_end 2010-10-02 16:00:00 (Sat)
  63406029600, #  local_start 2010-04-04 02:00:00 (Sun)
  63421754400, #    local_end 2010-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63421718400, #    utc_start 2010-10-02 16:00:00 (Sat)
  63437443200, #      utc_end 2011-04-02 16:00:00 (Sat)
  63421758000, #  local_start 2010-10-03 03:00:00 (Sun)
  63437482800, #    local_end 2011-04-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63437443200, #    utc_start 2011-04-02 16:00:00 (Sat)
  63453168000, #      utc_end 2011-10-01 16:00:00 (Sat)
  63437479200, #  local_start 2011-04-03 02:00:00 (Sun)
  63453204000, #    local_end 2011-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63453168000, #    utc_start 2011-10-01 16:00:00 (Sat)
  63468892800, #      utc_end 2012-03-31 16:00:00 (Sat)
  63453207600, #  local_start 2011-10-02 03:00:00 (Sun)
  63468932400, #    local_end 2012-04-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63468892800, #    utc_start 2012-03-31 16:00:00 (Sat)
  63485222400, #      utc_end 2012-10-06 16:00:00 (Sat)
  63468928800, #  local_start 2012-04-01 02:00:00 (Sun)
  63485258400, #    local_end 2012-10-07 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63485222400, #    utc_start 2012-10-06 16:00:00 (Sat)
  63500947200, #      utc_end 2013-04-06 16:00:00 (Sat)
  63485262000, #  local_start 2012-10-07 03:00:00 (Sun)
  63500986800, #    local_end 2013-04-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63500947200, #    utc_start 2013-04-06 16:00:00 (Sat)
  63516672000, #      utc_end 2013-10-05 16:00:00 (Sat)
  63500983200, #  local_start 2013-04-07 02:00:00 (Sun)
  63516708000, #    local_end 2013-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63516672000, #    utc_start 2013-10-05 16:00:00 (Sat)
  63532396800, #      utc_end 2014-04-05 16:00:00 (Sat)
  63516711600, #  local_start 2013-10-06 03:00:00 (Sun)
  63532436400, #    local_end 2014-04-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63532396800, #    utc_start 2014-04-05 16:00:00 (Sat)
  63548121600, #      utc_end 2014-10-04 16:00:00 (Sat)
  63532432800, #  local_start 2014-04-06 02:00:00 (Sun)
  63548157600, #    local_end 2014-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63548121600, #    utc_start 2014-10-04 16:00:00 (Sat)
  63563846400, #      utc_end 2015-04-04 16:00:00 (Sat)
  63548161200, #  local_start 2014-10-05 03:00:00 (Sun)
  63563886000, #    local_end 2015-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63563846400, #    utc_start 2015-04-04 16:00:00 (Sat)
  63579571200, #      utc_end 2015-10-03 16:00:00 (Sat)
  63563882400, #  local_start 2015-04-05 02:00:00 (Sun)
  63579607200, #    local_end 2015-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63579571200, #    utc_start 2015-10-03 16:00:00 (Sat)
  63595296000, #      utc_end 2016-04-02 16:00:00 (Sat)
  63579610800, #  local_start 2015-10-04 03:00:00 (Sun)
  63595335600, #    local_end 2016-04-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63595296000, #    utc_start 2016-04-02 16:00:00 (Sat)
  63611020800, #      utc_end 2016-10-01 16:00:00 (Sat)
  63595332000, #  local_start 2016-04-03 02:00:00 (Sun)
  63611056800, #    local_end 2016-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63611020800, #    utc_start 2016-10-01 16:00:00 (Sat)
  63626745600, #      utc_end 2017-04-01 16:00:00 (Sat)
  63611060400, #  local_start 2016-10-02 03:00:00 (Sun)
  63626785200, #    local_end 2017-04-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63626745600, #    utc_start 2017-04-01 16:00:00 (Sat)
  63642470400, #      utc_end 2017-09-30 16:00:00 (Sat)
  63626781600, #  local_start 2017-04-02 02:00:00 (Sun)
  63642506400, #    local_end 2017-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63642470400, #    utc_start 2017-09-30 16:00:00 (Sat)
  63658195200, #      utc_end 2018-03-31 16:00:00 (Sat)
  63642510000, #  local_start 2017-10-01 03:00:00 (Sun)
  63658234800, #    local_end 2018-04-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63658195200, #    utc_start 2018-03-31 16:00:00 (Sat)
  63674524800, #      utc_end 2018-10-06 16:00:00 (Sat)
  63658231200, #  local_start 2018-04-01 02:00:00 (Sun)
  63674560800, #    local_end 2018-10-07 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63674524800, #    utc_start 2018-10-06 16:00:00 (Sat)
  63690249600, #      utc_end 2019-04-06 16:00:00 (Sat)
  63674564400, #  local_start 2018-10-07 03:00:00 (Sun)
  63690289200, #    local_end 2019-04-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63690249600, #    utc_start 2019-04-06 16:00:00 (Sat)
  63705974400, #      utc_end 2019-10-05 16:00:00 (Sat)
  63690285600, #  local_start 2019-04-07 02:00:00 (Sun)
  63706010400, #    local_end 2019-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63705974400, #    utc_start 2019-10-05 16:00:00 (Sat)
  63721699200, #      utc_end 2020-04-04 16:00:00 (Sat)
  63706014000, #  local_start 2019-10-06 03:00:00 (Sun)
  63721738800, #    local_end 2020-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63721699200, #    utc_start 2020-04-04 16:00:00 (Sat)
  63737424000, #      utc_end 2020-10-03 16:00:00 (Sat)
  63721735200, #  local_start 2020-04-05 02:00:00 (Sun)
  63737460000, #    local_end 2020-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63737424000, #    utc_start 2020-10-03 16:00:00 (Sat)
  63753148800, #      utc_end 2021-04-03 16:00:00 (Sat)
  63737463600, #  local_start 2020-10-04 03:00:00 (Sun)
  63753188400, #    local_end 2021-04-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63753148800, #    utc_start 2021-04-03 16:00:00 (Sat)
  63768873600, #      utc_end 2021-10-02 16:00:00 (Sat)
  63753184800, #  local_start 2021-04-04 02:00:00 (Sun)
  63768909600, #    local_end 2021-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63768873600, #    utc_start 2021-10-02 16:00:00 (Sat)
  63784598400, #      utc_end 2022-04-02 16:00:00 (Sat)
  63768913200, #  local_start 2021-10-03 03:00:00 (Sun)
  63784638000, #    local_end 2022-04-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63784598400, #    utc_start 2022-04-02 16:00:00 (Sat)
  63800323200, #      utc_end 2022-10-01 16:00:00 (Sat)
  63784634400, #  local_start 2022-04-03 02:00:00 (Sun)
  63800359200, #    local_end 2022-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63800323200, #    utc_start 2022-10-01 16:00:00 (Sat)
  63816048000, #      utc_end 2023-04-01 16:00:00 (Sat)
  63800362800, #  local_start 2022-10-02 03:00:00 (Sun)
  63816087600, #    local_end 2023-04-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63816048000, #    utc_start 2023-04-01 16:00:00 (Sat)
  63831772800, #      utc_end 2023-09-30 16:00:00 (Sat)
  63816084000, #  local_start 2023-04-02 02:00:00 (Sun)
  63831808800, #    local_end 2023-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63831772800, #    utc_start 2023-09-30 16:00:00 (Sat)
  63848102400, #      utc_end 2024-04-06 16:00:00 (Sat)
  63831812400, #  local_start 2023-10-01 03:00:00 (Sun)
  63848142000, #    local_end 2024-04-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63848102400, #    utc_start 2024-04-06 16:00:00 (Sat)
  63863827200, #      utc_end 2024-10-05 16:00:00 (Sat)
  63848138400, #  local_start 2024-04-07 02:00:00 (Sun)
  63863863200, #    local_end 2024-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63863827200, #    utc_start 2024-10-05 16:00:00 (Sat)
  63879552000, #      utc_end 2025-04-05 16:00:00 (Sat)
  63863866800, #  local_start 2024-10-06 03:00:00 (Sun)
  63879591600, #    local_end 2025-04-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63879552000, #    utc_start 2025-04-05 16:00:00 (Sat)
  63895276800, #      utc_end 2025-10-04 16:00:00 (Sat)
  63879588000, #  local_start 2025-04-06 02:00:00 (Sun)
  63895312800, #    local_end 2025-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63895276800, #    utc_start 2025-10-04 16:00:00 (Sat)
  63911001600, #      utc_end 2026-04-04 16:00:00 (Sat)
  63895316400, #  local_start 2025-10-05 03:00:00 (Sun)
  63911041200, #    local_end 2026-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63911001600, #    utc_start 2026-04-04 16:00:00 (Sat)
  63926726400, #      utc_end 2026-10-03 16:00:00 (Sat)
  63911037600, #  local_start 2026-04-05 02:00:00 (Sun)
  63926762400, #    local_end 2026-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63926726400, #    utc_start 2026-10-03 16:00:00 (Sat)
  63942451200, #      utc_end 2027-04-03 16:00:00 (Sat)
  63926766000, #  local_start 2026-10-04 03:00:00 (Sun)
  63942490800, #    local_end 2027-04-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63942451200, #    utc_start 2027-04-03 16:00:00 (Sat)
  63958176000, #      utc_end 2027-10-02 16:00:00 (Sat)
  63942487200, #  local_start 2027-04-04 02:00:00 (Sun)
  63958212000, #    local_end 2027-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {62}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 36000 }
  
  my $last_observance = bless( {
    'format' => 'AE%sT',
    'gmtoff' => '10:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 719709,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 719709,
      'utc_rd_secs' => 0,
      'utc_year' => 1972
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 36000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 719708,
      'local_rd_secs' => 50400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 719708,
      'utc_rd_secs' => 50400,
      'utc_year' => 1972
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00s',
      'from' => '2008',
      'in' => 'Apr',
      'letter' => 'S',
      'name' => 'AT',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00s',
      'from' => '2001',
      'in' => 'Oct',
      'letter' => 'D',
      'name' => 'AT',
      'offset_from_std' => 3600,
      'on' => 'Sun>=1',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AUSTRALIA_CURRIE

    $main::fatpacked{"DateTime/TimeZone/Australia/Darwin.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AUSTRALIA_DARWIN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Australia::Darwin;
  $DateTime::TimeZone::Australia::Darwin::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Australia::Darwin::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59771575000, #      utc_end 1895-01-31 15:16:40 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59771606400, #    local_end 1895-02-01 00:00:00 (Fri)
  31400,
  0,
  'LMT',
      ],
      [
  59771575000, #    utc_start 1895-01-31 15:16:40 (Thu)
  59905494000, #      utc_end 1899-04-30 15:00:00 (Sun)
  59771607400, #  local_start 1895-02-01 00:16:40 (Fri)
  59905526400, #    local_end 1899-05-01 00:00:00 (Mon)
  32400,
  0,
  'ACST',
      ],
      [
  59905494000, #    utc_start 1899-04-30 15:00:00 (Sun)
  60463117860, #      utc_end 1916-12-31 14:31:00 (Sun)
  59905528200, #  local_start 1899-05-01 00:30:00 (Mon)
  60463152060, #    local_end 1917-01-01 00:01:00 (Mon)
  34200,
  0,
  'ACST',
      ],
      [
  60463117860, #    utc_start 1916-12-31 14:31:00 (Sun)
  60470292600, #      utc_end 1917-03-24 15:30:00 (Sat)
  60463155660, #  local_start 1917-01-01 01:01:00 (Mon)
  60470330400, #    local_end 1917-03-25 02:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  60470292600, #    utc_start 1917-03-24 15:30:00 (Sat)
  61252043400, #      utc_end 1941-12-31 16:30:00 (Wed)
  60470326800, #  local_start 1917-03-25 01:00:00 (Sun)
  61252077600, #    local_end 1942-01-01 02:00:00 (Thu)
  34200,
  0,
  'ACST',
      ],
      [
  61252043400, #    utc_start 1941-12-31 16:30:00 (Wed)
  61259556600, #      utc_end 1942-03-28 15:30:00 (Sat)
  61252081200, #  local_start 1942-01-01 03:00:00 (Thu)
  61259594400, #    local_end 1942-03-29 02:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  61259556600, #    utc_start 1942-03-28 15:30:00 (Sat)
  61275285000, #      utc_end 1942-09-26 16:30:00 (Sat)
  61259590800, #  local_start 1942-03-29 01:00:00 (Sun)
  61275319200, #    local_end 1942-09-27 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  61275285000, #    utc_start 1942-09-26 16:30:00 (Sat)
  61291006200, #      utc_end 1943-03-27 15:30:00 (Sat)
  61275322800, #  local_start 1942-09-27 03:00:00 (Sun)
  61291044000, #    local_end 1943-03-28 02:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  61291006200, #    utc_start 1943-03-27 15:30:00 (Sat)
  61307339400, #      utc_end 1943-10-02 16:30:00 (Sat)
  61291040400, #  local_start 1943-03-28 01:00:00 (Sun)
  61307373600, #    local_end 1943-10-03 02:00:00 (Sun)
  34200,
  0,
  'ACST',
      ],
      [
  61307339400, #    utc_start 1943-10-02 16:30:00 (Sat)
  61322455800, #      utc_end 1944-03-25 15:30:00 (Sat)
  61307377200, #  local_start 1943-10-03 03:00:00 (Sun)
  61322493600, #    local_end 1944-03-26 02:00:00 (Sun)
  37800,
  1,
  'ACDT',
      ],
      [
  61322455800, #    utc_start 1944-03-25 15:30:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  61322490000, #  local_start 1944-03-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  34200,
  0,
  'ACST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {4}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AUSTRALIA_DARWIN

    $main::fatpacked{"DateTime/TimeZone/Australia/Eucla.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AUSTRALIA_EUCLA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Australia::Eucla;
  $DateTime::TimeZone::Australia::Eucla::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Australia::Eucla::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59797754672, #      utc_end 1895-11-30 15:24:32 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59797785600, #    local_end 1895-12-01 00:00:00 (Sun)
  30928,
  0,
  'LMT',
      ],
      [
  59797754672, #    utc_start 1895-11-30 15:24:32 (Sat)
  60463120560, #      utc_end 1916-12-31 15:16:00 (Sun)
  59797786172, #  local_start 1895-12-01 00:09:32 (Sun)
  60463152060, #    local_end 1917-01-01 00:01:00 (Mon)
  31500,
  0,
  'ACWST',
      ],
      [
  60463120560, #    utc_start 1916-12-31 15:16:00 (Sun)
  60470295300, #      utc_end 1917-03-24 16:15:00 (Sat)
  60463155660, #  local_start 1917-01-01 01:01:00 (Mon)
  60470330400, #    local_end 1917-03-25 02:00:00 (Sun)
  35100,
  1,
  'ACWDT',
      ],
      [
  60470295300, #    utc_start 1917-03-24 16:15:00 (Sat)
  61252046100, #      utc_end 1941-12-31 17:15:00 (Wed)
  60470326800, #  local_start 1917-03-25 01:00:00 (Sun)
  61252077600, #    local_end 1942-01-01 02:00:00 (Thu)
  31500,
  0,
  'ACWST',
      ],
      [
  61252046100, #    utc_start 1941-12-31 17:15:00 (Wed)
  61259559300, #      utc_end 1942-03-28 16:15:00 (Sat)
  61252081200, #  local_start 1942-01-01 03:00:00 (Thu)
  61259594400, #    local_end 1942-03-29 02:00:00 (Sun)
  35100,
  1,
  'ACWDT',
      ],
      [
  61259559300, #    utc_start 1942-03-28 16:15:00 (Sat)
  61275287700, #      utc_end 1942-09-26 17:15:00 (Sat)
  61259590800, #  local_start 1942-03-29 01:00:00 (Sun)
  61275319200, #    local_end 1942-09-27 02:00:00 (Sun)
  31500,
  0,
  'ACWST',
      ],
      [
  61275287700, #    utc_start 1942-09-26 17:15:00 (Sat)
  61291008900, #      utc_end 1943-03-27 16:15:00 (Sat)
  61275322800, #  local_start 1942-09-27 03:00:00 (Sun)
  61291044000, #    local_end 1943-03-28 02:00:00 (Sun)
  35100,
  1,
  'ACWDT',
      ],
      [
  61291008900, #    utc_start 1943-03-27 16:15:00 (Sat)
  61299213300, #      utc_end 1943-06-30 15:15:00 (Wed)
  61291040400, #  local_start 1943-03-28 01:00:00 (Sun)
  61299244800, #    local_end 1943-07-01 00:00:00 (Thu)
  31500,
  0,
  'ACWST',
      ],
      [
  61299213300, #    utc_start 1943-06-30 15:15:00 (Wed)
  62287722900, #      utc_end 1974-10-26 17:15:00 (Sat)
  61299244800, #  local_start 1943-07-01 00:00:00 (Thu)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  31500,
  0,
  'ACWST',
      ],
      [
  62287722900, #    utc_start 1974-10-26 17:15:00 (Sat)
  62298609300, #      utc_end 1975-03-01 17:15:00 (Sat)
  62287758000, #  local_start 1974-10-27 03:00:00 (Sun)
  62298644400, #    local_end 1975-03-02 03:00:00 (Sun)
  35100,
  1,
  'ACWDT',
      ],
      [
  62298609300, #    utc_start 1975-03-01 17:15:00 (Sat)
  62571978900, #      utc_end 1983-10-29 17:15:00 (Sat)
  62298640800, #  local_start 1975-03-02 02:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  31500,
  0,
  'ACWST',
      ],
      [
  62571978900, #    utc_start 1983-10-29 17:15:00 (Sat)
  62582865300, #      utc_end 1984-03-03 17:15:00 (Sat)
  62572014000, #  local_start 1983-10-30 03:00:00 (Sun)
  62582900400, #    local_end 1984-03-04 03:00:00 (Sun)
  35100,
  1,
  'ACWDT',
      ],
      [
  62582865300, #    utc_start 1984-03-03 17:15:00 (Sat)
  62825994900, #      utc_end 1991-11-16 17:15:00 (Sat)
  62582896800, #  local_start 1984-03-04 02:00:00 (Sun)
  62826026400, #    local_end 1991-11-17 02:00:00 (Sun)
  31500,
  0,
  'ACWST',
      ],
      [
  62825994900, #    utc_start 1991-11-16 17:15:00 (Sat)
  62835066900, #      utc_end 1992-02-29 17:15:00 (Sat)
  62826030000, #  local_start 1991-11-17 03:00:00 (Sun)
  62835102000, #    local_end 1992-03-01 03:00:00 (Sun)
  35100,
  1,
  'ACWDT',
      ],
      [
  62835066900, #    utc_start 1992-02-29 17:15:00 (Sat)
  63300762900, #      utc_end 2006-12-02 17:15:00 (Sat)
  62835098400, #  local_start 1992-03-01 02:00:00 (Sun)
  63300794400, #    local_end 2006-12-03 02:00:00 (Sun)
  31500,
  0,
  'ACWST',
      ],
      [
  63300762900, #    utc_start 2006-12-02 17:15:00 (Sat)
  63310439700, #      utc_end 2007-03-24 17:15:00 (Sat)
  63300798000, #  local_start 2006-12-03 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  35100,
  1,
  'ACWDT',
      ],
      [
  63310439700, #    utc_start 2007-03-24 17:15:00 (Sat)
  63329188500, #      utc_end 2007-10-27 17:15:00 (Sat)
  63310471200, #  local_start 2007-03-25 02:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  31500,
  0,
  'ACWST',
      ],
      [
  63329188500, #    utc_start 2007-10-27 17:15:00 (Sat)
  63342494100, #      utc_end 2008-03-29 17:15:00 (Sat)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63342529200, #    local_end 2008-03-30 03:00:00 (Sun)
  35100,
  1,
  'ACWDT',
      ],
      [
  63342494100, #    utc_start 2008-03-29 17:15:00 (Sat)
  63360638100, #      utc_end 2008-10-25 17:15:00 (Sat)
  63342525600, #  local_start 2008-03-30 02:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  31500,
  0,
  'ACWST',
      ],
      [
  63360638100, #    utc_start 2008-10-25 17:15:00 (Sat)
  63373943700, #      utc_end 2009-03-28 17:15:00 (Sat)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373978800, #    local_end 2009-03-29 03:00:00 (Sun)
  35100,
  1,
  'ACWDT',
      ],
      [
  63373943700, #    utc_start 2009-03-28 17:15:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63373975200, #  local_start 2009-03-29 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  31500,
  0,
  'ACWST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {9}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AUSTRALIA_EUCLA

    $main::fatpacked{"DateTime/TimeZone/Australia/Hobart.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AUSTRALIA_HOBART';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Australia::Hobart;
  $DateTime::TimeZone::Australia::Hobart::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Australia::Hobart::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59789887844, #      utc_end 1895-08-31 14:10:44 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59789923200, #    local_end 1895-09-01 00:00:00 (Sun)
  35356,
  0,
  'LMT',
      ],
      [
  59789887844, #    utc_start 1895-08-31 14:10:44 (Sat)
  60455174400, #      utc_end 1916-09-30 16:00:00 (Sat)
  59789923844, #  local_start 1895-09-01 00:10:44 (Sun)
  60455210400, #    local_end 1916-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  60455174400, #    utc_start 1916-09-30 16:00:00 (Sat)
  60465790800, #      utc_end 1917-01-31 13:00:00 (Wed)
  60455214000, #  local_start 1916-10-01 03:00:00 (Sun)
  60465830400, #    local_end 1917-02-01 00:00:00 (Thu)
  39600,
  1,
  'AEDT',
      ],
      [
  60465790800, #    utc_start 1917-01-31 13:00:00 (Wed)
  60470290800, #      utc_end 1917-03-24 15:00:00 (Sat)
  60465830400, #  local_start 1917-02-01 00:00:00 (Thu)
  60470330400, #    local_end 1917-03-25 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  60470290800, #    utc_start 1917-03-24 15:00:00 (Sat)
  61252041600, #      utc_end 1941-12-31 16:00:00 (Wed)
  60470326800, #  local_start 1917-03-25 01:00:00 (Sun)
  61252077600, #    local_end 1942-01-01 02:00:00 (Thu)
  36000,
  0,
  'AEST',
      ],
      [
  61252041600, #    utc_start 1941-12-31 16:00:00 (Wed)
  61259554800, #      utc_end 1942-03-28 15:00:00 (Sat)
  61252081200, #  local_start 1942-01-01 03:00:00 (Thu)
  61259594400, #    local_end 1942-03-29 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61259554800, #    utc_start 1942-03-28 15:00:00 (Sat)
  61275283200, #      utc_end 1942-09-26 16:00:00 (Sat)
  61259590800, #  local_start 1942-03-29 01:00:00 (Sun)
  61275319200, #    local_end 1942-09-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  61275283200, #    utc_start 1942-09-26 16:00:00 (Sat)
  61291004400, #      utc_end 1943-03-27 15:00:00 (Sat)
  61275322800, #  local_start 1942-09-27 03:00:00 (Sun)
  61291044000, #    local_end 1943-03-28 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61291004400, #    utc_start 1943-03-27 15:00:00 (Sat)
  61307337600, #      utc_end 1943-10-02 16:00:00 (Sat)
  61291040400, #  local_start 1943-03-28 01:00:00 (Sun)
  61307373600, #    local_end 1943-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  61307337600, #    utc_start 1943-10-02 16:00:00 (Sat)
  61322454000, #      utc_end 1944-03-25 15:00:00 (Sat)
  61307377200, #  local_start 1943-10-03 03:00:00 (Sun)
  61322493600, #    local_end 1944-03-26 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61322454000, #    utc_start 1944-03-25 15:00:00 (Sat)
  62040952800, #      utc_end 1966-12-31 14:00:00 (Sat)
  61322490000, #  local_start 1944-03-26 01:00:00 (Sun)
  62040988800, #    local_end 1967-01-01 00:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62040952800, #    utc_start 1966-12-31 14:00:00 (Sat)
  62064547200, #      utc_end 1967-09-30 16:00:00 (Sat)
  62040988800, #  local_start 1967-01-01 00:00:00 (Sun)
  62064583200, #    local_end 1967-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62064547200, #    utc_start 1967-09-30 16:00:00 (Sat)
  62080272000, #      utc_end 1968-03-30 16:00:00 (Sat)
  62064586800, #  local_start 1967-10-01 03:00:00 (Sun)
  62080311600, #    local_end 1968-03-31 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62080272000, #    utc_start 1968-03-30 16:00:00 (Sat)
  62098416000, #      utc_end 1968-10-26 16:00:00 (Sat)
  62080308000, #  local_start 1968-03-31 02:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62098416000, #    utc_start 1968-10-26 16:00:00 (Sat)
  62109907200, #      utc_end 1969-03-08 16:00:00 (Sat)
  62098455600, #  local_start 1968-10-27 03:00:00 (Sun)
  62109946800, #    local_end 1969-03-09 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62109907200, #    utc_start 1969-03-08 16:00:00 (Sat)
  62129865600, #      utc_end 1969-10-25 16:00:00 (Sat)
  62109943200, #  local_start 1969-03-09 02:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62129865600, #    utc_start 1969-10-25 16:00:00 (Sat)
  62141356800, #      utc_end 1970-03-07 16:00:00 (Sat)
  62129905200, #  local_start 1969-10-26 03:00:00 (Sun)
  62141396400, #    local_end 1970-03-08 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62141356800, #    utc_start 1970-03-07 16:00:00 (Sat)
  62161315200, #      utc_end 1970-10-24 16:00:00 (Sat)
  62141392800, #  local_start 1970-03-08 02:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62161315200, #    utc_start 1970-10-24 16:00:00 (Sat)
  62173411200, #      utc_end 1971-03-13 16:00:00 (Sat)
  62161354800, #  local_start 1970-10-25 03:00:00 (Sun)
  62173450800, #    local_end 1971-03-14 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62173411200, #    utc_start 1971-03-13 16:00:00 (Sat)
  62193369600, #      utc_end 1971-10-30 16:00:00 (Sat)
  62173447200, #  local_start 1971-03-14 02:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62193369600, #    utc_start 1971-10-30 16:00:00 (Sat)
  62203651200, #      utc_end 1972-02-26 16:00:00 (Sat)
  62193409200, #  local_start 1971-10-31 03:00:00 (Sun)
  62203690800, #    local_end 1972-02-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62203651200, #    utc_start 1972-02-26 16:00:00 (Sat)
  62224819200, #      utc_end 1972-10-28 16:00:00 (Sat)
  62203687200, #  local_start 1972-02-27 02:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62224819200, #    utc_start 1972-10-28 16:00:00 (Sat)
  62235705600, #      utc_end 1973-03-03 16:00:00 (Sat)
  62224858800, #  local_start 1972-10-29 03:00:00 (Sun)
  62235745200, #    local_end 1973-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62235705600, #    utc_start 1973-03-03 16:00:00 (Sat)
  62256268800, #      utc_end 1973-10-27 16:00:00 (Sat)
  62235741600, #  local_start 1973-03-04 02:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62256268800, #    utc_start 1973-10-27 16:00:00 (Sat)
  62267155200, #      utc_end 1974-03-02 16:00:00 (Sat)
  62256308400, #  local_start 1973-10-28 03:00:00 (Sun)
  62267194800, #    local_end 1974-03-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62267155200, #    utc_start 1974-03-02 16:00:00 (Sat)
  62287718400, #      utc_end 1974-10-26 16:00:00 (Sat)
  62267191200, #  local_start 1974-03-03 02:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62287718400, #    utc_start 1974-10-26 16:00:00 (Sat)
  62298604800, #      utc_end 1975-03-01 16:00:00 (Sat)
  62287758000, #  local_start 1974-10-27 03:00:00 (Sun)
  62298644400, #    local_end 1975-03-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62298604800, #    utc_start 1975-03-01 16:00:00 (Sat)
  62319168000, #      utc_end 1975-10-25 16:00:00 (Sat)
  62298640800, #  local_start 1975-03-02 02:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62319168000, #    utc_start 1975-10-25 16:00:00 (Sat)
  62330659200, #      utc_end 1976-03-06 16:00:00 (Sat)
  62319207600, #  local_start 1975-10-26 03:00:00 (Sun)
  62330698800, #    local_end 1976-03-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62330659200, #    utc_start 1976-03-06 16:00:00 (Sat)
  62351222400, #      utc_end 1976-10-30 16:00:00 (Sat)
  62330695200, #  local_start 1976-03-07 02:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62351222400, #    utc_start 1976-10-30 16:00:00 (Sat)
  62362108800, #      utc_end 1977-03-05 16:00:00 (Sat)
  62351262000, #  local_start 1976-10-31 03:00:00 (Sun)
  62362148400, #    local_end 1977-03-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62362108800, #    utc_start 1977-03-05 16:00:00 (Sat)
  62382672000, #      utc_end 1977-10-29 16:00:00 (Sat)
  62362144800, #  local_start 1977-03-06 02:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62382672000, #    utc_start 1977-10-29 16:00:00 (Sat)
  62393558400, #      utc_end 1978-03-04 16:00:00 (Sat)
  62382711600, #  local_start 1977-10-30 03:00:00 (Sun)
  62393598000, #    local_end 1978-03-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62393558400, #    utc_start 1978-03-04 16:00:00 (Sat)
  62414121600, #      utc_end 1978-10-28 16:00:00 (Sat)
  62393594400, #  local_start 1978-03-05 02:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62414121600, #    utc_start 1978-10-28 16:00:00 (Sat)
  62425008000, #      utc_end 1979-03-03 16:00:00 (Sat)
  62414161200, #  local_start 1978-10-29 03:00:00 (Sun)
  62425047600, #    local_end 1979-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62425008000, #    utc_start 1979-03-03 16:00:00 (Sat)
  62445571200, #      utc_end 1979-10-27 16:00:00 (Sat)
  62425044000, #  local_start 1979-03-04 02:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62445571200, #    utc_start 1979-10-27 16:00:00 (Sat)
  62456457600, #      utc_end 1980-03-01 16:00:00 (Sat)
  62445610800, #  local_start 1979-10-28 03:00:00 (Sun)
  62456497200, #    local_end 1980-03-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62456457600, #    utc_start 1980-03-01 16:00:00 (Sat)
  62477020800, #      utc_end 1980-10-25 16:00:00 (Sat)
  62456493600, #  local_start 1980-03-02 02:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62477020800, #    utc_start 1980-10-25 16:00:00 (Sat)
  62487907200, #      utc_end 1981-02-28 16:00:00 (Sat)
  62477060400, #  local_start 1980-10-26 03:00:00 (Sun)
  62487946800, #    local_end 1981-03-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62487907200, #    utc_start 1981-02-28 16:00:00 (Sat)
  62508470400, #      utc_end 1981-10-24 16:00:00 (Sat)
  62487943200, #  local_start 1981-03-01 02:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62508470400, #    utc_start 1981-10-24 16:00:00 (Sat)
  62521776000, #      utc_end 1982-03-27 16:00:00 (Sat)
  62508510000, #  local_start 1981-10-25 03:00:00 (Sun)
  62521815600, #    local_end 1982-03-28 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62521776000, #    utc_start 1982-03-27 16:00:00 (Sat)
  62540524800, #      utc_end 1982-10-30 16:00:00 (Sat)
  62521812000, #  local_start 1982-03-28 02:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62540524800, #    utc_start 1982-10-30 16:00:00 (Sat)
  62553225600, #      utc_end 1983-03-26 16:00:00 (Sat)
  62540564400, #  local_start 1982-10-31 03:00:00 (Sun)
  62553265200, #    local_end 1983-03-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62553225600, #    utc_start 1983-03-26 16:00:00 (Sat)
  62571974400, #      utc_end 1983-10-29 16:00:00 (Sat)
  62553261600, #  local_start 1983-03-27 02:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62571974400, #    utc_start 1983-10-29 16:00:00 (Sat)
  62582860800, #      utc_end 1984-03-03 16:00:00 (Sat)
  62572014000, #  local_start 1983-10-30 03:00:00 (Sun)
  62582900400, #    local_end 1984-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62582860800, #    utc_start 1984-03-03 16:00:00 (Sat)
  62603424000, #      utc_end 1984-10-27 16:00:00 (Sat)
  62582896800, #  local_start 1984-03-04 02:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62603424000, #    utc_start 1984-10-27 16:00:00 (Sat)
  62614310400, #      utc_end 1985-03-02 16:00:00 (Sat)
  62603463600, #  local_start 1984-10-28 03:00:00 (Sun)
  62614350000, #    local_end 1985-03-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62614310400, #    utc_start 1985-03-02 16:00:00 (Sat)
  62634873600, #      utc_end 1985-10-26 16:00:00 (Sat)
  62614346400, #  local_start 1985-03-03 02:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62634873600, #    utc_start 1985-10-26 16:00:00 (Sat)
  62645760000, #      utc_end 1986-03-01 16:00:00 (Sat)
  62634913200, #  local_start 1985-10-27 03:00:00 (Sun)
  62645799600, #    local_end 1986-03-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62645760000, #    utc_start 1986-03-01 16:00:00 (Sat)
  62665718400, #      utc_end 1986-10-18 16:00:00 (Sat)
  62645796000, #  local_start 1986-03-02 02:00:00 (Sun)
  62665754400, #    local_end 1986-10-19 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62665718400, #    utc_start 1986-10-18 16:00:00 (Sat)
  62678419200, #      utc_end 1987-03-14 16:00:00 (Sat)
  62665758000, #  local_start 1986-10-19 03:00:00 (Sun)
  62678458800, #    local_end 1987-03-15 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62678419200, #    utc_start 1987-03-14 16:00:00 (Sat)
  62697772800, #      utc_end 1987-10-24 16:00:00 (Sat)
  62678455200, #  local_start 1987-03-15 02:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62697772800, #    utc_start 1987-10-24 16:00:00 (Sat)
  62710473600, #      utc_end 1988-03-19 16:00:00 (Sat)
  62697812400, #  local_start 1987-10-25 03:00:00 (Sun)
  62710513200, #    local_end 1988-03-20 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62710473600, #    utc_start 1988-03-19 16:00:00 (Sat)
  62729827200, #      utc_end 1988-10-29 16:00:00 (Sat)
  62710509600, #  local_start 1988-03-20 02:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62729827200, #    utc_start 1988-10-29 16:00:00 (Sat)
  62741923200, #      utc_end 1989-03-18 16:00:00 (Sat)
  62729866800, #  local_start 1988-10-30 03:00:00 (Sun)
  62741962800, #    local_end 1989-03-19 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62741923200, #    utc_start 1989-03-18 16:00:00 (Sat)
  62761276800, #      utc_end 1989-10-28 16:00:00 (Sat)
  62741959200, #  local_start 1989-03-19 02:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62761276800, #    utc_start 1989-10-28 16:00:00 (Sat)
  62773372800, #      utc_end 1990-03-17 16:00:00 (Sat)
  62761316400, #  local_start 1989-10-29 03:00:00 (Sun)
  62773412400, #    local_end 1990-03-18 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62773372800, #    utc_start 1990-03-17 16:00:00 (Sat)
  62792726400, #      utc_end 1990-10-27 16:00:00 (Sat)
  62773408800, #  local_start 1990-03-18 02:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62792726400, #    utc_start 1990-10-27 16:00:00 (Sat)
  62806032000, #      utc_end 1991-03-30 16:00:00 (Sat)
  62792766000, #  local_start 1990-10-28 03:00:00 (Sun)
  62806071600, #    local_end 1991-03-31 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62806032000, #    utc_start 1991-03-30 16:00:00 (Sat)
  62822361600, #      utc_end 1991-10-05 16:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62822397600, #    local_end 1991-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62822361600, #    utc_start 1991-10-05 16:00:00 (Sat)
  62837481600, #      utc_end 1992-03-28 16:00:00 (Sat)
  62822401200, #  local_start 1991-10-06 03:00:00 (Sun)
  62837521200, #    local_end 1992-03-29 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62837481600, #    utc_start 1992-03-28 16:00:00 (Sat)
  62853811200, #      utc_end 1992-10-03 16:00:00 (Sat)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62853847200, #    local_end 1992-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62853811200, #    utc_start 1992-10-03 16:00:00 (Sat)
  62868931200, #      utc_end 1993-03-27 16:00:00 (Sat)
  62853850800, #  local_start 1992-10-04 03:00:00 (Sun)
  62868970800, #    local_end 1993-03-28 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62868931200, #    utc_start 1993-03-27 16:00:00 (Sat)
  62885260800, #      utc_end 1993-10-02 16:00:00 (Sat)
  62868967200, #  local_start 1993-03-28 02:00:00 (Sun)
  62885296800, #    local_end 1993-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62885260800, #    utc_start 1993-10-02 16:00:00 (Sat)
  62900380800, #      utc_end 1994-03-26 16:00:00 (Sat)
  62885300400, #  local_start 1993-10-03 03:00:00 (Sun)
  62900420400, #    local_end 1994-03-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62900380800, #    utc_start 1994-03-26 16:00:00 (Sat)
  62916710400, #      utc_end 1994-10-01 16:00:00 (Sat)
  62900416800, #  local_start 1994-03-27 02:00:00 (Sun)
  62916746400, #    local_end 1994-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62916710400, #    utc_start 1994-10-01 16:00:00 (Sat)
  62931830400, #      utc_end 1995-03-25 16:00:00 (Sat)
  62916750000, #  local_start 1994-10-02 03:00:00 (Sun)
  62931870000, #    local_end 1995-03-26 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62931830400, #    utc_start 1995-03-25 16:00:00 (Sat)
  62948160000, #      utc_end 1995-09-30 16:00:00 (Sat)
  62931866400, #  local_start 1995-03-26 02:00:00 (Sun)
  62948196000, #    local_end 1995-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62948160000, #    utc_start 1995-09-30 16:00:00 (Sat)
  62963884800, #      utc_end 1996-03-30 16:00:00 (Sat)
  62948199600, #  local_start 1995-10-01 03:00:00 (Sun)
  62963924400, #    local_end 1996-03-31 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62963884800, #    utc_start 1996-03-30 16:00:00 (Sat)
  62980214400, #      utc_end 1996-10-05 16:00:00 (Sat)
  62963920800, #  local_start 1996-03-31 02:00:00 (Sun)
  62980250400, #    local_end 1996-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62980214400, #    utc_start 1996-10-05 16:00:00 (Sat)
  62995334400, #      utc_end 1997-03-29 16:00:00 (Sat)
  62980254000, #  local_start 1996-10-06 03:00:00 (Sun)
  62995374000, #    local_end 1997-03-30 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62995334400, #    utc_start 1997-03-29 16:00:00 (Sat)
  63011664000, #      utc_end 1997-10-04 16:00:00 (Sat)
  62995370400, #  local_start 1997-03-30 02:00:00 (Sun)
  63011700000, #    local_end 1997-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63011664000, #    utc_start 1997-10-04 16:00:00 (Sat)
  63026784000, #      utc_end 1998-03-28 16:00:00 (Sat)
  63011703600, #  local_start 1997-10-05 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63026784000, #    utc_start 1998-03-28 16:00:00 (Sat)
  63043113600, #      utc_end 1998-10-03 16:00:00 (Sat)
  63026820000, #  local_start 1998-03-29 02:00:00 (Sun)
  63043149600, #    local_end 1998-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63043113600, #    utc_start 1998-10-03 16:00:00 (Sat)
  63058233600, #      utc_end 1999-03-27 16:00:00 (Sat)
  63043153200, #  local_start 1998-10-04 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63058233600, #    utc_start 1999-03-27 16:00:00 (Sat)
  63074563200, #      utc_end 1999-10-02 16:00:00 (Sat)
  63058269600, #  local_start 1999-03-28 02:00:00 (Sun)
  63074599200, #    local_end 1999-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63074563200, #    utc_start 1999-10-02 16:00:00 (Sat)
  63089683200, #      utc_end 2000-03-25 16:00:00 (Sat)
  63074602800, #  local_start 1999-10-03 03:00:00 (Sun)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63089683200, #    utc_start 2000-03-25 16:00:00 (Sat)
  63102988800, #      utc_end 2000-08-26 16:00:00 (Sat)
  63089719200, #  local_start 2000-03-26 02:00:00 (Sun)
  63103024800, #    local_end 2000-08-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63102988800, #    utc_start 2000-08-26 16:00:00 (Sat)
  63121132800, #      utc_end 2001-03-24 16:00:00 (Sat)
  63103028400, #  local_start 2000-08-27 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63121132800, #    utc_start 2001-03-24 16:00:00 (Sat)
  63138067200, #      utc_end 2001-10-06 16:00:00 (Sat)
  63121168800, #  local_start 2001-03-25 02:00:00 (Sun)
  63138103200, #    local_end 2001-10-07 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63138067200, #    utc_start 2001-10-06 16:00:00 (Sat)
  63153187200, #      utc_end 2002-03-30 16:00:00 (Sat)
  63138106800, #  local_start 2001-10-07 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63153187200, #    utc_start 2002-03-30 16:00:00 (Sat)
  63169516800, #      utc_end 2002-10-05 16:00:00 (Sat)
  63153223200, #  local_start 2002-03-31 02:00:00 (Sun)
  63169552800, #    local_end 2002-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63169516800, #    utc_start 2002-10-05 16:00:00 (Sat)
  63184636800, #      utc_end 2003-03-29 16:00:00 (Sat)
  63169556400, #  local_start 2002-10-06 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63184636800, #    utc_start 2003-03-29 16:00:00 (Sat)
  63200966400, #      utc_end 2003-10-04 16:00:00 (Sat)
  63184672800, #  local_start 2003-03-30 02:00:00 (Sun)
  63201002400, #    local_end 2003-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63200966400, #    utc_start 2003-10-04 16:00:00 (Sat)
  63216086400, #      utc_end 2004-03-27 16:00:00 (Sat)
  63201006000, #  local_start 2003-10-05 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63216086400, #    utc_start 2004-03-27 16:00:00 (Sat)
  63232416000, #      utc_end 2004-10-02 16:00:00 (Sat)
  63216122400, #  local_start 2004-03-28 02:00:00 (Sun)
  63232452000, #    local_end 2004-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63232416000, #    utc_start 2004-10-02 16:00:00 (Sat)
  63247536000, #      utc_end 2005-03-26 16:00:00 (Sat)
  63232455600, #  local_start 2004-10-03 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63247536000, #    utc_start 2005-03-26 16:00:00 (Sat)
  63263865600, #      utc_end 2005-10-01 16:00:00 (Sat)
  63247572000, #  local_start 2005-03-27 02:00:00 (Sun)
  63263901600, #    local_end 2005-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63263865600, #    utc_start 2005-10-01 16:00:00 (Sat)
  63279590400, #      utc_end 2006-04-01 16:00:00 (Sat)
  63263905200, #  local_start 2005-10-02 03:00:00 (Sun)
  63279630000, #    local_end 2006-04-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63279590400, #    utc_start 2006-04-01 16:00:00 (Sat)
  63295315200, #      utc_end 2006-09-30 16:00:00 (Sat)
  63279626400, #  local_start 2006-04-02 02:00:00 (Sun)
  63295351200, #    local_end 2006-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63295315200, #    utc_start 2006-09-30 16:00:00 (Sat)
  63310435200, #      utc_end 2007-03-24 16:00:00 (Sat)
  63295354800, #  local_start 2006-10-01 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63310435200, #    utc_start 2007-03-24 16:00:00 (Sat)
  63327369600, #      utc_end 2007-10-06 16:00:00 (Sat)
  63310471200, #  local_start 2007-03-25 02:00:00 (Sun)
  63327405600, #    local_end 2007-10-07 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63327369600, #    utc_start 2007-10-06 16:00:00 (Sat)
  63343094400, #      utc_end 2008-04-05 16:00:00 (Sat)
  63327409200, #  local_start 2007-10-07 03:00:00 (Sun)
  63343134000, #    local_end 2008-04-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63343094400, #    utc_start 2008-04-05 16:00:00 (Sat)
  63358819200, #      utc_end 2008-10-04 16:00:00 (Sat)
  63343130400, #  local_start 2008-04-06 02:00:00 (Sun)
  63358855200, #    local_end 2008-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63358819200, #    utc_start 2008-10-04 16:00:00 (Sat)
  63374544000, #      utc_end 2009-04-04 16:00:00 (Sat)
  63358858800, #  local_start 2008-10-05 03:00:00 (Sun)
  63374583600, #    local_end 2009-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63374544000, #    utc_start 2009-04-04 16:00:00 (Sat)
  63390268800, #      utc_end 2009-10-03 16:00:00 (Sat)
  63374580000, #  local_start 2009-04-05 02:00:00 (Sun)
  63390304800, #    local_end 2009-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63390268800, #    utc_start 2009-10-03 16:00:00 (Sat)
  63405993600, #      utc_end 2010-04-03 16:00:00 (Sat)
  63390308400, #  local_start 2009-10-04 03:00:00 (Sun)
  63406033200, #    local_end 2010-04-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63405993600, #    utc_start 2010-04-03 16:00:00 (Sat)
  63421718400, #      utc_end 2010-10-02 16:00:00 (Sat)
  63406029600, #  local_start 2010-04-04 02:00:00 (Sun)
  63421754400, #    local_end 2010-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63421718400, #    utc_start 2010-10-02 16:00:00 (Sat)
  63437443200, #      utc_end 2011-04-02 16:00:00 (Sat)
  63421758000, #  local_start 2010-10-03 03:00:00 (Sun)
  63437482800, #    local_end 2011-04-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63437443200, #    utc_start 2011-04-02 16:00:00 (Sat)
  63453168000, #      utc_end 2011-10-01 16:00:00 (Sat)
  63437479200, #  local_start 2011-04-03 02:00:00 (Sun)
  63453204000, #    local_end 2011-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63453168000, #    utc_start 2011-10-01 16:00:00 (Sat)
  63468892800, #      utc_end 2012-03-31 16:00:00 (Sat)
  63453207600, #  local_start 2011-10-02 03:00:00 (Sun)
  63468932400, #    local_end 2012-04-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63468892800, #    utc_start 2012-03-31 16:00:00 (Sat)
  63485222400, #      utc_end 2012-10-06 16:00:00 (Sat)
  63468928800, #  local_start 2012-04-01 02:00:00 (Sun)
  63485258400, #    local_end 2012-10-07 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63485222400, #    utc_start 2012-10-06 16:00:00 (Sat)
  63500947200, #      utc_end 2013-04-06 16:00:00 (Sat)
  63485262000, #  local_start 2012-10-07 03:00:00 (Sun)
  63500986800, #    local_end 2013-04-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63500947200, #    utc_start 2013-04-06 16:00:00 (Sat)
  63516672000, #      utc_end 2013-10-05 16:00:00 (Sat)
  63500983200, #  local_start 2013-04-07 02:00:00 (Sun)
  63516708000, #    local_end 2013-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63516672000, #    utc_start 2013-10-05 16:00:00 (Sat)
  63532396800, #      utc_end 2014-04-05 16:00:00 (Sat)
  63516711600, #  local_start 2013-10-06 03:00:00 (Sun)
  63532436400, #    local_end 2014-04-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63532396800, #    utc_start 2014-04-05 16:00:00 (Sat)
  63548121600, #      utc_end 2014-10-04 16:00:00 (Sat)
  63532432800, #  local_start 2014-04-06 02:00:00 (Sun)
  63548157600, #    local_end 2014-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63548121600, #    utc_start 2014-10-04 16:00:00 (Sat)
  63563846400, #      utc_end 2015-04-04 16:00:00 (Sat)
  63548161200, #  local_start 2014-10-05 03:00:00 (Sun)
  63563886000, #    local_end 2015-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63563846400, #    utc_start 2015-04-04 16:00:00 (Sat)
  63579571200, #      utc_end 2015-10-03 16:00:00 (Sat)
  63563882400, #  local_start 2015-04-05 02:00:00 (Sun)
  63579607200, #    local_end 2015-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63579571200, #    utc_start 2015-10-03 16:00:00 (Sat)
  63595296000, #      utc_end 2016-04-02 16:00:00 (Sat)
  63579610800, #  local_start 2015-10-04 03:00:00 (Sun)
  63595335600, #    local_end 2016-04-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63595296000, #    utc_start 2016-04-02 16:00:00 (Sat)
  63611020800, #      utc_end 2016-10-01 16:00:00 (Sat)
  63595332000, #  local_start 2016-04-03 02:00:00 (Sun)
  63611056800, #    local_end 2016-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63611020800, #    utc_start 2016-10-01 16:00:00 (Sat)
  63626745600, #      utc_end 2017-04-01 16:00:00 (Sat)
  63611060400, #  local_start 2016-10-02 03:00:00 (Sun)
  63626785200, #    local_end 2017-04-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63626745600, #    utc_start 2017-04-01 16:00:00 (Sat)
  63642470400, #      utc_end 2017-09-30 16:00:00 (Sat)
  63626781600, #  local_start 2017-04-02 02:00:00 (Sun)
  63642506400, #    local_end 2017-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63642470400, #    utc_start 2017-09-30 16:00:00 (Sat)
  63658195200, #      utc_end 2018-03-31 16:00:00 (Sat)
  63642510000, #  local_start 2017-10-01 03:00:00 (Sun)
  63658234800, #    local_end 2018-04-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63658195200, #    utc_start 2018-03-31 16:00:00 (Sat)
  63674524800, #      utc_end 2018-10-06 16:00:00 (Sat)
  63658231200, #  local_start 2018-04-01 02:00:00 (Sun)
  63674560800, #    local_end 2018-10-07 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63674524800, #    utc_start 2018-10-06 16:00:00 (Sat)
  63690249600, #      utc_end 2019-04-06 16:00:00 (Sat)
  63674564400, #  local_start 2018-10-07 03:00:00 (Sun)
  63690289200, #    local_end 2019-04-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63690249600, #    utc_start 2019-04-06 16:00:00 (Sat)
  63705974400, #      utc_end 2019-10-05 16:00:00 (Sat)
  63690285600, #  local_start 2019-04-07 02:00:00 (Sun)
  63706010400, #    local_end 2019-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63705974400, #    utc_start 2019-10-05 16:00:00 (Sat)
  63721699200, #      utc_end 2020-04-04 16:00:00 (Sat)
  63706014000, #  local_start 2019-10-06 03:00:00 (Sun)
  63721738800, #    local_end 2020-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63721699200, #    utc_start 2020-04-04 16:00:00 (Sat)
  63737424000, #      utc_end 2020-10-03 16:00:00 (Sat)
  63721735200, #  local_start 2020-04-05 02:00:00 (Sun)
  63737460000, #    local_end 2020-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63737424000, #    utc_start 2020-10-03 16:00:00 (Sat)
  63753148800, #      utc_end 2021-04-03 16:00:00 (Sat)
  63737463600, #  local_start 2020-10-04 03:00:00 (Sun)
  63753188400, #    local_end 2021-04-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63753148800, #    utc_start 2021-04-03 16:00:00 (Sat)
  63768873600, #      utc_end 2021-10-02 16:00:00 (Sat)
  63753184800, #  local_start 2021-04-04 02:00:00 (Sun)
  63768909600, #    local_end 2021-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63768873600, #    utc_start 2021-10-02 16:00:00 (Sat)
  63784598400, #      utc_end 2022-04-02 16:00:00 (Sat)
  63768913200, #  local_start 2021-10-03 03:00:00 (Sun)
  63784638000, #    local_end 2022-04-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63784598400, #    utc_start 2022-04-02 16:00:00 (Sat)
  63800323200, #      utc_end 2022-10-01 16:00:00 (Sat)
  63784634400, #  local_start 2022-04-03 02:00:00 (Sun)
  63800359200, #    local_end 2022-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63800323200, #    utc_start 2022-10-01 16:00:00 (Sat)
  63816048000, #      utc_end 2023-04-01 16:00:00 (Sat)
  63800362800, #  local_start 2022-10-02 03:00:00 (Sun)
  63816087600, #    local_end 2023-04-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63816048000, #    utc_start 2023-04-01 16:00:00 (Sat)
  63831772800, #      utc_end 2023-09-30 16:00:00 (Sat)
  63816084000, #  local_start 2023-04-02 02:00:00 (Sun)
  63831808800, #    local_end 2023-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63831772800, #    utc_start 2023-09-30 16:00:00 (Sat)
  63848102400, #      utc_end 2024-04-06 16:00:00 (Sat)
  63831812400, #  local_start 2023-10-01 03:00:00 (Sun)
  63848142000, #    local_end 2024-04-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63848102400, #    utc_start 2024-04-06 16:00:00 (Sat)
  63863827200, #      utc_end 2024-10-05 16:00:00 (Sat)
  63848138400, #  local_start 2024-04-07 02:00:00 (Sun)
  63863863200, #    local_end 2024-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63863827200, #    utc_start 2024-10-05 16:00:00 (Sat)
  63879552000, #      utc_end 2025-04-05 16:00:00 (Sat)
  63863866800, #  local_start 2024-10-06 03:00:00 (Sun)
  63879591600, #    local_end 2025-04-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63879552000, #    utc_start 2025-04-05 16:00:00 (Sat)
  63895276800, #      utc_end 2025-10-04 16:00:00 (Sat)
  63879588000, #  local_start 2025-04-06 02:00:00 (Sun)
  63895312800, #    local_end 2025-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63895276800, #    utc_start 2025-10-04 16:00:00 (Sat)
  63911001600, #      utc_end 2026-04-04 16:00:00 (Sat)
  63895316400, #  local_start 2025-10-05 03:00:00 (Sun)
  63911041200, #    local_end 2026-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63911001600, #    utc_start 2026-04-04 16:00:00 (Sat)
  63926726400, #      utc_end 2026-10-03 16:00:00 (Sat)
  63911037600, #  local_start 2026-04-05 02:00:00 (Sun)
  63926762400, #    local_end 2026-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63926726400, #    utc_start 2026-10-03 16:00:00 (Sat)
  63942451200, #      utc_end 2027-04-03 16:00:00 (Sat)
  63926766000, #  local_start 2026-10-04 03:00:00 (Sun)
  63942490800, #    local_end 2027-04-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63942451200, #    utc_start 2027-04-03 16:00:00 (Sat)
  63958176000, #      utc_end 2027-10-02 16:00:00 (Sat)
  63942487200, #  local_start 2027-04-04 02:00:00 (Sun)
  63958212000, #    local_end 2027-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {66}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 36000 }
  
  my $last_observance = bless( {
    'format' => 'AE%sT',
    'gmtoff' => '10:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 718067,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 718067,
      'utc_rd_secs' => 0,
      'utc_year' => 1968
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 36000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 718066,
      'local_rd_secs' => 50400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 718066,
      'utc_rd_secs' => 50400,
      'utc_year' => 1967
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00s',
      'from' => '2001',
      'in' => 'Oct',
      'letter' => 'D',
      'name' => 'AT',
      'offset_from_std' => 3600,
      'on' => 'Sun>=1',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00s',
      'from' => '2008',
      'in' => 'Apr',
      'letter' => 'S',
      'name' => 'AT',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AUSTRALIA_HOBART

    $main::fatpacked{"DateTime/TimeZone/Australia/Lindeman.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AUSTRALIA_LINDEMAN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Australia::Lindeman;
  $DateTime::TimeZone::Australia::Lindeman::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Australia::Lindeman::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59768892244, #      utc_end 1894-12-31 14:04:04 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59768928000, #    local_end 1895-01-01 00:00:00 (Tue)
  35756,
  0,
  'LMT',
      ],
      [
  59768892244, #    utc_start 1894-12-31 14:04:04 (Mon)
  60463116060, #      utc_end 1916-12-31 14:01:00 (Sun)
  59768928244, #  local_start 1895-01-01 00:04:04 (Tue)
  60463152060, #    local_end 1917-01-01 00:01:00 (Mon)
  36000,
  0,
  'AEST',
      ],
      [
  60463116060, #    utc_start 1916-12-31 14:01:00 (Sun)
  60470290800, #      utc_end 1917-03-24 15:00:00 (Sat)
  60463155660, #  local_start 1917-01-01 01:01:00 (Mon)
  60470330400, #    local_end 1917-03-25 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  60470290800, #    utc_start 1917-03-24 15:00:00 (Sat)
  61252041600, #      utc_end 1941-12-31 16:00:00 (Wed)
  60470326800, #  local_start 1917-03-25 01:00:00 (Sun)
  61252077600, #    local_end 1942-01-01 02:00:00 (Thu)
  36000,
  0,
  'AEST',
      ],
      [
  61252041600, #    utc_start 1941-12-31 16:00:00 (Wed)
  61259554800, #      utc_end 1942-03-28 15:00:00 (Sat)
  61252081200, #  local_start 1942-01-01 03:00:00 (Thu)
  61259594400, #    local_end 1942-03-29 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61259554800, #    utc_start 1942-03-28 15:00:00 (Sat)
  61275283200, #      utc_end 1942-09-26 16:00:00 (Sat)
  61259590800, #  local_start 1942-03-29 01:00:00 (Sun)
  61275319200, #    local_end 1942-09-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  61275283200, #    utc_start 1942-09-26 16:00:00 (Sat)
  61291004400, #      utc_end 1943-03-27 15:00:00 (Sat)
  61275322800, #  local_start 1942-09-27 03:00:00 (Sun)
  61291044000, #    local_end 1943-03-28 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61291004400, #    utc_start 1943-03-27 15:00:00 (Sat)
  61307337600, #      utc_end 1943-10-02 16:00:00 (Sat)
  61291040400, #  local_start 1943-03-28 01:00:00 (Sun)
  61307373600, #    local_end 1943-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  61307337600, #    utc_start 1943-10-02 16:00:00 (Sat)
  61322454000, #      utc_end 1944-03-25 15:00:00 (Sat)
  61307377200, #  local_start 1943-10-03 03:00:00 (Sun)
  61322493600, #    local_end 1944-03-26 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61322454000, #    utc_start 1944-03-25 15:00:00 (Sat)
  62167183200, #      utc_end 1970-12-31 14:00:00 (Thu)
  61322490000, #  local_start 1944-03-26 01:00:00 (Sun)
  62167219200, #    local_end 1971-01-01 00:00:00 (Fri)
  36000,
  0,
  'AEST',
      ],
      [
  62167183200, #    utc_start 1970-12-31 14:00:00 (Thu)
  62193369600, #      utc_end 1971-10-30 16:00:00 (Sat)
  62167219200, #  local_start 1971-01-01 00:00:00 (Fri)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62193369600, #    utc_start 1971-10-30 16:00:00 (Sat)
  62203651200, #      utc_end 1972-02-26 16:00:00 (Sat)
  62193409200, #  local_start 1971-10-31 03:00:00 (Sun)
  62203690800, #    local_end 1972-02-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62203651200, #    utc_start 1972-02-26 16:00:00 (Sat)
  62761276800, #      utc_end 1989-10-28 16:00:00 (Sat)
  62203687200, #  local_start 1972-02-27 02:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62761276800, #    utc_start 1989-10-28 16:00:00 (Sat)
  62772163200, #      utc_end 1990-03-03 16:00:00 (Sat)
  62761316400, #  local_start 1989-10-29 03:00:00 (Sun)
  62772202800, #    local_end 1990-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62772163200, #    utc_start 1990-03-03 16:00:00 (Sat)
  62792726400, #      utc_end 1990-10-27 16:00:00 (Sat)
  62772199200, #  local_start 1990-03-04 02:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62792726400, #    utc_start 1990-10-27 16:00:00 (Sat)
  62803612800, #      utc_end 1991-03-02 16:00:00 (Sat)
  62792766000, #  local_start 1990-10-28 03:00:00 (Sun)
  62803652400, #    local_end 1991-03-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62803612800, #    utc_start 1991-03-02 16:00:00 (Sat)
  62824176000, #      utc_end 1991-10-26 16:00:00 (Sat)
  62803648800, #  local_start 1991-03-03 02:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62824176000, #    utc_start 1991-10-26 16:00:00 (Sat)
  62835062400, #      utc_end 1992-02-29 16:00:00 (Sat)
  62824215600, #  local_start 1991-10-27 03:00:00 (Sun)
  62835102000, #    local_end 1992-03-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62835062400, #    utc_start 1992-02-29 16:00:00 (Sat)
  62845596000, #      utc_end 1992-06-30 14:00:00 (Tue)
  62835098400, #  local_start 1992-03-01 02:00:00 (Sun)
  62845632000, #    local_end 1992-07-01 00:00:00 (Wed)
  36000,
  0,
  'AEST',
      ],
      [
  62845596000, #    utc_start 1992-06-30 14:00:00 (Tue)
  62855625600, #      utc_end 1992-10-24 16:00:00 (Sat)
  62845632000, #  local_start 1992-07-01 00:00:00 (Wed)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62855625600, #    utc_start 1992-10-24 16:00:00 (Sat)
  62867116800, #      utc_end 1993-03-06 16:00:00 (Sat)
  62855665200, #  local_start 1992-10-25 03:00:00 (Sun)
  62867156400, #    local_end 1993-03-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62867116800, #    utc_start 1993-03-06 16:00:00 (Sat)
  62887680000, #      utc_end 1993-10-30 16:00:00 (Sat)
  62867152800, #  local_start 1993-03-07 02:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62887680000, #    utc_start 1993-10-30 16:00:00 (Sat)
  62898566400, #      utc_end 1994-03-05 16:00:00 (Sat)
  62887719600, #  local_start 1993-10-31 03:00:00 (Sun)
  62898606000, #    local_end 1994-03-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62898566400, #    utc_start 1994-03-05 16:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  62898602400, #  local_start 1994-03-06 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  36000,
  0,
  'AEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {10}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AUSTRALIA_LINDEMAN

    $main::fatpacked{"DateTime/TimeZone/Australia/Lord_Howe.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AUSTRALIA_LORD_HOWE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Australia::Lord_Howe;
  $DateTime::TimeZone::Australia::Lord_Howe::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Australia::Lord_Howe::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59771568220, #      utc_end 1895-01-31 13:23:40 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59771606400, #    local_end 1895-02-01 00:00:00 (Fri)
  38180,
  0,
  'LMT',
      ],
      [
  59771568220, #    utc_start 1895-01-31 13:23:40 (Thu)
  62487900000, #      utc_end 1981-02-28 14:00:00 (Sat)
  59771604220, #  local_start 1895-01-31 23:23:40 (Thu)
  62487936000, #    local_end 1981-03-01 00:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62487900000, #    utc_start 1981-02-28 14:00:00 (Sat)
  62508468600, #      utc_end 1981-10-24 15:30:00 (Sat)
  62487937800, #  local_start 1981-03-01 00:30:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  62508468600, #    utc_start 1981-10-24 15:30:00 (Sat)
  62519956200, #      utc_end 1982-03-06 14:30:00 (Sat)
  62508510000, #  local_start 1981-10-25 03:00:00 (Sun)
  62519997600, #    local_end 1982-03-07 02:00:00 (Sun)
  41400,
  1,
  'LHDT',
      ],
      [
  62519956200, #    utc_start 1982-03-06 14:30:00 (Sat)
  62540523000, #      utc_end 1982-10-30 15:30:00 (Sat)
  62519994000, #  local_start 1982-03-07 01:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  62540523000, #    utc_start 1982-10-30 15:30:00 (Sat)
  62551405800, #      utc_end 1983-03-05 14:30:00 (Sat)
  62540564400, #  local_start 1982-10-31 03:00:00 (Sun)
  62551447200, #    local_end 1983-03-06 02:00:00 (Sun)
  41400,
  1,
  'LHDT',
      ],
      [
  62551405800, #    utc_start 1983-03-05 14:30:00 (Sat)
  62571972600, #      utc_end 1983-10-29 15:30:00 (Sat)
  62551443600, #  local_start 1983-03-06 01:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  62571972600, #    utc_start 1983-10-29 15:30:00 (Sat)
  62582855400, #      utc_end 1984-03-03 14:30:00 (Sat)
  62572014000, #  local_start 1983-10-30 03:00:00 (Sun)
  62582896800, #    local_end 1984-03-04 02:00:00 (Sun)
  41400,
  1,
  'LHDT',
      ],
      [
  62582855400, #    utc_start 1984-03-03 14:30:00 (Sat)
  62603422200, #      utc_end 1984-10-27 15:30:00 (Sat)
  62582893200, #  local_start 1984-03-04 01:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  62603422200, #    utc_start 1984-10-27 15:30:00 (Sat)
  62614305000, #      utc_end 1985-03-02 14:30:00 (Sat)
  62603463600, #  local_start 1984-10-28 03:00:00 (Sun)
  62614346400, #    local_end 1985-03-03 02:00:00 (Sun)
  41400,
  1,
  'LHDT',
      ],
      [
  62614305000, #    utc_start 1985-03-02 14:30:00 (Sat)
  62634871800, #      utc_end 1985-10-26 15:30:00 (Sat)
  62614342800, #  local_start 1985-03-03 01:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  62634871800, #    utc_start 1985-10-26 15:30:00 (Sat)
  62646966000, #      utc_end 1986-03-15 15:00:00 (Sat)
  62634911400, #  local_start 1985-10-27 02:30:00 (Sun)
  62647005600, #    local_end 1986-03-16 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  62646966000, #    utc_start 1986-03-15 15:00:00 (Sat)
  62665716600, #      utc_end 1986-10-18 15:30:00 (Sat)
  62647003800, #  local_start 1986-03-16 01:30:00 (Sun)
  62665754400, #    local_end 1986-10-19 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  62665716600, #    utc_start 1986-10-18 15:30:00 (Sat)
  62678415600, #      utc_end 1987-03-14 15:00:00 (Sat)
  62665756200, #  local_start 1986-10-19 02:30:00 (Sun)
  62678455200, #    local_end 1987-03-15 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  62678415600, #    utc_start 1987-03-14 15:00:00 (Sat)
  62697771000, #      utc_end 1987-10-24 15:30:00 (Sat)
  62678453400, #  local_start 1987-03-15 01:30:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  62697771000, #    utc_start 1987-10-24 15:30:00 (Sat)
  62710470000, #      utc_end 1988-03-19 15:00:00 (Sat)
  62697810600, #  local_start 1987-10-25 02:30:00 (Sun)
  62710509600, #    local_end 1988-03-20 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  62710470000, #    utc_start 1988-03-19 15:00:00 (Sat)
  62729825400, #      utc_end 1988-10-29 15:30:00 (Sat)
  62710507800, #  local_start 1988-03-20 01:30:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  62729825400, #    utc_start 1988-10-29 15:30:00 (Sat)
  62741919600, #      utc_end 1989-03-18 15:00:00 (Sat)
  62729865000, #  local_start 1988-10-30 02:30:00 (Sun)
  62741959200, #    local_end 1989-03-19 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  62741919600, #    utc_start 1989-03-18 15:00:00 (Sat)
  62761275000, #      utc_end 1989-10-28 15:30:00 (Sat)
  62741957400, #  local_start 1989-03-19 01:30:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  62761275000, #    utc_start 1989-10-28 15:30:00 (Sat)
  62772159600, #      utc_end 1990-03-03 15:00:00 (Sat)
  62761314600, #  local_start 1989-10-29 02:30:00 (Sun)
  62772199200, #    local_end 1990-03-04 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  62772159600, #    utc_start 1990-03-03 15:00:00 (Sat)
  62792724600, #      utc_end 1990-10-27 15:30:00 (Sat)
  62772197400, #  local_start 1990-03-04 01:30:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  62792724600, #    utc_start 1990-10-27 15:30:00 (Sat)
  62803609200, #      utc_end 1991-03-02 15:00:00 (Sat)
  62792764200, #  local_start 1990-10-28 02:30:00 (Sun)
  62803648800, #    local_end 1991-03-03 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  62803609200, #    utc_start 1991-03-02 15:00:00 (Sat)
  62824174200, #      utc_end 1991-10-26 15:30:00 (Sat)
  62803647000, #  local_start 1991-03-03 01:30:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  62824174200, #    utc_start 1991-10-26 15:30:00 (Sat)
  62835058800, #      utc_end 1992-02-29 15:00:00 (Sat)
  62824213800, #  local_start 1991-10-27 02:30:00 (Sun)
  62835098400, #    local_end 1992-03-01 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  62835058800, #    utc_start 1992-02-29 15:00:00 (Sat)
  62855623800, #      utc_end 1992-10-24 15:30:00 (Sat)
  62835096600, #  local_start 1992-03-01 01:30:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  62855623800, #    utc_start 1992-10-24 15:30:00 (Sat)
  62867113200, #      utc_end 1993-03-06 15:00:00 (Sat)
  62855663400, #  local_start 1992-10-25 02:30:00 (Sun)
  62867152800, #    local_end 1993-03-07 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  62867113200, #    utc_start 1993-03-06 15:00:00 (Sat)
  62887678200, #      utc_end 1993-10-30 15:30:00 (Sat)
  62867151000, #  local_start 1993-03-07 01:30:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  62887678200, #    utc_start 1993-10-30 15:30:00 (Sat)
  62898562800, #      utc_end 1994-03-05 15:00:00 (Sat)
  62887717800, #  local_start 1993-10-31 02:30:00 (Sun)
  62898602400, #    local_end 1994-03-06 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  62898562800, #    utc_start 1994-03-05 15:00:00 (Sat)
  62919127800, #      utc_end 1994-10-29 15:30:00 (Sat)
  62898600600, #  local_start 1994-03-06 01:30:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  62919127800, #    utc_start 1994-10-29 15:30:00 (Sat)
  62930012400, #      utc_end 1995-03-04 15:00:00 (Sat)
  62919167400, #  local_start 1994-10-30 02:30:00 (Sun)
  62930052000, #    local_end 1995-03-05 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  62930012400, #    utc_start 1995-03-04 15:00:00 (Sat)
  62950577400, #      utc_end 1995-10-28 15:30:00 (Sat)
  62930050200, #  local_start 1995-03-05 01:30:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  62950577400, #    utc_start 1995-10-28 15:30:00 (Sat)
  62963881200, #      utc_end 1996-03-30 15:00:00 (Sat)
  62950617000, #  local_start 1995-10-29 02:30:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  62963881200, #    utc_start 1996-03-30 15:00:00 (Sat)
  62982027000, #      utc_end 1996-10-26 15:30:00 (Sat)
  62963919000, #  local_start 1996-03-31 01:30:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  62982027000, #    utc_start 1996-10-26 15:30:00 (Sat)
  62995330800, #      utc_end 1997-03-29 15:00:00 (Sat)
  62982066600, #  local_start 1996-10-27 02:30:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  62995330800, #    utc_start 1997-03-29 15:00:00 (Sat)
  63013476600, #      utc_end 1997-10-25 15:30:00 (Sat)
  62995368600, #  local_start 1997-03-30 01:30:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63013476600, #    utc_start 1997-10-25 15:30:00 (Sat)
  63026780400, #      utc_end 1998-03-28 15:00:00 (Sat)
  63013516200, #  local_start 1997-10-26 02:30:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63026780400, #    utc_start 1998-03-28 15:00:00 (Sat)
  63044926200, #      utc_end 1998-10-24 15:30:00 (Sat)
  63026818200, #  local_start 1998-03-29 01:30:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63044926200, #    utc_start 1998-10-24 15:30:00 (Sat)
  63058230000, #      utc_end 1999-03-27 15:00:00 (Sat)
  63044965800, #  local_start 1998-10-25 02:30:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63058230000, #    utc_start 1999-03-27 15:00:00 (Sat)
  63076980600, #      utc_end 1999-10-30 15:30:00 (Sat)
  63058267800, #  local_start 1999-03-28 01:30:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63076980600, #    utc_start 1999-10-30 15:30:00 (Sat)
  63089679600, #      utc_end 2000-03-25 15:00:00 (Sat)
  63077020200, #  local_start 1999-10-31 02:30:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63089679600, #    utc_start 2000-03-25 15:00:00 (Sat)
  63102987000, #      utc_end 2000-08-26 15:30:00 (Sat)
  63089717400, #  local_start 2000-03-26 01:30:00 (Sun)
  63103024800, #    local_end 2000-08-27 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63102987000, #    utc_start 2000-08-26 15:30:00 (Sat)
  63121129200, #      utc_end 2001-03-24 15:00:00 (Sat)
  63103026600, #  local_start 2000-08-27 02:30:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63121129200, #    utc_start 2001-03-24 15:00:00 (Sat)
  63139879800, #      utc_end 2001-10-27 15:30:00 (Sat)
  63121167000, #  local_start 2001-03-25 01:30:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63139879800, #    utc_start 2001-10-27 15:30:00 (Sat)
  63153183600, #      utc_end 2002-03-30 15:00:00 (Sat)
  63139919400, #  local_start 2001-10-28 02:30:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63153183600, #    utc_start 2002-03-30 15:00:00 (Sat)
  63171329400, #      utc_end 2002-10-26 15:30:00 (Sat)
  63153221400, #  local_start 2002-03-31 01:30:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63171329400, #    utc_start 2002-10-26 15:30:00 (Sat)
  63184633200, #      utc_end 2003-03-29 15:00:00 (Sat)
  63171369000, #  local_start 2002-10-27 02:30:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63184633200, #    utc_start 2003-03-29 15:00:00 (Sat)
  63202779000, #      utc_end 2003-10-25 15:30:00 (Sat)
  63184671000, #  local_start 2003-03-30 01:30:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63202779000, #    utc_start 2003-10-25 15:30:00 (Sat)
  63216082800, #      utc_end 2004-03-27 15:00:00 (Sat)
  63202818600, #  local_start 2003-10-26 02:30:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63216082800, #    utc_start 2004-03-27 15:00:00 (Sat)
  63234833400, #      utc_end 2004-10-30 15:30:00 (Sat)
  63216120600, #  local_start 2004-03-28 01:30:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63234833400, #    utc_start 2004-10-30 15:30:00 (Sat)
  63247532400, #      utc_end 2005-03-26 15:00:00 (Sat)
  63234873000, #  local_start 2004-10-31 02:30:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63247532400, #    utc_start 2005-03-26 15:00:00 (Sat)
  63266283000, #      utc_end 2005-10-29 15:30:00 (Sat)
  63247570200, #  local_start 2005-03-27 01:30:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63266283000, #    utc_start 2005-10-29 15:30:00 (Sat)
  63279586800, #      utc_end 2006-04-01 15:00:00 (Sat)
  63266322600, #  local_start 2005-10-30 02:30:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63279586800, #    utc_start 2006-04-01 15:00:00 (Sat)
  63297732600, #      utc_end 2006-10-28 15:30:00 (Sat)
  63279624600, #  local_start 2006-04-02 01:30:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63297732600, #    utc_start 2006-10-28 15:30:00 (Sat)
  63310431600, #      utc_end 2007-03-24 15:00:00 (Sat)
  63297772200, #  local_start 2006-10-29 02:30:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63310431600, #    utc_start 2007-03-24 15:00:00 (Sat)
  63329182200, #      utc_end 2007-10-27 15:30:00 (Sat)
  63310469400, #  local_start 2007-03-25 01:30:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63329182200, #    utc_start 2007-10-27 15:30:00 (Sat)
  63343090800, #      utc_end 2008-04-05 15:00:00 (Sat)
  63329221800, #  local_start 2007-10-28 02:30:00 (Sun)
  63343130400, #    local_end 2008-04-06 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63343090800, #    utc_start 2008-04-05 15:00:00 (Sat)
  63358817400, #      utc_end 2008-10-04 15:30:00 (Sat)
  63343128600, #  local_start 2008-04-06 01:30:00 (Sun)
  63358855200, #    local_end 2008-10-05 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63358817400, #    utc_start 2008-10-04 15:30:00 (Sat)
  63374540400, #      utc_end 2009-04-04 15:00:00 (Sat)
  63358857000, #  local_start 2008-10-05 02:30:00 (Sun)
  63374580000, #    local_end 2009-04-05 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63374540400, #    utc_start 2009-04-04 15:00:00 (Sat)
  63390267000, #      utc_end 2009-10-03 15:30:00 (Sat)
  63374578200, #  local_start 2009-04-05 01:30:00 (Sun)
  63390304800, #    local_end 2009-10-04 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63390267000, #    utc_start 2009-10-03 15:30:00 (Sat)
  63405990000, #      utc_end 2010-04-03 15:00:00 (Sat)
  63390306600, #  local_start 2009-10-04 02:30:00 (Sun)
  63406029600, #    local_end 2010-04-04 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63405990000, #    utc_start 2010-04-03 15:00:00 (Sat)
  63421716600, #      utc_end 2010-10-02 15:30:00 (Sat)
  63406027800, #  local_start 2010-04-04 01:30:00 (Sun)
  63421754400, #    local_end 2010-10-03 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63421716600, #    utc_start 2010-10-02 15:30:00 (Sat)
  63437439600, #      utc_end 2011-04-02 15:00:00 (Sat)
  63421756200, #  local_start 2010-10-03 02:30:00 (Sun)
  63437479200, #    local_end 2011-04-03 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63437439600, #    utc_start 2011-04-02 15:00:00 (Sat)
  63453166200, #      utc_end 2011-10-01 15:30:00 (Sat)
  63437477400, #  local_start 2011-04-03 01:30:00 (Sun)
  63453204000, #    local_end 2011-10-02 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63453166200, #    utc_start 2011-10-01 15:30:00 (Sat)
  63468889200, #      utc_end 2012-03-31 15:00:00 (Sat)
  63453205800, #  local_start 2011-10-02 02:30:00 (Sun)
  63468928800, #    local_end 2012-04-01 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63468889200, #    utc_start 2012-03-31 15:00:00 (Sat)
  63485220600, #      utc_end 2012-10-06 15:30:00 (Sat)
  63468927000, #  local_start 2012-04-01 01:30:00 (Sun)
  63485258400, #    local_end 2012-10-07 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63485220600, #    utc_start 2012-10-06 15:30:00 (Sat)
  63500943600, #      utc_end 2013-04-06 15:00:00 (Sat)
  63485260200, #  local_start 2012-10-07 02:30:00 (Sun)
  63500983200, #    local_end 2013-04-07 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63500943600, #    utc_start 2013-04-06 15:00:00 (Sat)
  63516670200, #      utc_end 2013-10-05 15:30:00 (Sat)
  63500981400, #  local_start 2013-04-07 01:30:00 (Sun)
  63516708000, #    local_end 2013-10-06 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63516670200, #    utc_start 2013-10-05 15:30:00 (Sat)
  63532393200, #      utc_end 2014-04-05 15:00:00 (Sat)
  63516709800, #  local_start 2013-10-06 02:30:00 (Sun)
  63532432800, #    local_end 2014-04-06 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63532393200, #    utc_start 2014-04-05 15:00:00 (Sat)
  63548119800, #      utc_end 2014-10-04 15:30:00 (Sat)
  63532431000, #  local_start 2014-04-06 01:30:00 (Sun)
  63548157600, #    local_end 2014-10-05 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63548119800, #    utc_start 2014-10-04 15:30:00 (Sat)
  63563842800, #      utc_end 2015-04-04 15:00:00 (Sat)
  63548159400, #  local_start 2014-10-05 02:30:00 (Sun)
  63563882400, #    local_end 2015-04-05 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63563842800, #    utc_start 2015-04-04 15:00:00 (Sat)
  63579569400, #      utc_end 2015-10-03 15:30:00 (Sat)
  63563880600, #  local_start 2015-04-05 01:30:00 (Sun)
  63579607200, #    local_end 2015-10-04 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63579569400, #    utc_start 2015-10-03 15:30:00 (Sat)
  63595292400, #      utc_end 2016-04-02 15:00:00 (Sat)
  63579609000, #  local_start 2015-10-04 02:30:00 (Sun)
  63595332000, #    local_end 2016-04-03 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63595292400, #    utc_start 2016-04-02 15:00:00 (Sat)
  63611019000, #      utc_end 2016-10-01 15:30:00 (Sat)
  63595330200, #  local_start 2016-04-03 01:30:00 (Sun)
  63611056800, #    local_end 2016-10-02 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63611019000, #    utc_start 2016-10-01 15:30:00 (Sat)
  63626742000, #      utc_end 2017-04-01 15:00:00 (Sat)
  63611058600, #  local_start 2016-10-02 02:30:00 (Sun)
  63626781600, #    local_end 2017-04-02 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63626742000, #    utc_start 2017-04-01 15:00:00 (Sat)
  63642468600, #      utc_end 2017-09-30 15:30:00 (Sat)
  63626779800, #  local_start 2017-04-02 01:30:00 (Sun)
  63642506400, #    local_end 2017-10-01 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63642468600, #    utc_start 2017-09-30 15:30:00 (Sat)
  63658191600, #      utc_end 2018-03-31 15:00:00 (Sat)
  63642508200, #  local_start 2017-10-01 02:30:00 (Sun)
  63658231200, #    local_end 2018-04-01 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63658191600, #    utc_start 2018-03-31 15:00:00 (Sat)
  63674523000, #      utc_end 2018-10-06 15:30:00 (Sat)
  63658229400, #  local_start 2018-04-01 01:30:00 (Sun)
  63674560800, #    local_end 2018-10-07 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63674523000, #    utc_start 2018-10-06 15:30:00 (Sat)
  63690246000, #      utc_end 2019-04-06 15:00:00 (Sat)
  63674562600, #  local_start 2018-10-07 02:30:00 (Sun)
  63690285600, #    local_end 2019-04-07 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63690246000, #    utc_start 2019-04-06 15:00:00 (Sat)
  63705972600, #      utc_end 2019-10-05 15:30:00 (Sat)
  63690283800, #  local_start 2019-04-07 01:30:00 (Sun)
  63706010400, #    local_end 2019-10-06 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63705972600, #    utc_start 2019-10-05 15:30:00 (Sat)
  63721695600, #      utc_end 2020-04-04 15:00:00 (Sat)
  63706012200, #  local_start 2019-10-06 02:30:00 (Sun)
  63721735200, #    local_end 2020-04-05 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63721695600, #    utc_start 2020-04-04 15:00:00 (Sat)
  63737422200, #      utc_end 2020-10-03 15:30:00 (Sat)
  63721733400, #  local_start 2020-04-05 01:30:00 (Sun)
  63737460000, #    local_end 2020-10-04 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63737422200, #    utc_start 2020-10-03 15:30:00 (Sat)
  63753145200, #      utc_end 2021-04-03 15:00:00 (Sat)
  63737461800, #  local_start 2020-10-04 02:30:00 (Sun)
  63753184800, #    local_end 2021-04-04 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63753145200, #    utc_start 2021-04-03 15:00:00 (Sat)
  63768871800, #      utc_end 2021-10-02 15:30:00 (Sat)
  63753183000, #  local_start 2021-04-04 01:30:00 (Sun)
  63768909600, #    local_end 2021-10-03 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63768871800, #    utc_start 2021-10-02 15:30:00 (Sat)
  63784594800, #      utc_end 2022-04-02 15:00:00 (Sat)
  63768911400, #  local_start 2021-10-03 02:30:00 (Sun)
  63784634400, #    local_end 2022-04-03 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63784594800, #    utc_start 2022-04-02 15:00:00 (Sat)
  63800321400, #      utc_end 2022-10-01 15:30:00 (Sat)
  63784632600, #  local_start 2022-04-03 01:30:00 (Sun)
  63800359200, #    local_end 2022-10-02 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63800321400, #    utc_start 2022-10-01 15:30:00 (Sat)
  63816044400, #      utc_end 2023-04-01 15:00:00 (Sat)
  63800361000, #  local_start 2022-10-02 02:30:00 (Sun)
  63816084000, #    local_end 2023-04-02 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63816044400, #    utc_start 2023-04-01 15:00:00 (Sat)
  63831771000, #      utc_end 2023-09-30 15:30:00 (Sat)
  63816082200, #  local_start 2023-04-02 01:30:00 (Sun)
  63831808800, #    local_end 2023-10-01 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63831771000, #    utc_start 2023-09-30 15:30:00 (Sat)
  63848098800, #      utc_end 2024-04-06 15:00:00 (Sat)
  63831810600, #  local_start 2023-10-01 02:30:00 (Sun)
  63848138400, #    local_end 2024-04-07 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63848098800, #    utc_start 2024-04-06 15:00:00 (Sat)
  63863825400, #      utc_end 2024-10-05 15:30:00 (Sat)
  63848136600, #  local_start 2024-04-07 01:30:00 (Sun)
  63863863200, #    local_end 2024-10-06 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63863825400, #    utc_start 2024-10-05 15:30:00 (Sat)
  63879548400, #      utc_end 2025-04-05 15:00:00 (Sat)
  63863865000, #  local_start 2024-10-06 02:30:00 (Sun)
  63879588000, #    local_end 2025-04-06 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63879548400, #    utc_start 2025-04-05 15:00:00 (Sat)
  63895275000, #      utc_end 2025-10-04 15:30:00 (Sat)
  63879586200, #  local_start 2025-04-06 01:30:00 (Sun)
  63895312800, #    local_end 2025-10-05 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63895275000, #    utc_start 2025-10-04 15:30:00 (Sat)
  63910998000, #      utc_end 2026-04-04 15:00:00 (Sat)
  63895314600, #  local_start 2025-10-05 02:30:00 (Sun)
  63911037600, #    local_end 2026-04-05 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63910998000, #    utc_start 2026-04-04 15:00:00 (Sat)
  63926724600, #      utc_end 2026-10-03 15:30:00 (Sat)
  63911035800, #  local_start 2026-04-05 01:30:00 (Sun)
  63926762400, #    local_end 2026-10-04 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
      [
  63926724600, #    utc_start 2026-10-03 15:30:00 (Sat)
  63942447600, #      utc_end 2027-04-03 15:00:00 (Sat)
  63926764200, #  local_start 2026-10-04 02:30:00 (Sun)
  63942487200, #    local_end 2027-04-04 02:00:00 (Sun)
  39600,
  1,
  'LHDT',
      ],
      [
  63942447600, #    utc_start 2027-04-03 15:00:00 (Sat)
  63958174200, #      utc_end 2027-10-02 15:30:00 (Sat)
  63942485400, #  local_start 2027-04-04 01:30:00 (Sun)
  63958212000, #    local_end 2027-10-03 02:00:00 (Sun)
  37800,
  0,
  'LHST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {47}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 37800 }
  
  my $last_observance = bless( {
    'format' => 'LH%sT',
    'gmtoff' => '10:30',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723240,
      'local_rd_secs' => 1800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723240,
      'utc_rd_secs' => 1800,
      'utc_year' => 1982
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 37800,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723239,
      'local_rd_secs' => 50400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723239,
      'utc_rd_secs' => 50400,
      'utc_year' => 1982
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2008',
      'in' => 'Apr',
      'letter' => 'S',
      'name' => 'LH',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2008',
      'in' => 'Oct',
      'letter' => 'D',
      'name' => 'LH',
      'offset_from_std' => 1800,
      'on' => 'Sun>=1',
      'save' => '0:30',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AUSTRALIA_LORD_HOWE

    $main::fatpacked{"DateTime/TimeZone/Australia/Melbourne.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AUSTRALIA_MELBOURNE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Australia::Melbourne;
  $DateTime::TimeZone::Australia::Melbourne::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Australia::Melbourne::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59771571608, #      utc_end 1895-01-31 14:20:08 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59771606400, #    local_end 1895-02-01 00:00:00 (Fri)
  34792,
  0,
  'LMT',
      ],
      [
  59771571608, #    utc_start 1895-01-31 14:20:08 (Thu)
  60463116060, #      utc_end 1916-12-31 14:01:00 (Sun)
  59771607608, #  local_start 1895-02-01 00:20:08 (Fri)
  60463152060, #    local_end 1917-01-01 00:01:00 (Mon)
  36000,
  0,
  'AEST',
      ],
      [
  60463116060, #    utc_start 1916-12-31 14:01:00 (Sun)
  60470290800, #      utc_end 1917-03-24 15:00:00 (Sat)
  60463155660, #  local_start 1917-01-01 01:01:00 (Mon)
  60470330400, #    local_end 1917-03-25 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  60470290800, #    utc_start 1917-03-24 15:00:00 (Sat)
  61252041600, #      utc_end 1941-12-31 16:00:00 (Wed)
  60470326800, #  local_start 1917-03-25 01:00:00 (Sun)
  61252077600, #    local_end 1942-01-01 02:00:00 (Thu)
  36000,
  0,
  'AEST',
      ],
      [
  61252041600, #    utc_start 1941-12-31 16:00:00 (Wed)
  61259554800, #      utc_end 1942-03-28 15:00:00 (Sat)
  61252081200, #  local_start 1942-01-01 03:00:00 (Thu)
  61259594400, #    local_end 1942-03-29 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61259554800, #    utc_start 1942-03-28 15:00:00 (Sat)
  61275283200, #      utc_end 1942-09-26 16:00:00 (Sat)
  61259590800, #  local_start 1942-03-29 01:00:00 (Sun)
  61275319200, #    local_end 1942-09-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  61275283200, #    utc_start 1942-09-26 16:00:00 (Sat)
  61291004400, #      utc_end 1943-03-27 15:00:00 (Sat)
  61275322800, #  local_start 1942-09-27 03:00:00 (Sun)
  61291044000, #    local_end 1943-03-28 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61291004400, #    utc_start 1943-03-27 15:00:00 (Sat)
  61307337600, #      utc_end 1943-10-02 16:00:00 (Sat)
  61291040400, #  local_start 1943-03-28 01:00:00 (Sun)
  61307373600, #    local_end 1943-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  61307337600, #    utc_start 1943-10-02 16:00:00 (Sat)
  61322454000, #      utc_end 1944-03-25 15:00:00 (Sat)
  61307377200, #  local_start 1943-10-03 03:00:00 (Sun)
  61322493600, #    local_end 1944-03-26 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61322454000, #    utc_start 1944-03-25 15:00:00 (Sat)
  62167183200, #      utc_end 1970-12-31 14:00:00 (Thu)
  61322490000, #  local_start 1944-03-26 01:00:00 (Sun)
  62167219200, #    local_end 1971-01-01 00:00:00 (Fri)
  36000,
  0,
  'AEST',
      ],
      [
  62167183200, #    utc_start 1970-12-31 14:00:00 (Thu)
  62193369600, #      utc_end 1971-10-30 16:00:00 (Sat)
  62167219200, #  local_start 1971-01-01 00:00:00 (Fri)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62193369600, #    utc_start 1971-10-30 16:00:00 (Sat)
  62203651200, #      utc_end 1972-02-26 16:00:00 (Sat)
  62193409200, #  local_start 1971-10-31 03:00:00 (Sun)
  62203690800, #    local_end 1972-02-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62203651200, #    utc_start 1972-02-26 16:00:00 (Sat)
  62224819200, #      utc_end 1972-10-28 16:00:00 (Sat)
  62203687200, #  local_start 1972-02-27 02:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62224819200, #    utc_start 1972-10-28 16:00:00 (Sat)
  62235705600, #      utc_end 1973-03-03 16:00:00 (Sat)
  62224858800, #  local_start 1972-10-29 03:00:00 (Sun)
  62235745200, #    local_end 1973-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62235705600, #    utc_start 1973-03-03 16:00:00 (Sat)
  62256268800, #      utc_end 1973-10-27 16:00:00 (Sat)
  62235741600, #  local_start 1973-03-04 02:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62256268800, #    utc_start 1973-10-27 16:00:00 (Sat)
  62267155200, #      utc_end 1974-03-02 16:00:00 (Sat)
  62256308400, #  local_start 1973-10-28 03:00:00 (Sun)
  62267194800, #    local_end 1974-03-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62267155200, #    utc_start 1974-03-02 16:00:00 (Sat)
  62287718400, #      utc_end 1974-10-26 16:00:00 (Sat)
  62267191200, #  local_start 1974-03-03 02:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62287718400, #    utc_start 1974-10-26 16:00:00 (Sat)
  62298604800, #      utc_end 1975-03-01 16:00:00 (Sat)
  62287758000, #  local_start 1974-10-27 03:00:00 (Sun)
  62298644400, #    local_end 1975-03-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62298604800, #    utc_start 1975-03-01 16:00:00 (Sat)
  62319168000, #      utc_end 1975-10-25 16:00:00 (Sat)
  62298640800, #  local_start 1975-03-02 02:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62319168000, #    utc_start 1975-10-25 16:00:00 (Sat)
  62330659200, #      utc_end 1976-03-06 16:00:00 (Sat)
  62319207600, #  local_start 1975-10-26 03:00:00 (Sun)
  62330698800, #    local_end 1976-03-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62330659200, #    utc_start 1976-03-06 16:00:00 (Sat)
  62351222400, #      utc_end 1976-10-30 16:00:00 (Sat)
  62330695200, #  local_start 1976-03-07 02:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62351222400, #    utc_start 1976-10-30 16:00:00 (Sat)
  62362108800, #      utc_end 1977-03-05 16:00:00 (Sat)
  62351262000, #  local_start 1976-10-31 03:00:00 (Sun)
  62362148400, #    local_end 1977-03-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62362108800, #    utc_start 1977-03-05 16:00:00 (Sat)
  62382672000, #      utc_end 1977-10-29 16:00:00 (Sat)
  62362144800, #  local_start 1977-03-06 02:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62382672000, #    utc_start 1977-10-29 16:00:00 (Sat)
  62393558400, #      utc_end 1978-03-04 16:00:00 (Sat)
  62382711600, #  local_start 1977-10-30 03:00:00 (Sun)
  62393598000, #    local_end 1978-03-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62393558400, #    utc_start 1978-03-04 16:00:00 (Sat)
  62414121600, #      utc_end 1978-10-28 16:00:00 (Sat)
  62393594400, #  local_start 1978-03-05 02:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62414121600, #    utc_start 1978-10-28 16:00:00 (Sat)
  62425008000, #      utc_end 1979-03-03 16:00:00 (Sat)
  62414161200, #  local_start 1978-10-29 03:00:00 (Sun)
  62425047600, #    local_end 1979-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62425008000, #    utc_start 1979-03-03 16:00:00 (Sat)
  62445571200, #      utc_end 1979-10-27 16:00:00 (Sat)
  62425044000, #  local_start 1979-03-04 02:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62445571200, #    utc_start 1979-10-27 16:00:00 (Sat)
  62456457600, #      utc_end 1980-03-01 16:00:00 (Sat)
  62445610800, #  local_start 1979-10-28 03:00:00 (Sun)
  62456497200, #    local_end 1980-03-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62456457600, #    utc_start 1980-03-01 16:00:00 (Sat)
  62477020800, #      utc_end 1980-10-25 16:00:00 (Sat)
  62456493600, #  local_start 1980-03-02 02:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62477020800, #    utc_start 1980-10-25 16:00:00 (Sat)
  62487907200, #      utc_end 1981-02-28 16:00:00 (Sat)
  62477060400, #  local_start 1980-10-26 03:00:00 (Sun)
  62487946800, #    local_end 1981-03-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62487907200, #    utc_start 1981-02-28 16:00:00 (Sat)
  62508470400, #      utc_end 1981-10-24 16:00:00 (Sat)
  62487943200, #  local_start 1981-03-01 02:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62508470400, #    utc_start 1981-10-24 16:00:00 (Sat)
  62519961600, #      utc_end 1982-03-06 16:00:00 (Sat)
  62508510000, #  local_start 1981-10-25 03:00:00 (Sun)
  62520001200, #    local_end 1982-03-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62519961600, #    utc_start 1982-03-06 16:00:00 (Sat)
  62540524800, #      utc_end 1982-10-30 16:00:00 (Sat)
  62519997600, #  local_start 1982-03-07 02:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62540524800, #    utc_start 1982-10-30 16:00:00 (Sat)
  62551411200, #      utc_end 1983-03-05 16:00:00 (Sat)
  62540564400, #  local_start 1982-10-31 03:00:00 (Sun)
  62551450800, #    local_end 1983-03-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62551411200, #    utc_start 1983-03-05 16:00:00 (Sat)
  62571974400, #      utc_end 1983-10-29 16:00:00 (Sat)
  62551447200, #  local_start 1983-03-06 02:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62571974400, #    utc_start 1983-10-29 16:00:00 (Sat)
  62582860800, #      utc_end 1984-03-03 16:00:00 (Sat)
  62572014000, #  local_start 1983-10-30 03:00:00 (Sun)
  62582900400, #    local_end 1984-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62582860800, #    utc_start 1984-03-03 16:00:00 (Sat)
  62603424000, #      utc_end 1984-10-27 16:00:00 (Sat)
  62582896800, #  local_start 1984-03-04 02:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62603424000, #    utc_start 1984-10-27 16:00:00 (Sat)
  62614310400, #      utc_end 1985-03-02 16:00:00 (Sat)
  62603463600, #  local_start 1984-10-28 03:00:00 (Sun)
  62614350000, #    local_end 1985-03-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62614310400, #    utc_start 1985-03-02 16:00:00 (Sat)
  62634873600, #      utc_end 1985-10-26 16:00:00 (Sat)
  62614346400, #  local_start 1985-03-03 02:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62634873600, #    utc_start 1985-10-26 16:00:00 (Sat)
  62646969600, #      utc_end 1986-03-15 16:00:00 (Sat)
  62634913200, #  local_start 1985-10-27 03:00:00 (Sun)
  62647009200, #    local_end 1986-03-16 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62646969600, #    utc_start 1986-03-15 16:00:00 (Sat)
  62665718400, #      utc_end 1986-10-18 16:00:00 (Sat)
  62647005600, #  local_start 1986-03-16 02:00:00 (Sun)
  62665754400, #    local_end 1986-10-19 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62665718400, #    utc_start 1986-10-18 16:00:00 (Sat)
  62678419200, #      utc_end 1987-03-14 16:00:00 (Sat)
  62665758000, #  local_start 1986-10-19 03:00:00 (Sun)
  62678458800, #    local_end 1987-03-15 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62678419200, #    utc_start 1987-03-14 16:00:00 (Sat)
  62697168000, #      utc_end 1987-10-17 16:00:00 (Sat)
  62678455200, #  local_start 1987-03-15 02:00:00 (Sun)
  62697204000, #    local_end 1987-10-18 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62697168000, #    utc_start 1987-10-17 16:00:00 (Sat)
  62710473600, #      utc_end 1988-03-19 16:00:00 (Sat)
  62697207600, #  local_start 1987-10-18 03:00:00 (Sun)
  62710513200, #    local_end 1988-03-20 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62710473600, #    utc_start 1988-03-19 16:00:00 (Sat)
  62729827200, #      utc_end 1988-10-29 16:00:00 (Sat)
  62710509600, #  local_start 1988-03-20 02:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62729827200, #    utc_start 1988-10-29 16:00:00 (Sat)
  62741923200, #      utc_end 1989-03-18 16:00:00 (Sat)
  62729866800, #  local_start 1988-10-30 03:00:00 (Sun)
  62741962800, #    local_end 1989-03-19 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62741923200, #    utc_start 1989-03-18 16:00:00 (Sat)
  62761276800, #      utc_end 1989-10-28 16:00:00 (Sat)
  62741959200, #  local_start 1989-03-19 02:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62761276800, #    utc_start 1989-10-28 16:00:00 (Sat)
  62773372800, #      utc_end 1990-03-17 16:00:00 (Sat)
  62761316400, #  local_start 1989-10-29 03:00:00 (Sun)
  62773412400, #    local_end 1990-03-18 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62773372800, #    utc_start 1990-03-17 16:00:00 (Sat)
  62792726400, #      utc_end 1990-10-27 16:00:00 (Sat)
  62773408800, #  local_start 1990-03-18 02:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62792726400, #    utc_start 1990-10-27 16:00:00 (Sat)
  62803612800, #      utc_end 1991-03-02 16:00:00 (Sat)
  62792766000, #  local_start 1990-10-28 03:00:00 (Sun)
  62803652400, #    local_end 1991-03-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62803612800, #    utc_start 1991-03-02 16:00:00 (Sat)
  62824176000, #      utc_end 1991-10-26 16:00:00 (Sat)
  62803648800, #  local_start 1991-03-03 02:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62824176000, #    utc_start 1991-10-26 16:00:00 (Sat)
  62835062400, #      utc_end 1992-02-29 16:00:00 (Sat)
  62824215600, #  local_start 1991-10-27 03:00:00 (Sun)
  62835102000, #    local_end 1992-03-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62835062400, #    utc_start 1992-02-29 16:00:00 (Sat)
  62855625600, #      utc_end 1992-10-24 16:00:00 (Sat)
  62835098400, #  local_start 1992-03-01 02:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62855625600, #    utc_start 1992-10-24 16:00:00 (Sat)
  62867116800, #      utc_end 1993-03-06 16:00:00 (Sat)
  62855665200, #  local_start 1992-10-25 03:00:00 (Sun)
  62867156400, #    local_end 1993-03-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62867116800, #    utc_start 1993-03-06 16:00:00 (Sat)
  62887680000, #      utc_end 1993-10-30 16:00:00 (Sat)
  62867152800, #  local_start 1993-03-07 02:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62887680000, #    utc_start 1993-10-30 16:00:00 (Sat)
  62898566400, #      utc_end 1994-03-05 16:00:00 (Sat)
  62887719600, #  local_start 1993-10-31 03:00:00 (Sun)
  62898606000, #    local_end 1994-03-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62898566400, #    utc_start 1994-03-05 16:00:00 (Sat)
  62919129600, #      utc_end 1994-10-29 16:00:00 (Sat)
  62898602400, #  local_start 1994-03-06 02:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62919129600, #    utc_start 1994-10-29 16:00:00 (Sat)
  62931830400, #      utc_end 1995-03-25 16:00:00 (Sat)
  62919169200, #  local_start 1994-10-30 03:00:00 (Sun)
  62931870000, #    local_end 1995-03-26 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62931830400, #    utc_start 1995-03-25 16:00:00 (Sat)
  62950579200, #      utc_end 1995-10-28 16:00:00 (Sat)
  62931866400, #  local_start 1995-03-26 02:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62950579200, #    utc_start 1995-10-28 16:00:00 (Sat)
  62963884800, #      utc_end 1996-03-30 16:00:00 (Sat)
  62950618800, #  local_start 1995-10-29 03:00:00 (Sun)
  62963924400, #    local_end 1996-03-31 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62963884800, #    utc_start 1996-03-30 16:00:00 (Sat)
  62982028800, #      utc_end 1996-10-26 16:00:00 (Sat)
  62963920800, #  local_start 1996-03-31 02:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62982028800, #    utc_start 1996-10-26 16:00:00 (Sat)
  62995334400, #      utc_end 1997-03-29 16:00:00 (Sat)
  62982068400, #  local_start 1996-10-27 03:00:00 (Sun)
  62995374000, #    local_end 1997-03-30 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62995334400, #    utc_start 1997-03-29 16:00:00 (Sat)
  63013478400, #      utc_end 1997-10-25 16:00:00 (Sat)
  62995370400, #  local_start 1997-03-30 02:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63013478400, #    utc_start 1997-10-25 16:00:00 (Sat)
  63026784000, #      utc_end 1998-03-28 16:00:00 (Sat)
  63013518000, #  local_start 1997-10-26 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63026784000, #    utc_start 1998-03-28 16:00:00 (Sat)
  63044928000, #      utc_end 1998-10-24 16:00:00 (Sat)
  63026820000, #  local_start 1998-03-29 02:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63044928000, #    utc_start 1998-10-24 16:00:00 (Sat)
  63058233600, #      utc_end 1999-03-27 16:00:00 (Sat)
  63044967600, #  local_start 1998-10-25 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63058233600, #    utc_start 1999-03-27 16:00:00 (Sat)
  63076982400, #      utc_end 1999-10-30 16:00:00 (Sat)
  63058269600, #  local_start 1999-03-28 02:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63076982400, #    utc_start 1999-10-30 16:00:00 (Sat)
  63089683200, #      utc_end 2000-03-25 16:00:00 (Sat)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63089683200, #    utc_start 2000-03-25 16:00:00 (Sat)
  63102988800, #      utc_end 2000-08-26 16:00:00 (Sat)
  63089719200, #  local_start 2000-03-26 02:00:00 (Sun)
  63103024800, #    local_end 2000-08-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63102988800, #    utc_start 2000-08-26 16:00:00 (Sat)
  63121132800, #      utc_end 2001-03-24 16:00:00 (Sat)
  63103028400, #  local_start 2000-08-27 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63121132800, #    utc_start 2001-03-24 16:00:00 (Sat)
  63139881600, #      utc_end 2001-10-27 16:00:00 (Sat)
  63121168800, #  local_start 2001-03-25 02:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63139881600, #    utc_start 2001-10-27 16:00:00 (Sat)
  63153187200, #      utc_end 2002-03-30 16:00:00 (Sat)
  63139921200, #  local_start 2001-10-28 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63153187200, #    utc_start 2002-03-30 16:00:00 (Sat)
  63171331200, #      utc_end 2002-10-26 16:00:00 (Sat)
  63153223200, #  local_start 2002-03-31 02:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63171331200, #    utc_start 2002-10-26 16:00:00 (Sat)
  63184636800, #      utc_end 2003-03-29 16:00:00 (Sat)
  63171370800, #  local_start 2002-10-27 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63184636800, #    utc_start 2003-03-29 16:00:00 (Sat)
  63202780800, #      utc_end 2003-10-25 16:00:00 (Sat)
  63184672800, #  local_start 2003-03-30 02:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63202780800, #    utc_start 2003-10-25 16:00:00 (Sat)
  63216086400, #      utc_end 2004-03-27 16:00:00 (Sat)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63216086400, #    utc_start 2004-03-27 16:00:00 (Sat)
  63234835200, #      utc_end 2004-10-30 16:00:00 (Sat)
  63216122400, #  local_start 2004-03-28 02:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63234835200, #    utc_start 2004-10-30 16:00:00 (Sat)
  63247536000, #      utc_end 2005-03-26 16:00:00 (Sat)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63247536000, #    utc_start 2005-03-26 16:00:00 (Sat)
  63266284800, #      utc_end 2005-10-29 16:00:00 (Sat)
  63247572000, #  local_start 2005-03-27 02:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63266284800, #    utc_start 2005-10-29 16:00:00 (Sat)
  63279590400, #      utc_end 2006-04-01 16:00:00 (Sat)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279630000, #    local_end 2006-04-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63279590400, #    utc_start 2006-04-01 16:00:00 (Sat)
  63297734400, #      utc_end 2006-10-28 16:00:00 (Sat)
  63279626400, #  local_start 2006-04-02 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63297734400, #    utc_start 2006-10-28 16:00:00 (Sat)
  63310435200, #      utc_end 2007-03-24 16:00:00 (Sat)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63310435200, #    utc_start 2007-03-24 16:00:00 (Sat)
  63329184000, #      utc_end 2007-10-27 16:00:00 (Sat)
  63310471200, #  local_start 2007-03-25 02:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63329184000, #    utc_start 2007-10-27 16:00:00 (Sat)
  63343094400, #      utc_end 2008-04-05 16:00:00 (Sat)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63343134000, #    local_end 2008-04-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63343094400, #    utc_start 2008-04-05 16:00:00 (Sat)
  63358819200, #      utc_end 2008-10-04 16:00:00 (Sat)
  63343130400, #  local_start 2008-04-06 02:00:00 (Sun)
  63358855200, #    local_end 2008-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63358819200, #    utc_start 2008-10-04 16:00:00 (Sat)
  63374544000, #      utc_end 2009-04-04 16:00:00 (Sat)
  63358858800, #  local_start 2008-10-05 03:00:00 (Sun)
  63374583600, #    local_end 2009-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63374544000, #    utc_start 2009-04-04 16:00:00 (Sat)
  63390268800, #      utc_end 2009-10-03 16:00:00 (Sat)
  63374580000, #  local_start 2009-04-05 02:00:00 (Sun)
  63390304800, #    local_end 2009-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63390268800, #    utc_start 2009-10-03 16:00:00 (Sat)
  63405993600, #      utc_end 2010-04-03 16:00:00 (Sat)
  63390308400, #  local_start 2009-10-04 03:00:00 (Sun)
  63406033200, #    local_end 2010-04-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63405993600, #    utc_start 2010-04-03 16:00:00 (Sat)
  63421718400, #      utc_end 2010-10-02 16:00:00 (Sat)
  63406029600, #  local_start 2010-04-04 02:00:00 (Sun)
  63421754400, #    local_end 2010-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63421718400, #    utc_start 2010-10-02 16:00:00 (Sat)
  63437443200, #      utc_end 2011-04-02 16:00:00 (Sat)
  63421758000, #  local_start 2010-10-03 03:00:00 (Sun)
  63437482800, #    local_end 2011-04-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63437443200, #    utc_start 2011-04-02 16:00:00 (Sat)
  63453168000, #      utc_end 2011-10-01 16:00:00 (Sat)
  63437479200, #  local_start 2011-04-03 02:00:00 (Sun)
  63453204000, #    local_end 2011-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63453168000, #    utc_start 2011-10-01 16:00:00 (Sat)
  63468892800, #      utc_end 2012-03-31 16:00:00 (Sat)
  63453207600, #  local_start 2011-10-02 03:00:00 (Sun)
  63468932400, #    local_end 2012-04-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63468892800, #    utc_start 2012-03-31 16:00:00 (Sat)
  63485222400, #      utc_end 2012-10-06 16:00:00 (Sat)
  63468928800, #  local_start 2012-04-01 02:00:00 (Sun)
  63485258400, #    local_end 2012-10-07 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63485222400, #    utc_start 2012-10-06 16:00:00 (Sat)
  63500947200, #      utc_end 2013-04-06 16:00:00 (Sat)
  63485262000, #  local_start 2012-10-07 03:00:00 (Sun)
  63500986800, #    local_end 2013-04-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63500947200, #    utc_start 2013-04-06 16:00:00 (Sat)
  63516672000, #      utc_end 2013-10-05 16:00:00 (Sat)
  63500983200, #  local_start 2013-04-07 02:00:00 (Sun)
  63516708000, #    local_end 2013-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63516672000, #    utc_start 2013-10-05 16:00:00 (Sat)
  63532396800, #      utc_end 2014-04-05 16:00:00 (Sat)
  63516711600, #  local_start 2013-10-06 03:00:00 (Sun)
  63532436400, #    local_end 2014-04-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63532396800, #    utc_start 2014-04-05 16:00:00 (Sat)
  63548121600, #      utc_end 2014-10-04 16:00:00 (Sat)
  63532432800, #  local_start 2014-04-06 02:00:00 (Sun)
  63548157600, #    local_end 2014-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63548121600, #    utc_start 2014-10-04 16:00:00 (Sat)
  63563846400, #      utc_end 2015-04-04 16:00:00 (Sat)
  63548161200, #  local_start 2014-10-05 03:00:00 (Sun)
  63563886000, #    local_end 2015-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63563846400, #    utc_start 2015-04-04 16:00:00 (Sat)
  63579571200, #      utc_end 2015-10-03 16:00:00 (Sat)
  63563882400, #  local_start 2015-04-05 02:00:00 (Sun)
  63579607200, #    local_end 2015-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63579571200, #    utc_start 2015-10-03 16:00:00 (Sat)
  63595296000, #      utc_end 2016-04-02 16:00:00 (Sat)
  63579610800, #  local_start 2015-10-04 03:00:00 (Sun)
  63595335600, #    local_end 2016-04-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63595296000, #    utc_start 2016-04-02 16:00:00 (Sat)
  63611020800, #      utc_end 2016-10-01 16:00:00 (Sat)
  63595332000, #  local_start 2016-04-03 02:00:00 (Sun)
  63611056800, #    local_end 2016-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63611020800, #    utc_start 2016-10-01 16:00:00 (Sat)
  63626745600, #      utc_end 2017-04-01 16:00:00 (Sat)
  63611060400, #  local_start 2016-10-02 03:00:00 (Sun)
  63626785200, #    local_end 2017-04-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63626745600, #    utc_start 2017-04-01 16:00:00 (Sat)
  63642470400, #      utc_end 2017-09-30 16:00:00 (Sat)
  63626781600, #  local_start 2017-04-02 02:00:00 (Sun)
  63642506400, #    local_end 2017-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63642470400, #    utc_start 2017-09-30 16:00:00 (Sat)
  63658195200, #      utc_end 2018-03-31 16:00:00 (Sat)
  63642510000, #  local_start 2017-10-01 03:00:00 (Sun)
  63658234800, #    local_end 2018-04-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63658195200, #    utc_start 2018-03-31 16:00:00 (Sat)
  63674524800, #      utc_end 2018-10-06 16:00:00 (Sat)
  63658231200, #  local_start 2018-04-01 02:00:00 (Sun)
  63674560800, #    local_end 2018-10-07 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63674524800, #    utc_start 2018-10-06 16:00:00 (Sat)
  63690249600, #      utc_end 2019-04-06 16:00:00 (Sat)
  63674564400, #  local_start 2018-10-07 03:00:00 (Sun)
  63690289200, #    local_end 2019-04-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63690249600, #    utc_start 2019-04-06 16:00:00 (Sat)
  63705974400, #      utc_end 2019-10-05 16:00:00 (Sat)
  63690285600, #  local_start 2019-04-07 02:00:00 (Sun)
  63706010400, #    local_end 2019-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63705974400, #    utc_start 2019-10-05 16:00:00 (Sat)
  63721699200, #      utc_end 2020-04-04 16:00:00 (Sat)
  63706014000, #  local_start 2019-10-06 03:00:00 (Sun)
  63721738800, #    local_end 2020-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63721699200, #    utc_start 2020-04-04 16:00:00 (Sat)
  63737424000, #      utc_end 2020-10-03 16:00:00 (Sat)
  63721735200, #  local_start 2020-04-05 02:00:00 (Sun)
  63737460000, #    local_end 2020-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63737424000, #    utc_start 2020-10-03 16:00:00 (Sat)
  63753148800, #      utc_end 2021-04-03 16:00:00 (Sat)
  63737463600, #  local_start 2020-10-04 03:00:00 (Sun)
  63753188400, #    local_end 2021-04-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63753148800, #    utc_start 2021-04-03 16:00:00 (Sat)
  63768873600, #      utc_end 2021-10-02 16:00:00 (Sat)
  63753184800, #  local_start 2021-04-04 02:00:00 (Sun)
  63768909600, #    local_end 2021-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63768873600, #    utc_start 2021-10-02 16:00:00 (Sat)
  63784598400, #      utc_end 2022-04-02 16:00:00 (Sat)
  63768913200, #  local_start 2021-10-03 03:00:00 (Sun)
  63784638000, #    local_end 2022-04-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63784598400, #    utc_start 2022-04-02 16:00:00 (Sat)
  63800323200, #      utc_end 2022-10-01 16:00:00 (Sat)
  63784634400, #  local_start 2022-04-03 02:00:00 (Sun)
  63800359200, #    local_end 2022-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63800323200, #    utc_start 2022-10-01 16:00:00 (Sat)
  63816048000, #      utc_end 2023-04-01 16:00:00 (Sat)
  63800362800, #  local_start 2022-10-02 03:00:00 (Sun)
  63816087600, #    local_end 2023-04-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63816048000, #    utc_start 2023-04-01 16:00:00 (Sat)
  63831772800, #      utc_end 2023-09-30 16:00:00 (Sat)
  63816084000, #  local_start 2023-04-02 02:00:00 (Sun)
  63831808800, #    local_end 2023-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63831772800, #    utc_start 2023-09-30 16:00:00 (Sat)
  63848102400, #      utc_end 2024-04-06 16:00:00 (Sat)
  63831812400, #  local_start 2023-10-01 03:00:00 (Sun)
  63848142000, #    local_end 2024-04-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63848102400, #    utc_start 2024-04-06 16:00:00 (Sat)
  63863827200, #      utc_end 2024-10-05 16:00:00 (Sat)
  63848138400, #  local_start 2024-04-07 02:00:00 (Sun)
  63863863200, #    local_end 2024-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63863827200, #    utc_start 2024-10-05 16:00:00 (Sat)
  63879552000, #      utc_end 2025-04-05 16:00:00 (Sat)
  63863866800, #  local_start 2024-10-06 03:00:00 (Sun)
  63879591600, #    local_end 2025-04-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63879552000, #    utc_start 2025-04-05 16:00:00 (Sat)
  63895276800, #      utc_end 2025-10-04 16:00:00 (Sat)
  63879588000, #  local_start 2025-04-06 02:00:00 (Sun)
  63895312800, #    local_end 2025-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63895276800, #    utc_start 2025-10-04 16:00:00 (Sat)
  63911001600, #      utc_end 2026-04-04 16:00:00 (Sat)
  63895316400, #  local_start 2025-10-05 03:00:00 (Sun)
  63911041200, #    local_end 2026-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63911001600, #    utc_start 2026-04-04 16:00:00 (Sat)
  63926726400, #      utc_end 2026-10-03 16:00:00 (Sat)
  63911037600, #  local_start 2026-04-05 02:00:00 (Sun)
  63926762400, #    local_end 2026-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63926726400, #    utc_start 2026-10-03 16:00:00 (Sat)
  63942451200, #      utc_end 2027-04-03 16:00:00 (Sat)
  63926766000, #  local_start 2026-10-04 03:00:00 (Sun)
  63942490800, #    local_end 2027-04-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63942451200, #    utc_start 2027-04-03 16:00:00 (Sat)
  63958176000, #      utc_end 2027-10-02 16:00:00 (Sat)
  63942487200, #  local_start 2027-04-04 02:00:00 (Sun)
  63958212000, #    local_end 2027-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {61}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 36000 }
  
  my $last_observance = bless( {
    'format' => 'AE%sT',
    'gmtoff' => '10:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 719528,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 719528,
      'utc_rd_secs' => 0,
      'utc_year' => 1972
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 36000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 719527,
      'local_rd_secs' => 50400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 719527,
      'utc_rd_secs' => 50400,
      'utc_year' => 1971
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00s',
      'from' => '2008',
      'in' => 'Oct',
      'letter' => 'D',
      'name' => 'AV',
      'offset_from_std' => 3600,
      'on' => 'Sun>=1',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00s',
      'from' => '2008',
      'in' => 'Apr',
      'letter' => 'S',
      'name' => 'AV',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AUSTRALIA_MELBOURNE

    $main::fatpacked{"DateTime/TimeZone/Australia/Perth.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AUSTRALIA_PERTH';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Australia::Perth;
  $DateTime::TimeZone::Australia::Perth::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Australia::Perth::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59797757796, #      utc_end 1895-11-30 16:16:36 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59797785600, #    local_end 1895-12-01 00:00:00 (Sun)
  27804,
  0,
  'LMT',
      ],
      [
  59797757796, #    utc_start 1895-11-30 16:16:36 (Sat)
  60463123260, #      utc_end 1916-12-31 16:01:00 (Sun)
  59797786596, #  local_start 1895-12-01 00:16:36 (Sun)
  60463152060, #    local_end 1917-01-01 00:01:00 (Mon)
  28800,
  0,
  'AWST',
      ],
      [
  60463123260, #    utc_start 1916-12-31 16:01:00 (Sun)
  60470298000, #      utc_end 1917-03-24 17:00:00 (Sat)
  60463155660, #  local_start 1917-01-01 01:01:00 (Mon)
  60470330400, #    local_end 1917-03-25 02:00:00 (Sun)
  32400,
  1,
  'AWDT',
      ],
      [
  60470298000, #    utc_start 1917-03-24 17:00:00 (Sat)
  61252048800, #      utc_end 1941-12-31 18:00:00 (Wed)
  60470326800, #  local_start 1917-03-25 01:00:00 (Sun)
  61252077600, #    local_end 1942-01-01 02:00:00 (Thu)
  28800,
  0,
  'AWST',
      ],
      [
  61252048800, #    utc_start 1941-12-31 18:00:00 (Wed)
  61259562000, #      utc_end 1942-03-28 17:00:00 (Sat)
  61252081200, #  local_start 1942-01-01 03:00:00 (Thu)
  61259594400, #    local_end 1942-03-29 02:00:00 (Sun)
  32400,
  1,
  'AWDT',
      ],
      [
  61259562000, #    utc_start 1942-03-28 17:00:00 (Sat)
  61275290400, #      utc_end 1942-09-26 18:00:00 (Sat)
  61259590800, #  local_start 1942-03-29 01:00:00 (Sun)
  61275319200, #    local_end 1942-09-27 02:00:00 (Sun)
  28800,
  0,
  'AWST',
      ],
      [
  61275290400, #    utc_start 1942-09-26 18:00:00 (Sat)
  61291011600, #      utc_end 1943-03-27 17:00:00 (Sat)
  61275322800, #  local_start 1942-09-27 03:00:00 (Sun)
  61291044000, #    local_end 1943-03-28 02:00:00 (Sun)
  32400,
  1,
  'AWDT',
      ],
      [
  61291011600, #    utc_start 1943-03-27 17:00:00 (Sat)
  61299216000, #      utc_end 1943-06-30 16:00:00 (Wed)
  61291040400, #  local_start 1943-03-28 01:00:00 (Sun)
  61299244800, #    local_end 1943-07-01 00:00:00 (Thu)
  28800,
  0,
  'AWST',
      ],
      [
  61299216000, #    utc_start 1943-06-30 16:00:00 (Wed)
  62287725600, #      utc_end 1974-10-26 18:00:00 (Sat)
  61299244800, #  local_start 1943-07-01 00:00:00 (Thu)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  28800,
  0,
  'AWST',
      ],
      [
  62287725600, #    utc_start 1974-10-26 18:00:00 (Sat)
  62298612000, #      utc_end 1975-03-01 18:00:00 (Sat)
  62287758000, #  local_start 1974-10-27 03:00:00 (Sun)
  62298644400, #    local_end 1975-03-02 03:00:00 (Sun)
  32400,
  1,
  'AWDT',
      ],
      [
  62298612000, #    utc_start 1975-03-01 18:00:00 (Sat)
  62571981600, #      utc_end 1983-10-29 18:00:00 (Sat)
  62298640800, #  local_start 1975-03-02 02:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  28800,
  0,
  'AWST',
      ],
      [
  62571981600, #    utc_start 1983-10-29 18:00:00 (Sat)
  62582868000, #      utc_end 1984-03-03 18:00:00 (Sat)
  62572014000, #  local_start 1983-10-30 03:00:00 (Sun)
  62582900400, #    local_end 1984-03-04 03:00:00 (Sun)
  32400,
  1,
  'AWDT',
      ],
      [
  62582868000, #    utc_start 1984-03-03 18:00:00 (Sat)
  62825997600, #      utc_end 1991-11-16 18:00:00 (Sat)
  62582896800, #  local_start 1984-03-04 02:00:00 (Sun)
  62826026400, #    local_end 1991-11-17 02:00:00 (Sun)
  28800,
  0,
  'AWST',
      ],
      [
  62825997600, #    utc_start 1991-11-16 18:00:00 (Sat)
  62835069600, #      utc_end 1992-02-29 18:00:00 (Sat)
  62826030000, #  local_start 1991-11-17 03:00:00 (Sun)
  62835102000, #    local_end 1992-03-01 03:00:00 (Sun)
  32400,
  1,
  'AWDT',
      ],
      [
  62835069600, #    utc_start 1992-02-29 18:00:00 (Sat)
  63300765600, #      utc_end 2006-12-02 18:00:00 (Sat)
  62835098400, #  local_start 1992-03-01 02:00:00 (Sun)
  63300794400, #    local_end 2006-12-03 02:00:00 (Sun)
  28800,
  0,
  'AWST',
      ],
      [
  63300765600, #    utc_start 2006-12-02 18:00:00 (Sat)
  63310442400, #      utc_end 2007-03-24 18:00:00 (Sat)
  63300798000, #  local_start 2006-12-03 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  32400,
  1,
  'AWDT',
      ],
      [
  63310442400, #    utc_start 2007-03-24 18:00:00 (Sat)
  63329191200, #      utc_end 2007-10-27 18:00:00 (Sat)
  63310471200, #  local_start 2007-03-25 02:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  28800,
  0,
  'AWST',
      ],
      [
  63329191200, #    utc_start 2007-10-27 18:00:00 (Sat)
  63342496800, #      utc_end 2008-03-29 18:00:00 (Sat)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63342529200, #    local_end 2008-03-30 03:00:00 (Sun)
  32400,
  1,
  'AWDT',
      ],
      [
  63342496800, #    utc_start 2008-03-29 18:00:00 (Sat)
  63360640800, #      utc_end 2008-10-25 18:00:00 (Sat)
  63342525600, #  local_start 2008-03-30 02:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  28800,
  0,
  'AWST',
      ],
      [
  63360640800, #    utc_start 2008-10-25 18:00:00 (Sat)
  63373946400, #      utc_end 2009-03-28 18:00:00 (Sat)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373978800, #    local_end 2009-03-29 03:00:00 (Sun)
  32400,
  1,
  'AWDT',
      ],
      [
  63373946400, #    utc_start 2009-03-28 18:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63373975200, #  local_start 2009-03-29 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  28800,
  0,
  'AWST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {9}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_AUSTRALIA_PERTH

    $main::fatpacked{"DateTime/TimeZone/Australia/Sydney.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_AUSTRALIA_SYDNEY';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Australia::Sydney;
  $DateTime::TimeZone::Australia::Sydney::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Australia::Sydney::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59771570108, #      utc_end 1895-01-31 13:55:08 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59771606400, #    local_end 1895-02-01 00:00:00 (Fri)
  36292,
  0,
  'LMT',
      ],
      [
  59771570108, #    utc_start 1895-01-31 13:55:08 (Thu)
  60463116060, #      utc_end 1916-12-31 14:01:00 (Sun)
  59771606108, #  local_start 1895-01-31 23:55:08 (Thu)
  60463152060, #    local_end 1917-01-01 00:01:00 (Mon)
  36000,
  0,
  'AEST',
      ],
      [
  60463116060, #    utc_start 1916-12-31 14:01:00 (Sun)
  60470290800, #      utc_end 1917-03-24 15:00:00 (Sat)
  60463155660, #  local_start 1917-01-01 01:01:00 (Mon)
  60470330400, #    local_end 1917-03-25 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  60470290800, #    utc_start 1917-03-24 15:00:00 (Sat)
  61252041600, #      utc_end 1941-12-31 16:00:00 (Wed)
  60470326800, #  local_start 1917-03-25 01:00:00 (Sun)
  61252077600, #    local_end 1942-01-01 02:00:00 (Thu)
  36000,
  0,
  'AEST',
      ],
      [
  61252041600, #    utc_start 1941-12-31 16:00:00 (Wed)
  61259554800, #      utc_end 1942-03-28 15:00:00 (Sat)
  61252081200, #  local_start 1942-01-01 03:00:00 (Thu)
  61259594400, #    local_end 1942-03-29 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61259554800, #    utc_start 1942-03-28 15:00:00 (Sat)
  61275283200, #      utc_end 1942-09-26 16:00:00 (Sat)
  61259590800, #  local_start 1942-03-29 01:00:00 (Sun)
  61275319200, #    local_end 1942-09-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  61275283200, #    utc_start 1942-09-26 16:00:00 (Sat)
  61291004400, #      utc_end 1943-03-27 15:00:00 (Sat)
  61275322800, #  local_start 1942-09-27 03:00:00 (Sun)
  61291044000, #    local_end 1943-03-28 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61291004400, #    utc_start 1943-03-27 15:00:00 (Sat)
  61307337600, #      utc_end 1943-10-02 16:00:00 (Sat)
  61291040400, #  local_start 1943-03-28 01:00:00 (Sun)
  61307373600, #    local_end 1943-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  61307337600, #    utc_start 1943-10-02 16:00:00 (Sat)
  61322454000, #      utc_end 1944-03-25 15:00:00 (Sat)
  61307377200, #  local_start 1943-10-03 03:00:00 (Sun)
  61322493600, #    local_end 1944-03-26 02:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  61322454000, #    utc_start 1944-03-25 15:00:00 (Sat)
  62167183200, #      utc_end 1970-12-31 14:00:00 (Thu)
  61322490000, #  local_start 1944-03-26 01:00:00 (Sun)
  62167219200, #    local_end 1971-01-01 00:00:00 (Fri)
  36000,
  0,
  'AEST',
      ],
      [
  62167183200, #    utc_start 1970-12-31 14:00:00 (Thu)
  62193369600, #      utc_end 1971-10-30 16:00:00 (Sat)
  62167219200, #  local_start 1971-01-01 00:00:00 (Fri)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62193369600, #    utc_start 1971-10-30 16:00:00 (Sat)
  62203651200, #      utc_end 1972-02-26 16:00:00 (Sat)
  62193409200, #  local_start 1971-10-31 03:00:00 (Sun)
  62203690800, #    local_end 1972-02-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62203651200, #    utc_start 1972-02-26 16:00:00 (Sat)
  62224819200, #      utc_end 1972-10-28 16:00:00 (Sat)
  62203687200, #  local_start 1972-02-27 02:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62224819200, #    utc_start 1972-10-28 16:00:00 (Sat)
  62235705600, #      utc_end 1973-03-03 16:00:00 (Sat)
  62224858800, #  local_start 1972-10-29 03:00:00 (Sun)
  62235745200, #    local_end 1973-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62235705600, #    utc_start 1973-03-03 16:00:00 (Sat)
  62256268800, #      utc_end 1973-10-27 16:00:00 (Sat)
  62235741600, #  local_start 1973-03-04 02:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62256268800, #    utc_start 1973-10-27 16:00:00 (Sat)
  62267155200, #      utc_end 1974-03-02 16:00:00 (Sat)
  62256308400, #  local_start 1973-10-28 03:00:00 (Sun)
  62267194800, #    local_end 1974-03-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62267155200, #    utc_start 1974-03-02 16:00:00 (Sat)
  62287718400, #      utc_end 1974-10-26 16:00:00 (Sat)
  62267191200, #  local_start 1974-03-03 02:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62287718400, #    utc_start 1974-10-26 16:00:00 (Sat)
  62298604800, #      utc_end 1975-03-01 16:00:00 (Sat)
  62287758000, #  local_start 1974-10-27 03:00:00 (Sun)
  62298644400, #    local_end 1975-03-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62298604800, #    utc_start 1975-03-01 16:00:00 (Sat)
  62319168000, #      utc_end 1975-10-25 16:00:00 (Sat)
  62298640800, #  local_start 1975-03-02 02:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62319168000, #    utc_start 1975-10-25 16:00:00 (Sat)
  62330659200, #      utc_end 1976-03-06 16:00:00 (Sat)
  62319207600, #  local_start 1975-10-26 03:00:00 (Sun)
  62330698800, #    local_end 1976-03-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62330659200, #    utc_start 1976-03-06 16:00:00 (Sat)
  62351222400, #      utc_end 1976-10-30 16:00:00 (Sat)
  62330695200, #  local_start 1976-03-07 02:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62351222400, #    utc_start 1976-10-30 16:00:00 (Sat)
  62362108800, #      utc_end 1977-03-05 16:00:00 (Sat)
  62351262000, #  local_start 1976-10-31 03:00:00 (Sun)
  62362148400, #    local_end 1977-03-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62362108800, #    utc_start 1977-03-05 16:00:00 (Sat)
  62382672000, #      utc_end 1977-10-29 16:00:00 (Sat)
  62362144800, #  local_start 1977-03-06 02:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62382672000, #    utc_start 1977-10-29 16:00:00 (Sat)
  62393558400, #      utc_end 1978-03-04 16:00:00 (Sat)
  62382711600, #  local_start 1977-10-30 03:00:00 (Sun)
  62393598000, #    local_end 1978-03-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62393558400, #    utc_start 1978-03-04 16:00:00 (Sat)
  62414121600, #      utc_end 1978-10-28 16:00:00 (Sat)
  62393594400, #  local_start 1978-03-05 02:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62414121600, #    utc_start 1978-10-28 16:00:00 (Sat)
  62425008000, #      utc_end 1979-03-03 16:00:00 (Sat)
  62414161200, #  local_start 1978-10-29 03:00:00 (Sun)
  62425047600, #    local_end 1979-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62425008000, #    utc_start 1979-03-03 16:00:00 (Sat)
  62445571200, #      utc_end 1979-10-27 16:00:00 (Sat)
  62425044000, #  local_start 1979-03-04 02:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62445571200, #    utc_start 1979-10-27 16:00:00 (Sat)
  62456457600, #      utc_end 1980-03-01 16:00:00 (Sat)
  62445610800, #  local_start 1979-10-28 03:00:00 (Sun)
  62456497200, #    local_end 1980-03-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62456457600, #    utc_start 1980-03-01 16:00:00 (Sat)
  62477020800, #      utc_end 1980-10-25 16:00:00 (Sat)
  62456493600, #  local_start 1980-03-02 02:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62477020800, #    utc_start 1980-10-25 16:00:00 (Sat)
  62487907200, #      utc_end 1981-02-28 16:00:00 (Sat)
  62477060400, #  local_start 1980-10-26 03:00:00 (Sun)
  62487946800, #    local_end 1981-03-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62487907200, #    utc_start 1981-02-28 16:00:00 (Sat)
  62508470400, #      utc_end 1981-10-24 16:00:00 (Sat)
  62487943200, #  local_start 1981-03-01 02:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62508470400, #    utc_start 1981-10-24 16:00:00 (Sat)
  62522380800, #      utc_end 1982-04-03 16:00:00 (Sat)
  62508510000, #  local_start 1981-10-25 03:00:00 (Sun)
  62522420400, #    local_end 1982-04-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62522380800, #    utc_start 1982-04-03 16:00:00 (Sat)
  62540524800, #      utc_end 1982-10-30 16:00:00 (Sat)
  62522416800, #  local_start 1982-04-04 02:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62540524800, #    utc_start 1982-10-30 16:00:00 (Sat)
  62551411200, #      utc_end 1983-03-05 16:00:00 (Sat)
  62540564400, #  local_start 1982-10-31 03:00:00 (Sun)
  62551450800, #    local_end 1983-03-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62551411200, #    utc_start 1983-03-05 16:00:00 (Sat)
  62571974400, #      utc_end 1983-10-29 16:00:00 (Sat)
  62551447200, #  local_start 1983-03-06 02:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62571974400, #    utc_start 1983-10-29 16:00:00 (Sat)
  62582860800, #      utc_end 1984-03-03 16:00:00 (Sat)
  62572014000, #  local_start 1983-10-30 03:00:00 (Sun)
  62582900400, #    local_end 1984-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62582860800, #    utc_start 1984-03-03 16:00:00 (Sat)
  62603424000, #      utc_end 1984-10-27 16:00:00 (Sat)
  62582896800, #  local_start 1984-03-04 02:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62603424000, #    utc_start 1984-10-27 16:00:00 (Sat)
  62614310400, #      utc_end 1985-03-02 16:00:00 (Sat)
  62603463600, #  local_start 1984-10-28 03:00:00 (Sun)
  62614350000, #    local_end 1985-03-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62614310400, #    utc_start 1985-03-02 16:00:00 (Sat)
  62634873600, #      utc_end 1985-10-26 16:00:00 (Sat)
  62614346400, #  local_start 1985-03-03 02:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62634873600, #    utc_start 1985-10-26 16:00:00 (Sat)
  62646969600, #      utc_end 1986-03-15 16:00:00 (Sat)
  62634913200, #  local_start 1985-10-27 03:00:00 (Sun)
  62647009200, #    local_end 1986-03-16 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62646969600, #    utc_start 1986-03-15 16:00:00 (Sat)
  62665718400, #      utc_end 1986-10-18 16:00:00 (Sat)
  62647005600, #  local_start 1986-03-16 02:00:00 (Sun)
  62665754400, #    local_end 1986-10-19 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62665718400, #    utc_start 1986-10-18 16:00:00 (Sat)
  62678419200, #      utc_end 1987-03-14 16:00:00 (Sat)
  62665758000, #  local_start 1986-10-19 03:00:00 (Sun)
  62678458800, #    local_end 1987-03-15 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62678419200, #    utc_start 1987-03-14 16:00:00 (Sat)
  62697772800, #      utc_end 1987-10-24 16:00:00 (Sat)
  62678455200, #  local_start 1987-03-15 02:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62697772800, #    utc_start 1987-10-24 16:00:00 (Sat)
  62710473600, #      utc_end 1988-03-19 16:00:00 (Sat)
  62697812400, #  local_start 1987-10-25 03:00:00 (Sun)
  62710513200, #    local_end 1988-03-20 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62710473600, #    utc_start 1988-03-19 16:00:00 (Sat)
  62729827200, #      utc_end 1988-10-29 16:00:00 (Sat)
  62710509600, #  local_start 1988-03-20 02:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62729827200, #    utc_start 1988-10-29 16:00:00 (Sat)
  62741923200, #      utc_end 1989-03-18 16:00:00 (Sat)
  62729866800, #  local_start 1988-10-30 03:00:00 (Sun)
  62741962800, #    local_end 1989-03-19 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62741923200, #    utc_start 1989-03-18 16:00:00 (Sat)
  62761276800, #      utc_end 1989-10-28 16:00:00 (Sat)
  62741959200, #  local_start 1989-03-19 02:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62761276800, #    utc_start 1989-10-28 16:00:00 (Sat)
  62772163200, #      utc_end 1990-03-03 16:00:00 (Sat)
  62761316400, #  local_start 1989-10-29 03:00:00 (Sun)
  62772202800, #    local_end 1990-03-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62772163200, #    utc_start 1990-03-03 16:00:00 (Sat)
  62792726400, #      utc_end 1990-10-27 16:00:00 (Sat)
  62772199200, #  local_start 1990-03-04 02:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62792726400, #    utc_start 1990-10-27 16:00:00 (Sat)
  62803612800, #      utc_end 1991-03-02 16:00:00 (Sat)
  62792766000, #  local_start 1990-10-28 03:00:00 (Sun)
  62803652400, #    local_end 1991-03-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62803612800, #    utc_start 1991-03-02 16:00:00 (Sat)
  62824176000, #      utc_end 1991-10-26 16:00:00 (Sat)
  62803648800, #  local_start 1991-03-03 02:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62824176000, #    utc_start 1991-10-26 16:00:00 (Sat)
  62835062400, #      utc_end 1992-02-29 16:00:00 (Sat)
  62824215600, #  local_start 1991-10-27 03:00:00 (Sun)
  62835102000, #    local_end 1992-03-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62835062400, #    utc_start 1992-02-29 16:00:00 (Sat)
  62855625600, #      utc_end 1992-10-24 16:00:00 (Sat)
  62835098400, #  local_start 1992-03-01 02:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62855625600, #    utc_start 1992-10-24 16:00:00 (Sat)
  62867116800, #      utc_end 1993-03-06 16:00:00 (Sat)
  62855665200, #  local_start 1992-10-25 03:00:00 (Sun)
  62867156400, #    local_end 1993-03-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62867116800, #    utc_start 1993-03-06 16:00:00 (Sat)
  62887680000, #      utc_end 1993-10-30 16:00:00 (Sat)
  62867152800, #  local_start 1993-03-07 02:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62887680000, #    utc_start 1993-10-30 16:00:00 (Sat)
  62898566400, #      utc_end 1994-03-05 16:00:00 (Sat)
  62887719600, #  local_start 1993-10-31 03:00:00 (Sun)
  62898606000, #    local_end 1994-03-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62898566400, #    utc_start 1994-03-05 16:00:00 (Sat)
  62919129600, #      utc_end 1994-10-29 16:00:00 (Sat)
  62898602400, #  local_start 1994-03-06 02:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62919129600, #    utc_start 1994-10-29 16:00:00 (Sat)
  62930016000, #      utc_end 1995-03-04 16:00:00 (Sat)
  62919169200, #  local_start 1994-10-30 03:00:00 (Sun)
  62930055600, #    local_end 1995-03-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62930016000, #    utc_start 1995-03-04 16:00:00 (Sat)
  62950579200, #      utc_end 1995-10-28 16:00:00 (Sat)
  62930052000, #  local_start 1995-03-05 02:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62950579200, #    utc_start 1995-10-28 16:00:00 (Sat)
  62963884800, #      utc_end 1996-03-30 16:00:00 (Sat)
  62950618800, #  local_start 1995-10-29 03:00:00 (Sun)
  62963924400, #    local_end 1996-03-31 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62963884800, #    utc_start 1996-03-30 16:00:00 (Sat)
  62982028800, #      utc_end 1996-10-26 16:00:00 (Sat)
  62963920800, #  local_start 1996-03-31 02:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  62982028800, #    utc_start 1996-10-26 16:00:00 (Sat)
  62995334400, #      utc_end 1997-03-29 16:00:00 (Sat)
  62982068400, #  local_start 1996-10-27 03:00:00 (Sun)
  62995374000, #    local_end 1997-03-30 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  62995334400, #    utc_start 1997-03-29 16:00:00 (Sat)
  63013478400, #      utc_end 1997-10-25 16:00:00 (Sat)
  62995370400, #  local_start 1997-03-30 02:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63013478400, #    utc_start 1997-10-25 16:00:00 (Sat)
  63026784000, #      utc_end 1998-03-28 16:00:00 (Sat)
  63013518000, #  local_start 1997-10-26 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63026784000, #    utc_start 1998-03-28 16:00:00 (Sat)
  63044928000, #      utc_end 1998-10-24 16:00:00 (Sat)
  63026820000, #  local_start 1998-03-29 02:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63044928000, #    utc_start 1998-10-24 16:00:00 (Sat)
  63058233600, #      utc_end 1999-03-27 16:00:00 (Sat)
  63044967600, #  local_start 1998-10-25 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63058233600, #    utc_start 1999-03-27 16:00:00 (Sat)
  63076982400, #      utc_end 1999-10-30 16:00:00 (Sat)
  63058269600, #  local_start 1999-03-28 02:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63076982400, #    utc_start 1999-10-30 16:00:00 (Sat)
  63089683200, #      utc_end 2000-03-25 16:00:00 (Sat)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63089683200, #    utc_start 2000-03-25 16:00:00 (Sat)
  63102988800, #      utc_end 2000-08-26 16:00:00 (Sat)
  63089719200, #  local_start 2000-03-26 02:00:00 (Sun)
  63103024800, #    local_end 2000-08-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63102988800, #    utc_start 2000-08-26 16:00:00 (Sat)
  63121132800, #      utc_end 2001-03-24 16:00:00 (Sat)
  63103028400, #  local_start 2000-08-27 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63121132800, #    utc_start 2001-03-24 16:00:00 (Sat)
  63139881600, #      utc_end 2001-10-27 16:00:00 (Sat)
  63121168800, #  local_start 2001-03-25 02:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63139881600, #    utc_start 2001-10-27 16:00:00 (Sat)
  63153187200, #      utc_end 2002-03-30 16:00:00 (Sat)
  63139921200, #  local_start 2001-10-28 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63153187200, #    utc_start 2002-03-30 16:00:00 (Sat)
  63171331200, #      utc_end 2002-10-26 16:00:00 (Sat)
  63153223200, #  local_start 2002-03-31 02:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63171331200, #    utc_start 2002-10-26 16:00:00 (Sat)
  63184636800, #      utc_end 2003-03-29 16:00:00 (Sat)
  63171370800, #  local_start 2002-10-27 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63184636800, #    utc_start 2003-03-29 16:00:00 (Sat)
  63202780800, #      utc_end 2003-10-25 16:00:00 (Sat)
  63184672800, #  local_start 2003-03-30 02:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63202780800, #    utc_start 2003-10-25 16:00:00 (Sat)
  63216086400, #      utc_end 2004-03-27 16:00:00 (Sat)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63216086400, #    utc_start 2004-03-27 16:00:00 (Sat)
  63234835200, #      utc_end 2004-10-30 16:00:00 (Sat)
  63216122400, #  local_start 2004-03-28 02:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63234835200, #    utc_start 2004-10-30 16:00:00 (Sat)
  63247536000, #      utc_end 2005-03-26 16:00:00 (Sat)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63247536000, #    utc_start 2005-03-26 16:00:00 (Sat)
  63266284800, #      utc_end 2005-10-29 16:00:00 (Sat)
  63247572000, #  local_start 2005-03-27 02:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63266284800, #    utc_start 2005-10-29 16:00:00 (Sat)
  63279590400, #      utc_end 2006-04-01 16:00:00 (Sat)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279630000, #    local_end 2006-04-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63279590400, #    utc_start 2006-04-01 16:00:00 (Sat)
  63297734400, #      utc_end 2006-10-28 16:00:00 (Sat)
  63279626400, #  local_start 2006-04-02 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63297734400, #    utc_start 2006-10-28 16:00:00 (Sat)
  63310435200, #      utc_end 2007-03-24 16:00:00 (Sat)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63310435200, #    utc_start 2007-03-24 16:00:00 (Sat)
  63329184000, #      utc_end 2007-10-27 16:00:00 (Sat)
  63310471200, #  local_start 2007-03-25 02:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63329184000, #    utc_start 2007-10-27 16:00:00 (Sat)
  63343094400, #      utc_end 2008-04-05 16:00:00 (Sat)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63343134000, #    local_end 2008-04-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63343094400, #    utc_start 2008-04-05 16:00:00 (Sat)
  63358819200, #      utc_end 2008-10-04 16:00:00 (Sat)
  63343130400, #  local_start 2008-04-06 02:00:00 (Sun)
  63358855200, #    local_end 2008-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63358819200, #    utc_start 2008-10-04 16:00:00 (Sat)
  63374544000, #      utc_end 2009-04-04 16:00:00 (Sat)
  63358858800, #  local_start 2008-10-05 03:00:00 (Sun)
  63374583600, #    local_end 2009-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63374544000, #    utc_start 2009-04-04 16:00:00 (Sat)
  63390268800, #      utc_end 2009-10-03 16:00:00 (Sat)
  63374580000, #  local_start 2009-04-05 02:00:00 (Sun)
  63390304800, #    local_end 2009-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63390268800, #    utc_start 2009-10-03 16:00:00 (Sat)
  63405993600, #      utc_end 2010-04-03 16:00:00 (Sat)
  63390308400, #  local_start 2009-10-04 03:00:00 (Sun)
  63406033200, #    local_end 2010-04-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63405993600, #    utc_start 2010-04-03 16:00:00 (Sat)
  63421718400, #      utc_end 2010-10-02 16:00:00 (Sat)
  63406029600, #  local_start 2010-04-04 02:00:00 (Sun)
  63421754400, #    local_end 2010-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63421718400, #    utc_start 2010-10-02 16:00:00 (Sat)
  63437443200, #      utc_end 2011-04-02 16:00:00 (Sat)
  63421758000, #  local_start 2010-10-03 03:00:00 (Sun)
  63437482800, #    local_end 2011-04-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63437443200, #    utc_start 2011-04-02 16:00:00 (Sat)
  63453168000, #      utc_end 2011-10-01 16:00:00 (Sat)
  63437479200, #  local_start 2011-04-03 02:00:00 (Sun)
  63453204000, #    local_end 2011-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63453168000, #    utc_start 2011-10-01 16:00:00 (Sat)
  63468892800, #      utc_end 2012-03-31 16:00:00 (Sat)
  63453207600, #  local_start 2011-10-02 03:00:00 (Sun)
  63468932400, #    local_end 2012-04-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63468892800, #    utc_start 2012-03-31 16:00:00 (Sat)
  63485222400, #      utc_end 2012-10-06 16:00:00 (Sat)
  63468928800, #  local_start 2012-04-01 02:00:00 (Sun)
  63485258400, #    local_end 2012-10-07 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63485222400, #    utc_start 2012-10-06 16:00:00 (Sat)
  63500947200, #      utc_end 2013-04-06 16:00:00 (Sat)
  63485262000, #  local_start 2012-10-07 03:00:00 (Sun)
  63500986800, #    local_end 2013-04-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63500947200, #    utc_start 2013-04-06 16:00:00 (Sat)
  63516672000, #      utc_end 2013-10-05 16:00:00 (Sat)
  63500983200, #  local_start 2013-04-07 02:00:00 (Sun)
  63516708000, #    local_end 2013-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63516672000, #    utc_start 2013-10-05 16:00:00 (Sat)
  63532396800, #      utc_end 2014-04-05 16:00:00 (Sat)
  63516711600, #  local_start 2013-10-06 03:00:00 (Sun)
  63532436400, #    local_end 2014-04-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63532396800, #    utc_start 2014-04-05 16:00:00 (Sat)
  63548121600, #      utc_end 2014-10-04 16:00:00 (Sat)
  63532432800, #  local_start 2014-04-06 02:00:00 (Sun)
  63548157600, #    local_end 2014-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63548121600, #    utc_start 2014-10-04 16:00:00 (Sat)
  63563846400, #      utc_end 2015-04-04 16:00:00 (Sat)
  63548161200, #  local_start 2014-10-05 03:00:00 (Sun)
  63563886000, #    local_end 2015-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63563846400, #    utc_start 2015-04-04 16:00:00 (Sat)
  63579571200, #      utc_end 2015-10-03 16:00:00 (Sat)
  63563882400, #  local_start 2015-04-05 02:00:00 (Sun)
  63579607200, #    local_end 2015-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63579571200, #    utc_start 2015-10-03 16:00:00 (Sat)
  63595296000, #      utc_end 2016-04-02 16:00:00 (Sat)
  63579610800, #  local_start 2015-10-04 03:00:00 (Sun)
  63595335600, #    local_end 2016-04-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63595296000, #    utc_start 2016-04-02 16:00:00 (Sat)
  63611020800, #      utc_end 2016-10-01 16:00:00 (Sat)
  63595332000, #  local_start 2016-04-03 02:00:00 (Sun)
  63611056800, #    local_end 2016-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63611020800, #    utc_start 2016-10-01 16:00:00 (Sat)
  63626745600, #      utc_end 2017-04-01 16:00:00 (Sat)
  63611060400, #  local_start 2016-10-02 03:00:00 (Sun)
  63626785200, #    local_end 2017-04-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63626745600, #    utc_start 2017-04-01 16:00:00 (Sat)
  63642470400, #      utc_end 2017-09-30 16:00:00 (Sat)
  63626781600, #  local_start 2017-04-02 02:00:00 (Sun)
  63642506400, #    local_end 2017-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63642470400, #    utc_start 2017-09-30 16:00:00 (Sat)
  63658195200, #      utc_end 2018-03-31 16:00:00 (Sat)
  63642510000, #  local_start 2017-10-01 03:00:00 (Sun)
  63658234800, #    local_end 2018-04-01 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63658195200, #    utc_start 2018-03-31 16:00:00 (Sat)
  63674524800, #      utc_end 2018-10-06 16:00:00 (Sat)
  63658231200, #  local_start 2018-04-01 02:00:00 (Sun)
  63674560800, #    local_end 2018-10-07 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63674524800, #    utc_start 2018-10-06 16:00:00 (Sat)
  63690249600, #      utc_end 2019-04-06 16:00:00 (Sat)
  63674564400, #  local_start 2018-10-07 03:00:00 (Sun)
  63690289200, #    local_end 2019-04-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63690249600, #    utc_start 2019-04-06 16:00:00 (Sat)
  63705974400, #      utc_end 2019-10-05 16:00:00 (Sat)
  63690285600, #  local_start 2019-04-07 02:00:00 (Sun)
  63706010400, #    local_end 2019-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63705974400, #    utc_start 2019-10-05 16:00:00 (Sat)
  63721699200, #      utc_end 2020-04-04 16:00:00 (Sat)
  63706014000, #  local_start 2019-10-06 03:00:00 (Sun)
  63721738800, #    local_end 2020-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63721699200, #    utc_start 2020-04-04 16:00:00 (Sat)
  63737424000, #      utc_end 2020-10-03 16:00:00 (Sat)
  63721735200, #  local_start 2020-04-05 02:00:00 (Sun)
  63737460000, #    local_end 2020-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63737424000, #    utc_start 2020-10-03 16:00:00 (Sat)
  63753148800, #      utc_end 2021-04-03 16:00:00 (Sat)
  63737463600, #  local_start 2020-10-04 03:00:00 (Sun)
  63753188400, #    local_end 2021-04-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63753148800, #    utc_start 2021-04-03 16:00:00 (Sat)
  63768873600, #      utc_end 2021-10-02 16:00:00 (Sat)
  63753184800, #  local_start 2021-04-04 02:00:00 (Sun)
  63768909600, #    local_end 2021-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63768873600, #    utc_start 2021-10-02 16:00:00 (Sat)
  63784598400, #      utc_end 2022-04-02 16:00:00 (Sat)
  63768913200, #  local_start 2021-10-03 03:00:00 (Sun)
  63784638000, #    local_end 2022-04-03 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63784598400, #    utc_start 2022-04-02 16:00:00 (Sat)
  63800323200, #      utc_end 2022-10-01 16:00:00 (Sat)
  63784634400, #  local_start 2022-04-03 02:00:00 (Sun)
  63800359200, #    local_end 2022-10-02 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63800323200, #    utc_start 2022-10-01 16:00:00 (Sat)
  63816048000, #      utc_end 2023-04-01 16:00:00 (Sat)
  63800362800, #  local_start 2022-10-02 03:00:00 (Sun)
  63816087600, #    local_end 2023-04-02 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63816048000, #    utc_start 2023-04-01 16:00:00 (Sat)
  63831772800, #      utc_end 2023-09-30 16:00:00 (Sat)
  63816084000, #  local_start 2023-04-02 02:00:00 (Sun)
  63831808800, #    local_end 2023-10-01 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63831772800, #    utc_start 2023-09-30 16:00:00 (Sat)
  63848102400, #      utc_end 2024-04-06 16:00:00 (Sat)
  63831812400, #  local_start 2023-10-01 03:00:00 (Sun)
  63848142000, #    local_end 2024-04-07 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63848102400, #    utc_start 2024-04-06 16:00:00 (Sat)
  63863827200, #      utc_end 2024-10-05 16:00:00 (Sat)
  63848138400, #  local_start 2024-04-07 02:00:00 (Sun)
  63863863200, #    local_end 2024-10-06 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63863827200, #    utc_start 2024-10-05 16:00:00 (Sat)
  63879552000, #      utc_end 2025-04-05 16:00:00 (Sat)
  63863866800, #  local_start 2024-10-06 03:00:00 (Sun)
  63879591600, #    local_end 2025-04-06 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63879552000, #    utc_start 2025-04-05 16:00:00 (Sat)
  63895276800, #      utc_end 2025-10-04 16:00:00 (Sat)
  63879588000, #  local_start 2025-04-06 02:00:00 (Sun)
  63895312800, #    local_end 2025-10-05 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63895276800, #    utc_start 2025-10-04 16:00:00 (Sat)
  63911001600, #      utc_end 2026-04-04 16:00:00 (Sat)
  63895316400, #  local_start 2025-10-05 03:00:00 (Sun)
  63911041200, #    local_end 2026-04-05 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63911001600, #    utc_start 2026-04-04 16:00:00 (Sat)
  63926726400, #      utc_end 2026-10-03 16:00:00 (Sat)
  63911037600, #  local_start 2026-04-05 02:00:00 (Sun)
  63926762400, #    local_end 2026-10-04 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
      [
  63926726400, #    utc_start 2026-10-03 16:00:00 (Sat)
  63942451200, #      utc_end 2027-04-03 16:00:00 (Sat)
  63926766000, #  local_start 2026-10-04 03:00:00 (Sun)
  63942490800, #    local_end 2027-04-04 03:00:00 (Sun)
  39600,
  1,
  'AEDT',
      ],
      [
  63942451200, #    utc_start 2027-04-03 16:00:00 (Sat)
  63958176000, #      utc_end 2027-10-02 16:00:00 (Sat)
  63942487200, #  local_start 2027-04-04 02:00:00 (Sun)
  63958212000, #    local_end 2027-10-03 02:00:00 (Sun)
  36000,
  0,
  'AEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {61}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 36000 }
  
  my $last_observance = bless( {
    'format' => 'AE%sT',
    'gmtoff' => '10:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 719528,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 719528,
      'utc_rd_secs' => 0,
      'utc_year' => 1972
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 36000,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 719527,
      'local_rd_secs' => 50400,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 719527,
      'utc_rd_secs' => 50400,
      'utc_year' => 1971
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00s',
      'from' => '2008',
      'in' => 'Apr',
      'letter' => 'S',
      'name' => 'AN',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00s',
      'from' => '2008',
      'in' => 'Oct',
      'letter' => 'D',
      'name' => 'AN',
      'offset_from_std' => 3600,
      'on' => 'Sun>=1',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_AUSTRALIA_SYDNEY

    $main::fatpacked{"DateTime/TimeZone/CET.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_CET';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::CET;
  $DateTime::TimeZone::CET::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::CET::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60441976800, #      utc_end 1916-04-30 22:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60441980400, #    local_end 1916-04-30 23:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60441976800, #    utc_start 1916-04-30 22:00:00 (Sun)
  60455199600, #      utc_end 1916-09-30 23:00:00 (Sat)
  60441984000, #  local_start 1916-05-01 00:00:00 (Mon)
  60455206800, #    local_end 1916-10-01 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60455199600, #    utc_start 1916-09-30 23:00:00 (Sat)
  60472227600, #      utc_end 1917-04-16 01:00:00 (Mon)
  60455203200, #  local_start 1916-10-01 00:00:00 (Sun)
  60472231200, #    local_end 1917-04-16 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60472227600, #    utc_start 1917-04-16 01:00:00 (Mon)
  60485533200, #      utc_end 1917-09-17 01:00:00 (Mon)
  60472234800, #  local_start 1917-04-16 03:00:00 (Mon)
  60485540400, #    local_end 1917-09-17 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60485533200, #    utc_start 1917-09-17 01:00:00 (Mon)
  60503677200, #      utc_end 1918-04-15 01:00:00 (Mon)
  60485536800, #  local_start 1917-09-17 02:00:00 (Mon)
  60503680800, #    local_end 1918-04-15 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60503677200, #    utc_start 1918-04-15 01:00:00 (Mon)
  60516982800, #      utc_end 1918-09-16 01:00:00 (Mon)
  60503684400, #  local_start 1918-04-15 03:00:00 (Mon)
  60516990000, #    local_end 1918-09-16 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60516982800, #    utc_start 1918-09-16 01:00:00 (Mon)
  61196778000, #      utc_end 1940-04-01 01:00:00 (Mon)
  60516986400, #  local_start 1918-09-16 02:00:00 (Mon)
  61196781600, #    local_end 1940-04-01 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61196778000, #    utc_start 1940-04-01 01:00:00 (Mon)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61196785200, #  local_start 1940-04-01 03:00:00 (Mon)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61338906000, #      utc_end 1944-10-02 01:00:00 (Mon)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61338913200, #    local_end 1944-10-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61338906000, #    utc_start 1944-10-02 01:00:00 (Mon)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61338909600, #  local_start 1944-10-02 02:00:00 (Mon)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61369059600, #      utc_end 1945-09-16 01:00:00 (Sun)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61369066800, #    local_end 1945-09-16 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61369059600, #    utc_start 1945-09-16 01:00:00 (Sun)
  62364560400, #      utc_end 1977-04-03 01:00:00 (Sun)
  61369063200, #  local_start 1945-09-16 02:00:00 (Sun)
  62364564000, #    local_end 1977-04-03 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62364560400, #    utc_start 1977-04-03 01:00:00 (Sun)
  62379680400, #      utc_end 1977-09-25 01:00:00 (Sun)
  62364567600, #  local_start 1977-04-03 03:00:00 (Sun)
  62379687600, #    local_end 1977-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62379680400, #    utc_start 1977-09-25 01:00:00 (Sun)
  62396010000, #      utc_end 1978-04-02 01:00:00 (Sun)
  62379684000, #  local_start 1977-09-25 02:00:00 (Sun)
  62396013600, #    local_end 1978-04-02 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62396010000, #    utc_start 1978-04-02 01:00:00 (Sun)
  62411734800, #      utc_end 1978-10-01 01:00:00 (Sun)
  62396017200, #  local_start 1978-04-02 03:00:00 (Sun)
  62411742000, #    local_end 1978-10-01 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62411734800, #    utc_start 1978-10-01 01:00:00 (Sun)
  62427459600, #      utc_end 1979-04-01 01:00:00 (Sun)
  62411738400, #  local_start 1978-10-01 02:00:00 (Sun)
  62427463200, #    local_end 1979-04-01 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62427459600, #    utc_start 1979-04-01 01:00:00 (Sun)
  62443184400, #      utc_end 1979-09-30 01:00:00 (Sun)
  62427466800, #  local_start 1979-04-01 03:00:00 (Sun)
  62443191600, #    local_end 1979-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62443184400, #    utc_start 1979-09-30 01:00:00 (Sun)
  62459514000, #      utc_end 1980-04-06 01:00:00 (Sun)
  62443188000, #  local_start 1979-09-30 02:00:00 (Sun)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62459514000, #    utc_start 1980-04-06 01:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474641200, #    local_end 1980-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474637600, #  local_start 1980-09-28 02:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {58}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => {},
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => {}
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00s',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'C-Eur',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00s',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'C-Eur',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_CET

    $main::fatpacked{"DateTime/TimeZone/CST6CDT.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_CST6CDT';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::CST6CDT;
  $DateTime::TimeZone::CST6CDT::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::CST6CDT::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60502406400, #      utc_end 1918-03-31 08:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60502406400, #    utc_start 1918-03-31 08:00:00 (Sun)
  60520546800, #      utc_end 1918-10-27 07:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60520546800, #    utc_start 1918-10-27 07:00:00 (Sun)
  60533856000, #      utc_end 1919-03-30 08:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  60533856000, #    utc_start 1919-03-30 08:00:00 (Sun)
  60551996400, #      utc_end 1919-10-26 07:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  60551996400, #    utc_start 1919-10-26 07:00:00 (Sun)
  61255468800, #      utc_end 1942-02-09 08:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -21600,
  0,
  'CST',
      ],
      [
  61255468800, #    utc_start 1942-02-09 08:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366269600, #    local_end 1945-08-14 18:00:00 (Tue)
  -18000,
  1,
  'CWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370290800, #      utc_end 1945-09-30 07:00:00 (Sun)
  61366269600, #  local_start 1945-08-14 18:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -18000,
  1,
  'CPT',
      ],
      [
  61370290800, #    utc_start 1945-09-30 07:00:00 (Sun)
  62051299200, #      utc_end 1967-04-30 08:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62051299200, #    utc_start 1967-04-30 08:00:00 (Sun)
  62067020400, #      utc_end 1967-10-29 07:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62067020400, #    utc_start 1967-10-29 07:00:00 (Sun)
  62082748800, #      utc_end 1968-04-28 08:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62082748800, #    utc_start 1968-04-28 08:00:00 (Sun)
  62098470000, #      utc_end 1968-10-27 07:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62098470000, #    utc_start 1968-10-27 07:00:00 (Sun)
  62114198400, #      utc_end 1969-04-27 08:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62114198400, #    utc_start 1969-04-27 08:00:00 (Sun)
  62129919600, #      utc_end 1969-10-26 07:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62129919600, #    utc_start 1969-10-26 07:00:00 (Sun)
  62145648000, #      utc_end 1970-04-26 08:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62145648000, #    utc_start 1970-04-26 08:00:00 (Sun)
  62161369200, #      utc_end 1970-10-25 07:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62161369200, #    utc_start 1970-10-25 07:00:00 (Sun)
  62177097600, #      utc_end 1971-04-25 08:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62177097600, #    utc_start 1971-04-25 08:00:00 (Sun)
  62193423600, #      utc_end 1971-10-31 07:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62193423600, #    utc_start 1971-10-31 07:00:00 (Sun)
  62209152000, #      utc_end 1972-04-30 08:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62209152000, #    utc_start 1972-04-30 08:00:00 (Sun)
  62224873200, #      utc_end 1972-10-29 07:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62224873200, #    utc_start 1972-10-29 07:00:00 (Sun)
  62240601600, #      utc_end 1973-04-29 08:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62240601600, #    utc_start 1973-04-29 08:00:00 (Sun)
  62256322800, #      utc_end 1973-10-28 07:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62256322800, #    utc_start 1973-10-28 07:00:00 (Sun)
  62262374400, #      utc_end 1974-01-06 08:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62262374400, #    utc_start 1974-01-06 08:00:00 (Sun)
  62287772400, #      utc_end 1974-10-27 07:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62287772400, #    utc_start 1974-10-27 07:00:00 (Sun)
  62298057600, #      utc_end 1975-02-23 08:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62298057600, #    utc_start 1975-02-23 08:00:00 (Sun)
  62319222000, #      utc_end 1975-10-26 07:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62319222000, #    utc_start 1975-10-26 07:00:00 (Sun)
  62334950400, #      utc_end 1976-04-25 08:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62334950400, #    utc_start 1976-04-25 08:00:00 (Sun)
  62351276400, #      utc_end 1976-10-31 07:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62351276400, #    utc_start 1976-10-31 07:00:00 (Sun)
  62366400000, #      utc_end 1977-04-24 08:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62366400000, #    utc_start 1977-04-24 08:00:00 (Sun)
  62382726000, #      utc_end 1977-10-30 07:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62382726000, #    utc_start 1977-10-30 07:00:00 (Sun)
  62398454400, #      utc_end 1978-04-30 08:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62398454400, #    utc_start 1978-04-30 08:00:00 (Sun)
  62414175600, #      utc_end 1978-10-29 07:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62414175600, #    utc_start 1978-10-29 07:00:00 (Sun)
  62429904000, #      utc_end 1979-04-29 08:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62429904000, #    utc_start 1979-04-29 08:00:00 (Sun)
  62445625200, #      utc_end 1979-10-28 07:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62445625200, #    utc_start 1979-10-28 07:00:00 (Sun)
  62461353600, #      utc_end 1980-04-27 08:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62461353600, #    utc_start 1980-04-27 08:00:00 (Sun)
  62477074800, #      utc_end 1980-10-26 07:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62477074800, #    utc_start 1980-10-26 07:00:00 (Sun)
  62492803200, #      utc_end 1981-04-26 08:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62492803200, #    utc_start 1981-04-26 08:00:00 (Sun)
  62508524400, #      utc_end 1981-10-25 07:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62508524400, #    utc_start 1981-10-25 07:00:00 (Sun)
  62524252800, #      utc_end 1982-04-25 08:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62524252800, #    utc_start 1982-04-25 08:00:00 (Sun)
  62540578800, #      utc_end 1982-10-31 07:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62540578800, #    utc_start 1982-10-31 07:00:00 (Sun)
  62555702400, #      utc_end 1983-04-24 08:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62555702400, #    utc_start 1983-04-24 08:00:00 (Sun)
  62572028400, #      utc_end 1983-10-30 07:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62572028400, #    utc_start 1983-10-30 07:00:00 (Sun)
  62587756800, #      utc_end 1984-04-29 08:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62587756800, #    utc_start 1984-04-29 08:00:00 (Sun)
  62603478000, #      utc_end 1984-10-28 07:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62603478000, #    utc_start 1984-10-28 07:00:00 (Sun)
  62619206400, #      utc_end 1985-04-28 08:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62619206400, #    utc_start 1985-04-28 08:00:00 (Sun)
  62634927600, #      utc_end 1985-10-27 07:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62634927600, #    utc_start 1985-10-27 07:00:00 (Sun)
  62650656000, #      utc_end 1986-04-27 08:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62650656000, #    utc_start 1986-04-27 08:00:00 (Sun)
  62666377200, #      utc_end 1986-10-26 07:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62666377200, #    utc_start 1986-10-26 07:00:00 (Sun)
  62680291200, #      utc_end 1987-04-05 08:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62680291200, #    utc_start 1987-04-05 08:00:00 (Sun)
  62697826800, #      utc_end 1987-10-25 07:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62697826800, #    utc_start 1987-10-25 07:00:00 (Sun)
  62711740800, #      utc_end 1988-04-03 08:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62711740800, #    utc_start 1988-04-03 08:00:00 (Sun)
  62729881200, #      utc_end 1988-10-30 07:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62729881200, #    utc_start 1988-10-30 07:00:00 (Sun)
  62743190400, #      utc_end 1989-04-02 08:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62743190400, #    utc_start 1989-04-02 08:00:00 (Sun)
  62761330800, #      utc_end 1989-10-29 07:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62761330800, #    utc_start 1989-10-29 07:00:00 (Sun)
  62774640000, #      utc_end 1990-04-01 08:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62774640000, #    utc_start 1990-04-01 08:00:00 (Sun)
  62792780400, #      utc_end 1990-10-28 07:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62792780400, #    utc_start 1990-10-28 07:00:00 (Sun)
  62806694400, #      utc_end 1991-04-07 08:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62806694400, #    utc_start 1991-04-07 08:00:00 (Sun)
  62824230000, #      utc_end 1991-10-27 07:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62824230000, #    utc_start 1991-10-27 07:00:00 (Sun)
  62838144000, #      utc_end 1992-04-05 08:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62838144000, #    utc_start 1992-04-05 08:00:00 (Sun)
  62855679600, #      utc_end 1992-10-25 07:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62855679600, #    utc_start 1992-10-25 07:00:00 (Sun)
  62869593600, #      utc_end 1993-04-04 08:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62869593600, #    utc_start 1993-04-04 08:00:00 (Sun)
  62887734000, #      utc_end 1993-10-31 07:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62887734000, #    utc_start 1993-10-31 07:00:00 (Sun)
  62901043200, #      utc_end 1994-04-03 08:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62901043200, #    utc_start 1994-04-03 08:00:00 (Sun)
  62919183600, #      utc_end 1994-10-30 07:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62919183600, #    utc_start 1994-10-30 07:00:00 (Sun)
  62932492800, #      utc_end 1995-04-02 08:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62932492800, #    utc_start 1995-04-02 08:00:00 (Sun)
  62950633200, #      utc_end 1995-10-29 07:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62950633200, #    utc_start 1995-10-29 07:00:00 (Sun)
  62964547200, #      utc_end 1996-04-07 08:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62964547200, #    utc_start 1996-04-07 08:00:00 (Sun)
  62982082800, #      utc_end 1996-10-27 07:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  62982082800, #    utc_start 1996-10-27 07:00:00 (Sun)
  62995996800, #      utc_end 1997-04-06 08:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  62995996800, #    utc_start 1997-04-06 08:00:00 (Sun)
  63013532400, #      utc_end 1997-10-26 07:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63013532400, #    utc_start 1997-10-26 07:00:00 (Sun)
  63027446400, #      utc_end 1998-04-05 08:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63027446400, #    utc_start 1998-04-05 08:00:00 (Sun)
  63044982000, #      utc_end 1998-10-25 07:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63044982000, #    utc_start 1998-10-25 07:00:00 (Sun)
  63058896000, #      utc_end 1999-04-04 08:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63058896000, #    utc_start 1999-04-04 08:00:00 (Sun)
  63077036400, #      utc_end 1999-10-31 07:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63077036400, #    utc_start 1999-10-31 07:00:00 (Sun)
  63090345600, #      utc_end 2000-04-02 08:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63090345600, #    utc_start 2000-04-02 08:00:00 (Sun)
  63108486000, #      utc_end 2000-10-29 07:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63108486000, #    utc_start 2000-10-29 07:00:00 (Sun)
  63121795200, #      utc_end 2001-04-01 08:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63121795200, #    utc_start 2001-04-01 08:00:00 (Sun)
  63139935600, #      utc_end 2001-10-28 07:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63139935600, #    utc_start 2001-10-28 07:00:00 (Sun)
  63153849600, #      utc_end 2002-04-07 08:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63153849600, #    utc_start 2002-04-07 08:00:00 (Sun)
  63171385200, #      utc_end 2002-10-27 07:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63171385200, #    utc_start 2002-10-27 07:00:00 (Sun)
  63185299200, #      utc_end 2003-04-06 08:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63185299200, #    utc_start 2003-04-06 08:00:00 (Sun)
  63202834800, #      utc_end 2003-10-26 07:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63202834800, #    utc_start 2003-10-26 07:00:00 (Sun)
  63216748800, #      utc_end 2004-04-04 08:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63216748800, #    utc_start 2004-04-04 08:00:00 (Sun)
  63234889200, #      utc_end 2004-10-31 07:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63234889200, #    utc_start 2004-10-31 07:00:00 (Sun)
  63248198400, #      utc_end 2005-04-03 08:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63248198400, #    utc_start 2005-04-03 08:00:00 (Sun)
  63266338800, #      utc_end 2005-10-30 07:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63266338800, #    utc_start 2005-10-30 07:00:00 (Sun)
  63279648000, #      utc_end 2006-04-02 08:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63279648000, #    utc_start 2006-04-02 08:00:00 (Sun)
  63297788400, #      utc_end 2006-10-29 07:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63297788400, #    utc_start 2006-10-29 07:00:00 (Sun)
  63309283200, #      utc_end 2007-03-11 08:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63309283200, #    utc_start 2007-03-11 08:00:00 (Sun)
  63329842800, #      utc_end 2007-11-04 07:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63329842800, #    utc_start 2007-11-04 07:00:00 (Sun)
  63340732800, #      utc_end 2008-03-09 08:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63340732800, #    utc_start 2008-03-09 08:00:00 (Sun)
  63361292400, #      utc_end 2008-11-02 07:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63361292400, #    utc_start 2008-11-02 07:00:00 (Sun)
  63372182400, #      utc_end 2009-03-08 08:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63372182400, #    utc_start 2009-03-08 08:00:00 (Sun)
  63392742000, #      utc_end 2009-11-01 07:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63392742000, #    utc_start 2009-11-01 07:00:00 (Sun)
  63404236800, #      utc_end 2010-03-14 08:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63404236800, #    utc_start 2010-03-14 08:00:00 (Sun)
  63424796400, #      utc_end 2010-11-07 07:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63424796400, #    utc_start 2010-11-07 07:00:00 (Sun)
  63435686400, #      utc_end 2011-03-13 08:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63435686400, #    utc_start 2011-03-13 08:00:00 (Sun)
  63456246000, #      utc_end 2011-11-06 07:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63456246000, #    utc_start 2011-11-06 07:00:00 (Sun)
  63467136000, #      utc_end 2012-03-11 08:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63467136000, #    utc_start 2012-03-11 08:00:00 (Sun)
  63487695600, #      utc_end 2012-11-04 07:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63487695600, #    utc_start 2012-11-04 07:00:00 (Sun)
  63498585600, #      utc_end 2013-03-10 08:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63498585600, #    utc_start 2013-03-10 08:00:00 (Sun)
  63519145200, #      utc_end 2013-11-03 07:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63519145200, #    utc_start 2013-11-03 07:00:00 (Sun)
  63530035200, #      utc_end 2014-03-09 08:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63530035200, #    utc_start 2014-03-09 08:00:00 (Sun)
  63550594800, #      utc_end 2014-11-02 07:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63550594800, #    utc_start 2014-11-02 07:00:00 (Sun)
  63561484800, #      utc_end 2015-03-08 08:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63561484800, #    utc_start 2015-03-08 08:00:00 (Sun)
  63582044400, #      utc_end 2015-11-01 07:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63582044400, #    utc_start 2015-11-01 07:00:00 (Sun)
  63593539200, #      utc_end 2016-03-13 08:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63593539200, #    utc_start 2016-03-13 08:00:00 (Sun)
  63614098800, #      utc_end 2016-11-06 07:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63614098800, #    utc_start 2016-11-06 07:00:00 (Sun)
  63624988800, #      utc_end 2017-03-12 08:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63624988800, #    utc_start 2017-03-12 08:00:00 (Sun)
  63645548400, #      utc_end 2017-11-05 07:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63645548400, #    utc_start 2017-11-05 07:00:00 (Sun)
  63656438400, #      utc_end 2018-03-11 08:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63656438400, #    utc_start 2018-03-11 08:00:00 (Sun)
  63676998000, #      utc_end 2018-11-04 07:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63676998000, #    utc_start 2018-11-04 07:00:00 (Sun)
  63687888000, #      utc_end 2019-03-10 08:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63687888000, #    utc_start 2019-03-10 08:00:00 (Sun)
  63708447600, #      utc_end 2019-11-03 07:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63708447600, #    utc_start 2019-11-03 07:00:00 (Sun)
  63719337600, #      utc_end 2020-03-08 08:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63719337600, #    utc_start 2020-03-08 08:00:00 (Sun)
  63739897200, #      utc_end 2020-11-01 07:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63739897200, #    utc_start 2020-11-01 07:00:00 (Sun)
  63751392000, #      utc_end 2021-03-14 08:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63751392000, #    utc_start 2021-03-14 08:00:00 (Sun)
  63771951600, #      utc_end 2021-11-07 07:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63771951600, #    utc_start 2021-11-07 07:00:00 (Sun)
  63782841600, #      utc_end 2022-03-13 08:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63782841600, #    utc_start 2022-03-13 08:00:00 (Sun)
  63803401200, #      utc_end 2022-11-06 07:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63803401200, #    utc_start 2022-11-06 07:00:00 (Sun)
  63814291200, #      utc_end 2023-03-12 08:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63814291200, #    utc_start 2023-03-12 08:00:00 (Sun)
  63834850800, #      utc_end 2023-11-05 07:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63834850800, #    utc_start 2023-11-05 07:00:00 (Sun)
  63845740800, #      utc_end 2024-03-10 08:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63845740800, #    utc_start 2024-03-10 08:00:00 (Sun)
  63866300400, #      utc_end 2024-11-03 07:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63866300400, #    utc_start 2024-11-03 07:00:00 (Sun)
  63877190400, #      utc_end 2025-03-09 08:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63877190400, #    utc_start 2025-03-09 08:00:00 (Sun)
  63897750000, #      utc_end 2025-11-02 07:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63897750000, #    utc_start 2025-11-02 07:00:00 (Sun)
  63908640000, #      utc_end 2026-03-08 08:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63908640000, #    utc_start 2026-03-08 08:00:00 (Sun)
  63929199600, #      utc_end 2026-11-01 07:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
      [
  63929199600, #    utc_start 2026-11-01 07:00:00 (Sun)
  63940694400, #      utc_end 2027-03-14 08:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -21600,
  0,
  'CST',
      ],
      [
  63940694400, #    utc_start 2027-03-14 08:00:00 (Sun)
  63961254000, #      utc_end 2027-11-07 07:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -18000,
  1,
  'CDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {65}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'C%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => {},
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => {}
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_CST6CDT

    $main::fatpacked{"DateTime/TimeZone/Catalog.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_CATALOG';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Do not edit this file directly.
  
  package DateTime::TimeZone::Catalog;
  $DateTime::TimeZone::Catalog::VERSION = '2.01';
  use strict;
  
  use vars qw( @ALL @CATEGORY_NAMES %CATEGORIES %ZONES_BY_COUNTRY %LINKS );
  
  @ALL =
  qw(
    Africa/Abidjan
    Africa/Accra
    Africa/Algiers
    Africa/Bissau
    Africa/Cairo
    Africa/Casablanca
    Africa/Ceuta
    Africa/El_Aaiun
    Africa/Johannesburg
    Africa/Khartoum
    Africa/Lagos
    Africa/Maputo
    Africa/Monrovia
    Africa/Nairobi
    Africa/Ndjamena
    Africa/Tripoli
    Africa/Tunis
    Africa/Windhoek
    America/Adak
    America/Anchorage
    America/Araguaina
    America/Argentina/Buenos_Aires
    America/Argentina/Catamarca
    America/Argentina/Cordoba
    America/Argentina/Jujuy
    America/Argentina/La_Rioja
    America/Argentina/Mendoza
    America/Argentina/Rio_Gallegos
    America/Argentina/Salta
    America/Argentina/San_Juan
    America/Argentina/San_Luis
    America/Argentina/Tucuman
    America/Argentina/Ushuaia
    America/Asuncion
    America/Atikokan
    America/Bahia
    America/Bahia_Banderas
    America/Barbados
    America/Belem
    America/Belize
    America/Blanc-Sablon
    America/Boa_Vista
    America/Bogota
    America/Boise
    America/Cambridge_Bay
    America/Campo_Grande
    America/Cancun
    America/Caracas
    America/Cayenne
    America/Chicago
    America/Chihuahua
    America/Costa_Rica
    America/Creston
    America/Cuiaba
    America/Curacao
    America/Danmarkshavn
    America/Dawson
    America/Dawson_Creek
    America/Denver
    America/Detroit
    America/Edmonton
    America/Eirunepe
    America/El_Salvador
    America/Fort_Nelson
    America/Fortaleza
    America/Glace_Bay
    America/Godthab
    America/Goose_Bay
    America/Grand_Turk
    America/Guatemala
    America/Guayaquil
    America/Guyana
    America/Halifax
    America/Havana
    America/Hermosillo
    America/Indiana/Indianapolis
    America/Indiana/Knox
    America/Indiana/Marengo
    America/Indiana/Petersburg
    America/Indiana/Tell_City
    America/Indiana/Vevay
    America/Indiana/Vincennes
    America/Indiana/Winamac
    America/Inuvik
    America/Iqaluit
    America/Jamaica
    America/Juneau
    America/Kentucky/Louisville
    America/Kentucky/Monticello
    America/La_Paz
    America/Lima
    America/Los_Angeles
    America/Maceio
    America/Managua
    America/Manaus
    America/Martinique
    America/Matamoros
    America/Mazatlan
    America/Menominee
    America/Merida
    America/Metlakatla
    America/Mexico_City
    America/Miquelon
    America/Moncton
    America/Monterrey
    America/Montevideo
    America/Nassau
    America/New_York
    America/Nipigon
    America/Nome
    America/Noronha
    America/North_Dakota/Beulah
    America/North_Dakota/Center
    America/North_Dakota/New_Salem
    America/Ojinaga
    America/Panama
    America/Pangnirtung
    America/Paramaribo
    America/Phoenix
    America/Port-au-Prince
    America/Port_of_Spain
    America/Porto_Velho
    America/Puerto_Rico
    America/Rainy_River
    America/Rankin_Inlet
    America/Recife
    America/Regina
    America/Resolute
    America/Rio_Branco
    America/Santarem
    America/Santiago
    America/Santo_Domingo
    America/Sao_Paulo
    America/Scoresbysund
    America/Sitka
    America/St_Johns
    America/Swift_Current
    America/Tegucigalpa
    America/Thule
    America/Thunder_Bay
    America/Tijuana
    America/Toronto
    America/Vancouver
    America/Whitehorse
    America/Winnipeg
    America/Yakutat
    America/Yellowknife
    Antarctica/Casey
    Antarctica/Davis
    Antarctica/DumontDUrville
    Antarctica/Macquarie
    Antarctica/Mawson
    Antarctica/Palmer
    Antarctica/Rothera
    Antarctica/Syowa
    Antarctica/Troll
    Antarctica/Vostok
    Asia/Almaty
    Asia/Amman
    Asia/Anadyr
    Asia/Aqtau
    Asia/Aqtobe
    Asia/Ashgabat
    Asia/Baghdad
    Asia/Baku
    Asia/Bangkok
    Asia/Barnaul
    Asia/Beirut
    Asia/Bishkek
    Asia/Brunei
    Asia/Chita
    Asia/Choibalsan
    Asia/Colombo
    Asia/Damascus
    Asia/Dhaka
    Asia/Dili
    Asia/Dubai
    Asia/Dushanbe
    Asia/Gaza
    Asia/Hebron
    Asia/Ho_Chi_Minh
    Asia/Hong_Kong
    Asia/Hovd
    Asia/Irkutsk
    Asia/Jakarta
    Asia/Jayapura
    Asia/Jerusalem
    Asia/Kabul
    Asia/Kamchatka
    Asia/Karachi
    Asia/Kathmandu
    Asia/Khandyga
    Asia/Kolkata
    Asia/Krasnoyarsk
    Asia/Kuala_Lumpur
    Asia/Kuching
    Asia/Macau
    Asia/Magadan
    Asia/Makassar
    Asia/Manila
    Asia/Nicosia
    Asia/Novokuznetsk
    Asia/Novosibirsk
    Asia/Omsk
    Asia/Oral
    Asia/Pontianak
    Asia/Pyongyang
    Asia/Qatar
    Asia/Qyzylorda
    Asia/Rangoon
    Asia/Riyadh
    Asia/Sakhalin
    Asia/Samarkand
    Asia/Seoul
    Asia/Shanghai
    Asia/Singapore
    Asia/Srednekolymsk
    Asia/Taipei
    Asia/Tashkent
    Asia/Tbilisi
    Asia/Tehran
    Asia/Thimphu
    Asia/Tokyo
    Asia/Tomsk
    Asia/Ulaanbaatar
    Asia/Urumqi
    Asia/Ust-Nera
    Asia/Vladivostok
    Asia/Yakutsk
    Asia/Yekaterinburg
    Asia/Yerevan
    Atlantic/Azores
    Atlantic/Bermuda
    Atlantic/Canary
    Atlantic/Cape_Verde
    Atlantic/Faroe
    Atlantic/Madeira
    Atlantic/Reykjavik
    Atlantic/South_Georgia
    Atlantic/Stanley
    Australia/Adelaide
    Australia/Brisbane
    Australia/Broken_Hill
    Australia/Currie
    Australia/Darwin
    Australia/Eucla
    Australia/Hobart
    Australia/Lindeman
    Australia/Lord_Howe
    Australia/Melbourne
    Australia/Perth
    Australia/Sydney
    CET
    CST6CDT
    EET
    EST
    EST5EDT
    Europe/Amsterdam
    Europe/Andorra
    Europe/Astrakhan
    Europe/Athens
    Europe/Belgrade
    Europe/Berlin
    Europe/Brussels
    Europe/Bucharest
    Europe/Budapest
    Europe/Chisinau
    Europe/Copenhagen
    Europe/Dublin
    Europe/Gibraltar
    Europe/Helsinki
    Europe/Istanbul
    Europe/Kaliningrad
    Europe/Kiev
    Europe/Kirov
    Europe/Lisbon
    Europe/London
    Europe/Luxembourg
    Europe/Madrid
    Europe/Malta
    Europe/Minsk
    Europe/Monaco
    Europe/Moscow
    Europe/Oslo
    Europe/Paris
    Europe/Prague
    Europe/Riga
    Europe/Rome
    Europe/Samara
    Europe/Simferopol
    Europe/Sofia
    Europe/Stockholm
    Europe/Tallinn
    Europe/Tirane
    Europe/Ulyanovsk
    Europe/Uzhgorod
    Europe/Vienna
    Europe/Vilnius
    Europe/Volgograd
    Europe/Warsaw
    Europe/Zaporozhye
    Europe/Zurich
    HST
    Indian/Chagos
    Indian/Christmas
    Indian/Cocos
    Indian/Kerguelen
    Indian/Mahe
    Indian/Maldives
    Indian/Mauritius
    Indian/Reunion
    MET
    MST
    MST7MDT
    PST8PDT
    Pacific/Apia
    Pacific/Auckland
    Pacific/Bougainville
    Pacific/Chatham
    Pacific/Chuuk
    Pacific/Easter
    Pacific/Efate
    Pacific/Enderbury
    Pacific/Fakaofo
    Pacific/Fiji
    Pacific/Funafuti
    Pacific/Galapagos
    Pacific/Gambier
    Pacific/Guadalcanal
    Pacific/Guam
    Pacific/Honolulu
    Pacific/Kiritimati
    Pacific/Kosrae
    Pacific/Kwajalein
    Pacific/Majuro
    Pacific/Marquesas
    Pacific/Nauru
    Pacific/Niue
    Pacific/Norfolk
    Pacific/Noumea
    Pacific/Pago_Pago
    Pacific/Palau
    Pacific/Pitcairn
    Pacific/Pohnpei
    Pacific/Port_Moresby
    Pacific/Rarotonga
    Pacific/Tahiti
    Pacific/Tarawa
    Pacific/Tongatapu
    Pacific/Wake
    Pacific/Wallis
    UTC
    WET
  );
  
  @CATEGORY_NAMES =
  qw(
    Africa
    America
    Antarctica
    Asia
    Atlantic
    Australia
    Europe
    Indian
    Pacific
  );
  
  %CATEGORIES =
  (
    'Africa' => [ qw(
      Abidjan
      Accra
      Algiers
      Bissau
      Cairo
      Casablanca
      Ceuta
      El_Aaiun
      Johannesburg
      Khartoum
      Lagos
      Maputo
      Monrovia
      Nairobi
      Ndjamena
      Tripoli
      Tunis
      Windhoek
  ) ],
    'America' => [ qw(
      Adak
      Anchorage
      Araguaina
      Argentina/Buenos_Aires
      Argentina/Catamarca
      Argentina/Cordoba
      Argentina/Jujuy
      Argentina/La_Rioja
      Argentina/Mendoza
      Argentina/Rio_Gallegos
      Argentina/Salta
      Argentina/San_Juan
      Argentina/San_Luis
      Argentina/Tucuman
      Argentina/Ushuaia
      Asuncion
      Atikokan
      Bahia
      Bahia_Banderas
      Barbados
      Belem
      Belize
      Blanc-Sablon
      Boa_Vista
      Bogota
      Boise
      Cambridge_Bay
      Campo_Grande
      Cancun
      Caracas
      Cayenne
      Chicago
      Chihuahua
      Costa_Rica
      Creston
      Cuiaba
      Curacao
      Danmarkshavn
      Dawson
      Dawson_Creek
      Denver
      Detroit
      Edmonton
      Eirunepe
      El_Salvador
      Fort_Nelson
      Fortaleza
      Glace_Bay
      Godthab
      Goose_Bay
      Grand_Turk
      Guatemala
      Guayaquil
      Guyana
      Halifax
      Havana
      Hermosillo
      Indiana/Indianapolis
      Indiana/Knox
      Indiana/Marengo
      Indiana/Petersburg
      Indiana/Tell_City
      Indiana/Vevay
      Indiana/Vincennes
      Indiana/Winamac
      Inuvik
      Iqaluit
      Jamaica
      Juneau
      Kentucky/Louisville
      Kentucky/Monticello
      La_Paz
      Lima
      Los_Angeles
      Maceio
      Managua
      Manaus
      Martinique
      Matamoros
      Mazatlan
      Menominee
      Merida
      Metlakatla
      Mexico_City
      Miquelon
      Moncton
      Monterrey
      Montevideo
      Nassau
      New_York
      Nipigon
      Nome
      Noronha
      North_Dakota/Beulah
      North_Dakota/Center
      North_Dakota/New_Salem
      Ojinaga
      Panama
      Pangnirtung
      Paramaribo
      Phoenix
      Port-au-Prince
      Port_of_Spain
      Porto_Velho
      Puerto_Rico
      Rainy_River
      Rankin_Inlet
      Recife
      Regina
      Resolute
      Rio_Branco
      Santarem
      Santiago
      Santo_Domingo
      Sao_Paulo
      Scoresbysund
      Sitka
      St_Johns
      Swift_Current
      Tegucigalpa
      Thule
      Thunder_Bay
      Tijuana
      Toronto
      Vancouver
      Whitehorse
      Winnipeg
      Yakutat
      Yellowknife
  ) ],
    'Antarctica' => [ qw(
      Casey
      Davis
      DumontDUrville
      Macquarie
      Mawson
      Palmer
      Rothera
      Syowa
      Troll
      Vostok
  ) ],
    'Asia' => [ qw(
      Almaty
      Amman
      Anadyr
      Aqtau
      Aqtobe
      Ashgabat
      Baghdad
      Baku
      Bangkok
      Barnaul
      Beirut
      Bishkek
      Brunei
      Chita
      Choibalsan
      Colombo
      Damascus
      Dhaka
      Dili
      Dubai
      Dushanbe
      Gaza
      Hebron
      Ho_Chi_Minh
      Hong_Kong
      Hovd
      Irkutsk
      Jakarta
      Jayapura
      Jerusalem
      Kabul
      Kamchatka
      Karachi
      Kathmandu
      Khandyga
      Kolkata
      Krasnoyarsk
      Kuala_Lumpur
      Kuching
      Macau
      Magadan
      Makassar
      Manila
      Nicosia
      Novokuznetsk
      Novosibirsk
      Omsk
      Oral
      Pontianak
      Pyongyang
      Qatar
      Qyzylorda
      Rangoon
      Riyadh
      Sakhalin
      Samarkand
      Seoul
      Shanghai
      Singapore
      Srednekolymsk
      Taipei
      Tashkent
      Tbilisi
      Tehran
      Thimphu
      Tokyo
      Tomsk
      Ulaanbaatar
      Urumqi
      Ust-Nera
      Vladivostok
      Yakutsk
      Yekaterinburg
      Yerevan
  ) ],
    'Atlantic' => [ qw(
      Azores
      Bermuda
      Canary
      Cape_Verde
      Faroe
      Madeira
      Reykjavik
      South_Georgia
      Stanley
  ) ],
    'Australia' => [ qw(
      Adelaide
      Brisbane
      Broken_Hill
      Currie
      Darwin
      Eucla
      Hobart
      Lindeman
      Lord_Howe
      Melbourne
      Perth
      Sydney
  ) ],
    'Europe' => [ qw(
      Amsterdam
      Andorra
      Astrakhan
      Athens
      Belgrade
      Berlin
      Brussels
      Bucharest
      Budapest
      Chisinau
      Copenhagen
      Dublin
      Gibraltar
      Helsinki
      Istanbul
      Kaliningrad
      Kiev
      Kirov
      Lisbon
      London
      Luxembourg
      Madrid
      Malta
      Minsk
      Monaco
      Moscow
      Oslo
      Paris
      Prague
      Riga
      Rome
      Samara
      Simferopol
      Sofia
      Stockholm
      Tallinn
      Tirane
      Ulyanovsk
      Uzhgorod
      Vienna
      Vilnius
      Volgograd
      Warsaw
      Zaporozhye
      Zurich
  ) ],
    'Indian' => [ qw(
      Chagos
      Christmas
      Cocos
      Kerguelen
      Mahe
      Maldives
      Mauritius
      Reunion
  ) ],
    'Pacific' => [ qw(
      Apia
      Auckland
      Bougainville
      Chatham
      Chuuk
      Easter
      Efate
      Enderbury
      Fakaofo
      Fiji
      Funafuti
      Galapagos
      Gambier
      Guadalcanal
      Guam
      Honolulu
      Kiritimati
      Kosrae
      Kwajalein
      Majuro
      Marquesas
      Nauru
      Niue
      Norfolk
      Noumea
      Pago_Pago
      Palau
      Pitcairn
      Pohnpei
      Port_Moresby
      Rarotonga
      Tahiti
      Tarawa
      Tongatapu
      Wake
      Wallis
  ) ],
  
  );
  
  %ZONES_BY_COUNTRY =
  (
    'ad' => [ qw(
      Europe/Andorra
  ) ],
    'ae' => [ qw(
      Asia/Dubai
  ) ],
    'af' => [ qw(
      Asia/Kabul
  ) ],
    'ag' => [ qw(
      America/Antigua
  ) ],
    'ai' => [ qw(
      America/Anguilla
  ) ],
    'al' => [ qw(
      Europe/Tirane
  ) ],
    'am' => [ qw(
      Asia/Yerevan
  ) ],
    'ao' => [ qw(
      Africa/Luanda
  ) ],
    'aq' => [ qw(
      Antarctica/McMurdo
      Antarctica/Casey
      Antarctica/Davis
      Antarctica/DumontDUrville
      Antarctica/Mawson
      Antarctica/Palmer
      Antarctica/Rothera
      Antarctica/Syowa
      Antarctica/Troll
      Antarctica/Vostok
  ) ],
    'ar' => [ qw(
      America/Argentina/Buenos_Aires
      America/Argentina/Cordoba
      America/Argentina/Salta
      America/Argentina/Jujuy
      America/Argentina/Tucuman
      America/Argentina/Catamarca
      America/Argentina/La_Rioja
      America/Argentina/San_Juan
      America/Argentina/Mendoza
      America/Argentina/San_Luis
      America/Argentina/Rio_Gallegos
      America/Argentina/Ushuaia
  ) ],
    'as' => [ qw(
      Pacific/Pago_Pago
  ) ],
    'at' => [ qw(
      Europe/Vienna
  ) ],
    'au' => [ qw(
      Australia/Lord_Howe
      Antarctica/Macquarie
      Australia/Hobart
      Australia/Currie
      Australia/Melbourne
      Australia/Sydney
      Australia/Broken_Hill
      Australia/Brisbane
      Australia/Lindeman
      Australia/Adelaide
      Australia/Darwin
      Australia/Perth
      Australia/Eucla
  ) ],
    'aw' => [ qw(
      America/Aruba
  ) ],
    'ax' => [ qw(
      Europe/Mariehamn
  ) ],
    'az' => [ qw(
      Asia/Baku
  ) ],
    'ba' => [ qw(
      Europe/Sarajevo
  ) ],
    'bb' => [ qw(
      America/Barbados
  ) ],
    'bd' => [ qw(
      Asia/Dhaka
  ) ],
    'be' => [ qw(
      Europe/Brussels
  ) ],
    'bf' => [ qw(
      Africa/Ouagadougou
  ) ],
    'bg' => [ qw(
      Europe/Sofia
  ) ],
    'bh' => [ qw(
      Asia/Bahrain
  ) ],
    'bi' => [ qw(
      Africa/Bujumbura
  ) ],
    'bj' => [ qw(
      Africa/Porto-Novo
  ) ],
    'bl' => [ qw(
      America/St_Barthelemy
  ) ],
    'bm' => [ qw(
      Atlantic/Bermuda
  ) ],
    'bn' => [ qw(
      Asia/Brunei
  ) ],
    'bo' => [ qw(
      America/La_Paz
  ) ],
    'bq' => [ qw(
      America/Kralendijk
  ) ],
    'br' => [ qw(
      America/Noronha
      America/Belem
      America/Fortaleza
      America/Recife
      America/Araguaina
      America/Maceio
      America/Bahia
      America/Sao_Paulo
      America/Campo_Grande
      America/Cuiaba
      America/Santarem
      America/Porto_Velho
      America/Boa_Vista
      America/Manaus
      America/Eirunepe
      America/Rio_Branco
  ) ],
    'bs' => [ qw(
      America/Nassau
  ) ],
    'bt' => [ qw(
      Asia/Thimphu
  ) ],
    'bw' => [ qw(
      Africa/Gaborone
  ) ],
    'by' => [ qw(
      Europe/Minsk
  ) ],
    'bz' => [ qw(
      America/Belize
  ) ],
    'ca' => [ qw(
      America/St_Johns
      America/Halifax
      America/Glace_Bay
      America/Moncton
      America/Goose_Bay
      America/Blanc-Sablon
      America/Toronto
      America/Nipigon
      America/Thunder_Bay
      America/Iqaluit
      America/Pangnirtung
      America/Atikokan
      America/Winnipeg
      America/Rainy_River
      America/Resolute
      America/Rankin_Inlet
      America/Regina
      America/Swift_Current
      America/Edmonton
      America/Cambridge_Bay
      America/Yellowknife
      America/Inuvik
      America/Creston
      America/Dawson_Creek
      America/Fort_Nelson
      America/Vancouver
      America/Whitehorse
      America/Dawson
  ) ],
    'cc' => [ qw(
      Indian/Cocos
  ) ],
    'cd' => [ qw(
      Africa/Kinshasa
      Africa/Lubumbashi
  ) ],
    'cf' => [ qw(
      Africa/Bangui
  ) ],
    'cg' => [ qw(
      Africa/Brazzaville
  ) ],
    'ch' => [ qw(
      Europe/Zurich
  ) ],
    'ci' => [ qw(
      Africa/Abidjan
  ) ],
    'ck' => [ qw(
      Pacific/Rarotonga
  ) ],
    'cl' => [ qw(
      America/Santiago
      Pacific/Easter
  ) ],
    'cm' => [ qw(
      Africa/Douala
  ) ],
    'cn' => [ qw(
      Asia/Shanghai
      Asia/Urumqi
  ) ],
    'co' => [ qw(
      America/Bogota
  ) ],
    'cr' => [ qw(
      America/Costa_Rica
  ) ],
    'cu' => [ qw(
      America/Havana
  ) ],
    'cv' => [ qw(
      Atlantic/Cape_Verde
  ) ],
    'cw' => [ qw(
      America/Curacao
  ) ],
    'cx' => [ qw(
      Indian/Christmas
  ) ],
    'cy' => [ qw(
      Asia/Nicosia
  ) ],
    'cz' => [ qw(
      Europe/Prague
  ) ],
    'de' => [ qw(
      Europe/Berlin
      Europe/Busingen
  ) ],
    'dj' => [ qw(
      Africa/Djibouti
  ) ],
    'dk' => [ qw(
      Europe/Copenhagen
  ) ],
    'dm' => [ qw(
      America/Dominica
  ) ],
    'do' => [ qw(
      America/Santo_Domingo
  ) ],
    'dz' => [ qw(
      Africa/Algiers
  ) ],
    'ec' => [ qw(
      America/Guayaquil
      Pacific/Galapagos
  ) ],
    'ee' => [ qw(
      Europe/Tallinn
  ) ],
    'eg' => [ qw(
      Africa/Cairo
  ) ],
    'eh' => [ qw(
      Africa/El_Aaiun
  ) ],
    'er' => [ qw(
      Africa/Asmara
  ) ],
    'es' => [ qw(
      Europe/Madrid
      Africa/Ceuta
      Atlantic/Canary
  ) ],
    'et' => [ qw(
      Africa/Addis_Ababa
  ) ],
    'fi' => [ qw(
      Europe/Helsinki
  ) ],
    'fj' => [ qw(
      Pacific/Fiji
  ) ],
    'fk' => [ qw(
      Atlantic/Stanley
  ) ],
    'fm' => [ qw(
      Pacific/Chuuk
      Pacific/Pohnpei
      Pacific/Kosrae
  ) ],
    'fo' => [ qw(
      Atlantic/Faroe
  ) ],
    'fr' => [ qw(
      Europe/Paris
  ) ],
    'ga' => [ qw(
      Africa/Libreville
  ) ],
    'gb' => [ qw(
      Europe/London
  ) ],
    'gd' => [ qw(
      America/Grenada
  ) ],
    'ge' => [ qw(
      Asia/Tbilisi
  ) ],
    'gf' => [ qw(
      America/Cayenne
  ) ],
    'gg' => [ qw(
      Europe/Guernsey
  ) ],
    'gh' => [ qw(
      Africa/Accra
  ) ],
    'gi' => [ qw(
      Europe/Gibraltar
  ) ],
    'gl' => [ qw(
      America/Godthab
      America/Danmarkshavn
      America/Scoresbysund
      America/Thule
  ) ],
    'gm' => [ qw(
      Africa/Banjul
  ) ],
    'gn' => [ qw(
      Africa/Conakry
  ) ],
    'gp' => [ qw(
      America/Guadeloupe
  ) ],
    'gq' => [ qw(
      Africa/Malabo
  ) ],
    'gr' => [ qw(
      Europe/Athens
  ) ],
    'gs' => [ qw(
      Atlantic/South_Georgia
  ) ],
    'gt' => [ qw(
      America/Guatemala
  ) ],
    'gu' => [ qw(
      Pacific/Guam
  ) ],
    'gw' => [ qw(
      Africa/Bissau
  ) ],
    'gy' => [ qw(
      America/Guyana
  ) ],
    'hk' => [ qw(
      Asia/Hong_Kong
  ) ],
    'hn' => [ qw(
      America/Tegucigalpa
  ) ],
    'hr' => [ qw(
      Europe/Zagreb
  ) ],
    'ht' => [ qw(
      America/Port-au-Prince
  ) ],
    'hu' => [ qw(
      Europe/Budapest
  ) ],
    'id' => [ qw(
      Asia/Jakarta
      Asia/Pontianak
      Asia/Makassar
      Asia/Jayapura
  ) ],
    'ie' => [ qw(
      Europe/Dublin
  ) ],
    'il' => [ qw(
      Asia/Jerusalem
  ) ],
    'im' => [ qw(
      Europe/Isle_of_Man
  ) ],
    'in' => [ qw(
      Asia/Kolkata
  ) ],
    'io' => [ qw(
      Indian/Chagos
  ) ],
    'iq' => [ qw(
      Asia/Baghdad
  ) ],
    'ir' => [ qw(
      Asia/Tehran
  ) ],
    'is' => [ qw(
      Atlantic/Reykjavik
  ) ],
    'it' => [ qw(
      Europe/Rome
  ) ],
    'je' => [ qw(
      Europe/Jersey
  ) ],
    'jm' => [ qw(
      America/Jamaica
  ) ],
    'jo' => [ qw(
      Asia/Amman
  ) ],
    'jp' => [ qw(
      Asia/Tokyo
  ) ],
    'ke' => [ qw(
      Africa/Nairobi
  ) ],
    'kg' => [ qw(
      Asia/Bishkek
  ) ],
    'kh' => [ qw(
      Asia/Phnom_Penh
  ) ],
    'ki' => [ qw(
      Pacific/Tarawa
      Pacific/Enderbury
      Pacific/Kiritimati
  ) ],
    'km' => [ qw(
      Indian/Comoro
  ) ],
    'kn' => [ qw(
      America/St_Kitts
  ) ],
    'kp' => [ qw(
      Asia/Pyongyang
  ) ],
    'kr' => [ qw(
      Asia/Seoul
  ) ],
    'kw' => [ qw(
      Asia/Kuwait
  ) ],
    'ky' => [ qw(
      America/Cayman
  ) ],
    'kz' => [ qw(
      Asia/Almaty
      Asia/Qyzylorda
      Asia/Aqtobe
      Asia/Aqtau
      Asia/Oral
  ) ],
    'la' => [ qw(
      Asia/Vientiane
  ) ],
    'lb' => [ qw(
      Asia/Beirut
  ) ],
    'lc' => [ qw(
      America/St_Lucia
  ) ],
    'li' => [ qw(
      Europe/Vaduz
  ) ],
    'lk' => [ qw(
      Asia/Colombo
  ) ],
    'lr' => [ qw(
      Africa/Monrovia
  ) ],
    'ls' => [ qw(
      Africa/Maseru
  ) ],
    'lt' => [ qw(
      Europe/Vilnius
  ) ],
    'lu' => [ qw(
      Europe/Luxembourg
  ) ],
    'lv' => [ qw(
      Europe/Riga
  ) ],
    'ly' => [ qw(
      Africa/Tripoli
  ) ],
    'ma' => [ qw(
      Africa/Casablanca
  ) ],
    'mc' => [ qw(
      Europe/Monaco
  ) ],
    'md' => [ qw(
      Europe/Chisinau
  ) ],
    'me' => [ qw(
      Europe/Podgorica
  ) ],
    'mf' => [ qw(
      America/Marigot
  ) ],
    'mg' => [ qw(
      Indian/Antananarivo
  ) ],
    'mh' => [ qw(
      Pacific/Majuro
      Pacific/Kwajalein
  ) ],
    'mk' => [ qw(
      Europe/Skopje
  ) ],
    'ml' => [ qw(
      Africa/Bamako
  ) ],
    'mm' => [ qw(
      Asia/Rangoon
  ) ],
    'mn' => [ qw(
      Asia/Ulaanbaatar
      Asia/Hovd
      Asia/Choibalsan
  ) ],
    'mo' => [ qw(
      Asia/Macau
  ) ],
    'mp' => [ qw(
      Pacific/Saipan
  ) ],
    'mq' => [ qw(
      America/Martinique
  ) ],
    'mr' => [ qw(
      Africa/Nouakchott
  ) ],
    'ms' => [ qw(
      America/Montserrat
  ) ],
    'mt' => [ qw(
      Europe/Malta
  ) ],
    'mu' => [ qw(
      Indian/Mauritius
  ) ],
    'mv' => [ qw(
      Indian/Maldives
  ) ],
    'mw' => [ qw(
      Africa/Blantyre
  ) ],
    'mx' => [ qw(
      America/Mexico_City
      America/Cancun
      America/Merida
      America/Monterrey
      America/Matamoros
      America/Mazatlan
      America/Chihuahua
      America/Ojinaga
      America/Hermosillo
      America/Tijuana
      America/Bahia_Banderas
  ) ],
    'my' => [ qw(
      Asia/Kuala_Lumpur
      Asia/Kuching
  ) ],
    'mz' => [ qw(
      Africa/Maputo
  ) ],
    'na' => [ qw(
      Africa/Windhoek
  ) ],
    'nc' => [ qw(
      Pacific/Noumea
  ) ],
    'ne' => [ qw(
      Africa/Niamey
  ) ],
    'nf' => [ qw(
      Pacific/Norfolk
  ) ],
    'ng' => [ qw(
      Africa/Lagos
  ) ],
    'ni' => [ qw(
      America/Managua
  ) ],
    'nl' => [ qw(
      Europe/Amsterdam
  ) ],
    'no' => [ qw(
      Europe/Oslo
  ) ],
    'np' => [ qw(
      Asia/Kathmandu
  ) ],
    'nr' => [ qw(
      Pacific/Nauru
  ) ],
    'nu' => [ qw(
      Pacific/Niue
  ) ],
    'nz' => [ qw(
      Pacific/Auckland
      Pacific/Chatham
  ) ],
    'om' => [ qw(
      Asia/Muscat
  ) ],
    'pa' => [ qw(
      America/Panama
  ) ],
    'pe' => [ qw(
      America/Lima
  ) ],
    'pf' => [ qw(
      Pacific/Tahiti
      Pacific/Marquesas
      Pacific/Gambier
  ) ],
    'pg' => [ qw(
      Pacific/Port_Moresby
      Pacific/Bougainville
  ) ],
    'ph' => [ qw(
      Asia/Manila
  ) ],
    'pk' => [ qw(
      Asia/Karachi
  ) ],
    'pl' => [ qw(
      Europe/Warsaw
  ) ],
    'pm' => [ qw(
      America/Miquelon
  ) ],
    'pn' => [ qw(
      Pacific/Pitcairn
  ) ],
    'pr' => [ qw(
      America/Puerto_Rico
  ) ],
    'ps' => [ qw(
      Asia/Gaza
      Asia/Hebron
  ) ],
    'pt' => [ qw(
      Europe/Lisbon
      Atlantic/Madeira
      Atlantic/Azores
  ) ],
    'pw' => [ qw(
      Pacific/Palau
  ) ],
    'py' => [ qw(
      America/Asuncion
  ) ],
    'qa' => [ qw(
      Asia/Qatar
  ) ],
    're' => [ qw(
      Indian/Reunion
  ) ],
    'ro' => [ qw(
      Europe/Bucharest
  ) ],
    'rs' => [ qw(
      Europe/Belgrade
  ) ],
    'ru' => [ qw(
      Europe/Kaliningrad
      Europe/Moscow
      Europe/Simferopol
      Europe/Volgograd
      Europe/Kirov
      Europe/Astrakhan
      Europe/Samara
      Europe/Ulyanovsk
      Asia/Yekaterinburg
      Asia/Omsk
      Asia/Novosibirsk
      Asia/Barnaul
      Asia/Tomsk
      Asia/Novokuznetsk
      Asia/Krasnoyarsk
      Asia/Irkutsk
      Asia/Chita
      Asia/Yakutsk
      Asia/Khandyga
      Asia/Vladivostok
      Asia/Ust-Nera
      Asia/Magadan
      Asia/Sakhalin
      Asia/Srednekolymsk
      Asia/Kamchatka
      Asia/Anadyr
  ) ],
    'rw' => [ qw(
      Africa/Kigali
  ) ],
    'sa' => [ qw(
      Asia/Riyadh
  ) ],
    'sb' => [ qw(
      Pacific/Guadalcanal
  ) ],
    'sc' => [ qw(
      Indian/Mahe
  ) ],
    'sd' => [ qw(
      Africa/Khartoum
  ) ],
    'se' => [ qw(
      Europe/Stockholm
  ) ],
    'sg' => [ qw(
      Asia/Singapore
  ) ],
    'sh' => [ qw(
      Atlantic/St_Helena
  ) ],
    'si' => [ qw(
      Europe/Ljubljana
  ) ],
    'sj' => [ qw(
      Arctic/Longyearbyen
  ) ],
    'sk' => [ qw(
      Europe/Bratislava
  ) ],
    'sl' => [ qw(
      Africa/Freetown
  ) ],
    'sm' => [ qw(
      Europe/San_Marino
  ) ],
    'sn' => [ qw(
      Africa/Dakar
  ) ],
    'so' => [ qw(
      Africa/Mogadishu
  ) ],
    'sr' => [ qw(
      America/Paramaribo
  ) ],
    'ss' => [ qw(
      Africa/Juba
  ) ],
    'st' => [ qw(
      Africa/Sao_Tome
  ) ],
    'sv' => [ qw(
      America/El_Salvador
  ) ],
    'sx' => [ qw(
      America/Lower_Princes
  ) ],
    'sy' => [ qw(
      Asia/Damascus
  ) ],
    'sz' => [ qw(
      Africa/Mbabane
  ) ],
    'tc' => [ qw(
      America/Grand_Turk
  ) ],
    'td' => [ qw(
      Africa/Ndjamena
  ) ],
    'tf' => [ qw(
      Indian/Kerguelen
  ) ],
    'tg' => [ qw(
      Africa/Lome
  ) ],
    'th' => [ qw(
      Asia/Bangkok
  ) ],
    'tj' => [ qw(
      Asia/Dushanbe
  ) ],
    'tk' => [ qw(
      Pacific/Fakaofo
  ) ],
    'tl' => [ qw(
      Asia/Dili
  ) ],
    'tm' => [ qw(
      Asia/Ashgabat
  ) ],
    'tn' => [ qw(
      Africa/Tunis
  ) ],
    'to' => [ qw(
      Pacific/Tongatapu
  ) ],
    'tr' => [ qw(
      Europe/Istanbul
  ) ],
    'tt' => [ qw(
      America/Port_of_Spain
  ) ],
    'tv' => [ qw(
      Pacific/Funafuti
  ) ],
    'tw' => [ qw(
      Asia/Taipei
  ) ],
    'tz' => [ qw(
      Africa/Dar_es_Salaam
  ) ],
    'ua' => [ qw(
      Europe/Kiev
      Europe/Uzhgorod
      Europe/Zaporozhye
  ) ],
    'ug' => [ qw(
      Africa/Kampala
  ) ],
    'uk' => [ qw(
      Europe/London
  ) ],
    'um' => [ qw(
      Pacific/Johnston
      Pacific/Midway
      Pacific/Wake
  ) ],
    'us' => [ qw(
      America/New_York
      America/Detroit
      America/Kentucky/Louisville
      America/Kentucky/Monticello
      America/Indiana/Indianapolis
      America/Indiana/Vincennes
      America/Indiana/Winamac
      America/Indiana/Marengo
      America/Indiana/Petersburg
      America/Indiana/Vevay
      America/Chicago
      America/Indiana/Tell_City
      America/Indiana/Knox
      America/Menominee
      America/North_Dakota/Center
      America/North_Dakota/New_Salem
      America/North_Dakota/Beulah
      America/Denver
      America/Boise
      America/Phoenix
      America/Los_Angeles
      America/Anchorage
      America/Juneau
      America/Sitka
      America/Metlakatla
      America/Yakutat
      America/Nome
      America/Adak
      Pacific/Honolulu
  ) ],
    'uy' => [ qw(
      America/Montevideo
  ) ],
    'uz' => [ qw(
      Asia/Samarkand
      Asia/Tashkent
  ) ],
    'va' => [ qw(
      Europe/Vatican
  ) ],
    'vc' => [ qw(
      America/St_Vincent
  ) ],
    've' => [ qw(
      America/Caracas
  ) ],
    'vg' => [ qw(
      America/Tortola
  ) ],
    'vi' => [ qw(
      America/St_Thomas
  ) ],
    'vn' => [ qw(
      Asia/Ho_Chi_Minh
  ) ],
    'vu' => [ qw(
      Pacific/Efate
  ) ],
    'wf' => [ qw(
      Pacific/Wallis
  ) ],
    'ws' => [ qw(
      Pacific/Apia
  ) ],
    'ye' => [ qw(
      Asia/Aden
  ) ],
    'yt' => [ qw(
      Indian/Mayotte
  ) ],
    'za' => [ qw(
      Africa/Johannesburg
  ) ],
    'zm' => [ qw(
      Africa/Lusaka
  ) ],
    'zw' => [ qw(
      Africa/Harare
  ) ],
  
  );
  
  %LINKS =
  (
    'AKST9AKDT' => 'America/Anchorage',
    'Africa/Addis_Ababa' => 'Africa/Nairobi',
    'Africa/Asmara' => 'Africa/Nairobi',
    'Africa/Asmera' => 'Africa/Nairobi',
    'Africa/Bamako' => 'Africa/Abidjan',
    'Africa/Bangui' => 'Africa/Lagos',
    'Africa/Banjul' => 'Africa/Abidjan',
    'Africa/Blantyre' => 'Africa/Maputo',
    'Africa/Brazzaville' => 'Africa/Lagos',
    'Africa/Bujumbura' => 'Africa/Maputo',
    'Africa/Conakry' => 'Africa/Abidjan',
    'Africa/Dakar' => 'Africa/Abidjan',
    'Africa/Dar_es_Salaam' => 'Africa/Nairobi',
    'Africa/Djibouti' => 'Africa/Nairobi',
    'Africa/Douala' => 'Africa/Lagos',
    'Africa/Freetown' => 'Africa/Abidjan',
    'Africa/Gaborone' => 'Africa/Maputo',
    'Africa/Harare' => 'Africa/Maputo',
    'Africa/Juba' => 'Africa/Khartoum',
    'Africa/Kampala' => 'Africa/Nairobi',
    'Africa/Kigali' => 'Africa/Maputo',
    'Africa/Kinshasa' => 'Africa/Lagos',
    'Africa/Libreville' => 'Africa/Lagos',
    'Africa/Lome' => 'Africa/Abidjan',
    'Africa/Luanda' => 'Africa/Lagos',
    'Africa/Lubumbashi' => 'Africa/Maputo',
    'Africa/Lusaka' => 'Africa/Maputo',
    'Africa/Malabo' => 'Africa/Lagos',
    'Africa/Maseru' => 'Africa/Johannesburg',
    'Africa/Mbabane' => 'Africa/Johannesburg',
    'Africa/Mogadishu' => 'Africa/Nairobi',
    'Africa/Niamey' => 'Africa/Lagos',
    'Africa/Nouakchott' => 'Africa/Abidjan',
    'Africa/Ouagadougou' => 'Africa/Abidjan',
    'Africa/Porto-Novo' => 'Africa/Lagos',
    'Africa/Sao_Tome' => 'Africa/Abidjan',
    'Africa/Timbuktu' => 'Africa/Abidjan',
    'America/Anguilla' => 'America/Port_of_Spain',
    'America/Antigua' => 'America/Port_of_Spain',
    'America/Argentina/ComodRivadavia' => 'America/Argentina/Catamarca',
    'America/Aruba' => 'America/Curacao',
    'America/Atka' => 'America/Adak',
    'America/Buenos_Aires' => 'America/Argentina/Buenos_Aires',
    'America/Catamarca' => 'America/Argentina/Catamarca',
    'America/Cayman' => 'America/Panama',
    'America/Coral_Harbour' => 'America/Atikokan',
    'America/Cordoba' => 'America/Argentina/Cordoba',
    'America/Dominica' => 'America/Port_of_Spain',
    'America/Ensenada' => 'America/Tijuana',
    'America/Fort_Wayne' => 'America/Indiana/Indianapolis',
    'America/Grenada' => 'America/Port_of_Spain',
    'America/Guadeloupe' => 'America/Port_of_Spain',
    'America/Indianapolis' => 'America/Indiana/Indianapolis',
    'America/Jujuy' => 'America/Argentina/Jujuy',
    'America/Knox_IN' => 'America/Indiana/Knox',
    'America/Kralendijk' => 'America/Curacao',
    'America/Louisville' => 'America/Kentucky/Louisville',
    'America/Lower_Princes' => 'America/Curacao',
    'America/Marigot' => 'America/Port_of_Spain',
    'America/Mendoza' => 'America/Argentina/Mendoza',
    'America/Montreal' => 'America/Toronto',
    'America/Montserrat' => 'America/Port_of_Spain',
    'America/Porto_Acre' => 'America/Rio_Branco',
    'America/Rosario' => 'America/Argentina/Cordoba',
    'America/Santa_Isabel' => 'America/Tijuana',
    'America/Shiprock' => 'America/Denver',
    'America/St_Barthelemy' => 'America/Port_of_Spain',
    'America/St_Kitts' => 'America/Port_of_Spain',
    'America/St_Lucia' => 'America/Port_of_Spain',
    'America/St_Thomas' => 'America/Port_of_Spain',
    'America/St_Vincent' => 'America/Port_of_Spain',
    'America/Tortola' => 'America/Port_of_Spain',
    'America/Virgin' => 'America/Port_of_Spain',
    'Antarctica/McMurdo' => 'Pacific/Auckland',
    'Antarctica/South_Pole' => 'Pacific/Auckland',
    'Arctic/Longyearbyen' => 'Europe/Oslo',
    'Asia/Aden' => 'Asia/Riyadh',
    'Asia/Ashkhabad' => 'Asia/Ashgabat',
    'Asia/Bahrain' => 'Asia/Qatar',
    'Asia/Calcutta' => 'Asia/Kolkata',
    'Asia/Chongqing' => 'Asia/Shanghai',
    'Asia/Chungking' => 'Asia/Shanghai',
    'Asia/Dacca' => 'Asia/Dhaka',
    'Asia/Harbin' => 'Asia/Shanghai',
    'Asia/Istanbul' => 'Europe/Istanbul',
    'Asia/Kashgar' => 'Asia/Urumqi',
    'Asia/Katmandu' => 'Asia/Kathmandu',
    'Asia/Kuwait' => 'Asia/Riyadh',
    'Asia/Macao' => 'Asia/Macau',
    'Asia/Muscat' => 'Asia/Dubai',
    'Asia/Phnom_Penh' => 'Asia/Bangkok',
    'Asia/Saigon' => 'Asia/Ho_Chi_Minh',
    'Asia/Tel_Aviv' => 'Asia/Jerusalem',
    'Asia/Thimbu' => 'Asia/Thimphu',
    'Asia/Ujung_Pandang' => 'Asia/Makassar',
    'Asia/Ulan_Bator' => 'Asia/Ulaanbaatar',
    'Asia/Vientiane' => 'Asia/Bangkok',
    'Atlantic/Faeroe' => 'Atlantic/Faroe',
    'Atlantic/Jan_Mayen' => 'Europe/Oslo',
    'Atlantic/St_Helena' => 'Africa/Abidjan',
    'Australia/ACT' => 'Australia/Sydney',
    'Australia/Canberra' => 'Australia/Sydney',
    'Australia/LHI' => 'Australia/Lord_Howe',
    'Australia/NSW' => 'Australia/Sydney',
    'Australia/North' => 'Australia/Darwin',
    'Australia/Queensland' => 'Australia/Brisbane',
    'Australia/South' => 'Australia/Adelaide',
    'Australia/Tasmania' => 'Australia/Hobart',
    'Australia/Victoria' => 'Australia/Melbourne',
    'Australia/West' => 'Australia/Perth',
    'Australia/Yancowinna' => 'Australia/Broken_Hill',
    'Brazil/Acre' => 'America/Rio_Branco',
    'Brazil/DeNoronha' => 'America/Noronha',
    'Brazil/East' => 'America/Sao_Paulo',
    'Brazil/West' => 'America/Manaus',
    'Canada/Atlantic' => 'America/Halifax',
    'Canada/Central' => 'America/Winnipeg',
    'Canada/East-Saskatchewan' => 'America/Regina',
    'Canada/Eastern' => 'America/Toronto',
    'Canada/Mountain' => 'America/Edmonton',
    'Canada/Newfoundland' => 'America/St_Johns',
    'Canada/Pacific' => 'America/Vancouver',
    'Canada/Saskatchewan' => 'America/Regina',
    'Canada/Yukon' => 'America/Whitehorse',
    'Chile/Continental' => 'America/Santiago',
    'Chile/EasterIsland' => 'Pacific/Easter',
    'Cuba' => 'America/Havana',
    'Egypt' => 'Africa/Cairo',
    'Eire' => 'Europe/Dublin',
    'Etc/GMT' => 'UTC',
    'Etc/GMT+0' => 'UTC',
    'Etc/UCT' => 'UTC',
    'Etc/UTC' => 'UTC',
    'Etc/Universal' => 'UTC',
    'Etc/Zulu' => 'UTC',
    'Europe/Belfast' => 'Europe/London',
    'Europe/Bratislava' => 'Europe/Prague',
    'Europe/Busingen' => 'Europe/Zurich',
    'Europe/Guernsey' => 'Europe/London',
    'Europe/Isle_of_Man' => 'Europe/London',
    'Europe/Jersey' => 'Europe/London',
    'Europe/Ljubljana' => 'Europe/Belgrade',
    'Europe/Mariehamn' => 'Europe/Helsinki',
    'Europe/Nicosia' => 'Asia/Nicosia',
    'Europe/Podgorica' => 'Europe/Belgrade',
    'Europe/San_Marino' => 'Europe/Rome',
    'Europe/Sarajevo' => 'Europe/Belgrade',
    'Europe/Skopje' => 'Europe/Belgrade',
    'Europe/Tiraspol' => 'Europe/Chisinau',
    'Europe/Vaduz' => 'Europe/Zurich',
    'Europe/Vatican' => 'Europe/Rome',
    'Europe/Zagreb' => 'Europe/Belgrade',
    'GB' => 'Europe/London',
    'GB-Eire' => 'Europe/London',
    'GMT' => 'UTC',
    'GMT+0' => 'UTC',
    'GMT-0' => 'UTC',
    'GMT0' => 'UTC',
    'Greenwich' => 'UTC',
    'Hongkong' => 'Asia/Hong_Kong',
    'Iceland' => 'Atlantic/Reykjavik',
    'Indian/Antananarivo' => 'Africa/Nairobi',
    'Indian/Comoro' => 'Africa/Nairobi',
    'Indian/Mayotte' => 'Africa/Nairobi',
    'Iran' => 'Asia/Tehran',
    'Israel' => 'Asia/Jerusalem',
    'JST-9' => 'Asia/Tokyo',
    'Jamaica' => 'America/Jamaica',
    'Japan' => 'Asia/Tokyo',
    'Kwajalein' => 'Pacific/Kwajalein',
    'Libya' => 'Africa/Tripoli',
    'Mexico/BajaNorte' => 'America/Tijuana',
    'Mexico/BajaSur' => 'America/Mazatlan',
    'Mexico/General' => 'America/Mexico_City',
    'NZ' => 'Pacific/Auckland',
    'NZ-CHAT' => 'Pacific/Chatham',
    'Navajo' => 'America/Denver',
    'PRC' => 'Asia/Shanghai',
    'Pacific/Johnston' => 'Pacific/Honolulu',
    'Pacific/Midway' => 'Pacific/Pago_Pago',
    'Pacific/Ponape' => 'Pacific/Pohnpei',
    'Pacific/Saipan' => 'Pacific/Guam',
    'Pacific/Samoa' => 'Pacific/Pago_Pago',
    'Pacific/Truk' => 'Pacific/Chuuk',
    'Pacific/Yap' => 'Pacific/Chuuk',
    'Poland' => 'Europe/Warsaw',
    'Portugal' => 'Europe/Lisbon',
    'ROC' => 'Asia/Taipei',
    'ROK' => 'Asia/Seoul',
    'Singapore' => 'Asia/Singapore',
    'Turkey' => 'Europe/Istanbul',
    'UCT' => 'UTC',
    'US/Alaska' => 'America/Anchorage',
    'US/Aleutian' => 'America/Adak',
    'US/Arizona' => 'America/Phoenix',
    'US/Central' => 'America/Chicago',
    'US/East-Indiana' => 'America/Indiana/Indianapolis',
    'US/Eastern' => 'America/New_York',
    'US/Hawaii' => 'Pacific/Honolulu',
    'US/Indiana-Starke' => 'America/Indiana/Knox',
    'US/Michigan' => 'America/Detroit',
    'US/Mountain' => 'America/Denver',
    'US/Pacific' => 'America/Los_Angeles',
    'US/Pacific-New' => 'America/Los_Angeles',
    'US/Samoa' => 'Pacific/Pago_Pago',
    'Universal' => 'UTC',
    'W-SU' => 'Europe/Moscow',
    'Zulu' => 'UTC'
  )
  
  ;
  
  sub OlsonVersion { '2016f' }
  
  
  1;
  
  __END__
  
  =pod
  
  =head1 NAME
  
  DateTime::TimeZone::Catalog - Provides a list of all valid time zone names
  
  =head1 DESCRIPTION
  
  This module contains an enumerated list of all known system timezones,
  so that applications can easily present a list of timezones.
  
  =head1 AVAILABLE ZONES
  
  =head2 Zones by Continent/Region
  
  =head3 Africa
  
    Africa/Abidjan
    Africa/Accra
    Africa/Algiers
    Africa/Bissau
    Africa/Cairo
    Africa/Casablanca
    Africa/El_Aaiun
    Africa/Johannesburg
    Africa/Khartoum
    Africa/Lagos
    Africa/Maputo
    Africa/Monrovia
    Africa/Nairobi
    Africa/Ndjamena
    Africa/Tripoli
    Africa/Tunis
    Africa/Windhoek
    Africa/Ceuta
  
  =head3 America
  
    America/Araguaina
    America/Argentina/Buenos_Aires
    America/Argentina/Catamarca
    America/Argentina/Cordoba
    America/Argentina/Jujuy
    America/Argentina/La_Rioja
    America/Argentina/Mendoza
    America/Argentina/Rio_Gallegos
    America/Argentina/Salta
    America/Argentina/San_Juan
    America/Argentina/San_Luis
    America/Argentina/Tucuman
    America/Argentina/Ushuaia
    America/Asuncion
    America/Bahia
    America/Belem
    America/Boa_Vista
    America/Bogota
    America/Campo_Grande
    America/Caracas
    America/Cayenne
    America/Cuiaba
    America/Curacao
    America/Eirunepe
    America/Fortaleza
    America/Guayaquil
    America/Guyana
    America/La_Paz
    America/Lima
    America/Maceio
    America/Manaus
    America/Montevideo
    America/Noronha
    America/Paramaribo
    America/Port_of_Spain
    America/Porto_Velho
    America/Recife
    America/Rio_Branco
    America/Santarem
    America/Santiago
    America/Sao_Paulo
    America/Danmarkshavn
    America/Godthab
    America/Scoresbysund
    America/Thule
    America/Adak
    America/Anchorage
    America/Atikokan
    America/Bahia_Banderas
    America/Barbados
    America/Belize
    America/Blanc-Sablon
    America/Boise
    America/Cambridge_Bay
    America/Cancun
    America/Chicago
    America/Chihuahua
    America/Costa_Rica
    America/Creston
    America/Dawson
    America/Dawson_Creek
    America/Denver
    America/Detroit
    America/Edmonton
    America/El_Salvador
    America/Fort_Nelson
    America/Glace_Bay
    America/Goose_Bay
    America/Grand_Turk
    America/Guatemala
    America/Halifax
    America/Havana
    America/Hermosillo
    America/Indiana/Indianapolis
    America/Indiana/Knox
    America/Indiana/Marengo
    America/Indiana/Petersburg
    America/Indiana/Tell_City
    America/Indiana/Vevay
    America/Indiana/Vincennes
    America/Indiana/Winamac
    America/Inuvik
    America/Iqaluit
    America/Jamaica
    America/Juneau
    America/Kentucky/Louisville
    America/Kentucky/Monticello
    America/Los_Angeles
    America/Managua
    America/Martinique
    America/Matamoros
    America/Mazatlan
    America/Menominee
    America/Merida
    America/Metlakatla
    America/Mexico_City
    America/Miquelon
    America/Moncton
    America/Monterrey
    America/Nassau
    America/New_York
    America/Nipigon
    America/Nome
    America/North_Dakota/Beulah
    America/North_Dakota/Center
    America/North_Dakota/New_Salem
    America/Ojinaga
    America/Panama
    America/Pangnirtung
    America/Phoenix
    America/Port-au-Prince
    America/Puerto_Rico
    America/Rainy_River
    America/Rankin_Inlet
    America/Regina
    America/Resolute
    America/Santo_Domingo
    America/Sitka
    America/St_Johns
    America/Swift_Current
    America/Tegucigalpa
    America/Thunder_Bay
    America/Tijuana
    America/Toronto
    America/Vancouver
    America/Whitehorse
    America/Winnipeg
    America/Yakutat
    America/Yellowknife
  
  =head3 Antarctica
  
    Antarctica/Casey
    Antarctica/Davis
    Antarctica/DumontDUrville
    Antarctica/Mawson
    Antarctica/Rothera
    Antarctica/Syowa
    Antarctica/Troll
    Antarctica/Vostok
    Antarctica/Macquarie
    Antarctica/Palmer
  
  =head3 Asia
  
    Asia/Almaty
    Asia/Amman
    Asia/Aqtau
    Asia/Aqtobe
    Asia/Ashgabat
    Asia/Baghdad
    Asia/Baku
    Asia/Bangkok
    Asia/Beirut
    Asia/Bishkek
    Asia/Brunei
    Asia/Choibalsan
    Asia/Colombo
    Asia/Damascus
    Asia/Dhaka
    Asia/Dili
    Asia/Dubai
    Asia/Dushanbe
    Asia/Gaza
    Asia/Hebron
    Asia/Ho_Chi_Minh
    Asia/Hong_Kong
    Asia/Hovd
    Asia/Jakarta
    Asia/Jayapura
    Asia/Jerusalem
    Asia/Kabul
    Asia/Karachi
    Asia/Kathmandu
    Asia/Kolkata
    Asia/Kuala_Lumpur
    Asia/Kuching
    Asia/Macau
    Asia/Makassar
    Asia/Manila
    Asia/Nicosia
    Asia/Oral
    Asia/Pontianak
    Asia/Pyongyang
    Asia/Qatar
    Asia/Qyzylorda
    Asia/Rangoon
    Asia/Riyadh
    Asia/Samarkand
    Asia/Seoul
    Asia/Shanghai
    Asia/Singapore
    Asia/Taipei
    Asia/Tashkent
    Asia/Tbilisi
    Asia/Tehran
    Asia/Thimphu
    Asia/Tokyo
    Asia/Ulaanbaatar
    Asia/Urumqi
    Asia/Yerevan
    Asia/Anadyr
    Asia/Barnaul
    Asia/Chita
    Asia/Irkutsk
    Asia/Kamchatka
    Asia/Khandyga
    Asia/Krasnoyarsk
    Asia/Magadan
    Asia/Novokuznetsk
    Asia/Novosibirsk
    Asia/Omsk
    Asia/Sakhalin
    Asia/Srednekolymsk
    Asia/Tomsk
    Asia/Ust-Nera
    Asia/Vladivostok
    Asia/Yakutsk
    Asia/Yekaterinburg
  
  =head3 Atlantic
  
    Atlantic/Cape_Verde
    Atlantic/South_Georgia
    Atlantic/Stanley
    Atlantic/Azores
    Atlantic/Canary
    Atlantic/Faroe
    Atlantic/Madeira
    Atlantic/Reykjavik
    Atlantic/Bermuda
  
  =head3 Australia
  
    Australia/Adelaide
    Australia/Brisbane
    Australia/Broken_Hill
    Australia/Currie
    Australia/Darwin
    Australia/Eucla
    Australia/Hobart
    Australia/Lindeman
    Australia/Lord_Howe
    Australia/Melbourne
    Australia/Perth
    Australia/Sydney
  
  =head3 Europe
  
    Europe/Amsterdam
    Europe/Andorra
    Europe/Astrakhan
    Europe/Athens
    Europe/Belgrade
    Europe/Berlin
    Europe/Brussels
    Europe/Bucharest
    Europe/Budapest
    Europe/Chisinau
    Europe/Copenhagen
    Europe/Dublin
    Europe/Gibraltar
    Europe/Helsinki
    Europe/Istanbul
    Europe/Kaliningrad
    Europe/Kiev
    Europe/Kirov
    Europe/Lisbon
    Europe/London
    Europe/Luxembourg
    Europe/Madrid
    Europe/Malta
    Europe/Minsk
    Europe/Monaco
    Europe/Moscow
    Europe/Oslo
    Europe/Paris
    Europe/Prague
    Europe/Riga
    Europe/Rome
    Europe/Samara
    Europe/Simferopol
    Europe/Sofia
    Europe/Stockholm
    Europe/Tallinn
    Europe/Tirane
    Europe/Ulyanovsk
    Europe/Uzhgorod
    Europe/Vienna
    Europe/Vilnius
    Europe/Volgograd
    Europe/Warsaw
    Europe/Zaporozhye
    Europe/Zurich
  
  =head3 Indian
  
    Indian/Kerguelen
    Indian/Mahe
    Indian/Mauritius
    Indian/Reunion
    Indian/Christmas
    Indian/Cocos
    Indian/Chagos
    Indian/Maldives
  
  =head3 Pacific
  
    Pacific/Apia
    Pacific/Auckland
    Pacific/Bougainville
    Pacific/Chatham
    Pacific/Chuuk
    Pacific/Efate
    Pacific/Enderbury
    Pacific/Fakaofo
    Pacific/Fiji
    Pacific/Funafuti
    Pacific/Gambier
    Pacific/Guadalcanal
    Pacific/Guam
    Pacific/Kiritimati
    Pacific/Kosrae
    Pacific/Kwajalein
    Pacific/Majuro
    Pacific/Marquesas
    Pacific/Nauru
    Pacific/Niue
    Pacific/Norfolk
    Pacific/Noumea
    Pacific/Pago_Pago
    Pacific/Palau
    Pacific/Pitcairn
    Pacific/Pohnpei
    Pacific/Port_Moresby
    Pacific/Rarotonga
    Pacific/Tahiti
    Pacific/Tarawa
    Pacific/Tongatapu
    Pacific/Wake
    Pacific/Wallis
    Pacific/Easter
    Pacific/Galapagos
    Pacific/Honolulu
  
  =head2 Zones by Country
  
  =head3 Afghanistan (AF)
  
    Asia/Kabul
  
  =head3 Aland Islands (AX)
  
    Europe/Mariehamn
  
  =head3 Albania (AL)
  
    Europe/Tirane
  
  =head3 Algeria (DZ)
  
    Africa/Algiers
  
  =head3 American Samoa (AS)
  
    Pacific/Pago_Pago
  
  =head3 Andorra (AD)
  
    Europe/Andorra
  
  =head3 Angola (AO)
  
    Africa/Luanda
  
  =head3 Anguilla (AI)
  
    America/Anguilla
  
  =head3 Antarctica (AQ)
  
    Antarctica/McMurdo - New Zealand time - McMurdo, South Pole
    Antarctica/Casey - Casey
    Antarctica/Davis - Davis
    Antarctica/DumontDUrville - Dumont-d'Urville
    Antarctica/Mawson - Mawson
    Antarctica/Palmer - Palmer
    Antarctica/Rothera - Rothera
    Antarctica/Syowa - Syowa
    Antarctica/Troll - Troll
    Antarctica/Vostok - Vostok
  
  =head3 Antigua and Barbuda (AG)
  
    America/Antigua
  
  =head3 Argentina (AR)
  
    America/Argentina/Buenos_Aires - Buenos Aires (BA, CF)
    America/Argentina/Cordoba - Argentina (most areas: CB, CC, CN, ER, FM, MN, SE, SF)
    America/Argentina/Salta - Salta (SA, LP, NQ, RN)
    America/Argentina/Jujuy - Jujuy (JY)
    America/Argentina/Tucuman - Tucuman (TM)
    America/Argentina/Catamarca - Catamarca (CT); Chubut (CH)
    America/Argentina/La_Rioja - La Rioja (LR)
    America/Argentina/San_Juan - San Juan (SJ)
    America/Argentina/Mendoza - Mendoza (MZ)
    America/Argentina/San_Luis - San Luis (SL)
    America/Argentina/Rio_Gallegos - Santa Cruz (SC)
    America/Argentina/Ushuaia - Tierra del Fuego (TF)
  
  =head3 Armenia (AM)
  
    Asia/Yerevan
  
  =head3 Aruba (AW)
  
    America/Aruba
  
  =head3 Australia (AU)
  
    Australia/Lord_Howe - Lord Howe Island
    Antarctica/Macquarie - Macquarie Island
    Australia/Hobart - Tasmania (most areas)
    Australia/Currie - Tasmania (King Island)
    Australia/Melbourne - Victoria
    Australia/Sydney - New South Wales (most areas)
    Australia/Broken_Hill - New South Wales (Yancowinna)
    Australia/Brisbane - Queensland (most areas)
    Australia/Lindeman - Queensland (Whitsunday Islands)
    Australia/Adelaide - South Australia
    Australia/Darwin - Northern Territory
    Australia/Perth - Western Australia (most areas)
    Australia/Eucla - Western Australia (Eucla)
  
  =head3 Austria (AT)
  
    Europe/Vienna
  
  =head3 Azerbaijan (AZ)
  
    Asia/Baku
  
  =head3 Bahamas (BS)
  
    America/Nassau
  
  =head3 Bahrain (BH)
  
    Asia/Bahrain
  
  =head3 Bangladesh (BD)
  
    Asia/Dhaka
  
  =head3 Barbados (BB)
  
    America/Barbados
  
  =head3 Belarus (BY)
  
    Europe/Minsk
  
  =head3 Belgium (BE)
  
    Europe/Brussels
  
  =head3 Belize (BZ)
  
    America/Belize
  
  =head3 Benin (BJ)
  
    Africa/Porto-Novo
  
  =head3 Bermuda (BM)
  
    Atlantic/Bermuda
  
  =head3 Bhutan (BT)
  
    Asia/Thimphu
  
  =head3 Bolivia (Plurinational State of) (BO)
  
    America/La_Paz
  
  =head3 Bonaire, Sint Eustatius and Saba (BQ)
  
    America/Kralendijk
  
  =head3 Bosnia and Herzegovina (BA)
  
    Europe/Sarajevo
  
  =head3 Botswana (BW)
  
    Africa/Gaborone
  
  =head3 Brazil (BR)
  
    America/Noronha - Atlantic islands
    America/Belem - Para (east); Amapa
    America/Fortaleza - Brazil (northeast: MA, PI, CE, RN, PB)
    America/Recife - Pernambuco
    America/Araguaina - Tocantins
    America/Maceio - Alagoas, Sergipe
    America/Bahia - Bahia
    America/Sao_Paulo - Brazil (southeast: GO, DF, MG, ES, RJ, SP, PR, SC, RS)
    America/Campo_Grande - Mato Grosso do Sul
    America/Cuiaba - Mato Grosso
    America/Santarem - Para (west)
    America/Porto_Velho - Rondonia
    America/Boa_Vista - Roraima
    America/Manaus - Amazonas (east)
    America/Eirunepe - Amazonas (west)
    America/Rio_Branco - Acre
  
  =head3 British Indian Ocean Territory (IO)
  
    Indian/Chagos
  
  =head3 Brunei Darussalam (BN)
  
    Asia/Brunei
  
  =head3 Bulgaria (BG)
  
    Europe/Sofia
  
  =head3 Burkina Faso (BF)
  
    Africa/Ouagadougou
  
  =head3 Burundi (BI)
  
    Africa/Bujumbura
  
  =head3 Cabo Verde (CV)
  
    Atlantic/Cape_Verde
  
  =head3 Cambodia (KH)
  
    Asia/Phnom_Penh
  
  =head3 Cameroon (CM)
  
    Africa/Douala
  
  =head3 Canada (CA)
  
    America/St_Johns - Newfoundland; Labrador (southeast)
    America/Halifax - Atlantic - NS (most areas); PE
    America/Glace_Bay - Atlantic - NS (Cape Breton)
    America/Moncton - Atlantic - New Brunswick
    America/Goose_Bay - Atlantic - Labrador (most areas)
    America/Blanc-Sablon - AST - QC (Lower North Shore)
    America/Toronto - Eastern - ON, QC (most areas)
    America/Nipigon - Eastern - ON, QC (no DST 1967-73)
    America/Thunder_Bay - Eastern - ON (Thunder Bay)
    America/Iqaluit - Eastern - NU (most east areas)
    America/Pangnirtung - Eastern - NU (Pangnirtung)
    America/Atikokan - EST - ON (Atikokan); NU (Coral H)
    America/Winnipeg - Central - ON (west); Manitoba
    America/Rainy_River - Central - ON (Rainy R, Ft Frances)
    America/Resolute - Central - NU (Resolute)
    America/Rankin_Inlet - Central - NU (central)
    America/Regina - CST - SK (most areas)
    America/Swift_Current - CST - SK (midwest)
    America/Edmonton - Mountain - AB; BC (E); SK (W)
    America/Cambridge_Bay - Mountain - NU (west)
    America/Yellowknife - Mountain - NT (central)
    America/Inuvik - Mountain - NT (west)
    America/Creston - MST - BC (Creston)
    America/Dawson_Creek - MST - BC (Dawson Cr, Ft St John)
    America/Fort_Nelson - MST - BC (Ft Nelson)
    America/Vancouver - Pacific - BC (most areas)
    America/Whitehorse - Pacific - Yukon (south)
    America/Dawson - Pacific - Yukon (north)
  
  =head3 Cayman Islands (KY)
  
    America/Cayman
  
  =head3 Central African Republic (CF)
  
    Africa/Bangui
  
  =head3 Chad (TD)
  
    Africa/Ndjamena
  
  =head3 Chile (CL)
  
    America/Santiago - Chile (most areas)
    Pacific/Easter - Easter Island
  
  =head3 China (CN)
  
    Asia/Shanghai - Beijing Time
    Asia/Urumqi - Xinjiang Time
  
  =head3 Christmas Island (CX)
  
    Indian/Christmas
  
  =head3 Cocos (Keeling) Islands (CC)
  
    Indian/Cocos
  
  =head3 Colombia (CO)
  
    America/Bogota
  
  =head3 Comoros (KM)
  
    Indian/Comoro
  
  =head3 Congo (CG)
  
    Africa/Brazzaville
  
  =head3 Congo (The Democratic Republic of the) (CD)
  
    Africa/Kinshasa - Dem. Rep. of Congo (west)
    Africa/Lubumbashi - Dem. Rep. of Congo (east)
  
  =head3 Cook Islands (CK)
  
    Pacific/Rarotonga
  
  =head3 Costa Rica (CR)
  
    America/Costa_Rica
  
  =head3 Cote d'Ivoire (CI)
  
    Africa/Abidjan
  
  =head3 Croatia (HR)
  
    Europe/Zagreb
  
  =head3 Cuba (CU)
  
    America/Havana
  
  =head3 Curacao (CW)
  
    America/Curacao
  
  =head3 Cyprus (CY)
  
    Asia/Nicosia
  
  =head3 Czech Republic (CZ)
  
    Europe/Prague
  
  =head3 Denmark (DK)
  
    Europe/Copenhagen
  
  =head3 Djibouti (DJ)
  
    Africa/Djibouti
  
  =head3 Dominica (DM)
  
    America/Dominica
  
  =head3 Dominican Republic (DO)
  
    America/Santo_Domingo
  
  =head3 Ecuador (EC)
  
    America/Guayaquil - Ecuador (mainland)
    Pacific/Galapagos - Galapagos Islands
  
  =head3 Egypt (EG)
  
    Africa/Cairo
  
  =head3 El Salvador (SV)
  
    America/El_Salvador
  
  =head3 Equatorial Guinea (GQ)
  
    Africa/Malabo
  
  =head3 Eritrea (ER)
  
    Africa/Asmara
  
  =head3 Estonia (EE)
  
    Europe/Tallinn
  
  =head3 Ethiopia (ET)
  
    Africa/Addis_Ababa
  
  =head3 Falkland Islands (The) [Malvinas] (FK)
  
    Atlantic/Stanley
  
  =head3 Faroe Islands (FO)
  
    Atlantic/Faroe
  
  =head3 Fiji (FJ)
  
    Pacific/Fiji
  
  =head3 Finland (FI)
  
    Europe/Helsinki
  
  =head3 France (FR)
  
    Europe/Paris
  
  =head3 French Guiana (GF)
  
    America/Cayenne
  
  =head3 French Polynesia (PF)
  
    Pacific/Tahiti - Society Islands
    Pacific/Marquesas - Marquesas Islands
    Pacific/Gambier - Gambier Islands
  
  =head3 French Southern Territories (TF)
  
    Indian/Kerguelen
  
  =head3 Gabon (GA)
  
    Africa/Libreville
  
  =head3 Gambia (GM)
  
    Africa/Banjul
  
  =head3 Georgia (GE)
  
    Asia/Tbilisi
  
  =head3 Germany (DE)
  
    Europe/Berlin - Germany (most areas)
    Europe/Busingen - Busingen
  
  =head3 Ghana (GH)
  
    Africa/Accra
  
  =head3 Gibraltar (GI)
  
    Europe/Gibraltar
  
  =head3 Greece (GR)
  
    Europe/Athens
  
  =head3 Greenland (GL)
  
    America/Godthab - Greenland (most areas)
    America/Danmarkshavn - National Park (east coast)
    America/Scoresbysund - Scoresbysund/Ittoqqortoormiit
    America/Thule - Thule/Pituffik
  
  =head3 Grenada (GD)
  
    America/Grenada
  
  =head3 Guadeloupe (GP)
  
    America/Guadeloupe
  
  =head3 Guam (GU)
  
    Pacific/Guam
  
  =head3 Guatemala (GT)
  
    America/Guatemala
  
  =head3 Guernsey (GG)
  
    Europe/Guernsey
  
  =head3 Guinea (GN)
  
    Africa/Conakry
  
  =head3 Guinea-Bissau (GW)
  
    Africa/Bissau
  
  =head3 Guyana (GY)
  
    America/Guyana
  
  =head3 Haiti (HT)
  
    America/Port-au-Prince
  
  =head3 Holy See (VA)
  
    Europe/Vatican
  
  =head3 Honduras (HN)
  
    America/Tegucigalpa
  
  =head3 Hong Kong (HK)
  
    Asia/Hong_Kong
  
  =head3 Hungary (HU)
  
    Europe/Budapest
  
  =head3 Iceland (IS)
  
    Atlantic/Reykjavik
  
  =head3 India (IN)
  
    Asia/Kolkata
  
  =head3 Indonesia (ID)
  
    Asia/Jakarta - Java, Sumatra
    Asia/Pontianak - Borneo (west, central)
    Asia/Makassar - Borneo (east, south); Sulawesi/Celebes, Bali, Nusa Tengarra; Timor (west)
    Asia/Jayapura - New Guinea (West Papua / Irian Jaya); Malukus/Moluccas
  
  =head3 Iran (Islamic Republic of) (IR)
  
    Asia/Tehran
  
  =head3 Iraq (IQ)
  
    Asia/Baghdad
  
  =head3 Ireland (IE)
  
    Europe/Dublin
  
  =head3 Isle of Man (IM)
  
    Europe/Isle_of_Man
  
  =head3 Israel (IL)
  
    Asia/Jerusalem
  
  =head3 Italy (IT)
  
    Europe/Rome
  
  =head3 Jamaica (JM)
  
    America/Jamaica
  
  =head3 Japan (JP)
  
    Asia/Tokyo
  
  =head3 Jersey (JE)
  
    Europe/Jersey
  
  =head3 Jordan (JO)
  
    Asia/Amman
  
  =head3 Kazakhstan (KZ)
  
    Asia/Almaty - Kazakhstan (most areas)
    Asia/Qyzylorda - Qyzylorda/Kyzylorda/Kzyl-Orda
    Asia/Aqtobe - Aqtobe/Aktobe
    Asia/Aqtau - Atyrau/Atirau/Gur'yev, Mangghystau/Mankistau
    Asia/Oral - West Kazakhstan
  
  =head3 Kenya (KE)
  
    Africa/Nairobi
  
  =head3 Kiribati (KI)
  
    Pacific/Tarawa - Gilbert Islands
    Pacific/Enderbury - Phoenix Islands
    Pacific/Kiritimati - Line Islands
  
  =head3 Korea, The Democratic People's Republic of (KP)
  
    Asia/Pyongyang
  
  =head3 Korea, The Republic of (KR)
  
    Asia/Seoul
  
  =head3 Kuwait (KW)
  
    Asia/Kuwait
  
  =head3 Kyrgyzstan (KG)
  
    Asia/Bishkek
  
  =head3 Lao People's Democratic Republic (LA)
  
    Asia/Vientiane
  
  =head3 Latvia (LV)
  
    Europe/Riga
  
  =head3 Lebanon (LB)
  
    Asia/Beirut
  
  =head3 Lesotho (LS)
  
    Africa/Maseru
  
  =head3 Liberia (LR)
  
    Africa/Monrovia
  
  =head3 Libya (LY)
  
    Africa/Tripoli
  
  =head3 Liechtenstein (LI)
  
    Europe/Vaduz
  
  =head3 Lithuania (LT)
  
    Europe/Vilnius
  
  =head3 Luxembourg (LU)
  
    Europe/Luxembourg
  
  =head3 Macao (MO)
  
    Asia/Macau
  
  =head3 Macedonia, The former Yugoslav Republic of (MK)
  
    Europe/Skopje
  
  =head3 Madagascar (MG)
  
    Indian/Antananarivo
  
  =head3 Malawi (MW)
  
    Africa/Blantyre
  
  =head3 Malaysia (MY)
  
    Asia/Kuala_Lumpur - Malaysia (peninsula)
    Asia/Kuching - Sabah, Sarawak
  
  =head3 Maldives (MV)
  
    Indian/Maldives
  
  =head3 Mali (ML)
  
    Africa/Bamako
  
  =head3 Malta (MT)
  
    Europe/Malta
  
  =head3 Marshall Islands (MH)
  
    Pacific/Majuro - Marshall Islands (most areas)
    Pacific/Kwajalein - Kwajalein
  
  =head3 Martinique (MQ)
  
    America/Martinique
  
  =head3 Mauritania (MR)
  
    Africa/Nouakchott
  
  =head3 Mauritius (MU)
  
    Indian/Mauritius
  
  =head3 Mayotte (YT)
  
    Indian/Mayotte
  
  =head3 Mexico (MX)
  
    America/Mexico_City - Central Time
    America/Cancun - Eastern Standard Time - Quintana Roo
    America/Merida - Central Time - Campeche, Yucatan
    America/Monterrey - Central Time - Durango; Coahuila, Nuevo Leon, Tamaulipas (most areas)
    America/Matamoros - Central Time US - Coahuila, Nuevo Leon, Tamaulipas (US border)
    America/Mazatlan - Mountain Time - Baja California Sur, Nayarit, Sinaloa
    America/Chihuahua - Mountain Time - Chihuahua (most areas)
    America/Ojinaga - Mountain Time US - Chihuahua (US border)
    America/Hermosillo - Mountain Standard Time - Sonora
    America/Tijuana - Pacific Time US - Baja California
    America/Bahia_Banderas - Central Time - Bahia de Banderas
  
  =head3 Micronesia (Federated States of) (FM)
  
    Pacific/Chuuk - Chuuk/Truk, Yap
    Pacific/Pohnpei - Pohnpei/Ponape
    Pacific/Kosrae - Kosrae
  
  =head3 Moldova, The Republic of (MD)
  
    Europe/Chisinau
  
  =head3 Monaco (MC)
  
    Europe/Monaco
  
  =head3 Mongolia (MN)
  
    Asia/Ulaanbaatar - Mongolia (most areas)
    Asia/Hovd - Bayan-Olgiy, Govi-Altai, Hovd, Uvs, Zavkhan
    Asia/Choibalsan - Dornod, Sukhbaatar
  
  =head3 Montenegro (ME)
  
    Europe/Podgorica
  
  =head3 Montserrat (MS)
  
    America/Montserrat
  
  =head3 Morocco (MA)
  
    Africa/Casablanca
  
  =head3 Mozambique (MZ)
  
    Africa/Maputo
  
  =head3 Myanmar (MM)
  
    Asia/Rangoon
  
  =head3 Namibia (NA)
  
    Africa/Windhoek
  
  =head3 Nauru (NR)
  
    Pacific/Nauru
  
  =head3 Nepal (NP)
  
    Asia/Kathmandu
  
  =head3 Netherlands (NL)
  
    Europe/Amsterdam
  
  =head3 New Caledonia (NC)
  
    Pacific/Noumea
  
  =head3 New Zealand (NZ)
  
    Pacific/Auckland - New Zealand (most areas)
    Pacific/Chatham - Chatham Islands
  
  =head3 Nicaragua (NI)
  
    America/Managua
  
  =head3 Niger (NE)
  
    Africa/Niamey
  
  =head3 Nigeria (NG)
  
    Africa/Lagos
  
  =head3 Niue (NU)
  
    Pacific/Niue
  
  =head3 Norfolk Island (NF)
  
    Pacific/Norfolk
  
  =head3 Northern Mariana Islands (MP)
  
    Pacific/Saipan
  
  =head3 Norway (NO)
  
    Europe/Oslo
  
  =head3 Oman (OM)
  
    Asia/Muscat
  
  =head3 Pakistan (PK)
  
    Asia/Karachi
  
  =head3 Palau (PW)
  
    Pacific/Palau
  
  =head3 Palestine, State of (PS)
  
    Asia/Gaza - Gaza Strip
    Asia/Hebron - West Bank
  
  =head3 Panama (PA)
  
    America/Panama
  
  =head3 Papua New Guinea (PG)
  
    Pacific/Port_Moresby - Papua New Guinea (most areas)
    Pacific/Bougainville - Bougainville
  
  =head3 Paraguay (PY)
  
    America/Asuncion
  
  =head3 Peru (PE)
  
    America/Lima
  
  =head3 Philippines (PH)
  
    Asia/Manila
  
  =head3 Pitcairn (PN)
  
    Pacific/Pitcairn
  
  =head3 Poland (PL)
  
    Europe/Warsaw
  
  =head3 Portugal (PT)
  
    Europe/Lisbon - Portugal (mainland)
    Atlantic/Madeira - Madeira Islands
    Atlantic/Azores - Azores
  
  =head3 Puerto Rico (PR)
  
    America/Puerto_Rico
  
  =head3 Qatar (QA)
  
    Asia/Qatar
  
  =head3 Reunion (RE)
  
    Indian/Reunion
  
  =head3 Romania (RO)
  
    Europe/Bucharest
  
  =head3 Russian Federation (RU)
  
    Europe/Kaliningrad - MSK-01 - Kaliningrad
    Europe/Moscow - MSK+00 - Moscow area
    Europe/Simferopol - MSK+00 - Crimea
    Europe/Volgograd - MSK+00 - Volgograd, Saratov
    Europe/Kirov - MSK+00 - Kirov
    Europe/Astrakhan - MSK+01 - Astrakhan
    Europe/Samara - MSK+01 - Samara, Udmurtia
    Europe/Ulyanovsk - MSK+01 - Ulyanovsk
    Asia/Yekaterinburg - MSK+02 - Urals
    Asia/Omsk - MSK+03 - Omsk
    Asia/Novosibirsk - MSK+03 - Novosibirsk
    Asia/Barnaul - MSK+04 - Altai
    Asia/Tomsk - MSK+04 - Tomsk
    Asia/Novokuznetsk - MSK+04 - Kemerovo
    Asia/Krasnoyarsk - MSK+04 - Krasnoyarsk area
    Asia/Irkutsk - MSK+05 - Irkutsk, Buryatia
    Asia/Chita - MSK+06 - Zabaykalsky
    Asia/Yakutsk - MSK+06 - Lena River
    Asia/Khandyga - MSK+06 - Tomponsky, Ust-Maysky
    Asia/Vladivostok - MSK+07 - Amur River
    Asia/Ust-Nera - MSK+07 - Oymyakonsky
    Asia/Magadan - MSK+08 - Magadan
    Asia/Sakhalin - MSK+08 - Sakhalin Island
    Asia/Srednekolymsk - MSK+08 - Sakha (E); North Kuril Is
    Asia/Kamchatka - MSK+09 - Kamchatka
    Asia/Anadyr - MSK+09 - Bering Sea
  
  =head3 Rwanda (RW)
  
    Africa/Kigali
  
  =head3 Saint Barthelemy (BL)
  
    America/St_Barthelemy
  
  =head3 Saint Helena, Ascension and Tristan da Cunha (SH)
  
    Atlantic/St_Helena
  
  =head3 Saint Kitts and Nevis (KN)
  
    America/St_Kitts
  
  =head3 Saint Lucia (LC)
  
    America/St_Lucia
  
  =head3 Saint Martin (French part) (MF)
  
    America/Marigot
  
  =head3 Saint Pierre and Miquelon (PM)
  
    America/Miquelon
  
  =head3 Saint Vincent and the Grenadines (VC)
  
    America/St_Vincent
  
  =head3 Samoa (WS)
  
    Pacific/Apia
  
  =head3 San Marino (SM)
  
    Europe/San_Marino
  
  =head3 Sao Tome and Principe (ST)
  
    Africa/Sao_Tome
  
  =head3 Saudi Arabia (SA)
  
    Asia/Riyadh
  
  =head3 Senegal (SN)
  
    Africa/Dakar
  
  =head3 Serbia (RS)
  
    Europe/Belgrade
  
  =head3 Seychelles (SC)
  
    Indian/Mahe
  
  =head3 Sierra Leone (SL)
  
    Africa/Freetown
  
  =head3 Singapore (SG)
  
    Asia/Singapore
  
  =head3 Sint Maarten (Dutch part) (SX)
  
    America/Lower_Princes
  
  =head3 Slovakia (SK)
  
    Europe/Bratislava
  
  =head3 Slovenia (SI)
  
    Europe/Ljubljana
  
  =head3 Solomon Islands (SB)
  
    Pacific/Guadalcanal
  
  =head3 Somalia (SO)
  
    Africa/Mogadishu
  
  =head3 South Africa (ZA)
  
    Africa/Johannesburg
  
  =head3 South Georgia and the South Sandwich Islands (GS)
  
    Atlantic/South_Georgia
  
  =head3 South Sudan (SS)
  
    Africa/Juba
  
  =head3 Spain (ES)
  
    Europe/Madrid - Spain (mainland)
    Africa/Ceuta - Ceuta, Melilla
    Atlantic/Canary - Canary Islands
  
  =head3 Sri Lanka (LK)
  
    Asia/Colombo
  
  =head3 Sudan (SD)
  
    Africa/Khartoum
  
  =head3 Suriname (SR)
  
    America/Paramaribo
  
  =head3 Svalbard and Jan Mayen (SJ)
  
    Arctic/Longyearbyen
  
  =head3 Swaziland (SZ)
  
    Africa/Mbabane
  
  =head3 Sweden (SE)
  
    Europe/Stockholm
  
  =head3 Switzerland (CH)
  
    Europe/Zurich
  
  =head3 Syrian Arab Republic (SY)
  
    Asia/Damascus
  
  =head3 Taiwan (Province of China) (TW)
  
    Asia/Taipei
  
  =head3 Tajikistan (TJ)
  
    Asia/Dushanbe
  
  =head3 Tanzania, United Republic of (TZ)
  
    Africa/Dar_es_Salaam
  
  =head3 Thailand (TH)
  
    Asia/Bangkok
  
  =head3 Timor-Leste (TL)
  
    Asia/Dili
  
  =head3 Togo (TG)
  
    Africa/Lome
  
  =head3 Tokelau (TK)
  
    Pacific/Fakaofo
  
  =head3 Tonga (TO)
  
    Pacific/Tongatapu
  
  =head3 Trinidad and Tobago (TT)
  
    America/Port_of_Spain
  
  =head3 Tunisia (TN)
  
    Africa/Tunis
  
  =head3 Turkey (TR)
  
    Europe/Istanbul
  
  =head3 Turkmenistan (TM)
  
    Asia/Ashgabat
  
  =head3 Turks and Caicos Islands (TC)
  
    America/Grand_Turk
  
  =head3 Tuvalu (TV)
  
    Pacific/Funafuti
  
  =head3 Uganda (UG)
  
    Africa/Kampala
  
  =head3 Ukraine (UA)
  
    Europe/Kiev - Ukraine (most areas)
    Europe/Uzhgorod - Ruthenia
    Europe/Zaporozhye - Zaporozh'ye/Zaporizhia; Lugansk/Luhansk (east)
  
  =head3 United Arab Emirates (AE)
  
    Asia/Dubai
  
  =head3 United Kingdom of Great Britain and Northern Ireland (GB)
  
    Europe/London
  
  =head3 United States Minor Outlying Islands (UM)
  
    Pacific/Johnston - Johnston Atoll
    Pacific/Midway - Midway Islands
    Pacific/Wake - Wake Island
  
  =head3 United States of America (US)
  
    America/New_York - Eastern (most areas)
    America/Detroit - Eastern - MI (most areas)
    America/Kentucky/Louisville - Eastern - KY (Louisville area)
    America/Kentucky/Monticello - Eastern - KY (Wayne)
    America/Indiana/Indianapolis - Eastern - IN (most areas)
    America/Indiana/Vincennes - Eastern - IN (Da, Du, K, Mn)
    America/Indiana/Winamac - Eastern - IN (Pulaski)
    America/Indiana/Marengo - Eastern - IN (Crawford)
    America/Indiana/Petersburg - Eastern - IN (Pike)
    America/Indiana/Vevay - Eastern - IN (Switzerland)
    America/Chicago - Central (most areas)
    America/Indiana/Tell_City - Central - IN (Perry)
    America/Indiana/Knox - Central - IN (Starke)
    America/Menominee - Central - MI (Wisconsin border)
    America/North_Dakota/Center - Central - ND (Oliver)
    America/North_Dakota/New_Salem - Central - ND (Morton rural)
    America/North_Dakota/Beulah - Central - ND (Mercer)
    America/Denver - Mountain (most areas)
    America/Boise - Mountain - ID (south); OR (east)
    America/Phoenix - MST - Arizona (except Navajo)
    America/Los_Angeles - Pacific
    America/Anchorage - Alaska (most areas)
    America/Juneau - Alaska - Juneau area
    America/Sitka - Alaska - Sitka area
    America/Metlakatla - Alaska - Annette Island
    America/Yakutat - Alaska - Yakutat
    America/Nome - Alaska (west)
    America/Adak - Aleutian Islands
    Pacific/Honolulu - Hawaii
  
  =head3 Uruguay (UY)
  
    America/Montevideo
  
  =head3 Uzbekistan (UZ)
  
    Asia/Samarkand - Uzbekistan (west)
    Asia/Tashkent - Uzbekistan (east)
  
  =head3 Vanuatu (VU)
  
    Pacific/Efate
  
  =head3 Venezuela (Bolivarian Republic of) (VE)
  
    America/Caracas
  
  =head3 Viet Nam (VN)
  
    Asia/Ho_Chi_Minh
  
  =head3 Virgin Islands (British) (VG)
  
    America/Tortola
  
  =head3 Virgin Islands (U.S.) (VI)
  
    America/St_Thomas
  
  =head3 Wallis and Futuna (WF)
  
    Pacific/Wallis
  
  =head3 Western Sahara (EH)
  
    Africa/El_Aaiun
  
  =head3 Yemen (YE)
  
    Asia/Aden
  
  =head3 Zambia (ZM)
  
    Africa/Lusaka
  
  =head3 Zimbabwe (ZW)
  
    Africa/Harare
  
  =head2 Linked Zones
  
  A linked zone is an alias from one name to another.
  
    AKST9AKDT => America/Anchorage
    Africa/Addis_Ababa => Africa/Nairobi
    Africa/Asmara => Africa/Nairobi
    Africa/Asmera => Africa/Nairobi
    Africa/Bamako => Africa/Abidjan
    Africa/Bangui => Africa/Lagos
    Africa/Banjul => Africa/Abidjan
    Africa/Blantyre => Africa/Maputo
    Africa/Brazzaville => Africa/Lagos
    Africa/Bujumbura => Africa/Maputo
    Africa/Conakry => Africa/Abidjan
    Africa/Dakar => Africa/Abidjan
    Africa/Dar_es_Salaam => Africa/Nairobi
    Africa/Djibouti => Africa/Nairobi
    Africa/Douala => Africa/Lagos
    Africa/Freetown => Africa/Abidjan
    Africa/Gaborone => Africa/Maputo
    Africa/Harare => Africa/Maputo
    Africa/Juba => Africa/Khartoum
    Africa/Kampala => Africa/Nairobi
    Africa/Kigali => Africa/Maputo
    Africa/Kinshasa => Africa/Lagos
    Africa/Libreville => Africa/Lagos
    Africa/Lome => Africa/Abidjan
    Africa/Luanda => Africa/Lagos
    Africa/Lubumbashi => Africa/Maputo
    Africa/Lusaka => Africa/Maputo
    Africa/Malabo => Africa/Lagos
    Africa/Maseru => Africa/Johannesburg
    Africa/Mbabane => Africa/Johannesburg
    Africa/Mogadishu => Africa/Nairobi
    Africa/Niamey => Africa/Lagos
    Africa/Nouakchott => Africa/Abidjan
    Africa/Ouagadougou => Africa/Abidjan
    Africa/Porto-Novo => Africa/Lagos
    Africa/Sao_Tome => Africa/Abidjan
    Africa/Timbuktu => Africa/Abidjan
    America/Anguilla => America/Port_of_Spain
    America/Antigua => America/Port_of_Spain
    America/Argentina/ComodRivadavia => America/Argentina/Catamarca
    America/Aruba => America/Curacao
    America/Atka => America/Adak
    America/Buenos_Aires => America/Argentina/Buenos_Aires
    America/Catamarca => America/Argentina/Catamarca
    America/Cayman => America/Panama
    America/Coral_Harbour => America/Atikokan
    America/Cordoba => America/Argentina/Cordoba
    America/Dominica => America/Port_of_Spain
    America/Ensenada => America/Tijuana
    America/Fort_Wayne => America/Indiana/Indianapolis
    America/Grenada => America/Port_of_Spain
    America/Guadeloupe => America/Port_of_Spain
    America/Indianapolis => America/Indiana/Indianapolis
    America/Jujuy => America/Argentina/Jujuy
    America/Knox_IN => America/Indiana/Knox
    America/Kralendijk => America/Curacao
    America/Louisville => America/Kentucky/Louisville
    America/Lower_Princes => America/Curacao
    America/Marigot => America/Port_of_Spain
    America/Mendoza => America/Argentina/Mendoza
    America/Montreal => America/Toronto
    America/Montserrat => America/Port_of_Spain
    America/Porto_Acre => America/Rio_Branco
    America/Rosario => America/Argentina/Cordoba
    America/Santa_Isabel => America/Tijuana
    America/Shiprock => America/Denver
    America/St_Barthelemy => America/Port_of_Spain
    America/St_Kitts => America/Port_of_Spain
    America/St_Lucia => America/Port_of_Spain
    America/St_Thomas => America/Port_of_Spain
    America/St_Vincent => America/Port_of_Spain
    America/Tortola => America/Port_of_Spain
    America/Virgin => America/Port_of_Spain
    Antarctica/McMurdo => Pacific/Auckland
    Antarctica/South_Pole => Pacific/Auckland
    Arctic/Longyearbyen => Europe/Oslo
    Asia/Aden => Asia/Riyadh
    Asia/Ashkhabad => Asia/Ashgabat
    Asia/Bahrain => Asia/Qatar
    Asia/Calcutta => Asia/Kolkata
    Asia/Chongqing => Asia/Shanghai
    Asia/Chungking => Asia/Shanghai
    Asia/Dacca => Asia/Dhaka
    Asia/Harbin => Asia/Shanghai
    Asia/Istanbul => Europe/Istanbul
    Asia/Kashgar => Asia/Urumqi
    Asia/Katmandu => Asia/Kathmandu
    Asia/Kuwait => Asia/Riyadh
    Asia/Macao => Asia/Macau
    Asia/Muscat => Asia/Dubai
    Asia/Phnom_Penh => Asia/Bangkok
    Asia/Saigon => Asia/Ho_Chi_Minh
    Asia/Tel_Aviv => Asia/Jerusalem
    Asia/Thimbu => Asia/Thimphu
    Asia/Ujung_Pandang => Asia/Makassar
    Asia/Ulan_Bator => Asia/Ulaanbaatar
    Asia/Vientiane => Asia/Bangkok
    Atlantic/Faeroe => Atlantic/Faroe
    Atlantic/Jan_Mayen => Europe/Oslo
    Atlantic/St_Helena => Africa/Abidjan
    Australia/ACT => Australia/Sydney
    Australia/Canberra => Australia/Sydney
    Australia/LHI => Australia/Lord_Howe
    Australia/NSW => Australia/Sydney
    Australia/North => Australia/Darwin
    Australia/Queensland => Australia/Brisbane
    Australia/South => Australia/Adelaide
    Australia/Tasmania => Australia/Hobart
    Australia/Victoria => Australia/Melbourne
    Australia/West => Australia/Perth
    Australia/Yancowinna => Australia/Broken_Hill
    Brazil/Acre => America/Rio_Branco
    Brazil/DeNoronha => America/Noronha
    Brazil/East => America/Sao_Paulo
    Brazil/West => America/Manaus
    Canada/Atlantic => America/Halifax
    Canada/Central => America/Winnipeg
    Canada/East-Saskatchewan => America/Regina
    Canada/Eastern => America/Toronto
    Canada/Mountain => America/Edmonton
    Canada/Newfoundland => America/St_Johns
    Canada/Pacific => America/Vancouver
    Canada/Saskatchewan => America/Regina
    Canada/Yukon => America/Whitehorse
    Chile/Continental => America/Santiago
    Chile/EasterIsland => Pacific/Easter
    Cuba => America/Havana
    Egypt => Africa/Cairo
    Eire => Europe/Dublin
    Etc/GMT => UTC
    Etc/GMT+0 => UTC
    Etc/UCT => UTC
    Etc/UTC => UTC
    Etc/Universal => UTC
    Etc/Zulu => UTC
    Europe/Belfast => Europe/London
    Europe/Bratislava => Europe/Prague
    Europe/Busingen => Europe/Zurich
    Europe/Guernsey => Europe/London
    Europe/Isle_of_Man => Europe/London
    Europe/Jersey => Europe/London
    Europe/Ljubljana => Europe/Belgrade
    Europe/Mariehamn => Europe/Helsinki
    Europe/Nicosia => Asia/Nicosia
    Europe/Podgorica => Europe/Belgrade
    Europe/San_Marino => Europe/Rome
    Europe/Sarajevo => Europe/Belgrade
    Europe/Skopje => Europe/Belgrade
    Europe/Tiraspol => Europe/Chisinau
    Europe/Vaduz => Europe/Zurich
    Europe/Vatican => Europe/Rome
    Europe/Zagreb => Europe/Belgrade
    GB => Europe/London
    GB-Eire => Europe/London
    GMT => UTC
    GMT+0 => UTC
    GMT-0 => UTC
    GMT0 => UTC
    Greenwich => UTC
    Hongkong => Asia/Hong_Kong
    Iceland => Atlantic/Reykjavik
    Indian/Antananarivo => Africa/Nairobi
    Indian/Comoro => Africa/Nairobi
    Indian/Mayotte => Africa/Nairobi
    Iran => Asia/Tehran
    Israel => Asia/Jerusalem
    JST-9 => Asia/Tokyo
    Jamaica => America/Jamaica
    Japan => Asia/Tokyo
    Kwajalein => Pacific/Kwajalein
    Libya => Africa/Tripoli
    Mexico/BajaNorte => America/Tijuana
    Mexico/BajaSur => America/Mazatlan
    Mexico/General => America/Mexico_City
    NZ => Pacific/Auckland
    NZ-CHAT => Pacific/Chatham
    Navajo => America/Denver
    PRC => Asia/Shanghai
    Pacific/Johnston => Pacific/Honolulu
    Pacific/Midway => Pacific/Pago_Pago
    Pacific/Ponape => Pacific/Pohnpei
    Pacific/Saipan => Pacific/Guam
    Pacific/Samoa => Pacific/Pago_Pago
    Pacific/Truk => Pacific/Chuuk
    Pacific/Yap => Pacific/Chuuk
    Poland => Europe/Warsaw
    Portugal => Europe/Lisbon
    ROC => Asia/Taipei
    ROK => Asia/Seoul
    Singapore => Asia/Singapore
    Turkey => Europe/Istanbul
    UCT => UTC
    US/Alaska => America/Anchorage
    US/Aleutian => America/Adak
    US/Arizona => America/Phoenix
    US/Central => America/Chicago
    US/East-Indiana => America/Indiana/Indianapolis
    US/Eastern => America/New_York
    US/Hawaii => Pacific/Honolulu
    US/Indiana-Starke => America/Indiana/Knox
    US/Michigan => America/Detroit
    US/Mountain => America/Denver
    US/Pacific => America/Los_Angeles
    US/Pacific-New => America/Los_Angeles
    US/Samoa => Pacific/Pago_Pago
    Universal => UTC
    W-SU => Europe/Moscow
    Zulu => UTC
  
  =cut
DATETIME_TIMEZONE_CATALOG

    $main::fatpacked{"DateTime/TimeZone/EET.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EET';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::EET;
  $DateTime::TimeZone::EET::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::EET::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  62364560400, #      utc_end 1977-04-03 01:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  62364567600, #    local_end 1977-04-03 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62364560400, #    utc_start 1977-04-03 01:00:00 (Sun)
  62379680400, #      utc_end 1977-09-25 01:00:00 (Sun)
  62364571200, #  local_start 1977-04-03 04:00:00 (Sun)
  62379691200, #    local_end 1977-09-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62379680400, #    utc_start 1977-09-25 01:00:00 (Sun)
  62396010000, #      utc_end 1978-04-02 01:00:00 (Sun)
  62379687600, #  local_start 1977-09-25 03:00:00 (Sun)
  62396017200, #    local_end 1978-04-02 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62396010000, #    utc_start 1978-04-02 01:00:00 (Sun)
  62411734800, #      utc_end 1978-10-01 01:00:00 (Sun)
  62396020800, #  local_start 1978-04-02 04:00:00 (Sun)
  62411745600, #    local_end 1978-10-01 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62411734800, #    utc_start 1978-10-01 01:00:00 (Sun)
  62427459600, #      utc_end 1979-04-01 01:00:00 (Sun)
  62411742000, #  local_start 1978-10-01 03:00:00 (Sun)
  62427466800, #    local_end 1979-04-01 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62427459600, #    utc_start 1979-04-01 01:00:00 (Sun)
  62443184400, #      utc_end 1979-09-30 01:00:00 (Sun)
  62427470400, #  local_start 1979-04-01 04:00:00 (Sun)
  62443195200, #    local_end 1979-09-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62443184400, #    utc_start 1979-09-30 01:00:00 (Sun)
  62459514000, #      utc_end 1980-04-06 01:00:00 (Sun)
  62443191600, #  local_start 1979-09-30 03:00:00 (Sun)
  62459521200, #    local_end 1980-04-06 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62459514000, #    utc_start 1980-04-06 01:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459524800, #  local_start 1980-04-06 04:00:00 (Sun)
  62474644800, #    local_end 1980-09-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474641200, #  local_start 1980-09-28 03:00:00 (Sun)
  62490366000, #    local_end 1981-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490369600, #  local_start 1981-03-29 04:00:00 (Sun)
  62506094400, #    local_end 1981-09-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506090800, #  local_start 1981-09-27 03:00:00 (Sun)
  62521815600, #    local_end 1982-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521819200, #  local_start 1982-03-28 04:00:00 (Sun)
  62537544000, #    local_end 1982-09-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537540400, #  local_start 1982-09-26 03:00:00 (Sun)
  62553265200, #    local_end 1983-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553268800, #  local_start 1983-03-27 04:00:00 (Sun)
  62568993600, #    local_end 1983-09-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568990000, #  local_start 1983-09-25 03:00:00 (Sun)
  62584714800, #    local_end 1984-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584718400, #  local_start 1984-03-25 04:00:00 (Sun)
  62601048000, #    local_end 1984-09-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601044400, #  local_start 1984-09-30 03:00:00 (Sun)
  62616769200, #    local_end 1985-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616772800, #  local_start 1985-03-31 04:00:00 (Sun)
  62632497600, #    local_end 1985-09-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632494000, #  local_start 1985-09-29 03:00:00 (Sun)
  62648218800, #    local_end 1986-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648222400, #  local_start 1986-03-30 04:00:00 (Sun)
  62663947200, #    local_end 1986-09-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663943600, #  local_start 1986-09-28 03:00:00 (Sun)
  62679668400, #    local_end 1987-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679672000, #  local_start 1987-03-29 04:00:00 (Sun)
  62695396800, #    local_end 1987-09-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695393200, #  local_start 1987-09-27 03:00:00 (Sun)
  62711118000, #    local_end 1988-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711121600, #  local_start 1988-03-27 04:00:00 (Sun)
  62726846400, #    local_end 1988-09-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726842800, #  local_start 1988-09-25 03:00:00 (Sun)
  62742567600, #    local_end 1989-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742571200, #  local_start 1989-03-26 04:00:00 (Sun)
  62758296000, #    local_end 1989-09-24 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758292400, #  local_start 1989-09-24 03:00:00 (Sun)
  62774017200, #    local_end 1990-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774020800, #  local_start 1990-03-25 04:00:00 (Sun)
  62790350400, #    local_end 1990-09-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790346800, #  local_start 1990-09-30 03:00:00 (Sun)
  62806071600, #    local_end 1991-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806075200, #  local_start 1991-03-31 04:00:00 (Sun)
  62821800000, #    local_end 1991-09-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821796400, #  local_start 1991-09-29 03:00:00 (Sun)
  62837521200, #    local_end 1992-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837524800, #  local_start 1992-03-29 04:00:00 (Sun)
  62853249600, #    local_end 1992-09-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853246000, #  local_start 1992-09-27 03:00:00 (Sun)
  62868970800, #    local_end 1993-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868974400, #  local_start 1993-03-28 04:00:00 (Sun)
  62884699200, #    local_end 1993-09-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884695600, #  local_start 1993-09-26 03:00:00 (Sun)
  62900420400, #    local_end 1994-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900424000, #  local_start 1994-03-27 04:00:00 (Sun)
  62916148800, #    local_end 1994-09-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916145200, #  local_start 1994-09-25 03:00:00 (Sun)
  62931870000, #    local_end 1995-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931873600, #  local_start 1995-03-26 04:00:00 (Sun)
  62947598400, #    local_end 1995-09-24 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947594800, #  local_start 1995-09-24 03:00:00 (Sun)
  62963924400, #    local_end 1996-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963928000, #  local_start 1996-03-31 04:00:00 (Sun)
  62982072000, #    local_end 1996-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982068400, #  local_start 1996-10-27 03:00:00 (Sun)
  62995374000, #    local_end 1997-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995377600, #  local_start 1997-03-30 04:00:00 (Sun)
  63013521600, #    local_end 1997-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013518000, #  local_start 1997-10-26 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026827200, #  local_start 1998-03-29 04:00:00 (Sun)
  63044971200, #    local_end 1998-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044967600, #  local_start 1998-10-25 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058276800, #  local_start 1999-03-28 04:00:00 (Sun)
  63077025600, #    local_end 1999-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089726400, #  local_start 2000-03-26 04:00:00 (Sun)
  63108475200, #    local_end 2000-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108471600, #  local_start 2000-10-29 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121176000, #  local_start 2001-03-25 04:00:00 (Sun)
  63139924800, #    local_end 2001-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139921200, #  local_start 2001-10-28 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153230400, #  local_start 2002-03-31 04:00:00 (Sun)
  63171374400, #    local_end 2002-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171370800, #  local_start 2002-10-27 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184680000, #  local_start 2003-03-30 04:00:00 (Sun)
  63202824000, #    local_end 2003-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216129600, #  local_start 2004-03-28 04:00:00 (Sun)
  63234878400, #    local_end 2004-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247579200, #  local_start 2005-03-27 04:00:00 (Sun)
  63266328000, #    local_end 2005-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279025200, #    local_end 2006-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279028800, #  local_start 2006-03-26 04:00:00 (Sun)
  63297777600, #    local_end 2006-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310478400, #  local_start 2007-03-25 04:00:00 (Sun)
  63329227200, #    local_end 2007-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63342529200, #    local_end 2008-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342532800, #  local_start 2008-03-30 04:00:00 (Sun)
  63360676800, #    local_end 2008-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373978800, #    local_end 2009-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373982400, #  local_start 2009-03-29 04:00:00 (Sun)
  63392126400, #    local_end 2009-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392122800, #  local_start 2009-10-25 03:00:00 (Sun)
  63405428400, #    local_end 2010-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405432000, #  local_start 2010-03-28 04:00:00 (Sun)
  63424180800, #    local_end 2010-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424177200, #  local_start 2010-10-31 03:00:00 (Sun)
  63436878000, #    local_end 2011-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436881600, #  local_start 2011-03-27 04:00:00 (Sun)
  63455630400, #    local_end 2011-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455626800, #  local_start 2011-10-30 03:00:00 (Sun)
  63468327600, #    local_end 2012-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468331200, #  local_start 2012-03-25 04:00:00 (Sun)
  63487080000, #    local_end 2012-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487076400, #  local_start 2012-10-28 03:00:00 (Sun)
  63500382000, #    local_end 2013-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500385600, #  local_start 2013-03-31 04:00:00 (Sun)
  63518529600, #    local_end 2013-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518526000, #  local_start 2013-10-27 03:00:00 (Sun)
  63531831600, #    local_end 2014-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531835200, #  local_start 2014-03-30 04:00:00 (Sun)
  63549979200, #    local_end 2014-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549975600, #  local_start 2014-10-26 03:00:00 (Sun)
  63563281200, #    local_end 2015-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563284800, #  local_start 2015-03-29 04:00:00 (Sun)
  63581428800, #    local_end 2015-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581425200, #  local_start 2015-10-25 03:00:00 (Sun)
  63594730800, #    local_end 2016-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594734400, #  local_start 2016-03-27 04:00:00 (Sun)
  63613483200, #    local_end 2016-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613479600, #  local_start 2016-10-30 03:00:00 (Sun)
  63626180400, #    local_end 2017-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626184000, #  local_start 2017-03-26 04:00:00 (Sun)
  63644932800, #    local_end 2017-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644929200, #  local_start 2017-10-29 03:00:00 (Sun)
  63657630000, #    local_end 2018-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657633600, #  local_start 2018-03-25 04:00:00 (Sun)
  63676382400, #    local_end 2018-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676378800, #  local_start 2018-10-28 03:00:00 (Sun)
  63689684400, #    local_end 2019-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689688000, #  local_start 2019-03-31 04:00:00 (Sun)
  63707832000, #    local_end 2019-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707828400, #  local_start 2019-10-27 03:00:00 (Sun)
  63721134000, #    local_end 2020-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721137600, #  local_start 2020-03-29 04:00:00 (Sun)
  63739281600, #    local_end 2020-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739278000, #  local_start 2020-10-25 03:00:00 (Sun)
  63752583600, #    local_end 2021-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752587200, #  local_start 2021-03-28 04:00:00 (Sun)
  63771336000, #    local_end 2021-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771332400, #  local_start 2021-10-31 03:00:00 (Sun)
  63784033200, #    local_end 2022-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784036800, #  local_start 2022-03-27 04:00:00 (Sun)
  63802785600, #    local_end 2022-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802782000, #  local_start 2022-10-30 03:00:00 (Sun)
  63815482800, #    local_end 2023-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815486400, #  local_start 2023-03-26 04:00:00 (Sun)
  63834235200, #    local_end 2023-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834231600, #  local_start 2023-10-29 03:00:00 (Sun)
  63847537200, #    local_end 2024-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847540800, #  local_start 2024-03-31 04:00:00 (Sun)
  63865684800, #    local_end 2024-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865681200, #  local_start 2024-10-27 03:00:00 (Sun)
  63878986800, #    local_end 2025-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878990400, #  local_start 2025-03-30 04:00:00 (Sun)
  63897134400, #    local_end 2025-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897130800, #  local_start 2025-10-26 03:00:00 (Sun)
  63910436400, #    local_end 2026-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910440000, #  local_start 2026-03-29 04:00:00 (Sun)
  63928584000, #    local_end 2026-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928580400, #  local_start 2026-10-25 03:00:00 (Sun)
  63941886000, #    local_end 2027-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941889600, #  local_start 2027-03-28 04:00:00 (Sun)
  63960638400, #    local_end 2027-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {51}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => {},
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => {}
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EET

    $main::fatpacked{"DateTime/TimeZone/EST.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EST';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::EST;
  $DateTime::TimeZone::EST::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::EST::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  DateTime::TimeZone::INFINITY, #      utc_end
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  DateTime::TimeZone::INFINITY, #    local_end
  -18000,
  0,
  'EST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_EST

    $main::fatpacked{"DateTime/TimeZone/EST5EDT.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EST5EDT';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::EST5EDT;
  $DateTime::TimeZone::EST5EDT::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::EST5EDT::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60502402800, #      utc_end 1918-03-31 07:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60502402800, #    utc_start 1918-03-31 07:00:00 (Sun)
  60520543200, #      utc_end 1918-10-27 06:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60520543200, #    utc_start 1918-10-27 06:00:00 (Sun)
  60533852400, #      utc_end 1919-03-30 07:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  60533852400, #    utc_start 1919-03-30 07:00:00 (Sun)
  60551992800, #      utc_end 1919-10-26 06:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  60551992800, #    utc_start 1919-10-26 06:00:00 (Sun)
  61255465200, #      utc_end 1942-02-09 07:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -18000,
  0,
  'EST',
      ],
      [
  61255465200, #    utc_start 1942-02-09 07:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366273200, #    local_end 1945-08-14 19:00:00 (Tue)
  -14400,
  1,
  'EWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370287200, #      utc_end 1945-09-30 06:00:00 (Sun)
  61366273200, #  local_start 1945-08-14 19:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -14400,
  1,
  'EPT',
      ],
      [
  61370287200, #    utc_start 1945-09-30 06:00:00 (Sun)
  62051295600, #      utc_end 1967-04-30 07:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62051295600, #    utc_start 1967-04-30 07:00:00 (Sun)
  62067016800, #      utc_end 1967-10-29 06:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62067016800, #    utc_start 1967-10-29 06:00:00 (Sun)
  62082745200, #      utc_end 1968-04-28 07:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62082745200, #    utc_start 1968-04-28 07:00:00 (Sun)
  62098466400, #      utc_end 1968-10-27 06:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62098466400, #    utc_start 1968-10-27 06:00:00 (Sun)
  62114194800, #      utc_end 1969-04-27 07:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62114194800, #    utc_start 1969-04-27 07:00:00 (Sun)
  62129916000, #      utc_end 1969-10-26 06:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62129916000, #    utc_start 1969-10-26 06:00:00 (Sun)
  62145644400, #      utc_end 1970-04-26 07:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62145644400, #    utc_start 1970-04-26 07:00:00 (Sun)
  62161365600, #      utc_end 1970-10-25 06:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62161365600, #    utc_start 1970-10-25 06:00:00 (Sun)
  62177094000, #      utc_end 1971-04-25 07:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62177094000, #    utc_start 1971-04-25 07:00:00 (Sun)
  62193420000, #      utc_end 1971-10-31 06:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62193420000, #    utc_start 1971-10-31 06:00:00 (Sun)
  62209148400, #      utc_end 1972-04-30 07:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62209148400, #    utc_start 1972-04-30 07:00:00 (Sun)
  62224869600, #      utc_end 1972-10-29 06:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62224869600, #    utc_start 1972-10-29 06:00:00 (Sun)
  62240598000, #      utc_end 1973-04-29 07:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62240598000, #    utc_start 1973-04-29 07:00:00 (Sun)
  62256319200, #      utc_end 1973-10-28 06:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62256319200, #    utc_start 1973-10-28 06:00:00 (Sun)
  62262370800, #      utc_end 1974-01-06 07:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62262370800, #    utc_start 1974-01-06 07:00:00 (Sun)
  62287768800, #      utc_end 1974-10-27 06:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62287768800, #    utc_start 1974-10-27 06:00:00 (Sun)
  62298054000, #      utc_end 1975-02-23 07:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62298054000, #    utc_start 1975-02-23 07:00:00 (Sun)
  62319218400, #      utc_end 1975-10-26 06:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62319218400, #    utc_start 1975-10-26 06:00:00 (Sun)
  62334946800, #      utc_end 1976-04-25 07:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62334946800, #    utc_start 1976-04-25 07:00:00 (Sun)
  62351272800, #      utc_end 1976-10-31 06:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62351272800, #    utc_start 1976-10-31 06:00:00 (Sun)
  62366396400, #      utc_end 1977-04-24 07:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62366396400, #    utc_start 1977-04-24 07:00:00 (Sun)
  62382722400, #      utc_end 1977-10-30 06:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62382722400, #    utc_start 1977-10-30 06:00:00 (Sun)
  62398450800, #      utc_end 1978-04-30 07:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62398450800, #    utc_start 1978-04-30 07:00:00 (Sun)
  62414172000, #      utc_end 1978-10-29 06:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62414172000, #    utc_start 1978-10-29 06:00:00 (Sun)
  62429900400, #      utc_end 1979-04-29 07:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62429900400, #    utc_start 1979-04-29 07:00:00 (Sun)
  62445621600, #      utc_end 1979-10-28 06:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62445621600, #    utc_start 1979-10-28 06:00:00 (Sun)
  62461350000, #      utc_end 1980-04-27 07:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62461350000, #    utc_start 1980-04-27 07:00:00 (Sun)
  62477071200, #      utc_end 1980-10-26 06:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62477071200, #    utc_start 1980-10-26 06:00:00 (Sun)
  62492799600, #      utc_end 1981-04-26 07:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62492799600, #    utc_start 1981-04-26 07:00:00 (Sun)
  62508520800, #      utc_end 1981-10-25 06:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62508520800, #    utc_start 1981-10-25 06:00:00 (Sun)
  62524249200, #      utc_end 1982-04-25 07:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62524249200, #    utc_start 1982-04-25 07:00:00 (Sun)
  62540575200, #      utc_end 1982-10-31 06:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62540575200, #    utc_start 1982-10-31 06:00:00 (Sun)
  62555698800, #      utc_end 1983-04-24 07:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62555698800, #    utc_start 1983-04-24 07:00:00 (Sun)
  62572024800, #      utc_end 1983-10-30 06:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62572024800, #    utc_start 1983-10-30 06:00:00 (Sun)
  62587753200, #      utc_end 1984-04-29 07:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62587753200, #    utc_start 1984-04-29 07:00:00 (Sun)
  62603474400, #      utc_end 1984-10-28 06:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62603474400, #    utc_start 1984-10-28 06:00:00 (Sun)
  62619202800, #      utc_end 1985-04-28 07:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62619202800, #    utc_start 1985-04-28 07:00:00 (Sun)
  62634924000, #      utc_end 1985-10-27 06:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62634924000, #    utc_start 1985-10-27 06:00:00 (Sun)
  62650652400, #      utc_end 1986-04-27 07:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62650652400, #    utc_start 1986-04-27 07:00:00 (Sun)
  62666373600, #      utc_end 1986-10-26 06:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62666373600, #    utc_start 1986-10-26 06:00:00 (Sun)
  62680287600, #      utc_end 1987-04-05 07:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62680287600, #    utc_start 1987-04-05 07:00:00 (Sun)
  62697823200, #      utc_end 1987-10-25 06:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62697823200, #    utc_start 1987-10-25 06:00:00 (Sun)
  62711737200, #      utc_end 1988-04-03 07:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62711737200, #    utc_start 1988-04-03 07:00:00 (Sun)
  62729877600, #      utc_end 1988-10-30 06:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62729877600, #    utc_start 1988-10-30 06:00:00 (Sun)
  62743186800, #      utc_end 1989-04-02 07:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62743186800, #    utc_start 1989-04-02 07:00:00 (Sun)
  62761327200, #      utc_end 1989-10-29 06:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62761327200, #    utc_start 1989-10-29 06:00:00 (Sun)
  62774636400, #      utc_end 1990-04-01 07:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62774636400, #    utc_start 1990-04-01 07:00:00 (Sun)
  62792776800, #      utc_end 1990-10-28 06:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62792776800, #    utc_start 1990-10-28 06:00:00 (Sun)
  62806690800, #      utc_end 1991-04-07 07:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62806690800, #    utc_start 1991-04-07 07:00:00 (Sun)
  62824226400, #      utc_end 1991-10-27 06:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62824226400, #    utc_start 1991-10-27 06:00:00 (Sun)
  62838140400, #      utc_end 1992-04-05 07:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62838140400, #    utc_start 1992-04-05 07:00:00 (Sun)
  62855676000, #      utc_end 1992-10-25 06:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62855676000, #    utc_start 1992-10-25 06:00:00 (Sun)
  62869590000, #      utc_end 1993-04-04 07:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62869590000, #    utc_start 1993-04-04 07:00:00 (Sun)
  62887730400, #      utc_end 1993-10-31 06:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62887730400, #    utc_start 1993-10-31 06:00:00 (Sun)
  62901039600, #      utc_end 1994-04-03 07:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62901039600, #    utc_start 1994-04-03 07:00:00 (Sun)
  62919180000, #      utc_end 1994-10-30 06:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62919180000, #    utc_start 1994-10-30 06:00:00 (Sun)
  62932489200, #      utc_end 1995-04-02 07:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62932489200, #    utc_start 1995-04-02 07:00:00 (Sun)
  62950629600, #      utc_end 1995-10-29 06:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62950629600, #    utc_start 1995-10-29 06:00:00 (Sun)
  62964543600, #      utc_end 1996-04-07 07:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62964543600, #    utc_start 1996-04-07 07:00:00 (Sun)
  62982079200, #      utc_end 1996-10-27 06:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  62982079200, #    utc_start 1996-10-27 06:00:00 (Sun)
  62995993200, #      utc_end 1997-04-06 07:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  62995993200, #    utc_start 1997-04-06 07:00:00 (Sun)
  63013528800, #      utc_end 1997-10-26 06:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63013528800, #    utc_start 1997-10-26 06:00:00 (Sun)
  63027442800, #      utc_end 1998-04-05 07:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63027442800, #    utc_start 1998-04-05 07:00:00 (Sun)
  63044978400, #      utc_end 1998-10-25 06:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63044978400, #    utc_start 1998-10-25 06:00:00 (Sun)
  63058892400, #      utc_end 1999-04-04 07:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63058892400, #    utc_start 1999-04-04 07:00:00 (Sun)
  63077032800, #      utc_end 1999-10-31 06:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63077032800, #    utc_start 1999-10-31 06:00:00 (Sun)
  63090342000, #      utc_end 2000-04-02 07:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63090342000, #    utc_start 2000-04-02 07:00:00 (Sun)
  63108482400, #      utc_end 2000-10-29 06:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63108482400, #    utc_start 2000-10-29 06:00:00 (Sun)
  63121791600, #      utc_end 2001-04-01 07:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63121791600, #    utc_start 2001-04-01 07:00:00 (Sun)
  63139932000, #      utc_end 2001-10-28 06:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63139932000, #    utc_start 2001-10-28 06:00:00 (Sun)
  63153846000, #      utc_end 2002-04-07 07:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63153846000, #    utc_start 2002-04-07 07:00:00 (Sun)
  63171381600, #      utc_end 2002-10-27 06:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63171381600, #    utc_start 2002-10-27 06:00:00 (Sun)
  63185295600, #      utc_end 2003-04-06 07:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63185295600, #    utc_start 2003-04-06 07:00:00 (Sun)
  63202831200, #      utc_end 2003-10-26 06:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63202831200, #    utc_start 2003-10-26 06:00:00 (Sun)
  63216745200, #      utc_end 2004-04-04 07:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63216745200, #    utc_start 2004-04-04 07:00:00 (Sun)
  63234885600, #      utc_end 2004-10-31 06:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63234885600, #    utc_start 2004-10-31 06:00:00 (Sun)
  63248194800, #      utc_end 2005-04-03 07:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63248194800, #    utc_start 2005-04-03 07:00:00 (Sun)
  63266335200, #      utc_end 2005-10-30 06:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63266335200, #    utc_start 2005-10-30 06:00:00 (Sun)
  63279644400, #      utc_end 2006-04-02 07:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63279644400, #    utc_start 2006-04-02 07:00:00 (Sun)
  63297784800, #      utc_end 2006-10-29 06:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63297784800, #    utc_start 2006-10-29 06:00:00 (Sun)
  63309279600, #      utc_end 2007-03-11 07:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63309279600, #    utc_start 2007-03-11 07:00:00 (Sun)
  63329839200, #      utc_end 2007-11-04 06:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63329839200, #    utc_start 2007-11-04 06:00:00 (Sun)
  63340729200, #      utc_end 2008-03-09 07:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63340729200, #    utc_start 2008-03-09 07:00:00 (Sun)
  63361288800, #      utc_end 2008-11-02 06:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63361288800, #    utc_start 2008-11-02 06:00:00 (Sun)
  63372178800, #      utc_end 2009-03-08 07:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63372178800, #    utc_start 2009-03-08 07:00:00 (Sun)
  63392738400, #      utc_end 2009-11-01 06:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63392738400, #    utc_start 2009-11-01 06:00:00 (Sun)
  63404233200, #      utc_end 2010-03-14 07:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63404233200, #    utc_start 2010-03-14 07:00:00 (Sun)
  63424792800, #      utc_end 2010-11-07 06:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63424792800, #    utc_start 2010-11-07 06:00:00 (Sun)
  63435682800, #      utc_end 2011-03-13 07:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63435682800, #    utc_start 2011-03-13 07:00:00 (Sun)
  63456242400, #      utc_end 2011-11-06 06:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63456242400, #    utc_start 2011-11-06 06:00:00 (Sun)
  63467132400, #      utc_end 2012-03-11 07:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63467132400, #    utc_start 2012-03-11 07:00:00 (Sun)
  63487692000, #      utc_end 2012-11-04 06:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63487692000, #    utc_start 2012-11-04 06:00:00 (Sun)
  63498582000, #      utc_end 2013-03-10 07:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63498582000, #    utc_start 2013-03-10 07:00:00 (Sun)
  63519141600, #      utc_end 2013-11-03 06:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63519141600, #    utc_start 2013-11-03 06:00:00 (Sun)
  63530031600, #      utc_end 2014-03-09 07:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63530031600, #    utc_start 2014-03-09 07:00:00 (Sun)
  63550591200, #      utc_end 2014-11-02 06:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63550591200, #    utc_start 2014-11-02 06:00:00 (Sun)
  63561481200, #      utc_end 2015-03-08 07:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63561481200, #    utc_start 2015-03-08 07:00:00 (Sun)
  63582040800, #      utc_end 2015-11-01 06:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63582040800, #    utc_start 2015-11-01 06:00:00 (Sun)
  63593535600, #      utc_end 2016-03-13 07:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63593535600, #    utc_start 2016-03-13 07:00:00 (Sun)
  63614095200, #      utc_end 2016-11-06 06:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63614095200, #    utc_start 2016-11-06 06:00:00 (Sun)
  63624985200, #      utc_end 2017-03-12 07:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63624985200, #    utc_start 2017-03-12 07:00:00 (Sun)
  63645544800, #      utc_end 2017-11-05 06:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63645544800, #    utc_start 2017-11-05 06:00:00 (Sun)
  63656434800, #      utc_end 2018-03-11 07:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63656434800, #    utc_start 2018-03-11 07:00:00 (Sun)
  63676994400, #      utc_end 2018-11-04 06:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63676994400, #    utc_start 2018-11-04 06:00:00 (Sun)
  63687884400, #      utc_end 2019-03-10 07:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63687884400, #    utc_start 2019-03-10 07:00:00 (Sun)
  63708444000, #      utc_end 2019-11-03 06:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63708444000, #    utc_start 2019-11-03 06:00:00 (Sun)
  63719334000, #      utc_end 2020-03-08 07:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63719334000, #    utc_start 2020-03-08 07:00:00 (Sun)
  63739893600, #      utc_end 2020-11-01 06:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63739893600, #    utc_start 2020-11-01 06:00:00 (Sun)
  63751388400, #      utc_end 2021-03-14 07:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63751388400, #    utc_start 2021-03-14 07:00:00 (Sun)
  63771948000, #      utc_end 2021-11-07 06:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63771948000, #    utc_start 2021-11-07 06:00:00 (Sun)
  63782838000, #      utc_end 2022-03-13 07:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63782838000, #    utc_start 2022-03-13 07:00:00 (Sun)
  63803397600, #      utc_end 2022-11-06 06:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63803397600, #    utc_start 2022-11-06 06:00:00 (Sun)
  63814287600, #      utc_end 2023-03-12 07:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63814287600, #    utc_start 2023-03-12 07:00:00 (Sun)
  63834847200, #      utc_end 2023-11-05 06:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63834847200, #    utc_start 2023-11-05 06:00:00 (Sun)
  63845737200, #      utc_end 2024-03-10 07:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63845737200, #    utc_start 2024-03-10 07:00:00 (Sun)
  63866296800, #      utc_end 2024-11-03 06:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63866296800, #    utc_start 2024-11-03 06:00:00 (Sun)
  63877186800, #      utc_end 2025-03-09 07:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63877186800, #    utc_start 2025-03-09 07:00:00 (Sun)
  63897746400, #      utc_end 2025-11-02 06:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63897746400, #    utc_start 2025-11-02 06:00:00 (Sun)
  63908636400, #      utc_end 2026-03-08 07:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63908636400, #    utc_start 2026-03-08 07:00:00 (Sun)
  63929196000, #      utc_end 2026-11-01 06:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
      [
  63929196000, #    utc_start 2026-11-01 06:00:00 (Sun)
  63940690800, #      utc_end 2027-03-14 07:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -18000,
  0,
  'EST',
      ],
      [
  63940690800, #    utc_start 2027-03-14 07:00:00 (Sun)
  63961250400, #      utc_end 2027-11-07 06:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -14400,
  1,
  'EDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {65}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -18000 }
  
  my $last_observance = bless( {
    'format' => 'E%sT',
    'gmtoff' => '-5:00',
    'local_start_datetime' => {},
    'offset_from_std' => 0,
    'offset_from_utc' => -18000,
    'until' => [],
    'utc_start_datetime' => {}
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EST5EDT

    $main::fatpacked{"DateTime/TimeZone/Europe/Amsterdam.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_AMSTERDAM';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Amsterdam;
  $DateTime::TimeZone::Europe::Amsterdam::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Amsterdam::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  57875470828, #      utc_end 1834-12-31 23:40:28 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  57875472000, #    local_end 1835-01-01 00:00:00 (Thu)
  1172,
  0,
  'LMT',
      ],
      [
  57875470828, #    utc_start 1834-12-31 23:40:28 (Wed)
  60441982828, #      utc_end 1916-04-30 23:40:28 (Sun)
  57875472000, #  local_start 1835-01-01 00:00:00 (Thu)
  60441984000, #    local_end 1916-05-01 00:00:00 (Mon)
  1172,
  0,
  'AMT',
      ],
      [
  60441982828, #    utc_start 1916-04-30 23:40:28 (Sun)
  60455198428, #      utc_end 1916-09-30 22:40:28 (Sat)
  60441987600, #  local_start 1916-05-01 01:00:00 (Mon)
  60455203200, #    local_end 1916-10-01 00:00:00 (Sun)
  4772,
  1,
  'NST',
      ],
      [
  60455198428, #    utc_start 1916-09-30 22:40:28 (Sat)
  60472230028, #      utc_end 1917-04-16 01:40:28 (Mon)
  60455199600, #  local_start 1916-09-30 23:00:00 (Sat)
  60472231200, #    local_end 1917-04-16 02:00:00 (Mon)
  1172,
  0,
  'AMT',
      ],
      [
  60472230028, #    utc_start 1917-04-16 01:40:28 (Mon)
  60485535628, #      utc_end 1917-09-17 01:40:28 (Mon)
  60472234800, #  local_start 1917-04-16 03:00:00 (Mon)
  60485540400, #    local_end 1917-09-17 03:00:00 (Mon)
  4772,
  1,
  'NST',
      ],
      [
  60485535628, #    utc_start 1917-09-17 01:40:28 (Mon)
  60502470028, #      utc_end 1918-04-01 01:40:28 (Mon)
  60485536800, #  local_start 1917-09-17 02:00:00 (Mon)
  60502471200, #    local_end 1918-04-01 02:00:00 (Mon)
  1172,
  0,
  'AMT',
      ],
      [
  60502470028, #    utc_start 1918-04-01 01:40:28 (Mon)
  60518194828, #      utc_end 1918-09-30 01:40:28 (Mon)
  60502474800, #  local_start 1918-04-01 03:00:00 (Mon)
  60518199600, #    local_end 1918-09-30 03:00:00 (Mon)
  4772,
  1,
  'NST',
      ],
      [
  60518194828, #    utc_start 1918-09-30 01:40:28 (Mon)
  60534524428, #      utc_end 1919-04-07 01:40:28 (Mon)
  60518196000, #  local_start 1918-09-30 02:00:00 (Mon)
  60534525600, #    local_end 1919-04-07 02:00:00 (Mon)
  1172,
  0,
  'AMT',
      ],
      [
  60534524428, #    utc_start 1919-04-07 01:40:28 (Mon)
  60549644428, #      utc_end 1919-09-29 01:40:28 (Mon)
  60534529200, #  local_start 1919-04-07 03:00:00 (Mon)
  60549649200, #    local_end 1919-09-29 03:00:00 (Mon)
  4772,
  1,
  'NST',
      ],
      [
  60549644428, #    utc_start 1919-09-29 01:40:28 (Mon)
  60565974028, #      utc_end 1920-04-05 01:40:28 (Mon)
  60549645600, #  local_start 1919-09-29 02:00:00 (Mon)
  60565975200, #    local_end 1920-04-05 02:00:00 (Mon)
  1172,
  0,
  'AMT',
      ],
      [
  60565974028, #    utc_start 1920-04-05 01:40:28 (Mon)
  60581094028, #      utc_end 1920-09-27 01:40:28 (Mon)
  60565978800, #  local_start 1920-04-05 03:00:00 (Mon)
  60581098800, #    local_end 1920-09-27 03:00:00 (Mon)
  4772,
  1,
  'NST',
      ],
      [
  60581094028, #    utc_start 1920-09-27 01:40:28 (Mon)
  60597423628, #      utc_end 1921-04-04 01:40:28 (Mon)
  60581095200, #  local_start 1920-09-27 02:00:00 (Mon)
  60597424800, #    local_end 1921-04-04 02:00:00 (Mon)
  1172,
  0,
  'AMT',
      ],
      [
  60597423628, #    utc_start 1921-04-04 01:40:28 (Mon)
  60612543628, #      utc_end 1921-09-26 01:40:28 (Mon)
  60597428400, #  local_start 1921-04-04 03:00:00 (Mon)
  60612548400, #    local_end 1921-09-26 03:00:00 (Mon)
  4772,
  1,
  'NST',
      ],
      [
  60612543628, #    utc_start 1921-09-26 01:40:28 (Mon)
  60628182028, #      utc_end 1922-03-26 01:40:28 (Sun)
  60612544800, #  local_start 1921-09-26 02:00:00 (Mon)
  60628183200, #    local_end 1922-03-26 02:00:00 (Sun)
  1172,
  0,
  'AMT',
      ],
      [
  60628182028, #    utc_start 1922-03-26 01:40:28 (Sun)
  60645116428, #      utc_end 1922-10-08 01:40:28 (Sun)
  60628186800, #  local_start 1922-03-26 03:00:00 (Sun)
  60645121200, #    local_end 1922-10-08 03:00:00 (Sun)
  4772,
  1,
  'NST',
      ],
      [
  60645116428, #    utc_start 1922-10-08 01:40:28 (Sun)
  60665506828, #      utc_end 1923-06-01 01:40:28 (Fri)
  60645117600, #  local_start 1922-10-08 02:00:00 (Sun)
  60665508000, #    local_end 1923-06-01 02:00:00 (Fri)
  1172,
  0,
  'AMT',
      ],
      [
  60665506828, #    utc_start 1923-06-01 01:40:28 (Fri)
  60676566028, #      utc_end 1923-10-07 01:40:28 (Sun)
  60665511600, #  local_start 1923-06-01 03:00:00 (Fri)
  60676570800, #    local_end 1923-10-07 03:00:00 (Sun)
  4772,
  1,
  'NST',
      ],
      [
  60676566028, #    utc_start 1923-10-07 01:40:28 (Sun)
  60691686028, #      utc_end 1924-03-30 01:40:28 (Sun)
  60676567200, #  local_start 1923-10-07 02:00:00 (Sun)
  60691687200, #    local_end 1924-03-30 02:00:00 (Sun)
  1172,
  0,
  'AMT',
      ],
      [
  60691686028, #    utc_start 1924-03-30 01:40:28 (Sun)
  60708015628, #      utc_end 1924-10-05 01:40:28 (Sun)
  60691690800, #  local_start 1924-03-30 03:00:00 (Sun)
  60708020400, #    local_end 1924-10-05 03:00:00 (Sun)
  4772,
  1,
  'NST',
      ],
      [
  60708015628, #    utc_start 1924-10-05 01:40:28 (Sun)
  60729010828, #      utc_end 1925-06-05 01:40:28 (Fri)
  60708016800, #  local_start 1924-10-05 02:00:00 (Sun)
  60729012000, #    local_end 1925-06-05 02:00:00 (Fri)
  1172,
  0,
  'AMT',
      ],
      [
  60729010828, #    utc_start 1925-06-05 01:40:28 (Fri)
  60739465228, #      utc_end 1925-10-04 01:40:28 (Sun)
  60729015600, #  local_start 1925-06-05 03:00:00 (Fri)
  60739470000, #    local_end 1925-10-04 03:00:00 (Sun)
  4772,
  1,
  'NST',
      ],
      [
  60739465228, #    utc_start 1925-10-04 01:40:28 (Sun)
  60758732428, #      utc_end 1926-05-15 01:40:28 (Sat)
  60739466400, #  local_start 1925-10-04 02:00:00 (Sun)
  60758733600, #    local_end 1926-05-15 02:00:00 (Sat)
  1172,
  0,
  'AMT',
      ],
      [
  60758732428, #    utc_start 1926-05-15 01:40:28 (Sat)
  60770914828, #      utc_end 1926-10-03 01:40:28 (Sun)
  60758737200, #  local_start 1926-05-15 03:00:00 (Sat)
  60770919600, #    local_end 1926-10-03 03:00:00 (Sun)
  4772,
  1,
  'NST',
      ],
      [
  60770914828, #    utc_start 1926-10-03 01:40:28 (Sun)
  60790268428, #      utc_end 1927-05-15 01:40:28 (Sun)
  60770916000, #  local_start 1926-10-03 02:00:00 (Sun)
  60790269600, #    local_end 1927-05-15 02:00:00 (Sun)
  1172,
  0,
  'AMT',
      ],
      [
  60790268428, #    utc_start 1927-05-15 01:40:28 (Sun)
  60802364428, #      utc_end 1927-10-02 01:40:28 (Sun)
  60790273200, #  local_start 1927-05-15 03:00:00 (Sun)
  60802369200, #    local_end 1927-10-02 03:00:00 (Sun)
  4772,
  1,
  'NST',
      ],
      [
  60802364428, #    utc_start 1927-10-02 01:40:28 (Sun)
  60821890828, #      utc_end 1928-05-15 01:40:28 (Tue)
  60802365600, #  local_start 1927-10-02 02:00:00 (Sun)
  60821892000, #    local_end 1928-05-15 02:00:00 (Tue)
  1172,
  0,
  'AMT',
      ],
      [
  60821890828, #    utc_start 1928-05-15 01:40:28 (Tue)
  60834418828, #      utc_end 1928-10-07 01:40:28 (Sun)
  60821895600, #  local_start 1928-05-15 03:00:00 (Tue)
  60834423600, #    local_end 1928-10-07 03:00:00 (Sun)
  4772,
  1,
  'NST',
      ],
      [
  60834418828, #    utc_start 1928-10-07 01:40:28 (Sun)
  60853426828, #      utc_end 1929-05-15 01:40:28 (Wed)
  60834420000, #  local_start 1928-10-07 02:00:00 (Sun)
  60853428000, #    local_end 1929-05-15 02:00:00 (Wed)
  1172,
  0,
  'AMT',
      ],
      [
  60853426828, #    utc_start 1929-05-15 01:40:28 (Wed)
  60865868428, #      utc_end 1929-10-06 01:40:28 (Sun)
  60853431600, #  local_start 1929-05-15 03:00:00 (Wed)
  60865873200, #    local_end 1929-10-06 03:00:00 (Sun)
  4772,
  1,
  'NST',
      ],
      [
  60865868428, #    utc_start 1929-10-06 01:40:28 (Sun)
  60884962828, #      utc_end 1930-05-15 01:40:28 (Thu)
  60865869600, #  local_start 1929-10-06 02:00:00 (Sun)
  60884964000, #    local_end 1930-05-15 02:00:00 (Thu)
  1172,
  0,
  'AMT',
      ],
      [
  60884962828, #    utc_start 1930-05-15 01:40:28 (Thu)
  60897318028, #      utc_end 1930-10-05 01:40:28 (Sun)
  60884967600, #  local_start 1930-05-15 03:00:00 (Thu)
  60897322800, #    local_end 1930-10-05 03:00:00 (Sun)
  4772,
  1,
  'NST',
      ],
      [
  60897318028, #    utc_start 1930-10-05 01:40:28 (Sun)
  60916498828, #      utc_end 1931-05-15 01:40:28 (Fri)
  60897319200, #  local_start 1930-10-05 02:00:00 (Sun)
  60916500000, #    local_end 1931-05-15 02:00:00 (Fri)
  1172,
  0,
  'AMT',
      ],
      [
  60916498828, #    utc_start 1931-05-15 01:40:28 (Fri)
  60928767628, #      utc_end 1931-10-04 01:40:28 (Sun)
  60916503600, #  local_start 1931-05-15 03:00:00 (Fri)
  60928772400, #    local_end 1931-10-04 03:00:00 (Sun)
  4772,
  1,
  'NST',
      ],
      [
  60928767628, #    utc_start 1931-10-04 01:40:28 (Sun)
  60948726028, #      utc_end 1932-05-22 01:40:28 (Sun)
  60928768800, #  local_start 1931-10-04 02:00:00 (Sun)
  60948727200, #    local_end 1932-05-22 02:00:00 (Sun)
  1172,
  0,
  'AMT',
      ],
      [
  60948726028, #    utc_start 1932-05-22 01:40:28 (Sun)
  60960217228, #      utc_end 1932-10-02 01:40:28 (Sun)
  60948730800, #  local_start 1932-05-22 03:00:00 (Sun)
  60960222000, #    local_end 1932-10-02 03:00:00 (Sun)
  4772,
  1,
  'NST',
      ],
      [
  60960217228, #    utc_start 1932-10-02 01:40:28 (Sun)
  60979657228, #      utc_end 1933-05-15 01:40:28 (Mon)
  60960218400, #  local_start 1932-10-02 02:00:00 (Sun)
  60979658400, #    local_end 1933-05-15 02:00:00 (Mon)
  1172,
  0,
  'AMT',
      ],
      [
  60979657228, #    utc_start 1933-05-15 01:40:28 (Mon)
  60992271628, #      utc_end 1933-10-08 01:40:28 (Sun)
  60979662000, #  local_start 1933-05-15 03:00:00 (Mon)
  60992276400, #    local_end 1933-10-08 03:00:00 (Sun)
  4772,
  1,
  'NST',
      ],
      [
  60992271628, #    utc_start 1933-10-08 01:40:28 (Sun)
  61011193228, #      utc_end 1934-05-15 01:40:28 (Tue)
  60992272800, #  local_start 1933-10-08 02:00:00 (Sun)
  61011194400, #    local_end 1934-05-15 02:00:00 (Tue)
  1172,
  0,
  'AMT',
      ],
      [
  61011193228, #    utc_start 1934-05-15 01:40:28 (Tue)
  61023721228, #      utc_end 1934-10-07 01:40:28 (Sun)
  61011198000, #  local_start 1934-05-15 03:00:00 (Tue)
  61023726000, #    local_end 1934-10-07 03:00:00 (Sun)
  4772,
  1,
  'NST',
      ],
      [
  61023721228, #    utc_start 1934-10-07 01:40:28 (Sun)
  61042729228, #      utc_end 1935-05-15 01:40:28 (Wed)
  61023722400, #  local_start 1934-10-07 02:00:00 (Sun)
  61042730400, #    local_end 1935-05-15 02:00:00 (Wed)
  1172,
  0,
  'AMT',
      ],
      [
  61042729228, #    utc_start 1935-05-15 01:40:28 (Wed)
  61055170828, #      utc_end 1935-10-06 01:40:28 (Sun)
  61042734000, #  local_start 1935-05-15 03:00:00 (Wed)
  61055175600, #    local_end 1935-10-06 03:00:00 (Sun)
  4772,
  1,
  'NST',
      ],
      [
  61055170828, #    utc_start 1935-10-06 01:40:28 (Sun)
  61074351628, #      utc_end 1936-05-15 01:40:28 (Fri)
  61055172000, #  local_start 1935-10-06 02:00:00 (Sun)
  61074352800, #    local_end 1936-05-15 02:00:00 (Fri)
  1172,
  0,
  'AMT',
      ],
      [
  61074351628, #    utc_start 1936-05-15 01:40:28 (Fri)
  61086620428, #      utc_end 1936-10-04 01:40:28 (Sun)
  61074356400, #  local_start 1936-05-15 03:00:00 (Fri)
  61086625200, #    local_end 1936-10-04 03:00:00 (Sun)
  4772,
  1,
  'NST',
      ],
      [
  61086620428, #    utc_start 1936-10-04 01:40:28 (Sun)
  61106492428, #      utc_end 1937-05-22 01:40:28 (Sat)
  61086621600, #  local_start 1936-10-04 02:00:00 (Sun)
  61106493600, #    local_end 1937-05-22 02:00:00 (Sat)
  1172,
  0,
  'AMT',
      ],
      [
  61106492428, #    utc_start 1937-05-22 01:40:28 (Sat)
  61109937628, #      utc_end 1937-06-30 22:40:28 (Wed)
  61106497200, #  local_start 1937-05-22 03:00:00 (Sat)
  61109942400, #    local_end 1937-07-01 00:00:00 (Thu)
  4772,
  1,
  'NST',
      ],
      [
  61109937628, #    utc_start 1937-06-30 22:40:28 (Wed)
  61118070000, #      utc_end 1937-10-03 01:40:00 (Sun)
  61109942428, #  local_start 1937-07-01 00:00:28 (Thu)
  61118074800, #    local_end 1937-10-03 03:00:00 (Sun)
  4800,
  1,
  'NEST',
      ],
      [
  61118070000, #    utc_start 1937-10-03 01:40:00 (Sun)
  61137423600, #      utc_end 1938-05-15 01:40:00 (Sun)
  61118071200, #  local_start 1937-10-03 02:00:00 (Sun)
  61137424800, #    local_end 1938-05-15 02:00:00 (Sun)
  1200,
  0,
  'NET',
      ],
      [
  61137423600, #    utc_start 1938-05-15 01:40:00 (Sun)
  61149519600, #      utc_end 1938-10-02 01:40:00 (Sun)
  61137428400, #  local_start 1938-05-15 03:00:00 (Sun)
  61149524400, #    local_end 1938-10-02 03:00:00 (Sun)
  4800,
  1,
  'NEST',
      ],
      [
  61149519600, #    utc_start 1938-10-02 01:40:00 (Sun)
  61168959600, #      utc_end 1939-05-15 01:40:00 (Mon)
  61149520800, #  local_start 1938-10-02 02:00:00 (Sun)
  61168960800, #    local_end 1939-05-15 02:00:00 (Mon)
  1200,
  0,
  'NET',
      ],
      [
  61168959600, #    utc_start 1939-05-15 01:40:00 (Mon)
  61181574000, #      utc_end 1939-10-08 01:40:00 (Sun)
  61168964400, #  local_start 1939-05-15 03:00:00 (Mon)
  61181578800, #    local_end 1939-10-08 03:00:00 (Sun)
  4800,
  1,
  'NEST',
      ],
      [
  61181574000, #    utc_start 1939-10-08 01:40:00 (Sun)
  61200661200, #      utc_end 1940-05-15 23:40:00 (Wed)
  61181575200, #  local_start 1939-10-08 02:00:00 (Sun)
  61200662400, #    local_end 1940-05-16 00:00:00 (Thu)
  1200,
  0,
  'NET',
      ],
      [
  61200661200, #    utc_start 1940-05-15 23:40:00 (Wed)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61200668400, #  local_start 1940-05-16 01:40:00 (Thu)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61338906000, #      utc_end 1944-10-02 01:00:00 (Mon)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61338913200, #    local_end 1944-10-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61338906000, #    utc_start 1944-10-02 01:00:00 (Mon)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61338909600, #  local_start 1944-10-02 02:00:00 (Mon)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61369059600, #      utc_end 1945-09-16 01:00:00 (Sun)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61369066800, #    local_end 1945-09-16 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61369059600, #    utc_start 1945-09-16 01:00:00 (Sun)
  62356604400, #      utc_end 1976-12-31 23:00:00 (Fri)
  61369063200, #  local_start 1945-09-16 02:00:00 (Sun)
  62356608000, #    local_end 1977-01-01 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62356604400, #    utc_start 1976-12-31 23:00:00 (Fri)
  62364560400, #      utc_end 1977-04-03 01:00:00 (Sun)
  62356608000, #  local_start 1977-01-01 00:00:00 (Sat)
  62364564000, #    local_end 1977-04-03 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62364560400, #    utc_start 1977-04-03 01:00:00 (Sun)
  62379680400, #      utc_end 1977-09-25 01:00:00 (Sun)
  62364567600, #  local_start 1977-04-03 03:00:00 (Sun)
  62379687600, #    local_end 1977-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62379680400, #    utc_start 1977-09-25 01:00:00 (Sun)
  62396010000, #      utc_end 1978-04-02 01:00:00 (Sun)
  62379684000, #  local_start 1977-09-25 02:00:00 (Sun)
  62396013600, #    local_end 1978-04-02 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62396010000, #    utc_start 1978-04-02 01:00:00 (Sun)
  62411734800, #      utc_end 1978-10-01 01:00:00 (Sun)
  62396017200, #  local_start 1978-04-02 03:00:00 (Sun)
  62411742000, #    local_end 1978-10-01 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62411734800, #    utc_start 1978-10-01 01:00:00 (Sun)
  62427459600, #      utc_end 1979-04-01 01:00:00 (Sun)
  62411738400, #  local_start 1978-10-01 02:00:00 (Sun)
  62427463200, #    local_end 1979-04-01 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62427459600, #    utc_start 1979-04-01 01:00:00 (Sun)
  62443184400, #      utc_end 1979-09-30 01:00:00 (Sun)
  62427466800, #  local_start 1979-04-01 03:00:00 (Sun)
  62443191600, #    local_end 1979-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62443184400, #    utc_start 1979-09-30 01:00:00 (Sun)
  62459514000, #      utc_end 1980-04-06 01:00:00 (Sun)
  62443188000, #  local_start 1979-09-30 02:00:00 (Sun)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62459514000, #    utc_start 1980-04-06 01:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474641200, #    local_end 1980-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474637600, #  local_start 1980-09-28 02:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {80}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721720,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721720,
      'utc_rd_secs' => 0,
      'utc_year' => 1978
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721719,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721719,
      'utc_rd_secs' => 82800,
      'utc_year' => 1977
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_AMSTERDAM

    $main::fatpacked{"DateTime/TimeZone/Europe/Andorra.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_ANDORRA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Andorra;
  $DateTime::TimeZone::Europe::Andorra::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Andorra::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958230036, #      utc_end 1900-12-31 23:53:56 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  364,
  0,
  'LMT',
      ],
      [
  59958230036, #    utc_start 1900-12-31 23:53:56 (Mon)
  61401801600, #      utc_end 1946-09-30 00:00:00 (Mon)
  59958230036, #  local_start 1900-12-31 23:53:56 (Mon)
  61401801600, #    local_end 1946-09-30 00:00:00 (Mon)
  0,
  0,
  'WET',
      ],
      [
  61401801600, #    utc_start 1946-09-30 00:00:00 (Mon)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  61401805200, #  local_start 1946-09-30 01:00:00 (Mon)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {43}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724731,
      'local_rd_secs' => 10800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724731,
      'utc_rd_secs' => 10800,
      'utc_year' => 1986
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724731,
      'local_rd_secs' => 3600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724731,
      'utc_rd_secs' => 3600,
      'utc_year' => 1986
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_ANDORRA

    $main::fatpacked{"DateTime/TimeZone/Europe/Astrakhan.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_ASTRAKHAN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Astrakhan;
  $DateTime::TimeZone::Europe::Astrakhan::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Astrakhan::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60694433268, #      utc_end 1924-04-30 20:47:48 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60694444800, #    local_end 1924-05-01 00:00:00 (Thu)
  11532,
  0,
  'LMT',
      ],
      [
  60694433268, #    utc_start 1924-04-30 20:47:48 (Wed)
  60888142800, #      utc_end 1930-06-20 21:00:00 (Fri)
  60694444068, #  local_start 1924-04-30 23:47:48 (Wed)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  10800,
  0,
  '+03',
      ],
      [
  60888142800, #    utc_start 1930-06-20 21:00:00 (Fri)
  62490600000, #      utc_end 1981-03-31 20:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  14400,
  0,
  '+04',
      ],
      [
  62490600000, #    utc_start 1981-03-31 20:00:00 (Tue)
  62506407600, #      utc_end 1981-09-30 19:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  18000,
  1,
  '+05',
      ],
      [
  62506407600, #    utc_start 1981-09-30 19:00:00 (Wed)
  62522136000, #      utc_end 1982-03-31 20:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  14400,
  0,
  '+04',
      ],
      [
  62522136000, #    utc_start 1982-03-31 20:00:00 (Wed)
  62537943600, #      utc_end 1982-09-30 19:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  18000,
  1,
  '+05',
      ],
      [
  62537943600, #    utc_start 1982-09-30 19:00:00 (Thu)
  62553672000, #      utc_end 1983-03-31 20:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  14400,
  0,
  '+04',
      ],
      [
  62553672000, #    utc_start 1983-03-31 20:00:00 (Thu)
  62569479600, #      utc_end 1983-09-30 19:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  18000,
  1,
  '+05',
      ],
      [
  62569479600, #    utc_start 1983-09-30 19:00:00 (Fri)
  62585294400, #      utc_end 1984-03-31 20:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62585294400, #    utc_start 1984-03-31 20:00:00 (Sat)
  62601026400, #      utc_end 1984-09-29 22:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62601026400, #    utc_start 1984-09-29 22:00:00 (Sat)
  62616751200, #      utc_end 1985-03-30 22:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62616751200, #    utc_start 1985-03-30 22:00:00 (Sat)
  62632476000, #      utc_end 1985-09-28 22:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62632476000, #    utc_start 1985-09-28 22:00:00 (Sat)
  62648200800, #      utc_end 1986-03-29 22:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62648200800, #    utc_start 1986-03-29 22:00:00 (Sat)
  62663925600, #      utc_end 1986-09-27 22:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62663925600, #    utc_start 1986-09-27 22:00:00 (Sat)
  62679650400, #      utc_end 1987-03-28 22:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62679650400, #    utc_start 1987-03-28 22:00:00 (Sat)
  62695375200, #      utc_end 1987-09-26 22:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62695375200, #    utc_start 1987-09-26 22:00:00 (Sat)
  62711100000, #      utc_end 1988-03-26 22:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62711100000, #    utc_start 1988-03-26 22:00:00 (Sat)
  62726824800, #      utc_end 1988-09-24 22:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62726824800, #    utc_start 1988-09-24 22:00:00 (Sat)
  62742549600, #      utc_end 1989-03-25 22:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62742549600, #    utc_start 1989-03-25 22:00:00 (Sat)
  62758278000, #      utc_end 1989-09-23 23:00:00 (Sat)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62758278000, #    utc_start 1989-09-23 23:00:00 (Sat)
  62774002800, #      utc_end 1990-03-24 23:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62774002800, #    utc_start 1990-03-24 23:00:00 (Sat)
  62790332400, #      utc_end 1990-09-29 23:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62790332400, #    utc_start 1990-09-29 23:00:00 (Sat)
  62806057200, #      utc_end 1991-03-30 23:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62806057200, #    utc_start 1991-03-30 23:00:00 (Sat)
  62837503200, #      utc_end 1992-03-28 22:00:00 (Sat)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62837503200, #    utc_start 1992-03-28 22:00:00 (Sat)
  62853231600, #      utc_end 1992-09-26 23:00:00 (Sat)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62853231600, #    utc_start 1992-09-26 23:00:00 (Sat)
  62868956400, #      utc_end 1993-03-27 23:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62868956400, #    utc_start 1993-03-27 23:00:00 (Sat)
  62884681200, #      utc_end 1993-09-25 23:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62884681200, #    utc_start 1993-09-25 23:00:00 (Sat)
  62900406000, #      utc_end 1994-03-26 23:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62900406000, #    utc_start 1994-03-26 23:00:00 (Sat)
  62916130800, #      utc_end 1994-09-24 23:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62916130800, #    utc_start 1994-09-24 23:00:00 (Sat)
  62931855600, #      utc_end 1995-03-25 23:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62931855600, #    utc_start 1995-03-25 23:00:00 (Sat)
  62947580400, #      utc_end 1995-09-23 23:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62947580400, #    utc_start 1995-09-23 23:00:00 (Sat)
  62963910000, #      utc_end 1996-03-30 23:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62963910000, #    utc_start 1996-03-30 23:00:00 (Sat)
  62982054000, #      utc_end 1996-10-26 23:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62982054000, #    utc_start 1996-10-26 23:00:00 (Sat)
  62995359600, #      utc_end 1997-03-29 23:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62995359600, #    utc_start 1997-03-29 23:00:00 (Sat)
  63013503600, #      utc_end 1997-10-25 23:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63013503600, #    utc_start 1997-10-25 23:00:00 (Sat)
  63026809200, #      utc_end 1998-03-28 23:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63026809200, #    utc_start 1998-03-28 23:00:00 (Sat)
  63044953200, #      utc_end 1998-10-24 23:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63044953200, #    utc_start 1998-10-24 23:00:00 (Sat)
  63058258800, #      utc_end 1999-03-27 23:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63058258800, #    utc_start 1999-03-27 23:00:00 (Sat)
  63077007600, #      utc_end 1999-10-30 23:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63077007600, #    utc_start 1999-10-30 23:00:00 (Sat)
  63089708400, #      utc_end 2000-03-25 23:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63089708400, #    utc_start 2000-03-25 23:00:00 (Sat)
  63108457200, #      utc_end 2000-10-28 23:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63108457200, #    utc_start 2000-10-28 23:00:00 (Sat)
  63121158000, #      utc_end 2001-03-24 23:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63121158000, #    utc_start 2001-03-24 23:00:00 (Sat)
  63139906800, #      utc_end 2001-10-27 23:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63139906800, #    utc_start 2001-10-27 23:00:00 (Sat)
  63153212400, #      utc_end 2002-03-30 23:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63153212400, #    utc_start 2002-03-30 23:00:00 (Sat)
  63171356400, #      utc_end 2002-10-26 23:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63171356400, #    utc_start 2002-10-26 23:00:00 (Sat)
  63184662000, #      utc_end 2003-03-29 23:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63184662000, #    utc_start 2003-03-29 23:00:00 (Sat)
  63202806000, #      utc_end 2003-10-25 23:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63202806000, #    utc_start 2003-10-25 23:00:00 (Sat)
  63216111600, #      utc_end 2004-03-27 23:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63216111600, #    utc_start 2004-03-27 23:00:00 (Sat)
  63234860400, #      utc_end 2004-10-30 23:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63234860400, #    utc_start 2004-10-30 23:00:00 (Sat)
  63247561200, #      utc_end 2005-03-26 23:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63247561200, #    utc_start 2005-03-26 23:00:00 (Sat)
  63266310000, #      utc_end 2005-10-29 23:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63266310000, #    utc_start 2005-10-29 23:00:00 (Sat)
  63279010800, #      utc_end 2006-03-25 23:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63279010800, #    utc_start 2006-03-25 23:00:00 (Sat)
  63297759600, #      utc_end 2006-10-28 23:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63297759600, #    utc_start 2006-10-28 23:00:00 (Sat)
  63310460400, #      utc_end 2007-03-24 23:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63310460400, #    utc_start 2007-03-24 23:00:00 (Sat)
  63329209200, #      utc_end 2007-10-27 23:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63329209200, #    utc_start 2007-10-27 23:00:00 (Sat)
  63342514800, #      utc_end 2008-03-29 23:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63342514800, #    utc_start 2008-03-29 23:00:00 (Sat)
  63360658800, #      utc_end 2008-10-25 23:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63360658800, #    utc_start 2008-10-25 23:00:00 (Sat)
  63373964400, #      utc_end 2009-03-28 23:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63373964400, #    utc_start 2009-03-28 23:00:00 (Sat)
  63392108400, #      utc_end 2009-10-24 23:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63392108400, #    utc_start 2009-10-24 23:00:00 (Sat)
  63405414000, #      utc_end 2010-03-27 23:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63405414000, #    utc_start 2010-03-27 23:00:00 (Sat)
  63424162800, #      utc_end 2010-10-30 23:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63424162800, #    utc_start 2010-10-30 23:00:00 (Sat)
  63436863600, #      utc_end 2011-03-26 23:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63436863600, #    utc_start 2011-03-26 23:00:00 (Sat)
  63549957600, #      utc_end 2014-10-25 22:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63549957600, #    utc_start 2014-10-25 22:00:00 (Sat)
  63594716400, #      utc_end 2016-03-26 23:00:00 (Sat)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63594716400, #    utc_start 2016-03-26 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  14400,
  0,
  '+04',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {29}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_ASTRAKHAN

    $main::fatpacked{"DateTime/TimeZone/Europe/Athens.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_ATHENS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Athens;
  $DateTime::TimeZone::Europe::Athens::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Athens::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59791040708, #      utc_end 1895-09-13 22:25:08 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59791046400, #    local_end 1895-09-14 00:00:00 (Sat)
  5692,
  0,
  'LMT',
      ],
      [
  59791040708, #    utc_start 1895-09-13 22:25:08 (Fri)
  60449581568, #      utc_end 1916-07-27 22:26:08 (Thu)
  59791046400, #  local_start 1895-09-14 00:00:00 (Sat)
  60449587260, #    local_end 1916-07-28 00:01:00 (Fri)
  5692,
  0,
  'AMT',
      ],
      [
  60449581568, #    utc_start 1916-07-27 22:26:08 (Thu)
  60952687200, #      utc_end 1932-07-06 22:00:00 (Wed)
  60449588768, #  local_start 1916-07-28 00:26:08 (Fri)
  60952694400, #    local_end 1932-07-07 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  60952687200, #    utc_start 1932-07-06 22:00:00 (Wed)
  60957522000, #      utc_end 1932-08-31 21:00:00 (Wed)
  60952698000, #  local_start 1932-07-07 01:00:00 (Thu)
  60957532800, #    local_end 1932-09-01 00:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  60957522000, #    utc_start 1932-08-31 21:00:00 (Wed)
  61228821600, #      utc_end 1941-04-06 22:00:00 (Sun)
  60957529200, #  local_start 1932-08-31 23:00:00 (Wed)
  61228828800, #    local_end 1941-04-07 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  61228821600, #    utc_start 1941-04-06 22:00:00 (Sun)
  61230805200, #      utc_end 1941-04-29 21:00:00 (Tue)
  61228832400, #  local_start 1941-04-07 01:00:00 (Mon)
  61230816000, #    local_end 1941-04-30 00:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  61230805200, #    utc_start 1941-04-29 21:00:00 (Tue)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61230812400, #  local_start 1941-04-29 23:00:00 (Tue)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291206000, #      utc_end 1943-03-29 23:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291209600, #    local_end 1943-03-30 00:00:00 (Tue)
  3600,
  0,
  'CET',
      ],
      [
  61291206000, #    utc_start 1943-03-29 23:00:00 (Mon)
  61307445600, #      utc_end 1943-10-03 22:00:00 (Sun)
  61291213200, #  local_start 1943-03-30 01:00:00 (Tue)
  61307452800, #    local_end 1943-10-04 00:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307445600, #    utc_start 1943-10-03 22:00:00 (Sun)
  61323260400, #      utc_end 1944-04-03 23:00:00 (Mon)
  61307449200, #  local_start 1943-10-03 23:00:00 (Sun)
  61323264000, #    local_end 1944-04-04 00:00:00 (Tue)
  3600,
  0,
  'CET',
      ],
      [
  61323260400, #    utc_start 1944-04-03 23:00:00 (Mon)
  61583320800, #      utc_end 1952-06-30 22:00:00 (Mon)
  61323267600, #  local_start 1944-04-04 01:00:00 (Tue)
  61583328000, #    local_end 1952-07-01 00:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  61583320800, #    utc_start 1952-06-30 22:00:00 (Mon)
  61594030800, #      utc_end 1952-11-01 21:00:00 (Sat)
  61583331600, #  local_start 1952-07-01 01:00:00 (Tue)
  61594041600, #    local_end 1952-11-02 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61594030800, #    utc_start 1952-11-01 21:00:00 (Sat)
  62302168800, #      utc_end 1975-04-11 22:00:00 (Fri)
  61594038000, #  local_start 1952-11-01 23:00:00 (Sat)
  62302176000, #    local_end 1975-04-12 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62302168800, #    utc_start 1975-04-11 22:00:00 (Fri)
  62321868000, #      utc_end 1975-11-25 22:00:00 (Tue)
  62302179600, #  local_start 1975-04-12 01:00:00 (Sat)
  62321878800, #    local_end 1975-11-26 01:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  62321868000, #    utc_start 1975-11-25 22:00:00 (Tue)
  62333712000, #      utc_end 1976-04-11 00:00:00 (Sun)
  62321875200, #  local_start 1975-11-26 00:00:00 (Wed)
  62333719200, #    local_end 1976-04-11 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62333712000, #    utc_start 1976-04-11 00:00:00 (Sun)
  62349436800, #      utc_end 1976-10-10 00:00:00 (Sun)
  62333722800, #  local_start 1976-04-11 03:00:00 (Sun)
  62349447600, #    local_end 1976-10-10 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62349436800, #    utc_start 1976-10-10 00:00:00 (Sun)
  62364556800, #      utc_end 1977-04-03 00:00:00 (Sun)
  62349444000, #  local_start 1976-10-10 02:00:00 (Sun)
  62364564000, #    local_end 1977-04-03 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62364556800, #    utc_start 1977-04-03 00:00:00 (Sun)
  62379763200, #      utc_end 1977-09-26 00:00:00 (Mon)
  62364567600, #  local_start 1977-04-03 03:00:00 (Sun)
  62379774000, #    local_end 1977-09-26 03:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62379763200, #    utc_start 1977-09-26 00:00:00 (Mon)
  62396006400, #      utc_end 1978-04-02 00:00:00 (Sun)
  62379770400, #  local_start 1977-09-26 02:00:00 (Mon)
  62396013600, #    local_end 1978-04-02 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62396006400, #    utc_start 1978-04-02 00:00:00 (Sun)
  62411130000, #      utc_end 1978-09-24 01:00:00 (Sun)
  62396017200, #  local_start 1978-04-02 03:00:00 (Sun)
  62411140800, #    local_end 1978-09-24 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62411130000, #    utc_start 1978-09-24 01:00:00 (Sun)
  62427481200, #      utc_end 1979-04-01 07:00:00 (Sun)
  62411137200, #  local_start 1978-09-24 03:00:00 (Sun)
  62427488400, #    local_end 1979-04-01 09:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62427481200, #    utc_start 1979-04-01 07:00:00 (Sun)
  62443090800, #      utc_end 1979-09-28 23:00:00 (Fri)
  62427492000, #  local_start 1979-04-01 10:00:00 (Sun)
  62443101600, #    local_end 1979-09-29 02:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62443090800, #    utc_start 1979-09-28 23:00:00 (Fri)
  62459071200, #      utc_end 1980-03-31 22:00:00 (Mon)
  62443098000, #  local_start 1979-09-29 01:00:00 (Sat)
  62459078400, #    local_end 1980-04-01 00:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  62459071200, #    utc_start 1980-03-31 22:00:00 (Mon)
  62474619600, #      utc_end 1980-09-27 21:00:00 (Sat)
  62459082000, #  local_start 1980-04-01 01:00:00 (Tue)
  62474630400, #    local_end 1980-09-28 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62474619600, #    utc_start 1980-09-27 21:00:00 (Sat)
  62482831200, #      utc_end 1980-12-31 22:00:00 (Wed)
  62474626800, #  local_start 1980-09-27 23:00:00 (Sat)
  62482838400, #    local_end 1981-01-01 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  62482831200, #    utc_start 1980-12-31 22:00:00 (Wed)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62482838400, #  local_start 1981-01-01 00:00:00 (Thu)
  62490366000, #    local_end 1981-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490369600, #  local_start 1981-03-29 04:00:00 (Sun)
  62506094400, #    local_end 1981-09-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506090800, #  local_start 1981-09-27 03:00:00 (Sun)
  62521815600, #    local_end 1982-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521819200, #  local_start 1982-03-28 04:00:00 (Sun)
  62537544000, #    local_end 1982-09-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537540400, #  local_start 1982-09-26 03:00:00 (Sun)
  62553265200, #    local_end 1983-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553268800, #  local_start 1983-03-27 04:00:00 (Sun)
  62568993600, #    local_end 1983-09-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568990000, #  local_start 1983-09-25 03:00:00 (Sun)
  62584714800, #    local_end 1984-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584718400, #  local_start 1984-03-25 04:00:00 (Sun)
  62601048000, #    local_end 1984-09-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601044400, #  local_start 1984-09-30 03:00:00 (Sun)
  62616769200, #    local_end 1985-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616772800, #  local_start 1985-03-31 04:00:00 (Sun)
  62632497600, #    local_end 1985-09-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632494000, #  local_start 1985-09-29 03:00:00 (Sun)
  62648218800, #    local_end 1986-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648222400, #  local_start 1986-03-30 04:00:00 (Sun)
  62663947200, #    local_end 1986-09-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663943600, #  local_start 1986-09-28 03:00:00 (Sun)
  62679668400, #    local_end 1987-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679672000, #  local_start 1987-03-29 04:00:00 (Sun)
  62695396800, #    local_end 1987-09-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695393200, #  local_start 1987-09-27 03:00:00 (Sun)
  62711118000, #    local_end 1988-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711121600, #  local_start 1988-03-27 04:00:00 (Sun)
  62726846400, #    local_end 1988-09-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726842800, #  local_start 1988-09-25 03:00:00 (Sun)
  62742567600, #    local_end 1989-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742571200, #  local_start 1989-03-26 04:00:00 (Sun)
  62758296000, #    local_end 1989-09-24 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758292400, #  local_start 1989-09-24 03:00:00 (Sun)
  62774017200, #    local_end 1990-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774020800, #  local_start 1990-03-25 04:00:00 (Sun)
  62790350400, #    local_end 1990-09-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790346800, #  local_start 1990-09-30 03:00:00 (Sun)
  62806071600, #    local_end 1991-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806075200, #  local_start 1991-03-31 04:00:00 (Sun)
  62821800000, #    local_end 1991-09-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821796400, #  local_start 1991-09-29 03:00:00 (Sun)
  62837521200, #    local_end 1992-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837524800, #  local_start 1992-03-29 04:00:00 (Sun)
  62853249600, #    local_end 1992-09-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853246000, #  local_start 1992-09-27 03:00:00 (Sun)
  62868970800, #    local_end 1993-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868974400, #  local_start 1993-03-28 04:00:00 (Sun)
  62884699200, #    local_end 1993-09-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884695600, #  local_start 1993-09-26 03:00:00 (Sun)
  62900420400, #    local_end 1994-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900424000, #  local_start 1994-03-27 04:00:00 (Sun)
  62916148800, #    local_end 1994-09-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916145200, #  local_start 1994-09-25 03:00:00 (Sun)
  62931870000, #    local_end 1995-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931873600, #  local_start 1995-03-26 04:00:00 (Sun)
  62947598400, #    local_end 1995-09-24 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947594800, #  local_start 1995-09-24 03:00:00 (Sun)
  62963924400, #    local_end 1996-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963928000, #  local_start 1996-03-31 04:00:00 (Sun)
  62982072000, #    local_end 1996-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982068400, #  local_start 1996-10-27 03:00:00 (Sun)
  62995374000, #    local_end 1997-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995377600, #  local_start 1997-03-30 04:00:00 (Sun)
  63013521600, #    local_end 1997-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013518000, #  local_start 1997-10-26 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026827200, #  local_start 1998-03-29 04:00:00 (Sun)
  63044971200, #    local_end 1998-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044967600, #  local_start 1998-10-25 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058276800, #  local_start 1999-03-28 04:00:00 (Sun)
  63077025600, #    local_end 1999-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089726400, #  local_start 2000-03-26 04:00:00 (Sun)
  63108475200, #    local_end 2000-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108471600, #  local_start 2000-10-29 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121176000, #  local_start 2001-03-25 04:00:00 (Sun)
  63139924800, #    local_end 2001-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139921200, #  local_start 2001-10-28 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153230400, #  local_start 2002-03-31 04:00:00 (Sun)
  63171374400, #    local_end 2002-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171370800, #  local_start 2002-10-27 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184680000, #  local_start 2003-03-30 04:00:00 (Sun)
  63202824000, #    local_end 2003-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216129600, #  local_start 2004-03-28 04:00:00 (Sun)
  63234878400, #    local_end 2004-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247579200, #  local_start 2005-03-27 04:00:00 (Sun)
  63266328000, #    local_end 2005-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279025200, #    local_end 2006-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279028800, #  local_start 2006-03-26 04:00:00 (Sun)
  63297777600, #    local_end 2006-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310478400, #  local_start 2007-03-25 04:00:00 (Sun)
  63329227200, #    local_end 2007-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63342529200, #    local_end 2008-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342532800, #  local_start 2008-03-30 04:00:00 (Sun)
  63360676800, #    local_end 2008-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373978800, #    local_end 2009-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373982400, #  local_start 2009-03-29 04:00:00 (Sun)
  63392126400, #    local_end 2009-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392122800, #  local_start 2009-10-25 03:00:00 (Sun)
  63405428400, #    local_end 2010-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405432000, #  local_start 2010-03-28 04:00:00 (Sun)
  63424180800, #    local_end 2010-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424177200, #  local_start 2010-10-31 03:00:00 (Sun)
  63436878000, #    local_end 2011-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436881600, #  local_start 2011-03-27 04:00:00 (Sun)
  63455630400, #    local_end 2011-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455626800, #  local_start 2011-10-30 03:00:00 (Sun)
  63468327600, #    local_end 2012-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468331200, #  local_start 2012-03-25 04:00:00 (Sun)
  63487080000, #    local_end 2012-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487076400, #  local_start 2012-10-28 03:00:00 (Sun)
  63500382000, #    local_end 2013-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500385600, #  local_start 2013-03-31 04:00:00 (Sun)
  63518529600, #    local_end 2013-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518526000, #  local_start 2013-10-27 03:00:00 (Sun)
  63531831600, #    local_end 2014-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531835200, #  local_start 2014-03-30 04:00:00 (Sun)
  63549979200, #    local_end 2014-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549975600, #  local_start 2014-10-26 03:00:00 (Sun)
  63563281200, #    local_end 2015-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563284800, #  local_start 2015-03-29 04:00:00 (Sun)
  63581428800, #    local_end 2015-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581425200, #  local_start 2015-10-25 03:00:00 (Sun)
  63594730800, #    local_end 2016-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594734400, #  local_start 2016-03-27 04:00:00 (Sun)
  63613483200, #    local_end 2016-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613479600, #  local_start 2016-10-30 03:00:00 (Sun)
  63626180400, #    local_end 2017-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626184000, #  local_start 2017-03-26 04:00:00 (Sun)
  63644932800, #    local_end 2017-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644929200, #  local_start 2017-10-29 03:00:00 (Sun)
  63657630000, #    local_end 2018-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657633600, #  local_start 2018-03-25 04:00:00 (Sun)
  63676382400, #    local_end 2018-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676378800, #  local_start 2018-10-28 03:00:00 (Sun)
  63689684400, #    local_end 2019-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689688000, #  local_start 2019-03-31 04:00:00 (Sun)
  63707832000, #    local_end 2019-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707828400, #  local_start 2019-10-27 03:00:00 (Sun)
  63721134000, #    local_end 2020-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721137600, #  local_start 2020-03-29 04:00:00 (Sun)
  63739281600, #    local_end 2020-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739278000, #  local_start 2020-10-25 03:00:00 (Sun)
  63752583600, #    local_end 2021-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752587200, #  local_start 2021-03-28 04:00:00 (Sun)
  63771336000, #    local_end 2021-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771332400, #  local_start 2021-10-31 03:00:00 (Sun)
  63784033200, #    local_end 2022-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784036800, #  local_start 2022-03-27 04:00:00 (Sun)
  63802785600, #    local_end 2022-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802782000, #  local_start 2022-10-30 03:00:00 (Sun)
  63815482800, #    local_end 2023-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815486400, #  local_start 2023-03-26 04:00:00 (Sun)
  63834235200, #    local_end 2023-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834231600, #  local_start 2023-10-29 03:00:00 (Sun)
  63847537200, #    local_end 2024-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847540800, #  local_start 2024-03-31 04:00:00 (Sun)
  63865684800, #    local_end 2024-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865681200, #  local_start 2024-10-27 03:00:00 (Sun)
  63878986800, #    local_end 2025-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878990400, #  local_start 2025-03-30 04:00:00 (Sun)
  63897134400, #    local_end 2025-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897130800, #  local_start 2025-10-26 03:00:00 (Sun)
  63910436400, #    local_end 2026-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910440000, #  local_start 2026-03-29 04:00:00 (Sun)
  63928584000, #    local_end 2026-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928580400, #  local_start 2026-10-25 03:00:00 (Sun)
  63941886000, #    local_end 2027-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941889600, #  local_start 2027-03-28 04:00:00 (Sun)
  63960638400, #    local_end 2027-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {58}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723181,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723181,
      'utc_rd_secs' => 0,
      'utc_year' => 1982
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723180,
      'local_rd_secs' => 79200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723180,
      'utc_rd_secs' => 79200,
      'utc_year' => 1981
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_ATHENS

    $main::fatpacked{"DateTime/TimeZone/Europe/Belgrade.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_BELGRADE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Belgrade;
  $DateTime::TimeZone::Europe::Belgrade::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Belgrade::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59421767880, #      utc_end 1883-12-31 22:38:00 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59421772800, #    local_end 1884-01-01 00:00:00 (Tue)
  4920,
  0,
  'LMT',
      ],
      [
  59421767880, #    utc_start 1883-12-31 22:38:00 (Mon)
  61229858400, #      utc_end 1941-04-18 22:00:00 (Fri)
  59421771480, #  local_start 1883-12-31 23:38:00 (Mon)
  61229862000, #    local_end 1941-04-18 23:00:00 (Fri)
  3600,
  0,
  'CET',
      ],
      [
  61229858400, #    utc_start 1941-04-18 22:00:00 (Fri)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61229865600, #  local_start 1941-04-19 00:00:00 (Sat)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61338906000, #      utc_end 1944-10-02 01:00:00 (Mon)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61338913200, #    local_end 1944-10-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61338906000, #    utc_start 1944-10-02 01:00:00 (Mon)
  61346761200, #      utc_end 1944-12-31 23:00:00 (Sun)
  61338909600, #  local_start 1944-10-02 02:00:00 (Mon)
  61346764800, #    local_end 1945-01-01 00:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61346761200, #    utc_start 1944-12-31 23:00:00 (Sun)
  61357741200, #      utc_end 1945-05-08 01:00:00 (Tue)
  61346764800, #  local_start 1945-01-01 00:00:00 (Mon)
  61357744800, #    local_end 1945-05-08 02:00:00 (Tue)
  3600,
  0,
  'CET',
      ],
      [
  61357741200, #    utc_start 1945-05-08 01:00:00 (Tue)
  61369059600, #      utc_end 1945-09-16 01:00:00 (Sun)
  61357748400, #  local_start 1945-05-08 03:00:00 (Tue)
  61369066800, #    local_end 1945-09-16 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61369059600, #    utc_start 1945-09-16 01:00:00 (Sun)
  62542882800, #      utc_end 1982-11-26 23:00:00 (Fri)
  61369063200, #  local_start 1945-09-16 02:00:00 (Sun)
  62542886400, #    local_end 1982-11-27 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62542882800, #    utc_start 1982-11-26 23:00:00 (Fri)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62542886400, #  local_start 1982-11-27 00:00:00 (Sat)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {49}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723876,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723876,
      'utc_rd_secs' => 0,
      'utc_year' => 1983
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723875,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723875,
      'utc_rd_secs' => 82800,
      'utc_year' => 1983
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_BELGRADE

    $main::fatpacked{"DateTime/TimeZone/Europe/Berlin.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_BERLIN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Berlin;
  $DateTime::TimeZone::Europe::Berlin::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Berlin::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59713628792, #      utc_end 1893-03-31 23:06:32 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59713632000, #    local_end 1893-04-01 00:00:00 (Sat)
  3208,
  0,
  'LMT',
      ],
      [
  59713628792, #    utc_start 1893-03-31 23:06:32 (Fri)
  60441976800, #      utc_end 1916-04-30 22:00:00 (Sun)
  59713632392, #  local_start 1893-04-01 00:06:32 (Sat)
  60441980400, #    local_end 1916-04-30 23:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60441976800, #    utc_start 1916-04-30 22:00:00 (Sun)
  60455199600, #      utc_end 1916-09-30 23:00:00 (Sat)
  60441984000, #  local_start 1916-05-01 00:00:00 (Mon)
  60455206800, #    local_end 1916-10-01 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60455199600, #    utc_start 1916-09-30 23:00:00 (Sat)
  60472227600, #      utc_end 1917-04-16 01:00:00 (Mon)
  60455203200, #  local_start 1916-10-01 00:00:00 (Sun)
  60472231200, #    local_end 1917-04-16 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60472227600, #    utc_start 1917-04-16 01:00:00 (Mon)
  60485533200, #      utc_end 1917-09-17 01:00:00 (Mon)
  60472234800, #  local_start 1917-04-16 03:00:00 (Mon)
  60485540400, #    local_end 1917-09-17 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60485533200, #    utc_start 1917-09-17 01:00:00 (Mon)
  60503677200, #      utc_end 1918-04-15 01:00:00 (Mon)
  60485536800, #  local_start 1917-09-17 02:00:00 (Mon)
  60503680800, #    local_end 1918-04-15 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60503677200, #    utc_start 1918-04-15 01:00:00 (Mon)
  60516982800, #      utc_end 1918-09-16 01:00:00 (Mon)
  60503684400, #  local_start 1918-04-15 03:00:00 (Mon)
  60516990000, #    local_end 1918-09-16 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60516982800, #    utc_start 1918-09-16 01:00:00 (Mon)
  61196778000, #      utc_end 1940-04-01 01:00:00 (Mon)
  60516986400, #  local_start 1918-09-16 02:00:00 (Mon)
  61196781600, #    local_end 1940-04-01 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61196778000, #    utc_start 1940-04-01 01:00:00 (Mon)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61196785200, #  local_start 1940-04-01 03:00:00 (Mon)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61338906000, #      utc_end 1944-10-02 01:00:00 (Mon)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61338913200, #    local_end 1944-10-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61338906000, #    utc_start 1944-10-02 01:00:00 (Mon)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61338909600, #  local_start 1944-10-02 02:00:00 (Mon)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61359120000, #      utc_end 1945-05-24 00:00:00 (Thu)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61359127200, #    local_end 1945-05-24 02:00:00 (Thu)
  7200,
  1,
  'CEST',
      ],
      [
  61359120000, #    utc_start 1945-05-24 00:00:00 (Thu)
  61369747200, #      utc_end 1945-09-24 00:00:00 (Mon)
  61359130800, #  local_start 1945-05-24 03:00:00 (Thu)
  61369758000, #    local_end 1945-09-24 03:00:00 (Mon)
  10800,
  1,
  'CEMT',
      ],
      [
  61369747200, #    utc_start 1945-09-24 00:00:00 (Mon)
  61374502800, #      utc_end 1945-11-18 01:00:00 (Sun)
  61369754400, #  local_start 1945-09-24 02:00:00 (Mon)
  61374510000, #    local_end 1945-11-18 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61374502800, #    utc_start 1945-11-18 01:00:00 (Sun)
  61378297200, #      utc_end 1945-12-31 23:00:00 (Mon)
  61374506400, #  local_start 1945-11-18 02:00:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  3600,
  0,
  'CET',
      ],
      [
  61378297200, #    utc_start 1945-12-31 23:00:00 (Mon)
  61387203600, #      utc_end 1946-04-14 01:00:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61387207200, #    local_end 1946-04-14 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61387203600, #    utc_start 1946-04-14 01:00:00 (Sun)
  61402410000, #      utc_end 1946-10-07 01:00:00 (Mon)
  61387210800, #  local_start 1946-04-14 03:00:00 (Sun)
  61402417200, #    local_end 1946-10-07 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61402410000, #    utc_start 1946-10-07 01:00:00 (Mon)
  61418052000, #      utc_end 1947-04-06 02:00:00 (Sun)
  61402413600, #  local_start 1946-10-07 02:00:00 (Mon)
  61418055600, #    local_end 1947-04-06 03:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61418052000, #    utc_start 1947-04-06 02:00:00 (Sun)
  61421072400, #      utc_end 1947-05-11 01:00:00 (Sun)
  61418059200, #  local_start 1947-04-06 04:00:00 (Sun)
  61421079600, #    local_end 1947-05-11 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61421072400, #    utc_start 1947-05-11 01:00:00 (Sun)
  61425302400, #      utc_end 1947-06-29 00:00:00 (Sun)
  61421083200, #  local_start 1947-05-11 04:00:00 (Sun)
  61425313200, #    local_end 1947-06-29 03:00:00 (Sun)
  10800,
  1,
  'CEMT',
      ],
      [
  61425302400, #    utc_start 1947-06-29 00:00:00 (Sun)
  61433773200, #      utc_end 1947-10-05 01:00:00 (Sun)
  61425309600, #  local_start 1947-06-29 02:00:00 (Sun)
  61433780400, #    local_end 1947-10-05 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61433773200, #    utc_start 1947-10-05 01:00:00 (Sun)
  61450707600, #      utc_end 1948-04-18 01:00:00 (Sun)
  61433776800, #  local_start 1947-10-05 02:00:00 (Sun)
  61450711200, #    local_end 1948-04-18 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61450707600, #    utc_start 1948-04-18 01:00:00 (Sun)
  61465222800, #      utc_end 1948-10-03 01:00:00 (Sun)
  61450714800, #  local_start 1948-04-18 03:00:00 (Sun)
  61465230000, #    local_end 1948-10-03 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61465222800, #    utc_start 1948-10-03 01:00:00 (Sun)
  61481552400, #      utc_end 1949-04-10 01:00:00 (Sun)
  61465226400, #  local_start 1948-10-03 02:00:00 (Sun)
  61481556000, #    local_end 1949-04-10 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61481552400, #    utc_start 1949-04-10 01:00:00 (Sun)
  61496672400, #      utc_end 1949-10-02 01:00:00 (Sun)
  61481559600, #  local_start 1949-04-10 03:00:00 (Sun)
  61496679600, #    local_end 1949-10-02 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61496672400, #    utc_start 1949-10-02 01:00:00 (Sun)
  62451212400, #      utc_end 1979-12-31 23:00:00 (Mon)
  61496676000, #  local_start 1949-10-02 02:00:00 (Sun)
  62451216000, #    local_end 1980-01-01 00:00:00 (Tue)
  3600,
  0,
  'CET',
      ],
      [
  62451212400, #    utc_start 1979-12-31 23:00:00 (Mon)
  62459514000, #      utc_end 1980-04-06 01:00:00 (Sun)
  62451216000, #  local_start 1980-01-01 00:00:00 (Tue)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62459514000, #    utc_start 1980-04-06 01:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474641200, #    local_end 1980-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474637600, #  local_start 1980-09-28 02:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {63}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722815,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722815,
      'utc_rd_secs' => 0,
      'utc_year' => 1981
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722814,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722814,
      'utc_rd_secs' => 82800,
      'utc_year' => 1980
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_BERLIN

    $main::fatpacked{"DateTime/TimeZone/Europe/Brussels.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_BRUSSELS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Brussels;
  $DateTime::TimeZone::Europe::Brussels::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Brussels::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295541350, #      utc_end 1879-12-31 23:42:30 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  1050,
  0,
  'LMT',
      ],
      [
  59295541350, #    utc_start 1879-12-31 23:42:30 (Wed)
  59684730150, #      utc_end 1892-05-01 11:42:30 (Sun)
  59295542400, #  local_start 1880-01-01 00:00:00 (Thu)
  59684731200, #    local_end 1892-05-01 12:00:00 (Sun)
  1050,
  0,
  'BMT',
      ],
      [
  59684730150, #    utc_start 1892-05-01 11:42:30 (Sun)
  60395328000, #      utc_end 1914-11-08 00:00:00 (Sun)
  59684730150, #  local_start 1892-05-01 11:42:30 (Sun)
  60395328000, #    local_end 1914-11-08 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  60395328000, #    utc_start 1914-11-08 00:00:00 (Sun)
  60441980400, #      utc_end 1916-04-30 23:00:00 (Sun)
  60395331600, #  local_start 1914-11-08 01:00:00 (Sun)
  60441984000, #    local_end 1916-05-01 00:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60441980400, #    utc_start 1916-04-30 23:00:00 (Sun)
  60455199600, #      utc_end 1916-09-30 23:00:00 (Sat)
  60441987600, #  local_start 1916-05-01 01:00:00 (Mon)
  60455206800, #    local_end 1916-10-01 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60455199600, #    utc_start 1916-09-30 23:00:00 (Sat)
  60472227600, #      utc_end 1917-04-16 01:00:00 (Mon)
  60455203200, #  local_start 1916-10-01 00:00:00 (Sun)
  60472231200, #    local_end 1917-04-16 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60472227600, #    utc_start 1917-04-16 01:00:00 (Mon)
  60485533200, #      utc_end 1917-09-17 01:00:00 (Mon)
  60472234800, #  local_start 1917-04-16 03:00:00 (Mon)
  60485540400, #    local_end 1917-09-17 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60485533200, #    utc_start 1917-09-17 01:00:00 (Mon)
  60503677200, #      utc_end 1918-04-15 01:00:00 (Mon)
  60485536800, #  local_start 1917-09-17 02:00:00 (Mon)
  60503680800, #    local_end 1918-04-15 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60503677200, #    utc_start 1918-04-15 01:00:00 (Mon)
  60516982800, #      utc_end 1918-09-16 01:00:00 (Mon)
  60503684400, #  local_start 1918-04-15 03:00:00 (Mon)
  60516990000, #    local_end 1918-09-16 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60516982800, #    utc_start 1918-09-16 01:00:00 (Mon)
  60521857200, #      utc_end 1918-11-11 11:00:00 (Mon)
  60516986400, #  local_start 1918-09-16 02:00:00 (Mon)
  60521860800, #    local_end 1918-11-11 12:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60521857200, #    utc_start 1918-11-11 11:00:00 (Mon)
  60531404400, #      utc_end 1919-03-01 23:00:00 (Sat)
  60521857200, #  local_start 1918-11-11 11:00:00 (Mon)
  60531404400, #    local_end 1919-03-01 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60531404400, #    utc_start 1919-03-01 23:00:00 (Sat)
  60550153200, #      utc_end 1919-10-04 23:00:00 (Sat)
  60531408000, #  local_start 1919-03-02 00:00:00 (Sun)
  60550156800, #    local_end 1919-10-05 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60550153200, #    utc_start 1919-10-04 23:00:00 (Sat)
  60561644400, #      utc_end 1920-02-14 23:00:00 (Sat)
  60550153200, #  local_start 1919-10-04 23:00:00 (Sat)
  60561644400, #    local_end 1920-02-14 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60561644400, #    utc_start 1920-02-14 23:00:00 (Sat)
  60583417200, #      utc_end 1920-10-23 23:00:00 (Sat)
  60561648000, #  local_start 1920-02-15 00:00:00 (Sun)
  60583420800, #    local_end 1920-10-24 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60583417200, #    utc_start 1920-10-23 23:00:00 (Sat)
  60595686000, #      utc_end 1921-03-14 23:00:00 (Mon)
  60583417200, #  local_start 1920-10-23 23:00:00 (Sat)
  60595686000, #    local_end 1921-03-14 23:00:00 (Mon)
  0,
  0,
  'WET',
      ],
      [
  60595686000, #    utc_start 1921-03-14 23:00:00 (Mon)
  60615126000, #      utc_end 1921-10-25 23:00:00 (Tue)
  60595689600, #  local_start 1921-03-15 00:00:00 (Tue)
  60615129600, #    local_end 1921-10-26 00:00:00 (Wed)
  3600,
  1,
  'WEST',
      ],
      [
  60615126000, #    utc_start 1921-10-25 23:00:00 (Tue)
  60628172400, #      utc_end 1922-03-25 23:00:00 (Sat)
  60615126000, #  local_start 1921-10-25 23:00:00 (Tue)
  60628172400, #    local_end 1922-03-25 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60628172400, #    utc_start 1922-03-25 23:00:00 (Sat)
  60645106800, #      utc_end 1922-10-07 23:00:00 (Sat)
  60628176000, #  local_start 1922-03-26 00:00:00 (Sun)
  60645110400, #    local_end 1922-10-08 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60645106800, #    utc_start 1922-10-07 23:00:00 (Sat)
  60662041200, #      utc_end 1923-04-21 23:00:00 (Sat)
  60645106800, #  local_start 1922-10-07 23:00:00 (Sat)
  60662041200, #    local_end 1923-04-21 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60662041200, #    utc_start 1923-04-21 23:00:00 (Sat)
  60676556400, #      utc_end 1923-10-06 23:00:00 (Sat)
  60662044800, #  local_start 1923-04-22 00:00:00 (Sun)
  60676560000, #    local_end 1923-10-07 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60676556400, #    utc_start 1923-10-06 23:00:00 (Sat)
  60691676400, #      utc_end 1924-03-29 23:00:00 (Sat)
  60676556400, #  local_start 1923-10-06 23:00:00 (Sat)
  60691676400, #    local_end 1924-03-29 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60691676400, #    utc_start 1924-03-29 23:00:00 (Sat)
  60708006000, #      utc_end 1924-10-04 23:00:00 (Sat)
  60691680000, #  local_start 1924-03-30 00:00:00 (Sun)
  60708009600, #    local_end 1924-10-05 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60708006000, #    utc_start 1924-10-04 23:00:00 (Sat)
  60723730800, #      utc_end 1925-04-04 23:00:00 (Sat)
  60708006000, #  local_start 1924-10-04 23:00:00 (Sat)
  60723730800, #    local_end 1925-04-04 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60723730800, #    utc_start 1925-04-04 23:00:00 (Sat)
  60739455600, #      utc_end 1925-10-03 23:00:00 (Sat)
  60723734400, #  local_start 1925-04-05 00:00:00 (Sun)
  60739459200, #    local_end 1925-10-04 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60739455600, #    utc_start 1925-10-03 23:00:00 (Sat)
  60756390000, #      utc_end 1926-04-17 23:00:00 (Sat)
  60739455600, #  local_start 1925-10-03 23:00:00 (Sat)
  60756390000, #    local_end 1926-04-17 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60756390000, #    utc_start 1926-04-17 23:00:00 (Sat)
  60770905200, #      utc_end 1926-10-02 23:00:00 (Sat)
  60756393600, #  local_start 1926-04-18 00:00:00 (Sun)
  60770908800, #    local_end 1926-10-03 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60770905200, #    utc_start 1926-10-02 23:00:00 (Sat)
  60787234800, #      utc_end 1927-04-09 23:00:00 (Sat)
  60770905200, #  local_start 1926-10-02 23:00:00 (Sat)
  60787234800, #    local_end 1927-04-09 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60787234800, #    utc_start 1927-04-09 23:00:00 (Sat)
  60802354800, #      utc_end 1927-10-01 23:00:00 (Sat)
  60787238400, #  local_start 1927-04-10 00:00:00 (Sun)
  60802358400, #    local_end 1927-10-02 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60802354800, #    utc_start 1927-10-01 23:00:00 (Sat)
  60819289200, #      utc_end 1928-04-14 23:00:00 (Sat)
  60802354800, #  local_start 1927-10-01 23:00:00 (Sat)
  60819289200, #    local_end 1928-04-14 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60819289200, #    utc_start 1928-04-14 23:00:00 (Sat)
  60834420000, #      utc_end 1928-10-07 02:00:00 (Sun)
  60819292800, #  local_start 1928-04-15 00:00:00 (Sun)
  60834423600, #    local_end 1928-10-07 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60834420000, #    utc_start 1928-10-07 02:00:00 (Sun)
  60851354400, #      utc_end 1929-04-21 02:00:00 (Sun)
  60834420000, #  local_start 1928-10-07 02:00:00 (Sun)
  60851354400, #    local_end 1929-04-21 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  60851354400, #    utc_start 1929-04-21 02:00:00 (Sun)
  60865869600, #      utc_end 1929-10-06 02:00:00 (Sun)
  60851358000, #  local_start 1929-04-21 03:00:00 (Sun)
  60865873200, #    local_end 1929-10-06 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60865869600, #    utc_start 1929-10-06 02:00:00 (Sun)
  60882199200, #      utc_end 1930-04-13 02:00:00 (Sun)
  60865869600, #  local_start 1929-10-06 02:00:00 (Sun)
  60882199200, #    local_end 1930-04-13 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  60882199200, #    utc_start 1930-04-13 02:00:00 (Sun)
  60897319200, #      utc_end 1930-10-05 02:00:00 (Sun)
  60882202800, #  local_start 1930-04-13 03:00:00 (Sun)
  60897322800, #    local_end 1930-10-05 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60897319200, #    utc_start 1930-10-05 02:00:00 (Sun)
  60914253600, #      utc_end 1931-04-19 02:00:00 (Sun)
  60897319200, #  local_start 1930-10-05 02:00:00 (Sun)
  60914253600, #    local_end 1931-04-19 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  60914253600, #    utc_start 1931-04-19 02:00:00 (Sun)
  60928768800, #      utc_end 1931-10-04 02:00:00 (Sun)
  60914257200, #  local_start 1931-04-19 03:00:00 (Sun)
  60928772400, #    local_end 1931-10-04 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60928768800, #    utc_start 1931-10-04 02:00:00 (Sun)
  60944493600, #      utc_end 1932-04-03 02:00:00 (Sun)
  60928768800, #  local_start 1931-10-04 02:00:00 (Sun)
  60944493600, #    local_end 1932-04-03 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  60944493600, #    utc_start 1932-04-03 02:00:00 (Sun)
  60960218400, #      utc_end 1932-10-02 02:00:00 (Sun)
  60944497200, #  local_start 1932-04-03 03:00:00 (Sun)
  60960222000, #    local_end 1932-10-02 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60960218400, #    utc_start 1932-10-02 02:00:00 (Sun)
  60975338400, #      utc_end 1933-03-26 02:00:00 (Sun)
  60960218400, #  local_start 1932-10-02 02:00:00 (Sun)
  60975338400, #    local_end 1933-03-26 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  60975338400, #    utc_start 1933-03-26 02:00:00 (Sun)
  60992272800, #      utc_end 1933-10-08 02:00:00 (Sun)
  60975342000, #  local_start 1933-03-26 03:00:00 (Sun)
  60992276400, #    local_end 1933-10-08 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60992272800, #    utc_start 1933-10-08 02:00:00 (Sun)
  61007997600, #      utc_end 1934-04-08 02:00:00 (Sun)
  60992272800, #  local_start 1933-10-08 02:00:00 (Sun)
  61007997600, #    local_end 1934-04-08 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61007997600, #    utc_start 1934-04-08 02:00:00 (Sun)
  61023722400, #      utc_end 1934-10-07 02:00:00 (Sun)
  61008001200, #  local_start 1934-04-08 03:00:00 (Sun)
  61023726000, #    local_end 1934-10-07 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61023722400, #    utc_start 1934-10-07 02:00:00 (Sun)
  61038842400, #      utc_end 1935-03-31 02:00:00 (Sun)
  61023722400, #  local_start 1934-10-07 02:00:00 (Sun)
  61038842400, #    local_end 1935-03-31 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61038842400, #    utc_start 1935-03-31 02:00:00 (Sun)
  61055172000, #      utc_end 1935-10-06 02:00:00 (Sun)
  61038846000, #  local_start 1935-03-31 03:00:00 (Sun)
  61055175600, #    local_end 1935-10-06 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61055172000, #    utc_start 1935-10-06 02:00:00 (Sun)
  61072106400, #      utc_end 1936-04-19 02:00:00 (Sun)
  61055172000, #  local_start 1935-10-06 02:00:00 (Sun)
  61072106400, #    local_end 1936-04-19 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61072106400, #    utc_start 1936-04-19 02:00:00 (Sun)
  61086621600, #      utc_end 1936-10-04 02:00:00 (Sun)
  61072110000, #  local_start 1936-04-19 03:00:00 (Sun)
  61086625200, #    local_end 1936-10-04 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61086621600, #    utc_start 1936-10-04 02:00:00 (Sun)
  61102346400, #      utc_end 1937-04-04 02:00:00 (Sun)
  61086621600, #  local_start 1936-10-04 02:00:00 (Sun)
  61102346400, #    local_end 1937-04-04 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61102346400, #    utc_start 1937-04-04 02:00:00 (Sun)
  61118071200, #      utc_end 1937-10-03 02:00:00 (Sun)
  61102350000, #  local_start 1937-04-04 03:00:00 (Sun)
  61118074800, #    local_end 1937-10-03 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61118071200, #    utc_start 1937-10-03 02:00:00 (Sun)
  61133191200, #      utc_end 1938-03-27 02:00:00 (Sun)
  61118071200, #  local_start 1937-10-03 02:00:00 (Sun)
  61133191200, #    local_end 1938-03-27 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61133191200, #    utc_start 1938-03-27 02:00:00 (Sun)
  61149520800, #      utc_end 1938-10-02 02:00:00 (Sun)
  61133194800, #  local_start 1938-03-27 03:00:00 (Sun)
  61149524400, #    local_end 1938-10-02 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61149520800, #    utc_start 1938-10-02 02:00:00 (Sun)
  61166455200, #      utc_end 1939-04-16 02:00:00 (Sun)
  61149520800, #  local_start 1938-10-02 02:00:00 (Sun)
  61166455200, #    local_end 1939-04-16 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61166455200, #    utc_start 1939-04-16 02:00:00 (Sun)
  61185204000, #      utc_end 1939-11-19 02:00:00 (Sun)
  61166458800, #  local_start 1939-04-16 03:00:00 (Sun)
  61185207600, #    local_end 1939-11-19 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61185204000, #    utc_start 1939-11-19 02:00:00 (Sun)
  61193671200, #      utc_end 1940-02-25 02:00:00 (Sun)
  61185204000, #  local_start 1939-11-19 02:00:00 (Sun)
  61193671200, #    local_end 1940-02-25 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61193671200, #    utc_start 1940-02-25 02:00:00 (Sun)
  61201015200, #      utc_end 1940-05-20 02:00:00 (Mon)
  61193674800, #  local_start 1940-02-25 03:00:00 (Sun)
  61201018800, #    local_end 1940-05-20 03:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  61201015200, #    utc_start 1940-05-20 02:00:00 (Mon)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61201022400, #  local_start 1940-05-20 04:00:00 (Mon)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61336389600, #      utc_end 1944-09-02 22:00:00 (Sat)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61336396800, #    local_end 1944-09-03 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61336389600, #    utc_start 1944-09-02 22:00:00 (Sat)
  61337610000, #      utc_end 1944-09-17 01:00:00 (Sun)
  61336396800, #  local_start 1944-09-03 00:00:00 (Sun)
  61337617200, #    local_end 1944-09-17 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61337610000, #    utc_start 1944-09-17 01:00:00 (Sun)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61337613600, #  local_start 1944-09-17 02:00:00 (Sun)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61369059600, #      utc_end 1945-09-16 01:00:00 (Sun)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61369066800, #    local_end 1945-09-16 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61369059600, #    utc_start 1945-09-16 01:00:00 (Sun)
  61390227600, #      utc_end 1946-05-19 01:00:00 (Sun)
  61369063200, #  local_start 1945-09-16 02:00:00 (Sun)
  61390231200, #    local_end 1946-05-19 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61390227600, #    utc_start 1946-05-19 01:00:00 (Sun)
  61402410000, #      utc_end 1946-10-07 01:00:00 (Mon)
  61390234800, #  local_start 1946-05-19 03:00:00 (Sun)
  61402417200, #    local_end 1946-10-07 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61402410000, #    utc_start 1946-10-07 01:00:00 (Mon)
  62356604400, #      utc_end 1976-12-31 23:00:00 (Fri)
  61402413600, #  local_start 1946-10-07 02:00:00 (Mon)
  62356608000, #    local_end 1977-01-01 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62356604400, #    utc_start 1976-12-31 23:00:00 (Fri)
  62364560400, #      utc_end 1977-04-03 01:00:00 (Sun)
  62356608000, #  local_start 1977-01-01 00:00:00 (Sat)
  62364564000, #    local_end 1977-04-03 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62364560400, #    utc_start 1977-04-03 01:00:00 (Sun)
  62379680400, #      utc_end 1977-09-25 01:00:00 (Sun)
  62364567600, #  local_start 1977-04-03 03:00:00 (Sun)
  62379687600, #    local_end 1977-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62379680400, #    utc_start 1977-09-25 01:00:00 (Sun)
  62396010000, #      utc_end 1978-04-02 01:00:00 (Sun)
  62379684000, #  local_start 1977-09-25 02:00:00 (Sun)
  62396013600, #    local_end 1978-04-02 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62396010000, #    utc_start 1978-04-02 01:00:00 (Sun)
  62411734800, #      utc_end 1978-10-01 01:00:00 (Sun)
  62396017200, #  local_start 1978-04-02 03:00:00 (Sun)
  62411742000, #    local_end 1978-10-01 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62411734800, #    utc_start 1978-10-01 01:00:00 (Sun)
  62427459600, #      utc_end 1979-04-01 01:00:00 (Sun)
  62411738400, #  local_start 1978-10-01 02:00:00 (Sun)
  62427463200, #    local_end 1979-04-01 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62427459600, #    utc_start 1979-04-01 01:00:00 (Sun)
  62443184400, #      utc_end 1979-09-30 01:00:00 (Sun)
  62427466800, #  local_start 1979-04-01 03:00:00 (Sun)
  62443191600, #    local_end 1979-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62443184400, #    utc_start 1979-09-30 01:00:00 (Sun)
  62459514000, #      utc_end 1980-04-06 01:00:00 (Sun)
  62443188000, #  local_start 1979-09-30 02:00:00 (Sun)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62459514000, #    utc_start 1980-04-06 01:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474641200, #    local_end 1980-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474637600, #  local_start 1980-09-28 02:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {82}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721720,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721720,
      'utc_rd_secs' => 0,
      'utc_year' => 1978
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721719,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721719,
      'utc_rd_secs' => 82800,
      'utc_year' => 1977
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_BRUSSELS

    $main::fatpacked{"DateTime/TimeZone/Europe/Bucharest.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_BUCHAREST';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Bucharest;
  $DateTime::TimeZone::Europe::Bucharest::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Bucharest::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59666278536, #      utc_end 1891-09-30 22:15:36 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59666284800, #    local_end 1891-10-01 00:00:00 (Thu)
  6264,
  0,
  'LMT',
      ],
      [
  59666278536, #    utc_start 1891-09-30 22:15:36 (Wed)
  60922534536, #      utc_end 1931-07-23 22:15:36 (Thu)
  59666284800, #  local_start 1891-10-01 00:00:00 (Thu)
  60922540800, #    local_end 1931-07-24 00:00:00 (Fri)
  6264,
  0,
  'BMT',
      ],
      [
  60922534536, #    utc_start 1931-07-23 22:15:36 (Thu)
  60948626400, #      utc_end 1932-05-20 22:00:00 (Fri)
  60922541736, #  local_start 1931-07-24 00:15:36 (Fri)
  60948633600, #    local_end 1932-05-21 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  60948626400, #    utc_start 1932-05-20 22:00:00 (Fri)
  60960204000, #      utc_end 1932-10-01 22:00:00 (Sat)
  60948637200, #  local_start 1932-05-21 01:00:00 (Sat)
  60960214800, #    local_end 1932-10-02 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  60960204000, #    utc_start 1932-10-01 22:00:00 (Sat)
  60975928800, #      utc_end 1933-04-01 22:00:00 (Sat)
  60960211200, #  local_start 1932-10-02 00:00:00 (Sun)
  60975936000, #    local_end 1933-04-02 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  60975928800, #    utc_start 1933-04-01 22:00:00 (Sat)
  60991653600, #      utc_end 1933-09-30 22:00:00 (Sat)
  60975939600, #  local_start 1933-04-02 01:00:00 (Sun)
  60991664400, #    local_end 1933-10-01 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  60991653600, #    utc_start 1933-09-30 22:00:00 (Sat)
  61007983200, #      utc_end 1934-04-07 22:00:00 (Sat)
  60991660800, #  local_start 1933-10-01 00:00:00 (Sun)
  61007990400, #    local_end 1934-04-08 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61007983200, #    utc_start 1934-04-07 22:00:00 (Sat)
  61023708000, #      utc_end 1934-10-06 22:00:00 (Sat)
  61007994000, #  local_start 1934-04-08 01:00:00 (Sun)
  61023718800, #    local_end 1934-10-07 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61023708000, #    utc_start 1934-10-06 22:00:00 (Sat)
  61039432800, #      utc_end 1935-04-06 22:00:00 (Sat)
  61023715200, #  local_start 1934-10-07 00:00:00 (Sun)
  61039440000, #    local_end 1935-04-07 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61039432800, #    utc_start 1935-04-06 22:00:00 (Sat)
  61055157600, #      utc_end 1935-10-05 22:00:00 (Sat)
  61039443600, #  local_start 1935-04-07 01:00:00 (Sun)
  61055168400, #    local_end 1935-10-06 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61055157600, #    utc_start 1935-10-05 22:00:00 (Sat)
  61070882400, #      utc_end 1936-04-04 22:00:00 (Sat)
  61055164800, #  local_start 1935-10-06 00:00:00 (Sun)
  61070889600, #    local_end 1936-04-05 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61070882400, #    utc_start 1936-04-04 22:00:00 (Sat)
  61086607200, #      utc_end 1936-10-03 22:00:00 (Sat)
  61070893200, #  local_start 1936-04-05 01:00:00 (Sun)
  61086618000, #    local_end 1936-10-04 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61086607200, #    utc_start 1936-10-03 22:00:00 (Sat)
  61102332000, #      utc_end 1937-04-03 22:00:00 (Sat)
  61086614400, #  local_start 1936-10-04 00:00:00 (Sun)
  61102339200, #    local_end 1937-04-04 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61102332000, #    utc_start 1937-04-03 22:00:00 (Sat)
  61118056800, #      utc_end 1937-10-02 22:00:00 (Sat)
  61102342800, #  local_start 1937-04-04 01:00:00 (Sun)
  61118067600, #    local_end 1937-10-03 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61118056800, #    utc_start 1937-10-02 22:00:00 (Sat)
  61133781600, #      utc_end 1938-04-02 22:00:00 (Sat)
  61118064000, #  local_start 1937-10-03 00:00:00 (Sun)
  61133788800, #    local_end 1938-04-03 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61133781600, #    utc_start 1938-04-02 22:00:00 (Sat)
  61149506400, #      utc_end 1938-10-01 22:00:00 (Sat)
  61133792400, #  local_start 1938-04-03 01:00:00 (Sun)
  61149517200, #    local_end 1938-10-02 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61149506400, #    utc_start 1938-10-01 22:00:00 (Sat)
  61165231200, #      utc_end 1939-04-01 22:00:00 (Sat)
  61149513600, #  local_start 1938-10-02 00:00:00 (Sun)
  61165238400, #    local_end 1939-04-02 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61165231200, #    utc_start 1939-04-01 22:00:00 (Sat)
  61180956000, #      utc_end 1939-09-30 22:00:00 (Sat)
  61165242000, #  local_start 1939-04-02 01:00:00 (Sun)
  61180966800, #    local_end 1939-10-01 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61180956000, #    utc_start 1939-09-30 22:00:00 (Sat)
  62432287200, #      utc_end 1979-05-26 22:00:00 (Sat)
  61180963200, #  local_start 1939-10-01 00:00:00 (Sun)
  62432294400, #    local_end 1979-05-27 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62432287200, #    utc_start 1979-05-26 22:00:00 (Sat)
  62443170000, #      utc_end 1979-09-29 21:00:00 (Sat)
  62432298000, #  local_start 1979-05-27 01:00:00 (Sun)
  62443180800, #    local_end 1979-09-30 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62443170000, #    utc_start 1979-09-29 21:00:00 (Sat)
  62459499600, #      utc_end 1980-04-05 21:00:00 (Sat)
  62443177200, #  local_start 1979-09-29 23:00:00 (Sat)
  62459506800, #    local_end 1980-04-05 23:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62459499600, #    utc_start 1980-04-05 21:00:00 (Sat)
  62474623200, #      utc_end 1980-09-27 22:00:00 (Sat)
  62459510400, #  local_start 1980-04-06 00:00:00 (Sun)
  62474634000, #    local_end 1980-09-28 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62474623200, #    utc_start 1980-09-27 22:00:00 (Sat)
  62490355200, #      utc_end 1981-03-29 00:00:00 (Sun)
  62474630400, #  local_start 1980-09-28 00:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62490355200, #    utc_start 1981-03-29 00:00:00 (Sun)
  62506080000, #      utc_end 1981-09-27 00:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62506080000, #    utc_start 1981-09-27 00:00:00 (Sun)
  62521804800, #      utc_end 1982-03-28 00:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62521804800, #    utc_start 1982-03-28 00:00:00 (Sun)
  62537529600, #      utc_end 1982-09-26 00:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62537529600, #    utc_start 1982-09-26 00:00:00 (Sun)
  62553254400, #      utc_end 1983-03-27 00:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62553254400, #    utc_start 1983-03-27 00:00:00 (Sun)
  62568979200, #      utc_end 1983-09-25 00:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62568979200, #    utc_start 1983-09-25 00:00:00 (Sun)
  62584704000, #      utc_end 1984-03-25 00:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62584704000, #    utc_start 1984-03-25 00:00:00 (Sun)
  62601033600, #      utc_end 1984-09-30 00:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62601033600, #    utc_start 1984-09-30 00:00:00 (Sun)
  62616758400, #      utc_end 1985-03-31 00:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62616758400, #    utc_start 1985-03-31 00:00:00 (Sun)
  62632483200, #      utc_end 1985-09-29 00:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62632483200, #    utc_start 1985-09-29 00:00:00 (Sun)
  62648208000, #      utc_end 1986-03-30 00:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62648208000, #    utc_start 1986-03-30 00:00:00 (Sun)
  62663932800, #      utc_end 1986-09-28 00:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62663932800, #    utc_start 1986-09-28 00:00:00 (Sun)
  62679657600, #      utc_end 1987-03-29 00:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62679657600, #    utc_start 1987-03-29 00:00:00 (Sun)
  62695382400, #      utc_end 1987-09-27 00:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62695382400, #    utc_start 1987-09-27 00:00:00 (Sun)
  62711107200, #      utc_end 1988-03-27 00:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62711107200, #    utc_start 1988-03-27 00:00:00 (Sun)
  62726832000, #      utc_end 1988-09-25 00:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62726832000, #    utc_start 1988-09-25 00:00:00 (Sun)
  62742556800, #      utc_end 1989-03-26 00:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62742556800, #    utc_start 1989-03-26 00:00:00 (Sun)
  62758281600, #      utc_end 1989-09-24 00:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62758281600, #    utc_start 1989-09-24 00:00:00 (Sun)
  62774006400, #      utc_end 1990-03-25 00:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62774006400, #    utc_start 1990-03-25 00:00:00 (Sun)
  62790336000, #      utc_end 1990-09-30 00:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62790336000, #    utc_start 1990-09-30 00:00:00 (Sun)
  62798364000, #      utc_end 1990-12-31 22:00:00 (Mon)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62798371200, #    local_end 1991-01-01 00:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  62798364000, #    utc_start 1990-12-31 22:00:00 (Mon)
  62806053600, #      utc_end 1991-03-30 22:00:00 (Sat)
  62798371200, #  local_start 1991-01-01 00:00:00 (Tue)
  62806060800, #    local_end 1991-03-31 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62806053600, #    utc_start 1991-03-30 22:00:00 (Sat)
  62821778400, #      utc_end 1991-09-28 22:00:00 (Sat)
  62806064400, #  local_start 1991-03-31 01:00:00 (Sun)
  62821789200, #    local_end 1991-09-29 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821778400, #    utc_start 1991-09-28 22:00:00 (Sat)
  62837503200, #      utc_end 1992-03-28 22:00:00 (Sat)
  62821785600, #  local_start 1991-09-29 00:00:00 (Sun)
  62837510400, #    local_end 1992-03-29 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837503200, #    utc_start 1992-03-28 22:00:00 (Sat)
  62853228000, #      utc_end 1992-09-26 22:00:00 (Sat)
  62837514000, #  local_start 1992-03-29 01:00:00 (Sun)
  62853238800, #    local_end 1992-09-27 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853228000, #    utc_start 1992-09-26 22:00:00 (Sat)
  62868952800, #      utc_end 1993-03-27 22:00:00 (Sat)
  62853235200, #  local_start 1992-09-27 00:00:00 (Sun)
  62868960000, #    local_end 1993-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868952800, #    utc_start 1993-03-27 22:00:00 (Sat)
  62884677600, #      utc_end 1993-09-25 22:00:00 (Sat)
  62868963600, #  local_start 1993-03-28 01:00:00 (Sun)
  62884688400, #    local_end 1993-09-26 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884677600, #    utc_start 1993-09-25 22:00:00 (Sat)
  62893058400, #      utc_end 1993-12-31 22:00:00 (Fri)
  62884684800, #  local_start 1993-09-26 00:00:00 (Sun)
  62893065600, #    local_end 1994-01-01 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62893058400, #    utc_start 1993-12-31 22:00:00 (Fri)
  62900402400, #      utc_end 1994-03-26 22:00:00 (Sat)
  62893065600, #  local_start 1994-01-01 00:00:00 (Sat)
  62900409600, #    local_end 1994-03-27 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900402400, #    utc_start 1994-03-26 22:00:00 (Sat)
  62916123600, #      utc_end 1994-09-24 21:00:00 (Sat)
  62900413200, #  local_start 1994-03-27 01:00:00 (Sun)
  62916134400, #    local_end 1994-09-25 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916123600, #    utc_start 1994-09-24 21:00:00 (Sat)
  62931852000, #      utc_end 1995-03-25 22:00:00 (Sat)
  62916130800, #  local_start 1994-09-24 23:00:00 (Sat)
  62931859200, #    local_end 1995-03-26 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931852000, #    utc_start 1995-03-25 22:00:00 (Sat)
  62947573200, #      utc_end 1995-09-23 21:00:00 (Sat)
  62931862800, #  local_start 1995-03-26 01:00:00 (Sun)
  62947584000, #    local_end 1995-09-24 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947573200, #    utc_start 1995-09-23 21:00:00 (Sat)
  62963906400, #      utc_end 1996-03-30 22:00:00 (Sat)
  62947580400, #  local_start 1995-09-23 23:00:00 (Sat)
  62963913600, #    local_end 1996-03-31 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963906400, #    utc_start 1996-03-30 22:00:00 (Sat)
  62982046800, #      utc_end 1996-10-26 21:00:00 (Sat)
  62963917200, #  local_start 1996-03-31 01:00:00 (Sun)
  62982057600, #    local_end 1996-10-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62982046800, #    utc_start 1996-10-26 21:00:00 (Sat)
  62987752800, #      utc_end 1996-12-31 22:00:00 (Tue)
  62982054000, #  local_start 1996-10-26 23:00:00 (Sat)
  62987760000, #    local_end 1997-01-01 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62987752800, #    utc_start 1996-12-31 22:00:00 (Tue)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62987760000, #  local_start 1997-01-01 00:00:00 (Wed)
  62995374000, #    local_end 1997-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995377600, #  local_start 1997-03-30 04:00:00 (Sun)
  63013521600, #    local_end 1997-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013518000, #  local_start 1997-10-26 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026827200, #  local_start 1998-03-29 04:00:00 (Sun)
  63044971200, #    local_end 1998-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044967600, #  local_start 1998-10-25 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058276800, #  local_start 1999-03-28 04:00:00 (Sun)
  63077025600, #    local_end 1999-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089726400, #  local_start 2000-03-26 04:00:00 (Sun)
  63108475200, #    local_end 2000-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108471600, #  local_start 2000-10-29 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121176000, #  local_start 2001-03-25 04:00:00 (Sun)
  63139924800, #    local_end 2001-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139921200, #  local_start 2001-10-28 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153230400, #  local_start 2002-03-31 04:00:00 (Sun)
  63171374400, #    local_end 2002-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171370800, #  local_start 2002-10-27 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184680000, #  local_start 2003-03-30 04:00:00 (Sun)
  63202824000, #    local_end 2003-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216129600, #  local_start 2004-03-28 04:00:00 (Sun)
  63234878400, #    local_end 2004-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247579200, #  local_start 2005-03-27 04:00:00 (Sun)
  63266328000, #    local_end 2005-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279025200, #    local_end 2006-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279028800, #  local_start 2006-03-26 04:00:00 (Sun)
  63297777600, #    local_end 2006-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310478400, #  local_start 2007-03-25 04:00:00 (Sun)
  63329227200, #    local_end 2007-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63342529200, #    local_end 2008-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342532800, #  local_start 2008-03-30 04:00:00 (Sun)
  63360676800, #    local_end 2008-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373978800, #    local_end 2009-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373982400, #  local_start 2009-03-29 04:00:00 (Sun)
  63392126400, #    local_end 2009-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392122800, #  local_start 2009-10-25 03:00:00 (Sun)
  63405428400, #    local_end 2010-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405432000, #  local_start 2010-03-28 04:00:00 (Sun)
  63424180800, #    local_end 2010-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424177200, #  local_start 2010-10-31 03:00:00 (Sun)
  63436878000, #    local_end 2011-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436881600, #  local_start 2011-03-27 04:00:00 (Sun)
  63455630400, #    local_end 2011-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455626800, #  local_start 2011-10-30 03:00:00 (Sun)
  63468327600, #    local_end 2012-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468331200, #  local_start 2012-03-25 04:00:00 (Sun)
  63487080000, #    local_end 2012-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487076400, #  local_start 2012-10-28 03:00:00 (Sun)
  63500382000, #    local_end 2013-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500385600, #  local_start 2013-03-31 04:00:00 (Sun)
  63518529600, #    local_end 2013-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518526000, #  local_start 2013-10-27 03:00:00 (Sun)
  63531831600, #    local_end 2014-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531835200, #  local_start 2014-03-30 04:00:00 (Sun)
  63549979200, #    local_end 2014-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549975600, #  local_start 2014-10-26 03:00:00 (Sun)
  63563281200, #    local_end 2015-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563284800, #  local_start 2015-03-29 04:00:00 (Sun)
  63581428800, #    local_end 2015-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581425200, #  local_start 2015-10-25 03:00:00 (Sun)
  63594730800, #    local_end 2016-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594734400, #  local_start 2016-03-27 04:00:00 (Sun)
  63613483200, #    local_end 2016-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613479600, #  local_start 2016-10-30 03:00:00 (Sun)
  63626180400, #    local_end 2017-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626184000, #  local_start 2017-03-26 04:00:00 (Sun)
  63644932800, #    local_end 2017-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644929200, #  local_start 2017-10-29 03:00:00 (Sun)
  63657630000, #    local_end 2018-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657633600, #  local_start 2018-03-25 04:00:00 (Sun)
  63676382400, #    local_end 2018-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676378800, #  local_start 2018-10-28 03:00:00 (Sun)
  63689684400, #    local_end 2019-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689688000, #  local_start 2019-03-31 04:00:00 (Sun)
  63707832000, #    local_end 2019-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707828400, #  local_start 2019-10-27 03:00:00 (Sun)
  63721134000, #    local_end 2020-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721137600, #  local_start 2020-03-29 04:00:00 (Sun)
  63739281600, #    local_end 2020-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739278000, #  local_start 2020-10-25 03:00:00 (Sun)
  63752583600, #    local_end 2021-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752587200, #  local_start 2021-03-28 04:00:00 (Sun)
  63771336000, #    local_end 2021-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771332400, #  local_start 2021-10-31 03:00:00 (Sun)
  63784033200, #    local_end 2022-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784036800, #  local_start 2022-03-27 04:00:00 (Sun)
  63802785600, #    local_end 2022-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802782000, #  local_start 2022-10-30 03:00:00 (Sun)
  63815482800, #    local_end 2023-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815486400, #  local_start 2023-03-26 04:00:00 (Sun)
  63834235200, #    local_end 2023-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834231600, #  local_start 2023-10-29 03:00:00 (Sun)
  63847537200, #    local_end 2024-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847540800, #  local_start 2024-03-31 04:00:00 (Sun)
  63865684800, #    local_end 2024-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865681200, #  local_start 2024-10-27 03:00:00 (Sun)
  63878986800, #    local_end 2025-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878990400, #  local_start 2025-03-30 04:00:00 (Sun)
  63897134400, #    local_end 2025-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897130800, #  local_start 2025-10-26 03:00:00 (Sun)
  63910436400, #    local_end 2026-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910440000, #  local_start 2026-03-29 04:00:00 (Sun)
  63928584000, #    local_end 2026-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928580400, #  local_start 2026-10-25 03:00:00 (Sun)
  63941886000, #    local_end 2027-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941889600, #  local_start 2027-03-28 04:00:00 (Sun)
  63960638400, #    local_end 2027-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {57}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 729025,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 729025,
      'utc_rd_secs' => 0,
      'utc_year' => 1998
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 729024,
      'local_rd_secs' => 79200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 729024,
      'utc_rd_secs' => 79200,
      'utc_year' => 1997
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_BUCHAREST

    $main::fatpacked{"DateTime/TimeZone/Europe/Budapest.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_BUDAPEST';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Budapest;
  $DateTime::TimeZone::Europe::Budapest::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Budapest::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59634744220, #      utc_end 1890-09-30 22:43:40 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59634748800, #    local_end 1890-10-01 00:00:00 (Wed)
  4580,
  0,
  'LMT',
      ],
      [
  59634744220, #    utc_start 1890-09-30 22:43:40 (Tue)
  60441976800, #      utc_end 1916-04-30 22:00:00 (Sun)
  59634747820, #  local_start 1890-09-30 23:43:40 (Tue)
  60441980400, #    local_end 1916-04-30 23:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60441976800, #    utc_start 1916-04-30 22:00:00 (Sun)
  60455199600, #      utc_end 1916-09-30 23:00:00 (Sat)
  60441984000, #  local_start 1916-05-01 00:00:00 (Mon)
  60455206800, #    local_end 1916-10-01 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60455199600, #    utc_start 1916-09-30 23:00:00 (Sat)
  60472227600, #      utc_end 1917-04-16 01:00:00 (Mon)
  60455203200, #  local_start 1916-10-01 00:00:00 (Sun)
  60472231200, #    local_end 1917-04-16 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60472227600, #    utc_start 1917-04-16 01:00:00 (Mon)
  60485533200, #      utc_end 1917-09-17 01:00:00 (Mon)
  60472234800, #  local_start 1917-04-16 03:00:00 (Mon)
  60485540400, #    local_end 1917-09-17 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60485533200, #    utc_start 1917-09-17 01:00:00 (Mon)
  60494684400, #      utc_end 1917-12-31 23:00:00 (Mon)
  60485536800, #  local_start 1917-09-17 02:00:00 (Mon)
  60494688000, #    local_end 1918-01-01 00:00:00 (Tue)
  3600,
  0,
  'CET',
      ],
      [
  60494684400, #    utc_start 1917-12-31 23:00:00 (Mon)
  60502471200, #      utc_end 1918-04-01 02:00:00 (Mon)
  60494688000, #  local_start 1918-01-01 00:00:00 (Tue)
  60502474800, #    local_end 1918-04-01 03:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60502471200, #    utc_start 1918-04-01 02:00:00 (Mon)
  60516982800, #      utc_end 1918-09-16 01:00:00 (Mon)
  60502478400, #  local_start 1918-04-01 04:00:00 (Mon)
  60516990000, #    local_end 1918-09-16 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60516982800, #    utc_start 1918-09-16 01:00:00 (Mon)
  60535216800, #      utc_end 1919-04-15 02:00:00 (Tue)
  60516986400, #  local_start 1918-09-16 02:00:00 (Mon)
  60535220400, #    local_end 1919-04-15 03:00:00 (Tue)
  3600,
  0,
  'CET',
      ],
      [
  60535216800, #    utc_start 1919-04-15 02:00:00 (Tue)
  60554480400, #      utc_end 1919-11-24 01:00:00 (Mon)
  60535224000, #  local_start 1919-04-15 04:00:00 (Tue)
  60554487600, #    local_end 1919-11-24 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60554480400, #    utc_start 1919-11-24 01:00:00 (Mon)
  61228911600, #      utc_end 1941-04-07 23:00:00 (Mon)
  60554484000, #  local_start 1919-11-24 02:00:00 (Mon)
  61228915200, #    local_end 1941-04-08 00:00:00 (Tue)
  3600,
  0,
  'CET',
      ],
      [
  61228911600, #    utc_start 1941-04-07 23:00:00 (Mon)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61228918800, #  local_start 1941-04-08 01:00:00 (Tue)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61338906000, #      utc_end 1944-10-02 01:00:00 (Mon)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61338913200, #    local_end 1944-10-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61338906000, #    utc_start 1944-10-02 01:00:00 (Mon)
  61346761200, #      utc_end 1944-12-31 23:00:00 (Sun)
  61338909600, #  local_start 1944-10-02 02:00:00 (Mon)
  61346764800, #    local_end 1945-01-01 00:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61346761200, #    utc_start 1944-12-31 23:00:00 (Sun)
  61357212000, #      utc_end 1945-05-01 22:00:00 (Tue)
  61346764800, #  local_start 1945-01-01 00:00:00 (Mon)
  61357215600, #    local_end 1945-05-01 23:00:00 (Tue)
  3600,
  0,
  'CET',
      ],
      [
  61357212000, #    utc_start 1945-05-01 22:00:00 (Tue)
  61373023200, #      utc_end 1945-10-31 22:00:00 (Wed)
  61357219200, #  local_start 1945-05-02 00:00:00 (Wed)
  61373030400, #    local_end 1945-11-01 00:00:00 (Thu)
  7200,
  1,
  'CEST',
      ],
      [
  61373023200, #    utc_start 1945-10-31 22:00:00 (Wed)
  61385994000, #      utc_end 1946-03-31 01:00:00 (Sun)
  61373026800, #  local_start 1945-10-31 23:00:00 (Wed)
  61385997600, #    local_end 1946-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61385994000, #    utc_start 1946-03-31 01:00:00 (Sun)
  61402323600, #      utc_end 1946-10-06 01:00:00 (Sun)
  61386001200, #  local_start 1946-03-31 03:00:00 (Sun)
  61402330800, #    local_end 1946-10-06 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61402323600, #    utc_start 1946-10-06 01:00:00 (Sun)
  61418048400, #      utc_end 1947-04-06 01:00:00 (Sun)
  61402327200, #  local_start 1946-10-06 02:00:00 (Sun)
  61418052000, #    local_end 1947-04-06 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61418048400, #    utc_start 1947-04-06 01:00:00 (Sun)
  61433773200, #      utc_end 1947-10-05 01:00:00 (Sun)
  61418055600, #  local_start 1947-04-06 03:00:00 (Sun)
  61433780400, #    local_end 1947-10-05 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61433773200, #    utc_start 1947-10-05 01:00:00 (Sun)
  61449498000, #      utc_end 1948-04-04 01:00:00 (Sun)
  61433776800, #  local_start 1947-10-05 02:00:00 (Sun)
  61449501600, #    local_end 1948-04-04 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61449498000, #    utc_start 1948-04-04 01:00:00 (Sun)
  61465222800, #      utc_end 1948-10-03 01:00:00 (Sun)
  61449505200, #  local_start 1948-04-04 03:00:00 (Sun)
  61465230000, #    local_end 1948-10-03 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61465222800, #    utc_start 1948-10-03 01:00:00 (Sun)
  61481552400, #      utc_end 1949-04-10 01:00:00 (Sun)
  61465226400, #  local_start 1948-10-03 02:00:00 (Sun)
  61481556000, #    local_end 1949-04-10 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61481552400, #    utc_start 1949-04-10 01:00:00 (Sun)
  61496672400, #      utc_end 1949-10-02 01:00:00 (Sun)
  61481559600, #  local_start 1949-04-10 03:00:00 (Sun)
  61496679600, #    local_end 1949-10-02 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61496672400, #    utc_start 1949-10-02 01:00:00 (Sun)
  61513693200, #      utc_end 1950-04-17 01:00:00 (Mon)
  61496676000, #  local_start 1949-10-02 02:00:00 (Sun)
  61513696800, #    local_end 1950-04-17 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61513693200, #    utc_start 1950-04-17 01:00:00 (Mon)
  61530022800, #      utc_end 1950-10-23 01:00:00 (Mon)
  61513700400, #  local_start 1950-04-17 03:00:00 (Mon)
  61530030000, #    local_end 1950-10-23 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61530022800, #    utc_start 1950-10-23 01:00:00 (Mon)
  61643026800, #      utc_end 1954-05-22 23:00:00 (Sat)
  61530026400, #  local_start 1950-10-23 02:00:00 (Mon)
  61643030400, #    local_end 1954-05-23 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61643026800, #    utc_start 1954-05-22 23:00:00 (Sat)
  61654514400, #      utc_end 1954-10-02 22:00:00 (Sat)
  61643034000, #  local_start 1954-05-23 01:00:00 (Sun)
  61654521600, #    local_end 1954-10-03 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61654514400, #    utc_start 1954-10-02 22:00:00 (Sat)
  61674562800, #      utc_end 1955-05-22 23:00:00 (Sun)
  61654518000, #  local_start 1954-10-02 23:00:00 (Sat)
  61674566400, #    local_end 1955-05-23 00:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61674562800, #    utc_start 1955-05-22 23:00:00 (Sun)
  61686050400, #      utc_end 1955-10-02 22:00:00 (Sun)
  61674570000, #  local_start 1955-05-23 01:00:00 (Mon)
  61686057600, #    local_end 1955-10-03 00:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61686050400, #    utc_start 1955-10-02 22:00:00 (Sun)
  61707135600, #      utc_end 1956-06-02 23:00:00 (Sat)
  61686054000, #  local_start 1955-10-02 23:00:00 (Sun)
  61707139200, #    local_end 1956-06-03 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61707135600, #    utc_start 1956-06-02 23:00:00 (Sat)
  61717413600, #      utc_end 1956-09-29 22:00:00 (Sat)
  61707142800, #  local_start 1956-06-03 01:00:00 (Sun)
  61717420800, #    local_end 1956-09-30 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61717413600, #    utc_start 1956-09-29 22:00:00 (Sat)
  61738588800, #      utc_end 1957-06-02 00:00:00 (Sun)
  61717417200, #  local_start 1956-09-29 23:00:00 (Sat)
  61738592400, #    local_end 1957-06-02 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61738588800, #    utc_start 1957-06-02 00:00:00 (Sun)
  61748874000, #      utc_end 1957-09-29 01:00:00 (Sun)
  61738596000, #  local_start 1957-06-02 02:00:00 (Sun)
  61748881200, #    local_end 1957-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61748874000, #    utc_start 1957-09-29 01:00:00 (Sun)
  62459510400, #      utc_end 1980-04-06 00:00:00 (Sun)
  61748877600, #  local_start 1957-09-29 02:00:00 (Sun)
  62459514000, #    local_end 1980-04-06 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62459510400, #    utc_start 1980-04-06 00:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459517600, #  local_start 1980-04-06 02:00:00 (Sun)
  62474641200, #    local_end 1980-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474637600, #  local_start 1980-09-28 02:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {65}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723086,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723086,
      'utc_rd_secs' => 7200,
      'utc_year' => 1981
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723086,
      'local_rd_secs' => 3600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723086,
      'utc_rd_secs' => 3600,
      'utc_year' => 1981
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_BUDAPEST

    $main::fatpacked{"DateTime/TimeZone/Europe/Chisinau.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_CHISINAU';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Chisinau;
  $DateTime::TimeZone::Europe::Chisinau::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Chisinau::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295535480, #      utc_end 1879-12-31 22:04:40 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  6920,
  0,
  'LMT',
      ],
      [
  59295535480, #    utc_start 1879-12-31 22:04:40 (Wed)
  60498569100, #      utc_end 1918-02-14 22:05:00 (Thu)
  59295542380, #  local_start 1879-12-31 23:59:40 (Wed)
  60498576000, #    local_end 1918-02-15 00:00:00 (Fri)
  6900,
  0,
  'CMT',
      ],
      [
  60498569100, #    utc_start 1918-02-14 22:05:00 (Thu)
  60922534536, #      utc_end 1931-07-23 22:15:36 (Thu)
  60498575364, #  local_start 1918-02-14 23:49:24 (Thu)
  60922540800, #    local_end 1931-07-24 00:00:00 (Fri)
  6264,
  0,
  'BMT',
      ],
      [
  60922534536, #    utc_start 1931-07-23 22:15:36 (Thu)
  60948626400, #      utc_end 1932-05-20 22:00:00 (Fri)
  60922541736, #  local_start 1931-07-24 00:15:36 (Fri)
  60948633600, #    local_end 1932-05-21 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  60948626400, #    utc_start 1932-05-20 22:00:00 (Fri)
  60960204000, #      utc_end 1932-10-01 22:00:00 (Sat)
  60948637200, #  local_start 1932-05-21 01:00:00 (Sat)
  60960214800, #    local_end 1932-10-02 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  60960204000, #    utc_start 1932-10-01 22:00:00 (Sat)
  60975928800, #      utc_end 1933-04-01 22:00:00 (Sat)
  60960211200, #  local_start 1932-10-02 00:00:00 (Sun)
  60975936000, #    local_end 1933-04-02 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  60975928800, #    utc_start 1933-04-01 22:00:00 (Sat)
  60991653600, #      utc_end 1933-09-30 22:00:00 (Sat)
  60975939600, #  local_start 1933-04-02 01:00:00 (Sun)
  60991664400, #    local_end 1933-10-01 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  60991653600, #    utc_start 1933-09-30 22:00:00 (Sat)
  61007983200, #      utc_end 1934-04-07 22:00:00 (Sat)
  60991660800, #  local_start 1933-10-01 00:00:00 (Sun)
  61007990400, #    local_end 1934-04-08 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61007983200, #    utc_start 1934-04-07 22:00:00 (Sat)
  61023708000, #      utc_end 1934-10-06 22:00:00 (Sat)
  61007994000, #  local_start 1934-04-08 01:00:00 (Sun)
  61023718800, #    local_end 1934-10-07 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61023708000, #    utc_start 1934-10-06 22:00:00 (Sat)
  61039432800, #      utc_end 1935-04-06 22:00:00 (Sat)
  61023715200, #  local_start 1934-10-07 00:00:00 (Sun)
  61039440000, #    local_end 1935-04-07 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61039432800, #    utc_start 1935-04-06 22:00:00 (Sat)
  61055157600, #      utc_end 1935-10-05 22:00:00 (Sat)
  61039443600, #  local_start 1935-04-07 01:00:00 (Sun)
  61055168400, #    local_end 1935-10-06 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61055157600, #    utc_start 1935-10-05 22:00:00 (Sat)
  61070882400, #      utc_end 1936-04-04 22:00:00 (Sat)
  61055164800, #  local_start 1935-10-06 00:00:00 (Sun)
  61070889600, #    local_end 1936-04-05 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61070882400, #    utc_start 1936-04-04 22:00:00 (Sat)
  61086607200, #      utc_end 1936-10-03 22:00:00 (Sat)
  61070893200, #  local_start 1936-04-05 01:00:00 (Sun)
  61086618000, #    local_end 1936-10-04 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61086607200, #    utc_start 1936-10-03 22:00:00 (Sat)
  61102332000, #      utc_end 1937-04-03 22:00:00 (Sat)
  61086614400, #  local_start 1936-10-04 00:00:00 (Sun)
  61102339200, #    local_end 1937-04-04 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61102332000, #    utc_start 1937-04-03 22:00:00 (Sat)
  61118056800, #      utc_end 1937-10-02 22:00:00 (Sat)
  61102342800, #  local_start 1937-04-04 01:00:00 (Sun)
  61118067600, #    local_end 1937-10-03 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61118056800, #    utc_start 1937-10-02 22:00:00 (Sat)
  61133781600, #      utc_end 1938-04-02 22:00:00 (Sat)
  61118064000, #  local_start 1937-10-03 00:00:00 (Sun)
  61133788800, #    local_end 1938-04-03 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61133781600, #    utc_start 1938-04-02 22:00:00 (Sat)
  61149506400, #      utc_end 1938-10-01 22:00:00 (Sat)
  61133792400, #  local_start 1938-04-03 01:00:00 (Sun)
  61149517200, #    local_end 1938-10-02 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61149506400, #    utc_start 1938-10-01 22:00:00 (Sat)
  61165231200, #      utc_end 1939-04-01 22:00:00 (Sat)
  61149513600, #  local_start 1938-10-02 00:00:00 (Sun)
  61165238400, #    local_end 1939-04-02 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61165231200, #    utc_start 1939-04-01 22:00:00 (Sat)
  61180956000, #      utc_end 1939-09-30 22:00:00 (Sat)
  61165242000, #  local_start 1939-04-02 01:00:00 (Sun)
  61180966800, #    local_end 1939-10-01 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61180956000, #    utc_start 1939-09-30 22:00:00 (Sat)
  61208517600, #      utc_end 1940-08-14 22:00:00 (Wed)
  61180963200, #  local_start 1939-10-01 00:00:00 (Sun)
  61208524800, #    local_end 1940-08-15 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  61208517600, #    utc_start 1940-08-14 22:00:00 (Wed)
  61237544400, #      utc_end 1941-07-16 21:00:00 (Wed)
  61208528400, #  local_start 1940-08-15 01:00:00 (Thu)
  61237555200, #    local_end 1941-07-17 00:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  61237544400, #    utc_start 1941-07-16 21:00:00 (Wed)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61237551600, #  local_start 1941-07-16 23:00:00 (Wed)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61335525600, #      utc_end 1944-08-23 22:00:00 (Wed)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61335532800, #    local_end 1944-08-24 00:00:00 (Thu)
  7200,
  1,
  'CEST',
      ],
      [
  61335525600, #    utc_start 1944-08-23 22:00:00 (Wed)
  62490603600, #      utc_end 1981-03-31 21:00:00 (Tue)
  61335536400, #  local_start 1944-08-24 01:00:00 (Thu)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  10800,
  0,
  'MSK',
      ],
      [
  62490603600, #    utc_start 1981-03-31 21:00:00 (Tue)
  62506411200, #      utc_end 1981-09-30 20:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  14400,
  1,
  'MSD',
      ],
      [
  62506411200, #    utc_start 1981-09-30 20:00:00 (Wed)
  62522139600, #      utc_end 1982-03-31 21:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  10800,
  0,
  'MSK',
      ],
      [
  62522139600, #    utc_start 1982-03-31 21:00:00 (Wed)
  62537947200, #      utc_end 1982-09-30 20:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  14400,
  1,
  'MSD',
      ],
      [
  62537947200, #    utc_start 1982-09-30 20:00:00 (Thu)
  62553675600, #      utc_end 1983-03-31 21:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  10800,
  0,
  'MSK',
      ],
      [
  62553675600, #    utc_start 1983-03-31 21:00:00 (Thu)
  62569483200, #      utc_end 1983-09-30 20:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  14400,
  1,
  'MSD',
      ],
      [
  62569483200, #    utc_start 1983-09-30 20:00:00 (Fri)
  62585298000, #      utc_end 1984-03-31 21:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62585298000, #    utc_start 1984-03-31 21:00:00 (Sat)
  62601030000, #      utc_end 1984-09-29 23:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62601030000, #    utc_start 1984-09-29 23:00:00 (Sat)
  62616754800, #      utc_end 1985-03-30 23:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62616754800, #    utc_start 1985-03-30 23:00:00 (Sat)
  62632479600, #      utc_end 1985-09-28 23:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62632479600, #    utc_start 1985-09-28 23:00:00 (Sat)
  62648204400, #      utc_end 1986-03-29 23:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62648204400, #    utc_start 1986-03-29 23:00:00 (Sat)
  62663929200, #      utc_end 1986-09-27 23:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62663929200, #    utc_start 1986-09-27 23:00:00 (Sat)
  62679654000, #      utc_end 1987-03-28 23:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62679654000, #    utc_start 1987-03-28 23:00:00 (Sat)
  62695378800, #      utc_end 1987-09-26 23:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62695378800, #    utc_start 1987-09-26 23:00:00 (Sat)
  62711103600, #      utc_end 1988-03-26 23:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62711103600, #    utc_start 1988-03-26 23:00:00 (Sat)
  62726828400, #      utc_end 1988-09-24 23:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62726828400, #    utc_start 1988-09-24 23:00:00 (Sat)
  62742553200, #      utc_end 1989-03-25 23:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62742553200, #    utc_start 1989-03-25 23:00:00 (Sat)
  62758278000, #      utc_end 1989-09-23 23:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62758278000, #    utc_start 1989-09-23 23:00:00 (Sat)
  62774002800, #      utc_end 1990-03-24 23:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62774002800, #    utc_start 1990-03-24 23:00:00 (Sat)
  62777628000, #      utc_end 1990-05-05 22:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62777642400, #    local_end 1990-05-06 02:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62777628000, #    utc_start 1990-05-05 22:00:00 (Sat)
  62790336000, #      utc_end 1990-09-30 00:00:00 (Sun)
  62777638800, #  local_start 1990-05-06 01:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62790336000, #    utc_start 1990-09-30 00:00:00 (Sun)
  62806060800, #      utc_end 1991-03-31 00:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62806060800, #    utc_start 1991-03-31 00:00:00 (Sun)
  62821785600, #      utc_end 1991-09-29 00:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821785600, #    utc_start 1991-09-29 00:00:00 (Sun)
  62829900000, #      utc_end 1991-12-31 22:00:00 (Tue)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62829907200, #    local_end 1992-01-01 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62829900000, #    utc_start 1991-12-31 22:00:00 (Tue)
  62837503200, #      utc_end 1992-03-28 22:00:00 (Sat)
  62829907200, #  local_start 1992-01-01 00:00:00 (Wed)
  62837510400, #    local_end 1992-03-29 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837503200, #    utc_start 1992-03-28 22:00:00 (Sat)
  62853224400, #      utc_end 1992-09-26 21:00:00 (Sat)
  62837514000, #  local_start 1992-03-29 01:00:00 (Sun)
  62853235200, #    local_end 1992-09-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853224400, #    utc_start 1992-09-26 21:00:00 (Sat)
  62868952800, #      utc_end 1993-03-27 22:00:00 (Sat)
  62853231600, #  local_start 1992-09-26 23:00:00 (Sat)
  62868960000, #    local_end 1993-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868952800, #    utc_start 1993-03-27 22:00:00 (Sat)
  62884674000, #      utc_end 1993-09-25 21:00:00 (Sat)
  62868963600, #  local_start 1993-03-28 01:00:00 (Sun)
  62884684800, #    local_end 1993-09-26 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884674000, #    utc_start 1993-09-25 21:00:00 (Sat)
  62900402400, #      utc_end 1994-03-26 22:00:00 (Sat)
  62884681200, #  local_start 1993-09-25 23:00:00 (Sat)
  62900409600, #    local_end 1994-03-27 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900402400, #    utc_start 1994-03-26 22:00:00 (Sat)
  62916123600, #      utc_end 1994-09-24 21:00:00 (Sat)
  62900413200, #  local_start 1994-03-27 01:00:00 (Sun)
  62916134400, #    local_end 1994-09-25 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916123600, #    utc_start 1994-09-24 21:00:00 (Sat)
  62931852000, #      utc_end 1995-03-25 22:00:00 (Sat)
  62916130800, #  local_start 1994-09-24 23:00:00 (Sat)
  62931859200, #    local_end 1995-03-26 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931852000, #    utc_start 1995-03-25 22:00:00 (Sat)
  62947573200, #      utc_end 1995-09-23 21:00:00 (Sat)
  62931862800, #  local_start 1995-03-26 01:00:00 (Sun)
  62947584000, #    local_end 1995-09-24 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947573200, #    utc_start 1995-09-23 21:00:00 (Sat)
  62963906400, #      utc_end 1996-03-30 22:00:00 (Sat)
  62947580400, #  local_start 1995-09-23 23:00:00 (Sat)
  62963913600, #    local_end 1996-03-31 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963906400, #    utc_start 1996-03-30 22:00:00 (Sat)
  62982046800, #      utc_end 1996-10-26 21:00:00 (Sat)
  62963917200, #  local_start 1996-03-31 01:00:00 (Sun)
  62982057600, #    local_end 1996-10-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62982046800, #    utc_start 1996-10-26 21:00:00 (Sat)
  62987752800, #      utc_end 1996-12-31 22:00:00 (Tue)
  62982054000, #  local_start 1996-10-26 23:00:00 (Sat)
  62987760000, #    local_end 1997-01-01 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62987752800, #    utc_start 1996-12-31 22:00:00 (Tue)
  62995363200, #      utc_end 1997-03-30 00:00:00 (Sun)
  62987760000, #  local_start 1997-01-01 00:00:00 (Wed)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995363200, #    utc_start 1997-03-30 00:00:00 (Sun)
  63013507200, #      utc_end 1997-10-26 00:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63013507200, #    utc_start 1997-10-26 00:00:00 (Sun)
  63026812800, #      utc_end 1998-03-29 00:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026812800, #    utc_start 1998-03-29 00:00:00 (Sun)
  63044956800, #      utc_end 1998-10-25 00:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63044956800, #    utc_start 1998-10-25 00:00:00 (Sun)
  63058262400, #      utc_end 1999-03-28 00:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058262400, #    utc_start 1999-03-28 00:00:00 (Sun)
  63077011200, #      utc_end 1999-10-31 00:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077011200, #    utc_start 1999-10-31 00:00:00 (Sun)
  63089712000, #      utc_end 2000-03-26 00:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63089712000, #    utc_start 2000-03-26 00:00:00 (Sun)
  63108460800, #      utc_end 2000-10-29 00:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63108460800, #    utc_start 2000-10-29 00:00:00 (Sun)
  63121161600, #      utc_end 2001-03-25 00:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121161600, #    utc_start 2001-03-25 00:00:00 (Sun)
  63139910400, #      utc_end 2001-10-28 00:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63139910400, #    utc_start 2001-10-28 00:00:00 (Sun)
  63153216000, #      utc_end 2002-03-31 00:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153216000, #    utc_start 2002-03-31 00:00:00 (Sun)
  63171360000, #      utc_end 2002-10-27 00:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171360000, #    utc_start 2002-10-27 00:00:00 (Sun)
  63184665600, #      utc_end 2003-03-30 00:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184665600, #    utc_start 2003-03-30 00:00:00 (Sun)
  63202809600, #      utc_end 2003-10-26 00:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202809600, #    utc_start 2003-10-26 00:00:00 (Sun)
  63216115200, #      utc_end 2004-03-28 00:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216115200, #    utc_start 2004-03-28 00:00:00 (Sun)
  63234864000, #      utc_end 2004-10-31 00:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234864000, #    utc_start 2004-10-31 00:00:00 (Sun)
  63247564800, #      utc_end 2005-03-27 00:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247564800, #    utc_start 2005-03-27 00:00:00 (Sun)
  63266313600, #      utc_end 2005-10-30 00:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266313600, #    utc_start 2005-10-30 00:00:00 (Sun)
  63279014400, #      utc_end 2006-03-26 00:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279014400, #    utc_start 2006-03-26 00:00:00 (Sun)
  63297763200, #      utc_end 2006-10-29 00:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297763200, #    utc_start 2006-10-29 00:00:00 (Sun)
  63310464000, #      utc_end 2007-03-25 00:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310464000, #    utc_start 2007-03-25 00:00:00 (Sun)
  63329212800, #      utc_end 2007-10-28 00:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329212800, #    utc_start 2007-10-28 00:00:00 (Sun)
  63342518400, #      utc_end 2008-03-30 00:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342518400, #    utc_start 2008-03-30 00:00:00 (Sun)
  63360662400, #      utc_end 2008-10-26 00:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360662400, #    utc_start 2008-10-26 00:00:00 (Sun)
  63373968000, #      utc_end 2009-03-29 00:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373968000, #    utc_start 2009-03-29 00:00:00 (Sun)
  63392112000, #      utc_end 2009-10-25 00:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392112000, #    utc_start 2009-10-25 00:00:00 (Sun)
  63405417600, #      utc_end 2010-03-28 00:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405417600, #    utc_start 2010-03-28 00:00:00 (Sun)
  63424166400, #      utc_end 2010-10-31 00:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424166400, #    utc_start 2010-10-31 00:00:00 (Sun)
  63436867200, #      utc_end 2011-03-27 00:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436867200, #    utc_start 2011-03-27 00:00:00 (Sun)
  63455616000, #      utc_end 2011-10-30 00:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63455616000, #    utc_start 2011-10-30 00:00:00 (Sun)
  63468316800, #      utc_end 2012-03-25 00:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63468316800, #    utc_start 2012-03-25 00:00:00 (Sun)
  63487065600, #      utc_end 2012-10-28 00:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63487065600, #    utc_start 2012-10-28 00:00:00 (Sun)
  63500371200, #      utc_end 2013-03-31 00:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63500371200, #    utc_start 2013-03-31 00:00:00 (Sun)
  63518515200, #      utc_end 2013-10-27 00:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63518515200, #    utc_start 2013-10-27 00:00:00 (Sun)
  63531820800, #      utc_end 2014-03-30 00:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63531820800, #    utc_start 2014-03-30 00:00:00 (Sun)
  63549964800, #      utc_end 2014-10-26 00:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63549964800, #    utc_start 2014-10-26 00:00:00 (Sun)
  63563270400, #      utc_end 2015-03-29 00:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63563270400, #    utc_start 2015-03-29 00:00:00 (Sun)
  63581414400, #      utc_end 2015-10-25 00:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63581414400, #    utc_start 2015-10-25 00:00:00 (Sun)
  63594720000, #      utc_end 2016-03-27 00:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63594720000, #    utc_start 2016-03-27 00:00:00 (Sun)
  63613468800, #      utc_end 2016-10-30 00:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63613468800, #    utc_start 2016-10-30 00:00:00 (Sun)
  63626169600, #      utc_end 2017-03-26 00:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63626169600, #    utc_start 2017-03-26 00:00:00 (Sun)
  63644918400, #      utc_end 2017-10-29 00:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63644918400, #    utc_start 2017-10-29 00:00:00 (Sun)
  63657619200, #      utc_end 2018-03-25 00:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63657619200, #    utc_start 2018-03-25 00:00:00 (Sun)
  63676368000, #      utc_end 2018-10-28 00:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63676368000, #    utc_start 2018-10-28 00:00:00 (Sun)
  63689673600, #      utc_end 2019-03-31 00:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63689673600, #    utc_start 2019-03-31 00:00:00 (Sun)
  63707817600, #      utc_end 2019-10-27 00:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63707817600, #    utc_start 2019-10-27 00:00:00 (Sun)
  63721123200, #      utc_end 2020-03-29 00:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63721123200, #    utc_start 2020-03-29 00:00:00 (Sun)
  63739267200, #      utc_end 2020-10-25 00:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63739267200, #    utc_start 2020-10-25 00:00:00 (Sun)
  63752572800, #      utc_end 2021-03-28 00:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63752572800, #    utc_start 2021-03-28 00:00:00 (Sun)
  63771321600, #      utc_end 2021-10-31 00:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63771321600, #    utc_start 2021-10-31 00:00:00 (Sun)
  63784022400, #      utc_end 2022-03-27 00:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63784022400, #    utc_start 2022-03-27 00:00:00 (Sun)
  63802771200, #      utc_end 2022-10-30 00:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63802771200, #    utc_start 2022-10-30 00:00:00 (Sun)
  63815472000, #      utc_end 2023-03-26 00:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63815472000, #    utc_start 2023-03-26 00:00:00 (Sun)
  63834220800, #      utc_end 2023-10-29 00:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63834220800, #    utc_start 2023-10-29 00:00:00 (Sun)
  63847526400, #      utc_end 2024-03-31 00:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63847526400, #    utc_start 2024-03-31 00:00:00 (Sun)
  63865670400, #      utc_end 2024-10-27 00:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63865670400, #    utc_start 2024-10-27 00:00:00 (Sun)
  63878976000, #      utc_end 2025-03-30 00:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63878976000, #    utc_start 2025-03-30 00:00:00 (Sun)
  63897120000, #      utc_end 2025-10-26 00:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63897120000, #    utc_start 2025-10-26 00:00:00 (Sun)
  63910425600, #      utc_end 2026-03-29 00:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63910425600, #    utc_start 2026-03-29 00:00:00 (Sun)
  63928569600, #      utc_end 2026-10-25 00:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63928569600, #    utc_start 2026-10-25 00:00:00 (Sun)
  63941875200, #      utc_end 2027-03-28 00:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63941875200, #    utc_start 2027-03-28 00:00:00 (Sun)
  63960624000, #      utc_end 2027-10-31 00:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {60}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 729025,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 729025,
      'utc_rd_secs' => 0,
      'utc_year' => 1998
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 729024,
      'local_rd_secs' => 79200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 729024,
      'utc_rd_secs' => 79200,
      'utc_year' => 1997
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '1997',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'Moldova',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '3:00',
      'from' => '1997',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'Moldova',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_CHISINAU

    $main::fatpacked{"DateTime/TimeZone/Europe/Copenhagen.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_COPENHAGEN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Copenhagen;
  $DateTime::TimeZone::Europe::Copenhagen::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Copenhagen::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611158580, #      utc_end 1889-12-31 23:09:40 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  3020,
  0,
  'LMT',
      ],
      [
  59611158580, #    utc_start 1889-12-31 23:09:40 (Tue)
  59737388980, #      utc_end 1893-12-31 23:09:40 (Sun)
  59611161600, #  local_start 1890-01-01 00:00:00 (Wed)
  59737392000, #    local_end 1894-01-01 00:00:00 (Mon)
  3020,
  0,
  'CMT',
      ],
      [
  59737388980, #    utc_start 1893-12-31 23:09:40 (Sun)
  60443186400, #      utc_end 1916-05-14 22:00:00 (Sun)
  59737392580, #  local_start 1894-01-01 00:09:40 (Mon)
  60443190000, #    local_end 1916-05-14 23:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60443186400, #    utc_start 1916-05-14 22:00:00 (Sun)
  60455192400, #      utc_end 1916-09-30 21:00:00 (Sat)
  60443193600, #  local_start 1916-05-15 00:00:00 (Mon)
  60455199600, #    local_end 1916-09-30 23:00:00 (Sat)
  7200,
  1,
  'CEST',
      ],
      [
  60455192400, #    utc_start 1916-09-30 21:00:00 (Sat)
  61200572400, #      utc_end 1940-05-14 23:00:00 (Tue)
  60455196000, #  local_start 1916-09-30 22:00:00 (Sat)
  61200576000, #    local_end 1940-05-15 00:00:00 (Wed)
  3600,
  0,
  'CET',
      ],
      [
  61200572400, #    utc_start 1940-05-14 23:00:00 (Tue)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61200579600, #  local_start 1940-05-15 01:00:00 (Wed)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61338906000, #      utc_end 1944-10-02 01:00:00 (Mon)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61338913200, #    local_end 1944-10-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61338906000, #    utc_start 1944-10-02 01:00:00 (Mon)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61338909600, #  local_start 1944-10-02 02:00:00 (Mon)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61366294800, #      utc_end 1945-08-15 01:00:00 (Wed)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61366302000, #    local_end 1945-08-15 03:00:00 (Wed)
  7200,
  1,
  'CEST',
      ],
      [
  61366294800, #    utc_start 1945-08-15 01:00:00 (Wed)
  61388672400, #      utc_end 1946-05-01 01:00:00 (Wed)
  61366298400, #  local_start 1945-08-15 02:00:00 (Wed)
  61388676000, #    local_end 1946-05-01 02:00:00 (Wed)
  3600,
  0,
  'CET',
      ],
      [
  61388672400, #    utc_start 1946-05-01 01:00:00 (Wed)
  61399299600, #      utc_end 1946-09-01 01:00:00 (Sun)
  61388679600, #  local_start 1946-05-01 03:00:00 (Wed)
  61399306800, #    local_end 1946-09-01 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61399299600, #    utc_start 1946-09-01 01:00:00 (Sun)
  61420467600, #      utc_end 1947-05-04 01:00:00 (Sun)
  61399303200, #  local_start 1946-09-01 02:00:00 (Sun)
  61420471200, #    local_end 1947-05-04 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61420467600, #    utc_start 1947-05-04 01:00:00 (Sun)
  61428934800, #      utc_end 1947-08-10 01:00:00 (Sun)
  61420474800, #  local_start 1947-05-04 03:00:00 (Sun)
  61428942000, #    local_end 1947-08-10 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61428934800, #    utc_start 1947-08-10 01:00:00 (Sun)
  61452522000, #      utc_end 1948-05-09 01:00:00 (Sun)
  61428938400, #  local_start 1947-08-10 02:00:00 (Sun)
  61452525600, #    local_end 1948-05-09 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61452522000, #    utc_start 1948-05-09 01:00:00 (Sun)
  61460384400, #      utc_end 1948-08-08 01:00:00 (Sun)
  61452529200, #  local_start 1948-05-09 03:00:00 (Sun)
  61460391600, #    local_end 1948-08-08 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61460384400, #    utc_start 1948-08-08 01:00:00 (Sun)
  62451212400, #      utc_end 1979-12-31 23:00:00 (Mon)
  61460388000, #  local_start 1948-08-08 02:00:00 (Sun)
  62451216000, #    local_end 1980-01-01 00:00:00 (Tue)
  3600,
  0,
  'CET',
      ],
      [
  62451212400, #    utc_start 1979-12-31 23:00:00 (Mon)
  62459514000, #      utc_end 1980-04-06 01:00:00 (Sun)
  62451216000, #  local_start 1980-01-01 00:00:00 (Tue)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62459514000, #    utc_start 1980-04-06 01:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474641200, #    local_end 1980-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474637600, #  local_start 1980-09-28 02:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {56}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722815,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722815,
      'utc_rd_secs' => 0,
      'utc_year' => 1981
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722814,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722814,
      'utc_rd_secs' => 82800,
      'utc_year' => 1980
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_COPENHAGEN

    $main::fatpacked{"DateTime/TimeZone/Europe/Dublin.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_DUBLIN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Dublin;
  $DateTime::TimeZone::Europe::Dublin::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Dublin::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59314033500, #      utc_end 1880-08-02 00:25:00 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59314032000, #    local_end 1880-08-02 00:00:00 (Mon)
  -1500,
  0,
  'LMT',
      ],
      [
  59314033500, #    utc_start 1880-08-02 00:25:00 (Mon)
  60443720721, #      utc_end 1916-05-21 02:25:21 (Sun)
  59314031979, #  local_start 1880-08-01 23:59:39 (Sun)
  60443719200, #    local_end 1916-05-21 02:00:00 (Sun)
  -1521,
  0,
  'DMT',
      ],
      [
  60443720721, #    utc_start 1916-05-21 02:25:21 (Sun)
  60455211921, #      utc_end 1916-10-01 02:25:21 (Sun)
  60443722800, #  local_start 1916-05-21 03:00:00 (Sun)
  60455214000, #    local_end 1916-10-01 03:00:00 (Sun)
  2079,
  1,
  'IST',
      ],
      [
  60455211921, #    utc_start 1916-10-01 02:25:21 (Sun)
  60471540000, #      utc_end 1917-04-08 02:00:00 (Sun)
  60455211921, #  local_start 1916-10-01 02:25:21 (Sun)
  60471540000, #    local_end 1917-04-08 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60471540000, #    utc_start 1917-04-08 02:00:00 (Sun)
  60485536800, #      utc_end 1917-09-17 02:00:00 (Mon)
  60471543600, #  local_start 1917-04-08 03:00:00 (Sun)
  60485540400, #    local_end 1917-09-17 03:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  60485536800, #    utc_start 1917-09-17 02:00:00 (Mon)
  60501780000, #      utc_end 1918-03-24 02:00:00 (Sun)
  60485536800, #  local_start 1917-09-17 02:00:00 (Mon)
  60501780000, #    local_end 1918-03-24 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60501780000, #    utc_start 1918-03-24 02:00:00 (Sun)
  60518196000, #      utc_end 1918-09-30 02:00:00 (Mon)
  60501783600, #  local_start 1918-03-24 03:00:00 (Sun)
  60518199600, #    local_end 1918-09-30 03:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  60518196000, #    utc_start 1918-09-30 02:00:00 (Mon)
  60533834400, #      utc_end 1919-03-30 02:00:00 (Sun)
  60518196000, #  local_start 1918-09-30 02:00:00 (Mon)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60533834400, #    utc_start 1919-03-30 02:00:00 (Sun)
  60549645600, #      utc_end 1919-09-29 02:00:00 (Mon)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60549649200, #    local_end 1919-09-29 03:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  60549645600, #    utc_start 1919-09-29 02:00:00 (Mon)
  60565284000, #      utc_end 1920-03-28 02:00:00 (Sun)
  60549645600, #  local_start 1919-09-29 02:00:00 (Mon)
  60565284000, #    local_end 1920-03-28 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60565284000, #    utc_start 1920-03-28 02:00:00 (Sun)
  60583514400, #      utc_end 1920-10-25 02:00:00 (Mon)
  60565287600, #  local_start 1920-03-28 03:00:00 (Sun)
  60583518000, #    local_end 1920-10-25 03:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  60583514400, #    utc_start 1920-10-25 02:00:00 (Mon)
  60597338400, #      utc_end 1921-04-03 02:00:00 (Sun)
  60583514400, #  local_start 1920-10-25 02:00:00 (Mon)
  60597338400, #    local_end 1921-04-03 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60597338400, #    utc_start 1921-04-03 02:00:00 (Sun)
  60613149600, #      utc_end 1921-10-03 02:00:00 (Mon)
  60597342000, #  local_start 1921-04-03 03:00:00 (Sun)
  60613153200, #    local_end 1921-10-03 03:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  60613149600, #    utc_start 1921-10-03 02:00:00 (Mon)
  60618672000, #      utc_end 1921-12-06 00:00:00 (Tue)
  60613149600, #  local_start 1921-10-03 02:00:00 (Mon)
  60618672000, #    local_end 1921-12-06 00:00:00 (Tue)
  0,
  0,
  'GMT',
      ],
      [
  60618672000, #    utc_start 1921-12-06 00:00:00 (Tue)
  60628183200, #      utc_end 1922-03-26 02:00:00 (Sun)
  60618672000, #  local_start 1921-12-06 00:00:00 (Tue)
  60628183200, #    local_end 1922-03-26 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60628183200, #    utc_start 1922-03-26 02:00:00 (Sun)
  60645117600, #      utc_end 1922-10-08 02:00:00 (Sun)
  60628186800, #  local_start 1922-03-26 03:00:00 (Sun)
  60645121200, #    local_end 1922-10-08 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  60645117600, #    utc_start 1922-10-08 02:00:00 (Sun)
  60662052000, #      utc_end 1923-04-22 02:00:00 (Sun)
  60645117600, #  local_start 1922-10-08 02:00:00 (Sun)
  60662052000, #    local_end 1923-04-22 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60662052000, #    utc_start 1923-04-22 02:00:00 (Sun)
  60674752800, #      utc_end 1923-09-16 02:00:00 (Sun)
  60662055600, #  local_start 1923-04-22 03:00:00 (Sun)
  60674756400, #    local_end 1923-09-16 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  60674752800, #    utc_start 1923-09-16 02:00:00 (Sun)
  60692896800, #      utc_end 1924-04-13 02:00:00 (Sun)
  60674752800, #  local_start 1923-09-16 02:00:00 (Sun)
  60692896800, #    local_end 1924-04-13 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60692896800, #    utc_start 1924-04-13 02:00:00 (Sun)
  60706807200, #      utc_end 1924-09-21 02:00:00 (Sun)
  60692900400, #  local_start 1924-04-13 03:00:00 (Sun)
  60706810800, #    local_end 1924-09-21 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  60706807200, #    utc_start 1924-09-21 02:00:00 (Sun)
  60724951200, #      utc_end 1925-04-19 02:00:00 (Sun)
  60706807200, #  local_start 1924-09-21 02:00:00 (Sun)
  60724951200, #    local_end 1925-04-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60724951200, #    utc_start 1925-04-19 02:00:00 (Sun)
  60739466400, #      utc_end 1925-10-04 02:00:00 (Sun)
  60724954800, #  local_start 1925-04-19 03:00:00 (Sun)
  60739470000, #    local_end 1925-10-04 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  60739466400, #    utc_start 1925-10-04 02:00:00 (Sun)
  60756400800, #      utc_end 1926-04-18 02:00:00 (Sun)
  60739466400, #  local_start 1925-10-04 02:00:00 (Sun)
  60756400800, #    local_end 1926-04-18 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60756400800, #    utc_start 1926-04-18 02:00:00 (Sun)
  60770916000, #      utc_end 1926-10-03 02:00:00 (Sun)
  60756404400, #  local_start 1926-04-18 03:00:00 (Sun)
  60770919600, #    local_end 1926-10-03 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  60770916000, #    utc_start 1926-10-03 02:00:00 (Sun)
  60787245600, #      utc_end 1927-04-10 02:00:00 (Sun)
  60770916000, #  local_start 1926-10-03 02:00:00 (Sun)
  60787245600, #    local_end 1927-04-10 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60787245600, #    utc_start 1927-04-10 02:00:00 (Sun)
  60802365600, #      utc_end 1927-10-02 02:00:00 (Sun)
  60787249200, #  local_start 1927-04-10 03:00:00 (Sun)
  60802369200, #    local_end 1927-10-02 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  60802365600, #    utc_start 1927-10-02 02:00:00 (Sun)
  60819904800, #      utc_end 1928-04-22 02:00:00 (Sun)
  60802365600, #  local_start 1927-10-02 02:00:00 (Sun)
  60819904800, #    local_end 1928-04-22 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60819904800, #    utc_start 1928-04-22 02:00:00 (Sun)
  60834420000, #      utc_end 1928-10-07 02:00:00 (Sun)
  60819908400, #  local_start 1928-04-22 03:00:00 (Sun)
  60834423600, #    local_end 1928-10-07 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  60834420000, #    utc_start 1928-10-07 02:00:00 (Sun)
  60851354400, #      utc_end 1929-04-21 02:00:00 (Sun)
  60834420000, #  local_start 1928-10-07 02:00:00 (Sun)
  60851354400, #    local_end 1929-04-21 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60851354400, #    utc_start 1929-04-21 02:00:00 (Sun)
  60865869600, #      utc_end 1929-10-06 02:00:00 (Sun)
  60851358000, #  local_start 1929-04-21 03:00:00 (Sun)
  60865873200, #    local_end 1929-10-06 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  60865869600, #    utc_start 1929-10-06 02:00:00 (Sun)
  60882199200, #      utc_end 1930-04-13 02:00:00 (Sun)
  60865869600, #  local_start 1929-10-06 02:00:00 (Sun)
  60882199200, #    local_end 1930-04-13 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60882199200, #    utc_start 1930-04-13 02:00:00 (Sun)
  60897319200, #      utc_end 1930-10-05 02:00:00 (Sun)
  60882202800, #  local_start 1930-04-13 03:00:00 (Sun)
  60897322800, #    local_end 1930-10-05 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  60897319200, #    utc_start 1930-10-05 02:00:00 (Sun)
  60914253600, #      utc_end 1931-04-19 02:00:00 (Sun)
  60897319200, #  local_start 1930-10-05 02:00:00 (Sun)
  60914253600, #    local_end 1931-04-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60914253600, #    utc_start 1931-04-19 02:00:00 (Sun)
  60928768800, #      utc_end 1931-10-04 02:00:00 (Sun)
  60914257200, #  local_start 1931-04-19 03:00:00 (Sun)
  60928772400, #    local_end 1931-10-04 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  60928768800, #    utc_start 1931-10-04 02:00:00 (Sun)
  60945703200, #      utc_end 1932-04-17 02:00:00 (Sun)
  60928768800, #  local_start 1931-10-04 02:00:00 (Sun)
  60945703200, #    local_end 1932-04-17 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60945703200, #    utc_start 1932-04-17 02:00:00 (Sun)
  60960218400, #      utc_end 1932-10-02 02:00:00 (Sun)
  60945706800, #  local_start 1932-04-17 03:00:00 (Sun)
  60960222000, #    local_end 1932-10-02 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  60960218400, #    utc_start 1932-10-02 02:00:00 (Sun)
  60976548000, #      utc_end 1933-04-09 02:00:00 (Sun)
  60960218400, #  local_start 1932-10-02 02:00:00 (Sun)
  60976548000, #    local_end 1933-04-09 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60976548000, #    utc_start 1933-04-09 02:00:00 (Sun)
  60992272800, #      utc_end 1933-10-08 02:00:00 (Sun)
  60976551600, #  local_start 1933-04-09 03:00:00 (Sun)
  60992276400, #    local_end 1933-10-08 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  60992272800, #    utc_start 1933-10-08 02:00:00 (Sun)
  61009207200, #      utc_end 1934-04-22 02:00:00 (Sun)
  60992272800, #  local_start 1933-10-08 02:00:00 (Sun)
  61009207200, #    local_end 1934-04-22 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61009207200, #    utc_start 1934-04-22 02:00:00 (Sun)
  61023722400, #      utc_end 1934-10-07 02:00:00 (Sun)
  61009210800, #  local_start 1934-04-22 03:00:00 (Sun)
  61023726000, #    local_end 1934-10-07 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61023722400, #    utc_start 1934-10-07 02:00:00 (Sun)
  61040052000, #      utc_end 1935-04-14 02:00:00 (Sun)
  61023722400, #  local_start 1934-10-07 02:00:00 (Sun)
  61040052000, #    local_end 1935-04-14 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61040052000, #    utc_start 1935-04-14 02:00:00 (Sun)
  61055172000, #      utc_end 1935-10-06 02:00:00 (Sun)
  61040055600, #  local_start 1935-04-14 03:00:00 (Sun)
  61055175600, #    local_end 1935-10-06 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61055172000, #    utc_start 1935-10-06 02:00:00 (Sun)
  61072106400, #      utc_end 1936-04-19 02:00:00 (Sun)
  61055172000, #  local_start 1935-10-06 02:00:00 (Sun)
  61072106400, #    local_end 1936-04-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61072106400, #    utc_start 1936-04-19 02:00:00 (Sun)
  61086621600, #      utc_end 1936-10-04 02:00:00 (Sun)
  61072110000, #  local_start 1936-04-19 03:00:00 (Sun)
  61086625200, #    local_end 1936-10-04 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61086621600, #    utc_start 1936-10-04 02:00:00 (Sun)
  61103556000, #      utc_end 1937-04-18 02:00:00 (Sun)
  61086621600, #  local_start 1936-10-04 02:00:00 (Sun)
  61103556000, #    local_end 1937-04-18 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61103556000, #    utc_start 1937-04-18 02:00:00 (Sun)
  61118071200, #      utc_end 1937-10-03 02:00:00 (Sun)
  61103559600, #  local_start 1937-04-18 03:00:00 (Sun)
  61118074800, #    local_end 1937-10-03 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61118071200, #    utc_start 1937-10-03 02:00:00 (Sun)
  61134400800, #      utc_end 1938-04-10 02:00:00 (Sun)
  61118071200, #  local_start 1937-10-03 02:00:00 (Sun)
  61134400800, #    local_end 1938-04-10 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61134400800, #    utc_start 1938-04-10 02:00:00 (Sun)
  61149520800, #      utc_end 1938-10-02 02:00:00 (Sun)
  61134404400, #  local_start 1938-04-10 03:00:00 (Sun)
  61149524400, #    local_end 1938-10-02 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61149520800, #    utc_start 1938-10-02 02:00:00 (Sun)
  61166455200, #      utc_end 1939-04-16 02:00:00 (Sun)
  61149520800, #  local_start 1938-10-02 02:00:00 (Sun)
  61166455200, #    local_end 1939-04-16 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61166455200, #    utc_start 1939-04-16 02:00:00 (Sun)
  61185204000, #      utc_end 1939-11-19 02:00:00 (Sun)
  61166458800, #  local_start 1939-04-16 03:00:00 (Sun)
  61185207600, #    local_end 1939-11-19 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61185204000, #    utc_start 1939-11-19 02:00:00 (Sun)
  61193671200, #      utc_end 1940-02-25 02:00:00 (Sun)
  61185204000, #  local_start 1939-11-19 02:00:00 (Sun)
  61193671200, #    local_end 1940-02-25 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61193671200, #    utc_start 1940-02-25 02:00:00 (Sun)
  61402323600, #      utc_end 1946-10-06 01:00:00 (Sun)
  61193674800, #  local_start 1940-02-25 03:00:00 (Sun)
  61402327200, #    local_end 1946-10-06 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61402323600, #    utc_start 1946-10-06 01:00:00 (Sun)
  61416237600, #      utc_end 1947-03-16 02:00:00 (Sun)
  61402323600, #  local_start 1946-10-06 01:00:00 (Sun)
  61416237600, #    local_end 1947-03-16 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61416237600, #    utc_start 1947-03-16 02:00:00 (Sun)
  61436192400, #      utc_end 1947-11-02 01:00:00 (Sun)
  61416241200, #  local_start 1947-03-16 03:00:00 (Sun)
  61436196000, #    local_end 1947-11-02 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61436192400, #    utc_start 1947-11-02 01:00:00 (Sun)
  61450711200, #      utc_end 1948-04-18 02:00:00 (Sun)
  61436192400, #  local_start 1947-11-02 01:00:00 (Sun)
  61450711200, #    local_end 1948-04-18 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61450711200, #    utc_start 1948-04-18 02:00:00 (Sun)
  61467645600, #      utc_end 1948-10-31 02:00:00 (Sun)
  61450714800, #  local_start 1948-04-18 03:00:00 (Sun)
  61467649200, #    local_end 1948-10-31 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61467645600, #    utc_start 1948-10-31 02:00:00 (Sun)
  61480951200, #      utc_end 1949-04-03 02:00:00 (Sun)
  61467645600, #  local_start 1948-10-31 02:00:00 (Sun)
  61480951200, #    local_end 1949-04-03 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61480951200, #    utc_start 1949-04-03 02:00:00 (Sun)
  61499095200, #      utc_end 1949-10-30 02:00:00 (Sun)
  61480954800, #  local_start 1949-04-03 03:00:00 (Sun)
  61499098800, #    local_end 1949-10-30 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61499095200, #    utc_start 1949-10-30 02:00:00 (Sun)
  61513610400, #      utc_end 1950-04-16 02:00:00 (Sun)
  61499095200, #  local_start 1949-10-30 02:00:00 (Sun)
  61513610400, #    local_end 1950-04-16 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61513610400, #    utc_start 1950-04-16 02:00:00 (Sun)
  61529940000, #      utc_end 1950-10-22 02:00:00 (Sun)
  61513614000, #  local_start 1950-04-16 03:00:00 (Sun)
  61529943600, #    local_end 1950-10-22 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61529940000, #    utc_start 1950-10-22 02:00:00 (Sun)
  61545060000, #      utc_end 1951-04-15 02:00:00 (Sun)
  61529940000, #  local_start 1950-10-22 02:00:00 (Sun)
  61545060000, #    local_end 1951-04-15 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61545060000, #    utc_start 1951-04-15 02:00:00 (Sun)
  61561389600, #      utc_end 1951-10-21 02:00:00 (Sun)
  61545063600, #  local_start 1951-04-15 03:00:00 (Sun)
  61561393200, #    local_end 1951-10-21 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61561389600, #    utc_start 1951-10-21 02:00:00 (Sun)
  61577114400, #      utc_end 1952-04-20 02:00:00 (Sun)
  61561389600, #  local_start 1951-10-21 02:00:00 (Sun)
  61577114400, #    local_end 1952-04-20 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61577114400, #    utc_start 1952-04-20 02:00:00 (Sun)
  61593444000, #      utc_end 1952-10-26 02:00:00 (Sun)
  61577118000, #  local_start 1952-04-20 03:00:00 (Sun)
  61593447600, #    local_end 1952-10-26 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61593444000, #    utc_start 1952-10-26 02:00:00 (Sun)
  61608564000, #      utc_end 1953-04-19 02:00:00 (Sun)
  61593444000, #  local_start 1952-10-26 02:00:00 (Sun)
  61608564000, #    local_end 1953-04-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61608564000, #    utc_start 1953-04-19 02:00:00 (Sun)
  61623079200, #      utc_end 1953-10-04 02:00:00 (Sun)
  61608567600, #  local_start 1953-04-19 03:00:00 (Sun)
  61623082800, #    local_end 1953-10-04 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61623079200, #    utc_start 1953-10-04 02:00:00 (Sun)
  61639408800, #      utc_end 1954-04-11 02:00:00 (Sun)
  61623079200, #  local_start 1953-10-04 02:00:00 (Sun)
  61639408800, #    local_end 1954-04-11 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61639408800, #    utc_start 1954-04-11 02:00:00 (Sun)
  61654528800, #      utc_end 1954-10-03 02:00:00 (Sun)
  61639412400, #  local_start 1954-04-11 03:00:00 (Sun)
  61654532400, #    local_end 1954-10-03 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61654528800, #    utc_start 1954-10-03 02:00:00 (Sun)
  61671463200, #      utc_end 1955-04-17 02:00:00 (Sun)
  61654528800, #  local_start 1954-10-03 02:00:00 (Sun)
  61671463200, #    local_end 1955-04-17 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61671463200, #    utc_start 1955-04-17 02:00:00 (Sun)
  61685978400, #      utc_end 1955-10-02 02:00:00 (Sun)
  61671466800, #  local_start 1955-04-17 03:00:00 (Sun)
  61685982000, #    local_end 1955-10-02 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61685978400, #    utc_start 1955-10-02 02:00:00 (Sun)
  61703517600, #      utc_end 1956-04-22 02:00:00 (Sun)
  61685978400, #  local_start 1955-10-02 02:00:00 (Sun)
  61703517600, #    local_end 1956-04-22 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61703517600, #    utc_start 1956-04-22 02:00:00 (Sun)
  61718032800, #      utc_end 1956-10-07 02:00:00 (Sun)
  61703521200, #  local_start 1956-04-22 03:00:00 (Sun)
  61718036400, #    local_end 1956-10-07 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61718032800, #    utc_start 1956-10-07 02:00:00 (Sun)
  61734362400, #      utc_end 1957-04-14 02:00:00 (Sun)
  61718032800, #  local_start 1956-10-07 02:00:00 (Sun)
  61734362400, #    local_end 1957-04-14 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61734362400, #    utc_start 1957-04-14 02:00:00 (Sun)
  61749482400, #      utc_end 1957-10-06 02:00:00 (Sun)
  61734366000, #  local_start 1957-04-14 03:00:00 (Sun)
  61749486000, #    local_end 1957-10-06 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61749482400, #    utc_start 1957-10-06 02:00:00 (Sun)
  61766416800, #      utc_end 1958-04-20 02:00:00 (Sun)
  61749482400, #  local_start 1957-10-06 02:00:00 (Sun)
  61766416800, #    local_end 1958-04-20 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61766416800, #    utc_start 1958-04-20 02:00:00 (Sun)
  61780932000, #      utc_end 1958-10-05 02:00:00 (Sun)
  61766420400, #  local_start 1958-04-20 03:00:00 (Sun)
  61780935600, #    local_end 1958-10-05 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61780932000, #    utc_start 1958-10-05 02:00:00 (Sun)
  61797866400, #      utc_end 1959-04-19 02:00:00 (Sun)
  61780932000, #  local_start 1958-10-05 02:00:00 (Sun)
  61797866400, #    local_end 1959-04-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61797866400, #    utc_start 1959-04-19 02:00:00 (Sun)
  61812381600, #      utc_end 1959-10-04 02:00:00 (Sun)
  61797870000, #  local_start 1959-04-19 03:00:00 (Sun)
  61812385200, #    local_end 1959-10-04 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61812381600, #    utc_start 1959-10-04 02:00:00 (Sun)
  61828711200, #      utc_end 1960-04-10 02:00:00 (Sun)
  61812381600, #  local_start 1959-10-04 02:00:00 (Sun)
  61828711200, #    local_end 1960-04-10 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61828711200, #    utc_start 1960-04-10 02:00:00 (Sun)
  61843831200, #      utc_end 1960-10-02 02:00:00 (Sun)
  61828714800, #  local_start 1960-04-10 03:00:00 (Sun)
  61843834800, #    local_end 1960-10-02 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61843831200, #    utc_start 1960-10-02 02:00:00 (Sun)
  61858951200, #      utc_end 1961-03-26 02:00:00 (Sun)
  61843831200, #  local_start 1960-10-02 02:00:00 (Sun)
  61858951200, #    local_end 1961-03-26 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61858951200, #    utc_start 1961-03-26 02:00:00 (Sun)
  61877700000, #      utc_end 1961-10-29 02:00:00 (Sun)
  61858954800, #  local_start 1961-03-26 03:00:00 (Sun)
  61877703600, #    local_end 1961-10-29 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61877700000, #    utc_start 1961-10-29 02:00:00 (Sun)
  61890400800, #      utc_end 1962-03-25 02:00:00 (Sun)
  61877700000, #  local_start 1961-10-29 02:00:00 (Sun)
  61890400800, #    local_end 1962-03-25 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61890400800, #    utc_start 1962-03-25 02:00:00 (Sun)
  61909149600, #      utc_end 1962-10-28 02:00:00 (Sun)
  61890404400, #  local_start 1962-03-25 03:00:00 (Sun)
  61909153200, #    local_end 1962-10-28 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61909149600, #    utc_start 1962-10-28 02:00:00 (Sun)
  61922455200, #      utc_end 1963-03-31 02:00:00 (Sun)
  61909149600, #  local_start 1962-10-28 02:00:00 (Sun)
  61922455200, #    local_end 1963-03-31 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61922455200, #    utc_start 1963-03-31 02:00:00 (Sun)
  61940599200, #      utc_end 1963-10-27 02:00:00 (Sun)
  61922458800, #  local_start 1963-03-31 03:00:00 (Sun)
  61940602800, #    local_end 1963-10-27 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61940599200, #    utc_start 1963-10-27 02:00:00 (Sun)
  61953300000, #      utc_end 1964-03-22 02:00:00 (Sun)
  61940599200, #  local_start 1963-10-27 02:00:00 (Sun)
  61953300000, #    local_end 1964-03-22 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61953300000, #    utc_start 1964-03-22 02:00:00 (Sun)
  61972048800, #      utc_end 1964-10-25 02:00:00 (Sun)
  61953303600, #  local_start 1964-03-22 03:00:00 (Sun)
  61972052400, #    local_end 1964-10-25 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  61972048800, #    utc_start 1964-10-25 02:00:00 (Sun)
  61984749600, #      utc_end 1965-03-21 02:00:00 (Sun)
  61972048800, #  local_start 1964-10-25 02:00:00 (Sun)
  61984749600, #    local_end 1965-03-21 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61984749600, #    utc_start 1965-03-21 02:00:00 (Sun)
  62003498400, #      utc_end 1965-10-24 02:00:00 (Sun)
  61984753200, #  local_start 1965-03-21 03:00:00 (Sun)
  62003502000, #    local_end 1965-10-24 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62003498400, #    utc_start 1965-10-24 02:00:00 (Sun)
  62016199200, #      utc_end 1966-03-20 02:00:00 (Sun)
  62003498400, #  local_start 1965-10-24 02:00:00 (Sun)
  62016199200, #    local_end 1966-03-20 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62016199200, #    utc_start 1966-03-20 02:00:00 (Sun)
  62034948000, #      utc_end 1966-10-23 02:00:00 (Sun)
  62016202800, #  local_start 1966-03-20 03:00:00 (Sun)
  62034951600, #    local_end 1966-10-23 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62034948000, #    utc_start 1966-10-23 02:00:00 (Sun)
  62047648800, #      utc_end 1967-03-19 02:00:00 (Sun)
  62034948000, #  local_start 1966-10-23 02:00:00 (Sun)
  62047648800, #    local_end 1967-03-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62047648800, #    utc_start 1967-03-19 02:00:00 (Sun)
  62067002400, #      utc_end 1967-10-29 02:00:00 (Sun)
  62047652400, #  local_start 1967-03-19 03:00:00 (Sun)
  62067006000, #    local_end 1967-10-29 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62067002400, #    utc_start 1967-10-29 02:00:00 (Sun)
  62076679200, #      utc_end 1968-02-18 02:00:00 (Sun)
  62067002400, #  local_start 1967-10-29 02:00:00 (Sun)
  62076679200, #    local_end 1968-02-18 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62076679200, #    utc_start 1968-02-18 02:00:00 (Sun)
  62098441200, #      utc_end 1968-10-26 23:00:00 (Sat)
  62076682800, #  local_start 1968-02-18 03:00:00 (Sun)
  62098444800, #    local_end 1968-10-27 00:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62098441200, #    utc_start 1968-10-26 23:00:00 (Sat)
  62193405600, #      utc_end 1971-10-31 02:00:00 (Sun)
  62098444800, #  local_start 1968-10-27 00:00:00 (Sun)
  62193409200, #    local_end 1971-10-31 03:00:00 (Sun)
  3600,
  0,
  'IST',
      ],
      [
  62193405600, #    utc_start 1971-10-31 02:00:00 (Sun)
  62205501600, #      utc_end 1972-03-19 02:00:00 (Sun)
  62193405600, #  local_start 1971-10-31 02:00:00 (Sun)
  62205501600, #    local_end 1972-03-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62205501600, #    utc_start 1972-03-19 02:00:00 (Sun)
  62224855200, #      utc_end 1972-10-29 02:00:00 (Sun)
  62205505200, #  local_start 1972-03-19 03:00:00 (Sun)
  62224858800, #    local_end 1972-10-29 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62224855200, #    utc_start 1972-10-29 02:00:00 (Sun)
  62236951200, #      utc_end 1973-03-18 02:00:00 (Sun)
  62224855200, #  local_start 1972-10-29 02:00:00 (Sun)
  62236951200, #    local_end 1973-03-18 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62236951200, #    utc_start 1973-03-18 02:00:00 (Sun)
  62256304800, #      utc_end 1973-10-28 02:00:00 (Sun)
  62236954800, #  local_start 1973-03-18 03:00:00 (Sun)
  62256308400, #    local_end 1973-10-28 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62256304800, #    utc_start 1973-10-28 02:00:00 (Sun)
  62268400800, #      utc_end 1974-03-17 02:00:00 (Sun)
  62256304800, #  local_start 1973-10-28 02:00:00 (Sun)
  62268400800, #    local_end 1974-03-17 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62268400800, #    utc_start 1974-03-17 02:00:00 (Sun)
  62287754400, #      utc_end 1974-10-27 02:00:00 (Sun)
  62268404400, #  local_start 1974-03-17 03:00:00 (Sun)
  62287758000, #    local_end 1974-10-27 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62287754400, #    utc_start 1974-10-27 02:00:00 (Sun)
  62299850400, #      utc_end 1975-03-16 02:00:00 (Sun)
  62287754400, #  local_start 1974-10-27 02:00:00 (Sun)
  62299850400, #    local_end 1975-03-16 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62299850400, #    utc_start 1975-03-16 02:00:00 (Sun)
  62319204000, #      utc_end 1975-10-26 02:00:00 (Sun)
  62299854000, #  local_start 1975-03-16 03:00:00 (Sun)
  62319207600, #    local_end 1975-10-26 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62319204000, #    utc_start 1975-10-26 02:00:00 (Sun)
  62331904800, #      utc_end 1976-03-21 02:00:00 (Sun)
  62319204000, #  local_start 1975-10-26 02:00:00 (Sun)
  62331904800, #    local_end 1976-03-21 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62331904800, #    utc_start 1976-03-21 02:00:00 (Sun)
  62350653600, #      utc_end 1976-10-24 02:00:00 (Sun)
  62331908400, #  local_start 1976-03-21 03:00:00 (Sun)
  62350657200, #    local_end 1976-10-24 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62350653600, #    utc_start 1976-10-24 02:00:00 (Sun)
  62363354400, #      utc_end 1977-03-20 02:00:00 (Sun)
  62350653600, #  local_start 1976-10-24 02:00:00 (Sun)
  62363354400, #    local_end 1977-03-20 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62363354400, #    utc_start 1977-03-20 02:00:00 (Sun)
  62382103200, #      utc_end 1977-10-23 02:00:00 (Sun)
  62363358000, #  local_start 1977-03-20 03:00:00 (Sun)
  62382106800, #    local_end 1977-10-23 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62382103200, #    utc_start 1977-10-23 02:00:00 (Sun)
  62394804000, #      utc_end 1978-03-19 02:00:00 (Sun)
  62382103200, #  local_start 1977-10-23 02:00:00 (Sun)
  62394804000, #    local_end 1978-03-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62394804000, #    utc_start 1978-03-19 02:00:00 (Sun)
  62414157600, #      utc_end 1978-10-29 02:00:00 (Sun)
  62394807600, #  local_start 1978-03-19 03:00:00 (Sun)
  62414161200, #    local_end 1978-10-29 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62414157600, #    utc_start 1978-10-29 02:00:00 (Sun)
  62426253600, #      utc_end 1979-03-18 02:00:00 (Sun)
  62414157600, #  local_start 1978-10-29 02:00:00 (Sun)
  62426253600, #    local_end 1979-03-18 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62426253600, #    utc_start 1979-03-18 02:00:00 (Sun)
  62445607200, #      utc_end 1979-10-28 02:00:00 (Sun)
  62426257200, #  local_start 1979-03-18 03:00:00 (Sun)
  62445610800, #    local_end 1979-10-28 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62445607200, #    utc_start 1979-10-28 02:00:00 (Sun)
  62457703200, #      utc_end 1980-03-16 02:00:00 (Sun)
  62445607200, #  local_start 1979-10-28 02:00:00 (Sun)
  62457703200, #    local_end 1980-03-16 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62457703200, #    utc_start 1980-03-16 02:00:00 (Sun)
  62477056800, #      utc_end 1980-10-26 02:00:00 (Sun)
  62457706800, #  local_start 1980-03-16 03:00:00 (Sun)
  62477060400, #    local_end 1980-10-26 03:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62477056800, #    utc_start 1980-10-26 02:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62477056800, #  local_start 1980-10-26 02:00:00 (Sun)
  62490358800, #    local_end 1981-03-29 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62508502800, #      utc_end 1981-10-25 01:00:00 (Sun)
  62490362400, #  local_start 1981-03-29 02:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62508502800, #    utc_start 1981-10-25 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62521808400, #    local_end 1982-03-28 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62539952400, #      utc_end 1982-10-24 01:00:00 (Sun)
  62521812000, #  local_start 1982-03-28 02:00:00 (Sun)
  62539956000, #    local_end 1982-10-24 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62539952400, #    utc_start 1982-10-24 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62539952400, #  local_start 1982-10-24 01:00:00 (Sun)
  62553258000, #    local_end 1983-03-27 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62571402000, #      utc_end 1983-10-23 01:00:00 (Sun)
  62553261600, #  local_start 1983-03-27 02:00:00 (Sun)
  62571405600, #    local_end 1983-10-23 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62571402000, #    utc_start 1983-10-23 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62571402000, #  local_start 1983-10-23 01:00:00 (Sun)
  62584707600, #    local_end 1984-03-25 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62603456400, #      utc_end 1984-10-28 01:00:00 (Sun)
  62584711200, #  local_start 1984-03-25 02:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62603456400, #    utc_start 1984-10-28 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62616762000, #    local_end 1985-03-31 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62634906000, #      utc_end 1985-10-27 01:00:00 (Sun)
  62616765600, #  local_start 1985-03-31 02:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62634906000, #    utc_start 1985-10-27 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62648211600, #    local_end 1986-03-30 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62666355600, #      utc_end 1986-10-26 01:00:00 (Sun)
  62648215200, #  local_start 1986-03-30 02:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62666355600, #    utc_start 1986-10-26 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62679661200, #    local_end 1987-03-29 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62697805200, #      utc_end 1987-10-25 01:00:00 (Sun)
  62679664800, #  local_start 1987-03-29 02:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62697805200, #    utc_start 1987-10-25 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711110800, #    local_end 1988-03-27 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62729254800, #      utc_end 1988-10-23 01:00:00 (Sun)
  62711114400, #  local_start 1988-03-27 02:00:00 (Sun)
  62729258400, #    local_end 1988-10-23 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62729254800, #    utc_start 1988-10-23 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62729254800, #  local_start 1988-10-23 01:00:00 (Sun)
  62742560400, #    local_end 1989-03-26 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62761309200, #      utc_end 1989-10-29 01:00:00 (Sun)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62761309200, #    utc_start 1989-10-29 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774010000, #    local_end 1990-03-25 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62792758800, #      utc_end 1990-10-28 01:00:00 (Sun)
  62774013600, #  local_start 1990-03-25 02:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62792758800, #    utc_start 1990-10-28 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806064400, #    local_end 1991-03-31 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62824208400, #      utc_end 1991-10-27 01:00:00 (Sun)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62824208400, #    utc_start 1991-10-27 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62837514000, #    local_end 1992-03-29 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62855658000, #      utc_end 1992-10-25 01:00:00 (Sun)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62855658000, #    utc_start 1992-10-25 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62868963600, #    local_end 1993-03-28 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62887107600, #      utc_end 1993-10-24 01:00:00 (Sun)
  62868967200, #  local_start 1993-03-28 02:00:00 (Sun)
  62887111200, #    local_end 1993-10-24 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62887107600, #    utc_start 1993-10-24 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62887107600, #  local_start 1993-10-24 01:00:00 (Sun)
  62900413200, #    local_end 1994-03-27 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62918557200, #      utc_end 1994-10-23 01:00:00 (Sun)
  62900416800, #  local_start 1994-03-27 02:00:00 (Sun)
  62918560800, #    local_end 1994-10-23 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62918557200, #    utc_start 1994-10-23 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62918557200, #  local_start 1994-10-23 01:00:00 (Sun)
  62931862800, #    local_end 1995-03-26 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62950006800, #      utc_end 1995-10-22 01:00:00 (Sun)
  62931866400, #  local_start 1995-03-26 02:00:00 (Sun)
  62950010400, #    local_end 1995-10-22 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62950006800, #    utc_start 1995-10-22 01:00:00 (Sun)
  62956137600, #      utc_end 1996-01-01 00:00:00 (Mon)
  62950006800, #  local_start 1995-10-22 01:00:00 (Sun)
  62956137600, #    local_end 1996-01-01 00:00:00 (Mon)
  0,
  0,
  'GMT',
      ],
      [
  62956137600, #    utc_start 1996-01-01 00:00:00 (Mon)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62956137600, #  local_start 1996-01-01 00:00:00 (Mon)
  62963917200, #    local_end 1996-03-31 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963920800, #  local_start 1996-03-31 02:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995366800, #    local_end 1997-03-30 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995370400, #  local_start 1997-03-30 02:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63026816400, #    local_end 1998-03-29 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026820000, #  local_start 1998-03-29 02:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058266000, #    local_end 1999-03-28 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058269600, #  local_start 1999-03-28 02:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63089715600, #    local_end 2000-03-26 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089719200, #  local_start 2000-03-26 02:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121165200, #    local_end 2001-03-25 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121168800, #  local_start 2001-03-25 02:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153219600, #    local_end 2002-03-31 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153223200, #  local_start 2002-03-31 02:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63184669200, #    local_end 2003-03-30 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184672800, #  local_start 2003-03-30 02:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216118800, #    local_end 2004-03-28 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216122400, #  local_start 2004-03-28 02:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63247568400, #    local_end 2005-03-27 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247572000, #  local_start 2005-03-27 02:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279018000, #    local_end 2006-03-26 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279021600, #  local_start 2006-03-26 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63310467600, #    local_end 2007-03-25 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310471200, #  local_start 2007-03-25 02:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63342522000, #    local_end 2008-03-30 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342525600, #  local_start 2008-03-30 02:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63373971600, #    local_end 2009-03-29 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373975200, #  local_start 2009-03-29 02:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63405421200, #    local_end 2010-03-28 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405424800, #  local_start 2010-03-28 02:00:00 (Sun)
  63424173600, #    local_end 2010-10-31 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424170000, #  local_start 2010-10-31 01:00:00 (Sun)
  63436870800, #    local_end 2011-03-27 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436874400, #  local_start 2011-03-27 02:00:00 (Sun)
  63455623200, #    local_end 2011-10-30 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455619600, #  local_start 2011-10-30 01:00:00 (Sun)
  63468320400, #    local_end 2012-03-25 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468324000, #  local_start 2012-03-25 02:00:00 (Sun)
  63487072800, #    local_end 2012-10-28 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487069200, #  local_start 2012-10-28 01:00:00 (Sun)
  63500374800, #    local_end 2013-03-31 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500378400, #  local_start 2013-03-31 02:00:00 (Sun)
  63518522400, #    local_end 2013-10-27 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518518800, #  local_start 2013-10-27 01:00:00 (Sun)
  63531824400, #    local_end 2014-03-30 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531828000, #  local_start 2014-03-30 02:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63563274000, #    local_end 2015-03-29 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563277600, #  local_start 2015-03-29 02:00:00 (Sun)
  63581421600, #    local_end 2015-10-25 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581418000, #  local_start 2015-10-25 01:00:00 (Sun)
  63594723600, #    local_end 2016-03-27 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594727200, #  local_start 2016-03-27 02:00:00 (Sun)
  63613476000, #    local_end 2016-10-30 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613472400, #  local_start 2016-10-30 01:00:00 (Sun)
  63626173200, #    local_end 2017-03-26 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626176800, #  local_start 2017-03-26 02:00:00 (Sun)
  63644925600, #    local_end 2017-10-29 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644922000, #  local_start 2017-10-29 01:00:00 (Sun)
  63657622800, #    local_end 2018-03-25 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657626400, #  local_start 2018-03-25 02:00:00 (Sun)
  63676375200, #    local_end 2018-10-28 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676371600, #  local_start 2018-10-28 01:00:00 (Sun)
  63689677200, #    local_end 2019-03-31 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689680800, #  local_start 2019-03-31 02:00:00 (Sun)
  63707824800, #    local_end 2019-10-27 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707821200, #  local_start 2019-10-27 01:00:00 (Sun)
  63721126800, #    local_end 2020-03-29 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721130400, #  local_start 2020-03-29 02:00:00 (Sun)
  63739274400, #    local_end 2020-10-25 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739270800, #  local_start 2020-10-25 01:00:00 (Sun)
  63752576400, #    local_end 2021-03-28 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752580000, #  local_start 2021-03-28 02:00:00 (Sun)
  63771328800, #    local_end 2021-10-31 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771325200, #  local_start 2021-10-31 01:00:00 (Sun)
  63784026000, #    local_end 2022-03-27 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784029600, #  local_start 2022-03-27 02:00:00 (Sun)
  63802778400, #    local_end 2022-10-30 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802774800, #  local_start 2022-10-30 01:00:00 (Sun)
  63815475600, #    local_end 2023-03-26 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815479200, #  local_start 2023-03-26 02:00:00 (Sun)
  63834228000, #    local_end 2023-10-29 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834224400, #  local_start 2023-10-29 01:00:00 (Sun)
  63847530000, #    local_end 2024-03-31 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847533600, #  local_start 2024-03-31 02:00:00 (Sun)
  63865677600, #    local_end 2024-10-27 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865674000, #  local_start 2024-10-27 01:00:00 (Sun)
  63878979600, #    local_end 2025-03-30 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878983200, #  local_start 2025-03-30 02:00:00 (Sun)
  63897127200, #    local_end 2025-10-26 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897123600, #  local_start 2025-10-26 01:00:00 (Sun)
  63910429200, #    local_end 2026-03-29 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910432800, #  local_start 2026-03-29 02:00:00 (Sun)
  63928576800, #    local_end 2026-10-25 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928573200, #  local_start 2026-10-25 01:00:00 (Sun)
  63941878800, #    local_end 2027-03-28 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941882400, #  local_start 2027-03-28 02:00:00 (Sun)
  63960631200, #    local_end 2027-10-31 02:00:00 (Sun)
  3600,
  1,
  'IST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {103}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 0 }
  
  my $last_observance = bless( {
    'format' => 'GMT/IST',
    'gmtoff' => '0:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 728659,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 728659,
      'utc_rd_secs' => 0,
      'utc_year' => 1997
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 0,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 728659,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 728659,
      'utc_rd_secs' => 0,
      'utc_year' => 1997
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_DUBLIN

    $main::fatpacked{"DateTime/TimeZone/Europe/Gibraltar.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_GIBRALTAR';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Gibraltar;
  $DateTime::TimeZone::Europe::Gibraltar::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Gibraltar::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59314033284, #      utc_end 1880-08-02 00:21:24 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59314032000, #    local_end 1880-08-02 00:00:00 (Mon)
  -1284,
  0,
  'LMT',
      ],
      [
  59314033284, #    utc_start 1880-08-02 00:21:24 (Mon)
  60443719200, #      utc_end 1916-05-21 02:00:00 (Sun)
  59314033284, #  local_start 1880-08-02 00:21:24 (Mon)
  60443719200, #    local_end 1916-05-21 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60443719200, #    utc_start 1916-05-21 02:00:00 (Sun)
  60455210400, #      utc_end 1916-10-01 02:00:00 (Sun)
  60443722800, #  local_start 1916-05-21 03:00:00 (Sun)
  60455214000, #    local_end 1916-10-01 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60455210400, #    utc_start 1916-10-01 02:00:00 (Sun)
  60471540000, #      utc_end 1917-04-08 02:00:00 (Sun)
  60455210400, #  local_start 1916-10-01 02:00:00 (Sun)
  60471540000, #    local_end 1917-04-08 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60471540000, #    utc_start 1917-04-08 02:00:00 (Sun)
  60485536800, #      utc_end 1917-09-17 02:00:00 (Mon)
  60471543600, #  local_start 1917-04-08 03:00:00 (Sun)
  60485540400, #    local_end 1917-09-17 03:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  60485536800, #    utc_start 1917-09-17 02:00:00 (Mon)
  60501780000, #      utc_end 1918-03-24 02:00:00 (Sun)
  60485536800, #  local_start 1917-09-17 02:00:00 (Mon)
  60501780000, #    local_end 1918-03-24 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60501780000, #    utc_start 1918-03-24 02:00:00 (Sun)
  60518196000, #      utc_end 1918-09-30 02:00:00 (Mon)
  60501783600, #  local_start 1918-03-24 03:00:00 (Sun)
  60518199600, #    local_end 1918-09-30 03:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  60518196000, #    utc_start 1918-09-30 02:00:00 (Mon)
  60533834400, #      utc_end 1919-03-30 02:00:00 (Sun)
  60518196000, #  local_start 1918-09-30 02:00:00 (Mon)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60533834400, #    utc_start 1919-03-30 02:00:00 (Sun)
  60549645600, #      utc_end 1919-09-29 02:00:00 (Mon)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60549649200, #    local_end 1919-09-29 03:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  60549645600, #    utc_start 1919-09-29 02:00:00 (Mon)
  60565284000, #      utc_end 1920-03-28 02:00:00 (Sun)
  60549645600, #  local_start 1919-09-29 02:00:00 (Mon)
  60565284000, #    local_end 1920-03-28 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60565284000, #    utc_start 1920-03-28 02:00:00 (Sun)
  60583514400, #      utc_end 1920-10-25 02:00:00 (Mon)
  60565287600, #  local_start 1920-03-28 03:00:00 (Sun)
  60583518000, #    local_end 1920-10-25 03:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  60583514400, #    utc_start 1920-10-25 02:00:00 (Mon)
  60597338400, #      utc_end 1921-04-03 02:00:00 (Sun)
  60583514400, #  local_start 1920-10-25 02:00:00 (Mon)
  60597338400, #    local_end 1921-04-03 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60597338400, #    utc_start 1921-04-03 02:00:00 (Sun)
  60613149600, #      utc_end 1921-10-03 02:00:00 (Mon)
  60597342000, #  local_start 1921-04-03 03:00:00 (Sun)
  60613153200, #    local_end 1921-10-03 03:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  60613149600, #    utc_start 1921-10-03 02:00:00 (Mon)
  60628183200, #      utc_end 1922-03-26 02:00:00 (Sun)
  60613149600, #  local_start 1921-10-03 02:00:00 (Mon)
  60628183200, #    local_end 1922-03-26 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60628183200, #    utc_start 1922-03-26 02:00:00 (Sun)
  60645117600, #      utc_end 1922-10-08 02:00:00 (Sun)
  60628186800, #  local_start 1922-03-26 03:00:00 (Sun)
  60645121200, #    local_end 1922-10-08 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60645117600, #    utc_start 1922-10-08 02:00:00 (Sun)
  60662052000, #      utc_end 1923-04-22 02:00:00 (Sun)
  60645117600, #  local_start 1922-10-08 02:00:00 (Sun)
  60662052000, #    local_end 1923-04-22 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60662052000, #    utc_start 1923-04-22 02:00:00 (Sun)
  60674752800, #      utc_end 1923-09-16 02:00:00 (Sun)
  60662055600, #  local_start 1923-04-22 03:00:00 (Sun)
  60674756400, #    local_end 1923-09-16 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60674752800, #    utc_start 1923-09-16 02:00:00 (Sun)
  60692896800, #      utc_end 1924-04-13 02:00:00 (Sun)
  60674752800, #  local_start 1923-09-16 02:00:00 (Sun)
  60692896800, #    local_end 1924-04-13 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60692896800, #    utc_start 1924-04-13 02:00:00 (Sun)
  60706807200, #      utc_end 1924-09-21 02:00:00 (Sun)
  60692900400, #  local_start 1924-04-13 03:00:00 (Sun)
  60706810800, #    local_end 1924-09-21 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60706807200, #    utc_start 1924-09-21 02:00:00 (Sun)
  60724951200, #      utc_end 1925-04-19 02:00:00 (Sun)
  60706807200, #  local_start 1924-09-21 02:00:00 (Sun)
  60724951200, #    local_end 1925-04-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60724951200, #    utc_start 1925-04-19 02:00:00 (Sun)
  60739466400, #      utc_end 1925-10-04 02:00:00 (Sun)
  60724954800, #  local_start 1925-04-19 03:00:00 (Sun)
  60739470000, #    local_end 1925-10-04 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60739466400, #    utc_start 1925-10-04 02:00:00 (Sun)
  60756400800, #      utc_end 1926-04-18 02:00:00 (Sun)
  60739466400, #  local_start 1925-10-04 02:00:00 (Sun)
  60756400800, #    local_end 1926-04-18 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60756400800, #    utc_start 1926-04-18 02:00:00 (Sun)
  60770916000, #      utc_end 1926-10-03 02:00:00 (Sun)
  60756404400, #  local_start 1926-04-18 03:00:00 (Sun)
  60770919600, #    local_end 1926-10-03 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60770916000, #    utc_start 1926-10-03 02:00:00 (Sun)
  60787245600, #      utc_end 1927-04-10 02:00:00 (Sun)
  60770916000, #  local_start 1926-10-03 02:00:00 (Sun)
  60787245600, #    local_end 1927-04-10 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60787245600, #    utc_start 1927-04-10 02:00:00 (Sun)
  60802365600, #      utc_end 1927-10-02 02:00:00 (Sun)
  60787249200, #  local_start 1927-04-10 03:00:00 (Sun)
  60802369200, #    local_end 1927-10-02 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60802365600, #    utc_start 1927-10-02 02:00:00 (Sun)
  60819904800, #      utc_end 1928-04-22 02:00:00 (Sun)
  60802365600, #  local_start 1927-10-02 02:00:00 (Sun)
  60819904800, #    local_end 1928-04-22 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60819904800, #    utc_start 1928-04-22 02:00:00 (Sun)
  60834420000, #      utc_end 1928-10-07 02:00:00 (Sun)
  60819908400, #  local_start 1928-04-22 03:00:00 (Sun)
  60834423600, #    local_end 1928-10-07 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60834420000, #    utc_start 1928-10-07 02:00:00 (Sun)
  60851354400, #      utc_end 1929-04-21 02:00:00 (Sun)
  60834420000, #  local_start 1928-10-07 02:00:00 (Sun)
  60851354400, #    local_end 1929-04-21 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60851354400, #    utc_start 1929-04-21 02:00:00 (Sun)
  60865869600, #      utc_end 1929-10-06 02:00:00 (Sun)
  60851358000, #  local_start 1929-04-21 03:00:00 (Sun)
  60865873200, #    local_end 1929-10-06 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60865869600, #    utc_start 1929-10-06 02:00:00 (Sun)
  60882199200, #      utc_end 1930-04-13 02:00:00 (Sun)
  60865869600, #  local_start 1929-10-06 02:00:00 (Sun)
  60882199200, #    local_end 1930-04-13 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60882199200, #    utc_start 1930-04-13 02:00:00 (Sun)
  60897319200, #      utc_end 1930-10-05 02:00:00 (Sun)
  60882202800, #  local_start 1930-04-13 03:00:00 (Sun)
  60897322800, #    local_end 1930-10-05 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60897319200, #    utc_start 1930-10-05 02:00:00 (Sun)
  60914253600, #      utc_end 1931-04-19 02:00:00 (Sun)
  60897319200, #  local_start 1930-10-05 02:00:00 (Sun)
  60914253600, #    local_end 1931-04-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60914253600, #    utc_start 1931-04-19 02:00:00 (Sun)
  60928768800, #      utc_end 1931-10-04 02:00:00 (Sun)
  60914257200, #  local_start 1931-04-19 03:00:00 (Sun)
  60928772400, #    local_end 1931-10-04 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60928768800, #    utc_start 1931-10-04 02:00:00 (Sun)
  60945703200, #      utc_end 1932-04-17 02:00:00 (Sun)
  60928768800, #  local_start 1931-10-04 02:00:00 (Sun)
  60945703200, #    local_end 1932-04-17 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60945703200, #    utc_start 1932-04-17 02:00:00 (Sun)
  60960218400, #      utc_end 1932-10-02 02:00:00 (Sun)
  60945706800, #  local_start 1932-04-17 03:00:00 (Sun)
  60960222000, #    local_end 1932-10-02 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60960218400, #    utc_start 1932-10-02 02:00:00 (Sun)
  60976548000, #      utc_end 1933-04-09 02:00:00 (Sun)
  60960218400, #  local_start 1932-10-02 02:00:00 (Sun)
  60976548000, #    local_end 1933-04-09 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60976548000, #    utc_start 1933-04-09 02:00:00 (Sun)
  60992272800, #      utc_end 1933-10-08 02:00:00 (Sun)
  60976551600, #  local_start 1933-04-09 03:00:00 (Sun)
  60992276400, #    local_end 1933-10-08 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60992272800, #    utc_start 1933-10-08 02:00:00 (Sun)
  61009207200, #      utc_end 1934-04-22 02:00:00 (Sun)
  60992272800, #  local_start 1933-10-08 02:00:00 (Sun)
  61009207200, #    local_end 1934-04-22 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61009207200, #    utc_start 1934-04-22 02:00:00 (Sun)
  61023722400, #      utc_end 1934-10-07 02:00:00 (Sun)
  61009210800, #  local_start 1934-04-22 03:00:00 (Sun)
  61023726000, #    local_end 1934-10-07 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61023722400, #    utc_start 1934-10-07 02:00:00 (Sun)
  61040052000, #      utc_end 1935-04-14 02:00:00 (Sun)
  61023722400, #  local_start 1934-10-07 02:00:00 (Sun)
  61040052000, #    local_end 1935-04-14 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61040052000, #    utc_start 1935-04-14 02:00:00 (Sun)
  61055172000, #      utc_end 1935-10-06 02:00:00 (Sun)
  61040055600, #  local_start 1935-04-14 03:00:00 (Sun)
  61055175600, #    local_end 1935-10-06 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61055172000, #    utc_start 1935-10-06 02:00:00 (Sun)
  61072106400, #      utc_end 1936-04-19 02:00:00 (Sun)
  61055172000, #  local_start 1935-10-06 02:00:00 (Sun)
  61072106400, #    local_end 1936-04-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61072106400, #    utc_start 1936-04-19 02:00:00 (Sun)
  61086621600, #      utc_end 1936-10-04 02:00:00 (Sun)
  61072110000, #  local_start 1936-04-19 03:00:00 (Sun)
  61086625200, #    local_end 1936-10-04 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61086621600, #    utc_start 1936-10-04 02:00:00 (Sun)
  61103556000, #      utc_end 1937-04-18 02:00:00 (Sun)
  61086621600, #  local_start 1936-10-04 02:00:00 (Sun)
  61103556000, #    local_end 1937-04-18 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61103556000, #    utc_start 1937-04-18 02:00:00 (Sun)
  61118071200, #      utc_end 1937-10-03 02:00:00 (Sun)
  61103559600, #  local_start 1937-04-18 03:00:00 (Sun)
  61118074800, #    local_end 1937-10-03 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61118071200, #    utc_start 1937-10-03 02:00:00 (Sun)
  61134400800, #      utc_end 1938-04-10 02:00:00 (Sun)
  61118071200, #  local_start 1937-10-03 02:00:00 (Sun)
  61134400800, #    local_end 1938-04-10 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61134400800, #    utc_start 1938-04-10 02:00:00 (Sun)
  61149520800, #      utc_end 1938-10-02 02:00:00 (Sun)
  61134404400, #  local_start 1938-04-10 03:00:00 (Sun)
  61149524400, #    local_end 1938-10-02 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61149520800, #    utc_start 1938-10-02 02:00:00 (Sun)
  61166455200, #      utc_end 1939-04-16 02:00:00 (Sun)
  61149520800, #  local_start 1938-10-02 02:00:00 (Sun)
  61166455200, #    local_end 1939-04-16 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61166455200, #    utc_start 1939-04-16 02:00:00 (Sun)
  61185204000, #      utc_end 1939-11-19 02:00:00 (Sun)
  61166458800, #  local_start 1939-04-16 03:00:00 (Sun)
  61185207600, #    local_end 1939-11-19 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61185204000, #    utc_start 1939-11-19 02:00:00 (Sun)
  61193671200, #      utc_end 1940-02-25 02:00:00 (Sun)
  61185204000, #  local_start 1939-11-19 02:00:00 (Sun)
  61193671200, #    local_end 1940-02-25 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61193671200, #    utc_start 1940-02-25 02:00:00 (Sun)
  61231165200, #      utc_end 1941-05-04 01:00:00 (Sun)
  61193674800, #  local_start 1940-02-25 03:00:00 (Sun)
  61231168800, #    local_end 1941-05-04 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61231165200, #    utc_start 1941-05-04 01:00:00 (Sun)
  61239632400, #      utc_end 1941-08-10 01:00:00 (Sun)
  61231172400, #  local_start 1941-05-04 03:00:00 (Sun)
  61239639600, #    local_end 1941-08-10 03:00:00 (Sun)
  7200,
  1,
  'BDST',
      ],
      [
  61239632400, #    utc_start 1941-08-10 01:00:00 (Sun)
  61260195600, #      utc_end 1942-04-05 01:00:00 (Sun)
  61239636000, #  local_start 1941-08-10 02:00:00 (Sun)
  61260199200, #    local_end 1942-04-05 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61260195600, #    utc_start 1942-04-05 01:00:00 (Sun)
  61271082000, #      utc_end 1942-08-09 01:00:00 (Sun)
  61260202800, #  local_start 1942-04-05 03:00:00 (Sun)
  61271089200, #    local_end 1942-08-09 03:00:00 (Sun)
  7200,
  1,
  'BDST',
      ],
      [
  61271082000, #    utc_start 1942-08-09 01:00:00 (Sun)
  61291645200, #      utc_end 1943-04-04 01:00:00 (Sun)
  61271085600, #  local_start 1942-08-09 02:00:00 (Sun)
  61291648800, #    local_end 1943-04-04 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61291645200, #    utc_start 1943-04-04 01:00:00 (Sun)
  61303136400, #      utc_end 1943-08-15 01:00:00 (Sun)
  61291652400, #  local_start 1943-04-04 03:00:00 (Sun)
  61303143600, #    local_end 1943-08-15 03:00:00 (Sun)
  7200,
  1,
  'BDST',
      ],
      [
  61303136400, #    utc_start 1943-08-15 01:00:00 (Sun)
  61323094800, #      utc_end 1944-04-02 01:00:00 (Sun)
  61303140000, #  local_start 1943-08-15 02:00:00 (Sun)
  61323098400, #    local_end 1944-04-02 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61323094800, #    utc_start 1944-04-02 01:00:00 (Sun)
  61337610000, #      utc_end 1944-09-17 01:00:00 (Sun)
  61323102000, #  local_start 1944-04-02 03:00:00 (Sun)
  61337617200, #    local_end 1944-09-17 03:00:00 (Sun)
  7200,
  1,
  'BDST',
      ],
      [
  61337610000, #    utc_start 1944-09-17 01:00:00 (Sun)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61337613600, #  local_start 1944-09-17 02:00:00 (Sun)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61363616400, #      utc_end 1945-07-15 01:00:00 (Sun)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61363623600, #    local_end 1945-07-15 03:00:00 (Sun)
  7200,
  1,
  'BDST',
      ],
      [
  61363616400, #    utc_start 1945-07-15 01:00:00 (Sun)
  61370877600, #      utc_end 1945-10-07 02:00:00 (Sun)
  61363620000, #  local_start 1945-07-15 02:00:00 (Sun)
  61370881200, #    local_end 1945-10-07 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61370877600, #    utc_start 1945-10-07 02:00:00 (Sun)
  61387207200, #      utc_end 1946-04-14 02:00:00 (Sun)
  61370877600, #  local_start 1945-10-07 02:00:00 (Sun)
  61387207200, #    local_end 1946-04-14 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61387207200, #    utc_start 1946-04-14 02:00:00 (Sun)
  61402327200, #      utc_end 1946-10-06 02:00:00 (Sun)
  61387210800, #  local_start 1946-04-14 03:00:00 (Sun)
  61402330800, #    local_end 1946-10-06 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61402327200, #    utc_start 1946-10-06 02:00:00 (Sun)
  61416237600, #      utc_end 1947-03-16 02:00:00 (Sun)
  61402327200, #  local_start 1946-10-06 02:00:00 (Sun)
  61416237600, #    local_end 1947-03-16 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61416237600, #    utc_start 1947-03-16 02:00:00 (Sun)
  61418653200, #      utc_end 1947-04-13 01:00:00 (Sun)
  61416241200, #  local_start 1947-03-16 03:00:00 (Sun)
  61418656800, #    local_end 1947-04-13 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61418653200, #    utc_start 1947-04-13 01:00:00 (Sun)
  61428934800, #      utc_end 1947-08-10 01:00:00 (Sun)
  61418660400, #  local_start 1947-04-13 03:00:00 (Sun)
  61428942000, #    local_end 1947-08-10 03:00:00 (Sun)
  7200,
  1,
  'BDST',
      ],
      [
  61428934800, #    utc_start 1947-08-10 01:00:00 (Sun)
  61436196000, #      utc_end 1947-11-02 02:00:00 (Sun)
  61428938400, #  local_start 1947-08-10 02:00:00 (Sun)
  61436199600, #    local_end 1947-11-02 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61436196000, #    utc_start 1947-11-02 02:00:00 (Sun)
  61447687200, #      utc_end 1948-03-14 02:00:00 (Sun)
  61436196000, #  local_start 1947-11-02 02:00:00 (Sun)
  61447687200, #    local_end 1948-03-14 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61447687200, #    utc_start 1948-03-14 02:00:00 (Sun)
  61467645600, #      utc_end 1948-10-31 02:00:00 (Sun)
  61447690800, #  local_start 1948-03-14 03:00:00 (Sun)
  61467649200, #    local_end 1948-10-31 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61467645600, #    utc_start 1948-10-31 02:00:00 (Sun)
  61480951200, #      utc_end 1949-04-03 02:00:00 (Sun)
  61467645600, #  local_start 1948-10-31 02:00:00 (Sun)
  61480951200, #    local_end 1949-04-03 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61480951200, #    utc_start 1949-04-03 02:00:00 (Sun)
  61499095200, #      utc_end 1949-10-30 02:00:00 (Sun)
  61480954800, #  local_start 1949-04-03 03:00:00 (Sun)
  61499098800, #    local_end 1949-10-30 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61499095200, #    utc_start 1949-10-30 02:00:00 (Sun)
  61513610400, #      utc_end 1950-04-16 02:00:00 (Sun)
  61499095200, #  local_start 1949-10-30 02:00:00 (Sun)
  61513610400, #    local_end 1950-04-16 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61513610400, #    utc_start 1950-04-16 02:00:00 (Sun)
  61529940000, #      utc_end 1950-10-22 02:00:00 (Sun)
  61513614000, #  local_start 1950-04-16 03:00:00 (Sun)
  61529943600, #    local_end 1950-10-22 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61529940000, #    utc_start 1950-10-22 02:00:00 (Sun)
  61545060000, #      utc_end 1951-04-15 02:00:00 (Sun)
  61529940000, #  local_start 1950-10-22 02:00:00 (Sun)
  61545060000, #    local_end 1951-04-15 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61545060000, #    utc_start 1951-04-15 02:00:00 (Sun)
  61561389600, #      utc_end 1951-10-21 02:00:00 (Sun)
  61545063600, #  local_start 1951-04-15 03:00:00 (Sun)
  61561393200, #    local_end 1951-10-21 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61561389600, #    utc_start 1951-10-21 02:00:00 (Sun)
  61577114400, #      utc_end 1952-04-20 02:00:00 (Sun)
  61561389600, #  local_start 1951-10-21 02:00:00 (Sun)
  61577114400, #    local_end 1952-04-20 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61577114400, #    utc_start 1952-04-20 02:00:00 (Sun)
  61593444000, #      utc_end 1952-10-26 02:00:00 (Sun)
  61577118000, #  local_start 1952-04-20 03:00:00 (Sun)
  61593447600, #    local_end 1952-10-26 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61593444000, #    utc_start 1952-10-26 02:00:00 (Sun)
  61608564000, #      utc_end 1953-04-19 02:00:00 (Sun)
  61593444000, #  local_start 1952-10-26 02:00:00 (Sun)
  61608564000, #    local_end 1953-04-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61608564000, #    utc_start 1953-04-19 02:00:00 (Sun)
  61623079200, #      utc_end 1953-10-04 02:00:00 (Sun)
  61608567600, #  local_start 1953-04-19 03:00:00 (Sun)
  61623082800, #    local_end 1953-10-04 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61623079200, #    utc_start 1953-10-04 02:00:00 (Sun)
  61639408800, #      utc_end 1954-04-11 02:00:00 (Sun)
  61623079200, #  local_start 1953-10-04 02:00:00 (Sun)
  61639408800, #    local_end 1954-04-11 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61639408800, #    utc_start 1954-04-11 02:00:00 (Sun)
  61654528800, #      utc_end 1954-10-03 02:00:00 (Sun)
  61639412400, #  local_start 1954-04-11 03:00:00 (Sun)
  61654532400, #    local_end 1954-10-03 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61654528800, #    utc_start 1954-10-03 02:00:00 (Sun)
  61671463200, #      utc_end 1955-04-17 02:00:00 (Sun)
  61654528800, #  local_start 1954-10-03 02:00:00 (Sun)
  61671463200, #    local_end 1955-04-17 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61671463200, #    utc_start 1955-04-17 02:00:00 (Sun)
  61685978400, #      utc_end 1955-10-02 02:00:00 (Sun)
  61671466800, #  local_start 1955-04-17 03:00:00 (Sun)
  61685982000, #    local_end 1955-10-02 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61685978400, #    utc_start 1955-10-02 02:00:00 (Sun)
  61703517600, #      utc_end 1956-04-22 02:00:00 (Sun)
  61685978400, #  local_start 1955-10-02 02:00:00 (Sun)
  61703517600, #    local_end 1956-04-22 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61703517600, #    utc_start 1956-04-22 02:00:00 (Sun)
  61718032800, #      utc_end 1956-10-07 02:00:00 (Sun)
  61703521200, #  local_start 1956-04-22 03:00:00 (Sun)
  61718036400, #    local_end 1956-10-07 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61718032800, #    utc_start 1956-10-07 02:00:00 (Sun)
  61734362400, #      utc_end 1957-04-14 02:00:00 (Sun)
  61718032800, #  local_start 1956-10-07 02:00:00 (Sun)
  61734362400, #    local_end 1957-04-14 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61734362400, #    utc_start 1957-04-14 02:00:00 (Sun)
  62514370800, #      utc_end 1981-12-31 23:00:00 (Thu)
  61734366000, #  local_start 1957-04-14 03:00:00 (Sun)
  62514374400, #    local_end 1982-01-01 00:00:00 (Fri)
  3600,
  0,
  'CET',
      ],
      [
  62514370800, #    utc_start 1981-12-31 23:00:00 (Thu)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62514374400, #  local_start 1982-01-01 00:00:00 (Fri)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {94}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723546,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723546,
      'utc_rd_secs' => 0,
      'utc_year' => 1983
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723545,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723545,
      'utc_rd_secs' => 82800,
      'utc_year' => 1982
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_GIBRALTAR

    $main::fatpacked{"DateTime/TimeZone/Europe/Helsinki.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_HELSINKI';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Helsinki;
  $DateTime::TimeZone::Europe::Helsinki::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Helsinki::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59245424411, #      utc_end 1878-05-30 22:20:11 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59245430400, #    local_end 1878-05-31 00:00:00 (Fri)
  5989,
  0,
  'LMT',
      ],
      [
  59245424411, #    utc_start 1878-05-30 22:20:11 (Thu)
  60599744411, #      utc_end 1921-04-30 22:20:11 (Sat)
  59245430400, #  local_start 1878-05-31 00:00:00 (Fri)
  60599750400, #    local_end 1921-05-01 00:00:00 (Sun)
  5989,
  0,
  'HMT',
      ],
      [
  60599744411, #    utc_start 1921-04-30 22:20:11 (Sat)
  61260012000, #      utc_end 1942-04-02 22:00:00 (Thu)
  60599751611, #  local_start 1921-05-01 00:20:11 (Sun)
  61260019200, #    local_end 1942-04-03 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  61260012000, #    utc_start 1942-04-02 22:00:00 (Thu)
  61275909600, #      utc_end 1942-10-03 22:00:00 (Sat)
  61260022800, #  local_start 1942-04-03 01:00:00 (Fri)
  61275920400, #    local_end 1942-10-04 01:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61275909600, #    utc_start 1942-10-03 22:00:00 (Sat)
  62490355200, #      utc_end 1981-03-29 00:00:00 (Sun)
  61275916800, #  local_start 1942-10-04 00:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62490355200, #    utc_start 1981-03-29 00:00:00 (Sun)
  62506080000, #      utc_end 1981-09-27 00:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62506080000, #    utc_start 1981-09-27 00:00:00 (Sun)
  62521804800, #      utc_end 1982-03-28 00:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62521804800, #    utc_start 1982-03-28 00:00:00 (Sun)
  62537529600, #      utc_end 1982-09-26 00:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62537529600, #    utc_start 1982-09-26 00:00:00 (Sun)
  62545903200, #      utc_end 1982-12-31 22:00:00 (Fri)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62545910400, #    local_end 1983-01-01 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62545903200, #    utc_start 1982-12-31 22:00:00 (Fri)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62545910400, #  local_start 1983-01-01 00:00:00 (Sat)
  62553265200, #    local_end 1983-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553268800, #  local_start 1983-03-27 04:00:00 (Sun)
  62568993600, #    local_end 1983-09-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568990000, #  local_start 1983-09-25 03:00:00 (Sun)
  62584714800, #    local_end 1984-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584718400, #  local_start 1984-03-25 04:00:00 (Sun)
  62601048000, #    local_end 1984-09-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601044400, #  local_start 1984-09-30 03:00:00 (Sun)
  62616769200, #    local_end 1985-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616772800, #  local_start 1985-03-31 04:00:00 (Sun)
  62632497600, #    local_end 1985-09-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632494000, #  local_start 1985-09-29 03:00:00 (Sun)
  62648218800, #    local_end 1986-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648222400, #  local_start 1986-03-30 04:00:00 (Sun)
  62663947200, #    local_end 1986-09-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663943600, #  local_start 1986-09-28 03:00:00 (Sun)
  62679668400, #    local_end 1987-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679672000, #  local_start 1987-03-29 04:00:00 (Sun)
  62695396800, #    local_end 1987-09-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695393200, #  local_start 1987-09-27 03:00:00 (Sun)
  62711118000, #    local_end 1988-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711121600, #  local_start 1988-03-27 04:00:00 (Sun)
  62726846400, #    local_end 1988-09-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726842800, #  local_start 1988-09-25 03:00:00 (Sun)
  62742567600, #    local_end 1989-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742571200, #  local_start 1989-03-26 04:00:00 (Sun)
  62758296000, #    local_end 1989-09-24 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758292400, #  local_start 1989-09-24 03:00:00 (Sun)
  62774017200, #    local_end 1990-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774020800, #  local_start 1990-03-25 04:00:00 (Sun)
  62790350400, #    local_end 1990-09-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790346800, #  local_start 1990-09-30 03:00:00 (Sun)
  62806071600, #    local_end 1991-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806075200, #  local_start 1991-03-31 04:00:00 (Sun)
  62821800000, #    local_end 1991-09-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821796400, #  local_start 1991-09-29 03:00:00 (Sun)
  62837521200, #    local_end 1992-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837524800, #  local_start 1992-03-29 04:00:00 (Sun)
  62853249600, #    local_end 1992-09-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853246000, #  local_start 1992-09-27 03:00:00 (Sun)
  62868970800, #    local_end 1993-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868974400, #  local_start 1993-03-28 04:00:00 (Sun)
  62884699200, #    local_end 1993-09-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884695600, #  local_start 1993-09-26 03:00:00 (Sun)
  62900420400, #    local_end 1994-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900424000, #  local_start 1994-03-27 04:00:00 (Sun)
  62916148800, #    local_end 1994-09-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916145200, #  local_start 1994-09-25 03:00:00 (Sun)
  62931870000, #    local_end 1995-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931873600, #  local_start 1995-03-26 04:00:00 (Sun)
  62947598400, #    local_end 1995-09-24 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947594800, #  local_start 1995-09-24 03:00:00 (Sun)
  62963924400, #    local_end 1996-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963928000, #  local_start 1996-03-31 04:00:00 (Sun)
  62982072000, #    local_end 1996-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982068400, #  local_start 1996-10-27 03:00:00 (Sun)
  62995374000, #    local_end 1997-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995377600, #  local_start 1997-03-30 04:00:00 (Sun)
  63013521600, #    local_end 1997-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013518000, #  local_start 1997-10-26 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026827200, #  local_start 1998-03-29 04:00:00 (Sun)
  63044971200, #    local_end 1998-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044967600, #  local_start 1998-10-25 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058276800, #  local_start 1999-03-28 04:00:00 (Sun)
  63077025600, #    local_end 1999-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089726400, #  local_start 2000-03-26 04:00:00 (Sun)
  63108475200, #    local_end 2000-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108471600, #  local_start 2000-10-29 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121176000, #  local_start 2001-03-25 04:00:00 (Sun)
  63139924800, #    local_end 2001-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139921200, #  local_start 2001-10-28 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153230400, #  local_start 2002-03-31 04:00:00 (Sun)
  63171374400, #    local_end 2002-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171370800, #  local_start 2002-10-27 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184680000, #  local_start 2003-03-30 04:00:00 (Sun)
  63202824000, #    local_end 2003-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216129600, #  local_start 2004-03-28 04:00:00 (Sun)
  63234878400, #    local_end 2004-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247579200, #  local_start 2005-03-27 04:00:00 (Sun)
  63266328000, #    local_end 2005-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279025200, #    local_end 2006-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279028800, #  local_start 2006-03-26 04:00:00 (Sun)
  63297777600, #    local_end 2006-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310478400, #  local_start 2007-03-25 04:00:00 (Sun)
  63329227200, #    local_end 2007-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63342529200, #    local_end 2008-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342532800, #  local_start 2008-03-30 04:00:00 (Sun)
  63360676800, #    local_end 2008-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373978800, #    local_end 2009-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373982400, #  local_start 2009-03-29 04:00:00 (Sun)
  63392126400, #    local_end 2009-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392122800, #  local_start 2009-10-25 03:00:00 (Sun)
  63405428400, #    local_end 2010-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405432000, #  local_start 2010-03-28 04:00:00 (Sun)
  63424180800, #    local_end 2010-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424177200, #  local_start 2010-10-31 03:00:00 (Sun)
  63436878000, #    local_end 2011-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436881600, #  local_start 2011-03-27 04:00:00 (Sun)
  63455630400, #    local_end 2011-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455626800, #  local_start 2011-10-30 03:00:00 (Sun)
  63468327600, #    local_end 2012-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468331200, #  local_start 2012-03-25 04:00:00 (Sun)
  63487080000, #    local_end 2012-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487076400, #  local_start 2012-10-28 03:00:00 (Sun)
  63500382000, #    local_end 2013-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500385600, #  local_start 2013-03-31 04:00:00 (Sun)
  63518529600, #    local_end 2013-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518526000, #  local_start 2013-10-27 03:00:00 (Sun)
  63531831600, #    local_end 2014-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531835200, #  local_start 2014-03-30 04:00:00 (Sun)
  63549979200, #    local_end 2014-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549975600, #  local_start 2014-10-26 03:00:00 (Sun)
  63563281200, #    local_end 2015-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563284800, #  local_start 2015-03-29 04:00:00 (Sun)
  63581428800, #    local_end 2015-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581425200, #  local_start 2015-10-25 03:00:00 (Sun)
  63594730800, #    local_end 2016-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594734400, #  local_start 2016-03-27 04:00:00 (Sun)
  63613483200, #    local_end 2016-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613479600, #  local_start 2016-10-30 03:00:00 (Sun)
  63626180400, #    local_end 2017-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626184000, #  local_start 2017-03-26 04:00:00 (Sun)
  63644932800, #    local_end 2017-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644929200, #  local_start 2017-10-29 03:00:00 (Sun)
  63657630000, #    local_end 2018-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657633600, #  local_start 2018-03-25 04:00:00 (Sun)
  63676382400, #    local_end 2018-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676378800, #  local_start 2018-10-28 03:00:00 (Sun)
  63689684400, #    local_end 2019-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689688000, #  local_start 2019-03-31 04:00:00 (Sun)
  63707832000, #    local_end 2019-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707828400, #  local_start 2019-10-27 03:00:00 (Sun)
  63721134000, #    local_end 2020-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721137600, #  local_start 2020-03-29 04:00:00 (Sun)
  63739281600, #    local_end 2020-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739278000, #  local_start 2020-10-25 03:00:00 (Sun)
  63752583600, #    local_end 2021-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752587200, #  local_start 2021-03-28 04:00:00 (Sun)
  63771336000, #    local_end 2021-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771332400, #  local_start 2021-10-31 03:00:00 (Sun)
  63784033200, #    local_end 2022-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784036800, #  local_start 2022-03-27 04:00:00 (Sun)
  63802785600, #    local_end 2022-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802782000, #  local_start 2022-10-30 03:00:00 (Sun)
  63815482800, #    local_end 2023-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815486400, #  local_start 2023-03-26 04:00:00 (Sun)
  63834235200, #    local_end 2023-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834231600, #  local_start 2023-10-29 03:00:00 (Sun)
  63847537200, #    local_end 2024-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847540800, #  local_start 2024-03-31 04:00:00 (Sun)
  63865684800, #    local_end 2024-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865681200, #  local_start 2024-10-27 03:00:00 (Sun)
  63878986800, #    local_end 2025-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878990400, #  local_start 2025-03-30 04:00:00 (Sun)
  63897134400, #    local_end 2025-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897130800, #  local_start 2025-10-26 03:00:00 (Sun)
  63910436400, #    local_end 2026-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910440000, #  local_start 2026-03-29 04:00:00 (Sun)
  63928584000, #    local_end 2026-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928580400, #  local_start 2026-10-25 03:00:00 (Sun)
  63941886000, #    local_end 2027-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941889600, #  local_start 2027-03-28 04:00:00 (Sun)
  63960638400, #    local_end 2027-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {48}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723911,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723911,
      'utc_rd_secs' => 0,
      'utc_year' => 1984
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723910,
      'local_rd_secs' => 79200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723910,
      'utc_rd_secs' => 79200,
      'utc_year' => 1983
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_HELSINKI

    $main::fatpacked{"DateTime/TimeZone/Europe/Istanbul.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_ISTANBUL';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Istanbul;
  $DateTime::TimeZone::Europe::Istanbul::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Istanbul::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295535448, #      utc_end 1879-12-31 22:04:08 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  6952,
  0,
  'LMT',
      ],
      [
  59295535448, #    utc_start 1879-12-31 22:04:08 (Wed)
  60265807384, #      utc_end 1910-09-30 22:03:04 (Fri)
  59295542464, #  local_start 1880-01-01 00:01:04 (Thu)
  60265814400, #    local_end 1910-10-01 00:00:00 (Sat)
  7016,
  0,
  'IMT',
      ],
      [
  60265807384, #    utc_start 1910-09-30 22:03:04 (Fri)
  60441976800, #      utc_end 1916-04-30 22:00:00 (Sun)
  60265814584, #  local_start 1910-10-01 00:03:04 (Sat)
  60441984000, #    local_end 1916-05-01 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  60441976800, #    utc_start 1916-04-30 22:00:00 (Sun)
  60455192400, #      utc_end 1916-09-30 21:00:00 (Sat)
  60441987600, #  local_start 1916-05-01 01:00:00 (Mon)
  60455203200, #    local_end 1916-10-01 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  60455192400, #    utc_start 1916-09-30 21:00:00 (Sat)
  60565269600, #      utc_end 1920-03-27 22:00:00 (Sat)
  60455199600, #  local_start 1916-09-30 23:00:00 (Sat)
  60565276800, #    local_end 1920-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  60565269600, #    utc_start 1920-03-27 22:00:00 (Sat)
  60583496400, #      utc_end 1920-10-24 21:00:00 (Sun)
  60565280400, #  local_start 1920-03-28 01:00:00 (Sun)
  60583507200, #    local_end 1920-10-25 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  60583496400, #    utc_start 1920-10-24 21:00:00 (Sun)
  60597324000, #      utc_end 1921-04-02 22:00:00 (Sat)
  60583503600, #  local_start 1920-10-24 23:00:00 (Sun)
  60597331200, #    local_end 1921-04-03 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  60597324000, #    utc_start 1921-04-02 22:00:00 (Sat)
  60613131600, #      utc_end 1921-10-02 21:00:00 (Sun)
  60597334800, #  local_start 1921-04-03 01:00:00 (Sun)
  60613142400, #    local_end 1921-10-03 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  60613131600, #    utc_start 1921-10-02 21:00:00 (Sun)
  60628168800, #      utc_end 1922-03-25 22:00:00 (Sat)
  60613138800, #  local_start 1921-10-02 23:00:00 (Sun)
  60628176000, #    local_end 1922-03-26 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  60628168800, #    utc_start 1922-03-25 22:00:00 (Sat)
  60645099600, #      utc_end 1922-10-07 21:00:00 (Sat)
  60628179600, #  local_start 1922-03-26 01:00:00 (Sun)
  60645110400, #    local_end 1922-10-08 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  60645099600, #    utc_start 1922-10-07 21:00:00 (Sat)
  60695474400, #      utc_end 1924-05-12 22:00:00 (Mon)
  60645106800, #  local_start 1922-10-07 23:00:00 (Sat)
  60695481600, #    local_end 1924-05-13 00:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  60695474400, #    utc_start 1924-05-12 22:00:00 (Mon)
  60707653200, #      utc_end 1924-09-30 21:00:00 (Tue)
  60695485200, #  local_start 1924-05-13 01:00:00 (Tue)
  60707664000, #    local_end 1924-10-01 00:00:00 (Wed)
  10800,
  1,
  'EEST',
      ],
      [
  60707653200, #    utc_start 1924-09-30 21:00:00 (Tue)
  60725973600, #      utc_end 1925-04-30 22:00:00 (Thu)
  60707660400, #  local_start 1924-09-30 23:00:00 (Tue)
  60725980800, #    local_end 1925-05-01 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  60725973600, #    utc_start 1925-04-30 22:00:00 (Thu)
  60739189200, #      utc_end 1925-09-30 21:00:00 (Wed)
  60725984400, #  local_start 1925-05-01 01:00:00 (Fri)
  60739200000, #    local_end 1925-10-01 00:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  60739189200, #    utc_start 1925-09-30 21:00:00 (Wed)
  61204543200, #      utc_end 1940-06-29 22:00:00 (Sat)
  60739196400, #  local_start 1925-09-30 23:00:00 (Wed)
  61204550400, #    local_end 1940-06-30 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61204543200, #    utc_start 1940-06-29 22:00:00 (Sat)
  61212920400, #      utc_end 1940-10-04 21:00:00 (Fri)
  61204554000, #  local_start 1940-06-30 01:00:00 (Sun)
  61212931200, #    local_end 1940-10-05 00:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  61212920400, #    utc_start 1940-10-04 21:00:00 (Fri)
  61217848800, #      utc_end 1940-11-30 22:00:00 (Sat)
  61212927600, #  local_start 1940-10-04 23:00:00 (Fri)
  61217856000, #    local_end 1940-12-01 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61217848800, #    utc_start 1940-11-30 22:00:00 (Sat)
  61243246800, #      utc_end 1941-09-20 21:00:00 (Sat)
  61217859600, #  local_start 1940-12-01 01:00:00 (Sun)
  61243257600, #    local_end 1941-09-21 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61243246800, #    utc_start 1941-09-20 21:00:00 (Sat)
  61259839200, #      utc_end 1942-03-31 22:00:00 (Tue)
  61243254000, #  local_start 1941-09-20 23:00:00 (Sat)
  61259846400, #    local_end 1942-04-01 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  61259839200, #    utc_start 1942-03-31 22:00:00 (Tue)
  61278325200, #      utc_end 1942-10-31 21:00:00 (Sat)
  61259850000, #  local_start 1942-04-01 01:00:00 (Wed)
  61278336000, #    local_end 1942-11-01 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61278325200, #    utc_start 1942-10-31 21:00:00 (Sat)
  61354620000, #      utc_end 1945-04-01 22:00:00 (Sun)
  61278332400, #  local_start 1942-10-31 23:00:00 (Sat)
  61354627200, #    local_end 1945-04-02 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  61354620000, #    utc_start 1945-04-01 22:00:00 (Sun)
  61370946000, #      utc_end 1945-10-07 21:00:00 (Sun)
  61354630800, #  local_start 1945-04-02 01:00:00 (Mon)
  61370956800, #    local_end 1945-10-08 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  61370946000, #    utc_start 1945-10-07 21:00:00 (Sun)
  61391340000, #      utc_end 1946-05-31 22:00:00 (Fri)
  61370953200, #  local_start 1945-10-07 23:00:00 (Sun)
  61391347200, #    local_end 1946-06-01 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  61391340000, #    utc_start 1946-05-31 22:00:00 (Fri)
  61401877200, #      utc_end 1946-09-30 21:00:00 (Mon)
  61391350800, #  local_start 1946-06-01 01:00:00 (Sat)
  61401888000, #    local_end 1946-10-01 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  61401877200, #    utc_start 1946-09-30 21:00:00 (Mon)
  61419247200, #      utc_end 1947-04-19 22:00:00 (Sat)
  61401884400, #  local_start 1946-09-30 23:00:00 (Mon)
  61419254400, #    local_end 1947-04-20 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61419247200, #    utc_start 1947-04-19 22:00:00 (Sat)
  61433758800, #      utc_end 1947-10-04 21:00:00 (Sat)
  61419258000, #  local_start 1947-04-20 01:00:00 (Sun)
  61433769600, #    local_end 1947-10-05 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61433758800, #    utc_start 1947-10-04 21:00:00 (Sat)
  61450696800, #      utc_end 1948-04-17 22:00:00 (Sat)
  61433766000, #  local_start 1947-10-04 23:00:00 (Sat)
  61450704000, #    local_end 1948-04-18 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61450696800, #    utc_start 1948-04-17 22:00:00 (Sat)
  61465208400, #      utc_end 1948-10-02 21:00:00 (Sat)
  61450707600, #  local_start 1948-04-18 01:00:00 (Sun)
  61465219200, #    local_end 1948-10-03 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61465208400, #    utc_start 1948-10-02 21:00:00 (Sat)
  61481541600, #      utc_end 1949-04-09 22:00:00 (Sat)
  61465215600, #  local_start 1948-10-02 23:00:00 (Sat)
  61481548800, #    local_end 1949-04-10 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61481541600, #    utc_start 1949-04-09 22:00:00 (Sat)
  61496658000, #      utc_end 1949-10-01 21:00:00 (Sat)
  61481552400, #  local_start 1949-04-10 01:00:00 (Sun)
  61496668800, #    local_end 1949-10-02 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61496658000, #    utc_start 1949-10-01 21:00:00 (Sat)
  61513855200, #      utc_end 1950-04-18 22:00:00 (Tue)
  61496665200, #  local_start 1949-10-01 23:00:00 (Sat)
  61513862400, #    local_end 1950-04-19 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  61513855200, #    utc_start 1950-04-18 22:00:00 (Tue)
  61528712400, #      utc_end 1950-10-07 21:00:00 (Sat)
  61513866000, #  local_start 1950-04-19 01:00:00 (Wed)
  61528723200, #    local_end 1950-10-08 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  61528712400, #    utc_start 1950-10-07 21:00:00 (Sat)
  61545650400, #      utc_end 1951-04-21 22:00:00 (Sat)
  61528719600, #  local_start 1950-10-07 23:00:00 (Sat)
  61545657600, #    local_end 1951-04-22 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61545650400, #    utc_start 1951-04-21 22:00:00 (Sat)
  61560248400, #      utc_end 1951-10-07 21:00:00 (Sun)
  61545661200, #  local_start 1951-04-22 01:00:00 (Sun)
  61560259200, #    local_end 1951-10-08 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  61560248400, #    utc_start 1951-10-07 21:00:00 (Sun)
  61900063200, #      utc_end 1962-07-14 22:00:00 (Sat)
  61560255600, #  local_start 1951-10-07 23:00:00 (Sun)
  61900070400, #    local_end 1962-07-15 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  61900063200, #    utc_start 1962-07-14 22:00:00 (Sat)
  61907403600, #      utc_end 1962-10-07 21:00:00 (Sun)
  61900074000, #  local_start 1962-07-15 01:00:00 (Sun)
  61907414400, #    local_end 1962-10-08 00:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  61907403600, #    utc_start 1962-10-07 21:00:00 (Sun)
  61957951200, #      utc_end 1964-05-14 22:00:00 (Thu)
  61907410800, #  local_start 1962-10-07 23:00:00 (Sun)
  61957958400, #    local_end 1964-05-15 00:00:00 (Fri)
  7200,
  0,
  'EET',
      ],
      [
  61957951200, #    utc_start 1964-05-14 22:00:00 (Thu)
  61969957200, #      utc_end 1964-09-30 21:00:00 (Wed)
  61957962000, #  local_start 1964-05-15 01:00:00 (Fri)
  61969968000, #    local_end 1964-10-01 00:00:00 (Thu)
  10800,
  1,
  'EEST',
      ],
      [
  61969957200, #    utc_start 1964-09-30 21:00:00 (Wed)
  62146216800, #      utc_end 1970-05-02 22:00:00 (Sat)
  61969964400, #  local_start 1964-09-30 23:00:00 (Wed)
  62146224000, #    local_end 1970-05-03 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62146216800, #    utc_start 1970-05-02 22:00:00 (Sat)
  62159518800, #      utc_end 1970-10-03 21:00:00 (Sat)
  62146227600, #  local_start 1970-05-03 01:00:00 (Sun)
  62159529600, #    local_end 1970-10-04 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62159518800, #    utc_start 1970-10-03 21:00:00 (Sat)
  62177666400, #      utc_end 1971-05-01 22:00:00 (Sat)
  62159526000, #  local_start 1970-10-03 23:00:00 (Sat)
  62177673600, #    local_end 1971-05-02 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62177666400, #    utc_start 1971-05-01 22:00:00 (Sat)
  62190968400, #      utc_end 1971-10-02 21:00:00 (Sat)
  62177677200, #  local_start 1971-05-02 01:00:00 (Sun)
  62190979200, #    local_end 1971-10-03 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62190968400, #    utc_start 1971-10-02 21:00:00 (Sat)
  62209720800, #      utc_end 1972-05-06 22:00:00 (Sat)
  62190975600, #  local_start 1971-10-02 23:00:00 (Sat)
  62209728000, #    local_end 1972-05-07 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62209720800, #    utc_start 1972-05-06 22:00:00 (Sat)
  62223022800, #      utc_end 1972-10-07 21:00:00 (Sat)
  62209731600, #  local_start 1972-05-07 01:00:00 (Sun)
  62223033600, #    local_end 1972-10-08 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62223022800, #    utc_start 1972-10-07 21:00:00 (Sat)
  62243593200, #      utc_end 1973-06-02 23:00:00 (Sat)
  62223030000, #  local_start 1972-10-07 23:00:00 (Sat)
  62243600400, #    local_end 1973-06-03 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62243593200, #    utc_start 1973-06-02 23:00:00 (Sat)
  62256902400, #      utc_end 1973-11-04 00:00:00 (Sun)
  62243604000, #  local_start 1973-06-03 02:00:00 (Sun)
  62256913200, #    local_end 1973-11-04 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62256902400, #    utc_start 1973-11-04 00:00:00 (Sun)
  62269603200, #      utc_end 1974-03-31 00:00:00 (Sun)
  62256909600, #  local_start 1973-11-04 02:00:00 (Sun)
  62269610400, #    local_end 1974-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62269603200, #    utc_start 1974-03-31 00:00:00 (Sun)
  62288359200, #      utc_end 1974-11-03 02:00:00 (Sun)
  62269614000, #  local_start 1974-03-31 03:00:00 (Sun)
  62288370000, #    local_end 1974-11-03 05:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62288359200, #    utc_start 1974-11-03 02:00:00 (Sun)
  62301045600, #      utc_end 1975-03-29 22:00:00 (Sat)
  62288366400, #  local_start 1974-11-03 04:00:00 (Sun)
  62301052800, #    local_end 1975-03-30 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62301045600, #    utc_start 1975-03-29 22:00:00 (Sat)
  62319186000, #      utc_end 1975-10-25 21:00:00 (Sat)
  62301056400, #  local_start 1975-03-30 01:00:00 (Sun)
  62319196800, #    local_end 1975-10-26 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62319186000, #    utc_start 1975-10-25 21:00:00 (Sat)
  62338111200, #      utc_end 1976-05-31 22:00:00 (Mon)
  62319193200, #  local_start 1975-10-25 23:00:00 (Sat)
  62338118400, #    local_end 1976-06-01 00:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  62338111200, #    utc_start 1976-05-31 22:00:00 (Mon)
  62351240400, #      utc_end 1976-10-30 21:00:00 (Sat)
  62338122000, #  local_start 1976-06-01 01:00:00 (Tue)
  62351251200, #    local_end 1976-10-31 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62351240400, #    utc_start 1976-10-30 21:00:00 (Sat)
  62364549600, #      utc_end 1977-04-02 22:00:00 (Sat)
  62351247600, #  local_start 1976-10-30 23:00:00 (Sat)
  62364556800, #    local_end 1977-04-03 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62364549600, #    utc_start 1977-04-02 22:00:00 (Sat)
  62381480400, #      utc_end 1977-10-15 21:00:00 (Sat)
  62364560400, #  local_start 1977-04-03 01:00:00 (Sun)
  62381491200, #    local_end 1977-10-16 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62381480400, #    utc_start 1977-10-15 21:00:00 (Sat)
  62395999200, #      utc_end 1978-04-01 22:00:00 (Sat)
  62381487600, #  local_start 1977-10-15 23:00:00 (Sat)
  62396006400, #    local_end 1978-04-02 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62395999200, #    utc_start 1978-04-01 22:00:00 (Sat)
  62412930000, #      utc_end 1978-10-14 21:00:00 (Sat)
  62396010000, #  local_start 1978-04-02 01:00:00 (Sun)
  62412940800, #    local_end 1978-10-15 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62412930000, #    utc_start 1978-10-14 21:00:00 (Sat)
  62427452400, #      utc_end 1979-03-31 23:00:00 (Sat)
  62412944400, #  local_start 1978-10-15 01:00:00 (Sun)
  62427466800, #    local_end 1979-04-01 03:00:00 (Sun)
  14400,
  1,
  'TRST',
      ],
      [
  62427452400, #    utc_start 1979-03-31 23:00:00 (Sat)
  62444462400, #      utc_end 1979-10-14 20:00:00 (Sun)
  62427466800, #  local_start 1979-04-01 03:00:00 (Sun)
  62444476800, #    local_end 1979-10-15 00:00:00 (Mon)
  14400,
  1,
  'TRST',
      ],
      [
  62444462400, #    utc_start 1979-10-14 20:00:00 (Sun)
  62459510400, #      utc_end 1980-04-06 00:00:00 (Sun)
  62444473200, #  local_start 1979-10-14 23:00:00 (Sun)
  62459521200, #    local_end 1980-04-06 03:00:00 (Sun)
  10800,
  0,
  'TRT',
      ],
      [
  62459510400, #    utc_start 1980-04-06 00:00:00 (Sun)
  62475912000, #      utc_end 1980-10-12 20:00:00 (Sun)
  62459524800, #  local_start 1980-04-06 04:00:00 (Sun)
  62475926400, #    local_end 1980-10-13 00:00:00 (Mon)
  14400,
  1,
  'TRST',
      ],
      [
  62475912000, #    utc_start 1980-10-12 20:00:00 (Sun)
  62490355200, #      utc_end 1981-03-29 00:00:00 (Sun)
  62475922800, #  local_start 1980-10-12 23:00:00 (Sun)
  62490366000, #    local_end 1981-03-29 03:00:00 (Sun)
  10800,
  0,
  'TRT',
      ],
      [
  62490355200, #    utc_start 1981-03-29 00:00:00 (Sun)
  62507361600, #      utc_end 1981-10-11 20:00:00 (Sun)
  62490369600, #  local_start 1981-03-29 04:00:00 (Sun)
  62507376000, #    local_end 1981-10-12 00:00:00 (Mon)
  14400,
  1,
  'TRST',
      ],
      [
  62507361600, #    utc_start 1981-10-11 20:00:00 (Sun)
  62521804800, #      utc_end 1982-03-28 00:00:00 (Sun)
  62507372400, #  local_start 1981-10-11 23:00:00 (Sun)
  62521815600, #    local_end 1982-03-28 03:00:00 (Sun)
  10800,
  0,
  'TRT',
      ],
      [
  62521804800, #    utc_start 1982-03-28 00:00:00 (Sun)
  62538811200, #      utc_end 1982-10-10 20:00:00 (Sun)
  62521819200, #  local_start 1982-03-28 04:00:00 (Sun)
  62538825600, #    local_end 1982-10-11 00:00:00 (Mon)
  14400,
  1,
  'TRST',
      ],
      [
  62538811200, #    utc_start 1982-10-10 20:00:00 (Sun)
  62564130000, #      utc_end 1983-07-30 21:00:00 (Sat)
  62538822000, #  local_start 1982-10-10 23:00:00 (Sun)
  62564140800, #    local_end 1983-07-31 00:00:00 (Sun)
  10800,
  0,
  'TRT',
      ],
      [
  62564130000, #    utc_start 1983-07-30 21:00:00 (Sat)
  62569569600, #      utc_end 1983-10-01 20:00:00 (Sat)
  62564144400, #  local_start 1983-07-31 01:00:00 (Sun)
  62569584000, #    local_end 1983-10-02 00:00:00 (Sun)
  14400,
  1,
  'TRST',
      ],
      [
  62569569600, #    utc_start 1983-10-01 20:00:00 (Sat)
  62618475600, #      utc_end 1985-04-19 21:00:00 (Fri)
  62569580400, #  local_start 1983-10-01 23:00:00 (Sat)
  62618486400, #    local_end 1985-04-20 00:00:00 (Sat)
  10800,
  0,
  'TRT',
      ],
      [
  62618475600, #    utc_start 1985-04-19 21:00:00 (Fri)
  62632386000, #      utc_end 1985-09-27 21:00:00 (Fri)
  62618486400, #  local_start 1985-04-20 00:00:00 (Sat)
  62632396800, #    local_end 1985-09-28 00:00:00 (Sat)
  10800,
  1,
  'EEST',
      ],
      [
  62632386000, #    utc_start 1985-09-27 21:00:00 (Fri)
  62648208000, #      utc_end 1986-03-30 00:00:00 (Sun)
  62632393200, #  local_start 1985-09-27 23:00:00 (Fri)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62648208000, #    utc_start 1986-03-30 00:00:00 (Sun)
  62663932800, #      utc_end 1986-09-28 00:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62663932800, #    utc_start 1986-09-28 00:00:00 (Sun)
  62679657600, #      utc_end 1987-03-29 00:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62679657600, #    utc_start 1987-03-29 00:00:00 (Sun)
  62695382400, #      utc_end 1987-09-27 00:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62695382400, #    utc_start 1987-09-27 00:00:00 (Sun)
  62711107200, #      utc_end 1988-03-27 00:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62711107200, #    utc_start 1988-03-27 00:00:00 (Sun)
  62726832000, #      utc_end 1988-09-25 00:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62726832000, #    utc_start 1988-09-25 00:00:00 (Sun)
  62742556800, #      utc_end 1989-03-26 00:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62742556800, #    utc_start 1989-03-26 00:00:00 (Sun)
  62758281600, #      utc_end 1989-09-24 00:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62758281600, #    utc_start 1989-09-24 00:00:00 (Sun)
  62774006400, #      utc_end 1990-03-25 00:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62774006400, #    utc_start 1990-03-25 00:00:00 (Sun)
  62790336000, #      utc_end 1990-09-30 00:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62790336000, #    utc_start 1990-09-30 00:00:00 (Sun)
  62806057200, #      utc_end 1991-03-30 23:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806064400, #    local_end 1991-03-31 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62806057200, #    utc_start 1991-03-30 23:00:00 (Sat)
  62821782000, #      utc_end 1991-09-28 23:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821792800, #    local_end 1991-09-29 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821782000, #    utc_start 1991-09-28 23:00:00 (Sat)
  62837506800, #      utc_end 1992-03-28 23:00:00 (Sat)
  62821789200, #  local_start 1991-09-29 01:00:00 (Sun)
  62837514000, #    local_end 1992-03-29 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837506800, #    utc_start 1992-03-28 23:00:00 (Sat)
  62853231600, #      utc_end 1992-09-26 23:00:00 (Sat)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62853242400, #    local_end 1992-09-27 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853231600, #    utc_start 1992-09-26 23:00:00 (Sat)
  62868956400, #      utc_end 1993-03-27 23:00:00 (Sat)
  62853238800, #  local_start 1992-09-27 01:00:00 (Sun)
  62868963600, #    local_end 1993-03-28 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868956400, #    utc_start 1993-03-27 23:00:00 (Sat)
  62884681200, #      utc_end 1993-09-25 23:00:00 (Sat)
  62868967200, #  local_start 1993-03-28 02:00:00 (Sun)
  62884692000, #    local_end 1993-09-26 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884681200, #    utc_start 1993-09-25 23:00:00 (Sat)
  62900406000, #      utc_end 1994-03-26 23:00:00 (Sat)
  62884688400, #  local_start 1993-09-26 01:00:00 (Sun)
  62900413200, #    local_end 1994-03-27 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900406000, #    utc_start 1994-03-26 23:00:00 (Sat)
  62916130800, #      utc_end 1994-09-24 23:00:00 (Sat)
  62900416800, #  local_start 1994-03-27 02:00:00 (Sun)
  62916141600, #    local_end 1994-09-25 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916130800, #    utc_start 1994-09-24 23:00:00 (Sat)
  62931855600, #      utc_end 1995-03-25 23:00:00 (Sat)
  62916138000, #  local_start 1994-09-25 01:00:00 (Sun)
  62931862800, #    local_end 1995-03-26 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931855600, #    utc_start 1995-03-25 23:00:00 (Sat)
  62947580400, #      utc_end 1995-09-23 23:00:00 (Sat)
  62931866400, #  local_start 1995-03-26 02:00:00 (Sun)
  62947591200, #    local_end 1995-09-24 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947580400, #    utc_start 1995-09-23 23:00:00 (Sat)
  62963910000, #      utc_end 1996-03-30 23:00:00 (Sat)
  62947587600, #  local_start 1995-09-24 01:00:00 (Sun)
  62963917200, #    local_end 1996-03-31 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963910000, #    utc_start 1996-03-30 23:00:00 (Sat)
  62982054000, #      utc_end 1996-10-26 23:00:00 (Sat)
  62963920800, #  local_start 1996-03-31 02:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62982054000, #    utc_start 1996-10-26 23:00:00 (Sat)
  62995359600, #      utc_end 1997-03-29 23:00:00 (Sat)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995366800, #    local_end 1997-03-30 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995359600, #    utc_start 1997-03-29 23:00:00 (Sat)
  63013503600, #      utc_end 1997-10-25 23:00:00 (Sat)
  62995370400, #  local_start 1997-03-30 02:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63013503600, #    utc_start 1997-10-25 23:00:00 (Sat)
  63026809200, #      utc_end 1998-03-28 23:00:00 (Sat)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63026816400, #    local_end 1998-03-29 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026809200, #    utc_start 1998-03-28 23:00:00 (Sat)
  63044953200, #      utc_end 1998-10-24 23:00:00 (Sat)
  63026820000, #  local_start 1998-03-29 02:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63044953200, #    utc_start 1998-10-24 23:00:00 (Sat)
  63058258800, #      utc_end 1999-03-27 23:00:00 (Sat)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058266000, #    local_end 1999-03-28 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058258800, #    utc_start 1999-03-27 23:00:00 (Sat)
  63077007600, #      utc_end 1999-10-30 23:00:00 (Sat)
  63058269600, #  local_start 1999-03-28 02:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077007600, #    utc_start 1999-10-30 23:00:00 (Sat)
  63089708400, #      utc_end 2000-03-25 23:00:00 (Sat)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63089715600, #    local_end 2000-03-26 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63089708400, #    utc_start 2000-03-25 23:00:00 (Sat)
  63108457200, #      utc_end 2000-10-28 23:00:00 (Sat)
  63089719200, #  local_start 2000-03-26 02:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63108457200, #    utc_start 2000-10-28 23:00:00 (Sat)
  63121158000, #      utc_end 2001-03-24 23:00:00 (Sat)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121165200, #    local_end 2001-03-25 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121158000, #    utc_start 2001-03-24 23:00:00 (Sat)
  63139906800, #      utc_end 2001-10-27 23:00:00 (Sat)
  63121168800, #  local_start 2001-03-25 02:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63139906800, #    utc_start 2001-10-27 23:00:00 (Sat)
  63153212400, #      utc_end 2002-03-30 23:00:00 (Sat)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153219600, #    local_end 2002-03-31 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153212400, #    utc_start 2002-03-30 23:00:00 (Sat)
  63171356400, #      utc_end 2002-10-26 23:00:00 (Sat)
  63153223200, #  local_start 2002-03-31 02:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171356400, #    utc_start 2002-10-26 23:00:00 (Sat)
  63184662000, #      utc_end 2003-03-29 23:00:00 (Sat)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63184669200, #    local_end 2003-03-30 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184662000, #    utc_start 2003-03-29 23:00:00 (Sat)
  63202806000, #      utc_end 2003-10-25 23:00:00 (Sat)
  63184672800, #  local_start 2003-03-30 02:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202806000, #    utc_start 2003-10-25 23:00:00 (Sat)
  63216111600, #      utc_end 2004-03-27 23:00:00 (Sat)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216118800, #    local_end 2004-03-28 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216111600, #    utc_start 2004-03-27 23:00:00 (Sat)
  63234860400, #      utc_end 2004-10-30 23:00:00 (Sat)
  63216122400, #  local_start 2004-03-28 02:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234860400, #    utc_start 2004-10-30 23:00:00 (Sat)
  63247561200, #      utc_end 2005-03-26 23:00:00 (Sat)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63247568400, #    local_end 2005-03-27 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247561200, #    utc_start 2005-03-26 23:00:00 (Sat)
  63266310000, #      utc_end 2005-10-29 23:00:00 (Sat)
  63247572000, #  local_start 2005-03-27 02:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266310000, #    utc_start 2005-10-29 23:00:00 (Sat)
  63279010800, #      utc_end 2006-03-25 23:00:00 (Sat)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279018000, #    local_end 2006-03-26 01:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279010800, #    utc_start 2006-03-25 23:00:00 (Sat)
  63297759600, #      utc_end 2006-10-28 23:00:00 (Sat)
  63279021600, #  local_start 2006-03-26 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297759600, #    utc_start 2006-10-28 23:00:00 (Sat)
  63303285600, #      utc_end 2006-12-31 22:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63303292800, #    local_end 2007-01-01 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  63303285600, #    utc_start 2006-12-31 22:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63303292800, #  local_start 2007-01-01 00:00:00 (Mon)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310478400, #  local_start 2007-03-25 04:00:00 (Sun)
  63329227200, #    local_end 2007-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63342529200, #    local_end 2008-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342532800, #  local_start 2008-03-30 04:00:00 (Sun)
  63360676800, #    local_end 2008-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373978800, #    local_end 2009-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373982400, #  local_start 2009-03-29 04:00:00 (Sun)
  63392126400, #    local_end 2009-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392122800, #  local_start 2009-10-25 03:00:00 (Sun)
  63405428400, #    local_end 2010-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405432000, #  local_start 2010-03-28 04:00:00 (Sun)
  63424180800, #    local_end 2010-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424177200, #  local_start 2010-10-31 03:00:00 (Sun)
  63436878000, #    local_end 2011-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63436957200, #      utc_end 2011-03-28 01:00:00 (Mon)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63436964400, #    local_end 2011-03-28 03:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  63436957200, #    utc_start 2011-03-28 01:00:00 (Mon)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436968000, #  local_start 2011-03-28 04:00:00 (Mon)
  63455630400, #    local_end 2011-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455626800, #  local_start 2011-10-30 03:00:00 (Sun)
  63468327600, #    local_end 2012-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468331200, #  local_start 2012-03-25 04:00:00 (Sun)
  63487080000, #    local_end 2012-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487076400, #  local_start 2012-10-28 03:00:00 (Sun)
  63500382000, #    local_end 2013-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500385600, #  local_start 2013-03-31 04:00:00 (Sun)
  63518529600, #    local_end 2013-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518526000, #  local_start 2013-10-27 03:00:00 (Sun)
  63531831600, #    local_end 2014-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63531910800, #      utc_end 2014-03-31 01:00:00 (Mon)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63531918000, #    local_end 2014-03-31 03:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  63531910800, #    utc_start 2014-03-31 01:00:00 (Mon)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531921600, #  local_start 2014-03-31 04:00:00 (Mon)
  63549979200, #    local_end 2014-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549975600, #  local_start 2014-10-26 03:00:00 (Sun)
  63563281200, #    local_end 2015-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563284800, #  local_start 2015-03-29 04:00:00 (Sun)
  63581428800, #    local_end 2015-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63582627600, #      utc_end 2015-11-08 01:00:00 (Sun)
  63581428800, #  local_start 2015-10-25 04:00:00 (Sun)
  63582638400, #    local_end 2015-11-08 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63582627600, #    utc_start 2015-11-08 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63582634800, #  local_start 2015-11-08 03:00:00 (Sun)
  63594730800, #    local_end 2016-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594734400, #  local_start 2016-03-27 04:00:00 (Sun)
  63613483200, #    local_end 2016-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613479600, #  local_start 2016-10-30 03:00:00 (Sun)
  63626180400, #    local_end 2017-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626184000, #  local_start 2017-03-26 04:00:00 (Sun)
  63644932800, #    local_end 2017-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644929200, #  local_start 2017-10-29 03:00:00 (Sun)
  63657630000, #    local_end 2018-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657633600, #  local_start 2018-03-25 04:00:00 (Sun)
  63676382400, #    local_end 2018-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676378800, #  local_start 2018-10-28 03:00:00 (Sun)
  63689684400, #    local_end 2019-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689688000, #  local_start 2019-03-31 04:00:00 (Sun)
  63707832000, #    local_end 2019-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707828400, #  local_start 2019-10-27 03:00:00 (Sun)
  63721134000, #    local_end 2020-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721137600, #  local_start 2020-03-29 04:00:00 (Sun)
  63739281600, #    local_end 2020-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739278000, #  local_start 2020-10-25 03:00:00 (Sun)
  63752583600, #    local_end 2021-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752587200, #  local_start 2021-03-28 04:00:00 (Sun)
  63771336000, #    local_end 2021-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771332400, #  local_start 2021-10-31 03:00:00 (Sun)
  63784033200, #    local_end 2022-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784036800, #  local_start 2022-03-27 04:00:00 (Sun)
  63802785600, #    local_end 2022-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802782000, #  local_start 2022-10-30 03:00:00 (Sun)
  63815482800, #    local_end 2023-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815486400, #  local_start 2023-03-26 04:00:00 (Sun)
  63834235200, #    local_end 2023-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834231600, #  local_start 2023-10-29 03:00:00 (Sun)
  63847537200, #    local_end 2024-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847540800, #  local_start 2024-03-31 04:00:00 (Sun)
  63865684800, #    local_end 2024-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865681200, #  local_start 2024-10-27 03:00:00 (Sun)
  63878986800, #    local_end 2025-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878990400, #  local_start 2025-03-30 04:00:00 (Sun)
  63897134400, #    local_end 2025-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897130800, #  local_start 2025-10-26 03:00:00 (Sun)
  63910436400, #    local_end 2026-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910440000, #  local_start 2026-03-29 04:00:00 (Sun)
  63928584000, #    local_end 2026-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928580400, #  local_start 2026-10-25 03:00:00 (Sun)
  63941886000, #    local_end 2027-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941889600, #  local_start 2027-03-28 04:00:00 (Sun)
  63960638400, #    local_end 2027-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {77}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 735910,
      'local_rd_secs' => 10800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 735910,
      'utc_rd_secs' => 10800,
      'utc_year' => 2016
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 735910,
      'local_rd_secs' => 3600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 735910,
      'utc_rd_secs' => 3600,
      'utc_year' => 2016
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_ISTANBUL

    $main::fatpacked{"DateTime/TimeZone/Europe/Kaliningrad.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_KALININGRAD';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Kaliningrad;
  $DateTime::TimeZone::Europe::Kaliningrad::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Kaliningrad::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59713627080, #      utc_end 1893-03-31 22:38:00 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59713632000, #    local_end 1893-04-01 00:00:00 (Sat)
  4920,
  0,
  'LMT',
      ],
      [
  59713627080, #    utc_start 1893-03-31 22:38:00 (Fri)
  60441976800, #      utc_end 1916-04-30 22:00:00 (Sun)
  59713630680, #  local_start 1893-03-31 23:38:00 (Fri)
  60441980400, #    local_end 1916-04-30 23:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60441976800, #    utc_start 1916-04-30 22:00:00 (Sun)
  60455199600, #      utc_end 1916-09-30 23:00:00 (Sat)
  60441984000, #  local_start 1916-05-01 00:00:00 (Mon)
  60455206800, #    local_end 1916-10-01 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60455199600, #    utc_start 1916-09-30 23:00:00 (Sat)
  60472227600, #      utc_end 1917-04-16 01:00:00 (Mon)
  60455203200, #  local_start 1916-10-01 00:00:00 (Sun)
  60472231200, #    local_end 1917-04-16 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60472227600, #    utc_start 1917-04-16 01:00:00 (Mon)
  60485533200, #      utc_end 1917-09-17 01:00:00 (Mon)
  60472234800, #  local_start 1917-04-16 03:00:00 (Mon)
  60485540400, #    local_end 1917-09-17 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60485533200, #    utc_start 1917-09-17 01:00:00 (Mon)
  60503677200, #      utc_end 1918-04-15 01:00:00 (Mon)
  60485536800, #  local_start 1917-09-17 02:00:00 (Mon)
  60503680800, #    local_end 1918-04-15 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60503677200, #    utc_start 1918-04-15 01:00:00 (Mon)
  60516982800, #      utc_end 1918-09-16 01:00:00 (Mon)
  60503684400, #  local_start 1918-04-15 03:00:00 (Mon)
  60516990000, #    local_end 1918-09-16 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60516982800, #    utc_start 1918-09-16 01:00:00 (Mon)
  61196778000, #      utc_end 1940-04-01 01:00:00 (Mon)
  60516986400, #  local_start 1918-09-16 02:00:00 (Mon)
  61196781600, #    local_end 1940-04-01 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61196778000, #    utc_start 1940-04-01 01:00:00 (Mon)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61196785200, #  local_start 1940-04-01 03:00:00 (Mon)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61338906000, #      utc_end 1944-10-02 01:00:00 (Mon)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61338913200, #    local_end 1944-10-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61338906000, #    utc_start 1944-10-02 01:00:00 (Mon)
  61346761200, #      utc_end 1944-12-31 23:00:00 (Sun)
  61338909600, #  local_start 1944-10-02 02:00:00 (Mon)
  61346764800, #    local_end 1945-01-01 00:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61346761200, #    utc_start 1944-12-31 23:00:00 (Sun)
  61356952800, #      utc_end 1945-04-28 22:00:00 (Sat)
  61346768400, #  local_start 1945-01-01 01:00:00 (Mon)
  61356960000, #    local_end 1945-04-29 00:00:00 (Sun)
  7200,
  0,
  'CET',
      ],
      [
  61356952800, #    utc_start 1945-04-28 22:00:00 (Sat)
  61373019600, #      utc_end 1945-10-31 21:00:00 (Wed)
  61356963600, #  local_start 1945-04-29 01:00:00 (Sun)
  61373030400, #    local_end 1945-11-01 00:00:00 (Thu)
  10800,
  1,
  'CEST',
      ],
      [
  61373019600, #    utc_start 1945-10-31 21:00:00 (Wed)
  61378293600, #      utc_end 1945-12-31 22:00:00 (Mon)
  61373026800, #  local_start 1945-10-31 23:00:00 (Wed)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  7200,
  0,
  'CET',
      ],
      [
  61378293600, #    utc_start 1945-12-31 22:00:00 (Mon)
  62490603600, #      utc_end 1981-03-31 21:00:00 (Tue)
  61378304400, #  local_start 1946-01-01 01:00:00 (Tue)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  10800,
  0,
  'MSK',
      ],
      [
  62490603600, #    utc_start 1981-03-31 21:00:00 (Tue)
  62506411200, #      utc_end 1981-09-30 20:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  14400,
  1,
  'MSD',
      ],
      [
  62506411200, #    utc_start 1981-09-30 20:00:00 (Wed)
  62522139600, #      utc_end 1982-03-31 21:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  10800,
  0,
  'MSK',
      ],
      [
  62522139600, #    utc_start 1982-03-31 21:00:00 (Wed)
  62537947200, #      utc_end 1982-09-30 20:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  14400,
  1,
  'MSD',
      ],
      [
  62537947200, #    utc_start 1982-09-30 20:00:00 (Thu)
  62553675600, #      utc_end 1983-03-31 21:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  10800,
  0,
  'MSK',
      ],
      [
  62553675600, #    utc_start 1983-03-31 21:00:00 (Thu)
  62569483200, #      utc_end 1983-09-30 20:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  14400,
  1,
  'MSD',
      ],
      [
  62569483200, #    utc_start 1983-09-30 20:00:00 (Fri)
  62585298000, #      utc_end 1984-03-31 21:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62585298000, #    utc_start 1984-03-31 21:00:00 (Sat)
  62601030000, #      utc_end 1984-09-29 23:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62601030000, #    utc_start 1984-09-29 23:00:00 (Sat)
  62616754800, #      utc_end 1985-03-30 23:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62616754800, #    utc_start 1985-03-30 23:00:00 (Sat)
  62632479600, #      utc_end 1985-09-28 23:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62632479600, #    utc_start 1985-09-28 23:00:00 (Sat)
  62648204400, #      utc_end 1986-03-29 23:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62648204400, #    utc_start 1986-03-29 23:00:00 (Sat)
  62663929200, #      utc_end 1986-09-27 23:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62663929200, #    utc_start 1986-09-27 23:00:00 (Sat)
  62679654000, #      utc_end 1987-03-28 23:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62679654000, #    utc_start 1987-03-28 23:00:00 (Sat)
  62695378800, #      utc_end 1987-09-26 23:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62695378800, #    utc_start 1987-09-26 23:00:00 (Sat)
  62711103600, #      utc_end 1988-03-26 23:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62711103600, #    utc_start 1988-03-26 23:00:00 (Sat)
  62726828400, #      utc_end 1988-09-24 23:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62726828400, #    utc_start 1988-09-24 23:00:00 (Sat)
  62742553200, #      utc_end 1989-03-25 23:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62742553200, #    utc_start 1989-03-25 23:00:00 (Sat)
  62758281600, #      utc_end 1989-09-24 00:00:00 (Sun)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62758281600, #    utc_start 1989-09-24 00:00:00 (Sun)
  62774006400, #      utc_end 1990-03-25 00:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62774006400, #    utc_start 1990-03-25 00:00:00 (Sun)
  62790336000, #      utc_end 1990-09-30 00:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62790336000, #    utc_start 1990-09-30 00:00:00 (Sun)
  62806060800, #      utc_end 1991-03-31 00:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62806060800, #    utc_start 1991-03-31 00:00:00 (Sun)
  62821785600, #      utc_end 1991-09-29 00:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821785600, #    utc_start 1991-09-29 00:00:00 (Sun)
  62837510400, #      utc_end 1992-03-29 00:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837510400, #    utc_start 1992-03-29 00:00:00 (Sun)
  62853235200, #      utc_end 1992-09-27 00:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853235200, #    utc_start 1992-09-27 00:00:00 (Sun)
  62868960000, #      utc_end 1993-03-28 00:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868960000, #    utc_start 1993-03-28 00:00:00 (Sun)
  62884684800, #      utc_end 1993-09-26 00:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884684800, #    utc_start 1993-09-26 00:00:00 (Sun)
  62900409600, #      utc_end 1994-03-27 00:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900409600, #    utc_start 1994-03-27 00:00:00 (Sun)
  62916134400, #      utc_end 1994-09-25 00:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916134400, #    utc_start 1994-09-25 00:00:00 (Sun)
  62931859200, #      utc_end 1995-03-26 00:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931859200, #    utc_start 1995-03-26 00:00:00 (Sun)
  62947584000, #      utc_end 1995-09-24 00:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947584000, #    utc_start 1995-09-24 00:00:00 (Sun)
  62963913600, #      utc_end 1996-03-31 00:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963913600, #    utc_start 1996-03-31 00:00:00 (Sun)
  62982057600, #      utc_end 1996-10-27 00:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62982057600, #    utc_start 1996-10-27 00:00:00 (Sun)
  62995363200, #      utc_end 1997-03-30 00:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995363200, #    utc_start 1997-03-30 00:00:00 (Sun)
  63013507200, #      utc_end 1997-10-26 00:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63013507200, #    utc_start 1997-10-26 00:00:00 (Sun)
  63026812800, #      utc_end 1998-03-29 00:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026812800, #    utc_start 1998-03-29 00:00:00 (Sun)
  63044956800, #      utc_end 1998-10-25 00:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63044956800, #    utc_start 1998-10-25 00:00:00 (Sun)
  63058262400, #      utc_end 1999-03-28 00:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058262400, #    utc_start 1999-03-28 00:00:00 (Sun)
  63077011200, #      utc_end 1999-10-31 00:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077011200, #    utc_start 1999-10-31 00:00:00 (Sun)
  63089712000, #      utc_end 2000-03-26 00:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63089712000, #    utc_start 2000-03-26 00:00:00 (Sun)
  63108460800, #      utc_end 2000-10-29 00:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63108460800, #    utc_start 2000-10-29 00:00:00 (Sun)
  63121161600, #      utc_end 2001-03-25 00:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121161600, #    utc_start 2001-03-25 00:00:00 (Sun)
  63139910400, #      utc_end 2001-10-28 00:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63139910400, #    utc_start 2001-10-28 00:00:00 (Sun)
  63153216000, #      utc_end 2002-03-31 00:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153216000, #    utc_start 2002-03-31 00:00:00 (Sun)
  63171360000, #      utc_end 2002-10-27 00:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171360000, #    utc_start 2002-10-27 00:00:00 (Sun)
  63184665600, #      utc_end 2003-03-30 00:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184665600, #    utc_start 2003-03-30 00:00:00 (Sun)
  63202809600, #      utc_end 2003-10-26 00:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202809600, #    utc_start 2003-10-26 00:00:00 (Sun)
  63216115200, #      utc_end 2004-03-28 00:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216115200, #    utc_start 2004-03-28 00:00:00 (Sun)
  63234864000, #      utc_end 2004-10-31 00:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234864000, #    utc_start 2004-10-31 00:00:00 (Sun)
  63247564800, #      utc_end 2005-03-27 00:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247564800, #    utc_start 2005-03-27 00:00:00 (Sun)
  63266313600, #      utc_end 2005-10-30 00:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266313600, #    utc_start 2005-10-30 00:00:00 (Sun)
  63279014400, #      utc_end 2006-03-26 00:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279014400, #    utc_start 2006-03-26 00:00:00 (Sun)
  63297763200, #      utc_end 2006-10-29 00:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297763200, #    utc_start 2006-10-29 00:00:00 (Sun)
  63310464000, #      utc_end 2007-03-25 00:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310464000, #    utc_start 2007-03-25 00:00:00 (Sun)
  63329212800, #      utc_end 2007-10-28 00:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329212800, #    utc_start 2007-10-28 00:00:00 (Sun)
  63342518400, #      utc_end 2008-03-30 00:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342518400, #    utc_start 2008-03-30 00:00:00 (Sun)
  63360662400, #      utc_end 2008-10-26 00:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360662400, #    utc_start 2008-10-26 00:00:00 (Sun)
  63373968000, #      utc_end 2009-03-29 00:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373968000, #    utc_start 2009-03-29 00:00:00 (Sun)
  63392112000, #      utc_end 2009-10-25 00:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392112000, #    utc_start 2009-10-25 00:00:00 (Sun)
  63405417600, #      utc_end 2010-03-28 00:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405417600, #    utc_start 2010-03-28 00:00:00 (Sun)
  63424166400, #      utc_end 2010-10-31 00:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424166400, #    utc_start 2010-10-31 00:00:00 (Sun)
  63436867200, #      utc_end 2011-03-27 00:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436867200, #    utc_start 2011-03-27 00:00:00 (Sun)
  63549961200, #      utc_end 2014-10-25 23:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  10800,
  0,
  'FET',
      ],
      [
  63549961200, #    utc_start 2014-10-25 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  7200,
  0,
  'EET',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {37}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_KALININGRAD

    $main::fatpacked{"DateTime/TimeZone/Europe/Kiev.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_KIEV';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Kiev;
  $DateTime::TimeZone::Europe::Kiev::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Kiev::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295535076, #      utc_end 1879-12-31 21:57:56 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  7324,
  0,
  'LMT',
      ],
      [
  59295535076, #    utc_start 1879-12-31 21:57:56 (Wed)
  60694523876, #      utc_end 1924-05-01 21:57:56 (Thu)
  59295542400, #  local_start 1880-01-01 00:00:00 (Thu)
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  7324,
  0,
  'KMT',
      ],
      [
  60694523876, #    utc_start 1924-05-01 21:57:56 (Thu)
  60888146400, #      utc_end 1930-06-20 22:00:00 (Fri)
  60694531076, #  local_start 1924-05-01 23:57:56 (Thu)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  60888146400, #    utc_start 1930-06-20 22:00:00 (Fri)
  61243160400, #      utc_end 1941-09-19 21:00:00 (Fri)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  61243171200, #    local_end 1941-09-20 00:00:00 (Sat)
  10800,
  0,
  'MSK',
      ],
      [
  61243160400, #    utc_start 1941-09-19 21:00:00 (Fri)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61243167600, #  local_start 1941-09-19 23:00:00 (Fri)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61310300400, #      utc_end 1943-11-05 23:00:00 (Fri)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61310304000, #    local_end 1943-11-06 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  61310300400, #    utc_start 1943-11-05 23:00:00 (Fri)
  62490603600, #      utc_end 1981-03-31 21:00:00 (Tue)
  61310311200, #  local_start 1943-11-06 02:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  10800,
  0,
  'MSK',
      ],
      [
  62490603600, #    utc_start 1981-03-31 21:00:00 (Tue)
  62506411200, #      utc_end 1981-09-30 20:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  14400,
  1,
  'MSD',
      ],
      [
  62506411200, #    utc_start 1981-09-30 20:00:00 (Wed)
  62522139600, #      utc_end 1982-03-31 21:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  10800,
  0,
  'MSK',
      ],
      [
  62522139600, #    utc_start 1982-03-31 21:00:00 (Wed)
  62537947200, #      utc_end 1982-09-30 20:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  14400,
  1,
  'MSD',
      ],
      [
  62537947200, #    utc_start 1982-09-30 20:00:00 (Thu)
  62553675600, #      utc_end 1983-03-31 21:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  10800,
  0,
  'MSK',
      ],
      [
  62553675600, #    utc_start 1983-03-31 21:00:00 (Thu)
  62569483200, #      utc_end 1983-09-30 20:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  14400,
  1,
  'MSD',
      ],
      [
  62569483200, #    utc_start 1983-09-30 20:00:00 (Fri)
  62585298000, #      utc_end 1984-03-31 21:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62585298000, #    utc_start 1984-03-31 21:00:00 (Sat)
  62601030000, #      utc_end 1984-09-29 23:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62601030000, #    utc_start 1984-09-29 23:00:00 (Sat)
  62616754800, #      utc_end 1985-03-30 23:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62616754800, #    utc_start 1985-03-30 23:00:00 (Sat)
  62632479600, #      utc_end 1985-09-28 23:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62632479600, #    utc_start 1985-09-28 23:00:00 (Sat)
  62648204400, #      utc_end 1986-03-29 23:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62648204400, #    utc_start 1986-03-29 23:00:00 (Sat)
  62663929200, #      utc_end 1986-09-27 23:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62663929200, #    utc_start 1986-09-27 23:00:00 (Sat)
  62679654000, #      utc_end 1987-03-28 23:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62679654000, #    utc_start 1987-03-28 23:00:00 (Sat)
  62695378800, #      utc_end 1987-09-26 23:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62695378800, #    utc_start 1987-09-26 23:00:00 (Sat)
  62711103600, #      utc_end 1988-03-26 23:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62711103600, #    utc_start 1988-03-26 23:00:00 (Sat)
  62726828400, #      utc_end 1988-09-24 23:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62726828400, #    utc_start 1988-09-24 23:00:00 (Sat)
  62742553200, #      utc_end 1989-03-25 23:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62742553200, #    utc_start 1989-03-25 23:00:00 (Sat)
  62758278000, #      utc_end 1989-09-23 23:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62758278000, #    utc_start 1989-09-23 23:00:00 (Sat)
  62774002800, #      utc_end 1990-03-24 23:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62774002800, #    utc_start 1990-03-24 23:00:00 (Sat)
  62782466400, #      utc_end 1990-06-30 22:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62782480800, #    local_end 1990-07-01 02:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62782466400, #    utc_start 1990-06-30 22:00:00 (Sat)
  62821785600, #      utc_end 1991-09-29 00:00:00 (Sun)
  62782477200, #  local_start 1990-07-01 01:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821785600, #    utc_start 1991-09-29 00:00:00 (Sun)
  62837503200, #      utc_end 1992-03-28 22:00:00 (Sat)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837510400, #    local_end 1992-03-29 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837503200, #    utc_start 1992-03-28 22:00:00 (Sat)
  62853224400, #      utc_end 1992-09-26 21:00:00 (Sat)
  62837514000, #  local_start 1992-03-29 01:00:00 (Sun)
  62853235200, #    local_end 1992-09-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853224400, #    utc_start 1992-09-26 21:00:00 (Sat)
  62868952800, #      utc_end 1993-03-27 22:00:00 (Sat)
  62853231600, #  local_start 1992-09-26 23:00:00 (Sat)
  62868960000, #    local_end 1993-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868952800, #    utc_start 1993-03-27 22:00:00 (Sat)
  62884674000, #      utc_end 1993-09-25 21:00:00 (Sat)
  62868963600, #  local_start 1993-03-28 01:00:00 (Sun)
  62884684800, #    local_end 1993-09-26 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884674000, #    utc_start 1993-09-25 21:00:00 (Sat)
  62900402400, #      utc_end 1994-03-26 22:00:00 (Sat)
  62884681200, #  local_start 1993-09-25 23:00:00 (Sat)
  62900409600, #    local_end 1994-03-27 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900402400, #    utc_start 1994-03-26 22:00:00 (Sat)
  62916123600, #      utc_end 1994-09-24 21:00:00 (Sat)
  62900413200, #  local_start 1994-03-27 01:00:00 (Sun)
  62916134400, #    local_end 1994-09-25 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916123600, #    utc_start 1994-09-24 21:00:00 (Sat)
  62924594400, #      utc_end 1994-12-31 22:00:00 (Sat)
  62916130800, #  local_start 1994-09-24 23:00:00 (Sat)
  62924601600, #    local_end 1995-01-01 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62924594400, #    utc_start 1994-12-31 22:00:00 (Sat)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62924601600, #  local_start 1995-01-01 00:00:00 (Sun)
  62931870000, #    local_end 1995-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931873600, #  local_start 1995-03-26 04:00:00 (Sun)
  62947598400, #    local_end 1995-09-24 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947594800, #  local_start 1995-09-24 03:00:00 (Sun)
  62963924400, #    local_end 1996-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963928000, #  local_start 1996-03-31 04:00:00 (Sun)
  62982072000, #    local_end 1996-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982068400, #  local_start 1996-10-27 03:00:00 (Sun)
  62995374000, #    local_end 1997-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995377600, #  local_start 1997-03-30 04:00:00 (Sun)
  63013521600, #    local_end 1997-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013518000, #  local_start 1997-10-26 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026827200, #  local_start 1998-03-29 04:00:00 (Sun)
  63044971200, #    local_end 1998-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044967600, #  local_start 1998-10-25 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058276800, #  local_start 1999-03-28 04:00:00 (Sun)
  63077025600, #    local_end 1999-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089726400, #  local_start 2000-03-26 04:00:00 (Sun)
  63108475200, #    local_end 2000-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108471600, #  local_start 2000-10-29 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121176000, #  local_start 2001-03-25 04:00:00 (Sun)
  63139924800, #    local_end 2001-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139921200, #  local_start 2001-10-28 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153230400, #  local_start 2002-03-31 04:00:00 (Sun)
  63171374400, #    local_end 2002-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171370800, #  local_start 2002-10-27 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184680000, #  local_start 2003-03-30 04:00:00 (Sun)
  63202824000, #    local_end 2003-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216129600, #  local_start 2004-03-28 04:00:00 (Sun)
  63234878400, #    local_end 2004-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247579200, #  local_start 2005-03-27 04:00:00 (Sun)
  63266328000, #    local_end 2005-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279025200, #    local_end 2006-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279028800, #  local_start 2006-03-26 04:00:00 (Sun)
  63297777600, #    local_end 2006-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310478400, #  local_start 2007-03-25 04:00:00 (Sun)
  63329227200, #    local_end 2007-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63342529200, #    local_end 2008-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342532800, #  local_start 2008-03-30 04:00:00 (Sun)
  63360676800, #    local_end 2008-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373978800, #    local_end 2009-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373982400, #  local_start 2009-03-29 04:00:00 (Sun)
  63392126400, #    local_end 2009-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392122800, #  local_start 2009-10-25 03:00:00 (Sun)
  63405428400, #    local_end 2010-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405432000, #  local_start 2010-03-28 04:00:00 (Sun)
  63424180800, #    local_end 2010-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424177200, #  local_start 2010-10-31 03:00:00 (Sun)
  63436878000, #    local_end 2011-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436881600, #  local_start 2011-03-27 04:00:00 (Sun)
  63455630400, #    local_end 2011-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455626800, #  local_start 2011-10-30 03:00:00 (Sun)
  63468327600, #    local_end 2012-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468331200, #  local_start 2012-03-25 04:00:00 (Sun)
  63487080000, #    local_end 2012-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487076400, #  local_start 2012-10-28 03:00:00 (Sun)
  63500382000, #    local_end 2013-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500385600, #  local_start 2013-03-31 04:00:00 (Sun)
  63518529600, #    local_end 2013-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518526000, #  local_start 2013-10-27 03:00:00 (Sun)
  63531831600, #    local_end 2014-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531835200, #  local_start 2014-03-30 04:00:00 (Sun)
  63549979200, #    local_end 2014-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549975600, #  local_start 2014-10-26 03:00:00 (Sun)
  63563281200, #    local_end 2015-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563284800, #  local_start 2015-03-29 04:00:00 (Sun)
  63581428800, #    local_end 2015-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581425200, #  local_start 2015-10-25 03:00:00 (Sun)
  63594730800, #    local_end 2016-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594734400, #  local_start 2016-03-27 04:00:00 (Sun)
  63613483200, #    local_end 2016-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613479600, #  local_start 2016-10-30 03:00:00 (Sun)
  63626180400, #    local_end 2017-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626184000, #  local_start 2017-03-26 04:00:00 (Sun)
  63644932800, #    local_end 2017-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644929200, #  local_start 2017-10-29 03:00:00 (Sun)
  63657630000, #    local_end 2018-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657633600, #  local_start 2018-03-25 04:00:00 (Sun)
  63676382400, #    local_end 2018-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676378800, #  local_start 2018-10-28 03:00:00 (Sun)
  63689684400, #    local_end 2019-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689688000, #  local_start 2019-03-31 04:00:00 (Sun)
  63707832000, #    local_end 2019-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707828400, #  local_start 2019-10-27 03:00:00 (Sun)
  63721134000, #    local_end 2020-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721137600, #  local_start 2020-03-29 04:00:00 (Sun)
  63739281600, #    local_end 2020-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739278000, #  local_start 2020-10-25 03:00:00 (Sun)
  63752583600, #    local_end 2021-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752587200, #  local_start 2021-03-28 04:00:00 (Sun)
  63771336000, #    local_end 2021-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771332400, #  local_start 2021-10-31 03:00:00 (Sun)
  63784033200, #    local_end 2022-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784036800, #  local_start 2022-03-27 04:00:00 (Sun)
  63802785600, #    local_end 2022-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802782000, #  local_start 2022-10-30 03:00:00 (Sun)
  63815482800, #    local_end 2023-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815486400, #  local_start 2023-03-26 04:00:00 (Sun)
  63834235200, #    local_end 2023-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834231600, #  local_start 2023-10-29 03:00:00 (Sun)
  63847537200, #    local_end 2024-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847540800, #  local_start 2024-03-31 04:00:00 (Sun)
  63865684800, #    local_end 2024-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865681200, #  local_start 2024-10-27 03:00:00 (Sun)
  63878986800, #    local_end 2025-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878990400, #  local_start 2025-03-30 04:00:00 (Sun)
  63897134400, #    local_end 2025-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897130800, #  local_start 2025-10-26 03:00:00 (Sun)
  63910436400, #    local_end 2026-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910440000, #  local_start 2026-03-29 04:00:00 (Sun)
  63928584000, #    local_end 2026-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928580400, #  local_start 2026-10-25 03:00:00 (Sun)
  63941886000, #    local_end 2027-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941889600, #  local_start 2027-03-28 04:00:00 (Sun)
  63960638400, #    local_end 2027-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {49}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 728294,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 728294,
      'utc_rd_secs' => 0,
      'utc_year' => 1996
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 728293,
      'local_rd_secs' => 79200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 728293,
      'utc_rd_secs' => 79200,
      'utc_year' => 1995
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_KIEV

    $main::fatpacked{"DateTime/TimeZone/Europe/Kirov.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_KIROV';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Kirov;
  $DateTime::TimeZone::Europe::Kirov::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Kirov::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60541857672, #      utc_end 1919-06-30 22:41:12 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60541869600, #    local_end 1919-07-01 02:00:00 (Tue)
  11928,
  0,
  'LMT',
      ],
      [
  60541857672, #    utc_start 1919-06-30 22:41:12 (Mon)
  60888142800, #      utc_end 1930-06-20 21:00:00 (Fri)
  60541868472, #  local_start 1919-07-01 01:41:12 (Tue)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  10800,
  0,
  '+03',
      ],
      [
  60888142800, #    utc_start 1930-06-20 21:00:00 (Fri)
  62490600000, #      utc_end 1981-03-31 20:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  14400,
  0,
  '+04',
      ],
      [
  62490600000, #    utc_start 1981-03-31 20:00:00 (Tue)
  62506407600, #      utc_end 1981-09-30 19:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  18000,
  1,
  '+05',
      ],
      [
  62506407600, #    utc_start 1981-09-30 19:00:00 (Wed)
  62522136000, #      utc_end 1982-03-31 20:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  14400,
  0,
  '+04',
      ],
      [
  62522136000, #    utc_start 1982-03-31 20:00:00 (Wed)
  62537943600, #      utc_end 1982-09-30 19:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  18000,
  1,
  '+05',
      ],
      [
  62537943600, #    utc_start 1982-09-30 19:00:00 (Thu)
  62553672000, #      utc_end 1983-03-31 20:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  14400,
  0,
  '+04',
      ],
      [
  62553672000, #    utc_start 1983-03-31 20:00:00 (Thu)
  62569479600, #      utc_end 1983-09-30 19:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  18000,
  1,
  '+05',
      ],
      [
  62569479600, #    utc_start 1983-09-30 19:00:00 (Fri)
  62585294400, #      utc_end 1984-03-31 20:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62585294400, #    utc_start 1984-03-31 20:00:00 (Sat)
  62601026400, #      utc_end 1984-09-29 22:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62601026400, #    utc_start 1984-09-29 22:00:00 (Sat)
  62616751200, #      utc_end 1985-03-30 22:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62616751200, #    utc_start 1985-03-30 22:00:00 (Sat)
  62632476000, #      utc_end 1985-09-28 22:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62632476000, #    utc_start 1985-09-28 22:00:00 (Sat)
  62648200800, #      utc_end 1986-03-29 22:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62648200800, #    utc_start 1986-03-29 22:00:00 (Sat)
  62663925600, #      utc_end 1986-09-27 22:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62663925600, #    utc_start 1986-09-27 22:00:00 (Sat)
  62679650400, #      utc_end 1987-03-28 22:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62679650400, #    utc_start 1987-03-28 22:00:00 (Sat)
  62695375200, #      utc_end 1987-09-26 22:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62695375200, #    utc_start 1987-09-26 22:00:00 (Sat)
  62711100000, #      utc_end 1988-03-26 22:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62711100000, #    utc_start 1988-03-26 22:00:00 (Sat)
  62726824800, #      utc_end 1988-09-24 22:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62726824800, #    utc_start 1988-09-24 22:00:00 (Sat)
  62742549600, #      utc_end 1989-03-25 22:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62742549600, #    utc_start 1989-03-25 22:00:00 (Sat)
  62758278000, #      utc_end 1989-09-23 23:00:00 (Sat)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62758278000, #    utc_start 1989-09-23 23:00:00 (Sat)
  62774002800, #      utc_end 1990-03-24 23:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62774002800, #    utc_start 1990-03-24 23:00:00 (Sat)
  62790332400, #      utc_end 1990-09-29 23:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62790332400, #    utc_start 1990-09-29 23:00:00 (Sat)
  62806057200, #      utc_end 1991-03-30 23:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62806057200, #    utc_start 1991-03-30 23:00:00 (Sat)
  62837503200, #      utc_end 1992-03-28 22:00:00 (Sat)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62837503200, #    utc_start 1992-03-28 22:00:00 (Sat)
  62853231600, #      utc_end 1992-09-26 23:00:00 (Sat)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62853231600, #    utc_start 1992-09-26 23:00:00 (Sat)
  62868956400, #      utc_end 1993-03-27 23:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62868956400, #    utc_start 1993-03-27 23:00:00 (Sat)
  62884681200, #      utc_end 1993-09-25 23:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62884681200, #    utc_start 1993-09-25 23:00:00 (Sat)
  62900406000, #      utc_end 1994-03-26 23:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62900406000, #    utc_start 1994-03-26 23:00:00 (Sat)
  62916130800, #      utc_end 1994-09-24 23:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62916130800, #    utc_start 1994-09-24 23:00:00 (Sat)
  62931855600, #      utc_end 1995-03-25 23:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62931855600, #    utc_start 1995-03-25 23:00:00 (Sat)
  62947580400, #      utc_end 1995-09-23 23:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62947580400, #    utc_start 1995-09-23 23:00:00 (Sat)
  62963910000, #      utc_end 1996-03-30 23:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62963910000, #    utc_start 1996-03-30 23:00:00 (Sat)
  62982054000, #      utc_end 1996-10-26 23:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62982054000, #    utc_start 1996-10-26 23:00:00 (Sat)
  62995359600, #      utc_end 1997-03-29 23:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62995359600, #    utc_start 1997-03-29 23:00:00 (Sat)
  63013503600, #      utc_end 1997-10-25 23:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63013503600, #    utc_start 1997-10-25 23:00:00 (Sat)
  63026809200, #      utc_end 1998-03-28 23:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63026809200, #    utc_start 1998-03-28 23:00:00 (Sat)
  63044953200, #      utc_end 1998-10-24 23:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63044953200, #    utc_start 1998-10-24 23:00:00 (Sat)
  63058258800, #      utc_end 1999-03-27 23:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63058258800, #    utc_start 1999-03-27 23:00:00 (Sat)
  63077007600, #      utc_end 1999-10-30 23:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63077007600, #    utc_start 1999-10-30 23:00:00 (Sat)
  63089708400, #      utc_end 2000-03-25 23:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63089708400, #    utc_start 2000-03-25 23:00:00 (Sat)
  63108457200, #      utc_end 2000-10-28 23:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63108457200, #    utc_start 2000-10-28 23:00:00 (Sat)
  63121158000, #      utc_end 2001-03-24 23:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63121158000, #    utc_start 2001-03-24 23:00:00 (Sat)
  63139906800, #      utc_end 2001-10-27 23:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63139906800, #    utc_start 2001-10-27 23:00:00 (Sat)
  63153212400, #      utc_end 2002-03-30 23:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63153212400, #    utc_start 2002-03-30 23:00:00 (Sat)
  63171356400, #      utc_end 2002-10-26 23:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63171356400, #    utc_start 2002-10-26 23:00:00 (Sat)
  63184662000, #      utc_end 2003-03-29 23:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63184662000, #    utc_start 2003-03-29 23:00:00 (Sat)
  63202806000, #      utc_end 2003-10-25 23:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63202806000, #    utc_start 2003-10-25 23:00:00 (Sat)
  63216111600, #      utc_end 2004-03-27 23:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63216111600, #    utc_start 2004-03-27 23:00:00 (Sat)
  63234860400, #      utc_end 2004-10-30 23:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63234860400, #    utc_start 2004-10-30 23:00:00 (Sat)
  63247561200, #      utc_end 2005-03-26 23:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63247561200, #    utc_start 2005-03-26 23:00:00 (Sat)
  63266310000, #      utc_end 2005-10-29 23:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63266310000, #    utc_start 2005-10-29 23:00:00 (Sat)
  63279010800, #      utc_end 2006-03-25 23:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63279010800, #    utc_start 2006-03-25 23:00:00 (Sat)
  63297759600, #      utc_end 2006-10-28 23:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63297759600, #    utc_start 2006-10-28 23:00:00 (Sat)
  63310460400, #      utc_end 2007-03-24 23:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63310460400, #    utc_start 2007-03-24 23:00:00 (Sat)
  63329209200, #      utc_end 2007-10-27 23:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63329209200, #    utc_start 2007-10-27 23:00:00 (Sat)
  63342514800, #      utc_end 2008-03-29 23:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63342514800, #    utc_start 2008-03-29 23:00:00 (Sat)
  63360658800, #      utc_end 2008-10-25 23:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63360658800, #    utc_start 2008-10-25 23:00:00 (Sat)
  63373964400, #      utc_end 2009-03-28 23:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63373964400, #    utc_start 2009-03-28 23:00:00 (Sat)
  63392108400, #      utc_end 2009-10-24 23:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63392108400, #    utc_start 2009-10-24 23:00:00 (Sat)
  63405414000, #      utc_end 2010-03-27 23:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63405414000, #    utc_start 2010-03-27 23:00:00 (Sat)
  63424162800, #      utc_end 2010-10-30 23:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63424162800, #    utc_start 2010-10-30 23:00:00 (Sat)
  63436863600, #      utc_end 2011-03-26 23:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63436863600, #    utc_start 2011-03-26 23:00:00 (Sat)
  63549957600, #      utc_end 2014-10-25 22:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63549957600, #    utc_start 2014-10-25 22:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  10800,
  0,
  '+03',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {29}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_KIROV

    $main::fatpacked{"DateTime/TimeZone/Europe/Lisbon.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_LISBON';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Lisbon;
  $DateTime::TimeZone::Europe::Lisbon::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Lisbon::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59421775005, #      utc_end 1884-01-01 00:36:45 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59421772800, #    local_end 1884-01-01 00:00:00 (Tue)
  -2205,
  0,
  'LMT',
      ],
      [
  59421775005, #    utc_start 1884-01-01 00:36:45 (Tue)
  60305301405, #      utc_end 1912-01-01 00:36:45 (Mon)
  59421772800, #  local_start 1884-01-01 00:00:00 (Tue)
  60305299200, #    local_end 1912-01-01 00:00:00 (Mon)
  -2205,
  0,
  'LMT',
      ],
      [
  60305301405, #    utc_start 1912-01-01 00:36:45 (Mon)
  60446127600, #      utc_end 1916-06-17 23:00:00 (Sat)
  60305301405, #  local_start 1912-01-01 00:36:45 (Mon)
  60446127600, #    local_end 1916-06-17 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60446127600, #    utc_start 1916-06-17 23:00:00 (Sat)
  60457881600, #      utc_end 1916-11-01 00:00:00 (Wed)
  60446131200, #  local_start 1916-06-18 00:00:00 (Sun)
  60457885200, #    local_end 1916-11-01 01:00:00 (Wed)
  3600,
  1,
  'WEST',
      ],
      [
  60457881600, #    utc_start 1916-11-01 00:00:00 (Wed)
  60468246000, #      utc_end 1917-02-28 23:00:00 (Wed)
  60457881600, #  local_start 1916-11-01 00:00:00 (Wed)
  60468246000, #    local_end 1917-02-28 23:00:00 (Wed)
  0,
  0,
  'WET',
      ],
      [
  60468246000, #    utc_start 1917-02-28 23:00:00 (Wed)
  60487945200, #      utc_end 1917-10-14 23:00:00 (Sun)
  60468249600, #  local_start 1917-03-01 00:00:00 (Thu)
  60487948800, #    local_end 1917-10-15 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  60487945200, #    utc_start 1917-10-14 23:00:00 (Sun)
  60499868400, #      utc_end 1918-03-01 23:00:00 (Fri)
  60487945200, #  local_start 1917-10-14 23:00:00 (Sun)
  60499868400, #    local_end 1918-03-01 23:00:00 (Fri)
  0,
  0,
  'WET',
      ],
      [
  60499868400, #    utc_start 1918-03-01 23:00:00 (Fri)
  60519481200, #      utc_end 1918-10-14 23:00:00 (Mon)
  60499872000, #  local_start 1918-03-02 00:00:00 (Sat)
  60519484800, #    local_end 1918-10-15 00:00:00 (Tue)
  3600,
  1,
  'WEST',
      ],
      [
  60519481200, #    utc_start 1918-10-14 23:00:00 (Mon)
  60531318000, #      utc_end 1919-02-28 23:00:00 (Fri)
  60519481200, #  local_start 1918-10-14 23:00:00 (Mon)
  60531318000, #    local_end 1919-02-28 23:00:00 (Fri)
  0,
  0,
  'WET',
      ],
      [
  60531318000, #    utc_start 1919-02-28 23:00:00 (Fri)
  60551017200, #      utc_end 1919-10-14 23:00:00 (Tue)
  60531321600, #  local_start 1919-03-01 00:00:00 (Sat)
  60551020800, #    local_end 1919-10-15 00:00:00 (Wed)
  3600,
  1,
  'WEST',
      ],
      [
  60551017200, #    utc_start 1919-10-14 23:00:00 (Tue)
  60562940400, #      utc_end 1920-02-29 23:00:00 (Sun)
  60551017200, #  local_start 1919-10-14 23:00:00 (Tue)
  60562940400, #    local_end 1920-02-29 23:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  60562940400, #    utc_start 1920-02-29 23:00:00 (Sun)
  60582639600, #      utc_end 1920-10-14 23:00:00 (Thu)
  60562944000, #  local_start 1920-03-01 00:00:00 (Mon)
  60582643200, #    local_end 1920-10-15 00:00:00 (Fri)
  3600,
  1,
  'WEST',
      ],
      [
  60582639600, #    utc_start 1920-10-14 23:00:00 (Thu)
  60594476400, #      utc_end 1921-02-28 23:00:00 (Mon)
  60582639600, #  local_start 1920-10-14 23:00:00 (Thu)
  60594476400, #    local_end 1921-02-28 23:00:00 (Mon)
  0,
  0,
  'WET',
      ],
      [
  60594476400, #    utc_start 1921-02-28 23:00:00 (Mon)
  60614175600, #      utc_end 1921-10-14 23:00:00 (Fri)
  60594480000, #  local_start 1921-03-01 00:00:00 (Tue)
  60614179200, #    local_end 1921-10-15 00:00:00 (Sat)
  3600,
  1,
  'WEST',
      ],
      [
  60614175600, #    utc_start 1921-10-14 23:00:00 (Fri)
  60693231600, #      utc_end 1924-04-16 23:00:00 (Wed)
  60614175600, #  local_start 1921-10-14 23:00:00 (Fri)
  60693231600, #    local_end 1924-04-16 23:00:00 (Wed)
  0,
  0,
  'WET',
      ],
      [
  60693231600, #    utc_start 1924-04-16 23:00:00 (Wed)
  60708870000, #      utc_end 1924-10-14 23:00:00 (Tue)
  60693235200, #  local_start 1924-04-17 00:00:00 (Thu)
  60708873600, #    local_end 1924-10-15 00:00:00 (Wed)
  3600,
  1,
  'WEST',
      ],
      [
  60708870000, #    utc_start 1924-10-14 23:00:00 (Tue)
  60756390000, #      utc_end 1926-04-17 23:00:00 (Sat)
  60708870000, #  local_start 1924-10-14 23:00:00 (Tue)
  60756390000, #    local_end 1926-04-17 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60756390000, #    utc_start 1926-04-17 23:00:00 (Sat)
  60770905200, #      utc_end 1926-10-02 23:00:00 (Sat)
  60756393600, #  local_start 1926-04-18 00:00:00 (Sun)
  60770908800, #    local_end 1926-10-03 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60770905200, #    utc_start 1926-10-02 23:00:00 (Sat)
  60787234800, #      utc_end 1927-04-09 23:00:00 (Sat)
  60770905200, #  local_start 1926-10-02 23:00:00 (Sat)
  60787234800, #    local_end 1927-04-09 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60787234800, #    utc_start 1927-04-09 23:00:00 (Sat)
  60802354800, #      utc_end 1927-10-01 23:00:00 (Sat)
  60787238400, #  local_start 1927-04-10 00:00:00 (Sun)
  60802358400, #    local_end 1927-10-02 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60802354800, #    utc_start 1927-10-01 23:00:00 (Sat)
  60819289200, #      utc_end 1928-04-14 23:00:00 (Sat)
  60802354800, #  local_start 1927-10-01 23:00:00 (Sat)
  60819289200, #    local_end 1928-04-14 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60819289200, #    utc_start 1928-04-14 23:00:00 (Sat)
  60834409200, #      utc_end 1928-10-06 23:00:00 (Sat)
  60819292800, #  local_start 1928-04-15 00:00:00 (Sun)
  60834412800, #    local_end 1928-10-07 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60834409200, #    utc_start 1928-10-06 23:00:00 (Sat)
  60851343600, #      utc_end 1929-04-20 23:00:00 (Sat)
  60834409200, #  local_start 1928-10-06 23:00:00 (Sat)
  60851343600, #    local_end 1929-04-20 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60851343600, #    utc_start 1929-04-20 23:00:00 (Sat)
  60865858800, #      utc_end 1929-10-05 23:00:00 (Sat)
  60851347200, #  local_start 1929-04-21 00:00:00 (Sun)
  60865862400, #    local_end 1929-10-06 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60865858800, #    utc_start 1929-10-05 23:00:00 (Sat)
  60914242800, #      utc_end 1931-04-18 23:00:00 (Sat)
  60865858800, #  local_start 1929-10-05 23:00:00 (Sat)
  60914242800, #    local_end 1931-04-18 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60914242800, #    utc_start 1931-04-18 23:00:00 (Sat)
  60928758000, #      utc_end 1931-10-03 23:00:00 (Sat)
  60914246400, #  local_start 1931-04-19 00:00:00 (Sun)
  60928761600, #    local_end 1931-10-04 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60928758000, #    utc_start 1931-10-03 23:00:00 (Sat)
  60944482800, #      utc_end 1932-04-02 23:00:00 (Sat)
  60928758000, #  local_start 1931-10-03 23:00:00 (Sat)
  60944482800, #    local_end 1932-04-02 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60944482800, #    utc_start 1932-04-02 23:00:00 (Sat)
  60960207600, #      utc_end 1932-10-01 23:00:00 (Sat)
  60944486400, #  local_start 1932-04-03 00:00:00 (Sun)
  60960211200, #    local_end 1932-10-02 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60960207600, #    utc_start 1932-10-01 23:00:00 (Sat)
  61007986800, #      utc_end 1934-04-07 23:00:00 (Sat)
  60960207600, #  local_start 1932-10-01 23:00:00 (Sat)
  61007986800, #    local_end 1934-04-07 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61007986800, #    utc_start 1934-04-07 23:00:00 (Sat)
  61023711600, #      utc_end 1934-10-06 23:00:00 (Sat)
  61007990400, #  local_start 1934-04-08 00:00:00 (Sun)
  61023715200, #    local_end 1934-10-07 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61023711600, #    utc_start 1934-10-06 23:00:00 (Sat)
  61038831600, #      utc_end 1935-03-30 23:00:00 (Sat)
  61023711600, #  local_start 1934-10-06 23:00:00 (Sat)
  61038831600, #    local_end 1935-03-30 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61038831600, #    utc_start 1935-03-30 23:00:00 (Sat)
  61055161200, #      utc_end 1935-10-05 23:00:00 (Sat)
  61038835200, #  local_start 1935-03-31 00:00:00 (Sun)
  61055164800, #    local_end 1935-10-06 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61055161200, #    utc_start 1935-10-05 23:00:00 (Sat)
  61072095600, #      utc_end 1936-04-18 23:00:00 (Sat)
  61055161200, #  local_start 1935-10-05 23:00:00 (Sat)
  61072095600, #    local_end 1936-04-18 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61072095600, #    utc_start 1936-04-18 23:00:00 (Sat)
  61086610800, #      utc_end 1936-10-03 23:00:00 (Sat)
  61072099200, #  local_start 1936-04-19 00:00:00 (Sun)
  61086614400, #    local_end 1936-10-04 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61086610800, #    utc_start 1936-10-03 23:00:00 (Sat)
  61102335600, #      utc_end 1937-04-03 23:00:00 (Sat)
  61086610800, #  local_start 1936-10-03 23:00:00 (Sat)
  61102335600, #    local_end 1937-04-03 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61102335600, #    utc_start 1937-04-03 23:00:00 (Sat)
  61118060400, #      utc_end 1937-10-02 23:00:00 (Sat)
  61102339200, #  local_start 1937-04-04 00:00:00 (Sun)
  61118064000, #    local_end 1937-10-03 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61118060400, #    utc_start 1937-10-02 23:00:00 (Sat)
  61133180400, #      utc_end 1938-03-26 23:00:00 (Sat)
  61118060400, #  local_start 1937-10-02 23:00:00 (Sat)
  61133180400, #    local_end 1938-03-26 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61133180400, #    utc_start 1938-03-26 23:00:00 (Sat)
  61149510000, #      utc_end 1938-10-01 23:00:00 (Sat)
  61133184000, #  local_start 1938-03-27 00:00:00 (Sun)
  61149513600, #    local_end 1938-10-02 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61149510000, #    utc_start 1938-10-01 23:00:00 (Sat)
  61166444400, #      utc_end 1939-04-15 23:00:00 (Sat)
  61149510000, #  local_start 1938-10-01 23:00:00 (Sat)
  61166444400, #    local_end 1939-04-15 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61166444400, #    utc_start 1939-04-15 23:00:00 (Sat)
  61185193200, #      utc_end 1939-11-18 23:00:00 (Sat)
  61166448000, #  local_start 1939-04-16 00:00:00 (Sun)
  61185196800, #    local_end 1939-11-19 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61185193200, #    utc_start 1939-11-18 23:00:00 (Sat)
  61193660400, #      utc_end 1940-02-24 23:00:00 (Sat)
  61185193200, #  local_start 1939-11-18 23:00:00 (Sat)
  61193660400, #    local_end 1940-02-24 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61193660400, #    utc_start 1940-02-24 23:00:00 (Sat)
  61213014000, #      utc_end 1940-10-05 23:00:00 (Sat)
  61193664000, #  local_start 1940-02-25 00:00:00 (Sun)
  61213017600, #    local_end 1940-10-06 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61213014000, #    utc_start 1940-10-05 23:00:00 (Sat)
  61228738800, #      utc_end 1941-04-05 23:00:00 (Sat)
  61213014000, #  local_start 1940-10-05 23:00:00 (Sat)
  61228738800, #    local_end 1941-04-05 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61228738800, #    utc_start 1941-04-05 23:00:00 (Sat)
  61244550000, #      utc_end 1941-10-05 23:00:00 (Sun)
  61228742400, #  local_start 1941-04-06 00:00:00 (Sun)
  61244553600, #    local_end 1941-10-06 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  61244550000, #    utc_start 1941-10-05 23:00:00 (Sun)
  61258374000, #      utc_end 1942-03-14 23:00:00 (Sat)
  61244550000, #  local_start 1941-10-05 23:00:00 (Sun)
  61258374000, #    local_end 1942-03-14 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61258374000, #    utc_start 1942-03-14 23:00:00 (Sat)
  61261999200, #      utc_end 1942-04-25 22:00:00 (Sat)
  61258377600, #  local_start 1942-03-15 00:00:00 (Sun)
  61262002800, #    local_end 1942-04-25 23:00:00 (Sat)
  3600,
  1,
  'WEST',
      ],
      [
  61261999200, #    utc_start 1942-04-25 22:00:00 (Sat)
  61271676000, #      utc_end 1942-08-15 22:00:00 (Sat)
  61262006400, #  local_start 1942-04-26 00:00:00 (Sun)
  61271683200, #    local_end 1942-08-16 00:00:00 (Sun)
  7200,
  1,
  'WEMT',
      ],
      [
  61271676000, #    utc_start 1942-08-15 22:00:00 (Sat)
  61277727600, #      utc_end 1942-10-24 23:00:00 (Sat)
  61271679600, #  local_start 1942-08-15 23:00:00 (Sat)
  61277731200, #    local_end 1942-10-25 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61277727600, #    utc_start 1942-10-24 23:00:00 (Sat)
  61289823600, #      utc_end 1943-03-13 23:00:00 (Sat)
  61277727600, #  local_start 1942-10-24 23:00:00 (Sat)
  61289823600, #    local_end 1943-03-13 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61289823600, #    utc_start 1943-03-13 23:00:00 (Sat)
  61292844000, #      utc_end 1943-04-17 22:00:00 (Sat)
  61289827200, #  local_start 1943-03-14 00:00:00 (Sun)
  61292847600, #    local_end 1943-04-17 23:00:00 (Sat)
  3600,
  1,
  'WEST',
      ],
      [
  61292844000, #    utc_start 1943-04-17 22:00:00 (Sat)
  61304335200, #      utc_end 1943-08-28 22:00:00 (Sat)
  61292851200, #  local_start 1943-04-18 00:00:00 (Sun)
  61304342400, #    local_end 1943-08-29 00:00:00 (Sun)
  7200,
  1,
  'WEMT',
      ],
      [
  61304335200, #    utc_start 1943-08-28 22:00:00 (Sat)
  61309782000, #      utc_end 1943-10-30 23:00:00 (Sat)
  61304338800, #  local_start 1943-08-28 23:00:00 (Sat)
  61309785600, #    local_end 1943-10-31 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61309782000, #    utc_start 1943-10-30 23:00:00 (Sat)
  61321273200, #      utc_end 1944-03-11 23:00:00 (Sat)
  61309782000, #  local_start 1943-10-30 23:00:00 (Sat)
  61321273200, #    local_end 1944-03-11 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61321273200, #    utc_start 1944-03-11 23:00:00 (Sat)
  61324898400, #      utc_end 1944-04-22 22:00:00 (Sat)
  61321276800, #  local_start 1944-03-12 00:00:00 (Sun)
  61324902000, #    local_end 1944-04-22 23:00:00 (Sat)
  3600,
  1,
  'WEST',
      ],
      [
  61324898400, #    utc_start 1944-04-22 22:00:00 (Sat)
  61335784800, #      utc_end 1944-08-26 22:00:00 (Sat)
  61324905600, #  local_start 1944-04-23 00:00:00 (Sun)
  61335792000, #    local_end 1944-08-27 00:00:00 (Sun)
  7200,
  1,
  'WEMT',
      ],
      [
  61335784800, #    utc_start 1944-08-26 22:00:00 (Sat)
  61341231600, #      utc_end 1944-10-28 23:00:00 (Sat)
  61335788400, #  local_start 1944-08-26 23:00:00 (Sat)
  61341235200, #    local_end 1944-10-29 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61341231600, #    utc_start 1944-10-28 23:00:00 (Sat)
  61352722800, #      utc_end 1945-03-10 23:00:00 (Sat)
  61341231600, #  local_start 1944-10-28 23:00:00 (Sat)
  61352722800, #    local_end 1945-03-10 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61352722800, #    utc_start 1945-03-10 23:00:00 (Sat)
  61356348000, #      utc_end 1945-04-21 22:00:00 (Sat)
  61352726400, #  local_start 1945-03-11 00:00:00 (Sun)
  61356351600, #    local_end 1945-04-21 23:00:00 (Sat)
  3600,
  1,
  'WEST',
      ],
      [
  61356348000, #    utc_start 1945-04-21 22:00:00 (Sat)
  61367234400, #      utc_end 1945-08-25 22:00:00 (Sat)
  61356355200, #  local_start 1945-04-22 00:00:00 (Sun)
  61367241600, #    local_end 1945-08-26 00:00:00 (Sun)
  7200,
  1,
  'WEMT',
      ],
      [
  61367234400, #    utc_start 1945-08-25 22:00:00 (Sat)
  61372681200, #      utc_end 1945-10-27 23:00:00 (Sat)
  61367238000, #  local_start 1945-08-25 23:00:00 (Sat)
  61372684800, #    local_end 1945-10-28 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61372681200, #    utc_start 1945-10-27 23:00:00 (Sat)
  61386591600, #      utc_end 1946-04-06 23:00:00 (Sat)
  61372681200, #  local_start 1945-10-27 23:00:00 (Sat)
  61386591600, #    local_end 1946-04-06 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61386591600, #    utc_start 1946-04-06 23:00:00 (Sat)
  61402316400, #      utc_end 1946-10-05 23:00:00 (Sat)
  61386595200, #  local_start 1946-04-07 00:00:00 (Sun)
  61402320000, #    local_end 1946-10-06 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61402316400, #    utc_start 1946-10-05 23:00:00 (Sat)
  61418052000, #      utc_end 1947-04-06 02:00:00 (Sun)
  61402316400, #  local_start 1946-10-05 23:00:00 (Sat)
  61418052000, #    local_end 1947-04-06 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61418052000, #    utc_start 1947-04-06 02:00:00 (Sun)
  61433776800, #      utc_end 1947-10-05 02:00:00 (Sun)
  61418055600, #  local_start 1947-04-06 03:00:00 (Sun)
  61433780400, #    local_end 1947-10-05 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61433776800, #    utc_start 1947-10-05 02:00:00 (Sun)
  61449501600, #      utc_end 1948-04-04 02:00:00 (Sun)
  61433776800, #  local_start 1947-10-05 02:00:00 (Sun)
  61449501600, #    local_end 1948-04-04 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61449501600, #    utc_start 1948-04-04 02:00:00 (Sun)
  61465226400, #      utc_end 1948-10-03 02:00:00 (Sun)
  61449505200, #  local_start 1948-04-04 03:00:00 (Sun)
  61465230000, #    local_end 1948-10-03 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61465226400, #    utc_start 1948-10-03 02:00:00 (Sun)
  61480951200, #      utc_end 1949-04-03 02:00:00 (Sun)
  61465226400, #  local_start 1948-10-03 02:00:00 (Sun)
  61480951200, #    local_end 1949-04-03 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61480951200, #    utc_start 1949-04-03 02:00:00 (Sun)
  61496676000, #      utc_end 1949-10-02 02:00:00 (Sun)
  61480954800, #  local_start 1949-04-03 03:00:00 (Sun)
  61496679600, #    local_end 1949-10-02 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61496676000, #    utc_start 1949-10-02 02:00:00 (Sun)
  61543850400, #      utc_end 1951-04-01 02:00:00 (Sun)
  61496676000, #  local_start 1949-10-02 02:00:00 (Sun)
  61543850400, #    local_end 1951-04-01 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61543850400, #    utc_start 1951-04-01 02:00:00 (Sun)
  61560180000, #      utc_end 1951-10-07 02:00:00 (Sun)
  61543854000, #  local_start 1951-04-01 03:00:00 (Sun)
  61560183600, #    local_end 1951-10-07 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61560180000, #    utc_start 1951-10-07 02:00:00 (Sun)
  61575904800, #      utc_end 1952-04-06 02:00:00 (Sun)
  61560180000, #  local_start 1951-10-07 02:00:00 (Sun)
  61575904800, #    local_end 1952-04-06 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61575904800, #    utc_start 1952-04-06 02:00:00 (Sun)
  61591629600, #      utc_end 1952-10-05 02:00:00 (Sun)
  61575908400, #  local_start 1952-04-06 03:00:00 (Sun)
  61591633200, #    local_end 1952-10-05 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61591629600, #    utc_start 1952-10-05 02:00:00 (Sun)
  61607354400, #      utc_end 1953-04-05 02:00:00 (Sun)
  61591629600, #  local_start 1952-10-05 02:00:00 (Sun)
  61607354400, #    local_end 1953-04-05 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61607354400, #    utc_start 1953-04-05 02:00:00 (Sun)
  61623079200, #      utc_end 1953-10-04 02:00:00 (Sun)
  61607358000, #  local_start 1953-04-05 03:00:00 (Sun)
  61623082800, #    local_end 1953-10-04 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61623079200, #    utc_start 1953-10-04 02:00:00 (Sun)
  61638804000, #      utc_end 1954-04-04 02:00:00 (Sun)
  61623079200, #  local_start 1953-10-04 02:00:00 (Sun)
  61638804000, #    local_end 1954-04-04 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61638804000, #    utc_start 1954-04-04 02:00:00 (Sun)
  61654528800, #      utc_end 1954-10-03 02:00:00 (Sun)
  61638807600, #  local_start 1954-04-04 03:00:00 (Sun)
  61654532400, #    local_end 1954-10-03 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61654528800, #    utc_start 1954-10-03 02:00:00 (Sun)
  61670253600, #      utc_end 1955-04-03 02:00:00 (Sun)
  61654528800, #  local_start 1954-10-03 02:00:00 (Sun)
  61670253600, #    local_end 1955-04-03 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61670253600, #    utc_start 1955-04-03 02:00:00 (Sun)
  61685978400, #      utc_end 1955-10-02 02:00:00 (Sun)
  61670257200, #  local_start 1955-04-03 03:00:00 (Sun)
  61685982000, #    local_end 1955-10-02 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61685978400, #    utc_start 1955-10-02 02:00:00 (Sun)
  61701703200, #      utc_end 1956-04-01 02:00:00 (Sun)
  61685978400, #  local_start 1955-10-02 02:00:00 (Sun)
  61701703200, #    local_end 1956-04-01 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61701703200, #    utc_start 1956-04-01 02:00:00 (Sun)
  61718032800, #      utc_end 1956-10-07 02:00:00 (Sun)
  61701706800, #  local_start 1956-04-01 03:00:00 (Sun)
  61718036400, #    local_end 1956-10-07 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61718032800, #    utc_start 1956-10-07 02:00:00 (Sun)
  61733757600, #      utc_end 1957-04-07 02:00:00 (Sun)
  61718032800, #  local_start 1956-10-07 02:00:00 (Sun)
  61733757600, #    local_end 1957-04-07 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61733757600, #    utc_start 1957-04-07 02:00:00 (Sun)
  61749482400, #      utc_end 1957-10-06 02:00:00 (Sun)
  61733761200, #  local_start 1957-04-07 03:00:00 (Sun)
  61749486000, #    local_end 1957-10-06 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61749482400, #    utc_start 1957-10-06 02:00:00 (Sun)
  61765207200, #      utc_end 1958-04-06 02:00:00 (Sun)
  61749482400, #  local_start 1957-10-06 02:00:00 (Sun)
  61765207200, #    local_end 1958-04-06 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61765207200, #    utc_start 1958-04-06 02:00:00 (Sun)
  61780932000, #      utc_end 1958-10-05 02:00:00 (Sun)
  61765210800, #  local_start 1958-04-06 03:00:00 (Sun)
  61780935600, #    local_end 1958-10-05 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61780932000, #    utc_start 1958-10-05 02:00:00 (Sun)
  61796656800, #      utc_end 1959-04-05 02:00:00 (Sun)
  61780932000, #  local_start 1958-10-05 02:00:00 (Sun)
  61796656800, #    local_end 1959-04-05 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61796656800, #    utc_start 1959-04-05 02:00:00 (Sun)
  61812381600, #      utc_end 1959-10-04 02:00:00 (Sun)
  61796660400, #  local_start 1959-04-05 03:00:00 (Sun)
  61812385200, #    local_end 1959-10-04 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61812381600, #    utc_start 1959-10-04 02:00:00 (Sun)
  61828106400, #      utc_end 1960-04-03 02:00:00 (Sun)
  61812381600, #  local_start 1959-10-04 02:00:00 (Sun)
  61828106400, #    local_end 1960-04-03 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61828106400, #    utc_start 1960-04-03 02:00:00 (Sun)
  61843831200, #      utc_end 1960-10-02 02:00:00 (Sun)
  61828110000, #  local_start 1960-04-03 03:00:00 (Sun)
  61843834800, #    local_end 1960-10-02 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61843831200, #    utc_start 1960-10-02 02:00:00 (Sun)
  61859556000, #      utc_end 1961-04-02 02:00:00 (Sun)
  61843831200, #  local_start 1960-10-02 02:00:00 (Sun)
  61859556000, #    local_end 1961-04-02 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61859556000, #    utc_start 1961-04-02 02:00:00 (Sun)
  61875280800, #      utc_end 1961-10-01 02:00:00 (Sun)
  61859559600, #  local_start 1961-04-02 03:00:00 (Sun)
  61875284400, #    local_end 1961-10-01 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61875280800, #    utc_start 1961-10-01 02:00:00 (Sun)
  61891005600, #      utc_end 1962-04-01 02:00:00 (Sun)
  61875280800, #  local_start 1961-10-01 02:00:00 (Sun)
  61891005600, #    local_end 1962-04-01 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61891005600, #    utc_start 1962-04-01 02:00:00 (Sun)
  61907335200, #      utc_end 1962-10-07 02:00:00 (Sun)
  61891009200, #  local_start 1962-04-01 03:00:00 (Sun)
  61907338800, #    local_end 1962-10-07 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61907335200, #    utc_start 1962-10-07 02:00:00 (Sun)
  61923060000, #      utc_end 1963-04-07 02:00:00 (Sun)
  61907335200, #  local_start 1962-10-07 02:00:00 (Sun)
  61923060000, #    local_end 1963-04-07 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61923060000, #    utc_start 1963-04-07 02:00:00 (Sun)
  61938784800, #      utc_end 1963-10-06 02:00:00 (Sun)
  61923063600, #  local_start 1963-04-07 03:00:00 (Sun)
  61938788400, #    local_end 1963-10-06 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61938784800, #    utc_start 1963-10-06 02:00:00 (Sun)
  61954509600, #      utc_end 1964-04-05 02:00:00 (Sun)
  61938784800, #  local_start 1963-10-06 02:00:00 (Sun)
  61954509600, #    local_end 1964-04-05 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61954509600, #    utc_start 1964-04-05 02:00:00 (Sun)
  61970234400, #      utc_end 1964-10-04 02:00:00 (Sun)
  61954513200, #  local_start 1964-04-05 03:00:00 (Sun)
  61970238000, #    local_end 1964-10-04 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61970234400, #    utc_start 1964-10-04 02:00:00 (Sun)
  61985959200, #      utc_end 1965-04-04 02:00:00 (Sun)
  61970234400, #  local_start 1964-10-04 02:00:00 (Sun)
  61985959200, #    local_end 1965-04-04 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61985959200, #    utc_start 1965-04-04 02:00:00 (Sun)
  62001684000, #      utc_end 1965-10-03 02:00:00 (Sun)
  61985962800, #  local_start 1965-04-04 03:00:00 (Sun)
  62001687600, #    local_end 1965-10-03 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62001684000, #    utc_start 1965-10-03 02:00:00 (Sun)
  62017408800, #      utc_end 1966-04-03 02:00:00 (Sun)
  62001684000, #  local_start 1965-10-03 02:00:00 (Sun)
  62017408800, #    local_end 1966-04-03 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62017408800, #    utc_start 1966-04-03 02:00:00 (Sun)
  62348227200, #      utc_end 1976-09-26 00:00:00 (Sun)
  62017412400, #  local_start 1966-04-03 03:00:00 (Sun)
  62348230800, #    local_end 1976-09-26 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62348227200, #    utc_start 1976-09-26 00:00:00 (Sun)
  62363952000, #      utc_end 1977-03-27 00:00:00 (Sun)
  62348227200, #  local_start 1976-09-26 00:00:00 (Sun)
  62363952000, #    local_end 1977-03-27 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62363952000, #    utc_start 1977-03-27 00:00:00 (Sun)
  62379676800, #      utc_end 1977-09-25 00:00:00 (Sun)
  62363955600, #  local_start 1977-03-27 01:00:00 (Sun)
  62379680400, #    local_end 1977-09-25 01:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62379676800, #    utc_start 1977-09-25 00:00:00 (Sun)
  62396006400, #      utc_end 1978-04-02 00:00:00 (Sun)
  62379676800, #  local_start 1977-09-25 00:00:00 (Sun)
  62396006400, #    local_end 1978-04-02 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62396006400, #    utc_start 1978-04-02 00:00:00 (Sun)
  62411731200, #      utc_end 1978-10-01 00:00:00 (Sun)
  62396010000, #  local_start 1978-04-02 01:00:00 (Sun)
  62411734800, #    local_end 1978-10-01 01:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62411731200, #    utc_start 1978-10-01 00:00:00 (Sun)
  62427456000, #      utc_end 1979-04-01 00:00:00 (Sun)
  62411731200, #  local_start 1978-10-01 00:00:00 (Sun)
  62427456000, #    local_end 1979-04-01 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62427456000, #    utc_start 1979-04-01 00:00:00 (Sun)
  62443184400, #      utc_end 1979-09-30 01:00:00 (Sun)
  62427459600, #  local_start 1979-04-01 01:00:00 (Sun)
  62443188000, #    local_end 1979-09-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62443184400, #    utc_start 1979-09-30 01:00:00 (Sun)
  62458905600, #      utc_end 1980-03-30 00:00:00 (Sun)
  62443184400, #  local_start 1979-09-30 01:00:00 (Sun)
  62458905600, #    local_end 1980-03-30 00:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62458905600, #    utc_start 1980-03-30 00:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62458909200, #  local_start 1980-03-30 01:00:00 (Sun)
  62474637600, #    local_end 1980-09-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474634000, #  local_start 1980-09-28 01:00:00 (Sun)
  62490358800, #    local_end 1981-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490362400, #  local_start 1981-03-29 02:00:00 (Sun)
  62506087200, #    local_end 1981-09-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506083600, #  local_start 1981-09-27 01:00:00 (Sun)
  62521808400, #    local_end 1982-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521812000, #  local_start 1982-03-28 02:00:00 (Sun)
  62537536800, #    local_end 1982-09-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553261600, #      utc_end 1983-03-27 02:00:00 (Sun)
  62537533200, #  local_start 1982-09-26 01:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62553261600, #    utc_start 1983-03-27 02:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568986400, #    local_end 1983-09-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568982800, #  local_start 1983-09-25 01:00:00 (Sun)
  62584707600, #    local_end 1984-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584711200, #  local_start 1984-03-25 02:00:00 (Sun)
  62601040800, #    local_end 1984-09-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601037200, #  local_start 1984-09-30 01:00:00 (Sun)
  62616762000, #    local_end 1985-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616765600, #  local_start 1985-03-31 02:00:00 (Sun)
  62632490400, #    local_end 1985-09-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632486800, #  local_start 1985-09-29 01:00:00 (Sun)
  62648211600, #    local_end 1986-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648215200, #  local_start 1986-03-30 02:00:00 (Sun)
  62663940000, #    local_end 1986-09-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663936400, #  local_start 1986-09-28 01:00:00 (Sun)
  62679661200, #    local_end 1987-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679664800, #  local_start 1987-03-29 02:00:00 (Sun)
  62695389600, #    local_end 1987-09-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695386000, #  local_start 1987-09-27 01:00:00 (Sun)
  62711110800, #    local_end 1988-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711114400, #  local_start 1988-03-27 02:00:00 (Sun)
  62726839200, #    local_end 1988-09-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726835600, #  local_start 1988-09-25 01:00:00 (Sun)
  62742560400, #    local_end 1989-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62758288800, #    local_end 1989-09-24 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758285200, #  local_start 1989-09-24 01:00:00 (Sun)
  62774010000, #    local_end 1990-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774013600, #  local_start 1990-03-25 02:00:00 (Sun)
  62790343200, #    local_end 1990-09-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790339600, #  local_start 1990-09-30 01:00:00 (Sun)
  62806064400, #    local_end 1991-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821792800, #    local_end 1991-09-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821789200, #  local_start 1991-09-29 01:00:00 (Sun)
  62837514000, #    local_end 1992-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62853242400, #    local_end 1992-09-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963920800, #  local_start 1996-03-31 02:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995366800, #    local_end 1997-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995370400, #  local_start 1997-03-30 02:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63026816400, #    local_end 1998-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026820000, #  local_start 1998-03-29 02:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058266000, #    local_end 1999-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058269600, #  local_start 1999-03-28 02:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63089715600, #    local_end 2000-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089719200, #  local_start 2000-03-26 02:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121165200, #    local_end 2001-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121168800, #  local_start 2001-03-25 02:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153219600, #    local_end 2002-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153223200, #  local_start 2002-03-31 02:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63184669200, #    local_end 2003-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184672800, #  local_start 2003-03-30 02:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216118800, #    local_end 2004-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216122400, #  local_start 2004-03-28 02:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63247568400, #    local_end 2005-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247572000, #  local_start 2005-03-27 02:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279018000, #    local_end 2006-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279021600, #  local_start 2006-03-26 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63310467600, #    local_end 2007-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310471200, #  local_start 2007-03-25 02:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63342522000, #    local_end 2008-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342525600, #  local_start 2008-03-30 02:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63373971600, #    local_end 2009-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373975200, #  local_start 2009-03-29 02:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63405421200, #    local_end 2010-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405424800, #  local_start 2010-03-28 02:00:00 (Sun)
  63424173600, #    local_end 2010-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424170000, #  local_start 2010-10-31 01:00:00 (Sun)
  63436870800, #    local_end 2011-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436874400, #  local_start 2011-03-27 02:00:00 (Sun)
  63455623200, #    local_end 2011-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455619600, #  local_start 2011-10-30 01:00:00 (Sun)
  63468320400, #    local_end 2012-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468324000, #  local_start 2012-03-25 02:00:00 (Sun)
  63487072800, #    local_end 2012-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487069200, #  local_start 2012-10-28 01:00:00 (Sun)
  63500374800, #    local_end 2013-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500378400, #  local_start 2013-03-31 02:00:00 (Sun)
  63518522400, #    local_end 2013-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518518800, #  local_start 2013-10-27 01:00:00 (Sun)
  63531824400, #    local_end 2014-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531828000, #  local_start 2014-03-30 02:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63563274000, #    local_end 2015-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563277600, #  local_start 2015-03-29 02:00:00 (Sun)
  63581421600, #    local_end 2015-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581418000, #  local_start 2015-10-25 01:00:00 (Sun)
  63594723600, #    local_end 2016-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594727200, #  local_start 2016-03-27 02:00:00 (Sun)
  63613476000, #    local_end 2016-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613472400, #  local_start 2016-10-30 01:00:00 (Sun)
  63626173200, #    local_end 2017-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626176800, #  local_start 2017-03-26 02:00:00 (Sun)
  63644925600, #    local_end 2017-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644922000, #  local_start 2017-10-29 01:00:00 (Sun)
  63657622800, #    local_end 2018-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657626400, #  local_start 2018-03-25 02:00:00 (Sun)
  63676375200, #    local_end 2018-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676371600, #  local_start 2018-10-28 01:00:00 (Sun)
  63689677200, #    local_end 2019-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689680800, #  local_start 2019-03-31 02:00:00 (Sun)
  63707824800, #    local_end 2019-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707821200, #  local_start 2019-10-27 01:00:00 (Sun)
  63721126800, #    local_end 2020-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721130400, #  local_start 2020-03-29 02:00:00 (Sun)
  63739274400, #    local_end 2020-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739270800, #  local_start 2020-10-25 01:00:00 (Sun)
  63752576400, #    local_end 2021-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752580000, #  local_start 2021-03-28 02:00:00 (Sun)
  63771328800, #    local_end 2021-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771325200, #  local_start 2021-10-31 01:00:00 (Sun)
  63784026000, #    local_end 2022-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784029600, #  local_start 2022-03-27 02:00:00 (Sun)
  63802778400, #    local_end 2022-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802774800, #  local_start 2022-10-30 01:00:00 (Sun)
  63815475600, #    local_end 2023-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815479200, #  local_start 2023-03-26 02:00:00 (Sun)
  63834228000, #    local_end 2023-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834224400, #  local_start 2023-10-29 01:00:00 (Sun)
  63847530000, #    local_end 2024-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847533600, #  local_start 2024-03-31 02:00:00 (Sun)
  63865677600, #    local_end 2024-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865674000, #  local_start 2024-10-27 01:00:00 (Sun)
  63878979600, #    local_end 2025-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878983200, #  local_start 2025-03-30 02:00:00 (Sun)
  63897127200, #    local_end 2025-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897123600, #  local_start 2025-10-26 01:00:00 (Sun)
  63910429200, #    local_end 2026-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910432800, #  local_start 2026-03-29 02:00:00 (Sun)
  63928576800, #    local_end 2026-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928573200, #  local_start 2026-10-25 01:00:00 (Sun)
  63941878800, #    local_end 2027-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941882400, #  local_start 2027-03-28 02:00:00 (Sun)
  63960631200, #    local_end 2027-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {103}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 0 }
  
  my $last_observance = bless( {
    'format' => 'WE%sT',
    'gmtoff' => '0:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 728749,
      'local_rd_secs' => 7200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 728749,
      'utc_rd_secs' => 7200,
      'utc_year' => 1997
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 0,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 728749,
      'local_rd_secs' => 3600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 728749,
      'utc_rd_secs' => 3600,
      'utc_year' => 1997
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_LISBON

    $main::fatpacked{"DateTime/TimeZone/Europe/London.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_LONDON';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::London;
  $DateTime::TimeZone::Europe::London::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::London::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  58283020875, #      utc_end 1847-12-01 00:01:15 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  58283020800, #    local_end 1847-12-01 00:00:00 (Wed)
  -75,
  0,
  'LMT',
      ],
      [
  58283020875, #    utc_start 1847-12-01 00:01:15 (Wed)
  60443719200, #      utc_end 1916-05-21 02:00:00 (Sun)
  58283020875, #  local_start 1847-12-01 00:01:15 (Wed)
  60443719200, #    local_end 1916-05-21 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60443719200, #    utc_start 1916-05-21 02:00:00 (Sun)
  60455210400, #      utc_end 1916-10-01 02:00:00 (Sun)
  60443722800, #  local_start 1916-05-21 03:00:00 (Sun)
  60455214000, #    local_end 1916-10-01 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60455210400, #    utc_start 1916-10-01 02:00:00 (Sun)
  60471540000, #      utc_end 1917-04-08 02:00:00 (Sun)
  60455210400, #  local_start 1916-10-01 02:00:00 (Sun)
  60471540000, #    local_end 1917-04-08 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60471540000, #    utc_start 1917-04-08 02:00:00 (Sun)
  60485536800, #      utc_end 1917-09-17 02:00:00 (Mon)
  60471543600, #  local_start 1917-04-08 03:00:00 (Sun)
  60485540400, #    local_end 1917-09-17 03:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  60485536800, #    utc_start 1917-09-17 02:00:00 (Mon)
  60501780000, #      utc_end 1918-03-24 02:00:00 (Sun)
  60485536800, #  local_start 1917-09-17 02:00:00 (Mon)
  60501780000, #    local_end 1918-03-24 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60501780000, #    utc_start 1918-03-24 02:00:00 (Sun)
  60518196000, #      utc_end 1918-09-30 02:00:00 (Mon)
  60501783600, #  local_start 1918-03-24 03:00:00 (Sun)
  60518199600, #    local_end 1918-09-30 03:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  60518196000, #    utc_start 1918-09-30 02:00:00 (Mon)
  60533834400, #      utc_end 1919-03-30 02:00:00 (Sun)
  60518196000, #  local_start 1918-09-30 02:00:00 (Mon)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60533834400, #    utc_start 1919-03-30 02:00:00 (Sun)
  60549645600, #      utc_end 1919-09-29 02:00:00 (Mon)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60549649200, #    local_end 1919-09-29 03:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  60549645600, #    utc_start 1919-09-29 02:00:00 (Mon)
  60565284000, #      utc_end 1920-03-28 02:00:00 (Sun)
  60549645600, #  local_start 1919-09-29 02:00:00 (Mon)
  60565284000, #    local_end 1920-03-28 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60565284000, #    utc_start 1920-03-28 02:00:00 (Sun)
  60583514400, #      utc_end 1920-10-25 02:00:00 (Mon)
  60565287600, #  local_start 1920-03-28 03:00:00 (Sun)
  60583518000, #    local_end 1920-10-25 03:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  60583514400, #    utc_start 1920-10-25 02:00:00 (Mon)
  60597338400, #      utc_end 1921-04-03 02:00:00 (Sun)
  60583514400, #  local_start 1920-10-25 02:00:00 (Mon)
  60597338400, #    local_end 1921-04-03 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60597338400, #    utc_start 1921-04-03 02:00:00 (Sun)
  60613149600, #      utc_end 1921-10-03 02:00:00 (Mon)
  60597342000, #  local_start 1921-04-03 03:00:00 (Sun)
  60613153200, #    local_end 1921-10-03 03:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  60613149600, #    utc_start 1921-10-03 02:00:00 (Mon)
  60628183200, #      utc_end 1922-03-26 02:00:00 (Sun)
  60613149600, #  local_start 1921-10-03 02:00:00 (Mon)
  60628183200, #    local_end 1922-03-26 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60628183200, #    utc_start 1922-03-26 02:00:00 (Sun)
  60645117600, #      utc_end 1922-10-08 02:00:00 (Sun)
  60628186800, #  local_start 1922-03-26 03:00:00 (Sun)
  60645121200, #    local_end 1922-10-08 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60645117600, #    utc_start 1922-10-08 02:00:00 (Sun)
  60662052000, #      utc_end 1923-04-22 02:00:00 (Sun)
  60645117600, #  local_start 1922-10-08 02:00:00 (Sun)
  60662052000, #    local_end 1923-04-22 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60662052000, #    utc_start 1923-04-22 02:00:00 (Sun)
  60674752800, #      utc_end 1923-09-16 02:00:00 (Sun)
  60662055600, #  local_start 1923-04-22 03:00:00 (Sun)
  60674756400, #    local_end 1923-09-16 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60674752800, #    utc_start 1923-09-16 02:00:00 (Sun)
  60692896800, #      utc_end 1924-04-13 02:00:00 (Sun)
  60674752800, #  local_start 1923-09-16 02:00:00 (Sun)
  60692896800, #    local_end 1924-04-13 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60692896800, #    utc_start 1924-04-13 02:00:00 (Sun)
  60706807200, #      utc_end 1924-09-21 02:00:00 (Sun)
  60692900400, #  local_start 1924-04-13 03:00:00 (Sun)
  60706810800, #    local_end 1924-09-21 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60706807200, #    utc_start 1924-09-21 02:00:00 (Sun)
  60724951200, #      utc_end 1925-04-19 02:00:00 (Sun)
  60706807200, #  local_start 1924-09-21 02:00:00 (Sun)
  60724951200, #    local_end 1925-04-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60724951200, #    utc_start 1925-04-19 02:00:00 (Sun)
  60739466400, #      utc_end 1925-10-04 02:00:00 (Sun)
  60724954800, #  local_start 1925-04-19 03:00:00 (Sun)
  60739470000, #    local_end 1925-10-04 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60739466400, #    utc_start 1925-10-04 02:00:00 (Sun)
  60756400800, #      utc_end 1926-04-18 02:00:00 (Sun)
  60739466400, #  local_start 1925-10-04 02:00:00 (Sun)
  60756400800, #    local_end 1926-04-18 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60756400800, #    utc_start 1926-04-18 02:00:00 (Sun)
  60770916000, #      utc_end 1926-10-03 02:00:00 (Sun)
  60756404400, #  local_start 1926-04-18 03:00:00 (Sun)
  60770919600, #    local_end 1926-10-03 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60770916000, #    utc_start 1926-10-03 02:00:00 (Sun)
  60787245600, #      utc_end 1927-04-10 02:00:00 (Sun)
  60770916000, #  local_start 1926-10-03 02:00:00 (Sun)
  60787245600, #    local_end 1927-04-10 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60787245600, #    utc_start 1927-04-10 02:00:00 (Sun)
  60802365600, #      utc_end 1927-10-02 02:00:00 (Sun)
  60787249200, #  local_start 1927-04-10 03:00:00 (Sun)
  60802369200, #    local_end 1927-10-02 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60802365600, #    utc_start 1927-10-02 02:00:00 (Sun)
  60819904800, #      utc_end 1928-04-22 02:00:00 (Sun)
  60802365600, #  local_start 1927-10-02 02:00:00 (Sun)
  60819904800, #    local_end 1928-04-22 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60819904800, #    utc_start 1928-04-22 02:00:00 (Sun)
  60834420000, #      utc_end 1928-10-07 02:00:00 (Sun)
  60819908400, #  local_start 1928-04-22 03:00:00 (Sun)
  60834423600, #    local_end 1928-10-07 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60834420000, #    utc_start 1928-10-07 02:00:00 (Sun)
  60851354400, #      utc_end 1929-04-21 02:00:00 (Sun)
  60834420000, #  local_start 1928-10-07 02:00:00 (Sun)
  60851354400, #    local_end 1929-04-21 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60851354400, #    utc_start 1929-04-21 02:00:00 (Sun)
  60865869600, #      utc_end 1929-10-06 02:00:00 (Sun)
  60851358000, #  local_start 1929-04-21 03:00:00 (Sun)
  60865873200, #    local_end 1929-10-06 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60865869600, #    utc_start 1929-10-06 02:00:00 (Sun)
  60882199200, #      utc_end 1930-04-13 02:00:00 (Sun)
  60865869600, #  local_start 1929-10-06 02:00:00 (Sun)
  60882199200, #    local_end 1930-04-13 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60882199200, #    utc_start 1930-04-13 02:00:00 (Sun)
  60897319200, #      utc_end 1930-10-05 02:00:00 (Sun)
  60882202800, #  local_start 1930-04-13 03:00:00 (Sun)
  60897322800, #    local_end 1930-10-05 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60897319200, #    utc_start 1930-10-05 02:00:00 (Sun)
  60914253600, #      utc_end 1931-04-19 02:00:00 (Sun)
  60897319200, #  local_start 1930-10-05 02:00:00 (Sun)
  60914253600, #    local_end 1931-04-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60914253600, #    utc_start 1931-04-19 02:00:00 (Sun)
  60928768800, #      utc_end 1931-10-04 02:00:00 (Sun)
  60914257200, #  local_start 1931-04-19 03:00:00 (Sun)
  60928772400, #    local_end 1931-10-04 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60928768800, #    utc_start 1931-10-04 02:00:00 (Sun)
  60945703200, #      utc_end 1932-04-17 02:00:00 (Sun)
  60928768800, #  local_start 1931-10-04 02:00:00 (Sun)
  60945703200, #    local_end 1932-04-17 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60945703200, #    utc_start 1932-04-17 02:00:00 (Sun)
  60960218400, #      utc_end 1932-10-02 02:00:00 (Sun)
  60945706800, #  local_start 1932-04-17 03:00:00 (Sun)
  60960222000, #    local_end 1932-10-02 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60960218400, #    utc_start 1932-10-02 02:00:00 (Sun)
  60976548000, #      utc_end 1933-04-09 02:00:00 (Sun)
  60960218400, #  local_start 1932-10-02 02:00:00 (Sun)
  60976548000, #    local_end 1933-04-09 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  60976548000, #    utc_start 1933-04-09 02:00:00 (Sun)
  60992272800, #      utc_end 1933-10-08 02:00:00 (Sun)
  60976551600, #  local_start 1933-04-09 03:00:00 (Sun)
  60992276400, #    local_end 1933-10-08 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  60992272800, #    utc_start 1933-10-08 02:00:00 (Sun)
  61009207200, #      utc_end 1934-04-22 02:00:00 (Sun)
  60992272800, #  local_start 1933-10-08 02:00:00 (Sun)
  61009207200, #    local_end 1934-04-22 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61009207200, #    utc_start 1934-04-22 02:00:00 (Sun)
  61023722400, #      utc_end 1934-10-07 02:00:00 (Sun)
  61009210800, #  local_start 1934-04-22 03:00:00 (Sun)
  61023726000, #    local_end 1934-10-07 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61023722400, #    utc_start 1934-10-07 02:00:00 (Sun)
  61040052000, #      utc_end 1935-04-14 02:00:00 (Sun)
  61023722400, #  local_start 1934-10-07 02:00:00 (Sun)
  61040052000, #    local_end 1935-04-14 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61040052000, #    utc_start 1935-04-14 02:00:00 (Sun)
  61055172000, #      utc_end 1935-10-06 02:00:00 (Sun)
  61040055600, #  local_start 1935-04-14 03:00:00 (Sun)
  61055175600, #    local_end 1935-10-06 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61055172000, #    utc_start 1935-10-06 02:00:00 (Sun)
  61072106400, #      utc_end 1936-04-19 02:00:00 (Sun)
  61055172000, #  local_start 1935-10-06 02:00:00 (Sun)
  61072106400, #    local_end 1936-04-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61072106400, #    utc_start 1936-04-19 02:00:00 (Sun)
  61086621600, #      utc_end 1936-10-04 02:00:00 (Sun)
  61072110000, #  local_start 1936-04-19 03:00:00 (Sun)
  61086625200, #    local_end 1936-10-04 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61086621600, #    utc_start 1936-10-04 02:00:00 (Sun)
  61103556000, #      utc_end 1937-04-18 02:00:00 (Sun)
  61086621600, #  local_start 1936-10-04 02:00:00 (Sun)
  61103556000, #    local_end 1937-04-18 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61103556000, #    utc_start 1937-04-18 02:00:00 (Sun)
  61118071200, #      utc_end 1937-10-03 02:00:00 (Sun)
  61103559600, #  local_start 1937-04-18 03:00:00 (Sun)
  61118074800, #    local_end 1937-10-03 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61118071200, #    utc_start 1937-10-03 02:00:00 (Sun)
  61134400800, #      utc_end 1938-04-10 02:00:00 (Sun)
  61118071200, #  local_start 1937-10-03 02:00:00 (Sun)
  61134400800, #    local_end 1938-04-10 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61134400800, #    utc_start 1938-04-10 02:00:00 (Sun)
  61149520800, #      utc_end 1938-10-02 02:00:00 (Sun)
  61134404400, #  local_start 1938-04-10 03:00:00 (Sun)
  61149524400, #    local_end 1938-10-02 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61149520800, #    utc_start 1938-10-02 02:00:00 (Sun)
  61166455200, #      utc_end 1939-04-16 02:00:00 (Sun)
  61149520800, #  local_start 1938-10-02 02:00:00 (Sun)
  61166455200, #    local_end 1939-04-16 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61166455200, #    utc_start 1939-04-16 02:00:00 (Sun)
  61185204000, #      utc_end 1939-11-19 02:00:00 (Sun)
  61166458800, #  local_start 1939-04-16 03:00:00 (Sun)
  61185207600, #    local_end 1939-11-19 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61185204000, #    utc_start 1939-11-19 02:00:00 (Sun)
  61193671200, #      utc_end 1940-02-25 02:00:00 (Sun)
  61185204000, #  local_start 1939-11-19 02:00:00 (Sun)
  61193671200, #    local_end 1940-02-25 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61193671200, #    utc_start 1940-02-25 02:00:00 (Sun)
  61231165200, #      utc_end 1941-05-04 01:00:00 (Sun)
  61193674800, #  local_start 1940-02-25 03:00:00 (Sun)
  61231168800, #    local_end 1941-05-04 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61231165200, #    utc_start 1941-05-04 01:00:00 (Sun)
  61239632400, #      utc_end 1941-08-10 01:00:00 (Sun)
  61231172400, #  local_start 1941-05-04 03:00:00 (Sun)
  61239639600, #    local_end 1941-08-10 03:00:00 (Sun)
  7200,
  1,
  'BDST',
      ],
      [
  61239632400, #    utc_start 1941-08-10 01:00:00 (Sun)
  61260195600, #      utc_end 1942-04-05 01:00:00 (Sun)
  61239636000, #  local_start 1941-08-10 02:00:00 (Sun)
  61260199200, #    local_end 1942-04-05 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61260195600, #    utc_start 1942-04-05 01:00:00 (Sun)
  61271082000, #      utc_end 1942-08-09 01:00:00 (Sun)
  61260202800, #  local_start 1942-04-05 03:00:00 (Sun)
  61271089200, #    local_end 1942-08-09 03:00:00 (Sun)
  7200,
  1,
  'BDST',
      ],
      [
  61271082000, #    utc_start 1942-08-09 01:00:00 (Sun)
  61291645200, #      utc_end 1943-04-04 01:00:00 (Sun)
  61271085600, #  local_start 1942-08-09 02:00:00 (Sun)
  61291648800, #    local_end 1943-04-04 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61291645200, #    utc_start 1943-04-04 01:00:00 (Sun)
  61303136400, #      utc_end 1943-08-15 01:00:00 (Sun)
  61291652400, #  local_start 1943-04-04 03:00:00 (Sun)
  61303143600, #    local_end 1943-08-15 03:00:00 (Sun)
  7200,
  1,
  'BDST',
      ],
      [
  61303136400, #    utc_start 1943-08-15 01:00:00 (Sun)
  61323094800, #      utc_end 1944-04-02 01:00:00 (Sun)
  61303140000, #  local_start 1943-08-15 02:00:00 (Sun)
  61323098400, #    local_end 1944-04-02 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61323094800, #    utc_start 1944-04-02 01:00:00 (Sun)
  61337610000, #      utc_end 1944-09-17 01:00:00 (Sun)
  61323102000, #  local_start 1944-04-02 03:00:00 (Sun)
  61337617200, #    local_end 1944-09-17 03:00:00 (Sun)
  7200,
  1,
  'BDST',
      ],
      [
  61337610000, #    utc_start 1944-09-17 01:00:00 (Sun)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61337613600, #  local_start 1944-09-17 02:00:00 (Sun)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  1,
  'BST',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61363616400, #      utc_end 1945-07-15 01:00:00 (Sun)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61363623600, #    local_end 1945-07-15 03:00:00 (Sun)
  7200,
  1,
  'BDST',
      ],
      [
  61363616400, #    utc_start 1945-07-15 01:00:00 (Sun)
  61370877600, #      utc_end 1945-10-07 02:00:00 (Sun)
  61363620000, #  local_start 1945-07-15 02:00:00 (Sun)
  61370881200, #    local_end 1945-10-07 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61370877600, #    utc_start 1945-10-07 02:00:00 (Sun)
  61387207200, #      utc_end 1946-04-14 02:00:00 (Sun)
  61370877600, #  local_start 1945-10-07 02:00:00 (Sun)
  61387207200, #    local_end 1946-04-14 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61387207200, #    utc_start 1946-04-14 02:00:00 (Sun)
  61402327200, #      utc_end 1946-10-06 02:00:00 (Sun)
  61387210800, #  local_start 1946-04-14 03:00:00 (Sun)
  61402330800, #    local_end 1946-10-06 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61402327200, #    utc_start 1946-10-06 02:00:00 (Sun)
  61416237600, #      utc_end 1947-03-16 02:00:00 (Sun)
  61402327200, #  local_start 1946-10-06 02:00:00 (Sun)
  61416237600, #    local_end 1947-03-16 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61416237600, #    utc_start 1947-03-16 02:00:00 (Sun)
  61418653200, #      utc_end 1947-04-13 01:00:00 (Sun)
  61416241200, #  local_start 1947-03-16 03:00:00 (Sun)
  61418656800, #    local_end 1947-04-13 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61418653200, #    utc_start 1947-04-13 01:00:00 (Sun)
  61428934800, #      utc_end 1947-08-10 01:00:00 (Sun)
  61418660400, #  local_start 1947-04-13 03:00:00 (Sun)
  61428942000, #    local_end 1947-08-10 03:00:00 (Sun)
  7200,
  1,
  'BDST',
      ],
      [
  61428934800, #    utc_start 1947-08-10 01:00:00 (Sun)
  61436196000, #      utc_end 1947-11-02 02:00:00 (Sun)
  61428938400, #  local_start 1947-08-10 02:00:00 (Sun)
  61436199600, #    local_end 1947-11-02 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61436196000, #    utc_start 1947-11-02 02:00:00 (Sun)
  61447687200, #      utc_end 1948-03-14 02:00:00 (Sun)
  61436196000, #  local_start 1947-11-02 02:00:00 (Sun)
  61447687200, #    local_end 1948-03-14 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61447687200, #    utc_start 1948-03-14 02:00:00 (Sun)
  61467645600, #      utc_end 1948-10-31 02:00:00 (Sun)
  61447690800, #  local_start 1948-03-14 03:00:00 (Sun)
  61467649200, #    local_end 1948-10-31 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61467645600, #    utc_start 1948-10-31 02:00:00 (Sun)
  61480951200, #      utc_end 1949-04-03 02:00:00 (Sun)
  61467645600, #  local_start 1948-10-31 02:00:00 (Sun)
  61480951200, #    local_end 1949-04-03 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61480951200, #    utc_start 1949-04-03 02:00:00 (Sun)
  61499095200, #      utc_end 1949-10-30 02:00:00 (Sun)
  61480954800, #  local_start 1949-04-03 03:00:00 (Sun)
  61499098800, #    local_end 1949-10-30 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61499095200, #    utc_start 1949-10-30 02:00:00 (Sun)
  61513610400, #      utc_end 1950-04-16 02:00:00 (Sun)
  61499095200, #  local_start 1949-10-30 02:00:00 (Sun)
  61513610400, #    local_end 1950-04-16 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61513610400, #    utc_start 1950-04-16 02:00:00 (Sun)
  61529940000, #      utc_end 1950-10-22 02:00:00 (Sun)
  61513614000, #  local_start 1950-04-16 03:00:00 (Sun)
  61529943600, #    local_end 1950-10-22 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61529940000, #    utc_start 1950-10-22 02:00:00 (Sun)
  61545060000, #      utc_end 1951-04-15 02:00:00 (Sun)
  61529940000, #  local_start 1950-10-22 02:00:00 (Sun)
  61545060000, #    local_end 1951-04-15 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61545060000, #    utc_start 1951-04-15 02:00:00 (Sun)
  61561389600, #      utc_end 1951-10-21 02:00:00 (Sun)
  61545063600, #  local_start 1951-04-15 03:00:00 (Sun)
  61561393200, #    local_end 1951-10-21 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61561389600, #    utc_start 1951-10-21 02:00:00 (Sun)
  61577114400, #      utc_end 1952-04-20 02:00:00 (Sun)
  61561389600, #  local_start 1951-10-21 02:00:00 (Sun)
  61577114400, #    local_end 1952-04-20 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61577114400, #    utc_start 1952-04-20 02:00:00 (Sun)
  61593444000, #      utc_end 1952-10-26 02:00:00 (Sun)
  61577118000, #  local_start 1952-04-20 03:00:00 (Sun)
  61593447600, #    local_end 1952-10-26 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61593444000, #    utc_start 1952-10-26 02:00:00 (Sun)
  61608564000, #      utc_end 1953-04-19 02:00:00 (Sun)
  61593444000, #  local_start 1952-10-26 02:00:00 (Sun)
  61608564000, #    local_end 1953-04-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61608564000, #    utc_start 1953-04-19 02:00:00 (Sun)
  61623079200, #      utc_end 1953-10-04 02:00:00 (Sun)
  61608567600, #  local_start 1953-04-19 03:00:00 (Sun)
  61623082800, #    local_end 1953-10-04 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61623079200, #    utc_start 1953-10-04 02:00:00 (Sun)
  61639408800, #      utc_end 1954-04-11 02:00:00 (Sun)
  61623079200, #  local_start 1953-10-04 02:00:00 (Sun)
  61639408800, #    local_end 1954-04-11 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61639408800, #    utc_start 1954-04-11 02:00:00 (Sun)
  61654528800, #      utc_end 1954-10-03 02:00:00 (Sun)
  61639412400, #  local_start 1954-04-11 03:00:00 (Sun)
  61654532400, #    local_end 1954-10-03 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61654528800, #    utc_start 1954-10-03 02:00:00 (Sun)
  61671463200, #      utc_end 1955-04-17 02:00:00 (Sun)
  61654528800, #  local_start 1954-10-03 02:00:00 (Sun)
  61671463200, #    local_end 1955-04-17 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61671463200, #    utc_start 1955-04-17 02:00:00 (Sun)
  61685978400, #      utc_end 1955-10-02 02:00:00 (Sun)
  61671466800, #  local_start 1955-04-17 03:00:00 (Sun)
  61685982000, #    local_end 1955-10-02 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61685978400, #    utc_start 1955-10-02 02:00:00 (Sun)
  61703517600, #      utc_end 1956-04-22 02:00:00 (Sun)
  61685978400, #  local_start 1955-10-02 02:00:00 (Sun)
  61703517600, #    local_end 1956-04-22 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61703517600, #    utc_start 1956-04-22 02:00:00 (Sun)
  61718032800, #      utc_end 1956-10-07 02:00:00 (Sun)
  61703521200, #  local_start 1956-04-22 03:00:00 (Sun)
  61718036400, #    local_end 1956-10-07 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61718032800, #    utc_start 1956-10-07 02:00:00 (Sun)
  61734362400, #      utc_end 1957-04-14 02:00:00 (Sun)
  61718032800, #  local_start 1956-10-07 02:00:00 (Sun)
  61734362400, #    local_end 1957-04-14 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61734362400, #    utc_start 1957-04-14 02:00:00 (Sun)
  61749482400, #      utc_end 1957-10-06 02:00:00 (Sun)
  61734366000, #  local_start 1957-04-14 03:00:00 (Sun)
  61749486000, #    local_end 1957-10-06 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61749482400, #    utc_start 1957-10-06 02:00:00 (Sun)
  61766416800, #      utc_end 1958-04-20 02:00:00 (Sun)
  61749482400, #  local_start 1957-10-06 02:00:00 (Sun)
  61766416800, #    local_end 1958-04-20 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61766416800, #    utc_start 1958-04-20 02:00:00 (Sun)
  61780932000, #      utc_end 1958-10-05 02:00:00 (Sun)
  61766420400, #  local_start 1958-04-20 03:00:00 (Sun)
  61780935600, #    local_end 1958-10-05 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61780932000, #    utc_start 1958-10-05 02:00:00 (Sun)
  61797866400, #      utc_end 1959-04-19 02:00:00 (Sun)
  61780932000, #  local_start 1958-10-05 02:00:00 (Sun)
  61797866400, #    local_end 1959-04-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61797866400, #    utc_start 1959-04-19 02:00:00 (Sun)
  61812381600, #      utc_end 1959-10-04 02:00:00 (Sun)
  61797870000, #  local_start 1959-04-19 03:00:00 (Sun)
  61812385200, #    local_end 1959-10-04 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61812381600, #    utc_start 1959-10-04 02:00:00 (Sun)
  61828711200, #      utc_end 1960-04-10 02:00:00 (Sun)
  61812381600, #  local_start 1959-10-04 02:00:00 (Sun)
  61828711200, #    local_end 1960-04-10 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61828711200, #    utc_start 1960-04-10 02:00:00 (Sun)
  61843831200, #      utc_end 1960-10-02 02:00:00 (Sun)
  61828714800, #  local_start 1960-04-10 03:00:00 (Sun)
  61843834800, #    local_end 1960-10-02 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61843831200, #    utc_start 1960-10-02 02:00:00 (Sun)
  61858951200, #      utc_end 1961-03-26 02:00:00 (Sun)
  61843831200, #  local_start 1960-10-02 02:00:00 (Sun)
  61858951200, #    local_end 1961-03-26 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61858951200, #    utc_start 1961-03-26 02:00:00 (Sun)
  61877700000, #      utc_end 1961-10-29 02:00:00 (Sun)
  61858954800, #  local_start 1961-03-26 03:00:00 (Sun)
  61877703600, #    local_end 1961-10-29 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61877700000, #    utc_start 1961-10-29 02:00:00 (Sun)
  61890400800, #      utc_end 1962-03-25 02:00:00 (Sun)
  61877700000, #  local_start 1961-10-29 02:00:00 (Sun)
  61890400800, #    local_end 1962-03-25 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61890400800, #    utc_start 1962-03-25 02:00:00 (Sun)
  61909149600, #      utc_end 1962-10-28 02:00:00 (Sun)
  61890404400, #  local_start 1962-03-25 03:00:00 (Sun)
  61909153200, #    local_end 1962-10-28 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61909149600, #    utc_start 1962-10-28 02:00:00 (Sun)
  61922455200, #      utc_end 1963-03-31 02:00:00 (Sun)
  61909149600, #  local_start 1962-10-28 02:00:00 (Sun)
  61922455200, #    local_end 1963-03-31 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61922455200, #    utc_start 1963-03-31 02:00:00 (Sun)
  61940599200, #      utc_end 1963-10-27 02:00:00 (Sun)
  61922458800, #  local_start 1963-03-31 03:00:00 (Sun)
  61940602800, #    local_end 1963-10-27 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61940599200, #    utc_start 1963-10-27 02:00:00 (Sun)
  61953300000, #      utc_end 1964-03-22 02:00:00 (Sun)
  61940599200, #  local_start 1963-10-27 02:00:00 (Sun)
  61953300000, #    local_end 1964-03-22 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61953300000, #    utc_start 1964-03-22 02:00:00 (Sun)
  61972048800, #      utc_end 1964-10-25 02:00:00 (Sun)
  61953303600, #  local_start 1964-03-22 03:00:00 (Sun)
  61972052400, #    local_end 1964-10-25 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  61972048800, #    utc_start 1964-10-25 02:00:00 (Sun)
  61984749600, #      utc_end 1965-03-21 02:00:00 (Sun)
  61972048800, #  local_start 1964-10-25 02:00:00 (Sun)
  61984749600, #    local_end 1965-03-21 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  61984749600, #    utc_start 1965-03-21 02:00:00 (Sun)
  62003498400, #      utc_end 1965-10-24 02:00:00 (Sun)
  61984753200, #  local_start 1965-03-21 03:00:00 (Sun)
  62003502000, #    local_end 1965-10-24 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62003498400, #    utc_start 1965-10-24 02:00:00 (Sun)
  62016199200, #      utc_end 1966-03-20 02:00:00 (Sun)
  62003498400, #  local_start 1965-10-24 02:00:00 (Sun)
  62016199200, #    local_end 1966-03-20 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62016199200, #    utc_start 1966-03-20 02:00:00 (Sun)
  62034948000, #      utc_end 1966-10-23 02:00:00 (Sun)
  62016202800, #  local_start 1966-03-20 03:00:00 (Sun)
  62034951600, #    local_end 1966-10-23 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62034948000, #    utc_start 1966-10-23 02:00:00 (Sun)
  62047648800, #      utc_end 1967-03-19 02:00:00 (Sun)
  62034948000, #  local_start 1966-10-23 02:00:00 (Sun)
  62047648800, #    local_end 1967-03-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62047648800, #    utc_start 1967-03-19 02:00:00 (Sun)
  62067002400, #      utc_end 1967-10-29 02:00:00 (Sun)
  62047652400, #  local_start 1967-03-19 03:00:00 (Sun)
  62067006000, #    local_end 1967-10-29 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62067002400, #    utc_start 1967-10-29 02:00:00 (Sun)
  62076679200, #      utc_end 1968-02-18 02:00:00 (Sun)
  62067002400, #  local_start 1967-10-29 02:00:00 (Sun)
  62076679200, #    local_end 1968-02-18 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62076679200, #    utc_start 1968-02-18 02:00:00 (Sun)
  62098441200, #      utc_end 1968-10-26 23:00:00 (Sat)
  62076682800, #  local_start 1968-02-18 03:00:00 (Sun)
  62098444800, #    local_end 1968-10-27 00:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62098441200, #    utc_start 1968-10-26 23:00:00 (Sat)
  62193405600, #      utc_end 1971-10-31 02:00:00 (Sun)
  62098444800, #  local_start 1968-10-27 00:00:00 (Sun)
  62193409200, #    local_end 1971-10-31 03:00:00 (Sun)
  3600,
  0,
  'BST',
      ],
      [
  62193405600, #    utc_start 1971-10-31 02:00:00 (Sun)
  62205501600, #      utc_end 1972-03-19 02:00:00 (Sun)
  62193405600, #  local_start 1971-10-31 02:00:00 (Sun)
  62205501600, #    local_end 1972-03-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62205501600, #    utc_start 1972-03-19 02:00:00 (Sun)
  62224855200, #      utc_end 1972-10-29 02:00:00 (Sun)
  62205505200, #  local_start 1972-03-19 03:00:00 (Sun)
  62224858800, #    local_end 1972-10-29 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62224855200, #    utc_start 1972-10-29 02:00:00 (Sun)
  62236951200, #      utc_end 1973-03-18 02:00:00 (Sun)
  62224855200, #  local_start 1972-10-29 02:00:00 (Sun)
  62236951200, #    local_end 1973-03-18 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62236951200, #    utc_start 1973-03-18 02:00:00 (Sun)
  62256304800, #      utc_end 1973-10-28 02:00:00 (Sun)
  62236954800, #  local_start 1973-03-18 03:00:00 (Sun)
  62256308400, #    local_end 1973-10-28 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62256304800, #    utc_start 1973-10-28 02:00:00 (Sun)
  62268400800, #      utc_end 1974-03-17 02:00:00 (Sun)
  62256304800, #  local_start 1973-10-28 02:00:00 (Sun)
  62268400800, #    local_end 1974-03-17 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62268400800, #    utc_start 1974-03-17 02:00:00 (Sun)
  62287754400, #      utc_end 1974-10-27 02:00:00 (Sun)
  62268404400, #  local_start 1974-03-17 03:00:00 (Sun)
  62287758000, #    local_end 1974-10-27 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62287754400, #    utc_start 1974-10-27 02:00:00 (Sun)
  62299850400, #      utc_end 1975-03-16 02:00:00 (Sun)
  62287754400, #  local_start 1974-10-27 02:00:00 (Sun)
  62299850400, #    local_end 1975-03-16 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62299850400, #    utc_start 1975-03-16 02:00:00 (Sun)
  62319204000, #      utc_end 1975-10-26 02:00:00 (Sun)
  62299854000, #  local_start 1975-03-16 03:00:00 (Sun)
  62319207600, #    local_end 1975-10-26 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62319204000, #    utc_start 1975-10-26 02:00:00 (Sun)
  62331904800, #      utc_end 1976-03-21 02:00:00 (Sun)
  62319204000, #  local_start 1975-10-26 02:00:00 (Sun)
  62331904800, #    local_end 1976-03-21 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62331904800, #    utc_start 1976-03-21 02:00:00 (Sun)
  62350653600, #      utc_end 1976-10-24 02:00:00 (Sun)
  62331908400, #  local_start 1976-03-21 03:00:00 (Sun)
  62350657200, #    local_end 1976-10-24 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62350653600, #    utc_start 1976-10-24 02:00:00 (Sun)
  62363354400, #      utc_end 1977-03-20 02:00:00 (Sun)
  62350653600, #  local_start 1976-10-24 02:00:00 (Sun)
  62363354400, #    local_end 1977-03-20 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62363354400, #    utc_start 1977-03-20 02:00:00 (Sun)
  62382103200, #      utc_end 1977-10-23 02:00:00 (Sun)
  62363358000, #  local_start 1977-03-20 03:00:00 (Sun)
  62382106800, #    local_end 1977-10-23 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62382103200, #    utc_start 1977-10-23 02:00:00 (Sun)
  62394804000, #      utc_end 1978-03-19 02:00:00 (Sun)
  62382103200, #  local_start 1977-10-23 02:00:00 (Sun)
  62394804000, #    local_end 1978-03-19 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62394804000, #    utc_start 1978-03-19 02:00:00 (Sun)
  62414157600, #      utc_end 1978-10-29 02:00:00 (Sun)
  62394807600, #  local_start 1978-03-19 03:00:00 (Sun)
  62414161200, #    local_end 1978-10-29 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62414157600, #    utc_start 1978-10-29 02:00:00 (Sun)
  62426253600, #      utc_end 1979-03-18 02:00:00 (Sun)
  62414157600, #  local_start 1978-10-29 02:00:00 (Sun)
  62426253600, #    local_end 1979-03-18 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62426253600, #    utc_start 1979-03-18 02:00:00 (Sun)
  62445607200, #      utc_end 1979-10-28 02:00:00 (Sun)
  62426257200, #  local_start 1979-03-18 03:00:00 (Sun)
  62445610800, #    local_end 1979-10-28 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62445607200, #    utc_start 1979-10-28 02:00:00 (Sun)
  62457703200, #      utc_end 1980-03-16 02:00:00 (Sun)
  62445607200, #  local_start 1979-10-28 02:00:00 (Sun)
  62457703200, #    local_end 1980-03-16 02:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62457703200, #    utc_start 1980-03-16 02:00:00 (Sun)
  62477056800, #      utc_end 1980-10-26 02:00:00 (Sun)
  62457706800, #  local_start 1980-03-16 03:00:00 (Sun)
  62477060400, #    local_end 1980-10-26 03:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62477056800, #    utc_start 1980-10-26 02:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62477056800, #  local_start 1980-10-26 02:00:00 (Sun)
  62490358800, #    local_end 1981-03-29 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62508502800, #      utc_end 1981-10-25 01:00:00 (Sun)
  62490362400, #  local_start 1981-03-29 02:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62508502800, #    utc_start 1981-10-25 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62521808400, #    local_end 1982-03-28 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62539952400, #      utc_end 1982-10-24 01:00:00 (Sun)
  62521812000, #  local_start 1982-03-28 02:00:00 (Sun)
  62539956000, #    local_end 1982-10-24 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62539952400, #    utc_start 1982-10-24 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62539952400, #  local_start 1982-10-24 01:00:00 (Sun)
  62553258000, #    local_end 1983-03-27 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62571402000, #      utc_end 1983-10-23 01:00:00 (Sun)
  62553261600, #  local_start 1983-03-27 02:00:00 (Sun)
  62571405600, #    local_end 1983-10-23 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62571402000, #    utc_start 1983-10-23 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62571402000, #  local_start 1983-10-23 01:00:00 (Sun)
  62584707600, #    local_end 1984-03-25 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62603456400, #      utc_end 1984-10-28 01:00:00 (Sun)
  62584711200, #  local_start 1984-03-25 02:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62603456400, #    utc_start 1984-10-28 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62616762000, #    local_end 1985-03-31 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62634906000, #      utc_end 1985-10-27 01:00:00 (Sun)
  62616765600, #  local_start 1985-03-31 02:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62634906000, #    utc_start 1985-10-27 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62648211600, #    local_end 1986-03-30 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62666355600, #      utc_end 1986-10-26 01:00:00 (Sun)
  62648215200, #  local_start 1986-03-30 02:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62666355600, #    utc_start 1986-10-26 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62679661200, #    local_end 1987-03-29 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62697805200, #      utc_end 1987-10-25 01:00:00 (Sun)
  62679664800, #  local_start 1987-03-29 02:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62697805200, #    utc_start 1987-10-25 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711110800, #    local_end 1988-03-27 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62729254800, #      utc_end 1988-10-23 01:00:00 (Sun)
  62711114400, #  local_start 1988-03-27 02:00:00 (Sun)
  62729258400, #    local_end 1988-10-23 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62729254800, #    utc_start 1988-10-23 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62729254800, #  local_start 1988-10-23 01:00:00 (Sun)
  62742560400, #    local_end 1989-03-26 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62761309200, #      utc_end 1989-10-29 01:00:00 (Sun)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62761309200, #    utc_start 1989-10-29 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774010000, #    local_end 1990-03-25 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62792758800, #      utc_end 1990-10-28 01:00:00 (Sun)
  62774013600, #  local_start 1990-03-25 02:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62792758800, #    utc_start 1990-10-28 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806064400, #    local_end 1991-03-31 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62824208400, #      utc_end 1991-10-27 01:00:00 (Sun)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62824208400, #    utc_start 1991-10-27 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62837514000, #    local_end 1992-03-29 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62855658000, #      utc_end 1992-10-25 01:00:00 (Sun)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62855658000, #    utc_start 1992-10-25 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62868963600, #    local_end 1993-03-28 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62887107600, #      utc_end 1993-10-24 01:00:00 (Sun)
  62868967200, #  local_start 1993-03-28 02:00:00 (Sun)
  62887111200, #    local_end 1993-10-24 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62887107600, #    utc_start 1993-10-24 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62887107600, #  local_start 1993-10-24 01:00:00 (Sun)
  62900413200, #    local_end 1994-03-27 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62918557200, #      utc_end 1994-10-23 01:00:00 (Sun)
  62900416800, #  local_start 1994-03-27 02:00:00 (Sun)
  62918560800, #    local_end 1994-10-23 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62918557200, #    utc_start 1994-10-23 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62918557200, #  local_start 1994-10-23 01:00:00 (Sun)
  62931862800, #    local_end 1995-03-26 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62950006800, #      utc_end 1995-10-22 01:00:00 (Sun)
  62931866400, #  local_start 1995-03-26 02:00:00 (Sun)
  62950010400, #    local_end 1995-10-22 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62950006800, #    utc_start 1995-10-22 01:00:00 (Sun)
  62956137600, #      utc_end 1996-01-01 00:00:00 (Mon)
  62950006800, #  local_start 1995-10-22 01:00:00 (Sun)
  62956137600, #    local_end 1996-01-01 00:00:00 (Mon)
  0,
  0,
  'GMT',
      ],
      [
  62956137600, #    utc_start 1996-01-01 00:00:00 (Mon)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62956137600, #  local_start 1996-01-01 00:00:00 (Mon)
  62963917200, #    local_end 1996-03-31 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963920800, #  local_start 1996-03-31 02:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995366800, #    local_end 1997-03-30 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995370400, #  local_start 1997-03-30 02:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63026816400, #    local_end 1998-03-29 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026820000, #  local_start 1998-03-29 02:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058266000, #    local_end 1999-03-28 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058269600, #  local_start 1999-03-28 02:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63089715600, #    local_end 2000-03-26 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089719200, #  local_start 2000-03-26 02:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121165200, #    local_end 2001-03-25 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121168800, #  local_start 2001-03-25 02:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153219600, #    local_end 2002-03-31 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153223200, #  local_start 2002-03-31 02:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63184669200, #    local_end 2003-03-30 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184672800, #  local_start 2003-03-30 02:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216118800, #    local_end 2004-03-28 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216122400, #  local_start 2004-03-28 02:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63247568400, #    local_end 2005-03-27 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247572000, #  local_start 2005-03-27 02:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279018000, #    local_end 2006-03-26 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279021600, #  local_start 2006-03-26 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63310467600, #    local_end 2007-03-25 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310471200, #  local_start 2007-03-25 02:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63342522000, #    local_end 2008-03-30 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342525600, #  local_start 2008-03-30 02:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63373971600, #    local_end 2009-03-29 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373975200, #  local_start 2009-03-29 02:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63405421200, #    local_end 2010-03-28 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405424800, #  local_start 2010-03-28 02:00:00 (Sun)
  63424173600, #    local_end 2010-10-31 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424170000, #  local_start 2010-10-31 01:00:00 (Sun)
  63436870800, #    local_end 2011-03-27 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436874400, #  local_start 2011-03-27 02:00:00 (Sun)
  63455623200, #    local_end 2011-10-30 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455619600, #  local_start 2011-10-30 01:00:00 (Sun)
  63468320400, #    local_end 2012-03-25 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468324000, #  local_start 2012-03-25 02:00:00 (Sun)
  63487072800, #    local_end 2012-10-28 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487069200, #  local_start 2012-10-28 01:00:00 (Sun)
  63500374800, #    local_end 2013-03-31 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500378400, #  local_start 2013-03-31 02:00:00 (Sun)
  63518522400, #    local_end 2013-10-27 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518518800, #  local_start 2013-10-27 01:00:00 (Sun)
  63531824400, #    local_end 2014-03-30 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531828000, #  local_start 2014-03-30 02:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63563274000, #    local_end 2015-03-29 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563277600, #  local_start 2015-03-29 02:00:00 (Sun)
  63581421600, #    local_end 2015-10-25 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581418000, #  local_start 2015-10-25 01:00:00 (Sun)
  63594723600, #    local_end 2016-03-27 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594727200, #  local_start 2016-03-27 02:00:00 (Sun)
  63613476000, #    local_end 2016-10-30 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613472400, #  local_start 2016-10-30 01:00:00 (Sun)
  63626173200, #    local_end 2017-03-26 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626176800, #  local_start 2017-03-26 02:00:00 (Sun)
  63644925600, #    local_end 2017-10-29 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644922000, #  local_start 2017-10-29 01:00:00 (Sun)
  63657622800, #    local_end 2018-03-25 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657626400, #  local_start 2018-03-25 02:00:00 (Sun)
  63676375200, #    local_end 2018-10-28 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676371600, #  local_start 2018-10-28 01:00:00 (Sun)
  63689677200, #    local_end 2019-03-31 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689680800, #  local_start 2019-03-31 02:00:00 (Sun)
  63707824800, #    local_end 2019-10-27 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707821200, #  local_start 2019-10-27 01:00:00 (Sun)
  63721126800, #    local_end 2020-03-29 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721130400, #  local_start 2020-03-29 02:00:00 (Sun)
  63739274400, #    local_end 2020-10-25 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739270800, #  local_start 2020-10-25 01:00:00 (Sun)
  63752576400, #    local_end 2021-03-28 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752580000, #  local_start 2021-03-28 02:00:00 (Sun)
  63771328800, #    local_end 2021-10-31 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771325200, #  local_start 2021-10-31 01:00:00 (Sun)
  63784026000, #    local_end 2022-03-27 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784029600, #  local_start 2022-03-27 02:00:00 (Sun)
  63802778400, #    local_end 2022-10-30 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802774800, #  local_start 2022-10-30 01:00:00 (Sun)
  63815475600, #    local_end 2023-03-26 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815479200, #  local_start 2023-03-26 02:00:00 (Sun)
  63834228000, #    local_end 2023-10-29 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834224400, #  local_start 2023-10-29 01:00:00 (Sun)
  63847530000, #    local_end 2024-03-31 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847533600, #  local_start 2024-03-31 02:00:00 (Sun)
  63865677600, #    local_end 2024-10-27 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865674000, #  local_start 2024-10-27 01:00:00 (Sun)
  63878979600, #    local_end 2025-03-30 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878983200, #  local_start 2025-03-30 02:00:00 (Sun)
  63897127200, #    local_end 2025-10-26 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897123600, #  local_start 2025-10-26 01:00:00 (Sun)
  63910429200, #    local_end 2026-03-29 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910432800, #  local_start 2026-03-29 02:00:00 (Sun)
  63928576800, #    local_end 2026-10-25 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928573200, #  local_start 2026-10-25 01:00:00 (Sun)
  63941878800, #    local_end 2027-03-28 01:00:00 (Sun)
  0,
  0,
  'GMT',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941882400, #  local_start 2027-03-28 02:00:00 (Sun)
  63960631200, #    local_end 2027-10-31 02:00:00 (Sun)
  3600,
  1,
  'BST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {116}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 0 }
  
  my $last_observance = bless( {
    'format' => 'GMT/BST',
    'gmtoff' => '0:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 728659,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 728659,
      'utc_rd_secs' => 0,
      'utc_year' => 1997
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 0,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 728659,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 728659,
      'utc_rd_secs' => 0,
      'utc_year' => 1997
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_LONDON

    $main::fatpacked{"DateTime/TimeZone/Europe/Luxembourg.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_LUXEMBOURG';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Luxembourg;
  $DateTime::TimeZone::Europe::Luxembourg::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Luxembourg::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60065969724, #      utc_end 1904-05-31 23:35:24 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60065971200, #    local_end 1904-06-01 00:00:00 (Wed)
  1476,
  0,
  'LMT',
      ],
      [
  60065969724, #    utc_start 1904-05-31 23:35:24 (Tue)
  60443186400, #      utc_end 1916-05-14 22:00:00 (Sun)
  60065973324, #  local_start 1904-06-01 00:35:24 (Wed)
  60443190000, #    local_end 1916-05-14 23:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60443186400, #    utc_start 1916-05-14 22:00:00 (Sun)
  60455199600, #      utc_end 1916-09-30 23:00:00 (Sat)
  60443193600, #  local_start 1916-05-15 00:00:00 (Mon)
  60455206800, #    local_end 1916-10-01 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60455199600, #    utc_start 1916-09-30 23:00:00 (Sat)
  60473340000, #      utc_end 1917-04-28 22:00:00 (Sat)
  60455203200, #  local_start 1916-10-01 00:00:00 (Sun)
  60473343600, #    local_end 1917-04-28 23:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  60473340000, #    utc_start 1917-04-28 22:00:00 (Sat)
  60485526000, #      utc_end 1917-09-16 23:00:00 (Sun)
  60473347200, #  local_start 1917-04-29 00:00:00 (Sun)
  60485533200, #    local_end 1917-09-17 01:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60485526000, #    utc_start 1917-09-16 23:00:00 (Sun)
  60503677200, #      utc_end 1918-04-15 01:00:00 (Mon)
  60485529600, #  local_start 1917-09-17 00:00:00 (Mon)
  60503680800, #    local_end 1918-04-15 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60503677200, #    utc_start 1918-04-15 01:00:00 (Mon)
  60516982800, #      utc_end 1918-09-16 01:00:00 (Mon)
  60503684400, #  local_start 1918-04-15 03:00:00 (Mon)
  60516990000, #    local_end 1918-09-16 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60516982800, #    utc_start 1918-09-16 01:00:00 (Mon)
  60523023600, #      utc_end 1918-11-24 23:00:00 (Sun)
  60516986400, #  local_start 1918-09-16 02:00:00 (Mon)
  60523027200, #    local_end 1918-11-25 00:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60523023600, #    utc_start 1918-11-24 23:00:00 (Sun)
  60531404400, #      utc_end 1919-03-01 23:00:00 (Sat)
  60523023600, #  local_start 1918-11-24 23:00:00 (Sun)
  60531404400, #    local_end 1919-03-01 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60531404400, #    utc_start 1919-03-01 23:00:00 (Sat)
  60550164000, #      utc_end 1919-10-05 02:00:00 (Sun)
  60531408000, #  local_start 1919-03-02 00:00:00 (Sun)
  60550167600, #    local_end 1919-10-05 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60550164000, #    utc_start 1919-10-05 02:00:00 (Sun)
  60561644400, #      utc_end 1920-02-14 23:00:00 (Sat)
  60550164000, #  local_start 1919-10-05 02:00:00 (Sun)
  60561644400, #    local_end 1920-02-14 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60561644400, #    utc_start 1920-02-14 23:00:00 (Sat)
  60583424400, #      utc_end 1920-10-24 01:00:00 (Sun)
  60561648000, #  local_start 1920-02-15 00:00:00 (Sun)
  60583428000, #    local_end 1920-10-24 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60583424400, #    utc_start 1920-10-24 01:00:00 (Sun)
  60595686000, #      utc_end 1921-03-14 23:00:00 (Mon)
  60583424400, #  local_start 1920-10-24 01:00:00 (Sun)
  60595686000, #    local_end 1921-03-14 23:00:00 (Mon)
  0,
  0,
  'WET',
      ],
      [
  60595686000, #    utc_start 1921-03-14 23:00:00 (Mon)
  60615133200, #      utc_end 1921-10-26 01:00:00 (Wed)
  60595689600, #  local_start 1921-03-15 00:00:00 (Tue)
  60615136800, #    local_end 1921-10-26 02:00:00 (Wed)
  3600,
  1,
  'WEST',
      ],
      [
  60615133200, #    utc_start 1921-10-26 01:00:00 (Wed)
  60628172400, #      utc_end 1922-03-25 23:00:00 (Sat)
  60615133200, #  local_start 1921-10-26 01:00:00 (Wed)
  60628172400, #    local_end 1922-03-25 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60628172400, #    utc_start 1922-03-25 23:00:00 (Sat)
  60645110400, #      utc_end 1922-10-08 00:00:00 (Sun)
  60628176000, #  local_start 1922-03-26 00:00:00 (Sun)
  60645114000, #    local_end 1922-10-08 01:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60645110400, #    utc_start 1922-10-08 00:00:00 (Sun)
  60662041200, #      utc_end 1923-04-21 23:00:00 (Sat)
  60645110400, #  local_start 1922-10-08 00:00:00 (Sun)
  60662041200, #    local_end 1923-04-21 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60662041200, #    utc_start 1923-04-21 23:00:00 (Sat)
  60676563600, #      utc_end 1923-10-07 01:00:00 (Sun)
  60662044800, #  local_start 1923-04-22 00:00:00 (Sun)
  60676567200, #    local_end 1923-10-07 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60676563600, #    utc_start 1923-10-07 01:00:00 (Sun)
  60691676400, #      utc_end 1924-03-29 23:00:00 (Sat)
  60676563600, #  local_start 1923-10-07 01:00:00 (Sun)
  60691676400, #    local_end 1924-03-29 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60691676400, #    utc_start 1924-03-29 23:00:00 (Sat)
  60708009600, #      utc_end 1924-10-05 00:00:00 (Sun)
  60691680000, #  local_start 1924-03-30 00:00:00 (Sun)
  60708013200, #    local_end 1924-10-05 01:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60708009600, #    utc_start 1924-10-05 00:00:00 (Sun)
  60723817200, #      utc_end 1925-04-05 23:00:00 (Sun)
  60708009600, #  local_start 1924-10-05 00:00:00 (Sun)
  60723817200, #    local_end 1925-04-05 23:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  60723817200, #    utc_start 1925-04-05 23:00:00 (Sun)
  60739459200, #      utc_end 1925-10-04 00:00:00 (Sun)
  60723820800, #  local_start 1925-04-06 00:00:00 (Mon)
  60739462800, #    local_end 1925-10-04 01:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60739459200, #    utc_start 1925-10-04 00:00:00 (Sun)
  60756390000, #      utc_end 1926-04-17 23:00:00 (Sat)
  60739459200, #  local_start 1925-10-04 00:00:00 (Sun)
  60756390000, #    local_end 1926-04-17 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60756390000, #    utc_start 1926-04-17 23:00:00 (Sat)
  60770908800, #      utc_end 1926-10-03 00:00:00 (Sun)
  60756393600, #  local_start 1926-04-18 00:00:00 (Sun)
  60770912400, #    local_end 1926-10-03 01:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60770908800, #    utc_start 1926-10-03 00:00:00 (Sun)
  60787234800, #      utc_end 1927-04-09 23:00:00 (Sat)
  60770908800, #  local_start 1926-10-03 00:00:00 (Sun)
  60787234800, #    local_end 1927-04-09 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60787234800, #    utc_start 1927-04-09 23:00:00 (Sat)
  60802358400, #      utc_end 1927-10-02 00:00:00 (Sun)
  60787238400, #  local_start 1927-04-10 00:00:00 (Sun)
  60802362000, #    local_end 1927-10-02 01:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60802358400, #    utc_start 1927-10-02 00:00:00 (Sun)
  60819289200, #      utc_end 1928-04-14 23:00:00 (Sat)
  60802358400, #  local_start 1927-10-02 00:00:00 (Sun)
  60819289200, #    local_end 1928-04-14 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60819289200, #    utc_start 1928-04-14 23:00:00 (Sat)
  60834412800, #      utc_end 1928-10-07 00:00:00 (Sun)
  60819292800, #  local_start 1928-04-15 00:00:00 (Sun)
  60834416400, #    local_end 1928-10-07 01:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60834412800, #    utc_start 1928-10-07 00:00:00 (Sun)
  60851343600, #      utc_end 1929-04-20 23:00:00 (Sat)
  60834412800, #  local_start 1928-10-07 00:00:00 (Sun)
  60851343600, #    local_end 1929-04-20 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60851343600, #    utc_start 1929-04-20 23:00:00 (Sat)
  60865869600, #      utc_end 1929-10-06 02:00:00 (Sun)
  60851347200, #  local_start 1929-04-21 00:00:00 (Sun)
  60865873200, #    local_end 1929-10-06 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60865869600, #    utc_start 1929-10-06 02:00:00 (Sun)
  60882199200, #      utc_end 1930-04-13 02:00:00 (Sun)
  60865869600, #  local_start 1929-10-06 02:00:00 (Sun)
  60882199200, #    local_end 1930-04-13 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  60882199200, #    utc_start 1930-04-13 02:00:00 (Sun)
  60897319200, #      utc_end 1930-10-05 02:00:00 (Sun)
  60882202800, #  local_start 1930-04-13 03:00:00 (Sun)
  60897322800, #    local_end 1930-10-05 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60897319200, #    utc_start 1930-10-05 02:00:00 (Sun)
  60914253600, #      utc_end 1931-04-19 02:00:00 (Sun)
  60897319200, #  local_start 1930-10-05 02:00:00 (Sun)
  60914253600, #    local_end 1931-04-19 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  60914253600, #    utc_start 1931-04-19 02:00:00 (Sun)
  60928768800, #      utc_end 1931-10-04 02:00:00 (Sun)
  60914257200, #  local_start 1931-04-19 03:00:00 (Sun)
  60928772400, #    local_end 1931-10-04 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60928768800, #    utc_start 1931-10-04 02:00:00 (Sun)
  60944493600, #      utc_end 1932-04-03 02:00:00 (Sun)
  60928768800, #  local_start 1931-10-04 02:00:00 (Sun)
  60944493600, #    local_end 1932-04-03 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  60944493600, #    utc_start 1932-04-03 02:00:00 (Sun)
  60960218400, #      utc_end 1932-10-02 02:00:00 (Sun)
  60944497200, #  local_start 1932-04-03 03:00:00 (Sun)
  60960222000, #    local_end 1932-10-02 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60960218400, #    utc_start 1932-10-02 02:00:00 (Sun)
  60975338400, #      utc_end 1933-03-26 02:00:00 (Sun)
  60960218400, #  local_start 1932-10-02 02:00:00 (Sun)
  60975338400, #    local_end 1933-03-26 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  60975338400, #    utc_start 1933-03-26 02:00:00 (Sun)
  60992272800, #      utc_end 1933-10-08 02:00:00 (Sun)
  60975342000, #  local_start 1933-03-26 03:00:00 (Sun)
  60992276400, #    local_end 1933-10-08 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60992272800, #    utc_start 1933-10-08 02:00:00 (Sun)
  61007997600, #      utc_end 1934-04-08 02:00:00 (Sun)
  60992272800, #  local_start 1933-10-08 02:00:00 (Sun)
  61007997600, #    local_end 1934-04-08 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61007997600, #    utc_start 1934-04-08 02:00:00 (Sun)
  61023722400, #      utc_end 1934-10-07 02:00:00 (Sun)
  61008001200, #  local_start 1934-04-08 03:00:00 (Sun)
  61023726000, #    local_end 1934-10-07 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61023722400, #    utc_start 1934-10-07 02:00:00 (Sun)
  61038842400, #      utc_end 1935-03-31 02:00:00 (Sun)
  61023722400, #  local_start 1934-10-07 02:00:00 (Sun)
  61038842400, #    local_end 1935-03-31 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61038842400, #    utc_start 1935-03-31 02:00:00 (Sun)
  61055172000, #      utc_end 1935-10-06 02:00:00 (Sun)
  61038846000, #  local_start 1935-03-31 03:00:00 (Sun)
  61055175600, #    local_end 1935-10-06 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61055172000, #    utc_start 1935-10-06 02:00:00 (Sun)
  61072106400, #      utc_end 1936-04-19 02:00:00 (Sun)
  61055172000, #  local_start 1935-10-06 02:00:00 (Sun)
  61072106400, #    local_end 1936-04-19 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61072106400, #    utc_start 1936-04-19 02:00:00 (Sun)
  61086621600, #      utc_end 1936-10-04 02:00:00 (Sun)
  61072110000, #  local_start 1936-04-19 03:00:00 (Sun)
  61086625200, #    local_end 1936-10-04 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61086621600, #    utc_start 1936-10-04 02:00:00 (Sun)
  61102346400, #      utc_end 1937-04-04 02:00:00 (Sun)
  61086621600, #  local_start 1936-10-04 02:00:00 (Sun)
  61102346400, #    local_end 1937-04-04 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61102346400, #    utc_start 1937-04-04 02:00:00 (Sun)
  61118071200, #      utc_end 1937-10-03 02:00:00 (Sun)
  61102350000, #  local_start 1937-04-04 03:00:00 (Sun)
  61118074800, #    local_end 1937-10-03 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61118071200, #    utc_start 1937-10-03 02:00:00 (Sun)
  61133191200, #      utc_end 1938-03-27 02:00:00 (Sun)
  61118071200, #  local_start 1937-10-03 02:00:00 (Sun)
  61133191200, #    local_end 1938-03-27 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61133191200, #    utc_start 1938-03-27 02:00:00 (Sun)
  61149520800, #      utc_end 1938-10-02 02:00:00 (Sun)
  61133194800, #  local_start 1938-03-27 03:00:00 (Sun)
  61149524400, #    local_end 1938-10-02 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61149520800, #    utc_start 1938-10-02 02:00:00 (Sun)
  61166455200, #      utc_end 1939-04-16 02:00:00 (Sun)
  61149520800, #  local_start 1938-10-02 02:00:00 (Sun)
  61166455200, #    local_end 1939-04-16 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61166455200, #    utc_start 1939-04-16 02:00:00 (Sun)
  61185204000, #      utc_end 1939-11-19 02:00:00 (Sun)
  61166458800, #  local_start 1939-04-16 03:00:00 (Sun)
  61185207600, #    local_end 1939-11-19 03:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61185204000, #    utc_start 1939-11-19 02:00:00 (Sun)
  61193671200, #      utc_end 1940-02-25 02:00:00 (Sun)
  61185204000, #  local_start 1939-11-19 02:00:00 (Sun)
  61193671200, #    local_end 1940-02-25 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61193671200, #    utc_start 1940-02-25 02:00:00 (Sun)
  61200496800, #      utc_end 1940-05-14 02:00:00 (Tue)
  61193674800, #  local_start 1940-02-25 03:00:00 (Sun)
  61200500400, #    local_end 1940-05-14 03:00:00 (Tue)
  3600,
  1,
  'WEST',
      ],
      [
  61200496800, #    utc_start 1940-05-14 02:00:00 (Tue)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61200504000, #  local_start 1940-05-14 04:00:00 (Tue)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'WEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'WET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'WEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'WET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61337696400, #      utc_end 1944-09-18 01:00:00 (Mon)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61337703600, #    local_end 1944-09-18 03:00:00 (Mon)
  7200,
  1,
  'WEST',
      ],
      [
  61337696400, #    utc_start 1944-09-18 01:00:00 (Mon)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61337700000, #  local_start 1944-09-18 02:00:00 (Mon)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61369059600, #      utc_end 1945-09-16 01:00:00 (Sun)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61369066800, #    local_end 1945-09-16 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61369059600, #    utc_start 1945-09-16 01:00:00 (Sun)
  61390227600, #      utc_end 1946-05-19 01:00:00 (Sun)
  61369063200, #  local_start 1945-09-16 02:00:00 (Sun)
  61390231200, #    local_end 1946-05-19 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61390227600, #    utc_start 1946-05-19 01:00:00 (Sun)
  61402410000, #      utc_end 1946-10-07 01:00:00 (Mon)
  61390234800, #  local_start 1946-05-19 03:00:00 (Sun)
  61402417200, #    local_end 1946-10-07 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61402410000, #    utc_start 1946-10-07 01:00:00 (Mon)
  62356604400, #      utc_end 1976-12-31 23:00:00 (Fri)
  61402413600, #  local_start 1946-10-07 02:00:00 (Mon)
  62356608000, #    local_end 1977-01-01 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62356604400, #    utc_start 1976-12-31 23:00:00 (Fri)
  62364560400, #      utc_end 1977-04-03 01:00:00 (Sun)
  62356608000, #  local_start 1977-01-01 00:00:00 (Sat)
  62364564000, #    local_end 1977-04-03 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62364560400, #    utc_start 1977-04-03 01:00:00 (Sun)
  62379680400, #      utc_end 1977-09-25 01:00:00 (Sun)
  62364567600, #  local_start 1977-04-03 03:00:00 (Sun)
  62379687600, #    local_end 1977-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62379680400, #    utc_start 1977-09-25 01:00:00 (Sun)
  62396010000, #      utc_end 1978-04-02 01:00:00 (Sun)
  62379684000, #  local_start 1977-09-25 02:00:00 (Sun)
  62396013600, #    local_end 1978-04-02 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62396010000, #    utc_start 1978-04-02 01:00:00 (Sun)
  62411734800, #      utc_end 1978-10-01 01:00:00 (Sun)
  62396017200, #  local_start 1978-04-02 03:00:00 (Sun)
  62411742000, #    local_end 1978-10-01 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62411734800, #    utc_start 1978-10-01 01:00:00 (Sun)
  62427459600, #      utc_end 1979-04-01 01:00:00 (Sun)
  62411738400, #  local_start 1978-10-01 02:00:00 (Sun)
  62427463200, #    local_end 1979-04-01 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62427459600, #    utc_start 1979-04-01 01:00:00 (Sun)
  62443184400, #      utc_end 1979-09-30 01:00:00 (Sun)
  62427466800, #  local_start 1979-04-01 03:00:00 (Sun)
  62443191600, #    local_end 1979-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62443184400, #    utc_start 1979-09-30 01:00:00 (Sun)
  62459514000, #      utc_end 1980-04-06 01:00:00 (Sun)
  62443188000, #  local_start 1979-09-30 02:00:00 (Sun)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62459514000, #    utc_start 1980-04-06 01:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474641200, #    local_end 1980-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474637600, #  local_start 1980-09-28 02:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {81}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721720,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721720,
      'utc_rd_secs' => 0,
      'utc_year' => 1978
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721719,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721719,
      'utc_rd_secs' => 82800,
      'utc_year' => 1977
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_LUXEMBOURG

    $main::fatpacked{"DateTime/TimeZone/Europe/Madrid.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_MADRID';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Madrid;
  $DateTime::TimeZone::Europe::Madrid::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Madrid::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958231284, #      utc_end 1901-01-01 00:14:44 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  -884,
  0,
  'LMT',
      ],
      [
  59958231284, #    utc_start 1901-01-01 00:14:44 (Tue)
  60473948400, #      utc_end 1917-05-05 23:00:00 (Sat)
  59958231284, #  local_start 1901-01-01 00:14:44 (Tue)
  60473948400, #    local_end 1917-05-05 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60473948400, #    utc_start 1917-05-05 23:00:00 (Sat)
  60487254000, #      utc_end 1917-10-06 23:00:00 (Sat)
  60473952000, #  local_start 1917-05-06 00:00:00 (Sun)
  60487257600, #    local_end 1917-10-07 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60487254000, #    utc_start 1917-10-06 23:00:00 (Sat)
  60503756400, #      utc_end 1918-04-15 23:00:00 (Mon)
  60487254000, #  local_start 1917-10-06 23:00:00 (Sat)
  60503756400, #    local_end 1918-04-15 23:00:00 (Mon)
  0,
  0,
  'WET',
      ],
      [
  60503756400, #    utc_start 1918-04-15 23:00:00 (Mon)
  60518790000, #      utc_end 1918-10-06 23:00:00 (Sun)
  60503760000, #  local_start 1918-04-16 00:00:00 (Tue)
  60518793600, #    local_end 1918-10-07 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  60518790000, #    utc_start 1918-10-06 23:00:00 (Sun)
  60534428400, #      utc_end 1919-04-05 23:00:00 (Sat)
  60518790000, #  local_start 1918-10-06 23:00:00 (Sun)
  60534428400, #    local_end 1919-04-05 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60534428400, #    utc_start 1919-04-05 23:00:00 (Sat)
  60550326000, #      utc_end 1919-10-06 23:00:00 (Mon)
  60534432000, #  local_start 1919-04-06 00:00:00 (Sun)
  60550329600, #    local_end 1919-10-07 00:00:00 (Tue)
  3600,
  1,
  'WEST',
      ],
      [
  60550326000, #    utc_start 1919-10-06 23:00:00 (Mon)
  60693231600, #      utc_end 1924-04-16 23:00:00 (Wed)
  60550326000, #  local_start 1919-10-06 23:00:00 (Mon)
  60693231600, #    local_end 1924-04-16 23:00:00 (Wed)
  0,
  0,
  'WET',
      ],
      [
  60693231600, #    utc_start 1924-04-16 23:00:00 (Wed)
  60708006000, #      utc_end 1924-10-04 23:00:00 (Sat)
  60693235200, #  local_start 1924-04-17 00:00:00 (Thu)
  60708009600, #    local_end 1924-10-05 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60708006000, #    utc_start 1924-10-04 23:00:00 (Sat)
  60756390000, #      utc_end 1926-04-17 23:00:00 (Sat)
  60708006000, #  local_start 1924-10-04 23:00:00 (Sat)
  60756390000, #    local_end 1926-04-17 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60756390000, #    utc_start 1926-04-17 23:00:00 (Sat)
  60770905200, #      utc_end 1926-10-02 23:00:00 (Sat)
  60756393600, #  local_start 1926-04-18 00:00:00 (Sun)
  60770908800, #    local_end 1926-10-03 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60770905200, #    utc_start 1926-10-02 23:00:00 (Sat)
  60787234800, #      utc_end 1927-04-09 23:00:00 (Sat)
  60770905200, #  local_start 1926-10-02 23:00:00 (Sat)
  60787234800, #    local_end 1927-04-09 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60787234800, #    utc_start 1927-04-09 23:00:00 (Sat)
  60802354800, #      utc_end 1927-10-01 23:00:00 (Sat)
  60787238400, #  local_start 1927-04-10 00:00:00 (Sun)
  60802358400, #    local_end 1927-10-02 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60802354800, #    utc_start 1927-10-01 23:00:00 (Sat)
  60819289200, #      utc_end 1928-04-14 23:00:00 (Sat)
  60802354800, #  local_start 1927-10-01 23:00:00 (Sat)
  60819289200, #    local_end 1928-04-14 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60819289200, #    utc_start 1928-04-14 23:00:00 (Sat)
  60834409200, #      utc_end 1928-10-06 23:00:00 (Sat)
  60819292800, #  local_start 1928-04-15 00:00:00 (Sun)
  60834412800, #    local_end 1928-10-07 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60834409200, #    utc_start 1928-10-06 23:00:00 (Sat)
  60851343600, #      utc_end 1929-04-20 23:00:00 (Sat)
  60834409200, #  local_start 1928-10-06 23:00:00 (Sat)
  60851343600, #    local_end 1929-04-20 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60851343600, #    utc_start 1929-04-20 23:00:00 (Sat)
  60865858800, #      utc_end 1929-10-05 23:00:00 (Sat)
  60851347200, #  local_start 1929-04-21 00:00:00 (Sun)
  60865862400, #    local_end 1929-10-06 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60865858800, #    utc_start 1929-10-05 23:00:00 (Sat)
  61106569200, #      utc_end 1937-05-22 23:00:00 (Sat)
  60865858800, #  local_start 1929-10-05 23:00:00 (Sat)
  61106569200, #    local_end 1937-05-22 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61106569200, #    utc_start 1937-05-22 23:00:00 (Sat)
  61118060400, #      utc_end 1937-10-02 23:00:00 (Sat)
  61106572800, #  local_start 1937-05-23 00:00:00 (Sun)
  61118064000, #    local_end 1937-10-03 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61118060400, #    utc_start 1937-10-02 23:00:00 (Sat)
  61132834800, #      utc_end 1938-03-22 23:00:00 (Tue)
  61118060400, #  local_start 1937-10-02 23:00:00 (Sat)
  61132834800, #    local_end 1938-03-22 23:00:00 (Tue)
  0,
  0,
  'WET',
      ],
      [
  61132834800, #    utc_start 1938-03-22 23:00:00 (Tue)
  61149510000, #      utc_end 1938-10-01 23:00:00 (Sat)
  61132838400, #  local_start 1938-03-23 00:00:00 (Wed)
  61149513600, #    local_end 1938-10-02 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61149510000, #    utc_start 1938-10-01 23:00:00 (Sat)
  61166444400, #      utc_end 1939-04-15 23:00:00 (Sat)
  61149510000, #  local_start 1938-10-01 23:00:00 (Sat)
  61166444400, #    local_end 1939-04-15 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61166444400, #    utc_start 1939-04-15 23:00:00 (Sat)
  61181564400, #      utc_end 1939-10-07 23:00:00 (Sat)
  61166448000, #  local_start 1939-04-16 00:00:00 (Sun)
  61181568000, #    local_end 1939-10-08 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61181564400, #    utc_start 1939-10-07 23:00:00 (Sat)
  61195474800, #      utc_end 1940-03-16 23:00:00 (Sat)
  61181564400, #  local_start 1939-10-07 23:00:00 (Sat)
  61195474800, #    local_end 1940-03-16 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61195474800, #    utc_start 1940-03-16 23:00:00 (Sat)
  61262604000, #      utc_end 1942-05-02 22:00:00 (Sat)
  61195478400, #  local_start 1940-03-17 00:00:00 (Sun)
  61262607600, #    local_end 1942-05-02 23:00:00 (Sat)
  3600,
  1,
  'WEST',
      ],
      [
  61262604000, #    utc_start 1942-05-02 22:00:00 (Sat)
  61273144800, #      utc_end 1942-09-01 22:00:00 (Tue)
  61262611200, #  local_start 1942-05-03 00:00:00 (Sun)
  61273152000, #    local_end 1942-09-02 00:00:00 (Wed)
  7200,
  1,
  'WEMT',
      ],
      [
  61273144800, #    utc_start 1942-09-01 22:00:00 (Tue)
  61292844000, #      utc_end 1943-04-17 22:00:00 (Sat)
  61273148400, #  local_start 1942-09-01 23:00:00 (Tue)
  61292847600, #    local_end 1943-04-17 23:00:00 (Sat)
  3600,
  1,
  'WEST',
      ],
      [
  61292844000, #    utc_start 1943-04-17 22:00:00 (Sat)
  61307445600, #      utc_end 1943-10-03 22:00:00 (Sun)
  61292851200, #  local_start 1943-04-18 00:00:00 (Sun)
  61307452800, #    local_end 1943-10-04 00:00:00 (Mon)
  7200,
  1,
  'WEMT',
      ],
      [
  61307445600, #    utc_start 1943-10-03 22:00:00 (Sun)
  61324293600, #      utc_end 1944-04-15 22:00:00 (Sat)
  61307449200, #  local_start 1943-10-03 23:00:00 (Sun)
  61324297200, #    local_end 1944-04-15 23:00:00 (Sat)
  3600,
  1,
  'WEST',
      ],
      [
  61324293600, #    utc_start 1944-04-15 22:00:00 (Sat)
  61339672800, #      utc_end 1944-10-10 22:00:00 (Tue)
  61324300800, #  local_start 1944-04-16 00:00:00 (Sun)
  61339680000, #    local_end 1944-10-11 00:00:00 (Wed)
  7200,
  1,
  'WEMT',
      ],
      [
  61339672800, #    utc_start 1944-10-10 22:00:00 (Tue)
  61355743200, #      utc_end 1945-04-14 22:00:00 (Sat)
  61339676400, #  local_start 1944-10-10 23:00:00 (Tue)
  61355746800, #    local_end 1945-04-14 23:00:00 (Sat)
  3600,
  1,
  'WEST',
      ],
      [
  61355743200, #    utc_start 1945-04-14 22:00:00 (Sat)
  61370262000, #      utc_end 1945-09-29 23:00:00 (Sat)
  61355750400, #  local_start 1945-04-15 00:00:00 (Sun)
  61370269200, #    local_end 1945-09-30 01:00:00 (Sun)
  7200,
  1,
  'WEMT',
      ],
      [
  61370262000, #    utc_start 1945-09-29 23:00:00 (Sat)
  61387192800, #      utc_end 1946-04-13 22:00:00 (Sat)
  61370265600, #  local_start 1945-09-30 00:00:00 (Sun)
  61387196400, #    local_end 1946-04-13 23:00:00 (Sat)
  3600,
  1,
  'WEST',
      ],
      [
  61387192800, #    utc_start 1946-04-13 22:00:00 (Sat)
  61401794400, #      utc_end 1946-09-29 22:00:00 (Sun)
  61387200000, #  local_start 1946-04-14 00:00:00 (Sun)
  61401801600, #    local_end 1946-09-30 00:00:00 (Mon)
  7200,
  1,
  'WEMT',
      ],
      [
  61401794400, #    utc_start 1946-09-29 22:00:00 (Sun)
  61483356000, #      utc_end 1949-04-30 22:00:00 (Sat)
  61401798000, #  local_start 1946-09-29 23:00:00 (Sun)
  61483359600, #    local_end 1949-04-30 23:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  61483356000, #    utc_start 1949-04-30 22:00:00 (Sat)
  61496492400, #      utc_end 1949-09-29 23:00:00 (Thu)
  61483363200, #  local_start 1949-05-01 00:00:00 (Sun)
  61496499600, #    local_end 1949-09-30 01:00:00 (Fri)
  7200,
  1,
  'CEST',
      ],
      [
  61496492400, #    utc_start 1949-09-29 23:00:00 (Thu)
  62270805600, #      utc_end 1974-04-13 22:00:00 (Sat)
  61496496000, #  local_start 1949-09-30 00:00:00 (Fri)
  62270809200, #    local_end 1974-04-13 23:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62270805600, #    utc_start 1974-04-13 22:00:00 (Sat)
  62285929200, #      utc_end 1974-10-05 23:00:00 (Sat)
  62270812800, #  local_start 1974-04-14 00:00:00 (Sun)
  62285936400, #    local_end 1974-10-06 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62285929200, #    utc_start 1974-10-05 23:00:00 (Sat)
  62302860000, #      utc_end 1975-04-19 22:00:00 (Sat)
  62285932800, #  local_start 1974-10-06 00:00:00 (Sun)
  62302863600, #    local_end 1975-04-19 23:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62302860000, #    utc_start 1975-04-19 22:00:00 (Sat)
  62317378800, #      utc_end 1975-10-04 23:00:00 (Sat)
  62302867200, #  local_start 1975-04-20 00:00:00 (Sun)
  62317386000, #    local_end 1975-10-05 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62317378800, #    utc_start 1975-10-04 23:00:00 (Sat)
  62332495200, #      utc_end 1976-03-27 22:00:00 (Sat)
  62317382400, #  local_start 1975-10-05 00:00:00 (Sun)
  62332498800, #    local_end 1976-03-27 23:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62332495200, #    utc_start 1976-03-27 22:00:00 (Sat)
  62348223600, #      utc_end 1976-09-25 23:00:00 (Sat)
  62332502400, #  local_start 1976-03-28 00:00:00 (Sun)
  62348230800, #    local_end 1976-09-26 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62348223600, #    utc_start 1976-09-25 23:00:00 (Sat)
  62364549600, #      utc_end 1977-04-02 22:00:00 (Sat)
  62348227200, #  local_start 1976-09-26 00:00:00 (Sun)
  62364553200, #    local_end 1977-04-02 23:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62364549600, #    utc_start 1977-04-02 22:00:00 (Sat)
  62379673200, #      utc_end 1977-09-24 23:00:00 (Sat)
  62364556800, #  local_start 1977-04-03 00:00:00 (Sun)
  62379680400, #    local_end 1977-09-25 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62379673200, #    utc_start 1977-09-24 23:00:00 (Sat)
  62396085600, #      utc_end 1978-04-02 22:00:00 (Sun)
  62379676800, #  local_start 1977-09-25 00:00:00 (Sun)
  62396089200, #    local_end 1978-04-02 23:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62396085600, #    utc_start 1978-04-02 22:00:00 (Sun)
  62411727600, #      utc_end 1978-09-30 23:00:00 (Sat)
  62396092800, #  local_start 1978-04-03 00:00:00 (Mon)
  62411734800, #    local_end 1978-10-01 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62411727600, #    utc_start 1978-09-30 23:00:00 (Sat)
  62419676400, #      utc_end 1978-12-31 23:00:00 (Sun)
  62411731200, #  local_start 1978-10-01 00:00:00 (Sun)
  62419680000, #    local_end 1979-01-01 00:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  62419676400, #    utc_start 1978-12-31 23:00:00 (Sun)
  62427459600, #      utc_end 1979-04-01 01:00:00 (Sun)
  62419680000, #  local_start 1979-01-01 00:00:00 (Mon)
  62427463200, #    local_end 1979-04-01 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62427459600, #    utc_start 1979-04-01 01:00:00 (Sun)
  62443184400, #      utc_end 1979-09-30 01:00:00 (Sun)
  62427466800, #  local_start 1979-04-01 03:00:00 (Sun)
  62443191600, #    local_end 1979-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62443184400, #    utc_start 1979-09-30 01:00:00 (Sun)
  62459514000, #      utc_end 1980-04-06 01:00:00 (Sun)
  62443188000, #  local_start 1979-09-30 02:00:00 (Sun)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62459514000, #    utc_start 1980-04-06 01:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474641200, #    local_end 1980-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474637600, #  local_start 1980-09-28 02:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {76}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722450,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722450,
      'utc_rd_secs' => 0,
      'utc_year' => 1980
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722449,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722449,
      'utc_rd_secs' => 82800,
      'utc_year' => 1979
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_MADRID

    $main::fatpacked{"DateTime/TimeZone/Europe/Malta.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_MALTA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Malta;
  $DateTime::TimeZone::Europe::Malta::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Malta::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59732204516, #      utc_end 1893-11-01 23:01:56 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59732208000, #    local_end 1893-11-02 00:00:00 (Thu)
  3484,
  0,
  'LMT',
      ],
      [
  59732204516, #    utc_start 1893-11-01 23:01:56 (Wed)
  60444831600, #      utc_end 1916-06-02 23:00:00 (Fri)
  59732208116, #  local_start 1893-11-02 00:01:56 (Thu)
  60444835200, #    local_end 1916-06-03 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  60444831600, #    utc_start 1916-06-02 23:00:00 (Fri)
  60455199600, #      utc_end 1916-09-30 23:00:00 (Sat)
  60444838800, #  local_start 1916-06-03 01:00:00 (Sat)
  60455206800, #    local_end 1916-10-01 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60455199600, #    utc_start 1916-09-30 23:00:00 (Sat)
  60470924400, #      utc_end 1917-03-31 23:00:00 (Sat)
  60455203200, #  local_start 1916-10-01 00:00:00 (Sun)
  60470928000, #    local_end 1917-04-01 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60470924400, #    utc_start 1917-03-31 23:00:00 (Sat)
  60486649200, #      utc_end 1917-09-29 23:00:00 (Sat)
  60470931600, #  local_start 1917-04-01 01:00:00 (Sun)
  60486656400, #    local_end 1917-09-30 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60486649200, #    utc_start 1917-09-29 23:00:00 (Sat)
  60500559600, #      utc_end 1918-03-09 23:00:00 (Sat)
  60486652800, #  local_start 1917-09-30 00:00:00 (Sun)
  60500563200, #    local_end 1918-03-10 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60500559600, #    utc_start 1918-03-09 23:00:00 (Sat)
  60518703600, #      utc_end 1918-10-05 23:00:00 (Sat)
  60500566800, #  local_start 1918-03-10 01:00:00 (Sun)
  60518710800, #    local_end 1918-10-06 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60518703600, #    utc_start 1918-10-05 23:00:00 (Sat)
  60531404400, #      utc_end 1919-03-01 23:00:00 (Sat)
  60518707200, #  local_start 1918-10-06 00:00:00 (Sun)
  60531408000, #    local_end 1919-03-02 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60531404400, #    utc_start 1919-03-01 23:00:00 (Sat)
  60550153200, #      utc_end 1919-10-04 23:00:00 (Sat)
  60531411600, #  local_start 1919-03-02 01:00:00 (Sun)
  60550160400, #    local_end 1919-10-05 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60550153200, #    utc_start 1919-10-04 23:00:00 (Sat)
  60564668400, #      utc_end 1920-03-20 23:00:00 (Sat)
  60550156800, #  local_start 1919-10-05 00:00:00 (Sun)
  60564672000, #    local_end 1920-03-21 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60564668400, #    utc_start 1920-03-20 23:00:00 (Sat)
  60580393200, #      utc_end 1920-09-18 23:00:00 (Sat)
  60564675600, #  local_start 1920-03-21 01:00:00 (Sun)
  60580400400, #    local_end 1920-09-19 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60580393200, #    utc_start 1920-09-18 23:00:00 (Sat)
  61203250800, #      utc_end 1940-06-14 23:00:00 (Fri)
  60580396800, #  local_start 1920-09-19 00:00:00 (Sun)
  61203254400, #    local_end 1940-06-15 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  61203250800, #    utc_start 1940-06-14 23:00:00 (Fri)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61203258000, #  local_start 1940-06-15 01:00:00 (Sat)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61338906000, #      utc_end 1944-10-02 01:00:00 (Mon)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61338913200, #    local_end 1944-10-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61338906000, #    utc_start 1944-10-02 01:00:00 (Mon)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61338909600, #  local_start 1944-10-02 02:00:00 (Mon)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61368966000, #      utc_end 1945-09-14 23:00:00 (Fri)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61368973200, #    local_end 1945-09-15 01:00:00 (Sat)
  7200,
  1,
  'CEST',
      ],
      [
  61368966000, #    utc_start 1945-09-14 23:00:00 (Fri)
  61384784400, #      utc_end 1946-03-17 01:00:00 (Sun)
  61368969600, #  local_start 1945-09-15 00:00:00 (Sat)
  61384788000, #    local_end 1946-03-17 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61384784400, #    utc_start 1946-03-17 01:00:00 (Sun)
  61402323600, #      utc_end 1946-10-06 01:00:00 (Sun)
  61384791600, #  local_start 1946-03-17 03:00:00 (Sun)
  61402330800, #    local_end 1946-10-06 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61402323600, #    utc_start 1946-10-06 01:00:00 (Sun)
  61416226800, #      utc_end 1947-03-15 23:00:00 (Sat)
  61402327200, #  local_start 1946-10-06 02:00:00 (Sun)
  61416230400, #    local_end 1947-03-16 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61416226800, #    utc_start 1947-03-15 23:00:00 (Sat)
  61433766000, #      utc_end 1947-10-04 23:00:00 (Sat)
  61416234000, #  local_start 1947-03-16 01:00:00 (Sun)
  61433773200, #    local_end 1947-10-05 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61433766000, #    utc_start 1947-10-04 23:00:00 (Sat)
  61446474000, #      utc_end 1948-02-29 01:00:00 (Sun)
  61433769600, #  local_start 1947-10-05 00:00:00 (Sun)
  61446477600, #    local_end 1948-02-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61446474000, #    utc_start 1948-02-29 01:00:00 (Sun)
  61465222800, #      utc_end 1948-10-03 01:00:00 (Sun)
  61446481200, #  local_start 1948-02-29 03:00:00 (Sun)
  61465230000, #    local_end 1948-10-03 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61465222800, #    utc_start 1948-10-03 01:00:00 (Sun)
  62021631600, #      utc_end 1966-05-21 23:00:00 (Sat)
  61465226400, #  local_start 1948-10-03 02:00:00 (Sun)
  62021635200, #    local_end 1966-05-22 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62021631600, #    utc_start 1966-05-21 23:00:00 (Sat)
  62032514400, #      utc_end 1966-09-24 22:00:00 (Sat)
  62021638800, #  local_start 1966-05-22 01:00:00 (Sun)
  62032521600, #    local_end 1966-09-25 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62032514400, #    utc_start 1966-09-24 22:00:00 (Sat)
  62053686000, #      utc_end 1967-05-27 23:00:00 (Sat)
  62032518000, #  local_start 1966-09-24 23:00:00 (Sat)
  62053689600, #    local_end 1967-05-28 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62053686000, #    utc_start 1967-05-27 23:00:00 (Sat)
  62063964000, #      utc_end 1967-09-23 22:00:00 (Sat)
  62053693200, #  local_start 1967-05-28 01:00:00 (Sun)
  62063971200, #    local_end 1967-09-24 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62063964000, #    utc_start 1967-09-23 22:00:00 (Sat)
  62085135600, #      utc_end 1968-05-25 23:00:00 (Sat)
  62063967600, #  local_start 1967-09-23 23:00:00 (Sat)
  62085139200, #    local_end 1968-05-26 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62085135600, #    utc_start 1968-05-25 23:00:00 (Sat)
  62095413600, #      utc_end 1968-09-21 22:00:00 (Sat)
  62085142800, #  local_start 1968-05-26 01:00:00 (Sun)
  62095420800, #    local_end 1968-09-22 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62095413600, #    utc_start 1968-09-21 22:00:00 (Sat)
  62117190000, #      utc_end 1969-05-31 23:00:00 (Sat)
  62095417200, #  local_start 1968-09-21 23:00:00 (Sat)
  62117193600, #    local_end 1969-06-01 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62117190000, #    utc_start 1969-05-31 23:00:00 (Sat)
  62127468000, #      utc_end 1969-09-27 22:00:00 (Sat)
  62117197200, #  local_start 1969-06-01 01:00:00 (Sun)
  62127475200, #    local_end 1969-09-28 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62127468000, #    utc_start 1969-09-27 22:00:00 (Sat)
  62148639600, #      utc_end 1970-05-30 23:00:00 (Sat)
  62127471600, #  local_start 1969-09-27 23:00:00 (Sat)
  62148643200, #    local_end 1970-05-31 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62148639600, #    utc_start 1970-05-30 23:00:00 (Sat)
  62158917600, #      utc_end 1970-09-26 22:00:00 (Sat)
  62148646800, #  local_start 1970-05-31 01:00:00 (Sun)
  62158924800, #    local_end 1970-09-27 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62158917600, #    utc_start 1970-09-26 22:00:00 (Sat)
  62179484400, #      utc_end 1971-05-22 23:00:00 (Sat)
  62158921200, #  local_start 1970-09-26 23:00:00 (Sat)
  62179488000, #    local_end 1971-05-23 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62179484400, #    utc_start 1971-05-22 23:00:00 (Sat)
  62190370800, #      utc_end 1971-09-25 23:00:00 (Sat)
  62179491600, #  local_start 1971-05-23 01:00:00 (Sun)
  62190378000, #    local_end 1971-09-26 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62190370800, #    utc_start 1971-09-25 23:00:00 (Sat)
  62211538800, #      utc_end 1972-05-27 23:00:00 (Sat)
  62190374400, #  local_start 1971-09-26 00:00:00 (Sun)
  62211542400, #    local_end 1972-05-28 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62211538800, #    utc_start 1972-05-27 23:00:00 (Sat)
  62222421600, #      utc_end 1972-09-30 22:00:00 (Sat)
  62211546000, #  local_start 1972-05-28 01:00:00 (Sun)
  62222428800, #    local_end 1972-10-01 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62222421600, #    utc_start 1972-09-30 22:00:00 (Sat)
  62238063600, #      utc_end 1973-03-30 23:00:00 (Fri)
  62222425200, #  local_start 1972-09-30 23:00:00 (Sat)
  62238067200, #    local_end 1973-03-31 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62238063600, #    utc_start 1973-03-30 23:00:00 (Fri)
  62253788400, #      utc_end 1973-09-28 23:00:00 (Fri)
  62238070800, #  local_start 1973-03-31 01:00:00 (Sat)
  62253795600, #    local_end 1973-09-29 01:00:00 (Sat)
  7200,
  1,
  'CEST',
      ],
      [
  62253788400, #    utc_start 1973-09-28 23:00:00 (Fri)
  62271414000, #      utc_end 1974-04-20 23:00:00 (Sat)
  62253792000, #  local_start 1973-09-29 00:00:00 (Sat)
  62271417600, #    local_end 1974-04-21 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62271414000, #    utc_start 1974-04-20 23:00:00 (Sat)
  62284201200, #      utc_end 1974-09-15 23:00:00 (Sun)
  62271421200, #  local_start 1974-04-21 01:00:00 (Sun)
  62284208400, #    local_end 1974-09-16 01:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  62284201200, #    utc_start 1974-09-15 23:00:00 (Sun)
  62302870800, #      utc_end 1975-04-20 01:00:00 (Sun)
  62284204800, #  local_start 1974-09-16 00:00:00 (Mon)
  62302874400, #    local_end 1975-04-20 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62302870800, #    utc_start 1975-04-20 01:00:00 (Sun)
  62316172800, #      utc_end 1975-09-21 00:00:00 (Sun)
  62302878000, #  local_start 1975-04-20 03:00:00 (Sun)
  62316180000, #    local_end 1975-09-21 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62316172800, #    utc_start 1975-09-21 00:00:00 (Sun)
  62334320400, #      utc_end 1976-04-18 01:00:00 (Sun)
  62316176400, #  local_start 1975-09-21 01:00:00 (Sun)
  62334324000, #    local_end 1976-04-18 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62334320400, #    utc_start 1976-04-18 01:00:00 (Sun)
  62347622400, #      utc_end 1976-09-19 00:00:00 (Sun)
  62334327600, #  local_start 1976-04-18 03:00:00 (Sun)
  62347629600, #    local_end 1976-09-19 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62347622400, #    utc_start 1976-09-19 00:00:00 (Sun)
  62365770000, #      utc_end 1977-04-17 01:00:00 (Sun)
  62347626000, #  local_start 1976-09-19 01:00:00 (Sun)
  62365773600, #    local_end 1977-04-17 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62365770000, #    utc_start 1977-04-17 01:00:00 (Sun)
  62379072000, #      utc_end 1977-09-18 00:00:00 (Sun)
  62365777200, #  local_start 1977-04-17 03:00:00 (Sun)
  62379079200, #    local_end 1977-09-18 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62379072000, #    utc_start 1977-09-18 00:00:00 (Sun)
  62397219600, #      utc_end 1978-04-16 01:00:00 (Sun)
  62379075600, #  local_start 1977-09-18 01:00:00 (Sun)
  62397223200, #    local_end 1978-04-16 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62397219600, #    utc_start 1978-04-16 01:00:00 (Sun)
  62410521600, #      utc_end 1978-09-17 00:00:00 (Sun)
  62397226800, #  local_start 1978-04-16 03:00:00 (Sun)
  62410528800, #    local_end 1978-09-17 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62410521600, #    utc_start 1978-09-17 00:00:00 (Sun)
  62428669200, #      utc_end 1979-04-15 01:00:00 (Sun)
  62410525200, #  local_start 1978-09-17 01:00:00 (Sun)
  62428672800, #    local_end 1979-04-15 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62428669200, #    utc_start 1979-04-15 01:00:00 (Sun)
  62441971200, #      utc_end 1979-09-16 00:00:00 (Sun)
  62428676400, #  local_start 1979-04-15 03:00:00 (Sun)
  62441978400, #    local_end 1979-09-16 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62441971200, #    utc_start 1979-09-16 00:00:00 (Sun)
  62458995600, #      utc_end 1980-03-31 01:00:00 (Mon)
  62441974800, #  local_start 1979-09-16 01:00:00 (Sun)
  62458999200, #    local_end 1980-03-31 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  62458995600, #    utc_start 1980-03-31 01:00:00 (Mon)
  62474025600, #      utc_end 1980-09-21 00:00:00 (Sun)
  62459002800, #  local_start 1980-03-31 03:00:00 (Mon)
  62474032800, #    local_end 1980-09-21 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474025600, #    utc_start 1980-09-21 00:00:00 (Sun)
  62482834800, #      utc_end 1980-12-31 23:00:00 (Wed)
  62474029200, #  local_start 1980-09-21 01:00:00 (Sun)
  62482838400, #    local_end 1981-01-01 00:00:00 (Thu)
  3600,
  0,
  'CET',
      ],
      [
  62482834800, #    utc_start 1980-12-31 23:00:00 (Wed)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62482838400, #  local_start 1981-01-01 00:00:00 (Thu)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {74}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723181,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723181,
      'utc_rd_secs' => 0,
      'utc_year' => 1982
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723180,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723180,
      'utc_rd_secs' => 82800,
      'utc_year' => 1981
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_MALTA

    $main::fatpacked{"DateTime/TimeZone/Europe/Minsk.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_MINSK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Minsk;
  $DateTime::TimeZone::Europe::Minsk::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Minsk::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295535784, #      utc_end 1879-12-31 22:09:44 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  6616,
  0,
  'LMT',
      ],
      [
  59295535784, #    utc_start 1879-12-31 22:09:44 (Wed)
  60694524600, #      utc_end 1924-05-01 22:10:00 (Thu)
  59295542384, #  local_start 1879-12-31 23:59:44 (Wed)
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  6600,
  0,
  'MMT',
      ],
      [
  60694524600, #    utc_start 1924-05-01 22:10:00 (Thu)
  60888146400, #      utc_end 1930-06-20 22:00:00 (Fri)
  60694531800, #  local_start 1924-05-02 00:10:00 (Fri)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  60888146400, #    utc_start 1930-06-20 22:00:00 (Fri)
  61235902800, #      utc_end 1941-06-27 21:00:00 (Fri)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  61235913600, #    local_end 1941-06-28 00:00:00 (Sat)
  10800,
  0,
  'MSK',
      ],
      [
  61235902800, #    utc_start 1941-06-27 21:00:00 (Fri)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61235910000, #  local_start 1941-06-27 23:00:00 (Fri)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61331032800, #      utc_end 1944-07-02 22:00:00 (Sun)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61331040000, #    local_end 1944-07-03 00:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61331032800, #    utc_start 1944-07-02 22:00:00 (Sun)
  62490603600, #      utc_end 1981-03-31 21:00:00 (Tue)
  61331043600, #  local_start 1944-07-03 01:00:00 (Mon)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  10800,
  0,
  'MSK',
      ],
      [
  62490603600, #    utc_start 1981-03-31 21:00:00 (Tue)
  62506411200, #      utc_end 1981-09-30 20:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  14400,
  1,
  'MSD',
      ],
      [
  62506411200, #    utc_start 1981-09-30 20:00:00 (Wed)
  62522139600, #      utc_end 1982-03-31 21:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  10800,
  0,
  'MSK',
      ],
      [
  62522139600, #    utc_start 1982-03-31 21:00:00 (Wed)
  62537947200, #      utc_end 1982-09-30 20:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  14400,
  1,
  'MSD',
      ],
      [
  62537947200, #    utc_start 1982-09-30 20:00:00 (Thu)
  62553675600, #      utc_end 1983-03-31 21:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  10800,
  0,
  'MSK',
      ],
      [
  62553675600, #    utc_start 1983-03-31 21:00:00 (Thu)
  62569483200, #      utc_end 1983-09-30 20:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  14400,
  1,
  'MSD',
      ],
      [
  62569483200, #    utc_start 1983-09-30 20:00:00 (Fri)
  62585298000, #      utc_end 1984-03-31 21:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62585298000, #    utc_start 1984-03-31 21:00:00 (Sat)
  62601030000, #      utc_end 1984-09-29 23:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62601030000, #    utc_start 1984-09-29 23:00:00 (Sat)
  62616754800, #      utc_end 1985-03-30 23:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62616754800, #    utc_start 1985-03-30 23:00:00 (Sat)
  62632479600, #      utc_end 1985-09-28 23:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62632479600, #    utc_start 1985-09-28 23:00:00 (Sat)
  62648204400, #      utc_end 1986-03-29 23:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62648204400, #    utc_start 1986-03-29 23:00:00 (Sat)
  62663929200, #      utc_end 1986-09-27 23:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62663929200, #    utc_start 1986-09-27 23:00:00 (Sat)
  62679654000, #      utc_end 1987-03-28 23:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62679654000, #    utc_start 1987-03-28 23:00:00 (Sat)
  62695378800, #      utc_end 1987-09-26 23:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62695378800, #    utc_start 1987-09-26 23:00:00 (Sat)
  62711103600, #      utc_end 1988-03-26 23:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62711103600, #    utc_start 1988-03-26 23:00:00 (Sat)
  62726828400, #      utc_end 1988-09-24 23:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62726828400, #    utc_start 1988-09-24 23:00:00 (Sat)
  62742553200, #      utc_end 1989-03-25 23:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62742553200, #    utc_start 1989-03-25 23:00:00 (Sat)
  62758278000, #      utc_end 1989-09-23 23:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62758278000, #    utc_start 1989-09-23 23:00:00 (Sat)
  62766824400, #      utc_end 1989-12-31 21:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62766835200, #    local_end 1990-01-01 00:00:00 (Mon)
  10800,
  0,
  'MSK',
      ],
      [
  62766824400, #    utc_start 1989-12-31 21:00:00 (Sun)
  62806057200, #      utc_end 1991-03-30 23:00:00 (Sat)
  62766835200, #  local_start 1990-01-01 00:00:00 (Mon)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62806057200, #    utc_start 1991-03-30 23:00:00 (Sat)
  62821785600, #      utc_end 1991-09-29 00:00:00 (Sun)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821785600, #    utc_start 1991-09-29 00:00:00 (Sun)
  62837510400, #      utc_end 1992-03-29 00:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837510400, #    utc_start 1992-03-29 00:00:00 (Sun)
  62853235200, #      utc_end 1992-09-27 00:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853235200, #    utc_start 1992-09-27 00:00:00 (Sun)
  62868960000, #      utc_end 1993-03-28 00:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868960000, #    utc_start 1993-03-28 00:00:00 (Sun)
  62884684800, #      utc_end 1993-09-26 00:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884684800, #    utc_start 1993-09-26 00:00:00 (Sun)
  62900409600, #      utc_end 1994-03-27 00:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900409600, #    utc_start 1994-03-27 00:00:00 (Sun)
  62916134400, #      utc_end 1994-09-25 00:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916134400, #    utc_start 1994-09-25 00:00:00 (Sun)
  62931859200, #      utc_end 1995-03-26 00:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931859200, #    utc_start 1995-03-26 00:00:00 (Sun)
  62947584000, #      utc_end 1995-09-24 00:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947584000, #    utc_start 1995-09-24 00:00:00 (Sun)
  62963913600, #      utc_end 1996-03-31 00:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963913600, #    utc_start 1996-03-31 00:00:00 (Sun)
  62982057600, #      utc_end 1996-10-27 00:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62982057600, #    utc_start 1996-10-27 00:00:00 (Sun)
  62995363200, #      utc_end 1997-03-30 00:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995363200, #    utc_start 1997-03-30 00:00:00 (Sun)
  63013507200, #      utc_end 1997-10-26 00:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63013507200, #    utc_start 1997-10-26 00:00:00 (Sun)
  63026812800, #      utc_end 1998-03-29 00:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026812800, #    utc_start 1998-03-29 00:00:00 (Sun)
  63044956800, #      utc_end 1998-10-25 00:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63044956800, #    utc_start 1998-10-25 00:00:00 (Sun)
  63058262400, #      utc_end 1999-03-28 00:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058262400, #    utc_start 1999-03-28 00:00:00 (Sun)
  63077011200, #      utc_end 1999-10-31 00:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077011200, #    utc_start 1999-10-31 00:00:00 (Sun)
  63089712000, #      utc_end 2000-03-26 00:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63089712000, #    utc_start 2000-03-26 00:00:00 (Sun)
  63108460800, #      utc_end 2000-10-29 00:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63108460800, #    utc_start 2000-10-29 00:00:00 (Sun)
  63121161600, #      utc_end 2001-03-25 00:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121161600, #    utc_start 2001-03-25 00:00:00 (Sun)
  63139910400, #      utc_end 2001-10-28 00:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63139910400, #    utc_start 2001-10-28 00:00:00 (Sun)
  63153216000, #      utc_end 2002-03-31 00:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153216000, #    utc_start 2002-03-31 00:00:00 (Sun)
  63171360000, #      utc_end 2002-10-27 00:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171360000, #    utc_start 2002-10-27 00:00:00 (Sun)
  63184665600, #      utc_end 2003-03-30 00:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184665600, #    utc_start 2003-03-30 00:00:00 (Sun)
  63202809600, #      utc_end 2003-10-26 00:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202809600, #    utc_start 2003-10-26 00:00:00 (Sun)
  63216115200, #      utc_end 2004-03-28 00:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216115200, #    utc_start 2004-03-28 00:00:00 (Sun)
  63234864000, #      utc_end 2004-10-31 00:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234864000, #    utc_start 2004-10-31 00:00:00 (Sun)
  63247564800, #      utc_end 2005-03-27 00:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247564800, #    utc_start 2005-03-27 00:00:00 (Sun)
  63266313600, #      utc_end 2005-10-30 00:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266313600, #    utc_start 2005-10-30 00:00:00 (Sun)
  63279014400, #      utc_end 2006-03-26 00:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279014400, #    utc_start 2006-03-26 00:00:00 (Sun)
  63297763200, #      utc_end 2006-10-29 00:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297763200, #    utc_start 2006-10-29 00:00:00 (Sun)
  63310464000, #      utc_end 2007-03-25 00:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310464000, #    utc_start 2007-03-25 00:00:00 (Sun)
  63329212800, #      utc_end 2007-10-28 00:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329212800, #    utc_start 2007-10-28 00:00:00 (Sun)
  63342518400, #      utc_end 2008-03-30 00:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342518400, #    utc_start 2008-03-30 00:00:00 (Sun)
  63360662400, #      utc_end 2008-10-26 00:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360662400, #    utc_start 2008-10-26 00:00:00 (Sun)
  63373968000, #      utc_end 2009-03-29 00:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373968000, #    utc_start 2009-03-29 00:00:00 (Sun)
  63392112000, #      utc_end 2009-10-25 00:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392112000, #    utc_start 2009-10-25 00:00:00 (Sun)
  63405417600, #      utc_end 2010-03-28 00:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405417600, #    utc_start 2010-03-28 00:00:00 (Sun)
  63424166400, #      utc_end 2010-10-31 00:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424166400, #    utc_start 2010-10-31 00:00:00 (Sun)
  63436867200, #      utc_end 2011-03-27 00:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436867200, #    utc_start 2011-03-27 00:00:00 (Sun)
  63549957600, #      utc_end 2014-10-25 22:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549968400, #    local_end 2014-10-26 01:00:00 (Sun)
  10800,
  0,
  'FET',
      ],
      [
  63549957600, #    utc_start 2014-10-25 22:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  10800,
  0,
  'MSK',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {32}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_MINSK

    $main::fatpacked{"DateTime/TimeZone/Europe/Monaco.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_MONACO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Monaco;
  $DateTime::TimeZone::Europe::Monaco::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Monaco::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59649003028, #      utc_end 1891-03-14 23:30:28 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59649004800, #    local_end 1891-03-15 00:00:00 (Sun)
  1772,
  0,
  'LMT',
      ],
      [
  59649003028, #    utc_start 1891-03-14 23:30:28 (Sat)
  60279724239, #      utc_end 1911-03-10 23:50:39 (Fri)
  59649003589, #  local_start 1891-03-14 23:39:49 (Sat)
  60279724800, #    local_end 1911-03-11 00:00:00 (Sat)
  561,
  0,
  'PMT',
      ],
      [
  60279724239, #    utc_start 1911-03-10 23:50:39 (Fri)
  60445868400, #      utc_end 1916-06-14 23:00:00 (Wed)
  60279724239, #  local_start 1911-03-10 23:50:39 (Fri)
  60445868400, #    local_end 1916-06-14 23:00:00 (Wed)
  0,
  0,
  'WET',
      ],
      [
  60445868400, #    utc_start 1916-06-14 23:00:00 (Wed)
  60455286000, #      utc_end 1916-10-01 23:00:00 (Sun)
  60445872000, #  local_start 1916-06-15 00:00:00 (Thu)
  60455289600, #    local_end 1916-10-02 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  60455286000, #    utc_start 1916-10-01 23:00:00 (Sun)
  60470319600, #      utc_end 1917-03-24 23:00:00 (Sat)
  60455286000, #  local_start 1916-10-01 23:00:00 (Sun)
  60470319600, #    local_end 1917-03-24 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60470319600, #    utc_start 1917-03-24 23:00:00 (Sat)
  60487340400, #      utc_end 1917-10-07 23:00:00 (Sun)
  60470323200, #  local_start 1917-03-25 00:00:00 (Sun)
  60487344000, #    local_end 1917-10-08 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  60487340400, #    utc_start 1917-10-07 23:00:00 (Sun)
  60500559600, #      utc_end 1918-03-09 23:00:00 (Sat)
  60487340400, #  local_start 1917-10-07 23:00:00 (Sun)
  60500559600, #    local_end 1918-03-09 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60500559600, #    utc_start 1918-03-09 23:00:00 (Sat)
  60518790000, #      utc_end 1918-10-06 23:00:00 (Sun)
  60500563200, #  local_start 1918-03-10 00:00:00 (Sun)
  60518793600, #    local_end 1918-10-07 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  60518790000, #    utc_start 1918-10-06 23:00:00 (Sun)
  60531404400, #      utc_end 1919-03-01 23:00:00 (Sat)
  60518790000, #  local_start 1918-10-06 23:00:00 (Sun)
  60531404400, #    local_end 1919-03-01 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60531404400, #    utc_start 1919-03-01 23:00:00 (Sat)
  60550239600, #      utc_end 1919-10-05 23:00:00 (Sun)
  60531408000, #  local_start 1919-03-02 00:00:00 (Sun)
  60550243200, #    local_end 1919-10-06 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  60550239600, #    utc_start 1919-10-05 23:00:00 (Sun)
  60561644400, #      utc_end 1920-02-14 23:00:00 (Sat)
  60550239600, #  local_start 1919-10-05 23:00:00 (Sun)
  60561644400, #    local_end 1920-02-14 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60561644400, #    utc_start 1920-02-14 23:00:00 (Sat)
  60583417200, #      utc_end 1920-10-23 23:00:00 (Sat)
  60561648000, #  local_start 1920-02-15 00:00:00 (Sun)
  60583420800, #    local_end 1920-10-24 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60583417200, #    utc_start 1920-10-23 23:00:00 (Sat)
  60595686000, #      utc_end 1921-03-14 23:00:00 (Mon)
  60583417200, #  local_start 1920-10-23 23:00:00 (Sat)
  60595686000, #    local_end 1921-03-14 23:00:00 (Mon)
  0,
  0,
  'WET',
      ],
      [
  60595686000, #    utc_start 1921-03-14 23:00:00 (Mon)
  60615126000, #      utc_end 1921-10-25 23:00:00 (Tue)
  60595689600, #  local_start 1921-03-15 00:00:00 (Tue)
  60615129600, #    local_end 1921-10-26 00:00:00 (Wed)
  3600,
  1,
  'WEST',
      ],
      [
  60615126000, #    utc_start 1921-10-25 23:00:00 (Tue)
  60628172400, #      utc_end 1922-03-25 23:00:00 (Sat)
  60615126000, #  local_start 1921-10-25 23:00:00 (Tue)
  60628172400, #    local_end 1922-03-25 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60628172400, #    utc_start 1922-03-25 23:00:00 (Sat)
  60645106800, #      utc_end 1922-10-07 23:00:00 (Sat)
  60628176000, #  local_start 1922-03-26 00:00:00 (Sun)
  60645110400, #    local_end 1922-10-08 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60645106800, #    utc_start 1922-10-07 23:00:00 (Sat)
  60665065200, #      utc_end 1923-05-26 23:00:00 (Sat)
  60645106800, #  local_start 1922-10-07 23:00:00 (Sat)
  60665065200, #    local_end 1923-05-26 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60665065200, #    utc_start 1923-05-26 23:00:00 (Sat)
  60676556400, #      utc_end 1923-10-06 23:00:00 (Sat)
  60665068800, #  local_start 1923-05-27 00:00:00 (Sun)
  60676560000, #    local_end 1923-10-07 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60676556400, #    utc_start 1923-10-06 23:00:00 (Sat)
  60691676400, #      utc_end 1924-03-29 23:00:00 (Sat)
  60676556400, #  local_start 1923-10-06 23:00:00 (Sat)
  60691676400, #    local_end 1924-03-29 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60691676400, #    utc_start 1924-03-29 23:00:00 (Sat)
  60708006000, #      utc_end 1924-10-04 23:00:00 (Sat)
  60691680000, #  local_start 1924-03-30 00:00:00 (Sun)
  60708009600, #    local_end 1924-10-05 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60708006000, #    utc_start 1924-10-04 23:00:00 (Sat)
  60723730800, #      utc_end 1925-04-04 23:00:00 (Sat)
  60708006000, #  local_start 1924-10-04 23:00:00 (Sat)
  60723730800, #    local_end 1925-04-04 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60723730800, #    utc_start 1925-04-04 23:00:00 (Sat)
  60739455600, #      utc_end 1925-10-03 23:00:00 (Sat)
  60723734400, #  local_start 1925-04-05 00:00:00 (Sun)
  60739459200, #    local_end 1925-10-04 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60739455600, #    utc_start 1925-10-03 23:00:00 (Sat)
  60756390000, #      utc_end 1926-04-17 23:00:00 (Sat)
  60739455600, #  local_start 1925-10-03 23:00:00 (Sat)
  60756390000, #    local_end 1926-04-17 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60756390000, #    utc_start 1926-04-17 23:00:00 (Sat)
  60770905200, #      utc_end 1926-10-02 23:00:00 (Sat)
  60756393600, #  local_start 1926-04-18 00:00:00 (Sun)
  60770908800, #    local_end 1926-10-03 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60770905200, #    utc_start 1926-10-02 23:00:00 (Sat)
  60787234800, #      utc_end 1927-04-09 23:00:00 (Sat)
  60770905200, #  local_start 1926-10-02 23:00:00 (Sat)
  60787234800, #    local_end 1927-04-09 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60787234800, #    utc_start 1927-04-09 23:00:00 (Sat)
  60802354800, #      utc_end 1927-10-01 23:00:00 (Sat)
  60787238400, #  local_start 1927-04-10 00:00:00 (Sun)
  60802358400, #    local_end 1927-10-02 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60802354800, #    utc_start 1927-10-01 23:00:00 (Sat)
  60819289200, #      utc_end 1928-04-14 23:00:00 (Sat)
  60802354800, #  local_start 1927-10-01 23:00:00 (Sat)
  60819289200, #    local_end 1928-04-14 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60819289200, #    utc_start 1928-04-14 23:00:00 (Sat)
  60834409200, #      utc_end 1928-10-06 23:00:00 (Sat)
  60819292800, #  local_start 1928-04-15 00:00:00 (Sun)
  60834412800, #    local_end 1928-10-07 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60834409200, #    utc_start 1928-10-06 23:00:00 (Sat)
  60851343600, #      utc_end 1929-04-20 23:00:00 (Sat)
  60834409200, #  local_start 1928-10-06 23:00:00 (Sat)
  60851343600, #    local_end 1929-04-20 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60851343600, #    utc_start 1929-04-20 23:00:00 (Sat)
  60865858800, #      utc_end 1929-10-05 23:00:00 (Sat)
  60851347200, #  local_start 1929-04-21 00:00:00 (Sun)
  60865862400, #    local_end 1929-10-06 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60865858800, #    utc_start 1929-10-05 23:00:00 (Sat)
  60882188400, #      utc_end 1930-04-12 23:00:00 (Sat)
  60865858800, #  local_start 1929-10-05 23:00:00 (Sat)
  60882188400, #    local_end 1930-04-12 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60882188400, #    utc_start 1930-04-12 23:00:00 (Sat)
  60897308400, #      utc_end 1930-10-04 23:00:00 (Sat)
  60882192000, #  local_start 1930-04-13 00:00:00 (Sun)
  60897312000, #    local_end 1930-10-05 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60897308400, #    utc_start 1930-10-04 23:00:00 (Sat)
  60914242800, #      utc_end 1931-04-18 23:00:00 (Sat)
  60897308400, #  local_start 1930-10-04 23:00:00 (Sat)
  60914242800, #    local_end 1931-04-18 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60914242800, #    utc_start 1931-04-18 23:00:00 (Sat)
  60928758000, #      utc_end 1931-10-03 23:00:00 (Sat)
  60914246400, #  local_start 1931-04-19 00:00:00 (Sun)
  60928761600, #    local_end 1931-10-04 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60928758000, #    utc_start 1931-10-03 23:00:00 (Sat)
  60944482800, #      utc_end 1932-04-02 23:00:00 (Sat)
  60928758000, #  local_start 1931-10-03 23:00:00 (Sat)
  60944482800, #    local_end 1932-04-02 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60944482800, #    utc_start 1932-04-02 23:00:00 (Sat)
  60960207600, #      utc_end 1932-10-01 23:00:00 (Sat)
  60944486400, #  local_start 1932-04-03 00:00:00 (Sun)
  60960211200, #    local_end 1932-10-02 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60960207600, #    utc_start 1932-10-01 23:00:00 (Sat)
  60975327600, #      utc_end 1933-03-25 23:00:00 (Sat)
  60960207600, #  local_start 1932-10-01 23:00:00 (Sat)
  60975327600, #    local_end 1933-03-25 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60975327600, #    utc_start 1933-03-25 23:00:00 (Sat)
  60992262000, #      utc_end 1933-10-07 23:00:00 (Sat)
  60975331200, #  local_start 1933-03-26 00:00:00 (Sun)
  60992265600, #    local_end 1933-10-08 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60992262000, #    utc_start 1933-10-07 23:00:00 (Sat)
  61007986800, #      utc_end 1934-04-07 23:00:00 (Sat)
  60992262000, #  local_start 1933-10-07 23:00:00 (Sat)
  61007986800, #    local_end 1934-04-07 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61007986800, #    utc_start 1934-04-07 23:00:00 (Sat)
  61023711600, #      utc_end 1934-10-06 23:00:00 (Sat)
  61007990400, #  local_start 1934-04-08 00:00:00 (Sun)
  61023715200, #    local_end 1934-10-07 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61023711600, #    utc_start 1934-10-06 23:00:00 (Sat)
  61038831600, #      utc_end 1935-03-30 23:00:00 (Sat)
  61023711600, #  local_start 1934-10-06 23:00:00 (Sat)
  61038831600, #    local_end 1935-03-30 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61038831600, #    utc_start 1935-03-30 23:00:00 (Sat)
  61055161200, #      utc_end 1935-10-05 23:00:00 (Sat)
  61038835200, #  local_start 1935-03-31 00:00:00 (Sun)
  61055164800, #    local_end 1935-10-06 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61055161200, #    utc_start 1935-10-05 23:00:00 (Sat)
  61072095600, #      utc_end 1936-04-18 23:00:00 (Sat)
  61055161200, #  local_start 1935-10-05 23:00:00 (Sat)
  61072095600, #    local_end 1936-04-18 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61072095600, #    utc_start 1936-04-18 23:00:00 (Sat)
  61086610800, #      utc_end 1936-10-03 23:00:00 (Sat)
  61072099200, #  local_start 1936-04-19 00:00:00 (Sun)
  61086614400, #    local_end 1936-10-04 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61086610800, #    utc_start 1936-10-03 23:00:00 (Sat)
  61102335600, #      utc_end 1937-04-03 23:00:00 (Sat)
  61086610800, #  local_start 1936-10-03 23:00:00 (Sat)
  61102335600, #    local_end 1937-04-03 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61102335600, #    utc_start 1937-04-03 23:00:00 (Sat)
  61118060400, #      utc_end 1937-10-02 23:00:00 (Sat)
  61102339200, #  local_start 1937-04-04 00:00:00 (Sun)
  61118064000, #    local_end 1937-10-03 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61118060400, #    utc_start 1937-10-02 23:00:00 (Sat)
  61133180400, #      utc_end 1938-03-26 23:00:00 (Sat)
  61118060400, #  local_start 1937-10-02 23:00:00 (Sat)
  61133180400, #    local_end 1938-03-26 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61133180400, #    utc_start 1938-03-26 23:00:00 (Sat)
  61149510000, #      utc_end 1938-10-01 23:00:00 (Sat)
  61133184000, #  local_start 1938-03-27 00:00:00 (Sun)
  61149513600, #    local_end 1938-10-02 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61149510000, #    utc_start 1938-10-01 23:00:00 (Sat)
  61166444400, #      utc_end 1939-04-15 23:00:00 (Sat)
  61149510000, #  local_start 1938-10-01 23:00:00 (Sat)
  61166444400, #    local_end 1939-04-15 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61166444400, #    utc_start 1939-04-15 23:00:00 (Sat)
  61185193200, #      utc_end 1939-11-18 23:00:00 (Sat)
  61166448000, #  local_start 1939-04-16 00:00:00 (Sun)
  61185196800, #    local_end 1939-11-19 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61185193200, #    utc_start 1939-11-18 23:00:00 (Sat)
  61193671200, #      utc_end 1940-02-25 02:00:00 (Sun)
  61185193200, #  local_start 1939-11-18 23:00:00 (Sat)
  61193671200, #    local_end 1940-02-25 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61193671200, #    utc_start 1940-02-25 02:00:00 (Sun)
  61231244400, #      utc_end 1941-05-04 23:00:00 (Sun)
  61193674800, #  local_start 1940-02-25 03:00:00 (Sun)
  61231248000, #    local_end 1941-05-05 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  61231244400, #    utc_start 1941-05-04 23:00:00 (Sun)
  61244546400, #      utc_end 1941-10-05 22:00:00 (Sun)
  61231251600, #  local_start 1941-05-05 01:00:00 (Mon)
  61244553600, #    local_end 1941-10-06 00:00:00 (Mon)
  7200,
  1,
  'WEMT',
      ],
      [
  61244546400, #    utc_start 1941-10-05 22:00:00 (Sun)
  61257855600, #      utc_end 1942-03-08 23:00:00 (Sun)
  61244550000, #  local_start 1941-10-05 23:00:00 (Sun)
  61257859200, #    local_end 1942-03-09 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  61257855600, #    utc_start 1942-03-08 23:00:00 (Sun)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61257862800, #  local_start 1942-03-09 01:00:00 (Mon)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'WEMT',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'WEMT',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61339417200, #      utc_end 1944-10-07 23:00:00 (Sat)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61339424400, #    local_end 1944-10-08 01:00:00 (Sun)
  7200,
  1,
  'WEMT',
      ],
      [
  61339417200, #    utc_start 1944-10-07 23:00:00 (Sat)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61339420800, #  local_start 1944-10-08 00:00:00 (Sun)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61369059600, #      utc_end 1945-09-16 01:00:00 (Sun)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61369066800, #    local_end 1945-09-16 03:00:00 (Sun)
  7200,
  1,
  'WEMT',
      ],
      [
  61369059600, #    utc_start 1945-09-16 01:00:00 (Sun)
  62332502400, #      utc_end 1976-03-28 00:00:00 (Sun)
  61369063200, #  local_start 1945-09-16 02:00:00 (Sun)
  62332506000, #    local_end 1976-03-28 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62332502400, #    utc_start 1976-03-28 00:00:00 (Sun)
  62348223600, #      utc_end 1976-09-25 23:00:00 (Sat)
  62332509600, #  local_start 1976-03-28 02:00:00 (Sun)
  62348230800, #    local_end 1976-09-26 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62348223600, #    utc_start 1976-09-25 23:00:00 (Sat)
  62356604400, #      utc_end 1976-12-31 23:00:00 (Fri)
  62348227200, #  local_start 1976-09-26 00:00:00 (Sun)
  62356608000, #    local_end 1977-01-01 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62356604400, #    utc_start 1976-12-31 23:00:00 (Fri)
  62364560400, #      utc_end 1977-04-03 01:00:00 (Sun)
  62356608000, #  local_start 1977-01-01 00:00:00 (Sat)
  62364564000, #    local_end 1977-04-03 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62364560400, #    utc_start 1977-04-03 01:00:00 (Sun)
  62379680400, #      utc_end 1977-09-25 01:00:00 (Sun)
  62364567600, #  local_start 1977-04-03 03:00:00 (Sun)
  62379687600, #    local_end 1977-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62379680400, #    utc_start 1977-09-25 01:00:00 (Sun)
  62396010000, #      utc_end 1978-04-02 01:00:00 (Sun)
  62379684000, #  local_start 1977-09-25 02:00:00 (Sun)
  62396013600, #    local_end 1978-04-02 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62396010000, #    utc_start 1978-04-02 01:00:00 (Sun)
  62411734800, #      utc_end 1978-10-01 01:00:00 (Sun)
  62396017200, #  local_start 1978-04-02 03:00:00 (Sun)
  62411742000, #    local_end 1978-10-01 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62411734800, #    utc_start 1978-10-01 01:00:00 (Sun)
  62427459600, #      utc_end 1979-04-01 01:00:00 (Sun)
  62411738400, #  local_start 1978-10-01 02:00:00 (Sun)
  62427463200, #    local_end 1979-04-01 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62427459600, #    utc_start 1979-04-01 01:00:00 (Sun)
  62443184400, #      utc_end 1979-09-30 01:00:00 (Sun)
  62427466800, #  local_start 1979-04-01 03:00:00 (Sun)
  62443191600, #    local_end 1979-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62443184400, #    utc_start 1979-09-30 01:00:00 (Sun)
  62459514000, #      utc_end 1980-04-06 01:00:00 (Sun)
  62443188000, #  local_start 1979-09-30 02:00:00 (Sun)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62459514000, #    utc_start 1980-04-06 01:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474641200, #    local_end 1980-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474637600, #  local_start 1980-09-28 02:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {86}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721720,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721720,
      'utc_rd_secs' => 0,
      'utc_year' => 1978
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721719,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721719,
      'utc_rd_secs' => 82800,
      'utc_year' => 1977
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_MONACO

    $main::fatpacked{"DateTime/TimeZone/Europe/Moscow.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_MOSCOW';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Moscow;
  $DateTime::TimeZone::Europe::Moscow::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Moscow::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295533383, #      utc_end 1879-12-31 21:29:43 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  9017,
  0,
  'LMT',
      ],
      [
  59295533383, #    utc_start 1879-12-31 21:29:43 (Wed)
  60447418183, #      utc_end 1916-07-02 21:29:43 (Sun)
  59295542400, #  local_start 1880-01-01 00:00:00 (Thu)
  60447427200, #    local_end 1916-07-03 00:00:00 (Mon)
  9017,
  0,
  'MMT',
      ],
      [
  60447418183, #    utc_start 1916-07-02 21:29:43 (Sun)
  60478864121, #      utc_end 1917-07-01 20:28:41 (Sun)
  60447427262, #  local_start 1916-07-03 00:01:02 (Mon)
  60478873200, #    local_end 1917-07-01 23:00:00 (Sun)
  9079,
  0,
  'MMT',
      ],
      [
  60478864121, #    utc_start 1917-07-01 20:28:41 (Sun)
  60494329721, #      utc_end 1917-12-27 20:28:41 (Thu)
  60478876800, #  local_start 1917-07-02 00:00:00 (Mon)
  60494342400, #    local_end 1917-12-28 00:00:00 (Fri)
  12679,
  1,
  'MST',
      ],
      [
  60494329721, #    utc_start 1917-12-27 20:28:41 (Thu)
  60507718121, #      utc_end 1918-05-31 19:28:41 (Fri)
  60494338800, #  local_start 1917-12-27 23:00:00 (Thu)
  60507727200, #    local_end 1918-05-31 22:00:00 (Fri)
  9079,
  0,
  'MMT',
      ],
      [
  60507718121, #    utc_start 1918-05-31 19:28:41 (Fri)
  60516966521, #      utc_end 1918-09-15 20:28:41 (Sun)
  60507734400, #  local_start 1918-06-01 00:00:00 (Sat)
  60516982800, #    local_end 1918-09-16 01:00:00 (Mon)
  16279,
  1,
  'MDST',
      ],
      [
  60516966521, #    utc_start 1918-09-15 20:28:41 (Sun)
  60539254121, #      utc_end 1919-05-31 19:28:41 (Sat)
  60516979200, #  local_start 1918-09-16 00:00:00 (Mon)
  60539266800, #    local_end 1919-05-31 23:00:00 (Sat)
  12679,
  1,
  'MST',
      ],
      [
  60539254121, #    utc_start 1919-05-31 19:28:41 (Sat)
  60541853321, #      utc_end 1919-06-30 21:28:41 (Mon)
  60539270400, #  local_start 1919-06-01 00:00:00 (Sun)
  60541869600, #    local_end 1919-07-01 02:00:00 (Tue)
  16279,
  1,
  'MDST',
      ],
      [
  60541853321, #    utc_start 1919-06-30 21:28:41 (Mon)
  60545822400, #      utc_end 1919-08-15 20:00:00 (Fri)
  60541867721, #  local_start 1919-07-01 01:28:41 (Tue)
  60545836800, #    local_end 1919-08-16 00:00:00 (Sat)
  14400,
  1,
  'MSD',
      ],
      [
  60545822400, #    utc_start 1919-08-15 20:00:00 (Fri)
  60593256000, #      utc_end 1921-02-14 20:00:00 (Mon)
  60545833200, #  local_start 1919-08-15 23:00:00 (Fri)
  60593266800, #    local_end 1921-02-14 23:00:00 (Mon)
  10800,
  0,
  'MSK',
      ],
      [
  60593256000, #    utc_start 1921-02-14 20:00:00 (Mon)
  60596190000, #      utc_end 1921-03-20 19:00:00 (Sun)
  60593270400, #  local_start 1921-02-15 00:00:00 (Tue)
  60596204400, #    local_end 1921-03-20 23:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  60596190000, #    utc_start 1921-03-20 19:00:00 (Sun)
  60610359600, #      utc_end 1921-08-31 19:00:00 (Wed)
  60596208000, #  local_start 1921-03-21 00:00:00 (Mon)
  60610377600, #    local_end 1921-09-01 00:00:00 (Thu)
  18000,
  1,
  'MSM',
      ],
      [
  60610359600, #    utc_start 1921-08-31 19:00:00 (Wed)
  60612955200, #      utc_end 1921-09-30 20:00:00 (Fri)
  60610374000, #  local_start 1921-08-31 23:00:00 (Wed)
  60612969600, #    local_end 1921-10-01 00:00:00 (Sat)
  14400,
  1,
  'MSD',
      ],
      [
  60612955200, #    utc_start 1921-09-30 20:00:00 (Fri)
  60644494800, #      utc_end 1922-09-30 21:00:00 (Sat)
  60612966000, #  local_start 1921-09-30 23:00:00 (Fri)
  60644505600, #    local_end 1922-10-01 00:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  60644494800, #    utc_start 1922-09-30 21:00:00 (Sat)
  60888146400, #      utc_end 1930-06-20 22:00:00 (Fri)
  60644502000, #  local_start 1922-09-30 23:00:00 (Sat)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  60888146400, #    utc_start 1930-06-20 22:00:00 (Fri)
  62490603600, #      utc_end 1981-03-31 21:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  10800,
  0,
  'MSK',
      ],
      [
  62490603600, #    utc_start 1981-03-31 21:00:00 (Tue)
  62506411200, #      utc_end 1981-09-30 20:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  14400,
  1,
  'MSD',
      ],
      [
  62506411200, #    utc_start 1981-09-30 20:00:00 (Wed)
  62522139600, #      utc_end 1982-03-31 21:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  10800,
  0,
  'MSK',
      ],
      [
  62522139600, #    utc_start 1982-03-31 21:00:00 (Wed)
  62537947200, #      utc_end 1982-09-30 20:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  14400,
  1,
  'MSD',
      ],
      [
  62537947200, #    utc_start 1982-09-30 20:00:00 (Thu)
  62553675600, #      utc_end 1983-03-31 21:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  10800,
  0,
  'MSK',
      ],
      [
  62553675600, #    utc_start 1983-03-31 21:00:00 (Thu)
  62569483200, #      utc_end 1983-09-30 20:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  14400,
  1,
  'MSD',
      ],
      [
  62569483200, #    utc_start 1983-09-30 20:00:00 (Fri)
  62585298000, #      utc_end 1984-03-31 21:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62585298000, #    utc_start 1984-03-31 21:00:00 (Sat)
  62601030000, #      utc_end 1984-09-29 23:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62601030000, #    utc_start 1984-09-29 23:00:00 (Sat)
  62616754800, #      utc_end 1985-03-30 23:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62616754800, #    utc_start 1985-03-30 23:00:00 (Sat)
  62632479600, #      utc_end 1985-09-28 23:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62632479600, #    utc_start 1985-09-28 23:00:00 (Sat)
  62648204400, #      utc_end 1986-03-29 23:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62648204400, #    utc_start 1986-03-29 23:00:00 (Sat)
  62663929200, #      utc_end 1986-09-27 23:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62663929200, #    utc_start 1986-09-27 23:00:00 (Sat)
  62679654000, #      utc_end 1987-03-28 23:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62679654000, #    utc_start 1987-03-28 23:00:00 (Sat)
  62695378800, #      utc_end 1987-09-26 23:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62695378800, #    utc_start 1987-09-26 23:00:00 (Sat)
  62711103600, #      utc_end 1988-03-26 23:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62711103600, #    utc_start 1988-03-26 23:00:00 (Sat)
  62726828400, #      utc_end 1988-09-24 23:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62726828400, #    utc_start 1988-09-24 23:00:00 (Sat)
  62742553200, #      utc_end 1989-03-25 23:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62742553200, #    utc_start 1989-03-25 23:00:00 (Sat)
  62758278000, #      utc_end 1989-09-23 23:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62758278000, #    utc_start 1989-09-23 23:00:00 (Sat)
  62774002800, #      utc_end 1990-03-24 23:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62774002800, #    utc_start 1990-03-24 23:00:00 (Sat)
  62790332400, #      utc_end 1990-09-29 23:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62790332400, #    utc_start 1990-09-29 23:00:00 (Sat)
  62806057200, #      utc_end 1991-03-30 23:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62806057200, #    utc_start 1991-03-30 23:00:00 (Sat)
  62821785600, #      utc_end 1991-09-29 00:00:00 (Sun)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821785600, #    utc_start 1991-09-29 00:00:00 (Sun)
  62831462400, #      utc_end 1992-01-19 00:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62831462400, #    utc_start 1992-01-19 00:00:00 (Sun)
  62837506800, #      utc_end 1992-03-28 23:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62837506800, #    utc_start 1992-03-28 23:00:00 (Sat)
  62853231600, #      utc_end 1992-09-26 23:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62853231600, #    utc_start 1992-09-26 23:00:00 (Sat)
  62868956400, #      utc_end 1993-03-27 23:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62868956400, #    utc_start 1993-03-27 23:00:00 (Sat)
  62884681200, #      utc_end 1993-09-25 23:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62884681200, #    utc_start 1993-09-25 23:00:00 (Sat)
  62900406000, #      utc_end 1994-03-26 23:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62900406000, #    utc_start 1994-03-26 23:00:00 (Sat)
  62916130800, #      utc_end 1994-09-24 23:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62916130800, #    utc_start 1994-09-24 23:00:00 (Sat)
  62931855600, #      utc_end 1995-03-25 23:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62931855600, #    utc_start 1995-03-25 23:00:00 (Sat)
  62947580400, #      utc_end 1995-09-23 23:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62947580400, #    utc_start 1995-09-23 23:00:00 (Sat)
  62963910000, #      utc_end 1996-03-30 23:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62963910000, #    utc_start 1996-03-30 23:00:00 (Sat)
  62982054000, #      utc_end 1996-10-26 23:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62982054000, #    utc_start 1996-10-26 23:00:00 (Sat)
  62995359600, #      utc_end 1997-03-29 23:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62995359600, #    utc_start 1997-03-29 23:00:00 (Sat)
  63013503600, #      utc_end 1997-10-25 23:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63013503600, #    utc_start 1997-10-25 23:00:00 (Sat)
  63026809200, #      utc_end 1998-03-28 23:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63026809200, #    utc_start 1998-03-28 23:00:00 (Sat)
  63044953200, #      utc_end 1998-10-24 23:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63044953200, #    utc_start 1998-10-24 23:00:00 (Sat)
  63058258800, #      utc_end 1999-03-27 23:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63058258800, #    utc_start 1999-03-27 23:00:00 (Sat)
  63077007600, #      utc_end 1999-10-30 23:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63077007600, #    utc_start 1999-10-30 23:00:00 (Sat)
  63089708400, #      utc_end 2000-03-25 23:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63089708400, #    utc_start 2000-03-25 23:00:00 (Sat)
  63108457200, #      utc_end 2000-10-28 23:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63108457200, #    utc_start 2000-10-28 23:00:00 (Sat)
  63121158000, #      utc_end 2001-03-24 23:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63121158000, #    utc_start 2001-03-24 23:00:00 (Sat)
  63139906800, #      utc_end 2001-10-27 23:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63139906800, #    utc_start 2001-10-27 23:00:00 (Sat)
  63153212400, #      utc_end 2002-03-30 23:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63153212400, #    utc_start 2002-03-30 23:00:00 (Sat)
  63171356400, #      utc_end 2002-10-26 23:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63171356400, #    utc_start 2002-10-26 23:00:00 (Sat)
  63184662000, #      utc_end 2003-03-29 23:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63184662000, #    utc_start 2003-03-29 23:00:00 (Sat)
  63202806000, #      utc_end 2003-10-25 23:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63202806000, #    utc_start 2003-10-25 23:00:00 (Sat)
  63216111600, #      utc_end 2004-03-27 23:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63216111600, #    utc_start 2004-03-27 23:00:00 (Sat)
  63234860400, #      utc_end 2004-10-30 23:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63234860400, #    utc_start 2004-10-30 23:00:00 (Sat)
  63247561200, #      utc_end 2005-03-26 23:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63247561200, #    utc_start 2005-03-26 23:00:00 (Sat)
  63266310000, #      utc_end 2005-10-29 23:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63266310000, #    utc_start 2005-10-29 23:00:00 (Sat)
  63279010800, #      utc_end 2006-03-25 23:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63279010800, #    utc_start 2006-03-25 23:00:00 (Sat)
  63297759600, #      utc_end 2006-10-28 23:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63297759600, #    utc_start 2006-10-28 23:00:00 (Sat)
  63310460400, #      utc_end 2007-03-24 23:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63310460400, #    utc_start 2007-03-24 23:00:00 (Sat)
  63329209200, #      utc_end 2007-10-27 23:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63329209200, #    utc_start 2007-10-27 23:00:00 (Sat)
  63342514800, #      utc_end 2008-03-29 23:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63342514800, #    utc_start 2008-03-29 23:00:00 (Sat)
  63360658800, #      utc_end 2008-10-25 23:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63360658800, #    utc_start 2008-10-25 23:00:00 (Sat)
  63373964400, #      utc_end 2009-03-28 23:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63373964400, #    utc_start 2009-03-28 23:00:00 (Sat)
  63392108400, #      utc_end 2009-10-24 23:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63392108400, #    utc_start 2009-10-24 23:00:00 (Sat)
  63405414000, #      utc_end 2010-03-27 23:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63405414000, #    utc_start 2010-03-27 23:00:00 (Sat)
  63424162800, #      utc_end 2010-10-30 23:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63424162800, #    utc_start 2010-10-30 23:00:00 (Sat)
  63436863600, #      utc_end 2011-03-26 23:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63436863600, #    utc_start 2011-03-26 23:00:00 (Sat)
  63549957600, #      utc_end 2014-10-25 22:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  14400,
  0,
  'MSK',
      ],
      [
  63549957600, #    utc_start 2014-10-25 22:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  10800,
  0,
  'MSK',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {38}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_MOSCOW

    $main::fatpacked{"DateTime/TimeZone/Europe/Oslo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_OSLO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Oslo;
  $DateTime::TimeZone::Europe::Oslo::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Oslo::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59768925420, #      utc_end 1894-12-31 23:17:00 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59768928000, #    local_end 1895-01-01 00:00:00 (Tue)
  2580,
  0,
  'LMT',
      ],
      [
  59768925420, #    utc_start 1894-12-31 23:17:00 (Mon)
  60443798400, #      utc_end 1916-05-22 00:00:00 (Mon)
  59768929020, #  local_start 1895-01-01 00:17:00 (Tue)
  60443802000, #    local_end 1916-05-22 01:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60443798400, #    utc_start 1916-05-22 00:00:00 (Mon)
  60455109600, #      utc_end 1916-09-29 22:00:00 (Fri)
  60443805600, #  local_start 1916-05-22 02:00:00 (Mon)
  60455116800, #    local_end 1916-09-30 00:00:00 (Sat)
  7200,
  1,
  'CEST',
      ],
      [
  60455109600, #    utc_start 1916-09-29 22:00:00 (Fri)
  61208172000, #      utc_end 1940-08-10 22:00:00 (Sat)
  60455113200, #  local_start 1916-09-29 23:00:00 (Fri)
  61208175600, #    local_end 1940-08-10 23:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  61208172000, #    utc_start 1940-08-10 22:00:00 (Sat)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61208179200, #  local_start 1940-08-11 00:00:00 (Sun)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61338906000, #      utc_end 1944-10-02 01:00:00 (Mon)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61338913200, #    local_end 1944-10-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61338906000, #    utc_start 1944-10-02 01:00:00 (Mon)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61338909600, #  local_start 1944-10-02 02:00:00 (Mon)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61370355600, #      utc_end 1945-10-01 01:00:00 (Mon)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61370362800, #    local_end 1945-10-01 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61370355600, #    utc_start 1945-10-01 01:00:00 (Mon)
  61794838800, #      utc_end 1959-03-15 01:00:00 (Sun)
  61370359200, #  local_start 1945-10-01 02:00:00 (Mon)
  61794842400, #    local_end 1959-03-15 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61794838800, #    utc_start 1959-03-15 01:00:00 (Sun)
  61811168400, #      utc_end 1959-09-20 01:00:00 (Sun)
  61794846000, #  local_start 1959-03-15 03:00:00 (Sun)
  61811175600, #    local_end 1959-09-20 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61811168400, #    utc_start 1959-09-20 01:00:00 (Sun)
  61826893200, #      utc_end 1960-03-20 01:00:00 (Sun)
  61811172000, #  local_start 1959-09-20 02:00:00 (Sun)
  61826896800, #    local_end 1960-03-20 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61826893200, #    utc_start 1960-03-20 01:00:00 (Sun)
  61842618000, #      utc_end 1960-09-18 01:00:00 (Sun)
  61826900400, #  local_start 1960-03-20 03:00:00 (Sun)
  61842625200, #    local_end 1960-09-18 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61842618000, #    utc_start 1960-09-18 01:00:00 (Sun)
  61858342800, #      utc_end 1961-03-19 01:00:00 (Sun)
  61842621600, #  local_start 1960-09-18 02:00:00 (Sun)
  61858346400, #    local_end 1961-03-19 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61858342800, #    utc_start 1961-03-19 01:00:00 (Sun)
  61874067600, #      utc_end 1961-09-17 01:00:00 (Sun)
  61858350000, #  local_start 1961-03-19 03:00:00 (Sun)
  61874074800, #    local_end 1961-09-17 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61874067600, #    utc_start 1961-09-17 01:00:00 (Sun)
  61889792400, #      utc_end 1962-03-18 01:00:00 (Sun)
  61874071200, #  local_start 1961-09-17 02:00:00 (Sun)
  61889796000, #    local_end 1962-03-18 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61889792400, #    utc_start 1962-03-18 01:00:00 (Sun)
  61905517200, #      utc_end 1962-09-16 01:00:00 (Sun)
  61889799600, #  local_start 1962-03-18 03:00:00 (Sun)
  61905524400, #    local_end 1962-09-16 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61905517200, #    utc_start 1962-09-16 01:00:00 (Sun)
  61921242000, #      utc_end 1963-03-17 01:00:00 (Sun)
  61905520800, #  local_start 1962-09-16 02:00:00 (Sun)
  61921245600, #    local_end 1963-03-17 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61921242000, #    utc_start 1963-03-17 01:00:00 (Sun)
  61936966800, #      utc_end 1963-09-15 01:00:00 (Sun)
  61921249200, #  local_start 1963-03-17 03:00:00 (Sun)
  61936974000, #    local_end 1963-09-15 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61936966800, #    utc_start 1963-09-15 01:00:00 (Sun)
  61952691600, #      utc_end 1964-03-15 01:00:00 (Sun)
  61936970400, #  local_start 1963-09-15 02:00:00 (Sun)
  61952695200, #    local_end 1964-03-15 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61952691600, #    utc_start 1964-03-15 01:00:00 (Sun)
  61969021200, #      utc_end 1964-09-20 01:00:00 (Sun)
  61952698800, #  local_start 1964-03-15 03:00:00 (Sun)
  61969028400, #    local_end 1964-09-20 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61969021200, #    utc_start 1964-09-20 01:00:00 (Sun)
  61987770000, #      utc_end 1965-04-25 01:00:00 (Sun)
  61969024800, #  local_start 1964-09-20 02:00:00 (Sun)
  61987773600, #    local_end 1965-04-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61987770000, #    utc_start 1965-04-25 01:00:00 (Sun)
  62000470800, #      utc_end 1965-09-19 01:00:00 (Sun)
  61987777200, #  local_start 1965-04-25 03:00:00 (Sun)
  62000478000, #    local_end 1965-09-19 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62000470800, #    utc_start 1965-09-19 01:00:00 (Sun)
  62451212400, #      utc_end 1979-12-31 23:00:00 (Mon)
  62000474400, #  local_start 1965-09-19 02:00:00 (Sun)
  62451216000, #    local_end 1980-01-01 00:00:00 (Tue)
  3600,
  0,
  'CET',
      ],
      [
  62451212400, #    utc_start 1979-12-31 23:00:00 (Mon)
  62459514000, #      utc_end 1980-04-06 01:00:00 (Sun)
  62451216000, #  local_start 1980-01-01 00:00:00 (Tue)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62459514000, #    utc_start 1980-04-06 01:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474641200, #    local_end 1980-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474637600, #  local_start 1980-09-28 02:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {60}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722815,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722815,
      'utc_rd_secs' => 0,
      'utc_year' => 1981
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722814,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722814,
      'utc_rd_secs' => 82800,
      'utc_year' => 1980
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_OSLO

    $main::fatpacked{"DateTime/TimeZone/Europe/Paris.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_PARIS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Paris;
  $DateTime::TimeZone::Europe::Paris::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Paris::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59649004299, #      utc_end 1891-03-14 23:51:39 (Sat)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59649004860, #    local_end 1891-03-15 00:01:00 (Sun)
  561,
  0,
  'LMT',
      ],
      [
  59649004299, #    utc_start 1891-03-14 23:51:39 (Sat)
  60279724299, #      utc_end 1911-03-10 23:51:39 (Fri)
  59649004860, #  local_start 1891-03-15 00:01:00 (Sun)
  60279724860, #    local_end 1911-03-11 00:01:00 (Sat)
  561,
  0,
  'PMT',
      ],
      [
  60279724299, #    utc_start 1911-03-10 23:51:39 (Fri)
  60445868400, #      utc_end 1916-06-14 23:00:00 (Wed)
  60279724299, #  local_start 1911-03-10 23:51:39 (Fri)
  60445868400, #    local_end 1916-06-14 23:00:00 (Wed)
  0,
  0,
  'WET',
      ],
      [
  60445868400, #    utc_start 1916-06-14 23:00:00 (Wed)
  60455286000, #      utc_end 1916-10-01 23:00:00 (Sun)
  60445872000, #  local_start 1916-06-15 00:00:00 (Thu)
  60455289600, #    local_end 1916-10-02 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  60455286000, #    utc_start 1916-10-01 23:00:00 (Sun)
  60470319600, #      utc_end 1917-03-24 23:00:00 (Sat)
  60455286000, #  local_start 1916-10-01 23:00:00 (Sun)
  60470319600, #    local_end 1917-03-24 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60470319600, #    utc_start 1917-03-24 23:00:00 (Sat)
  60487340400, #      utc_end 1917-10-07 23:00:00 (Sun)
  60470323200, #  local_start 1917-03-25 00:00:00 (Sun)
  60487344000, #    local_end 1917-10-08 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  60487340400, #    utc_start 1917-10-07 23:00:00 (Sun)
  60500559600, #      utc_end 1918-03-09 23:00:00 (Sat)
  60487340400, #  local_start 1917-10-07 23:00:00 (Sun)
  60500559600, #    local_end 1918-03-09 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60500559600, #    utc_start 1918-03-09 23:00:00 (Sat)
  60518790000, #      utc_end 1918-10-06 23:00:00 (Sun)
  60500563200, #  local_start 1918-03-10 00:00:00 (Sun)
  60518793600, #    local_end 1918-10-07 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  60518790000, #    utc_start 1918-10-06 23:00:00 (Sun)
  60531404400, #      utc_end 1919-03-01 23:00:00 (Sat)
  60518790000, #  local_start 1918-10-06 23:00:00 (Sun)
  60531404400, #    local_end 1919-03-01 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60531404400, #    utc_start 1919-03-01 23:00:00 (Sat)
  60550239600, #      utc_end 1919-10-05 23:00:00 (Sun)
  60531408000, #  local_start 1919-03-02 00:00:00 (Sun)
  60550243200, #    local_end 1919-10-06 00:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  60550239600, #    utc_start 1919-10-05 23:00:00 (Sun)
  60561644400, #      utc_end 1920-02-14 23:00:00 (Sat)
  60550239600, #  local_start 1919-10-05 23:00:00 (Sun)
  60561644400, #    local_end 1920-02-14 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60561644400, #    utc_start 1920-02-14 23:00:00 (Sat)
  60583417200, #      utc_end 1920-10-23 23:00:00 (Sat)
  60561648000, #  local_start 1920-02-15 00:00:00 (Sun)
  60583420800, #    local_end 1920-10-24 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60583417200, #    utc_start 1920-10-23 23:00:00 (Sat)
  60595686000, #      utc_end 1921-03-14 23:00:00 (Mon)
  60583417200, #  local_start 1920-10-23 23:00:00 (Sat)
  60595686000, #    local_end 1921-03-14 23:00:00 (Mon)
  0,
  0,
  'WET',
      ],
      [
  60595686000, #    utc_start 1921-03-14 23:00:00 (Mon)
  60615126000, #      utc_end 1921-10-25 23:00:00 (Tue)
  60595689600, #  local_start 1921-03-15 00:00:00 (Tue)
  60615129600, #    local_end 1921-10-26 00:00:00 (Wed)
  3600,
  1,
  'WEST',
      ],
      [
  60615126000, #    utc_start 1921-10-25 23:00:00 (Tue)
  60628172400, #      utc_end 1922-03-25 23:00:00 (Sat)
  60615126000, #  local_start 1921-10-25 23:00:00 (Tue)
  60628172400, #    local_end 1922-03-25 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60628172400, #    utc_start 1922-03-25 23:00:00 (Sat)
  60645106800, #      utc_end 1922-10-07 23:00:00 (Sat)
  60628176000, #  local_start 1922-03-26 00:00:00 (Sun)
  60645110400, #    local_end 1922-10-08 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60645106800, #    utc_start 1922-10-07 23:00:00 (Sat)
  60665065200, #      utc_end 1923-05-26 23:00:00 (Sat)
  60645106800, #  local_start 1922-10-07 23:00:00 (Sat)
  60665065200, #    local_end 1923-05-26 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60665065200, #    utc_start 1923-05-26 23:00:00 (Sat)
  60676556400, #      utc_end 1923-10-06 23:00:00 (Sat)
  60665068800, #  local_start 1923-05-27 00:00:00 (Sun)
  60676560000, #    local_end 1923-10-07 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60676556400, #    utc_start 1923-10-06 23:00:00 (Sat)
  60691676400, #      utc_end 1924-03-29 23:00:00 (Sat)
  60676556400, #  local_start 1923-10-06 23:00:00 (Sat)
  60691676400, #    local_end 1924-03-29 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60691676400, #    utc_start 1924-03-29 23:00:00 (Sat)
  60708006000, #      utc_end 1924-10-04 23:00:00 (Sat)
  60691680000, #  local_start 1924-03-30 00:00:00 (Sun)
  60708009600, #    local_end 1924-10-05 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60708006000, #    utc_start 1924-10-04 23:00:00 (Sat)
  60723730800, #      utc_end 1925-04-04 23:00:00 (Sat)
  60708006000, #  local_start 1924-10-04 23:00:00 (Sat)
  60723730800, #    local_end 1925-04-04 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60723730800, #    utc_start 1925-04-04 23:00:00 (Sat)
  60739455600, #      utc_end 1925-10-03 23:00:00 (Sat)
  60723734400, #  local_start 1925-04-05 00:00:00 (Sun)
  60739459200, #    local_end 1925-10-04 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60739455600, #    utc_start 1925-10-03 23:00:00 (Sat)
  60756390000, #      utc_end 1926-04-17 23:00:00 (Sat)
  60739455600, #  local_start 1925-10-03 23:00:00 (Sat)
  60756390000, #    local_end 1926-04-17 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60756390000, #    utc_start 1926-04-17 23:00:00 (Sat)
  60770905200, #      utc_end 1926-10-02 23:00:00 (Sat)
  60756393600, #  local_start 1926-04-18 00:00:00 (Sun)
  60770908800, #    local_end 1926-10-03 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60770905200, #    utc_start 1926-10-02 23:00:00 (Sat)
  60787234800, #      utc_end 1927-04-09 23:00:00 (Sat)
  60770905200, #  local_start 1926-10-02 23:00:00 (Sat)
  60787234800, #    local_end 1927-04-09 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60787234800, #    utc_start 1927-04-09 23:00:00 (Sat)
  60802354800, #      utc_end 1927-10-01 23:00:00 (Sat)
  60787238400, #  local_start 1927-04-10 00:00:00 (Sun)
  60802358400, #    local_end 1927-10-02 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60802354800, #    utc_start 1927-10-01 23:00:00 (Sat)
  60819289200, #      utc_end 1928-04-14 23:00:00 (Sat)
  60802354800, #  local_start 1927-10-01 23:00:00 (Sat)
  60819289200, #    local_end 1928-04-14 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60819289200, #    utc_start 1928-04-14 23:00:00 (Sat)
  60834409200, #      utc_end 1928-10-06 23:00:00 (Sat)
  60819292800, #  local_start 1928-04-15 00:00:00 (Sun)
  60834412800, #    local_end 1928-10-07 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60834409200, #    utc_start 1928-10-06 23:00:00 (Sat)
  60851343600, #      utc_end 1929-04-20 23:00:00 (Sat)
  60834409200, #  local_start 1928-10-06 23:00:00 (Sat)
  60851343600, #    local_end 1929-04-20 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60851343600, #    utc_start 1929-04-20 23:00:00 (Sat)
  60865858800, #      utc_end 1929-10-05 23:00:00 (Sat)
  60851347200, #  local_start 1929-04-21 00:00:00 (Sun)
  60865862400, #    local_end 1929-10-06 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60865858800, #    utc_start 1929-10-05 23:00:00 (Sat)
  60882188400, #      utc_end 1930-04-12 23:00:00 (Sat)
  60865858800, #  local_start 1929-10-05 23:00:00 (Sat)
  60882188400, #    local_end 1930-04-12 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60882188400, #    utc_start 1930-04-12 23:00:00 (Sat)
  60897308400, #      utc_end 1930-10-04 23:00:00 (Sat)
  60882192000, #  local_start 1930-04-13 00:00:00 (Sun)
  60897312000, #    local_end 1930-10-05 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60897308400, #    utc_start 1930-10-04 23:00:00 (Sat)
  60914242800, #      utc_end 1931-04-18 23:00:00 (Sat)
  60897308400, #  local_start 1930-10-04 23:00:00 (Sat)
  60914242800, #    local_end 1931-04-18 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60914242800, #    utc_start 1931-04-18 23:00:00 (Sat)
  60928758000, #      utc_end 1931-10-03 23:00:00 (Sat)
  60914246400, #  local_start 1931-04-19 00:00:00 (Sun)
  60928761600, #    local_end 1931-10-04 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60928758000, #    utc_start 1931-10-03 23:00:00 (Sat)
  60944482800, #      utc_end 1932-04-02 23:00:00 (Sat)
  60928758000, #  local_start 1931-10-03 23:00:00 (Sat)
  60944482800, #    local_end 1932-04-02 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60944482800, #    utc_start 1932-04-02 23:00:00 (Sat)
  60960207600, #      utc_end 1932-10-01 23:00:00 (Sat)
  60944486400, #  local_start 1932-04-03 00:00:00 (Sun)
  60960211200, #    local_end 1932-10-02 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60960207600, #    utc_start 1932-10-01 23:00:00 (Sat)
  60975327600, #      utc_end 1933-03-25 23:00:00 (Sat)
  60960207600, #  local_start 1932-10-01 23:00:00 (Sat)
  60975327600, #    local_end 1933-03-25 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  60975327600, #    utc_start 1933-03-25 23:00:00 (Sat)
  60992262000, #      utc_end 1933-10-07 23:00:00 (Sat)
  60975331200, #  local_start 1933-03-26 00:00:00 (Sun)
  60992265600, #    local_end 1933-10-08 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  60992262000, #    utc_start 1933-10-07 23:00:00 (Sat)
  61007986800, #      utc_end 1934-04-07 23:00:00 (Sat)
  60992262000, #  local_start 1933-10-07 23:00:00 (Sat)
  61007986800, #    local_end 1934-04-07 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61007986800, #    utc_start 1934-04-07 23:00:00 (Sat)
  61023711600, #      utc_end 1934-10-06 23:00:00 (Sat)
  61007990400, #  local_start 1934-04-08 00:00:00 (Sun)
  61023715200, #    local_end 1934-10-07 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61023711600, #    utc_start 1934-10-06 23:00:00 (Sat)
  61038831600, #      utc_end 1935-03-30 23:00:00 (Sat)
  61023711600, #  local_start 1934-10-06 23:00:00 (Sat)
  61038831600, #    local_end 1935-03-30 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61038831600, #    utc_start 1935-03-30 23:00:00 (Sat)
  61055161200, #      utc_end 1935-10-05 23:00:00 (Sat)
  61038835200, #  local_start 1935-03-31 00:00:00 (Sun)
  61055164800, #    local_end 1935-10-06 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61055161200, #    utc_start 1935-10-05 23:00:00 (Sat)
  61072095600, #      utc_end 1936-04-18 23:00:00 (Sat)
  61055161200, #  local_start 1935-10-05 23:00:00 (Sat)
  61072095600, #    local_end 1936-04-18 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61072095600, #    utc_start 1936-04-18 23:00:00 (Sat)
  61086610800, #      utc_end 1936-10-03 23:00:00 (Sat)
  61072099200, #  local_start 1936-04-19 00:00:00 (Sun)
  61086614400, #    local_end 1936-10-04 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61086610800, #    utc_start 1936-10-03 23:00:00 (Sat)
  61102335600, #      utc_end 1937-04-03 23:00:00 (Sat)
  61086610800, #  local_start 1936-10-03 23:00:00 (Sat)
  61102335600, #    local_end 1937-04-03 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61102335600, #    utc_start 1937-04-03 23:00:00 (Sat)
  61118060400, #      utc_end 1937-10-02 23:00:00 (Sat)
  61102339200, #  local_start 1937-04-04 00:00:00 (Sun)
  61118064000, #    local_end 1937-10-03 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61118060400, #    utc_start 1937-10-02 23:00:00 (Sat)
  61133180400, #      utc_end 1938-03-26 23:00:00 (Sat)
  61118060400, #  local_start 1937-10-02 23:00:00 (Sat)
  61133180400, #    local_end 1938-03-26 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61133180400, #    utc_start 1938-03-26 23:00:00 (Sat)
  61149510000, #      utc_end 1938-10-01 23:00:00 (Sat)
  61133184000, #  local_start 1938-03-27 00:00:00 (Sun)
  61149513600, #    local_end 1938-10-02 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61149510000, #    utc_start 1938-10-01 23:00:00 (Sat)
  61166444400, #      utc_end 1939-04-15 23:00:00 (Sat)
  61149510000, #  local_start 1938-10-01 23:00:00 (Sat)
  61166444400, #    local_end 1939-04-15 23:00:00 (Sat)
  0,
  0,
  'WET',
      ],
      [
  61166444400, #    utc_start 1939-04-15 23:00:00 (Sat)
  61185193200, #      utc_end 1939-11-18 23:00:00 (Sat)
  61166448000, #  local_start 1939-04-16 00:00:00 (Sun)
  61185196800, #    local_end 1939-11-19 00:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  61185193200, #    utc_start 1939-11-18 23:00:00 (Sat)
  61193671200, #      utc_end 1940-02-25 02:00:00 (Sun)
  61185193200, #  local_start 1939-11-18 23:00:00 (Sat)
  61193671200, #    local_end 1940-02-25 02:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  61193671200, #    utc_start 1940-02-25 02:00:00 (Sun)
  61203247200, #      utc_end 1940-06-14 22:00:00 (Fri)
  61193674800, #  local_start 1940-02-25 03:00:00 (Sun)
  61203250800, #    local_end 1940-06-14 23:00:00 (Fri)
  3600,
  1,
  'WEST',
      ],
      [
  61203247200, #    utc_start 1940-06-14 22:00:00 (Fri)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61203254400, #  local_start 1940-06-15 00:00:00 (Sat)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61335612000, #      utc_end 1944-08-24 22:00:00 (Thu)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61335619200, #    local_end 1944-08-25 00:00:00 (Fri)
  7200,
  1,
  'CEST',
      ],
      [
  61335612000, #    utc_start 1944-08-24 22:00:00 (Thu)
  61339417200, #      utc_end 1944-10-07 23:00:00 (Sat)
  61335619200, #  local_start 1944-08-25 00:00:00 (Fri)
  61339424400, #    local_end 1944-10-08 01:00:00 (Sun)
  7200,
  1,
  'WEMT',
      ],
      [
  61339417200, #    utc_start 1944-10-07 23:00:00 (Sat)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61339420800, #  local_start 1944-10-08 00:00:00 (Sun)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  1,
  'WEST',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61369059600, #      utc_end 1945-09-16 01:00:00 (Sun)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61369066800, #    local_end 1945-09-16 03:00:00 (Sun)
  7200,
  1,
  'WEMT',
      ],
      [
  61369059600, #    utc_start 1945-09-16 01:00:00 (Sun)
  62332502400, #      utc_end 1976-03-28 00:00:00 (Sun)
  61369063200, #  local_start 1945-09-16 02:00:00 (Sun)
  62332506000, #    local_end 1976-03-28 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62332502400, #    utc_start 1976-03-28 00:00:00 (Sun)
  62348223600, #      utc_end 1976-09-25 23:00:00 (Sat)
  62332509600, #  local_start 1976-03-28 02:00:00 (Sun)
  62348230800, #    local_end 1976-09-26 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62348223600, #    utc_start 1976-09-25 23:00:00 (Sat)
  62356604400, #      utc_end 1976-12-31 23:00:00 (Fri)
  62348227200, #  local_start 1976-09-26 00:00:00 (Sun)
  62356608000, #    local_end 1977-01-01 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62356604400, #    utc_start 1976-12-31 23:00:00 (Fri)
  62364560400, #      utc_end 1977-04-03 01:00:00 (Sun)
  62356608000, #  local_start 1977-01-01 00:00:00 (Sat)
  62364564000, #    local_end 1977-04-03 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62364560400, #    utc_start 1977-04-03 01:00:00 (Sun)
  62379680400, #      utc_end 1977-09-25 01:00:00 (Sun)
  62364567600, #  local_start 1977-04-03 03:00:00 (Sun)
  62379687600, #    local_end 1977-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62379680400, #    utc_start 1977-09-25 01:00:00 (Sun)
  62396010000, #      utc_end 1978-04-02 01:00:00 (Sun)
  62379684000, #  local_start 1977-09-25 02:00:00 (Sun)
  62396013600, #    local_end 1978-04-02 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62396010000, #    utc_start 1978-04-02 01:00:00 (Sun)
  62411734800, #      utc_end 1978-10-01 01:00:00 (Sun)
  62396017200, #  local_start 1978-04-02 03:00:00 (Sun)
  62411742000, #    local_end 1978-10-01 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62411734800, #    utc_start 1978-10-01 01:00:00 (Sun)
  62427459600, #      utc_end 1979-04-01 01:00:00 (Sun)
  62411738400, #  local_start 1978-10-01 02:00:00 (Sun)
  62427463200, #    local_end 1979-04-01 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62427459600, #    utc_start 1979-04-01 01:00:00 (Sun)
  62443184400, #      utc_end 1979-09-30 01:00:00 (Sun)
  62427466800, #  local_start 1979-04-01 03:00:00 (Sun)
  62443191600, #    local_end 1979-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62443184400, #    utc_start 1979-09-30 01:00:00 (Sun)
  62459514000, #      utc_end 1980-04-06 01:00:00 (Sun)
  62443188000, #  local_start 1979-09-30 02:00:00 (Sun)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62459514000, #    utc_start 1980-04-06 01:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474641200, #    local_end 1980-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474637600, #  local_start 1980-09-28 02:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {83}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721720,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721720,
      'utc_rd_secs' => 0,
      'utc_year' => 1978
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 721719,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 721719,
      'utc_rd_secs' => 82800,
      'utc_year' => 1977
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_PARIS

    $main::fatpacked{"DateTime/TimeZone/Europe/Prague.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_PRAGUE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Prague;
  $DateTime::TimeZone::Europe::Prague::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Prague::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  58348854136, #      utc_end 1849-12-31 23:02:16 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  58348857600, #    local_end 1850-01-01 00:00:00 (Tue)
  3464,
  0,
  'LMT',
      ],
      [
  58348854136, #    utc_start 1849-12-31 23:02:16 (Mon)
  59666281336, #      utc_end 1891-09-30 23:02:16 (Wed)
  58348857600, #  local_start 1850-01-01 00:00:00 (Tue)
  59666284800, #    local_end 1891-10-01 00:00:00 (Thu)
  3464,
  0,
  'PMT',
      ],
      [
  59666281336, #    utc_start 1891-09-30 23:02:16 (Wed)
  60441976800, #      utc_end 1916-04-30 22:00:00 (Sun)
  59666284936, #  local_start 1891-10-01 00:02:16 (Thu)
  60441980400, #    local_end 1916-04-30 23:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60441976800, #    utc_start 1916-04-30 22:00:00 (Sun)
  60455199600, #      utc_end 1916-09-30 23:00:00 (Sat)
  60441984000, #  local_start 1916-05-01 00:00:00 (Mon)
  60455206800, #    local_end 1916-10-01 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60455199600, #    utc_start 1916-09-30 23:00:00 (Sat)
  60472227600, #      utc_end 1917-04-16 01:00:00 (Mon)
  60455203200, #  local_start 1916-10-01 00:00:00 (Sun)
  60472231200, #    local_end 1917-04-16 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60472227600, #    utc_start 1917-04-16 01:00:00 (Mon)
  60485533200, #      utc_end 1917-09-17 01:00:00 (Mon)
  60472234800, #  local_start 1917-04-16 03:00:00 (Mon)
  60485540400, #    local_end 1917-09-17 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60485533200, #    utc_start 1917-09-17 01:00:00 (Mon)
  60503677200, #      utc_end 1918-04-15 01:00:00 (Mon)
  60485536800, #  local_start 1917-09-17 02:00:00 (Mon)
  60503680800, #    local_end 1918-04-15 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60503677200, #    utc_start 1918-04-15 01:00:00 (Mon)
  60516982800, #      utc_end 1918-09-16 01:00:00 (Mon)
  60503684400, #  local_start 1918-04-15 03:00:00 (Mon)
  60516990000, #    local_end 1918-09-16 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60516982800, #    utc_start 1918-09-16 01:00:00 (Mon)
  61196778000, #      utc_end 1940-04-01 01:00:00 (Mon)
  60516986400, #  local_start 1918-09-16 02:00:00 (Mon)
  61196781600, #    local_end 1940-04-01 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61196778000, #    utc_start 1940-04-01 01:00:00 (Mon)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61196785200, #  local_start 1940-04-01 03:00:00 (Mon)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61337610000, #      utc_end 1944-09-17 01:00:00 (Sun)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61337617200, #    local_end 1944-09-17 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61337610000, #    utc_start 1944-09-17 01:00:00 (Sun)
  61355149200, #      utc_end 1945-04-08 01:00:00 (Sun)
  61337613600, #  local_start 1944-09-17 02:00:00 (Sun)
  61355152800, #    local_end 1945-04-08 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61355149200, #    utc_start 1945-04-08 01:00:00 (Sun)
  61374502800, #      utc_end 1945-11-18 01:00:00 (Sun)
  61355156400, #  local_start 1945-04-08 03:00:00 (Sun)
  61374510000, #    local_end 1945-11-18 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61374502800, #    utc_start 1945-11-18 01:00:00 (Sun)
  61389104400, #      utc_end 1946-05-06 01:00:00 (Mon)
  61374506400, #  local_start 1945-11-18 02:00:00 (Sun)
  61389108000, #    local_end 1946-05-06 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61389104400, #    utc_start 1946-05-06 01:00:00 (Mon)
  61402323600, #      utc_end 1946-10-06 01:00:00 (Sun)
  61389111600, #  local_start 1946-05-06 03:00:00 (Mon)
  61402330800, #    local_end 1946-10-06 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61402323600, #    utc_start 1946-10-06 01:00:00 (Sun)
  61419258000, #      utc_end 1947-04-20 01:00:00 (Sun)
  61402327200, #  local_start 1946-10-06 02:00:00 (Sun)
  61419261600, #    local_end 1947-04-20 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61419258000, #    utc_start 1947-04-20 01:00:00 (Sun)
  61433773200, #      utc_end 1947-10-05 01:00:00 (Sun)
  61419265200, #  local_start 1947-04-20 03:00:00 (Sun)
  61433780400, #    local_end 1947-10-05 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61433773200, #    utc_start 1947-10-05 01:00:00 (Sun)
  61450707600, #      utc_end 1948-04-18 01:00:00 (Sun)
  61433776800, #  local_start 1947-10-05 02:00:00 (Sun)
  61450711200, #    local_end 1948-04-18 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61450707600, #    utc_start 1948-04-18 01:00:00 (Sun)
  61465222800, #      utc_end 1948-10-03 01:00:00 (Sun)
  61450714800, #  local_start 1948-04-18 03:00:00 (Sun)
  61465230000, #    local_end 1948-10-03 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61465222800, #    utc_start 1948-10-03 01:00:00 (Sun)
  61481466000, #      utc_end 1949-04-09 01:00:00 (Sat)
  61465226400, #  local_start 1948-10-03 02:00:00 (Sun)
  61481469600, #    local_end 1949-04-09 02:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  61481466000, #    utc_start 1949-04-09 01:00:00 (Sat)
  61496672400, #      utc_end 1949-10-02 01:00:00 (Sun)
  61481473200, #  local_start 1949-04-09 03:00:00 (Sat)
  61496679600, #    local_end 1949-10-02 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61496672400, #    utc_start 1949-10-02 01:00:00 (Sun)
  62419676400, #      utc_end 1978-12-31 23:00:00 (Sun)
  61496676000, #  local_start 1949-10-02 02:00:00 (Sun)
  62419680000, #    local_end 1979-01-01 00:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  62419676400, #    utc_start 1978-12-31 23:00:00 (Sun)
  62427459600, #      utc_end 1979-04-01 01:00:00 (Sun)
  62419680000, #  local_start 1979-01-01 00:00:00 (Mon)
  62427463200, #    local_end 1979-04-01 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62427459600, #    utc_start 1979-04-01 01:00:00 (Sun)
  62443184400, #      utc_end 1979-09-30 01:00:00 (Sun)
  62427466800, #  local_start 1979-04-01 03:00:00 (Sun)
  62443191600, #    local_end 1979-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62443184400, #    utc_start 1979-09-30 01:00:00 (Sun)
  62459514000, #      utc_end 1980-04-06 01:00:00 (Sun)
  62443188000, #  local_start 1979-09-30 02:00:00 (Sun)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62459514000, #    utc_start 1980-04-06 01:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474641200, #    local_end 1980-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474637600, #  local_start 1980-09-28 02:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {60}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722450,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722450,
      'utc_rd_secs' => 0,
      'utc_year' => 1980
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722449,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722449,
      'utc_rd_secs' => 82800,
      'utc_year' => 1979
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_PRAGUE

    $main::fatpacked{"DateTime/TimeZone/Europe/Riga.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_RIGA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Riga;
  $DateTime::TimeZone::Europe::Riga::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Riga::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295536606, #      utc_end 1879-12-31 22:23:26 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  5794,
  0,
  'LMT',
      ],
      [
  59295536606, #    utc_start 1879-12-31 22:23:26 (Wed)
  60503675006, #      utc_end 1918-04-15 00:23:26 (Mon)
  59295542400, #  local_start 1880-01-01 00:00:00 (Thu)
  60503680800, #    local_end 1918-04-15 02:00:00 (Mon)
  5794,
  0,
  'RMT',
      ],
      [
  60503675006, #    utc_start 1918-04-15 00:23:26 (Mon)
  60516980606, #      utc_end 1918-09-16 00:23:26 (Mon)
  60503684400, #  local_start 1918-04-15 03:00:00 (Mon)
  60516990000, #    local_end 1918-09-16 03:00:00 (Mon)
  9394,
  1,
  'LST',
      ],
      [
  60516980606, #    utc_start 1918-09-16 00:23:26 (Mon)
  60534001406, #      utc_end 1919-04-01 00:23:26 (Tue)
  60516986400, #  local_start 1918-09-16 02:00:00 (Mon)
  60534007200, #    local_end 1919-04-01 02:00:00 (Tue)
  5794,
  0,
  'RMT',
      ],
      [
  60534001406, #    utc_start 1919-04-01 00:23:26 (Tue)
  60538407806, #      utc_end 1919-05-22 00:23:26 (Thu)
  60534010800, #  local_start 1919-04-01 03:00:00 (Tue)
  60538417200, #    local_end 1919-05-22 03:00:00 (Thu)
  9394,
  1,
  'LST',
      ],
      [
  60538407806, #    utc_start 1919-05-22 00:23:26 (Thu)
  60758375006, #      utc_end 1926-05-10 22:23:26 (Mon)
  60538413600, #  local_start 1919-05-22 02:00:00 (Thu)
  60758380800, #    local_end 1926-05-11 00:00:00 (Tue)
  5794,
  0,
  'RMT',
      ],
      [
  60758375006, #    utc_start 1926-05-10 22:23:26 (Mon)
  61207653600, #      utc_end 1940-08-04 22:00:00 (Sun)
  60758382206, #  local_start 1926-05-11 00:23:26 (Tue)
  61207660800, #    local_end 1940-08-05 00:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  61207653600, #    utc_start 1940-08-04 22:00:00 (Sun)
  61236162000, #      utc_end 1941-06-30 21:00:00 (Mon)
  61207664400, #  local_start 1940-08-05 01:00:00 (Mon)
  61236172800, #    local_end 1941-07-01 00:00:00 (Tue)
  10800,
  0,
  'MSK',
      ],
      [
  61236162000, #    utc_start 1941-06-30 21:00:00 (Mon)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61236169200, #  local_start 1941-06-30 23:00:00 (Mon)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61338906000, #      utc_end 1944-10-02 01:00:00 (Mon)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61338913200, #    local_end 1944-10-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61338906000, #    utc_start 1944-10-02 01:00:00 (Mon)
  61339849200, #      utc_end 1944-10-12 23:00:00 (Thu)
  61338909600, #  local_start 1944-10-02 02:00:00 (Mon)
  61339852800, #    local_end 1944-10-13 00:00:00 (Fri)
  3600,
  0,
  'CET',
      ],
      [
  61339849200, #    utc_start 1944-10-12 23:00:00 (Thu)
  62490603600, #      utc_end 1981-03-31 21:00:00 (Tue)
  61339860000, #  local_start 1944-10-13 02:00:00 (Fri)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  10800,
  0,
  'MSK',
      ],
      [
  62490603600, #    utc_start 1981-03-31 21:00:00 (Tue)
  62506411200, #      utc_end 1981-09-30 20:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  14400,
  1,
  'MSD',
      ],
      [
  62506411200, #    utc_start 1981-09-30 20:00:00 (Wed)
  62522139600, #      utc_end 1982-03-31 21:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  10800,
  0,
  'MSK',
      ],
      [
  62522139600, #    utc_start 1982-03-31 21:00:00 (Wed)
  62537947200, #      utc_end 1982-09-30 20:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  14400,
  1,
  'MSD',
      ],
      [
  62537947200, #    utc_start 1982-09-30 20:00:00 (Thu)
  62553675600, #      utc_end 1983-03-31 21:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  10800,
  0,
  'MSK',
      ],
      [
  62553675600, #    utc_start 1983-03-31 21:00:00 (Thu)
  62569483200, #      utc_end 1983-09-30 20:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  14400,
  1,
  'MSD',
      ],
      [
  62569483200, #    utc_start 1983-09-30 20:00:00 (Fri)
  62585298000, #      utc_end 1984-03-31 21:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62585298000, #    utc_start 1984-03-31 21:00:00 (Sat)
  62601030000, #      utc_end 1984-09-29 23:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62601030000, #    utc_start 1984-09-29 23:00:00 (Sat)
  62616754800, #      utc_end 1985-03-30 23:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62616754800, #    utc_start 1985-03-30 23:00:00 (Sat)
  62632479600, #      utc_end 1985-09-28 23:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62632479600, #    utc_start 1985-09-28 23:00:00 (Sat)
  62648204400, #      utc_end 1986-03-29 23:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62648204400, #    utc_start 1986-03-29 23:00:00 (Sat)
  62663929200, #      utc_end 1986-09-27 23:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62663929200, #    utc_start 1986-09-27 23:00:00 (Sat)
  62679654000, #      utc_end 1987-03-28 23:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62679654000, #    utc_start 1987-03-28 23:00:00 (Sat)
  62695378800, #      utc_end 1987-09-26 23:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62695378800, #    utc_start 1987-09-26 23:00:00 (Sat)
  62711103600, #      utc_end 1988-03-26 23:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62711103600, #    utc_start 1988-03-26 23:00:00 (Sat)
  62726828400, #      utc_end 1988-09-24 23:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62726828400, #    utc_start 1988-09-24 23:00:00 (Sat)
  62742553200, #      utc_end 1989-03-25 23:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62742553200, #    utc_start 1989-03-25 23:00:00 (Sat)
  62758281600, #      utc_end 1989-09-24 00:00:00 (Sun)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62758281600, #    utc_start 1989-09-24 00:00:00 (Sun)
  62774006400, #      utc_end 1990-03-25 00:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62774006400, #    utc_start 1990-03-25 00:00:00 (Sun)
  62790336000, #      utc_end 1990-09-30 00:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62790336000, #    utc_start 1990-09-30 00:00:00 (Sun)
  62806060800, #      utc_end 1991-03-31 00:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62806060800, #    utc_start 1991-03-31 00:00:00 (Sun)
  62821785600, #      utc_end 1991-09-29 00:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821785600, #    utc_start 1991-09-29 00:00:00 (Sun)
  62837510400, #      utc_end 1992-03-29 00:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837510400, #    utc_start 1992-03-29 00:00:00 (Sun)
  62853235200, #      utc_end 1992-09-27 00:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853235200, #    utc_start 1992-09-27 00:00:00 (Sun)
  62868960000, #      utc_end 1993-03-28 00:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868960000, #    utc_start 1993-03-28 00:00:00 (Sun)
  62884684800, #      utc_end 1993-09-26 00:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884684800, #    utc_start 1993-09-26 00:00:00 (Sun)
  62900409600, #      utc_end 1994-03-27 00:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900409600, #    utc_start 1994-03-27 00:00:00 (Sun)
  62916134400, #      utc_end 1994-09-25 00:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916134400, #    utc_start 1994-09-25 00:00:00 (Sun)
  62931859200, #      utc_end 1995-03-26 00:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931859200, #    utc_start 1995-03-26 00:00:00 (Sun)
  62947584000, #      utc_end 1995-09-24 00:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947584000, #    utc_start 1995-09-24 00:00:00 (Sun)
  62963913600, #      utc_end 1996-03-31 00:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963913600, #    utc_start 1996-03-31 00:00:00 (Sun)
  62979638400, #      utc_end 1996-09-29 00:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62979649200, #    local_end 1996-09-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62979638400, #    utc_start 1996-09-29 00:00:00 (Sun)
  62989480800, #      utc_end 1997-01-20 22:00:00 (Mon)
  62979645600, #  local_start 1996-09-29 02:00:00 (Sun)
  62989488000, #    local_end 1997-01-21 00:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  62989480800, #    utc_start 1997-01-20 22:00:00 (Mon)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62989488000, #  local_start 1997-01-21 00:00:00 (Tue)
  62995374000, #    local_end 1997-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995377600, #  local_start 1997-03-30 04:00:00 (Sun)
  63013521600, #    local_end 1997-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013518000, #  local_start 1997-10-26 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026827200, #  local_start 1998-03-29 04:00:00 (Sun)
  63044971200, #    local_end 1998-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044967600, #  local_start 1998-10-25 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058276800, #  local_start 1999-03-28 04:00:00 (Sun)
  63077025600, #    local_end 1999-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63087458400, #      utc_end 2000-02-28 22:00:00 (Mon)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63087465600, #    local_end 2000-02-29 00:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  63087458400, #    utc_start 2000-02-28 22:00:00 (Mon)
  63114069600, #      utc_end 2001-01-01 22:00:00 (Mon)
  63087465600, #  local_start 2000-02-29 00:00:00 (Tue)
  63114076800, #    local_end 2001-01-02 00:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  63114069600, #    utc_start 2001-01-01 22:00:00 (Mon)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63114076800, #  local_start 2001-01-02 00:00:00 (Tue)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121176000, #  local_start 2001-03-25 04:00:00 (Sun)
  63139924800, #    local_end 2001-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139921200, #  local_start 2001-10-28 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153230400, #  local_start 2002-03-31 04:00:00 (Sun)
  63171374400, #    local_end 2002-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171370800, #  local_start 2002-10-27 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184680000, #  local_start 2003-03-30 04:00:00 (Sun)
  63202824000, #    local_end 2003-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216129600, #  local_start 2004-03-28 04:00:00 (Sun)
  63234878400, #    local_end 2004-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247579200, #  local_start 2005-03-27 04:00:00 (Sun)
  63266328000, #    local_end 2005-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279025200, #    local_end 2006-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279028800, #  local_start 2006-03-26 04:00:00 (Sun)
  63297777600, #    local_end 2006-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310478400, #  local_start 2007-03-25 04:00:00 (Sun)
  63329227200, #    local_end 2007-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63342529200, #    local_end 2008-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342532800, #  local_start 2008-03-30 04:00:00 (Sun)
  63360676800, #    local_end 2008-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373978800, #    local_end 2009-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373982400, #  local_start 2009-03-29 04:00:00 (Sun)
  63392126400, #    local_end 2009-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392122800, #  local_start 2009-10-25 03:00:00 (Sun)
  63405428400, #    local_end 2010-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405432000, #  local_start 2010-03-28 04:00:00 (Sun)
  63424180800, #    local_end 2010-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424177200, #  local_start 2010-10-31 03:00:00 (Sun)
  63436878000, #    local_end 2011-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436881600, #  local_start 2011-03-27 04:00:00 (Sun)
  63455630400, #    local_end 2011-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455626800, #  local_start 2011-10-30 03:00:00 (Sun)
  63468327600, #    local_end 2012-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468331200, #  local_start 2012-03-25 04:00:00 (Sun)
  63487080000, #    local_end 2012-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487076400, #  local_start 2012-10-28 03:00:00 (Sun)
  63500382000, #    local_end 2013-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500385600, #  local_start 2013-03-31 04:00:00 (Sun)
  63518529600, #    local_end 2013-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518526000, #  local_start 2013-10-27 03:00:00 (Sun)
  63531831600, #    local_end 2014-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531835200, #  local_start 2014-03-30 04:00:00 (Sun)
  63549979200, #    local_end 2014-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549975600, #  local_start 2014-10-26 03:00:00 (Sun)
  63563281200, #    local_end 2015-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563284800, #  local_start 2015-03-29 04:00:00 (Sun)
  63581428800, #    local_end 2015-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581425200, #  local_start 2015-10-25 03:00:00 (Sun)
  63594730800, #    local_end 2016-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594734400, #  local_start 2016-03-27 04:00:00 (Sun)
  63613483200, #    local_end 2016-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613479600, #  local_start 2016-10-30 03:00:00 (Sun)
  63626180400, #    local_end 2017-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626184000, #  local_start 2017-03-26 04:00:00 (Sun)
  63644932800, #    local_end 2017-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644929200, #  local_start 2017-10-29 03:00:00 (Sun)
  63657630000, #    local_end 2018-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657633600, #  local_start 2018-03-25 04:00:00 (Sun)
  63676382400, #    local_end 2018-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676378800, #  local_start 2018-10-28 03:00:00 (Sun)
  63689684400, #    local_end 2019-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689688000, #  local_start 2019-03-31 04:00:00 (Sun)
  63707832000, #    local_end 2019-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707828400, #  local_start 2019-10-27 03:00:00 (Sun)
  63721134000, #    local_end 2020-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721137600, #  local_start 2020-03-29 04:00:00 (Sun)
  63739281600, #    local_end 2020-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739278000, #  local_start 2020-10-25 03:00:00 (Sun)
  63752583600, #    local_end 2021-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752587200, #  local_start 2021-03-28 04:00:00 (Sun)
  63771336000, #    local_end 2021-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771332400, #  local_start 2021-10-31 03:00:00 (Sun)
  63784033200, #    local_end 2022-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784036800, #  local_start 2022-03-27 04:00:00 (Sun)
  63802785600, #    local_end 2022-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802782000, #  local_start 2022-10-30 03:00:00 (Sun)
  63815482800, #    local_end 2023-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815486400, #  local_start 2023-03-26 04:00:00 (Sun)
  63834235200, #    local_end 2023-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834231600, #  local_start 2023-10-29 03:00:00 (Sun)
  63847537200, #    local_end 2024-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847540800, #  local_start 2024-03-31 04:00:00 (Sun)
  63865684800, #    local_end 2024-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865681200, #  local_start 2024-10-27 03:00:00 (Sun)
  63878986800, #    local_end 2025-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878990400, #  local_start 2025-03-30 04:00:00 (Sun)
  63897134400, #    local_end 2025-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897130800, #  local_start 2025-10-26 03:00:00 (Sun)
  63910436400, #    local_end 2026-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910440000, #  local_start 2026-03-29 04:00:00 (Sun)
  63928584000, #    local_end 2026-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928580400, #  local_start 2026-10-25 03:00:00 (Sun)
  63941886000, #    local_end 2027-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941889600, #  local_start 2027-03-28 04:00:00 (Sun)
  63960638400, #    local_end 2027-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {51}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730487,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730487,
      'utc_rd_secs' => 0,
      'utc_year' => 2002
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730486,
      'local_rd_secs' => 79200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730486,
      'utc_rd_secs' => 79200,
      'utc_year' => 2002
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_RIGA

    $main::fatpacked{"DateTime/TimeZone/Europe/Rome.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_ROME';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Rome;
  $DateTime::TimeZone::Europe::Rome::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Rome::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  58876585804, #      utc_end 1866-09-21 23:10:04 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  58876588800, #    local_end 1866-09-22 00:00:00 (Sat)
  2996,
  0,
  'LMT',
      ],
      [
  58876585804, #    utc_start 1866-09-21 23:10:04 (Fri)
  59732118604, #      utc_end 1893-10-31 23:10:04 (Tue)
  58876588800, #  local_start 1866-09-22 00:00:00 (Sat)
  59732121600, #    local_end 1893-11-01 00:00:00 (Wed)
  2996,
  0,
  'RMT',
      ],
      [
  59732118604, #    utc_start 1893-10-31 23:10:04 (Tue)
  60444831600, #      utc_end 1916-06-02 23:00:00 (Fri)
  59732122204, #  local_start 1893-11-01 00:10:04 (Wed)
  60444835200, #    local_end 1916-06-03 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  60444831600, #    utc_start 1916-06-02 23:00:00 (Fri)
  60455199600, #      utc_end 1916-09-30 23:00:00 (Sat)
  60444838800, #  local_start 1916-06-03 01:00:00 (Sat)
  60455206800, #    local_end 1916-10-01 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60455199600, #    utc_start 1916-09-30 23:00:00 (Sat)
  60470924400, #      utc_end 1917-03-31 23:00:00 (Sat)
  60455203200, #  local_start 1916-10-01 00:00:00 (Sun)
  60470928000, #    local_end 1917-04-01 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60470924400, #    utc_start 1917-03-31 23:00:00 (Sat)
  60486649200, #      utc_end 1917-09-29 23:00:00 (Sat)
  60470931600, #  local_start 1917-04-01 01:00:00 (Sun)
  60486656400, #    local_end 1917-09-30 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60486649200, #    utc_start 1917-09-29 23:00:00 (Sat)
  60500559600, #      utc_end 1918-03-09 23:00:00 (Sat)
  60486652800, #  local_start 1917-09-30 00:00:00 (Sun)
  60500563200, #    local_end 1918-03-10 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60500559600, #    utc_start 1918-03-09 23:00:00 (Sat)
  60518703600, #      utc_end 1918-10-05 23:00:00 (Sat)
  60500566800, #  local_start 1918-03-10 01:00:00 (Sun)
  60518710800, #    local_end 1918-10-06 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60518703600, #    utc_start 1918-10-05 23:00:00 (Sat)
  60531404400, #      utc_end 1919-03-01 23:00:00 (Sat)
  60518707200, #  local_start 1918-10-06 00:00:00 (Sun)
  60531408000, #    local_end 1919-03-02 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60531404400, #    utc_start 1919-03-01 23:00:00 (Sat)
  60550153200, #      utc_end 1919-10-04 23:00:00 (Sat)
  60531411600, #  local_start 1919-03-02 01:00:00 (Sun)
  60550160400, #    local_end 1919-10-05 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60550153200, #    utc_start 1919-10-04 23:00:00 (Sat)
  60564668400, #      utc_end 1920-03-20 23:00:00 (Sat)
  60550156800, #  local_start 1919-10-05 00:00:00 (Sun)
  60564672000, #    local_end 1920-03-21 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60564668400, #    utc_start 1920-03-20 23:00:00 (Sat)
  60580393200, #      utc_end 1920-09-18 23:00:00 (Sat)
  60564675600, #  local_start 1920-03-21 01:00:00 (Sun)
  60580400400, #    local_end 1920-09-19 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60580393200, #    utc_start 1920-09-18 23:00:00 (Sat)
  61203250800, #      utc_end 1940-06-14 23:00:00 (Fri)
  60580396800, #  local_start 1920-09-19 00:00:00 (Sun)
  61203254400, #    local_end 1940-06-15 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  61203250800, #    utc_start 1940-06-14 23:00:00 (Fri)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61203258000, #  local_start 1940-06-15 01:00:00 (Sat)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61330860000, #      utc_end 1944-06-30 22:00:00 (Fri)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61330867200, #    local_end 1944-07-01 00:00:00 (Sat)
  7200,
  1,
  'CEST',
      ],
      [
  61330860000, #    utc_start 1944-06-30 22:00:00 (Fri)
  61337602800, #      utc_end 1944-09-16 23:00:00 (Sat)
  61330867200, #  local_start 1944-07-01 00:00:00 (Sat)
  61337610000, #    local_end 1944-09-17 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61337602800, #    utc_start 1944-09-16 23:00:00 (Sat)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61337606400, #  local_start 1944-09-17 00:00:00 (Sun)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61368966000, #      utc_end 1945-09-14 23:00:00 (Fri)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61368973200, #    local_end 1945-09-15 01:00:00 (Sat)
  7200,
  1,
  'CEST',
      ],
      [
  61368966000, #    utc_start 1945-09-14 23:00:00 (Fri)
  61384784400, #      utc_end 1946-03-17 01:00:00 (Sun)
  61368969600, #  local_start 1945-09-15 00:00:00 (Sat)
  61384788000, #    local_end 1946-03-17 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61384784400, #    utc_start 1946-03-17 01:00:00 (Sun)
  61402323600, #      utc_end 1946-10-06 01:00:00 (Sun)
  61384791600, #  local_start 1946-03-17 03:00:00 (Sun)
  61402330800, #    local_end 1946-10-06 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61402323600, #    utc_start 1946-10-06 01:00:00 (Sun)
  61416226800, #      utc_end 1947-03-15 23:00:00 (Sat)
  61402327200, #  local_start 1946-10-06 02:00:00 (Sun)
  61416230400, #    local_end 1947-03-16 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61416226800, #    utc_start 1947-03-15 23:00:00 (Sat)
  61433766000, #      utc_end 1947-10-04 23:00:00 (Sat)
  61416234000, #  local_start 1947-03-16 01:00:00 (Sun)
  61433773200, #    local_end 1947-10-05 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61433766000, #    utc_start 1947-10-04 23:00:00 (Sat)
  61446474000, #      utc_end 1948-02-29 01:00:00 (Sun)
  61433769600, #  local_start 1947-10-05 00:00:00 (Sun)
  61446477600, #    local_end 1948-02-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61446474000, #    utc_start 1948-02-29 01:00:00 (Sun)
  61465222800, #      utc_end 1948-10-03 01:00:00 (Sun)
  61446481200, #  local_start 1948-02-29 03:00:00 (Sun)
  61465230000, #    local_end 1948-10-03 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61465222800, #    utc_start 1948-10-03 01:00:00 (Sun)
  62021631600, #      utc_end 1966-05-21 23:00:00 (Sat)
  61465226400, #  local_start 1948-10-03 02:00:00 (Sun)
  62021635200, #    local_end 1966-05-22 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62021631600, #    utc_start 1966-05-21 23:00:00 (Sat)
  62032514400, #      utc_end 1966-09-24 22:00:00 (Sat)
  62021638800, #  local_start 1966-05-22 01:00:00 (Sun)
  62032521600, #    local_end 1966-09-25 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62032514400, #    utc_start 1966-09-24 22:00:00 (Sat)
  62053686000, #      utc_end 1967-05-27 23:00:00 (Sat)
  62032518000, #  local_start 1966-09-24 23:00:00 (Sat)
  62053689600, #    local_end 1967-05-28 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62053686000, #    utc_start 1967-05-27 23:00:00 (Sat)
  62063964000, #      utc_end 1967-09-23 22:00:00 (Sat)
  62053693200, #  local_start 1967-05-28 01:00:00 (Sun)
  62063971200, #    local_end 1967-09-24 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62063964000, #    utc_start 1967-09-23 22:00:00 (Sat)
  62085135600, #      utc_end 1968-05-25 23:00:00 (Sat)
  62063967600, #  local_start 1967-09-23 23:00:00 (Sat)
  62085139200, #    local_end 1968-05-26 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62085135600, #    utc_start 1968-05-25 23:00:00 (Sat)
  62095413600, #      utc_end 1968-09-21 22:00:00 (Sat)
  62085142800, #  local_start 1968-05-26 01:00:00 (Sun)
  62095420800, #    local_end 1968-09-22 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62095413600, #    utc_start 1968-09-21 22:00:00 (Sat)
  62117190000, #      utc_end 1969-05-31 23:00:00 (Sat)
  62095417200, #  local_start 1968-09-21 23:00:00 (Sat)
  62117193600, #    local_end 1969-06-01 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62117190000, #    utc_start 1969-05-31 23:00:00 (Sat)
  62127468000, #      utc_end 1969-09-27 22:00:00 (Sat)
  62117197200, #  local_start 1969-06-01 01:00:00 (Sun)
  62127475200, #    local_end 1969-09-28 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62127468000, #    utc_start 1969-09-27 22:00:00 (Sat)
  62148639600, #      utc_end 1970-05-30 23:00:00 (Sat)
  62127471600, #  local_start 1969-09-27 23:00:00 (Sat)
  62148643200, #    local_end 1970-05-31 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62148639600, #    utc_start 1970-05-30 23:00:00 (Sat)
  62158917600, #      utc_end 1970-09-26 22:00:00 (Sat)
  62148646800, #  local_start 1970-05-31 01:00:00 (Sun)
  62158924800, #    local_end 1970-09-27 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62158917600, #    utc_start 1970-09-26 22:00:00 (Sat)
  62179484400, #      utc_end 1971-05-22 23:00:00 (Sat)
  62158921200, #  local_start 1970-09-26 23:00:00 (Sat)
  62179488000, #    local_end 1971-05-23 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62179484400, #    utc_start 1971-05-22 23:00:00 (Sat)
  62190370800, #      utc_end 1971-09-25 23:00:00 (Sat)
  62179491600, #  local_start 1971-05-23 01:00:00 (Sun)
  62190378000, #    local_end 1971-09-26 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62190370800, #    utc_start 1971-09-25 23:00:00 (Sat)
  62211538800, #      utc_end 1972-05-27 23:00:00 (Sat)
  62190374400, #  local_start 1971-09-26 00:00:00 (Sun)
  62211542400, #    local_end 1972-05-28 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62211538800, #    utc_start 1972-05-27 23:00:00 (Sat)
  62222421600, #      utc_end 1972-09-30 22:00:00 (Sat)
  62211546000, #  local_start 1972-05-28 01:00:00 (Sun)
  62222428800, #    local_end 1972-10-01 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62222421600, #    utc_start 1972-09-30 22:00:00 (Sat)
  62243593200, #      utc_end 1973-06-02 23:00:00 (Sat)
  62222425200, #  local_start 1972-09-30 23:00:00 (Sat)
  62243596800, #    local_end 1973-06-03 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62243593200, #    utc_start 1973-06-02 23:00:00 (Sat)
  62253871200, #      utc_end 1973-09-29 22:00:00 (Sat)
  62243600400, #  local_start 1973-06-03 01:00:00 (Sun)
  62253878400, #    local_end 1973-09-30 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62253871200, #    utc_start 1973-09-29 22:00:00 (Sat)
  62274438000, #      utc_end 1974-05-25 23:00:00 (Sat)
  62253874800, #  local_start 1973-09-29 23:00:00 (Sat)
  62274441600, #    local_end 1974-05-26 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62274438000, #    utc_start 1974-05-25 23:00:00 (Sat)
  62285320800, #      utc_end 1974-09-28 22:00:00 (Sat)
  62274445200, #  local_start 1974-05-26 01:00:00 (Sun)
  62285328000, #    local_end 1974-09-29 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62285320800, #    utc_start 1974-09-28 22:00:00 (Sat)
  62306492400, #      utc_end 1975-05-31 23:00:00 (Sat)
  62285324400, #  local_start 1974-09-28 23:00:00 (Sat)
  62306496000, #    local_end 1975-06-01 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62306492400, #    utc_start 1975-05-31 23:00:00 (Sat)
  62316774000, #      utc_end 1975-09-27 23:00:00 (Sat)
  62306499600, #  local_start 1975-06-01 01:00:00 (Sun)
  62316781200, #    local_end 1975-09-28 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62316774000, #    utc_start 1975-09-27 23:00:00 (Sat)
  62337942000, #      utc_end 1976-05-29 23:00:00 (Sat)
  62316777600, #  local_start 1975-09-28 00:00:00 (Sun)
  62337945600, #    local_end 1976-05-30 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62337942000, #    utc_start 1976-05-29 23:00:00 (Sat)
  62348223600, #      utc_end 1976-09-25 23:00:00 (Sat)
  62337949200, #  local_start 1976-05-30 01:00:00 (Sun)
  62348230800, #    local_end 1976-09-26 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62348223600, #    utc_start 1976-09-25 23:00:00 (Sat)
  62368786800, #      utc_end 1977-05-21 23:00:00 (Sat)
  62348227200, #  local_start 1976-09-26 00:00:00 (Sun)
  62368790400, #    local_end 1977-05-22 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62368786800, #    utc_start 1977-05-21 23:00:00 (Sat)
  62379673200, #      utc_end 1977-09-24 23:00:00 (Sat)
  62368794000, #  local_start 1977-05-22 01:00:00 (Sun)
  62379680400, #    local_end 1977-09-25 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62379673200, #    utc_start 1977-09-24 23:00:00 (Sat)
  62400841200, #      utc_end 1978-05-27 23:00:00 (Sat)
  62379676800, #  local_start 1977-09-25 00:00:00 (Sun)
  62400844800, #    local_end 1978-05-28 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62400841200, #    utc_start 1978-05-27 23:00:00 (Sat)
  62411727600, #      utc_end 1978-09-30 23:00:00 (Sat)
  62400848400, #  local_start 1978-05-28 01:00:00 (Sun)
  62411734800, #    local_end 1978-10-01 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62411727600, #    utc_start 1978-09-30 23:00:00 (Sat)
  62432290800, #      utc_end 1979-05-26 23:00:00 (Sat)
  62411731200, #  local_start 1978-10-01 00:00:00 (Sun)
  62432294400, #    local_end 1979-05-27 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62432290800, #    utc_start 1979-05-26 23:00:00 (Sat)
  62443177200, #      utc_end 1979-09-29 23:00:00 (Sat)
  62432298000, #  local_start 1979-05-27 01:00:00 (Sun)
  62443184400, #    local_end 1979-09-30 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62443177200, #    utc_start 1979-09-29 23:00:00 (Sat)
  62451212400, #      utc_end 1979-12-31 23:00:00 (Mon)
  62443180800, #  local_start 1979-09-30 00:00:00 (Sun)
  62451216000, #    local_end 1980-01-01 00:00:00 (Tue)
  3600,
  0,
  'CET',
      ],
      [
  62451212400, #    utc_start 1979-12-31 23:00:00 (Mon)
  62459514000, #      utc_end 1980-04-06 01:00:00 (Sun)
  62451216000, #  local_start 1980-01-01 00:00:00 (Tue)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62459514000, #    utc_start 1980-04-06 01:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474641200, #    local_end 1980-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474637600, #  local_start 1980-09-28 02:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {75}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722815,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722815,
      'utc_rd_secs' => 0,
      'utc_year' => 1981
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722814,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722814,
      'utc_rd_secs' => 82800,
      'utc_year' => 1980
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_ROME

    $main::fatpacked{"DateTime/TimeZone/Europe/Samara.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_SAMARA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Samara;
  $DateTime::TimeZone::Europe::Samara::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Samara::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60541857580, #      utc_end 1919-06-30 22:39:40 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60541869600, #    local_end 1919-07-01 02:00:00 (Tue)
  12020,
  0,
  'LMT',
      ],
      [
  60541857580, #    utc_start 1919-06-30 22:39:40 (Mon)
  60888142800, #      utc_end 1930-06-20 21:00:00 (Fri)
  60541868380, #  local_start 1919-07-01 01:39:40 (Tue)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  10800,
  0,
  'SAMT',
      ],
      [
  60888142800, #    utc_start 1930-06-20 21:00:00 (Fri)
  61033377600, #      utc_end 1935-01-26 20:00:00 (Sat)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  61033392000, #    local_end 1935-01-27 00:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  61033377600, #    utc_start 1935-01-26 20:00:00 (Sat)
  62490600000, #      utc_end 1981-03-31 20:00:00 (Tue)
  61033392000, #  local_start 1935-01-27 00:00:00 (Sun)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  14400,
  0,
  'KUYT',
      ],
      [
  62490600000, #    utc_start 1981-03-31 20:00:00 (Tue)
  62506407600, #      utc_end 1981-09-30 19:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  18000,
  1,
  'KUYST',
      ],
      [
  62506407600, #    utc_start 1981-09-30 19:00:00 (Wed)
  62522136000, #      utc_end 1982-03-31 20:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  14400,
  0,
  'KUYT',
      ],
      [
  62522136000, #    utc_start 1982-03-31 20:00:00 (Wed)
  62537943600, #      utc_end 1982-09-30 19:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  18000,
  1,
  'KUYST',
      ],
      [
  62537943600, #    utc_start 1982-09-30 19:00:00 (Thu)
  62553672000, #      utc_end 1983-03-31 20:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  14400,
  0,
  'KUYT',
      ],
      [
  62553672000, #    utc_start 1983-03-31 20:00:00 (Thu)
  62569479600, #      utc_end 1983-09-30 19:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  18000,
  1,
  'KUYST',
      ],
      [
  62569479600, #    utc_start 1983-09-30 19:00:00 (Fri)
  62585294400, #      utc_end 1984-03-31 20:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  14400,
  0,
  'KUYT',
      ],
      [
  62585294400, #    utc_start 1984-03-31 20:00:00 (Sat)
  62601026400, #      utc_end 1984-09-29 22:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  18000,
  1,
  'KUYST',
      ],
      [
  62601026400, #    utc_start 1984-09-29 22:00:00 (Sat)
  62616751200, #      utc_end 1985-03-30 22:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  14400,
  0,
  'KUYT',
      ],
      [
  62616751200, #    utc_start 1985-03-30 22:00:00 (Sat)
  62632476000, #      utc_end 1985-09-28 22:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  18000,
  1,
  'KUYST',
      ],
      [
  62632476000, #    utc_start 1985-09-28 22:00:00 (Sat)
  62648200800, #      utc_end 1986-03-29 22:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  14400,
  0,
  'KUYT',
      ],
      [
  62648200800, #    utc_start 1986-03-29 22:00:00 (Sat)
  62663925600, #      utc_end 1986-09-27 22:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  18000,
  1,
  'KUYST',
      ],
      [
  62663925600, #    utc_start 1986-09-27 22:00:00 (Sat)
  62679650400, #      utc_end 1987-03-28 22:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  14400,
  0,
  'KUYT',
      ],
      [
  62679650400, #    utc_start 1987-03-28 22:00:00 (Sat)
  62695375200, #      utc_end 1987-09-26 22:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  18000,
  1,
  'KUYST',
      ],
      [
  62695375200, #    utc_start 1987-09-26 22:00:00 (Sat)
  62711100000, #      utc_end 1988-03-26 22:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  14400,
  0,
  'KUYT',
      ],
      [
  62711100000, #    utc_start 1988-03-26 22:00:00 (Sat)
  62726824800, #      utc_end 1988-09-24 22:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  18000,
  1,
  'KUYST',
      ],
      [
  62726824800, #    utc_start 1988-09-24 22:00:00 (Sat)
  62742549600, #      utc_end 1989-03-25 22:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  14400,
  0,
  'KUYT',
      ],
      [
  62742549600, #    utc_start 1989-03-25 22:00:00 (Sat)
  62758278000, #      utc_end 1989-09-23 23:00:00 (Sat)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62758278000, #    utc_start 1989-09-23 23:00:00 (Sat)
  62774002800, #      utc_end 1990-03-24 23:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62774002800, #    utc_start 1990-03-24 23:00:00 (Sat)
  62790332400, #      utc_end 1990-09-29 23:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62790332400, #    utc_start 1990-09-29 23:00:00 (Sat)
  62806057200, #      utc_end 1991-03-30 23:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62806057200, #    utc_start 1991-03-30 23:00:00 (Sat)
  62821785600, #      utc_end 1991-09-29 00:00:00 (Sun)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821785600, #    utc_start 1991-09-29 00:00:00 (Sun)
  62823600000, #      utc_end 1991-10-20 00:00:00 (Sun)
  62821796400, #  local_start 1991-09-29 03:00:00 (Sun)
  62823610800, #    local_end 1991-10-20 03:00:00 (Sun)
  10800,
  0,
  'SAMT',
      ],
      [
  62823600000, #    utc_start 1991-10-20 00:00:00 (Sun)
  62837503200, #      utc_end 1992-03-28 22:00:00 (Sat)
  62823614400, #  local_start 1991-10-20 04:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  62837503200, #    utc_start 1992-03-28 22:00:00 (Sat)
  62853228000, #      utc_end 1992-09-26 22:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  62853228000, #    utc_start 1992-09-26 22:00:00 (Sat)
  62868952800, #      utc_end 1993-03-27 22:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  62868952800, #    utc_start 1993-03-27 22:00:00 (Sat)
  62884677600, #      utc_end 1993-09-25 22:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  62884677600, #    utc_start 1993-09-25 22:00:00 (Sat)
  62900402400, #      utc_end 1994-03-26 22:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  62900402400, #    utc_start 1994-03-26 22:00:00 (Sat)
  62916127200, #      utc_end 1994-09-24 22:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  62916127200, #    utc_start 1994-09-24 22:00:00 (Sat)
  62931852000, #      utc_end 1995-03-25 22:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  62931852000, #    utc_start 1995-03-25 22:00:00 (Sat)
  62947576800, #      utc_end 1995-09-23 22:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  62947576800, #    utc_start 1995-09-23 22:00:00 (Sat)
  62963906400, #      utc_end 1996-03-30 22:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  62963906400, #    utc_start 1996-03-30 22:00:00 (Sat)
  62982050400, #      utc_end 1996-10-26 22:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  62982050400, #    utc_start 1996-10-26 22:00:00 (Sat)
  62995356000, #      utc_end 1997-03-29 22:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  62995356000, #    utc_start 1997-03-29 22:00:00 (Sat)
  63013500000, #      utc_end 1997-10-25 22:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  63013500000, #    utc_start 1997-10-25 22:00:00 (Sat)
  63026805600, #      utc_end 1998-03-28 22:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  63026805600, #    utc_start 1998-03-28 22:00:00 (Sat)
  63044949600, #      utc_end 1998-10-24 22:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  63044949600, #    utc_start 1998-10-24 22:00:00 (Sat)
  63058255200, #      utc_end 1999-03-27 22:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  63058255200, #    utc_start 1999-03-27 22:00:00 (Sat)
  63077004000, #      utc_end 1999-10-30 22:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  63077004000, #    utc_start 1999-10-30 22:00:00 (Sat)
  63089704800, #      utc_end 2000-03-25 22:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  63089704800, #    utc_start 2000-03-25 22:00:00 (Sat)
  63108453600, #      utc_end 2000-10-28 22:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  63108453600, #    utc_start 2000-10-28 22:00:00 (Sat)
  63121154400, #      utc_end 2001-03-24 22:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  63121154400, #    utc_start 2001-03-24 22:00:00 (Sat)
  63139903200, #      utc_end 2001-10-27 22:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  63139903200, #    utc_start 2001-10-27 22:00:00 (Sat)
  63153208800, #      utc_end 2002-03-30 22:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  63153208800, #    utc_start 2002-03-30 22:00:00 (Sat)
  63171352800, #      utc_end 2002-10-26 22:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  63171352800, #    utc_start 2002-10-26 22:00:00 (Sat)
  63184658400, #      utc_end 2003-03-29 22:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  63184658400, #    utc_start 2003-03-29 22:00:00 (Sat)
  63202802400, #      utc_end 2003-10-25 22:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  63202802400, #    utc_start 2003-10-25 22:00:00 (Sat)
  63216108000, #      utc_end 2004-03-27 22:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  63216108000, #    utc_start 2004-03-27 22:00:00 (Sat)
  63234856800, #      utc_end 2004-10-30 22:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  63234856800, #    utc_start 2004-10-30 22:00:00 (Sat)
  63247557600, #      utc_end 2005-03-26 22:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  63247557600, #    utc_start 2005-03-26 22:00:00 (Sat)
  63266306400, #      utc_end 2005-10-29 22:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  63266306400, #    utc_start 2005-10-29 22:00:00 (Sat)
  63279007200, #      utc_end 2006-03-25 22:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  63279007200, #    utc_start 2006-03-25 22:00:00 (Sat)
  63297756000, #      utc_end 2006-10-28 22:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  63297756000, #    utc_start 2006-10-28 22:00:00 (Sat)
  63310456800, #      utc_end 2007-03-24 22:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  63310456800, #    utc_start 2007-03-24 22:00:00 (Sat)
  63329205600, #      utc_end 2007-10-27 22:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  63329205600, #    utc_start 2007-10-27 22:00:00 (Sat)
  63342511200, #      utc_end 2008-03-29 22:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  63342511200, #    utc_start 2008-03-29 22:00:00 (Sat)
  63360655200, #      utc_end 2008-10-25 22:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  63360655200, #    utc_start 2008-10-25 22:00:00 (Sat)
  63373960800, #      utc_end 2009-03-28 22:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  63373960800, #    utc_start 2009-03-28 22:00:00 (Sat)
  63392104800, #      utc_end 2009-10-24 22:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  18000,
  1,
  'SAMST',
      ],
      [
  63392104800, #    utc_start 2009-10-24 22:00:00 (Sat)
  63405410400, #      utc_end 2010-03-27 22:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  14400,
  0,
  'SAMT',
      ],
      [
  63405410400, #    utc_start 2010-03-27 22:00:00 (Sat)
  63424162800, #      utc_end 2010-10-30 23:00:00 (Sat)
  63405424800, #  local_start 2010-03-28 02:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  14400,
  1,
  'SAMST',
      ],
      [
  63424162800, #    utc_start 2010-10-30 23:00:00 (Sat)
  63436863600, #      utc_end 2011-03-26 23:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  10800,
  0,
  'SAMT',
      ],
      [
  63436863600, #    utc_start 2011-03-26 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  14400,
  0,
  'SAMT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_SAMARA

    $main::fatpacked{"DateTime/TimeZone/Europe/Simferopol.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_SIMFEROPOL';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Simferopol;
  $DateTime::TimeZone::Europe::Simferopol::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Simferopol::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295534216, #      utc_end 1879-12-31 21:43:36 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  8184,
  0,
  'LMT',
      ],
      [
  59295534216, #    utc_start 1879-12-31 21:43:36 (Wed)
  60694523040, #      utc_end 1924-05-01 21:44:00 (Thu)
  59295542376, #  local_start 1879-12-31 23:59:36 (Wed)
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  8160,
  0,
  'SMT',
      ],
      [
  60694523040, #    utc_start 1924-05-01 21:44:00 (Thu)
  60888146400, #      utc_end 1930-06-20 22:00:00 (Fri)
  60694530240, #  local_start 1924-05-01 23:44:00 (Thu)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  60888146400, #    utc_start 1930-06-20 22:00:00 (Fri)
  61246789200, #      utc_end 1941-10-31 21:00:00 (Fri)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  61246800000, #    local_end 1941-11-01 00:00:00 (Sat)
  10800,
  0,
  'MSK',
      ],
      [
  61246789200, #    utc_start 1941-10-31 21:00:00 (Fri)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61246796400, #  local_start 1941-10-31 23:00:00 (Fri)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61324034400, #      utc_end 1944-04-12 22:00:00 (Wed)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61324041600, #    local_end 1944-04-13 00:00:00 (Thu)
  7200,
  1,
  'CEST',
      ],
      [
  61324034400, #    utc_start 1944-04-12 22:00:00 (Wed)
  62490603600, #      utc_end 1981-03-31 21:00:00 (Tue)
  61324045200, #  local_start 1944-04-13 01:00:00 (Thu)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  10800,
  0,
  'MSK',
      ],
      [
  62490603600, #    utc_start 1981-03-31 21:00:00 (Tue)
  62506411200, #      utc_end 1981-09-30 20:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  14400,
  1,
  'MSD',
      ],
      [
  62506411200, #    utc_start 1981-09-30 20:00:00 (Wed)
  62522139600, #      utc_end 1982-03-31 21:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  10800,
  0,
  'MSK',
      ],
      [
  62522139600, #    utc_start 1982-03-31 21:00:00 (Wed)
  62537947200, #      utc_end 1982-09-30 20:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  14400,
  1,
  'MSD',
      ],
      [
  62537947200, #    utc_start 1982-09-30 20:00:00 (Thu)
  62553675600, #      utc_end 1983-03-31 21:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  10800,
  0,
  'MSK',
      ],
      [
  62553675600, #    utc_start 1983-03-31 21:00:00 (Thu)
  62569483200, #      utc_end 1983-09-30 20:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  14400,
  1,
  'MSD',
      ],
      [
  62569483200, #    utc_start 1983-09-30 20:00:00 (Fri)
  62585298000, #      utc_end 1984-03-31 21:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62585298000, #    utc_start 1984-03-31 21:00:00 (Sat)
  62601030000, #      utc_end 1984-09-29 23:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62601030000, #    utc_start 1984-09-29 23:00:00 (Sat)
  62616754800, #      utc_end 1985-03-30 23:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62616754800, #    utc_start 1985-03-30 23:00:00 (Sat)
  62632479600, #      utc_end 1985-09-28 23:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62632479600, #    utc_start 1985-09-28 23:00:00 (Sat)
  62648204400, #      utc_end 1986-03-29 23:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62648204400, #    utc_start 1986-03-29 23:00:00 (Sat)
  62663929200, #      utc_end 1986-09-27 23:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62663929200, #    utc_start 1986-09-27 23:00:00 (Sat)
  62679654000, #      utc_end 1987-03-28 23:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62679654000, #    utc_start 1987-03-28 23:00:00 (Sat)
  62695378800, #      utc_end 1987-09-26 23:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62695378800, #    utc_start 1987-09-26 23:00:00 (Sat)
  62711103600, #      utc_end 1988-03-26 23:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62711103600, #    utc_start 1988-03-26 23:00:00 (Sat)
  62726828400, #      utc_end 1988-09-24 23:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62726828400, #    utc_start 1988-09-24 23:00:00 (Sat)
  62742553200, #      utc_end 1989-03-25 23:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62742553200, #    utc_start 1989-03-25 23:00:00 (Sat)
  62758278000, #      utc_end 1989-09-23 23:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62758278000, #    utc_start 1989-09-23 23:00:00 (Sat)
  62766824400, #      utc_end 1989-12-31 21:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62766835200, #    local_end 1990-01-01 00:00:00 (Mon)
  10800,
  0,
  'MSK',
      ],
      [
  62766824400, #    utc_start 1989-12-31 21:00:00 (Sun)
  62782470000, #      utc_end 1990-06-30 23:00:00 (Sat)
  62766835200, #  local_start 1990-01-01 00:00:00 (Mon)
  62782480800, #    local_end 1990-07-01 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62782470000, #    utc_start 1990-06-30 23:00:00 (Sat)
  62829900000, #      utc_end 1991-12-31 22:00:00 (Tue)
  62782477200, #  local_start 1990-07-01 01:00:00 (Sun)
  62829907200, #    local_end 1992-01-01 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62829900000, #    utc_start 1991-12-31 22:00:00 (Tue)
  62837503200, #      utc_end 1992-03-28 22:00:00 (Sat)
  62829907200, #  local_start 1992-01-01 00:00:00 (Wed)
  62837510400, #    local_end 1992-03-29 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837503200, #    utc_start 1992-03-28 22:00:00 (Sat)
  62853224400, #      utc_end 1992-09-26 21:00:00 (Sat)
  62837514000, #  local_start 1992-03-29 01:00:00 (Sun)
  62853235200, #    local_end 1992-09-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853224400, #    utc_start 1992-09-26 21:00:00 (Sat)
  62868952800, #      utc_end 1993-03-27 22:00:00 (Sat)
  62853231600, #  local_start 1992-09-26 23:00:00 (Sat)
  62868960000, #    local_end 1993-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868952800, #    utc_start 1993-03-27 22:00:00 (Sat)
  62884674000, #      utc_end 1993-09-25 21:00:00 (Sat)
  62868963600, #  local_start 1993-03-28 01:00:00 (Sun)
  62884684800, #    local_end 1993-09-26 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884674000, #    utc_start 1993-09-25 21:00:00 (Sat)
  62900402400, #      utc_end 1994-03-26 22:00:00 (Sat)
  62884681200, #  local_start 1993-09-25 23:00:00 (Sat)
  62900409600, #    local_end 1994-03-27 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900402400, #    utc_start 1994-03-26 22:00:00 (Sat)
  62903422800, #      utc_end 1994-04-30 21:00:00 (Sat)
  62900413200, #  local_start 1994-03-27 01:00:00 (Sun)
  62903433600, #    local_end 1994-05-01 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62903422800, #    utc_start 1994-04-30 21:00:00 (Sat)
  62916120000, #      utc_end 1994-09-24 20:00:00 (Sat)
  62903437200, #  local_start 1994-05-01 01:00:00 (Sun)
  62916134400, #    local_end 1994-09-25 00:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62916120000, #    utc_start 1994-09-24 20:00:00 (Sat)
  62931848400, #      utc_end 1995-03-25 21:00:00 (Sat)
  62916130800, #  local_start 1994-09-24 23:00:00 (Sat)
  62931859200, #    local_end 1995-03-26 00:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62931848400, #    utc_start 1995-03-25 21:00:00 (Sat)
  62947569600, #      utc_end 1995-09-23 20:00:00 (Sat)
  62931862800, #  local_start 1995-03-26 01:00:00 (Sun)
  62947584000, #    local_end 1995-09-24 00:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62947569600, #    utc_start 1995-09-23 20:00:00 (Sat)
  62963902800, #      utc_end 1996-03-30 21:00:00 (Sat)
  62947580400, #  local_start 1995-09-23 23:00:00 (Sat)
  62963913600, #    local_end 1996-03-31 00:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62963902800, #    utc_start 1996-03-30 21:00:00 (Sat)
  62982057600, #      utc_end 1996-10-27 00:00:00 (Sun)
  62963917200, #  local_start 1996-03-31 01:00:00 (Sun)
  62982072000, #    local_end 1996-10-27 04:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62982057600, #    utc_start 1996-10-27 00:00:00 (Sun)
  62987749200, #      utc_end 1996-12-31 21:00:00 (Tue)
  62982068400, #  local_start 1996-10-27 03:00:00 (Sun)
  62987760000, #    local_end 1997-01-01 00:00:00 (Wed)
  10800,
  0,
  'MSK',
      ],
      [
  62987749200, #    utc_start 1996-12-31 21:00:00 (Tue)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62987760000, #  local_start 1997-01-01 00:00:00 (Wed)
  62995377600, #    local_end 1997-03-30 04:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995377600, #  local_start 1997-03-30 04:00:00 (Sun)
  63013521600, #    local_end 1997-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013518000, #  local_start 1997-10-26 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026827200, #  local_start 1998-03-29 04:00:00 (Sun)
  63044971200, #    local_end 1998-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044967600, #  local_start 1998-10-25 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058276800, #  local_start 1999-03-28 04:00:00 (Sun)
  63077025600, #    local_end 1999-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089726400, #  local_start 2000-03-26 04:00:00 (Sun)
  63108475200, #    local_end 2000-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108471600, #  local_start 2000-10-29 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121176000, #  local_start 2001-03-25 04:00:00 (Sun)
  63139924800, #    local_end 2001-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139921200, #  local_start 2001-10-28 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153230400, #  local_start 2002-03-31 04:00:00 (Sun)
  63171374400, #    local_end 2002-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171370800, #  local_start 2002-10-27 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184680000, #  local_start 2003-03-30 04:00:00 (Sun)
  63202824000, #    local_end 2003-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216129600, #  local_start 2004-03-28 04:00:00 (Sun)
  63234878400, #    local_end 2004-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247579200, #  local_start 2005-03-27 04:00:00 (Sun)
  63266328000, #    local_end 2005-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279025200, #    local_end 2006-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279028800, #  local_start 2006-03-26 04:00:00 (Sun)
  63297777600, #    local_end 2006-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310478400, #  local_start 2007-03-25 04:00:00 (Sun)
  63329227200, #    local_end 2007-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63342529200, #    local_end 2008-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342532800, #  local_start 2008-03-30 04:00:00 (Sun)
  63360676800, #    local_end 2008-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373978800, #    local_end 2009-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373982400, #  local_start 2009-03-29 04:00:00 (Sun)
  63392126400, #    local_end 2009-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392122800, #  local_start 2009-10-25 03:00:00 (Sun)
  63405428400, #    local_end 2010-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405432000, #  local_start 2010-03-28 04:00:00 (Sun)
  63424180800, #    local_end 2010-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424177200, #  local_start 2010-10-31 03:00:00 (Sun)
  63436878000, #    local_end 2011-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436881600, #  local_start 2011-03-27 04:00:00 (Sun)
  63455630400, #    local_end 2011-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455626800, #  local_start 2011-10-30 03:00:00 (Sun)
  63468327600, #    local_end 2012-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468331200, #  local_start 2012-03-25 04:00:00 (Sun)
  63487080000, #    local_end 2012-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487076400, #  local_start 2012-10-28 03:00:00 (Sun)
  63500382000, #    local_end 2013-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500385600, #  local_start 2013-03-31 04:00:00 (Sun)
  63518529600, #    local_end 2013-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531820800, #      utc_end 2014-03-30 00:00:00 (Sun)
  63518526000, #  local_start 2013-10-27 03:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63531820800, #    utc_start 2014-03-30 00:00:00 (Sun)
  63549957600, #      utc_end 2014-10-25 22:00:00 (Sat)
  63531835200, #  local_start 2014-03-30 04:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  14400,
  0,
  'MSK',
      ],
      [
  63549957600, #    utc_start 2014-10-25 22:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  10800,
  0,
  'MSK',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {35}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_SIMFEROPOL

    $main::fatpacked{"DateTime/TimeZone/Europe/Sofia.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_SOFIA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Sofia;
  $DateTime::TimeZone::Europe::Sofia::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Sofia::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295536804, #      utc_end 1879-12-31 22:26:44 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  5596,
  0,
  'LMT',
      ],
      [
  59295536804, #    utc_start 1879-12-31 22:26:44 (Wed)
  59766156184, #      utc_end 1894-11-29 22:03:04 (Thu)
  59295543820, #  local_start 1880-01-01 00:23:40 (Thu)
  59766163200, #    local_end 1894-11-30 00:00:00 (Fri)
  7016,
  0,
  'IMT',
      ],
      [
  59766156184, #    utc_start 1894-11-29 22:03:04 (Thu)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  59766163384, #  local_start 1894-11-30 00:03:04 (Fri)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  0,
  'EET',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61338906000, #      utc_end 1944-10-02 01:00:00 (Mon)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61338913200, #    local_end 1944-10-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61338906000, #    utc_start 1944-10-02 01:00:00 (Mon)
  61346761200, #      utc_end 1944-12-31 23:00:00 (Sun)
  61338909600, #  local_start 1944-10-02 02:00:00 (Mon)
  61346764800, #    local_end 1945-01-01 00:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61346761200, #    utc_start 1944-12-31 23:00:00 (Sun)
  61354634400, #      utc_end 1945-04-02 02:00:00 (Mon)
  61346764800, #  local_start 1945-01-01 00:00:00 (Mon)
  61354638000, #    local_end 1945-04-02 03:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61354634400, #    utc_start 1945-04-02 02:00:00 (Mon)
  62427445200, #      utc_end 1979-03-31 21:00:00 (Sat)
  61354641600, #  local_start 1945-04-02 04:00:00 (Mon)
  62427452400, #    local_end 1979-03-31 23:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62427445200, #    utc_start 1979-03-31 21:00:00 (Sat)
  62443260000, #      utc_end 1979-09-30 22:00:00 (Sun)
  62427456000, #  local_start 1979-04-01 00:00:00 (Sun)
  62443270800, #    local_end 1979-10-01 01:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62443260000, #    utc_start 1979-09-30 22:00:00 (Sun)
  62459499600, #      utc_end 1980-04-05 21:00:00 (Sat)
  62443267200, #  local_start 1979-10-01 00:00:00 (Mon)
  62459506800, #    local_end 1980-04-05 23:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62459499600, #    utc_start 1980-04-05 21:00:00 (Sat)
  62474709600, #      utc_end 1980-09-28 22:00:00 (Sun)
  62459510400, #  local_start 1980-04-06 00:00:00 (Sun)
  62474720400, #    local_end 1980-09-29 01:00:00 (Mon)
  10800,
  1,
  'EEST',
      ],
      [
  62474709600, #    utc_start 1980-09-28 22:00:00 (Sun)
  62490949200, #      utc_end 1981-04-04 21:00:00 (Sat)
  62474716800, #  local_start 1980-09-29 00:00:00 (Mon)
  62490956400, #    local_end 1981-04-04 23:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62490949200, #    utc_start 1981-04-04 21:00:00 (Sat)
  62506076400, #      utc_end 1981-09-26 23:00:00 (Sat)
  62490960000, #  local_start 1981-04-05 00:00:00 (Sun)
  62506087200, #    local_end 1981-09-27 02:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62506076400, #    utc_start 1981-09-26 23:00:00 (Sat)
  62522398800, #      utc_end 1982-04-03 21:00:00 (Sat)
  62506083600, #  local_start 1981-09-27 01:00:00 (Sun)
  62522406000, #    local_end 1982-04-03 23:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  62522398800, #    utc_start 1982-04-03 21:00:00 (Sat)
  62537529600, #      utc_end 1982-09-26 00:00:00 (Sun)
  62522409600, #  local_start 1982-04-04 00:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62537529600, #    utc_start 1982-09-26 00:00:00 (Sun)
  62553254400, #      utc_end 1983-03-27 00:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62553254400, #    utc_start 1983-03-27 00:00:00 (Sun)
  62568979200, #      utc_end 1983-09-25 00:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62568979200, #    utc_start 1983-09-25 00:00:00 (Sun)
  62584704000, #      utc_end 1984-03-25 00:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62584704000, #    utc_start 1984-03-25 00:00:00 (Sun)
  62601033600, #      utc_end 1984-09-30 00:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62601033600, #    utc_start 1984-09-30 00:00:00 (Sun)
  62616758400, #      utc_end 1985-03-31 00:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62616758400, #    utc_start 1985-03-31 00:00:00 (Sun)
  62632483200, #      utc_end 1985-09-29 00:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62632483200, #    utc_start 1985-09-29 00:00:00 (Sun)
  62648208000, #      utc_end 1986-03-30 00:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62648208000, #    utc_start 1986-03-30 00:00:00 (Sun)
  62663932800, #      utc_end 1986-09-28 00:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62663932800, #    utc_start 1986-09-28 00:00:00 (Sun)
  62679657600, #      utc_end 1987-03-29 00:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62679657600, #    utc_start 1987-03-29 00:00:00 (Sun)
  62695382400, #      utc_end 1987-09-27 00:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62695382400, #    utc_start 1987-09-27 00:00:00 (Sun)
  62711107200, #      utc_end 1988-03-27 00:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62711107200, #    utc_start 1988-03-27 00:00:00 (Sun)
  62726832000, #      utc_end 1988-09-25 00:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62726832000, #    utc_start 1988-09-25 00:00:00 (Sun)
  62742556800, #      utc_end 1989-03-26 00:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62742556800, #    utc_start 1989-03-26 00:00:00 (Sun)
  62758281600, #      utc_end 1989-09-24 00:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62758281600, #    utc_start 1989-09-24 00:00:00 (Sun)
  62774006400, #      utc_end 1990-03-25 00:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62774006400, #    utc_start 1990-03-25 00:00:00 (Sun)
  62790336000, #      utc_end 1990-09-30 00:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62790336000, #    utc_start 1990-09-30 00:00:00 (Sun)
  62798364000, #      utc_end 1990-12-31 22:00:00 (Mon)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62798371200, #    local_end 1991-01-01 00:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  62798364000, #    utc_start 1990-12-31 22:00:00 (Mon)
  62806053600, #      utc_end 1991-03-30 22:00:00 (Sat)
  62798371200, #  local_start 1991-01-01 00:00:00 (Tue)
  62806060800, #    local_end 1991-03-31 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62806053600, #    utc_start 1991-03-30 22:00:00 (Sat)
  62821774800, #      utc_end 1991-09-28 21:00:00 (Sat)
  62806064400, #  local_start 1991-03-31 01:00:00 (Sun)
  62821785600, #    local_end 1991-09-29 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821774800, #    utc_start 1991-09-28 21:00:00 (Sat)
  62837503200, #      utc_end 1992-03-28 22:00:00 (Sat)
  62821782000, #  local_start 1991-09-28 23:00:00 (Sat)
  62837510400, #    local_end 1992-03-29 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837503200, #    utc_start 1992-03-28 22:00:00 (Sat)
  62853224400, #      utc_end 1992-09-26 21:00:00 (Sat)
  62837514000, #  local_start 1992-03-29 01:00:00 (Sun)
  62853235200, #    local_end 1992-09-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853224400, #    utc_start 1992-09-26 21:00:00 (Sat)
  62868952800, #      utc_end 1993-03-27 22:00:00 (Sat)
  62853231600, #  local_start 1992-09-26 23:00:00 (Sat)
  62868960000, #    local_end 1993-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868952800, #    utc_start 1993-03-27 22:00:00 (Sat)
  62884674000, #      utc_end 1993-09-25 21:00:00 (Sat)
  62868963600, #  local_start 1993-03-28 01:00:00 (Sun)
  62884684800, #    local_end 1993-09-26 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884674000, #    utc_start 1993-09-25 21:00:00 (Sat)
  62900402400, #      utc_end 1994-03-26 22:00:00 (Sat)
  62884681200, #  local_start 1993-09-25 23:00:00 (Sat)
  62900409600, #    local_end 1994-03-27 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900402400, #    utc_start 1994-03-26 22:00:00 (Sat)
  62916123600, #      utc_end 1994-09-24 21:00:00 (Sat)
  62900413200, #  local_start 1994-03-27 01:00:00 (Sun)
  62916134400, #    local_end 1994-09-25 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916123600, #    utc_start 1994-09-24 21:00:00 (Sat)
  62931852000, #      utc_end 1995-03-25 22:00:00 (Sat)
  62916130800, #  local_start 1994-09-24 23:00:00 (Sat)
  62931859200, #    local_end 1995-03-26 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931852000, #    utc_start 1995-03-25 22:00:00 (Sat)
  62947573200, #      utc_end 1995-09-23 21:00:00 (Sat)
  62931862800, #  local_start 1995-03-26 01:00:00 (Sun)
  62947584000, #    local_end 1995-09-24 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947573200, #    utc_start 1995-09-23 21:00:00 (Sat)
  62963906400, #      utc_end 1996-03-30 22:00:00 (Sat)
  62947580400, #  local_start 1995-09-23 23:00:00 (Sat)
  62963913600, #    local_end 1996-03-31 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963906400, #    utc_start 1996-03-30 22:00:00 (Sat)
  62982046800, #      utc_end 1996-10-26 21:00:00 (Sat)
  62963917200, #  local_start 1996-03-31 01:00:00 (Sun)
  62982057600, #    local_end 1996-10-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62982046800, #    utc_start 1996-10-26 21:00:00 (Sat)
  62987752800, #      utc_end 1996-12-31 22:00:00 (Tue)
  62982054000, #  local_start 1996-10-26 23:00:00 (Sat)
  62987760000, #    local_end 1997-01-01 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62987752800, #    utc_start 1996-12-31 22:00:00 (Tue)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62987760000, #  local_start 1997-01-01 00:00:00 (Wed)
  62995374000, #    local_end 1997-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995377600, #  local_start 1997-03-30 04:00:00 (Sun)
  63013521600, #    local_end 1997-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013518000, #  local_start 1997-10-26 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026827200, #  local_start 1998-03-29 04:00:00 (Sun)
  63044971200, #    local_end 1998-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044967600, #  local_start 1998-10-25 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058276800, #  local_start 1999-03-28 04:00:00 (Sun)
  63077025600, #    local_end 1999-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089726400, #  local_start 2000-03-26 04:00:00 (Sun)
  63108475200, #    local_end 2000-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108471600, #  local_start 2000-10-29 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121176000, #  local_start 2001-03-25 04:00:00 (Sun)
  63139924800, #    local_end 2001-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139921200, #  local_start 2001-10-28 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153230400, #  local_start 2002-03-31 04:00:00 (Sun)
  63171374400, #    local_end 2002-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171370800, #  local_start 2002-10-27 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184680000, #  local_start 2003-03-30 04:00:00 (Sun)
  63202824000, #    local_end 2003-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216129600, #  local_start 2004-03-28 04:00:00 (Sun)
  63234878400, #    local_end 2004-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247579200, #  local_start 2005-03-27 04:00:00 (Sun)
  63266328000, #    local_end 2005-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279025200, #    local_end 2006-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279028800, #  local_start 2006-03-26 04:00:00 (Sun)
  63297777600, #    local_end 2006-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310478400, #  local_start 2007-03-25 04:00:00 (Sun)
  63329227200, #    local_end 2007-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63342529200, #    local_end 2008-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342532800, #  local_start 2008-03-30 04:00:00 (Sun)
  63360676800, #    local_end 2008-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373978800, #    local_end 2009-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373982400, #  local_start 2009-03-29 04:00:00 (Sun)
  63392126400, #    local_end 2009-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392122800, #  local_start 2009-10-25 03:00:00 (Sun)
  63405428400, #    local_end 2010-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405432000, #  local_start 2010-03-28 04:00:00 (Sun)
  63424180800, #    local_end 2010-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424177200, #  local_start 2010-10-31 03:00:00 (Sun)
  63436878000, #    local_end 2011-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436881600, #  local_start 2011-03-27 04:00:00 (Sun)
  63455630400, #    local_end 2011-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455626800, #  local_start 2011-10-30 03:00:00 (Sun)
  63468327600, #    local_end 2012-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468331200, #  local_start 2012-03-25 04:00:00 (Sun)
  63487080000, #    local_end 2012-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487076400, #  local_start 2012-10-28 03:00:00 (Sun)
  63500382000, #    local_end 2013-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500385600, #  local_start 2013-03-31 04:00:00 (Sun)
  63518529600, #    local_end 2013-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518526000, #  local_start 2013-10-27 03:00:00 (Sun)
  63531831600, #    local_end 2014-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531835200, #  local_start 2014-03-30 04:00:00 (Sun)
  63549979200, #    local_end 2014-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549975600, #  local_start 2014-10-26 03:00:00 (Sun)
  63563281200, #    local_end 2015-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563284800, #  local_start 2015-03-29 04:00:00 (Sun)
  63581428800, #    local_end 2015-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581425200, #  local_start 2015-10-25 03:00:00 (Sun)
  63594730800, #    local_end 2016-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594734400, #  local_start 2016-03-27 04:00:00 (Sun)
  63613483200, #    local_end 2016-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613479600, #  local_start 2016-10-30 03:00:00 (Sun)
  63626180400, #    local_end 2017-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626184000, #  local_start 2017-03-26 04:00:00 (Sun)
  63644932800, #    local_end 2017-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644929200, #  local_start 2017-10-29 03:00:00 (Sun)
  63657630000, #    local_end 2018-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657633600, #  local_start 2018-03-25 04:00:00 (Sun)
  63676382400, #    local_end 2018-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676378800, #  local_start 2018-10-28 03:00:00 (Sun)
  63689684400, #    local_end 2019-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689688000, #  local_start 2019-03-31 04:00:00 (Sun)
  63707832000, #    local_end 2019-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707828400, #  local_start 2019-10-27 03:00:00 (Sun)
  63721134000, #    local_end 2020-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721137600, #  local_start 2020-03-29 04:00:00 (Sun)
  63739281600, #    local_end 2020-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739278000, #  local_start 2020-10-25 03:00:00 (Sun)
  63752583600, #    local_end 2021-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752587200, #  local_start 2021-03-28 04:00:00 (Sun)
  63771336000, #    local_end 2021-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771332400, #  local_start 2021-10-31 03:00:00 (Sun)
  63784033200, #    local_end 2022-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784036800, #  local_start 2022-03-27 04:00:00 (Sun)
  63802785600, #    local_end 2022-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802782000, #  local_start 2022-10-30 03:00:00 (Sun)
  63815482800, #    local_end 2023-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815486400, #  local_start 2023-03-26 04:00:00 (Sun)
  63834235200, #    local_end 2023-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834231600, #  local_start 2023-10-29 03:00:00 (Sun)
  63847537200, #    local_end 2024-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847540800, #  local_start 2024-03-31 04:00:00 (Sun)
  63865684800, #    local_end 2024-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865681200, #  local_start 2024-10-27 03:00:00 (Sun)
  63878986800, #    local_end 2025-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878990400, #  local_start 2025-03-30 04:00:00 (Sun)
  63897134400, #    local_end 2025-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897130800, #  local_start 2025-10-26 03:00:00 (Sun)
  63910436400, #    local_end 2026-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910440000, #  local_start 2026-03-29 04:00:00 (Sun)
  63928584000, #    local_end 2026-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928580400, #  local_start 2026-10-25 03:00:00 (Sun)
  63941886000, #    local_end 2027-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941889600, #  local_start 2027-03-28 04:00:00 (Sun)
  63960638400, #    local_end 2027-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {51}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 729025,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 729025,
      'utc_rd_secs' => 0,
      'utc_year' => 1998
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 729024,
      'local_rd_secs' => 79200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 729024,
      'utc_rd_secs' => 79200,
      'utc_year' => 1997
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_SOFIA

    $main::fatpacked{"DateTime/TimeZone/Europe/Stockholm.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_STOCKHOLM';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Stockholm;
  $DateTime::TimeZone::Europe::Stockholm::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Stockholm::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59264002068, #      utc_end 1878-12-31 22:47:48 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59264006400, #    local_end 1879-01-01 00:00:00 (Wed)
  4332,
  0,
  'LMT',
      ],
      [
  59264002068, #    utc_start 1878-12-31 22:47:48 (Tue)
  59926690786, #      utc_end 1899-12-31 22:59:46 (Sun)
  59264005682, #  local_start 1878-12-31 23:48:02 (Tue)
  59926694400, #    local_end 1900-01-01 00:00:00 (Mon)
  3614,
  0,
  'SET',
      ],
      [
  59926690786, #    utc_start 1899-12-31 22:59:46 (Sun)
  60443186400, #      utc_end 1916-05-14 22:00:00 (Sun)
  59926694386, #  local_start 1899-12-31 23:59:46 (Sun)
  60443190000, #    local_end 1916-05-14 23:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60443186400, #    utc_start 1916-05-14 22:00:00 (Sun)
  60455199600, #      utc_end 1916-09-30 23:00:00 (Sat)
  60443193600, #  local_start 1916-05-15 00:00:00 (Mon)
  60455206800, #    local_end 1916-10-01 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60455199600, #    utc_start 1916-09-30 23:00:00 (Sat)
  62451212400, #      utc_end 1979-12-31 23:00:00 (Mon)
  60455203200, #  local_start 1916-10-01 00:00:00 (Sun)
  62451216000, #    local_end 1980-01-01 00:00:00 (Tue)
  3600,
  0,
  'CET',
      ],
      [
  62451212400, #    utc_start 1979-12-31 23:00:00 (Mon)
  62459514000, #      utc_end 1980-04-06 01:00:00 (Sun)
  62451216000, #  local_start 1980-01-01 00:00:00 (Tue)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62459514000, #    utc_start 1980-04-06 01:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474641200, #    local_end 1980-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474637600, #  local_start 1980-09-28 02:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {49}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722815,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722815,
      'utc_rd_secs' => 0,
      'utc_year' => 1981
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 722814,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 722814,
      'utc_rd_secs' => 82800,
      'utc_year' => 1980
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_STOCKHOLM

    $main::fatpacked{"DateTime/TimeZone/Europe/Tallinn.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_TALLINN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Tallinn;
  $DateTime::TimeZone::Europe::Tallinn::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Tallinn::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295536460, #      utc_end 1879-12-31 22:21:00 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  5940,
  0,
  'LMT',
      ],
      [
  59295536460, #    utc_start 1879-12-31 22:21:00 (Wed)
  60497360460, #      utc_end 1918-01-31 22:21:00 (Thu)
  59295542400, #  local_start 1880-01-01 00:00:00 (Thu)
  60497366400, #    local_end 1918-02-01 00:00:00 (Fri)
  5940,
  0,
  'TMT',
      ],
      [
  60497360460, #    utc_start 1918-01-31 22:21:00 (Thu)
  60503677200, #      utc_end 1918-04-15 01:00:00 (Mon)
  60497364060, #  local_start 1918-01-31 23:21:00 (Thu)
  60503680800, #    local_end 1918-04-15 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60503677200, #    utc_start 1918-04-15 01:00:00 (Mon)
  60516982800, #      utc_end 1918-09-16 01:00:00 (Mon)
  60503684400, #  local_start 1918-04-15 03:00:00 (Mon)
  60516990000, #    local_end 1918-09-16 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60516982800, #    utc_start 1918-09-16 01:00:00 (Mon)
  60541858800, #      utc_end 1919-06-30 23:00:00 (Mon)
  60516986400, #  local_start 1918-09-16 02:00:00 (Mon)
  60541862400, #    local_end 1919-07-01 00:00:00 (Tue)
  3600,
  0,
  'CET',
      ],
      [
  60541858800, #    utc_start 1919-06-30 23:00:00 (Mon)
  60599744460, #      utc_end 1921-04-30 22:21:00 (Sat)
  60541864740, #  local_start 1919-07-01 00:39:00 (Tue)
  60599750400, #    local_end 1921-05-01 00:00:00 (Sun)
  5940,
  0,
  'TMT',
      ],
      [
  60599744460, #    utc_start 1921-04-30 22:21:00 (Sat)
  61207740000, #      utc_end 1940-08-05 22:00:00 (Mon)
  60599751660, #  local_start 1921-05-01 00:21:00 (Sun)
  61207747200, #    local_end 1940-08-06 00:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  61207740000, #    utc_start 1940-08-05 22:00:00 (Mon)
  61242728400, #      utc_end 1941-09-14 21:00:00 (Sun)
  61207750800, #  local_start 1940-08-06 01:00:00 (Tue)
  61242739200, #    local_end 1941-09-15 00:00:00 (Mon)
  10800,
  0,
  'MSK',
      ],
      [
  61242728400, #    utc_start 1941-09-14 21:00:00 (Sun)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61242735600, #  local_start 1941-09-14 23:00:00 (Sun)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61338031200, #      utc_end 1944-09-21 22:00:00 (Thu)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61338038400, #    local_end 1944-09-22 00:00:00 (Fri)
  7200,
  1,
  'CEST',
      ],
      [
  61338031200, #    utc_start 1944-09-21 22:00:00 (Thu)
  62490603600, #      utc_end 1981-03-31 21:00:00 (Tue)
  61338042000, #  local_start 1944-09-22 01:00:00 (Fri)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  10800,
  0,
  'MSK',
      ],
      [
  62490603600, #    utc_start 1981-03-31 21:00:00 (Tue)
  62506411200, #      utc_end 1981-09-30 20:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  14400,
  1,
  'MSD',
      ],
      [
  62506411200, #    utc_start 1981-09-30 20:00:00 (Wed)
  62522139600, #      utc_end 1982-03-31 21:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  10800,
  0,
  'MSK',
      ],
      [
  62522139600, #    utc_start 1982-03-31 21:00:00 (Wed)
  62537947200, #      utc_end 1982-09-30 20:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  14400,
  1,
  'MSD',
      ],
      [
  62537947200, #    utc_start 1982-09-30 20:00:00 (Thu)
  62553675600, #      utc_end 1983-03-31 21:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  10800,
  0,
  'MSK',
      ],
      [
  62553675600, #    utc_start 1983-03-31 21:00:00 (Thu)
  62569483200, #      utc_end 1983-09-30 20:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  14400,
  1,
  'MSD',
      ],
      [
  62569483200, #    utc_start 1983-09-30 20:00:00 (Fri)
  62585298000, #      utc_end 1984-03-31 21:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62585298000, #    utc_start 1984-03-31 21:00:00 (Sat)
  62601030000, #      utc_end 1984-09-29 23:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62601030000, #    utc_start 1984-09-29 23:00:00 (Sat)
  62616754800, #      utc_end 1985-03-30 23:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62616754800, #    utc_start 1985-03-30 23:00:00 (Sat)
  62632479600, #      utc_end 1985-09-28 23:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62632479600, #    utc_start 1985-09-28 23:00:00 (Sat)
  62648204400, #      utc_end 1986-03-29 23:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62648204400, #    utc_start 1986-03-29 23:00:00 (Sat)
  62663929200, #      utc_end 1986-09-27 23:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62663929200, #    utc_start 1986-09-27 23:00:00 (Sat)
  62679654000, #      utc_end 1987-03-28 23:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62679654000, #    utc_start 1987-03-28 23:00:00 (Sat)
  62695378800, #      utc_end 1987-09-26 23:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62695378800, #    utc_start 1987-09-26 23:00:00 (Sat)
  62711103600, #      utc_end 1988-03-26 23:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62711103600, #    utc_start 1988-03-26 23:00:00 (Sat)
  62726828400, #      utc_end 1988-09-24 23:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62726828400, #    utc_start 1988-09-24 23:00:00 (Sat)
  62742553200, #      utc_end 1989-03-25 23:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62742553200, #    utc_start 1989-03-25 23:00:00 (Sat)
  62758281600, #      utc_end 1989-09-24 00:00:00 (Sun)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62758281600, #    utc_start 1989-09-24 00:00:00 (Sun)
  62774006400, #      utc_end 1990-03-25 00:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62774006400, #    utc_start 1990-03-25 00:00:00 (Sun)
  62790336000, #      utc_end 1990-09-30 00:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62790336000, #    utc_start 1990-09-30 00:00:00 (Sun)
  62806060800, #      utc_end 1991-03-31 00:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62806060800, #    utc_start 1991-03-31 00:00:00 (Sun)
  62821785600, #      utc_end 1991-09-29 00:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821785600, #    utc_start 1991-09-29 00:00:00 (Sun)
  62837510400, #      utc_end 1992-03-29 00:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837510400, #    utc_start 1992-03-29 00:00:00 (Sun)
  62853235200, #      utc_end 1992-09-27 00:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853235200, #    utc_start 1992-09-27 00:00:00 (Sun)
  62868960000, #      utc_end 1993-03-28 00:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868960000, #    utc_start 1993-03-28 00:00:00 (Sun)
  62884684800, #      utc_end 1993-09-26 00:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884684800, #    utc_start 1993-09-26 00:00:00 (Sun)
  62900409600, #      utc_end 1994-03-27 00:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900409600, #    utc_start 1994-03-27 00:00:00 (Sun)
  62916134400, #      utc_end 1994-09-25 00:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916134400, #    utc_start 1994-09-25 00:00:00 (Sun)
  62931859200, #      utc_end 1995-03-26 00:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931859200, #    utc_start 1995-03-26 00:00:00 (Sun)
  62947584000, #      utc_end 1995-09-24 00:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947584000, #    utc_start 1995-09-24 00:00:00 (Sun)
  62963913600, #      utc_end 1996-03-31 00:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963913600, #    utc_start 1996-03-31 00:00:00 (Sun)
  62982057600, #      utc_end 1996-10-27 00:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62982057600, #    utc_start 1996-10-27 00:00:00 (Sun)
  62995363200, #      utc_end 1997-03-30 00:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995363200, #    utc_start 1997-03-30 00:00:00 (Sun)
  63013507200, #      utc_end 1997-10-26 00:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63013507200, #    utc_start 1997-10-26 00:00:00 (Sun)
  63026812800, #      utc_end 1998-03-29 00:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026812800, #    utc_start 1998-03-29 00:00:00 (Sun)
  63042094800, #      utc_end 1998-09-21 21:00:00 (Mon)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63042105600, #    local_end 1998-09-22 00:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  63042094800, #    utc_start 1998-09-21 21:00:00 (Mon)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63042105600, #  local_start 1998-09-22 00:00:00 (Tue)
  63044971200, #    local_end 1998-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044967600, #  local_start 1998-10-25 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058276800, #  local_start 1999-03-28 04:00:00 (Sun)
  63077025600, #    local_end 1999-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63149925600, #      utc_end 2002-02-20 22:00:00 (Wed)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63149932800, #    local_end 2002-02-21 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  63149925600, #    utc_start 2002-02-20 22:00:00 (Wed)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63149932800, #  local_start 2002-02-21 00:00:00 (Thu)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153230400, #  local_start 2002-03-31 04:00:00 (Sun)
  63171374400, #    local_end 2002-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171370800, #  local_start 2002-10-27 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184680000, #  local_start 2003-03-30 04:00:00 (Sun)
  63202824000, #    local_end 2003-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216129600, #  local_start 2004-03-28 04:00:00 (Sun)
  63234878400, #    local_end 2004-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247579200, #  local_start 2005-03-27 04:00:00 (Sun)
  63266328000, #    local_end 2005-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279025200, #    local_end 2006-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279028800, #  local_start 2006-03-26 04:00:00 (Sun)
  63297777600, #    local_end 2006-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310478400, #  local_start 2007-03-25 04:00:00 (Sun)
  63329227200, #    local_end 2007-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63342529200, #    local_end 2008-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342532800, #  local_start 2008-03-30 04:00:00 (Sun)
  63360676800, #    local_end 2008-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373978800, #    local_end 2009-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373982400, #  local_start 2009-03-29 04:00:00 (Sun)
  63392126400, #    local_end 2009-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392122800, #  local_start 2009-10-25 03:00:00 (Sun)
  63405428400, #    local_end 2010-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405432000, #  local_start 2010-03-28 04:00:00 (Sun)
  63424180800, #    local_end 2010-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424177200, #  local_start 2010-10-31 03:00:00 (Sun)
  63436878000, #    local_end 2011-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436881600, #  local_start 2011-03-27 04:00:00 (Sun)
  63455630400, #    local_end 2011-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455626800, #  local_start 2011-10-30 03:00:00 (Sun)
  63468327600, #    local_end 2012-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468331200, #  local_start 2012-03-25 04:00:00 (Sun)
  63487080000, #    local_end 2012-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487076400, #  local_start 2012-10-28 03:00:00 (Sun)
  63500382000, #    local_end 2013-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500385600, #  local_start 2013-03-31 04:00:00 (Sun)
  63518529600, #    local_end 2013-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518526000, #  local_start 2013-10-27 03:00:00 (Sun)
  63531831600, #    local_end 2014-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531835200, #  local_start 2014-03-30 04:00:00 (Sun)
  63549979200, #    local_end 2014-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549975600, #  local_start 2014-10-26 03:00:00 (Sun)
  63563281200, #    local_end 2015-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563284800, #  local_start 2015-03-29 04:00:00 (Sun)
  63581428800, #    local_end 2015-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581425200, #  local_start 2015-10-25 03:00:00 (Sun)
  63594730800, #    local_end 2016-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594734400, #  local_start 2016-03-27 04:00:00 (Sun)
  63613483200, #    local_end 2016-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613479600, #  local_start 2016-10-30 03:00:00 (Sun)
  63626180400, #    local_end 2017-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626184000, #  local_start 2017-03-26 04:00:00 (Sun)
  63644932800, #    local_end 2017-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644929200, #  local_start 2017-10-29 03:00:00 (Sun)
  63657630000, #    local_end 2018-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657633600, #  local_start 2018-03-25 04:00:00 (Sun)
  63676382400, #    local_end 2018-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676378800, #  local_start 2018-10-28 03:00:00 (Sun)
  63689684400, #    local_end 2019-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689688000, #  local_start 2019-03-31 04:00:00 (Sun)
  63707832000, #    local_end 2019-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707828400, #  local_start 2019-10-27 03:00:00 (Sun)
  63721134000, #    local_end 2020-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721137600, #  local_start 2020-03-29 04:00:00 (Sun)
  63739281600, #    local_end 2020-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739278000, #  local_start 2020-10-25 03:00:00 (Sun)
  63752583600, #    local_end 2021-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752587200, #  local_start 2021-03-28 04:00:00 (Sun)
  63771336000, #    local_end 2021-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771332400, #  local_start 2021-10-31 03:00:00 (Sun)
  63784033200, #    local_end 2022-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784036800, #  local_start 2022-03-27 04:00:00 (Sun)
  63802785600, #    local_end 2022-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802782000, #  local_start 2022-10-30 03:00:00 (Sun)
  63815482800, #    local_end 2023-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815486400, #  local_start 2023-03-26 04:00:00 (Sun)
  63834235200, #    local_end 2023-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834231600, #  local_start 2023-10-29 03:00:00 (Sun)
  63847537200, #    local_end 2024-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847540800, #  local_start 2024-03-31 04:00:00 (Sun)
  63865684800, #    local_end 2024-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865681200, #  local_start 2024-10-27 03:00:00 (Sun)
  63878986800, #    local_end 2025-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878990400, #  local_start 2025-03-30 04:00:00 (Sun)
  63897134400, #    local_end 2025-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897130800, #  local_start 2025-10-26 03:00:00 (Sun)
  63910436400, #    local_end 2026-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910440000, #  local_start 2026-03-29 04:00:00 (Sun)
  63928584000, #    local_end 2026-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928580400, #  local_start 2026-10-25 03:00:00 (Sun)
  63941886000, #    local_end 2027-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941889600, #  local_start 2027-03-28 04:00:00 (Sun)
  63960638400, #    local_end 2027-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {50}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730902,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730902,
      'utc_rd_secs' => 0,
      'utc_year' => 2003
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 730901,
      'local_rd_secs' => 79200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 730901,
      'utc_rd_secs' => 79200,
      'utc_year' => 2003
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_TALLINN

    $main::fatpacked{"DateTime/TimeZone/Europe/Tirane.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_TIRANE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Tirane;
  $DateTime::TimeZone::Europe::Tirane::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Tirane::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60368452840, #      utc_end 1913-12-31 22:40:40 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60368457600, #    local_end 1914-01-01 00:00:00 (Thu)
  4760,
  0,
  'LMT',
      ],
      [
  60368452840, #    utc_start 1913-12-31 22:40:40 (Wed)
  61203337200, #      utc_end 1940-06-15 23:00:00 (Sat)
  60368456440, #  local_start 1913-12-31 23:40:40 (Wed)
  61203340800, #    local_end 1940-06-16 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61203337200, #    utc_start 1940-06-15 23:00:00 (Sat)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61203344400, #  local_start 1940-06-16 01:00:00 (Sun)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61292163600, #      utc_end 1943-04-10 01:00:00 (Sat)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61292170800, #    local_end 1943-04-10 03:00:00 (Sat)
  7200,
  1,
  'CEST',
      ],
      [
  61292163600, #    utc_start 1943-04-10 01:00:00 (Sat)
  62272537200, #      utc_end 1974-05-03 23:00:00 (Fri)
  61292167200, #  local_start 1943-04-10 02:00:00 (Sat)
  62272540800, #    local_end 1974-05-04 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62272537200, #    utc_start 1974-05-03 23:00:00 (Fri)
  62285580000, #      utc_end 1974-10-01 22:00:00 (Tue)
  62272544400, #  local_start 1974-05-04 01:00:00 (Sat)
  62285587200, #    local_end 1974-10-02 00:00:00 (Wed)
  7200,
  1,
  'CEST',
      ],
      [
  62285580000, #    utc_start 1974-10-01 22:00:00 (Tue)
  62303814000, #      utc_end 1975-04-30 23:00:00 (Wed)
  62285583600, #  local_start 1974-10-01 23:00:00 (Tue)
  62303817600, #    local_end 1975-05-01 00:00:00 (Thu)
  3600,
  0,
  'CET',
      ],
      [
  62303814000, #    utc_start 1975-04-30 23:00:00 (Wed)
  62317116000, #      utc_end 1975-10-01 22:00:00 (Wed)
  62303821200, #  local_start 1975-05-01 01:00:00 (Thu)
  62317123200, #    local_end 1975-10-02 00:00:00 (Thu)
  7200,
  1,
  'CEST',
      ],
      [
  62317116000, #    utc_start 1975-10-01 22:00:00 (Wed)
  62335522800, #      utc_end 1976-05-01 23:00:00 (Sat)
  62317119600, #  local_start 1975-10-01 23:00:00 (Wed)
  62335526400, #    local_end 1976-05-02 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62335522800, #    utc_start 1976-05-01 23:00:00 (Sat)
  62348824800, #      utc_end 1976-10-02 22:00:00 (Sat)
  62335530000, #  local_start 1976-05-02 01:00:00 (Sun)
  62348832000, #    local_end 1976-10-03 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62348824800, #    utc_start 1976-10-02 22:00:00 (Sat)
  62367577200, #      utc_end 1977-05-07 23:00:00 (Sat)
  62348828400, #  local_start 1976-10-02 23:00:00 (Sat)
  62367580800, #    local_end 1977-05-08 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62367577200, #    utc_start 1977-05-07 23:00:00 (Sat)
  62380274400, #      utc_end 1977-10-01 22:00:00 (Sat)
  62367584400, #  local_start 1977-05-08 01:00:00 (Sun)
  62380281600, #    local_end 1977-10-02 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62380274400, #    utc_start 1977-10-01 22:00:00 (Sat)
  62398940400, #      utc_end 1978-05-05 23:00:00 (Fri)
  62380278000, #  local_start 1977-10-01 23:00:00 (Sat)
  62398944000, #    local_end 1978-05-06 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62398940400, #    utc_start 1978-05-05 23:00:00 (Fri)
  62411724000, #      utc_end 1978-09-30 22:00:00 (Sat)
  62398947600, #  local_start 1978-05-06 01:00:00 (Sat)
  62411731200, #    local_end 1978-10-01 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62411724000, #    utc_start 1978-09-30 22:00:00 (Sat)
  62430390000, #      utc_end 1979-05-04 23:00:00 (Fri)
  62411727600, #  local_start 1978-09-30 23:00:00 (Sat)
  62430393600, #    local_end 1979-05-05 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62430390000, #    utc_start 1979-05-04 23:00:00 (Fri)
  62443173600, #      utc_end 1979-09-29 22:00:00 (Sat)
  62430397200, #  local_start 1979-05-05 01:00:00 (Sat)
  62443180800, #    local_end 1979-09-30 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62443173600, #    utc_start 1979-09-29 22:00:00 (Sat)
  62461839600, #      utc_end 1980-05-02 23:00:00 (Fri)
  62443177200, #  local_start 1979-09-29 23:00:00 (Sat)
  62461843200, #    local_end 1980-05-03 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62461839600, #    utc_start 1980-05-02 23:00:00 (Fri)
  62475141600, #      utc_end 1980-10-03 22:00:00 (Fri)
  62461846800, #  local_start 1980-05-03 01:00:00 (Sat)
  62475148800, #    local_end 1980-10-04 00:00:00 (Sat)
  7200,
  1,
  'CEST',
      ],
      [
  62475141600, #    utc_start 1980-10-03 22:00:00 (Fri)
  62492770800, #      utc_end 1981-04-25 23:00:00 (Sat)
  62475145200, #  local_start 1980-10-03 23:00:00 (Fri)
  62492774400, #    local_end 1981-04-26 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62492770800, #    utc_start 1981-04-25 23:00:00 (Sat)
  62506072800, #      utc_end 1981-09-26 22:00:00 (Sat)
  62492778000, #  local_start 1981-04-26 01:00:00 (Sun)
  62506080000, #    local_end 1981-09-27 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506072800, #    utc_start 1981-09-26 22:00:00 (Sat)
  62524825200, #      utc_end 1982-05-01 23:00:00 (Sat)
  62506076400, #  local_start 1981-09-26 23:00:00 (Sat)
  62524828800, #    local_end 1982-05-02 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62524825200, #    utc_start 1982-05-01 23:00:00 (Sat)
  62538127200, #      utc_end 1982-10-02 22:00:00 (Sat)
  62524832400, #  local_start 1982-05-02 01:00:00 (Sun)
  62538134400, #    local_end 1982-10-03 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62538127200, #    utc_start 1982-10-02 22:00:00 (Sat)
  62555151600, #      utc_end 1983-04-17 23:00:00 (Sun)
  62538130800, #  local_start 1982-10-02 23:00:00 (Sat)
  62555155200, #    local_end 1983-04-18 00:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  62555151600, #    utc_start 1983-04-17 23:00:00 (Sun)
  62569490400, #      utc_end 1983-09-30 22:00:00 (Fri)
  62555158800, #  local_start 1983-04-18 01:00:00 (Mon)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  7200,
  1,
  'CEST',
      ],
      [
  62569490400, #    utc_start 1983-09-30 22:00:00 (Fri)
  62585305200, #      utc_end 1984-03-31 23:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62585305200, #    utc_start 1984-03-31 23:00:00 (Sat)
  62593164000, #      utc_end 1984-06-30 22:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62593171200, #    local_end 1984-07-01 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62593164000, #    utc_start 1984-06-30 22:00:00 (Sat)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62593171200, #  local_start 1984-07-01 00:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {57}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724458,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724458,
      'utc_rd_secs' => 0,
      'utc_year' => 1985
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 724457,
      'local_rd_secs' => 79200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 724457,
      'utc_rd_secs' => 79200,
      'utc_year' => 1985
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_TIRANE

    $main::fatpacked{"DateTime/TimeZone/Europe/Ulyanovsk.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_ULYANOVSK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Ulyanovsk;
  $DateTime::TimeZone::Europe::Ulyanovsk::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Ulyanovsk::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60541857984, #      utc_end 1919-06-30 22:46:24 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60541869600, #    local_end 1919-07-01 02:00:00 (Tue)
  11616,
  0,
  'LMT',
      ],
      [
  60541857984, #    utc_start 1919-06-30 22:46:24 (Mon)
  60888142800, #      utc_end 1930-06-20 21:00:00 (Fri)
  60541868784, #  local_start 1919-07-01 01:46:24 (Tue)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  10800,
  0,
  '+03',
      ],
      [
  60888142800, #    utc_start 1930-06-20 21:00:00 (Fri)
  62490600000, #      utc_end 1981-03-31 20:00:00 (Tue)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  14400,
  0,
  '+04',
      ],
      [
  62490600000, #    utc_start 1981-03-31 20:00:00 (Tue)
  62506407600, #      utc_end 1981-09-30 19:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  18000,
  1,
  '+05',
      ],
      [
  62506407600, #    utc_start 1981-09-30 19:00:00 (Wed)
  62522136000, #      utc_end 1982-03-31 20:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  14400,
  0,
  '+04',
      ],
      [
  62522136000, #    utc_start 1982-03-31 20:00:00 (Wed)
  62537943600, #      utc_end 1982-09-30 19:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  18000,
  1,
  '+05',
      ],
      [
  62537943600, #    utc_start 1982-09-30 19:00:00 (Thu)
  62553672000, #      utc_end 1983-03-31 20:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  14400,
  0,
  '+04',
      ],
      [
  62553672000, #    utc_start 1983-03-31 20:00:00 (Thu)
  62569479600, #      utc_end 1983-09-30 19:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  18000,
  1,
  '+05',
      ],
      [
  62569479600, #    utc_start 1983-09-30 19:00:00 (Fri)
  62585294400, #      utc_end 1984-03-31 20:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62585294400, #    utc_start 1984-03-31 20:00:00 (Sat)
  62601026400, #      utc_end 1984-09-29 22:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62601026400, #    utc_start 1984-09-29 22:00:00 (Sat)
  62616751200, #      utc_end 1985-03-30 22:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62616751200, #    utc_start 1985-03-30 22:00:00 (Sat)
  62632476000, #      utc_end 1985-09-28 22:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62632476000, #    utc_start 1985-09-28 22:00:00 (Sat)
  62648200800, #      utc_end 1986-03-29 22:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62648200800, #    utc_start 1986-03-29 22:00:00 (Sat)
  62663925600, #      utc_end 1986-09-27 22:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62663925600, #    utc_start 1986-09-27 22:00:00 (Sat)
  62679650400, #      utc_end 1987-03-28 22:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62679650400, #    utc_start 1987-03-28 22:00:00 (Sat)
  62695375200, #      utc_end 1987-09-26 22:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62695375200, #    utc_start 1987-09-26 22:00:00 (Sat)
  62711100000, #      utc_end 1988-03-26 22:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62711100000, #    utc_start 1988-03-26 22:00:00 (Sat)
  62726824800, #      utc_end 1988-09-24 22:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  18000,
  1,
  '+05',
      ],
      [
  62726824800, #    utc_start 1988-09-24 22:00:00 (Sat)
  62742549600, #      utc_end 1989-03-25 22:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  62742549600, #    utc_start 1989-03-25 22:00:00 (Sat)
  62758278000, #      utc_end 1989-09-23 23:00:00 (Sat)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62758278000, #    utc_start 1989-09-23 23:00:00 (Sat)
  62774002800, #      utc_end 1990-03-24 23:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62774002800, #    utc_start 1990-03-24 23:00:00 (Sat)
  62790332400, #      utc_end 1990-09-29 23:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62790332400, #    utc_start 1990-09-29 23:00:00 (Sat)
  62806057200, #      utc_end 1991-03-30 23:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62806057200, #    utc_start 1991-03-30 23:00:00 (Sat)
  62821785600, #      utc_end 1991-09-29 00:00:00 (Sun)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  10800,
  1,
  '+03',
      ],
      [
  62821785600, #    utc_start 1991-09-29 00:00:00 (Sun)
  62831462400, #      utc_end 1992-01-19 00:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62831469600, #    local_end 1992-01-19 02:00:00 (Sun)
  7200,
  0,
  '+02',
      ],
      [
  62831462400, #    utc_start 1992-01-19 00:00:00 (Sun)
  62837506800, #      utc_end 1992-03-28 23:00:00 (Sat)
  62831473200, #  local_start 1992-01-19 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62837506800, #    utc_start 1992-03-28 23:00:00 (Sat)
  62853231600, #      utc_end 1992-09-26 23:00:00 (Sat)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62853231600, #    utc_start 1992-09-26 23:00:00 (Sat)
  62868956400, #      utc_end 1993-03-27 23:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62868956400, #    utc_start 1993-03-27 23:00:00 (Sat)
  62884681200, #      utc_end 1993-09-25 23:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62884681200, #    utc_start 1993-09-25 23:00:00 (Sat)
  62900406000, #      utc_end 1994-03-26 23:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62900406000, #    utc_start 1994-03-26 23:00:00 (Sat)
  62916130800, #      utc_end 1994-09-24 23:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62916130800, #    utc_start 1994-09-24 23:00:00 (Sat)
  62931855600, #      utc_end 1995-03-25 23:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62931855600, #    utc_start 1995-03-25 23:00:00 (Sat)
  62947580400, #      utc_end 1995-09-23 23:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62947580400, #    utc_start 1995-09-23 23:00:00 (Sat)
  62963910000, #      utc_end 1996-03-30 23:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62963910000, #    utc_start 1996-03-30 23:00:00 (Sat)
  62982054000, #      utc_end 1996-10-26 23:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  62982054000, #    utc_start 1996-10-26 23:00:00 (Sat)
  62995359600, #      utc_end 1997-03-29 23:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  62995359600, #    utc_start 1997-03-29 23:00:00 (Sat)
  63013503600, #      utc_end 1997-10-25 23:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63013503600, #    utc_start 1997-10-25 23:00:00 (Sat)
  63026809200, #      utc_end 1998-03-28 23:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63026809200, #    utc_start 1998-03-28 23:00:00 (Sat)
  63044953200, #      utc_end 1998-10-24 23:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63044953200, #    utc_start 1998-10-24 23:00:00 (Sat)
  63058258800, #      utc_end 1999-03-27 23:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63058258800, #    utc_start 1999-03-27 23:00:00 (Sat)
  63077007600, #      utc_end 1999-10-30 23:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63077007600, #    utc_start 1999-10-30 23:00:00 (Sat)
  63089708400, #      utc_end 2000-03-25 23:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63089708400, #    utc_start 2000-03-25 23:00:00 (Sat)
  63108457200, #      utc_end 2000-10-28 23:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63108457200, #    utc_start 2000-10-28 23:00:00 (Sat)
  63121158000, #      utc_end 2001-03-24 23:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63121158000, #    utc_start 2001-03-24 23:00:00 (Sat)
  63139906800, #      utc_end 2001-10-27 23:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63139906800, #    utc_start 2001-10-27 23:00:00 (Sat)
  63153212400, #      utc_end 2002-03-30 23:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63153212400, #    utc_start 2002-03-30 23:00:00 (Sat)
  63171356400, #      utc_end 2002-10-26 23:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63171356400, #    utc_start 2002-10-26 23:00:00 (Sat)
  63184662000, #      utc_end 2003-03-29 23:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63184662000, #    utc_start 2003-03-29 23:00:00 (Sat)
  63202806000, #      utc_end 2003-10-25 23:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63202806000, #    utc_start 2003-10-25 23:00:00 (Sat)
  63216111600, #      utc_end 2004-03-27 23:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63216111600, #    utc_start 2004-03-27 23:00:00 (Sat)
  63234860400, #      utc_end 2004-10-30 23:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63234860400, #    utc_start 2004-10-30 23:00:00 (Sat)
  63247561200, #      utc_end 2005-03-26 23:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63247561200, #    utc_start 2005-03-26 23:00:00 (Sat)
  63266310000, #      utc_end 2005-10-29 23:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63266310000, #    utc_start 2005-10-29 23:00:00 (Sat)
  63279010800, #      utc_end 2006-03-25 23:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63279010800, #    utc_start 2006-03-25 23:00:00 (Sat)
  63297759600, #      utc_end 2006-10-28 23:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63297759600, #    utc_start 2006-10-28 23:00:00 (Sat)
  63310460400, #      utc_end 2007-03-24 23:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63310460400, #    utc_start 2007-03-24 23:00:00 (Sat)
  63329209200, #      utc_end 2007-10-27 23:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63329209200, #    utc_start 2007-10-27 23:00:00 (Sat)
  63342514800, #      utc_end 2008-03-29 23:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63342514800, #    utc_start 2008-03-29 23:00:00 (Sat)
  63360658800, #      utc_end 2008-10-25 23:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63360658800, #    utc_start 2008-10-25 23:00:00 (Sat)
  63373964400, #      utc_end 2009-03-28 23:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63373964400, #    utc_start 2009-03-28 23:00:00 (Sat)
  63392108400, #      utc_end 2009-10-24 23:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63392108400, #    utc_start 2009-10-24 23:00:00 (Sat)
  63405414000, #      utc_end 2010-03-27 23:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63405414000, #    utc_start 2010-03-27 23:00:00 (Sat)
  63424162800, #      utc_end 2010-10-30 23:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  14400,
  1,
  '+04',
      ],
      [
  63424162800, #    utc_start 2010-10-30 23:00:00 (Sat)
  63436863600, #      utc_end 2011-03-26 23:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63436863600, #    utc_start 2011-03-26 23:00:00 (Sat)
  63549957600, #      utc_end 2014-10-25 22:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  14400,
  0,
  '+04',
      ],
      [
  63549957600, #    utc_start 2014-10-25 22:00:00 (Sat)
  63594716400, #      utc_end 2016-03-26 23:00:00 (Sat)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  10800,
  0,
  '+03',
      ],
      [
  63594716400, #    utc_start 2016-03-26 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  14400,
  0,
  '+04',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {30}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_ULYANOVSK

    $main::fatpacked{"DateTime/TimeZone/Europe/Uzhgorod.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_UZHGOROD';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Uzhgorod;
  $DateTime::TimeZone::Europe::Uzhgorod::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Uzhgorod::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59634743448, #      utc_end 1890-09-30 22:30:48 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59634748800, #    local_end 1890-10-01 00:00:00 (Wed)
  5352,
  0,
  'LMT',
      ],
      [
  59634743448, #    utc_start 1890-09-30 22:30:48 (Tue)
  61188908400, #      utc_end 1939-12-31 23:00:00 (Sun)
  59634747048, #  local_start 1890-09-30 23:30:48 (Tue)
  61188912000, #    local_end 1940-01-01 00:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61188908400, #    utc_start 1939-12-31 23:00:00 (Sun)
  61196778000, #      utc_end 1940-04-01 01:00:00 (Mon)
  61188912000, #  local_start 1940-01-01 00:00:00 (Mon)
  61196781600, #    local_end 1940-04-01 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61196778000, #    utc_start 1940-04-01 01:00:00 (Mon)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61196785200, #  local_start 1940-04-01 03:00:00 (Mon)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61338808800, #      utc_end 1944-09-30 22:00:00 (Sat)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61338816000, #    local_end 1944-10-01 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61338808800, #    utc_start 1944-09-30 22:00:00 (Sat)
  61340968800, #      utc_end 1944-10-25 22:00:00 (Wed)
  61338816000, #  local_start 1944-10-01 00:00:00 (Sun)
  61340976000, #    local_end 1944-10-26 00:00:00 (Thu)
  7200,
  1,
  'CEST',
      ],
      [
  61340968800, #    utc_start 1944-10-25 22:00:00 (Wed)
  61362226800, #      utc_end 1945-06-28 23:00:00 (Thu)
  61340972400, #  local_start 1944-10-25 23:00:00 (Wed)
  61362230400, #    local_end 1945-06-29 00:00:00 (Fri)
  3600,
  0,
  'CET',
      ],
      [
  61362226800, #    utc_start 1945-06-28 23:00:00 (Thu)
  62490603600, #      utc_end 1981-03-31 21:00:00 (Tue)
  61362237600, #  local_start 1945-06-29 02:00:00 (Fri)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  10800,
  0,
  'MSK',
      ],
      [
  62490603600, #    utc_start 1981-03-31 21:00:00 (Tue)
  62506411200, #      utc_end 1981-09-30 20:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  14400,
  1,
  'MSD',
      ],
      [
  62506411200, #    utc_start 1981-09-30 20:00:00 (Wed)
  62522139600, #      utc_end 1982-03-31 21:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  10800,
  0,
  'MSK',
      ],
      [
  62522139600, #    utc_start 1982-03-31 21:00:00 (Wed)
  62537947200, #      utc_end 1982-09-30 20:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  14400,
  1,
  'MSD',
      ],
      [
  62537947200, #    utc_start 1982-09-30 20:00:00 (Thu)
  62553675600, #      utc_end 1983-03-31 21:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  10800,
  0,
  'MSK',
      ],
      [
  62553675600, #    utc_start 1983-03-31 21:00:00 (Thu)
  62569483200, #      utc_end 1983-09-30 20:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  14400,
  1,
  'MSD',
      ],
      [
  62569483200, #    utc_start 1983-09-30 20:00:00 (Fri)
  62585298000, #      utc_end 1984-03-31 21:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62585298000, #    utc_start 1984-03-31 21:00:00 (Sat)
  62601030000, #      utc_end 1984-09-29 23:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62601030000, #    utc_start 1984-09-29 23:00:00 (Sat)
  62616754800, #      utc_end 1985-03-30 23:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62616754800, #    utc_start 1985-03-30 23:00:00 (Sat)
  62632479600, #      utc_end 1985-09-28 23:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62632479600, #    utc_start 1985-09-28 23:00:00 (Sat)
  62648204400, #      utc_end 1986-03-29 23:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62648204400, #    utc_start 1986-03-29 23:00:00 (Sat)
  62663929200, #      utc_end 1986-09-27 23:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62663929200, #    utc_start 1986-09-27 23:00:00 (Sat)
  62679654000, #      utc_end 1987-03-28 23:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62679654000, #    utc_start 1987-03-28 23:00:00 (Sat)
  62695378800, #      utc_end 1987-09-26 23:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62695378800, #    utc_start 1987-09-26 23:00:00 (Sat)
  62711103600, #      utc_end 1988-03-26 23:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62711103600, #    utc_start 1988-03-26 23:00:00 (Sat)
  62726828400, #      utc_end 1988-09-24 23:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62726828400, #    utc_start 1988-09-24 23:00:00 (Sat)
  62742553200, #      utc_end 1989-03-25 23:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62742553200, #    utc_start 1989-03-25 23:00:00 (Sat)
  62758278000, #      utc_end 1989-09-23 23:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62758278000, #    utc_start 1989-09-23 23:00:00 (Sat)
  62766824400, #      utc_end 1989-12-31 21:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62766835200, #    local_end 1990-01-01 00:00:00 (Mon)
  10800,
  0,
  'MSK',
      ],
      [
  62766824400, #    utc_start 1989-12-31 21:00:00 (Sun)
  62782470000, #      utc_end 1990-06-30 23:00:00 (Sat)
  62766835200, #  local_start 1990-01-01 00:00:00 (Mon)
  62782480800, #    local_end 1990-07-01 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62782470000, #    utc_start 1990-06-30 23:00:00 (Sat)
  62806068000, #      utc_end 1991-03-31 02:00:00 (Sun)
  62782473600, #  local_start 1990-07-01 00:00:00 (Sun)
  62806071600, #    local_end 1991-03-31 03:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806068000, #    utc_start 1991-03-31 02:00:00 (Sun)
  62829900000, #      utc_end 1991-12-31 22:00:00 (Tue)
  62806075200, #  local_start 1991-03-31 04:00:00 (Sun)
  62829907200, #    local_end 1992-01-01 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  62829900000, #    utc_start 1991-12-31 22:00:00 (Tue)
  62837503200, #      utc_end 1992-03-28 22:00:00 (Sat)
  62829907200, #  local_start 1992-01-01 00:00:00 (Wed)
  62837510400, #    local_end 1992-03-29 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837503200, #    utc_start 1992-03-28 22:00:00 (Sat)
  62853224400, #      utc_end 1992-09-26 21:00:00 (Sat)
  62837514000, #  local_start 1992-03-29 01:00:00 (Sun)
  62853235200, #    local_end 1992-09-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853224400, #    utc_start 1992-09-26 21:00:00 (Sat)
  62868952800, #      utc_end 1993-03-27 22:00:00 (Sat)
  62853231600, #  local_start 1992-09-26 23:00:00 (Sat)
  62868960000, #    local_end 1993-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868952800, #    utc_start 1993-03-27 22:00:00 (Sat)
  62884674000, #      utc_end 1993-09-25 21:00:00 (Sat)
  62868963600, #  local_start 1993-03-28 01:00:00 (Sun)
  62884684800, #    local_end 1993-09-26 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884674000, #    utc_start 1993-09-25 21:00:00 (Sat)
  62900402400, #      utc_end 1994-03-26 22:00:00 (Sat)
  62884681200, #  local_start 1993-09-25 23:00:00 (Sat)
  62900409600, #    local_end 1994-03-27 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900402400, #    utc_start 1994-03-26 22:00:00 (Sat)
  62916123600, #      utc_end 1994-09-24 21:00:00 (Sat)
  62900413200, #  local_start 1994-03-27 01:00:00 (Sun)
  62916134400, #    local_end 1994-09-25 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916123600, #    utc_start 1994-09-24 21:00:00 (Sat)
  62924594400, #      utc_end 1994-12-31 22:00:00 (Sat)
  62916130800, #  local_start 1994-09-24 23:00:00 (Sat)
  62924601600, #    local_end 1995-01-01 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62924594400, #    utc_start 1994-12-31 22:00:00 (Sat)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62924601600, #  local_start 1995-01-01 00:00:00 (Sun)
  62931870000, #    local_end 1995-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931873600, #  local_start 1995-03-26 04:00:00 (Sun)
  62947598400, #    local_end 1995-09-24 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947594800, #  local_start 1995-09-24 03:00:00 (Sun)
  62963924400, #    local_end 1996-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963928000, #  local_start 1996-03-31 04:00:00 (Sun)
  62982072000, #    local_end 1996-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982068400, #  local_start 1996-10-27 03:00:00 (Sun)
  62995374000, #    local_end 1997-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995377600, #  local_start 1997-03-30 04:00:00 (Sun)
  63013521600, #    local_end 1997-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013518000, #  local_start 1997-10-26 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026827200, #  local_start 1998-03-29 04:00:00 (Sun)
  63044971200, #    local_end 1998-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044967600, #  local_start 1998-10-25 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058276800, #  local_start 1999-03-28 04:00:00 (Sun)
  63077025600, #    local_end 1999-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089726400, #  local_start 2000-03-26 04:00:00 (Sun)
  63108475200, #    local_end 2000-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108471600, #  local_start 2000-10-29 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121176000, #  local_start 2001-03-25 04:00:00 (Sun)
  63139924800, #    local_end 2001-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139921200, #  local_start 2001-10-28 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153230400, #  local_start 2002-03-31 04:00:00 (Sun)
  63171374400, #    local_end 2002-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171370800, #  local_start 2002-10-27 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184680000, #  local_start 2003-03-30 04:00:00 (Sun)
  63202824000, #    local_end 2003-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216129600, #  local_start 2004-03-28 04:00:00 (Sun)
  63234878400, #    local_end 2004-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247579200, #  local_start 2005-03-27 04:00:00 (Sun)
  63266328000, #    local_end 2005-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279025200, #    local_end 2006-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279028800, #  local_start 2006-03-26 04:00:00 (Sun)
  63297777600, #    local_end 2006-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310478400, #  local_start 2007-03-25 04:00:00 (Sun)
  63329227200, #    local_end 2007-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63342529200, #    local_end 2008-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342532800, #  local_start 2008-03-30 04:00:00 (Sun)
  63360676800, #    local_end 2008-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373978800, #    local_end 2009-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373982400, #  local_start 2009-03-29 04:00:00 (Sun)
  63392126400, #    local_end 2009-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392122800, #  local_start 2009-10-25 03:00:00 (Sun)
  63405428400, #    local_end 2010-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405432000, #  local_start 2010-03-28 04:00:00 (Sun)
  63424180800, #    local_end 2010-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424177200, #  local_start 2010-10-31 03:00:00 (Sun)
  63436878000, #    local_end 2011-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436881600, #  local_start 2011-03-27 04:00:00 (Sun)
  63455630400, #    local_end 2011-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455626800, #  local_start 2011-10-30 03:00:00 (Sun)
  63468327600, #    local_end 2012-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468331200, #  local_start 2012-03-25 04:00:00 (Sun)
  63487080000, #    local_end 2012-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487076400, #  local_start 2012-10-28 03:00:00 (Sun)
  63500382000, #    local_end 2013-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500385600, #  local_start 2013-03-31 04:00:00 (Sun)
  63518529600, #    local_end 2013-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518526000, #  local_start 2013-10-27 03:00:00 (Sun)
  63531831600, #    local_end 2014-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531835200, #  local_start 2014-03-30 04:00:00 (Sun)
  63549979200, #    local_end 2014-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549975600, #  local_start 2014-10-26 03:00:00 (Sun)
  63563281200, #    local_end 2015-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563284800, #  local_start 2015-03-29 04:00:00 (Sun)
  63581428800, #    local_end 2015-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581425200, #  local_start 2015-10-25 03:00:00 (Sun)
  63594730800, #    local_end 2016-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594734400, #  local_start 2016-03-27 04:00:00 (Sun)
  63613483200, #    local_end 2016-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613479600, #  local_start 2016-10-30 03:00:00 (Sun)
  63626180400, #    local_end 2017-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626184000, #  local_start 2017-03-26 04:00:00 (Sun)
  63644932800, #    local_end 2017-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644929200, #  local_start 2017-10-29 03:00:00 (Sun)
  63657630000, #    local_end 2018-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657633600, #  local_start 2018-03-25 04:00:00 (Sun)
  63676382400, #    local_end 2018-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676378800, #  local_start 2018-10-28 03:00:00 (Sun)
  63689684400, #    local_end 2019-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689688000, #  local_start 2019-03-31 04:00:00 (Sun)
  63707832000, #    local_end 2019-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707828400, #  local_start 2019-10-27 03:00:00 (Sun)
  63721134000, #    local_end 2020-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721137600, #  local_start 2020-03-29 04:00:00 (Sun)
  63739281600, #    local_end 2020-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739278000, #  local_start 2020-10-25 03:00:00 (Sun)
  63752583600, #    local_end 2021-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752587200, #  local_start 2021-03-28 04:00:00 (Sun)
  63771336000, #    local_end 2021-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771332400, #  local_start 2021-10-31 03:00:00 (Sun)
  63784033200, #    local_end 2022-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784036800, #  local_start 2022-03-27 04:00:00 (Sun)
  63802785600, #    local_end 2022-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802782000, #  local_start 2022-10-30 03:00:00 (Sun)
  63815482800, #    local_end 2023-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815486400, #  local_start 2023-03-26 04:00:00 (Sun)
  63834235200, #    local_end 2023-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834231600, #  local_start 2023-10-29 03:00:00 (Sun)
  63847537200, #    local_end 2024-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847540800, #  local_start 2024-03-31 04:00:00 (Sun)
  63865684800, #    local_end 2024-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865681200, #  local_start 2024-10-27 03:00:00 (Sun)
  63878986800, #    local_end 2025-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878990400, #  local_start 2025-03-30 04:00:00 (Sun)
  63897134400, #    local_end 2025-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897130800, #  local_start 2025-10-26 03:00:00 (Sun)
  63910436400, #    local_end 2026-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910440000, #  local_start 2026-03-29 04:00:00 (Sun)
  63928584000, #    local_end 2026-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928580400, #  local_start 2026-10-25 03:00:00 (Sun)
  63941886000, #    local_end 2027-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941889600, #  local_start 2027-03-28 04:00:00 (Sun)
  63960638400, #    local_end 2027-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {49}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 728294,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 728294,
      'utc_rd_secs' => 0,
      'utc_year' => 1996
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 728293,
      'local_rd_secs' => 79200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 728293,
      'utc_rd_secs' => 79200,
      'utc_year' => 1995
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_UZHGOROD

    $main::fatpacked{"DateTime/TimeZone/Europe/Vienna.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_VIENNA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Vienna;
  $DateTime::TimeZone::Europe::Vienna::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Vienna::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59713628079, #      utc_end 1893-03-31 22:54:39 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59713632000, #    local_end 1893-04-01 00:00:00 (Sat)
  3921,
  0,
  'LMT',
      ],
      [
  59713628079, #    utc_start 1893-03-31 22:54:39 (Fri)
  60441976800, #      utc_end 1916-04-30 22:00:00 (Sun)
  59713631679, #  local_start 1893-03-31 23:54:39 (Fri)
  60441980400, #    local_end 1916-04-30 23:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60441976800, #    utc_start 1916-04-30 22:00:00 (Sun)
  60455199600, #      utc_end 1916-09-30 23:00:00 (Sat)
  60441984000, #  local_start 1916-05-01 00:00:00 (Mon)
  60455206800, #    local_end 1916-10-01 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60455199600, #    utc_start 1916-09-30 23:00:00 (Sat)
  60472227600, #      utc_end 1917-04-16 01:00:00 (Mon)
  60455203200, #  local_start 1916-10-01 00:00:00 (Sun)
  60472231200, #    local_end 1917-04-16 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60472227600, #    utc_start 1917-04-16 01:00:00 (Mon)
  60485533200, #      utc_end 1917-09-17 01:00:00 (Mon)
  60472234800, #  local_start 1917-04-16 03:00:00 (Mon)
  60485540400, #    local_end 1917-09-17 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60485533200, #    utc_start 1917-09-17 01:00:00 (Mon)
  60503677200, #      utc_end 1918-04-15 01:00:00 (Mon)
  60485536800, #  local_start 1917-09-17 02:00:00 (Mon)
  60503680800, #    local_end 1918-04-15 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60503677200, #    utc_start 1918-04-15 01:00:00 (Mon)
  60516982800, #      utc_end 1918-09-16 01:00:00 (Mon)
  60503684400, #  local_start 1918-04-15 03:00:00 (Mon)
  60516990000, #    local_end 1918-09-16 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60516982800, #    utc_start 1918-09-16 01:00:00 (Mon)
  60557756400, #      utc_end 1919-12-31 23:00:00 (Wed)
  60516986400, #  local_start 1918-09-16 02:00:00 (Mon)
  60557760000, #    local_end 1920-01-01 00:00:00 (Thu)
  3600,
  0,
  'CET',
      ],
      [
  60557756400, #    utc_start 1919-12-31 23:00:00 (Wed)
  60565971600, #      utc_end 1920-04-05 01:00:00 (Mon)
  60557760000, #  local_start 1920-01-01 00:00:00 (Thu)
  60565975200, #    local_end 1920-04-05 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60565971600, #    utc_start 1920-04-05 01:00:00 (Mon)
  60579882000, #      utc_end 1920-09-13 01:00:00 (Mon)
  60565978800, #  local_start 1920-04-05 03:00:00 (Mon)
  60579889200, #    local_end 1920-09-13 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60579882000, #    utc_start 1920-09-13 01:00:00 (Mon)
  61196778000, #      utc_end 1940-04-01 01:00:00 (Mon)
  60579885600, #  local_start 1920-09-13 02:00:00 (Mon)
  61196781600, #    local_end 1940-04-01 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61196778000, #    utc_start 1940-04-01 01:00:00 (Mon)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61196785200, #  local_start 1940-04-01 03:00:00 (Mon)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61338906000, #      utc_end 1944-10-02 01:00:00 (Mon)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61338913200, #    local_end 1944-10-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61338906000, #    utc_start 1944-10-02 01:00:00 (Mon)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61338909600, #  local_start 1944-10-02 02:00:00 (Mon)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61355494800, #      utc_end 1945-04-12 01:00:00 (Thu)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61355502000, #    local_end 1945-04-12 03:00:00 (Thu)
  7200,
  1,
  'CEST',
      ],
      [
  61355494800, #    utc_start 1945-04-12 01:00:00 (Thu)
  61378297200, #      utc_end 1945-12-31 23:00:00 (Mon)
  61355498400, #  local_start 1945-04-12 02:00:00 (Thu)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  3600,
  0,
  'CET',
      ],
      [
  61378297200, #    utc_start 1945-12-31 23:00:00 (Mon)
  61387203600, #      utc_end 1946-04-14 01:00:00 (Sun)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  61387207200, #    local_end 1946-04-14 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61387203600, #    utc_start 1946-04-14 01:00:00 (Sun)
  61402323600, #      utc_end 1946-10-06 01:00:00 (Sun)
  61387210800, #  local_start 1946-04-14 03:00:00 (Sun)
  61402330800, #    local_end 1946-10-06 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61402323600, #    utc_start 1946-10-06 01:00:00 (Sun)
  61418048400, #      utc_end 1947-04-06 01:00:00 (Sun)
  61402327200, #  local_start 1946-10-06 02:00:00 (Sun)
  61418052000, #    local_end 1947-04-06 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61418048400, #    utc_start 1947-04-06 01:00:00 (Sun)
  61433773200, #      utc_end 1947-10-05 01:00:00 (Sun)
  61418055600, #  local_start 1947-04-06 03:00:00 (Sun)
  61433780400, #    local_end 1947-10-05 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61433773200, #    utc_start 1947-10-05 01:00:00 (Sun)
  61450707600, #      utc_end 1948-04-18 01:00:00 (Sun)
  61433776800, #  local_start 1947-10-05 02:00:00 (Sun)
  61450711200, #    local_end 1948-04-18 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61450707600, #    utc_start 1948-04-18 01:00:00 (Sun)
  61465222800, #      utc_end 1948-10-03 01:00:00 (Sun)
  61450714800, #  local_start 1948-04-18 03:00:00 (Sun)
  61465230000, #    local_end 1948-10-03 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61465222800, #    utc_start 1948-10-03 01:00:00 (Sun)
  62459506800, #      utc_end 1980-04-05 23:00:00 (Sat)
  61465226400, #  local_start 1948-10-03 02:00:00 (Sun)
  62459510400, #    local_end 1980-04-06 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62459506800, #    utc_start 1980-04-05 23:00:00 (Sat)
  62474623200, #      utc_end 1980-09-27 22:00:00 (Sat)
  62459514000, #  local_start 1980-04-06 01:00:00 (Sun)
  62474630400, #    local_end 1980-09-28 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474623200, #    utc_start 1980-09-27 22:00:00 (Sat)
  62482834800, #      utc_end 1980-12-31 23:00:00 (Wed)
  62474626800, #  local_start 1980-09-27 23:00:00 (Sat)
  62482838400, #    local_end 1981-01-01 00:00:00 (Thu)
  3600,
  0,
  'CET',
      ],
      [
  62482834800, #    utc_start 1980-12-31 23:00:00 (Wed)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62482838400, #  local_start 1981-01-01 00:00:00 (Thu)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {59}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723181,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723181,
      'utc_rd_secs' => 0,
      'utc_year' => 1982
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723180,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723180,
      'utc_rd_secs' => 82800,
      'utc_year' => 1981
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_VIENNA

    $main::fatpacked{"DateTime/TimeZone/Europe/Vilnius.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_VILNIUS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Vilnius;
  $DateTime::TimeZone::Europe::Vilnius::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Vilnius::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295536324, #      utc_end 1879-12-31 22:18:44 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  6076,
  0,
  'LMT',
      ],
      [
  59295536324, #    utc_start 1879-12-31 22:18:44 (Wed)
  60463146960, #      utc_end 1916-12-31 22:36:00 (Sun)
  59295541364, #  local_start 1879-12-31 23:42:44 (Wed)
  60463152000, #    local_end 1917-01-01 00:00:00 (Mon)
  5040,
  0,
  'WMT',
      ],
      [
  60463146960, #    utc_start 1916-12-31 22:36:00 (Sun)
  60550583064, #      utc_end 1919-10-09 22:24:24 (Thu)
  60463152696, #  local_start 1917-01-01 00:11:36 (Mon)
  60550588800, #    local_end 1919-10-10 00:00:00 (Fri)
  5736,
  0,
  'KMT',
      ],
      [
  60550583064, #    utc_start 1919-10-09 22:24:24 (Thu)
  60574431600, #      utc_end 1920-07-11 23:00:00 (Sun)
  60550586664, #  local_start 1919-10-09 23:24:24 (Thu)
  60574435200, #    local_end 1920-07-12 00:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60574431600, #    utc_start 1920-07-11 23:00:00 (Sun)
  60582117600, #      utc_end 1920-10-08 22:00:00 (Fri)
  60574438800, #  local_start 1920-07-12 01:00:00 (Mon)
  60582124800, #    local_end 1920-10-09 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  60582117600, #    utc_start 1920-10-08 22:00:00 (Fri)
  61207484400, #      utc_end 1940-08-02 23:00:00 (Fri)
  60582121200, #  local_start 1920-10-08 23:00:00 (Fri)
  61207488000, #    local_end 1940-08-03 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  61207484400, #    utc_start 1940-08-02 23:00:00 (Fri)
  61235557200, #      utc_end 1941-06-23 21:00:00 (Mon)
  61207495200, #  local_start 1940-08-03 02:00:00 (Sat)
  61235568000, #    local_end 1941-06-24 00:00:00 (Tue)
  10800,
  0,
  'MSK',
      ],
      [
  61235557200, #    utc_start 1941-06-23 21:00:00 (Mon)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61235564400, #  local_start 1941-06-23 23:00:00 (Mon)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61333538400, #      utc_end 1944-07-31 22:00:00 (Mon)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61333545600, #    local_end 1944-08-01 00:00:00 (Tue)
  7200,
  1,
  'CEST',
      ],
      [
  61333538400, #    utc_start 1944-07-31 22:00:00 (Mon)
  62490603600, #      utc_end 1981-03-31 21:00:00 (Tue)
  61333549200, #  local_start 1944-08-01 01:00:00 (Tue)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  10800,
  0,
  'MSK',
      ],
      [
  62490603600, #    utc_start 1981-03-31 21:00:00 (Tue)
  62506411200, #      utc_end 1981-09-30 20:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  14400,
  1,
  'MSD',
      ],
      [
  62506411200, #    utc_start 1981-09-30 20:00:00 (Wed)
  62522139600, #      utc_end 1982-03-31 21:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  10800,
  0,
  'MSK',
      ],
      [
  62522139600, #    utc_start 1982-03-31 21:00:00 (Wed)
  62537947200, #      utc_end 1982-09-30 20:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  14400,
  1,
  'MSD',
      ],
      [
  62537947200, #    utc_start 1982-09-30 20:00:00 (Thu)
  62553675600, #      utc_end 1983-03-31 21:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  10800,
  0,
  'MSK',
      ],
      [
  62553675600, #    utc_start 1983-03-31 21:00:00 (Thu)
  62569483200, #      utc_end 1983-09-30 20:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  14400,
  1,
  'MSD',
      ],
      [
  62569483200, #    utc_start 1983-09-30 20:00:00 (Fri)
  62585298000, #      utc_end 1984-03-31 21:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62585298000, #    utc_start 1984-03-31 21:00:00 (Sat)
  62601030000, #      utc_end 1984-09-29 23:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62601030000, #    utc_start 1984-09-29 23:00:00 (Sat)
  62616754800, #      utc_end 1985-03-30 23:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62616754800, #    utc_start 1985-03-30 23:00:00 (Sat)
  62632479600, #      utc_end 1985-09-28 23:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62632479600, #    utc_start 1985-09-28 23:00:00 (Sat)
  62648204400, #      utc_end 1986-03-29 23:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62648204400, #    utc_start 1986-03-29 23:00:00 (Sat)
  62663929200, #      utc_end 1986-09-27 23:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62663929200, #    utc_start 1986-09-27 23:00:00 (Sat)
  62679654000, #      utc_end 1987-03-28 23:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62679654000, #    utc_start 1987-03-28 23:00:00 (Sat)
  62695378800, #      utc_end 1987-09-26 23:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62695378800, #    utc_start 1987-09-26 23:00:00 (Sat)
  62711103600, #      utc_end 1988-03-26 23:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62711103600, #    utc_start 1988-03-26 23:00:00 (Sat)
  62726828400, #      utc_end 1988-09-24 23:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62726828400, #    utc_start 1988-09-24 23:00:00 (Sat)
  62742553200, #      utc_end 1989-03-25 23:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62742553200, #    utc_start 1989-03-25 23:00:00 (Sat)
  62758281600, #      utc_end 1989-09-24 00:00:00 (Sun)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62758281600, #    utc_start 1989-09-24 00:00:00 (Sun)
  62774006400, #      utc_end 1990-03-25 00:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62774006400, #    utc_start 1990-03-25 00:00:00 (Sun)
  62790336000, #      utc_end 1990-09-30 00:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62790336000, #    utc_start 1990-09-30 00:00:00 (Sun)
  62806060800, #      utc_end 1991-03-31 00:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62806060800, #    utc_start 1991-03-31 00:00:00 (Sun)
  62821785600, #      utc_end 1991-09-29 00:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821785600, #    utc_start 1991-09-29 00:00:00 (Sun)
  62837510400, #      utc_end 1992-03-29 00:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837510400, #    utc_start 1992-03-29 00:00:00 (Sun)
  62853235200, #      utc_end 1992-09-27 00:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853235200, #    utc_start 1992-09-27 00:00:00 (Sun)
  62868960000, #      utc_end 1993-03-28 00:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868960000, #    utc_start 1993-03-28 00:00:00 (Sun)
  62884684800, #      utc_end 1993-09-26 00:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884684800, #    utc_start 1993-09-26 00:00:00 (Sun)
  62900409600, #      utc_end 1994-03-27 00:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900409600, #    utc_start 1994-03-27 00:00:00 (Sun)
  62916134400, #      utc_end 1994-09-25 00:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916134400, #    utc_start 1994-09-25 00:00:00 (Sun)
  62931859200, #      utc_end 1995-03-26 00:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931859200, #    utc_start 1995-03-26 00:00:00 (Sun)
  62947584000, #      utc_end 1995-09-24 00:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947584000, #    utc_start 1995-09-24 00:00:00 (Sun)
  62963913600, #      utc_end 1996-03-31 00:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963913600, #    utc_start 1996-03-31 00:00:00 (Sun)
  62982057600, #      utc_end 1996-10-27 00:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62982057600, #    utc_start 1996-10-27 00:00:00 (Sun)
  62995363200, #      utc_end 1997-03-30 00:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995363200, #    utc_start 1997-03-30 00:00:00 (Sun)
  63013507200, #      utc_end 1997-10-26 00:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63013507200, #    utc_start 1997-10-26 00:00:00 (Sun)
  63019288800, #      utc_end 1997-12-31 22:00:00 (Wed)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63019296000, #    local_end 1998-01-01 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  63019288800, #    utc_start 1997-12-31 22:00:00 (Wed)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63019296000, #  local_start 1998-01-01 00:00:00 (Thu)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63177055200, #      utc_end 2002-12-31 22:00:00 (Tue)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63177062400, #    local_end 2003-01-01 00:00:00 (Wed)
  7200,
  0,
  'EET',
      ],
      [
  63177055200, #    utc_start 2002-12-31 22:00:00 (Tue)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63177062400, #  local_start 2003-01-01 00:00:00 (Wed)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184680000, #  local_start 2003-03-30 04:00:00 (Sun)
  63202824000, #    local_end 2003-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216129600, #  local_start 2004-03-28 04:00:00 (Sun)
  63234878400, #    local_end 2004-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247579200, #  local_start 2005-03-27 04:00:00 (Sun)
  63266328000, #    local_end 2005-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279025200, #    local_end 2006-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279028800, #  local_start 2006-03-26 04:00:00 (Sun)
  63297777600, #    local_end 2006-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310478400, #  local_start 2007-03-25 04:00:00 (Sun)
  63329227200, #    local_end 2007-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63342529200, #    local_end 2008-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342532800, #  local_start 2008-03-30 04:00:00 (Sun)
  63360676800, #    local_end 2008-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373978800, #    local_end 2009-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373982400, #  local_start 2009-03-29 04:00:00 (Sun)
  63392126400, #    local_end 2009-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392122800, #  local_start 2009-10-25 03:00:00 (Sun)
  63405428400, #    local_end 2010-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405432000, #  local_start 2010-03-28 04:00:00 (Sun)
  63424180800, #    local_end 2010-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424177200, #  local_start 2010-10-31 03:00:00 (Sun)
  63436878000, #    local_end 2011-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436881600, #  local_start 2011-03-27 04:00:00 (Sun)
  63455630400, #    local_end 2011-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455626800, #  local_start 2011-10-30 03:00:00 (Sun)
  63468327600, #    local_end 2012-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468331200, #  local_start 2012-03-25 04:00:00 (Sun)
  63487080000, #    local_end 2012-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487076400, #  local_start 2012-10-28 03:00:00 (Sun)
  63500382000, #    local_end 2013-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500385600, #  local_start 2013-03-31 04:00:00 (Sun)
  63518529600, #    local_end 2013-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518526000, #  local_start 2013-10-27 03:00:00 (Sun)
  63531831600, #    local_end 2014-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531835200, #  local_start 2014-03-30 04:00:00 (Sun)
  63549979200, #    local_end 2014-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549975600, #  local_start 2014-10-26 03:00:00 (Sun)
  63563281200, #    local_end 2015-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563284800, #  local_start 2015-03-29 04:00:00 (Sun)
  63581428800, #    local_end 2015-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581425200, #  local_start 2015-10-25 03:00:00 (Sun)
  63594730800, #    local_end 2016-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594734400, #  local_start 2016-03-27 04:00:00 (Sun)
  63613483200, #    local_end 2016-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613479600, #  local_start 2016-10-30 03:00:00 (Sun)
  63626180400, #    local_end 2017-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626184000, #  local_start 2017-03-26 04:00:00 (Sun)
  63644932800, #    local_end 2017-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644929200, #  local_start 2017-10-29 03:00:00 (Sun)
  63657630000, #    local_end 2018-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657633600, #  local_start 2018-03-25 04:00:00 (Sun)
  63676382400, #    local_end 2018-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676378800, #  local_start 2018-10-28 03:00:00 (Sun)
  63689684400, #    local_end 2019-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689688000, #  local_start 2019-03-31 04:00:00 (Sun)
  63707832000, #    local_end 2019-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707828400, #  local_start 2019-10-27 03:00:00 (Sun)
  63721134000, #    local_end 2020-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721137600, #  local_start 2020-03-29 04:00:00 (Sun)
  63739281600, #    local_end 2020-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739278000, #  local_start 2020-10-25 03:00:00 (Sun)
  63752583600, #    local_end 2021-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752587200, #  local_start 2021-03-28 04:00:00 (Sun)
  63771336000, #    local_end 2021-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771332400, #  local_start 2021-10-31 03:00:00 (Sun)
  63784033200, #    local_end 2022-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784036800, #  local_start 2022-03-27 04:00:00 (Sun)
  63802785600, #    local_end 2022-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802782000, #  local_start 2022-10-30 03:00:00 (Sun)
  63815482800, #    local_end 2023-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815486400, #  local_start 2023-03-26 04:00:00 (Sun)
  63834235200, #    local_end 2023-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834231600, #  local_start 2023-10-29 03:00:00 (Sun)
  63847537200, #    local_end 2024-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847540800, #  local_start 2024-03-31 04:00:00 (Sun)
  63865684800, #    local_end 2024-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865681200, #  local_start 2024-10-27 03:00:00 (Sun)
  63878986800, #    local_end 2025-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878990400, #  local_start 2025-03-30 04:00:00 (Sun)
  63897134400, #    local_end 2025-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897130800, #  local_start 2025-10-26 03:00:00 (Sun)
  63910436400, #    local_end 2026-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910440000, #  local_start 2026-03-29 04:00:00 (Sun)
  63928584000, #    local_end 2026-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928580400, #  local_start 2026-10-25 03:00:00 (Sun)
  63941886000, #    local_end 2027-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941889600, #  local_start 2027-03-28 04:00:00 (Sun)
  63960638400, #    local_end 2027-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {47}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 731216,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 731216,
      'utc_rd_secs' => 0,
      'utc_year' => 2004
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 731215,
      'local_rd_secs' => 79200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 731215,
      'utc_rd_secs' => 79200,
      'utc_year' => 2003
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_VILNIUS

    $main::fatpacked{"DateTime/TimeZone/Europe/Volgograd.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_VOLGOGRAD';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Volgograd;
  $DateTime::TimeZone::Europe::Volgograd::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Volgograd::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60557922140, #      utc_end 1920-01-02 21:02:20 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60557932800, #    local_end 1920-01-03 00:00:00 (Sat)
  10660,
  0,
  'LMT',
      ],
      [
  60557922140, #    utc_start 1920-01-02 21:02:20 (Fri)
  60723810000, #      utc_end 1925-04-05 21:00:00 (Sun)
  60557932940, #  local_start 1920-01-03 00:02:20 (Sat)
  60723820800, #    local_end 1925-04-06 00:00:00 (Mon)
  10800,
  0,
  'TSAT',
      ],
      [
  60723810000, #    utc_start 1925-04-05 21:00:00 (Sun)
  60888142800, #      utc_end 1930-06-20 21:00:00 (Fri)
  60723820800, #  local_start 1925-04-06 00:00:00 (Mon)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  10800,
  0,
  'STAT',
      ],
      [
  60888142800, #    utc_start 1930-06-20 21:00:00 (Fri)
  61878801600, #      utc_end 1961-11-10 20:00:00 (Fri)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  61878816000, #    local_end 1961-11-11 00:00:00 (Sat)
  14400,
  0,
  'STAT',
      ],
      [
  61878801600, #    utc_start 1961-11-10 20:00:00 (Fri)
  62490600000, #      utc_end 1981-03-31 20:00:00 (Tue)
  61878816000, #  local_start 1961-11-11 00:00:00 (Sat)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  14400,
  0,
  'VOLT',
      ],
      [
  62490600000, #    utc_start 1981-03-31 20:00:00 (Tue)
  62506407600, #      utc_end 1981-09-30 19:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  18000,
  1,
  'VOLST',
      ],
      [
  62506407600, #    utc_start 1981-09-30 19:00:00 (Wed)
  62522136000, #      utc_end 1982-03-31 20:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  14400,
  0,
  'VOLT',
      ],
      [
  62522136000, #    utc_start 1982-03-31 20:00:00 (Wed)
  62537943600, #      utc_end 1982-09-30 19:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  18000,
  1,
  'VOLST',
      ],
      [
  62537943600, #    utc_start 1982-09-30 19:00:00 (Thu)
  62553672000, #      utc_end 1983-03-31 20:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  14400,
  0,
  'VOLT',
      ],
      [
  62553672000, #    utc_start 1983-03-31 20:00:00 (Thu)
  62569479600, #      utc_end 1983-09-30 19:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  18000,
  1,
  'VOLST',
      ],
      [
  62569479600, #    utc_start 1983-09-30 19:00:00 (Fri)
  62585294400, #      utc_end 1984-03-31 20:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  14400,
  0,
  'VOLT',
      ],
      [
  62585294400, #    utc_start 1984-03-31 20:00:00 (Sat)
  62601026400, #      utc_end 1984-09-29 22:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  18000,
  1,
  'VOLST',
      ],
      [
  62601026400, #    utc_start 1984-09-29 22:00:00 (Sat)
  62616751200, #      utc_end 1985-03-30 22:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  14400,
  0,
  'VOLT',
      ],
      [
  62616751200, #    utc_start 1985-03-30 22:00:00 (Sat)
  62632476000, #      utc_end 1985-09-28 22:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  18000,
  1,
  'VOLST',
      ],
      [
  62632476000, #    utc_start 1985-09-28 22:00:00 (Sat)
  62648200800, #      utc_end 1986-03-29 22:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  14400,
  0,
  'VOLT',
      ],
      [
  62648200800, #    utc_start 1986-03-29 22:00:00 (Sat)
  62663925600, #      utc_end 1986-09-27 22:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  18000,
  1,
  'VOLST',
      ],
      [
  62663925600, #    utc_start 1986-09-27 22:00:00 (Sat)
  62679650400, #      utc_end 1987-03-28 22:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  14400,
  0,
  'VOLT',
      ],
      [
  62679650400, #    utc_start 1987-03-28 22:00:00 (Sat)
  62695375200, #      utc_end 1987-09-26 22:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  18000,
  1,
  'VOLST',
      ],
      [
  62695375200, #    utc_start 1987-09-26 22:00:00 (Sat)
  62711100000, #      utc_end 1988-03-26 22:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  14400,
  0,
  'VOLT',
      ],
      [
  62711100000, #    utc_start 1988-03-26 22:00:00 (Sat)
  62726828400, #      utc_end 1988-09-24 23:00:00 (Sat)
  62711114400, #  local_start 1988-03-27 02:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  14400,
  1,
  'VOLST',
      ],
      [
  62726828400, #    utc_start 1988-09-24 23:00:00 (Sat)
  62742553200, #      utc_end 1989-03-25 23:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  10800,
  0,
  'VOLT',
      ],
      [
  62742553200, #    utc_start 1989-03-25 23:00:00 (Sat)
  62758278000, #      utc_end 1989-09-23 23:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  14400,
  1,
  'VOLST',
      ],
      [
  62758278000, #    utc_start 1989-09-23 23:00:00 (Sat)
  62774002800, #      utc_end 1990-03-24 23:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  10800,
  0,
  'VOLT',
      ],
      [
  62774002800, #    utc_start 1990-03-24 23:00:00 (Sat)
  62790332400, #      utc_end 1990-09-29 23:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  14400,
  1,
  'VOLST',
      ],
      [
  62790332400, #    utc_start 1990-09-29 23:00:00 (Sat)
  62806057200, #      utc_end 1991-03-30 23:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  10800,
  0,
  'VOLT',
      ],
      [
  62806057200, #    utc_start 1991-03-30 23:00:00 (Sat)
  62837503200, #      utc_end 1992-03-28 22:00:00 (Sat)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  14400,
  0,
  'VOLT',
      ],
      [
  62837503200, #    utc_start 1992-03-28 22:00:00 (Sat)
  62853231600, #      utc_end 1992-09-26 23:00:00 (Sat)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62853231600, #    utc_start 1992-09-26 23:00:00 (Sat)
  62868956400, #      utc_end 1993-03-27 23:00:00 (Sat)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62868956400, #    utc_start 1993-03-27 23:00:00 (Sat)
  62884681200, #      utc_end 1993-09-25 23:00:00 (Sat)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62884681200, #    utc_start 1993-09-25 23:00:00 (Sat)
  62900406000, #      utc_end 1994-03-26 23:00:00 (Sat)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62900406000, #    utc_start 1994-03-26 23:00:00 (Sat)
  62916130800, #      utc_end 1994-09-24 23:00:00 (Sat)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62916130800, #    utc_start 1994-09-24 23:00:00 (Sat)
  62931855600, #      utc_end 1995-03-25 23:00:00 (Sat)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62931855600, #    utc_start 1995-03-25 23:00:00 (Sat)
  62947580400, #      utc_end 1995-09-23 23:00:00 (Sat)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62947580400, #    utc_start 1995-09-23 23:00:00 (Sat)
  62963910000, #      utc_end 1996-03-30 23:00:00 (Sat)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62963910000, #    utc_start 1996-03-30 23:00:00 (Sat)
  62982054000, #      utc_end 1996-10-26 23:00:00 (Sat)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62982054000, #    utc_start 1996-10-26 23:00:00 (Sat)
  62995359600, #      utc_end 1997-03-29 23:00:00 (Sat)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62995359600, #    utc_start 1997-03-29 23:00:00 (Sat)
  63013503600, #      utc_end 1997-10-25 23:00:00 (Sat)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63013503600, #    utc_start 1997-10-25 23:00:00 (Sat)
  63026809200, #      utc_end 1998-03-28 23:00:00 (Sat)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63026809200, #    utc_start 1998-03-28 23:00:00 (Sat)
  63044953200, #      utc_end 1998-10-24 23:00:00 (Sat)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63044953200, #    utc_start 1998-10-24 23:00:00 (Sat)
  63058258800, #      utc_end 1999-03-27 23:00:00 (Sat)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63058258800, #    utc_start 1999-03-27 23:00:00 (Sat)
  63077007600, #      utc_end 1999-10-30 23:00:00 (Sat)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63077007600, #    utc_start 1999-10-30 23:00:00 (Sat)
  63089708400, #      utc_end 2000-03-25 23:00:00 (Sat)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63089708400, #    utc_start 2000-03-25 23:00:00 (Sat)
  63108457200, #      utc_end 2000-10-28 23:00:00 (Sat)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63108457200, #    utc_start 2000-10-28 23:00:00 (Sat)
  63121158000, #      utc_end 2001-03-24 23:00:00 (Sat)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63121158000, #    utc_start 2001-03-24 23:00:00 (Sat)
  63139906800, #      utc_end 2001-10-27 23:00:00 (Sat)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63139906800, #    utc_start 2001-10-27 23:00:00 (Sat)
  63153212400, #      utc_end 2002-03-30 23:00:00 (Sat)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63153212400, #    utc_start 2002-03-30 23:00:00 (Sat)
  63171356400, #      utc_end 2002-10-26 23:00:00 (Sat)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63171356400, #    utc_start 2002-10-26 23:00:00 (Sat)
  63184662000, #      utc_end 2003-03-29 23:00:00 (Sat)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63184662000, #    utc_start 2003-03-29 23:00:00 (Sat)
  63202806000, #      utc_end 2003-10-25 23:00:00 (Sat)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63202806000, #    utc_start 2003-10-25 23:00:00 (Sat)
  63216111600, #      utc_end 2004-03-27 23:00:00 (Sat)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63216111600, #    utc_start 2004-03-27 23:00:00 (Sat)
  63234860400, #      utc_end 2004-10-30 23:00:00 (Sat)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63234860400, #    utc_start 2004-10-30 23:00:00 (Sat)
  63247561200, #      utc_end 2005-03-26 23:00:00 (Sat)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63247561200, #    utc_start 2005-03-26 23:00:00 (Sat)
  63266310000, #      utc_end 2005-10-29 23:00:00 (Sat)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63266310000, #    utc_start 2005-10-29 23:00:00 (Sat)
  63279010800, #      utc_end 2006-03-25 23:00:00 (Sat)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63279010800, #    utc_start 2006-03-25 23:00:00 (Sat)
  63297759600, #      utc_end 2006-10-28 23:00:00 (Sat)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63297759600, #    utc_start 2006-10-28 23:00:00 (Sat)
  63310460400, #      utc_end 2007-03-24 23:00:00 (Sat)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63310460400, #    utc_start 2007-03-24 23:00:00 (Sat)
  63329209200, #      utc_end 2007-10-27 23:00:00 (Sat)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63329209200, #    utc_start 2007-10-27 23:00:00 (Sat)
  63342514800, #      utc_end 2008-03-29 23:00:00 (Sat)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63342514800, #    utc_start 2008-03-29 23:00:00 (Sat)
  63360658800, #      utc_end 2008-10-25 23:00:00 (Sat)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63360658800, #    utc_start 2008-10-25 23:00:00 (Sat)
  63373964400, #      utc_end 2009-03-28 23:00:00 (Sat)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63373964400, #    utc_start 2009-03-28 23:00:00 (Sat)
  63392108400, #      utc_end 2009-10-24 23:00:00 (Sat)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63392108400, #    utc_start 2009-10-24 23:00:00 (Sat)
  63405414000, #      utc_end 2010-03-27 23:00:00 (Sat)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63405414000, #    utc_start 2010-03-27 23:00:00 (Sat)
  63424162800, #      utc_end 2010-10-30 23:00:00 (Sat)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  63424162800, #    utc_start 2010-10-30 23:00:00 (Sat)
  63436863600, #      utc_end 2011-03-26 23:00:00 (Sat)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  63436863600, #    utc_start 2011-03-26 23:00:00 (Sat)
  63549957600, #      utc_end 2014-10-25 22:00:00 (Sat)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  14400,
  0,
  'MSK',
      ],
      [
  63549957600, #    utc_start 2014-10-25 22:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  10800,
  0,
  'MSK',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {29}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_VOLGOGRAD

    $main::fatpacked{"DateTime/TimeZone/Europe/Warsaw.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_WARSAW';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Warsaw;
  $DateTime::TimeZone::Europe::Warsaw::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Warsaw::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295537360, #      utc_end 1879-12-31 22:36:00 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  5040,
  0,
  'LMT',
      ],
      [
  59295537360, #    utc_start 1879-12-31 22:36:00 (Wed)
  60418650960, #      utc_end 1915-08-04 22:36:00 (Wed)
  59295542400, #  local_start 1880-01-01 00:00:00 (Thu)
  60418656000, #    local_end 1915-08-05 00:00:00 (Thu)
  5040,
  0,
  'WMT',
      ],
      [
  60418650960, #    utc_start 1915-08-04 22:36:00 (Wed)
  60441976800, #      utc_end 1916-04-30 22:00:00 (Sun)
  60418654560, #  local_start 1915-08-04 23:36:00 (Wed)
  60441980400, #    local_end 1916-04-30 23:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  60441976800, #    utc_start 1916-04-30 22:00:00 (Sun)
  60455199600, #      utc_end 1916-09-30 23:00:00 (Sat)
  60441984000, #  local_start 1916-05-01 00:00:00 (Mon)
  60455206800, #    local_end 1916-10-01 01:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  60455199600, #    utc_start 1916-09-30 23:00:00 (Sat)
  60472227600, #      utc_end 1917-04-16 01:00:00 (Mon)
  60455203200, #  local_start 1916-10-01 00:00:00 (Sun)
  60472231200, #    local_end 1917-04-16 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60472227600, #    utc_start 1917-04-16 01:00:00 (Mon)
  60485533200, #      utc_end 1917-09-17 01:00:00 (Mon)
  60472234800, #  local_start 1917-04-16 03:00:00 (Mon)
  60485540400, #    local_end 1917-09-17 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60485533200, #    utc_start 1917-09-17 01:00:00 (Mon)
  60503677200, #      utc_end 1918-04-15 01:00:00 (Mon)
  60485536800, #  local_start 1917-09-17 02:00:00 (Mon)
  60503680800, #    local_end 1918-04-15 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  60503677200, #    utc_start 1918-04-15 01:00:00 (Mon)
  60516982800, #      utc_end 1918-09-16 01:00:00 (Mon)
  60503684400, #  local_start 1918-04-15 03:00:00 (Mon)
  60516990000, #    local_end 1918-09-16 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  60516982800, #    utc_start 1918-09-16 01:00:00 (Mon)
  60535209600, #      utc_end 1919-04-15 00:00:00 (Tue)
  60516990000, #  local_start 1918-09-16 03:00:00 (Mon)
  60535216800, #    local_end 1919-04-15 02:00:00 (Tue)
  7200,
  0,
  'EET',
      ],
      [
  60535209600, #    utc_start 1919-04-15 00:00:00 (Tue)
  60548515200, #      utc_end 1919-09-16 00:00:00 (Tue)
  60535220400, #  local_start 1919-04-15 03:00:00 (Tue)
  60548526000, #    local_end 1919-09-16 03:00:00 (Tue)
  10800,
  1,
  'EEST',
      ],
      [
  60548515200, #    utc_start 1919-09-16 00:00:00 (Tue)
  60633957600, #      utc_end 1922-05-31 22:00:00 (Wed)
  60548522400, #  local_start 1919-09-16 02:00:00 (Tue)
  60633964800, #    local_end 1922-06-01 00:00:00 (Thu)
  7200,
  0,
  'EET',
      ],
      [
  60633957600, #    utc_start 1922-05-31 22:00:00 (Wed)
  61203949200, #      utc_end 1940-06-23 01:00:00 (Sun)
  60633961200, #  local_start 1922-05-31 23:00:00 (Wed)
  61203952800, #    local_end 1940-06-23 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61203949200, #    utc_start 1940-06-23 01:00:00 (Sun)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61203956400, #  local_start 1940-06-23 03:00:00 (Sun)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61338808800, #      utc_end 1944-09-30 22:00:00 (Sat)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61338816000, #    local_end 1944-10-01 00:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61338808800, #    utc_start 1944-09-30 22:00:00 (Sat)
  61339075200, #      utc_end 1944-10-04 00:00:00 (Wed)
  61338816000, #  local_start 1944-10-01 00:00:00 (Sun)
  61339082400, #    local_end 1944-10-04 02:00:00 (Wed)
  7200,
  1,
  'CEST',
      ],
      [
  61339075200, #    utc_start 1944-10-04 00:00:00 (Wed)
  61356956400, #      utc_end 1945-04-28 23:00:00 (Sat)
  61339078800, #  local_start 1944-10-04 01:00:00 (Wed)
  61356960000, #    local_end 1945-04-29 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61356956400, #    utc_start 1945-04-28 23:00:00 (Sat)
  61373023200, #      utc_end 1945-10-31 22:00:00 (Wed)
  61356963600, #  local_start 1945-04-29 01:00:00 (Sun)
  61373030400, #    local_end 1945-11-01 00:00:00 (Thu)
  7200,
  1,
  'CEST',
      ],
      [
  61373023200, #    utc_start 1945-10-31 22:00:00 (Wed)
  61387196400, #      utc_end 1946-04-13 23:00:00 (Sat)
  61373026800, #  local_start 1945-10-31 23:00:00 (Wed)
  61387200000, #    local_end 1946-04-14 00:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61387196400, #    utc_start 1946-04-13 23:00:00 (Sat)
  61402410000, #      utc_end 1946-10-07 01:00:00 (Mon)
  61387203600, #  local_start 1946-04-14 01:00:00 (Sun)
  61402417200, #    local_end 1946-10-07 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61402410000, #    utc_start 1946-10-07 01:00:00 (Mon)
  61420467600, #      utc_end 1947-05-04 01:00:00 (Sun)
  61402413600, #  local_start 1946-10-07 02:00:00 (Mon)
  61420471200, #    local_end 1947-05-04 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61420467600, #    utc_start 1947-05-04 01:00:00 (Sun)
  61433773200, #      utc_end 1947-10-05 01:00:00 (Sun)
  61420474800, #  local_start 1947-05-04 03:00:00 (Sun)
  61433780400, #    local_end 1947-10-05 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61433773200, #    utc_start 1947-10-05 01:00:00 (Sun)
  61450707600, #      utc_end 1948-04-18 01:00:00 (Sun)
  61433776800, #  local_start 1947-10-05 02:00:00 (Sun)
  61450711200, #    local_end 1948-04-18 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61450707600, #    utc_start 1948-04-18 01:00:00 (Sun)
  61465222800, #      utc_end 1948-10-03 01:00:00 (Sun)
  61450714800, #  local_start 1948-04-18 03:00:00 (Sun)
  61465230000, #    local_end 1948-10-03 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61465222800, #    utc_start 1948-10-03 01:00:00 (Sun)
  61481552400, #      utc_end 1949-04-10 01:00:00 (Sun)
  61465226400, #  local_start 1948-10-03 02:00:00 (Sun)
  61481556000, #    local_end 1949-04-10 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61481552400, #    utc_start 1949-04-10 01:00:00 (Sun)
  61496672400, #      utc_end 1949-10-02 01:00:00 (Sun)
  61481559600, #  local_start 1949-04-10 03:00:00 (Sun)
  61496679600, #    local_end 1949-10-02 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61496672400, #    utc_start 1949-10-02 01:00:00 (Sun)
  61738588800, #      utc_end 1957-06-02 00:00:00 (Sun)
  61496676000, #  local_start 1949-10-02 02:00:00 (Sun)
  61738592400, #    local_end 1957-06-02 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61738588800, #    utc_start 1957-06-02 00:00:00 (Sun)
  61748870400, #      utc_end 1957-09-29 00:00:00 (Sun)
  61738596000, #  local_start 1957-06-02 02:00:00 (Sun)
  61748877600, #    local_end 1957-09-29 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61748870400, #    utc_start 1957-09-29 00:00:00 (Sun)
  61764595200, #      utc_end 1958-03-30 00:00:00 (Sun)
  61748874000, #  local_start 1957-09-29 01:00:00 (Sun)
  61764598800, #    local_end 1958-03-30 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61764595200, #    utc_start 1958-03-30 00:00:00 (Sun)
  61780320000, #      utc_end 1958-09-28 00:00:00 (Sun)
  61764602400, #  local_start 1958-03-30 02:00:00 (Sun)
  61780327200, #    local_end 1958-09-28 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61780320000, #    utc_start 1958-09-28 00:00:00 (Sun)
  61801488000, #      utc_end 1959-05-31 00:00:00 (Sun)
  61780323600, #  local_start 1958-09-28 01:00:00 (Sun)
  61801491600, #    local_end 1959-05-31 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61801488000, #    utc_start 1959-05-31 00:00:00 (Sun)
  61812374400, #      utc_end 1959-10-04 00:00:00 (Sun)
  61801495200, #  local_start 1959-05-31 02:00:00 (Sun)
  61812381600, #    local_end 1959-10-04 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61812374400, #    utc_start 1959-10-04 00:00:00 (Sun)
  61828099200, #      utc_end 1960-04-03 00:00:00 (Sun)
  61812378000, #  local_start 1959-10-04 01:00:00 (Sun)
  61828102800, #    local_end 1960-04-03 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61828099200, #    utc_start 1960-04-03 00:00:00 (Sun)
  61843824000, #      utc_end 1960-10-02 00:00:00 (Sun)
  61828106400, #  local_start 1960-04-03 02:00:00 (Sun)
  61843831200, #    local_end 1960-10-02 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61843824000, #    utc_start 1960-10-02 00:00:00 (Sun)
  61864387200, #      utc_end 1961-05-28 00:00:00 (Sun)
  61843827600, #  local_start 1960-10-02 01:00:00 (Sun)
  61864390800, #    local_end 1961-05-28 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61864387200, #    utc_start 1961-05-28 00:00:00 (Sun)
  61875273600, #      utc_end 1961-10-01 00:00:00 (Sun)
  61864394400, #  local_start 1961-05-28 02:00:00 (Sun)
  61875280800, #    local_end 1961-10-01 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61875273600, #    utc_start 1961-10-01 00:00:00 (Sun)
  61895836800, #      utc_end 1962-05-27 00:00:00 (Sun)
  61875277200, #  local_start 1961-10-01 01:00:00 (Sun)
  61895840400, #    local_end 1962-05-27 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61895836800, #    utc_start 1962-05-27 00:00:00 (Sun)
  61906723200, #      utc_end 1962-09-30 00:00:00 (Sun)
  61895844000, #  local_start 1962-05-27 02:00:00 (Sun)
  61906730400, #    local_end 1962-09-30 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61906723200, #    utc_start 1962-09-30 00:00:00 (Sun)
  61927286400, #      utc_end 1963-05-26 00:00:00 (Sun)
  61906726800, #  local_start 1962-09-30 01:00:00 (Sun)
  61927290000, #    local_end 1963-05-26 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61927286400, #    utc_start 1963-05-26 00:00:00 (Sun)
  61938172800, #      utc_end 1963-09-29 00:00:00 (Sun)
  61927293600, #  local_start 1963-05-26 02:00:00 (Sun)
  61938180000, #    local_end 1963-09-29 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61938172800, #    utc_start 1963-09-29 00:00:00 (Sun)
  61959340800, #      utc_end 1964-05-31 00:00:00 (Sun)
  61938176400, #  local_start 1963-09-29 01:00:00 (Sun)
  61959344400, #    local_end 1964-05-31 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  61959340800, #    utc_start 1964-05-31 00:00:00 (Sun)
  61969622400, #      utc_end 1964-09-27 00:00:00 (Sun)
  61959348000, #  local_start 1964-05-31 02:00:00 (Sun)
  61969629600, #    local_end 1964-09-27 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  61969622400, #    utc_start 1964-09-27 00:00:00 (Sun)
  62356604400, #      utc_end 1976-12-31 23:00:00 (Fri)
  61969626000, #  local_start 1964-09-27 01:00:00 (Sun)
  62356608000, #    local_end 1977-01-01 00:00:00 (Sat)
  3600,
  0,
  'CET',
      ],
      [
  62356604400, #    utc_start 1976-12-31 23:00:00 (Fri)
  62364556800, #      utc_end 1977-04-03 00:00:00 (Sun)
  62356608000, #  local_start 1977-01-01 00:00:00 (Sat)
  62364560400, #    local_end 1977-04-03 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62364556800, #    utc_start 1977-04-03 00:00:00 (Sun)
  62379676800, #      utc_end 1977-09-25 00:00:00 (Sun)
  62364564000, #  local_start 1977-04-03 02:00:00 (Sun)
  62379684000, #    local_end 1977-09-25 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62379676800, #    utc_start 1977-09-25 00:00:00 (Sun)
  62396006400, #      utc_end 1978-04-02 00:00:00 (Sun)
  62379680400, #  local_start 1977-09-25 01:00:00 (Sun)
  62396010000, #    local_end 1978-04-02 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62396006400, #    utc_start 1978-04-02 00:00:00 (Sun)
  62411731200, #      utc_end 1978-10-01 00:00:00 (Sun)
  62396013600, #  local_start 1978-04-02 02:00:00 (Sun)
  62411738400, #    local_end 1978-10-01 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62411731200, #    utc_start 1978-10-01 00:00:00 (Sun)
  62427456000, #      utc_end 1979-04-01 00:00:00 (Sun)
  62411734800, #  local_start 1978-10-01 01:00:00 (Sun)
  62427459600, #    local_end 1979-04-01 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62427456000, #    utc_start 1979-04-01 00:00:00 (Sun)
  62443180800, #      utc_end 1979-09-30 00:00:00 (Sun)
  62427463200, #  local_start 1979-04-01 02:00:00 (Sun)
  62443188000, #    local_end 1979-09-30 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62443180800, #    utc_start 1979-09-30 00:00:00 (Sun)
  62459510400, #      utc_end 1980-04-06 00:00:00 (Sun)
  62443184400, #  local_start 1979-09-30 01:00:00 (Sun)
  62459514000, #    local_end 1980-04-06 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62459510400, #    utc_start 1980-04-06 00:00:00 (Sun)
  62474630400, #      utc_end 1980-09-28 00:00:00 (Sun)
  62459517600, #  local_start 1980-04-06 02:00:00 (Sun)
  62474637600, #    local_end 1980-09-28 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62474630400, #    utc_start 1980-09-28 00:00:00 (Sun)
  62490355200, #      utc_end 1981-03-29 00:00:00 (Sun)
  62474634000, #  local_start 1980-09-28 01:00:00 (Sun)
  62490358800, #    local_end 1981-03-29 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490355200, #    utc_start 1981-03-29 00:00:00 (Sun)
  62506080000, #      utc_end 1981-09-27 00:00:00 (Sun)
  62490362400, #  local_start 1981-03-29 02:00:00 (Sun)
  62506087200, #    local_end 1981-09-27 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506080000, #    utc_start 1981-09-27 00:00:00 (Sun)
  62521804800, #      utc_end 1982-03-28 00:00:00 (Sun)
  62506083600, #  local_start 1981-09-27 01:00:00 (Sun)
  62521808400, #    local_end 1982-03-28 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521804800, #    utc_start 1982-03-28 00:00:00 (Sun)
  62537529600, #      utc_end 1982-09-26 00:00:00 (Sun)
  62521812000, #  local_start 1982-03-28 02:00:00 (Sun)
  62537536800, #    local_end 1982-09-26 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537529600, #    utc_start 1982-09-26 00:00:00 (Sun)
  62553254400, #      utc_end 1983-03-27 00:00:00 (Sun)
  62537533200, #  local_start 1982-09-26 01:00:00 (Sun)
  62553258000, #    local_end 1983-03-27 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553254400, #    utc_start 1983-03-27 00:00:00 (Sun)
  62568979200, #      utc_end 1983-09-25 00:00:00 (Sun)
  62553261600, #  local_start 1983-03-27 02:00:00 (Sun)
  62568986400, #    local_end 1983-09-25 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568979200, #    utc_start 1983-09-25 00:00:00 (Sun)
  62584704000, #      utc_end 1984-03-25 00:00:00 (Sun)
  62568982800, #  local_start 1983-09-25 01:00:00 (Sun)
  62584707600, #    local_end 1984-03-25 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584704000, #    utc_start 1984-03-25 00:00:00 (Sun)
  62601033600, #      utc_end 1984-09-30 00:00:00 (Sun)
  62584711200, #  local_start 1984-03-25 02:00:00 (Sun)
  62601040800, #    local_end 1984-09-30 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601033600, #    utc_start 1984-09-30 00:00:00 (Sun)
  62616758400, #      utc_end 1985-03-31 00:00:00 (Sun)
  62601037200, #  local_start 1984-09-30 01:00:00 (Sun)
  62616762000, #    local_end 1985-03-31 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616758400, #    utc_start 1985-03-31 00:00:00 (Sun)
  62632483200, #      utc_end 1985-09-29 00:00:00 (Sun)
  62616765600, #  local_start 1985-03-31 02:00:00 (Sun)
  62632490400, #    local_end 1985-09-29 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632483200, #    utc_start 1985-09-29 00:00:00 (Sun)
  62648208000, #      utc_end 1986-03-30 00:00:00 (Sun)
  62632486800, #  local_start 1985-09-29 01:00:00 (Sun)
  62648211600, #    local_end 1986-03-30 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648208000, #    utc_start 1986-03-30 00:00:00 (Sun)
  62663932800, #      utc_end 1986-09-28 00:00:00 (Sun)
  62648215200, #  local_start 1986-03-30 02:00:00 (Sun)
  62663940000, #    local_end 1986-09-28 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663932800, #    utc_start 1986-09-28 00:00:00 (Sun)
  62679657600, #      utc_end 1987-03-29 00:00:00 (Sun)
  62663936400, #  local_start 1986-09-28 01:00:00 (Sun)
  62679661200, #    local_end 1987-03-29 01:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679657600, #    utc_start 1987-03-29 00:00:00 (Sun)
  62695382400, #      utc_end 1987-09-27 00:00:00 (Sun)
  62679664800, #  local_start 1987-03-29 02:00:00 (Sun)
  62695389600, #    local_end 1987-09-27 02:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695382400, #    utc_start 1987-09-27 00:00:00 (Sun)
  62703673200, #      utc_end 1987-12-31 23:00:00 (Thu)
  62695386000, #  local_start 1987-09-27 01:00:00 (Sun)
  62703676800, #    local_end 1988-01-01 00:00:00 (Fri)
  3600,
  0,
  'CET',
      ],
      [
  62703673200, #    utc_start 1987-12-31 23:00:00 (Thu)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62703676800, #  local_start 1988-01-01 00:00:00 (Fri)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {72}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 725737,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 725737,
      'utc_rd_secs' => 0,
      'utc_year' => 1989
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 725736,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 725736,
      'utc_rd_secs' => 82800,
      'utc_year' => 1988
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_WARSAW

    $main::fatpacked{"DateTime/TimeZone/Europe/Zaporozhye.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_ZAPOROZHYE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Zaporozhye;
  $DateTime::TimeZone::Europe::Zaporozhye::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Zaporozhye::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295533960, #      utc_end 1879-12-31 21:39:20 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  8440,
  0,
  'LMT',
      ],
      [
  59295533960, #    utc_start 1879-12-31 21:39:20 (Wed)
  60694522800, #      utc_end 1924-05-01 21:40:00 (Thu)
  59295542360, #  local_start 1879-12-31 23:59:20 (Wed)
  60694531200, #    local_end 1924-05-02 00:00:00 (Fri)
  8400,
  0,
  'CUT',
      ],
      [
  60694522800, #    utc_start 1924-05-01 21:40:00 (Thu)
  60888146400, #      utc_end 1930-06-20 22:00:00 (Fri)
  60694530000, #  local_start 1924-05-01 23:40:00 (Thu)
  60888153600, #    local_end 1930-06-21 00:00:00 (Sat)
  7200,
  0,
  'EET',
      ],
      [
  60888146400, #    utc_start 1930-06-20 22:00:00 (Fri)
  61240914000, #      utc_end 1941-08-24 21:00:00 (Sun)
  60888157200, #  local_start 1930-06-21 01:00:00 (Sat)
  61240924800, #    local_end 1941-08-25 00:00:00 (Mon)
  10800,
  0,
  'MSK',
      ],
      [
  61240914000, #    utc_start 1941-08-24 21:00:00 (Sun)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61240921200, #  local_start 1941-08-24 23:00:00 (Sun)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61309263600, #      utc_end 1943-10-24 23:00:00 (Sun)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61309267200, #    local_end 1943-10-25 00:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61309263600, #    utc_start 1943-10-24 23:00:00 (Sun)
  62490603600, #      utc_end 1981-03-31 21:00:00 (Tue)
  61309274400, #  local_start 1943-10-25 02:00:00 (Mon)
  62490614400, #    local_end 1981-04-01 00:00:00 (Wed)
  10800,
  0,
  'MSK',
      ],
      [
  62490603600, #    utc_start 1981-03-31 21:00:00 (Tue)
  62506411200, #      utc_end 1981-09-30 20:00:00 (Wed)
  62490618000, #  local_start 1981-04-01 01:00:00 (Wed)
  62506425600, #    local_end 1981-10-01 00:00:00 (Thu)
  14400,
  1,
  'MSD',
      ],
      [
  62506411200, #    utc_start 1981-09-30 20:00:00 (Wed)
  62522139600, #      utc_end 1982-03-31 21:00:00 (Wed)
  62506422000, #  local_start 1981-09-30 23:00:00 (Wed)
  62522150400, #    local_end 1982-04-01 00:00:00 (Thu)
  10800,
  0,
  'MSK',
      ],
      [
  62522139600, #    utc_start 1982-03-31 21:00:00 (Wed)
  62537947200, #      utc_end 1982-09-30 20:00:00 (Thu)
  62522154000, #  local_start 1982-04-01 01:00:00 (Thu)
  62537961600, #    local_end 1982-10-01 00:00:00 (Fri)
  14400,
  1,
  'MSD',
      ],
      [
  62537947200, #    utc_start 1982-09-30 20:00:00 (Thu)
  62553675600, #      utc_end 1983-03-31 21:00:00 (Thu)
  62537958000, #  local_start 1982-09-30 23:00:00 (Thu)
  62553686400, #    local_end 1983-04-01 00:00:00 (Fri)
  10800,
  0,
  'MSK',
      ],
      [
  62553675600, #    utc_start 1983-03-31 21:00:00 (Thu)
  62569483200, #      utc_end 1983-09-30 20:00:00 (Fri)
  62553690000, #  local_start 1983-04-01 01:00:00 (Fri)
  62569497600, #    local_end 1983-10-01 00:00:00 (Sat)
  14400,
  1,
  'MSD',
      ],
      [
  62569483200, #    utc_start 1983-09-30 20:00:00 (Fri)
  62585298000, #      utc_end 1984-03-31 21:00:00 (Sat)
  62569494000, #  local_start 1983-09-30 23:00:00 (Fri)
  62585308800, #    local_end 1984-04-01 00:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62585298000, #    utc_start 1984-03-31 21:00:00 (Sat)
  62601030000, #      utc_end 1984-09-29 23:00:00 (Sat)
  62585312400, #  local_start 1984-04-01 01:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62601030000, #    utc_start 1984-09-29 23:00:00 (Sat)
  62616754800, #      utc_end 1985-03-30 23:00:00 (Sat)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62616754800, #    utc_start 1985-03-30 23:00:00 (Sat)
  62632479600, #      utc_end 1985-09-28 23:00:00 (Sat)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62632479600, #    utc_start 1985-09-28 23:00:00 (Sat)
  62648204400, #      utc_end 1986-03-29 23:00:00 (Sat)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62648204400, #    utc_start 1986-03-29 23:00:00 (Sat)
  62663929200, #      utc_end 1986-09-27 23:00:00 (Sat)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62663929200, #    utc_start 1986-09-27 23:00:00 (Sat)
  62679654000, #      utc_end 1987-03-28 23:00:00 (Sat)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62679654000, #    utc_start 1987-03-28 23:00:00 (Sat)
  62695378800, #      utc_end 1987-09-26 23:00:00 (Sat)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62695378800, #    utc_start 1987-09-26 23:00:00 (Sat)
  62711103600, #      utc_end 1988-03-26 23:00:00 (Sat)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62711103600, #    utc_start 1988-03-26 23:00:00 (Sat)
  62726828400, #      utc_end 1988-09-24 23:00:00 (Sat)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62726828400, #    utc_start 1988-09-24 23:00:00 (Sat)
  62742553200, #      utc_end 1989-03-25 23:00:00 (Sat)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62742553200, #    utc_start 1989-03-25 23:00:00 (Sat)
  62758278000, #      utc_end 1989-09-23 23:00:00 (Sat)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62758278000, #    utc_start 1989-09-23 23:00:00 (Sat)
  62774002800, #      utc_end 1990-03-24 23:00:00 (Sat)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62774002800, #    utc_start 1990-03-24 23:00:00 (Sat)
  62790332400, #      utc_end 1990-09-29 23:00:00 (Sat)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  14400,
  1,
  'MSD',
      ],
      [
  62790332400, #    utc_start 1990-09-29 23:00:00 (Sat)
  62806057200, #      utc_end 1991-03-30 23:00:00 (Sat)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  10800,
  0,
  'MSK',
      ],
      [
  62806057200, #    utc_start 1991-03-30 23:00:00 (Sat)
  62821774800, #      utc_end 1991-09-28 21:00:00 (Sat)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821785600, #    local_end 1991-09-29 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62821774800, #    utc_start 1991-09-28 21:00:00 (Sat)
  62837503200, #      utc_end 1992-03-28 22:00:00 (Sat)
  62821782000, #  local_start 1991-09-28 23:00:00 (Sat)
  62837510400, #    local_end 1992-03-29 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62837503200, #    utc_start 1992-03-28 22:00:00 (Sat)
  62853224400, #      utc_end 1992-09-26 21:00:00 (Sat)
  62837514000, #  local_start 1992-03-29 01:00:00 (Sun)
  62853235200, #    local_end 1992-09-27 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62853224400, #    utc_start 1992-09-26 21:00:00 (Sat)
  62868952800, #      utc_end 1993-03-27 22:00:00 (Sat)
  62853231600, #  local_start 1992-09-26 23:00:00 (Sat)
  62868960000, #    local_end 1993-03-28 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62868952800, #    utc_start 1993-03-27 22:00:00 (Sat)
  62884674000, #      utc_end 1993-09-25 21:00:00 (Sat)
  62868963600, #  local_start 1993-03-28 01:00:00 (Sun)
  62884684800, #    local_end 1993-09-26 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62884674000, #    utc_start 1993-09-25 21:00:00 (Sat)
  62900402400, #      utc_end 1994-03-26 22:00:00 (Sat)
  62884681200, #  local_start 1993-09-25 23:00:00 (Sat)
  62900409600, #    local_end 1994-03-27 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62900402400, #    utc_start 1994-03-26 22:00:00 (Sat)
  62916123600, #      utc_end 1994-09-24 21:00:00 (Sat)
  62900413200, #  local_start 1994-03-27 01:00:00 (Sun)
  62916134400, #    local_end 1994-09-25 00:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62916123600, #    utc_start 1994-09-24 21:00:00 (Sat)
  62924594400, #      utc_end 1994-12-31 22:00:00 (Sat)
  62916130800, #  local_start 1994-09-24 23:00:00 (Sat)
  62924601600, #    local_end 1995-01-01 00:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62924594400, #    utc_start 1994-12-31 22:00:00 (Sat)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62924601600, #  local_start 1995-01-01 00:00:00 (Sun)
  62931870000, #    local_end 1995-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931873600, #  local_start 1995-03-26 04:00:00 (Sun)
  62947598400, #    local_end 1995-09-24 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947594800, #  local_start 1995-09-24 03:00:00 (Sun)
  62963924400, #    local_end 1996-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963928000, #  local_start 1996-03-31 04:00:00 (Sun)
  62982072000, #    local_end 1996-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982068400, #  local_start 1996-10-27 03:00:00 (Sun)
  62995374000, #    local_end 1997-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995377600, #  local_start 1997-03-30 04:00:00 (Sun)
  63013521600, #    local_end 1997-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013518000, #  local_start 1997-10-26 03:00:00 (Sun)
  63026823600, #    local_end 1998-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026827200, #  local_start 1998-03-29 04:00:00 (Sun)
  63044971200, #    local_end 1998-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044967600, #  local_start 1998-10-25 03:00:00 (Sun)
  63058273200, #    local_end 1999-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058276800, #  local_start 1999-03-28 04:00:00 (Sun)
  63077025600, #    local_end 1999-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077022000, #  local_start 1999-10-31 03:00:00 (Sun)
  63089722800, #    local_end 2000-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089726400, #  local_start 2000-03-26 04:00:00 (Sun)
  63108475200, #    local_end 2000-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108471600, #  local_start 2000-10-29 03:00:00 (Sun)
  63121172400, #    local_end 2001-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121176000, #  local_start 2001-03-25 04:00:00 (Sun)
  63139924800, #    local_end 2001-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139921200, #  local_start 2001-10-28 03:00:00 (Sun)
  63153226800, #    local_end 2002-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153230400, #  local_start 2002-03-31 04:00:00 (Sun)
  63171374400, #    local_end 2002-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171370800, #  local_start 2002-10-27 03:00:00 (Sun)
  63184676400, #    local_end 2003-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184680000, #  local_start 2003-03-30 04:00:00 (Sun)
  63202824000, #    local_end 2003-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202820400, #  local_start 2003-10-26 03:00:00 (Sun)
  63216126000, #    local_end 2004-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216129600, #  local_start 2004-03-28 04:00:00 (Sun)
  63234878400, #    local_end 2004-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234874800, #  local_start 2004-10-31 03:00:00 (Sun)
  63247575600, #    local_end 2005-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247579200, #  local_start 2005-03-27 04:00:00 (Sun)
  63266328000, #    local_end 2005-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266324400, #  local_start 2005-10-30 03:00:00 (Sun)
  63279025200, #    local_end 2006-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279028800, #  local_start 2006-03-26 04:00:00 (Sun)
  63297777600, #    local_end 2006-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297774000, #  local_start 2006-10-29 03:00:00 (Sun)
  63310474800, #    local_end 2007-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310478400, #  local_start 2007-03-25 04:00:00 (Sun)
  63329227200, #    local_end 2007-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329223600, #  local_start 2007-10-28 03:00:00 (Sun)
  63342529200, #    local_end 2008-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342532800, #  local_start 2008-03-30 04:00:00 (Sun)
  63360676800, #    local_end 2008-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373978800, #    local_end 2009-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373982400, #  local_start 2009-03-29 04:00:00 (Sun)
  63392126400, #    local_end 2009-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392122800, #  local_start 2009-10-25 03:00:00 (Sun)
  63405428400, #    local_end 2010-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405432000, #  local_start 2010-03-28 04:00:00 (Sun)
  63424180800, #    local_end 2010-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424177200, #  local_start 2010-10-31 03:00:00 (Sun)
  63436878000, #    local_end 2011-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436881600, #  local_start 2011-03-27 04:00:00 (Sun)
  63455630400, #    local_end 2011-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455626800, #  local_start 2011-10-30 03:00:00 (Sun)
  63468327600, #    local_end 2012-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468331200, #  local_start 2012-03-25 04:00:00 (Sun)
  63487080000, #    local_end 2012-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487076400, #  local_start 2012-10-28 03:00:00 (Sun)
  63500382000, #    local_end 2013-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500385600, #  local_start 2013-03-31 04:00:00 (Sun)
  63518529600, #    local_end 2013-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518526000, #  local_start 2013-10-27 03:00:00 (Sun)
  63531831600, #    local_end 2014-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531835200, #  local_start 2014-03-30 04:00:00 (Sun)
  63549979200, #    local_end 2014-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549975600, #  local_start 2014-10-26 03:00:00 (Sun)
  63563281200, #    local_end 2015-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563284800, #  local_start 2015-03-29 04:00:00 (Sun)
  63581428800, #    local_end 2015-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581425200, #  local_start 2015-10-25 03:00:00 (Sun)
  63594730800, #    local_end 2016-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594734400, #  local_start 2016-03-27 04:00:00 (Sun)
  63613483200, #    local_end 2016-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613479600, #  local_start 2016-10-30 03:00:00 (Sun)
  63626180400, #    local_end 2017-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626184000, #  local_start 2017-03-26 04:00:00 (Sun)
  63644932800, #    local_end 2017-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644929200, #  local_start 2017-10-29 03:00:00 (Sun)
  63657630000, #    local_end 2018-03-25 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657633600, #  local_start 2018-03-25 04:00:00 (Sun)
  63676382400, #    local_end 2018-10-28 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676378800, #  local_start 2018-10-28 03:00:00 (Sun)
  63689684400, #    local_end 2019-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689688000, #  local_start 2019-03-31 04:00:00 (Sun)
  63707832000, #    local_end 2019-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707828400, #  local_start 2019-10-27 03:00:00 (Sun)
  63721134000, #    local_end 2020-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721137600, #  local_start 2020-03-29 04:00:00 (Sun)
  63739281600, #    local_end 2020-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739278000, #  local_start 2020-10-25 03:00:00 (Sun)
  63752583600, #    local_end 2021-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752587200, #  local_start 2021-03-28 04:00:00 (Sun)
  63771336000, #    local_end 2021-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771332400, #  local_start 2021-10-31 03:00:00 (Sun)
  63784033200, #    local_end 2022-03-27 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784036800, #  local_start 2022-03-27 04:00:00 (Sun)
  63802785600, #    local_end 2022-10-30 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802782000, #  local_start 2022-10-30 03:00:00 (Sun)
  63815482800, #    local_end 2023-03-26 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815486400, #  local_start 2023-03-26 04:00:00 (Sun)
  63834235200, #    local_end 2023-10-29 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834231600, #  local_start 2023-10-29 03:00:00 (Sun)
  63847537200, #    local_end 2024-03-31 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847540800, #  local_start 2024-03-31 04:00:00 (Sun)
  63865684800, #    local_end 2024-10-27 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865681200, #  local_start 2024-10-27 03:00:00 (Sun)
  63878986800, #    local_end 2025-03-30 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878990400, #  local_start 2025-03-30 04:00:00 (Sun)
  63897134400, #    local_end 2025-10-26 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897130800, #  local_start 2025-10-26 03:00:00 (Sun)
  63910436400, #    local_end 2026-03-29 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910440000, #  local_start 2026-03-29 04:00:00 (Sun)
  63928584000, #    local_end 2026-10-25 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928580400, #  local_start 2026-10-25 03:00:00 (Sun)
  63941886000, #    local_end 2027-03-28 03:00:00 (Sun)
  7200,
  0,
  'EET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941889600, #  local_start 2027-03-28 04:00:00 (Sun)
  63960638400, #    local_end 2027-10-31 04:00:00 (Sun)
  10800,
  1,
  'EEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {49}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 7200 }
  
  my $last_observance = bless( {
    'format' => 'EE%sT',
    'gmtoff' => '2:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 728294,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 728294,
      'utc_rd_secs' => 0,
      'utc_year' => 1996
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 7200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 728293,
      'local_rd_secs' => 79200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 728293,
      'utc_rd_secs' => 79200,
      'utc_year' => 1995
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_ZAPOROZHYE

    $main::fatpacked{"DateTime/TimeZone/Europe/Zurich.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_EUROPE_ZURICH';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Europe::Zurich;
  $DateTime::TimeZone::Europe::Zurich::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Europe::Zurich::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  58460484352, #      utc_end 1853-07-15 23:25:52 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  58460486400, #    local_end 1853-07-16 00:00:00 (Sat)
  2048,
  0,
  'LMT',
      ],
      [
  58460484352, #    utc_start 1853-07-15 23:25:52 (Fri)
  59750436614, #      utc_end 1894-05-31 23:30:14 (Thu)
  58460486138, #  local_start 1853-07-15 23:55:38 (Fri)
  59750438400, #    local_end 1894-06-01 00:00:00 (Fri)
  1786,
  0,
  'BMT',
      ],
      [
  59750436614, #    utc_start 1894-05-31 23:30:14 (Thu)
  61231248000, #      utc_end 1941-05-05 00:00:00 (Mon)
  59750440214, #  local_start 1894-06-01 00:30:14 (Fri)
  61231251600, #    local_end 1941-05-05 01:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61231248000, #    utc_start 1941-05-05 00:00:00 (Mon)
  61244553600, #      utc_end 1941-10-06 00:00:00 (Mon)
  61231255200, #  local_start 1941-05-05 02:00:00 (Mon)
  61244560800, #    local_end 1941-10-06 02:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61244553600, #    utc_start 1941-10-06 00:00:00 (Mon)
  61262697600, #      utc_end 1942-05-04 00:00:00 (Mon)
  61244557200, #  local_start 1941-10-06 01:00:00 (Mon)
  61262701200, #    local_end 1942-05-04 01:00:00 (Mon)
  3600,
  0,
  'CET',
      ],
      [
  61262697600, #    utc_start 1942-05-04 00:00:00 (Mon)
  61276003200, #      utc_end 1942-10-05 00:00:00 (Mon)
  61262704800, #  local_start 1942-05-04 02:00:00 (Mon)
  61276010400, #    local_end 1942-10-05 02:00:00 (Mon)
  7200,
  1,
  'CEST',
      ],
      [
  61276003200, #    utc_start 1942-10-05 00:00:00 (Mon)
  62482834800, #      utc_end 1980-12-31 23:00:00 (Wed)
  61276006800, #  local_start 1942-10-05 01:00:00 (Mon)
  62482838400, #    local_end 1981-01-01 00:00:00 (Thu)
  3600,
  0,
  'CET',
      ],
      [
  62482834800, #    utc_start 1980-12-31 23:00:00 (Wed)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62482838400, #  local_start 1981-01-01 00:00:00 (Thu)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'CET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'CEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {49}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'CE%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723181,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723181,
      'utc_rd_secs' => 0,
      'utc_year' => 1982
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723180,
      'local_rd_secs' => 82800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723180,
      'utc_rd_secs' => 82800,
      'utc_year' => 1981
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_EUROPE_ZURICH

    $main::fatpacked{"DateTime/TimeZone/Floating.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_FLOATING';
  package DateTime::TimeZone::Floating;
  $DateTime::TimeZone::Floating::VERSION = '2.01';
  use strict;
  use warnings;
  
  use parent 'Class::Singleton', 'DateTime::TimeZone::OffsetOnly';
  
  sub new {
      return shift->instance;
  }
  
  ## no critic (Subroutines::ProhibitUnusedPrivateSubroutines)
  sub _new_instance {
      my $class = shift;
  
      return bless {
          name   => 'floating',
          offset => 0
      }, $class;
  }
  ## use critic
  
  sub is_floating {1}
  
  sub STORABLE_thaw {
      my $self = shift;
  
      my $class = ref $self || $self;
  
      my $obj;
      if ( $class->isa(__PACKAGE__) ) {
          $obj = __PACKAGE__->new();
      }
      else {
          $obj = $class->new();
      }
  
      %$self = %$obj;
  
      return $self;
  }
  
  1;
  
  # ABSTRACT: A time zone that is always local
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::TimeZone::Floating - A time zone that is always local
  
  =head1 VERSION
  
  version 2.01
  
  =head1 SYNOPSIS
  
    my $floating_tz = DateTime::TimeZone::Floating->new;
  
  =head1 DESCRIPTION
  
  This class is used to provide the DateTime::TimeZone API needed by
  DateTime.pm, but for floating times, as defined by the RFC 2445 spec.
  A floating time has no time zone, and has an effective offset of zero.
  
  =head1 USAGE
  
  This class has the same methods as a real time zone object, but the
  C<short_name_for_datetime()>, and C<category()> methods both return
  undef.
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime-TimeZone>
  (or L<bug-datetime-timezone@rt.cpan.org|mailto:bug-datetime-timezone@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2016 by Dave Rolsky.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATETIME_TIMEZONE_FLOATING

    $main::fatpacked{"DateTime/TimeZone/HST.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_HST';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::HST;
  $DateTime::TimeZone::HST::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::HST::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  DateTime::TimeZone::INFINITY, #      utc_end
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  DateTime::TimeZone::INFINITY, #    local_end
  -36000,
  0,
  'HST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_HST

    $main::fatpacked{"DateTime/TimeZone/Indian/Chagos.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_INDIAN_CHAGOS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Indian::Chagos;
  $DateTime::TimeZone::Indian::Chagos::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Indian::Chagos::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60147515420, #      utc_end 1906-12-31 19:10:20 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60147532800, #    local_end 1907-01-01 00:00:00 (Tue)
  17380,
  0,
  'LMT',
      ],
      [
  60147515420, #    utc_start 1906-12-31 19:10:20 (Mon)
  62956119600, #      utc_end 1995-12-31 19:00:00 (Sun)
  60147533420, #  local_start 1907-01-01 00:10:20 (Tue)
  62956137600, #    local_end 1996-01-01 00:00:00 (Mon)
  18000,
  0,
  'IOT',
      ],
      [
  62956119600, #    utc_start 1995-12-31 19:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  62956141200, #  local_start 1996-01-01 01:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  21600,
  0,
  'IOT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_INDIAN_CHAGOS

    $main::fatpacked{"DateTime/TimeZone/Indian/Christmas.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_INDIAN_CHRISTMAS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Indian::Christmas;
  $DateTime::TimeZone::Indian::Christmas::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Indian::Christmas::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59771581028, #      utc_end 1895-01-31 16:57:08 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59771606400, #    local_end 1895-02-01 00:00:00 (Fri)
  25372,
  0,
  'LMT',
      ],
      [
  59771581028, #    utc_start 1895-01-31 16:57:08 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  59771606228, #  local_start 1895-01-31 23:57:08 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  25200,
  0,
  'CXT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_INDIAN_CHRISTMAS

    $main::fatpacked{"DateTime/TimeZone/Indian/Cocos.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_INDIAN_COCOS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Indian::Cocos;
  $DateTime::TimeZone::Indian::Cocos::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Indian::Cocos::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59926671140, #      utc_end 1899-12-31 17:32:20 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59926694400, #    local_end 1900-01-01 00:00:00 (Mon)
  23260,
  0,
  'LMT',
      ],
      [
  59926671140, #    utc_start 1899-12-31 17:32:20 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  59926694540, #  local_start 1900-01-01 00:02:20 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  23400,
  0,
  'CCT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_INDIAN_COCOS

    $main::fatpacked{"DateTime/TimeZone/Indian/Kerguelen.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_INDIAN_KERGUELEN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/antarctica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Indian::Kerguelen;
  $DateTime::TimeZone::Indian::Kerguelen::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Indian::Kerguelen::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  61504531200, #      utc_end 1950-01-01 00:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  61504531200, #    local_end 1950-01-01 00:00:00 (Sun)
  0,
  0,
  '-00',
      ],
      [
  61504531200, #    utc_start 1950-01-01 00:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  61504549200, #  local_start 1950-01-01 05:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  18000,
  0,
  'TFT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_INDIAN_KERGUELEN

    $main::fatpacked{"DateTime/TimeZone/Indian/Mahe.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_INDIAN_MAHE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Indian::Mahe;
  $DateTime::TimeZone::Indian::Mahe::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Indian::Mahe::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60129029892, #      utc_end 1906-05-31 20:18:12 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60129043200, #    local_end 1906-06-01 00:00:00 (Fri)
  13308,
  0,
  'LMT',
      ],
      [
  60129029892, #    utc_start 1906-05-31 20:18:12 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  60129044292, #  local_start 1906-06-01 00:18:12 (Fri)
  DateTime::TimeZone::INFINITY, #    local_end
  14400,
  0,
  'SCT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_INDIAN_MAHE

    $main::fatpacked{"DateTime/TimeZone/Indian/Maldives.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_INDIAN_MALDIVES';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/asia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Indian::Maldives;
  $DateTime::TimeZone::Indian::Maldives::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Indian::Maldives::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295524760, #      utc_end 1879-12-31 19:06:00 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  17640,
  0,
  'LMT',
      ],
      [
  59295524760, #    utc_start 1879-12-31 19:06:00 (Wed)
  61820046360, #      utc_end 1959-12-31 19:06:00 (Thu)
  59295542400, #  local_start 1880-01-01 00:00:00 (Thu)
  61820064000, #    local_end 1960-01-01 00:00:00 (Fri)
  17640,
  0,
  'MMT',
      ],
      [
  61820046360, #    utc_start 1959-12-31 19:06:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  61820064360, #  local_start 1960-01-01 00:06:00 (Fri)
  DateTime::TimeZone::INFINITY, #    local_end
  18000,
  0,
  'MVT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_INDIAN_MALDIVES

    $main::fatpacked{"DateTime/TimeZone/Indian/Mauritius.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_INDIAN_MAURITIUS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Indian::Mauritius;
  $DateTime::TimeZone::Indian::Mauritius::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Indian::Mauritius::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60147519000, #      utc_end 1906-12-31 20:10:00 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60147532800, #    local_end 1907-01-01 00:00:00 (Tue)
  13800,
  0,
  'LMT',
      ],
      [
  60147519000, #    utc_start 1906-12-31 20:10:00 (Mon)
  62538724800, #      utc_end 1982-10-09 20:00:00 (Sat)
  60147533400, #  local_start 1907-01-01 00:10:00 (Tue)
  62538739200, #    local_end 1982-10-10 00:00:00 (Sun)
  14400,
  0,
  'MUT',
      ],
      [
  62538724800, #    utc_start 1982-10-09 20:00:00 (Sat)
  62552718000, #      utc_end 1983-03-20 19:00:00 (Sun)
  62538742800, #  local_start 1982-10-10 01:00:00 (Sun)
  62552736000, #    local_end 1983-03-21 00:00:00 (Mon)
  18000,
  1,
  'MUST',
      ],
      [
  62552718000, #    utc_start 1983-03-20 19:00:00 (Sun)
  63360655200, #      utc_end 2008-10-25 22:00:00 (Sat)
  62552732400, #  local_start 1983-03-20 23:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  14400,
  0,
  'MUT',
      ],
      [
  63360655200, #    utc_start 2008-10-25 22:00:00 (Sat)
  63373957200, #      utc_end 2009-03-28 21:00:00 (Sat)
  63360673200, #  local_start 2008-10-26 03:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  18000,
  1,
  'MUST',
      ],
      [
  63373957200, #    utc_start 2009-03-28 21:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63373971600, #  local_start 2009-03-29 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  14400,
  0,
  'MUT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {2}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_INDIAN_MAURITIUS

    $main::fatpacked{"DateTime/TimeZone/Indian/Reunion.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_INDIAN_REUNION';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/africa.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Indian::Reunion;
  $DateTime::TimeZone::Indian::Reunion::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Indian::Reunion::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60286796288, #      utc_end 1911-05-31 20:18:08 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60286809600, #    local_end 1911-06-01 00:00:00 (Thu)
  13312,
  0,
  'LMT',
      ],
      [
  60286796288, #    utc_start 1911-05-31 20:18:08 (Wed)
  DateTime::TimeZone::INFINITY, #      utc_end
  60286810688, #  local_start 1911-06-01 00:18:08 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  14400,
  0,
  'RET',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_INDIAN_REUNION

    $main::fatpacked{"DateTime/TimeZone/Local.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_LOCAL';
  package DateTime::TimeZone::Local;
  $DateTime::TimeZone::Local::VERSION = '2.01';
  use strict;
  use warnings;
  
  use DateTime::TimeZone;
  use File::Spec;
  use Module::Runtime qw( require_module );
  use Try::Tiny;
  
  sub TimeZone {
      my $class = shift;
  
      my $subclass = $class->_load_subclass();
  
      for my $meth ( $subclass->Methods() ) {
          my $tz = $subclass->$meth();
  
          return $tz if $tz;
      }
  
      die "Cannot determine local time zone\n";
  }
  
  {
      # Stolen from File::Spec. My theory is that other folks can write
      # the non-existent modules if they feel a need, and release them
      # to CPAN separately.
      my %subclass = (
          MSWin32 => 'Win32',
          VMS     => 'VMS',
          MacOS   => 'Mac',
          os2     => 'OS2',
          epoc    => 'Epoc',
          NetWare => 'Win32',
          symbian => 'Win32',
          dos     => 'OS2',
          android => 'Android',
          cygwin  => 'Unix',
      );
  
      sub _load_subclass {
          my $class = shift;
  
          my $os_name = $subclass{$^O} || $^O;
          my $subclass = $class . '::' . $os_name;
  
          return $subclass if $subclass->can('Methods');
  
          return $subclass if try {
              ## no critic (Variables::RequireInitializationForLocalVars)
              local $SIG{__DIE__};
              require_module($subclass);
          };
  
          $subclass = $class . '::Unix';
  
          require_module($subclass);
  
          return $subclass;
      }
  }
  
  sub FromEnv {
      my $class = shift;
  
      foreach my $var ( $class->EnvVars() ) {
          if ( $class->_IsValidName( $ENV{$var} ) ) {
              my $tz = try {
                  ## no critic (Variables::RequireInitializationForLocalVars)
                  local $SIG{__DIE__};
                  DateTime::TimeZone->new( name => $ENV{$var} );
              };
  
              return $tz if $tz;
          }
      }
  
      return;
  }
  
  sub _IsValidName {
      shift;
  
      return 0 unless defined $_[0];
      return 0 if $_[0] eq 'local';
  
      return $_[0] =~ m{^[\w/\-\+]+$};
  }
  
  1;
  
  # ABSTRACT: Determine the local system's time zone
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::TimeZone::Local - Determine the local system's time zone
  
  =head1 VERSION
  
  version 2.01
  
  =head1 SYNOPSIS
  
    my $tz = DateTime::TimeZone->new( name => 'local' );
  
    my $tz = DateTime::TimeZone::Local->TimeZone();
  
  =head1 DESCRIPTION
  
  This module provides an interface for determining the local system's
  time zone. Most of the functionality for doing this is in OS-specific
  subclasses.
  
  =head1 USAGE
  
  This class provides the following methods:
  
  =head2 DateTime::TimeZone::Local->TimeZone()
  
  This attempts to load an appropriate subclass and asks it to find the
  local time zone. This method is called by when you pass "local" as the
  time zone name to C<< DateTime:TimeZone->new() >>.
  
  If your OS is not explicitly handled, you can create a module with a
  name of the form C<DateTime::TimeZone::Local::$^O>. If it exists, it
  will be used instead of falling back to the Unix subclass.
  
  If no OS-specific module exists, we fall back to using the Unix
  subclass.
  
  See L<DateTime::TimeZone::Local::Unix>,
  L<DateTime::TimeZone::Local::Win32>, and
  L<DateTime::TimeZone::Local::VMS> for OS-specific details.
  
  =head1 SUBCLASSING
  
  If you want to make a new OS-specific subclass, there are several
  methods provided by this module you should know about.
  
  =head2 $class->Methods()
  
  This method should be provided by your class. It should provide a list
  of methods that will be called to try to determine the local time
  zone.
  
  Each of these methods is expected to return a new
  C<DateTime::TimeZone> object if it determines the time zone.
  
  =head2 $class->FromEnv()
  
  This method tries to find a valid time zone in an C<%ENV> value. It
  calls C<< $class->EnvVars() >> to determine which keys to look at.
  
  To use this from a subclass, simply return "FromEnv" as one of the
  items from C<< $class->Methods() >>.
  
  =head2 $class->EnvVars()
  
  This method should be provided by your subclass. It should return a
  list of env vars to be checked by C<< $class->FromEnv() >>.
  
  =head2 $class->_IsValidName($name)
  
  Given a possible time zone name, this returns a boolean indicating
  whether or not the name looks valid. It always return false for
  "local" in order to avoid infinite loops.
  
  =head1 EXAMPLE SUBCLASS
  
  Here is a simple example subclass:
  
    package DateTime::TimeZone::SomeOS;
  
    use strict;
    use warnings;
  
    use base 'DateTime::TimeZone::Local';
  
  
    sub Methods { qw( FromEnv FromEther ) }
  
    sub EnvVars { qw( TZ ZONE ) }
  
    sub FromEther
    {
        my $class = shift;
  
        ...
    }
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime-TimeZone>
  (or L<bug-datetime-timezone@rt.cpan.org|mailto:bug-datetime-timezone@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2016 by Dave Rolsky.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATETIME_TIMEZONE_LOCAL

    $main::fatpacked{"DateTime/TimeZone/Local/Android.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_LOCAL_ANDROID';
  package DateTime::TimeZone::Local::Android;
  $DateTime::TimeZone::Local::Android::VERSION = '2.01';
  use strict;
  use warnings;
  
  use Try::Tiny;
  
  use parent 'DateTime::TimeZone::Local';
  
  sub Methods {
      return qw(
          FromEnv
          FromGetProp
          FromDefault
      );
  }
  
  sub EnvVars { return 'TZ' }
  
  # https://chromium.googlesource.com/native_client/nacl-bionic/+/upstream/master/libc/tzcode/localtime.c
  sub FromGetProp {
      ## no critic (InputOutput::ProhibitBacktickOperators)
      my $name = `getprop persist.sys.timezone`;
      chomp $name;
      my $tz = try {
          ## no critic (Variables::RequireInitializationForLocalVars)
          local $SIG{__DIE__};
          DateTime::TimeZone->new( name => $name );
      };
  
      return $tz if $tz;
  }
  
  # See the link above. Android always defaults to UTC
  sub FromDefault {
      return try {
          ## no critic (Variables::RequireInitializationForLocalVars)
          local $SIG{__DIE__};
          DateTime::TimeZone->new( name => 'UTC' );
      };
  }
  
  1;
DATETIME_TIMEZONE_LOCAL_ANDROID

    $main::fatpacked{"DateTime/TimeZone/Local/Unix.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_LOCAL_UNIX';
  package DateTime::TimeZone::Local::Unix;
  $DateTime::TimeZone::Local::Unix::VERSION = '2.01';
  use strict;
  use warnings;
  
  use Cwd 3;
  use Try::Tiny;
  
  use parent 'DateTime::TimeZone::Local';
  
  sub Methods {
      return qw(
          FromEnv
          FromEtcTimezone
          FromEtcLocaltime
          FromEtcTIMEZONE
          FromEtcSysconfigClock
          FromEtcDefaultInit
      );
  }
  
  sub EnvVars { return 'TZ' }
  
  ## no critic (Variables::ProhibitPackageVars)
  our $EtcDir = '/etc';
  ## use critic
  
  sub _EtcFile {
      shift;
      return File::Spec->catfile( $EtcDir, @_ );
  }
  
  sub FromEtcLocaltime {
      my $class = shift;
  
      my $lt_file = $class->_EtcFile('localtime');
      return unless -r $lt_file && -s _;
  
      my $real_name;
      if ( -l $lt_file ) {
  
          # The _Readlink sub exists so the test suite can mock it.
          $real_name = $class->_Readlink($lt_file);
      }
  
      $real_name ||= $class->_FindMatchingZoneinfoFile($lt_file);
  
      if ( defined $real_name ) {
          my ( undef, $dirs, $file ) = File::Spec->splitpath($real_name);
  
          my @parts = grep { defined && length } File::Spec->splitdir($dirs),
              $file;
  
          foreach my $x ( reverse 0 .. $#parts ) {
              my $name = (
                  $x < $#parts
                  ? join '/', @parts[ $x .. $#parts ]
                  : $parts[$x]
              );
  
              my $tz = try {
                  ## no critic (Variables::RequireInitializationForLocalVars)
                  local $SIG{__DIE__};
                  DateTime::TimeZone->new( name => $name );
              };
  
              return $tz if $tz;
          }
      }
  }
  
  sub _Readlink {
      my $link = $_[1];
  
      # Using abs_path will resolve multiple levels of link indirection,
      # whereas readlink just follows the link to the next target.
      return Cwd::abs_path($link);
  }
  
  ## no critic (Variables::ProhibitPackageVars)
  our $ZoneinfoDir = '/usr/share/zoneinfo';
  ## use critic
  
  # for systems where /etc/localtime is a copy of a zoneinfo file
  sub _FindMatchingZoneinfoFile {
      shift;
      my $file_to_match = shift;
  
      return unless -d $ZoneinfoDir;
  
      require File::Basename;
      require File::Compare;
      require File::Find;
  
      my $size = -s $file_to_match;
  
      my $real_name;
      try {
          ## no critic (Variables::RequireInitializationForLocalVars)
          local $SIG{__DIE__};
          local $_;
  
          File::Find::find(
              {
                  wanted => sub {
                      if (
                             !defined $real_name
                          && -f $_
                          && !-l $_
                          && $size == -s _
  
                          # This fixes RT 24026 - apparently such a
                          # file exists on FreeBSD and it can cause a
                          # false positive
                          && File::Basename::basename($_) ne 'posixrules'
                          && File::Compare::compare( $_, $file_to_match ) == 0
                          ) {
                          $real_name = $_;
  
                          # File::Find has no mechanism for bailing in the
                          # middle of a find.
                          die { found => 1 };
                      }
                  },
                  no_chdir => 1,
              },
              $ZoneinfoDir,
          );
      }
      catch {
          die $_ unless ref $_ && $_->{found};
      };
  
      return $real_name;
  }
  
  sub FromEtcTimezone {
      my $class = shift;
  
      my $tz_file = $class->_EtcFile('timezone');
      return unless -f $tz_file && -r _;
  
      open my $fh, '<', $tz_file
          or die "Cannot read $tz_file: $!";
      my $name = do { local $/ = undef; <$fh> };
      close $fh or die $!;
  
      $name =~ s/^\s+|\s+$//g;
  
      return unless $class->_IsValidName($name);
  
      return try {
          ## no critic (Variables::RequireInitializationForLocalVars)
          local $SIG{__DIE__};
          DateTime::TimeZone->new( name => $name );
      };
  }
  
  sub FromEtcTIMEZONE {
      my $class = shift;
  
      my $tz_file = $class->_EtcFile('TIMEZONE');
      return unless -f $tz_file && -r _;
  
      ## no critic (InputOutput::RequireBriefOpen)
      open my $fh, '<', $tz_file
          or die "Cannot read $tz_file: $!";
  
      my $name;
      while ( defined( $name = <$fh> ) ) {
          if ( $name =~ /\A\s*TZ\s*=\s*(\S+)/ ) {
              $name = $1;
              last;
          }
      }
  
      close $fh or die $!;
  
      return unless $class->_IsValidName($name);
  
      return try {
          ## no critic (Variables::RequireInitializationForLocalVars)
          local $SIG{__DIE__};
          DateTime::TimeZone->new( name => $name );
      };
  }
  
  # RedHat uses this
  sub FromEtcSysconfigClock {
      my $class = shift;
  
      my $clock_file = $class->_EtcFile('sysconfig/clock');
      return unless -r $clock_file && -f _;
  
      my $name = $class->_ReadEtcSysconfigClock($clock_file);
  
      return unless $class->_IsValidName($name);
  
      return try {
          ## no critic (Variables::RequireInitializationForLocalVars)
          local $SIG{__DIE__};
          DateTime::TimeZone->new( name => $name );
      };
  }
  
  # this is a separate function so that it can be overridden in the test suite
  sub _ReadEtcSysconfigClock {
      shift;
      my $clock_file = shift;
  
      open my $fh, '<', $clock_file
          or die "Cannot read $clock_file: $!";
  
      ## no critic (Variables::RequireInitializationForLocalVars)
      local $_;
      while (<$fh>) {
          return $1 if /^(?:TIME)?ZONE="([^"]+)"/;
      }
  
      close $fh or die $!;
  }
  
  sub FromEtcDefaultInit {
      my $class = shift;
  
      my $init_file = $class->_EtcFile('default/init');
      return unless -r $init_file && -f _;
  
      my $name = $class->_ReadEtcDefaultInit($init_file);
  
      return unless $class->_IsValidName($name);
  
      return try {
          ## no critic (Variables::RequireInitializationForLocalVars)
          local $SIG{__DIE__};
          DateTime::TimeZone->new( name => $name );
      };
  }
  
  # this is a separate function so that it can be overridden in the test
  # suite
  sub _ReadEtcDefaultInit {
      shift;
      my $init_file = shift;
  
      open my $fh, '<', $init_file
          or die "Cannot read $init_file: $!";
  
      ## no critic (Variables::RequireInitializationForLocalVars)
      local $_;
      while (<$fh>) {
          return $1 if /^TZ=(.+)/;
      }
  
      close $fh or die $!;
  }
  
  1;
  
  # ABSTRACT: Determine the local system's time zone on Unix
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::TimeZone::Local::Unix - Determine the local system's time zone on Unix
  
  =head1 VERSION
  
  version 2.01
  
  =head1 SYNOPSIS
  
    my $tz = DateTime::TimeZone->new( name => 'local' );
  
    my $tz = DateTime::TimeZone::Local->TimeZone();
  
  =head1 DESCRIPTION
  
  This module provides methods for determining the local time zone on a
  Unix platform.
  
  =head1 HOW THE TIME ZONE IS DETERMINED
  
  This class tries the following methods of determining the local time
  zone:
  
  =over 4
  
  =item * $ENV{TZ}
  
  It checks C<< $ENV{TZ} >> for a valid time zone name.
  
  =item * F</etc/localtime>
  
  If this file is a symlink to an Olson database time zone file (usually
  in F</usr/share/zoneinfo>) then it uses the target file's path name to
  determine the time zone name. For example, if the path is
  F</usr/share/zoneinfo/America/Chicago>, the time zone is
  "America/Chicago".
  
  Some systems just copy the relevant file to F</etc/localtime> instead
  of making a symlink.  In this case, we look in F</usr/share/zoneinfo>
  for a file that has the same size and content as F</etc/localtime> to
  determine the local time zone.
  
  =item * F</etc/timezone>
  
  If this file exists, it is read and its contents are used as a time
  zone name.
  
  =item * F</etc/TIMEZONE>
  
  If this file exists, it is opened and we look for a line starting like
  "TZ = ...". If this is found, it should indicate a time zone name.
  
  =item * F</etc/sysconfig/clock>
  
  If this file exists, it is opened and we look for a line starting like
  "TIMEZONE = ..." or "ZONE = ...". If this is found, it should indicate
  a time zone name.
  
  =item * F</etc/default/init>
  
  If this file exists, it is opened and we look for a line starting like
  "TZ=...". If this is found, it should indicate a time zone name.
  
  =back
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime-TimeZone>
  (or L<bug-datetime-timezone@rt.cpan.org|mailto:bug-datetime-timezone@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2016 by Dave Rolsky.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATETIME_TIMEZONE_LOCAL_UNIX

    $main::fatpacked{"DateTime/TimeZone/Local/VMS.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_LOCAL_VMS';
  package DateTime::TimeZone::Local::VMS;
  $DateTime::TimeZone::Local::VMS::VERSION = '2.01';
  use strict;
  use warnings;
  
  use parent 'DateTime::TimeZone::Local';
  
  sub Methods { return qw( FromEnv ) }
  
  sub EnvVars {
      return qw( TZ SYS$TIMEZONE_RULE SYS$TIMEZONE_NAME UCX$TZ TCPIP$TZ );
  }
  
  1;
  
  # ABSTRACT: Determine the local system's time zone on VMS
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::TimeZone::Local::VMS - Determine the local system's time zone on VMS
  
  =head1 VERSION
  
  version 2.01
  
  =head1 SYNOPSIS
  
    my $tz = DateTime::TimeZone->new( name => 'local' );
  
    my $tz = DateTime::TimeZone::Local->TimeZone();
  
  =head1 DESCRIPTION
  
  This module provides methods for determining the local time zone on a
  VMS platform.
  
  NOTE: This is basically a stub pending an implementation by someone
  who knows something about VMS.
  
  =head1 HOW THE TIME ZONE IS DETERMINED
  
  This class tries the following methods of determining the local time
  zone:
  
  =over 4
  
  =item * %ENV
  
  We check the following environment variables:
  
  =over 8
  
  =item * TZ
  
  =item * SYS$TIMEZONE_RULE
  
  =item * SYS$TIMEZONE_NAME
  
  =item * UCX$TZ
  
  =item * TCPIP$TZ
  
  =back
  
  =back
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime-TimeZone>
  (or L<bug-datetime-timezone@rt.cpan.org|mailto:bug-datetime-timezone@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2016 by Dave Rolsky.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATETIME_TIMEZONE_LOCAL_VMS

    $main::fatpacked{"DateTime/TimeZone/MET.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_MET';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::MET;
  $DateTime::TimeZone::MET::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::MET::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60441976800, #      utc_end 1916-04-30 22:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60441980400, #    local_end 1916-04-30 23:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  60441976800, #    utc_start 1916-04-30 22:00:00 (Sun)
  60455199600, #      utc_end 1916-09-30 23:00:00 (Sat)
  60441984000, #  local_start 1916-05-01 00:00:00 (Mon)
  60455206800, #    local_end 1916-10-01 01:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  60455199600, #    utc_start 1916-09-30 23:00:00 (Sat)
  60472227600, #      utc_end 1917-04-16 01:00:00 (Mon)
  60455203200, #  local_start 1916-10-01 00:00:00 (Sun)
  60472231200, #    local_end 1917-04-16 02:00:00 (Mon)
  3600,
  0,
  'MET',
      ],
      [
  60472227600, #    utc_start 1917-04-16 01:00:00 (Mon)
  60485533200, #      utc_end 1917-09-17 01:00:00 (Mon)
  60472234800, #  local_start 1917-04-16 03:00:00 (Mon)
  60485540400, #    local_end 1917-09-17 03:00:00 (Mon)
  7200,
  1,
  'MEST',
      ],
      [
  60485533200, #    utc_start 1917-09-17 01:00:00 (Mon)
  60503677200, #      utc_end 1918-04-15 01:00:00 (Mon)
  60485536800, #  local_start 1917-09-17 02:00:00 (Mon)
  60503680800, #    local_end 1918-04-15 02:00:00 (Mon)
  3600,
  0,
  'MET',
      ],
      [
  60503677200, #    utc_start 1918-04-15 01:00:00 (Mon)
  60516982800, #      utc_end 1918-09-16 01:00:00 (Mon)
  60503684400, #  local_start 1918-04-15 03:00:00 (Mon)
  60516990000, #    local_end 1918-09-16 03:00:00 (Mon)
  7200,
  1,
  'MEST',
      ],
      [
  60516982800, #    utc_start 1918-09-16 01:00:00 (Mon)
  61196778000, #      utc_end 1940-04-01 01:00:00 (Mon)
  60516986400, #  local_start 1918-09-16 02:00:00 (Mon)
  61196781600, #    local_end 1940-04-01 02:00:00 (Mon)
  3600,
  0,
  'MET',
      ],
      [
  61196778000, #    utc_start 1940-04-01 01:00:00 (Mon)
  61278426000, #      utc_end 1942-11-02 01:00:00 (Mon)
  61196785200, #  local_start 1940-04-01 03:00:00 (Mon)
  61278433200, #    local_end 1942-11-02 03:00:00 (Mon)
  7200,
  1,
  'MEST',
      ],
      [
  61278426000, #    utc_start 1942-11-02 01:00:00 (Mon)
  61291126800, #      utc_end 1943-03-29 01:00:00 (Mon)
  61278429600, #  local_start 1942-11-02 02:00:00 (Mon)
  61291130400, #    local_end 1943-03-29 02:00:00 (Mon)
  3600,
  0,
  'MET',
      ],
      [
  61291126800, #    utc_start 1943-03-29 01:00:00 (Mon)
  61307456400, #      utc_end 1943-10-04 01:00:00 (Mon)
  61291134000, #  local_start 1943-03-29 03:00:00 (Mon)
  61307463600, #    local_end 1943-10-04 03:00:00 (Mon)
  7200,
  1,
  'MEST',
      ],
      [
  61307456400, #    utc_start 1943-10-04 01:00:00 (Mon)
  61323181200, #      utc_end 1944-04-03 01:00:00 (Mon)
  61307460000, #  local_start 1943-10-04 02:00:00 (Mon)
  61323184800, #    local_end 1944-04-03 02:00:00 (Mon)
  3600,
  0,
  'MET',
      ],
      [
  61323181200, #    utc_start 1944-04-03 01:00:00 (Mon)
  61338906000, #      utc_end 1944-10-02 01:00:00 (Mon)
  61323188400, #  local_start 1944-04-03 03:00:00 (Mon)
  61338913200, #    local_end 1944-10-02 03:00:00 (Mon)
  7200,
  1,
  'MEST',
      ],
      [
  61338906000, #    utc_start 1944-10-02 01:00:00 (Mon)
  61354630800, #      utc_end 1945-04-02 01:00:00 (Mon)
  61338909600, #  local_start 1944-10-02 02:00:00 (Mon)
  61354634400, #    local_end 1945-04-02 02:00:00 (Mon)
  3600,
  0,
  'MET',
      ],
      [
  61354630800, #    utc_start 1945-04-02 01:00:00 (Mon)
  61369059600, #      utc_end 1945-09-16 01:00:00 (Sun)
  61354638000, #  local_start 1945-04-02 03:00:00 (Mon)
  61369066800, #    local_end 1945-09-16 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  61369059600, #    utc_start 1945-09-16 01:00:00 (Sun)
  62364560400, #      utc_end 1977-04-03 01:00:00 (Sun)
  61369063200, #  local_start 1945-09-16 02:00:00 (Sun)
  62364564000, #    local_end 1977-04-03 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62364560400, #    utc_start 1977-04-03 01:00:00 (Sun)
  62379680400, #      utc_end 1977-09-25 01:00:00 (Sun)
  62364567600, #  local_start 1977-04-03 03:00:00 (Sun)
  62379687600, #    local_end 1977-09-25 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62379680400, #    utc_start 1977-09-25 01:00:00 (Sun)
  62396010000, #      utc_end 1978-04-02 01:00:00 (Sun)
  62379684000, #  local_start 1977-09-25 02:00:00 (Sun)
  62396013600, #    local_end 1978-04-02 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62396010000, #    utc_start 1978-04-02 01:00:00 (Sun)
  62411734800, #      utc_end 1978-10-01 01:00:00 (Sun)
  62396017200, #  local_start 1978-04-02 03:00:00 (Sun)
  62411742000, #    local_end 1978-10-01 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62411734800, #    utc_start 1978-10-01 01:00:00 (Sun)
  62427459600, #      utc_end 1979-04-01 01:00:00 (Sun)
  62411738400, #  local_start 1978-10-01 02:00:00 (Sun)
  62427463200, #    local_end 1979-04-01 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62427459600, #    utc_start 1979-04-01 01:00:00 (Sun)
  62443184400, #      utc_end 1979-09-30 01:00:00 (Sun)
  62427466800, #  local_start 1979-04-01 03:00:00 (Sun)
  62443191600, #    local_end 1979-09-30 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62443184400, #    utc_start 1979-09-30 01:00:00 (Sun)
  62459514000, #      utc_end 1980-04-06 01:00:00 (Sun)
  62443188000, #  local_start 1979-09-30 02:00:00 (Sun)
  62459517600, #    local_end 1980-04-06 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62459514000, #    utc_start 1980-04-06 01:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459521200, #  local_start 1980-04-06 03:00:00 (Sun)
  62474641200, #    local_end 1980-09-28 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474637600, #  local_start 1980-09-28 02:00:00 (Sun)
  62490362400, #    local_end 1981-03-29 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490366000, #  local_start 1981-03-29 03:00:00 (Sun)
  62506090800, #    local_end 1981-09-27 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506087200, #  local_start 1981-09-27 02:00:00 (Sun)
  62521812000, #    local_end 1982-03-28 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521815600, #  local_start 1982-03-28 03:00:00 (Sun)
  62537540400, #    local_end 1982-09-26 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537536800, #  local_start 1982-09-26 02:00:00 (Sun)
  62553261600, #    local_end 1983-03-27 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553265200, #  local_start 1983-03-27 03:00:00 (Sun)
  62568990000, #    local_end 1983-09-25 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568986400, #  local_start 1983-09-25 02:00:00 (Sun)
  62584711200, #    local_end 1984-03-25 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584714800, #  local_start 1984-03-25 03:00:00 (Sun)
  62601044400, #    local_end 1984-09-30 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601040800, #  local_start 1984-09-30 02:00:00 (Sun)
  62616765600, #    local_end 1985-03-31 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616769200, #  local_start 1985-03-31 03:00:00 (Sun)
  62632494000, #    local_end 1985-09-29 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632490400, #  local_start 1985-09-29 02:00:00 (Sun)
  62648215200, #    local_end 1986-03-30 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648218800, #  local_start 1986-03-30 03:00:00 (Sun)
  62663943600, #    local_end 1986-09-28 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663940000, #  local_start 1986-09-28 02:00:00 (Sun)
  62679664800, #    local_end 1987-03-29 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679668400, #  local_start 1987-03-29 03:00:00 (Sun)
  62695393200, #    local_end 1987-09-27 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695389600, #  local_start 1987-09-27 02:00:00 (Sun)
  62711114400, #    local_end 1988-03-27 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711118000, #  local_start 1988-03-27 03:00:00 (Sun)
  62726842800, #    local_end 1988-09-25 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726839200, #  local_start 1988-09-25 02:00:00 (Sun)
  62742564000, #    local_end 1989-03-26 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742567600, #  local_start 1989-03-26 03:00:00 (Sun)
  62758292400, #    local_end 1989-09-24 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758288800, #  local_start 1989-09-24 02:00:00 (Sun)
  62774013600, #    local_end 1990-03-25 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774017200, #  local_start 1990-03-25 03:00:00 (Sun)
  62790346800, #    local_end 1990-09-30 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790343200, #  local_start 1990-09-30 02:00:00 (Sun)
  62806068000, #    local_end 1991-03-31 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806071600, #  local_start 1991-03-31 03:00:00 (Sun)
  62821796400, #    local_end 1991-09-29 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821792800, #  local_start 1991-09-29 02:00:00 (Sun)
  62837517600, #    local_end 1992-03-29 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837521200, #  local_start 1992-03-29 03:00:00 (Sun)
  62853246000, #    local_end 1992-09-27 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853242400, #  local_start 1992-09-27 02:00:00 (Sun)
  62868967200, #    local_end 1993-03-28 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868970800, #  local_start 1993-03-28 03:00:00 (Sun)
  62884695600, #    local_end 1993-09-26 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884692000, #  local_start 1993-09-26 02:00:00 (Sun)
  62900416800, #    local_end 1994-03-27 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900420400, #  local_start 1994-03-27 03:00:00 (Sun)
  62916145200, #    local_end 1994-09-25 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916141600, #  local_start 1994-09-25 02:00:00 (Sun)
  62931866400, #    local_end 1995-03-26 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931870000, #  local_start 1995-03-26 03:00:00 (Sun)
  62947594800, #    local_end 1995-09-24 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947591200, #  local_start 1995-09-24 02:00:00 (Sun)
  62963920800, #    local_end 1996-03-31 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963924400, #  local_start 1996-03-31 03:00:00 (Sun)
  62982068400, #    local_end 1996-10-27 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982064800, #  local_start 1996-10-27 02:00:00 (Sun)
  62995370400, #    local_end 1997-03-30 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995374000, #  local_start 1997-03-30 03:00:00 (Sun)
  63013518000, #    local_end 1997-10-26 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013514400, #  local_start 1997-10-26 02:00:00 (Sun)
  63026820000, #    local_end 1998-03-29 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026823600, #  local_start 1998-03-29 03:00:00 (Sun)
  63044967600, #    local_end 1998-10-25 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044964000, #  local_start 1998-10-25 02:00:00 (Sun)
  63058269600, #    local_end 1999-03-28 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058273200, #  local_start 1999-03-28 03:00:00 (Sun)
  63077022000, #    local_end 1999-10-31 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077018400, #  local_start 1999-10-31 02:00:00 (Sun)
  63089719200, #    local_end 2000-03-26 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089722800, #  local_start 2000-03-26 03:00:00 (Sun)
  63108471600, #    local_end 2000-10-29 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108468000, #  local_start 2000-10-29 02:00:00 (Sun)
  63121168800, #    local_end 2001-03-25 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121172400, #  local_start 2001-03-25 03:00:00 (Sun)
  63139921200, #    local_end 2001-10-28 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139917600, #  local_start 2001-10-28 02:00:00 (Sun)
  63153223200, #    local_end 2002-03-31 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153226800, #  local_start 2002-03-31 03:00:00 (Sun)
  63171370800, #    local_end 2002-10-27 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171367200, #  local_start 2002-10-27 02:00:00 (Sun)
  63184672800, #    local_end 2003-03-30 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184676400, #  local_start 2003-03-30 03:00:00 (Sun)
  63202820400, #    local_end 2003-10-26 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202816800, #  local_start 2003-10-26 02:00:00 (Sun)
  63216122400, #    local_end 2004-03-28 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216126000, #  local_start 2004-03-28 03:00:00 (Sun)
  63234874800, #    local_end 2004-10-31 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234871200, #  local_start 2004-10-31 02:00:00 (Sun)
  63247572000, #    local_end 2005-03-27 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247575600, #  local_start 2005-03-27 03:00:00 (Sun)
  63266324400, #    local_end 2005-10-30 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266320800, #  local_start 2005-10-30 02:00:00 (Sun)
  63279021600, #    local_end 2006-03-26 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279025200, #  local_start 2006-03-26 03:00:00 (Sun)
  63297774000, #    local_end 2006-10-29 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297770400, #  local_start 2006-10-29 02:00:00 (Sun)
  63310471200, #    local_end 2007-03-25 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310474800, #  local_start 2007-03-25 03:00:00 (Sun)
  63329223600, #    local_end 2007-10-28 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329220000, #  local_start 2007-10-28 02:00:00 (Sun)
  63342525600, #    local_end 2008-03-30 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342529200, #  local_start 2008-03-30 03:00:00 (Sun)
  63360673200, #    local_end 2008-10-26 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360669600, #  local_start 2008-10-26 02:00:00 (Sun)
  63373975200, #    local_end 2009-03-29 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373978800, #  local_start 2009-03-29 03:00:00 (Sun)
  63392122800, #    local_end 2009-10-25 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392119200, #  local_start 2009-10-25 02:00:00 (Sun)
  63405424800, #    local_end 2010-03-28 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405428400, #  local_start 2010-03-28 03:00:00 (Sun)
  63424177200, #    local_end 2010-10-31 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424173600, #  local_start 2010-10-31 02:00:00 (Sun)
  63436874400, #    local_end 2011-03-27 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436878000, #  local_start 2011-03-27 03:00:00 (Sun)
  63455626800, #    local_end 2011-10-30 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455623200, #  local_start 2011-10-30 02:00:00 (Sun)
  63468324000, #    local_end 2012-03-25 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468327600, #  local_start 2012-03-25 03:00:00 (Sun)
  63487076400, #    local_end 2012-10-28 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487072800, #  local_start 2012-10-28 02:00:00 (Sun)
  63500378400, #    local_end 2013-03-31 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500382000, #  local_start 2013-03-31 03:00:00 (Sun)
  63518526000, #    local_end 2013-10-27 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518522400, #  local_start 2013-10-27 02:00:00 (Sun)
  63531828000, #    local_end 2014-03-30 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531831600, #  local_start 2014-03-30 03:00:00 (Sun)
  63549975600, #    local_end 2014-10-26 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549972000, #  local_start 2014-10-26 02:00:00 (Sun)
  63563277600, #    local_end 2015-03-29 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563281200, #  local_start 2015-03-29 03:00:00 (Sun)
  63581425200, #    local_end 2015-10-25 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581421600, #  local_start 2015-10-25 02:00:00 (Sun)
  63594727200, #    local_end 2016-03-27 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594730800, #  local_start 2016-03-27 03:00:00 (Sun)
  63613479600, #    local_end 2016-10-30 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613476000, #  local_start 2016-10-30 02:00:00 (Sun)
  63626176800, #    local_end 2017-03-26 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626180400, #  local_start 2017-03-26 03:00:00 (Sun)
  63644929200, #    local_end 2017-10-29 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644925600, #  local_start 2017-10-29 02:00:00 (Sun)
  63657626400, #    local_end 2018-03-25 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657630000, #  local_start 2018-03-25 03:00:00 (Sun)
  63676378800, #    local_end 2018-10-28 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676375200, #  local_start 2018-10-28 02:00:00 (Sun)
  63689680800, #    local_end 2019-03-31 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689684400, #  local_start 2019-03-31 03:00:00 (Sun)
  63707828400, #    local_end 2019-10-27 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707824800, #  local_start 2019-10-27 02:00:00 (Sun)
  63721130400, #    local_end 2020-03-29 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721134000, #  local_start 2020-03-29 03:00:00 (Sun)
  63739278000, #    local_end 2020-10-25 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739274400, #  local_start 2020-10-25 02:00:00 (Sun)
  63752580000, #    local_end 2021-03-28 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752583600, #  local_start 2021-03-28 03:00:00 (Sun)
  63771332400, #    local_end 2021-10-31 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771328800, #  local_start 2021-10-31 02:00:00 (Sun)
  63784029600, #    local_end 2022-03-27 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784033200, #  local_start 2022-03-27 03:00:00 (Sun)
  63802782000, #    local_end 2022-10-30 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802778400, #  local_start 2022-10-30 02:00:00 (Sun)
  63815479200, #    local_end 2023-03-26 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815482800, #  local_start 2023-03-26 03:00:00 (Sun)
  63834231600, #    local_end 2023-10-29 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834228000, #  local_start 2023-10-29 02:00:00 (Sun)
  63847533600, #    local_end 2024-03-31 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847537200, #  local_start 2024-03-31 03:00:00 (Sun)
  63865681200, #    local_end 2024-10-27 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865677600, #  local_start 2024-10-27 02:00:00 (Sun)
  63878983200, #    local_end 2025-03-30 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878986800, #  local_start 2025-03-30 03:00:00 (Sun)
  63897130800, #    local_end 2025-10-26 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897127200, #  local_start 2025-10-26 02:00:00 (Sun)
  63910432800, #    local_end 2026-03-29 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910436400, #  local_start 2026-03-29 03:00:00 (Sun)
  63928580400, #    local_end 2026-10-25 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928576800, #  local_start 2026-10-25 02:00:00 (Sun)
  63941882400, #    local_end 2027-03-28 02:00:00 (Sun)
  3600,
  0,
  'MET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941886000, #  local_start 2027-03-28 03:00:00 (Sun)
  63960634800, #    local_end 2027-10-31 03:00:00 (Sun)
  7200,
  1,
  'MEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {58}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 3600 }
  
  my $last_observance = bless( {
    'format' => 'ME%sT',
    'gmtoff' => '1:00',
    'local_start_datetime' => {},
    'offset_from_std' => 0,
    'offset_from_utc' => 3600,
    'until' => [],
    'utc_start_datetime' => {}
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00s',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'C-Eur',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00s',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'C-Eur',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_MET

    $main::fatpacked{"DateTime/TimeZone/MST.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_MST';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::MST;
  $DateTime::TimeZone::MST::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::MST::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  DateTime::TimeZone::INFINITY, #      utc_end
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  DateTime::TimeZone::INFINITY, #    local_end
  -25200,
  0,
  'MST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_MST

    $main::fatpacked{"DateTime/TimeZone/MST7MDT.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_MST7MDT';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::MST7MDT;
  $DateTime::TimeZone::MST7MDT::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::MST7MDT::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60502410000, #      utc_end 1918-03-31 09:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60502410000, #    utc_start 1918-03-31 09:00:00 (Sun)
  60520550400, #      utc_end 1918-10-27 08:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60520550400, #    utc_start 1918-10-27 08:00:00 (Sun)
  60533859600, #      utc_end 1919-03-30 09:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  60533859600, #    utc_start 1919-03-30 09:00:00 (Sun)
  60552000000, #      utc_end 1919-10-26 08:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  60552000000, #    utc_start 1919-10-26 08:00:00 (Sun)
  61255472400, #      utc_end 1942-02-09 09:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -25200,
  0,
  'MST',
      ],
      [
  61255472400, #    utc_start 1942-02-09 09:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366266000, #    local_end 1945-08-14 17:00:00 (Tue)
  -21600,
  1,
  'MWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370294400, #      utc_end 1945-09-30 08:00:00 (Sun)
  61366266000, #  local_start 1945-08-14 17:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -21600,
  1,
  'MPT',
      ],
      [
  61370294400, #    utc_start 1945-09-30 08:00:00 (Sun)
  62051302800, #      utc_end 1967-04-30 09:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62051302800, #    utc_start 1967-04-30 09:00:00 (Sun)
  62067024000, #      utc_end 1967-10-29 08:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62067024000, #    utc_start 1967-10-29 08:00:00 (Sun)
  62082752400, #      utc_end 1968-04-28 09:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62082752400, #    utc_start 1968-04-28 09:00:00 (Sun)
  62098473600, #      utc_end 1968-10-27 08:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62098473600, #    utc_start 1968-10-27 08:00:00 (Sun)
  62114202000, #      utc_end 1969-04-27 09:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62114202000, #    utc_start 1969-04-27 09:00:00 (Sun)
  62129923200, #      utc_end 1969-10-26 08:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62129923200, #    utc_start 1969-10-26 08:00:00 (Sun)
  62145651600, #      utc_end 1970-04-26 09:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62145651600, #    utc_start 1970-04-26 09:00:00 (Sun)
  62161372800, #      utc_end 1970-10-25 08:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62161372800, #    utc_start 1970-10-25 08:00:00 (Sun)
  62177101200, #      utc_end 1971-04-25 09:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62177101200, #    utc_start 1971-04-25 09:00:00 (Sun)
  62193427200, #      utc_end 1971-10-31 08:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62193427200, #    utc_start 1971-10-31 08:00:00 (Sun)
  62209155600, #      utc_end 1972-04-30 09:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62209155600, #    utc_start 1972-04-30 09:00:00 (Sun)
  62224876800, #      utc_end 1972-10-29 08:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62224876800, #    utc_start 1972-10-29 08:00:00 (Sun)
  62240605200, #      utc_end 1973-04-29 09:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62240605200, #    utc_start 1973-04-29 09:00:00 (Sun)
  62256326400, #      utc_end 1973-10-28 08:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62256326400, #    utc_start 1973-10-28 08:00:00 (Sun)
  62262378000, #      utc_end 1974-01-06 09:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62262378000, #    utc_start 1974-01-06 09:00:00 (Sun)
  62287776000, #      utc_end 1974-10-27 08:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62287776000, #    utc_start 1974-10-27 08:00:00 (Sun)
  62298061200, #      utc_end 1975-02-23 09:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62298061200, #    utc_start 1975-02-23 09:00:00 (Sun)
  62319225600, #      utc_end 1975-10-26 08:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62319225600, #    utc_start 1975-10-26 08:00:00 (Sun)
  62334954000, #      utc_end 1976-04-25 09:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62334954000, #    utc_start 1976-04-25 09:00:00 (Sun)
  62351280000, #      utc_end 1976-10-31 08:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62351280000, #    utc_start 1976-10-31 08:00:00 (Sun)
  62366403600, #      utc_end 1977-04-24 09:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62366403600, #    utc_start 1977-04-24 09:00:00 (Sun)
  62382729600, #      utc_end 1977-10-30 08:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62382729600, #    utc_start 1977-10-30 08:00:00 (Sun)
  62398458000, #      utc_end 1978-04-30 09:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62398458000, #    utc_start 1978-04-30 09:00:00 (Sun)
  62414179200, #      utc_end 1978-10-29 08:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62414179200, #    utc_start 1978-10-29 08:00:00 (Sun)
  62429907600, #      utc_end 1979-04-29 09:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62429907600, #    utc_start 1979-04-29 09:00:00 (Sun)
  62445628800, #      utc_end 1979-10-28 08:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62445628800, #    utc_start 1979-10-28 08:00:00 (Sun)
  62461357200, #      utc_end 1980-04-27 09:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62461357200, #    utc_start 1980-04-27 09:00:00 (Sun)
  62477078400, #      utc_end 1980-10-26 08:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62477078400, #    utc_start 1980-10-26 08:00:00 (Sun)
  62492806800, #      utc_end 1981-04-26 09:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62492806800, #    utc_start 1981-04-26 09:00:00 (Sun)
  62508528000, #      utc_end 1981-10-25 08:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62508528000, #    utc_start 1981-10-25 08:00:00 (Sun)
  62524256400, #      utc_end 1982-04-25 09:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62524256400, #    utc_start 1982-04-25 09:00:00 (Sun)
  62540582400, #      utc_end 1982-10-31 08:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62540582400, #    utc_start 1982-10-31 08:00:00 (Sun)
  62555706000, #      utc_end 1983-04-24 09:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62555706000, #    utc_start 1983-04-24 09:00:00 (Sun)
  62572032000, #      utc_end 1983-10-30 08:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62572032000, #    utc_start 1983-10-30 08:00:00 (Sun)
  62587760400, #      utc_end 1984-04-29 09:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62587760400, #    utc_start 1984-04-29 09:00:00 (Sun)
  62603481600, #      utc_end 1984-10-28 08:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62603481600, #    utc_start 1984-10-28 08:00:00 (Sun)
  62619210000, #      utc_end 1985-04-28 09:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62619210000, #    utc_start 1985-04-28 09:00:00 (Sun)
  62634931200, #      utc_end 1985-10-27 08:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62634931200, #    utc_start 1985-10-27 08:00:00 (Sun)
  62650659600, #      utc_end 1986-04-27 09:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62650659600, #    utc_start 1986-04-27 09:00:00 (Sun)
  62666380800, #      utc_end 1986-10-26 08:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62666380800, #    utc_start 1986-10-26 08:00:00 (Sun)
  62680294800, #      utc_end 1987-04-05 09:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62680294800, #    utc_start 1987-04-05 09:00:00 (Sun)
  62697830400, #      utc_end 1987-10-25 08:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62697830400, #    utc_start 1987-10-25 08:00:00 (Sun)
  62711744400, #      utc_end 1988-04-03 09:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62711744400, #    utc_start 1988-04-03 09:00:00 (Sun)
  62729884800, #      utc_end 1988-10-30 08:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62729884800, #    utc_start 1988-10-30 08:00:00 (Sun)
  62743194000, #      utc_end 1989-04-02 09:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62743194000, #    utc_start 1989-04-02 09:00:00 (Sun)
  62761334400, #      utc_end 1989-10-29 08:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62761334400, #    utc_start 1989-10-29 08:00:00 (Sun)
  62774643600, #      utc_end 1990-04-01 09:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62774643600, #    utc_start 1990-04-01 09:00:00 (Sun)
  62792784000, #      utc_end 1990-10-28 08:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62792784000, #    utc_start 1990-10-28 08:00:00 (Sun)
  62806698000, #      utc_end 1991-04-07 09:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62806698000, #    utc_start 1991-04-07 09:00:00 (Sun)
  62824233600, #      utc_end 1991-10-27 08:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62824233600, #    utc_start 1991-10-27 08:00:00 (Sun)
  62838147600, #      utc_end 1992-04-05 09:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62838147600, #    utc_start 1992-04-05 09:00:00 (Sun)
  62855683200, #      utc_end 1992-10-25 08:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62855683200, #    utc_start 1992-10-25 08:00:00 (Sun)
  62869597200, #      utc_end 1993-04-04 09:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62869597200, #    utc_start 1993-04-04 09:00:00 (Sun)
  62887737600, #      utc_end 1993-10-31 08:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62887737600, #    utc_start 1993-10-31 08:00:00 (Sun)
  62901046800, #      utc_end 1994-04-03 09:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62901046800, #    utc_start 1994-04-03 09:00:00 (Sun)
  62919187200, #      utc_end 1994-10-30 08:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62919187200, #    utc_start 1994-10-30 08:00:00 (Sun)
  62932496400, #      utc_end 1995-04-02 09:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62932496400, #    utc_start 1995-04-02 09:00:00 (Sun)
  62950636800, #      utc_end 1995-10-29 08:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62950636800, #    utc_start 1995-10-29 08:00:00 (Sun)
  62964550800, #      utc_end 1996-04-07 09:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62964550800, #    utc_start 1996-04-07 09:00:00 (Sun)
  62982086400, #      utc_end 1996-10-27 08:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  62982086400, #    utc_start 1996-10-27 08:00:00 (Sun)
  62996000400, #      utc_end 1997-04-06 09:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  62996000400, #    utc_start 1997-04-06 09:00:00 (Sun)
  63013536000, #      utc_end 1997-10-26 08:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63013536000, #    utc_start 1997-10-26 08:00:00 (Sun)
  63027450000, #      utc_end 1998-04-05 09:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63027450000, #    utc_start 1998-04-05 09:00:00 (Sun)
  63044985600, #      utc_end 1998-10-25 08:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63044985600, #    utc_start 1998-10-25 08:00:00 (Sun)
  63058899600, #      utc_end 1999-04-04 09:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63058899600, #    utc_start 1999-04-04 09:00:00 (Sun)
  63077040000, #      utc_end 1999-10-31 08:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63077040000, #    utc_start 1999-10-31 08:00:00 (Sun)
  63090349200, #      utc_end 2000-04-02 09:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63090349200, #    utc_start 2000-04-02 09:00:00 (Sun)
  63108489600, #      utc_end 2000-10-29 08:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63108489600, #    utc_start 2000-10-29 08:00:00 (Sun)
  63121798800, #      utc_end 2001-04-01 09:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63121798800, #    utc_start 2001-04-01 09:00:00 (Sun)
  63139939200, #      utc_end 2001-10-28 08:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63139939200, #    utc_start 2001-10-28 08:00:00 (Sun)
  63153853200, #      utc_end 2002-04-07 09:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63153853200, #    utc_start 2002-04-07 09:00:00 (Sun)
  63171388800, #      utc_end 2002-10-27 08:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63171388800, #    utc_start 2002-10-27 08:00:00 (Sun)
  63185302800, #      utc_end 2003-04-06 09:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63185302800, #    utc_start 2003-04-06 09:00:00 (Sun)
  63202838400, #      utc_end 2003-10-26 08:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63202838400, #    utc_start 2003-10-26 08:00:00 (Sun)
  63216752400, #      utc_end 2004-04-04 09:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63216752400, #    utc_start 2004-04-04 09:00:00 (Sun)
  63234892800, #      utc_end 2004-10-31 08:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63234892800, #    utc_start 2004-10-31 08:00:00 (Sun)
  63248202000, #      utc_end 2005-04-03 09:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63248202000, #    utc_start 2005-04-03 09:00:00 (Sun)
  63266342400, #      utc_end 2005-10-30 08:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63266342400, #    utc_start 2005-10-30 08:00:00 (Sun)
  63279651600, #      utc_end 2006-04-02 09:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63279651600, #    utc_start 2006-04-02 09:00:00 (Sun)
  63297792000, #      utc_end 2006-10-29 08:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63297792000, #    utc_start 2006-10-29 08:00:00 (Sun)
  63309286800, #      utc_end 2007-03-11 09:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63309286800, #    utc_start 2007-03-11 09:00:00 (Sun)
  63329846400, #      utc_end 2007-11-04 08:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63329846400, #    utc_start 2007-11-04 08:00:00 (Sun)
  63340736400, #      utc_end 2008-03-09 09:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63340736400, #    utc_start 2008-03-09 09:00:00 (Sun)
  63361296000, #      utc_end 2008-11-02 08:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63361296000, #    utc_start 2008-11-02 08:00:00 (Sun)
  63372186000, #      utc_end 2009-03-08 09:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63372186000, #    utc_start 2009-03-08 09:00:00 (Sun)
  63392745600, #      utc_end 2009-11-01 08:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63392745600, #    utc_start 2009-11-01 08:00:00 (Sun)
  63404240400, #      utc_end 2010-03-14 09:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63404240400, #    utc_start 2010-03-14 09:00:00 (Sun)
  63424800000, #      utc_end 2010-11-07 08:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63424800000, #    utc_start 2010-11-07 08:00:00 (Sun)
  63435690000, #      utc_end 2011-03-13 09:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63435690000, #    utc_start 2011-03-13 09:00:00 (Sun)
  63456249600, #      utc_end 2011-11-06 08:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63456249600, #    utc_start 2011-11-06 08:00:00 (Sun)
  63467139600, #      utc_end 2012-03-11 09:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63467139600, #    utc_start 2012-03-11 09:00:00 (Sun)
  63487699200, #      utc_end 2012-11-04 08:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63487699200, #    utc_start 2012-11-04 08:00:00 (Sun)
  63498589200, #      utc_end 2013-03-10 09:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63498589200, #    utc_start 2013-03-10 09:00:00 (Sun)
  63519148800, #      utc_end 2013-11-03 08:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63519148800, #    utc_start 2013-11-03 08:00:00 (Sun)
  63530038800, #      utc_end 2014-03-09 09:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63530038800, #    utc_start 2014-03-09 09:00:00 (Sun)
  63550598400, #      utc_end 2014-11-02 08:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63550598400, #    utc_start 2014-11-02 08:00:00 (Sun)
  63561488400, #      utc_end 2015-03-08 09:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63561488400, #    utc_start 2015-03-08 09:00:00 (Sun)
  63582048000, #      utc_end 2015-11-01 08:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63582048000, #    utc_start 2015-11-01 08:00:00 (Sun)
  63593542800, #      utc_end 2016-03-13 09:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63593542800, #    utc_start 2016-03-13 09:00:00 (Sun)
  63614102400, #      utc_end 2016-11-06 08:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63614102400, #    utc_start 2016-11-06 08:00:00 (Sun)
  63624992400, #      utc_end 2017-03-12 09:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63624992400, #    utc_start 2017-03-12 09:00:00 (Sun)
  63645552000, #      utc_end 2017-11-05 08:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63645552000, #    utc_start 2017-11-05 08:00:00 (Sun)
  63656442000, #      utc_end 2018-03-11 09:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63656442000, #    utc_start 2018-03-11 09:00:00 (Sun)
  63677001600, #      utc_end 2018-11-04 08:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63677001600, #    utc_start 2018-11-04 08:00:00 (Sun)
  63687891600, #      utc_end 2019-03-10 09:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63687891600, #    utc_start 2019-03-10 09:00:00 (Sun)
  63708451200, #      utc_end 2019-11-03 08:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63708451200, #    utc_start 2019-11-03 08:00:00 (Sun)
  63719341200, #      utc_end 2020-03-08 09:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63719341200, #    utc_start 2020-03-08 09:00:00 (Sun)
  63739900800, #      utc_end 2020-11-01 08:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63739900800, #    utc_start 2020-11-01 08:00:00 (Sun)
  63751395600, #      utc_end 2021-03-14 09:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63751395600, #    utc_start 2021-03-14 09:00:00 (Sun)
  63771955200, #      utc_end 2021-11-07 08:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63771955200, #    utc_start 2021-11-07 08:00:00 (Sun)
  63782845200, #      utc_end 2022-03-13 09:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63782845200, #    utc_start 2022-03-13 09:00:00 (Sun)
  63803404800, #      utc_end 2022-11-06 08:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63803404800, #    utc_start 2022-11-06 08:00:00 (Sun)
  63814294800, #      utc_end 2023-03-12 09:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63814294800, #    utc_start 2023-03-12 09:00:00 (Sun)
  63834854400, #      utc_end 2023-11-05 08:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63834854400, #    utc_start 2023-11-05 08:00:00 (Sun)
  63845744400, #      utc_end 2024-03-10 09:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63845744400, #    utc_start 2024-03-10 09:00:00 (Sun)
  63866304000, #      utc_end 2024-11-03 08:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63866304000, #    utc_start 2024-11-03 08:00:00 (Sun)
  63877194000, #      utc_end 2025-03-09 09:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63877194000, #    utc_start 2025-03-09 09:00:00 (Sun)
  63897753600, #      utc_end 2025-11-02 08:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63897753600, #    utc_start 2025-11-02 08:00:00 (Sun)
  63908643600, #      utc_end 2026-03-08 09:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63908643600, #    utc_start 2026-03-08 09:00:00 (Sun)
  63929203200, #      utc_end 2026-11-01 08:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
      [
  63929203200, #    utc_start 2026-11-01 08:00:00 (Sun)
  63940698000, #      utc_end 2027-03-14 09:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -25200,
  0,
  'MST',
      ],
      [
  63940698000, #    utc_start 2027-03-14 09:00:00 (Sun)
  63961257600, #      utc_end 2027-11-07 08:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -21600,
  1,
  'MDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {65}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -25200 }
  
  my $last_observance = bless( {
    'format' => 'M%sT',
    'gmtoff' => '-7:00',
    'local_start_datetime' => {},
    'offset_from_std' => 0,
    'offset_from_utc' => -25200,
    'until' => [],
    'utc_start_datetime' => {}
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_MST7MDT

    $main::fatpacked{"DateTime/TimeZone/OffsetOnly.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_OFFSETONLY';
  package DateTime::TimeZone::OffsetOnly;
  $DateTime::TimeZone::OffsetOnly::VERSION = '2.01';
  use strict;
  use warnings;
  
  use parent 'DateTime::TimeZone';
  
  use DateTime::TimeZone::UTC;
  use Params::Validate qw( validate SCALAR );
  
  sub new {
      my $class = shift;
      my %p     = validate(
          @_, {
              offset => { type => SCALAR },
          }
      );
  
      my $offset = DateTime::TimeZone::offset_as_seconds( $p{offset} );
  
      die "Invalid offset: $p{offset}\n" unless defined $offset;
  
      return DateTime::TimeZone::UTC->new unless $offset;
  
      my $self = {
          name   => DateTime::TimeZone::offset_as_string($offset),
          offset => $offset,
      };
  
      return bless $self, $class;
  }
  
  sub is_dst_for_datetime {0}
  
  sub offset_for_datetime       { $_[0]->{offset} }
  sub offset_for_local_datetime { $_[0]->{offset} }
  
  sub is_utc {0}
  
  sub short_name_for_datetime { $_[0]->name }
  
  sub category {undef}
  
  sub STORABLE_freeze {
      my $self = shift;
  
      return $self->name;
  }
  
  sub STORABLE_thaw {
      my $self = shift;
      shift;
      my $serialized = shift;
  
      my $class = ref $self || $self;
  
      my $obj;
      if ( $class->isa(__PACKAGE__) ) {
          $obj = __PACKAGE__->new( offset => $serialized );
      }
      else {
          $obj = $class->new( offset => $serialized );
      }
  
      %$self = %$obj;
  
      return $self;
  }
  
  1;
  
  # ABSTRACT: A DateTime::TimeZone object that just contains an offset
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::TimeZone::OffsetOnly - A DateTime::TimeZone object that just contains an offset
  
  =head1 VERSION
  
  version 2.01
  
  =head1 SYNOPSIS
  
    my $offset_tz = DateTime::TimeZone->new( name => '-0300' );
  
  =head1 DESCRIPTION
  
  This class is used to provide the DateTime::TimeZone API needed by
  DateTime.pm, but with a fixed offset.  An object in this class always
  returns the same offset as was given in its constructor, regardless of
  the date.
  
  =head1 USAGE
  
  This class has the same methods as a real time zone object, but the
  C<category()> method returns undef.
  
  =head2 DateTime::TimeZone::OffsetOnly->new ( offset => $offset )
  
  The value given to the offset parameter must be a string such as
  "+0300".  Strings will be converted into numbers by the
  C<DateTime::TimeZone::offset_as_seconds()> function.
  
  =head2 $tz->offset_for_datetime( $datetime )
  
  No matter what date is given, the offset provided to the constructor
  is always used.
  
  =head2 $tz->name()
  
  =head2 $tz->short_name_for_datetime()
  
  Both of these methods return the offset in string form.
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime-TimeZone>
  (or L<bug-datetime-timezone@rt.cpan.org|mailto:bug-datetime-timezone@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2016 by Dave Rolsky.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATETIME_TIMEZONE_OFFSETONLY

    $main::fatpacked{"DateTime/TimeZone/OlsonDB.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_OLSONDB';
  package DateTime::TimeZone::OlsonDB;
  $DateTime::TimeZone::OlsonDB::VERSION = '2.01';
  use strict;
  use warnings;
  
  use vars qw( %MONTHS %DAYS $PLUS_ONE_DAY_DUR $MINUS_ONE_DAY_DUR );
  
  use DateTime::TimeZone::OlsonDB::Rule;
  use DateTime::TimeZone::OlsonDB::Zone;
  use Params::Validate qw( validate SCALAR );
  
  my $x = 1;
  %MONTHS = map { $_ => $x++ } qw( Jan Feb Mar Apr May Jun
      Jul Aug Sep Oct Nov Dec);
  
  $x = 1;
  %DAYS = map { $_ => $x++ } qw( Mon Tue Wed Thu Fri Sat Sun );
  
  $PLUS_ONE_DAY_DUR  = DateTime::Duration->new( days => 1 );
  $MINUS_ONE_DAY_DUR = DateTime::Duration->new( days => -1 );
  
  sub new {
      my $class = shift;
  
      return bless {
          rules => {},
          zones => {},
          links => {},
      }, $class;
  }
  
  sub parse_file {
      my $self = shift;
      my $file = shift;
  
      open my $fh, '<', $file
          or die "Cannot read $file: $!";
  
      while (<$fh>) {
          chomp;
          $self->_parse_line($_);
      }
  
      close $fh or die $!;
  }
  
  sub _parse_line {
      my $self = shift;
      my $line = shift;
  
      return if $line =~ /^\s+$/;
      return if $line =~ /^#/;
  
      # remove any comments at the end of the line
      $line =~ s/\s*#.+$//;
  
      if ( $self->{in_zone} && $line =~ /^[ \t]/ ) {
          $self->_parse_zone( $line, $self->{in_zone} );
          return;
      }
  
      foreach (qw( Rule Zone Link )) {
          if ( substr( $line, 0, 4 ) eq $_ ) {
              my $m = '_parse_' . lc $_;
              $self->$m($line);
          }
      }
  }
  
  ## no critic (Subroutines::ProhibitUnusedPrivateSubroutines)
  sub _parse_rule {
      my $self = shift;
      my $rule = shift;
  
      my @items = split /\s+/, $rule, 10;
  
      shift @items;
      my $name = shift @items;
  
      my %rule;
      @rule{qw( from to type in on at save letter )} = @items;
      delete $rule{letter} if $rule{letter} eq '-';
  
      # As of the 2003a data, there are no rules with a type set
      delete $rule{type} if $rule{type} eq '-';
  
      push @{ $self->{rules}{$name} },
          DateTime::TimeZone::OlsonDB::Rule->new( name => $name, %rule );
  
      undef $self->{in_zone};
  }
  
  sub _parse_zone {
      my $self = shift;
      my $zone = shift;
      my $name = shift;
  
      my $expect = $name ? 5 : 6;
      my @items = grep { defined && length } split /\s+/, $zone, $expect;
  
      my %obs;
      unless ($name) {
          shift @items;    # remove "Zone"
          $name = shift @items;
      }
  
      @obs{qw( gmtoff rules format until )} = @items;
  
      if ( $obs{rules} =~ /\d\d?:\d\d/ ) {
          $obs{offset_from_std} = delete $obs{rules};
      }
      else {
          delete $obs{rules} if $obs{rules} eq '-';
      }
  
      delete $obs{until} unless defined $obs{until};
  
      push @{ $self->{zones}{$name} }, \%obs;
  
      $self->{in_zone} = $name;
  }
  
  sub _parse_link {
      my $self = shift;
      my $link = shift;
  
      my @items = split /\s+/, $link, 3;
  
      $self->{links}{ $items[2] } = $items[1];
  
      undef $self->{in_zone};
  }
  ## use critic
  
  sub links { %{ $_[0]->{links} } }
  
  sub zone_names { keys %{ $_[0]->{zones} } }
  
  sub zone {
      my $self = shift;
      my $name = shift;
  
      die "Invalid zone name $name"
          unless exists $self->{zones}{$name};
  
      return DateTime::TimeZone::OlsonDB::Zone->new(
          name        => $name,
          observances => $self->{zones}{$name},
          olson_db    => $self,
      );
  }
  
  sub expanded_zone {
      my $self = shift;
      my %p    = validate(
          @_, {
              name           => { type => SCALAR },
              expand_to_year => {
                  type    => SCALAR,
                  default => (localtime)[5] + 1910
              },
          }
      );
  
      my $zone = $self->zone( $p{name} );
  
      $zone->expand_observances( $self, $p{expand_to_year} );
  
      return $zone;
  }
  
  sub rules_by_name {
      my $self = shift;
      my $name = shift;
  
      return unless defined $name;
  
      die "Invalid rule name $name"
          unless exists $self->{rules}{$name};
  
      return @{ $self->{rules}{$name} };
  }
  
  sub parse_day_spec {
      my ( $day, $month, $year ) = @_;
  
      return $day if $day =~ /^\d+$/;
  
      if ( $day =~ /^last(\w\w\w)$/ ) {
          my $dow = $DAYS{$1};
  
          my $last_day = DateTime->last_day_of_month(
              year      => $year,
              month     => $month,
              time_zone => 'floating',
          );
  
          my $dt = DateTime->new(
              year      => $year,
              month     => $month,
              day       => $last_day->day,
              time_zone => 'floating',
          );
  
          while ( $dt->day_of_week != $dow ) {
              $dt -= $PLUS_ONE_DAY_DUR;
          }
  
          return $dt->day;
      }
      elsif ( $day =~ /^(\w\w\w)([><])=(\d\d?)$/ ) {
          my $dow = $DAYS{$1};
  
          my $dt = DateTime->new(
              year      => $year,
              month     => $month,
              day       => $3,
              time_zone => 'floating',
          );
  
          my $dur = $2 eq '<' ? $MINUS_ONE_DAY_DUR : $PLUS_ONE_DAY_DUR;
  
          while ( $dt->day_of_week != $dow ) {
              $dt += $dur;
          }
  
          return $dt->day;
      }
      else {
          die "Invalid on spec for rule: $day\n";
      }
  }
  
  sub utc_datetime_for_time_spec {
      my %p = validate(
          @_, {
              spec            => { type => SCALAR },
              year            => { type => SCALAR },
              month           => { type => SCALAR },
              day             => { type => SCALAR },
              offset_from_utc => { type => SCALAR },
              offset_from_std => { type => SCALAR },
          },
      );
  
      # 'w'all - ignore it, because that's the default
      $p{spec} =~ s/w$//;
  
      # 'g'reenwich, 'u'tc, or 'z'ulu
      my $is_utc = $p{spec} =~ s/[guz]$//;
  
      # 's'tandard time - ignore DS offset
      my $is_std = $p{spec} =~ s/s$//;
  
      ## no critic (NamingConventions::ProhibitAmbiguousNames)
      my ( $hour, $minute, $second ) = split /:/, $p{spec};
      $minute = 0 unless defined $minute;
      $second = 0 unless defined $second;
  
      my $add_day = 0;
      if ( $hour == 24 ) {
          $hour    = 0;
          $add_day = 1;
      }
  
      my $utc;
      if ($is_utc) {
          $utc = DateTime->new(
              year      => $p{year},
              month     => $p{month},
              day       => $p{day},
              hour      => $hour,
              minute    => $minute,
              second    => $second,
              time_zone => 'floating',
          );
      }
      else {
          my $local = DateTime->new(
              year      => $p{year},
              month     => $p{month},
              day       => $p{day},
              hour      => $hour,
              minute    => $minute,
              second    => $second,
              time_zone => 'floating',
          );
  
          $p{offset_from_std} = 0 if $is_std;
  
          my $dur = DateTime::Duration->new(
              seconds => $p{offset_from_utc} + $p{offset_from_std} );
  
          $utc = $local - $dur;
      }
  
      $utc->add( days => 1 ) if $add_day;
  
      return $utc;
  }
  
  1;
  
  # ABSTRACT: An object to represent an Olson time zone database
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::TimeZone::OlsonDB - An object to represent an Olson time zone database
  
  =head1 VERSION
  
  version 2.01
  
  =head1 SYNOPSIS
  
    none yet
  
  =head1 DESCRIPTION
  
  This module parses the Olson database time zone definition files and
  creates various objects representing time zone data.
  
  Each time zone is broken down into several parts.  The first piece is
  an observance, which is an offset from UTC and an abbreviation.  A
  single zone may contain many observances, reflecting historical
  changes in that time zone over time.  An observance may also refer to
  a set of rules.
  
  Rules are named, and may apply to many different zones.  For example,
  the "US" rules apply to most of the time zones in the US,
  unsurprisingly.  Rules are made of an offset from standard time and a
  definition of when that offset changes.  Changes can be a one time
  thing, or they can recur at regular times through a span of years.
  
  Each rule may have an associated letter, which is used to generate an
  abbreviated name for the time zone, along with the offset's
  abbreviation.  For example, if the offset's abbreviation is "C%sT",
  and the a rule specifies the letter "S", then the abbreviation when
  that rule is in effect is "CST".
  
  =head1 USAGE
  
  Not yet documented.  This stuff is a mess.
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime-TimeZone>
  (or L<bug-datetime-timezone@rt.cpan.org|mailto:bug-datetime-timezone@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2016 by Dave Rolsky.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATETIME_TIMEZONE_OLSONDB

    $main::fatpacked{"DateTime/TimeZone/OlsonDB/Change.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_OLSONDB_CHANGE';
  package DateTime::TimeZone::OlsonDB::Change;
  $DateTime::TimeZone::OlsonDB::Change::VERSION = '2.01';
  use strict;
  use warnings;
  
  use Params::Validate qw( validate SCALAR UNDEF OBJECT );
  
  sub new {
      my $class = shift;
      my %p     = validate(
          @_, {
              utc_start_datetime   => { type => UNDEF | OBJECT },
              local_start_datetime => { type => UNDEF | OBJECT },
              short_name           => { type => SCALAR },
              observance           => { type => OBJECT },
              rule                 => { type => OBJECT, default => undef },
              type => {
                  type  => SCALAR,
                  regex => qr/^(?:observance|rule)$/
              },
          }
      );
  
      # These are almost always mutually exclusive, except when adding
      # an observance change and the last rule has no offset, but the
      # new observance has an anonymous rule.  In that case, prefer the
      # offset from std defined in the observance to that in the
      # previous rule (what a mess!).
      if ( $p{type} eq 'observance' ) {
          $p{offset_from_std} = $p{rule}->offset_from_std if defined $p{rule};
          $p{offset_from_std} = $p{observance}->offset_from_std
              if $p{observance}->offset_from_std;
          $p{offset_from_std} ||= 0;
      }
      else {
          $p{offset_from_std} = $p{observance}->offset_from_std;
          $p{offset_from_std} = $p{rule}->offset_from_std if defined $p{rule};
      }
  
      $p{offset_from_utc} = $p{observance}->offset_from_utc;
  
      $p{is_dst} = 0;
      $p{is_dst} = 1 if $p{rule} && $p{rule}->offset_from_std;
      $p{is_dst} = 1 if $p{observance}->offset_from_std;
  
      if ( $p{short_name} =~ m{([\-\+\w]+)/([\-\+\w]+)} ) {
          $p{short_name} = $p{is_dst} ? $2 : $1;
      }
  
      return bless \%p, $class;
  }
  
  sub utc_start_datetime   { $_[0]->{utc_start_datetime} }
  sub local_start_datetime { $_[0]->{local_start_datetime} }
  sub short_name           { $_[0]->{short_name} }
  sub is_dst               { $_[0]->{is_dst} }
  sub observance           { $_[0]->{observance} }
  sub rule                 { $_[0]->{rule} }
  sub offset_from_utc      { $_[0]->{offset_from_utc} }
  sub offset_from_std      { $_[0]->{offset_from_std} }
  sub total_offset         { $_[0]->offset_from_utc + $_[0]->offset_from_std }
  
  sub two_changes_as_span {
      my ( $c1, $c2 ) = @_;
  
      my ( $utc_start, $local_start );
  
      if ( defined $c1->utc_start_datetime ) {
          $utc_start   = $c1->utc_start_datetime->utc_rd_as_seconds;
          $local_start = $c1->local_start_datetime->utc_rd_as_seconds;
      }
      else {
          $utc_start = $local_start = '-inf';
      }
  
      my $utc_end   = $c2->utc_start_datetime->utc_rd_as_seconds;
      my $local_end = $utc_end + $c1->total_offset;
  
      return {
          utc_start   => $utc_start,
          utc_end     => $utc_end,
          local_start => $local_start,
          local_end   => $local_end,
          short_name  => $c1->short_name,
          offset      => $c1->total_offset,
          is_dst      => $c1->is_dst,
      };
  }
  
  ## no critic (Subroutines::ProhibitUnusedPrivateSubroutines, InputOutput::RequireCheckedSyscalls)
  sub _debug_output {
      my $self = shift;
  
      my $obs = $self->observance;
  
      if ( $self->utc_start_datetime ) {
          print ' UTC:        ', $self->utc_start_datetime->datetime,   "\n";
          print ' Local:      ', $self->local_start_datetime->datetime, "\n";
      }
      else {
          print " First change (starts at -inf)\n";
      }
  
      print ' Short name: ', $self->short_name,     "\n";
      print ' UTC offset: ', $obs->offset_from_utc, "\n";
  
      if ( $obs->offset_from_std || $self->rule ) {
          if ( $obs->offset_from_std ) {
              print ' Std offset: ', $obs->offset_from_std, "\n";
          }
  
          if ( $self->rule ) {
              print ' Std offset: ', $self->rule->offset_from_std, ' - ',
                  $self->rule->name, " rule\n";
          }
      }
      else {
          print " Std offset: 0 - no rule\n";
      }
  
      print "\n";
  }
  ## use critic
  
  1;
DATETIME_TIMEZONE_OLSONDB_CHANGE

    $main::fatpacked{"DateTime/TimeZone/OlsonDB/Observance.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_OLSONDB_OBSERVANCE';
  package DateTime::TimeZone::OlsonDB::Observance;
  $DateTime::TimeZone::OlsonDB::Observance::VERSION = '2.01';
  use strict;
  use warnings;
  
  use DateTime::Duration;
  use DateTime::TimeZone::OlsonDB;
  use DateTime::TimeZone::OlsonDB::Change;
  
  use List::Util 1.33 qw( any first );
  use Params::Validate qw( validate SCALAR ARRAYREF UNDEF OBJECT );
  
  sub new {
      my $class = shift;
      my %p     = validate(
          @_, {
              gmtoff               => { type => SCALAR },
              rules                => { type => ARRAYREF },
              format               => { type => SCALAR },
              until                => { type => SCALAR, default => q{} },
              utc_start_datetime   => { type => OBJECT | UNDEF },
              offset_from_std      => { type => SCALAR, default => 0 },
              last_offset_from_utc => { type => SCALAR, default => 0 },
              last_offset_from_std => { type => SCALAR, default => 0 },
          }
      );
  
      my $offset_from_utc
          = $p{gmtoff} =~ m/^[+-]?\d?\d$/ # only hours? need to handle specially
          ? 3600 * $p{gmtoff}
          : DateTime::TimeZone::offset_as_seconds( $p{gmtoff} );
  
      my $offset_from_std
          = DateTime::TimeZone::offset_as_seconds( $p{offset_from_std} );
  
      my $last_offset_from_utc = delete $p{last_offset_from_utc};
      my $last_offset_from_std = delete $p{last_offset_from_std};
  
      my $self = bless {
          %p,
          offset_from_utc => $offset_from_utc,
          offset_from_std => $offset_from_std,
          until           => [ split /\s+/, $p{until} ],
      }, $class;
  
      $self->{first_rule}
          = $self->_first_rule( $last_offset_from_utc, $last_offset_from_std );
  
      if ( $p{utc_start_datetime} ) {
          $offset_from_std += $self->{first_rule}->offset_from_std
              if $self->{first_rule};
  
          my $local_start_datetime = $p{utc_start_datetime}->clone;
  
          $local_start_datetime += DateTime::Duration->new(
              seconds => $offset_from_utc + $offset_from_std );
  
          $self->{local_start_datetime} = $local_start_datetime;
      }
  
      return $self;
  }
  
  sub offset_from_utc { $_[0]->{offset_from_utc} || 0 }
  sub offset_from_std { $_[0]->{offset_from_std} || 0 }
  sub total_offset    { $_[0]->offset_from_utc + $_[0]->offset_from_std }
  
  sub rules      { @{ $_[0]->{rules} } }
  sub first_rule { $_[0]->{first_rule} }
  
  ## no critic (Subroutines::ProhibitBuiltinHomonyms)
  sub format { $_[0]->{format} }
  ## use critic
  
  sub utc_start_datetime   { $_[0]->{utc_start_datetime} }
  sub local_start_datetime { $_[0]->{local_start_datetime} }
  
  sub formatted_short_name {
      my $self   = shift;
      my $letter = shift;
  
      my $format = $self->format;
      return $format unless $format =~ /%/;
  
      return sprintf( $format, $letter );
  }
  
  sub expand_from_rules {
      my $self = shift;
      my $zone = shift;
  
      # real max is year + 1 so we include max year
      my $max_year = (shift) + 1;
  
      my $min_year;
  
      if ( $self->utc_start_datetime ) {
          $min_year = $self->utc_start_datetime->year;
      }
      else {
  
          # There is at least one time zone that has an infinite
          # observance, but that observance has rules that only start at
          # a certain point - Pacific/Chatham
  
          # In this case we just find the earliest rule and start there
  
          $min_year
              = ( sort { $a <=> $b } map { $_->min_year } $self->rules )[0];
      }
  
      my $until = $self->until( $zone->last_change->offset_from_std );
      if ($until) {
          $max_year = $until->year;
      }
      else {
  
          # Some zones, like Asia/Tehran, have a predefined fixed set of
          # rules that go well into the future (2037 for Asia/Tehran)
          my $max_rule_year = 0;
          foreach my $rule ( $self->rules ) {
              $max_rule_year = $rule->max_year
                  if $rule->max_year && $rule->max_year > $max_rule_year;
          }
  
          $max_year = $max_rule_year if $max_rule_year > $max_year;
      }
  
      foreach my $year ( $min_year .. $max_year ) {
          my @rules = $self->_sorted_rules_for_year($year);
  
          for my $rule (@rules) {
              my $dt = $rule->utc_start_datetime_for_year(
                  $year,
                  $self->offset_from_utc, $zone->last_change->offset_from_std
              );
  
              next
                  if $self->utc_start_datetime
                  && $dt <= $self->utc_start_datetime;
  
              ## no critic (Variables::ProhibitReusedNames)
              my $until = $self->until( $zone->last_change->offset_from_std );
  
              next if $until && $dt >= $until;
  
              my $change = DateTime::TimeZone::OlsonDB::Change->new(
                  type                 => 'rule',
                  utc_start_datetime   => $dt,
                  local_start_datetime => $dt + DateTime::Duration->new(
                      seconds => $self->total_offset + $rule->offset_from_std
                  ),
                  short_name => $self->formatted_short_name( $rule->letter ),
                  observance => $self,
                  rule       => $rule,
              );
  
              if ($DateTime::TimeZone::OlsonDB::DEBUG) {
                  ## no critic (InputOutput::RequireCheckedSyscalls)
                  print "Adding rule change ...\n";
  
                  $change->_debug_output;
              }
  
              $zone->add_change($change);
          }
      }
  }
  
  sub _sorted_rules_for_year {
      my $self = shift;
      my $year = shift;
  
      ## no critic (BuiltinFunctions::ProhibitComplexMappings)
      my @rules = (
          map      { $_->[0] }
              sort { $a->[1] <=> $b->[1] }
              map {
              my $dt = $_->utc_start_datetime_for_year(
                  $year,
                  $self->offset_from_utc, 0
              );
              [ $_, $dt ]
              }
              grep {
              $_->min_year <= $year
                  && ( ( !$_->max_year ) || $_->max_year >= $year )
              } $self->rules
      );
  
      my %rules_by_month;
      for my $rule (@rules) {
          push @{ $rules_by_month{ $rule->month() } }, $rule;
      }
  
      # In some cases we have both a "max year" rule and a "this year" rule for
      # a given month's change. In that case, we want to pick the more specific
      # ("this year") rule, not apply both. This only matters for zones that
      # have a winter transition that follows the Islamic calendar to deal with
      # Ramadan. So far this has happened with Cairo, El_Aaiun, and other zones
      # in northern Africa.
      my @final_rules;
      for my $month ( sort { $a <=> $b } keys %rules_by_month ) {
          my @r = @{ $rules_by_month{$month} };
          if ( @r == 2 ) {
              my ($repeating) = grep { !defined $_->max_year() } @r;
              my ($this_year)
                  = grep { $_->max_year() && $_->max_year() == $year } @r;
              if ( $repeating && $this_year ) {
  
                  # We used to pick the repeating rule for year 2037 only
                  # because it seemed like that's what zic did in the past. Now
                  # it seems to pick the "this year" rule instead.
                  if ($DateTime::TimeZone::OlsonDB::DEBUG) {
                      ## no critic (InputOutput::RequireCheckedSyscalls)
                      print
                          "Found two rules for the same month, picking the one for this year\n";
                  }
  
                  push @final_rules, $this_year;
                  next;
              }
  
              push @final_rules, @r;
          }
          else {
              push @final_rules, @r;
          }
      }
  
      return @final_rules;
  }
  
  ## no critic (Subroutines::ProhibitBuiltinHomonyms)
  sub until {
      my $self = shift;
      my $offset_from_std = shift || $self->offset_from_std;
  
      return unless defined $self->until_year;
  
      my $utc = DateTime::TimeZone::OlsonDB::utc_datetime_for_time_spec(
          spec            => $self->until_time_spec,
          year            => $self->until_year,
          month           => $self->until_month,
          day             => $self->until_day,
          offset_from_utc => $self->offset_from_utc,
          offset_from_std => $offset_from_std,
      );
  
      return $utc;
  }
  ## use critic
  
  sub until_year { $_[0]->{until}[0] }
  
  sub until_month {
      (
          defined $_[0]->{until}[1]
          ? $DateTime::TimeZone::OlsonDB::MONTHS{ $_[0]->{until}[1] }
          : 1
      );
  }
  
  sub until_day {
      (
          defined $_[0]->{until}[2]
          ? DateTime::TimeZone::OlsonDB::parse_day_spec(
              $_[0]->{until}[2], $_[0]->until_month, $_[0]->until_year
              )
          : 1
      );
  }
  
  sub until_time_spec {
      defined $_[0]->{until}[3] ? $_[0]->{until}[3] : '00:00:00';
  }
  
  ## no critic (Subroutines::ProhibitExcessComplexity)
  sub _first_rule {
      my $self                 = shift;
      my $last_offset_from_utc = shift;
      my $last_offset_from_std = shift;
  
      return unless $self->rules;
  
      my $date = $self->utc_start_datetime
          or return $self->_first_no_dst_rule;
  
      my @rules = $self->rules;
  
      my %possible_rules;
  
      my $year = $date->year;
      foreach my $rule (@rules) {
  
          # We need to look at what the year _would_ be if we added the
          # rule's offset to the UTC date.  Otherwise we can end up with
          # a UTC date in year X, and a rule that starts in _local_ year
          # X + 1, where that rule really does apply to that UTC date.
          my $temp_year
              = $date->clone->add(
              seconds => $self->offset_from_utc + $rule->offset_from_std )
              ->year;
  
          # Save the highest value
          $year = $temp_year if $temp_year > $year;
  
          next if $rule->min_year > $temp_year;
  
          $possible_rules{$rule} = $rule;
      }
  
      my $earliest_year = $year - 1;
      foreach my $rule (@rules) {
          $earliest_year = $rule->min_year
              if $rule->min_year < $earliest_year;
      }
  
      # figure out what date each rule would start on _if_ that rule
      # were applied to this current observance.  this could be a rule
      # that started much earlier, but is only now active because of an
      # observance switch.  An obnoxious example of this is
      # America/Phoenix in 1944, which applies the US rule in April,
      # thus (re-)instating the "war time" rule from 1942.  Can you say
      # ridiculous crack-smoking stupidity?
      my @rule_dates;
      foreach my $y ( $earliest_year .. $year ) {
      RULE:
          foreach my $rule ( values %possible_rules ) {
  
              # skip rules that can't have applied the year before the
              # observance started.
              if ( $rule->min_year > $y ) {
                  ## no critic (InputOutput::RequireCheckedSyscalls)
                  print 'Skipping rule beginning in ', $rule->min_year,
                      ".  Year is $y.\n"
                      if $DateTime::TimeZone::OlsonDB::DEBUG;
  
                  next RULE;
              }
  
              if ( $rule->max_year && $rule->max_year < $y ) {
                  ## no critic (InputOutput::RequireCheckedSyscalls)
                  print 'Skipping rule ending in ', $rule->max_year,
                      ".     Year is $y.\n"
                      if $DateTime::TimeZone::OlsonDB::DEBUG;
  
                  next RULE;
              }
  
              my $rule_start = $rule->utc_start_datetime_for_year(
                  $y,
                  $last_offset_from_utc, $last_offset_from_std
              );
  
              push @rule_dates, [ $rule_start, $rule ];
          }
      }
  
      @rule_dates = sort { $a->[0] <=> $b->[0] } @rule_dates;
  
      ## no critic (InputOutput::RequireCheckedSyscalls)
      print "Looking for first rule ...\n"
          if $DateTime::TimeZone::OlsonDB::DEBUG;
      print ' Observance starts: ', $date->datetime, "\n\n"
          if $DateTime::TimeZone::OlsonDB::DEBUG;
      ## use critic
  
      # ... look through the rules to see if any are still in
      # effect at the beginning of the observance
  
      ## no critic (ControlStructures::ProhibitCStyleForLoops)
      for ( my $x = 0; $x < @rule_dates; $x++ ) {
          my ( $dt, $rule ) = @{ $rule_dates[$x] };
          my ( $next_dt, $next_rule )
              = $x < @rule_dates - 1 ? @{ $rule_dates[ $x + 1 ] } : undef;
  
          next if $next_dt && $next_dt < $date;
  
          ## no critic (InputOutput::RequireCheckedSyscalls)
          print ' This rule starts:  ', $dt->datetime, "\n"
              if $DateTime::TimeZone::OlsonDB::DEBUG;
  
          print ' Next rule starts:  ', $next_dt->datetime, "\n"
              if $next_dt && $DateTime::TimeZone::OlsonDB::DEBUG;
  
          print ' No next rule\n\n'
              if !$next_dt && $DateTime::TimeZone::OlsonDB::DEBUG;
          ## use critic
  
          if ( $dt <= $date ) {
              if ($next_dt) {
                  return $rule if $date < $next_dt;
                  return $next_rule if $date == $next_dt;
              }
              else {
                  return $rule;
              }
          }
      }
  
      # If this observance has rules, but the rules don't have any
      # defined changes until after the observance starts, we get the
      # earliest standard time rule and use it. If there is none, shit
      # blows up (but this is not the case for any time zones as of
      # 2009a). I really, really hate the Olson database a lot of the
      # time! Could this be more arbitrary?
      my $std_time_rule = $self->_first_no_dst_rule;
  
      die
          q{Cannot find a rule that applies to the observance's date range and cannot find a rule without DST to apply}
          unless $std_time_rule;
  
      return $std_time_rule;
  }
  ## use critic
  
  sub _first_no_dst_rule {
      my $self = shift;
  
      return first { !$_->offset_from_std }
      sort { $a->min_year <=> $b->min_year } $self->rules;
  }
  
  1;
DATETIME_TIMEZONE_OLSONDB_OBSERVANCE

    $main::fatpacked{"DateTime/TimeZone/OlsonDB/Rule.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_OLSONDB_RULE';
  package DateTime::TimeZone::OlsonDB::Rule;
  $DateTime::TimeZone::OlsonDB::Rule::VERSION = '2.01';
  use strict;
  use warnings;
  
  use DateTime::Duration;
  use DateTime::TimeZone::OlsonDB;
  
  use Params::Validate qw( validate SCALAR );
  
  sub new {
      my $class = shift;
      my %p     = validate(
          @_, {
              name   => { type => SCALAR },
              from   => { type => SCALAR },
              to     => { type => SCALAR },
              type   => { type => SCALAR, default => undef },
              in     => { type => SCALAR },
              on     => { type => SCALAR },
              at     => { type => SCALAR },
              save   => { type => SCALAR },
              letter => { type => SCALAR, default => q{} },
          },
      );
  
      my $save = $p{save};
  
      # The handling of q{-} and q{1} are to account for new syntax introduced
      # in 2009u (and hopefully gone in future versions).
      if ( $save && $save ne q{-} ) {
          if ( $save =~ /^\d+$/ ) {
              $p{offset_from_std} = 3600 * $save;
          }
          else {
              $p{offset_from_std}
                  = DateTime::TimeZone::offset_as_seconds($save);
          }
      }
      else {
          $p{offset_from_std} = 0;
      }
  
      return bless \%p, $class;
  }
  
  sub name            { $_[0]->{name} }
  sub offset_from_std { $_[0]->{offset_from_std} }
  sub letter          { $_[0]->{letter} }
  sub min_year        { $_[0]->{from} }
  
  sub max_year {
            $_[0]->{to} eq 'only' ? $_[0]->min_year
          : $_[0]->{to} eq 'max'  ? undef
          :                         $_[0]->{to};
  }
  
  sub is_infinite { $_[0]->{to} eq 'max' ? 1 : 0 }
  
  sub month { $DateTime::TimeZone::OlsonDB::MONTHS{ $_[0]->{in} } }
  sub on    { $_[0]->{on} }
  sub at    { $_[0]->{at} }
  
  sub utc_start_datetime_for_year {
      my $self            = shift;
      my $year            = shift;
      my $offset_from_utc = shift;
  
      # should be the offset of the _previous_ rule
      my $offset_from_std = shift;
  
      my $day = DateTime::TimeZone::OlsonDB::parse_day_spec(
          $self->on,
          $self->month, $year
      );
  
      my $utc = DateTime::TimeZone::OlsonDB::utc_datetime_for_time_spec(
          spec            => $self->at,
          year            => $year,
          month           => $self->month,
          day             => $day,
          offset_from_utc => $offset_from_utc,
          offset_from_std => $offset_from_std,
      );
  
      return $utc;
  }
  
  1;
DATETIME_TIMEZONE_OLSONDB_RULE

    $main::fatpacked{"DateTime/TimeZone/OlsonDB/Zone.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_OLSONDB_ZONE';
  package DateTime::TimeZone::OlsonDB::Zone;
  $DateTime::TimeZone::OlsonDB::Zone::VERSION = '2.01';
  use strict;
  use warnings;
  
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  use DateTime::TimeZone::OlsonDB::Change;
  use DateTime::TimeZone::OlsonDB::Observance;
  
  use List::Util qw( first max );
  use Params::Validate qw( validate SCALAR ARRAYREF );
  
  sub new {
      my $class = shift;
      my %p     = validate(
          @_, {
              name        => { type => SCALAR },
              observances => { type => ARRAYREF },
              olson_db    => 1,
          }
      );
  
      my $self = {
          name           => $p{name},
          observances    => $p{observances},
          changes        => [],
          infinite_rules => {},
      };
  
      return bless $self, $class;
  }
  
  sub name { $_[0]->{name} }
  
  sub last_rules_year {
      my $self = shift;
      my $odb  = shift;
  
      my $last_rule = $self->{observances}[-1]{rules};
  
      return unless $last_rule;
  
      my @rules = $odb->rules_by_name($last_rule);
  
      return $rules[-1]->min_year();
  }
  
  sub expand_observances {
      my $self     = shift;
      my $odb      = shift;
      my $max_year = shift;
  
      my $prev_until;
      ## no critic (ControlStructures::ProhibitCStyleForLoops)
      for ( my $x = 0; $x < @{ $self->{observances} }; $x++ ) {
          my %p = %{ $self->{observances}[$x] };
  
          my $rules_name = delete $p{rules};
  
          my $last_offset_from_std
              = $self->last_change ? $self->last_change->offset_from_std : 0;
          my $last_offset_from_utc
              = $self->last_change ? $self->last_change->offset_from_utc : 0;
  
          my $obs = DateTime::TimeZone::OlsonDB::Observance->new(
              %p,
              utc_start_datetime   => $prev_until,
              rules                => [ $odb->rules_by_name($rules_name) ],
              last_offset_from_utc => $last_offset_from_utc,
              last_offset_from_std => $last_offset_from_std,
          );
  
          my $rule = $obs->first_rule;
          my $letter = $rule ? $rule->letter : q{};
  
          my $change = DateTime::TimeZone::OlsonDB::Change->new(
              type                 => 'observance',
              utc_start_datetime   => $obs->utc_start_datetime,
              local_start_datetime => $obs->local_start_datetime,
              short_name           => $obs->formatted_short_name($letter),
              observance           => $obs,
              $rule ? ( rule => $rule ) : (),
          );
  
          if ($DateTime::TimeZone::OlsonDB::DEBUG) {
              ## no critic (InputOutput::RequireCheckedSyscalls)
              print "Adding observance change ...\n";
  
              $change->_debug_output;
          }
  
          $self->add_change($change);
  
          if ( $obs->rules ) {
              $obs->expand_from_rules( $self, $max_year );
          }
  
          $prev_until = $obs->until(
              $self->last_change ? $self->last_change->offset_from_std : 0 );
  
          # last observance
          if ( $x == $#{ $self->{observances} } ) {
              foreach my $rule ( $obs->rules ) {
                  if ( $rule->is_infinite ) {
                      $self->add_infinite_rule($rule);
                  }
              }
          }
      }
  }
  
  sub add_change {
      my $self   = shift;
      my $change = shift;
  
      if ( defined $change->utc_start_datetime ) {
          if (   @{ $self->{changes} }
              && $self->{changes}[-1]->utc_start_datetime
              && $self->{changes}[-1]->utc_start_datetime
              == $change->utc_start_datetime ) {
              if ( $self->{changes}[-1]->rule && $change->observance ) {
                  ## no critic (InputOutput::RequireCheckedSyscalls)
                  print
                      " Ignoring previous rule change, that starts the same time as current observance change\n\n"
                      if $DateTime::TimeZone::OlsonDB::DEBUG;
  
                  $self->{changes}[-1] = $change;
  
                  return;
              }
  
              die
                  "Cannot add two different changes that have the same UTC start datetime!\n";
          }
  
          my $last_change = $self->last_change;
  
          if (   $last_change->short_name eq $change->short_name
              && $last_change->total_offset == $change->total_offset
              && $last_change->is_dst == $change->is_dst
              && $last_change->observance eq $change->observance ) {
              my $last_rule = $last_change->rule || q{};
              my $new_rule  = $change->rule      || q{};
  
              if ( $last_rule eq $new_rule ) {
                  ## no critic (InputOutput::RequireCheckedSyscalls)
                  print "Skipping identical change\n"
                      if $DateTime::TimeZone::OlsonDB::DEBUG;
  
                  return;
              }
          }
  
          push @{ $self->{changes} }, $change;
      }
      else {
          if ( $self->{earliest} ) {
              die 'There can only be one earliest time zone change!';
          }
          else {
              $self->{earliest} = $change;
          }
      }
  }
  
  sub add_infinite_rule {
      $_[0]->{infinite_rules}{ $_[1] } = $_[1];
  }
  
  sub last_change {
      return unless @{ $_[0]->{changes} } || $_[0]->{earliest};
      return (
          @{ $_[0]->{changes} }
          ? $_[0]->{changes}[-1]
          : $_[0]->{earliest}
      );
  }
  
  sub sorted_changes {
      (
          ( defined $_[0]->{earliest} ? $_[0]->{earliest} : () ),
          sort { $a->utc_start_datetime <=> $b->utc_start_datetime }
              @{ $_[0]->{changes} }
      );
  }
  
  sub infinite_rules { values %{ $_[0]->{infinite_rules} } }
  
  1;
DATETIME_TIMEZONE_OLSONDB_ZONE

    $main::fatpacked{"DateTime/TimeZone/PST8PDT.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PST8PDT';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::PST8PDT;
  $DateTime::TimeZone::PST8PDT::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::PST8PDT::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60502413600, #      utc_end 1918-03-31 10:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60502384800, #    local_end 1918-03-31 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  60502413600, #    utc_start 1918-03-31 10:00:00 (Sun)
  60520554000, #      utc_end 1918-10-27 09:00:00 (Sun)
  60502388400, #  local_start 1918-03-31 03:00:00 (Sun)
  60520528800, #    local_end 1918-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  60520554000, #    utc_start 1918-10-27 09:00:00 (Sun)
  60533863200, #      utc_end 1919-03-30 10:00:00 (Sun)
  60520525200, #  local_start 1918-10-27 01:00:00 (Sun)
  60533834400, #    local_end 1919-03-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  60533863200, #    utc_start 1919-03-30 10:00:00 (Sun)
  60552003600, #      utc_end 1919-10-26 09:00:00 (Sun)
  60533838000, #  local_start 1919-03-30 03:00:00 (Sun)
  60551978400, #    local_end 1919-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  60552003600, #    utc_start 1919-10-26 09:00:00 (Sun)
  61255476000, #      utc_end 1942-02-09 10:00:00 (Mon)
  60551974800, #  local_start 1919-10-26 01:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -28800,
  0,
  'PST',
      ],
      [
  61255476000, #    utc_start 1942-02-09 10:00:00 (Mon)
  61366287600, #      utc_end 1945-08-14 23:00:00 (Tue)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61366262400, #    local_end 1945-08-14 16:00:00 (Tue)
  -25200,
  1,
  'PWT',
      ],
      [
  61366287600, #    utc_start 1945-08-14 23:00:00 (Tue)
  61370298000, #      utc_end 1945-09-30 09:00:00 (Sun)
  61366262400, #  local_start 1945-08-14 16:00:00 (Tue)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -25200,
  1,
  'PPT',
      ],
      [
  61370298000, #    utc_start 1945-09-30 09:00:00 (Sun)
  62051306400, #      utc_end 1967-04-30 10:00:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  62051277600, #    local_end 1967-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62051306400, #    utc_start 1967-04-30 10:00:00 (Sun)
  62067027600, #      utc_end 1967-10-29 09:00:00 (Sun)
  62051281200, #  local_start 1967-04-30 03:00:00 (Sun)
  62067002400, #    local_end 1967-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62067027600, #    utc_start 1967-10-29 09:00:00 (Sun)
  62082756000, #      utc_end 1968-04-28 10:00:00 (Sun)
  62066998800, #  local_start 1967-10-29 01:00:00 (Sun)
  62082727200, #    local_end 1968-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62082756000, #    utc_start 1968-04-28 10:00:00 (Sun)
  62098477200, #      utc_end 1968-10-27 09:00:00 (Sun)
  62082730800, #  local_start 1968-04-28 03:00:00 (Sun)
  62098452000, #    local_end 1968-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62098477200, #    utc_start 1968-10-27 09:00:00 (Sun)
  62114205600, #      utc_end 1969-04-27 10:00:00 (Sun)
  62098448400, #  local_start 1968-10-27 01:00:00 (Sun)
  62114176800, #    local_end 1969-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62114205600, #    utc_start 1969-04-27 10:00:00 (Sun)
  62129926800, #      utc_end 1969-10-26 09:00:00 (Sun)
  62114180400, #  local_start 1969-04-27 03:00:00 (Sun)
  62129901600, #    local_end 1969-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62129926800, #    utc_start 1969-10-26 09:00:00 (Sun)
  62145655200, #      utc_end 1970-04-26 10:00:00 (Sun)
  62129898000, #  local_start 1969-10-26 01:00:00 (Sun)
  62145626400, #    local_end 1970-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62145655200, #    utc_start 1970-04-26 10:00:00 (Sun)
  62161376400, #      utc_end 1970-10-25 09:00:00 (Sun)
  62145630000, #  local_start 1970-04-26 03:00:00 (Sun)
  62161351200, #    local_end 1970-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62161376400, #    utc_start 1970-10-25 09:00:00 (Sun)
  62177104800, #      utc_end 1971-04-25 10:00:00 (Sun)
  62161347600, #  local_start 1970-10-25 01:00:00 (Sun)
  62177076000, #    local_end 1971-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62177104800, #    utc_start 1971-04-25 10:00:00 (Sun)
  62193430800, #      utc_end 1971-10-31 09:00:00 (Sun)
  62177079600, #  local_start 1971-04-25 03:00:00 (Sun)
  62193405600, #    local_end 1971-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62193430800, #    utc_start 1971-10-31 09:00:00 (Sun)
  62209159200, #      utc_end 1972-04-30 10:00:00 (Sun)
  62193402000, #  local_start 1971-10-31 01:00:00 (Sun)
  62209130400, #    local_end 1972-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62209159200, #    utc_start 1972-04-30 10:00:00 (Sun)
  62224880400, #      utc_end 1972-10-29 09:00:00 (Sun)
  62209134000, #  local_start 1972-04-30 03:00:00 (Sun)
  62224855200, #    local_end 1972-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62224880400, #    utc_start 1972-10-29 09:00:00 (Sun)
  62240608800, #      utc_end 1973-04-29 10:00:00 (Sun)
  62224851600, #  local_start 1972-10-29 01:00:00 (Sun)
  62240580000, #    local_end 1973-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62240608800, #    utc_start 1973-04-29 10:00:00 (Sun)
  62256330000, #      utc_end 1973-10-28 09:00:00 (Sun)
  62240583600, #  local_start 1973-04-29 03:00:00 (Sun)
  62256304800, #    local_end 1973-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62256330000, #    utc_start 1973-10-28 09:00:00 (Sun)
  62262381600, #      utc_end 1974-01-06 10:00:00 (Sun)
  62256301200, #  local_start 1973-10-28 01:00:00 (Sun)
  62262352800, #    local_end 1974-01-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62262381600, #    utc_start 1974-01-06 10:00:00 (Sun)
  62287779600, #      utc_end 1974-10-27 09:00:00 (Sun)
  62262356400, #  local_start 1974-01-06 03:00:00 (Sun)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62287779600, #    utc_start 1974-10-27 09:00:00 (Sun)
  62298064800, #      utc_end 1975-02-23 10:00:00 (Sun)
  62287750800, #  local_start 1974-10-27 01:00:00 (Sun)
  62298036000, #    local_end 1975-02-23 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62298064800, #    utc_start 1975-02-23 10:00:00 (Sun)
  62319229200, #      utc_end 1975-10-26 09:00:00 (Sun)
  62298039600, #  local_start 1975-02-23 03:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62319229200, #    utc_start 1975-10-26 09:00:00 (Sun)
  62334957600, #      utc_end 1976-04-25 10:00:00 (Sun)
  62319200400, #  local_start 1975-10-26 01:00:00 (Sun)
  62334928800, #    local_end 1976-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62334957600, #    utc_start 1976-04-25 10:00:00 (Sun)
  62351283600, #      utc_end 1976-10-31 09:00:00 (Sun)
  62334932400, #  local_start 1976-04-25 03:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62351283600, #    utc_start 1976-10-31 09:00:00 (Sun)
  62366407200, #      utc_end 1977-04-24 10:00:00 (Sun)
  62351254800, #  local_start 1976-10-31 01:00:00 (Sun)
  62366378400, #    local_end 1977-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62366407200, #    utc_start 1977-04-24 10:00:00 (Sun)
  62382733200, #      utc_end 1977-10-30 09:00:00 (Sun)
  62366382000, #  local_start 1977-04-24 03:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62382733200, #    utc_start 1977-10-30 09:00:00 (Sun)
  62398461600, #      utc_end 1978-04-30 10:00:00 (Sun)
  62382704400, #  local_start 1977-10-30 01:00:00 (Sun)
  62398432800, #    local_end 1978-04-30 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62398461600, #    utc_start 1978-04-30 10:00:00 (Sun)
  62414182800, #      utc_end 1978-10-29 09:00:00 (Sun)
  62398436400, #  local_start 1978-04-30 03:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62414182800, #    utc_start 1978-10-29 09:00:00 (Sun)
  62429911200, #      utc_end 1979-04-29 10:00:00 (Sun)
  62414154000, #  local_start 1978-10-29 01:00:00 (Sun)
  62429882400, #    local_end 1979-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62429911200, #    utc_start 1979-04-29 10:00:00 (Sun)
  62445632400, #      utc_end 1979-10-28 09:00:00 (Sun)
  62429886000, #  local_start 1979-04-29 03:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62445632400, #    utc_start 1979-10-28 09:00:00 (Sun)
  62461360800, #      utc_end 1980-04-27 10:00:00 (Sun)
  62445603600, #  local_start 1979-10-28 01:00:00 (Sun)
  62461332000, #    local_end 1980-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62461360800, #    utc_start 1980-04-27 10:00:00 (Sun)
  62477082000, #      utc_end 1980-10-26 09:00:00 (Sun)
  62461335600, #  local_start 1980-04-27 03:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62477082000, #    utc_start 1980-10-26 09:00:00 (Sun)
  62492810400, #      utc_end 1981-04-26 10:00:00 (Sun)
  62477053200, #  local_start 1980-10-26 01:00:00 (Sun)
  62492781600, #    local_end 1981-04-26 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62492810400, #    utc_start 1981-04-26 10:00:00 (Sun)
  62508531600, #      utc_end 1981-10-25 09:00:00 (Sun)
  62492785200, #  local_start 1981-04-26 03:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62508531600, #    utc_start 1981-10-25 09:00:00 (Sun)
  62524260000, #      utc_end 1982-04-25 10:00:00 (Sun)
  62508502800, #  local_start 1981-10-25 01:00:00 (Sun)
  62524231200, #    local_end 1982-04-25 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62524260000, #    utc_start 1982-04-25 10:00:00 (Sun)
  62540586000, #      utc_end 1982-10-31 09:00:00 (Sun)
  62524234800, #  local_start 1982-04-25 03:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62540586000, #    utc_start 1982-10-31 09:00:00 (Sun)
  62555709600, #      utc_end 1983-04-24 10:00:00 (Sun)
  62540557200, #  local_start 1982-10-31 01:00:00 (Sun)
  62555680800, #    local_end 1983-04-24 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62555709600, #    utc_start 1983-04-24 10:00:00 (Sun)
  62572035600, #      utc_end 1983-10-30 09:00:00 (Sun)
  62555684400, #  local_start 1983-04-24 03:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62572035600, #    utc_start 1983-10-30 09:00:00 (Sun)
  62587764000, #      utc_end 1984-04-29 10:00:00 (Sun)
  62572006800, #  local_start 1983-10-30 01:00:00 (Sun)
  62587735200, #    local_end 1984-04-29 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62587764000, #    utc_start 1984-04-29 10:00:00 (Sun)
  62603485200, #      utc_end 1984-10-28 09:00:00 (Sun)
  62587738800, #  local_start 1984-04-29 03:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62603485200, #    utc_start 1984-10-28 09:00:00 (Sun)
  62619213600, #      utc_end 1985-04-28 10:00:00 (Sun)
  62603456400, #  local_start 1984-10-28 01:00:00 (Sun)
  62619184800, #    local_end 1985-04-28 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62619213600, #    utc_start 1985-04-28 10:00:00 (Sun)
  62634934800, #      utc_end 1985-10-27 09:00:00 (Sun)
  62619188400, #  local_start 1985-04-28 03:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62634934800, #    utc_start 1985-10-27 09:00:00 (Sun)
  62650663200, #      utc_end 1986-04-27 10:00:00 (Sun)
  62634906000, #  local_start 1985-10-27 01:00:00 (Sun)
  62650634400, #    local_end 1986-04-27 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62650663200, #    utc_start 1986-04-27 10:00:00 (Sun)
  62666384400, #      utc_end 1986-10-26 09:00:00 (Sun)
  62650638000, #  local_start 1986-04-27 03:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62666384400, #    utc_start 1986-10-26 09:00:00 (Sun)
  62680298400, #      utc_end 1987-04-05 10:00:00 (Sun)
  62666355600, #  local_start 1986-10-26 01:00:00 (Sun)
  62680269600, #    local_end 1987-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62680298400, #    utc_start 1987-04-05 10:00:00 (Sun)
  62697834000, #      utc_end 1987-10-25 09:00:00 (Sun)
  62680273200, #  local_start 1987-04-05 03:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62697834000, #    utc_start 1987-10-25 09:00:00 (Sun)
  62711748000, #      utc_end 1988-04-03 10:00:00 (Sun)
  62697805200, #  local_start 1987-10-25 01:00:00 (Sun)
  62711719200, #    local_end 1988-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62711748000, #    utc_start 1988-04-03 10:00:00 (Sun)
  62729888400, #      utc_end 1988-10-30 09:00:00 (Sun)
  62711722800, #  local_start 1988-04-03 03:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62729888400, #    utc_start 1988-10-30 09:00:00 (Sun)
  62743197600, #      utc_end 1989-04-02 10:00:00 (Sun)
  62729859600, #  local_start 1988-10-30 01:00:00 (Sun)
  62743168800, #    local_end 1989-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62743197600, #    utc_start 1989-04-02 10:00:00 (Sun)
  62761338000, #      utc_end 1989-10-29 09:00:00 (Sun)
  62743172400, #  local_start 1989-04-02 03:00:00 (Sun)
  62761312800, #    local_end 1989-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62761338000, #    utc_start 1989-10-29 09:00:00 (Sun)
  62774647200, #      utc_end 1990-04-01 10:00:00 (Sun)
  62761309200, #  local_start 1989-10-29 01:00:00 (Sun)
  62774618400, #    local_end 1990-04-01 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62774647200, #    utc_start 1990-04-01 10:00:00 (Sun)
  62792787600, #      utc_end 1990-10-28 09:00:00 (Sun)
  62774622000, #  local_start 1990-04-01 03:00:00 (Sun)
  62792762400, #    local_end 1990-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62792787600, #    utc_start 1990-10-28 09:00:00 (Sun)
  62806701600, #      utc_end 1991-04-07 10:00:00 (Sun)
  62792758800, #  local_start 1990-10-28 01:00:00 (Sun)
  62806672800, #    local_end 1991-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62806701600, #    utc_start 1991-04-07 10:00:00 (Sun)
  62824237200, #      utc_end 1991-10-27 09:00:00 (Sun)
  62806676400, #  local_start 1991-04-07 03:00:00 (Sun)
  62824212000, #    local_end 1991-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62824237200, #    utc_start 1991-10-27 09:00:00 (Sun)
  62838151200, #      utc_end 1992-04-05 10:00:00 (Sun)
  62824208400, #  local_start 1991-10-27 01:00:00 (Sun)
  62838122400, #    local_end 1992-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62838151200, #    utc_start 1992-04-05 10:00:00 (Sun)
  62855686800, #      utc_end 1992-10-25 09:00:00 (Sun)
  62838126000, #  local_start 1992-04-05 03:00:00 (Sun)
  62855661600, #    local_end 1992-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62855686800, #    utc_start 1992-10-25 09:00:00 (Sun)
  62869600800, #      utc_end 1993-04-04 10:00:00 (Sun)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62869572000, #    local_end 1993-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62869600800, #    utc_start 1993-04-04 10:00:00 (Sun)
  62887741200, #      utc_end 1993-10-31 09:00:00 (Sun)
  62869575600, #  local_start 1993-04-04 03:00:00 (Sun)
  62887716000, #    local_end 1993-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62887741200, #    utc_start 1993-10-31 09:00:00 (Sun)
  62901050400, #      utc_end 1994-04-03 10:00:00 (Sun)
  62887712400, #  local_start 1993-10-31 01:00:00 (Sun)
  62901021600, #    local_end 1994-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62901050400, #    utc_start 1994-04-03 10:00:00 (Sun)
  62919190800, #      utc_end 1994-10-30 09:00:00 (Sun)
  62901025200, #  local_start 1994-04-03 03:00:00 (Sun)
  62919165600, #    local_end 1994-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62919190800, #    utc_start 1994-10-30 09:00:00 (Sun)
  62932500000, #      utc_end 1995-04-02 10:00:00 (Sun)
  62919162000, #  local_start 1994-10-30 01:00:00 (Sun)
  62932471200, #    local_end 1995-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62932500000, #    utc_start 1995-04-02 10:00:00 (Sun)
  62950640400, #      utc_end 1995-10-29 09:00:00 (Sun)
  62932474800, #  local_start 1995-04-02 03:00:00 (Sun)
  62950615200, #    local_end 1995-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62950640400, #    utc_start 1995-10-29 09:00:00 (Sun)
  62964554400, #      utc_end 1996-04-07 10:00:00 (Sun)
  62950611600, #  local_start 1995-10-29 01:00:00 (Sun)
  62964525600, #    local_end 1996-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62964554400, #    utc_start 1996-04-07 10:00:00 (Sun)
  62982090000, #      utc_end 1996-10-27 09:00:00 (Sun)
  62964529200, #  local_start 1996-04-07 03:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  62982090000, #    utc_start 1996-10-27 09:00:00 (Sun)
  62996004000, #      utc_end 1997-04-06 10:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995975200, #    local_end 1997-04-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  62996004000, #    utc_start 1997-04-06 10:00:00 (Sun)
  63013539600, #      utc_end 1997-10-26 09:00:00 (Sun)
  62995978800, #  local_start 1997-04-06 03:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63013539600, #    utc_start 1997-10-26 09:00:00 (Sun)
  63027453600, #      utc_end 1998-04-05 10:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63027424800, #    local_end 1998-04-05 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63027453600, #    utc_start 1998-04-05 10:00:00 (Sun)
  63044989200, #      utc_end 1998-10-25 09:00:00 (Sun)
  63027428400, #  local_start 1998-04-05 03:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63044989200, #    utc_start 1998-10-25 09:00:00 (Sun)
  63058903200, #      utc_end 1999-04-04 10:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058874400, #    local_end 1999-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63058903200, #    utc_start 1999-04-04 10:00:00 (Sun)
  63077043600, #      utc_end 1999-10-31 09:00:00 (Sun)
  63058878000, #  local_start 1999-04-04 03:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63077043600, #    utc_start 1999-10-31 09:00:00 (Sun)
  63090352800, #      utc_end 2000-04-02 10:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63090324000, #    local_end 2000-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63090352800, #    utc_start 2000-04-02 10:00:00 (Sun)
  63108493200, #      utc_end 2000-10-29 09:00:00 (Sun)
  63090327600, #  local_start 2000-04-02 03:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63108493200, #    utc_start 2000-10-29 09:00:00 (Sun)
  63121802400, #      utc_end 2001-04-01 10:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121773600, #    local_end 2001-04-01 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63121802400, #    utc_start 2001-04-01 10:00:00 (Sun)
  63139942800, #      utc_end 2001-10-28 09:00:00 (Sun)
  63121777200, #  local_start 2001-04-01 03:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63139942800, #    utc_start 2001-10-28 09:00:00 (Sun)
  63153856800, #      utc_end 2002-04-07 10:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153828000, #    local_end 2002-04-07 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63153856800, #    utc_start 2002-04-07 10:00:00 (Sun)
  63171392400, #      utc_end 2002-10-27 09:00:00 (Sun)
  63153831600, #  local_start 2002-04-07 03:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63171392400, #    utc_start 2002-10-27 09:00:00 (Sun)
  63185306400, #      utc_end 2003-04-06 10:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63185277600, #    local_end 2003-04-06 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63185306400, #    utc_start 2003-04-06 10:00:00 (Sun)
  63202842000, #      utc_end 2003-10-26 09:00:00 (Sun)
  63185281200, #  local_start 2003-04-06 03:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63202842000, #    utc_start 2003-10-26 09:00:00 (Sun)
  63216756000, #      utc_end 2004-04-04 10:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216727200, #    local_end 2004-04-04 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63216756000, #    utc_start 2004-04-04 10:00:00 (Sun)
  63234896400, #      utc_end 2004-10-31 09:00:00 (Sun)
  63216730800, #  local_start 2004-04-04 03:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63234896400, #    utc_start 2004-10-31 09:00:00 (Sun)
  63248205600, #      utc_end 2005-04-03 10:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63248176800, #    local_end 2005-04-03 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63248205600, #    utc_start 2005-04-03 10:00:00 (Sun)
  63266346000, #      utc_end 2005-10-30 09:00:00 (Sun)
  63248180400, #  local_start 2005-04-03 03:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63266346000, #    utc_start 2005-10-30 09:00:00 (Sun)
  63279655200, #      utc_end 2006-04-02 10:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279626400, #    local_end 2006-04-02 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63279655200, #    utc_start 2006-04-02 10:00:00 (Sun)
  63297795600, #      utc_end 2006-10-29 09:00:00 (Sun)
  63279630000, #  local_start 2006-04-02 03:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63297795600, #    utc_start 2006-10-29 09:00:00 (Sun)
  63309290400, #      utc_end 2007-03-11 10:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63309261600, #    local_end 2007-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63309290400, #    utc_start 2007-03-11 10:00:00 (Sun)
  63329850000, #      utc_end 2007-11-04 09:00:00 (Sun)
  63309265200, #  local_start 2007-03-11 03:00:00 (Sun)
  63329824800, #    local_end 2007-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63329850000, #    utc_start 2007-11-04 09:00:00 (Sun)
  63340740000, #      utc_end 2008-03-09 10:00:00 (Sun)
  63329821200, #  local_start 2007-11-04 01:00:00 (Sun)
  63340711200, #    local_end 2008-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63340740000, #    utc_start 2008-03-09 10:00:00 (Sun)
  63361299600, #      utc_end 2008-11-02 09:00:00 (Sun)
  63340714800, #  local_start 2008-03-09 03:00:00 (Sun)
  63361274400, #    local_end 2008-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63361299600, #    utc_start 2008-11-02 09:00:00 (Sun)
  63372189600, #      utc_end 2009-03-08 10:00:00 (Sun)
  63361270800, #  local_start 2008-11-02 01:00:00 (Sun)
  63372160800, #    local_end 2009-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63372189600, #    utc_start 2009-03-08 10:00:00 (Sun)
  63392749200, #      utc_end 2009-11-01 09:00:00 (Sun)
  63372164400, #  local_start 2009-03-08 03:00:00 (Sun)
  63392724000, #    local_end 2009-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63392749200, #    utc_start 2009-11-01 09:00:00 (Sun)
  63404244000, #      utc_end 2010-03-14 10:00:00 (Sun)
  63392720400, #  local_start 2009-11-01 01:00:00 (Sun)
  63404215200, #    local_end 2010-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63404244000, #    utc_start 2010-03-14 10:00:00 (Sun)
  63424803600, #      utc_end 2010-11-07 09:00:00 (Sun)
  63404218800, #  local_start 2010-03-14 03:00:00 (Sun)
  63424778400, #    local_end 2010-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63424803600, #    utc_start 2010-11-07 09:00:00 (Sun)
  63435693600, #      utc_end 2011-03-13 10:00:00 (Sun)
  63424774800, #  local_start 2010-11-07 01:00:00 (Sun)
  63435664800, #    local_end 2011-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63435693600, #    utc_start 2011-03-13 10:00:00 (Sun)
  63456253200, #      utc_end 2011-11-06 09:00:00 (Sun)
  63435668400, #  local_start 2011-03-13 03:00:00 (Sun)
  63456228000, #    local_end 2011-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63456253200, #    utc_start 2011-11-06 09:00:00 (Sun)
  63467143200, #      utc_end 2012-03-11 10:00:00 (Sun)
  63456224400, #  local_start 2011-11-06 01:00:00 (Sun)
  63467114400, #    local_end 2012-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63467143200, #    utc_start 2012-03-11 10:00:00 (Sun)
  63487702800, #      utc_end 2012-11-04 09:00:00 (Sun)
  63467118000, #  local_start 2012-03-11 03:00:00 (Sun)
  63487677600, #    local_end 2012-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63487702800, #    utc_start 2012-11-04 09:00:00 (Sun)
  63498592800, #      utc_end 2013-03-10 10:00:00 (Sun)
  63487674000, #  local_start 2012-11-04 01:00:00 (Sun)
  63498564000, #    local_end 2013-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63498592800, #    utc_start 2013-03-10 10:00:00 (Sun)
  63519152400, #      utc_end 2013-11-03 09:00:00 (Sun)
  63498567600, #  local_start 2013-03-10 03:00:00 (Sun)
  63519127200, #    local_end 2013-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63519152400, #    utc_start 2013-11-03 09:00:00 (Sun)
  63530042400, #      utc_end 2014-03-09 10:00:00 (Sun)
  63519123600, #  local_start 2013-11-03 01:00:00 (Sun)
  63530013600, #    local_end 2014-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63530042400, #    utc_start 2014-03-09 10:00:00 (Sun)
  63550602000, #      utc_end 2014-11-02 09:00:00 (Sun)
  63530017200, #  local_start 2014-03-09 03:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63550602000, #    utc_start 2014-11-02 09:00:00 (Sun)
  63561492000, #      utc_end 2015-03-08 10:00:00 (Sun)
  63550573200, #  local_start 2014-11-02 01:00:00 (Sun)
  63561463200, #    local_end 2015-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63561492000, #    utc_start 2015-03-08 10:00:00 (Sun)
  63582051600, #      utc_end 2015-11-01 09:00:00 (Sun)
  63561466800, #  local_start 2015-03-08 03:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63582051600, #    utc_start 2015-11-01 09:00:00 (Sun)
  63593546400, #      utc_end 2016-03-13 10:00:00 (Sun)
  63582022800, #  local_start 2015-11-01 01:00:00 (Sun)
  63593517600, #    local_end 2016-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63593546400, #    utc_start 2016-03-13 10:00:00 (Sun)
  63614106000, #      utc_end 2016-11-06 09:00:00 (Sun)
  63593521200, #  local_start 2016-03-13 03:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63614106000, #    utc_start 2016-11-06 09:00:00 (Sun)
  63624996000, #      utc_end 2017-03-12 10:00:00 (Sun)
  63614077200, #  local_start 2016-11-06 01:00:00 (Sun)
  63624967200, #    local_end 2017-03-12 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63624996000, #    utc_start 2017-03-12 10:00:00 (Sun)
  63645555600, #      utc_end 2017-11-05 09:00:00 (Sun)
  63624970800, #  local_start 2017-03-12 03:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63645555600, #    utc_start 2017-11-05 09:00:00 (Sun)
  63656445600, #      utc_end 2018-03-11 10:00:00 (Sun)
  63645526800, #  local_start 2017-11-05 01:00:00 (Sun)
  63656416800, #    local_end 2018-03-11 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63656445600, #    utc_start 2018-03-11 10:00:00 (Sun)
  63677005200, #      utc_end 2018-11-04 09:00:00 (Sun)
  63656420400, #  local_start 2018-03-11 03:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63677005200, #    utc_start 2018-11-04 09:00:00 (Sun)
  63687895200, #      utc_end 2019-03-10 10:00:00 (Sun)
  63676976400, #  local_start 2018-11-04 01:00:00 (Sun)
  63687866400, #    local_end 2019-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63687895200, #    utc_start 2019-03-10 10:00:00 (Sun)
  63708454800, #      utc_end 2019-11-03 09:00:00 (Sun)
  63687870000, #  local_start 2019-03-10 03:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63708454800, #    utc_start 2019-11-03 09:00:00 (Sun)
  63719344800, #      utc_end 2020-03-08 10:00:00 (Sun)
  63708426000, #  local_start 2019-11-03 01:00:00 (Sun)
  63719316000, #    local_end 2020-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63719344800, #    utc_start 2020-03-08 10:00:00 (Sun)
  63739904400, #      utc_end 2020-11-01 09:00:00 (Sun)
  63719319600, #  local_start 2020-03-08 03:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63739904400, #    utc_start 2020-11-01 09:00:00 (Sun)
  63751399200, #      utc_end 2021-03-14 10:00:00 (Sun)
  63739875600, #  local_start 2020-11-01 01:00:00 (Sun)
  63751370400, #    local_end 2021-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63751399200, #    utc_start 2021-03-14 10:00:00 (Sun)
  63771958800, #      utc_end 2021-11-07 09:00:00 (Sun)
  63751374000, #  local_start 2021-03-14 03:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63771958800, #    utc_start 2021-11-07 09:00:00 (Sun)
  63782848800, #      utc_end 2022-03-13 10:00:00 (Sun)
  63771930000, #  local_start 2021-11-07 01:00:00 (Sun)
  63782820000, #    local_end 2022-03-13 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63782848800, #    utc_start 2022-03-13 10:00:00 (Sun)
  63803408400, #      utc_end 2022-11-06 09:00:00 (Sun)
  63782823600, #  local_start 2022-03-13 03:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63803408400, #    utc_start 2022-11-06 09:00:00 (Sun)
  63814298400, #      utc_end 2023-03-12 10:00:00 (Sun)
  63803379600, #  local_start 2022-11-06 01:00:00 (Sun)
  63814269600, #    local_end 2023-03-12 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63814298400, #    utc_start 2023-03-12 10:00:00 (Sun)
  63834858000, #      utc_end 2023-11-05 09:00:00 (Sun)
  63814273200, #  local_start 2023-03-12 03:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63834858000, #    utc_start 2023-11-05 09:00:00 (Sun)
  63845748000, #      utc_end 2024-03-10 10:00:00 (Sun)
  63834829200, #  local_start 2023-11-05 01:00:00 (Sun)
  63845719200, #    local_end 2024-03-10 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63845748000, #    utc_start 2024-03-10 10:00:00 (Sun)
  63866307600, #      utc_end 2024-11-03 09:00:00 (Sun)
  63845722800, #  local_start 2024-03-10 03:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63866307600, #    utc_start 2024-11-03 09:00:00 (Sun)
  63877197600, #      utc_end 2025-03-09 10:00:00 (Sun)
  63866278800, #  local_start 2024-11-03 01:00:00 (Sun)
  63877168800, #    local_end 2025-03-09 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63877197600, #    utc_start 2025-03-09 10:00:00 (Sun)
  63897757200, #      utc_end 2025-11-02 09:00:00 (Sun)
  63877172400, #  local_start 2025-03-09 03:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63897757200, #    utc_start 2025-11-02 09:00:00 (Sun)
  63908647200, #      utc_end 2026-03-08 10:00:00 (Sun)
  63897728400, #  local_start 2025-11-02 01:00:00 (Sun)
  63908618400, #    local_end 2026-03-08 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63908647200, #    utc_start 2026-03-08 10:00:00 (Sun)
  63929206800, #      utc_end 2026-11-01 09:00:00 (Sun)
  63908622000, #  local_start 2026-03-08 03:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
      [
  63929206800, #    utc_start 2026-11-01 09:00:00 (Sun)
  63940701600, #      utc_end 2027-03-14 10:00:00 (Sun)
  63929178000, #  local_start 2026-11-01 01:00:00 (Sun)
  63940672800, #    local_end 2027-03-14 02:00:00 (Sun)
  -28800,
  0,
  'PST',
      ],
      [
  63940701600, #    utc_start 2027-03-14 10:00:00 (Sun)
  63961261200, #      utc_end 2027-11-07 09:00:00 (Sun)
  63940676400, #  local_start 2027-03-14 03:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  -25200,
  1,
  'PDT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {65}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -28800 }
  
  my $last_observance = bless( {
    'format' => 'P%sT',
    'gmtoff' => '-8:00',
    'local_start_datetime' => {},
    'offset_from_std' => 0,
    'offset_from_utc' => -28800,
    'until' => [],
    'utc_start_datetime' => {}
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'US',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2007',
      'in' => 'Mar',
      'letter' => 'D',
      'name' => 'US',
      'offset_from_std' => 3600,
      'on' => 'Sun>=8',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_PST8PDT

    $main::fatpacked{"DateTime/TimeZone/Pacific/Apia.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_APIA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Apia;
  $DateTime::TimeZone::Pacific::Apia::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Apia::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59279945216, #      utc_end 1879-07-04 11:26:56 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59279990400, #    local_end 1879-07-05 00:00:00 (Sat)
  45184,
  0,
  'LMT',
      ],
      [
  59279945216, #    utc_start 1879-07-04 11:26:56 (Fri)
  60273804416, #      utc_end 1911-01-01 11:26:56 (Sun)
  59279904000, #  local_start 1879-07-04 00:00:00 (Fri)
  60273763200, #    local_end 1911-01-01 00:00:00 (Sun)
  -41216,
  0,
  'LMT',
      ],
      [
  60273804416, #    utc_start 1911-01-01 11:26:56 (Sun)
  61504572600, #      utc_end 1950-01-01 11:30:00 (Sun)
  60273763016, #  local_start 1910-12-31 23:56:56 (Sat)
  61504531200, #    local_end 1950-01-01 00:00:00 (Sun)
  -41400,
  0,
  'WSST',
      ],
      [
  61504572600, #    utc_start 1950-01-01 11:30:00 (Sun)
  63421182000, #      utc_end 2010-09-26 11:00:00 (Sun)
  61504533000, #  local_start 1950-01-01 00:30:00 (Sun)
  63421142400, #    local_end 2010-09-26 00:00:00 (Sun)
  -39600,
  0,
  'SST',
      ],
      [
  63421182000, #    utc_start 2010-09-26 11:00:00 (Sun)
  63437436000, #      utc_end 2011-04-02 14:00:00 (Sat)
  63421146000, #  local_start 2010-09-26 01:00:00 (Sun)
  63437400000, #    local_end 2011-04-02 04:00:00 (Sat)
  -36000,
  1,
  'SDT',
      ],
      [
  63437436000, #    utc_start 2011-04-02 14:00:00 (Sat)
  63452556000, #      utc_end 2011-09-24 14:00:00 (Sat)
  63437396400, #  local_start 2011-04-02 03:00:00 (Sat)
  63452516400, #    local_end 2011-09-24 03:00:00 (Sat)
  -39600,
  0,
  'SST',
      ],
      [
  63452556000, #    utc_start 2011-09-24 14:00:00 (Sat)
  63460922400, #      utc_end 2011-12-30 10:00:00 (Fri)
  63452520000, #  local_start 2011-09-24 04:00:00 (Sat)
  63460886400, #    local_end 2011-12-30 00:00:00 (Fri)
  -36000,
  1,
  'SDT',
      ],
      [
  63460922400, #    utc_start 2011-12-30 10:00:00 (Fri)
  63468885600, #      utc_end 2012-03-31 14:00:00 (Sat)
  63460972800, #  local_start 2011-12-31 00:00:00 (Sat)
  63468936000, #    local_end 2012-04-01 04:00:00 (Sun)
  50400,
  1,
  'WSDT',
      ],
      [
  63468885600, #    utc_start 2012-03-31 14:00:00 (Sat)
  63484610400, #      utc_end 2012-09-29 14:00:00 (Sat)
  63468932400, #  local_start 2012-04-01 03:00:00 (Sun)
  63484657200, #    local_end 2012-09-30 03:00:00 (Sun)
  46800,
  0,
  'WSST',
      ],
      [
  63484610400, #    utc_start 2012-09-29 14:00:00 (Sat)
  63500940000, #      utc_end 2013-04-06 14:00:00 (Sat)
  63484660800, #  local_start 2012-09-30 04:00:00 (Sun)
  63500990400, #    local_end 2013-04-07 04:00:00 (Sun)
  50400,
  1,
  'WSDT',
      ],
      [
  63500940000, #    utc_start 2013-04-06 14:00:00 (Sat)
  63516060000, #      utc_end 2013-09-28 14:00:00 (Sat)
  63500986800, #  local_start 2013-04-07 03:00:00 (Sun)
  63516106800, #    local_end 2013-09-29 03:00:00 (Sun)
  46800,
  0,
  'WSST',
      ],
      [
  63516060000, #    utc_start 2013-09-28 14:00:00 (Sat)
  63532389600, #      utc_end 2014-04-05 14:00:00 (Sat)
  63516110400, #  local_start 2013-09-29 04:00:00 (Sun)
  63532440000, #    local_end 2014-04-06 04:00:00 (Sun)
  50400,
  1,
  'WSDT',
      ],
      [
  63532389600, #    utc_start 2014-04-05 14:00:00 (Sat)
  63547509600, #      utc_end 2014-09-27 14:00:00 (Sat)
  63532436400, #  local_start 2014-04-06 03:00:00 (Sun)
  63547556400, #    local_end 2014-09-28 03:00:00 (Sun)
  46800,
  0,
  'WSST',
      ],
      [
  63547509600, #    utc_start 2014-09-27 14:00:00 (Sat)
  63563839200, #      utc_end 2015-04-04 14:00:00 (Sat)
  63547560000, #  local_start 2014-09-28 04:00:00 (Sun)
  63563889600, #    local_end 2015-04-05 04:00:00 (Sun)
  50400,
  1,
  'WSDT',
      ],
      [
  63563839200, #    utc_start 2015-04-04 14:00:00 (Sat)
  63578959200, #      utc_end 2015-09-26 14:00:00 (Sat)
  63563886000, #  local_start 2015-04-05 03:00:00 (Sun)
  63579006000, #    local_end 2015-09-27 03:00:00 (Sun)
  46800,
  0,
  'WSST',
      ],
      [
  63578959200, #    utc_start 2015-09-26 14:00:00 (Sat)
  63595288800, #      utc_end 2016-04-02 14:00:00 (Sat)
  63579009600, #  local_start 2015-09-27 04:00:00 (Sun)
  63595339200, #    local_end 2016-04-03 04:00:00 (Sun)
  50400,
  1,
  'WSDT',
      ],
      [
  63595288800, #    utc_start 2016-04-02 14:00:00 (Sat)
  63610408800, #      utc_end 2016-09-24 14:00:00 (Sat)
  63595335600, #  local_start 2016-04-03 03:00:00 (Sun)
  63610455600, #    local_end 2016-09-25 03:00:00 (Sun)
  46800,
  0,
  'WSST',
      ],
      [
  63610408800, #    utc_start 2016-09-24 14:00:00 (Sat)
  63626738400, #      utc_end 2017-04-01 14:00:00 (Sat)
  63610459200, #  local_start 2016-09-25 04:00:00 (Sun)
  63626788800, #    local_end 2017-04-02 04:00:00 (Sun)
  50400,
  1,
  'WSDT',
      ],
      [
  63626738400, #    utc_start 2017-04-01 14:00:00 (Sat)
  63641858400, #      utc_end 2017-09-23 14:00:00 (Sat)
  63626785200, #  local_start 2017-04-02 03:00:00 (Sun)
  63641905200, #    local_end 2017-09-24 03:00:00 (Sun)
  46800,
  0,
  'WSST',
      ],
      [
  63641858400, #    utc_start 2017-09-23 14:00:00 (Sat)
  63658188000, #      utc_end 2018-03-31 14:00:00 (Sat)
  63641908800, #  local_start 2017-09-24 04:00:00 (Sun)
  63658238400, #    local_end 2018-04-01 04:00:00 (Sun)
  50400,
  1,
  'WSDT',
      ],
      [
  63658188000, #    utc_start 2018-03-31 14:00:00 (Sat)
  63673912800, #      utc_end 2018-09-29 14:00:00 (Sat)
  63658234800, #  local_start 2018-04-01 03:00:00 (Sun)
  63673959600, #    local_end 2018-09-30 03:00:00 (Sun)
  46800,
  0,
  'WSST',
      ],
      [
  63673912800, #    utc_start 2018-09-29 14:00:00 (Sat)
  63690242400, #      utc_end 2019-04-06 14:00:00 (Sat)
  63673963200, #  local_start 2018-09-30 04:00:00 (Sun)
  63690292800, #    local_end 2019-04-07 04:00:00 (Sun)
  50400,
  1,
  'WSDT',
      ],
      [
  63690242400, #    utc_start 2019-04-06 14:00:00 (Sat)
  63705362400, #      utc_end 2019-09-28 14:00:00 (Sat)
  63690289200, #  local_start 2019-04-07 03:00:00 (Sun)
  63705409200, #    local_end 2019-09-29 03:00:00 (Sun)
  46800,
  0,
  'WSST',
      ],
      [
  63705362400, #    utc_start 2019-09-28 14:00:00 (Sat)
  63721692000, #      utc_end 2020-04-04 14:00:00 (Sat)
  63705412800, #  local_start 2019-09-29 04:00:00 (Sun)
  63721742400, #    local_end 2020-04-05 04:00:00 (Sun)
  50400,
  1,
  'WSDT',
      ],
      [
  63721692000, #    utc_start 2020-04-04 14:00:00 (Sat)
  63736812000, #      utc_end 2020-09-26 14:00:00 (Sat)
  63721738800, #  local_start 2020-04-05 03:00:00 (Sun)
  63736858800, #    local_end 2020-09-27 03:00:00 (Sun)
  46800,
  0,
  'WSST',
      ],
      [
  63736812000, #    utc_start 2020-09-26 14:00:00 (Sat)
  63753141600, #      utc_end 2021-04-03 14:00:00 (Sat)
  63736862400, #  local_start 2020-09-27 04:00:00 (Sun)
  63753192000, #    local_end 2021-04-04 04:00:00 (Sun)
  50400,
  1,
  'WSDT',
      ],
      [
  63753141600, #    utc_start 2021-04-03 14:00:00 (Sat)
  63768261600, #      utc_end 2021-09-25 14:00:00 (Sat)
  63753188400, #  local_start 2021-04-04 03:00:00 (Sun)
  63768308400, #    local_end 2021-09-26 03:00:00 (Sun)
  46800,
  0,
  'WSST',
      ],
      [
  63768261600, #    utc_start 2021-09-25 14:00:00 (Sat)
  63784591200, #      utc_end 2022-04-02 14:00:00 (Sat)
  63768312000, #  local_start 2021-09-26 04:00:00 (Sun)
  63784641600, #    local_end 2022-04-03 04:00:00 (Sun)
  50400,
  1,
  'WSDT',
      ],
      [
  63784591200, #    utc_start 2022-04-02 14:00:00 (Sat)
  63799711200, #      utc_end 2022-09-24 14:00:00 (Sat)
  63784638000, #  local_start 2022-04-03 03:00:00 (Sun)
  63799758000, #    local_end 2022-09-25 03:00:00 (Sun)
  46800,
  0,
  'WSST',
      ],
      [
  63799711200, #    utc_start 2022-09-24 14:00:00 (Sat)
  63816040800, #      utc_end 2023-04-01 14:00:00 (Sat)
  63799761600, #  local_start 2022-09-25 04:00:00 (Sun)
  63816091200, #    local_end 2023-04-02 04:00:00 (Sun)
  50400,
  1,
  'WSDT',
      ],
      [
  63816040800, #    utc_start 2023-04-01 14:00:00 (Sat)
  63831160800, #      utc_end 2023-09-23 14:00:00 (Sat)
  63816087600, #  local_start 2023-04-02 03:00:00 (Sun)
  63831207600, #    local_end 2023-09-24 03:00:00 (Sun)
  46800,
  0,
  'WSST',
      ],
      [
  63831160800, #    utc_start 2023-09-23 14:00:00 (Sat)
  63848095200, #      utc_end 2024-04-06 14:00:00 (Sat)
  63831211200, #  local_start 2023-09-24 04:00:00 (Sun)
  63848145600, #    local_end 2024-04-07 04:00:00 (Sun)
  50400,
  1,
  'WSDT',
      ],
      [
  63848095200, #    utc_start 2024-04-06 14:00:00 (Sat)
  63863215200, #      utc_end 2024-09-28 14:00:00 (Sat)
  63848142000, #  local_start 2024-04-07 03:00:00 (Sun)
  63863262000, #    local_end 2024-09-29 03:00:00 (Sun)
  46800,
  0,
  'WSST',
      ],
      [
  63863215200, #    utc_start 2024-09-28 14:00:00 (Sat)
  63879544800, #      utc_end 2025-04-05 14:00:00 (Sat)
  63863265600, #  local_start 2024-09-29 04:00:00 (Sun)
  63879595200, #    local_end 2025-04-06 04:00:00 (Sun)
  50400,
  1,
  'WSDT',
      ],
      [
  63879544800, #    utc_start 2025-04-05 14:00:00 (Sat)
  63894664800, #      utc_end 2025-09-27 14:00:00 (Sat)
  63879591600, #  local_start 2025-04-06 03:00:00 (Sun)
  63894711600, #    local_end 2025-09-28 03:00:00 (Sun)
  46800,
  0,
  'WSST',
      ],
      [
  63894664800, #    utc_start 2025-09-27 14:00:00 (Sat)
  63910994400, #      utc_end 2026-04-04 14:00:00 (Sat)
  63894715200, #  local_start 2025-09-28 04:00:00 (Sun)
  63911044800, #    local_end 2026-04-05 04:00:00 (Sun)
  50400,
  1,
  'WSDT',
      ],
      [
  63910994400, #    utc_start 2026-04-04 14:00:00 (Sat)
  63926114400, #      utc_end 2026-09-26 14:00:00 (Sat)
  63911041200, #  local_start 2026-04-05 03:00:00 (Sun)
  63926161200, #    local_end 2026-09-27 03:00:00 (Sun)
  46800,
  0,
  'WSST',
      ],
      [
  63926114400, #    utc_start 2026-09-26 14:00:00 (Sat)
  63942444000, #      utc_end 2027-04-03 14:00:00 (Sat)
  63926164800, #  local_start 2026-09-27 04:00:00 (Sun)
  63942494400, #    local_end 2027-04-04 04:00:00 (Sun)
  50400,
  1,
  'WSDT',
      ],
      [
  63942444000, #    utc_start 2027-04-03 14:00:00 (Sat)
  63957564000, #      utc_end 2027-09-25 14:00:00 (Sat)
  63942490800, #  local_start 2027-04-04 03:00:00 (Sun)
  63957610800, #    local_end 2027-09-26 03:00:00 (Sun)
  46800,
  0,
  'WSST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {19}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 46800 }
  
  my $last_observance = bless( {
    'format' => 'WS%sT',
    'gmtoff' => '13:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 734502,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 734502,
      'utc_rd_secs' => 0,
      'utc_year' => 2012
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 46800,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 734501,
      'local_rd_secs' => 36000,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 734501,
      'utc_rd_secs' => 36000,
      'utc_year' => 2012
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '3:00',
      'from' => '2012',
      'in' => 'Sep',
      'letter' => 'D',
      'name' => 'WS',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '4:00',
      'from' => '2012',
      'in' => 'Apr',
      'letter' => 'S',
      'name' => 'WS',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_APIA

    $main::fatpacked{"DateTime/TimeZone/Pacific/Auckland.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_AUCKLAND';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Auckland;
  $DateTime::TimeZone::Pacific::Auckland::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Auckland::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  58943247656, #      utc_end 1868-11-01 12:20:56 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  58943289600, #    local_end 1868-11-02 00:00:00 (Mon)
  41944,
  0,
  'LMT',
      ],
      [
  58943247656, #    utc_start 1868-11-01 12:20:56 (Sun)
  60805348200, #      utc_end 1927-11-05 14:30:00 (Sat)
  58943289056, #  local_start 1868-11-01 23:50:56 (Sun)
  60805389600, #    local_end 1927-11-06 02:00:00 (Sun)
  41400,
  0,
  'NZMT',
      ],
      [
  60805348200, #    utc_start 1927-11-05 14:30:00 (Sat)
  60815626200, #      utc_end 1928-03-03 13:30:00 (Sat)
  60805393200, #  local_start 1927-11-06 03:00:00 (Sun)
  60815671200, #    local_end 1928-03-04 02:00:00 (Sun)
  45000,
  1,
  'NZST',
      ],
      [
  60815626200, #    utc_start 1928-03-03 13:30:00 (Sat)
  60834983400, #      utc_end 1928-10-13 14:30:00 (Sat)
  60815667600, #  local_start 1928-03-04 01:00:00 (Sun)
  60835024800, #    local_end 1928-10-14 02:00:00 (Sun)
  41400,
  0,
  'NZMT',
      ],
      [
  60834983400, #    utc_start 1928-10-13 14:30:00 (Sat)
  60848287200, #      utc_end 1929-03-16 14:00:00 (Sat)
  60835026600, #  local_start 1928-10-14 02:30:00 (Sun)
  60848330400, #    local_end 1929-03-17 02:00:00 (Sun)
  43200,
  1,
  'NZST',
      ],
      [
  60848287200, #    utc_start 1929-03-16 14:00:00 (Sat)
  60866433000, #      utc_end 1929-10-12 14:30:00 (Sat)
  60848328600, #  local_start 1929-03-17 01:30:00 (Sun)
  60866474400, #    local_end 1929-10-13 02:00:00 (Sun)
  41400,
  0,
  'NZMT',
      ],
      [
  60866433000, #    utc_start 1929-10-12 14:30:00 (Sat)
  60879736800, #      utc_end 1930-03-15 14:00:00 (Sat)
  60866476200, #  local_start 1929-10-13 02:30:00 (Sun)
  60879780000, #    local_end 1930-03-16 02:00:00 (Sun)
  43200,
  1,
  'NZST',
      ],
      [
  60879736800, #    utc_start 1930-03-15 14:00:00 (Sat)
  60897882600, #      utc_end 1930-10-11 14:30:00 (Sat)
  60879778200, #  local_start 1930-03-16 01:30:00 (Sun)
  60897924000, #    local_end 1930-10-12 02:00:00 (Sun)
  41400,
  0,
  'NZMT',
      ],
      [
  60897882600, #    utc_start 1930-10-11 14:30:00 (Sat)
  60911186400, #      utc_end 1931-03-14 14:00:00 (Sat)
  60897925800, #  local_start 1930-10-12 02:30:00 (Sun)
  60911229600, #    local_end 1931-03-15 02:00:00 (Sun)
  43200,
  1,
  'NZST',
      ],
      [
  60911186400, #    utc_start 1931-03-14 14:00:00 (Sat)
  60929332200, #      utc_end 1931-10-10 14:30:00 (Sat)
  60911227800, #  local_start 1931-03-15 01:30:00 (Sun)
  60929373600, #    local_end 1931-10-11 02:00:00 (Sun)
  41400,
  0,
  'NZMT',
      ],
      [
  60929332200, #    utc_start 1931-10-10 14:30:00 (Sat)
  60943240800, #      utc_end 1932-03-19 14:00:00 (Sat)
  60929375400, #  local_start 1931-10-11 02:30:00 (Sun)
  60943284000, #    local_end 1932-03-20 02:00:00 (Sun)
  43200,
  1,
  'NZST',
      ],
      [
  60943240800, #    utc_start 1932-03-19 14:00:00 (Sat)
  60960781800, #      utc_end 1932-10-08 14:30:00 (Sat)
  60943282200, #  local_start 1932-03-20 01:30:00 (Sun)
  60960823200, #    local_end 1932-10-09 02:00:00 (Sun)
  41400,
  0,
  'NZMT',
      ],
      [
  60960781800, #    utc_start 1932-10-08 14:30:00 (Sat)
  60974690400, #      utc_end 1933-03-18 14:00:00 (Sat)
  60960825000, #  local_start 1932-10-09 02:30:00 (Sun)
  60974733600, #    local_end 1933-03-19 02:00:00 (Sun)
  43200,
  1,
  'NZST',
      ],
      [
  60974690400, #    utc_start 1933-03-18 14:00:00 (Sat)
  60992231400, #      utc_end 1933-10-07 14:30:00 (Sat)
  60974731800, #  local_start 1933-03-19 01:30:00 (Sun)
  60992272800, #    local_end 1933-10-08 02:00:00 (Sun)
  41400,
  0,
  'NZMT',
      ],
      [
  60992231400, #    utc_start 1933-10-07 14:30:00 (Sat)
  61009768800, #      utc_end 1934-04-28 14:00:00 (Sat)
  60992274600, #  local_start 1933-10-08 02:30:00 (Sun)
  61009812000, #    local_end 1934-04-29 02:00:00 (Sun)
  43200,
  1,
  'NZST',
      ],
      [
  61009768800, #    utc_start 1934-04-28 14:00:00 (Sat)
  61023076200, #      utc_end 1934-09-29 14:30:00 (Sat)
  61009810200, #  local_start 1934-04-29 01:30:00 (Sun)
  61023117600, #    local_end 1934-09-30 02:00:00 (Sun)
  41400,
  0,
  'NZMT',
      ],
      [
  61023076200, #    utc_start 1934-09-29 14:30:00 (Sat)
  61041218400, #      utc_end 1935-04-27 14:00:00 (Sat)
  61023119400, #  local_start 1934-09-30 02:30:00 (Sun)
  61041261600, #    local_end 1935-04-28 02:00:00 (Sun)
  43200,
  1,
  'NZST',
      ],
      [
  61041218400, #    utc_start 1935-04-27 14:00:00 (Sat)
  61054525800, #      utc_end 1935-09-28 14:30:00 (Sat)
  61041259800, #  local_start 1935-04-28 01:30:00 (Sun)
  61054567200, #    local_end 1935-09-29 02:00:00 (Sun)
  41400,
  0,
  'NZMT',
      ],
      [
  61054525800, #    utc_start 1935-09-28 14:30:00 (Sat)
  61072668000, #      utc_end 1936-04-25 14:00:00 (Sat)
  61054569000, #  local_start 1935-09-29 02:30:00 (Sun)
  61072711200, #    local_end 1936-04-26 02:00:00 (Sun)
  43200,
  1,
  'NZST',
      ],
      [
  61072668000, #    utc_start 1936-04-25 14:00:00 (Sat)
  61085975400, #      utc_end 1936-09-26 14:30:00 (Sat)
  61072709400, #  local_start 1936-04-26 01:30:00 (Sun)
  61086016800, #    local_end 1936-09-27 02:00:00 (Sun)
  41400,
  0,
  'NZMT',
      ],
      [
  61085975400, #    utc_start 1936-09-26 14:30:00 (Sat)
  61104117600, #      utc_end 1937-04-24 14:00:00 (Sat)
  61086018600, #  local_start 1936-09-27 02:30:00 (Sun)
  61104160800, #    local_end 1937-04-25 02:00:00 (Sun)
  43200,
  1,
  'NZST',
      ],
      [
  61104117600, #    utc_start 1937-04-24 14:00:00 (Sat)
  61117425000, #      utc_end 1937-09-25 14:30:00 (Sat)
  61104159000, #  local_start 1937-04-25 01:30:00 (Sun)
  61117466400, #    local_end 1937-09-26 02:00:00 (Sun)
  41400,
  0,
  'NZMT',
      ],
      [
  61117425000, #    utc_start 1937-09-25 14:30:00 (Sat)
  61135567200, #      utc_end 1938-04-23 14:00:00 (Sat)
  61117468200, #  local_start 1937-09-26 02:30:00 (Sun)
  61135610400, #    local_end 1938-04-24 02:00:00 (Sun)
  43200,
  1,
  'NZST',
      ],
      [
  61135567200, #    utc_start 1938-04-23 14:00:00 (Sat)
  61148874600, #      utc_end 1938-09-24 14:30:00 (Sat)
  61135608600, #  local_start 1938-04-24 01:30:00 (Sun)
  61148916000, #    local_end 1938-09-25 02:00:00 (Sun)
  41400,
  0,
  'NZMT',
      ],
      [
  61148874600, #    utc_start 1938-09-24 14:30:00 (Sat)
  61167621600, #      utc_end 1939-04-29 14:00:00 (Sat)
  61148917800, #  local_start 1938-09-25 02:30:00 (Sun)
  61167664800, #    local_end 1939-04-30 02:00:00 (Sun)
  43200,
  1,
  'NZST',
      ],
      [
  61167621600, #    utc_start 1939-04-29 14:00:00 (Sat)
  61180324200, #      utc_end 1939-09-23 14:30:00 (Sat)
  61167663000, #  local_start 1939-04-30 01:30:00 (Sun)
  61180365600, #    local_end 1939-09-24 02:00:00 (Sun)
  41400,
  0,
  'NZMT',
      ],
      [
  61180324200, #    utc_start 1939-09-23 14:30:00 (Sat)
  61199071200, #      utc_end 1940-04-27 14:00:00 (Sat)
  61180367400, #  local_start 1939-09-24 02:30:00 (Sun)
  61199114400, #    local_end 1940-04-28 02:00:00 (Sun)
  43200,
  1,
  'NZST',
      ],
      [
  61199071200, #    utc_start 1940-04-27 14:00:00 (Sat)
  61212378600, #      utc_end 1940-09-28 14:30:00 (Sat)
  61199112600, #  local_start 1940-04-28 01:30:00 (Sun)
  61212420000, #    local_end 1940-09-29 02:00:00 (Sun)
  41400,
  0,
  'NZMT',
      ],
      [
  61212378600, #    utc_start 1940-09-28 14:30:00 (Sat)
  61378257600, #      utc_end 1945-12-31 12:00:00 (Mon)
  61212421800, #  local_start 1940-09-29 02:30:00 (Sun)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  43200,
  1,
  'NZST',
      ],
      [
  61378257600, #    utc_start 1945-12-31 12:00:00 (Mon)
  62288316000, #      utc_end 1974-11-02 14:00:00 (Sat)
  61378300800, #  local_start 1946-01-01 00:00:00 (Tue)
  62288359200, #    local_end 1974-11-03 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62288316000, #    utc_start 1974-11-02 14:00:00 (Sat)
  62297992800, #      utc_end 1975-02-22 14:00:00 (Sat)
  62288362800, #  local_start 1974-11-03 03:00:00 (Sun)
  62298039600, #    local_end 1975-02-23 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62297992800, #    utc_start 1975-02-22 14:00:00 (Sat)
  62319160800, #      utc_end 1975-10-25 14:00:00 (Sat)
  62298036000, #  local_start 1975-02-23 02:00:00 (Sun)
  62319204000, #    local_end 1975-10-26 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62319160800, #    utc_start 1975-10-25 14:00:00 (Sat)
  62330652000, #      utc_end 1976-03-06 14:00:00 (Sat)
  62319207600, #  local_start 1975-10-26 03:00:00 (Sun)
  62330698800, #    local_end 1976-03-07 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62330652000, #    utc_start 1976-03-06 14:00:00 (Sat)
  62351215200, #      utc_end 1976-10-30 14:00:00 (Sat)
  62330695200, #  local_start 1976-03-07 02:00:00 (Sun)
  62351258400, #    local_end 1976-10-31 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62351215200, #    utc_start 1976-10-30 14:00:00 (Sat)
  62362101600, #      utc_end 1977-03-05 14:00:00 (Sat)
  62351262000, #  local_start 1976-10-31 03:00:00 (Sun)
  62362148400, #    local_end 1977-03-06 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62362101600, #    utc_start 1977-03-05 14:00:00 (Sat)
  62382664800, #      utc_end 1977-10-29 14:00:00 (Sat)
  62362144800, #  local_start 1977-03-06 02:00:00 (Sun)
  62382708000, #    local_end 1977-10-30 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62382664800, #    utc_start 1977-10-29 14:00:00 (Sat)
  62393551200, #      utc_end 1978-03-04 14:00:00 (Sat)
  62382711600, #  local_start 1977-10-30 03:00:00 (Sun)
  62393598000, #    local_end 1978-03-05 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62393551200, #    utc_start 1978-03-04 14:00:00 (Sat)
  62414114400, #      utc_end 1978-10-28 14:00:00 (Sat)
  62393594400, #  local_start 1978-03-05 02:00:00 (Sun)
  62414157600, #    local_end 1978-10-29 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62414114400, #    utc_start 1978-10-28 14:00:00 (Sat)
  62425000800, #      utc_end 1979-03-03 14:00:00 (Sat)
  62414161200, #  local_start 1978-10-29 03:00:00 (Sun)
  62425047600, #    local_end 1979-03-04 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62425000800, #    utc_start 1979-03-03 14:00:00 (Sat)
  62445564000, #      utc_end 1979-10-27 14:00:00 (Sat)
  62425044000, #  local_start 1979-03-04 02:00:00 (Sun)
  62445607200, #    local_end 1979-10-28 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62445564000, #    utc_start 1979-10-27 14:00:00 (Sat)
  62456450400, #      utc_end 1980-03-01 14:00:00 (Sat)
  62445610800, #  local_start 1979-10-28 03:00:00 (Sun)
  62456497200, #    local_end 1980-03-02 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62456450400, #    utc_start 1980-03-01 14:00:00 (Sat)
  62477013600, #      utc_end 1980-10-25 14:00:00 (Sat)
  62456493600, #  local_start 1980-03-02 02:00:00 (Sun)
  62477056800, #    local_end 1980-10-26 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62477013600, #    utc_start 1980-10-25 14:00:00 (Sat)
  62487900000, #      utc_end 1981-02-28 14:00:00 (Sat)
  62477060400, #  local_start 1980-10-26 03:00:00 (Sun)
  62487946800, #    local_end 1981-03-01 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62487900000, #    utc_start 1981-02-28 14:00:00 (Sat)
  62508463200, #      utc_end 1981-10-24 14:00:00 (Sat)
  62487943200, #  local_start 1981-03-01 02:00:00 (Sun)
  62508506400, #    local_end 1981-10-25 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62508463200, #    utc_start 1981-10-24 14:00:00 (Sat)
  62519954400, #      utc_end 1982-03-06 14:00:00 (Sat)
  62508510000, #  local_start 1981-10-25 03:00:00 (Sun)
  62520001200, #    local_end 1982-03-07 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62519954400, #    utc_start 1982-03-06 14:00:00 (Sat)
  62540517600, #      utc_end 1982-10-30 14:00:00 (Sat)
  62519997600, #  local_start 1982-03-07 02:00:00 (Sun)
  62540560800, #    local_end 1982-10-31 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62540517600, #    utc_start 1982-10-30 14:00:00 (Sat)
  62551404000, #      utc_end 1983-03-05 14:00:00 (Sat)
  62540564400, #  local_start 1982-10-31 03:00:00 (Sun)
  62551450800, #    local_end 1983-03-06 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62551404000, #    utc_start 1983-03-05 14:00:00 (Sat)
  62571967200, #      utc_end 1983-10-29 14:00:00 (Sat)
  62551447200, #  local_start 1983-03-06 02:00:00 (Sun)
  62572010400, #    local_end 1983-10-30 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62571967200, #    utc_start 1983-10-29 14:00:00 (Sat)
  62582853600, #      utc_end 1984-03-03 14:00:00 (Sat)
  62572014000, #  local_start 1983-10-30 03:00:00 (Sun)
  62582900400, #    local_end 1984-03-04 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62582853600, #    utc_start 1984-03-03 14:00:00 (Sat)
  62603416800, #      utc_end 1984-10-27 14:00:00 (Sat)
  62582896800, #  local_start 1984-03-04 02:00:00 (Sun)
  62603460000, #    local_end 1984-10-28 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62603416800, #    utc_start 1984-10-27 14:00:00 (Sat)
  62614303200, #      utc_end 1985-03-02 14:00:00 (Sat)
  62603463600, #  local_start 1984-10-28 03:00:00 (Sun)
  62614350000, #    local_end 1985-03-03 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62614303200, #    utc_start 1985-03-02 14:00:00 (Sat)
  62634866400, #      utc_end 1985-10-26 14:00:00 (Sat)
  62614346400, #  local_start 1985-03-03 02:00:00 (Sun)
  62634909600, #    local_end 1985-10-27 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62634866400, #    utc_start 1985-10-26 14:00:00 (Sat)
  62645752800, #      utc_end 1986-03-01 14:00:00 (Sat)
  62634913200, #  local_start 1985-10-27 03:00:00 (Sun)
  62645799600, #    local_end 1986-03-02 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62645752800, #    utc_start 1986-03-01 14:00:00 (Sat)
  62666316000, #      utc_end 1986-10-25 14:00:00 (Sat)
  62645796000, #  local_start 1986-03-02 02:00:00 (Sun)
  62666359200, #    local_end 1986-10-26 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62666316000, #    utc_start 1986-10-25 14:00:00 (Sat)
  62677202400, #      utc_end 1987-02-28 14:00:00 (Sat)
  62666362800, #  local_start 1986-10-26 03:00:00 (Sun)
  62677249200, #    local_end 1987-03-01 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62677202400, #    utc_start 1987-02-28 14:00:00 (Sat)
  62697765600, #      utc_end 1987-10-24 14:00:00 (Sat)
  62677245600, #  local_start 1987-03-01 02:00:00 (Sun)
  62697808800, #    local_end 1987-10-25 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62697765600, #    utc_start 1987-10-24 14:00:00 (Sat)
  62709256800, #      utc_end 1988-03-05 14:00:00 (Sat)
  62697812400, #  local_start 1987-10-25 03:00:00 (Sun)
  62709303600, #    local_end 1988-03-06 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62709256800, #    utc_start 1988-03-05 14:00:00 (Sat)
  62729820000, #      utc_end 1988-10-29 14:00:00 (Sat)
  62709300000, #  local_start 1988-03-06 02:00:00 (Sun)
  62729863200, #    local_end 1988-10-30 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62729820000, #    utc_start 1988-10-29 14:00:00 (Sat)
  62740706400, #      utc_end 1989-03-04 14:00:00 (Sat)
  62729866800, #  local_start 1988-10-30 03:00:00 (Sun)
  62740753200, #    local_end 1989-03-05 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62740706400, #    utc_start 1989-03-04 14:00:00 (Sat)
  62759455200, #      utc_end 1989-10-07 14:00:00 (Sat)
  62740749600, #  local_start 1989-03-05 02:00:00 (Sun)
  62759498400, #    local_end 1989-10-08 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62759455200, #    utc_start 1989-10-07 14:00:00 (Sat)
  62773365600, #      utc_end 1990-03-17 14:00:00 (Sat)
  62759502000, #  local_start 1989-10-08 03:00:00 (Sun)
  62773412400, #    local_end 1990-03-18 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62773365600, #    utc_start 1990-03-17 14:00:00 (Sat)
  62790904800, #      utc_end 1990-10-06 14:00:00 (Sat)
  62773408800, #  local_start 1990-03-18 02:00:00 (Sun)
  62790948000, #    local_end 1990-10-07 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62790904800, #    utc_start 1990-10-06 14:00:00 (Sat)
  62804815200, #      utc_end 1991-03-16 14:00:00 (Sat)
  62790951600, #  local_start 1990-10-07 03:00:00 (Sun)
  62804862000, #    local_end 1991-03-17 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62804815200, #    utc_start 1991-03-16 14:00:00 (Sat)
  62822354400, #      utc_end 1991-10-05 14:00:00 (Sat)
  62804858400, #  local_start 1991-03-17 02:00:00 (Sun)
  62822397600, #    local_end 1991-10-06 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62822354400, #    utc_start 1991-10-05 14:00:00 (Sat)
  62836264800, #      utc_end 1992-03-14 14:00:00 (Sat)
  62822401200, #  local_start 1991-10-06 03:00:00 (Sun)
  62836311600, #    local_end 1992-03-15 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62836264800, #    utc_start 1992-03-14 14:00:00 (Sat)
  62853804000, #      utc_end 1992-10-03 14:00:00 (Sat)
  62836308000, #  local_start 1992-03-15 02:00:00 (Sun)
  62853847200, #    local_end 1992-10-04 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62853804000, #    utc_start 1992-10-03 14:00:00 (Sat)
  62868319200, #      utc_end 1993-03-20 14:00:00 (Sat)
  62853850800, #  local_start 1992-10-04 03:00:00 (Sun)
  62868366000, #    local_end 1993-03-21 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62868319200, #    utc_start 1993-03-20 14:00:00 (Sat)
  62885253600, #      utc_end 1993-10-02 14:00:00 (Sat)
  62868362400, #  local_start 1993-03-21 02:00:00 (Sun)
  62885296800, #    local_end 1993-10-03 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62885253600, #    utc_start 1993-10-02 14:00:00 (Sat)
  62899768800, #      utc_end 1994-03-19 14:00:00 (Sat)
  62885300400, #  local_start 1993-10-03 03:00:00 (Sun)
  62899815600, #    local_end 1994-03-20 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62899768800, #    utc_start 1994-03-19 14:00:00 (Sat)
  62916703200, #      utc_end 1994-10-01 14:00:00 (Sat)
  62899812000, #  local_start 1994-03-20 02:00:00 (Sun)
  62916746400, #    local_end 1994-10-02 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62916703200, #    utc_start 1994-10-01 14:00:00 (Sat)
  62931218400, #      utc_end 1995-03-18 14:00:00 (Sat)
  62916750000, #  local_start 1994-10-02 03:00:00 (Sun)
  62931265200, #    local_end 1995-03-19 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62931218400, #    utc_start 1995-03-18 14:00:00 (Sat)
  62948152800, #      utc_end 1995-09-30 14:00:00 (Sat)
  62931261600, #  local_start 1995-03-19 02:00:00 (Sun)
  62948196000, #    local_end 1995-10-01 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62948152800, #    utc_start 1995-09-30 14:00:00 (Sat)
  62962668000, #      utc_end 1996-03-16 14:00:00 (Sat)
  62948199600, #  local_start 1995-10-01 03:00:00 (Sun)
  62962714800, #    local_end 1996-03-17 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62962668000, #    utc_start 1996-03-16 14:00:00 (Sat)
  62980207200, #      utc_end 1996-10-05 14:00:00 (Sat)
  62962711200, #  local_start 1996-03-17 02:00:00 (Sun)
  62980250400, #    local_end 1996-10-06 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  62980207200, #    utc_start 1996-10-05 14:00:00 (Sat)
  62994117600, #      utc_end 1997-03-15 14:00:00 (Sat)
  62980254000, #  local_start 1996-10-06 03:00:00 (Sun)
  62994164400, #    local_end 1997-03-16 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  62994117600, #    utc_start 1997-03-15 14:00:00 (Sat)
  63011656800, #      utc_end 1997-10-04 14:00:00 (Sat)
  62994160800, #  local_start 1997-03-16 02:00:00 (Sun)
  63011700000, #    local_end 1997-10-05 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63011656800, #    utc_start 1997-10-04 14:00:00 (Sat)
  63025567200, #      utc_end 1998-03-14 14:00:00 (Sat)
  63011703600, #  local_start 1997-10-05 03:00:00 (Sun)
  63025614000, #    local_end 1998-03-15 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63025567200, #    utc_start 1998-03-14 14:00:00 (Sat)
  63043106400, #      utc_end 1998-10-03 14:00:00 (Sat)
  63025610400, #  local_start 1998-03-15 02:00:00 (Sun)
  63043149600, #    local_end 1998-10-04 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63043106400, #    utc_start 1998-10-03 14:00:00 (Sat)
  63057621600, #      utc_end 1999-03-20 14:00:00 (Sat)
  63043153200, #  local_start 1998-10-04 03:00:00 (Sun)
  63057668400, #    local_end 1999-03-21 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63057621600, #    utc_start 1999-03-20 14:00:00 (Sat)
  63074556000, #      utc_end 1999-10-02 14:00:00 (Sat)
  63057664800, #  local_start 1999-03-21 02:00:00 (Sun)
  63074599200, #    local_end 1999-10-03 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63074556000, #    utc_start 1999-10-02 14:00:00 (Sat)
  63089071200, #      utc_end 2000-03-18 14:00:00 (Sat)
  63074602800, #  local_start 1999-10-03 03:00:00 (Sun)
  63089118000, #    local_end 2000-03-19 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63089071200, #    utc_start 2000-03-18 14:00:00 (Sat)
  63106005600, #      utc_end 2000-09-30 14:00:00 (Sat)
  63089114400, #  local_start 2000-03-19 02:00:00 (Sun)
  63106048800, #    local_end 2000-10-01 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63106005600, #    utc_start 2000-09-30 14:00:00 (Sat)
  63120520800, #      utc_end 2001-03-17 14:00:00 (Sat)
  63106052400, #  local_start 2000-10-01 03:00:00 (Sun)
  63120567600, #    local_end 2001-03-18 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63120520800, #    utc_start 2001-03-17 14:00:00 (Sat)
  63138060000, #      utc_end 2001-10-06 14:00:00 (Sat)
  63120564000, #  local_start 2001-03-18 02:00:00 (Sun)
  63138103200, #    local_end 2001-10-07 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63138060000, #    utc_start 2001-10-06 14:00:00 (Sat)
  63151970400, #      utc_end 2002-03-16 14:00:00 (Sat)
  63138106800, #  local_start 2001-10-07 03:00:00 (Sun)
  63152017200, #    local_end 2002-03-17 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63151970400, #    utc_start 2002-03-16 14:00:00 (Sat)
  63169509600, #      utc_end 2002-10-05 14:00:00 (Sat)
  63152013600, #  local_start 2002-03-17 02:00:00 (Sun)
  63169552800, #    local_end 2002-10-06 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63169509600, #    utc_start 2002-10-05 14:00:00 (Sat)
  63183420000, #      utc_end 2003-03-15 14:00:00 (Sat)
  63169556400, #  local_start 2002-10-06 03:00:00 (Sun)
  63183466800, #    local_end 2003-03-16 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63183420000, #    utc_start 2003-03-15 14:00:00 (Sat)
  63200959200, #      utc_end 2003-10-04 14:00:00 (Sat)
  63183463200, #  local_start 2003-03-16 02:00:00 (Sun)
  63201002400, #    local_end 2003-10-05 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63200959200, #    utc_start 2003-10-04 14:00:00 (Sat)
  63215474400, #      utc_end 2004-03-20 14:00:00 (Sat)
  63201006000, #  local_start 2003-10-05 03:00:00 (Sun)
  63215521200, #    local_end 2004-03-21 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63215474400, #    utc_start 2004-03-20 14:00:00 (Sat)
  63232408800, #      utc_end 2004-10-02 14:00:00 (Sat)
  63215517600, #  local_start 2004-03-21 02:00:00 (Sun)
  63232452000, #    local_end 2004-10-03 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63232408800, #    utc_start 2004-10-02 14:00:00 (Sat)
  63246924000, #      utc_end 2005-03-19 14:00:00 (Sat)
  63232455600, #  local_start 2004-10-03 03:00:00 (Sun)
  63246970800, #    local_end 2005-03-20 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63246924000, #    utc_start 2005-03-19 14:00:00 (Sat)
  63263858400, #      utc_end 2005-10-01 14:00:00 (Sat)
  63246967200, #  local_start 2005-03-20 02:00:00 (Sun)
  63263901600, #    local_end 2005-10-02 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63263858400, #    utc_start 2005-10-01 14:00:00 (Sat)
  63278373600, #      utc_end 2006-03-18 14:00:00 (Sat)
  63263905200, #  local_start 2005-10-02 03:00:00 (Sun)
  63278420400, #    local_end 2006-03-19 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63278373600, #    utc_start 2006-03-18 14:00:00 (Sat)
  63295308000, #      utc_end 2006-09-30 14:00:00 (Sat)
  63278416800, #  local_start 2006-03-19 02:00:00 (Sun)
  63295351200, #    local_end 2006-10-01 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63295308000, #    utc_start 2006-09-30 14:00:00 (Sat)
  63309823200, #      utc_end 2007-03-17 14:00:00 (Sat)
  63295354800, #  local_start 2006-10-01 03:00:00 (Sun)
  63309870000, #    local_end 2007-03-18 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63309823200, #    utc_start 2007-03-17 14:00:00 (Sat)
  63326757600, #      utc_end 2007-09-29 14:00:00 (Sat)
  63309866400, #  local_start 2007-03-18 02:00:00 (Sun)
  63326800800, #    local_end 2007-09-30 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63326757600, #    utc_start 2007-09-29 14:00:00 (Sat)
  63343087200, #      utc_end 2008-04-05 14:00:00 (Sat)
  63326804400, #  local_start 2007-09-30 03:00:00 (Sun)
  63343134000, #    local_end 2008-04-06 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63343087200, #    utc_start 2008-04-05 14:00:00 (Sat)
  63358207200, #      utc_end 2008-09-27 14:00:00 (Sat)
  63343130400, #  local_start 2008-04-06 02:00:00 (Sun)
  63358250400, #    local_end 2008-09-28 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63358207200, #    utc_start 2008-09-27 14:00:00 (Sat)
  63374536800, #      utc_end 2009-04-04 14:00:00 (Sat)
  63358254000, #  local_start 2008-09-28 03:00:00 (Sun)
  63374583600, #    local_end 2009-04-05 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63374536800, #    utc_start 2009-04-04 14:00:00 (Sat)
  63389656800, #      utc_end 2009-09-26 14:00:00 (Sat)
  63374580000, #  local_start 2009-04-05 02:00:00 (Sun)
  63389700000, #    local_end 2009-09-27 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63389656800, #    utc_start 2009-09-26 14:00:00 (Sat)
  63405986400, #      utc_end 2010-04-03 14:00:00 (Sat)
  63389703600, #  local_start 2009-09-27 03:00:00 (Sun)
  63406033200, #    local_end 2010-04-04 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63405986400, #    utc_start 2010-04-03 14:00:00 (Sat)
  63421106400, #      utc_end 2010-09-25 14:00:00 (Sat)
  63406029600, #  local_start 2010-04-04 02:00:00 (Sun)
  63421149600, #    local_end 2010-09-26 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63421106400, #    utc_start 2010-09-25 14:00:00 (Sat)
  63437436000, #      utc_end 2011-04-02 14:00:00 (Sat)
  63421153200, #  local_start 2010-09-26 03:00:00 (Sun)
  63437482800, #    local_end 2011-04-03 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63437436000, #    utc_start 2011-04-02 14:00:00 (Sat)
  63452556000, #      utc_end 2011-09-24 14:00:00 (Sat)
  63437479200, #  local_start 2011-04-03 02:00:00 (Sun)
  63452599200, #    local_end 2011-09-25 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63452556000, #    utc_start 2011-09-24 14:00:00 (Sat)
  63468885600, #      utc_end 2012-03-31 14:00:00 (Sat)
  63452602800, #  local_start 2011-09-25 03:00:00 (Sun)
  63468932400, #    local_end 2012-04-01 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63468885600, #    utc_start 2012-03-31 14:00:00 (Sat)
  63484610400, #      utc_end 2012-09-29 14:00:00 (Sat)
  63468928800, #  local_start 2012-04-01 02:00:00 (Sun)
  63484653600, #    local_end 2012-09-30 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63484610400, #    utc_start 2012-09-29 14:00:00 (Sat)
  63500940000, #      utc_end 2013-04-06 14:00:00 (Sat)
  63484657200, #  local_start 2012-09-30 03:00:00 (Sun)
  63500986800, #    local_end 2013-04-07 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63500940000, #    utc_start 2013-04-06 14:00:00 (Sat)
  63516060000, #      utc_end 2013-09-28 14:00:00 (Sat)
  63500983200, #  local_start 2013-04-07 02:00:00 (Sun)
  63516103200, #    local_end 2013-09-29 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63516060000, #    utc_start 2013-09-28 14:00:00 (Sat)
  63532389600, #      utc_end 2014-04-05 14:00:00 (Sat)
  63516106800, #  local_start 2013-09-29 03:00:00 (Sun)
  63532436400, #    local_end 2014-04-06 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63532389600, #    utc_start 2014-04-05 14:00:00 (Sat)
  63547509600, #      utc_end 2014-09-27 14:00:00 (Sat)
  63532432800, #  local_start 2014-04-06 02:00:00 (Sun)
  63547552800, #    local_end 2014-09-28 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63547509600, #    utc_start 2014-09-27 14:00:00 (Sat)
  63563839200, #      utc_end 2015-04-04 14:00:00 (Sat)
  63547556400, #  local_start 2014-09-28 03:00:00 (Sun)
  63563886000, #    local_end 2015-04-05 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63563839200, #    utc_start 2015-04-04 14:00:00 (Sat)
  63578959200, #      utc_end 2015-09-26 14:00:00 (Sat)
  63563882400, #  local_start 2015-04-05 02:00:00 (Sun)
  63579002400, #    local_end 2015-09-27 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63578959200, #    utc_start 2015-09-26 14:00:00 (Sat)
  63595288800, #      utc_end 2016-04-02 14:00:00 (Sat)
  63579006000, #  local_start 2015-09-27 03:00:00 (Sun)
  63595335600, #    local_end 2016-04-03 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63595288800, #    utc_start 2016-04-02 14:00:00 (Sat)
  63610408800, #      utc_end 2016-09-24 14:00:00 (Sat)
  63595332000, #  local_start 2016-04-03 02:00:00 (Sun)
  63610452000, #    local_end 2016-09-25 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63610408800, #    utc_start 2016-09-24 14:00:00 (Sat)
  63626738400, #      utc_end 2017-04-01 14:00:00 (Sat)
  63610455600, #  local_start 2016-09-25 03:00:00 (Sun)
  63626785200, #    local_end 2017-04-02 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63626738400, #    utc_start 2017-04-01 14:00:00 (Sat)
  63641858400, #      utc_end 2017-09-23 14:00:00 (Sat)
  63626781600, #  local_start 2017-04-02 02:00:00 (Sun)
  63641901600, #    local_end 2017-09-24 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63641858400, #    utc_start 2017-09-23 14:00:00 (Sat)
  63658188000, #      utc_end 2018-03-31 14:00:00 (Sat)
  63641905200, #  local_start 2017-09-24 03:00:00 (Sun)
  63658234800, #    local_end 2018-04-01 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63658188000, #    utc_start 2018-03-31 14:00:00 (Sat)
  63673912800, #      utc_end 2018-09-29 14:00:00 (Sat)
  63658231200, #  local_start 2018-04-01 02:00:00 (Sun)
  63673956000, #    local_end 2018-09-30 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63673912800, #    utc_start 2018-09-29 14:00:00 (Sat)
  63690242400, #      utc_end 2019-04-06 14:00:00 (Sat)
  63673959600, #  local_start 2018-09-30 03:00:00 (Sun)
  63690289200, #    local_end 2019-04-07 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63690242400, #    utc_start 2019-04-06 14:00:00 (Sat)
  63705362400, #      utc_end 2019-09-28 14:00:00 (Sat)
  63690285600, #  local_start 2019-04-07 02:00:00 (Sun)
  63705405600, #    local_end 2019-09-29 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63705362400, #    utc_start 2019-09-28 14:00:00 (Sat)
  63721692000, #      utc_end 2020-04-04 14:00:00 (Sat)
  63705409200, #  local_start 2019-09-29 03:00:00 (Sun)
  63721738800, #    local_end 2020-04-05 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63721692000, #    utc_start 2020-04-04 14:00:00 (Sat)
  63736812000, #      utc_end 2020-09-26 14:00:00 (Sat)
  63721735200, #  local_start 2020-04-05 02:00:00 (Sun)
  63736855200, #    local_end 2020-09-27 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63736812000, #    utc_start 2020-09-26 14:00:00 (Sat)
  63753141600, #      utc_end 2021-04-03 14:00:00 (Sat)
  63736858800, #  local_start 2020-09-27 03:00:00 (Sun)
  63753188400, #    local_end 2021-04-04 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63753141600, #    utc_start 2021-04-03 14:00:00 (Sat)
  63768261600, #      utc_end 2021-09-25 14:00:00 (Sat)
  63753184800, #  local_start 2021-04-04 02:00:00 (Sun)
  63768304800, #    local_end 2021-09-26 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63768261600, #    utc_start 2021-09-25 14:00:00 (Sat)
  63784591200, #      utc_end 2022-04-02 14:00:00 (Sat)
  63768308400, #  local_start 2021-09-26 03:00:00 (Sun)
  63784638000, #    local_end 2022-04-03 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63784591200, #    utc_start 2022-04-02 14:00:00 (Sat)
  63799711200, #      utc_end 2022-09-24 14:00:00 (Sat)
  63784634400, #  local_start 2022-04-03 02:00:00 (Sun)
  63799754400, #    local_end 2022-09-25 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63799711200, #    utc_start 2022-09-24 14:00:00 (Sat)
  63816040800, #      utc_end 2023-04-01 14:00:00 (Sat)
  63799758000, #  local_start 2022-09-25 03:00:00 (Sun)
  63816087600, #    local_end 2023-04-02 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63816040800, #    utc_start 2023-04-01 14:00:00 (Sat)
  63831160800, #      utc_end 2023-09-23 14:00:00 (Sat)
  63816084000, #  local_start 2023-04-02 02:00:00 (Sun)
  63831204000, #    local_end 2023-09-24 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63831160800, #    utc_start 2023-09-23 14:00:00 (Sat)
  63848095200, #      utc_end 2024-04-06 14:00:00 (Sat)
  63831207600, #  local_start 2023-09-24 03:00:00 (Sun)
  63848142000, #    local_end 2024-04-07 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63848095200, #    utc_start 2024-04-06 14:00:00 (Sat)
  63863215200, #      utc_end 2024-09-28 14:00:00 (Sat)
  63848138400, #  local_start 2024-04-07 02:00:00 (Sun)
  63863258400, #    local_end 2024-09-29 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63863215200, #    utc_start 2024-09-28 14:00:00 (Sat)
  63879544800, #      utc_end 2025-04-05 14:00:00 (Sat)
  63863262000, #  local_start 2024-09-29 03:00:00 (Sun)
  63879591600, #    local_end 2025-04-06 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63879544800, #    utc_start 2025-04-05 14:00:00 (Sat)
  63894664800, #      utc_end 2025-09-27 14:00:00 (Sat)
  63879588000, #  local_start 2025-04-06 02:00:00 (Sun)
  63894708000, #    local_end 2025-09-28 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63894664800, #    utc_start 2025-09-27 14:00:00 (Sat)
  63910994400, #      utc_end 2026-04-04 14:00:00 (Sat)
  63894711600, #  local_start 2025-09-28 03:00:00 (Sun)
  63911041200, #    local_end 2026-04-05 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63910994400, #    utc_start 2026-04-04 14:00:00 (Sat)
  63926114400, #      utc_end 2026-09-26 14:00:00 (Sat)
  63911037600, #  local_start 2026-04-05 02:00:00 (Sun)
  63926157600, #    local_end 2026-09-27 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
      [
  63926114400, #    utc_start 2026-09-26 14:00:00 (Sat)
  63942444000, #      utc_end 2027-04-03 14:00:00 (Sat)
  63926161200, #  local_start 2026-09-27 03:00:00 (Sun)
  63942490800, #    local_end 2027-04-04 03:00:00 (Sun)
  46800,
  1,
  'NZDT',
      ],
      [
  63942444000, #    utc_start 2027-04-03 14:00:00 (Sat)
  63957564000, #      utc_end 2027-09-25 14:00:00 (Sat)
  63942487200, #  local_start 2027-04-04 02:00:00 (Sun)
  63957607200, #    local_end 2027-09-26 02:00:00 (Sun)
  43200,
  0,
  'NZST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {68}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 43200 }
  
  my $last_observance = bless( {
    'format' => 'NZ%sT',
    'gmtoff' => '12:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 710397,
      'local_rd_secs' => 0,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 710397,
      'utc_rd_secs' => 0,
      'utc_year' => 1947
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 43200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 710396,
      'local_rd_secs' => 43200,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 710396,
      'utc_rd_secs' => 43200,
      'utc_year' => 1946
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:00s',
      'from' => '2008',
      'in' => 'Apr',
      'letter' => 'S',
      'name' => 'NZ',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00s',
      'from' => '2007',
      'in' => 'Sep',
      'letter' => 'D',
      'name' => 'NZ',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_AUCKLAND

    $main::fatpacked{"DateTime/TimeZone/Pacific/Bougainville.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_BOUGAINVILLE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Bougainville;
  $DateTime::TimeZone::Pacific::Bougainville::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Bougainville::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295505064, #      utc_end 1879-12-31 13:37:44 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  37336,
  0,
  'LMT',
      ],
      [
  59295505064, #    utc_start 1879-12-31 13:37:44 (Wed)
  59768892688, #      utc_end 1894-12-31 14:11:28 (Mon)
  59295540376, #  local_start 1879-12-31 23:26:16 (Wed)
  59768928000, #    local_end 1895-01-01 00:00:00 (Tue)
  35312,
  0,
  'PMMT',
      ],
      [
  59768892688, #    utc_start 1894-12-31 14:11:28 (Mon)
  61267672800, #      utc_end 1942-06-30 14:00:00 (Tue)
  59768928688, #  local_start 1895-01-01 00:11:28 (Tue)
  61267708800, #    local_end 1942-07-01 00:00:00 (Wed)
  36000,
  0,
  'PGT',
      ],
      [
  61267672800, #    utc_start 1942-06-30 14:00:00 (Tue)
  61366777200, #      utc_end 1945-08-20 15:00:00 (Mon)
  61267705200, #  local_start 1942-06-30 23:00:00 (Tue)
  61366809600, #    local_end 1945-08-21 00:00:00 (Tue)
  32400,
  0,
  'JST',
      ],
      [
  61366777200, #    utc_start 1945-08-20 15:00:00 (Mon)
  63555379200, #      utc_end 2014-12-27 16:00:00 (Sat)
  61366813200, #  local_start 1945-08-21 01:00:00 (Tue)
  63555415200, #    local_end 2014-12-28 02:00:00 (Sun)
  36000,
  0,
  'PGT',
      ],
      [
  63555379200, #    utc_start 2014-12-27 16:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63555418800, #  local_start 2014-12-28 03:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  39600,
  0,
  'BST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_BOUGAINVILLE

    $main::fatpacked{"DateTime/TimeZone/Pacific/Chatham.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_CHATHAM';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Chatham;
  $DateTime::TimeZone::Pacific::Chatham::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Chatham::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  58943245572, #      utc_end 1868-11-01 11:46:12 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  58943289600, #    local_end 1868-11-02 00:00:00 (Mon)
  44028,
  0,
  'LMT',
      ],
      [
  58943245572, #    utc_start 1868-11-01 11:46:12 (Sun)
  61378256700, #      utc_end 1945-12-31 11:45:00 (Mon)
  58943289672, #  local_start 1868-11-02 00:01:12 (Mon)
  61378300800, #    local_end 1946-01-01 00:00:00 (Tue)
  44100,
  0,
  'CHAST',
      ],
      [
  61378256700, #    utc_start 1945-12-31 11:45:00 (Mon)
  62288316000, #      utc_end 1974-11-02 14:00:00 (Sat)
  61378302600, #  local_start 1946-01-01 00:30:00 (Tue)
  62288361900, #    local_end 1974-11-03 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62288316000, #    utc_start 1974-11-02 14:00:00 (Sat)
  62297992800, #      utc_end 1975-02-22 14:00:00 (Sat)
  62288365500, #  local_start 1974-11-03 03:45:00 (Sun)
  62298042300, #    local_end 1975-02-23 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62297992800, #    utc_start 1975-02-22 14:00:00 (Sat)
  62319160800, #      utc_end 1975-10-25 14:00:00 (Sat)
  62298038700, #  local_start 1975-02-23 02:45:00 (Sun)
  62319206700, #    local_end 1975-10-26 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62319160800, #    utc_start 1975-10-25 14:00:00 (Sat)
  62330652000, #      utc_end 1976-03-06 14:00:00 (Sat)
  62319210300, #  local_start 1975-10-26 03:45:00 (Sun)
  62330701500, #    local_end 1976-03-07 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62330652000, #    utc_start 1976-03-06 14:00:00 (Sat)
  62351215200, #      utc_end 1976-10-30 14:00:00 (Sat)
  62330697900, #  local_start 1976-03-07 02:45:00 (Sun)
  62351261100, #    local_end 1976-10-31 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62351215200, #    utc_start 1976-10-30 14:00:00 (Sat)
  62362101600, #      utc_end 1977-03-05 14:00:00 (Sat)
  62351264700, #  local_start 1976-10-31 03:45:00 (Sun)
  62362151100, #    local_end 1977-03-06 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62362101600, #    utc_start 1977-03-05 14:00:00 (Sat)
  62382664800, #      utc_end 1977-10-29 14:00:00 (Sat)
  62362147500, #  local_start 1977-03-06 02:45:00 (Sun)
  62382710700, #    local_end 1977-10-30 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62382664800, #    utc_start 1977-10-29 14:00:00 (Sat)
  62393551200, #      utc_end 1978-03-04 14:00:00 (Sat)
  62382714300, #  local_start 1977-10-30 03:45:00 (Sun)
  62393600700, #    local_end 1978-03-05 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62393551200, #    utc_start 1978-03-04 14:00:00 (Sat)
  62414114400, #      utc_end 1978-10-28 14:00:00 (Sat)
  62393597100, #  local_start 1978-03-05 02:45:00 (Sun)
  62414160300, #    local_end 1978-10-29 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62414114400, #    utc_start 1978-10-28 14:00:00 (Sat)
  62425000800, #      utc_end 1979-03-03 14:00:00 (Sat)
  62414163900, #  local_start 1978-10-29 03:45:00 (Sun)
  62425050300, #    local_end 1979-03-04 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62425000800, #    utc_start 1979-03-03 14:00:00 (Sat)
  62445564000, #      utc_end 1979-10-27 14:00:00 (Sat)
  62425046700, #  local_start 1979-03-04 02:45:00 (Sun)
  62445609900, #    local_end 1979-10-28 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62445564000, #    utc_start 1979-10-27 14:00:00 (Sat)
  62456450400, #      utc_end 1980-03-01 14:00:00 (Sat)
  62445613500, #  local_start 1979-10-28 03:45:00 (Sun)
  62456499900, #    local_end 1980-03-02 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62456450400, #    utc_start 1980-03-01 14:00:00 (Sat)
  62477013600, #      utc_end 1980-10-25 14:00:00 (Sat)
  62456496300, #  local_start 1980-03-02 02:45:00 (Sun)
  62477059500, #    local_end 1980-10-26 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62477013600, #    utc_start 1980-10-25 14:00:00 (Sat)
  62487900000, #      utc_end 1981-02-28 14:00:00 (Sat)
  62477063100, #  local_start 1980-10-26 03:45:00 (Sun)
  62487949500, #    local_end 1981-03-01 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62487900000, #    utc_start 1981-02-28 14:00:00 (Sat)
  62508463200, #      utc_end 1981-10-24 14:00:00 (Sat)
  62487945900, #  local_start 1981-03-01 02:45:00 (Sun)
  62508509100, #    local_end 1981-10-25 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62508463200, #    utc_start 1981-10-24 14:00:00 (Sat)
  62519954400, #      utc_end 1982-03-06 14:00:00 (Sat)
  62508512700, #  local_start 1981-10-25 03:45:00 (Sun)
  62520003900, #    local_end 1982-03-07 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62519954400, #    utc_start 1982-03-06 14:00:00 (Sat)
  62540517600, #      utc_end 1982-10-30 14:00:00 (Sat)
  62520000300, #  local_start 1982-03-07 02:45:00 (Sun)
  62540563500, #    local_end 1982-10-31 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62540517600, #    utc_start 1982-10-30 14:00:00 (Sat)
  62551404000, #      utc_end 1983-03-05 14:00:00 (Sat)
  62540567100, #  local_start 1982-10-31 03:45:00 (Sun)
  62551453500, #    local_end 1983-03-06 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62551404000, #    utc_start 1983-03-05 14:00:00 (Sat)
  62571967200, #      utc_end 1983-10-29 14:00:00 (Sat)
  62551449900, #  local_start 1983-03-06 02:45:00 (Sun)
  62572013100, #    local_end 1983-10-30 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62571967200, #    utc_start 1983-10-29 14:00:00 (Sat)
  62582853600, #      utc_end 1984-03-03 14:00:00 (Sat)
  62572016700, #  local_start 1983-10-30 03:45:00 (Sun)
  62582903100, #    local_end 1984-03-04 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62582853600, #    utc_start 1984-03-03 14:00:00 (Sat)
  62603416800, #      utc_end 1984-10-27 14:00:00 (Sat)
  62582899500, #  local_start 1984-03-04 02:45:00 (Sun)
  62603462700, #    local_end 1984-10-28 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62603416800, #    utc_start 1984-10-27 14:00:00 (Sat)
  62614303200, #      utc_end 1985-03-02 14:00:00 (Sat)
  62603466300, #  local_start 1984-10-28 03:45:00 (Sun)
  62614352700, #    local_end 1985-03-03 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62614303200, #    utc_start 1985-03-02 14:00:00 (Sat)
  62634866400, #      utc_end 1985-10-26 14:00:00 (Sat)
  62614349100, #  local_start 1985-03-03 02:45:00 (Sun)
  62634912300, #    local_end 1985-10-27 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62634866400, #    utc_start 1985-10-26 14:00:00 (Sat)
  62645752800, #      utc_end 1986-03-01 14:00:00 (Sat)
  62634915900, #  local_start 1985-10-27 03:45:00 (Sun)
  62645802300, #    local_end 1986-03-02 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62645752800, #    utc_start 1986-03-01 14:00:00 (Sat)
  62666316000, #      utc_end 1986-10-25 14:00:00 (Sat)
  62645798700, #  local_start 1986-03-02 02:45:00 (Sun)
  62666361900, #    local_end 1986-10-26 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62666316000, #    utc_start 1986-10-25 14:00:00 (Sat)
  62677202400, #      utc_end 1987-02-28 14:00:00 (Sat)
  62666365500, #  local_start 1986-10-26 03:45:00 (Sun)
  62677251900, #    local_end 1987-03-01 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62677202400, #    utc_start 1987-02-28 14:00:00 (Sat)
  62697765600, #      utc_end 1987-10-24 14:00:00 (Sat)
  62677248300, #  local_start 1987-03-01 02:45:00 (Sun)
  62697811500, #    local_end 1987-10-25 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62697765600, #    utc_start 1987-10-24 14:00:00 (Sat)
  62709256800, #      utc_end 1988-03-05 14:00:00 (Sat)
  62697815100, #  local_start 1987-10-25 03:45:00 (Sun)
  62709306300, #    local_end 1988-03-06 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62709256800, #    utc_start 1988-03-05 14:00:00 (Sat)
  62729820000, #      utc_end 1988-10-29 14:00:00 (Sat)
  62709302700, #  local_start 1988-03-06 02:45:00 (Sun)
  62729865900, #    local_end 1988-10-30 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62729820000, #    utc_start 1988-10-29 14:00:00 (Sat)
  62740706400, #      utc_end 1989-03-04 14:00:00 (Sat)
  62729869500, #  local_start 1988-10-30 03:45:00 (Sun)
  62740755900, #    local_end 1989-03-05 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62740706400, #    utc_start 1989-03-04 14:00:00 (Sat)
  62759455200, #      utc_end 1989-10-07 14:00:00 (Sat)
  62740752300, #  local_start 1989-03-05 02:45:00 (Sun)
  62759501100, #    local_end 1989-10-08 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62759455200, #    utc_start 1989-10-07 14:00:00 (Sat)
  62773365600, #      utc_end 1990-03-17 14:00:00 (Sat)
  62759504700, #  local_start 1989-10-08 03:45:00 (Sun)
  62773415100, #    local_end 1990-03-18 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62773365600, #    utc_start 1990-03-17 14:00:00 (Sat)
  62790904800, #      utc_end 1990-10-06 14:00:00 (Sat)
  62773411500, #  local_start 1990-03-18 02:45:00 (Sun)
  62790950700, #    local_end 1990-10-07 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62790904800, #    utc_start 1990-10-06 14:00:00 (Sat)
  62804815200, #      utc_end 1991-03-16 14:00:00 (Sat)
  62790954300, #  local_start 1990-10-07 03:45:00 (Sun)
  62804864700, #    local_end 1991-03-17 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62804815200, #    utc_start 1991-03-16 14:00:00 (Sat)
  62822354400, #      utc_end 1991-10-05 14:00:00 (Sat)
  62804861100, #  local_start 1991-03-17 02:45:00 (Sun)
  62822400300, #    local_end 1991-10-06 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62822354400, #    utc_start 1991-10-05 14:00:00 (Sat)
  62836264800, #      utc_end 1992-03-14 14:00:00 (Sat)
  62822403900, #  local_start 1991-10-06 03:45:00 (Sun)
  62836314300, #    local_end 1992-03-15 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62836264800, #    utc_start 1992-03-14 14:00:00 (Sat)
  62853804000, #      utc_end 1992-10-03 14:00:00 (Sat)
  62836310700, #  local_start 1992-03-15 02:45:00 (Sun)
  62853849900, #    local_end 1992-10-04 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62853804000, #    utc_start 1992-10-03 14:00:00 (Sat)
  62868319200, #      utc_end 1993-03-20 14:00:00 (Sat)
  62853853500, #  local_start 1992-10-04 03:45:00 (Sun)
  62868368700, #    local_end 1993-03-21 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62868319200, #    utc_start 1993-03-20 14:00:00 (Sat)
  62885253600, #      utc_end 1993-10-02 14:00:00 (Sat)
  62868365100, #  local_start 1993-03-21 02:45:00 (Sun)
  62885299500, #    local_end 1993-10-03 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62885253600, #    utc_start 1993-10-02 14:00:00 (Sat)
  62899768800, #      utc_end 1994-03-19 14:00:00 (Sat)
  62885303100, #  local_start 1993-10-03 03:45:00 (Sun)
  62899818300, #    local_end 1994-03-20 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62899768800, #    utc_start 1994-03-19 14:00:00 (Sat)
  62916703200, #      utc_end 1994-10-01 14:00:00 (Sat)
  62899814700, #  local_start 1994-03-20 02:45:00 (Sun)
  62916749100, #    local_end 1994-10-02 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62916703200, #    utc_start 1994-10-01 14:00:00 (Sat)
  62931218400, #      utc_end 1995-03-18 14:00:00 (Sat)
  62916752700, #  local_start 1994-10-02 03:45:00 (Sun)
  62931267900, #    local_end 1995-03-19 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62931218400, #    utc_start 1995-03-18 14:00:00 (Sat)
  62948152800, #      utc_end 1995-09-30 14:00:00 (Sat)
  62931264300, #  local_start 1995-03-19 02:45:00 (Sun)
  62948198700, #    local_end 1995-10-01 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62948152800, #    utc_start 1995-09-30 14:00:00 (Sat)
  62962668000, #      utc_end 1996-03-16 14:00:00 (Sat)
  62948202300, #  local_start 1995-10-01 03:45:00 (Sun)
  62962717500, #    local_end 1996-03-17 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62962668000, #    utc_start 1996-03-16 14:00:00 (Sat)
  62980207200, #      utc_end 1996-10-05 14:00:00 (Sat)
  62962713900, #  local_start 1996-03-17 02:45:00 (Sun)
  62980253100, #    local_end 1996-10-06 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  62980207200, #    utc_start 1996-10-05 14:00:00 (Sat)
  62994117600, #      utc_end 1997-03-15 14:00:00 (Sat)
  62980256700, #  local_start 1996-10-06 03:45:00 (Sun)
  62994167100, #    local_end 1997-03-16 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  62994117600, #    utc_start 1997-03-15 14:00:00 (Sat)
  63011656800, #      utc_end 1997-10-04 14:00:00 (Sat)
  62994163500, #  local_start 1997-03-16 02:45:00 (Sun)
  63011702700, #    local_end 1997-10-05 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63011656800, #    utc_start 1997-10-04 14:00:00 (Sat)
  63025567200, #      utc_end 1998-03-14 14:00:00 (Sat)
  63011706300, #  local_start 1997-10-05 03:45:00 (Sun)
  63025616700, #    local_end 1998-03-15 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63025567200, #    utc_start 1998-03-14 14:00:00 (Sat)
  63043106400, #      utc_end 1998-10-03 14:00:00 (Sat)
  63025613100, #  local_start 1998-03-15 02:45:00 (Sun)
  63043152300, #    local_end 1998-10-04 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63043106400, #    utc_start 1998-10-03 14:00:00 (Sat)
  63057621600, #      utc_end 1999-03-20 14:00:00 (Sat)
  63043155900, #  local_start 1998-10-04 03:45:00 (Sun)
  63057671100, #    local_end 1999-03-21 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63057621600, #    utc_start 1999-03-20 14:00:00 (Sat)
  63074556000, #      utc_end 1999-10-02 14:00:00 (Sat)
  63057667500, #  local_start 1999-03-21 02:45:00 (Sun)
  63074601900, #    local_end 1999-10-03 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63074556000, #    utc_start 1999-10-02 14:00:00 (Sat)
  63089071200, #      utc_end 2000-03-18 14:00:00 (Sat)
  63074605500, #  local_start 1999-10-03 03:45:00 (Sun)
  63089120700, #    local_end 2000-03-19 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63089071200, #    utc_start 2000-03-18 14:00:00 (Sat)
  63106005600, #      utc_end 2000-09-30 14:00:00 (Sat)
  63089117100, #  local_start 2000-03-19 02:45:00 (Sun)
  63106051500, #    local_end 2000-10-01 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63106005600, #    utc_start 2000-09-30 14:00:00 (Sat)
  63120520800, #      utc_end 2001-03-17 14:00:00 (Sat)
  63106055100, #  local_start 2000-10-01 03:45:00 (Sun)
  63120570300, #    local_end 2001-03-18 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63120520800, #    utc_start 2001-03-17 14:00:00 (Sat)
  63138060000, #      utc_end 2001-10-06 14:00:00 (Sat)
  63120566700, #  local_start 2001-03-18 02:45:00 (Sun)
  63138105900, #    local_end 2001-10-07 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63138060000, #    utc_start 2001-10-06 14:00:00 (Sat)
  63151970400, #      utc_end 2002-03-16 14:00:00 (Sat)
  63138109500, #  local_start 2001-10-07 03:45:00 (Sun)
  63152019900, #    local_end 2002-03-17 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63151970400, #    utc_start 2002-03-16 14:00:00 (Sat)
  63169509600, #      utc_end 2002-10-05 14:00:00 (Sat)
  63152016300, #  local_start 2002-03-17 02:45:00 (Sun)
  63169555500, #    local_end 2002-10-06 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63169509600, #    utc_start 2002-10-05 14:00:00 (Sat)
  63183420000, #      utc_end 2003-03-15 14:00:00 (Sat)
  63169559100, #  local_start 2002-10-06 03:45:00 (Sun)
  63183469500, #    local_end 2003-03-16 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63183420000, #    utc_start 2003-03-15 14:00:00 (Sat)
  63200959200, #      utc_end 2003-10-04 14:00:00 (Sat)
  63183465900, #  local_start 2003-03-16 02:45:00 (Sun)
  63201005100, #    local_end 2003-10-05 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63200959200, #    utc_start 2003-10-04 14:00:00 (Sat)
  63215474400, #      utc_end 2004-03-20 14:00:00 (Sat)
  63201008700, #  local_start 2003-10-05 03:45:00 (Sun)
  63215523900, #    local_end 2004-03-21 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63215474400, #    utc_start 2004-03-20 14:00:00 (Sat)
  63232408800, #      utc_end 2004-10-02 14:00:00 (Sat)
  63215520300, #  local_start 2004-03-21 02:45:00 (Sun)
  63232454700, #    local_end 2004-10-03 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63232408800, #    utc_start 2004-10-02 14:00:00 (Sat)
  63246924000, #      utc_end 2005-03-19 14:00:00 (Sat)
  63232458300, #  local_start 2004-10-03 03:45:00 (Sun)
  63246973500, #    local_end 2005-03-20 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63246924000, #    utc_start 2005-03-19 14:00:00 (Sat)
  63263858400, #      utc_end 2005-10-01 14:00:00 (Sat)
  63246969900, #  local_start 2005-03-20 02:45:00 (Sun)
  63263904300, #    local_end 2005-10-02 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63263858400, #    utc_start 2005-10-01 14:00:00 (Sat)
  63278373600, #      utc_end 2006-03-18 14:00:00 (Sat)
  63263907900, #  local_start 2005-10-02 03:45:00 (Sun)
  63278423100, #    local_end 2006-03-19 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63278373600, #    utc_start 2006-03-18 14:00:00 (Sat)
  63295308000, #      utc_end 2006-09-30 14:00:00 (Sat)
  63278419500, #  local_start 2006-03-19 02:45:00 (Sun)
  63295353900, #    local_end 2006-10-01 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63295308000, #    utc_start 2006-09-30 14:00:00 (Sat)
  63309823200, #      utc_end 2007-03-17 14:00:00 (Sat)
  63295357500, #  local_start 2006-10-01 03:45:00 (Sun)
  63309872700, #    local_end 2007-03-18 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63309823200, #    utc_start 2007-03-17 14:00:00 (Sat)
  63326757600, #      utc_end 2007-09-29 14:00:00 (Sat)
  63309869100, #  local_start 2007-03-18 02:45:00 (Sun)
  63326803500, #    local_end 2007-09-30 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63326757600, #    utc_start 2007-09-29 14:00:00 (Sat)
  63343087200, #      utc_end 2008-04-05 14:00:00 (Sat)
  63326807100, #  local_start 2007-09-30 03:45:00 (Sun)
  63343136700, #    local_end 2008-04-06 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63343087200, #    utc_start 2008-04-05 14:00:00 (Sat)
  63358207200, #      utc_end 2008-09-27 14:00:00 (Sat)
  63343133100, #  local_start 2008-04-06 02:45:00 (Sun)
  63358253100, #    local_end 2008-09-28 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63358207200, #    utc_start 2008-09-27 14:00:00 (Sat)
  63374536800, #      utc_end 2009-04-04 14:00:00 (Sat)
  63358256700, #  local_start 2008-09-28 03:45:00 (Sun)
  63374586300, #    local_end 2009-04-05 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63374536800, #    utc_start 2009-04-04 14:00:00 (Sat)
  63389656800, #      utc_end 2009-09-26 14:00:00 (Sat)
  63374582700, #  local_start 2009-04-05 02:45:00 (Sun)
  63389702700, #    local_end 2009-09-27 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63389656800, #    utc_start 2009-09-26 14:00:00 (Sat)
  63405986400, #      utc_end 2010-04-03 14:00:00 (Sat)
  63389706300, #  local_start 2009-09-27 03:45:00 (Sun)
  63406035900, #    local_end 2010-04-04 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63405986400, #    utc_start 2010-04-03 14:00:00 (Sat)
  63421106400, #      utc_end 2010-09-25 14:00:00 (Sat)
  63406032300, #  local_start 2010-04-04 02:45:00 (Sun)
  63421152300, #    local_end 2010-09-26 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63421106400, #    utc_start 2010-09-25 14:00:00 (Sat)
  63437436000, #      utc_end 2011-04-02 14:00:00 (Sat)
  63421155900, #  local_start 2010-09-26 03:45:00 (Sun)
  63437485500, #    local_end 2011-04-03 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63437436000, #    utc_start 2011-04-02 14:00:00 (Sat)
  63452556000, #      utc_end 2011-09-24 14:00:00 (Sat)
  63437481900, #  local_start 2011-04-03 02:45:00 (Sun)
  63452601900, #    local_end 2011-09-25 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63452556000, #    utc_start 2011-09-24 14:00:00 (Sat)
  63468885600, #      utc_end 2012-03-31 14:00:00 (Sat)
  63452605500, #  local_start 2011-09-25 03:45:00 (Sun)
  63468935100, #    local_end 2012-04-01 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63468885600, #    utc_start 2012-03-31 14:00:00 (Sat)
  63484610400, #      utc_end 2012-09-29 14:00:00 (Sat)
  63468931500, #  local_start 2012-04-01 02:45:00 (Sun)
  63484656300, #    local_end 2012-09-30 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63484610400, #    utc_start 2012-09-29 14:00:00 (Sat)
  63500940000, #      utc_end 2013-04-06 14:00:00 (Sat)
  63484659900, #  local_start 2012-09-30 03:45:00 (Sun)
  63500989500, #    local_end 2013-04-07 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63500940000, #    utc_start 2013-04-06 14:00:00 (Sat)
  63516060000, #      utc_end 2013-09-28 14:00:00 (Sat)
  63500985900, #  local_start 2013-04-07 02:45:00 (Sun)
  63516105900, #    local_end 2013-09-29 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63516060000, #    utc_start 2013-09-28 14:00:00 (Sat)
  63532389600, #      utc_end 2014-04-05 14:00:00 (Sat)
  63516109500, #  local_start 2013-09-29 03:45:00 (Sun)
  63532439100, #    local_end 2014-04-06 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63532389600, #    utc_start 2014-04-05 14:00:00 (Sat)
  63547509600, #      utc_end 2014-09-27 14:00:00 (Sat)
  63532435500, #  local_start 2014-04-06 02:45:00 (Sun)
  63547555500, #    local_end 2014-09-28 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63547509600, #    utc_start 2014-09-27 14:00:00 (Sat)
  63563839200, #      utc_end 2015-04-04 14:00:00 (Sat)
  63547559100, #  local_start 2014-09-28 03:45:00 (Sun)
  63563888700, #    local_end 2015-04-05 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63563839200, #    utc_start 2015-04-04 14:00:00 (Sat)
  63578959200, #      utc_end 2015-09-26 14:00:00 (Sat)
  63563885100, #  local_start 2015-04-05 02:45:00 (Sun)
  63579005100, #    local_end 2015-09-27 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63578959200, #    utc_start 2015-09-26 14:00:00 (Sat)
  63595288800, #      utc_end 2016-04-02 14:00:00 (Sat)
  63579008700, #  local_start 2015-09-27 03:45:00 (Sun)
  63595338300, #    local_end 2016-04-03 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63595288800, #    utc_start 2016-04-02 14:00:00 (Sat)
  63610408800, #      utc_end 2016-09-24 14:00:00 (Sat)
  63595334700, #  local_start 2016-04-03 02:45:00 (Sun)
  63610454700, #    local_end 2016-09-25 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63610408800, #    utc_start 2016-09-24 14:00:00 (Sat)
  63626738400, #      utc_end 2017-04-01 14:00:00 (Sat)
  63610458300, #  local_start 2016-09-25 03:45:00 (Sun)
  63626787900, #    local_end 2017-04-02 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63626738400, #    utc_start 2017-04-01 14:00:00 (Sat)
  63641858400, #      utc_end 2017-09-23 14:00:00 (Sat)
  63626784300, #  local_start 2017-04-02 02:45:00 (Sun)
  63641904300, #    local_end 2017-09-24 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63641858400, #    utc_start 2017-09-23 14:00:00 (Sat)
  63658188000, #      utc_end 2018-03-31 14:00:00 (Sat)
  63641907900, #  local_start 2017-09-24 03:45:00 (Sun)
  63658237500, #    local_end 2018-04-01 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63658188000, #    utc_start 2018-03-31 14:00:00 (Sat)
  63673912800, #      utc_end 2018-09-29 14:00:00 (Sat)
  63658233900, #  local_start 2018-04-01 02:45:00 (Sun)
  63673958700, #    local_end 2018-09-30 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63673912800, #    utc_start 2018-09-29 14:00:00 (Sat)
  63690242400, #      utc_end 2019-04-06 14:00:00 (Sat)
  63673962300, #  local_start 2018-09-30 03:45:00 (Sun)
  63690291900, #    local_end 2019-04-07 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63690242400, #    utc_start 2019-04-06 14:00:00 (Sat)
  63705362400, #      utc_end 2019-09-28 14:00:00 (Sat)
  63690288300, #  local_start 2019-04-07 02:45:00 (Sun)
  63705408300, #    local_end 2019-09-29 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63705362400, #    utc_start 2019-09-28 14:00:00 (Sat)
  63721692000, #      utc_end 2020-04-04 14:00:00 (Sat)
  63705411900, #  local_start 2019-09-29 03:45:00 (Sun)
  63721741500, #    local_end 2020-04-05 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63721692000, #    utc_start 2020-04-04 14:00:00 (Sat)
  63736812000, #      utc_end 2020-09-26 14:00:00 (Sat)
  63721737900, #  local_start 2020-04-05 02:45:00 (Sun)
  63736857900, #    local_end 2020-09-27 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63736812000, #    utc_start 2020-09-26 14:00:00 (Sat)
  63753141600, #      utc_end 2021-04-03 14:00:00 (Sat)
  63736861500, #  local_start 2020-09-27 03:45:00 (Sun)
  63753191100, #    local_end 2021-04-04 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63753141600, #    utc_start 2021-04-03 14:00:00 (Sat)
  63768261600, #      utc_end 2021-09-25 14:00:00 (Sat)
  63753187500, #  local_start 2021-04-04 02:45:00 (Sun)
  63768307500, #    local_end 2021-09-26 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63768261600, #    utc_start 2021-09-25 14:00:00 (Sat)
  63784591200, #      utc_end 2022-04-02 14:00:00 (Sat)
  63768311100, #  local_start 2021-09-26 03:45:00 (Sun)
  63784640700, #    local_end 2022-04-03 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63784591200, #    utc_start 2022-04-02 14:00:00 (Sat)
  63799711200, #      utc_end 2022-09-24 14:00:00 (Sat)
  63784637100, #  local_start 2022-04-03 02:45:00 (Sun)
  63799757100, #    local_end 2022-09-25 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63799711200, #    utc_start 2022-09-24 14:00:00 (Sat)
  63816040800, #      utc_end 2023-04-01 14:00:00 (Sat)
  63799760700, #  local_start 2022-09-25 03:45:00 (Sun)
  63816090300, #    local_end 2023-04-02 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63816040800, #    utc_start 2023-04-01 14:00:00 (Sat)
  63831160800, #      utc_end 2023-09-23 14:00:00 (Sat)
  63816086700, #  local_start 2023-04-02 02:45:00 (Sun)
  63831206700, #    local_end 2023-09-24 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63831160800, #    utc_start 2023-09-23 14:00:00 (Sat)
  63848095200, #      utc_end 2024-04-06 14:00:00 (Sat)
  63831210300, #  local_start 2023-09-24 03:45:00 (Sun)
  63848144700, #    local_end 2024-04-07 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63848095200, #    utc_start 2024-04-06 14:00:00 (Sat)
  63863215200, #      utc_end 2024-09-28 14:00:00 (Sat)
  63848141100, #  local_start 2024-04-07 02:45:00 (Sun)
  63863261100, #    local_end 2024-09-29 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63863215200, #    utc_start 2024-09-28 14:00:00 (Sat)
  63879544800, #      utc_end 2025-04-05 14:00:00 (Sat)
  63863264700, #  local_start 2024-09-29 03:45:00 (Sun)
  63879594300, #    local_end 2025-04-06 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63879544800, #    utc_start 2025-04-05 14:00:00 (Sat)
  63894664800, #      utc_end 2025-09-27 14:00:00 (Sat)
  63879590700, #  local_start 2025-04-06 02:45:00 (Sun)
  63894710700, #    local_end 2025-09-28 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63894664800, #    utc_start 2025-09-27 14:00:00 (Sat)
  63910994400, #      utc_end 2026-04-04 14:00:00 (Sat)
  63894714300, #  local_start 2025-09-28 03:45:00 (Sun)
  63911043900, #    local_end 2026-04-05 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63910994400, #    utc_start 2026-04-04 14:00:00 (Sat)
  63926114400, #      utc_end 2026-09-26 14:00:00 (Sat)
  63911040300, #  local_start 2026-04-05 02:45:00 (Sun)
  63926160300, #    local_end 2026-09-27 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
      [
  63926114400, #    utc_start 2026-09-26 14:00:00 (Sat)
  63942444000, #      utc_end 2027-04-03 14:00:00 (Sat)
  63926163900, #  local_start 2026-09-27 03:45:00 (Sun)
  63942493500, #    local_end 2027-04-04 03:45:00 (Sun)
  49500,
  1,
  'CHADT',
      ],
      [
  63942444000, #    utc_start 2027-04-03 14:00:00 (Sat)
  63957564000, #      utc_end 2027-09-25 14:00:00 (Sat)
  63942489900, #  local_start 2027-04-04 02:45:00 (Sun)
  63957609900, #    local_end 2027-09-26 02:45:00 (Sun)
  45900,
  0,
  'CHAST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {54}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 45900 }
  
  my $last_observance = bless( {
    'format' => 'CHA%sT',
    'gmtoff' => '12:45',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 710397,
      'local_rd_secs' => 1800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 710397,
      'utc_rd_secs' => 1800,
      'utc_year' => 1947
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 45900,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 710396,
      'local_rd_secs' => 42300,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 710396,
      'utc_rd_secs' => 42300,
      'utc_year' => 1946
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '2:45s',
      'from' => '2008',
      'in' => 'Apr',
      'letter' => 'S',
      'name' => 'Chatham',
      'offset_from_std' => 0,
      'on' => 'Sun>=1',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:45s',
      'from' => '2007',
      'in' => 'Sep',
      'letter' => 'D',
      'name' => 'Chatham',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_CHATHAM

    $main::fatpacked{"DateTime/TimeZone/Pacific/Chuuk.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_CHUUK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Chuuk;
  $DateTime::TimeZone::Pacific::Chuuk::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Chuuk::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958193972, #      utc_end 1900-12-31 13:52:52 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  36428,
  0,
  'LMT',
      ],
      [
  59958193972, #    utc_start 1900-12-31 13:52:52 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  59958229972, #  local_start 1900-12-31 23:52:52 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  36000,
  0,
  'CHUT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_CHUUK

    $main::fatpacked{"DateTime/TimeZone/Pacific/Easter.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_EASTER';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Easter;
  $DateTime::TimeZone::Pacific::Easter::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Easter::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59611187848, #      utc_end 1890-01-01 07:17:28 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59611161600, #    local_end 1890-01-01 00:00:00 (Wed)
  -26248,
  0,
  'LMT',
      ],
      [
  59611187848, #    utc_start 1890-01-01 07:17:28 (Wed)
  60957559048, #      utc_end 1932-09-01 07:17:28 (Thu)
  59611161600, #  local_start 1890-01-01 00:00:00 (Wed)
  60957532800, #    local_end 1932-09-01 00:00:00 (Thu)
  -26248,
  0,
  'EMT',
      ],
      [
  60957559048, #    utc_start 1932-09-01 07:17:28 (Thu)
  62099064000, #      utc_end 1968-11-03 04:00:00 (Sun)
  60957533848, #  local_start 1932-09-01 00:17:28 (Thu)
  62099038800, #    local_end 1968-11-02 21:00:00 (Sat)
  -25200,
  0,
  'EAST',
      ],
      [
  62099064000, #    utc_start 1968-11-03 04:00:00 (Sun)
  62111761200, #      utc_end 1969-03-30 03:00:00 (Sun)
  62099042400, #  local_start 1968-11-02 22:00:00 (Sat)
  62111739600, #    local_end 1969-03-29 21:00:00 (Sat)
  -21600,
  1,
  'EASST',
      ],
      [
  62111761200, #    utc_start 1969-03-30 03:00:00 (Sun)
  62132328000, #      utc_end 1969-11-23 04:00:00 (Sun)
  62111736000, #  local_start 1969-03-29 20:00:00 (Sat)
  62132302800, #    local_end 1969-11-22 21:00:00 (Sat)
  -25200,
  0,
  'EAST',
      ],
      [
  62132328000, #    utc_start 1969-11-23 04:00:00 (Sun)
  62143210800, #      utc_end 1970-03-29 03:00:00 (Sun)
  62132306400, #  local_start 1969-11-22 22:00:00 (Sat)
  62143189200, #    local_end 1970-03-28 21:00:00 (Sat)
  -21600,
  1,
  'EASST',
      ],
      [
  62143210800, #    utc_start 1970-03-29 03:00:00 (Sun)
  62160148800, #      utc_end 1970-10-11 04:00:00 (Sun)
  62143185600, #  local_start 1970-03-28 20:00:00 (Sat)
  62160123600, #    local_end 1970-10-10 21:00:00 (Sat)
  -25200,
  0,
  'EAST',
      ],
      [
  62160148800, #    utc_start 1970-10-11 04:00:00 (Sun)
  62173450800, #      utc_end 1971-03-14 03:00:00 (Sun)
  62160127200, #  local_start 1970-10-10 22:00:00 (Sat)
  62173429200, #    local_end 1971-03-13 21:00:00 (Sat)
  -21600,
  1,
  'EASST',
      ],
      [
  62173450800, #    utc_start 1971-03-14 03:00:00 (Sun)
  62191598400, #      utc_end 1971-10-10 04:00:00 (Sun)
  62173425600, #  local_start 1971-03-13 20:00:00 (Sat)
  62191573200, #    local_end 1971-10-09 21:00:00 (Sat)
  -25200,
  0,
  'EAST',
      ],
      [
  62191598400, #    utc_start 1971-10-10 04:00:00 (Sun)
  62204900400, #      utc_end 1972-03-12 03:00:00 (Sun)
  62191576800, #  local_start 1971-10-09 22:00:00 (Sat)
  62204878800, #    local_end 1972-03-11 21:00:00 (Sat)
  -21600,
  1,
  'EASST',
      ],
      [
  62204900400, #    utc_start 1972-03-12 03:00:00 (Sun)
  62223652800, #      utc_end 1972-10-15 04:00:00 (Sun)
  62204875200, #  local_start 1972-03-11 20:00:00 (Sat)
  62223627600, #    local_end 1972-10-14 21:00:00 (Sat)
  -25200,
  0,
  'EAST',
      ],
      [
  62223652800, #    utc_start 1972-10-15 04:00:00 (Sun)
  62236350000, #      utc_end 1973-03-11 03:00:00 (Sun)
  62223631200, #  local_start 1972-10-14 22:00:00 (Sat)
  62236328400, #    local_end 1973-03-10 21:00:00 (Sat)
  -21600,
  1,
  'EASST',
      ],
      [
  62236350000, #    utc_start 1973-03-11 03:00:00 (Sun)
  62253892800, #      utc_end 1973-09-30 04:00:00 (Sun)
  62236324800, #  local_start 1973-03-10 20:00:00 (Sat)
  62253867600, #    local_end 1973-09-29 21:00:00 (Sat)
  -25200,
  0,
  'EAST',
      ],
      [
  62253892800, #    utc_start 1973-09-30 04:00:00 (Sun)
  62267799600, #      utc_end 1974-03-10 03:00:00 (Sun)
  62253871200, #  local_start 1973-09-29 22:00:00 (Sat)
  62267778000, #    local_end 1974-03-09 21:00:00 (Sat)
  -21600,
  1,
  'EASST',
      ],
      [
  62267799600, #    utc_start 1974-03-10 03:00:00 (Sun)
  62286552000, #      utc_end 1974-10-13 04:00:00 (Sun)
  62267774400, #  local_start 1974-03-09 20:00:00 (Sat)
  62286526800, #    local_end 1974-10-12 21:00:00 (Sat)
  -25200,
  0,
  'EAST',
      ],
      [
  62286552000, #    utc_start 1974-10-13 04:00:00 (Sun)
  62299249200, #      utc_end 1975-03-09 03:00:00 (Sun)
  62286530400, #  local_start 1974-10-12 22:00:00 (Sat)
  62299227600, #    local_end 1975-03-08 21:00:00 (Sat)
  -21600,
  1,
  'EASST',
      ],
      [
  62299249200, #    utc_start 1975-03-09 03:00:00 (Sun)
  62318001600, #      utc_end 1975-10-12 04:00:00 (Sun)
  62299224000, #  local_start 1975-03-08 20:00:00 (Sat)
  62317976400, #    local_end 1975-10-11 21:00:00 (Sat)
  -25200,
  0,
  'EAST',
      ],
      [
  62318001600, #    utc_start 1975-10-12 04:00:00 (Sun)
  62331303600, #      utc_end 1976-03-14 03:00:00 (Sun)
  62317980000, #  local_start 1975-10-11 22:00:00 (Sat)
  62331282000, #    local_end 1976-03-13 21:00:00 (Sat)
  -21600,
  1,
  'EASST',
      ],
      [
  62331303600, #    utc_start 1976-03-14 03:00:00 (Sun)
  62349451200, #      utc_end 1976-10-10 04:00:00 (Sun)
  62331278400, #  local_start 1976-03-13 20:00:00 (Sat)
  62349426000, #    local_end 1976-10-09 21:00:00 (Sat)
  -25200,
  0,
  'EAST',
      ],
      [
  62349451200, #    utc_start 1976-10-10 04:00:00 (Sun)
  62362753200, #      utc_end 1977-03-13 03:00:00 (Sun)
  62349429600, #  local_start 1976-10-09 22:00:00 (Sat)
  62362731600, #    local_end 1977-03-12 21:00:00 (Sat)
  -21600,
  1,
  'EASST',
      ],
      [
  62362753200, #    utc_start 1977-03-13 03:00:00 (Sun)
  62380900800, #      utc_end 1977-10-09 04:00:00 (Sun)
  62362728000, #  local_start 1977-03-12 20:00:00 (Sat)
  62380875600, #    local_end 1977-10-08 21:00:00 (Sat)
  -25200,
  0,
  'EAST',
      ],
      [
  62380900800, #    utc_start 1977-10-09 04:00:00 (Sun)
  62394202800, #      utc_end 1978-03-12 03:00:00 (Sun)
  62380879200, #  local_start 1977-10-08 22:00:00 (Sat)
  62394181200, #    local_end 1978-03-11 21:00:00 (Sat)
  -21600,
  1,
  'EASST',
      ],
      [
  62394202800, #    utc_start 1978-03-12 03:00:00 (Sun)
  62412955200, #      utc_end 1978-10-15 04:00:00 (Sun)
  62394177600, #  local_start 1978-03-11 20:00:00 (Sat)
  62412930000, #    local_end 1978-10-14 21:00:00 (Sat)
  -25200,
  0,
  'EAST',
      ],
      [
  62412955200, #    utc_start 1978-10-15 04:00:00 (Sun)
  62425652400, #      utc_end 1979-03-11 03:00:00 (Sun)
  62412933600, #  local_start 1978-10-14 22:00:00 (Sat)
  62425630800, #    local_end 1979-03-10 21:00:00 (Sat)
  -21600,
  1,
  'EASST',
      ],
      [
  62425652400, #    utc_start 1979-03-11 03:00:00 (Sun)
  62444404800, #      utc_end 1979-10-14 04:00:00 (Sun)
  62425627200, #  local_start 1979-03-10 20:00:00 (Sat)
  62444379600, #    local_end 1979-10-13 21:00:00 (Sat)
  -25200,
  0,
  'EAST',
      ],
      [
  62444404800, #    utc_start 1979-10-14 04:00:00 (Sun)
  62457102000, #      utc_end 1980-03-09 03:00:00 (Sun)
  62444383200, #  local_start 1979-10-13 22:00:00 (Sat)
  62457080400, #    local_end 1980-03-08 21:00:00 (Sat)
  -21600,
  1,
  'EASST',
      ],
      [
  62457102000, #    utc_start 1980-03-09 03:00:00 (Sun)
  62475854400, #      utc_end 1980-10-12 04:00:00 (Sun)
  62457076800, #  local_start 1980-03-08 20:00:00 (Sat)
  62475829200, #    local_end 1980-10-11 21:00:00 (Sat)
  -25200,
  0,
  'EAST',
      ],
      [
  62475854400, #    utc_start 1980-10-12 04:00:00 (Sun)
  62489156400, #      utc_end 1981-03-15 03:00:00 (Sun)
  62475832800, #  local_start 1980-10-11 22:00:00 (Sat)
  62489134800, #    local_end 1981-03-14 21:00:00 (Sat)
  -21600,
  1,
  'EASST',
      ],
      [
  62489156400, #    utc_start 1981-03-15 03:00:00 (Sun)
  62507304000, #      utc_end 1981-10-11 04:00:00 (Sun)
  62489131200, #  local_start 1981-03-14 20:00:00 (Sat)
  62507278800, #    local_end 1981-10-10 21:00:00 (Sat)
  -25200,
  0,
  'EAST',
      ],
      [
  62507304000, #    utc_start 1981-10-11 04:00:00 (Sun)
  62520606000, #      utc_end 1982-03-14 03:00:00 (Sun)
  62507282400, #  local_start 1981-10-10 22:00:00 (Sat)
  62520584400, #    local_end 1982-03-13 21:00:00 (Sat)
  -21600,
  1,
  'EASST',
      ],
      [
  62520606000, #    utc_start 1982-03-14 03:00:00 (Sun)
  62538753600, #      utc_end 1982-10-10 04:00:00 (Sun)
  62520584400, #  local_start 1982-03-13 21:00:00 (Sat)
  62538732000, #    local_end 1982-10-09 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  62538753600, #    utc_start 1982-10-10 04:00:00 (Sun)
  62552055600, #      utc_end 1983-03-13 03:00:00 (Sun)
  62538735600, #  local_start 1982-10-09 23:00:00 (Sat)
  62552037600, #    local_end 1983-03-12 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  62552055600, #    utc_start 1983-03-13 03:00:00 (Sun)
  62570203200, #      utc_end 1983-10-09 04:00:00 (Sun)
  62552034000, #  local_start 1983-03-12 21:00:00 (Sat)
  62570181600, #    local_end 1983-10-08 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  62570203200, #    utc_start 1983-10-09 04:00:00 (Sun)
  62583505200, #      utc_end 1984-03-11 03:00:00 (Sun)
  62570185200, #  local_start 1983-10-08 23:00:00 (Sat)
  62583487200, #    local_end 1984-03-10 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  62583505200, #    utc_start 1984-03-11 03:00:00 (Sun)
  62602257600, #      utc_end 1984-10-14 04:00:00 (Sun)
  62583483600, #  local_start 1984-03-10 21:00:00 (Sat)
  62602236000, #    local_end 1984-10-13 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  62602257600, #    utc_start 1984-10-14 04:00:00 (Sun)
  62614954800, #      utc_end 1985-03-10 03:00:00 (Sun)
  62602239600, #  local_start 1984-10-13 23:00:00 (Sat)
  62614936800, #    local_end 1985-03-09 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  62614954800, #    utc_start 1985-03-10 03:00:00 (Sun)
  62633707200, #      utc_end 1985-10-13 04:00:00 (Sun)
  62614933200, #  local_start 1985-03-09 21:00:00 (Sat)
  62633685600, #    local_end 1985-10-12 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  62633707200, #    utc_start 1985-10-13 04:00:00 (Sun)
  62646404400, #      utc_end 1986-03-09 03:00:00 (Sun)
  62633689200, #  local_start 1985-10-12 23:00:00 (Sat)
  62646386400, #    local_end 1986-03-08 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  62646404400, #    utc_start 1986-03-09 03:00:00 (Sun)
  62665156800, #      utc_end 1986-10-12 04:00:00 (Sun)
  62646382800, #  local_start 1986-03-08 21:00:00 (Sat)
  62665135200, #    local_end 1986-10-11 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  62665156800, #    utc_start 1986-10-12 04:00:00 (Sun)
  62680878000, #      utc_end 1987-04-12 03:00:00 (Sun)
  62665138800, #  local_start 1986-10-11 23:00:00 (Sat)
  62680860000, #    local_end 1987-04-11 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  62680878000, #    utc_start 1987-04-12 03:00:00 (Sun)
  62696606400, #      utc_end 1987-10-11 04:00:00 (Sun)
  62680856400, #  local_start 1987-04-11 21:00:00 (Sat)
  62696584800, #    local_end 1987-10-10 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  62696606400, #    utc_start 1987-10-11 04:00:00 (Sun)
  62709908400, #      utc_end 1988-03-13 03:00:00 (Sun)
  62696588400, #  local_start 1987-10-10 23:00:00 (Sat)
  62709890400, #    local_end 1988-03-12 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  62709908400, #    utc_start 1988-03-13 03:00:00 (Sun)
  62728056000, #      utc_end 1988-10-09 04:00:00 (Sun)
  62709886800, #  local_start 1988-03-12 21:00:00 (Sat)
  62728034400, #    local_end 1988-10-08 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  62728056000, #    utc_start 1988-10-09 04:00:00 (Sun)
  62741358000, #      utc_end 1989-03-12 03:00:00 (Sun)
  62728038000, #  local_start 1988-10-08 23:00:00 (Sat)
  62741340000, #    local_end 1989-03-11 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  62741358000, #    utc_start 1989-03-12 03:00:00 (Sun)
  62760110400, #      utc_end 1989-10-15 04:00:00 (Sun)
  62741336400, #  local_start 1989-03-11 21:00:00 (Sat)
  62760088800, #    local_end 1989-10-14 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  62760110400, #    utc_start 1989-10-15 04:00:00 (Sun)
  62772807600, #      utc_end 1990-03-11 03:00:00 (Sun)
  62760092400, #  local_start 1989-10-14 23:00:00 (Sat)
  62772789600, #    local_end 1990-03-10 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  62772807600, #    utc_start 1990-03-11 03:00:00 (Sun)
  62789140800, #      utc_end 1990-09-16 04:00:00 (Sun)
  62772786000, #  local_start 1990-03-10 21:00:00 (Sat)
  62789119200, #    local_end 1990-09-15 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  62789140800, #    utc_start 1990-09-16 04:00:00 (Sun)
  62804257200, #      utc_end 1991-03-10 03:00:00 (Sun)
  62789122800, #  local_start 1990-09-15 23:00:00 (Sat)
  62804239200, #    local_end 1991-03-09 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  62804257200, #    utc_start 1991-03-10 03:00:00 (Sun)
  62823009600, #      utc_end 1991-10-13 04:00:00 (Sun)
  62804235600, #  local_start 1991-03-09 21:00:00 (Sat)
  62822988000, #    local_end 1991-10-12 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  62823009600, #    utc_start 1991-10-13 04:00:00 (Sun)
  62836311600, #      utc_end 1992-03-15 03:00:00 (Sun)
  62822991600, #  local_start 1991-10-12 23:00:00 (Sat)
  62836293600, #    local_end 1992-03-14 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  62836311600, #    utc_start 1992-03-15 03:00:00 (Sun)
  62854459200, #      utc_end 1992-10-11 04:00:00 (Sun)
  62836290000, #  local_start 1992-03-14 21:00:00 (Sat)
  62854437600, #    local_end 1992-10-10 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  62854459200, #    utc_start 1992-10-11 04:00:00 (Sun)
  62867761200, #      utc_end 1993-03-14 03:00:00 (Sun)
  62854441200, #  local_start 1992-10-10 23:00:00 (Sat)
  62867743200, #    local_end 1993-03-13 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  62867761200, #    utc_start 1993-03-14 03:00:00 (Sun)
  62885908800, #      utc_end 1993-10-10 04:00:00 (Sun)
  62867739600, #  local_start 1993-03-13 21:00:00 (Sat)
  62885887200, #    local_end 1993-10-09 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  62885908800, #    utc_start 1993-10-10 04:00:00 (Sun)
  62899210800, #      utc_end 1994-03-13 03:00:00 (Sun)
  62885890800, #  local_start 1993-10-09 23:00:00 (Sat)
  62899192800, #    local_end 1994-03-12 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  62899210800, #    utc_start 1994-03-13 03:00:00 (Sun)
  62917358400, #      utc_end 1994-10-09 04:00:00 (Sun)
  62899189200, #  local_start 1994-03-12 21:00:00 (Sat)
  62917336800, #    local_end 1994-10-08 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  62917358400, #    utc_start 1994-10-09 04:00:00 (Sun)
  62930660400, #      utc_end 1995-03-12 03:00:00 (Sun)
  62917340400, #  local_start 1994-10-08 23:00:00 (Sat)
  62930642400, #    local_end 1995-03-11 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  62930660400, #    utc_start 1995-03-12 03:00:00 (Sun)
  62949412800, #      utc_end 1995-10-15 04:00:00 (Sun)
  62930638800, #  local_start 1995-03-11 21:00:00 (Sat)
  62949391200, #    local_end 1995-10-14 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  62949412800, #    utc_start 1995-10-15 04:00:00 (Sun)
  62962110000, #      utc_end 1996-03-10 03:00:00 (Sun)
  62949394800, #  local_start 1995-10-14 23:00:00 (Sat)
  62962092000, #    local_end 1996-03-09 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  62962110000, #    utc_start 1996-03-10 03:00:00 (Sun)
  62980862400, #      utc_end 1996-10-13 04:00:00 (Sun)
  62962088400, #  local_start 1996-03-09 21:00:00 (Sat)
  62980840800, #    local_end 1996-10-12 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  62980862400, #    utc_start 1996-10-13 04:00:00 (Sun)
  62995374000, #      utc_end 1997-03-30 03:00:00 (Sun)
  62980844400, #  local_start 1996-10-12 23:00:00 (Sat)
  62995356000, #    local_end 1997-03-29 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  62995374000, #    utc_start 1997-03-30 03:00:00 (Sun)
  63012312000, #      utc_end 1997-10-12 04:00:00 (Sun)
  62995352400, #  local_start 1997-03-29 21:00:00 (Sat)
  63012290400, #    local_end 1997-10-11 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63012312000, #    utc_start 1997-10-12 04:00:00 (Sun)
  63025614000, #      utc_end 1998-03-15 03:00:00 (Sun)
  63012294000, #  local_start 1997-10-11 23:00:00 (Sat)
  63025596000, #    local_end 1998-03-14 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63025614000, #    utc_start 1998-03-15 03:00:00 (Sun)
  63042552000, #      utc_end 1998-09-27 04:00:00 (Sun)
  63025592400, #  local_start 1998-03-14 21:00:00 (Sat)
  63042530400, #    local_end 1998-09-26 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63042552000, #    utc_start 1998-09-27 04:00:00 (Sun)
  63058878000, #      utc_end 1999-04-04 03:00:00 (Sun)
  63042534000, #  local_start 1998-09-26 23:00:00 (Sat)
  63058860000, #    local_end 1999-04-03 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63058878000, #    utc_start 1999-04-04 03:00:00 (Sun)
  63075211200, #      utc_end 1999-10-10 04:00:00 (Sun)
  63058856400, #  local_start 1999-04-03 21:00:00 (Sat)
  63075189600, #    local_end 1999-10-09 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63075211200, #    utc_start 1999-10-10 04:00:00 (Sun)
  63088513200, #      utc_end 2000-03-12 03:00:00 (Sun)
  63075193200, #  local_start 1999-10-09 23:00:00 (Sat)
  63088495200, #    local_end 2000-03-11 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63088513200, #    utc_start 2000-03-12 03:00:00 (Sun)
  63107265600, #      utc_end 2000-10-15 04:00:00 (Sun)
  63088491600, #  local_start 2000-03-11 21:00:00 (Sat)
  63107244000, #    local_end 2000-10-14 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63107265600, #    utc_start 2000-10-15 04:00:00 (Sun)
  63119962800, #      utc_end 2001-03-11 03:00:00 (Sun)
  63107247600, #  local_start 2000-10-14 23:00:00 (Sat)
  63119944800, #    local_end 2001-03-10 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63119962800, #    utc_start 2001-03-11 03:00:00 (Sun)
  63138715200, #      utc_end 2001-10-14 04:00:00 (Sun)
  63119941200, #  local_start 2001-03-10 21:00:00 (Sat)
  63138693600, #    local_end 2001-10-13 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63138715200, #    utc_start 2001-10-14 04:00:00 (Sun)
  63151412400, #      utc_end 2002-03-10 03:00:00 (Sun)
  63138697200, #  local_start 2001-10-13 23:00:00 (Sat)
  63151394400, #    local_end 2002-03-09 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63151412400, #    utc_start 2002-03-10 03:00:00 (Sun)
  63170164800, #      utc_end 2002-10-13 04:00:00 (Sun)
  63151390800, #  local_start 2002-03-09 21:00:00 (Sat)
  63170143200, #    local_end 2002-10-12 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63170164800, #    utc_start 2002-10-13 04:00:00 (Sun)
  63182862000, #      utc_end 2003-03-09 03:00:00 (Sun)
  63170146800, #  local_start 2002-10-12 23:00:00 (Sat)
  63182844000, #    local_end 2003-03-08 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63182862000, #    utc_start 2003-03-09 03:00:00 (Sun)
  63201614400, #      utc_end 2003-10-12 04:00:00 (Sun)
  63182840400, #  local_start 2003-03-08 21:00:00 (Sat)
  63201592800, #    local_end 2003-10-11 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63201614400, #    utc_start 2003-10-12 04:00:00 (Sun)
  63214916400, #      utc_end 2004-03-14 03:00:00 (Sun)
  63201596400, #  local_start 2003-10-11 23:00:00 (Sat)
  63214898400, #    local_end 2004-03-13 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63214916400, #    utc_start 2004-03-14 03:00:00 (Sun)
  63233064000, #      utc_end 2004-10-10 04:00:00 (Sun)
  63214894800, #  local_start 2004-03-13 21:00:00 (Sat)
  63233042400, #    local_end 2004-10-09 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63233064000, #    utc_start 2004-10-10 04:00:00 (Sun)
  63246366000, #      utc_end 2005-03-13 03:00:00 (Sun)
  63233046000, #  local_start 2004-10-09 23:00:00 (Sat)
  63246348000, #    local_end 2005-03-12 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63246366000, #    utc_start 2005-03-13 03:00:00 (Sun)
  63264513600, #      utc_end 2005-10-09 04:00:00 (Sun)
  63246344400, #  local_start 2005-03-12 21:00:00 (Sat)
  63264492000, #    local_end 2005-10-08 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63264513600, #    utc_start 2005-10-09 04:00:00 (Sun)
  63277815600, #      utc_end 2006-03-12 03:00:00 (Sun)
  63264495600, #  local_start 2005-10-08 23:00:00 (Sat)
  63277797600, #    local_end 2006-03-11 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63277815600, #    utc_start 2006-03-12 03:00:00 (Sun)
  63296568000, #      utc_end 2006-10-15 04:00:00 (Sun)
  63277794000, #  local_start 2006-03-11 21:00:00 (Sat)
  63296546400, #    local_end 2006-10-14 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63296568000, #    utc_start 2006-10-15 04:00:00 (Sun)
  63309265200, #      utc_end 2007-03-11 03:00:00 (Sun)
  63296550000, #  local_start 2006-10-14 23:00:00 (Sat)
  63309247200, #    local_end 2007-03-10 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63309265200, #    utc_start 2007-03-11 03:00:00 (Sun)
  63328017600, #      utc_end 2007-10-14 04:00:00 (Sun)
  63309243600, #  local_start 2007-03-10 21:00:00 (Sat)
  63327996000, #    local_end 2007-10-13 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63328017600, #    utc_start 2007-10-14 04:00:00 (Sun)
  63342529200, #      utc_end 2008-03-30 03:00:00 (Sun)
  63327999600, #  local_start 2007-10-13 23:00:00 (Sat)
  63342511200, #    local_end 2008-03-29 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63342529200, #    utc_start 2008-03-30 03:00:00 (Sun)
  63359467200, #      utc_end 2008-10-12 04:00:00 (Sun)
  63342507600, #  local_start 2008-03-29 21:00:00 (Sat)
  63359445600, #    local_end 2008-10-11 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63359467200, #    utc_start 2008-10-12 04:00:00 (Sun)
  63372769200, #      utc_end 2009-03-15 03:00:00 (Sun)
  63359449200, #  local_start 2008-10-11 23:00:00 (Sat)
  63372751200, #    local_end 2009-03-14 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63372769200, #    utc_start 2009-03-15 03:00:00 (Sun)
  63390916800, #      utc_end 2009-10-11 04:00:00 (Sun)
  63372747600, #  local_start 2009-03-14 21:00:00 (Sat)
  63390895200, #    local_end 2009-10-10 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63390916800, #    utc_start 2009-10-11 04:00:00 (Sun)
  63406033200, #      utc_end 2010-04-04 03:00:00 (Sun)
  63390898800, #  local_start 2009-10-10 23:00:00 (Sat)
  63406015200, #    local_end 2010-04-03 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63406033200, #    utc_start 2010-04-04 03:00:00 (Sun)
  63422366400, #      utc_end 2010-10-10 04:00:00 (Sun)
  63406011600, #  local_start 2010-04-03 21:00:00 (Sat)
  63422344800, #    local_end 2010-10-09 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63422366400, #    utc_start 2010-10-10 04:00:00 (Sun)
  63440506800, #      utc_end 2011-05-08 03:00:00 (Sun)
  63422348400, #  local_start 2010-10-09 23:00:00 (Sat)
  63440488800, #    local_end 2011-05-07 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63440506800, #    utc_start 2011-05-08 03:00:00 (Sun)
  63449582400, #      utc_end 2011-08-21 04:00:00 (Sun)
  63440485200, #  local_start 2011-05-07 21:00:00 (Sat)
  63449560800, #    local_end 2011-08-20 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63449582400, #    utc_start 2011-08-21 04:00:00 (Sun)
  63471351600, #      utc_end 2012-04-29 03:00:00 (Sun)
  63449564400, #  local_start 2011-08-20 23:00:00 (Sat)
  63471333600, #    local_end 2012-04-28 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63471351600, #    utc_start 2012-04-29 03:00:00 (Sun)
  63482241600, #      utc_end 2012-09-02 04:00:00 (Sun)
  63471330000, #  local_start 2012-04-28 21:00:00 (Sat)
  63482220000, #    local_end 2012-09-01 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63482241600, #    utc_start 2012-09-02 04:00:00 (Sun)
  63502801200, #      utc_end 2013-04-28 03:00:00 (Sun)
  63482223600, #  local_start 2012-09-01 23:00:00 (Sat)
  63502783200, #    local_end 2013-04-27 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63502801200, #    utc_start 2013-04-28 03:00:00 (Sun)
  63514296000, #      utc_end 2013-09-08 04:00:00 (Sun)
  63502779600, #  local_start 2013-04-27 21:00:00 (Sat)
  63514274400, #    local_end 2013-09-07 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63514296000, #    utc_start 2013-09-08 04:00:00 (Sun)
  63534250800, #      utc_end 2014-04-27 03:00:00 (Sun)
  63514278000, #  local_start 2013-09-07 23:00:00 (Sat)
  63534232800, #    local_end 2014-04-26 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63534250800, #    utc_start 2014-04-27 03:00:00 (Sun)
  63545745600, #      utc_end 2014-09-07 04:00:00 (Sun)
  63534229200, #  local_start 2014-04-26 21:00:00 (Sat)
  63545724000, #    local_end 2014-09-06 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63545745600, #    utc_start 2014-09-07 04:00:00 (Sun)
  63598964400, #      utc_end 2016-05-15 03:00:00 (Sun)
  63545727600, #  local_start 2014-09-06 23:00:00 (Sat)
  63598946400, #    local_end 2016-05-14 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63598964400, #    utc_start 2016-05-15 03:00:00 (Sun)
  63606830400, #      utc_end 2016-08-14 04:00:00 (Sun)
  63598942800, #  local_start 2016-05-14 21:00:00 (Sat)
  63606808800, #    local_end 2016-08-13 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63606830400, #    utc_start 2016-08-14 04:00:00 (Sun)
  63630414000, #      utc_end 2017-05-14 03:00:00 (Sun)
  63606812400, #  local_start 2016-08-13 23:00:00 (Sat)
  63630396000, #    local_end 2017-05-13 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63630414000, #    utc_start 2017-05-14 03:00:00 (Sun)
  63638280000, #      utc_end 2017-08-13 04:00:00 (Sun)
  63630392400, #  local_start 2017-05-13 21:00:00 (Sat)
  63638258400, #    local_end 2017-08-12 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63638280000, #    utc_start 2017-08-13 04:00:00 (Sun)
  63661863600, #      utc_end 2018-05-13 03:00:00 (Sun)
  63638262000, #  local_start 2017-08-12 23:00:00 (Sat)
  63661845600, #    local_end 2018-05-12 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63661863600, #    utc_start 2018-05-13 03:00:00 (Sun)
  63669729600, #      utc_end 2018-08-12 04:00:00 (Sun)
  63661842000, #  local_start 2018-05-12 21:00:00 (Sat)
  63669708000, #    local_end 2018-08-11 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63669729600, #    utc_start 2018-08-12 04:00:00 (Sun)
  63693313200, #      utc_end 2019-05-12 03:00:00 (Sun)
  63669711600, #  local_start 2018-08-11 23:00:00 (Sat)
  63693295200, #    local_end 2019-05-11 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63693313200, #    utc_start 2019-05-12 03:00:00 (Sun)
  63701179200, #      utc_end 2019-08-11 04:00:00 (Sun)
  63693291600, #  local_start 2019-05-11 21:00:00 (Sat)
  63701157600, #    local_end 2019-08-10 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63701179200, #    utc_start 2019-08-11 04:00:00 (Sun)
  63724762800, #      utc_end 2020-05-10 03:00:00 (Sun)
  63701161200, #  local_start 2019-08-10 23:00:00 (Sat)
  63724744800, #    local_end 2020-05-09 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63724762800, #    utc_start 2020-05-10 03:00:00 (Sun)
  63732628800, #      utc_end 2020-08-09 04:00:00 (Sun)
  63724741200, #  local_start 2020-05-09 21:00:00 (Sat)
  63732607200, #    local_end 2020-08-08 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63732628800, #    utc_start 2020-08-09 04:00:00 (Sun)
  63756212400, #      utc_end 2021-05-09 03:00:00 (Sun)
  63732610800, #  local_start 2020-08-08 23:00:00 (Sat)
  63756194400, #    local_end 2021-05-08 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63756212400, #    utc_start 2021-05-09 03:00:00 (Sun)
  63764683200, #      utc_end 2021-08-15 04:00:00 (Sun)
  63756190800, #  local_start 2021-05-08 21:00:00 (Sat)
  63764661600, #    local_end 2021-08-14 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63764683200, #    utc_start 2021-08-15 04:00:00 (Sun)
  63788266800, #      utc_end 2022-05-15 03:00:00 (Sun)
  63764665200, #  local_start 2021-08-14 23:00:00 (Sat)
  63788248800, #    local_end 2022-05-14 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63788266800, #    utc_start 2022-05-15 03:00:00 (Sun)
  63796132800, #      utc_end 2022-08-14 04:00:00 (Sun)
  63788245200, #  local_start 2022-05-14 21:00:00 (Sat)
  63796111200, #    local_end 2022-08-13 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63796132800, #    utc_start 2022-08-14 04:00:00 (Sun)
  63819716400, #      utc_end 2023-05-14 03:00:00 (Sun)
  63796114800, #  local_start 2022-08-13 23:00:00 (Sat)
  63819698400, #    local_end 2023-05-13 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63819716400, #    utc_start 2023-05-14 03:00:00 (Sun)
  63827582400, #      utc_end 2023-08-13 04:00:00 (Sun)
  63819694800, #  local_start 2023-05-13 21:00:00 (Sat)
  63827560800, #    local_end 2023-08-12 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63827582400, #    utc_start 2023-08-13 04:00:00 (Sun)
  63851166000, #      utc_end 2024-05-12 03:00:00 (Sun)
  63827564400, #  local_start 2023-08-12 23:00:00 (Sat)
  63851148000, #    local_end 2024-05-11 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63851166000, #    utc_start 2024-05-12 03:00:00 (Sun)
  63859032000, #      utc_end 2024-08-11 04:00:00 (Sun)
  63851144400, #  local_start 2024-05-11 21:00:00 (Sat)
  63859010400, #    local_end 2024-08-10 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63859032000, #    utc_start 2024-08-11 04:00:00 (Sun)
  63882615600, #      utc_end 2025-05-11 03:00:00 (Sun)
  63859014000, #  local_start 2024-08-10 23:00:00 (Sat)
  63882597600, #    local_end 2025-05-10 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63882615600, #    utc_start 2025-05-11 03:00:00 (Sun)
  63890481600, #      utc_end 2025-08-10 04:00:00 (Sun)
  63882594000, #  local_start 2025-05-10 21:00:00 (Sat)
  63890460000, #    local_end 2025-08-09 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63890481600, #    utc_start 2025-08-10 04:00:00 (Sun)
  63914065200, #      utc_end 2026-05-10 03:00:00 (Sun)
  63890463600, #  local_start 2025-08-09 23:00:00 (Sat)
  63914047200, #    local_end 2026-05-09 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63914065200, #    utc_start 2026-05-10 03:00:00 (Sun)
  63921931200, #      utc_end 2026-08-09 04:00:00 (Sun)
  63914043600, #  local_start 2026-05-09 21:00:00 (Sat)
  63921909600, #    local_end 2026-08-08 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
      [
  63921931200, #    utc_start 2026-08-09 04:00:00 (Sun)
  63945514800, #      utc_end 2027-05-09 03:00:00 (Sun)
  63921913200, #  local_start 2026-08-08 23:00:00 (Sat)
  63945496800, #    local_end 2027-05-08 22:00:00 (Sat)
  -18000,
  1,
  'EASST',
      ],
      [
  63945514800, #    utc_start 2027-05-09 03:00:00 (Sun)
  63953985600, #      utc_end 2027-08-15 04:00:00 (Sun)
  63945493200, #  local_start 2027-05-08 21:00:00 (Sat)
  63953964000, #    local_end 2027-08-14 22:00:00 (Sat)
  -21600,
  0,
  'EAST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {59}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { -21600 }
  
  my $last_observance = bless( {
    'format' => 'EAS%sT',
    'gmtoff' => '-6:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723617,
      'local_rd_secs' => 75600,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723617,
      'utc_rd_secs' => 75600,
      'utc_year' => 1983
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => -21600,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 723618,
      'local_rd_secs' => 10800,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 723618,
      'utc_rd_secs' => 10800,
      'utc_year' => 1983
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '4:00u',
      'from' => '2016',
      'in' => 'Aug',
      'letter' => 'S',
      'name' => 'Chile',
      'offset_from_std' => 3600,
      'on' => 'Sun>=9',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '3:00u',
      'from' => '2016',
      'in' => 'May',
      'letter' => '',
      'name' => 'Chile',
      'offset_from_std' => 0,
      'on' => 'Sun>=9',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_EASTER

    $main::fatpacked{"DateTime/TimeZone/Pacific/Efate.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_EFATE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Efate;
  $DateTime::TimeZone::Pacific::Efate::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Efate::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60306295604, #      utc_end 1912-01-12 12:46:44 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60306336000, #    local_end 1912-01-13 00:00:00 (Sat)
  40396,
  0,
  'LMT',
      ],
      [
  60306295604, #    utc_start 1912-01-12 12:46:44 (Fri)
  62568939600, #      utc_end 1983-09-24 13:00:00 (Sat)
  60306335204, #  local_start 1912-01-12 23:46:44 (Fri)
  62568979200, #    local_end 1983-09-25 00:00:00 (Sun)
  39600,
  0,
  'VUT',
      ],
      [
  62568939600, #    utc_start 1983-09-24 13:00:00 (Sat)
  62584660800, #      utc_end 1984-03-24 12:00:00 (Sat)
  62568982800, #  local_start 1983-09-25 01:00:00 (Sun)
  62584704000, #    local_end 1984-03-25 00:00:00 (Sun)
  43200,
  1,
  'VUST',
      ],
      [
  62584660800, #    utc_start 1984-03-24 12:00:00 (Sat)
  62602981200, #      utc_end 1984-10-22 13:00:00 (Mon)
  62584700400, #  local_start 1984-03-24 23:00:00 (Sat)
  62603020800, #    local_end 1984-10-23 00:00:00 (Tue)
  39600,
  0,
  'VUT',
      ],
      [
  62602981200, #    utc_start 1984-10-22 13:00:00 (Mon)
  62616110400, #      utc_end 1985-03-23 12:00:00 (Sat)
  62603024400, #  local_start 1984-10-23 01:00:00 (Tue)
  62616153600, #    local_end 1985-03-24 00:00:00 (Sun)
  43200,
  1,
  'VUST',
      ],
      [
  62616110400, #    utc_start 1985-03-23 12:00:00 (Sat)
  62632443600, #      utc_end 1985-09-28 13:00:00 (Sat)
  62616150000, #  local_start 1985-03-23 23:00:00 (Sat)
  62632483200, #    local_end 1985-09-29 00:00:00 (Sun)
  39600,
  0,
  'VUT',
      ],
      [
  62632443600, #    utc_start 1985-09-28 13:00:00 (Sat)
  62647560000, #      utc_end 1986-03-22 12:00:00 (Sat)
  62632486800, #  local_start 1985-09-29 01:00:00 (Sun)
  62647603200, #    local_end 1986-03-23 00:00:00 (Sun)
  43200,
  1,
  'VUST',
      ],
      [
  62647560000, #    utc_start 1986-03-22 12:00:00 (Sat)
  62663893200, #      utc_end 1986-09-27 13:00:00 (Sat)
  62647599600, #  local_start 1986-03-22 23:00:00 (Sat)
  62663932800, #    local_end 1986-09-28 00:00:00 (Sun)
  39600,
  0,
  'VUT',
      ],
      [
  62663893200, #    utc_start 1986-09-27 13:00:00 (Sat)
  62679614400, #      utc_end 1987-03-28 12:00:00 (Sat)
  62663936400, #  local_start 1986-09-28 01:00:00 (Sun)
  62679657600, #    local_end 1987-03-29 00:00:00 (Sun)
  43200,
  1,
  'VUST',
      ],
      [
  62679614400, #    utc_start 1987-03-28 12:00:00 (Sat)
  62695342800, #      utc_end 1987-09-26 13:00:00 (Sat)
  62679654000, #  local_start 1987-03-28 23:00:00 (Sat)
  62695382400, #    local_end 1987-09-27 00:00:00 (Sun)
  39600,
  0,
  'VUT',
      ],
      [
  62695342800, #    utc_start 1987-09-26 13:00:00 (Sat)
  62711064000, #      utc_end 1988-03-26 12:00:00 (Sat)
  62695386000, #  local_start 1987-09-27 01:00:00 (Sun)
  62711107200, #    local_end 1988-03-27 00:00:00 (Sun)
  43200,
  1,
  'VUST',
      ],
      [
  62711064000, #    utc_start 1988-03-26 12:00:00 (Sat)
  62726792400, #      utc_end 1988-09-24 13:00:00 (Sat)
  62711103600, #  local_start 1988-03-26 23:00:00 (Sat)
  62726832000, #    local_end 1988-09-25 00:00:00 (Sun)
  39600,
  0,
  'VUT',
      ],
      [
  62726792400, #    utc_start 1988-09-24 13:00:00 (Sat)
  62742513600, #      utc_end 1989-03-25 12:00:00 (Sat)
  62726835600, #  local_start 1988-09-25 01:00:00 (Sun)
  62742556800, #    local_end 1989-03-26 00:00:00 (Sun)
  43200,
  1,
  'VUST',
      ],
      [
  62742513600, #    utc_start 1989-03-25 12:00:00 (Sat)
  62758242000, #      utc_end 1989-09-23 13:00:00 (Sat)
  62742553200, #  local_start 1989-03-25 23:00:00 (Sat)
  62758281600, #    local_end 1989-09-24 00:00:00 (Sun)
  39600,
  0,
  'VUT',
      ],
      [
  62758242000, #    utc_start 1989-09-23 13:00:00 (Sat)
  62773963200, #      utc_end 1990-03-24 12:00:00 (Sat)
  62758285200, #  local_start 1989-09-24 01:00:00 (Sun)
  62774006400, #    local_end 1990-03-25 00:00:00 (Sun)
  43200,
  1,
  'VUST',
      ],
      [
  62773963200, #    utc_start 1990-03-24 12:00:00 (Sat)
  62789691600, #      utc_end 1990-09-22 13:00:00 (Sat)
  62774002800, #  local_start 1990-03-24 23:00:00 (Sat)
  62789731200, #    local_end 1990-09-23 00:00:00 (Sun)
  39600,
  0,
  'VUT',
      ],
      [
  62789691600, #    utc_start 1990-09-22 13:00:00 (Sat)
  62805412800, #      utc_end 1991-03-23 12:00:00 (Sat)
  62789734800, #  local_start 1990-09-23 01:00:00 (Sun)
  62805456000, #    local_end 1991-03-24 00:00:00 (Sun)
  43200,
  1,
  'VUST',
      ],
      [
  62805412800, #    utc_start 1991-03-23 12:00:00 (Sat)
  62821746000, #      utc_end 1991-09-28 13:00:00 (Sat)
  62805452400, #  local_start 1991-03-23 23:00:00 (Sat)
  62821785600, #    local_end 1991-09-29 00:00:00 (Sun)
  39600,
  0,
  'VUT',
      ],
      [
  62821746000, #    utc_start 1991-09-28 13:00:00 (Sat)
  62832024000, #      utc_end 1992-01-25 12:00:00 (Sat)
  62821789200, #  local_start 1991-09-29 01:00:00 (Sun)
  62832067200, #    local_end 1992-01-26 00:00:00 (Sun)
  43200,
  1,
  'VUST',
      ],
      [
  62832024000, #    utc_start 1992-01-25 12:00:00 (Sat)
  62855614800, #      utc_end 1992-10-24 13:00:00 (Sat)
  62832063600, #  local_start 1992-01-25 23:00:00 (Sat)
  62855654400, #    local_end 1992-10-25 00:00:00 (Sun)
  39600,
  0,
  'VUT',
      ],
      [
  62855614800, #    utc_start 1992-10-24 13:00:00 (Sat)
  62863473600, #      utc_end 1993-01-23 12:00:00 (Sat)
  62855658000, #  local_start 1992-10-25 01:00:00 (Sun)
  62863516800, #    local_end 1993-01-24 00:00:00 (Sun)
  43200,
  1,
  'VUST',
      ],
      [
  62863473600, #    utc_start 1993-01-23 12:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  62863513200, #  local_start 1993-01-23 23:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  39600,
  0,
  'VUT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {10}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_EFATE

    $main::fatpacked{"DateTime/TimeZone/Pacific/Enderbury.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_ENDERBURY';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Enderbury;
  $DateTime::TimeZone::Pacific::Enderbury::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Enderbury::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958271460, #      utc_end 1901-01-01 11:24:20 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  -41060,
  0,
  'LMT',
      ],
      [
  59958271460, #    utc_start 1901-01-01 11:24:20 (Tue)
  62443310400, #      utc_end 1979-10-01 12:00:00 (Mon)
  59958228260, #  local_start 1900-12-31 23:24:20 (Mon)
  62443267200, #    local_end 1979-10-01 00:00:00 (Mon)
  -43200,
  0,
  'PHOT',
      ],
      [
  62443310400, #    utc_start 1979-10-01 12:00:00 (Mon)
  62924641200, #      utc_end 1995-01-01 11:00:00 (Sun)
  62443270800, #  local_start 1979-10-01 01:00:00 (Mon)
  62924601600, #    local_end 1995-01-01 00:00:00 (Sun)
  -39600,
  0,
  'PHOT',
      ],
      [
  62924641200, #    utc_start 1995-01-01 11:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  62924688000, #  local_start 1995-01-02 00:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  46800,
  0,
  'PHOT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_ENDERBURY

    $main::fatpacked{"DateTime/TimeZone/Pacific/Fakaofo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_FAKAOFO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Fakaofo;
  $DateTime::TimeZone::Pacific::Fakaofo::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Fakaofo::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958271496, #      utc_end 1901-01-01 11:24:56 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  -41096,
  0,
  'LMT',
      ],
      [
  59958271496, #    utc_start 1901-01-01 11:24:56 (Tue)
  63460926000, #      utc_end 2011-12-30 11:00:00 (Fri)
  59958231896, #  local_start 1901-01-01 00:24:56 (Tue)
  63460886400, #    local_end 2011-12-30 00:00:00 (Fri)
  -39600,
  0,
  'TKT',
      ],
      [
  63460926000, #    utc_start 2011-12-30 11:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #      utc_end
  63460972800, #  local_start 2011-12-31 00:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  46800,
  0,
  'TKT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_FAKAOFO

    $main::fatpacked{"DateTime/TimeZone/Pacific/Fiji.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_FIJI';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Fiji;
  $DateTime::TimeZone::Pacific::Fiji::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Fiji::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60425697856, #      utc_end 1915-10-25 12:04:16 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60425740800, #    local_end 1915-10-26 00:00:00 (Tue)
  42944,
  0,
  'LMT',
      ],
      [
  60425697856, #    utc_start 1915-10-25 12:04:16 (Mon)
  63045525600, #      utc_end 1998-10-31 14:00:00 (Sat)
  60425741056, #  local_start 1915-10-26 00:04:16 (Tue)
  63045568800, #    local_end 1998-11-01 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63045525600, #    utc_start 1998-10-31 14:00:00 (Sat)
  63055807200, #      utc_end 1999-02-27 14:00:00 (Sat)
  63045572400, #  local_start 1998-11-01 03:00:00 (Sun)
  63055854000, #    local_end 1999-02-28 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63055807200, #    utc_start 1999-02-27 14:00:00 (Sat)
  63077580000, #      utc_end 1999-11-06 14:00:00 (Sat)
  63055850400, #  local_start 1999-02-28 02:00:00 (Sun)
  63077623200, #    local_end 1999-11-07 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63077580000, #    utc_start 1999-11-06 14:00:00 (Sat)
  63087256800, #      utc_end 2000-02-26 14:00:00 (Sat)
  63077626800, #  local_start 1999-11-07 03:00:00 (Sun)
  63087303600, #    local_end 2000-02-27 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63087256800, #    utc_start 2000-02-26 14:00:00 (Sat)
  63395100000, #      utc_end 2009-11-28 14:00:00 (Sat)
  63087300000, #  local_start 2000-02-27 02:00:00 (Sun)
  63395143200, #    local_end 2009-11-29 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63395100000, #    utc_start 2009-11-28 14:00:00 (Sat)
  63405381600, #      utc_end 2010-03-27 14:00:00 (Sat)
  63395146800, #  local_start 2009-11-29 03:00:00 (Sun)
  63405428400, #    local_end 2010-03-28 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63405381600, #    utc_start 2010-03-27 14:00:00 (Sat)
  63423525600, #      utc_end 2010-10-23 14:00:00 (Sat)
  63405424800, #  local_start 2010-03-28 02:00:00 (Sun)
  63423568800, #    local_end 2010-10-24 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63423525600, #    utc_start 2010-10-23 14:00:00 (Sat)
  63435016800, #      utc_end 2011-03-05 14:00:00 (Sat)
  63423572400, #  local_start 2010-10-24 03:00:00 (Sun)
  63435063600, #    local_end 2011-03-06 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63435016800, #    utc_start 2011-03-05 14:00:00 (Sat)
  63454975200, #      utc_end 2011-10-22 14:00:00 (Sat)
  63435060000, #  local_start 2011-03-06 02:00:00 (Sun)
  63455018400, #    local_end 2011-10-23 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63454975200, #    utc_start 2011-10-22 14:00:00 (Sat)
  63462837600, #      utc_end 2012-01-21 14:00:00 (Sat)
  63455022000, #  local_start 2011-10-23 03:00:00 (Sun)
  63462884400, #    local_end 2012-01-22 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63462837600, #    utc_start 2012-01-21 14:00:00 (Sat)
  63486424800, #      utc_end 2012-10-20 14:00:00 (Sat)
  63462880800, #  local_start 2012-01-22 02:00:00 (Sun)
  63486468000, #    local_end 2012-10-21 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63486424800, #    utc_start 2012-10-20 14:00:00 (Sat)
  63494287200, #      utc_end 2013-01-19 14:00:00 (Sat)
  63486471600, #  local_start 2012-10-21 03:00:00 (Sun)
  63494334000, #    local_end 2013-01-20 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63494287200, #    utc_start 2013-01-19 14:00:00 (Sat)
  63518479200, #      utc_end 2013-10-26 14:00:00 (Sat)
  63494330400, #  local_start 2013-01-20 02:00:00 (Sun)
  63518522400, #    local_end 2013-10-27 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63518479200, #    utc_start 2013-10-26 14:00:00 (Sat)
  63525733200, #      utc_end 2014-01-18 13:00:00 (Sat)
  63518526000, #  local_start 2013-10-27 03:00:00 (Sun)
  63525780000, #    local_end 2014-01-19 02:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63525733200, #    utc_start 2014-01-18 13:00:00 (Sat)
  63550533600, #      utc_end 2014-11-01 14:00:00 (Sat)
  63525776400, #  local_start 2014-01-19 01:00:00 (Sun)
  63550576800, #    local_end 2014-11-02 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63550533600, #    utc_start 2014-11-01 14:00:00 (Sat)
  63557186400, #      utc_end 2015-01-17 14:00:00 (Sat)
  63550580400, #  local_start 2014-11-02 03:00:00 (Sun)
  63557233200, #    local_end 2015-01-18 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63557186400, #    utc_start 2015-01-17 14:00:00 (Sat)
  63581983200, #      utc_end 2015-10-31 14:00:00 (Sat)
  63557229600, #  local_start 2015-01-18 02:00:00 (Sun)
  63582026400, #    local_end 2015-11-01 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63581983200, #    utc_start 2015-10-31 14:00:00 (Sat)
  63588636000, #      utc_end 2016-01-16 14:00:00 (Sat)
  63582030000, #  local_start 2015-11-01 03:00:00 (Sun)
  63588682800, #    local_end 2016-01-17 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63588636000, #    utc_start 2016-01-16 14:00:00 (Sat)
  63614037600, #      utc_end 2016-11-05 14:00:00 (Sat)
  63588679200, #  local_start 2016-01-17 02:00:00 (Sun)
  63614080800, #    local_end 2016-11-06 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63614037600, #    utc_start 2016-11-05 14:00:00 (Sat)
  63620085600, #      utc_end 2017-01-14 14:00:00 (Sat)
  63614084400, #  local_start 2016-11-06 03:00:00 (Sun)
  63620132400, #    local_end 2017-01-15 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63620085600, #    utc_start 2017-01-14 14:00:00 (Sat)
  63645487200, #      utc_end 2017-11-04 14:00:00 (Sat)
  63620128800, #  local_start 2017-01-15 02:00:00 (Sun)
  63645530400, #    local_end 2017-11-05 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63645487200, #    utc_start 2017-11-04 14:00:00 (Sat)
  63652140000, #      utc_end 2018-01-20 14:00:00 (Sat)
  63645534000, #  local_start 2017-11-05 03:00:00 (Sun)
  63652186800, #    local_end 2018-01-21 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63652140000, #    utc_start 2018-01-20 14:00:00 (Sat)
  63676936800, #      utc_end 2018-11-03 14:00:00 (Sat)
  63652183200, #  local_start 2018-01-21 02:00:00 (Sun)
  63676980000, #    local_end 2018-11-04 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63676936800, #    utc_start 2018-11-03 14:00:00 (Sat)
  63683589600, #      utc_end 2019-01-19 14:00:00 (Sat)
  63676983600, #  local_start 2018-11-04 03:00:00 (Sun)
  63683636400, #    local_end 2019-01-20 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63683589600, #    utc_start 2019-01-19 14:00:00 (Sat)
  63708386400, #      utc_end 2019-11-02 14:00:00 (Sat)
  63683632800, #  local_start 2019-01-20 02:00:00 (Sun)
  63708429600, #    local_end 2019-11-03 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63708386400, #    utc_start 2019-11-02 14:00:00 (Sat)
  63715039200, #      utc_end 2020-01-18 14:00:00 (Sat)
  63708433200, #  local_start 2019-11-03 03:00:00 (Sun)
  63715086000, #    local_end 2020-01-19 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63715039200, #    utc_start 2020-01-18 14:00:00 (Sat)
  63739836000, #      utc_end 2020-10-31 14:00:00 (Sat)
  63715082400, #  local_start 2020-01-19 02:00:00 (Sun)
  63739879200, #    local_end 2020-11-01 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63739836000, #    utc_start 2020-10-31 14:00:00 (Sat)
  63746488800, #      utc_end 2021-01-16 14:00:00 (Sat)
  63739882800, #  local_start 2020-11-01 03:00:00 (Sun)
  63746535600, #    local_end 2021-01-17 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63746488800, #    utc_start 2021-01-16 14:00:00 (Sat)
  63771890400, #      utc_end 2021-11-06 14:00:00 (Sat)
  63746532000, #  local_start 2021-01-17 02:00:00 (Sun)
  63771933600, #    local_end 2021-11-07 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63771890400, #    utc_start 2021-11-06 14:00:00 (Sat)
  63777938400, #      utc_end 2022-01-15 14:00:00 (Sat)
  63771937200, #  local_start 2021-11-07 03:00:00 (Sun)
  63777985200, #    local_end 2022-01-16 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63777938400, #    utc_start 2022-01-15 14:00:00 (Sat)
  63803340000, #      utc_end 2022-11-05 14:00:00 (Sat)
  63777981600, #  local_start 2022-01-16 02:00:00 (Sun)
  63803383200, #    local_end 2022-11-06 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63803340000, #    utc_start 2022-11-05 14:00:00 (Sat)
  63809388000, #      utc_end 2023-01-14 14:00:00 (Sat)
  63803386800, #  local_start 2022-11-06 03:00:00 (Sun)
  63809434800, #    local_end 2023-01-15 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63809388000, #    utc_start 2023-01-14 14:00:00 (Sat)
  63834789600, #      utc_end 2023-11-04 14:00:00 (Sat)
  63809431200, #  local_start 2023-01-15 02:00:00 (Sun)
  63834832800, #    local_end 2023-11-05 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63834789600, #    utc_start 2023-11-04 14:00:00 (Sat)
  63841442400, #      utc_end 2024-01-20 14:00:00 (Sat)
  63834836400, #  local_start 2023-11-05 03:00:00 (Sun)
  63841489200, #    local_end 2024-01-21 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63841442400, #    utc_start 2024-01-20 14:00:00 (Sat)
  63866239200, #      utc_end 2024-11-02 14:00:00 (Sat)
  63841485600, #  local_start 2024-01-21 02:00:00 (Sun)
  63866282400, #    local_end 2024-11-03 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63866239200, #    utc_start 2024-11-02 14:00:00 (Sat)
  63872892000, #      utc_end 2025-01-18 14:00:00 (Sat)
  63866286000, #  local_start 2024-11-03 03:00:00 (Sun)
  63872938800, #    local_end 2025-01-19 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63872892000, #    utc_start 2025-01-18 14:00:00 (Sat)
  63897688800, #      utc_end 2025-11-01 14:00:00 (Sat)
  63872935200, #  local_start 2025-01-19 02:00:00 (Sun)
  63897732000, #    local_end 2025-11-02 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63897688800, #    utc_start 2025-11-01 14:00:00 (Sat)
  63904341600, #      utc_end 2026-01-17 14:00:00 (Sat)
  63897735600, #  local_start 2025-11-02 03:00:00 (Sun)
  63904388400, #    local_end 2026-01-18 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63904341600, #    utc_start 2026-01-17 14:00:00 (Sat)
  63929138400, #      utc_end 2026-10-31 14:00:00 (Sat)
  63904384800, #  local_start 2026-01-18 02:00:00 (Sun)
  63929181600, #    local_end 2026-11-01 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
      [
  63929138400, #    utc_start 2026-10-31 14:00:00 (Sat)
  63935791200, #      utc_end 2027-01-16 14:00:00 (Sat)
  63929185200, #  local_start 2026-11-01 03:00:00 (Sun)
  63935838000, #    local_end 2027-01-17 03:00:00 (Sun)
  46800,
  1,
  'FJST',
      ],
      [
  63935791200, #    utc_start 2027-01-16 14:00:00 (Sat)
  63961192800, #      utc_end 2027-11-06 14:00:00 (Sat)
  63935834400, #  local_start 2027-01-17 02:00:00 (Sun)
  63961236000, #    local_end 2027-11-07 02:00:00 (Sun)
  43200,
  0,
  'FJT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {21}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 43200 }
  
  my $last_observance = bless( {
    'format' => 'FJ%sT',
    'gmtoff' => '12:00',
    'local_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 699372,
      'local_rd_secs' => 256,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 699372,
      'utc_rd_secs' => 256,
      'utc_year' => 1916
    }, 'DateTime' ),
    'offset_from_std' => 0,
    'offset_from_utc' => 43200,
    'until' => [],
    'utc_start_datetime' => bless( {
      'formatter' => undef,
      'local_rd_days' => 699371,
      'local_rd_secs' => 43456,
      'offset_modifier' => 0,
      'rd_nanosecs' => 0,
      'tz' => bless( {
        'name' => 'floating',
        'offset' => 0
      }, 'DateTime::TimeZone::Floating' ),
      'utc_rd_days' => 699371,
      'utc_rd_secs' => 43456,
      'utc_year' => 1916
    }, 'DateTime' )
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '3:00',
      'from' => '2015',
      'in' => 'Jan',
      'letter' => '',
      'name' => 'Fiji',
      'offset_from_std' => 0,
      'on' => 'Sun>=15',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '2:00',
      'from' => '2014',
      'in' => 'Nov',
      'letter' => 'S',
      'name' => 'Fiji',
      'offset_from_std' => 3600,
      'on' => 'Sun>=1',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_FIJI

    $main::fatpacked{"DateTime/TimeZone/Pacific/Funafuti.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_FUNAFUTI';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Funafuti;
  $DateTime::TimeZone::Pacific::Funafuti::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Funafuti::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958187388, #      utc_end 1900-12-31 12:03:08 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  43012,
  0,
  'LMT',
      ],
      [
  59958187388, #    utc_start 1900-12-31 12:03:08 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  59958230588, #  local_start 1901-01-01 00:03:08 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  43200,
  0,
  'TVT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_FUNAFUTI

    $main::fatpacked{"DateTime/TimeZone/Pacific/Galapagos.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_GALAPAGOS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/southamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Galapagos;
  $DateTime::TimeZone::Pacific::Galapagos::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Galapagos::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60904936704, #      utc_end 1931-01-01 05:58:24 (Thu)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60904915200, #    local_end 1931-01-01 00:00:00 (Thu)
  -21504,
  0,
  'LMT',
      ],
      [
  60904936704, #    utc_start 1931-01-01 05:58:24 (Thu)
  62640622800, #      utc_end 1986-01-01 05:00:00 (Wed)
  60904918704, #  local_start 1931-01-01 00:58:24 (Thu)
  62640604800, #    local_end 1986-01-01 00:00:00 (Wed)
  -18000,
  0,
  'ECT',
      ],
      [
  62640622800, #    utc_start 1986-01-01 05:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #      utc_end
  62640601200, #  local_start 1985-12-31 23:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  -21600,
  0,
  'GALT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_GALAPAGOS

    $main::fatpacked{"DateTime/TimeZone/Pacific/Gambier.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_GAMBIER';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Gambier;
  $DateTime::TimeZone::Pacific::Gambier::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Gambier::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60329005188, #      utc_end 1912-10-01 08:59:48 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60328972800, #    local_end 1912-10-01 00:00:00 (Tue)
  -32388,
  0,
  'LMT',
      ],
      [
  60329005188, #    utc_start 1912-10-01 08:59:48 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  60328972788, #  local_start 1912-09-30 23:59:48 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  -32400,
  0,
  'GAMT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_GAMBIER

    $main::fatpacked{"DateTime/TimeZone/Pacific/Guadalcanal.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_GUADALCANAL';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Guadalcanal;
  $DateTime::TimeZone::Pacific::Guadalcanal::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Guadalcanal::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60328934412, #      utc_end 1912-09-30 13:20:12 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60328972800, #    local_end 1912-10-01 00:00:00 (Tue)
  38388,
  0,
  'LMT',
      ],
      [
  60328934412, #    utc_start 1912-09-30 13:20:12 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  60328974012, #  local_start 1912-10-01 00:20:12 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  39600,
  0,
  'SBT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_GUADALCANAL

    $main::fatpacked{"DateTime/TimeZone/Pacific/Guam.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_GUAM';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Guam;
  $DateTime::TimeZone::Pacific::Guam::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Guam::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  58191056460, #      utc_end 1844-12-31 14:21:00 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  58191004800, #    local_end 1844-12-31 00:00:00 (Tue)
  -51660,
  0,
  'LMT',
      ],
      [
  58191056460, #    utc_start 1844-12-31 14:21:00 (Tue)
  59958195660, #      utc_end 1900-12-31 14:21:00 (Mon)
  58191091200, #  local_start 1845-01-01 00:00:00 (Wed)
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  34740,
  0,
  'LMT',
      ],
      [
  59958195660, #    utc_start 1900-12-31 14:21:00 (Mon)
  63113176800, #      utc_end 2000-12-22 14:00:00 (Fri)
  59958231660, #  local_start 1901-01-01 00:21:00 (Tue)
  63113212800, #    local_end 2000-12-23 00:00:00 (Sat)
  36000,
  0,
  'GST',
      ],
      [
  63113176800, #    utc_start 2000-12-22 14:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #      utc_end
  63113212800, #  local_start 2000-12-23 00:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  36000,
  0,
  'ChST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_GUAM

    $main::fatpacked{"DateTime/TimeZone/Pacific/Honolulu.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_HONOLULU';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/northamerica.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Honolulu;
  $DateTime::TimeZone::Pacific::Honolulu::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Honolulu::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59801581886, #      utc_end 1896-01-13 22:31:26 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59801544000, #    local_end 1896-01-13 12:00:00 (Mon)
  -37886,
  0,
  'LMT',
      ],
      [
  59801581886, #    utc_start 1896-01-13 22:31:26 (Mon)
  60978400200, #      utc_end 1933-04-30 12:30:00 (Sun)
  59801544086, #  local_start 1896-01-13 12:01:26 (Mon)
  60978362400, #    local_end 1933-04-30 02:00:00 (Sun)
  -37800,
  0,
  'HST',
      ],
      [
  60978400200, #    utc_start 1933-04-30 12:30:00 (Sun)
  60980247000, #      utc_end 1933-05-21 21:30:00 (Sun)
  60978366000, #  local_start 1933-04-30 03:00:00 (Sun)
  60980212800, #    local_end 1933-05-21 12:00:00 (Sun)
  -34200,
  1,
  'HDT',
      ],
      [
  60980247000, #    utc_start 1933-05-21 21:30:00 (Sun)
  61255485000, #      utc_end 1942-02-09 12:30:00 (Mon)
  60980209200, #  local_start 1933-05-21 11:00:00 (Sun)
  61255447200, #    local_end 1942-02-09 02:00:00 (Mon)
  -37800,
  0,
  'HST',
      ],
      [
  61255485000, #    utc_start 1942-02-09 12:30:00 (Mon)
  61370307000, #      utc_end 1945-09-30 11:30:00 (Sun)
  61255450800, #  local_start 1942-02-09 03:00:00 (Mon)
  61370272800, #    local_end 1945-09-30 02:00:00 (Sun)
  -34200,
  1,
  'HDT',
      ],
      [
  61370307000, #    utc_start 1945-09-30 11:30:00 (Sun)
  61423533000, #      utc_end 1947-06-08 12:30:00 (Sun)
  61370269200, #  local_start 1945-09-30 01:00:00 (Sun)
  61423495200, #    local_end 1947-06-08 02:00:00 (Sun)
  -37800,
  0,
  'HST',
      ],
      [
  61423533000, #    utc_start 1947-06-08 12:30:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  61423497000, #  local_start 1947-06-08 02:30:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -36000,
  0,
  'HST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {2}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_HONOLULU

    $main::fatpacked{"DateTime/TimeZone/Pacific/Kiritimati.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_KIRITIMATI';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Kiritimati;
  $DateTime::TimeZone::Pacific::Kiritimati::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Kiritimati::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958268160, #      utc_end 1901-01-01 10:29:20 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  -37760,
  0,
  'LMT',
      ],
      [
  59958268160, #    utc_start 1901-01-01 10:29:20 (Tue)
  62443305600, #      utc_end 1979-10-01 10:40:00 (Mon)
  59958229760, #  local_start 1900-12-31 23:49:20 (Mon)
  62443267200, #    local_end 1979-10-01 00:00:00 (Mon)
  -38400,
  0,
  'LINT',
      ],
      [
  62443305600, #    utc_start 1979-10-01 10:40:00 (Mon)
  62924637600, #      utc_end 1995-01-01 10:00:00 (Sun)
  62443269600, #  local_start 1979-10-01 00:40:00 (Mon)
  62924601600, #    local_end 1995-01-01 00:00:00 (Sun)
  -36000,
  0,
  'LINT',
      ],
      [
  62924637600, #    utc_start 1995-01-01 10:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  62924688000, #  local_start 1995-01-02 00:00:00 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  50400,
  0,
  'LINT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_KIRITIMATI

    $main::fatpacked{"DateTime/TimeZone/Pacific/Kosrae.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_KOSRAE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Kosrae;
  $DateTime::TimeZone::Pacific::Kosrae::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Kosrae::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958191284, #      utc_end 1900-12-31 13:08:04 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  39116,
  0,
  'LMT',
      ],
      [
  59958191284, #    utc_start 1900-12-31 13:08:04 (Mon)
  62127694800, #      utc_end 1969-09-30 13:00:00 (Tue)
  59958230884, #  local_start 1901-01-01 00:08:04 (Tue)
  62127734400, #    local_end 1969-10-01 00:00:00 (Wed)
  39600,
  0,
  'KOST',
      ],
      [
  62127694800, #    utc_start 1969-09-30 13:00:00 (Tue)
  63050788800, #      utc_end 1998-12-31 12:00:00 (Thu)
  62127738000, #  local_start 1969-10-01 01:00:00 (Wed)
  63050832000, #    local_end 1999-01-01 00:00:00 (Fri)
  43200,
  0,
  'KOST',
      ],
      [
  63050788800, #    utc_start 1998-12-31 12:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #      utc_end
  63050828400, #  local_start 1998-12-31 23:00:00 (Thu)
  DateTime::TimeZone::INFINITY, #    local_end
  39600,
  0,
  'KOST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_KOSRAE

    $main::fatpacked{"DateTime/TimeZone/Pacific/Kwajalein.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_KWAJALEIN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Kwajalein;
  $DateTime::TimeZone::Pacific::Kwajalein::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Kwajalein::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958190240, #      utc_end 1900-12-31 12:50:40 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  40160,
  0,
  'LMT',
      ],
      [
  59958190240, #    utc_start 1900-12-31 12:50:40 (Mon)
  62127694800, #      utc_end 1969-09-30 13:00:00 (Tue)
  59958229840, #  local_start 1900-12-31 23:50:40 (Mon)
  62127734400, #    local_end 1969-10-01 00:00:00 (Wed)
  39600,
  0,
  'MHT',
      ],
      [
  62127694800, #    utc_start 1969-09-30 13:00:00 (Tue)
  62881531200, #      utc_end 1993-08-20 12:00:00 (Fri)
  62127651600, #  local_start 1969-09-30 01:00:00 (Tue)
  62881488000, #    local_end 1993-08-20 00:00:00 (Fri)
  -43200,
  0,
  'KWAT',
      ],
      [
  62881531200, #    utc_start 1993-08-20 12:00:00 (Fri)
  DateTime::TimeZone::INFINITY, #      utc_end
  62881574400, #  local_start 1993-08-21 00:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  43200,
  0,
  'MHT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_KWAJALEIN

    $main::fatpacked{"DateTime/TimeZone/Pacific/Majuro.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_MAJURO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Majuro;
  $DateTime::TimeZone::Pacific::Majuro::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Majuro::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958189312, #      utc_end 1900-12-31 12:35:12 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  41088,
  0,
  'LMT',
      ],
      [
  59958189312, #    utc_start 1900-12-31 12:35:12 (Mon)
  62127694800, #      utc_end 1969-09-30 13:00:00 (Tue)
  59958228912, #  local_start 1900-12-31 23:35:12 (Mon)
  62127734400, #    local_end 1969-10-01 00:00:00 (Wed)
  39600,
  0,
  'MHT',
      ],
      [
  62127694800, #    utc_start 1969-09-30 13:00:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  62127738000, #  local_start 1969-10-01 01:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #    local_end
  43200,
  0,
  'MHT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_MAJURO

    $main::fatpacked{"DateTime/TimeZone/Pacific/Marquesas.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_MARQUESAS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Marquesas;
  $DateTime::TimeZone::Pacific::Marquesas::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Marquesas::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60329006280, #      utc_end 1912-10-01 09:18:00 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60328972800, #    local_end 1912-10-01 00:00:00 (Tue)
  -33480,
  0,
  'LMT',
      ],
      [
  60329006280, #    utc_start 1912-10-01 09:18:00 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  60328972080, #  local_start 1912-09-30 23:48:00 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  -34200,
  0,
  'MART',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_MARQUESAS

    $main::fatpacked{"DateTime/TimeZone/Pacific/Nauru.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_NAURU';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Nauru;
  $DateTime::TimeZone::Pacific::Nauru::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Nauru::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60590551940, #      utc_end 1921-01-14 12:52:20 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60590592000, #    local_end 1921-01-15 00:00:00 (Sat)
  40060,
  0,
  'LMT',
      ],
      [
  60590551940, #    utc_start 1921-01-14 12:52:20 (Fri)
  61258336200, #      utc_end 1942-03-14 12:30:00 (Sat)
  60590593340, #  local_start 1921-01-15 00:22:20 (Sat)
  61258377600, #    local_end 1942-03-15 00:00:00 (Sun)
  41400,
  0,
  'NRT',
      ],
      [
  61258336200, #    utc_start 1942-03-14 12:30:00 (Sat)
  61334722800, #      utc_end 1944-08-14 15:00:00 (Mon)
  61258368600, #  local_start 1942-03-14 21:30:00 (Sat)
  61334755200, #    local_end 1944-08-15 00:00:00 (Tue)
  32400,
  0,
  'JST',
      ],
      [
  61334722800, #    utc_start 1944-08-14 15:00:00 (Mon)
  62430006600, #      utc_end 1979-04-30 12:30:00 (Mon)
  61334764200, #  local_start 1944-08-15 02:30:00 (Tue)
  62430048000, #    local_end 1979-05-01 00:00:00 (Tue)
  41400,
  0,
  'NRT',
      ],
      [
  62430006600, #    utc_start 1979-04-30 12:30:00 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  62430049800, #  local_start 1979-05-01 00:30:00 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  43200,
  0,
  'NRT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_NAURU

    $main::fatpacked{"DateTime/TimeZone/Pacific/Niue.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_NIUE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Niue;
  $DateTime::TimeZone::Pacific::Niue::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Niue::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958271180, #      utc_end 1901-01-01 11:19:40 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  -40780,
  0,
  'LMT',
      ],
      [
  59958271180, #    utc_start 1901-01-01 11:19:40 (Tue)
  61536108000, #      utc_end 1951-01-01 11:20:00 (Mon)
  59958230380, #  local_start 1900-12-31 23:59:40 (Mon)
  61536067200, #    local_end 1951-01-01 00:00:00 (Mon)
  -40800,
  0,
  'NUT',
      ],
      [
  61536108000, #    utc_start 1951-01-01 11:20:00 (Mon)
  62411772600, #      utc_end 1978-10-01 11:30:00 (Sun)
  61536066600, #  local_start 1950-12-31 23:50:00 (Sun)
  62411731200, #    local_end 1978-10-01 00:00:00 (Sun)
  -41400,
  0,
  'NUT',
      ],
      [
  62411772600, #    utc_start 1978-10-01 11:30:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  62411733000, #  local_start 1978-10-01 00:30:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  -39600,
  0,
  'NUT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_NIUE

    $main::fatpacked{"DateTime/TimeZone/Pacific/Norfolk.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_NORFOLK';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Norfolk;
  $DateTime::TimeZone::Pacific::Norfolk::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Norfolk::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958190088, #      utc_end 1900-12-31 12:48:08 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  40312,
  0,
  'LMT',
      ],
      [
  59958190088, #    utc_start 1900-12-31 12:48:08 (Mon)
  61536026880, #      utc_end 1950-12-31 12:48:00 (Sun)
  59958230408, #  local_start 1901-01-01 00:00:08 (Tue)
  61536067200, #    local_end 1951-01-01 00:00:00 (Mon)
  40320,
  0,
  'NMT',
      ],
      [
  61536026880, #    utc_start 1950-12-31 12:48:00 (Sun)
  62287713000, #      utc_end 1974-10-26 14:30:00 (Sat)
  61536068280, #  local_start 1951-01-01 00:18:00 (Mon)
  62287754400, #    local_end 1974-10-27 02:00:00 (Sun)
  41400,
  0,
  'NFT',
      ],
      [
  62287713000, #    utc_start 1974-10-26 14:30:00 (Sat)
  62298595800, #      utc_end 1975-03-01 13:30:00 (Sat)
  62287758000, #  local_start 1974-10-27 03:00:00 (Sun)
  62298640800, #    local_end 1975-03-02 02:00:00 (Sun)
  45000,
  1,
  'NFST',
      ],
      [
  62298595800, #    utc_start 1975-03-01 13:30:00 (Sat)
  63579565800, #      utc_end 2015-10-03 14:30:00 (Sat)
  62298637200, #  local_start 1975-03-02 01:00:00 (Sun)
  63579607200, #    local_end 2015-10-04 02:00:00 (Sun)
  41400,
  0,
  'NFT',
      ],
      [
  63579565800, #    utc_start 2015-10-03 14:30:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63579605400, #  local_start 2015-10-04 01:30:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  39600,
  0,
  'NFT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {1}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_NORFOLK

    $main::fatpacked{"DateTime/TimeZone/Pacific/Noumea.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_NOUMEA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Noumea;
  $DateTime::TimeZone::Pacific::Noumea::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Noumea::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60306296052, #      utc_end 1912-01-12 12:54:12 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60306336000, #    local_end 1912-01-13 00:00:00 (Sat)
  39948,
  0,
  'LMT',
      ],
      [
  60306296052, #    utc_start 1912-01-12 12:54:12 (Fri)
  62385685200, #      utc_end 1977-12-03 13:00:00 (Sat)
  60306335652, #  local_start 1912-01-12 23:54:12 (Fri)
  62385724800, #    local_end 1977-12-04 00:00:00 (Sun)
  39600,
  0,
  'NCT',
      ],
      [
  62385685200, #    utc_start 1977-12-03 13:00:00 (Sat)
  62393025600, #      utc_end 1978-02-26 12:00:00 (Sun)
  62385728400, #  local_start 1977-12-04 01:00:00 (Sun)
  62393068800, #    local_end 1978-02-27 00:00:00 (Mon)
  43200,
  1,
  'NCST',
      ],
      [
  62393025600, #    utc_start 1978-02-26 12:00:00 (Sun)
  62417134800, #      utc_end 1978-12-02 13:00:00 (Sat)
  62393065200, #  local_start 1978-02-26 23:00:00 (Sun)
  62417174400, #    local_end 1978-12-03 00:00:00 (Sun)
  39600,
  0,
  'NCT',
      ],
      [
  62417134800, #    utc_start 1978-12-02 13:00:00 (Sat)
  62424561600, #      utc_end 1979-02-26 12:00:00 (Mon)
  62417178000, #  local_start 1978-12-03 01:00:00 (Sun)
  62424604800, #    local_end 1979-02-27 00:00:00 (Tue)
  43200,
  1,
  'NCST',
      ],
      [
  62424561600, #    utc_start 1979-02-26 12:00:00 (Mon)
  62985049200, #      utc_end 1996-11-30 15:00:00 (Sat)
  62424601200, #  local_start 1979-02-26 23:00:00 (Mon)
  62985088800, #    local_end 1996-12-01 02:00:00 (Sun)
  39600,
  0,
  'NCT',
      ],
      [
  62985049200, #    utc_start 1996-11-30 15:00:00 (Sat)
  62992911600, #      utc_end 1997-03-01 15:00:00 (Sat)
  62985092400, #  local_start 1996-12-01 03:00:00 (Sun)
  62992954800, #    local_end 1997-03-02 03:00:00 (Sun)
  43200,
  1,
  'NCST',
      ],
      [
  62992911600, #    utc_start 1997-03-01 15:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  62992951200, #  local_start 1997-03-02 02:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  39600,
  0,
  'NCT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {3}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_NOUMEA

    $main::fatpacked{"DateTime/TimeZone/Pacific/Pago_Pago.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_PAGO_PAGO';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Pago_Pago;
  $DateTime::TimeZone::Pacific::Pago_Pago::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Pago_Pago::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59279944968, #      utc_end 1879-07-04 11:22:48 (Fri)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59279990400, #    local_end 1879-07-05 00:00:00 (Sat)
  45432,
  0,
  'LMT',
      ],
      [
  59279944968, #    utc_start 1879-07-04 11:22:48 (Fri)
  60273804168, #      utc_end 1911-01-01 11:22:48 (Sun)
  59279904000, #  local_start 1879-07-04 00:00:00 (Fri)
  60273763200, #    local_end 1911-01-01 00:00:00 (Sun)
  -40968,
  0,
  'LMT',
      ],
      [
  60273804168, #    utc_start 1911-01-01 11:22:48 (Sun)
  62048804400, #      utc_end 1967-04-01 11:00:00 (Sat)
  60273764568, #  local_start 1911-01-01 00:22:48 (Sun)
  62048764800, #    local_end 1967-04-01 00:00:00 (Sat)
  -39600,
  0,
  'NST',
      ],
      [
  62048804400, #    utc_start 1967-04-01 11:00:00 (Sat)
  62574721200, #      utc_end 1983-11-30 11:00:00 (Wed)
  62048764800, #  local_start 1967-04-01 00:00:00 (Sat)
  62574681600, #    local_end 1983-11-30 00:00:00 (Wed)
  -39600,
  0,
  'BST',
      ],
      [
  62574721200, #    utc_start 1983-11-30 11:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #      utc_end
  62574681600, #  local_start 1983-11-30 00:00:00 (Wed)
  DateTime::TimeZone::INFINITY, #    local_end
  -39600,
  0,
  'SST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_PAGO_PAGO

    $main::fatpacked{"DateTime/TimeZone/Pacific/Palau.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_PALAU';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Palau;
  $DateTime::TimeZone::Pacific::Palau::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Palau::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958198124, #      utc_end 1900-12-31 15:02:04 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  32276,
  0,
  'LMT',
      ],
      [
  59958198124, #    utc_start 1900-12-31 15:02:04 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  59958230524, #  local_start 1901-01-01 00:02:04 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  32400,
  0,
  'PWT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_PALAU

    $main::fatpacked{"DateTime/TimeZone/Pacific/Pitcairn.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_PITCAIRN';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Pitcairn;
  $DateTime::TimeZone::Pacific::Pitcairn::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Pitcairn::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958261620, #      utc_end 1901-01-01 08:40:20 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  -31220,
  0,
  'LMT',
      ],
      [
  59958261620, #    utc_start 1901-01-01 08:40:20 (Tue)
  63029349000, #      utc_end 1998-04-27 08:30:00 (Mon)
  59958231020, #  local_start 1901-01-01 00:10:20 (Tue)
  63029318400, #    local_end 1998-04-27 00:00:00 (Mon)
  -30600,
  0,
  'PNT',
      ],
      [
  63029349000, #    utc_start 1998-04-27 08:30:00 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  63029320200, #  local_start 1998-04-27 00:30:00 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  -28800,
  0,
  'PST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_PITCAIRN

    $main::fatpacked{"DateTime/TimeZone/Pacific/Pohnpei.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_POHNPEI';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Pohnpei;
  $DateTime::TimeZone::Pacific::Pohnpei::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Pohnpei::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958192428, #      utc_end 1900-12-31 13:27:08 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  37972,
  0,
  'LMT',
      ],
      [
  59958192428, #    utc_start 1900-12-31 13:27:08 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  59958232028, #  local_start 1901-01-01 00:27:08 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  39600,
  0,
  'PONT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_POHNPEI

    $main::fatpacked{"DateTime/TimeZone/Pacific/Port_Moresby.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_PORT_MORESBY';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Port_Moresby;
  $DateTime::TimeZone::Pacific::Port_Moresby::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Port_Moresby::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59295507080, #      utc_end 1879-12-31 14:11:20 (Wed)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59295542400, #    local_end 1880-01-01 00:00:00 (Thu)
  35320,
  0,
  'LMT',
      ],
      [
  59295507080, #    utc_start 1879-12-31 14:11:20 (Wed)
  59768892688, #      utc_end 1894-12-31 14:11:28 (Mon)
  59295542392, #  local_start 1879-12-31 23:59:52 (Wed)
  59768928000, #    local_end 1895-01-01 00:00:00 (Tue)
  35312,
  0,
  'PMMT',
      ],
      [
  59768892688, #    utc_start 1894-12-31 14:11:28 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  59768928688, #  local_start 1895-01-01 00:11:28 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  36000,
  0,
  'PGT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_PORT_MORESBY

    $main::fatpacked{"DateTime/TimeZone/Pacific/Rarotonga.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_RAROTONGA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Rarotonga;
  $DateTime::TimeZone::Pacific::Rarotonga::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Rarotonga::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958268744, #      utc_end 1901-01-01 10:39:04 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  -38344,
  0,
  'LMT',
      ],
      [
  59958268744, #    utc_start 1901-01-01 10:39:04 (Tue)
  62415397800, #      utc_end 1978-11-12 10:30:00 (Sun)
  59958230944, #  local_start 1901-01-01 00:09:04 (Tue)
  62415360000, #    local_end 1978-11-12 00:00:00 (Sun)
  -37800,
  0,
  'CKT',
      ],
      [
  62415397800, #    utc_start 1978-11-12 10:30:00 (Sun)
  62425071000, #      utc_end 1979-03-04 09:30:00 (Sun)
  62415363600, #  local_start 1978-11-12 01:00:00 (Sun)
  62425036800, #    local_end 1979-03-04 00:00:00 (Sun)
  -34200,
  1,
  'CKHST',
      ],
      [
  62425071000, #    utc_start 1979-03-04 09:30:00 (Sun)
  62445636000, #      utc_end 1979-10-28 10:00:00 (Sun)
  62425035000, #  local_start 1979-03-03 23:30:00 (Sat)
  62445600000, #    local_end 1979-10-28 00:00:00 (Sun)
  -36000,
  0,
  'CKT',
      ],
      [
  62445636000, #    utc_start 1979-10-28 10:00:00 (Sun)
  62456520600, #      utc_end 1980-03-02 09:30:00 (Sun)
  62445601800, #  local_start 1979-10-28 00:30:00 (Sun)
  62456486400, #    local_end 1980-03-02 00:00:00 (Sun)
  -34200,
  1,
  'CKHST',
      ],
      [
  62456520600, #    utc_start 1980-03-02 09:30:00 (Sun)
  62477085600, #      utc_end 1980-10-26 10:00:00 (Sun)
  62456484600, #  local_start 1980-03-01 23:30:00 (Sat)
  62477049600, #    local_end 1980-10-26 00:00:00 (Sun)
  -36000,
  0,
  'CKT',
      ],
      [
  62477085600, #    utc_start 1980-10-26 10:00:00 (Sun)
  62487970200, #      utc_end 1981-03-01 09:30:00 (Sun)
  62477051400, #  local_start 1980-10-26 00:30:00 (Sun)
  62487936000, #    local_end 1981-03-01 00:00:00 (Sun)
  -34200,
  1,
  'CKHST',
      ],
      [
  62487970200, #    utc_start 1981-03-01 09:30:00 (Sun)
  62508535200, #      utc_end 1981-10-25 10:00:00 (Sun)
  62487934200, #  local_start 1981-02-28 23:30:00 (Sat)
  62508499200, #    local_end 1981-10-25 00:00:00 (Sun)
  -36000,
  0,
  'CKT',
      ],
      [
  62508535200, #    utc_start 1981-10-25 10:00:00 (Sun)
  62520024600, #      utc_end 1982-03-07 09:30:00 (Sun)
  62508501000, #  local_start 1981-10-25 00:30:00 (Sun)
  62519990400, #    local_end 1982-03-07 00:00:00 (Sun)
  -34200,
  1,
  'CKHST',
      ],
      [
  62520024600, #    utc_start 1982-03-07 09:30:00 (Sun)
  62540589600, #      utc_end 1982-10-31 10:00:00 (Sun)
  62519988600, #  local_start 1982-03-06 23:30:00 (Sat)
  62540553600, #    local_end 1982-10-31 00:00:00 (Sun)
  -36000,
  0,
  'CKT',
      ],
      [
  62540589600, #    utc_start 1982-10-31 10:00:00 (Sun)
  62551474200, #      utc_end 1983-03-06 09:30:00 (Sun)
  62540555400, #  local_start 1982-10-31 00:30:00 (Sun)
  62551440000, #    local_end 1983-03-06 00:00:00 (Sun)
  -34200,
  1,
  'CKHST',
      ],
      [
  62551474200, #    utc_start 1983-03-06 09:30:00 (Sun)
  62572039200, #      utc_end 1983-10-30 10:00:00 (Sun)
  62551438200, #  local_start 1983-03-05 23:30:00 (Sat)
  62572003200, #    local_end 1983-10-30 00:00:00 (Sun)
  -36000,
  0,
  'CKT',
      ],
      [
  62572039200, #    utc_start 1983-10-30 10:00:00 (Sun)
  62582923800, #      utc_end 1984-03-04 09:30:00 (Sun)
  62572005000, #  local_start 1983-10-30 00:30:00 (Sun)
  62582889600, #    local_end 1984-03-04 00:00:00 (Sun)
  -34200,
  1,
  'CKHST',
      ],
      [
  62582923800, #    utc_start 1984-03-04 09:30:00 (Sun)
  62603488800, #      utc_end 1984-10-28 10:00:00 (Sun)
  62582887800, #  local_start 1984-03-03 23:30:00 (Sat)
  62603452800, #    local_end 1984-10-28 00:00:00 (Sun)
  -36000,
  0,
  'CKT',
      ],
      [
  62603488800, #    utc_start 1984-10-28 10:00:00 (Sun)
  62614373400, #      utc_end 1985-03-03 09:30:00 (Sun)
  62603454600, #  local_start 1984-10-28 00:30:00 (Sun)
  62614339200, #    local_end 1985-03-03 00:00:00 (Sun)
  -34200,
  1,
  'CKHST',
      ],
      [
  62614373400, #    utc_start 1985-03-03 09:30:00 (Sun)
  62634938400, #      utc_end 1985-10-27 10:00:00 (Sun)
  62614337400, #  local_start 1985-03-02 23:30:00 (Sat)
  62634902400, #    local_end 1985-10-27 00:00:00 (Sun)
  -36000,
  0,
  'CKT',
      ],
      [
  62634938400, #    utc_start 1985-10-27 10:00:00 (Sun)
  62645823000, #      utc_end 1986-03-02 09:30:00 (Sun)
  62634904200, #  local_start 1985-10-27 00:30:00 (Sun)
  62645788800, #    local_end 1986-03-02 00:00:00 (Sun)
  -34200,
  1,
  'CKHST',
      ],
      [
  62645823000, #    utc_start 1986-03-02 09:30:00 (Sun)
  62666388000, #      utc_end 1986-10-26 10:00:00 (Sun)
  62645787000, #  local_start 1986-03-01 23:30:00 (Sat)
  62666352000, #    local_end 1986-10-26 00:00:00 (Sun)
  -36000,
  0,
  'CKT',
      ],
      [
  62666388000, #    utc_start 1986-10-26 10:00:00 (Sun)
  62677272600, #      utc_end 1987-03-01 09:30:00 (Sun)
  62666353800, #  local_start 1986-10-26 00:30:00 (Sun)
  62677238400, #    local_end 1987-03-01 00:00:00 (Sun)
  -34200,
  1,
  'CKHST',
      ],
      [
  62677272600, #    utc_start 1987-03-01 09:30:00 (Sun)
  62697837600, #      utc_end 1987-10-25 10:00:00 (Sun)
  62677236600, #  local_start 1987-02-28 23:30:00 (Sat)
  62697801600, #    local_end 1987-10-25 00:00:00 (Sun)
  -36000,
  0,
  'CKT',
      ],
      [
  62697837600, #    utc_start 1987-10-25 10:00:00 (Sun)
  62709327000, #      utc_end 1988-03-06 09:30:00 (Sun)
  62697803400, #  local_start 1987-10-25 00:30:00 (Sun)
  62709292800, #    local_end 1988-03-06 00:00:00 (Sun)
  -34200,
  1,
  'CKHST',
      ],
      [
  62709327000, #    utc_start 1988-03-06 09:30:00 (Sun)
  62729892000, #      utc_end 1988-10-30 10:00:00 (Sun)
  62709291000, #  local_start 1988-03-05 23:30:00 (Sat)
  62729856000, #    local_end 1988-10-30 00:00:00 (Sun)
  -36000,
  0,
  'CKT',
      ],
      [
  62729892000, #    utc_start 1988-10-30 10:00:00 (Sun)
  62740776600, #      utc_end 1989-03-05 09:30:00 (Sun)
  62729857800, #  local_start 1988-10-30 00:30:00 (Sun)
  62740742400, #    local_end 1989-03-05 00:00:00 (Sun)
  -34200,
  1,
  'CKHST',
      ],
      [
  62740776600, #    utc_start 1989-03-05 09:30:00 (Sun)
  62761341600, #      utc_end 1989-10-29 10:00:00 (Sun)
  62740740600, #  local_start 1989-03-04 23:30:00 (Sat)
  62761305600, #    local_end 1989-10-29 00:00:00 (Sun)
  -36000,
  0,
  'CKT',
      ],
      [
  62761341600, #    utc_start 1989-10-29 10:00:00 (Sun)
  62772226200, #      utc_end 1990-03-04 09:30:00 (Sun)
  62761307400, #  local_start 1989-10-29 00:30:00 (Sun)
  62772192000, #    local_end 1990-03-04 00:00:00 (Sun)
  -34200,
  1,
  'CKHST',
      ],
      [
  62772226200, #    utc_start 1990-03-04 09:30:00 (Sun)
  62792791200, #      utc_end 1990-10-28 10:00:00 (Sun)
  62772190200, #  local_start 1990-03-03 23:30:00 (Sat)
  62792755200, #    local_end 1990-10-28 00:00:00 (Sun)
  -36000,
  0,
  'CKT',
      ],
      [
  62792791200, #    utc_start 1990-10-28 10:00:00 (Sun)
  62803675800, #      utc_end 1991-03-03 09:30:00 (Sun)
  62792757000, #  local_start 1990-10-28 00:30:00 (Sun)
  62803641600, #    local_end 1991-03-03 00:00:00 (Sun)
  -34200,
  1,
  'CKHST',
      ],
      [
  62803675800, #    utc_start 1991-03-03 09:30:00 (Sun)
  DateTime::TimeZone::INFINITY, #      utc_end
  62803639800, #  local_start 1991-03-02 23:30:00 (Sat)
  DateTime::TimeZone::INFINITY, #    local_end
  -36000,
  0,
  'CKT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {13}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_RAROTONGA

    $main::fatpacked{"DateTime/TimeZone/Pacific/Tahiti.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_TAHITI';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Tahiti;
  $DateTime::TimeZone::Pacific::Tahiti::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Tahiti::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  60329008696, #      utc_end 1912-10-01 09:58:16 (Tue)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  60328972800, #    local_end 1912-10-01 00:00:00 (Tue)
  -35896,
  0,
  'LMT',
      ],
      [
  60329008696, #    utc_start 1912-10-01 09:58:16 (Tue)
  DateTime::TimeZone::INFINITY, #      utc_end
  60328972696, #  local_start 1912-09-30 23:58:16 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  -36000,
  0,
  'TAHT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_TAHITI

    $main::fatpacked{"DateTime/TimeZone/Pacific/Tarawa.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_TARAWA';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Tarawa;
  $DateTime::TimeZone::Pacific::Tarawa::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Tarawa::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958188876, #      utc_end 1900-12-31 12:27:56 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  41524,
  0,
  'LMT',
      ],
      [
  59958188876, #    utc_start 1900-12-31 12:27:56 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  59958232076, #  local_start 1901-01-01 00:27:56 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  43200,
  0,
  'GILT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_TARAWA

    $main::fatpacked{"DateTime/TimeZone/Pacific/Tongatapu.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_TONGATAPU';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Tongatapu;
  $DateTime::TimeZone::Pacific::Tongatapu::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Tongatapu::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958186040, #      utc_end 1900-12-31 11:40:40 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  44360,
  0,
  'LMT',
      ],
      [
  59958186040, #    utc_start 1900-12-31 11:40:40 (Mon)
  61220490000, #      utc_end 1940-12-31 11:40:00 (Tue)
  59958230440, #  local_start 1901-01-01 00:00:40 (Tue)
  61220534400, #    local_end 1941-01-01 00:00:00 (Wed)
  44400,
  0,
  'TOT',
      ],
      [
  61220490000, #    utc_start 1940-12-31 11:40:00 (Tue)
  63050785200, #      utc_end 1998-12-31 11:00:00 (Thu)
  61220536800, #  local_start 1941-01-01 00:40:00 (Wed)
  63050832000, #    local_end 1999-01-01 00:00:00 (Fri)
  46800,
  0,
  'TOT',
      ],
      [
  63050785200, #    utc_start 1998-12-31 11:00:00 (Thu)
  63074898000, #      utc_end 1999-10-06 13:00:00 (Wed)
  63050832000, #  local_start 1999-01-01 00:00:00 (Fri)
  63074944800, #    local_end 1999-10-07 02:00:00 (Thu)
  46800,
  0,
  'TOT',
      ],
      [
  63074898000, #    utc_start 1999-10-06 13:00:00 (Wed)
  63089067600, #      utc_end 2000-03-18 13:00:00 (Sat)
  63074948400, #  local_start 1999-10-07 03:00:00 (Thu)
  63089118000, #    local_end 2000-03-19 03:00:00 (Sun)
  50400,
  1,
  'TOST',
      ],
      [
  63089067600, #    utc_start 2000-03-18 13:00:00 (Sat)
  63109026000, #      utc_end 2000-11-04 13:00:00 (Sat)
  63089114400, #  local_start 2000-03-19 02:00:00 (Sun)
  63109072800, #    local_end 2000-11-05 02:00:00 (Sun)
  46800,
  0,
  'TOT',
      ],
      [
  63109026000, #    utc_start 2000-11-04 13:00:00 (Sat)
  63116280000, #      utc_end 2001-01-27 12:00:00 (Sat)
  63109076400, #  local_start 2000-11-05 03:00:00 (Sun)
  63116330400, #    local_end 2001-01-28 02:00:00 (Sun)
  50400,
  1,
  'TOST',
      ],
      [
  63116280000, #    utc_start 2001-01-27 12:00:00 (Sat)
  63140475600, #      utc_end 2001-11-03 13:00:00 (Sat)
  63116326800, #  local_start 2001-01-28 01:00:00 (Sun)
  63140522400, #    local_end 2001-11-04 02:00:00 (Sun)
  46800,
  0,
  'TOT',
      ],
      [
  63140475600, #    utc_start 2001-11-03 13:00:00 (Sat)
  63147729600, #      utc_end 2002-01-26 12:00:00 (Sat)
  63140526000, #  local_start 2001-11-04 03:00:00 (Sun)
  63147780000, #    local_end 2002-01-27 02:00:00 (Sun)
  50400,
  1,
  'TOST',
      ],
      [
  63147729600, #    utc_start 2002-01-26 12:00:00 (Sat)
  DateTime::TimeZone::INFINITY, #      utc_end
  63147776400, #  local_start 2002-01-27 01:00:00 (Sun)
  DateTime::TimeZone::INFINITY, #    local_end
  46800,
  0,
  'TOT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {3}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_TONGATAPU

    $main::fatpacked{"DateTime/TimeZone/Pacific/Wake.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_WAKE';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Wake;
  $DateTime::TimeZone::Pacific::Wake::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Wake::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958190412, #      utc_end 1900-12-31 12:53:32 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  39988,
  0,
  'LMT',
      ],
      [
  59958190412, #    utc_start 1900-12-31 12:53:32 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  59958233612, #  local_start 1901-01-01 00:53:32 (Tue)
  DateTime::TimeZone::INFINITY, #    local_end
  43200,
  0,
  'WAKT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_WAKE

    $main::fatpacked{"DateTime/TimeZone/Pacific/Wallis.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_PACIFIC_WALLIS';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/australasia.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::Pacific::Wallis;
  $DateTime::TimeZone::Pacific::Wallis::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::Pacific::Wallis::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  59958186280, #      utc_end 1900-12-31 11:44:40 (Mon)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  59958230400, #    local_end 1901-01-01 00:00:00 (Tue)
  44120,
  0,
  'LMT',
      ],
      [
  59958186280, #    utc_start 1900-12-31 11:44:40 (Mon)
  DateTime::TimeZone::INFINITY, #      utc_end
  59958229480, #  local_start 1900-12-31 23:44:40 (Mon)
  DateTime::TimeZone::INFINITY, #    local_end
  43200,
  0,
  'WFT',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {0}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  
  
  1;
  
DATETIME_TIMEZONE_PACIFIC_WALLIS

    $main::fatpacked{"DateTime/TimeZone/UTC.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_UTC';
  package DateTime::TimeZone::UTC;
  $DateTime::TimeZone::UTC::VERSION = '2.01';
  use strict;
  use warnings;
  
  use parent 'Class::Singleton', 'DateTime::TimeZone';
  
  sub new {
      return shift->instance;
  }
  
  ## no critic (Subroutines::ProhibitUnusedPrivateSubroutines)
  sub _new_instance {
      my $class = shift;
  
      return bless { name => 'UTC' }, $class;
  }
  ## use critic
  
  sub is_dst_for_datetime {0}
  
  sub offset_for_datetime       {0}
  sub offset_for_local_datetime {0}
  
  sub short_name_for_datetime {'UTC'}
  
  sub category {undef}
  
  sub is_utc {1}
  
  1;
  
  # ABSTRACT: The UTC time zone
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  DateTime::TimeZone::UTC - The UTC time zone
  
  =head1 VERSION
  
  version 2.01
  
  =head1 SYNOPSIS
  
    my $utc_tz = DateTime::TimeZone::UTC->new;
  
  =head1 DESCRIPTION
  
  This class is used to provide the DateTime::TimeZone API needed by
  DateTime.pm for the UTC time zone, which is not explicitly included in
  the Olson time zone database.
  
  The offset for this object will always be zero.
  
  =head1 USAGE
  
  This class has the same methods as a real time zone object, but the
  C<category()> method returns undef and C<is_utc()> returns true.
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=DateTime-TimeZone>
  (or L<bug-datetime-timezone@rt.cpan.org|mailto:bug-datetime-timezone@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2016 by Dave Rolsky.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DATETIME_TIMEZONE_UTC

    $main::fatpacked{"DateTime/TimeZone/WET.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DATETIME_TIMEZONE_WET';
  # This file is auto-generated by the Perl DateTime Suite time zone
  # code generator (0.07) This code generator comes with the
  # DateTime::TimeZone module distribution in the tools/ directory
  
  #
  # Generated from /tmp/dGCdhCHqq1/europe.  Olson data version 2016f
  #
  # Do not edit this file directly.
  #
  package DateTime::TimeZone::WET;
  $DateTime::TimeZone::WET::VERSION = '2.01';
  use strict;
  
  use Class::Singleton 1.03;
  use DateTime::TimeZone;
  use DateTime::TimeZone::OlsonDB;
  
  @DateTime::TimeZone::WET::ISA = ( 'Class::Singleton', 'DateTime::TimeZone' );
  
  my $spans =
  [
      [
  DateTime::TimeZone::NEG_INFINITY, #    utc_start
  62364560400, #      utc_end 1977-04-03 01:00:00 (Sun)
  DateTime::TimeZone::NEG_INFINITY, #  local_start
  62364560400, #    local_end 1977-04-03 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62364560400, #    utc_start 1977-04-03 01:00:00 (Sun)
  62379680400, #      utc_end 1977-09-25 01:00:00 (Sun)
  62364564000, #  local_start 1977-04-03 02:00:00 (Sun)
  62379684000, #    local_end 1977-09-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62379680400, #    utc_start 1977-09-25 01:00:00 (Sun)
  62396010000, #      utc_end 1978-04-02 01:00:00 (Sun)
  62379680400, #  local_start 1977-09-25 01:00:00 (Sun)
  62396010000, #    local_end 1978-04-02 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62396010000, #    utc_start 1978-04-02 01:00:00 (Sun)
  62411734800, #      utc_end 1978-10-01 01:00:00 (Sun)
  62396013600, #  local_start 1978-04-02 02:00:00 (Sun)
  62411738400, #    local_end 1978-10-01 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62411734800, #    utc_start 1978-10-01 01:00:00 (Sun)
  62427459600, #      utc_end 1979-04-01 01:00:00 (Sun)
  62411734800, #  local_start 1978-10-01 01:00:00 (Sun)
  62427459600, #    local_end 1979-04-01 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62427459600, #    utc_start 1979-04-01 01:00:00 (Sun)
  62443184400, #      utc_end 1979-09-30 01:00:00 (Sun)
  62427463200, #  local_start 1979-04-01 02:00:00 (Sun)
  62443188000, #    local_end 1979-09-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62443184400, #    utc_start 1979-09-30 01:00:00 (Sun)
  62459514000, #      utc_end 1980-04-06 01:00:00 (Sun)
  62443184400, #  local_start 1979-09-30 01:00:00 (Sun)
  62459514000, #    local_end 1980-04-06 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62459514000, #    utc_start 1980-04-06 01:00:00 (Sun)
  62474634000, #      utc_end 1980-09-28 01:00:00 (Sun)
  62459517600, #  local_start 1980-04-06 02:00:00 (Sun)
  62474637600, #    local_end 1980-09-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62474634000, #    utc_start 1980-09-28 01:00:00 (Sun)
  62490358800, #      utc_end 1981-03-29 01:00:00 (Sun)
  62474634000, #  local_start 1980-09-28 01:00:00 (Sun)
  62490358800, #    local_end 1981-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62490358800, #    utc_start 1981-03-29 01:00:00 (Sun)
  62506083600, #      utc_end 1981-09-27 01:00:00 (Sun)
  62490362400, #  local_start 1981-03-29 02:00:00 (Sun)
  62506087200, #    local_end 1981-09-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62506083600, #    utc_start 1981-09-27 01:00:00 (Sun)
  62521808400, #      utc_end 1982-03-28 01:00:00 (Sun)
  62506083600, #  local_start 1981-09-27 01:00:00 (Sun)
  62521808400, #    local_end 1982-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62521808400, #    utc_start 1982-03-28 01:00:00 (Sun)
  62537533200, #      utc_end 1982-09-26 01:00:00 (Sun)
  62521812000, #  local_start 1982-03-28 02:00:00 (Sun)
  62537536800, #    local_end 1982-09-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62537533200, #    utc_start 1982-09-26 01:00:00 (Sun)
  62553258000, #      utc_end 1983-03-27 01:00:00 (Sun)
  62537533200, #  local_start 1982-09-26 01:00:00 (Sun)
  62553258000, #    local_end 1983-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62553258000, #    utc_start 1983-03-27 01:00:00 (Sun)
  62568982800, #      utc_end 1983-09-25 01:00:00 (Sun)
  62553261600, #  local_start 1983-03-27 02:00:00 (Sun)
  62568986400, #    local_end 1983-09-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62568982800, #    utc_start 1983-09-25 01:00:00 (Sun)
  62584707600, #      utc_end 1984-03-25 01:00:00 (Sun)
  62568982800, #  local_start 1983-09-25 01:00:00 (Sun)
  62584707600, #    local_end 1984-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62584707600, #    utc_start 1984-03-25 01:00:00 (Sun)
  62601037200, #      utc_end 1984-09-30 01:00:00 (Sun)
  62584711200, #  local_start 1984-03-25 02:00:00 (Sun)
  62601040800, #    local_end 1984-09-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62601037200, #    utc_start 1984-09-30 01:00:00 (Sun)
  62616762000, #      utc_end 1985-03-31 01:00:00 (Sun)
  62601037200, #  local_start 1984-09-30 01:00:00 (Sun)
  62616762000, #    local_end 1985-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62616762000, #    utc_start 1985-03-31 01:00:00 (Sun)
  62632486800, #      utc_end 1985-09-29 01:00:00 (Sun)
  62616765600, #  local_start 1985-03-31 02:00:00 (Sun)
  62632490400, #    local_end 1985-09-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62632486800, #    utc_start 1985-09-29 01:00:00 (Sun)
  62648211600, #      utc_end 1986-03-30 01:00:00 (Sun)
  62632486800, #  local_start 1985-09-29 01:00:00 (Sun)
  62648211600, #    local_end 1986-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62648211600, #    utc_start 1986-03-30 01:00:00 (Sun)
  62663936400, #      utc_end 1986-09-28 01:00:00 (Sun)
  62648215200, #  local_start 1986-03-30 02:00:00 (Sun)
  62663940000, #    local_end 1986-09-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62663936400, #    utc_start 1986-09-28 01:00:00 (Sun)
  62679661200, #      utc_end 1987-03-29 01:00:00 (Sun)
  62663936400, #  local_start 1986-09-28 01:00:00 (Sun)
  62679661200, #    local_end 1987-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62679661200, #    utc_start 1987-03-29 01:00:00 (Sun)
  62695386000, #      utc_end 1987-09-27 01:00:00 (Sun)
  62679664800, #  local_start 1987-03-29 02:00:00 (Sun)
  62695389600, #    local_end 1987-09-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62695386000, #    utc_start 1987-09-27 01:00:00 (Sun)
  62711110800, #      utc_end 1988-03-27 01:00:00 (Sun)
  62695386000, #  local_start 1987-09-27 01:00:00 (Sun)
  62711110800, #    local_end 1988-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62711110800, #    utc_start 1988-03-27 01:00:00 (Sun)
  62726835600, #      utc_end 1988-09-25 01:00:00 (Sun)
  62711114400, #  local_start 1988-03-27 02:00:00 (Sun)
  62726839200, #    local_end 1988-09-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62726835600, #    utc_start 1988-09-25 01:00:00 (Sun)
  62742560400, #      utc_end 1989-03-26 01:00:00 (Sun)
  62726835600, #  local_start 1988-09-25 01:00:00 (Sun)
  62742560400, #    local_end 1989-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62742560400, #    utc_start 1989-03-26 01:00:00 (Sun)
  62758285200, #      utc_end 1989-09-24 01:00:00 (Sun)
  62742564000, #  local_start 1989-03-26 02:00:00 (Sun)
  62758288800, #    local_end 1989-09-24 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62758285200, #    utc_start 1989-09-24 01:00:00 (Sun)
  62774010000, #      utc_end 1990-03-25 01:00:00 (Sun)
  62758285200, #  local_start 1989-09-24 01:00:00 (Sun)
  62774010000, #    local_end 1990-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62774010000, #    utc_start 1990-03-25 01:00:00 (Sun)
  62790339600, #      utc_end 1990-09-30 01:00:00 (Sun)
  62774013600, #  local_start 1990-03-25 02:00:00 (Sun)
  62790343200, #    local_end 1990-09-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62790339600, #    utc_start 1990-09-30 01:00:00 (Sun)
  62806064400, #      utc_end 1991-03-31 01:00:00 (Sun)
  62790339600, #  local_start 1990-09-30 01:00:00 (Sun)
  62806064400, #    local_end 1991-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62806064400, #    utc_start 1991-03-31 01:00:00 (Sun)
  62821789200, #      utc_end 1991-09-29 01:00:00 (Sun)
  62806068000, #  local_start 1991-03-31 02:00:00 (Sun)
  62821792800, #    local_end 1991-09-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62821789200, #    utc_start 1991-09-29 01:00:00 (Sun)
  62837514000, #      utc_end 1992-03-29 01:00:00 (Sun)
  62821789200, #  local_start 1991-09-29 01:00:00 (Sun)
  62837514000, #    local_end 1992-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62837514000, #    utc_start 1992-03-29 01:00:00 (Sun)
  62853238800, #      utc_end 1992-09-27 01:00:00 (Sun)
  62837517600, #  local_start 1992-03-29 02:00:00 (Sun)
  62853242400, #    local_end 1992-09-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62853238800, #    utc_start 1992-09-27 01:00:00 (Sun)
  62868963600, #      utc_end 1993-03-28 01:00:00 (Sun)
  62853238800, #  local_start 1992-09-27 01:00:00 (Sun)
  62868963600, #    local_end 1993-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62868963600, #    utc_start 1993-03-28 01:00:00 (Sun)
  62884688400, #      utc_end 1993-09-26 01:00:00 (Sun)
  62868967200, #  local_start 1993-03-28 02:00:00 (Sun)
  62884692000, #    local_end 1993-09-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62884688400, #    utc_start 1993-09-26 01:00:00 (Sun)
  62900413200, #      utc_end 1994-03-27 01:00:00 (Sun)
  62884688400, #  local_start 1993-09-26 01:00:00 (Sun)
  62900413200, #    local_end 1994-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62900413200, #    utc_start 1994-03-27 01:00:00 (Sun)
  62916138000, #      utc_end 1994-09-25 01:00:00 (Sun)
  62900416800, #  local_start 1994-03-27 02:00:00 (Sun)
  62916141600, #    local_end 1994-09-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62916138000, #    utc_start 1994-09-25 01:00:00 (Sun)
  62931862800, #      utc_end 1995-03-26 01:00:00 (Sun)
  62916138000, #  local_start 1994-09-25 01:00:00 (Sun)
  62931862800, #    local_end 1995-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62931862800, #    utc_start 1995-03-26 01:00:00 (Sun)
  62947587600, #      utc_end 1995-09-24 01:00:00 (Sun)
  62931866400, #  local_start 1995-03-26 02:00:00 (Sun)
  62947591200, #    local_end 1995-09-24 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62947587600, #    utc_start 1995-09-24 01:00:00 (Sun)
  62963917200, #      utc_end 1996-03-31 01:00:00 (Sun)
  62947587600, #  local_start 1995-09-24 01:00:00 (Sun)
  62963917200, #    local_end 1996-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62963917200, #    utc_start 1996-03-31 01:00:00 (Sun)
  62982061200, #      utc_end 1996-10-27 01:00:00 (Sun)
  62963920800, #  local_start 1996-03-31 02:00:00 (Sun)
  62982064800, #    local_end 1996-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  62982061200, #    utc_start 1996-10-27 01:00:00 (Sun)
  62995366800, #      utc_end 1997-03-30 01:00:00 (Sun)
  62982061200, #  local_start 1996-10-27 01:00:00 (Sun)
  62995366800, #    local_end 1997-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  62995366800, #    utc_start 1997-03-30 01:00:00 (Sun)
  63013510800, #      utc_end 1997-10-26 01:00:00 (Sun)
  62995370400, #  local_start 1997-03-30 02:00:00 (Sun)
  63013514400, #    local_end 1997-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63013510800, #    utc_start 1997-10-26 01:00:00 (Sun)
  63026816400, #      utc_end 1998-03-29 01:00:00 (Sun)
  63013510800, #  local_start 1997-10-26 01:00:00 (Sun)
  63026816400, #    local_end 1998-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63026816400, #    utc_start 1998-03-29 01:00:00 (Sun)
  63044960400, #      utc_end 1998-10-25 01:00:00 (Sun)
  63026820000, #  local_start 1998-03-29 02:00:00 (Sun)
  63044964000, #    local_end 1998-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63044960400, #    utc_start 1998-10-25 01:00:00 (Sun)
  63058266000, #      utc_end 1999-03-28 01:00:00 (Sun)
  63044960400, #  local_start 1998-10-25 01:00:00 (Sun)
  63058266000, #    local_end 1999-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63058266000, #    utc_start 1999-03-28 01:00:00 (Sun)
  63077014800, #      utc_end 1999-10-31 01:00:00 (Sun)
  63058269600, #  local_start 1999-03-28 02:00:00 (Sun)
  63077018400, #    local_end 1999-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63077014800, #    utc_start 1999-10-31 01:00:00 (Sun)
  63089715600, #      utc_end 2000-03-26 01:00:00 (Sun)
  63077014800, #  local_start 1999-10-31 01:00:00 (Sun)
  63089715600, #    local_end 2000-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63089715600, #    utc_start 2000-03-26 01:00:00 (Sun)
  63108464400, #      utc_end 2000-10-29 01:00:00 (Sun)
  63089719200, #  local_start 2000-03-26 02:00:00 (Sun)
  63108468000, #    local_end 2000-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63108464400, #    utc_start 2000-10-29 01:00:00 (Sun)
  63121165200, #      utc_end 2001-03-25 01:00:00 (Sun)
  63108464400, #  local_start 2000-10-29 01:00:00 (Sun)
  63121165200, #    local_end 2001-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63121165200, #    utc_start 2001-03-25 01:00:00 (Sun)
  63139914000, #      utc_end 2001-10-28 01:00:00 (Sun)
  63121168800, #  local_start 2001-03-25 02:00:00 (Sun)
  63139917600, #    local_end 2001-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63139914000, #    utc_start 2001-10-28 01:00:00 (Sun)
  63153219600, #      utc_end 2002-03-31 01:00:00 (Sun)
  63139914000, #  local_start 2001-10-28 01:00:00 (Sun)
  63153219600, #    local_end 2002-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63153219600, #    utc_start 2002-03-31 01:00:00 (Sun)
  63171363600, #      utc_end 2002-10-27 01:00:00 (Sun)
  63153223200, #  local_start 2002-03-31 02:00:00 (Sun)
  63171367200, #    local_end 2002-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63171363600, #    utc_start 2002-10-27 01:00:00 (Sun)
  63184669200, #      utc_end 2003-03-30 01:00:00 (Sun)
  63171363600, #  local_start 2002-10-27 01:00:00 (Sun)
  63184669200, #    local_end 2003-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63184669200, #    utc_start 2003-03-30 01:00:00 (Sun)
  63202813200, #      utc_end 2003-10-26 01:00:00 (Sun)
  63184672800, #  local_start 2003-03-30 02:00:00 (Sun)
  63202816800, #    local_end 2003-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63202813200, #    utc_start 2003-10-26 01:00:00 (Sun)
  63216118800, #      utc_end 2004-03-28 01:00:00 (Sun)
  63202813200, #  local_start 2003-10-26 01:00:00 (Sun)
  63216118800, #    local_end 2004-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63216118800, #    utc_start 2004-03-28 01:00:00 (Sun)
  63234867600, #      utc_end 2004-10-31 01:00:00 (Sun)
  63216122400, #  local_start 2004-03-28 02:00:00 (Sun)
  63234871200, #    local_end 2004-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63234867600, #    utc_start 2004-10-31 01:00:00 (Sun)
  63247568400, #      utc_end 2005-03-27 01:00:00 (Sun)
  63234867600, #  local_start 2004-10-31 01:00:00 (Sun)
  63247568400, #    local_end 2005-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63247568400, #    utc_start 2005-03-27 01:00:00 (Sun)
  63266317200, #      utc_end 2005-10-30 01:00:00 (Sun)
  63247572000, #  local_start 2005-03-27 02:00:00 (Sun)
  63266320800, #    local_end 2005-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63266317200, #    utc_start 2005-10-30 01:00:00 (Sun)
  63279018000, #      utc_end 2006-03-26 01:00:00 (Sun)
  63266317200, #  local_start 2005-10-30 01:00:00 (Sun)
  63279018000, #    local_end 2006-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63279018000, #    utc_start 2006-03-26 01:00:00 (Sun)
  63297766800, #      utc_end 2006-10-29 01:00:00 (Sun)
  63279021600, #  local_start 2006-03-26 02:00:00 (Sun)
  63297770400, #    local_end 2006-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63297766800, #    utc_start 2006-10-29 01:00:00 (Sun)
  63310467600, #      utc_end 2007-03-25 01:00:00 (Sun)
  63297766800, #  local_start 2006-10-29 01:00:00 (Sun)
  63310467600, #    local_end 2007-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63310467600, #    utc_start 2007-03-25 01:00:00 (Sun)
  63329216400, #      utc_end 2007-10-28 01:00:00 (Sun)
  63310471200, #  local_start 2007-03-25 02:00:00 (Sun)
  63329220000, #    local_end 2007-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63329216400, #    utc_start 2007-10-28 01:00:00 (Sun)
  63342522000, #      utc_end 2008-03-30 01:00:00 (Sun)
  63329216400, #  local_start 2007-10-28 01:00:00 (Sun)
  63342522000, #    local_end 2008-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63342522000, #    utc_start 2008-03-30 01:00:00 (Sun)
  63360666000, #      utc_end 2008-10-26 01:00:00 (Sun)
  63342525600, #  local_start 2008-03-30 02:00:00 (Sun)
  63360669600, #    local_end 2008-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63360666000, #    utc_start 2008-10-26 01:00:00 (Sun)
  63373971600, #      utc_end 2009-03-29 01:00:00 (Sun)
  63360666000, #  local_start 2008-10-26 01:00:00 (Sun)
  63373971600, #    local_end 2009-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63373971600, #    utc_start 2009-03-29 01:00:00 (Sun)
  63392115600, #      utc_end 2009-10-25 01:00:00 (Sun)
  63373975200, #  local_start 2009-03-29 02:00:00 (Sun)
  63392119200, #    local_end 2009-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63392115600, #    utc_start 2009-10-25 01:00:00 (Sun)
  63405421200, #      utc_end 2010-03-28 01:00:00 (Sun)
  63392115600, #  local_start 2009-10-25 01:00:00 (Sun)
  63405421200, #    local_end 2010-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63405421200, #    utc_start 2010-03-28 01:00:00 (Sun)
  63424170000, #      utc_end 2010-10-31 01:00:00 (Sun)
  63405424800, #  local_start 2010-03-28 02:00:00 (Sun)
  63424173600, #    local_end 2010-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63424170000, #    utc_start 2010-10-31 01:00:00 (Sun)
  63436870800, #      utc_end 2011-03-27 01:00:00 (Sun)
  63424170000, #  local_start 2010-10-31 01:00:00 (Sun)
  63436870800, #    local_end 2011-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63436870800, #    utc_start 2011-03-27 01:00:00 (Sun)
  63455619600, #      utc_end 2011-10-30 01:00:00 (Sun)
  63436874400, #  local_start 2011-03-27 02:00:00 (Sun)
  63455623200, #    local_end 2011-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63455619600, #    utc_start 2011-10-30 01:00:00 (Sun)
  63468320400, #      utc_end 2012-03-25 01:00:00 (Sun)
  63455619600, #  local_start 2011-10-30 01:00:00 (Sun)
  63468320400, #    local_end 2012-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63468320400, #    utc_start 2012-03-25 01:00:00 (Sun)
  63487069200, #      utc_end 2012-10-28 01:00:00 (Sun)
  63468324000, #  local_start 2012-03-25 02:00:00 (Sun)
  63487072800, #    local_end 2012-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63487069200, #    utc_start 2012-10-28 01:00:00 (Sun)
  63500374800, #      utc_end 2013-03-31 01:00:00 (Sun)
  63487069200, #  local_start 2012-10-28 01:00:00 (Sun)
  63500374800, #    local_end 2013-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63500374800, #    utc_start 2013-03-31 01:00:00 (Sun)
  63518518800, #      utc_end 2013-10-27 01:00:00 (Sun)
  63500378400, #  local_start 2013-03-31 02:00:00 (Sun)
  63518522400, #    local_end 2013-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63518518800, #    utc_start 2013-10-27 01:00:00 (Sun)
  63531824400, #      utc_end 2014-03-30 01:00:00 (Sun)
  63518518800, #  local_start 2013-10-27 01:00:00 (Sun)
  63531824400, #    local_end 2014-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63531824400, #    utc_start 2014-03-30 01:00:00 (Sun)
  63549968400, #      utc_end 2014-10-26 01:00:00 (Sun)
  63531828000, #  local_start 2014-03-30 02:00:00 (Sun)
  63549972000, #    local_end 2014-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63549968400, #    utc_start 2014-10-26 01:00:00 (Sun)
  63563274000, #      utc_end 2015-03-29 01:00:00 (Sun)
  63549968400, #  local_start 2014-10-26 01:00:00 (Sun)
  63563274000, #    local_end 2015-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63563274000, #    utc_start 2015-03-29 01:00:00 (Sun)
  63581418000, #      utc_end 2015-10-25 01:00:00 (Sun)
  63563277600, #  local_start 2015-03-29 02:00:00 (Sun)
  63581421600, #    local_end 2015-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63581418000, #    utc_start 2015-10-25 01:00:00 (Sun)
  63594723600, #      utc_end 2016-03-27 01:00:00 (Sun)
  63581418000, #  local_start 2015-10-25 01:00:00 (Sun)
  63594723600, #    local_end 2016-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63594723600, #    utc_start 2016-03-27 01:00:00 (Sun)
  63613472400, #      utc_end 2016-10-30 01:00:00 (Sun)
  63594727200, #  local_start 2016-03-27 02:00:00 (Sun)
  63613476000, #    local_end 2016-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63613472400, #    utc_start 2016-10-30 01:00:00 (Sun)
  63626173200, #      utc_end 2017-03-26 01:00:00 (Sun)
  63613472400, #  local_start 2016-10-30 01:00:00 (Sun)
  63626173200, #    local_end 2017-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63626173200, #    utc_start 2017-03-26 01:00:00 (Sun)
  63644922000, #      utc_end 2017-10-29 01:00:00 (Sun)
  63626176800, #  local_start 2017-03-26 02:00:00 (Sun)
  63644925600, #    local_end 2017-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63644922000, #    utc_start 2017-10-29 01:00:00 (Sun)
  63657622800, #      utc_end 2018-03-25 01:00:00 (Sun)
  63644922000, #  local_start 2017-10-29 01:00:00 (Sun)
  63657622800, #    local_end 2018-03-25 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63657622800, #    utc_start 2018-03-25 01:00:00 (Sun)
  63676371600, #      utc_end 2018-10-28 01:00:00 (Sun)
  63657626400, #  local_start 2018-03-25 02:00:00 (Sun)
  63676375200, #    local_end 2018-10-28 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63676371600, #    utc_start 2018-10-28 01:00:00 (Sun)
  63689677200, #      utc_end 2019-03-31 01:00:00 (Sun)
  63676371600, #  local_start 2018-10-28 01:00:00 (Sun)
  63689677200, #    local_end 2019-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63689677200, #    utc_start 2019-03-31 01:00:00 (Sun)
  63707821200, #      utc_end 2019-10-27 01:00:00 (Sun)
  63689680800, #  local_start 2019-03-31 02:00:00 (Sun)
  63707824800, #    local_end 2019-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63707821200, #    utc_start 2019-10-27 01:00:00 (Sun)
  63721126800, #      utc_end 2020-03-29 01:00:00 (Sun)
  63707821200, #  local_start 2019-10-27 01:00:00 (Sun)
  63721126800, #    local_end 2020-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63721126800, #    utc_start 2020-03-29 01:00:00 (Sun)
  63739270800, #      utc_end 2020-10-25 01:00:00 (Sun)
  63721130400, #  local_start 2020-03-29 02:00:00 (Sun)
  63739274400, #    local_end 2020-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63739270800, #    utc_start 2020-10-25 01:00:00 (Sun)
  63752576400, #      utc_end 2021-03-28 01:00:00 (Sun)
  63739270800, #  local_start 2020-10-25 01:00:00 (Sun)
  63752576400, #    local_end 2021-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63752576400, #    utc_start 2021-03-28 01:00:00 (Sun)
  63771325200, #      utc_end 2021-10-31 01:00:00 (Sun)
  63752580000, #  local_start 2021-03-28 02:00:00 (Sun)
  63771328800, #    local_end 2021-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63771325200, #    utc_start 2021-10-31 01:00:00 (Sun)
  63784026000, #      utc_end 2022-03-27 01:00:00 (Sun)
  63771325200, #  local_start 2021-10-31 01:00:00 (Sun)
  63784026000, #    local_end 2022-03-27 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63784026000, #    utc_start 2022-03-27 01:00:00 (Sun)
  63802774800, #      utc_end 2022-10-30 01:00:00 (Sun)
  63784029600, #  local_start 2022-03-27 02:00:00 (Sun)
  63802778400, #    local_end 2022-10-30 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63802774800, #    utc_start 2022-10-30 01:00:00 (Sun)
  63815475600, #      utc_end 2023-03-26 01:00:00 (Sun)
  63802774800, #  local_start 2022-10-30 01:00:00 (Sun)
  63815475600, #    local_end 2023-03-26 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63815475600, #    utc_start 2023-03-26 01:00:00 (Sun)
  63834224400, #      utc_end 2023-10-29 01:00:00 (Sun)
  63815479200, #  local_start 2023-03-26 02:00:00 (Sun)
  63834228000, #    local_end 2023-10-29 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63834224400, #    utc_start 2023-10-29 01:00:00 (Sun)
  63847530000, #      utc_end 2024-03-31 01:00:00 (Sun)
  63834224400, #  local_start 2023-10-29 01:00:00 (Sun)
  63847530000, #    local_end 2024-03-31 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63847530000, #    utc_start 2024-03-31 01:00:00 (Sun)
  63865674000, #      utc_end 2024-10-27 01:00:00 (Sun)
  63847533600, #  local_start 2024-03-31 02:00:00 (Sun)
  63865677600, #    local_end 2024-10-27 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63865674000, #    utc_start 2024-10-27 01:00:00 (Sun)
  63878979600, #      utc_end 2025-03-30 01:00:00 (Sun)
  63865674000, #  local_start 2024-10-27 01:00:00 (Sun)
  63878979600, #    local_end 2025-03-30 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63878979600, #    utc_start 2025-03-30 01:00:00 (Sun)
  63897123600, #      utc_end 2025-10-26 01:00:00 (Sun)
  63878983200, #  local_start 2025-03-30 02:00:00 (Sun)
  63897127200, #    local_end 2025-10-26 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63897123600, #    utc_start 2025-10-26 01:00:00 (Sun)
  63910429200, #      utc_end 2026-03-29 01:00:00 (Sun)
  63897123600, #  local_start 2025-10-26 01:00:00 (Sun)
  63910429200, #    local_end 2026-03-29 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63910429200, #    utc_start 2026-03-29 01:00:00 (Sun)
  63928573200, #      utc_end 2026-10-25 01:00:00 (Sun)
  63910432800, #  local_start 2026-03-29 02:00:00 (Sun)
  63928576800, #    local_end 2026-10-25 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
      [
  63928573200, #    utc_start 2026-10-25 01:00:00 (Sun)
  63941878800, #      utc_end 2027-03-28 01:00:00 (Sun)
  63928573200, #  local_start 2026-10-25 01:00:00 (Sun)
  63941878800, #    local_end 2027-03-28 01:00:00 (Sun)
  0,
  0,
  'WET',
      ],
      [
  63941878800, #    utc_start 2027-03-28 01:00:00 (Sun)
  63960627600, #      utc_end 2027-10-31 01:00:00 (Sun)
  63941882400, #  local_start 2027-03-28 02:00:00 (Sun)
  63960631200, #    local_end 2027-10-31 02:00:00 (Sun)
  3600,
  1,
  'WEST',
      ],
  ];
  
  sub olson_version {'2016f'}
  
  sub has_dst_changes {51}
  
  sub _max_year {2026}
  
  sub _new_instance {
      return shift->_init( @_, spans => $spans );
  }
  
  sub _last_offset { 0 }
  
  my $last_observance = bless( {
    'format' => 'WE%sT',
    'gmtoff' => '0:00',
    'local_start_datetime' => {},
    'offset_from_std' => 0,
    'offset_from_utc' => 0,
    'until' => [],
    'utc_start_datetime' => {}
  }, 'DateTime::TimeZone::OlsonDB::Observance' )
  ;
  sub _last_observance { $last_observance }
  
  my $rules = [
    bless( {
      'at' => '1:00u',
      'from' => '1996',
      'in' => 'Oct',
      'letter' => '',
      'name' => 'EU',
      'offset_from_std' => 0,
      'on' => 'lastSun',
      'save' => '0',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' ),
    bless( {
      'at' => '1:00u',
      'from' => '1981',
      'in' => 'Mar',
      'letter' => 'S',
      'name' => 'EU',
      'offset_from_std' => 3600,
      'on' => 'lastSun',
      'save' => '1:00',
      'to' => 'max',
      'type' => undef
    }, 'DateTime::TimeZone::OlsonDB::Rule' )
  ]
  ;
  sub _rules { $rules }
  
  
  1;
  
DATETIME_TIMEZONE_WET

    $main::fatpacked{"Devel/GlobalDestruction.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DEVEL_GLOBALDESTRUCTION';
  package Devel::GlobalDestruction;
  
  use strict;
  use warnings;
  
  our $VERSION = '0.13';
  
  use Sub::Exporter::Progressive -setup => {
    exports => [ qw(in_global_destruction) ],
    groups  => { default => [ -all ] },
  };
  
  # we run 5.14+ - everything is in core
  #
  if (defined ${^GLOBAL_PHASE}) {
    eval 'sub in_global_destruction () { ${^GLOBAL_PHASE} eq q[DESTRUCT] }; 1'
      or die $@;
  }
  # try to load the xs version if it was compiled
  #
  elsif (eval {
    require Devel::GlobalDestruction::XS;
    no warnings 'once';
    *in_global_destruction = \&Devel::GlobalDestruction::XS::in_global_destruction;
    1;
  }) {
    # the eval already installed everything, nothing to do
  }
  else {
    # internally, PL_main_cv is set to Nullcv immediately before entering
    # global destruction and we can use B to detect that.  B::main_cv will
    # only ever be a B::CV or a B::SPECIAL that is a reference to 0
    require B;
    eval 'sub in_global_destruction () { ${B::main_cv()} == 0 }; 1'
      or die $@;
  }
  
  1;  # keep require happy
  
  
  __END__
  
  =head1 NAME
  
  Devel::GlobalDestruction - Provides function returning the equivalent of
  C<${^GLOBAL_PHASE} eq 'DESTRUCT'> for older perls.
  
  =head1 SYNOPSIS
  
      package Foo;
      use Devel::GlobalDestruction;
  
      use namespace::clean; # to avoid having an "in_global_destruction" method
  
      sub DESTROY {
          return if in_global_destruction;
  
          do_something_a_little_tricky();
      }
  
  =head1 DESCRIPTION
  
  Perl's global destruction is a little tricky to deal with WRT finalizers
  because it's not ordered and objects can sometimes disappear.
  
  Writing defensive destructors is hard and annoying, and usually if global
  destruction is happening you only need the destructors that free up non
  process local resources to actually execute.
  
  For these constructors you can avoid the mess by simply bailing out if global
  destruction is in effect.
  
  =head1 EXPORTS
  
  This module uses L<Sub::Exporter::Progressive> so the exports may be renamed,
  aliased, etc. if L<Sub::Exporter> is present.
  
  =over 4
  
  =item in_global_destruction
  
  Returns true if the interpreter is in global destruction. In perl 5.14+, this
  returns C<${^GLOBAL_PHASE} eq 'DESTRUCT'>, and on earlier perls, detects it using
  the value of C<PL_main_cv> or C<PL_dirty>.
  
  =back
  
  =head1 AUTHORS
  
  Yuval Kogman E<lt>nothingmuch@woobling.orgE<gt>
  
  Florian Ragwitz E<lt>rafl@debian.orgE<gt>
  
  Jesse Luehrs E<lt>doy@tozt.netE<gt>
  
  Peter Rabbitson E<lt>ribasushi@cpan.orgE<gt>
  
  Arthur Axel 'fREW' Schmidt E<lt>frioux@gmail.comE<gt>
  
  Elizabeth Mattijsen E<lt>liz@dijkmat.nlE<gt>
  
  Greham Knop E<lt>haarg@haarg.orgE<gt>
  
  =head1 COPYRIGHT
  
      Copyright (c) 2008 Yuval Kogman. All rights reserved
      This program is free software; you can redistribute
      it and/or modify it under the same terms as Perl itself.
  
  =cut
DEVEL_GLOBALDESTRUCTION

    $main::fatpacked{"Devel/StackTrace.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DEVEL_STACKTRACE';
  package Devel::StackTrace;
  
  use 5.006;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.01';
  
  use Devel::StackTrace::Frame;
  use File::Spec;
  use Scalar::Util qw( blessed );
  
  use overload
      '""'     => \&as_string,
      fallback => 1;
  
  sub new {
      my $class = shift;
      my %p     = @_;
  
      $p{unsafe_ref_capture} = !delete $p{no_refs}
          if exists $p{no_refs};
  
      my $self = bless {
          index  => undef,
          frames => [],
          raw    => [],
          %p,
      }, $class;
  
      $self->_record_caller_data();
  
      return $self;
  }
  
  sub _record_caller_data {
      my $self = shift;
  
      my $filter = $self->{filter_frames_early} && $self->_make_frame_filter();
  
      # We exclude this method by starting at least one frame back.
      my $x = 1 + ( $self->{skip_frames} || 0 );
  
      while (
          my @c
          = $self->{no_args}
          ? caller( $x++ )
          : do {
              ## no critic (Modules::ProhibitMultiplePackages, Variables::ProhibitPackageVars)
              package    # the newline keeps dzil from adding a version here
                  DB;
              @DB::args = ();
              caller( $x++ );
          }
          ) {
  
          my @args;
  
          ## no critic (Variables::ProhibitPackageVars)
          @args = $self->{no_args} ? () : @DB::args;
          ## use critic
  
          my $raw = {
              caller => \@c,
              args   => \@args,
          };
  
          next if $filter && !$filter->($raw);
  
          unless ( $self->{unsafe_ref_capture} ) {
              $raw->{args} = [ map { ref $_ ? $self->_ref_to_string($_) : $_ }
                      @{ $raw->{args} } ];
          }
  
          push @{ $self->{raw} }, $raw;
      }
  }
  
  sub _ref_to_string {
      my $self = shift;
      my $ref  = shift;
  
      return overload::AddrRef($ref)
          if blessed $ref && $ref->isa('Exception::Class::Base');
  
      return overload::AddrRef($ref) unless $self->{respect_overload};
  
      ## no critic (Variables::RequireInitializationForLocalVars)
      local $@;
      local $SIG{__DIE__};
      ## use critic
  
      my $str = eval { $ref . q{} };
  
      return $@ ? overload::AddrRef($ref) : $str;
  }
  
  sub _make_frames {
      my $self = shift;
  
      my $filter = !$self->{filter_frames_early} && $self->_make_frame_filter();
  
      my $raw = delete $self->{raw};
      for my $r ( @{$raw} ) {
          next if $filter && !$filter->($r);
  
          $self->_add_frame( $r->{caller}, $r->{args} );
      }
  }
  
  my $default_filter = sub {1};
  
  sub _make_frame_filter {
      my $self = shift;
  
      my ( @i_pack_re, %i_class );
      if ( $self->{ignore_package} ) {
          ## no critic (Variables::RequireInitializationForLocalVars)
          local $@;
          local $SIG{__DIE__};
          ## use critic
  
          $self->{ignore_package} = [ $self->{ignore_package} ]
              unless eval { @{ $self->{ignore_package} } };
  
          @i_pack_re
              = map { ref $_ ? $_ : qr/^\Q$_\E$/ } @{ $self->{ignore_package} };
      }
  
      my $p = __PACKAGE__;
      push @i_pack_re, qr/^\Q$p\E$/;
  
      if ( $self->{ignore_class} ) {
          $self->{ignore_class} = [ $self->{ignore_class} ]
              unless ref $self->{ignore_class};
          %i_class = map { $_ => 1 } @{ $self->{ignore_class} };
      }
  
      my $user_filter = $self->{frame_filter};
  
      return sub {
          return 0 if grep { $_[0]{caller}[0] =~ /$_/ } @i_pack_re;
          return 0 if grep { $_[0]{caller}[0]->isa($_) } keys %i_class;
  
          if ($user_filter) {
              return $user_filter->( $_[0] );
          }
  
          return 1;
      };
  }
  
  sub _add_frame {
      my $self = shift;
      my $c    = shift;
      my $p    = shift;
  
      # eval and is_require are only returned when applicable under 5.00503.
      push @$c, ( undef, undef ) if scalar @$c == 6;
  
      push @{ $self->{frames} },
          Devel::StackTrace::Frame->new(
          $c,
          $p,
          $self->{respect_overload},
          $self->{max_arg_length},
          $self->{message},
          $self->{indent}
          );
  }
  
  sub next_frame {
      my $self = shift;
  
      # reset to top if necessary.
      $self->{index} = -1 unless defined $self->{index};
  
      my @f = $self->frames();
      if ( defined $f[ $self->{index} + 1 ] ) {
          return $f[ ++$self->{index} ];
      }
      else {
          $self->{index} = undef;
          ## no critic (Subroutines::ProhibitExplicitReturnUndef)
          return undef;
      }
  }
  
  sub prev_frame {
      my $self = shift;
  
      my @f = $self->frames();
  
      # reset to top if necessary.
      $self->{index} = scalar @f unless defined $self->{index};
  
      if ( defined $f[ $self->{index} - 1 ] && $self->{index} >= 1 ) {
          return $f[ --$self->{index} ];
      }
      else {
          ## no critic (Subroutines::ProhibitExplicitReturnUndef)
          $self->{index} = undef;
          return undef;
      }
  }
  
  sub reset_pointer {
      my $self = shift;
  
      $self->{index} = undef;
  
      return;
  }
  
  sub frames {
      my $self = shift;
  
      if (@_) {
          die
              "Devel::StackTrace->frames() can only take Devel::StackTrace::Frame args\n"
              if grep { !$_->isa('Devel::StackTrace::Frame') } @_;
  
          $self->{frames} = \@_;
          delete $self->{raw};
      }
      else {
          $self->_make_frames() if $self->{raw};
      }
  
      return @{ $self->{frames} };
  }
  
  sub frame {
      my $self = shift;
      my $i    = shift;
  
      return unless defined $i;
  
      return ( $self->frames() )[$i];
  }
  
  sub frame_count {
      my $self = shift;
  
      return scalar( $self->frames() );
  }
  
  sub as_string {
      my $self = shift;
      my $p    = shift;
  
      my $st    = q{};
      my $first = 1;
      foreach my $f ( $self->frames() ) {
          $st .= $f->as_string( $first, $p ) . "\n";
          $first = 0;
      }
  
      return $st;
  }
  
  {
      ## no critic (Modules::ProhibitMultiplePackages, ClassHierarchies::ProhibitExplicitISA)
      package    # hide from PAUSE
          Devel::StackTraceFrame;
  
      our @ISA = 'Devel::StackTrace::Frame';
  }
  
  1;
  
  # ABSTRACT: An object representing a stack trace
  
  __END__
  
  =pod
  
  =head1 NAME
  
  Devel::StackTrace - An object representing a stack trace
  
  =head1 VERSION
  
  version 2.01
  
  =head1 SYNOPSIS
  
    use Devel::StackTrace;
  
    my $trace = Devel::StackTrace->new();
  
    print $trace->as_string(); # like carp
  
    # from top (most recent) of stack to bottom.
    while ( my $frame = $trace->next_frame() ) {
        print "Has args\n" if $frame->hasargs();
    }
  
    # from bottom (least recent) of stack to top.
    while ( my $frame = $trace->prev_frame() ) {
        print "Sub: ", $frame->subroutine(), "\n";
    }
  
  =head1 DESCRIPTION
  
  The C<Devel::StackTrace> module contains two classes, C,Devel::StackTrace> and
  L<Devel::StackTrace::Frame>. These objects encapsulate the information that
  can retrieved via Perl's C<caller()> function, as well as providing a simple
  interface to this data.
  
  The C<Devel::StackTrace> object contains a set of C<Devel::StackTrace::Frame>
  objects, one for each level of the stack. The frames contain all the data
  available from C<caller()>.
  
  This code was created to support my L<Exception::Class::Base> class (part of
  L<Exception::Class>) but may be useful in other contexts.
  
  =encoding UTF-8
  
  =head1 'TOP' AND 'BOTTOM' OF THE STACK
  
  When describing the methods of the trace object, I use the words 'top' and
  'bottom'. In this context, the 'top' frame on the stack is the most recent
  frame and the 'bottom' is the least recent.
  
  Here's an example:
  
    foo();  # bottom frame is here
  
    sub foo {
       bar();
    }
  
    sub bar {
       Devel::StackTrace->new();  # top frame is here.
    }
  
  =head1 METHODS
  
  This class provide the following methods:
  
  =head2 Devel::StackTrace->new(%named_params)
  
  Returns a new Devel::StackTrace object.
  
  Takes the following parameters:
  
  =over 4
  
  =item * frame_filter => $sub
  
  By default, Devel::StackTrace will include all stack frames before the
  call to its constructor.
  
  However, you may want to filter out some frames with more granularity
  than 'ignore_package' or 'ignore_class' allow.
  
  You can provide a subroutine which is called with the raw frame data
  for each frame. This is a hash reference with two keys, "caller", and
  "args", both of which are array references. The "caller" key is the
  raw data as returned by Perl's C<caller()> function, and the "args"
  key are the subroutine arguments found in C<@DB::args>.
  
  The filter should return true if the frame should be included, or
  false if it should be skipped.
  
  =item * filter_frames_early => $boolean
  
  If this parameter is true, C<frame_filter> will be called as soon as the
  stacktrace is created, and before refs are stringified (if
  C<unsafe_ref_capture> is not set), rather than being filtered lazily when
  L<Devel::StackTrace::Frame> objects are first needed.
  
  This is useful if you want to filter based on the frame's arguments and want
  to be able to examine object properties, for example.
  
  =item * ignore_package => $package_name OR \@package_names
  
  Any frames where the package is one of these packages will not be on
  the stack.
  
  =item * ignore_class => $package_name OR \@package_names
  
  Any frames where the package is a subclass of one of these packages
  (or is the same package) will not be on the stack.
  
  Devel::StackTrace internally adds itself to the 'ignore_package'
  parameter, meaning that the Devel::StackTrace package is B<ALWAYS>
  ignored. However, if you create a subclass of Devel::StackTrace it
  will not be ignored.
  
  =item * skip_frames => $integer
  
  This will cause this number of stack frames to be excluded from top of the
  stack trace. This prevents the frames from being captured at all, and applies
  before the C<frame_filter>, C<ignore_package>, or C<ignore_class> options,
  even with C<filter_frames_early>.
  
  =item * unsafe_ref_capture => $boolean
  
  If this parameter is true, then Devel::StackTrace will store
  references internally when generating stacktrace frames.
  
  B<This option is very dangerous, and should never be used with exception
  objects>. Using this option will keep any objects or references alive past
  their normal lifetime, until the stack trace object goes out of scope. It can
  keep objects alive even after their C<DESTROY> sub is called, resulting it it
  being called multiple times on the same object.
  
  If not set, Devel::StackTrace replaces any references with their stringified
  representation.
  
  =item * no_args => $boolean
  
  If this parameter is true, then Devel::StackTrace will not store caller
  arguments in stack trace frames at all.
  
  =item * respect_overload => $boolean
  
  By default, Devel::StackTrace will call C<overload::AddrRef()> to get
  the underlying string representation of an object, instead of
  respecting the object's stringification overloading. If you would
  prefer to see the overloaded representation of objects in stack
  traces, then set this parameter to true.
  
  =item * max_arg_length => $integer
  
  By default, Devel::StackTrace will display the entire argument for each
  subroutine call. Setting this parameter causes truncates each subroutine
  argument's string representation if it is longer than this number of
  characters.
  
  =item * message => $string
  
  By default, Devel::StackTrace will use 'Trace begun' as the message for the
  first stack frame when you call C<as_string>. You can supply an alternative
  message using this option.
  
  =item * indent => $boolean
  
  If this parameter is true, each stack frame after the first will start with a
  tab character, just like C<Carp::confess()>.
  
  =back
  
  =head2 $trace->next_frame()
  
  Returns the next L<Devel::StackTrace::Frame> object on the stack, going
  down. If this method hasn't been called before it returns the first frame. It
  returns C<undef> when it reaches the bottom of the stack and then resets its
  pointer so the next call to C<< $trace->next_frame() >> or C<<
  $trace->prev_frame() >> will work properly.
  
  =head2 $trace->prev_frame()
  
  Returns the next L<Devel::StackTrace::Frame> object on the stack, going up. If
  this method hasn't been called before it returns the last frame. It returns
  undef when it reaches the top of the stack and then resets its pointer so the
  next call to C<< $trace->next_frame() >> or C<< $trace->prev_frame() >> will
  work properly.
  
  =head2 $trace->reset_pointer
  
  Resets the pointer so that the next call to C<< $trace->next_frame() >> or C<<
  $trace->prev_frame() >> will start at the top or bottom of the stack, as
  appropriate.
  
  =head2 $trace->frames()
  
  When this method is called with no arguments, it returns a list of
  L<Devel::StackTrace::Frame> objects. They are returned in order from top (most
  recent) to bottom.
  
  This method can also be used to set the object's frames if you pass it a list
  of L<Devel::StackTrace::Frame> objects.
  
  This is useful if you want to filter the list of frames in ways that are more
  complex than can be handled by the C<< $trace->filter_frames() >> method:
  
    $stacktrace->frames( my_filter( $stacktrace->frames() ) );
  
  =head2 $trace->frame($index)
  
  Given an index, this method returns the relevant frame, or undef if there is
  no frame at that index. The index is exactly like a Perl array. The first
  frame is 0 and negative indexes are allowed.
  
  =head2 $trace->frame_count()
  
  Returns the number of frames in the trace object.
  
  =head2 $trace->as_string(\%p)
  
  Calls C<< $frame->as_string() >> on each frame from top to bottom, producing
  output quite similar to the Carp module's cluck/confess methods.
  
  The optional C<\%p> parameter only has one option. The C<max_arg_length>
  parameter truncates each subroutine argument's string representation if it is
  longer than this number of characters.
  
  =head1 SUPPORT
  
  Please submit bugs to the CPAN RT system at
  http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Devel%3A%3AStackTrace
  or via email at bug-devel-stacktrace@rt.cpan.org.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 CONTRIBUTORS
  
  =for stopwords Dagfinn Ilmari Mannsåker David Cantrell Graham Knop Mark Fowler Ricardo Signes
  
  =over 4
  
  =item *
  
  Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
  
  =item *
  
  David Cantrell <david@cantrell.org.uk>
  
  =item *
  
  Graham Knop <haarg@haarg.org>
  
  =item *
  
  Mark Fowler <mark@twoshortplanks.com>
  
  =item *
  
  Ricardo Signes <rjbs@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is Copyright (c) 2000 - 2016 by David Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
DEVEL_STACKTRACE

    $main::fatpacked{"Devel/StackTrace/Frame.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DEVEL_STACKTRACE_FRAME';
  package Devel::StackTrace::Frame;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.01';
  
  # Create accessor routines
  BEGIN {
      ## no critic (TestingAndDebugging::ProhibitNoStrict)
      no strict 'refs';
      foreach my $f (
          qw( package filename line subroutine hasargs
          wantarray evaltext is_require hints bitmask args )
          ) {
          next if $f eq 'args';
          *{$f} = sub { my $s = shift; return $s->{$f} };
      }
  }
  
  {
      my @fields = (
          qw( package filename line subroutine hasargs wantarray
              evaltext is_require hints bitmask )
      );
  
      sub new {
          my $proto = shift;
          my $class = ref $proto || $proto;
  
          my $self = bless {}, $class;
  
          @{$self}{@fields} = @{ shift() };
  
          # fixup unix-style paths on win32
          $self->{filename} = File::Spec->canonpath( $self->{filename} );
  
          $self->{args} = shift;
  
          $self->{respect_overload} = shift;
  
          $self->{max_arg_length} = shift;
  
          $self->{message} = shift;
  
          $self->{indent} = shift;
  
          return $self;
      }
  }
  
  sub args {
      my $self = shift;
  
      return @{ $self->{args} };
  }
  
  sub as_string {
      my $self  = shift;
      my $first = shift;
      my $p     = shift;
  
      my $sub = $self->subroutine;
  
      # This code stolen straight from Carp.pm and then tweaked.  All
      # errors are probably my fault  -dave
      if ($first) {
          $sub
              = defined $self->{message}
              ? $self->{message}
              : 'Trace begun';
      }
      else {
  
          # Build a string, $sub, which names the sub-routine called.
          # This may also be "require ...", "eval '...' or "eval {...}"
          if ( my $eval = $self->evaltext ) {
              if ( $self->is_require ) {
                  $sub = "require $eval";
              }
              else {
                  $eval =~ s/([\\\'])/\\$1/g;
                  $sub = "eval '$eval'";
              }
          }
          elsif ( $sub eq '(eval)' ) {
              $sub = 'eval {...}';
          }
  
          # if there are any arguments in the sub-routine call, format
          # them according to the format variables defined earlier in
          # this file and join them onto the $sub sub-routine string
          #
          # We copy them because they're going to be modified.
          #
          if ( my @a = $self->args ) {
              for (@a) {
  
                  # set args to the string "undef" if undefined
                  unless ( defined $_ ) {
                      $_ = 'undef';
                      next;
                  }
  
                  # hack!
                  ## no critic (Subroutines::ProtectPrivateSubs)
                  $_ = $self->Devel::StackTrace::_ref_to_string($_)
                      if ref $_;
                  ## use critic;
  
                  ## no critic (Variables::RequireInitializationForLocalVars)
                  local $SIG{__DIE__};
                  local $@;
                  ## use critic;
  
                  ## no critic (ErrorHandling::RequireCheckingReturnValueOfEval)
                  eval {
                      my $max_arg_length
                          = exists $p->{max_arg_length}
                          ? $p->{max_arg_length}
                          : $self->{max_arg_length};
  
                      if ( $max_arg_length
                          && length $_ > $max_arg_length ) {
                          ## no critic (BuiltinFunctions::ProhibitLvalueSubstr)
                          substr( $_, $max_arg_length ) = '...';
                      }
  
                      s/'/\\'/g;
  
                      # 'quote' arg unless it looks like a number
                      $_ = "'$_'" unless /^-?[\d.]+$/;
  
                      # print control/high ASCII chars as 'M-<char>' or '^<char>'
                      s/([\200-\377])/sprintf("M-%c",ord($1)&0177)/eg;
                      s/([\0-\37\177])/sprintf("^%c",ord($1)^64)/eg;
                  };
                  ## use critic
  
                  if ( my $e = $@ ) {
                      $_ = $e =~ /malformed utf-8/i ? '(bad utf-8)' : '?';
                  }
              }
  
              # append ('all', 'the', 'arguments') to the $sub string
              $sub .= '(' . join( ', ', @a ) . ')';
              $sub .= ' called';
          }
      }
  
      # If the user opted into indentation (a la Carp::confess), pre-add a tab
      my $tab = $self->{indent} && !$first ? "\t" : q{};
  
      return "${tab}$sub at " . $self->filename . ' line ' . $self->line;
  }
  
  1;
  
  # ABSTRACT: A single frame in a stack trace
  
  __END__
  
  =pod
  
  =head1 NAME
  
  Devel::StackTrace::Frame - A single frame in a stack trace
  
  =head1 VERSION
  
  version 2.01
  
  =head1 DESCRIPTION
  
  See L<Devel::StackTrace> for details.
  
  =for Pod::Coverage new
  
  =head1 METHODS
  
  See Perl's C<caller()> documentation for more information on what these
  methods return.
  
  =head2 $frame->package()
  
  =head2 $frame->filename()
  
  =head2 $frame->line()
  
  =head2 $frame->subroutine()
  
  =head2 $frame->hasargs()
  
  =head2 $frame->wantarray()
  
  =head2 $frame->evaltext()
  
  Returns undef if the frame was not part of an eval.
  
  =head2 $frame->is_require()
  
  Returns undef if the frame was not part of a require.
  
  =head2 $frame->args()
  
  Returns the arguments passed to the frame.  Note that any arguments that are
  references are returned as references, not copies.
  
  =head2 $frame->hints()
  
  =head2 $frame->bitmask()
  
  =head2 $frame->as_string()
  
  Returns a string containing a description of the frame.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is Copyright (c) 2000 - 2016 by David Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
DEVEL_STACKTRACE_FRAME

    $main::fatpacked{"Dist/CheckConflicts.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'DIST_CHECKCONFLICTS';
  package Dist::CheckConflicts;
  BEGIN {
    $Dist::CheckConflicts::AUTHORITY = 'cpan:DOY';
  }
  $Dist::CheckConflicts::VERSION = '0.11';
  use strict;
  use warnings;
  use 5.006;
  # ABSTRACT: declare version conflicts for your dist
  
  use base 'Exporter';
  our @EXPORT = our @EXPORT_OK = (
      qw(conflicts check_conflicts calculate_conflicts dist)
  );
  
  use Carp;
  use Module::Runtime 0.009 'module_notional_filename', 'require_module';
  
  
  my %CONFLICTS;
  my %HAS_CONFLICTS;
  my %DISTS;
  
  sub import {
      my $pkg = shift;
      my $for = caller;
  
      my ($conflicts, $alsos, $dist);
      ($conflicts, @_) = _strip_opt('-conflicts' => @_);
      ($alsos, @_)     = _strip_opt('-also' => @_);
      ($dist, @_)      = _strip_opt('-dist' => @_);
  
      my %conflicts = %{ $conflicts || {} };
      for my $also (@{ $alsos || [] }) {
          eval { require_module($also) } or next;
          if (!exists $CONFLICTS{$also}) {
              $also .= '::Conflicts';
              eval { require_module($also) } or next;
          }
          if (!exists $CONFLICTS{$also}) {
              next;
          }
          my %also_confs = $also->conflicts;
          for my $also_conf (keys %also_confs) {
              $conflicts{$also_conf} = $also_confs{$also_conf}
                  if !exists $conflicts{$also_conf}
                  || $conflicts{$also_conf} lt $also_confs{$also_conf};
          }
      }
  
      $CONFLICTS{$for} = \%conflicts;
      $DISTS{$for}     = $dist || $for;
  
      if (grep { $_ eq ':runtime' } @_) {
          for my $conflict (keys %conflicts) {
              $HAS_CONFLICTS{$conflict} ||= [];
              push @{ $HAS_CONFLICTS{$conflict} }, $for;
          }
  
          # warn for already loaded things...
          for my $conflict (keys %conflicts) {
              if (exists $INC{module_notional_filename($conflict)}) {
                  _check_version([$for], $conflict);
              }
          }
  
          # and warn for subsequently loaded things...
          @INC = grep {
              !(ref($_) eq 'ARRAY' && @$_ > 1 && $_->[1] == \%CONFLICTS)
          } @INC;
          unshift @INC, [
              sub {
                  my ($sub, $file) = @_;
  
                  (my $mod = $file) =~ s{\.pm$}{};
                  $mod =~ s{/}{::}g;
                  return unless $mod =~ /[\w:]+/;
  
                  return unless defined $HAS_CONFLICTS{$mod};
  
                  {
                      local $HAS_CONFLICTS{$mod};
                      require $file;
                  }
  
                  _check_version($HAS_CONFLICTS{$mod}, $mod);
  
                  # the previous require already handled it
                  my $called;
                  return sub {
                      return 0 if $called;
                      $_ = "1;";
                      $called = 1;
                      return 1;
                  };
              },
              \%CONFLICTS, # arbitrary but unique, see above
          ];
      }
  
      $pkg->export_to_level(1, @_);
  }
  
  sub _strip_opt {
      my ($opt, @args) = @_;
  
      my $val;
      for my $idx ( 0 .. $#args - 1 ) {
          if (defined $args[$idx] && $args[$idx] eq $opt) {
              $val = (splice @args, $idx, 2)[1];
              last;
          }
      }
  
      return ( $val, @args );
  }
  
  sub _check_version {
      my ($fors, $mod) = @_;
  
      for my $for (@$fors) {
          my $conflict_ver = $CONFLICTS{$for}{$mod};
          my $version = do {
              no strict 'refs';
              ${ ${ $mod . '::' }{VERSION} };
          };
  
          if ($version le $conflict_ver) {
              warn <<EOF;
  Conflict detected for $DISTS{$for}:
    $mod is version $version, but must be greater than version $conflict_ver
  EOF
              return;
          }
      }
  }
  
  
  sub conflicts {
      my $package = shift;
      return %{ $CONFLICTS{ $package } };
  }
  
  
  sub dist {
      my $package = shift;
      return $DISTS{ $package };
  }
  
  
  sub check_conflicts {
      my $package = shift;
      my $dist = $package->dist;
      my @conflicts = $package->calculate_conflicts;
      return unless @conflicts;
  
      my $err = "Conflicts detected for $dist:\n";
      for my $conflict (@conflicts) {
          $err .= "  $conflict->{package} is version "
                  . "$conflict->{installed}, but must be greater than version "
                  . "$conflict->{required}\n";
      }
      die $err;
  }
  
  
  sub calculate_conflicts {
      my $package = shift;
      my %conflicts = $package->conflicts;
  
      my @ret;
  
  
      CONFLICT:
      for my $conflict (keys %conflicts) {
          my $success = do {
              local $SIG{__WARN__} = sub {};
              eval { require_module($conflict) };
          };
          my $error = $@;
          my $file = module_notional_filename($conflict);
          next if not $success and $error =~ /Can't locate \Q$file\E in \@INC/;
  
          warn "Warning: $conflict did not compile" if not $success;
          my $installed = $success ? $conflict->VERSION : 'unknown';
          push @ret, {
              package   => $conflict,
              installed => $installed,
              required  => $conflicts{$conflict},
          } if not $success or $installed le $conflicts{$conflict};
      }
  
      return sort { $a->{package} cmp $b->{package} } @ret;
  }
  
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Dist::CheckConflicts - declare version conflicts for your dist
  
  =head1 VERSION
  
  version 0.11
  
  =head1 SYNOPSIS
  
      use Dist::CheckConflicts
          -dist => 'Class-MOP',
          -conflicts => {
              'Moose'                => '1.14',
              'namespace::autoclean' => '0.08',
          },
          -also => [
              'Package::Stash::Conflicts',
          ];
  
      __PACKAGE__->check_conflicts;
  
  =head1 DESCRIPTION
  
  One shortcoming of the CPAN clients that currently exist is that they have no
  way of specifying conflicting downstream dependencies of modules. This module
  attempts to work around this issue by allowing you to specify conflicting
  versions of modules separately, and deal with them after the module is done
  installing.
  
  For instance, say you have a module C<Foo>, and some other module C<Bar> uses
  C<Foo>. If C<Foo> were to change its API in a non-backwards-compatible way,
  this would cause C<Bar> to break until it is updated to use the new API. C<Foo>
  can't just depend on the fixed version of C<Bar>, because this will cause a
  circular dependency (because C<Bar> is already depending on C<Foo>), and this
  doesn't express intent properly anyway - C<Foo> doesn't use C<Bar> at all. The
  ideal solution would be for there to be a way to specify conflicting versions
  of modules in a way that would let CPAN clients update conflicting modules
  automatically after an existing module is upgraded, but until that happens,
  this module will allow users to do this manually.
  
  This module accepts a hash of options passed to its C<use> statement, with
  these keys being valid:
  
  =over 4
  
  =item -conflicts
  
  A hashref of conflict specifications, where keys are module names, and values
  are the last broken version - any version greater than the specified version
  should work.
  
  =item -also
  
  Additional modules to get conflicts from (potentially recursively). This should
  generally be a list of modules which use Dist::CheckConflicts, which correspond
  to the dists that your dist depends on. (In an ideal world, this would be
  intuited directly from your dependency list, but the dependency list isn't
  available outside of build time).
  
  =item -dist
  
  The name of the distribution, to make the error message from check_conflicts
  more user-friendly.
  
  =back
  
  The methods listed below are exported by this module into the module that uses
  it, so you should call these methods on your module, not Dist::CheckConflicts.
  
  As an example, this command line can be used to update your modules, after
  installing the C<Foo> dist (assuming that C<Foo::Conflicts> is the module in
  the C<Foo> dist which uses Dist::CheckConflicts):
  
      perl -MFoo::Conflicts -e'print "$_\n"
          for map { $_->{package} } Foo::Conflicts->calculate_conflicts' | cpanm
  
  As an added bonus, loading your conflicts module will provide warnings at
  runtime if conflicting modules are detected (regardless of whether they are
  loaded before or afterwards).
  
  =head1 METHODS
  
  =head2 conflicts
  
  Returns the conflict specification (the C<-conflicts> parameter to
  C<import()>), as a hash.
  
  =head2 dist
  
  Returns the dist name (either as specified by the C<-dist> parameter to
  C<import()>, or the package name which C<use>d this module).
  
  =head2 check_conflicts
  
  Examine the modules that are currently installed, and throw an exception with
  useful information if any modules are at versions which conflict with the dist.
  
  =head2 calculate_conflicts
  
  Examine the modules that are currently installed, and return a list of modules
  which conflict with the dist. The modules will be returned as a list of
  hashrefs, each containing C<package>, C<installed>, and C<required> keys.
  
  =head1 BUGS
  
  No known bugs.
  
  Please report any bugs to GitHub Issues at
  L<https://github.com/doy/dist-checkconflicts/issues>.
  
  =head1 SEE ALSO
  
  L<Module::Install::CheckConflicts>
  
  L<Dist::Zilla::Plugin::Conflicts>
  
  =head1 SUPPORT
  
  You can find this documentation for this module with the perldoc command.
  
      perldoc Dist::CheckConflicts
  
  You can also look for information at:
  
  =over 4
  
  =item * MetaCPAN
  
  L<https://metacpan.org/release/Dist-CheckConflicts>
  
  =item * Github
  
  L<https://github.com/doy/dist-checkconflicts>
  
  =item * RT: CPAN's request tracker
  
  L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Dist-CheckConflicts>
  
  =item * CPAN Ratings
  
  L<http://cpanratings.perl.org/d/Dist-CheckConflicts>
  
  =back
  
  =head1 AUTHOR
  
  Jesse Luehrs <doy@tozt.net>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by Jesse Luehrs.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
DIST_CHECKCONFLICTS

    $main::fatpacked{"Encode/Locale.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'ENCODE_LOCALE';
  package Encode::Locale;
  
  use strict;
  our $VERSION = "1.05";
  
  use base 'Exporter';
  our @EXPORT_OK = qw(
      decode_argv env
      $ENCODING_LOCALE $ENCODING_LOCALE_FS
      $ENCODING_CONSOLE_IN $ENCODING_CONSOLE_OUT
  );
  
  use Encode ();
  use Encode::Alias ();
  
  our $ENCODING_LOCALE;
  our $ENCODING_LOCALE_FS;
  our $ENCODING_CONSOLE_IN;
  our $ENCODING_CONSOLE_OUT;
  
  sub DEBUG () { 0 }
  
  sub _init {
      if ($^O eq "MSWin32") {
  	unless ($ENCODING_LOCALE) {
  	    # Try to obtain what the Windows ANSI code page is
  	    eval {
  		unless (defined &GetACP) {
  		    require Win32;
                      eval { Win32::GetACP() };
  		    *GetACP = sub { &Win32::GetACP } unless $@;
  		}
  		unless (defined &GetACP) {
  		    require Win32::API;
  		    Win32::API->Import('kernel32', 'int GetACP()');
  		}
  		if (defined &GetACP) {
  		    my $cp = GetACP();
  		    $ENCODING_LOCALE = "cp$cp" if $cp;
  		}
  	    };
  	}
  
  	unless ($ENCODING_CONSOLE_IN) {
              # only test one since set together
              unless (defined &GetInputCP) {
                  eval {
                      require Win32;
                      eval { Win32::GetConsoleCP() };
                      # manually "import" it since Win32->import refuses
                      *GetInputCP = sub { &Win32::GetConsoleCP } unless $@;
                      *GetOutputCP = sub { &Win32::GetConsoleOutputCP } unless $@;
                  };
                  unless (defined &GetInputCP) {
                      eval {
                          # try Win32::Console module for codepage to use
                          require Win32::Console;
                          eval { Win32::Console::InputCP() };
                          *GetInputCP = sub { &Win32::Console::InputCP }
                              unless $@;
                          *GetOutputCP = sub { &Win32::Console::OutputCP }
                              unless $@;
                      };
                  }
                  unless (defined &GetInputCP) {
                      # final fallback
                      *GetInputCP = *GetOutputCP = sub {
                          # another fallback that could work is:
                          # reg query HKLM\System\CurrentControlSet\Control\Nls\CodePage /v ACP
                          ((qx(chcp) || '') =~ /^Active code page: (\d+)/)
                              ? $1 : ();
                      };
                  }
  	    }
              my $cp = GetInputCP();
              $ENCODING_CONSOLE_IN = "cp$cp" if $cp;
              $cp = GetOutputCP();
              $ENCODING_CONSOLE_OUT = "cp$cp" if $cp;
  	}
      }
  
      unless ($ENCODING_LOCALE) {
  	eval {
  	    require I18N::Langinfo;
  	    $ENCODING_LOCALE = I18N::Langinfo::langinfo(I18N::Langinfo::CODESET());
  
  	    # Workaround of Encode < v2.25.  The "646" encoding  alias was
  	    # introduced in Encode-2.25, but we don't want to require that version
  	    # quite yet.  Should avoid the CPAN testers failure reported from
  	    # openbsd-4.7/perl-5.10.0 combo.
  	    $ENCODING_LOCALE = "ascii" if $ENCODING_LOCALE eq "646";
  
  	    # https://rt.cpan.org/Ticket/Display.html?id=66373
  	    $ENCODING_LOCALE = "hp-roman8" if $^O eq "hpux" && $ENCODING_LOCALE eq "roman8";
  	};
  	$ENCODING_LOCALE ||= $ENCODING_CONSOLE_IN;
      }
  
      if ($^O eq "darwin") {
  	$ENCODING_LOCALE_FS ||= "UTF-8";
      }
  
      # final fallback
      $ENCODING_LOCALE ||= $^O eq "MSWin32" ? "cp1252" : "UTF-8";
      $ENCODING_LOCALE_FS ||= $ENCODING_LOCALE;
      $ENCODING_CONSOLE_IN ||= $ENCODING_LOCALE;
      $ENCODING_CONSOLE_OUT ||= $ENCODING_CONSOLE_IN;
  
      unless (Encode::find_encoding($ENCODING_LOCALE)) {
  	my $foundit;
  	if (lc($ENCODING_LOCALE) eq "gb18030") {
  	    eval {
  		require Encode::HanExtra;
  	    };
  	    if ($@) {
  		die "Need Encode::HanExtra to be installed to support locale codeset ($ENCODING_LOCALE), stopped";
  	    }
  	    $foundit++ if Encode::find_encoding($ENCODING_LOCALE);
  	}
  	die "The locale codeset ($ENCODING_LOCALE) isn't one that perl can decode, stopped"
  	    unless $foundit;
  
      }
  
      # use Data::Dump; ddx $ENCODING_LOCALE, $ENCODING_LOCALE_FS, $ENCODING_CONSOLE_IN, $ENCODING_CONSOLE_OUT;
  }
  
  _init();
  Encode::Alias::define_alias(sub {
      no strict 'refs';
      no warnings 'once';
      return ${"ENCODING_" . uc(shift)};
  }, "locale");
  
  sub _flush_aliases {
      no strict 'refs';
      for my $a (keys %Encode::Alias::Alias) {
  	if (defined ${"ENCODING_" . uc($a)}) {
  	    delete $Encode::Alias::Alias{$a};
  	    warn "Flushed alias cache for $a" if DEBUG;
  	}
      }
  }
  
  sub reinit {
      $ENCODING_LOCALE = shift;
      $ENCODING_LOCALE_FS = shift;
      $ENCODING_CONSOLE_IN = $ENCODING_LOCALE;
      $ENCODING_CONSOLE_OUT = $ENCODING_LOCALE;
      _init();
      _flush_aliases();
  }
  
  sub decode_argv {
      die if defined wantarray;
      for (@ARGV) {
  	$_ = Encode::decode(locale => $_, @_);
      }
  }
  
  sub env {
      my $k = Encode::encode(locale => shift);
      my $old = $ENV{$k};
      if (@_) {
  	my $v = shift;
  	if (defined $v) {
  	    $ENV{$k} = Encode::encode(locale => $v);
  	}
  	else {
  	    delete $ENV{$k};
  	}
      }
      return Encode::decode(locale => $old) if defined wantarray;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Encode::Locale - Determine the locale encoding
  
  =head1 SYNOPSIS
  
    use Encode::Locale;
    use Encode;
  
    $string = decode(locale => $bytes);
    $bytes = encode(locale => $string);
  
    if (-t) {
        binmode(STDIN, ":encoding(console_in)");
        binmode(STDOUT, ":encoding(console_out)");
        binmode(STDERR, ":encoding(console_out)");
    }
  
    # Processing file names passed in as arguments
    my $uni_filename = decode(locale => $ARGV[0]);
    open(my $fh, "<", encode(locale_fs => $uni_filename))
       || die "Can't open '$uni_filename': $!";
    binmode($fh, ":encoding(locale)");
    ...
  
  =head1 DESCRIPTION
  
  In many applications it's wise to let Perl use Unicode for the strings it
  processes.  Most of the interfaces Perl has to the outside world are still byte
  based.  Programs therefore need to decode byte strings that enter the program
  from the outside and encode them again on the way out.
  
  The POSIX locale system is used to specify both the language conventions
  requested by the user and the preferred character set to consume and
  output.  The C<Encode::Locale> module looks up the charset and encoding (called
  a CODESET in the locale jargon) and arranges for the L<Encode> module to know
  this encoding under the name "locale".  It means bytes obtained from the
  environment can be converted to Unicode strings by calling C<<
  Encode::encode(locale => $bytes) >> and converted back again with C<<
  Encode::decode(locale => $string) >>.
  
  Where file systems interfaces pass file names in and out of the program we also
  need care.  The trend is for operating systems to use a fixed file encoding
  that don't actually depend on the locale; and this module determines the most
  appropriate encoding for file names. The L<Encode> module will know this
  encoding under the name "locale_fs".  For traditional Unix systems this will
  be an alias to the same encoding as "locale".
  
  For programs running in a terminal window (called a "Console" on some systems)
  the "locale" encoding is usually a good choice for what to expect as input and
  output.  Some systems allows us to query the encoding set for the terminal and
  C<Encode::Locale> will do that if available and make these encodings known
  under the C<Encode> aliases "console_in" and "console_out".  For systems where
  we can't determine the terminal encoding these will be aliased as the same
  encoding as "locale".  The advice is to use "console_in" for input known to
  come from the terminal and "console_out" for output to the terminal.
  
  In addition to arranging for various Encode aliases the following functions and
  variables are provided:
  
  =over
  
  =item decode_argv( )
  
  =item decode_argv( Encode::FB_CROAK )
  
  This will decode the command line arguments to perl (the C<@ARGV> array) in-place.
  
  The function will by default replace characters that can't be decoded by
  "\x{FFFD}", the Unicode replacement character.
  
  Any argument provided is passed as CHECK to underlying Encode::decode() call.
  Pass the value C<Encode::FB_CROAK> to have the decoding croak if not all the
  command line arguments can be decoded.  See L<Encode/"Handling Malformed Data">
  for details on other options for CHECK.
  
  =item env( $uni_key )
  
  =item env( $uni_key => $uni_value )
  
  Interface to get/set environment variables.  Returns the current value as a
  Unicode string. The $uni_key and $uni_value arguments are expected to be
  Unicode strings as well.  Passing C<undef> as $uni_value deletes the
  environment variable named $uni_key.
  
  The returned value will have the characters that can't be decoded replaced by
  "\x{FFFD}", the Unicode replacement character.
  
  There is no interface to request alternative CHECK behavior as for
  decode_argv().  If you need that you need to call encode/decode yourself.
  For example:
  
      my $key = Encode::encode(locale => $uni_key, Encode::FB_CROAK);
      my $uni_value = Encode::decode(locale => $ENV{$key}, Encode::FB_CROAK);
  
  =item reinit( )
  
  =item reinit( $encoding )
  
  Reinitialize the encodings from the locale.  You want to call this function if
  you changed anything in the environment that might influence the locale.
  
  This function will croak if the determined encoding isn't recognized by
  the Encode module.
  
  With argument force $ENCODING_... variables to set to the given value.
  
  =item $ENCODING_LOCALE
  
  The encoding name determined to be suitable for the current locale.
  L<Encode> know this encoding as "locale".
  
  =item $ENCODING_LOCALE_FS
  
  The encoding name determined to be suitable for file system interfaces
  involving file names.
  L<Encode> know this encoding as "locale_fs".
  
  =item $ENCODING_CONSOLE_IN
  
  =item $ENCODING_CONSOLE_OUT
  
  The encodings to be used for reading and writing output to the a console.
  L<Encode> know these encodings as "console_in" and "console_out".
  
  =back
  
  =head1 NOTES
  
  This table summarizes the mapping of the encodings set up
  by the C<Encode::Locale> module:
  
    Encode      |         |              |
    Alias       | Windows | Mac OS X     | POSIX
    ------------+---------+--------------+------------
    locale      | ANSI    | nl_langinfo  | nl_langinfo
    locale_fs   | ANSI    | UTF-8        | nl_langinfo
    console_in  | OEM     | nl_langinfo  | nl_langinfo
    console_out | OEM     | nl_langinfo  | nl_langinfo
  
  =head2 Windows
  
  Windows has basically 2 sets of APIs.  A wide API (based on passing UTF-16
  strings) and a byte based API based a character set called ANSI.  The
  regular Perl interfaces to the OS currently only uses the ANSI APIs.
  Unfortunately ANSI is not a single character set.
  
  The encoding that corresponds to ANSI varies between different editions of
  Windows.  For many western editions of Windows ANSI corresponds to CP-1252
  which is a character set similar to ISO-8859-1.  Conceptually the ANSI
  character set is a similar concept to the POSIX locale CODESET so this module
  figures out what the ANSI code page is and make this available as
  $ENCODING_LOCALE and the "locale" Encoding alias.
  
  Windows systems also operate with another byte based character set.
  It's called the OEM code page.  This is the encoding that the Console
  takes as input and output.  It's common for the OEM code page to
  differ from the ANSI code page.
  
  =head2 Mac OS X
  
  On Mac OS X the file system encoding is always UTF-8 while the locale
  can otherwise be set up as normal for POSIX systems.
  
  File names on Mac OS X will at the OS-level be converted to
  NFD-form.  A file created by passing a NFC-filename will come
  in NFD-form from readdir().  See L<Unicode::Normalize> for details
  of NFD/NFC.
  
  Actually, Apple does not follow the Unicode NFD standard since not all
  character ranges are decomposed.  The claim is that this avoids problems with
  round trip conversions from old Mac text encodings.  See L<Encode::UTF8Mac> for
  details.
  
  =head2 POSIX (Linux and other Unixes)
  
  File systems might vary in what encoding is to be used for
  filenames.  Since this module has no way to actually figure out
  what the is correct it goes with the best guess which is to
  assume filenames are encoding according to the current locale.
  Users are advised to always specify UTF-8 as the locale charset.
  
  =head1 SEE ALSO
  
  L<I18N::Langinfo>, L<Encode>, L<Term::Encoding>
  
  =head1 AUTHOR
  
  Copyright 2010 Gisle Aas <gisle@aas.no>.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =cut
ENCODE_LOCALE

    $main::fatpacked{"Eval/Closure.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'EVAL_CLOSURE';
  package Eval::Closure;
  BEGIN {
    $Eval::Closure::AUTHORITY = 'cpan:DOY';
  }
  $Eval::Closure::VERSION = '0.14';
  use strict;
  use warnings;
  # ABSTRACT: safely and cleanly create closures via string eval
  
  use Exporter 'import';
  @Eval::Closure::EXPORT = @Eval::Closure::EXPORT_OK = 'eval_closure';
  
  use Carp;
  use overload ();
  use Scalar::Util qw(reftype);
  
  use constant HAS_LEXICAL_SUBS => $] >= 5.018;
  
  
  
  sub eval_closure {
      my (%args) = @_;
  
      # default to copying environment
      $args{alias} = 0 if !exists $args{alias};
  
      $args{source} = _canonicalize_source($args{source});
      _validate_env($args{environment} ||= {});
  
      $args{source} = _line_directive(@args{qw(line description)})
                    . $args{source}
          if defined $args{description} && !($^P & 0x10);
  
      my ($code, $e) = _clean_eval_closure(@args{qw(source environment alias)});
  
      if (!$code) {
          if ($args{terse_error}) {
              die "$e\n";
          }
          else {
              croak("Failed to compile source: $e\n\nsource:\n$args{source}")
          }
      }
  
      return $code;
  }
  
  sub _canonicalize_source {
      my ($source) = @_;
  
      if (defined($source)) {
          if (ref($source)) {
              if (reftype($source) eq 'ARRAY'
               || overload::Method($source, '@{}')) {
                  return join "\n", @$source;
              }
              elsif (overload::Method($source, '""')) {
                  return "$source";
              }
              else {
                  croak("The 'source' parameter to eval_closure must be a "
                      . "string or array reference");
              }
          }
          else {
              return $source;
          }
      }
      else {
          croak("The 'source' parameter to eval_closure is required");
      }
  }
  
  sub _validate_env {
      my ($env) = @_;
  
      croak("The 'environment' parameter must be a hashref")
          unless reftype($env) eq 'HASH';
  
      for my $var (keys %$env) {
          if (HAS_LEXICAL_SUBS) {
              croak("Environment key '$var' should start with \@, \%, \$, or \&")
                  if index('$@%&', substr($var, 0, 1)) < 0;
          }
          else {
              croak("Environment key '$var' should start with \@, \%, or \$")
                  if index('$@%', substr($var, 0, 1)) < 0;
          }
          croak("Environment values must be references, not $env->{$var}")
              unless ref($env->{$var});
      }
  }
  
  sub _line_directive {
      my ($line, $description) = @_;
  
      $line = 1 unless defined($line);
  
      return qq{#line $line "$description"\n};
  }
  
  sub _clean_eval_closure {
      my ($source, $captures, $alias) = @_;
  
      my @capture_keys = keys %$captures;
  
      if ($ENV{EVAL_CLOSURE_PRINT_SOURCE}) {
          _dump_source(_make_compiler_source($source, $alias, @capture_keys));
      }
  
      my ($compiler, $e) = _make_compiler($source, $alias, @capture_keys);
      return (undef, $e) unless defined $compiler;
  
      my $code = $compiler->(@$captures{@capture_keys});
  
      if (!defined $code) {
          return (
              undef,
              "The 'source' parameter must return a subroutine reference, "
              . "not undef"
          )
      }
      if (!ref($code) || ref($code) ne 'CODE') {
          return (
              undef,
              "The 'source' parameter must return a subroutine reference, not "
              . ref($code)
          )
      }
  
      if ($alias) {
          require Devel::LexAlias;
          Devel::LexAlias::lexalias($code, $_, $captures->{$_})
              for grep substr($_, 0, 1) ne '&', @capture_keys;
      }
  
      return ($code, $e);
  }
  
  sub _make_compiler {
      my $source = _make_compiler_source(@_);
  
      _clean_eval($source)
  }
  
  sub _clean_eval {
      local $@;
      local $SIG{__DIE__};
      my $compiler = eval $_[0];
      my $e = $@;
      ( $compiler, $e )
  }
  
  $Eval::Closure::SANDBOX_ID = 0;
  
  sub _make_compiler_source {
      my ($source, $alias, @capture_keys) = @_;
      $Eval::Closure::SANDBOX_ID++;
      my $i = 0;
      return join "\n", (
          "package Eval::Closure::Sandbox_$Eval::Closure::SANDBOX_ID;",
          'sub {',
              (map { _make_lexical_assignment($_, $i++, $alias) } @capture_keys),
              $source,
          '}',
      );
  }
  
  sub _make_lexical_assignment {
      my ($key, $index, $alias) = @_;
      my $sigil = substr($key, 0, 1);
      my $name = substr($key, 1);
      if (HAS_LEXICAL_SUBS && $sigil eq '&') {
          my $tmpname = '$__' . $name . '__' . $index;
          return 'use feature "lexical_subs"; '
               . 'no warnings "experimental::lexical_subs"; '
               . 'my ' . $tmpname . ' = $_[' . $index . ']; '
               . 'my sub ' . $name . ' { goto ' . $tmpname . ' }';
      }
      if ($alias) {
          return 'my ' . $key . ';';
      }
      else {
          return 'my ' . $key . ' = ' . $sigil . '{$_[' . $index . ']};';
      }
  }
  
  sub _dump_source {
      my ($source) = @_;
  
      my $output;
      local $@;
      if (eval { require Perl::Tidy; 1 }) {
          Perl::Tidy::perltidy(
              source      => \$source,
              destination => \$output,
              argv        => [],
          );
      }
      else {
          $output = $source;
      }
  
      warn "$output\n";
  }
  
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Eval::Closure - safely and cleanly create closures via string eval
  
  =head1 VERSION
  
  version 0.14
  
  =head1 SYNOPSIS
  
    use Eval::Closure;
  
    my $code = eval_closure(
        source      => 'sub { $foo++ }',
        environment => {
            '$foo' => \1,
        },
    );
  
    warn $code->(); # 1
    warn $code->(); # 2
  
    my $code2 = eval_closure(
        source => 'sub { $code->() }',
    ); # dies, $code isn't in scope
  
  =head1 DESCRIPTION
  
  String eval is often used for dynamic code generation. For instance, C<Moose>
  uses it heavily, to generate inlined versions of accessors and constructors,
  which speeds code up at runtime by a significant amount. String eval is not
  without its issues however - it's difficult to control the scope it's used in
  (which determines which variables are in scope inside the eval), and it's easy
  to miss compilation errors, since eval catches them and sticks them in $@
  instead.
  
  This module attempts to solve these problems. It provides an C<eval_closure>
  function, which evals a string in a clean environment, other than a fixed list
  of specified variables. Compilation errors are rethrown automatically.
  
  =head1 FUNCTIONS
  
  =head2 eval_closure(%args)
  
  This function provides the main functionality of this module. It is exported by
  default. It takes a hash of parameters, with these keys being valid:
  
  =over 4
  
  =item source
  
  The string to be evaled. It should end by returning a code reference. It can
  access any variable declared in the C<environment> parameter (and only those
  variables). It can be either a string, or an arrayref of lines (which will be
  joined with newlines to produce the string).
  
  =item environment
  
  The environment to provide to the eval. This should be a hashref, mapping
  variable names (including sigils) to references of the appropriate type. For
  instance, a valid value for environment would be C<< { '@foo' => [] } >> (which
  would allow the generated function to use an array named C<@foo>). Generally,
  this is used to allow the generated function to access externally defined
  variables (so you would pass in a reference to a variable that already exists).
  
  In perl 5.18 and greater, the environment hash can contain variables with a
  sigil of C<&>. This will create a lexical sub in the evaluated code (see
  L<feature/The 'lexical_subs' feature>). Using a C<&> sigil on perl versions
  before lexical subs were available will throw an error.
  
  =item alias
  
  If set to true, the coderef returned closes over the variables referenced in
  the environment hashref. (This feature requires L<Devel::LexAlias>.) If set to
  false, the coderef closes over a I<< shallow copy >> of the variables.
  
  If this argument is omitted, Eval::Closure will currently assume false, but
  this assumption may change in a future version.
  
  =item description
  
  This lets you provide a bit more information in backtraces. Normally, when a
  function that was generated through string eval is called, that stack frame
  will show up as "(eval n)", where 'n' is a sequential identifier for every
  string eval that has happened so far in the program. Passing a C<description>
  parameter lets you override that to something more useful (for instance,
  L<Moose> overrides the description for accessors to something like "accessor
  foo at MyClass.pm, line 123").
  
  =item line
  
  This lets you override the particular line number that appears in backtraces,
  much like the C<description> option. The default is 1.
  
  =item terse_error
  
  Normally, this function appends the source code that failed to compile, and
  prepends some explanatory text. Setting this option to true suppresses that
  behavior so you get only the compilation error that Perl actually reported.
  
  =back
  
  =head1 BUGS
  
  No known bugs.
  
  Please report any bugs to GitHub Issues at
  L<https://github.com/doy/eval-closure/issues>.
  
  =head1 SEE ALSO
  
  =over 4
  
  =item * L<Class::MOP::Method::Accessor>
  
  This module is a factoring out of code that used to live here
  
  =back
  
  =head1 SUPPORT
  
  You can find this documentation for this module with the perldoc command.
  
      perldoc Eval::Closure
  
  You can also look for information at:
  
  =over 4
  
  =item * MetaCPAN
  
  L<https://metacpan.org/release/Eval-Closure>
  
  =item * Github
  
  L<https://github.com/doy/eval-closure>
  
  =item * RT: CPAN's request tracker
  
  L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Eval-Closure>
  
  =item * CPAN Ratings
  
  L<http://cpanratings.perl.org/d/Eval-Closure>
  
  =back
  
  =head1 NOTES
  
  Based on code from L<Class::MOP::Method::Accessor>, by Stevan Little and the
  Moose Cabal.
  
  =head1 AUTHOR
  
  Jesse Luehrs <doy@tozt.net>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by Jesse Luehrs.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
EVAL_CLOSURE

    $main::fatpacked{"Exception/Class.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'EXCEPTION_CLASS';
  package Exception::Class;
  
  use 5.008001;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.40';
  
  use Exception::Class::Base;
  use Scalar::Util qw(blessed);
  
  our $BASE_EXC_CLASS;
  BEGIN { $BASE_EXC_CLASS ||= 'Exception::Class::Base'; }
  
  our %CLASSES;
  
  sub import {
      my $class = shift;
  
      local $Exception::Class::Caller = caller();
  
      my %c;
  
      my %needs_parent;
      while ( my $subclass = shift ) {
          my $def = ref $_[0] ? shift : {};
          $def->{isa}
              = $def->{isa}
              ? ( ref $def->{isa} ? $def->{isa} : [ $def->{isa} ] )
              : [];
  
          $c{$subclass} = $def;
      }
  
      # We need to sort by length because if we check for keys in the
      # Foo::Bar:: stash, this creates a "Bar::" key in the Foo:: stash!
  MAKE_CLASSES:
      foreach my $subclass ( sort { length $a <=> length $b } keys %c ) {
          my $def = $c{$subclass};
  
          # We already made this one.
          next if $CLASSES{$subclass};
  
          {
              no strict 'refs';
              foreach my $parent ( @{ $def->{isa} } ) {
                  unless ( keys %{"$parent\::"} ) {
                      $needs_parent{$subclass} = {
                          parents => $def->{isa},
                          def     => $def
                      };
                      next MAKE_CLASSES;
                  }
              }
          }
  
          $class->_make_subclass(
              subclass => $subclass,
              def => $def || {},
          );
      }
  
      foreach my $subclass ( keys %needs_parent ) {
  
          # This will be used to spot circular references.
          my %seen;
          $class->_make_parents( \%needs_parent, $subclass, \%seen );
      }
  }
  
  sub _make_parents {
      my $class    = shift;
      my $needs    = shift;
      my $subclass = shift;
      my $seen     = shift;
      my $child    = shift;    # Just for error messages.
  
      no strict 'refs';
  
      # What if someone makes a typo in specifying their 'isa' param?
      # This should catch it. Either it's been made because it didn't
      # have missing parents OR it's in our hash as needing a parent.
      # If neither of these is true then the _only_ place it is
      # mentioned is in the 'isa' param for some other class, which is
      # not a good enough reason to make a new class.
      die
          "Class $subclass appears to be a typo as it is only specified in the 'isa' param for $child\n"
          unless exists $needs->{$subclass}
          || $CLASSES{$subclass}
          || keys %{"$subclass\::"};
  
      foreach my $c ( @{ $needs->{$subclass}{parents} } ) {
  
          # It's been made
          next if $CLASSES{$c} || keys %{"$c\::"};
  
          die "There appears to be some circularity involving $subclass\n"
              if $seen->{$subclass};
  
          $seen->{$subclass} = 1;
  
          $class->_make_parents( $needs, $c, $seen, $subclass );
      }
  
      return if $CLASSES{$subclass} || keys %{"$subclass\::"};
  
      $class->_make_subclass(
          subclass => $subclass,
          def      => $needs->{$subclass}{def}
      );
  }
  
  sub _make_subclass {
      my $class = shift;
      my %p     = @_;
  
      my $subclass = $p{subclass};
      my $def      = $p{def};
  
      my $isa;
      if ( $def->{isa} ) {
          $isa = ref $def->{isa} ? join ' ', @{ $def->{isa} } : $def->{isa};
      }
      $isa ||= $BASE_EXC_CLASS;
  
      my $version_name = 'VERSION';
  
      my $code = <<"EOPERL";
  package $subclass;
  
  use base qw($isa);
  
  our \$$version_name = '1.1';
  
  1;
  
  EOPERL
  
      if ( $def->{description} ) {
          ( my $desc = $def->{description} ) =~ s/([\\\'])/\\$1/g;
          $code .= <<"EOPERL";
  sub description
  {
      return '$desc';
  }
  EOPERL
      }
  
      my @fields;
      if ( my $fields = $def->{fields} ) {
          @fields = UNIVERSAL::isa( $fields, 'ARRAY' ) ? @$fields : $fields;
  
          $code
              .= "sub Fields { return (\$_[0]->SUPER::Fields, "
              . join( ", ", map {"'$_'"} @fields )
              . ") }\n\n";
  
          foreach my $field (@fields) {
              $code .= sprintf( "sub %s { \$_[0]->{%s} }\n", $field, $field );
          }
      }
  
      if ( my $alias = $def->{alias} ) {
          die "Cannot make alias without caller"
              unless defined $Exception::Class::Caller;
  
          no strict 'refs';
          *{"$Exception::Class::Caller\::$alias"}
              = sub { $subclass->throw(@_) };
      }
  
      if ( my $defaults = $def->{defaults} ) {
          $code
              .= "sub _defaults { return shift->SUPER::_defaults, our \%_DEFAULTS }\n";
          no strict 'refs';
          *{"$subclass\::_DEFAULTS"} = {%$defaults};
      }
  
      eval $code;
  
      die $@ if $@;
  
      $CLASSES{$subclass} = 1;
  }
  
  sub caught {
      my $e = $@;
  
      return $e unless $_[1];
  
      return unless blessed($e) && $e->isa( $_[1] );
      return $e;
  }
  
  sub Classes { sort keys %Exception::Class::CLASSES }
  
  1;
  
  # ABSTRACT: A module that allows you to declare real exception classes in Perl
  
  __END__
  
  =pod
  
  =head1 NAME
  
  Exception::Class - A module that allows you to declare real exception classes in Perl
  
  =head1 VERSION
  
  version 1.40
  
  =head1 SYNOPSIS
  
    use Exception::Class (
        'MyException',
  
        'AnotherException' => { isa => 'MyException' },
  
        'YetAnotherException' => {
            isa         => 'AnotherException',
            description => 'These exceptions are related to IPC'
        },
  
        'ExceptionWithFields' => {
            isa    => 'YetAnotherException',
            fields => [ 'grandiosity', 'quixotic' ],
            alias  => 'throw_fields',
        },
    );
    use Scalar::Util qw( blessed );
    use Try::Tiny;
  
    try {
        MyException->throw( error => 'I feel funny.' );
    }
    catch {
        die $_ unless blessed $_ && $_->can('rethrow');
  
        if ( $_->isa('Exception::Class') ) {
            warn $_->error, "\n", $_->trace->as_string, "\n";
            warn join ' ', $_->euid, $_->egid, $_->uid, $_->gid, $_->pid, $_->time;
  
            exit;
        }
        elsif ( $_->isa('ExceptionWithFields') ) {
            if ( $_->quixotic ) {
                handle_quixotic_exception();
            }
            else {
                handle_non_quixotic_exception();
            }
        }
        else {
            $_->rethrow;
        }
    };
  
    # without Try::Tiny
    eval { ... };
    if ( my $e = Exception::Class->caught() ) { ... }
  
    # use an alias - without parens subroutine name is checked at
    # compile time
    throw_fields error => "No strawberry", grandiosity => "quite a bit";
  
  =head1 DESCRIPTION
  
  B<RECOMMENDATION 1>: If you are writing modern Perl code with L<Moose> or
  L<Moo> I highly recommend using L<Throwable> instead of this module.
  
  B<RECOMMENDATION 2>: Whether or not you use L<Throwable>, you should use
  L<Try::Tiny>.
  
  Exception::Class allows you to declare exception hierarchies in your
  modules in a "Java-esque" manner.
  
  It features a simple interface allowing programmers to 'declare'
  exception classes at compile time. It also has a base exception
  class, L<Exception::Class::Base>, that can be easily extended.
  
  It is designed to make structured exception handling simpler and
  better by encouraging people to use hierarchies of exceptions in their
  applications, as opposed to a single catch-all exception class.
  
  This module does not implement any try/catch syntax. Please see the
  "OTHER EXCEPTION MODULES (try/catch syntax)" section for more
  information on how to get this syntax.
  
  You will also want to look at the documentation for
  L<Exception::Class::Base>, which is the default base class for all
  exception objects created by this module.
  
  =for Pod::Coverage     Classes
      caught
  
  =head1 DECLARING EXCEPTION CLASSES
  
  Importing C<Exception::Class> allows you to automagically create
  L<Exception::Class::Base> subclasses. You can also create subclasses
  via the traditional means of defining your own subclass with C<@ISA>.
  These two methods may be easily combined, so that you could subclass
  an exception class defined via the automagic import, if you desired
  this.
  
  The syntax for the magic declarations is as follows:
  
  'MANDATORY CLASS NAME' => \%optional_hashref
  
  The hashref may contain the following options:
  
  =over 4
  
  =item * isa
  
  This is the class's parent class. If this isn't provided then the
  class name in C<$Exception::Class::BASE_EXC_CLASS> is assumed to be
  the parent (see below).
  
  This parameter lets you create arbitrarily deep class hierarchies.
  This can be any other L<Exception::Class::Base> subclass in your
  declaration I<or> a subclass loaded from a module.
  
  To change the default exception class you will need to change the
  value of C<$Exception::Class::BASE_EXC_CLASS> I<before> calling
  C<import()>. To do this simply do something like this:
  
    BEGIN { $Exception::Class::BASE_EXC_CLASS = 'SomeExceptionClass'; }
  
  If anyone can come up with a more elegant way to do this please let me
  know.
  
  CAVEAT: If you want to automagically subclass an
  L<Exception::Class::Base> subclass loaded from a file, then you
  I<must> compile the class (via use or require or some other magic)
  I<before> you import C<Exception::Class> or you'll get a compile time
  error.
  
  =item * fields
  
  This allows you to define additional attributes for your exception
  class. Any field you define can be passed to the C<throw()> or
  C<new()> methods as additional parameters for the constructor. In
  addition, your exception object will have an accessor method for the
  fields you define.
  
  This parameter can be either a scalar (for a single field) or an array
  reference if you need to define multiple fields.
  
  Fields will be inherited by subclasses.
  
  =item * alias
  
  Specifying an alias causes this class to create a subroutine of the
  specified name in the I<caller's> namespace. Calling this subroutine
  is equivalent to calling C<< <class>->throw(@_) >> for the given
  exception class.
  
  Besides convenience, using aliases also allows for additional compile
  time checking. If the alias is called I<without parentheses>, as in
  C<throw_fields "an error occurred">, then Perl checks for the
  existence of the C<throw_fields()> subroutine at compile time. If
  instead you do C<< ExceptionWithFields->throw(...) >>, then Perl
  checks the class name at runtime, meaning that typos may sneak
  through.
  
  =item * description
  
  Each exception class has a description method that returns a fixed
  string. This should describe the exception I<class> (as opposed to
  any particular exception object). This may be useful for debugging if
  you start catching exceptions you weren't expecting (particularly if
  someone forgot to document them) and you don't understand the error
  messages.
  
  =back
  
  The C<Exception::Class> magic attempts to detect circular class
  hierarchies and will die if it finds one. It also detects missing
  links in a chain, for example if you declare Bar to be a subclass of
  Foo and never declare Foo.
  
  =head1 L<Try::Tiny>
  
  If you are interested in adding try/catch/finally syntactic sugar to your code
  then I recommend you check out L<Try::Tiny>. This is a great module that helps
  you ignore some of the weirdness with C<eval> and C<$@>. Here's an example of
  how the two modules work together:
  
    use Exception::Class ( 'My::Exception' );
    use Scalar::Util qw( blessed );
    use Try::Tiny;
  
    try {
        might_throw();
    }
    catch {
        if ( blessed $_ && $_->isa('My::Exception') ) {
            handle_it();
        }
        else {
            die $_;
        }
    };
  
  Note that you B<cannot> use C<< Exception::Class->caught() >> with
  L<Try::Tiny>.
  
  =head1 Catching Exceptions Without L<Try::Tiny>
  
  C<Exception::Class> provides some syntactic sugar for catching
  exceptions in a safe manner:
  
    eval {...};
  
    if ( my $e = Exception::Class->caught('My::Error') ) {
        cleanup();
        do_something_with_exception($e);
    }
  
  The C<caught()> method takes a class name and returns an exception
  object if the last thrown exception is of the given class, or a
  subclass of that class. If it is not given any arguments, it simply
  returns C<$@>.
  
  You should B<always> make a copy of the exception object, rather than
  using C<$@> directly. This is necessary because if your C<cleanup()>
  function uses C<eval>, or calls something which uses it, then C<$@> is
  overwritten. Copying the exception preserves it for the call to
  C<do_something_with_exception()>.
  
  Exception objects also provide a caught method so you can write:
  
    if ( my $e = My::Error->caught() ) {
        cleanup();
        do_something_with_exception($e);
    }
  
  =head2 Uncatchable Exceptions
  
  Internally, the C<caught()> method will call C<isa()> on the exception
  object. You could make an exception "uncatchable" by overriding
  C<isa()> in that class like this:
  
   package Exception::Uncatchable;
  
   sub isa { shift->rethrow }
  
  Of course, this only works if you always call C<< Exception::Class->caught()
  >> after an C<eval>.
  
  =head1 USAGE RECOMMENDATION
  
  If you're creating a complex system that throws lots of different
  types of exceptions, consider putting all the exception declarations
  in one place. For an app called Foo you might make a
  C<Foo::Exceptions> module and use that in all your code. This module
  could just contain the code to make C<Exception::Class> do its
  automagic class creation. Doing this allows you to more easily see
  what exceptions you have, and makes it easier to keep track of them.
  
  This might look something like this:
  
    package Foo::Bar::Exceptions;
  
    use Exception::Class (
        Foo::Bar::Exception::Senses =>
            { description => 'sense-related exception' },
  
        Foo::Bar::Exception::Smell => {
            isa         => 'Foo::Bar::Exception::Senses',
            fields      => 'odor',
            description => 'stinky!'
        },
  
        Foo::Bar::Exception::Taste => {
            isa         => 'Foo::Bar::Exception::Senses',
            fields      => [ 'taste', 'bitterness' ],
            description => 'like, gag me with a spoon!'
        },
  
        ...
    );
  
  You may want to create a real module to subclass
  L<Exception::Class::Base> as well, particularly if you want your
  exceptions to have more methods.
  
  =head2 Subclassing Exception::Class::Base
  
  As part of your usage of C<Exception::Class>, you may want to create
  your own base exception class which subclasses
  L<Exception::Class::Base>. You should feel free to subclass any of
  the methods documented above. For example, you may want to subclass
  C<new()> to add additional information to your exception objects.
  
  =head1 Exception::Class FUNCTIONS
  
  The C<Exception::Class> method offers one function, C<Classes()>,
  which is not exported. This method returns a list of the classes that
  have been created by calling the C<Exception::Class> import() method.
  Note that this is I<all> the subclasses that have been created, so it
  may include subclasses created by things like CPAN modules, etc. Also
  note that if you simply define a subclass via the normal Perl method
  of setting C<@ISA> or C<use base>, then your subclass will not be
  included.
  
  =head1 SUPPORT
  
  Please submit bugs to the CPAN RT system at
  http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Exception%3A%3AClass or
  via email at bug-exception-class@rt.cpan.org.
  
  =head1 DONATIONS
  
  If you'd like to thank me for the work I've done on this module,
  please consider making a "donation" to me via PayPal. I spend a lot of
  free time creating free software, and would appreciate any support
  you'd care to offer.
  
  Please note that B<I am not suggesting that you must do this> in order
  for me to continue working on this particular software. I will
  continue to do so, inasmuch as I have in the past, for as long as it
  interests me.
  
  Similarly, a donation made in this way will probably not make me work
  on this software much more, unless I get so many donations that I can
  consider working on free software full time, which seems unlikely at
  best.
  
  To donate, log into PayPal and send money to autarch@urth.org or use
  the button on this page:
  L<http://www.urth.org/~autarch/fs-donation.html>
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 CONTRIBUTOR
  
  =for stopwords Ricardo Signes
  
  Ricardo Signes <rjbs@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by Dave Rolsky.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
EXCEPTION_CLASS

    $main::fatpacked{"Exception/Class/Base.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'EXCEPTION_CLASS_BASE';
  package Exception::Class::Base;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.40';
  
  use Class::Data::Inheritable 0.02;
  use Devel::StackTrace 2.00;
  use Scalar::Util qw( blessed );
  
  use base qw(Class::Data::Inheritable);
  
  BEGIN {
      __PACKAGE__->mk_classdata('Trace');
      __PACKAGE__->mk_classdata('UnsafeRefCapture');
  
      __PACKAGE__->mk_classdata('NoContextInfo');
      __PACKAGE__->NoContextInfo(0);
  
      __PACKAGE__->mk_classdata('RespectOverload');
      __PACKAGE__->RespectOverload(0);
  
      __PACKAGE__->mk_classdata('MaxArgLength');
      __PACKAGE__->MaxArgLength(0);
  
      sub NoRefs {
          my $self = shift;
          if (@_) {
              my $val = shift;
              return $self->UnsafeRefCapture( !$val );
          }
          else {
              return $self->UnsafeRefCapture();
          }
      }
  
      sub Fields { () }
  }
  
  use overload
  
      # an exception is always true
      bool => sub {1}, '""' => 'as_string', fallback => 1;
  
  # Create accessor routines
  BEGIN {
      my @fields = qw( message pid uid euid gid egid time trace );
  
      foreach my $f (@fields) {
          my $sub = sub { my $s = shift; return $s->{$f}; };
  
          no strict 'refs';
          *{$f} = $sub;
      }
      *error = \&message;
  
      my %trace_fields = (
          package => 'package',
          file    => 'filename',
          line    => 'line',
      );
  
      while ( my ( $f, $m ) = each %trace_fields ) {
          my $sub = sub {
              my $s = shift;
              return $s->{$f} if exists $s->{$f};
  
              my $frame = $s->trace->frame(0);
  
              return $s->{$f} = $frame ? $frame->$m() : undef;
          };
          no strict 'refs';
          *{$f} = $sub;
      }
  }
  
  sub Classes { Exception::Class::Classes() }
  
  sub throw {
      my $proto = shift;
  
      $proto->rethrow if ref $proto;
  
      die $proto->new(@_);
  }
  
  sub rethrow {
      my $self = shift;
  
      die $self;
  }
  
  sub new {
      my $proto = shift;
      my $class = ref $proto || $proto;
  
      my $self = bless {}, $class;
  
      $self->_initialize(@_);
  
      return $self;
  }
  
  sub _initialize {
      my $self = shift;
      my %p = @_ == 1 ? ( error => $_[0] ) : @_;
  
      $self->{message} = $p{message} || $p{error} || '';
  
      $self->{show_trace} = $p{show_trace} if exists $p{show_trace};
  
      if ( $self->NoContextInfo() ) {
          $self->{show_trace} = 0;
          $self->{package} = $self->{file} = $self->{line} = undef;
      }
      else {
          # CORE::time is important to fix an error with some versions of
          # Perl
          $self->{time} = CORE::time();
          $self->{pid}  = $$;
          $self->{uid}  = $<;
          $self->{euid} = $>;
          $self->{gid}  = $(;
          $self->{egid} = $);
  
          my @ignore_class   = (__PACKAGE__);
          my @ignore_package = 'Exception::Class';
  
          if ( my $i = delete $p{ignore_class} ) {
              push @ignore_class, ( ref($i) eq 'ARRAY' ? @$i : $i );
          }
  
          if ( my $i = delete $p{ignore_package} ) {
              push @ignore_package, ( ref($i) eq 'ARRAY' ? @$i : $i );
          }
  
          $self->{trace} = Devel::StackTrace->new(
              ignore_class       => \@ignore_class,
              ignore_package     => \@ignore_package,
              unsafe_ref_capture => $self->UnsafeRefCapture,
              respect_overload   => $self->RespectOverload,
              max_arg_length     => $self->MaxArgLength,
          );
      }
  
      my %fields = map { $_ => 1 } $self->Fields;
      while ( my ( $key, $value ) = each %p ) {
          next if $key =~ /^(?:error|message|show_trace)$/;
  
          if ( $fields{$key} ) {
              $self->{$key} = $value;
          }
          else {
              Exception::Class::Base->throw(
                  error => "unknown field $key passed to constructor for class "
                      . ref $self );
          }
      }
  }
  
  sub context_hash {
      my $self = shift;
  
      return {
          time => $self->{time},
          pid  => $self->{pid},
          uid  => $self->{uid},
          euid => $self->{euid},
          gid  => $self->{gid},
          egid => $self->{egid},
      };
  }
  
  sub field_hash {
      my $self = shift;
  
      my $hash = {};
  
      for my $field ( $self->Fields ) {
          $hash->{$field} = $self->$field;
      }
  
      return $hash;
  }
  
  sub description {
      return 'Generic exception';
  }
  
  sub show_trace {
      my $self = shift;
  
      return 0 unless $self->{trace};
  
      if (@_) {
          $self->{show_trace} = shift;
      }
  
      return exists $self->{show_trace} ? $self->{show_trace} : $self->Trace;
  }
  
  sub as_string {
      my $self = shift;
  
      my $str = $self->full_message;
      unless ( defined $str && length $str ) {
          my $desc = $self->description;
          $str = defined $desc
              && length $desc ? "[$desc]" : "[Generic exception]";
      }
  
      $str .= "\n\n" . $self->trace->as_string
          if $self->show_trace;
  
      return $str;
  }
  
  sub full_message { $_[0]->{message} }
  
  #
  # The %seen bit protects against circular inheritance.
  #
  eval <<'EOF' if $] == 5.006;
  sub isa {
      my ( $inheritor, $base ) = @_;
      $inheritor = ref($inheritor) if ref($inheritor);
  
      my %seen;
  
      no strict 'refs';
      my @parents = ( $inheritor, @{"$inheritor\::ISA"} );
      while ( my $class = shift @parents ) {
          return 1 if $class eq $base;
  
          push @parents, grep { !$seen{$_}++ } @{"$class\::ISA"};
      }
      return 0;
  }
  EOF
  
  sub caught {
      my $class = shift;
  
      my $e = $@;
  
      return unless defined $e && blessed($e) && $e->isa($class);
      return $e;
  }
  
  1;
  
  # ABSTRACT: A base class for exception objects
  
  __END__
  
  =pod
  
  =head1 NAME
  
  Exception::Class::Base - A base class for exception objects
  
  =head1 VERSION
  
  version 1.40
  
  =head1 SYNOPSIS
  
    use Exception::Class 'MyException';
  
    eval { MyException->throw( error => 'I feel funny.' ) };
  
    print $@->error();
  
  =head1 DESCRIPTION
  
  This class is the base class for all exceptions created by
  L<Exception::Class>. It provides a number of methods for getting
  information about the exception.
  
  =for Pod::Coverage     Classes
      caught
      NoRefs
  
  =head1 METHODS
  
  =head2 MyException->Trace($boolean)
  
  Each C<Exception::Class::Base> subclass can be set individually to
  include a stacktrace when the C<as_string> method is called. The
  default is to not include a stacktrace. Calling this method with a
  value changes this behavior. It always returns the current value
  (after any change is applied).
  
  This value is inherited by any subclasses. However, if this value is
  set for a subclass, it will thereafter be independent of the value in
  C<Exception::Class::Base>.
  
  Do not call this on the C<Exception::Class::Base> class directly or
  you'll change it for all exception classes that use
  L<Exception::Class>, including ones created in modules you don't
  control.
  
  This is a class method, not an object method.
  
  =head2 MyException->UnsafeRefCapture($boolean)
  
  When a C<Devel::StackTrace> object is created, it walks through the
  stack and stores the arguments which were passed to each subroutine on
  the stack. If any of these arguments are references, then that means
  that the C<Devel::StackTrace> ends up increasing the ref count of these
  references, delaying their destruction.
  
  Since C<Exception::Class::Base> uses C<Devel::StackTrace> internally,
  this method provides a way to tell C<Devel::StackTrace> not to store
  these references. Instead, C<Devel::StackTrace> replaces references
  with their stringified representation.
  
  This method defaults to false. As with C<Trace()>, it is inherited by
  subclasses but setting it in a subclass makes it independent thereafter.
  
  Do not call this on the C<Exception::Class::Base> class directly or
  you'll change it for all exception classes that use
  L<Exception::Class>, including ones created in modules you don't
  control.
  
  =head2 MyException->RespectOverload($boolean)
  
  When a C<Devel::StackTrace> object stringifies, by default it ignores
  stringification overloading on any objects being dealt with.
  
  Since C<Exception::Class::Base> uses C<Devel::StackTrace> internally,
  this method provides a way to tell C<Devel::StackTrace> to respect
  overloading.
  
  This method defaults to false. As with C<Trace()>, it is inherited by
  subclasses but setting it in a subclass makes it independent
  thereafter.
  
  Do not call this on the C<Exception::Class::Base> class directly or
  you'll change it for all exception classes that use
  L<Exception::Class>, including ones created in modules you don't
  control.
  
  =head2 MyException->MaxArgLength($boolean)
  
  When a C<Devel::StackTrace> object stringifies, by default it displays
  the full argument for each function. This parameter can be used to
  limit the maximum length of each argument.
  
  Since C<Exception::Class::Base> uses C<Devel::StackTrace> internally,
  this method provides a way to tell C<Devel::StackTrace> to limit the
  length of arguments.
  
  This method defaults to 0. As with C<Trace()>, it is inherited by
  subclasses but setting it in a subclass makes it independent
  thereafter.
  
  Do not call this on the C<Exception::Class::Base> class directly or
  you'll change it for all exception classes that use
  L<Exception::Class>, including ones created in modules you don't
  control.
  
  =head2 MyException->Fields
  
  This method returns the extra fields defined for the given class, as
  a list.
  
  Do not call this on the C<Exception::Class::Base> class directly or
  you'll change it for all exception classes that use
  L<Exception::Class>, including ones created in modules you don't
  control.
  
  =head2 MyException->throw( $message )
  
  =head2 MyException->throw( message => $message )
  
  =head2 MyException->throw( error => $error )
  
  This method creates a new object with the given error message. If no
  error message is given, this will be an empty string. It then dies
  with this object as its argument.
  
  This method also takes a C<show_trace> parameter which indicates
  whether or not the particular exception object being created should
  show a stacktrace when its C<as_string()> method is called. This
  overrides the value of C<Trace()> for this class if it is given.
  
  The frames included in the trace can be controlled by the C<ignore_class>
  and C<ignore_package> parameters. These are passed directly to
  Devel::Stacktrace's constructor. See C<Devel::Stacktrace> for more details.
  
  If only a single value is given to the constructor it is assumed to be
  the message parameter.
  
  Additional keys corresponding to the fields defined for the particular
  exception subclass will also be accepted.
  
  =head2 MyException->new(...)
  
  This method takes the same parameters as C<throw()>, but instead of
  dying simply returns a new exception object.
  
  This method is always called when constructing a new exception object
  via the C<throw()> method.
  
  =head2 MyException->description()
  
  Returns the description for the given C<Exception::Class::Base>
  subclass. The C<Exception::Class::Base> class's description is
  "Generic exception" (this may change in the future). This is also an
  object method.
  
  =head2 $exception->rethrow()
  
  Simply dies with the object as its sole argument. It's just syntactic
  sugar. This does not change any of the object's attribute values.
  However, it will cause C<caller()> to report the die as coming from
  within the C<Exception::Class::Base> class rather than where rethrow
  was called.
  
  Of course, you always have access to the original stacktrace for the
  exception object.
  
  =head2 $exception->message()
  
  =head2 $exception->error()
  
  Returns the error/message associated with the exception.
  
  =head2 $exception->pid()
  
  Returns the pid at the time the exception was thrown.
  
  =head2 $exception->uid()
  
  Returns the real user id at the time the exception was thrown.
  
  =head2 $exception->gid()
  
  Returns the real group id at the time the exception was thrown.
  
  =head2 $exception->euid()
  
  Returns the effective user id at the time the exception was thrown.
  
  =head2 $exception->egid()
  
  Returns the effective group id at the time the exception was thrown.
  
  =head2 $exception->time()
  
  Returns the time in seconds since the epoch at the time the exception
  was thrown.
  
  =head2 $exception->package()
  
  Returns the package from which the exception was thrown.
  
  =head2 $exception->file()
  
  Returns the file within which the exception was thrown.
  
  =head2 $exception->line()
  
  Returns the line where the exception was thrown.
  
  =head2 $exception->context_hash()
  
  Returns a hash reference with the following keys:
  
  =over 4
  
  =item * time
  
  =item * pid
  
  =item * uid
  
  =item * euid
  
  =item * gid
  
  =item * egid
  
  =back
  
  =head2 $exception->field_hash()
  
  Returns a hash reference where the keys are any fields defined for the
  exception class and the values are the values associated with the field in the
  given object.
  
  =head2 $exception->trace()
  
  Returns the trace object associated with the object.
  
  =head2 $exception->show_trace($boolean)
  
  This method can be used to set whether or not a stack trace is
  included when the as_string method is called or the object is
  stringified.
  
  =head2 $exception->as_string()
  
  Returns a string form of the error message (something like what you'd
  expect from die). If the class or object is set to show traces then
  then the full trace is also included. The result looks like
  C<Carp::confess()>.
  
  =head2 $exception->full_message()
  
  Called by the C<as_string()> method to get the message. By default,
  this is the same as calling the C<message()> method, but may be
  overridden by a subclass. See below for details.
  
  =head1 LIGHTWEIGHT EXCEPTIONS
  
  A lightweight exception is one which records no information about its context
  when it is created. This can be achieved by setting C<<
  $class->NoContextInfo() >> to a true value.
  
  You can make this the default for a class of exceptions by setting it after
  creating the class:
  
    use Exception::Class (
        'LightWeight',
        'HeavyWeight',
    );
  
    LightWeight->NoContextInfo(1);
  
  A lightweight exception does have a stack trace object, nor does it record the
  time, pid, uid, euid, gid, or egid. It only has a message.
  
  =head1 OVERLOADING
  
  C<Exception::Class::Base> objects are overloaded so that
  stringification produces a normal error message. This just calls the
  C<< $exception->as_string() >> method described above. This means
  that you can just C<print $@> after an C<eval> and not worry about
  whether or not its an actual object. It also means an application or
  module could do this:
  
   $SIG{__DIE__} = sub { Exception::Class::Base->throw( error => join '', @_ ); };
  
  and this would probably not break anything (unless someone was
  expecting a different type of exception object from C<die()>).
  
  =head1 OVERRIDING THE as_string METHOD
  
  By default, the C<as_string()> method simply returns the value
  C<message> or C<error> param plus a stack trace, if the class's
  C<Trace()> method returns a true value or C<show_trace> was set when
  creating the exception.
  
  However, once you add new fields to a subclass, you may want to
  include those fields in the stringified error.
  
  Inside the C<as_string()> method, the message (non-stack trace)
  portion of the error is generated by calling the C<full_message()>
  method. This can be easily overridden. For example:
  
    sub full_message {
        my $self = shift;
  
        my $msg = $self->message;
  
        $msg .= " and foo was " . $self->foo;
  
        return $msg;
    }
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by Dave Rolsky.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
EXCEPTION_CLASS_BASE

    $main::fatpacked{"File/Flock/Retry.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_FLOCK_RETRY';
  package File::Flock::Retry;
  
  our $DATE = '2015-10-22'; # DATE
  our $VERSION = '0.61'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Fcntl ':flock';
  
  sub lock {
      my ($class, $path, $opts) = @_;
      $opts //= {};
      my %h;
  
      defined($path) or die "Please specify path";
      $h{path}    = $path;
      $h{retries} = $opts->{retries} // 60;
      $h{shared}  = $opts->{shared} // 0;
  
      my $self = bless \%h, $class;
      $self->_lock;
      $self;
  }
  
  # return 1 if we lock, 0 if already locked. die on failure.
  sub _lock {
      my $self = shift;
  
      # already locked
      return 0 if $self->{_fh};
  
      my $path = $self->{path};
      my $existed = -f $path;
      my $exists;
      my $tries = 0;
    TRY:
      while (1) {
          $tries++;
  
          # 1
          open $self->{_fh}, ">>", $path
              or die "Can't open lock file '$path': $!";
  
          # 2
          my @st1 = stat($self->{_fh}); # stat before lock
  
          # 3
          if (flock($self->{_fh}, ($self->{shared} ? LOCK_SH : LOCK_EX) | LOCK_NB)) {
              # if file is unlinked by another process between 1 & 2, @st1 will be
              # empty and we check here.
              redo TRY unless @st1;
  
              # 4
              my @st2 = stat($path); # stat after lock
  
              # if file is unlinked between 3 & 4, @st2 will be empty and we check
              # here.
              redo TRY unless @st2;
  
              # if file is recreated between 2 & 4, @st1 and @st2 will differ in
              # dev/inode, we check here.
              redo TRY if $st1[0] != $st2[0] || $st1[1] != $st2[1];
  
              # everything seems okay
              last;
          } else {
              $tries <= $self->{retries}
                  or die "Can't acquire lock on '$path' after $tries seconds";
              sleep 1;
          }
      }
      $self->{_created} = !$existed;
      1;
  }
  
  # return 1 if we unlock, 0 if already unlocked. die on failure.
  sub _unlock {
      my ($self) = @_;
  
      my $path = $self->{path};
  
      # don't unlock if we are not holding the lock
      return 0 unless $self->{_fh};
  
      unlink $self->{path} if $self->{_created} && !(-s $self->{path});
  
      {
          # to shut up warning about flock on closed filehandle (XXX but why
          # closed if we are holding the lock?)
          no warnings;
  
          flock $self->{_fh}, LOCK_UN;
      }
      close delete($self->{_fh});
      1;
  }
  
  sub release {
      my $self = shift;
      $self->_unlock;
  }
  
  sub unlock {
      my $self = shift;
      $self->_unlock;
  }
  
  sub DESTROY {
      my $self = shift;
      $self->_unlock;
  }
  
  1;
  # ABSTRACT: Yet another flock module
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  File::Flock::Retry - Yet another flock module
  
  =head1 VERSION
  
  This document describes version 0.61 of File::Flock::Retry (from Perl distribution File-Flock-Retry), released on 2015-10-22.
  
  =head1 SYNOPSIS
  
   use File::Flock::Retry;
  
   # try to acquire exclusive lock. if fail to acquire lock within 60s, die.
   my $lock = File::Flock::Retry->lock($file);
  
   # explicitly unlock
   $lock->release;
  
   # automatically unlock if object is DESTROY-ed.
   undef $lock;
  
  =head1 DESCRIPTION
  
  This is yet another flock module. It is a more lightweight alternative to
  L<File::Flock> with some other differences:
  
  =over 4
  
  =item * OO interface only
  
  =item * Autoretry (by default for 60s) when trying to acquire lock
  
  I prefer this approach to blocking/waiting indefinitely or failing immediately.
  
  =back
  
  =for Pod::Coverage ^(DESTROY)$
  
  =head1 METHODS
  
  =head2 $lock = File::Flock::Retry->lock($path, \%opts)
  
  Attempt to acquire an exclusive lock on C<$path>. C<$path> will be created if
  not already exists. If $path is already locked by another process, will retry
  every second for a number of seconds (by default 60). Will die if failed to
  acquire lock after all retries.
  
  Will automatically unlock if C<$lock> goes out of scope. Upon unlock, will
  remove C<$path> if it was created and is still empty (this behavior is the same
  as C<File::Flock>).
  
  Available options:
  
  =over
  
  =item * retries => int (default: 60)
  
  Number of retries (equals number of seconds, since retry is done every second).
  
  =item * shared => bool (default: 0)
  
  By default, an exclusive lock (LOCK_EX) is attempted. However, if this option is
  set to true, a shared lock (LOCK_SH) is attempted.
  
  =back
  
  =head2 $lock->unlock
  
  Unlock.
  
  =head2 $lock->release
  
  Synonym for C<unlock()>.
  
  =head1 CAVEATS
  
  Not yet tested on Windows. Some filesystems do not support inode?
  
  =head1 SEE ALSO
  
  L<File::Flock>
  
  L<File::Flock::Tiny> which is also tiny, but does not have the autoremove and
  autoretry capability which I want. See also:
  https://github.com/trinitum/perl-File-Flock-Tiny/issues/1
  
  flock() Perl function.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/File-Flock-Retry>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-File-Flock-Retry>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=File-Flock-Retry>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
FILE_FLOCK_RETRY

    $main::fatpacked{"File/HomeDir.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_HOMEDIR';
  package File::HomeDir;
  
  # See POD at end for documentation
  
  use 5.00503;
  use strict;
  use Carp        ();
  use Config      ();
  use File::Spec  ();
  use File::Which ();
  
  # Globals
  use vars qw{$VERSION @ISA @EXPORT @EXPORT_OK $IMPLEMENTED_BY};
  BEGIN {
  	$VERSION = '1.00';
  
  	# Inherit manually
  	require Exporter;
  	@ISA       = qw{ Exporter };
  	@EXPORT    = qw{ home     };
  	@EXPORT_OK = qw{
  		home
  		my_home
  		my_desktop
  		my_documents
  		my_music
  		my_pictures
  		my_videos
  		my_data
  		my_dist_config
  		my_dist_data
  		users_home
  		users_desktop
  		users_documents
  		users_music
  		users_pictures
  		users_videos
  		users_data
  	};
  
  	# %~ doesn't need (and won't take) exporting, as it's a magic
  	# symbol name that's always looked for in package 'main'.
  }
  
  # Inlined Params::Util functions
  sub _CLASS ($) {
  	(defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s) ? $_[0] : undef;
  }
  sub _DRIVER ($$) {
  	(defined _CLASS($_[0]) and eval "require $_[0];" and ! $@ and $_[0]->isa($_[1]) and $_[0] ne $_[1]) ? $_[0] : undef;
  }
  
  # Platform detection
  if ( $IMPLEMENTED_BY ) {
  	# Allow for custom HomeDir classes
  	# Leave it as the existing value
  } elsif ( $^O eq 'MSWin32' ) {
  	# All versions of Windows
  	$IMPLEMENTED_BY = 'File::HomeDir::Windows';
  } elsif ( $^O eq 'darwin') {
  	# 1st: try Mac::SystemDirectory by chansen
  	if ( eval { require Mac::SystemDirectory; 1 } ) {
  		$IMPLEMENTED_BY = 'File::HomeDir::Darwin::Cocoa';
  	} elsif ( eval { require Mac::Files; 1 } ) {
  		# 2nd try Mac::Files: Carbon - unmaintained since 2006 except some 64bit fixes
  		$IMPLEMENTED_BY = 'File::HomeDir::Darwin::Carbon';
  	} else {
  		# 3rd: fallback: pure perl
  		$IMPLEMENTED_BY = 'File::HomeDir::Darwin';
  	}
  } elsif ( $^O eq 'MacOS' ) {
  	# Legacy Mac OS
  	$IMPLEMENTED_BY = 'File::HomeDir::MacOS9';
  } elsif ( File::Which::which('xdg-user-dir') ) {
  	# freedesktop unixes
  	$IMPLEMENTED_BY = 'File::HomeDir::FreeDesktop';
  } else {
  	# Default to Unix semantics
  	$IMPLEMENTED_BY = 'File::HomeDir::Unix';
  }
  unless ( _DRIVER($IMPLEMENTED_BY, 'File::HomeDir::Driver') ) {
  	Carp::croak("Missing or invalid File::HomeDir driver $IMPLEMENTED_BY");
  }
  
  
  
  
  
  #####################################################################
  # Current User Methods
  
  sub my_home {
  	$IMPLEMENTED_BY->my_home;
  }
  
  sub my_desktop {
  	$IMPLEMENTED_BY->can('my_desktop')
  		? $IMPLEMENTED_BY->my_desktop
  		: Carp::croak("The my_desktop method is not implemented on this platform");
  }
  
  sub my_documents {
  	$IMPLEMENTED_BY->can('my_documents')
  		? $IMPLEMENTED_BY->my_documents
  		: Carp::croak("The my_documents method is not implemented on this platform");
  }
  
  sub my_music {
  	$IMPLEMENTED_BY->can('my_music')
  		? $IMPLEMENTED_BY->my_music
  		: Carp::croak("The my_music method is not implemented on this platform");
  }
  
  sub my_pictures {
  	$IMPLEMENTED_BY->can('my_pictures')
  		? $IMPLEMENTED_BY->my_pictures
  		: Carp::croak("The my_pictures method is not implemented on this platform");
  }
  
  sub my_videos {
  	$IMPLEMENTED_BY->can('my_videos')
  		? $IMPLEMENTED_BY->my_videos
  		: Carp::croak("The my_videos method is not implemented on this platform");
  }
  
  sub my_data {
  	$IMPLEMENTED_BY->can('my_data')
  		? $IMPLEMENTED_BY->my_data
  		: Carp::croak("The my_data method is not implemented on this platform");
  }
  
  
  sub my_dist_data {
  	my $params = ref $_[-1] eq 'HASH' ? pop : {};
  	my $dist   = pop or Carp::croak("The my_dist_data method requires an argument");
  	my $data   = my_data();
  
          # If datadir is not defined, there's nothing we can do: bail out
          # and return nothing...	
  	return undef unless defined $data;
  
          # On traditional unixes, hide the top-level directory
  	my $var = $data eq home()
  		? File::Spec->catdir( $data, '.perl', 'dist', $dist )
  		: File::Spec->catdir( $data, 'Perl',  'dist', $dist );
  
  	# directory exists: return it
  	return $var if -d $var;
  
  	# directory doesn't exist: check if we need to create it...
  	return undef unless $params->{create};
  
  	# user requested directory creation
  	require File::Path;
  	File::Path::mkpath( $var );
  	return $var;
  }
  
  sub my_dist_config {
  	my $params = ref $_[-1] eq 'HASH' ? pop : {};
  	my $dist   = pop or Carp::croak("The my_dist_config method requires an argument");
  
  	# not all platforms support a specific my_config() method
  	my $config = $IMPLEMENTED_BY->can('my_config')
  		? $IMPLEMENTED_BY->my_config
  		: $IMPLEMENTED_BY->my_documents;
  
  	# If neither configdir nor my_documents is defined, there's
  	# nothing we can do: bail out and return nothing...	
  	return undef unless defined $config;
  
  	# On traditional unixes, hide the top-level dir
  	my $etc = $config eq home()
  		? File::Spec->catdir( $config, '.perl', $dist )
  		: File::Spec->catdir( $config, 'Perl',  $dist );
  
  	# directory exists: return it
  	return $etc if -d $etc;
  
  	# directory doesn't exist: check if we need to create it...
  	return undef unless $params->{create};
  
  	# user requested directory creation
  	require File::Path;
  	File::Path::mkpath( $etc );
  	return $etc;
  }
  
  
  
  
  #####################################################################
  # General User Methods
  
  sub users_home {
  	$IMPLEMENTED_BY->can('users_home')
  		? $IMPLEMENTED_BY->users_home( $_[-1] )
  		: Carp::croak("The users_home method is not implemented on this platform");
  }
  
  sub users_desktop {
  	$IMPLEMENTED_BY->can('users_desktop')
  		? $IMPLEMENTED_BY->users_desktop( $_[-1] )
  		: Carp::croak("The users_desktop method is not implemented on this platform");
  }
  
  sub users_documents {
  	$IMPLEMENTED_BY->can('users_documents')
  		? $IMPLEMENTED_BY->users_documents( $_[-1] )
  		: Carp::croak("The users_documents method is not implemented on this platform");
  }
  
  sub users_music {
  	$IMPLEMENTED_BY->can('users_music')
  		? $IMPLEMENTED_BY->users_music( $_[-1] )
  		: Carp::croak("The users_music method is not implemented on this platform");
  }
  
  sub users_pictures {
  	$IMPLEMENTED_BY->can('users_pictures')
  		? $IMPLEMENTED_BY->users_pictures( $_[-1] )
  		: Carp::croak("The users_pictures method is not implemented on this platform");
  }
  
  sub users_videos {
  	$IMPLEMENTED_BY->can('users_videos')
  		? $IMPLEMENTED_BY->users_videos( $_[-1] )
  		: Carp::croak("The users_videos method is not implemented on this platform");
  }
  
  sub users_data {
  	$IMPLEMENTED_BY->can('users_data')
  		? $IMPLEMENTED_BY->users_data( $_[-1] )
  		: Carp::croak("The users_data method is not implemented on this platform");
  }
  
  
  
  
  
  #####################################################################
  # Legacy Methods
  
  # Find the home directory of an arbitrary user
  sub home (;$) {
  	# Allow to be called as a method
  	if ( $_[0] and $_[0] eq 'File::HomeDir' ) {
  		shift();
  	}
  
  	# No params means my home
  	return my_home() unless @_;
  
  	# Check the param
  	my $name = shift;
  	if ( ! defined $name ) {
  		Carp::croak("Can't use undef as a username");
  	}
  	if ( ! length $name ) {
  		Carp::croak("Can't use empty-string (\"\") as a username");
  	}
  
  	# A dot also means my home
  	### Is this meant to mean File::Spec->curdir?
  	if ( $name eq '.' ) {
  		return my_home();
  	}
  
  	# Now hand off to the implementor
  	$IMPLEMENTED_BY->users_home($name);
  }
  
  
  
  
  
  #####################################################################
  # Tie-Based Interface
  
  # Okay, things below this point get scary
  
  CLASS: {
  	# Make the class for the %~ tied hash:
  	package File::HomeDir::TIE;
  
  	# Make the singleton object.
  	# (We don't use the hash for anything, though)
  	### THEN WHY MAKE IT???
  	my $SINGLETON = bless {};
  
  	sub TIEHASH { $SINGLETON }
  
  	sub FETCH {
  		# Catch a bad username
  		unless ( defined $_[1] ) {
  			Carp::croak("Can't use undef as a username");
  		}
  
  		# Get our homedir
  		unless ( length $_[1] ) {
  			return File::HomeDir::my_home();
  		}
  
  		# Get a named user's homedir
  		Carp::carp("The tied %~ hash has been deprecated");
  		return File::HomeDir::home($_[1]);
  	}
  
  	sub STORE    { _bad('STORE')    }
  	sub EXISTS   { _bad('EXISTS')   }
  	sub DELETE   { _bad('DELETE')   }
  	sub CLEAR    { _bad('CLEAR')    }
  	sub FIRSTKEY { _bad('FIRSTKEY') }
  	sub NEXTKEY  { _bad('NEXTKEY')  }
  
  	sub _bad ($) {
  		Carp::croak("You can't $_[0] with the %~ hash")
  	}
  }
  
  # Do the actual tie of the global %~ variable
  tie %~, 'File::HomeDir::TIE';
  
  1;
  
  __END__
  
  =pod
  
  =head1 NAME
  
  File::HomeDir - Find your home and other directories on any platform
  
  =head1 SYNOPSIS
  
    use File::HomeDir;
    
    # Modern Interface (Current User)
    $home     = File::HomeDir->my_home;
    $desktop  = File::HomeDir->my_desktop;
    $docs     = File::HomeDir->my_documents;
    $music    = File::HomeDir->my_music;
    $pics     = File::HomeDir->my_pictures;
    $videos   = File::HomeDir->my_videos;
    $data     = File::HomeDir->my_data;
    $dist     = File::HomeDir->my_dist_data('File-HomeDir');
    $dist     = File::HomeDir->my_dist_config('File-HomeDir');
    
    # Modern Interface (Other Users)
    $home    = File::HomeDir->users_home('foo');
    $desktop = File::HomeDir->users_desktop('foo');
    $docs    = File::HomeDir->users_documents('foo');
    $music   = File::HomeDir->users_music('foo');
    $pics    = File::HomeDir->users_pictures('foo');
    $video   = File::HomeDir->users_videos('foo');
    $data    = File::HomeDir->users_data('foo');
  
  =head1 DESCRIPTION
  
  B<File::HomeDir> is a module for locating the directories that are "owned"
  by a user (typicaly your user) and to solve the various issues that arise
  trying to find them consistently across a wide variety of platforms.
  
  The end result is a single API that can find your resources on any platform,
  making it relatively trivial to create Perl software that works elegantly
  and correctly no matter where you run it.
  
  This module provides two main interfaces.
  
  The first is a modern L<File::Spec>-style interface with a consistent
  OO API and different implementation modules to support various
  platforms. You are B<strongly> recommended to use this interface.
  
  The second interface is for legacy support of the original 0.07 interface
  that exported a C<home()> function by default and tied the C<%~> variable.
  
  It is generally not recommended that you use this interface, but due to
  back-compatibility reasons they will remain supported until at least 2010.
  
  The C<%~> interface has been deprecated. Documentation was removed in 2009,
  Unit test were removed in 2011, usage will issue warnings from 2012, and the
  interface will be removed entirely in 2015  (in line with the general Perl
  toolchain convention of a 10 year support period for legacy APIs that
  are potentially or actually in common use).
  
  =head2 Platform Neutrality
  
  In the Unix world, many different types of data can be mixed together
  in your home directory (although on some Unix platforms this is no longer
  the case, particularly for "desktop"-oriented platforms).
  
  On some non-Unix platforms, separate directories are allocated for
  different types of data and have been for a long time.
  
  When writing applications on top of B<File::HomeDir>, you should thus
  always try to use the most specific method you can. User documents should
  be saved in C<my_documents>, data that supports an application but isn't
  normally editing by the user directory should go into C<my_data>.
  
  On platforms that do not make any distinction, all these different
  methods will harmlessly degrade to the main home directory, but on
  platforms that care B<File::HomeDir> will always try to Do The Right
  Thing(tm).
  
  =head1 METHODS
  
  Two types of methods are provided. The C<my_method> series of methods for
  finding resources for the current user, and the C<users_method> (read as
  "user's method") series for finding resources for arbitrary users.
  
  This split is necessary, as on most platforms it is B<much> easier to find
  information about the current user compared to other users, and indeed
  on a number you cannot find out information such as C<users_desktop> at
  all, due to security restrictions.
  
  All methods will double check (using a C<-d> test) that a directory
  actually exists before returning it, so you may trust in the values
  that are returned (subject to the usual caveats of race conditions of
  directories being deleted at the moment between a directory being returned
  and you using it).
  
  However, because in some cases platforms may not support the concept of home
  directories at all, any method may return C<undef> (both in scalar and list
  context) to indicate that there is no matching directory on the system.
  
  For example, most untrusted 'nobody'-type users do not have a home
  directory. So any modules that are used in a CGI application that
  at some level of recursion use your code, will result in calls to
  File::HomeDir returning undef, even for a basic home() call.
  
  =head2 my_home
  
  The C<my_home> method takes no arguments and returns the main home/profile
  directory for the current user.
  
  If the distinction is important to you, the term "current" refers to the
  real user, and not the effective user.
  
  This is also the case for all of the other "my" methods.
  
  Returns the directory path as a string, C<undef> if the current user
  does not have a home directory, or dies on error.
  
  =head2 my_desktop
  
  The C<my_desktop> method takes no arguments and returns the "desktop"
  directory for the current user.
  
  Due to the diversity and complexity of implementions required to deal with
  implementing the required functionality fully and completely, the
  C<my_desktop> method may or may not be implemented on each platform.
  
  That said, I am extremely interested in code to implement C<my_desktop> on
  Unix, as long as it is capable of dealing (as the Windows implementation
  does) with internationalisation. It should also avoid false positive
  results by making sure it only returns the appropriate directories for the
  appropriate platforms.
  
  Returns the directory path as a string, C<undef> if the current user
  does not have a desktop directory, or dies on error.
  
  =head2 my_documents
  
  The C<my_documents> method takes no arguments and returns the directory (for
  the current user) where the user's documents are stored.
  
  Returns the directory path as a string, C<undef> if the current user
  does not have a documents directory, or dies on error.
  
  =head2 my_music
  
  The C<my_music> method takes no arguments and returns the directory
  where the current user's music is stored.
  
  No bias is made to any particular music type or music program, rather the
  concept of a directory to hold the user's music is made at the level of the
  underlying operating system or (at least) desktop environment.
  
  Returns the directory path as a string, C<undef> if the current user
  does not have a suitable directory, or dies on error.
  
  =head2 my_pictures
  
  The C<my_pictures> method takes no arguments and returns the directory
  where the current user's pictures are stored.
  
  No bias is made to any particular picture type or picture program, rather the
  concept of a directory to hold the user's pictures is made at the level of the
  underlying operating system or (at least) desktop environment.
  
  Returns the directory path as a string, C<undef> if the current user
  does not have a suitable directory, or dies on error.
  
  =head2 my_videos
  
  The C<my_videos> method takes no arguments and returns the directory
  where the current user's videos are stored.
  
  No bias is made to any particular video type or video program, rather the
  concept of a directory to hold the user's videos is made at the level of the
  underlying operating system or (at least) desktop environment.
  
  Returns the directory path as a string, C<undef> if the current user
  does not have a suitable directory, or dies on error.
  
  =head2 my_data
  
  The C<my_data> method takes no arguments and returns the directory where
  local applications should stored their internal data for the current
  user.
  
  Generally an application would create a subdirectory such as C<.foo>,
  beneath this directory, and store its data there. By creating your
  directory this way, you get an accurate result on the maximum number of
  platforms. But see the documentation about C<my_dist_config()> or
  C<my_dist_data()> below.
  
  For example, on Unix you get C<~/.foo> and on Win32 you get
  C<~/Local Settings/Application Data/.foo>
  
  Returns the directory path as a string, C<undef> if the current user
  does not have a data directory, or dies on error.
  
  
  =head2 my_dist_config
  
    File::HomeDir->my_dist_config( $dist [, \%params] );
    
    # For example...
    
    File::HomeDir->my_dist_config( 'File-HomeDir' );
    File::HomeDir->my_dist_config( 'File-HomeDir', { create => 1 } );
  
  The C<my_dist_config> method takes a distribution name as argument and
  returns an application-specific directory where they should store their
  internal configuration.
  
  The base directory will be either C<my_config> if the platform supports
  it, or C<my_documents> otherwise. The subdirectory itself will be 
  C<BASE/Perl/Dist-Name>. If the base directory is the user's homedir,
  C<my_dist_config> will be in C<~/.perl/Dist-Name> (and thus be hidden on
  all Unixes).
  
  The optional last argument is a hash reference to tweak the method
  behaviour. The following hash keys are recognized:
  
  =over 4
  
  =item * create
  
  Passing a true value to this key will force the creation of the
  directory if it doesn't exist (remember that C<File::HomeDir>'s policy
  is to return C<undef> if the directory doesn't exist).
  
  Defaults to false, meaning no automatic creation of directory.
  
  =back
  
  
  =head2 my_dist_data
  
    File::HomeDir->my_dist_data( $dist [, \%params] );
    
    # For example...
    
    File::HomeDir->my_dist_data( 'File-HomeDir' );
    File::HomeDir->my_dist_data( 'File-HomeDir', { create => 1 } );
  
  The C<my_dist_data> method takes a distribution name as argument and
  returns an application-specific directory where they should store their
  internal data.
  
  This directory will be of course a subdirectory of C<my_data>. Platforms
  supporting data-specific directories will use
  C<DATA_DIR/perl/dist/Dist-Name> following the common
  "DATA/vendor/application" pattern. If the C<my_data> directory is the
  user's homedir, C<my_dist_data> will be in C<~/.perl/dist/Dist-Name>
  (and thus be hidden on all Unixes).
  
  The optional last argument is a hash reference to tweak the method
  behaviour. The following hash keys are recognized:
  
  =over 4
  
  =item * create
  
  Passing a true value to this key will force the creation of the
  directory if it doesn't exist (remember that C<File::HomeDir>'s policy
  is to return C<undef> if the directory doesn't exist).
  
  Defaults to false, meaning no automatic creation of directory.
  
  =back
  
  =head2 users_home
  
    $home = File::HomeDir->users_home('foo');
  
  The C<users_home> method takes a single param and is used to locate the
  parent home/profile directory for an identified user on the system.
  
  While most of the time this identifier would be some form of user name,
  it is permitted to vary per-platform to support user ids or UUIDs as
  applicable for that platform.
  
  Returns the directory path as a string, C<undef> if that user
  does not have a home directory, or dies on error.
  
  =head2 users_documents
  
    $docs = File::HomeDir->users_documents('foo');
  
  Returns the directory path as a string, C<undef> if that user
  does not have a documents directory, or dies on error.
  
  =head2 users_data
  
    $data = File::HomeDir->users_data('foo');
  
  Returns the directory path as a string, C<undef> if that user
  does not have a data directory, or dies on error.
  
  =head1 FUNCTIONS
  
  =head2 home
  
    use File::HomeDir;
    $home = home();
    $home = home('foo');
    $home = File::HomeDir::home();
    $home = File::HomeDir::home('foo');
  
  The C<home> function is exported by default and is provided for
  compatibility with legacy applications. In new applications, you should
  use the newer method-based interface above.
  
  Returns the directory path to a named user's home/profile directory.
  
  If provided no param, returns the directory path to the current user's
  home/profile directory.
  
  =head1 TO DO
  
  =over 4
  
  =item * Add more granularity to Unix, and add support to VMS and other
  esoteric platforms, so we can consider going core.
  
  =item * Add consistent support for users_* methods 
  
  =back
  
  =head1 SUPPORT
  
  This module is stored in an Open Repository at the following address.
  
  L<http://svn.ali.as/cpan/trunk/File-HomeDir>
  
  Write access to the repository is made available automatically to any
  published CPAN author, and to most other volunteers on request.
  
  If you are able to submit your bug report in the form of new (failing)
  unit tests, or can apply your fix directly instead of submitting a patch,
  you are B<strongly> encouraged to do so as the author currently maintains
  over 100 modules and it can take some time to deal with non-Critical bug
  reports or patches.
  
  This will guarantee that your issue will be addressed in the next
  release of the module.
  
  If you cannot provide a direct test or fix, or don't have time to do so,
  then regular bug reports are still accepted and appreciated via the CPAN
  bug tracker.
  
  L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=File-HomeDir>
  
  For other issues, for commercial enhancement or support, or to have your
  write access enabled for the repository, contact the author at the email
  address above.
  
  =head1 ACKNOWLEDGEMENTS
  
  The biggest acknowledgement goes to Chris Nandor, who wielded his
  legendary Mac-fu and turned my initial fairly ordinary Darwin
  implementation into something that actually worked properly everywhere,
  and then donated a Mac OS X license to allow it to be maintained properly.
  
  =head1 AUTHORS
  
  Adam Kennedy E<lt>adamk@cpan.orgE<gt>
  
  Sean M. Burke E<lt>sburke@cpan.orgE<gt>
  
  Chris Nandor E<lt>cnandor@cpan.orgE<gt>
  
  Stephen Steneker E<lt>stennie@cpan.orgE<gt>
  
  =head1 SEE ALSO
  
  L<File::ShareDir>, L<File::HomeDir::Win32> (legacy)
  
  =head1 COPYRIGHT
  
  Copyright 2005 - 2012 Adam Kennedy.
  
  Some parts copyright 2000 Sean M. Burke.
  
  Some parts copyright 2006 Chris Nandor.
  
  Some parts copyright 2006 Stephen Steneker.
  
  Some parts copyright 2009-2011 Jérôme Quelin.
  
  This program is free software; you can redistribute
  it and/or modify it under the same terms as Perl itself.
  
  The full text of the license can be found in the
  LICENSE file included with this module.
  
  =cut
FILE_HOMEDIR

    $main::fatpacked{"File/HomeDir/Darwin.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_HOMEDIR_DARWIN';
  package File::HomeDir::Darwin;
  
  use 5.00503;
  use strict;
  use Cwd                 ();
  use Carp                ();
  use File::HomeDir::Unix ();
  
  use vars qw{$VERSION @ISA};
  BEGIN {
  	$VERSION = '1.00';
  	@ISA     = 'File::HomeDir::Unix';
  }
  
  
  
  
  
  #####################################################################
  # Current User Methods
  
  sub my_home {
  	my $class = shift;
  
  	if ( exists $ENV{HOME} and defined $ENV{HOME} ) {
  		return $ENV{HOME};
  	}
  
  	my $home = (getpwuid($<))[7];
  	return $home if $home && -d $home;
  
  	return undef;
  }
  
  sub _my_home {
  	my($class, $path) = @_;
  	my $home = $class->my_home;
  	return undef unless defined $home;
  
  	my $folder = "$home/$path";
  	unless ( -d $folder ) {
  		# Make sure that symlinks resolve to directories.
  		return undef unless -l $folder;
  		my $dir = readlink $folder or return;
  		return undef unless -d $dir;
  	}
  
  	return Cwd::abs_path($folder);
  }
  
  sub my_desktop {
  	my $class = shift;
  	$class->_my_home('Desktop');
  }
  
  sub my_documents {
  	my $class = shift;
  	$class->_my_home('Documents');
  }
  
  sub my_data {
  	my $class = shift;
  	$class->_my_home('Library/Application Support');
  }
  
  sub my_music {
  	my $class = shift;
  	$class->_my_home('Music');
  }
  
  sub my_pictures {
  	my $class = shift;
  	$class->_my_home('Pictures');
  }
  
  sub my_videos {
  	my $class = shift;
  	$class->_my_home('Movies');
  }
  
  
  
  
  
  #####################################################################
  # Arbitrary User Methods
  
  sub users_home {
  	my $class = shift;
  	my $home  = $class->SUPER::users_home(@_);
  	return defined $home ? Cwd::abs_path($home) : undef;
  }
  
  sub users_desktop {
  	my ($class, $name) = @_;
  	return undef if $name eq 'root';
  	$class->_to_user( $class->my_desktop, $name );
  }
  
  sub users_documents {
  	my ($class, $name) = @_;
  	return undef if $name eq 'root';
  	$class->_to_user( $class->my_documents, $name );
  }
  
  sub users_data {
  	my ($class, $name) = @_;
  	$class->_to_user( $class->my_data, $name )
  	||
  	$class->users_home($name);
  }
  
  # cheap hack ... not entirely reliable, perhaps, but ... c'est la vie, since
  # there's really no other good way to do it at this time, that i know of -- pudge
  sub _to_user {
  	my ($class, $path, $name) = @_;
  	my $my_home    = $class->my_home;
  	my $users_home = $class->users_home($name);
  	defined $users_home or return undef;
  	$path =~ s/^\Q$my_home/$users_home/;
  	return $path;
  }
  
  1;
  
  =pod
  
  =head1 NAME
  
  File::HomeDir::Darwin - Find your home and other directories on Darwin (OS X)
  
  =head1 DESCRIPTION
  
  This module provides Mac OS X specific file path for determining
  common user directories in pure perl, by just using C<$ENV{HOME}>
  without Carbon nor Cocoa API calls. In normal usage this module will
  always be used via L<File::HomeDir>.
  
  =head1 SYNOPSIS
  
    use File::HomeDir;
    
    # Find directories for the current user
    $home    = File::HomeDir->my_home;      # /Users/mylogin
    $desktop = File::HomeDir->my_desktop;   # /Users/mylogin/Desktop
    $docs    = File::HomeDir->my_documents; # /Users/mylogin/Documents
    $music   = File::HomeDir->my_music;     # /Users/mylogin/Music
    $pics    = File::HomeDir->my_pictures;  # /Users/mylogin/Pictures
    $videos  = File::HomeDir->my_videos;    # /Users/mylogin/Movies
    $data    = File::HomeDir->my_data;      # /Users/mylogin/Library/Application Support
  
  =cut
FILE_HOMEDIR_DARWIN

    $main::fatpacked{"File/HomeDir/Darwin/Carbon.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_HOMEDIR_DARWIN_CARBON';
  package File::HomeDir::Darwin::Carbon;
  
  # Basic implementation for the Dawin family of operating systems.
  # This includes (most prominently) Mac OS X.
  
  use 5.00503;
  use strict;
  use Cwd                   ();
  use Carp                  ();
  use File::HomeDir::Darwin ();
  
  use vars qw{$VERSION @ISA};
  BEGIN {
  	$VERSION = '1.00';
  
  	# This is only a child class of the pure Perl darwin
  	# class so that we can do homedir detection of all three
  	# drivers at one via ->isa.
  	@ISA = 'File::HomeDir::Darwin';
  
  	# Load early if in a forking environment and we have
  	# prefork, or at run-time if not.
  	local $@;
  	eval "use prefork 'Mac::Files'";
  }
  
  
  
  
  
  #####################################################################
  # Current User Methods
  
  sub my_home {
  	my $class = shift;
  
  	# A lot of unix people and unix-derived tools rely on
  	# the ability to overload HOME. We will support it too
  	# so that they can replace raw HOME calls with File::HomeDir.
  	if ( exists $ENV{HOME} and defined $ENV{HOME} ) {
  		return $ENV{HOME};
  	}
  
  	require Mac::Files;
  	$class->_find_folder(
  		Mac::Files::kCurrentUserFolderType(),
  	);
  }
  
  sub my_desktop {
  	my $class = shift;
  
  	require Mac::Files;
  	$class->_find_folder(
  		Mac::Files::kDesktopFolderType(),
  	);
  }
  
  sub my_documents {
  	my $class = shift;
  
  	require Mac::Files;
  	$class->_find_folder(
  		Mac::Files::kDocumentsFolderType(),
  	);
  }
  
  sub my_data {
  	my $class = shift;
  
  	require Mac::Files;
  	$class->_find_folder(
  		Mac::Files::kApplicationSupportFolderType(),
  	);
  }
  
  sub my_music {
  	my $class = shift;
  
  	require Mac::Files;
  	$class->_find_folder(
  		Mac::Files::kMusicDocumentsFolderType(),
  	);
  }
  
  sub my_pictures {
  	my $class = shift;
  
  	require Mac::Files;
  	$class->_find_folder(
  		Mac::Files::kPictureDocumentsFolderType(),
  	);
  }
  
  sub my_videos {
  	my $class = shift;
  
  	require Mac::Files;
  	$class->_find_folder(
  		Mac::Files::kMovieDocumentsFolderType(),
  	);
  }
  
  sub _find_folder {
  	my $class = shift;
  	my $name  = shift;
  
  	require Mac::Files;
  	my $folder = Mac::Files::FindFolder(
  		Mac::Files::kUserDomain(),
  		$name,
  	);
  	return undef unless defined $folder;
  
  	unless ( -d $folder ) {
  		# Make sure that symlinks resolve to directories.
  		return undef unless -l $folder;
  		my $dir = readlink $folder or return;
  		return undef unless -d $dir;
  	}
  
  	return Cwd::abs_path($folder);
  }
  
  
  
  
  
  #####################################################################
  # Arbitrary User Methods
  
  sub users_home {
  	my $class = shift;
  	my $home  = $class->SUPER::users_home(@_);
  	return defined $home ? Cwd::abs_path($home) : undef;
  }
  
  # in theory this can be done, but for now, let's cheat, since the
  # rest is Hard
  sub users_desktop {
  	my ($class, $name) = @_;
  	return undef if $name eq 'root';
  	$class->_to_user( $class->my_desktop, $name );
  }
  
  sub users_documents {
  	my ($class, $name) = @_;
  	return undef if $name eq 'root';
  	$class->_to_user( $class->my_documents, $name );
  }
  
  sub users_data {
  	my ($class, $name) = @_;
  	$class->_to_user( $class->my_data, $name )
  	||
  	$class->users_home($name);
  }
  
  # cheap hack ... not entirely reliable, perhaps, but ... c'est la vie, since
  # there's really no other good way to do it at this time, that i know of -- pudge
  sub _to_user {
  	my ($class, $path, $name) = @_;
  	my $my_home    = $class->my_home;
  	my $users_home = $class->users_home($name);
  	defined $users_home or return undef;
  	$path =~ s/^\Q$my_home/$users_home/;
  	return $path;
  }
  
  1;
  
  =pod
  
  =head1 NAME
  
  File::HomeDir::Darwin - Find your home and other directories on Darwin (OS X)
  
  =head1 DESCRIPTION
  
  This module provides Darwin-specific implementations for determining
  common user directories.  In normal usage this module will always be
  used via L<File::HomeDir>.
  
  Note -- since this module requires Mac::Carbon and Mac::Carbon does
  not work with 64-bit perls, on such systems, File::HomeDir will try
  L<File::HomeDir::Darwin::Cocoa> and then fall back to the (pure Perl)
  L<File::HomeDir::Darwin>.
  
  =head1 SYNOPSIS
  
    use File::HomeDir;
  
    # Find directories for the current user
    $home    = File::HomeDir->my_home;      # /Users/mylogin
    $desktop = File::HomeDir->my_desktop;   # /Users/mylogin/Desktop
    $docs    = File::HomeDir->my_documents; # /Users/mylogin/Documents
    $music   = File::HomeDir->my_music;     # /Users/mylogin/Music
    $pics    = File::HomeDir->my_pictures;  # /Users/mylogin/Pictures
    $videos  = File::HomeDir->my_videos;    # /Users/mylogin/Movies
    $data    = File::HomeDir->my_data;      # /Users/mylogin/Library/Application Support
  
  =head1 TODO
  
  =over 4
  
  =item * Test with Mac OS (versions 7, 8, 9)
  
  =item * Some better way for users_* ?
  
  =back
FILE_HOMEDIR_DARWIN_CARBON

    $main::fatpacked{"File/HomeDir/Darwin/Cocoa.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_HOMEDIR_DARWIN_COCOA';
  package File::HomeDir::Darwin::Cocoa;
  
  use 5.00503;
  use strict;
  use Cwd                   ();
  use Carp                  ();
  use File::HomeDir::Darwin ();
  
  use vars qw{$VERSION @ISA};
  BEGIN {
  	$VERSION = '1.00';
  	@ISA     = 'File::HomeDir::Darwin';
  
  	# Load early if in a forking environment and we have
  	# prefork, or at run-time if not.
  	local $@;
  	eval "use prefork 'Mac::SystemDirectory'";
  }
  
  
  
  
  
  #####################################################################
  # Current User Methods
  
  sub my_home {
  	my $class = shift;
  
  	# A lot of unix people and unix-derived tools rely on
  	# the ability to overload HOME. We will support it too
  	# so that they can replace raw HOME calls with File::HomeDir.
  	if ( exists $ENV{HOME} and defined $ENV{HOME} ) {
  		return $ENV{HOME};
  	}
  
  	require Mac::SystemDirectory;
  	return Mac::SystemDirectory::HomeDirectory();
  }
  
  # from 10.4
  sub my_desktop {
  	my $class = shift;
  
  	require Mac::SystemDirectory;
  	eval {
  		$class->_find_folder(Mac::SystemDirectory::NSDesktopDirectory())
  	}
  	||
  	$class->SUPER::my_desktop;
  }
  
  # from 10.2
  sub my_documents {
  	my $class = shift;
  
  	require Mac::SystemDirectory;
  	eval {
  		$class->_find_folder(Mac::SystemDirectory::NSDocumentDirectory())
  	}
  	||
  	$class->SUPER::my_documents;
  }
  
  # from 10.4
  sub my_data {
  	my $class = shift;
  
  	require Mac::SystemDirectory;
  	eval {
  		$class->_find_folder(Mac::SystemDirectory::NSApplicationSupportDirectory())
  	}
  	||
  	$class->SUPER::my_data;
  }
  
  # from 10.6
  sub my_music {
  	my $class = shift;
  
  	require Mac::SystemDirectory;
  	eval {
  		$class->_find_folder(Mac::SystemDirectory::NSMusicDirectory())
  	}
  	||
  	$class->SUPER::my_music;
  }
  
  # from 10.6
  sub my_pictures {
  	my $class = shift;
  
  	require Mac::SystemDirectory;
  	eval {
  		$class->_find_folder(Mac::SystemDirectory::NSPicturesDirectory())
  	}
  	||
  	$class->SUPER::my_pictures;
  }
  
  # from 10.6
  sub my_videos {
  	my $class = shift;
  
  	require Mac::SystemDirectory;
  	eval {
  		$class->_find_folder(Mac::SystemDirectory::NSMoviesDirectory())
  	}
  	||
  	$class->SUPER::my_videos;
  }
  
  sub _find_folder {
  	my $class = shift;
  	my $name  = shift;
  
  	require Mac::SystemDirectory;
  	my $folder = Mac::SystemDirectory::FindDirectory($name);
  	return undef unless defined $folder;
  
  	unless ( -d $folder ) {
  		# Make sure that symlinks resolve to directories.
  		return undef unless -l $folder;
  		my $dir = readlink $folder or return;
  		return undef unless -d $dir;
  	}
  
  	return Cwd::abs_path($folder);
  }
  
  1;
  
  =pod
  
  =head1 NAME
  
  File::HomeDir::Darwin::Cocoa - Find your home and other directories on Darwin (OS X)
  
  =head1 DESCRIPTION
  
  This module provides Darwin-specific implementations for determining
  common user directories using Cocoa API through
  L<Mac::SystemDirectory>.  In normal usage this module will always be
  used via L<File::HomeDir>.
  
  Theoretically, this should return the same paths as both of the other
  Darwin drivers.
  
  Because this module requires L<Mac::SystemDirectory>, if the module
  is not installed, L<File::HomeDir> will fall back to L<File::HomeDir::Darwin>.
  
  =head1 SYNOPSIS
  
    use File::HomeDir;
    
    # Find directories for the current user
    $home    = File::HomeDir->my_home;      # /Users/mylogin
    $desktop = File::HomeDir->my_desktop;   # /Users/mylogin/Desktop
    $docs    = File::HomeDir->my_documents; # /Users/mylogin/Documents
    $music   = File::HomeDir->my_music;     # /Users/mylogin/Music
    $pics    = File::HomeDir->my_pictures;  # /Users/mylogin/Pictures
    $videos  = File::HomeDir->my_videos;    # /Users/mylogin/Movies
    $data    = File::HomeDir->my_data;      # /Users/mylogin/Library/Application Support
  
  =cut
FILE_HOMEDIR_DARWIN_COCOA

    $main::fatpacked{"File/HomeDir/Driver.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_HOMEDIR_DRIVER';
  package File::HomeDir::Driver;
  
  # Abstract base class that provides no functionality,
  # but confirms the class is a File::HomeDir driver class.
  
  use 5.00503;
  use strict;
  use Carp ();
  
  use vars qw{$VERSION};
  BEGIN {
  	$VERSION = '1.00';
  }
  
  sub my_home {
  	Carp::croak("$_[0] does not implement compulsory method $_[1]");
  }
  
  1;
  
  =pod
  
  =head1 NAME
  
  File::HomeDir::Driver - Base class for all File::HomeDir drivers
  
  =head1 DESCRIPTION
  
  This module is the base class for all L<File::HomeDir> drivers, and must
  be inherited from to identify a class as a driver.
  
  It is primarily provided as a convenience for this specific identification
  purpose, as L<File::HomeDir> supports the specification of custom drivers
  and an C<-E<gt>isa> check is used during the loading of the driver.
  
  =head1 AUTHOR
  
  Adam Kennedy E<lt>adamk@cpan.orgE<gt>
  
  =head1 SEE ALSO
  
  L<File::HomeDir>
  
  =head1 COPYRIGHT
  
  Copyright 2009 - 2011 Adam Kennedy.
  
  This program is free software; you can redistribute
  it and/or modify it under the same terms as Perl itself.
  
  The full text of the license can be found in the
  LICENSE file included with this module.
  
  =cut
FILE_HOMEDIR_DRIVER

    $main::fatpacked{"File/HomeDir/FreeDesktop.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_HOMEDIR_FREEDESKTOP';
  package File::HomeDir::FreeDesktop;
  
  # Specific functionality for unixes running free desktops
  # compatible with (but not using) File-BaseDir-0.03
  
  # See POD at the end of the file for more documentation.
  
  use 5.00503;
  use strict;
  use Carp                ();
  use File::Spec          ();
  use File::Which         ();
  use File::HomeDir::Unix ();
  
  use vars qw{$VERSION @ISA};
  BEGIN {
  	$VERSION = '1.00';
  	@ISA     = 'File::HomeDir::Unix';
  }
  
  # xdg uses $ENV{XDG_CONFIG_HOME}/user-dirs.dirs to know where are the
  # various "my xxx" directories. That is a shell file. The official API
  # is the xdg-user-dir executable. It has no provision for assessing
  # the directories of a user that is different than the one we are
  # running under; the standard substitute user mechanisms are needed to
  # overcome this.
  
  my $xdgprog = File::Which::which('xdg-user-dir');
  
  sub _my {
  	# No quoting because input is hard-coded and only comes from this module
  	my $thingy = qx($xdgprog $_[1]);
  	chomp $thingy;
  	return $thingy;
  }
  
  # Simple stuff
  sub my_desktop   { shift->_my('DESKTOP')   }
  sub my_documents { shift->_my('DOCUMENTS') }
  sub my_music     { shift->_my('MUSIC')     }
  sub my_pictures  { shift->_my('PICTURES')  }
  sub my_videos    { shift->_my('VIDEOS')    }
  
  sub my_data {
  	$ENV{XDG_DATA_HOME}
  	or
  	File::Spec->catdir(
  		shift->my_home,
  		qw{ .local share }
  	);
  }
  
  sub my_config {
  	$ENV{XDG_CONFIG_HOME}
  	or
  	File::Spec->catdir(
  		shift->my_home,
  		qw{ .config }
  	);
  }
  
  # Custom locations (currently undocumented)
  sub my_download    { shift->_my('DOWNLOAD')    }
  sub my_publicshare { shift->_my('PUBLICSHARE') }
  sub my_templates   { shift->_my('TEMPLATES')   }
  
  sub my_cache {
      $ENV{XDG_CACHE_HOME}
      ||
      File::Spec->catdir(shift->my_home, qw{ .cache });
  }
  
  
  
  
  
  #####################################################################
  # General User Methods
  
  sub users_desktop   { Carp::croak('The users_desktop method is not available on an XDG based system.');   }
  sub users_documents { Carp::croak('The users_documents method is not available on an XDG based system.'); }
  sub users_music     { Carp::croak('The users_music method is not available on an XDG based system.');     }
  sub users_pictures  { Carp::croak('The users_pictures method is not available on an XDG based system.');  }
  sub users_videos    { Carp::croak('The users_videos method is not available on an XDG based system.');    }
  sub users_data      { Carp::croak('The users_data method is not available on an XDG based system.');      }
  
  1;
  
  =pod
  
  =head1 NAME
  
  File::HomeDir::FreeDesktop - Find your home and other directories on FreeDesktop.org Unix
  
  =head1 DESCRIPTION
  
  This module provides implementations for determining common user
  directories.  In normal usage this module will always be
  used via L<File::HomeDir>.
  
  =head1 SYNOPSIS
  
    use File::HomeDir;
    
    # Find directories for the current user
    $home    = File::HomeDir->my_home;        # /home/mylogin
    $desktop = File::HomeDir->my_desktop;
    $docs    = File::HomeDir->my_documents;
    $music   = File::HomeDir->my_music;
    $pics    = File::HomeDir->my_pictures;
    $videos  = File::HomeDir->my_videos;
    $data    = File::HomeDir->my_data;
  
  =head1 AUTHORS
  
  Jerome Quelin E<lt>jquellin@cpan.org<gt>
  
  Adam Kennedy E<lt>adamk@cpan.orgE<gt>
  
  =head1 SEE ALSO
  
  L<File::HomeDir>, L<File::HomeDir::Win32> (legacy)
  
  =head1 COPYRIGHT
  
  Copyright 2009 - 2011 Jerome Quelin.
  
  Some parts copyright 2010 Adam Kennedy.
  
  This program is free software; you can redistribute
  it and/or modify it under the same terms as Perl itself.
  
  The full text of the license can be found in the
  LICENSE file included with this module.
  
  =cut
FILE_HOMEDIR_FREEDESKTOP

    $main::fatpacked{"File/HomeDir/MacOS9.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_HOMEDIR_MACOS9';
  package File::HomeDir::MacOS9;
  
  # Half-assed implementation for the legacy Mac OS9 operating system.
  # Provided mainly to provide legacy compatibility. May be removed at
  # a later date.
  
  use 5.00503;
  use strict;
  use Carp                  ();
  use File::HomeDir::Driver ();
  
  use vars qw{$VERSION @ISA};
  BEGIN {
  	$VERSION = '1.00';
  	@ISA     = 'File::HomeDir::Driver';
  }
  
  # Load early if in a forking environment and we have
  # prefork, or at run-time if not.
  SCOPE: {
  	local $@;
  	eval "use prefork 'Mac::Files'";
  }
  
  
  
  
  
  #####################################################################
  # Current User Methods
  
  sub my_home {
  	my $class = shift;
  
  	# Try for $ENV{HOME} if we have it
  	if ( defined $ENV{HOME} ) {
  		return $ENV{HOME};
  	}
  
  	### DESPERATION SETS IN
  
  	# We could use the desktop
  	SCOPE: {
  		local $@;
  		eval {
  			my $home = $class->my_desktop;
  			return $home if $home and -d $home;
  		};
  	}
  
  	# Desperation on any platform
  	SCOPE: {
  		# On some platforms getpwuid dies if called at all
  		local $SIG{'__DIE__'} = '';
  		my $home = (getpwuid($<))[7];
  		return $home if $home and -d $home;
  	}
  
  	Carp::croak("Could not locate current user's home directory");
  }
  
  sub my_desktop {
  	my $class = shift;
  
  	# Find the desktop via Mac::Files
  	local $SIG{'__DIE__'} = '';
  	require Mac::Files;
  	my $home = Mac::Files::FindFolder(
  		Mac::Files::kOnSystemDisk(),
  		Mac::Files::kDesktopFolderType(),
  		);
  	return $home if $home and -d $home;
  
  	Carp::croak("Could not locate current user's desktop");
  }
  
  
  
  
  
  #####################################################################
  # General User Methods
  
  sub users_home {
  	my ($class, $name) = @_;
  
  	SCOPE: {
  		# On some platforms getpwnam dies if called at all
  		local $SIG{'__DIE__'} = '';
  		my $home = (getpwnam($name))[7];
  		return $home if defined $home and -d $home;
  	}
  
  	Carp::croak("Failed to find home directory for user '$name'");
  }
  
  1;
  
  =pod
  
  =head1 NAME
  
  File::HomeDir::MacOS9 - Find your home and other directories on legacy Macs
  
  =head1 SYNOPSIS
  
    use File::HomeDir;
    
    # Find directories for the current user
    $home    = File::HomeDir->my_home;
    $desktop = File::HomeDir->my_desktop;
  
  =head1 DESCRIPTION
  
  This module provides implementations for determining common user
  directories on legacy Mac hosts. In normal usage this module will always be
  used via L<File::HomeDir>.
  
  This module is no longer actively maintained, and is included only for
  extreme back-compatibility.
  
  Only the C<my_home> and C<my_desktop> methods are supported.
  
  =head1 SUPPORT
  
  See the support section the main L<File::HomeDir> module.
  
  =head1 AUTHORS
  
  Adam Kennedy E<lt>adamk@cpan.orgE<gt>
  
  Sean M. Burke E<lt>sburke@cpan.orgE<gt>
  
  =head1 SEE ALSO
  
  L<File::HomeDir>
  
  =head1 COPYRIGHT
  
  Copyright 2005 - 2011 Adam Kennedy.
  
  Some parts copyright 2000 Sean M. Burke.
  
  This program is free software; you can redistribute
  it and/or modify it under the same terms as Perl itself.
  
  The full text of the license can be found in the
  LICENSE file included with this module.
  
  =cut
FILE_HOMEDIR_MACOS9

    $main::fatpacked{"File/HomeDir/Test.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_HOMEDIR_TEST';
  package File::HomeDir::Test;
  
  use 5.00503;
  use strict;
  use Carp                  ();
  use File::Spec            ();
  use File::Temp            ();
  use File::HomeDir::Driver ();
  
  use vars qw{$VERSION @ISA %DIR $ENABLED};
  BEGIN {
  	$VERSION = '1.00';
  	@ISA     = 'File::HomeDir::Driver';
  	%DIR     = ();
  	$ENABLED = 0;
  }
  
  # Special magic use in test scripts
  sub import {
  	my $class = shift;
  	die "Attempted to initialise File::HomeDir::Test trice" if %DIR;
  
  	# Fill the test directories
  	my $BASE  = File::Temp::tempdir( CLEANUP => 1 );
  	%DIR = map { $_ => File::Spec->catdir( $BASE, $_ ) } qw{
  		my_home
  		my_desktop
  		my_documents
  		my_data
  		my_music
  		my_pictures
  		my_videos
  	};
  
  	# Hijack HOME to the home directory
  	$ENV{HOME} = $DIR{my_home};
  
  	# Make File::HomeDir load us instead of the native driver
  	$File::HomeDir::IMPLEMENTED_BY = # Prevent a warning
  	$File::HomeDir::IMPLEMENTED_BY = 'File::HomeDir::Test';
  
  	# Ready to go
  	$ENABLED = 1;
  }
  
  
  
  
  
  #####################################################################
  # Current User Methods
  
  sub my_home {
  	mkdir($DIR{my_home}, 0755) unless -d $DIR{my_home};
  	return $DIR{my_home};
  }
  
  sub my_desktop {
  	mkdir($DIR{my_desktop}, 0755) unless -d $DIR{my_desktop};
  	return $DIR{my_desktop};
  }
  
  sub my_documents {
  	mkdir($DIR{my_documents}, 0755) unless -f $DIR{my_documents};
  	return $DIR{my_documents};
  }
  
  sub my_data {
  	mkdir($DIR{my_data}, 0755) unless -d $DIR{my_data};
  	return $DIR{my_data};
  }
  
  sub my_music {
  	mkdir($DIR{my_music}, 0755) unless -d $DIR{my_music};
  	return $DIR{my_music};
  }
  
  sub my_pictures {
  	mkdir($DIR{my_pictures}, 0755) unless -d $DIR{my_pictures};
  	return $DIR{my_pictures};
  }
  
  sub my_videos {
  	mkdir($DIR{my_videos}, 0755) unless -d $DIR{my_videos};
  	return $DIR{my_videos};
  }
  
  sub users_home {
  	return undef;
  }
  
  1;
  
  __END__
  
  =pod
  
  =head1 NAME
  
  File::HomeDir::Test - Prevent the accidental creation of user-owned files during testing
  
  =head1 SYNOPSIS
  
    use Test::More test => 1;
    use File::HomeDir::Test;
    use File::HomeDir;
  
  =head1 DESCRIPTION
  
  B<File::HomeDir::Test> is a L<File::HomeDir> driver intended for use in the test scripts
  of modules or applications that write files into user-owned directories.
  
  It is designed to prevent the pollution of user directories with files that are not part
  of the application install itself, but were created during testing. These files can leak
  state information from the tests into the run-time usage of an application, and on Unix
  systems also prevents tests (which may be executed as root via sudo) from writing files
  which cannot later be modified or removed by the regular user.
  
  =head1 SUPPORT
  
  See the support section of the main L<File::HomeDir> documentation.
  
  =head1 AUTHOR
  
  Adam Kennedy E<lt>adamk@cpan.orgE<gt>
  
  =head1 COPYRIGHT
  
  Copyright 2005 - 2011 Adam Kennedy.
  
  This program is free software; you can redistribute
  it and/or modify it under the same terms as Perl itself.
  
  The full text of the license can be found in the
  LICENSE file included with this module.
  
  =cut
FILE_HOMEDIR_TEST

    $main::fatpacked{"File/HomeDir/Unix.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_HOMEDIR_UNIX';
  package File::HomeDir::Unix;
  
  # See POD at the end of the file for documentation
  
  use 5.00503;
  use strict;
  use Carp                  ();
  use File::HomeDir::Driver ();
  
  use vars qw{$VERSION @ISA};
  BEGIN {
  	$VERSION = '1.00';
  	@ISA     = 'File::HomeDir::Driver';
  }
  
  
  
  
  
  #####################################################################
  # Current User Methods
  
  sub my_home {
  	my $class = shift;
  	my $home  = $class->_my_home(@_);
  
  	# On Unix in general, a non-existant home means "no home"
  	# For example, "nobody"-like users might use /nonexistant
  	if ( defined $home and ! -d $home ) {
  		$home = undef;
  	}
  
  	return $home;
  }
  
  sub _my_home {
  	my $class = shift;
  	if ( exists $ENV{HOME} and defined $ENV{HOME} ) {
  		return $ENV{HOME};
  	}
  
  	# This is from the original code, but I'm guessing
  	# it means "login directory" and exists on some Unixes.
  	if ( exists $ENV{LOGDIR} and $ENV{LOGDIR} ) {
  		return $ENV{LOGDIR};
  	}
  
  	### More-desperate methods
  
  	# Light desperation on any (Unixish) platform
  	SCOPE: {
  		my $home = (getpwuid($<))[7];
  		return $home if $home and -d $home;
  	}
  
  	return undef;
  }
  
  # On unix by default, everything is under the same folder
  sub my_desktop {
  	shift->my_home;
  }
  
  sub my_documents {
  	shift->my_home;
  }
  
  sub my_data {
  	shift->my_home;
  }
  
  sub my_music {
  	shift->my_home;
  }
  
  sub my_pictures {
  	shift->my_home;
  }
  
  sub my_videos {
  	shift->my_home;
  }
  
  
  
  
  
  #####################################################################
  # General User Methods
  
  sub users_home {
  	my ($class, $name) = @_;
  
  	# IF and only if we have getpwuid support, and the
  	# name of the user is our own, shortcut to my_home.
  	# This is needed to handle HOME environment settings.
  	if ( $name eq getpwuid($<) ) {
  		return $class->my_home;
  	}
  
  	SCOPE: {
  		my $home = (getpwnam($name))[7];
  		return $home if $home and -d $home;
  	}
  
  	return undef;
  }
  
  sub users_desktop {
  	shift->users_home(@_);
  }
  
  sub users_documents {
  	shift->users_home(@_);
  }
  
  sub users_data {
  	shift->users_home(@_);
  }
  
  sub users_music {
  	shift->users_home(@_);
  }
  
  sub users_pictures {
  	shift->users_home(@_);
  }
  
  sub users_videos {
  	shift->users_home(@_);
  }
  
  1;
  
  =pod
  
  =head1 NAME
  
  File::HomeDir::Unix - Find your home and other directories on legacy Unix
  
  =head1 SYNOPSIS
  
    use File::HomeDir;
    
    # Find directories for the current user
    $home    = File::HomeDir->my_home;        # /home/mylogin
    $desktop = File::HomeDir->my_desktop;     # All of these will... 
    $docs    = File::HomeDir->my_documents;   # ...default to home...
    $music   = File::HomeDir->my_music;       # ...directory
    $pics    = File::HomeDir->my_pictures;    #
    $videos  = File::HomeDir->my_videos;      #
    $data    = File::HomeDir->my_data;        # 
  
  =head1 DESCRIPTION
  
  This module provides implementations for determining common user
  directories.  In normal usage this module will always be
  used via L<File::HomeDir>.
  
  =head1 SUPPORT
  
  See the support section the main L<File::HomeDir> module.
  
  =head1 AUTHORS
  
  Adam Kennedy E<lt>adamk@cpan.orgE<gt>
  
  Sean M. Burke E<lt>sburke@cpan.orgE<gt>
  
  =head1 SEE ALSO
  
  L<File::HomeDir>, L<File::HomeDir::Win32> (legacy)
  
  =head1 COPYRIGHT
  
  Copyright 2005 - 2011 Adam Kennedy.
  
  Some parts copyright 2000 Sean M. Burke.
  
  This program is free software; you can redistribute
  it and/or modify it under the same terms as Perl itself.
  
  The full text of the license can be found in the
  LICENSE file included with this module.
  
  =cut
FILE_HOMEDIR_UNIX

    $main::fatpacked{"File/HomeDir/Windows.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_HOMEDIR_WINDOWS';
  package File::HomeDir::Windows;
  
  # See POD at the end of the file for documentation
  
  use 5.00503;
  use strict;
  use Carp                  ();
  use File::Spec            ();
  use File::HomeDir::Driver ();
  
  use vars qw{$VERSION @ISA};
  BEGIN {
  	$VERSION = '1.00';
  	@ISA     = 'File::HomeDir::Driver';
  }
  
  sub CREATE () { 1 }
  
  
  
  
  
  #####################################################################
  # Current User Methods
  
  sub my_home {
  	my $class = shift;
  
  	# A lot of unix people and unix-derived tools rely on
  	# the ability to overload HOME. We will support it too
  	# so that they can replace raw HOME calls with File::HomeDir.
  	if ( exists $ENV{HOME} and $ENV{HOME} ) {
  		return $ENV{HOME};
  	}
  
  	# Do we have a user profile?
  	if ( exists $ENV{USERPROFILE} and $ENV{USERPROFILE} ) {
  		return $ENV{USERPROFILE};
  	}
  
  	# Some Windows use something like $ENV{HOME}
  	if ( exists $ENV{HOMEDRIVE} and exists $ENV{HOMEPATH} and $ENV{HOMEDRIVE} and $ENV{HOMEPATH} ) {
  		return File::Spec->catpath(
  			$ENV{HOMEDRIVE}, $ENV{HOMEPATH}, '',
  		);
  	}
  
  	return undef;
  }
  
  sub my_desktop {
  	my $class = shift;
  
  	# The most correct way to find the desktop
  	SCOPE: {
  		require Win32;
  		my $dir = Win32::GetFolderPath(Win32::CSIDL_DESKTOP(), CREATE);
  		return $dir if $dir and $class->_d($dir);
  	}
  
  	# MSWindows sets WINDIR, MS WinNT sets USERPROFILE.
  	foreach my $e ( 'USERPROFILE', 'WINDIR' ) {
  		next unless $ENV{$e};
  		my $desktop = File::Spec->catdir($ENV{$e}, 'Desktop');
  		return $desktop if $desktop and $class->_d($desktop);
  	}
  
  	# As a last resort, try some hard-wired values
  	foreach my $fixed (
  		# The reason there are both types of slash here is because
  		# this set of paths has been kept from thethe original version
  		# of File::HomeDir::Win32 (before it was rewritten).
  		# I can only assume this is Cygwin-related stuff.
  		"C:\\windows\\desktop",
  		"C:\\win95\\desktop",
  		"C:/win95/desktop",
  		"C:/windows/desktop",
  	) {
  		return $fixed if $class->_d($fixed);
  	}
  
  	return undef;
  }
  
  sub my_documents {
  	my $class = shift;
  
  	# The most correct way to find my documents
  	SCOPE: {
  		require Win32;
  		my $dir = Win32::GetFolderPath(Win32::CSIDL_PERSONAL(), CREATE);
  		return $dir if $dir and $class->_d($dir);
  	}
  
  	return undef;
  }
  
  sub my_data {
  	my $class = shift;
  
  	# The most correct way to find my documents
  	SCOPE: {
  		require Win32;
  		my $dir = Win32::GetFolderPath(Win32::CSIDL_LOCAL_APPDATA(), CREATE);
  		return $dir if $dir and $class->_d($dir);
  	}
  
  	return undef;
  }
  
  sub my_music {
  	my $class = shift;
  
  	# The most correct way to find my music
  	SCOPE: {
  		require Win32;
  		my $dir = Win32::GetFolderPath(Win32::CSIDL_MYMUSIC(), CREATE);
  		return $dir if $dir and $class->_d($dir);
  	}
  
  	return undef;
  }
  
  sub my_pictures {
  	my $class = shift;
  
  	# The most correct way to find my pictures
  	SCOPE: {
  		require Win32;
  		my $dir = Win32::GetFolderPath(Win32::CSIDL_MYPICTURES(), CREATE);
  		return $dir if $dir and $class->_d($dir);
  	}
  
  	return undef;
  }
  
  sub my_videos {
  	my $class = shift;
  
  	# The most correct way to find my videos
  	SCOPE: {
  		require Win32;
  		my $dir = Win32::GetFolderPath(Win32::CSIDL_MYVIDEO(), CREATE);
  		return $dir if $dir and $class->_d($dir);
  	}
  
  	return undef;
  }
  
  # Special case version of -d
  sub _d {
  	my $self = shift;
  	my $path = shift;
  
  	# Window can legally return a UNC path from GetFolderPath.
  	# Not only is the meaning of -d complicated in this situation,
  	# but even on a local network calling -d "\\\\cifs\\path" can
  	# take several seconds. UNC can also do even weirder things,
  	# like launching processes and such.
  	# To avoid various crazy bugs caused by this, we do NOT attempt
  	# to validate UNC paths at all so that the code that is calling
  	# us has an opportunity to take special actions without our 
  	# blundering getting in the way.
  	if ( $path =~ /\\\\/ ) {
  		return 1;
  	}
  
  	# Otherwise do a stat as normal
  	return -d $path;
  }
  
  1;
  
  =pod
  
  =head1 NAME
  
  File::HomeDir::Windows - Find your home and other directories on Windows
  
  =head1 SYNOPSIS
  
    use File::HomeDir;
    
    # Find directories for the current user (eg. using Windows XP Professional)
    $home    = File::HomeDir->my_home;        # C:\Documents and Settings\mylogin
    $desktop = File::HomeDir->my_desktop;     # C:\Documents and Settings\mylogin\Desktop
    $docs    = File::HomeDir->my_documents;   # C:\Documents and Settings\mylogin\My Documents
    $music   = File::HomeDir->my_music;       # C:\Documents and Settings\mylogin\My Documents\My Music
    $pics    = File::HomeDir->my_pictures;    # C:\Documents and Settings\mylogin\My Documents\My Pictures
    $videos  = File::HomeDir->my_videos;      # C:\Documents and Settings\mylogin\My Documents\My Video
    $data    = File::HomeDir->my_data;        # C:\Documents and Settings\mylogin\Local Settings\Application Data
  
  =head1 DESCRIPTION
  
  This module provides Windows-specific implementations for determining
  common user directories.  In normal usage this module will always be
  used via L<File::HomeDir>.
  
  Internally this module will use L<Win32>::GetFolderPath to fetch the location
  of your directories. As a result of this, in certain unusual situations
  (usually found inside large organisations) the methods may return UNC paths
  such as C<\\cifs.local\home$>.
  
  If your application runs on Windows and you want to have it work comprehensively
  everywhere, you may need to implement your own handling for these paths as they
  can cause strange behaviour.
  
  For example, stat calls to UNC paths may work but block for several seconds, but
  opendir() may not be able to read any files (creating the appearance of an existing
  but empty directory).
  
  To avoid complicating the problem any further, in the rare situation that a UNC path
  is returned by C<GetFolderPath> the usual -d validation checks will B<not> be done.
  
  =head1 SUPPORT
  
  See the support section the main L<File::HomeDir> module.
  
  =head1 AUTHORS
  
  Adam Kennedy E<lt>adamk@cpan.orgE<gt>
  
  Sean M. Burke E<lt>sburke@cpan.orgE<gt>
  
  =head1 SEE ALSO
  
  L<File::HomeDir>, L<File::HomeDir::Win32> (legacy)
  
  =head1 COPYRIGHT
  
  Copyright 2005 - 2011 Adam Kennedy.
  
  Some parts copyright 2000 Sean M. Burke.
  
  This program is free software; you can redistribute
  it and/or modify it under the same terms as Perl itself.
  
  The full text of the license can be found in the
  LICENSE file included with this module.
  
  =cut
FILE_HOMEDIR_WINDOWS

    $main::fatpacked{"File/Listing.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_LISTING';
  package File::Listing;
  
  sub Version { $VERSION; }
  $VERSION = "6.04";
  
  require Exporter;
  @ISA = qw(Exporter);
  @EXPORT = qw(parse_dir);
  
  use strict;
  
  use Carp ();
  use HTTP::Date qw(str2time);
  
  
  
  sub parse_dir ($;$$$)
  {
     my($dir, $tz, $fstype, $error) = @_;
  
     $fstype ||= 'unix';
     $fstype = "File::Listing::" . lc $fstype;
  
     my @args = $_[0];
     push(@args, $tz) if(@_ >= 2);
     push(@args, $error) if(@_ >= 4);
  
     $fstype->parse(@args);
  }
  
  
  sub line { Carp::croak("Not implemented yet"); }
  sub init { } # Dummy sub
  
  
  sub file_mode ($)
  {
      Carp::croak("Input to file_mode() must be a 10 character string.")
          unless length($_[0]) == 10;
  
      # This routine was originally borrowed from Graham Barr's
      # Net::FTP package.
  
      local $_ = shift;
      my $mode = 0;
      my($type);
  
      s/^(.)// and $type = $1;
  
      # When the set-group-ID bit (file mode bit 02000) is set, and the group
      # execution bit (file mode bit 00020) is unset, and it is a regular file,
      # some implementations of `ls' use the letter `S', others use `l' or `L'.
      # Convert this `S'.
  
      s/[Ll](...)$/S$1/;
  
      while (/(.)/g) {
  	$mode <<= 1;
  	$mode |= 1 if $1 ne "-" &&
  		      $1 ne 'S' &&
  		      $1 ne 'T';
      }
  
      $mode |= 0004000 if /^..s....../i;
      $mode |= 0002000 if /^.....s.../i;
      $mode |= 0001000 if /^........t/i;
  
      # De facto standard definitions. From 'stat.h' on Solaris 9.
  
      $type eq "p" and $mode |= 0010000 or        # fifo
      $type eq "c" and $mode |= 0020000 or        # character special
      $type eq "d" and $mode |= 0040000 or        # directory
      $type eq "b" and $mode |= 0060000 or        # block special
      $type eq "-" and $mode |= 0100000 or        # regular
      $type eq "l" and $mode |= 0120000 or        # symbolic link
      $type eq "s" and $mode |= 0140000 or        # socket
      $type eq "D" and $mode |= 0150000 or        # door
        Carp::croak("Unknown file type: $type");
  
      $mode;
  }
  
  
  sub parse
  {
     my($pkg, $dir, $tz, $error) = @_;
  
     # First let's try to determine what kind of dir parameter we have
     # received.  We allow both listings, reference to arrays and
     # file handles to read from.
  
     if (ref($dir) eq 'ARRAY') {
         # Already splitted up
     }
     elsif (ref($dir) eq 'GLOB') {
         # A file handle
     }
     elsif (ref($dir)) {
        Carp::croak("Illegal argument to parse_dir()");
     }
     elsif ($dir =~ /^\*\w+(::\w+)+$/) {
        # This scalar looks like a file handle, so we assume it is
     }
     else {
        # A normal scalar listing
        $dir = [ split(/\n/, $dir) ];
     }
  
     $pkg->init();
  
     my @files = ();
     if (ref($dir) eq 'ARRAY') {
         for (@$dir) {
  	   push(@files, $pkg->line($_, $tz, $error));
         }
     }
     else {
         local($_);
         while (<$dir>) {
  	   chomp;
  	   push(@files, $pkg->line($_, $tz, $error));
         }
     }
     wantarray ? @files : \@files;
  }
  
  
  
  package File::Listing::unix;
  
  use HTTP::Date qw(str2time);
  
  # A place to remember current directory from last line parsed.
  use vars qw($curdir @ISA);
  
  @ISA = qw(File::Listing);
  
  
  
  sub init
  {
      $curdir = '';
  }
  
  
  sub line
  {
      shift; # package name
      local($_) = shift;
      my($tz, $error) = @_;
  
      s/\015//g;
      #study;
  
      my ($kind, $size, $date, $name);
      if (($kind, $size, $date, $name) =
  	/^([\-FlrwxsStTdD]{10})                   # Type and permission bits
  	 .*                                       # Graps
  	 \D(\d+)                                  # File size
  	 \s+                                      # Some space
  	 (\w{3}\s+\d+\s+(?:\d{1,2}:\d{2}|\d{4})|\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2})  # Date
  	 \s+                                      # Some more space
  	 (.*)$                                    # File name
  	/x )
  
      {
  	return if $name eq '.' || $name eq '..';
  	$name = "$curdir/$name" if length $curdir;
  	my $type = '?';
  	if ($kind =~ /^l/ && $name =~ /(.*) -> (.*)/ ) {
  	    $name = $1;
  	    $type = "l $2";
  	}
  	elsif ($kind =~ /^[\-F]/) { # (hopefully) a regular file
  	    $type = 'f';
  	}
  	elsif ($kind =~ /^[dD]/) {
  	    $type = 'd';
  	    $size = undef;  # Don't believe the reported size
  	}
  	return [$name, $type, $size, str2time($date, $tz), 
                File::Listing::file_mode($kind)];
  
      }
      elsif (/^(.+):$/ && !/^[dcbsp].*\s.*\s.*:$/ ) {
  	my $dir = $1;
  	return () if $dir eq '.';
  	$curdir = $dir;
  	return ();
      }
      elsif (/^[Tt]otal\s+(\d+)$/ || /^\s*$/) {
  	return ();
      }
      elsif (/not found/    || # OSF1, HPUX, and SunOS return
               # "$file not found"
               /No such file/ || # IRIX returns
               # "UX:ls: ERROR: Cannot access $file: No such file or directory"
                                 # Solaris returns
               # "$file: No such file or directory"
               /cannot find/     # Windows NT returns
               # "The system cannot find the path specified."
               ) {
  	return () unless defined $error;
  	&$error($_) if ref($error) eq 'CODE';
  	warn "Error: $_\n" if $error eq 'warn';
  	return ();
      }
      elsif ($_ eq '') {       # AIX, and Linux return nothing
  	return () unless defined $error;
  	&$error("No such file or directory") if ref($error) eq 'CODE';
  	warn "Warning: No such file or directory\n" if $error eq 'warn';
  	return ();
      }
      else {
          # parse failed, check if the dosftp parse understands it
          File::Listing::dosftp->init();
          return(File::Listing::dosftp->line($_,$tz,$error));
      }
  
  }
  
  
  
  package File::Listing::dosftp;
  
  use HTTP::Date qw(str2time);
  
  # A place to remember current directory from last line parsed.
  use vars qw($curdir @ISA);
  
  @ISA = qw(File::Listing);
  
  
  
  sub init
  {
      $curdir = '';
  }
  
  
  sub line
  {
      shift; # package name
      local($_) = shift;
      my($tz, $error) = @_;
  
      s/\015//g;
  
      my ($date, $size_or_dir, $name, $size);
  
      # 02-05-96  10:48AM                 1415 src.slf
      # 09-10-96  09:18AM       <DIR>          sl_util
      if (($date, $size_or_dir, $name) =
          /^(\d\d-\d\d-\d\d\s+\d\d:\d\d\wM)         # Date and time info
           \s+                                      # Some space
           (<\w{3}>|\d+)                            # Dir or Size
           \s+                                      # Some more space
           (.+)$                                    # File name
          /x )
      {
  	return if $name eq '.' || $name eq '..';
  	$name = "$curdir/$name" if length $curdir;
  	my $type = '?';
  	if ($size_or_dir eq '<DIR>') {
  	    $type = "d";
              $size = ""; # directories have no size in the pc listing
          }
          else {
  	    $type = 'f';
              $size = $size_or_dir;
  	}
  	return [$name, $type, $size, str2time($date, $tz), undef];
      }
      else {
  	return () unless defined $error;
  	&$error($_) if ref($error) eq 'CODE';
  	warn "Can't parse: $_\n" if $error eq 'warn';
  	return ();
      }
  
  }
  
  
  
  package File::Listing::vms;
  @File::Listing::vms::ISA = qw(File::Listing);
  
  package File::Listing::netware;
  @File::Listing::netware::ISA = qw(File::Listing);
  
  
  
  package File::Listing::apache;
  
  use vars qw(@ISA);
  
  @ISA = qw(File::Listing);
  
  
  sub init { }
  
  
  sub line {
      shift; # package name
      local($_) = shift;
      my($tz, $error) = @_; # ignored for now...
  
      s!</?t[rd][^>]*>! !g;  # clean away various table stuff
      if (m!<A\s+HREF=\"([^\"]+)\">.*</A>.*?(\d+)-([a-zA-Z]+|\d+)-(\d+)\s+(\d+):(\d+)\s+(?:([\d\.]+[kMG]?|-))!i) {
  	my($filename, $filesize) = ($1, $7);
  	my($d,$m,$y, $H,$M) = ($2,$3,$4,$5,$6);
  	if ($m =~ /^\d+$/) {
  	    ($d,$y) = ($y,$d) # iso date
  	}
  	else {
  	    $m = _monthabbrev_number($m);
  	}
  
  	$filesize = 0 if $filesize eq '-';
  	if ($filesize =~ s/k$//i) {
  	    $filesize *= 1024;
  	}
  	elsif ($filesize =~ s/M$//) {
  	    $filesize *= 1024*1024;
  	}
  	elsif ($filesize =~ s/G$//) {
  	    $filesize *= 1024*1024*1024;
  	}
  	$filesize = int $filesize;
  
  	require Time::Local;
  	my $filetime = Time::Local::timelocal(0,$M,$H,$d,$m-1,_guess_year($y)-1900);
  	my $filetype = ($filename =~ s|/$|| ? "d" : "f");
  	return [$filename, $filetype, $filesize, $filetime, undef];
      }
  
      return ();
  }
  
  
  sub _guess_year {
      my $y = shift;
      if ($y >= 90) {
  	$y = 1900+$y;
      }
      elsif ($y < 100) {
  	$y = 2000+$y;
      }
      $y;
  }
  
  
  sub _monthabbrev_number {
      my $mon = shift;
      +{'Jan' => 1,
        'Feb' => 2,
        'Mar' => 3,
        'Apr' => 4,
        'May' => 5,
        'Jun' => 6,
        'Jul' => 7,
        'Aug' => 8,
        'Sep' => 9,
        'Oct' => 10,
        'Nov' => 11,
        'Dec' => 12,
       }->{$mon};
  }
  
  
  1;
  
  __END__
  
  =head1 NAME
  
  File::Listing - parse directory listing
  
  =head1 SYNOPSIS
  
   use File::Listing qw(parse_dir);
   $ENV{LANG} = "C";  # dates in non-English locales not supported
   for (parse_dir(`ls -l`)) {
       ($name, $type, $size, $mtime, $mode) = @$_;
       next if $type ne 'f'; # plain file
       #...
   }
  
   # directory listing can also be read from a file
   open(LISTING, "zcat ls-lR.gz|");
   $dir = parse_dir(\*LISTING, '+0000');
  
  =head1 DESCRIPTION
  
  This module exports a single function called parse_dir(), which can be
  used to parse directory listings.
  
  The first parameter to parse_dir() is the directory listing to parse.
  It can be a scalar, a reference to an array of directory lines or a
  glob representing a filehandle to read the directory listing from.
  
  The second parameter is the time zone to use when parsing time stamps
  in the listing. If this value is undefined, then the local time zone is
  assumed.
  
  The third parameter is the type of listing to assume.  Currently
  supported formats are 'unix', 'apache' and 'dosftp'.  The default
  value is 'unix'.  Ideally, the listing type should be determined
  automatically.
  
  The fourth parameter specifies how unparseable lines should be treated.
  Values can be 'ignore', 'warn' or a code reference.  Warn means that
  the perl warn() function will be called.  If a code reference is
  passed, then this routine will be called and the return value from it
  will be incorporated in the listing.  The default is 'ignore'.
  
  Only the first parameter is mandatory.
  
  The return value from parse_dir() is a list of directory entries.  In
  a scalar context the return value is a reference to the list.  The
  directory entries are represented by an array consisting of [
  $filename, $filetype, $filesize, $filetime, $filemode ].  The
  $filetype value is one of the letters 'f', 'd', 'l' or '?'.  The
  $filetime value is the seconds since Jan 1, 1970.  The
  $filemode is a bitmask like the mode returned by stat().
  
  =head1 COPYRIGHT
  
  Copyright 1996-2010, Gisle Aas
  
  Based on lsparse.pl (from Lee McLoughlin's ftp mirror package) and
  Net::FTP's parse_dir (Graham Barr).
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
FILE_LISTING

    $main::fatpacked{"File/Path.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_PATH';
  package File::Path;
  
  use 5.005_04;
  use strict;
  
  use Cwd 'getcwd';
  use File::Basename ();
  use File::Spec     ();
  
  BEGIN {
      if ( $] < 5.006 ) {
  
          # can't say 'opendir my $dh, $dirname'
          # need to initialise $dh
          eval 'use Symbol';
      }
  }
  
  use Exporter ();
  use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
  $VERSION   = '2.12_01';
  $VERSION   = eval $VERSION;
  @ISA       = qw(Exporter);
  @EXPORT    = qw(mkpath rmtree);
  @EXPORT_OK = qw(make_path remove_tree);
  
  BEGIN {
    for (qw(VMS MacOS MSWin32 os2)) {
      no strict 'refs';
      *{"_IS_\U$_"} = $^O eq $_ ? sub () { 1 } : sub () { 0 };
    }
  
    # These OSes complain if you want to remove a file that you have no
    # write permission to:
    *_FORCE_WRITABLE = (
      grep { $^O eq $_ } qw(amigaos dos epoc MSWin32 MacOS os2)
    ) ? sub () { 1 } : sub () { 0 };
  
    # Unix-like systems need to stat each directory in order to detect
    # race condition. MS-Windows is immune to this particular attack.
    *_NEED_STAT_CHECK = !(_IS_MSWIN32()) ? sub () { 1 } : sub () { 0 };
  }
  
  sub _carp {
      require Carp;
      goto &Carp::carp;
  }
  
  sub _croak {
      require Carp;
      goto &Carp::croak;
  }
  
  sub _error {
      my $arg     = shift;
      my $message = shift;
      my $object  = shift;
  
      if ( $arg->{error} ) {
          $object = '' unless defined $object;
          $message .= ": $!" if $!;
          push @{ ${ $arg->{error} } }, { $object => $message };
      }
      else {
          _carp( defined($object) ? "$message for $object: $!" : "$message: $!" );
      }
  }
  
  sub __is_arg {
      my ($arg) = @_;
  
      # If client code blessed an array ref to HASH, this will not work
      # properly. We could have done $arg->isa() wrapped in eval, but
      # that would be expensive. This implementation should suffice.
      # We could have also used Scalar::Util:blessed, but we choose not
      # to add this dependency
      return ( ref $arg eq 'HASH' );
  }
  
  sub make_path {
      push @_, {} unless @_ and __is_arg( $_[-1] );
      goto &mkpath;
  }
  
  sub mkpath {
      my $old_style = !( @_ and __is_arg( $_[-1] ) );
  
      my $arg;
      my $paths;
  
      if ($old_style) {
          my ( $verbose, $mode );
          ( $paths, $verbose, $mode ) = @_;
          $paths = [$paths] unless UNIVERSAL::isa( $paths, 'ARRAY' );
          $arg->{verbose} = $verbose;
          $arg->{mode} = defined $mode ? $mode : oct '777';
      }
      else {
          my %args_permitted = map { $_ => 1 } ( qw|
              chmod
              error
              group
              mask
              mode
              owner
              uid
              user
              verbose
          | );
          my @bad_args = ();
          $arg = pop @_;
          for my $k (sort keys %{$arg}) {
              push @bad_args, $k unless $args_permitted{$k};
          }
          _carp("Unrecognized option(s) passed to make_path(): @bad_args")
              if @bad_args;
          $arg->{mode} = delete $arg->{mask} if exists $arg->{mask};
          $arg->{mode} = oct '777' unless exists $arg->{mode};
          ${ $arg->{error} } = [] if exists $arg->{error};
          $arg->{owner} = delete $arg->{user} if exists $arg->{user};
          $arg->{owner} = delete $arg->{uid}  if exists $arg->{uid};
          if ( exists $arg->{owner} and $arg->{owner} =~ /\D/ ) {
              my $uid = ( getpwnam $arg->{owner} )[2];
              if ( defined $uid ) {
                  $arg->{owner} = $uid;
              }
              else {
                  _error( $arg,
  "unable to map $arg->{owner} to a uid, ownership not changed"
                  );
                  delete $arg->{owner};
              }
          }
          if ( exists $arg->{group} and $arg->{group} =~ /\D/ ) {
              my $gid = ( getgrnam $arg->{group} )[2];
              if ( defined $gid ) {
                  $arg->{group} = $gid;
              }
              else {
                  _error( $arg,
  "unable to map $arg->{group} to a gid, group ownership not changed"
                  );
                  delete $arg->{group};
              }
          }
          if ( exists $arg->{owner} and not exists $arg->{group} ) {
              $arg->{group} = -1;    # chown will leave group unchanged
          }
          if ( exists $arg->{group} and not exists $arg->{owner} ) {
              $arg->{owner} = -1;    # chown will leave owner unchanged
          }
          $paths = [@_];
      }
      return _mkpath( $arg, $paths );
  }
  
  sub _mkpath {
      my $arg   = shift;
      my $paths = shift;
  
      my ( @created );
      foreach my $path ( @{$paths} ) {
          next unless defined($path) and length($path);
          $path .= '/' if _IS_OS2 and $path =~ /^\w:\z/s; # feature of CRT
  
          # Logic wants Unix paths, so go with the flow.
          if (_IS_VMS) {
              next if $path eq '/';
              $path = VMS::Filespec::unixify($path);
          }
          next if -d $path;
          my $parent = File::Basename::dirname($path);
          unless ( -d $parent or $path eq $parent ) {
              push( @created, _mkpath( $arg, [$parent] ) );
          }
          print "mkdir $path\n" if $arg->{verbose};
          if ( mkdir( $path, $arg->{mode} ) ) {
              push( @created, $path );
              if ( exists $arg->{owner} ) {
  
                  # NB: $arg->{group} guaranteed to be set during initialisation
                  if ( !chown $arg->{owner}, $arg->{group}, $path ) {
                      _error( $arg,
  "Cannot change ownership of $path to $arg->{owner}:$arg->{group}"
                      );
                  }
              }
              if ( exists $arg->{chmod} ) {
                  if ( !chmod $arg->{chmod}, $path ) {
                      _error( $arg,
                          "Cannot change permissions of $path to $arg->{chmod}" );
                  }
              }
          }
          else {
              my $save_bang = $!;
              my ( $e, $e1 ) = ( $save_bang, $^E );
              $e .= "; $e1" if $e ne $e1;
  
              # allow for another process to have created it meanwhile
              if ( ! -d $path ) {
                  $! = $save_bang;
                  if ( $arg->{error} ) {
                      push @{ ${ $arg->{error} } }, { $path => $e };
                  }
                  else {
                      _croak("mkdir $path: $e");
                  }
              }
          }
      }
      return @created;
  }
  
  sub remove_tree {
      push @_, {} unless @_ and __is_arg( $_[-1] );
      goto &rmtree;
  }
  
  sub _is_subdir {
      my ( $dir, $test ) = @_;
  
      my ( $dv, $dd ) = File::Spec->splitpath( $dir,  1 );
      my ( $tv, $td ) = File::Spec->splitpath( $test, 1 );
  
      # not on same volume
      return 0 if $dv ne $tv;
  
      my @d = File::Spec->splitdir($dd);
      my @t = File::Spec->splitdir($td);
  
      # @t can't be a subdir if it's shorter than @d
      return 0 if @t < @d;
  
      return join( '/', @d ) eq join( '/', splice @t, 0, +@d );
  }
  
  sub rmtree {
      my $old_style = !( @_ and __is_arg( $_[-1] ) );
  
      my $arg;
      my $paths;
  
      if ($old_style) {
          my ( $verbose, $safe );
          ( $paths, $verbose, $safe ) = @_;
          $arg->{verbose} = $verbose;
          $arg->{safe} = defined $safe ? $safe : 0;
  
          if ( defined($paths) and length($paths) ) {
              $paths = [$paths] unless UNIVERSAL::isa( $paths, 'ARRAY' );
          }
          else {
              _carp("No root path(s) specified\n");
              return 0;
          }
      }
      else {
          my %args_permitted = map { $_ => 1 } ( qw|
              error
              keep_root
              result
              safe
              verbose
          | );
          my @bad_args = ();
          $arg = pop @_;
          for my $k (sort keys %{$arg}) {
              push @bad_args, $k unless $args_permitted{$k};
          }
          _carp("Unrecognized option(s) passed to remove_tree(): @bad_args")
              if @bad_args;
          ${ $arg->{error} }  = [] if exists $arg->{error};
          ${ $arg->{result} } = [] if exists $arg->{result};
          $paths = [@_];
      }
  
      $arg->{prefix} = '';
      $arg->{depth}  = 0;
  
      my @clean_path;
      $arg->{cwd} = getcwd() or do {
          _error( $arg, "cannot fetch initial working directory" );
          return 0;
      };
      for ( $arg->{cwd} ) { /\A(.*)\Z/s; $_ = $1 }    # untaint
  
      for my $p (@$paths) {
  
          # need to fixup case and map \ to / on Windows
          my $ortho_root = _IS_MSWIN32 ? _slash_lc($p) : $p;
          my $ortho_cwd =
            _IS_MSWIN32 ? _slash_lc( $arg->{cwd} ) : $arg->{cwd};
          my $ortho_root_length = length($ortho_root);
          $ortho_root_length-- if _IS_VMS;   # don't compare '.' with ']'
          if ( $ortho_root_length && _is_subdir( $ortho_root, $ortho_cwd ) ) {
              local $! = 0;
              _error( $arg, "cannot remove path when cwd is $arg->{cwd}", $p );
              next;
          }
  
          if (_IS_MACOS) {
              $p = ":$p" unless $p =~ /:/;
              $p .= ":" unless $p =~ /:\z/;
          }
          elsif ( _IS_MSWIN32 ) {
              $p =~ s{[/\\]\z}{};
          }
          else {
              $p =~ s{/\z}{};
          }
          push @clean_path, $p;
      }
  
      @{$arg}{qw(device inode perm)} = ( lstat $arg->{cwd} )[ 0, 1 ] or do {
          _error( $arg, "cannot stat initial working directory", $arg->{cwd} );
          return 0;
      };
  
      return _rmtree( $arg, \@clean_path );
  }
  
  sub _rmtree {
      my $arg   = shift;
      my $paths = shift;
  
      my $count  = 0;
      my $curdir = File::Spec->curdir();
      my $updir  = File::Spec->updir();
  
      my ( @files, $root );
    ROOT_DIR:
      foreach my $root (@$paths) {
  
          # since we chdir into each directory, it may not be obvious
          # to figure out where we are if we generate a message about
          # a file name. We therefore construct a semi-canonical
          # filename, anchored from the directory being unlinked (as
          # opposed to being truly canonical, anchored from the root (/).
  
          my $canon =
            $arg->{prefix}
            ? File::Spec->catfile( $arg->{prefix}, $root )
            : $root;
  
          my ( $ldev, $lino, $perm ) = ( lstat $root )[ 0, 1, 2 ]
            or next ROOT_DIR;
  
          if ( -d _ ) {
              $root = VMS::Filespec::vmspath( VMS::Filespec::pathify($root) )
                if _IS_VMS;
  
              if ( !chdir($root) ) {
  
                  # see if we can escalate privileges to get in
                  # (e.g. funny protection mask such as -w- instead of rwx)
                  $perm &= oct '7777';
                  my $nperm = $perm | oct '700';
                  if (
                      !(
                             $arg->{safe}
                          or $nperm == $perm
                          or chmod( $nperm, $root )
                      )
                    )
                  {
                      _error( $arg,
                          "cannot make child directory read-write-exec", $canon );
                      next ROOT_DIR;
                  }
                  elsif ( !chdir($root) ) {
                      _error( $arg, "cannot chdir to child", $canon );
                      next ROOT_DIR;
                  }
              }
  
              my ( $cur_dev, $cur_inode, $perm ) = ( stat $curdir )[ 0, 1, 2 ]
                or do {
                  _error( $arg, "cannot stat current working directory", $canon );
                  next ROOT_DIR;
                };
  
              if (_NEED_STAT_CHECK) {
                  ( $ldev eq $cur_dev and $lino eq $cur_inode )
                    or _croak(
  "directory $canon changed before chdir, expected dev=$ldev ino=$lino, actual dev=$cur_dev ino=$cur_inode, aborting."
                    );
              }
  
              $perm &= oct '7777';    # don't forget setuid, setgid, sticky bits
              my $nperm = $perm | oct '700';
  
              # notabene: 0700 is for making readable in the first place,
              # it's also intended to change it to writable in case we have
              # to recurse in which case we are better than rm -rf for
              # subtrees with strange permissions
  
              if (
                  !(
                         $arg->{safe}
                      or $nperm == $perm
                      or chmod( $nperm, $curdir )
                  )
                )
              {
                  _error( $arg, "cannot make directory read+writeable", $canon );
                  $nperm = $perm;
              }
  
              my $d;
              $d = gensym() if $] < 5.006;
              if ( !opendir $d, $curdir ) {
                  _error( $arg, "cannot opendir", $canon );
                  @files = ();
              }
              else {
                  if ( !defined ${^TAINT} or ${^TAINT} ) {
                      # Blindly untaint dir names if taint mode is active
                      @files = map { /\A(.*)\z/s; $1 } readdir $d;
                  }
                  else {
                      @files = readdir $d;
                  }
                  closedir $d;
              }
  
              if (_IS_VMS) {
  
                  # Deleting large numbers of files from VMS Files-11
                  # filesystems is faster if done in reverse ASCIIbetical order.
                  # include '.' to '.;' from blead patch #31775
                  @files = map { $_ eq '.' ? '.;' : $_ } reverse @files;
              }
  
              @files = grep { $_ ne $updir and $_ ne $curdir } @files;
  
              if (@files) {
  
                  # remove the contained files before the directory itself
                  my $narg = {%$arg};
                  @{$narg}{qw(device inode cwd prefix depth)} =
                    ( $cur_dev, $cur_inode, $updir, $canon, $arg->{depth} + 1 );
                  $count += _rmtree( $narg, \@files );
              }
  
              # restore directory permissions of required now (in case the rmdir
              # below fails), while we are still in the directory and may do so
              # without a race via '.'
              if ( $nperm != $perm and not chmod( $perm, $curdir ) ) {
                  _error( $arg, "cannot reset chmod", $canon );
              }
  
              # don't leave the client code in an unexpected directory
              chdir( $arg->{cwd} )
                or
                _croak("cannot chdir to $arg->{cwd} from $canon: $!, aborting.");
  
              # ensure that a chdir upwards didn't take us somewhere other
              # than we expected (see CVE-2002-0435)
              ( $cur_dev, $cur_inode ) = ( stat $curdir )[ 0, 1 ]
                or _croak(
                  "cannot stat prior working directory $arg->{cwd}: $!, aborting."
                );
  
              if (_NEED_STAT_CHECK) {
                  ( $arg->{device} eq $cur_dev and $arg->{inode} eq $cur_inode )
                    or _croak(  "previous directory $arg->{cwd} "
                              . "changed before entering $canon, "
                              . "expected dev=$ldev ino=$lino, "
                              . "actual dev=$cur_dev ino=$cur_inode, aborting."
                    );
              }
  
              if ( $arg->{depth} or !$arg->{keep_root} ) {
                  if ( $arg->{safe}
                      && ( _IS_VMS
                          ? !&VMS::Filespec::candelete($root)
                          : !-w $root ) )
                  {
                      print "skipped $root\n" if $arg->{verbose};
                      next ROOT_DIR;
                  }
                  if ( _FORCE_WRITABLE and !chmod $perm | oct '700', $root ) {
                      _error( $arg, "cannot make directory writeable", $canon );
                  }
                  print "rmdir $root\n" if $arg->{verbose};
                  if ( rmdir $root ) {
                      push @{ ${ $arg->{result} } }, $root if $arg->{result};
                      ++$count;
                  }
                  else {
                      _error( $arg, "cannot remove directory", $canon );
                      if (
                          _FORCE_WRITABLE
                          && !chmod( $perm,
                              ( _IS_VMS ? VMS::Filespec::fileify($root) : $root )
                          )
                        )
                      {
                          _error(
                              $arg,
                              sprintf( "cannot restore permissions to 0%o",
                                  $perm ),
                              $canon
                          );
                      }
                  }
              }
          }
          else {
              # not a directory
              $root = VMS::Filespec::vmsify("./$root")
                if _IS_VMS
                && !File::Spec->file_name_is_absolute($root)
                && ( $root !~ m/(?<!\^)[\]>]+/ );    # not already in VMS syntax
  
              if (
                  $arg->{safe}
                  && (
                      _IS_VMS
                      ? !&VMS::Filespec::candelete($root)
                      : !( -l $root || -w $root )
                  )
                )
              {
                  print "skipped $root\n" if $arg->{verbose};
                  next ROOT_DIR;
              }
  
              my $nperm = $perm & oct '7777' | oct '600';
              if (    _FORCE_WRITABLE
                  and $nperm != $perm
                  and not chmod $nperm, $root )
              {
                  _error( $arg, "cannot make file writeable", $canon );
              }
              print "unlink $canon\n" if $arg->{verbose};
  
              # delete all versions under VMS
              for ( ; ; ) {
                  if ( unlink $root ) {
                      push @{ ${ $arg->{result} } }, $root if $arg->{result};
                  }
                  else {
                      _error( $arg, "cannot unlink file", $canon );
                      _FORCE_WRITABLE and chmod( $perm, $root )
                        or _error( $arg,
                          sprintf( "cannot restore permissions to 0%o", $perm ),
                          $canon );
                      last;
                  }
                  ++$count;
                  last unless _IS_VMS && lstat $root;
              }
          }
      }
      return $count;
  }
  
  sub _slash_lc {
  
      # fix up slashes and case on MSWin32 so that we can determine that
      # c:\path\to\dir is underneath C:/Path/To
      my $path = shift;
      $path =~ tr{\\}{/};
      return lc($path);
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  File::Path - Create or remove directory trees
  
  =head1 VERSION
  
  This document describes version 2.12 of File::Path.
  
  =head1 SYNOPSIS
  
    use File::Path qw(make_path remove_tree);
  
    @created = make_path('foo/bar/baz', '/zug/zwang');
    @created = make_path('foo/bar/baz', '/zug/zwang', {
        verbose => 1,
        mode => 0711,
    });
    make_path('foo/bar/baz', '/zug/zwang', {
        chmod => 0777,
    });
  
    $removed_count = remove_tree('foo/bar/baz', '/zug/zwang');
    $removed_count = remove_tree('foo/bar/baz', '/zug/zwang', {
        verbose => 1,
        error  => \my $err_list,
    });
  
    # legacy (interface promoted before v2.00)
    @created = mkpath('/foo/bar/baz');
    @created = mkpath('/foo/bar/baz', 1, 0711);
    @created = mkpath(['/foo/bar/baz', 'blurfl/quux'], 1, 0711);
    $removed_count = rmtree('foo/bar/baz', 1, 1);
    $removed_count = rmtree(['foo/bar/baz', 'blurfl/quux'], 1, 1);
  
    # legacy (interface promoted before v2.06)
    @created = mkpath('foo/bar/baz', '/zug/zwang', { verbose => 1, mode => 0711 });
    $removed_count = rmtree('foo/bar/baz', '/zug/zwang', { verbose => 1, mode => 0711 });
  
  =head1 DESCRIPTION
  
  This module provide a convenient way to create directories of
  arbitrary depth and to delete an entire directory subtree from the
  filesystem.
  
  The following functions are provided:
  
  =over
  
  =item make_path( $dir1, $dir2, .... )
  
  =item make_path( $dir1, $dir2, ...., \%opts )
  
  The C<make_path> function creates the given directories if they don't
  exists before, much like the Unix command C<mkdir -p>.
  
  The function accepts a list of directories to be created. Its
  behaviour may be tuned by an optional hashref appearing as the last
  parameter on the call.
  
  The function returns the list of directories actually created during
  the call; in scalar context the number of directories created.
  
  The following keys are recognised in the option hash:
  
  =over
  
  =item mode => $num
  
  The numeric permissions mode to apply to each created directory
  (defaults to 0777), to be modified by the current C<umask>. If the
  directory already exists (and thus does not need to be created),
  the permissions will not be modified.
  
  C<mask> is recognised as an alias for this parameter.
  
  =item chmod => $num
  
  Takes a numeric mode to apply to each created directory (not
  modified by the current C<umask>). If the directory already exists
  (and thus does not need to be created), the permissions will
  not be modified.
  
  =item verbose => $bool
  
  If present, will cause C<make_path> to print the name of each directory
  as it is created. By default nothing is printed.
  
  =item error => \$err
  
  If present, it should be a reference to a scalar.
  This scalar will be made to reference an array, which will
  be used to store any errors that are encountered.  See the L</"ERROR
  HANDLING"> section for more information.
  
  If this parameter is not used, certain error conditions may raise
  a fatal error that will cause the program to halt, unless trapped
  in an C<eval> block.
  
  =item owner => $owner
  
  =item user => $owner
  
  =item uid => $owner
  
  If present, will cause any created directory to be owned by C<$owner>.
  If the value is numeric, it will be interpreted as a uid, otherwise
  as username is assumed. An error will be issued if the username cannot be
  mapped to a uid, or the uid does not exist, or the process lacks the
  privileges to change ownership.
  
  Ownership of directories that already exist will not be changed.
  
  C<user> and C<uid> are aliases of C<owner>.
  
  =item group => $group
  
  If present, will cause any created directory to be owned by the group C<$group>.
  If the value is numeric, it will be interpreted as a gid, otherwise
  as group name is assumed. An error will be issued if the group name cannot be
  mapped to a gid, or the gid does not exist, or the process lacks the
  privileges to change group ownership.
  
  Group ownership of directories that already exist will not be changed.
  
      make_path '/var/tmp/webcache', {owner=>'nobody', group=>'nogroup'};
  
  =back
  
  =item mkpath( $dir )
  
  =item mkpath( $dir, $verbose, $mode )
  
  =item mkpath( [$dir1, $dir2,...], $verbose, $mode )
  
  =item mkpath( $dir1, $dir2,..., \%opt )
  
  The mkpath() function provide the legacy interface of make_path() with
  a different interpretation of the arguments passed.  The behaviour and
  return value of the function is otherwise identical to make_path().
  
  =item remove_tree( $dir1, $dir2, .... )
  
  =item remove_tree( $dir1, $dir2, ...., \%opts )
  
  The C<remove_tree> function deletes the given directories and any
  files and subdirectories they might contain, much like the Unix
  command C<rm -r> or the Windows commands C<rmdir /s> and C<rd /s>. The
  only exception to the function similarity is C<remove_tree> accepts
  only directories whereas C<rm -r> also accepts files.
  
  The function accepts a list of directories to be
  removed. Its behaviour may be tuned by an optional hashref
  appearing as the last parameter on the call.  If an empty string is
  passed to C<remove_tree>, an error will occur.
  
  The functions returns the number of files successfully deleted.
  
  The following keys are recognised in the option hash:
  
  =over
  
  =item verbose => $bool
  
  If present, will cause C<remove_tree> to print the name of each file as
  it is unlinked. By default nothing is printed.
  
  =item safe => $bool
  
  When set to a true value, will cause C<remove_tree> to skip the files
  for which the process lacks the required privileges needed to delete
  files, such as delete privileges on VMS. In other words, the code
  will make no attempt to alter file permissions. Thus, if the process
  is interrupted, no filesystem object will be left in a more
  permissive mode.
  
  =item keep_root => $bool
  
  When set to a true value, will cause all files and subdirectories
  to be removed, except the initially specified directories. This comes
  in handy when cleaning out an application's scratch directory.
  
    remove_tree( '/tmp', {keep_root => 1} );
  
  =item result => \$res
  
  If present, it should be a reference to a scalar.
  This scalar will be made to reference an array, which will
  be used to store all files and directories unlinked
  during the call. If nothing is unlinked, the array will be empty.
  
    remove_tree( '/tmp', {result => \my $list} );
    print "unlinked $_\n" for @$list;
  
  This is a useful alternative to the C<verbose> key.
  
  =item error => \$err
  
  If present, it should be a reference to a scalar.
  This scalar will be made to reference an array, which will
  be used to store any errors that are encountered.  See the L</"ERROR
  HANDLING"> section for more information.
  
  Removing things is a much more dangerous proposition than
  creating things. As such, there are certain conditions that
  C<remove_tree> may encounter that are so dangerous that the only
  sane action left is to kill the program.
  
  Use C<error> to trap all that is reasonable (problems with
  permissions and the like), and let it die if things get out
  of hand. This is the safest course of action.
  
  =back
  
  =item rmtree( $dir )
  
  =item rmtree( $dir, $verbose, $safe )
  
  =item rmtree( [$dir1, $dir2,...], $verbose, $safe )
  
  =item rmtree( $dir1, $dir2,..., \%opt )
  
  The rmtree() function provide the legacy interface of remove_tree()
  with a different interpretation of the arguments passed. The behaviour
  and return value of the function is otherwise identical to
  remove_tree().
  
  =back
  
  =head2 ERROR HANDLING
  
  =over 4
  
  =item B<NOTE:>
  
  The following error handling mechanism is consistent throughout all
  code paths EXCEPT in cases where the ROOT node is nonexistent.  In
  version 2.11 the maintainers attempted to rectify this inconsistency
  but too many downstream modules encountered problems.  In such case,
  if you require root node evaluation or error checking prior to calling
  C<make_path> or C<remove_tree>, you should take additional precautions.
  
  =back
  
  If C<make_path> or C<remove_tree> encounter an error, a diagnostic
  message will be printed to C<STDERR> via C<carp> (for non-fatal
  errors), or via C<croak> (for fatal errors).
  
  If this behaviour is not desirable, the C<error> attribute may be
  used to hold a reference to a variable, which will be used to store
  the diagnostics. The variable is made a reference to an array of hash
  references.  Each hash contain a single key/value pair where the key
  is the name of the file, and the value is the error message (including
  the contents of C<$!> when appropriate).  If a general error is
  encountered the diagnostic key will be empty.
  
  An example usage looks like:
  
    remove_tree( 'foo/bar', 'bar/rat', {error => \my $err} );
    if (@$err) {
        for my $diag (@$err) {
            my ($file, $message) = %$diag;
            if ($file eq '') {
                print "general error: $message\n";
            }
            else {
                print "problem unlinking $file: $message\n";
            }
        }
    }
    else {
        print "No error encountered\n";
    }
  
  Note that if no errors are encountered, C<$err> will reference an
  empty array.  This means that C<$err> will always end up TRUE; so you
  need to test C<@$err> to determine if errors occurred.
  
  =head2 NOTES
  
  C<File::Path> blindly exports C<mkpath> and C<rmtree> into the
  current namespace. These days, this is considered bad style, but
  to change it now would break too much code. Nonetheless, you are
  invited to specify what it is you are expecting to use:
  
    use File::Path 'rmtree';
  
  The routines C<make_path> and C<remove_tree> are B<not> exported
  by default. You must specify which ones you want to use.
  
    use File::Path 'remove_tree';
  
  Note that a side-effect of the above is that C<mkpath> and C<rmtree>
  are no longer exported at all. This is due to the way the C<Exporter>
  module works. If you are migrating a codebase to use the new
  interface, you will have to list everything explicitly. But that's
  just good practice anyway.
  
    use File::Path qw(remove_tree rmtree);
  
  =head3 API CHANGES
  
  The API was changed in the 2.0 branch. For a time, C<mkpath> and
  C<rmtree> tried, unsuccessfully, to deal with the two different
  calling mechanisms. This approach was considered a failure.
  
  The new semantics are now only available with C<make_path> and
  C<remove_tree>. The old semantics are only available through
  C<mkpath> and C<rmtree>. Users are strongly encouraged to upgrade
  to at least 2.08 in order to avoid surprises.
  
  =head3 SECURITY CONSIDERATIONS
  
  There were race conditions 1.x implementations of File::Path's
  C<rmtree> function (although sometimes patched depending on the OS
  distribution or platform). The 2.0 version contains code to avoid the
  problem mentioned in CVE-2002-0435.
  
  See the following pages for more information:
  
    http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=286905
    http://www.nntp.perl.org/group/perl.perl5.porters/2005/01/msg97623.html
    http://www.debian.org/security/2005/dsa-696
  
  Additionally, unless the C<safe> parameter is set (or the
  third parameter in the traditional interface is TRUE), should a
  C<remove_tree> be interrupted, files that were originally in read-only
  mode may now have their permissions set to a read-write (or "delete
  OK") mode.
  
  =head1 DIAGNOSTICS
  
  FATAL errors will cause the program to halt (C<croak>), since the
  problem is so severe that it would be dangerous to continue. (This
  can always be trapped with C<eval>, but it's not a good idea. Under
  the circumstances, dying is the best thing to do).
  
  SEVERE errors may be trapped using the modern interface. If the
  they are not trapped, or the old interface is used, such an error
  will cause the program will halt.
  
  All other errors may be trapped using the modern interface, otherwise
  they will be C<carp>ed about. Program execution will not be halted.
  
  =over 4
  
  =item mkdir [path]: [errmsg] (SEVERE)
  
  C<make_path> was unable to create the path. Probably some sort of
  permissions error at the point of departure, or insufficient resources
  (such as free inodes on Unix).
  
  =item No root path(s) specified
  
  C<make_path> was not given any paths to create. This message is only
  emitted if the routine is called with the traditional interface.
  The modern interface will remain silent if given nothing to do.
  
  =item No such file or directory
  
  On Windows, if C<make_path> gives you this warning, it may mean that
  you have exceeded your filesystem's maximum path length.
  
  =item cannot fetch initial working directory: [errmsg]
  
  C<remove_tree> attempted to determine the initial directory by calling
  C<Cwd::getcwd>, but the call failed for some reason. No attempt
  will be made to delete anything.
  
  =item cannot stat initial working directory: [errmsg]
  
  C<remove_tree> attempted to stat the initial directory (after having
  successfully obtained its name via C<getcwd>), however, the call
  failed for some reason. No attempt will be made to delete anything.
  
  =item cannot chdir to [dir]: [errmsg]
  
  C<remove_tree> attempted to set the working directory in order to
  begin deleting the objects therein, but was unsuccessful. This is
  usually a permissions issue. The routine will continue to delete
  other things, but this directory will be left intact.
  
  =item directory [dir] changed before chdir, expected dev=[n] ino=[n], actual dev=[n] ino=[n], aborting. (FATAL)
  
  C<remove_tree> recorded the device and inode of a directory, and then
  moved into it. It then performed a C<stat> on the current directory
  and detected that the device and inode were no longer the same. As
  this is at the heart of the race condition problem, the program
  will die at this point.
  
  =item cannot make directory [dir] read+writeable: [errmsg]
  
  C<remove_tree> attempted to change the permissions on the current directory
  to ensure that subsequent unlinkings would not run into problems,
  but was unable to do so. The permissions remain as they were, and
  the program will carry on, doing the best it can.
  
  =item cannot read [dir]: [errmsg]
  
  C<remove_tree> tried to read the contents of the directory in order
  to acquire the names of the directory entries to be unlinked, but
  was unsuccessful. This is usually a permissions issue. The
  program will continue, but the files in this directory will remain
  after the call.
  
  =item cannot reset chmod [dir]: [errmsg]
  
  C<remove_tree>, after having deleted everything in a directory, attempted
  to restore its permissions to the original state but failed. The
  directory may wind up being left behind.
  
  =item cannot remove [dir] when cwd is [dir]
  
  The current working directory of the program is F</some/path/to/here>
  and you are attempting to remove an ancestor, such as F</some/path>.
  The directory tree is left untouched.
  
  The solution is to C<chdir> out of the child directory to a place
  outside the directory tree to be removed.
  
  =item cannot chdir to [parent-dir] from [child-dir]: [errmsg], aborting. (FATAL)
  
  C<remove_tree>, after having deleted everything and restored the permissions
  of a directory, was unable to chdir back to the parent. The program
  halts to avoid a race condition from occurring.
  
  =item cannot stat prior working directory [dir]: [errmsg], aborting. (FATAL)
  
  C<remove_tree> was unable to stat the parent directory after have returned
  from the child. Since there is no way of knowing if we returned to
  where we think we should be (by comparing device and inode) the only
  way out is to C<croak>.
  
  =item previous directory [parent-dir] changed before entering [child-dir], expected dev=[n] ino=[n], actual dev=[n] ino=[n], aborting. (FATAL)
  
  When C<remove_tree> returned from deleting files in a child directory, a
  check revealed that the parent directory it returned to wasn't the one
  it started out from. This is considered a sign of malicious activity.
  
  =item cannot make directory [dir] writeable: [errmsg]
  
  Just before removing a directory (after having successfully removed
  everything it contained), C<remove_tree> attempted to set the permissions
  on the directory to ensure it could be removed and failed. Program
  execution continues, but the directory may possibly not be deleted.
  
  =item cannot remove directory [dir]: [errmsg]
  
  C<remove_tree> attempted to remove a directory, but failed. This may because
  some objects that were unable to be removed remain in the directory, or
  a permissions issue. The directory will be left behind.
  
  =item cannot restore permissions of [dir] to [0nnn]: [errmsg]
  
  After having failed to remove a directory, C<remove_tree> was unable to
  restore its permissions from a permissive state back to a possibly
  more restrictive setting. (Permissions given in octal).
  
  =item cannot make file [file] writeable: [errmsg]
  
  C<remove_tree> attempted to force the permissions of a file to ensure it
  could be deleted, but failed to do so. It will, however, still attempt
  to unlink the file.
  
  =item cannot unlink file [file]: [errmsg]
  
  C<remove_tree> failed to remove a file. Probably a permissions issue.
  
  =item cannot restore permissions of [file] to [0nnn]: [errmsg]
  
  After having failed to remove a file, C<remove_tree> was also unable
  to restore the permissions on the file to a possibly less permissive
  setting. (Permissions given in octal).
  
  =item unable to map [owner] to a uid, ownership not changed");
  
  C<make_path> was instructed to give the ownership of created
  directories to the symbolic name [owner], but C<getpwnam> did
  not return the corresponding numeric uid. The directory will
  be created, but ownership will not be changed.
  
  =item unable to map [group] to a gid, group ownership not changed
  
  C<make_path> was instructed to give the group ownership of created
  directories to the symbolic name [group], but C<getgrnam> did
  not return the corresponding numeric gid. The directory will
  be created, but group ownership will not be changed.
  
  =back
  
  =head1 SEE ALSO
  
  =over 4
  
  =item *
  
  L<File::Remove>
  
  Allows files and directories to be moved to the Trashcan/Recycle
  Bin (where they may later be restored if necessary) if the operating
  system supports such functionality. This feature may one day be
  made available directly in C<File::Path>.
  
  =item *
  
  L<File::Find::Rule>
  
  When removing directory trees, if you want to examine each file to
  decide whether to delete it (and possibly leaving large swathes
  alone), F<File::Find::Rule> offers a convenient and flexible approach
  to examining directory trees.
  
  =back
  
  =head1 BUGS AND LIMITATIONS
  
  The following describes F<File::Path> limitations and how to report bugs.
  
  =head2 MULTITHREAD APPLICATIONS
  
  F<File::Path> B<rmtree> and B<remove_tree> will not work with multithreaded
  applications due to its use of B<chdir>.  At this time, no warning or error
  results and you will certainly encounter unexpected results.
  
  The implementation that surfaces this limitation may change in a future
  release.
  
  =head2 NFS Mount Points
  
  F<File::Path> is not responsible for triggering the automounts, mirror mounts,
  and the contents of network mounted filesystems.  If your NFS implementation
  requires an action to be performed on the filesystem in order for
  F<File::Path> to perform operations, it is strongly suggested you assure
  filesystem availability by reading the root of the mounted filesystem.
  
  =head2 REPORTING BUGS
  
  Please report all bugs on the RT queue, either via the web interface:
  
  L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=File-Path>
  
  or by email:
  
      bug-File-Path@rt.cpan.org
  
  In either case, please B<attach> patches to the bug report rather than
  including them inline in the web post or the body of the email.
  
  You can also send pull requests to the Github repository:
  
  L<https://github.com/rpcme/File-Path>
  
  =head1 ACKNOWLEDGEMENTS
  
  Paul Szabo identified the race condition originally, and Brendan
  O'Dea wrote an implementation for Debian that addressed the problem.
  That code was used as a basis for the current code. Their efforts
  are greatly appreciated.
  
  Gisle Aas made a number of improvements to the documentation for
  2.07 and his advice and assistance is also greatly appreciated.
  
  =head1 AUTHORS
  
  Prior authors and maintainers: Tim Bunce, Charles Bailey, and
  David Landgren <F<david@landgren.net>>.
  
  Current maintainers are Richard Elberger <F<riche@cpan.org>> and
  James (Jim) Keenan <F<jkeenan@cpan.org>>.
  
  =head1 CONTRIBUTORS
  
  Contributors to File::Path, in alphabetical order.
  
  =over 1
  
  =item <F<bulkdd@cpan.org>>
  
  =item Craig A. Berry <F<craigberry@mac.com>>
  
  =item Richard Elberger <F<riche@cpan.org>>
  
  =item Ryan Yee <F<ryee@cpan.org>>
  
  =item Skye Shaw <F<shaw@cpan.org>>
  
  =item Tom Lutz <F<tommylutz@gmail.com>>
  
  =back
  
  =head1 COPYRIGHT
  
  This module is copyright (C) Charles Bailey, Tim Bunce, David Landgren,
  James Keenan, and Richard Elberger 1995-2015. All rights reserved.
  
  =head1 LICENSE
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself.
  
  =cut
FILE_PATH

    $main::fatpacked{"File/ShareDir.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_SHAREDIR';
  package File::ShareDir;
  
  =pod
  
  =head1 NAME
  
  File::ShareDir - Locate per-dist and per-module shared files
  
  =head1 SYNOPSIS
  
    use File::ShareDir ':ALL';
    
    # Where are distribution-level shared data files kept
    $dir = dist_dir('File-ShareDir');
    
    # Where are module-level shared data files kept
    $dir = module_dir('File::ShareDir');
    
    # Find a specific file in our dist/module shared dir
    $file = dist_file(  'File-ShareDir',  'file/name.txt');
    $file = module_file('File::ShareDir', 'file/name.txt');
    
    # Like module_file, but search up the inheritance tree
    $file = class_file( 'Foo::Bar', 'file/name.txt' );
  
  =head1 DESCRIPTION
  
  The intent of L<File::ShareDir> is to provide a companion to
  L<Class::Inspector> and L<File::HomeDir>, modules that take a
  process that is well-known by advanced Perl developers but gets a
  little tricky, and make it more available to the larger Perl community.
  
  Quite often you want or need your Perl module (CPAN or otherwise)
  to have access to a large amount of read-only data that is stored
  on the file-system at run-time.
  
  On a linux-like system, this would be in a place such as /usr/share,
  however Perl runs on a wide variety of different systems, and so
  the use of any one location is unreliable.
  
  Perl provides a little-known method for doing this, but almost
  nobody is aware that it exists. As a result, module authors often
  go through some very strange ways to make the data available to
  their code.
  
  The most common of these is to dump the data out to an enormous
  Perl data structure and save it into the module itself. The
  result are enormous multi-megabyte .pm files that chew up a
  lot of memory needlessly.
  
  Another method is to put the data "file" after the __DATA__ compiler
  tag and limit yourself to access as a filehandle.
  
  The problem to solve is really quite simple.
  
    1. Write the data files to the system at install time.
    
    2. Know where you put them at run-time.
  
  Perl's install system creates an "auto" directory for both
  every distribution and for every module file.
  
  These are used by a couple of different auto-loading systems
  to store code fragments generated at install time, and various
  other modules written by the Perl "ancient masters".
  
  But the same mechanism is available to any dist or module to
  store any sort of data.
  
  =head2 Using Data in your Module
  
  C<File::ShareDir> forms one half of a two part solution.
  
  Once the files have been installed to the correct directory,
  you can use C<File::ShareDir> to find your files again after
  the installation.
  
  For the installation half of the solution, see L<Module::Install>
  and its C<install_share> directive.
  
  =head1 FUNCTIONS
  
  C<File::ShareDir> provides four functions for locating files and
  directories.
  
  For greater maintainability, none of these are exported by default
  and you are expected to name the ones you want at use-time, or provide
  the C<':ALL'> tag. All of the following are equivalent.
  
    # Load but don't import, and then call directly
    use File::ShareDir;
    $dir = File::ShareDir::dist_dir('My-Dist');
    
    # Import a single function
    use File::ShareDir 'dist_dir';
    dist_dir('My-Dist');
    
    # Import all the functions
    use File::ShareDir ':ALL';
    dist_dir('My-Dist');
  
  All of the functions will check for you that the dir/file actually
  exists, and that you have read permissions, or they will throw an
  exception.
  
  =cut
  
  use 5.005;
  use strict;
  use warnings;
  
  use Carp             ();
  use Config           ();
  use Exporter         ();
  use File::Spec       ();
  use Class::Inspector ();
  
  use vars qw{ $VERSION @ISA @EXPORT_OK %EXPORT_TAGS };
  BEGIN {
  	$VERSION     = '1.102';
  	@ISA         = qw{ Exporter };
  	@EXPORT_OK   = qw{
  		dist_dir
  		dist_file
  		module_dir
  		module_file
  		class_dir
  		class_file
  	};
  	%EXPORT_TAGS = (
  		ALL => [ @EXPORT_OK ],
  	);
  }
  
  use constant IS_MACOS => !! ($^O eq 'MacOS');
  
  
  
  
  
  #####################################################################
  # Interface Functions
  
  =pod
  
  =head2 dist_dir
  
    # Get a distribution's shared files directory
    my $dir = dist_dir('My-Distribution');
  
  The C<dist_dir> function takes a single parameter of the name of an
  installed (CPAN or otherwise) distribution, and locates the shared
  data directory created at install time for it.
  
  Returns the directory path as a string, or dies if it cannot be
  located or is not readable.
  
  =cut
  
  sub dist_dir {
  	my $dist = _DIST(shift);
  	my $dir;
  
  	# Try the new version
  	$dir = _dist_dir_new( $dist );
  	return $dir if defined $dir;
  
  	# Fall back to the legacy version
  	$dir = _dist_dir_old( $dist );
  	return $dir if defined $dir;
  
  	# Ran out of options
  	Carp::croak("Failed to find share dir for dist '$dist'");
  }
  
  sub _dist_dir_new {
  	my $dist = shift;
  
  	# Create the subpath
  	my $path = File::Spec->catdir(
  		'auto', 'share', 'dist', $dist,
  	);
  
  	# Find the full dir withing @INC
  	foreach my $inc ( @INC ) {
  		next unless defined $inc and ! ref $inc;
  		my $dir = File::Spec->catdir( $inc, $path );
  		next unless -d $dir;
  		unless ( -r $dir ) {
  			Carp::croak("Found directory '$dir', but no read permissions");
  		}
  		return $dir;
  	}
  
  	return undef;
  }
  
  sub _dist_dir_old {
  	my $dist = shift;
  
  	# Create the subpath
  	my $path = File::Spec->catdir(
  		'auto', split( /-/, $dist ),
  	);
  
  	# Find the full dir within @INC
  	foreach my $inc ( @INC ) {
  		next unless defined $inc and ! ref $inc;
  		my $dir = File::Spec->catdir( $inc, $path );
  		next unless -d $dir;
  		unless ( -r $dir ) {
  			Carp::croak("Found directory '$dir', but no read permissions");
  		}
  		return $dir;
  	}
  
  	return undef;
  }
  
  =pod
  
  =head2 module_dir
  
    # Get a module's shared files directory
    my $dir = module_dir('My::Module');
  
  The C<module_dir> function takes a single parameter of the name of an
  installed (CPAN or otherwise) module, and locates the shared data
  directory created at install time for it.
  
  In order to find the directory, the module B<must> be loaded when
  calling this function.
  
  Returns the directory path as a string, or dies if it cannot be
  located or is not readable.
  
  =cut
  
  sub module_dir {
  	my $module = _MODULE(shift);
  	my $dir;
  
  	# Try the new version
  	$dir = _module_dir_new( $module );
  	return $dir if defined $dir;
  
  	# Fall back to the legacy version
  	return _module_dir_old( $module );
  }
  
  sub _module_dir_new {
  	my $module = shift;
  
  	# Create the subpath
  	my $path = File::Spec->catdir(
  		'auto', 'share', 'module',
  		_module_subdir( $module ),
  	);
  
  	# Find the full dir withing @INC
  	foreach my $inc ( @INC ) {
  		next unless defined $inc and ! ref $inc;
  		my $dir = File::Spec->catdir( $inc, $path );
  		next unless -d $dir;
  		unless ( -r $dir ) {
  			Carp::croak("Found directory '$dir', but no read permissions");
  		}
  		return $dir;
  	}
  
  	return undef;
  }
  	
  sub _module_dir_old {
  	my $module = shift;
  	my $short  = Class::Inspector->filename($module);
  	my $long   = Class::Inspector->loaded_filename($module);
  	$short =~ tr{/}{:} if IS_MACOS;
  	substr( $short, -3, 3, '' );
  	$long  =~ m/^(.*)\Q$short\E\.pm\z/s or die("Failed to find base dir");
  	my $dir = File::Spec->catdir( "$1", 'auto', $short );
  	unless ( -d $dir ) {
  		Carp::croak("Directory '$dir', does not exist");
  	}
  	unless ( -r $dir ) {
  		Carp::croak("Directory '$dir', no read permissions");
  	}
  	return $dir;
  }
  
  =pod
  
  =head2 dist_file
  
    # Find a file in our distribution shared dir
    my $dir = dist_file('My-Distribution', 'file/name.txt');
  
  The C<dist_file> function takes two params of the distribution name
  and file name, locates the dist dir, and then finds the file within
  it, verifying that the file actually exists, and that it is readable.
  
  The filename should be a relative path in the format of your local
  filesystem. It will simply added to the directory using L<File::Spec>'s
  C<catfile> method.
  
  Returns the file path as a string, or dies if the file or the dist's
  directory cannot be located, or the file is not readable.
  
  =cut
  
  sub dist_file {
  	my $dist = _DIST(shift);
  	my $file = _FILE(shift);
  
  	# Try the new version first
  	my $path = _dist_file_new( $dist, $file );
  	return $path if defined $path;
  
  	# Hand off to the legacy version
  	return _dist_file_old( $dist, $file );;
  }
  
  sub _dist_file_new {
  	my $dist = shift;
  	my $file = shift;
  
  	# If it exists, what should the path be
  	my $dir  = _dist_dir_new( $dist );
  	my $path = File::Spec->catfile( $dir, $file );
  
  	# Does the file exist
  	return undef unless -e $path;
  	unless ( -f $path ) {
  		Carp::croak("Found dist_file '$path', but not a file");
  	}
  	unless ( -r $path ) {
  		Carp::croak("File '$path', no read permissions");
  	}
  
  	return $path;
  }
  
  sub _dist_file_old {
  	my $dist = shift;
  	my $file = shift;
  
  	# Create the subpath
  	my $path = File::Spec->catfile(
  		'auto', split( /-/, $dist ), $file,
  	);
  
  	# Find the full dir withing @INC
  	foreach my $inc ( @INC ) {
  		next unless defined $inc and ! ref $inc;
  		my $full = File::Spec->catdir( $inc, $path );
  		next unless -e $full;
  		unless ( -r $full ) {
  			Carp::croak("Directory '$full', no read permissions");
  		}
  		return $full;
  	}
  
  	# Couldn't find it
  	Carp::croak("Failed to find shared file '$file' for dist '$dist'");
  }
  
  =pod
  
  =head2 module_file
  
    # Find a file in our module shared dir
    my $dir = module_file('My::Module', 'file/name.txt');
  
  The C<module_file> function takes two params of the module name
  and file name. It locates the module dir, and then finds the file within
  it, verifying that the file actually exists, and that it is readable.
  
  In order to find the directory, the module B<must> be loaded when
  calling this function.
  
  The filename should be a relative path in the format of your local
  filesystem. It will simply added to the directory using L<File::Spec>'s
  C<catfile> method.
  
  Returns the file path as a string, or dies if the file or the dist's
  directory cannot be located, or the file is not readable.
  
  =cut
  
  sub module_file {
  	my $module = _MODULE(shift);
  	my $file   = _FILE(shift);
  	my $dir    = module_dir($module);
  	my $path   = File::Spec->catfile($dir, $file);
  	unless ( -e $path ) {
  		Carp::croak("File '$file' does not exist in module dir");
  	}
  	unless ( -r $path ) {
  		Carp::croak("File '$file' cannot be read, no read permissions");
  	}
  	$path;
  }
  
  =pod
  
  =head2 class_file
  
    # Find a file in our module shared dir, or in our parent class
    my $dir = class_file('My::Module', 'file/name.txt');
  
  The C<module_file> function takes two params of the module name
  and file name. It locates the module dir, and then finds the file within
  it, verifying that the file actually exists, and that it is readable.
  
  In order to find the directory, the module B<must> be loaded when
  calling this function.
  
  The filename should be a relative path in the format of your local
  filesystem. It will simply added to the directory using L<File::Spec>'s
  C<catfile> method.
  
  If the file is NOT found for that module, C<class_file> will scan up
  the module's @ISA tree, looking for the file in all of the parent
  classes.
  
  This allows you to, in effect, "subclass" shared files.
  
  Returns the file path as a string, or dies if the file or the dist's
  directory cannot be located, or the file is not readable.
  
  =cut
  
  sub class_file {
  	my $module = _MODULE(shift);
  	my $file   = _FILE(shift);
  
  	# Get the super path ( not including UNIVERSAL )
  	# Rather than using Class::ISA, we'll use an inlined version
  	# that implements the same basic algorithm.
  	my @path  = ();
  	my @queue = ( $module );
  	my %seen  = ( $module => 1 );
  	while ( my $cl = shift @queue ) {
  		push @path, $cl;
  		no strict 'refs';
  		unshift @queue, grep { ! $seen{$_}++ }
  			map { s/^::/main::/; s/\'/::/g; $_ }
  			( @{"${cl}::ISA"} );
  	}
  
  	# Search up the path
  	foreach my $class ( @path ) {
  		local $@;
  		my $dir = eval {
  		 	module_dir($class);
  		};
  		next if $@;
  		my $path = File::Spec->catfile($dir, $file);
  		unless ( -e $path ) {
  			next;
  		}
  		unless ( -r $path ) {
  			Carp::croak("File '$file' cannot be read, no read permissions");
  		}
  		return $path;
  	}
  	Carp::croak("File '$file' does not exist in class or parent shared files");
  }
  
  
  
  
  #####################################################################
  # Support Functions
  
  sub _module_subdir {
  	my $module = shift;
  	$module =~ s/::/-/g;
  	return $module;
  }
  
  sub _dist_packfile {
  	my $module = shift;
  	my @dirs   = grep { -e } ( $Config::Config{archlibexp}, $Config::Config{sitearchexp} );
  	my $file   = File::Spec->catfile(
  		'auto', split( /::/, $module), '.packlist',
  	);
  
  	foreach my $dir ( @dirs ) {
  		my $path = File::Spec->catfile( $dir, $file );
  		next unless -f $path;
  
  		# Load the file
  		my $packlist = ExtUtils::Packlist->new($path);
  		unless ( $packlist ) {
  			die "Failed to load .packlist file for $module";
  		}
  
  		die "CODE INCOMPLETE";
  	}
  
  	die "CODE INCOMPLETE";
  }
  
  # Inlined from Params::Util pure perl version
  sub _CLASS {
      (defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s) ? $_[0] : undef;
  }
  
  
  # Maintainer note: The following private functions are used by
  #                  File::ShareDir::PAR. (It has to or else it would have to copy&fork)
  #                  So if you significantly change or even remove them, please
  #                  notify the File::ShareDir::PAR maintainer(s). Thank you!    
  
  # Matches a valid distribution name
  ### This is a total guess at this point
  sub _DIST {
  	if ( defined $_[0] and ! ref $_[0] and $_[0] =~ /^[a-z0-9+_-]+$/is ) {
  		return shift;
  	}
  	Carp::croak("Not a valid distribution name");
  }
  
  # A valid and loaded module name
  sub _MODULE {
  	my $module = _CLASS(shift) or Carp::croak("Not a valid module name");
  	if ( Class::Inspector->loaded($module) ) {
  		return $module;
  	}
  	Carp::croak("Module '$module' is not loaded");
  }
  
  # A valid file name
  sub _FILE {
  	my $file = shift;
  	unless ( defined $file and ! ref $file and length $file ) {
  		Carp::croak("Did not pass a file name");
  	}
  	if ( File::Spec->file_name_is_absolute($file) ) {
  		Carp::croak("Cannot use absolute file name '$file'");
  	}
  	$file;
  }
  
  1;
  
  =pod
  
  =head1 SUPPORT
  
  Bugs should always be submitted via the CPAN bug tracker
  
  L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=File-ShareDir>
  
  For other issues, contact the maintainer.
  
  =head1 AUTHOR
  
  Adam Kennedy E<lt>adamk@cpan.orgE<gt>
  
  =head1 SEE ALSO
  
  L<File::ShareDir::Install>, L<File::HomeDir>,
  L<Module::Install>, L<Module::Install::Share>,
  L<File::ShareDir::PAR>, L<Dist::Zilla::Plugin::ShareDir>
  
  =head1 COPYRIGHT
  
  Copyright 2005 - 2011 Adam Kennedy.
  
  This program is free software; you can redistribute
  it and/or modify it under the same terms as Perl itself.
  
  The full text of the license can be found in the
  LICENSE file included with this module.
  
  =cut
FILE_SHAREDIR

    $main::fatpacked{"File/ShareDir/Tarball.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_SHAREDIR_TARBALL';
  package File::ShareDir::Tarball;
  BEGIN {
    $File::ShareDir::Tarball::AUTHORITY = 'cpan:YANICK';
  }
  {
    $File::ShareDir::Tarball::VERSION = '0.2.2';
  }
  # ABSTRACT: Deal transparently with shared files distributed as tarballs
  
  
  use strict;
  use warnings;
  
  use parent qw/ Exporter /;
  
  use Carp;
  
  use File::ShareDir;
  use Archive::Tar;
  use File::Temp qw/ tempdir /;
  use File::chdir;
  
  our @EXPORT_OK   = qw{
      dist_dir dist_file
  };
  our %EXPORT_TAGS = (
      all => [ @EXPORT_OK ],
  );
  
  my $shared_files_tarball = 'shared-files.tar.gz';
  
  # we don't want to extract the same dirs again and 
  # again within a single program
  my %DIR_CACHE;
  
  sub dist_dir {
      my $dist = shift;
  
      return $DIR_CACHE{$dist} if $DIR_CACHE{$dist};
  
      my $dir = File::ShareDir::dist_dir($dist);
  
      # no tarball? Assume regular shared dir
      return $DIR_CACHE{$dist} = $dir 
          unless -f "$dir/$shared_files_tarball";
  
      my $archive = Archive::Tar->new;
      $archive->read("$dir/$shared_files_tarball");
  
      # because that would be a veeery bad idea
      croak "archive '$shared_files_tarball' contains files with absolute path, aborting"
          if grep { m#^/# } $archive->list_files;
  
      my $tmpdir = tempdir( CLEANUP => 1 );
      local $CWD = $tmpdir;
  
      $archive->extract;
  
      return $DIR_CACHE{$dist} = $tmpdir;
  }
  
  sub dist_file {
      my $dist = File::ShareDir::_DIST(shift);
      my $file = File::ShareDir::_FILE(shift);
  
      my $path = dist_dir($dist).'/'.$file;
  
  	return undef unless -e $path;
  
      croak("Found dist_file '$path', but not a file") 
          unless -f $path;
  
      croak("File '$path', no read permissions") 
          unless -r $path;
  
  	return $path;
  }
  
  
  1;
  
  __END__
  
  =pod
  
  =head1 NAME
  
  File::ShareDir::Tarball - Deal transparently with shared files distributed as tarballs
  
  =head1 VERSION
  
  version 0.2.2
  
  =head1 SYNOPSIS
  
      use File::ShareDir::Tarball ':all';
  
      # use exactly like File::ShareDir
      $dir = dist_dir('File-ShareDir');
  
  =head1 DESCRIPTION
  
  If the shared files of a distribution are contained in a
  tarball (see L<Dist::Zilla::Plugin::ShareDir::Tarball> for
  why you would want to do that), automatically 
  extract the archive in a temporary
  directory and return the path to that directory. If called for a regular distribution without a bundle file
  (C<shared-files.tar.gz>), it'll return the original shared dir. 
  In other words,
  from the consumer point of view, it'll behave just like L<File::ShareDir>.
  
  =head1 EXPORT TAGS
  
  =head2 :all
  
  Exports C<dist_dir()> and C<dist_file()>.
  
  =head1 EXPORTABLE FUNCTIONS
  
  =head2 dist_dir( $distribution )
  
  Behaves just like C<dist_dir()> from L<File::ShareDir>.
  
  =head2 dist_file( $distribution, $file )
  
  Behaves just like C<dist_file()> from L<File::ShareDir>.
  
  =head1 SEE ALSO
  
  =over
  
  =item L<Test::File::ShareDir>
  
  To test or use a shared dir that is not deployed yet. 
  
  =item L<Dist::Zilla::Plugin::ShareDir::Tarball>
  
  L<Dist::Zilla> plugin to create the tarball effortlessly.
  
  =item L<Module::Build::CleanInstall>
  
  Provides an alternative to this module by subclassing L<Module::Build> and,
  upon installation, remove the files from previous installations as given in
  the I<packlist>.
  
  =back
  
  =head1 AUTHOR
  
  Yanick Champoux <yanick@babyl.dyndns.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2012 by Yanick Champoux.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
FILE_SHAREDIR_TARBALL

    $main::fatpacked{"File/Slurp/Tiny.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_SLURP_TINY';
  package File::Slurp::Tiny;
  $File::Slurp::Tiny::VERSION = '0.004';
  use strict;
  use warnings;
  
  use Carp 'croak';
  use Exporter 5.57 'import';
  use File::Spec::Functions 'catfile';
  use FileHandle;
  our @EXPORT_OK = qw/read_file read_lines write_file read_dir/;
  
  my $default_layer = $^O eq 'MSWin32' ? ':crlf' : ':unix';
  
  sub read_file {
  	my ($filename, %options) = @_;
  	my $layer = $options{binmode} || $default_layer;
  	my $buf_ref = defined $options{buf_ref} ? $options{buf_ref} : \my $buf;
  
  	open my $fh, "<$layer", $filename or croak "Couldn't open $filename: $!";
  	if (my $size = -s $fh) {
  		my ($pos, $read) = 0;
  		do {
  			defined($read = read $fh, ${$buf_ref}, $size - $pos, $pos) or croak "Couldn't read $filename: $!";
  			$pos += $read;
  		} while ($read && $pos < $size);
  	}
  	else {
  		${$buf_ref} = do { local $/; <$fh> };
  	}
  	close $fh;
  	return if not defined wantarray or $options{buf_ref};
  	return $options{scalar_ref} ? $buf_ref : $buf;
  }
  
  sub read_lines {
  	my ($filename, %options) = @_;
  	my $layer = delete $options{binmode} || ':';
  	
  	open my $fh, "<$layer", $filename or croak "Couldn't open $filename: $!";
  	return <$fh> if not %options;
  	my @buf = <$fh>;
  	close $fh;
  	chomp @buf if $options{chomp};
  	return $options{array_ref} ? \@buf : @buf;
  }
  
  sub write_file {
  	my ($filename, undef, %options) = @_;
  	my $layer = $options{binmode} || $default_layer;
  	my $mode = $options{append} ? '>>' : '>';
  	my $buf_ref = defined $options{buf_ref} ? $options{buf_ref} : \$_[1];
  
  	open my $fh, $mode.$layer, $filename or croak "Couldn't open $filename: $!";
  	$fh->autoflush(1);
  	print $fh ${$buf_ref} or croak "Couldn't write to $filename: $!";
  	close $fh or croak "Couldn't close $filename: $!";
  	return;
  }
  
  sub read_dir {
  	my ($dirname, %options) = @_;
  	opendir my ($dir), $dirname or croak "Could not open $dirname: $!";
  	my @ret = grep { not m/ \A \.\.? \z /x } readdir $dir;
  	@ret = map { catfile($dirname, $_) } @ret if $options{prefix};
  	closedir $dir;
  	return @ret;
  }
  
  1;
  
  # ABSTRACT: A simple, sane and efficient file slurper [DISCOURAGED]
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  File::Slurp::Tiny - A simple, sane and efficient file slurper [DISCOURAGED]
  
  =head1 VERSION
  
  version 0.004
  
  =head1 SYNOPSIS
  
   use File::Slurp::Tiny 'read_file';
   my $content = read_file($filename);
  
  =head1 DISCOURAGED
  
  B<This module is discouraged in favor of L<File::Slurper|File::Slurper>>. While a useful experiment, it turned out to be both too similar to File::Slurp (still containing most problematic features of File::Slurp's interface) and yet not similar enough to be a true drop-in replacement.
  
  Bugs will still be fixed, but new features will probably not be added.
  
  =head1 DESCRIPTION
  
  This module provides functions for fast and correct slurping and spewing. All functions are optionally exported.
  
  =head1 FUNCTIONS
  
  =head2 read_file($filename, %options)
  
  Reads file C<$filename> into a scalar. By default it returns this scalar. Can optionally take these named arguments:
  
  =over 4
  
  =item * binmode
  
  Set the layers to read the file with. The default will be something sensible on your platform.
  
  =item * buf_ref
  
  Pass a reference to a scalar to read the file into, instead of returning it by value. This has performance benefits.
  
  =item * scalar_ref
  
  If set to true, C<read_file> will return a reference to a scalar containing the file content.
  
  =back
  
  =head2 read_lines($filename, %options)
  
  Reads file C<$filename> into a list/array. By default it returns this list. Can optionally take these named arguments:
  
  =over 4
  
  =item * binmode
  
  Set the layers to read the file with. The default will be something sensible on your platform.
  
  =item * array_ref
  
  Pass a reference to an array to read the lines into, instead of returning them by value. This has performance benefits.
  
  =item * chomp
  
  C<chomp> the lines.
  
  =back
  
  =head2 write_file($filename, $content, %options)
  
  Open C<$filename>, and write C<$content> to it. Can optionally take this named argument:
  
  =over 4
  
  =item * binmode
  
  Set the layers to write the file with. The default will be something sensible on your platform.
  
  =back
  
  =head2 read_dir($dirname, %options)
  
  Open C<dirname> and return all entries except C<.> and C<..>. Can optionally take this named argument:
  
  =over 4
  
  =item * prefix
  
  This will prepend C<$dir> to the entries
  
  =back
  
  =head1 SEE ALSO
  
  =over 4
  
  =item * L<Path::Tiny>
  
  A minimalistic abstraction not only around 
  
  =item * L<File::Slurp>
  
  Another file slurping tool.
  
  =back
  
  =head1 AUTHOR
  
  Leon Timmermans <leont@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2013 by Leon Timmermans.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
FILE_SLURP_TINY

    $main::fatpacked{"File/Slurper.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_SLURPER';
  package File::Slurper;
  $File::Slurper::VERSION = '0.008';
  use strict;
  use warnings;
  
  use Carp 'croak';
  use Exporter 5.57 'import';
  our @EXPORT_OK = qw/read_binary read_text read_lines write_binary write_text read_dir/;
  
  sub read_binary {
  	my $filename = shift;
  
  	# This logic is a bit ugly, but gives a significant speed boost
  	# because slurpy readline is not optimized for non-buffered usage
  	open my $fh, '<:unix', $filename or croak "Couldn't open $filename: $!";
  	if (my $size = -s $fh) {
  		my $buf;
  		my ($pos, $read) = 0;
  		do {
  			defined($read = read $fh, ${$buf}, $size - $pos, $pos) or croak "Couldn't read $filename: $!";
  			$pos += $read;
  		} while ($read && $pos < $size);
  		return ${$buf};
  	}
  	else {
  		return do { local $/; <$fh> };
  	}
  }
  
  use constant {
  	CRLF_DEFAULT => $^O eq 'MSWin32',
  	HAS_UTF8_STRICT => scalar do { local $@; eval { require PerlIO::utf8_strict } },
  };
  
  sub _text_layers {
  	my ($encoding, $crlf) = @_;
  	$crlf = CRLF_DEFAULT if $crlf && $crlf eq 'auto';
  
  	if ($encoding =~ /^(latin|iso-8859-)1$/i) {
  		return $crlf ? ':unix:crlf' : ':raw';
  	}
  	elsif (HAS_UTF8_STRICT && $encoding =~ /^utf-?8\b/i) {
  		return $crlf ? ':unix:utf8_strict:crlf' : ':unix:utf8_strict';
  	}
  	else {
  		# non-ascii compatible encodings such as UTF-16 need encoding before crlf
  		return $crlf ? ":raw:encoding($encoding):crlf" : ":raw:encoding($encoding)";
  	}
  }
  
  sub read_text {
  	my ($filename, $encoding, $crlf) = @_;
  	$encoding ||= 'utf-8';
  	my $layer = _text_layers($encoding, $crlf);
  	return read_binary($filename) if $layer eq ':raw';
  
  	local $PerlIO::encoding::fallback = 1;
  	open my $fh, "<$layer", $filename or croak "Couldn't open $filename: $!";
  	return do { local $/; <$fh> };
  }
  
  sub write_text {
  	my ($filename, undef, $encoding, $crlf) = @_;
  	$encoding ||= 'utf-8';
  	my $layer = _text_layers($encoding, $crlf);
  
  	local $PerlIO::encoding::fallback = 1;
  	open my $fh, ">$layer", $filename or croak "Couldn't open $filename: $!";
  	print $fh $_[1] or croak "Couldn't write to $filename: $!";
  	close $fh or croak "Couldn't write to $filename: $!";
  	return;
  }
  
  sub write_binary {
  	return write_text(@_[0,1], 'latin-1');
  }
  
  sub read_lines {
  	my ($filename, $encoding, $crlf, $skip_chomp) = @_;
  	$encoding ||= 'utf-8';
  	my $layer = _text_layers($encoding, $crlf);
  
  	local $PerlIO::encoding::fallback = 1;
  	open my $fh, "<$layer", $filename or croak "Couldn't open $filename: $!";
  	return <$fh> if $skip_chomp;
  	my @buf = <$fh>;
  	close $fh;
  	chomp @buf;
  	return @buf;
  }
  
  sub read_dir {
  	my ($dirname) = @_;
  	opendir my ($dir), $dirname or croak "Could not open $dirname: $!";
  	return grep { not m/ \A \.\.? \z /x } readdir $dir;
  }
  
  1;
  
  # ABSTRACT: A simple, sane and efficient module to slurp a file
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  File::Slurper - A simple, sane and efficient module to slurp a file
  
  =head1 VERSION
  
  version 0.008
  
  =head1 SYNOPSIS
  
   use File::Slurper 'read_text';
   my $content = read_text($filename);
  
  =head1 DESCRIPTION
  
  This module provides functions for fast and correct slurping and spewing. All functions are optionally exported.
  
  =head1 FUNCTIONS
  
  =head2 read_text($filename, $encoding, $crlf)
  
  Reads file C<$filename> into a scalar and decodes it from C<$encoding> (which defaults to UTF-8). If C<$crlf> is true, crlf translation is performed. The default for this argument is off. The special value C<'auto'> will set it to a platform specific default value.
  
  =head2 read_binary($filename)
  
  Reads file C<$filename> into a scalar without any decoding or transformation.
  
  =head2 read_lines($filename, $encoding, $crlf, $skip_chomp)
  
  Reads file C<$filename> into a list/array line-by-line, after decoding from C<$encoding>, optional crlf translation and chomping.
  
  =head2 write_text($filename, $content, $encoding, $crlf)
  
  Writes C<$content> to file C<$filename>, encoding it to C<$encoding> (which defaults to UTF-8). It can also take a C<crlf> argument that works exactly as in read_text.
  
  =head2 write_binary($filename, $content)
  
  Writes C<$content> to file C<$filename> as binary data.
  
  =head2 read_dir($dirname)
  
  Open C<dirname> and return all entries except C<.> and C<..>.
  
  =head1 RATIONALE
  
  This module tries to make it as easy as possible to read and write files correctly and fast. The most correct way of doing this is not always obvious (e.g. L<#83126|https://rt.cpan.org/Public/Bug/Display.html?id=83126>), and just as often the most obvious correct way is not the fastest correct way. This module hides away all such complications behind an easy intuitive interface.
  
  =head1 DEPENDENCIES
  
  This module has an optional dependency on L<PerlIO::utf8_strict|PerlIO::utf8_strict>. Installing this will make UTF-8 encoded IO significantly faster, but should not otherwise affect the operation of this module. This may change into a dependency on the related Unicode::UTF8 in the future.
  
  =head1 SEE ALSO
  
  =over 4
  
  =item * L<Path::Tiny|Path::Tiny>
  
  A minimalistic abstraction handling not only IO but also paths.
  
  =item * L<IO::All|IO::All>
  
  An attempt to expose as many IO related features as possible via a single API.
  
  =item * L<File::Slurp|File::Slurp>
  
  This is previous generation file slurping module. It has a number of issues, as described L<here|http://blogs.perl.org/users/leon_timmermans/2015/08/fileslurp-is-broken-and-wrong.html>
  
  =item * L<File::Slurp::Tiny|File::Slurp::Tiny>
  
  This was my previous attempt at a better file slurping module. It's mostly (but not entirely) a drop-in replacement for File::Slurp, which is both a feature (easy conversion) and a bug (interface issues).
  
  =back
  
  =head1 TODO
  
  =over 4
  
  =item * C<open_text>/C<open_binary>?
  
  =item * C<drain_handle>?
  
  =back
  
  =head1 AUTHOR
  
  Leon Timmermans <leont@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by Leon Timmermans.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
FILE_SLURPER

    $main::fatpacked{"File/Which.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_WHICH';
  package File::Which;
  
  use strict;
  use warnings;
  use Exporter   ();
  use File::Spec ();
  
  # ABSTRACT: Perl implementation of the which utility as an API
  our $VERSION = '1.21'; # VERSION
  
  
  our @ISA       = 'Exporter';
  our @EXPORT    = 'which';
  our @EXPORT_OK = 'where';
  
  use constant IS_VMS => ($^O eq 'VMS');
  use constant IS_MAC => ($^O eq 'MacOS');
  use constant IS_DOS => ($^O eq 'MSWin32' or $^O eq 'dos' or $^O eq 'os2');
  use constant IS_CYG => ($^O eq 'cygwin');
  
  # For Win32 systems, stores the extensions used for
  # executable files
  # For others, the empty string is used
  # because 'perl' . '' eq 'perl' => easier
  my @PATHEXT = ('');
  if ( IS_DOS ) {
    # WinNT. PATHEXT might be set on Cygwin, but not used.
    if ( $ENV{PATHEXT} ) {
      push @PATHEXT, split ';', $ENV{PATHEXT};
    } else {
      # Win9X or other: doesn't have PATHEXT, so needs hardcoded.
      push @PATHEXT, qw{.com .exe .bat};
    }
  } elsif ( IS_VMS ) {
    push @PATHEXT, qw{.exe .com};
  } elsif ( IS_CYG ) {
    # See this for more info
    # http://cygwin.com/cygwin-ug-net/using-specialnames.html#pathnames-exe
    push @PATHEXT, qw{.exe .com};
  }
  
  
  sub which {
    my ($exec) = @_;
  
    return undef unless defined $exec;
    return undef if $exec eq '';
  
    my $all = wantarray;
    my @results = ();
  
    # check for aliases first
    if ( IS_VMS ) {
      my $symbol = `SHOW SYMBOL $exec`;
      chomp($symbol);
      unless ( $? ) {
        return $symbol unless $all;
        push @results, $symbol;
      }
    }
    if ( IS_MAC ) {
      my @aliases = split /\,/, $ENV{Aliases};
      foreach my $alias ( @aliases ) {
        # This has not been tested!!
        # PPT which says MPW-Perl cannot resolve `Alias $alias`,
        # let's just hope it's fixed
        if ( lc($alias) eq lc($exec) ) {
          chomp(my $file = `Alias $alias`);
          last unless $file;  # if it failed, just go on the normal way
          return $file unless $all;
          push @results, $file;
          # we can stop this loop as if it finds more aliases matching,
          # it'll just be the same result anyway
          last;
        }
      }
    }
  
    return $exec
            if !IS_VMS and !IS_MAC and !IS_DOS and $exec =~ /\// and -f $exec and -x $exec;
  
    my @path = File::Spec->path;
    if ( IS_DOS or IS_VMS or IS_MAC ) {
      unshift @path, File::Spec->curdir;
    }
  
    foreach my $base ( map { File::Spec->catfile($_, $exec) } @path ) {
      for my $ext ( @PATHEXT ) {
        my $file = $base.$ext;
  
        # We don't want dirs (as they are -x)
        next if -d $file;
  
        if (
          # Executable, normal case
          -x _
          or (
            # MacOS doesn't mark as executable so we check -e
            IS_MAC
            ||
            (
              ( IS_DOS or IS_CYG )
              and
              grep {
                $file =~ /$_\z/i
              } @PATHEXT[1..$#PATHEXT]
            )
            # DOSish systems don't pass -x on
            # non-exe/bat/com files. so we check -e.
            # However, we don't want to pass -e on files
            # that aren't in PATHEXT, like README.
            and -e _
          )
        ) {
          return $file unless $all;
          push @results, $file;
        }
      }
    }
  
    if ( $all ) {
      return @results;
    } else {
      return undef;
    }
  }
  
  
  sub where {
    # force wantarray
    my @res = which($_[0]);
    return @res;
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  File::Which - Perl implementation of the which utility as an API
  
  =head1 VERSION
  
  version 1.21
  
  =head1 SYNOPSIS
  
   use File::Which;                  # exports which()
   use File::Which qw(which where);  # exports which() and where()
   
   my $exe_path = which 'perldoc';
   
   my @paths = where 'perl';
   # Or
   my @paths = which 'perl'; # an array forces search for all of them
  
  =head1 DESCRIPTION
  
  L<File::Which> finds the full or relative paths to executable programs on
  the system.  This is normally the function of C<which> utility.  C<which> is
  typically implemented as either a program or a built in shell command.  On
  some platforms, such as Microsoft Windows it is not provided as part of the
  core operating system.  This module provides a consistent API to this
  functionality regardless of the underlying platform.
  
  The focus of this module is correctness and portability.  As a consequence
  platforms where the current directory is implicitly part of the search path
  such as Microsoft Windows will find executables in the current directory,
  whereas on platforms such as UNIX where this is not the case executables 
  in the current directory will only be found if the current directory is
  explicitly added to the path.
  
  If you need a portable C<which> on the command line in an environment that
  does not provide it, install L<App::pwhich> which provides a command line
  interface to this API.
  
  =head2 Implementations
  
  L<File::Which> searches the directories of the user's C<PATH> (the current
  implementation uses L<File::Spec#path> to determine the correct C<PATH>),
  looking for executable files having the name specified as a parameter to
  L</which>. Under Win32 systems, which do not have a notion of directly
  executable files, but uses special extensions such as C<.exe> and C<.bat>
  to identify them, C<File::Which> takes extra steps to assure that
  you will find the correct file (so for example, you might be searching for
  C<perl>, it'll try F<perl.exe>, F<perl.bat>, etc.)
  
  =head3 Linux, *BSD and other UNIXes
  
  There should not be any surprises here.  The current directory will not be
  searched unless it is explicitly added to the path.
  
  =head3 Modern Windows (including NT, XP, Vista, 7, 8, 10 etc)
  
  Windows NT has a special environment variable called C<PATHEXT>, which is used
  by the shell to look for executable files. Usually, it will contain a list in
  the form C<.EXE;.BAT;.COM;.JS;.VBS> etc. If C<File::Which> finds such an
  environment variable, it parses the list and uses it as the different
  extensions.
  
  =head3 Cygwin
  
  Cygwin provides a Unix-like environment for Microsoft Windows users.  In most
  ways it works like other Unix and Unix-like environments, but in a few key
  aspects it works like Windows.  As with other Unix environments, the current
  directory is not included in the search unless it is explicitly included in
  the search path.  Like on Windows, files with C<.EXE> or <.BAT> extensions will
  be discovered even if they are not part of the query.  C<.COM> or extensions
  specified using the C<PATHEXT> environment variable will NOT be discovered
  without the fully qualified name, however.
  
  =head3 Windows 95, 98, ME, MS-DOS, OS/2
  
  This set of operating systems don't have the C<PATHEXT> variable, and usually
  you will find executable files there with the extensions C<.exe>, C<.bat> and
  (less likely) C<.com>. C<File::Which> uses this hardcoded list if it's running
  under Win32 but does not find a C<PATHEXT> variable.
  
  As of 2015 none of these platforms are tested frequently (or perhaps ever),
  but the current maintainer is determined not to intentionally remove support
  for older operating systems.
  
  =head3 VMS
  
  Same case as Windows 9x: uses C<.exe> and C<.com> (in that order).
  
  As of 2015 the current maintainer does not test on VMS, and is in fact not
  certain it has ever been tested on VMS.  If this platform is important to you
  and you can help me verify and or support it on that platform please contact
  me.
  
  =head1 FUNCTIONS
  
  =head2 which
  
   my $path = which $short_exe_name;
   my @paths = which $short_exe_name;
  
  Exported by default.
  
  C<$short_exe_name> is the name used in the shell to call the program (for
  example, C<perl>).
  
  If it finds an executable with the name you specified, C<which()> will return
  the absolute path leading to this executable (for example, F</usr/bin/perl> or
  F<C:\Perl\Bin\perl.exe>).
  
  If it does I<not> find the executable, it returns C<undef>.
  
  If C<which()> is called in list context, it will return I<all> the
  matches.
  
  =head2 where
  
   my @paths = where $short_exe_name;
  
  Not exported by default.
  
  Same as L</which> in array context. Same as the
  C<where> utility, will return an array containing all the path names
  matching C<$short_exe_name>.
  
  =head1 CAVEATS
  
  This module has no non-core requirements for Perl 5.6.2 and better.
  
  This module is fully supported back to Perl 5.8.1.  It may work on 5.8.0.  
  It should work on Perl 5.6.x and I may even test on 5.6.2.  I will accept
  patches to maintain compatibility for such older Perls, but you may
  need to fix it on 5.6.x / 5.8.0 and send me a patch.
  
  Not tested on VMS although there is platform specific code
  for those. Anyone who haves a second would be very kind to send me a
  report of how it went.
  
  =head1 SUPPORT
  
  Bugs should be reported via the GitHub issue tracker
  
  L<https://github.com/plicease/File-Which/issues>
  
  For other issues, contact the maintainer.
  
  =head1 SEE ALSO
  
  =over 4
  
  =item L<pwhich>, L<App::pwhich>
  
  Command line interface to this module.
  
  =item L<IPC::Cmd>
  
  Comes with a C<can_run> function with slightly different semantics that
  the traditional UNIX where.  It will find executables in the current
  directory, even though the current directory is not searched for by
  default on Unix.
  
  =item L<Devel::CheckBin>
  
  This module purports to "check that a command is available", but does not
  provide any documentation on how you might use it.
  
  =back
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Per Einar Ellefsen <pereinar@cpan.org>
  
  =item *
  
  Adam Kennedy <adamk@cpan.org>
  
  =item *
  
  Graham Ollis <plicease@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2002 by Per Einar Ellefsen <pereinar@cpan.org>.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
FILE_WHICH

    $main::fatpacked{"File/Write/Rotate.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_WRITE_ROTATE';
  package File::Write::Rotate;
  
  our $DATE = '2016-10-07'; # DATE
  our $VERSION = '0.31'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  # we must not use Log::Any, looping if we are used as log output
  #use Log::Any '$log';
  
  use File::Spec;
  use IO::Compress::Gzip qw(gzip $GzipError);
  use Scalar::Util qw(weaken);
  #use Taint::Runtime qw(untaint is_tainted);
  use Time::HiRes 'time';
  
  our $Debug;
  
  sub new {
      my $class = shift;
      my %args0 = @_;
  
      my %args;
  
      defined($args{dir} = delete $args0{dir})
          or die "Please specify dir";
      defined($args{prefix} = delete $args0{prefix})
          or die "Please specify prefix";
      $args{suffix} = delete($args0{suffix}) // "";
  
      $args{size} = delete($args0{size}) // 0;
  
      $args{period} = delete($args0{period});
      if ($args{period}) {
          $args{period} =~ /\A(daily|day|month|monthly|year|yearly)\z/
              or die "Invalid period, please use daily/monthly/yearly";
      }
  
      for (map {"hook_$_"} qw(before_rotate after_rotate after_create
                              before_write a)) {
          next unless $args0{$_};
          $args{$_} = delete($args0{$_});
          die "Invalid $_, please supply a coderef"
              unless ref($args{$_}) eq 'CODE';
      }
  
      if (!$args{period} && !$args{size}) {
          $args{size} = 10 * 1024 * 1024;
      }
  
      $args{histories} = delete($args0{histories}) // 10;
  
      $args{binmode} = delete($args0{binmode});
  
      $args{buffer_size} = delete($args0{buffer_size});
  
      $args{lock_mode} = delete($args0{lock_mode}) // 'write';
      $args{lock_mode} =~ /\A(none|write|exclusive)\z/
          or die "Invalid lock_mode, please use none/write/exclusive";
  
      $args{rotate_probability} = delete($args0{rotate_probability});
      if (defined $args{rotate_probability}) {
          $args{rotate_probability} > 0 && $args{rotate_probability} < 1.0
              or die "Invalid rotate_probability, must be 0 < x < 1";
      }
  
      if (keys %args0) {
          die "Unknown arguments to new(): ".join(", ", sort keys %args0);
      }
  
      $args{_buffer} = [];
  
      my $self = bless \%args, $class;
  
      $self->{_exclusive_lock} = $self->_get_lock
          if $self->{lock_mode} eq 'exclusive';
  
      $self;
  }
  
  sub buffer_size {
      my $self = shift;
      if (@_) {
          my $old = $self->{buffer_size};
          $self->{buffer_size} = $_[0];
          return $old;
      } else {
          return $self->{buffer_size};
      }
  }
  
  sub handle {
      my $self = shift;
      $self->{_fh};
  }
  
  sub path {
      my $self = shift;
      $self->{_fp};
  }
  
  # file path, without the rotate suffix
  sub _file_path {
      my ($self) = @_;
  
      # _now is calculated every time we access this method
      $self->{_now} = time();
  
      my @lt = localtime($self->{_now});
      $lt[5] += 1900;
      $lt[4]++;
  
      my $period;
      if ($self->{period}) {
          if ($self->{period} =~ /year/i) {
              $period = sprintf("%04d", $lt[5]);
          } elsif ($self->{period} =~ /month/) {
              $period = sprintf("%04d-%02d", $lt[5], $lt[4]);
          } elsif ($self->{period} =~ /day|daily/) {
              $period = sprintf("%04d-%02d-%02d", $lt[5], $lt[4], $lt[3]);
          }
      } else {
          $period = "";
      }
  
      my $path = join(
          '',
          $self->{dir}, '/',
          $self->{prefix},
          length($period) ? ".$period" : "",
          $self->{suffix},
      );
      if (wantarray) {
          return ($path, $period);
      } else {
          return $path;
      }
  }
  
  sub lock_file_path {
      my ($self) = @_;
      return File::Spec->catfile($self->{dir}, $self->{prefix} . '.lck');
  }
  
  sub _get_lock {
      my ($self) = @_;
      return undef if $self->{lock_mode} eq 'none';
      return $self->{_weak_lock} if defined($self->{_weak_lock});
  
      require File::Flock::Retry;
      my $lock = File::Flock::Retry->lock($self->lock_file_path);
      $self->{_weak_lock} = $lock;
      weaken $self->{_weak_lock};
      return $lock;
  }
  
  # will return \@files. each entry is [filename without compress suffix,
  # rotate_suffix (for sorting), period (for sorting), compress suffix (for
  # renaming back)]
  sub _get_files {
      my ($self) = @_;
  
      opendir my ($dh), $self->{dir} or do {
          warn "Can't opendir '$self->{dir}': $!";
          return;
      };
  
      my @files;
      while (my $e = readdir($dh)) {
          my $cs = $1 if $e =~ s/(\.gz)\z//; # compress suffix
          next unless $e =~ /\A\Q$self->{prefix}\E
                             (?:\. (?<period>\d{4}(?:-\d\d(?:-\d\d)?)?) )?
                             \Q$self->{suffix}\E
                             (?:\. (?<rotate_suffix>\d+) )?
                             \z
                            /x;
          push @files,
            [ $e, $+{rotate_suffix} // 0, $+{period} // "", $cs // "" ];
      }
      closedir($dh);
  
      [ sort { $a->[2] cmp $b->[2] || $b->[1] <=> $a->[1] } @files ];
  }
  
  # rename (increase rotation suffix) and keep only n histories. note: failure in
  # rotating should not be fatal, we just warn and return.
  sub _rotate_and_delete {
      my ($self, %opts) = @_;
  
      my $delete_only = $opts{delete_only};
      my $lock = $self->_get_lock;
    CASE:
      {
          my $files = $self->_get_files or last CASE;
  
          # is there a compression process in progress? this is marked by the
          # existence of <prefix>-compress.pid PID file.
          #
          # XXX check validity of PID file, otherwise a stale PID file will always
          # prevent rotation to be done
          if (-f "$self->{dir}/$self->{prefix}-compress.pid") {
              warn "Compression is in progress, rotation is postponed";
              last CASE;
          }
  
          $self->{hook_before_rotate}->($self, [map {$_->[0]} @$files])
              if $self->{hook_before_rotate};
  
          my @deleted;
          my @renamed;
  
          my $i;
          my $dir = $self->{dir};
          my $rotating_period = @$files ? $files->[-1][2] : undef;
          for my $f (@$files) {
              my ($orig, $rs, $period, $cs) = @$f;
              $i++;
  
              #say "DEBUG: is_tainted \$dir? ".is_tainted($dir);
              #say "DEBUG: is_tainted \$orig? ".is_tainted($orig);
              #say "DEBUG: is_tainted \$cs? ".is_tainted($cs);
  
              # TODO actually, it's more proper to taint near the source (in this
              # case, _get_files)
              #untaint \$orig;
              ($orig) = $orig =~ /(.*)/s; # we use this instead, no module needed
  
              if ($i <= @$files - $self->{histories}) {
                  say "DEBUG: Deleting old rotated file $dir/$orig$cs ..."
                      if $Debug;
                  if (unlink "$dir/$orig$cs") {
                      push @deleted, "$orig$cs";
                  } else {
                      warn "Can't delete $dir/$orig$cs: $!";
                  }
                  next;
              }
              if (!$delete_only && defined($rotating_period) && $period eq $rotating_period) {
                  my $new = $orig;
                  if ($rs) {
                      $new =~ s/\.(\d+)\z/"." . ($1+1)/e;
                  } else {
                      $new .= ".1";
                  }
                  if ($new ne $orig) {
                      say "DEBUG: Renaming rotated file $dir/$orig$cs -> ".
                          "$dir/$new$cs ..." if $Debug;
                      if (rename "$dir/$orig$cs", "$dir/$new$cs") {
                          push @renamed, "$new$cs";
                      } else {
                          warn "Can't rename '$dir/$orig$cs' -> '$dir/$new$cs': $!";
                      }
                  }
              }
          }
  
          $self->{hook_after_rotate}->($self, \@renamed, \@deleted)
              if $self->{hook_after_rotate};
      } # CASE
  }
  
  sub _open {
      my $self = shift;
  
      my ($fp, $period) = $self->_file_path;
      open $self->{_fh}, ">>", $fp or die "Can't open '$fp': $!";
      if (defined $self->{binmode}) {
          binmode $self->{_fh}, $self->{binmode}
            or die "Can't set PerlIO layer on '$fp': $!";
      }
      my $oldfh = select $self->{_fh};
      $| = 1;
      select $oldfh;    # set autoflush
      $self->{_fp} = $fp;
      $self->{hook_after_create}->($self) if $self->{hook_after_create};
  }
  
  # (re)open file and optionally rotate if necessary
  sub _rotate_and_open {
  
      my $self = shift;
      my ($do_open, $do_rotate) = @_;
      my $fp;
      my %rotate_params;
  
    CASE:
      {
          # if instructed, only do rotate some of the time to shave overhead
          if ($self->{rotate_probability} && $self->{_fh}) {
              last CASE if rand() > $self->{rotate_probability};
          }
  
          $fp = $self->_file_path;
          unless (-e $fp) {
              $do_open++;
              $do_rotate++;
              $rotate_params{delete_only} = 1;
              last CASE;
          }
  
          # file is not opened yet, open
          unless ($self->{_fh}) {
              $self->_open;
          }
  
          # period has changed, rotate
          if ($self->{_fp} ne $fp) {
              $do_rotate++;
              $rotate_params{delete_only} = 1;
              last CASE;
          }
  
          # check whether size has been exceeded
          my $inode;
  
          if ($self->{size} > 0) {
  
              my @st   = stat($self->{_fh});
              my $size = $st[7];
              $inode = $st[1];
  
              if ($size >= $self->{size}) {
                  say "DEBUG: Size of $self->{_fp} is $size, exceeds $self->{size}, rotating ..."
                      if $Debug;
                  $do_rotate++;
                  last CASE;
              } else {
                  # stat the current file (not our handle _fp)
                  my @st = stat($fp);
                  die "Can't stat '$fp': $!" unless @st;
                  my $finode = $st[1];
  
                  # check whether other process has rename/rotate under us (for
                  # example, 'prefix' has been moved to 'prefix.1'), in which case
                  # we need to reopen
                  if (defined($inode) && $finode != $inode) {
                      $do_open++;
                  }
              }
  
          }
      } # CASE
  
      $self->_rotate_and_delete(%rotate_params) if $do_rotate;
      $self->_open if $do_rotate || $do_open;    # (re)open
  }
  
  sub write {
      my $self = shift;
  
      # the buffering implementation is currently pretty naive. it assume any
      # die() as a write failure and store the message to buffer.
  
      # FYI: if privilege is dropped from superuser, the failure is usually at
      # locking the lock file (permission denied).
  
      my @msg = (map( {@$_} @{ $self->{_buffer} } ), @_);
  
      eval {
          my $lock = $self->_get_lock;
  
          $self->_rotate_and_open;
  
          $self->{hook_before_write}->($self, \@msg, $self->{_fh})
              if $self->{hook_before_write};
  
          print { $self->{_fh} } @msg;
          $self->{_buffer} = [];
  
      };
      my $err = $@;
  
      if ($err) {
          if (($self->{buffer_size} // 0) > @{ $self->{_buffer} }) {
              # put message to buffer temporarily
              push @{ $self->{_buffer} }, [@_];
          } else {
              # buffer is already full, let's dump the buffered + current message
              # to the die message anyway.
              die join(
                  "",
                  "Can't write",
                  (
                      @{ $self->{_buffer} }
                      ? " (buffer is full, "
                        . scalar(@{ $self->{_buffer} })
                        . " message(s))"
                      : ""
                  ),
                  ": $err, message(s)=",
                  @msg
              );
          }
      }
  }
  
  sub compress {
      my ($self) = shift;
  
      my $lock           = $self->_get_lock;
      my $files_ref        = $self->_get_files;
      my $done_compression = 0;
  
      if (@{$files_ref}) {
          require Proc::PID::File;
  
          my $pid = Proc::PID::File->new(
              dir    => $self->{dir},
              name   => "$self->{prefix}-compress",
              verify => 1,
          );
          my $latest_period = $files_ref->[-1][2];
  
          if ($pid->alive) {
              warn "Another compression is in progress";
          } else {
              my @tocompress;
              #use DD; dd $self;
              for my $file_ref (@{$files_ref}) {
                  my ($orig, $rs, $period, $cs) = @{ $file_ref };
                  #say "D:compress: orig=<$orig> rs=<$rs> period=<$period> cs=<$cs>";
                  next if $cs; # already compressed
                  next if !$self->{period} && !$rs; # not old file
                  next if  $self->{period} && $period eq $latest_period; # not old file
                  push @tocompress, File::Spec->catfile($self->{dir}, $orig);
              }
  
              if (@tocompress) {
                  for my $file (@tocompress) {
                      gzip($file => "$file.gz")
                          or do { warn "gzip failed: $GzipError\n"; next };
                      unlink $file;
                  }
                  $done_compression = 1;
              }
          }
      }
  
      return $done_compression;
  
  }
  
  sub DESTROY {
      my ($self) = @_;
  
      # Proc::PID::File's DESTROY seem to create an empty PID file, remove it.
      unlink "$self->{dir}/$self->{prefix}-compress.pid";
  }
  
  1;
  
  # ABSTRACT: Write to files that archive/rotate themselves
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  File::Write::Rotate - Write to files that archive/rotate themselves
  
  =head1 VERSION
  
  This document describes version 0.31 of File::Write::Rotate (from Perl distribution File-Write-Rotate), released on 2016-10-07.
  
  =head1 SYNOPSIS
  
   use File::Write::Rotate;
  
   my $fwr = File::Write::Rotate->new(
       dir          => '/var/log',    # required
       prefix       => 'myapp',       # required
       #suffix      => '.log',        # default is ''
       size         => 25*1024*1024,  # default is 10MB, unless period is set
       histories    => 12,            # default is 10
       #buffer_size => 100,           # default is none
   );
  
   # write, will write to /var/log/myapp.log, automatically rotate old log files
   # to myapp.log.1 when myapp.log reaches 25MB. will keep old log files up to
   # myapp.log.12.
   $fwr->write("This is a line\n");
   $fwr->write("This is", " another line\n");
  
  To compressing old log files:
  
   $fwr->compress;
  
  This is usually done in a separate process, because it potentially takes a long
  time if the files to compress are large; we are rotating automatically in
  write() so doing automatic compression too would annoyingly block writer for a
  potentially long time.
  
  =head1 DESCRIPTION
  
  This module can be used to write to file, usually for logging, that can rotate
  itself. File will be opened in append mode. By default, locking will be done to
  avoid conflict when there are multiple writers. Rotation can be done by size
  (after a certain size is reached), by time (daily/monthly/yearly), or both.
  
  I first wrote this module for logging script STDERR output to files (see
  L<Tie::Handle::FileWriteRotate>).
  
  =for Pod::Coverage ^(file_path|DESTROY)$
  
  =head1 ATTRIBUTES
  
  =head2 buffer_size => int
  
  Get or set buffer size. If set to a value larger than 0, then when a write()
  failed, instead of dying, the message will be stored in an internal buffer first
  (a regular Perl array). When the number of items in the buffer exceeds this
  size, then write() will die upon failure. Otherwise, every write() will try to
  flush the buffer.
  
  Can be used for example when a program runs as superuser/root then temporarily
  drops privilege to a normal user. During this period, logging can fail because
  the program cannot lock the lock file or write to the logging directory. Before
  dropping privilege, the program can set buffer_size to some larger-than-zero
  value to hold the messages emitted during dropping privilege. The next write()
  as the superuser/root will succeed and flush the buffer to disk (provided there
  is no other error condition, of course).
  
  =head2 path => str (ro)
  
  Current file's path.
  
  =head2 handle => (ro)
  
  Current file handle. You should not use this directly, but use write() instead.
  This attribute is provided for special circumstances (e.g. in hooks, see example
  in the hook section).
  
  =head2 hook_before_write => code
  
  Will be called by write() before actually writing to filehandle (but after
  locking is done). Code will be passed ($self, \@msgs, $fh) where @msgs is an
  array of strings to be written (the contents of buffer, if any, plus arguments
  passed to write()) and $fh is the filehandle.
  
  =head2 hook_before_rotate => code
  
  Will be called by the rotating routine before actually doing rotating. Code will
  be passed ($self).
  
  This can be used to write a footer to the end of each file, e.g.:
  
   # hook_before_rotate
   my ($self) = @_;
   my $fh = $self->handle;
   print $fh "Some footer\n";
  
  Since this hook is indirectly called by write(), locking is already done.
  
  =head2 hook_after_rotate => code
  
  Will be called by the rotating routine after the rotating process. Code will be
  passed ($self, \@renamed, \@deleted) where @renamed is array of new filenames
  that have been renamed, @deleted is array of new filenames that have been
  deleted.
  
  =head2 hook_after_create => code
  
  Will be called by after a new file is created. Code will be passed ($self).
  
  This hook can be used to write a header to each file, e.g.:
  
   # hook_after_create
   my ($self) = @_;
   my $fh $self->handle;
   print $fh "header\n";
  
  Since this is called indirectly by write(), locking is also already done.
  
  =head2 binmode => str
  
  Will call C<binmode()> (see L<perlfunc>) on the opened file handle. With this
  option you can set binary mode (e.g. on Windows) or set PerlIO layer(s).
  
  =head1 METHODS
  
  =head2 $obj = File::Write::Rotate->new(%args)
  
  Create new object. Known arguments:
  
  =over
  
  =item * dir => STR (required)
  
  Directory to put the files in.
  
  =item * prefix => STR (required)
  
  Name of files. The files will be named like the following:
  
   <prefix><period><suffix><rotate_suffix>
  
  C<< <period> >> will only be given if the C<period> argument is set. If
  C<period> is set to C<yearly>, C<< <period> >> will be C<YYYY> (4-digit year).
  If C<period> is C<monthly>, C<< <period> >> will be C<YYYY-MM> (4-digit year and
  2-digit month). If C<period> is C<daily>, C<< <period> >> will be C<YYYY-MM-DD>
  (4-digit year, 2-digit month, and 2-digit day).
  
  C<< <rotate_suffix> >> is either empty string for current file; or C<.1>, C<.2>
  and so on for rotated files. C<.1> is the most recent rotated file, C<.2> is the
  next most recent, and so on.
  
  An example, with C<prefix> set to C<myapp>:
  
   myapp         # current file
   myapp.1       # most recently rotated
   myapp.2       # the next most recently rotated
  
  With C<prefix> set to C<myapp>, C<period> set to C<monthly>, C<suffix> set to
  C<.log>:
  
   myapp.2012-12.log     # file name for december 2012
   myapp.2013-01.log     # file name for january 2013
  
  Like previous, but additionally with C<size> also set (which will also rotate
  each period file if it exceeds specified size):
  
   myapp.2012-12.log     # file(s) for december 2012
   myapp.2012-12.log.1
   myapp.2012-12.log.2
   myapp.2013-01.log     # file(s) for january 2013
  
  All times will use local time, so you probably want to set C<TZ> environment
  variable or equivalent methods to set time zone.
  
  =item * suffix => STR (default: '')
  
  Suffix to give to file names, usually file extension like C<.log>. See C<prefix>
  for more details.
  
  If you use a yearly period, setting suffix is advised to avoid ambiguity with
  rotate suffix (for example, is C<myapp.2012> the current file for year 2012 or
  file with C<2012> rotate suffix?)
  
  =item * size => INT (default: 10*1024*1024)
  
  Maximum file size, in bytes, before rotation is triggered. The default is 10MB
  (10*1024*1024) I<if> C<period> is not set. If C<period> is set, no default for
  C<size> is provided, which means files will not be rotated for size (only for
  period).
  
  =item * period => STR
  
  Can be set to either C<daily>, C<monthly>, or C<yearly>. If set, will
  automatically rotate after period change. See C<prefix> for more details.
  
  =item * histories => INT (default: 10)
  
  Number of rotated files to keep. After the number of files exceeds this, the
  oldest one will be deleted. 0 means not to keep any history, 1 means to only
  keep C<.1> file, and so on.
  
  =item * buffer_size => INT (default: 0)
  
  Set initial value of buffer. See the C<buffer_size> attribute for more
  information.
  
  =item * lock_mode => STR (default: 'write')
  
  Can be set to either C<none>, C<write>, or C<exclusive>. C<none> disables
  locking and increases write performance, but should only be used when there is
  only one writer. C<write> acquires and holds the lock for each write.
  C<exclusive> acquires the lock at object creation and holds it until the the
  object is destroyed.
  
  Lock file is named C<< <prefix> >>C<.lck>. Will wait for up to 1 minute to
  acquire lock, will die if failed to acquire lock.
  
  =item * hook_before_write => CODE
  
  =item * hook_before_rotate => CODE
  
  =item * hook_after_rotate => CODE
  
  =item * hook_after_create => CODE
  
  See L</ATTRIBUTES>.
  
  =item * buffer_size => int
  
  =item * rotate_probability => float (between 0 < x < 1)
  
  If set, instruct to only check for rotation under a certain probability, for
  example if value is set to 0.1 then will only check for rotation 10% of the
  time.
  
  =back
  
  =head2 lock_file_path => STR
  
  Returns a string representing the complete pathname to the lock file, based
  on C<dir> and C<prefix> attributes.
  
  =head2 $fwr->write(@args)
  
  Write to file. Will automatically rotate file if period changes or file size
  exceeds specified limit. When rotating, will only keep a specified number of
  histories and delete the older ones.
  
  Does not append newline so you'll have to do it yourself.
  
  =head2 $fwr->compress
  
  Compress old rotated files and remove the uncompressed originals. Currently uses
  L<IO::Compress::Gzip> to do the compression. Extension given to compressed file
  is C<.gz>.
  
  Will not lock writers, but will create C<< <prefix> >>C<-compress.pid> PID file
  to prevent multiple compression processes running and to signal the writers to
  postpone rotation.
  
  After compression is finished, will remove the PID file, so rotation can be done
  again on the next C<write()> if necessary.
  
  =head1 FAQ
  
  =head2 Why use autorotating file?
  
  Mainly convenience and low maintenance. You no longer need a separate rotator
  process like the Unix B<logrotate> utility (which when accidentally disabled or
  misconfigured will cause your logs to stop being rotated and grow indefinitely).
  
  =head2 What is the downside of using FWR (and LDFR)?
  
  Mainly (significant) performance overhead. At (almost) every C<write()>, FWR
  needs to check file sizes and/or dates for rotation. Under default configuration
  (where C<lock_mode> is C<write>), it also performs locking on each C<write()> to
  make it safe to use with multiple processes. Below is a casual benchmark to give
  a sense of the overhead, tested on my Core i5-2400 3.1GHz desktop:
  
  Writing lines in the size of ~ 200 bytes, raw writing to disk (SSD) has the
  speed of around 3.4mil/s, while using FWR it goes down to around ~13k/s. Using
  C<lock_mode> C<none> or C<exclusive>, the speed is ~52k/s.
  
  However, this is not something you'll notice or need to worry about unless
  you're writing near that speed.
  
  If you need more speed, you can try setting C<rotate_probability> which will
  cause FWR to only check for rotation probabilistically, e.g. if you set this to
  0.1 then checks will only be done in about 1 of 10 writes. This can
  significantly reduce the overhead and increase write speed several times (e.g.
  5-8 times), but understand that this will make the writes "overflow" a bit, e.g.
  file sizes will exceed for a bit if you do size-based rotation. More suitable if
  you only do size-based rotation since it is usually okay to exceed sizes for a
  bit.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/File-Write-Rotate>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-File-Write-Rotate>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=File-Write-Rotate>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Log::Dispatch::FileRotate>, which inspires this module. Differences between
  File::Write::Rotate (FWR) and Log::Dispatch::FileRotate (LDFR) are as follows:
  
  =over
  
  =item * FWR is not part of the L<Log::Dispatch> family.
  
  This makes FWR more general to use.
  
  For using together with Log::Dispatch/Log4perl, I have also written
  L<Log::Dispatch::FileWriteRotate> which is a direct (although not a perfect
  drop-in) replacement for Log::Dispatch::FileRotate.
  
  =item * Secondly, FWR does not use L<Date::Manip>.
  
  Date::Manip is relatively large (loading Date::Manip 6.37 equals to loading 34
  files and ~ 22k lines; while FWR itself is only < 1k lines!)
  
  As a consequence of this, FWR does not support DatePattern; instead, FWR
  replaces it with a simple daily/monthly/yearly period.
  
  =item * And lastly, FWR supports compressing and rotating compressed old files.
  
  Using separate processes like the Unix B<logrotate> utility means having to deal
  with yet another race condition. FWR takes care of that for you (see the
  compress() method). You also have the option to do file compression in the same
  script/process if you want, which is convenient.
  
  =back
  
  There is no significant overhead difference between FWR and LDFR (FWR is
  slightly faster than LDFR on my testing).
  
  L<Tie::Handle::FileWriteRotate> and Log::Dispatch::FileWriteRotate, which use
  this module.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
FILE_WRITE_ROTATE

    $main::fatpacked{"File/chdir.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FILE_CHDIR';
  package File::chdir;
  use 5.004;
  use strict;
  use vars qw($VERSION @ISA @EXPORT $CWD @CWD);
  # ABSTRACT: a more sensible way to change directories
  
  our $VERSION = '0.1010';
  
  require Exporter;
  @ISA = qw(Exporter);
  @EXPORT = qw(*CWD);
  
  use Carp;
  use Cwd 3.16;
  use File::Spec::Functions 3.27 qw/canonpath splitpath catpath splitdir catdir/;
  
  tie $CWD, 'File::chdir::SCALAR' or die "Can't tie \$CWD";
  tie @CWD, 'File::chdir::ARRAY'  or die "Can't tie \@CWD";
  
  sub _abs_path {
      # Otherwise we'll never work under taint mode.
      my($cwd) = Cwd::getcwd =~ /(.*)/s;
      # Run through File::Spec, since everything else uses it
      return canonpath($cwd);
  }
  
  # splitpath but also split directory
  sub _split_cwd {
      my ($vol, $dir) = splitpath(_abs_path, 1);
      my @dirs = splitdir( $dir );
      shift @dirs; # get rid of leading empty "root" directory
      return ($vol, @dirs);
  }
  
  # catpath, but take list of directories
  # restore the empty root dir and provide an empty file to avoid warnings
  sub _catpath {
      my ($vol, @dirs) = @_;
      return catpath($vol, catdir(q{}, @dirs), q{});
  }
  
  sub _chdir {
      # Untaint target directory
      my ($new_dir) = $_[0] =~ /(.*)/s;
  
      local $Carp::CarpLevel = $Carp::CarpLevel + 1;
      if ( ! CORE::chdir($new_dir) ) {
          croak "Failed to change directory to '$new_dir': $!";
      };
      return 1;
  }
  
  {
      package File::chdir::SCALAR;
      use Carp;
  
      BEGIN {
          *_abs_path = \&File::chdir::_abs_path;
          *_chdir = \&File::chdir::_chdir;
          *_split_cwd = \&File::chdir::_split_cwd;
          *_catpath = \&File::chdir::_catpath;
      }
  
      sub TIESCALAR {
          bless [], $_[0];
      }
  
      # To be safe, in case someone chdir'd out from under us, we always
      # check the Cwd explicitly.
      sub FETCH {
          return _abs_path;
      }
  
      sub STORE {
          return unless defined $_[1];
          _chdir($_[1]);
      }
  }
  
  
  {
      package File::chdir::ARRAY;
      use Carp;
  
      BEGIN {
          *_abs_path = \&File::chdir::_abs_path;
          *_chdir = \&File::chdir::_chdir;
          *_split_cwd = \&File::chdir::_split_cwd;
          *_catpath = \&File::chdir::_catpath;
      }
  
      sub TIEARRAY {
          bless {}, $_[0];
      }
  
      sub FETCH {
          my($self, $idx) = @_;
          my ($vol, @cwd) = _split_cwd;
          return $cwd[$idx];
      }
  
      sub STORE {
          my($self, $idx, $val) = @_;
  
          my ($vol, @cwd) = _split_cwd;
          if( $self->{Cleared} ) {
              @cwd = ();
              $self->{Cleared} = 0;
          }
  
          $cwd[$idx] = $val;
          my $dir = _catpath($vol,@cwd);
  
          _chdir($dir);
          return $cwd[$idx];
      }
  
      sub FETCHSIZE {
          my ($vol, @cwd) = _split_cwd;
          return scalar @cwd;
      }
      sub STORESIZE {}
  
      sub PUSH {
          my($self) = shift;
  
          my $dir = _catpath(_split_cwd, @_);
          _chdir($dir);
          return $self->FETCHSIZE;
      }
  
      sub POP {
          my($self) = shift;
  
          my ($vol, @cwd) = _split_cwd;
          my $popped = pop @cwd;
          my $dir = _catpath($vol,@cwd);
          _chdir($dir);
          return $popped;
      }
  
      sub SHIFT {
          my($self) = shift;
  
          my ($vol, @cwd) = _split_cwd;
          my $shifted = shift @cwd;
          my $dir = _catpath($vol,@cwd);
          _chdir($dir);
          return $shifted;
      }
  
      sub UNSHIFT {
          my($self) = shift;
  
          my ($vol, @cwd) = _split_cwd;
          my $dir = _catpath($vol, @_, @cwd);
          _chdir($dir);
          return $self->FETCHSIZE;
      }
  
      sub CLEAR  {
          my($self) = shift;
          $self->{Cleared} = 1;
      }
  
      sub SPLICE {
          my $self = shift;
          my $offset = shift || 0;
          my $len = shift || $self->FETCHSIZE - $offset;
          my @new_dirs = @_;
  
          my ($vol, @cwd) = _split_cwd;
          my @orig_dirs = splice @cwd, $offset, $len, @new_dirs;
          my $dir = _catpath($vol, @cwd);
          _chdir($dir);
          return @orig_dirs;
      }
  
      sub EXTEND { }
      sub EXISTS {
          my($self, $idx) = @_;
          return $self->FETCHSIZE >= $idx ? 1 : 0;
      }
  
      sub DELETE {
          my($self, $idx) = @_;
          croak "Can't delete except at the end of \@CWD"
              if $idx < $self->FETCHSIZE - 1;
          local $Carp::CarpLevel = $Carp::CarpLevel + 1;
          $self->POP;
      }
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  File::chdir - a more sensible way to change directories
  
  =head1 VERSION
  
  version 0.1010
  
  =head1 SYNOPSIS
  
    use File::chdir;
  
    $CWD = "/foo/bar";     # now in /foo/bar
    {
        local $CWD = "/moo/baz";  # now in /moo/baz
        ...
    }
  
    # still in /foo/bar!
  
  =head1 DESCRIPTION
  
  Perl's C<chdir()> has the unfortunate problem of being very, very, very
  global.  If any part of your program calls C<chdir()> or if any library
  you use calls C<chdir()>, it changes the current working directory for
  the *whole* program.
  
  This sucks.
  
  File::chdir gives you an alternative, C<$CWD> and C<@CWD>.  These two
  variables combine all the power of C<chdir()>, L<File::Spec> and L<Cwd>.
  
  =head1 $CWD
  
  Use the C<$CWD> variable instead of C<chdir()> and Cwd.
  
      use File::chdir;
      $CWD = $dir;  # just like chdir($dir)!
      print $CWD;   # prints the current working directory
  
  It can be localized, and it does the right thing.
  
      $CWD = "/foo";      # it's /foo out here.
      {
          local $CWD = "/bar";  # /bar in here
      }
      # still /foo out here!
  
  C<$CWD> always returns the absolute path in the native form for the
  operating system.
  
  C<$CWD> and normal C<chdir()> work together just fine.
  
  =head1 @CWD
  
  C<@CWD> represents the current working directory as an array, each
  directory in the path is an element of the array.  This can often make
  the directory easier to manipulate, and you don't have to fumble with
  C<File::Spec->splitpath> and C<File::Spec->catdir> to make portable code.
  
    # Similar to chdir("/usr/local/src/perl")
    @CWD = qw(usr local src perl);
  
  pop, push, shift, unshift and splice all work.  pop and push are
  probably the most useful.
  
    pop @CWD;                 # same as chdir(File::Spec->updir)
    push @CWD, 'some_dir'     # same as chdir('some_dir')
  
  C<@CWD> and C<$CWD> both work fine together.
  
  *NOTE* Due to a perl bug you can't localize C<@CWD>.  See L</CAVEATS> for a work around.
  
  =head1 EXAMPLES
  
  (We omit the C<use File::chdir> from these examples for terseness)
  
  Here's C<$CWD> instead of C<chdir()>:
  
      $CWD = 'foo';           # chdir('foo')
  
  and now instead of Cwd.
  
      print $CWD;             # use Cwd;  print Cwd::abs_path
  
  you can even do zsh style C<cd foo bar>
  
      $CWD = '/usr/local/foo';
      $CWD =~ s/usr/var/;
  
  if you want to localize that, make sure you get the parens right
  
      {
          (local $CWD) =~ s/usr/var/;
          ...
      }
  
  It's most useful for writing polite subroutines which don't leave the
  program in some strange directory:
  
      sub foo {
          local $CWD = 'some/other/dir';
          ...do your work...
      }
  
  which is much simpler than the equivalent:
  
      sub foo {
          use Cwd;
          my $orig_dir = Cwd::getcwd;
          chdir('some/other/dir');
  
          ...do your work...
  
          chdir($orig_dir);
      }
  
  C<@CWD> comes in handy when you want to start moving up and down the
  directory hierarchy in a cross-platform manner without having to use
  File::Spec.
  
      pop @CWD;                   # chdir(File::Spec->updir);
      push @CWD, 'some', 'dir'    # chdir(File::Spec->catdir(qw(some dir)));
  
  You can easily change your parent directory:
  
      # chdir from /some/dir/bar/moo to /some/dir/foo/moo
      $CWD[-2] = 'foo';
  
  =head1 CAVEATS
  
  =head2 C<local @CWD> does not work.
  
  C<local @CWD> will not localize C<@CWD>.  This is a bug in Perl, you
  can't localize tied arrays.  As a work around localizing $CWD will
  effectively localize @CWD.
  
      {
          local $CWD;
          pop @CWD;
          ...
      }
  
  =head2 Assigning to C<@CWD> calls C<chdir()> for each element
  
      @CWD = qw/a b c d/;
  
  Internally, Perl clears C<@CWD> and assigns each element in turn.  Thus, this
  code above will do this:
  
      chdir 'a';
      chdir 'a/b';
      chdir 'a/b/c';
      chdir 'a/b/c/d';
  
  Generally, avoid assigning to C<@CWD> and just use push and pop instead.
  
  =head2 Volumes not handled
  
  There is currently no way to change the current volume via File::chdir.
  
  =head1 NOTES
  
  C<$CWD> returns the current directory using native path separators, i.e. \
  on Win32.  This ensures that C<$CWD> will compare correctly with directories
  created using File::Spec.  For example:
  
      my $working_dir = File::Spec->catdir( $CWD, "foo" );
      $CWD = $working_dir;
      doing_stuff_might_chdir();
      is( $CWD, $working_dir, "back to original working_dir?" );
  
  Deleting the last item of C<@CWD> will act like a pop.  Deleting from the
  middle will throw an exception.
  
      delete @CWD[-1]; # OK
      delete @CWD[-2]; # Dies
  
  What should %CWD do?  Something with volumes?
  
      # chdir to C:\Program Files\Sierra\Half Life ?
      $CWD{C} = '\\Program Files\\Sierra\\Half Life';
  
  =head1 DIAGNOSTICS
  
  If an error is encountered when changing C<$CWD> or C<@CWD>, one of
  the following exceptions will be thrown:
  
  * ~Can't delete except at the end of @CWD~
  * ~Failed to change directory to '$dir'~
  
  =head1 HISTORY
  
  Michael wanted C<local chdir> to work.  p5p didn't.  But it wasn't over!
  Was it over when the Germans bombed Pearl Harbor?  Hell, no!
  
  Abigail and/or Bryan Warnock suggested the C<$CWD> thing (Michael forgets
  which).  They were right.
  
  The C<chdir()> override was eliminated in 0.04.
  
  David became co-maintainer with 0.06_01 to fix some chronic
  Win32 path bugs.
  
  As of 0.08, if changing C<$CWD> or C<@CWD> fails to change the directory, an
  error will be thrown.
  
  =head1 SEE ALSO
  
  L<File::pushd>, L<File::Spec>, L<Cwd>, L<perlfunc/chdir>,
  "Animal House" L<http://www.imdb.com/title/tt0077975/quotes>
  
  =for :stopwords cpan testmatrix url annocpan anno bugtracker rt cpants kwalitee diff irc mailto metadata placeholders metacpan
  
  =head1 SUPPORT
  
  =head2 Bugs / Feature Requests
  
  Please report any bugs or feature requests through the issue tracker
  at L<https://github.com/dagolden/File-chdir/issues>.
  You will be notified automatically of any progress on your issue.
  
  =head2 Source Code
  
  This is open source software.  The code repository is available for
  public review and contribution under the terms of the license.
  
  L<https://github.com/dagolden/File-chdir>
  
    git clone https://github.com/dagolden/File-chdir.git
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  David Golden <dagolden@cpan.org>
  
  =item *
  
  Michael G. Schwern <schwern@pobox.com>
  
  =back
  
  =head1 CONTRIBUTOR
  
  =for stopwords Joel Berger
  
  Joel Berger <joel.a.berger@gmail.com>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by Michael G. Schwern and David Golden.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
FILE_CHDIR

    $main::fatpacked{"Finance/Bank/ID/BCA.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FINANCE_BANK_ID_BCA';
  package Finance::Bank::ID::BCA;
  
  our $DATE = '2017-05-16'; # DATE
  our $VERSION = '0.45'; # VERSION
  
  use 5.010001;
  use Moo;
  use DateTime;
  use Log::Any::IfLOG '$log';
  
  extends 'Finance::Bank::ID::Base';
  
  has _variant => (is => 'rw'); # bisnis or perorangan
  
  sub BUILD {
      my ($self, $args) = @_;
  
      $self->site("https://ibank.klikbca.com") unless $self->site;
      $self->https_host("ibank.klikbca.com")   unless $self->https_host;
  }
  
  sub _req {
      my ($self, @args) = @_;
  
      # 2012-03-12 - KlikBCA server since a few week ago rejects TE request
      # header, so we do not send them.
      local @LWP::Protocol::http::EXTRA_SOCK_OPTS =
          @LWP::Protocol::http::EXTRA_SOCK_OPTS;
      push(@LWP::Protocol::http::EXTRA_SOCK_OPTS, SendTE => 0);
      #$log->tracef("EXTRA_SOCK_OPTS=%s", \@LWP::Protocol::http::EXTRA_SOCK_OPTS);
  
      $self->SUPER::_req(@args);
  }
  
  sub login {
      my ($self) = @_;
      my $s = $self->site;
  
      return 1 if $self->logged_in;
      die "400 Username not supplied" unless $self->username;
      die "400 Password not supplied" unless $self->password;
  
      $self->logger->debug('Logging in ...');
      $self->_req(get => [$s], {id=>'login_form'});
      $self->_req(submit_form => [
                                  form_number => 1,
                                  fields => {'value(user_id)'=>$self->username,
                                             'value(pswd)'=>$self->password,
                                             },
                                  button => 'value(Submit)',
                                  ],
                  {
                      id => 'login',
                      after_request => sub {
                          my ($mech) = @_;
                          $mech->content =~ /var err='(.+?)'/ and return $1;
                          $mech->content =~ /=logout"/ and return;
                          "unknown login result page";
                      },
                  });
      $self->logged_in(1);
      $self->_req(get => ["$s/authentication.do?value(actions)=welcome"],
                  {id=>'welcome'});
      #$self->_req(get => ["$s/nav_bar_indo/menu_nav.htm"], {id=>'navbar'}); # failed?
  }
  
  sub logout {
      my ($self) = @_;
  
      return 1 unless $self->logged_in;
      $self->logger->debug('Logging out ...');
      $self->_req(get => [$self->site . "/authentication.do?value(actions)=logout"],
                  {id=>'logout'});
      $self->logged_in(0);
  }
  
  sub _menu {
      my ($self) = @_;
      my $s = $self->site;
      $self->_req(get => ["$s/nav_bar_indo/account_information_menu.htm"],
                  {id=>'accinfo_menu'});
  }
  
  sub list_accounts {
      my ($self) = @_;
      $self->login;
      $self->logger->info("Listing accounts");
      map { $_->{account} } $self->_check_balances;
  }
  
  sub _check_balances {
      my ($self) = @_;
      my $s = $self->site;
  
      my $re = qr!
  <tr>\s*
    <td[^>]+>\s*<div[^>]+>\s*<font[^>]+>\s*(\d+)\s*</font>\s*</div>\s*</td>\s*
    <td[^>]+>\s*<div[^>]+>\s*<font[^>]+>\s*([^<]*?)\s*</font>\s*</div>\s*</td>\s*
    <td[^>]+>\s*<div[^>]+>\s*<font[^>]+>\s*([A-Z]+)\s*</font>\s*</div>\s*</td>\s*
    <td[^>]+>\s*<div[^>]+>\s*<font[^>]+>\s*([0-9,.]+)\.(\d\d)\s*</font>\s*</div>\s*</td>
  !x;
  
      $self->login;
      $self->_menu;
      $self->_req(post => ["$s/balanceinquiry.do"],
                  {
                      id => 'check_balance',
                      after_request => sub {
                          my ($mech) = @_;
                          my $errmsg = $self->_get_bca_errmsg;
                          return "BCA errmsg: $errmsg" if $errmsg;
                          $mech->content =~ $re or
                              return "can't find balances, maybe page layout changed?";
                          '';
                      },
                  });
  
      my @res;
      my $content = $self->mech->content;
      while ($content =~ m/$re/og) {
          push @res, { account => $1,
                       account_type => $2,
                       currency => $3,
                       balance => $self->_stripD($4) + 0.01*$5,
                   };
      }
      @res;
  }
  
  # parse error message from error page, often shown when we want to check
  # statement or balance.
  sub _get_bca_errmsg {
      my $self = shift;
      my $mech = $self->mech;
      my $ct = $mech->content;
      return $1 if $ct =~ m!^<font.+?red><b>(.+)</b></font>!m;
  }
  
  sub check_balance {
      my ($self, $account) = @_;
      my @bals = $self->_check_balances;
      return unless @bals;
      return $bals[0]{balance} if !$account;
      for (@bals) {
          return $_->{balance} if $_->{account} eq $account;
      }
      return;
  }
  
  sub get_statement {
      my ($self, %args) = @_;
      my $s = $self->site;
      my $max_days = 31;
  
      $self->login;
      $self->_menu;
      $self->logger->info("Getting statement for ".
          ($args{account} ? "account `$args{account}'" : "default account")." ...");
      $self->_req(post => ["$s/accountstmt.do?value(actions)=acct_stmt"],
                  {
                      id => 'get_statement_form',
                      after_request => sub {
                          my ($mech) = @_;
                          my $errmsg = $self->_get_bca_errmsg;
                          return "BCA errmsg: $errmsg" if $errmsg;
                          $mech->content =~ /<form/i or
                              return "no form found, maybe we got logged out?";
                          '';
                      },
                  });
  
      my $form = $self->mech->form_number(1);
  
      # in the site this is done by javascript onSubmit(), so we emulate it here
      $form->action("$s/accountstmt.do?value(actions)=acctstmtview");
  
      # in the case of the current date being a saturday/sunday/holiday, end
      # date will be forwarded 1 or more days from the current date by the site,
      # so we need to know end date and optionally forward start date when needed,
      # to avoid total number of days being > 31.
  
      my $today = DateTime->today;
      my $max_dt = DateTime->new(day   => $form->value("value(endDt)"),
                                 month => $form->value("value(endMt)"),
                                 year  => $form->value("value(endYr)"));
      my $cmp = DateTime->compare($today, $max_dt);
      my $delta_days = $cmp * $today->subtract_datetime($max_dt, $today)->days;
      if ($delta_days > 0) {
          $self->logger->warn("Something weird is going on, end date is being ".
                              "set less than today's date by the site (".
                              $self->_fmtdate($max_dt)."). ".
                              "Please check your computer's date setting. ".
                              "Continuing anyway.");
      }
      my $min_dt = $max_dt->clone->subtract(days => ($max_days-1));
  
      my $end_dt = $args{end_date} || $max_dt;
      my $start_dt = $args{start_date} ||
          $end_dt->clone->subtract(days => (($args{days} || $max_days)-1));
      if (DateTime->compare($start_dt, $min_dt) == -1) {
          $self->logger->warn("Start date ".$self->_fmtdate($start_dt)." is less than ".
                              "minimum date ".$self->_fmtdate($min_dt).". Setting to ".
                              "minimum date instead.");
          $start_dt = $min_dt;
      }
      if (DateTime->compare($start_dt, $max_dt) == 1) {
          $self->logger->warn("Start date ".$self->_fmtdate($start_dt)." is greater than ".
                              "maximum date ".$self->_fmtdate($max_dt).". Setting to ".
                              "maximum date instead.");
          $start_dt = $max_dt;
      }
      if (DateTime->compare($end_dt, $min_dt) == -1) {
          $self->logger->warn("End date ".$self->_fmtdate($end_dt)." is less than ".
                              "minimum date ".$self->_fmtdate($min_dt).". Setting to ".
                              "minimum date instead.");
          $end_dt = $min_dt;
      }
      if (DateTime->compare($end_dt, $max_dt) == 1) {
          $self->logger->warn("End date ".$self->_fmtdate($end_dt)." is greater than ".
                              "maximum date ".$self->_fmtdate($max_dt).". Setting to ".
                              "maximum date instead.");
          $end_dt = $max_dt;
      }
      if (DateTime->compare($start_dt, $end_dt) == 1) {
          $self->logger->warn("Start date ".$self->_fmtdate($start_dt)." is greater than ".
                              "end date ".$self->_fmtdate($end_dt).". Setting to ".
                              "end date instead.");
          $start_dt = $end_dt;
      }
  
      my $select = $form->find_input("value(D1)");
      my $d1 = $select->value;
      if ($args{account}) {
          my @d1 = $select->possible_values;
          my @accts = $select->value_names;
          for (0..$#accts) {
              if ($args{account} eq $accts[$_]) {
                  $d1 = $d1[$_];
                  last;
              }
          }
      }
  
      $self->_req(submit_form => [
                                  form_number => 1,
                                  fields => {
                                      "value(D1)" => $d1,
                                      "value(startDt)" => $start_dt->day,
                                      "value(startMt)" => $start_dt->month,
                                      "value(startYr)" => $start_dt->year,
                                      "value(endDt)" => $end_dt->day,
                                      "value(endMt)" => $end_dt->month,
                                      "value(endYr)" => $end_dt->year,
                                            },
                                  ],
                  {
                      id => 'get_statement',
                      after_request => sub {
                          my ($mech) = @_;
                          my $errmsg = $self->_get_bca_errmsg;
                          return "BCA errmsg: $errmsg" if $errmsg;
                          '';
                      },
                  });
      my $parse_opts = $args{parse_opts} // {};
      my $resp = $self->parse_statement($self->mech->content, %$parse_opts);
      return if !$resp || $resp->[0] != 200;
      $resp->[2];
  }
  
  sub _ps_detect {
      my ($self, $page) = @_;
      unless ($page =~ /(?:^\s*|&nbsp;)(?:INFORMASI REKENING - MUTASI REKENING|ACCOUNT INFORMATION - ACCOUNT STATEMENT)/mi) {
          return "No KlikBCA statement page signature found";
      }
      $self->_variant($page =~ /^(?:Kode Mata Uang|Currency)/m ? 'bisnis' : 'perorangan');
      "";
  }
  
  sub _ps_get_metadata {
      my ($self, $page, $stmt) = @_;
  
      unless ($page =~ /\s*(?:(?:Nomor|No\.) [Rr]ekening|Account Number)\s*(?:<[^>]+>\s*)*[:\t]\s*(?:<[^>]+>\s*)*([\d-]+)/m) {
          return "can't get account number";
      }
      $stmt->{account} = $self->_stripD($1);
      $stmt->{account} =~ s/\D+//g;
  
      my $adv1 = "probably the statement format changed, or input incomplete";
  
      unless ($page =~ m!(?:^\s*|>)(?:Periode|Period)\s*(?:<[^>]+>\s*)*[:\t]\s*(?:<[^>]+>\s*)*(\d\d)/(\d\d)/(\d\d\d\d) - (\d\d)/(\d\d)/(\d\d\d\d)!m) {
          return "can't get statement period, $adv1";
      }
      $stmt->{start_date} = DateTime->new(day=>$1, month=>$2, year=>$3);
      $stmt->{end_date}   = DateTime->new(day=>$4, month=>$5, year=>$6);
  
      unless ($page =~ /(?:^|>)(?:(?:Kode )?Mata Uang|Currency)\s*(?:<[^>]+>\s*)*[:\t]\s*(?:<[^>]+>\s*)*(Rp|[A-Z]+)/m) {
          return "can't get currency, $adv1";
      }
      $stmt->{currency} = ($1 eq 'Rp' ? 'IDR' : $1);
  
      unless ($page =~ /(?:^|>)(?:Nama|Name)\s*(?:<[^>]+>\s*)*[:\t]\s*(?:<[^>]+>\s*)*([^<\015\012]+)/m) {
          return "can't get account holder, $adv1";
      }
      $stmt->{account_holder} = $1;
  
      unless ($page =~ /(?:^|>)(?:Mutasi Kredit|Total Credits)\s*(?:<[^>]+>\s*)*[:\t]\s*(?:<[^>]+>\s*)*([0-9,.]+)\.(\d\d)(?:\s*\t\s*(\d+))?/m) {
          return "can't get total credit, $adv1";
      }
      $stmt->{_total_credit_in_stmt}  = $self->_stripD($1) + 0.01*$2;
      $stmt->{_num_credit_tx_in_stmt} = $3 if $3;
  
      unless ($page =~ /(?:^|>)(?:Mutasi Debet|Total Debits)\s*(?:<[^>]+>\s*)*[:\t]\s*(?:<[^>]+>\s*)*([0-9,.]+)\.(\d\d)(?:\s*\t\s*(\d+))?/m) {
          return "can't get total credit, $adv1";
      }
      $stmt->{_total_debit_in_stmt}  = $self->_stripD($1) + 0.01*$2;
      $stmt->{_num_debit_tx_in_stmt} = $3 if $3;
      "";
  }
  
  sub _ps_get_transactions {
      my ($self, $page, $stmt) = @_;
  
      my @e;
      # text version
      while ($page =~ m!^
  (\d\d/\d\d|\s?PEND|\s?NEXT)
    (?:\s*\t\s*|\n)
  ((?:[^\t]|\n)*?)
    (?:\s*\t\s*|\n)
  (\d{4})
    (?:\s*\t\s*|\n)
  ([0-9,]+)\.(\d\d)
    (?:\s*\t?\s*|\n)
  (CR|DB)
    (?:\s*\t\s*|\n)
  ([0-9,]+)\.(\d\d)
      !mxg) {
          push @e, {date=>$1, desc=>$2, br=>$3, amt=>$4, amtf=>$5, crdb=>$6, bal=>$7, balf=>$8};
      }
      if (!@e) {
          # HTML version
          while ($page =~ m!^
  <tr>\s*
    <td[^>]+>(?:\s*<[^>]+>\s*)*  (\d\d/\d\d|\s?PEND|\s?NEXT)  (?:\s*<[^>]+>\s*)*</td>\s*
    <td[^>]+>(?:\s*<[^>]+>\s*)*  ((?:[^\t]|\n)*?)             (?:\s*<[^>]+>\s*)*</td>\s*
    <td[^>]+>(?:\s*<[^>]+>\s*)*  (\d{4})                      (?:\s*<[^>]+>\s*)*</td>\s*
    <td[^>]+>(?:\s*<[^>]+>\s*)*  ([0-9,]+)\.(\d\d)            (?:\s*<[^>]+>\s*)*</td>\s*
    <td[^>]+>(?:\s*<[^>]+>\s*)*  (CR|DB)                      (?:\s*<[^>]+>\s*)*</td>\s*
    <td[^>]+>(?:\s*<[^>]+>\s*)*  ([0-9,]+)\.(\d\d)            (?:\s*<[^>]+>\s*)*</td>\s*
  </tr>
                           !smxg) {
              push @e, {date=>$1, desc=>$2, br=>$3, amt=>$4, amtf=>$5, crdb=>$6, bal=>$7, balf=>$8};
          }
          for (@e) { $_->{desc} =~ s!<br ?/?>!\n!ig }
      }
  
      my @tx;
      my @skipped_tx;
      my $last_date;
      my $seq;
      my $i = 0;
      for my $e (@e) {
          $i++;
          my $tx = {};
          #$tx->{stmt_start_date} = $stmt->{start_date};
  
          if ($e->{date} =~ /NEXT/) {
              $tx->{date} = $stmt->{end_date};
              $tx->{is_next} = 1;
          } elsif ($e->{date} =~ /PEND/) {
              $tx->{date} = $stmt->{end_date};
              $tx->{is_pending} = 1;
          } else {
              my ($day, $mon) = split m!/!, $e->{date};
              my $last_nonpend_date = DateTime->new(
                                                    year => ($mon < $stmt->{start_date}->month ?
                                                             $stmt->{end_date}->year :
                                                             $stmt->{start_date}->year),
                                                    month => $mon,
                                                    day => $day);
              $tx->{date} = $last_nonpend_date;
              $tx->{is_pending} = 0;
          }
  
          $tx->{description} = $e->{desc};
  
          $tx->{branch} = $e->{br};
  
          $tx->{amount}  = ($e->{crdb} =~ /CR/ ? 1 : -1) * ($self->_stripD($e->{amt}) + 0.01*$e->{amtf});
          $tx->{balance} = ($self->_stripD($e->{bal}) + 0.01*$e->{balf});
  
          if (!$last_date || DateTime->compare($last_date, $tx->{date})) {
              $seq = 1;
              $last_date = $tx->{date};
          } else {
              $seq++;
          }
          $tx->{seq} = $seq;
  
          if ($self->_variant eq 'perorangan' &&
              $tx->{date}->dow =~ /6|7/ &&
              $tx->{description} !~ /^(BIAYA ADM|BUNGA|(CR|DR) KOREKSI BUNGA|PAJAK BUNGA)\s*$/) {
              return "check failed in tx#$i: In KlikBCA Perorangan, all ".
                  "transactions must not be in Sat/Sun except for Interest and ".
                  "Admin Fee: <$tx->{description}> ($tx->{date})";
              # note: in Tahapan perorangan, BIAYA ADM is set on
              # Fridays, but for Tapres (?) on last day of the month
          }
  
          if ($self->_variant eq 'bisnis' &&
              $tx->{date}->dow =~ /6|7/ &&
              $tx->{description} !~ /^(BIAYA ADM|BUNGA|(CR|DR) KOREKSI BUNGA|PAJAK BUNGA)\s*$/) {
              return "check failed in tx#$i: In KlikBCA Bisnis, all ".
                  "transactions must not be in Sat/Sun except for Interest and ".
                  "Admin Fee: <$tx->{description}> ($tx->{date})";
              # note: in KlikBCA bisnis, BIAYA ADM is set on the last day of the
              # month, regardless of whether it's Sat/Sun or not
          }
  
          push @tx, $tx;
      }
      $stmt->{transactions} = \@tx;
      $stmt->{skipped_transactions} = \@skipped_tx;
      "";
  }
  
  1;
  # ABSTRACT: Check your BCA accounts from Perl
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Finance::Bank::ID::BCA - Check your BCA accounts from Perl
  
  =head1 VERSION
  
  This document describes version 0.45 of Finance::Bank::ID::BCA (from Perl distribution Finance-Bank-ID-BCA), released on 2017-05-16.
  
  =head1 SYNOPSIS
  
  If you just want to download banking statements, and you use Linux/Unix, you
  might want to use the L<download-bca> script instead of having to deal with this
  library directly.
  
  If you want to use the library in your Perl application:
  
      use Finance::Bank::ID::BCA;
  
      # FBI::BCA uses Log::Any. to show logs using, e.g., Log4perl:
      use Log::Log4perl qw(:easy);
      use Log::Any::Adapter;
      Log::Log4perl->easy_init($DEBUG);
      Log::Any::Adapter->set('Log4perl');
  
      my $ibank = Finance::Bank::ID::BCA->new(
          username => 'ABCDEFGH1234', # opt if only using parse_statement()
          password => '123456',       # idem
          verify_https => 1,          # default is 0
          #https_ca_dir => '/etc/ssl/certs', # default is already /etc/ssl/certs
      );
  
      eval {
          $ibank->login(); # dies on error
  
          my @accts = $ibank->list_accounts();
  
          my $bal = $ibank->check_balance($acct); # $acct is optional
  
          my $stmt = $ibank->get_statement(
              account    => ..., # opt, default account will be used if undef
              days       => 31,  # opt
              start_date => DateTime->new(year=>2009, month=>10, day=>6),
                                 # opt, takes precedence over 'days'
              end_date   => DateTime->today, # opt, takes precedence over 'days'
          );
  
          print "Transactions: ";
          for my $tx (@{ $stmt->{transactions} }) {
              print "$tx->{date} $tx->{amount} $tx->{description}\n";
          }
      };
      warn if $@;
  
      # remember to call this, otherwise you will have trouble logging in again
      # for some time
      $ibank->logout();
  
  Utility routines:
  
      # parse HTML statement directly
      my $res = $ibank->parse_statement($html);
  
  =head1 DESCRIPTION
  
  This module provide a rudimentary interface to the web-based online banking
  interface of the Indonesian B<Bank Central Asia> (BCA) at
  https://ibank.klikbca.com. You will need either L<Crypt::SSLeay> or
  L<IO::Socket::SSL> installed for HTTPS support to work (and strictly
  Crypt::SSLeay to enable certificate verification). L<WWW::Mechanize> is required
  but you can supply your own mech-like object.
  
  This module can only login to the retail/personal version of the site (KlikBCA
  perorangan) and not the corporate/business version (KlikBCA bisnis) as the later
  requires VPN and token input on login. But this module can parse statement page
  from both versions.
  
  Warning: This module is neither offical nor is it tested to be 100% safe!
  Because of the nature of web-robots, everything may break from one day to the
  other when the underlying web interface changes.
  
  =head1 WARNING
  
  This warning is from Simon Cozens' C<Finance::Bank::LloydsTSB>, and seems just
  as apt here.
  
  This is code for B<online banking>, and that means B<your money>, and that means
  B<BE CAREFUL>. You are encouraged, nay, expected, to audit the source of this
  module yourself to reassure yourself that I am not doing anything untoward with
  your banking data. This software is useful to me, but is provided under B<NO
  GUARANTEE>, explicit or implied.
  
  =head1 ERROR HANDLING AND DEBUGGING
  
  Most methods die() when encountering errors, so you can use eval() to trap them.
  
  Full response headers and bodies are dumped to a separate logger. See
  documentation on C<new()> below and the sample script in examples/ subdirectory
  in the distribution.
  
  =head1 ATTRIBUTES
  
  =head1 METHODS
  
  =for Pod::Coverage BUILD
  
  =head2 new(%args)
  
  Create a new instance. %args keys:
  
  =over 4
  
  =item * username
  
  Optional if you are just using utility methods like C<parse_statement()> and not
  C<login()> etc.
  
  =item * password
  
  Optional if you are just using utility methods like C<parse_statement()> and not
  C<login()> etc.
  
  =item * mech
  
  Optional. A L<WWW::Mechanize>-like object. By default this module instantiate a
  new L<Finance::BankUtils::ID::Mechanize> (a WWW::Mechanize subclass) object to
  retrieve web pages, but if you want to use a custom/different one, you are
  allowed to do so here. Use cases include: you want to retry and increase timeout
  due to slow/unreliable network connection (using
  L<WWW::Mechanize::Plugin::Retry>), you want to slow things down using
  L<WWW::Mechanize::Sleepy>, you want to use IE engine using
  L<Win32::IE::Mechanize>, etc.
  
  =item * verify_https
  
  Optional. If you are using the default mech object (see previous option), you
  can set this option to 1 to enable SSL certificate verification (recommended for
  security). Default is 0.
  
  SSL verification will require a CA bundle directory, default is /etc/ssl/certs.
  Adjust B<https_ca_dir> option if your CA bundle is not located in that
  directory.
  
  =item * https_ca_dir
  
  Optional. Default is /etc/ssl/certs. Used to set HTTPS_CA_DIR environment
  variable for enabling certificate checking in Crypt::SSLeay. Only used if
  B<verify_https> is on.
  
  =item * logger
  
  Optional. You can supply a L<Log::Any>-like logger object here. If not
  specified, this module will use a default logger.
  
  =item * logger_dump
  
  Optional. You can supply a L<Log::Any>-like logger object here. This is just
  like C<logger> but this module will log contents of response here instead of to
  C<logger> for debugging purposes. You can configure using something like
  L<Log::Dispatch::Dir> to save web pages more conveniently as separate files. If
  unspecified, the default logger is used (same as C<logger>).
  
  =back
  
  =head2 login()
  
  Login to the net banking site. You actually do not have to do this explicitly as
  login() is called by other methods like C<check_balance()> or
  C<get_statement()>.
  
  If login is successful, C<logged_in> will be set to true and subsequent calls to
  C<login()> will become a no-op until C<logout()> is called.
  
  Dies on failure.
  
  =head2 logout()
  
  Logout from the net banking site. You need to call this at the end of your
  program, otherwise the site will prevent you from re-logging in for some time
  (e.g. 10 minutes).
  
  If logout is successful, C<logged_in> will be set to false and subsequent calls
  to C<logout()> will become a no-op until C<login()> is called.
  
  Dies on failure.
  
  =head2 list_accounts()
  
  Return an array containing all account numbers that are associated with the
  current net banking login.
  
  =head2 check_balance([$account])
  
  Return balance for specified account, or the default account if C<$account> is
  not specified.
  
  =head2 get_statement(%args) => $stmt
  
  Get account statement. %args keys:
  
  =over 4
  
  =item * account
  
  Optional. Select the account to get statement of. If not specified, will use the
  already selected account.
  
  =item * days
  
  Optional. Number of days between 1 and 31. If days is 1, then start date and end
  date will be the same. Default is 31.
  
  =item * start_date
  
  Optional. Default is end_date - days.
  
  =item * end_date
  
  Optional. Default is today (or some 1+ days from today if today is a
  Saturday/Sunday/holiday, depending on the default value set by the site's form).
  
  =back
  
  See parse_statement() on structure of $stmt.
  
  =head2 parse_statement($html, %opts) => $res
  
  Given the HTML text of the account statement results page, parse it into
  structured data:
  
   $stmt = {
      start_date     => $start_dt, # a DateTime object
      end_date       => $end_dt,   # a DateTime object
      account_holder => STRING,
      account        => STRING,    # account number
      currency       => STRING,    # 3-digit currency code
      transactions   => [
          # first transaction
          {
            date        => $dt,  # a DateTime obj, book date ("tanggal pembukuan")
            seq         => INT,  # a number >= 1 which marks the sequence of
                                 # transactions for the day
            amount      => REAL, # a real number, positive means credit (deposit),
                                 # negative means debit (withdrawal)
            description => STRING,
            is_pending  => BOOL,
            branch      => STRING, # a 4-digit branch/ATM code
            balance     => REAL,
          },
          # second transaction
          ...
      ]
   }
  
  Returns:
  
   [$status, $err_details, $stmt]
  
  C<$status> is 200 if successful or some other 3-digit code if parsing failed.
  C<$stmt> is the result (structure as above, or undef if parsing failed).
  
  Options:
  
  =over 4
  
  =item * return_datetime_obj => BOOL
  
  Default is true. If set to false, the method will return dates as strings with
  this format: 'YYYY-MM-DD HH::mm::SS' (produced by DateTime->dmy . ' ' .
  DateTime->hms). This is to make it easy to pass the data structure into YAML,
  JSON, MySQL, etc. Nevertheless, internally DateTime objects are still used.
  
  =back
  
  Additional notes:
  
  The method can also handle some copy-pasted text from the GUI browser, but this
  is no longer documented or guaranteed to keep working.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Finance-Bank-ID-BCA>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Finance-Bank-ID-BCA>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Finance-Bank-ID-BCA>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2015, 2014, 2013, 2012, 2011, 2010 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
FINANCE_BANK_ID_BCA

    $main::fatpacked{"Finance/Bank/ID/Base.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FINANCE_BANK_ID_BASE';
  package Finance::Bank::ID::Base;
  
  our $DATE = '2017-05-16'; # DATE
  our $VERSION = '0.45'; # VERSION
  
  use 5.010;
  use Moo;
  use Log::Any::IfLOG '$log';
  
  use Data::Dmp;
  use Data::Rmap qw(:all);
  use DateTime;
  use Finance::BankUtils::ID::Mechanize;
  use YAML::Syck qw(LoadFile DumpFile);
  
  has mech        => (is => 'rw');
  has username    => (is => 'rw');
  has password    => (is => 'rw');
  has logged_in   => (is => 'rw');
  has accounts    => (is => 'rw');
  has logger      => (is => 'rw',
                      default => sub { Log::Any::IfLOG->get_logger() } );
  has logger_dump => (is => 'rw',
                      default => sub { Log::Any::IfLOG->get_logger() } );
  
  has site => (is => 'rw');
  
  has _req_counter => (is => 'rw', default => sub{0});
  
  has verify_https => (is => 'rw', default => sub{0});
  has https_ca_dir => (is => 'rw', default => sub{'/etc/ssl/certs'});
  has https_host   => (is => 'rw');
  has mode         => (is => 'rw', default => sub{''});
  has save_dir     => (is => 'rw');
  
  sub _fmtdate {
      my ($self, $dt) = @_;
      $dt->ymd;
  }
  
  sub _fmtdt {
      my ($self, $dt) = @_;
      $dt->datetime;
  }
  
  # strip non-digit characters
  sub _stripD {
      my ($self, $s) = @_;
      $s =~ s/\D+//g;
      $s;
  }
  
  sub BUILD {
      my ($self, $args) = @_;
  
      # alias
      $self->username($args->{login}) if $args->{login} && !$self->username;
      $self->username($args->{user})  if $args->{user}  && !$self->username;
      $self->password($args->{pin})   if $args->{pin}   && !$self->password;
  }
  
  sub _set_default_mech {
      my ($self) = @_;
      $self->mech(
          Finance::BankUtils::ID::Mechanize->new(
              verify_https => $self->verify_https,
              https_ca_dir => $self->https_ca_dir,
              https_host   => $self->https_host,
          )
      );
  }
  
  sub _req {
      my ($self, $meth, $args, $opts) = @_;
  
      if (ref($opts) ne 'HASH') {
          die "Please update your module, 3rd arg is now a hashref since ".__PACKAGE__." 0.27";
      }
  
      $opts->{id} or die "BUG: Request does not have id";
      $opts->{id} =~ /\A[\w-]+\z/ or die "BUG: Invalid syntax in id '$opts->{id}'";
  
      $self->_set_default_mech unless $self->mech;
      my $mech = $self->mech;
      my $c = $self->_req_counter + 1;
      $self->_req_counter($c);
      $self->logger->debug("mech request #$c: $meth ".dmp($args)."");
      my $errmsg = "";
  
      eval {
          if ($self->mode eq 'simulation' &&
                  $self->save_dir && (-f $self->save_dir . "/$opts->{id}.yaml")) {
              $Finance::BankUtils::ID::Mechanize::saved_resp =
                  LoadFile($self->save_dir . "/$opts->{id}.yaml");
          }
          $mech->$meth(@$args);
          if ($self->save_dir && $self->mode ne 'simulation') {
              DumpFile($self->save_dir . "/$opts->{id}.yaml", $mech->response);
          }
      };
      my $evalerr = $@;
  
      eval {
          $self->logger_dump->debug(
              "<!-- result of mech request #$c ($meth ".dmp($args)."):\n".
              $mech->response->status_line."\n".
              $mech->response->headers->as_string."\n".
              "-->\n".
              $mech->content
              );
      };
  
      if ($evalerr) {
          # mech dies on error, we catch it so we can log it
          $errmsg = "die: $evalerr";
      } elsif (!$mech->success) {
          # actually mech usually dies if unsuccessful (see above), but
          # this is just in case
          $errmsg = "network error: " . $mech->response->status_line;
      } elsif ($opts->{after_request}) {
          $errmsg = $opts->{after_request}->($mech);
          $errmsg = "after_request check error: $errmsg" if $errmsg;
      }
      if ($errmsg) {
          $errmsg = "mech request #$c failed: $errmsg";
          $self->logger->fatal($errmsg);
          die $errmsg;
      }
  }
  
  sub login {
      die "Should be implemented by child";
  }
  
  sub logout {
      die "Should be implemented by child";
  }
  
  sub list_accounts {
      die "Should be implemented by child";
  }
  
  sub check_balance {
      die "Should be implemented by child";
  }
  
  sub get_balance { check_balance(@_) }
  
  sub get_statement {
      die "Should be implemented by child";
  }
  
  sub check_statement { get_statement(@_) }
  
  sub account_statement { get_statement(@_) }
  
  sub parse_statement {
      my ($self, $page, %opts) = @_;
      my $status = 500;
      my $error = "";
      my $stmt = {};
  
      while (1) {
          my $err;
          if ($err = $self->_ps_detect($page, $stmt)) {
              $status = 400; $error = "Can't detect: $err"; last;
          }
          if ($err = $self->_ps_get_metadata($page, $stmt)) {
              $status = 400; $error = "Can't get metadata: $err"; last;
          }
          if ($err = $self->_ps_get_transactions($page, $stmt)) {
              $status = 400; $error = "Can't get transactions: $err"; last;
          }
  
          if (defined($stmt->{_total_debit_in_stmt})) {
              my $na = $stmt->{_total_debit_in_stmt};
              my $nb = 0;
              my $ntx = 0;
              for (@{ $stmt->{transactions} },
                   @{ $stmt->{skipped_transactions} }) {
                  if ($_->{amount} < 0) {
                      $nb += -$_->{amount}; $ntx++;
                  }
              }
              if (abs($na-$nb) >= 0.01) {
                  $log->warn(
                      "Check failed: total debit do not match ".
                          "($na in summary line vs $nb when totalled from ".
                          "$ntx transactions(s))");
              }
          }
          if (defined($stmt->{_total_credit_in_stmt})) {
              my $na = $stmt->{_total_credit_in_stmt};
              my $nb = 0;
              my $ntx = 0;
              for (@{ $stmt->{transactions} },
                   @{ $stmt->{skipped_transactions} }) {
                  if ($_->{amount} > 0) {
                      $nb += $_->{amount}; $ntx++;
                  }
              }
              if (abs($na-$nb) >= 0.01) {
                  $log->warn(
                      "Check failed: total credit do not match ".
                          "($na in summary line vs $nb when totalled from ".
                          "$ntx transactions(s))");
              }
          }
          if (defined($stmt->{_num_debit_tx_in_stmt})) {
              my $na = $stmt->{_num_debit_tx_in_stmt};
              my $nb = 0;
              for (@{ $stmt->{transactions} },
                   @{ $stmt->{skipped_transactions} }) {
                  $nb += $_->{amount} < 0 ? 1 : 0;
              }
              if ($na != $nb) {
                  $status = 400;
                  $error = "Check failed: number of debit transactions ".
                      "do not match ($na in summary line vs $nb when totalled)";
                  last;
              }
          }
          if (defined($stmt->{_num_credit_tx_in_stmt})) {
              my $na = $stmt->{_num_credit_tx_in_stmt};
              my $nb = 0;
              for (@{ $stmt->{transactions} },
                   @{ $stmt->{skipped_transactions} }) {
                  $nb += $_->{amount} > 0 ? 1 : 0;
              }
              if ($na != $nb) {
                  $status = 400;
                  $error = "Check failed: number of credit transactions ".
                      "do not match ($na in summary line vs $nb when totalled)";
                  last;
              }
          }
  
          $status = 200;
          last;
      }
  
      $self->logger->debug("parse_statement(): Temporary result: ".dmp($stmt));
      $self->logger->debug("parse_statement(): Status: $status ($error)");
  
      $stmt = undef unless $status == 200;
      $self->logger->debug("parse_statement(): Result: ".dmp($stmt));
  
      unless ($opts{return_datetime_obj} // 1) {
          # $_[0]{seen} = {} is a trick to allow multiple places which mention the
          # same object to be converted (defeat circular checking)
          rmap_ref {
              $_[0]{seen} = {};
              $_ = $self->_fmtdt($_) if UNIVERSAL::isa($_, "DateTime");
          } $stmt;
      }
  
      [$status, $error, $stmt];
  }
  
  1;
  # ABSTRACT: Base class for Finance::Bank::ID::BCA etc
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Finance::Bank::ID::Base - Base class for Finance::Bank::ID::BCA etc
  
  =head1 VERSION
  
  This document describes version 0.45 of Finance::Bank::ID::Base (from Perl distribution Finance-Bank-ID-BCA), released on 2017-05-16.
  
  =head1 SYNOPSIS
  
      # Don't use this module directly, use one of its subclasses instead.
  
  =head1 DESCRIPTION
  
  This module provides a base implementation for L<Finance::Bank::ID::BCA> and
  L<Finance::Bank::ID::Mandiri>.
  
  =head1 ATTRIBUTES
  
  =head2 accounts
  
  =head2 https_ca_dir
  
  =head2 https_host
  
  =head2 logged_in
  
  =head2 logger
  
  =head2 logger_dump
  
  =head2 mech
  
  =head2 password
  
  =head2 site
  
  =head2 username
  
  =head2 verify_https
  
  =head2 save_dir => STR
  
  If set, each HTP response will be saved as YAML files in this dir. Existing
  files will be overwritten.
  
  =head2 mode => STR
  
  Can be set to C<simulation> for simulation mode. In this mode, instead of
  actually sending requests to network, each request will use responses saved
  previously in C<save_dir>.
  
  =head1 METHODS
  
  =for Pod::Coverage ^(BUILD)$
  
  =head2 new(%args) => OBJ
  
  Create a new instance.
  
  =head2 $obj->login()
  
  Login to netbanking site.
  
  =head2 $obj->logout()
  
  Logout from netbanking site.
  
  =head2 $obj->list_accounts()
  
  List accounts.
  
  =head2 $obj->check_balance([$acct])
  
  =head2 $obj->get_balance()
  
  Synonym for check_balance.
  
  =head2 $obj->get_statement(%args)
  
  Get account statement.
  
  =head2 $obj->check_statement()
  
  Alias for get_statement
  
  =head2 $obj->account_statement()
  
  Alias for get_statement
  
  =head2 $obj->parse_statement($html_or_text, %opts)
  
  Parse HTML/text into statement data.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Finance-Bank-ID-BCA>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Finance-Bank-ID-BCA>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Finance-Bank-ID-BCA>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2015, 2014, 2013, 2012, 2011, 2010 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
FINANCE_BANK_ID_BASE

    $main::fatpacked{"Finance/Bank/ID/Mandiri.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FINANCE_BANK_ID_MANDIRI';
  package Finance::Bank::ID::Mandiri;
  
  our $DATE = '2016-01-07'; # DATE
  our $VERSION = '0.33'; # VERSION
  
  use 5.010001;
  
  use Moo;
  use DateTime;
  
  use HTTP::Headers;
  use HTTP::Headers::Patch::DontUseStorable -load_target=>0;
  extends 'Finance::Bank::ID::Base';
  
  has _variant => (is => 'rw');
  has _re_tx   => (is => 'rw');
  
  my $re_acc         = qr/(?:\d{13})/;
  my $re_currency    = qr/(?:\w{3})/;
  my $re_money       = qr/(?:\d+(?:\.\d\d?)?)/;
  my $re_moneymin    = qr/(?:-?\d+(?:\.\d\d?)?)/; # allow negative
  my $re_date1       = qr!(?:\d{2}/\d{2}/\d{4})!; # 25/12/2010
  my $re_txcode      = qr!(?:\d{4})!;
  
  # original version when support first added
  my $re_mcm_v201009 = qr!^(?<acc>$re_acc);(?<currency>$re_currency);
                          (?<date_d>\d\d)/(?<date_m>\d\d)/(?<date_y>\d\d\d\d)
                          (?<txcode>$re_txcode);
                          (?<desc1>[^;]+);(?<desc2>[^;]*);
                          (?<amount>$re_money)(?<amount_dbmarker>DR)?;
                          (?<bal>$re_money)(?<bal_dbmarker>DR)?$!mx;
  # what's new: third line argument
  my $re_mcm_v201103 = qr!^(?<acc>$re_acc);(?<currency>$re_currency);
                          (?<date_d>\d\d)/(?<date_m>\d\d)/(?<date_y>\d\d\d\d)
                          (?<txcode>$re_txcode);
                          (?<desc1>[^;]+);(?<desc2>[^;]*);(?:(?<desc3>[^;]*);)?
                          (?<amount>$re_money)(?<amount_dbmarker>DR)?;
                          (?<bal>$re_money)(?<bal_dbmarker>DR)?$!mx;
  # what's new: txcode moved to 3rd column, credit & debit amount split into 2
  # fields
  my $re_mcm_v201107 = qr!^(?<acc>$re_acc);(?<currency>$re_currency);
                          (?<txcode>$re_txcode);
                          (?<date_d>\d\d)/(?<date_m>\d\d)/(?<date_y>\d\d\d\d);
                          (?<desc1>[^;]+);(?<desc2>[^;]*);(?:(?<desc3>[^;]*);)?
                          (?<amount_db>$re_money);
                          (?<amount_cr>$re_money);
                          (?<bal>$re_moneymin)!mx; # maybe? no more DR marker
  
  sub _make_readonly_inputs_rw {
      my ($self, @forms) = @_;
      for my $f (@forms) {
          for my $i (@{ $f->{inputs} }) {
              $i->{readonly} = 0 if $i->{readonly};
          }
      }
  }
  
  sub BUILD {
      my ($self, $args) = @_;
  
      $self->site("https://ib.bankmandiri.co.id") unless $self->site;
      $self->https_host("ib.bankmandiri.co.id") unless $self->https_host;
  }
  
  sub login {
      my ($self) = @_;
  
      return 1 if $self->logged_in;
      die "400 Username not supplied" unless $self->username;
      die "400 Password not supplied" unless $self->password;
  
      $self->logger->debug('Logging in ...');
      $self->_req(get => [$self->site . "/retail/Login.do?action=form&lang=in_ID"],
                  {
                      id => 'login_form',
                      after_request => sub {
                          my ($mech) = @_;
                          $mech->content =~ /LoginForm/ or return "no login form";
                          "";
                      },
                  });
      $self->mech->set_visible(
                               $self->username,
                               $self->password,
                               [image=>"x"]);
      $self->_req(submit => [],
                  {
                      id => 'login',
                      after_request => sub {
                          my ($mech) = @_;
                          $mech->content =~ m!<font class="errorMessage">(.+?)</font>! and return $1;
                          $mech->content =~ /<frame\s.+Welcome/ and return; # success
                          $mech->content =~ m!<font class="alert">(\w.+?)</font>! and return $1;
                          $mech->content =~ /LoginForm/ and
                              return "submit failed, still getting login form, probably problem with image button";
                          "unknown login result page";
                      },
                  });
      $self->_req(get => [$self->site . "/retail/Welcome.do?action=result"],
                  {
                      id => 'welcome',
                      after_request => sub {
                          my ($mech) = @_;
                          $mech->content !~ /SELAMAT DATANG/ and
                              return "failed getting welcome screen";
                          "";
                      },
                  });
      $self->logged_in(1);
  }
  
  sub logout {
      my ($self) = @_;
  
      return 1 unless $self->logged_in;
      $self->logger->debug('Logging out ...');
      $self->_req(get => [$self->site . "/retail/Logout.do?action=result"],
                  {id => 'logout'});
      $self->logged_in(0);
  }
  
  sub _parse_accounts {
      my ($self, $retrieve) = @_;
      $self->login;
      $self->logger->debug("Parsing accounts from transaction history form page ...");
      $self->_req(get => [$self->site . "/retail/TrxHistoryInq.do?action=form"],
              {id => 'txhist_form-parse_accounts'}) if $retrieve;
      my $ct = $self->mech->content;
      $ct =~ /(HISTORI TRANSAKSI|MUTASI REKENING)/ or
          die "failed getting transaction history form page";
      $ct =~ m!<select name="fromAccountID">(.+?)</select>!si or
          die "failed getting the list of accounts select box (fromAccountID)";
      my $opts = $1;
      my $accts = {};
      while ($opts =~ /<option value="(\d+)">(\d+)/g) {
          $accts->{$2} = $1;
      }
      $accts;
  }
  
  # if $account is not supplied, will choose the first id
  sub _get_an_account_id {
      my ($self, $account, $retrieve) = @_;
      my $accts = $self->_parse_accounts($retrieve);
      for (keys %$accts) {
          if (!$account || $_ eq $account) {
              return $accts->{$_};
          }
      }
      die "cannot find any account ID";
  }
  
  sub list_accounts {
      my ($self) = @_;
      keys %{ $self->_parse_accounts(1) };
  }
  
  sub check_balance {
      my ($self, $account) = @_;
      my $s = $self->site;
  
      $self->login;
      my $acctid = $self->_get_an_account_id($account, 1);
      my $bal;
      $self->_req(get => ["$s/retail/AccountDetail.do?action=result&ACCOUNTID=$acctid"],
                  {
                      id => "check_balance",
                      after_request => sub {
                          my ($mech) = @_;
                          $mech->content =~ m!>Informasi Saldo(?:<[^>]+>\s*)*:\s*(?:<[^>]+>\s*)*(?:Rp\.)&nbsp;([0-9.]+),(\d+)\s*<!s
                              or return "cannot grep balance in result page";
                          $bal = $self->_stripD($1)+0.01*$2;
                          "";
                      },
                  });
      $bal;
  }
  
  sub get_statement {
      my ($self, %args) = @_;
      my $s = $self->site;
  
      $self->login;
  
      $self->logger->debug('Getting statement ...');
      my $mech = $self->mech;
      $self->_req(get => ["$s/retail/TrxHistoryInq.do?action=form"],
                  {id=>"txhist_form-get_statement"});
  
      my $today = DateTime->today;
      my $end_date = $args{end_date} || $today;
      my $start_date = $args{start_date};
      if (!$start_date) {
          if (defined $args{days}) {
              $start_date = $end_date->clone->subtract(days=>($args{days}-1));
              $self->logger->debugf(
                  'Setting start_date to %04d-%02d-%02d (end_date - %d days)',
                  $start_date->year, $start_date->month, $start_date->day,
                  $args{days});
          } else {
              $start_date = $end_date->clone->subtract(months=>1);
              $self->logger->debugf(
                  'Setting start_date to %04d-%02d-%02d (end_date - 1mo)',
                  $start_date->year, $start_date->month, $start_date->day);
          }
      }
  
      $mech->set_fields(
          fromAccountID => $self->_get_an_account_id($args{account}, 0),
          fromDay   => $start_date->day,
          fromMonth => $start_date->month,
          fromYear  => $start_date->year,
          toDay     => $end_date->day,
          toMonth   => $end_date->month,
          toYear    => $end_date->year,
      );
  
      # to shut up HTML::Form's read-only warning
      $self->_make_readonly_inputs_rw($mech->forms);
  
      $mech->set_fields(action => "result");
  
      $self->_req(submit => [],
                  {
                      id => "get_statement",
                      after_request => sub {
                          my ($mech) = @_;
                          $mech->content =~ />Keterangan Transaksi</ and return "";
                          $mech->content =~ m!<font class="alert">(.+)</font>!
                              and return $1;
                          return "failed getting statement";
                      },
                  });
  
      my $resp = $self->parse_statement($self->mech->content);
      return if !$resp || $resp->[0] != 200;
      $resp->[2];
  }
  
  sub _ps_detect {
      my ($self, $page) = @_;
      if ($page =~ /(?:^|"header">)(HISTORI TRANSAKSI|MUTASI REKENING)/m) {
          $self->_variant('ib');
          return '';
      } elsif ($page =~ /^CMS-Mandiri/ms) {
          $self->_variant('cms');
          return '';
      #} elsif ($page =~ /$re_mcm_v201009/) {
      #    $self->_variant('mcm-v201009');
      #    $self->_re_tx($re_mcm_v201009);
      #    return '';
      } elsif ($page =~ /$re_mcm_v201103/) {
          $self->_variant('mcm-v201103');
          $self->_re_tx($re_mcm_v201103);
          return '';
      } elsif ($page =~ /$re_mcm_v201107/) {
          $self->_variant('mcm-v201107');
          $self->_re_tx($re_mcm_v201107);
          return '';
      } else {
          return "No Mandiri statement page signature found";
      }
  }
  
  sub _ps_get_metadata {
      my ($self, @args) = @_;
      if ($self->_variant eq 'ib') {
          $self->_ps_get_metadata_ib(@args);
      } elsif ($self->_variant eq 'cms') {
          $self->_ps_get_metadata_cms(@args);
      } elsif ($self->_variant =~ /^mcm/) {
          $self->_ps_get_metadata_mcm(@args);
      } else {
          return "internal bug: _variant not yet set";
      }
  }
  
  sub _ps_get_metadata_ib {
      my ($self, $page, $stmt) = @_;
  
      unless ($page =~ /Tampilkan Berdasarkan(?:\s+|(?:<[^>]+>\s*)*):(?:\s+|(?:<[^>]+>\s*)*)Tanggal(?:\s+|(?:<[^>]+>\s*)*)Urutkan Berdasarkan(?:\s+|(?:<[^>]+>\s*)*):(?:\s+|(?:<[^>]+>\s*)*)Mulai dari yang kecil/s) {
        return "currently only support descending order ('Mulai dari yang kecil')";
      }
  
      my $adv1 = "maybe statement format changed or input incomplete";
  
      unless ($page =~ /(?:^|>)Nomor Rekening(?:\s+|(?:<[^>]+>\s*)*):(?:\s+|(?:<[^>]+>\s*)*)(\d+) (Rp\.|[A-Z]+)/m) {
        return "can't get account number, $adv1";
      }
      $stmt->{account} = $1;
      $stmt->{currency} = ($2 eq 'Rp.' ? 'IDR' : $2);
  
      my $empty_stmt = $page =~ />Tidak ditemukan catatan</ ? 1:0;
  
      # check completeness, because the latest transactions are displayed first
      unless ($empty_stmt ||
                  $page =~ /(?:|>)Saldo Akhir(?:\s+|(?:<[^>]+>\s*)*):(?:\s+|(?:<[^>]+>\s*)*)\d/m) {
        return "statement page probably truncated in the middle, try to input the whole page";
      }
  
      # along with their common misspellings, these are not in DateTime::Locale
      my %shortmon_id = (Jan=>1, Feb=>2, Peb=>2, Mar=>3, Apr=>4, Mei=>5, Jun=>6,
                         Jul=>7, Agu=>8, Agt=>8, Agus=>8, Agust=>8, Sep=>9,
                         Sept=>9, Okt=>10, Nov=>11, Nop=>11, Des=>12);
      my %shortmon_en = (Jan=>1, Feb=>2, Mar=>3, Apr=>4, May=>5, Jun=>6,
                         Jul=>7, Aug=>8, Sep=>9, Oct=>10, Nov=>11, Dec=>12);
      my %shortmon = (%shortmon_id, %shortmon_en);
      my $shortmon_re = join "|", keys(%shortmon);
      $shortmon_re = qr/(?:$shortmon_re)/;
  
      unless ($page =~ m!(?:^|>)Periode Transaksi(?:\s+|(?:<[^>]+>\s*)*):(?:\s+|(?:<[^>]+>\s*)*)(\d\d?) ($shortmon_re) (\d\d\d\d)\s*-\s*(\d\d?) ($shortmon_re) (\d\d\d\d)!m) {
        return "can't get period, $adv1";
      }
      return "can't parse month name: $2" unless $shortmon{$2};
      return "can't parse month name: $5" unless $shortmon{$5};
      $stmt->{start_date} = DateTime->new(day=>$1, month=>$shortmon{$2}, year=>$3);
      $stmt->{end_date}   = DateTime->new(day=>$4, month=>$shortmon{$5}, year=>$6);
  
      # for safety, but i forgot why
      my $today = DateTime->today;
      if (DateTime->compare($stmt->{start_date}, $today) == 1) {
          $stmt->{start_date} = $today;
      }
      if (DateTime->compare($stmt->{end_date}, $today) == 1) {
          $stmt->{end_date} = $today;
      }
  
      if ($empty_stmt) {
          $stmt->{_total_credit_in_stmt} = 0;
          $stmt->{_total_debit_in_stmt}  = 0;
      } else {
          unless ($page =~ /(?:^|>)Total Kredit(?:\s+|(?:<[^>]+>\s*)*):(?:\s+|(?:<[^>]+>\s*)*)([0-9,.]+)[.,](\d\d)/m) {
              return "can't get total credit, $adv1";
          }
          $stmt->{_total_credit_in_stmt} = $self->_stripD($1) + 0.01*$2;
  
          unless ($page =~ /(?:^|>)Total Debet(?:\s+|(?:<[^>]+>\s*)*):(?:\s+|(?:<[^>]+>\s*)*)([0-9,.]+)[.,](\d\d)/m) {
              return "can't get total debit, $adv1";
          }
          $stmt->{_total_debit_in_stmt} = $self->_stripD($1) + 0.01*$2;
      }
  
      "";
  }
  
  sub _ps_get_metadata_cms {
      my ($self, $page, $stmt) = @_;
  
      unless ($page =~ /^- End Of Statement -/m) {
          return "statement page truncated in the middle, please input the whole page";
      }
  
      unless ($page =~ /^Account No\s*:\s*(\d+)/m) {
          return "can't get account number";
      }
      $stmt->{account} = $1;
  
      unless ($page =~ /^Account Name\s*:\s*(.+?)[\012\015]/m) {
          return "can't get account holder";
      }
      $stmt->{account_holder} = $1;
  
      unless ($page =~ /^Currency\s*:\s*([A-Z]+)/m) {
          return "can't get account holder";
      }
      $stmt->{currency} = $1;
  
      my $adv1 = "maybe statement format changed, or input incomplete";
  
      unless ($page =~ m!Period\s*:\s*(\d\d?)/(\d\d?)/(\d\d\d\d)\s*-\s*(\d\d?)/(\d\d?)/(\d\d\d\d)!m) {
          return "can't get statement period, $adv1";
      }
      $stmt->{start_date} = DateTime->new(day=>$1, month=>$2, year=>$3);
      $stmt->{end_date}   = DateTime->new(day=>$4, month=>$5, year=>$6);
  
      # for safety, but i forgot why
      my $today = DateTime->today;
      if (DateTime->compare($stmt->{start_date}, $today) == 1) {
          $stmt->{start_date} = $today;
      }
      if (DateTime->compare($stmt->{end_date}, $today) == 1) {
          $stmt->{end_date} = $today;
      }
  
      # Mandiri sucks, doesn't provide total credit/debit in statement
      my $n = 0;
      while ($page =~ m!^\d\d?/\d\d?\s!mg) { $n++ }
      $stmt->{_num_tx_in_stmt} = $n;
      "";
  }
  
  sub _ps_get_metadata_mcm {
      my ($self, $page, $stmt) = @_;
  
      my $re_tx = $self->_re_tx;
  
      $page =~ m!$re_tx!
          or return "can't get account number & currency & date";
      $stmt->{account} = $+{acc};
      $stmt->{currency} = $+{currency};
      $stmt->{start_date} = DateTime->new(
          day=>$+{date_d}, month=>$+{date_m}, year=>$+{date_y});
  
      # we'll just assume the first and last transaction date to be start and
      # end date of statement, because the semicolon format doesn't include
      # any other metadata.
      $page =~ m!.*$re_tx!s or return "can't get end date";
      $stmt->{end_date} = DateTime->new(
          day=>$+{date_d}, month=>$+{date_m}, year=>$+{date_y});
  
      # Mandiri sucks, doesn't provide total credit/debit in statement
      my $n = 0;
      while ($page =~ m!^\d{13};!mg) { $n++ }
      $stmt->{_num_tx_in_stmt} = $n;
      "";
  }
  
  sub _ps_get_transactions {
      my ($self, @args) = @_;
      if ($self->_variant eq 'ib') {
          $self->_ps_get_transactions_ib(@args);
      } elsif ($self->_variant eq 'cms') {
          $self->_ps_get_transactions_cms(@args);
      } elsif ($self->_variant =~ /^mcm/) {
          $self->_ps_get_transactions_mcm(@args);
      } else {
          return "internal bug: _variant not yet set";
      }
  }
  
  sub _ps_get_transactions_ib {
      my ($self, $page, $stmt) = @_;
  
      my @tx;
      my @skipped_tx;
  
      goto DONE if $page =~ m!>Tidak ditemukan catatan<!;
  
      my @e;
      # text version
      while ($page =~ m!^(\d\d)/(\d\d)/(\d\d\d\d)\s*\t\s*((?:[^\t]|\n)*?)\s*\t\s*([0-9.]+),(\d\d)\s*\t\s*([0-9.]+),(\d\d)!mg) {
          push @e, {day=>$1, mon=>$2, year=>$3, desc=>$4, db=>$5, dbf=>$6, cr=>$7, crf=>$8};
      }
      if (!@e) {
          # HTML version
          while ($page =~ m!^\s+<tr[^>]*>\s*
  <td[^>]+> (\d\d)/(\d\d)/(\d\d\d\d) \s* </td>\s*
  <td[^>]+> ((?:[^\t]|\n)*?)     </td>\s*
  <td[^>]+> ([0-9.]+),(\d\d)     </td>\s*
  <td[^>]+> ([0-9.]+),(\d\d)     </td>\s*
  </tr>!smxg) {
            push @e, {day=>$1, mon=>$2, year=>$3, desc=>$4, db=>$5, dbf=>$6, cr=>$7, crf=>$8};
          }
          for (@e) { $_->{desc} =~ s!<br ?/?>!\n!ig }
      }
  
      # when they say "kecil ke besar" they actually mean showing the latest transactions first
      @e = reverse @e;
  
      my $seq;
      my $i = 0;
      my $last_date;
      for my $e (@e) {
          $i++;
          my $tx = {};
          $tx->{date} = DateTime->new(day=>$e->{day}, month=>$e->{mon}, year=>$e->{year});
          $tx->{description} = $e->{desc};
          my $db = $self->_stripD($e->{db}) + 0.01*$e->{dbf};
          my $cr = $self->_stripD($e->{cr}) + 0.01*$e->{crf};
          if ($db == 0) { $tx->{amount} = $cr }
          elsif ($cr == 0) { $tx->{amount} = -$db }
          else { return "check failed in tx#$i: debit and credit both exist" }
  
          if (!$last_date || DateTime->compare($last_date, $tx->{date})) {
              $seq = 1;
              $last_date = $tx->{date};
          } else {
              $seq++;
          }
          $tx->{seq} = $seq;
  
          # skip reversal pair (tx + tx') because tx' is just a correction
          # reversal and the pair will be removed anyway by Mandiri in the next
          # day's statement. currently can only handle pair in the same day and in
          # succession.
          if ($seq > 1 && $tx->{description} =~ /^Reversal \(Error Correction\)/ &&
              $tx->{amount} == -$tx[-1]{amount}) {
              push @skipped_tx, pop(@tx);
              push @skipped_tx, $tx;
              $seq -= 2;
          } else {
              push @tx, $tx;
          }
      }
  
    DONE:
      $stmt->{transactions} = \@tx;
      $stmt->{skipped_transactions} = \@skipped_tx;
      "";
  }
  
  sub _ps_get_transactions_cms {
      my ($self, $page, $stmt) = @_;
  
      if ($page =~ /<br|<p/i) {
          return "sorry, HTML version is not yet supported";
      }
  
      my @e;
      # text version
      while ($page =~ m!^(\d\d?)/(\d\d?)\s+(\d\d?)/(\d\d?)\s+(.*?)\t(.*)\s+([0-9.]+),(\d\d) ([CD])\s+([0-9.]+),(\d\d) ([CD])!mg) {
          # date (=tgl transaksi), value date (=tgl pembukuan?), description ("Setor Tunai"), description 2 ("DARI Andi Budi"), amount, balance
          push @e, {daytx=>$1, montx=>$2, daybk=>$3, monbk=>$4, desc1=>$5, desc2=>$6,
                    amt=>$7, amtf=>$8, amtc=>$9, bal=>$10, balf=>11, balc=>12};
      }
  
      my @tx;
      my $seq;
      my $last_date;
      for my $e (@e) {
          my $tx = {};
          $tx->{tx_date} = DateTime->new(
              day   => $e->{daytx},
              month => $e->{montx},
              year  => (($e->{montx} <  $stmt->{start_date}->mon ||
                         $e->{montx} == $stmt->{start_date}->mon && $e->{daytx} == $stmt->{start_date}->day) ?
                        $stmt->{end_date}->year : $stmt->{start_date}->year)
          );
          $tx->{book_date} = DateTime->new(
              day   => $e->{daybk},
              month => $e->{monbk},
              year  => (($e->{monbk} <  $stmt->{start_date}->mon ||
                         $e->{monbk} == $stmt->{start_date}->mon && $e->{daybk} == $stmt->{start_date}->day) ?
                        $stmt->{end_date}->year : $stmt->{start_date}->year)
          );
          $tx->{date} = $tx->{book_date};
  
          $tx->{amount}  = ($e->{amtc} eq 'C' ? 1:-1) * $self->_stripD($e->{amt}) + 0.01 * $e->{amtf};
          $tx->{balance} = ($e->{balc} eq 'C' ? 1:-1) * $self->_stripD($e->{bal}) + 0.01 * $e->{balf};
          $tx->{description} = $e->{desc1} . "\n" . $e->{desc2};
  
          if (!$last_date || DateTime->compare($last_date, $tx->{date})) {
              $seq = 1;
              $last_date = $tx->{date};
          } else {
              $seq++;
          }
          $tx->{seq} = $seq;
  
          push @tx, $tx;
      }
      $stmt->{transactions} = \@tx;
      "";
  }
  
  sub _ps_get_transactions_mcm {
      my ($self, $page, $stmt) = @_;
  
      my $re_tx = $self->_re_tx;
  
      my @rows;
      my $i = 0;
      for (split /\r?\n/, $page) {
          $i++;
          next unless /\S/;
          m!$re_tx! or die "Invalid data in line $i: '$_' doesn't match pattern".
              " (variant = ".$self->_variant.")";
          my $row = {
              account   => $+{acc},
              currency  => $+{currency},
              txcode    => $+{txcode},
              day       => $+{date_d},
              month     => $+{date_m},
              year      => $+{date_y},
              desc1     => $+{desc1},
              desc2     => $+{desc2},
          };
          $row->{desc3}   = $+{desc3} if defined($+{desc3});
          if ($+{amount_cr}) {
              my $cr = $+{amount_cr}+0;
              my $dr = $+{amount_db}+0;
              $row->{amount} = $cr ? $cr : -$dr;
          } else {
              $row->{amount} = $+{amount} * ($+{amount_dbmarker} ? -1 : 1);
          }
          $row->{balance} = $+{bal} * ($+{bal_dbmarker} ? -1 : 1);
          push @rows, $row;
      }
  
      my @tx;
      my $seq;
      my $last_date;
      for my $row (@rows) {
          my $tx = {};
  
          $row->{account} eq $stmt->{account} or
              return "Can't handle multiple accounts in transactions yet";
          $row->{currency} eq $stmt->{currency} or
              return "Can't handle multiple currencies in transactions yet";
  
          $tx->{date} = DateTime->new(
              day=>$row->{day}, month=>$row->{month}, year=>$row->{year});
  
          $tx->{txcode} = $row->{txcode};
  
          $tx->{description} = $row->{desc1} .
              ($row->{desc2} ? "\n" . $row->{desc2} : "") .
                  ($row->{desc3} ? "\n" . $row->{desc3} : "");
  
          $tx->{amount}  = $row->{amount}+0;
  
          if (!$last_date || DateTime->compare($last_date, $tx->{date})) {
              $seq = 1;
              $last_date = $tx->{date};
          } else {
              $seq++;
          }
          $tx->{seq} = $seq;
  
          push @tx, $tx;
      }
      $stmt->{transactions} = \@tx;
      "";
  }
  
  1;
  # ABSTRACT: Check your Bank Mandiri accounts from Perl
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Finance::Bank::ID::Mandiri - Check your Bank Mandiri accounts from Perl
  
  =head1 VERSION
  
  This document describes version 0.33 of Finance::Bank::ID::Mandiri (from Perl distribution Finance-Bank-ID-Mandiri), released on 2016-01-07.
  
  =head1 SYNOPSIS
  
  If you just want to download banking statements, and you use Linux/Unix, you
  might want to use the L<download-mandiri> script instead of having to deal with
  this library directly.
  
  If you want to use the library in your Perl application:
  
      use Finance::Bank::ID::Mandiri;
  
      # FBI::Mandiri uses Log::Any. to show logs, use something like:
      use Log::Log4perl qw(:easy);
      use Log::Any::Adapter;
      Log::Log4perl->easy_init($DEBUG);
      Log::Any::Adapter->set('Log4perl');
  
      my $ibank = Finance::Bank::ID::Mandiri->new(
          username => '....', # optional if you're only using parse_statement()
          password => '....', # idem
          verify_https => 1,          # default is 0
          #https_ca_dir => '/etc/ssl/certs', # default is already /etc/ssl/certs
      );
  
      eval {
          $ibank->login(); # dies on error
  
          my $accts = $ibank->list_accounts();
  
          my $bal = $ibank->check_balance($acct); # $acct is optional
  
          my $stmt = $ibank->get_statement(
              account    => ..., # opt, default account used if not undef
              days       => 30,  # opt
              start_date => DateTime->new(year=>2009, month=>10, day=>6),
                                 # opt, takes precedence over 'days'
              end_date   => DateTime->today, # opt, takes precedence over 'days'
          );
  
          print "Transactions: ";
          for my $tx (@{ $stmt->{transactions} }) {
              print "$tx->{date} $tx->{amount} $tx->{description}\n";
          }
      };
      warn if $@;
  
      # remember to call this, otherwise you will have trouble logging in again
      # for some time
      $ibank->logout;
  
  Utility routines:
  
      # parse HTML statement directly
      my $res = $ibank->parse_statement($html);
  
  =head1 DESCRIPTION
  
  This module provide a rudimentary interface to the web-based online banking
  interface of the Indonesian B<Bank Mandiri> at https://ib.bankmandiri.co.id
  (henceforth IB). You will need either L<Crypt::SSLeay> or L<IO::Socket::SSL>
  installed for HTTPS support to work (and strictly L<Crypt::SSLeay> to enable
  certificate verification). L<WWW::Mechanize> is required but you can supply your
  own mech-like object.
  
  Aside from the above site for invididual accounts, there are also 2 other sites
  for corporate accounts: https://cms.bankmandiri.co.id/ecbanking/ (henceforth
  CMS) and https://mcm.bankmandiri.co.id/ (henceforth MCM). CMS is the older
  version and as of the end of Sept, 2010 has been discontinued.
  
  This module currently can only login to IB and not CMS/MCM, but this module can
  parse statement page from all 3 sites. For CMS version, only text version [copy
  paste result] is currently supported and not HTML. For MCM, only semicolon
  format is currently supported.
  
  Warning: This module is neither offical nor is it tested to be 100% safe!
  Because of the nature of web-robots, everything may break from one day to the
  other when the underlying web interface changes.
  
  =head1 WARNING
  
  This warning is from Simon Cozens' C<Finance::Bank::LloydsTSB>, and seems just
  as apt here.
  
  This is code for B<online banking>, and that means B<your money>, and that means
  B<BE CAREFUL>. You are encouraged, nay, expected, to audit the source of this
  module yourself to reassure yourself that I am not doing anything untoward with
  your banking data. This software is useful to me, but is provided under B<NO
  GUARANTEE>, explicit or implied.
  
  =head1 ERROR HANDLING AND DEBUGGING
  
  Most methods die() when encountering errors, so you can use eval() to trap them.
  
  Full response headers and bodies are dumped to a separate logger. See
  documentation on C<new()> below and the sample script in examples/ subdirectory
  in the distribution.
  
  =head1 ATTRIBUTES
  
  =head1 METHODS
  
  =head2 new(%args)
  
  Create a new instance. %args keys:
  
  =over
  
  =item * username
  
  Optional if you are just using utility methods like C<parse_statement()> and not
  C<login()> etc.
  
  =item * password
  
  Optional if you are just using utility methods like C<parse_statement()> and not
  C<login()> etc.
  
  =item * mech
  
  Optional. A L<WWW::Mechanize>-like object. By default this module instantiate a
  new L<Finance::BankUtils::ID::Mechanize> (a WWW::Mechanize subclass) object to
  retrieve web pages, but if you want to use a custom/different one, you are
  allowed to do so here. Use cases include: you want to retry and increase timeout
  due to slow/unreliable network connection (using
  L<WWW::Mechanize::Plugin::Retry>), you want to slow things down using
  L<WWW::Mechanize::Sleepy>, you want to use IE engine using
  L<Win32::IE::Mechanize>, etc.
  
  =item * verify_https
  
  Optional. If you are using the default mech object (see previous option), you
  can set this option to 1 to enable SSL certificate verification (recommended for
  security). Default is 0.
  
  SSL verification will require a CA bundle directory, default is /etc/ssl/certs.
  Adjust B<https_ca_dir> option if your CA bundle is not located in that
  directory.
  
  =item * https_ca_dir
  
  Optional. Default is /etc/ssl/certs. Used to set HTTPS_CA_DIR environment
  variable for enabling certificate checking in Crypt::SSLeay. Only used if
  B<verify_https> is on.
  
  =item * logger
  
  Optional. You can supply a L<Log::Any>-like object here. If not specified,
  this module will use a default logger.
  
  =item * logger_dump
  
  Optional. You can supply a L<Log::Any>-like object here. This is just
  like C<logger> but this module will log contents of response bodies
  here for debugging purposes. You can use with something like
  L<Log::Dispatch::Dir> to save web pages more conveniently as separate
  files.
  
  =back
  
  =head2 login()
  
  Login to the net banking site. You actually do not have to do this explicitly as
  login() is called by other methods like C<check_balance()> or
  C<get_statement()>.
  
  If login is successful, C<logged_in> will be set to true and subsequent calls to
  C<login()> will become a no-op until C<logout()> is called.
  
  Dies on failure.
  
  =head2 logout()
  
  Logout from the net banking site. You need to call this at the end of your
  program, otherwise the site will prevent you from re-logging in for some time
  (e.g. 10 minutes).
  
  If logout is successful, C<logged_in> will be set to false and subsequent calls
  to C<logout()> will become a no-op until C<login()> is called.
  
  Dies on failure.
  
  =head2 list_accounts()
  
  =head2 check_balance([$acct])
  
  =head2 get_statement(%args) => $stmt
  
  Get account statement. %args keys:
  
  =over
  
  =item * account
  
  Optional. Select the account to get statement of. If not specified, will use the
  already selected account.
  
  =item * days
  
  Optional. Number of days. If days is 1, then start date and end date will be the
  same.
  
  =item * start_date
  
  Optional. Default is C<end_date> - 1 month, which seems to be the current limit
  set by the bank (for example, if C<end_date> is 2013-03-08, then C<start_date>
  will be set to 2013-02-08). If not set and C<days> is set, will be set to
  C<end_date> - C<days>.
  
  =item * end_date
  
  Optional. Default is today (or some 1+ days from today if today is a
  Saturday/Sunday/holiday, depending on the default value set by the site's form).
  
  =back
  
  =head2 parse_statement($html, %opts) => $res
  
  Given the HTML of the account statement results page, parse it into structured
  data:
  
   $stmt = {
      start_date     => $start_dt, # a DateTime object
      end_date       => $end_dt,   # a DateTime object
      account_holder => STRING,
      account        => STRING,    # account number
      currency       => STRING,    # 3-digit currency code
      transactions   => [
          # first transaction
          {
            date        => $dt, # a DateTime object, book date ("tanggal pembukuan")
            seq         => INT, # a number >= 1 which marks the sequence of transactions for the day
            amount      => REAL, # a real number, positive means credit (deposit), negative means debit (withdrawal)
            description => STRING,
            branch      => STRING, # 4-digit branch/ATM code, only for MCM
          },
          # second transaction
          ...
      ]
   }
  
  Returns:
  
   [$status, $err_details, $stmt]
  
  C<$status> is 200 if successful or some other 3-letter code if parsing failed.
  C<$stmt> is the result (structure as above, or undef if parsing failed).
  
  Options:
  
  =over 4
  
  =item * return_datetime_obj => BOOL
  
  Default is true. If set to false, the method will return dates as strings with
  this format: 'YYYY-MM-DD HH::mm::SS' (produced by DateTime->dmy . ' ' .
  DateTime->hms). This is to make it easy to pass the data structure into YAML,
  JSON, MySQL, etc. Nevertheless, internally DateTime objects are still used.
  
  =back
  
  Additional notes:
  
  The method can also (or used to) handle copy-pasted text from the GUI browser,
  but this is no longer documented or guaranteed to keep working.
  
  =head1 FAQ
  
  =head2 (2014) I'm getting error message: "Can't connect to ib.bankmandiri.co.id:443 at ..."
  
  Try upgrading your IO::Socket::SSL. It stalls with IO::Socket::SSL version 1.76,
  but works with newer versions (e.g. 1.989).
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Finance-Bank-ID-Mandiri>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Finance-Bank-ID-Mandiri>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Finance-Bank-ID-Mandiri>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
FINANCE_BANK_ID_MANDIRI

    $main::fatpacked{"Finance/BankUtils/ID/Mechanize.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FINANCE_BANKUTILS_ID_MECHANIZE';
  package Finance::BankUtils::ID::Mechanize;
  
  our $DATE = '2017-05-16'; # DATE
  our $VERSION = '0.45'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  use Log::Any::IfLOG qw($log);
  
  use parent qw(WWW::Mechanize);
  
  use String::Indent ();
  
  sub new {
      my ($class, %args) = @_;
      my $mech = WWW::Mechanize->new;
      $mech->{verify_https} = $args{verify_https} // 0;
      $mech->{https_ca_dir} = $args{https_ca_dir} // "/etc/ssl/certs";
      $mech->{https_host}   = $args{https_host};
      bless $mech, $class;
  }
  
  # will be set by some other code, and will be immediately consumed and emptied
  # by _make_request().
  our $saved_resp;
  
  sub _make_request {
      my $self = shift;
      my $req = shift;
      local $ENV{HTTPS_CA_DIR} = $self->{verify_https} ?
          $self->{https_ca_dir} : '';
      $log->tracef("HTTPS_CA_DIR = %s", $ENV{HTTPS_CA_DIR});
      if ($self->{verify_https} && $self->{https_host}) {
          $req->header('If-SSL-Cert-Subject',
                       qr!\Q/CN=$self->{https_host}\E(/|$)!);
      }
      $log->trace("Mech request:\n" . String::Indent::indent('  ', $req->headers_as_string));
      my $resp;
      if ($saved_resp) {
          $resp = $saved_resp;
          $saved_resp = undef;
          $log->trace("Mech response (from saved):" .
                          String::Indent::indent('  ', $resp->headers_as_string));
      } else {
          $resp = $self->SUPER::_make_request($req, @_);
          $log->trace("Mech response:\n" . String::Indent::indent('  ', $resp->headers_as_string));
      }
      $resp;
  }
  
  1;
  # ABSTRACT: A subclass of WWW::Mechanize
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Finance::BankUtils::ID::Mechanize - A subclass of WWW::Mechanize
  
  =head1 VERSION
  
  This document describes version 0.45 of Finance::BankUtils::ID::Mechanize (from Perl distribution Finance-Bank-ID-BCA), released on 2017-05-16.
  
  =head1 SYNOPSIS
  
   my $mech = Finance::BankUtils::ID::Mechanize->new(
       verify_https => 1,
       #https_ca_dir => '/etc/ssl/certs',
       https_host   => 'example.com',
   );
   # use as you would WWW::Mechanize object ...
  
  =head1 DESCRIPTION
  
  This is a subclass of WWW::Mechanize that can do some extra stuffs:
  
  =over
  
  =item * HTTPS certificate verification
  
  =item * use saved response from a file
  
  =item * log using Log::ny
  
  =back
  
  =head1 METHODS
  
  =head2 new()
  
  =head2 request()
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Finance-Bank-ID-BCA>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Finance-Bank-ID-BCA>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Finance-Bank-ID-BCA>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2015, 2014, 2013, 2012, 2011, 2010 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
FINANCE_BANKUTILS_ID_MECHANIZE

    $main::fatpacked{"Function/Fallback/CoreOrPP.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'FUNCTION_FALLBACK_COREORPP';
  package Function::Fallback::CoreOrPP;
  
  use 5.010001;
  use strict;
  use warnings;
  
  our $VERSION = '0.08'; # VERSION
  
  our $USE_NONCORE_XS_FIRST = 1;
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(
                         clone
                         clone_list
                         unbless
                         uniq
                 );
  
  sub clone {
      my $data = shift;
      goto FALLBACK unless $USE_NONCORE_XS_FIRST;
      goto FALLBACK unless eval { require Data::Clone; 1 };
  
    STANDARD:
      return Data::Clone::clone($data);
  
    FALLBACK:
      require Clone::PP;
      return Clone::PP::clone($data);
  }
  
  sub clone_list {
      map { clone($_) } @_;
  }
  
  sub _unbless_fallback {
      my $ref = shift;
  
      my $r = ref($ref);
      # not a reference
      return $ref unless $r;
  
      # return if not a blessed ref
      my ($r2, $r3) = "$ref" =~ /(.+)=(.+?)\(/
          or return $ref;
  
      if ($r3 eq 'HASH') {
          return { %$ref };
      } elsif ($r3 eq 'ARRAY') {
          return [ @$ref ];
      } elsif ($r3 eq 'SCALAR') {
          return \( my $copy = ${$ref} );
      } elsif ($r3 eq 'CODE') {
          return sub { goto &$ref };
      } else {
          die "Can't handle $ref";
      }
  }
  
  sub unbless {
      my $ref = shift;
  
      goto FALLBACK unless $USE_NONCORE_XS_FIRST;
      goto FALLBACK unless eval { require Acme::Damn; 1 };
  
    STANDARD:
      return Acme::Damn::damn($ref);
  
    FALLBACK:
      return _unbless_fallback($ref);
  }
  
  sub uniq {
      goto FALLBACK unless $USE_NONCORE_XS_FIRST;
      goto FALLBACK unless eval { require List::MoreUtils; 1 };
  
    STANDARD:
      return List::MoreUtils::uniq(@_);
  
    FALLBACK:
      my %h;
      my @res;
      for (@_) {
          push @res, $_ unless $h{$_}++;
      }
      return @res;
  }
  
  1;
  # ABSTRACT: Functions that use non-core XS module but provide pure-Perl/core fallback
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Function::Fallback::CoreOrPP - Functions that use non-core XS module but provide pure-Perl/core fallback
  
  =head1 VERSION
  
  This document describes version 0.08 of Function::Fallback::CoreOrPP (from Perl distribution Function-Fallback-CoreOrPP), released on 2017-01-14.
  
  =head1 SYNOPSIS
  
   use Function::Fallback::CoreOrPP qw(clone unbless uniq);
  
   my $clone = clone({blah=>1});
   my $unblessed = unbless($blessed_ref);
   my @uniq  = uniq(1, 3, 2, 1, 4);  # -> (1, 3, 2, 4)
  
  =head1 DESCRIPTION
  
  This module provides functions that use non-core XS modules (for best speed,
  reliability, feature, etc) but falls back to those that use core XS or pure-Perl
  modules when the non-core XS module is not available.
  
  This module helps when you want to bootstrap your Perl application with a
  portable, dependency-free Perl script. In a vanilla Perl installation (having
  only core modules), you can use L<App::FatPacker> to include non-core pure-Perl
  dependencies to your script.
  
  =for Pod::Coverage ^()$
  
  =head1 FUNCTIONS
  
  =head2 clone($data) => $cloned
  
  Try to use L<Data::Clone>'s C<clone>, but fall back to using L<Clone::PP>'s
  C<clone>.
  
  =head2 clone_list(@data) => @data
  
  A shortcut for:
  
   return map {clone($_)} @data
  
  =head2 unbless($ref) => $unblessed_ref
  
  Try to use L<Acme::Damn>'s C<damn> to unbless a reference but fall back to
  shallow copying.
  
  NOTE: C<damn()> B<MODIFIES> the original reference. (XXX in the future an option
  to clone the reference first will be provided), while shallow copying will
  return a shallow copy.
  
  NOTE: The shallow copy method currently only handles blessed
  {scalar,array,hash}ref as those are the most common.
  
  =head2 uniq(@ary) => @uniq_ary
  
  Try to use L<List::MoreUtils>'s C<uniq>, but fall back to using slower,
  pure-Perl implementation.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Function-Fallback-CoreOrPP>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Function-Fallback-CoreOrPP>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Function-Fallback-CoreOrPP>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Clone::Any> can also uses multiple backends, but I avoid it because I don't
  think L<Storable>'s C<dclone> should be used (no Regexp support out of the box +
  must use deparse to handle coderefs).
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
FUNCTION_FALLBACK_COREORPP

    $main::fatpacked{"Getopt/Long/Negate/EN.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'GETOPT_LONG_NEGATE_EN';
  package Getopt::Long::Negate::EN;
  
  our $DATE = '2016-03-01'; # DATE
  our $VERSION = '0.05'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(negations_for_option);
  
  sub negations_for_option {
      my $word = shift;
  
      if    ($word =~ /\Awith([_-].+)/   ) { return ("without$1") }
      elsif ($word =~ /\Awithout([_-].+)/) { return ("with$1")    }
  
      elsif ($word =~ /\Ais([_-].+)/     ) { return ("isnt$1")    }
      elsif ($word =~ /\Aisnt([_-].+)/   ) { return ("is$1")      }
      elsif ($word =~ /\Aare([_-].+)/    ) { return ("arent$1")   }
      elsif ($word =~ /\Aarent([_-].+)/  ) { return ("are$1")     }
  
      elsif ($word =~ /\Ahas([_-].+)/    ) { return ("hasnt$1")   }
      elsif ($word =~ /\Ahave([_-].+)/   ) { return ("havent$1")  }
      elsif ($word =~ /\Ahasnt([_-].+)/  ) { return ("has$1")     }
      elsif ($word =~ /\Ahavent([_-].+)/ ) { return ("have$1")    }
  
      elsif ($word =~ /\Acan([_-].+)/    ) { return ("cant$1")    }
      elsif ($word =~ /\Acant([_-].+)/   ) { return ("can$1")     }
  
      elsif ($word =~ /\Aenabled([_-].+)/ ) { return ("disabled$1") }
      elsif ($word =~ /\Adisabled([_-].+)/) { return ("enabled$1")  }
      elsif ($word =~ /\Aenable([_-].+)/ )  { return ("disable$1")  }
      elsif ($word =~ /\Adisable([_-].+)/)  { return ("enable$1")   }
  
      elsif ($word =~ /\Aallowed([_-].+)/ )   { return ("disallowed$1") }
      elsif ($word =~ /\Adisallowed([_-].+)/) { return ("allowed$1")    }
      elsif ($word =~ /\Aallow([_-].+)/ )     { return ("disallow$1")   }
      elsif ($word =~ /\Adisallow([_-].+)/)   { return ("allow$1")      }
  
      elsif ($word =~ /\Ano[_-](.+)/     ) { return ($1)          }
  
      else {
          # default from Getopt::Long
          return ("no-$word", "no$word");
      }
  }
  
  1;
  # ABSTRACT: Better negation of boolean option names
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Getopt::Long::Negate::EN - Better negation of boolean option names
  
  =head1 VERSION
  
  This document describes version 0.05 of Getopt::Long::Negate::EN (from Perl distribution Getopt-Long-Negate-EN), released on 2016-03-01.
  
  =head1 SYNOPSIS
  
   use Getopt::Long::Negate::EN qw(negations_for_option);
  
   # the Getopt::Long's default
   @negs = negations_for_option('foo'); # ('no-foo', 'nofoo')
  
   @negs = negations_for_option('with-foo');    # ('without-foo')
   @negs = negations_for_option('without-foo'); # ('with-foo')
  
   @negs = negations_for_option('is-foo');      # ('isnt-foo')
   @negs = negations_for_option('isnt-foo');    # ('is-foo')
   @negs = negations_for_option('are-foo');     # ('isnt-foo')
   @negs = negations_for_option('arent-foo');   # ('arent-foo')
  
   @negs = negations_for_option('has-foo');     # ('hasnt-foo')
   @negs = negations_for_option('hasnt-foo');   # ('has-foo')
   @negs = negations_for_option('have-foo');    # ('havent-foo')
   @negs = negations_for_option('havent-foo');  # ('have-foo')
  
   @negs = negations_for_option('can-foo');     # ('cant-foo')
   @negs = negations_for_option('cant-foo');    # ('can-foo')
  
   @negs = negations_for_option('enabled-foo'); # ('disabled-foo')
   @negs = negations_for_option('disabled-foo');# ('enabled-foo')
   @negs = negations_for_option('enable-foo');  # ('disable-foo')
   @negs = negations_for_option('disable-foo'); # ('enable-foo')
  
   @negs = negations_for_option('allowed-foo');    # ('disallowed-foo')
   @negs = negations_for_option('disallowed-foo'); # ('allowed-foo')
   @negs = negations_for_option('allow-foo');      # ('disallow-foo')
   @negs = negations_for_option('disallow-foo');   # ('allow-foo')
  
   @negs = negations_for_option('no-foo');      # ('foo')
  
  =head1 DESCRIPTION
  
  This module aims to provide a nicer negative boolean option names. By default,
  L<Getopt::Long> provides options C<--foo> as well as C<--no-foo> and C<--nofoo>
  if you specify boolean option specification C<foo!>. But this produces
  awkward/incorrect English word like C<--nowith-foo> or C<--no-is-foo>. In those
  two cases, C<--without-foo> and C<--isnt-foo> are better option names.
  
  =head1 FUNCTIONS
  
  None are exported by default, but they are exportable.
  
  =head2 negations_for_option($str) => list
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Getopt-Long-Negate-EN>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Getopt-Long-Negate-EN>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Getopt-Long-Negate-EN>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
GETOPT_LONG_NEGATE_EN

    $main::fatpacked{"Getopt/Long/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'GETOPT_LONG_UTIL';
  package Getopt::Long::Util;
  
  our $DATE = '2016-10-30'; # DATE
  our $VERSION = '0.88'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(
                         parse_getopt_long_opt_spec
                         humanize_getopt_long_opt_spec
                         detect_getopt_long_script
                         gen_getopt_long_spec_from_getopt_std_spec
                 );
  
  our %SPEC;
  
  $SPEC{parse_getopt_long_opt_spec} = {
      v => 1.1,
      summary => 'Parse a single Getopt::Long option specification',
      description => <<'_',
  
  Will produce a hash with some keys:
  
  * `is_arg` (if true, then option specification is the special `<>` for argument
    callback)
  * `opts` (array of option names, in the order specified in the opt spec)
  * `type` (string, type name)
  * `desttype` (either '', or '@' or '%'),
  * `is_neg` (true for `--opt!`)
  * `is_inc` (true for `--opt+`)
  * `min_vals` (int, usually 0 or 1)
  * `max_vals` (int, usually 0 or 1 except for option that requires multiple
    values)
  
  Will return undef if it can't parse the string.
  
  _
      args => {
          optspec => {
              schema => 'str*',
              req => 1,
              pos => 0,
          },
      },
      args_as => 'array',
      result_naked => 1,
      result => {
          schema => 'hash*',
      },
      examples => [
          {
              args => {optspec => 'help|h|?'},
              result => {dash_prefix=>'', opts=>['help', 'h', '?']},
          },
          {
              args => {optspec=>'--foo=s'},
              result => {dash_prefix=>'--', opts=>['foo'], type=>'s', desttype=>''},
          },
      ],
  };
  # BEGIN_BLOCK: parse_getopt_long_opt_spec
  sub parse_getopt_long_opt_spec {
      my $optspec = shift;
      return {is_arg=>1, dash_prefix=>'', opts=>[]}
          if $optspec eq '<>';
      $optspec =~ qr/\A
                 (?P<dash_prefix>-{0,2})
                 (?P<name>[A-Za-z0-9_][A-Za-z0-9_-]*)
                 (?P<aliases> (?: \| (?:[^:|!+=:-][^:|!+=:]*) )*)?
                 (?:
                     (?P<is_neg>!) |
                     (?P<is_inc>\+) |
                     (?:
                         =
                         (?P<type>[siof])
                         (?P<desttype>|[%@])?
                         (?:
                             \{
                             (?: (?P<min_vals>\d+), )?
                             (?P<max_vals>\d+)
                             \}
                         )?
                     ) |
                     (?:
                         :
                         (?P<opttype>[siof])
                         (?P<desttype>|[%@])
                     ) |
                     (?:
                         :
                         (?P<optnum>\d+)
                         (?P<desttype>|[%@])
                     )
                     (?:
                         :
                         (?P<optplus>\+)
                         (?P<desttype>|[%@])
                     )
                 )?
                 \z/x
                     or return undef;
      my %res = %+;
  
      if ($res{aliases}) {
          my @als;
          for my $al (split /\|/, $res{aliases}) {
              next unless length $al;
              next if $al eq $res{name};
              next if grep {$_ eq $al} @als;
              push @als, $al;
          }
          $res{opts} = [$res{name}, @als];
      } else {
          $res{opts} = [$res{name}];
      }
      delete $res{name};
      delete $res{aliases};
  
      $res{is_neg} = 1 if $res{is_neg};
      $res{is_inc} = 1 if $res{is_inc};
  
      \%res;
  }
  # END_BLOCK: parse_getopt_long_opt_spec
  
  $SPEC{humanize_getopt_long_opt_spec} = {
      v => 1.1,
      description => <<'_',
  
  Convert <pm:Getopt::Long> option specification like `help|h|?` or `--foo=s` or
  `debug!` into, respectively, `--help, -h, -?` or `--foo=s` or `--(no)debug`.
  Will die if can't parse the string. The output is suitable for including in
  help/usage text.
  
  _
      args => {
          optspec => {
              schema => 'str*',
              req => 1,
              pos => 0,
          },
      },
      args_as => 'array',
      result_naked => 1,
      result => {
          schema => 'str*',
      },
  };
  sub humanize_getopt_long_opt_spec {
      my $optspec = shift;
  
      my $parse = parse_getopt_long_opt_spec($optspec)
          or die "Can't parse opt spec $optspec";
  
      return "argument" if $parse->{is_arg};
  
      my $res = '';
      my $i = 0;
      for (@{ $parse->{opts} }) {
          $i++;
          $res .= ", " if length($res);
          if ($parse->{is_neg} && length($_) > 1) {
              $res .= "--(no)$_";
          } else {
              if (length($_) > 1) {
                  $res .= "--$_";
              } else {
                  $res .= "-$_";
              }
              $res .= "=$parse->{type}" if $i==1 && $parse->{type};
          }
      }
      $res;
  }
  
  $SPEC{detect_getopt_long_script} = {
      v => 1.1,
      summary => 'Detect whether a file is a Getopt::Long-based CLI script',
      description => <<'_',
  
  The criteria are:
  
  * the file must exist and readable;
  
  * (optional, if `include_noexec` is false) file must have its executable mode
    bit set;
  
  * content must start with a shebang C<#!>;
  
  * either: must be perl script (shebang line contains 'perl') and must contain
    something like `use Getopt::Long`;
  
  _
      args => {
          filename => {
              summary => 'Path to file to be checked',
              schema => 'str*',
              pos => 0,
              cmdline_aliases => {f=>{}},
          },
          string => {
              summary => 'String to be checked',
              schema => 'buf*',
          },
          include_noexec => {
              summary => 'Include scripts that do not have +x mode bit set',
              schema  => 'bool*',
              default => 1,
          },
      },
      args_rels => {
          'req_one' => ['filename', 'string'],
      },
  };
  sub detect_getopt_long_script {
      my %args = @_;
  
      (defined($args{filename}) xor defined($args{string}))
          or return [400, "Please specify either filename or string"];
      my $include_noexec  = $args{include_noexec}  // 1;
  
      my $yesno = 0;
      my $reason = "";
      my %extrameta;
  
      my $str = $args{string};
    DETECT:
      {
          if (defined $args{filename}) {
              my $fn = $args{filename};
              unless (-f $fn) {
                  $reason = "'$fn' is not a file";
                  last;
              };
              if (!$include_noexec && !(-x _)) {
                  $reason = "'$fn' is not an executable";
                  last;
              }
              my $fh;
              unless (open $fh, "<", $fn) {
                  $reason = "Can't be read";
                  last;
              }
              # for efficiency, we read a bit only here
              read $fh, $str, 2;
              unless ($str eq '#!') {
                  $reason = "Does not start with a shebang (#!) sequence";
                  last;
              }
              my $shebang = <$fh>;
              unless ($shebang =~ /perl/) {
                  $reason = "Does not have 'perl' in the shebang line";
                  last;
              }
              seek $fh, 0, 0;
              {
                  local $/;
                  $str = <$fh>;
              }
          }
          unless ($str =~ /\A#!/) {
              $reason = "Does not start with a shebang (#!) sequence";
              last;
          }
          unless ($str =~ /\A#!.*perl/) {
              $reason = "Does not have 'perl' in the shebang line";
              last;
          }
  
          # NOTE: the presence of \s* pattern after ^ causes massive slowdown of
          # the regex when we reach many thousands of lines, so we use split()
  
          #if ($str =~ /^\s*(use|require)\s+(Getopt::Long(?:::Complete)?)(\s|;)/m) {
          #    $yesno = 1;
          #    $extrameta{'func.module'} = $2;
          #    last DETECT;
          #}
  
          for (split /^/, $str) {
              if (/^\s*(use|require)\s+(Getopt::Long(?:::Complete)?)(\s|;|$)/) {
                  $yesno = 1;
                  $extrameta{'func.module'} = $2;
                  last DETECT;
              }
          }
  
          $reason = "Can't find any statement requiring Getopt::Long(?::Complete)? module";
      } # DETECT
  
      [200, "OK", $yesno, {"func.reason"=>$reason, %extrameta}];
  }
  
  $SPEC{gen_getopt_long_spec_from_getopt_std_spec} = {
      v => 1.1,
      summary => 'Generate Getopt::Long spec from Getopt::Std spec',
      args => {
          spec => {
              summary => 'Getopt::Std spec string',
              schema => 'str*',
              req => 1,
              pos => 0,
          },
          is_getopt => {
              summary => 'Whether to assume spec is for getopt() or getopts()',
              description => <<'_',
  
  By default spec is assumed to be for getopts() instead of getopt(). This means
  that for a spec like `abc:`, `a` and `b` don't take argument while `c` does. But
  if `is_getopt` is true, the meaning of `:` is reversed: `a` and `b` take
  arguments while `c` doesn't.
  
  _
              schema => 'bool',
          },
      },
      result_naked => 1,
      result => {
          schema => 'hash*',
      },
  };
  sub gen_getopt_long_spec_from_getopt_std_spec {
      my %args = @_;
  
      my $is_getopt = $args{is_getopt};
      my $spec = {};
  
      while ($args{spec} =~ /(.)(:?)/g) {
          $spec->{$1 . ($is_getopt ? ($2 ? "" : "=s") : ($2 ? "=s" : ""))} =
              sub {};
      }
  
      $spec;
  }
  
  # ABSTRACT: Utilities for Getopt::Long
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Getopt::Long::Util - Utilities for Getopt::Long
  
  =head1 VERSION
  
  This document describes version 0.88 of Getopt::Long::Util (from Perl distribution Getopt-Long-Util), released on 2016-10-30.
  
  =head1 FUNCTIONS
  
  
  =head2 detect_getopt_long_script(%args) -> [status, msg, result, meta]
  
  Detect whether a file is a Getopt::Long-based CLI script.
  
  The criteria are:
  
  =over
  
  =item * the file must exist and readable;
  
  =item * (optional, if C<include_noexec> is false) file must have its executable mode
  bit set;
  
  =item * content must start with a shebang C<#!>;
  
  =item * either: must be perl script (shebang line contains 'perl') and must contain
  something like C<use Getopt::Long>;
  
  =back
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<filename> => I<str>
  
  Path to file to be checked.
  
  =item * B<include_noexec> => I<bool> (default: 1)
  
  Include scripts that do not have +x mode bit set.
  
  =item * B<string> => I<buf>
  
  String to be checked.
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (any)
  
  
  =head2 gen_getopt_long_spec_from_getopt_std_spec(%args) -> hash
  
  Generate Getopt::Long spec from Getopt::Std spec.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<is_getopt> => I<bool>
  
  Whether to assume spec is for getopt() or getopts().
  
  By default spec is assumed to be for getopts() instead of getopt(). This means
  that for a spec like C<abc:>, C<a> and C<b> don't take argument while C<c> does. But
  if C<is_getopt> is true, the meaning of C<:> is reversed: C<a> and C<b> take
  arguments while C<c> doesn't.
  
  =item * B<spec>* => I<str>
  
  Getopt::Std spec string.
  
  =back
  
  Return value:  (hash)
  
  
  =head2 humanize_getopt_long_opt_spec($optspec) -> str
  
  Convert L<Getopt::Long> option specification like C<help|h|?> or C<--foo=s> or
  C<debug!> into, respectively, C<--help, -h, -?> or C<--foo=s> or C<--(no)debug>.
  Will die if can't parse the string. The output is suitable for including in
  help/usage text.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<$optspec>* => I<str>
  
  =back
  
  Return value:  (str)
  
  
  =head2 parse_getopt_long_opt_spec($optspec) -> hash
  
  Parse a single Getopt::Long option specification.
  
  Examples:
  
  =over
  
  =item * Example #1:
  
   parse_getopt_long_opt_spec("help|h|?"); # -> { dash_prefix => "", opts => ["help", "h", "?"] }
  
  =item * Example #2:
  
   parse_getopt_long_opt_spec("--foo=s"); # -> { dash_prefix => "--", desttype => "", opts => ["foo"], type => "s" }
  
  =back
  
  Will produce a hash with some keys:
  
  =over
  
  =item * C<is_arg> (if true, then option specification is the special C<< E<lt>E<gt> >> for argument
  callback)
  
  =item * C<opts> (array of option names, in the order specified in the opt spec)
  
  =item * C<type> (string, type name)
  
  =item * C<desttype> (either '', or '@' or '%'),
  
  =item * C<is_neg> (true for C<--opt!>)
  
  =item * C<is_inc> (true for C<--opt+>)
  
  =item * C<min_vals> (int, usually 0 or 1)
  
  =item * C<max_vals> (int, usually 0 or 1 except for option that requires multiple
  values)
  
  =back
  
  Will return undef if it can't parse the string.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<$optspec>* => I<str>
  
  =back
  
  Return value:  (hash)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Getopt-Long-Util>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Getopt-Long-Util>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Getopt-Long-Util>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Getopt::Long>
  
  L<Getopt::Long::Spec>, which can also parse Getopt::Long spec into hash as well
  as transform back the hash to Getopt::Long spec. OO interface. I should've found
  this module first before writing my own C<parse_getopt_long_opt_spec()>. But at
  least currently C<parse_getopt_long_opt_spec()> is at least about 30-100+%
  faster than Getopt::Long::Spec::Parser, has a much simpler implementation (a
  single regex match), and can handle valid Getopt::Long specs that
  Getopt::Long::Spec::Parser fails to parse, e.g. C<foo|f=s@>.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
GETOPT_LONG_UTIL

    $main::fatpacked{"HTML/AsSubs.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTML_ASSUBS';
  package HTML::AsSubs;
  
  # ABSTRACT: functions that construct a HTML syntax tree
  
  
  use warnings;
  use strict;
  use vars qw(@ISA @EXPORT);
  
  our $VERSION = '5.03'; # VERSION from OurPkgVersion
  
  require HTML::Element;
  require Exporter;
  @ISA = qw(Exporter);
  
  # Problem: exports so damned much.  Has no concept of "export only HTML4
  #  elements".  TODO:?? make something that make functions that just
  #  wrap XML::Generator calls?
  
  
  use vars qw(@TAGS);
  @TAGS = qw(html
      head title base link meta isindex nextid script style
      body h1 h2 h3 h4 h5 h6 p pre div blockquote
      a img br hr
      ol ul dir menu li
      dl dt dd
      dfn cite code em kbd samp strong var address span
      b i u tt
      center font big small strike
      sub sup
      table tr td th caption
      form input select option textarea
      object applet param
      map area
      frame frameset noframe
  );
  
  for (@TAGS) {
      my $code;
      $code = "sub $_ { _elem('$_', \@_); }\n";
      push( @EXPORT, $_ );
  ## no critic
      eval $code;
  ## use critic
      if ($@) {
          die $@;
      }
  }
  
  
  sub _elem {
      my $tag = shift;
      my $attributes;
      if ( @_ and defined $_[0] and ref( $_[0] ) eq "HASH" ) {
          $attributes = shift;
      }
      my $elem = HTML::Element->new( $tag, %$attributes );
      $elem->push_content(@_);
      $elem;
  }
  
  1;
  
  __END__
  
  =pod
  
  =head1 NAME
  
  HTML::AsSubs - functions that construct a HTML syntax tree
  
  =head1 VERSION
  
  This document describes version 5.03 of
  HTML::AsSubs, released September 22, 2012
  as part of L<HTML-Tree|HTML::Tree>.
  
  =head1 SYNOPSIS
  
   use HTML::AsSubs;
   $h = body(
  	   h1("This is the heading"),
  	   p("This is the first paragraph which contains a ",
  	     a({href=>'link.html'}, "link"),
  	     " and an ",
  	     img({src=>'img.gif', alt=>'image'}),
  	     "."
  	    ),
  	  );
   print $h->as_HTML;
  
  =head1 DESCRIPTION
  
  This module exports functions that can be used to construct various
  HTML elements. The functions are named after the tags of the
  corresponding HTML element and are all written in lower case. If the
  first argument is a hash reference then it will be used to initialize the
  attributes of this element. The remaining arguments are regarded as
  content.
  
  For a similar idea (i.e., it's another case where the syntax tree
  of the Perl source mirrors the syntax tree of the HTML produced),
  see HTML::Element's C<new_from_lol> method.
  
  For what I now think is a cleaner implementation of this same idea,
  see the excellent module C<XML::Generator>, which is what I suggest
  for actual real-life use.  (I suggest this over C<HTML::AsSubs> and
  over C<CGI.pm>'s HTML-making functions.)
  
  =head1 ACKNOWLEDGEMENT
  
  This module was inspired by the following message:
  
   Date: Tue, 4 Oct 1994 16:11:30 +0100
   Subject: Wow! I have a large lightbulb above my head!
  
   Take a moment to consider these lines:
  
   %OVERLOAD=( '""' => sub { join("", @{$_[0]}) } );
  
   sub html { my($type)=shift; bless ["<$type>", @_, "</$type>"]; }
  
   :-)  I *love* Perl 5!  Thankyou Larry and Ilya.
  
   Regards,
   Tim Bunce.
  
   p.s. If you didn't get it, think about recursive data types: html(html())
   p.p.s. I'll turn this into a much more practical example in a day or two.
   p.p.p.s. It's a pity that overloads are not inherited. Is this a bug?
  
  =head1 BUGS
  
  The exported link() function overrides the builtin link() function.
  The exported tr() function must be called using &tr(...) syntax
  because it clashes with the builtin tr/../../ operator.
  
  =head1 SEE ALSO
  
  L<HTML::Element>, L<XML::Generator>
  
  =head2 html head title base link meta isindex nextid script style body h1 h2 h3 h4 h5 h6 p pre div blockquote a img br hr ol ul dir menu li dl dt dd dfn cite code em kbd samp strong var address span b i u tt center font big small strike sub sup table tr td th caption form input select option textarea object applet param map area frame frameset noframe
  
  A bunch of methods for creating tags.
  
  =head1 Private Functions
  
  =head2 _elem()
  
  The _elem() function is wrapped by all the html 'tag' functions. It
  takes a tag-name, optional hashref of attributes and a list of content
  as parameters.
  
  =head1 AUTHOR
  
  Current maintainers:
  
  =over
  
  =item * Christopher J. Madsen S<C<< <perl AT cjmweb.net> >>>
  
  =item * Jeff Fearn S<C<< <jfearn AT cpan.org> >>>
  
  =back
  
  Original HTML-Tree author:
  
  =over
  
  =item * Gisle Aas
  
  =back
  
  Former maintainers:
  
  =over
  
  =item * Sean M. Burke
  
  =item * Andy Lester
  
  =item * Pete Krawczyk S<C<< <petek AT cpan.org> >>>
  
  =back
  
  You can follow or contribute to HTML-Tree's development at
  L<< http://github.com/madsen/HTML-Tree >>.
  
  =head1 COPYRIGHT AND LICENSE
  
  Copyright 1995-1998 Gisle Aas, 1999-2004 Sean M. Burke,
  2005 Andy Lester, 2006 Pete Krawczyk, 2010 Jeff Fearn,
  2012 Christopher J. Madsen.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  The programs in this library are distributed in the hope that they
  will be useful, but without any warranty; without even the implied
  warranty of merchantability or fitness for a particular purpose.
  
  =cut
HTML_ASSUBS

    $main::fatpacked{"HTML/Element.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTML_ELEMENT';
  package HTML::Element;
  
  # ABSTRACT: Class for objects that represent HTML elements
  
  use strict;
  use warnings;
  
  our $VERSION = '5.03'; # VERSION from OurPkgVersion
  
  use Carp           ();
  use HTML::Entities ();
  use HTML::Tagset   ();
  use integer;    # vroom vroom!
  
  # This controls encoding entities on output.
  # When set entities won't be re-encoded.
  # Defaulting off because parser defaults to unencoding entities
  our $encoded_content = 0;
  
  use vars qw($html_uc $Debug $ID_COUNTER $VERSION %list_type_to_sub);
  
  # Set up support for weak references, if possible:
  my $using_weaken;
  
  #=head1 CLASS METHODS
  
  
  sub Use_Weak_Refs {
      my $self_or_class = shift;
  
      if (@_) {    # set
          $using_weaken = !! shift; # Normalize boolean value
          Carp::croak("The installed Scalar::Util lacks support for weak references")
                if $using_weaken and not defined &Scalar::Util::weaken;
  
          no warnings 'redefine';
          *_weaken = $using_weaken ? \&Scalar::Util::weaken : sub ($) {};
      } # end if setting value
  
      return $using_weaken;
  } # end Use_Weak_Refs
  
  BEGIN {
      # Attempt to import weaken from Scalar::Util, but don't complain
      # if we can't.  Also, rename it to _weaken.
      require Scalar::Util;
  
      __PACKAGE__->Use_Weak_Refs(defined &Scalar::Util::weaken);
  }
  
  sub import {
      my $class = shift;
  
      for (@_) {
          if (/^-(no_?)?weak$/) {
              $class->Use_Weak_Refs(not $1);
          } else {
              Carp::croak("$_ is not exported by the $class module");
          }
      }
  } # end import
  
  
  $Debug = 0 unless defined $Debug;
  
  #=head1 SUBROUTINES
  
  
  sub Version {
      Carp::carp("Deprecated subroutine HTML::Element::Version called");
      $VERSION;
  }
  
  my $nillio = [];
  
  *HTML::Element::emptyElement   = \%HTML::Tagset::emptyElement;      # legacy
  *HTML::Element::optionalEndTag = \%HTML::Tagset::optionalEndTag;    # legacy
  *HTML::Element::linkElements   = \%HTML::Tagset::linkElements;      # legacy
  *HTML::Element::boolean_attr   = \%HTML::Tagset::boolean_attr;      # legacy
  *HTML::Element::canTighten     = \%HTML::Tagset::canTighten;        # legacy
  
  # Constants for signalling back to the traverser:
  my $travsignal_package = __PACKAGE__ . '::_travsignal';
  my ( $ABORT, $PRUNE, $PRUNE_SOFTLY, $OK, $PRUNE_UP )
      = map { my $x = $_; bless \$x, $travsignal_package; }
      qw(
      ABORT  PRUNE   PRUNE_SOFTLY   OK   PRUNE_UP
  );
  
  
  ## Comments from Father Chrysostomos RT #58880
  ## The sole purpose for empty parentheses after a sub name is to make it
  ## parse as a 0-ary (nihilary?) function. I.e., ABORT+1 should parse as
  ## ABORT()+1, not ABORT(+1). The parentheses also tell perl that it can
  ### be inlined.
  ##Deparse is really useful for demonstrating this:
  ##$ perl -MO=Deparse,-p -e 'sub ABORT {7} print ABORT+8'
  # Vs
  # perl -MO=Deparse,-p -e 'sub ABORT() {7} print ABORT+8'
  #
  # With the parentheses, it not only makes it parse as a term.
  # It even resolves the constant at compile-time, making the code run faster.
  
  ## no critic
  sub ABORT ()        {$ABORT}
  sub PRUNE ()        {$PRUNE}
  sub PRUNE_SOFTLY () {$PRUNE_SOFTLY}
  sub OK ()           {$OK}
  sub PRUNE_UP ()     {$PRUNE_UP}
  ## use critic
  
  $html_uc = 0;
  
  # set to 1 if you want tag and attribute names from starttag and endtag
  #  to be uc'd
  
  # regexs for XML names
  # http://www.w3.org/TR/2006/REC-xml11-20060816/NT-NameStartChar
  my $START_CHAR
      = qr/(?:\:|[A-Z]|_|[a-z]|[\x{C0}-\x{D6}]|[\x{D8}-\x{F6}]|[\x{F8}-\x{2FF}]|[\x{370}-\x{37D}]|[\x{37F}-\x{1FFF}]|[\x{200C}-\x{200D}]|[\x{2070}-\x{218F}]|[\x{2C00}-\x{2FEF}]|[\x{3001}-\x{D7FF}]|[\x{F900}-\x{FDCF}]|[\x{FDF0}-\x{FFFD}]|[\x{10000}-\x{EFFFF}])/;
  
  # http://www.w3.org/TR/2006/REC-xml11-20060816/#NT-NameChar
  my $NAME_CHAR
      = qr/(?:$START_CHAR|-|\.|[0-9]|\x{B7}|[\x{0300}-\x{036F}]|[\x{203F}-\x{2040}])/;
  
  # Elements that does not have corresponding end tags (i.e. are empty)
  
  #==========================================================================
  
  #=head1 BASIC METHODS
  
  
  #
  # An HTML::Element is represented by blessed hash reference, much like
  # Tree::DAG_Node objects.  Key-names not starting with '_' are reserved
  # for the SGML attributes of the element.
  # The following special keys are used:
  #
  #    '_tag':    The tag name (i.e., the generic identifier)
  #    '_parent': A reference to the HTML::Element above (when forming a tree)
  #    '_pos':    The current position (a reference to a HTML::Element) is
  #               where inserts will be placed (look at the insert_element
  #               method)  If not set, the implicit value is the object itself.
  #    '_content': A ref to an array of nodes under this.
  #                It might not be set.
  #
  # Example: <img src="gisle.jpg" alt="Gisle's photo"> is represented like this:
  #
  #  bless {
  #     _tag => 'img',
  #     src  => 'gisle.jpg',
  #     alt  => "Gisle's photo",
  #  }, 'HTML::Element';
  #
  
  sub new {
      my $class = shift;
      $class = ref($class) || $class;
  
      my $tag = shift;
      Carp::croak("No tagname") unless defined $tag and length $tag;
      Carp::croak "\"$tag\" isn't a good tag name!"
          if $tag =~ m/[<>\/\x00-\x20]/;    # minimal sanity, certainly!
      my $self = bless { _tag => scalar( $class->_fold_case($tag) ) }, $class;
      my ( $attr, $val );
      while ( ( $attr, $val ) = splice( @_, 0, 2 ) ) {
  ## RT #42209 why does this default to the attribute name and not remain unset or the empty string?
          $val = $attr unless defined $val;
          $self->{ $class->_fold_case($attr) } = $val;
      }
      if ( $tag eq 'html' ) {
          $self->{'_pos'} = undef;
      }
      _weaken($self->{'_parent'}) if $self->{'_parent'};
      return $self;
  }
  
  
  sub attr {
      my $self = shift;
      my $attr = scalar( $self->_fold_case(shift) );
      if (@_) {    # set
          if ( defined $_[0] ) {
              my $old = $self->{$attr};
              $self->{$attr} = $_[0];
              return $old;
          }
          else {    # delete, actually
              return delete $self->{$attr};
          }
      }
      else {        # get
          return $self->{$attr};
      }
  }
  
  
  sub tag {
      my $self = shift;
      if (@_) {    # set
          $self->{'_tag'} = $self->_fold_case( $_[0] );
      }
      else {       # get
          $self->{'_tag'};
      }
  }
  
  
  sub parent {
      my $self = shift;
      if (@_) {    # set
          Carp::croak "an element can't be made its own parent"
              if defined $_[0] and ref $_[0] and $self eq $_[0];    # sanity
          _weaken($self->{'_parent'} = $_[0]);
      }
      else {
          $self->{'_parent'};                                       # get
      }
  }
  
  
  sub content_list {
      return wantarray
          ? @{ shift->{'_content'} || return () }
          : scalar @{ shift->{'_content'} || return 0 };
  }
  
  
  # a read-only method!  can't say $h->content( [] )!
  sub content {
      return shift->{'_content'};
  }
  
  
  sub content_array_ref {
      return shift->{'_content'} ||= [];
  }
  
  
  sub content_refs_list {
      return \( @{ shift->{'_content'} || return () } );
  }
  
  
  sub implicit {
      return shift->attr( '_implicit', @_ );
  }
  
  
  sub pos {
      my $self = shift;
      my $pos  = $self->{'_pos'};
      if (@_) {    # set
          my $parm = shift;
          if ( defined $parm and $parm ne $self ) {
              $self->{'_pos'} = $parm;    # means that element
          }
          else {
              $self->{'_pos'} = undef;    # means $self
          }
      }
      return $pos if defined($pos);
      return $self;
  }
  
  
  sub all_attr {
      return %{ $_[0] };
  
      # Yes, trivial.  But no other way for the user to do the same
      #  without breaking encapsulation.
      # And if our object representation changes, this method's behavior
      #  should stay the same.
  }
  
  sub all_attr_names {
      return keys %{ $_[0] };
  }
  
  
  sub all_external_attr {
      my $self = $_[0];
      return map( ( length($_) && substr( $_, 0, 1 ) eq '_' )
          ? ()
          : ( $_, $self->{$_} ),
          keys %$self );
  }
  
  sub all_external_attr_names {
      return grep !( length($_) && substr( $_, 0, 1 ) eq '_' ), keys %{ $_[0] };
  }
  
  
  sub id {
      if ( @_ == 1 ) {
          return $_[0]{'id'};
      }
      elsif ( @_ == 2 ) {
          if ( defined $_[1] ) {
              return $_[0]{'id'} = $_[1];
          }
          else {
              return delete $_[0]{'id'};
          }
      }
      else {
          Carp::croak '$node->id can\'t take ' . scalar(@_) . ' parameters!';
      }
  }
  
  
  sub _gensym {
      unless ( defined $ID_COUNTER ) {
  
          # start it out...
          $ID_COUNTER = sprintf( '%04x', rand(0x1000) );
          $ID_COUNTER =~ tr<0-9a-f><J-NP-Z>;    # yes, skip letter "oh"
          $ID_COUNTER .= '00000';
      }
      ++$ID_COUNTER;
  }
  
  sub idf {
      my $nparms = scalar @_;
  
      if ( $nparms == 1 ) {
          my $x;
          if ( defined( $x = $_[0]{'id'} ) and length $x ) {
              return $x;
          }
          else {
              return $_[0]{'id'} = _gensym();
          }
      }
      if ( $nparms == 2 ) {
          if ( defined $_[1] ) {
              return $_[0]{'id'} = $_[1];
          }
          else {
              return delete $_[0]{'id'};
          }
      }
      Carp::croak '$node->idf can\'t take ' . scalar(@_) . ' parameters!';
  }
  
  
  sub push_content {
      my $self = shift;
      return $self unless @_;
  
      my $content = ( $self->{'_content'} ||= [] );
      for (@_) {
          if ( ref($_) eq 'ARRAY' ) {
  
              # magically call new_from_lol
              push @$content, $self->new_from_lol($_);
              _weaken($content->[-1]->{'_parent'} = $self);
          }
          elsif ( ref($_) ) {    # insert an element
              $_->detach if $_->{'_parent'};
              _weaken($_->{'_parent'} = $self);
              push( @$content, $_ );
          }
          else {                 # insert text segment
              if ( @$content && !ref $content->[-1] ) {
  
                  # last content element is also text segment -- append
                  $content->[-1] .= $_;
              }
              else {
                  push( @$content, $_ );
              }
          }
      }
      return $self;
  }
  
  
  sub unshift_content {
      my $self = shift;
      return $self unless @_;
  
      my $content = ( $self->{'_content'} ||= [] );
      for ( reverse @_ ) {    # so they get added in the order specified
          if ( ref($_) eq 'ARRAY' ) {
  
              # magically call new_from_lol
              unshift @$content, $self->new_from_lol($_);
              _weaken($content->[0]->{'_parent'} = $self);
          }
          elsif ( ref $_ ) {    # insert an element
              $_->detach if $_->{'_parent'};
              _weaken($_->{'_parent'} = $self);
              unshift( @$content, $_ );
          }
          else {                # insert text segment
              if ( @$content && !ref $content->[0] ) {
  
                  # last content element is also text segment -- prepend
                  $content->[0] = $_ . $content->[0];
              }
              else {
                  unshift( @$content, $_ );
              }
          }
      }
      return $self;
  }
  
  # Cf.  splice ARRAY,OFFSET,LENGTH,LIST
  
  
  sub splice_content {
      my ( $self, $offset, $length, @to_add ) = @_;
      Carp::croak "splice_content requires at least one argument"
          if @_ < 2;    # at least $h->splice_content($offset);
  
      my $content = ( $self->{'_content'} ||= [] );
  
      # prep the list
  
      my @out;
      if ( @_ > 2 ) {    # self, offset, length, ...
          foreach my $n (@to_add) {
              if ( ref($n) eq 'ARRAY' ) {
                  $n = $self->new_from_lol($n);
                  _weaken($n->{'_parent'} = $self);
              }
              elsif ( ref($n) ) {
                  $n->detach;
                  _weaken($n->{'_parent'} = $self);
              }
          }
          @out = splice @$content, $offset, $length, @to_add;
      }
      else {    #  self, offset
          @out = splice @$content, $offset;
      }
      foreach my $n (@out) {
          $n->{'_parent'} = undef if ref $n;
      }
      return @out;
  }
  
  
  sub detach {
      my $self = $_[0];
      return undef unless ( my $parent = $self->{'_parent'} );
      $self->{'_parent'} = undef;
      my $cohort = $parent->{'_content'} || return $parent;
      @$cohort = grep { not( ref($_) and $_ eq $self ) } @$cohort;
  
      # filter $self out, if parent has any evident content
  
      return $parent;
  }
  
  
  sub detach_content {
      my $c = $_[0]->{'_content'} || return ();    # in case of no content
      for (@$c) {
          $_->{'_parent'} = undef if ref $_;
      }
      return splice @$c;
  }
  
  
  sub replace_with {
      my ( $self, @replacers ) = @_;
      Carp::croak "the target node has no parent"
          unless my ($parent) = $self->{'_parent'};
  
      my $parent_content = $parent->{'_content'};
      Carp::croak "the target node's parent has no content!?"
          unless $parent_content and @$parent_content;
  
      my $replacers_contains_self;
      for (@replacers) {
          if ( !ref $_ ) {
  
              # noop
          }
          elsif ( $_ eq $self ) {
  
              # noop, but check that it's there just once.
              Carp::croak "Replacement list contains several copies of target!"
                  if $replacers_contains_self++;
          }
          elsif ( $_ eq $parent ) {
              Carp::croak "Can't replace an item with its parent!";
          }
          elsif ( ref($_) eq 'ARRAY' ) {
              $_ = $self->new_from_lol($_);
              _weaken($_->{'_parent'} = $parent);
          }
          else {
              $_->detach;
              _weaken($_->{'_parent'} = $parent);
  
              # each of these are necessary
          }
      }    # for @replacers
      @$parent_content = map { ( ref($_) and $_ eq $self ) ? @replacers : $_ }
          @$parent_content;
  
      $self->{'_parent'} = undef unless $replacers_contains_self;
  
      # if replacers does contain self, then the parent attribute is fine as-is
  
      return $self;
  }
  
  
  sub preinsert {
      my $self = shift;
      return $self unless @_;
      return $self->replace_with( @_, $self );
  }
  
  
  sub postinsert {
      my $self = shift;
      return $self unless @_;
      return $self->replace_with( $self, @_ );
  }
  
  
  sub replace_with_content {
      my $self = $_[0];
      Carp::croak "the target node has no parent"
          unless my ($parent) = $self->{'_parent'};
  
      my $parent_content = $parent->{'_content'};
      Carp::croak "the target node's parent has no content!?"
          unless $parent_content and @$parent_content;
  
      my $content_r = $self->{'_content'} || [];
      @$parent_content = map { ( ref($_) and $_ eq $self ) ? @$content_r : $_ }
          @$parent_content;
  
      $self->{'_parent'} = undef;    # detach $self from its parent
  
      # Update parentage link, removing from $self's content list
      for ( splice @$content_r ) { _weaken($_->{'_parent'} = $parent) if ref $_ }
  
      return $self;                  # note: doesn't destroy it.
  }
  
  
  sub delete_content {
      for (
          splice @{
              delete( $_[0]->{'_content'} )
  
                  # Deleting it here (while holding its value, for the moment)
                  #  will keep calls to detach() from trying to uselessly filter
                  #  the list (as they won't be able to see it once it's been
                  #  deleted)
                  || return ( $_[0] )    # in case of no content
          },
          0
  
          # the splice is so we can null the array too, just in case
          # something somewhere holds a ref to it
          )
      {
          $_->delete if ref $_;
      }
      $_[0];
  }
  
  
  # two handy aliases
  sub destroy         { shift->delete(@_) }
  sub destroy_content { shift->delete_content(@_) }
  
  sub delete {
      my $self = $_[0];
      $self->delete_content    # recurse down
          if $self->{'_content'} && @{ $self->{'_content'} };
  
      $self->detach if $self->{'_parent'} and $self->{'_parent'}{'_content'};
  
      # not the typical case
  
      %$self = ();             # null out the whole object on the way out
      return;
  }
  
  
  sub clone {
  
      #print "Cloning $_[0]\n";
      my $it = shift;
      Carp::croak "clone() can be called only as an object method"
          unless ref $it;
      Carp::croak "clone() takes no arguments" if @_;
  
      my $new = bless {%$it}, ref($it);    # COPY!!! HOOBOY!
      delete @$new{ '_content', '_parent', '_pos', '_head', '_body' };
  
      # clone any contents
      if ( $it->{'_content'} and @{ $it->{'_content'} } ) {
          $new->{'_content'}
              = [ ref($it)->clone_list( @{ $it->{'_content'} } ) ];
          for ( @{ $new->{'_content'} } ) {
              _weaken($_->{'_parent'} = $new) if ref $_;
          }
      }
  
      return $new;
  }
  
  
  sub clone_list {
      Carp::croak "clone_list can be called only as a class method"
          if ref shift @_;
  
      # all that does is get me here
      return map {
          ref($_)
              ? $_->clone    # copy by method
              : $_           # copy by evaluation
      } @_;
  }
  
  
  sub normalize_content {
      my $start = $_[0];
      my $c;
      return
          unless $c = $start->{'_content'} and ref $c and @$c;   # nothing to do
          # TODO: if we start having text elements, deal with catenating those too?
      my @stretches = (undef);    # start with a barrier
  
      # I suppose this could be rewritten to treat stretches as it goes, instead
      #  of at the end.  But feh.
  
      # Scan:
      for ( my $i = 0; $i < @$c; ++$i ) {
          if ( defined $c->[$i] and ref $c->[$i] ) {    # not a text segment
              if ( $stretches[0] ) {
  
                  # put in a barrier
                  if ( $stretches[0][1] == 1 ) {
  
                      #print "Nixing stretch at ", $i-1, "\n";
                      undef $stretches[0]; # nix the previous one-node "stretch"
                  }
                  else {
  
                      #print "End of stretch at ", $i-1, "\n";
                      unshift @stretches, undef;
                  }
              }
  
              # else no need for a barrier
          }
          else {                           # text segment
              $c->[$i] = '' unless defined $c->[$i];
              if ( $stretches[0] ) {
                  ++$stretches[0][1];      # increase length
              }
              else {
  
                  #print "New stretch at $i\n";
                  unshift @stretches, [ $i, 1 ];    # start and length
              }
          }
      }
  
      # Now combine.  Note that @stretches is in reverse order, so the indexes
      # still make sense as we work our way thru (i.e., backwards thru $c).
      foreach my $s (@stretches) {
          if ( $s and $s->[1] > 1 ) {
  
              #print "Stretch at ", $s->[0], " for ", $s->[1], "\n";
              $c->[ $s->[0] ]
                  .= join( '', splice( @$c, $s->[0] + 1, $s->[1] - 1 ) )
  
                  # append the subsequent ones onto the first one.
          }
      }
      return;
  }
  
  
  sub delete_ignorable_whitespace {
  
      # This doesn't delete all sorts of whitespace that won't actually
      #  be used in rendering, tho -- that's up to the rendering application.
      # For example:
      #   <input type='text' name='foo'>
      #     [some whitespace]
      #   <input type='text' name='bar'>
      # The WS between the two elements /will/ get used by the renderer.
      # But here:
      #   <input type='hidden' name='foo' value='1'>
      #     [some whitespace]
      #   <input type='text' name='bar' value='2'>
      # the WS between them won't be rendered in any way, presumably.
  
      #my $Debug = 4;
      die "delete_ignorable_whitespace can be called only as an object method"
          unless ref $_[0];
  
      print "About to tighten up...\n" if $Debug > 2;
      my (@to_do) = ( $_[0] );    # Start off.
      my ( $i, $sibs, $ptag, $this );    # scratch for the loop...
      while (@to_do) {
          if (   ( $ptag = ( $this = shift @to_do )->{'_tag'} ) eq 'pre'
              or $ptag eq 'textarea'
              or $HTML::Tagset::isCDATA_Parent{$ptag} )
          {
  
              # block the traversal under those
              print "Blocking traversal under $ptag\n" if $Debug;
              next;
          }
          next unless ( $sibs = $this->{'_content'} and @$sibs );
          for ( $i = $#$sibs; $i >= 0; --$i ) {   # work backwards thru the list
              if ( ref $sibs->[$i] ) {
                  unshift @to_do, $sibs->[$i];
  
                  # yes, this happens in pre order -- we're going backwards
                  # thru this sibling list.  I doubt it actually matters, tho.
                  next;
              }
              next if $sibs->[$i] =~ m<[^\n\r\f\t ]>s;   # it's /all/ whitespace
  
              print "Under $ptag whose canTighten ",
                  "value is ", 0 + $HTML::Element::canTighten{$ptag}, ".\n"
                  if $Debug > 3;
  
              # It's all whitespace...
  
              if ( $i == 0 ) {
                  if ( @$sibs == 1 ) {                   # I'm an only child
                      next unless $HTML::Element::canTighten{$ptag};    # parent
                  }
                  else {    # I'm leftmost of many
                            # if either my parent or sib are eligible, I'm good.
                      next
                          unless $HTML::Element::canTighten{$ptag}    # parent
                              or (ref $sibs->[1]
                                  and $HTML::Element::canTighten{ $sibs->[1]
                                          {'_tag'} }    # right sib
                              );
                  }
              }
              elsif ( $i == $#$sibs ) {                 # I'm rightmost of many
                      # if either my parent or sib are eligible, I'm good.
                  next
                      unless $HTML::Element::canTighten{$ptag}    # parent
                          or (ref $sibs->[ $i - 1 ]
                              and $HTML::Element::canTighten{ $sibs->[ $i - 1 ]
                                      {'_tag'} }                  # left sib
                          );
              }
              else {    # I'm the piggy in the middle
                        # My parent doesn't matter -- it all depends on my sibs
                  next
                      unless ref $sibs->[ $i - 1 ]
                          or ref $sibs->[ $i + 1 ];
  
                  # if NEITHER sib is a node, quit
  
                  next if
  
                      # bailout condition: if BOTH are INeligible nodes
                      #  (as opposed to being text, or being eligible nodes)
                      ref $sibs->[ $i - 1 ]
                          and ref $sibs->[ $i + 1 ]
                          and !$HTML::Element::canTighten{ $sibs->[ $i - 1 ]
                                  {'_tag'} }    # left sib
                          and !$HTML::Element::canTighten{ $sibs->[ $i + 1 ]
                                  {'_tag'} }    # right sib
                  ;
              }
  
         # Unknown tags aren't in canTighten and so AREN'T subject to tightening
  
              print "  delendum: child $i of $ptag\n" if $Debug > 3;
              splice @$sibs, $i, 1;
          }
  
          # end of the loop-over-children
      }
  
      # end of the while loop.
  
      return;
  }
  
  
  sub insert_element {
      my ( $self, $tag, $implicit ) = @_;
      return $self->pos() unless $tag;    # noop if nothing to insert
  
      my $e;
      if ( ref $tag ) {
          $e   = $tag;
          $tag = $e->tag;
      }
      else {    # just a tag name -- so make the element
          $e = $self->element_class->new($tag);
          ++( $self->{'_element_count'} ) if exists $self->{'_element_count'};
  
          # undocumented.  see TreeBuilder.
      }
  
      $e->{'_implicit'} = 1 if $implicit;
  
      my $pos = $self->{'_pos'};
      $pos = $self unless defined $pos;
  
      $pos->push_content($e);
  
      $self->{'_pos'} = $pos = $e
          unless $self->_empty_element_map->{$tag} || $e->{'_empty_element'};
  
      $pos;
  }
  
  #==========================================================================
  # Some things to override in XML::Element
  
  sub _empty_element_map {
      \%HTML::Element::emptyElement;
  }
  
  sub _fold_case_LC {
      if (wantarray) {
          shift;
          map lc($_), @_;
      }
      else {
          return lc( $_[1] );
      }
  }
  
  sub _fold_case_NOT {
      if (wantarray) {
          shift;
          @_;
      }
      else {
          return $_[1];
      }
  }
  
  *_fold_case = \&_fold_case_LC;
  
  #==========================================================================
  
  #=head1 DUMPING METHODS
  
  
  sub dump {
      my ( $self, $fh, $depth ) = @_;
      $fh    = *STDOUT{IO} unless defined $fh;
      $depth = 0           unless defined $depth;
      print $fh "  " x $depth, $self->starttag, " \@", $self->address,
          $self->{'_implicit'} ? " (IMPLICIT)\n" : "\n";
      for ( @{ $self->{'_content'} } ) {
          if ( ref $_ ) {    # element
              $_->dump( $fh, $depth + 1 );    # recurse
          }
          else {                              # text node
              print $fh "  " x ( $depth + 1 );
              if ( length($_) > 65 or m<[\x00-\x1F]> ) {
  
                  # it needs prettyin' up somehow or other
                  my $x
                      = ( length($_) <= 65 )
                      ? $_
                      : ( substr( $_, 0, 65 ) . '...' );
                  $x =~ s<([\x00-\x1F])>
                       <'\\x'.(unpack("H2",$1))>eg;
                  print $fh qq{"$x"\n};
              }
              else {
                  print $fh qq{"$_"\n};
              }
          }
      }
  }
  
  
  sub as_HTML {
      my ( $self, $entities, $indent, $omissible_map ) = @_;
  
      #my $indent_on = defined($indent) && length($indent);
      my @html = ();
  
      $omissible_map ||= \%HTML::Element::optionalEndTag;
      my $empty_element_map = $self->_empty_element_map;
  
      my $last_tag_tightenable    = 0;
      my $this_tag_tightenable    = 0;
      my $nonindentable_ancestors = 0;    # count of nonindentible tags over us.
  
      my ( $tag, $node, $start, $depth ); # per-iteration scratch
  
      if ( defined($indent) && length($indent) ) {
          $self->traverse(
              sub {
                  ( $node, $start, $depth ) = @_;
                  if ( ref $node ) {      # it's an element
  
                      # detect bogus classes. RT #35948, #61673
                      $node->can('starttag')
                          or Carp::confess( "Object of class "
                              . ref($node)
                              . " cannot be processed by HTML::Element" );
  
                      $tag = $node->{'_tag'};
  
                      if ($start) {       # on the way in
                          if ((   $this_tag_tightenable
                                  = $HTML::Element::canTighten{$tag}
                              )
                              and !$nonindentable_ancestors
                              and $last_tag_tightenable
                              )
                          {
                              push
                                  @html,
                                  "\n",
                                  $indent x $depth,
                                  $node->starttag($entities),
                                  ;
                          }
                          else {
                              push( @html, $node->starttag($entities) );
                          }
                          $last_tag_tightenable = $this_tag_tightenable;
  
                          ++$nonindentable_ancestors
                              if $tag eq 'pre' or $tag eq 'textarea'
                                  or $HTML::Tagset::isCDATA_Parent{$tag};
  
                      }
                      elsif (
                          not(   $empty_element_map->{$tag}
                              or $omissible_map->{$tag} )
                          )
                      {
  
                          # on the way out
                          if (   $tag eq 'pre' or $tag eq 'textarea'
                              or $HTML::Tagset::isCDATA_Parent{$tag} )
                          {
                              --$nonindentable_ancestors;
                              $last_tag_tightenable
                                  = $HTML::Element::canTighten{$tag};
                              push @html, $node->endtag;
  
                          }
                          else {    # general case
                              if ((   $this_tag_tightenable
                                      = $HTML::Element::canTighten{$tag}
                                  )
                                  and !$nonindentable_ancestors
                                  and $last_tag_tightenable
                                  )
                              {
                                  push
                                      @html,
                                      "\n",
                                      $indent x $depth,
                                      $node->endtag,
                                      ;
                              }
                              else {
                                  push @html, $node->endtag;
                              }
                              $last_tag_tightenable = $this_tag_tightenable;
  
                             #print "$tag tightenable: $this_tag_tightenable\n";
                          }
                      }
                  }
                  else {    # it's a text segment
  
                      $last_tag_tightenable = 0;    # I guess this is right
                      HTML::Entities::encode_entities( $node, $entities )
  
                          # That does magic things if $entities is undef.
                          unless (
                          ( defined($entities) && !length($entities) )
  
                          # If there's no entity to encode, don't call it
                          || $HTML::Tagset::isCDATA_Parent{ $_[3]{'_tag'} }
  
                          # To keep from amp-escaping children of script et al.
                          # That doesn't deal with descendants; but then, CDATA
                          #  parents shouldn't /have/ descendants other than a
                          #  text children (or comments?)
                          || $encoded_content
                          );
                      if ($nonindentable_ancestors) {
                          push @html, $node;    # say no go
                      }
                      else {
                          if ($last_tag_tightenable) {
                              $node =~ s<[\n\r\f\t ]+>< >s;
  
                              #$node =~ s< $><>s;
                              $node =~ s<^ ><>s;
                              push
                                  @html,
                                  "\n",
                                  $indent x $depth,
                                  $node,
  
             #Text::Wrap::wrap($indent x $depth, $indent x $depth, "\n" . $node)
                                  ;
                          }
                          else {
                              push
                                  @html,
                                  $node,
  
                                  #Text::Wrap::wrap('', $indent x $depth, $node)
                                  ;
                          }
                      }
                  }
                  1;    # keep traversing
              }
          );            # End of parms to traverse()
      }
      else {            # no indenting -- much simpler code
          $self->traverse(
              sub {
                  ( $node, $start ) = @_;
                  if ( ref $node ) {
  
                      # detect bogus classes. RT #35948
                      $node->isa( $self->element_class )
                          or Carp::confess( "Object of class "
                              . ref($node)
                              . " cannot be processed by HTML::Element" );
  
                      $tag = $node->{'_tag'};
                      if ($start) {    # on the way in
                          push( @html, $node->starttag($entities) );
                      }
                      elsif (
                          not(   $empty_element_map->{$tag}
                              or $omissible_map->{$tag} )
                          )
                      {
  
                          # on the way out
                          push( @html, $node->endtag );
                      }
                  }
                  else {
  
                      # simple text content
                      HTML::Entities::encode_entities( $node, $entities )
  
                          # That does magic things if $entities is undef.
                          unless (
                          ( defined($entities) && !length($entities) )
  
                          # If there's no entity to encode, don't call it
                          || $HTML::Tagset::isCDATA_Parent{ $_[3]{'_tag'} }
  
                          # To keep from amp-escaping children of script et al.
                          # That doesn't deal with descendants; but then, CDATA
                          #  parents shouldn't /have/ descendants other than a
                          #  text children (or comments?)
                          || $encoded_content
                          );
                      push( @html, $node );
                  }
                  1;    # keep traversing
              }
          );            # End of parms to traverse()
      }
  
      if ( $self->{_store_declarations} && defined $self->{_decl} ) {
          unshift @html, sprintf "<!%s>\n", $self->{_decl}->{text};
      }
  
      return join( '', @html );
  }
  
  
  sub as_text {
  
      # Yet another iteratively implemented traverser
      my ( $this, %options ) = @_;
      my $skip_dels = $options{'skip_dels'} || 0;
      my (@pile) = ($this);
      my $tag;
      my $text = '';
      while (@pile) {
          if ( !defined( $pile[0] ) ) {    # undef!
                                           # no-op
          }
          elsif ( !ref( $pile[0] ) ) {     # text bit!  save it!
              $text .= shift @pile;
          }
          else {                           # it's a ref -- traverse under it
              unshift @pile, @{ $this->{'_content'} || $nillio }
                  unless ( $tag = ( $this = shift @pile )->{'_tag'} ) eq 'style'
                  or $tag eq 'script'
                  or ( $skip_dels and $tag eq 'del' );
          }
      }
      return $text;
  }
  
  # extra_chars added for RT #26436
  sub as_trimmed_text {
      my ( $this, %options ) = @_;
      my $text = $this->as_text(%options);
      my $extra_chars = defined $options{'extra_chars'}
                          ? $options{'extra_chars'} : '';
  
      $text =~ s/[\n\r\f\t$extra_chars ]+$//s;
      $text =~ s/^[\n\r\f\t$extra_chars ]+//s;
      $text =~ s/[\n\r\f\t$extra_chars ]+/ /g;
      return $text;
  }
  
  sub as_text_trimmed { shift->as_trimmed_text(@_) }   # alias, because I forget
  
  
  # TODO: make it wrap, if not indent?
  
  sub as_XML {
  
      # based an as_HTML
      my ($self) = @_;
  
      #my $indent_on = defined($indent) && length($indent);
      my @xml               = ();
      my $empty_element_map = $self->_empty_element_map;
  
      my ( $tag, $node, $start );    # per-iteration scratch
      $self->traverse(
          sub {
              ( $node, $start ) = @_;
              if ( ref $node ) {     # it's an element
                  $tag = $node->{'_tag'};
                  if ($start) {      # on the way in
  
                      foreach my $attr ( $node->all_attr_names() ) {
                          Carp::croak(
                              "$tag has an invalid attribute name '$attr'")
                              unless ( $attr eq '/' || $self->_valid_name($attr) );
                      }
  
                      if ( $empty_element_map->{$tag}
                          and !@{ $node->{'_content'} || $nillio } )
                      {
                          push( @xml, $node->starttag_XML( undef, 1 ) );
                      }
                      else {
                          push( @xml, $node->starttag_XML(undef) );
                      }
                  }
                  else {    # on the way out
                      unless ( $empty_element_map->{$tag}
                          and !@{ $node->{'_content'} || $nillio } )
                      {
                          push( @xml, $node->endtag_XML() );
                      }     # otherwise it will have been an <... /> tag.
                  }
              }
              else {        # it's just text
                  _xml_escape($node);
                  push( @xml, $node );
              }
              1;            # keep traversing
          }
      );
  
      join( '', @xml, "\n" );
  }
  
  sub _xml_escape {
  
  # DESTRUCTIVE (a.k.a. "in-place")
  # Five required escapes: http://www.w3.org/TR/2006/REC-xml11-20060816/#syntax
  # We allow & if it's part of a valid escape already: http://www.w3.org/TR/2006/REC-xml11-20060816/#sec-references
      foreach my $x (@_) {
  
          # In strings with no encoded entities all & should be encoded.
          if ($encoded_content) {
              $x
                  =~ s/&(?!                 # An ampersand that isn't followed by...
                  (\#\d+; |                 # A hash mark, digits and semicolon, or
                  \#x[\da-f]+; |            # A hash mark, "x", hex digits and semicolon, or
                  $START_CHAR$NAME_CHAR+; ) # A valid unicode entity name and semicolon
             )/&amp;/gx;    # Needs to be escaped to amp
          }
          else {
              $x =~ s/&/&amp;/g;
          }
  
          # simple character escapes
          $x =~ s/</&lt;/g;
          $x =~ s/>/&gt;/g;
          $x =~ s/"/&quot;/g;
          $x =~ s/'/&apos;/g;
      }
      return;
  }
  
  
  # NOTES:
  #
  # It's been suggested that attribute names be made :-keywords:
  #   (:_tag "img" :border 0 :src "pie.png" :usemap "#main.map")
  # However, it seems that Scheme has no such data type as :-keywords.
  # So, for the moment at least, I tend toward simplicity, uniformity,
  #  and universality, where everything a string or a list.
  
  sub as_Lisp_form {
      my @out;
  
      my $sub;
      my $depth = 0;
      my ( @list, $val );
      $sub = sub {    # Recursor
          my $self = $_[0];
          @list = ( '_tag', $self->{'_tag'} );
          @list = () unless defined $list[-1];    # unlikely
  
          for ( sort keys %$self ) {              # predictable ordering
              next
                  if $_ eq '_content'
                      or $_ eq '_tag'
                      or $_ eq '_parent'
                      or $_ eq '/';
  
              # Leave the other private attributes, I guess.
              push @list, $_, $val
                  if defined( $val = $self->{$_} );    # and !ref $val;
          }
  
          for (@list) {
  
              # octal-escape it
              s<([^\x20\x21\x23\x27-\x5B\x5D-\x7E])>
           <sprintf('\\%03o',ord($1))>eg;
              $_ = qq{"$_"};
          }
          push @out, ( '  ' x $depth ) . '(' . join ' ', splice @list;
          if ( @{ $self->{'_content'} || $nillio } ) {
              $out[-1] .= " \"_content\" (\n";
              ++$depth;
              foreach my $c ( @{ $self->{'_content'} } ) {
                  if ( ref($c) ) {
  
                      # an element -- recurse
                      $sub->($c);
                  }
                  else {
  
                      # a text segment -- stick it in and octal-escape it
                      push @out, $c;
                      $out[-1] =~ s<([^\x20\x21\x23\x27-\x5B\x5D-\x7E])>
               <sprintf('\\%03o',ord($1))>eg;
  
                      # And quote and indent it.
                      $out[-1] .= "\"\n";
                      $out[-1] = ( '  ' x $depth ) . '"' . $out[-1];
                  }
              }
              --$depth;
              substr( $out[-1], -1 )
                  = "))\n";    # end of _content and of the element
          }
          else {
              $out[-1] .= ")\n";
          }
          return;
      };
  
      $sub->( $_[0] );
      undef $sub;
      return join '', @out;
  }
  
  
  sub format {
      my ( $self, $formatter ) = @_;
      unless ( defined $formatter ) {
          # RECOMMEND PREREQ: HTML::FormatText
          require HTML::FormatText;
          $formatter = HTML::FormatText->new();
      }
      $formatter->format($self);
  }
  
  
  sub starttag {
      my ( $self, $entities ) = @_;
  
      my $name = $self->{'_tag'};
  
      return $self->{'text'}              if $name eq '~literal';
      return "<!" . $self->{'text'} . ">" if $name eq '~declaration';
      return "<?" . $self->{'text'} . ">" if $name eq '~pi';
  
      if ( $name eq '~comment' ) {
          if ( ref( $self->{'text'} || '' ) eq 'ARRAY' ) {
  
              # Does this ever get used?  And is this right?
              return
                  "<!"
                  . join( ' ', map( "--$_--", @{ $self->{'text'} } ) ) . ">";
          }
          else {
              return "<!--" . $self->{'text'} . "-->";
          }
      }
  
      my $tag = $html_uc ? "<\U$name" : "<\L$name";
      my $val;
      for ( sort keys %$self ) {    # predictable ordering
          next if !length $_ or m/^_/s or $_ eq '/';
          $val = $self->{$_};
          next if !defined $val;    # or ref $val;
          if ($_ eq $val &&         # if attribute is boolean, for this element
              exists( $HTML::Element::boolean_attr{$name} )
              && (ref( $HTML::Element::boolean_attr{$name} )
                  ? $HTML::Element::boolean_attr{$name}{$_}
                  : $HTML::Element::boolean_attr{$name} eq $_
              )
              )
          {
              $tag .= $html_uc ? " \U$_" : " \L$_";
          }
          else {                    # non-boolean attribute
  
              if ( ref $val eq 'HTML::Element'
                  and $val->{_tag} eq '~literal' )
              {
                  $val = $val->{text};
              }
              else {
                  HTML::Entities::encode_entities( $val, $entities )
                      unless (
                      defined($entities) && !length($entities)
                      || $encoded_content
  
                      );
              }
  
              $val = qq{"$val"};
              $tag .= $html_uc ? qq{ \U$_\E=$val} : qq{ \L$_\E=$val};
          }
      }    # for keys
      if ( scalar $self->content_list == 0
          && $self->_empty_element_map->{ $self->tag } )
      {
          return $tag . " />";
      }
      else {
          return $tag . ">";
      }
  }
  
  
  sub starttag_XML {
      my ($self) = @_;
  
      # and a third parameter to signal emptiness?
  
      my $name = $self->{'_tag'};
  
      return $self->{'text'}               if $name eq '~literal';
      return '<!' . $self->{'text'} . '>'  if $name eq '~declaration';
      return "<?" . $self->{'text'} . "?>" if $name eq '~pi';
  
      if ( $name eq '~comment' ) {
          if ( ref( $self->{'text'} || '' ) eq 'ARRAY' ) {
  
              # Does this ever get used?  And is this right?
              $name = join( ' ', @{ $self->{'text'} } );
          }
          else {
              $name = $self->{'text'};
          }
          $name =~ s/--/-&#45;/g;    # can't have double --'s in XML comments
          return "<!-- $name -->";
      }
  
      my $tag = "<$name";
      my $val;
      for ( sort keys %$self ) {     # predictable ordering
          next if !length $_ or m/^_/s or $_ eq '/';
  
          # Hm -- what to do if val is undef?
          # I suppose that shouldn't ever happen.
          next if !defined( $val = $self->{$_} );    # or ref $val;
          _xml_escape($val);
          $tag .= qq{ $_="$val"};
      }
      @_ == 3 ? "$tag />" : "$tag>";
  }
  
  
  sub endtag {
      $html_uc ? "</\U$_[0]->{'_tag'}>" : "</\L$_[0]->{'_tag'}>";
  }
  
  sub endtag_XML {
      "</$_[0]->{'_tag'}>";
  }
  
  #==========================================================================
  # This, ladies and germs, is an iterative implementation of a
  # recursive algorithm.  DON'T TRY THIS AT HOME.
  # Basically, the algorithm says:
  #
  # To traverse:
  #   1: pre-order visit this node
  #   2: traverse any children of this node
  #   3: post-order visit this node, unless it's a text segment,
  #       or a prototypically empty node (like "br", etc.)
  # Add to that the consideration of the callbacks' return values,
  # so you can block visitation of the children, or siblings, or
  # abort the whole excursion, etc.
  #
  # So, why all this hassle with making the code iterative?
  # It makes for real speed, because it eliminates the whole
  # hassle of Perl having to allocate scratch space for each
  # instance of the recursive sub.  Since the algorithm
  # is basically simple (and not all recursive ones are!) and
  # has few necessary lexicals (basically just the current node's
  # content list, and the current position in it), it was relatively
  # straightforward to store that information not as the frame
  # of a sub, but as a stack, i.e., a simple Perl array (well, two
  # of them, actually: one for content-listrefs, one for indexes of
  # current position in each of those).
  
  my $NIL = [];
  
  sub traverse {
      my ( $start, $callback, $ignore_text ) = @_;
  
      Carp::croak "traverse can be called only as an object method"
          unless ref $start;
  
      Carp::croak('must provide a callback for traverse()!')
          unless defined $callback and ref $callback;
  
      # Elementary type-checking:
      my ( $c_pre, $c_post );
      if ( UNIVERSAL::isa( $callback, 'CODE' ) ) {
          $c_pre = $c_post = $callback;
      }
      elsif ( UNIVERSAL::isa( $callback, 'ARRAY' ) ) {
          ( $c_pre, $c_post ) = @$callback;
          Carp::croak(
              "pre-order callback \"$c_pre\" is true but not a coderef!")
              if $c_pre and not UNIVERSAL::isa( $c_pre, 'CODE' );
          Carp::croak(
              "pre-order callback \"$c_post\" is true but not a coderef!")
              if $c_post and not UNIVERSAL::isa( $c_post, 'CODE' );
          return $start unless $c_pre or $c_post;
  
          # otherwise there'd be nothing to actually do!
      }
      else {
          Carp::croak("$callback is not a known kind of reference")
              unless ref($callback);
      }
  
      my $empty_element_map = $start->_empty_element_map;
  
      my (@C) = [$start];    # a stack containing lists of children
      my (@I) = (-1);        # initial value must be -1 for each list
           # a stack of indexes to current position in corresponding lists in @C
           # In each of these, 0 is the active point
  
      # scratch:
      my ($rv,           # return value of callback
          $this,         # current node
          $content_r,    # child list of $this
      );
  
      # THE BIG LOOP
      while (@C) {
  
          # Move to next item in this frame
          if ( !defined( $I[0] ) or ++$I[0] >= @{ $C[0] } ) {
  
              # We either went off the end of this list, or aborted the list
              # So call the post-order callback:
              if (    $c_post
                  and defined $I[0]
                  and @C > 1
  
                  # to keep the next line from autovivifying
                  and defined( $this = $C[1][ $I[1] ] )    # sanity, and
                       # suppress callbacks on exiting the fictional top frame
                  and ref($this)    # sanity
                  and not(
                      $this->{'_empty_element'}
                      || ( $empty_element_map->{ $this->{'_tag'} || '' }
                          && !@{ $this->{'_content'} } )    # RT #49932
                  )    # things that don't get post-order callbacks
                  )
              {
                  shift @I;
                  shift @C;
  
                  #print "Post! at depth", scalar(@I), "\n";
                  $rv = $c_post->(
  
                      #map $_, # copy to avoid any messiness
                      $this,     # 0: this
                      0,         # 1: startflag (0 for post-order call)
                      @I - 1,    # 2: depth
                  );
  
                  if ( defined($rv) and ref($rv) eq $travsignal_package ) {
                      $rv = $$rv;    #deref
                      if ( $rv eq 'ABORT' ) {
                          last;      # end of this excursion!
                      }
                      elsif ( $rv eq 'PRUNE' ) {
  
                          # NOOP on post!!
                      }
                      elsif ( $rv eq 'PRUNE_SOFTLY' ) {
  
                          # NOOP on post!!
                      }
                      elsif ( $rv eq 'OK' ) {
  
                          # noop
                      }
                      elsif ( $rv eq 'PRUNE_UP' ) {
                          $I[0] = undef;
                      }
                      else {
                          die "Unknown travsignal $rv\n";
  
                          # should never happen
                      }
                  }
              }
              else {
                  shift @I;
                  shift @C;
              }
              next;
          }
  
          $this = $C[0][ $I[0] ];
  
          if ($c_pre) {
              if ( defined $this and ref $this ) {    # element
                  $rv = $c_pre->(
  
                      #map $_, # copy to avoid any messiness
                      $this,     # 0: this
                      1,         # 1: startflag (1 for pre-order call)
                      @I - 1,    # 2: depth
                  );
              }
              else {             # text segment
                  next if $ignore_text;
                  $rv = $c_pre->(
  
                      #map $_, # copy to avoid any messiness
                      $this,           # 0: this
                      1,               # 1: startflag (1 for pre-order call)
                      @I - 1,          # 2: depth
                      $C[1][ $I[1] ],  # 3: parent
                                       # And there will always be a $C[1], since
                               #  we can't start traversing at a text node
                      $I[0]    # 4: index of self in parent's content list
                  );
              }
              if ( not $rv ) {    # returned false.  Same as PRUNE.
                  next;           # prune
              }
              elsif ( ref($rv) eq $travsignal_package ) {
                  $rv = $$rv;     # deref
                  if ( $rv eq 'ABORT' ) {
                      last;       # end of this excursion!
                  }
                  elsif ( $rv eq 'PRUNE' ) {
                      next;
                  }
                  elsif ( $rv eq 'PRUNE_SOFTLY' ) {
                      if (ref($this)
                          and not( $this->{'_empty_element'}
                              || $empty_element_map->{ $this->{'_tag'} || '' } )
                          )
                      {
  
               # push a dummy empty content list just to trigger a post callback
                          unshift @I, -1;
                          unshift @C, $NIL;
                      }
                      next;
                  }
                  elsif ( $rv eq 'OK' ) {
  
                      # noop
                  }
                  elsif ( $rv eq 'PRUNE_UP' ) {
                      $I[0] = undef;
                      next;
  
                      # equivalent of last'ing out of the current child list.
  
              # Used to have PRUNE_UP_SOFTLY and ABORT_SOFTLY here, but the code
              # for these was seriously upsetting, served no particularly clear
              # purpose, and could not, I think, be easily implemented with a
              # recursive routine.  All bad things!
                  }
                  else {
                      die "Unknown travsignal $rv\n";
  
                      # should never happen
                  }
              }
  
              # else fall thru to meaning same as \'OK'.
          }
  
          # end of pre-order calling
  
          # Now queue up content list for the current element...
          if (ref $this
              and not(    # ...except for those which...
                  not( $content_r = $this->{'_content'} and @$content_r )
  
                  # ...have empty content lists...
                  and $this->{'_empty_element'}
                  || $empty_element_map->{ $this->{'_tag'} || '' }
  
                  # ...and that don't get post-order callbacks
              )
              )
          {
              unshift @I, -1;
              unshift @C, $content_r || $NIL;
  
              #print $this->{'_tag'}, " ($this) adds content_r ", $C[0], "\n";
          }
      }
      return $start;
  }
  
  
  sub is_inside {
      my $self = shift;
      return 0 unless @_; # if no items specified, I guess this is right.
  
      my $current = $self;
  
      # the loop starts by looking at the given element
      while ( defined $current and ref $current ) {
          for (@_) {
              if (ref) {    # element
                  return 1 if $_ eq $current;
              }
              else {        # tag name
                  return 1 if $_ eq $current->{'_tag'};
              }
          }
          $current = $current->{'_parent'};
      }
      0;
  }
  
  
  sub is_empty {
      my $self = shift;
      !$self->{'_content'} || !@{ $self->{'_content'} };
  }
  
  
  sub pindex {
      my $self = shift;
  
      my $parent = $self->{'_parent'}    || return undef;
      my $pc     = $parent->{'_content'} || return undef;
      for ( my $i = 0; $i < @$pc; ++$i ) {
          return $i if ref $pc->[$i] and $pc->[$i] eq $self;
      }
      return undef;               # we shouldn't ever get here
  }
  
  #--------------------------------------------------------------------------
  
  
  sub left {
      Carp::croak "left() is supposed to be an object method"
          unless ref $_[0];
      my $pc = ( $_[0]->{'_parent'} || return )->{'_content'}
          || die "parent is childless?";
  
      die "parent is childless" unless @$pc;
      return if @$pc == 1;    # I'm an only child
  
      if (wantarray) {
          my @out;
          foreach my $j (@$pc) {
              return @out if ref $j and $j eq $_[0];
              push @out, $j;
          }
      }
      else {
          for ( my $i = 0; $i < @$pc; ++$i ) {
              return $i ? $pc->[ $i - 1 ] : undef
                  if ref $pc->[$i] and $pc->[$i] eq $_[0];
          }
      }
  
      die "I'm not in my parent's content list?";
      return;
  }
  
  
  sub right {
      Carp::croak "right() is supposed to be an object method"
          unless ref $_[0];
      my $pc = ( $_[0]->{'_parent'} || return )->{'_content'}
          || die "parent is childless?";
  
      die "parent is childless" unless @$pc;
      return if @$pc == 1;    # I'm an only child
  
      if (wantarray) {
          my ( @out, $seen );
          foreach my $j (@$pc) {
              if ($seen) {
                  push @out, $j;
              }
              else {
                  $seen = 1 if ref $j and $j eq $_[0];
              }
          }
          die "I'm not in my parent's content list?" unless $seen;
          return @out;
      }
      else {
          for ( my $i = 0; $i < @$pc; ++$i ) {
              return +( $i == $#$pc ) ? undef : $pc->[ $i + 1 ]
                  if ref $pc->[$i] and $pc->[$i] eq $_[0];
          }
          die "I'm not in my parent's content list?";
          return;
      }
  }
  
  #--------------------------------------------------------------------------
  
  
  sub address {
      if ( @_ == 1 ) {    # report-address form
          return join(
              '.',
              reverse(    # so it starts at the top
                  map( $_->pindex() || '0',    # so that root's undef -> '0'
                      $_[0],                   # self and...
                      $_[0]->lineage )
              )
          );
      }
      else {                                   # get-node-at-address
          my @stack = split( /\./, $_[1] );
          my $here;
  
          if ( @stack and !length $stack[0] ) {    # relative addressing
              $here = $_[0];
              shift @stack;
          }
          else {                                   # absolute addressing
              return undef unless 0 == shift @stack; # pop the initial 0-for-root
              $here = $_[0]->root;
          }
  
          while (@stack) {
              return undef
                  unless $here->{'_content'}
                      and @{ $here->{'_content'} } > $stack[0];
  
              # make sure the index isn't too high
              $here = $here->{'_content'}[ shift @stack ];
              return undef if @stack and not ref $here;
  
              # we hit a text node when we expected a non-terminal element node
          }
  
          return $here;
      }
  }
  
  
  sub depth {
      my $here  = $_[0];
      my $depth = 0;
      while ( defined( $here = $here->{'_parent'} ) and ref($here) ) {
          ++$depth;
      }
      return $depth;
  }
  
  
  sub root {
      my $here = my $root = shift;
      while ( defined( $here = $here->{'_parent'} ) and ref($here) ) {
          $root = $here;
      }
      return $root;
  }
  
  
  sub lineage {
      my $here = shift;
      my @lineage;
      while ( defined( $here = $here->{'_parent'} ) and ref($here) ) {
          push @lineage, $here;
      }
      return @lineage;
  }
  
  
  sub lineage_tag_names {
      my $here = my $start = shift;
      my @lineage_names;
      while ( defined( $here = $here->{'_parent'} ) and ref($here) ) {
          push @lineage_names, $here->{'_tag'};
      }
      return @lineage_names;
  }
  
  
  sub descendents { shift->descendants(@_) }
  
  sub descendants {
      my $start = shift;
      if (wantarray) {
          my @descendants;
          $start->traverse(
              [    # pre-order sub only
                  sub {
                      push( @descendants, $_[0] );
                      return 1;
                  },
                  undef    # no post
              ],
              1,           # ignore text
          );
          shift @descendants;    # so $self doesn't appear in the list
          return @descendants;
      }
      else {                     # just returns a scalar
          my $descendants = -1;    # to offset $self being counted
          $start->traverse(
              [                    # pre-order sub only
                  sub {
                      ++$descendants;
                      return 1;
                  },
                  undef            # no post
              ],
              1,                   # ignore text
          );
          return $descendants;
      }
  }
  
  
  sub find { shift->find_by_tag_name(@_) }
  
  # yup, a handy alias
  
  sub find_by_tag_name {
      my (@pile) = shift(@_);    # start out the to-do stack for the traverser
      Carp::croak "find_by_tag_name can be called only as an object method"
          unless ref $pile[0];
      return () unless @_;
      my (@tags) = $pile[0]->_fold_case(@_);
      my ( @matching, $this, $this_tag );
      while (@pile) {
          $this_tag = ( $this = shift @pile )->{'_tag'};
          foreach my $t (@tags) {
              if ( $t eq $this_tag ) {
                  if (wantarray) {
                      push @matching, $this;
                      last;
                  }
                  else {
                      return $this;
                  }
              }
          }
          unshift @pile, grep ref($_), @{ $this->{'_content'} || next };
      }
      return @matching if wantarray;
      return;
  }
  
  
  sub find_by_attribute {
  
      # We could limit this to non-internal attributes, but hey.
      my ( $self, $attribute, $value ) = @_;
      Carp::croak "Attribute must be a defined value!"
          unless defined $attribute;
      $attribute = $self->_fold_case($attribute);
  
      my @matching;
      my $wantarray = wantarray;
      my $quit;
      $self->traverse(
          [    # pre-order only
              sub {
                  if ( exists $_[0]{$attribute}
                      and $_[0]{$attribute} eq $value )
                  {
                      push @matching, $_[0];
                      return HTML::Element::ABORT
                          unless $wantarray;    # only take the first
                  }
                  1;                            # keep traversing
              },
              undef                             # no post
          ],
          1,                                    # yes, ignore text nodes.
      );
  
      if ($wantarray) {
          return @matching;
      }
      else {
          return $matching[0];
      }
  }
  
  #--------------------------------------------------------------------------
  
  
  sub look_down {
      ref( $_[0] ) or Carp::croak "look_down works only as an object method";
  
      my @criteria;
      for ( my $i = 1; $i < @_; ) {
          Carp::croak "Can't use undef as an attribute name"
              unless defined $_[$i];
          if ( ref $_[$i] ) {
              Carp::croak "A " . ref( $_[$i] ) . " value is not a criterion"
                  unless ref $_[$i] eq 'CODE';
              push @criteria, $_[ $i++ ];
          }
          else {
              Carp::croak "param list to look_down ends in a key!" if $i == $#_;
              push @criteria, [
                  scalar( $_[0]->_fold_case( $_[$i] ) ),
                  defined( $_[ $i + 1 ] )
                  ? ( ( ref $_[ $i + 1 ] ? $_[ $i + 1 ] : lc( $_[ $i + 1 ] ) ),
                      ref( $_[ $i + 1 ] )
                      )
  
                      # yes, leave that LC!
                  : undef
              ];
              $i += 2;
          }
      }
      Carp::croak "No criteria?" unless @criteria;
  
      my (@pile) = ( $_[0] );
      my ( @matching, $val, $this );
  Node:
      while ( defined( $this = shift @pile ) ) {
  
          # Yet another traverser implemented with merely iterative code.
          foreach my $c (@criteria) {
              if ( ref($c) eq 'CODE' ) {
                  next Node unless $c->($this);    # jump to the continue block
              }
              else {                               # it's an attr-value pair
                  next Node                        # jump to the continue block
                      if                           # two values are unequal if:
                          ( defined( $val = $this->{ $c->[0] } ) )
                      ? (     !defined $c->[ 1
                                  ]    # actual is def, critval is undef => fail
                                       # allow regex matching
                                       # allow regex matching
                                  or (
                                    $c->[2] eq 'Regexp'
                                  ? $val !~ $c->[1]
                                  : ( ref $val ne $c->[2]
  
                                          # have unequal ref values => fail
                                          or lc($val) ne lc( $c->[1] )
  
                                         # have unequal lc string values => fail
                                  )
                                  )
                          )
                      : (     defined $c->[1]
                          )    # actual is undef, critval is def => fail
              }
          }
  
          # We make it this far only if all the criteria passed.
          return $this unless wantarray;
          push @matching, $this;
      }
      continue {
          unshift @pile, grep ref($_), @{ $this->{'_content'} || $nillio };
      }
      return @matching if wantarray;
      return;
  }
  
  
  sub look_up {
      ref( $_[0] ) or Carp::croak "look_up works only as an object method";
  
      my @criteria;
      for ( my $i = 1; $i < @_; ) {
          Carp::croak "Can't use undef as an attribute name"
              unless defined $_[$i];
          if ( ref $_[$i] ) {
              Carp::croak "A " . ref( $_[$i] ) . " value is not a criterion"
                  unless ref $_[$i] eq 'CODE';
              push @criteria, $_[ $i++ ];
          }
          else {
              Carp::croak "param list to look_up ends in a key!" if $i == $#_;
              push @criteria, [
                  scalar( $_[0]->_fold_case( $_[$i] ) ),
                  defined( $_[ $i + 1 ] )
                  ? ( ( ref $_[ $i + 1 ] ? $_[ $i + 1 ] : lc( $_[ $i + 1 ] ) ),
                      ref( $_[ $i + 1 ] )
                      )
                  : undef    # Yes, leave that LC!
              ];
              $i += 2;
          }
      }
      Carp::croak "No criteria?" unless @criteria;
  
      my ( @matching, $val );
      my $this = $_[0];
  Node:
      while (1) {
  
         # You'll notice that the code here is almost the same as for look_down.
          foreach my $c (@criteria) {
              if ( ref($c) eq 'CODE' ) {
                  next Node unless $c->($this);    # jump to the continue block
              }
              else {                               # it's an attr-value pair
                  next Node                        # jump to the continue block
                      if                           # two values are unequal if:
                          ( defined( $val = $this->{ $c->[0] } ) )
                      ? (     !defined $c->[ 1
                                  ]    # actual is def, critval is undef => fail
                                  or (
                                    $c->[2] eq 'Regexp'
                                  ? $val !~ $c->[1]
                                  : ( ref $val ne $c->[2]
  
                                          # have unequal ref values => fail
                                          or lc($val) ne $c->[1]
  
                                         # have unequal lc string values => fail
                                  )
                                  )
                          )
                      : (     defined $c->[1]
                          )    # actual is undef, critval is def => fail
              }
          }
  
          # We make it this far only if all the criteria passed.
          return $this unless wantarray;
          push @matching, $this;
      }
      continue {
          last unless defined( $this = $this->{'_parent'} ) and ref $this;
      }
  
      return @matching if wantarray;
      return;
  }
  
  #--------------------------------------------------------------------------
  
  
  sub attr_get_i {
      if ( @_ > 2 ) {
          my $self = shift;
          Carp::croak "No attribute names can be undef!"
              if grep !defined($_), @_;
          my @attributes = $self->_fold_case(@_);
          if (wantarray) {
              my @out;
              foreach my $x ( $self, $self->lineage ) {
                  push @out,
                      map { exists( $x->{$_} ) ? $x->{$_} : () } @attributes;
              }
              return @out;
          }
          else {
              foreach my $x ( $self, $self->lineage ) {
                  foreach my $attribute (@attributes) {
                      return $x->{$attribute}
                          if exists $x->{$attribute};    # found
                  }
              }
              return;                                    # never found
          }
      }
      else {
  
          # Single-attribute search.  Simpler, most common, so optimize
          #  for the most common case
          Carp::croak "Attribute name must be a defined value!"
              unless defined $_[1];
          my $self      = $_[0];
          my $attribute = $self->_fold_case( $_[1] );
          if (wantarray) {                               # list context
              return
                  map { exists( $_->{$attribute} ) ? $_->{$attribute} : () }
                  $self, $self->lineage;
          }
          else {                                         # scalar context
              foreach my $x ( $self, $self->lineage ) {
                  return $x->{$attribute} if exists $x->{$attribute};    # found
              }
              return;    # never found
          }
      }
  }
  
  
  sub tagname_map {
      my (@pile) = $_[0];    # start out the to-do stack for the traverser
      Carp::croak "find_by_tag_name can be called only as an object method"
          unless ref $pile[0];
      my ( %map, $this_tag, $this );
      while (@pile) {
          $this_tag = ''
              unless defined( $this_tag = ( $this = shift @pile )->{'_tag'} )
          ;    # dance around the strange case of having an undef tagname.
          push @{ $map{$this_tag} ||= [] }, $this;    # add to map
          unshift @pile, grep ref($_),
              @{ $this->{'_content'} || next };       # traverse
      }
      return \%map;
  }
  
  
  sub extract_links {
      my $start = shift;
  
      my %wantType;
      @wantType{ $start->_fold_case(@_) } = (1) x @_;    # if there were any
      my $wantType = scalar(@_);
  
      my @links;
  
      # TODO: add xml:link?
  
      my ( $link_attrs, $tag, $self, $val );    # scratch for each iteration
      $start->traverse(
          [   sub {                             # pre-order call only
                  $self = $_[0];
  
                  $tag = $self->{'_tag'};
                  return 1
                      if $wantType && !$wantType{$tag};    # if we're selective
  
                  if (defined(
                          $link_attrs = $HTML::Element::linkElements{$tag}
                      )
                      )
                  {
  
                      # If this is a tag that has any link attributes,
                      #  look over possibly present link attributes,
                      #  saving the value, if found.
                      for ( ref($link_attrs) ? @$link_attrs : $link_attrs ) {
                          if ( defined( $val = $self->attr($_) ) ) {
                              push( @links, [ $val, $self, $_, $tag ] );
                          }
                      }
                  }
                  1;    # return true, so we keep recursing
              },
              undef
          ],
          1,            # ignore text nodes
      );
      \@links;
  }
  
  
  sub simplify_pres {
      my $pre = 0;
  
      my $sub;
      my $line;
      $sub = sub {
          ++$pre if $_[0]->{'_tag'} eq 'pre';
          foreach my $it ( @{ $_[0]->{'_content'} || return } ) {
              if ( ref $it ) {
                  $sub->($it);    # recurse!
              }
              elsif ($pre) {
  
                  #$it =~ s/(?:(?:\cm\cj*)|(?:\cj))/\n/g;
  
                  $it = join "\n", map {
                      ;
                      $line = $_;
                      while (
                          $line
                          =~ s/^([^\t]*)(\t+)/$1.(" " x ((length($2)<<3)-(length($1)&7)))/e
  
                # Sort of adapted from Text::Tabs -- yes, it's hardwired-in that
                # tabs are at every EIGHTH column.
                          )
                      {
                      }
                      $line;
                      }
                      split /(?:(?:\cm\cj*)|(?:\cj))/, $it, -1;
              }
          }
          --$pre if $_[0]->{'_tag'} eq 'pre';
          return;
      };
      $sub->( $_[0] );
  
      undef $sub;
      return;
  }
  
  
  sub same_as {
      die 'same_as() takes only one argument: $h->same_as($i)' unless @_ == 2;
      my ( $h, $i ) = @_[ 0, 1 ];
      die "same_as() can be called only as an object method" unless ref $h;
  
      return 0 unless defined $i and ref $i;
  
      # An element can't be same_as anything but another element!
      # They needn't be of the same class, tho.
  
      return 1 if $h eq $i;
  
      # special (if rare) case: anything is the same as... itself!
  
      # assumes that no content lists in/under $h or $i contain subsequent
      #  text segments, like: ['foo', ' bar']
  
      # compare attributes now.
      #print "Comparing tags of $h and $i...\n";
  
      return 0 unless $h->{'_tag'} eq $i->{'_tag'};
  
      # only significant attribute whose name starts with "_"
  
      #print "Comparing attributes of $h and $i...\n";
      # Compare attributes, but only the real ones.
      {
  
          # Bear in mind that the average element has very few attributes,
          #  and that element names are rather short.
          # (Values are a different story.)
  
      # XXX I would think that /^[^_]/ would be faster, at least easier to read.
          my @keys_h
              = sort grep { length $_ and substr( $_, 0, 1 ) ne '_' } keys %$h;
          my @keys_i
              = sort grep { length $_ and substr( $_, 0, 1 ) ne '_' } keys %$i;
  
          return 0 unless @keys_h == @keys_i;
  
          # different number of real attributes?  they're different.
          for ( my $x = 0; $x < @keys_h; ++$x ) {
              return 0
                  unless $keys_h[$x] eq $keys_i[$x] and    # same key name
                      $h->{ $keys_h[$x] } eq $i->{ $keys_h[$x] };   # same value
               # Should this test for definedness on values?
               # People shouldn't be putting undef in attribute values, I think.
          }
      }
  
      #print "Comparing children of $h and $i...\n";
      my $hcl = $h->{'_content'} || [];
      my $icl = $i->{'_content'} || [];
  
      return 0 unless @$hcl == @$icl;
  
      # different numbers of children?  they're different.
  
      if (@$hcl) {
  
          # compare each of the children:
          for ( my $x = 0; $x < @$hcl; ++$x ) {
              if ( ref $hcl->[$x] ) {
                  return 0 unless ref( $icl->[$x] );
  
                  # an element can't be the same as a text segment
                  # Both elements:
                  return 0 unless $hcl->[$x]->same_as( $icl->[$x] );  # RECURSE!
              }
              else {
                  return 0 if ref( $icl->[$x] );
  
                  # a text segment can't be the same as an element
                  # Both text segments:
                  return 0 unless $hcl->[$x] eq $icl->[$x];
              }
          }
      }
  
      return 1;    # passed all the tests!
  }
  
  
  sub new_from_lol {
      my $class = shift;
      $class = ref($class) || $class;
  
    # calling as an object method is just the same as ref($h)->new_from_lol(...)
      my $lol = $_[1];
  
      my @ancestor_lols;
  
      # So we can make sure there's no cyclicities in this lol.
      # That would be perverse, but one never knows.
      my ( $sub, $k, $v, $node );    # last three are scratch values
      $sub = sub {
  
          #print "Building for $_[0]\n";
          my $lol = $_[0];
          return unless @$lol;
          my ( @attributes, @children );
          Carp::croak "Cyclicity detected in source LOL tree, around $lol?!?"
              if grep( $_ eq $lol, @ancestor_lols );
          push @ancestor_lols, $lol;
  
          my $tag_name = 'null';
  
          # Recursion in in here:
          for ( my $i = 0; $i < @$lol; ++$i ) {    # Iterate over children
              if ( ref( $lol->[$i] ) eq 'ARRAY' )
              {    # subtree: most common thing in loltree
                  push @children, $sub->( $lol->[$i] );
              }
              elsif ( !ref( $lol->[$i] ) ) {
                  if ( $i == 0 ) {    # name
                      $tag_name = $lol->[$i];
                      Carp::croak "\"$tag_name\" isn't a good tag name!"
                          if $tag_name =~ m/[<>\/\x00-\x20]/
                      ;               # minimal sanity, certainly!
                  }
                  else {              # text segment child
                      push @children, $lol->[$i];
                  }
              }
              elsif ( ref( $lol->[$i] ) eq 'HASH' ) {    # attribute hashref
                  keys %{ $lol->[$i] };   # reset the each-counter, just in case
                  while ( ( $k, $v ) = each %{ $lol->[$i] } ) {
                      push @attributes, $class->_fold_case($k), $v
                          if defined $v
                              and $k ne '_name'
                              and $k ne '_content'
                              and $k ne '_parent';
  
                      # enforce /some/ sanity!
                  }
              }
              elsif ( UNIVERSAL::isa( $lol->[$i], __PACKAGE__ ) ) {
                  if ( $lol->[$i]->{'_parent'} ) {    # if claimed
                          #print "About to clone ", $lol->[$i], "\n";
                      push @children, $lol->[$i]->clone();
                  }
                  else {
                      push @children, $lol->[$i];    # if unclaimed...
                           #print "Claiming ", $lol->[$i], "\n";
                      $lol->[$i]->{'_parent'} = 1;    # claim it NOW
                        # This WILL be replaced by the correct value once we actually
                        #  construct the parent, just after the end of this loop...
                  }
              }
              else {
                  Carp::croak "new_from_lol doesn't handle references of type "
                      . ref( $lol->[$i] );
              }
          }
  
          pop @ancestor_lols;
          $node = $class->new($tag_name);
  
          #print "Children: @children\n";
  
          if ( $class eq __PACKAGE__ ) {    # Special-case it, for speed:
              %$node = ( %$node, @attributes ) if @attributes;
  
              #print join(' ', $node, ' ' , map("<$_>", %$node), "\n");
              if (@children) {
                  $node->{'_content'} = \@children;
                  foreach my $c (@children) {
                      _weaken($c->{'_parent'} = $node)
                          if ref $c;
                  }
              }
          }
          else {                            # Do it the clean way...
                                            #print "Done neatly\n";
              while (@attributes) { $node->attr( splice @attributes, 0, 2 ) }
              $node->push_content(
                    map { _weaken($_->{'_parent'} = $node) if ref $_; $_ }
                      @children )
                  if @children;
          }
  
          return $node;
      };
  
      # End of sub definition.
  
      if (wantarray) {
          my (@nodes) = map { ; ( ref($_) eq 'ARRAY' ) ? $sub->($_) : $_ } @_;
          # Let text bits pass thru, I guess.  This makes this act more like
          #  unshift_content et al.  Undocumented.
  
          undef $sub;
          # so it won't be in its own frame, so its refcount can hit 0
  
          return @nodes;
      }
      else {
          Carp::croak "new_from_lol in scalar context needs exactly one lol"
              unless @_ == 1;
          return $_[0] unless ref( $_[0] ) eq 'ARRAY';
          # used to be a fatal error.  still undocumented tho.
  
          $node = $sub->( $_[0] );
          undef $sub;
          # so it won't be in its own frame, so its refcount can hit 0
  
          return $node;
      }
  }
  
  
  sub objectify_text {
      my (@stack) = ( $_[0] );
  
      my ($this);
      while (@stack) {
          foreach my $c ( @{ ( $this = shift @stack )->{'_content'} } ) {
              if ( ref($c) ) {
                  unshift @stack, $c;    # visit it later.
              }
              else {
                  $c = $this->element_class->new(
                      '~text',
                      'text'    => $c,
                      '_parent' => $this
                  );
              }
          }
      }
      return;
  }
  
  sub deobjectify_text {
      my (@stack) = ( $_[0] );
      my ($old_node);
  
      if ( $_[0]{'_tag'} eq '~text' ) {    # special case
              # Puts the $old_node variable to a different purpose
          if ( $_[0]{'_parent'} ) {
              $_[0]->replace_with( $old_node = delete $_[0]{'text'} )->delete;
          }
          else {    # well, that's that, then!
              $old_node = delete $_[0]{'text'};
          }
  
          if ( ref( $_[0] ) eq __PACKAGE__ ) {    # common case
              %{ $_[0] } = ();                    # poof!
          }
          else {
  
              # play nice:
              delete $_[0]{'_parent'};
              $_[0]->delete;
          }
          return '' unless defined $old_node;     # sanity!
          return $old_node;
      }
  
      while (@stack) {
          foreach my $c ( @{ ( shift @stack )->{'_content'} } ) {
              if ( ref($c) ) {
                  if ( $c->{'_tag'} eq '~text' ) {
                      $c = ( $old_node = $c )->{'text'};
                      if ( ref($old_node) eq __PACKAGE__ ) {    # common case
                          %$old_node = ();                      # poof!
                      }
                      else {
  
                          # play nice:
                          delete $old_node->{'_parent'};
                          $old_node->delete;
                      }
                  }
                  else {
                      unshift @stack, $c;    # visit it later.
                  }
              }
          }
      }
  
      return undef;
  }
  
  
  {
  
      # The next three subs are basically copied from Number::Latin,
      # based on a one-liner by Abigail.  Yes, I could simply require that
      # module, and a Roman numeral module too, but really, HTML-Tree already
      # has enough dependecies as it is; and anyhow, I don't need the functions
      # that do latin2int or roman2int.
      no integer;
  
      sub _int2latin {
          return unless defined $_[0];
          return '0' if $_[0] < 1 and $_[0] > -1;
          return '-' . _i2l( abs int $_[0] )
              if $_[0] <= -1;    # tolerate negatives
          return _i2l( int $_[0] );
      }
  
      sub _int2LATIN {
  
          # just the above plus uc
          return unless defined $_[0];
          return '0' if $_[0] < 1 and $_[0] > -1;
          return '-' . uc( _i2l( abs int $_[0] ) )
              if $_[0] <= -1;    # tolerate negs
          return uc( _i2l( int $_[0] ) );
      }
  
      my @alpha = ( 'a' .. 'z' );
  
      sub _i2l {                 # the real work
          my $int = $_[0] || return "";
          _i2l( int( ( $int - 1 ) / 26 ) )
              . $alpha[ $int % 26 - 1 ];    # yes, recursive
              # Yes, 26 => is (26 % 26 - 1), which is -1 => Z!
      }
  }
  
  {
  
      # And now, some much less impressive Roman numerals code:
  
      my (@i) = ( '', qw(I II III IV V VI VII VIII IX) );
      my (@x) = ( '', qw(X XX XXX XL L LX LXX LXXX XC) );
      my (@c) = ( '', qw(C CC CCC CD D DC DCC DCCC CM) );
      my (@m) = ( '', qw(M MM MMM) );
  
      sub _int2ROMAN {
          my ( $i, $pref );
          return '0'
              if 0 == ( $i = int( $_[0] || 0 ) );    # zero is a special case
          return $i + 0 if $i <= -4000 or $i >= 4000;
  
         # Because over 3999 would require non-ASCII chars, like D-with-)-inside
          if ( $i < 0 ) {    # grumble grumble tolerate negatives grumble
              $pref = '-';
              $i    = abs($i);
          }
          else {
              $pref = '';    # normal case
          }
  
          my ( $x, $c, $m ) = ( 0, 0, 0 );
          if ( $i >= 10 ) {
              $x = $i / 10;
              $i %= 10;
              if ( $x >= 10 ) {
                  $c = $x / 10;
                  $x %= 10;
                  if ( $c >= 10 ) { $m = $c / 10; $c %= 10; }
              }
          }
  
          #print "m$m c$c x$x i$i\n";
  
          return join( '', $pref, $m[$m], $c[$c], $x[$x], $i[$i] );
      }
  
      sub _int2roman { lc( _int2ROMAN( $_[0] ) ) }
  }
  
  sub _int2int { $_[0] }    # dummy
  
  %list_type_to_sub = (
      'I' => \&_int2ROMAN,
      'i' => \&_int2roman,
      'A' => \&_int2LATIN,
      'a' => \&_int2latin,
      '1' => \&_int2int,
  );
  
  sub number_lists {
      my (@stack) = ( $_[0] );
      my ( $this, $tag, $counter, $numberer );    # scratch
      while (@stack) {    # yup, pre-order-traverser idiom
          if ( ( $tag = ( $this = shift @stack )->{'_tag'} ) eq 'ol' ) {
  
              # Prep some things:
              $counter
                  = ( ( $this->{'start'} || '' ) =~ m<^\s*(\d{1,7})\s*$>s )
                  ? $1
                  : 1;
              $numberer = $list_type_to_sub{ $this->{'type'} || '' }
                  || $list_type_to_sub{'1'};
  
              # Immeditately iterate over all children
              foreach my $c ( @{ $this->{'_content'} || next } ) {
                  next unless ref $c;
                  unshift @stack, $c;
                  if ( $c->{'_tag'} eq 'li' ) {
                      $counter = $1
                          if (
                          ( $c->{'value'} || '' ) =~ m<^\s*(\d{1,7})\s*$>s );
                      $c->{'_bullet'} = $numberer->($counter) . '.';
                      ++$counter;
                  }
              }
  
          }
          elsif ( $tag eq 'ul' or $tag eq 'dir' or $tag eq 'menu' ) {
  
              # Immeditately iterate over all children
              foreach my $c ( @{ $this->{'_content'} || next } ) {
                  next unless ref $c;
                  unshift @stack, $c;
                  $c->{'_bullet'} = '*' if $c->{'_tag'} eq 'li';
              }
  
          }
          else {
              foreach my $c ( @{ $this->{'_content'} || next } ) {
                  unshift @stack, $c if ref $c;
              }
          }
      }
      return;
  }
  
  
  sub has_insane_linkage {
      my @pile = ( $_[0] );
      my ( $c, $i, $p, $this );    # scratch
  
      # Another iterative traverser; this time much simpler because
      #  only in pre-order:
      my %parent_of = ( $_[0], 'TOP-OF-SCAN' );
      while (@pile) {
          $this = shift @pile;
          $c = $this->{'_content'} || next;
          return ( $this, "_content attribute is true but nonref." )
              unless ref($c) eq 'ARRAY';
          next unless @$c;
          for ( $i = 0; $i < @$c; ++$i ) {
              return ( $this, "Child $i is undef" )
                  unless defined $c->[$i];
              if ( ref( $c->[$i] ) ) {
                  return ( $c->[$i], "appears in its own content list" )
                      if $c->[$i] eq $this;
                  return ( $c->[$i],
                      "appears twice in the tree: once under $this, once under $parent_of{$c->[$i]}"
                  ) if exists $parent_of{ $c->[$i] };
                  $parent_of{ $c->[$i] } = '' . $this;
  
                  # might as well just use the stringification of it.
  
                  return ( $c->[$i],
                      "_parent attribute is wrong (not defined)" )
                      unless defined( $p = $c->[$i]{'_parent'} );
                  return ( $c->[$i], "_parent attribute is wrong (nonref)" )
                      unless ref($p);
                  return ( $c->[$i],
                      "_parent attribute is wrong (is $p; should be $this)" )
                      unless $p eq $this;
              }
          }
          unshift @pile, grep ref($_), @$c;
  
          # queue up more things on the pile stack
      }
      return;    #okay
  }
  
  sub _asserts_fail {    # to be run on trusted documents only
      my (@pile) = ( $_[0] );
      my ( @errors, $this, $id, $assert, $parent, $rv );
      while (@pile) {
          $this = shift @pile;
          if ( defined( $assert = $this->{'assert'} ) ) {
              $id = ( $this->{'id'} ||= $this->address )
                  ;      # don't use '0' as an ID, okay?
              unless ( ref($assert) ) {
  
                  package main;
  ## no critic
                  $assert = $this->{'assert'} = (
                      $assert =~ m/\bsub\b/
                      ? eval($assert)
                      : eval("sub {  $assert\n}")
                  );
  ## use critic
                  if ($@) {
                      push @errors,
                          [ $this, "assertion at $id broke in eval: $@" ];
                      $assert = $this->{'assert'} = sub { };
                  }
              }
              $parent = $this->{'_parent'};
              $rv     = undef;
              eval {
                  $rv = $assert->(
                      $this, $this->{'_tag'}, $this->{'_id'},    # 0,1,2
                      $parent
                      ? ( $parent, $parent->{'_tag'}, $parent->{'id'} )
                      : ()                                       # 3,4,5
                  );
              };
              if ($@) {
                  push @errors, [ $this, "assertion at $id died: $@" ];
              }
              elsif ( !$rv ) {
                  push @errors, [ $this, "assertion at $id failed" ];
              }
  
              # else OK
          }
          push @pile, grep ref($_), @{ $this->{'_content'} || next };
      }
      return @errors;
  }
  
  ## _valid_name
  #  validate XML style attribute names
  #  http://www.w3.org/TR/2006/REC-xml11-20060816/#NT-Name
  
  sub _valid_name {
      my $self = shift;
      my $attr = shift
          or Carp::croak("sub valid_name requires an attribute name");
  
      return (0) unless ( $attr =~ /^$START_CHAR$NAME_CHAR+$/ );
  
      return (1);
  }
  
  
  sub element_class {
      $_[0]->{_element_class} || __PACKAGE__;
  }
  
  1;
  
  
  1;
  
  __END__
  
  =pod
  
  =head1 NAME
  
  HTML::Element - Class for objects that represent HTML elements
  
  =head1 VERSION
  
  This document describes version 5.03 of
  HTML::Element, released September 22, 2012
  as part of L<HTML-Tree|HTML::Tree>.
  
  =head1 SYNOPSIS
  
      use HTML::Element;
      $a = HTML::Element->new('a', href => 'http://www.perl.com/');
      $a->push_content("The Perl Homepage");
  
      $tag = $a->tag;
      print "$tag starts out as:",  $a->starttag, "\n";
      print "$tag ends as:",  $a->endtag, "\n";
      print "$tag\'s href attribute is: ", $a->attr('href'), "\n";
  
      $links_r = $a->extract_links();
      print "Hey, I found ", scalar(@$links_r), " links.\n";
  
      print "And that, as HTML, is: ", $a->as_HTML, "\n";
      $a = $a->delete;
  
  =head1 DESCRIPTION
  
  (This class is part of the L<HTML::Tree|HTML::Tree> dist.)
  
  Objects of the HTML::Element class can be used to represent elements
  of HTML document trees.  These objects have attributes, notably attributes that
  designates each element's parent and content.  The content is an array
  of text segments and other HTML::Element objects.  A tree with HTML::Element
  objects as nodes can represent the syntax tree for a HTML document.
  
  =head1 HOW WE REPRESENT TREES
  
  Consider this HTML document:
  
    <html lang='en-US'>
      <head>
        <title>Stuff</title>
        <meta name='author' content='Jojo'>
      </head>
      <body>
       <h1>I like potatoes!</h1>
      </body>
    </html>
  
  Building a syntax tree out of it makes a tree-structure in memory
  that could be diagrammed as:
  
                       html (lang='en-US')
                        / \
                      /     \
                    /         \
                  head        body
                 /\               \
               /    \               \
             /        \               \
           title     meta              h1
            |       (name='author',     |
         "Stuff"    content='Jojo')    "I like potatoes"
  
  This is the traditional way to diagram a tree, with the "root" at the
  top, and it's this kind of diagram that people have in mind when they
  say, for example, that "the meta element is under the head element
  instead of under the body element".  (The same is also said with
  "inside" instead of "under" -- the use of "inside" makes more sense
  when you're looking at the HTML source.)
  
  Another way to represent the above tree is with indenting:
  
    html (attributes: lang='en-US')
      head
        title
          "Stuff"
        meta (attributes: name='author' content='Jojo')
      body
        h1
          "I like potatoes"
  
  Incidentally, diagramming with indenting works much better for very
  large trees, and is easier for a program to generate.  The C<< $tree->dump >>
  method uses indentation just that way.
  
  However you diagram the tree, it's stored the same in memory -- it's a
  network of objects, each of which has attributes like so:
  
    element #1:  _tag: 'html'
                 _parent: none
                 _content: [element #2, element #5]
                 lang: 'en-US'
  
    element #2:  _tag: 'head'
                 _parent: element #1
                 _content: [element #3, element #4]
  
    element #3:  _tag: 'title'
                 _parent: element #2
                 _content: [text segment "Stuff"]
  
    element #4   _tag: 'meta'
                 _parent: element #2
                 _content: none
                 name: author
                 content: Jojo
  
    element #5   _tag: 'body'
                 _parent: element #1
                 _content: [element #6]
  
    element #6   _tag: 'h1'
                 _parent: element #5
                 _content: [text segment "I like potatoes"]
  
  The "treeness" of the tree-structure that these elements comprise is
  not an aspect of any particular object, but is emergent from the
  relatedness attributes (_parent and _content) of these element-objects
  and from how you use them to get from element to element.
  
  While you could access the content of a tree by writing code that says
  "access the 'src' attribute of the root's I<first> child's I<seventh>
  child's I<third> child", you're more likely to have to scan the contents
  of a tree, looking for whatever nodes, or kinds of nodes, you want to
  do something with.  The most straightforward way to look over a tree
  is to "traverse" it; an HTML::Element method (C<< $h->traverse >>) is
  provided for this purpose; and several other HTML::Element methods are
  based on it.
  
  (For everything you ever wanted to know about trees, and then some,
  see Niklaus Wirth's I<Algorithms + Data Structures = Programs> or
  Donald Knuth's I<The Art of Computer Programming, Volume 1>.)
  
  =head2 Weak References
  
  TL;DR summary: S<C<use HTML::TreeBuilder 5 -weak;>> and forget about
  the C<delete> method (except for pruning a node from a tree).
  
  Because HTML::Element stores a reference to the parent element, Perl's
  reference-count garbage collection doesn't work properly with
  HTML::Element trees.  Starting with version 5.00, HTML::Element uses
  weak references (if available) to prevent that problem.  Weak
  references were introduced in Perl 5.6.0, but you also need a version
  of L<Scalar::Util> that provides the C<weaken> function.
  
  Weak references are enabled by default.  If you want to be certain
  they're in use, you can say S<C<use HTML::Element 5 -weak;>>.  You
  must include the version number; previous versions of HTML::Element
  ignored the import list entirely.
  
  To disable weak references, you can say S<C<use HTML::Element -noweak;>>.
  This is a global setting.  B<This feature is deprecated> and is
  provided only as a quick fix for broken code.  If your code does not
  work properly with weak references, you should fix it immediately, as
  weak references may become mandatory in a future version.  Generally,
  all you need to do is keep a reference to the root of the tree until
  you're done working with it.
  
  Because HTML::TreeBuilder is a subclass of HTML::Element, you can also
  import C<-weak> or C<-noweak> from HTML::TreeBuilder: e.g.
  S<C<use HTML::TreeBuilder: 5 -weak;>>.
  
  =head1 BASIC METHODS
  
  =head2 new
  
    $h = HTML::Element->new('tag', 'attrname' => 'value', ... );
  
  This constructor method returns a new HTML::Element object.  The tag
  name is a required argument; it will be forced to lowercase.
  Optionally, you can specify other initial attributes at object
  creation time.
  
  =head2 attr
  
    $value = $h->attr('attr');
    $old_value = $h->attr('attr', $new_value);
  
  Returns (optionally sets) the value of the given attribute of C<$h>.  The
  attribute name (but not the value, if provided) is forced to
  lowercase.  If trying to read the value of an attribute not present
  for this element, the return value is undef.
  If setting a new value, the old value of that attribute is
  returned.
  
  If methods are provided for accessing an attribute (like C<< $h->tag >> for
  "_tag", C<< $h->content_list >>, etc. below), use those instead of calling
  attr C<< $h->attr >>, whether for reading or setting.
  
  Note that setting an attribute to C<undef> (as opposed to "", the empty
  string) actually deletes the attribute.
  
  =head2 tag
  
    $tagname = $h->tag();
    $h->tag('tagname');
  
  Returns (optionally sets) the tag name (also known as the generic
  identifier) for the element C<$h>.  In setting, the tag name is always
  converted to lower case.
  
  There are four kinds of "pseudo-elements" that show up as
  HTML::Element objects:
  
  =over
  
  =item Comment pseudo-elements
  
  These are element objects with a C<$h-E<gt>tag> value of "~comment",
  and the content of the comment is stored in the "text" attribute
  (C<$h-E<gt>attr("text")>).  For example, parsing this code with
  HTML::TreeBuilder...
  
    <!-- I like Pie.
       Pie is good
    -->
  
  produces an HTML::Element object with these attributes:
  
    "_tag",
    "~comment",
    "text",
    " I like Pie.\n     Pie is good\n  "
  
  =item Declaration pseudo-elements
  
  Declarations (rarely encountered) are represented as HTML::Element
  objects with a tag name of "~declaration", and content in the "text"
  attribute.  For example, this:
  
    <!DOCTYPE foo>
  
  produces an element whose attributes include:
  
    "_tag", "~declaration", "text", "DOCTYPE foo"
  
  =item Processing instruction pseudo-elements
  
  PIs (rarely encountered) are represented as HTML::Element objects with
  a tag name of "~pi", and content in the "text" attribute.  For
  example, this:
  
    <?stuff foo?>
  
  produces an element whose attributes include:
  
    "_tag", "~pi", "text", "stuff foo?"
  
  (assuming a recent version of HTML::Parser)
  
  =item ~literal pseudo-elements
  
  These objects are not currently produced by HTML::TreeBuilder, but can
  be used to represent a "super-literal" -- i.e., a literal you want to
  be immune from escaping.  (Yes, I just made that term up.)
  
  That is, this is useful if you want to insert code into a tree that
  you plan to dump out with C<as_HTML>, where you want, for some reason,
  to suppress C<as_HTML>'s normal behavior of amp-quoting text segments.
  
  For example, this:
  
    my $literal = HTML::Element->new('~literal',
      'text' => 'x < 4 & y > 7'
    );
    my $span = HTML::Element->new('span');
    $span->push_content($literal);
    print $span->as_HTML;
  
  prints this:
  
    <span>x < 4 & y > 7</span>
  
  Whereas this:
  
    my $span = HTML::Element->new('span');
    $span->push_content('x < 4 & y > 7');
      # normal text segment
    print $span->as_HTML;
  
  prints this:
  
    <span>x &lt; 4 &amp; y &gt; 7</span>
  
  Unless you're inserting lots of pre-cooked code into existing trees,
  and dumping them out again, it's not likely that you'll find
  C<~literal> pseudo-elements useful.
  
  =back
  
  =head2 parent
  
    $parent = $h->parent();
    $h->parent($new_parent);
  
  Returns (optionally sets) the parent (aka "container") for this element.
  The parent should either be undef, or should be another element.
  
  You B<should not> use this to directly set the parent of an element.
  Instead use any of the other methods under "Structure-Modifying
  Methods", below.
  
  Note that C<< not($h->parent) >> is a simple test for whether C<$h> is the
  root of its subtree.
  
  =head2 content_list
  
    @content = $h->content_list();
    $num_children = $h->content_list();
  
  Returns a list of the child nodes of this element -- i.e., what
  nodes (elements or text segments) are inside/under this element. (Note
  that this may be an empty list.)
  
  In a scalar context, this returns the count of the items,
  as you may expect.
  
  =head2 content
  
    $content_array_ref = $h->content(); # may return undef
  
  This somewhat deprecated method returns the content of this element;
  but unlike content_list, this returns either undef (which you should
  understand to mean no content), or a I<reference to the array> of
  content items, each of which is either a text segment (a string, i.e.,
  a defined non-reference scalar value), or an HTML::Element object.
  Note that even if an arrayref is returned, it may be a reference to an
  empty array.
  
  While older code should feel free to continue to use C<< $h->content >>,
  new code should use C<< $h->content_list >> in almost all conceivable
  cases.  It is my experience that in most cases this leads to simpler
  code anyway, since it means one can say:
  
      @children = $h->content_list;
  
  instead of the inelegant:
  
      @children = @{$h->content || []};
  
  If you do use C<< $h->content >> (or C<< $h->content_array_ref >>), you should not
  use the reference returned by it (assuming it returned a reference,
  and not undef) to directly set or change the content of an element or
  text segment!  Instead use L<content_refs_list> or any of the other
  methods under "Structure-Modifying Methods", below.
  
  =head2 content_array_ref
  
    $content_array_ref = $h->content_array_ref(); # never undef
  
  This is like C<content> (with all its caveats and deprecations) except
  that it is guaranteed to return an array reference.  That is, if the
  given node has no C<_content> attribute, the C<content> method would
  return that undef, but C<content_array_ref> would set the given node's
  C<_content> value to C<[]> (a reference to a new, empty array), and
  return that.
  
  =head2 content_refs_list
  
    @content_refs = $h->content_refs_list;
  
  This returns a list of scalar references to each element of C<$h>'s
  content list.  This is useful in case you want to in-place edit any
  large text segments without having to get a copy of the current value
  of that segment value, modify that copy, then use the
  C<splice_content> to replace the old with the new.  Instead, here you
  can in-place edit:
  
      foreach my $item_r ($h->content_refs_list) {
          next if ref $$item_r;
          $$item_r =~ s/honour/honor/g;
      }
  
  You I<could> currently achieve the same affect with:
  
      foreach my $item (@{ $h->content_array_ref }) {
          # deprecated!
          next if ref $item;
          $item =~ s/honour/honor/g;
      }
  
  ...except that using the return value of C<< $h->content >> or
  C<< $h->content_array_ref >> to do that is deprecated, and just might stop
  working in the future.
  
  =head2 implicit
  
    $is_implicit = $h->implicit();
    $h->implicit($make_implicit);
  
  Returns (optionally sets) the "_implicit" attribute.  This attribute is
  a flag that's used for indicating that the element was not originally
  present in the source, but was added to the parse tree (by
  HTML::TreeBuilder, for example) in order to conform to the rules of
  HTML structure.
  
  =head2 pos
  
    $pos = $h->pos();
    $h->pos($element);
  
  Returns (and optionally sets) the "_pos" (for "current I<pos>ition")
  pointer of C<$h>.  This attribute is a pointer used during some
  parsing operations, whose value is whatever HTML::Element element
  at or under C<$h> is currently "open", where C<< $h->insert_element(NEW) >>
  will actually insert a new element.
  
  (This has nothing to do with the Perl function called C<pos>, for
  controlling where regular expression matching starts.)
  
  If you set C<< $h->pos($element) >>, be sure that C<$element> is
  either C<$h>, or an element under C<$h>.
  
  If you've been modifying the tree under C<$h> and are no longer
  sure C<< $h->pos >> is valid, you can enforce validity with:
  
      $h->pos(undef) unless $h->pos->is_inside($h);
  
  =head2 all_attr
  
    %attr = $h->all_attr();
  
  Returns all this element's attributes and values, as key-value pairs.
  This will include any "internal" attributes (i.e., ones not present
  in the original element, and which will not be represented if/when you
  call C<< $h->as_HTML >>).  Internal attributes are distinguished by the fact
  that the first character of their key (not value! key!) is an
  underscore ("_").
  
  Example output of C<< $h->all_attr() >> :
  C<'_parent', >I<[object_value]>C< , '_tag', 'em', 'lang', 'en-US',
  '_content', >I<[array-ref value]>.
  
  =head2 all_attr_names
  
    @names = $h->all_attr_names();
    $num_attrs = $h->all_attr_names();
  
  Like C<all_attr>, but only returns the names of the attributes.
  In scalar context, returns the number of attributes.
  
  Example output of C<< $h->all_attr_names() >> :
  C<'_parent', '_tag', 'lang', '_content', >.
  
  =head2 all_external_attr
  
    %attr = $h->all_external_attr();
  
  Like C<all_attr>, except that internal attributes are not present.
  
  =head2 all_external_attr_names
  
    @names = $h->all_external_attr_names();
    $num_attrs = $h->all_external_attr_names();
  
  Like C<all_attr_names>, except that internal attributes' names
  are not present (or counted).
  
  =head2 id
  
    $id = $h->id();
    $h->id($string);
  
  Returns (optionally sets to C<$string>) the "id" attribute.
  C<< $h->id(undef) >> deletes the "id" attribute.
  
  C<< $h->id(...) >> is basically equivalent to C<< $h->attr('id', ...) >>,
  except that when setting the attribute, this method returns the new value,
  not the old value.
  
  =head2 idf
  
    $id = $h->idf();
    $h->idf($string);
  
  Just like the C<id> method, except that if you call C<< $h->idf() >> and
  no "id" attribute is defined for this element, then it's set to a
  likely-to-be-unique value, and returned.  (The "f" is for "force".)
  
  =head1 STRUCTURE-MODIFYING METHODS
  
  These methods are provided for modifying the content of trees
  by adding or changing nodes as parents or children of other nodes.
  
  =head2 push_content
  
    $h->push_content($element_or_text, ...);
  
  Adds the specified items to the I<end> of the content list of the
  element C<$h>.  The items of content to be added should each be either a
  text segment (a string), an HTML::Element object, or an arrayref.
  Arrayrefs are fed thru C<< $h->new_from_lol(that_arrayref) >> to
  convert them into elements, before being added to the content
  list of C<$h>.  This means you can say things concise things like:
  
    $body->push_content(
      ['br'],
      ['ul',
        map ['li', $_], qw(Peaches Apples Pears Mangos)
      ]
    );
  
  See the L</new_from_lol> method's documentation, far below, for more
  explanation.
  
  Returns C<$h> (the element itself).
  
  The push_content method will try to consolidate adjacent text segments
  while adding to the content list.  That's to say, if C<$h>'s C<content_list> is
  
    ('foo bar ', $some_node, 'baz!')
  
  and you call
  
     $h->push_content('quack?');
  
  then the resulting content list will be this:
  
    ('foo bar ', $some_node, 'baz!quack?')
  
  and not this:
  
    ('foo bar ', $some_node, 'baz!', 'quack?')
  
  If that latter is what you want, you'll have to override the
  feature of consolidating text by using splice_content,
  as in:
  
    $h->splice_content(scalar($h->content_list),0,'quack?');
  
  Similarly, if you wanted to add 'Skronk' to the beginning of
  the content list, calling this:
  
     $h->unshift_content('Skronk');
  
  then the resulting content list will be this:
  
    ('Skronkfoo bar ', $some_node, 'baz!')
  
  and not this:
  
    ('Skronk', 'foo bar ', $some_node, 'baz!')
  
  What you'd to do get the latter is:
  
    $h->splice_content(0,0,'Skronk');
  
  =head2 unshift_content
  
    $h->unshift_content($element_or_text, ...)
  
  Just like C<push_content>, but adds to the I<beginning> of the C<$h>
  element's content list.
  
  The items of content to be added should each be
  either a text segment (a string), an HTML::Element object, or
  an arrayref (which is fed thru C<new_from_lol>).
  
  The unshift_content method will try to consolidate adjacent text segments
  while adding to the content list.  See above for a discussion of this.
  
  Returns C<$h> (the element itself).
  
  =head2 splice_content
  
    @removed = $h->splice_content($offset, $length,
                                  $element_or_text, ...);
  
  Detaches the elements from C<$h>'s list of content-nodes, starting at
  C<$offset> and continuing for C<$length> items, replacing them with the
  elements of the following list, if any.  Returns the elements (if any)
  removed from the content-list.  If C<$offset> is negative, then it starts
  that far from the end of the array, just like Perl's normal C<splice>
  function.  If C<$length> and the following list is omitted, removes
  everything from C<$offset> onward.
  
  The items of content to be added (if any) should each be either a text
  segment (a string), an arrayref (which is fed thru L</new_from_lol>),
  or an HTML::Element object that's not already
  a child of C<$h>.
  
  =head2 detach
  
    $old_parent = $h->detach();
  
  This unlinks C<$h> from its parent, by setting its 'parent' attribute to
  undef, and by removing it from the content list of its parent (if it
  had one).  The return value is the parent that was detached from (or
  undef, if C<$h> had no parent to start with).  Note that neither C<$h> nor
  its parent are explicitly destroyed.
  
  =head2 detach_content
  
    @old_content = $h->detach_content();
  
  This unlinks all of C<$h>'s children from C<$h>, and returns them.
  Note that these are not explicitly destroyed; for that, you
  can just use C<< $h->delete_content >>.
  
  =head2 replace_with
  
    $h->replace_with( $element_or_text, ... )
  
  This replaces C<$h> in its parent's content list with the nodes
  specified.  The element C<$h> (which by then may have no parent)
  is returned.  This causes a fatal error if C<$h> has no parent.
  The list of nodes to insert may contain C<$h>, but at most once.
  Aside from that possible exception, the nodes to insert should not
  already be children of C<$h>'s parent.
  
  Also, note that this method does not destroy C<$h> if weak references are
  turned off -- use C<< $h->replace_with(...)->delete >> if you need that.
  
  =head2 preinsert
  
    $h->preinsert($element_or_text...);
  
  Inserts the given nodes right BEFORE C<$h> in C<$h>'s parent's
  content list.  This causes a fatal error if C<$h> has no parent.
  None of the given nodes should be C<$h> or other children of C<$h>.
  Returns C<$h>.
  
  =head2 postinsert
  
    $h->postinsert($element_or_text...)
  
  Inserts the given nodes right AFTER C<$h> in C<$h>'s parent's content
  list.  This causes a fatal error if C<$h> has no parent.  None of
  the given nodes should be C<$h> or other children of C<$h>.  Returns
  C<$h>.
  
  =head2 replace_with_content
  
    $h->replace_with_content();
  
  This replaces C<$h> in its parent's content list with its own content.
  The element C<$h> (which by then has no parent or content of its own) is
  returned.  This causes a fatal error if C<$h> has no parent.  Also, note
  that this does not destroy C<$h> if weak references are turned off -- use
  C<< $h->replace_with_content->delete >> if you need that.
  
  =head2 delete_content
  
    $h->delete_content();
    $h->destroy_content(); # alias
  
  Clears the content of C<$h>, calling C<< $h->delete >> for each content
  element.  Compare with C<< $h->detach_content >>.
  
  Returns C<$h>.
  
  C<destroy_content> is an alias for this method.
  
  =head2 delete
  
    $h->delete();
    $h->destroy(); # alias
  
  Detaches this element from its parent (if it has one) and explicitly
  destroys the element and all its descendants.  The return value is
  the empty list (or C<undef> in scalar context).
  
  Before version 5.00 of HTML::Element, you had to call C<delete> when
  you were finished with the tree, or your program would leak memory.
  This is no longer necessary if weak references are enabled, see
  L</"Weak References">.
  
  =head2 destroy
  
  An alias for L</delete>.
  
  =head2 destroy_content
  
  An alias for L</delete_content>.
  
  =head2 clone
  
    $copy = $h->clone();
  
  Returns a copy of the element (whose children are clones (recursively)
  of the original's children, if any).
  
  The returned element is parentless.  Any '_pos' attributes present in the
  source element/tree will be absent in the copy.  For that and other reasons,
  the clone of an HTML::TreeBuilder object that's in mid-parse (i.e, the head
  of a tree that HTML::TreeBuilder is elaborating) cannot (currently) be used
  to continue the parse.
  
  You are free to clone HTML::TreeBuilder trees, just as long as:
  1) they're done being parsed, or 2) you don't expect to resume parsing
  into the clone.  (You can continue parsing into the original; it is
  never affected.)
  
  =head2 clone_list
  
    @copies = HTML::Element->clone_list(...nodes...);
  
  Returns a list consisting of a copy of each node given.
  Text segments are simply copied; elements are cloned by
  calling C<< $it->clone >> on each of them.
  
  Note that this must be called as a class method, not as an instance
  method.  C<clone_list> will croak if called as an instance method.
  You can also call it like so:
  
      ref($h)->clone_list(...nodes...)
  
  =head2 normalize_content
  
    $h->normalize_content
  
  Normalizes the content of C<$h> -- i.e., concatenates any adjacent
  text nodes.  (Any undefined text segments are turned into empty-strings.)
  Note that this does not recurse into C<$h>'s descendants.
  
  =head2 delete_ignorable_whitespace
  
    $h->delete_ignorable_whitespace()
  
  This traverses under C<$h> and deletes any text segments that are ignorable
  whitespace.  You should not use this if C<$h> is under a C<< <pre> >> element.
  
  =head2 insert_element
  
    $h->insert_element($element, $implicit);
  
  Inserts (via push_content) a new element under the element at
  C<< $h->pos() >>.  Then updates C<< $h->pos() >> to point to the inserted
  element, unless $element is a prototypically empty element like
  C<< <br> >>, C<< <hr> >>, C<< <img> >>, etc.
  The new C<< $h->pos() >> is returned.  This
  method is useful only if your particular tree task involves setting
  C<< $h->pos() >>.
  
  =head1 DUMPING METHODS
  
  =head2 dump
  
    $h->dump()
    $h->dump(*FH)  ; # or *FH{IO} or $fh_obj
  
  Prints the element and all its children to STDOUT (or to a specified
  filehandle), in a format useful
  only for debugging.  The structure of the document is shown by
  indentation (no end tags).
  
  =head2 as_HTML
  
    $s = $h->as_HTML();
    $s = $h->as_HTML($entities);
    $s = $h->as_HTML($entities, $indent_char);
    $s = $h->as_HTML($entities, $indent_char, \%optional_end_tags);
  
  Returns a string representing in HTML the element and its
  descendants.  The optional argument C<$entities> specifies a string of
  the entities to encode.  For compatibility with previous versions,
  specify C<'E<lt>E<gt>&'> here.  If omitted or undef, I<all> unsafe
  characters are encoded as HTML entities.  See L<HTML::Entities> for
  details.  If passed an empty string, no entities are encoded.
  
  If $indent_char is specified and defined, the HTML to be output is
  intented, using the string you specify (which you probably should
  set to "\t", or some number of spaces, if you specify it).
  
  If C<\%optional_end_tags> is specified and defined, it should be
  a reference to a hash that holds a true value for every tag name
  whose end tag is optional.  Defaults to
  C<\%HTML::Element::optionalEndTag>, which is an alias to
  C<%HTML::Tagset::optionalEndTag>, which, at time of writing, contains
  true values for C<p, li, dt, dd>.  A useful value to pass is an empty
  hashref, C<{}>, which means that no end-tags are optional for this dump.
  Otherwise, possibly consider copying C<%HTML::Tagset::optionalEndTag> to a
  hash of your own, adding or deleting values as you like, and passing
  a reference to that hash.
  
  =head2 as_text
  
    $s = $h->as_text();
    $s = $h->as_text(skip_dels => 1);
  
  Returns a string consisting of only the text parts of the element's
  descendants.  Any whitespace inside the element is included unchanged,
  but whitespace not in the tree is never added.  But remember that
  whitespace may be ignored or compacted by HTML::TreeBuilder during
  parsing (depending on the value of the C<ignore_ignorable_whitespace>
  and C<no_space_compacting> attributes).  Also, since whitespace is
  never added during parsing,
  
    HTML::TreeBuilder->new_from_content("<p>a</p><p>b</p>")
                     ->as_text;
  
  returns C<"ab">, not C<"a b"> or C<"a\nb">.
  
  Text under C<< <script> >> or C<< <style> >> elements is never
  included in what's returned.  If C<skip_dels> is true, then text
  content under C<< <del> >> nodes is not included in what's returned.
  
  =head2 as_trimmed_text
  
    $s = $h->as_trimmed_text(...);
    $s = $h->as_trimmed_text(extra_chars => '\xA0'); # remove &nbsp;
    $s = $h->as_text_trimmed(...); # alias
  
  This is just like C<as_text(...)> except that leading and trailing
  whitespace is deleted, and any internal whitespace is collapsed.
  
  This will not remove non-breaking spaces, Unicode spaces, or any other
  non-ASCII whitespace unless you supply the extra characters as
  a string argument (e.g. C<< $h->as_trimmed_text(extra_chars => '\xA0') >>).
  C<extra_chars> may be any string that can appear inside a character
  class, including ranges like C<a-z>, POSIX character classes like
  C<[:alpha:]>, and character class escapes like C<\p{Zs}>.
  
  =head2 as_XML
  
    $s = $h->as_XML()
  
  Returns a string representing in XML the element and its descendants.
  
  The XML is not indented.
  
  =head2 as_Lisp_form
  
    $s = $h->as_Lisp_form();
  
  Returns a string representing the element and its descendants as a
  Lisp form.  Unsafe characters are encoded as octal escapes.
  
  The Lisp form is indented, and contains external ("href", etc.)  as
  well as internal attributes ("_tag", "_content", "_implicit", etc.),
  except for "_parent", which is omitted.
  
  Current example output for a given element:
  
    ("_tag" "img" "border" "0" "src" "pie.png" "usemap" "#main.map")
  
  =head2 format
  
    $s = $h->format; # use HTML::FormatText
    $s = $h->format($formatter);
  
  Formats text output. Defaults to HTML::FormatText.
  
  Takes a second argument that is a reference to a formatter.
  
  =head2 starttag
  
    $start = $h->starttag();
    $start = $h->starttag($entities);
  
  Returns a string representing the complete start tag for the element.
  I.e., leading "<", tag name, attributes, and trailing ">".
  All values are surrounded with
  double-quotes, and appropriate characters are encoded.  If C<$entities>
  is omitted or undef, I<all> unsafe characters are encoded as HTML
  entities.  See L<HTML::Entities> for details.  If you specify some
  value for C<$entities>, remember to include the double-quote character in
  it.  (Previous versions of this module would basically behave as if
  C<'&"E<gt>'> were specified for C<$entities>.)  If C<$entities> is
  an empty string, no entity is escaped.
  
  =head2 starttag_XML
  
    $start = $h->starttag_XML();
  
  Returns a string representing the complete start tag for the element.
  
  =head2 endtag
  
    $end = $h->endtag();
  
  Returns a string representing the complete end tag for this element.
  I.e., "</", tag name, and ">".
  
  =head2 endtag_XML
  
    $end = $h->endtag_XML();
  
  Returns a string representing the complete end tag for this element.
  I.e., "</", tag name, and ">".
  
  =head1 SECONDARY STRUCTURAL METHODS
  
  These methods all involve some structural aspect of the tree;
  either they report some aspect of the tree's structure, or they involve
  traversal down the tree, or walking up the tree.
  
  =head2 is_inside
  
    $inside = $h->is_inside('tag', $element, ...);
  
  Returns true if the C<$h> element is, or is contained anywhere inside an
  element that is any of the ones listed, or whose tag name is any of
  the tag names listed.  You can use any mix of elements and tag names.
  
  =head2 is_empty
  
    $empty = $h->is_empty();
  
  Returns true if C<$h> has no content, i.e., has no elements or text
  segments under it.  In other words, this returns true if C<$h> is a leaf
  node, AKA a terminal node.  Do not confuse this sense of "empty" with
  another sense that it can have in SGML/HTML/XML terminology, which
  means that the element in question is of the type (like HTML's C<< <hr> >>,
  C<< <br> >>, C<< <img> >>, etc.) that I<can't> have any content.
  
  That is, a particular C<< <p> >> element may happen to have no content, so
  $that_p_element->is_empty will be true -- even though the prototypical
  C<< <p> >> element isn't "empty" (not in the way that the prototypical
  C<< <hr> >> element is).
  
  If you think this might make for potentially confusing code, consider
  simply using the clearer exact equivalent:  C<< not($h->content_list) >>.
  
  =head2 pindex
  
    $index = $h->pindex();
  
  Return the index of the element in its parent's contents array, such
  that C<$h> would equal
  
    $h->parent->content->[$h->pindex]
    # or
    ($h->parent->content_list)[$h->pindex]
  
  assuming C<$h> isn't root.  If the element C<$h> is root, then
  C<< $h->pindex >> returns C<undef>.
  
  =head2 left
  
    $element = $h->left();
    @elements = $h->left();
  
  In scalar context: returns the node that's the immediate left sibling
  of C<$h>.  If C<$h> is the leftmost (or only) child of its parent (or has no
  parent), then this returns undef.
  
  In list context: returns all the nodes that're the left siblings of C<$h>
  (starting with the leftmost).  If C<$h> is the leftmost (or only) child
  of its parent (or has no parent), then this returns an empty list.
  
  (See also C<< $h->preinsert(LIST) >>.)
  
  =head2 right
  
    $element = $h->right();
    @elements = $h->right();
  
  In scalar context: returns the node that's the immediate right sibling
  of C<$h>.  If C<$h> is the rightmost (or only) child of its parent (or has
  no parent), then this returns C<undef>.
  
  In list context: returns all the nodes that're the right siblings of
  C<$h>, starting with the leftmost.  If C<$h> is the rightmost (or only) child
  of its parent (or has no parent), then this returns an empty list.
  
  (See also C<< $h->postinsert(LIST) >>.)
  
  =head2 address
  
    $address = $h->address();
    $element_or_text = $h->address($address);
  
  The first form (with no parameter) returns a string representing the
  location of C<$h> in the tree it is a member of.
  The address consists of numbers joined by a '.', starting with '0',
  and followed by the pindexes of the nodes in the tree that are
  ancestors of C<$h>, starting from the top.
  
  So if the way to get to a node starting at the root is to go to child
  2 of the root, then child 10 of that, and then child 0 of that, and
  then you're there -- then that node's address is "0.2.10.0".
  
  As a bit of a special case, the address of the root is simply "0".
  
  I forsee this being used mainly for debugging, but you may
  find your own uses for it.
  
    $element_or_text = $h->address($address);
  
  This form returns the node (whether element or text-segment) at
  the given address in the tree that C<$h> is a part of.  (That is,
  the address is resolved starting from C<< $h->root >>.)
  
  If there is no node at the given address, this returns C<undef>.
  
  You can specify "relative addressing" (i.e., that indexing is supposed
  to start from C<$h> and not from C<< $h->root >>) by having the address start
  with a period -- e.g., C<< $h->address(".3.2") >> will look at child 3 of C<$h>,
  and child 2 of that.
  
  =head2 depth
  
    $depth = $h->depth();
  
  Returns a number expressing C<$h>'s depth within its tree, i.e., how many
  steps away it is from the root.  If C<$h> has no parent (i.e., is root),
  its depth is 0.
  
  =head2 root
  
    $root = $h->root();
  
  Returns the element that's the top of C<$h>'s tree.  If C<$h> is
  root, this just returns C<$h>.  (If you want to test whether C<$h>
  I<is> the root, instead of asking what its root is, just test
  C<< not($h->parent) >>.)
  
  =head2 lineage
  
    @lineage = $h->lineage();
  
  Returns the list of C<$h>'s ancestors, starting with its parent,
  and then that parent's parent, and so on, up to the root.  If C<$h>
  is root, this returns an empty list.
  
  If you simply want a count of the number of elements in C<$h>'s lineage,
  use C<< $h->depth >>.
  
  =head2 lineage_tag_names
  
    @names = $h->lineage_tag_names();
  
  Returns the list of the tag names of C<$h>'s ancestors, starting
  with its parent, and that parent's parent, and so on, up to the
  root.  If C<$h> is root, this returns an empty list.
  Example output: C<('em', 'td', 'tr', 'table', 'body', 'html')>
  
  Equivalent to:
  
    map { $_->tag } $h->lineage;
  
  =head2 descendants
  
    @descendants = $h->descendants();
  
  In list context, returns the list of all C<$h>'s descendant elements,
  listed in pre-order (i.e., an element appears before its
  content-elements).  Text segments DO NOT appear in the list.
  In scalar context, returns a count of all such elements.
  
  =head2 descendents
  
  This is just an alias to the C<descendants> method, for people who
  can't spell.
  
  =head2 find_by_tag_name
  
    @elements = $h->find_by_tag_name('tag', ...);
    $first_match = $h->find_by_tag_name('tag', ...);
  
  In list context, returns a list of elements at or under C<$h> that have
  any of the specified tag names.  In scalar context, returns the first
  (in pre-order traversal of the tree) such element found, or undef if
  none.
  
  =head2 find
  
  This is just an alias to C<find_by_tag_name>.  (There was once
  going to be a whole find_* family of methods, but then C<look_down>
  filled that niche, so there turned out not to be much reason for the
  verboseness of the name "find_by_tag_name".)
  
  =head2 find_by_attribute
  
    @elements = $h->find_by_attribute('attribute', 'value');
    $first_match = $h->find_by_attribute('attribute', 'value');
  
  In a list context, returns a list of elements at or under C<$h> that have
  the specified attribute, and have the given value for that attribute.
  In a scalar context, returns the first (in pre-order traversal of the
  tree) such element found, or undef if none.
  
  This method is B<deprecated> in favor of the more expressive
  C<look_down> method, which new code should use instead.
  
  =head2 look_down
  
    @elements = $h->look_down( ...criteria... );
    $first_match = $h->look_down( ...criteria... );
  
  This starts at C<$h> and looks thru its element descendants (in
  pre-order), looking for elements matching the criteria you specify.
  In list context, returns all elements that match all the given
  criteria; in scalar context, returns the first such element (or undef,
  if nothing matched).
  
  There are three kinds of criteria you can specify:
  
  =over
  
  =item (attr_name, attr_value)
  
  This means you're looking for an element with that value for that
  attribute.  Example: C<"alt", "pix!">.  Consider that you can search
  on internal attribute values too: C<"_tag", "p">.
  
  =item (attr_name, qr/.../)
  
  This means you're looking for an element whose value for that
  attribute matches the specified Regexp object.
  
  =item a coderef
  
  This means you're looking for elements where coderef->(each_element)
  returns true.  Example:
  
    my @wide_pix_images = $h->look_down(
      _tag => "img",
      alt  => "pix!",
      sub { $_[0]->attr('width') > 350 }
    );
  
  =back
  
  Note that C<(attr_name, attr_value)> and C<(attr_name, qr/.../)>
  criteria are almost always faster than coderef
  criteria, so should presumably be put before them in your list of
  criteria.  That is, in the example above, the sub ref is called only
  for elements that have already passed the criteria of having a "_tag"
  attribute with value "img", and an "alt" attribute with value "pix!".
  If the coderef were first, it would be called on every element, and
  I<then> what elements pass that criterion (i.e., elements for which
  the coderef returned true) would be checked for their "_tag" and "alt"
  attributes.
  
  Note that comparison of string attribute-values against the string
  value in C<(attr_name, attr_value)> is case-INsensitive!  A criterion
  of C<('align', 'right')> I<will> match an element whose "align" value
  is "RIGHT", or "right" or "rIGhT", etc.
  
  Note also that C<look_down> considers "" (empty-string) and undef to
  be different things, in attribute values.  So this:
  
    $h->look_down("alt", "")
  
  will find elements I<with> an "alt" attribute, but where the value for
  the "alt" attribute is "".  But this:
  
    $h->look_down("alt", undef)
  
  is the same as:
  
    $h->look_down(sub { !defined($_[0]->attr('alt')) } )
  
  That is, it finds elements that do not have an "alt" attribute at all
  (or that do have an "alt" attribute, but with a value of undef --
  which is not normally possible).
  
  Note that when you give several criteria, this is taken to mean you're
  looking for elements that match I<all> your criterion, not just I<any>
  of them.  In other words, there is an implicit "and", not an "or".  So
  if you wanted to express that you wanted to find elements with a
  "name" attribute with the value "foo" I<or> with an "id" attribute
  with the value "baz", you'd have to do it like:
  
    @them = $h->look_down(
      sub {
        # the lcs are to fold case
        lc($_[0]->attr('name')) eq 'foo'
        or lc($_[0]->attr('id')) eq 'baz'
      }
    );
  
  Coderef criteria are more expressive than C<(attr_name, attr_value)>
  and C<(attr_name, qr/.../)>
  criteria, and all C<(attr_name, attr_value)>
  and C<(attr_name, qr/.../)>
  criteria could be
  expressed in terms of coderefs.  However, C<(attr_name, attr_value)>
  and C<(attr_name, qr/.../)>
  criteria are a convenient shorthand.  (In fact, C<look_down> itself is
  basically "shorthand" too, since anything you can do with C<look_down>
  you could do by traversing the tree, either with the C<traverse>
  method or with a routine of your own.  However, C<look_down> often
  makes for very concise and clear code.)
  
  =head2 look_up
  
    @elements = $h->look_up( ...criteria... );
    $first_match = $h->look_up( ...criteria... );
  
  This is identical to C<< $h->look_down >>, except that whereas
  C<< $h->look_down >>
  basically scans over the list:
  
     ($h, $h->descendants)
  
  C<< $h->look_up >> instead scans over the list
  
     ($h, $h->lineage)
  
  So, for example, this returns all ancestors of C<$h> (possibly including
  C<$h> itself) that are C<< <td> >> elements with an "align" attribute with a
  value of "right" (or "RIGHT", etc.):
  
     $h->look_up("_tag", "td", "align", "right");
  
  =head2 traverse
  
    $h->traverse(...options...)
  
  Lengthy discussion of HTML::Element's unnecessary and confusing
  C<traverse> method has been moved to a separate file:
  L<HTML::Element::traverse>
  
  =head2 attr_get_i
  
    @values = $h->attr_get_i('attribute');
    $first_value = $h->attr_get_i('attribute');
  
  In list context, returns a list consisting of the values of the given
  attribute for C<$h> and for all its ancestors starting from C<$h> and
  working its way up.  Nodes with no such attribute are skipped.
  ("attr_get_i" stands for "attribute get, with inheritance".)
  In scalar context, returns the first such value, or undef if none.
  
  Consider a document consisting of:
  
     <html lang='i-klingon'>
       <head><title>Pati Pata</title></head>
       <body>
         <h1 lang='la'>Stuff</h1>
         <p lang='es-MX' align='center'>
           Foo bar baz <cite>Quux</cite>.
         </p>
         <p>Hooboy.</p>
       </body>
     </html>
  
  If C<$h> is the C<< <cite> >> element, C<< $h->attr_get_i("lang") >>
  in list context will return the list C<('es-MX', 'i-klingon')>.
  In scalar context, it will return the value C<'es-MX'>.
  
  If you call with multiple attribute names...
  
    @values = $h->attr_get_i('a1', 'a2', 'a3');
    $first_value = $h->attr_get_i('a1', 'a2', 'a3');
  
  ...in list context, this will return a list consisting of
  the values of these attributes which exist in C<$h> and its ancestors.
  In scalar context, this returns the first value (i.e., the value of
  the first existing attribute from the first element that has
  any of the attributes listed).  So, in the above example,
  
    $h->attr_get_i('lang', 'align');
  
  will return:
  
     ('es-MX', 'center', 'i-klingon') # in list context
    or
     'es-MX' # in scalar context.
  
  But note that this:
  
   $h->attr_get_i('align', 'lang');
  
  will return:
  
     ('center', 'es-MX', 'i-klingon') # in list context
    or
     'center' # in scalar context.
  
  =head2 tagname_map
  
    $hash_ref = $h->tagname_map();
  
  Scans across C<$h> and all its descendants, and makes a hash (a
  reference to which is returned) where each entry consists of a key
  that's a tag name, and a value that's a reference to a list to all
  elements that have that tag name.  I.e., this method returns:
  
     {
       # Across $h and all descendants...
       'a'   => [ ...list of all <a>   elements... ],
       'em'  => [ ...list of all <em>  elements... ],
       'img' => [ ...list of all <img> elements... ],
     }
  
  (There are entries in the hash for only those tagnames that occur
  at/under C<$h> -- so if there's no C<< <img> >> elements, there'll be no
  "img" entry in the returned hashref.)
  
  Example usage:
  
      my $map_r = $h->tagname_map();
      my @heading_tags = sort grep m/^h\d$/s, keys %$map_r;
      if(@heading_tags) {
        print "Heading levels used: @heading_tags\n";
      } else {
        print "No headings.\n"
      }
  
  =head2 extract_links
  
    $links_array_ref = $h->extract_links();
    $links_array_ref = $h->extract_links(@wantedTypes);
  
  Returns links found by traversing the element and all of its children
  and looking for attributes (like "href" in an C<< <a> >> element, or "src" in
  an C<< <img> >> element) whose values represent links.  The return value is a
  I<reference> to an array.  Each element of the array is reference to
  an array with I<four> items: the link-value, the element that has the
  attribute with that link-value, and the name of that attribute, and
  the tagname of that element.
  (Example: C<['http://www.suck.com/',> I<$elem_obj> C<, 'href', 'a']>.)
  You may or may not end up using the
  element itself -- for some purposes, you may use only the link value.
  
  You might specify that you want to extract links from just some kinds
  of elements (instead of the default, which is to extract links from
  I<all> the kinds of elements known to have attributes whose values
  represent links).  For instance, if you want to extract links from
  only C<< <a> >> and C<< <img> >> elements, you could code it like this:
  
    for (@{  $e->extract_links('a', 'img')  }) {
        my($link, $element, $attr, $tag) = @$_;
        print
          "Hey, there's a $tag that links to ",
          $link, ", in its $attr attribute, at ",
          $element->address(), ".\n";
    }
  
  =head2 simplify_pres
  
    $h->simplify_pres();
  
  In text bits under PRE elements that are at/under C<$h>, this routine
  nativizes all newlines, and expands all tabs.
  
  That is, if you read a file with lines delimited by C<\cm\cj>'s, the
  text under PRE areas will have C<\cm\cj>'s instead of C<\n>'s. Calling
  C<< $h->simplify_pres >> on such a tree will turn C<\cm\cj>'s into
  C<\n>'s.
  
  Tabs are expanded to however many spaces it takes to get
  to the next 8th column -- the usual way of expanding them.
  
  =head2 same_as
  
    $equal = $h->same_as($i)
  
  Returns true if C<$h> and C<$i> are both elements representing the same tree
  of elements, each with the same tag name, with the same explicit
  attributes (i.e., not counting attributes whose names start with "_"),
  and with the same content (textual, comments, etc.).
  
  Sameness of descendant elements is tested, recursively, with
  C<< $child1->same_as($child_2) >>, and sameness of text segments is tested
  with C<$segment1 eq $segment2>.
  
  =head2 new_from_lol
  
    $h = HTML::Element->new_from_lol($array_ref);
    @elements = HTML::Element->new_from_lol($array_ref, ...);
  
  Resursively constructs a tree of nodes, based on the (non-cyclic)
  data structure represented by each C<$array_ref>, where that is a reference
  to an array of arrays (of arrays (of arrays (etc.))).
  
  In each arrayref in that structure, different kinds of values are
  treated as follows:
  
  =over
  
  =item * Arrayrefs
  
  Arrayrefs are considered to
  designate a sub-tree representing children for the node constructed
  from the current arrayref.
  
  =item * Hashrefs
  
  Hashrefs are considered to contain
  attribute-value pairs to add to the element to be constructed from
  the current arrayref
  
  =item * Text segments
  
  Text segments at the start of any arrayref
  will be considered to specify the name of the element to be
  constructed from the current arrayref; all other text segments will
  be considered to specify text segments as children for the current
  arrayref.
  
  =item * Elements
  
  Existing element objects are either inserted into the treelet
  constructed, or clones of them are.  That is, when the lol-tree is
  being traversed and elements constructed based what's in it, if
  an existing element object is found, if it has no parent, then it is
  added directly to the treelet constructed; but if it has a parent,
  then C<$that_node-E<gt>clone> is added to the treelet at the
  appropriate place.
  
  =back
  
  An example will hopefully make this more obvious:
  
    my $h = HTML::Element->new_from_lol(
      ['html',
        ['head',
          [ 'title', 'I like stuff!' ],
        ],
        ['body',
          {'lang', 'en-JP', _implicit => 1},
          'stuff',
          ['p', 'um, p < 4!', {'class' => 'par123'}],
          ['div', {foo => 'bar'}, '123'],
        ]
      ]
    );
    $h->dump;
  
  Will print this:
  
    <html> @0
      <head> @0.0
        <title> @0.0.0
          "I like stuff!"
      <body lang="en-JP"> @0.1 (IMPLICIT)
        "stuff"
        <p class="par123"> @0.1.1
          "um, p < 4!"
        <div foo="bar"> @0.1.2
          "123"
  
  And printing $h->as_HTML will give something like:
  
    <html><head><title>I like stuff!</title></head>
    <body lang="en-JP">stuff<p class="par123">um, p &lt; 4!
    <div foo="bar">123</div></body></html>
  
  You can even do fancy things with C<map>:
  
    $body->push_content(
      # push_content implicitly calls new_from_lol on arrayrefs...
      ['br'],
      ['blockquote',
        ['h2', 'Pictures!'],
        map ['p', $_],
        $body2->look_down("_tag", "img"),
          # images, to be copied from that other tree.
      ],
      # and more stuff:
      ['ul',
        map ['li', ['a', {'href'=>"$_.png"}, $_ ] ],
        qw(Peaches Apples Pears Mangos)
      ],
    );
  
  In scalar context, you must supply exactly one arrayref.  In list
  context, you can pass a list of arrayrefs, and L<new_from_lol> will
  return a list of elements, one for each arrayref.
  
    @elements = HTML::Element->new_from_lol(
      ['hr'],
      ['p', 'And there, on the door, was a hook!'],
    );
     # constructs two elements.
  
  =head2 objectify_text
  
    $h->objectify_text();
  
  This turns any text nodes under C<$h> from mere text segments (strings)
  into real objects, pseudo-elements with a tag-name of "~text", and the
  actual text content in an attribute called "text".  (For a discussion
  of pseudo-elements, see the L</"tag"> method, far above.)  This method is
  provided because, for some purposes, it is convenient or necessary to
  be able, for a given text node, to ask what element is its parent; and
  clearly this is not possible if a node is just a text string.
  
  Note that these "~text" objects are not recognized as text nodes by
  methods like L</as_text>.  Presumably you will want to call
  C<< $h->objectify_text >>, perform whatever task that you needed that for,
  and then call C<< $h->deobjectify_text >> before calling anything like
  C<< $h->as_text >>.
  
  =head2 deobjectify_text
  
    $h->deobjectify_text();
  
  This undoes the effect of C<< $h->objectify_text >>.  That is, it takes any
  "~text" pseudo-elements in the tree at/under C<$h>, and deletes each one,
  replacing each with the content of its "text" attribute.
  
  Note that if C<$h> itself is a "~text" pseudo-element, it will be
  destroyed -- a condition you may need to treat specially in your
  calling code (since it means you can't very well do anything with C<$h>
  after that).  So that you can detect that condition, if C<$h> is itself a
  "~text" pseudo-element, then this method returns the value of the
  "text" attribute, which should be a defined value; in all other cases,
  it returns undef.
  
  (This method assumes that no "~text" pseudo-element has any children.)
  
  =head2 number_lists
  
    $h->number_lists();
  
  For every UL, OL, DIR, and MENU element at/under C<$h>, this sets a
  "_bullet" attribute for every child LI element.  For LI children of an
  OL, the "_bullet" attribute's value will be something like "4.", "d.",
  "D.", "IV.", or "iv.", depending on the OL element's "type" attribute.
  LI children of a UL, DIR, or MENU get their "_bullet" attribute set
  to "*".
  There should be no other LIs (i.e., except as children of OL, UL, DIR,
  or MENU elements), and if there are, they are unaffected.
  
  =head2 has_insane_linkage
  
    $h->has_insane_linkage
  
  This method is for testing whether this element or the elements
  under it have linkage attributes (_parent and _content) whose values
  are deeply aberrant: if there are undefs in a content list; if an
  element appears in the content lists of more than one element;
  if the _parent attribute of an element doesn't match its actual
  parent; or if an element appears as its own descendant (i.e.,
  if there is a cyclicity in the tree).
  
  This returns empty list (or false, in scalar context) if the subtree's
  linkage methods are sane; otherwise it returns two items (or true, in
  scalar context): the element where the error occurred, and a string
  describing the error.
  
  This method is provided is mainly for debugging and troubleshooting --
  it should be I<quite impossible> for any document constructed via
  HTML::TreeBuilder to parse into a non-sane tree (since it's not
  the content of the tree per se that's in question, but whether
  the tree in memory was properly constructed); and it I<should> be
  impossible for you to produce an insane tree just thru reasonable
  use of normal documented structure-modifying methods.  But if you're
  constructing your own trees, and your program is going into infinite
  loops as during calls to traverse() or any of the secondary
  structural methods, as part of debugging, consider calling
  C<has_insane_linkage> on the tree.
  
  =head2 element_class
  
    $classname = $h->element_class();
  
  This method returns the class which will be used for new elements.  It
  defaults to HTML::Element, but can be overridden by subclassing or esoteric
  means best left to those will will read the source and then not complain when
  those esoteric means change.  (Just subclass.)
  
  =head1 CLASS METHODS
  
  =head2 Use_Weak_Refs
  
    $enabled = HTML::Element->Use_Weak_Refs;
    HTML::Element->Use_Weak_Refs( $enabled );
  
  This method allows you to check whether weak reference support is
  enabled, and to enable or disable it. For details, see L</"Weak References">.
  C<$enabled> is true if weak references are enabled.
  
  You should not switch this in the middle of your program, and you
  probably shouldn't use it at all.  Existing trees are not affected by
  this method (until you start modifying nodes in them).
  
  Throws an exception if you attempt to enable weak references and your
  Perl or Scalar::Util does not support them.
  
  Disabling weak reference support is deprecated.
  
  =head1 SUBROUTINES
  
  =head2 Version
  
  This subroutine is deprecated.  Please use the standard VERSION method
  (e.g. C<< HTML::Element->VERSION >>) instead.
  
  =head2 ABORT OK PRUNE PRUNE_SOFTLY PRUNE_UP
  
  Constants for signalling back to the traverser
  
  =for Pod::Coverage as_text_trimmed
  
  =head1 BUGS
  
  * If you want to free the memory associated with a tree built of
  HTML::Element nodes, and you have disabled weak references, then you
  will have to delete it explicitly using the L</delete> method.
  See L</"Weak References">.
  
  * There's almost nothing to stop you from making a "tree" with
  cyclicities (loops) in it, which could, for example, make the
  traverse method go into an infinite loop.  So don't make
  cyclicities!  (If all you're doing is parsing HTML files,
  and looking at the resulting trees, this will never be a problem
  for you.)
  
  * There's no way to represent comments or processing directives
  in a tree with HTML::Elements.  Not yet, at least.
  
  * There's (currently) nothing to stop you from using an undefined
  value as a text segment.  If you're running under C<perl -w>, however,
  this may make HTML::Element's code produce a slew of warnings.
  
  =head1 NOTES ON SUBCLASSING
  
  You are welcome to derive subclasses from HTML::Element, but you
  should be aware that the code in HTML::Element makes certain
  assumptions about elements (and I'm using "element" to mean ONLY an
  object of class HTML::Element, or of a subclass of HTML::Element):
  
  * The value of an element's _parent attribute must either be undef or
  otherwise false, or must be an element.
  
  * The value of an element's _content attribute must either be undef or
  otherwise false, or a reference to an (unblessed) array.  The array
  may be empty; but if it has items, they must ALL be either mere
  strings (text segments), or elements.
  
  * The value of an element's _tag attribute should, at least, be a
  string of printable characters.
  
  Moreover, bear these rules in mind:
  
  * Do not break encapsulation on objects.  That is, access their
  contents only thru $obj->attr or more specific methods.
  
  * You should think twice before completely overriding any of the
  methods that HTML::Element provides.  (Overriding with a method that
  calls the superclass method is not so bad, though.)
  
  =head1 SEE ALSO
  
  L<HTML::Tree>; L<HTML::TreeBuilder>; L<HTML::AsSubs>; L<HTML::Tagset>;
  and, for the morbidly curious, L<HTML::Element::traverse>.
  
  =head1 ACKNOWLEDGEMENTS
  
  Thanks to Mark-Jason Dominus for a POD suggestion.
  
  =head1 AUTHOR
  
  Current maintainers:
  
  =over
  
  =item * Christopher J. Madsen S<C<< <perl AT cjmweb.net> >>>
  
  =item * Jeff Fearn S<C<< <jfearn AT cpan.org> >>>
  
  =back
  
  Original HTML-Tree author:
  
  =over
  
  =item * Gisle Aas
  
  =back
  
  Former maintainers:
  
  =over
  
  =item * Sean M. Burke
  
  =item * Andy Lester
  
  =item * Pete Krawczyk S<C<< <petek AT cpan.org> >>>
  
  =back
  
  You can follow or contribute to HTML-Tree's development at
  L<< http://github.com/madsen/HTML-Tree >>.
  
  =head1 COPYRIGHT AND LICENSE
  
  Copyright 1995-1998 Gisle Aas, 1999-2004 Sean M. Burke,
  2005 Andy Lester, 2006 Pete Krawczyk, 2010 Jeff Fearn,
  2012 Christopher J. Madsen.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  The programs in this library are distributed in the hope that they
  will be useful, but without any warranty; without even the implied
  warranty of merchantability or fitness for a particular purpose.
  
  =cut
HTML_ELEMENT

    $main::fatpacked{"HTML/Element/traverse.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTML_ELEMENT_TRAVERSE';
  
  # This is a .pm just to (try to) make some CPAN document converters
  #  convert it happily as part of the dist's documentation tree.
  package HTML::Element::traverse;
  
  # ABSTRACT: discussion of HTML::Element's traverse method
  
  use warnings;
  use strict;
  
  our $VERSION = '5.03'; # VERSION from OurPkgVersion
  
  use HTML::Element ();
  1;
  
  __END__
  
  =pod
  
  =head1 NAME
  
  HTML::Element::traverse - discussion of HTML::Element's traverse method
  
  =head1 VERSION
  
  This document describes version 5.03 of
  HTML::Element::traverse, released September 22, 2012
  as part of L<HTML-Tree|HTML::Tree>.
  
  =head1 SYNOPSIS
  
    # $element->traverse is unnecessary and obscure.
    #   Don't use it in new code.
  
  =head1 DESCRIPTION
  
  C<HTML::Element> provides a method C<traverse> that traverses the tree
  and calls user-specified callbacks for each node, in pre- or
  post-order.  However, use of the method is quite superfluous: if you
  want to recursively visit every node in the tree, it's almost always
  simpler to write a subroutine does just that, than it is to bundle up
  the pre- and/or post-order code in callbacks for the C<traverse>
  method.
  
  =head1 EXAMPLES
  
  Suppose you want to traverse at/under a node $tree and give elements
  an 'id' attribute unless they already have one.
  
  You can use the C<traverse> method:
  
    {
      my $counter = 'x0000';
      $start_node->traverse(
        [ # Callbacks;
          # pre-order callback:
          sub {
            my $x = $_[0];
            $x->attr('id', $counter++) unless defined $x->attr('id');
            return HTML::Element::OK; # keep traversing
          },
          # post-order callback:
          undef
        ],
        1, # don't call the callbacks for text nodes
      );
    }
  
  or you can just be simple and clear (and not have to understand the
  calling format for C<traverse>) by writing a sub that traverses the
  tree by just calling itself:
  
    {
      my $counter = 'x0000';
      sub give_id {
        my $x = $_[0];
        $x->attr('id', $counter++) unless defined $x->attr('id');
        foreach my $c ($x->content_list) {
          give_id($c) if ref $c; # ignore text nodes
        }
      };
      give_id($start_node);
    }
  
  See, isn't that nice and clear?
  
  But, if you really need to know:
  
  =head1 THE TRAVERSE METHOD
  
  The C<traverse()> method is a general object-method for traversing a
  tree or subtree and calling user-specified callbacks.  It accepts the
  following syntaxes:
  
  =over
  
  =item $h->traverse(\&callback)
  
  =item or $h->traverse(\&callback, $ignore_text)
  
  =item or $h->traverse( [\&pre_callback,\&post_callback] , $ignore_text)
  
  =back
  
  These all mean to traverse the element and all of its children.  That
  is, this method starts at node $h, "pre-order visits" $h, traverses its
  children, and then will "post-order visit" $h.  "Visiting" means that
  the callback routine is called, with these arguments:
  
      $_[0] : the node (element or text segment),
      $_[1] : a startflag, and
      $_[2] : the depth
  
  If the $ignore_text parameter is given and true, then the pre-order
  call I<will not> be happen for text content.
  
  The startflag is 1 when we enter a node (i.e., in pre-order calls) and
  0 when we leave the node (in post-order calls).
  
  Note, however, that post-order calls don't happen for nodes that are
  text segments or are elements that are prototypically empty (like "br",
  "hr", etc.).
  
  If we visit text nodes (i.e., unless $ignore_text is given and true),
  then when text nodes are visited, we will also pass two extra
  arguments to the callback:
  
      $_[3] : the element that's the parent
               of this text node
      $_[4] : the index of this text node
               in its parent's content list
  
  Note that you can specify that the pre-order routine can
  be a different routine from the post-order one:
  
      $h->traverse( [\&pre_callback,\&post_callback], ...);
  
  You can also specify that no post-order calls are to be made,
  by providing a false value as the post-order routine:
  
      $h->traverse([ \&pre_callback,0 ], ...);
  
  And similarly for suppressing pre-order callbacks:
  
      $h->traverse([ 0,\&post_callback ], ...);
  
  Note that these two syntaxes specify the same operation:
  
      $h->traverse([\&foo,\&foo], ...);
      $h->traverse( \&foo       , ...);
  
  The return values from calls to your pre- or post-order
  routines are significant, and are used to control recursion
  into the tree.
  
  These are the values you can return, listed in descending order
  of my estimation of their usefulness:
  
  =over
  
  =item HTML::Element::OK, 1, or any other true value
  
  ...to keep on traversing.
  
  Note that C<HTML::Element::OK> et
  al are constants.  So if you're running under C<use strict>
  (as I hope you are), and you say:
  C<return HTML::Element::PRUEN>
  the compiler will flag this as an error (an unallowable
  bareword, specifically), whereas if you spell PRUNE correctly,
  the compiler will not complain.
  
  =item undef, 0, '0', '', or HTML::Element::PRUNE
  
  ...to block traversing under the current element's content.
  (This is ignored if received from a post-order callback,
  since by then the recursion has already happened.)
  If this is returned by a pre-order callback, no
  post-order callback for the current node will happen.
  (Recall that if your callback exits with just C<return;>,
  it is returning undef -- at least in scalar context, and
  C<traverse> always calls your callbacks in scalar context.)
  
  =item HTML::Element::ABORT
  
  ...to abort the whole traversal immediately.
  This is often useful when you're looking for just the first
  node in the tree that meets some criterion of yours.
  
  =item HTML::Element::PRUNE_UP
  
  ...to abort continued traversal into this node and its parent
  node.  No post-order callback for the current or parent
  node will happen.
  
  =item HTML::Element::PRUNE_SOFTLY
  
  Like PRUNE, except that the post-order call for the current
  node is not blocked.
  
  =back
  
  Almost every task to do with extracting information from a tree can be
  expressed in terms of traverse operations (usually in only one pass,
  and usually paying attention to only pre-order, or to only
  post-order), or operations based on traversing. (In fact, many of the
  other methods in this class are basically calls to traverse() with
  particular arguments.)
  
  The source code for HTML::Element and HTML::TreeBuilder contain
  several examples of the use of the "traverse" method to gather
  information about the content of trees and subtrees.
  
  (Note: you should not change the structure of a tree I<while> you are
  traversing it.)
  
  [End of documentation for the C<traverse()> method]
  
  =head2 Traversing with Recursive Anonymous Routines
  
  Now, if you've been reading
  I<Structure and Interpretation of Computer Programs> too much, maybe
  you even want a recursive lambda.  Go ahead:
  
    {
      my $counter = 'x0000';
      my $give_id;
      $give_id = sub {
        my $x = $_[0];
        $x->attr('id', $counter++) unless defined $x->attr('id');
        foreach my $c ($x->content_list) {
          $give_id->($c) if ref $c; # ignore text nodes
        }
      };
      $give_id->($start_node);
      undef $give_id;
    }
  
  It's a bit nutty, and it's I<still> more concise than a call to the
  C<traverse> method!
  
  It is left as an exercise to the reader to figure out how to do the
  same thing without using a C<$give_id> symbol at all.
  
  It is also left as an exercise to the reader to figure out why I
  undefine C<$give_id>, above; and why I could achieved the same effect
  with any of:
  
      $give_id = 'I like pie!';
     # or...
      $give_id = [];
     # or even;
      $give_id = sub { print "Mmmm pie!\n" };
  
  But not:
  
      $give_id = sub { print "I'm $give_id and I like pie!\n" };
     # nor...
      $give_id = \$give_id;
     # nor...
      $give_id = { 'pie' => \$give_id, 'mode' => 'a la' };
  
  =head2 Doing Recursive Things Iteratively
  
  Note that you may at times see an iterative implementation of
  pre-order traversal, like so:
  
     {
       my @to_do = ($tree); # start-node
       while(@to_do) {
         my $this = shift @to_do;
  
         # "Visit" the node:
         $this->attr('id', $counter++)
          unless defined $this->attr('id');
  
         unshift @to_do, grep ref $_, $this->content_list;
          # Put children on the stack -- they'll be visited next
       }
     }
  
  This can I<under certain circumstances> be more efficient than just a
  normal recursive routine, but at the cost of being rather obscure.  It
  gains efficiency by avoiding the overhead of function-calling, but
  since there are several method dispatches however you do it (to
  C<attr> and C<content_list>), the overhead for a simple function call
  is insignificant.
  
  =head2 Pruning and Whatnot
  
  The C<traverse> method does have the fairly neat features of
  the C<ABORT>, C<PRUNE_UP> and C<PRUNE_SOFTLY> signals.  None of these
  can be implemented I<totally> straightforwardly with recursive
  routines, but it is quite possible.  C<ABORT>-like behavior can be
  implemented either with using non-local returning with C<eval>/C<die>:
  
    my $died_on; # if you need to know where...
    sub thing {
      ... visits $_[0]...
      ... maybe set $died_on to $_[0] and die "ABORT_TRAV" ...
      ... else call thing($child) for each child...
      ...any post-order visiting $_[0]...
    }
    eval { thing($node) };
    if($@) {
      if($@ =~ m<^ABORT_TRAV>) {
        ...it died (aborted) on $died_on...
      } else {
        die $@; # some REAL error happened
      }
    }
  
  or you can just do it with flags:
  
    my($abort_flag, $died_on);
    sub thing {
      ... visits $_[0]...
      ... maybe set $abort_flag = 1; $died_on = $_[0]; return;
      foreach my $c ($_[0]->content_list) {
        thing($c);
        return if $abort_flag;
      }
      ...any post-order visiting $_[0]...
      return;
    }
  
    $abort_flag = $died_on = undef;
    thing($node);
    ...if defined $abort_flag, it died on $died_on
  
  =head1 SEE ALSO
  
  L<HTML::Element>
  
  =head1 AUTHOR
  
  Current maintainers:
  
  =over
  
  =item * Christopher J. Madsen S<C<< <perl AT cjmweb.net> >>>
  
  =item * Jeff Fearn S<C<< <jfearn AT cpan.org> >>>
  
  =back
  
  Original HTML-Tree author:
  
  =over
  
  =item * Gisle Aas
  
  =back
  
  Former maintainers:
  
  =over
  
  =item * Sean M. Burke
  
  =item * Andy Lester
  
  =item * Pete Krawczyk S<C<< <petek AT cpan.org> >>>
  
  =back
  
  You can follow or contribute to HTML-Tree's development at
  L<< http://github.com/madsen/HTML-Tree >>.
  
  =head1 COPYRIGHT
  
  Copyright 2000,2001 Sean M. Burke
  
  =cut
HTML_ELEMENT_TRAVERSE

    $main::fatpacked{"HTML/Form.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTML_FORM';
  package HTML::Form;
  
  use strict;
  use URI;
  use Carp ();
  use Encode ();
  
  use vars qw($VERSION);
  $VERSION = "6.03";
  
  my %form_tags = map {$_ => 1} qw(input textarea button select option);
  
  my %type2class = (
   text     => "TextInput",
   password => "TextInput",
   hidden   => "TextInput",
   textarea => "TextInput",
  
   "reset"  => "IgnoreInput",
  
   radio    => "ListInput",
   checkbox => "ListInput",
   option   => "ListInput",
  
   button   => "SubmitInput",
   submit   => "SubmitInput",
   image    => "ImageInput",
   file     => "FileInput",
  
   keygen   => "KeygenInput",
  );
  
  # The new HTML5 input types
  %type2class = (%type2class, map { $_ => 'TextInput' } qw(
      tel search url email
      datetime date month week time datetime-local
      number range color
  ));
  
  =head1 NAME
  
  HTML::Form - Class that represents an HTML form element
  
  =head1 SYNOPSIS
  
   use HTML::Form;
   $form = HTML::Form->parse($html, $base_uri);
   $form->value(query => "Perl");
  
   use LWP::UserAgent;
   $ua = LWP::UserAgent->new;
   $response = $ua->request($form->click);
  
  =head1 DESCRIPTION
  
  Objects of the C<HTML::Form> class represents a single HTML
  C<E<lt>formE<gt> ... E<lt>/formE<gt>> instance.  A form consists of a
  sequence of inputs that usually have names, and which can take on
  various values.  The state of a form can be tweaked and it can then be
  asked to provide C<HTTP::Request> objects that can be passed to the
  request() method of C<LWP::UserAgent>.
  
  The following methods are available:
  
  =over 4
  
  =item @forms = HTML::Form->parse( $html_document, $base_uri )
  
  =item @forms = HTML::Form->parse( $html_document, base => $base_uri, %opt )
  
  =item @forms = HTML::Form->parse( $response, %opt )
  
  The parse() class method will parse an HTML document and build up
  C<HTML::Form> objects for each <form> element found.  If called in scalar
  context only returns the first <form>.  Returns an empty list if there
  are no forms to be found.
  
  The required arguments is the HTML document to parse ($html_document) and the
  URI used to retrieve the document ($base_uri).  The base URI is needed to resolve
  relative action URIs.  The provided HTML document should be a Unicode string
  (or US-ASCII).
  
  By default HTML::Form assumes that the original document was UTF-8 encoded and
  thus encode forms that don't specify an explicit I<accept-charset> as UTF-8.
  The charset assumed can be overridden by providing the C<charset> option to
  parse().  It's a good idea to be explicit about this parameter as well, thus
  the recommended simplest invocation becomes:
  
      my @forms = HTML::Form->parse(
          Encode::decode($encoding, $html_document_bytes),
          base => $base_uri,
  	charset => $encoding,
      );
  
  If the document was retrieved with LWP then the response object provide methods
  to obtain a proper value for C<base> and C<charset>:
  
      my $ua = LWP::UserAgent->new;
      my $response = $ua->get("http://www.example.com/form.html");
      my @forms = HTML::Form->parse($response->decoded_content,
  	base => $response->base,
  	charset => $response->content_charset,
      );
  
  In fact, the parse() method can parse from an C<HTTP::Response> object
  directly, so the example above can be more conveniently written as:
  
      my $ua = LWP::UserAgent->new;
      my $response = $ua->get("http://www.example.com/form.html");
      my @forms = HTML::Form->parse($response);
  
  Note that any object that implements a decoded_content(), base() and
  content_charset() method with similar behaviour as C<HTTP::Response> will do.
  
  Additional options might be passed in to control how the parse method
  behaves.  The following are all the options currently recognized:
  
  =over
  
  =item C<< base => $uri >>
  
  This is the URI used to retrive the original document.  This option is not optional ;-)
  
  =item C<< charset => $str >>
  
  Specify what charset the original document was encoded in.  This is used as
  the default for accept_charset.  If not provided this defaults to "UTF-8".
  
  =item C<< verbose => $bool >>
  
  Warn (print messages to STDERR) about any bad HTML form constructs found.
  You can trap these with $SIG{__WARN__}.  The default is not to issue warnings.
  
  =item C<< strict => $bool >>
  
  Initialize any form objects with the given strict attribute.
  If the strict is turned on the methods that change values of the form will croak if you try
  to set illegal values or modify readonly fields.
  The default is not to be strict.
  
  =back
  
  =cut
  
  sub parse
  {
      my $class = shift;
      my $html = shift;
      unshift(@_, "base") if @_ == 1;
      my %opt = @_;
  
      require HTML::TokeParser;
      my $p = HTML::TokeParser->new(ref($html) ? $html->decoded_content(ref => 1) : \$html);
      die "Failed to create HTML::TokeParser object" unless $p;
  
      my $base_uri = delete $opt{base};
      my $charset = delete $opt{charset};
      my $strict = delete $opt{strict};
      my $verbose = delete $opt{verbose};
  
      if ($^W) {
  	Carp::carp("Unrecognized option $_ in HTML::Form->parse") for sort keys %opt;
      }
  
      unless (defined $base_uri) {
  	if (ref($html)) {
  	    $base_uri = $html->base;
  	}
  	else {
  	    Carp::croak("HTML::Form::parse: No \$base_uri provided");
  	}
      }
      unless (defined $charset) {
  	if (ref($html) and $html->can("content_charset")) {
  	    $charset = $html->content_charset;
  	}
  	unless ($charset) {
  	    $charset = "UTF-8";
  	}
      }
  
      my @forms;
      my $f;  # current form
  
      my %openselect; # index to the open instance of a select
  
      while (my $t = $p->get_tag) {
  	my($tag,$attr) = @$t;
  	if ($tag eq "form") {
  	    my $action = delete $attr->{'action'};
  	    $action = "" unless defined $action;
  	    $action = URI->new_abs($action, $base_uri);
  	    $f = $class->new($attr->{'method'},
  			     $action,
  			     $attr->{'enctype'});
              $f->accept_charset($attr->{'accept-charset'}) if $attr->{'accept-charset'};
  	    $f->{default_charset} = $charset;
  	    $f->{attr} = $attr;
  	    $f->strict(1) if $strict;
              %openselect = ();
  	    push(@forms, $f);
  	    my(%labels, $current_label);
  	    while (my $t = $p->get_tag) {
  		my($tag, $attr) = @$t;
  		last if $tag eq "/form";
  
  		if ($tag ne 'textarea') {
  		    # if we are inside a label tag, then keep
  		    # appending any text to the current label
  		    if(defined $current_label) {
  		        $current_label = join " ",
  		            grep { defined and length }
  		            $current_label,
  		            $p->get_phrase;
  		    }
  		}
  
  		if ($tag eq "input") {
  		    $attr->{value_name} =
  		        exists $attr->{id} && exists $labels{$attr->{id}} ? $labels{$attr->{id}} :
  			defined $current_label                            ?  $current_label      :
  		        $p->get_phrase;
  		}
  
  		if ($tag eq "label") {
  		    $current_label = $p->get_phrase;
  		    $labels{ $attr->{for} } = $current_label
  		        if exists $attr->{for};
  		}
  		elsif ($tag eq "/label") {
  		    $current_label = undef;
  		}
  		elsif ($tag eq "input") {
  		    my $type = delete $attr->{type} || "text";
  		    $f->push_input($type, $attr, $verbose);
  		}
                  elsif ($tag eq "button") {
                      my $type = delete $attr->{type} || "submit";
                      $f->push_input($type, $attr, $verbose);
                  }
  		elsif ($tag eq "textarea") {
  		    $attr->{textarea_value} = $attr->{value}
  		        if exists $attr->{value};
  		    my $text = $p->get_text("/textarea");
  		    $attr->{value} = $text;
  		    $f->push_input("textarea", $attr, $verbose);
  		}
  		elsif ($tag eq "select") {
  		    # rename attributes reserved to come for the option tag
  		    for ("value", "value_name") {
  			$attr->{"select_$_"} = delete $attr->{$_}
  			    if exists $attr->{$_};
  		    }
  		    # count this new select option separately
  		    my $name = $attr->{name};
  		    $name = "" unless defined $name;
  		    $openselect{$name}++;
  
  		    while ($t = $p->get_tag) {
  			my $tag = shift @$t;
  			last if $tag eq "/select";
  			next if $tag =~ m,/?optgroup,;
  			next if $tag eq "/option";
  			if ($tag eq "option") {
  			    my %a = %{$t->[0]};
  			    # rename keys so they don't clash with %attr
  			    for (keys %a) {
  				next if $_ eq "value";
  				$a{"option_$_"} = delete $a{$_};
  			    }
  			    while (my($k,$v) = each %$attr) {
  				$a{$k} = $v;
  			    }
  			    $a{value_name} = $p->get_trimmed_text;
  			    $a{value} = delete $a{value_name}
  				unless defined $a{value};
  			    $a{idx} = $openselect{$name};
  			    $f->push_input("option", \%a, $verbose);
  			}
  			else {
  			    warn("Bad <select> tag '$tag' in $base_uri\n") if $verbose;
  			    if ($tag eq "/form" ||
  				$tag eq "input" ||
  				$tag eq "textarea" ||
  				$tag eq "select" ||
  				$tag eq "keygen")
  			    {
  				# MSIE implictly terminate the <select> here, so we
  				# try to do the same.  Actually the MSIE behaviour
  				# appears really strange:  <input> and <textarea>
  				# do implictly close, but not <select>, <keygen> or
  				# </form>.
  				my $type = ($tag =~ s,^/,,) ? "E" : "S";
  				$p->unget_token([$type, $tag, @$t]);
  				last;
  			    }
  			}
  		    }
  		}
  		elsif ($tag eq "keygen") {
  		    $f->push_input("keygen", $attr, $verbose);
  		}
  	    }
  	}
  	elsif ($form_tags{$tag}) {
  	    warn("<$tag> outside <form> in $base_uri\n") if $verbose;
  	}
      }
      for (@forms) {
  	$_->fixup;
      }
  
      wantarray ? @forms : $forms[0];
  }
  
  sub new {
      my $class = shift;
      my $self = bless {}, $class;
      $self->{method} = uc(shift  || "GET");
      $self->{action} = shift  || Carp::croak("No action defined");
      $self->{enctype} = lc(shift || "application/x-www-form-urlencoded");
      $self->{accept_charset} = "UNKNOWN";
      $self->{default_charset} = "UTF-8";
      $self->{inputs} = [@_];
      $self;
  }
  
  
  sub push_input
  {
      my($self, $type, $attr, $verbose) = @_;
      $type = lc $type;
      my $class = $type2class{$type};
      unless ($class) {
  	Carp::carp("Unknown input type '$type'") if $verbose;
  	$class = "TextInput";
      }
      $class = "HTML::Form::$class";
      my @extra;
      push(@extra, readonly => 1) if $type eq "hidden";
      push(@extra, strict => 1) if $self->{strict};
      if ($type eq "file" && exists $attr->{value}) {
  	# it's not safe to trust the value set by the server
  	# the user always need to explictly set the names of files to upload
  	$attr->{orig_value} = delete $attr->{value};
      }
      delete $attr->{type}; # don't confuse the type argument
      my $input = $class->new(type => $type, %$attr, @extra);
      $input->add_to_form($self);
  }
  
  
  =item $method = $form->method
  
  =item $form->method( $new_method )
  
  This method is gets/sets the I<method> name used for the
  C<HTTP::Request> generated.  It is a string like "GET" or "POST".
  
  =item $action = $form->action
  
  =item $form->action( $new_action )
  
  This method gets/sets the URI which we want to apply the request
  I<method> to.
  
  =item $enctype = $form->enctype
  
  =item $form->enctype( $new_enctype )
  
  This method gets/sets the encoding type for the form data.  It is a
  string like "application/x-www-form-urlencoded" or "multipart/form-data".
  
  =item $accept = $form->accept_charset
  
  =item $form->accept_charset( $new_accept )
  
  This method gets/sets the list of charset encodings that the server processing
  the form accepts. Current implementation supports only one-element lists.
  Default value is "UNKNOWN" which we interpret as a request to use document
  charset as specified by the 'charset' parameter of the parse() method.
  
  =cut
  
  BEGIN {
      # Set up some accesor
      for (qw(method action enctype accept_charset)) {
  	my $m = $_;
  	no strict 'refs';
  	*{$m} = sub {
  	    my $self = shift;
  	    my $old = $self->{$m};
  	    $self->{$m} = shift if @_;
  	    $old;
  	};
      }
      *uri = \&action;  # alias
  }
  
  =item $value = $form->attr( $name )
  
  =item $form->attr( $name, $new_value )
  
  This method give access to the original HTML attributes of the <form> tag.
  The $name should always be passed in lower case.
  
  Example:
  
     @f = HTML::Form->parse( $html, $foo );
     @f = grep $_->attr("id") eq "foo", @f;
     die "No form named 'foo' found" unless @f;
     $foo = shift @f;
  
  =cut
  
  sub attr {
      my $self = shift;
      my $name = shift;
      return undef unless defined $name;
  
      my $old = $self->{attr}{$name};
      $self->{attr}{$name} = shift if @_;
      return $old;
  }
  
  =item $bool = $form->strict
  
  =item $form->strict( $bool )
  
  Gets/sets the strict attribute of a form.  If the strict is turned on
  the methods that change values of the form will croak if you try to
  set illegal values or modify readonly fields.  The default is not to be strict.
  
  =cut
  
  sub strict {
      my $self = shift;
      my $old = $self->{strict};
      if (@_) {
  	$self->{strict} = shift;
  	for my $input (@{$self->{inputs}}) {
  	    $input->strict($self->{strict});
  	}
      }
      return $old;
  }
  
  
  =item @inputs = $form->inputs
  
  This method returns the list of inputs in the form.  If called in
  scalar context it returns the number of inputs contained in the form.
  See L</INPUTS> for what methods are available for the input objects
  returned.
  
  =cut
  
  sub inputs
  {
      my $self = shift;
      @{$self->{'inputs'}};
  }
  
  
  =item $input = $form->find_input( $selector )
  
  =item $input = $form->find_input( $selector, $type )
  
  =item $input = $form->find_input( $selector, $type, $index )
  
  This method is used to locate specific inputs within the form.  All
  inputs that match the arguments given are returned.  In scalar context
  only the first is returned, or C<undef> if none match.
  
  If $selector is specified, then the input's name, id, class attribute must
  match.  A selector prefixed with '#' must match the id attribute of the input.
  A selector prefixed with '.' matches the class attribute.  A selector prefixed
  with '^' or with no prefix matches the name attribute.
  
  If $type is specified, then the input must have the specified type.
  The following type names are used: "text", "password", "hidden",
  "textarea", "file", "image", "submit", "radio", "checkbox" and "option".
  
  The $index is the sequence number of the input matched where 1 is the
  first.  If combined with $name and/or $type then it select the I<n>th
  input with the given name and/or type.
  
  =cut
  
  sub find_input
  {
      my($self, $name, $type, $no) = @_;
      if (wantarray) {
  	my @res;
  	my $c;
  	for (@{$self->{'inputs'}}) {
  	    next if defined($name) && !$_->selected($name);
  	    next if $type && $type ne $_->{type};
  	    $c++;
  	    next if $no && $no != $c;
  	    push(@res, $_);
  	}
  	return @res;
  	
      }
      else {
  	$no ||= 1;
  	for (@{$self->{'inputs'}}) {
  	    next if defined($name) && !$_->selected($name);
  	    next if $type && $type ne $_->{type};
  	    next if --$no;
  	    return $_;
  	}
  	return undef;
      }
  }
  
  sub fixup
  {
      my $self = shift;
      for (@{$self->{'inputs'}}) {
  	$_->fixup;
      }
  }
  
  
  =item $value = $form->value( $selector )
  
  =item $form->value( $selector, $new_value )
  
  The value() method can be used to get/set the value of some input.  If
  strict is enabled and no input has the indicated name, then this method will croak.
  
  If multiple inputs have the same name, only the first one will be
  affected.
  
  The call:
  
      $form->value('foo')
  
  is basically a short-hand for:
  
      $form->find_input('foo')->value;
  
  =cut
  
  sub value
  {
      my $self = shift;
      my $key  = shift;
      my $input = $self->find_input($key);
      unless ($input) {
  	Carp::croak("No such field '$key'") if $self->{strict};
  	return undef unless @_;
  	$input = $self->push_input("text", { name => $key, value => "" });
      }
      local $Carp::CarpLevel = 1;
      $input->value(@_);
  }
  
  =item @names = $form->param
  
  =item @values = $form->param( $name )
  
  =item $form->param( $name, $value, ... )
  
  =item $form->param( $name, \@values )
  
  Alternative interface to examining and setting the values of the form.
  
  If called without arguments then it returns the names of all the
  inputs in the form.  The names will not repeat even if multiple inputs
  have the same name.  In scalar context the number of different names
  is returned.
  
  If called with a single argument then it returns the value or values
  of inputs with the given name.  If called in scalar context only the
  first value is returned.  If no input exists with the given name, then
  C<undef> is returned.
  
  If called with 2 or more arguments then it will set values of the
  named inputs.  This form will croak if no inputs have the given name
  or if any of the values provided does not fit.  Values can also be
  provided as a reference to an array.  This form will allow unsetting
  all values with the given name as well.
  
  This interface resembles that of the param() function of the CGI
  module.
  
  =cut
  
  sub param {
      my $self = shift;
      if (@_) {
          my $name = shift;
          my @inputs;
          for ($self->inputs) {
              my $n = $_->name;
              next if !defined($n) || $n ne $name;
              push(@inputs, $_);
          }
  
          if (@_) {
              # set
              die "No '$name' parameter exists" unless @inputs;
  	    my @v = @_;
  	    @v = @{$v[0]} if @v == 1 && ref($v[0]);
              while (@v) {
                  my $v = shift @v;
                  my $err;
                  for my $i (0 .. @inputs-1) {
                      eval {
                          $inputs[$i]->value($v);
                      };
                      unless ($@) {
                          undef($err);
                          splice(@inputs, $i, 1);
                          last;
                      }
                      $err ||= $@;
                  }
                  die $err if $err;
              }
  
  	    # the rest of the input should be cleared
  	    for (@inputs) {
  		$_->value(undef);
  	    }
          }
          else {
              # get
              my @v;
              for (@inputs) {
  		if (defined(my $v = $_->value)) {
  		    push(@v, $v);
  		}
              }
              return wantarray ? @v : $v[0];
          }
      }
      else {
          # list parameter names
          my @n;
          my %seen;
          for ($self->inputs) {
              my $n = $_->name;
              next if !defined($n) || $seen{$n}++;
              push(@n, $n);
          }
          return @n;
      }
  }
  
  
  =item $form->try_others( \&callback )
  
  This method will iterate over all permutations of unvisited enumerated
  values (<select>, <radio>, <checkbox>) and invoke the callback for
  each.  The callback is passed the $form as argument.  The return value
  from the callback is ignored and the try_others() method itself does
  not return anything.
  
  =cut
  
  sub try_others
  {
      my($self, $cb) = @_;
      my @try;
      for (@{$self->{'inputs'}}) {
  	my @not_tried_yet = $_->other_possible_values;
  	next unless @not_tried_yet;
  	push(@try, [\@not_tried_yet, $_]);
      }
      return unless @try;
      $self->_try($cb, \@try, 0);
  }
  
  sub _try
  {
      my($self, $cb, $try, $i) = @_;
      for (@{$try->[$i][0]}) {
  	$try->[$i][1]->value($_);
  	&$cb($self);
  	$self->_try($cb, $try, $i+1) if $i+1 < @$try;
      }
  }
  
  
  =item $request = $form->make_request
  
  Will return an C<HTTP::Request> object that reflects the current setting
  of the form.  You might want to use the click() method instead.
  
  =cut
  
  sub make_request
  {
      my $self = shift;
      my $method  = uc $self->{'method'};
      my $uri     = $self->{'action'};
      my $enctype = $self->{'enctype'};
      my @form    = $self->form;
  
      my $charset = $self->accept_charset eq "UNKNOWN" ? $self->{default_charset} : $self->accept_charset;
      foreach my $fi (@form) {
  	$fi = Encode::encode($charset, $fi) unless ref($fi);
      }
  
      if ($method eq "GET") {
  	require HTTP::Request;
  	$uri = URI->new($uri, "http");
  	$uri->query_form(@form);
  	return HTTP::Request->new(GET => $uri);
      }
      elsif ($method eq "POST") {
  	require HTTP::Request::Common;
  	return HTTP::Request::Common::POST($uri, \@form,
  					   Content_Type => $enctype);
      }
      else {
  	Carp::croak("Unknown method '$method'");
      }
  }
  
  
  =item $request = $form->click
  
  =item $request = $form->click( $selector )
  
  =item $request = $form->click( $x, $y )
  
  =item $request = $form->click( $selector, $x, $y )
  
  Will "click" on the first clickable input (which will be of type
  C<submit> or C<image>).  The result of clicking is an C<HTTP::Request>
  object that can then be passed to C<LWP::UserAgent> if you want to
  obtain the server response.
  
  If a $selector is specified, we will click on the first clickable input
  matching the selector, and the method will croak if no matching clickable
  input is found.  If $selector is I<not> specified, then it
  is ok if the form contains no clickable inputs.  In this case the
  click() method returns the same request as the make_request() method
  would do.  See description of the find_input() method above for how
  the $selector is specified.
  
  If there are multiple clickable inputs with the same name, then there
  is no way to get the click() method of the C<HTML::Form> to click on
  any but the first.  If you need this you would have to locate the
  input with find_input() and invoke the click() method on the given
  input yourself.
  
  A click coordinate pair can also be provided, but this only makes a
  difference if you clicked on an image.  The default coordinate is
  (1,1).  The upper-left corner of the image is (0,0), but some badly
  coded CGI scripts are known to not recognize this.  Therefore (1,1) was
  selected as a safer default.
  
  =cut
  
  sub click
  {
      my $self = shift;
      my $name;
      $name = shift if (@_ % 2) == 1;  # odd number of arguments
  
      # try to find first submit button to activate
      for (@{$self->{'inputs'}}) {
          next unless $_->can("click");
          next if $name && !$_->selected($name);
  	next if $_->disabled;
  	return $_->click($self, @_);
      }
      Carp::croak("No clickable input with name $name") if $name;
      $self->make_request;
  }
  
  
  =item @kw = $form->form
  
  Returns the current setting as a sequence of key/value pairs.  Note
  that keys might be repeated, which means that some values might be
  lost if the return values are assigned to a hash.
  
  In scalar context this method returns the number of key/value pairs
  generated.
  
  =cut
  
  sub form
  {
      my $self = shift;
      map { $_->form_name_value($self) } @{$self->{'inputs'}};
  }
  
  
  =item $form->dump
  
  Returns a textual representation of current state of the form.  Mainly
  useful for debugging.  If called in void context, then the dump is
  printed on STDERR.
  
  =cut
  
  sub dump
  {
      my $self = shift;
      my $method  = $self->{'method'};
      my $uri     = $self->{'action'};
      my $enctype = $self->{'enctype'};
      my $dump = "$method $uri";
      $dump .= " ($enctype)"
  	if $enctype ne "application/x-www-form-urlencoded";
      $dump .= " [$self->{attr}{name}]"
      	if exists $self->{attr}{name};
      $dump .= "\n";
      for ($self->inputs) {
  	$dump .= "  " . $_->dump . "\n";
      }
      print STDERR $dump unless defined wantarray;
      $dump;
  }
  
  
  #---------------------------------------------------
  package HTML::Form::Input;
  
  =back
  
  =head1 INPUTS
  
  An C<HTML::Form> objects contains a sequence of I<inputs>.  References to
  the inputs can be obtained with the $form->inputs or $form->find_input
  methods.
  
  Note that there is I<not> a one-to-one correspondence between input
  I<objects> and E<lt>inputE<gt> I<elements> in the HTML document.  An
  input object basically represents a name/value pair, so when multiple
  HTML elements contribute to the same name/value pair in the submitted
  form they are combined.
  
  The input elements that are mapped one-to-one are "text", "textarea",
  "password", "hidden", "file", "image", "submit" and "checkbox".  For
  the "radio" and "option" inputs the story is not as simple: All
  E<lt>input type="radio"E<gt> elements with the same name will
  contribute to the same input radio object.  The number of radio input
  objects will be the same as the number of distinct names used for the
  E<lt>input type="radio"E<gt> elements.  For a E<lt>selectE<gt> element
  without the C<multiple> attribute there will be one input object of
  type of "option".  For a E<lt>select multipleE<gt> element there will
  be one input object for each contained E<lt>optionE<gt> element.  Each
  one of these option objects will have the same name.
  
  The following methods are available for the I<input> objects:
  
  =over 4
  
  =cut
  
  sub new
  {
      my $class = shift;
      my $self = bless {@_}, $class;
      $self;
  }
  
  sub add_to_form
  {
      my($self, $form) = @_;
      push(@{$form->{'inputs'}}, $self);
      $self;
  }
  
  sub strict {
      my $self = shift;
      my $old = $self->{strict};
      if (@_) {
  	$self->{strict} = shift;
      }
      $old;
  }
  
  sub fixup {}
  
  
  =item $input->type
  
  Returns the type of this input.  The type is one of the following
  strings: "text", "password", "hidden", "textarea", "file", "image", "submit",
  "radio", "checkbox" or "option".
  
  =cut
  
  sub type
  {
      shift->{type};
  }
  
  =item $name = $input->name
  
  =item $input->name( $new_name )
  
  This method can be used to get/set the current name of the input.
  
  =item $input->id
  
  =item $input->class
  
  These methods can be used to get/set the current id or class attribute for the input.
  
  =item $input->selected( $selector )
  
  Returns TRUE if the given selector matched the input.  See the description of
  the find_input() method above for a description of the selector syntax.
  
  =item $value = $input->value
  
  =item $input->value( $new_value )
  
  This method can be used to get/set the current value of an
  input.
  
  If strict is enabled and the input only can take an enumerated list of values,
  then it is an error to try to set it to something else and the method will
  croak if you try.
  
  You will also be able to set the value of read-only inputs, but a
  warning will be generated if running under C<perl -w>.
  
  =cut
  
  sub name
  {
      my $self = shift;
      my $old = $self->{name};
      $self->{name} = shift if @_;
      $old;
  }
  
  sub id
  {
      my $self = shift;
      my $old = $self->{id};
      $self->{id} = shift if @_;
      $old;
  }
  
  sub class
  {
      my $self = shift;
      my $old = $self->{class};
      $self->{class} = shift if @_;
      $old;
  }
  
  sub selected {
      my($self, $sel) = @_;
      return undef unless defined $sel;
      my $attr =
          $sel =~ s/^\^// ? "name"  :
          $sel =~ s/^#//  ? "id"    :
          $sel =~ s/^\.// ? "class" :
  	                  "name";
      return 0 unless defined $self->{$attr};
      return $self->{$attr} eq $sel;
  }
  
  sub value
  {
      my $self = shift;
      my $old = $self->{value};
      $self->{value} = shift if @_;
      $old;
  }
  
  =item $input->possible_values
  
  Returns a list of all values that an input can take.  For inputs that
  do not have discrete values, this returns an empty list.
  
  =cut
  
  sub possible_values
  {
      return;
  }
  
  =item $input->other_possible_values
  
  Returns a list of all values not tried yet.
  
  =cut
  
  sub other_possible_values
  {
      return;
  }
  
  =item $input->value_names
  
  For some inputs the values can have names that are different from the
  values themselves.  The number of names returned by this method will
  match the number of values reported by $input->possible_values.
  
  When setting values using the value() method it is also possible to
  use the value names in place of the value itself.
  
  =cut
  
  sub value_names {
      return
  }
  
  =item $bool = $input->readonly
  
  =item $input->readonly( $bool )
  
  This method is used to get/set the value of the readonly attribute.
  You are allowed to modify the value of readonly inputs, but setting
  the value will generate some noise when warnings are enabled.  Hidden
  fields always start out readonly.
  
  =cut
  
  sub readonly {
      my $self = shift;
      my $old = $self->{readonly};
      $self->{readonly} = shift if @_;
      $old;
  }
  
  =item $bool = $input->disabled
  
  =item $input->disabled( $bool )
  
  This method is used to get/set the value of the disabled attribute.
  Disabled inputs do not contribute any key/value pairs for the form
  value.
  
  =cut
  
  sub disabled {
      my $self = shift;
      my $old = $self->{disabled};
      $self->{disabled} = shift if @_;
      $old;
  }
  
  =item $input->form_name_value
  
  Returns a (possible empty) list of key/value pairs that should be
  incorporated in the form value from this input.
  
  =cut
  
  sub form_name_value
  {
      my $self = shift;
      my $name = $self->{'name'};
      return unless defined $name;
      return if $self->disabled;
      my $value = $self->value;
      return unless defined $value;
      return ($name => $value);
  }
  
  sub dump
  {
      my $self = shift;
      my $name = $self->name;
      $name = "<NONAME>" unless defined $name;
      my $value = $self->value;
      $value = "<UNDEF>" unless defined $value;
      my $dump = "$name=$value";
  
      my $type = $self->type;
  
      $type .= " disabled" if $self->disabled;
      $type .= " readonly" if $self->readonly;
      return sprintf "%-30s %s", $dump, "($type)" unless $self->{menu};
  
      my @menu;
      my $i = 0;
      for (@{$self->{menu}}) {
  	my $opt = $_->{value};
  	$opt = "<UNDEF>" unless defined $opt;
  	$opt .= "/$_->{name}"
  	    if defined $_->{name} && length $_->{name} && $_->{name} ne $opt;
  	substr($opt,0,0) = "-" if $_->{disabled};
  	if (exists $self->{current} && $self->{current} == $i) {
  	    substr($opt,0,0) = "!" unless $_->{seen};
  	    substr($opt,0,0) = "*";
  	}
  	else {
  	    substr($opt,0,0) = ":" if $_->{seen};
  	}
  	push(@menu, $opt);
  	$i++;
      }
  
      return sprintf "%-30s %-10s %s", $dump, "($type)", "[" . join("|", @menu) . "]";
  }
  
  
  #---------------------------------------------------
  package HTML::Form::TextInput;
  @HTML::Form::TextInput::ISA=qw(HTML::Form::Input);
  
  #input/text
  #input/password
  #input/hidden
  #textarea
  
  sub value
  {
      my $self = shift;
      my $old = $self->{value};
      $old = "" unless defined $old;
      if (@_) {
          Carp::croak("Input '$self->{name}' is readonly")
  	    if $self->{strict} && $self->{readonly};
          my $new = shift;
          my $n = exists $self->{maxlength} ? $self->{maxlength} : undef;
          Carp::croak("Input '$self->{name}' has maxlength '$n'")
  	    if $self->{strict} && defined($n) && defined($new) && length($new) > $n;
  	$self->{value} = $new;
      }
      $old;
  }
  
  #---------------------------------------------------
  package HTML::Form::IgnoreInput;
  @HTML::Form::IgnoreInput::ISA=qw(HTML::Form::Input);
  
  #input/button
  #input/reset
  
  sub value { return }
  
  
  #---------------------------------------------------
  package HTML::Form::ListInput;
  @HTML::Form::ListInput::ISA=qw(HTML::Form::Input);
  
  #select/option   (val1, val2, ....)
  #input/radio     (undef, val1, val2,...)
  #input/checkbox  (undef, value)
  #select-multiple/option (undef, value)
  
  sub new
  {
      my $class = shift;
      my $self = $class->SUPER::new(@_);
  
      my $value = delete $self->{value};
      my $value_name = delete $self->{value_name};
      my $type = $self->{type};
  
      if ($type eq "checkbox") {
  	$value = "on" unless defined $value;
  	$self->{menu} = [
  	    { value => undef, name => "off", },
              { value => $value, name => $value_name, },
          ];
  	$self->{current} = (delete $self->{checked}) ? 1 : 0;
  	;
      }
      else {
  	$self->{option_disabled}++
  	    if $type eq "radio" && delete $self->{disabled};
  	$self->{menu} = [
              {value => $value, name => $value_name},
          ];
  	my $checked = $self->{checked} || $self->{option_selected};
  	delete $self->{checked};
  	delete $self->{option_selected};
  	if (exists $self->{multiple}) {
  	    unshift(@{$self->{menu}}, { value => undef, name => "off"});
  	    $self->{current} = $checked ? 1 : 0;
  	}
  	else {
  	    $self->{current} = 0 if $checked;
  	}
      }
      $self;
  }
  
  sub add_to_form
  {
      my($self, $form) = @_;
      my $type = $self->type;
  
      return $self->SUPER::add_to_form($form)
  	if $type eq "checkbox";
  
      if ($type eq "option" && exists $self->{multiple}) {
  	$self->{disabled} ||= delete $self->{option_disabled};
  	return $self->SUPER::add_to_form($form);
      }
  
      die "Assert" if @{$self->{menu}} != 1;
      my $m = $self->{menu}[0];
      $m->{disabled}++ if delete $self->{option_disabled};
  
      my $prev = $form->find_input($self->{name}, $self->{type}, $self->{idx});
      return $self->SUPER::add_to_form($form) unless $prev;
  
      # merge menues
      $prev->{current} = @{$prev->{menu}} if exists $self->{current};
      push(@{$prev->{menu}}, $m);
  }
  
  sub fixup
  {
      my $self = shift;
      if ($self->{type} eq "option" && !(exists $self->{current})) {
  	$self->{current} = 0;
      }
      $self->{menu}[$self->{current}]{seen}++ if exists $self->{current};
  }
  
  sub disabled
  {
      my $self = shift;
      my $type = $self->type;
  
      my $old = $self->{disabled} || _menu_all_disabled(@{$self->{menu}});
      if (@_) {
  	my $v = shift;
  	$self->{disabled} = $v;
          for (@{$self->{menu}}) {
              $_->{disabled} = $v;
          }
      }
      return $old;
  }
  
  sub _menu_all_disabled {
      for (@_) {
  	return 0 unless $_->{disabled};
      }
      return 1;
  }
  
  sub value
  {
      my $self = shift;
      my $old;
      $old = $self->{menu}[$self->{current}]{value} if exists $self->{current};
      $old = $self->{value} if exists $self->{value};
      if (@_) {
  	my $i = 0;
  	my $val = shift;
  	my $cur;
  	my $disabled;
  	for (@{$self->{menu}}) {
  	    if ((defined($val) && defined($_->{value}) && $val eq $_->{value}) ||
  		(!defined($val) && !defined($_->{value}))
  	       )
  	    {
  		$cur = $i;
  		$disabled = $_->{disabled};
  		last unless $disabled;
  	    }
  	    $i++;
  	}
  	if (!(defined $cur) || $disabled) {
  	    if (defined $val) {
  		# try to search among the alternative names as well
  		my $i = 0;
  		my $cur_ignorecase;
  		my $lc_val = lc($val);
  		for (@{$self->{menu}}) {
  		    if (defined $_->{name}) {
  			if ($val eq $_->{name}) {
  			    $disabled = $_->{disabled};
  			    $cur = $i;
  			    last unless $disabled;
  			}
  			if (!defined($cur_ignorecase) && $lc_val eq lc($_->{name})) {
  			    $cur_ignorecase = $i;
  			}
  		    }
  		    $i++;
  		}
  		unless (defined $cur) {
  		    $cur = $cur_ignorecase;
  		    if (defined $cur) {
  			$disabled = $self->{menu}[$cur]{disabled};
  		    }
  		    elsif ($self->{strict}) {
  			my $n = $self->name;
  		        Carp::croak("Illegal value '$val' for field '$n'");
  		    }
  		}
  	    }
  	    elsif ($self->{strict}) {
  		my $n = $self->name;
  	        Carp::croak("The '$n' field can't be unchecked");
  	    }
  	}
  	if ($self->{strict} && $disabled) {
  	    my $n = $self->name;
  	    Carp::croak("The value '$val' has been disabled for field '$n'");
  	}
  	if (defined $cur) {
  	    $self->{current} = $cur;
  	    $self->{menu}[$cur]{seen}++;
  	    delete $self->{value};
  	}
  	else {
  	    $self->{value} = $val;
  	    delete $self->{current};
  	}
      }
      $old;
  }
  
  =item $input->check
  
  Some input types represent toggles that can be turned on/off.  This
  includes "checkbox" and "option" inputs.  Calling this method turns
  this input on without having to know the value name.  If the input is
  already on, then nothing happens.
  
  This has the same effect as:
  
      $input->value($input->possible_values[1]);
  
  The input can be turned off with:
  
      $input->value(undef);
  
  =cut
  
  sub check
  {
      my $self = shift;
      $self->{current} = 1;
      $self->{menu}[1]{seen}++;
  }
  
  sub possible_values
  {
      my $self = shift;
      map $_->{value}, grep !$_->{disabled}, @{$self->{menu}};
  }
  
  sub other_possible_values
  {
      my $self = shift;
      map $_->{value}, grep !$_->{seen} && !$_->{disabled}, @{$self->{menu}};
  }
  
  sub value_names {
      my $self = shift;
      my @names;
      for (@{$self->{menu}}) {
  	my $n = $_->{name};
  	$n = $_->{value} unless defined $n;
  	push(@names, $n);
      }
      @names;
  }
  
  
  #---------------------------------------------------
  package HTML::Form::SubmitInput;
  @HTML::Form::SubmitInput::ISA=qw(HTML::Form::Input);
  
  #input/image
  #input/submit
  
  =item $input->click($form, $x, $y)
  
  Some input types (currently "submit" buttons and "images") can be
  clicked to submit the form.  The click() method returns the
  corresponding C<HTTP::Request> object.
  
  =cut
  
  sub click
  {
      my($self,$form,$x,$y) = @_;
      for ($x, $y) { $_ = 1 unless defined; }
      local($self->{clicked}) = [$x,$y];
      return $form->make_request;
  }
  
  sub form_name_value
  {
      my $self = shift;
      return unless $self->{clicked};
      return $self->SUPER::form_name_value(@_);
  }
  
  
  #---------------------------------------------------
  package HTML::Form::ImageInput;
  @HTML::Form::ImageInput::ISA=qw(HTML::Form::SubmitInput);
  
  sub form_name_value
  {
      my $self = shift;
      my $clicked = $self->{clicked};
      return unless $clicked;
      return if $self->{disabled};
      my $name = $self->{name};
      $name = (defined($name) && length($name)) ? "$name." : "";
      return ("${name}x" => $clicked->[0],
  	    "${name}y" => $clicked->[1]
  	   );
  }
  
  #---------------------------------------------------
  package HTML::Form::FileInput;
  @HTML::Form::FileInput::ISA=qw(HTML::Form::TextInput);
  
  =back
  
  If the input is of type C<file>, then it has these additional methods:
  
  =over 4
  
  =item $input->file
  
  This is just an alias for the value() method.  It sets the filename to
  read data from.
  
  For security reasons this field will never be initialized from the parsing
  of a form.  This prevents the server from triggering stealth uploads of
  arbitrary files from the client machine.
  
  =cut
  
  sub file {
      my $self = shift;
      $self->value(@_);
  }
  
  =item $filename = $input->filename
  
  =item $input->filename( $new_filename )
  
  This get/sets the filename reported to the server during file upload.
  This attribute defaults to the value reported by the file() method.
  
  =cut
  
  sub filename {
      my $self = shift;
      my $old = $self->{filename};
      $self->{filename} = shift if @_;
      $old = $self->file unless defined $old;
      $old;
  }
  
  =item $content = $input->content
  
  =item $input->content( $new_content )
  
  This get/sets the file content provided to the server during file
  upload.  This method can be used if you do not want the content to be
  read from an actual file.
  
  =cut
  
  sub content {
      my $self = shift;
      my $old = $self->{content};
      $self->{content} = shift if @_;
      $old;
  }
  
  =item @headers = $input->headers
  
  =item input->headers($key => $value, .... )
  
  This get/set additional header fields describing the file uploaded.
  This can for instance be used to set the C<Content-Type> reported for
  the file.
  
  =cut
  
  sub headers {
      my $self = shift;
      my $old = $self->{headers} || [];
      $self->{headers} = [@_] if @_;
      @$old;
  }
  
  sub form_name_value {
      my($self, $form) = @_;
      return $self->SUPER::form_name_value($form)
  	if $form->method ne "POST" ||
  	   $form->enctype ne "multipart/form-data";
  
      my $name = $self->name;
      return unless defined $name;
      return if $self->{disabled};
  
      my $file = $self->file;
      my $filename = $self->filename;
      my @headers = $self->headers;
      my $content = $self->content;
      if (defined $content) {
  	$filename = $file unless defined $filename;
  	$file = undef;
  	unshift(@headers, "Content" => $content);
      }
      elsif (!defined($file) || length($file) == 0) {
  	return;
      }
  
      # legacy (this used to be the way to do it)
      if (ref($file) eq "ARRAY") {
  	my $f = shift @$file;
  	my $fn = shift @$file;
  	push(@headers, @$file);
  	$file = $f;
  	$filename = $fn unless defined $filename;
      }
  
      return ($name => [$file, $filename, @headers]);
  }
  
  package HTML::Form::KeygenInput;
  @HTML::Form::KeygenInput::ISA=qw(HTML::Form::Input);
  
  sub challenge {
      my $self = shift;
      return $self->{challenge};
  }
  
  sub keytype {
      my $self = shift;
      return lc($self->{keytype} || 'rsa');
  }
  
  1;
  
  __END__
  
  =back
  
  =head1 SEE ALSO
  
  L<LWP>, L<LWP::UserAgent>, L<HTML::Parser>
  
  =head1 COPYRIGHT
  
  Copyright 1998-2008 Gisle Aas.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =cut
HTML_FORM

    $main::fatpacked{"HTML/Parse.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTML_PARSE';
  package HTML::Parse;
  
  use 5.008;
  
  #ABSTRACT: Deprecated, a wrapper around HTML::TreeBuilder
  
  
  use warnings;
  use strict;
  
  our $VERSION = '5.03'; # VERSION from OurPkgVersion
  
  use vars qw(@ISA @EXPORT
      $IMPLICIT_TAGS $IGNORE_UNKNOWN $IGNORE_TEXT $WARN
  );
  
  require Exporter;
  @ISA    = qw(Exporter);
  @EXPORT = qw(parse_html parse_htmlfile);
  
  # Backwards compatability
  $IMPLICIT_TAGS  = 1;
  $IGNORE_UNKNOWN = 1;
  $IGNORE_TEXT    = 0;
  $WARN           = 0;
  
  require HTML::TreeBuilder;
  
  sub parse_html {
      my $p = $_[1];
      $p = _new_tree_maker() unless $p;
      $p->parse( $_[0] );
  }
  
  sub parse_htmlfile {
      my ( $file, $p ) = @_;
      my ($HTML);
      open( $HTML, "<", $file ) or return;
      $p = _new_tree_maker() unless $p;
      $p->parse_file($HTML);
  }
  
  sub _new_tree_maker {
      my $p = HTML::TreeBuilder->new(
          implicit_tags  => $IMPLICIT_TAGS,
          ignore_unknown => $IGNORE_UNKNOWN,
          ignore_text    => $IGNORE_TEXT,
          'warn'         => $WARN,
      );
      $p->strict_comment(1);
      $p;
  }
  
  1;
  
  __END__
  
  =pod
  
  =head1 NAME
  
  HTML::Parse - Deprecated, a wrapper around HTML::TreeBuilder
  
  =head1 VERSION
  
  This document describes version 5.03 of
  HTML::Parse, released September 22, 2012
  as part of L<HTML-Tree|HTML::Tree>.
  
  =head1 SYNOPSIS
  
    See the documentation for HTML::TreeBuilder
  
  =head1 DESCRIPTION
  
  Disclaimer: This module is provided only for backwards compatibility
  with earlier versions of this library.  New code should I<not> use
  this module, and should really use the HTML::Parser and
  HTML::TreeBuilder modules directly, instead.
  
  The C<HTML::Parse> module provides functions to parse HTML documents.
  There are two functions exported by this module:
  
  =over 4
  
  =item parse_html($html) or parse_html($html, $obj)
  
  This function is really just a synonym for $obj->parse($html) and $obj
  is assumed to be a subclass of C<HTML::Parser>.  Refer to
  L<HTML::Parser> for more documentation.
  
  If $obj is not specified, the $obj will default to an internally
  created new C<HTML::TreeBuilder> object configured with strict_comment()
  turned on.  That class implements a parser that builds (and is) a HTML
  syntax tree with HTML::Element objects as nodes.
  
  The return value from parse_html() is $obj.
  
  =item parse_htmlfile($file, [$obj])
  
  Same as parse_html(), but pulls the HTML to parse, from the named file.
  
  Returns C<undef> if the file could not be opened, or $obj otherwise.
  
  =back
  
  When a C<HTML::TreeBuilder> object is created, the following variables
  control how parsing takes place:
  
  =over 4
  
  =item $HTML::Parse::IMPLICIT_TAGS
  
  Setting this variable to true will instruct the parser to try to
  deduce implicit elements and implicit end tags.  If this variable is
  false you get a parse tree that just reflects the text as it stands.
  Might be useful for quick & dirty parsing.  Default is true.
  
  Implicit elements have the implicit() attribute set.
  
  =item $HTML::Parse::IGNORE_UNKNOWN
  
  This variable contols whether unknow tags should be represented as
  elements in the parse tree.  Default is true.
  
  =item $HTML::Parse::IGNORE_TEXT
  
  Do not represent the text content of elements.  This saves space if
  all you want is to examine the structure of the document.  Default is
  false.
  
  =item $HTML::Parse::WARN
  
  Call warn() with an appropriate message for syntax errors.  Default is
  false.
  
  =back
  
  =head1 REMEMBER!
  
  HTML::TreeBuilder objects should be explicitly destroyed when you're
  finished with them.  See L<HTML::TreeBuilder>.
  
  =head1 SEE ALSO
  
  L<HTML::Parser>, L<HTML::TreeBuilder>, L<HTML::Element>
  
  =head1 AUTHOR
  
  Current maintainers:
  
  =over
  
  =item * Christopher J. Madsen S<C<< <perl AT cjmweb.net> >>>
  
  =item * Jeff Fearn S<C<< <jfearn AT cpan.org> >>>
  
  =back
  
  Original HTML-Tree author:
  
  =over
  
  =item * Gisle Aas
  
  =back
  
  Former maintainers:
  
  =over
  
  =item * Sean M. Burke
  
  =item * Andy Lester
  
  =item * Pete Krawczyk S<C<< <petek AT cpan.org> >>>
  
  =back
  
  You can follow or contribute to HTML-Tree's development at
  L<< http://github.com/madsen/HTML-Tree >>.
  
  =head1 COPYRIGHT AND LICENSE
  
  Copyright 1995-1998 Gisle Aas, 1999-2004 Sean M. Burke,
  2005 Andy Lester, 2006 Pete Krawczyk, 2010 Jeff Fearn,
  2012 Christopher J. Madsen.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  The programs in this library are distributed in the hope that they
  will be useful, but without any warranty; without even the implied
  warranty of merchantability or fitness for a particular purpose.
  
  =cut
HTML_PARSE

    $main::fatpacked{"HTML/Tree.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTML_TREE';
  package HTML::Tree;
  
  # ABSTRACT: build and scan parse-trees of HTML
  
  # HTML::Tree is basically just a happy alias to HTML::TreeBuilder.
  
  use warnings;
  use strict;
  
  our $VERSION = '5.03'; # VERSION from OurPkgVersion
  
  use HTML::TreeBuilder ();
  
  
  sub new {
      shift;
      unshift @_, 'HTML::TreeBuilder';
      goto &HTML::TreeBuilder::new;
  }
  
  sub new_from_file {
      shift;
      unshift @_, 'HTML::TreeBuilder';
      goto &HTML::TreeBuilder::new_from_file;
  }
  
  sub new_from_content {
      shift;
      unshift @_, 'HTML::TreeBuilder';
      goto &HTML::TreeBuilder::new_from_content;
  }
  
  sub new_from_url {
      shift;
      unshift @_, 'HTML::TreeBuilder';
      goto &HTML::TreeBuilder::new_from_url;
  }
  
  1;
  
  __END__
  
  =pod
  
  =head1 NAME
  
  HTML::Tree - build and scan parse-trees of HTML
  
  =head1 VERSION
  
  This document describes version 5.03 of
  HTML::Tree, released September 22, 2012
  as part of L<HTML-Tree|HTML::Tree>.
  
  =head1 SYNOPSIS
  
      use HTML::TreeBuilder;
      my $tree = HTML::TreeBuilder->new();
      $tree->parse_file($filename);
  
          # Then do something with the tree, using HTML::Element
          # methods -- for example:
  
      $tree->dump
  
          # Finally:
  
      $tree->delete;
  
  =head1 DESCRIPTION
  
  HTML-Tree is a suite of Perl modules for making parse trees out of
  HTML source.  It consists of mainly two modules, whose documentation
  you should refer to: L<HTML::TreeBuilder|HTML::TreeBuilder>
  and L<HTML::Element|HTML::Element>.
  
  HTML::TreeBuilder is the module that builds the parse trees.  (It uses
  HTML::Parser to do the work of breaking the HTML up into tokens.)
  
  The tree that TreeBuilder builds for you is made up of objects of the
  class HTML::Element.
  
  If you find that you do not properly understand the documentation
  for HTML::TreeBuilder and HTML::Element, it may be because you are
  unfamiliar with tree-shaped data structures, or with object-oriented
  modules in general. Sean Burke has written some articles for
  I<The Perl Journal> (C<www.tpj.com>) that seek to provide that background.
  The full text of those articles is contained in this distribution, as:
  
  =over 4
  
  =item L<HTML::Tree::AboutObjects|HTML::Tree::AboutObjects>
  
  "User's View of Object-Oriented Modules" from TPJ17.
  
  =item L<HTML::Tree::AboutTrees|HTML::Tree::AboutTrees>
  
  "Trees" from TPJ18
  
  =item L<HTML::Tree::Scanning|HTML::Tree::Scanning>
  
  "Scanning HTML" from TPJ19
  
  =back
  
  Readers already familiar with object-oriented modules and tree-shaped
  data structures should read just the last article.  Readers without
  that background should read the first, then the second, and then the
  third.
  
  =head1 METHODS
  
  All these methods simply redirect to the corresponding method in
  HTML::TreeBuilder.  It's more efficient to use HTML::TreeBuilder
  directly, and skip loading HTML::Tree at all.
  
  =head2 new
  
  Redirects to L<HTML::TreeBuilder/new>.
  
  =head2 new_from_file
  
  Redirects to L<HTML::TreeBuilder/new_from_file>.
  
  =head2 new_from_content
  
  Redirects to L<HTML::TreeBuilder/new_from_content>.
  
  =head2 new_from_url
  
  Redirects to L<HTML::TreeBuilder/new_from_url>.
  
  =head1 SUPPORT
  
  You can find documentation for this module with the perldoc command.
  
      perldoc HTML::Tree
  
      You can also look for information at:
  
  =over 4
  
  =item * AnnoCPAN: Annotated CPAN documentation
  
  L<http://annocpan.org/dist/HTML-Tree>
  
  =item * CPAN Ratings
  
  L<http://cpanratings.perl.org/d/HTML-Tree>
  
  =item * RT: CPAN's request tracker
  
  L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=HTML-Tree>
  
  =item * Search CPAN
  
  L<http://search.cpan.org/dist/HTML-Tree>
  
  =item * Stack Overflow
  
  L<http://stackoverflow.com/questions/tagged/html-tree>
  
  If you have a question about how to use HTML-Tree, Stack Overflow is
  the place to ask it.  Make sure you tag it both C<perl> and C<html-tree>.
  
  =back
  
  =head1 SEE ALSO
  
  L<HTML::TreeBuilder>, L<HTML::Element>, L<HTML::Tagset>,
  L<HTML::Parser>, L<HTML::DOMbo>
  
  The book I<Perl & LWP> by Sean M. Burke published by
  O'Reilly and Associates, 2002.  ISBN: 0-596-00178-9
  
  It has several chapters to do with HTML processing in general,
  and HTML-Tree specifically.  There's more info at:
  
      http://www.oreilly.com/catalog/perllwp/
  
      http://www.amazon.com/exec/obidos/ASIN/0596001789
  
  =head1 SOURCE REPOSITORY
  
  HTML-Tree is now maintained using Git.  The main public repository is
  L<< http://github.com/madsen/HTML-Tree >>.
  
  The best way to send a patch is to make a pull request there.
  
  =head1 ACKNOWLEDGEMENTS
  
  Thanks to Gisle Aas, Sean Burke and Andy Lester for their original work.
  
  Thanks to Chicago Perl Mongers (http://chicago.pm.org) for their
  patches submitted to HTML::Tree as part of the Phalanx project
  (http://qa.perl.org/phalanx).
  
  Thanks to the following people for additional patches and documentation:
  Terrence Brannon, Gordon Lack, Chris Madsen and Ricardo Signes.
  
  =head1 AUTHOR
  
  Current maintainers:
  
  =over
  
  =item * Christopher J. Madsen S<C<< <perl AT cjmweb.net> >>>
  
  =item * Jeff Fearn S<C<< <jfearn AT cpan.org> >>>
  
  =back
  
  Original HTML-Tree author:
  
  =over
  
  =item * Gisle Aas
  
  =back
  
  Former maintainers:
  
  =over
  
  =item * Sean M. Burke
  
  =item * Andy Lester
  
  =item * Pete Krawczyk S<C<< <petek AT cpan.org> >>>
  
  =back
  
  You can follow or contribute to HTML-Tree's development at
  L<< http://github.com/madsen/HTML-Tree >>.
  
  =head1 COPYRIGHT AND LICENSE
  
  Copyright 1995-1998 Gisle Aas, 1999-2004 Sean M. Burke,
  2005 Andy Lester, 2006 Pete Krawczyk, 2010 Jeff Fearn,
  2012 Christopher J. Madsen.
  (Except the articles contained in HTML::Tree::AboutObjects,
  HTML::Tree::AboutTrees, and HTML::Tree::Scanning, which are all
  copyright 2000 The Perl Journal.)
  
  Except for those three TPJ articles, the whole HTML-Tree distribution,
  of which this file is a part, is free software; you can redistribute
  it and/or modify it under the same terms as Perl itself.
  
  Those three TPJ articles may be distributed under the same terms as
  Perl itself.
  
  The programs in this library are distributed in the hope that they
  will be useful, but without any warranty; without even the implied
  warranty of merchantability or fitness for a particular purpose.
  
  =cut
HTML_TREE

    $main::fatpacked{"HTML/TreeBuilder.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTML_TREEBUILDER';
  package HTML::TreeBuilder;
  
  # ABSTRACT: Parser that builds a HTML syntax tree
  
  use warnings;
  use strict;
  use integer;    # vroom vroom!
  use Carp ();
  
  our $VERSION = '5.03'; # VERSION from OurPkgVersion
  
  #---------------------------------------------------------------------------
  # Make a 'DEBUG' constant...
  
  our $DEBUG; # Must be set BEFORE loading this file
  BEGIN {
  
      # We used to have things like
      #  print $indent, "lalala" if $Debug;
      # But there were an awful lot of having to evaluate $Debug's value.
      # If we make that depend on a constant, like so:
      #   sub DEBUG () { 1 } # or whatever value.
      #   ...
      #   print $indent, "lalala" if DEBUG;
      # Which at compile-time (thru the miracle of constant folding) turns into:
      #   print $indent, "lalala";
      # or, if DEBUG is a constant with a true value, then that print statement
      # is simply optimized away, and doesn't appear in the target code at all.
      # If you don't believe me, run:
      #    perl -MO=Deparse,-uHTML::TreeBuilder -e 'BEGIN { \
      #      $HTML::TreeBuilder::DEBUG = 4}  use HTML::TreeBuilder'
      # and see for yourself (substituting whatever value you want for $DEBUG
      # there).
  ## no critic
      if ( defined &DEBUG ) {
  
          # Already been defined!  Do nothing.
      }
      elsif ( $] < 5.00404 ) {
  
          # Grudgingly accomodate ancient (pre-constant) versions.
          eval 'sub DEBUG { $Debug } ';
      }
      elsif ( !$DEBUG ) {
          eval 'sub DEBUG () {0}';    # Make it a constant.
      }
      elsif ( $DEBUG =~ m<^\d+$>s ) {
          eval 'sub DEBUG () { ' . $DEBUG . ' }';    # Make THAT a constant.
      }
      else {                                         # WTF?
          warn "Non-numeric value \"$DEBUG\" in \$HTML::Element::DEBUG";
          eval 'sub DEBUG () { $DEBUG }';            # I guess.
      }
  ## use critic
  }
  
  #---------------------------------------------------------------------------
  
  use HTML::Entities ();
  use HTML::Tagset 3.02 ();
  
  use HTML::Element ();
  use HTML::Parser 3.46 ();
  our @ISA = qw(HTML::Element HTML::Parser);
  
  # This looks schizoid, I know.
  # It's not that we ARE an element AND a parser.
  # We ARE an element, but one that knows how to handle signals
  #  (method calls) from Parser in order to elaborate its subtree.
  
  # Legacy aliases:
  *HTML::TreeBuilder::isKnown             = \%HTML::Tagset::isKnown;
  *HTML::TreeBuilder::canTighten          = \%HTML::Tagset::canTighten;
  *HTML::TreeBuilder::isHeadElement       = \%HTML::Tagset::isHeadElement;
  *HTML::TreeBuilder::isBodyElement       = \%HTML::Tagset::isBodyElement;
  *HTML::TreeBuilder::isPhraseMarkup      = \%HTML::Tagset::isPhraseMarkup;
  *HTML::TreeBuilder::isHeadOrBodyElement = \%HTML::Tagset::isHeadOrBodyElement;
  *HTML::TreeBuilder::isList              = \%HTML::Tagset::isList;
  *HTML::TreeBuilder::isTableElement      = \%HTML::Tagset::isTableElement;
  *HTML::TreeBuilder::isFormElement       = \%HTML::Tagset::isFormElement;
  *HTML::TreeBuilder::p_closure_barriers  = \@HTML::Tagset::p_closure_barriers;
  
  #==========================================================================
  # Two little shortcut constructors:
  
  sub new_from_file {    # or from a FH
      my $class = shift;
      Carp::croak("new_from_file takes only one argument")
          unless @_ == 1;
      Carp::croak("new_from_file is a class method only")
          if ref $class;
      my $new = $class->new();
      defined $new->parse_file( $_[0] )
          or Carp::croak("unable to parse file: $!");
      return $new;
  }
  
  sub new_from_content {    # from any number of scalars
      my $class = shift;
      Carp::croak("new_from_content is a class method only")
          if ref $class;
      my $new = $class->new();
      foreach my $whunk (@_) {
          if ( ref($whunk) eq 'SCALAR' ) {
              $new->parse($$whunk);
          }
          else {
              $new->parse($whunk);
          }
          last if $new->{'_stunted'};    # might as well check that.
      }
      $new->eof();
      return $new;
  }
  
  sub new_from_url {                     # should accept anything that LWP does.
      undef our $lwp_response;
      my $class = shift;
      Carp::croak("new_from_url takes only one argument")
          unless @_ == 1;
      Carp::croak("new_from_url is a class method only")
          if ref $class;
      my $url = shift;
      my $new = $class->new();
  
      require LWP::UserAgent;
      # RECOMMEND PREREQ: LWP::UserAgent 5.815
      LWP::UserAgent->VERSION( 5.815 ); # HTTP::Headers content_is_html method
      $lwp_response = LWP::UserAgent->new->get( $url );
  
      Carp::croak("GET failed on $url: " . $lwp_response->status_line)
            unless $lwp_response->is_success;
      Carp::croak("$url returned " . $lwp_response->content_type . " not HTML")
            unless $lwp_response->content_is_html;
  
      $new->parse( $lwp_response->decoded_content );
      $new->eof;
      undef $lwp_response;        # Processed successfully
      return $new;
  }
  
  # TODO: document more fully?
  sub parse_content {    # from any number of scalars
      my $tree = shift;
      my $retval;
      foreach my $whunk (@_) {
          if ( ref($whunk) eq 'SCALAR' ) {
              $retval = $tree->parse($$whunk);
          }
          else {
              $retval = $tree->parse($whunk);
          }
          last if $tree->{'_stunted'};    # might as well check that.
      }
      $tree->eof();
      return $retval;
  }
  
  #---------------------------------------------------------------------------
  
  sub new {                               # constructor!
      my $class = shift;
      $class = ref($class) || $class;
  
      # Initialize HTML::Element part
      my $self = $class->element_class->new('html');
  
      {
  
          # A hack for certain strange versions of Parser:
          my $other_self = HTML::Parser->new();
          %$self = ( %$self, %$other_self );    # copy fields
             # Yes, multiple inheritance is messy.  Kids, don't try this at home.
          bless $other_self, "HTML::TreeBuilder::_hideyhole";
  
          # whack it out of the HTML::Parser class, to avoid the destructor
      }
  
      # The root of the tree is special, as it has these funny attributes,
      # and gets reblessed into this class.
  
      # Initialize parser settings
      $self->{'_implicit_tags'}       = 1;
      $self->{'_implicit_body_p_tag'} = 0;
  
      # If true, trying to insert text, or any of %isPhraseMarkup right
      #  under 'body' will implicate a 'p'.  If false, will just go there.
  
      $self->{'_tighten'} = 1;
  
      # whether ignorable WS in this tree should be deleted
  
      $self->{'_implicit'} = 1; # to delete, once we find a real open-"html" tag
  
      $self->{'_ignore_unknown'}      = 1;
      $self->{'_ignore_text'}         = 0;
      $self->{'_warn'}                = 0;
      $self->{'_no_space_compacting'} = 0;
      $self->{'_store_comments'}      = 0;
      $self->{'_store_declarations'}  = 1;
      $self->{'_store_pis'}           = 0;
      $self->{'_p_strict'}            = 0;
      $self->{'_no_expand_entities'}  = 0;
  
      # Parse attributes passed in as arguments
      if (@_) {
          my %attr = @_;
          for ( keys %attr ) {
              $self->{"_$_"} = $attr{$_};
          }
      }
  
      $HTML::Element::encoded_content = $self->{'_no_expand_entities'};
  
      # rebless to our class
      bless $self, $class;
  
      $self->{'_element_count'} = 1;
  
      # undocumented, informal, and maybe not exactly correct
  
      $self->{'_head'} = $self->insert_element( 'head', 1 );
      $self->{'_pos'}  = undef;                                # pull it back up
      $self->{'_body'} = $self->insert_element( 'body', 1 );
      $self->{'_pos'} = undef;    # pull it back up again
  
      return $self;
  }
  
  #==========================================================================
  
  sub _elem                       # universal accessor...
  {
      my ( $self, $elem, $val ) = @_;
      my $old = $self->{$elem};
      $self->{$elem} = $val if defined $val;
      return $old;
  }
  
  # accessors....
  sub implicit_tags       { shift->_elem( '_implicit_tags',       @_ ); }
  sub implicit_body_p_tag { shift->_elem( '_implicit_body_p_tag', @_ ); }
  sub p_strict            { shift->_elem( '_p_strict',            @_ ); }
  sub no_space_compacting { shift->_elem( '_no_space_compacting', @_ ); }
  sub ignore_unknown      { shift->_elem( '_ignore_unknown',      @_ ); }
  sub ignore_text         { shift->_elem( '_ignore_text',         @_ ); }
  sub ignore_ignorable_whitespace { shift->_elem( '_tighten',            @_ ); }
  sub store_comments              { shift->_elem( '_store_comments',     @_ ); }
  sub store_declarations          { shift->_elem( '_store_declarations', @_ ); }
  sub store_pis                   { shift->_elem( '_store_pis',          @_ ); }
  sub warn                        { shift->_elem( '_warn',               @_ ); }
  
  sub no_expand_entities {
      shift->_elem( '_no_expand_entities', @_ );
      $HTML::Element::encoded_content = @_;
  }
  
  #==========================================================================
  
  sub warning {
      my $self = shift;
      CORE::warn("HTML::Parse: $_[0]\n") if $self->{'_warn'};
  
      # should maybe say HTML::TreeBuilder instead
  }
  
  #==========================================================================
  
  {
  
      # To avoid having to rebuild these lists constantly...
      my $_Closed_by_structurals = [qw(p h1 h2 h3 h4 h5 h6 pre textarea)];
      my $indent;
  
      sub start {
          return if $_[0]{'_stunted'};
  
          # Accept a signal from HTML::Parser for start-tags.
          my ( $self, $tag, $attr ) = @_;
  
          # Parser passes more, actually:
          #   $self->start($tag, $attr, $attrseq, $origtext)
          # But we can merrily ignore $attrseq and $origtext.
  
          if ( $tag eq 'x-html' ) {
              print "Ignoring open-x-html tag.\n" if DEBUG;
  
              # inserted by some lame code-generators.
              return;    # bypass tweaking.
          }
  
          $tag =~ s{/$}{}s;    # So <b/> turns into <b>.  Silently forgive.
  
          unless ( $tag =~ m/^[-_a-zA-Z0-9:%]+$/s ) {
              DEBUG and print "Start-tag name $tag is no good.  Skipping.\n";
              return;
  
              # This avoids having Element's new() throw an exception.
          }
  
          my $ptag = ( my $pos = $self->{'_pos'} || $self )->{'_tag'};
          my $already_inserted;
  
          #my($indent);
          if (DEBUG) {
  
         # optimization -- don't figure out indenting unless we're in debug mode
              my @lineage = $pos->lineage;
              $indent = '  ' x ( 1 + @lineage );
              print $indent, "Proposing a new \U$tag\E under ",
                  join( '/', map $_->{'_tag'}, reverse( $pos, @lineage ) )
                  || 'Root',
                  ".\n";
  
              #} else {
              #  $indent = ' ';
          }
  
          #print $indent, "POS: $pos ($ptag)\n" if DEBUG > 2;
          # $attr = {%$attr};
  
          foreach my $k ( keys %$attr ) {
  
              # Make sure some stooge doesn't have "<span _content='pie'>".
              # That happens every few million Web pages.
              $attr->{ ' ' . $k } = delete $attr->{$k}
                  if length $k and substr( $k, 0, 1 ) eq '_';
  
              # Looks bad, but is fine for round-tripping.
          }
  
          my $e = $self->element_class->new( $tag, %$attr );
  
          # Make a new element object.
          # (Only rarely do we end up just throwing it away later in this call.)
  
        # Some prep -- custom messiness for those damned tables, and strict P's.
          if ( $self->{'_implicit_tags'} ) {    # wallawallawalla!
  
              unless ( $HTML::TreeBuilder::isTableElement{$tag} ) {
                  if ( $ptag eq 'table' ) {
                      print $indent,
                          " * Phrasal \U$tag\E right under TABLE makes implicit TR and TD\n"
                          if DEBUG > 1;
                      $self->insert_element( 'tr', 1 );
                      $pos = $self->insert_element( 'td', 1 )
                          ;                     # yes, needs updating
                  }
                  elsif ( $ptag eq 'tr' ) {
                      print $indent,
                          " * Phrasal \U$tag\E right under TR makes an implicit TD\n"
                          if DEBUG > 1;
                      $pos = $self->insert_element( 'td', 1 )
                          ;                     # yes, needs updating
                  }
                  $ptag = $pos->{'_tag'};       # yes, needs updating
              }
  
              # end of table-implication block.
  
              # Now maybe do a little dance to enforce P-strictness.
              # This seems like it should be integrated with the big
              # "ALL HOPE..." block, further below, but that doesn't
              # seem feasable.
              if (    $self->{'_p_strict'}
                  and $HTML::TreeBuilder::isKnown{$tag}
                  and not $HTML::Tagset::is_Possible_Strict_P_Content{$tag} )
              {
                  my $here     = $pos;
                  my $here_tag = $ptag;
                  while (1) {
                      if ( $here_tag eq 'p' ) {
                          print $indent, " * Inserting $tag closes strict P.\n"
                              if DEBUG > 1;
                          $self->end( \q{p} );
  
                      # NB: same as \'q', but less confusing to emacs cperl-mode
                          last;
                      }
  
                      #print("Lasting from $here_tag\n"),
                      last
                          if $HTML::TreeBuilder::isKnown{$here_tag}
                              and
                              not $HTML::Tagset::is_Possible_Strict_P_Content{
                                  $here_tag};
  
                 # Don't keep looking up the tree if we see something that can't
                 #  be strict-P content.
  
                      $here_tag
                          = ( $here = $here->{'_parent'} || last )->{'_tag'};
                  }    # end while
                  $ptag = ( $pos = $self->{'_pos'} || $self )
                      ->{'_tag'};    # better update!
              }
  
              # end of strict-p block.
          }
  
         # And now, get busy...
         #----------------------------------------------------------------------
          if ( !$self->{'_implicit_tags'} ) {    # bimskalabim
                                                 # do nothing
              print $indent, " * _implicit_tags is off.  doing nothing\n"
                  if DEBUG > 1;
  
         #----------------------------------------------------------------------
          }
          elsif ( $HTML::TreeBuilder::isHeadOrBodyElement{$tag} ) {
              if ( $pos->is_inside('body') ) {    # all is well
                  print $indent,
                      " * ambilocal element \U$tag\E is fine under BODY.\n"
                      if DEBUG > 1;
              }
              elsif ( $pos->is_inside('head') ) {
                  print $indent,
                      " * ambilocal element \U$tag\E is fine under HEAD.\n"
                      if DEBUG > 1;
              }
              else {
  
                  # In neither head nor body!  mmmmm... put under head?
  
                  if ( $ptag eq 'html' ) {    # expected case
                       # TODO?? : would there ever be a case where _head would be
                       #  absent from a tree that would ever be accessed at this
                       #  point?
                      die "Where'd my head go?" unless ref $self->{'_head'};
                      if ( $self->{'_head'}{'_implicit'} ) {
                          print $indent,
                              " * ambilocal element \U$tag\E makes an implicit HEAD.\n"
                              if DEBUG > 1;
  
                          # or rather, points us at it.
                          $self->{'_pos'}
                              = $self->{'_head'};    # to insert under...
                      }
                      else {
                          $self->warning(
                              "Ambilocal element <$tag> not under HEAD or BODY!?"
                          );
  
                          # Put it under HEAD by default, I guess
                          $self->{'_pos'}
                              = $self->{'_head'};    # to insert under...
                      }
  
                  }
                  else {
  
               # Neither under head nor body, nor right under html... pass thru?
                      $self->warning(
                          "Ambilocal element <$tag> neither under head nor body, nor right under html!?"
                      );
                  }
              }
  
         #----------------------------------------------------------------------
          }
          elsif ( $HTML::TreeBuilder::isBodyElement{$tag} ) {
  
              # Ensure that we are within <body>
              if ( $ptag eq 'body' ) {
  
                  # We're good.
              }
              elsif (
                  $HTML::TreeBuilder::isBodyElement{$ptag}    # glarg
                  and not $HTML::TreeBuilder::isHeadOrBodyElement{$ptag}
                  )
              {
  
                # Special case: Save ourselves a call to is_inside further down.
                # If our $ptag is an isBodyElement element (but not an
                # isHeadOrBodyElement element), then we must be under body!
                  print $indent, " * Inferring that $ptag is under BODY.\n",
                      if DEBUG > 3;
  
                  # I think this and the test for 'body' trap everything
                  # bodyworthy, except the case where the parent element is
                  # under an unknown element that's a descendant of body.
              }
              elsif ( $pos->is_inside('head') ) {
                  print $indent,
                      " * body-element \U$tag\E minimizes HEAD, makes implicit BODY.\n"
                      if DEBUG > 1;
                  $ptag = (
                      $pos = $self->{'_pos'}
                          = $self->{'_body'}    # yes, needs updating
                          || die "Where'd my body go?"
                  )->{'_tag'};                  # yes, needs updating
              }
              elsif ( !$pos->is_inside('body') ) {
                  print $indent,
                      " * body-element \U$tag\E makes implicit BODY.\n"
                      if DEBUG > 1;
                  $ptag = (
                      $pos = $self->{'_pos'}
                          = $self->{'_body'}    # yes, needs updating
                          || die "Where'd my body go?"
                  )->{'_tag'};                  # yes, needs updating
              }
  
              # else we ARE under body, so okay.
  
              # Handle implicit endings and insert based on <tag> and position
              # ... ALL HOPE ABANDON ALL YE WHO ENTER HERE ...
              if (   $tag eq 'p'
                  or $tag eq 'h1'
                  or $tag eq 'h2'
                  or $tag eq 'h3'
                  or $tag eq 'h4'
                  or $tag eq 'h5'
                  or $tag eq 'h6'
                  or $tag eq 'form'
  
                  # Hm, should <form> really be here?!
                  )
              {
  
                  # Can't have <p>, <h#> or <form> inside these
                  $self->end(
                      $_Closed_by_structurals,
                      @HTML::TreeBuilder::p_closure_barriers
  
                          # used to be just li!
                  );
  
              }
              elsif ( $tag eq 'ol' or $tag eq 'ul' or $tag eq 'dl' ) {
  
                  # Can't have lists inside <h#> -- in the unlikely
                  #  event anyone tries to put them there!
                  if (   $ptag eq 'h1'
                      or $ptag eq 'h2'
                      or $ptag eq 'h3'
                      or $ptag eq 'h4'
                      or $ptag eq 'h5'
                      or $ptag eq 'h6' )
                  {
                      $self->end( \$ptag );
                  }
  
                  # TODO: Maybe keep closing up the tree until
                  #  the ptag isn't any of the above?
                  # But anyone that says <h1><h2><ul>...
                  #  deserves what they get anyway.
  
              }
              elsif ( $tag eq 'li' ) {    # list item
                      # Get under a list tag, one way or another
                  unless (
                      exists $HTML::TreeBuilder::isList{$ptag}
                      or $self->end( \q{*}, keys %HTML::TreeBuilder::isList ) #'
                      )
                  {
                      print $indent,
                          " * inserting implicit UL for lack of containing ",
                          join( '|', keys %HTML::TreeBuilder::isList ), ".\n"
                          if DEBUG > 1;
                      $self->insert_element( 'ul', 1 );
                  }
  
              }
              elsif ( $tag eq 'dt' or $tag eq 'dd' ) {
  
                  # Get under a DL, one way or another
                  unless ( $ptag eq 'dl' or $self->end( \q{*}, 'dl' ) ) {    #'
                      print $indent,
                          " * inserting implicit DL for lack of containing DL.\n"
                          if DEBUG > 1;
                      $self->insert_element( 'dl', 1 );
                  }
  
              }
              elsif ( $HTML::TreeBuilder::isFormElement{$tag} ) {
                  if ($self->{
                          '_ignore_formies_outside_form'}  # TODO: document this
                      and not $pos->is_inside('form')
                      )
                  {
                      print $indent,
                          " * ignoring \U$tag\E because not in a FORM.\n"
                          if DEBUG > 1;
                      return;                              # bypass tweaking.
                  }
                  if ( $tag eq 'option' ) {
  
                      # return unless $ptag eq 'select';
                      $self->end( \q{option} );
                      $ptag = ( $self->{'_pos'} || $self )->{'_tag'};
                      unless ( $ptag eq 'select' or $ptag eq 'optgroup' ) {
                          print $indent,
                              " * \U$tag\E makes an implicit SELECT.\n"
                              if DEBUG > 1;
                          $pos = $self->insert_element( 'select', 1 );
  
                      # but not a very useful select -- has no 'name' attribute!
                      # is $pos's value used after this?
                      }
                  }
              }
              elsif ( $HTML::TreeBuilder::isTableElement{$tag} ) {
                  if ( !$pos->is_inside('table') ) {
                      print $indent, " * \U$tag\E makes an implicit TABLE\n"
                          if DEBUG > 1;
                      $self->insert_element( 'table', 1 );
                  }
  
                  if ( $tag eq 'td' or $tag eq 'th' ) {
  
                      # Get under a tr one way or another
                      unless (
                          $ptag eq 'tr'    # either under a tr
                          or $self->end( \q{*}, 'tr',
                              'table' )    #or we can get under one
                          )
                      {
                          print $indent,
                              " * \U$tag\E under \U$ptag\E makes an implicit TR\n"
                              if DEBUG > 1;
                          $self->insert_element( 'tr', 1 );
  
                          # presumably pos's value isn't used after this.
                      }
                  }
                  else {
                      $self->end( \$tag, 'table' );    #'
                  }
  
                  # Hmm, I guess this is right.  To work it out:
                  #   tr closes any open tr (limited at a table)
                  #   thead closes any open thead (limited at a table)
                  #   tbody closes any open tbody (limited at a table)
                  #   tfoot closes any open tfoot (limited at a table)
                  #   colgroup closes any open colgroup (limited at a table)
                  #   col can try, but will always fail, at the enclosing table,
                  #     as col is empty, and therefore never open!
                  # But!
                  #   td closes any open td OR th (limited at a table)
                  #   th closes any open th OR td (limited at a table)
                  #   ...implementable as "close to a tr, or make a tr"
  
              }
              elsif ( $HTML::TreeBuilder::isPhraseMarkup{$tag} ) {
                  if ( $ptag eq 'body' and $self->{'_implicit_body_p_tag'} ) {
                      print
                          " * Phrasal \U$tag\E right under BODY makes an implicit P\n"
                          if DEBUG > 1;
                      $pos = $self->insert_element( 'p', 1 );
  
                      # is $pos's value used after this?
                  }
              }
  
              # End of implicit endings logic
  
         # End of "elsif ($HTML::TreeBuilder::isBodyElement{$tag}"
         #----------------------------------------------------------------------
  
          }
          elsif ( $HTML::TreeBuilder::isHeadElement{$tag} ) {
              if ( $pos->is_inside('body') ) {
                  print $indent, " * head element \U$tag\E found inside BODY!\n"
                      if DEBUG;
                  $self->warning("Header element <$tag> in body");    # [sic]
              }
              elsif ( !$pos->is_inside('head') ) {
                  print $indent,
                      " * head element \U$tag\E makes an implicit HEAD.\n"
                      if DEBUG > 1;
              }
              else {
                  print $indent,
                      " * head element \U$tag\E goes inside existing HEAD.\n"
                      if DEBUG > 1;
              }
              $self->{'_pos'} = $self->{'_head'} || die "Where'd my head go?";
  
         #----------------------------------------------------------------------
          }
          elsif ( $tag eq 'html' ) {
              if ( delete $self->{'_implicit'} ) {    # first time here
                  print $indent, " * good! found the real HTML element!\n"
                      if DEBUG > 1;
              }
              else {
                  print $indent, " * Found a second HTML element\n"
                      if DEBUG;
                  $self->warning("Found a nested <html> element");
              }
  
              # in either case, migrate attributes to the real element
              for ( keys %$attr ) {
                  $self->attr( $_, $attr->{$_} );
              }
              $self->{'_pos'} = undef;
              return $self;    # bypass tweaking.
  
         #----------------------------------------------------------------------
          }
          elsif ( $tag eq 'head' ) {
              my $head = $self->{'_head'} || die "Where'd my head go?";
              if ( delete $head->{'_implicit'} ) {    # first time here
                  print $indent, " * good! found the real HEAD element!\n"
                      if DEBUG > 1;
              }
              else {                                  # been here before
                  print $indent, " * Found a second HEAD element\n"
                      if DEBUG;
                  $self->warning("Found a second <head> element");
              }
  
              # in either case, migrate attributes to the real element
              for ( keys %$attr ) {
                  $head->attr( $_, $attr->{$_} );
              }
              return $self->{'_pos'} = $head;         # bypass tweaking.
  
         #----------------------------------------------------------------------
          }
          elsif ( $tag eq 'body' ) {
              my $body = $self->{'_body'} || die "Where'd my body go?";
              if ( delete $body->{'_implicit'} ) {    # first time here
                  print $indent, " * good! found the real BODY element!\n"
                      if DEBUG > 1;
              }
              else {                                  # been here before
                  print $indent, " * Found a second BODY element\n"
                      if DEBUG;
                  $self->warning("Found a second <body> element");
              }
  
              # in either case, migrate attributes to the real element
              for ( keys %$attr ) {
                  $body->attr( $_, $attr->{$_} );
              }
              return $self->{'_pos'} = $body;         # bypass tweaking.
  
         #----------------------------------------------------------------------
          }
          elsif ( $tag eq 'frameset' ) {
              if (!( $self->{'_frameset_seen'}++ )    # first frameset seen
                  and !$self->{'_noframes_seen'}
  
                  # otherwise it'll be under the noframes already
                  and !$self->is_inside('body')
                  )
              {
  
             # The following is a bit of a hack.  We don't use the normal
             #  insert_element because 1) we don't want it as _pos, but instead
             #  right under $self, and 2), more importantly, that we don't want
             #  this inserted at the /end/ of $self's content_list, but instead
             #  in the middle of it, specifically right before the body element.
             #
                  my $c    = $self->{'_content'} || die "Contentless root?";
                  my $body = $self->{'_body'}    || die "Where'd my BODY go?";
                  for ( my $i = 0; $i < @$c; ++$i ) {
                      if ( $c->[$i] eq $body ) {
                          splice( @$c, $i, 0, $self->{'_pos'} = $pos = $e );
                          HTML::Element::_weaken($e->{'_parent'} = $self);
                          $already_inserted = 1;
                          print $indent,
                              " * inserting 'frameset' right before BODY.\n"
                              if DEBUG > 1;
                          last;
                      }
                  }
                  die "BODY not found in children of root?"
                      unless $already_inserted;
              }
  
          }
          elsif ( $tag eq 'frame' ) {
  
              # Okay, fine, pass thru.
              # Should probably enforce that these should be under a frameset.
              # But hey.  Ditto for enforcing that 'noframes' should be under
              # a 'frameset', as the DTDs say.
  
          }
          elsif ( $tag eq 'noframes' ) {
  
             # This basically assumes there'll be exactly one 'noframes' element
             #  per document.  At least, only the first one gets to have the
             #  body under it.  And if there are no noframes elements, then
             #  the body pretty much stays where it is.  Is that ever a problem?
              if ( $self->{'_noframes_seen'}++ ) {
                  print $indent, " * ANOTHER noframes element?\n" if DEBUG;
              }
              else {
                  if ( $pos->is_inside('body') ) {
                      print $indent, " * 'noframes' inside 'body'.  Odd!\n"
                          if DEBUG;
  
                 # In that odd case, we /can't/ make body a child of 'noframes',
                 # because it's an ancestor of the 'noframes'!
                  }
                  else {
                      $e->push_content( $self->{'_body'}
                              || die "Where'd my body go?" );
                      print $indent, " * Moving body to be under noframes.\n"
                          if DEBUG;
                  }
              }
  
         #----------------------------------------------------------------------
          }
          else {
  
              # unknown tag
              if ( $self->{'_ignore_unknown'} ) {
                  print $indent, " * Ignoring unknown tag \U$tag\E\n" if DEBUG;
                  $self->warning("Skipping unknown tag $tag");
                  return;
              }
              else {
                  print $indent, " * Accepting unknown tag \U$tag\E\n"
                      if DEBUG;
              }
          }
  
         #----------------------------------------------------------------------
         # End of mumbo-jumbo
  
          print $indent, "(Attaching ", $e->{'_tag'}, " under ",
              ( $self->{'_pos'} || $self )->{'_tag'}, ")\n"
  
              # because if _pos isn't defined, it goes under self
              if DEBUG;
  
          # The following if-clause is to delete /some/ ignorable whitespace
          #  nodes, as we're making the tree.
          # This'd be a node we'd catch later anyway, but we might as well
          #  nip it in the bud now.
          # This doesn't catch /all/ deletable WS-nodes, so we do have to call
          #  the tightener later to catch the rest.
  
          if ( $self->{'_tighten'} and !$self->{'_ignore_text'} )
          {    # if tightenable
              my ( $sibs, $par );
              if (( $sibs = ( $par = $self->{'_pos'} || $self )->{'_content'} )
                  and @$sibs            # parent already has content
                  and !
                  ref( $sibs->[-1] )    # and the last one there is a text node
                  and $sibs->[-1] !~ m<[^\n\r\f\t ]>s  # and it's all whitespace
  
                  and (    # one of these has to be eligible...
                      $HTML::TreeBuilder::canTighten{$tag}
                      or (( @$sibs == 1 )
                          ?    # WS is leftmost -- so parent matters
                          $HTML::TreeBuilder::canTighten{ $par->{'_tag'} }
                          :    # WS is after another node -- it matters
                          (   ref $sibs->[-2]
                                  and
                                  $HTML::TreeBuilder::canTighten{ $sibs->[-2]
                                      {'_tag'} }
                          )
                      )
                  )
  
                  and !$par->is_inside( 'pre', 'xmp', 'textarea', 'plaintext' )
  
                  # we're clear
                  )
              {
                  pop @$sibs;
                  print $indent, "Popping a preceding all-WS node\n" if DEBUG;
              }
          }
  
          $self->insert_element($e) unless $already_inserted;
  
          if (DEBUG) {
              if ( $self->{'_pos'} ) {
                  print $indent, "(Current lineage of pos:  \U$tag\E under ",
                      join(
                      '/',
                      reverse(
  
                          # $self->{'_pos'}{'_tag'},  # don't list myself!
                          $self->{'_pos'}->lineage_tag_names
                      )
                      ),
                      ".)\n";
              }
              else {
                  print $indent, "(Pos points nowhere!?)\n";
              }
          }
  
          unless ( ( $self->{'_pos'} || '' ) eq $e ) {
  
              # if it's an empty element -- i.e., if it didn't change the _pos
              &{         $self->{"_tweak_$tag"}
                      || $self->{'_tweak_*'}
                      || return $e }( map $_, $e, $tag, $self )
                  ;    # make a list so the user can't clobber
          }
  
          return $e;
      }
  }
  
  #==========================================================================
  
  {
      my $indent;
  
      sub end {
          return if $_[0]{'_stunted'};
  
         # Either: Acccept an end-tag signal from HTML::Parser
         # Or: Method for closing currently open elements in some fairly complex
         #  way, as used by other methods in this class.
          my ( $self, $tag, @stop ) = @_;
          if ( $tag eq 'x-html' ) {
              print "Ignoring close-x-html tag.\n" if DEBUG;
  
              # inserted by some lame code-generators.
              return;
          }
  
          unless ( ref($tag) or $tag =~ m/^[-_a-zA-Z0-9:%]+$/s ) {
              DEBUG and print "End-tag name $tag is no good.  Skipping.\n";
              return;
  
              # This avoids having Element's new() throw an exception.
          }
  
         # This method accepts two calling formats:
         #  1) from Parser:  $self->end('tag_name', 'origtext')
         #        in which case we shouldn't mistake origtext as a blocker tag
         #  2) from myself:  $self->end(\q{tagname1}, 'blk1', ... )
         #     from myself:  $self->end(['tagname1', 'tagname2'], 'blk1',  ... )
  
          # End the specified tag, but don't move above any of the blocker tags.
          # The tag can also be a reference to an array.  Terminate the first
          # tag found.
  
          my $ptag = ( my $p = $self->{'_pos'} || $self )->{'_tag'};
  
          # $p and $ptag are sort-of stratch
  
          if ( ref($tag) ) {
  
              # First param is a ref of one sort or another --
              #  THE CALL IS COMING FROM INSIDE THE HOUSE!
              $tag = $$tag if ref($tag) eq 'SCALAR';
  
              # otherwise it's an arrayref.
          }
          else {
  
              # the call came from Parser -- just ignore origtext
              # except in a table ignore unmatched table tags RT #59980
              @stop = $tag =~ /^t[hdr]\z/ ? 'table' : ();
          }
  
          #my($indent);
          if (DEBUG) {
  
             # optimization -- don't figure out depth unless we're in debug mode
              my @lineage_tags = $p->lineage_tag_names;
              $indent = '  ' x ( 1 + @lineage_tags );
  
              # now announce ourselves
              print $indent, "Ending ",
                  ref($tag) ? ( '[', join( ' ', @$tag ), ']' ) : "\U$tag\E",
                  scalar(@stop)
                  ? ( " no higher than [", join( ' ', @stop ), "]" )
                  : (), ".\n";
  
              print $indent, " (Current lineage: ", join( '/', @lineage_tags ),
                  ".)\n"
                  if DEBUG > 1;
  
              if ( DEBUG > 3 ) {
  
                  #my(
                  # $package, $filename, $line, $subroutine,
                  # $hasargs, $wantarray, $evaltext, $is_require) = caller;
                  print $indent,
                      " (Called from ", ( caller(1) )[3], ' line ',
                      ( caller(1) )[2],
                      ")\n";
              }
  
              #} else {
              #  $indent = ' ';
          }
  
          # End of if DEBUG
  
          # Now actually do it
          my @to_close;
          if ( $tag eq '*' ) {
  
          # Special -- close everything up to (but not including) the first
          #  limiting tag, or return if none found.  Somewhat of a special case.
          PARENT:
              while ( defined $p ) {
                  $ptag = $p->{'_tag'};
                  print $indent, " (Looking at $ptag.)\n" if DEBUG > 2;
                  for (@stop) {
                      if ( $ptag eq $_ ) {
                          print $indent,
                              " (Hit a $_; closing everything up to here.)\n"
                              if DEBUG > 2;
                          last PARENT;
                      }
                  }
                  push @to_close, $p;
                  $p = $p->{'_parent'};    # no match so far? keep moving up
                  print $indent,
                      " (Moving on up to ", $p ? $p->{'_tag'} : 'nil', ")\n"
                      if DEBUG > 1;
              }
              unless ( defined $p ) { # We never found what we were looking for.
                  print $indent, " (We never found a limit.)\n" if DEBUG > 1;
                  return;
              }
  
              #print
              #   $indent,
              #   " (To close: ", join('/', map $_->tag, @to_close), ".)\n"
              #  if DEBUG > 4;
  
              # Otherwise update pos and fall thru.
              $self->{'_pos'} = $p;
          }
          elsif ( ref $tag ) {
  
             # Close the first of any of the matching tags, giving up if you hit
             #  any of the stop-tags.
          PARENT:
              while ( defined $p ) {
                  $ptag = $p->{'_tag'};
                  print $indent, " (Looking at $ptag.)\n" if DEBUG > 2;
                  for (@$tag) {
                      if ( $ptag eq $_ ) {
                          print $indent, " (Closing $_.)\n" if DEBUG > 2;
                          last PARENT;
                      }
                  }
                  for (@stop) {
                      if ( $ptag eq $_ ) {
                          print $indent,
                              " (Hit a limiting $_ -- bailing out.)\n"
                              if DEBUG > 1;
                          return;    # so it was all for naught
                      }
                  }
                  push @to_close, $p;
                  $p = $p->{'_parent'};
              }
              return unless defined $p;    # We went off the top of the tree.
                 # Otherwise specified element was found; set pos to its parent.
              push @to_close, $p;
              $self->{'_pos'} = $p->{'_parent'};
          }
          else {
  
              # Close the first of the specified tag, giving up if you hit
              #  any of the stop-tags.
              while ( defined $p ) {
                  $ptag = $p->{'_tag'};
                  print $indent, " (Looking at $ptag.)\n" if DEBUG > 2;
                  if ( $ptag eq $tag ) {
                      print $indent, " (Closing $tag.)\n" if DEBUG > 2;
                      last;
                  }
                  for (@stop) {
                      if ( $ptag eq $_ ) {
                          print $indent,
                              " (Hit a limiting $_ -- bailing out.)\n"
                              if DEBUG > 1;
                          return;    # so it was all for naught
                      }
                  }
                  push @to_close, $p;
                  $p = $p->{'_parent'};
              }
              return unless defined $p;    # We went off the top of the tree.
                 # Otherwise specified element was found; set pos to its parent.
              push @to_close, $p;
              $self->{'_pos'} = $p->{'_parent'};
          }
  
          $self->{'_pos'} = undef if $self eq ( $self->{'_pos'} || '' );
          print $indent, "(Pos now points to ",
              $self->{'_pos'} ? $self->{'_pos'}{'_tag'} : '???', ".)\n"
              if DEBUG > 1;
  
          ### EXPENSIVE, because has to check that it's not under a pre
          ### or a CDATA-parent.  That's one more method call per end()!
          ### Might as well just do this at the end of the tree-parse, I guess,
          ### at which point we'd be parsing top-down, and just not traversing
          ### under pre's or CDATA-parents.
          ##
          ## Take this opportunity to nix any terminal whitespace nodes.
          ## TODO: consider whether this (plus the logic in start(), above)
          ## would ever leave any WS nodes in the tree.
          ## If not, then there's no reason to have eof() call
          ## delete_ignorable_whitespace on the tree, is there?
          ##
      #if(@to_close and $self->{'_tighten'} and !$self->{'_ignore_text'} and
      #  ! $to_close[-1]->is_inside('pre', keys %HTML::Tagset::isCDATA_Parent)
      #) {  # if tightenable
      #  my($children, $e_tag);
      #  foreach my $e (reverse @to_close) { # going top-down
      #    last if 'pre' eq ($e_tag = $e->{'_tag'}) or
      #     $HTML::Tagset::isCDATA_Parent{$e_tag};
      #
      #    if(
      #      $children = $e->{'_content'}
      #      and @$children      # has children
      #      and !ref($children->[-1])
      #      and $children->[-1] =~ m<^\s+$>s # last node is all-WS
      #      and
      #        (
      #         # has a tightable parent:
      #         $HTML::TreeBuilder::canTighten{ $e_tag }
      #         or
      #          ( # has a tightenable left sibling:
      #            @$children > 1 and
      #            ref($children->[-2])
      #            and $HTML::TreeBuilder::canTighten{ $children->[-2]{'_tag'} }
      #          )
      #        )
      #    ) {
      #      pop @$children;
      #      #print $indent, "Popping a terminal WS node from ", $e->{'_tag'},
      #      #  " (", $e->address, ") while exiting.\n" if DEBUG;
      #    }
      #  }
      #}
  
          foreach my $e (@to_close) {
  
              # Call the applicable callback, if any
              $ptag = $e->{'_tag'};
              &{         $self->{"_tweak_$ptag"}
                      || $self->{'_tweak_*'}
                      || next }( map $_, $e, $ptag, $self );
              print $indent, "Back from tweaking.\n" if DEBUG;
              last
                  if $self->{ '_stunted'
                      };    # in case one of the handlers called stunt
          }
          return @to_close;
      }
  }
  
  #==========================================================================
  {
      my ( $indent, $nugget );
  
      sub text {
          return if $_[0]{'_stunted'};
  
          # Accept a "here's a text token" signal from HTML::Parser.
          my ( $self, $text, $is_cdata ) = @_;
  
          # the >3.0 versions of Parser may pass a cdata node.
          # Thanks to Gisle Aas for pointing this out.
  
          return unless length $text;    # I guess that's always right
  
          my $ignore_text         = $self->{'_ignore_text'};
          my $no_space_compacting = $self->{'_no_space_compacting'};
          my $no_expand_entities  = $self->{'_no_expand_entities'};
          my $pos                 = $self->{'_pos'} || $self;
  
          HTML::Entities::decode($text)
              unless $ignore_text
                  || $is_cdata
                  || $HTML::Tagset::isCDATA_Parent{ $pos->{'_tag'} }
                  || $no_expand_entities;
  
          #my($indent, $nugget);
          if (DEBUG) {
  
             # optimization -- don't figure out depth unless we're in debug mode
              my @lineage_tags = $pos->lineage_tag_names;
              $indent = '  ' x ( 1 + @lineage_tags );
  
              $nugget
                  = ( length($text) <= 25 )
                  ? $text
                  : ( substr( $text, 0, 25 ) . '...' );
              $nugget =~ s<([\x00-\x1F])>
                   <'\\x'.(unpack("H2",$1))>eg;
              print $indent, "Proposing a new text node ($nugget) under ",
                  join( '/', reverse( $pos->{'_tag'}, @lineage_tags ) )
                  || 'Root',
                  ".\n";
  
              #} else {
              #  $indent = ' ';
          }
  
          my $ptag;
          if ($HTML::Tagset::isCDATA_Parent{ $ptag = $pos->{'_tag'} }
  
              #or $pos->is_inside('pre')
              or $pos->is_inside( 'pre', 'textarea' )
              )
          {
              return if $ignore_text;
              $pos->push_content($text);
          }
          else {
  
              # return unless $text =~ /\S/;  # This is sometimes wrong
  
              if ( !$self->{'_implicit_tags'} || $text !~ /[^\n\r\f\t ]/ ) {
  
                  # don't change anything
              }
              elsif ( $ptag eq 'head' or $ptag eq 'noframes' ) {
                  if ( $self->{'_implicit_body_p_tag'} ) {
                      print $indent,
                          " * Text node under \U$ptag\E closes \U$ptag\E, implicates BODY and P.\n"
                          if DEBUG > 1;
                      $self->end( \$ptag );
                      $pos = $self->{'_body'}
                          ? ( $self->{'_pos'}
                              = $self->{'_body'} )    # expected case
                          : $self->insert_element( 'body', 1 );
                      $pos = $self->insert_element( 'p', 1 );
                  }
                  else {
                      print $indent,
                          " * Text node under \U$ptag\E closes, implicates BODY.\n"
                          if DEBUG > 1;
                      $self->end( \$ptag );
                      $pos = $self->{'_body'}
                          ? ( $self->{'_pos'}
                              = $self->{'_body'} )    # expected case
                          : $self->insert_element( 'body', 1 );
                  }
              }
              elsif ( $ptag eq 'html' ) {
                  if ( $self->{'_implicit_body_p_tag'} ) {
                      print $indent,
                          " * Text node under HTML implicates BODY and P.\n"
                          if DEBUG > 1;
                      $pos = $self->{'_body'}
                          ? ( $self->{'_pos'}
                              = $self->{'_body'} )    # expected case
                          : $self->insert_element( 'body', 1 );
                      $pos = $self->insert_element( 'p', 1 );
                  }
                  else {
                      print $indent,
                          " * Text node under HTML implicates BODY.\n"
                          if DEBUG > 1;
                      $pos = $self->{'_body'}
                          ? ( $self->{'_pos'}
                              = $self->{'_body'} )    # expected case
                          : $self->insert_element( 'body', 1 );
  
                      #print "POS is $pos, ", $pos->{'_tag'}, "\n";
                  }
              }
              elsif ( $ptag eq 'body' ) {
                  if ( $self->{'_implicit_body_p_tag'} ) {
                      print $indent, " * Text node under BODY implicates P.\n"
                          if DEBUG > 1;
                      $pos = $self->insert_element( 'p', 1 );
                  }
              }
              elsif ( $ptag eq 'table' ) {
                  print $indent,
                      " * Text node under TABLE implicates TR and TD.\n"
                      if DEBUG > 1;
                  $self->insert_element( 'tr', 1 );
                  $pos = $self->insert_element( 'td', 1 );
  
                  # double whammy!
              }
              elsif ( $ptag eq 'tr' ) {
                  print $indent, " * Text node under TR implicates TD.\n"
                      if DEBUG > 1;
                  $pos = $self->insert_element( 'td', 1 );
              }
  
              # elsif (
              #       # $ptag eq 'li'   ||
              #       # $ptag eq 'dd'   ||
              #         $ptag eq 'form') {
              #    $pos = $self->insert_element('p', 1);
              #}
  
              # Whatever we've done above should have had the side
              # effect of updating $self->{'_pos'}
  
              #print "POS is now $pos, ", $pos->{'_tag'}, "\n";
  
              return if $ignore_text;
              $text =~ s/[\n\r\f\t ]+/ /g    # canonical space
                  unless $no_space_compacting;
  
              print $indent, " (Attaching text node ($nugget) under ",
  
             # was: $self->{'_pos'} ? $self->{'_pos'}{'_tag'} : $self->{'_tag'},
                  $pos->{'_tag'}, ").\n"
                  if DEBUG > 1;
  
              $pos->push_content($text);
          }
  
          &{ $self->{'_tweak_~text'} || return }( $text, $pos,
              $pos->{'_tag'} . '' );
  
          # Note that this is very exceptional -- it doesn't fall back to
          #  _tweak_*, and it gives its tweak different arguments.
          return;
      }
  }
  
  #==========================================================================
  
  # TODO: test whether comment(), declaration(), and process(), do the right
  #  thing as far as tightening and whatnot.
  # Also, currently, doctypes and comments that appear before head or body
  #  show up in the tree in the wrong place.  Something should be done about
  #  this.  Tricky.  Maybe this whole business of pre-making the body and
  #  whatnot is wrong.
  
  sub comment {
      return if $_[0]{'_stunted'};
  
      # Accept a "here's a comment" signal from HTML::Parser.
  
      my ( $self, $text ) = @_;
      my $pos = $self->{'_pos'} || $self;
      return
          unless $self->{'_store_comments'}
              || $HTML::Tagset::isCDATA_Parent{ $pos->{'_tag'} };
  
      if (DEBUG) {
          my @lineage_tags = $pos->lineage_tag_names;
          my $indent = '  ' x ( 1 + @lineage_tags );
  
          my $nugget
              = ( length($text) <= 25 )
              ? $text
              : ( substr( $text, 0, 25 ) . '...' );
          $nugget =~ s<([\x00-\x1F])>
                   <'\\x'.(unpack("H2",$1))>eg;
          print $indent, "Proposing a Comment ($nugget) under ",
              join( '/', reverse( $pos->{'_tag'}, @lineage_tags ) ) || 'Root',
              ".\n";
      }
  
      ( my $e = $self->element_class->new('~comment') )->{'text'} = $text;
      $pos->push_content($e);
      ++( $self->{'_element_count'} );
  
      &{         $self->{'_tweak_~comment'}
              || $self->{'_tweak_*'}
              || return $e }( map $_, $e, '~comment', $self );
  
      return $e;
  }
  
  sub declaration {
      return if $_[0]{'_stunted'};
  
      # Accept a "here's a markup declaration" signal from HTML::Parser.
  
      my ( $self, $text ) = @_;
      my $pos = $self->{'_pos'} || $self;
  
      if (DEBUG) {
          my @lineage_tags = $pos->lineage_tag_names;
          my $indent = '  ' x ( 1 + @lineage_tags );
  
          my $nugget
              = ( length($text) <= 25 )
              ? $text
              : ( substr( $text, 0, 25 ) . '...' );
          $nugget =~ s<([\x00-\x1F])>
                   <'\\x'.(unpack("H2",$1))>eg;
          print $indent, "Proposing a Declaration ($nugget) under ",
              join( '/', reverse( $pos->{'_tag'}, @lineage_tags ) ) || 'Root',
              ".\n";
      }
      ( my $e = $self->element_class->new('~declaration') )->{'text'} = $text;
  
      $self->{_decl} = $e;
      return $e;
  }
  
  #==========================================================================
  
  sub process {
      return if $_[0]{'_stunted'};
  
      # Accept a "here's a PI" signal from HTML::Parser.
  
      return unless $_[0]->{'_store_pis'};
      my ( $self, $text ) = @_;
      my $pos = $self->{'_pos'} || $self;
  
      if (DEBUG) {
          my @lineage_tags = $pos->lineage_tag_names;
          my $indent = '  ' x ( 1 + @lineage_tags );
  
          my $nugget
              = ( length($text) <= 25 )
              ? $text
              : ( substr( $text, 0, 25 ) . '...' );
          $nugget =~ s<([\x00-\x1F])>
                   <'\\x'.(unpack("H2",$1))>eg;
          print $indent, "Proposing a PI ($nugget) under ",
              join( '/', reverse( $pos->{'_tag'}, @lineage_tags ) ) || 'Root',
              ".\n";
      }
      ( my $e = $self->element_class->new('~pi') )->{'text'} = $text;
      $pos->push_content($e);
      ++( $self->{'_element_count'} );
  
      &{ $self->{'_tweak_~pi'} || $self->{'_tweak_*'} || return $e }( map $_,
          $e, '~pi', $self );
  
      return $e;
  }
  
  #==========================================================================
  
  #When you call $tree->parse_file($filename), and the
  #tree's ignore_ignorable_whitespace attribute is on (as it is
  #by default), HTML::TreeBuilder's logic will manage to avoid
  #creating some, but not all, nodes that represent ignorable
  #whitespace.  However, at the end of its parse, it traverses the
  #tree and deletes any that it missed.  (It does this with an
  #around-method around HTML::Parser's eof method.)
  #
  #However, with $tree->parse($content), the cleanup-traversal step
  #doesn't happen automatically -- so when you're done parsing all
  #content for a document (regardless of whether $content is the only
  #bit, or whether it's just another chunk of content you're parsing into
  #the tree), call $tree->eof() to signal that you're at the end of the
  #text you're inputting to the tree.  Besides properly cleaning any bits
  #of ignorable whitespace from the tree, this will also ensure that
  #HTML::Parser's internal buffer is flushed.
  
  sub eof {
  
      # Accept an "end-of-file" signal from HTML::Parser, or thrown by the user.
  
      return if $_[0]->{'_done'};    # we've already been here
  
      return $_[0]->SUPER::eof() if $_[0]->{'_stunted'};
  
      my $x = $_[0];
      print "EOF received.\n" if DEBUG;
      my (@rv);
      if (wantarray) {
  
          # I don't think this makes any difference for this particular
          #  method, but let's be scrupulous, for once.
          @rv = $x->SUPER::eof();
      }
      else {
          $rv[0] = $x->SUPER::eof();
      }
  
      $x->end('html') unless $x eq ( $x->{'_pos'} || $x );
  
      # That SHOULD close everything, and will run the appropriate tweaks.
      # We /could/ be running under some insane mode such that there's more
      #  than one HTML element, but really, that's just insane to do anyhow.
  
      unless ( $x->{'_implicit_tags'} ) {
  
          # delete those silly implicit head and body in case we put
          # them there in implicit tags mode
          foreach my $node ( $x->{'_head'}, $x->{'_body'} ) {
              $node->replace_with_content
                  if defined $node
                      and ref $node
                      and $node->{'_implicit'}
                      and $node->{'_parent'};
  
              # I think they should be empty anyhow, since the only
              # logic that'd insert under them can apply only, I think,
              # in the case where _implicit_tags is on
          }
  
          # this may still leave an implicit 'html' at the top, but there's
          # nothing we can do about that, is there?
      }
  
      $x->delete_ignorable_whitespace()
  
          # this's why we trap this -- an after-method
          if $x->{'_tighten'} and !$x->{'_ignore_text'};
      $x->{'_done'} = 1;
  
      return @rv if wantarray;
      return $rv[0];
  }
  
  #==========================================================================
  
  # TODO: document
  
  sub stunt {
      my $self = $_[0];
      print "Stunting the tree.\n" if DEBUG;
      $self->{'_done'} = 1;
  
      if ( $HTML::Parser::VERSION < 3 ) {
  
          #This is a MEAN MEAN HACK.  And it works most of the time!
          $self->{'_buf'} = '';
          my $fh = *HTML::Parser::F{IO};
  
          # the local'd FH used by parse_file loop
          if ( defined $fh ) {
              print "Closing Parser's filehandle $fh\n" if DEBUG;
              close($fh);
          }
  
        # But if they called $tree->parse_file($filehandle)
        #  or $tree->parse_file(*IO), then there will be no *HTML::Parser::F{IO}
        #  to close.  Ahwell.  Not a problem for most users these days.
  
      }
      else {
          $self->SUPER::eof();
  
          # Under 3+ versions, calling eof from inside a parse will abort the
          #  parse / parse_file
      }
  
      # In the off chance that the above didn't work, we'll throw
      #  this flag to make any future events be no-ops.
      $self->stunted(1);
      return;
  }
  
  # TODO: document
  sub stunted { shift->_elem( '_stunted', @_ ); }
  sub done    { shift->_elem( '_done',    @_ ); }
  
  #==========================================================================
  
  sub delete {
  
      # Override Element's delete method.
      # This does most, if not all, of what Element's delete does anyway.
      # Deletes content, including content in some special attributes.
      # But doesn't empty out the hash.
  
      $_[0]->{'_element_count'} = 1;    # never hurts to be scrupulously correct
  
      delete @{ $_[0] }{ '_body', '_head', '_pos' };
      for (
          @{ delete( $_[0]->{'_content'} ) || [] },    # all/any content
  
       #       delete @{$_[0]}{'_body', '_head', '_pos'}
       # ...and these, in case these elements don't appear in the
       #   content, which is possible.  If they did appear (as they
       #   usually do), then calling $_->delete on them again is harmless.
       #  I don't think that's such a hot idea now.  Thru creative reattachment,
       #  those could actually now point to elements in OTHER trees (which we do
       #  NOT want to delete!).
  ## Reasoned out:
    #  If these point to elements not in the content list of any element in this
    #   tree, but not in the content list of any element in any OTHER tree, then
    #   just deleting these will make their refcounts hit zero.
    #  If these point to elements in the content lists of elements in THIS tree,
    #   then we'll get to deleting them when we delete from the top.
    #  If these point to elements in the content lists of elements in SOME OTHER
    #   tree, then they're not to be deleted.
          )
      {
          $_->delete
              if defined $_ and ref $_    #  Make sure it's an object.
                  and $_ ne $_[0];    #  And avoid hitting myself, just in case!
      }
  
      $_[0]->detach if $_[0]->{'_parent'} and $_[0]->{'_parent'}{'_content'};
  
      # An 'html' element having a parent is quite unlikely.
  
      return;
  }
  
  sub tighten_up {                    # legacy
      shift->delete_ignorable_whitespace(@_);
  }
  
  sub elementify {
  
      # Rebless this object down into the normal element class.
      my $self     = $_[0];
      my $to_class = $self->element_class;
      delete @{$self}{
          grep {
              ;
              length $_ and substr( $_, 0, 1 ) eq '_'
  
                  # The private attributes that we'll retain:
                  and $_ ne '_tag'
                  and $_ ne '_parent'
                  and $_ ne '_content'
                  and $_ ne '_implicit'
                  and $_ ne '_pos'
                  and $_ ne '_element_class'
              } keys %$self
          };
      bless $self, $to_class;    # Returns the same object we were fed
  }
  
  sub element_class {
      return 'HTML::Element' if not ref $_[0];
      return $_[0]->{_element_class} || 'HTML::Element';
  }
  
  #--------------------------------------------------------------------------
  
  sub guts {
      my @out;
      my @stack       = ( $_[0] );
      my $destructive = $_[1];
      my $this;
      while (@stack) {
          $this = shift @stack;
          if ( !ref $this ) {
              push @out, $this;    # yes, it can include text nodes
          }
          elsif ( !$this->{'_implicit'} ) {
              push @out, $this;
              delete $this->{'_parent'} if $destructive;
          }
          else {
  
              # it's an implicit node.  Delete it and recurse
              delete $this->{'_parent'} if $destructive;
              unshift @stack,
                  @{
                  (   $destructive
                      ? delete( $this->{'_content'} )
                      : $this->{'_content'}
                      )
                      || []
                  };
          }
      }
  
      # Doesn't call a real $root->delete on the (when implicit) root,
      #  but I don't think it needs to.
  
      return @out if wantarray;    # one simple normal case.
      return unless @out;
      return $out[0] if @out == 1 and ref( $out[0] );
      my $x = HTML::Element->new( 'div', '_implicit' => 1 );
      $x->push_content(@out);
      return $x;
  }
  
  sub disembowel { $_[0]->guts(1) }
  
  #--------------------------------------------------------------------------
  1;
  
  __END__
  
  =pod
  
  =head1 NAME
  
  HTML::TreeBuilder - Parser that builds a HTML syntax tree
  
  =head1 VERSION
  
  This document describes version 5.03 of
  HTML::TreeBuilder, released September 22, 2012
  as part of L<HTML-Tree|HTML::Tree>.
  
  =head1 SYNOPSIS
  
    use HTML::TreeBuilder 5 -weak; # Ensure weak references in use
  
    foreach my $file_name (@ARGV) {
      my $tree = HTML::TreeBuilder->new; # empty tree
      $tree->parse_file($file_name);
      print "Hey, here's a dump of the parse tree of $file_name:\n";
      $tree->dump; # a method we inherit from HTML::Element
      print "And here it is, bizarrely rerendered as HTML:\n",
        $tree->as_HTML, "\n";
  
      # Now that we're done with it, we must destroy it.
      # $tree = $tree->delete; # Not required with weak references
    }
  
  =head1 DESCRIPTION
  
  (This class is part of the L<HTML::Tree|HTML::Tree> dist.)
  
  This class is for HTML syntax trees that get built out of HTML
  source.  The way to use it is to:
  
  1. start a new (empty) HTML::TreeBuilder object,
  
  2. then use one of the methods from HTML::Parser (presumably with
  C<< $tree->parse_file($filename) >> for files, or with
  C<< $tree->parse($document_content) >> and C<< $tree->eof >> if you've got
  the content in a string) to parse the HTML
  document into the tree C<$tree>.
  
  (You can combine steps 1 and 2 with the "new_from_file" or
  "new_from_content" methods.)
  
  2b. call C<< $root->elementify() >> if you want.
  
  3. do whatever you need to do with the syntax tree, presumably
  involving traversing it looking for some bit of information in it,
  
  4. previous versions of HTML::TreeBuilder required you to call
  C<< $tree->delete() >> to erase the contents of the tree from memory
  when you're done with the tree.  This is not normally required anymore.
  See L<HTML::Element/"Weak References"> for details.
  
  =head1 ATTRIBUTES
  
  Most of the following attributes native to HTML::TreeBuilder control how
  parsing takes place; they should be set I<before> you try parsing into
  the given object.  You can set the attributes by passing a TRUE or
  FALSE value as argument.  E.g., C<< $root->implicit_tags >> returns
  the current setting for the C<implicit_tags> option,
  C<< $root->implicit_tags(1) >> turns that option on,
  and C<< $root->implicit_tags(0) >> turns it off.
  
  =head2 implicit_tags
  
  Setting this attribute to true will instruct the parser to try to
  deduce implicit elements and implicit end tags.  If it is false you
  get a parse tree that just reflects the text as it stands, which is
  unlikely to be useful for anything but quick and dirty parsing.
  (In fact, I'd be curious to hear from anyone who finds it useful to
  have C<implicit_tags> set to false.)
  Default is true.
  
  Implicit elements have the L<HTML::Element/implicit> attribute set.
  
  =head2 implicit_body_p_tag
  
  This controls an aspect of implicit element behavior, if C<implicit_tags>
  is on:  If a text element (PCDATA) or a phrasal element (such as
  C<< <em> >>) is to be inserted under C<< <body> >>, two things
  can happen: if C<implicit_body_p_tag> is true, it's placed under a new,
  implicit C<< <p> >> tag.  (Past DTDs suggested this was the only
  correct behavior, and this is how past versions of this module
  behaved.)  But if C<implicit_body_p_tag> is false, nothing is implicated
  -- the PCDATA or phrasal element is simply placed under
  C<< <body> >>.  Default is false.
  
  =head2 no_expand_entities
  
  This attribute controls whether entities are decoded during the initial
  parse of the source. Enable this if you don't want entities decoded to
  their character value. e.g. '&amp;' is decoded to '&' by default, but
  will be unchanged if this is enabled.
  Default is false (entities will be decoded.)
  
  =head2 ignore_unknown
  
  This attribute controls whether unknown tags should be represented as
  elements in the parse tree, or whether they should be ignored.
  Default is true (to ignore unknown tags.)
  
  =head2 ignore_text
  
  Do not represent the text content of elements.  This saves space if
  all you want is to examine the structure of the document.  Default is
  false.
  
  =head2 ignore_ignorable_whitespace
  
  If set to true, TreeBuilder will try to avoid
  creating ignorable whitespace text nodes in the tree.  Default is
  true.  (In fact, I'd be interested in hearing if there's ever a case
  where you need this off, or where leaving it on leads to incorrect
  behavior.)
  
  =head2 no_space_compacting
  
  This determines whether TreeBuilder compacts all whitespace strings
  in the document (well, outside of PRE or TEXTAREA elements), or
  leaves them alone.  Normally (default, value of 0), each string of
  contiguous whitespace in the document is turned into a single space.
  But that's not done if C<no_space_compacting> is set to 1.
  
  Setting C<no_space_compacting> to 1 might be useful if you want
  to read in a tree just to make some minor changes to it before
  writing it back out.
  
  This method is experimental.  If you use it, be sure to report
  any problems you might have with it.
  
  =head2 p_strict
  
  If set to true (and it defaults to false), TreeBuilder will take a
  narrower than normal view of what can be under a C<< <p> >> element; if it sees
  a non-phrasal element about to be inserted under a C<< <p> >>, it will
  close that C<< <p> >>.  Otherwise it will close C<< <p> >> elements only for
  other C<< <p> >>'s, headings, and C<< <form> >> (although the latter may be
  removed in future versions).
  
  For example, when going thru this snippet of code,
  
    <p>stuff
    <ul>
  
  TreeBuilder will normally (with C<p_strict> false) put the C<< <ul> >> element
  under the C<< <p> >> element.  However, with C<p_strict> set to true, it will
  close the C<< <p> >> first.
  
  In theory, there should be strictness options like this for other/all
  elements besides just C<< <p> >>; but I treat this as a special case simply
  because of the fact that C<< <p> >> occurs so frequently and its end-tag is
  omitted so often; and also because application of strictness rules
  at parse-time across all elements often makes tiny errors in HTML
  coding produce drastically bad parse-trees, in my experience.
  
  If you find that you wish you had an option like this to enforce
  content-models on all elements, then I suggest that what you want is
  content-model checking as a stage after TreeBuilder has finished
  parsing.
  
  =head2 store_comments
  
  This determines whether TreeBuilder will normally store comments found
  while parsing content into C<$root>.  Currently, this is off by default.
  
  =head2 store_declarations
  
  This determines whether TreeBuilder will normally store markup
  declarations found while parsing content into C<$root>.  This is on
  by default.
  
  =head2 store_pis
  
  This determines whether TreeBuilder will normally store processing
  instructions found while parsing content into C<$root> -- assuming a
  recent version of HTML::Parser (old versions won't parse PIs
  correctly).  Currently, this is off (false) by default.
  
  It is somewhat of a known bug (to be fixed one of these days, if
  anyone needs it?) that PIs in the preamble (before the C<< <html> >>
  start-tag) end up actually I<under> the C<< <html> >> element.
  
  =head2 warn
  
  This determines whether syntax errors during parsing should generate
  warnings, emitted via Perl's C<warn> function.
  
  This is off (false) by default.
  
  =head1 METHODS
  
  Objects of this class inherit the methods of both HTML::Parser and
  HTML::Element.  The methods inherited from HTML::Parser are used for
  building the HTML tree, and the methods inherited from HTML::Element
  are what you use to scrutinize the tree.  Besides this
  (HTML::TreeBuilder) documentation, you must also carefully read the
  HTML::Element documentation, and also skim the HTML::Parser
  documentation -- probably only its parse and parse_file methods are of
  interest.
  
  =head2 new_from_file
  
    $root = HTML::TreeBuilder->new_from_file($filename_or_filehandle);
  
  This "shortcut" constructor merely combines constructing a new object
  (with the L</new> method, below), and calling C<< $new->parse_file(...) >> on
  it.  Returns the new object.  Note that this provides no way of
  setting any parse options like C<store_comments> (for that, call C<new>, and
  then set options, before calling C<parse_file>).  See the notes (below)
  on parameters to L</parse_file>.
  
  If HTML::TreeBuilder is unable to read the file, then C<new_from_file>
  dies.  The error can also be found in C<$!>.  (This behavior is new in
  HTML-Tree 5. Previous versions returned a tree with only implicit elements.)
  
  =head2 new_from_content
  
    $root = HTML::TreeBuilder->new_from_content(...);
  
  This "shortcut" constructor merely combines constructing a new object
  (with the L</new> method, below), and calling C<< for(...){$new->parse($_)} >>
  and C<< $new->eof >> on it.  Returns the new object.  Note that this provides
  no way of setting any parse options like C<store_comments> (for that,
  call C<new>, and then set options, before calling C<parse>).  Example
  usages: C<< HTML::TreeBuilder->new_from_content(@lines) >>, or
  C<< HTML::TreeBuilder->new_from_content($content) >>.
  
  =head2 new_from_url
  
    $root = HTML::TreeBuilder->new_from_url($url)
  
  This "shortcut" constructor combines constructing a new object (with
  the L</new> method, below), loading L<LWP::UserAgent>, fetching the
  specified URL, and calling C<< $new->parse( $response->decoded_content) >>
  and C<< $new->eof >> on it.
  Returns the new object.  Note that this provides no way of setting any
  parse options like C<store_comments>.
  
  If LWP is unable to fetch the URL, or the response is not HTML (as
  determined by L<HTTP::Headers/content_is_html>), then C<new_from_url>
  dies, and the HTTP::Response object is found in
  C<$HTML::TreeBuilder::lwp_response>.
  
  You must have installed LWP::UserAgent for this method to work.  LWP
  is not installed automatically, because it's a large set of modules
  and you might not need it.
  
  =head2 new
  
    $root = HTML::TreeBuilder->new();
  
  This creates a new HTML::TreeBuilder object.  This method takes no
  attributes.
  
  =head2 parse_file
  
   $root->parse_file(...)
  
  [An important method inherited from L<HTML::Parser|HTML::Parser>, which
  see.  Current versions of HTML::Parser can take a filespec, or a
  filehandle object, like *FOO, or some object from class IO::Handle,
  IO::File, IO::Socket) or the like.
  I think you should check that a given file exists I<before> calling
  C<< $root->parse_file($filespec) >>.]
  
  When you pass a filename to C<parse_file>, HTML::Parser opens it in
  binary mode, which means it's interpreted as Latin-1 (ISO-8859-1).  If
  the file is in another encoding, like UTF-8 or UTF-16, this will not
  do the right thing.
  
  One solution is to open the file yourself using the proper
  C<:encoding> layer, and pass the filehandle to C<parse_file>.  You can
  automate this process by using L<IO::HTML/html_file>, which will use
  the HTML5 encoding sniffing algorithm to automatically determine the
  proper C<:encoding> layer and apply it.
  
  In the next major release of HTML-Tree, I plan to have it use IO::HTML
  automatically.  If you really want your file opened in binary mode,
  you should open it yourself and pass the filehandle to C<parse_file>.
  
  The return value is C<undef> if there's an error opening the file.  In
  that case, the error will be in C<$!>.
  
  =head2 parse
  
    $root->parse(...)
  
  [A important method inherited from L<HTML::Parser|HTML::Parser>, which
  see.  See the note below for C<< $root->eof() >>.]
  
  =head2 eof
  
    $root->eof();
  
  This signals that you're finished parsing content into this tree; this
  runs various kinds of crucial cleanup on the tree.  This is called
  I<for you> when you call C<< $root->parse_file(...) >>, but not when
  you call C<< $root->parse(...) >>.  So if you call
  C<< $root->parse(...) >>, then you I<must> call C<< $root->eof() >>
  once you've finished feeding all the chunks to C<parse(...)>, and
  before you actually start doing anything else with the tree in C<$root>.
  
  =head2 parse_content
  
    $root->parse_content(...);
  
  Basically a handy alias for C<< $root->parse(...); $root->eof >>.
  Takes the exact same arguments as C<< $root->parse() >>.
  
  =head2 delete
  
    $root->delete();
  
  [A previously important method inherited from L<HTML::Element|HTML::Element>,
  which see.]
  
  =head2 elementify
  
    $root->elementify();
  
  This changes the class of the object in C<$root> from
  HTML::TreeBuilder to the class used for all the rest of the elements
  in that tree (generally HTML::Element).  Returns C<$root>.
  
  For most purposes, this is unnecessary, but if you call this after
  (after!!)
  you've finished building a tree, then it keeps you from accidentally
  trying to call anything but HTML::Element methods on it.  (I.e., if
  you accidentally call C<$root-E<gt>parse_file(...)> on the
  already-complete and elementified tree, then instead of charging ahead
  and I<wreaking havoc>, it'll throw a fatal error -- since C<$root> is
  now an object just of class HTML::Element which has no C<parse_file>
  method.
  
  Note that C<elementify> currently deletes all the private attributes of
  C<$root> except for "_tag", "_parent", "_content", "_pos", and
  "_implicit".  If anyone requests that I change this to leave in yet
  more private attributes, I might do so, in future versions.
  
  =head2 guts
  
   @nodes = $root->guts();
   $parent_for_nodes = $root->guts();
  
  In list context (as in the first case), this method returns the topmost
  non-implicit nodes in a tree.  This is useful when you're parsing HTML
  code that you know doesn't expect an HTML document, but instead just
  a fragment of an HTML document.  For example, if you wanted the parse
  tree for a file consisting of just this:
  
    <li>I like pie!
  
  Then you would get that with C<< @nodes = $root->guts(); >>.
  It so happens that in this case, C<@nodes> will contain just one
  element object, representing the C<< <li> >> node (with "I like pie!" being
  its text child node).  However, consider if you were parsing this:
  
    <hr>Hooboy!<hr>
  
  In that case, C<< $root->guts() >> would return three items:
  an element object for the first C<< <hr> >>, a text string "Hooboy!", and
  another C<< <hr> >> element object.
  
  For cases where you want definitely one element (so you can treat it as
  a "document fragment", roughly speaking), call C<guts()> in scalar
  context, as in C<< $parent_for_nodes = $root->guts() >>. That works like
  C<guts()> in list context; in fact, C<guts()> in list context would
  have returned exactly one value, and if it would have been an object (as
  opposed to a text string), then that's what C<guts> in scalar context
  will return.  Otherwise, if C<guts()> in list context would have returned
  no values at all, then C<guts()> in scalar context returns undef.  In
  all other cases, C<guts()> in scalar context returns an implicit C<< <div> >>
  element node, with children consisting of whatever nodes C<guts()>
  in list context would have returned.  Note that that may detach those
  nodes from C<$root>'s tree.
  
  =head2 disembowel
  
    @nodes = $root->disembowel();
    $parent_for_nodes = $root->disembowel();
  
  The C<disembowel()> method works just like the C<guts()> method, except
  that disembowel definitively destroys the tree above the nodes that
  are returned.  Usually when you want the guts from a tree, you're just
  going to toss out the rest of the tree anyway, so this saves you the
  bother.  (Remember, "disembowel" means "remove the guts from".)
  
  =head1 INTERNAL METHODS
  
  You should not need to call any of the following methods directly.
  
  =head2 element_class
  
    $classname = $h->element_class;
  
  This method returns the class which will be used for new elements.  It
  defaults to HTML::Element, but can be overridden by subclassing or esoteric
  means best left to those will will read the source and then not complain when
  those esoteric means change.  (Just subclass.)
  
  =head2 comment
  
  Accept a "here's a comment" signal from HTML::Parser.
  
  =head2 declaration
  
  Accept a "here's a markup declaration" signal from HTML::Parser.
  
  =head2 done
  
  TODO: document
  
  =head2 end
  
  Either: Acccept an end-tag signal from HTML::Parser
  Or: Method for closing currently open elements in some fairly complex
  way, as used by other methods in this class.
  
  TODO: Why is this hidden?
  
  =head2 process
  
  Accept a "here's a PI" signal from HTML::Parser.
  
  =head2 start
  
  Accept a signal from HTML::Parser for start-tags.
  
  TODO: Why is this hidden?
  
  =head2 stunt
  
  TODO: document
  
  =head2 stunted
  
  TODO: document
  
  =head2 text
  
  Accept a "here's a text token" signal from HTML::Parser.
  
  TODO: Why is this hidden?
  
  =head2 tighten_up
  
  Legacy
  
  Redirects to L<HTML::Element/delete_ignorable_whitespace>.
  
  =head2 warning
  
  Wrapper for CORE::warn
  
  TODO: why not just use carp?
  
  =head1 SUBROUTINES
  
  =head2 DEBUG
  
  Are we in Debug mode?  This is a constant subroutine, to allow
  compile-time optimizations.  To control debug mode, set
  C<$HTML::TreeBuilder::DEBUG> I<before> loading HTML::TreeBuilder.
  
  =head1 HTML AND ITS DISCONTENTS
  
  HTML is rather harder to parse than people who write it generally
  suspect.
  
  Here's the problem: HTML is a kind of SGML that permits "minimization"
  and "implication".  In short, this means that you don't have to close
  every tag you open (because the opening of a subsequent tag may
  implicitly close it), and if you use a tag that can't occur in the
  context you seem to using it in, under certain conditions the parser
  will be able to realize you mean to leave the current context and
  enter the new one, that being the only one that your code could
  correctly be interpreted in.
  
  Now, this would all work flawlessly and unproblematically if: 1) all
  the rules that both prescribe and describe HTML were (and had been)
  clearly set out, and 2) everyone was aware of these rules and wrote
  their code in compliance to them.
  
  However, it didn't happen that way, and so most HTML pages are
  difficult if not impossible to correctly parse with nearly any set of
  straightforward SGML rules.  That's why the internals of
  HTML::TreeBuilder consist of lots and lots of special cases -- instead
  of being just a generic SGML parser with HTML DTD rules plugged in.
  
  =head1 TRANSLATIONS?
  
  The techniques that HTML::TreeBuilder uses to perform what I consider
  very robust parses on everyday code are not things that can work only
  in Perl.  To date, the algorithms at the center of HTML::TreeBuilder
  have been implemented only in Perl, as far as I know; and I don't
  foresee getting around to implementing them in any other language any
  time soon.
  
  If, however, anyone is looking for a semester project for an applied
  programming class (or if they merely enjoy I<extra-curricular>
  masochism), they might do well to see about choosing as a topic the
  implementation/adaptation of these routines to any other interesting
  programming language that you feel currently suffers from a lack of
  robust HTML-parsing.  I welcome correspondence on this subject, and
  point out that one can learn a great deal about languages by trying to
  translate between them, and then comparing the result.
  
  The HTML::TreeBuilder source may seem long and complex, but it is
  rather well commented, and symbol names are generally
  self-explanatory.  (You are encouraged to read the Mozilla HTML parser
  source for comparison.)  Some of the complexity comes from little-used
  features, and some of it comes from having the HTML tokenizer
  (HTML::Parser) being a separate module, requiring somewhat of a
  different interface than you'd find in a combined tokenizer and
  tree-builder.  But most of the length of the source comes from the fact
  that it's essentially a long list of special cases, with lots and lots
  of sanity-checking, and sanity-recovery -- because, as Roseanne
  Rosannadanna once said, "it's always I<something>".
  
  Users looking to compare several HTML parsers should look at the
  source for Raggett's Tidy
  (C<E<lt>http://www.w3.org/People/Raggett/tidy/E<gt>>),
  Mozilla
  (C<E<lt>http://www.mozilla.org/E<gt>>),
  and possibly root around the browsers section of Yahoo
  to find the various open-source ones
  (C<E<lt>http://dir.yahoo.com/Computers_and_Internet/Software/Internet/World_Wide_Web/Browsers/E<gt>>).
  
  =head1 BUGS
  
  * Framesets seem to work correctly now.  Email me if you get a strange
  parse from a document with framesets.
  
  * Really bad HTML code will, often as not, make for a somewhat
  objectionable parse tree.  Regrettable, but unavoidably true.
  
  * If you're running with C<implicit_tags> off (God help you!), consider
  that C<< $tree->content_list >> probably contains the tree or grove from the
  parse, and not C<$tree> itself (which will, oddly enough, be an implicit
  C<< <html> >> element).  This seems counter-intuitive and problematic; but
  seeing as how almost no HTML ever parses correctly with C<implicit_tags>
  off, this interface oddity seems the least of your problems.
  
  =head1 BUG REPORTS
  
  When a document parses in a way different from how you think it
  should, I ask that you report this to me as a bug.  The first thing
  you should do is copy the document, trim out as much of it as you can
  while still producing the bug in question, and I<then> email me that
  mini-document I<and> the code you're using to parse it, to the HTML::Tree
  bug queue at S<C<< <bug-html-tree at rt.cpan.org> >>>.
  
  Include a note as to how it
  parses (presumably including its C<< $tree->dump >> output), and then a
  I<careful and clear> explanation of where you think the parser is
  going astray, and how you would prefer that it work instead.
  
  =head1 SEE ALSO
  
  For more information about the HTML-Tree distribution: L<HTML::Tree>.
  
  Modules used by HTML::TreeBuilder:
  L<HTML::Parser>, L<HTML::Element>, L<HTML::Tagset>.
  
  For converting between L<XML::DOM::Node>, L<HTML::Element>, and
  L<XML::Element> trees: L<HTML::DOMbo>.
  
  For opening a HTML file with automatic charset detection: L<IO::HTML>.
  
  =head1 AUTHOR
  
  Current maintainers:
  
  =over
  
  =item * Christopher J. Madsen S<C<< <perl AT cjmweb.net> >>>
  
  =item * Jeff Fearn S<C<< <jfearn AT cpan.org> >>>
  
  =back
  
  Original HTML-Tree author:
  
  =over
  
  =item * Gisle Aas
  
  =back
  
  Former maintainers:
  
  =over
  
  =item * Sean M. Burke
  
  =item * Andy Lester
  
  =item * Pete Krawczyk S<C<< <petek AT cpan.org> >>>
  
  =back
  
  You can follow or contribute to HTML-Tree's development at
  L<< http://github.com/madsen/HTML-Tree >>.
  
  =head1 COPYRIGHT AND LICENSE
  
  Copyright 1995-1998 Gisle Aas, 1999-2004 Sean M. Burke,
  2005 Andy Lester, 2006 Pete Krawczyk, 2010 Jeff Fearn,
  2012 Christopher J. Madsen.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  The programs in this library are distributed in the hope that they
  will be useful, but without any warranty; without even the implied
  warranty of merchantability or fitness for a particular purpose.
  
  =cut
HTML_TREEBUILDER

    $main::fatpacked{"HTTP/Config.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_CONFIG';
  package HTTP::Config;
  
  use strict;
  use warnings;
  
  use URI;
  
  our $VERSION = "6.11";
  
  sub new {
      my $class = shift;
      return bless [], $class;
  }
  
  sub entries {
      my $self = shift;
      @$self;
  }
  
  sub empty {
      my $self = shift;
      not @$self;
  }
  
  sub add {
      if (@_ == 2) {
          my $self = shift;
          push(@$self, shift);
          return;
      }
      my($self, %spec) = @_;
      push(@$self, \%spec);
      return;
  }
  
  sub find2 {
      my($self, %spec) = @_;
      my @found;
      my @rest;
   ITEM:
      for my $item (@$self) {
          for my $k (keys %spec) {
              no warnings 'uninitialized';
              if (!exists $item->{$k} || $spec{$k} ne $item->{$k}) {
                  push(@rest, $item);
                  next ITEM;
              }
          }
          push(@found, $item);
      }
      return \@found unless wantarray;
      return \@found, \@rest;
  }
  
  sub find {
      my $self = shift;
      my $f = $self->find2(@_);
      return @$f if wantarray;
      return $f->[0];
  }
  
  sub remove {
      my($self, %spec) = @_;
      my($removed, $rest) = $self->find2(%spec);
      @$self = @$rest if @$removed;
      return @$removed;
  }
  
  my %MATCH = (
      m_scheme => sub {
          my($v, $uri) = @_;
          return $uri->_scheme eq $v;  # URI known to be canonical
      },
      m_secure => sub {
          my($v, $uri) = @_;
          my $secure = $uri->can("secure") ? $uri->secure : $uri->_scheme eq "https";
          return $secure == !!$v;
      },
      m_host_port => sub {
          my($v, $uri) = @_;
          return unless $uri->can("host_port");
          return $uri->host_port eq $v, 7;
      },
      m_host => sub {
          my($v, $uri) = @_;
          return unless $uri->can("host");
          return $uri->host eq $v, 6;
      },
      m_port => sub {
          my($v, $uri) = @_;
          return unless $uri->can("port");
          return $uri->port eq $v;
      },
      m_domain => sub {
          my($v, $uri) = @_;
          return unless $uri->can("host");
          my $h = $uri->host;
          $h = "$h.local" unless $h =~ /\./;
          $v = ".$v" unless $v =~ /^\./;
          return length($v), 5 if substr($h, -length($v)) eq $v;
          return 0;
      },
      m_path => sub {
          my($v, $uri) = @_;
          return unless $uri->can("path");
          return $uri->path eq $v, 4;
      },
      m_path_prefix => sub {
          my($v, $uri) = @_;
          return unless $uri->can("path");
          my $path = $uri->path;
          my $len = length($v);
          return $len, 3 if $path eq $v;
          return 0 if length($path) <= $len;
          $v .= "/" unless $v =~ m,/\z,,;
          return $len, 3 if substr($path, 0, length($v)) eq $v;
          return 0;
      },
      m_path_match => sub {
          my($v, $uri) = @_;
          return unless $uri->can("path");
          return $uri->path =~ $v;
      },
      m_uri__ => sub {
          my($v, $k, $uri) = @_;
          return unless $uri->can($k);
          return 1 unless defined $v;
          return $uri->$k eq $v;
      },
      m_method => sub {
          my($v, $uri, $request) = @_;
          return $request && $request->method eq $v;
      },
      m_proxy => sub {
          my($v, $uri, $request) = @_;
          return $request && ($request->{proxy} || "") eq $v;
      },
      m_code => sub {
          my($v, $uri, $request, $response) = @_;
          $v =~ s/xx\z//;
          return unless $response;
          return length($v), 2 if substr($response->code, 0, length($v)) eq $v;
      },
      m_media_type => sub {  # for request too??
          my($v, $uri, $request, $response) = @_;
          return unless $response;
          return 1, 1 if $v eq "*/*";
          my $ct = $response->content_type;
          return 2, 1 if $v =~ s,/\*\z,, && $ct =~ m,^\Q$v\E/,;
          return 3, 1 if $v eq "html" && $response->content_is_html;
          return 4, 1 if $v eq "xhtml" && $response->content_is_xhtml;
          return 10, 1 if $v eq $ct;
          return 0;
      },
      m_header__ => sub {
          my($v, $k, $uri, $request, $response) = @_;
          return unless $request;
          return 1 if $request->header($k) eq $v;
          return 1 if $response && $response->header($k) eq $v;
          return 0;
      },
      m_response_attr__ => sub {
          my($v, $k, $uri, $request, $response) = @_;
          return unless $response;
          return 1 if !defined($v) && exists $response->{$k};
          return 0 unless exists $response->{$k};
          return 1 if $response->{$k} eq $v;
          return 0;
      },
  );
  
  sub matching {
      my $self = shift;
      if (@_ == 1) {
          if ($_[0]->can("request")) {
              unshift(@_, $_[0]->request);
              unshift(@_, undef) unless defined $_[0];
          }
          unshift(@_, $_[0]->uri_canonical) if $_[0] && $_[0]->can("uri_canonical");
      }
      my($uri, $request, $response) = @_;
      $uri = URI->new($uri) unless ref($uri);
  
      my @m;
   ITEM:
      for my $item (@$self) {
          my $order;
          for my $ikey (keys %$item) {
              my $mkey = $ikey;
              my $k;
              $k = $1 if $mkey =~ s/__(.*)/__/;
              if (my $m = $MATCH{$mkey}) {
                  #print "$ikey $mkey\n";
                  my($c, $o);
                  my @arg = (
                      defined($k) ? $k : (),
                      $uri, $request, $response
                  );
                  my $v = $item->{$ikey};
                  $v = [$v] unless ref($v) eq "ARRAY";
                  for (@$v) {
                      ($c, $o) = $m->($_, @arg);
                      #print "  - $_ ==> $c $o\n";
                      last if $c;
                  }
                  next ITEM unless $c;
                  $order->[$o || 0] += $c;
              }
          }
          $order->[7] ||= 0;
          $item->{_order} = join(".", reverse map sprintf("%03d", $_ || 0), @$order);
          push(@m, $item);
      }
      @m = sort { $b->{_order} cmp $a->{_order} } @m;
      delete $_->{_order} for @m;
      return @m if wantarray;
      return $m[0];
  }
  
  sub add_item {
      my $self = shift;
      my $item = shift;
      return $self->add(item => $item, @_);
  }
  
  sub remove_items {
      my $self = shift;
      return map $_->{item}, $self->remove(@_);
  }
  
  sub matching_items {
      my $self = shift;
      return map $_->{item}, $self->matching(@_);
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  HTTP::Config - Configuration for request and response objects
  
  =head1 SYNOPSIS
  
   use HTTP::Config;
   my $c = HTTP::Config->new;
   $c->add(m_domain => ".example.com", m_scheme => "http", verbose => 1);
   
   use HTTP::Request;
   my $request = HTTP::Request->new(GET => "http://www.example.com");
   
   if (my @m = $c->matching($request)) {
      print "Yadayada\n" if $m[0]->{verbose};
   }
  
  =head1 DESCRIPTION
  
  An C<HTTP::Config> object is a list of entries that
  can be matched against request or request/response pairs.  Its
  purpose is to hold configuration data that can be looked up given a
  request or response object.
  
  Each configuration entry is a hash.  Some keys specify matching to
  occur against attributes of request/response objects.  Other keys can
  be used to hold user data.
  
  The following methods are provided:
  
  =over 4
  
  =item $conf = HTTP::Config->new
  
  Constructs a new empty C<HTTP::Config> object and returns it.
  
  =item $conf->entries
  
  Returns the list of entries in the configuration object.
  In scalar context returns the number of entries.
  
  =item $conf->empty
  
  Return true if there are no entries in the configuration object.
  This is just a shorthand for C<< not $conf->entries >>.
  
  =item $conf->add( %matchspec, %other )
  
  =item $conf->add( \%entry )
  
  Adds a new entry to the configuration.
  You can either pass separate key/value pairs or a hash reference.
  
  =item $conf->remove( %spec )
  
  Removes (and returns) the entries that have matches for all the key/value pairs in %spec.
  If %spec is empty this will match all entries; so it will empty the configuation object.
  
  =item $conf->matching( $uri, $request, $response )
  
  =item $conf->matching( $uri )
  
  =item $conf->matching( $request )
  
  =item $conf->matching( $response )
  
  Returns the entries that match the given $uri, $request and $response triplet.
  
  If called with a single $request object then the $uri is obtained by calling its 'uri_canonical' method.
  If called with a single $response object, then the request object is obtained by calling its 'request' method;
  and then the $uri is obtained as if a single $request was provided.
  
  The entries are returned with the most specific matches first.
  In scalar context returns the most specific match or C<undef> in none match.
  
  =item $conf->add_item( $item, %matchspec )
  
  =item $conf->remove_items( %spec )
  
  =item $conf->matching_items( $uri, $request, $response )
  
  Wrappers that hides the entries themselves.
  
  =back
  
  =head2 Matching
  
  The following keys on a configuration entry specify matching.  For all
  of these you can provide an array of values instead of a single value.
  The entry matches if at least one of the values in the array matches.
  
  Entries that require match against a response object attribute will never match
  unless a response object was provided.
  
  =over
  
  =item m_scheme => $scheme
  
  Matches if the URI uses the specified scheme; e.g. "http".
  
  =item m_secure => $bool
  
  If $bool is TRUE; matches if the URI uses a secure scheme.  If $bool
  is FALSE; matches if the URI does not use a secure scheme.  An example
  of a secure scheme is "https".
  
  =item m_host_port => "$hostname:$port"
  
  Matches if the URI's host_port method return the specified value.
  
  =item m_host => $hostname
  
  Matches if the URI's host method returns the specified value.
  
  =item m_port => $port
  
  Matches if the URI's port method returns the specified value.
  
  =item m_domain => ".$domain"
  
  Matches if the URI's host method return a value that within the given
  domain.  The hostname "www.example.com" will for instance match the
  domain ".com".
  
  =item m_path => $path
  
  Matches if the URI's path method returns the specified value.
  
  =item m_path_prefix => $path
  
  Matches if the URI's path is the specified path or has the specified
  path as prefix.
  
  =item m_path_match => $Regexp
  
  Matches if the regular expression matches the URI's path.  Eg. qr/\.html$/.
  
  =item m_method => $method
  
  Matches if the request method matches the specified value. Eg. "GET" or "POST".
  
  =item m_code => $digit
  
  =item m_code => $status_code
  
  Matches if the response status code matches.  If a single digit is
  specified; matches for all response status codes beginning with that digit.
  
  =item m_proxy => $url
  
  Matches if the request is to be sent to the given Proxy server.
  
  =item m_media_type => "*/*"
  
  =item m_media_type => "text/*"
  
  =item m_media_type => "html"
  
  =item m_media_type => "xhtml"
  
  =item m_media_type => "text/html"
  
  Matches if the response media type matches.
  
  With a value of "html" matches if $response->content_is_html returns TRUE.
  With a value of "xhtml" matches if $response->content_is_xhtml returns TRUE.
  
  =item m_uri__I<$method> => undef
  
  Matches if the URI object provides the method.
  
  =item m_uri__I<$method> => $string
  
  Matches if the URI's $method method returns the given value.
  
  =item m_header__I<$field> => $string
  
  Matches if either the request or the response have a header $field with the given value.
  
  =item m_response_attr__I<$key> => undef
  
  =item m_response_attr__I<$key> => $string
  
  Matches if the response object has that key, or the entry has the given value.
  
  =back
  
  =head1 SEE ALSO
  
  L<URI>, L<HTTP::Request>, L<HTTP::Response>
  
  =head1 COPYRIGHT
  
  Copyright 2008, Gisle Aas
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =cut
HTTP_CONFIG

    $main::fatpacked{"HTTP/Cookies.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_COOKIES';
  package HTTP::Cookies;
  
  use strict;
  use HTTP::Date qw(str2time parse_date time2str);
  use HTTP::Headers::Util qw(_split_header_words join_header_words);
  
  use vars qw($VERSION $EPOCH_OFFSET);
  $VERSION = "6.01";
  
  # Legacy: because "use "HTTP::Cookies" used be the ONLY way
  #  to load the class HTTP::Cookies::Netscape.
  require HTTP::Cookies::Netscape;
  
  $EPOCH_OFFSET = 0;  # difference from Unix epoch
  if ($^O eq "MacOS") {
      require Time::Local;
      $EPOCH_OFFSET = Time::Local::timelocal(0,0,0,1,0,70);
  }
  
  # A HTTP::Cookies object is a hash.  The main attribute is the
  # COOKIES 3 level hash:  $self->{COOKIES}{$domain}{$path}{$key}.
  
  sub new
  {
      my $class = shift;
      my $self = bless {
  	COOKIES => {},
      }, $class;
      my %cnf = @_;
      for (keys %cnf) {
  	$self->{lc($_)} = $cnf{$_};
      }
      $self->load;
      $self;
  }
  
  
  sub add_cookie_header
  {
      my $self = shift;
      my $request = shift || return;
      my $url = $request->uri;
      my $scheme = $url->scheme;
      unless ($scheme =~ /^https?\z/) {
  	return;
      }
  
      my $domain = _host($request, $url);
      $domain = "$domain.local" unless $domain =~ /\./;
      my $secure_request = ($scheme eq "https");
      my $req_path = _url_path($url);
      my $req_port = $url->port;
      my $now = time();
      _normalize_path($req_path) if $req_path =~ /%/;
  
      my @cval;    # cookie values for the "Cookie" header
      my $set_ver;
      my $netscape_only = 0; # An exact domain match applies to any cookie
  
      while ($domain =~ /\./) {
          # Checking $domain for cookies"
  	my $cookies = $self->{COOKIES}{$domain};
  	next unless $cookies;
  	if ($self->{delayload} && defined($cookies->{'//+delayload'})) {
  	    my $cookie_data = $cookies->{'//+delayload'}{'cookie'};
  	    delete $self->{COOKIES}{$domain};
  	    $self->load_cookie($cookie_data->[1]);
  	    $cookies = $self->{COOKIES}{$domain};
  	    next unless $cookies;  # should not really happen
  	}
  
  	# Want to add cookies corresponding to the most specific paths
  	# first (i.e. longest path first)
  	my $path;
  	for $path (sort {length($b) <=> length($a) } keys %$cookies) {
  	    if (index($req_path, $path) != 0) {
  		next;
  	    }
  
  	    my($key,$array);
  	    while (($key,$array) = each %{$cookies->{$path}}) {
  		my($version,$val,$port,$path_spec,$secure,$expires) = @$array;
  		if ($secure && !$secure_request) {
  		    next;
  		}
  		if ($expires && $expires < $now) {
  		    next;
  		}
  		if ($port) {
  		    my $found;
  		    if ($port =~ s/^_//) {
  			# The corresponding Set-Cookie attribute was empty
  			$found++ if $port eq $req_port;
  			$port = "";
  		    }
  		    else {
  			my $p;
  			for $p (split(/,/, $port)) {
  			    $found++, last if $p eq $req_port;
  			}
  		    }
  		    unless ($found) {
  			next;
  		    }
  		}
  		if ($version > 0 && $netscape_only) {
  		    next;
  		}
  
  		# set version number of cookie header.
  	        # XXX: What should it be if multiple matching
                  #      Set-Cookie headers have different versions themselves
  		if (!$set_ver++) {
  		    if ($version >= 1) {
  			push(@cval, "\$Version=$version");
  		    }
  		    elsif (!$self->{hide_cookie2}) {
  			$request->header(Cookie2 => '$Version="1"');
  		    }
  		}
  
  		# do we need to quote the value
  		if ($val =~ /\W/ && $version) {
  		    $val =~ s/([\\\"])/\\$1/g;
  		    $val = qq("$val");
  		}
  
  		# and finally remember this cookie
  		push(@cval, "$key=$val");
  		if ($version >= 1) {
  		    push(@cval, qq(\$Path="$path"))     if $path_spec;
  		    push(@cval, qq(\$Domain="$domain")) if $domain =~ /^\./;
  		    if (defined $port) {
  			my $p = '$Port';
  			$p .= qq(="$port") if length $port;
  			push(@cval, $p);
  		    }
  		}
  
  	    }
          }
  
      } continue {
  	# Try with a more general domain, alternately stripping
  	# leading name components and leading dots.  When this
  	# results in a domain with no leading dot, it is for
  	# Netscape cookie compatibility only:
  	#
  	# a.b.c.net	Any cookie
  	# .b.c.net	Any cookie
  	# b.c.net	Netscape cookie only
  	# .c.net	Any cookie
  
  	if ($domain =~ s/^\.+//) {
  	    $netscape_only = 1;
  	}
  	else {
  	    $domain =~ s/[^.]*//;
  	    $netscape_only = 0;
  	}
      }
  
      if (@cval) {
  	if (my $old = $request->header("Cookie")) {
  	    unshift(@cval, $old);
  	}
  	$request->header(Cookie => join("; ", @cval));
      }
  
      $request;
  }
  
  
  sub extract_cookies
  {
      my $self = shift;
      my $response = shift || return;
  
      my @set = _split_header_words($response->_header("Set-Cookie2"));
      my @ns_set = $response->_header("Set-Cookie");
  
      return $response unless @set || @ns_set;  # quick exit
  
      my $request = $response->request;
      my $url = $request->uri;
      my $req_host = _host($request, $url);
      $req_host = "$req_host.local" unless $req_host =~ /\./;
      my $req_port = $url->port;
      my $req_path = _url_path($url);
      _normalize_path($req_path) if $req_path =~ /%/;
  
      if (@ns_set) {
  	# The old Netscape cookie format for Set-Cookie
  	# http://curl.haxx.se/rfc/cookie_spec.html
  	# can for instance contain an unquoted "," in the expires
  	# field, so we have to use this ad-hoc parser.
  	my $now = time();
  
  	# Build a hash of cookies that was present in Set-Cookie2
  	# headers.  We need to skip them if we also find them in a
  	# Set-Cookie header.
  	my %in_set2;
  	for (@set) {
  	    $in_set2{$_->[0]}++;
  	}
  
  	my $set;
  	for $set (@ns_set) {
              $set =~ s/^\s+//;
  	    my @cur;
  	    my $param;
  	    my $expires;
  	    my $first_param = 1;
  	    for $param (split(/;\s*/, $set)) {
                  next unless length($param);
  		my($k,$v) = split(/\s*=\s*/, $param, 2);
  		if (defined $v) {
  		    $v =~ s/\s+$//;
  		    #print "$k => $v\n";
  		}
  		else {
  		    $k =~ s/\s+$//;
  		    #print "$k => undef";
  		}
  		if (!$first_param && lc($k) eq "expires") {
  		    my $etime = str2time($v);
  		    if (defined $etime) {
  			push(@cur, "Max-Age" => $etime - $now);
  			$expires++;
  		    }
  		    else {
  			# parse_date can deal with years outside the range of time_t,
  			my($year, $mon, $day, $hour, $min, $sec, $tz) = parse_date($v);
  			if ($year) {
  			    my $thisyear = (gmtime)[5] + 1900;
  			    if ($year < $thisyear) {
  				push(@cur, "Max-Age" => -1);  # any negative value will do
  				$expires++;
  			    }
  			    elsif ($year >= $thisyear + 10) {
  				# the date is at least 10 years into the future, just replace
  				# it with something approximate
  				push(@cur, "Max-Age" => 10 * 365 * 24 * 60 * 60);
  				$expires++;
  			    }
  			}
  		    }
  		}
                  elsif (!$first_param && lc($k) =~ /^(?:version|discard|ns-cookie)/) {
                      # ignore
                  }
  		else {
  		    push(@cur, $k => $v);
  		}
  		$first_param = 0;
  	    }
              next unless @cur;
  	    next if $in_set2{$cur[0]};
  
  #	    push(@cur, "Port" => $req_port);
  	    push(@cur, "Discard" => undef) unless $expires;
  	    push(@cur, "Version" => 0);
  	    push(@cur, "ns-cookie" => 1);
  	    push(@set, \@cur);
  	}
      }
  
    SET_COOKIE:
      for my $set (@set) {
  	next unless @$set >= 2;
  
  	my $key = shift @$set;
  	my $val = shift @$set;
  
  	my %hash;
  	while (@$set) {
  	    my $k = shift @$set;
  	    my $v = shift @$set;
  	    my $lc = lc($k);
  	    # don't loose case distinction for unknown fields
  	    $k = $lc if $lc =~ /^(?:discard|domain|max-age|
                                      path|port|secure|version)$/x;
  	    if ($k eq "discard" || $k eq "secure") {
  		$v = 1 unless defined $v;
  	    }
  	    next if exists $hash{$k};  # only first value is significant
  	    $hash{$k} = $v;
  	};
  
  	my %orig_hash = %hash;
  	my $version   = delete $hash{version};
  	$version = 1 unless defined($version);
  	my $discard   = delete $hash{discard};
  	my $secure    = delete $hash{secure};
  	my $maxage    = delete $hash{'max-age'};
  	my $ns_cookie = delete $hash{'ns-cookie'};
  
  	# Check domain
  	my $domain  = delete $hash{domain};
  	$domain = lc($domain) if defined $domain;
  	if (defined($domain)
  	    && $domain ne $req_host && $domain ne ".$req_host") {
  	    if ($domain !~ /\./ && $domain ne "local") {
  		next SET_COOKIE;
  	    }
  	    $domain = ".$domain" unless $domain =~ /^\./;
  	    if ($domain =~ /\.\d+$/) {
  		next SET_COOKIE;
  	    }
  	    my $len = length($domain);
  	    unless (substr($req_host, -$len) eq $domain) {
  		next SET_COOKIE;
  	    }
  	    my $hostpre = substr($req_host, 0, length($req_host) - $len);
  	    if ($hostpre =~ /\./ && !$ns_cookie) {
  		next SET_COOKIE;
  	    }
  	}
  	else {
  	    $domain = $req_host;
  	}
  
  	my $path = delete $hash{path};
  	my $path_spec;
  	if (defined $path && $path ne '') {
  	    $path_spec++;
  	    _normalize_path($path) if $path =~ /%/;
  	    if (!$ns_cookie &&
                  substr($req_path, 0, length($path)) ne $path) {
  		next SET_COOKIE;
  	    }
  	}
  	else {
  	    $path = $req_path;
  	    $path =~ s,/[^/]*$,,;
  	    $path = "/" unless length($path);
  	}
  
  	my $port;
  	if (exists $hash{port}) {
  	    $port = delete $hash{port};
  	    if (defined $port) {
  		$port =~ s/\s+//g;
  		my $found;
  		for my $p (split(/,/, $port)) {
  		    unless ($p =~ /^\d+$/) {
  			next SET_COOKIE;
  		    }
  		    $found++ if $p eq $req_port;
  		}
  		unless ($found) {
  		    next SET_COOKIE;
  		}
  	    }
  	    else {
  		$port = "_$req_port";
  	    }
  	}
  	$self->set_cookie($version,$key,$val,$path,$domain,$port,$path_spec,$secure,$maxage,$discard, \%hash)
  	    if $self->set_cookie_ok(\%orig_hash);
      }
  
      $response;
  }
  
  sub set_cookie_ok
  {
      1;
  }
  
  
  sub set_cookie
  {
      my $self = shift;
      my($version,
         $key, $val, $path, $domain, $port,
         $path_spec, $secure, $maxage, $discard, $rest) = @_;
  
      # path and key can not be empty (key can't start with '$')
      return $self if !defined($path) || $path !~ m,^/, ||
  	            !defined($key)  || $key  =~ m,^\$,;
  
      # ensure legal port
      if (defined $port) {
  	return $self unless $port =~ /^_?\d+(?:,\d+)*$/;
      }
  
      my $expires;
      if (defined $maxage) {
  	if ($maxage <= 0) {
  	    delete $self->{COOKIES}{$domain}{$path}{$key};
  	    return $self;
  	}
  	$expires = time() + $maxage;
      }
      $version = 0 unless defined $version;
  
      my @array = ($version, $val,$port,
  		 $path_spec,
  		 $secure, $expires, $discard);
      push(@array, {%$rest}) if defined($rest) && %$rest;
      # trim off undefined values at end
      pop(@array) while !defined $array[-1];
  
      $self->{COOKIES}{$domain}{$path}{$key} = \@array;
      $self;
  }
  
  
  sub save
  {
      my $self = shift;
      my $file = shift || $self->{'file'} || return;
      local(*FILE);
      open(FILE, ">$file") or die "Can't open $file: $!";
      print FILE "#LWP-Cookies-1.0\n";
      print FILE $self->as_string(!$self->{ignore_discard});
      close(FILE);
      1;
  }
  
  
  sub load
  {
      my $self = shift;
      my $file = shift || $self->{'file'} || return;
      local(*FILE, $_);
      local $/ = "\n";  # make sure we got standard record separator
      open(FILE, $file) or return;
      my $magic = <FILE>;
      unless ($magic =~ /^\#LWP-Cookies-(\d+\.\d+)/) {
  	warn "$file does not seem to contain cookies";
  	return;
      }
      while (<FILE>) {
  	next unless s/^Set-Cookie3:\s*//;
  	chomp;
  	my $cookie;
  	for $cookie (_split_header_words($_)) {
  	    my($key,$val) = splice(@$cookie, 0, 2);
  	    my %hash;
  	    while (@$cookie) {
  		my $k = shift @$cookie;
  		my $v = shift @$cookie;
  		$hash{$k} = $v;
  	    }
  	    my $version   = delete $hash{version};
  	    my $path      = delete $hash{path};
  	    my $domain    = delete $hash{domain};
  	    my $port      = delete $hash{port};
  	    my $expires   = str2time(delete $hash{expires});
  
  	    my $path_spec = exists $hash{path_spec}; delete $hash{path_spec};
  	    my $secure    = exists $hash{secure};    delete $hash{secure};
  	    my $discard   = exists $hash{discard};   delete $hash{discard};
  
  	    my @array =	($version,$val,$port,
  			 $path_spec,$secure,$expires,$discard);
  	    push(@array, \%hash) if %hash;
  	    $self->{COOKIES}{$domain}{$path}{$key} = \@array;
  	}
      }
      close(FILE);
      1;
  }
  
  
  sub revert
  {
      my $self = shift;
      $self->clear->load;
      $self;
  }
  
  
  sub clear
  {
      my $self = shift;
      if (@_ == 0) {
  	$self->{COOKIES} = {};
      }
      elsif (@_ == 1) {
  	delete $self->{COOKIES}{$_[0]};
      }
      elsif (@_ == 2) {
  	delete $self->{COOKIES}{$_[0]}{$_[1]};
      }
      elsif (@_ == 3) {
  	delete $self->{COOKIES}{$_[0]}{$_[1]}{$_[2]};
      }
      else {
  	require Carp;
          Carp::carp('Usage: $c->clear([domain [,path [,key]]])');
      }
      $self;
  }
  
  
  sub clear_temporary_cookies
  {
      my($self) = @_;
  
      $self->scan(sub {
          if($_[9] or        # "Discard" flag set
             not $_[8]) {    # No expire field?
              $_[8] = -1;            # Set the expire/max_age field
              $self->set_cookie(@_); # Clear the cookie
          }
        });
  }
  
  
  sub DESTROY
  {
      my $self = shift;
      local($., $@, $!, $^E, $?);
      $self->save if $self->{'autosave'};
  }
  
  
  sub scan
  {
      my($self, $cb) = @_;
      my($domain,$path,$key);
      for $domain (sort keys %{$self->{COOKIES}}) {
  	for $path (sort keys %{$self->{COOKIES}{$domain}}) {
  	    for $key (sort keys %{$self->{COOKIES}{$domain}{$path}}) {
  		my($version,$val,$port,$path_spec,
  		   $secure,$expires,$discard,$rest) =
  		       @{$self->{COOKIES}{$domain}{$path}{$key}};
  		$rest = {} unless defined($rest);
  		&$cb($version,$key,$val,$path,$domain,$port,
  		     $path_spec,$secure,$expires,$discard,$rest);
  	    }
  	}
      }
  }
  
  
  sub as_string
  {
      my($self, $skip_discard) = @_;
      my @res;
      $self->scan(sub {
  	my($version,$key,$val,$path,$domain,$port,
  	   $path_spec,$secure,$expires,$discard,$rest) = @_;
  	return if $discard && $skip_discard;
  	my @h = ($key, $val);
  	push(@h, "path", $path);
  	push(@h, "domain" => $domain);
  	push(@h, "port" => $port) if defined $port;
  	push(@h, "path_spec" => undef) if $path_spec;
  	push(@h, "secure" => undef) if $secure;
  	push(@h, "expires" => HTTP::Date::time2isoz($expires)) if $expires;
  	push(@h, "discard" => undef) if $discard;
  	my $k;
  	for $k (sort keys %$rest) {
  	    push(@h, $k, $rest->{$k});
  	}
  	push(@h, "version" => $version);
  	push(@res, "Set-Cookie3: " . join_header_words(\@h));
      });
      join("\n", @res, "");
  }
  
  sub _host
  {
      my($request, $url) = @_;
      if (my $h = $request->header("Host")) {
  	$h =~ s/:\d+$//;  # might have a port as well
  	return lc($h);
      }
      return lc($url->host);
  }
  
  sub _url_path
  {
      my $url = shift;
      my $path;
      if($url->can('epath')) {
         $path = $url->epath;    # URI::URL method
      }
      else {
         $path = $url->path;           # URI::_generic method
      }
      $path = "/" unless length $path;
      $path;
  }
  
  sub _normalize_path  # so that plain string compare can be used
  {
      my $x;
      $_[0] =~ s/%([0-9a-fA-F][0-9a-fA-F])/
  	         $x = uc($1);
                   $x eq "2F" || $x eq "25" ? "%$x" :
                                              pack("C", hex($x));
                /eg;
      $_[0] =~ s/([\0-\x20\x7f-\xff])/sprintf("%%%02X",ord($1))/eg;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  HTTP::Cookies - HTTP cookie jars
  
  =head1 SYNOPSIS
  
    use HTTP::Cookies;
    $cookie_jar = HTTP::Cookies->new(
      file => "$ENV{'HOME'}/lwp_cookies.dat",
      autosave => 1,
    );
  
    use LWP;
    my $browser = LWP::UserAgent->new;
    $browser->cookie_jar($cookie_jar);
  
  Or for an empty and temporary cookie jar:
  
    use LWP;
    my $browser = LWP::UserAgent->new;
    $browser->cookie_jar( {} );
  
  =head1 DESCRIPTION
  
  This class is for objects that represent a "cookie jar" -- that is, a
  database of all the HTTP cookies that a given LWP::UserAgent object
  knows about.
  
  Cookies are a general mechanism which server side connections can use
  to both store and retrieve information on the client side of the
  connection.  For more information about cookies refer to
  <URL:http://curl.haxx.se/rfc/cookie_spec.html> and
  <URL:http://www.cookiecentral.com/>.  This module also implements the
  new style cookies described in I<RFC 2965>.
  The two variants of cookies are supposed to be able to coexist happily.
  
  Instances of the class I<HTTP::Cookies> are able to store a collection
  of Set-Cookie2: and Set-Cookie: headers and are able to use this
  information to initialize Cookie-headers in I<HTTP::Request> objects.
  The state of a I<HTTP::Cookies> object can be saved in and restored from
  files.
  
  =head1 METHODS
  
  The following methods are provided:
  
  =over 4
  
  =item $cookie_jar = HTTP::Cookies->new
  
  The constructor takes hash style parameters.  The following
  parameters are recognized:
  
    file:            name of the file to restore cookies from and save cookies to
    autosave:        save during destruction (bool)
    ignore_discard:  save even cookies that are requested to be discarded (bool)
    hide_cookie2:    do not add Cookie2 header to requests
  
  Future parameters might include (not yet implemented):
  
    max_cookies               300
    max_cookies_per_domain    20
    max_cookie_size           4096
  
    no_cookies   list of domain names that we never return cookies to
  
  =item $cookie_jar->add_cookie_header( $request )
  
  The add_cookie_header() method will set the appropriate Cookie:-header
  for the I<HTTP::Request> object given as argument.  The $request must
  have a valid url attribute before this method is called.
  
  =item $cookie_jar->extract_cookies( $response )
  
  The extract_cookies() method will look for Set-Cookie: and
  Set-Cookie2: headers in the I<HTTP::Response> object passed as
  argument.  Any of these headers that are found are used to update
  the state of the $cookie_jar.
  
  =item $cookie_jar->set_cookie( $version, $key, $val, $path, $domain, $port, $path_spec, $secure, $maxage, $discard, \%rest )
  
  The set_cookie() method updates the state of the $cookie_jar.  The
  $key, $val, $domain, $port and $path arguments are strings.  The
  $path_spec, $secure, $discard arguments are boolean values. The $maxage
  value is a number indicating number of seconds that this cookie will
  live.  A value <= 0 will delete this cookie.  %rest defines
  various other attributes like "Comment" and "CommentURL".
  
  =item $cookie_jar->save
  
  =item $cookie_jar->save( $file )
  
  This method file saves the state of the $cookie_jar to a file.
  The state can then be restored later using the load() method.  If a
  filename is not specified we will use the name specified during
  construction.  If the attribute I<ignore_discard> is set, then we
  will even save cookies that are marked to be discarded.
  
  The default is to save a sequence of "Set-Cookie3" lines.
  "Set-Cookie3" is a proprietary LWP format, not known to be compatible
  with any browser.  The I<HTTP::Cookies::Netscape> sub-class can
  be used to save in a format compatible with Netscape.
  
  =item $cookie_jar->load
  
  =item $cookie_jar->load( $file )
  
  This method reads the cookies from the file and adds them to the
  $cookie_jar.  The file must be in the format written by the save()
  method.
  
  =item $cookie_jar->revert
  
  This method empties the $cookie_jar and re-loads the $cookie_jar
  from the last save file.
  
  =item $cookie_jar->clear
  
  =item $cookie_jar->clear( $domain )
  
  =item $cookie_jar->clear( $domain, $path )
  
  =item $cookie_jar->clear( $domain, $path, $key )
  
  Invoking this method without arguments will empty the whole
  $cookie_jar.  If given a single argument only cookies belonging to
  that domain will be removed.  If given two arguments, cookies
  belonging to the specified path within that domain are removed.  If
  given three arguments, then the cookie with the specified key, path
  and domain is removed.
  
  =item $cookie_jar->clear_temporary_cookies
  
  Discard all temporary cookies. Scans for all cookies in the jar
  with either no expire field or a true C<discard> flag. To be
  called when the user agent shuts down according to RFC 2965.
  
  =item $cookie_jar->scan( \&callback )
  
  The argument is a subroutine that will be invoked for each cookie
  stored in the $cookie_jar.  The subroutine will be invoked with
  the following arguments:
  
    0  version
    1  key
    2  val
    3  path
    4  domain
    5  port
    6  path_spec
    7  secure
    8  expires
    9  discard
   10  hash
  
  =item $cookie_jar->as_string
  
  =item $cookie_jar->as_string( $skip_discardables )
  
  The as_string() method will return the state of the $cookie_jar
  represented as a sequence of "Set-Cookie3" header lines separated by
  "\n".  If $skip_discardables is TRUE, it will not return lines for
  cookies with the I<Discard> attribute.
  
  =back
  
  =head1 SEE ALSO
  
  L<HTTP::Cookies::Netscape>, L<HTTP::Cookies::Microsoft>
  
  =head1 COPYRIGHT
  
  Copyright 1997-2002 Gisle Aas
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
HTTP_COOKIES

    $main::fatpacked{"HTTP/Cookies/Microsoft.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_COOKIES_MICROSOFT';
  package HTTP::Cookies::Microsoft;
  
  use strict;
  
  use vars qw(@ISA $VERSION);
  
  $VERSION = "6.00";
  
  require HTTP::Cookies;
  @ISA=qw(HTTP::Cookies);
  
  sub load_cookies_from_file
  {
  	my ($file) = @_;
  	my @cookies;
  	my ($key, $value, $domain_path, $flags, $lo_expire, $hi_expire);
  	my ($lo_create, $hi_create, $sep);
  
  	open(COOKIES, $file) || return;
  
  	while ($key = <COOKIES>)
  	{
  		chomp($key);
  		chomp($value     = <COOKIES>);
  		chomp($domain_path= <COOKIES>);
  		chomp($flags     = <COOKIES>);		# 0x0001 bit is for secure
  		chomp($lo_expire = <COOKIES>);
  		chomp($hi_expire = <COOKIES>);
  		chomp($lo_create = <COOKIES>);
  		chomp($hi_create = <COOKIES>);
  		chomp($sep       = <COOKIES>);
  
  		if (!defined($key) || !defined($value) || !defined($domain_path) ||
  			!defined($flags) || !defined($hi_expire) || !defined($lo_expire) ||
  			!defined($hi_create) || !defined($lo_create) || !defined($sep) ||
  			($sep ne '*'))
  		{
  			last;
  		}
  
  		if ($domain_path =~ /^([^\/]+)(\/.*)$/)
  		{
  			my $domain = $1;
  			my $path = $2;
  
  			push(@cookies, {KEY => $key, VALUE => $value, DOMAIN => $domain,
  					PATH => $path, FLAGS =>$flags, HIXP =>$hi_expire,
  					LOXP => $lo_expire, HICREATE => $hi_create,
  					LOCREATE => $lo_create});
  		}
  	}
  
  	return \@cookies;
  }
  
  sub get_user_name
  {
  	use Win32;
  	use locale;
  	my $user = lc(Win32::LoginName());
  
  	return $user;
  }
  
  # MSIE stores create and expire times as Win32 FILETIME,
  # which is 64 bits of 100 nanosecond intervals since Jan 01 1601
  #
  # But Cookies code expects time in 32-bit value expressed
  # in seconds since Jan 01 1970
  #
  sub epoch_time_offset_from_win32_filetime
  {
  	my ($high, $low) = @_;
  
  	#--------------------------------------------------------
  	# USEFUL CONSTANT
  	#--------------------------------------------------------
  	# 0x019db1de 0xd53e8000 is 1970 Jan 01 00:00:00 in Win32 FILETIME
  	#
  	# 100 nanosecond intervals == 0.1 microsecond intervals
  	
  	my $filetime_low32_1970 = 0xd53e8000;
  	my $filetime_high32_1970 = 0x019db1de;
  
  	#------------------------------------
  	# ALGORITHM
  	#------------------------------------
  	# To go from 100 nanosecond intervals to seconds since 00:00 Jan 01 1970:
  	#
  	# 1. Adjust 100 nanosecond intervals to Jan 01 1970 base
  	# 2. Divide by 10 to get to microseconds (1/millionth second)
  	# 3. Divide by 1000000 (10 ^ 6) to get to seconds
  	#
  	# We can combine Step 2 & 3 into one divide.
  	#
  	# After much trial and error, I came up with the following code which
  	# avoids using Math::BigInt or floating pt, but still gives correct answers
  
  	# If the filetime is before the epoch, return 0
  	if (($high < $filetime_high32_1970) ||
  	    (($high == $filetime_high32_1970) && ($low < $filetime_low32_1970)))
      	{
  		return 0;
  	}
  
  	# Can't multiply by 0x100000000, (1 << 32),
  	# without Perl issuing an integer overflow warning
  	#
  	# So use two multiplies by 0x10000 instead of one multiply by 0x100000000
  	#
  	# The result is the same.
  	#
  	my $date1970 = (($filetime_high32_1970 * 0x10000) * 0x10000) + $filetime_low32_1970;
  	my $time = (($high * 0x10000) * 0x10000) + $low;
  
  	$time -= $date1970;
  	$time /= 10000000;
  
  	return $time;
  }
  
  sub load_cookie
  {
  	my($self, $file) = @_;
          my $now = time() - $HTTP::Cookies::EPOCH_OFFSET;
  	my $cookie_data;
  
          if (-f $file)
          {
  		# open the cookie file and get the data
  		$cookie_data = load_cookies_from_file($file);
  
  		foreach my $cookie (@{$cookie_data})
  		{
  			my $secure = ($cookie->{FLAGS} & 1) != 0;
  			my $expires = epoch_time_offset_from_win32_filetime($cookie->{HIXP}, $cookie->{LOXP});
  
  			$self->set_cookie(undef, $cookie->{KEY}, $cookie->{VALUE}, 
  					  $cookie->{PATH}, $cookie->{DOMAIN}, undef,
  					  0, $secure, $expires-$now, 0);
  		}
  	}
  }
  
  sub load
  {
  	my($self, $cookie_index) = @_;
  	my $now = time() - $HTTP::Cookies::EPOCH_OFFSET;
  	my $cookie_dir = '';
  	my $delay_load = (defined($self->{'delayload'}) && $self->{'delayload'});
  	my $user_name = get_user_name();
  	my $data;
  
  	$cookie_index ||= $self->{'file'} || return;
  	if ($cookie_index =~ /[\\\/][^\\\/]+$/)
  	{
  		$cookie_dir = $` . "\\";
  	}
  
  	local(*INDEX, $_);
  
  	open(INDEX, $cookie_index) || return;
  	binmode(INDEX);
  	if (256 != read(INDEX, $data, 256))
  	{
  		warn "$cookie_index file is not large enough";
  		close(INDEX);
  		return;
  	}
  
  	# Cookies' index.dat file starts with 32 bytes of signature
  	# followed by an offset to the first record, stored as a little-endian DWORD
  	my ($sig, $size) = unpack('a32 V', $data);
  	
  	if (($sig !~ /^Client UrlCache MMF Ver 5\.2/) || # check that sig is valid (only tested in IE6.0)
  		(0x4000 != $size))
  	{
  		warn "$cookie_index ['$sig' $size] does not seem to contain cookies";
  		close(INDEX);
  		return;
  	}
  
  	if (0 == seek(INDEX, $size, 0)) # move the file ptr to start of the first record
  	{
  		close(INDEX);
  		return;
  	}
  
  	# Cookies are usually stored in 'URL ' records in two contiguous 0x80 byte sectors (256 bytes)
  	# so read in two 0x80 byte sectors and adjust if not a Cookie.
  	while (256 == read(INDEX, $data, 256))
  	{
  		# each record starts with a 4-byte signature
  		# and a count (little-endian DWORD) of 0x80 byte sectors for the record
  		($sig, $size) = unpack('a4 V', $data);
  
  		# Cookies are found in 'URL ' records
  		if ('URL ' ne $sig)
  		{
  			# skip over uninteresting record: I've seen 'HASH' and 'LEAK' records
  			if (($sig eq 'HASH') || ($sig eq 'LEAK'))
  			{
  				# '-2' takes into account the two 0x80 byte sectors we've just read in
  				if (($size > 0) && ($size != 2))
  				{
  				    if (0 == seek(INDEX, ($size-2)*0x80, 1))
  				    {
  					    # Seek failed. Something's wrong. Gonna stop.
  					    last;
  				    }
  				}
  			}
  			next;
  		}
  
  		#$REMOVE Need to check if URL records in Cookies' index.dat will
  		#        ever use more than two 0x80 byte sectors
  		if ($size > 2)
  		{
  			my $more_data = ($size-2)*0x80;
  
  			if ($more_data != read(INDEX, $data, $more_data, 256))
  			{
  				last;
  			}
  		}
  
                  (my $user_name2 = $user_name) =~ s/ /_/g;
  		if ($data =~ /Cookie\:\Q$user_name\E\@([\x21-\xFF]+).*?((?:\Q$user_name\E|\Q$user_name2\E)\@[\x21-\xFF]+\.txt)/)
  		{
  			my $cookie_file = $cookie_dir . $2; # form full pathname
  
  			if (!$delay_load)
  			{
  				$self->load_cookie($cookie_file);
  			}
  			else
  			{
  				my $domain = $1;
  
  				# grab only the domain name, drop everything from the first dir sep on
  				if ($domain =~ m{[\\/]})
  				{
  					$domain = $`;
  				}
  
  				# set the delayload cookie for this domain with 
  				# the cookie_file as cookie for later-loading info
  				$self->set_cookie(undef, 'cookie', $cookie_file,
  						      '//+delayload', $domain, undef,
  						      0, 0, $now+86400, 0);
  			}
  		}
  	}
  
  	close(INDEX);
  
  	1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  HTTP::Cookies::Microsoft - access to Microsoft cookies files
  
  =head1 SYNOPSIS
  
   use LWP;
   use HTTP::Cookies::Microsoft;
   use Win32::TieRegistry(Delimiter => "/");
   my $cookies_dir = $Registry->
        {"CUser/Software/Microsoft/Windows/CurrentVersion/Explorer/Shell Folders/Cookies"};
  
   $cookie_jar = HTTP::Cookies::Microsoft->new(
                     file     => "$cookies_dir\\index.dat",
                     'delayload' => 1,
                 );
   my $browser = LWP::UserAgent->new;
   $browser->cookie_jar( $cookie_jar );
  
  =head1 DESCRIPTION
  
  This is a subclass of C<HTTP::Cookies> which
  loads Microsoft Internet Explorer 5.x and 6.x for Windows (MSIE)
  cookie files.
  
  See the documentation for L<HTTP::Cookies>.
  
  =head1 METHODS
  
  The following methods are provided:
  
  =over 4
  
  =item $cookie_jar = HTTP::Cookies::Microsoft->new;
  
  The constructor takes hash style parameters. In addition
  to the regular HTTP::Cookies parameters, HTTP::Cookies::Microsoft
  recognizes the following:
  
    delayload:       delay loading of cookie data until a request
                     is actually made. This results in faster
                     runtime unless you use most of the cookies
                     since only the domain's cookie data
                     is loaded on demand.
  
  =back
  
  =head1 CAVEATS
  
  Please note that the code DOESN'T support saving to the MSIE
  cookie file format.
  
  =head1 AUTHOR
  
  Johnny Lee <typo_pl@hotmail.com>
  
  =head1 COPYRIGHT
  
  Copyright 2002 Johnny Lee
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =cut
  
HTTP_COOKIES_MICROSOFT

    $main::fatpacked{"HTTP/Cookies/Netscape.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_COOKIES_NETSCAPE';
  package HTTP::Cookies::Netscape;
  
  use strict;
  use vars qw(@ISA $VERSION);
  
  $VERSION = "6.00";
  
  require HTTP::Cookies;
  @ISA=qw(HTTP::Cookies);
  
  sub load
  {
      my($self, $file) = @_;
      $file ||= $self->{'file'} || return;
      local(*FILE, $_);
      local $/ = "\n";  # make sure we got standard record separator
      my @cookies;
      open(FILE, $file) || return;
      my $magic = <FILE>;
      unless ($magic =~ /^\#(?: Netscape)? HTTP Cookie File/) {
  	warn "$file does not look like a netscape cookies file" if $^W;
  	close(FILE);
  	return;
      }
      my $now = time() - $HTTP::Cookies::EPOCH_OFFSET;
      while (<FILE>) {
  	next if /^\s*\#/;
  	next if /^\s*$/;
  	tr/\n\r//d;
  	my($domain,$bool1,$path,$secure, $expires,$key,$val) = split(/\t/, $_);
  	$secure = ($secure eq "TRUE");
  	$self->set_cookie(undef,$key,$val,$path,$domain,undef,
  			  0,$secure,$expires-$now, 0);
      }
      close(FILE);
      1;
  }
  
  sub save
  {
      my($self, $file) = @_;
      $file ||= $self->{'file'} || return;
      local(*FILE, $_);
      open(FILE, ">$file") || return;
  
      # Use old, now broken link to the old cookie spec just in case something
      # else (not us!) requires the comment block exactly this way.
      print FILE <<EOT;
  # Netscape HTTP Cookie File
  # http://www.netscape.com/newsref/std/cookie_spec.html
  # This is a generated file!  Do not edit.
  
  EOT
  
      my $now = time - $HTTP::Cookies::EPOCH_OFFSET;
      $self->scan(sub {
  	my($version,$key,$val,$path,$domain,$port,
  	   $path_spec,$secure,$expires,$discard,$rest) = @_;
  	return if $discard && !$self->{ignore_discard};
  	$expires = $expires ? $expires - $HTTP::Cookies::EPOCH_OFFSET : 0;
  	return if $now > $expires;
  	$secure = $secure ? "TRUE" : "FALSE";
  	my $bool = $domain =~ /^\./ ? "TRUE" : "FALSE";
  	print FILE join("\t", $domain, $bool, $path, $secure, $expires, $key, $val), "\n";
      });
      close(FILE);
      1;
  }
  
  1;
  __END__
  
  =head1 NAME
  
  HTTP::Cookies::Netscape - access to Netscape cookies files
  
  =head1 SYNOPSIS
  
   use LWP;
   use HTTP::Cookies::Netscape;
   $cookie_jar = HTTP::Cookies::Netscape->new(
     file => "c:/program files/netscape/users/ZombieCharity/cookies.txt",
   );
   my $browser = LWP::UserAgent->new;
   $browser->cookie_jar( $cookie_jar );
  
  =head1 DESCRIPTION
  
  This is a subclass of C<HTTP::Cookies> that reads (and optionally
  writes) Netscape/Mozilla cookie files.
  
  See the documentation for L<HTTP::Cookies>.
  
  =head1 CAVEATS
  
  Please note that the Netscape/Mozilla cookie file format can't store
  all the information available in the Set-Cookie2 headers, so you will
  probably lose some information if you save in this format.
  
  At time of writing, this module seems to work fine with Mozilla      
  Phoenix/Firebird.
  
  =head1 SEE ALSO
  
  L<HTTP::Cookies::Microsoft>
  
  =head1 COPYRIGHT
  
  Copyright 2002-2003 Gisle Aas
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =cut
HTTP_COOKIES_NETSCAPE

    $main::fatpacked{"HTTP/Daemon.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_DAEMON';
  package HTTP::Daemon;
  
  use strict;
  use vars qw($VERSION @ISA $PROTO $DEBUG);
  
  $VERSION = "6.01";
  
  use IO::Socket qw(AF_INET INADDR_ANY INADDR_LOOPBACK inet_ntoa);
  @ISA=qw(IO::Socket::INET);
  
  $PROTO = "HTTP/1.1";
  
  
  sub new
  {
      my($class, %args) = @_;
      $args{Listen} ||= 5;
      $args{Proto}  ||= 'tcp';
      return $class->SUPER::new(%args);
  }
  
  
  sub accept
  {
      my $self = shift;
      my $pkg = shift || "HTTP::Daemon::ClientConn";
      my ($sock, $peer) = $self->SUPER::accept($pkg);
      if ($sock) {
          ${*$sock}{'httpd_daemon'} = $self;
          return wantarray ? ($sock, $peer) : $sock;
      }
      else {
          return;
      }
  }
  
  
  sub url
  {
      my $self = shift;
      my $url = $self->_default_scheme . "://";
      my $addr = $self->sockaddr;
      if (!$addr || $addr eq INADDR_ANY) {
   	require Sys::Hostname;
   	$url .= lc Sys::Hostname::hostname();
      }
      elsif ($addr eq INADDR_LOOPBACK) {
  	$url .= inet_ntoa($addr);
      }
      else {
  	$url .= gethostbyaddr($addr, AF_INET) || inet_ntoa($addr);
      }
      my $port = $self->sockport;
      $url .= ":$port" if $port != $self->_default_port;
      $url .= "/";
      $url;
  }
  
  
  sub _default_port {
      80;
  }
  
  
  sub _default_scheme {
      "http";
  }
  
  
  sub product_tokens
  {
      "libwww-perl-daemon/$HTTP::Daemon::VERSION";
  }
  
  
  
  package HTTP::Daemon::ClientConn;
  
  use vars qw(@ISA $DEBUG);
  use IO::Socket ();
  @ISA=qw(IO::Socket::INET);
  *DEBUG = \$HTTP::Daemon::DEBUG;
  
  use HTTP::Request  ();
  use HTTP::Response ();
  use HTTP::Status;
  use HTTP::Date qw(time2str);
  use LWP::MediaTypes qw(guess_media_type);
  use Carp ();
  
  my $CRLF = "\015\012";   # "\r\n" is not portable
  my $HTTP_1_0 = _http_version("HTTP/1.0");
  my $HTTP_1_1 = _http_version("HTTP/1.1");
  
  
  sub get_request
  {
      my($self, $only_headers) = @_;
      if (${*$self}{'httpd_nomore'}) {
          $self->reason("No more requests from this connection");
  	return;
      }
  
      $self->reason("");
      my $buf = ${*$self}{'httpd_rbuf'};
      $buf = "" unless defined $buf;
  
      my $timeout = $ {*$self}{'io_socket_timeout'};
      my $fdset = "";
      vec($fdset, $self->fileno, 1) = 1;
      local($_);
  
    READ_HEADER:
      while (1) {
  	# loop until we have the whole header in $buf
  	$buf =~ s/^(?:\015?\012)+//;  # ignore leading blank lines
  	if ($buf =~ /\012/) {  # potential, has at least one line
  	    if ($buf =~ /^\w+[^\012]+HTTP\/\d+\.\d+\015?\012/) {
  		if ($buf =~ /\015?\012\015?\012/) {
  		    last READ_HEADER;  # we have it
  		}
  		elsif (length($buf) > 16*1024) {
  		    $self->send_error(413); # REQUEST_ENTITY_TOO_LARGE
  		    $self->reason("Very long header");
  		    return;
  		}
  	    }
  	    else {
  		last READ_HEADER;  # HTTP/0.9 client
  	    }
  	}
  	elsif (length($buf) > 16*1024) {
  	    $self->send_error(414); # REQUEST_URI_TOO_LARGE
  	    $self->reason("Very long first line");
  	    return;
  	}
  	print STDERR "Need more data for complete header\n" if $DEBUG;
  	return unless $self->_need_more($buf, $timeout, $fdset);
      }
      if ($buf !~ s/^(\S+)[ \t]+(\S+)(?:[ \t]+(HTTP\/\d+\.\d+))?[^\012]*\012//) {
  	${*$self}{'httpd_client_proto'} = _http_version("HTTP/1.0");
  	$self->send_error(400);  # BAD_REQUEST
  	$self->reason("Bad request line: $buf");
  	return;
      }
      my $method = $1;
      my $uri = $2;
      my $proto = $3 || "HTTP/0.9";
      $uri = "http://$uri" if $method eq "CONNECT";
      $uri = $HTTP::URI_CLASS->new($uri, $self->daemon->url);
      my $r = HTTP::Request->new($method, $uri);
      $r->protocol($proto);
      ${*$self}{'httpd_client_proto'} = $proto = _http_version($proto);
      ${*$self}{'httpd_head'} = ($method eq "HEAD");
  
      if ($proto >= $HTTP_1_0) {
  	# we expect to find some headers
  	my($key, $val);
        HEADER:
  	while ($buf =~ s/^([^\012]*)\012//) {
  	    $_ = $1;
  	    s/\015$//;
  	    if (/^([^:\s]+)\s*:\s*(.*)/) {
  		$r->push_header($key, $val) if $key;
  		($key, $val) = ($1, $2);
  	    }
  	    elsif (/^\s+(.*)/) {
  		$val .= " $1";
  	    }
  	    else {
  		last HEADER;
  	    }
  	}
  	$r->push_header($key, $val) if $key;
      }
  
      my $conn = $r->header('Connection');
      if ($proto >= $HTTP_1_1) {
  	${*$self}{'httpd_nomore'}++ if $conn && lc($conn) =~ /\bclose\b/;
      }
      else {
  	${*$self}{'httpd_nomore'}++ unless $conn &&
                                             lc($conn) =~ /\bkeep-alive\b/;
      }
  
      if ($only_headers) {
  	${*$self}{'httpd_rbuf'} = $buf;
          return $r;
      }
  
      # Find out how much content to read
      my $te  = $r->header('Transfer-Encoding');
      my $ct  = $r->header('Content-Type');
      my $len = $r->header('Content-Length');
  
      # Act on the Expect header, if it's there
      for my $e ( $r->header('Expect') ) {
          if( lc($e) eq '100-continue' ) {
              $self->send_status_line(100);
              $self->send_crlf;
          }
          else {
              $self->send_error(417);
              $self->reason("Unsupported Expect header value");
              return;
          }
      }
  
      if ($te && lc($te) eq 'chunked') {
  	# Handle chunked transfer encoding
  	my $body = "";
        CHUNK:
  	while (1) {
  	    print STDERR "Chunked\n" if $DEBUG;
  	    if ($buf =~ s/^([^\012]*)\012//) {
  		my $chunk_head = $1;
  		unless ($chunk_head =~ /^([0-9A-Fa-f]+)/) {
  		    $self->send_error(400);
  		    $self->reason("Bad chunk header $chunk_head");
  		    return;
  		}
  		my $size = hex($1);
  		last CHUNK if $size == 0;
  
  		my $missing = $size - length($buf) + 2; # 2=CRLF at chunk end
  		# must read until we have a complete chunk
  		while ($missing > 0) {
  		    print STDERR "Need $missing more bytes\n" if $DEBUG;
  		    my $n = $self->_need_more($buf, $timeout, $fdset);
  		    return unless $n;
  		    $missing -= $n;
  		}
  		$body .= substr($buf, 0, $size);
  		substr($buf, 0, $size+2) = '';
  
  	    }
  	    else {
  		# need more data in order to have a complete chunk header
  		return unless $self->_need_more($buf, $timeout, $fdset);
  	    }
  	}
  	$r->content($body);
  
  	# pretend it was a normal entity body
  	$r->remove_header('Transfer-Encoding');
  	$r->header('Content-Length', length($body));
  
  	my($key, $val);
        FOOTER:
  	while (1) {
  	    if ($buf !~ /\012/) {
  		# need at least one line to look at
  		return unless $self->_need_more($buf, $timeout, $fdset);
  	    }
  	    else {
  		$buf =~ s/^([^\012]*)\012//;
  		$_ = $1;
  		s/\015$//;
  		if (/^([\w\-]+)\s*:\s*(.*)/) {
  		    $r->push_header($key, $val) if $key;
  		    ($key, $val) = ($1, $2);
  		}
  		elsif (/^\s+(.*)/) {
  		    $val .= " $1";
  		}
  		elsif (!length) {
  		    last FOOTER;
  		}
  		else {
  		    $self->reason("Bad footer syntax");
  		    return;
  		}
  	    }
  	}
  	$r->push_header($key, $val) if $key;
  
      }
      elsif ($te) {
  	$self->send_error(501); 	# Unknown transfer encoding
  	$self->reason("Unknown transfer encoding '$te'");
  	return;
  
      }
      elsif ($len) {
  	# Plain body specified by "Content-Length"
  	my $missing = $len - length($buf);
  	while ($missing > 0) {
  	    print "Need $missing more bytes of content\n" if $DEBUG;
  	    my $n = $self->_need_more($buf, $timeout, $fdset);
  	    return unless $n;
  	    $missing -= $n;
  	}
  	if (length($buf) > $len) {
  	    $r->content(substr($buf,0,$len));
  	    substr($buf, 0, $len) = '';
  	}
  	else {
  	    $r->content($buf);
  	    $buf='';
  	}
      }
      elsif ($ct && $ct =~ m/^multipart\/\w+\s*;.*boundary\s*=\s*("?)(\w+)\1/i) {
  	# Handle multipart content type
  	my $boundary = "$CRLF--$2--";
  	my $index;
  	while (1) {
  	    $index = index($buf, $boundary);
  	    last if $index >= 0;
  	    # end marker not yet found
  	    return unless $self->_need_more($buf, $timeout, $fdset);
  	}
  	$index += length($boundary);
  	$r->content(substr($buf, 0, $index));
  	substr($buf, 0, $index) = '';
  
      }
      ${*$self}{'httpd_rbuf'} = $buf;
  
      $r;
  }
  
  
  sub _need_more
  {
      my $self = shift;
      #my($buf,$timeout,$fdset) = @_;
      if ($_[1]) {
  	my($timeout, $fdset) = @_[1,2];
  	print STDERR "select(,,,$timeout)\n" if $DEBUG;
  	my $n = select($fdset,undef,undef,$timeout);
  	unless ($n) {
  	    $self->reason(defined($n) ? "Timeout" : "select: $!");
  	    return;
  	}
      }
      print STDERR "sysread()\n" if $DEBUG;
      my $n = sysread($self, $_[0], 2048, length($_[0]));
      $self->reason(defined($n) ? "Client closed" : "sysread: $!") unless $n;
      $n;
  }
  
  
  sub read_buffer
  {
      my $self = shift;
      my $old = ${*$self}{'httpd_rbuf'};
      if (@_) {
  	${*$self}{'httpd_rbuf'} = shift;
      }
      $old;
  }
  
  
  sub reason
  {
      my $self = shift;
      my $old = ${*$self}{'httpd_reason'};
      if (@_) {
          ${*$self}{'httpd_reason'} = shift;
      }
      $old;
  }
  
  
  sub proto_ge
  {
      my $self = shift;
      ${*$self}{'httpd_client_proto'} >= _http_version(shift);
  }
  
  
  sub _http_version
  {
      local($_) = shift;
      return 0 unless m,^(?:HTTP/)?(\d+)\.(\d+)$,i;
      $1 * 1000 + $2;
  }
  
  
  sub antique_client
  {
      my $self = shift;
      ${*$self}{'httpd_client_proto'} < $HTTP_1_0;
  }
  
  
  sub force_last_request
  {
      my $self = shift;
      ${*$self}{'httpd_nomore'}++;
  }
  
  sub head_request
  {
      my $self = shift;
      ${*$self}{'httpd_head'};
  }
  
  
  sub send_status_line
  {
      my($self, $status, $message, $proto) = @_;
      return if $self->antique_client;
      $status  ||= RC_OK;
      $message ||= status_message($status) || "";
      $proto   ||= $HTTP::Daemon::PROTO || "HTTP/1.1";
      print $self "$proto $status $message$CRLF";
  }
  
  
  sub send_crlf
  {
      my $self = shift;
      print $self $CRLF;
  }
  
  
  sub send_basic_header
  {
      my $self = shift;
      return if $self->antique_client;
      $self->send_status_line(@_);
      print $self "Date: ", time2str(time), $CRLF;
      my $product = $self->daemon->product_tokens;
      print $self "Server: $product$CRLF" if $product;
  }
  
  
  sub send_header
  {
      my $self = shift;
      while (@_) {
  	my($k, $v) = splice(@_, 0, 2);
  	$v = "" unless defined($v);
  	print $self "$k: $v$CRLF";
      }
  }
  
  
  sub send_response
  {
      my $self = shift;
      my $res = shift;
      if (!ref $res) {
  	$res ||= RC_OK;
  	$res = HTTP::Response->new($res, @_);
      }
      my $content = $res->content;
      my $chunked;
      unless ($self->antique_client) {
  	my $code = $res->code;
  	$self->send_basic_header($code, $res->message, $res->protocol);
  	if ($code =~ /^(1\d\d|[23]04)$/) {
  	    # make sure content is empty
  	    $res->remove_header("Content-Length");
  	    $content = "";
  	}
  	elsif ($res->request && $res->request->method eq "HEAD") {
  	    # probably OK
  	}
  	elsif (ref($content) eq "CODE") {
  	    if ($self->proto_ge("HTTP/1.1")) {
  		$res->push_header("Transfer-Encoding" => "chunked");
  		$chunked++;
  	    }
  	    else {
  		$self->force_last_request;
  	    }
  	}
  	elsif (length($content)) {
  	    $res->header("Content-Length" => length($content));
  	}
  	else {
  	    $self->force_last_request;
              $res->header('connection','close'); 
  	}
  	print $self $res->headers_as_string($CRLF);
  	print $self $CRLF;  # separates headers and content
      }
      if ($self->head_request) {
  	# no content
      }
      elsif (ref($content) eq "CODE") {
  	while (1) {
  	    my $chunk = &$content();
  	    last unless defined($chunk) && length($chunk);
  	    if ($chunked) {
  		printf $self "%x%s%s%s", length($chunk), $CRLF, $chunk, $CRLF;
  	    }
  	    else {
  		print $self $chunk;
  	    }
  	}
  	print $self "0$CRLF$CRLF" if $chunked;  # no trailers either
      }
      elsif (length $content) {
  	print $self $content;
      }
  }
  
  
  sub send_redirect
  {
      my($self, $loc, $status, $content) = @_;
      $status ||= RC_MOVED_PERMANENTLY;
      Carp::croak("Status '$status' is not redirect") unless is_redirect($status);
      $self->send_basic_header($status);
      my $base = $self->daemon->url;
      $loc = $HTTP::URI_CLASS->new($loc, $base) unless ref($loc);
      $loc = $loc->abs($base);
      print $self "Location: $loc$CRLF";
      if ($content) {
  	my $ct = $content =~ /^\s*</ ? "text/html" : "text/plain";
  	print $self "Content-Type: $ct$CRLF";
      }
      print $self $CRLF;
      print $self $content if $content && !$self->head_request;
      $self->force_last_request;  # no use keeping the connection open
  }
  
  
  sub send_error
  {
      my($self, $status, $error) = @_;
      $status ||= RC_BAD_REQUEST;
      Carp::croak("Status '$status' is not an error") unless is_error($status);
      my $mess = status_message($status);
      $error  ||= "";
      $mess = <<EOT;
  <title>$status $mess</title>
  <h1>$status $mess</h1>
  $error
  EOT
      unless ($self->antique_client) {
          $self->send_basic_header($status);
          print $self "Content-Type: text/html$CRLF";
  	print $self "Content-Length: " . length($mess) . $CRLF;
          print $self $CRLF;
      }
      print $self $mess unless $self->head_request;
      $status;
  }
  
  
  sub send_file_response
  {
      my($self, $file) = @_;
      if (-d $file) {
  	$self->send_dir($file);
      }
      elsif (-f _) {
  	# plain file
  	local(*F);
  	sysopen(F, $file, 0) or 
  	  return $self->send_error(RC_FORBIDDEN);
  	binmode(F);
  	my($ct,$ce) = guess_media_type($file);
  	my($size,$mtime) = (stat _)[7,9];
  	unless ($self->antique_client) {
  	    $self->send_basic_header;
  	    print $self "Content-Type: $ct$CRLF";
  	    print $self "Content-Encoding: $ce$CRLF" if $ce;
  	    print $self "Content-Length: $size$CRLF" if $size;
  	    print $self "Last-Modified: ", time2str($mtime), "$CRLF" if $mtime;
  	    print $self $CRLF;
  	}
  	$self->send_file(\*F) unless $self->head_request;
  	return RC_OK;
      }
      else {
  	$self->send_error(RC_NOT_FOUND);
      }
  }
  
  
  sub send_dir
  {
      my($self, $dir) = @_;
      $self->send_error(RC_NOT_FOUND) unless -d $dir;
      $self->send_error(RC_NOT_IMPLEMENTED);
  }
  
  
  sub send_file
  {
      my($self, $file) = @_;
      my $opened = 0;
      local(*FILE);
      if (!ref($file)) {
  	open(FILE, $file) || return undef;
  	binmode(FILE);
  	$file = \*FILE;
  	$opened++;
      }
      my $cnt = 0;
      my $buf = "";
      my $n;
      while ($n = sysread($file, $buf, 8*1024)) {
  	last if !$n;
  	$cnt += $n;
  	print $self $buf;
      }
      close($file) if $opened;
      $cnt;
  }
  
  
  sub daemon
  {
      my $self = shift;
      ${*$self}{'httpd_daemon'};
  }
  
  
  1;
  
  __END__
  
  =head1 NAME
  
  HTTP::Daemon - a simple http server class
  
  =head1 SYNOPSIS
  
    use HTTP::Daemon;
    use HTTP::Status;
  
    my $d = HTTP::Daemon->new || die;
    print "Please contact me at: <URL:", $d->url, ">\n";
    while (my $c = $d->accept) {
        while (my $r = $c->get_request) {
  	  if ($r->method eq 'GET' and $r->uri->path eq "/xyzzy") {
                # remember, this is *not* recommended practice :-)
  	      $c->send_file_response("/etc/passwd");
  	  }
  	  else {
  	      $c->send_error(RC_FORBIDDEN)
  	  }
        }
        $c->close;
        undef($c);
    }
  
  =head1 DESCRIPTION
  
  Instances of the C<HTTP::Daemon> class are HTTP/1.1 servers that
  listen on a socket for incoming requests. The C<HTTP::Daemon> is a
  subclass of C<IO::Socket::INET>, so you can perform socket operations
  directly on it too.
  
  The accept() method will return when a connection from a client is
  available.  The returned value will be an C<HTTP::Daemon::ClientConn>
  object which is another C<IO::Socket::INET> subclass.  Calling the
  get_request() method on this object will read data from the client and
  return an C<HTTP::Request> object.  The ClientConn object also provide
  methods to send back various responses.
  
  This HTTP daemon does not fork(2) for you.  Your application, i.e. the
  user of the C<HTTP::Daemon> is responsible for forking if that is
  desirable.  Also note that the user is responsible for generating
  responses that conform to the HTTP/1.1 protocol.
  
  The following methods of C<HTTP::Daemon> are new (or enhanced) relative
  to the C<IO::Socket::INET> base class:
  
  =over 4
  
  =item $d = HTTP::Daemon->new
  
  =item $d = HTTP::Daemon->new( %opts )
  
  The constructor method takes the same arguments as the
  C<IO::Socket::INET> constructor, but unlike its base class it can also
  be called without any arguments.  The daemon will then set up a listen
  queue of 5 connections and allocate some random port number.
  
  A server that wants to bind to some specific address on the standard
  HTTP port will be constructed like this:
  
    $d = HTTP::Daemon->new(
             LocalAddr => 'www.thisplace.com',
             LocalPort => 80,
         );
  
  See L<IO::Socket::INET> for a description of other arguments that can
  be used configure the daemon during construction.
  
  =item $c = $d->accept
  
  =item $c = $d->accept( $pkg )
  
  =item ($c, $peer_addr) = $d->accept
  
  This method works the same the one provided by the base class, but it
  returns an C<HTTP::Daemon::ClientConn> reference by default.  If a
  package name is provided as argument, then the returned object will be
  blessed into the given class.  It is probably a good idea to make that
  class a subclass of C<HTTP::Daemon::ClientConn>.
  
  The accept method will return C<undef> if timeouts have been enabled
  and no connection is made within the given time.  The timeout() method
  is described in L<IO::Socket>.
  
  In list context both the client object and the peer address will be
  returned; see the description of the accept method L<IO::Socket> for
  details.
  
  =item $d->url
  
  Returns a URL string that can be used to access the server root.
  
  =item $d->product_tokens
  
  Returns the name that this server will use to identify itself.  This
  is the string that is sent with the C<Server> response header.  The
  main reason to have this method is that subclasses can override it if
  they want to use another product name.
  
  The default is the string "libwww-perl-daemon/#.##" where "#.##" is
  replaced with the version number of this module.
  
  =back
  
  The C<HTTP::Daemon::ClientConn> is a C<IO::Socket::INET>
  subclass. Instances of this class are returned by the accept() method
  of C<HTTP::Daemon>.  The following methods are provided:
  
  =over 4
  
  =item $c->get_request
  
  =item $c->get_request( $headers_only )
  
  This method reads data from the client and turns it into an
  C<HTTP::Request> object which is returned.  It returns C<undef>
  if reading fails.  If it fails, then the C<HTTP::Daemon::ClientConn>
  object ($c) should be discarded, and you should not try call this
  method again on it.  The $c->reason method might give you some
  information about why $c->get_request failed.
  
  The get_request() method will normally not return until the whole
  request has been received from the client.  This might not be what you
  want if the request is an upload of a large file (and with chunked
  transfer encoding HTTP can even support infinite request messages -
  uploading live audio for instance).  If you pass a TRUE value as the
  $headers_only argument, then get_request() will return immediately
  after parsing the request headers and you are responsible for reading
  the rest of the request content.  If you are going to call
  $c->get_request again on the same connection you better read the
  correct number of bytes.
  
  =item $c->read_buffer
  
  =item $c->read_buffer( $new_value )
  
  Bytes read by $c->get_request, but not used are placed in the I<read
  buffer>.  The next time $c->get_request is called it will consume the
  bytes in this buffer before reading more data from the network
  connection itself.  The read buffer is invalid after $c->get_request
  has failed.
  
  If you handle the reading of the request content yourself you need to
  empty this buffer before you read more and you need to place
  unconsumed bytes here.  You also need this buffer if you implement
  services like I<101 Switching Protocols>.
  
  This method always returns the old buffer content and can optionally
  replace the buffer content if you pass it an argument.
  
  =item $c->reason
  
  When $c->get_request returns C<undef> you can obtain a short string
  describing why it happened by calling $c->reason.
  
  =item $c->proto_ge( $proto )
  
  Return TRUE if the client announced a protocol with version number
  greater or equal to the given argument.  The $proto argument can be a
  string like "HTTP/1.1" or just "1.1".
  
  =item $c->antique_client
  
  Return TRUE if the client speaks the HTTP/0.9 protocol.  No status
  code and no headers should be returned to such a client.  This should
  be the same as !$c->proto_ge("HTTP/1.0").
  
  =item $c->head_request
  
  Return TRUE if the last request was a C<HEAD> request.  No content
  body must be generated for these requests.
  
  =item $c->force_last_request
  
  Make sure that $c->get_request will not try to read more requests off
  this connection.  If you generate a response that is not self
  delimiting, then you should signal this fact by calling this method.
  
  This attribute is turned on automatically if the client announces
  protocol HTTP/1.0 or worse and does not include a "Connection:
  Keep-Alive" header.  It is also turned on automatically when HTTP/1.1
  or better clients send the "Connection: close" request header.
  
  =item $c->send_status_line
  
  =item $c->send_status_line( $code )
  
  =item $c->send_status_line( $code, $mess )
  
  =item $c->send_status_line( $code, $mess, $proto )
  
  Send the status line back to the client.  If $code is omitted 200 is
  assumed.  If $mess is omitted, then a message corresponding to $code
  is inserted.  If $proto is missing the content of the
  $HTTP::Daemon::PROTO variable is used.
  
  =item $c->send_crlf
  
  Send the CRLF sequence to the client.
  
  =item $c->send_basic_header
  
  =item $c->send_basic_header( $code )
  
  =item $c->send_basic_header( $code, $mess )
  
  =item $c->send_basic_header( $code, $mess, $proto )
  
  Send the status line and the "Date:" and "Server:" headers back to
  the client.  This header is assumed to be continued and does not end
  with an empty CRLF line.
  
  See the description of send_status_line() for the description of the
  accepted arguments.
  
  =item $c->send_header( $field, $value )
  
  =item $c->send_header( $field1, $value1, $field2, $value2, ... )
  
  Send one or more header lines.
  
  =item $c->send_response( $res )
  
  Write a C<HTTP::Response> object to the
  client as a response.  We try hard to make sure that the response is
  self delimiting so that the connection can stay persistent for further
  request/response exchanges.
  
  The content attribute of the C<HTTP::Response> object can be a normal
  string or a subroutine reference.  If it is a subroutine, then
  whatever this callback routine returns is written back to the
  client as the response content.  The routine will be called until it
  return an undefined or empty value.  If the client is HTTP/1.1 aware
  then we will use chunked transfer encoding for the response.
  
  =item $c->send_redirect( $loc )
  
  =item $c->send_redirect( $loc, $code )
  
  =item $c->send_redirect( $loc, $code, $entity_body )
  
  Send a redirect response back to the client.  The location ($loc) can
  be an absolute or relative URL. The $code must be one the redirect
  status codes, and defaults to "301 Moved Permanently"
  
  =item $c->send_error
  
  =item $c->send_error( $code )
  
  =item $c->send_error( $code, $error_message )
  
  Send an error response back to the client.  If the $code is missing a
  "Bad Request" error is reported.  The $error_message is a string that
  is incorporated in the body of the HTML entity body.
  
  =item $c->send_file_response( $filename )
  
  Send back a response with the specified $filename as content.  If the
  file is a directory we try to generate an HTML index of it.
  
  =item $c->send_file( $filename )
  
  =item $c->send_file( $fd )
  
  Copy the file to the client.  The file can be a string (which
  will be interpreted as a filename) or a reference to an C<IO::Handle>
  or glob.
  
  =item $c->daemon
  
  Return a reference to the corresponding C<HTTP::Daemon> object.
  
  =back
  
  =head1 SEE ALSO
  
  RFC 2616
  
  L<IO::Socket::INET>, L<IO::Socket>
  
  =head1 COPYRIGHT
  
  Copyright 1996-2003, Gisle Aas
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
HTTP_DAEMON

    $main::fatpacked{"HTTP/Date.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_DATE';
  package HTTP::Date;
  
  $VERSION = "6.02";
  
  require Exporter;
  @ISA = qw(Exporter);
  @EXPORT = qw(time2str str2time);
  @EXPORT_OK = qw(parse_date time2iso time2isoz);
  
  use strict;
  require Time::Local;
  
  use vars qw(@DoW @MoY %MoY);
  @DoW = qw(Sun Mon Tue Wed Thu Fri Sat);
  @MoY = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
  @MoY{@MoY} = (1..12);
  
  my %GMT_ZONE = (GMT => 1, UTC => 1, UT => 1, Z => 1);
  
  
  sub time2str (;$)
  {
      my $time = shift;
      $time = time unless defined $time;
      my ($sec, $min, $hour, $mday, $mon, $year, $wday) = gmtime($time);
      sprintf("%s, %02d %s %04d %02d:%02d:%02d GMT",
  	    $DoW[$wday],
  	    $mday, $MoY[$mon], $year+1900,
  	    $hour, $min, $sec);
  }
  
  
  sub str2time ($;$)
  {
      my $str = shift;
      return undef unless defined $str;
  
      # fast exit for strictly conforming string
      if ($str =~ /^[SMTWF][a-z][a-z], (\d\d) ([JFMAJSOND][a-z][a-z]) (\d\d\d\d) (\d\d):(\d\d):(\d\d) GMT$/) {
  	return eval {
  	    my $t = Time::Local::timegm($6, $5, $4, $1, $MoY{$2}-1, $3);
  	    $t < 0 ? undef : $t;
  	};
      }
  
      my @d = parse_date($str);
      return undef unless @d;
      $d[1]--;        # month
  
      my $tz = pop(@d);
      unless (defined $tz) {
  	unless (defined($tz = shift)) {
  	    return eval { my $frac = $d[-1]; $frac -= ($d[-1] = int($frac));
  			  my $t = Time::Local::timelocal(reverse @d) + $frac;
  			  $t < 0 ? undef : $t;
  		        };
  	}
      }
  
      my $offset = 0;
      if ($GMT_ZONE{uc $tz}) {
  	# offset already zero
      }
      elsif ($tz =~ /^([-+])?(\d\d?):?(\d\d)?$/) {
  	$offset = 3600 * $2;
  	$offset += 60 * $3 if $3;
  	$offset *= -1 if $1 && $1 eq '-';
      }
      else {
  	eval { require Time::Zone } || return undef;
  	$offset = Time::Zone::tz_offset($tz);
  	return undef unless defined $offset;
      }
  
      return eval { my $frac = $d[-1]; $frac -= ($d[-1] = int($frac));
  		  my $t = Time::Local::timegm(reverse @d) + $frac;
  		  $t < 0 ? undef : $t - $offset;
  		};
  }
  
  
  sub parse_date ($)
  {
      local($_) = shift;
      return unless defined;
  
      # More lax parsing below
      s/^\s+//;  # kill leading space
      s/^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)[a-z]*,?\s*//i; # Useless weekday
  
      my($day, $mon, $yr, $hr, $min, $sec, $tz, $ampm);
  
      # Then we are able to check for most of the formats with this regexp
      (($day,$mon,$yr,$hr,$min,$sec,$tz) =
          /^
  	 (\d\d?)               # day
  	    (?:\s+|[-\/])
  	 (\w+)                 # month
  	    (?:\s+|[-\/])
  	 (\d+)                 # year
  	 (?:
  	       (?:\s+|:)       # separator before clock
  	    (\d\d?):(\d\d)     # hour:min
  	    (?::(\d\d))?       # optional seconds
  	 )?                    # optional clock
  	    \s*
  	 ([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+)? # timezone
  	    \s*
  	 (?:\(\w+\)|\w{3,})?   # ASCII representation of timezone.
  	    \s*$
  	/x)
  
      ||
  
      # Try the ctime and asctime format
      (($mon, $day, $hr, $min, $sec, $tz, $yr) =
  	/^
  	 (\w{1,3})             # month
  	    \s+
  	 (\d\d?)               # day
  	    \s+
  	 (\d\d?):(\d\d)        # hour:min
  	 (?::(\d\d))?          # optional seconds
  	    \s+
  	 (?:([A-Za-z]+)\s+)?   # optional timezone
  	 (\d+)                 # year
  	    \s*$               # allow trailing whitespace
  	/x)
  
      ||
  
      # Then the Unix 'ls -l' date format
      (($mon, $day, $yr, $hr, $min, $sec) =
  	/^
  	 (\w{3})               # month
  	    \s+
  	 (\d\d?)               # day
  	    \s+
  	 (?:
  	    (\d\d\d\d) |       # year
  	    (\d{1,2}):(\d{2})  # hour:min
              (?::(\d\d))?       # optional seconds
  	 )
  	 \s*$
         /x)
  
      ||
  
      # ISO 8601 format '1996-02-29 12:00:00 -0100' and variants
      (($yr, $mon, $day, $hr, $min, $sec, $tz) =
  	/^
  	  (\d{4})              # year
  	     [-\/]?
  	  (\d\d?)              # numerical month
  	     [-\/]?
  	  (\d\d?)              # day
  	 (?:
  	       (?:\s+|[-:Tt])  # separator before clock
  	    (\d\d?):?(\d\d)    # hour:min
  	    (?::?(\d\d(?:\.\d*)?))?  # optional seconds (and fractional)
  	 )?                    # optional clock
  	    \s*
  	 ([-+]?\d\d?:?(:?\d\d)?
  	  |Z|z)?               # timezone  (Z is "zero meridian", i.e. GMT)
  	    \s*$
  	/x)
  
      ||
  
      # Windows 'dir' 11-12-96  03:52PM
      (($mon, $day, $yr, $hr, $min, $ampm) =
          /^
            (\d{2})                # numerical month
               -
            (\d{2})                # day
               -
            (\d{2})                # year
               \s+
            (\d\d?):(\d\d)([APap][Mm])  # hour:min AM or PM
               \s*$
          /x)
  
      ||
      return;  # unrecognized format
  
      # Translate month name to number
      $mon = $MoY{$mon} ||
             $MoY{"\u\L$mon"} ||
  	   ($mon =~ /^\d\d?$/ && $mon >= 1 && $mon <= 12 && int($mon)) ||
             return;
  
      # If the year is missing, we assume first date before the current,
      # because of the formats we support such dates are mostly present
      # on "ls -l" listings.
      unless (defined $yr) {
  	my $cur_mon;
  	($cur_mon, $yr) = (localtime)[4, 5];
  	$yr += 1900;
  	$cur_mon++;
  	$yr-- if $mon > $cur_mon;
      }
      elsif (length($yr) < 3) {
  	# Find "obvious" year
  	my $cur_yr = (localtime)[5] + 1900;
  	my $m = $cur_yr % 100;
  	my $tmp = $yr;
  	$yr += $cur_yr - $m;
  	$m -= $tmp;
  	$yr += ($m > 0) ? 100 : -100
  	    if abs($m) > 50;
      }
  
      # Make sure clock elements are defined
      $hr  = 0 unless defined($hr);
      $min = 0 unless defined($min);
      $sec = 0 unless defined($sec);
  
      # Compensate for AM/PM
      if ($ampm) {
  	$ampm = uc $ampm;
  	$hr = 0 if $hr == 12 && $ampm eq 'AM';
  	$hr += 12 if $ampm eq 'PM' && $hr != 12;
      }
  
      return($yr, $mon, $day, $hr, $min, $sec, $tz)
  	if wantarray;
  
      if (defined $tz) {
  	$tz = "Z" if $tz =~ /^(GMT|UTC?|[-+]?0+)$/;
      }
      else {
  	$tz = "";
      }
      return sprintf("%04d-%02d-%02d %02d:%02d:%02d%s",
  		   $yr, $mon, $day, $hr, $min, $sec, $tz);
  }
  
  
  sub time2iso (;$)
  {
      my $time = shift;
      $time = time unless defined $time;
      my($sec,$min,$hour,$mday,$mon,$year) = localtime($time);
      sprintf("%04d-%02d-%02d %02d:%02d:%02d",
  	    $year+1900, $mon+1, $mday, $hour, $min, $sec);
  }
  
  
  sub time2isoz (;$)
  {
      my $time = shift;
      $time = time unless defined $time;
      my($sec,$min,$hour,$mday,$mon,$year) = gmtime($time);
      sprintf("%04d-%02d-%02d %02d:%02d:%02dZ",
              $year+1900, $mon+1, $mday, $hour, $min, $sec);
  }
  
  1;
  
  
  __END__
  
  =head1 NAME
  
  HTTP::Date - date conversion routines
  
  =head1 SYNOPSIS
  
   use HTTP::Date;
  
   $string = time2str($time);    # Format as GMT ASCII time
   $time = str2time($string);    # convert ASCII date to machine time
  
  =head1 DESCRIPTION
  
  This module provides functions that deal the date formats used by the
  HTTP protocol (and then some more).  Only the first two functions,
  time2str() and str2time(), are exported by default.
  
  =over 4
  
  =item time2str( [$time] )
  
  The time2str() function converts a machine time (seconds since epoch)
  to a string.  If the function is called without an argument or with an
  undefined argument, it will use the current time.
  
  The string returned is in the format preferred for the HTTP protocol.
  This is a fixed length subset of the format defined by RFC 1123,
  represented in Universal Time (GMT).  An example of a time stamp
  in this format is:
  
     Sun, 06 Nov 1994 08:49:37 GMT
  
  =item str2time( $str [, $zone] )
  
  The str2time() function converts a string to machine time.  It returns
  C<undef> if the format of $str is unrecognized, otherwise whatever the
  C<Time::Local> functions can make out of the parsed time.  Dates
  before the system's epoch may not work on all operating systems.  The
  time formats recognized are the same as for parse_date().
  
  The function also takes an optional second argument that specifies the
  default time zone to use when converting the date.  This parameter is
  ignored if the zone is found in the date string itself.  If this
  parameter is missing, and the date string format does not contain any
  zone specification, then the local time zone is assumed.
  
  If the zone is not "C<GMT>" or numerical (like "C<-0800>" or
  "C<+0100>"), then the C<Time::Zone> module must be installed in order
  to get the date recognized.
  
  =item parse_date( $str )
  
  This function will try to parse a date string, and then return it as a
  list of numerical values followed by a (possible undefined) time zone
  specifier; ($year, $month, $day, $hour, $min, $sec, $tz).  The $year
  will be the full 4-digit year, and $month numbers start with 1 (for January).
  
  In scalar context the numbers are interpolated in a string of the
  "YYYY-MM-DD hh:mm:ss TZ"-format and returned.
  
  If the date is unrecognized, then the empty list is returned (C<undef> in
  scalar context).
  
  The function is able to parse the following formats:
  
   "Wed, 09 Feb 1994 22:23:32 GMT"       -- HTTP format
   "Thu Feb  3 17:03:55 GMT 1994"        -- ctime(3) format
   "Thu Feb  3 00:00:00 1994",           -- ANSI C asctime() format
   "Tuesday, 08-Feb-94 14:15:29 GMT"     -- old rfc850 HTTP format
   "Tuesday, 08-Feb-1994 14:15:29 GMT"   -- broken rfc850 HTTP format
  
   "03/Feb/1994:17:03:55 -0700"   -- common logfile format
   "09 Feb 1994 22:23:32 GMT"     -- HTTP format (no weekday)
   "08-Feb-94 14:15:29 GMT"       -- rfc850 format (no weekday)
   "08-Feb-1994 14:15:29 GMT"     -- broken rfc850 format (no weekday)
  
   "1994-02-03 14:15:29 -0100"    -- ISO 8601 format
   "1994-02-03 14:15:29"          -- zone is optional
   "1994-02-03"                   -- only date
   "1994-02-03T14:15:29"          -- Use T as separator
   "19940203T141529Z"             -- ISO 8601 compact format
   "19940203"                     -- only date
  
   "08-Feb-94"         -- old rfc850 HTTP format    (no weekday, no time)
   "08-Feb-1994"       -- broken rfc850 HTTP format (no weekday, no time)
   "09 Feb 1994"       -- proposed new HTTP format  (no weekday, no time)
   "03/Feb/1994"       -- common logfile format     (no time, no offset)
  
   "Feb  3  1994"      -- Unix 'ls -l' format
   "Feb  3 17:03"      -- Unix 'ls -l' format
  
   "11-15-96  03:52PM" -- Windows 'dir' format
  
  The parser ignores leading and trailing whitespace.  It also allow the
  seconds to be missing and the month to be numerical in most formats.
  
  If the year is missing, then we assume that the date is the first
  matching date I<before> current month.  If the year is given with only
  2 digits, then parse_date() will select the century that makes the
  year closest to the current date.
  
  =item time2iso( [$time] )
  
  Same as time2str(), but returns a "YYYY-MM-DD hh:mm:ss"-formatted
  string representing time in the local time zone.
  
  =item time2isoz( [$time] )
  
  Same as time2str(), but returns a "YYYY-MM-DD hh:mm:ssZ"-formatted
  string representing Universal Time.
  
  
  =back
  
  =head1 SEE ALSO
  
  L<perlfunc/time>, L<Time::Zone>
  
  =head1 COPYRIGHT
  
  Copyright 1995-1999, Gisle Aas
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =cut
HTTP_DATE

    $main::fatpacked{"HTTP/Headers.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_HEADERS';
  package HTTP::Headers;
  
  use strict;
  use warnings;
  
  use Carp ();
  
  our $VERSION = "6.11";
  
  # The $TRANSLATE_UNDERSCORE variable controls whether '_' can be used
  # as a replacement for '-' in header field names.
  our $TRANSLATE_UNDERSCORE = 1 unless defined $TRANSLATE_UNDERSCORE;
  
  # "Good Practice" order of HTTP message headers:
  #    - General-Headers
  #    - Request-Headers
  #    - Response-Headers
  #    - Entity-Headers
  
  my @general_headers = qw(
      Cache-Control Connection Date Pragma Trailer Transfer-Encoding Upgrade
      Via Warning
  );
  
  my @request_headers = qw(
      Accept Accept-Charset Accept-Encoding Accept-Language
      Authorization Expect From Host
      If-Match If-Modified-Since If-None-Match If-Range If-Unmodified-Since
      Max-Forwards Proxy-Authorization Range Referer TE User-Agent
  );
  
  my @response_headers = qw(
      Accept-Ranges Age ETag Location Proxy-Authenticate Retry-After Server
      Vary WWW-Authenticate
  );
  
  my @entity_headers = qw(
      Allow Content-Encoding Content-Language Content-Length Content-Location
      Content-MD5 Content-Range Content-Type Expires Last-Modified
  );
  
  my %entity_header = map { lc($_) => 1 } @entity_headers;
  
  my @header_order = (
      @general_headers,
      @request_headers,
      @response_headers,
      @entity_headers,
  );
  
  # Make alternative representations of @header_order.  This is used
  # for sorting and case matching.
  my %header_order;
  my %standard_case;
  
  {
      my $i = 0;
      for (@header_order) {
  	my $lc = lc $_;
  	$header_order{$lc} = ++$i;
  	$standard_case{$lc} = $_;
      }
  }
  
  
  
  sub new
  {
      my($class) = shift;
      my $self = bless {}, $class;
      $self->header(@_) if @_; # set up initial headers
      $self;
  }
  
  
  sub header
  {
      my $self = shift;
      Carp::croak('Usage: $h->header($field, ...)') unless @_;
      my(@old);
      my %seen;
      while (@_) {
  	my $field = shift;
          my $op = @_ ? ($seen{lc($field)}++ ? 'PUSH' : 'SET') : 'GET';
  	@old = $self->_header($field, shift, $op);
      }
      return @old if wantarray;
      return $old[0] if @old <= 1;
      join(", ", @old);
  }
  
  sub clear
  {
      my $self = shift;
      %$self = ();
  }
  
  
  sub push_header
  {
      my $self = shift;
      return $self->_header(@_, 'PUSH_H') if @_ == 2;
      while (@_) {
  	$self->_header(splice(@_, 0, 2), 'PUSH_H');
      }
  }
  
  
  sub init_header
  {
      Carp::croak('Usage: $h->init_header($field, $val)') if @_ != 3;
      shift->_header(@_, 'INIT');
  }
  
  
  sub remove_header
  {
      my($self, @fields) = @_;
      my $field;
      my @values;
      foreach $field (@fields) {
  	$field =~ tr/_/-/ if $field !~ /^:/ && $TRANSLATE_UNDERSCORE;
  	my $v = delete $self->{lc $field};
  	push(@values, ref($v) eq 'ARRAY' ? @$v : $v) if defined $v;
      }
      return @values;
  }
  
  sub remove_content_headers
  {
      my $self = shift;
      unless (defined(wantarray)) {
  	# fast branch that does not create return object
  	delete @$self{grep $entity_header{$_} || /^content-/, keys %$self};
  	return;
      }
  
      my $c = ref($self)->new;
      for my $f (grep $entity_header{$_} || /^content-/, keys %$self) {
  	$c->{$f} = delete $self->{$f};
      }
      if (exists $self->{'::std_case'}) {
  	$c->{'::std_case'} = $self->{'::std_case'};
      }
      $c;
  }
  
  
  sub _header
  {
      my($self, $field, $val, $op) = @_;
  
      Carp::croak("Illegal field name '$field'")
          if rindex($field, ':') > 1 || !length($field);
  
      unless ($field =~ /^:/) {
  	$field =~ tr/_/-/ if $TRANSLATE_UNDERSCORE;
  	my $old = $field;
  	$field = lc $field;
  	unless($standard_case{$field} || $self->{'::std_case'}{$field}) {
  	    # generate a %std_case entry for this field
  	    $old =~ s/\b(\w)/\u$1/g;
  	    $self->{'::std_case'}{$field} = $old;
  	}
      }
  
      $op ||= defined($val) ? 'SET' : 'GET';
      if ($op eq 'PUSH_H') {
  	# Like PUSH but where we don't care about the return value
  	if (exists $self->{$field}) {
  	    my $h = $self->{$field};
  	    if (ref($h) eq 'ARRAY') {
  		push(@$h, ref($val) eq "ARRAY" ? @$val : $val);
  	    }
  	    else {
  		$self->{$field} = [$h, ref($val) eq "ARRAY" ? @$val : $val]
  	    }
  	    return;
  	}
  	$self->{$field} = $val;
  	return;
      }
  
      my $h = $self->{$field};
      my @old = ref($h) eq 'ARRAY' ? @$h : (defined($h) ? ($h) : ());
  
      unless ($op eq 'GET' || ($op eq 'INIT' && @old)) {
  	if (defined($val)) {
  	    my @new = ($op eq 'PUSH') ? @old : ();
  	    if (ref($val) ne 'ARRAY') {
  		push(@new, $val);
  	    }
  	    else {
  		push(@new, @$val);
  	    }
  	    $self->{$field} = @new > 1 ? \@new : $new[0];
  	}
  	elsif ($op ne 'PUSH') {
  	    delete $self->{$field};
  	}
      }
      @old;
  }
  
  
  sub _sorted_field_names
  {
      my $self = shift;
      return [ sort {
          ($header_order{$a} || 999) <=> ($header_order{$b} || 999) ||
           $a cmp $b
      } grep !/^::/, keys %$self ];
  }
  
  
  sub header_field_names {
      my $self = shift;
      return map $standard_case{$_} || $self->{'::std_case'}{$_} || $_, @{ $self->_sorted_field_names },
  	if wantarray;
      return grep !/^::/, keys %$self;
  }
  
  
  sub scan
  {
      my($self, $sub) = @_;
      my $key;
      for $key (@{ $self->_sorted_field_names }) {
  	my $vals = $self->{$key};
  	if (ref($vals) eq 'ARRAY') {
  	    my $val;
  	    for $val (@$vals) {
  		$sub->($standard_case{$key} || $self->{'::std_case'}{$key} || $key, $val);
  	    }
  	}
  	else {
  	    $sub->($standard_case{$key} || $self->{'::std_case'}{$key} || $key, $vals);
  	}
      }
  }
  
  sub flatten {
  	my($self)=@_;
  
  	(
  		map {
  			my $k = $_;
  			map {
  				( $k => $_ )
  			} $self->header($_);
  		} $self->header_field_names
  	);
  }
  
  sub as_string
  {
      my($self, $endl) = @_;
      $endl = "\n" unless defined $endl;
  
      my @result = ();
      for my $key (@{ $self->_sorted_field_names }) {
  	next if index($key, '_') == 0;
  	my $vals = $self->{$key};
  	if ( ref($vals) eq 'ARRAY' ) {
  	    for my $val (@$vals) {
  		$val = '' if not defined $val;
  		my $field = $standard_case{$key} || $self->{'::std_case'}{$key} || $key;
  		$field =~ s/^://;
  		if ( index($val, "\n") >= 0 ) {
  		    $val = _process_newline($val, $endl);
  		}
  		push @result, $field . ': ' . $val;
  	    }
  	}
  	else {
  	    $vals = '' if not defined $vals;
  	    my $field = $standard_case{$key} || $self->{'::std_case'}{$key} || $key;
  	    $field =~ s/^://;
  	    if ( index($vals, "\n") >= 0 ) {
  		$vals = _process_newline($vals, $endl);
  	    }
  	    push @result, $field . ': ' . $vals;
  	}
      }
  
      join($endl, @result, '');
  }
  
  sub _process_newline {
      local $_ = shift;
      my $endl = shift;
      # must handle header values with embedded newlines with care
      s/\s+$//;        # trailing newlines and space must go
      s/\n(\x0d?\n)+/\n/g;     # no empty lines
      s/\n([^\040\t])/\n $1/g; # initial space for continuation
      s/\n/$endl/g;    # substitute with requested line ending
      $_;
  }
  
  
  
  if (eval { require Storable; 1 }) {
      *clone = \&Storable::dclone;
  } else {
      *clone = sub {
  	my $self = shift;
  	my $clone = HTTP::Headers->new;
  	$self->scan(sub { $clone->push_header(@_);} );
  	$clone;
      };
  }
  
  
  sub _date_header
  {
      require HTTP::Date;
      my($self, $header, $time) = @_;
      my($old) = $self->_header($header);
      if (defined $time) {
  	$self->_header($header, HTTP::Date::time2str($time));
      }
      $old =~ s/;.*// if defined($old);
      HTTP::Date::str2time($old);
  }
  
  
  sub date                { shift->_date_header('Date',                @_); }
  sub expires             { shift->_date_header('Expires',             @_); }
  sub if_modified_since   { shift->_date_header('If-Modified-Since',   @_); }
  sub if_unmodified_since { shift->_date_header('If-Unmodified-Since', @_); }
  sub last_modified       { shift->_date_header('Last-Modified',       @_); }
  
  # This is used as a private LWP extension.  The Client-Date header is
  # added as a timestamp to a response when it has been received.
  sub client_date         { shift->_date_header('Client-Date',         @_); }
  
  # The retry_after field is dual format (can also be a expressed as
  # number of seconds from now), so we don't provide an easy way to
  # access it until we have know how both these interfaces can be
  # addressed.  One possibility is to return a negative value for
  # relative seconds and a positive value for epoch based time values.
  #sub retry_after       { shift->_date_header('Retry-After',       @_); }
  
  sub content_type      {
      my $self = shift;
      my $ct = $self->{'content-type'};
      $self->{'content-type'} = shift if @_;
      $ct = $ct->[0] if ref($ct) eq 'ARRAY';
      return '' unless defined($ct) && length($ct);
      my @ct = split(/;\s*/, $ct, 2);
      for ($ct[0]) {
  	s/\s+//g;
  	$_ = lc($_);
      }
      wantarray ? @ct : $ct[0];
  }
  
  sub content_type_charset {
      my $self = shift;
      require HTTP::Headers::Util;
      my $h = $self->{'content-type'};
      $h = $h->[0] if ref($h);
      $h = "" unless defined $h;
      my @v = HTTP::Headers::Util::split_header_words($h);
      if (@v) {
  	my($ct, undef, %ct_param) = @{$v[0]};
  	my $charset = $ct_param{charset};
  	if ($ct) {
  	    $ct = lc($ct);
  	    $ct =~ s/\s+//;
  	}
  	if ($charset) {
  	    $charset = uc($charset);
  	    $charset =~ s/^\s+//;  $charset =~ s/\s+\z//;
  	    undef($charset) if $charset eq "";
  	}
  	return $ct, $charset if wantarray;
  	return $charset;
      }
      return undef, undef if wantarray;
      return undef;
  }
  
  sub content_is_text {
      my $self = shift;
      return $self->content_type =~ m,^text/,;
  }
  
  sub content_is_html {
      my $self = shift;
      return $self->content_type eq 'text/html' || $self->content_is_xhtml;
  }
  
  sub content_is_xhtml {
      my $ct = shift->content_type;
      return $ct eq "application/xhtml+xml" ||
             $ct eq "application/vnd.wap.xhtml+xml";
  }
  
  sub content_is_xml {
      my $ct = shift->content_type;
      return 1 if $ct eq "text/xml";
      return 1 if $ct eq "application/xml";
      return 1 if $ct =~ /\+xml$/;
      return 0;
  }
  
  sub referer           {
      my $self = shift;
      if (@_ && $_[0] =~ /#/) {
  	# Strip fragment per RFC 2616, section 14.36.
  	my $uri = shift;
  	if (ref($uri)) {
  	    $uri = $uri->clone;
  	    $uri->fragment(undef);
  	}
  	else {
  	    $uri =~ s/\#.*//;
  	}
  	unshift @_, $uri;
      }
      ($self->_header('Referer', @_))[0];
  }
  *referrer = \&referer;  # on tchrist's request
  
  sub title             { (shift->_header('Title',            @_))[0] }
  sub content_encoding  { (shift->_header('Content-Encoding', @_))[0] }
  sub content_language  { (shift->_header('Content-Language', @_))[0] }
  sub content_length    { (shift->_header('Content-Length',   @_))[0] }
  
  sub user_agent        { (shift->_header('User-Agent',       @_))[0] }
  sub server            { (shift->_header('Server',           @_))[0] }
  
  sub from              { (shift->_header('From',             @_))[0] }
  sub warning           { (shift->_header('Warning',          @_))[0] }
  
  sub www_authenticate  { (shift->_header('WWW-Authenticate', @_))[0] }
  sub authorization     { (shift->_header('Authorization',    @_))[0] }
  
  sub proxy_authenticate  { (shift->_header('Proxy-Authenticate',  @_))[0] }
  sub proxy_authorization { (shift->_header('Proxy-Authorization', @_))[0] }
  
  sub authorization_basic       { shift->_basic_auth("Authorization",       @_) }
  sub proxy_authorization_basic { shift->_basic_auth("Proxy-Authorization", @_) }
  
  sub _basic_auth {
      require MIME::Base64;
      my($self, $h, $user, $passwd) = @_;
      my($old) = $self->_header($h);
      if (defined $user) {
  	Carp::croak("Basic authorization user name can't contain ':'")
  	  if $user =~ /:/;
  	$passwd = '' unless defined $passwd;
  	$self->_header($h => 'Basic ' .
                               MIME::Base64::encode("$user:$passwd", ''));
      }
      if (defined $old && $old =~ s/^\s*Basic\s+//) {
  	my $val = MIME::Base64::decode($old);
  	return $val unless wantarray;
  	return split(/:/, $val, 2);
      }
      return;
  }
  
  
  1;
  
  __END__
  
  =head1 NAME
  
  HTTP::Headers - Class encapsulating HTTP Message headers
  
  =head1 SYNOPSIS
  
   require HTTP::Headers;
   $h = HTTP::Headers->new;
  
   $h->header('Content-Type' => 'text/plain');  # set
   $ct = $h->header('Content-Type');            # get
   $h->remove_header('Content-Type');           # delete
  
  =head1 DESCRIPTION
  
  The C<HTTP::Headers> class encapsulates HTTP-style message headers.
  The headers consist of attribute-value pairs also called fields, which
  may be repeated, and which are printed in a particular order.  The
  field names are cases insensitive.
  
  Instances of this class are usually created as member variables of the
  C<HTTP::Request> and C<HTTP::Response> classes, internal to the
  library.
  
  The following methods are available:
  
  =over 4
  
  =item $h = HTTP::Headers->new
  
  Constructs a new C<HTTP::Headers> object.  You might pass some initial
  attribute-value pairs as parameters to the constructor.  I<E.g.>:
  
   $h = HTTP::Headers->new(
         Date         => 'Thu, 03 Feb 1994 00:00:00 GMT',
         Content_Type => 'text/html; version=3.2',
         Content_Base => 'http://www.perl.org/');
  
  The constructor arguments are passed to the C<header> method which is
  described below.
  
  =item $h->clone
  
  Returns a copy of this C<HTTP::Headers> object.
  
  =item $h->header( $field )
  
  =item $h->header( $field => $value )
  
  =item $h->header( $f1 => $v1, $f2 => $v2, ... )
  
  Get or set the value of one or more header fields.  The header field
  name ($field) is not case sensitive.  To make the life easier for perl
  users who wants to avoid quoting before the => operator, you can use
  '_' as a replacement for '-' in header names.
  
  The header() method accepts multiple ($field => $value) pairs, which
  means that you can update several fields with a single invocation.
  
  The $value argument may be a plain string or a reference to an array
  of strings for a multi-valued field. If the $value is provided as
  C<undef> then the field is removed.  If the $value is not given, then
  that header field will remain unchanged.
  
  The old value (or values) of the last of the header fields is returned.
  If no such field exists C<undef> will be returned.
  
  A multi-valued field will be returned as separate values in list
  context and will be concatenated with ", " as separator in scalar
  context.  The HTTP spec (RFC 2616) promises that joining multiple
  values in this way will not change the semantic of a header field, but
  in practice there are cases like old-style Netscape cookies (see
  L<HTTP::Cookies>) where "," is used as part of the syntax of a single
  field value.
  
  Examples:
  
   $header->header(MIME_Version => '1.0',
  		 User_Agent   => 'My-Web-Client/0.01');
   $header->header(Accept => "text/html, text/plain, image/*");
   $header->header(Accept => [qw(text/html text/plain image/*)]);
   @accepts = $header->header('Accept');  # get multiple values
   $accepts = $header->header('Accept');  # get values as a single string
  
  =item $h->push_header( $field => $value )
  
  =item $h->push_header( $f1 => $v1, $f2 => $v2, ... )
  
  Add a new field value for the specified header field.  Previous values
  for the same field are retained.
  
  As for the header() method, the field name ($field) is not case
  sensitive and '_' can be used as a replacement for '-'.
  
  The $value argument may be a scalar or a reference to a list of
  scalars.
  
   $header->push_header(Accept => 'image/jpeg');
   $header->push_header(Accept => [map "image/$_", qw(gif png tiff)]);
  
  =item $h->init_header( $field => $value )
  
  Set the specified header to the given value, but only if no previous
  value for that field is set.
  
  The header field name ($field) is not case sensitive and '_'
  can be used as a replacement for '-'.
  
  The $value argument may be a scalar or a reference to a list of
  scalars.
  
  =item $h->remove_header( $field, ... )
  
  This function removes the header fields with the specified names.
  
  The header field names ($field) are not case sensitive and '_'
  can be used as a replacement for '-'.
  
  The return value is the values of the fields removed.  In scalar
  context the number of fields removed is returned.
  
  Note that if you pass in multiple field names then it is generally not
  possible to tell which of the returned values belonged to which field.
  
  =item $h->remove_content_headers
  
  This will remove all the header fields used to describe the content of
  a message.  All header field names prefixed with C<Content-> fall
  into this category, as well as C<Allow>, C<Expires> and
  C<Last-Modified>.  RFC 2616 denotes these fields as I<Entity Header
  Fields>.
  
  The return value is a new C<HTTP::Headers> object that contains the
  removed headers only.
  
  =item $h->clear
  
  This will remove all header fields.
  
  =item $h->header_field_names
  
  Returns the list of distinct names for the fields present in the
  header.  The field names have case as suggested by HTTP spec, and the
  names are returned in the recommended "Good Practice" order.
  
  In scalar context return the number of distinct field names.
  
  =item $h->scan( \&process_header_field )
  
  Apply a subroutine to each header field in turn.  The callback routine
  is called with two parameters; the name of the field and a single
  value (a string).  If a header field is multi-valued, then the
  routine is called once for each value.  The field name passed to the
  callback routine has case as suggested by HTTP spec, and the headers
  will be visited in the recommended "Good Practice" order.
  
  Any return values of the callback routine are ignored.  The loop can
  be broken by raising an exception (C<die>), but the caller of scan()
  would have to trap the exception itself.
  
  =item $h->flatten()
  
  Returns the list of pairs of keys and values.
  
  =item $h->as_string
  
  =item $h->as_string( $eol )
  
  Return the header fields as a formatted MIME header.  Since it
  internally uses the C<scan> method to build the string, the result
  will use case as suggested by HTTP spec, and it will follow
  recommended "Good Practice" of ordering the header fields.  Long header
  values are not folded.
  
  The optional $eol parameter specifies the line ending sequence to
  use.  The default is "\n".  Embedded "\n" characters in header field
  values will be substituted with this line ending sequence.
  
  =back
  
  =head1 CONVENIENCE METHODS
  
  The most frequently used headers can also be accessed through the
  following convenience methods.  Most of these methods can both be used to read
  and to set the value of a header.  The header value is set if you pass
  an argument to the method.  The old header value is always returned.
  If the given header did not exist then C<undef> is returned.
  
  Methods that deal with dates/times always convert their value to system
  time (seconds since Jan 1, 1970) and they also expect this kind of
  value when the header value is set.
  
  =over 4
  
  =item $h->date
  
  This header represents the date and time at which the message was
  originated. I<E.g.>:
  
    $h->date(time);  # set current date
  
  =item $h->expires
  
  This header gives the date and time after which the entity should be
  considered stale.
  
  =item $h->if_modified_since
  
  =item $h->if_unmodified_since
  
  These header fields are used to make a request conditional.  If the requested
  resource has (or has not) been modified since the time specified in this field,
  then the server will return a C<304 Not Modified> response instead of
  the document itself.
  
  =item $h->last_modified
  
  This header indicates the date and time at which the resource was last
  modified. I<E.g.>:
  
    # check if document is more than 1 hour old
    if (my $last_mod = $h->last_modified) {
        if ($last_mod < time - 60*60) {
  	  ...
        }
    }
  
  =item $h->content_type
  
  The Content-Type header field indicates the media type of the message
  content. I<E.g.>:
  
    $h->content_type('text/html');
  
  The value returned will be converted to lower case, and potential
  parameters will be chopped off and returned as a separate value if in
  an array context.  If there is no such header field, then the empty
  string is returned.  This makes it safe to do the following:
  
    if ($h->content_type eq 'text/html') {
       # we enter this place even if the real header value happens to
       # be 'TEXT/HTML; version=3.0'
       ...
    }
  
  =item $h->content_type_charset
  
  Returns the upper-cased charset specified in the Content-Type header.  In list
  context return the lower-cased bare content type followed by the upper-cased
  charset.  Both values will be C<undef> if not specified in the header.
  
  =item $h->content_is_text
  
  Returns TRUE if the Content-Type header field indicate that the
  content is textual.
  
  =item $h->content_is_html
  
  Returns TRUE if the Content-Type header field indicate that the
  content is some kind of HTML (including XHTML).  This method can't be
  used to set Content-Type.
  
  =item $h->content_is_xhtml
  
  Returns TRUE if the Content-Type header field indicate that the
  content is XHTML.  This method can't be used to set Content-Type.
  
  =item $h->content_is_xml
  
  Returns TRUE if the Content-Type header field indicate that the
  content is XML.  This method can't be used to set Content-Type.
  
  =item $h->content_encoding
  
  The Content-Encoding header field is used as a modifier to the
  media type.  When present, its value indicates what additional
  encoding mechanism has been applied to the resource.
  
  =item $h->content_length
  
  A decimal number indicating the size in bytes of the message content.
  
  =item $h->content_language
  
  The natural language(s) of the intended audience for the message
  content.  The value is one or more language tags as defined by RFC
  1766.  Eg. "no" for some kind of Norwegian and "en-US" for English the
  way it is written in the US.
  
  =item $h->title
  
  The title of the document.  In libwww-perl this header will be
  initialized automatically from the E<lt>TITLE>...E<lt>/TITLE> element
  of HTML documents.  I<This header is no longer part of the HTTP
  standard.>
  
  =item $h->user_agent
  
  This header field is used in request messages and contains information
  about the user agent originating the request.  I<E.g.>:
  
    $h->user_agent('Mozilla/5.0 (compatible; MSIE 7.0; Windows NT 6.0)');
  
  =item $h->server
  
  The server header field contains information about the software being
  used by the originating server program handling the request.
  
  =item $h->from
  
  This header should contain an Internet e-mail address for the human
  user who controls the requesting user agent.  The address should be
  machine-usable, as defined by RFC822.  E.g.:
  
    $h->from('King Kong <king@kong.com>');
  
  I<This header is no longer part of the HTTP standard.>
  
  =item $h->referer
  
  Used to specify the address (URI) of the document from which the
  requested resource address was obtained.
  
  The "Free On-line Dictionary of Computing" as this to say about the
  word I<referer>:
  
       <World-Wide Web> A misspelling of "referrer" which
       somehow made it into the {HTTP} standard.  A given {web
       page}'s referer (sic) is the {URL} of whatever web page
       contains the link that the user followed to the current
       page.  Most browsers pass this information as part of a
       request.
  
       (1998-10-19)
  
  By popular demand C<referrer> exists as an alias for this method so you
  can avoid this misspelling in your programs and still send the right
  thing on the wire.
  
  When setting the referrer, this method removes the fragment from the
  given URI if it is present, as mandated by RFC2616.  Note that
  the removal does I<not> happen automatically if using the header(),
  push_header() or init_header() methods to set the referrer.
  
  =item $h->www_authenticate
  
  This header must be included as part of a C<401 Unauthorized> response.
  The field value consist of a challenge that indicates the
  authentication scheme and parameters applicable to the requested URI.
  
  =item $h->proxy_authenticate
  
  This header must be included in a C<407 Proxy Authentication Required>
  response.
  
  =item $h->authorization
  
  =item $h->proxy_authorization
  
  A user agent that wishes to authenticate itself with a server or a
  proxy, may do so by including these headers.
  
  =item $h->authorization_basic
  
  This method is used to get or set an authorization header that use the
  "Basic Authentication Scheme".  In array context it will return two
  values; the user name and the password.  In scalar context it will
  return I<"uname:password"> as a single string value.
  
  When used to set the header value, it expects two arguments.  I<E.g.>:
  
    $h->authorization_basic($uname, $password);
  
  The method will croak if the $uname contains a colon ':'.
  
  =item $h->proxy_authorization_basic
  
  Same as authorization_basic() but will set the "Proxy-Authorization"
  header instead.
  
  =back
  
  =head1 NON-CANONICALIZED FIELD NAMES
  
  The header field name spelling is normally canonicalized including the
  '_' to '-' translation.  There are some application where this is not
  appropriate.  Prefixing field names with ':' allow you to force a
  specific spelling.  For example if you really want a header field name
  to show up as C<foo_bar> instead of "Foo-Bar", you might set it like
  this:
  
    $h->header(":foo_bar" => 1);
  
  These field names are returned with the ':' intact for
  $h->header_field_names and the $h->scan callback, but the colons do
  not show in $h->as_string.
  
  =head1 COPYRIGHT
  
  Copyright 1995-2005 Gisle Aas.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
HTTP_HEADERS

    $main::fatpacked{"HTTP/Headers/Auth.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_HEADERS_AUTH';
  package HTTP::Headers::Auth;
  
  use strict;
  use warnings;
  
  our $VERSION = "6.11";
  
  use HTTP::Headers;
  
  package
      HTTP::Headers;
  
  BEGIN {
      # we provide a new (and better) implementations below
      undef(&www_authenticate);
      undef(&proxy_authenticate);
  }
  
  require HTTP::Headers::Util;
  
  sub _parse_authenticate
  {
      my @ret;
      for (HTTP::Headers::Util::split_header_words(@_)) {
  	if (!defined($_->[1])) {
  	    # this is a new auth scheme
  	    push(@ret, shift(@$_) => {});
  	    shift @$_;
  	}
  	if (@ret) {
  	    # this a new parameter pair for the last auth scheme
  	    while (@$_) {
  		my $k = shift @$_;
  		my $v = shift @$_;
  	        $ret[-1]{$k} = $v;
  	    }
  	}
  	else {
  	    # something wrong, parameter pair without any scheme seen
  	    # IGNORE
  	}
      }
      @ret;
  }
  
  sub _authenticate
  {
      my $self = shift;
      my $header = shift;
      my @old = $self->_header($header);
      if (@_) {
  	$self->remove_header($header);
  	my @new = @_;
  	while (@new) {
  	    my $a_scheme = shift(@new);
  	    if ($a_scheme =~ /\s/) {
  		# assume complete valid value, pass it through
  		$self->push_header($header, $a_scheme);
  	    }
  	    else {
  		my @param;
  		if (@new) {
  		    my $p = $new[0];
  		    if (ref($p) eq "ARRAY") {
  			@param = @$p;
  			shift(@new);
  		    }
  		    elsif (ref($p) eq "HASH") {
  			@param = %$p;
  			shift(@new);
  		    }
  		}
  		my $val = ucfirst(lc($a_scheme));
  		if (@param) {
  		    my $sep = " ";
  		    while (@param) {
  			my $k = shift @param;
  			my $v = shift @param;
  			if ($v =~ /[^0-9a-zA-Z]/ || lc($k) eq "realm") {
  			    # must quote the value
  			    $v =~ s,([\\\"]),\\$1,g;
  			    $v = qq("$v");
  			}
  			$val .= "$sep$k=$v";
  			$sep = ", ";
  		    }
  		}
  		$self->push_header($header, $val);
  	    }
  	}
      }
      return unless defined wantarray;
      wantarray ? _parse_authenticate(@old) : join(", ", @old);
  }
  
  
  sub www_authenticate    { shift->_authenticate("WWW-Authenticate", @_)   }
  sub proxy_authenticate  { shift->_authenticate("Proxy-Authenticate", @_) }
  
  1;
HTTP_HEADERS_AUTH

    $main::fatpacked{"HTTP/Headers/ETag.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_HEADERS_ETAG';
  package HTTP::Headers::ETag;
  
  use strict;
  use warnings;
  
  our $VERSION = "6.11";
  
  require HTTP::Date;
  
  require HTTP::Headers;
  package
      HTTP::Headers;
  
  sub _etags
  {
      my $self = shift;
      my $header = shift;
      my @old = _split_etag_list($self->_header($header));
      if (@_) {
  	$self->_header($header => join(", ", _split_etag_list(@_)));
      }
      wantarray ? @old : join(", ", @old);
  }
  
  sub etag          { shift->_etags("ETag", @_); }
  sub if_match      { shift->_etags("If-Match", @_); }
  sub if_none_match { shift->_etags("If-None-Match", @_); }
  
  sub if_range {
      # Either a date or an entity-tag
      my $self = shift;
      my @old = $self->_header("If-Range");
      if (@_) {
  	my $new = shift;
  	if (!defined $new) {
  	    $self->remove_header("If-Range");
  	}
  	elsif ($new =~ /^\d+$/) {
  	    $self->_date_header("If-Range", $new);
  	}
  	else {
  	    $self->_etags("If-Range", $new);
  	}
      }
      return unless defined(wantarray);
      for (@old) {
  	my $t = HTTP::Date::str2time($_);
  	$_ = $t if $t;
      }
      wantarray ? @old : join(", ", @old);
  }
  
  
  # Split a list of entity tag values.  The return value is a list
  # consisting of one element per entity tag.  Suitable for parsing
  # headers like C<If-Match>, C<If-None-Match>.  You might even want to
  # use it on C<ETag> and C<If-Range> entity tag values, because it will
  # normalize them to the common form.
  #
  #  entity-tag	  = [ weak ] opaque-tag
  #  weak		  = "W/"
  #  opaque-tag	  = quoted-string
  
  
  sub _split_etag_list
  {
      my(@val) = @_;
      my @res;
      for (@val) {
          while (length) {
              my $weak = "";
  	    $weak = "W/" if s,^\s*[wW]/,,;
              my $etag = "";
  	    if (s/^\s*(\"[^\"\\]*(?:\\.[^\"\\]*)*\")//) {
  		push(@res, "$weak$1");
              }
              elsif (s/^\s*,//) {
                  push(@res, qq(W/"")) if $weak;
              }
              elsif (s/^\s*([^,\s]+)//) {
                  $etag = $1;
  		$etag =~ s/([\"\\])/\\$1/g;
  	        push(@res, qq($weak"$etag"));
              }
              elsif (s/^\s+// || !length) {
                  push(@res, qq(W/"")) if $weak;
              }
              else {
  	 	die "This should not happen: '$_'";
              }
          }
     }
     @res;
  }
  
  1;
HTTP_HEADERS_ETAG

    $main::fatpacked{"HTTP/Headers/Patch/DontUseStorable.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_HEADERS_PATCH_DONTUSESTORABLE';
  package HTTP::Headers::Patch::DontUseStorable;
  
  our $DATE = '2017-04-19'; # DATE
  our $VERSION = '0.05'; # VERSION
  
  use 5.010001;
  use strict;
  no warnings;
  #use Log::Any '$log';
  
  use Module::Patch 0.12 qw();
  use base qw(Module::Patch);
  
  our %config;
  
  sub _clone($) {
      my $self = shift;
      my $clone = HTTP::Headers->new;
      $self->scan(sub { $clone->push_header(@_);} );
      $clone;
  }
  
  sub patch_data {
      return {
          v => 3,
          patches => [
              {
                  action => 'replace',
                  mod_version => qr/^6\.[01].+/,
                  sub_name => 'clone',
                  code => \&_clone,
              },
          ],
      };
  }
  
  1;
  # ABSTRACT: Do not use Storable
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  HTTP::Headers::Patch::DontUseStorable - Do not use Storable
  
  =head1 VERSION
  
  This document describes version 0.05 of HTTP::Headers::Patch::DontUseStorable (from Perl distribution HTTP-Headers-Patch-DontUseStorable), released on 2017-04-19.
  
  =head1 SYNOPSIS
  
   use HTTP::Headers::Patch::DontUseStorable;
  
  =head1 DESCRIPTION
  
  L<HTTP::Headers> (6.11 as of this writing) tries to load L<Storable> (2.56 as of
  this writing) and use its dclone() method. Since Storable still does not support
  serializing Regexp objects, HTTP::Headers/L<HTTP::Message> croaks when fed data
  with Regexp objects.
  
  This patch avoids using Storable and clone using the alternative method.
  
  =for Pod::Coverage ^(patch_data)$
  
  =head1 FAQ
  
  =head2 Is this a bug with HTTP::Headers? Why don't you submit a bug to HTTP-Message?
  
  I tend not to think this is a bug with HTTP::Headers; after all, Storable's
  dclone() is a pretty standard way to clone data in Perl. This patch is more of a
  workaround for current Storable's deficiencies.
  
  =head2 Shouldn't you add STORABLE_{freeze,thaw} methods to Regexp instead?
  
  This no longer works with newer Perls (5.12 and later).
  
  =head2 Why would an HTTP::Headers object contain a Regexp object in the first place? Shouldn't it only contain strings (and arrays/hashes of strings)?
  
  True. This might be a bug with the client code (e.g. in my module which uses
  this patch, L<Finance::Bank::ID::Mandiri>). I haven't investigated further
  though and this is the stop-gap solution.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/HTTP-Headers-Patch-DontUseStorable>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-HTTP-Headers-Patch-DontUseStorable>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=HTTP-Headers-Patch-DontUseStorable>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2015, 2012 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
HTTP_HEADERS_PATCH_DONTUSESTORABLE

    $main::fatpacked{"HTTP/Headers/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_HEADERS_UTIL';
  package HTTP::Headers::Util;
  
  use strict;
  use warnings;
  
  our $VERSION = "6.11";
  
  use base 'Exporter';
  
  our @EXPORT_OK=qw(split_header_words _split_header_words join_header_words);
  
  
  sub split_header_words {
      my @res = &_split_header_words;
      for my $arr (@res) {
  	for (my $i = @$arr - 2; $i >= 0; $i -= 2) {
  	    $arr->[$i] = lc($arr->[$i]);
  	}
      }
      return @res;
  }
  
  sub _split_header_words
  {
      my(@val) = @_;
      my @res;
      for (@val) {
  	my @cur;
  	while (length) {
  	    if (s/^\s*(=*[^\s=;,]+)//) {  # 'token' or parameter 'attribute'
  		push(@cur, $1);
  		# a quoted value
  		if (s/^\s*=\s*\"([^\"\\]*(?:\\.[^\"\\]*)*)\"//) {
  		    my $val = $1;
  		    $val =~ s/\\(.)/$1/g;
  		    push(@cur, $val);
  		# some unquoted value
  		}
  		elsif (s/^\s*=\s*([^;,\s]*)//) {
  		    my $val = $1;
  		    $val =~ s/\s+$//;
  		    push(@cur, $val);
  		# no value, a lone token
  		}
  		else {
  		    push(@cur, undef);
  		}
  	    }
  	    elsif (s/^\s*,//) {
  		push(@res, [@cur]) if @cur;
  		@cur = ();
  	    }
  	    elsif (s/^\s*;// || s/^\s+//) {
  		# continue
  	    }
  	    else {
  		die "This should not happen: '$_'";
  	    }
  	}
  	push(@res, \@cur) if @cur;
      }
      @res;
  }
  
  
  sub join_header_words
  {
      @_ = ([@_]) if @_ && !ref($_[0]);
      my @res;
      for (@_) {
  	my @cur = @$_;
  	my @attr;
  	while (@cur) {
  	    my $k = shift @cur;
  	    my $v = shift @cur;
  	    if (defined $v) {
  		if ($v =~ /[\x00-\x20()<>@,;:\\\"\/\[\]?={}\x7F-\xFF]/ || !length($v)) {
  		    $v =~ s/([\"\\])/\\$1/g;  # escape " and \
  		    $k .= qq(="$v");
  		}
  		else {
  		    # token
  		    $k .= "=$v";
  		}
  	    }
  	    push(@attr, $k);
  	}
  	push(@res, join("; ", @attr)) if @attr;
      }
      join(", ", @res);
  }
  
  
  1;
  
  __END__
  
  =head1 NAME
  
  HTTP::Headers::Util - Header value parsing utility functions
  
  =head1 SYNOPSIS
  
    use HTTP::Headers::Util qw(split_header_words);
    @values = split_header_words($h->header("Content-Type"));
  
  =head1 DESCRIPTION
  
  This module provides a few functions that helps parsing and
  construction of valid HTTP header values.  None of the functions are
  exported by default.
  
  The following functions are available:
  
  =over 4
  
  
  =item split_header_words( @header_values )
  
  This function will parse the header values given as argument into a
  list of anonymous arrays containing key/value pairs.  The function
  knows how to deal with ",", ";" and "=" as well as quoted values after
  "=".  A list of space separated tokens are parsed as if they were
  separated by ";".
  
  If the @header_values passed as argument contains multiple values,
  then they are treated as if they were a single value separated by
  comma ",".
  
  This means that this function is useful for parsing header fields that
  follow this syntax (BNF as from the HTTP/1.1 specification, but we relax
  the requirement for tokens).
  
    headers           = #header
    header            = (token | parameter) *( [";"] (token | parameter))
  
    token             = 1*<any CHAR except CTLs or separators>
    separators        = "(" | ")" | "<" | ">" | "@"
                      | "," | ";" | ":" | "\" | <">
                      | "/" | "[" | "]" | "?" | "="
                      | "{" | "}" | SP | HT
  
    quoted-string     = ( <"> *(qdtext | quoted-pair ) <"> )
    qdtext            = <any TEXT except <">>
    quoted-pair       = "\" CHAR
  
    parameter         = attribute "=" value
    attribute         = token
    value             = token | quoted-string
  
  Each I<header> is represented by an anonymous array of key/value
  pairs.  The keys will be all be forced to lower case.
  The value for a simple token (not part of a parameter) is C<undef>.
  Syntactically incorrect headers will not necessarily be parsed as you
  would want.
  
  This is easier to describe with some examples:
  
     split_header_words('foo="bar"; port="80,81"; DISCARD, BAR=baz');
     split_header_words('text/html; charset="iso-8859-1"');
     split_header_words('Basic realm="\\"foo\\\\bar\\""');
  
  will return
  
     [foo=>'bar', port=>'80,81', discard=> undef], [bar=>'baz' ]
     ['text/html' => undef, charset => 'iso-8859-1']
     [basic => undef, realm => "\"foo\\bar\""]
  
  If you don't want the function to convert tokens and attribute keys to
  lower case you can call it as C<_split_header_words> instead (with a
  leading underscore).
  
  =item join_header_words( @arrays )
  
  This will do the opposite of the conversion done by split_header_words().
  It takes a list of anonymous arrays as arguments (or a list of
  key/value pairs) and produces a single header value.  Attribute values
  are quoted if needed.
  
  Example:
  
     join_header_words(["text/plain" => undef, charset => "iso-8859/1"]);
     join_header_words("text/plain" => undef, charset => "iso-8859/1");
  
  will both return the string:
  
     text/plain; charset="iso-8859/1"
  
  =back
  
  =head1 COPYRIGHT
  
  Copyright 1997-1998, Gisle Aas
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
HTTP_HEADERS_UTIL

    $main::fatpacked{"HTTP/Message.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_MESSAGE';
  package HTTP::Message;
  
  use strict;
  use warnings;
  
  our $VERSION = "6.11";
  
  require HTTP::Headers;
  require Carp;
  
  my $CRLF = "\015\012";   # "\r\n" is not portable
  unless ($HTTP::URI_CLASS) {
      if ($ENV{PERL_HTTP_URI_CLASS}
      &&  $ENV{PERL_HTTP_URI_CLASS} =~ /^([\w:]+)$/) {
          $HTTP::URI_CLASS = $1;
      } else {
          $HTTP::URI_CLASS = "URI";
      }
  }
  eval "require $HTTP::URI_CLASS"; die $@ if $@;
  
  *_utf8_downgrade = defined(&utf8::downgrade) ?
      sub {
          utf8::downgrade($_[0], 1) or
              Carp::croak("HTTP::Message content must be bytes")
      }
      :
      sub {
      };
  
  sub new
  {
      my($class, $header, $content) = @_;
      if (defined $header) {
  	Carp::croak("Bad header argument") unless ref $header;
          if (ref($header) eq "ARRAY") {
  	    $header = HTTP::Headers->new(@$header);
  	}
  	else {
  	    $header = $header->clone;
  	}
      }
      else {
  	$header = HTTP::Headers->new;
      }
      if (defined $content) {
          _utf8_downgrade($content);
      }
      else {
          $content = '';
      }
  
      bless {
  	'_headers' => $header,
  	'_content' => $content,
      }, $class;
  }
  
  
  sub parse
  {
      my($class, $str) = @_;
  
      my @hdr;
      while (1) {
  	if ($str =~ s/^([^\s:]+)[ \t]*: ?(.*)\n?//) {
  	    push(@hdr, $1, $2);
  	    $hdr[-1] =~ s/\r\z//;
  	}
  	elsif (@hdr && $str =~ s/^([ \t].*)\n?//) {
  	    $hdr[-1] .= "\n$1";
  	    $hdr[-1] =~ s/\r\z//;
  	}
  	else {
  	    $str =~ s/^\r?\n//;
  	    last;
  	}
      }
      local $HTTP::Headers::TRANSLATE_UNDERSCORE;
      new($class, \@hdr, $str);
  }
  
  
  sub clone
  {
      my $self  = shift;
      my $clone = HTTP::Message->new($self->headers,
  				   $self->content);
      $clone->protocol($self->protocol);
      $clone;
  }
  
  
  sub clear {
      my $self = shift;
      $self->{_headers}->clear;
      $self->content("");
      delete $self->{_parts};
      return;
  }
  
  
  sub protocol {
      shift->_elem('_protocol',  @_);
  }
  
  sub headers {
      my $self = shift;
  
      # recalculation of _content might change headers, so we
      # need to force it now
      $self->_content unless exists $self->{_content};
  
      $self->{_headers};
  }
  
  sub headers_as_string {
      shift->headers->as_string(@_);
  }
  
  
  sub content  {
  
      my $self = $_[0];
      if (defined(wantarray)) {
  	$self->_content unless exists $self->{_content};
  	my $old = $self->{_content};
  	$old = $$old if ref($old) eq "SCALAR";
  	&_set_content if @_ > 1;
  	return $old;
      }
  
      if (@_ > 1) {
  	&_set_content;
      }
      else {
  	Carp::carp("Useless content call in void context") if $^W;
      }
  }
  
  
  sub _set_content {
      my $self = $_[0];
      _utf8_downgrade($_[1]);
      if (!ref($_[1]) && ref($self->{_content}) eq "SCALAR") {
  	${$self->{_content}} = $_[1];
      }
      else {
  	die "Can't set content to be a scalar reference" if ref($_[1]) eq "SCALAR";
  	$self->{_content} = $_[1];
  	delete $self->{_content_ref};
      }
      delete $self->{_parts} unless $_[2];
  }
  
  
  sub add_content
  {
      my $self = shift;
      $self->_content unless exists $self->{_content};
      my $chunkref = \$_[0];
      $chunkref = $$chunkref if ref($$chunkref);  # legacy
  
      _utf8_downgrade($$chunkref);
  
      my $ref = ref($self->{_content});
      if (!$ref) {
  	$self->{_content} .= $$chunkref;
      }
      elsif ($ref eq "SCALAR") {
  	${$self->{_content}} .= $$chunkref;
      }
      else {
  	Carp::croak("Can't append to $ref content");
      }
      delete $self->{_parts};
  }
  
  sub add_content_utf8 {
      my($self, $buf)  = @_;
      utf8::upgrade($buf);
      utf8::encode($buf);
      $self->add_content($buf);
  }
  
  sub content_ref
  {
      my $self = shift;
      $self->_content unless exists $self->{_content};
      delete $self->{_parts};
      my $old = \$self->{_content};
      my $old_cref = $self->{_content_ref};
      if (@_) {
  	my $new = shift;
  	Carp::croak("Setting content_ref to a non-ref") unless ref($new);
  	delete $self->{_content};  # avoid modifying $$old
  	$self->{_content} = $new;
  	$self->{_content_ref}++;
      }
      $old = $$old if $old_cref;
      return $old;
  }
  
  
  sub content_charset
  {
      my $self = shift;
      if (my $charset = $self->content_type_charset) {
  	return $charset;
      }
  
      # time to start guessing
      my $cref = $self->decoded_content(ref => 1, charset => "none");
  
      # Unicode BOM
      for ($$cref) {
  	return "UTF-8"     if /^\xEF\xBB\xBF/;
  	return "UTF-32LE" if /^\xFF\xFE\x00\x00/;
  	return "UTF-32BE" if /^\x00\x00\xFE\xFF/;
  	return "UTF-16LE" if /^\xFF\xFE/;
  	return "UTF-16BE" if /^\xFE\xFF/;
      }
  
      if ($self->content_is_xml) {
  	# http://www.w3.org/TR/2006/REC-xml-20060816/#sec-guessing
  	# XML entity not accompanied by external encoding information and not
  	# in UTF-8 or UTF-16 encoding must begin with an XML encoding declaration,
  	# in which the first characters must be '<?xml'
  	for ($$cref) {
  	    return "UTF-32BE" if /^\x00\x00\x00</;
  	    return "UTF-32LE" if /^<\x00\x00\x00/;
  	    return "UTF-16BE" if /^(?:\x00\s)*\x00</;
  	    return "UTF-16LE" if /^(?:\s\x00)*<\x00/;
  	    if (/^\s*(<\?xml[^\x00]*?\?>)/) {
  		if ($1 =~ /\sencoding\s*=\s*(["'])(.*?)\1/) {
  		    my $enc = $2;
  		    $enc =~ s/^\s+//; $enc =~ s/\s+\z//;
  		    return $enc if $enc;
  		}
  	    }
  	}
  	return "UTF-8";
      }
      elsif ($self->content_is_html) {
  	# look for <META charset="..."> or <META content="...">
  	# http://dev.w3.org/html5/spec/Overview.html#determining-the-character-encoding
  	require IO::HTML;
  	# Use relaxed search to match previous versions of HTTP::Message:
  	my $encoding = IO::HTML::find_charset_in($$cref, { encoding    => 1,
  	                                                   need_pragma => 0 });
  	return $encoding->mime_name if $encoding;
      }
      elsif ($self->content_type eq "application/json") {
  	for ($$cref) {
  	    # RFC 4627, ch 3
  	    return "UTF-32BE" if /^\x00\x00\x00./s;
  	    return "UTF-32LE" if /^.\x00\x00\x00/s;
  	    return "UTF-16BE" if /^\x00.\x00./s;
  	    return "UTF-16LE" if /^.\x00.\x00/s;
  	    return "UTF-8";
  	}
      }
      if ($self->content_type =~ /^text\//) {
  	for ($$cref) {
  	    if (length) {
  		return "US-ASCII" unless /[\x80-\xFF]/;
  		require Encode;
  		eval {
  		    Encode::decode_utf8($_, Encode::FB_CROAK() | Encode::LEAVE_SRC());
  		};
  		return "UTF-8" unless $@;
  		return "ISO-8859-1";
  	    }
  	}
      }
  
      return undef;
  }
  
  
  sub decoded_content
  {
      my($self, %opt) = @_;
      my $content_ref;
      my $content_ref_iscopy;
  
      eval {
  	$content_ref = $self->content_ref;
  	die "Can't decode ref content" if ref($content_ref) ne "SCALAR";
  
  	if (my $h = $self->header("Content-Encoding")) {
  	    $h =~ s/^\s+//;
  	    $h =~ s/\s+$//;
  	    for my $ce (reverse split(/\s*,\s*/, lc($h))) {
  		next unless $ce;
  		next if $ce eq "identity" || $ce eq "none";
  		if ($ce eq "gzip" || $ce eq "x-gzip") {
  		    require IO::Uncompress::Gunzip;
  		    my $output;
  		    IO::Uncompress::Gunzip::gunzip($content_ref, \$output, Transparent => 0)
  			or die "Can't gunzip content: $IO::Uncompress::Gunzip::GunzipError";
  		    $content_ref = \$output;
  		    $content_ref_iscopy++;
  		}
  		elsif ($ce eq "x-bzip2" or $ce eq "bzip2") {
  		    require IO::Uncompress::Bunzip2;
  		    my $output;
  		    IO::Uncompress::Bunzip2::bunzip2($content_ref, \$output, Transparent => 0)
  			or die "Can't bunzip content: $IO::Uncompress::Bunzip2::Bunzip2Error";
  		    $content_ref = \$output;
  		    $content_ref_iscopy++;
  		}
  		elsif ($ce eq "deflate") {
  		    require IO::Uncompress::Inflate;
  		    my $output;
  		    my $status = IO::Uncompress::Inflate::inflate($content_ref, \$output, Transparent => 0);
  		    my $error = $IO::Uncompress::Inflate::InflateError;
  		    unless ($status) {
  			# "Content-Encoding: deflate" is supposed to mean the
  			# "zlib" format of RFC 1950, but Microsoft got that
  			# wrong, so some servers sends the raw compressed
  			# "deflate" data.  This tries to inflate this format.
  			$output = undef;
  			require IO::Uncompress::RawInflate;
  			unless (IO::Uncompress::RawInflate::rawinflate($content_ref, \$output)) {
  			    $self->push_header("Client-Warning" =>
  				"Could not raw inflate content: $IO::Uncompress::RawInflate::RawInflateError");
  			    $output = undef;
  			}
  		    }
  		    die "Can't inflate content: $error" unless defined $output;
  		    $content_ref = \$output;
  		    $content_ref_iscopy++;
  		}
  		elsif ($ce eq "compress" || $ce eq "x-compress") {
  		    die "Can't uncompress content";
  		}
  		elsif ($ce eq "base64") {  # not really C-T-E, but should be harmless
  		    require MIME::Base64;
  		    $content_ref = \MIME::Base64::decode($$content_ref);
  		    $content_ref_iscopy++;
  		}
  		elsif ($ce eq "quoted-printable") { # not really C-T-E, but should be harmless
  		    require MIME::QuotedPrint;
  		    $content_ref = \MIME::QuotedPrint::decode($$content_ref);
  		    $content_ref_iscopy++;
  		}
  		else {
  		    die "Don't know how to decode Content-Encoding '$ce'";
  		}
  	    }
  	}
  
  	if ($self->content_is_text || (my $is_xml = $self->content_is_xml)) {
  	    my $charset = lc(
  	        $opt{charset} ||
  		$self->content_type_charset ||
  		$opt{default_charset} ||
  		$self->content_charset ||
  		"ISO-8859-1"
  	    );
  	    if ($charset eq "none") {
  		# leave it as is
  	    }
  	    elsif ($charset eq "us-ascii" || $charset eq "iso-8859-1") {
  		if ($$content_ref =~ /[^\x00-\x7F]/ && defined &utf8::upgrade) {
  		    unless ($content_ref_iscopy) {
  			my $copy = $$content_ref;
  			$content_ref = \$copy;
  			$content_ref_iscopy++;
  		    }
  		    utf8::upgrade($$content_ref);
  		}
  	    }
  	    else {
  		require Encode;
  		eval {
  		    $content_ref = \Encode::decode($charset, $$content_ref,
  			 ($opt{charset_strict} ? Encode::FB_CROAK() : 0) | Encode::LEAVE_SRC());
  		};
  		if ($@) {
  		    my $retried;
  		    if ($@ =~ /^Unknown encoding/) {
  			my $alt_charset = lc($opt{alt_charset} || "");
  			if ($alt_charset && $charset ne $alt_charset) {
  			    # Retry decoding with the alternative charset
  			    $content_ref = \Encode::decode($alt_charset, $$content_ref,
  				 ($opt{charset_strict} ? Encode::FB_CROAK() : 0) | Encode::LEAVE_SRC())
  			        unless $alt_charset eq "none";
  			    $retried++;
  			}
  		    }
  		    die unless $retried;
  		}
  		die "Encode::decode() returned undef improperly" unless defined $$content_ref;
  		if ($is_xml) {
  		    # Get rid of the XML encoding declaration if present
  		    $$content_ref =~ s/^\x{FEFF}//;
  		    if ($$content_ref =~ /^(\s*<\?xml[^\x00]*?\?>)/) {
  			substr($$content_ref, 0, length($1)) =~ s/\sencoding\s*=\s*(["']).*?\1//;
  		    }
  		}
  	    }
  	}
      };
      if ($@) {
  	Carp::croak($@) if $opt{raise_error};
  	return undef;
      }
  
      return $opt{ref} ? $content_ref : $$content_ref;
  }
  
  
  sub decodable
  {
      # should match the Content-Encoding values that decoded_content can deal with
      my $self = shift;
      my @enc;
      # XXX preferably we should determine if the modules are available without loading
      # them here
      eval {
          require IO::Uncompress::Gunzip;
          push(@enc, "gzip", "x-gzip");
      };
      eval {
          require IO::Uncompress::Inflate;
          require IO::Uncompress::RawInflate;
          push(@enc, "deflate");
      };
      eval {
          require IO::Uncompress::Bunzip2;
          push(@enc, "x-bzip2");
      };
      # we don't care about announcing the 'identity', 'base64' and
      # 'quoted-printable' stuff
      return wantarray ? @enc : join(", ", @enc);
  }
  
  
  sub decode
  {
      my $self = shift;
      return 1 unless $self->header("Content-Encoding");
      if (defined(my $content = $self->decoded_content(charset => "none"))) {
  	$self->remove_header("Content-Encoding", "Content-Length", "Content-MD5");
  	$self->content($content);
  	return 1;
      }
      return 0;
  }
  
  
  sub encode
  {
      my($self, @enc) = @_;
  
      Carp::croak("Can't encode multipart/* messages") if $self->content_type =~ m,^multipart/,;
      Carp::croak("Can't encode message/* messages") if $self->content_type =~ m,^message/,;
  
      return 1 unless @enc;  # nothing to do
  
      my $content = $self->content;
      for my $encoding (@enc) {
  	if ($encoding eq "identity") {
  	    # nothing to do
  	}
  	elsif ($encoding eq "base64") {
  	    require MIME::Base64;
  	    $content = MIME::Base64::encode($content);
  	}
  	elsif ($encoding eq "gzip" || $encoding eq "x-gzip") {
  	    require IO::Compress::Gzip;
  	    my $output;
  	    IO::Compress::Gzip::gzip(\$content, \$output, Minimal => 1)
  		or die "Can't gzip content: $IO::Compress::Gzip::GzipError";
  	    $content = $output;
  	}
  	elsif ($encoding eq "deflate") {
  	    require IO::Compress::Deflate;
  	    my $output;
  	    IO::Compress::Deflate::deflate(\$content, \$output)
  		or die "Can't deflate content: $IO::Compress::Deflate::DeflateError";
  	    $content = $output;
  	}
  	elsif ($encoding eq "x-bzip2") {
  	    require IO::Compress::Bzip2;
  	    my $output;
  	    IO::Compress::Bzip2::bzip2(\$content, \$output)
  		or die "Can't bzip2 content: $IO::Compress::Bzip2::Bzip2Error";
  	    $content = $output;
  	}
  	elsif ($encoding eq "rot13") {  # for the fun of it
  	    $content =~ tr/A-Za-z/N-ZA-Mn-za-m/;
  	}
  	else {
  	    return 0;
  	}
      }
      my $h = $self->header("Content-Encoding");
      unshift(@enc, $h) if $h;
      $self->header("Content-Encoding", join(", ", @enc));
      $self->remove_header("Content-Length", "Content-MD5");
      $self->content($content);
      return 1;
  }
  
  
  sub as_string
  {
      my($self, $eol) = @_;
      $eol = "\n" unless defined $eol;
  
      # The calculation of content might update the headers
      # so we need to do that first.
      my $content = $self->content;
  
      return join("", $self->{'_headers'}->as_string($eol),
  		    $eol,
  		    $content,
  		    (@_ == 1 && length($content) &&
  		     $content !~ /\n\z/) ? "\n" : "",
  		);
  }
  
  
  sub dump
  {
      my($self, %opt) = @_;
      my $content = $self->content;
      my $chopped = 0;
      if (!ref($content)) {
  	my $maxlen = $opt{maxlength};
  	$maxlen = 512 unless defined($maxlen);
  	if ($maxlen && length($content) > $maxlen * 1.1 + 3) {
  	    $chopped = length($content) - $maxlen;
  	    $content = substr($content, 0, $maxlen) . "...";
  	}
  
  	$content =~ s/\\/\\\\/g;
  	$content =~ s/\t/\\t/g;
  	$content =~ s/\r/\\r/g;
  
  	# no need for 3 digits in escape for these
  	$content =~ s/([\0-\11\13-\037])(?!\d)/sprintf('\\%o',ord($1))/eg;
  
  	$content =~ s/([\0-\11\13-\037\177-\377])/sprintf('\\x%02X',ord($1))/eg;
  	$content =~ s/([^\12\040-\176])/sprintf('\\x{%X}',ord($1))/eg;
  
  	# remaining whitespace
  	$content =~ s/( +)\n/("\\40" x length($1)) . "\n"/eg;
  	$content =~ s/(\n+)\n/("\\n" x length($1)) . "\n"/eg;
  	$content =~ s/\n\z/\\n/;
  
  	my $no_content = $opt{no_content};
  	$no_content = "(no content)" unless defined $no_content;
  	if ($content eq $no_content) {
  	    # escape our $no_content marker
  	    $content =~ s/^(.)/sprintf('\\x%02X',ord($1))/eg;
  	}
  	elsif ($content eq "") {
  	    $content = $no_content;
  	}
      }
  
      my @dump;
      push(@dump, $opt{preheader}) if $opt{preheader};
      push(@dump, $self->{_headers}->as_string, $content);
      push(@dump, "(+ $chopped more bytes not shown)") if $chopped;
  
      my $dump = join("\n", @dump, "");
      $dump =~ s/^/$opt{prefix}/gm if $opt{prefix};
  
      print $dump unless defined wantarray;
      return $dump;
  }
  
  # allow subclasses to override what will handle individual parts
  sub _part_class {
      return __PACKAGE__;
  }
  
  sub parts {
      my $self = shift;
      if (defined(wantarray) && (!exists $self->{_parts} || ref($self->{_content}) eq "SCALAR")) {
  	$self->_parts;
      }
      my $old = $self->{_parts};
      if (@_) {
  	my @parts = map { ref($_) eq 'ARRAY' ? @$_ : $_ } @_;
  	my $ct = $self->content_type || "";
  	if ($ct =~ m,^message/,) {
  	    Carp::croak("Only one part allowed for $ct content")
  		if @parts > 1;
  	}
  	elsif ($ct !~ m,^multipart/,) {
  	    $self->remove_content_headers;
  	    $self->content_type("multipart/mixed");
  	}
  	$self->{_parts} = \@parts;
  	_stale_content($self);
      }
      return @$old if wantarray;
      return $old->[0];
  }
  
  sub add_part {
      my $self = shift;
      if (($self->content_type || "") !~ m,^multipart/,) {
  	my $p = $self->_part_class->new(
  	    $self->remove_content_headers,
  	    $self->content(""),
  	);
  	$self->content_type("multipart/mixed");
  	$self->{_parts} = [];
          if ($p->headers->header_field_names || $p->content ne "") {
              push(@{$self->{_parts}}, $p);
          }
      }
      elsif (!exists $self->{_parts} || ref($self->{_content}) eq "SCALAR") {
  	$self->_parts;
      }
  
      push(@{$self->{_parts}}, @_);
      _stale_content($self);
      return;
  }
  
  sub _stale_content {
      my $self = shift;
      if (ref($self->{_content}) eq "SCALAR") {
  	# must recalculate now
  	$self->_content;
      }
      else {
  	# just invalidate cache
  	delete $self->{_content};
  	delete $self->{_content_ref};
      }
  }
  
  
  # delegate all other method calls to the headers object.
  our $AUTOLOAD;
  sub AUTOLOAD
  {
      my $method = substr($AUTOLOAD, rindex($AUTOLOAD, '::')+2);
  
      # We create the function here so that it will not need to be
      # autoloaded the next time.
      no strict 'refs';
      *$method = sub { local $Carp::Internal{+__PACKAGE__} = 1; shift->headers->$method(@_) };
      goto &$method;
  }
  
  
  sub DESTROY {}  # avoid AUTOLOADing it
  
  
  # Private method to access members in %$self
  sub _elem
  {
      my $self = shift;
      my $elem = shift;
      my $old = $self->{$elem};
      $self->{$elem} = $_[0] if @_;
      return $old;
  }
  
  
  # Create private _parts attribute from current _content
  sub _parts {
      my $self = shift;
      my $ct = $self->content_type;
      if ($ct =~ m,^multipart/,) {
  	require HTTP::Headers::Util;
  	my @h = HTTP::Headers::Util::split_header_words($self->header("Content-Type"));
  	die "Assert" unless @h;
  	my %h = @{$h[0]};
  	if (defined(my $b = $h{boundary})) {
  	    my $str = $self->content;
  	    $str =~ s/\r?\n--\Q$b\E--.*//s;
  	    if ($str =~ s/(^|.*?\r?\n)--\Q$b\E\r?\n//s) {
  		$self->{_parts} = [map $self->_part_class->parse($_),
  				   split(/\r?\n--\Q$b\E\r?\n/, $str)]
  	    }
  	}
      }
      elsif ($ct eq "message/http") {
  	require HTTP::Request;
  	require HTTP::Response;
  	my $content = $self->content;
  	my $class = ($content =~ m,^(HTTP/.*)\n,) ?
  	    "HTTP::Response" : "HTTP::Request";
  	$self->{_parts} = [$class->parse($content)];
      }
      elsif ($ct =~ m,^message/,) {
  	$self->{_parts} = [ $self->_part_class->parse($self->content) ];
      }
  
      $self->{_parts} ||= [];
  }
  
  
  # Create private _content attribute from current _parts
  sub _content {
      my $self = shift;
      my $ct = $self->{_headers}->header("Content-Type") || "multipart/mixed";
      if ($ct =~ m,^\s*message/,i) {
  	_set_content($self, $self->{_parts}[0]->as_string($CRLF), 1);
  	return;
      }
  
      require HTTP::Headers::Util;
      my @v = HTTP::Headers::Util::split_header_words($ct);
      Carp::carp("Multiple Content-Type headers") if @v > 1;
      @v = @{$v[0]};
  
      my $boundary;
      my $boundary_index;
      for (my @tmp = @v; @tmp;) {
  	my($k, $v) = splice(@tmp, 0, 2);
  	if ($k eq "boundary") {
  	    $boundary = $v;
  	    $boundary_index = @v - @tmp - 1;
  	    last;
  	}
      }
  
      my @parts = map $_->as_string($CRLF), @{$self->{_parts}};
  
      my $bno = 0;
      $boundary = _boundary() unless defined $boundary;
   CHECK_BOUNDARY:
      {
  	for (@parts) {
  	    if (index($_, $boundary) >= 0) {
  		# must have a better boundary
  		$boundary = _boundary(++$bno);
  		redo CHECK_BOUNDARY;
  	    }
  	}
      }
  
      if ($boundary_index) {
  	$v[$boundary_index] = $boundary;
      }
      else {
  	push(@v, boundary => $boundary);
      }
  
      $ct = HTTP::Headers::Util::join_header_words(@v);
      $self->{_headers}->header("Content-Type", $ct);
  
      _set_content($self, "--$boundary$CRLF" .
  	                join("$CRLF--$boundary$CRLF", @parts) .
  			"$CRLF--$boundary--$CRLF",
                          1);
  }
  
  
  sub _boundary
  {
      my $size = shift || return "xYzZY";
      require MIME::Base64;
      my $b = MIME::Base64::encode(join("", map chr(rand(256)), 1..$size*3), "");
      $b =~ s/[\W]/X/g;  # ensure alnum only
      $b;
  }
  
  
  1;
  
  
  __END__
  
  =head1 NAME
  
  HTTP::Message - HTTP style message (base class)
  
  =head1 SYNOPSIS
  
   use base 'HTTP::Message';
  
  =head1 DESCRIPTION
  
  An C<HTTP::Message> object contains some headers and a content body.
  The following methods are available:
  
  =over 4
  
  =item $mess = HTTP::Message->new
  
  =item $mess = HTTP::Message->new( $headers )
  
  =item $mess = HTTP::Message->new( $headers, $content )
  
  This constructs a new message object.  Normally you would want
  construct C<HTTP::Request> or C<HTTP::Response> objects instead.
  
  The optional $header argument should be a reference to an
  C<HTTP::Headers> object or a plain array reference of key/value pairs.
  If an C<HTTP::Headers> object is provided then a copy of it will be
  embedded into the constructed message, i.e. it will not be owned and
  can be modified afterwards without affecting the message.
  
  The optional $content argument should be a string of bytes.
  
  =item $mess = HTTP::Message->parse( $str )
  
  This constructs a new message object by parsing the given string.
  
  =item $mess->headers
  
  Returns the embedded C<HTTP::Headers> object.
  
  =item $mess->headers_as_string
  
  =item $mess->headers_as_string( $eol )
  
  Call the as_string() method for the headers in the
  message.  This will be the same as
  
      $mess->headers->as_string
  
  but it will make your program a whole character shorter :-)
  
  =item $mess->content
  
  =item $mess->content( $bytes )
  
  The content() method sets the raw content if an argument is given.  If no
  argument is given the content is not touched.  In either case the
  original raw content is returned.
  
  Note that the content should be a string of bytes.  Strings in perl
  can contain characters outside the range of a byte.  The C<Encode>
  module can be used to turn such strings into a string of bytes.
  
  =item $mess->add_content( $bytes )
  
  The add_content() methods appends more data bytes to the end of the
  current content buffer.
  
  =item $mess->add_content_utf8( $string )
  
  The add_content_utf8() method appends the UTF-8 bytes representing the
  string to the end of the current content buffer.
  
  =item $mess->content_ref
  
  =item $mess->content_ref( \$bytes )
  
  The content_ref() method will return a reference to content buffer string.
  It can be more efficient to access the content this way if the content
  is huge, and it can even be used for direct manipulation of the content,
  for instance:
  
    ${$res->content_ref} =~ s/\bfoo\b/bar/g;
  
  This example would modify the content buffer in-place.
  
  If an argument is passed it will setup the content to reference some
  external source.  The content() and add_content() methods
  will automatically dereference scalar references passed this way.  For
  other references content() will return the reference itself and
  add_content() will refuse to do anything.
  
  =item $mess->content_charset
  
  This returns the charset used by the content in the message.  The
  charset is either found as the charset attribute of the
  C<Content-Type> header or by guessing.
  
  See L<http://www.w3.org/TR/REC-html40/charset.html#spec-char-encoding>
  for details about how charset is determined.
  
  =item $mess->decoded_content( %options )
  
  Returns the content with any C<Content-Encoding> undone and for textual content
  the raw content encoded to Perl's Unicode strings.  If the C<Content-Encoding>
  or C<charset> of the message is unknown this method will fail by returning
  C<undef>.
  
  The following options can be specified.
  
  =over
  
  =item C<charset>
  
  This override the charset parameter for text content.  The value
  C<none> can used to suppress decoding of the charset.
  
  =item C<default_charset>
  
  This override the default charset guessed by content_charset() or
  if that fails "ISO-8859-1".
  
  =item C<alt_charset>
  
  If decoding fails because the charset specified in the Content-Type header
  isn't recognized by Perl's Encode module, then try decoding using this charset
  instead of failing.  The C<alt_charset> might be specified as C<none> to simply
  return the string without any decoding of charset as alternative.
  
  =item C<charset_strict>
  
  Abort decoding if malformed characters is found in the content.  By
  default you get the substitution character ("\x{FFFD}") in place of
  malformed characters.
  
  =item C<raise_error>
  
  If TRUE then raise an exception if not able to decode content.  Reason
  might be that the specified C<Content-Encoding> or C<charset> is not
  supported.  If this option is FALSE, then decoded_content() will return
  C<undef> on errors, but will still set $@.
  
  =item C<ref>
  
  If TRUE then a reference to decoded content is returned.  This might
  be more efficient in cases where the decoded content is identical to
  the raw content as no data copying is required in this case.
  
  =back
  
  =item $mess->decodable
  
  =item HTTP::Message::decodable()
  
  This returns the encoding identifiers that decoded_content() can
  process.  In scalar context returns a comma separated string of
  identifiers.
  
  This value is suitable for initializing the C<Accept-Encoding> request
  header field.
  
  =item $mess->decode
  
  This method tries to replace the content of the message with the
  decoded version and removes the C<Content-Encoding> header.  Returns
  TRUE if successful and FALSE if not.
  
  If the message does not have a C<Content-Encoding> header this method
  does nothing and returns TRUE.
  
  Note that the content of the message is still bytes after this method
  has been called and you still need to call decoded_content() if you
  want to process its content as a string.
  
  =item $mess->encode( $encoding, ... )
  
  Apply the given encodings to the content of the message.  Returns TRUE
  if successful. The "identity" (non-)encoding is always supported; other
  currently supported encodings, subject to availability of required
  additional modules, are "gzip", "deflate", "x-bzip2" and "base64".
  
  A successful call to this function will set the C<Content-Encoding>
  header.
  
  Note that C<multipart/*> or C<message/*> messages can't be encoded and
  this method will croak if you try.
  
  =item $mess->parts
  
  =item $mess->parts( @parts )
  
  =item $mess->parts( \@parts )
  
  Messages can be composite, i.e. contain other messages.  The composite
  messages have a content type of C<multipart/*> or C<message/*>.  This
  method give access to the contained messages.
  
  The argumentless form will return a list of C<HTTP::Message> objects.
  If the content type of $msg is not C<multipart/*> or C<message/*> then
  this will return the empty list.  In scalar context only the first
  object is returned.  The returned message parts should be regarded as
  read-only (future versions of this library might make it possible
  to modify the parent by modifying the parts).
  
  If the content type of $msg is C<message/*> then there will only be
  one part returned.
  
  If the content type is C<message/http>, then the return value will be
  either an C<HTTP::Request> or an C<HTTP::Response> object.
  
  If a @parts argument is given, then the content of the message will be
  modified. The array reference form is provided so that an empty list
  can be provided.  The @parts array should contain C<HTTP::Message>
  objects.  The @parts objects are owned by $mess after this call and
  should not be modified or made part of other messages.
  
  When updating the message with this method and the old content type of
  $mess is not C<multipart/*> or C<message/*>, then the content type is
  set to C<multipart/mixed> and all other content headers are cleared.
  
  This method will croak if the content type is C<message/*> and more
  than one part is provided.
  
  =item $mess->add_part( $part )
  
  This will add a part to a message.  The $part argument should be
  another C<HTTP::Message> object.  If the previous content type of
  $mess is not C<multipart/*> then the old content (together with all
  content headers) will be made part #1 and the content type made
  C<multipart/mixed> before the new part is added.  The $part object is
  owned by $mess after this call and should not be modified or made part
  of other messages.
  
  There is no return value.
  
  =item $mess->clear
  
  Will clear the headers and set the content to the empty string.  There
  is no return value
  
  =item $mess->protocol
  
  =item $mess->protocol( $proto )
  
  Sets the HTTP protocol used for the message.  The protocol() is a string
  like C<HTTP/1.0> or C<HTTP/1.1>.
  
  =item $mess->clone
  
  Returns a copy of the message object.
  
  =item $mess->as_string
  
  =item $mess->as_string( $eol )
  
  Returns the message formatted as a single string.
  
  The optional $eol parameter specifies the line ending sequence to use.
  The default is "\n".  If no $eol is given then as_string will ensure
  that the returned string is newline terminated (even when the message
  content is not).  No extra newline is appended if an explicit $eol is
  passed.
  
  =item $mess->dump( %opt )
  
  Returns the message formatted as a string.  In void context print the string.
  
  This differs from C<< $mess->as_string >> in that it escapes the bytes
  of the content so that it's safe to print them and it limits how much
  content to print.  The escapes syntax used is the same as for Perl's
  double quoted strings.  If there is no content the string "(no
  content)" is shown in its place.
  
  Options to influence the output can be passed as key/value pairs. The
  following options are recognized:
  
  =over
  
  =item maxlength => $num
  
  How much of the content to show.  The default is 512.  Set this to 0
  for unlimited.
  
  If the content is longer then the string is chopped at the limit and
  the string "...\n(### more bytes not shown)" appended.
  
  =item no_content => $str
  
  Replaces the "(no content)" marker.
  
  =item prefix => $str
  
  A string that will be prefixed to each line of the dump.
  
  =back
  
  =back
  
  All methods unknown to C<HTTP::Message> itself are delegated to the
  C<HTTP::Headers> object that is part of every message.  This allows
  convenient access to these methods.  Refer to L<HTTP::Headers> for
  details of these methods:
  
      $mess->header( $field => $val )
      $mess->push_header( $field => $val )
      $mess->init_header( $field => $val )
      $mess->remove_header( $field )
      $mess->remove_content_headers
      $mess->header_field_names
      $mess->scan( \&doit )
  
      $mess->date
      $mess->expires
      $mess->if_modified_since
      $mess->if_unmodified_since
      $mess->last_modified
      $mess->content_type
      $mess->content_encoding
      $mess->content_length
      $mess->content_language
      $mess->title
      $mess->user_agent
      $mess->server
      $mess->from
      $mess->referer
      $mess->www_authenticate
      $mess->authorization
      $mess->proxy_authorization
      $mess->authorization_basic
      $mess->proxy_authorization_basic
  
  =head1 COPYRIGHT
  
  Copyright 1995-2004 Gisle Aas.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
HTTP_MESSAGE

    $main::fatpacked{"HTTP/Negotiate.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_NEGOTIATE';
  package HTTP::Negotiate;
  
  $VERSION = "6.01";
  sub Version { $VERSION; }
  
  require Exporter;
  @ISA = qw(Exporter);
  @EXPORT = qw(choose);
  
  require HTTP::Headers;
  
  $DEBUG = 0;
  
  sub choose ($;$)
  {
      my($variants, $request) = @_;
      my(%accept);
  
      unless (defined $request) {
  	# Create a request object from the CGI environment variables
  	$request = HTTP::Headers->new;
  	$request->header('Accept', $ENV{HTTP_ACCEPT})
  	  if $ENV{HTTP_ACCEPT};
  	$request->header('Accept-Charset', $ENV{HTTP_ACCEPT_CHARSET})
  	  if $ENV{HTTP_ACCEPT_CHARSET};
  	$request->header('Accept-Encoding', $ENV{HTTP_ACCEPT_ENCODING})
  	  if $ENV{HTTP_ACCEPT_ENCODING};
  	$request->header('Accept-Language', $ENV{HTTP_ACCEPT_LANGUAGE})
  	  if $ENV{HTTP_ACCEPT_LANGUAGE};
      }
  
      # Get all Accept values from the request.  Build a hash initialized
      # like this:
      #
      #   %accept = ( type =>     { 'audio/*'     => { q => 0.2, mbx => 20000 },
      #                             'audio/basic' => { q => 1 },
      #                           },
      #               language => { 'no'          => { q => 1 },
      #                           }
      #             );
  
      $request->scan(sub {
  	my($key, $val) = @_;
  
  	my $type;
  	if ($key =~ s/^Accept-//) {
  	    $type = lc($key);
  	}
  	elsif ($key eq "Accept") {
  	    $type = "type";
  	}
  	else {
  	    return;
  	}
  
  	$val =~ s/\s+//g;
  	my $default_q = 1;
  	for my $name (split(/,/, $val)) {
  	    my(%param, $param);
  	    if ($name =~ s/;(.*)//) {
  		for $param (split(/;/, $1)) {
  		    my ($pk, $pv) = split(/=/, $param, 2);
  		    $param{lc $pk} = $pv;
  		}
  	    }
  	    $name = lc $name;
  	    if (defined $param{'q'}) {
  		$param{'q'} = 1 if $param{'q'} > 1;
  		$param{'q'} = 0 if $param{'q'} < 0;
  	    }
  	    else {
  		$param{'q'} = $default_q;
  
  		# This makes sure that the first ones are slightly better off
  		# and therefore more likely to be chosen.
  		$default_q -= 0.0001;
  	    }
  	    $accept{$type}{$name} = \%param;
  	}
      });
  
      # Check if any of the variants specify a language.  We do this
      # because it influences how we treat those without (they default to
      # 0.5 instead of 1).
      my $any_lang = 0;
      for $var (@$variants) {
  	if ($var->[5]) {
  	    $any_lang = 1;
  	    last;
  	}
      }
  
      if ($DEBUG) {
  	print "Negotiation parameters in the request\n";
  	for $type (keys %accept) {
  	    print " $type:\n";
  	    for $name (keys %{$accept{$type}}) {
  		print "    $name\n";
  		for $pv (keys %{$accept{$type}{$name}}) {
  		    print "      $pv = $accept{$type}{$name}{$pv}\n";
  		}
  	    }
  	}
      }
  
      my @Q = ();  # This is where we collect the results of the
  		 # quality calculations
  
      # Calculate quality for all the variants that are available.
      for (@$variants) {
  	my($id, $qs, $ct, $enc, $cs, $lang, $bs) = @$_;
  	$qs = 1 unless defined $qs;
          $ct = '' unless defined $ct;
  	$bs = 0 unless defined $bs;
  	$lang = lc($lang) if $lang; # lg tags are always case-insensitive
  	if ($DEBUG) {
  	    print "\nEvaluating $id (ct='$ct')\n";
  	    printf "  qs   = %.3f\n", $qs;
  	    print  "  enc  = $enc\n"  if $enc && !ref($enc);
  	    print  "  enc  = @$enc\n" if $enc && ref($enc);
  	    print  "  cs   = $cs\n"   if $cs;
  	    print  "  lang = $lang\n" if $lang;
  	    print  "  bs   = $bs\n"   if $bs;
  	}
  
  	# Calculate encoding quality
  	my $qe = 1;
  	# If the variant has no assigned Content-Encoding, or if no
  	# Accept-Encoding field is present, then the value assigned
  	# is "qe=1".  If *all* of the variant's content encodings
  	# are listed in the Accept-Encoding field, then the value
  	# assigned is "qw=1".  If *any* of the variant's content
  	# encodings are not listed in the provided Accept-Encoding
  	# field, then the value assigned is "qe=0"
  	if (exists $accept{'encoding'} && $enc) {
  	    my @enc = ref($enc) ? @$enc : ($enc);
  	    for (@enc) {
  		print "Is encoding $_ accepted? " if $DEBUG;
  		unless(exists $accept{'encoding'}{$_}) {
  		    print "no\n" if $DEBUG;
  		    $qe = 0;
  		    last;
  		}
  		else {
  		    print "yes\n" if $DEBUG;
  		}
  	    }
  	}
  
  	# Calculate charset quality
  	my $qc  = 1;
  	# If the variant's media-type has no charset parameter,
  	# or the variant's charset is US-ASCII, or if no Accept-Charset
  	# field is present, then the value assigned is "qc=1".  If the
  	# variant's charset is listed in the Accept-Charset field,
  	# then the value assigned is "qc=1.  Otherwise, if the variant's
  	# charset is not listed in the provided Accept-Encoding field,
  	# then the value assigned is "qc=0".
  	if (exists $accept{'charset'} && $cs && $cs ne 'us-ascii' ) {
  	    $qc = 0 unless $accept{'charset'}{$cs};
  	}
  
  	# Calculate language quality
  	my $ql  = 1;
  	if ($lang && exists $accept{'language'}) {
  	    my @lang = ref($lang) ? @$lang : ($lang);
  	    # If any of the variant's content languages are listed
  	    # in the Accept-Language field, the the value assigned is
  	    # the largest of the "q" parameter values for those language
  	    # tags.
  	    my $q = undef;
  	    for (@lang) {
  		next unless exists $accept{'language'}{$_};
  		my $this_q = $accept{'language'}{$_}{'q'};
  		$q = $this_q unless defined $q;
  		$q = $this_q if $this_q > $q;
  	    }
  	    if(defined $q) {
  	        $DEBUG and print " -- Exact language match at q=$q\n";
  	    }
  	    else {
  		# If there was no exact match and at least one of
  		# the Accept-Language field values is a complete
  		# subtag prefix of the content language tag(s), then
  		# the "q" parameter value of the largest matching
  		# prefix is used.
  		$DEBUG and print " -- No exact language match\n";
  		my $selected = undef;
  		for $al (keys %{ $accept{'language'} }) {
  		    if (index($al, "$lang-") == 0) {
  		        # $lang starting with $al isn't enough, or else
  		        #  Accept-Language: hu (Hungarian) would seem
  		        #  to accept a document in hup (Hupa)
  		        $DEBUG and print " -- $al ISA $lang\n";
  			$selected = $al unless defined $selected;
  			$selected = $al if length($al) > length($selected);
  		    }
  		    else {
  		        $DEBUG and print " -- $lang  isn't a $al\n";
  		    }
  		}
  		$q = $accept{'language'}{$selected}{'q'} if $selected;
  
  		# If none of the variant's content language tags or
  		# tag prefixes are listed in the provided
  		# Accept-Language field, then the value assigned
  		# is "ql=0.001"
  		$q = 0.001 unless defined $q;
  	    }
  	    $ql = $q;
  	}
  	else {
  	    $ql = 0.5 if $any_lang && exists $accept{'language'};
  	}
  
  	my $q   = 1;
  	my $mbx = undef;
  	# If no Accept field is given, then the value assigned is "q=1".
  	# If at least one listed media range matches the variant's media
  	# type, then the "q" parameter value assigned to the most specific
  	# of those matched is used (e.g. "text/html;version=3.0" is more
  	# specific than "text/html", which is more specific than "text/*",
  	# which in turn is more specific than "*/*"). If not media range
  	# in the provided Accept field matches the variant's media type,
  	# then the value assigned is "q=0".
  	if (exists $accept{'type'} && $ct) {
  	    # First we clean up our content-type
  	    $ct =~ s/\s+//g;
  	    my $params = "";
  	    $params = $1 if $ct =~ s/;(.*)//;
  	    my($type, $subtype) = split("/", $ct, 2);
  	    my %param = ();
  	    for $param (split(/;/, $params)) {
  		my($pk,$pv) = split(/=/, $param, 2);
  		$param{$pk} = $pv;
  	    }
  
  	    my $sel_q = undef;
  	    my $sel_mbx = undef;
  	    my $sel_specificness = 0;
  
  	    ACCEPT_TYPE:
  	    for $at (keys %{ $accept{'type'} }) {
  		print "Consider $at...\n" if $DEBUG;
  		my($at_type, $at_subtype) = split("/", $at, 2);
  		# Is it a match on the type
  		next if $at_type    ne '*' && $at_type    ne $type;
  		next if $at_subtype ne '*' && $at_subtype ne $subtype;
  		my $specificness = 0;
  		$specificness++ if $at_type ne '*';
  		$specificness++ if $at_subtype ne '*';
  		# Let's see if content-type parameters also match
  		while (($pk, $pv) = each %param) {
  		    print "Check if $pk = $pv is true\n" if $DEBUG;
  		    next unless exists $accept{'type'}{$at}{$pk};
  		    next ACCEPT_TYPE
  		      unless $accept{'type'}{$at}{$pk} eq $pv;
  		    print "yes it is!!\n" if $DEBUG;
  		    $specificness++;
  		}
  		print "Hurray, type match with specificness = $specificness\n"
  		  if $DEBUG;
  
  		if (!defined($sel_q) || $sel_specificness < $specificness) {
  		    $sel_q   = $accept{'type'}{$at}{'q'};
  		    $sel_mbx = $accept{'type'}{$at}{'mbx'};
  		    $sel_specificness = $specificness;
  		}
  	    }
  	    $q   = $sel_q || 0;
  	    $mbx = $sel_mbx;
  	}
  
  	my $Q;
  	if (!defined($mbx) || $mbx >= $bs) {
  	    $Q = $qs * $qe * $qc * $ql * $q;
  	}
  	else {
  	    $Q = 0;
  	    print "Variant's size is too large ==> Q=0\n" if $DEBUG;
  	}
  
  	if ($DEBUG) {
  	    $mbx = "undef" unless defined $mbx;
  	    printf "Q=%.4f", $Q;
  	    print "  (q=$q, mbx=$mbx, qe=$qe, qc=$qc, ql=$ql, qs=$qs)\n";
  	}
  
  	push(@Q, [$id, $Q, $bs]);
      }
  
  
      @Q = sort { $b->[1] <=> $a->[1] || $a->[2] <=> $b->[2] } @Q;
  
      return @Q if wantarray;
      return undef unless @Q;
      return undef if $Q[0][1] == 0;
      $Q[0][0];
  }
  
  1;
  
  __END__
  
  
  =head1 NAME
  
  HTTP::Negotiate - choose a variant to serve
  
  =head1 SYNOPSIS
  
   use HTTP::Negotiate qw(choose);
  
   #  ID       QS     Content-Type   Encoding Char-Set        Lang   Size
   $variants =
    [['var1',  1.000, 'text/html',   undef,   'iso-8859-1',   'en',   3000],
     ['var2',  0.950, 'text/plain',  'gzip',  'us-ascii',     'no',    400],
     ['var3',  0.3,   'image/gif',   undef,   undef,          undef, 43555],
    ];
  
   @preferred = choose($variants, $request_headers);
   $the_one   = choose($variants);
  
  =head1 DESCRIPTION
  
  This module provides a complete implementation of the HTTP content
  negotiation algorithm specified in F<draft-ietf-http-v11-spec-00.ps>
  chapter 12.  Content negotiation allows for the selection of a
  preferred content representation based upon attributes of the
  negotiable variants and the value of the various Accept* header fields
  in the request.
  
  The variants are ordered by preference by calling the function
  choose().
  
  The first parameter is reference to an array of the variants to
  choose among.
  Each element in this array is an array with the values [$id, $qs,
  $content_type, $content_encoding, $charset, $content_language,
  $content_length] whose meanings are described
  below. The $content_encoding and $content_language can be either a
  single scalar value or an array reference if there are several values.
  
  The second optional parameter is either a HTTP::Headers or a HTTP::Request
  object which is searched for "Accept*" headers.  If this
  parameter is missing, then the accept specification is initialized
  from the CGI environment variables HTTP_ACCEPT, HTTP_ACCEPT_CHARSET,
  HTTP_ACCEPT_ENCODING and HTTP_ACCEPT_LANGUAGE.
  
  In an array context, choose() returns a list of [variant
  identifier, calculated quality, size] tuples.  The values are sorted by
  quality, highest quality first.  If the calculated quality is the same
  for two variants, then they are sorted by size (smallest first). I<E.g.>:
  
    (['var1', 1, 2000], ['var2', 0.3, 512], ['var3', 0.3, 1024]);
  
  Note that also zero quality variants are included in the return list
  even if these should never be served to the client.
  
  In a scalar context, it returns the identifier of the variant with the
  highest score or C<undef> if none have non-zero quality.
  
  If the $HTTP::Negotiate::DEBUG variable is set to TRUE, then a lot of
  noise is generated on STDOUT during evaluation of choose().
  
  =head1 VARIANTS
  
  A variant is described by a list of the following values.  If the
  attribute does not make sense or is unknown for a variant, then use
  C<undef> instead.
  
  =over 3
  
  =item identifier
  
  This is a string that you use as the name for the variant.  This
  identifier for the preferred variants returned by choose().
  
  =item qs
  
  This is a number between 0.000 and 1.000 that describes the "source
  quality".  This is what F<draft-ietf-http-v11-spec-00.ps> says about this
  value:
  
  Source quality is measured by the content provider as representing the
  amount of degradation from the original source.  For example, a
  picture in JPEG form would have a lower qs when translated to the XBM
  format, and much lower qs when translated to an ASCII-art
  representation.  Note, however, that this is a function of the source
  - an original piece of ASCII-art may degrade in quality if it is
  captured in JPEG form.  The qs values should be assigned to each
  variant by the content provider; if no qs value has been assigned, the
  default is generally "qs=1".
  
  =item content-type
  
  This is the media type of the variant.  The media type does not
  include a charset attribute, but might contain other parameters.
  Examples are:
  
    text/html
    text/html;version=2.0
    text/plain
    image/gif
    image/jpg
  
  =item content-encoding
  
  This is one or more content encodings that has been applied to the
  variant.  The content encoding is generally used as a modifier to the
  content media type.  The most common content encodings are:
  
    gzip
    compress
  
  =item content-charset
  
  This is the character set used when the variant contains text.
  The charset value should generally be C<undef> or one of these:
  
    us-ascii
    iso-8859-1 ... iso-8859-9
    iso-2022-jp
    iso-2022-jp-2
    iso-2022-kr
    unicode-1-1
    unicode-1-1-utf-7
    unicode-1-1-utf-8
  
  =item content-language
  
  This describes one or more languages that are used in the variant.
  Language is described like this in F<draft-ietf-http-v11-spec-00.ps>: A
  language is in this context a natural language spoken, written, or
  otherwise conveyed by human beings for communication of information to
  other human beings.  Computer languages are explicitly excluded.
  
  The language tags are defined by RFC 3066.  Examples
  are:
  
    no               Norwegian
    en               International English
    en-US            US English
    en-cockney
  
  =item content-length
  
  This is the number of bytes used to represent the content.
  
  =back
  
  =head1 ACCEPT HEADERS
  
  The following Accept* headers can be used for describing content
  preferences in a request (This description is an edited extract from
  F<draft-ietf-http-v11-spec-00.ps>):
  
  =over 3
  
  =item Accept
  
  This header can be used to indicate a list of media ranges which are
  acceptable as a response to the request.  The "*" character is used to
  group media types into ranges, with "*/*" indicating all media types
  and "type/*" indicating all subtypes of that type.
  
  The parameter q is used to indicate the quality factor, which
  represents the user's preference for that range of media types.  The
  parameter mbx gives the maximum acceptable size of the response
  content. The default values are: q=1 and mbx=infinity. If no Accept
  header is present, then the client accepts all media types with q=1.
  
  For example:
  
    Accept: audio/*;q=0.2;mbx=200000, audio/basic
  
  would mean: "I prefer audio/basic (of any size), but send me any audio
  type if it is the best available after an 80% mark-down in quality and
  its size is less than 200000 bytes"
  
  
  =item Accept-Charset
  
  Used to indicate what character sets are acceptable for the response.
  The "us-ascii" character set is assumed to be acceptable for all user
  agents.  If no Accept-Charset field is given, the default is that any
  charset is acceptable.  Example:
  
    Accept-Charset: iso-8859-1, unicode-1-1
  
  
  =item Accept-Encoding
  
  Restricts the Content-Encoding values which are acceptable in the
  response.  If no Accept-Encoding field is present, the server may
  assume that the client will accept any content encoding.  An empty
  Accept-Encoding means that no content encoding is acceptable.  Example:
  
    Accept-Encoding: compress, gzip
  
  
  =item Accept-Language
  
  This field is similar to Accept, but restricts the set of natural
  languages that are preferred in a response.  Each language may be
  given an associated quality value which represents an estimate of the
  user's comprehension of that language.  For example:
  
    Accept-Language: no, en-gb;q=0.8, de;q=0.55
  
  would mean: "I prefer Norwegian, but will accept British English (with
  80% comprehension) or German (with 55% comprehension).
  
  =back
  
  
  =head1 COPYRIGHT
  
  Copyright 1996,2001 Gisle Aas.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =head1 AUTHOR
  
  Gisle Aas <gisle@aas.no>
  
  =cut
HTTP_NEGOTIATE

    $main::fatpacked{"HTTP/Request.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_REQUEST';
  package HTTP::Request;
  
  use strict;
  use warnings;
  
  use base 'HTTP::Message';
  
  our $VERSION = "6.11";
  
  sub new
  {
      my($class, $method, $uri, $header, $content) = @_;
      my $self = $class->SUPER::new($header, $content);
      $self->method($method);
      $self->uri($uri);
      $self;
  }
  
  
  sub parse
  {
      my($class, $str) = @_;
      my $request_line;
      if ($str =~ s/^(.*)\n//) {
  	$request_line = $1;
      }
      else {
  	$request_line = $str;
  	$str = "";
      }
  
      my $self = $class->SUPER::parse($str);
      my($method, $uri, $protocol) = split(' ', $request_line);
      $self->method($method) if defined($method);
      $self->uri($uri) if defined($uri);
      $self->protocol($protocol) if $protocol;
      $self;
  }
  
  
  sub clone
  {
      my $self = shift;
      my $clone = bless $self->SUPER::clone, ref($self);
      $clone->method($self->method);
      $clone->uri($self->uri);
      $clone;
  }
  
  
  sub method
  {
      shift->_elem('_method', @_);
  }
  
  
  sub uri
  {
      my $self = shift;
      my $old = $self->{'_uri'};
      if (@_) {
  	my $uri = shift;
  	if (!defined $uri) {
  	    # that's ok
  	}
  	elsif (ref $uri) {
  	    Carp::croak("A URI can't be a " . ref($uri) . " reference")
  		if ref($uri) eq 'HASH' or ref($uri) eq 'ARRAY';
  	    Carp::croak("Can't use a " . ref($uri) . " object as a URI")
  		unless $uri->can('scheme');
  	    $uri = $uri->clone;
  	    unless ($HTTP::URI_CLASS eq "URI") {
  		# Argh!! Hate this... old LWP legacy!
  		eval { local $SIG{__DIE__}; $uri = $uri->abs; };
  		die $@ if $@ && $@ !~ /Missing base argument/;
  	    }
  	}
  	else {
  	    $uri = $HTTP::URI_CLASS->new($uri);
  	}
  	$self->{'_uri'} = $uri;
          delete $self->{'_uri_canonical'};
      }
      $old;
  }
  
  *url = \&uri;  # legacy
  
  sub uri_canonical
  {
      my $self = shift;
      return $self->{'_uri_canonical'} ||= $self->{'_uri'}->canonical;
  }
  
  
  sub accept_decodable
  {
      my $self = shift;
      $self->header("Accept-Encoding", scalar($self->decodable));
  }
  
  sub as_string
  {
      my $self = shift;
      my($eol) = @_;
      $eol = "\n" unless defined $eol;
  
      my $req_line = $self->method || "-";
      my $uri = $self->uri;
      $uri = (defined $uri) ? $uri->as_string : "-";
      $req_line .= " $uri";
      my $proto = $self->protocol;
      $req_line .= " $proto" if $proto;
  
      return join($eol, $req_line, $self->SUPER::as_string(@_));
  }
  
  sub dump
  {
      my $self = shift;
      my @pre = ($self->method || "-", $self->uri || "-");
      if (my $prot = $self->protocol) {
  	push(@pre, $prot);
      }
  
      return $self->SUPER::dump(
          preheader => join(" ", @pre),
  	@_,
      );
  }
  
  
  1;
  
  __END__
  
  =head1 NAME
  
  HTTP::Request - HTTP style request message
  
  =head1 SYNOPSIS
  
   require HTTP::Request;
   $request = HTTP::Request->new(GET => 'http://www.example.com/');
  
  and usually used like this:
  
   $ua = LWP::UserAgent->new;
   $response = $ua->request($request);
  
  =head1 DESCRIPTION
  
  C<HTTP::Request> is a class encapsulating HTTP style requests,
  consisting of a request line, some headers, and a content body. Note
  that the LWP library uses HTTP style requests even for non-HTTP
  protocols.  Instances of this class are usually passed to the
  request() method of an C<LWP::UserAgent> object.
  
  C<HTTP::Request> is a subclass of C<HTTP::Message> and therefore
  inherits its methods.  The following additional methods are available:
  
  =over 4
  
  =item $r = HTTP::Request->new( $method, $uri )
  
  =item $r = HTTP::Request->new( $method, $uri, $header )
  
  =item $r = HTTP::Request->new( $method, $uri, $header, $content )
  
  Constructs a new C<HTTP::Request> object describing a request on the
  object $uri using method $method.  The $method argument must be a
  string.  The $uri argument can be either a string, or a reference to a
  C<URI> object.  The optional $header argument should be a reference to
  an C<HTTP::Headers> object or a plain array reference of key/value
  pairs.  The optional $content argument should be a string of bytes.
  
  =item $r = HTTP::Request->parse( $str )
  
  This constructs a new request object by parsing the given string.
  
  =item $r->method
  
  =item $r->method( $val )
  
  This is used to get/set the method attribute.  The method should be a
  short string like "GET", "HEAD", "PUT" or "POST".
  
  =item $r->uri
  
  =item $r->uri( $val )
  
  This is used to get/set the uri attribute.  The $val can be a
  reference to a URI object or a plain string.  If a string is given,
  then it should be parsable as an absolute URI.
  
  =item $r->header( $field )
  
  =item $r->header( $field => $value )
  
  This is used to get/set header values and it is inherited from
  C<HTTP::Headers> via C<HTTP::Message>.  See L<HTTP::Headers> for
  details and other similar methods that can be used to access the
  headers.
  
  =item $r->accept_decodable
  
  This will set the C<Accept-Encoding> header to the list of encodings
  that decoded_content() can decode.
  
  =item $r->content
  
  =item $r->content( $bytes )
  
  This is used to get/set the content and it is inherited from the
  C<HTTP::Message> base class.  See L<HTTP::Message> for details and
  other methods that can be used to access the content.
  
  Note that the content should be a string of bytes.  Strings in perl
  can contain characters outside the range of a byte.  The C<Encode>
  module can be used to turn such strings into a string of bytes.
  
  =item $r->as_string
  
  =item $r->as_string( $eol )
  
  Method returning a textual representation of the request.
  
  =back
  
  =head1 SEE ALSO
  
  L<HTTP::Headers>, L<HTTP::Message>, L<HTTP::Request::Common>,
  L<HTTP::Response>
  
  =head1 COPYRIGHT
  
  Copyright 1995-2004 Gisle Aas.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
HTTP_REQUEST

    $main::fatpacked{"HTTP/Request/Common.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_REQUEST_COMMON';
  package HTTP::Request::Common;
  
  use strict;
  use warnings;
  
  our $DYNAMIC_FILE_UPLOAD ||= 0;  # make it defined (don't know why)
  
  use Exporter 5.57 'import';
  
  our @EXPORT =qw(GET HEAD PUT POST);
  our @EXPORT_OK = qw($DYNAMIC_FILE_UPLOAD DELETE);
  
  require HTTP::Request;
  use Carp();
  
  our $VERSION = "6.11";
  
  my $CRLF = "\015\012";   # "\r\n" is not portable
  
  sub GET  { _simple_req('GET',  @_); }
  sub HEAD { _simple_req('HEAD', @_); }
  sub DELETE { _simple_req('DELETE', @_); }
  
  for my $type (qw(PUT POST)) {
      no strict 'refs';
      *{ __PACKAGE__ . "::" . $type } = sub {
          return request_type_with_data($type, @_);
      };
  }
  
  sub request_type_with_data
  {
      my $type = shift;
      my $url  = shift;
      my $req = HTTP::Request->new($type => $url);
      my $content;
      $content = shift if @_ and ref $_[0];
      my($k, $v);
      while (($k,$v) = splice(@_, 0, 2)) {
  	if (lc($k) eq 'content') {
  	    $content = $v;
  	}
  	else {
  	    $req->push_header($k, $v);
  	}
      }
      my $ct = $req->header('Content-Type');
      unless ($ct) {
  	$ct = 'application/x-www-form-urlencoded';
      }
      elsif ($ct eq 'form-data') {
  	$ct = 'multipart/form-data';
      }
  
      if (ref $content) {
  	if ($ct =~ m,^multipart/form-data\s*(;|$),i) {
  	    require HTTP::Headers::Util;
  	    my @v = HTTP::Headers::Util::split_header_words($ct);
  	    Carp::carp("Multiple Content-Type headers") if @v > 1;
  	    @v = @{$v[0]};
  
  	    my $boundary;
  	    my $boundary_index;
  	    for (my @tmp = @v; @tmp;) {
  		my($k, $v) = splice(@tmp, 0, 2);
  		if ($k eq "boundary") {
  		    $boundary = $v;
  		    $boundary_index = @v - @tmp - 1;
  		    last;
  		}
  	    }
  
  	    ($content, $boundary) = form_data($content, $boundary, $req);
  
  	    if ($boundary_index) {
  		$v[$boundary_index] = $boundary;
  	    }
  	    else {
  		push(@v, boundary => $boundary);
  	    }
  
  	    $ct = HTTP::Headers::Util::join_header_words(@v);
  	}
  	else {
  	    # We use a temporary URI object to format
  	    # the application/x-www-form-urlencoded content.
  	    require URI;
  	    my $url = URI->new('http:');
  	    $url->query_form(ref($content) eq "HASH" ? %$content : @$content);
  	    $content = $url->query;
  
  	    # HTML/4.01 says that line breaks are represented as "CR LF" pairs (i.e., `%0D%0A')
  	    $content =~ s/(?<!%0D)%0A/%0D%0A/g if defined($content);
  	}
      }
  
      $req->header('Content-Type' => $ct);  # might be redundant
      if (defined($content)) {
  	$req->header('Content-Length' =>
  		     length($content)) unless ref($content);
  	$req->content($content);
      }
      else {
          $req->header('Content-Length' => 0);
      }
      $req;
  }
  
  
  sub _simple_req
  {
      my($method, $url) = splice(@_, 0, 2);
      my $req = HTTP::Request->new($method => $url);
      my($k, $v);
      my $content;
      while (($k,$v) = splice(@_, 0, 2)) {
  	if (lc($k) eq 'content') {
  	    $req->add_content($v);
              $content++;
  	}
  	else {
  	    $req->push_header($k, $v);
  	}
      }
      if ($content && !defined($req->header("Content-Length"))) {
          $req->header("Content-Length", length(${$req->content_ref}));
      }
      $req;
  }
  
  
  sub form_data   # RFC1867
  {
      my($data, $boundary, $req) = @_;
      my @data = ref($data) eq "HASH" ? %$data : @$data;  # copy
      my $fhparts;
      my @parts;
      while (my ($k,$v) = splice(@data, 0, 2)) {
  	if (!ref($v)) {
  	    $k =~ s/([\\\"])/\\$1/g;  # escape quotes and backslashes
              no warnings 'uninitialized';
  	    push(@parts,
  		 qq(Content-Disposition: form-data; name="$k"$CRLF$CRLF$v));
  	}
  	else {
  	    my($file, $usename, @headers) = @$v;
  	    unless (defined $usename) {
  		$usename = $file;
  		$usename =~ s,.*/,, if defined($usename);
  	    }
              $k =~ s/([\\\"])/\\$1/g;
  	    my $disp = qq(form-data; name="$k");
              if (defined($usename) and length($usename)) {
                  $usename =~ s/([\\\"])/\\$1/g;
                  $disp .= qq(; filename="$usename");
              }
  	    my $content = "";
  	    my $h = HTTP::Headers->new(@headers);
  	    if ($file) {
  		open(my $fh, "<", $file) or Carp::croak("Can't open file $file: $!");
  		binmode($fh);
  		if ($DYNAMIC_FILE_UPLOAD) {
  		    # will read file later, close it now in order to
                      # not accumulate to many open file handles
                      close($fh);
  		    $content = \$file;
  		}
  		else {
  		    local($/) = undef; # slurp files
  		    $content = <$fh>;
  		    close($fh);
  		}
  		unless ($h->header("Content-Type")) {
  		    require LWP::MediaTypes;
  		    LWP::MediaTypes::guess_media_type($file, $h);
  		}
  	    }
  	    if ($h->header("Content-Disposition")) {
  		# just to get it sorted first
  		$disp = $h->header("Content-Disposition");
  		$h->remove_header("Content-Disposition");
  	    }
  	    if ($h->header("Content")) {
  		$content = $h->header("Content");
  		$h->remove_header("Content");
  	    }
  	    my $head = join($CRLF, "Content-Disposition: $disp",
  			           $h->as_string($CRLF),
  			           "");
  	    if (ref $content) {
  		push(@parts, [$head, $$content]);
  		$fhparts++;
  	    }
  	    else {
  		push(@parts, $head . $content);
  	    }
  	}
      }
      return ("", "none") unless @parts;
  
      my $content;
      if ($fhparts) {
  	$boundary = boundary(10) # hopefully enough randomness
  	    unless $boundary;
  
  	# add the boundaries to the @parts array
  	for (1..@parts-1) {
  	    splice(@parts, $_*2-1, 0, "$CRLF--$boundary$CRLF");
  	}
  	unshift(@parts, "--$boundary$CRLF");
  	push(@parts, "$CRLF--$boundary--$CRLF");
  
  	# See if we can generate Content-Length header
  	my $length = 0;
  	for (@parts) {
  	    if (ref $_) {
  	 	my ($head, $f) = @$_;
  		my $file_size;
  		unless ( -f $f && ($file_size = -s _) ) {
  		    # The file is either a dynamic file like /dev/audio
  		    # or perhaps a file in the /proc file system where
  		    # stat may return a 0 size even though reading it
  		    # will produce data.  So we cannot make
  		    # a Content-Length header.  
  		    undef $length;
  		    last;
  		}
  	    	$length += $file_size + length $head;
  	    }
  	    else {
  		$length += length;
  	    }
          }
          $length && $req->header('Content-Length' => $length);
  
  	# set up a closure that will return content piecemeal
  	$content = sub {
  	    for (;;) {
  		unless (@parts) {
  		    defined $length && $length != 0 &&
  		    	Carp::croak "length of data sent did not match calculated Content-Length header.  Probably because uploaded file changed in size during transfer.";
  		    return;
  		}
  		my $p = shift @parts;
  		unless (ref $p) {
  		    $p .= shift @parts while @parts && !ref($parts[0]);
  		    defined $length && ($length -= length $p);
  		    return $p;
  		}
  		my($buf, $fh) = @$p;
                  unless (ref($fh)) {
                      my $file = $fh;
                      undef($fh);
                      open($fh, "<", $file) || Carp::croak("Can't open file $file: $!");
                      binmode($fh);
                  }
  		my $buflength = length $buf;
  		my $n = read($fh, $buf, 2048, $buflength);
  		if ($n) {
  		    $buflength += $n;
  		    unshift(@parts, ["", $fh]);
  		}
  		else {
  		    close($fh);
  		}
  		if ($buflength) {
  		    defined $length && ($length -= $buflength);
  		    return $buf 
  	    	}
  	    }
  	};
  
      }
      else {
  	$boundary = boundary() unless $boundary;
  
  	my $bno = 0;
        CHECK_BOUNDARY:
  	{
  	    for (@parts) {
  		if (index($_, $boundary) >= 0) {
  		    # must have a better boundary
  		    $boundary = boundary(++$bno);
  		    redo CHECK_BOUNDARY;
  		}
  	    }
  	    last;
  	}
  	$content = "--$boundary$CRLF" .
  	           join("$CRLF--$boundary$CRLF", @parts) .
  		   "$CRLF--$boundary--$CRLF";
      }
  
      wantarray ? ($content, $boundary) : $content;
  }
  
  
  sub boundary
  {
      my $size = shift || return "xYzZY";
      require MIME::Base64;
      my $b = MIME::Base64::encode(join("", map chr(rand(256)), 1..$size*3), "");
      $b =~ s/[\W]/X/g;  # ensure alnum only
      $b;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  HTTP::Request::Common - Construct common HTTP::Request objects
  
  =head1 SYNOPSIS
  
    use HTTP::Request::Common;
    $ua = LWP::UserAgent->new;
    $ua->request(GET 'http://www.sn.no/');
    $ua->request(POST 'http://somewhere/foo', [foo => bar, bar => foo]);
  
  =head1 DESCRIPTION
  
  This module provide functions that return newly created C<HTTP::Request>
  objects.  These functions are usually more convenient to use than the
  standard C<HTTP::Request> constructor for the most common requests.  The
  following functions are provided:
  
  =over 4
  
  =item GET $url
  
  =item GET $url, Header => Value,...
  
  The GET() function returns an C<HTTP::Request> object initialized with
  the "GET" method and the specified URL.  It is roughly equivalent to the
  following call
  
    HTTP::Request->new(
       GET => $url,
       HTTP::Headers->new(Header => Value,...),
    )
  
  but is less cluttered.  What is different is that a header named
  C<Content> will initialize the content part of the request instead of
  setting a header field.  Note that GET requests should normally not
  have a content, so this hack makes more sense for the PUT() and POST()
  functions described below.
  
  The get(...) method of C<LWP::UserAgent> exists as a shortcut for
  $ua->request(GET ...).
  
  =item HEAD $url
  
  =item HEAD $url, Header => Value,...
  
  Like GET() but the method in the request is "HEAD".
  
  The head(...)  method of "LWP::UserAgent" exists as a shortcut for
  $ua->request(HEAD ...).
  
  =item PUT $url
  
  =item PUT $url, Header => Value,...
  
  =item PUT $url, Header => Value,..., Content => $content
  
  Like GET() but the method in the request is "PUT".
  
  The content of the request can be specified using the "Content"
  pseudo-header.  This steals a bit of the header field namespace as
  there is no way to directly specify a header that is actually called
  "Content".  If you really need this you must update the request
  returned in a separate statement.
  
  =item DELETE $url
  
  =item DELETE $url, Header => Value,...
  
  Like GET() but the method in the request is "DELETE".  This function
  is not exported by default.
  
  =item POST $url
  
  =item POST $url, Header => Value,...
  
  =item POST $url, $form_ref, Header => Value,...
  
  =item POST $url, Header => Value,..., Content => $form_ref
  
  =item POST $url, Header => Value,..., Content => $content
  
  This works mostly like PUT() with "POST" as the method, but this
  function also takes a second optional array or hash reference
  parameter $form_ref.  As for PUT() the content can also be specified
  directly using the "Content" pseudo-header, and you may also provide
  the $form_ref this way.
  
  The $form_ref argument can be used to pass key/value pairs for the
  form content.  By default we will initialize a request using the
  C<application/x-www-form-urlencoded> content type.  This means that
  you can emulate an HTML E<lt>form> POSTing like this:
  
    POST 'http://www.perl.org/survey.cgi',
         [ name   => 'Gisle Aas',
           email  => 'gisle@aas.no',
           gender => 'M',
           born   => '1964',
           perc   => '3%',
         ];
  
  This will create an HTTP::Request object that looks like this:
  
    POST http://www.perl.org/survey.cgi
    Content-Length: 66
    Content-Type: application/x-www-form-urlencoded
  
    name=Gisle%20Aas&email=gisle%40aas.no&gender=M&born=1964&perc=3%25
  
  Multivalued form fields can be specified by either repeating the field
  name or by passing the value as an array reference.
  
  The POST method also supports the C<multipart/form-data> content used
  for I<Form-based File Upload> as specified in RFC 1867.  You trigger
  this content format by specifying a content type of C<'form-data'> as
  one of the request headers.  If one of the values in the $form_ref is
  an array reference, then it is treated as a file part specification
  with the following interpretation:
  
    [ $file, $filename, Header => Value... ]
    [ undef, $filename, Header => Value,..., Content => $content ]
  
  The first value in the array ($file) is the name of a file to open.
  This file will be read and its content placed in the request.  The
  routine will croak if the file can't be opened.  Use an C<undef> as
  $file value if you want to specify the content directly with a
  C<Content> header.  The $filename is the filename to report in the
  request.  If this value is undefined, then the basename of the $file
  will be used.  You can specify an empty string as $filename if you
  want to suppress sending the filename when you provide a $file value.
  
  If a $file is provided by no C<Content-Type> header, then C<Content-Type>
  and C<Content-Encoding> will be filled in automatically with the values
  returned by LWP::MediaTypes::guess_media_type()
  
  Sending my F<~/.profile> to the survey used as example above can be
  achieved by this:
  
    POST 'http://www.perl.org/survey.cgi',
         Content_Type => 'form-data',
         Content      => [ name  => 'Gisle Aas',
                           email => 'gisle@aas.no',
                           gender => 'M',
                           born   => '1964',
                           init   => ["$ENV{HOME}/.profile"],
                         ]
  
  This will create an HTTP::Request object that almost looks this (the
  boundary and the content of your F<~/.profile> is likely to be
  different):
  
    POST http://www.perl.org/survey.cgi
    Content-Length: 388
    Content-Type: multipart/form-data; boundary="6G+f"
  
    --6G+f
    Content-Disposition: form-data; name="name"
  
    Gisle Aas
    --6G+f
    Content-Disposition: form-data; name="email"
  
    gisle@aas.no
    --6G+f
    Content-Disposition: form-data; name="gender"
  
    M
    --6G+f
    Content-Disposition: form-data; name="born"
  
    1964
    --6G+f
    Content-Disposition: form-data; name="init"; filename=".profile"
    Content-Type: text/plain
  
    PATH=/local/perl/bin:$PATH
    export PATH
  
    --6G+f--
  
  If you set the $DYNAMIC_FILE_UPLOAD variable (exportable) to some TRUE
  value, then you get back a request object with a subroutine closure as
  the content attribute.  This subroutine will read the content of any
  files on demand and return it in suitable chunks.  This allow you to
  upload arbitrary big files without using lots of memory.  You can even
  upload infinite files like F</dev/audio> if you wish; however, if
  the file is not a plain file, there will be no Content-Length header
  defined for the request.  Not all servers (or server
  applications) like this.  Also, if the file(s) change in size between
  the time the Content-Length is calculated and the time that the last
  chunk is delivered, the subroutine will C<Croak>.
  
  The post(...)  method of "LWP::UserAgent" exists as a shortcut for
  $ua->request(POST ...).
  
  =back
  
  =head1 SEE ALSO
  
  L<HTTP::Request>, L<LWP::UserAgent>
  
  
  =head1 COPYRIGHT
  
  Copyright 1997-2004, Gisle Aas
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =cut
  
HTTP_REQUEST_COMMON

    $main::fatpacked{"HTTP/Response.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_RESPONSE';
  package HTTP::Response;
  
  use strict;
  use warnings;
  
  use base 'HTTP::Message';
  
  our $VERSION = "6.11";
  
  use HTTP::Status ();
  
  
  sub new
  {
      my($class, $rc, $msg, $header, $content) = @_;
      my $self = $class->SUPER::new($header, $content);
      $self->code($rc);
      $self->message($msg);
      $self;
  }
  
  
  sub parse
  {
      my($class, $str) = @_;
      my $status_line;
      if ($str =~ s/^(.*)\n//) {
  	$status_line = $1;
      }
      else {
  	$status_line = $str;
  	$str = "";
      }
  
      my $self = $class->SUPER::parse($str);
      my($protocol, $code, $message);
      if ($status_line =~ /^\d{3} /) {
         # Looks like a response created by HTTP::Response->new
         ($code, $message) = split(' ', $status_line, 2);
      } else {
         ($protocol, $code, $message) = split(' ', $status_line, 3);
      }
      $self->protocol($protocol) if $protocol;
      $self->code($code) if defined($code);
      $self->message($message) if defined($message);
      $self;
  }
  
  
  sub clone
  {
      my $self = shift;
      my $clone = bless $self->SUPER::clone, ref($self);
      $clone->code($self->code);
      $clone->message($self->message);
      $clone->request($self->request->clone) if $self->request;
      # we don't clone previous
      $clone;
  }
  
  
  sub code      { shift->_elem('_rc',      @_); }
  sub message   { shift->_elem('_msg',     @_); }
  sub previous  { shift->_elem('_previous',@_); }
  sub request   { shift->_elem('_request', @_); }
  
  
  sub status_line
  {
      my $self = shift;
      my $code = $self->{'_rc'}  || "000";
      my $mess = $self->{'_msg'} || HTTP::Status::status_message($code) || "Unknown code";
      return "$code $mess";
  }
  
  
  sub base
  {
      my $self = shift;
      my $base = (
  	$self->header('Content-Base'),        # used to be HTTP/1.1
  	$self->header('Content-Location'),    # HTTP/1.1
  	$self->header('Base'),                # HTTP/1.0
      )[0];
      if ($base && $base =~ /^$URI::scheme_re:/o) {
  	# already absolute
  	return $HTTP::URI_CLASS->new($base);
      }
  
      my $req = $self->request;
      if ($req) {
          # if $base is undef here, the return value is effectively
          # just a copy of $self->request->uri.
          return $HTTP::URI_CLASS->new_abs($base, $req->uri);
      }
  
      # can't find an absolute base
      return undef;
  }
  
  
  sub redirects {
      my $self = shift;
      my @r;
      my $r = $self;
      while (my $p = $r->previous) {
          push(@r, $p);
          $r = $p;
      }
      return @r unless wantarray;
      return reverse @r;
  }
  
  
  sub filename
  {
      my $self = shift;
      my $file;
  
      my $cd = $self->header('Content-Disposition');
      if ($cd) {
  	require HTTP::Headers::Util;
  	if (my @cd = HTTP::Headers::Util::split_header_words($cd)) {
  	    my ($disposition, undef, %cd_param) = @{$cd[-1]};
  	    $file = $cd_param{filename};
  
  	    # RFC 2047 encoded?
  	    if ($file && $file =~ /^=\?(.+?)\?(.+?)\?(.+)\?=$/) {
  		my $charset = $1;
  		my $encoding = uc($2);
  		my $encfile = $3;
  
  		if ($encoding eq 'Q' || $encoding eq 'B') {
  		    local($SIG{__DIE__});
  		    eval {
  			if ($encoding eq 'Q') {
  			    $encfile =~ s/_/ /g;
  			    require MIME::QuotedPrint;
  			    $encfile = MIME::QuotedPrint::decode($encfile);
  			}
  			else { # $encoding eq 'B'
  			    require MIME::Base64;
  			    $encfile = MIME::Base64::decode($encfile);
  			}
  
  			require Encode;
  			require Encode::Locale;
  			Encode::from_to($encfile, $charset, "locale_fs");
  		    };
  
  		    $file = $encfile unless $@;
  		}
  	    }
  	}
      }
  
      unless (defined($file) && length($file)) {
  	my $uri;
  	if (my $cl = $self->header('Content-Location')) {
  	    $uri = URI->new($cl);
  	}
  	elsif (my $request = $self->request) {
  	    $uri = $request->uri;
  	}
  
  	if ($uri) {
  	    $file = ($uri->path_segments)[-1];
  	}
      }
  
      if ($file) {
  	$file =~ s,.*[\\/],,;  # basename
      }
  
      if ($file && !length($file)) {
  	$file = undef;
      }
  
      $file;
  }
  
  
  sub as_string
  {
      my $self = shift;
      my($eol) = @_;
      $eol = "\n" unless defined $eol;
  
      my $status_line = $self->status_line;
      my $proto = $self->protocol;
      $status_line = "$proto $status_line" if $proto;
  
      return join($eol, $status_line, $self->SUPER::as_string(@_));
  }
  
  
  sub dump
  {
      my $self = shift;
  
      my $status_line = $self->status_line;
      my $proto = $self->protocol;
      $status_line = "$proto $status_line" if $proto;
  
      return $self->SUPER::dump(
  	preheader => $status_line,
          @_,
      );
  }
  
  
  sub is_info     { HTTP::Status::is_info     (shift->{'_rc'}); }
  sub is_success  { HTTP::Status::is_success  (shift->{'_rc'}); }
  sub is_redirect { HTTP::Status::is_redirect (shift->{'_rc'}); }
  sub is_error    { HTTP::Status::is_error    (shift->{'_rc'}); }
  sub is_client_error { HTTP::Status::is_client_error (shift->{'_rc'}); }
  sub is_server_error { HTTP::Status::is_server_error (shift->{'_rc'}); }
  
  
  sub error_as_HTML
  {
      my $self = shift;
      my $title = 'An Error Occurred';
      my $body  = $self->status_line;
      $body =~ s/&/&amp;/g;
      $body =~ s/</&lt;/g;
      return <<EOM;
  <html>
  <head><title>$title</title></head>
  <body>
  <h1>$title</h1>
  <p>$body</p>
  </body>
  </html>
  EOM
  }
  
  
  sub current_age
  {
      my $self = shift;
      my $time = shift;
  
      # Implementation of RFC 2616 section 13.2.3
      # (age calculations)
      my $response_time = $self->client_date;
      my $date = $self->date;
  
      my $age = 0;
      if ($response_time && $date) {
  	$age = $response_time - $date;  # apparent_age
  	$age = 0 if $age < 0;
      }
  
      my $age_v = $self->header('Age');
      if ($age_v && $age_v > $age) {
  	$age = $age_v;   # corrected_received_age
      }
  
      if ($response_time) {
  	my $request = $self->request;
  	if ($request) {
  	    my $request_time = $request->date;
  	    if ($request_time && $request_time < $response_time) {
  		# Add response_delay to age to get 'corrected_initial_age'
  		$age += $response_time - $request_time;
  	    }
  	}
  	$age += ($time || time) - $response_time;
      }
      return $age;
  }
  
  
  sub freshness_lifetime
  {
      my($self, %opt) = @_;
  
      # First look for the Cache-Control: max-age=n header
      for my $cc ($self->header('Cache-Control')) {
  	for my $cc_dir (split(/\s*,\s*/, $cc)) {
  	    return $1 if $cc_dir =~ /^max-age\s*=\s*(\d+)/i;
  	}
      }
  
      # Next possibility is to look at the "Expires" header
      my $date = $self->date || $self->client_date || $opt{time} || time;
      if (my $expires = $self->expires) {
  	return $expires - $date;
      }
  
      # Must apply heuristic expiration
      return undef if exists $opt{heuristic_expiry} && !$opt{heuristic_expiry};
  
      # Default heuristic expiration parameters
      $opt{h_min} ||= 60;
      $opt{h_max} ||= 24 * 3600;
      $opt{h_lastmod_fraction} ||= 0.10; # 10% since last-mod suggested by RFC2616
      $opt{h_default} ||= 3600;
  
      # Should give a warning if more than 24 hours according to
      # RFC 2616 section 13.2.4.  Here we just make this the default
      # maximum value.
  
      if (my $last_modified = $self->last_modified) {
  	my $h_exp = ($date - $last_modified) * $opt{h_lastmod_fraction};
  	return $opt{h_min} if $h_exp < $opt{h_min};
  	return $opt{h_max} if $h_exp > $opt{h_max};
  	return $h_exp;
      }
  
      # default when all else fails
      return $opt{h_min} if $opt{h_min} > $opt{h_default};
      return $opt{h_default};
  }
  
  
  sub is_fresh
  {
      my($self, %opt) = @_;
      $opt{time} ||= time;
      my $f = $self->freshness_lifetime(%opt);
      return undef unless defined($f);
      return $f > $self->current_age($opt{time});
  }
  
  
  sub fresh_until
  {
      my($self, %opt) = @_;
      $opt{time} ||= time;
      my $f = $self->freshness_lifetime(%opt);
      return undef unless defined($f);
      return $f - $self->current_age($opt{time}) + $opt{time};
  }
  
  1;
  
  
  __END__
  
  =head1 NAME
  
  HTTP::Response - HTTP style response message
  
  =head1 SYNOPSIS
  
  Response objects are returned by the request() method of the C<LWP::UserAgent>:
  
      # ...
      $response = $ua->request($request)
      if ($response->is_success) {
          print $response->decoded_content;
      }
      else {
          print STDERR $response->status_line, "\n";
      }
  
  =head1 DESCRIPTION
  
  The C<HTTP::Response> class encapsulates HTTP style responses.  A
  response consists of a response line, some headers, and a content
  body. Note that the LWP library uses HTTP style responses even for
  non-HTTP protocol schemes.  Instances of this class are usually
  created and returned by the request() method of an C<LWP::UserAgent>
  object.
  
  C<HTTP::Response> is a subclass of C<HTTP::Message> and therefore
  inherits its methods.  The following additional methods are available:
  
  =over 4
  
  =item $r = HTTP::Response->new( $code )
  
  =item $r = HTTP::Response->new( $code, $msg )
  
  =item $r = HTTP::Response->new( $code, $msg, $header )
  
  =item $r = HTTP::Response->new( $code, $msg, $header, $content )
  
  Constructs a new C<HTTP::Response> object describing a response with
  response code $code and optional message $msg.  The optional $header
  argument should be a reference to an C<HTTP::Headers> object or a
  plain array reference of key/value pairs.  The optional $content
  argument should be a string of bytes.  The meanings of these arguments are
  described below.
  
  =item $r = HTTP::Response->parse( $str )
  
  This constructs a new response object by parsing the given string.
  
  =item $r->code
  
  =item $r->code( $code )
  
  This is used to get/set the code attribute.  The code is a 3 digit
  number that encode the overall outcome of an HTTP response.  The
  C<HTTP::Status> module provide constants that provide mnemonic names
  for the code attribute.
  
  =item $r->message
  
  =item $r->message( $message )
  
  This is used to get/set the message attribute.  The message is a short
  human readable single line string that explains the response code.
  
  =item $r->header( $field )
  
  =item $r->header( $field => $value )
  
  This is used to get/set header values and it is inherited from
  C<HTTP::Headers> via C<HTTP::Message>.  See L<HTTP::Headers> for
  details and other similar methods that can be used to access the
  headers.
  
  =item $r->content
  
  =item $r->content( $bytes )
  
  This is used to get/set the raw content and it is inherited from the
  C<HTTP::Message> base class.  See L<HTTP::Message> for details and
  other methods that can be used to access the content.
  
  =item $r->decoded_content( %options )
  
  This will return the content after any C<Content-Encoding> and
  charsets have been decoded.  See L<HTTP::Message> for details.
  
  =item $r->request
  
  =item $r->request( $request )
  
  This is used to get/set the request attribute.  The request attribute
  is a reference to the request that caused this response.  It does
  not have to be the same request passed to the $ua->request() method,
  because there might have been redirects and authorization retries in
  between.
  
  =item $r->previous
  
  =item $r->previous( $response )
  
  This is used to get/set the previous attribute.  The previous
  attribute is used to link together chains of responses.  You get
  chains of responses if the first response is redirect or unauthorized.
  The value is C<undef> if this is the first response in a chain.
  
  Note that the method $r->redirects is provided as a more convenient
  way to access the response chain.
  
  =item $r->status_line
  
  Returns the string "E<lt>code> E<lt>message>".  If the message attribute
  is not set then the official name of E<lt>code> (see L<HTTP::Status>)
  is substituted.
  
  =item $r->base
  
  Returns the base URI for this response.  The return value will be a
  reference to a URI object.
  
  The base URI is obtained from one the following sources (in priority
  order):
  
  =over 4
  
  =item 1.
  
  Embedded in the document content, for instance <BASE HREF="...">
  in HTML documents.
  
  =item 2.
  
  A "Content-Base:" or a "Content-Location:" header in the response.
  
  For backwards compatibility with older HTTP implementations we will
  also look for the "Base:" header.
  
  =item 3.
  
  The URI used to request this response. This might not be the original
  URI that was passed to $ua->request() method, because we might have
  received some redirect responses first.
  
  =back
  
  If none of these sources provide an absolute URI, undef is returned.
  
  When the LWP protocol modules produce the HTTP::Response object, then
  any base URI embedded in the document (step 1) will already have
  initialized the "Content-Base:" header. This means that this method
  only performs the last 2 steps (the content is not always available
  either).
  
  =item $r->filename
  
  Returns a filename for this response.  Note that doing sanity checks
  on the returned filename (eg. removing characters that cannot be used
  on the target filesystem where the filename would be used, and
  laundering it for security purposes) are the caller's responsibility;
  the only related thing done by this method is that it makes a simple
  attempt to return a plain filename with no preceding path segments.
  
  The filename is obtained from one the following sources (in priority
  order):
  
  =over 4
  
  =item 1.
  
  A "Content-Disposition:" header in the response.  Proper decoding of
  RFC 2047 encoded filenames requires the C<MIME::QuotedPrint> (for "Q"
  encoding), C<MIME::Base64> (for "B" encoding), and C<Encode> modules.
  
  =item 2.
  
  A "Content-Location:" header in the response.
  
  =item 3.
  
  The URI used to request this response. This might not be the original
  URI that was passed to $ua->request() method, because we might have
  received some redirect responses first.
  
  =back
  
  If a filename cannot be derived from any of these sources, undef is
  returned.
  
  =item $r->as_string
  
  =item $r->as_string( $eol )
  
  Returns a textual representation of the response.
  
  =item $r->is_info
  
  =item $r->is_success
  
  =item $r->is_redirect
  
  =item $r->is_error
  
  =item $r->is_client_error
  
  =item $r->is_server_error
  
  These methods indicate if the response was informational, successful, a
  redirection, or an error.  See L<HTTP::Status> for the meaning of these.
  
  =item $r->error_as_HTML
  
  Returns a string containing a complete HTML document indicating what
  error occurred.  This method should only be called when $r->is_error
  is TRUE.
  
  =item $r->redirects
  
  Returns the list of redirect responses that lead up to this response
  by following the $r->previous chain.  The list order is oldest first.
  
  In scalar context return the number of redirect responses leading up
  to this one.
  
  =item $r->current_age
  
  Calculates the "current age" of the response as specified by RFC 2616
  section 13.2.3.  The age of a response is the time since it was sent
  by the origin server.  The returned value is a number representing the
  age in seconds.
  
  =item $r->freshness_lifetime( %opt )
  
  Calculates the "freshness lifetime" of the response as specified by
  RFC 2616 section 13.2.4.  The "freshness lifetime" is the length of
  time between the generation of a response and its expiration time.
  The returned value is the number of seconds until expiry.
  
  If the response does not contain an "Expires" or a "Cache-Control"
  header, then this function will apply some simple heuristic based on
  the "Last-Modified" header to determine a suitable lifetime.  The
  following options might be passed to control the heuristics:
  
  =over
  
  =item heuristic_expiry => $bool
  
  If passed as a FALSE value, don't apply heuristics and just return
  C<undef> when "Expires" or "Cache-Control" is lacking.
  
  =item h_lastmod_fraction => $num
  
  This number represent the fraction of the difference since the
  "Last-Modified" timestamp to make the expiry time.  The default is
  C<0.10>, the suggested typical setting of 10% in RFC 2616.
  
  =item h_min => $sec
  
  This is the lower limit of the heuristic expiry age to use.  The
  default is C<60> (1 minute).
  
  =item h_max => $sec
  
  This is the upper limit of the heuristic expiry age to use.  The
  default is C<86400> (24 hours).
  
  =item h_default => $sec
  
  This is the expiry age to use when nothing else applies.  The default
  is C<3600> (1 hour) or "h_min" if greater.
  
  =back
  
  =item $r->is_fresh( %opt )
  
  Returns TRUE if the response is fresh, based on the values of
  freshness_lifetime() and current_age().  If the response is no longer
  fresh, then it has to be re-fetched or re-validated by the origin
  server.
  
  Options might be passed to control expiry heuristics, see the
  description of freshness_lifetime().
  
  =item $r->fresh_until( %opt )
  
  Returns the time (seconds since epoch) when this entity is no longer fresh.
  
  Options might be passed to control expiry heuristics, see the
  description of freshness_lifetime().
  
  =back
  
  =head1 SEE ALSO
  
  L<HTTP::Headers>, L<HTTP::Message>, L<HTTP::Status>, L<HTTP::Request>
  
  =head1 COPYRIGHT
  
  Copyright 1995-2004 Gisle Aas.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
HTTP_RESPONSE

    $main::fatpacked{"HTTP/Status.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_STATUS';
  package HTTP::Status;
  
  use strict;
  use warnings;
  
  require 5.002;   # because we use prototypes
  
  use base 'Exporter';
  our @EXPORT = qw(is_info is_success is_redirect is_error status_message);
  our @EXPORT_OK = qw(is_client_error is_server_error);
  
  our $VERSION = "6.11";
  
  # Note also addition of mnemonics to @EXPORT below
  
  # Unmarked codes are from RFC 2616
  # See also: http://en.wikipedia.org/wiki/List_of_HTTP_status_codes
  
  my %StatusCode = (
      100 => 'Continue',
      101 => 'Switching Protocols',
      102 => 'Processing',                      # RFC 2518 (WebDAV)
      200 => 'OK',
      201 => 'Created',
      202 => 'Accepted',
      203 => 'Non-Authoritative Information',
      204 => 'No Content',
      205 => 'Reset Content',
      206 => 'Partial Content',
      207 => 'Multi-Status',                    # RFC 2518 (WebDAV)
      208 => 'Already Reported',		      # RFC 5842
      300 => 'Multiple Choices',
      301 => 'Moved Permanently',
      302 => 'Found',
      303 => 'See Other',
      304 => 'Not Modified',
      305 => 'Use Proxy',
      307 => 'Temporary Redirect',
      308 => 'Permanent Redirect',              # RFC 7238
      400 => 'Bad Request',
      401 => 'Unauthorized',
      402 => 'Payment Required',
      403 => 'Forbidden',
      404 => 'Not Found',
      405 => 'Method Not Allowed',
      406 => 'Not Acceptable',
      407 => 'Proxy Authentication Required',
      408 => 'Request Timeout',
      409 => 'Conflict',
      410 => 'Gone',
      411 => 'Length Required',
      412 => 'Precondition Failed',
      413 => 'Request Entity Too Large',
      414 => 'Request-URI Too Large',
      415 => 'Unsupported Media Type',
      416 => 'Request Range Not Satisfiable',
      417 => 'Expectation Failed',
      418 => 'I\'m a teapot',		      # RFC 2324
      422 => 'Unprocessable Entity',            # RFC 2518 (WebDAV)
      423 => 'Locked',                          # RFC 2518 (WebDAV)
      424 => 'Failed Dependency',               # RFC 2518 (WebDAV)
      425 => 'No code',                         # WebDAV Advanced Collections
      426 => 'Upgrade Required',                # RFC 2817
      428 => 'Precondition Required',
      429 => 'Too Many Requests',
      431 => 'Request Header Fields Too Large',
      449 => 'Retry with',                      # unofficial Microsoft
      500 => 'Internal Server Error',
      501 => 'Not Implemented',
      502 => 'Bad Gateway',
      503 => 'Service Unavailable',
      504 => 'Gateway Timeout',
      505 => 'HTTP Version Not Supported',
      506 => 'Variant Also Negotiates',         # RFC 2295
      507 => 'Insufficient Storage',            # RFC 2518 (WebDAV)
      509 => 'Bandwidth Limit Exceeded',        # unofficial
      510 => 'Not Extended',                    # RFC 2774
      511 => 'Network Authentication Required',
  );
  
  my $mnemonicCode = '';
  my ($code, $message);
  while (($code, $message) = each %StatusCode) {
      # create mnemonic subroutines
      $message =~ s/I'm/I am/;
      $message =~ tr/a-z \-/A-Z__/;
      $mnemonicCode .= "sub HTTP_$message () { $code }\n";
      $mnemonicCode .= "*RC_$message = \\&HTTP_$message;\n";  # legacy
      $mnemonicCode .= "push(\@EXPORT_OK, 'HTTP_$message');\n";
      $mnemonicCode .= "push(\@EXPORT, 'RC_$message');\n";
  }
  eval $mnemonicCode; # only one eval for speed
  die if $@;
  
  # backwards compatibility
  *RC_MOVED_TEMPORARILY = \&RC_FOUND;  # 302 was renamed in the standard
  push(@EXPORT, "RC_MOVED_TEMPORARILY");
  
  our %EXPORT_TAGS = (
     constants => [grep /^HTTP_/, @EXPORT_OK],
     is => [grep /^is_/, @EXPORT, @EXPORT_OK],
  );
  
  
  sub status_message  ($) { $StatusCode{$_[0]}; }
  
  sub is_info         ($) { $_[0] >= 100 && $_[0] < 200; }
  sub is_success      ($) { $_[0] >= 200 && $_[0] < 300; }
  sub is_redirect     ($) { $_[0] >= 300 && $_[0] < 400; }
  sub is_error        ($) { $_[0] >= 400 && $_[0] < 600; }
  sub is_client_error ($) { $_[0] >= 400 && $_[0] < 500; }
  sub is_server_error ($) { $_[0] >= 500 && $_[0] < 600; }
  
  1;
  
  
  __END__
  
  =head1 NAME
  
  HTTP::Status - HTTP Status code processing
  
  =head1 SYNOPSIS
  
   use HTTP::Status qw(:constants :is status_message);
  
   if ($rc != HTTP_OK) {
       print status_message($rc), "\n";
   }
  
   if (is_success($rc)) { ... }
   if (is_error($rc)) { ... }
   if (is_redirect($rc)) { ... }
  
  =head1 DESCRIPTION
  
  I<HTTP::Status> is a library of routines for defining and
  classifying HTTP status codes for libwww-perl.  Status codes are
  used to encode the overall outcome of an HTTP response message.  Codes
  correspond to those defined in RFC 2616 and RFC 2518.
  
  =head1 CONSTANTS
  
  The following constant functions can be used as mnemonic status code
  names.  None of these are exported by default.  Use the C<:constants>
  tag to import them all.
  
     HTTP_CONTINUE                        (100)
     HTTP_SWITCHING_PROTOCOLS             (101)
     HTTP_PROCESSING                      (102)
  
     HTTP_OK                              (200)
     HTTP_CREATED                         (201)
     HTTP_ACCEPTED                        (202)
     HTTP_NON_AUTHORITATIVE_INFORMATION   (203)
     HTTP_NO_CONTENT                      (204)
     HTTP_RESET_CONTENT                   (205)
     HTTP_PARTIAL_CONTENT                 (206)
     HTTP_MULTI_STATUS                    (207)
     HTTP_ALREADY_REPORTED		(208)
  
     HTTP_MULTIPLE_CHOICES                (300)
     HTTP_MOVED_PERMANENTLY               (301)
     HTTP_FOUND                           (302)
     HTTP_SEE_OTHER                       (303)
     HTTP_NOT_MODIFIED                    (304)
     HTTP_USE_PROXY                       (305)
     HTTP_TEMPORARY_REDIRECT              (307)
     HTTP_PERMANENT_REDIRECT              (308)
  
     HTTP_BAD_REQUEST                     (400)
     HTTP_UNAUTHORIZED                    (401)
     HTTP_PAYMENT_REQUIRED                (402)
     HTTP_FORBIDDEN                       (403)
     HTTP_NOT_FOUND                       (404)
     HTTP_METHOD_NOT_ALLOWED              (405)
     HTTP_NOT_ACCEPTABLE                  (406)
     HTTP_PROXY_AUTHENTICATION_REQUIRED   (407)
     HTTP_REQUEST_TIMEOUT                 (408)
     HTTP_CONFLICT                        (409)
     HTTP_GONE                            (410)
     HTTP_LENGTH_REQUIRED                 (411)
     HTTP_PRECONDITION_FAILED             (412)
     HTTP_REQUEST_ENTITY_TOO_LARGE        (413)
     HTTP_REQUEST_URI_TOO_LARGE           (414)
     HTTP_UNSUPPORTED_MEDIA_TYPE          (415)
     HTTP_REQUEST_RANGE_NOT_SATISFIABLE   (416)
     HTTP_EXPECTATION_FAILED              (417)
     HTTP_I_AM_A_TEAPOT			(418)
     HTTP_UNPROCESSABLE_ENTITY            (422)
     HTTP_LOCKED                          (423)
     HTTP_FAILED_DEPENDENCY               (424)
     HTTP_NO_CODE                         (425)
     HTTP_UPGRADE_REQUIRED                (426)
     HTTP_PRECONDITION_REQUIRED		(428)
     HTTP_TOO_MANY_REQUESTS		(429)
     HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE (431)
     HTTP_RETRY_WITH                      (449)
  
     HTTP_INTERNAL_SERVER_ERROR           (500)
     HTTP_NOT_IMPLEMENTED                 (501)
     HTTP_BAD_GATEWAY                     (502)
     HTTP_SERVICE_UNAVAILABLE             (503)
     HTTP_GATEWAY_TIMEOUT                 (504)
     HTTP_HTTP_VERSION_NOT_SUPPORTED      (505)
     HTTP_VARIANT_ALSO_NEGOTIATES         (506)
     HTTP_INSUFFICIENT_STORAGE            (507)
     HTTP_BANDWIDTH_LIMIT_EXCEEDED        (509)
     HTTP_NOT_EXTENDED                    (510)
     HTTP_NETWORK_AUTHENTICATION_REQUIRED (511)
  
  =head1 FUNCTIONS
  
  The following additional functions are provided.  Most of them are
  exported by default.  The C<:is> import tag can be used to import all
  the classification functions.
  
  =over 4
  
  =item status_message( $code )
  
  The status_message() function will translate status codes to human
  readable strings. The string is the same as found in the constant
  names above.  If the $code is unknown, then C<undef> is returned.
  
  =item is_info( $code )
  
  Return TRUE if C<$code> is an I<Informational> status code (1xx).  This
  class of status code indicates a provisional response which can't have
  any content.
  
  =item is_success( $code )
  
  Return TRUE if C<$code> is a I<Successful> status code (2xx).
  
  =item is_redirect( $code )
  
  Return TRUE if C<$code> is a I<Redirection> status code (3xx). This class of
  status code indicates that further action needs to be taken by the
  user agent in order to fulfill the request.
  
  =item is_error( $code )
  
  Return TRUE if C<$code> is an I<Error> status code (4xx or 5xx).  The function
  returns TRUE for both client and server error status codes.
  
  =item is_client_error( $code )
  
  Return TRUE if C<$code> is a I<Client Error> status code (4xx). This class
  of status code is intended for cases in which the client seems to have
  erred.
  
  This function is B<not> exported by default.
  
  =item is_server_error( $code )
  
  Return TRUE if C<$code> is a I<Server Error> status code (5xx). This class
  of status codes is intended for cases in which the server is aware
  that it has erred or is incapable of performing the request.
  
  This function is B<not> exported by default.
  
  =back
  
  =head1 BUGS
  
  For legacy reasons all the C<HTTP_> constants are exported by default
  with the prefix C<RC_>.  It's recommended to use explicit imports and
  the C<:constants> tag instead of relying on this.
HTTP_STATUS

    $main::fatpacked{"HTTP/Tiny.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_TINY';
  # vim: ts=4 sts=4 sw=4 et:
  package HTTP::Tiny;
  use strict;
  use warnings;
  # ABSTRACT: A small, simple, correct HTTP/1.1 client
  
  our $VERSION = '0.056';
  
  use Carp ();
  
  #pod =method new
  #pod
  #pod     $http = HTTP::Tiny->new( %attributes );
  #pod
  #pod This constructor returns a new HTTP::Tiny object.  Valid attributes include:
  #pod
  #pod =for :list
  #pod * C<agent> —
  #pod     A user-agent string (defaults to 'HTTP-Tiny/$VERSION'). If C<agent> — ends in a space character, the default user-agent string is appended.
  #pod * C<cookie_jar> —
  #pod     An instance of L<HTTP::CookieJar> — or equivalent class that supports the C<add> and C<cookie_header> methods
  #pod * C<default_headers> —
  #pod     A hashref of default headers to apply to requests
  #pod * C<local_address> —
  #pod     The local IP address to bind to
  #pod * C<keep_alive> —
  #pod     Whether to reuse the last connection (if for the same scheme, host and port) (defaults to 1)
  #pod * C<max_redirect> —
  #pod     Maximum number of redirects allowed (defaults to 5)
  #pod * C<max_size> —
  #pod     Maximum response size in bytes (only when not using a data callback).  If defined, responses larger than this will return an exception.
  #pod * C<http_proxy> —
  #pod     URL of a proxy server to use for HTTP connections (default is C<$ENV{http_proxy}> — if set)
  #pod * C<https_proxy> —
  #pod     URL of a proxy server to use for HTTPS connections (default is C<$ENV{https_proxy}> — if set)
  #pod * C<proxy> —
  #pod     URL of a generic proxy server for both HTTP and HTTPS connections (default is C<$ENV{all_proxy}> — if set)
  #pod * C<no_proxy> —
  #pod     List of domain suffixes that should not be proxied.  Must be a comma-separated string or an array reference. (default is C<$ENV{no_proxy}> —)
  #pod * C<timeout> —
  #pod     Request timeout in seconds (default is 60)
  #pod * C<verify_SSL> —
  #pod     A boolean that indicates whether to validate the SSL certificate of an C<https> —
  #pod     connection (default is false)
  #pod * C<SSL_options> —
  #pod     A hashref of C<SSL_*> — options to pass through to L<IO::Socket::SSL>
  #pod
  #pod Passing an explicit C<undef> for C<proxy>, C<http_proxy> or C<https_proxy> will
  #pod prevent getting the corresponding proxies from the environment.
  #pod
  #pod Exceptions from C<max_size>, C<timeout> or other errors will result in a
  #pod pseudo-HTTP status code of 599 and a reason of "Internal Exception". The
  #pod content field in the response will contain the text of the exception.
  #pod
  #pod The C<keep_alive> parameter enables a persistent connection, but only to a
  #pod single destination scheme, host and port.  Also, if any connection-relevant
  #pod attributes are modified, or if the process ID or thread ID change, the
  #pod persistent connection will be dropped.  If you want persistent connections
  #pod across multiple destinations, use multiple HTTP::Tiny objects.
  #pod
  #pod See L</SSL SUPPORT> for more on the C<verify_SSL> and C<SSL_options> attributes.
  #pod
  #pod =cut
  
  my @attributes;
  BEGIN {
      @attributes = qw(
          cookie_jar default_headers http_proxy https_proxy keep_alive
          local_address max_redirect max_size proxy no_proxy timeout
          SSL_options verify_SSL
      );
      my %persist_ok = map {; $_ => 1 } qw(
          cookie_jar default_headers max_redirect max_size
      );
      no strict 'refs';
      no warnings 'uninitialized';
      for my $accessor ( @attributes ) {
          *{$accessor} = sub {
              @_ > 1
                  ? do {
                      delete $_[0]->{handle} if !$persist_ok{$accessor} && $_[1] ne $_[0]->{$accessor};
                      $_[0]->{$accessor} = $_[1]
                  }
                  : $_[0]->{$accessor};
          };
      }
  }
  
  sub agent {
      my($self, $agent) = @_;
      if( @_ > 1 ){
          $self->{agent} =
              (defined $agent && $agent =~ / $/) ? $agent . $self->_agent : $agent;
      }
      return $self->{agent};
  }
  
  sub new {
      my($class, %args) = @_;
  
      my $self = {
          max_redirect => 5,
          timeout      => 60,
          keep_alive   => 1,
          verify_SSL   => $args{verify_SSL} || $args{verify_ssl} || 0, # no verification by default
          no_proxy     => $ENV{no_proxy},
      };
  
      bless $self, $class;
  
      $class->_validate_cookie_jar( $args{cookie_jar} ) if $args{cookie_jar};
  
      for my $key ( @attributes ) {
          $self->{$key} = $args{$key} if exists $args{$key}
      }
  
      $self->agent( exists $args{agent} ? $args{agent} : $class->_agent );
  
      $self->_set_proxies;
  
      return $self;
  }
  
  sub _set_proxies {
      my ($self) = @_;
  
      # get proxies from %ENV only if not provided; explicit undef will disable
      # getting proxies from the environment
  
      # generic proxy
      if (! exists $self->{proxy} ) {
          $self->{proxy} = $ENV{all_proxy} || $ENV{ALL_PROXY};
      }
  
      if ( defined $self->{proxy} ) {
          $self->_split_proxy( 'generic proxy' => $self->{proxy} ); # validate
      }
      else {
          delete $self->{proxy};
      }
  
      # http proxy
      if (! exists $self->{http_proxy} ) {
          # under CGI, bypass HTTP_PROXY as request sets it from Proxy header
          local $ENV{HTTP_PROXY} if $ENV{REQUEST_METHOD};
          $self->{http_proxy} = $ENV{http_proxy} || $ENV{HTTP_PROXY} || $self->{proxy};
      }
  
      if ( defined $self->{http_proxy} ) {
          $self->_split_proxy( http_proxy => $self->{http_proxy} ); # validate
          $self->{_has_proxy}{http} = 1;
      }
      else {
          delete $self->{http_proxy};
      }
  
      # https proxy
      if (! exists $self->{https_proxy} ) {
          $self->{https_proxy} = $ENV{https_proxy} || $ENV{HTTPS_PROXY} || $self->{proxy};
      }
  
      if ( $self->{https_proxy} ) {
          $self->_split_proxy( https_proxy => $self->{https_proxy} ); # validate
          $self->{_has_proxy}{https} = 1;
      }
      else {
          delete $self->{https_proxy};
      }
  
      # Split no_proxy to array reference if not provided as such
      unless ( ref $self->{no_proxy} eq 'ARRAY' ) {
          $self->{no_proxy} =
              (defined $self->{no_proxy}) ? [ split /\s*,\s*/, $self->{no_proxy} ] : [];
      }
  
      return;
  }
  
  #pod =method get|head|put|post|delete
  #pod
  #pod     $response = $http->get($url);
  #pod     $response = $http->get($url, \%options);
  #pod     $response = $http->head($url);
  #pod
  #pod These methods are shorthand for calling C<request()> for the given method.  The
  #pod URL must have unsafe characters escaped and international domain names encoded.
  #pod See C<request()> for valid options and a description of the response.
  #pod
  #pod The C<success> field of the response will be true if the status code is 2XX.
  #pod
  #pod =cut
  
  for my $sub_name ( qw/get head put post delete/ ) {
      my $req_method = uc $sub_name;
      no strict 'refs';
      eval <<"HERE"; ## no critic
      sub $sub_name {
          my (\$self, \$url, \$args) = \@_;
          \@_ == 2 || (\@_ == 3 && ref \$args eq 'HASH')
          or Carp::croak(q/Usage: \$http->$sub_name(URL, [HASHREF])/ . "\n");
          return \$self->request('$req_method', \$url, \$args || {});
      }
  HERE
  }
  
  #pod =method post_form
  #pod
  #pod     $response = $http->post_form($url, $form_data);
  #pod     $response = $http->post_form($url, $form_data, \%options);
  #pod
  #pod This method executes a C<POST> request and sends the key/value pairs from a
  #pod form data hash or array reference to the given URL with a C<content-type> of
  #pod C<application/x-www-form-urlencoded>.  If data is provided as an array
  #pod reference, the order is preserved; if provided as a hash reference, the terms
  #pod are sorted on key and value for consistency.  See documentation for the
  #pod C<www_form_urlencode> method for details on the encoding.
  #pod
  #pod The URL must have unsafe characters escaped and international domain names
  #pod encoded.  See C<request()> for valid options and a description of the response.
  #pod Any C<content-type> header or content in the options hashref will be ignored.
  #pod
  #pod The C<success> field of the response will be true if the status code is 2XX.
  #pod
  #pod =cut
  
  sub post_form {
      my ($self, $url, $data, $args) = @_;
      (@_ == 3 || @_ == 4 && ref $args eq 'HASH')
          or Carp::croak(q/Usage: $http->post_form(URL, DATAREF, [HASHREF])/ . "\n");
  
      my $headers = {};
      while ( my ($key, $value) = each %{$args->{headers} || {}} ) {
          $headers->{lc $key} = $value;
      }
      delete $args->{headers};
  
      return $self->request('POST', $url, {
              %$args,
              content => $self->www_form_urlencode($data),
              headers => {
                  %$headers,
                  'content-type' => 'application/x-www-form-urlencoded'
              },
          }
      );
  }
  
  #pod =method mirror
  #pod
  #pod     $response = $http->mirror($url, $file, \%options)
  #pod     if ( $response->{success} ) {
  #pod         print "$file is up to date\n";
  #pod     }
  #pod
  #pod Executes a C<GET> request for the URL and saves the response body to the file
  #pod name provided.  The URL must have unsafe characters escaped and international
  #pod domain names encoded.  If the file already exists, the request will include an
  #pod C<If-Modified-Since> header with the modification timestamp of the file.  You
  #pod may specify a different C<If-Modified-Since> header yourself in the C<<
  #pod $options->{headers} >> hash.
  #pod
  #pod The C<success> field of the response will be true if the status code is 2XX
  #pod or if the status code is 304 (unmodified).
  #pod
  #pod If the file was modified and the server response includes a properly
  #pod formatted C<Last-Modified> header, the file modification time will
  #pod be updated accordingly.
  #pod
  #pod =cut
  
  sub mirror {
      my ($self, $url, $file, $args) = @_;
      @_ == 3 || (@_ == 4 && ref $args eq 'HASH')
        or Carp::croak(q/Usage: $http->mirror(URL, FILE, [HASHREF])/ . "\n");
      if ( -e $file and my $mtime = (stat($file))[9] ) {
          $args->{headers}{'if-modified-since'} ||= $self->_http_date($mtime);
      }
      my $tempfile = $file . int(rand(2**31));
  
      require Fcntl;
      sysopen my $fh, $tempfile, Fcntl::O_CREAT()|Fcntl::O_EXCL()|Fcntl::O_WRONLY()
         or Carp::croak(qq/Error: Could not create temporary file $tempfile for downloading: $!\n/);
      binmode $fh;
      $args->{data_callback} = sub { print {$fh} $_[0] };
      my $response = $self->request('GET', $url, $args);
      close $fh
          or Carp::croak(qq/Error: Caught error closing temporary file $tempfile: $!\n/);
  
      if ( $response->{success} ) {
          rename $tempfile, $file
              or Carp::croak(qq/Error replacing $file with $tempfile: $!\n/);
          my $lm = $response->{headers}{'last-modified'};
          if ( $lm and my $mtime = $self->_parse_http_date($lm) ) {
              utime $mtime, $mtime, $file;
          }
      }
      $response->{success} ||= $response->{status} eq '304';
      unlink $tempfile;
      return $response;
  }
  
  #pod =method request
  #pod
  #pod     $response = $http->request($method, $url);
  #pod     $response = $http->request($method, $url, \%options);
  #pod
  #pod Executes an HTTP request of the given method type ('GET', 'HEAD', 'POST',
  #pod 'PUT', etc.) on the given URL.  The URL must have unsafe characters escaped and
  #pod international domain names encoded.
  #pod
  #pod If the URL includes a "user:password" stanza, they will be used for Basic-style
  #pod authorization headers.  (Authorization headers will not be included in a
  #pod redirected request.) For example:
  #pod
  #pod     $http->request('GET', 'http://Aladdin:open sesame@example.com/');
  #pod
  #pod If the "user:password" stanza contains reserved characters, they must
  #pod be percent-escaped:
  #pod
  #pod     $http->request('GET', 'http://john%40example.com:password@example.com/');
  #pod
  #pod A hashref of options may be appended to modify the request.
  #pod
  #pod Valid options are:
  #pod
  #pod =for :list
  #pod * C<headers> —
  #pod     A hashref containing headers to include with the request.  If the value for
  #pod     a header is an array reference, the header will be output multiple times with
  #pod     each value in the array.  These headers over-write any default headers.
  #pod * C<content> —
  #pod     A scalar to include as the body of the request OR a code reference
  #pod     that will be called iteratively to produce the body of the request
  #pod * C<trailer_callback> —
  #pod     A code reference that will be called if it exists to provide a hashref
  #pod     of trailing headers (only used with chunked transfer-encoding)
  #pod * C<data_callback> —
  #pod     A code reference that will be called for each chunks of the response
  #pod     body received.
  #pod
  #pod The C<Host> header is generated from the URL in accordance with RFC 2616.  It
  #pod is a fatal error to specify C<Host> in the C<headers> option.  Other headers
  #pod may be ignored or overwritten if necessary for transport compliance.
  #pod
  #pod If the C<content> option is a code reference, it will be called iteratively
  #pod to provide the content body of the request.  It should return the empty
  #pod string or undef when the iterator is exhausted.
  #pod
  #pod If the C<content> option is the empty string, no C<content-type> or
  #pod C<content-length> headers will be generated.
  #pod
  #pod If the C<data_callback> option is provided, it will be called iteratively until
  #pod the entire response body is received.  The first argument will be a string
  #pod containing a chunk of the response body, the second argument will be the
  #pod in-progress response hash reference, as described below.  (This allows
  #pod customizing the action of the callback based on the C<status> or C<headers>
  #pod received prior to the content body.)
  #pod
  #pod The C<request> method returns a hashref containing the response.  The hashref
  #pod will have the following keys:
  #pod
  #pod =for :list
  #pod * C<success> —
  #pod     Boolean indicating whether the operation returned a 2XX status code
  #pod * C<url> —
  #pod     URL that provided the response. This is the URL of the request unless
  #pod     there were redirections, in which case it is the last URL queried
  #pod     in a redirection chain
  #pod * C<status> —
  #pod     The HTTP status code of the response
  #pod * C<reason> —
  #pod     The response phrase returned by the server
  #pod * C<content> —
  #pod     The body of the response.  If the response does not have any content
  #pod     or if a data callback is provided to consume the response body,
  #pod     this will be the empty string
  #pod * C<headers> —
  #pod     A hashref of header fields.  All header field names will be normalized
  #pod     to be lower case. If a header is repeated, the value will be an arrayref;
  #pod     it will otherwise be a scalar string containing the value
  #pod
  #pod On an exception during the execution of the request, the C<status> field will
  #pod contain 599, and the C<content> field will contain the text of the exception.
  #pod
  #pod =cut
  
  my %idempotent = map { $_ => 1 } qw/GET HEAD PUT DELETE OPTIONS TRACE/;
  
  sub request {
      my ($self, $method, $url, $args) = @_;
      @_ == 3 || (@_ == 4 && ref $args eq 'HASH')
        or Carp::croak(q/Usage: $http->request(METHOD, URL, [HASHREF])/ . "\n");
      $args ||= {}; # we keep some state in this during _request
  
      # RFC 2616 Section 8.1.4 mandates a single retry on broken socket
      my $response;
      for ( 0 .. 1 ) {
          $response = eval { $self->_request($method, $url, $args) };
          last unless $@ && $idempotent{$method}
              && $@ =~ m{^(?:Socket closed|Unexpected end)};
      }
  
      if (my $e = $@) {
          # maybe we got a response hash thrown from somewhere deep
          if ( ref $e eq 'HASH' && exists $e->{status} ) {
              return $e;
          }
  
          # otherwise, stringify it
          $e = "$e";
          $response = {
              url     => $url,
              success => q{},
              status  => 599,
              reason  => 'Internal Exception',
              content => $e,
              headers => {
                  'content-type'   => 'text/plain',
                  'content-length' => length $e,
              }
          };
      }
      return $response;
  }
  
  #pod =method www_form_urlencode
  #pod
  #pod     $params = $http->www_form_urlencode( $data );
  #pod     $response = $http->get("http://example.com/query?$params");
  #pod
  #pod This method converts the key/value pairs from a data hash or array reference
  #pod into a C<x-www-form-urlencoded> string.  The keys and values from the data
  #pod reference will be UTF-8 encoded and escaped per RFC 3986.  If a value is an
  #pod array reference, the key will be repeated with each of the values of the array
  #pod reference.  If data is provided as a hash reference, the key/value pairs in the
  #pod resulting string will be sorted by key and value for consistent ordering.
  #pod
  #pod =cut
  
  sub www_form_urlencode {
      my ($self, $data) = @_;
      (@_ == 2 && ref $data)
          or Carp::croak(q/Usage: $http->www_form_urlencode(DATAREF)/ . "\n");
      (ref $data eq 'HASH' || ref $data eq 'ARRAY')
          or Carp::croak("form data must be a hash or array reference\n");
  
      my @params = ref $data eq 'HASH' ? %$data : @$data;
      @params % 2 == 0
          or Carp::croak("form data reference must have an even number of terms\n");
  
      my @terms;
      while( @params ) {
          my ($key, $value) = splice(@params, 0, 2);
          if ( ref $value eq 'ARRAY' ) {
              unshift @params, map { $key => $_ } @$value;
          }
          else {
              push @terms, join("=", map { $self->_uri_escape($_) } $key, $value);
          }
      }
  
      return join("&", (ref $data eq 'ARRAY') ? (@terms) : (sort @terms) );
  }
  
  #pod =method can_ssl
  #pod
  #pod     $ok         = HTTP::Tiny->can_ssl;
  #pod     ($ok, $why) = HTTP::Tiny->can_ssl;
  #pod     ($ok, $why) = $http->can_ssl;
  #pod
  #pod Indicates if SSL support is available.  When called as a class object, it
  #pod checks for the correct version of L<Net::SSLeay> and L<IO::Socket::SSL>.
  #pod When called as an object methods, if C<SSL_verify> is true or if C<SSL_verify_mode>
  #pod is set in C<SSL_options>, it checks that a CA file is available.
  #pod
  #pod In scalar context, returns a boolean indicating if SSL is available.
  #pod In list context, returns the boolean and a (possibly multi-line) string of
  #pod errors indicating why SSL isn't available.
  #pod
  #pod =cut
  
  sub can_ssl {
      my ($self) = @_;
  
      my($ok, $reason) = (1, '');
  
      # Need IO::Socket::SSL 1.42 for SSL_create_ctx_callback
      unless (eval {require IO::Socket::SSL; IO::Socket::SSL->VERSION(1.42)}) {
          $ok = 0;
          $reason .= qq/IO::Socket::SSL 1.42 must be installed for https support\n/;
      }
  
      # Need Net::SSLeay 1.49 for MODE_AUTO_RETRY
      unless (eval {require Net::SSLeay; Net::SSLeay->VERSION(1.49)}) {
          $ok = 0;
          $reason .= qq/Net::SSLeay 1.49 must be installed for https support\n/;
      }
  
      # If an object, check that SSL config lets us get a CA if necessary
      if ( ref($self) && ( $self->{verify_SSL} || $self->{SSL_options}{SSL_verify_mode} ) ) {
          my $handle = HTTP::Tiny::Handle->new(
              SSL_options => $self->{SSL_options},
              verify_SSL  => $self->{verify_SSL},
          );
          unless ( eval { $handle->_find_CA_file; 1 } ) {
              $ok = 0;
              $reason .= "$@";
          }
      }
  
      wantarray ? ($ok, $reason) : $ok;
  }
  
  #--------------------------------------------------------------------------#
  # private methods
  #--------------------------------------------------------------------------#
  
  my %DefaultPort = (
      http => 80,
      https => 443,
  );
  
  sub _agent {
      my $class = ref($_[0]) || $_[0];
      (my $default_agent = $class) =~ s{::}{-}g;
      return $default_agent . "/" . $class->VERSION;
  }
  
  sub _request {
      my ($self, $method, $url, $args) = @_;
  
      my ($scheme, $host, $port, $path_query, $auth) = $self->_split_url($url);
  
      my $request = {
          method    => $method,
          scheme    => $scheme,
          host      => $host,
          port      => $port,
          host_port => ($port == $DefaultPort{$scheme} ? $host : "$host:$port"),
          uri       => $path_query,
          headers   => {},
      };
  
      # We remove the cached handle so it is not reused in the case of redirect.
      # If all is well, it will be recached at the end of _request.  We only
      # reuse for the same scheme, host and port
      my $handle = delete $self->{handle};
      if ( $handle ) {
          unless ( $handle->can_reuse( $scheme, $host, $port ) ) {
              $handle->close;
              undef $handle;
          }
      }
      $handle ||= $self->_open_handle( $request, $scheme, $host, $port );
  
      $self->_prepare_headers_and_cb($request, $args, $url, $auth);
      $handle->write_request($request);
  
      my $response;
      do { $response = $handle->read_response_header }
          until (substr($response->{status},0,1) ne '1');
  
      $self->_update_cookie_jar( $url, $response ) if $self->{cookie_jar};
  
      if ( my @redir_args = $self->_maybe_redirect($request, $response, $args) ) {
          $handle->close;
          return $self->_request(@redir_args, $args);
      }
  
      my $known_message_length;
      if ($method eq 'HEAD' || $response->{status} =~ /^[23]04/) {
          # response has no message body
          $known_message_length = 1;
      }
      else {
          my $data_cb = $self->_prepare_data_cb($response, $args);
          $known_message_length = $handle->read_body($data_cb, $response);
      }
  
      if ( $self->{keep_alive}
          && $known_message_length
          && $response->{protocol} eq 'HTTP/1.1'
          && ($response->{headers}{connection} || '') ne 'close'
      ) {
          $self->{handle} = $handle;
      }
      else {
          $handle->close;
      }
  
      $response->{success} = substr( $response->{status}, 0, 1 ) eq '2';
      $response->{url} = $url;
      return $response;
  }
  
  sub _open_handle {
      my ($self, $request, $scheme, $host, $port) = @_;
  
      my $handle  = HTTP::Tiny::Handle->new(
          timeout         => $self->{timeout},
          SSL_options     => $self->{SSL_options},
          verify_SSL      => $self->{verify_SSL},
          local_address   => $self->{local_address},
          keep_alive      => $self->{keep_alive}
      );
  
      if ($self->{_has_proxy}{$scheme} && ! grep { $host =~ /\Q$_\E$/ } @{$self->{no_proxy}}) {
          return $self->_proxy_connect( $request, $handle );
      }
      else {
          return $handle->connect($scheme, $host, $port);
      }
  }
  
  sub _proxy_connect {
      my ($self, $request, $handle) = @_;
  
      my @proxy_vars;
      if ( $request->{scheme} eq 'https' ) {
          Carp::croak(qq{No https_proxy defined}) unless $self->{https_proxy};
          @proxy_vars = $self->_split_proxy( https_proxy => $self->{https_proxy} );
          if ( $proxy_vars[0] eq 'https' ) {
              Carp::croak(qq{Can't proxy https over https: $request->{uri} via $self->{https_proxy}});
          }
      }
      else {
          Carp::croak(qq{No http_proxy defined}) unless $self->{http_proxy};
          @proxy_vars = $self->_split_proxy( http_proxy => $self->{http_proxy} );
      }
  
      my ($p_scheme, $p_host, $p_port, $p_auth) = @proxy_vars;
  
      if ( length $p_auth && ! defined $request->{headers}{'proxy-authorization'} ) {
          $self->_add_basic_auth_header( $request, 'proxy-authorization' => $p_auth );
      }
  
      $handle->connect($p_scheme, $p_host, $p_port);
  
      if ($request->{scheme} eq 'https') {
          $self->_create_proxy_tunnel( $request, $handle );
      }
      else {
          # non-tunneled proxy requires absolute URI
          $request->{uri} = "$request->{scheme}://$request->{host_port}$request->{uri}";
      }
  
      return $handle;
  }
  
  sub _split_proxy {
      my ($self, $type, $proxy) = @_;
  
      my ($scheme, $host, $port, $path_query, $auth) = eval { $self->_split_url($proxy) };
  
      unless(
          defined($scheme) && length($scheme) && length($host) && length($port)
          && $path_query eq '/'
      ) {
          Carp::croak(qq{$type URL must be in format http[s]://[auth@]<host>:<port>/\n});
      }
  
      return ($scheme, $host, $port, $auth);
  }
  
  sub _create_proxy_tunnel {
      my ($self, $request, $handle) = @_;
  
      $handle->_assert_ssl;
  
      my $agent = exists($request->{headers}{'user-agent'})
          ? $request->{headers}{'user-agent'} : $self->{agent};
  
      my $connect_request = {
          method    => 'CONNECT',
          uri       => "$request->{host}:$request->{port}",
          headers   => {
              host => "$request->{host}:$request->{port}",
              'user-agent' => $agent,
          }
      };
  
      if ( $request->{headers}{'proxy-authorization'} ) {
          $connect_request->{headers}{'proxy-authorization'} =
              delete $request->{headers}{'proxy-authorization'};
      }
  
      $handle->write_request($connect_request);
      my $response;
      do { $response = $handle->read_response_header }
          until (substr($response->{status},0,1) ne '1');
  
      # if CONNECT failed, throw the response so it will be
      # returned from the original request() method;
      unless (substr($response->{status},0,1) eq '2') {
          die $response;
      }
  
      # tunnel established, so start SSL handshake
      $handle->start_ssl( $request->{host} );
  
      return;
  }
  
  sub _prepare_headers_and_cb {
      my ($self, $request, $args, $url, $auth) = @_;
  
      for ($self->{default_headers}, $args->{headers}) {
          next unless defined;
          while (my ($k, $v) = each %$_) {
              $request->{headers}{lc $k} = $v;
          }
      }
  
      if (exists $request->{headers}{'host'}) {
          die(qq/The 'Host' header must not be provided as header option\n/);
      }
  
      $request->{headers}{'host'}         = $request->{host_port};
      $request->{headers}{'user-agent'} ||= $self->{agent};
      $request->{headers}{'connection'}   = "close"
          unless $self->{keep_alive};
  
      if ( defined $args->{content} ) {
          if (ref $args->{content} eq 'CODE') {
              $request->{headers}{'content-type'} ||= "application/octet-stream";
              $request->{headers}{'transfer-encoding'} = 'chunked'
                unless $request->{headers}{'content-length'}
                    || $request->{headers}{'transfer-encoding'};
              $request->{cb} = $args->{content};
          }
          elsif ( length $args->{content} ) {
              my $content = $args->{content};
              if ( $] ge '5.008' ) {
                  utf8::downgrade($content, 1)
                      or die(qq/Wide character in request message body\n/);
              }
              $request->{headers}{'content-type'} ||= "application/octet-stream";
              $request->{headers}{'content-length'} = length $content
                unless $request->{headers}{'content-length'}
                    || $request->{headers}{'transfer-encoding'};
              $request->{cb} = sub { substr $content, 0, length $content, '' };
          }
          $request->{trailer_cb} = $args->{trailer_callback}
              if ref $args->{trailer_callback} eq 'CODE';
      }
  
      ### If we have a cookie jar, then maybe add relevant cookies
      if ( $self->{cookie_jar} ) {
          my $cookies = $self->cookie_jar->cookie_header( $url );
          $request->{headers}{cookie} = $cookies if length $cookies;
      }
  
      # if we have Basic auth parameters, add them
      if ( length $auth && ! defined $request->{headers}{authorization} ) {
          $self->_add_basic_auth_header( $request, 'authorization' => $auth );
      }
  
      return;
  }
  
  sub _add_basic_auth_header {
      my ($self, $request, $header, $auth) = @_;
      require MIME::Base64;
      $request->{headers}{$header} =
          "Basic " . MIME::Base64::encode_base64($auth, "");
      return;
  }
  
  sub _prepare_data_cb {
      my ($self, $response, $args) = @_;
      my $data_cb = $args->{data_callback};
      $response->{content} = '';
  
      if (!$data_cb || $response->{status} !~ /^2/) {
          if (defined $self->{max_size}) {
              $data_cb = sub {
                  $_[1]->{content} .= $_[0];
                  die(qq/Size of response body exceeds the maximum allowed of $self->{max_size}\n/)
                    if length $_[1]->{content} > $self->{max_size};
              };
          }
          else {
              $data_cb = sub { $_[1]->{content} .= $_[0] };
          }
      }
      return $data_cb;
  }
  
  sub _update_cookie_jar {
      my ($self, $url, $response) = @_;
  
      my $cookies = $response->{headers}->{'set-cookie'};
      return unless defined $cookies;
  
      my @cookies = ref $cookies ? @$cookies : $cookies;
  
      $self->cookie_jar->add( $url, $_ ) for @cookies;
  
      return;
  }
  
  sub _validate_cookie_jar {
      my ($class, $jar) = @_;
  
      # duck typing
      for my $method ( qw/add cookie_header/ ) {
          Carp::croak(qq/Cookie jar must provide the '$method' method\n/)
              unless ref($jar) && ref($jar)->can($method);
      }
  
      return;
  }
  
  sub _maybe_redirect {
      my ($self, $request, $response, $args) = @_;
      my $headers = $response->{headers};
      my ($status, $method) = ($response->{status}, $request->{method});
      if (($status eq '303' or ($status =~ /^30[1278]/ && $method =~ /^GET|HEAD$/))
          and $headers->{location}
          and ++$args->{redirects} <= $self->{max_redirect}
      ) {
          my $location = ($headers->{location} =~ /^\//)
              ? "$request->{scheme}://$request->{host_port}$headers->{location}"
              : $headers->{location} ;
          return (($status eq '303' ? 'GET' : $method), $location);
      }
      return;
  }
  
  sub _split_url {
      my $url = pop;
  
      # URI regex adapted from the URI module
      my ($scheme, $host, $path_query) = $url =~ m<\A([^:/?#]+)://([^/?#]*)([^#]*)>
        or die(qq/Cannot parse URL: '$url'\n/);
  
      $scheme     = lc $scheme;
      $path_query = "/$path_query" unless $path_query =~ m<\A/>;
  
      my $auth = '';
      if ( (my $i = index $host, '@') != -1 ) {
          # user:pass@host
          $auth = substr $host, 0, $i, ''; # take up to the @ for auth
          substr $host, 0, 1, '';          # knock the @ off the host
  
          # userinfo might be percent escaped, so recover real auth info
          $auth =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
      }
      my $port = $host =~ s/:(\d*)\z// && length $1 ? $1
               : $scheme eq 'http'                  ? 80
               : $scheme eq 'https'                 ? 443
               : undef;
  
      return ($scheme, (length $host ? lc $host : "localhost") , $port, $path_query, $auth);
  }
  
  # Date conversions adapted from HTTP::Date
  my $DoW = "Sun|Mon|Tue|Wed|Thu|Fri|Sat";
  my $MoY = "Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec";
  sub _http_date {
      my ($sec, $min, $hour, $mday, $mon, $year, $wday) = gmtime($_[1]);
      return sprintf("%s, %02d %s %04d %02d:%02d:%02d GMT",
          substr($DoW,$wday*4,3),
          $mday, substr($MoY,$mon*4,3), $year+1900,
          $hour, $min, $sec
      );
  }
  
  sub _parse_http_date {
      my ($self, $str) = @_;
      require Time::Local;
      my @tl_parts;
      if ($str =~ /^[SMTWF][a-z]+, +(\d{1,2}) ($MoY) +(\d\d\d\d) +(\d\d):(\d\d):(\d\d) +GMT$/) {
          @tl_parts = ($6, $5, $4, $1, (index($MoY,$2)/4), $3);
      }
      elsif ($str =~ /^[SMTWF][a-z]+, +(\d\d)-($MoY)-(\d{2,4}) +(\d\d):(\d\d):(\d\d) +GMT$/ ) {
          @tl_parts = ($6, $5, $4, $1, (index($MoY,$2)/4), $3);
      }
      elsif ($str =~ /^[SMTWF][a-z]+ +($MoY) +(\d{1,2}) +(\d\d):(\d\d):(\d\d) +(?:[^0-9]+ +)?(\d\d\d\d)$/ ) {
          @tl_parts = ($5, $4, $3, $2, (index($MoY,$1)/4), $6);
      }
      return eval {
          my $t = @tl_parts ? Time::Local::timegm(@tl_parts) : -1;
          $t < 0 ? undef : $t;
      };
  }
  
  # URI escaping adapted from URI::Escape
  # c.f. http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1
  # perl 5.6 ready UTF-8 encoding adapted from JSON::PP
  my %escapes = map { chr($_) => sprintf("%%%02X", $_) } 0..255;
  $escapes{' '}="+";
  my $unsafe_char = qr/[^A-Za-z0-9\-\._~]/;
  
  sub _uri_escape {
      my ($self, $str) = @_;
      if ( $] ge '5.008' ) {
          utf8::encode($str);
      }
      else {
          $str = pack("U*", unpack("C*", $str)) # UTF-8 encode a byte string
              if ( length $str == do { use bytes; length $str } );
          $str = pack("C*", unpack("C*", $str)); # clear UTF-8 flag
      }
      $str =~ s/($unsafe_char)/$escapes{$1}/ge;
      return $str;
  }
  
  package
      HTTP::Tiny::Handle; # hide from PAUSE/indexers
  use strict;
  use warnings;
  
  use Errno      qw[EINTR EPIPE];
  use IO::Socket qw[SOCK_STREAM];
  
  # PERL_HTTP_TINY_IPV4_ONLY is a private environment variable to force old
  # behavior if someone is unable to boostrap CPAN from a new perl install; it is
  # not intended for general, per-client use and may be removed in the future
  my $SOCKET_CLASS =
      $ENV{PERL_HTTP_TINY_IPV4_ONLY} ? 'IO::Socket::INET' :
      eval { require IO::Socket::IP; IO::Socket::IP->VERSION(0.25) } ? 'IO::Socket::IP' :
      'IO::Socket::INET';
  
  sub BUFSIZE () { 32768 } ## no critic
  
  my $Printable = sub {
      local $_ = shift;
      s/\r/\\r/g;
      s/\n/\\n/g;
      s/\t/\\t/g;
      s/([^\x20-\x7E])/sprintf('\\x%.2X', ord($1))/ge;
      $_;
  };
  
  my $Token = qr/[\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7A\x7C\x7E]/;
  
  sub new {
      my ($class, %args) = @_;
      return bless {
          rbuf             => '',
          timeout          => 60,
          max_line_size    => 16384,
          max_header_lines => 64,
          verify_SSL       => 0,
          SSL_options      => {},
          %args
      }, $class;
  }
  
  sub connect {
      @_ == 4 || die(q/Usage: $handle->connect(scheme, host, port)/ . "\n");
      my ($self, $scheme, $host, $port) = @_;
  
      if ( $scheme eq 'https' ) {
          $self->_assert_ssl;
      }
      elsif ( $scheme ne 'http' ) {
        die(qq/Unsupported URL scheme '$scheme'\n/);
      }
      $self->{fh} = $SOCKET_CLASS->new(
          PeerHost  => $host,
          PeerPort  => $port,
          $self->{local_address} ?
              ( LocalAddr => $self->{local_address} ) : (),
          Proto     => 'tcp',
          Type      => SOCK_STREAM,
          Timeout   => $self->{timeout},
          KeepAlive => !!$self->{keep_alive}
      ) or die(qq/Could not connect to '$host:$port': $@\n/);
  
      binmode($self->{fh})
        or die(qq/Could not binmode() socket: '$!'\n/);
  
      $self->start_ssl($host) if $scheme eq 'https';
  
      $self->{scheme} = $scheme;
      $self->{host} = $host;
      $self->{port} = $port;
      $self->{pid} = $$;
      $self->{tid} = _get_tid();
  
      return $self;
  }
  
  sub start_ssl {
      my ($self, $host) = @_;
  
      # As this might be used via CONNECT after an SSL session
      # to a proxy, we shut down any existing SSL before attempting
      # the handshake
      if ( ref($self->{fh}) eq 'IO::Socket::SSL' ) {
          unless ( $self->{fh}->stop_SSL ) {
              my $ssl_err = IO::Socket::SSL->errstr;
              die(qq/Error halting prior SSL connection: $ssl_err/);
          }
      }
  
      my $ssl_args = $self->_ssl_args($host);
      IO::Socket::SSL->start_SSL(
          $self->{fh},
          %$ssl_args,
          SSL_create_ctx_callback => sub {
              my $ctx = shift;
              Net::SSLeay::CTX_set_mode($ctx, Net::SSLeay::MODE_AUTO_RETRY());
          },
      );
  
      unless ( ref($self->{fh}) eq 'IO::Socket::SSL' ) {
          my $ssl_err = IO::Socket::SSL->errstr;
          die(qq/SSL connection failed for $host: $ssl_err\n/);
      }
  }
  
  sub close {
      @_ == 1 || die(q/Usage: $handle->close()/ . "\n");
      my ($self) = @_;
      CORE::close($self->{fh})
        or die(qq/Could not close socket: '$!'\n/);
  }
  
  sub write {
      @_ == 2 || die(q/Usage: $handle->write(buf)/ . "\n");
      my ($self, $buf) = @_;
  
      if ( $] ge '5.008' ) {
          utf8::downgrade($buf, 1)
              or die(qq/Wide character in write()\n/);
      }
  
      my $len = length $buf;
      my $off = 0;
  
      local $SIG{PIPE} = 'IGNORE';
  
      while () {
          $self->can_write
            or die(qq/Timed out while waiting for socket to become ready for writing\n/);
          my $r = syswrite($self->{fh}, $buf, $len, $off);
          if (defined $r) {
              $len -= $r;
              $off += $r;
              last unless $len > 0;
          }
          elsif ($! == EPIPE) {
              die(qq/Socket closed by remote server: $!\n/);
          }
          elsif ($! != EINTR) {
              if ($self->{fh}->can('errstr')){
                  my $err = $self->{fh}->errstr();
                  die (qq/Could not write to SSL socket: '$err'\n /);
              }
              else {
                  die(qq/Could not write to socket: '$!'\n/);
              }
  
          }
      }
      return $off;
  }
  
  sub read {
      @_ == 2 || @_ == 3 || die(q/Usage: $handle->read(len [, allow_partial])/ . "\n");
      my ($self, $len, $allow_partial) = @_;
  
      my $buf  = '';
      my $got = length $self->{rbuf};
  
      if ($got) {
          my $take = ($got < $len) ? $got : $len;
          $buf  = substr($self->{rbuf}, 0, $take, '');
          $len -= $take;
      }
  
      while ($len > 0) {
          $self->can_read
            or die(q/Timed out while waiting for socket to become ready for reading/ . "\n");
          my $r = sysread($self->{fh}, $buf, $len, length $buf);
          if (defined $r) {
              last unless $r;
              $len -= $r;
          }
          elsif ($! != EINTR) {
              if ($self->{fh}->can('errstr')){
                  my $err = $self->{fh}->errstr();
                  die (qq/Could not read from SSL socket: '$err'\n /);
              }
              else {
                  die(qq/Could not read from socket: '$!'\n/);
              }
          }
      }
      if ($len && !$allow_partial) {
          die(qq/Unexpected end of stream\n/);
      }
      return $buf;
  }
  
  sub readline {
      @_ == 1 || die(q/Usage: $handle->readline()/ . "\n");
      my ($self) = @_;
  
      while () {
          if ($self->{rbuf} =~ s/\A ([^\x0D\x0A]* \x0D?\x0A)//x) {
              return $1;
          }
          if (length $self->{rbuf} >= $self->{max_line_size}) {
              die(qq/Line size exceeds the maximum allowed size of $self->{max_line_size}\n/);
          }
          $self->can_read
            or die(qq/Timed out while waiting for socket to become ready for reading\n/);
          my $r = sysread($self->{fh}, $self->{rbuf}, BUFSIZE, length $self->{rbuf});
          if (defined $r) {
              last unless $r;
          }
          elsif ($! != EINTR) {
              if ($self->{fh}->can('errstr')){
                  my $err = $self->{fh}->errstr();
                  die (qq/Could not read from SSL socket: '$err'\n /);
              }
              else {
                  die(qq/Could not read from socket: '$!'\n/);
              }
          }
      }
      die(qq/Unexpected end of stream while looking for line\n/);
  }
  
  sub read_header_lines {
      @_ == 1 || @_ == 2 || die(q/Usage: $handle->read_header_lines([headers])/ . "\n");
      my ($self, $headers) = @_;
      $headers ||= {};
      my $lines   = 0;
      my $val;
  
      while () {
           my $line = $self->readline;
  
           if (++$lines >= $self->{max_header_lines}) {
               die(qq/Header lines exceeds maximum number allowed of $self->{max_header_lines}\n/);
           }
           elsif ($line =~ /\A ([^\x00-\x1F\x7F:]+) : [\x09\x20]* ([^\x0D\x0A]*)/x) {
               my ($field_name) = lc $1;
               if (exists $headers->{$field_name}) {
                   for ($headers->{$field_name}) {
                       $_ = [$_] unless ref $_ eq "ARRAY";
                       push @$_, $2;
                       $val = \$_->[-1];
                   }
               }
               else {
                   $val = \($headers->{$field_name} = $2);
               }
           }
           elsif ($line =~ /\A [\x09\x20]+ ([^\x0D\x0A]*)/x) {
               $val
                 or die(qq/Unexpected header continuation line\n/);
               next unless length $1;
               $$val .= ' ' if length $$val;
               $$val .= $1;
           }
           elsif ($line =~ /\A \x0D?\x0A \z/x) {
              last;
           }
           else {
              die(q/Malformed header line: / . $Printable->($line) . "\n");
           }
      }
      return $headers;
  }
  
  sub write_request {
      @_ == 2 || die(q/Usage: $handle->write_request(request)/ . "\n");
      my($self, $request) = @_;
      $self->write_request_header(@{$request}{qw/method uri headers/});
      $self->write_body($request) if $request->{cb};
      return;
  }
  
  my %HeaderCase = (
      'content-md5'      => 'Content-MD5',
      'etag'             => 'ETag',
      'te'               => 'TE',
      'www-authenticate' => 'WWW-Authenticate',
      'x-xss-protection' => 'X-XSS-Protection',
  );
  
  # to avoid multiple small writes and hence nagle, you can pass the method line or anything else to
  # combine writes.
  sub write_header_lines {
      (@_ == 2 || @_ == 3 && ref $_[1] eq 'HASH') || die(q/Usage: $handle->write_header_lines(headers[,prefix])/ . "\n");
      my($self, $headers, $prefix_data) = @_;
  
      my $buf = (defined $prefix_data ? $prefix_data : '');
      while (my ($k, $v) = each %$headers) {
          my $field_name = lc $k;
          if (exists $HeaderCase{$field_name}) {
              $field_name = $HeaderCase{$field_name};
          }
          else {
              $field_name =~ /\A $Token+ \z/xo
                or die(q/Invalid HTTP header field name: / . $Printable->($field_name) . "\n");
              $field_name =~ s/\b(\w)/\u$1/g;
              $HeaderCase{lc $field_name} = $field_name;
          }
          for (ref $v eq 'ARRAY' ? @$v : $v) {
              $_ = '' unless defined $_;
              $buf .= "$field_name: $_\x0D\x0A";
          }
      }
      $buf .= "\x0D\x0A";
      return $self->write($buf);
  }
  
  # return value indicates whether message length was defined; this is generally
  # true unless there was no content-length header and we just read until EOF.
  # Other message length errors are thrown as exceptions
  sub read_body {
      @_ == 3 || die(q/Usage: $handle->read_body(callback, response)/ . "\n");
      my ($self, $cb, $response) = @_;
      my $te = $response->{headers}{'transfer-encoding'} || '';
      my $chunked = grep { /chunked/i } ( ref $te eq 'ARRAY' ? @$te : $te ) ;
      return $chunked
          ? $self->read_chunked_body($cb, $response)
          : $self->read_content_body($cb, $response);
  }
  
  sub write_body {
      @_ == 2 || die(q/Usage: $handle->write_body(request)/ . "\n");
      my ($self, $request) = @_;
      if ($request->{headers}{'content-length'}) {
          return $self->write_content_body($request);
      }
      else {
          return $self->write_chunked_body($request);
      }
  }
  
  sub read_content_body {
      @_ == 3 || @_ == 4 || die(q/Usage: $handle->read_content_body(callback, response, [read_length])/ . "\n");
      my ($self, $cb, $response, $content_length) = @_;
      $content_length ||= $response->{headers}{'content-length'};
  
      if ( defined $content_length ) {
          my $len = $content_length;
          while ($len > 0) {
              my $read = ($len > BUFSIZE) ? BUFSIZE : $len;
              $cb->($self->read($read, 0), $response);
              $len -= $read;
          }
          return length($self->{rbuf}) == 0;
      }
  
      my $chunk;
      $cb->($chunk, $response) while length( $chunk = $self->read(BUFSIZE, 1) );
  
      return;
  }
  
  sub write_content_body {
      @_ == 2 || die(q/Usage: $handle->write_content_body(request)/ . "\n");
      my ($self, $request) = @_;
  
      my ($len, $content_length) = (0, $request->{headers}{'content-length'});
      while () {
          my $data = $request->{cb}->();
  
          defined $data && length $data
            or last;
  
          if ( $] ge '5.008' ) {
              utf8::downgrade($data, 1)
                  or die(qq/Wide character in write_content()\n/);
          }
  
          $len += $self->write($data);
      }
  
      $len == $content_length
        or die(qq/Content-Length mismatch (got: $len expected: $content_length)\n/);
  
      return $len;
  }
  
  sub read_chunked_body {
      @_ == 3 || die(q/Usage: $handle->read_chunked_body(callback, $response)/ . "\n");
      my ($self, $cb, $response) = @_;
  
      while () {
          my $head = $self->readline;
  
          $head =~ /\A ([A-Fa-f0-9]+)/x
            or die(q/Malformed chunk head: / . $Printable->($head) . "\n");
  
          my $len = hex($1)
            or last;
  
          $self->read_content_body($cb, $response, $len);
  
          $self->read(2) eq "\x0D\x0A"
            or die(qq/Malformed chunk: missing CRLF after chunk data\n/);
      }
      $self->read_header_lines($response->{headers});
      return 1;
  }
  
  sub write_chunked_body {
      @_ == 2 || die(q/Usage: $handle->write_chunked_body(request)/ . "\n");
      my ($self, $request) = @_;
  
      my $len = 0;
      while () {
          my $data = $request->{cb}->();
  
          defined $data && length $data
            or last;
  
          if ( $] ge '5.008' ) {
              utf8::downgrade($data, 1)
                  or die(qq/Wide character in write_chunked_body()\n/);
          }
  
          $len += length $data;
  
          my $chunk  = sprintf '%X', length $data;
             $chunk .= "\x0D\x0A";
             $chunk .= $data;
             $chunk .= "\x0D\x0A";
  
          $self->write($chunk);
      }
      $self->write("0\x0D\x0A");
      $self->write_header_lines($request->{trailer_cb}->())
          if ref $request->{trailer_cb} eq 'CODE';
      return $len;
  }
  
  sub read_response_header {
      @_ == 1 || die(q/Usage: $handle->read_response_header()/ . "\n");
      my ($self) = @_;
  
      my $line = $self->readline;
  
      $line =~ /\A (HTTP\/(0*\d+\.0*\d+)) [\x09\x20]+ ([0-9]{3}) [\x09\x20]+ ([^\x0D\x0A]*) \x0D?\x0A/x
        or die(q/Malformed Status-Line: / . $Printable->($line). "\n");
  
      my ($protocol, $version, $status, $reason) = ($1, $2, $3, $4);
  
      die (qq/Unsupported HTTP protocol: $protocol\n/)
          unless $version =~ /0*1\.0*[01]/;
  
      return {
          status       => $status,
          reason       => $reason,
          headers      => $self->read_header_lines,
          protocol     => $protocol,
      };
  }
  
  sub write_request_header {
      @_ == 4 || die(q/Usage: $handle->write_request_header(method, request_uri, headers)/ . "\n");
      my ($self, $method, $request_uri, $headers) = @_;
  
      return $self->write_header_lines($headers, "$method $request_uri HTTP/1.1\x0D\x0A");
  }
  
  sub _do_timeout {
      my ($self, $type, $timeout) = @_;
      $timeout = $self->{timeout}
          unless defined $timeout && $timeout >= 0;
  
      my $fd = fileno $self->{fh};
      defined $fd && $fd >= 0
        or die(qq/select(2): 'Bad file descriptor'\n/);
  
      my $initial = time;
      my $pending = $timeout;
      my $nfound;
  
      vec(my $fdset = '', $fd, 1) = 1;
  
      while () {
          $nfound = ($type eq 'read')
              ? select($fdset, undef, undef, $pending)
              : select(undef, $fdset, undef, $pending) ;
          if ($nfound == -1) {
              $! == EINTR
                or die(qq/select(2): '$!'\n/);
              redo if !$timeout || ($pending = $timeout - (time - $initial)) > 0;
              $nfound = 0;
          }
          last;
      }
      $! = 0;
      return $nfound;
  }
  
  sub can_read {
      @_ == 1 || @_ == 2 || die(q/Usage: $handle->can_read([timeout])/ . "\n");
      my $self = shift;
      if ( ref($self->{fh}) eq 'IO::Socket::SSL' ) {
          return 1 if $self->{fh}->pending;
      }
      return $self->_do_timeout('read', @_)
  }
  
  sub can_write {
      @_ == 1 || @_ == 2 || die(q/Usage: $handle->can_write([timeout])/ . "\n");
      my $self = shift;
      return $self->_do_timeout('write', @_)
  }
  
  sub _assert_ssl {
      my($ok, $reason) = HTTP::Tiny->can_ssl();
      die $reason unless $ok;
  }
  
  sub can_reuse {
      my ($self,$scheme,$host,$port) = @_;
      return 0 if
          $self->{pid} != $$
          || $self->{tid} != _get_tid()
          || length($self->{rbuf})
          || $scheme ne $self->{scheme}
          || $host ne $self->{host}
          || $port ne $self->{port}
          || eval { $self->can_read(0) }
          || $@ ;
          return 1;
  }
  
  # Try to find a CA bundle to validate the SSL cert,
  # prefer Mozilla::CA or fallback to a system file
  sub _find_CA_file {
      my $self = shift();
  
      if ( $self->{SSL_options}->{SSL_ca_file} ) {
          unless ( -r $self->{SSL_options}->{SSL_ca_file} ) {
              die qq/SSL_ca_file '$self->{SSL_options}->{SSL_ca_file}' not found or not readable\n/;
          }
          return $self->{SSL_options}->{SSL_ca_file};
      }
  
      return Mozilla::CA::SSL_ca_file()
          if eval { require Mozilla::CA; 1 };
  
      # cert list copied from golang src/crypto/x509/root_unix.go
      foreach my $ca_bundle (
          "/etc/ssl/certs/ca-certificates.crt",     # Debian/Ubuntu/Gentoo etc.
          "/etc/pki/tls/certs/ca-bundle.crt",       # Fedora/RHEL
          "/etc/ssl/ca-bundle.pem",                 # OpenSUSE
          "/etc/openssl/certs/ca-certificates.crt", # NetBSD
          "/etc/ssl/cert.pem",                      # OpenBSD
          "/usr/local/share/certs/ca-root-nss.crt", # FreeBSD/DragonFly
          "/etc/pki/tls/cacert.pem",                # OpenELEC
          "/etc/certs/ca-certificates.crt",         # Solaris 11.2+
      ) {
          return $ca_bundle if -e $ca_bundle;
      }
  
      die qq/Couldn't find a CA bundle with which to verify the SSL certificate.\n/
        . qq/Try installing Mozilla::CA from CPAN\n/;
  }
  
  # for thread safety, we need to know thread id if threads are loaded
  sub _get_tid {
      no warnings 'reserved'; # for 'threads'
      return threads->can("tid") ? threads->tid : 0;
  }
  
  sub _ssl_args {
      my ($self, $host) = @_;
  
      my %ssl_args;
  
      # This test reimplements IO::Socket::SSL::can_client_sni(), which wasn't
      # added until IO::Socket::SSL 1.84
      if ( Net::SSLeay::OPENSSL_VERSION_NUMBER() >= 0x01000000 ) {
          $ssl_args{SSL_hostname} = $host,          # Sane SNI support
      }
  
      if ($self->{verify_SSL}) {
          $ssl_args{SSL_verifycn_scheme}  = 'http'; # enable CN validation
          $ssl_args{SSL_verifycn_name}    = $host;  # set validation hostname
          $ssl_args{SSL_verify_mode}      = 0x01;   # enable cert validation
          $ssl_args{SSL_ca_file}          = $self->_find_CA_file;
      }
      else {
          $ssl_args{SSL_verifycn_scheme}  = 'none'; # disable CN validation
          $ssl_args{SSL_verify_mode}      = 0x00;   # disable cert validation
      }
  
      # user options override settings from verify_SSL
      for my $k ( keys %{$self->{SSL_options}} ) {
          $ssl_args{$k} = $self->{SSL_options}{$k} if $k =~ m/^SSL_/;
      }
  
      return \%ssl_args;
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  HTTP::Tiny - A small, simple, correct HTTP/1.1 client
  
  =head1 VERSION
  
  version 0.056
  
  =head1 SYNOPSIS
  
      use HTTP::Tiny;
  
      my $response = HTTP::Tiny->new->get('http://example.com/');
  
      die "Failed!\n" unless $response->{success};
  
      print "$response->{status} $response->{reason}\n";
  
      while (my ($k, $v) = each %{$response->{headers}}) {
          for (ref $v eq 'ARRAY' ? @$v : $v) {
              print "$k: $_\n";
          }
      }
  
      print $response->{content} if length $response->{content};
  
  =head1 DESCRIPTION
  
  This is a very simple HTTP/1.1 client, designed for doing simple
  requests without the overhead of a large framework like L<LWP::UserAgent>.
  
  It is more correct and more complete than L<HTTP::Lite>.  It supports
  proxies and redirection.  It also correctly resumes after EINTR.
  
  If L<IO::Socket::IP> 0.25 or later is installed, HTTP::Tiny will use it instead
  of L<IO::Socket::INET> for transparent support for both IPv4 and IPv6.
  
  Cookie support requires L<HTTP::CookieJar> or an equivalent class.
  
  =head1 METHODS
  
  =head2 new
  
      $http = HTTP::Tiny->new( %attributes );
  
  This constructor returns a new HTTP::Tiny object.  Valid attributes include:
  
  =over 4
  
  =item *
  
  C<agent> — A user-agent string (defaults to 'HTTP-Tiny/$VERSION'). If C<agent> — ends in a space character, the default user-agent string is appended.
  
  =item *
  
  C<cookie_jar> — An instance of L<HTTP::CookieJar> — or equivalent class that supports the C<add> and C<cookie_header> methods
  
  =item *
  
  C<default_headers> — A hashref of default headers to apply to requests
  
  =item *
  
  C<local_address> — The local IP address to bind to
  
  =item *
  
  C<keep_alive> — Whether to reuse the last connection (if for the same scheme, host and port) (defaults to 1)
  
  =item *
  
  C<max_redirect> — Maximum number of redirects allowed (defaults to 5)
  
  =item *
  
  C<max_size> — Maximum response size in bytes (only when not using a data callback).  If defined, responses larger than this will return an exception.
  
  =item *
  
  C<http_proxy> — URL of a proxy server to use for HTTP connections (default is C<$ENV{http_proxy}> — if set)
  
  =item *
  
  C<https_proxy> — URL of a proxy server to use for HTTPS connections (default is C<$ENV{https_proxy}> — if set)
  
  =item *
  
  C<proxy> — URL of a generic proxy server for both HTTP and HTTPS connections (default is C<$ENV{all_proxy}> — if set)
  
  =item *
  
  C<no_proxy> — List of domain suffixes that should not be proxied.  Must be a comma-separated string or an array reference. (default is C<$ENV{no_proxy}> —)
  
  =item *
  
  C<timeout> — Request timeout in seconds (default is 60)
  
  =item *
  
  C<verify_SSL> — A boolean that indicates whether to validate the SSL certificate of an C<https> — connection (default is false)
  
  =item *
  
  C<SSL_options> — A hashref of C<SSL_*> — options to pass through to L<IO::Socket::SSL>
  
  =back
  
  Passing an explicit C<undef> for C<proxy>, C<http_proxy> or C<https_proxy> will
  prevent getting the corresponding proxies from the environment.
  
  Exceptions from C<max_size>, C<timeout> or other errors will result in a
  pseudo-HTTP status code of 599 and a reason of "Internal Exception". The
  content field in the response will contain the text of the exception.
  
  The C<keep_alive> parameter enables a persistent connection, but only to a
  single destination scheme, host and port.  Also, if any connection-relevant
  attributes are modified, or if the process ID or thread ID change, the
  persistent connection will be dropped.  If you want persistent connections
  across multiple destinations, use multiple HTTP::Tiny objects.
  
  See L</SSL SUPPORT> for more on the C<verify_SSL> and C<SSL_options> attributes.
  
  =head2 get|head|put|post|delete
  
      $response = $http->get($url);
      $response = $http->get($url, \%options);
      $response = $http->head($url);
  
  These methods are shorthand for calling C<request()> for the given method.  The
  URL must have unsafe characters escaped and international domain names encoded.
  See C<request()> for valid options and a description of the response.
  
  The C<success> field of the response will be true if the status code is 2XX.
  
  =head2 post_form
  
      $response = $http->post_form($url, $form_data);
      $response = $http->post_form($url, $form_data, \%options);
  
  This method executes a C<POST> request and sends the key/value pairs from a
  form data hash or array reference to the given URL with a C<content-type> of
  C<application/x-www-form-urlencoded>.  If data is provided as an array
  reference, the order is preserved; if provided as a hash reference, the terms
  are sorted on key and value for consistency.  See documentation for the
  C<www_form_urlencode> method for details on the encoding.
  
  The URL must have unsafe characters escaped and international domain names
  encoded.  See C<request()> for valid options and a description of the response.
  Any C<content-type> header or content in the options hashref will be ignored.
  
  The C<success> field of the response will be true if the status code is 2XX.
  
  =head2 mirror
  
      $response = $http->mirror($url, $file, \%options)
      if ( $response->{success} ) {
          print "$file is up to date\n";
      }
  
  Executes a C<GET> request for the URL and saves the response body to the file
  name provided.  The URL must have unsafe characters escaped and international
  domain names encoded.  If the file already exists, the request will include an
  C<If-Modified-Since> header with the modification timestamp of the file.  You
  may specify a different C<If-Modified-Since> header yourself in the C<<
  $options->{headers} >> hash.
  
  The C<success> field of the response will be true if the status code is 2XX
  or if the status code is 304 (unmodified).
  
  If the file was modified and the server response includes a properly
  formatted C<Last-Modified> header, the file modification time will
  be updated accordingly.
  
  =head2 request
  
      $response = $http->request($method, $url);
      $response = $http->request($method, $url, \%options);
  
  Executes an HTTP request of the given method type ('GET', 'HEAD', 'POST',
  'PUT', etc.) on the given URL.  The URL must have unsafe characters escaped and
  international domain names encoded.
  
  If the URL includes a "user:password" stanza, they will be used for Basic-style
  authorization headers.  (Authorization headers will not be included in a
  redirected request.) For example:
  
      $http->request('GET', 'http://Aladdin:open sesame@example.com/');
  
  If the "user:password" stanza contains reserved characters, they must
  be percent-escaped:
  
      $http->request('GET', 'http://john%40example.com:password@example.com/');
  
  A hashref of options may be appended to modify the request.
  
  Valid options are:
  
  =over 4
  
  =item *
  
  C<headers> — A hashref containing headers to include with the request.  If the value for a header is an array reference, the header will be output multiple times with each value in the array.  These headers over-write any default headers.
  
  =item *
  
  C<content> — A scalar to include as the body of the request OR a code reference that will be called iteratively to produce the body of the request
  
  =item *
  
  C<trailer_callback> — A code reference that will be called if it exists to provide a hashref of trailing headers (only used with chunked transfer-encoding)
  
  =item *
  
  C<data_callback> — A code reference that will be called for each chunks of the response body received.
  
  =back
  
  The C<Host> header is generated from the URL in accordance with RFC 2616.  It
  is a fatal error to specify C<Host> in the C<headers> option.  Other headers
  may be ignored or overwritten if necessary for transport compliance.
  
  If the C<content> option is a code reference, it will be called iteratively
  to provide the content body of the request.  It should return the empty
  string or undef when the iterator is exhausted.
  
  If the C<content> option is the empty string, no C<content-type> or
  C<content-length> headers will be generated.
  
  If the C<data_callback> option is provided, it will be called iteratively until
  the entire response body is received.  The first argument will be a string
  containing a chunk of the response body, the second argument will be the
  in-progress response hash reference, as described below.  (This allows
  customizing the action of the callback based on the C<status> or C<headers>
  received prior to the content body.)
  
  The C<request> method returns a hashref containing the response.  The hashref
  will have the following keys:
  
  =over 4
  
  =item *
  
  C<success> — Boolean indicating whether the operation returned a 2XX status code
  
  =item *
  
  C<url> — URL that provided the response. This is the URL of the request unless there were redirections, in which case it is the last URL queried in a redirection chain
  
  =item *
  
  C<status> — The HTTP status code of the response
  
  =item *
  
  C<reason> — The response phrase returned by the server
  
  =item *
  
  C<content> — The body of the response.  If the response does not have any content or if a data callback is provided to consume the response body, this will be the empty string
  
  =item *
  
  C<headers> — A hashref of header fields.  All header field names will be normalized to be lower case. If a header is repeated, the value will be an arrayref; it will otherwise be a scalar string containing the value
  
  =back
  
  On an exception during the execution of the request, the C<status> field will
  contain 599, and the C<content> field will contain the text of the exception.
  
  =head2 www_form_urlencode
  
      $params = $http->www_form_urlencode( $data );
      $response = $http->get("http://example.com/query?$params");
  
  This method converts the key/value pairs from a data hash or array reference
  into a C<x-www-form-urlencoded> string.  The keys and values from the data
  reference will be UTF-8 encoded and escaped per RFC 3986.  If a value is an
  array reference, the key will be repeated with each of the values of the array
  reference.  If data is provided as a hash reference, the key/value pairs in the
  resulting string will be sorted by key and value for consistent ordering.
  
  =head2 can_ssl
  
      $ok         = HTTP::Tiny->can_ssl;
      ($ok, $why) = HTTP::Tiny->can_ssl;
      ($ok, $why) = $http->can_ssl;
  
  Indicates if SSL support is available.  When called as a class object, it
  checks for the correct version of L<Net::SSLeay> and L<IO::Socket::SSL>.
  When called as an object methods, if C<SSL_verify> is true or if C<SSL_verify_mode>
  is set in C<SSL_options>, it checks that a CA file is available.
  
  In scalar context, returns a boolean indicating if SSL is available.
  In list context, returns the boolean and a (possibly multi-line) string of
  errors indicating why SSL isn't available.
  
  =for Pod::Coverage SSL_options
  agent
  cookie_jar
  default_headers
  http_proxy
  https_proxy
  keep_alive
  local_address
  max_redirect
  max_size
  no_proxy
  proxy
  timeout
  verify_SSL
  
  =head1 SSL SUPPORT
  
  Direct C<https> connections are supported only if L<IO::Socket::SSL> 1.56 or
  greater and L<Net::SSLeay> 1.49 or greater are installed. An exception will be
  thrown if new enough versions of these modules are not installed or if the SSL
  encryption fails. You can also use C<HTTP::Tiny::can_ssl()> utility function
  that returns boolean to see if the required modules are installed.
  
  An C<https> connection may be made via an C<http> proxy that supports the CONNECT
  command (i.e. RFC 2817).  You may not proxy C<https> via a proxy that itself
  requires C<https> to communicate.
  
  SSL provides two distinct capabilities:
  
  =over 4
  
  =item *
  
  Encrypted communication channel
  
  =item *
  
  Verification of server identity
  
  =back
  
  B<By default, HTTP::Tiny does not verify server identity>.
  
  Server identity verification is controversial and potentially tricky because it
  depends on a (usually paid) third-party Certificate Authority (CA) trust model
  to validate a certificate as legitimate.  This discriminates against servers
  with self-signed certificates or certificates signed by free, community-driven
  CA's such as L<CAcert.org|http://cacert.org>.
  
  By default, HTTP::Tiny does not make any assumptions about your trust model,
  threat level or risk tolerance.  It just aims to give you an encrypted channel
  when you need one.
  
  Setting the C<verify_SSL> attribute to a true value will make HTTP::Tiny verify
  that an SSL connection has a valid SSL certificate corresponding to the host
  name of the connection and that the SSL certificate has been verified by a CA.
  Assuming you trust the CA, this will protect against a L<man-in-the-middle
  attack|http://en.wikipedia.org/wiki/Man-in-the-middle_attack>.  If you are
  concerned about security, you should enable this option.
  
  Certificate verification requires a file containing trusted CA certificates.
  If the L<Mozilla::CA> module is installed, HTTP::Tiny will use the CA file
  included with it as a source of trusted CA's.  (This means you trust Mozilla,
  the author of Mozilla::CA, the CPAN mirror where you got Mozilla::CA, the
  toolchain used to install it, and your operating system security, right?)
  
  If that module is not available, then HTTP::Tiny will search several
  system-specific default locations for a CA certificate file:
  
  =over 4
  
  =item *
  
  /etc/ssl/certs/ca-certificates.crt
  
  =item *
  
  /etc/pki/tls/certs/ca-bundle.crt
  
  =item *
  
  /etc/ssl/ca-bundle.pem
  
  =back
  
  An exception will be raised if C<verify_SSL> is true and no CA certificate file
  is available.
  
  If you desire complete control over SSL connections, the C<SSL_options> attribute
  lets you provide a hash reference that will be passed through to
  C<IO::Socket::SSL::start_SSL()>, overriding any options set by HTTP::Tiny. For
  example, to provide your own trusted CA file:
  
      SSL_options => {
          SSL_ca_file => $file_path,
      }
  
  The C<SSL_options> attribute could also be used for such things as providing a
  client certificate for authentication to a server or controlling the choice of
  cipher used for the SSL connection. See L<IO::Socket::SSL> documentation for
  details.
  
  =head1 PROXY SUPPORT
  
  HTTP::Tiny can proxy both C<http> and C<https> requests.  Only Basic proxy
  authorization is supported and it must be provided as part of the proxy URL:
  C<http://user:pass@proxy.example.com/>.
  
  HTTP::Tiny supports the following proxy environment variables:
  
  =over 4
  
  =item *
  
  http_proxy or HTTP_PROXY
  
  =item *
  
  https_proxy or HTTPS_PROXY
  
  =item *
  
  all_proxy or ALL_PROXY
  
  =back
  
  If the C<REQUEST_METHOD> environment variable is set, then this might be a CGI
  process and C<HTTP_PROXY> would be set from the C<Proxy:> header, which is a
  security risk.  If C<REQUEST_METHOD> is set, C<HTTP_PROXY> (the upper case
  variant only) is ignored.
  
  Tunnelling C<https> over an C<http> proxy using the CONNECT method is
  supported.  If your proxy uses C<https> itself, you can not tunnel C<https>
  over it.
  
  Be warned that proxying an C<https> connection opens you to the risk of a
  man-in-the-middle attack by the proxy server.
  
  The C<no_proxy> environment variable is supported in the format of a
  comma-separated list of domain extensions proxy should not be used for.
  
  Proxy arguments passed to C<new> will override their corresponding
  environment variables.
  
  =head1 LIMITATIONS
  
  HTTP::Tiny is I<conditionally compliant> with the
  L<HTTP/1.1 specifications|http://www.w3.org/Protocols/>:
  
  =over 4
  
  =item *
  
  "Message Syntax and Routing" [RFC7230]
  
  =item *
  
  "Semantics and Content" [RFC7231]
  
  =item *
  
  "Conditional Requests" [RFC7232]
  
  =item *
  
  "Range Requests" [RFC7233]
  
  =item *
  
  "Caching" [RFC7234]
  
  =item *
  
  "Authentication" [RFC7235]
  
  =back
  
  It attempts to meet all "MUST" requirements of the specification, but does not
  implement all "SHOULD" requirements.  (Note: it was developed against the
  earlier RFC 2616 specification and may not yet meet the revised RFC 7230-7235
  spec.)
  
  Some particular limitations of note include:
  
  =over
  
  =item *
  
  HTTP::Tiny focuses on correct transport.  Users are responsible for ensuring
  that user-defined headers and content are compliant with the HTTP/1.1
  specification.
  
  =item *
  
  Users must ensure that URLs are properly escaped for unsafe characters and that
  international domain names are properly encoded to ASCII. See L<URI::Escape>,
  L<URI::_punycode> and L<Net::IDN::Encode>.
  
  =item *
  
  Redirection is very strict against the specification.  Redirection is only
  automatic for response codes 301, 302, 307 and 308 if the request method is
  'GET' or 'HEAD'.  Response code 303 is always converted into a 'GET'
  redirection, as mandated by the specification.  There is no automatic support
  for status 305 ("Use proxy") redirections.
  
  =item *
  
  There is no provision for delaying a request body using an C<Expect> header.
  Unexpected C<1XX> responses are silently ignored as per the specification.
  
  =item *
  
  Only 'chunked' C<Transfer-Encoding> is supported.
  
  =item *
  
  There is no support for a Request-URI of '*' for the 'OPTIONS' request.
  
  =back
  
  Despite the limitations listed above, HTTP::Tiny is considered
  feature-complete.  New feature requests should be directed to
  L<HTTP::Tiny::UA>.
  
  =head1 SEE ALSO
  
  =over 4
  
  =item *
  
  L<HTTP::Tiny::UA> - Higher level UA features for HTTP::Tiny
  
  =item *
  
  L<HTTP::Thin> - HTTP::Tiny wrapper with L<HTTP::Request>/L<HTTP::Response> compatibility
  
  =item *
  
  L<HTTP::Tiny::Mech> - Wrap L<WWW::Mechanize> instance in HTTP::Tiny compatible interface
  
  =item *
  
  L<IO::Socket::IP> - Required for IPv6 support
  
  =item *
  
  L<IO::Socket::SSL> - Required for SSL support
  
  =item *
  
  L<LWP::UserAgent> - If HTTP::Tiny isn't enough for you, this is the "standard" way to do things
  
  =item *
  
  L<Mozilla::CA> - Required if you want to validate SSL certificates
  
  =item *
  
  L<Net::SSLeay> - Required for SSL support
  
  =back
  
  =for :stopwords cpan testmatrix url annocpan anno bugtracker rt cpants kwalitee diff irc mailto metadata placeholders metacpan
  
  =head1 SUPPORT
  
  =head2 Bugs / Feature Requests
  
  Please report any bugs or feature requests through the issue tracker
  at L<https://github.com/chansen/p5-http-tiny/issues>.
  You will be notified automatically of any progress on your issue.
  
  =head2 Source Code
  
  This is open source software.  The code repository is available for
  public review and contribution under the terms of the license.
  
  L<https://github.com/chansen/p5-http-tiny>
  
    git clone https://github.com/chansen/p5-http-tiny.git
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Christian Hansen <chansen@cpan.org>
  
  =item *
  
  David Golden <dagolden@cpan.org>
  
  =back
  
  =head1 CONTRIBUTORS
  
  =for stopwords Alan Gardner Alessandro Ghedini Brad Gilbert Chris Nehren Weyl Claes Jakobsson Clinton Gormley Dean Pearce Edward Zborowski James Raspass Jeremy Mates Jess Robinson Lukas Eklund Martin J. Evans Martin-Louis Bright Mike Doherty Olaf Alders Olivier Mengué Petr Písař Sören Kornetzki Syohei YOSHIDA Tatsuhiko Miyagawa Tom Hukins Tony Cook
  
  =over 4
  
  =item *
  
  Alan Gardner <gardner@pythian.com>
  
  =item *
  
  Alessandro Ghedini <al3xbio@gmail.com>
  
  =item *
  
  Brad Gilbert <bgills@cpan.org>
  
  =item *
  
  Chris Nehren <apeiron@cpan.org>
  
  =item *
  
  Chris Weyl <cweyl@alumni.drew.edu>
  
  =item *
  
  Claes Jakobsson <claes@surfar.nu>
  
  =item *
  
  Clinton Gormley <clint@traveljury.com>
  
  =item *
  
  Dean Pearce <pearce@pythian.com>
  
  =item *
  
  Edward Zborowski <ed@rubensteintech.com>
  
  =item *
  
  James Raspass <jraspass@gmail.com>
  
  =item *
  
  Jeremy Mates <jmates@cpan.org>
  
  =item *
  
  Jess Robinson <castaway@desert-island.me.uk>
  
  =item *
  
  Lukas Eklund <leklund@gmail.com>
  
  =item *
  
  Martin J. Evans <mjegh@ntlworld.com>
  
  =item *
  
  Martin-Louis Bright <mlbright@gmail.com>
  
  =item *
  
  Mike Doherty <doherty@cpan.org>
  
  =item *
  
  Olaf Alders <olaf@wundersolutions.com>
  
  =item *
  
  Olivier Mengué <dolmen@cpan.org>
  
  =item *
  
  Petr Písař <ppisar@redhat.com>
  
  =item *
  
  Sören Kornetzki <soeren.kornetzki@delti.com>
  
  =item *
  
  Syohei YOSHIDA <syohex@gmail.com>
  
  =item *
  
  Tatsuhiko Miyagawa <miyagawa@bulknews.net>
  
  =item *
  
  Tom Hukins <tom@eborcom.com>
  
  =item *
  
  Tony Cook <tony@develop-help.com>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by Christian Hansen.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
HTTP_TINY

    $main::fatpacked{"HTTP/Tiny/UNIX.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'HTTP_TINY_UNIX';
  package HTTP::Tiny::UNIX;
  
  use 5.010001;
  use strict;
  use warnings;
  
  our $DATE = '2014-07-04'; # DATE
  our $VERSION = '0.04'; # VERSION
  
  # issue: port must be numeric to avoid warning
  # put everything in path_query
  
  use parent qw(HTTP::Tiny);
  
  use IO::Socket::UNIX;
  
  sub _split_url {
      my ($self, $url) = @_;
  
      if ($url =~ m<\A[^:/?#]+://>) {
          $self->{_unix} = 0;
          return $self->SUPER::_split_url($url);
      }
  
      my ($scheme, $sock_path, $path_query) =
          $url =~ m<\A(\w+):(.+?)/(/[^#]*)>
              or die "Cannot parse HTTP-over-Unix URL: '$url'\n";
  
      # a hack
      $self->{_unix} = 1;
      $self->{_path_query} = $path_query;
  
      $scheme = lc $scheme;
      die "Only http scheme is supported\n" unless $scheme eq 'http';
  
      #return ($scheme, $host,      $port, $path_query, $auth);
      return  ($scheme, $sock_path, -1,    $path_query, '');
  }
  
  sub _open_handle {
      my ($self, $request, $scheme, $host, $port) = @_;
  
      return $self->SUPER::_open_handle($request, $scheme, $host, $port)
          unless $self->{_unix};
  
      my $handle = HTTP::Tiny::Handle::UNIX->new(
          timeout => $self->{timeout},
      );
  
      $handle->connect($scheme, $host, $port, $self);
  }
  
  package
      HTTP::Tiny::Handle::UNIX;
  
  use parent -norequire, 'HTTP::Tiny::Handle';
  
  use IO::Socket;
  
  sub connect {
      my ($self, $scheme, $host, $port, $tiny) = @_;
  
      # on Unix, we use $host for path and leave port at -1 (unused)
      my $path = $host;
  
      local($^W) = 0;
      my $sock = IO::Socket::UNIX->new(
          Peer    => $path,
          Type    => SOCK_STREAM,
          Timeout => $self->{timeout},
          Host    => 'localhost',
      );
  
      unless ($sock) {
          $@ =~ s/^.*?: //;
          die "Can't open Unix socket $path\: $@";
      }
  
      eval { $sock->blocking(0); };
  
      $self->{fh} = $sock;
  
      $self->{scheme} = $scheme;
      $self->{host} = $host;
      $self->{port} = $port;
      $self->{_unix} = 1;
      # this is a hack, we inject this so we can get HTTP::Tiny::UNIX object from
      # HTTP::Tiny::Handle::UNIX, to get path
      $self->{_tiny} = $tiny;
      $self;
  }
  
  sub write_request_header {
      my ($self, $method, $request_uri, $headers) = @_;
  
      return $self->write_request_header($method, $request_uri, $headers)
          unless $self->{_unix};
  
      return $self->write_header_lines($headers, "$method $self->{_tiny}{_path_query} HTTP/1.1\x0D\x0A");
  }
  
  1;
  # ABSTRACT: A subclass of HTTP::Tiny to connect to HTTP server over Unix socket
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  HTTP::Tiny::UNIX - A subclass of HTTP::Tiny to connect to HTTP server over Unix socket
  
  =head1 VERSION
  
  This document describes version 0.04 of HTTP::Tiny::UNIX (from Perl distribution HTTP-Tiny-UNIX), released on 2014-07-04.
  
  =head1 SYNOPSIS
  
   use HTTP::Tiny::UNIX;
  
   my $response = HTTP::Tiny::UNIX->new->get('http:/path/to/unix.sock//uri/path');
  
   die "Failed!\n" unless $response->{success};
   print "$response->{status} $response->{reason}\n";
  
   while (my ($k, $v) = each %{$response->{headers}}) {
       for (ref $v eq 'ARRAY' ? @$v : $v) {
           print "$k: $_\n";
       }
   }
  
   print $response->{content} if length $response->{content};
  
  =head1 DESCRIPTION
  
  This is a subclass of L<HTTP::Tiny> to connect to HTTP server over Unix socket.
  URL syntax is C<"http:"> + I<path to unix socket> + C<"/"> + I<uri path>. For
  example: C<http:/var/run/apid.sock//api/v1/matches>. URL not matching this
  pattern will be passed to HTTP::Tiny.
  
  Proxy is currently not supported.
  
  =head1 SEE ALSO
  
  L<HTTP::Tiny>
  
  To use L<LWP> to connect over Unix sockets, see
  L<LWP::protocol::http::SocketUnixAlt>.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/HTTP-Tiny-UNIX>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-HTTP-Tiny-UNIX>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=HTTP-Tiny-UNIX>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  Steven Haryanto <stevenharyanto@gmail.com>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by Steven Haryanto.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
HTTP_TINY_UNIX

    $main::fatpacked{"IO/HTML.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'IO_HTML';
  #---------------------------------------------------------------------
  package IO::HTML;
  #
  # Copyright 2014 Christopher J. Madsen
  #
  # Author: Christopher J. Madsen <perl@cjmweb.net>
  # Created: 14 Jan 2012
  #
  # This program is free software; you can redistribute it and/or modify
  # it under the same terms as Perl itself.
  #
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See either the
  # GNU General Public License or the Artistic License for more details.
  #
  # ABSTRACT: Open an HTML file with automatic charset detection
  #---------------------------------------------------------------------
  
  use 5.008;
  use strict;
  use warnings;
  
  use Carp 'croak';
  use Encode 2.10 qw(decode find_encoding); # need utf-8-strict encoding
  use Exporter 5.57 'import';
  
  our $VERSION = '1.001';
  # This file is part of IO-HTML 1.001 (June 28, 2014)
  
  our $default_encoding ||= 'cp1252';
  
  our @EXPORT    = qw(html_file);
  our @EXPORT_OK = qw(find_charset_in html_file_and_encoding html_outfile
                      sniff_encoding);
  
  our %EXPORT_TAGS = (
    rw  => [qw( html_file html_file_and_encoding html_outfile )],
    all => [ @EXPORT, @EXPORT_OK ],
  );
  
  #=====================================================================
  
  
  sub html_file
  {
    (&html_file_and_encoding)[0]; # return just the filehandle
  } # end html_file
  
  
  # Note: I made html_file and html_file_and_encoding separate functions
  # (instead of making html_file context-sensitive) because I wanted to
  # use html_file in function calls (i.e. list context) without having
  # to write "scalar html_file" all the time.
  
  sub html_file_and_encoding
  {
    my ($filename, $options) = @_;
  
    $options ||= {};
  
    open(my $in, '<:raw', $filename) or croak "Failed to open $filename: $!";
  
  
    my ($encoding, $bom) = sniff_encoding($in, $filename, $options);
  
    if (not defined $encoding) {
      croak "No default encoding specified"
          unless defined($encoding = $default_encoding);
      $encoding = find_encoding($encoding) if $options->{encoding};
    } # end if we didn't find an encoding
  
    binmode $in, sprintf(":encoding(%s):crlf",
                         $options->{encoding} ? $encoding->name : $encoding);
  
    return ($in, $encoding, $bom);
  } # end html_file_and_encoding
  #---------------------------------------------------------------------
  
  
  sub html_outfile
  {
    my ($filename, $encoding, $bom) = @_;
  
    if (not defined $encoding) {
      croak "No default encoding specified"
          unless defined($encoding = $default_encoding);
    } # end if we didn't find an encoding
    elsif (ref $encoding) {
      $encoding = $encoding->name;
    }
  
    open(my $out, ">:encoding($encoding)", $filename)
        or croak "Failed to open $filename: $!";
  
    print $out "\x{FeFF}" if $bom;
  
    return $out;
  } # end html_outfile
  #---------------------------------------------------------------------
  
  
  sub sniff_encoding
  {
    my ($in, $filename, $options) = @_;
  
    $filename = 'file' unless defined $filename;
    $options ||= {};
  
    my $pos = tell $in;
    croak "Could not seek $filename: $!" if $pos < 0;
  
    croak "Could not read $filename: $!" unless defined read $in, my $buf, 1024;
  
    seek $in, $pos, 0 or croak "Could not seek $filename: $!";
  
  
    # Check for BOM:
    my $bom;
    my $encoding = do {
      if ($buf =~ /^\xFe\xFF/) {
        $bom = 2;
        'UTF-16BE';
      } elsif ($buf =~ /^\xFF\xFe/) {
        $bom = 2;
        'UTF-16LE';
      } elsif ($buf =~ /^\xEF\xBB\xBF/) {
        $bom = 3;
        'utf-8-strict';
      } else {
        find_charset_in($buf, $options); # check for <meta charset>
      }
    }; # end $encoding
  
    if ($bom) {
      seek $in, $bom, 1 or croak "Could not seek $filename: $!";
      $bom = 1;
    }
    elsif (not defined $encoding) { # try decoding as UTF-8
      my $test = decode('utf-8-strict', $buf, Encode::FB_QUIET);
      if ($buf =~ /^(?:                   # nothing left over
           | [\xC2-\xDF]                  # incomplete 2-byte char
           | [\xE0-\xEF] [\x80-\xBF]?     # incomplete 3-byte char
           | [\xF0-\xF4] [\x80-\xBF]{0,2} # incomplete 4-byte char
          )\z/x and $test =~ /[^\x00-\x7F]/) {
        $encoding = 'utf-8-strict';
      } # end if valid UTF-8 with at least one multi-byte character:
    } # end if testing for UTF-8
  
    if (defined $encoding and $options->{encoding} and not ref $encoding) {
      $encoding = find_encoding($encoding);
    } # end if $encoding is a string and we want an object
  
    return wantarray ? ($encoding, $bom) : $encoding;
  } # end sniff_encoding
  
  #=====================================================================
  # Based on HTML5 8.2.2.2 Determining the character encoding:
  
  # Get attribute from current position of $_
  sub _get_attribute
  {
    m!\G[\x09\x0A\x0C\x0D /]+!gc; # skip whitespace or /
  
    return if /\G>/gc or not /\G(=?[^\x09\x0A\x0C\x0D =]*)/gc;
  
    my ($name, $value) = (lc $1, '');
  
    if (/\G[\x09\x0A\x0C\x0D ]*=[\x09\x0A\x0C\x0D ]*/gc
        and (/\G"([^"]*)"?/gc or
             /\G'([^']*)'?/gc or
             /\G([^\x09\x0A\x0C\x0D >]*)/gc)) {
      $value = lc $1;
    } # end if attribute has value
  
    return wantarray ? ($name, $value) : 1;
  } # end _get_attribute
  
  # Examine a meta value for a charset:
  sub _get_charset_from_meta
  {
    for (shift) {
      while (/charset[\x09\x0A\x0C\x0D ]*=[\x09\x0A\x0C\x0D ]*/ig) {
        return $1 if (/\G"([^"]*)"/gc or
                      /\G'([^']*)'/gc or
                      /\G(?!['"])([^\x09\x0A\x0C\x0D ;]+)/gc);
      }
    } # end for value
  
    return undef;
  } # end _get_charset_from_meta
  #---------------------------------------------------------------------
  
  
  sub find_charset_in
  {
    for (shift) {
      my $options = shift || {};
      my $stop = length > 1024 ? 1024 : length; # search first 1024 bytes
  
      my $expect_pragma = (defined $options->{need_pragma}
                           ? $options->{need_pragma} : 1);
  
      pos() = 0;
      while (pos() < $stop) {
        if (/\G<!--.*?(?<=--)>/sgc) {
        } # Skip comment
        elsif (m!\G<meta(?=[\x09\x0A\x0C\x0D /])!gic) {
          my ($got_pragma, $need_pragma, $charset);
  
          while (my ($name, $value) = &_get_attribute) {
            if ($name eq 'http-equiv' and $value eq 'content-type') {
              $got_pragma = 1;
            } elsif ($name eq 'content' and not defined $charset) {
              $need_pragma = $expect_pragma
                  if defined($charset = _get_charset_from_meta($value));
            } elsif ($name eq 'charset') {
              $charset = $value;
              $need_pragma = 0;
            }
          } # end while more attributes in this <meta> tag
  
          if (defined $need_pragma and (not $need_pragma or $got_pragma)) {
            $charset = 'UTF-8'  if $charset =~ /^utf-?16/;
            $charset = 'cp1252' if $charset eq 'iso-8859-1'; # people lie
            if (my $encoding = find_encoding($charset)) {
              return $options->{encoding} ? $encoding : $encoding->name;
            } # end if charset is a recognized encoding
          } # end if found charset
        } # end elsif <meta
        elsif (m!\G</?[a-zA-Z][^\x09\x0A\x0C\x0D >]*!gc) {
          1 while &_get_attribute;
        } # end elsif some other tag
        elsif (m{\G<[!/?][^>]*}gc) {
        } # skip unwanted things
        elsif (m/\G</gc) {
        } # skip < that doesn't open anything we recognize
  
        # Advance to the next <:
        m/\G[^<]+/gc;
      } # end while not at search boundary
    } # end for string
  
    return undef;                 # Couldn't find a charset
  } # end find_charset_in
  #---------------------------------------------------------------------
  
  
  # Shortcuts for people who don't like exported functions:
  *file               = \&html_file;
  *file_and_encoding  = \&html_file_and_encoding;
  *outfile            = \&html_outfile;
  
  #=====================================================================
  # Package Return Value:
  
  1;
  
  __END__
  
  =head1 NAME
  
  IO::HTML - Open an HTML file with automatic charset detection
  
  =head1 VERSION
  
  This document describes version 1.001 of
  IO::HTML, released June 28, 2014.
  
  =head1 SYNOPSIS
  
    use IO::HTML;                 # exports html_file by default
    use HTML::TreeBuilder;
  
    my $tree = HTML::TreeBuilder->new_from_file(
                 html_file('foo.html')
               );
  
    # Alternative interface:
    open(my $in, '<:raw', 'bar.html');
    my $encoding = IO::HTML::sniff_encoding($in, 'bar.html');
  
  =head1 DESCRIPTION
  
  IO::HTML provides an easy way to open a file containing HTML while
  automatically determining its encoding.  It uses the HTML5 encoding
  sniffing algorithm specified in section 8.2.2.2 of the draft standard.
  
  The algorithm as implemented here is:
  
  =over
  
  =item 1.
  
  If the file begins with a byte order mark indicating UTF-16LE,
  UTF-16BE, or UTF-8, then that is the encoding.
  
  =item 2.
  
  If the first 1024 bytes of the file contain a C<< <meta> >> tag that
  indicates the charset, and Encode recognizes the specified charset
  name, then that is the encoding.  (This portion of the algorithm is
  implemented by C<find_charset_in>.)
  
  The C<< <meta> >> tag can be in one of two formats:
  
    <meta charset="...">
    <meta http-equiv="Content-Type" content="...charset=...">
  
  The search is case-insensitive, and the order of attributes within the
  tag is irrelevant.  Any additional attributes of the tag are ignored.
  The first matching tag with a recognized encoding ends the search.
  
  =item 3.
  
  If the first 1024 bytes of the file are valid UTF-8 (with at least 1
  non-ASCII character), then the encoding is UTF-8.
  
  =item 4.
  
  If all else fails, use the default character encoding.  The HTML5
  standard suggests the default encoding should be locale dependent, but
  currently it is always C<cp1252> unless you set
  C<$IO::HTML::default_encoding> to a different value.  Note:
  C<sniff_encoding> does not apply this step; only C<html_file> does
  that.
  
  =back
  
  =head1 SUBROUTINES
  
  =head2 html_file
  
    $filehandle = html_file($filename, \%options);
  
  This function (exported by default) is the primary entry point.  It
  opens the file specified by C<$filename> for reading, uses
  C<sniff_encoding> to find a suitable encoding layer, and applies it.
  It also applies the C<:crlf> layer.  If the file begins with a BOM,
  the filehandle is positioned just after the BOM.
  
  The optional second argument is a hashref containing options.  The
  possible keys are described under C<find_charset_in>.
  
  If C<sniff_encoding> is unable to determine the encoding, it defaults
  to C<$IO::HTML::default_encoding>, which is set to C<cp1252>
  (a.k.a. Windows-1252) by default.  According to the standard, the
  default should be locale dependent, but that is not currently
  implemented.
  
  It dies if the file cannot be opened.
  
  
  =head2 html_file_and_encoding
  
    ($filehandle, $encoding, $bom)
      = html_file_and_encoding($filename, \%options);
  
  This function (exported only by request) is just like C<html_file>,
  but returns more information.  In addition to the filehandle, it
  returns the name of the encoding used, and a flag indicating whether a
  byte order mark was found (if C<$bom> is true, the file began with a
  BOM).  This may be useful if you want to write the file out again
  (especially in conjunction with the C<html_outfile> function).
  
  The optional second argument is a hashref containing options.  The
  possible keys are described under C<find_charset_in>.
  
  It dies if the file cannot be opened.  The result of calling it in
  scalar context is undefined.
  
  
  =head2 html_outfile
  
    $filehandle = html_outfile($filename, $encoding, $bom);
  
  This function (exported only by request) opens C<$filename> for output
  using C<$encoding>, and writes a BOM to it if C<$bom> is true.
  If C<$encoding> is C<undef>, it defaults to C<$IO::HTML::default_encoding>.
  C<$encoding> may be either an encoding name or an Encode::Encoding object.
  
  It dies if the file cannot be opened.
  
  
  =head2 sniff_encoding
  
    ($encoding, $bom) = sniff_encoding($filehandle, $filename, \%options);
  
  This function (exported only by request) runs the HTML5 encoding
  sniffing algorithm on C<$filehandle> (which must be seekable, and
  should have been opened in C<:raw> mode).  C<$filename> is used only
  for error messages (if there's a problem using the filehandle), and
  defaults to "file" if omitted.  The optional third argument is a
  hashref containing options.  The possible keys are described under
  C<find_charset_in>.
  
  It returns Perl's canonical name for the encoding, which is not
  necessarily the same as the MIME or IANA charset name.  It returns
  C<undef> if the encoding cannot be determined.  C<$bom> is true if the
  file began with a byte order mark.  In scalar context, it returns only
  C<$encoding>.
  
  The filehandle's position is restored to its original position
  (normally the beginning of the file) unless C<$bom> is true.  In that
  case, the position is immediately after the BOM.
  
  Tip: If you want to run C<sniff_encoding> on a file you've already
  loaded into a string, open an in-memory file on the string, and pass
  that handle:
  
    ($encoding, $bom) = do {
      open(my $fh, '<', \$string);  sniff_encoding($fh)
    };
  
  (This only makes sense if C<$string> contains bytes, not characters.)
  
  
  =head2 find_charset_in
  
    $encoding = find_charset_in($string_containing_HTML, \%options);
  
  This function (exported only by request) looks for charset information
  in a C<< <meta> >> tag in a possibly incomplete HTML document using
  the "two step" algorithm specified by HTML5.  It does not look for a BOM.
  Only the first 1024 bytes of the string are checked.
  
  It returns Perl's canonical name for the encoding, which is not
  necessarily the same as the MIME or IANA charset name.  It returns
  C<undef> if no charset is specified or if the specified charset is not
  recognized by the Encode module.
  
  The optional second argument is a hashref containing options.  The
  following keys are recognized:
  
  =over
  
  =item C<encoding>
  
  If true, return the L<Encode::Encoding> object instead of its name.
  Defaults to false.
  
  =item C<need_pragma>
  
  If true (the default), follow the HTML5 spec and examine the
  C<content> attribute only of C<< <meta http-equiv="Content-Type" >>.
  If set to 0, relax the HTML5 spec, and look for "charset=" in the
  C<content> attribute of I<every> meta tag.
  
  =back
  
  =head1 EXPORTS
  
  By default, only C<html_file> is exported.  Other functions may be
  exported on request.
  
  For people who prefer not to export functions, all functions beginning
  with C<html_> have an alias without that prefix (e.g. you can call
  C<IO::HTML::file(...)> instead of C<IO::HTML::html_file(...)>.  These
  aliases are not exportable.
  
  =for Pod::Coverage
  file
  file_and_encoding
  outfile
  
  The following export tags are available:
  
  =over
  
  =item C<:all>
  
  All exportable functions.
  
  =item C<:rw>
  
  C<html_file>, C<html_file_and_encoding>, C<html_outfile>.
  
  =back
  
  =head1 SEE ALSO
  
  The HTML5 specification, section 8.2.2.2 Determining the character encoding:
  L<http://www.w3.org/TR/html5/syntax.html#determining-the-character-encoding>
  
  =head1 DIAGNOSTICS
  
  =over
  
  =item C<< Could not read %s: %s >>
  
  The specified file could not be read from for the reason specified by C<$!>.
  
  
  =item C<< Could not seek %s: %s >>
  
  The specified file could not be rewound for the reason specified by C<$!>.
  
  
  =item C<< Failed to open %s: %s >>
  
  The specified file could not be opened for reading for the reason
  specified by C<$!>.
  
  
  =item C<< No default encoding specified >>
  
  The C<sniff_encoding> algorithm didn't find an encoding to use, and
  you set C<$IO::HTML::default_encoding> to C<undef>.
  
  
  =back
  
  =head1 CONFIGURATION AND ENVIRONMENT
  
  IO::HTML requires no configuration files or environment variables.
  
  =head1 DEPENDENCIES
  
  IO::HTML has no non-core dependencies for Perl 5.8.7+.  With earlier
  versions of Perl 5.8, you need to upgrade L<Encode> to at least
  version 2.10, and
  you may need to upgrade L<Exporter> to at least version
  5.57.
  
  =head1 INCOMPATIBILITIES
  
  None reported.
  
  =head1 BUGS AND LIMITATIONS
  
  No bugs have been reported.
  
  =head1 AUTHOR
  
  Christopher J. Madsen  S<C<< <perl AT cjmweb.net> >>>
  
  Please report any bugs or feature requests
  to S<C<< <bug-IO-HTML AT rt.cpan.org> >>>
  or through the web interface at
  L<< http://rt.cpan.org/Public/Bug/Report.html?Queue=IO-HTML >>.
  
  You can follow or contribute to IO-HTML's development at
  L<< https://github.com/madsen/io-html >>.
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by Christopher J. Madsen.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =head1 DISCLAIMER OF WARRANTY
  
  BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
  FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
  OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
  PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
  EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
  ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
  YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
  NECESSARY SERVICING, REPAIR, OR CORRECTION.
  
  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
  WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
  REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENSE, BE
  LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL,
  OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
  THE SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
  RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
  FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
  SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
  SUCH DAMAGES.
  
  =cut
IO_HTML

    $main::fatpacked{"IO/Pty.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'IO_PTY';
  # Documentation at the __END__
  
  package IO::Pty;
  
  use strict;
  use Carp;
  use IO::Tty qw(TIOCSCTTY TCSETCTTY TIOCNOTTY);
  use IO::File;
  require POSIX;
  
  use vars qw(@ISA $VERSION);
  
  $VERSION = '1.12'; # keep same as in Tty.pm
  
  @ISA = qw(IO::Handle);
  eval { local $^W = 0; undef local $SIG{__DIE__}; require IO::Stty };
  push @ISA, "IO::Stty" if (not $@);  # if IO::Stty is installed
  
  sub new {
    my ($class) = $_[0] || "IO::Pty";
    $class = ref($class) if ref($class);
    @_ <= 1 or croak 'usage: new $class';
  
    my ($ptyfd, $ttyfd, $ttyname) = pty_allocate();
  
    croak "Cannot open a pty" if not defined $ptyfd;
  
    my $pty = $class->SUPER::new_from_fd($ptyfd, "r+");
    croak "Cannot create a new $class from fd $ptyfd: $!" if not $pty;
    $pty->autoflush(1);
    bless $pty => $class;
  
    my $slave = IO::Tty->new_from_fd($ttyfd, "r+");
    croak "Cannot create a new IO::Tty from fd $ttyfd: $!" if not $slave;
    $slave->autoflush(1);
  
    ${*$pty}{'io_pty_slave'} = $slave;
    ${*$pty}{'io_pty_ttyname'} = $ttyname;
    ${*$slave}{'io_tty_ttyname'} = $ttyname;
  
    return $pty;
  }
  
  sub ttyname {
    @_ == 1 or croak 'usage: $pty->ttyname();';
    my $pty = shift;
    ${*$pty}{'io_pty_ttyname'};
  }
  
  
  sub close_slave {
    @_ == 1 or croak 'usage: $pty->close_slave();';
  
    my $master = shift;
  
    if (exists ${*$master}{'io_pty_slave'}) {
      close ${*$master}{'io_pty_slave'};
      delete ${*$master}{'io_pty_slave'};
    }
  }
  
  sub slave {
    @_ == 1 or croak 'usage: $pty->slave();';
  
    my $master = shift;
  
    if (exists ${*$master}{'io_pty_slave'}) {
      return ${*$master}{'io_pty_slave'};
    }
  
    my $tty = ${*$master}{'io_pty_ttyname'};
  
    my $slave = new IO::Tty;
  
    $slave->open($tty, O_RDWR | O_NOCTTY) ||
      croak "Cannot open slave $tty: $!";
  
    return $slave;
  }
  
  sub make_slave_controlling_terminal {
    @_ == 1 or croak 'usage: $pty->make_slave_controlling_terminal();';
  
    my $self = shift;
    local(*DEVTTY);
  
    # loose controlling terminal explicitly
    if (defined TIOCNOTTY) {
      if (open (\*DEVTTY, "/dev/tty")) {
        ioctl( \*DEVTTY, TIOCNOTTY, 0 );
        close \*DEVTTY;
      }
    }
  
    # Create a new 'session', lose controlling terminal.
    if (not POSIX::setsid()) {
      warn "setsid() failed, strange behavior may result: $!\r\n" if $^W;
    }
  
    if (open(\*DEVTTY, "/dev/tty")) {
      warn "Could not disconnect from controlling terminal?!\n" if $^W;
      close \*DEVTTY;
    }
  
    # now open slave, this should set it as controlling tty on some systems
    my $ttyname = ${*$self}{'io_pty_ttyname'};
    my $slv = new IO::Tty;
    $slv->open($ttyname, O_RDWR)
      or croak "Cannot open slave $ttyname: $!";
  
    if (not exists ${*$self}{'io_pty_slave'}) {
      ${*$self}{'io_pty_slave'} = $slv;
    } else {
      $slv->close;
    }
  
    # Acquire a controlling terminal if this doesn't happen automatically
    if (not open(\*DEVTTY, "/dev/tty")) {
      if (defined TIOCSCTTY) {
        if (not defined ioctl( ${*$self}{'io_pty_slave'}, TIOCSCTTY, 0 )) {
          warn "warning: TIOCSCTTY failed, slave might not be set as controlling terminal: $!" if $^W;
        }
      } elsif (defined TCSETCTTY) {
        if (not defined ioctl( ${*$self}{'io_pty_slave'}, TCSETCTTY, 0 )) {
          warn "warning: TCSETCTTY failed, slave might not be set as controlling terminal: $!" if $^W;
        }
      } else {
        warn "warning: You have neither TIOCSCTTY nor TCSETCTTY on your system\n" if $^W;
        return 0;
      }
    }
  
    if (not open(\*DEVTTY, "/dev/tty")) {
      warn "Error: could not connect pty as controlling terminal!\n";
      return undef;
    } else {
      close \*DEVTTY;
    }
    
    return 1;
  }
  
  *clone_winsize_from = \&IO::Tty::clone_winsize_from;
  *get_winsize = \&IO::Tty::get_winsize;
  *set_winsize = \&IO::Tty::set_winsize;
  *set_raw = \&IO::Tty::set_raw;
  
  1;
  
  __END__
  
  =head1 NAME
  
  IO::Pty - Pseudo TTY object class
  
  =head1 VERSION
  
  1.12
  
  =head1 SYNOPSIS
  
      use IO::Pty;
  
      $pty = new IO::Pty;
  
      $slave  = $pty->slave;
  
      foreach $val (1..10) {
  	print $pty "$val\n";
  	$_ = <$slave>;
  	print "$_";
      }
  
      close($slave);
  
  
  =head1 DESCRIPTION
  
  C<IO::Pty> provides an interface to allow the creation of a pseudo tty.
  
  C<IO::Pty> inherits from C<IO::Handle> and so provide all the methods
  defined by the C<IO::Handle> package.
  
  Please note that pty creation is very system-dependend.  If you have
  problems, see L<IO::Tty> for help.
  
  
  =head1 CONSTRUCTOR
  
  =over 3
  
  =item new
  
  The C<new> constructor takes no arguments and returns a new file
  object which is the master side of the pseudo tty.
  
  =back
  
  =head1 METHODS
  
  =over 4
  
  =item ttyname()
  
  Returns the name of the slave pseudo tty. On UNIX machines this will
  be the pathname of the device.  Use this name for informational
  purpose only, to get a slave filehandle, use slave().
  
  =item slave()
  
  The C<slave> method will return the slave filehandle of the given
  master pty, opening it anew if necessary.  If IO::Stty is installed,
  you can then call C<$slave-E<gt>stty()> to modify the terminal settings.
  
  =item close_slave()
  
  The slave filehandle will be closed and destroyed.  This is necessary
  in the parent after forking to get rid of the open filehandle,
  otherwise the parent will not notice if the child exits.  Subsequent
  calls of C<slave()> will return a newly opened slave filehandle.
  
  =item make_slave_controlling_terminal()
  
  This will set the slave filehandle as the controlling terminal of the
  current process, which will become a session leader, so this should
  only be called by a child process after a fork(), e.g. in the callback
  to C<sync_exec()> (see L<Proc::SyncExec>).  See the C<try> script
  (also C<test.pl>) for an example how to correctly spawn a subprocess.
  
  =item set_raw()
  
  Will set the pty to raw.  Note that this is a one-way operation, you
  need IO::Stty to set the terminal settings to anything else.
  
  On some systems, the master pty is not a tty.  This method checks for
  that and returns success anyway on such systems.  Note that this
  method must be called on the slave, and probably should be called on
  the master, just to be sure, i.e.
  
    $pty->slave->set_raw();
    $pty->set_raw();
  
  
  =item clone_winsize_from(\*FH)
  
  Gets the terminal size from filehandle FH (which must be a terminal)
  and transfers it to the pty.  Returns true on success and undef on
  failure.  Note that this must be called upon the I<slave>, i.e.
  
   $pty->slave->clone_winsize_from(\*STDIN);
  
  On some systems, the master pty also isatty.  I actually have no
  idea if setting terminal sizes there is passed through to the slave,
  so if this method is called for a master that is not a tty, it
  silently returns OK.
  
  See the C<try> script for example code how to propagate SIGWINCH.
  
  =item get_winsize()
  
  Returns the terminal size, in a 4-element list.
  
   ($row, $col, $xpixel, $ypixel) = $tty->get_winsize()
  
  =item set_winsize($row, $col, $xpixel, $ypixel)
  
  Sets the terminal size. If not specified, C<$xpixel> and C<$ypixel> are set to
  0.  As with C<clone_winsize_from>, this must be called upon the I<slave>.
  
  =back
  
  
  =head1 SEE ALSO
  
  L<IO::Tty>, L<IO::Tty::Constant>, L<IO::Handle>, L<Expect>, L<Proc::SyncExec>
  
  
  =head1 MAILING LISTS
  
  As this module is mainly used by Expect, support for it is available
  via the two Expect mailing lists, expectperl-announce and
  expectperl-discuss, at
  
    http://lists.sourceforge.net/lists/listinfo/expectperl-announce
  
  and
  
    http://lists.sourceforge.net/lists/listinfo/expectperl-discuss
  
  
  =head1 AUTHORS
  
  Originally by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>, based on the
  Ptty module by Nick Ing-Simmons E<lt>F<nik@tiuk.ti.com>E<gt>.
  
  Now maintained and heavily rewritten by Roland Giersig
  E<lt>F<RGiersig@cpan.org>E<gt>.
  
  Contains copyrighted stuff from openssh v3.0p1, authored by 
  Tatu Ylonen <ylo@cs.hut.fi>, Markus Friedl and Todd C. Miller
  <Todd.Miller@courtesan.com>.
  
  
  =head1 COPYRIGHT
  
  Now all code is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself.
  
  Nevertheless the above AUTHORS retain their copyrights to the various
  parts and want to receive credit if their source code is used.
  See the source for details.
  
  
  =head1 DISCLAIMER
  
  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  DAMAGE.
  
  In other words: Use at your own risk.  Provided as is.  Your mileage
  may vary.  Read the source, Luke!
  
  And finally, just to be sure:
  
  Any Use of This Product, in Any Manner Whatsoever, Will Increase the
  Amount of Disorder in the Universe. Although No Liability Is Implied
  Herein, the Consumer Is Warned That This Process Will Ultimately Lead
  to the Heat Death of the Universe.
  
  =cut
  
IO_PTY

    $main::fatpacked{"IO/Socket/UNIX/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'IO_SOCKET_UNIX_UTIL';
  package IO::Socket::UNIX::Util;
  
  our $DATE = '2014-12-05'; # DATE
  our $VERSION = '0.05'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use IO::Socket::UNIX;
  use POSIX qw(locale_h);
  
  use Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         create_unix_socket
                         create_unix_stream_socket
                         create_unix_datagram_socket
                 );
  
  sub create_unix_socket {
      my ($path, $mode, $opts) = @_;
  
      $opts //= {};
  
      my $old_locale = setlocale(LC_ALL);
  
      my $sock;
  
      setlocale(LC_ALL, "C"); # so that error messages are in English
      # probe the Unix socket first, delete if stale
      {
          $sock = IO::Socket::UNIX->new(
              Type => SOCK_STREAM,
              Peer => $path,
              %$opts,
          );
          my $err = $@ unless $sock;
          if ($sock) {
              die "Some process is already listening on $path, aborting";
          } elsif ($err =~ /^connect: permission denied/i) {
              die "Cannot access $path, aborting";
          } elsif (1) { #$err =~ /^connect: connection refused/i) {
              unlink $path;
          } elsif ($err !~ /^connect: no such file/i) {
              die "Cannot bind to $path: $err";
          }
      }
      setlocale(LC_ALL, $old_locale);
  
      # XXX this is a race condition
  
      # create listening socket now
      $sock = IO::Socket::UNIX->new(
          Type   => SOCK_STREAM,
          Local  => $path,
          Listen => 1,
          %$opts,
      );
      die "Can't create listening Unix socket: $@" unless $sock;
  
      if (defined $mode) {
          warn "Can't chmod $path: $!" unless chmod($mode, $path);
      }
  
      $sock;
  }
  
  sub create_unix_stream_socket {
      my ($path, $mode, $opts) = @_;
      $opts //= {};
      create_unix_socket($path, $mode, {Type=>SOCK_STREAM, %$opts});
  }
  
  sub create_unix_datagram_socket {
      my ($path, $mode, $opts) = @_;
      $opts //= {};
      create_unix_socket($path, $mode, {Type=>SOCK_DGRAM, %$opts});
  }
  
  1;
  # ABSTRACT: Unix domain socket utilities
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  IO::Socket::UNIX::Util - Unix domain socket utilities
  
  =head1 VERSION
  
  This document describes version 0.05 of IO::Socket::UNIX::Util (from Perl distribution IO-Socket-UNIX-Util), released on 2014-12-05.
  
  =head1 FUNCTIONS
  
  =head2 create_unix_socket($path[, $mode, \%opts]) => SOCKET
  
  Create a listening Unix socket (by default with Type SOCK_STREAM) using
  L<IO::SOcket::UNIX>. C<%opts> will be passed to L<IO::Socket::UNIX>.
  
  Die on failure.
  
  This function creates Unix domain socket with the usual way of using
  L<IO::Socket::UNIX> with some extra stuffs: remove stale socket first, show more
  detailed/precise error message, chmod with $mode.
  
  =head2 create_unix_stream_socket($path[, $mode, \%opts]) => SOCKET
  
  Shortcut for:
  
   create_unix_socket($path, $mode, {Type=>SOCK_STREAM, %opts});
  
  which is the default anyway.
  
  =head2 create_unix_datagram_socket($path[, $mode, \%opts]) => SOCKET
  
  Shortcut for:
  
   create_unix_socket($path, $mode, {Type=>SOCK_DGRAM, %opts});
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/IO-Socket-UNIX-Util>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-SHARYANTO-IO-Socket-Utils>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=IO-Socket-UNIX-Util>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
IO_SOCKET_UNIX_UTIL

    $main::fatpacked{"IO/Tty.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'IO_TTY';
  # Documentation at the __END__
  # -*-cperl-*-
  
  package IO::Tty;
  
  use IO::Handle;
  use IO::File;
  use IO::Tty::Constant;
  use Carp;
  
  require POSIX;
  require DynaLoader;
  
  use vars qw(@ISA $VERSION $XS_VERSION $CONFIG $DEBUG);
  
  $VERSION = '1.12';
  $XS_VERSION = "1.12";
  @ISA = qw(IO::Handle);
  
  eval { local $^W = 0; undef local $SIG{__DIE__}; require IO::Stty };
  push @ISA, "IO::Stty" if (not $@);  # if IO::Stty is installed
  
  BOOT_XS: {
      # If I inherit DynaLoader then I inherit AutoLoader and I DON'T WANT TO
      require DynaLoader;
  
      # DynaLoader calls dl_load_flags as a static method.
      *dl_load_flags = DynaLoader->can('dl_load_flags');
  
      do {
  	defined(&bootstrap)
  		? \&bootstrap
  		: \&DynaLoader::bootstrap
      }->(__PACKAGE__);
  }
  
  sub import {
      IO::Tty::Constant->export_to_level(1, @_);
  }
  
  sub open {
      my($tty,$dev,$mode) = @_;
  
      IO::File::open($tty,$dev,$mode) or
  	return undef;
  
      $tty->autoflush;
  
      1;
  }
  
  sub clone_winsize_from {
    my ($self, $fh) = @_;
    croak "Given filehandle is not a tty in clone_winsize_from, called"
      if not POSIX::isatty($fh);  
    return 1 if not POSIX::isatty($self);  # ignored for master ptys
    my $winsize = " "x1024; # preallocate memory
    ioctl($fh, &IO::Tty::Constant::TIOCGWINSZ, $winsize)
      and ioctl($self, &IO::Tty::Constant::TIOCSWINSZ, $winsize)
        and return 1;
    warn "clone_winsize_from: error: $!" if $^W;
    return undef;
  }
  
  # ioctl() doesn't tell us how long the structure is, so we'll have to trim it
  # after TIOCGWINSZ
  my $SIZEOF_WINSIZE = length IO::Tty::pack_winsize(0,0,0,0);
  
  sub get_winsize {
    my $self = shift;
    ioctl($self, IO::Tty::Constant::TIOCGWINSZ(), my $winsize)
      or croak "Cannot TIOCGWINSZ - $!";
    substr($winsize, $SIZEOF_WINSIZE) = "";
    return IO::Tty::unpack_winsize($winsize);
  }
  
  sub set_winsize {
    my $self = shift;
    my $winsize = IO::Tty::pack_winsize(@_);
    ioctl($self, IO::Tty::Constant::TIOCSWINSZ(), $winsize)
      or croak "Cannot TIOCSWINSZ - $!";
  }
  
  sub set_raw($) {
    require POSIX;
    my $self = shift;
    return 1 if not POSIX::isatty($self);
    my $ttyno = fileno($self);
    my $termios = new POSIX::Termios;
    unless ($termios) {
      warn "set_raw: new POSIX::Termios failed: $!";
      return undef;
    }
    unless ($termios->getattr($ttyno)) {
      warn "set_raw: getattr($ttyno) failed: $!";
      return undef;
    }
    $termios->setiflag(0);
    $termios->setoflag(0);
    $termios->setlflag(0);
    $termios->setcc(&POSIX::VMIN, 1);
    $termios->setcc(&POSIX::VTIME, 0);
    unless ($termios->setattr($ttyno, &POSIX::TCSANOW)) {
      warn "set_raw: setattr($ttyno) failed: $!";
      return undef;
    }
    return 1;
  }
  
  
  1;
  
  __END__
  
  =head1 NAME
  
  IO::Tty - Low-level allocate a pseudo-Tty, import constants.
  
  =head1 VERSION
  
  1.12
  
  =head1 SYNOPSIS
  
      use IO::Tty qw(TIOCNOTTY);
      ...
      # use only to import constants, see IO::Pty to create ptys.
  
  =head1 DESCRIPTION
  
  C<IO::Tty> is used internally by C<IO::Pty> to create a pseudo-tty.
  You wouldn't want to use it directly except to import constants, use
  C<IO::Pty>.  For a list of importable constants, see
  L<IO::Tty::Constant>.
  
  Windows is now supported, but ONLY under the Cygwin
  environment, see L<http://sources.redhat.com/cygwin/>.
  
  Please note that pty creation is very system-dependend.  From my
  experience, any modern POSIX system should be fine.  Find below a list
  of systems that C<IO::Tty> should work on.  A more detailed table
  (which is slowly getting out-of-date) is available from the project
  pages document manager at SourceForge
  L<http://sourceforge.net/projects/expectperl/>.
  
  If you have problems on your system and your system is listed in the
  "verified" list, you probably have some non-standard setup, e.g. you
  compiled your Linux-kernel yourself and disabled ptys (bummer!).
  Please ask your friendly sysadmin for help.
  
  If your system is not listed, unpack the latest version of C<IO::Tty>,
  do a C<'perl Makefile.PL; make; make test; uname -a'> and send me
  (F<RGiersig@cpan.org>) the results and I'll see what I can deduce from
  that.  There are chances that it will work right out-of-the-box...
  
  If it's working on your system, please send me a short note with
  details (version number, distribution, etc. 'uname -a' and 'perl -V'
  is a good start; also, the output from "perl Makefile.PL" contains a
  lot of interesting info, so please include that as well) so I can get
  an overview.  Thanks!
  
  
  =head1 VERIFIED SYSTEMS, KNOWN ISSUES
  
  This is a list of systems that C<IO::Tty> seems to work on ('make
  test' passes) with comments about "features":
  
  =over 4
  
  =item * AIX 4.3
  
  Returns EIO instead of EOF when the slave is closed.  Benign.
  
  =item * AIX 5.x
  
  =item * FreeBSD 4.4
  
  EOF on the slave tty is not reported back to the master.
  
  =item * OpenBSD 2.8
  
  The ioctl TIOCSCTTY sometimes fails.  This is also known in
  Tcl/Expect, see http://expect.nist.gov/FAQ.html
  
  EOF on the slave tty is not reported back to the master.
  
  =item * Darwin 7.9.0
  
  =item * HPUX 10.20 & 11.00
  
  EOF on the slave tty is not reported back to the master.
  
  =item * IRIX 6.5
  
  =item * Linux 2.2.x & 2.4.x
  
  Returns EIO instead of EOF when the slave is closed.  Benign.
  
  =item * OSF 4.0
  
  EOF on the slave tty is not reported back to the master.
  
  =item * Solaris 8, 2.7, 2.6
  
  Has the "feature" of returning EOF just once?!
  
  EOF on the slave tty is not reported back to the master.
  
  =item * Windows NT/2k/XP (under Cygwin)
  
  When you send (print) a too long line (>160 chars) to a non-raw pty,
  the call just hangs forever and even alarm() cannot get you out.
  Don't complain to me...
  
  EOF on the slave tty is not reported back to the master.
  
  =item * z/OS
  
  =back
  
  The following systems have not been verified yet for this version, but
  a previous version worked on them:
  
  =over 4
  
  =item * SCO Unix
  
  =item * NetBSD
  
  probably the same as the other *BSDs...
  
  =back
  
  If you have additions to these lists, please mail them to
  E<lt>F<RGiersig@cpan.org>E<gt>.
  
  
  =head1 SEE ALSO
  
  L<IO::Pty>, L<IO::Tty::Constant>
  
  
  =head1 MAILING LISTS
  
  As this module is mainly used by Expect, support for it is available
  via the two Expect mailing lists, expectperl-announce and
  expectperl-discuss, at
  
    http://lists.sourceforge.net/lists/listinfo/expectperl-announce
  
  and
  
    http://lists.sourceforge.net/lists/listinfo/expectperl-discuss
  
  
  =head1 AUTHORS
  
  Originally by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>, based on the
  Ptty module by Nick Ing-Simmons E<lt>F<nik@tiuk.ti.com>E<gt>.
  
  Now maintained and heavily rewritten by Roland Giersig
  E<lt>F<RGiersig@cpan.org>E<gt>.
  
  Contains copyrighted stuff from openssh v3.0p1, authored by Tatu
  Ylonen <ylo@cs.hut.fi>, Markus Friedl and Todd C. Miller
  <Todd.Miller@courtesan.com>.  I also got a lot of inspiration from
  the pty code in Xemacs.
  
  
  =head1 COPYRIGHT
  
  Now all code is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself.
  
  Nevertheless the above AUTHORS retain their copyrights to the various
  parts and want to receive credit if their source code is used.
  See the source for details.
  
  
  =head1 DISCLAIMER
  
  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
  DAMAGE.
  
  In other words: Use at your own risk.  Provided as is.  Your mileage
  may vary.  Read the source, Luke!
  
  And finally, just to be sure:
  
  Any Use of This Product, in Any Manner Whatsoever, Will Increase the
  Amount of Disorder in the Universe. Although No Liability Is Implied
  Herein, the Consumer Is Warned That This Process Will Ultimately Lead
  to the Heat Death of the Universe.
  
  =cut
IO_TTY

    $main::fatpacked{"IPC/Run.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'IPC_RUN';
  package IPC::Run;
  use bytes;
  
  =pod
  
  =head1 NAME
  
  IPC::Run - system() and background procs w/ piping, redirs, ptys (Unix, Win32)
  
  =head1 SYNOPSIS
  
     ## First,a command to run:
        my @cat = qw( cat );
  
     ## Using run() instead of system():
        use IPC::Run qw( run timeout );
  
        run \@cmd, \$in, \$out, \$err, timeout( 10 ) or die "cat: $?"
  
        # Can do I/O to sub refs and filenames, too:
        run \@cmd, '<', "in.txt", \&out, \&err or die "cat: $?"
        run \@cat, '<', "in.txt", '>>', "out.txt", '2>>', "err.txt";
  
  
        # Redirecting using psuedo-terminals instad of pipes.
        run \@cat, '<pty<', \$in,  '>pty>', \$out_and_err;
  
     ## Scripting subprocesses (like Expect):
  
        use IPC::Run qw( start pump finish timeout );
  
        # Incrementally read from / write to scalars. 
        # $in is drained as it is fed to cat's stdin,
        # $out accumulates cat's stdout
        # $err accumulates cat's stderr
        # $h is for "harness".
        my $h = start \@cat, \$in, \$out, \$err, timeout( 10 );
  
        $in .= "some input\n";
        pump $h until $out =~ /input\n/g;
  
        $in .= "some more input\n";
        pump $h until $out =~ /\G.*more input\n/;
  
        $in .= "some final input\n";
        finish $h or die "cat returned $?";
  
        warn $err if $err; 
        print $out;         ## All of cat's output
  
     # Piping between children
        run \@cat, '|', \@gzip;
  
     # Multiple children simultaneously (run() blocks until all
     # children exit, use start() for background execution):
        run \@foo1, '&', \@foo2;
  
     # Calling \&set_up_child in the child before it executes the
     # command (only works on systems with true fork() & exec())
     # exceptions thrown in set_up_child() will be propagated back
     # to the parent and thrown from run().
        run \@cat, \$in, \$out,
           init => \&set_up_child;
  
     # Read from / write to file handles you open and close
        open IN,  '<in.txt'  or die $!;
        open OUT, '>out.txt' or die $!;
        print OUT "preamble\n";
        run \@cat, \*IN, \*OUT or die "cat returned $?";
        print OUT "postamble\n";
        close IN;
        close OUT;
  
     # Create pipes for you to read / write (like IPC::Open2 & 3).
        $h = start
           \@cat,
              '<pipe', \*IN,
              '>pipe', \*OUT,
              '2>pipe', \*ERR 
           or die "cat returned $?";
        print IN "some input\n";
        close IN;
        print <OUT>, <ERR>;
        finish $h;
  
     # Mixing input and output modes
        run \@cat, 'in.txt', \&catch_some_out, \*ERR_LOG );
  
     # Other redirection constructs
        run \@cat, '>&', \$out_and_err;
        run \@cat, '2>&1';
        run \@cat, '0<&3';
        run \@cat, '<&-';
        run \@cat, '3<', \$in3;
        run \@cat, '4>', \$out4;
        # etc.
  
     # Passing options:
        run \@cat, 'in.txt', debug => 1;
  
     # Call this system's shell, returns TRUE on 0 exit code
     # THIS IS THE OPPOSITE SENSE OF system()'s RETURN VALUE
        run "cat a b c" or die "cat returned $?";
  
     # Launch a sub process directly, no shell.  Can't do redirection
     # with this form, it's here to behave like system() with an
     # inverted result.
        $r = run "cat a b c";
  
     # Read from a file in to a scalar
        run io( "filename", 'r', \$recv );
        run io( \*HANDLE,   'r', \$recv );
  
  =head1 DESCRIPTION
  
  IPC::Run allows you to run and interact with child processes using files, pipes,
  and pseudo-ttys.  Both system()-style and scripted usages are supported and
  may be mixed.  Likewise, functional and OO API styles are both supported and
  may be mixed.
  
  Various redirection operators reminiscent of those seen on common Unix and DOS
  command lines are provided.
  
  Before digging in to the details a few LIMITATIONS are important enough
  to be mentioned right up front:
  
  =over
  
  =item Win32 Support
  
  Win32 support is working but B<EXPERIMENTAL>, but does pass all relevant tests
  on NT 4.0.  See L</Win32 LIMITATIONS>.
  
  =item pty Support
  
  If you need pty support, IPC::Run should work well enough most of the
  time, but IO::Pty is being improved, and IPC::Run will be improved to
  use IO::Pty's new features when it is release.
  
  The basic problem is that the pty needs to initialize itself before the
  parent writes to the master pty, or the data written gets lost.  So
  IPC::Run does a sleep(1) in the parent after forking to (hopefully) give
  the child a chance to run.  This is a kludge that works well on non
  heavily loaded systems :(.
  
  ptys are not supported yet under Win32, but will be emulated...
  
  =item Debugging Tip
  
  You may use the environment variable C<IPCRUNDEBUG> to see what's going on
  under the hood:
  
     $ IPCRUNDEBUG=basic   myscript     # prints minimal debugging
     $ IPCRUNDEBUG=data    myscript     # prints all data reads/writes
     $ IPCRUNDEBUG=details myscript     # prints lots of low-level details
     $ IPCRUNDEBUG=gory    myscript     # (Win32 only) prints data moving through
                                        # the helper processes.
  
  =back
  
  We now return you to your regularly scheduled documentation.
  
  =head2 Harnesses
  
  Child processes and I/O handles are gathered in to a harness, then
  started and run until the processing is finished or aborted.
  
  =head2 run() vs. start(); pump(); finish();
  
  There are two modes you can run harnesses in: run() functions as an
  enhanced system(), and start()/pump()/finish() allow for background
  processes and scripted interactions with them.
  
  When using run(), all data to be sent to the harness is set up in
  advance (though one can feed subprocesses input from subroutine refs to
  get around this limitation). The harness is run and all output is
  collected from it, then any child processes are waited for:
  
     run \@cmd, \<<IN, \$out;
     blah
     IN
  
     ## To precompile harnesses and run them later:
     my $h = harness \@cmd, \<<IN, \$out;
     blah
     IN
  
     run $h;
  
  The background and scripting API is provided by start(), pump(), and
  finish(): start() creates a harness if need be (by calling harness())
  and launches any subprocesses, pump() allows you to poll them for
  activity, and finish() then monitors the harnessed activities until they
  complete.
  
     ## Build the harness, open all pipes, and launch the subprocesses
     my $h = start \@cat, \$in, \$out;
     $in = "first input\n";
  
     ## Now do I/O.  start() does no I/O.
     pump $h while length $in;  ## Wait for all input to go
  
     ## Now do some more I/O.
     $in = "second input\n";
     pump $h until $out =~ /second input/;
  
     ## Clean up
     finish $h or die "cat returned $?";
  
  You can optionally compile the harness with harness() prior to
  start()ing or run()ing, and you may omit start() between harness() and
  pump().  You might want to do these things if you compile your harnesses
  ahead of time.
  
  =head2 Using regexps to match output
  
  As shown in most of the scripting examples, the read-to-scalar facility
  for gathering subcommand's output is often used with regular expressions
  to detect stopping points.  This is because subcommand output often
  arrives in dribbles and drabs, often only a character or line at a time.
  This output is input for the main program and piles up in variables like
  the C<$out> and C<$err> in our examples.
  
  Regular expressions can be used to wait for appropriate output in
  several ways.  The C<cat> example in the previous section demonstrates
  how to pump() until some string appears in the output.  Here's an
  example that uses C<smb> to fetch files from a remote server:
  
     $h = harness \@smbclient, \$in, \$out;
  
     $in = "cd /src\n";
     $h->pump until $out =~ /^smb.*> \Z/m;
     die "error cding to /src:\n$out" if $out =~ "ERR";
     $out = '';
  
     $in = "mget *\n";
     $h->pump until $out =~ /^smb.*> \Z/m;
     die "error retrieving files:\n$out" if $out =~ "ERR";
  
     $in = "quit\n";
     $h->finish;
  
  Notice that we carefully clear $out after the first command/response
  cycle? That's because IPC::Run does not delete $out when we continue,
  and we don't want to trip over the old output in the second
  command/response cycle.
  
  Say you want to accumulate all the output in $out and analyze it
  afterwards.  Perl offers incremental regular expression matching using
  the C<m//gc> and pattern matching idiom and the C<\G> assertion.
  IPC::Run is careful not to disturb the current C<pos()> value for
  scalars it appends data to, so we could modify the above so as not to
  destroy $out by adding a couple of C</gc> modifiers.  The C</g> keeps us
  from tripping over the previous prompt and the C</c> keeps us from
  resetting the prior match position if the expected prompt doesn't
  materialize immediately:
  
     $h = harness \@smbclient, \$in, \$out;
  
     $in = "cd /src\n";
     $h->pump until $out =~ /^smb.*> \Z/mgc;
     die "error cding to /src:\n$out" if $out =~ "ERR";
  
     $in = "mget *\n";
     $h->pump until $out =~ /^smb.*> \Z/mgc;
     die "error retrieving files:\n$out" if $out =~ "ERR";
  
     $in = "quit\n";
     $h->finish;
  
     analyze( $out );
  
  When using this technique, you may want to preallocate $out to have
  plenty of memory or you may find that the act of growing $out each time
  new input arrives causes an C<O(length($out)^2)> slowdown as $out grows.
  Say we expect no more than 10,000 characters of input at the most.  To
  preallocate memory to $out, do something like:
  
     my $out = "x" x 10_000;
     $out = "";
  
  C<perl> will allocate at least 10,000 characters' worth of space, then
  mark the $out as having 0 length without freeing all that yummy RAM.
  
  =head2 Timeouts and Timers
  
  More than likely, you don't want your subprocesses to run forever, and
  sometimes it's nice to know that they're going a little slowly.
  Timeouts throw exceptions after a some time has elapsed, timers merely
  cause pump() to return after some time has elapsed.  Neither is
  reset/restarted automatically.
  
  Timeout objects are created by calling timeout( $interval ) and passing
  the result to run(), start() or harness().  The timeout period starts
  ticking just after all the child processes have been fork()ed or
  spawn()ed, and are polled for expiration in run(), pump() and finish().
  If/when they expire, an exception is thrown.  This is typically useful
  to keep a subprocess from taking too long.
  
  If a timeout occurs in run(), all child processes will be terminated and
  all file/pipe/ptty descriptors opened by run() will be closed.  File
  descriptors opened by the parent process and passed in to run() are not
  closed in this event.
  
  If a timeout occurs in pump(), pump_nb(), or finish(), it's up to you to
  decide whether to kill_kill() all the children or to implement some more
  graceful fallback.  No I/O will be closed in pump(), pump_nb() or
  finish() by such an exception (though I/O is often closed down in those
  routines during the natural course of events).
  
  Often an exception is too harsh.  timer( $interval ) creates timer
  objects that merely prevent pump() from blocking forever.  This can be
  useful for detecting stalled I/O or printing a soothing message or "."
  to pacify an anxious user.
  
  Timeouts and timers can both be restarted at any time using the timer's
  start() method (this is not the start() that launches subprocesses).  To
  restart a timer, you need to keep a reference to the timer:
  
     ## Start with a nice long timeout to let smbclient connect.  If
     ## pump or finish take too long, an exception will be thrown.
  
   my $h;
   eval {
     $h = harness \@smbclient, \$in, \$out, \$err, ( my $t = timeout 30 );
     sleep 11;  # No effect: timer not running yet
  
     start $h;
     $in = "cd /src\n";
     pump $h until ! length $in;
  
     $in = "ls\n";
     ## Now use a short timeout, since this should be faster
     $t->start( 5 );
     pump $h until ! length $in;
  
     $t->start( 10 );  ## Give smbclient a little while to shut down.
     $h->finish;
   };
   if ( $@ ) {
     my $x = $@;    ## Preserve $@ in case another exception occurs
     $h->kill_kill; ## kill it gently, then brutally if need be, or just
                     ## brutally on Win32.
     die $x;
   }
  
  Timeouts and timers are I<not> checked once the subprocesses are shut
  down; they will not expire in the interval between the last valid
  process and when IPC::Run scoops up the processes' result codes, for
  instance.
  
  =head2 Spawning synchronization, child exception propagation
  
  start() pauses the parent until the child executes the command or CODE
  reference and propagates any exceptions thrown (including exec()
  failure) back to the parent.  This has several pleasant effects: any
  exceptions thrown in the child, including exec() failure, come flying
  out of start() or run() as though they had occurred in the parent.
  
  This includes exceptions your code thrown from init subs.  In this
  example:
  
     eval {
        run \@cmd, init => sub { die "blast it! foiled again!" };
     };
     print $@;
  
  the exception "blast it! foiled again" will be thrown from the child
  process (preventing the exec()) and printed by the parent.
  
  In situations like
  
     run \@cmd1, "|", \@cmd2, "|", \@cmd3;
  
  @cmd1 will be initted and exec()ed before @cmd2, and @cmd2 before @cmd3.
  This can save time and prevent oddball errors emitted by later commands
  when earlier commands fail to execute.  Note that IPC::Run doesn't start
  any commands unless it can find the executables referenced by all
  commands.  These executables must pass both the C<-f> and C<-x> tests
  described in L<perlfunc>.
  
  Another nice effect is that init() subs can take their time doing things
  and there will be no problems caused by a parent continuing to execute
  before a child's init() routine is complete.  Say the init() routine
  needs to open a socket or a temp file that the parent wants to connect
  to; without this synchronization, the parent will need to implement a
  retry loop to wait for the child to run, since often, the parent gets a
  lot of things done before the child's first timeslice is allocated.
  
  This is also quite necessary for pseudo-tty initialization, which needs
  to take place before the parent writes to the child via pty.  Writes
  that occur before the pty is set up can get lost.
  
  A final, minor, nicety is that debugging output from the child will be
  emitted before the parent continues on, making for much clearer debugging
  output in complex situations.
  
  The only drawback I can conceive of is that the parent can't continue to
  operate while the child is being initted.  If this ever becomes a
  problem in the field, we can implement an option to avoid this behavior,
  but I don't expect it to.
  
  B<Win32>: executing CODE references isn't supported on Win32, see
  L</Win32 LIMITATIONS> for details.
  
  =head2 Syntax
  
  run(), start(), and harness() can all take a harness specification
  as input.  A harness specification is either a single string to be passed
  to the systems' shell:
  
     run "echo 'hi there'";
  
  or a list of commands, io operations, and/or timers/timeouts to execute.
  Consecutive commands must be separated by a pipe operator '|' or an '&'.
  External commands are passed in as array references, and, on systems
  supporting fork(), Perl code may be passed in as subs:
  
     run \@cmd;
     run \@cmd1, '|', \@cmd2;
     run \@cmd1, '&', \@cmd2;
     run \&sub1;
     run \&sub1, '|', \&sub2;
     run \&sub1, '&', \&sub2;
  
  '|' pipes the stdout of \@cmd1 the stdin of \@cmd2, just like a
  shell pipe.  '&' does not.  Child processes to the right of a '&'
  will have their stdin closed unless it's redirected-to.
  
  L<IPC::Run::IO> objects may be passed in as well, whether or not
  child processes are also specified:
  
     run io( "infile", ">", \$in ), io( "outfile", "<", \$in );
        
  as can L<IPC::Run::Timer> objects:
  
     run \@cmd, io( "outfile", "<", \$in ), timeout( 10 );
  
  Commands may be followed by scalar, sub, or i/o handle references for
  redirecting
  child process input & output:
  
     run \@cmd,  \undef,            \$out;
     run \@cmd,  \$in,              \$out;
     run \@cmd1, \&in, '|', \@cmd2, \*OUT;
     run \@cmd1, \*IN, '|', \@cmd2, \&out;
  
  This is known as succinct redirection syntax, since run(), start()
  and harness(), figure out which file descriptor to redirect and how.
  File descriptor 0 is presumed to be an input for
  the child process, all others are outputs.  The assumed file
  descriptor always starts at 0, unless the command is being piped to,
  in which case it starts at 1.
  
  To be explicit about your redirects, or if you need to do more complex
  things, there's also a redirection operator syntax:
  
     run \@cmd, '<', \undef, '>',  \$out;
     run \@cmd, '<', \undef, '>&', \$out_and_err;
     run(
        \@cmd1,
           '<', \$in,
        '|', \@cmd2,
           \$out
     );
  
  Operator syntax is required if you need to do something other than simple
  redirection to/from scalars or subs, like duping or closing file descriptors
  or redirecting to/from a named file.  The operators are covered in detail
  below.
  
  After each \@cmd (or \&foo), parsing begins in succinct mode and toggles to
  operator syntax mode when an operator (ie plain scalar, not a ref) is seen.
  Once in
  operator syntax mode, parsing only reverts to succinct mode when a '|' or
  '&' is seen.
  
  In succinct mode, each parameter after the \@cmd specifies what to
  do with the next highest file descriptor. These File descriptor start
  with 0 (stdin) unless stdin is being piped to (C<'|', \@cmd>), in which
  case they start with 1 (stdout).  Currently, being on the left of
  a pipe (C<\@cmd, \$out, \$err, '|'>) does I<not> cause stdout to be
  skipped, though this may change since it's not as DWIMerly as it
  could be.  Only stdin is assumed to be an
  input in succinct mode, all others are assumed to be outputs.
  
  If no piping or redirection is specified for a child, it will inherit
  the parent's open file handles as dictated by your system's
  close-on-exec behavior and the $^F flag, except that processes after a
  '&' will not inherit the parent's stdin. Also note that $^F does not
  affect file descriptors obtained via POSIX, since it only applies to
  full-fledged Perl file handles.  Such processes will have their stdin
  closed unless it has been redirected-to.
  
  If you want to close a child processes stdin, you may do any of:
  
     run \@cmd, \undef;
     run \@cmd, \"";
     run \@cmd, '<&-';
     run \@cmd, '0<&-';
  
  Redirection is done by placing redirection specifications immediately 
  after a command or child subroutine:
  
     run \@cmd1,      \$in, '|', \@cmd2,      \$out;
     run \@cmd1, '<', \$in, '|', \@cmd2, '>', \$out;
  
  If you omit the redirection operators, descriptors are counted
  starting at 0.  Descriptor 0 is assumed to be input, all others
  are outputs.  A leading '|' consumes descriptor 0, so this
  works as expected.
  
     run \@cmd1, \$in, '|', \@cmd2, \$out;
     
  The parameter following a redirection operator can be a scalar ref,
  a subroutine ref, a file name, an open filehandle, or a closed
  filehandle.
  
  If it's a scalar ref, the child reads input from or sends output to
  that variable:
  
     $in = "Hello World.\n";
     run \@cat, \$in, \$out;
     print $out;
  
  Scalars used in incremental (start()/pump()/finish()) applications are treated
  as queues: input is removed from input scalers, resulting in them dwindling
  to '', and output is appended to output scalars.  This is not true of 
  harnesses run() in batch mode.
  
  It's usually wise to append new input to be sent to the child to the input
  queue, and you'll often want to zap output queues to '' before pumping.
  
     $h = start \@cat, \$in;
     $in = "line 1\n";
     pump $h;
     $in .= "line 2\n";
     pump $h;
     $in .= "line 3\n";
     finish $h;
  
  The final call to finish() must be there: it allows the child process(es)
  to run to completion and waits for their exit values.
  
  =head1 OBSTINATE CHILDREN
  
  Interactive applications are usually optimized for human use.  This
  can help or hinder trying to interact with them through modules like
  IPC::Run.  Frequently, programs alter their behavior when they detect
  that stdin, stdout, or stderr are not connected to a tty, assuming that
  they are being run in batch mode.  Whether this helps or hurts depends
  on which optimizations change.  And there's often no way of telling
  what a program does in these areas other than trial and error and,
  occasionally, reading the source.  This includes different versions
  and implementations of the same program.
  
  All hope is not lost, however.  Most programs behave in reasonably
  tractable manners, once you figure out what it's trying to do.
  
  Here are some of the issues you might need to be aware of.
  
  =over
  
  =item *
  
  fflush()ing stdout and stderr
  
  This lets the user see stdout and stderr immediately.  Many programs
  undo this optimization if stdout is not a tty, making them harder to
  manage by things like IPC::Run.
  
  Many programs decline to fflush stdout or stderr if they do not
  detect a tty there.  Some ftp commands do this, for instance.
  
  If this happens to you, look for a way to force interactive behavior,
  like a command line switch or command.  If you can't, you will
  need to use a pseudo terminal ('<pty<' and '>pty>').
  
  =item *
  
  false prompts
  
  Interactive programs generally do not guarantee that output from user
  commands won't contain a prompt string.  For example, your shell prompt
  might be a '$', and a file named '$' might be the only file in a directory
  listing.
  
  This can make it hard to guarantee that your output parser won't be fooled
  into early termination of results.
  
  To help work around this, you can see if the program can alter it's 
  prompt, and use something you feel is never going to occur in actual
  practice.
  
  You should also look for your prompt to be the only thing on a line:
  
     pump $h until $out =~ /^<SILLYPROMPT>\s?\z/m;
  
  (use C<(?!\n)\Z> in place of C<\z> on older perls).
  
  You can also take the approach that IPC::ChildSafe takes and emit a
  command with known output after each 'real' command you issue, then
  look for this known output.  See new_appender() and new_chunker() for
  filters that can help with this task.
  
  If it's not convenient or possibly to alter a prompt or use a known
  command/response pair, you might need to autodetect the prompt in case
  the local version of the child program is different then the one
  you tested with, or if the user has control over the look & feel of
  the prompt.
  
  =item *
  
  Refusing to accept input unless stdin is a tty.
  
  Some programs, for security reasons, will only accept certain types
  of input from a tty.  su, notable, will not prompt for a password unless
  it's connected to a tty.
  
  If this is your situation, use a pseudo terminal ('<pty<' and '>pty>').
  
  =item *
  
  Not prompting unless connected to a tty.
  
  Some programs don't prompt unless stdin or stdout is a tty.  See if you can
  turn prompting back on.  If not, see if you can come up with a command that
  you can issue after every real command and look for it's output, as
  IPC::ChildSafe does.   There are two filters included with IPC::Run that
  can help with doing this: appender and chunker (see new_appender() and
  new_chunker()).
  
  =item *
  
  Different output format when not connected to a tty.
  
  Some commands alter their formats to ease machine parsability when they
  aren't connected to a pipe.  This is actually good, but can be surprising.
  
  =back
  
  =head1 PSEUDO TERMINALS
  
  On systems providing pseudo terminals under /dev, IPC::Run can use IO::Pty
  (available on CPAN) to provide a terminal environment to subprocesses.
  This is necessary when the subprocess really wants to think it's connected
  to a real terminal.
  
  =head2 CAVEATS
  
  Psuedo-terminals are not pipes, though they are similar.  Here are some
  differences to watch out for.
  
  =over
  
  =item Echoing
  
  Sending to stdin will cause an echo on stdout, which occurs before each
  line is passed to the child program.  There is currently no way to
  disable this, although the child process can and should disable it for
  things like passwords.
  
  =item Shutdown
  
  IPC::Run cannot close a pty until all output has been collected.  This
  means that it is not possible to send an EOF to stdin by half-closing
  the pty, as we can when using a pipe to stdin.
  
  This means that you need to send the child process an exit command or
  signal, or run() / finish() will time out.  Be careful not to expect a
  prompt after sending the exit command.
  
  =item Command line editing
  
  Some subprocesses, notable shells that depend on the user's prompt
  settings, will reissue the prompt plus the command line input so far
  once for each character.
  
  =item '>pty>' means '&>pty>', not '1>pty>'
  
  The pseudo terminal redirects both stdout and stderr unless you specify
  a file descriptor.  If you want to grab stderr separately, do this:
  
     start \@cmd, '<pty<', \$in, '>pty>', \$out, '2>', \$err;
  
  =item stdin, stdout, and stderr not inherited
  
  Child processes harnessed to a pseudo terminal have their stdin, stdout,
  and stderr completely closed before any redirection operators take
  effect.  This casts of the bonds of the controlling terminal.  This is
  not done when using pipes.
  
  Right now, this affects all children in a harness that has a pty in use,
  even if that pty would not affect a particular child.  That's a bug and
  will be fixed.  Until it is, it's best not to mix-and-match children.
  
  =back
  
  =head2 Redirection Operators
  
     Operator       SHNP   Description
     ========       ====   ===========
     <, N<          SHN    Redirects input to a child's fd N (0 assumed)
  
     >, N>          SHN    Redirects output from a child's fd N (1 assumed)
     >>, N>>        SHN    Like '>', but appends to scalars or named files
     >&, &>         SHN    Redirects stdout & stderr from a child process
  
     <pty, N<pty    S      Like '<', but uses a pseudo-tty instead of a pipe
     >pty, N>pty    S      Like '>', but uses a pseudo-tty instead of a pipe
  
     N<&M                  Dups input fd N to input fd M
     M>&N                  Dups output fd N to input fd M
     N<&-                  Closes fd N
  
     <pipe, N<pipe     P   Pipe opens H for caller to read, write, close.
     >pipe, N>pipe     P   Pipe opens H for caller to read, write, close.
                        
  'N' and 'M' are placeholders for integer file descriptor numbers.  The
  terms 'input' and 'output' are from the child process's perspective.
  
  The SHNP field indicates what parameters an operator can take:
  
     S: \$scalar or \&function references.  Filters may be used with
        these operators (and only these).
     H: \*HANDLE or IO::Handle for caller to open, and close
     N: "file name".
     P: \*HANDLE opened by IPC::Run as the parent end of a pipe, but read
        and written to and closed by the caller (like IPC::Open3).
  
  =over
  
  =item Redirecting input: [n]<, [n]<pipe
  
  You can input the child reads on file descriptor number n to come from a
  scalar variable, subroutine, file handle, or a named file.  If stdin
  is not redirected, the parent's stdin is inherited.
  
     run \@cat, \undef          ## Closes child's stdin immediately
        or die "cat returned $?"; 
  
     run \@cat, \$in;
  
     run \@cat, \<<TOHERE;
     blah
     TOHERE
  
     run \@cat, \&input;       ## Calls &input, feeding data returned
                                ## to child's.  Closes child's stdin
                                ## when undef is returned.
  
  Redirecting from named files requires you to use the input
  redirection operator:
  
     run \@cat, '<.profile';
     run \@cat, '<', '.profile';
  
     open IN, "<foo";
     run \@cat, \*IN;
     run \@cat, *IN{IO};
  
  The form used second example here is the safest,
  since filenames like "0" and "&more\n" won't confuse &run:
  
  You can't do either of
  
     run \@a, *IN;      ## INVALID
     run \@a, '<', *IN; ## BUGGY: Reads file named like "*main::A"
     
  because perl passes a scalar containing a string that
  looks like "*main::A" to &run, and &run can't tell the difference
  between that and a redirection operator or a file name.  &run guarantees
  that any scalar you pass after a redirection operator is a file name.
  
  If your child process will take input from file descriptors other
  than 0 (stdin), you can use a redirection operator with any of the
  valid input forms (scalar ref, sub ref, etc.):
  
     run \@cat, '3<', \$in3;
  
  When redirecting input from a scalar ref, the scalar ref is
  used as a queue.  This allows you to use &harness and pump() to
  feed incremental bits of input to a coprocess.  See L</Coprocesses>
  below for more information.
  
  The <pipe operator opens the write half of a pipe on the filehandle
  glob reference it takes as an argument:
  
     $h = start \@cat, '<pipe', \*IN;
     print IN "hello world\n";
     pump $h;
     close IN;
     finish $h;
  
  Unlike the other '<' operators, IPC::Run does nothing further with
  it: you are responsible for it.  The previous example is functionally
  equivalent to:
  
     pipe( \*R, \*IN ) or die $!;
     $h = start \@cat, '<', \*IN;
     print IN "hello world\n";
     pump $h;
     close IN;
     finish $h;
  
  This is like the behavior of IPC::Open2 and IPC::Open3.
  
  B<Win32>: The handle returned is actually a socket handle, so you can
  use select() on it.
  
  =item Redirecting output: [n]>, [n]>>, [n]>&[m], [n]>pipe
  
  You can redirect any output the child emits
  to a scalar variable, subroutine, file handle, or file name.  You
  can have &run truncate or append to named files or scalars.  If
  you are redirecting stdin as well, or if the command is on the
  receiving end of a pipeline ('|'), you can omit the redirection
  operator:
  
     @ls = ( 'ls' );
     run \@ls, \undef, \$out
        or die "ls returned $?"; 
  
     run \@ls, \undef, \&out;  ## Calls &out each time some output
                                ## is received from the child's 
                                ## when undef is returned.
  
     run \@ls, \undef, '2>ls.err';
     run \@ls, '2>', 'ls.err';
  
  The two parameter form guarantees that the filename
  will not be interpreted as a redirection operator:
  
     run \@ls, '>', "&more";
     run \@ls, '2>', ">foo\n";
  
  You can pass file handles you've opened for writing:
  
     open( *OUT, ">out.txt" );
     open( *ERR, ">err.txt" );
     run \@cat, \*OUT, \*ERR;
  
  Passing a scalar reference and a code reference requires a little
  more work, but allows you to capture all of the output in a scalar
  or each piece of output by a callback:
  
  These two do the same things:
  
     run( [ 'ls' ], '2>', sub { $err_out .= $_[0] } );
  
  does the same basic thing as:
  
     run( [ 'ls' ], '2>', \$err_out );
  
  The subroutine will be called each time some data is read from the child.
  
  The >pipe operator is different in concept than the other '>' operators,
  although it's syntax is similar:
  
     $h = start \@cat, $in, '>pipe', \*OUT, '2>pipe', \*ERR;
     $in = "hello world\n";
     finish $h;
     print <OUT>;
     print <ERR>;
     close OUT;
     close ERR;
  
  causes two pipe to be created, with one end attached to cat's stdout
  and stderr, respectively, and the other left open on OUT and ERR, so
  that the script can manually
  read(), select(), etc. on them.  This is like
  the behavior of IPC::Open2 and IPC::Open3.
  
  B<Win32>: The handle returned is actually a socket handle, so you can
  use select() on it.
  
  =item Duplicating output descriptors: >&m, n>&m
  
  This duplicates output descriptor number n (default is 1 if n is omitted)
  from descriptor number m.
  
  =item Duplicating input descriptors: <&m, n<&m
  
  This duplicates input descriptor number n (default is 0 if n is omitted)
  from descriptor number m
  
  =item Closing descriptors: <&-, 3<&-
  
  This closes descriptor number n (default is 0 if n is omitted).  The
  following commands are equivalent:
  
     run \@cmd, \undef;
     run \@cmd, '<&-';
     run \@cmd, '<in.txt', '<&-';
  
  Doing
  
     run \@cmd, \$in, '<&-';    ## SIGPIPE recipe.
  
  is dangerous: the parent will get a SIGPIPE if $in is not empty.
  
  =item Redirecting both stdout and stderr: &>, >&, &>pipe, >pipe&
  
  The following pairs of commands are equivalent:
  
     run \@cmd, '>&', \$out;       run \@cmd, '>', \$out,     '2>&1';
     run \@cmd, '>&', 'out.txt';   run \@cmd, '>', 'out.txt', '2>&1';
  
  etc.
  
  File descriptor numbers are not permitted to the left or the right of
  these operators, and the '&' may occur on either end of the operator.
  
  The '&>pipe' and '>pipe&' variants behave like the '>pipe' operator, except
  that both stdout and stderr write to the created pipe.
  
  =item Redirection Filters
  
  Both input redirections and output redirections that use scalars or
  subs as endpoints may have an arbitrary number of filter subs placed
  between them and the child process.  This is useful if you want to
  receive output in chunks, or if you want to massage each chunk of
  data sent to the child.  To use this feature, you must use operator
  syntax:
  
     run(
        \@cmd
           '<', \&in_filter_2, \&in_filter_1, $in,
           '>', \&out_filter_1, \&in_filter_2, $out,
     );
  
  This capability is not provided for IO handles or named files.
  
  Two filters are provided by IPC::Run: appender and chunker.  Because
  these may take an argument, you need to use the constructor functions
  new_appender() and new_chunker() rather than using \& syntax:
  
     run(
        \@cmd
           '<', new_appender( "\n" ), $in,
           '>', new_chunker, $out,
     );
  
  =back
  
  =head2 Just doing I/O
  
  If you just want to do I/O to a handle or file you open yourself, you
  may specify a filehandle or filename instead of a command in the harness
  specification:
  
     run io( "filename", '>', \$recv );
  
     $h = start io( $io, '>', \$recv );
  
     $h = harness \@cmd, '&', io( "file", '<', \$send );
  
  =head2 Options
  
  Options are passed in as name/value pairs:
  
     run \@cat, \$in, debug => 1;
  
  If you pass the debug option, you may want to pass it in first, so you
  can see what parsing is going on:
  
     run debug => 1, \@cat, \$in;
  
  =over
  
  =item debug
  
  Enables debugging output in parent and child.  Debugging info is emitted
  to the STDERR that was present when IPC::Run was first C<use()>ed (it's
  C<dup()>ed out of the way so that it can be redirected in children without
  having debugging output emitted on it).
  
  =back
  
  =head1 RETURN VALUES
  
  harness() and start() return a reference to an IPC::Run harness.  This is
  blessed in to the IPC::Run package, so you may make later calls to
  functions as members if you like:
  
     $h = harness( ... );
     $h->start;
     $h->pump;
     $h->finish;
  
     $h = start( .... );
     $h->pump;
     ...
  
  Of course, using method call syntax lets you deal with any IPC::Run
  subclasses that might crop up, but don't hold your breath waiting for
  any.
  
  run() and finish() return TRUE when all subcommands exit with a 0 result
  code.  B<This is the opposite of perl's system() command>.
  
  All routines raise exceptions (via die()) when error conditions are
  recognized.  A non-zero command result is not treated as an error
  condition, since some commands are tests whose results are reported 
  in their exit codes.
  
  =head1 ROUTINES
  
  =over
  
  =cut
  
  use strict;
  use Exporter ();
  use vars qw{$VERSION @ISA @FILTER_IMP @FILTERS @API @EXPORT_OK %EXPORT_TAGS};
  BEGIN {
  	$VERSION = '0.94';
  	@ISA     = qw{ Exporter };
  
  	## We use @EXPORT for the end user's convenience: there's only one function
  	## exported, it's homonymous with the module, it's an unusual name, and
  	## it can be suppressed by "use IPC::Run ();".
  	@FILTER_IMP = qw( input_avail get_more_input );
  	@FILTERS    = qw(
  		new_appender
  		new_chunker
  		new_string_source
  		new_string_sink
  	);
  	@API        = qw(
  		run
  		harness start pump pumpable finish
  		signal kill_kill reap_nb
  		io timer timeout
  		close_terminal
  		binary
  	);
  	@EXPORT_OK = ( @API, @FILTER_IMP, @FILTERS, qw( Win32_MODE ) );
  	%EXPORT_TAGS = (
  		'filter_imp' => \@FILTER_IMP,
  		'all'        => \@EXPORT_OK,
  		'filters'    => \@FILTERS,
  		'api'        => \@API,
  	);
  
  }
  
  use strict;
  use IPC::Run::Debug;
  use Exporter;
  use Fcntl;
  use POSIX ();
  BEGIN { if ($] < 5.008) { require Symbol; } }
  use Carp;
  use File::Spec ();
  use IO::Handle;
  require IPC::Run::IO;
  require IPC::Run::Timer;
  use UNIVERSAL ();
  
  use constant Win32_MODE => $^O =~ /os2|Win32/i;
  
  BEGIN {
     if ( Win32_MODE ) {
        eval "use IPC::Run::Win32Helper; 1;"
           or ( $@ && die ) or die "$!";
     }
     else {
        eval "use File::Basename; 1;" or die $!;
     }
  }
  
  sub input_avail();
  sub get_more_input();
  
  ###############################################################################
  
  ##
  ## Error constants, not too locale-dependant
  use vars  qw( $_EIO $_EAGAIN );
  use Errno qw(   EIO   EAGAIN );
  BEGIN {
    local $!;
    $! = EIO;    $_EIO    = qr/^$!/;
    $! = EAGAIN; $_EAGAIN = qr/^$!/;
  }
  
  ##
  ## State machine states, set in $self->{STATE}
  ##
  ## These must be in ascending order numerically
  ##
  sub _newed()    {0}
  sub _harnessed(){1}
  sub _finished() {2}   ## _finished behave almost exactly like _harnessed
  sub _started()  {3}
  
  ##
  ## Which fds have been opened in the parent.  This may have extra fds, since
  ## we aren't all that rigorous about closing these off, but that's ok.  This
  ## is used on Unixish OSs to close all fds in the child that aren't needed
  ## by that particular child.
  my %fds;
  
  ## There's a bit of hackery going on here.
  ##
  ## We want to have any code anywhere be able to emit
  ## debugging statements without knowing what harness the code is
  ## being called in/from, since we'd need to pass a harness around to
  ## everything.
  ##
  ## Thus, $cur_self was born.
  
  use vars qw( $cur_self );
  
  sub _debug_fd {
     return fileno STDERR unless defined $cur_self;
  
     if ( _debugging && ! defined $cur_self->{DEBUG_FD} ) {
        my $fd = select STDERR; $| = 1; select $fd;
        $cur_self->{DEBUG_FD} = POSIX::dup fileno STDERR;
        _debug( "debugging fd is $cur_self->{DEBUG_FD}\n" )
           if _debugging_details;
     }
  
     return fileno STDERR unless defined $cur_self->{DEBUG_FD};
  
     return $cur_self->{DEBUG_FD}
  }
  
  sub DESTROY {
     ## We absolutely do not want to do anything else here.  We are likely
     ## to be in a child process and we don't want to do things like kill_kill
     ## ourself or cause other destruction.
     my IPC::Run $self = shift;
     POSIX::close $self->{DEBUG_FD} if defined $self->{DEBUG_FD};
     $self->{DEBUG_FD} = undef;
  }
  
  ##
  ## Support routines (NOT METHODS)
  ##
  my %cmd_cache;
  
  sub _search_path {
     my ( $cmd_name ) = @_;
     if ( File::Spec->file_name_is_absolute( $cmd_name ) && -x $cmd_name) {
        _debug "'", $cmd_name, "' is absolute"
           if _debugging_details;
        return $cmd_name;
     }
  
     my $dirsep =
        ( Win32_MODE
           ? '[/\\\\]'
        : $^O =~ /MacOS/
           ? ':'
        : $^O =~ /VMS/
           ? '[\[\]]'
        : '/'
        );
  
     if ( Win32_MODE
        && ( $cmd_name =~ /$dirsep/ )
  #      && ( $cmd_name !~ /\..+$/ )  ## Only run if cmd_name has no extension?
        && ( $cmd_name !~ m!\.[^\\/\.]+$! )
      ) {
  
        _debug "no extension(.exe), checking ENV{PATHEXT}"  if _debugging;
        for ( split /;/, $ENV{PATHEXT} || ".COM;.BAT;.EXE" ) {
           my $name = "$cmd_name$_";
           $cmd_name = $name, last if -f $name && -x _;
        }
        _debug "cmd_name is now '$cmd_name'"  if _debugging;
     }
  
     if ( $cmd_name =~ /($dirsep)/ ) {
        _debug "'$cmd_name' contains '$1'"  if _debugging;
        croak "file not found: $cmd_name"    unless -e $cmd_name;
        croak "not a file: $cmd_name"        unless -f $cmd_name;
        croak "permission denied: $cmd_name" unless -x $cmd_name;
        return $cmd_name;
     }
  
     if ( exists $cmd_cache{$cmd_name} ) {
        _debug "'$cmd_name' found in cache: '$cmd_cache{$cmd_name}'"
           if _debugging;
        return $cmd_cache{$cmd_name} if -x $cmd_cache{$cmd_name};
        _debug "'$cmd_cache{$cmd_name}' no longer executable, searching..."
           if _debugging;
        delete $cmd_cache{$cmd_name};
     }
  
     my @searched_in;
  
     ## This next bit is Unix/Win32 specific, unfortunately.
     ## There's been some conversation about extending File::Spec to provide
     ## a universal interface to PATH, but I haven't seen it yet.
        my $re = Win32_MODE ? qr/;/ : qr/:/;
  
  LOOP:
     for ( split( $re, $ENV{PATH} || '', -1 ) ) {
        $_ = "." unless length $_;
        push @searched_in, $_;
  
        my $prospect = File::Spec->catfile( $_, $cmd_name );
        my @prospects;
  
        @prospects =
           ( Win32_MODE && ! ( -f $prospect && -x _ ) )
              ? map "$prospect$_", split /;/, $ENV{PATHEXT} || ".COM;.BAT;.EXE"
              : ( $prospect );
  
        for my $found ( @prospects ) {
           if ( -f $found && -x _ ) {
              $cmd_cache{$cmd_name} = $found;
              last LOOP;
           }
        }
     }
  
     if ( exists $cmd_cache{$cmd_name} ) {
        _debug "'", $cmd_name, "' added to cache: '", $cmd_cache{$cmd_name}, "'"
           if _debugging_details;
        return $cmd_cache{$cmd_name};
     }
  
     croak "Command '$cmd_name' not found in " . join( ", ", @searched_in );
  }
  
  
  sub _empty($) { ! ( defined $_[0] && length $_[0] ) }
  
  ## 'safe' versions of otherwise fun things to do. See also IPC::Run::Win32Helper.
  sub _close {
     confess 'undef' unless defined $_[0];
     my $fd = $_[0] =~ /^\d+$/ ? $_[0] : fileno $_[0];
     my $r = POSIX::close $fd;
     $r = $r ? '' : " ERROR $!";
     delete $fds{$fd};
     _debug "close( $fd ) = " . ( $r || 0 ) if _debugging_details;
  }
  
  sub _dup {
     confess 'undef' unless defined $_[0];
     my $r = POSIX::dup( $_[0] );
     croak "$!: dup( $_[0] )" unless defined $r;
     $r = 0 if $r eq '0 but true';
     _debug "dup( $_[0] ) = $r" if _debugging_details;
     $fds{$r} = 1;
     return $r;
  }
  
  
  sub _dup2_rudely {
     confess 'undef' unless defined $_[0] && defined $_[1];
     my $r = POSIX::dup2( $_[0], $_[1] );
     croak "$!: dup2( $_[0], $_[1] )" unless defined $r;
     $r = 0 if $r eq '0 but true';
     _debug "dup2( $_[0], $_[1] ) = $r" if _debugging_details;
     $fds{$r} = 1;
     return $r;
  }
  
  sub _exec {
     confess 'undef passed' if grep !defined, @_;
  #   exec @_ or croak "$!: exec( " . join( ', ', @_ ) . " )";
     _debug 'exec()ing ', join " ", map "'$_'", @_ if _debugging_details;
  
  #   {
  ## Commented out since we don't call this on Win32.
  #      # This works around the bug where 5.6.1 complains
  #      # "Can't exec ...: No error" after an exec on NT, where
  #      # exec() is simulated and actually returns in Perl's C
  #      # code, though Perl's &exec does not...
  #      no warnings "exec";
  #
  #      # Just in case the no warnings workaround
  #      # stops being a workaround, we don't want
  #      # old values of $! causing spurious strerr()
  #      # messages to appear in the "Can't exec" message
  #      undef $!;
        exec { $_[0] } @_;
  #   }
  #   croak "$!: exec( " . join( ', ', map "'$_'", @_ ) . " )";
      ## Fall through so $! can be reported to parent.
  }
  
  
  sub _sysopen {
     confess 'undef' unless defined $_[0] && defined $_[1];
  _debug sprintf( "O_RDONLY=0x%02x ", O_RDONLY ),
  sprintf( "O_WRONLY=0x%02x ", O_WRONLY ),
  sprintf( "O_RDWR=0x%02x ", O_RDWR ),
  sprintf( "O_TRUNC=0x%02x ", O_TRUNC),
  sprintf( "O_CREAT=0x%02x ", O_CREAT),
  sprintf( "O_APPEND=0x%02x ", O_APPEND),
  if _debugging_details;
     my $r = POSIX::open( $_[0], $_[1], 0644 );
     croak "$!: open( $_[0], ", sprintf( "0x%03x", $_[1] ), " )" unless defined $r;
     _debug "open( $_[0], ", sprintf( "0x%03x", $_[1] ), " ) = $r"
        if _debugging_data;
     $fds{$r} = 1;
     return $r;
  }
  
  sub _pipe {
     ## Normal, blocking write for pipes that we read and the child writes,
     ## since most children expect writes to stdout to block rather than
     ## do a partial write.
     my ( $r, $w ) = POSIX::pipe;
     croak "$!: pipe()" unless defined $r;
     _debug "pipe() = ( $r, $w ) " if _debugging_details;
     $fds{$r} = $fds{$w} = 1;
     return ( $r, $w );
  }
  
  sub _pipe_nb {
     ## For pipes that we write, unblock the write side, so we can fill a buffer
     ## and continue to select().
     ## Contributed by Borislav Deianov <borislav@ensim.com>, with minor
     ## bugfix on fcntl result by me.
     local ( *R, *W );
     my $f = pipe( R, W );
     croak "$!: pipe()" unless defined $f;
     my ( $r, $w ) = ( fileno R, fileno W );
     _debug "pipe_nb pipe() = ( $r, $w )" if _debugging_details;
     unless ( Win32_MODE ) {
        ## POSIX::fcntl doesn't take fd numbers, so gotta use Perl's and
        ## then _dup the originals (which get closed on leaving this block)
        my $fres = fcntl( W, &F_SETFL, O_WRONLY | O_NONBLOCK );
        croak "$!: fcntl( $w, F_SETFL, O_NONBLOCK )" unless $fres;
        _debug "fcntl( $w, F_SETFL, O_NONBLOCK )" if _debugging_details;
     }
     ( $r, $w ) = ( _dup( $r ), _dup( $w ) );
     _debug "pipe_nb() = ( $r, $w )" if _debugging_details;
     return ( $r, $w );
  }
  
  sub _pty {
     require IO::Pty;
     my $pty = IO::Pty->new();
     croak "$!: pty ()" unless $pty;
     $pty->autoflush();
     $pty->blocking( 0 ) or croak "$!: pty->blocking ( 0 )";
     _debug "pty() = ( ", $pty->fileno, ", ", $pty->slave->fileno, " )"
        if _debugging_details;
     $fds{$pty->fileno} = $fds{$pty->slave->fileno} = 1;
     return $pty;
  }
  
  
  sub _read {
     confess 'undef' unless defined $_[0];
     my $s  = '';
     my $r = POSIX::read( $_[0], $s, 10_000 );
     croak "$!: read( $_[0] )" if not($r) and $! != POSIX::EINTR;
     $r ||= 0;
     _debug "read( $_[0] ) = $r chars '$s'" if _debugging_data;
     return $s;
  }
  
  
  ## A METHOD, not a function.
  sub _spawn {
     my IPC::Run $self = shift;
     my ( $kid ) = @_;
  
     _debug "opening sync pipe ", $kid->{PID} if _debugging_details;
     my $sync_reader_fd;
     ( $sync_reader_fd, $self->{SYNC_WRITER_FD} ) = _pipe;
     $kid->{PID} = fork();
     croak "$! during fork" unless defined $kid->{PID};
  
     unless ( $kid->{PID} ) {
        ## _do_kid_and_exit closes sync_reader_fd since it closes all unwanted and
        ## unloved fds.
        $self->_do_kid_and_exit( $kid );
     }
     _debug "fork() = ", $kid->{PID} if _debugging_details;
  
     ## Wait for kid to get to it's exec() and see if it fails.
     _close $self->{SYNC_WRITER_FD};
     my $sync_pulse = _read $sync_reader_fd;
     _close $sync_reader_fd;
  
     if ( ! defined $sync_pulse || length $sync_pulse ) {
        if ( waitpid( $kid->{PID}, 0 ) >= 0 ) {
  	 $kid->{RESULT} = $?;
        }
        else {
  	 $kid->{RESULT} = -1;
        }
        $sync_pulse =
           "error reading synchronization pipe for $kid->{NUM}, pid $kid->{PID}"
  	 unless length $sync_pulse;
        croak $sync_pulse;
     }
     return $kid->{PID};
  
  ## Wait for pty to get set up.  This is a hack until we get synchronous
  ## selects.
  if ( keys %{$self->{PTYS}} && $IO::Pty::VERSION < 0.9 ) {
  _debug "sleeping to give pty a chance to init, will fix when newer IO::Pty arrives.";
  sleep 1;
  }
  }
  
  
  sub _write {
     confess 'undef' unless defined $_[0] && defined $_[1];
     my $r = POSIX::write( $_[0], $_[1], length $_[1] );
     croak "$!: write( $_[0], '$_[1]' )" unless $r;
     _debug "write( $_[0], '$_[1]' ) = $r" if _debugging_data;
     return $r;
  }
  
  =pod
  
  =over
  
  =item run
  
  Run takes a harness or harness specification and runs it, pumping
  all input to the child(ren), closing the input pipes when no more
  input is available, collecting all output that arrives, until the
  pipes delivering output are closed, then waiting for the children to
  exit and reaping their result codes.
  
  You may think of C<run( ... )> as being like 
  
     start( ... )->finish();
  
  , though there is one subtle difference: run() does not
  set \$input_scalars to '' like finish() does.  If an exception is thrown
  from run(), all children will be killed off "gently", and then "annihilated"
  if they do not go gently (in to that dark night. sorry).
  
  If any exceptions are thrown, this does a L</kill_kill> before propagating
  them.
  
  =cut
  
  use vars qw( $in_run );  ## No, not Enron;)
  
  sub run {
     local $in_run = 1;  ## Allow run()-only optimizations.
     my IPC::Run $self = start( @_ );
     my $r = eval {
        $self->{clear_ins} = 0;
        $self->finish;
     };
     if ( $@ ) {
        my $x = $@;
        $self->kill_kill;
        die $x;
     }
     return $r;
  }
  
  =pod
  
  =item signal
  
     ## To send it a specific signal by name ("USR1"):
     signal $h, "USR1";
     $h->signal ( "USR1" );
  
  If $signal is provided and defined, sends a signal to all child processes.  Try
  not to send numeric signals, use C<"KILL"> instead of C<9>, for instance.
  Numeric signals aren't portable.
  
  Throws an exception if $signal is undef.
  
  This will I<not> clean up the harness, C<finish> it if you kill it.
  
  Normally TERM kills a process gracefully (this is what the command line utility
  C<kill> does by default), INT is sent by one of the keys C<^C>, C<Backspace> or
  C<E<lt>DelE<gt>>, and C<QUIT> is used to kill a process and make it coredump.
  
  The C<HUP> signal is often used to get a process to "restart", rereading 
  config files, and C<USR1> and C<USR2> for really application-specific things.
  
  Often, running C<kill -l> (that's a lower case "L") on the command line will
  list the signals present on your operating system.
  
  B<WARNING>: The signal subsystem is not at all portable.  We *may* offer
  to simulate C<TERM> and C<KILL> on some operating systems, submit code
  to me if you want this.
  
  B<WARNING 2>: Up to and including perl v5.6.1, doing almost anything in a
  signal handler could be dangerous.  The most safe code avoids all
  mallocs and system calls, usually by preallocating a flag before
  entering the signal handler, altering the flag's value in the
  handler, and responding to the changed value in the main system:
  
     my $got_usr1 = 0;
     sub usr1_handler { ++$got_signal }
  
     $SIG{USR1} = \&usr1_handler;
     while () { sleep 1; print "GOT IT" while $got_usr1--; }
  
  Even this approach is perilous if ++ and -- aren't atomic on your system
  (I've never heard of this on any modern CPU large enough to run perl).
  
  =cut
  
  sub signal {
     my IPC::Run $self = shift;
  
     local $cur_self = $self;
  
     $self->_kill_kill_kill_pussycat_kill unless @_;
  
     Carp::cluck "Ignoring extra parameters passed to kill()" if @_ > 1;
  
     my ( $signal ) = @_;
     croak "Undefined signal passed to signal" unless defined $signal;
     for ( grep $_->{PID} && ! defined $_->{RESULT}, @{$self->{KIDS}} ) {
        _debug "sending $signal to $_->{PID}"
           if _debugging;
        kill $signal, $_->{PID}
           or _debugging && _debug "$! sending $signal to $_->{PID}";
     }
     
     return;
  }
  
  =pod
  
  =item kill_kill
  
     ## To kill off a process:
     $h->kill_kill;
     kill_kill $h;
  
     ## To specify the grace period other than 30 seconds:
     kill_kill $h, grace => 5;
  
     ## To send QUIT instead of KILL if a process refuses to die:
     kill_kill $h, coup_d_grace => "QUIT";
  
  Sends a C<TERM>, waits for all children to exit for up to 30 seconds, then
  sends a C<KILL> to any that survived the C<TERM>.
  
  Will wait for up to 30 more seconds for the OS to successfully C<KILL> the
  processes.
  
  The 30 seconds may be overridden by setting the C<grace> option, this
  overrides both timers.
  
  The harness is then cleaned up.
  
  The doubled name indicates that this function may kill again and avoids
  colliding with the core Perl C<kill> function.
  
  Returns a 1 if the C<TERM> was sufficient, or a 0 if C<KILL> was 
  required.  Throws an exception if C<KILL> did not permit the children
  to be reaped.
  
  B<NOTE>: The grace period is actually up to 1 second longer than that
  given.  This is because the granularity of C<time> is 1 second.  Let me
  know if you need finer granularity, we can leverage Time::HiRes here.
  
  B<Win32>: Win32 does not know how to send real signals, so C<TERM> is
  a full-force kill on Win32.  Thus all talk of grace periods, etc. do
  not apply to Win32.
  
  =cut
  
  sub kill_kill {
     my IPC::Run $self = shift;
  
     my %options = @_;
     my $grace = $options{grace};
     $grace = 30 unless defined $grace;
     ++$grace; ## Make grace time a _minimum_
  
     my $coup_d_grace = $options{coup_d_grace};
     $coup_d_grace = "KILL" unless defined $coup_d_grace;
  
     delete $options{$_} for qw( grace coup_d_grace );
     Carp::cluck "Ignoring unknown options for kill_kill: ",
         join " ",keys %options
         if keys %options;
  
     $self->signal( "TERM" );
  
     my $quitting_time = time + $grace;
     my $delay = 0.01;
     my $accum_delay;
  
     my $have_killed_before;
  
     while () {
        ## delay first to yield to other processes
        select undef, undef, undef, $delay;
        $accum_delay += $delay;
  
        $self->reap_nb;
        last unless $self->_running_kids;
  
        if ( $accum_delay >= $grace*0.8 ) {
           ## No point in checking until delay has grown some.
           if ( time >= $quitting_time ) {
              if ( ! $have_killed_before ) {
                 $self->signal( $coup_d_grace );
                 $have_killed_before = 1;
                 $quitting_time += $grace;
                 $delay = 0.01;
                 $accum_delay = 0;
                 next;
              }
              croak "Unable to reap all children, even after KILLing them"
           }
        }
  
        $delay *= 2;
        $delay = 0.5 if $delay >= 0.5;
     }
  
     $self->_cleanup;
     return $have_killed_before;
  }
  
  =pod
  
  =item harness
  
  Takes a harness specification and returns a harness.  This harness is
  blessed in to IPC::Run, allowing you to use method call syntax for
  run(), start(), et al if you like.
  
  harness() is provided so that you can pre-build harnesses if you
  would like to, but it's not required..
  
  You may proceed to run(), start() or pump() after calling harness() (pump()
  calls start() if need be).  Alternatively, you may pass your
  harness specification to run() or start() and let them harness() for
  you.  You can't pass harness specifications to pump(), though.
  
  =cut
  
  ##
  ## Notes: I've avoided handling a scalar that doesn't look like an
  ## opcode as a here document or as a filename, though I could DWIM
  ## those.  I'm not sure that the advantages outweigh the danger when
  ## the DWIMer guesses wrong.
  ##
  ## TODO: allow user to spec default shell. Hmm, globally, in the
  ## lexical scope hash, or per instance?  'Course they can do that
  ## now by using a [...] to hold the command.
  ##
  my $harness_id = 0;
  sub harness {
     my $options;
     if ( @_ && ref $_[-1] eq 'HASH' ) {
        $options = pop;
        require Data::Dumper;
        carp "Passing in options as a hash is deprecated:\n", Data::Dumper::Dumper( $options );
     }
  
  #   local $IPC::Run::debug = $options->{debug}
  #      if $options && defined $options->{debug};
  
     my @args;
     if ( @_ == 1 && ! ref $_[0] ) {
        if ( Win32_MODE ) {
           my $command = $ENV{ComSpec} || 'cmd';
           @args = ( [ $command, '/c', win32_parse_cmd_line $_[0] ] );
        }
        else {
           @args = ( [ qw( sh -c ), @_ ] );
        }
     }
     elsif ( @_ > 1 && ! grep ref $_, @_ ) {
        @args = ( [ @_ ] );
     }
     else {
        @args = @_;
     }
  
     my @errs;               # Accum errors, emit them when done.
  
     my $succinct;           # set if no redir ops are required yet.  Cleared
                              # if an op is seen.
  
     my $cur_kid;            # references kid or handle being parsed
  
     my $assumed_fd    = 0;  # fd to assume in succinct mode (no redir ops)
     my $handle_num    = 0;  # 1... is which handle we're parsing
  
     my IPC::Run $self = bless {}, __PACKAGE__;
  
     local $cur_self = $self;
  
     $self->{ID}    = ++$harness_id;
     $self->{IOS}   = [];
     $self->{KIDS}  = [];
     $self->{PIPES} = [];
     $self->{PTYS}  = {};
     $self->{STATE} = _newed;
  
     if ( $options ) {
        $self->{$_} = $options->{$_}
           for keys %$options;
     }
  
     _debug "****** harnessing *****" if _debugging;
  
     my $first_parse;
     local $_;
     my $arg_count = @args;
     while ( @args ) { for ( shift @args ) {
        eval {
           $first_parse = 1;
           _debug(
              "parsing ",
              defined $_
                 ? ref $_ eq 'ARRAY'
                    ? ( '[ ', join( ', ', map "'$_'", @$_ ), ' ]' )
                    : ( ref $_
                       || ( length $_ < 50
                             ? "'$_'"
                             : join( '', "'", substr( $_, 0, 10 ), "...'" )
                          )
                    )
                 : '<undef>'
           ) if _debugging;
  
        REPARSE:
           if ( ref eq 'ARRAY' || ( ! $cur_kid && ref eq 'CODE' ) ) {
              croak "Process control symbol ('|', '&') missing" if $cur_kid;
              croak "Can't spawn a subroutine on Win32"
  	       if Win32_MODE && ref eq "CODE";
              $cur_kid = {
                 TYPE   => 'cmd',
                 VAL    => $_,
                 NUM    => @{$self->{KIDS}} + 1,
                 OPS    => [],
                 PID    => '',
                 RESULT => undef,
              };
              push @{$self->{KIDS}}, $cur_kid;
              $succinct = 1;
           }
  
           elsif ( UNIVERSAL::isa( $_, 'IPC::Run::IO' ) ) {
              push @{$self->{IOS}}, $_;
              $cur_kid = undef;
              $succinct = 1;
           }
           
           elsif ( UNIVERSAL::isa( $_, 'IPC::Run::Timer' ) ) {
              push @{$self->{TIMERS}}, $_;
              $cur_kid = undef;
              $succinct = 1;
           }
           
           elsif ( /^(\d*)>&(\d+)$/ ) {
              croak "No command before '$_'" unless $cur_kid;
              push @{$cur_kid->{OPS}}, {
                 TYPE => 'dup',
                 KFD1 => $2,
                 KFD2 => length $1 ? $1 : 1,
              };
              _debug "redirect operators now required" if _debugging_details;
              $succinct = ! $first_parse;
           }
  
           elsif ( /^(\d*)<&(\d+)$/ ) {
              croak "No command before '$_'" unless $cur_kid;
              push @{$cur_kid->{OPS}}, {
                 TYPE => 'dup',
                 KFD1 => $2,
                 KFD2 => length $1 ? $1 : 0,
              };
              $succinct = ! $first_parse;
           }
  
           elsif ( /^(\d*)<&-$/ ) {
              croak "No command before '$_'" unless $cur_kid;
              push @{$cur_kid->{OPS}}, {
                 TYPE => 'close',
                 KFD  => length $1 ? $1 : 0,
              };
              $succinct = ! $first_parse;
           }
  
           elsif (
                 /^(\d*) (<pipe)()            ()  ()  $/x
              || /^(\d*) (<pty) ((?:\s+\S+)?) (<) ()  $/x
              || /^(\d*) (<)    ()            ()  (.*)$/x
           ) {
              croak "No command before '$_'" unless $cur_kid;
  
              $succinct = ! $first_parse;
  
              my $type = $2 . $4;
  
              my $kfd = length $1 ? $1 : 0;
  
              my $pty_id;
              if ( $type eq '<pty<' ) {
                 $pty_id = length $3 ? $3 : '0';
                 ## do the require here to cause early error reporting
                 require IO::Pty;
                 ## Just flag the pyt's existence for now.  It'll be
                 ## converted to a real IO::Pty by _open_pipes.
                 $self->{PTYS}->{$pty_id} = undef;
              }
  
              my $source = $5;
  
              my @filters;
              my $binmode;
  
              unless ( length $source ) {
                 if ( ! $succinct ) {
                    while ( @args > 1
                        && (
                           ( ref $args[1] && ! UNIVERSAL::isa $args[1], "IPC::Run::Timer" )
                           || UNIVERSAL::isa $args[0], "IPC::Run::binmode_pseudo_filter"
                        )
                    ) {
                       if ( UNIVERSAL::isa $args[0], "IPC::Run::binmode_pseudo_filter" ) {
                          $binmode = shift( @args )->();
                       }
                       else {
                          push @filters, shift @args
                       }
                    }
                 }
                 $source = shift @args;
                 croak "'$_' missing a source" if _empty $source;
  
                 _debug(
                    'Kid ', $cur_kid->{NUM}, "'s input fd ", $kfd,
                    ' has ', scalar( @filters ), ' filters.'
                 ) if _debugging_details && @filters;
              };
  
              my IPC::Run::IO $pipe = IPC::Run::IO->_new_internal(
                 $type, $kfd, $pty_id, $source, $binmode, @filters
              );
  
              if ( ( ref $source eq 'GLOB' || UNIVERSAL::isa $source, 'IO::Handle' )
                 && $type !~ /^<p(ty<|ipe)$/
              ) {
  	       _debug "setting DONT_CLOSE" if _debugging_details;
                 $pipe->{DONT_CLOSE} = 1; ## this FD is not closed by us.
  	       _dont_inherit( $source ) if Win32_MODE;
              }
  
              push @{$cur_kid->{OPS}}, $pipe;
        }
  
           elsif ( /^()   (>>?)  (&)     ()      (.*)$/x
              ||   /^()   (&)    (>pipe) ()      ()  $/x 
              ||   /^()   (>pipe)(&)     ()      ()  $/x 
              ||   /^(\d*)()     (>pipe) ()      ()  $/x
              ||   /^()   (&)    (>pty)  ( \w*)> ()  $/x 
  ## TODO:    ||   /^()   (>pty) (\d*)> (&) ()  $/x 
              ||   /^(\d*)()     (>pty)  ( \w*)> ()  $/x
              ||   /^()   (&)    (>>?)   ()      (.*)$/x 
              ||   /^(\d*)()     (>>?)   ()      (.*)$/x
           ) {
              croak "No command before '$_'" unless $cur_kid;
  
              $succinct = ! $first_parse;
  
              my $type = (
                 $2 eq '>pipe' || $3 eq '>pipe'
                    ? '>pipe'
                    : $2 eq '>pty' || $3 eq '>pty'
                       ? '>pty>'
                       : '>'
              );
              my $kfd = length $1 ? $1 : 1;
              my $trunc = ! ( $2 eq '>>' || $3 eq '>>' );
              my $pty_id = (
                 $2 eq '>pty' || $3 eq '>pty'
                    ? length $4 ? $4 : 0
                    : undef
              );
  
              my $stderr_too =
                    $2 eq '&'
                 || $3 eq '&'
                 || ( ! length $1 && substr( $type, 0, 4 ) eq '>pty' );
  
              my $dest = $5;
              my @filters;
              my $binmode = 0;
              unless ( length $dest ) {
                 if ( ! $succinct ) {
                    ## unshift...shift: '>' filters source...sink left...right
                    while ( @args > 1
                       && ( 
                          ( ref $args[1] && !  UNIVERSAL::isa $args[1], "IPC::Run::Timer" )
                          || UNIVERSAL::isa $args[0], "IPC::Run::binmode_pseudo_filter"
                       )
                    ) {
                       if ( UNIVERSAL::isa $args[0], "IPC::Run::binmode_pseudo_filter" ) {
                          $binmode = shift( @args )->();
                       }
                       else {
                          unshift @filters, shift @args;
                       }
                    }
                 }
  
                 $dest = shift @args;
  
                 _debug(
                    'Kid ', $cur_kid->{NUM}, "'s output fd ", $kfd,
                    ' has ', scalar( @filters ), ' filters.'
                 ) if _debugging_details && @filters;
  
                 if ( $type eq '>pty>' ) {
                    ## do the require here to cause early error reporting
                    require IO::Pty;
                    ## Just flag the pyt's existence for now.  _open_pipes()
                    ## will new an IO::Pty for each key.
                    $self->{PTYS}->{$pty_id} = undef;
                 }
              }
  
              croak "'$_' missing a destination" if _empty $dest;
              my $pipe = IPC::Run::IO->_new_internal(
                 $type, $kfd, $pty_id, $dest, $binmode, @filters
              );
              $pipe->{TRUNC} = $trunc;
  
              if (  ( UNIVERSAL::isa( $dest, 'GLOB' ) || UNIVERSAL::isa( $dest, 'IO::Handle' ) )
                 && $type !~ /^>(pty>|pipe)$/
              ) {
  	       _debug "setting DONT_CLOSE" if _debugging_details;
                 $pipe->{DONT_CLOSE} = 1; ## this FD is not closed by us.
              }
              push @{$cur_kid->{OPS}}, $pipe;
              push @{$cur_kid->{OPS}}, {
                 TYPE => 'dup',
                 KFD1 => 1,
                 KFD2 => 2,
              } if $stderr_too;
           }
  
           elsif ( $_ eq "|" ) {
              croak "No command before '$_'" unless $cur_kid;
              unshift @{$cur_kid->{OPS}}, {
                 TYPE => '|',
                 KFD  => 1,
              };
              $succinct   = 1;
              $assumed_fd = 1;
              $cur_kid    = undef;
           }
  
           elsif ( $_ eq "&" ) {
              croak "No command before '$_'" unless $cur_kid;
              unshift @{$cur_kid->{OPS}}, {
                 TYPE => 'close',
                 KFD  => 0,
              };
              $succinct   = 1;
              $assumed_fd = 0;
              $cur_kid    = undef;
           }
  
           elsif ( $_ eq 'init' ) {
              croak "No command before '$_'" unless $cur_kid;
              push @{$cur_kid->{OPS}}, {
                 TYPE => 'init',
                 SUB  => shift @args,
              };
           }
  
           elsif ( ! ref $_ ) {
              $self->{$_} = shift @args;
           }
  
           elsif ( $_ eq 'init' ) {
              croak "No command before '$_'" unless $cur_kid;
              push @{$cur_kid->{OPS}}, {
                 TYPE => 'init',
                 SUB  => shift @args,
              };
           }
  
           elsif ( $succinct && $first_parse ) {
              ## It's not an opcode, and no explicit opcodes have been
              ## seen yet, so assume it's a file name.
              unshift @args, $_;
              if ( ! $assumed_fd ) {
                 $_ = "$assumed_fd<",
              }
              else {
                 $_ = "$assumed_fd>",
              }
              _debug "assuming '", $_, "'" if _debugging_details;
              ++$assumed_fd;
              $first_parse = 0;
              goto REPARSE;
           }
  
           else {
              croak join( 
                 '',
                 'Unexpected ',
                 ( ref() ? $_ : 'scalar' ),
                 ' in harness() parameter ',
                 $arg_count - @args
              );
           }
        };
        if ( $@ ) {
           push @errs, $@;
           _debug 'caught ', $@ if _debugging;
        }
     } }
  
     die join( '', @errs ) if @errs;
  
  
     $self->{STATE} = _harnessed;
  #   $self->timeout( $options->{timeout} ) if exists $options->{timeout};
     return $self;
  }
  
  
  sub _open_pipes {
     my IPC::Run $self = shift;
  
     my @errs;
  
     my @close_on_fail;
  
     ## When a pipe character is seen, a pipe is created.  $pipe_read_fd holds
     ## the dangling read end of the pipe until we get to the next process.
     my $pipe_read_fd;
  
     ## Output descriptors for the last command are shared by all children.
     ## @output_fds_accum accumulates the current set of output fds.
     my @output_fds_accum;
  
     for ( sort keys %{$self->{PTYS}} ) {
        _debug "opening pty '", $_, "'" if _debugging_details;
        my $pty = _pty;
        $self->{PTYS}->{$_} = $pty;
     }
  
     for ( @{$self->{IOS}} ) {
        eval { $_->init; };
        if ( $@ ) {
           push @errs, $@;
           _debug 'caught ', $@ if _debugging;
        }
        else {
           push @close_on_fail, $_;
        }
     }
  
     ## Loop through the kids and their OPS, interpreting any that require
     ## parent-side actions.
     for my $kid ( @{$self->{KIDS}} ) {
        unless ( ref $kid->{VAL} eq 'CODE' ) {
           $kid->{PATH} = _search_path $kid->{VAL}->[0];
        }
        if ( defined $pipe_read_fd ) {
  	 _debug "placing write end of pipe on kid $kid->{NUM}'s stdin"
  	    if _debugging_details;
           unshift @{$kid->{OPS}}, {
              TYPE => 'PIPE',  ## Prevent next loop from triggering on this
              KFD  => 0,
              TFD  => $pipe_read_fd,
           };
           $pipe_read_fd = undef;
        }
        @output_fds_accum = ();
        for my $op ( @{$kid->{OPS}} ) {
  #         next if $op->{IS_DEBUG};
           my $ok = eval {
              if ( $op->{TYPE} eq '<' ) {
                 my $source = $op->{SOURCE};
  	       if ( ! ref $source ) {
  		  _debug(
  		     "kid ", $kid->{NUM}, " to read ", $op->{KFD},
  		     " from '" .  $source, "' (read only)"
  		  ) if _debugging_details;
  		  croak "simulated open failure"
  		     if $self->{_simulate_open_failure};
  		  $op->{TFD} = _sysopen( $source, O_RDONLY );
  		  push @close_on_fail, $op->{TFD};
  	       }
  	       elsif ( UNIVERSAL::isa( $source, 'GLOB' )
  		  ||   UNIVERSAL::isa( $source, 'IO::Handle' )
  	       ) {
  		  croak
  		     "Unopened filehandle in input redirect for $op->{KFD}"
  		     unless defined fileno $source;
  		  $op->{TFD} = fileno $source;
  		  _debug(
  		     "kid ", $kid->{NUM}, " to read ", $op->{KFD},
  		     " from fd ", $op->{TFD}
  		  ) if _debugging_details;
  	       }
  	       elsif ( UNIVERSAL::isa( $source, 'SCALAR' ) ) {
  		  _debug(
  		     "kid ", $kid->{NUM}, " to read ", $op->{KFD},
  		     " from SCALAR"
  		  ) if _debugging_details;
  
  		  $op->open_pipe( $self->_debug_fd );
  		  push @close_on_fail, $op->{KFD}, $op->{FD};
  
  		  my $s = '';
  		  $op->{KIN_REF} = \$s;
  	       }
  	       elsif ( UNIVERSAL::isa( $source, 'CODE' ) ) {
  		  _debug(
  		     'kid ', $kid->{NUM}, ' to read ', $op->{KFD}, ' from CODE'
  		  ) if _debugging_details;
  		  
  		  $op->open_pipe( $self->_debug_fd );
  		  push @close_on_fail, $op->{KFD}, $op->{FD};
  		  
  		  my $s = '';
  		  $op->{KIN_REF} = \$s;
  	       }
  	       else {
  		  croak(
  		     "'"
  		     . ref( $source )
  		     . "' not allowed as a source for input redirection"
  		  );
  	       }
                 $op->_init_filters;
              }
              elsif ( $op->{TYPE} eq '<pipe' ) {
                 _debug(
                    'kid to read ', $op->{KFD},
                    ' from a pipe IPC::Run opens and returns',
                 ) if _debugging_details;
  
                 my ( $r, $w ) = $op->open_pipe( $self->_debug_fd, $op->{SOURCE} );
  	       _debug "caller will write to ", fileno $op->{SOURCE}
  	          if _debugging_details;
  
                 $op->{TFD}    = $r;
  	       $op->{FD}     = undef; # we don't manage this fd
                 $op->_init_filters;
              }
              elsif ( $op->{TYPE} eq '<pty<' ) {
                 _debug(
                    'kid to read ', $op->{KFD}, " from pty '", $op->{PTY_ID}, "'",
                 ) if _debugging_details;
                 
                 for my $source ( $op->{SOURCE} ) {
                    if ( UNIVERSAL::isa( $source, 'SCALAR' ) ) {
                       _debug(
                          "kid ", $kid->{NUM}, " to read ", $op->{KFD},
                          " from SCALAR via pty '", $op->{PTY_ID}, "'"
                       ) if _debugging_details;
  
                       my $s = '';
                       $op->{KIN_REF} = \$s;
                    }
                    elsif ( UNIVERSAL::isa( $source, 'CODE' ) ) {
                       _debug(
                          "kid ", $kid->{NUM}, " to read ", $op->{KFD},
                          " from CODE via pty '", $op->{PTY_ID}, "'"
                       ) if _debugging_details;
                       my $s = '';
                       $op->{KIN_REF} = \$s;
                    }
                    else {
                       croak(
                          "'"
                          . ref( $source )
                          . "' not allowed as a source for '<pty<' redirection"
                       );
                    }
                 }
                 $op->{FD} = $self->{PTYS}->{$op->{PTY_ID}}->fileno;
                 $op->{TFD} = undef; # The fd isn't known until after fork().
                 $op->_init_filters;
              }
              elsif ( $op->{TYPE} eq '>' ) {
                 ## N> output redirection.
                 my $dest = $op->{DEST};
                 if ( ! ref $dest ) {
                    _debug(
                       "kid ", $kid->{NUM}, " to write ", $op->{KFD},
                       " to '", $dest, "' (write only, create, ",
                       ( $op->{TRUNC} ? 'truncate' : 'append' ),
                       ")"
                    ) if _debugging_details;
                    croak "simulated open failure"
                       if $self->{_simulate_open_failure};
                    $op->{TFD} = _sysopen(
                       $dest,
                       ( O_WRONLY
                       | O_CREAT 
                       | ( $op->{TRUNC} ? O_TRUNC : O_APPEND )
                       )
                    );
  		  if ( Win32_MODE ) {
  		     ## I have no idea why this is needed to make the current
  		     ## file position survive the gyrations TFD must go 
  		     ## through...
  		     POSIX::lseek( $op->{TFD}, 0, POSIX::SEEK_END() );
  		  }
                    push @close_on_fail, $op->{TFD};
                 }
                 elsif ( UNIVERSAL::isa( $dest, 'GLOB' ) ) {
                    croak(
                     "Unopened filehandle in output redirect, command $kid->{NUM}"
                    ) unless defined fileno $dest;
                    ## Turn on autoflush, mostly just to flush out
                    ## existing output.
                    my $old_fh = select( $dest ); $| = 1; select( $old_fh );
                    $op->{TFD} = fileno $dest;
                    _debug(
                       'kid to write ', $op->{KFD}, ' to handle ', $op->{TFD}
                    ) if _debugging_details;
                 }
                 elsif ( UNIVERSAL::isa( $dest, 'SCALAR' ) ) {
                    _debug(
                       "kid ", $kid->{NUM}, " to write $op->{KFD} to SCALAR"
                    ) if _debugging_details;
  
  		  $op->open_pipe( $self->_debug_fd );
                    push @close_on_fail, $op->{FD}, $op->{TFD};
                    $$dest = '' if $op->{TRUNC};
                 }
                 elsif ( UNIVERSAL::isa( $dest, 'CODE' ) ) {
                    _debug(
                       "kid $kid->{NUM} to write $op->{KFD} to CODE"
                    ) if _debugging_details;
  
  		  $op->open_pipe( $self->_debug_fd );
                    push @close_on_fail, $op->{FD}, $op->{TFD};
                 }
                 else {
                    croak(
                       "'"
                       . ref( $dest )
                       . "' not allowed as a sink for output redirection"
                    );
                 }
                 $output_fds_accum[$op->{KFD}] = $op;
                 $op->_init_filters;
              }
  
              elsif ( $op->{TYPE} eq '>pipe' ) {
                 ## N> output redirection to a pipe we open, but don't select()
                 ## on.
                 _debug(
                    "kid ", $kid->{NUM}, " to write ", $op->{KFD},
  		  ' to a pipe IPC::Run opens and returns'
                 ) if _debugging_details;
  
                 my ( $r, $w ) = $op->open_pipe( $self->_debug_fd, $op->{DEST} );
  	       _debug "caller will read from ", fileno $op->{DEST}
  	          if _debugging_details;
  
                 $op->{TFD} = $w;
  	       $op->{FD}  = undef; # we don't manage this fd
                 $op->_init_filters;
  
                 $output_fds_accum[$op->{KFD}] = $op;
              }
              elsif ( $op->{TYPE} eq '>pty>' ) {
                 my $dest = $op->{DEST};
                 if ( UNIVERSAL::isa( $dest, 'SCALAR' ) ) {
                    _debug(
                       "kid ", $kid->{NUM}, " to write ", $op->{KFD},
                       " to SCALAR via pty '", $op->{PTY_ID}, "'"
                 ) if _debugging_details;
  
                    $$dest = '' if $op->{TRUNC};
                 }
                 elsif ( UNIVERSAL::isa( $dest, 'CODE' ) ) {
                    _debug(
                       "kid ", $kid->{NUM}, " to write ", $op->{KFD},
                       " to CODE via pty '", $op->{PTY_ID}, "'"
                    ) if _debugging_details;
                 }
                 else {
                    croak(
                       "'"
                       . ref( $dest )
                       . "' not allowed as a sink for output redirection"
                    );
                 }
  
                 $op->{FD} = $self->{PTYS}->{$op->{PTY_ID}}->fileno;
                 $op->{TFD} = undef; # The fd isn't known until after fork().
                 $output_fds_accum[$op->{KFD}] = $op;
                 $op->_init_filters;
              }
              elsif ( $op->{TYPE} eq '|' ) {
                 _debug(
                    "pipelining $kid->{NUM} and "
                    . ( $kid->{NUM} + 1 )
                 ) if _debugging_details;
                 ( $pipe_read_fd, $op->{TFD} ) = _pipe;
  	       if ( Win32_MODE ) {
  		  _dont_inherit( $pipe_read_fd );
  		  _dont_inherit( $op->{TFD} );
  	       }
                 @output_fds_accum = ();
              }
              elsif ( $op->{TYPE} eq '&' ) {
                 @output_fds_accum = ();
              } # end if $op->{TYPE} tree
  	    1;
  	 }; # end eval
  	 unless ( $ok ) {
  	    push @errs, $@;
  	    _debug 'caught ', $@ if _debugging;
  	 }
        } # end for ( OPS }
     }
  
     if ( @errs ) {
        for ( @close_on_fail ) {
           _close( $_ );
           $_ = undef;
        }
        for ( keys %{$self->{PTYS}} ) {
           next unless $self->{PTYS}->{$_};
           close $self->{PTYS}->{$_};
           $self->{PTYS}->{$_} = undef;
        }
        die join( '', @errs )
     }
  
     ## give all but the last child all of the output file descriptors
     ## These will be reopened (and thus rendered useless) if the child
     ## dup2s on to these descriptors, since we unshift these.  This way
     ## each process emits output to the same file descriptors that the
     ## last child will write to.  This is probably not quite correct,
     ## since each child should write to the file descriptors inherited
     ## from the parent.
     ## TODO: fix the inheritance of output file descriptors.
     ## NOTE: This sharing of OPS among kids means that we can't easily put
     ## a kid number in each OPS structure to ping the kid when all ops
     ## have closed (when $self->{PIPES} has emptied).  This means that we
     ## need to scan the KIDS whenever @{$self->{PIPES}} is empty to see
     ## if there any of them are still alive.
     for ( my $num = 0; $num < $#{$self->{KIDS}}; ++$num ) {
        for ( reverse @output_fds_accum ) {
           next unless defined $_;
           _debug(
              'kid ', $self->{KIDS}->[$num]->{NUM}, ' also to write ', $_->{KFD},
              ' to ', ref $_->{DEST}
           ) if _debugging_details;
           unshift @{$self->{KIDS}->[$num]->{OPS}}, $_;
        }
     }
  
     ## Open the debug pipe if we need it
     ## Create the list of PIPES we need to scan and the bit vectors needed by
     ## select().  Do this first so that _cleanup can _clobber() them if an
     ## exception occurs.
     @{$self->{PIPES}} = ();
     $self->{RIN} = '';
     $self->{WIN} = '';
     $self->{EIN} = '';
     ## PIN is a vec()tor that indicates who's paused.
     $self->{PIN} = '';
     for my $kid ( @{$self->{KIDS}} ) {
        for ( @{$kid->{OPS}} ) {
           if ( defined $_->{FD} ) {
              _debug(
                 'kid ', $kid->{NUM}, '[', $kid->{PID}, "]'s ", $_->{KFD},
                 ' is my ', $_->{FD}
              ) if _debugging_details;
              vec( $self->{ $_->{TYPE} =~ /^</ ? 'WIN' : 'RIN' }, $_->{FD}, 1 ) = 1;
  #	    vec( $self->{EIN}, $_->{FD}, 1 ) = 1;
              push @{$self->{PIPES}}, $_;
           }
        }
     }
  
     for my $io ( @{$self->{IOS}} ) {
        my $fd = $io->fileno;
        vec( $self->{RIN}, $fd, 1 ) = 1 if $io->mode =~ /r/;
        vec( $self->{WIN}, $fd, 1 ) = 1 if $io->mode =~ /w/;
  #      vec( $self->{EIN}, $fd, 1 ) = 1;
        push @{$self->{PIPES}}, $io;
     }
  
     ## Put filters on the end of the filter chains to read & write the pipes.
     ## Clear pipe states
     for my $pipe ( @{$self->{PIPES}} ) {
        $pipe->{SOURCE_EMPTY} = 0;
        $pipe->{PAUSED} = 0;
        if ( $pipe->{TYPE} =~ /^>/ ) {
           my $pipe_reader = sub {
              my ( undef, $out_ref ) = @_;
  
              return undef unless defined $pipe->{FD};
              return 0 unless vec( $self->{ROUT}, $pipe->{FD}, 1 );
  
              vec( $self->{ROUT}, $pipe->{FD}, 1 ) = 0;
  
              _debug_desc_fd( 'reading from', $pipe ) if _debugging_details;
              my $in = eval { _read( $pipe->{FD} ) };
              if ( $@ ) {
                 $in = '';
                 ## IO::Pty throws the Input/output error if the kid dies.
  	       ## read() throws the bad file descriptor message if the
  	       ## kid dies on Win32.
                 die $@ unless
  	          $@ =~ $_EIO ||
  		  ($@ =~ /input or output/ && $^O =~ /aix/) 
  		  || ( Win32_MODE && $@ =~ /Bad file descriptor/ );
              }
  
              unless ( length $in ) {
                 $self->_clobber( $pipe );
                 return undef;
              }
  
              ## Protect the position so /.../g matches may be used.
              my $pos = pos $$out_ref;
              $$out_ref .= $in;
              pos( $$out_ref ) = $pos;
              return 1;
           };
           ## Input filters are the last filters
           push @{$pipe->{FILTERS}}, $pipe_reader;
           push @{$self->{TEMP_FILTERS}}, $pipe_reader;
        }
        else {
           my $pipe_writer = sub {
              my ( $in_ref, $out_ref ) = @_;
              return undef unless defined $pipe->{FD};
              return 0
                 unless vec( $self->{WOUT}, $pipe->{FD}, 1 )
                    || $pipe->{PAUSED};
  
              vec( $self->{WOUT}, $pipe->{FD}, 1 ) = 0;
  
              if ( ! length $$in_ref ) {
                 if ( ! defined get_more_input ) {
                    $self->_clobber( $pipe );
                    return undef;
                 }
              }
  
              unless ( length $$in_ref ) {
                 unless ( $pipe->{PAUSED} ) {
                    _debug_desc_fd( 'pausing', $pipe ) if _debugging_details;
                    vec( $self->{WIN}, $pipe->{FD}, 1 ) = 0;
  #		  vec( $self->{EIN}, $pipe->{FD}, 1 ) = 0;
                    vec( $self->{PIN}, $pipe->{FD}, 1 ) = 1;
                    $pipe->{PAUSED} = 1;
                 }
                 return 0;
              }
              _debug_desc_fd( 'writing to', $pipe ) if _debugging_details;
  
              my $c = _write( $pipe->{FD}, $$in_ref );
              substr( $$in_ref, 0, $c, '' );
              return 1;
           };
           ## Output filters are the first filters
           unshift @{$pipe->{FILTERS}}, $pipe_writer;
           push    @{$self->{TEMP_FILTERS}}, $pipe_writer;
        }
     }
  }
  
  
  sub _dup2_gently {
     ## A METHOD, NOT A FUNCTION, NEEDS $self!
     my IPC::Run $self = shift;
     my ( $files, $fd1, $fd2 ) = @_;
     ## Moves TFDs that are using the destination fd out of the
     ## way before calling _dup2
     for ( @$files ) {
        next unless defined $_->{TFD};
        $_->{TFD} = _dup( $_->{TFD} ) if $_->{TFD} == $fd2;
     }
     $self->{DEBUG_FD} = _dup $self->{DEBUG_FD}
        if defined $self->{DEBUG_FD} && $self->{DEBUG_FD} == $fd2;
  
     _dup2_rudely( $fd1, $fd2 );
  }
  
  =pod
  
  =item close_terminal
  
  This is used as (or in) an init sub to cast off the bonds of a controlling
  terminal.  It must precede all other redirection ops that affect
  STDIN, STDOUT, or STDERR to be guaranteed effective.
  
  =cut
  
  
  sub close_terminal {
     ## Cast of the bonds of a controlling terminal
  
     POSIX::setsid() || croak "POSIX::setsid() failed";
     _debug "closing stdin, out, err"
        if _debugging_details;
     close STDIN;
     close STDERR;
     close STDOUT;
  }
  
  
  sub _do_kid_and_exit {
     my IPC::Run $self = shift;
     my ( $kid ) = @_;
  
     my ( $s1, $s2 );
     if ($] < 5.008) {
       ## For unknown reasons, placing these two statements in the eval{}
       ## causes the eval {} to not catch errors after they are executed in
       ## perl 5.6.0, godforsaken version that it is...not sure about 5.6.1.
       ## Part of this could be that these symbols get destructed when
       ## exiting the eval, and that destruction might be what's (wrongly)
       ## confusing the eval{}, allowing the exception to probpogate.
       $s1 = Symbol::gensym();
       $s2 = Symbol::gensym();
     }
  
     eval {
        local $cur_self = $self;
  
        if ( _debugging ) {
           _set_child_debug_name( ref $kid->{VAL} eq "CODE"
           	 ? "CODE"
           	 : basename( $kid->{VAL}->[0] )
           );
        }
  
        ## close parent FD's first so they're out of the way.
        ## Don't close STDIN, STDOUT, STDERR: they should be inherited or
        ## overwritten below.
        my @needed = $self->{noinherit} ? () : ( 1, 1, 1 );
        $needed[ $self->{SYNC_WRITER_FD} ] = 1;
        $needed[ $self->{DEBUG_FD} ] = 1 if defined $self->{DEBUG_FD};
  
        for ( @{$kid->{OPS}} ) {
  	 $needed[ $_->{TFD} ] = 1 if defined $_->{TFD};
        }
  
        ## TODO: use the forthcoming IO::Pty to close the terminal and
        ## make the first pty for this child the controlling terminal.
        ## This will also make it so that pty-laden kids don't cause
        ## other kids to lose stdin/stdout/stderr.
        my @closed;
        if ( %{$self->{PTYS}} ) {
  	 ## Clean up the parent's fds.
  	 for ( keys %{$self->{PTYS}} ) {
  	    _debug "Cleaning up parent's ptty '$_'" if _debugging_details;
  	    my $slave = $self->{PTYS}->{$_}->slave;
  	    $closed[ $self->{PTYS}->{$_}->fileno ] = 1;
  	    close $self->{PTYS}->{$_};
  	    $self->{PTYS}->{$_} = $slave;
  	 }
  
  	 close_terminal;
  	 $closed[ $_ ] = 1 for ( 0..2 );
        }
  
        for my $sibling ( @{$self->{KIDS}} ) {
  	 for ( @{$sibling->{OPS}} ) {
  	    if ( $_->{TYPE} =~ /^.pty.$/ ) {
  	       $_->{TFD} = $self->{PTYS}->{$_->{PTY_ID}}->fileno;
  	       $needed[$_->{TFD}] = 1;
  	    }
  
  #	    for ( $_->{FD}, ( $sibling != $kid ? $_->{TFD} : () ) ) {
  #	       if ( defined $_ && ! $closed[$_] && ! $needed[$_] ) {
  #		  _close( $_ );
  #		  $closed[$_] = 1;
  #		  $_ = undef;
  #	       }
  #	    }
  	 }
        }
  
        ## This is crude: we have no way of keeping track of browsing all open
        ## fds, so we scan to a fairly high fd.
        _debug "open fds: ", join " ", keys %fds if _debugging_details;
        for (keys %fds) {
           if ( ! $closed[$_] && ! $needed[$_] ) {
              _close( $_ );
              $closed[$_] = 1;
           }
        }
  
        ## Lazy closing is so the same fd (ie the same TFD value) can be dup2'ed on
        ## several times.
        my @lazy_close;
        for ( @{$kid->{OPS}} ) {
  	 if ( defined $_->{TFD} ) {
  	    unless ( $_->{TFD} == $_->{KFD} ) {
  	       $self->_dup2_gently( $kid->{OPS}, $_->{TFD}, $_->{KFD} );
  	       push @lazy_close, $_->{TFD};
  	    }
  	 }
  	 elsif ( $_->{TYPE} eq 'dup' ) {
  	    $self->_dup2_gently( $kid->{OPS}, $_->{KFD1}, $_->{KFD2} )
  	       unless $_->{KFD1} == $_->{KFD2};
  	 }
  	 elsif ( $_->{TYPE} eq 'close' ) {
  	    for ( $_->{KFD} ) {
  	       if ( ! $closed[$_] ) {
  		  _close( $_ );
  		  $closed[$_] = 1;
  		  $_ = undef;
  	       }
  	    }
  	 }
  	 elsif ( $_->{TYPE} eq 'init' ) {
  	    $_->{SUB}->();
  	 }
        }
  
        for ( @lazy_close ) {
  	 unless ( $closed[$_] ) {
  	    _close( $_ );
  	    $closed[$_] = 1;
  	 }
        }
  
        if ( ref $kid->{VAL} ne 'CODE' ) {
  	 open $s1, ">&=$self->{SYNC_WRITER_FD}"
  	    or croak "$! setting filehandle to fd SYNC_WRITER_FD";
  	 fcntl $s1, F_SETFD, 1;
  
  	 if ( defined $self->{DEBUG_FD} ) {
  	    open $s2, ">&=$self->{DEBUG_FD}"
  	       or croak "$! setting filehandle to fd DEBUG_FD";
  	    fcntl $s2, F_SETFD, 1;
  	 }
  
  	 if ( _debugging ) {
  	    my @cmd = ( $kid->{PATH}, @{$kid->{VAL}}[1..$#{$kid->{VAL}}] );
  	    _debug 'execing ', join " ", map { /[\s\"]/ ? "'$_'" : $_ } @cmd;
  	 }
  
  	 die "exec failed: simulating exec() failure"
  	    if $self->{_simulate_exec_failure};
  
  	 _exec $kid->{PATH}, @{$kid->{VAL}}[1..$#{$kid->{VAL}}];
  
  	 croak "exec failed: $!";
        }
     };
     if ( $@ ) {
        _write $self->{SYNC_WRITER_FD}, $@;
        ## Avoid DESTROY.
        POSIX::exit 1;
     }
  
     ## We must be executing code in the child, otherwise exec() would have
     ## prevented us from being here.
     _close $self->{SYNC_WRITER_FD};
     _debug 'calling fork()ed CODE ref' if _debugging;
     POSIX::close $self->{DEBUG_FD}      if defined $self->{DEBUG_FD};
     ## TODO: Overload CORE::GLOBAL::exit...
     $kid->{VAL}->();
  
     ## There are bugs in perl closures up to and including 5.6.1
     ## that may keep this next line from having any effect, and it
     ## won't have any effect if our caller has kept a copy of it, but
     ## this may cause the closure to be cleaned up.  Maybe.
     $kid->{VAL} = undef;
  
     ## Use POSIX::exit to avoid global destruction, since this might
     ## cause DESTROY() to be called on objects created in the parent
     ## and thus cause double cleanup.  For instance, if DESTROY() unlinks
     ## a file in the child, we don't want the parent to suddenly miss
     ## it.
     POSIX::exit 0;
  }
  
  =pod
  
  =item start
  
     $h = start(
        \@cmd, \$in, \$out, ...,
        timeout( 30, name => "process timeout" ),
        $stall_timeout = timeout( 10, name => "stall timeout"   ),
     );
  
     $h = start \@cmd, '<', \$in, '|', \@cmd2, ...;
  
  start() accepts a harness or harness specification and returns a harness
  after building all of the pipes and launching (via fork()/exec(), or, maybe
  someday, spawn()) all the child processes.  It does not send or receive any
  data on the pipes, see pump() and finish() for that.
  
  You may call harness() and then pass it's result to start() if you like,
  but you only need to if it helps you structure or tune your application.
  If you do call harness(), you may skip start() and proceed directly to
  pump.
  
  start() also starts all timers in the harness.  See L<IPC::Run::Timer>
  for more information.
  
  start() flushes STDOUT and STDERR to help you avoid duplicate output.
  It has no way of asking Perl to flush all your open filehandles, so
  you are going to need to flush any others you have open.  Sorry.
  
  Here's how if you don't want to alter the state of $| for your
  filehandle:
  
     $ofh = select HANDLE; $of = $|; $| = 1; $| = $of; select $ofh;
  
  If you don't mind leaving output unbuffered on HANDLE, you can do
  the slightly shorter
  
     $ofh = select HANDLE; $| = 1; select $ofh;
  
  Or, you can use IO::Handle's flush() method:
  
     use IO::Handle;
     flush HANDLE;
  
  Perl needs the equivalent of C's fflush( (FILE *)NULL ).
  
  =cut
  
  sub start {
  # $SIG{__DIE__} = sub { my $s = shift; Carp::cluck $s; die $s };
     my $options;
     if ( @_ && ref $_[-1] eq 'HASH' ) {
        $options = pop;
        require Data::Dumper;
        carp "Passing in options as a hash is deprecated:\n", Data::Dumper::Dumper( $options );
     }
  
     my IPC::Run $self;
     if ( @_ == 1 && UNIVERSAL::isa( $_[0], __PACKAGE__ ) ) {
        $self = shift;
        $self->{$_} = $options->{$_} for keys %$options;
     }
     else {
        $self = harness( @_, $options ? $options : () );
     }
  
     local $cur_self = $self;
  
     $self->kill_kill if $self->{STATE} == _started;
  
     _debug "** starting" if _debugging;
  
     $_->{RESULT} = undef for @{$self->{KIDS}};
  
     ## Assume we're not being called from &run.  It will correct our
     ## assumption if need be.  This affects whether &_select_loop clears
     ## input queues to '' when they're empty.
     $self->{clear_ins} = 1;
  
     IPC::Run::Win32Helper::optimize $self
         if Win32_MODE && $in_run;
  
     my @errs;
  
     for ( @{$self->{TIMERS}} ) {
        eval { $_->start };
        if ( $@ ) {
           push @errs, $@;
           _debug 'caught ', $@ if _debugging;
        }
     }
  
     eval { $self->_open_pipes };
     if ( $@ ) {
        push @errs, $@;
        _debug 'caught ', $@ if _debugging;
     }
  
     if ( ! @errs ) {
        ## This is a bit of a hack, we should do it for all open filehandles.
        ## Since there's no way I know of to enumerate open filehandles, we
        ## autoflush STDOUT and STDERR.  This is done so that the children don't
        ## inherit output buffers chock full o' redundant data.  It's really
        ## confusing to track that down.
        { my $ofh = select STDOUT; local $| = 1; select $ofh; }
        { my $ofh = select STDERR; local $| = 1; select $ofh; }
        for my $kid ( @{$self->{KIDS}} ) {
           $kid->{RESULT} = undef;
           _debug "child: ",
              ref( $kid->{VAL} ) eq "CODE"
              ? "CODE ref"
              : (
                 "`",
                 join( " ", map /[^\w.-]/ ? "'$_'" : $_, @{$kid->{VAL}} ),
                 "`"
              ) if _debugging_details;
           eval {
              croak "simulated failure of fork"
                 if $self->{_simulate_fork_failure};
              unless ( Win32_MODE ) {
  	       $self->_spawn( $kid );
              }
              else {
  ## TODO: Test and debug spawning code.  Someday.
                 _debug( 
                    'spawning ',
                    join(
                       ' ',
                       map(
                          "'$_'",
                          ( $kid->{PATH}, @{$kid->{VAL}}[1..$#{$kid->{VAL}}] )
                       )
                    )
                 ) if _debugging;
  	       ## The external kid wouldn't know what to do with it anyway.
  	       ## This is only used by the "helper" pump processes on Win32.
  	       _dont_inherit( $self->{DEBUG_FD} );
                 ( $kid->{PID}, $kid->{PROCESS} ) =
  		  IPC::Run::Win32Helper::win32_spawn( 
  		     [ $kid->{PATH}, @{$kid->{VAL}}[1..$#{$kid->{VAL}}] ],
  		     $kid->{OPS},
  		  );
                 _debug "spawn() = ", $kid->{PID} if _debugging;
              }
           };
           if ( $@ ) {
              push @errs, $@;
              _debug 'caught ', $@ if _debugging;
           }
        }
     }
  
     ## Close all those temporary filehandles that the kids needed.
     for my $pty ( values %{$self->{PTYS}} ) {
        close $pty->slave;
     }
  
     my @closed;
     for my $kid ( @{$self->{KIDS}} ) {
        for ( @{$kid->{OPS}} ) {
           my $close_it = eval {
              defined $_->{TFD}
                 && ! $_->{DONT_CLOSE}
                 && ! $closed[$_->{TFD}]
                 && ( ! Win32_MODE || ! $_->{RECV_THROUGH_TEMP_FILE} ) ## Win32 hack
           };
           if ( $@ ) {
              push @errs, $@;
              _debug 'caught ', $@ if _debugging;
           }
           if ( $close_it || $@ ) {
              eval {
                 _close( $_->{TFD} );
                 $closed[$_->{TFD}] = 1;
                 $_->{TFD} = undef;
              };
              if ( $@ ) {
                 push @errs, $@;
                 _debug 'caught ', $@ if _debugging;
              }
           }
        }
     }
  confess "gak!" unless defined $self->{PIPES};
  
     if ( @errs ) {
        eval { $self->_cleanup };
        warn $@ if $@;
        die join( '', @errs );
     }
  
     $self->{STATE} = _started;
     return $self;
  }
  
  =item adopt
  
  Experimental feature. NOT FUNCTIONAL YET, NEED TO CLOSE FDS BETTER IN CHILDREN.  SEE t/adopt.t for a test suite.
  
  =cut
  
  sub adopt {
     my IPC::Run $self = shift;
  
     for my $adoptee ( @_ ) {
        push @{$self->{IOS}},    @{$adoptee->{IOS}};
        ## NEED TO RENUMBER THE KIDS!!
        push @{$self->{KIDS}},   @{$adoptee->{KIDS}};
        push @{$self->{PIPES}},  @{$adoptee->{PIPES}};
        $self->{PTYS}->{$_} = $adoptee->{PTYS}->{$_}
           for keys %{$adoptee->{PYTS}};
        push @{$self->{TIMERS}}, @{$adoptee->{TIMERS}};
        $adoptee->{STATE} = _finished;
     }
  }
  
  
  sub _clobber {
     my IPC::Run $self = shift;
     my ( $file ) = @_;
     _debug_desc_fd( "closing", $file ) if _debugging_details;
     my $doomed = $file->{FD};
     my $dir = $file->{TYPE} =~ /^</ ? 'WIN' : 'RIN';
     vec( $self->{$dir}, $doomed, 1 ) = 0;
  #   vec( $self->{EIN},  $doomed, 1 ) = 0;
     vec( $self->{PIN},  $doomed, 1 ) = 0;
     if ( $file->{TYPE} =~ /^(.)pty.$/ ) {
        if ( $1 eq '>' ) {
           ## Only close output ptys.  This is so that ptys as inputs are
           ## never autoclosed, which would risk losing data that was
           ## in the slave->parent queue.
           _debug_desc_fd "closing pty", $file if _debugging_details;
           close $self->{PTYS}->{$file->{PTY_ID}}
              if defined $self->{PTYS}->{$file->{PTY_ID}};
           $self->{PTYS}->{$file->{PTY_ID}} = undef;
        }
     }
     elsif ( UNIVERSAL::isa( $file, 'IPC::Run::IO' ) ) {
        $file->close unless $file->{DONT_CLOSE};
     }
     else {
        _close( $doomed );
     }
  
     @{$self->{PIPES}} = grep
        defined $_->{FD} && ( $_->{TYPE} ne $file->{TYPE} || $_->{FD} ne $doomed),
        @{$self->{PIPES}};
  
     $file->{FD} = undef;
  }
  
  sub _select_loop {
     my IPC::Run $self = shift;
  
     my $io_occurred;
  
     my $not_forever = 0.01;
  
  SELECT:
     while ( $self->pumpable ) {
        if ( $io_occurred && $self->{break_on_io} ) {
           _debug "exiting _select(): io occured and break_on_io set"
  	    if _debugging_details;
           last;
        }
  
        my $timeout = $self->{non_blocking} ? 0 : undef;
  
        if ( @{$self->{TIMERS}} ) {
           my $now = time;
           my $time_left;
           for ( @{$self->{TIMERS}} ) {
              next unless $_->is_running;
              $time_left = $_->check( $now );
              ## Return when a timer expires
              return if defined $time_left && ! $time_left;
              $timeout = $time_left
                 if ! defined $timeout || $time_left < $timeout;
           }
        }
  
        ##
        ## See if we can unpause any input channels
        ##
        my $paused = 0;
  
        for my $file ( @{$self->{PIPES}} ) {
           next unless $file->{PAUSED} && $file->{TYPE} =~ /^</;
  
           _debug_desc_fd( "checking for more input", $file ) if _debugging_details;
           my $did;
           1 while $did = $file->_do_filters( $self );
           if ( defined $file->{FD} && ! defined( $did ) || $did ) {
              _debug_desc_fd( "unpausing", $file ) if _debugging_details;
              $file->{PAUSED} = 0;
              vec( $self->{WIN}, $file->{FD}, 1 ) = 1;
  #	    vec( $self->{EIN}, $file->{FD}, 1 ) = 1;
              vec( $self->{PIN}, $file->{FD}, 1 ) = 0;
           }
           else {
              ## This gets incremented occasionally when the IO channel
              ## was actually closed.  That's a bug, but it seems mostly
              ## harmless: it causes us to exit if break_on_io, or to set
              ## the timeout to not be forever.  I need to fix it, though.
              ++$paused;
           }
        }
  
        if ( _debugging_details ) {
           my $map = join(
              '',
              map {
                 my $out;
                 $out = 'r'                     if vec( $self->{RIN}, $_, 1 );
                 $out = $out ? 'b' : 'w'        if vec( $self->{WIN}, $_, 1 );
                 $out = 'p'           if ! $out && vec( $self->{PIN}, $_, 1 );
                 $out = $out ? uc( $out ) : 'x' if vec( $self->{EIN}, $_, 1 );
                 $out = '-' unless $out;
                 $out;
              } (0..1024)
           );
           $map =~ s/((?:[a-zA-Z-]|\([^\)]*\)){12,}?)-*$/$1/;
           _debug 'fds for select: ', $map if _debugging_details;
        }
  
        ## _do_filters may have closed our last fd, and we need to see if
        ## we have I/O, or are just waiting for children to exit.
        my $p = $self->pumpable;
        last unless $p;
        if ( $p != 0  && ( ! defined $timeout || $timeout > 0.1 ) ) {
           ## No I/O will wake the select loop up, but we have children
           ## lingering, so we need to poll them with a short timeout.
  	 ## Otherwise, assume more input will be coming.
  	 $timeout = $not_forever;
           $not_forever *= 2;
           $not_forever = 0.5 if $not_forever >= 0.5;
        }
  
        ## Make sure we don't block forever in select() because inputs are
        ## paused.
        if ( ! defined $timeout && ! ( @{$self->{PIPES}} - $paused ) ) {
           ## Need to return if we're in pump and all input is paused, or
  	 ## we'll loop until all inputs are unpaused, which is darn near
  	 ## forever.  And a day.
           if ( $self->{break_on_io} ) {
  	    _debug "exiting _select(): no I/O to do and timeout=forever"
                 if _debugging;
  	    last;
  	 }
  
  	 ## Otherwise, assume more input will be coming.
  	 $timeout = $not_forever;
           $not_forever *= 2;
           $not_forever = 0.5 if $not_forever >= 0.5;
        }
  
        _debug 'timeout=', defined $timeout ? $timeout : 'forever'
           if _debugging_details;
  
        my $nfound;
        unless ( Win32_MODE ) {
           $nfound = select(
              $self->{ROUT} = $self->{RIN},
              $self->{WOUT} = $self->{WIN},
              $self->{EOUT} = $self->{EIN},
              $timeout 
  	 );
        }
        else {
  	 my @in = map $self->{$_}, qw( RIN WIN EIN );
  	 ## Win32's select() on Win32 seems to die if passed vectors of
  	 ## all 0's.  Need to report this when I get back online.
  	 for ( @in ) {
  	    $_ = undef unless index( ( unpack "b*", $_ ), 1 ) >= 0;
  	 }
  
  	 $nfound = select(
              $self->{ROUT} = $in[0],
              $self->{WOUT} = $in[1],
              $self->{EOUT} = $in[2],
              $timeout 
           );
  
  	 for ( $self->{ROUT}, $self->{WOUT}, $self->{EOUT} ) {
  	    $_ = "" unless defined $_;
  	 }
        }
        last if ! $nfound && $self->{non_blocking};
  
        if ($nfound < 0) {
           if ($! == POSIX::EINTR) {
              # Caught a signal before any FD went ready.  Ensure that
              # the bit fields reflect "no FDs ready".
              $self->{ROUT} = $self->{WOUT} = $self->{EOUT} = '';
              $nfound = 0;
           }
           else {
              croak "$! in select";
           }
        }
            ## TODO: Analyze the EINTR failure mode and see if this patch
            ## is adequate and optimal.
            ## TODO: Add an EINTR test to the test suite.
  
        if ( _debugging_details ) {
           my $map = join(
              '',
              map {
                 my $out;
                 $out = 'r'                     if vec( $self->{ROUT}, $_, 1 );
                 $out = $out ? 'b' : 'w'        if vec( $self->{WOUT}, $_, 1 );
                 $out = $out ? uc( $out ) : 'x' if vec( $self->{EOUT}, $_, 1 );
                 $out = '-' unless $out;
                 $out;
              } (0..128)
           );
           $map =~ s/((?:[a-zA-Z-]|\([^\)]*\)){12,}?)-*$/$1/;
           _debug "selected  ", $map;
        }
  
        ## Need to copy since _clobber alters @{$self->{PIPES}}.
        ## TODO: Rethink _clobber().  Rethink $file->{PAUSED}, too.
        my @pipes = @{$self->{PIPES}};
        $io_occurred = $_->poll( $self ) ? 1 : $io_occurred for @pipes;
  #   FILE:
  #      for my $pipe ( @pipes ) {
  #         ## Pipes can be shared among kids.  If another kid closes the
  #         ## pipe, then it's {FD} will be undef.  Also, on Win32, pipes can
  #	 ## be optimized to be files, in which case the FD is left undef
  #	 ## so we don't try to select() on it.
  #         if ( $pipe->{TYPE} =~ /^>/
  #            && defined $pipe->{FD}
  #            && vec( $self->{ROUT}, $pipe->{FD}, 1 )
  #         ) {
  #            _debug_desc_fd( "filtering data from", $pipe ) if _debugging_details;
  #confess "phooey" unless UNIVERSAL::isa( $pipe, "IPC::Run::IO" );
  #            $io_occurred = 1 if $pipe->_do_filters( $self );
  #
  #            next FILE unless defined $pipe->{FD};
  #         }
  #
  #	 ## On Win32, pipes to the child can be optimized to be files
  #	 ## and FD left undefined so we won't select on it.
  #         if ( $pipe->{TYPE} =~ /^</
  #            && defined $pipe->{FD}
  #            && vec( $self->{WOUT}, $pipe->{FD}, 1 )
  #         ) {
  #            _debug_desc_fd( "filtering data to", $pipe ) if _debugging_details;
  #            $io_occurred = 1 if $pipe->_do_filters( $self );
  #
  #            next FILE unless defined $pipe->{FD};
  #         }
  #
  #         if ( defined $pipe->{FD} && vec( $self->{EOUT}, $pipe->{FD}, 1 ) ) {
  #            ## BSD seems to sometimes raise the exceptional condition flag
  #            ## when a pipe is closed before we read it's last data.  This
  #            ## causes spurious warnings and generally renders the exception
  #            ## mechanism useless for our purposes.  The exception
  #            ## flag semantics are too variable (they're device driver
  #            ## specific) for me to easily map to any automatic action like
  #            ## warning or croaking (try running v0.42 if you don't believe me
  #            ## :-).
  #            warn "Exception on descriptor $pipe->{FD}";
  #         }
  #      }
     }
  
     return;
  }
  
  
  sub _cleanup {
     my IPC::Run $self = shift;
     _debug "cleaning up" if _debugging_details;
  
     for ( values %{$self->{PTYS}} ) {
        next unless ref $_;
        eval {
           _debug "closing slave fd ", fileno $_->slave if _debugging_data;
           close $_->slave;
        };
        carp $@ . " while closing ptys" if $@;
        eval {
           _debug "closing master fd ", fileno $_ if _debugging_data;
           close $_;
        };
        carp $@ . " closing ptys" if $@;
     }
     
     _debug "cleaning up pipes" if _debugging_details;
     ## _clobber modifies PIPES
     $self->_clobber( $self->{PIPES}->[0] ) while @{$self->{PIPES}};
  
     for my $kid ( @{$self->{KIDS}} ) {
        _debug "cleaning up kid ", $kid->{NUM} if _debugging_details;
        if ( ! length $kid->{PID} ) {
           _debug 'never ran child ', $kid->{NUM}, ", can't reap"
              if _debugging;
           for my $op ( @{$kid->{OPS}} ) {
              _close( $op->{TFD} )
                 if defined $op->{TFD} && ! defined $op->{TEMP_FILE_HANDLE};
           }
        }
        elsif ( ! defined $kid->{RESULT} ) {
           _debug 'reaping child ', $kid->{NUM}, ' (pid ', $kid->{PID}, ')'
              if _debugging;
           my $pid = waitpid $kid->{PID}, 0;
           $kid->{RESULT} = $?;
           _debug 'reaped ', $pid, ', $?=', $kid->{RESULT}
              if _debugging;
        }
  
  #      if ( defined $kid->{DEBUG_FD} ) {
  #	 die;
  #         @{$kid->{OPS}} = grep
  #            ! defined $_->{KFD} || $_->{KFD} != $kid->{DEBUG_FD},
  #            @{$kid->{OPS}};
  #         $kid->{DEBUG_FD} = undef;
  #      }
  
        _debug "cleaning up filters" if _debugging_details;
        for my $op ( @{$kid->{OPS}} ) {
           @{$op->{FILTERS}} = grep {
              my $filter = $_;
              ! grep $filter == $_, @{$self->{TEMP_FILTERS}};
           } @{$op->{FILTERS}};
        }
  
        for my $op ( @{$kid->{OPS}} ) {
           $op->_cleanup( $self ) if UNIVERSAL::isa( $op, "IPC::Run::IO" );
        }
     }
     $self->{STATE} = _finished;
     @{$self->{TEMP_FILTERS}} = ();
     _debug "done cleaning up" if _debugging_details;
  
     POSIX::close $self->{DEBUG_FD} if defined $self->{DEBUG_FD};
     $self->{DEBUG_FD} = undef;
  }
  
  =pod
  
  =item pump
  
     pump $h;
     $h->pump;
  
  Pump accepts a single parameter harness.  It blocks until it delivers some
  input or receives some output.  It returns TRUE if there is still input or
  output to be done, FALSE otherwise.
  
  pump() will automatically call start() if need be, so you may call harness()
  then proceed to pump() if that helps you structure your application.
  
  If pump() is called after all harnessed activities have completed, a "process
  ended prematurely" exception to be thrown.  This allows for simple scripting
  of external applications without having to add lots of error handling code at
  each step of the script:
  
     $h = harness \@smbclient, \$in, \$out, $err;
  
     $in = "cd /foo\n";
     $h->pump until $out =~ /^smb.*> \Z/m;
     die "error cding to /foo:\n$out" if $out =~ "ERR";
     $out = '';
  
     $in = "mget *\n";
     $h->pump until $out =~ /^smb.*> \Z/m;
     die "error retrieving files:\n$out" if $out =~ "ERR";
  
     $h->finish;
  
     warn $err if $err;
  
  =cut
  
  sub pump {
     die "pump() takes only a a single harness as a parameter"
        unless @_ == 1 && UNIVERSAL::isa( $_[0], __PACKAGE__ );
  
     my IPC::Run $self = shift;
  
     local $cur_self = $self;
  
     _debug "** pumping" 
        if _debugging;
  
  #   my $r = eval {
        $self->start if $self->{STATE} < _started;
        croak "process ended prematurely" unless $self->pumpable;
  
        $self->{auto_close_ins} = 0;
        $self->{break_on_io}    = 1;
        $self->_select_loop;
        return $self->pumpable;
  #   };
  #   if ( $@ ) {
  #      my $x = $@;
  #      _debug $x if _debugging && $x;
  #      eval { $self->_cleanup };
  #      warn $@ if $@;
  #      die $x;
  #   }
  #   return $r;
  }
  
  =pod
  
  =item pump_nb
  
     pump_nb $h;
     $h->pump_nb;
  
  "pump() non-blocking", pumps if anything's ready to be pumped, returns
  immediately otherwise.  This is useful if you're doing some long-running
  task in the foreground, but don't want to starve any child processes.
  
  =cut
  
  sub pump_nb {
     my IPC::Run $self = shift;
  
     $self->{non_blocking} = 1;
     my $r = eval { $self->pump };
     $self->{non_blocking} = 0;
     die $@ if $@;
     return $r;
  }
  
  =pod
  
  =item pumpable
  
  Returns TRUE if calling pump() won't throw an immediate "process ended
  prematurely" exception.  This means that there are open I/O channels or
  active processes. May yield the parent processes' time slice for 0.01
  second if all pipes are to the child and all are paused.  In this case
  we can't tell if the child is dead, so we yield the processor and
  then attempt to reap the child in a nonblocking way.
  
  =cut
  
  ## Undocumented feature (don't depend on it outside this module):
  ## returns -1 if we have I/O channels open, or >0 if no I/O channels
  ## open, but we have kids running.  This allows the select loop
  ## to poll for child exit.
  sub pumpable {
     my IPC::Run $self = shift;
  
     ## There's a catch-22 we can get in to if there is only one pipe left
     ## open to the child and it's paused (ie the SCALAR it's tied to
     ## is '').  It's paused, so we're not select()ing on it, so we don't
     ## check it to see if the child attached to it is alive and it stays
     ## in @{$self->{PIPES}} forever.  So, if all pipes are paused, see if
     ## we can reap the child.
     return -1 if grep !$_->{PAUSED}, @{$self->{PIPES}};
  
     ## See if the child is dead.
     $self->reap_nb;
     return 0 unless $self->_running_kids;
  
     ## If we reap_nb and it's not dead yet, yield to it to see if it
     ## exits.
     ##
     ## A better solution would be to unpause all the pipes, but I tried that
     ## and it never errored on linux.  Sigh.  
     select undef, undef, undef, 0.0001;
  
     ## try again
     $self->reap_nb;
     return 0 unless $self->_running_kids;
  
     return -1; ## There are pipes waiting
  }
  
  
  sub _running_kids {
     my IPC::Run $self = shift;
     return grep
        defined $_->{PID} && ! defined $_->{RESULT},
        @{$self->{KIDS}};
  }
  
  =pod
  
  =item reap_nb
  
  Attempts to reap child processes, but does not block.
  
  Does not currently take any parameters, one day it will allow specific
  children to be reaped.
  
  Only call this from a signal handler if your C<perl> is recent enough
  to have safe signal handling (5.6.1 did not, IIRC, but it was being discussed
  on perl5-porters).  Calling this (or doing any significant work) in a signal
  handler on older C<perl>s is asking for seg faults.
  
  =cut
  
  my $still_runnings;
  
  sub reap_nb {
     my IPC::Run $self = shift;
  
     local $cur_self = $self;
  
     ## No more pipes, look to see if all the kids yet live, reaping those
     ## that haven't.  I'd use $SIG{CHLD}/$SIG{CLD}, but that's broken
     ## on older (SYSV) platforms and perhaps less portable than waitpid().
     ## This could be slow with a lot of kids, but that's rare and, well,
     ## a lot of kids is slow in the first place.
     ## Oh, and this keeps us from reaping other children the process
     ## may have spawned.
     for my $kid ( @{$self->{KIDS}} ) {
        if ( Win32_MODE ) {
  	 next if ! defined $kid->{PROCESS} || defined $kid->{RESULT};
  	 unless ( $kid->{PROCESS}->Wait( 0 ) ) {
  	    _debug "kid $kid->{NUM} ($kid->{PID}) still running"
                 if _debugging_details;
  	    next;
  	 }
  
           _debug "kid $kid->{NUM} ($kid->{PID}) exited"
              if _debugging;
  
  	 $kid->{PROCESS}->GetExitCode( $kid->{RESULT} )
  	    or croak "$! while GetExitCode()ing for Win32 process";
  
  	 unless ( defined $kid->{RESULT} ) {
  	    $kid->{RESULT} = "0 but true";
  	    $? = $kid->{RESULT} = 0x0F;
  	 }
  	 else {
  	    $? = $kid->{RESULT} << 8;
  	 }
        }
        else {
  	 next if ! defined $kid->{PID} || defined $kid->{RESULT};
  	 my $pid = waitpid $kid->{PID}, POSIX::WNOHANG();
  	 unless ( $pid ) {
  	    _debug "$kid->{NUM} ($kid->{PID}) still running"
                 if _debugging_details;
  	    next;
  	 }
  
  	 if ( $pid < 0 ) {
  	    _debug "No such process: $kid->{PID}\n" if _debugging;
  	    $kid->{RESULT} = "unknown result, unknown PID";
  	 }
  	 else {
              _debug "kid $kid->{NUM} ($kid->{PID}) exited"
                 if _debugging;
  
  	    confess "waitpid returned the wrong PID: $pid instead of $kid->{PID}"
  	       unless $pid = $kid->{PID};
  	    _debug "$kid->{PID} returned $?\n" if _debugging;
  	    $kid->{RESULT} = $?;
  	 }
        }
     }
  }
  
  =pod
  
  =item finish
  
  This must be called after the last start() or pump() call for a harness,
  or your system will accumulate defunct processes and you may "leak"
  file descriptors.
  
  finish() returns TRUE if all children returned 0 (and were not signaled and did
  not coredump, ie ! $?), and FALSE otherwise (this is like run(), and the
  opposite of system()).
  
  Once a harness has been finished, it may be run() or start()ed again,
  including by pump()s auto-start.
  
  If this throws an exception rather than a normal exit, the harness may
  be left in an unstable state, it's best to kill the harness to get rid
  of all the child processes, etc.
  
  Specifically, if a timeout expires in finish(), finish() will not
  kill all the children.  Call C<<$h->kill_kill>> in this case if you care.
  This differs from the behavior of L</run>.
  
  =cut
  
  sub finish {
     my IPC::Run $self = shift;
     my $options = @_ && ref $_[-1] eq 'HASH' ? pop : {};
  
     local $cur_self = $self;
  
     _debug "** finishing" if _debugging;
  
     $self->{non_blocking}   = 0;
     $self->{auto_close_ins} = 1;
     $self->{break_on_io}    = 0;
     # We don't alter $self->{clear_ins}, start() and run() control it.
  
     while ( $self->pumpable ) {
        $self->_select_loop( $options );
     }
     $self->_cleanup;
  
     return ! $self->full_result;
  }
  
  =pod
  
  =item result
  
     $h->result;
  
  Returns the first non-zero result code (ie $? >> 8).  See L</full_result> to 
  get the $? value for a child process.
  
  To get the result of a particular child, do:
  
     $h->result( 0 );  # first child's $? >> 8
     $h->result( 1 );  # second child
  
  or
  
     ($h->results)[0]
     ($h->results)[1]
  
  Returns undef if no child processes were spawned and no child number was
  specified.  Throws an exception if an out-of-range child number is passed.
  
  =cut
  
  sub _assert_finished {
     my IPC::Run $self = $_[0];
  
     croak "Harness not run" unless $self->{STATE} >= _finished;
     croak "Harness not finished running" unless $self->{STATE} == _finished;
  }
  
  
  sub result {
     &_assert_finished;
     my IPC::Run $self = shift;
     
     if ( @_ ) {
        my ( $which ) = @_;
        croak(
           "Only ",
           scalar( @{$self->{KIDS}} ),
           " child processes, no process $which"
        )
           unless $which >= 0 && $which <= $#{$self->{KIDS}};
        return $self->{KIDS}->[$which]->{RESULT} >> 8;
     }
     else {
        return undef unless @{$self->{KIDS}};
        for ( @{$self->{KIDS}} ) {
           return $_->{RESULT} >> 8 if $_->{RESULT} >> 8;
        }
     }
  }
  
  =pod
  
  =item results
  
  Returns a list of child exit values.  See L</full_results> if you want to
  know if a signal killed the child.
  
  Throws an exception if the harness is not in a finished state.
   
  =cut
  
  sub results {
     &_assert_finished;
     my IPC::Run $self = shift;
  
     # we add 0 here to stop warnings associated with "unknown result, unknown PID"
     return map { (0+$_->{RESULT}) >> 8 } @{$self->{KIDS}};
  }
  
  =pod
  
  =item full_result
  
     $h->full_result;
  
  Returns the first non-zero $?.  See L</result> to get the first $? >> 8 
  value for a child process.
  
  To get the result of a particular child, do:
  
     $h->full_result( 0 );  # first child's $? >> 8
     $h->full_result( 1 );  # second child
  
  or
  
     ($h->full_results)[0]
     ($h->full_results)[1]
  
  Returns undef if no child processes were spawned and no child number was
  specified.  Throws an exception if an out-of-range child number is passed.
  
  =cut
  
  sub full_result {
     goto &result if @_ > 1;
     &_assert_finished;
  
     my IPC::Run $self = shift;
  
     return undef unless @{$self->{KIDS}};
     for ( @{$self->{KIDS}} ) {
        return $_->{RESULT} if $_->{RESULT};
     }
  }
  
  =pod
  
  =item full_results
  
  Returns a list of child exit values as returned by C<wait>.  See L</results>
  if you don't care about coredumps or signals.
  
  Throws an exception if the harness is not in a finished state.
   
  =cut
  
  sub full_results {
     &_assert_finished;
     my IPC::Run $self = shift;
  
     croak "Harness not run" unless $self->{STATE} >= _finished;
     croak "Harness not finished running" unless $self->{STATE} == _finished;
  
     return map $_->{RESULT}, @{$self->{KIDS}};
  }
  
  
  ##
  ## Filter Scaffolding
  ##
  use vars (
     '$filter_op',        ## The op running a filter chain right now
     '$filter_num',       ## Which filter is being run right now.
  );
  
  ##
  ## A few filters and filter constructors
  ##
  
  =pod
  
  =back
  
  =back
  
  =head1 FILTERS
  
  These filters are used to modify input our output between a child
  process and a scalar or subroutine endpoint.
  
  =over
  
  =item binary
  
     run \@cmd, ">", binary, \$out;
     run \@cmd, ">", binary, \$out;  ## Any TRUE value to enable
     run \@cmd, ">", binary 0, \$out;  ## Any FALSE value to disable
  
  This is a constructor for a "binmode" "filter" that tells IPC::Run to keep
  the carriage returns that would ordinarily be edited out for you (binmode
  is usually off).  This is not a real filter, but an option masquerading as
  a filter.
  
  It's not named "binmode" because you're likely to want to call Perl's binmode
  in programs that are piping binary data around.
  
  =cut
  
  sub binary(;$) {
     my $enable = @_ ? shift : 1;
     return bless sub { $enable }, "IPC::Run::binmode_pseudo_filter";
  }
  
  =pod
  
  =item new_chunker
  
  This breaks a stream of data in to chunks, based on an optional
  scalar or regular expression parameter.  The default is the Perl
  input record separator in $/, which is a newline be default.
  
     run \@cmd, '>', new_chunker, \&lines_handler;
     run \@cmd, '>', new_chunker( "\r\n" ), \&lines_handler;
  
  Because this uses $/ by default, you should always pass in a parameter
  if you are worried about other code (modules, etc) modifying $/.
  
  If this filter is last in a filter chain that dumps in to a scalar,
  the scalar must be set to '' before a new chunk will be written to it.
  
  As an example of how a filter like this can be written, here's a
  chunker that splits on newlines:
  
     sub line_splitter {
        my ( $in_ref, $out_ref ) = @_;
  
        return 0 if length $$out_ref;
  
        return input_avail && do {
           while (1) {
              if ( $$in_ref =~ s/\A(.*?\n)// ) {
                 $$out_ref .= $1;
                 return 1;
              }
              my $hmm = get_more_input;
              unless ( defined $hmm ) {
                 $$out_ref = $$in_ref;
                 $$in_ref = '';
                 return length $$out_ref ? 1 : 0;
              }
              return 0 if $hmm eq 0;
           }
        }
     };
  
  =cut
  
  sub new_chunker(;$) {
     my ( $re ) = @_;
     $re = $/ if _empty $re;
     $re = quotemeta( $re ) unless ref $re eq 'Regexp';
     $re = qr/\A(.*?$re)/s;
  
     return sub {
        my ( $in_ref, $out_ref ) = @_;
  
        return 0 if length $$out_ref;
  
        return input_avail && do {
           while (1) {
              if ( $$in_ref =~ s/$re// ) {
                 $$out_ref .= $1;
                 return 1;
              }
              my $hmm = get_more_input;
              unless ( defined $hmm ) {
                 $$out_ref = $$in_ref;
                 $$in_ref = '';
                 return length $$out_ref ? 1 : 0;
              }
              return 0 if $hmm eq 0;
           }
        }
     };
  }
  
  =pod
  
  =item new_appender
  
  This appends a fixed string to each chunk of data read from the source
  scalar or sub.  This might be useful if you're writing commands to a
  child process that always must end in a fixed string, like "\n":
  
     run( \@cmd,
        '<', new_appender( "\n" ), \&commands,
     );
  
  Here's a typical filter sub that might be created by new_appender():
  
     sub newline_appender {
        my ( $in_ref, $out_ref ) = @_;
  
        return input_avail && do {
           $$out_ref = join( '', $$out_ref, $$in_ref, "\n" );
           $$in_ref = '';
           1;
        }
     };
  
  =cut
  
  sub new_appender($) {
     my ( $suffix ) = @_;
     croak "\$suffix undefined" unless defined $suffix;
  
     return sub {
        my ( $in_ref, $out_ref ) = @_;
  
        return input_avail && do {
           $$out_ref = join( '', $$out_ref, $$in_ref, $suffix );
           $$in_ref = '';
           1;
        }
     };
  }
  
  =item new_string_source
  
  TODO: Needs confirmation. Was previously undocumented. in this module.
  
  This is a filter which is exportable. Returns a sub which appends the data passed in to the output buffer and returns 1 if data was appended. 0 if it was an empty string and undef if no data was passed. 
  
  NOTE: Any additional variables passed to new_string_source will be passed to the sub every time it's called and appended to the output. 
  
  =cut
  
  
  sub new_string_source {
     my $ref;
     if ( @_ > 1 ) {
        $ref = [ @_ ],
     }
     else {
        $ref = shift;
     }
  
     return ref $ref eq 'SCALAR'
        ? sub {
           my ( $in_ref, $out_ref ) = @_;
  
           return defined $$ref
              ? do {
                 $$out_ref .= $$ref;
                 my $r = length $$ref ? 1 : 0;
                 $$ref = undef;
                 $r;
              }
              : undef
        }
        : sub {
           my ( $in_ref, $out_ref ) = @_;
  
           return @$ref
              ? do {
                 my $s = shift @$ref;
                 $$out_ref .= $s;
                 length $s ? 1 : 0;
              }
              : undef;
        }
  }
  
  =item new_string_sink
  
  TODO: Needs confirmation. Was previously undocumented.
  
  This is a filter which is exportable. Returns a sub which pops the data out of the input stream and pushes it onto the string.
  
  =cut
  
  sub new_string_sink {
     my ( $string_ref ) = @_;
  
     return sub {
        my ( $in_ref, $out_ref ) = @_;
  
        return input_avail && do {
           $$string_ref .= $$in_ref;
           $$in_ref = '';
           1;
        }
     };
  }
  
  
  #=item timeout
  #
  #This function defines a time interval, starting from when start() is
  #called, or when timeout() is called.  If all processes have not finished
  #by the end of the timeout period, then a "process timed out" exception
  #is thrown.
  #
  #The time interval may be passed in seconds, or as an end time in
  #"HH:MM:SS" format (any non-digit other than '.' may be used as
  #spacing and punctuation).  This is probably best shown by example:
  #
  #   $h->timeout( $val );
  #
  #   $val                     Effect
  #   ======================== =====================================
  #   undef                    Timeout timer disabled
  #   ''                       Almost immediate timeout
  #   0                        Almost immediate timeout
  #   0.000001                 timeout > 0.0000001 seconds
  #   30                       timeout > 30 seconds
  #   30.0000001               timeout > 30 seconds
  #   10:30                    timeout > 10 minutes, 30 seconds
  #
  #Timeouts are currently evaluated with a 1 second resolution, though
  #this may change in the future.  This means that setting
  #timeout($h,1) will cause a pokey child to be aborted sometime after
  #one second has elapsed and typically before two seconds have elapsed.
  #
  #This sub does not check whether or not the timeout has expired already.
  #
  #Returns the number of seconds set as the timeout (this does not change
  #as time passes, unless you call timeout( val ) again).
  #
  #The timeout does not include the time needed to fork() or spawn()
  #the child processes, though some setup time for the child processes can
  #included.  It also does not include the length of time it takes for
  #the children to exit after they've closed all their pipes to the
  #parent process.
  #
  #=cut
  #
  #sub timeout {
  #   my IPC::Run $self = shift;
  #
  #   if ( @_ ) {
  #      ( $self->{TIMEOUT} ) = @_;
  #      $self->{TIMEOUT_END} = undef;
  #      if ( defined $self->{TIMEOUT} ) {
  #	 if ( $self->{TIMEOUT} =~ /[^\d.]/ ) {
  #	    my @f = split( /[^\d\.]+/i, $self->{TIMEOUT} );
  #	    unshift @f, 0 while @f < 3;
  #	    $self->{TIMEOUT} = (($f[0]*60)+$f[1])*60+$f[2];
  #	 }
  #	 elsif ( $self->{TIMEOUT} =~ /^(\d*)(?:\.(\d*))/ ) {
  #	    $self->{TIMEOUT} = $1 + 1;
  #	 }
  #	 $self->_calc_timeout_end if $self->{STATE} >= _started;
  #      }
  #   }
  #   return $self->{TIMEOUT};
  #}
  #
  #
  #sub _calc_timeout_end {
  #   my IPC::Run $self = shift;
  #
  #   $self->{TIMEOUT_END} = defined $self->{TIMEOUT} 
  #      ? time + $self->{TIMEOUT}
  #      : undef;
  #
  #   ## We add a second because we might be at the very end of the current
  #   ## second, and we want to guarantee that we don't have a timeout even
  #   ## one second less then the timeout period.
  #   ++$self->{TIMEOUT_END} if $self->{TIMEOUT};
  #}
  
  =pod
  
  =item io
  
  Takes a filename or filehandle, a redirection operator, optional filters,
  and a source or destination (depends on the redirection operator).  Returns
  an IPC::Run::IO object suitable for harness()ing (including via start()
  or run()).
  
  This is shorthand for 
  
  
     require IPC::Run::IO;
  
        ... IPC::Run::IO->new(...) ...
  
  =cut
  
  sub io {
     require IPC::Run::IO;
     IPC::Run::IO->new( @_ );
  }
  
  =pod
  
  =item timer
  
     $h = start( \@cmd, \$in, \$out, $t = timer( 5 ) );
  
     pump $h until $out =~ /expected stuff/ || $t->is_expired;
  
  Instantiates a non-fatal timer.  pump() returns once each time a timer
  expires.  Has no direct effect on run(), but you can pass a subroutine
  to fire when the timer expires. 
  
  See L</timeout> for building timers that throw exceptions on
  expiration.
  
  See L<IPC::Run::Timer/timer> for details.
  
  =cut
  
  # Doing the prototype suppresses 'only used once' on older perls.
  sub timer;
  *timer = \&IPC::Run::Timer::timer;
  
  =pod
  
  =item timeout
  
     $h = start( \@cmd, \$in, \$out, $t = timeout( 5 ) );
  
     pump $h until $out =~ /expected stuff/;
  
  Instantiates a timer that throws an exception when it expires.
  If you don't provide an exception, a default exception that matches
  /^IPC::Run: .*timed out/ is thrown by default.  You can pass in your own
  exception scalar or reference:
  
     $h = start(
        \@cmd, \$in, \$out,
        $t = timeout( 5, exception => 'slowpoke' ),
     );
  
  or set the name used in debugging message and in the default exception
  string:
  
     $h = start(
        \@cmd, \$in, \$out,
        timeout( 50, name => 'process timer' ),
        $stall_timer = timeout( 5, name => 'stall timer' ),
     );
  
     pump $h until $out =~ /started/;
  
     $in = 'command 1';
     $stall_timer->start;
     pump $h until $out =~ /command 1 finished/;
  
     $in = 'command 2';
     $stall_timer->start;
     pump $h until $out =~ /command 2 finished/;
  
     $in = 'very slow command 3';
     $stall_timer->start( 10 );
     pump $h until $out =~ /command 3 finished/;
  
     $stall_timer->start( 5 );
     $in = 'command 4';
     pump $h until $out =~ /command 4 finished/;
  
     $stall_timer->reset; # Prevent restarting or expirng
     finish $h;
  
  See L</timer> for building non-fatal timers.
  
  See L<IPC::Run::Timer/timer> for details.
  
  =cut
  
  # Doing the prototype suppresses 'only used once' on older perls.
  sub timeout;
  *timeout = \&IPC::Run::Timer::timeout;
  
  =pod
  
  =back
  
  =head1 FILTER IMPLEMENTATION FUNCTIONS
  
  These functions are for use from within filters.
  
  =over
  
  =item input_avail
  
  Returns TRUE if input is available.  If none is available, then 
  &get_more_input is called and its result is returned.
  
  This is usually used in preference to &get_more_input so that the
  calling filter removes all data from the $in_ref before more data
  gets read in to $in_ref.
  
  C<input_avail> is usually used as part of a return expression:
  
     return input_avail && do {
        ## process the input just gotten
        1;
     };
  
  This technique allows input_avail to return the undef or 0 that a
  filter normally returns when there's no input to process.  If a filter
  stores intermediate values, however, it will need to react to an
  undef:
  
     my $got = input_avail;
     if ( ! defined $got ) {
        ## No more input ever, flush internal buffers to $out_ref
     }
     return $got unless $got;
     ## Got some input, move as much as need be
     return 1 if $added_to_out_ref;
  
  =cut
  
  sub input_avail() {
     confess "Undefined FBUF ref for $filter_num+1"
        unless defined $filter_op->{FBUFS}->[$filter_num+1];
     length ${$filter_op->{FBUFS}->[$filter_num+1]} || get_more_input;
  }
  
  =pod
  
  =item get_more_input
  
  This is used to fetch more input in to the input variable.  It returns
  undef if there will never be any more input, 0 if there is none now,
  but there might be in the future, and TRUE if more input was gotten.
  
  C<get_more_input> is usually used as part of a return expression,
  see L</input_avail> for more information.
  
  =cut
  
  ##
  ## Filter implementation interface
  ##
  sub get_more_input() {
     ++$filter_num;
     my $r = eval {
        confess "get_more_input() called and no more filters in chain"
           unless defined $filter_op->{FILTERS}->[$filter_num];
        $filter_op->{FILTERS}->[$filter_num]->(
           $filter_op->{FBUFS}->[$filter_num+1],
           $filter_op->{FBUFS}->[$filter_num],
        ); # if defined ${$filter_op->{FBUFS}->[$filter_num+1]};
     };
     --$filter_num;
     die $@ if $@;
     return $r;
  }
  
  1;
  
  =pod
  
  =back
  
  =head1 TODO
  
  These will be addressed as needed and as time allows.
  
  Stall timeout.
  
  Expose a list of child process objects.  When I do this,
  each child process is likely to be blessed into IPC::Run::Proc.
  
  $kid->abort(), $kid->kill(), $kid->signal( $num_or_name ).
  
  Write tests for /(full_)?results?/ subs.
  
  Currently, pump() and run() only work on systems where select() works on the
  filehandles returned by pipe().  This does *not* include ActiveState on Win32,
  although it does work on cygwin under Win32 (thought the tests whine a bit).
  I'd like to rectify that, suggestions and patches welcome.
  
  Likewise start() only fully works on fork()/exec() machines (well, just
  fork() if you only ever pass perl subs as subprocesses).  There's
  some scaffolding for calling Open3::spawn_with_handles(), but that's
  untested, and not that useful with limited select().
  
  Support for C<\@sub_cmd> as an argument to a command which
  gets replaced with /dev/fd or the name of a temporary file containing foo's
  output.  This is like <(sub_cmd ...) found in bash and csh (IIRC).
  
  Allow multiple harnesses to be combined as independent sets of processes
  in to one 'meta-harness'.
  
  Allow a harness to be passed in place of an \@cmd.  This would allow
  multiple harnesses to be aggregated.
  
  Ability to add external file descriptors w/ filter chains and endpoints.
  
  Ability to add timeouts and timing generators (i.e. repeating timeouts).
  
  High resolution timeouts.
  
  =head1 Win32 LIMITATIONS
  
  =over
  
  =item Fails on Win9X
  
  If you want Win9X support, you'll have to debug it or fund me because I
  don't use that system any more.  The Win32 subsysem has been extended to
  use temporary files in simple run() invocations and these may actually
  work on Win9X too, but I don't have time to work on it.
  
  =item May deadlock on Win2K (but not WinNT4 or WinXPPro)
  
  Spawning more than one subprocess on Win2K causes a deadlock I haven't
  figured out yet, but simple uses of run() often work.  Passes all tests
  on WinXPPro and WinNT.
  
  =item no support yet for <pty< and >pty>
  
  These are likely to be implemented as "<" and ">" with binmode on, not
  sure.
  
  =item no support for file descriptors higher than 2 (stderr)
  
  Win32 only allows passing explicit fds 0, 1, and 2.  If you really, really need to pass file handles, us Win32API:: GetOsFHandle() or ::FdGetOsFHandle() to
  get the integer handle and pass it to the child process using the command
  line, environment, stdin, intermediary file, or other IPC mechanism.  Then
  use that handle in the child (Win32API.pm provides ways to reconstitute
  Perl file handles from Win32 file handles).
  
  =item no support for subroutine subprocesses (CODE refs)
  
  Can't fork(), so the subroutines would have no context, and closures certainly
  have no meaning
  
  Perhaps with Win32 fork() emulation, this can be supported in a limited
  fashion, but there are other very serious problems with that: all parent
  fds get dup()ed in to the thread emulating the forked process, and that
  keeps the parent from being able to close all of the appropriate fds.
  
  =item no support for init => sub {} routines.
  
  Win32 processes are created from scratch, there is no way to do an init
  routine that will affect the running child.  Some limited support might
  be implemented one day, do chdir() and %ENV changes can be made.
  
  =item signals
  
  Win32 does not fully support signals.  signal() is likely to cause errors
  unless sending a signal that Perl emulates, and C<kill_kill()> is immediately
  fatal (there is no grace period).
  
  =item helper processes
  
  IPC::Run uses helper processes, one per redirected file, to adapt between the
  anonymous pipe connected to the child and the TCP socket connected to the
  parent.  This is a waste of resources and will change in the future to either
  use threads (instead of helper processes) or a WaitForMultipleObjects call
  (instead of select).  Please contact me if you can help with the
  WaitForMultipleObjects() approach; I haven't figured out how to get at it
  without C code.
  
  =item shutdown pause
  
  There seems to be a pause of up to 1 second between when a child program exits
  and the corresponding sockets indicate that they are closed in the parent.
  Not sure why.
  
  =item binmode
  
  binmode is not supported yet.  The underpinnings are implemented, just ask
  if you need it.
  
  =item IPC::Run::IO
  
  IPC::Run::IO objects can be used on Unix to read or write arbitrary files.  On
  Win32, they will need to use the same helper processes to adapt from
  non-select()able filehandles to select()able ones (or perhaps
  WaitForMultipleObjects() will work with them, not sure).
  
  =item startup race conditions
  
  There seems to be an occasional race condition between child process startup
  and pipe closings.  It seems like if the child is not fully created by the time
  CreateProcess returns and we close the TCP socket being handed to it, the
  parent socket can also get closed.  This is seen with the Win32 pumper
  applications, not the "real" child process being spawned.
  
  I assume this is because the kernel hasn't gotten around to incrementing the
  reference count on the child's end (since the child was slow in starting), so
  the parent's closing of the child end causes the socket to be closed, thus
  closing the parent socket.
  
  Being a race condition, it's hard to reproduce, but I encountered it while
  testing this code on a drive share to a samba box.  In this case, it takes
  t/run.t a long time to spawn it's chile processes (the parent hangs in the
  first select for several seconds until the child emits any debugging output).
  
  I have not seen it on local drives, and can't reproduce it at will,
  unfortunately.  The symptom is a "bad file descriptor in select()" error, and,
  by turning on debugging, it's possible to see that select() is being called on
  a no longer open file descriptor that was returned from the _socket() routine
  in Win32Helper.  There's a new confess() that checks for this ("PARENT_HANDLE
  no longer open"), but I haven't been able to reproduce it (typically).
  
  =back
  
  =head1 LIMITATIONS
  
  On Unix, requires a system that supports C<waitpid( $pid, WNOHANG )> so
  it can tell if a child process is still running.
  
  PTYs don't seem to be non-blocking on some versions of Solaris. Here's a
  test script contributed by Borislav Deianov <borislav@ensim.com> to see
  if you have the problem.  If it dies, you have the problem.
  
     #!/usr/bin/perl
  
     use IPC::Run qw(run);
     use Fcntl;
     use IO::Pty;
  
     sub makecmd {
         return ['perl', '-e', 
                 '<STDIN>, print "\n" x '.$_[0].'; while(<STDIN>){last if /end/}'];
     }
  
     #pipe R, W;
     #fcntl(W, F_SETFL, O_NONBLOCK);
     #while (syswrite(W, "\n", 1)) { $pipebuf++ };
     #print "pipe buffer size is $pipebuf\n";
     my $pipebuf=4096;
     my $in = "\n" x ($pipebuf * 2) . "end\n";
     my $out;
  
     $SIG{ALRM} = sub { die "Never completed!\n" };
  
     print "reading from scalar via pipe...";
     alarm( 2 );
     run(makecmd($pipebuf * 2), '<', \$in, '>', \$out);
     alarm( 0 );
     print "done\n";
  
     print "reading from code via pipe... ";
     alarm( 2 );
     run(makecmd($pipebuf * 3), '<', sub { $t = $in; undef $in; $t}, '>', \$out);
     alarm( 0 );
     print "done\n";
  
     $pty = IO::Pty->new();
     $pty->blocking(0);
     $slave = $pty->slave();
     while ($pty->syswrite("\n", 1)) { $ptybuf++ };
     print "pty buffer size is $ptybuf\n";
     $in = "\n" x ($ptybuf * 3) . "end\n";
  
     print "reading via pty... ";
     alarm( 2 );
     run(makecmd($ptybuf * 3), '<pty<', \$in, '>', \$out);
     alarm(0);
     print "done\n";
  
  No support for ';', '&&', '||', '{ ... }', etc: use perl's, since run()
  returns TRUE when the command exits with a 0 result code.
  
  Does not provide shell-like string interpolation.
  
  No support for C<cd>, C<setenv>, or C<export>: do these in an init() sub
  
     run(
        \cmd,
           ...
           init => sub {
              chdir $dir or die $!;
              $ENV{FOO}='BAR'
           }
     );
  
  Timeout calculation does not allow absolute times, or specification of
  days, months, etc.
  
  B<WARNING:> Function coprocesses (C<run \&foo, ...>) suffer from two
  limitations.  The first is that it is difficult to close all filehandles the
  child inherits from the parent, since there is no way to scan all open
  FILEHANDLEs in Perl and it both painful and a bit dangerous to close all open
  file descriptors with C<POSIX::close()>. Painful because we can't tell which
  fds are open at the POSIX level, either, so we'd have to scan all possible fds
  and close any that we don't want open (normally C<exec()> closes any
  non-inheritable but we don't C<exec()> for &sub processes.
  
  The second problem is that Perl's DESTROY subs and other on-exit cleanup gets
  run in the child process.  If objects are instantiated in the parent before the
  child is forked, the DESTROY will get run once in the parent and once in
  the child.  When coprocess subs exit, POSIX::exit is called to work around this,
  but it means that objects that are still referred to at that time are not
  cleaned up.  So setting package vars or closure vars to point to objects that
  rely on DESTROY to affect things outside the process (files, etc), will
  lead to bugs.
  
  I goofed on the syntax: "<pipe" vs. "<pty<" and ">filename" are both
  oddities.
  
  =head1 TODO
  
  =over
  
  =item Allow one harness to "adopt" another:
  
     $new_h = harness \@cmd2;
     $h->adopt( $new_h );
  
  =item Close all filehandles not explicitly marked to stay open.
  
  The problem with this one is that there's no good way to scan all open
  FILEHANDLEs in Perl, yet you don't want child processes inheriting handles
  willy-nilly.
  
  =back
  
  =head1 INSPIRATION
  
  Well, select() and waitpid() badly needed wrapping, and open3() isn't
  open-minded enough for me.
  
  The shell-like API inspired by a message Russ Allbery sent to perl5-porters,
  which included:
  
     I've thought for some time that it would be
     nice to have a module that could handle full Bourne shell pipe syntax
     internally, with fork and exec, without ever invoking a shell.  Something
     that you could give things like:
  
     pipeopen (PIPE, [ qw/cat file/ ], '|', [ 'analyze', @args ], '>&3');
  
  Message ylln51p2b6.fsf@windlord.stanford.edu, on 2000/02/04.
  
  =head1 SUPPORT
  
  Bugs should always be submitted via the CPAN bug tracker
  
  L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=IPC-Run>
  
  For other issues, contact the maintainer (the first listed author)
  
  =head1 AUTHORS
  
  Adam Kennedy <adamk@cpan.org>
  
  Barrie Slaymaker <barries@slaysys.com>
  
  =head1 COPYRIGHT
  
  Some parts copyright 2008 - 2009 Adam Kennedy.
  
  Copyright 1999 Barrie Slaymaker.
  
  You may distribute under the terms of either the GNU General Public
  License or the Artistic License, as specified in the README file.
  
  =cut
IPC_RUN

    $main::fatpacked{"IPC/Run/Debug.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'IPC_RUN_DEBUG';
  package IPC::Run::Debug;
  
  =pod
  
  =head1 NAME
  
  IPC::Run::Debug - debugging routines for IPC::Run
  
  =head1 SYNOPSIS
  
     ##
     ## Environment variable usage
     ##
     ## To force debugging off and shave a bit of CPU and memory
     ## by compile-time optimizing away all debugging code in IPC::Run
     ## (debug => ...) options to IPC::Run will be ignored.
     export IPCRUNDEBUG=none
  
     ## To force debugging on (levels are from 0..10)
     export IPCRUNDEBUG=basic
  
     ## Leave unset or set to "" to compile in debugging support and
     ## allow runtime control of it using the debug option.
  
  =head1 DESCRIPTION
  
  Controls IPC::Run debugging.  Debugging levels are now set by using words,
  but the numbers shown are still supported for backwards compatibility:
  
     0  none         disabled (special, see below)
     1  basic        what's running
     2  data         what's being sent/recieved
     3  details      what's going on in more detail
     4  gory         way too much detail for most uses
     10 all          use this when submitting bug reports
        noopts       optimizations forbidden due to inherited STDIN
  
  The C<none> level is special when the environment variable IPCRUNDEBUG
  is set to this the first time IPC::Run::Debug is loaded: it prevents
  the debugging code from being compiled in to the remaining IPC::Run modules,
  saving a bit of cpu.
  
  To do this in a script, here's a way that allows it to be overridden:
  
     BEGIN {
        unless ( defined $ENV{IPCRUNDEBUG} ) {
  	 eval 'local $ENV{IPCRUNDEBUG} = "none"; require IPC::Run::Debug"'
  	    or die $@;
        }
     }
  
  This should force IPC::Run to not be debuggable unless somebody sets
  the IPCRUNDEBUG flag; modify this formula to grep @ARGV if need be:
  
     BEGIN {
        unless ( grep /^--debug/, @ARGV ) {
  	 eval 'local $ENV{IPCRUNDEBUG} = "none"; require IPC::Run::Debug"'
  	 or die $@;
     }
  
  Both of those are untested.
  
  =cut
  
  ## We use @EXPORT for the end user's convenience: there's only one function
  ## exported, it's homonymous with the module, it's an unusual name, and
  ## it can be suppressed by "use IPC::Run ();".
  
  use strict;
  use Exporter;
  use vars qw{$VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS};
  BEGIN {
  	$VERSION = '0.90';
  	@ISA     = qw( Exporter );
  	@EXPORT  = qw(
  		_debug
  		_debug_desc_fd
  		_debugging
  		_debugging_data
  		_debugging_details
  		_debugging_gory_details
  		_debugging_not_optimized
  		_set_child_debug_name
  	);
  	
  	@EXPORT_OK = qw(
  		_debug_init
  		_debugging_level
  		_map_fds
  	);
  	%EXPORT_TAGS = (
  		default => \@EXPORT,
  		all     => [ @EXPORT, @EXPORT_OK ],
  	);
  }
  
  my $disable_debugging =
     defined $ENV{IPCRUNDEBUG}
     && (
        ! $ENV{IPCRUNDEBUG}
        || lc $ENV{IPCRUNDEBUG} eq "none"
     );
  
  eval( $disable_debugging ? <<'STUBS' : <<'SUBS' ) or die $@;
  sub _map_fds()                 { "" }
  sub _debug                     {}
  sub _debug_desc_fd             {}
  sub _debug_init                {}
  sub _set_child_debug_name      {}
  sub _debugging()               { 0 }
  sub _debugging_level()         { 0 }
  sub _debugging_data()          { 0 }
  sub _debugging_details()       { 0 }
  sub _debugging_gory_details()  { 0 }
  sub _debugging_not_optimized() { 0 }
  
  1;
  STUBS
  
  use POSIX;
  
  sub _map_fds {
     my $map = '';
     my $digit = 0;
     my $in_use;
     my $dummy;
     for my $fd (0..63) {
        ## I'd like a quicker way (less user, cpu & expecially sys and kernal
        ## calls) to detect open file descriptors.  Let me know...
        ## Hmmm, could do a 0 length read and check for bad file descriptor...
        ## but that segfaults on Win32
        my $test_fd = POSIX::dup( $fd );
        $in_use = defined $test_fd;
        POSIX::close $test_fd if $in_use;
        $map .= $in_use ? $digit : '-';
        $digit = 0 if ++$digit > 9;
     }
     warn "No fds open???" unless $map =~ /\d/;
     $map =~ s/(.{1,12})-*$/$1/;
     return $map;
  }
  
  use vars qw( $parent_pid );
  
  $parent_pid = $$;
  
  ## TODO: move debugging to it's own module and make it compile-time
  ## optimizable.
  
  ## Give kid process debugging nice names
  my $debug_name;
  
  sub _set_child_debug_name {
     $debug_name = shift;
  }
  
  ## There's a bit of hackery going on here.
  ##
  ## We want to have any code anywhere be able to emit
  ## debugging statements without knowing what harness the code is
  ## being called in/from, since we'd need to pass a harness around to
  ## everything.
  ##
  ## Thus, $cur_self was born.
  #
  my %debug_levels = (
     none    => 0,
     basic   => 1,
     data    => 2,
     details => 3,
     gore           => 4,
     gory_details   => 4,
     "gory details" => 4,
     gory           => 4,
     gorydetails    => 4,
     all     => 10,
     notopt  => 0,
  );
  
  my $warned;
  
  sub _debugging_level() {
     my $level = 0;
  
     $level = $IPC::Run::cur_self->{debug} || 0
        if $IPC::Run::cur_self
           && ( $IPC::Run::cur_self->{debug} || 0 ) >= $level;
  
     if ( defined $ENV{IPCRUNDEBUG} ) {
        my $v = $ENV{IPCRUNDEBUG};
        $v = $debug_levels{lc $v} if $v =~ /[a-zA-Z]/;
        unless ( defined $v ) {
  	 $warned ||= warn "Unknown debug level $ENV{IPCRUNDEBUG}, assuming 'basic' (1)\n";
  	 $v = 1;
        }
        $level = $v if $v > $level;
     }
     return $level;
  }
  
  sub _debugging_atleast($) {
     my $min_level = shift || 1;
  
     my $level = _debugging_level;
     
     return $level >= $min_level ? $level : 0;
  }
  
  sub _debugging()               { _debugging_atleast 1 }
  sub _debugging_data()          { _debugging_atleast 2 }
  sub _debugging_details()       { _debugging_atleast 3 }
  sub _debugging_gory_details()  { _debugging_atleast 4 }
  sub _debugging_not_optimized() { ( $ENV{IPCRUNDEBUG} || "" ) eq "notopt" }
  
  sub _debug_init {
     ## This routine is called only in spawned children to fake out the
     ## debug routines so they'll emit debugging info.
     $IPC::Run::cur_self = {};
     (  $parent_pid,
        $^T, 
        $IPC::Run::cur_self->{debug}, 
        $IPC::Run::cur_self->{DEBUG_FD}, 
        $debug_name 
     ) = @_;
  }
  
  
  sub _debug {
  #   return unless _debugging || _debugging_not_optimized;
  
     my $fd = defined &IPC::Run::_debug_fd
        ? IPC::Run::_debug_fd()
        : fileno STDERR;
  
     my $s;
     my $debug_id;
     $debug_id = join( 
        " ",
        join(
           "",
           defined $IPC::Run::cur_self ? "#$IPC::Run::cur_self->{ID}" : (),
           "($$)",
        ),
        defined $debug_name && length $debug_name ? $debug_name        : (),
     );
     my $prefix = join(
        "",
        "IPC::Run",
        sprintf( " %04d", time - $^T ),
        ( _debugging_details ? ( " ", _map_fds ) : () ),
        length $debug_id ? ( " [", $debug_id, "]" ) : (),
        ": ",
     );
  
     my $msg = join( '', map defined $_ ? $_ : "<undef>", @_ );
     chomp $msg;
     $msg =~ s{^}{$prefix}gm;
     $msg .= "\n";
     POSIX::write( $fd, $msg, length $msg );
  }
  
  
  my @fd_descs = ( 'stdin', 'stdout', 'stderr' );
  
  sub _debug_desc_fd {
     return unless _debugging;
     my $text = shift;
     my $op = pop;
     my $kid = $_[0];
  
  Carp::carp join " ", caller(0), $text, $op  if defined $op  && UNIVERSAL::isa( $op, "IO::Pty" );
  
     _debug(
        $text,
        ' ',
        ( defined $op->{FD}
           ? $op->{FD} < 3
              ? ( $fd_descs[$op->{FD}] )
              : ( 'fd ', $op->{FD} )
           : $op->{FD}
        ),
        ( defined $op->{KFD}
           ? (
              ' (kid',
              ( defined $kid ? ( ' ', $kid->{NUM}, ) : () ),
              "'s ",
              ( $op->{KFD} < 3
                 ? $fd_descs[$op->{KFD}]
                 : defined $kid
                    && defined $kid->{DEBUG_FD}
                    && $op->{KFD} == $kid->{DEBUG_FD}
                    ? ( 'debug (', $op->{KFD}, ')' )
                    : ( 'fd ', $op->{KFD} )
              ),
              ')',
           )
           : ()
        ),
     );
  }
  
  1;
  
  SUBS
  
  =pod
  
  =head1 AUTHOR
  
  Barrie Slaymaker <barries@slaysys.com>, with numerous suggestions by p5p.
  
  =cut
IPC_RUN_DEBUG

    $main::fatpacked{"IPC/Run/IO.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'IPC_RUN_IO';
  package IPC::Run::IO;
  
  =head1 NAME
  
  IPC::Run::IO -- I/O channels for IPC::Run.
  
  =head1 SYNOPSIS
  
  B<NOT IMPLEMENTED YET ON Win32! Win32 does not allow select() on
  normal file descriptors; IPC::RUN::IO needs to use IPC::Run::Win32Helper
  to do this.>
  
     use IPC::Run qw( io );
  
     ## The sense of '>' and '<' is opposite of perl's open(),
     ## but agrees with IPC::Run.
     $io = io( "filename", '>',  \$recv );
     $io = io( "filename", 'r',  \$recv );
  
     ## Append to $recv:
     $io = io( "filename", '>>', \$recv );
     $io = io( "filename", 'ra', \$recv );
  
     $io = io( "filename", '<',  \$send );
     $io = io( "filename", 'w',  \$send );
  
     $io = io( "filename", '<<', \$send );
     $io = io( "filename", 'wa', \$send );
  
     ## Handles / IO objects that the caller opens:
     $io = io( \*HANDLE,   '<',  \$send );
  
     $f = IO::Handle->new( ... ); # Any subclass of IO::Handle
     $io = io( $f, '<', \$send );
  
     require IPC::Run::IO;
     $io = IPC::Run::IO->new( ... );
  
     ## Then run(), harness(), or start():
     run $io, ...;
  
     ## You can, of course, use io() or IPC::Run::IO->new() as an
     ## argument to run(), harness, or start():
     run io( ... );
  
  =head1 DESCRIPTION
  
  This class and module allows filehandles and filenames to be harnessed for
  I/O when used IPC::Run, independent of anything else IPC::Run is doing
  (except that errors & exceptions can affect all things that IPC::Run is
  doing).
  
  =head1 SUBCLASSING
  
  INCOMPATIBLE CHANGE: due to the awkwardness introduced in ripping pseudohashes
  out of Perl, this class I<no longer> uses the fields pragma.
  
  =cut
  
  ## This class is also used internally by IPC::Run in a very intimate way,
  ## since this is a partial factoring of code from IPC::Run plus some code
  ## needed to do standalone channels.  This factoring process will continue
  ## at some point.  Don't know how far how fast.
  
  use strict;
  use Carp;
  use Fcntl;
  use Symbol;
  
  use IPC::Run::Debug;
  use IPC::Run qw( Win32_MODE );
  
  use vars qw{$VERSION};
  BEGIN {
  	$VERSION = '0.90';
  	if ( Win32_MODE ) {
  		eval "use IPC::Run::Win32Helper; require IPC::Run::Win32IO; 1"
  		or ( $@ && die ) or die "$!";
  	}
  }
  
  sub _empty($);
  *_empty = \&IPC::Run::_empty;
  
  =head1 SUBROUTINES
  
  =over 4
  
  =item new
  
  I think it takes >> or << along with some other data.
  
  TODO: Needs more thorough documentation. Patches welcome.
  
  =cut
  
  sub new {
     my $class = shift;
     $class = ref $class || $class;
  
     my ( $external, $type, $internal ) = ( shift, shift, pop );
  
     croak "$class: '$_' is not a valid I/O operator"
        unless $type =~ /^(?:<<?|>>?)$/;
  
     my IPC::Run::IO $self = $class->_new_internal(
        $type, undef, undef, $internal, undef, @_
     );
  
     if ( ! ref $external ) {
        $self->{FILENAME} = $external;
     }
     elsif ( ref eq 'GLOB' || UNIVERSAL::isa( $external, 'IO::Handle' ) ) {
        $self->{HANDLE} = $external;
        $self->{DONT_CLOSE} = 1;
     }
     else {
        croak "$class: cannot accept " . ref( $external ) . " to do I/O with";
     }
  
     return $self;
  }
  
  
  ## IPC::Run uses this ctor, since it preparses things and needs more
  ## smarts.
  sub _new_internal {
     my $class = shift;
     $class = ref $class || $class;
  
     $class = "IPC::Run::Win32IO"
        if Win32_MODE && $class eq "IPC::Run::IO";
  
     my IPC::Run::IO $self;
     $self = bless {}, $class;
  
     my ( $type, $kfd, $pty_id, $internal, $binmode, @filters ) = @_;
  
     # Older perls (<=5.00503, at least) don't do list assign to
     # psuedo-hashes well.
     $self->{TYPE}    = $type;
     $self->{KFD}     = $kfd;
     $self->{PTY_ID}  = $pty_id;
     $self->binmode( $binmode );
     $self->{FILTERS} = [ @filters ];
  
     ## Add an adapter to the end of the filter chain (which is usually just the
     ## read/writer sub pushed by IPC::Run) to the DEST or SOURCE, if need be.
     if ( $self->op =~ />/ ) {
        croak "'$_' missing a destination" if _empty $internal;
        $self->{DEST} = $internal;
        if ( UNIVERSAL::isa( $self->{DEST}, 'CODE' ) ) {
           ## Put a filter on the end of the filter chain to pass the
           ## output on to the CODE ref.  For SCALAR refs, the last
           ## filter in the chain writes directly to the scalar itself.  See
           ## _init_filters().  For CODE refs, however, we need to adapt from
           ## the SCALAR to calling the CODE.
           unshift( 
              @{$self->{FILTERS}},
              sub {
                 my ( $in_ref ) = @_;
  
                 return IPC::Run::input_avail() && do {
          	  $self->{DEST}->( $$in_ref );
          	  $$in_ref = '';
          	  1;
                 }
              }
           );
        }
     }
     else {
        croak "'$_' missing a source" if _empty $internal;
        $self->{SOURCE} = $internal;
        if ( UNIVERSAL::isa( $internal, 'CODE' ) ) {
           push(
              @{$self->{FILTERS}},
              sub {
                 my ( $in_ref, $out_ref ) = @_;
                 return 0 if length $$out_ref;
  
                 return undef
          	  if $self->{SOURCE_EMPTY};
  
                 my $in = $internal->();
                 unless ( defined $in ) {
          	  $self->{SOURCE_EMPTY} = 1;
          	  return undef 
                 }
                 return 0 unless length $in;
                 $$out_ref = $in;
  
                 return 1;
              }
           );
        }
        elsif ( UNIVERSAL::isa( $internal, 'SCALAR' ) ) {
           push(
              @{$self->{FILTERS}},
              sub {
                 my ( $in_ref, $out_ref ) = @_;
                 return 0 if length $$out_ref;
  
                 ## pump() clears auto_close_ins, finish() sets it.
                 return $self->{HARNESS}->{auto_close_ins} ? undef : 0
          	  if IPC::Run::_empty ${$self->{SOURCE}}
          	     || $self->{SOURCE_EMPTY};
  
                 $$out_ref = $$internal;
                 eval { $$internal = '' }
          	  if $self->{HARNESS}->{clear_ins};
  
                 $self->{SOURCE_EMPTY} = $self->{HARNESS}->{auto_close_ins};
  
                 return 1;
              }
           );
        }
     }
  
     return $self;
  }
  
  =item filename
  
  Gets/sets the filename.  Returns the value after the name change, if
  any.
  
  =cut
  
  sub filename {
     my IPC::Run::IO $self = shift;
     $self->{FILENAME} = shift if @_;
     return $self->{FILENAME};
  }
  
  =item init
  
  Does initialization required before this can be run.  This includes open()ing
  the file, if necessary, and clearing the destination scalar if necessary.
  
  =cut
  
  sub init {
     my IPC::Run::IO $self = shift;
  
     $self->{SOURCE_EMPTY} = 0;
     ${$self->{DEST}} = ''
        if $self->mode =~ /r/ && ref $self->{DEST} eq 'SCALAR';
  
     $self->open if defined $self->filename;
     $self->{FD} = $self->fileno;
  
     if ( ! $self->{FILTERS} ) {
        $self->{FBUFS} = undef;
     }
     else {
        @{$self->{FBUFS}} = map {
           my $s = "";
           \$s;
        } ( @{$self->{FILTERS}}, '' );
  
        $self->{FBUFS}->[0] = $self->{DEST}
           if $self->{DEST} && ref $self->{DEST} eq 'SCALAR';
        push @{$self->{FBUFS}}, $self->{SOURCE};
     }
  
     return undef;
  }
  
  
  =item open
  
  If a filename was passed in, opens it.  Determines if the handle is open
  via fileno().  Throws an exception on error.
  
  =cut
  
  my %open_flags = (
     '>'  => O_RDONLY,
     '>>' => O_RDONLY,
     '<'  => O_WRONLY | O_CREAT | O_TRUNC,
     '<<' => O_WRONLY | O_CREAT | O_APPEND,
  );
  
  sub open {
     my IPC::Run::IO $self = shift;
  
     croak "IPC::Run::IO: Can't open() a file with no name"
        unless defined $self->{FILENAME};
     $self->{HANDLE} = gensym unless $self->{HANDLE};
  
     _debug
        "opening '", $self->filename, "' mode '", $self->mode, "'"
     if _debugging_data;
     sysopen(
        $self->{HANDLE},
        $self->filename,
        $open_flags{$self->op},
     ) or croak
           "IPC::Run::IO: $! opening '$self->{FILENAME}', mode '" . $self->mode . "'";
  
     return undef;
  }
  
  
  =item open_pipe
  
  If this is a redirection IO object, this opens the pipe in a platform
  independent manner.
  
  =cut
  
  sub _do_open {
     my $self = shift;
     my ( $child_debug_fd, $parent_handle ) = @_;
  
  
     if ( $self->dir eq "<" ) {
        ( $self->{TFD}, $self->{FD} ) = IPC::Run::_pipe_nb;
        if ( $parent_handle ) {
           CORE::open $parent_handle, ">&=$self->{FD}"
              or croak "$! duping write end of pipe for caller";
        }
     }
     else {
        ( $self->{FD}, $self->{TFD} ) = IPC::Run::_pipe;
        if ( $parent_handle ) {
           CORE::open $parent_handle, "<&=$self->{FD}"
              or croak "$! duping read end of pipe for caller";
        }
     }
  }
  
  sub open_pipe {
     my IPC::Run::IO $self = shift;
  
     ## Hmmm, Maybe allow named pipes one day.  But until then...
     croak "IPC::Run::IO: Can't pipe() when a file name has been set"
        if defined $self->{FILENAME};
  
     $self->_do_open( @_ );
  
     ## return ( child_fd, parent_fd )
     return $self->dir eq "<"
        ? ( $self->{TFD}, $self->{FD} )
        : ( $self->{FD}, $self->{TFD} );
  }
  
  
  sub _cleanup { ## Called from Run.pm's _cleanup
     my $self = shift;
     undef $self->{FAKE_PIPE};
  }
  
  
  =item close
  
  Closes the handle.  Throws an exception on failure.
  
  
  =cut
  
  sub close {
     my IPC::Run::IO $self = shift;
  
     if ( defined $self->{HANDLE} ) {
        close $self->{HANDLE}
           or croak(  "IPC::Run::IO: $! closing "
              . ( defined $self->{FILENAME}
                 ? "'$self->{FILENAME}'"
                 : "handle"
              )
           );
     }
     else {
        IPC::Run::_close( $self->{FD} );
     }
  
     $self->{FD} = undef;
  
     return undef;
  }
  
  =item fileno
  
  Returns the fileno of the handle.  Throws an exception on failure.
  
  
  =cut
  
  sub fileno {
     my IPC::Run::IO $self = shift;
  
     my $fd = fileno $self->{HANDLE};
     croak(  "IPC::Run::IO: $! "
           . ( defined $self->{FILENAME}
              ? "'$self->{FILENAME}'"
              : "handle"
           )
        ) unless defined $fd;
  
     return $fd;
  }
  
  =item mode
  
  Returns the operator in terms of 'r', 'w', and 'a'.  There is a state
  'ra', unlike Perl's open(), which indicates that data read from the
  handle or file will be appended to the output if the output is a scalar.
  This is only meaningful if the output is a scalar, it has no effect if
  the output is a subroutine.
  
  The redirection operators can be a little confusing, so here's a reference
  table:
  
     >      r      Read from handle in to process
     <      w      Write from process out to handle
     >>     ra     Read from handle in to process, appending it to existing
                   data if the destination is a scalar.
     <<     wa     Write from process out to handle, appending to existing
                   data if IPC::Run::IO opened a named file.
  
  =cut
  
  sub mode {
     my IPC::Run::IO $self = shift;
  
     croak "IPC::Run::IO: unexpected arguments for mode(): @_" if @_;
  
     ## TODO: Optimize this
     return ( $self->{TYPE} =~ /</     ? 'w' : 'r' ) . 
            ( $self->{TYPE} =~ /<<|>>/ ? 'a' : ''  );
  }
  
  
  =item op
  
  Returns the operation: '<', '>', '<<', '>>'.  See L</mode> if you want
  to spell these 'r', 'w', etc.
  
  =cut
  
  sub op {
     my IPC::Run::IO $self = shift;
  
     croak "IPC::Run::IO: unexpected arguments for op(): @_" if @_;
  
     return $self->{TYPE};
  }
  
  =item binmode
  
  Sets/gets whether this pipe is in binmode or not.  No effect off of Win32
  OSs, of course, and on Win32, no effect after the harness is start()ed.
  
  =cut
  
  sub binmode {
     my IPC::Run::IO $self = shift;
  
     $self->{BINMODE} = shift if @_;
  
     return $self->{BINMODE};
  }
  
  
  =item dir
  
  Returns the first character of $self->op.  This is either "<" or ">".
  
  =cut
  
  sub dir {
     my IPC::Run::IO $self = shift;
  
     croak "IPC::Run::IO: unexpected arguments for dir(): @_" if @_;
  
     return substr $self->{TYPE}, 0, 1;
  }
  
  
  ##
  ## Filter Scaffolding
  ##
  #my $filter_op ;        ## The op running a filter chain right now
  #my $filter_num;        ## Which filter is being run right now.
  
  use vars (
  '$filter_op',        ## The op running a filter chain right now
  '$filter_num'        ## Which filter is being run right now.
  );
  
  sub _init_filters {
     my IPC::Run::IO $self = shift;
  
  confess "\$self not an IPC::Run::IO" unless UNIVERSAL::isa( $self, "IPC::Run::IO" );
     $self->{FBUFS} = [];
  
     $self->{FBUFS}->[0] = $self->{DEST}
        if $self->{DEST} && ref $self->{DEST} eq 'SCALAR';
  
     return unless $self->{FILTERS} && @{$self->{FILTERS}};
  
     push @{$self->{FBUFS}}, map {
        my $s = "";
        \$s;
     } ( @{$self->{FILTERS}}, '' );
  
     push @{$self->{FBUFS}}, $self->{SOURCE};
  }
  
  =item poll
  
  TODO: Needs confirmation that this is correct. Was previously undocumented.
  
  I believe this is polling the IO for new input and then returns undef if there will never be any more input, 0 if there is none now, but there might be in the future, and TRUE if more input was gotten.
  
  =cut
  
  sub poll {
     my IPC::Run::IO $self = shift;
     my ( $harness ) = @_;
  
     if ( defined $self->{FD} ) {
        my $d = $self->dir;
        if ( $d eq "<" ) {
           if ( vec $harness->{WOUT}, $self->{FD}, 1 ) {
              _debug_desc_fd( "filtering data to", $self )
                 if _debugging_details;
              return $self->_do_filters( $harness );
           }
        }
        elsif ( $d eq ">" ) {
           if ( vec $harness->{ROUT}, $self->{FD}, 1 ) {
              _debug_desc_fd( "filtering data from", $self )
                 if _debugging_details;
              return $self->_do_filters( $harness );
           }
        }
     }
     return 0;
  }
  
  
  sub _do_filters {
     my IPC::Run::IO $self = shift;
  
     ( $self->{HARNESS} ) = @_;
  
     my ( $saved_op, $saved_num ) =($IPC::Run::filter_op,$IPC::Run::filter_num);
     $IPC::Run::filter_op = $self;
     $IPC::Run::filter_num = -1;
     my $redos = 0;
     my $r;
     {
  	   $@ = '';
  	   $r = eval { IPC::Run::get_more_input(); };
  
  	   # Detect Resource temporarily unavailable and re-try 200 times (2 seconds),  assuming select behaves (which it doesn't always? need ref)
  	   if(($@||'') =~ $IPC::Run::_EAGAIN && $redos++ < 200) {
  	       select(undef, undef, undef, 0.01);
  	       redo;
  	   }
     }
     ( $IPC::Run::filter_op, $IPC::Run::filter_num ) = ( $saved_op, $saved_num );
     $self->{HARNESS} = undef;
     die "ack ", $@ if $@;
     return $r;
  }
  
  =back
  
  =head1 AUTHOR
  
  Barrie Slaymaker <barries@slaysys.com>
  
  =head1 TODO
  
  Implement bidirectionality.
  
  =cut
  
  1;
IPC_RUN_IO

    $main::fatpacked{"IPC/Run/Timer.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'IPC_RUN_TIMER';
  package IPC::Run::Timer;
  
  =pod
  
  =head1 NAME
  
  IPC::Run::Timer -- Timer channels for IPC::Run.
  
  =head1 SYNOPSIS
  
     use IPC::Run qw( run  timer timeout );
     ## or IPC::Run::Timer ( timer timeout );
     ## or IPC::Run::Timer ( :all );
  
     ## A non-fatal timer:
     $t = timer( 5 ); # or...
     $t = IO::Run::Timer->new( 5 );
     run $t, ...;
  
     ## A timeout (which is a timer that dies on expiry):
     $t = timeout( 5 ); # or...
     $t = IO::Run::Timer->new( 5, exception => "harness timed out" );
  
  =head1 DESCRIPTION
  
  This class and module allows timers and timeouts to be created for use
  by IPC::Run.  A timer simply expires when it's time is up.  A timeout
  is a timer that throws an exception when it expires.
  
  Timeouts are usually a bit simpler to use  than timers: they throw an
  exception on expiration so you don't need to check them:
  
     ## Give @cmd 10 seconds to get started, then 5 seconds to respond
     my $t = timeout( 10 );
     $h = start(
        \@cmd, \$in, \$out,
        $t,
     );
     pump $h until $out =~ /prompt/;
  
     $in = "some stimulus";
     $out = '';
     $t->time( 5 )
     pump $h until $out =~ /expected response/;
  
  You do need to check timers:
  
     ## Give @cmd 10 seconds to get started, then 5 seconds to respond
     my $t = timer( 10 );
     $h = start(
        \@cmd, \$in, \$out,
        $t,
     );
     pump $h until $t->is_expired || $out =~ /prompt/;
  
     $in = "some stimulus";
     $out = '';
     $t->time( 5 )
     pump $h until $out =~ /expected response/ || $t->is_expired;
  
  Timers and timeouts that are reset get started by start() and
  pump().  Timers change state only in pump().  Since run() and
  finish() both call pump(), they act like pump() with respect to
  timers.
  
  Timers and timeouts have three states: reset, running, and expired.
  Setting the timeout value resets the timer, as does calling
  the reset() method.  The start() method starts (or restarts) a
  timer with the most recently set time value, no matter what state
  it's in.
  
  =head2 Time values
  
  All time values are in seconds.  Times may be specified as integer or
  floating point seconds, optionally preceded by puncuation-separated
  days, hours, and minutes.\
  
  Examples:
  
     1           1 second
     1.1         1.1 seconds
     60          60 seconds
     1:0         1 minute
     1:1         1 minute, 1 second
     1:90        2 minutes, 30 seconds
     1:2:3:4.5   1 day, 2 hours, 3 minutes, 4.5 seconds
  
  Absolute date/time strings are *not* accepted: year, month and
  day-of-month parsing is not available (patches welcome :-).
  
  =head2 Interval fudging
  
  When calculating an end time from a start time and an interval, IPC::Run::Timer
  instances add a little fudge factor.  This is to ensure that no time will
  expire before the interval is up.
  
  First a little background.  Time is sampled in discrete increments.  We'll
  call the
  exact moment that the reported time increments from one interval to the
  next a tick, and the interval between ticks as the time period.  Here's
  a diagram of three ticks and the periods between them:
  
  
      -0-0-0-0-0-0-0-0-0-0-1-1-1-1-1-1-1-1-1-1-2-...
      ^                   ^                   ^
      |<--- period 0 ---->|<--- period 1 ---->|
      |                   |                   |
    tick 0              tick 1              tick 2
  
  To see why the fudge factor is necessary, consider what would happen
  when a timer with an interval of 1 second is started right at the end of
  period 0:
  
  
      -0-0-0-0-0-0-0-0-0-0-1-1-1-1-1-1-1-1-1-1-2-...
      ^                ^  ^                   ^
      |                |  |                   |
      |                |  |                   |
    tick 0             |tick 1              tick 2
                       |
                   start $t
  
  Assuming that check() is called many times per period, then the timer
  is likely to expire just after tick 1, since the time reported will have
  lept from the value '0' to the value '1':
  
      -0-0-0-0-0-0-0-0-0-0-1-1-1-1-1-1-1-1-1-1-2-...
      ^                ^  ^   ^               ^
      |                |  |   |               |
      |                |  |   |               |
    tick 0             |tick 1|             tick 2
                       |      |
                   start $t   |
  		            |
  			check $t
  
  Adding a fudge of '1' in this example means that the timer is guaranteed
  not to expire before tick 2.
  
  The fudge is not added to an interval of '0'.
  
  This means that intervals guarantee a minimum interval.  Given that
  the process running perl may be suspended for some period of time, or that
  it gets busy doing something time-consuming, there are no other guarantees on
  how long it will take a timer to expire.
  
  =head1 SUBCLASSING
  
  INCOMPATIBLE CHANGE: Due to the awkwardness introduced by ripping
  pseudohashes out of Perl, this class I<no longer> uses the fields
  pragma.
  
  =head1 FUNCTIONS & METHODS
  
  =over
  
  =cut
  
  use strict;
  use Carp;
  use Fcntl;
  use Symbol;
  use Exporter;
  use vars qw( $VERSION @ISA @EXPORT_OK %EXPORT_TAGS );
  BEGIN {
  	$VERSION   = '0.90';
  	@ISA       = qw( Exporter );
  	@EXPORT_OK = qw(
  		check
  		end_time
  		exception
  		expire
  		interval
  		is_expired
  		is_reset
  		is_running
  		name
  		reset
  		start
  		timeout
  		timer
  	);
  
  	%EXPORT_TAGS = ( 'all' => \@EXPORT_OK );
  }
  
  require IPC::Run;
  use IPC::Run::Debug;
  
  ##
  ## Some helpers
  ##
  my $resolution = 1;
  
  sub _parse_time {
     for ( $_[0] ) {
        return $_ unless defined $_;
        return $_ if /^\d*(?:\.\d*)?$/;
  
        my @f = reverse split( /[^\d\.]+/i );
        croak "IPC::Run: invalid time string '$_'" unless @f <= 4;
        my ( $s, $m, $h, $d ) = @f;
        return
        ( (
  	         ( $d || 0 )   * 24
  	       + ( $h || 0 ) ) * 60
  	       + ( $m || 0 ) ) * 60
                 + ( $s || 0 );
     }
  }
  
  sub _calc_end_time {
     my IPC::Run::Timer $self = shift;
     my $interval = $self->interval;
     $interval += $resolution if $interval;
     $self->end_time( $self->start_time + $interval );
  }
  
  
  =item timer
  
  A constructor function (not method) of IPC::Run::Timer instances:
  
     $t = timer( 5 );
     $t = timer( 5, name => 'stall timer', debug => 1 );
  
     $t = timer;
     $t->interval( 5 );
  
     run ..., $t;
     run ..., $t = timer( 5 );
  
  This convenience function is a shortened spelling of
  
     IPC::Run::Timer->new( ... );
     
  .  It returns a timer in the reset state with a given interval.
  
  If an exception is provided, it will be thrown when the timer notices that
  it has expired (in check()).  The name is for debugging usage, if you plan on
  having multiple timers around.  If no name is provided, a name like "timer #1"
  will be provided.
  
  =cut
  
  sub timer {
     return IPC::Run::Timer->new( @_ );
  }
  
  
  =item timeout
  
  A constructor function (not method) of IPC::Run::Timer instances:
  
     $t = timeout( 5 );
     $t = timeout( 5, exception => "kablooey" );
     $t = timeout( 5, name => "stall", exception => "kablooey" );
  
     $t = timeout;
     $t->interval( 5 );
  
     run ..., $t;
     run ..., $t = timeout( 5 );
  
  A This convenience function is a shortened spelling of 
  
     IPC::Run::Timer->new( exception => "IPC::Run: timeout ...", ... );
     
  .  It returns a timer in the reset state that will throw an
  exception when it expires.
  
  Takes the same parameters as L</timer>, any exception passed in overrides
  the default exception.
  
  =cut
  
  sub timeout {
     my $t = IPC::Run::Timer->new( @_ );
     $t->exception( "IPC::Run: timeout on " . $t->name )
        unless defined $t->exception;
     return $t;
  }
  
  
  =item new
  
     IPC::Run::Timer->new()  ;
     IPC::Run::Timer->new( 5 )  ;
     IPC::Run::Timer->new( 5, exception => 'kablooey' )  ;
  
  Constructor.  See L</timer> for details.
  
  =cut
  
  my $timer_counter;
  
  
  sub new {
     my $class = shift;
     $class = ref $class || $class;
  
     my IPC::Run::Timer $self = bless {}, $class;
  
     $self->{STATE} = 0;
     $self->{DEBUG} = 0;
     $self->{NAME}  = "timer #" . ++$timer_counter;
  
     while ( @_ ) {
        my $arg = shift;
        if ( $arg =~ /^(?:\d+[^\a\d]){0,3}\d*(?:\.\d*)?$/ ) {
           $self->interval( $arg );
        }
        elsif ( $arg eq 'exception' ) {
           $self->exception( shift );
        }
        elsif ( $arg eq 'name' ) {
           $self->name( shift );
        }
        elsif ( $arg eq 'debug' ) {
           $self->debug( shift );
        }
        else {
           croak "IPC::Run: unexpected parameter '$arg'";
        }
     }
  
     _debug $self->name . ' constructed'
        if $self->{DEBUG} || _debugging_details;
  
     return $self;
  }
  
  =item check
  
     check $t;
     check $t, $now;
     $t->check;
  
  Checks to see if a timer has expired since the last check.  Has no effect
  on non-running timers.  This will throw an exception if one is defined.
  
  IPC::Run::pump() calls this routine for any timers in the harness.
  
  You may pass in a version of now, which is useful in case you have
  it lying around or you want to check several timers with a consistent
  concept of the current time.
  
  Returns the time left before end_time or 0 if end_time is no longer
  in the future or the timer is not running
  (unless, of course, check() expire()s the timer and this
  results in an exception being thrown).
  
  Returns undef if the timer is not running on entry, 0 if check() expires it,
  and the time left if it's left running.
  
  =cut
  
  sub check {
     my IPC::Run::Timer $self = shift;
     return undef if ! $self->is_running;
     return 0     if  $self->is_expired;
  
     my ( $now ) = @_;
     $now = _parse_time( $now );
     $now = time unless defined $now;
  
     _debug(
        "checking ", $self->name, " (end time ", $self->end_time, ") at ", $now 
     ) if $self->{DEBUG} || _debugging_details;
  
     my $left = $self->end_time - $now;
     return $left if $left > 0;
  
     $self->expire;
     return 0;
  }
  
  
  =item debug
  
  Sets/gets the current setting of the debugging flag for this timer.  This
  has no effect if debugging is not enabled for the current harness.
  
  =cut
  
  
  sub debug {
     my IPC::Run::Timer $self = shift;
     $self->{DEBUG} = shift if @_;
     return $self->{DEBUG};
  }
  
  
  =item end_time
  
     $et = $t->end_time;
     $et = end_time $t;
  
     $t->end_time( time + 10 );
  
  Returns the time when this timer will or did expire.  Even if this time is
  in the past, the timer may not be expired, since check() may not have been
  called yet.
  
  Note that this end_time is not start_time($t) + interval($t), since some
  small extra amount of time is added to make sure that the timer does not
  expire before interval() elapses.  If this were not so, then 
  
  Changing end_time() while a timer is running will set the expiration time.
  Changing it while it is expired has no affect, since reset()ing a timer always
  clears the end_time().
  
  =cut
  
  
  sub end_time {
     my IPC::Run::Timer $self = shift;
     if ( @_ ) {
        $self->{END_TIME} = shift;
        _debug $self->name, ' end_time set to ', $self->{END_TIME}
  	 if $self->{DEBUG} > 2 || _debugging_details;
     }
     return $self->{END_TIME};
  }
  
  
  =item exception
  
     $x = $t->exception;
     $t->exception( $x );
     $t->exception( undef );
  
  Sets/gets the exception to throw, if any.  'undef' means that no
  exception will be thrown.  Exception does not need to be a scalar: you 
  may ask that references be thrown.
  
  =cut
  
  
  sub exception {
     my IPC::Run::Timer $self = shift;
     if ( @_ ) {
        $self->{EXCEPTION} = shift;
        _debug $self->name, ' exception set to ', $self->{EXCEPTION}
  	 if $self->{DEBUG} || _debugging_details;
     }
     return $self->{EXCEPTION};
  }
  
  
  =item interval
  
     $i = interval $t;
     $i = $t->interval;
     $t->interval( $i );
  
  Sets the interval.  Sets the end time based on the start_time() and the
  interval (and a little fudge) if the timer is running.
  
  =cut
  
  sub interval {
     my IPC::Run::Timer $self = shift;
     if ( @_ ) {
        $self->{INTERVAL} = _parse_time( shift );
        _debug $self->name, ' interval set to ', $self->{INTERVAL}
  	 if $self->{DEBUG} > 2 || _debugging_details;
  
        $self->_calc_end_time if $self->state;
     }
     return $self->{INTERVAL};
  }
  
  
  =item expire
  
     expire $t;
     $t->expire;
  
  Sets the state to expired (undef).
  Will throw an exception if one
  is defined and the timer was not already expired.  You can expire a
  reset timer without starting it.
  
  =cut
  
  
  sub expire {
     my IPC::Run::Timer $self = shift;
     if ( defined $self->state ) {
        _debug $self->name . ' expired'
  	 if $self->{DEBUG} || _debugging;
  
        $self->state( undef );
        croak $self->exception if $self->exception;
     }
     return undef;
  }
  
  
  =item is_running
  
  =cut
  
  
  sub is_running {
     my IPC::Run::Timer $self = shift;
     return $self->state ? 1 : 0;
  }
  
  
  =item is_reset
  
  =cut
     
  sub is_reset {
     my IPC::Run::Timer $self = shift;
     return defined $self->state && $self->state == 0;
  }
  
  
  =item is_expired
  
  =cut
  
  sub is_expired {
     my IPC::Run::Timer $self = shift;
     return ! defined $self->state;
  }
  
  =item name
  
  Sets/gets this timer's name.  The name is only used for debugging
  purposes so you can tell which freakin' timer is doing what.
  
  =cut
  
  sub name {
     my IPC::Run::Timer $self = shift;
   
     $self->{NAME} = shift if @_;
     return defined $self->{NAME}
        ? $self->{NAME}
        : defined $self->{EXCEPTION}
           ? 'timeout'
  	 : 'timer';
  }
  
  
  =item reset
  
     reset $t;
     $t->reset;
  
  Resets the timer to the non-running, non-expired state and clears
  the end_time().
  
  =cut
  
  sub reset {
     my IPC::Run::Timer $self = shift;
     $self->state( 0 );
     $self->end_time( undef );
     _debug $self->name . ' reset'
        if $self->{DEBUG} || _debugging;
  
     return undef;
  }
  
  
  =item start
  
     start $t;
     $t->start;
     start $t, $interval;
     start $t, $interval, $now;
  
  Starts or restarts a timer.  This always sets the start_time.  It sets the
  end_time based on the interval if the timer is running or if no end time
  has been set.
  
  You may pass an optional interval or current time value.
  
  Not passing a defined interval causes the previous interval setting to be
  re-used unless the timer is reset and an end_time has been set
  (an exception is thrown if no interval has been set).  
  
  Not passing a defined current time value causes the current time to be used.
  
  Passing a current time value is useful if you happen to have a time value
  lying around or if you want to make sure that several timers are started
  with the same concept of start time.  You might even need to lie to an
  IPC::Run::Timer, occasionally.
  
  =cut
  
  sub start {
     my IPC::Run::Timer $self = shift;
  
     my ( $interval, $now ) = map { _parse_time( $_ ) } @_;
     $now = _parse_time( $now );
     $now = time unless defined $now;
  
     $self->interval( $interval ) if defined $interval;
  
     ## start()ing a running or expired timer clears the end_time, so that the
     ## interval is used.  So does specifying an interval.
     $self->end_time( undef ) if ! $self->is_reset || $interval;
  
     croak "IPC::Run: no timer interval or end_time defined for " . $self->name
        unless defined $self->interval || defined $self->end_time;
  
     $self->state( 1 );
     $self->start_time( $now );
     ## The "+ 1" is in case the START_TIME was sampled at the end of a
     ## tick (which are one second long in this module).
     $self->_calc_end_time
        unless defined $self->end_time;
  
     _debug(
        $self->name, " started at ", $self->start_time,
        ", with interval ", $self->interval, ", end_time ", $self->end_time
     ) if $self->{DEBUG} || _debugging;
     return undef;
  }
  
  
  =item start_time
  
  Sets/gets the start time, in seconds since the epoch.  Setting this manually
  is a bad idea, it's better to call L</start>() at the correct time.
  
  =cut
  
  
  sub start_time {
     my IPC::Run::Timer $self = shift;
     if ( @_ ) {
        $self->{START_TIME} = _parse_time( shift );
        _debug $self->name, ' start_time set to ', $self->{START_TIME}
  	 if $self->{DEBUG} > 2 || _debugging;
     }
  
     return $self->{START_TIME};
  }
  
  
  =item state
  
     $s = state $t;
     $t->state( $s );
  
  Get/Set the current state.  Only use this if you really need to transfer the
  state to/from some variable.
  Use L</expire>, L</start>, L</reset>, L</is_expired>, L</is_running>,
  L</is_reset>.
  
  Note:  Setting the state to 'undef' to expire a timer will not throw an
  exception.
  
  =back
  
  =cut
  
  sub state {
     my IPC::Run::Timer $self = shift;
     if ( @_ ) {
        $self->{STATE} = shift;
        _debug $self->name, ' state set to ', $self->{STATE}
  	 if $self->{DEBUG} > 2 || _debugging;
     }
     return $self->{STATE};
  }
  
  
  1;
  
  =pod
  
  =head1 TODO
  
  use Time::HiRes; if it's present.
  
  Add detection and parsing of [[[HH:]MM:]SS formatted times and intervals.
  
  =head1 AUTHOR
  
  Barrie Slaymaker <barries@slaysys.com>
  
  =cut
IPC_RUN_TIMER

    $main::fatpacked{"IPC/Run/Win32Helper.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'IPC_RUN_WIN32HELPER';
  package IPC::Run::Win32Helper;
  
  =pod
  
  =head1 NAME
  
  IPC::Run::Win32Helper - helper routines for IPC::Run on Win32 platforms.
  
  =head1 SYNOPSIS
  
      use IPC::Run::Win32Helper;   # Exports all by default
  
  =head1 DESCRIPTION
  
  IPC::Run needs to use sockets to redirect subprocess I/O so that the select() loop
  will work on Win32. This seems to only work on WinNT and Win2K at this time, not
  sure if it will ever work on Win95 or Win98. If you have experience in this area, please
  contact me at barries@slaysys.com, thanks!.
  
  =cut
  
  use strict;
  use Carp;
  use IO::Handle;
  use vars qw{ $VERSION @ISA @EXPORT };
  BEGIN {
  	$VERSION = '0.90';
  	@ISA = qw( Exporter );
  	@EXPORT = qw(
  		win32_spawn
  		win32_parse_cmd_line
  		_dont_inherit
  		_inherit
  	);
  }
  
  require POSIX;
  
  use Text::ParseWords;
  use Win32::Process;
  use IPC::Run::Debug;
  use Win32API::File qw(
     FdGetOsFHandle
     SetHandleInformation
     HANDLE_FLAG_INHERIT
     INVALID_HANDLE_VALUE
  );
  
  ## Takes an fd or a GLOB ref, never never never a Win32 handle.
  sub _dont_inherit {
     for ( @_ ) {
        next unless defined $_;
        my $fd = $_;
        $fd = fileno $fd if ref $fd;
        _debug "disabling inheritance of ", $fd if _debugging_details;
        my $osfh = FdGetOsFHandle $fd;
        croak $^E if ! defined $osfh || $osfh == INVALID_HANDLE_VALUE;
  
        SetHandleInformation( $osfh, HANDLE_FLAG_INHERIT, 0 );
     }
  }
  
  sub _inherit {       #### REMOVE
     for ( @_ ) {       #### REMOVE
        next unless defined $_;       #### REMOVE
        my $fd = $_;       #### REMOVE
        $fd = fileno $fd if ref $fd;       #### REMOVE
        _debug "enabling inheritance of ", $fd if _debugging_details;       #### REMOVE
        my $osfh = FdGetOsFHandle $fd;       #### REMOVE
        croak $^E if ! defined $osfh || $osfh == INVALID_HANDLE_VALUE;       #### REMOVE
         #### REMOVE
        SetHandleInformation( $osfh, HANDLE_FLAG_INHERIT, 1 );       #### REMOVE
     }       #### REMOVE
  }       #### REMOVE
         #### REMOVE
  #sub _inherit {
  #   for ( @_ ) {
  #      next unless defined $_;
  #      my $osfh = GetOsFHandle $_;
  #      croak $^E if ! defined $osfh || $osfh == INVALID_HANDLE_VALUE;
  #      SetHandleInformation( $osfh, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT );
  #   }
  #}
  
  =pod
  
  =head1 FUNCTIONS
  
  =over
  
  =item optimize()
  
  Most common incantations of C<run()> (I<not> C<harness()>, C<start()>,
  or C<finish()>) now use temporary files to redirect input and output
  instead of pumper processes.
  
  Temporary files are used when sending to child processes if input is
  taken from a scalar with no filter subroutines.  This is the only time
  we can assume that the parent is not interacting with the child's
  redirected input as it runs.
  
  Temporary files are used when receiving from children when output is
  to a scalar or subroutine with or without filters, but only if
  the child in question closes its inputs or takes input from 
  unfiltered SCALARs or named files.  Normally, a child inherits its STDIN
  from its parent; to close it, use "0<&-" or the C<< noinherit => 1 >> option.
  If data is sent to the child from CODE refs, filehandles or from
  scalars through filters than the child's outputs will not be optimized
  because C<optimize()> assumes the parent is interacting with the child.
  It is ok if the output is filtered or handled by a subroutine, however.
  
  This assumes that all named files are real files (as opposed to named
  pipes) and won't change; and that a process is not communicating with
  the child indirectly (through means not visible to IPC::Run).
  These can be an invalid assumptions, but are the 99% case.
  Write me if you need an option to enable or disable optimizations; I
  suspect it will work like the C<binary()> modifier.
  
  To detect cases that you might want to optimize by closing inputs, try
  setting the C<IPCRUNDEBUG> environment variable to the special C<notopt>
  value:
  
     C:> set IPCRUNDEBUG=notopt
     C:> my_app_that_uses_IPC_Run.pl
  
  =item optimizer() rationalizations
  
  Only for that limited case can we be sure that it's ok to batch all the
  input in to a temporary file.  If STDIN is from a SCALAR or from a named
  file or filehandle (again, only in C<run()>), then outputs to CODE refs
  are also assumed to be safe enough to batch through a temp file,
  otherwise only outputs to SCALAR refs are batched.  This can cause a bit
  of grief if the parent process benefits from or relies on a bit of
  "early returns" coming in before the child program exits.  As long as
  the output is redirected to a SCALAR ref, this will not be visible.
  When output is redirected to a subroutine or (deprecated) filters, the
  subroutine will not get any data until after the child process exits,
  and it is likely to get bigger chunks of data at once.
  
  The reason for the optimization is that, without it, "pumper" processes
  are used to overcome the inconsistencies of the Win32 API.  We need to
  use anonymous pipes to connect to the child processes' stdin, stdout,
  and stderr, yet select() does not work on these.  select() only works on
  sockets on Win32.  So for each redirected child handle, there is
  normally a "pumper" process that connects to the parent using a
  socket--so the parent can select() on that fd--and to the child on an
  anonymous pipe--so the child can read/write a pipe.
  
  Using a socket to connect directly to the child (as at least one MSDN
  article suggests) seems to cause the trailing output from most children
  to be lost.  I think this is because child processes rarely close their
  stdout and stderr explicitly, and the winsock dll does not seem to flush
  output when a process that uses it exits without explicitly closing
  them.
  
  Because of these pumpers and the inherent slowness of Win32
  CreateProcess(), child processes with redirects are quite slow to
  launch; so this routine looks for the very common case of
  reading/writing to/from scalar references in a run() routine and
  converts such reads and writes in to temporary file reads and writes.
  
  Such files are marked as FILE_ATTRIBUTE_TEMPORARY to increase speed and
  as FILE_FLAG_DELETE_ON_CLOSE so it will be cleaned up when the child
  process exits (for input files).  The user's default permissions are
  used for both the temporary files and the directory that contains them,
  hope your Win32 permissions are secure enough for you.  Files are
  created with the Win32API::File defaults of
  FILE_SHARE_READ|FILE_SHARE_WRITE.
  
  Setting the debug level to "details" or "gory" will give detailed
  information about the optimization process; setting it to "basic" or
  higher will tell whether or not a given call is optimized.  Setting
  it to "notopt" will highlight those calls that aren't optimized.
  
  =cut
  
  sub optimize {
     my ( $h ) = @_;
  
     my @kids = @{$h->{KIDS}};
  
     my $saw_pipe;
  
     my ( $ok_to_optimize_outputs, $veto_output_optimization );
  
     for my $kid ( @kids ) {
        ( $ok_to_optimize_outputs, $veto_output_optimization ) = ()
           unless $saw_pipe;
  
        _debug
           "Win32 optimizer: (kid $kid->{NUM}) STDIN piped, carrying over ok of non-SCALAR output optimization"
           if _debugging_details && $ok_to_optimize_outputs;
        _debug
           "Win32 optimizer: (kid $kid->{NUM}) STDIN piped, carrying over veto of non-SCALAR output optimization"
           if _debugging_details && $veto_output_optimization;
  
        if ( $h->{noinherit} && ! $ok_to_optimize_outputs ) {
  	 _debug
  	    "Win32 optimizer: (kid $kid->{NUM}) STDIN not inherited from parent oking non-SCALAR output optimization"
  	    if _debugging_details && $ok_to_optimize_outputs;
  	 $ok_to_optimize_outputs = 1;
        }
  
        for ( @{$kid->{OPS}} ) {
           if ( substr( $_->{TYPE}, 0, 1 ) eq "<" ) {
              if ( $_->{TYPE} eq "<" ) {
  	       if ( @{$_->{FILTERS}} > 1 ) {
  		  ## Can't assume that the filters are idempotent.
  	       }
                 elsif ( ref $_->{SOURCE} eq "SCALAR"
  	          || ref $_->{SOURCE} eq "GLOB"
  		  || UNIVERSAL::isa( $_, "IO::Handle" )
  	       ) {
                    if ( $_->{KFD} == 0 ) {
                       _debug
                          "Win32 optimizer: (kid $kid->{NUM}) 0$_->{TYPE}",
                          ref $_->{SOURCE},
                          ", ok to optimize outputs"
                          if _debugging_details;
                       $ok_to_optimize_outputs = 1;
                    }
                    $_->{SEND_THROUGH_TEMP_FILE} = 1;
                    next;
                 }
                 elsif ( ! ref $_->{SOURCE} && defined $_->{SOURCE} ) {
                    if ( $_->{KFD} == 0 ) {
                       _debug
                          "Win32 optimizer: (kid $kid->{NUM}) 0<$_->{SOURCE}, ok to optimize outputs",
                          if _debugging_details;
                       $ok_to_optimize_outputs = 1;
                    }
                    next;
                 }
              }
              _debug
                 "Win32 optimizer: (kid $kid->{NUM}) ",
                 $_->{KFD},
                 $_->{TYPE},
                 defined $_->{SOURCE}
                    ? ref $_->{SOURCE}      ? ref $_->{SOURCE}
                                            : $_->{SOURCE}
                    : defined $_->{FILENAME}
                                            ? $_->{FILENAME}
                                            : "",
  	       @{$_->{FILTERS}} > 1 ? " with filters" : (),
                 ", VETOING output opt."
                 if _debugging_details || _debugging_not_optimized;
              $veto_output_optimization = 1;
           }
           elsif ( $_->{TYPE} eq "close" && $_->{KFD} == 0 ) {
              $ok_to_optimize_outputs = 1;
              _debug "Win32 optimizer: (kid $kid->{NUM}) saw 0<&-, ok to optimize outputs"
                 if _debugging_details;
           }
           elsif ( $_->{TYPE} eq "dup" && $_->{KFD2} == 0 ) {
              $veto_output_optimization = 1;
              _debug "Win32 optimizer: (kid $kid->{NUM}) saw 0<&$_->{KFD2}, VETOING output opt."
                 if _debugging_details || _debugging_not_optimized;
           }
           elsif ( $_->{TYPE} eq "|" ) {
              $saw_pipe = 1;
           }
        }
  
        if ( ! $ok_to_optimize_outputs && ! $veto_output_optimization ) {
           _debug
              "Win32 optimizer: (kid $kid->{NUM}) child STDIN not redirected, VETOING non-SCALAR output opt."
              if _debugging_details || _debugging_not_optimized;
           $veto_output_optimization = 1;
        }
  
        if ( $ok_to_optimize_outputs && $veto_output_optimization ) {
           $ok_to_optimize_outputs = 0;
           _debug "Win32 optimizer: (kid $kid->{NUM}) non-SCALAR output optimizations VETOed"
              if _debugging_details || _debugging_not_optimized;
        }
  
        ## SOURCE/DEST ARRAY means it's a filter.
        ## TODO: think about checking to see if the final input/output of
        ## a filter chain (an ARRAY SOURCE or DEST) is a scalar...but
        ## we may be deprecating filters.
  
        for ( @{$kid->{OPS}} ) {
           if ( $_->{TYPE} eq ">" ) {
              if ( ref $_->{DEST} eq "SCALAR"
                 || (
                    ( @{$_->{FILTERS}} > 1
  		     || ref $_->{DEST} eq "CODE"
  		     || ref $_->{DEST} eq "ARRAY"  ## Filters?
  	          )
                    && ( $ok_to_optimize_outputs && ! $veto_output_optimization ) 
                 )
              ) {
  	       $_->{RECV_THROUGH_TEMP_FILE} = 1;
  	       next;
              }
  	    _debug
  	       "Win32 optimizer: NOT optimizing (kid $kid->{NUM}) ",
  	       $_->{KFD},
  	       $_->{TYPE},
  	       defined $_->{DEST}
  		  ? ref $_->{DEST}      ? ref $_->{DEST}
  					  : $_->{SOURCE}
  		  : defined $_->{FILENAME}
  					  ? $_->{FILENAME}
  					  : "",
  		  @{$_->{FILTERS}} ? " with filters" : (),
  	       if _debugging_details;
           }
        }
     }
  
  }
  
  =pod
  
  =item win32_parse_cmd_line
  
     @words = win32_parse_cmd_line( q{foo bar 'baz baz' "bat bat"} );
  
  returns 4 words. This parses like the bourne shell (see
  the bit about shellwords() in L<Text::ParseWords>), assuming we're
  trying to be a little cross-platform here.  The only difference is
  that "\" is *not* treated as an escape except when it precedes 
  punctuation, since it's used all over the place in DOS path specs.
  
  TODO: globbing? probably not (it's unDOSish).
  
  TODO: shebang emulation? Probably, but perhaps that should be part
  of Run.pm so all spawned processes get the benefit.
  
  LIMITATIONS: shellwords dies silently on malformed input like 
  
     a\"
  
  =cut
  
  sub win32_parse_cmd_line {
     my $line = shift;
     $line =~ s{(\\[\w\s])}{\\$1}g;
     return shellwords $line;
  }
  
  =pod
  
  =item win32_spawn
  
  Spawns a child process, possibly with STDIN, STDOUT, and STDERR (file descriptors 0, 1, and 2, respectively) redirected.
  
  B<LIMITATIONS>.
  
  Cannot redirect higher file descriptors due to lack of support for this in the
  Win32 environment.
  
  This can be worked around by marking a handle as inheritable in the
  parent (or leaving it marked; this is the default in perl), obtaining it's
  Win32 handle with C<Win32API::GetOSFHandle(FH)> or
  C<Win32API::FdGetOsFHandle($fd)> and passing it to the child using the command
  line, the environment, or any other IPC mechanism (it's a plain old integer).
  The child can then use C<OsFHandleOpen()> or C<OsFHandleOpenFd()> and possibly
  C<<open FOO ">&BAR">> or C<<open FOO ">&$fd>> as need be.  Ach, the pain!
  
  Remember to check the Win32 handle against INVALID_HANDLE_VALUE.
  
  =cut
  
  sub _save {
     my ( $saved, $saved_as, $fd ) = @_;
  
     ## We can only save aside the original fds once.
     return if exists $saved->{$fd};
  
     my $saved_fd = IPC::Run::_dup( $fd );
     _dont_inherit $saved_fd;
  
     $saved->{$fd} = $saved_fd;
     $saved_as->{$saved_fd} = $fd;
  
     _dont_inherit $saved->{$fd};
  }
  
  sub _dup2_gently {
     my ( $saved, $saved_as, $fd1, $fd2 ) = @_;
     _save $saved, $saved_as, $fd2;
  
     if ( exists $saved_as->{$fd2} ) {
        ## The target fd is colliding with a saved-as fd, gotta bump
        ## the saved-as fd to another fd.
        my $orig_fd = delete $saved_as->{$fd2};
        my $saved_fd = IPC::Run::_dup( $fd2 );
        _dont_inherit $saved_fd;
  
        $saved->{$orig_fd} = $saved_fd;
        $saved_as->{$saved_fd} = $orig_fd;
     }
     _debug "moving $fd1 to kid's $fd2" if _debugging_details;
     IPC::Run::_dup2_rudely( $fd1, $fd2 );
  }
  
  sub win32_spawn {
     my ( $cmd, $ops) = @_;
  
     ## NOTE: The debug pipe write handle is passed to pump processes as STDOUT.
     ## and is not to the "real" child process, since they would not know
     ## what to do with it...unlike Unix, we have no code executing in the
     ## child before the "real" child is exec()ed.
     
     my %saved;      ## Map of parent's orig fd -> saved fd
     my %saved_as;   ## Map of parent's saved fd -> orig fd, used to
                      ## detect collisions between a KFD and the fd a
  		    ## parent's fd happened to be saved to.
     
     for my $op ( @$ops ) {
        _dont_inherit $op->{FD}  if defined $op->{FD};
  
        if ( defined $op->{KFD} && $op->{KFD} > 2 ) {
  	 ## TODO: Detect this in harness()
  	 ## TODO: enable temporary redirections if ever necessary, not
  	 ## sure why they would be...
  	 ## 4>&1 1>/dev/null 1>&4 4>&-
           croak "Can't redirect fd #", $op->{KFD}, " on Win32";
        }
  
        ## This is very similar logic to IPC::Run::_do_kid_and_exit().
        if ( defined $op->{TFD} ) {
  	 unless ( $op->{TFD} == $op->{KFD} ) {
  	    _dup2_gently \%saved, \%saved_as, $op->{TFD}, $op->{KFD};
  	    _dont_inherit $op->{TFD};
  	 }
        }
        elsif ( $op->{TYPE} eq "dup" ) {
           _dup2_gently \%saved, \%saved_as, $op->{KFD1}, $op->{KFD2}
              unless $op->{KFD1} == $op->{KFD2};
        }
        elsif ( $op->{TYPE} eq "close" ) {
  	 _save \%saved, \%saved_as, $op->{KFD};
  	 IPC::Run::_close( $op->{KFD} );
        }
        elsif ( $op->{TYPE} eq "init" ) {
  	 ## TODO: detect this in harness()
           croak "init subs not allowed on Win32";
        }
     }
  
     my $process;
     my $cmd_line = join " ", map {
        ( my $s = $_ ) =~ s/"/"""/g;
        $s = qq{"$s"} if /[\"\s]|^$/;
        $s;
     } @$cmd;
  
     _debug "cmd line: ", $cmd_line
        if _debugging;
  
     Win32::Process::Create( 
        $process,
        $cmd->[0],
        $cmd_line,
        1,  ## Inherit handles
        NORMAL_PRIORITY_CLASS,
        ".",
     ) or croak "$!: Win32::Process::Create()";
  
     for my $orig_fd ( keys %saved ) {
        IPC::Run::_dup2_rudely( $saved{$orig_fd}, $orig_fd );
        IPC::Run::_close( $saved{$orig_fd} );
     }
  
     return ( $process->GetProcessID(), $process );
  }
  
  
  1;
  
  =pod
  
  =back
  
  =head1 AUTHOR
  
  Barries Slaymaker <barries@slaysys.com>.  Funded by Perforce Software, Inc.
  
  =head1 COPYRIGHT
  
  Copyright 2001, Barrie Slaymaker, All Rights Reserved.
  
  You may use this under the terms of either the GPL 2.0 or the Artistic License.
  
  =cut
IPC_RUN_WIN32HELPER

    $main::fatpacked{"IPC/Run/Win32IO.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'IPC_RUN_WIN32IO';
  package IPC::Run::Win32IO;
  
  =pod
  
  =head1 NAME
  
  IPC::Run::Win32IO - helper routines for IPC::Run on Win32 platforms.
  
  =head1 SYNOPSIS
  
      use IPC::Run::Win32IO;   # Exports all by default
  
  =head1 DESCRIPTION
  
  IPC::Run needs to use sockets to redirect subprocess I/O so that the select()
  loop will work on Win32. This seems to only work on WinNT and Win2K at this
  time, not sure if it will ever work on Win95 or Win98. If you have experience
  in this area, please contact me at barries@slaysys.com, thanks!.
  
  =head1 DESCRIPTION
  
  A specialized IO class used on Win32.
  
  =cut
  
  use strict;
  use Carp;
  use IO::Handle;
  use Socket;
  require POSIX;
  
  use vars qw{$VERSION};
  BEGIN {
  	$VERSION = '0.90';
  }
  
  use Socket qw( IPPROTO_TCP TCP_NODELAY );
  use Symbol;
  use Text::ParseWords;
  use Win32::Process;
  use IPC::Run::Debug qw( :default _debugging_level );
  use IPC::Run::Win32Helper qw( _inherit _dont_inherit );
  use Fcntl qw( O_TEXT O_RDONLY );
  
  use base qw( IPC::Run::IO );
  my @cleanup_fields;
  BEGIN {
     ## These fields will be set to undef in _cleanup to close
     ## the handles.
     @cleanup_fields = (
        'SEND_THROUGH_TEMP_FILE', ## Set by WinHelper::optimize()
        'RECV_THROUGH_TEMP_FILE', ## Set by WinHelper::optimize()
        'TEMP_FILE_NAME',         ## The name of the temp file, needed for
                                  ## error reporting / debugging only.
  
        'PARENT_HANDLE',       ## The handle of the socket for the parent
        'PUMP_SOCKET_HANDLE',  ## The socket handle for the pump
        'PUMP_PIPE_HANDLE',    ## The anon pipe handle for the pump
        'CHILD_HANDLE',        ## The anon pipe handle for the child
  
        'TEMP_FILE_HANDLE',    ## The Win32 filehandle for the temp file
     );
  }
  
  ## REMOVE OSFHandleOpen
  use Win32API::File qw(
     GetOsFHandle
     OsFHandleOpenFd
     OsFHandleOpen
     FdGetOsFHandle
     SetHandleInformation
     SetFilePointer
     HANDLE_FLAG_INHERIT
     INVALID_HANDLE_VALUE
  
     createFile
     WriteFile
     ReadFile
     CloseHandle
  
     FILE_ATTRIBUTE_TEMPORARY
     FILE_FLAG_DELETE_ON_CLOSE
     FILE_FLAG_WRITE_THROUGH
  
     FILE_BEGIN
  );
  
  #   FILE_ATTRIBUTE_HIDDEN
  #   FILE_ATTRIBUTE_SYSTEM
  
  
  BEGIN {
     ## Force AUTOLOADED constants to be, well, constant by getting them
     ## to AUTOLOAD before compilation continues.  Sigh.
     () = (
        SOL_SOCKET,
        SO_REUSEADDR,
        IPPROTO_TCP,
        TCP_NODELAY,
        HANDLE_FLAG_INHERIT,
        INVALID_HANDLE_VALUE,
     );
  }
  
  use constant temp_file_flags => (
     FILE_ATTRIBUTE_TEMPORARY()   |
     FILE_FLAG_DELETE_ON_CLOSE()  |
     FILE_FLAG_WRITE_THROUGH()
  );
  
  #   FILE_ATTRIBUTE_HIDDEN()    |
  #   FILE_ATTRIBUTE_SYSTEM()    |
  my $tmp_file_counter;
  my $tmp_dir;
  
  sub _cleanup {
      my IPC::Run::Win32IO $self = shift;
      my ( $harness ) = @_;
  
      $self->_recv_through_temp_file( $harness )
         if $self->{RECV_THROUGH_TEMP_FILE};
  
      CloseHandle( $self->{TEMP_FILE_HANDLE} )
         if defined $self->{TEMP_FILE_HANDLE};
  
      $self->{$_} = undef for @cleanup_fields;
  }
  
  
  sub _create_temp_file {
     my IPC::Run::Win32IO $self = shift;
  
     ## Create a hidden temp file that Win32 will delete when we close
     ## it.
     unless ( defined $tmp_dir ) {
        $tmp_dir = File::Spec->catdir(
           File::Spec->tmpdir, "IPC-Run.tmp"
        );
  
        ## Trust in the user's umask.
        ## This could possibly be a security hole, perhaps
        ## we should offer an option.  Hmmmm, really, people coding
        ## security conscious apps should audit this code and
        ## tell me how to make it better.  Nice cop-out :).
        unless ( -d $tmp_dir ) {
           mkdir $tmp_dir or croak "$!: $tmp_dir";
        }
     }
  
     $self->{TEMP_FILE_NAME} = File::Spec->catfile(
        ## File name is designed for easy sorting and not conflicting
        ## with other processes.  This should allow us to use "t"runcate
        ## access in CreateFile in case something left some droppings
        ## around (which should never happen because we specify
        ## FLAG_DELETE_ON_CLOSE.
        ## heh, belt and suspenders are better than bug reports; God forbid
        ## that NT should ever crash before a temp file gets deleted!
        $tmp_dir, sprintf "Win32io-%06d-%08d", $$, $tmp_file_counter++
     );
  
     $self->{TEMP_FILE_HANDLE} = createFile(
        $self->{TEMP_FILE_NAME},
        "trw",         ## new, truncate, read, write
        {
           Flags      => temp_file_flags,
        },
     ) or croak "Can't create temporary file, $self->{TEMP_FILE_NAME}: $^E";
  
     $self->{TFD} = OsFHandleOpenFd $self->{TEMP_FILE_HANDLE}, 0;
     $self->{FD} = undef;
  
     _debug
        "Win32 Optimizer: temp file (",
        $self->{KFD},
        $self->{TYPE},
        $self->{TFD},
        ", fh ",
        $self->{TEMP_FILE_HANDLE},
        "): ",
        $self->{TEMP_FILE_NAME}
        if _debugging_details;
  }
  
  
  sub _reset_temp_file_pointer {
     my $self = shift;
     SetFilePointer( $self->{TEMP_FILE_HANDLE}, 0, 0, FILE_BEGIN )
        or confess "$^E seeking on (fd $self->{TFD}) $self->{TEMP_FILE_NAME} for kid's fd $self->{KFD}";
  }
  
  
  sub _send_through_temp_file {
     my IPC::Run::Win32IO $self = shift;
  
     _debug
        "Win32 optimizer: optimizing "
        . " $self->{KFD} $self->{TYPE} temp file instead of ",
           ref $self->{SOURCE} || $self->{SOURCE}
        if _debugging_details;
  
     $self->_create_temp_file;
  
     if ( defined ${$self->{SOURCE}} ) {
        my $bytes_written = 0;
        my $data_ref;
        if ( $self->binmode ) {
  	 $data_ref = $self->{SOURCE};
        }
        else {
           my $data = ${$self->{SOURCE}};  # Ugh, a copy.
  	 $data =~ s/(?<!\r)\n/\r\n/g;
  	 $data_ref = \$data;
        }
  
        WriteFile(
           $self->{TEMP_FILE_HANDLE},
           $$data_ref,
           0,              ## Write entire buffer
           $bytes_written,
           [],             ## Not overlapped.
        ) or croak
           "$^E writing $self->{TEMP_FILE_NAME} for kid to read on fd $self->{KFD}";
        _debug
           "Win32 optimizer: wrote $bytes_written to temp file $self->{TEMP_FILE_NAME}"
           if _debugging_data;
  
        $self->_reset_temp_file_pointer;
  
     }
  
  
     _debug "Win32 optimizer: kid to read $self->{KFD} from temp file on $self->{TFD}"
        if _debugging_details;
  }
  
  
  sub _init_recv_through_temp_file {
     my IPC::Run::Win32IO $self = shift;
  
     $self->_create_temp_file;
  }
  
  
  ## TODO: Use the Win32 API in the select loop to see if the file has grown
  ## and read it incrementally if it has.
  sub _recv_through_temp_file {
     my IPC::Run::Win32IO $self = shift;
  
     ## This next line kicks in if the run() never got to initting things
     ## and needs to clean up.
     return undef unless defined $self->{TEMP_FILE_HANDLE};
  
     push @{$self->{FILTERS}}, sub {
        my ( undef, $out_ref ) = @_;
  
        return undef unless defined $self->{TEMP_FILE_HANDLE};
  
        my $r;
        my $s;
        ReadFile(
  	 $self->{TEMP_FILE_HANDLE},
  	 $s,
  	 999_999,  ## Hmmm, should read the size.
  	 $r,
  	 []
        ) or croak "$^E reading from $self->{TEMP_FILE_NAME}";
  
        _debug "ReadFile( $self->{TFD} ) = $r chars '$s'" if _debugging_data;
  
        return undef unless $r;
  
        $s =~ s/\r\n/\n/g unless $self->binmode;
  
        my $pos = pos $$out_ref;
        $$out_ref .= $s;
        pos( $out_ref ) = $pos;
        return 1;
     };
  
     my ( $harness ) = @_;
  
     $self->_reset_temp_file_pointer;
  
     1 while $self->_do_filters( $harness );
  
     pop @{$self->{FILTERS}};
  
     IPC::Run::_close( $self->{TFD} );
  }
  
  =head1 SUBROUTINES
  
  =over
  
  =item poll
  
  Windows version of IPC::Run::IP::poll.
  
  =back
  
  =cut
  
  sub poll {
     my IPC::Run::Win32IO $self = shift;
  
     return if $self->{SEND_THROUGH_TEMP_FILE} || $self->{RECV_THROUGH_TEMP_FILE};
  
     return $self->SUPER::poll( @_ );
  }
  
  
  ## When threaded Perls get good enough, we should use threads here.
  ## The problem with threaded perls is that they dup() all sorts of
  ## filehandles and fds and don't allow sufficient control over
  ## closing off the ones we don't want.
  
  sub _spawn_pumper {
     my ( $stdin, $stdout, $debug_fd, $binmode, $child_label, @opts ) = @_;
     my ( $stdin_fd, $stdout_fd ) = ( fileno $stdin, fileno $stdout );
  
     _debug "pumper stdin = ", $stdin_fd if _debugging_details;
     _debug "pumper stdout = ", $stdout_fd if _debugging_details;
     _inherit $stdin_fd, $stdout_fd, $debug_fd;
     my @I_options = map qq{"-I$_"}, @INC;
  
     my $cmd_line = join( " ",
        qq{"$^X"},
        @I_options,
        qw(-MIPC::Run::Win32Pump -e 1 ),
  ## I'm using this clunky way of passing filehandles to the child process
  ## in order to avoid some kind of premature closure of filehandles
  ## problem I was having with VCP's test suite when passing them
  ## via CreateProcess.  All of the ## REMOVE code is stuff I'd like
  ## to be rid of and the ## ADD code is what I'd like to use.
        FdGetOsFHandle( $stdin_fd ), ## REMOVE
        FdGetOsFHandle( $stdout_fd ), ## REMOVE
        FdGetOsFHandle( $debug_fd ), ## REMOVE
        $binmode ? 1 : 0,
        $$, $^T, _debugging_level, qq{"$child_label"},
        @opts
     );
  
  #   open SAVEIN,  "<&STDIN"  or croak "$! saving STDIN";       #### ADD
  #   open SAVEOUT, ">&STDOUT" or croak "$! saving STDOUT";       #### ADD
  #   open SAVEERR, ">&STDERR" or croak "$! saving STDERR";       #### ADD
  #   _dont_inherit \*SAVEIN;       #### ADD
  #   _dont_inherit \*SAVEOUT;       #### ADD
  #   _dont_inherit \*SAVEERR;       #### ADD
  #   open STDIN,  "<&$stdin_fd"  or croak "$! dup2()ing $stdin_fd (pumper's STDIN)";       #### ADD
  #   open STDOUT, ">&$stdout_fd" or croak "$! dup2()ing $stdout_fd (pumper's STDOUT)";       #### ADD
  #   open STDERR, ">&$debug_fd" or croak "$! dup2()ing $debug_fd (pumper's STDERR/debug_fd)";       #### ADD
  
     _debug "pump cmd line: ", $cmd_line if _debugging_details;
  
     my $process;
     Win32::Process::Create( 
        $process,
        $^X,
        $cmd_line,
        1,  ## Inherit handles
        NORMAL_PRIORITY_CLASS,
        ".",
     ) or croak "$!: Win32::Process::Create()";
  
  #   open STDIN,  "<&SAVEIN"  or croak "$! restoring STDIN";       #### ADD
  #   open STDOUT, ">&SAVEOUT" or croak "$! restoring STDOUT";       #### ADD
  #   open STDERR, ">&SAVEERR" or croak "$! restoring STDERR";       #### ADD
  #   close SAVEIN             or croak "$! closing SAVEIN";       #### ADD
  #   close SAVEOUT            or croak "$! closing SAVEOUT";       #### ADD
  #   close SAVEERR            or croak "$! closing SAVEERR";       #### ADD
  
     close $stdin  or croak "$! closing pumper's stdin in parent";
     close $stdout or croak "$! closing pumper's stdout in parent";
     # Don't close $debug_fd, we need it, as do other pumpers.
  
     # Pause a moment to allow the child to get up and running and emit
     # debug messages.  This does not always work.
     #   select undef, undef, undef, 1 if _debugging_details;
  
     _debug "_spawn_pumper pid = ", $process->GetProcessID 
        if _debugging_data;
  }
  
  
  my $next_port = 2048;
  my $loopback  = inet_aton "127.0.0.1";
  my $tcp_proto = getprotobyname('tcp');
  croak "$!: getprotobyname('tcp')" unless defined $tcp_proto;
  
  sub _socket {
     my ( $server ) = @_;
     $server ||= gensym;
     my $client = gensym;
  
     my $listener = gensym;
     socket $listener, PF_INET, SOCK_STREAM, $tcp_proto
        or croak "$!: socket()";
     setsockopt $listener, SOL_SOCKET, SO_REUSEADDR, pack("l", 0)
        or croak "$!: setsockopt()";
  
     my $port;
     my @errors;
  PORT_FINDER_LOOP:
     {
        $port = $next_port;
        $next_port = 2048 if ++$next_port > 65_535; 
        unless ( bind $listener, sockaddr_in( $port, $loopback ) ) {
  	 push @errors, "$! on port $port";
  	 croak join "\n", @errors if @errors > 10;
           goto PORT_FINDER_LOOP;
        }
     }
  
     _debug "win32 port = $port" if _debugging_details;
  
     listen $listener, my $queue_size = 1
        or croak "$!: listen()";
  
     {
        socket $client, PF_INET, SOCK_STREAM, $tcp_proto
           or croak "$!: socket()";
  
        my $paddr = sockaddr_in($port, $loopback );
  
        connect $client, $paddr
           or croak "$!: connect()";
      
        croak "$!: accept" unless defined $paddr;
  
        ## The windows "default" is SO_DONTLINGER, which should make
        ## sure all socket data goes through.  I have my doubts based
        ## on experimentation, but nothing prompts me to set SO_LINGER
        ## at this time...
        setsockopt $client, IPPROTO_TCP, TCP_NODELAY, pack("l", 0)
  	 or croak "$!: setsockopt()";
     }
  
     {
        _debug "accept()ing on port $port" if _debugging_details;
        my $paddr = accept( $server, $listener );
        croak "$!: accept()" unless defined $paddr;
     }
  
     _debug
        "win32 _socket = ( ", fileno $server, ", ", fileno $client, " ) on port $port" 
        if _debugging_details;
     return ( $server, $client );
  }
  
  
  sub _open_socket_pipe {
     my IPC::Run::Win32IO $self = shift;
     my ( $debug_fd, $parent_handle ) = @_;
  
     my $is_send_to_child = $self->dir eq "<";
  
     $self->{CHILD_HANDLE}     = gensym;
     $self->{PUMP_PIPE_HANDLE} = gensym;
  
     ( 
        $self->{PARENT_HANDLE},
        $self->{PUMP_SOCKET_HANDLE}
     ) = _socket $parent_handle;
  
     ## These binmodes seem to have no effect on Win2K, but just to be safe
     ## I do them.
     binmode $self->{PARENT_HANDLE}      or die $!;
     binmode $self->{PUMP_SOCKET_HANDLE} or die $!;
  
  _debug "PUMP_SOCKET_HANDLE = ", fileno $self->{PUMP_SOCKET_HANDLE}
     if _debugging_details;
  ##my $buf;
  ##$buf = "write on child end of " . fileno( $self->{WRITE_HANDLE} ) . "\n\n\n\n\n";
  ##POSIX::write(fileno $self->{WRITE_HANDLE}, $buf, length $buf) or warn "$! in syswrite";
  ##$buf = "write on parent end of " . fileno( $self->{CHILD_HANDLE} ) . "\r\n";
  ##POSIX::write(fileno $self->{CHILD_HANDLE},$buf, length $buf) or warn "$! in syswrite";
  ##   $self->{CHILD_HANDLE}->autoflush( 1 );
  ##   $self->{WRITE_HANDLE}->autoflush( 1 );
  
     ## Now fork off a data pump and arrange to return the correct fds.
     if ( $is_send_to_child ) {
        pipe $self->{CHILD_HANDLE}, $self->{PUMP_PIPE_HANDLE}
           or croak "$! opening child pipe";
  _debug "CHILD_HANDLE = ", fileno $self->{CHILD_HANDLE}
     if _debugging_details;
  _debug "PUMP_PIPE_HANDLE = ", fileno $self->{PUMP_PIPE_HANDLE}
     if _debugging_details;
     }
     else {
        pipe $self->{PUMP_PIPE_HANDLE}, $self->{CHILD_HANDLE}
           or croak "$! opening child pipe";
  _debug "CHILD_HANDLE = ", fileno $self->{CHILD_HANDLE}
     if _debugging_details;
  _debug "PUMP_PIPE_HANDLE = ", fileno $self->{PUMP_PIPE_HANDLE}
     if _debugging_details;
     }
  
     ## These binmodes seem to have no effect on Win2K, but just to be safe
     ## I do them.
     binmode $self->{CHILD_HANDLE};
     binmode $self->{PUMP_PIPE_HANDLE};
  
     ## No child should ever see this.
     _dont_inherit $self->{PARENT_HANDLE};
  
     ## We clear the inherit flag so these file descriptors are not inherited.
     ## It'll be dup()ed on to STDIN/STDOUT/STDERR before CreateProcess is
     ## called and *that* fd will be inheritable.
     _dont_inherit $self->{PUMP_SOCKET_HANDLE};
     _dont_inherit $self->{PUMP_PIPE_HANDLE};
     _dont_inherit $self->{CHILD_HANDLE};
  
     ## Need to return $self so the HANDLEs don't get freed.
     ## Return $self, $parent_fd, $child_fd
     my ( $parent_fd, $child_fd ) = (
        fileno $self->{PARENT_HANDLE},
        fileno $self->{CHILD_HANDLE}
     );
  
     ## Both PUMP_..._HANDLEs will be closed, no need to worry about
     ## inheritance.
     _debug "binmode on" if _debugging_data && $self->binmode;
     _spawn_pumper(
        $is_send_to_child
  	 ? ( $self->{PUMP_SOCKET_HANDLE}, $self->{PUMP_PIPE_HANDLE} )
  	 : ( $self->{PUMP_PIPE_HANDLE}, $self->{PUMP_SOCKET_HANDLE} ),
        $debug_fd,
        $self->binmode,
        $child_fd . $self->dir . "pump" . $self->dir . $parent_fd,
     );
  
  {
  my $foo;
  confess "PARENT_HANDLE no longer open"
     unless POSIX::read( $parent_fd, $foo, 0 );
  }
  
     _debug "win32_fake_pipe = ( $parent_fd, $child_fd )"
        if _debugging_details;
  
     $self->{FD}  = $parent_fd;
     $self->{TFD} = $child_fd;
  }
  
  sub _do_open {
     my IPC::Run::Win32IO $self = shift;
  
     if ( $self->{SEND_THROUGH_TEMP_FILE} ) {
        return $self->_send_through_temp_file( @_ );
     }
     elsif ( $self->{RECV_THROUGH_TEMP_FILE} ) {
        return $self->_init_recv_through_temp_file( @_ );
     }
     else {
        return $self->_open_socket_pipe( @_ );
     }
  }
  
  1;
  
  =pod
  
  =head1 AUTHOR
  
  Barries Slaymaker <barries@slaysys.com>.  Funded by Perforce Software, Inc.
  
  =head1 COPYRIGHT
  
  Copyright 2001, Barrie Slaymaker, All Rights Reserved.
  
  You may use this under the terms of either the GPL 2.0 or the Artistic License.
  
  =cut
IPC_RUN_WIN32IO

    $main::fatpacked{"IPC/Run/Win32Pump.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'IPC_RUN_WIN32PUMP';
  package IPC::Run::Win32Pump;
  
  =pod
  
  =head1 NAME
  
  IPC::Run::Win32Pump - helper processes to shovel data to/from parent, child
  
  =head1 SYNOPSIS
  
  Internal use only; see IPC::Run::Win32IO and best of luck to you.
  
  =head1 DESCRIPTION
  
  See L<IPC::Run::Win32Helper|IPC::Run::Win32Helper> for details.  This
  module is used in subprocesses that are spawned to shovel data to/from
  parent processes from/to their child processes.  Where possible, pumps
  are optimized away.
  
  NOTE: This is not a real module: it's a script in module form, designed
  to be run like
  
     $^X -MIPC::Run::Win32Pumper -e 1 ...
  
  It parses a bunch of command line parameters from IPC::Run::Win32IO.
  
  =cut
  
  use strict;
  use vars qw{$VERSION};
  BEGIN {
  	$VERSION = '0.90';
  }
  
  use Win32API::File qw(
     OsFHandleOpen
  );
  
  
  my ( $stdin_fh, $stdout_fh, $debug_fh, $binmode, $parent_pid, $parent_start_time, $debug, $child_label );
  BEGIN {
     ( $stdin_fh, $stdout_fh, $debug_fh, $binmode, $parent_pid, $parent_start_time, $debug, $child_label ) = @ARGV;
     ## Rather than letting IPC::Run::Debug export all-0 constants
     ## when not debugging, we do it manually in order to not even
     ## load IPC::Run::Debug.
     if ( $debug ) {
        eval "use IPC::Run::Debug qw( :default _debug_init ); 1;"
  	 or die $@;
     }
     else {
        eval <<STUBS_END or die $@;
  	 sub _debug {}
  	 sub _debug_init {}
  	 sub _debugging() { 0 }
  	 sub _debugging_data() { 0 }
  	 sub _debugging_details() { 0 }
  	 sub _debugging_gory_details() { 0 }
  	 1;
  STUBS_END
     }
  }
  
  ## For some reason these get created with binmode on.  AAargh, gotta       #### REMOVE
  ## do it by hand below.       #### REMOVE
  if ( $debug ) {       #### REMOVE
  close STDERR;       #### REMOVE
  OsFHandleOpen( \*STDERR, $debug_fh, "w" )       #### REMOVE
   or print "$! opening STDERR as Win32 handle $debug_fh in pumper $$";       #### REMOVE
  }       #### REMOVE
  close STDIN;       #### REMOVE
  OsFHandleOpen( \*STDIN, $stdin_fh, "r" )       #### REMOVE
  or die "$! opening STDIN as Win32 handle $stdin_fh in pumper $$";       #### REMOVE
  close STDOUT;       #### REMOVE
  OsFHandleOpen( \*STDOUT, $stdout_fh, "w" )       #### REMOVE
  or die "$! opening STDOUT as Win32 handle $stdout_fh in pumper $$";       #### REMOVE
  
  binmode STDIN;
  binmode STDOUT;
  $| = 1;
  select STDERR; $| = 1; select STDOUT;
  
  $child_label ||= "pump";
  _debug_init(
  $parent_pid,
  $parent_start_time,
  $debug,
  fileno STDERR,
  $child_label,
  );
  
  _debug "Entered" if _debugging_details;
  
  # No need to close all fds; win32 doesn't seem to pass any on to us.
  $| = 1;
  my $buf;
  my $total_count = 0;
  while (1) {
  my $count = sysread STDIN, $buf, 10_000;
  last unless $count;
  if ( _debugging_gory_details ) {
   my $msg = "'$buf'";
   substr( $msg, 100, -1 ) = '...' if length $msg > 100;
   $msg =~ s/\n/\\n/g;
   $msg =~ s/\r/\\r/g;
   $msg =~ s/\t/\\t/g;
   $msg =~ s/([\000-\037\177-\277])/sprintf "\0x%02x", ord $1/eg;
   _debug sprintf( "%5d chars revc: ", $count ), $msg;
  }
  $total_count += $count;
  $buf =~ s/\r//g unless $binmode;
  if ( _debugging_gory_details ) {
   my $msg = "'$buf'";
   substr( $msg, 100, -1 ) = '...' if length $msg > 100;
   $msg =~ s/\n/\\n/g;
   $msg =~ s/\r/\\r/g;
   $msg =~ s/\t/\\t/g;
   $msg =~ s/([\000-\037\177-\277])/sprintf "\0x%02x", ord $1/eg;
   _debug sprintf( "%5d chars sent: ", $count ), $msg;
  }
  print $buf;
  }
  
  _debug "Exiting, transferred $total_count chars" if _debugging_details;
  
  ## Perform a graceful socket shutdown.  Windows defaults to SO_DONTLINGER,
  ## which should cause a "graceful shutdown in the background" on sockets.
  ## but that's only true if the process closes the socket manually, it
  ## seems; if the process exits and lets the OS clean up, the OS is not
  ## so kind.  STDOUT is not always a socket, of course, but it won't hurt
  ## to close a pipe and may even help.  With a closed source OS, who
  ## can tell?
  ##
  ## In any case, this close() is one of the main reasons we have helper
  ## processes; if the OS closed socket fds gracefully when an app exits,
  ## we'd just redirect the client directly to what is now the pump end 
  ## of the socket.  As it is, however, we need to let the client play with
  ## pipes, which don't have the abort-on-app-exit behavior, and then
  ## adapt to the sockets in the helper processes to allow the parent to
  ## select.
  ##
  ## Possible alternatives / improvements:
  ## 
  ## 1) use helper threads instead of processes.  I don't trust perl's threads
  ## as of 5.005 or 5.6 enough (which may be myopic of me).
  ##
  ## 2) figure out if/how to get at WaitForMultipleObjects() with pipe
  ## handles.  May be able to take the Win32 handle and pass it to 
  ## Win32::Event::wait_any, dunno.
  ## 
  ## 3) Use Inline::C or a hand-tooled XS module to do helper threads.
  ## This would be faster than #1, but would require a ppm distro.
  ##
  close STDOUT;
  close STDERR;
  
  1;
  
  =pod
  
  =head1 AUTHOR
  
  Barries Slaymaker <barries@slaysys.com>.  Funded by Perforce Software, Inc.
  
  =head1 COPYRIGHT
  
  Copyright 2001, Barrie Slaymaker, All Rights Reserved.
  
  You may use this under the terms of either the GPL 2.0 ir the Artistic License.
  
  =cut
IPC_RUN_WIN32PUMP

    $main::fatpacked{"IPC/System/Options.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'IPC_SYSTEM_OPTIONS';
  package IPC::System::Options;
  
  our $DATE = '2017-04-09'; # DATE
  our $VERSION = '0.31'; # VERSION
  
  use strict;
  use warnings;
  
  use Proc::ChildError qw(explain_child_error);
  use String::ShellQuote;
  
  my $log;
  our %Global_Opts;
  
  sub import {
      my $self = shift;
  
      my $caller = caller();
      my $i = 0;
      while ($i < @_) {
          # backtick is the older, deprecated name for readpipe
          if ($_[$i] =~ /\A(system|readpipe|backtick|run|import)\z/) {
              no strict 'refs';
              *{"$caller\::$_[$i]"} = \&{"$self\::" . $_[$i]};
          } elsif ($_[$i] =~ /\A-(.+)/) {
              die "$_[$i] requires an argument" unless $i < @_-1;
              $Global_Opts{$1} = $_[$i+1];
              $i++;
          } else {
              die "$_[$i] is not exported by ".__PACKAGE__;
          }
          $i++;
      }
  }
  
  sub _quote {
      if (@_ == 1) {
          return $_[0];
      }
  
      if ($^O eq 'MSWin32') {
          require Win32::ShellQuote;
          return Win32::ShellQuote::quote_system_string(@_);
      } else {
          return shell_quote(@_);
      }
  }
  
  sub _system_or_readpipe_or_run {
      my $which = shift;
      my $opts = ref($_[0]) eq 'HASH' ? shift : {};
      for (keys %Global_Opts) {
          $opts->{$_} = $Global_Opts{$_} if !defined($opts->{$_});
      }
      my @args = @_;
  
      # check known options
      for (keys %$opts) {
          die "Unknown option '$_'"
              unless /\A(
                          capture_stdout|capture_stderr|capture_merged|
                          chdir|dies?|dry_run|env|lang|log||max_log_output|shell|
                          stdin # XXX: only for run()
                      )\z/x;
      }
  
      my $opt_die = $opts->{die} || $opts->{dies};
  
      my $exit_code;
      my $os_error = "";
      my $extra_error;
  
      $log ||= do { require Log::Any::IfLOG; Log::Any::IfLOG->get_logger } if $opts->{log};
  
      my $cwd;
      if ($opts->{chdir}) {
          require Cwd;
          $cwd = Cwd::getcwd();
          if (!defined $cwd) { # checking $! is always true here, why?
              $log->error("Can't getcwd: $!") if $log;
              $exit_code = -1;
              $os_error = $!;
              $extra_error = "Can't getcwd";
              goto CHECK_RESULT;
          }
          unless (chdir $opts->{chdir}) {
              $log->error("Can't chdir to '$opts->{chdir}': $!") if $log;
              $exit_code = -1;
              $os_error = $!;
              $extra_error = "Can't chdir";
              goto CHECK_RESULT;
          }
      }
  
      # set ENV
      my %save_env;
      my %set_env;
      if ($opts->{lang}) {
          $set_env{LC_ALL}   = $opts->{lang};
          $set_env{LANGUAGE} = $opts->{lang};
          $set_env{LANG}     = $opts->{lang};
      }
      if ($opts->{env}) {
          $set_env{$_} = $opts->{env}{$_} for keys %{ $opts->{env} };
      }
      if (%set_env) {
          for (keys %set_env) {
              $save_env{$_} = $ENV{$_};
              $ENV{$_} = $set_env{$_};
          }
      }
  
      my $wa;
      my $res;
  
      my $code_capture = sub {
          my $doit = shift;
  
          if ($opts->{capture_stdout} && $opts->{capture_stderr}) {
              require Capture::Tiny;
              (${ $opts->{capture_stdout} }, ${ $opts->{capture_stderr} }) =
                  &Capture::Tiny::capture($doit);
          } elsif ($opts->{capture_merged}) {
              require Capture::Tiny;
              ${ $opts->{capture_merged} } =
                  &Capture::Tiny::capture_merged($doit);
          } elsif ($opts->{capture_stdout}) {
              require Capture::Tiny;
              ${ $opts->{capture_stdout} } =
                  &Capture::Tiny::capture_stdout($doit);
          } elsif ($opts->{capture_stderr}) {
              require Capture::Tiny;
              ${ $opts->{capture_stderr} } =
                  &Capture::Tiny::capture_stderr($doit);
          } else {
              $doit->();
          }
      };
  
      if ($which eq 'system') {
  
          if ($opts->{log} || $opts->{dry_run}) {
              if ($opts->{log}) {
                  my $meth;
                  my $label = "";
                  if ($opts->{dry_run}) {
                      $label = "[DRY RUN] ";
                      $meth = "infof";
                  } else {
                      $meth = "tracef";
                  }
                  $log->$meth("%ssystem(%s), env=%s", $label, \@args, \%set_env);
              } else {
                  warn "[DRY RUN] system(".join(", ", @args).")\n";
              }
              if ($opts->{dry_run}) {
                  $exit_code = 0;
                  $res = "";
                  goto CHECK_RESULT;
              }
          }
  
          my $doit = sub {
              if ($opts->{shell}) {
                  # force the use of shell
                  $res = system _quote(@args);
              } elsif (defined $opts->{shell}) {
                  # forbid shell
                  $res = system {$args[0]} @args;
              } else {
                  # might or might not use shell (if @args == 1)
                  $res = system @args;
              }
              $exit_code = $?;
              $os_error = $!;
          };
          $code_capture->($doit);
  
      } elsif ($which eq 'readpipe') {
  
          $wa = wantarray;
          my $cmd = _quote(@args);
  
          if ($opts->{log} || $opts->{dry_run}) {
              if ($opts->{log}) {
                  my $meth;
                  my $label = "";
                  if ($opts->{dry_run}) {
                      $label = "[DRY RUN] ";
                      $meth = "infof";
                  } else {
                      $meth = "tracef";
                  }
                  $log->$meth("%sreadpipe(%s), env=%s", $label, $cmd, \%set_env);
              } else {
                  warn "[DRY RUN] readpipe($cmd)\n";
              }
              if ($opts->{dry_run}) {
                  $exit_code = 0;
                  $res = "";
                  goto CHECK_RESULT;
              }
          }
  
          my $doit = sub {
              if ($wa) {
                  $res = [`$cmd`];
              } else {
                  $res = `$cmd`;
              }
              $exit_code = $?;
              $os_error = $!;
          };
          $code_capture->($doit);
  
          # log output
          if ($opts->{log}) {
              my $res_show;
              if (defined $opts->{max_log_output}) {
                  $res_show = '';
                  if ($wa) {
                      for (@$res) {
                          if (length($res_show) + length($_) >=
                                  $opts->{max_log_output}) {
                              $res_show .= substr(
                                  $_,0,$opts->{max_log_output}-length($res_show));
                              last;
                          } else {
                              $res_show .= $_;
                          }
                      }
                  } else {
                      if (length($res) > $opts->{max_log_output}) {
                          $res_show = substr($res, 0, $opts->{max_log_output});
                      }
                  }
              }
              $log->tracef("result of readpipe(): %s (%d bytes)",
                           defined($res_show) ? $res_show : $res,
                           defined($res_show) ?
                               $opts->{max_log_output} : length($res))
                  unless $exit_code;
          }
  
      } else {
  
          if ($opts->{log} || $opts->{dry_run}) {
              if ($opts->{log}) {
                  my $meth;
                  my $label = "";
                  if ($opts->{dry_run}) {
                      $label = "[DRY RUN] ";
                      $meth = "infof";
                  } else {
                      $meth = "tracef";
                  }
                  $log->$meth("%srun(%s), env=%s", $label,
                              join(", ", @args), \%set_env);
              } else {
                  warn "[DRY RUN] run(".join(", ", @args).")\n";
              }
              if ($opts->{dry_run}) {
                  $exit_code = 0;
                  $res = "";
                  goto CHECK_RESULT;
              }
          }
  
          require IPC::Run;
          $res = IPC::Run::run(
              \@args,
              defined($opts->{stdin}) ? \$opts->{stdin} : \*STDIN,
              sub {
                  if ($opts->{capture_stdout}) {
                      ${$opts->{capture_stdout}} .= $_[0];
                  } else {
                      print $_[0];
                  }
              }, # out
              sub {
                  if ($opts->{capture_stderr}) {
                      ${$opts->{capture_stderr}} .= $_[0];
                  } else {
                      print STDERR $_[0];
                  }
              }, # err
          );
          $exit_code = $?;
          $os_error = $!;
  
      } # which
  
      # restore ENV
      if (%save_env) {
          for (keys %save_env) {
              if (defined $save_env{$_}) {
                  $ENV{$_} = $save_env{$_};
              } else {
                  undef $ENV{$_};
              }
          }
      }
  
      # restore previous working directory
      if ($cwd) {
          unless (chdir $cwd) {
              $log->error("Can't chdir back to '$cwd': $!") if $log;
              $exit_code ||= -1;
              $os_error = $!;
              $extra_error = "Can't chdir back";
              goto CHECK_RESULT;
          }
      }
  
    CHECK_RESULT:
      if ($exit_code) {
          if ($opts->{log} || $opt_die) {
              my $msg = sprintf(
                  "%s(%s) failed: %s (%s)%s%s%s",
                  $which,
                  join(" ", @args),
                  defined $extra_error ? "" : $exit_code,
                  defined $extra_error ? "$extra_error: $os_error" : explain_child_error($exit_code, $os_error),
                  (ref($opts->{capture_stdout}) ?
                       ", captured stdout: <<" .
                       (defined ${$opts->{capture_stdout}} ? ${$opts->{capture_stdout}} : ''). ">>" : ""),
                  (ref($opts->{capture_stderr}) ?
                       ", captured stderr: <<" .
                       (defined ${$opts->{capture_stderr}} ? ${$opts->{capture_stderr}} : ''). ">>" : ""),
                  (ref($opts->{capture_merged}) ?
                       ", captured merged: <<" .
                       (defined ${$opts->{capture_merged}} ? ${$opts->{capture_merged}} : ''). ">>" : ""),
              );
              $log->error($msg) if $opts->{log};
              die $msg if $opt_die;
          }
      }
  
      $? = $exit_code;
  
      return $wa && $which ne 'run' ? @$res : $res;
  }
  
  sub system {
      _system_or_readpipe_or_run('system', @_);
  }
  
  # backtick is the older, deprecated name for readpipe
  sub backtick {
      _system_or_readpipe_or_run('readpipe', @_);
  }
  
  sub readpipe {
      _system_or_readpipe_or_run('readpipe', @_);
  }
  
  sub run {
      _system_or_readpipe_or_run('run', @_);
  }
  
  1;
  # ABSTRACT: Perl's system() and readpipe/qx replacement, with options
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  IPC::System::Options - Perl's system() and readpipe/qx replacement, with options
  
  =head1 VERSION
  
  This document describes version 0.31 of IPC::System::Options (from Perl distribution IPC-System-Options), released on 2017-04-09.
  
  =head1 SYNOPSIS
  
   use IPC::System::Options qw(system readpipe run);
  
   # use exactly like system()
   system(...);
  
   # use exactly like readpipe() (a.k.a. qx a.k.a. `` a.k.a. the backtick operator)
   my $res = readpipe(...);
   $res = `...`;
  
   # but these functions accept an optional hash first argument to specify options
   system({...}, ...);
   readpipe({...}, ...);
  
   # run without shell, even though there is only one argument
   system({shell=>0}, "ls");
   system({shell=>0}, "ls -lR"); # will fail, as there is no 'ls -lR' binary
  
   # force shell, even though there are multiple arguments (arguments will be
   # quoted for you, including proper quoting on Win32)
   system({shell=>1}, "ls", "-lR");
  
   # set LC_ALL/LANGUAGE/LANG environment variable
   $res = readpipe({lang=>"de_DE.UTF-8"}, "df");
  
   # log using Log::Any, die on failure
   system({log=>1, die=>1}, "blah", ...);
  
   # chdir first before running program (and chdir back afterwards)
   system({chdir => "/tmp", die => 1}, "some-program");
  
  Set default options for all calls (prefix each option with dash):
  
   use IPC::System::Options 'system', 'readpipe', -log=>1, -die=>1;
  
  C<run()> is like C<system()> but uses L<IPC::Run>'s C<run()> instead of
  C<system()>:
  
   run('ls');
  
   # also accepts an optional hash first argument. some additional options that
   # run() accepts: stdin.
   run({capture_stdout => \$stdout, capture_stderr => \$stderr}, 'ls', '-l');
  
  =head1 DESCRIPTION
  
  =for Pod::Coverage ^(backtick)$
  
  =head1 FUNCTIONS
  
  =head2 system([ \%opts ], @args)
  
  Just like perl's C<system()> except that it accepts an optional hash first
  argument to specify options. Currently known options:
  
  =over
  
  =item * shell => bool
  
  Can be set to 0 to always avoid invoking the shell. The default is to use the
  shell under certain conditions, like perl's C<system()>. But unlike perl's
  C<system()>, you can force shell usage even though you pass multiple arguments
  (in which case, the arguments will be quoted for you, including proper quoting
  on Win32).
  
  =item * lang => str
  
  Temporarily set locale-related environment variables: C<LC_ALL> (this is the
  highest precedence, even higher than the other C<LC_*> variables including
  C<LC_MESSAGES>), C<LANGUAGE> (this is used in Linux, with precedence higher than
  C<LANG> but lower than C<LC_*>), and C<LANG>.
  
  Of course you can set the environment variables manually (or use the C<env>
  option), this option is just for convenience.
  
  =item * env => hashref
  
  Temporarily set environment variables.
  
  =item * log => bool
  
  If set to true, then will log invocation as well as return/result value. Will
  log using L<Log::Any> at the C<trace> level.
  
  =item * die => bool
  
  If set to true, will die on failure.
  
  =item * capture_stdout => scalarref
  
  Capture stdout using L<Capture::Tiny>.
  
  =item * capture_stderr => scalarref
  
  Capture stderr using L<Capture::Tiny>.
  
  =item * capture_merged => scalarref
  
  Capture stdout and stderr in a single variable using L<Capture::Tiny>'s
  C<capture_merged>.
  
  =item * chdir => str
  
  Attempt to change to specified directory first and change back to the original
  directory after the command has been run. This is a convenient option so you can
  do this kind of task in a single call:
  
   {
       my $cwd = getcwd();
       chdir $dir or die;
       system(...);
       chdir $cwd or die;
   }
  
  If the attempt to chdir before command execution fails, will die if C<die>
  option is set to true. Otherwise, C<$!> (OS error) will be set to the C<chdir()>
  error and to minimize surprise C<$?> (child exit code) will also be set to
  non-zero value (-1) even though at this point no child process has been run.
  
  If the attempt to chdir back (after command execution) fails, will die if C<die>
  option is set to true. Otherwise, C<$!> will be set to the C<chdir()> error and
  C<$?> will be set to -1 only if C<$?> is zero. So if the command fails, C<$?>
  will contain the exit code of the command.
  
  =item * dry_run => bool
  
  If set to true, then will only display what would be executed to STDERR (or log
  at C<warn> level, if C<log> option is true) instead of actually executing the
  command.
  
  Will set C<$?> (child exit code) to 0.
  
  An example of how this option can be used:
  
   system({ dry_run => $ENV{DRY_RUN} }, ...);
  
  This will allow you to run script in dry-run mode by setting environment
  variable.
  
  =back
  
  =head2 readpipe([ \%opts ], @args)
  
  Just like perl's C<readpipe()> (a.k.a. C<qx()> a.k.a. C<``> a.k.a. the backtick
  operator) except that it accepts an optional hash first argument to specify
  options. And it can accept multiple arguments (in which case, the arguments will
  be quoted for you, including proper quoting on Win32).
  
  Known options:
  
  =over
  
  =item * lang => str
  
  See option documentation in C<system()>.
  
  =item * env => hash
  
  See option documentation in C<system()>.
  
  =item * log => bool
  
  See option documentation in C<system()>.
  
  =item * die => bool
  
  See option documentation in C<system()>.
  
  =item * capture_stdout => scalarref
  
  See option documentation in C<system()>.
  
  =item * capture_stderr => scalarref
  
  See option documentation in C<system()>.
  
  =item * capture_merged => scalarref
  
  See option documentation in C<system()>.
  
  =item * max_log_output => int
  
  If set, will limit result length being logged. It's a good idea to set this
  (e.g. to 1024) if you expect some command to return large output.
  
  =item * chdir => str
  
  See option documentation in C<system()>.
  
  =item * dry_run => bool
  
  See option documentation in C<system()>.
  
  =back
  
  =head2 run([ \%opts ], @args)
  
  Like C<system()>, but uses L<IPC::Run>'s C<run()>. Known options:
  
  =over
  
  =item * lang => str
  
  See option documentation in C<system()>.
  
  =item * env => hash
  
  See option documentation in C<system()>.
  
  =item * log => bool
  
  See option documentation in C<system()>.
  
  =item * die => bool
  
  See option documentation in C<system()>.
  
  =item * capture_stdout => scalarref
  
  See option documentation in C<system()>.
  
  =item * capture_stderr => scalarref
  
  See option documentation in C<system()>.
  
  =item * capture_merged => scalarref
  
  See option documentation in C<system()>.
  
  =item * stdin => scalar
  
  Supply standard input.
  
  =item * chdir => str
  
  See option documentation in C<system()>.
  
  =item * dry_run => bool
  
  See option documentation in C<system()>.
  
  =back
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/IPC-System-Options>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-IPC-System-Options>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=IPC-System-Options>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016, 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
IPC_SYSTEM_OPTIONS

    $main::fatpacked{"JSON.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'JSON';
  package JSON;
  
  
  use strict;
  use Carp ();
  use base qw(Exporter);
  @JSON::EXPORT = qw(from_json to_json jsonToObj objToJson encode_json decode_json);
  
  BEGIN {
      $JSON::VERSION = '2.90';
      $JSON::DEBUG   = 0 unless (defined $JSON::DEBUG);
      $JSON::DEBUG   = $ENV{ PERL_JSON_DEBUG } if exists $ENV{ PERL_JSON_DEBUG };
  }
  
  my $Module_XS  = 'JSON::XS';
  my $Module_PP  = 'JSON::PP';
  my $Module_bp  = 'JSON::backportPP'; # included in JSON distribution
  my $PP_Version = '2.27203';
  my $XS_Version = '2.34';
  
  
  # XS and PP common methods
  
  my @PublicMethods = qw/
      ascii latin1 utf8 pretty indent space_before space_after relaxed canonical allow_nonref 
      allow_blessed convert_blessed filter_json_object filter_json_single_key_object 
      shrink max_depth max_size encode decode decode_prefix allow_unknown
  /;
  
  my @Properties = qw/
      ascii latin1 utf8 indent space_before space_after relaxed canonical allow_nonref
      allow_blessed convert_blessed shrink max_depth max_size allow_unknown
  /;
  
  my @XSOnlyMethods = qw/allow_tags/; # Currently nothing
  
  my @PPOnlyMethods = qw/
      indent_length sort_by
      allow_singlequote allow_bignum loose allow_barekey escape_slash as_nonblessed
  /; # JSON::PP specific
  
  
  # used in _load_xs and _load_pp ($INSTALL_ONLY is not used currently)
  my $_INSTALL_DONT_DIE  = 1; # When _load_xs fails to load XS, don't die.
  my $_INSTALL_ONLY      = 2; # Don't call _set_methods()
  my $_ALLOW_UNSUPPORTED = 0;
  my $_UNIV_CONV_BLESSED = 0;
  my $_USSING_bpPP       = 0;
  
  
  # Check the environment variable to decide worker module. 
  
  unless ($JSON::Backend) {
      $JSON::DEBUG and  Carp::carp("Check used worker module...");
  
      my $backend = exists $ENV{PERL_JSON_BACKEND} ? $ENV{PERL_JSON_BACKEND} : 1;
  
      if ($backend eq '1' or $backend =~ /JSON::XS\s*,\s*JSON::PP/) {
          _load_xs($_INSTALL_DONT_DIE) or _load_pp();
      }
      elsif ($backend eq '0' or $backend eq 'JSON::PP') {
          _load_pp();
      }
      elsif ($backend eq '2' or $backend eq 'JSON::XS') {
          _load_xs();
      }
      elsif ($backend eq 'JSON::backportPP') {
          $_USSING_bpPP = 1;
          _load_pp();
      }
      else {
          Carp::croak "The value of environmental variable 'PERL_JSON_BACKEND' is invalid.";
      }
  }
  
  
  sub import {
      my $pkg = shift;
      my @what_to_export;
      my $no_export;
  
      for my $tag (@_) {
          if ($tag eq '-support_by_pp') {
              if (!$_ALLOW_UNSUPPORTED++) {
                  JSON::Backend::XS
                      ->support_by_pp(@PPOnlyMethods) if ($JSON::Backend eq $Module_XS);
              }
              next;
          }
          elsif ($tag eq '-no_export') {
              $no_export++, next;
          }
          elsif ( $tag eq '-convert_blessed_universally' ) {
              eval q|
                  require B;
                  *UNIVERSAL::TO_JSON = sub {
                      my $b_obj = B::svref_2object( $_[0] );
                      return    $b_obj->isa('B::HV') ? { %{ $_[0] } }
                              : $b_obj->isa('B::AV') ? [ @{ $_[0] } ]
                              : undef
                              ;
                  }
              | if ( !$_UNIV_CONV_BLESSED++ );
              next;
          }
          push @what_to_export, $tag;
      }
  
      return if ($no_export);
  
      __PACKAGE__->export_to_level(1, $pkg, @what_to_export);
  }
  
  
  # OBSOLETED
  
  sub jsonToObj {
      my $alternative = 'from_json';
      if (defined $_[0] and UNIVERSAL::isa($_[0], 'JSON')) {
          shift @_; $alternative = 'decode';
      }
      Carp::carp "'jsonToObj' will be obsoleted. Please use '$alternative' instead.";
      return JSON::from_json(@_);
  };
  
  sub objToJson {
      my $alternative = 'to_json';
      if (defined $_[0] and UNIVERSAL::isa($_[0], 'JSON')) {
          shift @_; $alternative = 'encode';
      }
      Carp::carp "'objToJson' will be obsoleted. Please use '$alternative' instead.";
      JSON::to_json(@_);
  };
  
  
  # INTERFACES
  
  sub to_json ($@) {
      if (
          ref($_[0]) eq 'JSON'
          or (@_ > 2 and $_[0] eq 'JSON')
      ) {
          Carp::croak "to_json should not be called as a method.";
      }
      my $json = JSON->new;
  
      if (@_ == 2 and ref $_[1] eq 'HASH') {
          my $opt  = $_[1];
          for my $method (keys %$opt) {
              $json->$method( $opt->{$method} );
          }
      }
  
      $json->encode($_[0]);
  }
  
  
  sub from_json ($@) {
      if ( ref($_[0]) eq 'JSON' or $_[0] eq 'JSON' ) {
          Carp::croak "from_json should not be called as a method.";
      }
      my $json = JSON->new;
  
      if (@_ == 2 and ref $_[1] eq 'HASH') {
          my $opt  = $_[1];
          for my $method (keys %$opt) {
              $json->$method( $opt->{$method} );
          }
      }
  
      return $json->decode( $_[0] );
  }
  
  
  
  sub true  { $JSON::true  }
  
  sub false { $JSON::false }
  
  sub null  { undef; }
  
  
  sub require_xs_version { $XS_Version; }
  
  sub backend {
      my $proto = shift;
      $JSON::Backend;
  }
  
  #*module = *backend;
  
  
  sub is_xs {
      return $_[0]->backend eq $Module_XS;
  }
  
  
  sub is_pp {
      return not $_[0]->is_xs;
  }
  
  
  sub pureperl_only_methods { @PPOnlyMethods; }
  
  
  sub property {
      my ($self, $name, $value) = @_;
  
      if (@_ == 1) {
          my %props;
          for $name (@Properties) {
              my $method = 'get_' . $name;
              if ($name eq 'max_size') {
                  my $value = $self->$method();
                  $props{$name} = $value == 1 ? 0 : $value;
                  next;
              }
              $props{$name} = $self->$method();
          }
          return \%props;
      }
      elsif (@_ > 3) {
          Carp::croak('property() can take only the option within 2 arguments.');
      }
      elsif (@_ == 2) {
          if ( my $method = $self->can('get_' . $name) ) {
              if ($name eq 'max_size') {
                  my $value = $self->$method();
                  return $value == 1 ? 0 : $value;
              }
              $self->$method();
          }
      }
      else {
          $self->$name($value);
      }
  
  }
  
  
  
  # INTERNAL
  
  sub _load_xs {
      my $opt = shift;
  
      $JSON::DEBUG and Carp::carp "Load $Module_XS.";
  
      # if called after install module, overload is disable.... why?
      JSON::Boolean::_overrride_overload($Module_XS);
      JSON::Boolean::_overrride_overload($Module_PP);
  
      eval qq|
          use $Module_XS $XS_Version ();
      |;
  
      if ($@) {
          if (defined $opt and $opt & $_INSTALL_DONT_DIE) {
              $JSON::DEBUG and Carp::carp "Can't load $Module_XS...($@)";
              return 0;
          }
          Carp::croak $@;
      }
  
      unless (defined $opt and $opt & $_INSTALL_ONLY) {
          _set_module( $JSON::Backend = $Module_XS );
          my $data = join("", <DATA>); # this code is from Jcode 2.xx.
          close(DATA);
          eval $data;
          JSON::Backend::XS->init;
      }
  
      return 1;
  };
  
  
  sub _load_pp {
      my $opt = shift;
      my $backend = $_USSING_bpPP ? $Module_bp : $Module_PP;
  
      $JSON::DEBUG and Carp::carp "Load $backend.";
  
      # if called after install module, overload is disable.... why?
      JSON::Boolean::_overrride_overload($Module_XS);
      JSON::Boolean::_overrride_overload($backend);
  
      if ( $_USSING_bpPP ) {
          eval qq| require $backend |;
      }
      else {
          eval qq| use $backend $PP_Version () |;
      }
  
      if ($@) {
          if ( $backend eq $Module_PP ) {
              $JSON::DEBUG and Carp::carp "Can't load $Module_PP ($@), so try to load $Module_bp";
              $_USSING_bpPP++;
              $backend = $Module_bp;
              JSON::Boolean::_overrride_overload($backend);
              local $^W; # if PP installed but invalid version, backportPP redefines methods.
              eval qq| require $Module_bp |;
          }
          Carp::croak $@ if $@;
      }
  
      unless (defined $opt and $opt & $_INSTALL_ONLY) {
          _set_module( $JSON::Backend = $Module_PP ); # even if backportPP, set $Backend with 'JSON::PP'
          JSON::Backend::PP->init;
      }
  };
  
  
  sub _set_module {
      return if defined $JSON::true;
  
      my $module = shift;
  
      local $^W;
      no strict qw(refs);
  
      $JSON::true  = ${"$module\::true"};
      $JSON::false = ${"$module\::false"};
  
      push @JSON::ISA, $module;
      if ( JSON->is_xs and JSON->backend->VERSION < 3 ) {
          eval 'package JSON::PP::Boolean';
          push @{"$module\::Boolean::ISA"}, qw(JSON::PP::Boolean);
      }
  
      *{"JSON::is_bool"} = \&{"$module\::is_bool"};
  
      for my $method ($module eq $Module_XS ? @PPOnlyMethods : @XSOnlyMethods) {
          *{"JSON::$method"} = sub {
              Carp::carp("$method is not supported in $module.");
              $_[0];
          };
      }
  
      return 1;
  }
  
  
  
  #
  # JSON Boolean
  #
  
  package JSON::Boolean;
  
  my %Installed;
  
  sub _overrride_overload {
      return; # this function is currently disable.
      return if ($Installed{ $_[0] }++);
  
      my $boolean = $_[0] . '::Boolean';
  
      eval sprintf(q|
          package %s;
          use overload (
              '""' => sub { ${$_[0]} == 1 ? 'true' : 'false' },
              'eq' => sub {
                  my ($obj, $op) = ref ($_[0]) ? ($_[0], $_[1]) : ($_[1], $_[0]);
                  if ($op eq 'true' or $op eq 'false') {
                      return "$obj" eq 'true' ? 'true' eq $op : 'false' eq $op;
                  }
                  else {
                      return $obj ? 1 == $op : 0 == $op;
                  }
              },
          );
      |, $boolean);
  
      if ($@) { Carp::croak $@; }
  
      if ( exists $INC{'JSON/XS.pm'} and $boolean eq 'JSON::XS::Boolean' ) {
          local $^W;
          my $true  = do { bless \(my $dummy = 1), $boolean };
          my $false = do { bless \(my $dummy = 0), $boolean };
          *JSON::XS::true  = sub () { $true };
          *JSON::XS::false = sub () { $false };
      }
      elsif ( exists $INC{'JSON/PP.pm'} and $boolean eq 'JSON::PP::Boolean' ) {
          local $^W;
          my $true  = do { bless \(my $dummy = 1), $boolean };
          my $false = do { bless \(my $dummy = 0), $boolean };
          *JSON::PP::true  = sub { $true };
          *JSON::PP::false = sub { $false };
      }
  
      return 1;
  }
  
  
  #
  # Helper classes for Backend Module (PP)
  #
  
  package JSON::Backend::PP;
  
  sub init {
      local $^W;
      no strict qw(refs); # this routine may be called after JSON::Backend::XS init was called.
      *{"JSON::decode_json"} = \&{"JSON::PP::decode_json"};
      *{"JSON::encode_json"} = \&{"JSON::PP::encode_json"};
      *{"JSON::PP::is_xs"}  = sub { 0 };
      *{"JSON::PP::is_pp"}  = sub { 1 };
      return 1;
  }
  
  #
  # To save memory, the below lines are read only when XS backend is used.
  #
  
  package JSON;
  
  1;
  __DATA__
  
  
  #
  # Helper classes for Backend Module (XS)
  #
  
  package JSON::Backend::XS;
  
  use constant INDENT_LENGTH_FLAG => 15 << 12;
  
  use constant UNSUPPORTED_ENCODE_FLAG => {
      ESCAPE_SLASH      => 0x00000010,
      ALLOW_BIGNUM      => 0x00000020,
      AS_NONBLESSED     => 0x00000040,
      EXPANDED          => 0x10000000, # for developer's
  };
  
  use constant UNSUPPORTED_DECODE_FLAG => {
      LOOSE             => 0x00000001,
      ALLOW_BIGNUM      => 0x00000002,
      ALLOW_BAREKEY     => 0x00000004,
      ALLOW_SINGLEQUOTE => 0x00000008,
      EXPANDED          => 0x20000000, # for developer's
  };
  
  
  sub init {
      local $^W;
      no strict qw(refs);
      *{"JSON::decode_json"} = \&{"JSON::XS::decode_json"};
      *{"JSON::encode_json"} = \&{"JSON::XS::encode_json"};
      *{"JSON::XS::is_xs"}  = sub { 1 };
      *{"JSON::XS::is_pp"}  = sub { 0 };
      return 1;
  }
  
  
  sub support_by_pp {
      my ($class, @methods) = @_;
  
      local $^W;
      no strict qw(refs);
  
      my $JSON_XS_encode_orignal     = \&JSON::XS::encode;
      my $JSON_XS_decode_orignal     = \&JSON::XS::decode;
      my $JSON_XS_incr_parse_orignal = \&JSON::XS::incr_parse;
  
      *JSON::XS::decode     = \&JSON::Backend::XS::Supportable::_decode;
      *JSON::XS::encode     = \&JSON::Backend::XS::Supportable::_encode;
      *JSON::XS::incr_parse = \&JSON::Backend::XS::Supportable::_incr_parse;
  
      *{JSON::XS::_original_decode}     = $JSON_XS_decode_orignal;
      *{JSON::XS::_original_encode}     = $JSON_XS_encode_orignal;
      *{JSON::XS::_original_incr_parse} = $JSON_XS_incr_parse_orignal;
  
      push @JSON::Backend::XS::Supportable::ISA, 'JSON';
  
      my $pkg = 'JSON::Backend::XS::Supportable';
  
      *{JSON::new} = sub {
          my $proto = JSON::XS->new; $$proto = 0;
          bless  $proto, $pkg;
      };
  
  
      for my $method (@methods) {
          my $flag = uc($method);
          my $type |= (UNSUPPORTED_ENCODE_FLAG->{$flag} || 0);
             $type |= (UNSUPPORTED_DECODE_FLAG->{$flag} || 0);
  
          next unless($type);
  
          $pkg->_make_unsupported_method($method => $type);
      }
  
  #    push @{"JSON::XS::Boolean::ISA"}, qw(JSON::PP::Boolean);
  #    push @{"JSON::PP::Boolean::ISA"}, qw(JSON::Boolean);
  
      $JSON::DEBUG and Carp::carp("set -support_by_pp mode.");
  
      return 1;
  }
  
  
  
  
  #
  # Helper classes for XS
  #
  
  package JSON::Backend::XS::Supportable;
  
  $Carp::Internal{'JSON::Backend::XS::Supportable'} = 1;
  
  sub _make_unsupported_method {
      my ($pkg, $method, $type) = @_;
  
      local $^W;
      no strict qw(refs);
  
      *{"$pkg\::$method"} = sub {
          local $^W;
          if (defined $_[1] ? $_[1] : 1) {
              ${$_[0]} |= $type;
          }
          else {
              ${$_[0]} &= ~$type;
          }
          $_[0];
      };
  
      *{"$pkg\::get_$method"} = sub {
          ${$_[0]} & $type ? 1 : '';
      };
  
  }
  
  
  sub _set_for_pp {
      JSON::_load_pp( $_INSTALL_ONLY );
  
      my $type  = shift;
      my $pp    = JSON::PP->new;
      my $prop = $_[0]->property;
  
      for my $name (keys %$prop) {
          $pp->$name( $prop->{$name} ? $prop->{$name} : 0 );
      }
  
      my $unsupported = $type eq 'encode' ? JSON::Backend::XS::UNSUPPORTED_ENCODE_FLAG
                                          : JSON::Backend::XS::UNSUPPORTED_DECODE_FLAG;
      my $flags       = ${$_[0]} || 0;
  
      for my $name (keys %$unsupported) {
          next if ($name eq 'EXPANDED'); # for developer's
          my $enable = ($flags & $unsupported->{$name}) ? 1 : 0;
          my $method = lc $name;
          $pp->$method($enable);
      }
  
      $pp->indent_length( $_[0]->get_indent_length );
  
      return $pp;
  }
  
  sub _encode { # using with PP encode
      if (${$_[0]}) {
          _set_for_pp('encode' => @_)->encode($_[1]);
      }
      else {
          $_[0]->_original_encode( $_[1] );
      }
  }
  
  
  sub _decode { # if unsupported-flag is set, use PP
      if (${$_[0]}) {
          _set_for_pp('decode' => @_)->decode($_[1]);
      }
      else {
          $_[0]->_original_decode( $_[1] );
      }
  }
  
  
  sub decode_prefix { # if unsupported-flag is set, use PP
      _set_for_pp('decode' => @_)->decode_prefix($_[1]);
  }
  
  
  sub _incr_parse {
      if (${$_[0]}) {
          _set_for_pp('decode' => @_)->incr_parse($_[1]);
      }
      else {
          $_[0]->_original_incr_parse( $_[1] );
      }
  }
  
  
  sub get_indent_length {
      ${$_[0]} << 4 >> 16;
  }
  
  
  sub indent_length {
      my $length = $_[1];
  
      if (!defined $length or $length > 15 or $length < 0) {
          Carp::carp "The acceptable range of indent_length() is 0 to 15.";
      }
      else {
          local $^W;
          $length <<= 12;
          ${$_[0]} &= ~ JSON::Backend::XS::INDENT_LENGTH_FLAG;
          ${$_[0]} |= $length;
          *JSON::XS::encode = \&JSON::Backend::XS::Supportable::_encode;
      }
  
      $_[0];
  }
  
  
  1;
  __END__
  
  =head1 NAME
  
  JSON - JSON (JavaScript Object Notation) encoder/decoder
  
  =head1 SYNOPSIS
  
   use JSON; # imports encode_json, decode_json, to_json and from_json.
   
   # simple and fast interfaces (expect/generate UTF-8)
   
   $utf8_encoded_json_text = encode_json $perl_hash_or_arrayref;
   $perl_hash_or_arrayref  = decode_json $utf8_encoded_json_text;
   
   # OO-interface
   
   $json = JSON->new->allow_nonref;
   
   $json_text   = $json->encode( $perl_scalar );
   $perl_scalar = $json->decode( $json_text );
   
   $pretty_printed = $json->pretty->encode( $perl_scalar ); # pretty-printing
   
   # If you want to use PP only support features, call with '-support_by_pp'
   # When XS unsupported feature is enable, using PP (de|en)code instead of XS ones.
   
   use JSON -support_by_pp;
   
   # option-acceptable interfaces (expect/generate UNICODE by default)
   
   $json_text   = to_json( $perl_scalar, { ascii => 1, pretty => 1 } );
   $perl_scalar = from_json( $json_text, { utf8  => 1 } );
   
   # Between (en|de)code_json and (to|from)_json, if you want to write
   # a code which communicates to an outer world (encoded in UTF-8),
   # recommend to use (en|de)code_json.
   
  =head1 VERSION
  
      2.90
  
  This version is compatible with JSON::XS B<2.34> and later.
  (Not yet compatble to JSON::XS B<3.0x>.)
  
  
  =head1 NOTE
  
  JSON::PP was earlier included in the C<JSON> distribution, but
  has since Perl 5.14 been a core module. For this reason,
  L<JSON::PP> was removed from the JSON distribution and can now
  be found also in the Perl5 repository at
  
  =over
  
  =item * L<http://perl5.git.perl.org/perl.git>
  
  =back
  
  (The newest JSON::PP version still exists in CPAN.)
  
  Instead, the C<JSON> distribution will include JSON::backportPP
  for backwards computability. JSON.pm should thus work as it did
  before.
  
  =head1 DESCRIPTION
  
   *************************** CAUTION **************************************
   *                                                                        *
   * INCOMPATIBLE CHANGE (JSON::XS version 2.90)                            *
   *                                                                        *
   * JSON.pm had patched JSON::XS::Boolean and JSON::PP::Boolean internally *
   * on loading time for making these modules inherit JSON::Boolean.        *
   * But since JSON::XS v3.0 it use Types::Serialiser as boolean class.     *
   * Then now JSON.pm breaks boolean classe overload features and           *
   * -support_by_pp if JSON::XS v3.0 or later is installed.                 *
   *                                                                        *
   * JSON::true and JSON::false returned JSON::Boolean objects.             *
   * For workaround, they return JSON::PP::Boolean objects in this version. *
   *                                                                        *
   *     isa_ok(JSON::true, 'JSON::PP::Boolean');                           *
   *                                                                        *
   * And it discards a feature:                                             *
   *                                                                        *
   *     ok(JSON::true eq 'true');                                          *
   *                                                                        *
   * In other word, JSON::PP::Boolean overload numeric only.                *
   *                                                                        *
   *     ok( JSON::true == 1 );                                             *
   *                                                                        *
   **************************************************************************
  
   ************************** CAUTION ********************************
   * This is 'JSON module version 2' and there are many differences  *
   * to version 1.xx                                                 *
   * Please check your applications using old version.              *
   *   See to 'INCOMPATIBLE CHANGES TO OLD VERSION'                  *
   *******************************************************************
  
  JSON (JavaScript Object Notation) is a simple data format.
  See to L<http://www.json.org/> and C<RFC4627>(L<http://www.ietf.org/rfc/rfc4627.txt>).
  
  This module converts Perl data structures to JSON and vice versa using either
  L<JSON::XS> or L<JSON::PP>.
  
  JSON::XS is the fastest and most proper JSON module on CPAN which must be
  compiled and installed in your environment.
  JSON::PP is a pure-Perl module which is bundled in this distribution and
  has a strong compatibility to JSON::XS.
  
  This module try to use JSON::XS by default and fail to it, use JSON::PP instead.
  So its features completely depend on JSON::XS or JSON::PP.
  
  See to L<BACKEND MODULE DECISION>.
  
  To distinguish the module name 'JSON' and the format type JSON,
  the former is quoted by CE<lt>E<gt> (its results vary with your using media),
  and the latter is left just as it is.
  
  Module name : C<JSON>
  
  Format type : JSON
  
  =head2 FEATURES
  
  =over
  
  =item * correct unicode handling
  
  This module (i.e. backend modules) knows how to handle Unicode, documents
  how and when it does so, and even documents what "correct" means.
  
  Even though there are limitations, this feature is available since Perl version 5.6.
  
  JSON::XS requires Perl 5.8.2 (but works correctly in 5.8.8 or later), so in older versions
  C<JSON> should call JSON::PP as the backend which can be used since Perl 5.005.
  
  With Perl 5.8.x JSON::PP works, but from 5.8.0 to 5.8.2, because of a Perl side problem,
  JSON::PP works slower in the versions. And in 5.005, the Unicode handling is not available.
  See to L<JSON::PP/UNICODE HANDLING ON PERLS> for more information.
  
  See also to L<JSON::XS/A FEW NOTES ON UNICODE AND PERL>
  and L<JSON::XS/ENCODING/CODESET_FLAG_NOTES>.
  
  
  =item * round-trip integrity
  
  When you serialise a perl data structure using only data types supported
  by JSON and Perl, the deserialised data structure is identical on the Perl
  level. (e.g. the string "2.0" doesn't suddenly become "2" just because
  it looks like a number). There I<are> minor exceptions to this, read the
  L</MAPPING> section below to learn about those.
  
  
  =item * strict checking of JSON correctness
  
  There is no guessing, no generating of illegal JSON texts by default,
  and only JSON is accepted as input by default (the latter is a security
  feature).
  
  See to L<JSON::XS/FEATURES> and L<JSON::PP/FEATURES>.
  
  =item * fast
  
  This module returns a JSON::XS object itself if available.
  Compared to other JSON modules and other serialisers such as Storable,
  JSON::XS usually compares favorably in terms of speed, too.
  
  If not available, C<JSON> returns a JSON::PP object instead of JSON::XS and
  it is very slow as pure-Perl.
  
  =item * simple to use
  
  This module has both a simple functional interface as well as an
  object oriented interface interface.
  
  =item * reasonably versatile output formats
  
  You can choose between the most compact guaranteed-single-line format possible
  (nice for simple line-based protocols), a pure-ASCII format (for when your transport
  is not 8-bit clean, still supports the whole Unicode range), or a pretty-printed
  format (for when you want to read that stuff). Or you can combine those features
  in whatever way you like.
  
  =back
  
  =head1 FUNCTIONAL INTERFACE
  
  Some documents are copied and modified from L<JSON::XS/FUNCTIONAL INTERFACE>.
  C<to_json> and C<from_json> are additional functions.
  
  =head2 encode_json
  
      $json_text = encode_json $perl_scalar
  
  Converts the given Perl data structure to a UTF-8 encoded, binary string.
  
  This function call is functionally identical to:
  
      $json_text = JSON->new->utf8->encode($perl_scalar)
  
  =head2 decode_json
  
      $perl_scalar = decode_json $json_text
  
  The opposite of C<encode_json>: expects an UTF-8 (binary) string and tries
  to parse that as an UTF-8 encoded JSON text, returning the resulting
  reference.
  
  This function call is functionally identical to:
  
      $perl_scalar = JSON->new->utf8->decode($json_text)
  
  
  =head2 to_json
  
     $json_text = to_json($perl_scalar)
  
  Converts the given Perl data structure to a json string.
  
  This function call is functionally identical to:
  
     $json_text = JSON->new->encode($perl_scalar)
  
  Takes a hash reference as the second.
  
     $json_text = to_json($perl_scalar, $flag_hashref)
  
  So,
  
     $json_text = to_json($perl_scalar, {utf8 => 1, pretty => 1})
  
  equivalent to:
  
     $json_text = JSON->new->utf8(1)->pretty(1)->encode($perl_scalar)
  
  If you want to write a modern perl code which communicates to outer world,
  you should use C<encode_json> (supposed that JSON data are encoded in UTF-8).
  
  =head2 from_json
  
     $perl_scalar = from_json($json_text)
  
  The opposite of C<to_json>: expects a json string and tries
  to parse it, returning the resulting reference.
  
  This function call is functionally identical to:
  
      $perl_scalar = JSON->decode($json_text)
  
  Takes a hash reference as the second.
  
      $perl_scalar = from_json($json_text, $flag_hashref)
  
  So,
  
      $perl_scalar = from_json($json_text, {utf8 => 1})
  
  equivalent to:
  
      $perl_scalar = JSON->new->utf8(1)->decode($json_text)
  
  If you want to write a modern perl code which communicates to outer world,
  you should use C<decode_json> (supposed that JSON data are encoded in UTF-8).
  
  =head2 JSON::is_bool
  
      $is_boolean = JSON::is_bool($scalar)
  
  Returns true if the passed scalar represents either JSON::true or
  JSON::false, two constants that act like C<1> and C<0> respectively
  and are also used to represent JSON C<true> and C<false> in Perl strings.
  
  =head2 JSON::true
  
  Returns JSON true value which is blessed object.
  It C<isa> JSON::Boolean object.
  
  =head2 JSON::false
  
  Returns JSON false value which is blessed object.
  It C<isa> JSON::Boolean object.
  
  =head2 JSON::null
  
  Returns C<undef>.
  
  See L<MAPPING>, below, for more information on how JSON values are mapped to
  Perl.
  
  =head1 HOW DO I DECODE A DATA FROM OUTER AND ENCODE TO OUTER
  
  This section supposes that your perl version is 5.8 or later.
  
  If you know a JSON text from an outer world - a network, a file content, and so on,
  is encoded in UTF-8, you should use C<decode_json> or C<JSON> module object
  with C<utf8> enable. And the decoded result will contain UNICODE characters.
  
    # from network
    my $json        = JSON->new->utf8;
    my $json_text   = CGI->new->param( 'json_data' );
    my $perl_scalar = $json->decode( $json_text );
    
    # from file content
    local $/;
    open( my $fh, '<', 'json.data' );
    $json_text   = <$fh>;
    $perl_scalar = decode_json( $json_text );
  
  If an outer data is not encoded in UTF-8, firstly you should C<decode> it.
  
    use Encode;
    local $/;
    open( my $fh, '<', 'json.data' );
    my $encoding = 'cp932';
    my $unicode_json_text = decode( $encoding, <$fh> ); # UNICODE
    
    # or you can write the below code.
    #
    # open( my $fh, "<:encoding($encoding)", 'json.data' );
    # $unicode_json_text = <$fh>;
  
  In this case, C<$unicode_json_text> is of course UNICODE string.
  So you B<cannot> use C<decode_json> nor C<JSON> module object with C<utf8> enable.
  Instead of them, you use C<JSON> module object with C<utf8> disable or C<from_json>.
  
    $perl_scalar = $json->utf8(0)->decode( $unicode_json_text );
    # or
    $perl_scalar = from_json( $unicode_json_text );
  
  Or C<encode 'utf8'> and C<decode_json>:
  
    $perl_scalar = decode_json( encode( 'utf8', $unicode_json_text ) );
    # this way is not efficient.
  
  And now, you want to convert your C<$perl_scalar> into JSON data and
  send it to an outer world - a network or a file content, and so on.
  
  Your data usually contains UNICODE strings and you want the converted data to be encoded
  in UTF-8, you should use C<encode_json> or C<JSON> module object with C<utf8> enable.
  
    print encode_json( $perl_scalar ); # to a network? file? or display?
    # or
    print $json->utf8->encode( $perl_scalar );
  
  If C<$perl_scalar> does not contain UNICODE but C<$encoding>-encoded strings
  for some reason, then its characters are regarded as B<latin1> for perl
  (because it does not concern with your $encoding).
  You B<cannot> use C<encode_json> nor C<JSON> module object with C<utf8> enable.
  Instead of them, you use C<JSON> module object with C<utf8> disable or C<to_json>.
  Note that the resulted text is a UNICODE string but no problem to print it.
  
    # $perl_scalar contains $encoding encoded string values
    $unicode_json_text = $json->utf8(0)->encode( $perl_scalar );
    # or 
    $unicode_json_text = to_json( $perl_scalar );
    # $unicode_json_text consists of characters less than 0x100
    print $unicode_json_text;
  
  Or C<decode $encoding> all string values and C<encode_json>:
  
    $perl_scalar->{ foo } = decode( $encoding, $perl_scalar->{ foo } );
    # ... do it to each string values, then encode_json
    $json_text = encode_json( $perl_scalar );
  
  This method is a proper way but probably not efficient.
  
  See to L<Encode>, L<perluniintro>.
  
  
  =head1 COMMON OBJECT-ORIENTED INTERFACE
  
  =head2 new
  
      $json = JSON->new
  
  Returns a new C<JSON> object inherited from either JSON::XS or JSON::PP
  that can be used to de/encode JSON strings.
  
  All boolean flags described below are by default I<disabled>.
  
  The mutators for flags all return the JSON object again and thus calls can
  be chained:
  
     my $json = JSON->new->utf8->space_after->encode({a => [1,2]})
     => {"a": [1, 2]}
  
  =head2 ascii
  
      $json = $json->ascii([$enable])
      
      $enabled = $json->get_ascii
  
  If $enable is true (or missing), then the encode method will not generate characters outside
  the code range 0..127. Any Unicode characters outside that range will be escaped using either
  a single \uXXXX or a double \uHHHH\uLLLLL escape sequence, as per RFC4627.
  
  If $enable is false, then the encode method will not escape Unicode characters unless
  required by the JSON syntax or other flags. This results in a faster and more compact format.
  
  This feature depends on the used Perl version and environment.
  
  See to L<JSON::PP/UNICODE HANDLING ON PERLS> if the backend is PP.
  
    JSON->new->ascii(1)->encode([chr 0x10401])
    => ["\ud801\udc01"]
  
  =head2 latin1
  
      $json = $json->latin1([$enable])
      
      $enabled = $json->get_latin1
  
  If $enable is true (or missing), then the encode method will encode the resulting JSON
  text as latin1 (or iso-8859-1), escaping any characters outside the code range 0..255.
  
  If $enable is false, then the encode method will not escape Unicode characters
  unless required by the JSON syntax or other flags.
  
    JSON->new->latin1->encode (["\x{89}\x{abc}"]
    => ["\x{89}\\u0abc"]    # (perl syntax, U+abc escaped, U+89 not)
  
  =head2 utf8
  
      $json = $json->utf8([$enable])
      
      $enabled = $json->get_utf8
  
  If $enable is true (or missing), then the encode method will encode the JSON result
  into UTF-8, as required by many protocols, while the decode method expects to be handled
  an UTF-8-encoded string. Please note that UTF-8-encoded strings do not contain any
  characters outside the range 0..255, they are thus useful for bytewise/binary I/O.
  
  In future versions, enabling this option might enable autodetection of the UTF-16 and UTF-32
  encoding families, as described in RFC4627.
  
  If $enable is false, then the encode method will return the JSON string as a (non-encoded)
  Unicode string, while decode expects thus a Unicode string. Any decoding or encoding
  (e.g. to UTF-8 or UTF-16) needs to be done yourself, e.g. using the Encode module.
  
  
  Example, output UTF-16BE-encoded JSON:
  
    use Encode;
    $jsontext = encode "UTF-16BE", JSON::XS->new->encode ($object);
  
  Example, decode UTF-32LE-encoded JSON:
  
    use Encode;
    $object = JSON::XS->new->decode (decode "UTF-32LE", $jsontext);
  
  See to L<JSON::PP/UNICODE HANDLING ON PERLS> if the backend is PP.
  
  
  =head2 pretty
  
      $json = $json->pretty([$enable])
  
  This enables (or disables) all of the C<indent>, C<space_before> and
  C<space_after> (and in the future possibly more) flags in one call to
  generate the most readable (or most compact) form possible.
  
  Equivalent to:
  
     $json->indent->space_before->space_after
  
  The indent space length is three and JSON::XS cannot change the indent
  space length.
  
  =head2 indent
  
      $json = $json->indent([$enable])
      
      $enabled = $json->get_indent
  
  If C<$enable> is true (or missing), then the C<encode> method will use a multiline
  format as output, putting every array member or object/hash key-value pair
  into its own line, identifying them properly.
  
  If C<$enable> is false, no newlines or indenting will be produced, and the
  resulting JSON text is guaranteed not to contain any C<newlines>.
  
  This setting has no effect when decoding JSON texts.
  
  The indent space length is three.
  With JSON::PP, you can also access C<indent_length> to change indent space length.
  
  
  =head2 space_before
  
      $json = $json->space_before([$enable])
      
      $enabled = $json->get_space_before
  
  If C<$enable> is true (or missing), then the C<encode> method will add an extra
  optional space before the C<:> separating keys from values in JSON objects.
  
  If C<$enable> is false, then the C<encode> method will not add any extra
  space at those places.
  
  This setting has no effect when decoding JSON texts.
  
  Example, space_before enabled, space_after and indent disabled:
  
     {"key" :"value"}
  
  
  =head2 space_after
  
      $json = $json->space_after([$enable])
      
      $enabled = $json->get_space_after
  
  If C<$enable> is true (or missing), then the C<encode> method will add an extra
  optional space after the C<:> separating keys from values in JSON objects
  and extra whitespace after the C<,> separating key-value pairs and array
  members.
  
  If C<$enable> is false, then the C<encode> method will not add any extra
  space at those places.
  
  This setting has no effect when decoding JSON texts.
  
  Example, space_before and indent disabled, space_after enabled:
  
     {"key": "value"}
  
  
  =head2 relaxed
  
      $json = $json->relaxed([$enable])
      
      $enabled = $json->get_relaxed
  
  If C<$enable> is true (or missing), then C<decode> will accept some
  extensions to normal JSON syntax (see below). C<encode> will not be
  affected in anyway. I<Be aware that this option makes you accept invalid
  JSON texts as if they were valid!>. I suggest only to use this option to
  parse application-specific files written by humans (configuration files,
  resource files etc.)
  
  If C<$enable> is false (the default), then C<decode> will only accept
  valid JSON texts.
  
  Currently accepted extensions are:
  
  =over 4
  
  =item * list items can have an end-comma
  
  JSON I<separates> array elements and key-value pairs with commas. This
  can be annoying if you write JSON texts manually and want to be able to
  quickly append elements, so this extension accepts comma at the end of
  such items not just between them:
  
     [
        1,
        2, <- this comma not normally allowed
     ]
     {
        "k1": "v1",
        "k2": "v2", <- this comma not normally allowed
     }
  
  =item * shell-style '#'-comments
  
  Whenever JSON allows whitespace, shell-style comments are additionally
  allowed. They are terminated by the first carriage-return or line-feed
  character, after which more white-space and comments are allowed.
  
    [
       1, # this comment not allowed in JSON
          # neither this one...
    ]
  
  =back
  
  
  =head2 canonical
  
      $json = $json->canonical([$enable])
      
      $enabled = $json->get_canonical
  
  If C<$enable> is true (or missing), then the C<encode> method will output JSON objects
  by sorting their keys. This is adding a comparatively high overhead.
  
  If C<$enable> is false, then the C<encode> method will output key-value
  pairs in the order Perl stores them (which will likely change between runs
  of the same script).
  
  This option is useful if you want the same data structure to be encoded as
  the same JSON text (given the same overall settings). If it is disabled,
  the same hash might be encoded differently even if contains the same data,
  as key-value pairs have no inherent ordering in Perl.
  
  This setting has no effect when decoding JSON texts.
  
  =head2 allow_nonref
  
      $json = $json->allow_nonref([$enable])
      
      $enabled = $json->get_allow_nonref
  
  If C<$enable> is true (or missing), then the C<encode> method can convert a
  non-reference into its corresponding string, number or null JSON value,
  which is an extension to RFC4627. Likewise, C<decode> will accept those JSON
  values instead of croaking.
  
  If C<$enable> is false, then the C<encode> method will croak if it isn't
  passed an arrayref or hashref, as JSON texts must either be an object
  or array. Likewise, C<decode> will croak if given something that is not a
  JSON object or array.
  
     JSON->new->allow_nonref->encode ("Hello, World!")
     => "Hello, World!"
  
  =head2 allow_unknown
  
      $json = $json->allow_unknown ([$enable])
      
      $enabled = $json->get_allow_unknown
  
  If $enable is true (or missing), then "encode" will *not* throw an
  exception when it encounters values it cannot represent in JSON (for
  example, filehandles) but instead will encode a JSON "null" value.
  Note that blessed objects are not included here and are handled
  separately by c<allow_nonref>.
  
  If $enable is false (the default), then "encode" will throw an
  exception when it encounters anything it cannot encode as JSON.
  
  This option does not affect "decode" in any way, and it is
  recommended to leave it off unless you know your communications
  partner.
  
  =head2 allow_blessed
  
      $json = $json->allow_blessed([$enable])
      
      $enabled = $json->get_allow_blessed
  
  If C<$enable> is true (or missing), then the C<encode> method will not
  barf when it encounters a blessed reference. Instead, the value of the
  B<convert_blessed> option will decide whether C<null> (C<convert_blessed>
  disabled or no C<TO_JSON> method found) or a representation of the
  object (C<convert_blessed> enabled and C<TO_JSON> method found) is being
  encoded. Has no effect on C<decode>.
  
  If C<$enable> is false (the default), then C<encode> will throw an
  exception when it encounters a blessed object.
  
  
  =head2 convert_blessed
  
      $json = $json->convert_blessed([$enable])
      
      $enabled = $json->get_convert_blessed
  
  If C<$enable> is true (or missing), then C<encode>, upon encountering a
  blessed object, will check for the availability of the C<TO_JSON> method
  on the object's class. If found, it will be called in scalar context
  and the resulting scalar will be encoded instead of the object. If no
  C<TO_JSON> method is found, the value of C<allow_blessed> will decide what
  to do.
  
  The C<TO_JSON> method may safely call die if it wants. If C<TO_JSON>
  returns other blessed objects, those will be handled in the same
  way. C<TO_JSON> must take care of not causing an endless recursion cycle
  (== crash) in this case. The name of C<TO_JSON> was chosen because other
  methods called by the Perl core (== not by the user of the object) are
  usually in upper case letters and to avoid collisions with the C<to_json>
  function or method.
  
  This setting does not yet influence C<decode> in any way.
  
  If C<$enable> is false, then the C<allow_blessed> setting will decide what
  to do when a blessed object is found.
  
  =over
  
  =item convert_blessed_universally mode
  
  If use C<JSON> with C<-convert_blessed_universally>, the C<UNIVERSAL::TO_JSON>
  subroutine is defined as the below code:
  
     *UNIVERSAL::TO_JSON = sub {
         my $b_obj = B::svref_2object( $_[0] );
         return    $b_obj->isa('B::HV') ? { %{ $_[0] } }
                 : $b_obj->isa('B::AV') ? [ @{ $_[0] } ]
                 : undef
                 ;
     }
  
  This will cause that C<encode> method converts simple blessed objects into
  JSON objects as non-blessed object.
  
     JSON -convert_blessed_universally;
     $json->allow_blessed->convert_blessed->encode( $blessed_object )
  
  This feature is experimental and may be removed in the future.
  
  =back
  
  =head2 filter_json_object
  
      $json = $json->filter_json_object([$coderef])
  
  When C<$coderef> is specified, it will be called from C<decode> each
  time it decodes a JSON object. The only argument passed to the coderef
  is a reference to the newly-created hash. If the code references returns
  a single scalar (which need not be a reference), this value
  (i.e. a copy of that scalar to avoid aliasing) is inserted into the
  deserialised data structure. If it returns an empty list
  (NOTE: I<not> C<undef>, which is a valid scalar), the original deserialised
  hash will be inserted. This setting can slow down decoding considerably.
  
  When C<$coderef> is omitted or undefined, any existing callback will
  be removed and C<decode> will not change the deserialised hash in any
  way.
  
  Example, convert all JSON objects into the integer 5:
  
     my $js = JSON->new->filter_json_object (sub { 5 });
     # returns [5]
     $js->decode ('[{}]'); # the given subroutine takes a hash reference.
     # throw an exception because allow_nonref is not enabled
     # so a lone 5 is not allowed.
     $js->decode ('{"a":1, "b":2}');
  
  
  =head2 filter_json_single_key_object
  
      $json = $json->filter_json_single_key_object($key [=> $coderef])
  
  Works remotely similar to C<filter_json_object>, but is only called for
  JSON objects having a single key named C<$key>.
  
  This C<$coderef> is called before the one specified via
  C<filter_json_object>, if any. It gets passed the single value in the JSON
  object. If it returns a single value, it will be inserted into the data
  structure. If it returns nothing (not even C<undef> but the empty list),
  the callback from C<filter_json_object> will be called next, as if no
  single-key callback were specified.
  
  If C<$coderef> is omitted or undefined, the corresponding callback will be
  disabled. There can only ever be one callback for a given key.
  
  As this callback gets called less often then the C<filter_json_object>
  one, decoding speed will not usually suffer as much. Therefore, single-key
  objects make excellent targets to serialise Perl objects into, especially
  as single-key JSON objects are as close to the type-tagged value concept
  as JSON gets (it's basically an ID/VALUE tuple). Of course, JSON does not
  support this in any way, so you need to make sure your data never looks
  like a serialised Perl hash.
  
  Typical names for the single object key are C<__class_whatever__>, or
  C<$__dollars_are_rarely_used__$> or C<}ugly_brace_placement>, or even
  things like C<__class_md5sum(classname)__>, to reduce the risk of clashing
  with real hashes.
  
  Example, decode JSON objects of the form C<< { "__widget__" => <id> } >>
  into the corresponding C<< $WIDGET{<id>} >> object:
  
     # return whatever is in $WIDGET{5}:
     JSON
        ->new
        ->filter_json_single_key_object (__widget__ => sub {
              $WIDGET{ $_[0] }
           })
        ->decode ('{"__widget__": 5')
  
     # this can be used with a TO_JSON method in some "widget" class
     # for serialisation to json:
     sub WidgetBase::TO_JSON {
        my ($self) = @_;
  
        unless ($self->{id}) {
           $self->{id} = ..get..some..id..;
           $WIDGET{$self->{id}} = $self;
        }
  
        { __widget__ => $self->{id} }
     }
  
  
  =head2 shrink
  
      $json = $json->shrink([$enable])
      
      $enabled = $json->get_shrink
  
  With JSON::XS, this flag resizes strings generated by either
  C<encode> or C<decode> to their minimum size possible. This can save
  memory when your JSON texts are either very very long or you have many
  short strings. It will also try to downgrade any strings to octet-form
  if possible: perl stores strings internally either in an encoding called
  UTF-X or in octet-form. The latter cannot store everything but uses less
  space in general (and some buggy Perl or C code might even rely on that
  internal representation being used).
  
  With JSON::PP, it is noop about resizing strings but tries
  C<utf8::downgrade> to the returned string by C<encode>. See to L<utf8>.
  
  See to L<JSON::XS/OBJECT-ORIENTED INTERFACE> and L<JSON::PP/METHODS>.
  
  =head2 max_depth
  
      $json = $json->max_depth([$maximum_nesting_depth])
      
      $max_depth = $json->get_max_depth
  
  Sets the maximum nesting level (default C<512>) accepted while encoding
  or decoding. If a higher nesting level is detected in JSON text or a Perl
  data structure, then the encoder and decoder will stop and croak at that
  point.
  
  Nesting level is defined by number of hash- or arrayrefs that the encoder
  needs to traverse to reach a given point or the number of C<{> or C<[>
  characters without their matching closing parenthesis crossed to reach a
  given character in a string.
  
  If no argument is given, the highest possible setting will be used, which
  is rarely useful.
  
  Note that nesting is implemented by recursion in C. The default value has
  been chosen to be as large as typical operating systems allow without
  crashing. (JSON::XS)
  
  With JSON::PP as the backend, when a large value (100 or more) was set and
  it de/encodes a deep nested object/text, it may raise a warning
  'Deep recursion on subroutine' at the perl runtime phase.
  
  See L<JSON::XS/SECURITY CONSIDERATIONS> for more info on why this is useful.
  
  =head2 max_size
  
      $json = $json->max_size([$maximum_string_size])
      
      $max_size = $json->get_max_size
  
  Set the maximum length a JSON text may have (in bytes) where decoding is
  being attempted. The default is C<0>, meaning no limit. When C<decode>
  is called on a string that is longer then this many bytes, it will not
  attempt to decode the string but throw an exception. This setting has no
  effect on C<encode> (yet).
  
  If no argument is given, the limit check will be deactivated (same as when
  C<0> is specified).
  
  See L<JSON::XS/SECURITY CONSIDERATIONS>, below, for more info on why this is useful.
  
  =head2 encode
  
      $json_text = $json->encode($perl_scalar)
  
  Converts the given Perl data structure (a simple scalar or a reference
  to a hash or array) to its JSON representation. Simple scalars will be
  converted into JSON string or number sequences, while references to arrays
  become JSON arrays and references to hashes become JSON objects. Undefined
  Perl values (e.g. C<undef>) become JSON C<null> values.
  References to the integers C<0> and C<1> are converted into C<true> and C<false>.
  
  =head2 decode
  
      $perl_scalar = $json->decode($json_text)
  
  The opposite of C<encode>: expects a JSON text and tries to parse it,
  returning the resulting simple scalar or reference. Croaks on error.
  
  JSON numbers and strings become simple Perl scalars. JSON arrays become
  Perl arrayrefs and JSON objects become Perl hashrefs. C<true> becomes
  C<1> (C<JSON::true>), C<false> becomes C<0> (C<JSON::false>) and
  C<null> becomes C<undef>.
  
  =head2 decode_prefix
  
      ($perl_scalar, $characters) = $json->decode_prefix($json_text)
  
  This works like the C<decode> method, but instead of raising an exception
  when there is trailing garbage after the first JSON object, it will
  silently stop parsing there and return the number of characters consumed
  so far.
  
     JSON->new->decode_prefix ("[1] the tail")
     => ([], 3)
  
  See to L<JSON::XS/OBJECT-ORIENTED INTERFACE>
  
  =head2 property
  
      $boolean = $json->property($property_name)
  
  Returns a boolean value about above some properties.
  
  The available properties are C<ascii>, C<latin1>, C<utf8>,
  C<indent>,C<space_before>, C<space_after>, C<relaxed>, C<canonical>,
  C<allow_nonref>, C<allow_unknown>, C<allow_blessed>, C<convert_blessed>,
  C<shrink>, C<max_depth> and C<max_size>.
  
     $boolean = $json->property('utf8');
      => 0
     $json->utf8;
     $boolean = $json->property('utf8');
      => 1
  
  Sets the property with a given boolean value.
  
      $json = $json->property($property_name => $boolean);
  
  With no argument, it returns all the above properties as a hash reference.
  
      $flag_hashref = $json->property();
  
  =head1 INCREMENTAL PARSING
  
  Most of this section are copied and modified from L<JSON::XS/INCREMENTAL PARSING>.
  
  In some cases, there is the need for incremental parsing of JSON texts.
  This module does allow you to parse a JSON stream incrementally.
  It does so by accumulating text until it has a full JSON object, which
  it then can decode. This process is similar to using C<decode_prefix>
  to see if a full JSON object is available, but is much more efficient
  (and can be implemented with a minimum of method calls).
  
  The backend module will only attempt to parse the JSON text once it is sure it
  has enough text to get a decisive result, using a very simple but
  truly incremental parser. This means that it sometimes won't stop as
  early as the full parser, for example, it doesn't detect parenthesis
  mismatches. The only thing it guarantees is that it starts decoding as
  soon as a syntactically valid JSON text has been seen. This means you need
  to set resource limits (e.g. C<max_size>) to ensure the parser will stop
  parsing in the presence if syntax errors.
  
  The following methods implement this incremental parser.
  
  =head2 incr_parse
  
      $json->incr_parse( [$string] ) # void context
      
      $obj_or_undef = $json->incr_parse( [$string] ) # scalar context
      
      @obj_or_empty = $json->incr_parse( [$string] ) # list context
  
  This is the central parsing function. It can both append new text and
  extract objects from the stream accumulated so far (both of these
  functions are optional).
  
  If C<$string> is given, then this string is appended to the already
  existing JSON fragment stored in the C<$json> object.
  
  After that, if the function is called in void context, it will simply
  return without doing anything further. This can be used to add more text
  in as many chunks as you want.
  
  If the method is called in scalar context, then it will try to extract
  exactly I<one> JSON object. If that is successful, it will return this
  object, otherwise it will return C<undef>. If there is a parse error,
  this method will croak just as C<decode> would do (one can then use
  C<incr_skip> to skip the erroneous part). This is the most common way of
  using the method.
  
  And finally, in list context, it will try to extract as many objects
  from the stream as it can find and return them, or the empty list
  otherwise. For this to work, there must be no separators between the JSON
  objects or arrays, instead they must be concatenated back-to-back. If
  an error occurs, an exception will be raised as in the scalar context
  case. Note that in this case, any previously-parsed JSON texts will be
  lost.
  
  Example: Parse some JSON arrays/objects in a given string and return them.
  
      my @objs = JSON->new->incr_parse ("[5][7][1,2]");
  
  =head2 incr_text
  
      $lvalue_string = $json->incr_text
  
  This method returns the currently stored JSON fragment as an lvalue, that
  is, you can manipulate it. This I<only> works when a preceding call to
  C<incr_parse> in I<scalar context> successfully returned an object. Under
  all other circumstances you must not call this function (I mean it.
  although in simple tests it might actually work, it I<will> fail under
  real world conditions). As a special exception, you can also call this
  method before having parsed anything.
  
  This function is useful in two cases: a) finding the trailing text after a
  JSON object or b) parsing multiple JSON objects separated by non-JSON text
  (such as commas).
  
      $json->incr_text =~ s/\s*,\s*//;
  
  In Perl 5.005, C<lvalue> attribute is not available.
  You must write codes like the below:
  
      $string = $json->incr_text;
      $string =~ s/\s*,\s*//;
      $json->incr_text( $string );
  
  =head2 incr_skip
  
      $json->incr_skip
  
  This will reset the state of the incremental parser and will remove the
  parsed text from the input buffer. This is useful after C<incr_parse>
  died, in which case the input buffer and incremental parser state is left
  unchanged, to skip the text parsed so far and to reset the parse state.
  
  =head2 incr_reset
  
      $json->incr_reset
  
  This completely resets the incremental parser, that is, after this call,
  it will be as if the parser had never parsed anything.
  
  This is useful if you want to repeatedly parse JSON objects and want to
  ignore any trailing data, which means you have to reset the parser after
  each successful decode.
  
  See to L<JSON::XS/INCREMENTAL PARSING> for examples.
  
  
  =head1 JSON::PP SUPPORT METHODS
  
  The below methods are JSON::PP own methods, so when C<JSON> works
  with JSON::PP (i.e. the created object is a JSON::PP object), available.
  See to L<JSON::PP/JSON::PP OWN METHODS> in detail.
  
  If you use C<JSON> with additional C<-support_by_pp>, some methods
  are available even with JSON::XS. See to L<USE PP FEATURES EVEN THOUGH XS BACKEND>.
  
     BEING { $ENV{PERL_JSON_BACKEND} = 'JSON::XS' }
     
     use JSON -support_by_pp;
     
     my $json = JSON->new;
     $json->allow_nonref->escape_slash->encode("/");
  
     # functional interfaces too.
     print to_json(["/"], {escape_slash => 1});
     print from_json('["foo"]', {utf8 => 1});
  
  If you do not want to all functions but C<-support_by_pp>,
  use C<-no_export>.
  
     use JSON -support_by_pp, -no_export;
     # functional interfaces are not exported.
  
  =head2 allow_singlequote
  
      $json = $json->allow_singlequote([$enable])
  
  If C<$enable> is true (or missing), then C<decode> will accept
  any JSON strings quoted by single quotations that are invalid JSON
  format.
  
      $json->allow_singlequote->decode({"foo":'bar'});
      $json->allow_singlequote->decode({'foo':"bar"});
      $json->allow_singlequote->decode({'foo':'bar'});
  
  As same as the C<relaxed> option, this option may be used to parse
  application-specific files written by humans.
  
  =head2 allow_barekey
  
      $json = $json->allow_barekey([$enable])
  
  If C<$enable> is true (or missing), then C<decode> will accept
  bare keys of JSON object that are invalid JSON format.
  
  As same as the C<relaxed> option, this option may be used to parse
  application-specific files written by humans.
  
      $json->allow_barekey->decode('{foo:"bar"}');
  
  =head2 allow_bignum
  
      $json = $json->allow_bignum([$enable])
  
  If C<$enable> is true (or missing), then C<decode> will convert
  the big integer Perl cannot handle as integer into a L<Math::BigInt>
  object and convert a floating number (any) into a L<Math::BigFloat>.
  
  On the contrary, C<encode> converts C<Math::BigInt> objects and C<Math::BigFloat>
  objects into JSON numbers with C<allow_blessed> enable.
  
     $json->allow_nonref->allow_blessed->allow_bignum;
     $bigfloat = $json->decode('2.000000000000000000000000001');
     print $json->encode($bigfloat);
     # => 2.000000000000000000000000001
  
  See to L<MAPPING> about the conversion of JSON number.
  
  =head2 loose
  
      $json = $json->loose([$enable])
  
  The unescaped [\x00-\x1f\x22\x2f\x5c] strings are invalid in JSON strings
  and the module doesn't allow to C<decode> to these (except for \x2f).
  If C<$enable> is true (or missing), then C<decode>  will accept these
  unescaped strings.
  
      $json->loose->decode(qq|["abc
                                     def"]|);
  
  See to L<JSON::PP/JSON::PP OWN METHODS>.
  
  =head2 escape_slash
  
      $json = $json->escape_slash([$enable])
  
  According to JSON Grammar, I<slash> (U+002F) is escaped. But by default
  JSON backend modules encode strings without escaping slash.
  
  If C<$enable> is true (or missing), then C<encode> will escape slashes.
  
  =head2 indent_length
  
      $json = $json->indent_length($length)
  
  With JSON::XS, The indent space length is 3 and cannot be changed.
  With JSON::PP, it sets the indent space length with the given $length.
  The default is 3. The acceptable range is 0 to 15.
  
  =head2 sort_by
  
      $json = $json->sort_by($function_name)
      $json = $json->sort_by($subroutine_ref)
  
  If $function_name or $subroutine_ref are set, its sort routine are used.
  
     $js = $pc->sort_by(sub { $JSON::PP::a cmp $JSON::PP::b })->encode($obj);
     # is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|);
  
     $js = $pc->sort_by('own_sort')->encode($obj);
     # is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|);
  
     sub JSON::PP::own_sort { $JSON::PP::a cmp $JSON::PP::b }
  
  As the sorting routine runs in the JSON::PP scope, the given
  subroutine name and the special variables C<$a>, C<$b> will begin
  with 'JSON::PP::'.
  
  If $integer is set, then the effect is same as C<canonical> on.
  
  See to L<JSON::PP/JSON::PP OWN METHODS>.
  
  =head1 MAPPING
  
  This section is copied from JSON::XS and modified to C<JSON>.
  JSON::XS and JSON::PP mapping mechanisms are almost equivalent.
  
  See to L<JSON::XS/MAPPING>.
  
  =head2 JSON -> PERL
  
  =over 4
  
  =item object
  
  A JSON object becomes a reference to a hash in Perl. No ordering of object
  keys is preserved (JSON does not preserver object key ordering itself).
  
  =item array
  
  A JSON array becomes a reference to an array in Perl.
  
  =item string
  
  A JSON string becomes a string scalar in Perl - Unicode codepoints in JSON
  are represented by the same codepoints in the Perl string, so no manual
  decoding is necessary.
  
  =item number
  
  A JSON number becomes either an integer, numeric (floating point) or
  string scalar in perl, depending on its range and any fractional parts. On
  the Perl level, there is no difference between those as Perl handles all
  the conversion details, but an integer may take slightly less memory and
  might represent more values exactly than floating point numbers.
  
  If the number consists of digits only, C<JSON> will try to represent
  it as an integer value. If that fails, it will try to represent it as
  a numeric (floating point) value if that is possible without loss of
  precision. Otherwise it will preserve the number as a string value (in
  which case you lose roundtripping ability, as the JSON number will be
  re-encoded to a JSON string).
  
  Numbers containing a fractional or exponential part will always be
  represented as numeric (floating point) values, possibly at a loss of
  precision (in which case you might lose perfect roundtripping ability, but
  the JSON number will still be re-encoded as a JSON number).
  
  Note that precision is not accuracy - binary floating point values cannot
  represent most decimal fractions exactly, and when converting from and to
  floating point, C<JSON> only guarantees precision up to but not including
  the least significant bit.
  
  If the backend is JSON::PP and C<allow_bignum> is enable, the big integers 
  and the numeric can be optionally converted into L<Math::BigInt> and
  L<Math::BigFloat> objects.
  
  =item true, false
  
  These JSON atoms become C<JSON::true> and C<JSON::false>,
  respectively. They are overloaded to act almost exactly like the numbers
  C<1> and C<0>. You can check whether a scalar is a JSON boolean by using
  the C<JSON::is_bool> function.
  
     print JSON::true + 1;
      => 1
  
     ok(JSON::true eq  '1');
     ok(JSON::true == 1);
  
  C<JSON> will install these missing overloading features to the backend modules.
  
  
  =item null
  
  A JSON null atom becomes C<undef> in Perl.
  
  C<JSON::null> returns C<undef>.
  
  =back
  
  
  =head2 PERL -> JSON
  
  The mapping from Perl to JSON is slightly more difficult, as Perl is a
  truly typeless language, so we can only guess which JSON type is meant by
  a Perl value.
  
  =over 4
  
  =item hash references
  
  Perl hash references become JSON objects. As there is no inherent ordering
  in hash keys (or JSON objects), they will usually be encoded in a
  pseudo-random order that can change between runs of the same program but
  stays generally the same within a single run of a program. C<JSON>
  optionally sort the hash keys (determined by the I<canonical> flag), so
  the same data structure will serialise to the same JSON text (given same
  settings and version of JSON::XS), but this incurs a runtime overhead
  and is only rarely useful, e.g. when you want to compare some JSON text
  against another for equality.
  
  In future, the ordered object feature will be added to JSON::PP using C<tie> mechanism.
  
  
  =item array references
  
  Perl array references become JSON arrays.
  
  =item other references
  
  Other unblessed references are generally not allowed and will cause an
  exception to be thrown, except for references to the integers C<0> and
  C<1>, which get turned into C<false> and C<true> atoms in JSON. You can
  also use C<JSON::false> and C<JSON::true> to improve readability.
  
     to_json [\0,JSON::true]      # yields [false,true]
  
  =item JSON::true, JSON::false, JSON::null
  
  These special values become JSON true and JSON false values,
  respectively. You can also use C<\1> and C<\0> directly if you want.
  
  JSON::null returns C<undef>.
  
  =item blessed objects
  
  Blessed objects are not directly representable in JSON. See the
  C<allow_blessed> and C<convert_blessed> methods on various options on
  how to deal with this: basically, you can choose between throwing an
  exception, encoding the reference as if it weren't blessed, or provide
  your own serialiser method.
  
  With C<convert_blessed_universally> mode,  C<encode> converts blessed
  hash references or blessed array references (contains other blessed references)
  into JSON members and arrays.
  
     use JSON -convert_blessed_universally;
     JSON->new->allow_blessed->convert_blessed->encode( $blessed_object );
  
  See to L<convert_blessed>.
  
  =item simple scalars
  
  Simple Perl scalars (any scalar that is not a reference) are the most
  difficult objects to encode: JSON::XS and JSON::PP will encode undefined scalars as
  JSON C<null> values, scalars that have last been used in a string context
  before encoding as JSON strings, and anything else as number value:
  
     # dump as number
     encode_json [2]                      # yields [2]
     encode_json [-3.0e17]                # yields [-3e+17]
     my $value = 5; encode_json [$value]  # yields [5]
  
     # used as string, so dump as string
     print $value;
     encode_json [$value]                 # yields ["5"]
  
     # undef becomes null
     encode_json [undef]                  # yields [null]
  
  You can force the type to be a string by stringifying it:
  
     my $x = 3.1; # some variable containing a number
     "$x";        # stringified
     $x .= "";    # another, more awkward way to stringify
     print $x;    # perl does it for you, too, quite often
  
  You can force the type to be a number by numifying it:
  
     my $x = "3"; # some variable containing a string
     $x += 0;     # numify it, ensuring it will be dumped as a number
     $x *= 1;     # same thing, the choice is yours.
  
  You can not currently force the type in other, less obscure, ways.
  
  Note that numerical precision has the same meaning as under Perl (so
  binary to decimal conversion follows the same rules as in Perl, which
  can differ to other languages). Also, your perl interpreter might expose
  extensions to the floating point numbers of your platform, such as
  infinities or NaN's - these cannot be represented in JSON, and it is an
  error to pass those in.
  
  =item Big Number
  
  If the backend is JSON::PP and C<allow_bignum> is enable, 
  C<encode> converts C<Math::BigInt> objects and C<Math::BigFloat>
  objects into JSON numbers.
  
  
  =back
  
  =head1 JSON and ECMAscript
  
  See to L<JSON::XS/JSON and ECMAscript>.
  
  =head1 JSON and YAML
  
  JSON is not a subset of YAML.
  See to L<JSON::XS/JSON and YAML>.
  
  
  =head1 BACKEND MODULE DECISION
  
  When you use C<JSON>, C<JSON> tries to C<use> JSON::XS. If this call failed, it will
  C<uses> JSON::PP. The required JSON::XS version is I<2.2> or later.
  
  The C<JSON> constructor method returns an object inherited from the backend module,
  and JSON::XS object is a blessed scalar reference while JSON::PP is a blessed hash
  reference.
  
  So, your program should not depend on the backend module, especially
  returned objects should not be modified.
  
   my $json = JSON->new; # XS or PP?
   $json->{stash} = 'this is xs object'; # this code may raise an error!
  
  To check the backend module, there are some methods - C<backend>, C<is_pp> and C<is_xs>.
  
    JSON->backend; # 'JSON::XS' or 'JSON::PP'
    
    JSON->backend->is_pp: # 0 or 1
    
    JSON->backend->is_xs: # 1 or 0
    
    $json->is_xs; # 1 or 0
    
    $json->is_pp; # 0 or 1
  
  
  If you set an environment variable C<PERL_JSON_BACKEND>, the calling action will be changed.
  
  =over
  
  =item PERL_JSON_BACKEND = 0 or PERL_JSON_BACKEND = 'JSON::PP'
  
  Always use JSON::PP
  
  =item PERL_JSON_BACKEND == 1 or PERL_JSON_BACKEND = 'JSON::XS,JSON::PP'
  
  (The default) Use compiled JSON::XS if it is properly compiled & installed,
  otherwise use JSON::PP.
  
  =item PERL_JSON_BACKEND == 2 or PERL_JSON_BACKEND = 'JSON::XS'
  
  Always use compiled JSON::XS, die if it isn't properly compiled & installed.
  
  =item PERL_JSON_BACKEND = 'JSON::backportPP'
  
  Always use JSON::backportPP.
  JSON::backportPP is JSON::PP back port module.
  C<JSON> includes JSON::backportPP instead of JSON::PP.
  
  =back
  
  These ideas come from L<DBI::PurePerl> mechanism.
  
  example:
  
   BEGIN { $ENV{PERL_JSON_BACKEND} = 'JSON::PP' }
   use JSON; # always uses JSON::PP
  
  In future, it may be able to specify another module.
  
  =head1 USE PP FEATURES EVEN THOUGH XS BACKEND
  
  Many methods are available with either JSON::XS or JSON::PP and
  when the backend module is JSON::XS, if any JSON::PP specific (i.e. JSON::XS unsupported)
  method is called, it will C<warn> and be noop.
  
  But If you C<use> C<JSON> passing the optional string C<-support_by_pp>,
  it makes a part of those unsupported methods available.
  This feature is achieved by using JSON::PP in C<de/encode>.
  
     BEGIN { $ENV{PERL_JSON_BACKEND} = 2 } # with JSON::XS
     use JSON -support_by_pp;
     my $json = JSON->new;
     $json->allow_nonref->escape_slash->encode("/");
  
  At this time, the returned object is a C<JSON::Backend::XS::Supportable>
  object (re-blessed XS object), and  by checking JSON::XS unsupported flags
  in de/encoding, can support some unsupported methods - C<loose>, C<allow_bignum>,
  C<allow_barekey>, C<allow_singlequote>, C<escape_slash> and C<indent_length>.
  
  When any unsupported methods are not enable, C<XS de/encode> will be
  used as is. The switch is achieved by changing the symbolic tables.
  
  C<-support_by_pp> is effective only when the backend module is JSON::XS
  and it makes the de/encoding speed down a bit.
  
  See to L<JSON::PP SUPPORT METHODS>.
  
  =head1 INCOMPATIBLE CHANGES TO OLD VERSION
  
  There are big incompatibility between new version (2.00) and old (1.xx).
  If you use old C<JSON> 1.xx in your code, please check it.
  
  See to L<Transition ways from 1.xx to 2.xx.>
  
  =over
  
  =item jsonToObj and objToJson are obsoleted.
  
  Non Perl-style name C<jsonToObj> and C<objToJson> are obsoleted
  (but not yet deleted from the source).
  If you use these functions in your code, please replace them
  with C<from_json> and C<to_json>.
  
  
  =item Global variables are no longer available.
  
  C<JSON> class variables - C<$JSON::AUTOCONVERT>, C<$JSON::BareKey>, etc...
  - are not available any longer.
  Instead, various features can be used through object methods.
  
  
  =item Package JSON::Converter and JSON::Parser are deleted.
  
  Now C<JSON> bundles with JSON::PP which can handle JSON more properly than them.
  
  =item Package JSON::NotString is deleted.
  
  There was C<JSON::NotString> class which represents JSON value C<true>, C<false>, C<null>
  and numbers. It was deleted and replaced by C<JSON::Boolean>.
  
  C<JSON::Boolean> represents C<true> and C<false>.
  
  C<JSON::Boolean> does not represent C<null>.
  
  C<JSON::null> returns C<undef>.
  
  C<JSON> makes L<JSON::XS::Boolean> and L<JSON::PP::Boolean> is-a relation
  to L<JSON::Boolean>.
  
  =item function JSON::Number is obsoleted.
  
  C<JSON::Number> is now needless because JSON::XS and JSON::PP have
  round-trip integrity.
  
  =item JSONRPC modules are deleted.
  
  Perl implementation of JSON-RPC protocol - C<JSONRPC >, C<JSONRPC::Transport::HTTP>
  and C<Apache::JSONRPC > are deleted in this distribution.
  Instead of them, there is L<JSON::RPC> which supports JSON-RPC protocol version 1.1.
  
  =back
  
  =head2 Transition ways from 1.xx to 2.xx.
  
  You should set C<suport_by_pp> mode firstly, because
  it is always successful for the below codes even with JSON::XS.
  
      use JSON -support_by_pp;
  
  =over
  
  =item Exported jsonToObj (simple)
  
    from_json($json_text);
  
  =item Exported objToJson (simple)
  
    to_json($perl_scalar);
  
  =item Exported jsonToObj (advanced)
  
    $flags = {allow_barekey => 1, allow_singlequote => 1};
    from_json($json_text, $flags);
  
  equivalent to:
  
    $JSON::BareKey = 1;
    $JSON::QuotApos = 1;
    jsonToObj($json_text);
  
  =item Exported objToJson (advanced)
  
    $flags = {allow_blessed => 1, allow_barekey => 1};
    to_json($perl_scalar, $flags);
  
  equivalent to:
  
    $JSON::BareKey = 1;
    objToJson($perl_scalar);
  
  =item jsonToObj as object method
  
    $json->decode($json_text);
  
  =item objToJson as object method
  
    $json->encode($perl_scalar);
  
  =item new method with parameters
  
  The C<new> method in 2.x takes any parameters no longer.
  You can set parameters instead;
  
     $json = JSON->new->pretty;
  
  =item $JSON::Pretty, $JSON::Indent, $JSON::Delimiter
  
  If C<indent> is enable, that means C<$JSON::Pretty> flag set. And
  C<$JSON::Delimiter> was substituted by C<space_before> and C<space_after>.
  In conclusion:
  
     $json->indent->space_before->space_after;
  
  Equivalent to:
  
    $json->pretty;
  
  To change indent length, use C<indent_length>.
  
  (Only with JSON::PP, if C<-support_by_pp> is not used.)
  
    $json->pretty->indent_length(2)->encode($perl_scalar);
  
  =item $JSON::BareKey
  
  (Only with JSON::PP, if C<-support_by_pp> is not used.)
  
    $json->allow_barekey->decode($json_text)
  
  =item $JSON::ConvBlessed
  
  use C<-convert_blessed_universally>. See to L<convert_blessed>.
  
  =item $JSON::QuotApos
  
  (Only with JSON::PP, if C<-support_by_pp> is not used.)
  
    $json->allow_singlequote->decode($json_text)
  
  =item $JSON::SingleQuote
  
  Disable. C<JSON> does not make such a invalid JSON string any longer.
  
  =item $JSON::KeySort
  
    $json->canonical->encode($perl_scalar)
  
  This is the ascii sort.
  
  If you want to use with your own sort routine, check the C<sort_by> method.
  
  (Only with JSON::PP, even if C<-support_by_pp> is used currently.)
  
    $json->sort_by($sort_routine_ref)->encode($perl_scalar)
   
    $json->sort_by(sub { $JSON::PP::a <=> $JSON::PP::b })->encode($perl_scalar)
  
  Can't access C<$a> and C<$b> but C<$JSON::PP::a> and C<$JSON::PP::b>.
  
  =item $JSON::SkipInvalid
  
    $json->allow_unknown
  
  =item $JSON::AUTOCONVERT
  
  Needless. C<JSON> backend modules have the round-trip integrity.
  
  =item $JSON::UTF8
  
  Needless because C<JSON> (JSON::XS/JSON::PP) sets
  the UTF8 flag on properly.
  
      # With UTF8-flagged strings
  
      $json->allow_nonref;
      $str = chr(1000); # UTF8-flagged
  
      $json_text  = $json->utf8(0)->encode($str);
      utf8::is_utf8($json_text);
      # true
      $json_text  = $json->utf8(1)->encode($str);
      utf8::is_utf8($json_text);
      # false
  
      $str = '"' . chr(1000) . '"'; # UTF8-flagged
  
      $perl_scalar  = $json->utf8(0)->decode($str);
      utf8::is_utf8($perl_scalar);
      # true
      $perl_scalar  = $json->utf8(1)->decode($str);
      # died because of 'Wide character in subroutine'
  
  See to L<JSON::XS/A FEW NOTES ON UNICODE AND PERL>.
  
  =item $JSON::UnMapping
  
  Disable. See to L<MAPPING>.
  
  =item $JSON::SelfConvert
  
  This option was deleted.
  Instead of it, if a given blessed object has the C<TO_JSON> method,
  C<TO_JSON> will be executed with C<convert_blessed>.
  
    $json->convert_blessed->encode($blessed_hashref_or_arrayref)
    # if need, call allow_blessed
  
  Note that it was C<toJson> in old version, but now not C<toJson> but C<TO_JSON>.
  
  =back
  
  =head1 TODO
  
  =over
  
  =item example programs
  
  =back
  
  =head1 THREADS
  
  No test with JSON::PP. If with JSON::XS, See to L<JSON::XS/THREADS>.
  
  
  =head1 BUGS
  
  Please report bugs relevant to C<JSON> to E<lt>makamaka[at]cpan.orgE<gt>.
  
  
  =head1 SEE ALSO
  
  Most of the document is copied and modified from JSON::XS doc.
  
  L<JSON::XS>, L<JSON::PP>
  
  C<RFC4627>(L<http://www.ietf.org/rfc/rfc4627.txt>)
  
  =head1 AUTHOR
  
  Makamaka Hannyaharamitu, E<lt>makamaka[at]cpan.orgE<gt>
  
  JSON::XS was written by  Marc Lehmann <schmorp[at]schmorp.de>
  
  The release of this new version owes to the courtesy of Marc Lehmann.
  
  
  =head1 COPYRIGHT AND LICENSE
  
  Copyright 2005-2013 by Makamaka Hannyaharamitu
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =cut
  
JSON

    $main::fatpacked{"JSON/Color.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'JSON_COLOR';
  package JSON::Color;
  
  use 5.010001;
  use strict;
  use warnings;
  
  our $sul_available = eval { require Scalar::Util::LooksLikeNumber; 1 } ? 1:0;
  use Term::ANSIColor qw(:constants);
  
  # PUSHCOLOR and LOCALCOLOR cannot be used, they are functions, not escape codes
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(encode_json);
  
  our $VERSION = '0.12'; # VERSION
  
  our %theme = (
      start_quote         => BOLD . BRIGHT_GREEN,
      end_quote           => RESET,
      start_string        => GREEN,
      end_string          => RESET,
      start_string_escape => BOLD,
      end_string_escape   => RESET . GREEN, # back to string
      start_number        => BOLD . BRIGHT_MAGENTA,
      end_number          => RESET,
      start_bool          => CYAN,
      end_bool            => RESET,
      start_null          => CYAN,
      end_null            => RESET,
      start_object_key    => MAGENTA,
      end_object_key      => RESET,
      start_object_key_escape => BOLD,
      end_object_key_escape   => RESET . MAGENTA, # back to object key
      start_linum         => REVERSE . WHITE,
      end_linum           => RESET,
  );
  
  my %esc = (
      "\n" => '\n',
      "\r" => '\r',
      "\t" => '\t',
      "\f" => '\f',
      "\b" => '\b',
      "\"" => '\"',
      "\\" => '\\\\',
      "\'" => '\\\'',
  );
  sub _string {
      my ($value, $opts) = @_;
  
      my ($sq, $eq, $ss, $es, $sse, $ese);
      if ($opts->{obj_key}) {
          $sq  = $theme{start_object_key};
          $eq  = $theme{end_object_key};
          $ss  = $theme{start_object_key};
          $es  = $theme{end_object_key};
          $sse = $theme{start_object_key_escape};
          $ese = $theme{end_object_key_escape};
      } else {
          $sq  = $theme{start_quote};
          $eq  = $theme{end_quote};
          $ss  = $theme{start_string};
          $es  = $theme{end_string};
          $sse = $theme{start_string_escape};
          $ese = $theme{end_string_escape};
      }
  
      $value =~ s/([\x22\x5c\n\r\t\f\b])|([\x00-\x08\x0b\x0e-\x1f])/
          join("",
               $sse,
               $1 ? $esc{$1} : '\\u00' . unpack('H2', $2),
               $ese,
           )
              /eg;
  
      return join(
          "",
          $sq, '"', $eq,
          $ss, $value, $es,
          $sq, '"', $eq,
      );
  }
  
  sub _number {
      my ($value, $opts) = @_;
  
      return join(
          "",
          $theme{start_number}, $value, $theme{end_number},
      );
  }
  
  sub _null {
      my ($value, $opts) = @_;
  
      return join(
          "",
          $theme{start_null}, "null", $theme{end_null},
      );
  }
  
  sub _bool {
      my ($value, $opts) = @_;
  
      return join(
          "",
          $theme{start_bool}, "$value", $theme{end_bool},
      );
  }
  
  sub _array {
      my ($value, $opts) = @_;
  
      return "[]" unless @$value;
      my $indent  = $opts->{pretty} ? "   " x  $opts->{_indent}    : "";
      my $indent2 = $opts->{pretty} ? "   " x ($opts->{_indent}+1) : "";
      my $nl      = $opts->{pretty} ? "\n" : "";
      local $opts->{_indent} = $opts->{_indent}+1;
      return join(
          "",
          "[$nl",
          (map {
              $indent2,
              _encode($value->[$_], $opts),
              $_ == @$value-1 ? $nl : ",$nl",
          } 0..@$value-1),
          $indent, "]",
      );
  }
  
  sub _hash {
      my ($value, $opts) = @_;
  
      return "{}" unless keys %$value;
      my $indent  = $opts->{pretty} ? "   " x  $opts->{_indent}    : "";
      my $indent2 = $opts->{pretty} ? "   " x ($opts->{_indent}+1) : "";
      my $nl      = $opts->{pretty} ? "\n" : "";
      my $colon   = $opts->{pretty} ? ": " : ":";
      my @res;
  
      push @res, "{$nl";
      my @k;
      if ($opts->{sort_by}) {
          @k = sort { $opts->{sort_by}->() } keys %$value;
      } else {
          @k = sort keys(%$value);
      }
      local $opts->{_indent} = $opts->{_indent}+1;
      for (0..@k-1) {
          my $k = $k[$_];
          push @res, (
              $indent2,
              _string($k, {obj_key=>1}),
              $colon,
              _encode($value->{$k}, $opts),
              $_ == @k-1 ? $nl : ",$nl",
          );
      }
      push @res, $indent, "}";
      join "", @res;
  }
  
  sub _encode {
      my ($data, $opts) = @_;
  
      my $ref = ref($data);
  
      if (!defined($data)) {
          return _null($data, $opts);
      } elsif ($ref eq 'ARRAY') {
          return _array($data, $opts);
      } elsif ($ref eq 'HASH') {
          return _hash($data, $opts);
      } elsif ($ref eq 'JSON::XS::Boolean' || $ref eq 'JSON::PP::Boolean') {
          return _bool($data, $opts);
      } elsif (!$ref) {
          if ($sul_available &&
                  Scalar::Util::LooksLikeNumber::looks_like_number($data) =~
                    /^(4|12|4352|8704)$/o) {
              return _number($data, $opts);
          } else {
              return _string($data, $opts);
          }
      } else {
          die "Can't encode $data";
      }
  }
  
  sub encode_json {
      my ($value, $opts) = @_;
      $opts //= {};
      $opts->{_indent} //= 0;
      my $res = _encode($value , $opts);
  
      if ($opts->{linum}) {
          my $lines = 0;
          $lines++ while $res =~ /^/mog;
          my $fmt = "%".length($lines)."d";
          my $i = 0;
          $res =~ s/^/
              $theme{start_linum} . sprintf($fmt, ++$i) . $theme{end_linum}
                  /meg;
      }
      $res;
  }
  
  1;
  # ABSTRACT: Encode to colored JSON
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  JSON::Color - Encode to colored JSON
  
  =head1 VERSION
  
  This document describes version 0.12 of JSON::Color (from Perl distribution JSON-Color), released on 2016-08-23.
  
  =head1 SYNOPSIS
  
   use JSON::Color qw(encode_json);
   say encode_json([1, "two", {three => 4}]);
  
  =head1 DESCRIPTION
  
  This module generates JSON, colorized with ANSI escape sequences.
  
  To change the color, see the C<%theme> in the source code. In theory you can
  also modify it to colorize using HTML.
  
  =head1 FUNCTIONS
  
  =head2 encode_json($data, \%opts) => STR
  
  Encode to JSON. Will die on error (e.g. when encountering non-encodeable data
  like Regexp or file handle).
  
  Known options:
  
  =over
  
  =item * pretty => BOOL (default: 0)
  
  Pretty-print.
  
  =item * linum => BOOL (default: 0)
  
  Show line number.
  
  =item * sort_by => CODE
  
  If specified, then sorting of hash keys will be done using this sort subroutine.
  This is similar to the C<sort_by> option in the L<JSON> module. Note that code
  is executed in C<JSON::Color> namespace, example:
  
   # reverse sort
   encode_json(..., {sort_by => sub { $JSON::Color::b cmp $JSON::Color::a }});
  
  Another example, using L<Sort::ByExample>:
  
   use Sort::ByExample cmp => {-as => 'by_eg', example => [qw/foo bar baz/]};
   encode_json(..., {sort_by => sub { by_eg($JSON::Color::a, $JSON::Color::b) }});
  
  =back
  
  =head1 FAQ
  
  =head2 What about loading?
  
  Use L<JSON>.
  
  =head2 How to handle non-encodeable data?
  
  Use L<Data::Clean::JSON>.
  
  =head2 Why do numbers become strings?
  
  Example:
  
   % perl -MJSON::Color=encode_json -E'say encode_json([1, "1"])'
   ["1","1"]
  
  To detect whether a scalar is a number (e.g. differentiate between "1" and 1),
  the XS module L<Scalar::Util::LooksLikeNumber> is used. This is set as an
  optional prerequisite, so you'll need to install it separately. After the
  prerequisite is installed:
  
   % perl -MJSON::Color=encode_json -E'say encode_json([1, "1"])'
   [1,"1"]
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/JSON-Color>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-JSON-Color>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=JSON-Color>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  To colorize with HTML, you can try L<Syntax::Highlight::JSON>.
  
  L<Syntax::SourceHighlight> can also colorize JSON/JavaScript to HTML or ANSI
  escape. It requires the GNU Source-highlight library.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
JSON_COLOR

    $main::fatpacked{"JSON/MaybeXS.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'JSON_MAYBEXS';
  package JSON::MaybeXS;
  
  use strict;
  use warnings FATAL => 'all';
  use base qw(Exporter);
  
  our $VERSION = '1.003005';
  $VERSION = eval $VERSION;
  
  sub _choose_json_module {
      return 'Cpanel::JSON::XS' if $INC{'Cpanel/JSON/XS.pm'};
      return 'JSON::XS'         if $INC{'JSON/XS.pm'};
  
      my @err;
  
      return 'Cpanel::JSON::XS' if eval { require Cpanel::JSON::XS; 1; };
      push @err, "Error loading Cpanel::JSON::XS: $@";
  
      return 'JSON::XS' if eval { require JSON::XS; 1; };
      push @err, "Error loading JSON::XS: $@";
  
      return 'JSON::PP' if eval { require JSON::PP; 1 };
      push @err, "Error loading JSON::PP: $@";
  
      die join( "\n", "Couldn't load a JSON module:", @err );
  
  }
  
  BEGIN {
      our $JSON_Class = _choose_json_module();
      $JSON_Class->import(qw(encode_json decode_json));
  }
  
  our @EXPORT = qw(encode_json decode_json JSON);
  my @EXPORT_ALL = qw(is_bool);
  our @EXPORT_OK = qw(is_bool to_json from_json);
  our %EXPORT_TAGS = ( all => [ @EXPORT, @EXPORT_ALL ],
                       legacy => [ @EXPORT, @EXPORT_OK ],
                     );
  
  sub JSON () { our $JSON_Class }
  
  sub new {
    shift;
    my %args = @_ == 1 ? %{$_[0]} : @_;
    my $new = (our $JSON_Class)->new;
    $new->$_($args{$_}) for keys %args;
    return $new;
  }
  
  use Scalar::Util ();
  
  sub is_bool {
    die 'is_bool is not a method' if $_[1];
  
    Scalar::Util::blessed($_[0])
      and ($_[0]->isa('JSON::XS::Boolean')
        or $_[0]->isa('Cpanel::JSON::XS::Boolean')
        or $_[0]->isa('JSON::PP::Boolean'));
  }
  
  # (mostly) CopyPasta from JSON.pm version 2.90
  use Carp ();
  
  sub from_json ($@) {
      if ( ref($_[0]) =~ /^JSON/ or $_[0] =~ /^JSON/ ) {
          Carp::croak "from_json should not be called as a method.";
      }
      my $json = JSON()->new;
  
      if (@_ == 2 and ref $_[1] eq 'HASH') {
          my $opt  = $_[1];
          for my $method (keys %$opt) {
              $json->$method( $opt->{$method} );
          }
      }
  
      return $json->decode( $_[0] );
  }
  
  sub to_json ($@) {
      if (
          ref($_[0]) =~ /^JSON/
          or (@_ > 2 and $_[0] =~ /^JSON/)
            ) {
                 Carp::croak "to_json should not be called as a method.";
      }
      my $json = JSON()->new;
  
      if (@_ == 2 and ref $_[1] eq 'HASH') {
          my $opt  = $_[1];
          for my $method (keys %$opt) {
              $json->$method( $opt->{$method} );
          }
      }
  
      $json->encode($_[0]);
  }
  
  1;
  
  =head1 NAME
  
  JSON::MaybeXS - Use L<Cpanel::JSON::XS> with a fallback to L<JSON::XS> and L<JSON::PP>
  
  =head1 SYNOPSIS
  
    use JSON::MaybeXS;
  
    my $data_structure = decode_json($json_input);
  
    my $json_output = encode_json($data_structure);
  
    my $json = JSON->new;
  
    my $json_with_args = JSON::MaybeXS->new(utf8 => 1); # or { utf8 => 1 }
  
  =head1 DESCRIPTION
  
  This module first checks to see if either L<Cpanel::JSON::XS> or
  L<JSON::XS> is already loaded, in which case it uses that module. Otherwise
  it tries to load L<Cpanel::JSON::XS>, then L<JSON::XS>, then L<JSON::PP>
  in order, and either uses the first module it finds or throws an error.
  
  It then exports the C<encode_json> and C<decode_json> functions from the
  loaded module, along with a C<JSON> constant that returns the class name
  for calling C<new> on.
  
  If you're writing fresh code rather than replacing L<JSON.pm|JSON> usage, you might
  want to pass options as constructor args rather than calling mutators, so
  we provide our own C<new> method that supports that.
  
  =head1 EXPORTS
  
  C<encode_json>, C<decode_json> and C<JSON> are exported by default; C<is_bool>
  is exported on request.
  
  To import only some symbols, specify them on the C<use> line:
  
    use JSON::MaybeXS qw(encode_json decode_json is_bool); # functions only
  
    use JSON::MaybeXS qw(JSON); # JSON constant only
  
  To import all available sensible symbols (C<encode_json>, C<decode_json>, and
  C<is_bool>), use C<:all>:
  
    use JSON::MaybeXS ':all';
  
  To import all symbols including those needed by legacy apps that use L<JSON::PP>:
  
    use JSON::MaybeXS ':legacy';
  
  This imports the C<to_json> and C<from_json> symbols as well as everything in
  C<:all>.  NOTE: This is to support legacy code that makes extensive
  use of C<to_json> and C<from_json> which you are not yet in a position to
  refactor.  DO NOT use this import tag in new code, in order to avoid
  the crawling horrors of getting UTF8 support subtly wrong.  See the
  documentation for L<JSON> for further details.
  
  =head2 encode_json
  
  This is the C<encode_json> function provided by the selected implementation
  module, and takes a perl data structure which is serialised to JSON text.
  
    my $json_text = encode_json($data_structure);
  
  =head2 decode_json
  
  This is the C<decode_json> function provided by the selected implementation
  module, and takes a string of JSON text to deserialise to a perl data structure.
  
    my $data_structure = decode_json($json_text);
  
  =head2 to_json, from_json
  
  See L<JSON> for details.  These are included to support legacy code
  B<only>.
  
  =head2 JSON
  
  The C<JSON> constant returns the selected implementation module's name for
  use as a class name - so:
  
    my $json_obj = JSON->new; # returns a Cpanel::JSON::XS or JSON::PP object
  
  and that object can then be used normally:
  
    my $data_structure = $json_obj->decode($json_text); # etc.
  
  =head2 is_bool
  
    $is_boolean = is_bool($scalar)
  
  Returns true if the passed scalar represents either C<true> or
  C<false>, two constants that act like C<1> and C<0>, respectively
  and are used to represent JSON C<true> and C<false> values in Perl.
  
  Since this is a bare sub in the various backend classes, it cannot be called as
  a class method like the other interfaces; it must be called as a function, with
  no invocant.  It supports the representation used in all JSON backends.
  
  =head1 CONSTRUCTOR
  
  =head2 new
  
  With L<JSON::PP>, L<JSON::XS> and L<Cpanel::JSON::XS> you are required to call
  mutators to set options, such as:
  
    my $json = $class->new->utf8(1)->pretty(1);
  
  Since this is a trifle irritating and noticeably un-perlish, we also offer:
  
    my $json = JSON::MaybeXS->new(utf8 => 1, pretty => 1);
  
  which works equivalently to the above (and in the usual tradition will accept
  a hashref instead of a hash, should you so desire).
  
  =head1 BOOLEANS
  
  To include JSON-aware booleans (C<true>, C<false>) in your data, just do:
  
      use JSON::MaybeXS;
      my $true = JSON->true;
      my $false = JSON->false;
  
  =head1 CAVEATS
  
  The C<new()> method in this module is technically a factory, not a
  constructor, because the objects it returns will I<NOT> be blessed into the
  C<JSON::MaybeXS> class.
  
  If you are using an object returned by this module as a Moo(se) attribute,
  this type constraint code:
  
      is 'json' => ( isa => 'JSON::MaybeXS' );
  
  will I<NOT> do what you expect. Instead, either rely on the C<JSON> class
  constant described above, as so:
  
      is 'json' => ( isa => JSON::MaybeXS::JSON() );
  
  Alternatively, you can use duck typing:
  
      use Moose::Util::TypeConstraints 'duck_type';
      is 'json' => ( isa => Object , duck_type([qw/ encode decode /]));
  
  =head1 AUTHOR
  
  mst - Matt S. Trout (cpan:MSTROUT) <mst@shadowcat.co.uk>
  
  =head1 CONTRIBUTORS
  
  =over 4
  
  =item * Clinton Gormley <drtech@cpan.org>
  
  =item * Karen Etheridge <ether@cpan.org>
  
  =item * Kieren Diment <diment@gmail.com>
  
  =back
  
  =head1 COPYRIGHT
  
  Copyright (c) 2013 the C<JSON::MaybeXS> L</AUTHOR> and L</CONTRIBUTORS>
  as listed above.
  
  =head1 LICENSE
  
  This library is free software and may be distributed under the same terms
  as perl itself.
  
  =cut
JSON_MAYBEXS

    $main::fatpacked{"JSON/PP.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'JSON_PP';
  package JSON::PP;
  
  # JSON-2.0
  
  use 5.005;
  use strict;
  use base qw(Exporter);
  use overload ();
  
  use Carp ();
  use B ();
  #use Devel::Peek;
  
  $JSON::PP::VERSION = '2.27300';
  
  @JSON::PP::EXPORT = qw(encode_json decode_json from_json to_json);
  
  # instead of hash-access, i tried index-access for speed.
  # but this method is not faster than what i expected. so it will be changed.
  
  use constant P_ASCII                => 0;
  use constant P_LATIN1               => 1;
  use constant P_UTF8                 => 2;
  use constant P_INDENT               => 3;
  use constant P_CANONICAL            => 4;
  use constant P_SPACE_BEFORE         => 5;
  use constant P_SPACE_AFTER          => 6;
  use constant P_ALLOW_NONREF         => 7;
  use constant P_SHRINK               => 8;
  use constant P_ALLOW_BLESSED        => 9;
  use constant P_CONVERT_BLESSED      => 10;
  use constant P_RELAXED              => 11;
  
  use constant P_LOOSE                => 12;
  use constant P_ALLOW_BIGNUM         => 13;
  use constant P_ALLOW_BAREKEY        => 14;
  use constant P_ALLOW_SINGLEQUOTE    => 15;
  use constant P_ESCAPE_SLASH         => 16;
  use constant P_AS_NONBLESSED        => 17;
  
  use constant P_ALLOW_UNKNOWN        => 18;
  
  use constant OLD_PERL => $] < 5.008 ? 1 : 0;
  
  BEGIN {
      my @xs_compati_bit_properties = qw(
              latin1 ascii utf8 indent canonical space_before space_after allow_nonref shrink
              allow_blessed convert_blessed relaxed allow_unknown
      );
      my @pp_bit_properties = qw(
              allow_singlequote allow_bignum loose
              allow_barekey escape_slash as_nonblessed
      );
  
      # Perl version check, Unicode handling is enable?
      # Helper module sets @JSON::PP::_properties.
      if ($] < 5.008 ) {
          my $helper = $] >= 5.006 ? 'JSON::PP::Compat5006' : 'JSON::PP::Compat5005';
          eval qq| require $helper |;
          if ($@) { Carp::croak $@; }
      }
  
      for my $name (@xs_compati_bit_properties, @pp_bit_properties) {
          my $flag_name = 'P_' . uc($name);
  
          eval qq/
              sub $name {
                  my \$enable = defined \$_[1] ? \$_[1] : 1;
  
                  if (\$enable) {
                      \$_[0]->{PROPS}->[$flag_name] = 1;
                  }
                  else {
                      \$_[0]->{PROPS}->[$flag_name] = 0;
                  }
  
                  \$_[0];
              }
  
              sub get_$name {
                  \$_[0]->{PROPS}->[$flag_name] ? 1 : '';
              }
          /;
      }
  
  }
  
  
  
  # Functions
  
  my %encode_allow_method
       = map {($_ => 1)} qw/utf8 pretty allow_nonref latin1 self_encode escape_slash
                            allow_blessed convert_blessed indent indent_length allow_bignum
                            as_nonblessed
                          /;
  my %decode_allow_method
       = map {($_ => 1)} qw/utf8 allow_nonref loose allow_singlequote allow_bignum
                            allow_barekey max_size relaxed/;
  
  
  my $JSON; # cache
  
  sub encode_json ($) { # encode
      ($JSON ||= __PACKAGE__->new->utf8)->encode(@_);
  }
  
  
  sub decode_json { # decode
      ($JSON ||= __PACKAGE__->new->utf8)->decode(@_);
  }
  
  # Obsoleted
  
  sub to_json($) {
     Carp::croak ("JSON::PP::to_json has been renamed to encode_json.");
  }
  
  
  sub from_json($) {
     Carp::croak ("JSON::PP::from_json has been renamed to decode_json.");
  }
  
  
  # Methods
  
  sub new {
      my $class = shift;
      my $self  = {
          max_depth   => 512,
          max_size    => 0,
          indent      => 0,
          FLAGS       => 0,
          fallback      => sub { encode_error('Invalid value. JSON can only reference.') },
          indent_length => 3,
      };
  
      bless $self, $class;
  }
  
  
  sub encode {
      return $_[0]->PP_encode_json($_[1]);
  }
  
  
  sub decode {
      return $_[0]->PP_decode_json($_[1], 0x00000000);
  }
  
  
  sub decode_prefix {
      return $_[0]->PP_decode_json($_[1], 0x00000001);
  }
  
  
  # accessor
  
  
  # pretty printing
  
  sub pretty {
      my ($self, $v) = @_;
      my $enable = defined $v ? $v : 1;
  
      if ($enable) { # indent_length(3) for JSON::XS compatibility
          $self->indent(1)->indent_length(3)->space_before(1)->space_after(1);
      }
      else {
          $self->indent(0)->space_before(0)->space_after(0);
      }
  
      $self;
  }
  
  # etc
  
  sub max_depth {
      my $max  = defined $_[1] ? $_[1] : 0x80000000;
      $_[0]->{max_depth} = $max;
      $_[0];
  }
  
  
  sub get_max_depth { $_[0]->{max_depth}; }
  
  
  sub max_size {
      my $max  = defined $_[1] ? $_[1] : 0;
      $_[0]->{max_size} = $max;
      $_[0];
  }
  
  
  sub get_max_size { $_[0]->{max_size}; }
  
  
  sub filter_json_object {
      $_[0]->{cb_object} = defined $_[1] ? $_[1] : 0;
      $_[0]->{F_HOOK} = ($_[0]->{cb_object} or $_[0]->{cb_sk_object}) ? 1 : 0;
      $_[0];
  }
  
  sub filter_json_single_key_object {
      if (@_ > 1) {
          $_[0]->{cb_sk_object}->{$_[1]} = $_[2];
      }
      $_[0]->{F_HOOK} = ($_[0]->{cb_object} or $_[0]->{cb_sk_object}) ? 1 : 0;
      $_[0];
  }
  
  sub indent_length {
      if (!defined $_[1] or $_[1] > 15 or $_[1] < 0) {
          Carp::carp "The acceptable range of indent_length() is 0 to 15.";
      }
      else {
          $_[0]->{indent_length} = $_[1];
      }
      $_[0];
  }
  
  sub get_indent_length {
      $_[0]->{indent_length};
  }
  
  sub sort_by {
      $_[0]->{sort_by} = defined $_[1] ? $_[1] : 1;
      $_[0];
  }
  
  sub allow_bigint {
      Carp::carp("allow_bigint() is obsoleted. use allow_bignum() insted.");
  }
  
  ###############################
  
  ###
  ### Perl => JSON
  ###
  
  
  { # Convert
  
      my $max_depth;
      my $indent;
      my $ascii;
      my $latin1;
      my $utf8;
      my $space_before;
      my $space_after;
      my $canonical;
      my $allow_blessed;
      my $convert_blessed;
  
      my $indent_length;
      my $escape_slash;
      my $bignum;
      my $as_nonblessed;
  
      my $depth;
      my $indent_count;
      my $keysort;
  
  
      sub PP_encode_json {
          my $self = shift;
          my $obj  = shift;
  
          $indent_count = 0;
          $depth        = 0;
  
          my $idx = $self->{PROPS};
  
          ($ascii, $latin1, $utf8, $indent, $canonical, $space_before, $space_after, $allow_blessed,
              $convert_blessed, $escape_slash, $bignum, $as_nonblessed)
           = @{$idx}[P_ASCII .. P_SPACE_AFTER, P_ALLOW_BLESSED, P_CONVERT_BLESSED,
                      P_ESCAPE_SLASH, P_ALLOW_BIGNUM, P_AS_NONBLESSED];
  
          ($max_depth, $indent_length) = @{$self}{qw/max_depth indent_length/};
  
          $keysort = $canonical ? sub { $a cmp $b } : undef;
  
          if ($self->{sort_by}) {
              $keysort = ref($self->{sort_by}) eq 'CODE' ? $self->{sort_by}
                       : $self->{sort_by} =~ /\D+/       ? $self->{sort_by}
                       : sub { $a cmp $b };
          }
  
          encode_error("hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this)")
               if(!ref $obj and !$idx->[ P_ALLOW_NONREF ]);
  
          my $str  = $self->object_to_json($obj);
  
          $str .= "\n" if ( $indent ); # JSON::XS 2.26 compatible
  
          unless ($ascii or $latin1 or $utf8) {
              utf8::upgrade($str);
          }
  
          if ($idx->[ P_SHRINK ]) {
              utf8::downgrade($str, 1);
          }
  
          return $str;
      }
  
  
      sub object_to_json {
          my ($self, $obj) = @_;
          my $type = ref($obj);
  
          if($type eq 'HASH'){
              return $self->hash_to_json($obj);
          }
          elsif($type eq 'ARRAY'){
              return $self->array_to_json($obj);
          }
          elsif ($type) { # blessed object?
              if (blessed($obj)) {
  
                  return $self->value_to_json($obj) if ( $obj->isa('JSON::PP::Boolean') );
  
                  if ( $convert_blessed and $obj->can('TO_JSON') ) {
                      my $result = $obj->TO_JSON();
                      if ( defined $result and ref( $result ) ) {
                          if ( refaddr( $obj ) eq refaddr( $result ) ) {
                              encode_error( sprintf(
                                  "%s::TO_JSON method returned same object as was passed instead of a new one",
                                  ref $obj
                              ) );
                          }
                      }
  
                      return $self->object_to_json( $result );
                  }
  
                  return "$obj" if ( $bignum and _is_bignum($obj) );
                  return $self->blessed_to_json($obj) if ($allow_blessed and $as_nonblessed); # will be removed.
  
                  encode_error( sprintf("encountered object '%s', but neither allow_blessed "
                      . "nor convert_blessed settings are enabled", $obj)
                  ) unless ($allow_blessed);
  
                  return 'null';
              }
              else {
                  return $self->value_to_json($obj);
              }
          }
          else{
              return $self->value_to_json($obj);
          }
      }
  
  
      sub hash_to_json {
          my ($self, $obj) = @_;
          my @res;
  
          encode_error("json text or perl structure exceeds maximum nesting level (max_depth set too low?)")
                                           if (++$depth > $max_depth);
  
          my ($pre, $post) = $indent ? $self->_up_indent() : ('', '');
          my $del = ($space_before ? ' ' : '') . ':' . ($space_after ? ' ' : '');
  
          for my $k ( _sort( $obj ) ) {
              if ( OLD_PERL ) { utf8::decode($k) } # key for Perl 5.6 / be optimized
              push @res, string_to_json( $self, $k )
                            .  $del
                            . ( $self->object_to_json( $obj->{$k} ) || $self->value_to_json( $obj->{$k} ) );
          }
  
          --$depth;
          $self->_down_indent() if ($indent);
  
          return   '{' . ( @res ? $pre : '' ) . ( @res ? join( ",$pre", @res ) . $post : '' )  . '}';
      }
  
  
      sub array_to_json {
          my ($self, $obj) = @_;
          my @res;
  
          encode_error("json text or perl structure exceeds maximum nesting level (max_depth set too low?)")
                                           if (++$depth > $max_depth);
  
          my ($pre, $post) = $indent ? $self->_up_indent() : ('', '');
  
          for my $v (@$obj){
              push @res, $self->object_to_json($v) || $self->value_to_json($v);
          }
  
          --$depth;
          $self->_down_indent() if ($indent);
  
          return '[' . ( @res ? $pre : '' ) . ( @res ? join( ",$pre", @res ) . $post : '' ) . ']';
      }
  
  
      sub value_to_json {
          my ($self, $value) = @_;
  
          return 'null' if(!defined $value);
  
          my $b_obj = B::svref_2object(\$value);  # for round trip problem
          my $flags = $b_obj->FLAGS;
  
          return $value # as is 
              if $flags & ( B::SVp_IOK | B::SVp_NOK ) and !( $flags & B::SVp_POK ); # SvTYPE is IV or NV?
  
          my $type = ref($value);
  
          if(!$type){
              return string_to_json($self, $value);
          }
          elsif( blessed($value) and  $value->isa('JSON::PP::Boolean') ){
              return $$value == 1 ? 'true' : 'false';
          }
          elsif ($type) {
              if ((overload::StrVal($value) =~ /=(\w+)/)[0]) {
                  return $self->value_to_json("$value");
              }
  
              if ($type eq 'SCALAR' and defined $$value) {
                  return   $$value eq '1' ? 'true'
                         : $$value eq '0' ? 'false'
                         : $self->{PROPS}->[ P_ALLOW_UNKNOWN ] ? 'null'
                         : encode_error("cannot encode reference to scalar");
              }
  
               if ( $self->{PROPS}->[ P_ALLOW_UNKNOWN ] ) {
                   return 'null';
               }
               else {
                   if ( $type eq 'SCALAR' or $type eq 'REF' ) {
                      encode_error("cannot encode reference to scalar");
                   }
                   else {
                      encode_error("encountered $value, but JSON can only represent references to arrays or hashes");
                   }
               }
  
          }
          else {
              return $self->{fallback}->($value)
                   if ($self->{fallback} and ref($self->{fallback}) eq 'CODE');
              return 'null';
          }
  
      }
  
  
      my %esc = (
          "\n" => '\n',
          "\r" => '\r',
          "\t" => '\t',
          "\f" => '\f',
          "\b" => '\b',
          "\"" => '\"',
          "\\" => '\\\\',
          "\'" => '\\\'',
      );
  
  
      sub string_to_json {
          my ($self, $arg) = @_;
  
          $arg =~ s/([\x22\x5c\n\r\t\f\b])/$esc{$1}/g;
          $arg =~ s/\//\\\//g if ($escape_slash);
          $arg =~ s/([\x00-\x08\x0b\x0e-\x1f])/'\\u00' . unpack('H2', $1)/eg;
  
          if ($ascii) {
              $arg = JSON_PP_encode_ascii($arg);
          }
  
          if ($latin1) {
              $arg = JSON_PP_encode_latin1($arg);
          }
  
          if ($utf8) {
              utf8::encode($arg);
          }
  
          return '"' . $arg . '"';
      }
  
  
      sub blessed_to_json {
          my $reftype = reftype($_[1]) || '';
          if ($reftype eq 'HASH') {
              return $_[0]->hash_to_json($_[1]);
          }
          elsif ($reftype eq 'ARRAY') {
              return $_[0]->array_to_json($_[1]);
          }
          else {
              return 'null';
          }
      }
  
  
      sub encode_error {
          my $error  = shift;
          Carp::croak "$error";
      }
  
  
      sub _sort {
          defined $keysort ? (sort $keysort (keys %{$_[0]})) : keys %{$_[0]};
      }
  
  
      sub _up_indent {
          my $self  = shift;
          my $space = ' ' x $indent_length;
  
          my ($pre,$post) = ('','');
  
          $post = "\n" . $space x $indent_count;
  
          $indent_count++;
  
          $pre = "\n" . $space x $indent_count;
  
          return ($pre,$post);
      }
  
  
      sub _down_indent { $indent_count--; }
  
  
      sub PP_encode_box {
          {
              depth        => $depth,
              indent_count => $indent_count,
          };
      }
  
  } # Convert
  
  
  sub _encode_ascii {
      join('',
          map {
              $_ <= 127 ?
                  chr($_) :
              $_ <= 65535 ?
                  sprintf('\u%04x', $_) : sprintf('\u%x\u%x', _encode_surrogates($_));
          } unpack('U*', $_[0])
      );
  }
  
  
  sub _encode_latin1 {
      join('',
          map {
              $_ <= 255 ?
                  chr($_) :
              $_ <= 65535 ?
                  sprintf('\u%04x', $_) : sprintf('\u%x\u%x', _encode_surrogates($_));
          } unpack('U*', $_[0])
      );
  }
  
  
  sub _encode_surrogates { # from perlunicode
      my $uni = $_[0] - 0x10000;
      return ($uni / 0x400 + 0xD800, $uni % 0x400 + 0xDC00);
  }
  
  
  sub _is_bignum {
      $_[0]->isa('Math::BigInt') or $_[0]->isa('Math::BigFloat');
  }
  
  
  
  #
  # JSON => Perl
  #
  
  my $max_intsize;
  
  BEGIN {
      my $checkint = 1111;
      for my $d (5..64) {
          $checkint .= 1;
          my $int   = eval qq| $checkint |;
          if ($int =~ /[eE]/) {
              $max_intsize = $d - 1;
              last;
          }
      }
  }
  
  { # PARSE 
  
      my %escapes = ( #  by Jeremy Muhlich <jmuhlich [at] bitflood.org>
          b    => "\x8",
          t    => "\x9",
          n    => "\xA",
          f    => "\xC",
          r    => "\xD",
          '\\' => '\\',
          '"'  => '"',
          '/'  => '/',
      );
  
      my $text; # json data
      my $at;   # offset
      my $ch;   # 1chracter
      my $len;  # text length (changed according to UTF8 or NON UTF8)
      # INTERNAL
      my $depth;          # nest counter
      my $encoding;       # json text encoding
      my $is_valid_utf8;  # temp variable
      my $utf8_len;       # utf8 byte length
      # FLAGS
      my $utf8;           # must be utf8
      my $max_depth;      # max nest nubmer of objects and arrays
      my $max_size;
      my $relaxed;
      my $cb_object;
      my $cb_sk_object;
  
      my $F_HOOK;
  
      my $allow_bigint;   # using Math::BigInt
      my $singlequote;    # loosely quoting
      my $loose;          # 
      my $allow_barekey;  # bareKey
  
      # $opt flag
      # 0x00000001 .... decode_prefix
      # 0x10000000 .... incr_parse
  
      sub PP_decode_json {
          my ($self, $opt); # $opt is an effective flag during this decode_json.
  
          ($self, $text, $opt) = @_;
  
          ($at, $ch, $depth) = (0, '', 0);
  
          if ( !defined $text or ref $text ) {
              decode_error("malformed JSON string, neither array, object, number, string or atom");
          }
  
          my $idx = $self->{PROPS};
  
          ($utf8, $relaxed, $loose, $allow_bigint, $allow_barekey, $singlequote)
              = @{$idx}[P_UTF8, P_RELAXED, P_LOOSE .. P_ALLOW_SINGLEQUOTE];
  
          if ( $utf8 ) {
              utf8::downgrade( $text, 1 ) or Carp::croak("Wide character in subroutine entry");
          }
          else {
              utf8::upgrade( $text );
              utf8::encode( $text );
          }
  
          $len = length $text;
  
          ($max_depth, $max_size, $cb_object, $cb_sk_object, $F_HOOK)
               = @{$self}{qw/max_depth  max_size cb_object cb_sk_object F_HOOK/};
  
          if ($max_size > 1) {
              use bytes;
              my $bytes = length $text;
              decode_error(
                  sprintf("attempted decode of JSON text of %s bytes size, but max_size is set to %s"
                      , $bytes, $max_size), 1
              ) if ($bytes > $max_size);
          }
  
          # Currently no effect
          # should use regexp
          my @octets = unpack('C4', $text);
          $encoding =   ( $octets[0] and  $octets[1]) ? 'UTF-8'
                      : (!$octets[0] and  $octets[1]) ? 'UTF-16BE'
                      : (!$octets[0] and !$octets[1]) ? 'UTF-32BE'
                      : ( $octets[2]                ) ? 'UTF-16LE'
                      : (!$octets[2]                ) ? 'UTF-32LE'
                      : 'unknown';
  
          white(); # remove head white space
  
          my $valid_start = defined $ch; # Is there a first character for JSON structure?
  
          my $result = value();
  
          return undef if ( !$result && ( $opt & 0x10000000 ) ); # for incr_parse
  
          decode_error("malformed JSON string, neither array, object, number, string or atom") unless $valid_start;
  
          if ( !$idx->[ P_ALLOW_NONREF ] and !ref $result ) {
                  decode_error(
                  'JSON text must be an object or array (but found number, string, true, false or null,'
                         . ' use allow_nonref to allow this)', 1);
          }
  
          Carp::croak('something wrong.') if $len < $at; # we won't arrive here.
  
          my $consumed = defined $ch ? $at - 1 : $at; # consumed JSON text length
  
          white(); # remove tail white space
  
          if ( $ch ) {
              return ( $result, $consumed ) if ($opt & 0x00000001); # all right if decode_prefix
              decode_error("garbage after JSON object");
          }
  
          ( $opt & 0x00000001 ) ? ( $result, $consumed ) : $result;
      }
  
  
      sub next_chr {
          return $ch = undef if($at >= $len);
          $ch = substr($text, $at++, 1);
      }
  
  
      sub value {
          white();
          return          if(!defined $ch);
          return object() if($ch eq '{');
          return array()  if($ch eq '[');
          return string() if($ch eq '"' or ($singlequote and $ch eq "'"));
          return number() if($ch =~ /[0-9]/ or $ch eq '-');
          return word();
      }
  
      sub string {
          my ($i, $s, $t, $u);
          my $utf16;
          my $is_utf8;
  
          ($is_valid_utf8, $utf8_len) = ('', 0);
  
          $s = ''; # basically UTF8 flag on
  
          if($ch eq '"' or ($singlequote and $ch eq "'")){
              my $boundChar = $ch;
  
              OUTER: while( defined(next_chr()) ){
  
                  if($ch eq $boundChar){
                      next_chr();
  
                      if ($utf16) {
                          decode_error("missing low surrogate character in surrogate pair");
                      }
  
                      utf8::decode($s) if($is_utf8);
  
                      return $s;
                  }
                  elsif($ch eq '\\'){
                      next_chr();
                      if(exists $escapes{$ch}){
                          $s .= $escapes{$ch};
                      }
                      elsif($ch eq 'u'){ # UNICODE handling
                          my $u = '';
  
                          for(1..4){
                              $ch = next_chr();
                              last OUTER if($ch !~ /[0-9a-fA-F]/);
                              $u .= $ch;
                          }
  
                          # U+D800 - U+DBFF
                          if ($u =~ /^[dD][89abAB][0-9a-fA-F]{2}/) { # UTF-16 high surrogate?
                              $utf16 = $u;
                          }
                          # U+DC00 - U+DFFF
                          elsif ($u =~ /^[dD][c-fC-F][0-9a-fA-F]{2}/) { # UTF-16 low surrogate?
                              unless (defined $utf16) {
                                  decode_error("missing high surrogate character in surrogate pair");
                              }
                              $is_utf8 = 1;
                              $s .= JSON_PP_decode_surrogates($utf16, $u) || next;
                              $utf16 = undef;
                          }
                          else {
                              if (defined $utf16) {
                                  decode_error("surrogate pair expected");
                              }
  
                              if ( ( my $hex = hex( $u ) ) > 127 ) {
                                  $is_utf8 = 1;
                                  $s .= JSON_PP_decode_unicode($u) || next;
                              }
                              else {
                                  $s .= chr $hex;
                              }
                          }
  
                      }
                      else{
                          unless ($loose) {
                              $at -= 2;
                              decode_error('illegal backslash escape sequence in string');
                          }
                          $s .= $ch;
                      }
                  }
                  else{
  
                      if ( ord $ch  > 127 ) {
                          unless( $ch = is_valid_utf8($ch) ) {
                              $at -= 1;
                              decode_error("malformed UTF-8 character in JSON string");
                          }
                          else {
                              $at += $utf8_len - 1;
                          }
  
                          $is_utf8 = 1;
                      }
  
                      if (!$loose) {
                          if ($ch =~ /[\x00-\x1f\x22\x5c]/)  { # '/' ok
                              $at--;
                              decode_error('invalid character encountered while parsing JSON string');
                          }
                      }
  
                      $s .= $ch;
                  }
              }
          }
  
          decode_error("unexpected end of string while parsing JSON string");
      }
  
  
      sub white {
          while( defined $ch  ){
              if($ch le ' '){
                  next_chr();
              }
              elsif($ch eq '/'){
                  next_chr();
                  if(defined $ch and $ch eq '/'){
                      1 while(defined(next_chr()) and $ch ne "\n" and $ch ne "\r");
                  }
                  elsif(defined $ch and $ch eq '*'){
                      next_chr();
                      while(1){
                          if(defined $ch){
                              if($ch eq '*'){
                                  if(defined(next_chr()) and $ch eq '/'){
                                      next_chr();
                                      last;
                                  }
                              }
                              else{
                                  next_chr();
                              }
                          }
                          else{
                              decode_error("Unterminated comment");
                          }
                      }
                      next;
                  }
                  else{
                      $at--;
                      decode_error("malformed JSON string, neither array, object, number, string or atom");
                  }
              }
              else{
                  if ($relaxed and $ch eq '#') { # correctly?
                      pos($text) = $at;
                      $text =~ /\G([^\n]*(?:\r\n|\r|\n|$))/g;
                      $at = pos($text);
                      next_chr;
                      next;
                  }
  
                  last;
              }
          }
      }
  
  
      sub array {
          my $a  = $_[0] || []; # you can use this code to use another array ref object.
  
          decode_error('json text or perl structure exceeds maximum nesting level (max_depth set too low?)')
                                                      if (++$depth > $max_depth);
  
          next_chr();
          white();
  
          if(defined $ch and $ch eq ']'){
              --$depth;
              next_chr();
              return $a;
          }
          else {
              while(defined($ch)){
                  push @$a, value();
  
                  white();
  
                  if (!defined $ch) {
                      last;
                  }
  
                  if($ch eq ']'){
                      --$depth;
                      next_chr();
                      return $a;
                  }
  
                  if($ch ne ','){
                      last;
                  }
  
                  next_chr();
                  white();
  
                  if ($relaxed and $ch eq ']') {
                      --$depth;
                      next_chr();
                      return $a;
                  }
  
              }
          }
  
          decode_error(", or ] expected while parsing array");
      }
  
  
      sub object {
          my $o = $_[0] || {}; # you can use this code to use another hash ref object.
          my $k;
  
          decode_error('json text or perl structure exceeds maximum nesting level (max_depth set too low?)')
                                                  if (++$depth > $max_depth);
          next_chr();
          white();
  
          if(defined $ch and $ch eq '}'){
              --$depth;
              next_chr();
              if ($F_HOOK) {
                  return _json_object_hook($o);
              }
              return $o;
          }
          else {
              while (defined $ch) {
                  $k = ($allow_barekey and $ch ne '"' and $ch ne "'") ? bareKey() : string();
                  white();
  
                  if(!defined $ch or $ch ne ':'){
                      $at--;
                      decode_error("':' expected");
                  }
  
                  next_chr();
                  $o->{$k} = value();
                  white();
  
                  last if (!defined $ch);
  
                  if($ch eq '}'){
                      --$depth;
                      next_chr();
                      if ($F_HOOK) {
                          return _json_object_hook($o);
                      }
                      return $o;
                  }
  
                  if($ch ne ','){
                      last;
                  }
  
                  next_chr();
                  white();
  
                  if ($relaxed and $ch eq '}') {
                      --$depth;
                      next_chr();
                      if ($F_HOOK) {
                          return _json_object_hook($o);
                      }
                      return $o;
                  }
  
              }
  
          }
  
          $at--;
          decode_error(", or } expected while parsing object/hash");
      }
  
  
      sub bareKey { # doesn't strictly follow Standard ECMA-262 3rd Edition
          my $key;
          while($ch =~ /[^\x00-\x23\x25-\x2F\x3A-\x40\x5B-\x5E\x60\x7B-\x7F]/){
              $key .= $ch;
              next_chr();
          }
          return $key;
      }
  
  
      sub word {
          my $word =  substr($text,$at-1,4);
  
          if($word eq 'true'){
              $at += 3;
              next_chr;
              return $JSON::PP::true;
          }
          elsif($word eq 'null'){
              $at += 3;
              next_chr;
              return undef;
          }
          elsif($word eq 'fals'){
              $at += 3;
              if(substr($text,$at,1) eq 'e'){
                  $at++;
                  next_chr;
                  return $JSON::PP::false;
              }
          }
  
          $at--; # for decode_error report
  
          decode_error("'null' expected")  if ($word =~ /^n/);
          decode_error("'true' expected")  if ($word =~ /^t/);
          decode_error("'false' expected") if ($word =~ /^f/);
          decode_error("malformed JSON string, neither array, object, number, string or atom");
      }
  
  
      sub number {
          my $n    = '';
          my $v;
  
          # According to RFC4627, hex or oct digts are invalid.
          if($ch eq '0'){
              my $peek = substr($text,$at,1);
              my $hex  = $peek =~ /[xX]/; # 0 or 1
  
              if($hex){
                  decode_error("malformed number (leading zero must not be followed by another digit)");
                  ($n) = ( substr($text, $at+1) =~ /^([0-9a-fA-F]+)/);
              }
              else{ # oct
                  ($n) = ( substr($text, $at) =~ /^([0-7]+)/);
                  if (defined $n and length $n > 1) {
                      decode_error("malformed number (leading zero must not be followed by another digit)");
                  }
              }
  
              if(defined $n and length($n)){
                  if (!$hex and length($n) == 1) {
                     decode_error("malformed number (leading zero must not be followed by another digit)");
                  }
                  $at += length($n) + $hex;
                  next_chr;
                  return $hex ? hex($n) : oct($n);
              }
          }
  
          if($ch eq '-'){
              $n = '-';
              next_chr;
              if (!defined $ch or $ch !~ /\d/) {
                  decode_error("malformed number (no digits after initial minus)");
              }
          }
  
          while(defined $ch and $ch =~ /\d/){
              $n .= $ch;
              next_chr;
          }
  
          if(defined $ch and $ch eq '.'){
              $n .= '.';
  
              next_chr;
              if (!defined $ch or $ch !~ /\d/) {
                  decode_error("malformed number (no digits after decimal point)");
              }
              else {
                  $n .= $ch;
              }
  
              while(defined(next_chr) and $ch =~ /\d/){
                  $n .= $ch;
              }
          }
  
          if(defined $ch and ($ch eq 'e' or $ch eq 'E')){
              $n .= $ch;
              next_chr;
  
              if(defined($ch) and ($ch eq '+' or $ch eq '-')){
                  $n .= $ch;
                  next_chr;
                  if (!defined $ch or $ch =~ /\D/) {
                      decode_error("malformed number (no digits after exp sign)");
                  }
                  $n .= $ch;
              }
              elsif(defined($ch) and $ch =~ /\d/){
                  $n .= $ch;
              }
              else {
                  decode_error("malformed number (no digits after exp sign)");
              }
  
              while(defined(next_chr) and $ch =~ /\d/){
                  $n .= $ch;
              }
  
          }
  
          $v .= $n;
  
          if ($v !~ /[.eE]/ and length $v > $max_intsize) {
              if ($allow_bigint) { # from Adam Sussman
                  require Math::BigInt;
                  return Math::BigInt->new($v);
              }
              else {
                  return "$v";
              }
          }
          elsif ($allow_bigint) {
              require Math::BigFloat;
              return Math::BigFloat->new($v);
          }
  
          return 0+$v;
      }
  
  
      sub is_valid_utf8 {
  
          $utf8_len = $_[0] =~ /[\x00-\x7F]/  ? 1
                    : $_[0] =~ /[\xC2-\xDF]/  ? 2
                    : $_[0] =~ /[\xE0-\xEF]/  ? 3
                    : $_[0] =~ /[\xF0-\xF4]/  ? 4
                    : 0
                    ;
  
          return unless $utf8_len;
  
          my $is_valid_utf8 = substr($text, $at - 1, $utf8_len);
  
          return ( $is_valid_utf8 =~ /^(?:
               [\x00-\x7F]
              |[\xC2-\xDF][\x80-\xBF]
              |[\xE0][\xA0-\xBF][\x80-\xBF]
              |[\xE1-\xEC][\x80-\xBF][\x80-\xBF]
              |[\xED][\x80-\x9F][\x80-\xBF]
              |[\xEE-\xEF][\x80-\xBF][\x80-\xBF]
              |[\xF0][\x90-\xBF][\x80-\xBF][\x80-\xBF]
              |[\xF1-\xF3][\x80-\xBF][\x80-\xBF][\x80-\xBF]
              |[\xF4][\x80-\x8F][\x80-\xBF][\x80-\xBF]
          )$/x )  ? $is_valid_utf8 : '';
      }
  
  
      sub decode_error {
          my $error  = shift;
          my $no_rep = shift;
          my $str    = defined $text ? substr($text, $at) : '';
          my $mess   = '';
          my $type   = $] >= 5.008           ? 'U*'
                     : $] <  5.006           ? 'C*'
                     : utf8::is_utf8( $str ) ? 'U*' # 5.6
                     : 'C*'
                     ;
  
          for my $c ( unpack( $type, $str ) ) { # emulate pv_uni_display() ?
              $mess .=  $c == 0x07 ? '\a'
                      : $c == 0x09 ? '\t'
                      : $c == 0x0a ? '\n'
                      : $c == 0x0d ? '\r'
                      : $c == 0x0c ? '\f'
                      : $c <  0x20 ? sprintf('\x{%x}', $c)
                      : $c == 0x5c ? '\\\\'
                      : $c <  0x80 ? chr($c)
                      : sprintf('\x{%x}', $c)
                      ;
              if ( length $mess >= 20 ) {
                  $mess .= '...';
                  last;
              }
          }
  
          unless ( length $mess ) {
              $mess = '(end of string)';
          }
  
          Carp::croak (
              $no_rep ? "$error" : "$error, at character offset $at (before \"$mess\")"
          );
  
      }
  
  
      sub _json_object_hook {
          my $o    = $_[0];
          my @ks = keys %{$o};
  
          if ( $cb_sk_object and @ks == 1 and exists $cb_sk_object->{ $ks[0] } and ref $cb_sk_object->{ $ks[0] } ) {
              my @val = $cb_sk_object->{ $ks[0] }->( $o->{$ks[0]} );
              if (@val == 1) {
                  return $val[0];
              }
          }
  
          my @val = $cb_object->($o) if ($cb_object);
          if (@val == 0 or @val > 1) {
              return $o;
          }
          else {
              return $val[0];
          }
      }
  
  
      sub PP_decode_box {
          {
              text    => $text,
              at      => $at,
              ch      => $ch,
              len     => $len,
              depth   => $depth,
              encoding      => $encoding,
              is_valid_utf8 => $is_valid_utf8,
          };
      }
  
  } # PARSE
  
  
  sub _decode_surrogates { # from perlunicode
      my $uni = 0x10000 + (hex($_[0]) - 0xD800) * 0x400 + (hex($_[1]) - 0xDC00);
      my $un  = pack('U*', $uni);
      utf8::encode( $un );
      return $un;
  }
  
  
  sub _decode_unicode {
      my $un = pack('U', hex shift);
      utf8::encode( $un );
      return $un;
  }
  
  #
  # Setup for various Perl versions (the code from JSON::PP58)
  #
  
  BEGIN {
  
      unless ( defined &utf8::is_utf8 ) {
         require Encode;
         *utf8::is_utf8 = *Encode::is_utf8;
      }
  
      if ( $] >= 5.008 ) {
          *JSON::PP::JSON_PP_encode_ascii      = \&_encode_ascii;
          *JSON::PP::JSON_PP_encode_latin1     = \&_encode_latin1;
          *JSON::PP::JSON_PP_decode_surrogates = \&_decode_surrogates;
          *JSON::PP::JSON_PP_decode_unicode    = \&_decode_unicode;
      }
  
      if ($] >= 5.008 and $] < 5.008003) { # join() in 5.8.0 - 5.8.2 is broken.
          package JSON::PP;
          require subs;
          subs->import('join');
          eval q|
              sub join {
                  return '' if (@_ < 2);
                  my $j   = shift;
                  my $str = shift;
                  for (@_) { $str .= $j . $_; }
                  return $str;
              }
          |;
      }
  
  
      sub JSON::PP::incr_parse {
          local $Carp::CarpLevel = 1;
          ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_parse( @_ );
      }
  
  
      sub JSON::PP::incr_skip {
          ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_skip;
      }
  
  
      sub JSON::PP::incr_reset {
          ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_reset;
      }
  
      eval q{
          sub JSON::PP::incr_text : lvalue {
              $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new;
  
              if ( $_[0]->{_incr_parser}->{incr_parsing} ) {
                  Carp::croak("incr_text can not be called when the incremental parser already started parsing");
              }
              $_[0]->{_incr_parser}->{incr_text};
          }
      } if ( $] >= 5.006 );
  
  } # Setup for various Perl versions (the code from JSON::PP58)
  
  
  ###############################
  # Utilities
  #
  
  BEGIN {
      eval 'require Scalar::Util';
      unless($@){
          *JSON::PP::blessed = \&Scalar::Util::blessed;
          *JSON::PP::reftype = \&Scalar::Util::reftype;
          *JSON::PP::refaddr = \&Scalar::Util::refaddr;
      }
      else{ # This code is from Sclar::Util.
          # warn $@;
          eval 'sub UNIVERSAL::a_sub_not_likely_to_be_here { ref($_[0]) }';
          *JSON::PP::blessed = sub {
              local($@, $SIG{__DIE__}, $SIG{__WARN__});
              ref($_[0]) ? eval { $_[0]->a_sub_not_likely_to_be_here } : undef;
          };
          my %tmap = qw(
              B::NULL   SCALAR
              B::HV     HASH
              B::AV     ARRAY
              B::CV     CODE
              B::IO     IO
              B::GV     GLOB
              B::REGEXP REGEXP
          );
          *JSON::PP::reftype = sub {
              my $r = shift;
  
              return undef unless length(ref($r));
  
              my $t = ref(B::svref_2object($r));
  
              return
                  exists $tmap{$t} ? $tmap{$t}
                : length(ref($$r)) ? 'REF'
                :                    'SCALAR';
          };
          *JSON::PP::refaddr = sub {
            return undef unless length(ref($_[0]));
  
            my $addr;
            if(defined(my $pkg = blessed($_[0]))) {
              $addr .= bless $_[0], 'Scalar::Util::Fake';
              bless $_[0], $pkg;
            }
            else {
              $addr .= $_[0]
            }
  
            $addr =~ /0x(\w+)/;
            local $^W;
            #no warnings 'portable';
            hex($1);
          }
      }
  }
  
  
  # shamely copied and modified from JSON::XS code.
  
  $JSON::PP::true  = do { bless \(my $dummy = 1), "JSON::PP::Boolean" };
  $JSON::PP::false = do { bless \(my $dummy = 0), "JSON::PP::Boolean" };
  
  sub is_bool { defined $_[0] and UNIVERSAL::isa($_[0], "JSON::PP::Boolean"); }
  
  sub true  { $JSON::PP::true  }
  sub false { $JSON::PP::false }
  sub null  { undef; }
  
  ###############################
  
  package JSON::PP::Boolean;
  
  use overload (
     "0+"     => sub { ${$_[0]} },
     "++"     => sub { $_[0] = ${$_[0]} + 1 },
     "--"     => sub { $_[0] = ${$_[0]} - 1 },
     fallback => 1,
  );
  
  
  ###############################
  
  package JSON::PP::IncrParser;
  
  use strict;
  
  use constant INCR_M_WS   => 0; # initial whitespace skipping
  use constant INCR_M_STR  => 1; # inside string
  use constant INCR_M_BS   => 2; # inside backslash
  use constant INCR_M_JSON => 3; # outside anything, count nesting
  use constant INCR_M_C0   => 4;
  use constant INCR_M_C1   => 5;
  
  $JSON::PP::IncrParser::VERSION = '1.01';
  
  my $unpack_format = $] < 5.006 ? 'C*' : 'U*';
  
  sub new {
      my ( $class ) = @_;
  
      bless {
          incr_nest    => 0,
          incr_text    => undef,
          incr_parsing => 0,
          incr_p       => 0,
      }, $class;
  }
  
  
  sub incr_parse {
      my ( $self, $coder, $text ) = @_;
  
      $self->{incr_text} = '' unless ( defined $self->{incr_text} );
  
      if ( defined $text ) {
          if ( utf8::is_utf8( $text ) and !utf8::is_utf8( $self->{incr_text} ) ) {
              utf8::upgrade( $self->{incr_text} ) ;
              utf8::decode( $self->{incr_text} ) ;
          }
          $self->{incr_text} .= $text;
      }
  
  
      my $max_size = $coder->get_max_size;
  
      if ( defined wantarray ) {
  
          $self->{incr_mode} = INCR_M_WS unless defined $self->{incr_mode};
  
          if ( wantarray ) {
              my @ret;
  
              $self->{incr_parsing} = 1;
  
              do {
                  push @ret, $self->_incr_parse( $coder, $self->{incr_text} );
  
                  unless ( !$self->{incr_nest} and $self->{incr_mode} == INCR_M_JSON ) {
                      $self->{incr_mode} = INCR_M_WS if $self->{incr_mode} != INCR_M_STR;
                  }
  
              } until ( length $self->{incr_text} >= $self->{incr_p} );
  
              $self->{incr_parsing} = 0;
  
              return @ret;
          }
          else { # in scalar context
              $self->{incr_parsing} = 1;
              my $obj = $self->_incr_parse( $coder, $self->{incr_text} );
              $self->{incr_parsing} = 0 if defined $obj; # pointed by Martin J. Evans
              return $obj ? $obj : undef; # $obj is an empty string, parsing was completed.
          }
  
      }
  
  }
  
  
  sub _incr_parse {
      my ( $self, $coder, $text, $skip ) = @_;
      my $p = $self->{incr_p};
      my $restore = $p;
  
      my @obj;
      my $len = length $text;
  
      if ( $self->{incr_mode} == INCR_M_WS ) {
          while ( $len > $p ) {
              my $s = substr( $text, $p, 1 );
              $p++ and next if ( 0x20 >= unpack($unpack_format, $s) );
              $self->{incr_mode} = INCR_M_JSON;
              last;
         }
      }
  
      while ( $len > $p ) {
          my $s = substr( $text, $p++, 1 );
  
          if ( $s eq '"' ) {
              if (substr( $text, $p - 2, 1 ) eq '\\' ) {
                  next;
              }
  
              if ( $self->{incr_mode} != INCR_M_STR  ) {
                  $self->{incr_mode} = INCR_M_STR;
              }
              else {
                  $self->{incr_mode} = INCR_M_JSON;
                  unless ( $self->{incr_nest} ) {
                      last;
                  }
              }
          }
  
          if ( $self->{incr_mode} == INCR_M_JSON ) {
  
              if ( $s eq '[' or $s eq '{' ) {
                  if ( ++$self->{incr_nest} > $coder->get_max_depth ) {
                      Carp::croak('json text or perl structure exceeds maximum nesting level (max_depth set too low?)');
                  }
              }
              elsif ( $s eq ']' or $s eq '}' ) {
                  last if ( --$self->{incr_nest} <= 0 );
              }
              elsif ( $s eq '#' ) {
                  while ( $len > $p ) {
                      last if substr( $text, $p++, 1 ) eq "\n";
                  }
              }
  
          }
  
      }
  
      $self->{incr_p} = $p;
  
      return if ( $self->{incr_mode} == INCR_M_STR and not $self->{incr_nest} );
      return if ( $self->{incr_mode} == INCR_M_JSON and $self->{incr_nest} > 0 );
  
      return '' unless ( length substr( $self->{incr_text}, 0, $p ) );
  
      local $Carp::CarpLevel = 2;
  
      $self->{incr_p} = $restore;
      $self->{incr_c} = $p;
  
      my ( $obj, $tail ) = $coder->PP_decode_json( substr( $self->{incr_text}, 0, $p ), 0x10000001 );
  
      $self->{incr_text} = substr( $self->{incr_text}, $p );
      $self->{incr_p} = 0;
  
      return $obj || '';
  }
  
  
  sub incr_text {
      if ( $_[0]->{incr_parsing} ) {
          Carp::croak("incr_text can not be called when the incremental parser already started parsing");
      }
      $_[0]->{incr_text};
  }
  
  
  sub incr_skip {
      my $self  = shift;
      $self->{incr_text} = substr( $self->{incr_text}, $self->{incr_c} );
      $self->{incr_p} = 0;
  }
  
  
  sub incr_reset {
      my $self = shift;
      $self->{incr_text}    = undef;
      $self->{incr_p}       = 0;
      $self->{incr_mode}    = 0;
      $self->{incr_nest}    = 0;
      $self->{incr_parsing} = 0;
  }
  
  ###############################
  
  
  1;
  __END__
  =pod
  
  =head1 NAME
  
  JSON::PP - JSON::XS compatible pure-Perl module.
  
  =head1 SYNOPSIS
  
   use JSON::PP;
  
   # exported functions, they croak on error
   # and expect/generate UTF-8
  
   $utf8_encoded_json_text = encode_json $perl_hash_or_arrayref;
   $perl_hash_or_arrayref  = decode_json $utf8_encoded_json_text;
  
   # OO-interface
  
   $coder = JSON::PP->new->ascii->pretty->allow_nonref;
   
   $json_text   = $json->encode( $perl_scalar );
   $perl_scalar = $json->decode( $json_text );
   
   $pretty_printed = $json->pretty->encode( $perl_scalar ); # pretty-printing
   
   # Note that JSON version 2.0 and above will automatically use
   # JSON::XS or JSON::PP, so you should be able to just:
   
   use JSON;
  
  
  =head1 VERSION
  
      2.27300
  
  L<JSON::XS> 2.27 (~2.30) compatible.
  
  =head1 NOTE
  
  JSON::PP had been inculded in JSON distribution (CPAN module).
  It was a perl core module in Perl 5.14.
  
  =head1 DESCRIPTION
  
  This module is L<JSON::XS> compatible pure Perl module.
  (Perl 5.8 or later is recommended)
  
  JSON::XS is the fastest and most proper JSON module on CPAN.
  It is written by Marc Lehmann in C, so must be compiled and
  installed in the used environment.
  
  JSON::PP is a pure-Perl module and has compatibility to JSON::XS.
  
  
  =head2 FEATURES
  
  =over
  
  =item * correct unicode handling
  
  This module knows how to handle Unicode (depending on Perl version).
  
  See to L<JSON::XS/A FEW NOTES ON UNICODE AND PERL> and L<UNICODE HANDLING ON PERLS>.
  
  
  =item * round-trip integrity
  
  When you serialise a perl data structure using only data types supported
  by JSON and Perl, the deserialised data structure is identical on the Perl
  level. (e.g. the string "2.0" doesn't suddenly become "2" just because
  it looks like a number). There I<are> minor exceptions to this, read the
  MAPPING section below to learn about those.
  
  
  =item * strict checking of JSON correctness
  
  There is no guessing, no generating of illegal JSON texts by default,
  and only JSON is accepted as input by default (the latter is a security feature).
  But when some options are set, loose chcking features are available.
  
  =back
  
  =head1 FUNCTIONAL INTERFACE
  
  Some documents are copied and modified from L<JSON::XS/FUNCTIONAL INTERFACE>.
  
  =head2 encode_json
  
      $json_text = encode_json $perl_scalar
  
  Converts the given Perl data structure to a UTF-8 encoded, binary string.
  
  This function call is functionally identical to:
  
      $json_text = JSON::PP->new->utf8->encode($perl_scalar)
  
  =head2 decode_json
  
      $perl_scalar = decode_json $json_text
  
  The opposite of C<encode_json>: expects an UTF-8 (binary) string and tries
  to parse that as an UTF-8 encoded JSON text, returning the resulting
  reference.
  
  This function call is functionally identical to:
  
      $perl_scalar = JSON::PP->new->utf8->decode($json_text)
  
  =head2 JSON::PP::is_bool
  
      $is_boolean = JSON::PP::is_bool($scalar)
  
  Returns true if the passed scalar represents either JSON::PP::true or
  JSON::PP::false, two constants that act like C<1> and C<0> respectively
  and are also used to represent JSON C<true> and C<false> in Perl strings.
  
  =head2 JSON::PP::true
  
  Returns JSON true value which is blessed object.
  It C<isa> JSON::PP::Boolean object.
  
  =head2 JSON::PP::false
  
  Returns JSON false value which is blessed object.
  It C<isa> JSON::PP::Boolean object.
  
  =head2 JSON::PP::null
  
  Returns C<undef>.
  
  See L<MAPPING>, below, for more information on how JSON values are mapped to
  Perl.
  
  
  =head1 HOW DO I DECODE A DATA FROM OUTER AND ENCODE TO OUTER
  
  This section supposes that your perl vresion is 5.8 or later.
  
  If you know a JSON text from an outer world - a network, a file content, and so on,
  is encoded in UTF-8, you should use C<decode_json> or C<JSON> module object
  with C<utf8> enable. And the decoded result will contain UNICODE characters.
  
    # from network
    my $json        = JSON::PP->new->utf8;
    my $json_text   = CGI->new->param( 'json_data' );
    my $perl_scalar = $json->decode( $json_text );
    
    # from file content
    local $/;
    open( my $fh, '<', 'json.data' );
    $json_text   = <$fh>;
    $perl_scalar = decode_json( $json_text );
  
  If an outer data is not encoded in UTF-8, firstly you should C<decode> it.
  
    use Encode;
    local $/;
    open( my $fh, '<', 'json.data' );
    my $encoding = 'cp932';
    my $unicode_json_text = decode( $encoding, <$fh> ); # UNICODE
    
    # or you can write the below code.
    #
    # open( my $fh, "<:encoding($encoding)", 'json.data' );
    # $unicode_json_text = <$fh>;
  
  In this case, C<$unicode_json_text> is of course UNICODE string.
  So you B<cannot> use C<decode_json> nor C<JSON> module object with C<utf8> enable.
  Instead of them, you use C<JSON> module object with C<utf8> disable.
  
    $perl_scalar = $json->utf8(0)->decode( $unicode_json_text );
  
  Or C<encode 'utf8'> and C<decode_json>:
  
    $perl_scalar = decode_json( encode( 'utf8', $unicode_json_text ) );
    # this way is not efficient.
  
  And now, you want to convert your C<$perl_scalar> into JSON data and
  send it to an outer world - a network or a file content, and so on.
  
  Your data usually contains UNICODE strings and you want the converted data to be encoded
  in UTF-8, you should use C<encode_json> or C<JSON> module object with C<utf8> enable.
  
    print encode_json( $perl_scalar ); # to a network? file? or display?
    # or
    print $json->utf8->encode( $perl_scalar );
  
  If C<$perl_scalar> does not contain UNICODE but C<$encoding>-encoded strings
  for some reason, then its characters are regarded as B<latin1> for perl
  (because it does not concern with your $encoding).
  You B<cannot> use C<encode_json> nor C<JSON> module object with C<utf8> enable.
  Instead of them, you use C<JSON> module object with C<utf8> disable.
  Note that the resulted text is a UNICODE string but no problem to print it.
  
    # $perl_scalar contains $encoding encoded string values
    $unicode_json_text = $json->utf8(0)->encode( $perl_scalar );
    # $unicode_json_text consists of characters less than 0x100
    print $unicode_json_text;
  
  Or C<decode $encoding> all string values and C<encode_json>:
  
    $perl_scalar->{ foo } = decode( $encoding, $perl_scalar->{ foo } );
    # ... do it to each string values, then encode_json
    $json_text = encode_json( $perl_scalar );
  
  This method is a proper way but probably not efficient.
  
  See to L<Encode>, L<perluniintro>.
  
  
  =head1 METHODS
  
  Basically, check to L<JSON> or L<JSON::XS>.
  
  =head2 new
  
      $json = JSON::PP->new
  
  Rturns a new JSON::PP object that can be used to de/encode JSON
  strings.
  
  All boolean flags described below are by default I<disabled>.
  
  The mutators for flags all return the JSON object again and thus calls can
  be chained:
  
     my $json = JSON::PP->new->utf8->space_after->encode({a => [1,2]})
     => {"a": [1, 2]}
  
  =head2 ascii
  
      $json = $json->ascii([$enable])
      
      $enabled = $json->get_ascii
  
  If $enable is true (or missing), then the encode method will not generate characters outside
  the code range 0..127. Any Unicode characters outside that range will be escaped using either
  a single \uXXXX or a double \uHHHH\uLLLLL escape sequence, as per RFC4627.
  (See to L<JSON::XS/OBJECT-ORIENTED INTERFACE>).
  
  In Perl 5.005, there is no character having high value (more than 255).
  See to L<UNICODE HANDLING ON PERLS>.
  
  If $enable is false, then the encode method will not escape Unicode characters unless
  required by the JSON syntax or other flags. This results in a faster and more compact format.
  
    JSON::PP->new->ascii(1)->encode([chr 0x10401])
    => ["\ud801\udc01"]
  
  =head2 latin1
  
      $json = $json->latin1([$enable])
      
      $enabled = $json->get_latin1
  
  If $enable is true (or missing), then the encode method will encode the resulting JSON
  text as latin1 (or iso-8859-1), escaping any characters outside the code range 0..255.
  
  If $enable is false, then the encode method will not escape Unicode characters
  unless required by the JSON syntax or other flags.
  
    JSON::XS->new->latin1->encode (["\x{89}\x{abc}"]
    => ["\x{89}\\u0abc"]    # (perl syntax, U+abc escaped, U+89 not)
  
  See to L<UNICODE HANDLING ON PERLS>.
  
  =head2 utf8
  
      $json = $json->utf8([$enable])
      
      $enabled = $json->get_utf8
  
  If $enable is true (or missing), then the encode method will encode the JSON result
  into UTF-8, as required by many protocols, while the decode method expects to be handled
  an UTF-8-encoded string. Please note that UTF-8-encoded strings do not contain any
  characters outside the range 0..255, they are thus useful for bytewise/binary I/O.
  
  (In Perl 5.005, any character outside the range 0..255 does not exist.
  See to L<UNICODE HANDLING ON PERLS>.)
  
  In future versions, enabling this option might enable autodetection of the UTF-16 and UTF-32
  encoding families, as described in RFC4627.
  
  If $enable is false, then the encode method will return the JSON string as a (non-encoded)
  Unicode string, while decode expects thus a Unicode string. Any decoding or encoding
  (e.g. to UTF-8 or UTF-16) needs to be done yourself, e.g. using the Encode module.
  
  Example, output UTF-16BE-encoded JSON:
  
    use Encode;
    $jsontext = encode "UTF-16BE", JSON::PP->new->encode ($object);
  
  Example, decode UTF-32LE-encoded JSON:
  
    use Encode;
    $object = JSON::PP->new->decode (decode "UTF-32LE", $jsontext);
  
  
  =head2 pretty
  
      $json = $json->pretty([$enable])
  
  This enables (or disables) all of the C<indent>, C<space_before> and
  C<space_after> flags in one call to generate the most readable
  (or most compact) form possible.
  
  Equivalent to:
  
     $json->indent->space_before->space_after
  
  =head2 indent
  
      $json = $json->indent([$enable])
      
      $enabled = $json->get_indent
  
  The default indent space length is three.
  You can use C<indent_length> to change the length.
  
  =head2 space_before
  
      $json = $json->space_before([$enable])
      
      $enabled = $json->get_space_before
  
  If C<$enable> is true (or missing), then the C<encode> method will add an extra
  optional space before the C<:> separating keys from values in JSON objects.
  
  If C<$enable> is false, then the C<encode> method will not add any extra
  space at those places.
  
  This setting has no effect when decoding JSON texts.
  
  Example, space_before enabled, space_after and indent disabled:
  
     {"key" :"value"}
  
  =head2 space_after
  
      $json = $json->space_after([$enable])
      
      $enabled = $json->get_space_after
  
  If C<$enable> is true (or missing), then the C<encode> method will add an extra
  optional space after the C<:> separating keys from values in JSON objects
  and extra whitespace after the C<,> separating key-value pairs and array
  members.
  
  If C<$enable> is false, then the C<encode> method will not add any extra
  space at those places.
  
  This setting has no effect when decoding JSON texts.
  
  Example, space_before and indent disabled, space_after enabled:
  
     {"key": "value"}
  
  =head2 relaxed
  
      $json = $json->relaxed([$enable])
      
      $enabled = $json->get_relaxed
  
  If C<$enable> is true (or missing), then C<decode> will accept some
  extensions to normal JSON syntax (see below). C<encode> will not be
  affected in anyway. I<Be aware that this option makes you accept invalid
  JSON texts as if they were valid!>. I suggest only to use this option to
  parse application-specific files written by humans (configuration files,
  resource files etc.)
  
  If C<$enable> is false (the default), then C<decode> will only accept
  valid JSON texts.
  
  Currently accepted extensions are:
  
  =over 4
  
  =item * list items can have an end-comma
  
  JSON I<separates> array elements and key-value pairs with commas. This
  can be annoying if you write JSON texts manually and want to be able to
  quickly append elements, so this extension accepts comma at the end of
  such items not just between them:
  
     [
        1,
        2, <- this comma not normally allowed
     ]
     {
        "k1": "v1",
        "k2": "v2", <- this comma not normally allowed
     }
  
  =item * shell-style '#'-comments
  
  Whenever JSON allows whitespace, shell-style comments are additionally
  allowed. They are terminated by the first carriage-return or line-feed
  character, after which more white-space and comments are allowed.
  
    [
       1, # this comment not allowed in JSON
          # neither this one...
    ]
  
  =back
  
  =head2 canonical
  
      $json = $json->canonical([$enable])
      
      $enabled = $json->get_canonical
  
  If C<$enable> is true (or missing), then the C<encode> method will output JSON objects
  by sorting their keys. This is adding a comparatively high overhead.
  
  If C<$enable> is false, then the C<encode> method will output key-value
  pairs in the order Perl stores them (which will likely change between runs
  of the same script).
  
  This option is useful if you want the same data structure to be encoded as
  the same JSON text (given the same overall settings). If it is disabled,
  the same hash might be encoded differently even if contains the same data,
  as key-value pairs have no inherent ordering in Perl.
  
  This setting has no effect when decoding JSON texts.
  
  If you want your own sorting routine, you can give a code referece
  or a subroutine name to C<sort_by>. See to C<JSON::PP OWN METHODS>.
  
  =head2 allow_nonref
  
      $json = $json->allow_nonref([$enable])
      
      $enabled = $json->get_allow_nonref
  
  If C<$enable> is true (or missing), then the C<encode> method can convert a
  non-reference into its corresponding string, number or null JSON value,
  which is an extension to RFC4627. Likewise, C<decode> will accept those JSON
  values instead of croaking.
  
  If C<$enable> is false, then the C<encode> method will croak if it isn't
  passed an arrayref or hashref, as JSON texts must either be an object
  or array. Likewise, C<decode> will croak if given something that is not a
  JSON object or array.
  
     JSON::PP->new->allow_nonref->encode ("Hello, World!")
     => "Hello, World!"
  
  =head2 allow_unknown
  
      $json = $json->allow_unknown ([$enable])
      
      $enabled = $json->get_allow_unknown
  
  If $enable is true (or missing), then "encode" will *not* throw an
  exception when it encounters values it cannot represent in JSON (for
  example, filehandles) but instead will encode a JSON "null" value.
  Note that blessed objects are not included here and are handled
  separately by c<allow_nonref>.
  
  If $enable is false (the default), then "encode" will throw an
  exception when it encounters anything it cannot encode as JSON.
  
  This option does not affect "decode" in any way, and it is
  recommended to leave it off unless you know your communications
  partner.
  
  =head2 allow_blessed
  
      $json = $json->allow_blessed([$enable])
      
      $enabled = $json->get_allow_blessed
  
  If C<$enable> is true (or missing), then the C<encode> method will not
  barf when it encounters a blessed reference. Instead, the value of the
  B<convert_blessed> option will decide whether C<null> (C<convert_blessed>
  disabled or no C<TO_JSON> method found) or a representation of the
  object (C<convert_blessed> enabled and C<TO_JSON> method found) is being
  encoded. Has no effect on C<decode>.
  
  If C<$enable> is false (the default), then C<encode> will throw an
  exception when it encounters a blessed object.
  
  =head2 convert_blessed
  
      $json = $json->convert_blessed([$enable])
      
      $enabled = $json->get_convert_blessed
  
  If C<$enable> is true (or missing), then C<encode>, upon encountering a
  blessed object, will check for the availability of the C<TO_JSON> method
  on the object's class. If found, it will be called in scalar context
  and the resulting scalar will be encoded instead of the object. If no
  C<TO_JSON> method is found, the value of C<allow_blessed> will decide what
  to do.
  
  The C<TO_JSON> method may safely call die if it wants. If C<TO_JSON>
  returns other blessed objects, those will be handled in the same
  way. C<TO_JSON> must take care of not causing an endless recursion cycle
  (== crash) in this case. The name of C<TO_JSON> was chosen because other
  methods called by the Perl core (== not by the user of the object) are
  usually in upper case letters and to avoid collisions with the C<to_json>
  function or method.
  
  This setting does not yet influence C<decode> in any way.
  
  If C<$enable> is false, then the C<allow_blessed> setting will decide what
  to do when a blessed object is found.
  
  =head2 filter_json_object
  
      $json = $json->filter_json_object([$coderef])
  
  When C<$coderef> is specified, it will be called from C<decode> each
  time it decodes a JSON object. The only argument passed to the coderef
  is a reference to the newly-created hash. If the code references returns
  a single scalar (which need not be a reference), this value
  (i.e. a copy of that scalar to avoid aliasing) is inserted into the
  deserialised data structure. If it returns an empty list
  (NOTE: I<not> C<undef>, which is a valid scalar), the original deserialised
  hash will be inserted. This setting can slow down decoding considerably.
  
  When C<$coderef> is omitted or undefined, any existing callback will
  be removed and C<decode> will not change the deserialised hash in any
  way.
  
  Example, convert all JSON objects into the integer 5:
  
     my $js = JSON::PP->new->filter_json_object (sub { 5 });
     # returns [5]
     $js->decode ('[{}]'); # the given subroutine takes a hash reference.
     # throw an exception because allow_nonref is not enabled
     # so a lone 5 is not allowed.
     $js->decode ('{"a":1, "b":2}');
  
  =head2 filter_json_single_key_object
  
      $json = $json->filter_json_single_key_object($key [=> $coderef])
  
  Works remotely similar to C<filter_json_object>, but is only called for
  JSON objects having a single key named C<$key>.
  
  This C<$coderef> is called before the one specified via
  C<filter_json_object>, if any. It gets passed the single value in the JSON
  object. If it returns a single value, it will be inserted into the data
  structure. If it returns nothing (not even C<undef> but the empty list),
  the callback from C<filter_json_object> will be called next, as if no
  single-key callback were specified.
  
  If C<$coderef> is omitted or undefined, the corresponding callback will be
  disabled. There can only ever be one callback for a given key.
  
  As this callback gets called less often then the C<filter_json_object>
  one, decoding speed will not usually suffer as much. Therefore, single-key
  objects make excellent targets to serialise Perl objects into, especially
  as single-key JSON objects are as close to the type-tagged value concept
  as JSON gets (it's basically an ID/VALUE tuple). Of course, JSON does not
  support this in any way, so you need to make sure your data never looks
  like a serialised Perl hash.
  
  Typical names for the single object key are C<__class_whatever__>, or
  C<$__dollars_are_rarely_used__$> or C<}ugly_brace_placement>, or even
  things like C<__class_md5sum(classname)__>, to reduce the risk of clashing
  with real hashes.
  
  Example, decode JSON objects of the form C<< { "__widget__" => <id> } >>
  into the corresponding C<< $WIDGET{<id>} >> object:
  
     # return whatever is in $WIDGET{5}:
     JSON::PP
        ->new
        ->filter_json_single_key_object (__widget__ => sub {
              $WIDGET{ $_[0] }
           })
        ->decode ('{"__widget__": 5')
  
     # this can be used with a TO_JSON method in some "widget" class
     # for serialisation to json:
     sub WidgetBase::TO_JSON {
        my ($self) = @_;
  
        unless ($self->{id}) {
           $self->{id} = ..get..some..id..;
           $WIDGET{$self->{id}} = $self;
        }
  
        { __widget__ => $self->{id} }
     }
  
  =head2 shrink
  
      $json = $json->shrink([$enable])
      
      $enabled = $json->get_shrink
  
  In JSON::XS, this flag resizes strings generated by either
  C<encode> or C<decode> to their minimum size possible.
  It will also try to downgrade any strings to octet-form if possible.
  
  In JSON::PP, it is noop about resizing strings but tries
  C<utf8::downgrade> to the returned string by C<encode>.
  See to L<utf8>.
  
  See to L<JSON::XS/OBJECT-ORIENTED INTERFACE>
  
  =head2 max_depth
  
      $json = $json->max_depth([$maximum_nesting_depth])
      
      $max_depth = $json->get_max_depth
  
  Sets the maximum nesting level (default C<512>) accepted while encoding
  or decoding. If a higher nesting level is detected in JSON text or a Perl
  data structure, then the encoder and decoder will stop and croak at that
  point.
  
  Nesting level is defined by number of hash- or arrayrefs that the encoder
  needs to traverse to reach a given point or the number of C<{> or C<[>
  characters without their matching closing parenthesis crossed to reach a
  given character in a string.
  
  If no argument is given, the highest possible setting will be used, which
  is rarely useful.
  
  See L<JSON::XS/SSECURITY CONSIDERATIONS> for more info on why this is useful.
  
  When a large value (100 or more) was set and it de/encodes a deep nested object/text,
  it may raise a warning 'Deep recursion on subroutin' at the perl runtime phase.
  
  =head2 max_size
  
      $json = $json->max_size([$maximum_string_size])
      
      $max_size = $json->get_max_size
  
  Set the maximum length a JSON text may have (in bytes) where decoding is
  being attempted. The default is C<0>, meaning no limit. When C<decode>
  is called on a string that is longer then this many bytes, it will not
  attempt to decode the string but throw an exception. This setting has no
  effect on C<encode> (yet).
  
  If no argument is given, the limit check will be deactivated (same as when
  C<0> is specified).
  
  See L<JSON::XS/SSECURITY CONSIDERATIONS> for more info on why this is useful.
  
  =head2 encode
  
      $json_text = $json->encode($perl_scalar)
  
  Converts the given Perl data structure (a simple scalar or a reference
  to a hash or array) to its JSON representation. Simple scalars will be
  converted into JSON string or number sequences, while references to arrays
  become JSON arrays and references to hashes become JSON objects. Undefined
  Perl values (e.g. C<undef>) become JSON C<null> values.
  References to the integers C<0> and C<1> are converted into C<true> and C<false>.
  
  =head2 decode
  
      $perl_scalar = $json->decode($json_text)
  
  The opposite of C<encode>: expects a JSON text and tries to parse it,
  returning the resulting simple scalar or reference. Croaks on error.
  
  JSON numbers and strings become simple Perl scalars. JSON arrays become
  Perl arrayrefs and JSON objects become Perl hashrefs. C<true> becomes
  C<1> (C<JSON::true>), C<false> becomes C<0> (C<JSON::false>) and
  C<null> becomes C<undef>.
  
  =head2 decode_prefix
  
      ($perl_scalar, $characters) = $json->decode_prefix($json_text)
  
  This works like the C<decode> method, but instead of raising an exception
  when there is trailing garbage after the first JSON object, it will
  silently stop parsing there and return the number of characters consumed
  so far.
  
     JSON->new->decode_prefix ("[1] the tail")
     => ([], 3)
  
  =head1 INCREMENTAL PARSING
  
  Most of this section are copied and modified from L<JSON::XS/INCREMENTAL PARSING>.
  
  In some cases, there is the need for incremental parsing of JSON texts.
  This module does allow you to parse a JSON stream incrementally.
  It does so by accumulating text until it has a full JSON object, which
  it then can decode. This process is similar to using C<decode_prefix>
  to see if a full JSON object is available, but is much more efficient
  (and can be implemented with a minimum of method calls).
  
  This module will only attempt to parse the JSON text once it is sure it
  has enough text to get a decisive result, using a very simple but
  truly incremental parser. This means that it sometimes won't stop as
  early as the full parser, for example, it doesn't detect parenthese
  mismatches. The only thing it guarantees is that it starts decoding as
  soon as a syntactically valid JSON text has been seen. This means you need
  to set resource limits (e.g. C<max_size>) to ensure the parser will stop
  parsing in the presence if syntax errors.
  
  The following methods implement this incremental parser.
  
  =head2 incr_parse
  
      $json->incr_parse( [$string] ) # void context
      
      $obj_or_undef = $json->incr_parse( [$string] ) # scalar context
      
      @obj_or_empty = $json->incr_parse( [$string] ) # list context
  
  This is the central parsing function. It can both append new text and
  extract objects from the stream accumulated so far (both of these
  functions are optional).
  
  If C<$string> is given, then this string is appended to the already
  existing JSON fragment stored in the C<$json> object.
  
  After that, if the function is called in void context, it will simply
  return without doing anything further. This can be used to add more text
  in as many chunks as you want.
  
  If the method is called in scalar context, then it will try to extract
  exactly I<one> JSON object. If that is successful, it will return this
  object, otherwise it will return C<undef>. If there is a parse error,
  this method will croak just as C<decode> would do (one can then use
  C<incr_skip> to skip the errornous part). This is the most common way of
  using the method.
  
  And finally, in list context, it will try to extract as many objects
  from the stream as it can find and return them, or the empty list
  otherwise. For this to work, there must be no separators between the JSON
  objects or arrays, instead they must be concatenated back-to-back. If
  an error occurs, an exception will be raised as in the scalar context
  case. Note that in this case, any previously-parsed JSON texts will be
  lost.
  
  Example: Parse some JSON arrays/objects in a given string and return them.
  
      my @objs = JSON->new->incr_parse ("[5][7][1,2]");
  
  =head2 incr_text
  
      $lvalue_string = $json->incr_text
  
  This method returns the currently stored JSON fragment as an lvalue, that
  is, you can manipulate it. This I<only> works when a preceding call to
  C<incr_parse> in I<scalar context> successfully returned an object. Under
  all other circumstances you must not call this function (I mean it.
  although in simple tests it might actually work, it I<will> fail under
  real world conditions). As a special exception, you can also call this
  method before having parsed anything.
  
  This function is useful in two cases: a) finding the trailing text after a
  JSON object or b) parsing multiple JSON objects separated by non-JSON text
  (such as commas).
  
      $json->incr_text =~ s/\s*,\s*//;
  
  In Perl 5.005, C<lvalue> attribute is not available.
  You must write codes like the below:
  
      $string = $json->incr_text;
      $string =~ s/\s*,\s*//;
      $json->incr_text( $string );
  
  =head2 incr_skip
  
      $json->incr_skip
  
  This will reset the state of the incremental parser and will remove the
  parsed text from the input buffer. This is useful after C<incr_parse>
  died, in which case the input buffer and incremental parser state is left
  unchanged, to skip the text parsed so far and to reset the parse state.
  
  =head2 incr_reset
  
      $json->incr_reset
  
  This completely resets the incremental parser, that is, after this call,
  it will be as if the parser had never parsed anything.
  
  This is useful if you want ot repeatedly parse JSON objects and want to
  ignore any trailing data, which means you have to reset the parser after
  each successful decode.
  
  See to L<JSON::XS/INCREMENTAL PARSING> for examples.
  
  
  =head1 JSON::PP OWN METHODS
  
  =head2 allow_singlequote
  
      $json = $json->allow_singlequote([$enable])
  
  If C<$enable> is true (or missing), then C<decode> will accept
  JSON strings quoted by single quotations that are invalid JSON
  format.
  
      $json->allow_singlequote->decode({"foo":'bar'});
      $json->allow_singlequote->decode({'foo':"bar"});
      $json->allow_singlequote->decode({'foo':'bar'});
  
  As same as the C<relaxed> option, this option may be used to parse
  application-specific files written by humans.
  
  
  =head2 allow_barekey
  
      $json = $json->allow_barekey([$enable])
  
  If C<$enable> is true (or missing), then C<decode> will accept
  bare keys of JSON object that are invalid JSON format.
  
  As same as the C<relaxed> option, this option may be used to parse
  application-specific files written by humans.
  
      $json->allow_barekey->decode('{foo:"bar"}');
  
  =head2 allow_bignum
  
      $json = $json->allow_bignum([$enable])
  
  If C<$enable> is true (or missing), then C<decode> will convert
  the big integer Perl cannot handle as integer into a L<Math::BigInt>
  object and convert a floating number (any) into a L<Math::BigFloat>.
  
  On the contary, C<encode> converts C<Math::BigInt> objects and C<Math::BigFloat>
  objects into JSON numbers with C<allow_blessed> enable.
  
     $json->allow_nonref->allow_blessed->allow_bignum;
     $bigfloat = $json->decode('2.000000000000000000000000001');
     print $json->encode($bigfloat);
     # => 2.000000000000000000000000001
  
  See to L<JSON::XS/MAPPING> aboout the normal conversion of JSON number.
  
  =head2 loose
  
      $json = $json->loose([$enable])
  
  The unescaped [\x00-\x1f\x22\x2f\x5c] strings are invalid in JSON strings
  and the module doesn't allow to C<decode> to these (except for \x2f).
  If C<$enable> is true (or missing), then C<decode>  will accept these
  unescaped strings.
  
      $json->loose->decode(qq|["abc
                                     def"]|);
  
  See L<JSON::XS/SSECURITY CONSIDERATIONS>.
  
  =head2 escape_slash
  
      $json = $json->escape_slash([$enable])
  
  According to JSON Grammar, I<slash> (U+002F) is escaped. But default
  JSON::PP (as same as JSON::XS) encodes strings without escaping slash.
  
  If C<$enable> is true (or missing), then C<encode> will escape slashes.
  
  =head2 indent_length
  
      $json = $json->indent_length($length)
  
  JSON::XS indent space length is 3 and cannot be changed.
  JSON::PP set the indent space length with the given $length.
  The default is 3. The acceptable range is 0 to 15.
  
  =head2 sort_by
  
      $json = $json->sort_by($function_name)
      $json = $json->sort_by($subroutine_ref)
  
  If $function_name or $subroutine_ref are set, its sort routine are used
  in encoding JSON objects.
  
     $js = $pc->sort_by(sub { $JSON::PP::a cmp $JSON::PP::b })->encode($obj);
     # is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|);
  
     $js = $pc->sort_by('own_sort')->encode($obj);
     # is($js, q|{"a":1,"b":2,"c":3,"d":4,"e":5,"f":6,"g":7,"h":8,"i":9}|);
  
     sub JSON::PP::own_sort { $JSON::PP::a cmp $JSON::PP::b }
  
  As the sorting routine runs in the JSON::PP scope, the given
  subroutine name and the special variables C<$a>, C<$b> will begin
  'JSON::PP::'.
  
  If $integer is set, then the effect is same as C<canonical> on.
  
  =head1 INTERNAL
  
  For developers.
  
  =over
  
  =item PP_encode_box
  
  Returns
  
          {
              depth        => $depth,
              indent_count => $indent_count,
          }
  
  
  =item PP_decode_box
  
  Returns
  
          {
              text    => $text,
              at      => $at,
              ch      => $ch,
              len     => $len,
              depth   => $depth,
              encoding      => $encoding,
              is_valid_utf8 => $is_valid_utf8,
          };
  
  =back
  
  =head1 MAPPING
  
  This section is copied from JSON::XS and modified to C<JSON::PP>.
  JSON::XS and JSON::PP mapping mechanisms are almost equivalent.
  
  See to L<JSON::XS/MAPPING>.
  
  =head2 JSON -> PERL
  
  =over 4
  
  =item object
  
  A JSON object becomes a reference to a hash in Perl. No ordering of object
  keys is preserved (JSON does not preserver object key ordering itself).
  
  =item array
  
  A JSON array becomes a reference to an array in Perl.
  
  =item string
  
  A JSON string becomes a string scalar in Perl - Unicode codepoints in JSON
  are represented by the same codepoints in the Perl string, so no manual
  decoding is necessary.
  
  =item number
  
  A JSON number becomes either an integer, numeric (floating point) or
  string scalar in perl, depending on its range and any fractional parts. On
  the Perl level, there is no difference between those as Perl handles all
  the conversion details, but an integer may take slightly less memory and
  might represent more values exactly than floating point numbers.
  
  If the number consists of digits only, C<JSON> will try to represent
  it as an integer value. If that fails, it will try to represent it as
  a numeric (floating point) value if that is possible without loss of
  precision. Otherwise it will preserve the number as a string value (in
  which case you lose roundtripping ability, as the JSON number will be
  re-encoded toa JSON string).
  
  Numbers containing a fractional or exponential part will always be
  represented as numeric (floating point) values, possibly at a loss of
  precision (in which case you might lose perfect roundtripping ability, but
  the JSON number will still be re-encoded as a JSON number).
  
  Note that precision is not accuracy - binary floating point values cannot
  represent most decimal fractions exactly, and when converting from and to
  floating point, C<JSON> only guarantees precision up to but not including
  the leats significant bit.
  
  When C<allow_bignum> is enable, the big integers 
  and the numeric can be optionally converted into L<Math::BigInt> and
  L<Math::BigFloat> objects.
  
  =item true, false
  
  These JSON atoms become C<JSON::PP::true> and C<JSON::PP::false>,
  respectively. They are overloaded to act almost exactly like the numbers
  C<1> and C<0>. You can check wether a scalar is a JSON boolean by using
  the C<JSON::is_bool> function.
  
     print JSON::PP::true . "\n";
      => true
     print JSON::PP::true + 1;
      => 1
  
     ok(JSON::true eq  '1');
     ok(JSON::true == 1);
  
  C<JSON> will install these missing overloading features to the backend modules.
  
  
  =item null
  
  A JSON null atom becomes C<undef> in Perl.
  
  C<JSON::PP::null> returns C<unddef>.
  
  =back
  
  
  =head2 PERL -> JSON
  
  The mapping from Perl to JSON is slightly more difficult, as Perl is a
  truly typeless language, so we can only guess which JSON type is meant by
  a Perl value.
  
  =over 4
  
  =item hash references
  
  Perl hash references become JSON objects. As there is no inherent ordering
  in hash keys (or JSON objects), they will usually be encoded in a
  pseudo-random order that can change between runs of the same program but
  stays generally the same within a single run of a program. C<JSON>
  optionally sort the hash keys (determined by the I<canonical> flag), so
  the same datastructure will serialise to the same JSON text (given same
  settings and version of JSON::XS), but this incurs a runtime overhead
  and is only rarely useful, e.g. when you want to compare some JSON text
  against another for equality.
  
  
  =item array references
  
  Perl array references become JSON arrays.
  
  =item other references
  
  Other unblessed references are generally not allowed and will cause an
  exception to be thrown, except for references to the integers C<0> and
  C<1>, which get turned into C<false> and C<true> atoms in JSON. You can
  also use C<JSON::false> and C<JSON::true> to improve readability.
  
     to_json [\0,JSON::PP::true]      # yields [false,true]
  
  =item JSON::PP::true, JSON::PP::false, JSON::PP::null
  
  These special values become JSON true and JSON false values,
  respectively. You can also use C<\1> and C<\0> directly if you want.
  
  JSON::PP::null returns C<undef>.
  
  =item blessed objects
  
  Blessed objects are not directly representable in JSON. See the
  C<allow_blessed> and C<convert_blessed> methods on various options on
  how to deal with this: basically, you can choose between throwing an
  exception, encoding the reference as if it weren't blessed, or provide
  your own serialiser method.
  
  See to L<convert_blessed>.
  
  =item simple scalars
  
  Simple Perl scalars (any scalar that is not a reference) are the most
  difficult objects to encode: JSON::XS and JSON::PP will encode undefined scalars as
  JSON C<null> values, scalars that have last been used in a string context
  before encoding as JSON strings, and anything else as number value:
  
     # dump as number
     encode_json [2]                      # yields [2]
     encode_json [-3.0e17]                # yields [-3e+17]
     my $value = 5; encode_json [$value]  # yields [5]
  
     # used as string, so dump as string
     print $value;
     encode_json [$value]                 # yields ["5"]
  
     # undef becomes null
     encode_json [undef]                  # yields [null]
  
  You can force the type to be a string by stringifying it:
  
     my $x = 3.1; # some variable containing a number
     "$x";        # stringified
     $x .= "";    # another, more awkward way to stringify
     print $x;    # perl does it for you, too, quite often
  
  You can force the type to be a number by numifying it:
  
     my $x = "3"; # some variable containing a string
     $x += 0;     # numify it, ensuring it will be dumped as a number
     $x *= 1;     # same thing, the choise is yours.
  
  You can not currently force the type in other, less obscure, ways.
  
  Note that numerical precision has the same meaning as under Perl (so
  binary to decimal conversion follows the same rules as in Perl, which
  can differ to other languages). Also, your perl interpreter might expose
  extensions to the floating point numbers of your platform, such as
  infinities or NaN's - these cannot be represented in JSON, and it is an
  error to pass those in.
  
  =item Big Number
  
  When C<allow_bignum> is enable, 
  C<encode> converts C<Math::BigInt> objects and C<Math::BigFloat>
  objects into JSON numbers.
  
  
  =back
  
  =head1 UNICODE HANDLING ON PERLS
  
  If you do not know about Unicode on Perl well,
  please check L<JSON::XS/A FEW NOTES ON UNICODE AND PERL>.
  
  =head2 Perl 5.8 and later
  
  Perl can handle Unicode and the JSON::PP de/encode methods also work properly.
  
      $json->allow_nonref->encode(chr hex 3042);
      $json->allow_nonref->encode(chr hex 12345);
  
  Reuturns C<"\u3042"> and C<"\ud808\udf45"> respectively.
  
      $json->allow_nonref->decode('"\u3042"');
      $json->allow_nonref->decode('"\ud808\udf45"');
  
  Returns UTF-8 encoded strings with UTF8 flag, regarded as C<U+3042> and C<U+12345>.
  
  Note that the versions from Perl 5.8.0 to 5.8.2, Perl built-in C<join> was broken,
  so JSON::PP wraps the C<join> with a subroutine. Thus JSON::PP works slow in the versions.
  
  
  =head2 Perl 5.6
  
  Perl can handle Unicode and the JSON::PP de/encode methods also work.
  
  =head2 Perl 5.005
  
  Perl 5.005 is a byte sementics world -- all strings are sequences of bytes.
  That means the unicode handling is not available.
  
  In encoding,
  
      $json->allow_nonref->encode(chr hex 3042);  # hex 3042 is 12354.
      $json->allow_nonref->encode(chr hex 12345); # hex 12345 is 74565.
  
  Returns C<B> and C<E>, as C<chr> takes a value more than 255, it treats
  as C<$value % 256>, so the above codes are equivalent to :
  
      $json->allow_nonref->encode(chr 66);
      $json->allow_nonref->encode(chr 69);
  
  In decoding,
  
      $json->decode('"\u00e3\u0081\u0082"');
  
  The returned is a byte sequence C<0xE3 0x81 0x82> for UTF-8 encoded
  japanese character (C<HIRAGANA LETTER A>).
  And if it is represented in Unicode code point, C<U+3042>.
  
  Next, 
  
      $json->decode('"\u3042"');
  
  We ordinary expect the returned value is a Unicode character C<U+3042>.
  But here is 5.005 world. This is C<0xE3 0x81 0x82>.
  
      $json->decode('"\ud808\udf45"');
  
  This is not a character C<U+12345> but bytes - C<0xf0 0x92 0x8d 0x85>.
  
  
  =head1 TODO
  
  =over
  
  =item speed
  
  =item memory saving
  
  =back
  
  
  =head1 SEE ALSO
  
  Most of the document are copied and modified from JSON::XS doc.
  
  L<JSON::XS>
  
  RFC4627 (L<http://www.ietf.org/rfc/rfc4627.txt>)
  
  =head1 AUTHOR
  
  Makamaka Hannyaharamitu, E<lt>makamaka[at]cpan.orgE<gt>
  
  
  =head1 COPYRIGHT AND LICENSE
  
  Copyright 2007-2014 by Makamaka Hannyaharamitu
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =cut
JSON_PP

    $main::fatpacked{"JSON/PP/Boolean.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'JSON_PP_BOOLEAN';
  =head1 NAME
  
  JSON::PP::Boolean - dummy module providing JSON::PP::Boolean
  
  =head1 SYNOPSIS
  
   # do not "use" yourself
  
  =head1 DESCRIPTION
  
  This module exists only to provide overload resolution for Storable and similar modules. See
  L<JSON::PP> for more info about this class.
  
  =cut
  
  use JSON::PP ();
  use strict;
  
  1;
  
  =head1 AUTHOR
  
  This idea is from L<JSON::XS::Boolean> written by Marc Lehmann <schmorp[at]schmorp.de>
  
  =cut
  
JSON_PP_BOOLEAN

    $main::fatpacked{"LWP.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP';
  package LWP;
  
  $VERSION = "6.15";
  sub Version { $VERSION; }
  
  require 5.008;
  require LWP::UserAgent;  # this should load everything you need
  
  1;
  
  __END__
  
  =encoding utf-8
  
  =head1 NAME
  
  LWP - The World-Wide Web library for Perl
  
  =head1 SYNOPSIS
  
    use LWP;
    print "This is libwww-perl-$LWP::VERSION\n";
  
  
  =head1 DESCRIPTION
  
  The libwww-perl collection is a set of Perl modules which provides a
  simple and consistent application programming interface (API) to the
  World-Wide Web.  The main focus of the library is to provide classes
  and functions that allow you to write WWW clients. The library also
  contain modules that are of more general use and even classes that
  help you implement simple HTTP servers.
  
  Most modules in this library provide an object oriented API.  The user
  agent, requests sent and responses received from the WWW server are
  all represented by objects.  This makes a simple and powerful
  interface to these services.  The interface is easy to extend
  and customize for your own needs.
  
  The main features of the library are:
  
  =over 3
  
  =item *
  
  Contains various reusable components (modules) that can be
  used separately or together.
  
  =item *
  
  Provides an object oriented model of HTTP-style communication.  Within
  this framework we currently support access to http, https, gopher, ftp, news,
  file, and mailto resources.
  
  =item *
  
  Provides a full object oriented interface or
  a very simple procedural interface.
  
  =item *
  
  Supports the basic and digest authorization schemes.
  
  =item *
  
  Supports transparent redirect handling.
  
  =item *
  
  Supports access through proxy servers.
  
  =item *
  
  Provides parser for F<robots.txt> files and a framework for constructing robots.
  
  =item *
  
  Supports parsing of HTML forms.
  
  =item *
  
  Implements HTTP content negotiation algorithm that can
  be used both in protocol modules and in server scripts (like CGI
  scripts).
  
  =item *
  
  Supports HTTP cookies.
  
  =item *
  
  Some simple command line clients, for instance C<lwp-request> and C<lwp-download>.
  
  =back
  
  
  =head1 HTTP STYLE COMMUNICATION
  
  
  The libwww-perl library is based on HTTP style communication. This
  section tries to describe what that means.
  
  Let us start with this quote from the HTTP specification document
  <URL:http://www.w3.org/Protocols/>:
  
  =over 3
  
  =item *
  
  The HTTP protocol is based on a request/response paradigm. A client
  establishes a connection with a server and sends a request to the
  server in the form of a request method, URI, and protocol version,
  followed by a MIME-like message containing request modifiers, client
  information, and possible body content. The server responds with a
  status line, including the message's protocol version and a success or
  error code, followed by a MIME-like message containing server
  information, entity meta-information, and possible body content.
  
  =back
  
  What this means to libwww-perl is that communication always take place
  through these steps: First a I<request> object is created and
  configured. This object is then passed to a server and we get a
  I<response> object in return that we can examine. A request is always
  independent of any previous requests, i.e. the service is stateless.
  The same simple model is used for any kind of service we want to
  access.
  
  For example, if we want to fetch a document from a remote file server,
  then we send it a request that contains a name for that document and
  the response will contain the document itself.  If we access a search
  engine, then the content of the request will contain the query
  parameters and the response will contain the query result.  If we want
  to send a mail message to somebody then we send a request object which
  contains our message to the mail server and the response object will
  contain an acknowledgment that tells us that the message has been
  accepted and will be forwarded to the recipient(s).
  
  It is as simple as that!
  
  
  =head2 The Request Object
  
  The libwww-perl request object has the class name C<HTTP::Request>.
  The fact that the class name uses C<HTTP::> as a
  prefix only implies that we use the HTTP model of communication.  It
  does not limit the kind of services we can try to pass this I<request>
  to.  For instance, we will send C<HTTP::Request>s both to ftp and
  gopher servers, as well as to the local file system.
  
  The main attributes of the request objects are:
  
  =over 3
  
  =item *
  
  B<method> is a short string that tells what kind of
  request this is.  The most common methods are B<GET>, B<PUT>,
  B<POST> and B<HEAD>.
  
  =item *
  
  B<uri> is a string denoting the protocol, server and
  the name of the "document" we want to access.  The B<uri> might
  also encode various other parameters.
  
  =item *
  
  B<headers> contains additional information about the
  request and can also used to describe the content.  The headers
  are a set of keyword/value pairs.
  
  =item *
  
  B<content> is an arbitrary amount of data.
  
  =back
  
  =head2 The Response Object
  
  The libwww-perl response object has the class name C<HTTP::Response>.
  The main attributes of objects of this class are:
  
  =over 3
  
  =item *
  
  B<code> is a numerical value that indicates the overall
  outcome of the request.
  
  =item *
  
  B<message> is a short, human readable string that
  corresponds to the I<code>.
  
  =item *
  
  B<headers> contains additional information about the
  response and describe the content.
  
  =item *
  
  B<content> is an arbitrary amount of data.
  
  =back
  
  Since we don't want to handle all possible I<code> values directly in
  our programs, a libwww-perl response object has methods that can be
  used to query what kind of response this is.  The most commonly used
  response classification methods are:
  
  =over 3
  
  =item is_success()
  
  The request was successfully received, understood or accepted.
  
  =item is_error()
  
  The request failed.  The server or the resource might not be
  available, access to the resource might be denied or other things might
  have failed for some reason.
  
  =back
  
  =head2 The User Agent
  
  Let us assume that we have created a I<request> object. What do we
  actually do with it in order to receive a I<response>?
  
  The answer is that you pass it to a I<user agent> object and this
  object takes care of all the things that need to be done
  (like low-level communication and error handling) and returns
  a I<response> object. The user agent represents your
  application on the network and provides you with an interface that
  can accept I<requests> and return I<responses>.
  
  The user agent is an interface layer between
  your application code and the network.  Through this interface you are
  able to access the various servers on the network.
  
  The class name for the user agent is C<LWP::UserAgent>.  Every
  libwww-perl application that wants to communicate should create at
  least one object of this class. The main method provided by this
  object is request(). This method takes an C<HTTP::Request> object as
  argument and (eventually) returns a C<HTTP::Response> object.
  
  The user agent has many other attributes that let you
  configure how it will interact with the network and with your
  application.
  
  =over 3
  
  =item *
  
  B<timeout> specifies how much time we give remote servers to
  respond before the library disconnects and creates an
  internal I<timeout> response.
  
  =item *
  
  B<agent> specifies the name that your application uses when it
  presents itself on the network.
  
  =item *
  
  B<from> can be set to the e-mail address of the person
  responsible for running the application.  If this is set, then the
  address will be sent to the servers with every request.
  
  =item *
  
  B<parse_head> specifies whether we should initialize response
  headers from the E<lt>head> section of HTML documents.
  
  =item *
  
  B<proxy> and B<no_proxy> specify if and when to go through
  a proxy server. <URL:http://www.w3.org/History/1994/WWW/Proxies/>
  
  =item *
  
  B<credentials> provides a way to set up user names and
  passwords needed to access certain services.
  
  =back
  
  Many applications want even more control over how they interact
  with the network and they get this by sub-classing
  C<LWP::UserAgent>.  The library includes a
  sub-class, C<LWP::RobotUA>, for robot applications.
  
  =head2 An Example
  
  This example shows how the user agent, a request and a response are
  represented in actual perl code:
  
    # Create a user agent object
    use LWP::UserAgent;
    my $ua = LWP::UserAgent->new;
    $ua->agent("MyApp/0.1 ");
  
    # Create a request
    my $req = HTTP::Request->new(POST => 'http://search.cpan.org/search');
    $req->content_type('application/x-www-form-urlencoded');
    $req->content('query=libwww-perl&mode=dist');
  
    # Pass request to the user agent and get a response back
    my $res = $ua->request($req);
  
    # Check the outcome of the response
    if ($res->is_success) {
        print $res->content;
    }
    else {
        print $res->status_line, "\n";
    }
  
  The $ua is created once when the application starts up.  New request
  objects should normally created for each request sent.
  
  
  =head1 NETWORK SUPPORT
  
  This section discusses the various protocol schemes and
  the HTTP style methods that headers may be used for each.
  
  For all requests, a "User-Agent" header is added and initialized from
  the $ua->agent attribute before the request is handed to the network
  layer.  In the same way, a "From" header is initialized from the
  $ua->from attribute.
  
  For all responses, the library adds a header called "Client-Date".
  This header holds the time when the response was received by
  your application.  The format and semantics of the header are the
  same as the server created "Date" header.  You may also encounter other
  "Client-XXX" headers.  They are all generated by the library
  internally and are not received from the servers.
  
  =head2 HTTP Requests
  
  HTTP requests are just handed off to an HTTP server and it
  decides what happens.  Few servers implement methods beside the usual
  "GET", "HEAD", "POST" and "PUT", but CGI-scripts may implement
  any method they like.
  
  If the server is not available then the library will generate an
  internal error response.
  
  The library automatically adds a "Host" and a "Content-Length" header
  to the HTTP request before it is sent over the network.
  
  For a GET request you might want to add a "If-Modified-Since" or
  "If-None-Match" header to make the request conditional.
  
  For a POST request you should add the "Content-Type" header.  When you
  try to emulate HTML E<lt>FORM> handling you should usually let the value
  of the "Content-Type" header be "application/x-www-form-urlencoded".
  See L<lwpcook> for examples of this.
  
  The libwww-perl HTTP implementation currently support the HTTP/1.1
  and HTTP/1.0 protocol.
  
  The library allows you to access proxy server through HTTP.  This
  means that you can set up the library to forward all types of request
  through the HTTP protocol module.  See L<LWP::UserAgent> for
  documentation of this.
  
  
  =head2 HTTPS Requests
  
  HTTPS requests are HTTP requests over an encrypted network connection
  using the SSL protocol developed by Netscape.  Everything about HTTP
  requests above also apply to HTTPS requests.  In addition the library
  will add the headers "Client-SSL-Cipher", "Client-SSL-Cert-Subject" and
  "Client-SSL-Cert-Issuer" to the response.  These headers denote the
  encryption method used and the name of the server owner.
  
  The request can contain the header "If-SSL-Cert-Subject" in order to
  make the request conditional on the content of the server certificate.
  If the certificate subject does not match, no request is sent to the
  server and an internally generated error response is returned.  The
  value of the "If-SSL-Cert-Subject" header is interpreted as a Perl
  regular expression.
  
  
  =head2 FTP Requests
  
  The library currently supports GET, HEAD and PUT requests.  GET
  retrieves a file or a directory listing from an FTP server.  PUT
  stores a file on a ftp server.
  
  You can specify a ftp account for servers that want this in addition
  to user name and password.  This is specified by including an "Account"
  header in the request.
  
  User name/password can be specified using basic authorization or be
  encoded in the URL.  Failed logins return an UNAUTHORIZED response with
  "WWW-Authenticate: Basic" and can be treated like basic authorization
  for HTTP.
  
  The library supports ftp ASCII transfer mode by specifying the "type=a"
  parameter in the URL. It also supports transfer of ranges for FTP transfers
  using the "Range" header.
  
  Directory listings are by default returned unprocessed (as returned
  from the ftp server) with the content media type reported to be
  "text/ftp-dir-listing". The C<File::Listing> module provides methods
  for parsing of these directory listing.
  
  The ftp module is also able to convert directory listings to HTML and
  this can be requested via the standard HTTP content negotiation
  mechanisms (add an "Accept: text/html" header in the request if you
  want this).
  
  For normal file retrievals, the "Content-Type" is guessed based on the
  file name suffix. See L<LWP::MediaTypes>.
  
  The "If-Modified-Since" request header works for servers that implement
  the MDTM command.  It will probably not work for directory listings though.
  
  Example:
  
    $req = HTTP::Request->new(GET => 'ftp://me:passwd@ftp.some.where.com/');
    $req->header(Accept => "text/html, */*;q=0.1");
  
  =head2 News Requests
  
  Access to the USENET News system is implemented through the NNTP
  protocol.  The name of the news server is obtained from the
  NNTP_SERVER environment variable and defaults to "news".  It is not
  possible to specify the hostname of the NNTP server in news: URLs.
  
  The library supports GET and HEAD to retrieve news articles through the
  NNTP protocol.  You can also post articles to newsgroups by using
  (surprise!) the POST method.
  
  GET on newsgroups is not implemented yet.
  
  Examples:
  
    $req = HTTP::Request->new(GET => 'news:abc1234@a.sn.no');
  
    $req = HTTP::Request->new(POST => 'news:comp.lang.perl.test');
    $req->header(Subject => 'This is a test',
                 From    => 'me@some.where.org');
    $req->content(<<EOT);
    This is the content of the message that we are sending to
    the world.
    EOT
  
  
  =head2 Gopher Request
  
  The library supports the GET and HEAD methods for gopher requests.  All
  request header values are ignored.  HEAD cheats and returns a
  response without even talking to server.
  
  Gopher menus are always converted to HTML.
  
  The response "Content-Type" is generated from the document type
  encoded (as the first letter) in the request URL path itself.
  
  Example:
  
    $req = HTTP::Request->new(GET => 'gopher://gopher.sn.no/');
  
  
  
  =head2 File Request
  
  The library supports GET and HEAD methods for file requests.  The
  "If-Modified-Since" header is supported.  All other headers are
  ignored.  The I<host> component of the file URL must be empty or set
  to "localhost".  Any other I<host> value will be treated as an error.
  
  Directories are always converted to an HTML document.  For normal
  files, the "Content-Type" and "Content-Encoding" in the response are
  guessed based on the file suffix.
  
  Example:
  
    $req = HTTP::Request->new(GET => 'file:/etc/passwd');
  
  
  =head2 Mailto Request
  
  You can send (aka "POST") mail messages using the library.  All
  headers specified for the request are passed on to the mail system.
  The "To" header is initialized from the mail address in the URL.
  
  Example:
  
    $req = HTTP::Request->new(POST => 'mailto:libwww@perl.org');
    $req->header(Subject => "subscribe");
    $req->content("Please subscribe me to the libwww-perl mailing list!\n");
  
  =head2 CPAN Requests
  
  URLs with scheme C<cpan:> are redirected to the a suitable CPAN
  mirror.  If you have your own local mirror of CPAN you might tell LWP
  to use it for C<cpan:> URLs by an assignment like this:
  
    $LWP::Protocol::cpan::CPAN = "file:/local/CPAN/";
  
  Suitable CPAN mirrors are also picked up from the configuration for
  the CPAN.pm, so if you have used that module a suitable mirror should
  be picked automatically.  If neither of these apply, then a redirect
  to the generic CPAN http location is issued.
  
  Example request to download the newest perl:
  
    $req = HTTP::Request->new(GET => "cpan:src/latest.tar.gz");
  
  
  =head1 OVERVIEW OF CLASSES AND PACKAGES
  
  This table should give you a quick overview of the classes provided by the
  library. Indentation shows class inheritance.
  
   LWP::MemberMixin   -- Access to member variables of Perl5 classes
     LWP::UserAgent   -- WWW user agent class
       LWP::RobotUA   -- When developing a robot applications
     LWP::Protocol          -- Interface to various protocol schemes
       LWP::Protocol::http  -- http:// access
       LWP::Protocol::file  -- file:// access
       LWP::Protocol::ftp   -- ftp:// access
       ...
  
   LWP::Authen::Basic -- Handle 401 and 407 responses
   LWP::Authen::Digest
  
   HTTP::Headers      -- MIME/RFC822 style header (used by HTTP::Message)
   HTTP::Message      -- HTTP style message
     HTTP::Request    -- HTTP request
     HTTP::Response   -- HTTP response
   HTTP::Daemon       -- A HTTP server class
  
   WWW::RobotRules    -- Parse robots.txt files
     WWW::RobotRules::AnyDBM_File -- Persistent RobotRules
  
   Net::HTTP          -- Low level HTTP client
  
  The following modules provide various functions and definitions.
  
   LWP                -- This file.  Library version number and documentation.
   LWP::MediaTypes    -- MIME types configuration (text/html etc.)
   LWP::Simple        -- Simplified procedural interface for common functions
   HTTP::Status       -- HTTP status code (200 OK etc)
   HTTP::Date         -- Date parsing module for HTTP date formats
   HTTP::Negotiate    -- HTTP content negotiation calculation
   File::Listing      -- Parse directory listings
   HTML::Form         -- Processing for <form>s in HTML documents
  
  
  =head1 MORE DOCUMENTATION
  
  All modules contain detailed information on the interfaces they
  provide.  The L<lwpcook> manpage is the libwww-perl cookbook that contain
  examples of typical usage of the library.  You might want to take a
  look at how the scripts L<lwp-request>, L<lwp-download>, L<lwp-dump>
  and L<lwp-mirror> are implemented.
  
  =head1 ENVIRONMENT
  
  The following environment variables are used by LWP:
  
  =over
  
  =item HOME
  
  The C<LWP::MediaTypes> functions will look for the F<.media.types> and
  F<.mime.types> files relative to you home directory.
  
  =item http_proxy
  
  =item ftp_proxy
  
  =item xxx_proxy
  
  =item no_proxy
  
  These environment variables can be set to enable communication through
  a proxy server.  See the description of the C<env_proxy> method in
  L<LWP::UserAgent>.
  
  =item PERL_LWP_ENV_PROXY
  
  If set to a TRUE value, then the C<LWP::UserAgent> will by default call
  C<env_proxy> during initialization.  This makes LWP honor the proxy variables
  described above.
  
  =item PERL_LWP_SSL_VERIFY_HOSTNAME
  
  The default C<verify_hostname> setting for C<LWP::UserAgent>.  If
  not set the default will be 1.  Set it as 0 to disable hostname
  verification (the default prior to libwww-perl 5.840.
  
  =item PERL_LWP_SSL_CA_FILE
  
  =item PERL_LWP_SSL_CA_PATH
  
  The file and/or directory
  where the trusted Certificate Authority certificates
  is located.  See L<LWP::UserAgent> for details.
  
  =item PERL_HTTP_URI_CLASS
  
  Used to decide what URI objects to instantiate.  The default is C<URI>.
  You might want to set it to C<URI::URL> for compatibility with old times.
  
  =back
  
  =head1 AUTHORS
  
  LWP was made possible by contributions from Adam Newby, Albert
  Dvornik, Alexandre Duret-Lutz, Andreas Gustafsson, Andreas König,
  Andrew Pimlott, Andy Lester, Ben Coleman, Benjamin Low, Ben Low, Ben
  Tilly, Blair Zajac, Bob Dalgleish, BooK, Brad Hughes, Brian
  J. Murrell, Brian McCauley, Charles C. Fu, Charles Lane, Chris Nandor,
  Christian Gilmore, Chris W. Unger, Craig Macdonald, Dale Couch, Dan
  Kubb, Dave Dunkin, Dave W. Smith, David Coppit, David Dick, David
  D. Kilzer, Doug MacEachern, Edward Avis, erik, Gary Shea, Gisle Aas,
  Graham Barr, Gurusamy Sarathy, Hans de Graaff, Harald Joerg, Harry
  Bochner, Hugo, Ilya Zakharevich, INOUE Yoshinari, Ivan Panchenko, Jack
  Shirazi, James Tillman, Jan Dubois, Jared Rhine, Jim Stern, Joao
  Lopes, John Klar, Johnny Lee, Josh Kronengold, Josh Rai, Joshua
  Chamas, Joshua Hoblitt, Kartik Subbarao, Keiichiro Nagano, Ken
  Williams, KONISHI Katsuhiro, Lee T Lindley, Liam Quinn, Marc Hedlund,
  Marc Langheinrich, Mark D. Anderson, Marko Asplund, Mark Stosberg,
  Markus B Krüger, Markus Laker, Martijn Koster, Martin Thurn, Matthew
  Eldridge, Matthew.van.Eerde, Matt Sergeant, Michael A. Chase, Michael
  Quaranta, Michael Thompson, Mike Schilli, Moshe Kaminsky, Nathan
  Torkington, Nicolai Langfeldt, Norton Allen, Olly Betts, Paul
  J. Schinder, peterm, Philip GuentherDaniel Buenzli, Pon Hwa Lin,
  Radoslaw Zielinski, Radu Greab, Randal L. Schwartz, Richard Chen,
  Robin Barker, Roy Fielding, Sander van Zoest, Sean M. Burke,
  shildreth, Slaven Rezic, Steve A Fink, Steve Hay, Steven Butler,
  Steve_Kilbane, Takanori Ugai, Thomas Lotterer, Tim Bunce, Tom Hughes,
  Tony Finch, Ville Skyttä, Ward Vandewege, William York, Yale Huang,
  and Yitzchak Scott-Thoennes.
  
  LWP owes a lot in motivation, design, and code, to the libwww-perl
  library for Perl4 by Roy Fielding, which included work from Alberto
  Accomazzi, James Casey, Brooks Cutter, Martijn Koster, Oscar
  Nierstrasz, Mel Melchner, Gertjan van Oosten, Jared Rhine, Jack
  Shirazi, Gene Spafford, Marc VanHeyningen, Steven E. Brenner, Marion
  Hakanson, Waldemar Kebsch, Tony Sanders, and Larry Wall; see the
  libwww-perl-0.40 library for details.
  
  =head1 COPYRIGHT
  
    Copyright 1995-2009, Gisle Aas
    Copyright 1995, Martijn Koster
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =head1 AVAILABILITY
  
  The latest version of this library is likely to be available from CPAN
  as well as:
  
    http://github.com/libwww-perl/libwww-perl
  
  The best place to discuss this code is on the <libwww@perl.org>
  mailing list.
  
  =cut
LWP

    $main::fatpacked{"LWP/Authen/Basic.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_AUTHEN_BASIC';
  package LWP::Authen::Basic;
  use strict;
  
  require MIME::Base64;
  
  sub auth_header {
      my($class, $user, $pass) = @_;
      return "Basic " . MIME::Base64::encode("$user:$pass", "");
  }
  
  sub authenticate
  {
      my($class, $ua, $proxy, $auth_param, $response,
         $request, $arg, $size) = @_;
  
      my $realm = $auth_param->{realm} || "";
      my $url = $proxy ? $request->{proxy} : $request->uri_canonical;
      return $response unless $url;
      my $host_port = $url->host_port;
      my $auth_header = $proxy ? "Proxy-Authorization" : "Authorization";
  
      my @m = $proxy ? (m_proxy => $url) : (m_host_port => $host_port);
      push(@m, realm => $realm);
  
      my $h = $ua->get_my_handler("request_prepare", @m, sub {
          $_[0]{callback} = sub {
              my($req, $ua, $h) = @_;
              my($user, $pass) = $ua->credentials($host_port, $h->{realm});
  	    if (defined $user) {
  		my $auth_value = $class->auth_header($user, $pass, $req, $ua, $h);
  		$req->header($auth_header => $auth_value);
  	    }
          };
      });
      $h->{auth_param} = $auth_param;
  
      if (!$proxy && !$request->header($auth_header) && $ua->credentials($host_port, $realm)) {
  	# we can make sure this handler applies and retry
          add_path($h, $url->path);
          return $ua->request($request->clone, $arg, $size, $response);
      }
  
      my($user, $pass) = $ua->get_basic_credentials($realm, $url, $proxy);
      unless (defined $user and defined $pass) {
  	$ua->set_my_handler("request_prepare", undef, @m);  # delete handler
  	return $response;
      }
  
      # check that the password has changed
      my ($olduser, $oldpass) = $ua->credentials($host_port, $realm);
      return $response if (defined $olduser and defined $oldpass and
                           $user eq $olduser and $pass eq $oldpass);
  
      $ua->credentials($host_port, $realm, $user, $pass);
      add_path($h, $url->path) unless $proxy;
      return $ua->request($request->clone, $arg, $size, $response);
  }
  
  sub add_path {
      my($h, $path) = @_;
      $path =~ s,[^/]+\z,,;
      push(@{$h->{m_path_prefix}}, $path);
  }
  
  1;
LWP_AUTHEN_BASIC

    $main::fatpacked{"LWP/Authen/Digest.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_AUTHEN_DIGEST';
  package LWP::Authen::Digest;
  
  use strict;
  use base 'LWP::Authen::Basic';
  
  require Digest::MD5;
  
  sub auth_header {
      my($class, $user, $pass, $request, $ua, $h) = @_;
  
      my $auth_param = $h->{auth_param};
  
      my $nc = sprintf "%08X", ++$ua->{authen_md5_nonce_count}{$auth_param->{nonce}};
      my $cnonce = sprintf "%8x", time;
  
      my $uri = $request->uri->path_query;
      $uri = "/" unless length $uri;
  
      my $md5 = Digest::MD5->new;
  
      my(@digest);
      $md5->add(join(":", $user, $auth_param->{realm}, $pass));
      push(@digest, $md5->hexdigest);
      $md5->reset;
  
      push(@digest, $auth_param->{nonce});
  
      if ($auth_param->{qop}) {
  	push(@digest, $nc, $cnonce, ($auth_param->{qop} =~ m|^auth[,;]auth-int$|) ? 'auth' : $auth_param->{qop});
      }
  
      $md5->add(join(":", $request->method, $uri));
      push(@digest, $md5->hexdigest);
      $md5->reset;
  
      $md5->add(join(":", @digest));
      my($digest) = $md5->hexdigest;
      $md5->reset;
  
      my %resp = map { $_ => $auth_param->{$_} } qw(realm nonce opaque);
      @resp{qw(username uri response algorithm)} = ($user, $uri, $digest, "MD5");
  
      if (($auth_param->{qop} || "") =~ m|^auth([,;]auth-int)?$|) {
  	@resp{qw(qop cnonce nc)} = ("auth", $cnonce, $nc);
      }
  
      my(@order) = qw(username realm qop algorithm uri nonce nc cnonce response);
      if($request->method =~ /^(?:POST|PUT)$/) {
  	$md5->add($request->content);
  	my $content = $md5->hexdigest;
  	$md5->reset;
  	$md5->add(join(":", @digest[0..1], $content));
  	$md5->reset;
  	$resp{"message-digest"} = $md5->hexdigest;
  	push(@order, "message-digest");
      }
      push(@order, "opaque");
      my @pairs;
      for (@order) {
  	next unless defined $resp{$_};
  
  	# RFC2617 sais that qop-value and nc-value should be unquoted.
  	if ( $_ eq 'qop' || $_ eq 'nc' ) {
  		push(@pairs, "$_=" . $resp{$_});
  	}
  	else {
  		push(@pairs, "$_=" . qq("$resp{$_}"));
  	}
      }
  
      my $auth_value  = "Digest " . join(", ", @pairs);
      return $auth_value;
  }
  
  1;
LWP_AUTHEN_DIGEST

    $main::fatpacked{"LWP/Authen/Ntlm.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_AUTHEN_NTLM';
  package LWP::Authen::Ntlm;
  
  use strict;
  use vars qw/$VERSION/;
  
  $VERSION = "6.15";
  
  use Authen::NTLM "1.02";
  use MIME::Base64 "2.12";
  
  sub authenticate {
      my($class, $ua, $proxy, $auth_param, $response,
         $request, $arg, $size) = @_;
  
      my($user, $pass) = $ua->get_basic_credentials($auth_param->{realm},
                                                    $request->uri, $proxy);
  
      unless(defined $user and defined $pass) {
  		return $response;
  	}
  
  	if (!$ua->conn_cache()) {
  		warn "The keep_alive option must be enabled for NTLM authentication to work.  NTLM authentication aborted.\n";
  		return $response;
  	}
  
  	my($domain, $username) = split(/\\/, $user);
  
  	ntlm_domain($domain);
  	ntlm_user($username);
  	ntlm_password($pass);
  
      my $auth_header = $proxy ? "Proxy-Authorization" : "Authorization";
  
  	# my ($challenge) = $response->header('WWW-Authenticate'); 
  	my $challenge;
  	foreach ($response->header('WWW-Authenticate')) { 
  		last if /^NTLM/ && ($challenge=$_);
  	}
  
  	if ($challenge eq 'NTLM') {
  		# First phase, send handshake
  	    my $auth_value = "NTLM " . ntlm();
  		ntlm_reset();
  
  	    # Need to check this isn't a repeated fail!
  	    my $r = $response;
  		my $retry_count = 0;
  	    while ($r) {
  			my $auth = $r->request->header($auth_header);
  			++$retry_count if ($auth && $auth eq $auth_value);
  			if ($retry_count > 2) {
  				    # here we know this failed before
  				    $response->header("Client-Warning" =>
  						      "Credentials for '$user' failed before");
  				    return $response;
  			}
  			$r = $r->previous;
  	    }
  
  	    my $referral = $request->clone;
  	    $referral->header($auth_header => $auth_value);
  	    return $ua->request($referral, $arg, $size, $response);
  	}
  	
  	else {
  		# Second phase, use the response challenge (unless non-401 code
  		#  was returned, in which case, we just send back the response
  		#  object, as is
  		my $auth_value;
  		if ($response->code ne '401') {
  			return $response;
  		}
  		else {
  			my $challenge;
  			foreach ($response->header('WWW-Authenticate')) { 
  				last if /^NTLM/ && ($challenge=$_);
  			}
  			$challenge =~ s/^NTLM //;
  			ntlm();
  			$auth_value = "NTLM " . ntlm($challenge);
  			ntlm_reset();
  		}
  
  	    my $referral = $request->clone;
  	    $referral->header($auth_header => $auth_value);
  	    my $response2 = $ua->request($referral, $arg, $size, $response);
  		return $response2;
  	}
  }
  
  1;
  
  
  =head1 NAME
  
  LWP::Authen::Ntlm - Library for enabling NTLM authentication (Microsoft) in LWP
  
  =head1 SYNOPSIS
  
   use LWP::UserAgent;
   use HTTP::Request::Common;
   my $url = 'http://www.company.com/protected_page.html';
  
   # Set up the ntlm client and then the base64 encoded ntlm handshake message
   my $ua = LWP::UserAgent->new(keep_alive=>1);
   $ua->credentials('www.company.com:80', '', "MyDomain\\MyUserCode", 'MyPassword');
  
   $request = GET $url;
   print "--Performing request now...-----------\n";
   $response = $ua->request($request);
   print "--Done with request-------------------\n";
  
   if ($response->is_success) {print "It worked!->" . $response->code . "\n"}
   else {print "It didn't work!->" . $response->code . "\n"}
  
  =head1 DESCRIPTION
  
  C<LWP::Authen::Ntlm> allows LWP to authenticate against servers that are using the 
  NTLM authentication scheme popularized by Microsoft.  This type of authentication is 
  common on intranets of Microsoft-centric organizations.
  
  The module takes advantage of the Authen::NTLM module by Mark Bush.  Since there 
  is also another Authen::NTLM module available from CPAN by Yee Man Chan with an 
  entirely different interface, it is necessary to ensure that you have the correct 
  NTLM module.
  
  In addition, there have been problems with incompatibilities between different 
  versions of Mime::Base64, which Bush's Authen::NTLM makes use of.  Therefore, it is 
  necessary to ensure that your Mime::Base64 module supports exporting of the 
  encode_base64 and decode_base64 functions.
  
  =head1 USAGE
  
  The module is used indirectly through LWP, rather than including it directly in your 
  code.  The LWP system will invoke the NTLM authentication when it encounters the 
  authentication scheme while attempting to retrieve a URL from a server.  In order 
  for the NTLM authentication to work, you must have a few things set up in your 
  code prior to attempting to retrieve the URL:
  
  =over 4
  
  =item *
  
  Enable persistent HTTP connections
  
  To do this, pass the "keep_alive=>1" option to the LWP::UserAgent when creating it, like this:
  
      my $ua = LWP::UserAgent->new(keep_alive=>1);
  
  =item *
  
  Set the credentials on the UserAgent object
  
  The credentials must be set like this:
  
     $ua->credentials('www.company.com:80', '', "MyDomain\\MyUserCode", 'MyPassword');
  
  Note that you cannot use the HTTP::Request object's authorization_basic() method to set 
  the credentials.  Note, too, that the 'www.company.com:80' portion only sets credentials 
  on the specified port AND it is case-sensitive (this is due to the way LWP is coded, and 
  has nothing to do with LWP::Authen::Ntlm)
  
  =back
  
  =head1 AVAILABILITY
  
  General queries regarding LWP should be made to the LWP Mailing List.
  
  Questions specific to LWP::Authen::Ntlm can be forwarded to jtillman@bigfoot.com
  
  =head1 COPYRIGHT
  
  Copyright (c) 2002 James Tillman. All rights reserved. This
  program is free software; you can redistribute it and/or modify it
  under the same terms as Perl itself.
  
  =head1 SEE ALSO
  
  L<LWP>, L<LWP::UserAgent>, L<lwpcook>.
LWP_AUTHEN_NTLM

    $main::fatpacked{"LWP/ConnCache.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_CONNCACHE';
  package LWP::ConnCache;
  
  use strict;
  use vars qw($VERSION $DEBUG);
  
  $VERSION = "6.15";
  
  
  sub new {
      my($class, %cnf) = @_;
  
      my $total_capacity = 1;
      if (exists $cnf{total_capacity}) {
          $total_capacity = delete $cnf{total_capacity};
      }
      if (%cnf && $^W) {
  	require Carp;
  	Carp::carp("Unrecognised options: @{[sort keys %cnf]}")
      }
      my $self = bless { cc_conns => [] }, $class;
      $self->total_capacity($total_capacity);
      $self;
  }
  
  
  sub deposit {
      my($self, $type, $key, $conn) = @_;
      push(@{$self->{cc_conns}}, [$conn, $type, $key, time]);
      $self->enforce_limits($type);
      return;
  }
  
  
  sub withdraw {
      my($self, $type, $key) = @_;
      my $conns = $self->{cc_conns};
      for my $i (0 .. @$conns - 1) {
  	my $c = $conns->[$i];
  	next unless $c->[1] eq $type && $c->[2] eq $key;
  	splice(@$conns, $i, 1);  # remove it
  	return $c->[0];
      }
      return undef;
  }
  
  
  sub total_capacity {
      my $self = shift;
      my $old = $self->{cc_limit_total};
      if (@_) {
  	$self->{cc_limit_total} = shift;
  	$self->enforce_limits;
      }
      $old;
  }
  
  
  sub capacity {
      my $self = shift;
      my $type = shift;
      my $old = $self->{cc_limit}{$type};
      if (@_) {
  	$self->{cc_limit}{$type} = shift;
  	$self->enforce_limits($type);
      }
      $old;
  }
  
  
  sub enforce_limits {
      my($self, $type) = @_;
      my $conns = $self->{cc_conns};
  
      my @types = $type ? ($type) : ($self->get_types);
      for $type (@types) {
  	next unless $self->{cc_limit};
  	my $limit = $self->{cc_limit}{$type};
  	next unless defined $limit;
  	for my $i (reverse 0 .. @$conns - 1) {
  	    next unless $conns->[$i][1] eq $type;
  	    if (--$limit < 0) {
  		$self->dropping(splice(@$conns, $i, 1), "$type capacity exceeded");
  	    }
  	}
      }
  
      if (defined(my $total = $self->{cc_limit_total})) {
  	while (@$conns > $total) {
  	    $self->dropping(shift(@$conns), "Total capacity exceeded");
  	}
      }
  }
  
  
  sub dropping {
      my($self, $c, $reason) = @_;
      print "DROPPING @$c [$reason]\n" if $DEBUG;
  }
  
  
  sub drop {
      my($self, $checker, $reason) = @_;
      if (ref($checker) ne "CODE") {
  	# make it so
  	if (!defined $checker) {
  	    $checker = sub { 1 };  # drop all of them
  	}
  	elsif (_looks_like_number($checker)) {
  	    my $age_limit = $checker;
  	    my $time_limit = time - $age_limit;
  	    $reason ||= "older than $age_limit";
  	    $checker = sub { $_[3] < $time_limit };
  	}
  	else {
  	    my $type = $checker;
  	    $reason ||= "drop $type";
  	    $checker = sub { $_[1] eq $type };  # match on type
  	}
      }
      $reason ||= "drop";
  
      local $SIG{__DIE__};  # don't interfere with eval below
      local $@;
      my @c;
      for (@{$self->{cc_conns}}) {
  	my $drop;
  	eval {
  	    if (&$checker(@$_)) {
  		$self->dropping($_, $reason);
  		$drop++;
  	    }
  	};
  	push(@c, $_) unless $drop;
      }
      @{$self->{cc_conns}} = @c;
  }
  
  
  sub prune {
      my $self = shift;
      $self->drop(sub { !shift->ping }, "ping");
  }
  
  
  sub get_types {
      my $self = shift;
      my %t;
      $t{$_->[1]}++ for @{$self->{cc_conns}};
      return keys %t;
  }
  
  
  sub get_connections {
      my($self, $type) = @_;
      my @c;
      for (@{$self->{cc_conns}}) {
  	push(@c, $_->[0]) if !$type || ($type && $type eq $_->[1]);
      }
      @c;
  }
  
  
  sub _looks_like_number {
      $_[0] =~ /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/;
  }
  
  1;
  
  
  __END__
  
  =head1 NAME
  
  LWP::ConnCache - Connection cache manager
  
  =head1 NOTE
  
  This module is experimental.  Details of its interface is likely to
  change in the future.
  
  =head1 SYNOPSIS
  
   use LWP::ConnCache;
   my $cache = LWP::ConnCache->new;
   $cache->deposit($type, $key, $sock);
   $sock = $cache->withdraw($type, $key);
  
  =head1 DESCRIPTION
  
  The C<LWP::ConnCache> class is the standard connection cache manager
  for LWP::UserAgent.
  
  The following basic methods are provided:
  
  =over
  
  =item $cache = LWP::ConnCache->new( %options )
  
  This method constructs a new C<LWP::ConnCache> object.  The only
  option currently accepted is 'total_capacity'.  If specified it
  initialize the total_capacity option.  It defaults to the value 1.
  
  =item $cache->total_capacity( [$num_connections] )
  
  Get/sets the number of connection that will be cached.  Connections
  will start to be dropped when this limit is reached.  If set to C<0>,
  then all connections are immediately dropped.  If set to C<undef>,
  then there is no limit.
  
  =item $cache->capacity($type, [$num_connections] )
  
  Get/set a limit for the number of connections of the specified type
  that can be cached.  The $type will typically be a short string like
  "http" or "ftp".
  
  =item $cache->drop( [$checker, [$reason]] )
  
  Drop connections by some criteria.  The $checker argument is a
  subroutine that is called for each connection.  If the routine returns
  a TRUE value then the connection is dropped.  The routine is called
  with ($conn, $type, $key, $deposit_time) as arguments.
  
  Shortcuts: If the $checker argument is absent (or C<undef>) all cached
  connections are dropped.  If the $checker is a number then all
  connections untouched that the given number of seconds or more are
  dropped.  If $checker is a string then all connections of the given
  type are dropped.
  
  The $reason argument is passed on to the dropped() method.
  
  =item $cache->prune
  
  Calling this method will drop all connections that are dead.  This is
  tested by calling the ping() method on the connections.  If the ping()
  method exists and returns a FALSE value, then the connection is
  dropped.
  
  =item $cache->get_types
  
  This returns all the 'type' fields used for the currently cached
  connections.
  
  =item $cache->get_connections( [$type] )
  
  This returns all connection objects of the specified type.  If no type
  is specified then all connections are returned.  In scalar context the
  number of cached connections of the specified type is returned.
  
  =back
  
  
  The following methods are called by low-level protocol modules to
  try to save away connections and to get them back.
  
  =over
  
  =item $cache->deposit($type, $key, $conn)
  
  This method adds a new connection to the cache.  As a result other
  already cached connections might be dropped.  Multiple connections with
  the same $type/$key might added.
  
  =item $conn = $cache->withdraw($type, $key)
  
  This method tries to fetch back a connection that was previously
  deposited.  If no cached connection with the specified $type/$key is
  found, then C<undef> is returned.  There is not guarantee that a
  deposited connection can be withdrawn, as the cache manger is free to
  drop connections at any time.
  
  =back
  
  The following methods are called internally.  Subclasses might want to
  override them.
  
  =over
  
  =item $conn->enforce_limits([$type])
  
  This method is called with after a new connection is added (deposited)
  in the cache or capacity limits are adjusted.  The default
  implementation drops connections until the specified capacity limits
  are not exceeded.
  
  =item $conn->dropping($conn_record, $reason)
  
  This method is called when a connection is dropped.  The record
  belonging to the dropped connection is passed as the first argument
  and a string describing the reason for the drop is passed as the
  second argument.  The default implementation makes some noise if the
  $LWP::ConnCache::DEBUG variable is set and nothing more.
  
  =back
  
  =head1 SUBCLASSING
  
  For specialized cache policy it makes sense to subclass
  C<LWP::ConnCache> and perhaps override the deposit(), enforce_limits()
  and dropping() methods.
  
  The object itself is a hash.  Keys prefixed with C<cc_> are reserved
  for the base class.
  
  =head1 SEE ALSO
  
  L<LWP::UserAgent>
  
  =head1 COPYRIGHT
  
  Copyright 2001 Gisle Aas.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
LWP_CONNCACHE

    $main::fatpacked{"LWP/Debug.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_DEBUG';
  package LWP::Debug;  # legacy
  
  require Exporter;
  @ISA = qw(Exporter);
  @EXPORT_OK = qw(level trace debug conns);
  
  use Carp ();
  
  my @levels = qw(trace debug conns);
  %current_level = ();
  
  
  sub import
  {
      my $pack = shift;
      my $callpkg = caller(0);
      my @symbols = ();
      my @levels = ();
      for (@_) {
  	if (/^[-+]/) {
  	    push(@levels, $_);
  	}
  	else {
  	    push(@symbols, $_);
  	}
      }
      Exporter::export($pack, $callpkg, @symbols);
      level(@levels);
  }
  
  
  sub level
  {
      for (@_) {
  	if ($_ eq '+') {              # all on
  	    # switch on all levels
  	    %current_level = map { $_ => 1 } @levels;
  	}
  	elsif ($_ eq '-') {           # all off
  	    %current_level = ();
  	}
  	elsif (/^([-+])(\w+)$/) {
  	    $current_level{$2} = $1 eq '+';
  	}
  	else {
  	    Carp::croak("Illegal level format $_");
  	}
      }
  }
  
  
  sub trace  { _log(@_) if $current_level{'trace'}; }
  sub debug  { _log(@_) if $current_level{'debug'}; }
  sub conns  { _log(@_) if $current_level{'conns'}; }
  
  
  sub _log
  {
      my $msg = shift;
      $msg .= "\n" unless $msg =~ /\n$/;  # ensure trailing "\n"
  
      my($package,$filename,$line,$sub) = caller(2);
      print STDERR "$sub: $msg";
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  LWP::Debug - deprecated
  
  =head1 DESCRIPTION
  
  LWP::Debug is used to provide tracing facilities, but these are not used
  by LWP any more.  The code in this module is kept around
  (undocumented) so that 3rd party code that happens to use the old
  interfaces continue to run.
  
  One useful feature that LWP::Debug provided (in an imprecise and
  troublesome way) was network traffic monitoring.  The following
  section provides some hints about recommended replacements.
  
  =head2 Network traffic monitoring
  
  The best way to monitor the network traffic that LWP generates is to
  use an external TCP monitoring program.  The Wireshark program
  (L<http://www.wireshark.org/>) is highly recommended for this.
  
  Another approach it to use a debugging HTTP proxy server and make
  LWP direct all its traffic via this one.  Call C<< $ua->proxy >> to
  set it up and then just use LWP as before.
  
  For less precise monitoring needs just setting up a few simple
  handlers might do.  The following example sets up handlers to dump the
  request and response objects that pass through LWP:
  
    use LWP::UserAgent;
    $ua = LWP::UserAgent->new;
    $ua->default_header('Accept-Encoding' => scalar HTTP::Message::decodable());
  
    $ua->add_handler("request_send",  sub { shift->dump; return });
    $ua->add_handler("response_done", sub { shift->dump; return });
  
    $ua->get("http://www.example.com");
  
  =head1 SEE ALSO
  
  L<LWP::UserAgent>
LWP_DEBUG

    $main::fatpacked{"LWP/DebugFile.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_DEBUGFILE';
  package LWP::DebugFile;
  
  # legacy stub
  
  1;
LWP_DEBUGFILE

    $main::fatpacked{"LWP/MediaTypes.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_MEDIATYPES';
  package LWP::MediaTypes;
  
  require Exporter;
  @ISA = qw(Exporter);
  @EXPORT = qw(guess_media_type media_suffix);
  @EXPORT_OK = qw(add_type add_encoding read_media_types);
  $VERSION = "6.02";
  
  use strict;
  
  # note: These hashes will also be filled with the entries found in
  # the 'media.types' file.
  
  my %suffixType = (
      'txt'   => 'text/plain',
      'html'  => 'text/html',
      'gif'   => 'image/gif',
      'jpg'   => 'image/jpeg',
      'xml'   => 'text/xml',
  );
  
  my %suffixExt = (
      'text/plain' => 'txt',
      'text/html'  => 'html',
      'image/gif'  => 'gif',
      'image/jpeg' => 'jpg',
      'text/xml'   => 'xml',
  );
  
  #XXX: there should be some way to define this in the media.types files.
  my %suffixEncoding = (
      'Z'   => 'compress',
      'gz'  => 'gzip',
      'hqx' => 'x-hqx',
      'uu'  => 'x-uuencode',
      'z'   => 'x-pack',
      'bz2' => 'x-bzip2',
  );
  
  read_media_types();
  
  
  
  sub guess_media_type
  {
      my($file, $header) = @_;
      return undef unless defined $file;
  
      my $fullname;
      if (ref($file)) {
  	# assume URI object
  	$file = $file->path;
  	#XXX should handle non http:, file: or ftp: URIs differently
      }
      else {
  	$fullname = $file;  # enable peek at actual file
      }
  
      my @encoding = ();
      my $ct = undef;
      for (file_exts($file)) {
  	# first check this dot part as encoding spec
  	if (exists $suffixEncoding{$_}) {
  	    unshift(@encoding, $suffixEncoding{$_});
  	    next;
  	}
  	if (exists $suffixEncoding{lc $_}) {
  	    unshift(@encoding, $suffixEncoding{lc $_});
  	    next;
  	}
  
  	# check content-type
  	if (exists $suffixType{$_}) {
  	    $ct = $suffixType{$_};
  	    last;
  	}
  	if (exists $suffixType{lc $_}) {
  	    $ct = $suffixType{lc $_};
  	    last;
  	}
  
  	# don't know nothing about this dot part, bail out
  	last;
      }
      unless (defined $ct) {
  	# Take a look at the file
  	if (defined $fullname) {
  	    $ct = (-T $fullname) ? "text/plain" : "application/octet-stream";
  	}
  	else {
  	    $ct = "application/octet-stream";
  	}
      }
  
      if ($header) {
  	$header->header('Content-Type' => $ct);
  	$header->header('Content-Encoding' => \@encoding) if @encoding;
      }
  
      wantarray ? ($ct, @encoding) : $ct;
  }
  
  
  sub media_suffix {
      if (!wantarray && @_ == 1 && $_[0] !~ /\*/) {
  	return $suffixExt{lc $_[0]};
      }
      my(@type) = @_;
      my(@suffix, $ext, $type);
      foreach (@type) {
  	if (s/\*/.*/) {
  	    while(($ext,$type) = each(%suffixType)) {
  		push(@suffix, $ext) if $type =~ /^$_$/i;
  	    }
  	}
  	else {
  	    my $ltype = lc $_;
  	    while(($ext,$type) = each(%suffixType)) {
  		push(@suffix, $ext) if lc $type eq $ltype;
  	    }
  	}
      }
      wantarray ? @suffix : $suffix[0];
  }
  
  
  sub file_exts 
  {
      require File::Basename;
      my @parts = reverse split(/\./, File::Basename::basename($_[0]));
      pop(@parts);        # never consider first part
      @parts;
  }
  
  
  sub add_type 
  {
      my($type, @exts) = @_;
      for my $ext (@exts) {
  	$ext =~ s/^\.//;
  	$suffixType{$ext} = $type;
      }
      $suffixExt{lc $type} = $exts[0] if @exts;
  }
  
  
  sub add_encoding
  {
      my($type, @exts) = @_;
      for my $ext (@exts) {
  	$ext =~ s/^\.//;
  	$suffixEncoding{$ext} = $type;
      }
  }
  
  
  sub read_media_types 
  {
      my(@files) = @_;
  
      local($/, $_) = ("\n", undef);  # ensure correct $INPUT_RECORD_SEPARATOR
  
      my @priv_files = ();
      push(@priv_files, "$ENV{HOME}/.media.types", "$ENV{HOME}/.mime.types")
  	if defined $ENV{HOME};  # Some doesn't have a home (for instance Win32)
  
      # Try to locate "media.types" file, and initialize %suffixType from it
      my $typefile;
      unless (@files) {
  	@files = map {"$_/LWP/media.types"} @INC;
  	push @files, @priv_files;
      }
      for $typefile (@files) {
  	local(*TYPE);
  	open(TYPE, $typefile) || next;
  	while (<TYPE>) {
  	    next if /^\s*#/; # comment line
  	    next if /^\s*$/; # blank line
  	    s/#.*//;         # remove end-of-line comments
  	    my($type, @exts) = split(' ', $_);
  	    add_type($type, @exts);
  	}
  	close(TYPE);
      }
  }
  
  1;
  
  
  __END__
  
  =head1 NAME
  
  LWP::MediaTypes - guess media type for a file or a URL
  
  =head1 SYNOPSIS
  
   use LWP::MediaTypes qw(guess_media_type);
   $type = guess_media_type("/tmp/foo.gif");
  
  =head1 DESCRIPTION
  
  This module provides functions for handling media (also known as
  MIME) types and encodings.  The mapping from file extensions to media
  types is defined by the F<media.types> file.  If the F<~/.media.types>
  file exists it is used instead.
  For backwards compatibility we will also look for F<~/.mime.types>.
  
  The following functions are exported by default:
  
  =over 4
  
  =item guess_media_type( $filename )
  
  =item guess_media_type( $uri )
  
  =item guess_media_type( $filename_or_uri, $header_to_modify )
  
  This function tries to guess media type and encoding for a file or a URI.
  It returns the content type, which is a string like C<"text/html">.
  In array context it also returns any content encodings applied (in the
  order used to encode the file).  You can pass a URI object
  reference, instead of the file name.
  
  If the type can not be deduced from looking at the file name,
  then guess_media_type() will let the C<-T> Perl operator take a look.
  If this works (and C<-T> returns a TRUE value) then we return
  I<text/plain> as the type, otherwise we return
  I<application/octet-stream> as the type.
  
  The optional second argument should be a reference to a HTTP::Headers
  object or any object that implements the $obj->header method in a
  similar way.  When it is present the values of the
  'Content-Type' and 'Content-Encoding' will be set for this header.
  
  =item media_suffix( $type, ... )
  
  This function will return all suffixes that can be used to denote the
  specified media type(s).  Wildcard types can be used.  In a scalar
  context it will return the first suffix found. Examples:
  
    @suffixes = media_suffix('image/*', 'audio/basic');
    $suffix = media_suffix('text/html');
  
  =back
  
  The following functions are only exported by explicit request:
  
  =over 4
  
  =item add_type( $type, @exts )
  
  Associate a list of file extensions with the given media type.
  Example:
  
      add_type("x-world/x-vrml" => qw(wrl vrml));
  
  =item add_encoding( $type, @ext )
  
  Associate a list of file extensions with an encoding type.
  Example:
  
   add_encoding("x-gzip" => "gz");
  
  =item read_media_types( @files )
  
  Parse media types files and add the type mappings found there.
  Example:
  
      read_media_types("conf/mime.types");
  
  =back
  
  =head1 COPYRIGHT
  
  Copyright 1995-1999 Gisle Aas.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
LWP_MEDIATYPES

    $main::fatpacked{"LWP/MemberMixin.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_MEMBERMIXIN';
  package LWP::MemberMixin;
  
  sub _elem
  {
      my $self = shift;
      my $elem = shift;
      my $old = $self->{$elem};
      $self->{$elem} = shift if @_;
      return $old;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  LWP::MemberMixin - Member access mixin class
  
  =head1 SYNOPSIS
  
   package Foo;
   require LWP::MemberMixin;
   @ISA=qw(LWP::MemberMixin);
  
  =head1 DESCRIPTION
  
  A mixin class to get methods that provide easy access to member
  variables in the %$self.
  Ideally there should be better Perl language support for this.
  
  There is only one method provided:
  
  =over 4
  
  =item _elem($elem [, $val])
  
  Internal method to get/set the value of member variable
  C<$elem>. If C<$val> is present it is used as the new value
  for the member variable.  If it is not present the current
  value is not touched. In both cases the previous value of
  the member variable is returned.
  
  =back
LWP_MEMBERMIXIN

    $main::fatpacked{"LWP/Protocol.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_PROTOCOL';
  package LWP::Protocol;
  
  require LWP::MemberMixin;
  @ISA = qw(LWP::MemberMixin);
  $VERSION = "6.15";
  
  use strict;
  use Carp ();
  use HTTP::Status ();
  use HTTP::Response;
  
  my %ImplementedBy = (); # scheme => classname
  
  
  
  sub new
  {
      my($class, $scheme, $ua) = @_;
  
      my $self = bless {
  	scheme => $scheme,
  	ua => $ua,
  
  	# historical/redundant
          max_size => $ua->{max_size},
      }, $class;
  
      $self;
  }
  
  
  sub create
  {
      my($scheme, $ua) = @_;
      my $impclass = LWP::Protocol::implementor($scheme) or
  	Carp::croak("Protocol scheme '$scheme' is not supported");
  
      # hand-off to scheme specific implementation sub-class
      my $protocol = $impclass->new($scheme, $ua);
  
      return $protocol;
  }
  
  
  sub implementor
  {
      my($scheme, $impclass) = @_;
  
      if ($impclass) {
  	$ImplementedBy{$scheme} = $impclass;
      }
      my $ic = $ImplementedBy{$scheme};
      return $ic if $ic;
  
      return '' unless $scheme =~ /^([.+\-\w]+)$/;  # check valid URL schemes
      $scheme = $1; # untaint
      $scheme =~ s/[.+\-]/_/g;  # make it a legal module name
  
      # scheme not yet known, look for a 'use'd implementation
      $ic = "LWP::Protocol::$scheme";  # default location
      $ic = "LWP::Protocol::nntp" if $scheme eq 'news'; #XXX ugly hack
      no strict 'refs';
      # check we actually have one for the scheme:
      unless (@{"${ic}::ISA"}) {
  	# try to autoload it
  	eval "require $ic";
  	if ($@) {
  	    if ($@ =~ /Can't locate/) { #' #emacs get confused by '
  		$ic = '';
  	    }
  	    else {
  		die "$@\n";
  	    }
  	}
      }
      $ImplementedBy{$scheme} = $ic if $ic;
      $ic;
  }
  
  
  sub request
  {
      my($self, $request, $proxy, $arg, $size, $timeout) = @_;
      Carp::croak('LWP::Protocol::request() needs to be overridden in subclasses');
  }
  
  
  # legacy
  sub timeout    { shift->_elem('timeout',    @_); }
  sub max_size   { shift->_elem('max_size',   @_); }
  
  
  sub collect
  {
      my ($self, $arg, $response, $collector) = @_;
      my $content;
      my($ua, $max_size) = @{$self}{qw(ua max_size)};
  
      eval {
  	local $\; # protect the print below from surprises
          if (!defined($arg) || !$response->is_success) {
              $response->{default_add_content} = 1;
          }
          elsif (!ref($arg) && length($arg)) {
              open(my $fh, ">", $arg) or die "Can't write to '$arg': $!";
  	    binmode($fh);
              push(@{$response->{handlers}{response_data}}, {
                  callback => sub {
                      print $fh $_[3] or die "Can't write to '$arg': $!";
                      1;
                  },
              });
              push(@{$response->{handlers}{response_done}}, {
                  callback => sub {
  		    close($fh) or die "Can't write to '$arg': $!";
  		    undef($fh);
  		},
  	    });
          }
          elsif (ref($arg) eq 'CODE') {
              push(@{$response->{handlers}{response_data}}, {
                  callback => sub {
  		    &$arg($_[3], $_[0], $self);
  		    1;
                  },
              });
          }
          else {
              die "Unexpected collect argument '$arg'";
          }
  
          $ua->run_handlers("response_header", $response);
  
          if (delete $response->{default_add_content}) {
              push(@{$response->{handlers}{response_data}}, {
  		callback => sub {
  		    $_[0]->add_content($_[3]);
  		    1;
  		},
  	    });
          }
  
  
          my $content_size = 0;
          my $length = $response->content_length;
          my %skip_h;
  
          while ($content = &$collector, length $$content) {
              for my $h ($ua->handlers("response_data", $response)) {
                  next if $skip_h{$h};
                  unless ($h->{callback}->($response, $ua, $h, $$content)) {
                      # XXX remove from $response->{handlers}{response_data} if present
                      $skip_h{$h}++;
                  }
              }
              $content_size += length($$content);
              $ua->progress(($length ? ($content_size / $length) : "tick"), $response);
              if (defined($max_size) && $content_size > $max_size) {
                  $response->push_header("Client-Aborted", "max_size");
                  last;
              }
          }
      };
      my $err = $@;
      delete $response->{handlers}{response_data};
      delete $response->{handlers} unless %{$response->{handlers}};
      if ($err) {
          chomp($err);
          $response->push_header('X-Died' => $err);
          $response->push_header("Client-Aborted", "die");
          return $response;
      }
  
      return $response;
  }
  
  
  sub collect_once
  {
      my($self, $arg, $response) = @_;
      my $content = \ $_[3];
      my $first = 1;
      $self->collect($arg, $response, sub {
  	return $content if $first--;
  	return \ "";
      });
  }
  
  1;
  
  
  __END__
  
  =head1 NAME
  
  LWP::Protocol - Base class for LWP protocols
  
  =head1 SYNOPSIS
  
   package LWP::Protocol::foo;
   require LWP::Protocol;
   @ISA=qw(LWP::Protocol);
  
  =head1 DESCRIPTION
  
  This class is used a the base class for all protocol implementations
  supported by the LWP library.
  
  When creating an instance of this class using
  C<LWP::Protocol::create($url)>, and you get an initialized subclass
  appropriate for that access method. In other words, the
  LWP::Protocol::create() function calls the constructor for one of its
  subclasses.
  
  All derived LWP::Protocol classes need to override the request()
  method which is used to service a request. The overridden method can
  make use of the collect() function to collect together chunks of data
  as it is received.
  
  The following methods and functions are provided:
  
  =over 4
  
  =item $prot = LWP::Protocol->new()
  
  The LWP::Protocol constructor is inherited by subclasses. As this is a
  virtual base class this method should B<not> be called directly.
  
  =item $prot = LWP::Protocol::create($scheme)
  
  Create an object of the class implementing the protocol to handle the
  given scheme. This is a function, not a method. It is more an object
  factory than a constructor. This is the function user agents should
  use to access protocols.
  
  =item $class = LWP::Protocol::implementor($scheme, [$class])
  
  Get and/or set implementor class for a scheme.  Returns '' if the
  specified scheme is not supported.
  
  =item $prot->request(...)
  
   $response = $protocol->request($request, $proxy, undef);
   $response = $protocol->request($request, $proxy, '/tmp/sss');
   $response = $protocol->request($request, $proxy, \&callback, 1024);
  
  Dispatches a request over the protocol, and returns a response
  object. This method needs to be overridden in subclasses.  Refer to
  L<LWP::UserAgent> for description of the arguments.
  
  =item $prot->collect($arg, $response, $collector)
  
  Called to collect the content of a request, and process it
  appropriately into a scalar, file, or by calling a callback.  If $arg
  is undefined, then the content is stored within the $response.  If
  $arg is a simple scalar, then $arg is interpreted as a file name and
  the content is written to this file.  If $arg is a reference to a
  routine, then content is passed to this routine.
  
  The $collector is a routine that will be called and which is
  responsible for returning pieces (as ref to scalar) of the content to
  process.  The $collector signals EOF by returning a reference to an
  empty string.
  
  The return value from collect() is the $response object reference.
  
  B<Note:> We will only use the callback or file argument if
  $response->is_success().  This avoids sending content data for
  redirects and authentication responses to the callback which would be
  confusing.
  
  =item $prot->collect_once($arg, $response, $content)
  
  Can be called when the whole response content is available as
  $content.  This will invoke collect() with a collector callback that
  returns a reference to $content the first time and an empty string the
  next.
  
  =back
  
  =head1 SEE ALSO
  
  Inspect the F<LWP/Protocol/file.pm> and F<LWP/Protocol/http.pm> files
  for examples of usage.
  
  =head1 COPYRIGHT
  
  Copyright 1995-2001 Gisle Aas.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
LWP_PROTOCOL

    $main::fatpacked{"LWP/Protocol/cpan.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_PROTOCOL_CPAN';
  package LWP::Protocol::cpan;
  
  use strict;
  use vars qw(@ISA);
  
  require LWP::Protocol;
  @ISA = qw(LWP::Protocol);
  
  require URI;
  require HTTP::Status;
  require HTTP::Response;
  
  our $CPAN;
  
  unless ($CPAN) {
      # Try to find local CPAN mirror via $CPAN::Config
      eval {
  	require CPAN::Config;
  	if($CPAN::Config) {
  	    my $urls = $CPAN::Config->{urllist};
  	    if (ref($urls) eq "ARRAY") {
  		my $file;
  		for (@$urls) {
  		    if (/^file:/) {
  			$file = $_;
  			last;
  		    }
  		}
  
  		if ($file) {
  		    $CPAN = $file;
  		}
  		else {
  		    $CPAN = $urls->[0];
  		}
  	    }
  	}
      };
  
      $CPAN ||= "http://cpan.org/";  # last resort
  }
  
  # ensure that we don't chop of last part
  $CPAN .= "/" unless $CPAN =~ m,/$,;
  
  
  sub request {
      my($self, $request, $proxy, $arg, $size) = @_;
      # check proxy
      if (defined $proxy)
      {
  	return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,
  				   'You can not proxy with cpan');
      }
  
      # check method
      my $method = $request->method;
      unless ($method eq 'GET' || $method eq 'HEAD') {
  	return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,
  				   'Library does not allow method ' .
  				   "$method for 'cpan:' URLs");
      }
  
      my $path = $request->uri->path;
      $path =~ s,^/,,;
  
      my $response = HTTP::Response->new(&HTTP::Status::RC_FOUND);
      $response->header("Location" => URI->new_abs($path, $CPAN));
      $response;
  }
  
  1;
LWP_PROTOCOL_CPAN

    $main::fatpacked{"LWP/Protocol/data.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_PROTOCOL_DATA';
  package LWP::Protocol::data;
  
  # Implements access to data:-URLs as specified in RFC 2397
  
  use strict;
  use vars qw(@ISA);
  
  require HTTP::Response;
  require HTTP::Status;
  
  require LWP::Protocol;
  @ISA = qw(LWP::Protocol);
  
  use HTTP::Date qw(time2str);
  require LWP;  # needs version number
  
  sub request
  {
      my($self, $request, $proxy, $arg, $size) = @_;
  
      # check proxy
      if (defined $proxy)
      {
  	return HTTP::Response->new( &HTTP::Status::RC_BAD_REQUEST,
  				  'You can not proxy with data');
      }
  
      # check method
      my $method = $request->method;
      unless ($method eq 'GET' || $method eq 'HEAD') {
  	return HTTP::Response->new( &HTTP::Status::RC_BAD_REQUEST,
  				  'Library does not allow method ' .
  				  "$method for 'data:' URLs");
      }
  
      my $url = $request->uri;
      my $response = HTTP::Response->new( &HTTP::Status::RC_OK, "Document follows");
  
      my $media_type = $url->media_type;
  
      my $data = $url->data;
      $response->header('Content-Type'   => $media_type,
  		      'Content-Length' => length($data),
  		      'Date'           => time2str(time),
  		      'Server'         => "libwww-perl-internal/$LWP::VERSION"
  		     );
  
      $data = "" if $method eq "HEAD";
      return $self->collect_once($arg, $response, $data);
  }
  
  1;
LWP_PROTOCOL_DATA

    $main::fatpacked{"LWP/Protocol/file.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_PROTOCOL_FILE';
  package LWP::Protocol::file;
  
  require LWP::Protocol;
  @ISA = qw(LWP::Protocol);
  
  use strict;
  
  require LWP::MediaTypes;
  require HTTP::Request;
  require HTTP::Response;
  require HTTP::Status;
  require HTTP::Date;
  
  
  sub request
  {
      my($self, $request, $proxy, $arg, $size) = @_;
  
      $size = 4096 unless defined $size and $size > 0;
  
      # check proxy
      if (defined $proxy)
      {
  	return HTTP::Response->new( &HTTP::Status::RC_BAD_REQUEST,
  				  'You can not proxy through the filesystem');
      }
  
      # check method
      my $method = $request->method;
      unless ($method eq 'GET' || $method eq 'HEAD') {
  	return HTTP::Response->new( &HTTP::Status::RC_BAD_REQUEST,
  				  'Library does not allow method ' .
  				  "$method for 'file:' URLs");
      }
  
      # check url
      my $url = $request->uri;
  
      my $scheme = $url->scheme;
      if ($scheme ne 'file') {
  	return HTTP::Response->new( &HTTP::Status::RC_INTERNAL_SERVER_ERROR,
  			   "LWP::Protocol::file::request called for '$scheme'");
      }
  
      # URL OK, look at file
      my $path  = $url->file;
  
      # test file exists and is readable
      unless (-e $path) {
  	return HTTP::Response->new( &HTTP::Status::RC_NOT_FOUND,
  				  "File `$path' does not exist");
      }
      unless (-r _) {
  	return HTTP::Response->new( &HTTP::Status::RC_FORBIDDEN,
  				  'User does not have read permission');
      }
  
      # looks like file exists
      my($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$filesize,
         $atime,$mtime,$ctime,$blksize,$blocks)
  	    = stat(_);
  
      # XXX should check Accept headers?
  
      # check if-modified-since
      my $ims = $request->header('If-Modified-Since');
      if (defined $ims) {
  	my $time = HTTP::Date::str2time($ims);
  	if (defined $time and $time >= $mtime) {
  	    return HTTP::Response->new( &HTTP::Status::RC_NOT_MODIFIED,
  				      "$method $path");
  	}
      }
  
      # Ok, should be an OK response by now...
      my $response = HTTP::Response->new( &HTTP::Status::RC_OK );
  
      # fill in response headers
      $response->header('Last-Modified', HTTP::Date::time2str($mtime));
  
      if (-d _) {         # If the path is a directory, process it
  	# generate the HTML for directory
  	opendir(D, $path) or
  	   return HTTP::Response->new( &HTTP::Status::RC_INTERNAL_SERVER_ERROR,
  				     "Cannot read directory '$path': $!");
  	my(@files) = sort readdir(D);
  	closedir(D);
  
  	# Make directory listing
  	require URI::Escape;
  	require HTML::Entities;
          my $pathe = $path . ( $^O eq 'MacOS' ? ':' : '/');
  	for (@files) {
  	    my $furl = URI::Escape::uri_escape($_);
              if ( -d "$pathe$_" ) {
                  $furl .= '/';
                  $_ .= '/';
              }
  	    my $desc = HTML::Entities::encode($_);
  	    $_ = qq{<LI><A HREF="$furl">$desc</A>};
  	}
  	# Ensure that the base URL is "/" terminated
  	my $base = $url->clone;
  	unless ($base->path =~ m|/$|) {
  	    $base->path($base->path . "/");
  	}
  	my $html = join("\n",
  			"<HTML>\n<HEAD>",
  			"<TITLE>Directory $path</TITLE>",
  			"<BASE HREF=\"$base\">",
  			"</HEAD>\n<BODY>",
  			"<H1>Directory listing of $path</H1>",
  			"<UL>", @files, "</UL>",
  			"</BODY>\n</HTML>\n");
  
  	$response->header('Content-Type',   'text/html');
  	$response->header('Content-Length', length $html);
  	$html = "" if $method eq "HEAD";
  
  	return $self->collect_once($arg, $response, $html);
  
      }
  
      # path is a regular file
      $response->header('Content-Length', $filesize);
      LWP::MediaTypes::guess_media_type($path, $response);
  
      # read the file
      if ($method ne "HEAD") {
  	open(F, $path) or return new
  	    HTTP::Response(&HTTP::Status::RC_INTERNAL_SERVER_ERROR,
  			   "Cannot read file '$path': $!");
  	binmode(F);
  	$response =  $self->collect($arg, $response, sub {
  	    my $content = "";
  	    my $bytes = sysread(F, $content, $size);
  	    return \$content if $bytes > 0;
  	    return \ "";
  	});
  	close(F);
      }
  
      $response;
  }
  
  1;
LWP_PROTOCOL_FILE

    $main::fatpacked{"LWP/Protocol/ftp.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_PROTOCOL_FTP';
  package LWP::Protocol::ftp;
  
  # Implementation of the ftp protocol (RFC 959). We let the Net::FTP
  # package do all the dirty work.
  
  use Carp ();
  
  use HTTP::Status ();
  use HTTP::Negotiate ();
  use HTTP::Response ();
  use LWP::MediaTypes ();
  use File::Listing ();
  
  require LWP::Protocol;
  @ISA = qw(LWP::Protocol);
  
  use strict;
  eval {
      package LWP::Protocol::MyFTP;
  
      require Net::FTP;
      Net::FTP->require_version(2.00);
  
      use vars qw(@ISA);
      @ISA=qw(Net::FTP);
  
      sub new {
  	my $class = shift;
  
  	my $self = $class->SUPER::new(@_) || return undef;
  
  	my $mess = $self->message;  # welcome message
  	$mess =~ s|\n.*||s; # only first line left
  	$mess =~ s|\s*ready\.?$||;
  	# Make the version number more HTTP like
  	$mess =~ s|\s*\(Version\s*|/| and $mess =~ s|\)$||;
  	${*$self}{myftp_server} = $mess;
  	#$response->header("Server", $mess);
  
  	$self;
      }
  
      sub http_server {
  	my $self = shift;
  	${*$self}{myftp_server};
      }
  
      sub home {
  	my $self = shift;
  	my $old = ${*$self}{myftp_home};
  	if (@_) {
  	    ${*$self}{myftp_home} = shift;
  	}
  	$old;
      }
  
      sub go_home {
  	my $self = shift;
  	$self->cwd(${*$self}{myftp_home});
      }
  
      sub request_count {
  	my $self = shift;
  	++${*$self}{myftp_reqcount};
      }
  
      sub ping {
  	my $self = shift;
  	return $self->go_home;
      }
  
  };
  my $init_failed = $@;
  
  
  sub _connect {
      my($self, $host, $port, $user, $account, $password, $timeout) = @_;
  
      my $key;
      my $conn_cache = $self->{ua}{conn_cache};
      if ($conn_cache) {
  	$key = "$host:$port:$user";
  	$key .= ":$account" if defined($account);
  	if (my $ftp = $conn_cache->withdraw("ftp", $key)) {
  	    if ($ftp->ping) {
  		# save it again
  		$conn_cache->deposit("ftp", $key, $ftp);
  		return $ftp;
  	    }
  	}
      }
  
      # try to make a connection
      my $ftp = LWP::Protocol::MyFTP->new($host,
  					Port => $port,
  					Timeout => $timeout,
  					LocalAddr => $self->{ua}{local_address},
  				       );
      # XXX Should be some what to pass on 'Passive' (header??)
      unless ($ftp) {
  	$@ =~ s/^Net::FTP: //;
  	return HTTP::Response->new(&HTTP::Status::RC_INTERNAL_SERVER_ERROR, $@);
      }
  
      unless ($ftp->login($user, $password, $account)) {
  	# Unauthorized.  Let's fake a RC_UNAUTHORIZED response
  	my $mess = scalar($ftp->message);
  	$mess =~ s/\n$//;
  	my $res =  HTTP::Response->new(&HTTP::Status::RC_UNAUTHORIZED, $mess);
  	$res->header("Server", $ftp->http_server);
  	$res->header("WWW-Authenticate", qq(Basic Realm="FTP login"));
  	return $res;
      }
  
      my $home = $ftp->pwd;
      $ftp->home($home);
  
      $conn_cache->deposit("ftp", $key, $ftp) if $conn_cache;
  
      return $ftp;
  }
  
  
  sub request
  {
      my($self, $request, $proxy, $arg, $size, $timeout) = @_;
  
      $size = 4096 unless $size;
  
      # check proxy
      if (defined $proxy)
      {
  	return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,
  				   'You can not proxy through the ftp');
      }
  
      my $url = $request->uri;
      if ($url->scheme ne 'ftp') {
  	my $scheme = $url->scheme;
  	return HTTP::Response->new(&HTTP::Status::RC_INTERNAL_SERVER_ERROR,
  		       "LWP::Protocol::ftp::request called for '$scheme'");
      }
  
      # check method
      my $method = $request->method;
  
      unless ($method eq 'GET' || $method eq 'HEAD' || $method eq 'PUT') {
  	return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,
  				   'Library does not allow method ' .
  				   "$method for 'ftp:' URLs");
      }
  
      if ($init_failed) {
  	return HTTP::Response->new(&HTTP::Status::RC_INTERNAL_SERVER_ERROR,
  				   $init_failed);
      }
  
      my $host     = $url->host;
      my $port     = $url->port;
      my $user     = $url->user;
      my $password = $url->password;
  
      # If a basic authorization header is present than we prefer these over
      # the username/password specified in the URL.
      {
  	my($u,$p) = $request->authorization_basic;
  	if (defined $u) {
  	    $user = $u;
  	    $password = $p;
  	}
      }
  
      # We allow the account to be specified in the "Account" header
      my $account = $request->header('Account');
  
      my $ftp = $self->_connect($host, $port, $user, $account, $password, $timeout);
      return $ftp if ref($ftp) eq "HTTP::Response"; # ugh!
  
      # Create an initial response object
      my $response = HTTP::Response->new(&HTTP::Status::RC_OK, "OK");
      $response->header(Server => $ftp->http_server);
      $response->header('Client-Request-Num' => $ftp->request_count);
      $response->request($request);
  
      # Get & fix the path
      my @path =  grep { length } $url->path_segments;
      my $remote_file = pop(@path);
      $remote_file = '' unless defined $remote_file;
  
      my $type;
      if (ref $remote_file) {
  	my @params;
  	($remote_file, @params) = @$remote_file;
  	for (@params) {
  	    $type = $_ if s/^type=//;
  	}
      }
  
      if ($type && $type eq 'a') {
  	$ftp->ascii;
      }
      else {
  	$ftp->binary;
      }
  
      for (@path) {
  	unless ($ftp->cwd($_)) {
  	    return HTTP::Response->new(&HTTP::Status::RC_NOT_FOUND,
  				       "Can't chdir to $_");
  	}
      }
  
      if ($method eq 'GET' || $method eq 'HEAD') {
  	if (my $mod_time = $ftp->mdtm($remote_file)) {
  	    $response->last_modified($mod_time);
  	    if (my $ims = $request->if_modified_since) {
  		if ($mod_time <= $ims) {
  		    $response->code(&HTTP::Status::RC_NOT_MODIFIED);
  		    $response->message("Not modified");
  		    return $response;
  		}
  	    }
  	}
  
  	# We'll use this later to abort the transfer if necessary. 
  	# if $max_size is defined, we need to abort early. Otherwise, it's
        # a normal transfer
  	my $max_size = undef;
  
  	# Set resume location, if the client requested it
  	if ($request->header('Range') && $ftp->supported('REST'))
  	{
  		my $range_info = $request->header('Range');
  
  		# Change bytes=2772992-6781209 to just 2772992
  		my ($start_byte,$end_byte) = $range_info =~ /.*=\s*(\d+)-(\d+)?/;
  		if ( defined $start_byte && !defined $end_byte ) {
  
  		  # open range -- only the start is specified
  
  		  $ftp->restart( $start_byte );
  		  # don't define $max_size, we don't want to abort early
  		}
  		elsif ( defined $start_byte && defined $end_byte &&
  			$start_byte >= 0 && $end_byte >= $start_byte ) {
  
  		  $ftp->restart( $start_byte );
  		  $max_size = $end_byte - $start_byte;
  		}
  		else {
  
  		  return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,
  		     'Incorrect syntax for Range request');
  		}
  	}
  	elsif ($request->header('Range') && !$ftp->supported('REST'))
  	{
  		return HTTP::Response->new(&HTTP::Status::RC_NOT_IMPLEMENTED,
  	         "Server does not support resume.");
  	}
  
  	my $data;  # the data handle
  	if (length($remote_file) and $data = $ftp->retr($remote_file)) {
  	    my($type, @enc) = LWP::MediaTypes::guess_media_type($remote_file);
  	    $response->header('Content-Type',   $type) if $type;
  	    for (@enc) {
  		$response->push_header('Content-Encoding', $_);
  	    }
  	    my $mess = $ftp->message;
  	    if ($mess =~ /\((\d+)\s+bytes\)/) {
  		$response->header('Content-Length', "$1");
  	    }
  
  	    if ($method ne 'HEAD') {
  		# Read data from server
  		$response = $self->collect($arg, $response, sub {
  		    my $content = '';
  		    my $result = $data->read($content, $size);
  
                      # Stop early if we need to.
                      if (defined $max_size)
                      {
                        # We need an interface to Net::FTP::dataconn for getting
                        # the number of bytes already read
                        my $bytes_received = $data->bytes_read();
  
                        # We were already over the limit. (Should only happen
                        # once at the end.)
                        if ($bytes_received - length($content) > $max_size)
                        {
                          $content = '';
                        }
                        # We just went over the limit
                        elsif ($bytes_received  > $max_size)
                        {
                          # Trim content
                          $content = substr($content, 0,
                            $max_size - ($bytes_received - length($content)) );
                        }
                        # We're under the limit
                        else
                        {
                        }
                      }
  
  		    return \$content;
  		} );
  	    }
  	    # abort is needed for HEAD, it's == close if the transfer has
  	    # already completed.
  	    unless ($data->abort) {
  		# Something did not work too well.  Note that we treat
  		# responses to abort() with code 0 in case of HEAD as ok
  		# (at least wu-ftpd 2.6.1(1) does that).
  		if ($method ne 'HEAD' || $ftp->code != 0) {
  		    $response->code(&HTTP::Status::RC_INTERNAL_SERVER_ERROR);
  		    $response->message("FTP close response: " . $ftp->code .
  				       " " . $ftp->message);
  		}
  	    }
  	}
  	elsif (!length($remote_file) || ( $ftp->code >= 400 && $ftp->code < 600 )) {
  	    # not a plain file, try to list instead
  	    if (length($remote_file) && !$ftp->cwd($remote_file)) {
  		return HTTP::Response->new(&HTTP::Status::RC_NOT_FOUND,
  					   "File '$remote_file' not found");
  	    }
  
  	    # It should now be safe to try to list the directory
  	    my @lsl = $ftp->dir;
  
  	    # Try to figure out if the user want us to convert the
  	    # directory listing to HTML.
  	    my @variants =
  	      (
  	       ['html',  0.60, 'text/html'            ],
  	       ['dir',   1.00, 'text/ftp-dir-listing' ]
  	      );
  	    #$HTTP::Negotiate::DEBUG=1;
  	    my $prefer = HTTP::Negotiate::choose(\@variants, $request);
  
  	    my $content = '';
  
  	    if (!defined($prefer)) {
  		return HTTP::Response->new(&HTTP::Status::RC_NOT_ACCEPTABLE,
  			       "Neither HTML nor directory listing wanted");
  	    }
  	    elsif ($prefer eq 'html') {
  		$response->header('Content-Type' => 'text/html');
  		$content = "<HEAD><TITLE>File Listing</TITLE>\n";
  		my $base = $request->uri->clone;
  		my $path = $base->path;
  		$base->path("$path/") unless $path =~ m|/$|;
  		$content .= qq(<BASE HREF="$base">\n</HEAD>\n);
  		$content .= "<BODY>\n<UL>\n";
  		for (File::Listing::parse_dir(\@lsl, 'GMT')) {
  		    my($name, $type, $size, $mtime, $mode) = @$_;
  		    $content .= qq(  <LI> <a href="$name">$name</a>);
  		    $content .= " $size bytes" if $type eq 'f';
  		    $content .= "\n";
  		}
  		$content .= "</UL></body>\n";
  	    }
  	    else {
  		$response->header('Content-Type', 'text/ftp-dir-listing');
  		$content = join("\n", @lsl, '');
  	    }
  
  	    $response->header('Content-Length', length($content));
  
  	    if ($method ne 'HEAD') {
  		$response = $self->collect_once($arg, $response, $content);
  	    }
  	}
  	else {
  	    my $res = HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,
  			  "FTP return code " . $ftp->code);
  	    $res->content_type("text/plain");
  	    $res->content($ftp->message);
  	    return $res;
  	}
      }
      elsif ($method eq 'PUT') {
  	# method must be PUT
  	unless (length($remote_file)) {
  	    return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,
  				       "Must have a file name to PUT to");
  	}
  	my $data;
  	if ($data = $ftp->stor($remote_file)) {
  	    my $content = $request->content;
  	    my $bytes = 0;
  	    if (defined $content) {
  		if (ref($content) eq 'SCALAR') {
  		    $bytes = $data->write($$content, length($$content));
  		}
  		elsif (ref($content) eq 'CODE') {
  		    my($buf, $n);
  		    while (length($buf = &$content)) {
  			$n = $data->write($buf, length($buf));
  			last unless $n;
  			$bytes += $n;
  		    }
  		}
  		elsif (!ref($content)) {
  		    if (defined $content && length($content)) {
  			$bytes = $data->write($content, length($content));
  		    }
  		}
  		else {
  		    die "Bad content";
  		}
  	    }
  	    $data->close;
  
  	    $response->code(&HTTP::Status::RC_CREATED);
  	    $response->header('Content-Type', 'text/plain');
  	    $response->content("$bytes bytes stored as $remote_file on $host\n")
  
  	}
  	else {
  	    my $res = HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,
  					  "FTP return code " . $ftp->code);
  	    $res->content_type("text/plain");
  	    $res->content($ftp->message);
  	    return $res;
  	}
      }
      else {
  	return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,
  				   "Illegal method $method");
      }
  
      $response;
  }
  
  1;
  
  __END__
  
  # This is what RFC 1738 has to say about FTP access:
  # --------------------------------------------------
  #
  # 3.2. FTP
  #
  #    The FTP URL scheme is used to designate files and directories on
  #    Internet hosts accessible using the FTP protocol (RFC959).
  #
  #    A FTP URL follow the syntax described in Section 3.1.  If :<port> is
  #    omitted, the port defaults to 21.
  #
  # 3.2.1. FTP Name and Password
  #
  #    A user name and password may be supplied; they are used in the ftp
  #    "USER" and "PASS" commands after first making the connection to the
  #    FTP server.  If no user name or password is supplied and one is
  #    requested by the FTP server, the conventions for "anonymous" FTP are
  #    to be used, as follows:
  #
  #         The user name "anonymous" is supplied.
  #
  #         The password is supplied as the Internet e-mail address
  #         of the end user accessing the resource.
  #
  #    If the URL supplies a user name but no password, and the remote
  #    server requests a password, the program interpreting the FTP URL
  #    should request one from the user.
  #
  # 3.2.2. FTP url-path
  #
  #    The url-path of a FTP URL has the following syntax:
  #
  #         <cwd1>/<cwd2>/.../<cwdN>/<name>;type=<typecode>
  #
  #    Where <cwd1> through <cwdN> and <name> are (possibly encoded) strings
  #    and <typecode> is one of the characters "a", "i", or "d".  The part
  #    ";type=<typecode>" may be omitted. The <cwdx> and <name> parts may be
  #    empty. The whole url-path may be omitted, including the "/"
  #    delimiting it from the prefix containing user, password, host, and
  #    port.
  #
  #    The url-path is interpreted as a series of FTP commands as follows:
  #
  #       Each of the <cwd> elements is to be supplied, sequentially, as the
  #       argument to a CWD (change working directory) command.
  #
  #       If the typecode is "d", perform a NLST (name list) command with
  #       <name> as the argument, and interpret the results as a file
  #       directory listing.
  #
  #       Otherwise, perform a TYPE command with <typecode> as the argument,
  #       and then access the file whose name is <name> (for example, using
  #       the RETR command.)
  #
  #    Within a name or CWD component, the characters "/" and ";" are
  #    reserved and must be encoded. The components are decoded prior to
  #    their use in the FTP protocol.  In particular, if the appropriate FTP
  #    sequence to access a particular file requires supplying a string
  #    containing a "/" as an argument to a CWD or RETR command, it is
  #    necessary to encode each "/".
  #
  #    For example, the URL <URL:ftp://myname@host.dom/%2Fetc/motd> is
  #    interpreted by FTP-ing to "host.dom", logging in as "myname"
  #    (prompting for a password if it is asked for), and then executing
  #    "CWD /etc" and then "RETR motd". This has a different meaning from
  #    <URL:ftp://myname@host.dom/etc/motd> which would "CWD etc" and then
  #    "RETR motd"; the initial "CWD" might be executed relative to the
  #    default directory for "myname". On the other hand,
  #    <URL:ftp://myname@host.dom//etc/motd>, would "CWD " with a null
  #    argument, then "CWD etc", and then "RETR motd".
  #
  #    FTP URLs may also be used for other operations; for example, it is
  #    possible to update a file on a remote file server, or infer
  #    information about it from the directory listings. The mechanism for
  #    doing so is not spelled out here.
  #
  # 3.2.3. FTP Typecode is Optional
  #
  #    The entire ;type=<typecode> part of a FTP URL is optional. If it is
  #    omitted, the client program interpreting the URL must guess the
  #    appropriate mode to use. In general, the data content type of a file
  #    can only be guessed from the name, e.g., from the suffix of the name;
  #    the appropriate type code to be used for transfer of the file can
  #    then be deduced from the data content of the file.
  #
  # 3.2.4 Hierarchy
  #
  #    For some file systems, the "/" used to denote the hierarchical
  #    structure of the URL corresponds to the delimiter used to construct a
  #    file name hierarchy, and thus, the filename will look similar to the
  #    URL path. This does NOT mean that the URL is a Unix filename.
  #
  # 3.2.5. Optimization
  #
  #    Clients accessing resources via FTP may employ additional heuristics
  #    to optimize the interaction. For some FTP servers, for example, it
  #    may be reasonable to keep the control connection open while accessing
  #    multiple URLs from the same server. However, there is no common
  #    hierarchical model to the FTP protocol, so if a directory change
  #    command has been given, it is impossible in general to deduce what
  #    sequence should be given to navigate to another directory for a
  #    second retrieval, if the paths are different.  The only reliable
  #    algorithm is to disconnect and reestablish the control connection.
LWP_PROTOCOL_FTP

    $main::fatpacked{"LWP/Protocol/gopher.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_PROTOCOL_GOPHER';
  package LWP::Protocol::gopher;
  
  # Implementation of the gopher protocol (RFC 1436)
  #
  # This code is based on 'wwwgopher.pl,v 0.10 1994/10/17 18:12:34 shelden'
  # which in turn is a vastly modified version of Oscar's http'get()
  # dated 28/3/94 in <ftp://cui.unige.ch/PUBLIC/oscar/scripts/http.pl>
  # including contributions from Marc van Heyningen and Martijn Koster.
  
  use strict;
  use vars qw(@ISA);
  
  require HTTP::Response;
  require HTTP::Status;
  require IO::Socket;
  require IO::Select;
  
  require LWP::Protocol;
  @ISA = qw(LWP::Protocol);
  
  
  my %gopher2mimetype = (
      '0' => 'text/plain',                # 0 file
      '1' => 'text/html',                 # 1 menu
  					# 2 CSO phone-book server
  					# 3 Error
      '4' => 'application/mac-binhex40',  # 4 BinHexed Macintosh file
      '5' => 'application/zip',           # 5 DOS binary archive of some sort
      '6' => 'application/octet-stream',  # 6 UNIX uuencoded file.
      '7' => 'text/html',                 # 7 Index-Search server
  					# 8 telnet session
      '9' => 'application/octet-stream',  # 9 binary file
      'h' => 'text/html',                 # html
      'g' => 'image/gif',                 # gif
      'I' => 'image/*',                   # some kind of image
  );
  
  my %gopher2encoding = (
      '6' => 'x_uuencode',                # 6 UNIX uuencoded file.
  );
  
  sub request
  {
      my($self, $request, $proxy, $arg, $size, $timeout) = @_;
  
      $size = 4096 unless $size;
  
      # check proxy
      if (defined $proxy) {
  	return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,
  				   'You can not proxy through the gopher');
      }
  
      my $url = $request->uri;
      die "bad scheme" if $url->scheme ne 'gopher';
  
  
      my $method = $request->method;
      unless ($method eq 'GET' || $method eq 'HEAD') {
  	return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,
  				   'Library does not allow method ' .
  				   "$method for 'gopher:' URLs");
      }
  
      my $gophertype = $url->gopher_type;
      unless (exists $gopher2mimetype{$gophertype}) {
  	return HTTP::Response->new(&HTTP::Status::RC_NOT_IMPLEMENTED,
  				   'Library does not support gophertype ' .
  				   $gophertype);
      }
  
      my $response = HTTP::Response->new(&HTTP::Status::RC_OK, "OK");
      $response->header('Content-type' => $gopher2mimetype{$gophertype}
  					|| 'text/plain');
      $response->header('Content-Encoding' => $gopher2encoding{$gophertype})
  	if exists $gopher2encoding{$gophertype};
  
      if ($method eq 'HEAD') {
  	# XXX: don't even try it so we set this header
  	$response->header('Client-Warning' => 'Client answer only');
  	return $response;
      }
      
      if ($gophertype eq '7' && ! $url->search) {
        # the url is the prompt for a gopher search; supply boiler-plate
        return $self->collect_once($arg, $response, <<"EOT");
  <HEAD>
  <TITLE>Gopher Index</TITLE>
  <ISINDEX>
  </HEAD>
  <BODY>
  <H1>$url<BR>Gopher Search</H1>
  This is a searchable Gopher index.
  Use the search function of your browser to enter search terms.
  </BODY>
  EOT
      }
  
      my $host = $url->host;
      my $port = $url->port;
  
      my $requestLine = "";
  
      my $selector = $url->selector;
      if (defined $selector) {
  	$requestLine .= $selector;
  	my $search = $url->search;
  	if (defined $search) {
  	    $requestLine .= "\t$search";
  	    my $string = $url->string;
  	    if (defined $string) {
  		$requestLine .= "\t$string";
  	    }
  	}
      }
      $requestLine .= "\015\012";
  
      # potential request headers are just ignored
  
      # Ok, lets make the request
      my $socket = IO::Socket::INET->new(PeerAddr => $host,
  				       PeerPort => $port,
  				       LocalAddr => $self->{ua}{local_address},
  				       Proto    => 'tcp',
  				       Timeout  => $timeout);
      die "Can't connect to $host:$port" unless $socket;
      my $sel = IO::Select->new($socket);
  
      {
  	die "write timeout" if $timeout && !$sel->can_write($timeout);
  	my $n = syswrite($socket, $requestLine, length($requestLine));
  	die $! unless defined($n);
  	die "short write" if $n != length($requestLine);
      }
  
      my $user_arg = $arg;
  
      # must handle menus in a special way since they are to be
      # converted to HTML.  Undefing $arg ensures that the user does
      # not see the data before we get a change to convert it.
      $arg = undef if $gophertype eq '1' || $gophertype eq '7';
  
      # collect response
      my $buf = '';
      $response = $self->collect($arg, $response, sub {
  	die "read timeout" if $timeout && !$sel->can_read($timeout);
          my $n = sysread($socket, $buf, $size);
  	die $! unless defined($n);
  	return \$buf;
        } );
  
      # Convert menu to HTML and return data to user.
      if ($gophertype eq '1' || $gophertype eq '7') {
  	my $content = menu2html($response->content);
  	if (defined $user_arg) {
  	    $response = $self->collect_once($user_arg, $response, $content);
  	}
  	else {
  	    $response->content($content);
  	}
      }
  
      $response;
  }
  
  
  sub gopher2url
  {
      my($gophertype, $path, $host, $port) = @_;
  
      my $url;
  
      if ($gophertype eq '8' || $gophertype eq 'T') {
  	# telnet session
  	$url = $HTTP::URI_CLASS->new($gophertype eq '8' ? 'telnet:':'tn3270:');
  	$url->user($path) if defined $path;
      }
      else {
  	$path = URI::Escape::uri_escape($path);
  	$url = $HTTP::URI_CLASS->new("gopher:/$gophertype$path");
      }
      $url->host($host);
      $url->port($port);
      $url;
  }
  
  sub menu2html {
      my($menu) = @_;
  
      $menu =~ s/\015//g;  # remove carriage return
      my $tmp = <<"EOT";
  <HTML>
  <HEAD>
     <TITLE>Gopher menu</TITLE>
  </HEAD>
  <BODY>
  <H1>Gopher menu</H1>
  EOT
      for (split("\n", $menu)) {
  	last if /^\./;
  	my($pretty, $path, $host, $port) = split("\t");
  
  	$pretty =~ s/^(.)//;
  	my $type = $1;
  
  	my $url = gopher2url($type, $path, $host, $port)->as_string;
  	$tmp .= qq{<A HREF="$url">$pretty</A><BR>\n};
      }
      $tmp .= "</BODY>\n</HTML>\n";
      $tmp;
  }
  
  1;
LWP_PROTOCOL_GOPHER

    $main::fatpacked{"LWP/Protocol/http.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_PROTOCOL_HTTP';
  package LWP::Protocol::http;
  
  use strict;
  
  require HTTP::Response;
  require HTTP::Status;
  require Net::HTTP;
  
  use vars qw(@ISA @EXTRA_SOCK_OPTS);
  
  require LWP::Protocol;
  @ISA = qw(LWP::Protocol);
  
  my $CRLF = "\015\012";
  
  sub _new_socket
  {
      my($self, $host, $port, $timeout) = @_;
  
      # IPv6 literal IP address should be [bracketed] to remove
      # ambiguity between ip address and port number.
      if ( ($host =~ /:/) && ($host !~ /^\[/) ) {
        $host = "[$host]";
      }
  
      local($^W) = 0;  # IO::Socket::INET can be noisy
      my $sock = $self->socket_class->new(PeerAddr => $host,
  					PeerPort => $port,
  					LocalAddr => $self->{ua}{local_address},
  					Proto    => 'tcp',
  					Timeout  => $timeout,
  					KeepAlive => !!$self->{ua}{conn_cache},
  					SendTE    => 1,
  					$self->_extra_sock_opts($host, $port),
  				       );
  
      unless ($sock) {
  	# IO::Socket::INET leaves additional error messages in $@
  	my $status = "Can't connect to $host:$port";
  	if ($@ =~ /\bconnect: (.*)/ ||
  	    $@ =~ /\b(Bad hostname)\b/ ||
  	    $@ =~ /\b(certificate verify failed)\b/ ||
  	    $@ =~ /\b(Crypt-SSLeay can't verify hostnames)\b/
  	) {
  	    $status .= " ($1)";
  	}
  	die "$status\n\n$@";
      }
  
      # perl 5.005's IO::Socket does not have the blocking method.
      eval { $sock->blocking(0); };
  
      $sock;
  }
  
  sub socket_type
  {
      return "http";
  }
  
  sub socket_class
  {
      my $self = shift;
      (ref($self) || $self) . "::Socket";
  }
  
  sub _extra_sock_opts  # to be overridden by subclass
  {
      return @EXTRA_SOCK_OPTS;
  }
  
  sub _check_sock
  {
      #my($self, $req, $sock) = @_;
  }
  
  sub _get_sock_info
  {
      my($self, $res, $sock) = @_;
      if (defined(my $peerhost = $sock->peerhost)) {
          $res->header("Client-Peer" => "$peerhost:" . $sock->peerport);
      }
  }
  
  sub _fixup_header
  {
      my($self, $h, $url, $proxy) = @_;
  
      # Extract 'Host' header
      my $hhost = $url->authority;
      if ($hhost =~ s/^([^\@]*)\@//) {  # get rid of potential "user:pass@"
  	# add authorization header if we need them.  HTTP URLs do
  	# not really support specification of user and password, but
  	# we allow it.
  	if (defined($1) && not $h->header('Authorization')) {
  	    require URI::Escape;
  	    $h->authorization_basic(map URI::Escape::uri_unescape($_),
  				    split(":", $1, 2));
  	}
      }
      $h->init_header('Host' => $hhost);
  
      if ($proxy && $url->scheme ne 'https') {
  	# Check the proxy URI's userinfo() for proxy credentials
  	# export http_proxy="http://proxyuser:proxypass@proxyhost:port".
  	# For https only the initial CONNECT requests needs authorization.
  	my $p_auth = $proxy->userinfo();
  	if(defined $p_auth) {
  	    require URI::Escape;
  	    $h->proxy_authorization_basic(map URI::Escape::uri_unescape($_),
  					  split(":", $p_auth, 2))
  	}
      }
  }
  
  sub hlist_remove {
      my($hlist, $k) = @_;
      $k = lc $k;
      for (my $i = @$hlist - 2; $i >= 0; $i -= 2) {
  	next unless lc($hlist->[$i]) eq $k;
  	splice(@$hlist, $i, 2);
      }
  }
  
  sub request
  {
      my($self, $request, $proxy, $arg, $size, $timeout) = @_;
  
      $size ||= 4096;
  
      # check method
      my $method = $request->method;
      unless ($method =~ /^[A-Za-z0-9_!\#\$%&\'*+\-.^\`|~]+$/) {  # HTTP token
  	return HTTP::Response->new( &HTTP::Status::RC_BAD_REQUEST,
  				  'Library does not allow method ' .
  				  "$method for 'http:' URLs");
      }
  
      my $url = $request->uri;
  
      # Proxying SSL with a http proxy needs issues a CONNECT request to build a
      # tunnel and then upgrades the tunnel to SSL. But when doing keep-alive the
      # https request does not need to be the first request in the connection, so
      # we need to distinguish between
      # - not yet connected (create socket and ssl upgrade)
      # - connected but not inside ssl tunnel (ssl upgrade)
      # - inside ssl tunnel to the target - once we are in the tunnel to the
      #   target we cannot only reuse the tunnel for more https requests with the
      #   same target
  
      my $ssl_tunnel = $proxy && $url->scheme eq 'https'
  	&& $url->host.":".$url->port;
  
      my ($host,$port) = $proxy
  	? ($proxy->host,$proxy->port)
  	: ($url->host,$url->port);
      my $fullpath =
  	$method eq 'CONNECT' ? $url->host . ":" . $url->port :
  	$proxy && ! $ssl_tunnel ? $url->as_string :
  	do {
  	    my $path = $url->path_query;
  	    $path = "/$path" if $path !~m{^/};
  	    $path
  	};
  
      my $socket;
      my $conn_cache = $self->{ua}{conn_cache};
      my $cache_key;
      if ( $conn_cache ) {
  	$cache_key = "$host:$port";
  	# For https we reuse the socket immediatly only if it has an established
  	# tunnel to the target. Otherwise a CONNECT request followed by an SSL
  	# upgrade need to be done first. The request itself might reuse an
  	# existing non-ssl connection to the proxy
  	$cache_key .= "!".$ssl_tunnel if $ssl_tunnel;
  	if ( $socket = $conn_cache->withdraw($self->socket_type,$cache_key)) {
  	    if ($socket->can_read(0)) {
  		# if the socket is readable, then either the peer has closed the
  		# connection or there are some garbage bytes on it.  In either
  		# case we abandon it.
  		$socket->close;
  		$socket = undef;
  	    } # else use $socket
  	}
      }
  
      if ( ! $socket && $ssl_tunnel ) {
  	my $proto_https = LWP::Protocol::create('https',$self->{ua})
  	    or die "no support for scheme https found";
  
  	# only if ssl socket class is IO::Socket::SSL we can upgrade
  	# a plain socket to SSL. In case of Net::SSL we fall back to
  	# the old version
  	if ( my $upgrade_sub = $proto_https->can('_upgrade_sock')) {
  	    my $response = $self->request(
  		HTTP::Request->new('CONNECT',"http://$ssl_tunnel"),
  		$proxy,
  		undef,$size,$timeout
  	    );
  	    $response->is_success or die
  		"establishing SSL tunnel failed: ".$response->status_line;
  	    $socket = $upgrade_sub->($proto_https,
  		$response->{client_socket},$url)
  		or die "SSL upgrade failed: $@";
  	} else {
  	    $socket = $proto_https->_new_socket($url->host,$url->port,$timeout);
  	}
      }
  
      if ( ! $socket ) {
  	# connect to remote site w/o reusing established socket
  	$socket = $self->_new_socket($host, $port, $timeout );
      }
  
      my $http_version = "";
      if (my $proto = $request->protocol) {
  	if ($proto =~ /^(?:HTTP\/)?(1.\d+)$/) {
  	    $http_version = $1;
  	    $socket->http_version($http_version);
  	    $socket->send_te(0) if $http_version eq "1.0";
  	}
      }
  
      $self->_check_sock($request, $socket);
  
      my @h;
      my $request_headers = $request->headers->clone;
      $self->_fixup_header($request_headers, $url, $proxy);
  
      $request_headers->scan(sub {
  			       my($k, $v) = @_;
  			       $k =~ s/^://;
  			       $v =~ s/\n/ /g;
  			       push(@h, $k, $v);
  			   });
  
      my $content_ref = $request->content_ref;
      $content_ref = $$content_ref if ref($$content_ref);
      my $chunked;
      my $has_content;
  
      if (ref($content_ref) eq 'CODE') {
  	my $clen = $request_headers->header('Content-Length');
  	$has_content++ if $clen;
  	unless (defined $clen) {
  	    push(@h, "Transfer-Encoding" => "chunked");
  	    $has_content++;
  	    $chunked++;
  	}
      }
      else {
  	# Set (or override) Content-Length header
  	my $clen = $request_headers->header('Content-Length');
  	if (defined($$content_ref) && length($$content_ref)) {
  	    $has_content = length($$content_ref);
  	    if (!defined($clen) || $clen ne $has_content) {
  		if (defined $clen) {
  		    warn "Content-Length header value was wrong, fixed";
  		    hlist_remove(\@h, 'Content-Length');
  		}
  		push(@h, 'Content-Length' => $has_content);
  	    }
  	}
  	elsif ($clen) {
  	    warn "Content-Length set when there is no content, fixed";
  	    hlist_remove(\@h, 'Content-Length');
  	}
      }
  
      my $write_wait = 0;
      $write_wait = 2
  	if ($request_headers->header("Expect") || "") =~ /100-continue/;
  
      my $req_buf = $socket->format_request($method, $fullpath, @h);
      #print "------\n$req_buf\n------\n";
  
      if (!$has_content || $write_wait || $has_content > 8*1024) {
        WRITE:
          {
              # Since this just writes out the header block it should almost
              # always succeed to send the whole buffer in a single write call.
              my $n = $socket->syswrite($req_buf, length($req_buf));
              unless (defined $n) {
                  redo WRITE if $!{EINTR};
                  if ($!{EWOULDBLOCK} || $!{EAGAIN}) {
                      select(undef, undef, undef, 0.1);
                      redo WRITE;
                  }
                  die "write failed: $!";
              }
              if ($n) {
                  substr($req_buf, 0, $n, "");
              }
              else {
                  select(undef, undef, undef, 0.5);
              }
              redo WRITE if length $req_buf;
          }
      }
  
      my($code, $mess, @junk);
      my $drop_connection;
  
      if ($has_content) {
  	my $eof;
  	my $wbuf;
  	my $woffset = 0;
        INITIAL_READ:
  	if ($write_wait) {
  	    # skip filling $wbuf when waiting for 100-continue
  	    # because if the response is a redirect or auth required
  	    # the request will be cloned and there is no way
  	    # to reset the input stream
  	    # return here via the label after the 100-continue is read
  	}
  	elsif (ref($content_ref) eq 'CODE') {
  	    my $buf = &$content_ref();
  	    $buf = "" unless defined($buf);
  	    $buf = sprintf "%x%s%s%s", length($buf), $CRLF, $buf, $CRLF
  		if $chunked;
  	    substr($buf, 0, 0) = $req_buf if $req_buf;
  	    $wbuf = \$buf;
  	}
  	else {
  	    if ($req_buf) {
  		my $buf = $req_buf . $$content_ref;
  		$wbuf = \$buf;
  	    }
  	    else {
  		$wbuf = $content_ref;
  	    }
  	    $eof = 1;
  	}
  
  	my $fbits = '';
  	vec($fbits, fileno($socket), 1) = 1;
  
        WRITE:
  	while ($write_wait || $woffset < length($$wbuf)) {
  
  	    my $sel_timeout = $timeout;
  	    if ($write_wait) {
  		$sel_timeout = $write_wait if $write_wait < $sel_timeout;
  	    }
  	    my $time_before;
              $time_before = time if $sel_timeout;
  
  	    my $rbits = $fbits;
  	    my $wbits = $write_wait ? undef : $fbits;
              my $sel_timeout_before = $sel_timeout;
            SELECT:
              {
                  my $nfound = select($rbits, $wbits, undef, $sel_timeout);
                  if ($nfound < 0) {
                      if ($!{EINTR} || $!{EWOULDBLOCK} || $!{EAGAIN}) {
                          if ($time_before) {
                              $sel_timeout = $sel_timeout_before - (time - $time_before);
                              $sel_timeout = 0 if $sel_timeout < 0;
                          }
                          redo SELECT;
                      }
                      die "select failed: $!";
                  }
  	    }
  
  	    if ($write_wait) {
  		$write_wait -= time - $time_before;
  		$write_wait = 0 if $write_wait < 0;
  	    }
  
  	    if (defined($rbits) && $rbits =~ /[^\0]/) {
  		# readable
  		my $buf = $socket->_rbuf;
  		my $n = $socket->sysread($buf, 1024, length($buf));
                  unless (defined $n) {
                      die "read failed: $!" unless  $!{EINTR} || $!{EWOULDBLOCK} || $!{EAGAIN};
                      # if we get here the rest of the block will do nothing
                      # and we will retry the read on the next round
                  }
  		elsif ($n == 0) {
                      # the server closed the connection before we finished
                      # writing all the request content.  No need to write any more.
                      $drop_connection++;
                      last WRITE;
  		}
  		$socket->_rbuf($buf);
  		if (!$code && $buf =~ /\015?\012\015?\012/) {
  		    # a whole response header is present, so we can read it without blocking
  		    ($code, $mess, @h) = $socket->read_response_headers(laxed => 1,
  									junk_out => \@junk,
  								       );
  		    if ($code eq "100") {
  			$write_wait = 0;
  			undef($code);
  			goto INITIAL_READ;
  		    }
  		    else {
  			$drop_connection++;
  			last WRITE;
  			# XXX should perhaps try to abort write in a nice way too
  		    }
  		}
  	    }
  	    if (defined($wbits) && $wbits =~ /[^\0]/) {
  		my $n = $socket->syswrite($$wbuf, length($$wbuf), $woffset);
                  unless (defined $n) {
                      die "write failed: $!" unless $!{EINTR} || $!{EWOULDBLOCK} || $!{EAGAIN};
                      $n = 0;  # will retry write on the next round
                  }
                  elsif ($n == 0) {
  		    die "write failed: no bytes written";
  		}
  		$woffset += $n;
  
  		if (!$eof && $woffset >= length($$wbuf)) {
  		    # need to refill buffer from $content_ref code
  		    my $buf = &$content_ref();
  		    $buf = "" unless defined($buf);
  		    $eof++ unless length($buf);
  		    $buf = sprintf "%x%s%s%s", length($buf), $CRLF, $buf, $CRLF
  			if $chunked;
  		    $wbuf = \$buf;
  		    $woffset = 0;
  		}
  	    }
  	} # WRITE
      }
  
      ($code, $mess, @h) = $socket->read_response_headers(laxed => 1, junk_out => \@junk)
  	unless $code;
      ($code, $mess, @h) = $socket->read_response_headers(laxed => 1, junk_out => \@junk)
  	if $code eq "100";
  
      my $response = HTTP::Response->new($code, $mess);
      my $peer_http_version = $socket->peer_http_version;
      $response->protocol("HTTP/$peer_http_version");
      {
  	local $HTTP::Headers::TRANSLATE_UNDERSCORE;
  	$response->push_header(@h);
      }
      $response->push_header("Client-Junk" => \@junk) if @junk;
  
      $response->request($request);
      $self->_get_sock_info($response, $socket);
  
      if ($method eq "CONNECT") {
  	$response->{client_socket} = $socket;  # so it can be picked up
  	return $response;
      }
  
      if (my @te = $response->remove_header('Transfer-Encoding')) {
  	$response->push_header('Client-Transfer-Encoding', \@te);
      }
      $response->push_header('Client-Response-Num', scalar $socket->increment_response_count);
  
      my $complete;
      $response = $self->collect($arg, $response, sub {
  	my $buf = ""; #prevent use of uninitialized value in SSLeay.xs
  	my $n;
        READ:
  	{
  	    $n = $socket->read_entity_body($buf, $size);
              unless (defined $n) {
                  redo READ if $!{EINTR} || $!{EWOULDBLOCK} || $!{EAGAIN} || $!{ENOTTY};
                  die "read failed: $!";
              }
  	    redo READ if $n == -1;
  	}
  	$complete++ if !$n;
          return \$buf;
      } );
      $drop_connection++ unless $complete;
  
      @h = $socket->get_trailers;
      if (@h) {
  	local $HTTP::Headers::TRANSLATE_UNDERSCORE;
  	$response->push_header(@h);
      }
  
      # keep-alive support
      unless ($drop_connection) {
  	if ($cache_key) {
  	    my %connection = map { (lc($_) => 1) }
  		             split(/\s*,\s*/, ($response->header("Connection") || ""));
  	    if (($peer_http_version eq "1.1" && !$connection{close}) ||
  		$connection{"keep-alive"})
  	    {
  		$conn_cache->deposit($self->socket_type, $cache_key, $socket);
  	    }
  	}
      }
  
      $response;
  }
  
  
  #-----------------------------------------------------------
  package LWP::Protocol::http::SocketMethods;
  
  sub ping {
      my $self = shift;
      !$self->can_read(0);
  }
  
  sub increment_response_count {
      my $self = shift;
      return ++${*$self}{'myhttp_response_count'};
  }
  
  #-----------------------------------------------------------
  package LWP::Protocol::http::Socket;
  use vars qw(@ISA);
  @ISA = qw(LWP::Protocol::http::SocketMethods Net::HTTP);
  
  1;
LWP_PROTOCOL_HTTP

    $main::fatpacked{"LWP/Protocol/http/SocketUnixAlt.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_PROTOCOL_HTTP_SOCKETUNIXALT';
  package LWP::Protocol::http::SocketUnixAlt;
  
  use 5.010001;
  use strict;
  use warnings;
  use vars qw( @ISA $VERSION );
  use IO::Socket;
  use LWP::Protocol::http;
  
  @ISA = qw( LWP::Protocol::http );
  
  our $VERSION = '0.0204'; # VERSION
  
  sub _new_socket {
  	my ($self, $path, $timeout) = @_;
  
  	local($^W) = 0;
  	my $sock = $self->socket_class->new(
  			Peer	=> $path,
  			Type	=> SOCK_STREAM,
  			Timeout	=> $timeout,
  			Host    => 'localhost',
  	);
  
  	unless($sock) {
  		$@ =~ s/^.*?: //;
  		die "Can't open socket $path\: $@";
  	}
  
  	eval { $sock->blocking(0); };
  
  	$sock;
  }
  
  sub request {
      my($self, $request, undef, $arg, $size, $timeout) = @_;
      #LWP::Debug::trace('()');
  
      $size ||= 4096;
  
      # check method
      my $method = $request->method;
      unless ($method =~ /^[A-Za-z0-9_!\#\$%&\'*+\-.^\`|~]+$/) {  # HTTP token
  		return new HTTP::Response &HTTP::Status::RC_BAD_REQUEST,
  				  'Library does not allow method ' .
  				  "$method for 'http:' URLs";
      }
  
      my $url = $request->url;
  	my $path = $url->path_query;
  	my $fullpath;
  	if ($path =~ s!/(/.+)!!) {
  		$fullpath = $1;
  	} else {
  		$fullpath = "/";
  	}
  
      # connect to remote site
      my $socket = $self->_new_socket($path, $timeout);
      $self->_check_sock($request, $socket);
  
      my @h;
      my $request_headers = $request->headers->clone;
      $self->_fixup_header($request_headers, $url);
  
      $request_headers->scan(sub {
  			       my($k, $v) = @_;
  			       $v =~ s/\n/ /g;
  			       push(@h, $k, $v);
  			   });
  
      my $content_ref = $request->content_ref;
      $content_ref = $$content_ref if ref($$content_ref);
      my $chunked;
      my $has_content;
  
      if (ref($content_ref) eq 'CODE') {
  		my $clen = $request_headers->header('Content-Length');
  		$has_content++ if $clen;
  		unless (defined $clen) {
  			push(@h, "Transfer-Encoding" => "chunked");
  			$has_content++;
  			$chunked++;
  		}
      } else {
  		# Set (or override) Content-Length header
  		my $clen = $request_headers->header('Content-Length');
  		if (defined($$content_ref) && length($$content_ref)) {
  			$has_content++;
  			if (!defined($clen) || $clen ne length($$content_ref)) {
  				if (defined $clen) {
  					warn "Content-Length header value was wrong, fixed";
  					hlist_remove(\@h, 'Content-Length');
  				}
  				push(@h, 'Content-Length' => length($$content_ref));
  			}
  		} elsif ($clen) {
  			warn "Content-Length set when there is not content, fixed";
  			hlist_remove(\@h, 'Content-Length');
  		}
      }
  
      my $req_buf = $socket->format_request($method, $fullpath, @h);
      #print "------\n$req_buf\n------\n";
  
      # XXX need to watch out for write timeouts
      {
  		my $n = $socket->syswrite($req_buf, length($req_buf));
  		die $! unless defined($n);
  		die "short write" unless $n == length($req_buf);
  		#LWP::Debug::conns($req_buf);
      }
  
      my($code, $mess, @junk);
  
      if ($has_content) {
  		my $write_wait = 0;
  		$write_wait = 2
  			if ($request_headers->header("Expect") || "") =~ /100-continue/;
  
  		my $eof;
  		my $wbuf;
  		my $woffset = 0;
  		if (ref($content_ref) eq 'CODE') {
  			my $buf = &$content_ref();
  			$buf = "" unless defined($buf);
  			$buf = sprintf "%x%s%s%s", length($buf), $LWP::Protocol::http::CRLF,
  				$buf, $LWP::Protocol::http::CRLF if $chunked;
  			$wbuf = \$buf;
  		} else {
  			$wbuf = $content_ref;
  			$eof = 1;
  		}
  
  		my $fbits = '';
  		vec($fbits, fileno($socket), 1) = 1;
  
  		while ($woffset < length($$wbuf)) {
  
  			my $time_before;
  			my $sel_timeout = $timeout;
  			if ($write_wait) {
  				$time_before = time;
  				$sel_timeout = $write_wait if $write_wait < $sel_timeout;
  			}
  
  			my $rbits = $fbits;
  			my $wbits = $write_wait ? undef : $fbits;
  			my $nfound = select($rbits, $wbits, undef, $sel_timeout);
  			unless (defined $nfound) {
  				die "select failed: $!";
  			}
  
  			if ($write_wait) {
  				$write_wait -= time - $time_before;
  				$write_wait = 0 if $write_wait < 0;
  			}
  
  			if (defined($rbits) && $rbits =~ /[^\0]/) {
  				# readable
  				my $buf = $socket->_rbuf;
  				my $n = $socket->sysread($buf, 1024, length($buf));
  				unless ($n) {
  					die "EOF";
  				}
  				$socket->_rbuf($buf);
  				if ($buf =~ /\015?\012\015?\012/) {
  					# a whole response present
  					($code, $mess, @h) = $socket->read_response_headers(laxed => 1,
  											junk_out => \@junk,
  											   );
  					if ($code eq "100") {
  						$write_wait = 0;
  						undef($code);
  					} else {
  						last;
  						# XXX should perhaps try to abort write in a nice way too
  					}
  				}
  			}
  			if (defined($wbits) && $wbits =~ /[^\0]/) {
  				my $n = $socket->syswrite($$wbuf, length($$wbuf), $woffset);
  				unless ($n) {
  					die "syswrite: $!" unless defined $n;
  					die "syswrite: no bytes written";
  				}
  				$woffset += $n;
  
  				if (!$eof && $woffset >= length($$wbuf)) {
  					# need to refill buffer from $content_ref code
  					my $buf = &$content_ref();
  					$buf = "" unless defined($buf);
  					$eof++ unless length($buf);
  					$buf = sprintf "%x%s%s%s", length($buf), $LWP::Protocol::http::CRLF,
  						$buf, $LWP::Protocol::http::CRLF if $chunked;
  					$wbuf = \$buf;
  					$woffset = 0;
  				}
  			}
  		}
      }
  
      ($code, $mess, @h) = $socket->read_response_headers(laxed => 1, junk_out => \@junk)
  	unless $code;
      ($code, $mess, @h) = $socket->read_response_headers(laxed => 1, junk_out => \@junk)
  	if $code eq "100";
  
      my $response = HTTP::Response->new($code, $mess);
      my $peer_http_version = $socket->peer_http_version;
      $response->protocol("HTTP/$peer_http_version");
      while (@h) {
  		my($k, $v) = splice(@h, 0, 2);
  		$response->push_header($k, $v);
      }
      $response->push_header("Client-Junk" => \@junk) if @junk;
  
      $response->request($request);
      $self->_get_sock_info($response, $socket);
  
      if ($method eq "CONNECT") {
  		$response->{client_socket} = $socket;  # so it can be picked up
  		return $response;
      }
  
      if (my @te = $response->remove_header('Transfer-Encoding')) {
  		$response->push_header('Client-Transfer-Encoding', \@te);
      }
      $response->push_header('Client-Response-Num', $socket->increment_response_count);
  
      my $complete;
      $response = $self->collect($arg, $response, sub {
  		my $buf = ""; #prevent use of uninitialized value in SSLeay.xs
  		my $n;
  		READ:
  		{
  			$n = $socket->read_entity_body($buf, $size);
  			die "Can't read entity body: $!" unless defined $n;
  			redo READ if $n == -1;
  		}
  		$complete++ if !$n;
  			return \$buf;
      } );
  
      @h = $socket->get_trailers;
      while (@h) {
  		my($k, $v) = splice(@h, 0, 2);
  		$response->push_header($k, $v);
      }
  
      $response;
  }
  
  package LWP::Protocol::http::SocketUnixAlt::Socket;
  
  use strict;
  use warnings;
  use vars qw( @ISA );
  
  @ISA =qw(	LWP::Protocol::http::SocketMethods
  			Net::HTTP::Methods
  			IO::Socket::UNIX
  		);
  
  sub configure {
  	my ($self, $cnf) = @_;
  	$self->http_configure($cnf);
  }
  
  sub http_connect {
  	my ($self, $cnf) = @_;
  	$self->SUPER::configure($cnf);
  }
  
  # Just to avoid some errors. We don't really need this.
  sub peerport { }
  sub peerhost { }
  
  1;
  # ABSTRACT: Speak HTTP through Unix sockets
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  LWP::Protocol::http::SocketUnixAlt - Speak HTTP through Unix sockets
  
  =head1 VERSION
  
  version 0.0204
  
  =head1 SYNOPSIS
  
    use LWP::Protocol::http::SocketUnixAlt;
    LWP::Protocol::implementor( http => 'LWP::Protocol::http::SocketUnixAlt' );
    ...
  
  =head1 DESCRIPTION
  
  LWP::Protocol::http::UnixSocketAlt is a fork of Florian Ragwitz's
  L<LWP::Protocol::http::SocketUnix> 0.02. It fixes a few issues including:
  
  =over 4
  
  =item * remedy 'No Host options provided' error
  
  As suggested in https://rt.cpan.org/Public/Bug/Display.html?id=65670
  
  =item * allow specifying URI path
  
  Currently using "//" as separator, e.g.: "http:path/to/unix.socket//uri/path"
  
  =back
  
  =head1 SEE ALSO
  
  L<LWP>, L<LWP::Protocol>
  
  L<HTTP::Daemon::UNIX>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/LWP-Protocol-http-SocketUnixAlt>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-LWP-Protocol-http-SocketUnixAlt>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=LWP-Protocol-http-SocketUnixAlt>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  Steven Haryanto <stevenharyanto@gmail.com>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by Steven Haryanto.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LWP_PROTOCOL_HTTP_SOCKETUNIXALT

    $main::fatpacked{"LWP/Protocol/loopback.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_PROTOCOL_LOOPBACK';
  package LWP::Protocol::loopback;
  
  use strict;
  use vars qw(@ISA);
  require HTTP::Response;
  
  require LWP::Protocol;
  @ISA = qw(LWP::Protocol);
  
  sub request {
      my($self, $request, $proxy, $arg, $size, $timeout) = @_;
  
      my $response = HTTP::Response->new(200, "OK");
      $response->content_type("message/http; msgtype=request");
  
      $response->header("Via", "loopback/1.0 $proxy")
  	if $proxy;
  
      $response->header("X-Arg", $arg);
      $response->header("X-Read-Size", $size);
      $response->header("X-Timeout", $timeout);
  
      return $self->collect_once($arg, $response, $request->as_string);
  }
  
  1;
LWP_PROTOCOL_LOOPBACK

    $main::fatpacked{"LWP/Protocol/mailto.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_PROTOCOL_MAILTO';
  package LWP::Protocol::mailto;
  
  # This module implements the mailto protocol.  It is just a simple
  # frontend to the Unix sendmail program except on MacOS, where it uses
  # Mail::Internet.
  
  require LWP::Protocol;
  require HTTP::Request;
  require HTTP::Response;
  require HTTP::Status;
  
  use Carp;
  use strict;
  use vars qw(@ISA $SENDMAIL);
  
  @ISA = qw(LWP::Protocol);
  
  unless ($SENDMAIL = $ENV{SENDMAIL}) {
      for my $sm (qw(/usr/sbin/sendmail
  		   /usr/lib/sendmail
  		   /usr/ucblib/sendmail
  		  ))
      {
  	if (-x $sm) {
  	    $SENDMAIL = $sm;
  	    last;
  	}
      }
      die "Can't find the 'sendmail' program" unless $SENDMAIL;
  }
  
  sub request
  {
      my($self, $request, $proxy, $arg, $size) = @_;
  
      my ($mail, $addr) if $^O eq "MacOS";
      my @text = () if $^O eq "MacOS";
  
      # check proxy
      if (defined $proxy)
      {
  	return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,
  				  'You can not proxy with mail');
      }
  
      # check method
      my $method = $request->method;
  
      if ($method ne 'POST') {
  	return HTTP::Response->new( &HTTP::Status::RC_BAD_REQUEST,
  				  'Library does not allow method ' .
  				  "$method for 'mailto:' URLs");
      }
  
      # check url
      my $url = $request->uri;
  
      my $scheme = $url->scheme;
      if ($scheme ne 'mailto') {
  	return HTTP::Response->new( &HTTP::Status::RC_INTERNAL_SERVER_ERROR,
  			 "LWP::Protocol::mailto::request called for '$scheme'");
      }
      if ($^O eq "MacOS") {
  	eval {
  	    require Mail::Internet;
  	};
  	if($@) {
  	    return HTTP::Response->new( &HTTP::Status::RC_INTERNAL_SERVER_ERROR,
  	               "You don't have MailTools installed");
  	}
  	unless ($ENV{SMTPHOSTS}) {
  	    return HTTP::Response->new( &HTTP::Status::RC_INTERNAL_SERVER_ERROR,
  	               "You don't have SMTPHOSTS defined");
  	}
      }
      else {
  	unless (-x $SENDMAIL) {
  	    return HTTP::Response->new( &HTTP::Status::RC_INTERNAL_SERVER_ERROR,
  	               "You don't have $SENDMAIL");
      }
      }
      if ($^O eq "MacOS") {
  	    $mail = Mail::Internet->new or
  	    return HTTP::Response->new( &HTTP::Status::RC_INTERNAL_SERVER_ERROR,
  	    "Can't get a Mail::Internet object");
      }
      else {
  	open(SENDMAIL, "| $SENDMAIL -oi -t") or
  	    return HTTP::Response->new( &HTTP::Status::RC_INTERNAL_SERVER_ERROR,
  	               "Can't run $SENDMAIL: $!");
      }
      if ($^O eq "MacOS") {
  	$addr = $url->encoded822addr;
      }
      else {
  	$request = $request->clone;  # we modify a copy
  	my @h = $url->headers;  # URL headers override those in the request
  	while (@h) {
  	    my $k = shift @h;
  	    my $v = shift @h;
  	    next unless defined $v;
  	    if (lc($k) eq "body") {
  		$request->content($v);
  	    }
  	    else {
  		$request->push_header($k => $v);
  	    }
  	}
      }
      if ($^O eq "MacOS") {
  	$mail->add(To => $addr);
  	$mail->add(split(/[:\n]/,$request->headers_as_string));
      }
      else {
  	print SENDMAIL $request->headers_as_string;
  	print SENDMAIL "\n";
      }
      my $content = $request->content;
      if (defined $content) {
  	my $contRef = ref($content) ? $content : \$content;
  	if (ref($contRef) eq 'SCALAR') {
  	    if ($^O eq "MacOS") {
  		@text = split("\n",$$contRef);
  		foreach (@text) {
  		    $_ .= "\n";
  		}
  	    }
  	    else {
  	    print SENDMAIL $$contRef;
  	    }
  
  	}
  	elsif (ref($contRef) eq 'CODE') {
  	    # Callback provides data
  	    my $d;
  	    if ($^O eq "MacOS") {
  		my $stuff = "";
  		while (length($d = &$contRef)) {
  		    $stuff .= $d;
  		}
  		@text = split("\n",$stuff);
  		foreach (@text) {
  		    $_ .= "\n";
  		}
  	    }
  	    else {
  		print SENDMAIL $d;
  	    }
  	}
      }
      if ($^O eq "MacOS") {
  	$mail->body(\@text);
  	unless ($mail->smtpsend) {
  	    return HTTP::Response->new(&HTTP::Status::RC_INTERNAL_SERVER_ERROR,
  				       "Mail::Internet->smtpsend unable to send message to <$addr>");
  	}
      }
      else {
  	unless (close(SENDMAIL)) {
  	    my $err = $! ? "$!" : "Exit status $?";
  	    return HTTP::Response->new(&HTTP::Status::RC_INTERNAL_SERVER_ERROR,
  				       "$SENDMAIL: $err");
  	}
      }
  
  
      my $response = HTTP::Response->new(&HTTP::Status::RC_ACCEPTED,
  				       "Mail accepted");
      $response->header('Content-Type', 'text/plain');
      if ($^O eq "MacOS") {
  	$response->header('Server' => "Mail::Internet $Mail::Internet::VERSION");
  	$response->content("Message sent to <$addr>\n");
      }
      else {
  	$response->header('Server' => $SENDMAIL);
  	my $to = $request->header("To");
  	$response->content("Message sent to <$to>\n");
      }
  
      return $response;
  }
  
  1;
LWP_PROTOCOL_MAILTO

    $main::fatpacked{"LWP/Protocol/nntp.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_PROTOCOL_NNTP';
  package LWP::Protocol::nntp;
  
  # Implementation of the Network News Transfer Protocol (RFC 977)
  
  require LWP::Protocol;
  @ISA = qw(LWP::Protocol);
  
  require HTTP::Response;
  require HTTP::Status;
  require Net::NNTP;
  
  use strict;
  
  
  sub request
  {
      my($self, $request, $proxy, $arg, $size, $timeout) = @_;
  
      $size = 4096 unless $size;
  
      # Check for proxy
      if (defined $proxy) {
  	return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,
  				   'You can not proxy through NNTP');
      }
  
      # Check that the scheme is as expected
      my $url = $request->uri;
      my $scheme = $url->scheme;
      unless ($scheme eq 'news' || $scheme eq 'nntp') {
  	return HTTP::Response->new(&HTTP::Status::RC_INTERNAL_SERVER_ERROR,
  				   "LWP::Protocol::nntp::request called for '$scheme'");
      }
  
      # check for a valid method
      my $method = $request->method;
      unless ($method eq 'GET' || $method eq 'HEAD' || $method eq 'POST') {
  	return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,
  				   'Library does not allow method ' .
  				   "$method for '$scheme:' URLs");
      }
  
      # extract the identifier and check against posting to an article
      my $groupart = $url->_group;
      my $is_art = $groupart =~ /@/;
  
      if ($is_art && $method eq 'POST') {
  	return HTTP::Response->new(&HTTP::Status::RC_BAD_REQUEST,
  				   "Can't post to an article <$groupart>");
      }
  
      my $nntp = Net::NNTP->new($url->host,
  			      #Port    => 18574,
  			      Timeout => $timeout,
  			      #Debug   => 1,
  			     );
      die "Can't connect to nntp server" unless $nntp;
  
      # Check the initial welcome message from the NNTP server
      if ($nntp->status != 2) {
  	return HTTP::Response->new(&HTTP::Status::RC_SERVICE_UNAVAILABLE,
  				   $nntp->message);
      }
      my $response = HTTP::Response->new(&HTTP::Status::RC_OK, "OK");
  
      my $mess = $nntp->message;
  
      # Try to extract server name from greeting message.
      # Don't know if this works well for a large class of servers, but
      # this works for our server.
      $mess =~ s/\s+ready\b.*//;
      $mess =~ s/^\S+\s+//;
      $response->header(Server => $mess);
  
      # First we handle posting of articles
      if ($method eq 'POST') {
  	$nntp->quit; $nntp = undef;
  	$response->code(&HTTP::Status::RC_NOT_IMPLEMENTED);
  	$response->message("POST not implemented yet");
  	return $response;
      }
  
      # The method must be "GET" or "HEAD" by now
      if (!$is_art) {
  	if (!$nntp->group($groupart)) {
  	    $response->code(&HTTP::Status::RC_NOT_FOUND);
  	    $response->message($nntp->message);
  	}
  	$nntp->quit; $nntp = undef;
  	# HEAD: just check if the group exists
  	if ($method eq 'GET' && $response->is_success) {
  	    $response->code(&HTTP::Status::RC_NOT_IMPLEMENTED);
  	    $response->message("GET newsgroup not implemented yet");
  	}
  	return $response;
      }
  
      # Send command to server to retrieve an article (or just the headers)
      my $get = $method eq 'HEAD' ? "head" : "article";
      my $art = $nntp->$get("<$groupart>");
      unless ($art) {
  	$nntp->quit; $nntp = undef;
  	$response->code(&HTTP::Status::RC_NOT_FOUND);
  	$response->message($nntp->message);
  	return $response;
      }
  
      # Parse headers
      my($key, $val);
      local $_;
      while ($_ = shift @$art) {
  	if (/^\s+$/) {
  	    last;  # end of headers
  	}
  	elsif (/^(\S+):\s*(.*)/) {
  	    $response->push_header($key, $val) if $key;
  	    ($key, $val) = ($1, $2);
  	}
  	elsif (/^\s+(.*)/) {
  	    next unless $key;
  	    $val .= $1;
  	}
  	else {
  	    unshift(@$art, $_);
  	    last;
  	}
      }
      $response->push_header($key, $val) if $key;
  
      # Ensure that there is a Content-Type header
      $response->header("Content-Type", "text/plain")
  	unless $response->header("Content-Type");
  
      # Collect the body
      $response = $self->collect_once($arg, $response, join("", @$art))
        if @$art;
  
      # Say goodbye to the server
      $nntp->quit;
      $nntp = undef;
  
      $response;
  }
  
  1;
LWP_PROTOCOL_NNTP

    $main::fatpacked{"LWP/Protocol/nogo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_PROTOCOL_NOGO';
  package LWP::Protocol::nogo;
  # If you want to disable access to a particular scheme, use this
  # class and then call
  #   LWP::Protocol::implementor(that_scheme, 'LWP::Protocol::nogo');
  # For then on, attempts to access URLs with that scheme will generate
  # a 500 error.
  
  use strict;
  use vars qw(@ISA);
  require HTTP::Response;
  require HTTP::Status;
  require LWP::Protocol;
  @ISA = qw(LWP::Protocol);
  
  sub request {
      my($self, $request) = @_;
      my $scheme = $request->uri->scheme;
      
      return HTTP::Response->new(
        &HTTP::Status::RC_INTERNAL_SERVER_ERROR,
        "Access to \'$scheme\' URIs has been disabled"
      );
  }
  1;
LWP_PROTOCOL_NOGO

    $main::fatpacked{"LWP/RobotUA.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_ROBOTUA';
  package LWP::RobotUA;
  
  require LWP::UserAgent;
  @ISA = qw(LWP::UserAgent);
  $VERSION = "6.15";
  
  require WWW::RobotRules;
  require HTTP::Request;
  require HTTP::Response;
  
  use Carp ();
  use HTTP::Status ();
  use HTTP::Date qw(time2str);
  use strict;
  
  
  #
  # Additional attributes in addition to those found in LWP::UserAgent:
  #
  # $self->{'delay'}    Required delay between request to the same
  #                     server in minutes.
  #
  # $self->{'rules'}     A WWW::RobotRules object
  #
  
  sub new
  {
      my $class = shift;
      my %cnf;
      if (@_ < 4) {
  	# legacy args
  	@cnf{qw(agent from rules)} = @_;
      }
      else {
  	%cnf = @_;
      }
  
      Carp::croak('LWP::RobotUA agent required') unless $cnf{agent};
      Carp::croak('LWP::RobotUA from address required')
  	unless $cnf{from} && $cnf{from} =~ m/\@/;
  
      my $delay = delete $cnf{delay} || 1;
      my $use_sleep = delete $cnf{use_sleep};
      $use_sleep = 1 unless defined($use_sleep);
      my $rules = delete $cnf{rules};
  
      my $self = LWP::UserAgent->new(%cnf);
      $self = bless $self, $class;
  
      $self->{'delay'} = $delay;   # minutes
      $self->{'use_sleep'} = $use_sleep;
  
      if ($rules) {
  	$rules->agent($cnf{agent});
  	$self->{'rules'} = $rules;
      }
      else {
  	$self->{'rules'} = WWW::RobotRules->new($cnf{agent});
      }
  
      $self;
  }
  
  
  sub delay     { shift->_elem('delay',     @_); }
  sub use_sleep { shift->_elem('use_sleep', @_); }
  
  
  sub agent
  {
      my $self = shift;
      my $old = $self->SUPER::agent(@_);
      if (@_) {
  	# Changing our name means to start fresh
  	$self->{'rules'}->agent($self->{'agent'}); 
      }
      $old;
  }
  
  
  sub rules {
      my $self = shift;
      my $old = $self->_elem('rules', @_);
      $self->{'rules'}->agent($self->{'agent'}) if @_;
      $old;
  }
  
  
  sub no_visits
  {
      my($self, $netloc) = @_;
      $self->{'rules'}->no_visits($netloc) || 0;
  }
  
  *host_count = \&no_visits;  # backwards compatibility with LWP-5.02
  
  
  sub host_wait
  {
      my($self, $netloc) = @_;
      return undef unless defined $netloc;
      my $last = $self->{'rules'}->last_visit($netloc);
      if ($last) {
  	my $wait = int($self->{'delay'} * 60 - (time - $last));
  	$wait = 0 if $wait < 0;
  	return $wait;
      }
      return 0;
  }
  
  
  sub simple_request
  {
      my($self, $request, $arg, $size) = @_;
  
      # Do we try to access a new server?
      my $allowed = $self->{'rules'}->allowed($request->uri);
  
      if ($allowed < 0) {
  	# Host is not visited before, or robots.txt expired; fetch "robots.txt"
  	my $robot_url = $request->uri->clone;
  	$robot_url->path("robots.txt");
  	$robot_url->query(undef);
  
  	# make access to robot.txt legal since this will be a recursive call
  	$self->{'rules'}->parse($robot_url, ""); 
  
  	my $robot_req = HTTP::Request->new('GET', $robot_url);
  	my $parse_head = $self->parse_head(0);
  	my $robot_res = $self->request($robot_req);
  	$self->parse_head($parse_head);
  	my $fresh_until = $robot_res->fresh_until;
  	my $content = "";
  	if ($robot_res->is_success && $robot_res->content_is_text) {
  	    $content = $robot_res->decoded_content;
  	    $content = "" unless $content && $content =~ /^\s*Disallow\s*:/mi;
  	}
  	$self->{'rules'}->parse($robot_url, $content, $fresh_until);
  
  	# recalculate allowed...
  	$allowed = $self->{'rules'}->allowed($request->uri);
      }
  
      # Check rules
      unless ($allowed) {
  	my $res = HTTP::Response->new(
  	  &HTTP::Status::RC_FORBIDDEN, 'Forbidden by robots.txt');
  	$res->request( $request ); # bind it to that request
  	return $res;
      }
  
      my $netloc = eval { local $SIG{__DIE__}; $request->uri->host_port; };
      my $wait = $self->host_wait($netloc);
  
      if ($wait) {
  	if ($self->{'use_sleep'}) {
  	    sleep($wait)
  	}
  	else {
  	    my $res = HTTP::Response->new(
  	      &HTTP::Status::RC_SERVICE_UNAVAILABLE, 'Please, slow down');
  	    $res->header('Retry-After', time2str(time + $wait));
  	    $res->request( $request ); # bind it to that request
  	    return $res;
  	}
      }
  
      # Perform the request
      my $res = $self->SUPER::simple_request($request, $arg, $size);
  
      $self->{'rules'}->visit($netloc);
  
      $res;
  }
  
  
  sub as_string
  {
      my $self = shift;
      my @s;
      push(@s, "Robot: $self->{'agent'} operated by $self->{'from'}  [$self]");
      push(@s, "    Minimum delay: " . int($self->{'delay'}*60) . "s");
      push(@s, "    Will sleep if too early") if $self->{'use_sleep'};
      push(@s, "    Rules = $self->{'rules'}");
      join("\n", @s, '');
  }
  
  1;
  
  
  __END__
  
  =head1 NAME
  
  LWP::RobotUA - a class for well-behaved Web robots
  
  =head1 SYNOPSIS
  
    use LWP::RobotUA;
    my $ua = LWP::RobotUA->new('my-robot/0.1', 'me@foo.com');
    $ua->delay(10);  # be very nice -- max one hit every ten minutes!
    ...
  
    # Then just use it just like a normal LWP::UserAgent:
    my $response = $ua->get('http://whatever.int/...');
    ...
  
  =head1 DESCRIPTION
  
  This class implements a user agent that is suitable for robot
  applications.  Robots should be nice to the servers they visit.  They
  should consult the F</robots.txt> file to ensure that they are welcomed
  and they should not make requests too frequently.
  
  But before you consider writing a robot, take a look at
  <URL:http://www.robotstxt.org/>.
  
  When you use an I<LWP::RobotUA> object as your user agent, then you do not
  really have to think about these things yourself; C<robots.txt> files
  are automatically consulted and obeyed, the server isn't queried
  too rapidly, and so on.  Just send requests
  as you do when you are using a normal I<LWP::UserAgent>
  object (using C<< $ua->get(...) >>, C<< $ua->head(...) >>,
  C<< $ua->request(...) >>, etc.), and this
  special agent will make sure you are nice.
  
  =head1 METHODS
  
  The LWP::RobotUA is a sub-class of LWP::UserAgent and implements the
  same methods. In addition the following methods are provided:
  
  =over 4
  
  =item $ua = LWP::RobotUA->new( %options )
  
  =item $ua = LWP::RobotUA->new( $agent, $from )
  
  =item $ua = LWP::RobotUA->new( $agent, $from, $rules )
  
  The LWP::UserAgent options C<agent> and C<from> are mandatory.  The
  options C<delay>, C<use_sleep> and C<rules> initialize attributes
  private to the RobotUA.  If C<rules> are not provided, then
  C<WWW::RobotRules> is instantiated providing an internal database of
  F<robots.txt>.
  
  It is also possible to just pass the value of C<agent>, C<from> and
  optionally C<rules> as plain positional arguments.
  
  =item $ua->delay
  
  =item $ua->delay( $minutes )
  
  Get/set the minimum delay between requests to the same server, in
  I<minutes>.  The default is 1 minute.  Note that this number doesn't
  have to be an integer; for example, this sets the delay to 10 seconds:
  
      $ua->delay(10/60);
  
  =item $ua->use_sleep
  
  =item $ua->use_sleep( $boolean )
  
  Get/set a value indicating whether the UA should sleep() if requests
  arrive too fast, defined as $ua->delay minutes not passed since
  last request to the given server.  The default is TRUE.  If this value is
  FALSE then an internal SERVICE_UNAVAILABLE response will be generated.
  It will have a Retry-After header that indicates when it is OK to
  send another request to this server.
  
  =item $ua->rules
  
  =item $ua->rules( $rules )
  
  Set/get which I<WWW::RobotRules> object to use.
  
  =item $ua->no_visits( $netloc )
  
  Returns the number of documents fetched from this server host. Yeah I
  know, this method should probably have been named num_visits() or
  something like that. :-(
  
  =item $ua->host_wait( $netloc )
  
  Returns the number of I<seconds> (from now) you must wait before you can
  make a new request to this host.
  
  =item $ua->as_string
  
  Returns a string that describes the state of the UA.
  Mainly useful for debugging.
  
  =back
  
  =head1 SEE ALSO
  
  L<LWP::UserAgent>, L<WWW::RobotRules>
  
  =head1 COPYRIGHT
  
  Copyright 1996-2004 Gisle Aas.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
LWP_ROBOTUA

    $main::fatpacked{"LWP/Simple.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_SIMPLE';
  package LWP::Simple;
  
  use strict;
  use vars qw($ua %loop_check $FULL_LWP @EXPORT @EXPORT_OK $VERSION);
  
  require Exporter;
  
  @EXPORT = qw(get head getprint getstore mirror);
  @EXPORT_OK = qw($ua);
  
  # I really hate this.  I was a bad idea to do it in the first place.
  # Wonder how to get rid of it???  (It even makes LWP::Simple 7% slower
  # for trivial tests)
  use HTTP::Status;
  push(@EXPORT, @HTTP::Status::EXPORT);
  
  $VERSION = "6.15";
  
  sub import
  {
      my $pkg = shift;
      my $callpkg = caller;
      Exporter::export($pkg, $callpkg, @_);
  }
  
  use LWP::UserAgent ();
  use HTTP::Status ();
  use HTTP::Date ();
  $ua = LWP::UserAgent->new;  # we create a global UserAgent object
  $ua->agent("LWP::Simple/$VERSION ");
  $ua->env_proxy;
  
  
  sub get ($)
  {
      my $response = $ua->get(shift);
      return $response->decoded_content if $response->is_success;
      return undef;
  }
  
  
  sub head ($)
  {
      my($url) = @_;
      my $request = HTTP::Request->new(HEAD => $url);
      my $response = $ua->request($request);
  
      if ($response->is_success) {
  	return $response unless wantarray;
  	return (scalar $response->header('Content-Type'),
  		scalar $response->header('Content-Length'),
  		HTTP::Date::str2time($response->header('Last-Modified')),
  		HTTP::Date::str2time($response->header('Expires')),
  		scalar $response->header('Server'),
  	       );
      }
      return;
  }
  
  
  sub getprint ($)
  {
      my($url) = @_;
      my $request = HTTP::Request->new(GET => $url);
      local($\) = ""; # ensure standard $OUTPUT_RECORD_SEPARATOR
      my $callback = sub { print $_[0] };
      if ($^O eq "MacOS") {
  	$callback = sub { $_[0] =~ s/\015?\012/\n/g; print $_[0] }
      }
      my $response = $ua->request($request, $callback);
      unless ($response->is_success) {
  	print STDERR $response->status_line, " <URL:$url>\n";
      }
      $response->code;
  }
  
  
  sub getstore ($$)
  {
      my($url, $file) = @_;
      my $request = HTTP::Request->new(GET => $url);
      my $response = $ua->request($request, $file);
  
      $response->code;
  }
  
  
  sub mirror ($$)
  {
      my($url, $file) = @_;
      my $response = $ua->mirror($url, $file);
      $response->code;
  }
  
  
  1;
  
  __END__
  
  =head1 NAME
  
  LWP::Simple - simple procedural interface to LWP
  
  =head1 SYNOPSIS
  
   perl -MLWP::Simple -e 'getprint "http://www.sn.no"'
  
   use LWP::Simple;
   $content = get("http://www.sn.no/");
   die "Couldn't get it!" unless defined $content;
  
   if (mirror("http://www.sn.no/", "foo") == RC_NOT_MODIFIED) {
       ...
   }
  
   if (is_success(getprint("http://www.sn.no/"))) {
       ...
   }
  
  =head1 DESCRIPTION
  
  This module is meant for people who want a simplified view of the
  libwww-perl library.  It should also be suitable for one-liners.  If
  you need more control or access to the header fields in the requests
  sent and responses received, then you should use the full object-oriented
  interface provided by the C<LWP::UserAgent> module.
  
  The following functions are provided (and exported) by this module:
  
  =over 3
  
  =item get($url)
  
  The get() function will fetch the document identified by the given URL
  and return it.  It returns C<undef> if it fails.  The $url argument can
  be either a string or a reference to a URI object.
  
  You will not be able to examine the response code or response headers
  (like 'Content-Type') when you are accessing the web using this
  function.  If you need that information you should use the full OO
  interface (see L<LWP::UserAgent>).
  
  =item head($url)
  
  Get document headers. Returns the following 5 values if successful:
  ($content_type, $document_length, $modified_time, $expires, $server)
  
  Returns an empty list if it fails.  In scalar context returns TRUE if
  successful.
  
  =item getprint($url)
  
  Get and print a document identified by a URL. The document is printed
  to the selected default filehandle for output (normally STDOUT) as
  data is received from the network.  If the request fails, then the
  status code and message are printed on STDERR.  The return value is
  the HTTP response code.
  
  =item getstore($url, $file)
  
  Gets a document identified by a URL and stores it in the file. The
  return value is the HTTP response code.
  
  =item mirror($url, $file)
  
  Get and store a document identified by a URL, using
  I<If-modified-since>, and checking the I<Content-Length>.  Returns
  the HTTP response code.
  
  =back
  
  This module also exports the HTTP::Status constants and procedures.
  You can use them when you check the response code from getprint(),
  getstore() or mirror().  The constants are:
  
     RC_CONTINUE
     RC_SWITCHING_PROTOCOLS
     RC_OK
     RC_CREATED
     RC_ACCEPTED
     RC_NON_AUTHORITATIVE_INFORMATION
     RC_NO_CONTENT
     RC_RESET_CONTENT
     RC_PARTIAL_CONTENT
     RC_MULTIPLE_CHOICES
     RC_MOVED_PERMANENTLY
     RC_MOVED_TEMPORARILY
     RC_SEE_OTHER
     RC_NOT_MODIFIED
     RC_USE_PROXY
     RC_BAD_REQUEST
     RC_UNAUTHORIZED
     RC_PAYMENT_REQUIRED
     RC_FORBIDDEN
     RC_NOT_FOUND
     RC_METHOD_NOT_ALLOWED
     RC_NOT_ACCEPTABLE
     RC_PROXY_AUTHENTICATION_REQUIRED
     RC_REQUEST_TIMEOUT
     RC_CONFLICT
     RC_GONE
     RC_LENGTH_REQUIRED
     RC_PRECONDITION_FAILED
     RC_REQUEST_ENTITY_TOO_LARGE
     RC_REQUEST_URI_TOO_LARGE
     RC_UNSUPPORTED_MEDIA_TYPE
     RC_INTERNAL_SERVER_ERROR
     RC_NOT_IMPLEMENTED
     RC_BAD_GATEWAY
     RC_SERVICE_UNAVAILABLE
     RC_GATEWAY_TIMEOUT
     RC_HTTP_VERSION_NOT_SUPPORTED
  
  The HTTP::Status classification functions are:
  
  =over 3
  
  =item is_success($rc)
  
  True if response code indicated a successful request.
  
  =item is_error($rc)
  
  True if response code indicated that an error occurred.
  
  =back
  
  The module will also export the LWP::UserAgent object as C<$ua> if you
  ask for it explicitly.
  
  The user agent created by this module will identify itself as
  "LWP::Simple/#.##"
  and will initialize its proxy defaults from the environment (by
  calling $ua->env_proxy).
  
  =head1 CAVEAT
  
  Note that if you are using both LWP::Simple and the very popular CGI.pm
  module, you may be importing a C<head> function from each module,
  producing a warning like "Prototype mismatch: sub main::head ($) vs
  none". Get around this problem by just not importing LWP::Simple's
  C<head> function, like so:
  
          use LWP::Simple qw(!head);
          use CGI qw(:standard);  # then only CGI.pm defines a head()
  
  Then if you do need LWP::Simple's C<head> function, you can just call
  it as C<LWP::Simple::head($url)>.
  
  =head1 SEE ALSO
  
  L<LWP>, L<lwpcook>, L<LWP::UserAgent>, L<HTTP::Status>, L<lwp-request>,
  L<lwp-mirror>
LWP_SIMPLE

    $main::fatpacked{"LWP/UserAgent.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LWP_USERAGENT';
  package LWP::UserAgent;
  
  use strict;
  use vars qw(@ISA $VERSION);
  
  require LWP::MemberMixin;
  @ISA = qw(LWP::MemberMixin);
  $VERSION = "6.15";
  
  use HTTP::Request ();
  use HTTP::Response ();
  use HTTP::Date ();
  
  use LWP ();
  use LWP::Protocol ();
  
  use Carp ();
  
  
  sub new
  {
      # Check for common user mistake
      Carp::croak("Options to LWP::UserAgent should be key/value pairs, not hash reference") 
          if ref($_[1]) eq 'HASH'; 
  
      my($class, %cnf) = @_;
  
      my $agent = delete $cnf{agent};
      my $from  = delete $cnf{from};
      my $def_headers = delete $cnf{default_headers};
      my $timeout = delete $cnf{timeout};
      $timeout = 3*60 unless defined $timeout;
      my $local_address = delete $cnf{local_address};
      my $ssl_opts = delete $cnf{ssl_opts} || {};
      unless (exists $ssl_opts->{verify_hostname}) {
  	# The processing of HTTPS_CA_* below is for compatibility with Crypt::SSLeay
  	if (exists $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME}) {
  	    $ssl_opts->{verify_hostname} = $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME};
  	}
  	elsif ($ENV{HTTPS_CA_FILE} || $ENV{HTTPS_CA_DIR}) {
  	    # Crypt-SSLeay compatibility (verify peer certificate; but not the hostname)
  	    $ssl_opts->{verify_hostname} = 0;
  	    $ssl_opts->{SSL_verify_mode} = 1;
  	}
  	else {
  	    $ssl_opts->{verify_hostname} = 1;
  	}
      }
      unless (exists $ssl_opts->{SSL_ca_file}) {
  	if (my $ca_file = $ENV{PERL_LWP_SSL_CA_FILE} || $ENV{HTTPS_CA_FILE}) {
  	    $ssl_opts->{SSL_ca_file} = $ca_file;
  	}
      }
      unless (exists $ssl_opts->{SSL_ca_path}) {
  	if (my $ca_path = $ENV{PERL_LWP_SSL_CA_PATH} || $ENV{HTTPS_CA_DIR}) {
  	    $ssl_opts->{SSL_ca_path} = $ca_path;
  	}
      }
      my $use_eval = delete $cnf{use_eval};
      $use_eval = 1 unless defined $use_eval;
      my $parse_head = delete $cnf{parse_head};
      $parse_head = 1 unless defined $parse_head;
      my $show_progress = delete $cnf{show_progress};
      my $max_size = delete $cnf{max_size};
      my $max_redirect = delete $cnf{max_redirect};
      $max_redirect = 7 unless defined $max_redirect;
      my $env_proxy = exists $cnf{env_proxy} ? delete $cnf{env_proxy} : $ENV{PERL_LWP_ENV_PROXY};
  
      my $cookie_jar = delete $cnf{cookie_jar};
      my $conn_cache = delete $cnf{conn_cache};
      my $keep_alive = delete $cnf{keep_alive};
      
      Carp::croak("Can't mix conn_cache and keep_alive")
  	  if $conn_cache && $keep_alive;
  
      my $protocols_allowed   = delete $cnf{protocols_allowed};
      my $protocols_forbidden = delete $cnf{protocols_forbidden};
      
      my $requests_redirectable = delete $cnf{requests_redirectable};
      $requests_redirectable = ['GET', 'HEAD']
        unless defined $requests_redirectable;
  
      # Actually ""s are just as good as 0's, but for concision we'll just say:
      Carp::croak("protocols_allowed has to be an arrayref or 0, not \"$protocols_allowed\"!")
        if $protocols_allowed and ref($protocols_allowed) ne 'ARRAY';
      Carp::croak("protocols_forbidden has to be an arrayref or 0, not \"$protocols_forbidden\"!")
        if $protocols_forbidden and ref($protocols_forbidden) ne 'ARRAY';
      Carp::croak("requests_redirectable has to be an arrayref or 0, not \"$requests_redirectable\"!")
        if $requests_redirectable and ref($requests_redirectable) ne 'ARRAY';
  
  
      if (%cnf && $^W) {
  	Carp::carp("Unrecognized LWP::UserAgent options: @{[sort keys %cnf]}");
      }
  
      my $self = bless {
  		      def_headers  => $def_headers,
  		      timeout      => $timeout,
  		      local_address => $local_address,
  		      ssl_opts     => $ssl_opts,
  		      use_eval     => $use_eval,
                        show_progress=> $show_progress,
  		      max_size     => $max_size,
  		      max_redirect => $max_redirect,
                        proxy        => {},
  		      no_proxy     => [],
                        protocols_allowed     => $protocols_allowed,
                        protocols_forbidden   => $protocols_forbidden,
                        requests_redirectable => $requests_redirectable,
  		     }, $class;
  
      $self->agent(defined($agent) ? $agent : $class->_agent)
  	if defined($agent) || !$def_headers || !$def_headers->header("User-Agent");
      $self->from($from) if $from;
      $self->cookie_jar($cookie_jar) if $cookie_jar;
      $self->parse_head($parse_head);
      $self->env_proxy if $env_proxy;
  
      $self->protocols_allowed(  $protocols_allowed  ) if $protocols_allowed;
      $self->protocols_forbidden($protocols_forbidden) if $protocols_forbidden;
  
      if ($keep_alive) {
  	$conn_cache ||= { total_capacity => $keep_alive };
      }
      $self->conn_cache($conn_cache) if $conn_cache;
  
      return $self;
  }
  
  
  sub send_request
  {
      my($self, $request, $arg, $size) = @_;
      my($method, $url) = ($request->method, $request->uri);
      my $scheme = $url->scheme;
  
      local($SIG{__DIE__});  # protect against user defined die handlers
  
      $self->progress("begin", $request);
  
      my $response = $self->run_handlers("request_send", $request);
  
      unless ($response) {
          my $protocol;
  
          {
              # Honor object-specific restrictions by forcing protocol objects
              #  into class LWP::Protocol::nogo.
              my $x;
              if($x = $self->protocols_allowed) {
                  if (grep lc($_) eq $scheme, @$x) {
                  }
                  else {
                      require LWP::Protocol::nogo;
                      $protocol = LWP::Protocol::nogo->new;
                  }
              }
              elsif ($x = $self->protocols_forbidden) {
                  if(grep lc($_) eq $scheme, @$x) {
                      require LWP::Protocol::nogo;
                      $protocol = LWP::Protocol::nogo->new;
                  }
              }
              # else fall thru and create the protocol object normally
          }
  
          # Locate protocol to use
          my $proxy = $request->{proxy};
          if ($proxy) {
              $scheme = $proxy->scheme;
          }
  
          unless ($protocol) {
              $protocol = eval { LWP::Protocol::create($scheme, $self) };
              if ($@) {
                  $@ =~ s/ at .* line \d+.*//s;  # remove file/line number
                  $response =  _new_response($request, &HTTP::Status::RC_NOT_IMPLEMENTED, $@);
                  if ($scheme eq "https") {
                      $response->message($response->message . " (LWP::Protocol::https not installed)");
                      $response->content_type("text/plain");
                      $response->content(<<EOT);
  LWP will support https URLs if the LWP::Protocol::https module
  is installed.
  EOT
                  }
              }
          }
  
          if (!$response && $self->{use_eval}) {
              # we eval, and turn dies into responses below
              eval {
                  $response = $protocol->request($request, $proxy, $arg, $size, $self->{timeout}) ||
  		    die "No response returned by $protocol";
              };
              if ($@) {
                  if (UNIVERSAL::isa($@, "HTTP::Response")) {
                      $response = $@;
                      $response->request($request);
                  }
                  else {
                      my $full = $@;
                      (my $status = $@) =~ s/\n.*//s;
                      $status =~ s/ at .* line \d+.*//s;  # remove file/line number
                      my $code = ($status =~ s/^(\d\d\d)\s+//) ? $1 : &HTTP::Status::RC_INTERNAL_SERVER_ERROR;
                      $response = _new_response($request, $code, $status, $full);
                  }
              }
          }
          elsif (!$response) {
              $response = $protocol->request($request, $proxy,
                                             $arg, $size, $self->{timeout});
              # XXX: Should we die unless $response->is_success ???
          }
      }
  
      $response->request($request);  # record request for reference
      $response->header("Client-Date" => HTTP::Date::time2str(time));
  
      $self->run_handlers("response_done", $response);
  
      $self->progress("end", $response);
      return $response;
  }
  
  
  sub prepare_request
  {
      my($self, $request) = @_;
      die "Method missing" unless $request->method;
      my $url = $request->uri;
      die "URL missing" unless $url;
      die "URL must be absolute" unless $url->scheme;
  
      $self->run_handlers("request_preprepare", $request);
  
      if (my $def_headers = $self->{def_headers}) {
  	for my $h ($def_headers->header_field_names) {
  	    $request->init_header($h => [$def_headers->header($h)]);
  	}
      }
  
      $self->run_handlers("request_prepare", $request);
  
      return $request;
  }
  
  
  sub simple_request
  {
      my($self, $request, $arg, $size) = @_;
  
      # sanity check the request passed in
      if (defined $request) {
  	if (ref $request) {
  	    Carp::croak("You need a request object, not a " . ref($request) . " object")
  	      if ref($request) eq 'ARRAY' or ref($request) eq 'HASH' or
  		 !$request->can('method') or !$request->can('uri');
  	}
  	else {
  	    Carp::croak("You need a request object, not '$request'");
  	}
      }
      else {
          Carp::croak("No request object passed in");
      }
  
      eval {
  	$request = $self->prepare_request($request);
      };
      if ($@) {
  	$@ =~ s/ at .* line \d+.*//s;  # remove file/line number
  	return _new_response($request, &HTTP::Status::RC_BAD_REQUEST, $@);
      }
      return $self->send_request($request, $arg, $size);
  }
  
  
  sub request
  {
      my($self, $request, $arg, $size, $previous) = @_;
  
      my $response = $self->simple_request($request, $arg, $size);
      $response->previous($previous) if $previous;
  
      if ($response->redirects >= $self->{max_redirect}) {
          $response->header("Client-Warning" =>
                            "Redirect loop detected (max_redirect = $self->{max_redirect})");
          return $response;
      }
  
      if (my $req = $self->run_handlers("response_redirect", $response)) {
          return $self->request($req, $arg, $size, $response);
      }
  
      my $code = $response->code;
  
      if ($code == &HTTP::Status::RC_MOVED_PERMANENTLY or
  	$code == &HTTP::Status::RC_FOUND or
  	$code == &HTTP::Status::RC_SEE_OTHER or
  	$code == &HTTP::Status::RC_TEMPORARY_REDIRECT)
      {
  	my $referral = $request->clone;
  
  	# These headers should never be forwarded
  	$referral->remove_header('Host', 'Cookie');
  	
  	if ($referral->header('Referer') &&
  	    $request->uri->scheme eq 'https' &&
  	    $referral->uri->scheme eq 'http')
  	{
  	    # RFC 2616, section 15.1.3.
  	    # https -> http redirect, suppressing Referer
  	    $referral->remove_header('Referer');
  	}
  
  	if ($code == &HTTP::Status::RC_SEE_OTHER ||
  	    $code == &HTTP::Status::RC_FOUND) 
          {
  	    my $method = uc($referral->method);
  	    unless ($method eq "GET" || $method eq "HEAD") {
  		$referral->method("GET");
  		$referral->content("");
  		$referral->remove_content_headers;
  	    }
  	}
  
  	# And then we update the URL based on the Location:-header.
  	my $referral_uri = $response->header('Location');
  	{
  	    # Some servers erroneously return a relative URL for redirects,
  	    # so make it absolute if it not already is.
  	    local $URI::ABS_ALLOW_RELATIVE_SCHEME = 1;
  	    my $base = $response->base;
  	    $referral_uri = "" unless defined $referral_uri;
  	    $referral_uri = $HTTP::URI_CLASS->new($referral_uri, $base)
  		            ->abs($base);
  	}
  	$referral->uri($referral_uri);
  
  	return $response unless $self->redirect_ok($referral, $response);
  	return $self->request($referral, $arg, $size, $response);
  
      }
      elsif ($code == &HTTP::Status::RC_UNAUTHORIZED ||
  	     $code == &HTTP::Status::RC_PROXY_AUTHENTICATION_REQUIRED
  	    )
      {
  	my $proxy = ($code == &HTTP::Status::RC_PROXY_AUTHENTICATION_REQUIRED);
  	my $ch_header = $proxy || $request->method eq 'CONNECT'
  	    ?  "Proxy-Authenticate" : "WWW-Authenticate";
  	my @challenge = $response->header($ch_header);
  	unless (@challenge) {
  	    $response->header("Client-Warning" => 
  			      "Missing Authenticate header");
  	    return $response;
  	}
  
  	require HTTP::Headers::Util;
  	CHALLENGE: for my $challenge (@challenge) {
  	    $challenge =~ tr/,/;/;  # "," is used to separate auth-params!!
  	    ($challenge) = HTTP::Headers::Util::split_header_words($challenge);
  	    my $scheme = shift(@$challenge);
  	    shift(@$challenge); # no value
  	    $challenge = { @$challenge };  # make rest into a hash
  
  	    unless ($scheme =~ /^([a-z]+(?:-[a-z]+)*)$/) {
  		$response->header("Client-Warning" => 
  				  "Bad authentication scheme '$scheme'");
  		return $response;
  	    }
  	    $scheme = $1;  # untainted now
  	    my $class = "LWP::Authen::\u$scheme";
  	    $class =~ s/-/_/g;
  
  	    no strict 'refs';
  	    unless (%{"$class\::"}) {
  		# try to load it
  		eval "require $class";
  		if ($@) {
  		    if ($@ =~ /^Can\'t locate/) {
  			$response->header("Client-Warning" =>
  					  "Unsupported authentication scheme '$scheme'");
  		    }
  		    else {
  			$response->header("Client-Warning" => $@);
  		    }
  		    next CHALLENGE;
  		}
  	    }
  	    unless ($class->can("authenticate")) {
  		$response->header("Client-Warning" =>
  				  "Unsupported authentication scheme '$scheme'");
  		next CHALLENGE;
  	    }
  	    return $class->authenticate($self, $proxy, $challenge, $response,
  					$request, $arg, $size);
  	}
  	return $response;
      }
      return $response;
  }
  
  
  #
  # Now the shortcuts...
  #
  sub get {
      require HTTP::Request::Common;
      my($self, @parameters) = @_;
      my @suff = $self->_process_colonic_headers(\@parameters,1);
      return $self->request( HTTP::Request::Common::GET( @parameters ), @suff );
  }
  
  
  sub post {
      require HTTP::Request::Common;
      my($self, @parameters) = @_;
      my @suff = $self->_process_colonic_headers(\@parameters, (ref($parameters[1]) ? 2 : 1));
      return $self->request( HTTP::Request::Common::POST( @parameters ), @suff );
  }
  
  
  sub head {
      require HTTP::Request::Common;
      my($self, @parameters) = @_;
      my @suff = $self->_process_colonic_headers(\@parameters,1);
      return $self->request( HTTP::Request::Common::HEAD( @parameters ), @suff );
  }
  
  
  sub put {
      require HTTP::Request::Common;
      my($self, @parameters) = @_;
      my @suff = $self->_process_colonic_headers(\@parameters, (ref($parameters[1]) ? 2 : 1));
      return $self->request( HTTP::Request::Common::PUT( @parameters ), @suff );
  }
  
  
  sub delete {
      require HTTP::Request::Common;
      my($self, @parameters) = @_;
      my @suff = $self->_process_colonic_headers(\@parameters,1);
      return $self->request( HTTP::Request::Common::DELETE( @parameters ), @suff );
  }
  
  
  sub _process_colonic_headers {
      # Process :content_cb / :content_file / :read_size_hint headers.
      my($self, $args, $start_index) = @_;
  
      my($arg, $size);
      for(my $i = $start_index; $i < @$args; $i += 2) {
  	next unless defined $args->[$i];
  
  	#printf "Considering %s => %s\n", $args->[$i], $args->[$i + 1];
  
  	if($args->[$i] eq ':content_cb') {
  	    # Some sanity-checking...
  	    $arg = $args->[$i + 1];
  	    Carp::croak("A :content_cb value can't be undef") unless defined $arg;
  	    Carp::croak("A :content_cb value must be a coderef")
  		unless ref $arg and UNIVERSAL::isa($arg, 'CODE');
  	    
  	}
  	elsif ($args->[$i] eq ':content_file') {
  	    $arg = $args->[$i + 1];
  
  	    # Some sanity-checking...
  	    Carp::croak("A :content_file value can't be undef")
  		unless defined $arg;
  	    Carp::croak("A :content_file value can't be a reference")
  		if ref $arg;
  	    Carp::croak("A :content_file value can't be \"\"")
  		unless length $arg;
  
  	}
  	elsif ($args->[$i] eq ':read_size_hint') {
  	    $size = $args->[$i + 1];
  	    # Bother checking it?
  
  	}
  	else {
  	    next;
  	}
  	splice @$args, $i, 2;
  	$i -= 2;
      }
  
      # And return a suitable suffix-list for request(REQ,...)
  
      return             unless defined $arg;
      return $arg, $size if     defined $size;
      return $arg;
  }
  
  
  sub is_online {
      my $self = shift;
      return 1 if $self->get("http://www.msftncsi.com/ncsi.txt")->content eq "Microsoft NCSI";
      return 1 if $self->get("http://www.apple.com")->content =~ m,<title>Apple</title>,;
      return 0;
  }
  
  
  my @ANI = qw(- \ | /);
  
  sub progress {
      my($self, $status, $m) = @_;
      return unless $self->{show_progress};
  
      local($,, $\);
      if ($status eq "begin") {
          print STDERR "** ", $m->method, " ", $m->uri, " ==> ";
          $self->{progress_start} = time;
          $self->{progress_lastp} = "";
          $self->{progress_ani} = 0;
      }
      elsif ($status eq "end") {
          delete $self->{progress_lastp};
          delete $self->{progress_ani};
          print STDERR $m->status_line;
          my $t = time - delete $self->{progress_start};
          print STDERR " (${t}s)" if $t;
          print STDERR "\n";
      }
      elsif ($status eq "tick") {
          print STDERR "$ANI[$self->{progress_ani}++]\b";
          $self->{progress_ani} %= @ANI;
      }
      else {
          my $p = sprintf "%3.0f%%", $status * 100;
          return if $p eq $self->{progress_lastp};
          print STDERR "$p\b\b\b\b";
          $self->{progress_lastp} = $p;
      }
      STDERR->flush;
  }
  
  
  #
  # This whole allow/forbid thing is based on man 1 at's way of doing things.
  #
  sub is_protocol_supported
  {
      my($self, $scheme) = @_;
      if (ref $scheme) {
  	# assume we got a reference to an URI object
  	$scheme = $scheme->scheme;
      }
      else {
  	Carp::croak("Illegal scheme '$scheme' passed to is_protocol_supported")
  	    if $scheme =~ /\W/;
  	$scheme = lc $scheme;
      }
  
      my $x;
      if(ref($self) and $x       = $self->protocols_allowed) {
        return 0 unless grep lc($_) eq $scheme, @$x;
      }
      elsif (ref($self) and $x = $self->protocols_forbidden) {
        return 0 if grep lc($_) eq $scheme, @$x;
      }
  
      local($SIG{__DIE__});  # protect against user defined die handlers
      $x = LWP::Protocol::implementor($scheme);
      return 1 if $x and $x ne 'LWP::Protocol::nogo';
      return 0;
  }
  
  
  sub protocols_allowed      { shift->_elem('protocols_allowed'    , @_) }
  sub protocols_forbidden    { shift->_elem('protocols_forbidden'  , @_) }
  sub requests_redirectable  { shift->_elem('requests_redirectable', @_) }
  
  
  sub redirect_ok
  {
      # RFC 2616, section 10.3.2 and 10.3.3 say:
      #  If the 30[12] status code is received in response to a request other
      #  than GET or HEAD, the user agent MUST NOT automatically redirect the
      #  request unless it can be confirmed by the user, since this might
      #  change the conditions under which the request was issued.
  
      # Note that this routine used to be just:
      #  return 0 if $_[1]->method eq "POST";  return 1;
  
      my($self, $new_request, $response) = @_;
      my $method = $response->request->method;
      return 0 unless grep $_ eq $method,
        @{ $self->requests_redirectable || [] };
      
      if ($new_request->uri->scheme eq 'file') {
        $response->header("Client-Warning" =>
  			"Can't redirect to a file:// URL!");
        return 0;
      }
      
      # Otherwise it's apparently okay...
      return 1;
  }
  
  
  sub credentials
  {
      my $self = shift;
      my $netloc = lc(shift);
      my $realm = shift || "";
      my $old = $self->{basic_authentication}{$netloc}{$realm};
      if (@_) {
          $self->{basic_authentication}{$netloc}{$realm} = [@_];
      }
      return unless $old;
      return @$old if wantarray;
      return join(":", @$old);
  }
  
  
  sub get_basic_credentials
  {
      my($self, $realm, $uri, $proxy) = @_;
      return if $proxy;
      return $self->credentials($uri->host_port, $realm);
  }
  
  
  sub timeout      { shift->_elem('timeout',      @_); }
  sub local_address{ shift->_elem('local_address',@_); }
  sub max_size     { shift->_elem('max_size',     @_); }
  sub max_redirect { shift->_elem('max_redirect', @_); }
  sub show_progress{ shift->_elem('show_progress', @_); }
  
  sub ssl_opts {
      my $self = shift;
      if (@_ == 1) {
  	my $k = shift;
  	return $self->{ssl_opts}{$k};
      }
      if (@_) {
  	my $old;
  	while (@_) {
  	    my($k, $v) = splice(@_, 0, 2);
  	    $old = $self->{ssl_opts}{$k} unless @_;
  	    if (defined $v) {
  		$self->{ssl_opts}{$k} = $v;
  	    }
  	    else {
  		delete $self->{ssl_opts}{$k};
  	    }
  	}
  	%{$self->{ssl_opts}} = (%{$self->{ssl_opts}}, @_);
  	return $old;
      }
  
      return keys %{$self->{ssl_opts}};
  }
  
  sub parse_head {
      my $self = shift;
      if (@_) {
          my $flag = shift;
          my $parser;
          my $old = $self->set_my_handler("response_header", $flag ? sub {
                 my($response, $ua) = @_;
                 require HTML::HeadParser;
                 $parser = HTML::HeadParser->new;
                 $parser->xml_mode(1) if $response->content_is_xhtml;
                 $parser->utf8_mode(1) if $] >= 5.008 && $HTML::Parser::VERSION >= 3.40;
  
                 push(@{$response->{handlers}{response_data}}, {
  		   callback => sub {
  		       return unless $parser;
  		       unless ($parser->parse($_[3])) {
  			   my $h = $parser->header;
  			   my $r = $_[0];
  			   for my $f ($h->header_field_names) {
  			       $r->init_header($f, [$h->header($f)]);
  			   }
  			   undef($parser);
  		       }
  		   },
  	       });
  
              } : undef,
              m_media_type => "html",
          );
          return !!$old;
      }
      else {
          return !!$self->get_my_handler("response_header");
      }
  }
  
  sub cookie_jar {
      my $self = shift;
      my $old = $self->{cookie_jar};
      if (@_) {
  	my $jar = shift;
  	if (ref($jar) eq "HASH") {
  	    require HTTP::Cookies;
  	    $jar = HTTP::Cookies->new(%$jar);
  	}
  	$self->{cookie_jar} = $jar;
          $self->set_my_handler("request_prepare",
              $jar ? sub { $jar->add_cookie_header($_[0]); } : undef,
          );
          $self->set_my_handler("response_done",
              $jar ? sub { $jar->extract_cookies($_[0]); } : undef,
          );
      }
      $old;
  }
  
  sub default_headers {
      my $self = shift;
      my $old = $self->{def_headers} ||= HTTP::Headers->new;
      if (@_) {
  	Carp::croak("default_headers not set to HTTP::Headers compatible object")
  	    unless @_ == 1 && $_[0]->can("header_field_names");
  	$self->{def_headers} = shift;
      }
      return $old;
  }
  
  sub default_header {
      my $self = shift;
      return $self->default_headers->header(@_);
  }
  
  sub _agent       { "libwww-perl/$LWP::VERSION" }
  
  sub agent {
      my $self = shift;
      if (@_) {
  	my $agent = shift;
          if ($agent) {
              $agent .= $self->_agent if $agent =~ /\s+$/;
          }
          else {
              undef($agent)
          }
          return $self->default_header("User-Agent", $agent);
      }
      return $self->default_header("User-Agent");
  }
  
  sub from {  # legacy
      my $self = shift;
      return $self->default_header("From", @_);
  }
  
  
  sub conn_cache {
      my $self = shift;
      my $old = $self->{conn_cache};
      if (@_) {
  	my $cache = shift;
  	if (ref($cache) eq "HASH") {
  	    require LWP::ConnCache;
  	    $cache = LWP::ConnCache->new(%$cache);
  	}
  	$self->{conn_cache} = $cache;
      }
      $old;
  }
  
  
  sub add_handler {
      my($self, $phase, $cb, %spec) = @_;
      $spec{line} ||= join(":", (caller)[1,2]);
      my $conf = $self->{handlers}{$phase} ||= do {
          require HTTP::Config;
          HTTP::Config->new;
      };
      $conf->add(%spec, callback => $cb);
  }
  
  sub set_my_handler {
      my($self, $phase, $cb, %spec) = @_;
      $spec{owner} = (caller(1))[3] unless exists $spec{owner};
      $self->remove_handler($phase, %spec);
      $spec{line} ||= join(":", (caller)[1,2]);
      $self->add_handler($phase, $cb, %spec) if $cb;
  }
  
  sub get_my_handler {
      my $self = shift;
      my $phase = shift;
      my $init = pop if @_ % 2;
      my %spec = @_;
      my $conf = $self->{handlers}{$phase};
      unless ($conf) {
          return unless $init;
          require HTTP::Config;
          $conf = $self->{handlers}{$phase} = HTTP::Config->new;
      }
      $spec{owner} = (caller(1))[3] unless exists $spec{owner};
      my @h = $conf->find(%spec);
      if (!@h && $init) {
          if (ref($init) eq "CODE") {
              $init->(\%spec);
          }
          elsif (ref($init) eq "HASH") {
              while (my($k, $v) = each %$init) {
                  $spec{$k} = $v;
              }
          }
          $spec{callback} ||= sub {};
          $spec{line} ||= join(":", (caller)[1,2]);
          $conf->add(\%spec);
          return \%spec;
      }
      return wantarray ? @h : $h[0];
  }
  
  sub remove_handler {
      my($self, $phase, %spec) = @_;
      if ($phase) {
          my $conf = $self->{handlers}{$phase} || return;
          my @h = $conf->remove(%spec);
          delete $self->{handlers}{$phase} if $conf->empty;
          return @h;
      }
  
      return unless $self->{handlers};
      return map $self->remove_handler($_), sort keys %{$self->{handlers}};
  }
  
  sub handlers {
      my($self, $phase, $o) = @_;
      my @h;
      if ($o->{handlers} && $o->{handlers}{$phase}) {
          push(@h, @{$o->{handlers}{$phase}});
      }
      if (my $conf = $self->{handlers}{$phase}) {
          push(@h, $conf->matching($o));
      }
      return @h;
  }
  
  sub run_handlers {
      my($self, $phase, $o) = @_;
      if (defined(wantarray)) {
          for my $h ($self->handlers($phase, $o)) {
              my $ret = $h->{callback}->($o, $self, $h);
              return $ret if $ret;
          }
          return undef;
      }
  
      for my $h ($self->handlers($phase, $o)) {
          $h->{callback}->($o, $self, $h);
      }
  }
  
  
  # deprecated
  sub use_eval   { shift->_elem('use_eval',  @_); }
  sub use_alarm
  {
      Carp::carp("LWP::UserAgent->use_alarm(BOOL) is a no-op")
  	if @_ > 1 && $^W;
      "";
  }
  
  
  sub clone
  {
      my $self = shift;
      my $copy = bless { %$self }, ref $self;  # copy most fields
  
      delete $copy->{handlers};
      delete $copy->{conn_cache};
  
      # copy any plain arrays and hashes; known not to need recursive copy
      for my $k (qw(proxy no_proxy requests_redirectable ssl_opts)) {
          next unless $copy->{$k};
          if (ref($copy->{$k}) eq "ARRAY") {
              $copy->{$k} = [ @{$copy->{$k}} ];
          }
          elsif (ref($copy->{$k}) eq "HASH") {
              $copy->{$k} = { %{$copy->{$k}} };
          }
      }
  
      if ($self->{def_headers}) {
          $copy->{def_headers} = $self->{def_headers}->clone;
      }
  
      # re-enable standard handlers
      $copy->parse_head($self->parse_head);
  
      # no easy way to clone the cookie jar; so let's just remove it for now
      $copy->cookie_jar(undef);
  
      $copy;
  }
  
  
  sub mirror
  {
      my($self, $url, $file) = @_;
  
      my $request = HTTP::Request->new('GET', $url);
  
      # If the file exists, add a cache-related header
      if ( -e $file ) {
          my ($mtime) = ( stat($file) )[9];
          if ($mtime) {
              $request->header( 'If-Modified-Since' => HTTP::Date::time2str($mtime) );
          }
      }
      my $tmpfile = "$file-$$";
  
      my $response = $self->request($request, $tmpfile);
      if ( $response->header('X-Died') ) {
  	die $response->header('X-Died');
      }
  
      # Only fetching a fresh copy of the would be considered success.
      # If the file was not modified, "304" would returned, which 
      # is considered by HTTP::Status to be a "redirect", /not/ "success"
      if ( $response->is_success ) {
          my @stat        = stat($tmpfile) or die "Could not stat tmpfile '$tmpfile': $!";
          my $file_length = $stat[7];
          my ($content_length) = $response->header('Content-length');
  
          if ( defined $content_length and $file_length < $content_length ) {
              unlink($tmpfile);
              die "Transfer truncated: " . "only $file_length out of $content_length bytes received\n";
          }
          elsif ( defined $content_length and $file_length > $content_length ) {
              unlink($tmpfile);
              die "Content-length mismatch: " . "expected $content_length bytes, got $file_length\n";
          }
          # The file was the expected length. 
          else {
              # Replace the stale file with a fresh copy
              if ( -e $file ) {
                  # Some DOSish systems fail to rename if the target exists
                  chmod 0777, $file;
                  unlink $file;
              }
              rename( $tmpfile, $file )
                  or die "Cannot rename '$tmpfile' to '$file': $!\n";
  
              # make sure the file has the same last modification time
              if ( my $lm = $response->last_modified ) {
                  utime $lm, $lm, $file;
              }
          }
      }
      # The local copy is fresh enough, so just delete the temp file  
      else {
  	unlink($tmpfile);
      }
      return $response;
  }
  
  
  sub _need_proxy {
      my($req, $ua) = @_;
      return if exists $req->{proxy};
      my $proxy = $ua->{proxy}{$req->uri->scheme} || return;
      if ($ua->{no_proxy}) {
          if (my $host = eval { $req->uri->host }) {
              for my $domain (@{$ua->{no_proxy}}) {
                  if ($host =~ /\Q$domain\E$/) {
                      return;
                  }
              }
          }
      }
      $req->{proxy} = $HTTP::URI_CLASS->new($proxy);
  }
  
  
  sub proxy
  {
      my $self = shift;
      my $key  = shift;
      return map $self->proxy($_, @_), @$key if ref $key;
  
      Carp::croak("'$key' is not a valid URI scheme") unless $key =~ /^$URI::scheme_re\z/;
      my $old = $self->{'proxy'}{$key};
      if (@_) {
          my $url = shift;
          if (defined($url) && length($url)) {
              Carp::croak("Proxy must be specified as absolute URI; '$url' is not") unless $url =~ /^$URI::scheme_re:/;
              Carp::croak("Bad http proxy specification '$url'") if $url =~ /^https?:/ && $url !~ m,^https?://\w,;
          }
          $self->{proxy}{$key} = $url;
          $self->set_my_handler("request_preprepare", \&_need_proxy)
      }
      return $old;
  }
  
  
  sub env_proxy {
      my ($self) = @_;
      require Encode;
      require Encode::Locale;
      my($k,$v);
      while(($k, $v) = each %ENV) {
  	if ($ENV{REQUEST_METHOD}) {
  	    # Need to be careful when called in the CGI environment, as
  	    # the HTTP_PROXY variable is under control of that other guy.
  	    next if $k =~ /^HTTP_/;
  	    $k = "HTTP_PROXY" if $k eq "CGI_HTTP_PROXY";
  	}
  	$k = lc($k);
  	next unless $k =~ /^(.*)_proxy$/;
  	$k = $1;
  	if ($k eq 'no') {
  	    $self->no_proxy(split(/\s*,\s*/, $v));
  	}
  	else {
              # Ignore random _proxy variables, allow only valid schemes
              next unless $k =~ /^$URI::scheme_re\z/;
              # Ignore xxx_proxy variables if xxx isn't a supported protocol
              next unless LWP::Protocol::implementor($k);
  	    $self->proxy($k, Encode::decode(locale => $v));
  	}
      }
  }
  
  
  sub no_proxy {
      my($self, @no) = @_;
      if (@no) {
  	push(@{ $self->{'no_proxy'} }, @no);
      }
      else {
  	$self->{'no_proxy'} = [];
      }
  }
  
  
  sub _new_response {
      my($request, $code, $message, $content) = @_;
      $message ||= HTTP::Status::status_message($code);
      my $response = HTTP::Response->new($code, $message);
      $response->request($request);
      $response->header("Client-Date" => HTTP::Date::time2str(time));
      $response->header("Client-Warning" => "Internal response");
      $response->header("Content-Type" => "text/plain");
      $response->content($content || "$code $message\n");
      return $response;
  }
  
  
  1;
  
  __END__
  
  =head1 NAME
  
  LWP::UserAgent - Web user agent class
  
  =head1 SYNOPSIS
  
   require LWP::UserAgent;
   
   my $ua = LWP::UserAgent->new;
   $ua->timeout(10);
   $ua->env_proxy;
   
   my $response = $ua->get('http://search.cpan.org/');
   
   if ($response->is_success) {
       print $response->decoded_content;  # or whatever
   }
   else {
       die $response->status_line;
   }
  
  =head1 DESCRIPTION
  
  The C<LWP::UserAgent> is a class implementing a web user agent.
  C<LWP::UserAgent> objects can be used to dispatch web requests.
  
  In normal use the application creates an C<LWP::UserAgent> object, and
  then configures it with values for timeouts, proxies, name, etc. It
  then creates an instance of C<HTTP::Request> for the request that
  needs to be performed. This request is then passed to one of the
  request method the UserAgent, which dispatches it using the relevant
  protocol, and returns a C<HTTP::Response> object.  There are
  convenience methods for sending the most common request types: get(),
  head(), post(), put() and delete().  When using these methods then the
  creation of the request object is hidden as shown in the synopsis above.
  
  The basic approach of the library is to use HTTP style communication
  for all protocol schemes.  This means that you will construct
  C<HTTP::Request> objects and receive C<HTTP::Response> objects even
  for non-HTTP resources like I<gopher> and I<ftp>.  In order to achieve
  even more similarity to HTTP style communications, gopher menus and
  file directories are converted to HTML documents.
  
  =head1 CONSTRUCTOR METHODS
  
  The following constructor methods are available:
  
  =over 4
  
  =item $ua = LWP::UserAgent->new( %options )
  
  This method constructs a new C<LWP::UserAgent> object and returns it.
  Key/value pair arguments may be provided to set up the initial state.
  The following options correspond to attribute methods described below:
  
     KEY                     DEFAULT
     -----------             --------------------
     agent                   "libwww-perl/#.###"
     from                    undef
     conn_cache              undef
     cookie_jar              undef
     default_headers         HTTP::Headers->new
     local_address           undef
     ssl_opts		   { verify_hostname => 1 }
     max_size                undef
     max_redirect            7
     parse_head              1
     protocols_allowed       undef
     protocols_forbidden     undef
     requests_redirectable   ['GET', 'HEAD']
     timeout                 180
  
  The following additional options are also accepted: If the C<env_proxy> option
  is passed in with a TRUE value, then proxy settings are read from environment
  variables (see env_proxy() method below).  If C<env_proxy> isn't provided the
  C<PERL_LWP_ENV_PROXY> environment variable controls if env_proxy() is called
  during initialization.  If the C<keep_alive> option is passed in, then a
  C<LWP::ConnCache> is set up (see conn_cache() method below).  The C<keep_alive>
  value is passed on as the C<total_capacity> for the connection cache.
  
  =item $ua->clone
  
  Returns a copy of the LWP::UserAgent object.
  
  =back
  
  =head1 ATTRIBUTES
  
  The settings of the configuration attributes modify the behaviour of the
  C<LWP::UserAgent> when it dispatches requests.  Most of these can also
  be initialized by options passed to the constructor method.
  
  The following attribute methods are provided.  The attribute value is
  left unchanged if no argument is given.  The return value from each
  method is the old attribute value.
  
  =over
  
  =item $ua->agent
  
  =item $ua->agent( $product_id )
  
  Get/set the product token that is used to identify the user agent on
  the network.  The agent value is sent as the "User-Agent" header in
  the requests.  The default is the string returned by the _agent()
  method (see below).
  
  If the $product_id ends with space then the _agent() string is
  appended to it.
  
  The user agent string should be one or more simple product identifiers
  with an optional version number separated by the "/" character.
  Examples are:
  
    $ua->agent('Checkbot/0.4 ' . $ua->_agent);
    $ua->agent('Checkbot/0.4 ');    # same as above
    $ua->agent('Mozilla/5.0');
    $ua->agent("");                 # don't identify
  
  =item $ua->_agent
  
  Returns the default agent identifier.  This is a string of the form
  "libwww-perl/#.###", where "#.###" is substituted with the version number
  of this library.
  
  =item $ua->from
  
  =item $ua->from( $email_address )
  
  Get/set the e-mail address for the human user who controls
  the requesting user agent.  The address should be machine-usable, as
  defined in RFC 822.  The C<from> value is send as the "From" header in
  the requests.  Example:
  
    $ua->from('gaas@cpan.org');
  
  The default is to not send a "From" header.  See the default_headers()
  method for the more general interface that allow any header to be defaulted.
  
  =item $ua->cookie_jar
  
  =item $ua->cookie_jar( $cookie_jar_obj )
  
  Get/set the cookie jar object to use.  The only requirement is that
  the cookie jar object must implement the extract_cookies($response) and
  add_cookie_header($request) methods.  These methods will then be
  invoked by the user agent as requests are sent and responses are
  received.  Normally this will be a C<HTTP::Cookies> object or some
  subclass.
  
  The default is to have no cookie_jar, i.e. never automatically add
  "Cookie" headers to the requests.
  
  Shortcut: If a reference to a plain hash is passed in as the
  $cookie_jar_object, then it is replaced with an instance of
  C<HTTP::Cookies> that is initialized based on the hash.  This form also
  automatically loads the C<HTTP::Cookies> module.  It means that:
  
    $ua->cookie_jar({ file => "$ENV{HOME}/.cookies.txt" });
  
  is really just a shortcut for:
  
    require HTTP::Cookies;
    $ua->cookie_jar(HTTP::Cookies->new(file => "$ENV{HOME}/.cookies.txt"));
  
  =item $ua->default_headers
  
  =item $ua->default_headers( $headers_obj )
  
  Get/set the headers object that will provide default header values for
  any requests sent.  By default this will be an empty C<HTTP::Headers>
  object.
  
  =item $ua->default_header( $field )
  
  =item $ua->default_header( $field => $value )
  
  This is just a short-cut for $ua->default_headers->header( $field =>
  $value ). Example:
  
    $ua->default_header('Accept-Encoding' => scalar HTTP::Message::decodable());
    $ua->default_header('Accept-Language' => "no, en");
  
  =item $ua->conn_cache
  
  =item $ua->conn_cache( $cache_obj )
  
  Get/set the C<LWP::ConnCache> object to use.  See L<LWP::ConnCache>
  for details.
  
  =item $ua->credentials( $netloc, $realm )
  
  =item $ua->credentials( $netloc, $realm, $uname, $pass )
  
  Get/set the user name and password to be used for a realm.
  
  The $netloc is a string of the form "<host>:<port>".  The username and
  password will only be passed to this server.  Example:
  
    $ua->credentials("www.example.com:80", "Some Realm", "foo", "secret");
  
  =item $ua->local_address
  
  =item $ua->local_address( $address )
  
  Get/set the local interface to bind to for network connections.  The interface
  can be specified as a hostname or an IP address.  This value is passed as the
  C<LocalAddr> argument to L<IO::Socket::INET>.
  
  =item $ua->max_size
  
  =item $ua->max_size( $bytes )
  
  Get/set the size limit for response content.  The default is C<undef>,
  which means that there is no limit.  If the returned response content
  is only partial, because the size limit was exceeded, then a
  "Client-Aborted" header will be added to the response.  The content
  might end up longer than C<max_size> as we abort once appending a
  chunk of data makes the length exceed the limit.  The "Content-Length"
  header, if present, will indicate the length of the full content and
  will normally not be the same as C<< length($res->content) >>.
  
  =item $ua->max_redirect
  
  =item $ua->max_redirect( $n )
  
  This reads or sets the object's limit of how many times it will obey
  redirection responses in a given request cycle.
  
  By default, the value is 7. This means that if you call request()
  method and the response is a redirect elsewhere which is in turn a
  redirect, and so on seven times, then LWP gives up after that seventh
  request.
  
  =item $ua->parse_head
  
  =item $ua->parse_head( $boolean )
  
  Get/set a value indicating whether we should initialize response
  headers from the E<lt>head> section of HTML documents. The default is
  TRUE.  Do not turn this off, unless you know what you are doing.
  
  =item $ua->protocols_allowed
  
  =item $ua->protocols_allowed( \@protocols )
  
  This reads (or sets) this user agent's list of protocols that the
  request methods will exclusively allow.  The protocol names are case
  insensitive.
  
  For example: C<$ua-E<gt>protocols_allowed( [ 'http', 'https'] );>
  means that this user agent will I<allow only> those protocols,
  and attempts to use this user agent to access URLs with any other
  schemes (like "ftp://...") will result in a 500 error.
  
  To delete the list, call: C<$ua-E<gt>protocols_allowed(undef)>
  
  By default, an object has neither a C<protocols_allowed> list, nor a
  C<protocols_forbidden> list.
  
  Note that having a C<protocols_allowed> list causes any
  C<protocols_forbidden> list to be ignored.
  
  =item $ua->protocols_forbidden
  
  =item $ua->protocols_forbidden( \@protocols )
  
  This reads (or sets) this user agent's list of protocols that the
  request method will I<not> allow. The protocol names are case
  insensitive.
  
  For example: C<$ua-E<gt>protocols_forbidden( [ 'file', 'mailto'] );>
  means that this user agent will I<not> allow those protocols, and
  attempts to use this user agent to access URLs with those schemes
  will result in a 500 error.
  
  To delete the list, call: C<$ua-E<gt>protocols_forbidden(undef)>
  
  =item $ua->requests_redirectable
  
  =item $ua->requests_redirectable( \@requests )
  
  This reads or sets the object's list of request names that
  C<$ua-E<gt>redirect_ok(...)> will allow redirection for.  By
  default, this is C<['GET', 'HEAD']>, as per RFC 2616.  To
  change to include 'POST', consider:
  
     push @{ $ua->requests_redirectable }, 'POST';
  
  =item $ua->show_progress
  
  =item $ua->show_progress( $boolean )
  
  Get/set a value indicating whether a progress bar should be displayed
  on the terminal as requests are processed. The default is FALSE.
  
  =item $ua->timeout
  
  =item $ua->timeout( $secs )
  
  Get/set the timeout value in seconds. The default timeout() value is
  180 seconds, i.e. 3 minutes.
  
  The requests is aborted if no activity on the connection to the server
  is observed for C<timeout> seconds.  This means that the time it takes
  for the complete transaction and the request() method to actually
  return might be longer.
  
  =item $ua->ssl_opts
  
  =item $ua->ssl_opts( $key )
  
  =item $ua->ssl_opts( $key => $value )
  
  Get/set the options for SSL connections.  Without argument return the list
  of options keys currently set.  With a single argument return the current
  value for the given option.  With 2 arguments set the option value and return
  the old.  Setting an option to the value C<undef> removes this option.
  
  The options that LWP relates to are:
  
  =over
  
  =item C<verify_hostname> => $bool
  
  When TRUE LWP will for secure protocol schemes ensure it connects to servers
  that have a valid certificate matching the expected hostname.  If FALSE no
  checks are made and you can't be sure that you communicate with the expected peer.
  The no checks behaviour was the default for libwww-perl-5.837 and earlier releases.
  
  This option is initialized from the L<PERL_LWP_SSL_VERIFY_HOSTNAME> environment
  variable.  If this environment variable isn't set; then C<verify_hostname>
  defaults to 1.
  
  =item C<SSL_ca_file> => $path
  
  The path to a file containing Certificate Authority certificates.
  A default setting for this option is provided by checking the environment
  variables C<PERL_LWP_SSL_CA_FILE> and C<HTTPS_CA_FILE> in order.
  
  =item C<SSL_ca_path> => $path
  
  The path to a directory containing files containing Certificate Authority
  certificates.
  A default setting for this option is provided by checking the environment
  variables C<PERL_LWP_SSL_CA_PATH> and C<HTTPS_CA_DIR> in order.
  
  =back
  
  Other options can be set and are processed directly by the SSL Socket implementation
  in use.  See L<IO::Socket::SSL> or L<Net::SSL> for details.
  
  The libwww-perl core no longer bundles protocol plugins for SSL.  You will need
  to install L<LWP::Protocol::https> separately to enable support for processing
  https-URLs.
  
  =back
  
  =head2 Proxy attributes
  
  The following methods set up when requests should be passed via a
  proxy server.
  
  =over
  
  =item $ua->proxy(\@schemes, $proxy_url)
  
  =item $ua->proxy($scheme, $proxy_url)
  
  Set/retrieve proxy URL for a scheme:
  
   $ua->proxy(['http', 'ftp'], 'http://proxy.sn.no:8001/');
   $ua->proxy('gopher', 'http://proxy.sn.no:8001/');
  
  The first form specifies that the URL is to be used for proxying of
  access methods listed in the list in the first method argument,
  i.e. 'http' and 'ftp'.
  
  The second form shows a shorthand form for specifying
  proxy URL for a single access scheme.
  
  =item $ua->no_proxy( $domain, ... )
  
  Do not proxy requests to the given domains.  Calling no_proxy without
  any domains clears the list of domains. Eg:
  
   $ua->no_proxy('localhost', 'example.com');
  
  =item $ua->env_proxy
  
  Load proxy settings from *_proxy environment variables.  You might
  specify proxies like this (sh-syntax):
  
    gopher_proxy=http://proxy.my.place/
    wais_proxy=http://proxy.my.place/
    no_proxy="localhost,example.com"
    export gopher_proxy wais_proxy no_proxy
  
  csh or tcsh users should use the C<setenv> command to define these
  environment variables.
  
  On systems with case insensitive environment variables there exists a
  name clash between the CGI environment variables and the C<HTTP_PROXY>
  environment variable normally picked up by env_proxy().  Because of
  this C<HTTP_PROXY> is not honored for CGI scripts.  The
  C<CGI_HTTP_PROXY> environment variable can be used instead.
  
  =back
  
  =head2 Handlers
  
  Handlers are code that injected at various phases during the
  processing of requests.  The following methods are provided to manage
  the active handlers:
  
  =over
  
  =item $ua->add_handler( $phase => \&cb, %matchspec )
  
  Add handler to be invoked in the given processing phase.  For how to
  specify %matchspec see L<HTTP::Config/"Matching">.
  
  The possible values $phase and the corresponding callback signatures are:
  
  =over
  
  =item request_preprepare => sub { my($request, $ua, $h) = @_; ... }
  
  The handler is called before the C<request_prepare> and other standard
  initialization of the request.  This can be used to set up headers
  and attributes that the C<request_prepare> handler depends on.  Proxy
  initialization should take place here; but in general don't register
  handlers for this phase.
  
  =item request_prepare => sub { my($request, $ua, $h) = @_; ... }
  
  The handler is called before the request is sent and can modify the
  request any way it see fit.  This can for instance be used to add
  certain headers to specific requests.
  
  The method can assign a new request object to $_[0] to replace the
  request that is sent fully.
  
  The return value from the callback is ignored.  If an exception is
  raised it will abort the request and make the request method return a
  "400 Bad request" response.
  
  =item request_send => sub { my($request, $ua, $h) = @_; ... }
  
  This handler gets a chance of handling requests before they're sent to the
  protocol handlers.  It should return an HTTP::Response object if it
  wishes to terminate the processing; otherwise it should return nothing.
  
  The C<response_header> and C<response_data> handlers will not be
  invoked for this response, but the C<response_done> will be.
  
  =item response_header => sub { my($response, $ua, $h) = @_; ... }
  
  This handler is called right after the response headers have been
  received, but before any content data.  The handler might set up
  handlers for data and might croak to abort the request.
  
  The handler might set the $response->{default_add_content} value to
  control if any received data should be added to the response object
  directly.  This will initially be false if the $ua->request() method
  was called with a $content_file or $content_cb argument; otherwise true.
  
  =item response_data => sub { my($response, $ua, $h, $data) = @_; ... }
  
  This handler is called for each chunk of data received for the
  response.  The handler might croak to abort the request.
  
  This handler needs to return a TRUE value to be called again for
  subsequent chunks for the same request.
  
  =item response_done => sub { my($response, $ua, $h) = @_; ... }
  
  The handler is called after the response has been fully received, but
  before any redirect handling is attempted.  The handler can be used to
  extract information or modify the response.
  
  =item response_redirect => sub { my($response, $ua, $h) = @_; ... }
  
  The handler is called in $ua->request after C<response_done>.  If the
  handler returns an HTTP::Request object we'll start over with processing
  this request instead.
  
  =back
  
  =item $ua->remove_handler( undef, %matchspec )
  
  =item $ua->remove_handler( $phase, %matchspec )
  
  Remove handlers that match the given %matchspec.  If $phase is not
  provided remove handlers from all phases.
  
  Be careful as calling this function with %matchspec that is not
  specific enough can remove handlers not owned by you.  It's probably
  better to use the set_my_handler() method instead.
  
  The removed handlers are returned.
  
  =item $ua->set_my_handler( $phase, $cb, %matchspec )
  
  Set handlers private to the executing subroutine.  Works by defaulting
  an C<owner> field to the %matchspec that holds the name of the called
  subroutine.  You might pass an explicit C<owner> to override this.
  
  If $cb is passed as C<undef>, remove the handler.
  
  =item $ua->get_my_handler( $phase, %matchspec )
  
  =item $ua->get_my_handler( $phase, %matchspec, $init )
  
  Will retrieve the matching handler as hash ref.
  
  If C<$init> is passed as a TRUE value, create and add the
  handler if it's not found.  If $init is a subroutine reference, then
  it's called with the created handler hash as argument.  This sub might
  populate the hash with extra fields; especially the callback.  If
  $init is a hash reference, merge the hashes.
  
  =item $ua->handlers( $phase, $request )
  
  =item $ua->handlers( $phase, $response )
  
  Returns the handlers that apply to the given request or response at
  the given processing phase.
  
  =back
  
  =head1 REQUEST METHODS
  
  The methods described in this section are used to dispatch requests
  via the user agent.  The following request methods are provided:
  
  =over
  
  =item $ua->get( $url )
  
  =item $ua->get( $url , $field_name => $value, ... )
  
  This method will dispatch a C<GET> request on the given $url.  Further
  arguments can be given to initialize the headers of the request. These
  are given as separate name/value pairs.  The return value is a
  response object.  See L<HTTP::Response> for a description of the
  interface it provides.
  
  There will still be a response object returned when LWP can't connect to the
  server specified in the URL or when other failures in protocol handlers occur.
  These internal responses use the standard HTTP status codes, so the responses
  can't be differentiated by testing the response status code alone.  Error
  responses that LWP generates internally will have the "Client-Warning" header
  set to the value "Internal response".  If you need to differentiate these
  internal responses from responses that a remote server actually generates, you
  need to test this header value.
  
  Fields names that start with ":" are special.  These will not
  initialize headers of the request but will determine how the response
  content is treated.  The following special field names are recognized:
  
      :content_file   => $filename
      :content_cb     => \&callback
      :read_size_hint => $bytes
  
  If a $filename is provided with the C<:content_file> option, then the
  response content will be saved here instead of in the response
  object.  If a callback is provided with the C<:content_cb> option then
  this function will be called for each chunk of the response content as
  it is received from the server.  If neither of these options are
  given, then the response content will accumulate in the response
  object itself.  This might not be suitable for very large response
  bodies.  Only one of C<:content_file> or C<:content_cb> can be
  specified.  The content of unsuccessful responses will always
  accumulate in the response object itself, regardless of the
  C<:content_file> or C<:content_cb> options passed in.
  
  The C<:read_size_hint> option is passed to the protocol module which
  will try to read data from the server in chunks of this size.  A
  smaller value for the C<:read_size_hint> will result in a higher
  number of callback invocations.
  
  The callback function is called with 3 arguments: a chunk of data, a
  reference to the response object, and a reference to the protocol
  object.  The callback can abort the request by invoking die().  The
  exception message will show up as the "X-Died" header field in the
  response returned by the get() function.
  
  =item $ua->head( $url )
  
  =item $ua->head( $url , $field_name => $value, ... )
  
  This method will dispatch a C<HEAD> request on the given $url.
  Otherwise it works like the get() method described above.
  
  =item $ua->post( $url, \%form )
  
  =item $ua->post( $url, \@form )
  
  =item $ua->post( $url, \%form, $field_name => $value, ... )
  
  =item $ua->post( $url, $field_name => $value,... Content => \%form )
  
  =item $ua->post( $url, $field_name => $value,... Content => \@form )
  
  =item $ua->post( $url, $field_name => $value,... Content => $content )
  
  This method will dispatch a C<POST> request on the given $url, with
  %form or @form providing the key/value pairs for the fill-in form
  content. Additional headers and content options are the same as for
  the get() method.
  
  This method will use the POST() function from C<HTTP::Request::Common>
  to build the request.  See L<HTTP::Request::Common> for a details on
  how to pass form content and other advanced features.
  
  =item $ua->put( $url, \%form )
  
  =item $ua->put( $url, \@form )
  
  =item $ua->put( $url, \%form, $field_name => $value, ... )
  
  =item $ua->put( $url, $field_name => $value,... Content => \%form )
  
  =item $ua->put( $url, $field_name => $value,... Content => \@form )
  
  =item $ua->put( $url, $field_name => $value,... Content => $content )
  
  This method will dispatch a C<PUT> request on the given $url, with
  %form or @form providing the key/value pairs for the fill-in form
  content. Additional headers and content options are the same as for
  the get() method.
  
  This method will use the PUT() function from C<HTTP::Request::Common>
  to build the request.  See L<HTTP::Request::Common> for a details on
  how to pass form content and other advanced features.
  
  =item $ua->delete( $url )
  
  =item $ua->delete( $url, $field_name => $value, ... )
  
  This method will dispatch a C<DELETE> request on the given $url.  Additional
  headers and content options are the same as for the get() method.
  
  This method will use the DELETE() function from C<HTTP::Request::Common>
  to build the request.  See L<HTTP::Request::Common> for a details on
  how to pass form content and other advanced features.
  
  =item $ua->mirror( $url, $filename )
  
  This method will get the document identified by $url and store it in
  file called $filename.  If the file already exists, then the request
  will contain an "If-Modified-Since" header matching the modification
  time of the file.  If the document on the server has not changed since
  this time, then nothing happens.  If the document has been updated, it
  will be downloaded again.  The modification time of the file will be
  forced to match that of the server.
  
  The return value is the response object.
  
  =item $ua->request( $request )
  
  =item $ua->request( $request, $content_file )
  
  =item $ua->request( $request, $content_cb )
  
  =item $ua->request( $request, $content_cb, $read_size_hint )
  
  This method will dispatch the given $request object.  Normally this
  will be an instance of the C<HTTP::Request> class, but any object with
  a similar interface will do.  The return value is a response object.
  See L<HTTP::Request> and L<HTTP::Response> for a description of the
  interface provided by these classes.
  
  The request() method will process redirects and authentication
  responses transparently.  This means that it may actually send several
  simple requests via the simple_request() method described below.
  
  The request methods described above; get(), head(), post() and
  mirror(), will all dispatch the request they build via this method.
  They are convenience methods that simply hides the creation of the
  request object for you.
  
  The $content_file, $content_cb and $read_size_hint all correspond to
  options described with the get() method above.
  
  You are allowed to use a CODE reference as C<content> in the request
  object passed in.  The C<content> function should return the content
  when called.  The content can be returned in chunks.  The content
  function will be invoked repeatedly until it return an empty string to
  signal that there is no more content.
  
  =item $ua->simple_request( $request )
  
  =item $ua->simple_request( $request, $content_file )
  
  =item $ua->simple_request( $request, $content_cb )
  
  =item $ua->simple_request( $request, $content_cb, $read_size_hint )
  
  This method dispatches a single request and returns the response
  received.  Arguments are the same as for request() described above.
  
  The difference from request() is that simple_request() will not try to
  handle redirects or authentication responses.  The request() method
  will in fact invoke this method for each simple request it sends.
  
  =item $ua->is_online
  
  Tries to determine if you have access to the Internet.  Returns
  TRUE if the built-in heuristics determine that the user agent is
  able to access the Internet (over HTTP).  See also L<LWP::Online>.
  
  =item $ua->is_protocol_supported( $scheme )
  
  You can use this method to test whether this user agent object supports the
  specified C<scheme>.  (The C<scheme> might be a string (like 'http' or
  'ftp') or it might be an URI object reference.)
  
  Whether a scheme is supported, is determined by the user agent's
  C<protocols_allowed> or C<protocols_forbidden> lists (if any), and by
  the capabilities of LWP.  I.e., this will return TRUE only if LWP
  supports this protocol I<and> it's permitted for this particular
  object.
  
  =back
  
  =head2 Callback methods
  
  The following methods will be invoked as requests are processed. These
  methods are documented here because subclasses of C<LWP::UserAgent>
  might want to override their behaviour.
  
  =over
  
  =item $ua->prepare_request( $request )
  
  This method is invoked by simple_request().  Its task is to modify the
  given $request object by setting up various headers based on the
  attributes of the user agent. The return value should normally be the
  $request object passed in.  If a different request object is returned
  it will be the one actually processed.
  
  The headers affected by the base implementation are; "User-Agent",
  "From", "Range" and "Cookie".
  
  =item $ua->redirect_ok( $prospective_request, $response )
  
  This method is called by request() before it tries to follow a
  redirection to the request in $response.  This should return a TRUE
  value if this redirection is permissible.  The $prospective_request
  will be the request to be sent if this method returns TRUE.
  
  The base implementation will return FALSE unless the method
  is in the object's C<requests_redirectable> list,
  FALSE if the proposed redirection is to a "file://..."
  URL, and TRUE otherwise.
  
  =item $ua->get_basic_credentials( $realm, $uri, $isproxy )
  
  This is called by request() to retrieve credentials for documents
  protected by Basic or Digest Authentication.  The arguments passed in
  is the $realm provided by the server, the $uri requested and a boolean
  flag to indicate if this is authentication against a proxy server.
  
  The method should return a username and password.  It should return an
  empty list to abort the authentication resolution attempt.  Subclasses
  can override this method to prompt the user for the information. An
  example of this can be found in C<lwp-request> program distributed
  with this library.
  
  The base implementation simply checks a set of pre-stored member
  variables, set up with the credentials() method.
  
  =item $ua->progress( $status, $request_or_response )
  
  This is called frequently as the response is received regardless of
  how the content is processed.  The method is called with $status
  "begin" at the start of processing the request and with $state "end"
  before the request method returns.  In between these $status will be
  the fraction of the response currently received or the string "tick"
  if the fraction can't be calculated.
  
  When $status is "begin" the second argument is the request object,
  otherwise it is the response object.
  
  =back
  
  =head1 SEE ALSO
  
  See L<LWP> for a complete overview of libwww-perl5.  See L<lwpcook>
  and the scripts F<lwp-request> and F<lwp-download> for examples of
  usage.
  
  See L<HTTP::Request> and L<HTTP::Response> for a description of the
  message objects dispatched and received.  See L<HTTP::Request::Common>
  and L<HTML::Form> for other ways to build request objects.
  
  See L<WWW::Mechanize> and L<WWW::Search> for examples of more
  specialized user agents based on C<LWP::UserAgent>.
  
  =head1 COPYRIGHT
  
  Copyright 1995-2009 Gisle Aas.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
LWP_USERAGENT

    $main::fatpacked{"Lingua/EN/Numbers/Ordinate.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LINGUA_EN_NUMBERS_ORDINATE';
  package Lingua::EN::Numbers::Ordinate;
  $Lingua::EN::Numbers::Ordinate::VERSION = '1.04';
  # ABSTRACT: go from cardinal number (3) to ordinal ("3rd")
  
  use 5.006;
  use strict;
  use warnings;
  require Exporter;
  
  our @ISA        = qw/ Exporter  /;
  our @EXPORT     = qw/ ordinate  /;
  our @EXPORT_OK  = qw/ ordsuf th /;
  
  ###########################################################################
  
  =head1 NAME
  
  Lingua::EN::Numbers::Ordinate -- go from cardinal number (3) to ordinal ("3rd")
  
  =head1 SYNOPSIS
  
    use Lingua::EN::Numbers::Ordinate;
    print ordinate(4), "\n";
     # prints 4th
    print ordinate(-342), "\n";
     # prints -342nd
  
    # Example of actual use:
    ...
    for(my $i = 0; $i < @records; $i++) {
      unless(is_valid($record[$i]) {
        warn "The ", ordinate($i), " record is invalid!\n"; 
        next;
      }
      ...
    }
  
  =head1 DESCRIPTION
  
  There are two kinds of numbers in English -- cardinals (1, 2, 3...), and
  ordinals (1st, 2nd, 3rd...).  This library provides functions for giving
  the ordinal form of a number, given its cardinal value.
  
  =head1 FUNCTIONS
  
  =over
  
  =item ordinate(SCALAR)
  
  Returns a string consisting of that scalar's string form, plus the
  appropriate ordinal suffix.  Example: C<ordinate(23)> returns "23rd".
  
  As a special case, C<ordinate(undef)> and C<ordinate("")> return "0th",
  not "th".
  
  This function is exported by default.
  
  =item th(SCALAR)
  
  Merely an alias for C<ordinate>, but not exported by default.
  
  =item ordsuf(SCALAR)
  
  Returns just the appropriate ordinal suffix for the given scalar
  numeric value.  This is what C<ordinate> uses to actually do its
  work.  For example, C<ordsuf(3)> is "rd". 
  
  Not exported by default.
  
  =back
  
  The above functions are all prototyped to take a scalar value,
  so C<ordinate(@stuff)> is the same as C<ordinate(scalar @stuff)>.
  
  =head1 CAVEATS
  
  * Note that this library knows only about numbers, not number-words.
  C<ordinate('seven')> might just as well be C<ordinate('superglue')>
  or C<ordinate("\x1E\x9A")> -- you'll get the fallthru case of the input
  string plus "th".
  
  * As is unavoidable, C<ordinate(0256)> returns "174th" (because ordinate
  sees the value 174). Similarly, C<ordinate(1E12)> returns
  "1000000000000th".  Returning "trillionth" would be nice, but that's an
  awfully atypical case.
  
  * Note that this library's algorithm (as well as the basic concept
  and implementation of ordinal numbers) is totally language specific.
  
  To pick a trivial example, consider that in French, 1 ordinates
  as "1ier", whereas 41 ordinates as "41ieme".
  
  =head1 STILL NOT SATISFIED?
  
  Bored of this...?
  
    use Lingua::EN::Numbers::Ordinate qw(ordinate th);
    ...
    print th($n), " entry processed...\n";
    ...
  
  Try this bit of lunacy:
  
    {
      my $th_object;
      sub _th () { $th_object }
  
      package Lingua::EN::Numbers::Ordinate::Overloader;
      my $x; # Gotta have something to bless.
      $th_object = bless \$x; # Define the object now, which _th returns
      use Carp ();
      use Lingua::EN::Numbers::Ordinate ();
      sub overordinate {
        Carp::croak "_th should be used only as postfix!" unless $_[2];
        Lingua::EN::Numbers::Ordinate::ordinate($_[1]);
      }
      use overload '&' => \&overordinate;
    }
  
  Then you get to do:
  
    print 3 & _th, "\n";
      # prints "3rd"
    
    print 1 + 2 & _th, "\n";
      # prints "3rd" too!
      # Because of the precedence of & !
    
    print _th & 3, "\n";
      # dies with: "th should be used only as postfix!"
  
  Kooky, isn't it?  For more delightful deleria like this, see
  Damian Conway's I<Object Oriented Perl> from Manning Press.
  
  Kinda makes you like C<th(3)>, doesn't it?
  
  =head1 SEE ALSO
  
  L<Lingua::EN::Inflect> provides an C<ORD> function,
  which returns the ordinal form of a cardinal number.
  
  L<Lingua::EN::Number::IsOrdinal> provides an C<is_ordinal>
  function, which returns true if passed an ordinal number.
  
  =head1 REPOSITORY
  
  L<https://github.com/neilbowers/Lingua-EN-Numbers-Ordinate>
  
  =head1 COPYRIGHT
  
  Copyright (c) 2000 Sean M. Burke.  All rights reserved.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =head1 AUTHOR
  
  Sean M. Burke C<sburke@cpan.org>
  
  =cut
  
  ###########################################################################
  
  sub ordsuf ($) {
    return 'th' if not(defined($_[0])) or not( 0 + $_[0] );
     # 'th' for undef, 0, or anything non-number.
    my $n = abs($_[0]);  # Throw away the sign.
    return 'th' unless $n == int($n); # Best possible, I guess.
    $n %= 100;
    return 'th' if $n == 11 or $n == 12 or $n == 13;
    $n %= 10;
    return 'st' if $n == 1; 
    return 'nd' if $n == 2;
    return 'rd' if $n == 3;
    return 'th';
  }
  
  sub ordinate ($) {
    my $i = $_[0] || 0;
    return $i . ordsuf($i);
  }
  
  no warnings 'all';
  *th = \&ordinate; # correctly copies the prototype, too.
  
  ###########################################################################
  1;
  
  __END__
LINGUA_EN_NUMBERS_ORDINATE

    $main::fatpacked{"Lingua/EN/PluralToSingular.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LINGUA_EN_PLURALTOSINGULAR';
  package Lingua::EN::PluralToSingular;
  use warnings;
  use strict;
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw/to_singular is_plural/;
  our $VERSION = '0.18';
  
  # Irregular plurals.
  
  # References:
  # http://www.macmillandictionary.com/thesaurus-category/british/Irregular-plurals
  # http://web2.uvcs.uvic.ca/elc/studyzone/330/grammar/irrplu.htm
  # http://www.scribd.com/doc/3271143/List-of-100-Irregular-Plural-Nouns-in-English
  
  # This mixes latin/greek plurals and anglo-saxon together. It may be
  # desirable to split things like corpora and genera from "feet" and
  # "geese" at some point.
  
  my %irregular = (qw/
      analyses analysis
      brethren brother
      children child
      corpora corpus
      craftsmen craftsman
      crises crisis
      criteria criterion
      curricula curriculum
      feet foot
      fungi fungus
      geese goose
      genera genus
      indices index
      lice louse
      matrices matrix
      memoranda memorandum
      men man
      mice mouse
      monies money
      neuroses neurosis
      nuclei nucleus
      oases oasis
      oxen ox
      pence penny
      people person
      phenomena phenomenon
      quanta quantum
      strata stratum
      teeth tooth
      testes testis
      these this
      theses thesis
      those that
      women woman
  /);
  
  # Words ending in ves need care, since the ves may become "f" or "fe".
  
  # References:
  # http://www.macmillandictionary.com/thesaurus-category/british/Irregular-plurals
  
  my %ves = (qw/
      calves calf
      dwarves dwarf
      elves elf
      halves half
      knives knife
      leaves leaf
      lives life
      loaves loaf
      scarves scarf
      sheaves sheaf
      shelves shelf
      wharves wharf 
      wives wife
      wolves wolf
  /);
  
  # A dictionary of plurals.
  
  my %plural = (
      # Words ending in "us" which are plural, in contrast to words like
      # "citrus" or "bogus".
      'menus' => 'menu',
      'buses' => 'bus',
      %ves,
      %irregular,
  );
  
  # A store of words which are the same in both singular and plural.
  
  my @no_change = qw/
                        deer
                        ides
                        fish
                        means
                        offspring
                        series
                        sheep
                        species
                    /;
  
  @plural{@no_change} = @no_change;
  
  # A store of words which look like plurals but are not.
  
  # References:
  
  # http://wiki.answers.com/Q/What_are_some_examples_of_singular_nouns_ending_in_S
  # http://virtuallinguist.typepad.com/the_virtual_linguist/2009/10/singular-nouns-ending-in-s.html
  
  my @not_plural = (qw/
  Aries
  Charles
  Gonzales 
  Hades 
  Hercules 
  Hermes 
  Holmes 
  Hughes 
  Ives 
  Jacques 
  James 
  Keyes 
  Mercedes 
  Naples 
  Oates 
  Raines 
  Texas
  athletics
  bogus
  bus
  cactus
  cannabis
  caries
  chaos
  citrus
  clothes
  corps
  corpus
  devious
  dias
  facies
  famous
  hippopotamus
  homunculus
  iris
  lens
  mathematics
  metaphysics
  metropolis
  mews
  minus
  miscellaneous
  molasses
  mrs
  narcissus
  news
  octopus
  ourselves
  papyrus
  perhaps
  physics
  platypus
  plus
  previous
  pus
  rabies
  scabies
  sometimes
  stylus
  themselves
  this
  thus
  various
  yes
  /);
  
  my %not_plural;
  
  @not_plural{@not_plural} = (1) x @not_plural;
  
  # A store of words which end in "oe" and whose plural ends in "oes".
  
  # References
  # http://www.scrabblefinder.com/ends-with/oe/
  
  # Also used
  
  # perl -n -e 'print if /oe$/' < /usr/share/dict/words
  
  my @oes = (qw/
  canoes
  does
  foes
  gumshoes
  hoes
  horseshoes
  oboes
  shoes
  snowshoes
  throes
  toes
  /);
  
  my %oes;
  
  @oes{@oes} = (1) x @oes;
  
  # A store of words which end in "ie" and whose plural ends in "ies".
  
  # References:
  # http://www.scrabblefinder.com/ends-with/ie/
  # (most of the words are invalid, the above list was manually searched
  # for useful words).
  
  # Also get a good list using
  
  # perl -n -e 'print if /ie$/' < /usr/share/dict/words 
  
  # There are too many obscure words there though.
  
  # Also, I'm deliberately not including "Bernie" and "Bessie" since the
  # plurals are rare I think. 
  
  my @ies = (qw/
  Aussies
  Valkryies
  aunties
  bogies
  brownies
  calories
  charlies
  coolies
  coteries
  curies
  cuties
  dies
  genies
  goalies
  kilocalories
  lies
  magpies
  menagerie
  movies
  neckties
  pies
  porkpies
  prairies
  quickies
  reveries
  rookies
  sorties
  stogies
  talkies
  ties
  zombies
  /);
  
  my %ies;
  
  @ies{@ies} = (1) x @ies;
  
  # Words which end in -se, so that we want the singular to change from
  # -ses to -se.
  
  my @ses = (qw/
  horses
  tenses
  /);
  
  my %ses;
  @ses{@ses} = (1) x @ses;
  # A regular expression which matches the end of words like "dishes"
  # and "sandwiches". $1 is a capture which contains the part of the
  # word which should be kept in a substitution.
  
  my $es_re = qr/([^aeiou]s|ch|sh)es$/;
  
  # Plurals ending -i, singular is either -us, -o or something else
  # See https://en.wiktionary.org/wiki/Category:English_irregular_plurals_ending_in_%22-i%22
  
  # -i to -us
  my @i_to_us = (qw/
  abaci
  abaculi
  acanthi
  acini
  alumni
  anthocauli
  bacilli
  baetuli
  cacti
  calculi
  calli
  catheti
  emboli
  emeriti
  esophagi
  foci
  foeti
  fumuli
  fungi
  gonococci
  hippopotami
  homunculi
  incubi
  loci
  macrofungi
  macronuclei
  naevi
  nuclei
  obeli
  octopi
  oeconomi
  oesophagi
  panni
  periœci
  phocomeli
  phoeti
  platypi
  polypi
  precunei
  radii
  rhombi
  sarcophagi
  solidi
  stimuli
  succubi
  syllabi
  thesauri
  thrombi
  tori
  trophi
  uteri
  viri
  virii
  xiphopagi
  zygomatici
  /);
  
  my %i_to_us;
  @i_to_us{@i_to_us} = (1) x @i_to_us;
  
  # -i to -o
  my @i_to_o = (qw/
      alveoli
      ghetti
      manifesti
      ostinati
      pianissimi
      scenarii
      stiletti
      torsi
  /);
  
  my %i_to_o;
  @i_to_o{@i_to_o} = (1) x @i_to_o;
  
  # -i to something else
  my %i_to_other = (
      improvisatori => 'improvisatore',
      rhinoceri => 'rhinoceros',
      scaloppini => 'scaloppine'
  );
  
  # See documentation below.
  
  sub to_singular
  {
      my ($word) = @_;
      # The return value.
      my $singular = $word;
      if (! $not_plural{$word}) {
          # The word is not in the list of exceptions.
          if ($plural{$word}) {
              # The word has an irregular plural, like "children", or
              # "geese", so look up the singular in the table.
              $singular = $plural{$word};
          }
          elsif ($word =~ /s$/) {
              # The word ends in "s".
              if ($word =~ /'s$/) {
              # report's, etc.
              ;
              }
              elsif (length ($word) <= 2) {
              # is, as, letter s, etc.
              ;
              }
              elsif ($word =~ /ss$/) {
              # useless, etc.
              ;
              }
              elsif ($word =~ /sis$/) {
              # basis, dialysis etc.
              ;
              }
              elsif ($word =~ /ies$/) {
                  # The word ends in "ies".
                  if ($ies{$word}) {
                      # Lies -> lie
                      $singular =~ s/ies$/ie/;
                  }
                  else {
                      # Fries -> fry
                      $singular =~ s/ies$/y/;
                  }
              }
              elsif ($word =~ /oes$/) {
                  # The word ends in "oes".
                  if ($oes{$word}) {
                      # Toes -> toe
                      $singular =~ s/oes$/oe/;
                  }
                  else {
                      # Potatoes -> potato
                      $singular =~ s/oes$/o/;
                  }
              }
              elsif ($word =~ /xes$/) {
                  # The word ends in "xes".
  		        $singular =~ s/xes$/x/;
              }
              elsif ($word =~ /ses$/) {
                  if ($ses{$word}) {
                      $singular =~ s/ses$/se/;
                  }
                  else {
                      $singular =~ s/ses$/s/;
                  }
  	        }
              elsif ($word =~ $es_re) {
                  # Sandwiches -> sandwich
                  # Dishes -> dish
                  $singular =~ s/$es_re/$1/;
              }
              else {
                  # Now the program has checked for every exception it
                  # can think of, so it assumes that it is OK to remove
                  # the "s" from the end of the word.
                  $singular =~ s/s$//;
              }
          }
          elsif ($word =~ /i$/) {
              if ($i_to_us{$word}) {
                  $singular =~ s/i$/us/;
              }
              elsif ($i_to_o{$word}) {
                  $singular =~ s/i$/o/;
              }
              if ($i_to_other{$word}) {
                  $singular = $i_to_other{$word};
              }
          }
  
      }
      return $singular;
  }
  
  sub is_plural
  {
      my ($word) = @_;
      my $singular = to_singular ($word);
      my $is_plural;
      if ($singular ne $word) {
  	    $is_plural = 1;
      }
      elsif ($plural{$singular} && $plural{$singular} eq $singular) {
  	    $is_plural = 1;
      }
      else {
  	    $is_plural = 0;
      }
      return $is_plural;
  }
  
  1;
LINGUA_EN_PLURALTOSINGULAR

    $main::fatpacked{"Locale/Messages.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_MESSAGES';
  #! /bin/false
  
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::Messages;
  
  use strict;
  
  use vars qw ($package @EXPORT_OK %EXPORT_TAGS @ISA $VERSION);
  
  $VERSION = '1.26';
  
  # Try to load the C version first.
  $package = 'gettext_xs';
  eval <<'EOF';
  require Locale::gettext_xs; 
  my $version = Locale::gettext_xs::__gettext_xs_version();
  die "Version: version mismatch ($VERSION vs. $version)" unless $version eq $VERSION;
  EOF
  my $no_xs = $@;
  
  # There are systems where setlocale() and the LC_ constants are not
  # defined at all, see https://rt.cpan.org/Ticket/Display.html?id=98109
  #
  # On such systems, we always fall back to gettext_dumb.
  if ($no_xs) {
      eval {
          require POSIX;
          # void
          POSIX::setlocale(POSIX::LC_ALL());
      };
      if ($@) {
          $package = 'gettext_dumb';
          require Locale::gettext_dumb;
      } else {
          $package = 'gettext_pp';
          require Locale::gettext_pp;
      }
  }
  		
  require Exporter;
  @ISA = qw (Exporter);
  %EXPORT_TAGS = (locale_h => [ qw (gettext
  				  dgettext
  				  dcgettext
  				  ngettext
  				  dngettext
  				  dcngettext
  				  pgettext
  				  dpgettext
  				  dcpgettext
  				  npgettext
  				  dnpgettext
  				  dcnpgettext
  				  textdomain
  				  bindtextdomain
  				  bind_textdomain_codeset
  				  )
  			       ],
  		 libintl_h => [ qw (LC_CTYPE
  				    LC_NUMERIC
  				    LC_TIME
  				    LC_COLLATE
  				    LC_MONETARY
  				    LC_MESSAGES
  				    LC_ALL)
  				],
  		 );
  
  @EXPORT_OK = qw (select_package
  				 turn_utf_8_on
  				 turn_utf_8_off
  				 gettext
  				 dgettext
  				 dcgettext
  				 ngettext
  				 dngettext
  				 dcngettext
  				 pgettext
  				 dpgettext
  				 dcpgettext
  				 npgettext
  				 dnpgettext
  				 dcnpgettext
  				 textdomain
  				 bindtextdomain
  				 bind_textdomain_codeset
  				 bind_textdomain_filter
                   nl_putenv
                   setlocale
  				 LC_CTYPE
  				 LC_NUMERIC
  				 LC_TIME
  				 LC_COLLATE
  				 LC_MONETARY
  				 LC_MESSAGES
  				 LC_ALL);
  
  BEGIN {
  	my ($has_encode, $has_bytes);
  	
  	if ($] >= 5.006) {
  		unless (defined $has_encode) {
  			eval "require Encode";
  			$has_encode = !$@;
  		}
  
  		unless ($has_encode || defined $has_bytes) {
  			eval "use bytes";
  			$has_bytes = !$@;
  		}
  	}
  
  	# Turn the UTF-8 flag on or off unconditionally.  The prototypes
  	# allow an optional second parameter, so that you can use the
  	# functions as callbacks to bind_textdomain_filter.
  	if ($has_encode) {
  		eval <<'EOF';
  sub turn_utf_8_on($;$)
  {
  	Encode::_utf8_on ($_[0]);
  	return $_[0];
  }
  
  sub turn_utf_8_off($;$)
  {
  	Encode::_utf8_off ($_[0]);
  	return $_[0];
  }
  
  EOF
  	} elsif ($has_bytes) {
  		eval <<'EOF';
  sub turn_utf_8_on($;$)
  {
  	$_[0] = pack "U0C*", unpack "C*", $_[0];
  }
  
  sub turn_utf_8_off($;$)
  {
  	use bytes;
  	$_[0] = join "", split //, $_[0];
  }
  
  EOF
  	} else {
  		eval <<'EOF';
  sub turn_utf_8_on($;$)
  {
  	return $_[0];
  }
  
  sub turn_utf_8_off($;$)
  {
  	return $_[0];
  }
  
  EOF
  	}
  }
  
  # The textdomain could be undef.  We avoid a warning by specifying
  # a filter for the undefined textdomain.
  my %filters = (undef => \&turn_utf_8_off);
  
  sub select_package {
      my ($pkg, $compatibility) = @_;
  
      # Compatibility quirk for a bug pre 1.17:
      if (__PACKAGE__ eq $pkg && defined $compatibility) {
          $pkg = $compatibility;
      }
  
      if ($no_xs && 'gettext_xs' eq $pkg) {
          $pkg = 'gettext_pp';
      }
  
      if (defined $pkg && 'gettext_pp' eq $pkg) {
          # This branch is not unnecessary.  The next (elsif) branch does
          # essentially the same but catches compilation errors.
          require Locale::gettext_pp;
          $package = 'gettext_pp';
      } elsif (defined $pkg) {
          my $filename = "Locale::$pkg";
          $filename =~ s{::|\'}{/};
  	$filename .= '.pm';
          eval { require $filename };
  	$package = $pkg unless $@;   
      } else {
          eval "require Locale::gettext_xs";
          $package = 'gettext_xs' unless $@;
      }
  
      return $package;
  }
  
  sub bind_textdomain_filter ($;$$) {
  	my ($textdomain, $coderef, $data) = @_;
  
  	$filters{$textdomain} = [ $coderef, $data ];
  
  	return 1;
  }
  
  sub textdomain (;$) {
      my $function = "Locale::${package}::textdomain";
      
      no strict 'refs';
      &$function;
  }
  
  sub bindtextdomain ($;$) {
      my $function = "Locale::${package}::bindtextdomain";
  
      no strict 'refs';
      &$function;
  }
  
  sub bind_textdomain_codeset ($;$) {
      my $function = "Locale::${package}::bind_textdomain_codeset";
  
      no strict 'refs';    
      &$function;
  }
  
  sub gettext ($) {
      my $textdomain = textdomain;
      $filters{$textdomain} ||= [ \&turn_utf_8_off ];
      my $cb = $filters{$textdomain};
  
      my $function = "Locale::${package}::gettext";
      
      no strict 'refs';
      $cb->[0] (&$function, $cb->[1]);
  }
  
  sub dgettext($$) {
      my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
  
      my $function = "Locale::${package}::dgettext";
      
      no strict 'refs';
      $cb->[0] (&$function, $cb->[1]);
  }
  
  sub dcgettext($$$) {
      my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
  
      my $function = "Locale::${package}::dcgettext";
      
      no strict 'refs';
      $cb->[0] (&$function, $cb->[1]);
  }
  
  sub ngettext($$$) {
      my $textdomain = textdomain;
      $filters{$textdomain} ||= [ \&turn_utf_8_off ];
      my $cb = $filters{$textdomain};
  
      my $function = "Locale::${package}::ngettext";
      
      no strict 'refs';
      $cb->[0] (&$function, $cb->[1]);
  }
  
  sub dngettext($$$$) {
      my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
  
      my $function = "Locale::${package}::dngettext";
      
      no strict 'refs';
      $cb->[0] (&$function, $cb->[1]);
  }
  
  sub dcngettext($$$$$) {
      my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
  
      my $function = "Locale::${package}::dcngettext";
      
      no strict 'refs';
      $cb->[0] (&$function, $cb->[1]);
  }
  
  sub pgettext($$) {
      my $textdomain = textdomain;
      $filters{$textdomain} ||= [ \&turn_utf_8_off ];
      my $cb = $filters{$textdomain};
  
      my $function = "Locale::${package}::pgettext";
      
      no strict 'refs';
      $cb->[0] (&$function, $cb->[1]);
  }
  
  sub dpgettext($$$) {
      my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
  
      my $function = "Locale::${package}::dpgettext";
      
      no strict 'refs';
      $cb->[0] (&$function, $cb->[1]);
  }
  
  sub dcpgettext($$$$) {
      my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
  
      my $function = "Locale::${package}::dcpgettext";
      
      no strict 'refs';
      $cb->[0] (&$function, $cb->[1]);
  }
  
  sub npgettext($$$$) {
      my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
  
      my $function = "Locale::${package}::npgettext";
      
      no strict 'refs';
      $cb->[0] (&$function, $cb->[1]);
  }
  
  sub dnpgettext($$$$$) {
      my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
  
      my $function = "Locale::${package}::dnpgettext";
      
      no strict 'refs';
      $cb->[0] (&$function, $cb->[1]);
  }
  
  sub dcnpgettext($$$$$$) {
      my $cb = $filters{$_[0]} ||= [ \&turn_utf_8_off ];
  
      my $function = "Locale::${package}::dcnpgettext";
      
      no strict 'refs';
      $cb->[0] (&$function, $cb->[1]);
  }
  
  sub setlocale($;$) {
      my $function = "Locale::${package}::setlocale";
      
      no strict 'refs';
      &$function;
  }
  
  sub nl_putenv($) {
      my $function = "Locale::${package}::nl_putenv";
      
      no strict 'refs';
      &$function;
  }
  
  sub LC_NUMERIC {
      my $function = "Locale::${package}::LC_NUMERIC";
      
      no strict 'refs';
      &$function;
  }
  
  sub LC_CTYPE {
      my $function = "Locale::${package}::LC_CTYPE";
      
      no strict 'refs';
      &$function;
  }
  
  sub LC_TIME {
      my $function = "Locale::${package}::LC_TIME";
      
      no strict 'refs';
      &$function;
  }
  
  sub LC_COLLATE {
      my $function = "Locale::${package}::LC_COLLATE";
      
      no strict 'refs';
      &$function;
  }
  
  sub LC_MONETARY {
      my $function = "Locale::${package}::LC_MONETARY";
      
      no strict 'refs';
      &$function;
  }
  
  sub LC_MESSAGES {
      my $function = "Locale::${package}::LC_MESSAGES";
      
      no strict 'refs';
      &$function;
  }
  
  sub LC_ALL {
      my $function = "Locale::${package}::LC_ALL";
      
      no strict 'refs';
      &$function;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::Messages - Gettext Like Message Retrieval
  
  =head1 SYNOPSIS
  
   use Locale::Messages (:locale_h :libintl_h);
  
   gettext $msgid;
   dgettext $textdomain, $msgid;
   dcgettext $textdomain, $msgid, LC_MESSAGES;
   ngettext $msgid, $msgid_plural, $count;
   dngettext $textdomain, $msgid, $msgid_plural, $count;
   dcngettext $textdomain, $msgid, $msgid_plural, $count, LC_MESSAGES;
   pgettext $msgctxt, $msgid;
   dpgettext $textdomain, $msgctxt, $msgid;
   dcpgettext $textdomain, $msgctxt, $msgid, LC_MESSAGES;
   npgettext $msgctxt, $msgid, $msgid_plural, $count;
   dnpgettext $textdomain, $msgctxt, $msgid, $msgid_plural, $count;
   dcnpgettext $textdomain, $msgctxt, $msgid, $msgid_plural, $count, LC_MESSAGES;
   textdomain $textdomain;
   bindtextdomain $textdomain, $directory;
   bind_textdomain_codeset $textdomain, $encoding;
   bind_textdomain_filter $textdomain, \&filter, $data;
   turn_utf_8_on ($variable);
   turn_utf_8_off ($variable);
   nl_putenv ('OUTPUT_CHARSET=koi8-r');
   my $category = LC_CTYPE;
   my $category = LC_NUMERIC;
   my $category = LC_TIME;
   my $category = LC_COLLATE;
   my $category = LC_MONETARY;
   my $category = LC_MESSAGES;
   my $category = LC_ALL;
  
  =head1 DESCRIPTION
  
  The module B<Locale::Messages> is a wrapper around the interface to
  message translation according to the Uniforum approach that is
  for example used in GNU gettext and Sun's Solaris.  It is intended
  to allow Locale::Messages(3) to switch between different implementations
  of the lower level libraries but this is not yet implemented.
  
  Normally you should not use this module directly, but the high
  level interface Locale::TextDomain(3) that provides a much simpler
  interface.  This description is therefore deliberately kept
  brief.  Please refer to the GNU gettext documentation available at
  L<http://www.gnu.org/manual/gettext/> for in-depth and background 
  information on the topic.
  
  The lower level module Locale::gettext_pp(3) provides the Perl
  implementation of gettext() and related functions.
  
  =head1 FUNCTIONS
  
  The module exports by default nothing.  Every function has to be
  imported explicitely or via an export tag (L</"EXPORT TAGS">).
  
  =over 4
  
  =item B<gettext MSGID>
  
  Returns the translation for B<MSGID>.  Example:
  
      print gettext "Hello World!\n";
  
  If no translation can be found, the unmodified B<MSGID> is returned,
  i. e. the function can I<never> fail, and will I<never> mess up your
  original message.
  
  Note for Perl 5.6 and later: The returned string will I<always> have
  the UTF-8 flag off by default.  See the documentation for function
  bind_textdomain_filter() for a way to change this behavior.
  
  One common mistake is this:
  
      print gettext "Hello $name!";
  
  Perl will interpolate the variable C<$name> I<before> the function
  will see the string.  Unless the corresponding message catalog 
  contains a message "Hello Tom!", "Hello Dick!" or "Hello Harry!",
  no translation will be found.
  
  Using printf() and friends has its own problems:
  
      print sprintf (gettext ("This is the %s %s."), $color, $thing);
  
  (The example is stupid because neither color nor thing will get
  translated here ...).
  
  In English the adjective (the color) will precede the noun, many
  other languages (for example French or Italian) differ here.  The 
  translator of the message may therefore have a hard time to find
  a translation that will still work and not sound stupid in the 
  target language.  Many C implementations of printf() allow to 
  change the order of the arguments, and a French translator could
  then say:
  
      "C'est le %2$s %1$s."
  
  Perl printf() implements this feature as of version 5.8 or better.
  Consequently you can only use it, if you are sure that your software
  will run with Perl 5.8 or a later version.
  
  Another disadvantage of using printf() is its cryptic syntax (maybe
  not for you but translators of your software may have their own
  opinion).
  
  See the description of the function C<__x()> in Locale::TextDomain(3)
  for a much better way to get around this problem.
  
  Non-ASCII message ids ...
  
  You should note that the function (and all other similar functions
  in this module) does a bytewise comparison of the B<MSGID> for the
  lookup in the translation catalog, no matter whether obscure utf-8
  flags are set on it, whether the string looks like utf-8, whether
  the utf8(3pm) pragma is used, or whatever other weird method past
  or future perl(1) versions invent for guessing character sets of
  strings.
  
  Using other than us-ascii characters in Perl source code is a call
  for trouble, a compatibility nightmare.  Furthermore, GNU gettext
  only lately introduced support for non-ascii character sets in sources,
  and support for this feature may not be available everywhere.  If
  you absolutely want to use B<MSGID>s in non-ascii character sets,
  it is wise to choose utf-8.  This will minimize the risk that perl(1)
  itself will mess with the strings, and it will also be a guaranty
  that you can later translate your project into arbitrary target
  languages.
  
  Other character sets can theoretically work.  Yet, using another
  character set in the Perl source code than the one used in your
  message catalogs will B<never> work, since the lookup is done bytewise,
  and all strings with non-ascii characters will not be found.
  
  Even if you have solved all these problems, there is still one show
  stopper left: The gettext runtime API lacks a possibility to specify 
  the character set of the source code (including the original strings).
  Consequently - in absence of a hint for the input encoding - strings 
  without a translation are not subject to output character set conversion.
  In other words: If the (non-determinable) output character set differs
  from the character set used in the source code, output can be a
  mixture of two character sets.  There is no point in trying to address
  this problem in the pure Perl version of the gettext functions.  because
  breaking compatibilty between the Perl and the C version is a price too
  high to pay.
  
  This all boils down to: Only use ASCII characters in your translatable
  strings!
  
  =item B<dgettext TEXTDOMAIN, MSGID>
  
  Like gettext(), but retrieves the message for the specified 
  B<TEXTDOMAIN> instead of the default domain.  In case you wonder what
  a textdomain is, you should really read on with Locale::TextDomain(3).
  
  =item B<dcgettext TEXTDOMAIN, MSGID, CATEGORY>
  
  Like dgettext() but retrieves the message from the specified B<CATEGORY>
  instead of the default category C<LC_MESSAGES>.
  
  =item B<ngettext MSGID, MSGID_PLURAL, COUNT>
  
  Retrieves the correct translation for B<COUNT> items.  In legacy software
  you will often find something like:
  
      print "$count file(s) deleted.\n";
  
  or
  
      printf "$count file%s deleted.\n", $count == 1 ? '' : 's';
  
  The first example looks awkward, the second will only work in English
  and languages with similar plural rules.  Before ngettext() was introduced,
  the best practice for internationalized programs was:
  
      if ($count == 1) {
          print gettext "One file deleted.\n";
      } else {
          printf gettext "%d files deleted.\n";
      }
  
  This is a nuisance for the programmer and often still not sufficient
  for an adequate translation.  Many languages have completely different
  ideas on numerals.  Some (French, Italian, ...) treat 0 and 1 alike,
  others make no distinction at all (Japanese, Korean, Chinese, ...),
  others have two or more plural forms (Russian, Latvian, Czech,
  Polish, ...).  The solution is:
  
      printf (ngettext ("One file deleted.\n",
                       "%d files deleted.\n",
                       $count), # argument to ngettext!
              $count);          # argument to printf!
  
  In English, or if no translation can be found, the first argument
  (B<MSGID>) is picked if C<$count> is one, the second one otherwise.
  For other languages, the correct plural form (of 1, 2, 3, 4, ...)
  is automatically picked, too.  You don't have to know anything about
  the plural rules in the target language, ngettext() will take care
  of that.
  
  This is most of the time sufficient but you will have to prove your
  creativity in cases like
  
      printf "%d file(s) deleted, and %d file(s) created.\n";
  
  =item B<dngettext TEXTDOMAIN, MSGID, MSGID_PLURAL, COUNT>
  
  Like ngettext() but retrieves the translation from the specified
  textdomain instead of the default domain.
  
  =item B<dcngettext TEXTDOMAIN, MSGID, MSGID_PLURAL, COUNT, CATEGORY>
  
  Like dngettext() but retrieves the translation from the specified
  category, instead of the default category C<LC_MESSAGES>.
  
  =item B<pgettext MSGCTXT, MSGID>
  
  Returns the translation of MSGID, given the context of MSGCTXT.
  
  Both items are used as a unique key into the message catalog.
  
  This allows the translator to have two entries for words that may
  translate to different foreign words based on their context. For
  example, the word "View" may be a noun or a verb, which may be
  used in a menu as File->View or View->Source.
  
      pgettext "Verb: To View", "View\n";
      pgettext "Noun: A View", "View\n";
  
  The above will both lookup different entries in the message catalog.
  
  A typical usage are GUI programs.  Imagine a program with a main
  menu and the notorious "Open" entry in the "File" menu.  Now imagine,
  there is another menu entry Preferences->Advanced->Policy where you have 
  a choice between the alternatives "Open" and "Closed".  In English, "Open"
  is the adequate text at both places.  In other languages, it is very
  likely that you need two different translations.  Therefore, you would
  now write:
  
      pgettext "File|", "Open";
      pgettext "Preferences|Advanced|Policy", "Open";
  
  In English, or if no translation can be found, the second argument
  (MSGID) is returned.
  
  The function was introduced with libintl-perl version 1.17.
  
  =item B<dpgettext TEXTDOMAIN, MSGCTXT, MSGID>
  
  Like pgettext(), but retrieves the message for the specified 
  B<TEXTDOMAIN> instead of the default domain.
  
  The function was introduced with libintl-perl version 1.17.
  
  =item B<dcpgettext TEXTDOMAIN, MSGCTXT, MSGID, CATEGORY>
  
  Like dpgettext() but retrieves the message from the specified B<CATEGORY>
  instead of the default category C<LC_MESSAGES>.
  
  The function was introduced with libintl-perl version 1.17.
  
  =item B<npgettext MSGCTXT, MSGID, MSGID_PLURAL, COUNT>
  
  Like ngettext() with the addition of context as in pgettext().
  
  In English, or if no translation can be found, the second argument
  (MSGID) is picked if $count is one, the third one otherwise.
  
  The function was introduced with libintl-perl version 1.17.
  
  =item B<dnpgettext TEXTDOMAIN, MSGCTXT, MSGID, MSGID_PLURAL, COUNT>
  
  Like npgettext() but retrieves the translation from the specified
  textdomain instead of the default domain.
  
  The function was introduced with libintl-perl version 1.17.
  
  =item B<dcnpgettext TEXTDOMAIN, MSGCTXT, MSGID, MSGID_PLURAL, COUNT, CATEGORY>
  
  Like dnpgettext() but retrieves the translation from the specified
  category, instead of the default category C<LC_MESSAGES>.
  
  The function was introduced with libintl-perl version 1.17.
  
  =item B<textdomain TEXTDOMAIN>
  
  Sets the default textdomain (initially 'messages').
  
  =item B<bindtextdomain TEXTDOMAIN, DIRECTORY>
  
  Binds B<TEXTDOMAIN> to B<DIRECTORY>.  Huh? An example:
  
      bindtextdomain "my-package", "./mylocale";
  
  Say, the selected locale (actually the selected locale for category
  C<LC_MESSAGES>) of the program is 'fr_CH', then the message catalog
  will be expected in F<./mylocale/fr_CH/LC_MESSAGES/my-package.mo>.
  
  =item B<bind_textdomain_codeset TEXTDOMAIN, ENCODING>
  
  Sets the output encoding for B<TEXTDOMAIN> to B<ENCODING>.  
  
  =item B<bind_textdomain_filter TEXTDOMAN, CODEREF, DATA>
  
  =item B<bind_textdomain_filter TEXTDOMAN, CODEREF>
  
  By default, Locale::Messages will turn the utf-8 flag of all returned
  messages off.  If you want to change this behavior, you can pass
  a reference to a subroutine that does different things - for example
  turn the utf-8 flag on, or leave it untouched.  The callback function 
  will be called with B<DATA> as the first, and the possibly 
  translated string as the second argument.  It should return the
  possibly modified string.
  
  If you want an object method to be called, pass the object itself
  in the data parameter and write a wrapper function.  Example:
  
      sub wrapper { 
          my ($string, $obj) = @_;
   
          $obj->filterMethod ($string);
      }
      my $obj = MyPackage->new;
  
      bind_textdomain_filter ('mydomain', \&wrapper, $obj);
  
  The function cannot fail and always returns a true value.
  
  B<Attention:> If you use the function for setting the utf-8 flag,
  it is B<your> responsability to ensure that the output is really
  utf-8.  You should only use it, if you have set the environment
  variable B<OUTPUT_CHARSET> to "utf-8".  Additionally you should
  call bind_textdomain_codeset() with "utf-8" as the second
  argument.
  
  Steven Haryanto has written a module Locale::TextDomain::UTF8(3pm)
  that addresses the same problem.
  
  This function has been introduced in libintl-perl 1.16 and it is
  B<not> part of the standard gettext API.
  
  =item B<turn_utf_8_on VARIABLE>
  
  Returns VARIABLE but with the UTF-8 flag (only known in Perl >=5.6)
  guaranteed to be turned on.  This function does not really fit into
  the module, but it is often handy nevertheless.
  
  The flag does B<not> mean that the string is in fact valid utf-8!
  
  The function was introduced with libintl-perl version 1.16.
  
  =item B<turn_utf_8_off VARIABLE>
  
  Returns VARIABLE but with the UTF-8 flag (only known in Perl >=5.6)
  guaranteed to be turned off.  This function does not really fit into
  the module, but it is often handy nevertheless.
  
  The function was introduced with libintl-perl version 1.07.
  
  =item B<select_package PACKAGE>
  
  By default, B<Locale::Messages> will try to load the XS version of
  the gettext implementation, i. e. Locale::gettext_xs(3) and will fall
  back to the pure Perl implementation Locale::gettext_pp(3).  You can
  override this behavior by passing the string "gettext_pp" or
  "gettext_xs" to the function select_package().  Passing "gettext_pp"
  here, will prefer the pure Perl implementation.
  
  You will normally want to use that in a BEGIN block of your main
  script.
  
  The function was introduced with libintl-perl version 1.03 and is not
  part of the standard gettext API.
  
  Beginning with version 1.22 you can pass other package names than "gettext_pp"
  or "gettext_xs" and use a completely different backend.  It is the caller's
  responsability to make sure that the selected package offers the same
  interface as the two standard packages.
  
  One package that offers that functionality is Locale::gettext_dumb(3pm).
  
  =item B<nl_putenv ENVSPEC>
  
  Resembles the ANSI C putenv(3) function.  The sole purpose of this 
  function is to work around some ideosyncrasies in the environment
  processing of Windows systems.  If you want to portably set or
  unset environment variables, use this function instead of directly
  manipulating C<%ENV>.
  
  The argument B<ENVSPEC> may have three different forms.
  
  =over 8
  
  =item B<LANGUAGE=fr_CH>
  
  This would set the environment variable C<LANGUAGE> to "fr_CH".
  
  =item B<LANGUAGE=>
  
  Normally, this will set the environment variable C<LANGUAGE> to an
  empty string.  Under Windows, however, the environment variable will
  be deleted instead (and is no longer present in C<%ENV>).  Since
  within libintl-perl empty environment variables are useless, consider
  this usage as deprecated.
  
  =item B<LANGUAGE>
  
  This will delete the environment variable B<LANGUAGE>.  If you are
  familiar with the brain-damaged implementation of putenv(3) (resp.
  _putenv()) in the so-called standard C library of MS-Windows, you
  may suspect that this is an invalid argument.  This is not the case!
  Passing a variable name not followed by an equal sign will always
  delete the variable, no matter which operating system you use.
  
  =back
  
  The function returns true for success, and false for failure.  Possible
  reasons for failure are an invalid syntax or - only under Windows -
  failure to allocate space for the new environment entry ($! will be
  set accordingly in this case).
  
  Why all this hassle?  The 32-bit versions of MS-DOS (currently
  Windows 95/98/ME/NT/2000/XP/CE/.NET) maintain two distinct blocks
  of environment variables per process.  Which block is considered
  the "correct" environment is a compile-time option of the Perl
  interpreter.  Unfortunately, if you have build the XS version 
  Locale::gettext_xs(3) under Windows, the underlying library may use 
  a different environment block, and changes you make to C<%ENV> may
  not be visible to the library.
  
  The function nl_putenv() is mostly a funny way of saying
  
      LANGUAGE=some_value
      
  but it does its best, to pass this information to the gettext 
  library.  Under other operating systems than Windows, it only
  operates on C<%ENV>, under Windows it will call the C library
  function _putenv() (after doing some cleanup to its arguments),
  before manipulating C<%ENV>.
  
  Please note, that your C<%ENV> is updated by nl_putenv() automatically.
  
  The function has been introduced in libintl-perl version 1.10.
  
  =item setlocale
  
  Modifies and queries program's locale, see the documentation for setlocale()
  in POSIX(3pm) instead.
  
  On some systems, when using GNU gettext, a call from C to setlocale() is
  - with the help of the C preprocessor - really a call to libintl_setlocale(),
  which is in turn a wrapper around the system setlocale(3).  Failure to call
  libintl_setlocale() may lead to certain malfunctions.  On such systems,
  B<Locale::Messages::setlocale()> will call the wrapper libintl_setlocale().
  If you want to avoid problems, you should therefore always call
  the setlocale() implementation in Locale::Messages(3pm).
  
  See L<https://rt.cpan.org/Public/Bug/Display.html?id=83980> or
  L<https://savannah.gnu.org/bugs/?38162>, and 
  L<https://savannah.gnu.org/bugs/?func=detailitem&item_id=44645> for a discussion
  of the problem.
  
  The function has been introduced in libintl-perl version 1.24.
  
  =back
  
  =head1 CONSTANTS
  
  You can (maybe) get the same constants from POSIX(3); see there for
  a detailed description
  
  =over 4
  
  =item B<LC_CTYPE>
  
  =item B<LC_NUMERIC>
  
  =item B<LC_TIME>
  
  =item B<LC_COLLATE>
  
  =item B<LC_MONETARY>
  
  =item B<LC_MESSAGES>
  
  This locale category was the reason that these constants from POSIX(3)
  were included here.  Even if it was present in your systems C include
  file F<locale.h>, it was not provided by POSIX(3).  Perl 5.8 and later
  seems to export the constant if available, although it is not documented
  in POSIX(3).
  
  Locale::Messages(3) makes an attempt to guess the value of this category for
  all systems, and assumes the arbitrary value 1729 otherwise.
  
  =item B<LC_ALL>
  
  If you specify the category B<LC_ALL> as the first argument to
  POSIX::setlocale(), I<all> locale categories will be affected at once.
  
  =back
  
  =head1 EXPORT TAGS
  
  The module does not export anything unless explicitely requested.
  You can import groups of functions via two tags:
  
  =over 4
  
  =item B<use Locale::Messages (':locale_h')>
  
  Imports the functions that are normally defined in the C include
  file F<locale.h>:
  
  =over 8
  
  =item B<gettext()>
  
  =item B<dgettext()>
  
  =item B<dcgettext()>
  
  =item B<ngettext()>
  
  =item B<dngettext()>
  
  =item B<dcngettext()>
  
  =item B<pgettext()>
  
  =item B<dpgettext()>
  
  =item B<dcpgettext()>
  
  =item B<npgettext()>
  
  =item B<dnpgettext()>
  
  =item B<dcnpgettext()>
  
  =item B<textdomain()>
  
  =item B<bindtextdomain()>
  
  =item B<bind_textdomain_codeset()>
  
  =back
  
  =item B<use Locale::Messages (':libintl_h')>
  
  Imports the locale category constants:
  
  =over 8
  
  =item B<LC_CTYPE>
  
  =item B<LC_NUMERIC>
  
  =item B<LC_TIME>
  
  =item B<LC_COLLATE>
  
  =item B<LC_MONETARY>
  
  =item B<LC_MESSAGES>
  
  =item B<LC_ALL>
  
  =back
  
  =back
  
  =head1 OTHER EXPORTS
  
  =item B<select_package PACKAGE>
  
  =head1 USAGE
  
  A complete example:
  
      1: use Locale::Messages qw (:locale_h :libintl_h);
      2: use POSIX qw (setlocale);
      3: setlocale (LC_MESSAGES, '');
      4: textdomain ('my-package');
      5: bindtextdomain ('my-package' => '/usr/local/share/locale');
      6:
      7: print gettext ("Hello world!\n");
  
  Step by step: Line 1 imports the necessary functions and constants.
  In line 3 we set the locale for category LC_MESSAGES to the default
  user settings.  For C programs you will often read that LC_ALL
  is the best category here but this will also change the locale for
  LC_NUMERIC and many programs will not work reliably after changing
  that category in Perl; choose your own poison!
  
  In line 4 we say that all messages (translations) without an explicit
  domain specification should be retrieved from the message catalog
  for the domain 'my-package'.  Line 5 has the effect that the message
  catalog will be searched under the directory F</usr/local/share/locale>.
  
  If the user has selected the locale 'fr_CH', and if the file 
  F</usr/local/share/locale/fr_CH/LC_MESSAGES/my-package.mo>
  exists, and if it contains a GNU message object file with a translation
  for the string "Hello world!\n", then line 7 will print the French
  translation (for Switzerland CH) to STDOUT.
  
  The documentation for GNU gettext explains how to extract translatable
  strings from your Perl files and how to create message catalogs.
  
  Another less portable example: If your system uses the GNU libc you
  should be able to find various files with the name F<libc.mo>, the
  message catalog for the library itself.  If you have found these
  files under F</usr/share/locale>, then you can try the following:
  
      use Locale::Messages qw (:locale_h :libintl_h);
      use POSIX qw (setlocale);
  
      setlocale LC_MESSAGES, "";
      textdomain "libc";
  
      # The following is actually not needed, since this is
      # one of the default search directories.
      bindtextdomain libc => '/usr/share/locale';
      bind_textdomain_codeset libc => 'iso-8859-1';
  
      print gettext ("No such file or directory");
  
  See Locale::TextDomain(3) for much simpler ways.
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::TextDomain(3pm), Locale::gettext_pp(3pm), Encode(3pm),
  Locale::TextDomain::UTF8(3pm), perllocale(3pm), POSIX(3pm), perl(1), 
  gettext(1), gettext(3)
  
  =cut
  
  __END__
  
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
LOCALE_MESSAGES

    $main::fatpacked{"Locale/Recode.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODE';
  #! /bin/false
  
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Portable character conversion for Perl.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::Recode;
  
  use strict;
  
  require Locale::Recode::_Conversions;
  
  my $loaded = {};
  my $has_encode;
  
  sub new
  {
      my $class = ref($_[0]) || $_[0];
      shift;
      my %args = @_;
  
      my $self = bless {}, $class;
  
      my ($from_codeset, $to_codeset) = @args{qw (from to)};
      
      unless ($from_codeset && $to_codeset) {
  		require Carp;
          Carp::croak (<<EOF);
  	Usage: $class->new (from => FROM_CODESET, to => TO_CODESET);
  EOF
      }
  
      # Find a conversion path.
  	my $path = Locale::Recode::_Conversions->findPath ($from_codeset, 
  													   $to_codeset);
  	unless ($path) {
  		$self->{__error} = 'EINVAL';
  		return $self;
  	}
  
  	my @conversions = ();
  	foreach (@$path) {
  		my ($module, $from, $to) = @$_;
  		
  		unless ($loaded->{$module}) {
  			eval "require Locale::RecodeData::$module";
  			if ($@) {
  				$self->{__error} = $@;
  				return $self;
  			}
  			
  			$loaded->{$module} = 1;
  		}
  		
  		my $module_name = "Locale::RecodeData::$module";
  		my $method = 'new';
  		my $object = $module_name->$method (from => $from,
  											to => $to);
  		
  		push @conversions, $object;
  	}
  
  	$self->{__conversions} = \@conversions;
  		
      return $self;
  }
  
  sub resolveAlias
  {
  	my ($class, $alias) = @_;
  
  	return Locale::Recode::_Conversions->resolveAlias ($alias);
  }
  
  sub getSupported
  {
  	return [ Locale::Recode::_Conversions->listSupported ];
  }
  
  sub getCharsets
  {
  	my $self = shift;
  	my %all = map { $_ => 1 } @{&getSupported};
  
  	require Locale::Recode::_Aliases;
  
  	my $conversions = Locale::Recode::_Conversions->listSupported;
  	foreach my $charset (keys %{Locale::Recode::_Aliases::ALIASES()}) {
  		my $mime_name = $self->resolveAlias ($charset);
  		next unless exists $all{$mime_name};
  		$all{$charset} = 1;
  	}
  	
  	return [ keys %all ];
  }
  
  sub recode
  {
      my $self = $_[0];
  
      return if $self->{__error};
  
      return 1 unless defined $_[1];
  
      my $chain = $self->{__conversions};
      
      foreach my $module (@$chain) {
  		my $success = $module->_recode ($_[1]);
  		
  		unless ($success) {
  			$self->{__error} = $module->_getError;
  			return;
  		}
      }
  
      return 1;
  }
  
  sub getError
  {
      my $self = shift;
      my $error = $self->{__error} or return;
  
      if ('EINVAL' eq $error) {
  		return 'Invalid conversion';
      } else {
  		return $error;
      }
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::Recode - Object-Oriented Portable Charset Conversion
  
  =head1 SYNOPSIS
  
    use Locale::Recode;
  
    $cd = Locale::Recode->new (from => 'UTF-8',
                               to   => 'ISO-8859-1');
  
    die $cd->getError if $cd->getError;
  
    $cd->recode ($text) or die $cd->getError;
  
    $mime_name = Locale::Recode->resolveAlias ('latin-1');
  
    $supported = Locale::Recode->getSupported;
  
    $complete = Locale::Recode->getCharsets;
  
  =head1 DESCRIPTION
  
  This module provides routines that convert textual data from one
  codeset to another in a portable way.  The module has been started
  before Encode(3) was written.  It's main purpose today is to provide
  charset conversion even when Encode(3) is not available on the system.
  It should also work for older Perl versions without Unicode support.
  
  Internally Locale::Recode(3) will use Encode(3) whenever possible,
  to allow for a faster conversion and for a wider range of supported
  charsets, and will only fall back to the Perl implementation when
  Encode(3) is not available or does not support a particular charset
  that Locale::Recode(3) does.
  
  Locale::Recode(3) is part of libintl-perl, and it's main purpose is
  actually to implement a portable charset conversion framework for
  the message translation facilities described in Locale::TextDomain(3).
  
  =head1 CONSTRUCTOR
  
  The constructor C<new()> requires two named arguments:
  
  =over 4
  
  =item B<from>
  
  The encoding of the original data.  Case doesn't matter, aliases
  are resolved.
  
  =item B<to>
  
  The target encoding.  Again, case doesn't matter, and aliases
  are resolved.
  
  =back
  
  The constructor will never fail.  In case of an error, the object's
  internal state is set to bad and it will refuse to do any conversions.
  You can inquire the reason for the failure with the method
  getError().
  
  =head1 OBJECT METHODS
  
  The following object methods are available.
  
  =over 4
  
  =item B<recode (STRING)>
  
  Converts B<STRING> from the source encoding into the destination
  encoding.  In case of success, a truth value is returned, false
  otherwise.  You can inquire the reason for the failure with the
  method getError().
  
  =item B<getError>
  
  Returns either false if the object is not in an error state or
  an error message.
  
  =back
  
  =head1 CLASS METHODS
  
  The object provides some additional class methods:
  
  =over 4
  
  =item B<getSupported>
  
  Returns a reference to a list of all supported charsets.  This
  may implicitely load additional Encode(3) conversions like 
  Encode::HanExtra(3) which may produce considerable load on your
  system.
  
  The method is therefore not intended for regular use but rather
  for getting resp. displaying I<once> a list of available encodings.
  
  The members of the list are all converted to uppercase!
  
  =item B<getCharsets>
  
  Like getSupported() but also returns all available aliases.
  
  =back
  
  =head1 SUPPORTED CHARSETS
  
  The range of supported charsets is system-dependent.  The following
  somewhat special charsets are always available:
  
  =over 4
  
  =item B<UTF-8>
  
  UTF-8 is available independently of your Perl version.  For Perl 5.6
  or better or in the presence of Encode(3), conversions are not done
  in Perl but with the interfaces provided by these facilities which
  are written in C, hence much faster.
  
  Encoding data I<into> UTF-8 is fast, even if it is done in Perl.
  Decoding it in Perl may become quite slow.  If you frequently have
  to decode UTF-8 with B<Locale::Recode> you will probably want to
  make sure that you do that with Perl 5.6 or beter, or install Encode(3) to
  speed up things.
  
  =item B<INTERNAL>
  
  UTF-8 is fast to write but hard to read for applications.  It is 
  therefore not the worst for internal string representation but not
  far from that.  Locale::Recode(3) stores strings internally as a
  reference to an array of integer values like most programming languages
  (Perl is an exception) do, trading memory for performance.
  
  The integer values are the UCS-4 codes of the characters in host
  byte order.
  
  The encoding B<INTERNAL> is directly availabe via Locale::Recode(3)
  but of course you should not really use it for data exchange, unless
  you know what you are doing.
  
  =back
  
  Locale::Recode(3) has native support for a plethora of other encodings,
  most of them 8 bit encodings that are fast to decode, including most
  encodings used on popular micros like the ISO-8859-* series of encodings,
  most Windows-* encodings (also known as CP*), Macintosh, Atari, etc.
  
  =head1 NAMES AND ALIASES
  
  Each charset resp. encoding is available internally under a unique
  name.  Whenever the information was available, the preferred MIME name
  (see L<http://www.iana.org/assignments/character-sets/>) was chosen as 
  the internal name.
  
  Alias handling is quite strict.  The module does not make wild guesses
  at what you mean ("What's the meaning of the acronym JIS" is a valid
  alias for "7bit-jis" in Encode(3) ....) but aims at providing common
  aliases only.  The same applies to so-called aliases that are really 
  mistakes, like "utf8" for UTF-8.
  
  The module knows all aliases that are listed with the IANA character
  set registry (L<http://www.iana.org/assignments/character-sets/>), plus
  those known to libiconv version 1.8, and a bunch of additional ones.
  
  =head1 CONVERSION TABLES
  
  The conversion tables have either been taken from official sources
  like the IANA or the Unicode Consortium, from Bruno Haible's libiconv,
  or from the sources of the GNU libc and the regression tests for 
  libintl-perl will check for conformance here.  For some encodings this data
  differs from Encode(3)'s data which would cause these tests to fail.  
  In these cases, the module will not invoke the Encode(3) methods, but
  will fall back to the internal implementation for the sake of 
  consistency.
  
  The few encodings that are affected are so simple that you will not
  experience any real performance penalty unless you convert large chunks
  of data.  But the package is not really intended for such use anyway, and
  since Encode(3) is relatively new, I rather think that the differences
  are bugs in Encode which will be fixed soon.
  
  =head1 BUGS
  
  The module should provide fall back conversions for other Unicode
  encoding schemes like UCS-2, UCS-4 (big- and little-endian).
  
  The pure Perl UTF-8 decoder will not always handle corrupt UTF-8
  correctly, especially at the end and at the beginning of the string.
  This is not likely to be fixed, since the module's intention is not
  to be a consistency checker for UTF-8 data.
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Encode(3), iconv(3), iconv(1), recode(1), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODE

    $main::fatpacked{"Locale/Recode/_Aliases.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODE__ALIASES';
  #! /bin/false
  
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Internally known aliases for charsets.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::Recode::_Aliases;
  
  use constant ALIASES => {
  	'1047' => 'IBM1047',
      '437' => 'IBM437',
      '850' => 'IBM850',
      '851' => 'IBM851',
      '852' => 'IBM852',
      '855' => 'IBM855',
      '857' => 'IBM857',
      '860' => 'IBM860',
      '861' => 'IBM861',
      '862' => 'IBM862',
      '863' => 'IBM863',
      '865' => 'IBM865',
      '866' => 'IBM866',
      '869' => 'IBM869',
      '904' => 'IBM904',
      'ANSI_X3.4-1968' => 'US-ASCII',
      'ANSI_X3.4-1986' => 'US-ASCII',
      'ARABIC' => 'ISO-8859-6',
      'ARABIC7' => 'ASMO_449',
      'ASCII' => 'US-ASCII',
      'ASMO-708' => 'ISO-8859-6',
  	'ATARIST' => 'ATARI-ST',
  	'ATARIST-EURO' => 'ATARI-ST-EURO',
  	'BIG-5' => 'BIG5',
  	'BIG-FIVE' => 'BIG5',
  	'BIG5-ETEN' => 'BIG5',
  	'BIG5HKSCS' => 'BIG5-HKSCS',
  	'BIGFIVE' => 'BIG5',
      'CA' => 'CSA_Z243.4-1985-1',
      'CCSID00924' => 'IBM00924',
      'CCSID01140' => 'IBM01140',
      'CCSID01141' => 'IBM01141',
      'CCSID01142' => 'IBM01142',
      'CCSID01143' => 'IBM01143',
      'CCSID01144' => 'IBM01144',
      'CCSID01145' => 'IBM01145',
      'CCSID01146' => 'IBM01146',
      'CCSID01147' => 'IBM01147',
      'CCSID01148' => 'IBM01148',
      'CCSID01149' => 'IBM01149',
      'CHINESE' => 'GB_2312-80',
      'CN' => 'GB_1988-80',
  	'CN-BIG5' => 'BIG5',
      'CP-AR' => 'IBM868',
      'CP-GR' => 'IBM869',
  	'CP-HU' => 'CWI',
      'CP-IS' => 'IBM861',
      'CP00924' => 'IBM00924',
      'CP01140' => 'IBM01140',
      'CP01141' => 'IBM01141',
      'CP01142' => 'IBM01142',
      'CP01143' => 'IBM01143',
      'CP01144' => 'IBM01144',
      'CP01145' => 'IBM01145',
      'CP01146' => 'IBM01146',
      'CP01147' => 'IBM01147',
      'CP01148' => 'IBM01148',
      'CP01149' => 'IBM01149',
      'CP037' => 'IBM037',
      'CP038' => 'IBM038',
  	'CP1004' => 'IBM1004',
      'CP1026' => 'IBM1026',
  	'CP1047' => 'IBM1047',
  	'CP1250' => 'WINDOWS-1250',
  	'CP1251' => 'WINDOWS-1251',
  	'CP1252' => 'WINDOWS-1252',
  	'CP1253' => 'WINDOWS-1253',
  	'CP1254' => 'WINDOWS-1254',
  	'CP1255' => 'WINDOWS-1255',
  	'CP1256' => 'WINDOWS-1256',
  	'CP1257' => 'WINDOWS-1257',
  	'CP1258' => 'WINDOWS-1258',
      'CP154' => 'PTCP154',
      'CP273' => 'IBM273',
      'CP274' => 'IBM274',
      'CP275' => 'IBM275',
      'CP278' => 'IBM278',
      'CP280' => 'IBM280',
      'CP281' => 'IBM281',
      'CP284' => 'IBM284',
      'CP285' => 'IBM285',
      'CP290' => 'IBM290',
      'CP297' => 'IBM297',
      'CP367' => 'US-ASCII',
      'CP420' => 'IBM420',
      'CP423' => 'IBM423',
      'CP424' => 'IBM424',
      'CP437' => 'IBM437',
      'CP500' => 'IBM500',
      'CP775' => 'IBM775',
      'CP819' => 'ISO-8859-1',
      'CP850' => 'IBM850',
      'CP851' => 'IBM851',
      'CP852' => 'IBM852',
      'CP855' => 'IBM855',
      'CP857' => 'IBM857',
      'CP860' => 'IBM860',
      'CP861' => 'IBM861',
      'CP862' => 'IBM862',
      'CP863' => 'IBM863',
      'CP864' => 'IBM864',
      'CP865' => 'IBM865',
      'CP866' => 'IBM866',
      'CP868' => 'IBM868',
      'CP869' => 'IBM869',
      'CP870' => 'IBM870',
      'CP871' => 'IBM871',
  	'CP874' => 'IBM874',
  	'CP875' => 'IBM875',
      'CP880' => 'IBM880',
      'CP891' => 'IBM891',
      'CP903' => 'IBM903',
      'CP904' => 'IBM904',
      'CP905' => 'IBM905',
      'CP918' => 'IBM918',
      'CP936' => 'GBK',
      'CSA7-1' => 'CSA_Z243.4-1985-1',
      'CSA7-2' => 'CSA_Z243.4-1985-2',
      'CSADOBESTANDARDENCODING' => 'ADOBE-STANDARD-ENCODING',
      'CSASCII' => 'US-ASCII',
      'CSA_T500-1983' => 'ANSI_X3.110-1983',
      'CSBIG5' => 'BIG5',
      'CSBOCU-1' => 'BOCU-1',
      'CSCESU-8' => 'CESU-8',
      'CSDECMCS' => 'DEC-MCS',
      'CSDKUS' => 'DK-US',
      'CSEBCDICATDEA' => 'EBCDIC-AT-DE-A',
      'CSEBCDICCAFR' => 'EBCDIC-CA-FR',
      'CSEBCDICDKNO' => 'EBCDIC-DK-NO',
      'CSEBCDICDKNOA' => 'EBCDIC-DK-NO-A',
      'CSEBCDICES' => 'EBCDIC-ES',
      'CSEBCDICESA' => 'EBCDIC-ES-A',
      'CSEBCDICESS' => 'EBCDIC-ES-S',
      'CSEBCDICFISE' => 'EBCDIC-FI-SE',
      'CSEBCDICFISEA' => 'EBCDIC-FI-SE-A',
      'CSEBCDICFR' => 'EBCDIC-FR',
      'CSEBCDICIT' => 'EBCDIC-IT',
      'CSEBCDICPT' => 'EBCDIC-PT',
      'CSEBCDICUK' => 'EBCDIC-UK',
      'CSEBCDICUS' => 'EBCDIC-US',
      'CSEUCFIXWIDJAPANESE' => 'EXTENDED_UNIX_CODE_FIXED_WIDTH_FOR_JAPANESE',
      'CSEUCKR' => 'EUC-KR',
      'CSEUCPKDFMTJAPANESE' => 'EUC-JP',
      'CSEUCTW' => 'EUC-TW',
      'CSGB2312' => 'GB2312',
      'CSHALFWIDTHKATAKANA' => 'JIS_X0201',
      'CSHPDESKTOP' => 'HP-DESKTOP',
      'CSHPLEGAL' => 'HP-LEGAL',
      'CSHPMATH8' => 'HP-MATH8',
      'CSHPPIFONT' => 'HP-PI-FONT',
      'CSHPPSMATH' => 'ADOBE-SYMBOL-ENCODING',
      'CSHPROMAN8' => 'HP-ROMAN8',
      'CSIBBM904' => 'IBM904',
      'CSIBM037' => 'IBM037',
      'CSIBM038' => 'IBM038',
      'CSIBM1026' => 'IBM1026',
      'CSIBM273' => 'IBM273',
      'CSIBM274' => 'IBM274',
      'CSIBM275' => 'IBM275',
      'CSIBM277' => 'IBM277',
      'CSIBM278' => 'IBM278',
      'CSIBM280' => 'IBM280',
      'CSIBM281' => 'IBM281',
      'CSIBM284' => 'IBM284',
      'CSIBM285' => 'IBM285',
      'CSIBM290' => 'IBM290',
      'CSIBM297' => 'IBM297',
      'CSIBM420' => 'IBM420',
      'CSIBM423' => 'IBM423',
      'CSIBM424' => 'IBM424',
      'CSIBM500' => 'IBM500',
      'CSIBM851' => 'IBM851',
      'CSIBM855' => 'IBM855',
      'CSIBM857' => 'IBM857',
      'CSIBM860' => 'IBM860',
      'CSIBM861' => 'IBM861',
      'CSIBM863' => 'IBM863',
      'CSIBM864' => 'IBM864',
      'CSIBM865' => 'IBM865',
      'CSIBM866' => 'IBM866',
      'CSIBM868' => 'IBM868',
      'CSIBM869' => 'IBM869',
      'CSIBM870' => 'IBM870',
      'CSIBM871' => 'IBM871',
      'CSIBM880' => 'IBM880',
      'CSIBM891' => 'IBM891',
      'CSIBM903' => 'IBM903',
      'CSIBM905' => 'IBM905',
      'CSIBM918' => 'IBM918',
      'CSIBMEBCDICATDE' => 'EBCDIC-AT-DE',
      'CSIBMSYMBOLS' => 'IBM-SYMBOLS',
      'CSIBMTHAI' => 'IBM-THAI',
      'CSINVARIANT' => 'INVARIANT',
      'CSISO102T617BIT' => 'T.61-7BIT',
      'CSISO10367BOX' => 'ISO_10367-BOX',
      'CSISO10646UTF1' => 'ISO-10646-UTF-1',
      'CSISO10SWEDISH' => 'SEN_850200_B',
      'CSISO111ECMACYRILLIC' => 'ECMA-CYRILLIC',
      'CSISO11SWEDISHFORNAMES' => 'SEN_850200_C',
      'CSISO121CANADIAN1' => 'CSA_Z243.4-1985-1',
      'CSISO122CANADIAN2' => 'CSA_Z243.4-1985-2',
      'CSISO123CSAZ24341985GR' => 'CSA_Z243.4-1985-GR',
      'CSISO128T101G2' => 'T.101-G2',
      'CSISO139CSN369103' => 'CSN_369103',
      'CSISO13JISC6220JP' => 'JIS_C6220-1969-JP',
      'CSISO141JUSIB1002' => 'JUS_I.B1.002',
      'CSISO143IECP271' => 'IEC_P27-1',
      'CSISO146SERBIAN' => 'JUS_I.B1.003-SERB',
      'CSISO147MACEDONIAN' => 'JUS_I.B1.003-MAC',
      'CSISO14JISC6220RO' => 'JIS_C6220-1969-RO',
      'CSISO150' => 'GREEK-CCITT',
      'CSISO150GREEKCCITT' => 'GREEK-CCITT',
      'CSISO151CUBA' => 'NC_NC00-10:81',
      'CSISO153GOST1976874' => 'GOST_19768-74',
      'CSISO158LAP' => 'LATIN-LAP',
      'CSISO159JISX02121990' => 'JIS_X0212-1990',
      'CSISO15ITALIAN' => 'IT',
      'CSISO16PORTUGUESE' => 'PT',
      'CSISO17SPANISH' => 'ES',
      'CSISO18GREEK7OLD' => 'GREEK7-OLD',
      'CSISO19LATINGREEK' => 'LATIN-GREEK',
      'CSISO2022JP' => 'ISO-2022-JP',
      'CSISO2022JP2' => 'ISO-2022-JP-2',
      'CSISO2022KR' => 'ISO-2022-KR',
      'CSISO2033' => 'ISO_2033-1983',
      'CSISO21GERMAN' => 'DIN_66003',
      'CSISO25FRENCH' => 'NF_Z_62-010_(1973)',
      'CSISO27LATINGREEK1' => 'LATIN-GREEK-1',
      'CSISO2INTLREFVERSION' => 'ISO_646.IRV:1983',
      'CSISO42JISC62261978' => 'JIS_C6226-1978',
      'CSISO47BSVIEWDATA' => 'BS_VIEWDATA',
      'CSISO49INIS' => 'INIS',
      'CSISO4UNITEDKINGDOM' => 'BS_4730',
      'CSISO50INIS8' => 'INIS-8',
      'CSISO51INISCYRILLIC' => 'INIS-CYRILLIC',
      'CSISO5427CYRILLIC' => 'ISO_5427',
      'CSISO5428GREEK' => 'ISO_5428:1980',
      'CSISO57GB1988' => 'GB_1988-80',
      'CSISO58GB231280' => 'GB_2312-80',
      'CSISO60DANISHNORWEGIAN' => 'NS_4551-1',
      'CSISO60NORWEGIAN1' => 'NS_4551-1',
      'CSISO61NORWEGIAN2' => 'NS_4551-2',
      'CSISO646BASIC1983' => 'ISO_646.BASIC:1983',
      'CSISO646DANISH' => 'DS_2089',
      'CSISO6937ADD' => 'ISO_6937-2-25',
      'CSISO69FRENCH' => 'NF_Z_62-010',
      'CSISO70VIDEOTEXSUPP1' => 'VIDEOTEX-SUPPL',
      'CSISO84PORTUGUESE2' => 'PT2',
      'CSISO85SPANISH2' => 'ES2',
      'CSISO86HUNGARIAN' => 'MSZ_7795.3',
      'CSISO87JISX0208' => 'JIS_C6226-1983',
      'CSISO88596E' => 'ISO-8859-6-E',
      'CSISO88596I' => 'ISO-8859-6-I',
      'CSISO88598E' => 'ISO-8859-8-E',
      'CSISO88598I' => 'ISO-8859-8-I',
      'CSISO8859SUPP' => 'ISO_8859-SUPP',
      'CSISO88GREEK7' => 'GREEK7',
      'CSISO89ASMO449' => 'ASMO_449',
      'CSISO90' => 'ISO-IR-90',
      'CSISO91JISC62291984A' => 'JIS_C6229-1984-A',
      'CSISO92JISC62991984B' => 'JIS_C6229-1984-B',
      'CSISO93JIS62291984BADD' => 'JIS_C6229-1984-B-ADD',
      'CSISO94JIS62291984HAND' => 'JIS_C6229-1984-HAND',
      'CSISO95JIS62291984HANDADD' => 'JIS_C6229-1984-HAND-ADD',
      'CSISO96JISC62291984KANA' => 'JIS_C6229-1984-KANA',
      'CSISO99NAPLPS' => 'ANSI_X3.110-1983',
      'CSISOLATIN1' => 'ISO-8859-1',
      'CSISOLATIN2' => 'ISO-8859-2',
      'CSISOLATIN3' => 'ISO-8859-3',
      'CSISOLATIN4' => 'ISO-8859-4',
      'CSISOLATIN5' => 'ISO-8859-9',
      'CSISOLATIN6' => 'ISO-8859-10',
      'CSISOLATINARABIC' => 'ISO-8859-6',
      'CSISOLATINCYRILLIC' => 'ISO-8859-5',
      'CSISOLATINGREEK' => 'ISO-8859-7',
      'CSISOLATINHEBREW' => 'ISO-8859-8',
      'CSISOTEXTCOMM' => 'ISO_6937-2-ADD',
      'CSJISENCODING' => 'JIS_ENCODING',
      'CSKOI8R' => 'KOI8-R',
      'CSKSC56011987' => 'KS_C_5601-1987',
      'CSKSC5636' => 'KSC5636',
      'CSMACINTOSH' => 'MACINTOSH',
      'CSMICROSOFTPUBLISHING' => 'MICROSOFT-PUBLISHING',
      'CSMNEM' => 'MNEM',
      'CSMNEMONIC' => 'MNEMONIC',
      'CSNATSDANO' => 'NATS-DANO',
      'CSNATSDANOADD' => 'NATS-DANO-ADD',
      'CSNATSSEFI' => 'NATS-SEFI',
      'CSNATSSEFIADD' => 'NATS-SEFI-ADD',
      'CSPC775BALTIC' => 'IBM775',
      'CSPC850MULTILINGUAL' => 'IBM850',
      'CSPC862LATINHEBREW' => 'IBM862',
      'CSPC8CODEPAGE437' => 'IBM437',
      'CSPC8DANISHNORWEGIAN' => 'PC8-DANISH-NORWEGIAN',
      'CSPC8TURKISH' => 'PC8-TURKISH',
      'CSPCP852' => 'IBM852',
      'CSPTCP154' => 'PTCP154',
      'CSSHIFTJIS' => 'SHIFT_JIS',
      'CSUCS4' => 'ISO-10646-UCS-4',
      'CSUNICODE' => 'ISO-10646-UCS-2',
      'CSUNICODE11' => 'UNICODE-1-1',
      'CSUNICODE11UTF7' => 'UNICODE-1-1-UTF-7',
      'CSUNICODEASCII' => 'ISO-10646-UCS-BASIC',
      'CSUNICODEIBM1264' => 'ISO-UNICODE-IBM-1264',
      'CSUNICODEIBM1265' => 'ISO-UNICODE-IBM-1265',
      'CSUNICODEIBM1268' => 'ISO-UNICODE-IBM-1268',
      'CSUNICODEIBM1276' => 'ISO-UNICODE-IBM-1276',
      'CSUNICODELATIN1' => 'ISO-10646-UNICODE-LATIN1',
      'CSUNKNOWN8BIT' => 'UNKNOWN-8BIT',
      'CSUSDK' => 'US-DK',
      'CSVENTURAINTERNATIONAL' => 'VENTURA-INTERNATIONAL',
      'CSVENTURAMATH' => 'VENTURA-MATH',
      'CSVENTURAUS' => 'VENTURA-US',
      'CSVIQR' => 'VIQR',
      'CSVISCII' => 'VISCII',
      'CSWINDOWS30LATIN1' => 'ISO-8859-1-WINDOWS-3.0-LATIN-1',
      'CSWINDOWS31J' => 'WINDOWS-31J',
      'CSWINDOWS31LATIN1' => 'ISO-8859-1-WINDOWS-3.1-LATIN-1',
      'CSWINDOWS31LATIN2' => 'ISO-8859-2-WINDOWS-LATIN-2',
      'CSWINDOWS31LATIN5' => 'ISO-8859-9-WINDOWS-LATIN-5',
      'CUBA' => 'NC_NC00-10:81',
  	'CWI-2' => 'CWI',
      'CYRILLIC' => 'ISO-8859-5',
      'CYRILLIC-ASIAN' => 'PTCP154',
      'DE' => 'DIN_66003',
      'DEC' => 'DEC-MCS',
      'DK' => 'DS_2089',
      'DS2089' => 'DS_2089',
      'E13B' => 'ISO_2033-1983',
      'EBCDIC-BE' => 'IBM274',
      'EBCDIC-BR' => 'IBM275',
      'EBCDIC-CP-AR1' => 'IBM420',
      'EBCDIC-CP-AR2' => 'IBM918',
      'EBCDIC-CP-BE' => 'IBM500',
      'EBCDIC-CP-CA' => 'IBM037',
      'EBCDIC-CP-CH' => 'IBM500',
      'EBCDIC-CP-DK' => 'IBM277',
      'EBCDIC-CP-ES' => 'IBM284',
      'EBCDIC-CP-FI' => 'IBM278',
      'EBCDIC-CP-FR' => 'IBM297',
      'EBCDIC-CP-GB' => 'IBM285',
      'EBCDIC-CP-GR' => 'IBM423',
      'EBCDIC-CP-HE' => 'IBM424',
      'EBCDIC-CP-IS' => 'IBM871',
      'EBCDIC-CP-IT' => 'IBM280',
      'EBCDIC-CP-NL' => 'IBM037',
      'EBCDIC-CP-NO' => 'IBM277',
      'EBCDIC-CP-ROECE' => 'IBM870',
      'EBCDIC-CP-SE' => 'IBM278',
      'EBCDIC-CP-TR' => 'IBM905',
      'EBCDIC-CP-US' => 'IBM037',
      'EBCDIC-CP-WT' => 'IBM037',
      'EBCDIC-CP-YU' => 'IBM870',
      'EBCDIC-CYRILLIC' => 'IBM880',
      'EBCDIC-DE-273+EURO' => 'IBM01141',
      'EBCDIC-DK-277+EURO' => 'IBM01142',
      'EBCDIC-ES-284+EURO' => 'IBM01145',
      'EBCDIC-FI-278+EURO' => 'IBM01143',
      'EBCDIC-FR-297+EURO' => 'IBM01147',
      'EBCDIC-GB-285+EURO' => 'IBM01146',
  	'EBCDIC-GREEK' => 'IBM875',
      'EBCDIC-INT' => 'IBM038',
  	'EBCDIC-INT1' => 'IBM256',
      'EBCDIC-INTERNATIONAL-500+EURO' => 'IBM01148',
      'EBCDIC-IS-871+EURO' => 'IBM01149',
      'EBCDIC-IT-280+EURO' => 'IBM01144',
      'EBCDIC-JP-E' => 'IBM281',
      'EBCDIC-JP-KANA' => 'IBM290',
      'EBCDIC-LATIN9--EURO' => 'IBM00924',
      'EBCDIC-NO-277+EURO' => 'IBM01142',
      'EBCDIC-SE-278+EURO' => 'IBM01143',
      'EBCDIC-US-37+EURO' => 'IBM01140',
      'ECMA-114' => 'ISO-8859-6',
      'ECMA-118' => 'ISO-8859-7',
      'ELOT_928' => 'ISO-8859-7',
  	'EUC-CN' => 'CN-GB',
  	'EUCCN' => 'CN-GB',
  	'EUCJP' => 'EUC-JP',
  	'EUCKR' => 'EUC-KR',
  	'EUCTW' => 'EUC-TW',
      'EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE' => 'EUC-JP',
      'FI' => 'SEN_850200_B',
      'FR' => 'NF_Z_62-010',
  	'FRISS' => 'EBCDIC-IS-FRISS',
      'GB' => 'BS_4730',
      'GB2312' => 'CN-GB',
  	'GBK' => 'CP936',
      'GREEK' => 'ISO-8859-7',
      'GREEK8' => 'ISO-8859-7',
      'HEBREW' => 'ISO-8859-8',
      'HU' => 'MSZ_7795.3',
  	'HZ-GB-2312' => 'HZ',
      'IBM367' => 'US-ASCII',
  	'IBM775' => 'CP775',
      'IBM819' => 'ISO-8859-1',
      'IRV' => 'ISO_646.IRV:1983',
      'ISO-10646' => 'ISO-10646-UNICODE-LATIN1',
      'ISO-CELTIC' => 'ISO-8859-14',
      'ISO-IR-10' => 'SEN_850200_B',
      'ISO-IR-100' => 'ISO-8859-1',
      'ISO-IR-101' => 'ISO-8859-2',
      'ISO-IR-102' => 'T.61-7BIT',
      'ISO-IR-109' => 'ISO-8859-3',
      'ISO-IR-11' => 'SEN_850200_C',
      'ISO-IR-110' => 'ISO-8859-4',
      'ISO-IR-111' => 'ECMA-CYRILLIC',
      'ISO-IR-121' => 'CSA_Z243.4-1985-1',
      'ISO-IR-122' => 'CSA_Z243.4-1985-2',
      'ISO-IR-123' => 'CSA_Z243.4-1985-GR',
      'ISO-IR-126' => 'ISO-8859-7',
      'ISO-IR-127' => 'ISO-8859-6',
      'ISO-IR-128' => 'T.101-G2',
      'ISO-IR-13' => 'JIS_C6220-1969-JP',
      'ISO-IR-138' => 'ISO-8859-8',
      'ISO-IR-139' => 'CSN_369103',
      'ISO-IR-14' => 'JIS_C6220-1969-RO',
      'ISO-IR-141' => 'JUS_I.B1.002',
      'ISO-IR-142' => 'ISO_6937-2-ADD',
      'ISO-IR-143' => 'IEC_P27-1',
      'ISO-IR-144' => 'ISO-8859-5',
      'ISO-IR-146' => 'JUS_I.B1.003-SERB',
      'ISO-IR-147' => 'JUS_I.B1.003-MAC',
      'ISO-IR-148' => 'ISO-8859-9',
      'ISO-IR-149' => 'KS_C_5601-1987',
      'ISO-IR-15' => 'IT',
      'ISO-IR-150' => 'GREEK-CCITT',
      'ISO-IR-151' => 'NC_NC00-10:81',
      'ISO-IR-152' => 'ISO_6937-2-25',
      'ISO-IR-153' => 'GOST_19768-74',
      'ISO-IR-154' => 'ISO_8859-SUPP',
      'ISO-IR-155' => 'ISO_10367-BOX',
      'ISO-IR-157' => 'ISO-8859-10',
      'ISO-IR-158' => 'LATIN-LAP',
      'ISO-IR-159' => 'JIS_X0212-1990',
      'ISO-IR-16' => 'PT',
  	'ISO-IR-166' => 'TIS-620',
      'ISO-IR-17' => 'ES',
  	'ISO-IR-179' => 'ISO-8859-13',
      'ISO-IR-18' => 'GREEK7-OLD',
      'ISO-IR-19' => 'LATIN-GREEK',
      'ISO-IR-199' => 'ISO-8859-14',
      'ISO-IR-2' => 'ISO_646.IRV:1983',
      'ISO-IR-203' => 'ISO-8859-15',
      'ISO-IR-21' => 'DIN_66003',
      'ISO-IR-226' => 'ISO-8859-16',
      'ISO-IR-25' => 'NF_Z_62-010_(1973)',
      'ISO-IR-27' => 'LATIN-GREEK-1',
      'ISO-IR-37' => 'ISO_5427',
      'ISO-IR-4' => 'BS_4730',
      'ISO-IR-42' => 'JIS_C6226-1978',
      'ISO-IR-47' => 'BS_VIEWDATA',
      'ISO-IR-49' => 'INIS',
      'ISO-IR-50' => 'INIS-8',
      'ISO-IR-51' => 'INIS-CYRILLIC',
      'ISO-IR-54' => 'ISO_5427-EXT',
      'ISO-IR-55' => 'ISO_5428',
      'ISO-IR-57' => 'GB_1988-80',
      'ISO-IR-58' => 'GB_2312-80',
      'ISO-IR-6' => 'US-ASCII',
      'ISO-IR-60' => 'NS_4551-1',
      'ISO-IR-61' => 'NS_4551-2',
      'ISO-IR-69' => 'NF_Z_62-010',
      'ISO-IR-70' => 'VIDEOTEX-SUPPL',
      'ISO-IR-79' => 'ISO-8859-13',
      'ISO-IR-8-1' => 'NATS-SEFI',
      'ISO-IR-8-2' => 'NATS-SEFI-ADD',
      'ISO-IR-84' => 'PT2',
      'ISO-IR-85' => 'ES2',
      'ISO-IR-86' => 'MSZ_7795.3',
      'ISO-IR-87' => 'JIS_C6226-1983',
      'ISO-IR-88' => 'GREEK7',
      'ISO-IR-89' => 'ASMO_449',
      'ISO-IR-9-1' => 'NATS-DANO',
      'ISO-IR-9-2' => 'NATS-DANO-ADD',
      'ISO-IR-91' => 'JIS_C6229-1984-A',
      'ISO-IR-92' => 'JIS_C6229-1984-B',
      'ISO-IR-93' => 'JIS_C6229-1984-B-ADD',
      'ISO-IR-94' => 'JIS_C6229-1984-HAND',
      'ISO-IR-95' => 'JIS_C6229-1984-HAND-ADD',
      'ISO-IR-96' => 'JIS_C6229-1984-KANA',
      'ISO-IR-98' => 'ISO_2033-1983',
      'ISO-IR-99' => 'ANSI_X3.110-1983',
      'ISO5427CYRILLIC1981' => 'ISO_5427:1981',
      'ISO646-CA' => 'CSA_Z243.4-1985-1',
      'ISO646-CA2' => 'CSA_Z243.4-1985-2',
      'ISO646-CN' => 'GB_1988-80',
      'ISO646-CU' => 'NC_NC00-10:81',
      'ISO646-DE' => 'DIN_66003',
      'ISO646-DK' => 'DS_2089',
      'ISO646-ES' => 'ES',
      'ISO646-ES2' => 'ES2',
      'ISO646-FI' => 'SEN_850200_B',
      'ISO646-FR' => 'NF_Z_62-010',
      'ISO646-FR1' => 'NF_Z_62-010_(1973)',
      'ISO646-GB' => 'BS_4730',
      'ISO646-HU' => 'MSZ_7795.3',
      'ISO646-IT' => 'IT',
      'ISO646-JP' => 'JIS_C6220-1969-RO',
      'ISO646-JP-OCR-B' => 'JIS_C6229-1984-B',
      'ISO646-KR' => 'KSC5636',
      'ISO646-NO' => 'NS_4551-1',
      'ISO646-NO2' => 'NS_4551-2',
      'ISO646-PT' => 'PT',
      'ISO646-PT2' => 'PT2',
      'ISO646-SE' => 'SEN_850200_B',
      'ISO646-SE2' => 'SEN_850200_C',
      'ISO646-US' => 'US-ASCII',
      'ISO646-YU' => 'JUS_I.B1.002',
  	'ISO_5427:1981' => 'ISO_5427-EXT',
      'ISO_5428:1980' => 'ISO_5428',
      'ISO_646.IRV:1991' => 'US-ASCII',
      'ISO_8859-1' => 'ISO-8859-1',
      'ISO_8859-1:1987' => 'ISO-8859-1',
      'ISO_8859-10' => 'ISO-8859-10',
      'ISO_8859-10:1992' => 'ISO-8859-10',
      'ISO_8859-13' => 'ISO-8859-13',
      'ISO_8859-14' => 'ISO-8859-14',
      'ISO_8859-14:1998' => 'ISO-8859-14',
      'ISO_8859-15' => 'ISO-8859-15',
      'ISO_8859-15:1998' => 'ISO-8859-15',
      'ISO_8859-16' => 'ISO-8859-16',
      'ISO_8859-16:2001' => 'ISO-8859-16',
      'ISO_8859-1:1987' => 'ISO-8859-1',
      'ISO_8859-2' => 'ISO-8859-2',
      'ISO_8859-2:1987' => 'ISO-8859-2',
      'ISO_8859-3' => 'ISO-8859-3',
      'ISO_8859-3:1988' => 'ISO-8859-3',
      'ISO_8859-4' => 'ISO-8859-4',
      'ISO_8859-4:1988' => 'ISO-8859-4',
      'ISO_8859-5' => 'ISO-8859-5',
      'ISO_8859-5:1988' => 'ISO-8859-5',
      'ISO_8859-6' => 'ISO-8859-6',
      'ISO_8859-6-E' => 'ISO-8859-6-E',
      'ISO_8859-6-I' => 'ISO-8859-6-I',
      'ISO_8859-6:1987' => 'ISO-8859-6',
      'ISO_8859-7' => 'ISO-8859-7',
      'ISO_8859-7:1987' => 'ISO-8859-7',
      'ISO_8859-8' => 'ISO-8859-8',
      'ISO_8859-8-E' => 'ISO-8859-8-E',
      'ISO_8859-8-I' => 'ISO-8859-8-I',
      'ISO_8859-8:1988' => 'ISO-8859-8',
      'ISO_8859-9' => 'ISO-8859-9',
      'ISO_8859-9:1989' => 'ISO-8859-9',
      'ISO_9036' => 'ASMO_449',
      'JIS_C6220-1969' => 'JIS_C6220-1969-JP',
      'JIS_X0208-1983' => 'JIS_C6226-1983',
      'JP' => 'JIS_C6220-1969-RO',
      'JP-OCR-A' => 'JIS_C6229-1984-A',
      'JP-OCR-B' => 'JIS_C6229-1984-B',
      'JP-OCR-B-ADD' => 'JIS_C6229-1984-B-ADD',
      'JP-OCR-HAND' => 'JIS_C6229-1984-HAND',
      'JP-OCR-HAND-ADD' => 'JIS_C6229-1984-HAND-ADD',
      'JS' => 'JUS_I.B1.002',
      'KATAKANA' => 'JIS_C6220-1969-JP',
      'KOREAN' => 'KS_C_5601-1987',
      'KSC_5601' => 'KS_C_5601-1987',
      'KS_C_5601-1989' => 'KS_C_5601-1987',
      'L1' => 'ISO-8859-1',
      'L10' => 'ISO-8859-16',
      'L2' => 'ISO-8859-2',
      'L3' => 'ISO-8859-3',
      'L4' => 'ISO-8859-4',
      'L5' => 'ISO-8859-9',
      'L6' => 'ISO-8859-10',
  	'L7' => 'ISO-8859-13',
      'L8' => 'ISO-8859-14',
      'LAP' => 'LATIN-LAP',
      'LATIN-9' => 'ISO-8859-15',
      'LATIN1' => 'ISO-8859-1',
      'LATIN1-2-5' => 'ISO_8859-SUPP',
      'LATIN10' => 'ISO-8859-16',
      'LATIN2' => 'ISO-8859-2',
      'LATIN3' => 'ISO-8859-3',
      'LATIN4' => 'ISO-8859-4',
      'LATIN5' => 'ISO-8859-9',
      'LATIN6' => 'ISO-8859-10',
  	'LATIN7' => 'ISO-8859-13',
      'LATIN8' => 'ISO-8859-14',
      'MAC' => 'MACINTOSH',
  	'MAC-ARABIC' => 'MACARABIC',
  	'MAC-CENTRALEUROPE' => 'MACCENTRALEUROPE',
  	'MAC-CROATIAN' => 'MACCROATIAN',
  	'MAC-CYRILLIC' => 'MACCYRILLIC',
  	'MAC-GREEK' => 'MACGREEK',
  	'MAC-HEBREW' => 'MACHEBREW',
  	'MAC-ICELAND' => 'MACICELAND',
  	'MAC-ROMANIA' => 'MACROMANIA',
  	'MAC-THAI' => 'MACTHAI',
  	'MAC-TURKISH' => 'MACTURKISH',
  	'MAC-UKRAINE' => 'MACUKRAINE',
      'MACEDONIAN' => 'JUS_I.B1.003-MAC',
  	'MS-ARAB' => 'WINDOWS-1256',
  	'MS-ANSI' => 'WINDOWS-1252',
  	'MS-EE' => 'WINDOWS-1250',
  	'MS-CYRL' => 'WINDOWS-1251',
  	'MS-GREEK' => 'WINDOWS-1253',
  	'MS-HEBR' => 'WINDOWS-1255',
  	'MS-TURK' => 'WINDOWS-1254',
      'MS936' => 'GBK',
      'MS_KANJI' => 'SHIFT_JIS',
      'NAPLPS' => 'ANSI_X3.110-1983',
      'NO' => 'NS_4551-1',
      'NO2' => 'NS_4551-2',
  	'OS2LATIN1' => 'IBM1004',
      'PT154' => 'PTCP154',
      'R8' => 'HP-ROMAN8',
      'REF' => 'ISO_646.BASIC:1983',
      'ROMAN8' => 'HP-ROMAN8',
      'SE' => 'SEN_850200_B',
      'SE2' => 'SEN_850200_C',
      'SERBIAN' => 'JUS_I.B1.003-SERB',
      'ST_SEV_358-88' => 'GOST_19768-74',
      'T.61' => 'T.61-8BIT',
  	'TIS620' => 'TIS-620',
  	'TIS620-0' => 'TIS-620',
  	'TIS620.2529-1' => 'TIS-620',
  	'TIS620.2533-0' => 'TIS-620',
  	'TIS620.2533-1' => 'TIS-620',
  	'UHC' => 'CP949',
      'UK' => 'BS_4730',
      'US' => 'US-ASCII',
  	'VISCII1.1-1' => 'VISCII',
  	'WINBALTRIM' => 'WINDOWS-1257',
  	'WINDOWS-874' => 'CP874',
      'WINDOWS-936' => 'GBK',
  	'WINDOWS-SAMI2' => 'WIN-SAMI-2',
  	'WS2' => 'WIN-SAMI-2',
      'X0201' => 'JIS_X0201',
      'X0201-7' => 'JIS_C6220-1969-JP',
      'X0208' => 'JIS_C6226-1983',
      'X0212' => 'JIS_X0212-1990',
      'YU' => 'JUS_I.B1.002',
  	'X-ATARI-ST' => 'ATARI-ST',
  	'X-ATARIST' => 'ATARI-ST',
  	'X-ATARI-ST-EURO' => 'ATARI-ST-EURO',
  	'X-ATARIST-EURO' => 'ATARI-ST-EURO',
  	'X-MAC-ARABIC' => 'MACARABIC',
  	'X-MAC-CENTRALEUROPE' => 'MACCENTRALEUROPE',
  	'X-MAC-CROATIAN' => 'MACCROATIAN',
  	'X-MAC-CYRILLIC' => 'MACCYRILLIC',
  	'X-MAC-GREEK' => 'MACGREEK',
  	'X-MAC-HEBREW' => 'MACHEBREW',
  	'X-MAC-ICELAND' => 'MACICELAND',
  	'X-MAC-ROMANIA' => 'MACROMANIA',
  	'X-MAC-THAI' => 'MACTHAI',
  	'X-MAC-TURKISH' => 'MACTURKISH',
  	'X-MAC-UKRAINE' => 'MACUKRAINE',
  	'X-MACARABIC' => 'MACARABIC',
  	'X-MACCENTRALEUROPE' => 'MACCENTRALEUROPE',
  	'X-MACCROATIAN' => 'MACCROATIAN',
  	'X-MACCYRILLIC' => 'MACCYRILLIC',
  	'X-MACGREEK' => 'MACGREEK',
  	'X-MACHEBREW' => 'MACHEBREW',
  	'X-MACICELAND' => 'MACICELAND',
  	'X-MACROMANIA' => 'MACROMANIA',
  	'X-MACTHAI' => 'MACTHAI',
  	'X-MACTURKISH' => 'MACTURKISH',
  	'X-MACUKRAINE' => 'MACUKRAINE',
  };
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::Recode::_Aliases - Internal Charset Alias Database for libintl-perl
  
  =head1 SYNOPSIS
  
  use Locale::Recode::_Aliases
  
  die "This module is internal to libintl.  Do not use it directly!\n";
  
  =head1 DESCRIPTION
  
  Contains a list of codeset aliases that are known internally to
  libintl.
  
  =head1 CONSTANTS
  
  =over 4
  
  =item ALIASES
  
  The constant B<Locale::Recode::_Aliases::ALIASES> contains a hash reference
  the keys of which are internally known charset alias names all in 
  uppercase.  The corresponding value is the canonical name of the charset.
  
  =back
  
  =head1 BUGS
  
  The format of the lookup table will most probably change, do not rely
  on the current format!
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODE__ALIASES

    $main::fatpacked{"Locale/Recode/_Conversions.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODE__CONVERSIONS';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # List of internally known conversions.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::Recode::_Conversions;
  
  use strict;
  use integer;
  
  use vars qw ($conversions $optional_conversions);
  
  # These are the canonical names of the encodings always available.
  $conversions = {
  	'ASMO_449' => 'ASMO_449',
  	'ATARI-ST-EURO' => 'ATARI_ST_EURO',
  	'ATARI-ST' => 'ATARI_ST',
  	'CP10007' => 'CP10007',
  	'CSN_369103' => 'CSN_369103',
  	'CWI' => 'CWI',
  	'DEC-MCS' => 'DEC_MCS',
  	'EBCDIC-AT-DE-A' => 'EBCDIC_AT_DE_A',
  	'EBCDIC-AT-DE' => 'EBCDIC_AT_DE',
  	'EBCDIC-CA-FR' => 'EBCDIC_CA_FR',
  	'EBCDIC-DK-NO-A' => 'EBCDIC_DK_NO_A',
  	'EBCDIC-DK-NO' => 'EBCDIC_DK_NO',
  	'EBCDIC-ES-A' => 'EBCDIC_ES_A',
  	'EBCDIC-ES-S' => 'EBCDIC_ES_S',
  	'EBCDIC-ES' => 'EBCDIC_ES',
  	'EBCDIC-FI-SE-A' => 'EBCDIC_FI_SE_A',
  	'EBCDIC-FI-SE' => 'EBCDIC_FI_SE',
  	'EBCDIC-FR' => 'EBCDIC_FR',
  	'EBCDIC-IS-FRISS' => 'EBCDIC_IS_FRISS',
  	'EBCDIC-IT' => 'EBCDIC_IT',
  	'EBCDIC-PT' => 'EBCDIC_PT',
  	'EBCDIC-UK' => 'EBCDIC_UK',
  	'EBCDIC-US' => 'EBCDIC_US',
  	'ECMA-CYRILLIC' => 'ECMA_CYRILLIC',
  	'GEORGIAN-ACADEMY' => 'GEORGIAN_ACADEMY',
  	'GEORGIAN-PS' => 'GEORGIAN_PS',
  	'GOST_19768-74' => 'GOST_19768_74',
  	'GREEK-CCITT' => 'GREEK_CCITT',
  	'GREEK7-OLD' => 'GREEK7_OLD',
  	'GREEK7' => 'GREEK7',
  	'HP-ROMAN8' => 'HP_ROMAN8',
  	'IBM037' => 'IBM037',
  	'IBM038' => 'IBM038',
  	'IBM1004' => 'IBM1004',
  	'IBM1026' => 'IBM1026',
  	'IBM1047' => 'IBM1047',
  	'IBM256' => 'IBM256',
  	'IBM273' => 'IBM273',
  	'IBM274' => 'IBM274',
  	'IBM275' => 'IBM275',
  	'IBM277' => 'IBM277',
  	'IBM278' => 'IBM278',
  	'IBM280' => 'IBM280',
  	'IBM281' => 'IBM281',
  	'IBM284' => 'IBM284',
  	'IBM285' => 'IBM285',
  	'IBM290' => 'IBM290',
  	'IBM297' => 'IBM297',
  	'IBM420' => 'IBM420',
  	'IBM423' => 'IBM423',
  	'IBM424' => 'IBM424',
  	'IBM437' => 'IBM437',
  	'IBM500' => 'IBM500',
  	'IBM850' => 'IBM850',
  	'IBM851' => 'IBM851',
  	'IBM852' => 'IBM852',
  	'IBM855' => 'IBM855',
  	'IBM857' => 'IBM857',
  	'IBM860' => 'IBM860',
  	'IBM861' => 'IBM861',
  	'IBM862' => 'IBM862',
  	'IBM863' => 'IBM863',
  	'IBM864' => 'IBM864',
  	'IBM865' => 'IBM865',
  	'IBM866' => 'IBM866',
  	'IBM868' => 'IBM868',
  	'IBM869' => 'IBM869',
  	'IBM870' => 'IBM870',
  	'IBM871' => 'IBM871',
  	'IBM874' => 'IBM874',
  	'IBM875' => 'IBM875',
  	'IBM880' => 'IBM880',
  	'IBM891' => 'IBM891',
  	'IBM903' => 'IBM903',
  	'IBM904' => 'IBM904',
  	'IBM905' => 'IBM905',
  	'IBM918' => 'IBM918',
  	'IEC_P27-1' => 'IEC_P27_1',
  	'INIS-8' => 'INIS_8',
  	'INIS-CYRILLIC' => 'INIS_CYRILLIC',
  	'INIS' => 'INIS',
  	'ISO-8859-1' => 'ISO_8859_1',
  	'ISO-8859-10' => 'ISO_8859_10',
  	'ISO-8859-11' => 'ISO_8859_11',
  	'ISO-8859-13' => 'ISO_8859_13',
  	'ISO-8859-14' => 'ISO_8859_14',
  	'ISO-8859-15' => 'ISO_8859_15',
  	'ISO-8859-16' => 'ISO_8859_16',
  	'ISO-8859-2' => 'ISO_8859_2',
  	'ISO-8859-3' => 'ISO_8859_3',
  	'ISO-8859-4' => 'ISO_8859_4',
  	'ISO-8859-5' => 'ISO_8859_5',
  	'ISO-8859-6' => 'ISO_8859_6',
  	'ISO-8859-7' => 'ISO_8859_7',
  	'ISO-8859-8' => 'ISO_8859_8',
  	'ISO-8859-9' => 'ISO_8859_9',
  	'ISO_10367-BOX' => 'ISO_10367_BOX',
  	'ISO_2033-1983' => 'ISO_2033_1983',
  	'ISO_5427-EXT' => 'ISO_5427_EXT',
  	'ISO_5427' => 'ISO_5427',
  	'ISO_5428' => 'ISO_5428',
  	'KOI-8' => 'KOI_8',
  	'KOI8-R' => 'KOI8_R',
  	'KOI8-RU' => 'KOI8_RU',
  	'KOI8-T' => 'KOI8_T',
  	'KOI8-U' => 'KOI8_U',
  	'LATIN-GREEK-1' => 'LATIN_GREEK_1',
  	'LATIN-GREEK' => 'LATIN_GREEK',
  	'MACINTOSH' => 'MACINTOSH',
  	'MACARABIC' => 'MACARABIC',
  	'MACCYRILLIC' => 'MACCYRILLIC',
  	'MACCROATIAN' => 'MACCROATIAN',
  	'MACGREEK' => 'MACGREEK',
  	'MACHEBREW' => 'MACHEBREW',
  	'MACICELAND' => 'MACICELAND',
  	'MACROMANIA' => 'MACROMANIA',
  	'MACTHAI' => 'MACTHAI',
  	'MACTURKISH' => 'MACTURKISH',
  	'MACUKRAINE' => 'MACUKRAINE',
  	'MAC-IS' => 'MAC_IS',
  	'MAC-SAMI' => 'MAC_SAMI',
  	'MAC-UK' => 'MAC_UK',
  	'NATS-DANO' => 'NATS_DANO',
  	'NATS-SEFI' => 'NATS_SEFI',
  	'NEXTSTEP' => 'NEXTSTEP',
  	'TIS-620' => 'TIS_620',
  	'UTF-8' => 'UTF_8',
  	'VISCII' => 'VISCII',
  	'WIN-SAMI-2' => 'SAMI_WS2',
  	'WINDOWS-1250' => 'CP1250',
  	'WINDOWS-1251' => 'CP1251',
  	'WINDOWS-1252' => 'CP1252',
  	'WINDOWS-1253' => 'CP1253',
  	'WINDOWS-1254' => 'CP1254',
  	'WINDOWS-1256' => 'CP1256',
  	'WINDOWS-1257' => 'CP1257',
  	'US-ASCII' => 'US_ASCII',
  };
  
  # These encodings are maybe available via Encode(3pm).
  $optional_conversions = {
  	'BIG5' => undef,
  	'BIG5-HKSCS' => undef,
  	'CN-GB' => undef,
  	'CN-GB-ISOIR165' => undef,
  	'CP1006' => undef,
  	'CP1026' => undef,
  	'CP1047' => undef,
  	'CP1361' => undef,
  	'CP949' => undef,
      'CP37' => undef,
      'CP424' => undef,
      'CP500' => undef,
      'CP737' => undef,
      'CP775' => undef,
      'CP856' => undef,
      'CP874' => undef,
      'CP875' => undef,
      'CP932' => undef,
      'CP936' => undef,
      'CP950' => undef,
  	'EUC-JP' => undef,
  	'EUC-KR' => undef,
  	'EUC-TW' => undef,
      # mapping from 0xef to 0xff missing.
  	# 'HP-ROMAN8' => undef,
  	'GB18030' => undef,
  	'HZ' => undef,
  	'IBM437' => undef,
  	'IBM850' => undef,
  	'IBM852' => undef,
  	'IBM855' => undef,
  	'IBM857' => undef,
  	'IBM860' => undef,
  	'IBM861' => undef,
  	'IBM862' => undef,
  	'IBM863' => undef,
  	'IBM864' => undef,
  	'IBM865' => undef,
  	'IBM866' => undef,
  	'IBM869' => undef,
  	'ISO-10646-UCS-2' => undef,
  	'ISO-10646-UCS-4' => undef,
  	'ISO-2022-JP' => undef,
  	'ISO-2022-JP-1' => undef,
  	'ISO-2022-KR' => undef,
  	'ISO-8859-1' => undef,
  	'ISO-8859-10' => undef,
  	# This is broken in some versions of Encode.
  	# 'ISO-8859-11' => undef,
  	'ISO-8859-13' => undef,
  	'ISO-8859-14' => undef,
  	'ISO-8859-15' => undef,
      # Errors at 0xa5 and 0xab.
  	# 'ISO-8859-16' => undef,
  	'ISO-8859-2' => undef,
  	'ISO-8859-3' => undef,
  	'ISO-8859-4' => undef,
  	'ISO-8859-5' => undef,
      # Uses arabic digits in ascii range?!
  	# 'ISO-8859-6' => undef,
      # 0xa1 and 0xa2 are incorrectly encoded.
  	# 'ISO-8859-7' => undef,
      # 0xfd and 0xfe are missing.
  	# 'ISO-8859-8' => undef,
  	'ISO-8859-9' => undef,
  	'ISO-IR-149' => undef,
  	'KOI8-R' => undef,
      # 0x95 is BULLET, not BULLET OPERATOR.
  	# 'KOI8-U' => undef,
      # Seems to be messed up in certain Encode versions.
  	# 'MACINTOSH' => undef,
  	# TODO: Check other Mac encodings for correctness.
  	# Nextstep is completely broken in my version of Encode.
  	# 'NEXTSTEP' => undef,
  	'SHIFT_JIS' => undef,
  	'UCS-2BE' => undef,
  	'UCS-2LE' => undef,
  	'UCS-4BE' => undef,
  	'UCS-4LE' => undef,
  	'US-ASCII' => undef,
  	'UTF-16' => undef,
  	'UTF-16BE' => undef,
  	'UTF-16LE' => undef,
  	'UTF-32' => undef,
  	'UTF-32BE' => undef,
  	'UTF-32LE' => undef,
  	'UTF-8' => undef,
      # 0x86 is missing, 0xa6 is incorrectly encoded.
  	# 'VISCII' => undef,
  	'WINDOWS-1250' => undef,
  	'WINDOWS-1251' => undef,
  	'WINDOWS-1252' => undef,
  	'WINDOWS-1253' => undef,
  	'WINDOWS-1254' => undef,
  	'WINDOWS-1255' => undef,
  	'WINDOWS-1256' => undef,
  	'WINDOWS-1257' => undef,
  	'WINDOWS-1258' => undef,
  };
  
  my $has_encode;
  
  sub resolveAlias
  {
  	my (undef, $encoding) = @_;
  
  	$encoding = uc $encoding;
  	
  	return $encoding if exists $conversions->{$encoding};
  	return $encoding if exists $optional_conversions->{$encoding};
  
  	require Locale::Recode::_Aliases;
  
  	my $resolved = Locale::Recode::_Aliases::ALIASES()->{$encoding};
  	
  	return $resolved if $resolved;
  
  	return;
  }
  
  sub isSupported
  {
  	my ($class, $encoding) = @_;
  
  	return unless defined $encoding && length $encoding;
  
  	$encoding = uc $encoding;
  	my $mimename = $class->resolveAlias ($encoding);
  
  	return unless $mimename;
  	
  	# Determine the correct module.
  	if (exists $optional_conversions->{$mimename}) {
  		unless (defined $has_encode) {
  			eval "require Encode";
  			$has_encode = !$@;
  
  			if ($has_encode) {
  				require Encode::Alias;
  
  				# Add missing real names.
  				Encode::Alias::define_alias (MS_KANJI => 'ShiftJIS');
  				Encode::Alias::define_alias ('CN-GB' => 'EUC-CN');
  			}
  		}
  
  		if ($has_encode) {
  			# Now check whether Encode really supports that encoding.
  			eval "Encode::encode ('$mimename', 'x')";
  		
  			unless ($@) {
  				$conversions->{$mimename} = '_Encode';
  			}
  			delete $optional_conversions->{$mimename};
  		}
  	}
  
  	return $conversions->{$mimename} if exists $conversions->{$mimename};
  
  	return;
  }
  
  sub listSupported
  {
  	my ($class) = @_;
  
  	foreach my $opt (keys %$optional_conversions) {
  		$class->isSupported ($opt);
  	}
  
  	my @list = keys %$conversions;
  	return @list;
  }
  
  # Find a conversion path.
  sub findPath
  {
  	my ($class, $from, $to) = @_;
  
  	$from = 'INTERNAL' eq uc $from ? 'INTERNAL' : $class->resolveAlias ($from);
  	$to = 'INTERNAL' eq uc $to ? 'INTERNAL' : $class->resolveAlias ($to);
  	
  	return unless $from && $to;
  	
  	return [] if $from eq $to;
  
  	my $from_module = $class->isSupported ($from);
  	my $to_module = $class->isSupported ($to);
  
  	if (!$from_module) {
  		if ('INTERNAL' eq $from) {
  			$from_module = $to_module or return;
  		} else {
  			return;
  		}
  	}
  
  	if (!$to_module) {
  		if ('INTERNAL' eq $to) {
  			$to_module = $from_module or return;
  		} else {
  			return;
  		}
  	}
  
  	if ($from_module eq $to_module
  		|| $to eq 'INTERNAL'
  		|| $to eq 'UTF-8') {
  		return [[ $from_module, $from, $to ]];
  	} elsif ($from eq 'INTERNAL') {
  		return [[ $to_module, $from, $to ]];
  	} else {
  		return [[ $from_module, $from, 'INTERNAL' ],
  				[ $to_module, 'INTERNAL', $to ]];
  	}
  }
  
  # TODO: check for
  # 7bit-jis
  # AdobeStandardEncoding
  # AdobeSymbol
  # AdobeZdingbat
  # ascii-ctrl
  # big5ext
  # big5plus
  # cccii
  # cns11643-1
  # cns11643-2
  # cns11643-3
  # cns11643-4
  # cns11643-5
  # cns11643-6
  # cns11643-7
  # cns11643-f
  # dingbats
  # gb12345-raw
  # gb2312-raw
  # gsm0338
  # jis0201-raw
  # jis0208-raw
  # jis0212-raw
  # koi8-f
  # MIME-B
  # MIME-Header
  # MIME-Q
  # posix-bc
  # symbol
  # unisys
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::Recode::_Conversions - Internal Table of Known Conversions
  
  =head1 SYNOPSIS
  
  use Locale::Recode::_Conversions
  
  This module is internal to libintl.  Do not use it directly!
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODE__CONVERSIONS

    $main::fatpacked{"Locale/RecodeData.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA';
  #! /bin/false
  
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Virtual base class for Locale::Recode converters.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData;
  
  use strict;
  
  sub new
  {
      my ($class, %args) = @_;
  
      bless {
  		_from => $args{from},
  		_to => $args{to},
      }, $class;
  }
  
  sub _getError
  {
  	shift->{_error};
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData - Abstract Base Class for Charset Converters
  
  =head1 SYNOPSIS
  
      # For compatibility with Perl 5.005 and earlier, you must
      # *use* the module before inheriting from it!
      use qw (Locale::RecodeData);
      use base qw (Locale::RecodeData);
  
  =head1 DESCRIPTION
  
  The module B<Locale::RecodeData> serves as an abstract base class to
  all converters used by Locale::Recode(3).
  
  Adding new conversion modules is currently not straightforward, and 
  you will have to edit the sources of some modules for that purpose.
  
  First, you have to add your new converter class to the list found
  in Locale::_Conversions(3), so that Locale::Recode(3) knows about
  its presence.  If there are valid aliases for the codeset of your
  converter, you will also have to edit Locale::_Aliases(3).
  
  Finally, you have to implement the (protected) conversion routine
  _recode().  See below (L<"INTERFACE")> for details.
  
  =head1 CONSTRUCTOR
  
  =over 4
  
  =item B<new (from =E<gt> FROM_CODESET, to =E<gt> TO_CODESET)>
  
  The constructor takes two (named) arguments:
  
  =over 8
  
  =item B<from>
  
  The canonical name of the source codeset.  Aliases have already been
  resolved and the name is converted to uppercase.
  
  =item B<to>
  
  The canonical name of the destination codeset.  Aliases have already been
  resolved and the name is converted to uppercase.
  
  =back
  
  You normally don't have to implement the constructor.  The default constructor
  implemented here will store the source and destination codesets in the
  protected members C<_from> and C<_to>.
  
  =back
  
  =head1 METHODS
  
  The class implements one method:
  
  =over 4
  
  =item B<_getError>
  
  Returns the (protected) member C<_error>.
  
  =back
  
  =head1 INTERFACE
  
  New conversion classes must provide the following interface:
  
  =over 4
  
  =item B<new (from =E<gt> FROM_CODESET, to =E<gt> TO_CODESET)>
  
  The constructor takes two (named) arguments:
  
  =over 8
  
  =item B<from>
  
  The canonical name of the source codeset.  Aliases have already been
  resolved and the name is converted to uppercase.
  
  =item B<to>
  
  The canonical name of the destination codeset.  Aliases have already been
  resolved and the name is converted to uppercase.
  
  =back
  
  =item B<_getError>
  
  Should return the last error (as a string) or false if there was no error.
  
  This method is implemented in the base class already.
  
  =item B<_recode STRINGREF>
  
  Should convert the argument C<STRINGREF> in-place.  In case of failure,
  return false, and make provisions that the method C<_getError()> returns
  an informative error message.
  
  =back
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::Recode::_Aliases(3pm), Locale::Recode::_Conversions(3pm),
  Locale::Recode(3pm), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA

    $main::fatpacked{"Locale/RecodeData/ASMO_449.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ASMO_449';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ASMO_449.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ASMO_449;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x00a4,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x060c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x061b,
      0x003c,
      0x003d,
      0x003e,
      0x061f,
      0x0040,
      0x0621,
      0x0622,
      0x0623,
      0x0624,
      0x0625,
      0x0626,
      0x0627,
      0x0628,
      0x0629,
      0x062a,
      0x062b,
      0x062c,
      0x062d,
      0x062e,
      0x062f,
      0x0630,
      0x0631,
      0x0632,
      0x0633,
      0x0634,
      0x0635,
      0x0636,
      0x0637,
      0x0638,
      0x0639,
      0x063a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0640,
      0x0641,
      0x0642,
      0x0643,
      0x0644,
      0x0645,
      0x0646,
      0x0647,
      0x0648,
      0x0649,
      0x064a,
      0x064b,
      0x064c,
      0x064d,
      0x064e,
      0x064f,
      0x0650,
      0x0651,
      0x0652,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007b,
      0x007c,
      0x007d,
      0x203e,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\xc2\xa4",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\xd8\x8c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\xd8\x9b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\xd8\x9f",
      "\x40",
      "\xd8\xa1",
      "\xd8\xa2",
      "\xd8\xa3",
      "\xd8\xa4",
      "\xd8\xa5",
      "\xd8\xa6",
      "\xd8\xa7",
      "\xd8\xa8",
      "\xd8\xa9",
      "\xd8\xaa",
      "\xd8\xab",
      "\xd8\xac",
      "\xd8\xad",
      "\xd8\xae",
      "\xd8\xaf",
      "\xd8\xb0",
      "\xd8\xb1",
      "\xd8\xb2",
      "\xd8\xb3",
      "\xd8\xb4",
      "\xd8\xb5",
      "\xd8\xb6",
      "\xd8\xb7",
      "\xd8\xb8",
      "\xd8\xb9",
      "\xd8\xba",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\xd9\x80",
      "\xd9\x81",
      "\xd9\x82",
      "\xd9\x83",
      "\xd9\x84",
      "\xd9\x85",
      "\xd9\x86",
      "\xd9\x87",
      "\xd9\x88",
      "\xd9\x89",
      "\xd9\x8a",
      "\xd9\x8b",
      "\xd9\x8c",
      "\xd9\x8d",
      "\xd9\x8e",
      "\xd9\x8f",
      "\xd9\x90",
      "\xd9\x91",
      "\xd9\x92",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7b",
      "\x7c",
      "\x7d",
      "\xe2\x80\xbe",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x00000040 => "\x40",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007f => "\x7f",
      0x000000a4 => "\x24",
      0x0000060c => "\x2c",
      0x0000061b => "\x3b",
      0x0000061f => "\x3f",
      0x00000621 => "\x41",
      0x00000622 => "\x42",
      0x00000623 => "\x43",
      0x00000624 => "\x44",
      0x00000625 => "\x45",
      0x00000626 => "\x46",
      0x00000627 => "\x47",
      0x00000628 => "\x48",
      0x00000629 => "\x49",
      0x0000062a => "\x4a",
      0x0000062b => "\x4b",
      0x0000062c => "\x4c",
      0x0000062d => "\x4d",
      0x0000062e => "\x4e",
      0x0000062f => "\x4f",
      0x00000630 => "\x50",
      0x00000631 => "\x51",
      0x00000632 => "\x52",
      0x00000633 => "\x53",
      0x00000634 => "\x54",
      0x00000635 => "\x55",
      0x00000636 => "\x56",
      0x00000637 => "\x57",
      0x00000638 => "\x58",
      0x00000639 => "\x59",
      0x0000063a => "\x5a",
      0x00000640 => "\x60",
      0x00000641 => "\x61",
      0x00000642 => "\x62",
      0x00000643 => "\x63",
      0x00000644 => "\x64",
      0x00000645 => "\x65",
      0x00000646 => "\x66",
      0x00000647 => "\x67",
      0x00000648 => "\x68",
      0x00000649 => "\x69",
      0x0000064a => "\x6a",
      0x0000064b => "\x6b",
      0x0000064c => "\x6c",
      0x0000064d => "\x6d",
      0x0000064e => "\x6e",
      0x0000064f => "\x6f",
      0x00000650 => "\x70",
      0x00000651 => "\x71",
      0x00000652 => "\x72",
      0x0000203e => "\x7e",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ASMO_449 - Conversion routines for ASMO_449
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ASMO_449.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO_9036
   alias ARABIC7
   alias ISO-IR-89
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  000000A4 | CURRENCY SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000060C | ARABIC COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000061B | ARABIC SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000061F | ARABIC QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000621 | ARABIC LETTER HAMZA
      42 |  00000622 | ARABIC LETTER ALEF WITH MADDA ABOVE
      43 |  00000623 | ARABIC LETTER ALEF WITH HAMZA ABOVE
      44 |  00000624 | ARABIC LETTER WAW WITH HAMZA ABOVE
      45 |  00000625 | ARABIC LETTER ALEF WITH HAMZA BELOW
      46 |  00000626 | ARABIC LETTER YEH WITH HAMZA ABOVE
      47 |  00000627 | ARABIC LETTER ALEF
      48 |  00000628 | ARABIC LETTER BEH
      49 |  00000629 | ARABIC LETTER TEH MARBUTA
      4A |  0000062A | ARABIC LETTER TEH
      4B |  0000062B | ARABIC LETTER THEH
      4C |  0000062C | ARABIC LETTER JEEM
      4D |  0000062D | ARABIC LETTER HAH
      4E |  0000062E | ARABIC LETTER KHAH
      4F |  0000062F | ARABIC LETTER DAL
      50 |  00000630 | ARABIC LETTER THAL
      51 |  00000631 | ARABIC LETTER REH
      52 |  00000632 | ARABIC LETTER ZAIN
      53 |  00000633 | ARABIC LETTER SEEN
      54 |  00000634 | ARABIC LETTER SHEEN
      55 |  00000635 | ARABIC LETTER SAD
      56 |  00000636 | ARABIC LETTER DAD
      57 |  00000637 | ARABIC LETTER TAH
      58 |  00000638 | ARABIC LETTER ZAH
      59 |  00000639 | ARABIC LETTER AIN
      5A |  0000063A | ARABIC LETTER GHAIN
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000640 | ARABIC TATWEEL
      61 |  00000641 | ARABIC LETTER FEH
      62 |  00000642 | ARABIC LETTER QAF
      63 |  00000643 | ARABIC LETTER KAF
      64 |  00000644 | ARABIC LETTER LAM
      65 |  00000645 | ARABIC LETTER MEEM
      66 |  00000646 | ARABIC LETTER NOON
      67 |  00000647 | ARABIC LETTER HEH
      68 |  00000648 | ARABIC LETTER WAW
      69 |  00000649 | ARABIC LETTER ALEF MAKSURA
      6A |  0000064A | ARABIC LETTER YEH
      6B |  0000064B | ARABIC FATHATAN
      6C |  0000064C | ARABIC DAMMATAN
      6D |  0000064D | ARABIC KASRATAN
      6E |  0000064E | ARABIC FATHA
      6F |  0000064F | ARABIC DAMMA
      70 |  00000650 | ARABIC KASRA
      71 |  00000651 | ARABIC SHADDA
      72 |  00000652 | ARABIC SUKUN
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000203E | OVERLINE
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ASMO_449

    $main::fatpacked{"Locale/RecodeData/ATARI_ST.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ATARI_ST';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ATARI-ST.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ATARI_ST;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c7,
      0x00fc,
      0x00e9,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e5,
      0x00e7,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ef,
      0x00ee,
      0x00ec,
      0x00c4,
      0x00c5,
      0x00c9,
      0x00e6,
      0x00c6,
      0x00f4,
      0x00f6,
      0x00f2,
      0x00fb,
      0x00f9,
      0x00ff,
      0x00d6,
      0x00dc,
      0x00a2,
      0x00a3,
      0x00a5,
      0x00df,
      0x0192,
      0x00e1,
      0x00ed,
      0x00f3,
      0x00fa,
      0x00f1,
      0x00d1,
      0x00aa,
      0x00ba,
      0x00bf,
      0x2310,
      0x00ac,
      0x00bd,
      0x00bc,
      0x00a1,
      0x00ab,
      0x00bb,
      0x00e3,
      0x00f5,
      0x00d8,
      0x00f8,
      0x0153,
      0x0152,
      0x00c0,
      0x00c3,
      0x00d5,
      0x00a8,
      0x00b4,
      0x2020,
      0x00b6,
      0x00a9,
      0x00ae,
      0x2122,
      0x0133,
      0x0132,
      0x05d0,
      0x05d1,
      0x05d2,
      0x05d3,
      0x05d4,
      0x05d5,
      0x05d6,
      0x05d7,
      0x05d8,
      0x05d9,
      0x05db,
      0x05dc,
      0x05de,
      0x05e0,
      0x05e1,
      0x05e2,
      0x05e4,
      0x05e6,
      0x05e7,
      0x05e8,
      0x05e9,
      0x05ea,
      0x05df,
      0x05da,
      0x05dd,
      0x05e3,
      0x05e5,
      0x00a7,
      0x2038,
      0x221e,
      0x03b1,
      0x03b2,
      0x0393,
      0x03c0,
      0x03a3,
      0x03c3,
      0x00b5,
      0x03c4,
      0x03a6,
      0x03b8,
      0x03a9,
      0x03b4,
      0x222e,
      0x03c6,
      0x2208,
      0x220f,
      0x2261,
      0x00b1,
      0x2265,
      0x2264,
      0x2320,
      0x2321,
      0x00f7,
      0x2248,
      0x00b0,
      0x2022,
      0x00b7,
      0x221a,
      0x207f,
      0x00b2,
      0x00b3,
      0x00af,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x87",
      "\xc3\xbc",
      "\xc3\xa9",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xaf",
      "\xc3\xae",
      "\xc3\xac",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x89",
      "\xc3\xa6",
      "\xc3\x86",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb2",
      "\xc3\xbb",
      "\xc3\xb9",
      "\xc3\xbf",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xc3\x9f",
      "\xc6\x92",
      "\xc3\xa1",
      "\xc3\xad",
      "\xc3\xb3",
      "\xc3\xba",
      "\xc3\xb1",
      "\xc3\x91",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc2\xbf",
      "\xe2\x8c\x90",
      "\xc2\xac",
      "\xc2\xbd",
      "\xc2\xbc",
      "\xc2\xa1",
      "\xc2\xab",
      "\xc2\xbb",
      "\xc3\xa3",
      "\xc3\xb5",
      "\xc3\x98",
      "\xc3\xb8",
      "\xc5\x93",
      "\xc5\x92",
      "\xc3\x80",
      "\xc3\x83",
      "\xc3\x95",
      "\xc2\xa8",
      "\xc2\xb4",
      "\xe2\x80\xa0",
      "\xc2\xb6",
      "\xc2\xa9",
      "\xc2\xae",
      "\xe2\x84\xa2",
      "\xc4\xb3",
      "\xc4\xb2",
      "\xd7\x90",
      "\xd7\x91",
      "\xd7\x92",
      "\xd7\x93",
      "\xd7\x94",
      "\xd7\x95",
      "\xd7\x96",
      "\xd7\x97",
      "\xd7\x98",
      "\xd7\x99",
      "\xd7\x9b",
      "\xd7\x9c",
      "\xd7\x9e",
      "\xd7\xa0",
      "\xd7\xa1",
      "\xd7\xa2",
      "\xd7\xa4",
      "\xd7\xa6",
      "\xd7\xa7",
      "\xd7\xa8",
      "\xd7\xa9",
      "\xd7\xaa",
      "\xd7\x9f",
      "\xd7\x9a",
      "\xd7\x9d",
      "\xd7\xa3",
      "\xd7\xa5",
      "\xc2\xa7",
      "\xe2\x80\xb8",
      "\xe2\x88\x9e",
      "\xce\xb1",
      "\xce\xb2",
      "\xce\x93",
      "\xcf\x80",
      "\xce\xa3",
      "\xcf\x83",
      "\xc2\xb5",
      "\xcf\x84",
      "\xce\xa6",
      "\xce\xb8",
      "\xce\xa9",
      "\xce\xb4",
      "\xe2\x88\xae",
      "\xcf\x86",
      "\xe2\x88\x88",
      "\xe2\x88\x8f",
      "\xe2\x89\xa1",
      "\xc2\xb1",
      "\xe2\x89\xa5",
      "\xe2\x89\xa4",
      "\xe2\x8c\xa0",
      "\xe2\x8c\xa1",
      "\xc3\xb7",
      "\xe2\x89\x88",
      "\xc2\xb0",
      "\xe2\x80\xa2",
      "\xc2\xb7",
      "\xe2\x88\x9a",
      "\xe2\x81\xbf",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xc2\xaf",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a1 => "\xad",
      0x000000a2 => "\x9b",
      0x000000a3 => "\x9c",
      0x000000a5 => "\x9d",
      0x000000a7 => "\xdd",
      0x000000a8 => "\xb9",
      0x000000a9 => "\xbd",
      0x000000aa => "\xa6",
      0x000000ab => "\xae",
      0x000000ac => "\xaa",
      0x000000ae => "\xbe",
      0x000000af => "\xff",
      0x000000b0 => "\xf8",
      0x000000b1 => "\xf1",
      0x000000b2 => "\xfd",
      0x000000b3 => "\xfe",
      0x000000b4 => "\xba",
      0x000000b5 => "\xe6",
      0x000000b6 => "\xbc",
      0x000000b7 => "\xfa",
      0x000000ba => "\xa7",
      0x000000bb => "\xaf",
      0x000000bc => "\xac",
      0x000000bd => "\xab",
      0x000000bf => "\xa8",
      0x000000c0 => "\xb6",
      0x000000c3 => "\xb7",
      0x000000c4 => "\x8e",
      0x000000c5 => "\x8f",
      0x000000c6 => "\x92",
      0x000000c7 => "\x80",
      0x000000c9 => "\x90",
      0x000000d1 => "\xa5",
      0x000000d5 => "\xb8",
      0x000000d6 => "\x99",
      0x000000d8 => "\xb2",
      0x000000dc => "\x9a",
      0x000000df => "\x9e",
      0x000000e0 => "\x85",
      0x000000e1 => "\xa0",
      0x000000e2 => "\x83",
      0x000000e3 => "\xb0",
      0x000000e4 => "\x84",
      0x000000e5 => "\x86",
      0x000000e6 => "\x91",
      0x000000e7 => "\x87",
      0x000000e8 => "\x8a",
      0x000000e9 => "\x82",
      0x000000ea => "\x88",
      0x000000eb => "\x89",
      0x000000ec => "\x8d",
      0x000000ed => "\xa1",
      0x000000ee => "\x8c",
      0x000000ef => "\x8b",
      0x000000f1 => "\xa4",
      0x000000f2 => "\x95",
      0x000000f3 => "\xa2",
      0x000000f4 => "\x93",
      0x000000f5 => "\xb1",
      0x000000f6 => "\x94",
      0x000000f7 => "\xf6",
      0x000000f8 => "\xb3",
      0x000000f9 => "\x97",
      0x000000fa => "\xa3",
      0x000000fb => "\x96",
      0x000000fc => "\x81",
      0x000000ff => "\x98",
      0x00000132 => "\xc1",
      0x00000133 => "\xc0",
      0x00000152 => "\xb5",
      0x00000153 => "\xb4",
      0x00000192 => "\x9f",
      0x00000393 => "\xe2",
      0x000003a3 => "\xe4",
      0x000003a6 => "\xe8",
      0x000003a9 => "\xea",
      0x000003b1 => "\xe0",
      0x000003b2 => "\xe1",
      0x000003b4 => "\xeb",
      0x000003b8 => "\xe9",
      0x000003c0 => "\xe3",
      0x000003c3 => "\xe5",
      0x000003c4 => "\xe7",
      0x000003c6 => "\xed",
      0x000005d0 => "\xc2",
      0x000005d1 => "\xc3",
      0x000005d2 => "\xc4",
      0x000005d3 => "\xc5",
      0x000005d4 => "\xc6",
      0x000005d5 => "\xc7",
      0x000005d6 => "\xc8",
      0x000005d7 => "\xc9",
      0x000005d8 => "\xca",
      0x000005d9 => "\xcb",
      0x000005da => "\xd9",
      0x000005db => "\xcc",
      0x000005dc => "\xcd",
      0x000005dd => "\xda",
      0x000005de => "\xce",
      0x000005df => "\xd8",
      0x000005e0 => "\xcf",
      0x000005e1 => "\xd0",
      0x000005e2 => "\xd1",
      0x000005e3 => "\xdb",
      0x000005e4 => "\xd2",
      0x000005e5 => "\xdc",
      0x000005e6 => "\xd3",
      0x000005e7 => "\xd4",
      0x000005e8 => "\xd5",
      0x000005e9 => "\xd6",
      0x000005ea => "\xd7",
      0x00002020 => "\xbb",
      0x00002022 => "\xf9",
      0x00002038 => "\xde",
      0x0000207f => "\xfc",
      0x00002122 => "\xbf",
      0x00002208 => "\xee",
      0x0000220f => "\xef",
      0x0000221a => "\xfb",
      0x0000221e => "\xdf",
      0x0000222e => "\xec",
      0x00002248 => "\xf7",
      0x00002261 => "\xf0",
      0x00002264 => "\xf3",
      0x00002265 => "\xf2",
      0x00002310 => "\xa9",
      0x00002320 => "\xf4",
      0x00002321 => "\xf5",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ATARI_ST - Conversion routines for ATARI-ST
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ATARI-ST.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.1
    source: Guido Flohr E<lt>guido.flohr@cantanea.comE<gt>
   alias ATARIST
   alias X-ATARIST
   alias X-ATARI-ST
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE
      80 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      81 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      82 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      83 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      84 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      85 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      86 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      87 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      88 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      89 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      8A |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      8B |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      8C |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      8D |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      8E |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      8F |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      90 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      91 |  000000E6 | LATIN SMALL LETTER AE
      92 |  000000C6 | LATIN CAPITAL LETTER AE
      93 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      94 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      95 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      96 |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      97 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      98 |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      99 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      9A |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      9B |  000000A2 | CENT SIGN
      9C |  000000A3 | POUND SIGN
      9D |  000000A5 | YEN SIGN
      9E |  000000DF | LATIN SMALL LETTER SHARP S
      9F |  00000192 | LATIN SMALL LETTER F WITH HOOK
      A0 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      A1 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      A2 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      A3 |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      A4 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      A5 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      A6 |  000000AA | FEMININE ORDINAL INDICATOR
      A7 |  000000BA | MASCULINE ORDINAL INDICATOR
      A8 |  000000BF | INVERTED QUESTION MARK
      A9 |  00002310 | REVERSED NOT SIGN
      AA |  000000AC | NOT SIGN
      AB |  000000BD | VULGAR FRACTION ONE HALF
      AC |  000000BC | VULGAR FRACTION ONE QUARTER
      AD |  000000A1 | INVERTED EXCLAMATION MARK
      AE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AF |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      B0 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      B1 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      B2 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      B3 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      B4 |  00000153 | LATIN SMALL LIGATURE OE
      B5 |  00000152 | LATIN CAPITAL LIGATURE OE
      B6 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      B7 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      B8 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      B9 |  000000A8 | DIAERESIS
      BA |  000000B4 | ACUTE ACCENT
      BB |  00002020 | DAGGER
      BC |  000000B6 | PILCROW SIGN
      BD |  000000A9 | COPYRIGHT SIGN
      BE |  000000AE | REGISTERED SIGN
      BF |  00002122 | TRADE MARK SIGN
      C0 |  00000133 | LATIN SMALL LIGATURE IJ
      C1 |  00000132 | LATIN CAPITAL LIGATURE IJ
      C2 |  000005D0 | HEBREW LETTER ALEF
      C3 |  000005D1 | HEBREW LETTER BET
      C4 |  000005D2 | HEBREW LETTER GIMEL
      C5 |  000005D3 | HEBREW LETTER DALET
      C6 |  000005D4 | HEBREW LETTER HE
      C7 |  000005D5 | HEBREW LETTER VAV
      C8 |  000005D6 | HEBREW LETTER ZAYIN
      C9 |  000005D7 | HEBREW LETTER HET
      CA |  000005D8 | HEBREW LETTER TET
      CB |  000005D9 | HEBREW LETTER YOD
      CC |  000005DB | HEBREW LETTER KAF
      CD |  000005DC | HEBREW LETTER LAMED
      CE |  000005DE | HEBREW LETTER MEM
      CF |  000005E0 | HEBREW LETTER NUN
      D0 |  000005E1 | HEBREW LETTER SAMEKH
      D1 |  000005E2 | HEBREW LETTER AYIN
      D2 |  000005E4 | HEBREW LETTER PE
      D3 |  000005E6 | HEBREW LETTER TSADI
      D4 |  000005E7 | HEBREW LETTER QOF
      D5 |  000005E8 | HEBREW LETTER RESH
      D6 |  000005E9 | HEBREW LETTER SHIN
      D7 |  000005EA | HEBREW LETTER TAV
      D8 |  000005DF | HEBREW LETTER FINAL NUN
      D9 |  000005DA | HEBREW LETTER FINAL KAF
      DA |  000005DD | HEBREW LETTER FINAL MEM
      DB |  000005E3 | HEBREW LETTER FINAL PE
      DC |  000005E5 | HEBREW LETTER FINAL TSADI
      DD |  000000A7 | SECTION SIGN
      DE |  00002038 | CARET
      DF |  0000221E | INFINITY
      E0 |  000003B1 | GREEK SMALL LETTER ALPHA
      E1 |  000003B2 | GREEK SMALL LETTER BETA
      E2 |  00000393 | GREEK CAPITAL LETTER GAMMA
      E3 |  000003C0 | GREEK SMALL LETTER PI
      E4 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      E5 |  000003C3 | GREEK SMALL LETTER SIGMA
      E6 |  000000B5 | MICRO SIGN
      E7 |  000003C4 | GREEK SMALL LETTER TAU
      E8 |  000003A6 | GREEK CAPITAL LETTER PHI
      E9 |  000003B8 | GREEK SMALL LETTER THETA
      EA |  000003A9 | GREEK CAPITAL LETTER OMEGA
      EB |  000003B4 | GREEK SMALL LETTER DELTA
      EC |  0000222E | CONTOUR INTEGRAL
      ED |  000003C6 | GREEK SMALL LETTER PHI
      EE |  00002208 | ELEMENT OF
      EF |  0000220F | N-ARY PRODUCT
      F0 |  00002261 | IDENTICAL TO
      F1 |  000000B1 | PLUS-MINUS SIGN
      F2 |  00002265 | GREATER-THAN OR EQUAL TO
      F3 |  00002264 | LESS-THAN OR EQUAL TO
      F4 |  00002320 | TOP HALF INTEGRAL
      F5 |  00002321 | BOTTOM HALF INTEGRAL
      F6 |  000000F7 | DIVISION SIGN
      F7 |  00002248 | ALMOST EQUAL TO
      F8 |  000000B0 | DEGREE SIGN
      F9 |  00002022 | BULLET
      FA |  000000B7 | MIDDLE DOT
      FB |  0000221A | SQUARE ROOT
      FC |  0000207F | SUPERSCRIPT LATIN SMALL LETTER N
      FD |  000000B2 | SUPERSCRIPT TWO
      FE |  000000B3 | SUPERSCRIPT THREE
      FF |  000000AF | MACRON
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ATARI_ST

    $main::fatpacked{"Locale/RecodeData/ATARI_ST_EURO.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ATARI_ST_EURO';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ATARI-ST-EURO.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ATARI_ST_EURO;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c7,
      0x00fc,
      0x00e9,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e5,
      0x00e7,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ef,
      0x00ee,
      0x00ec,
      0x00c4,
      0x00c5,
      0x00c9,
      0x00e6,
      0x00c6,
      0x00f4,
      0x00f6,
      0x00f2,
      0x00fb,
      0x00f9,
      0x00ff,
      0x00d6,
      0x00dc,
      0x00a2,
      0x00a3,
      0x00a5,
      0x00df,
      0x0192,
      0x00e1,
      0x00ed,
      0x00f3,
      0x00fa,
      0x00f1,
      0x00d1,
      0x00aa,
      0x00ba,
      0x00bf,
      0x2310,
      0x00ac,
      0x00bd,
      0x00bc,
      0x00a1,
      0x00ab,
      0x00bb,
      0x00e3,
      0x00f5,
      0x00d8,
      0x00f8,
      0x0153,
      0x0152,
      0x00c0,
      0x00c3,
      0x00d5,
      0x00a8,
      0x00b4,
      0x2020,
      0x00b6,
      0x00a9,
      0x00ae,
      0x2122,
      0x0133,
      0x0132,
      0x05d0,
      0x05d1,
      0x05d2,
      0x05d3,
      0x05d4,
      0x05d5,
      0x05d6,
      0x05d7,
      0x05d8,
      0x05d9,
      0x05db,
      0x05dc,
      0x05de,
      0x05e0,
      0x05e1,
      0x05e2,
      0x05e4,
      0x05e6,
      0x05e7,
      0x05e8,
      0x05e9,
      0x05ea,
      0x05df,
      0x05da,
      0x05dd,
      0x05e3,
      0x05e5,
      0x00a7,
      0x20ac,
      0x221e,
      0x03b1,
      0x03b2,
      0x0393,
      0x03c0,
      0x03a3,
      0x03c3,
      0x00b5,
      0x03c4,
      0x03a6,
      0x03b8,
      0x03a9,
      0x03b4,
      0x222e,
      0x03c6,
      0x2208,
      0x220f,
      0x2261,
      0x00b1,
      0x2265,
      0x2264,
      0x2320,
      0x2321,
      0x00f7,
      0x2248,
      0x00b0,
      0x2022,
      0x00b7,
      0x221a,
      0x207f,
      0x00b2,
      0x00b3,
      0x00af,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x87",
      "\xc3\xbc",
      "\xc3\xa9",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xaf",
      "\xc3\xae",
      "\xc3\xac",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x89",
      "\xc3\xa6",
      "\xc3\x86",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb2",
      "\xc3\xbb",
      "\xc3\xb9",
      "\xc3\xbf",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xc3\x9f",
      "\xc6\x92",
      "\xc3\xa1",
      "\xc3\xad",
      "\xc3\xb3",
      "\xc3\xba",
      "\xc3\xb1",
      "\xc3\x91",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc2\xbf",
      "\xe2\x8c\x90",
      "\xc2\xac",
      "\xc2\xbd",
      "\xc2\xbc",
      "\xc2\xa1",
      "\xc2\xab",
      "\xc2\xbb",
      "\xc3\xa3",
      "\xc3\xb5",
      "\xc3\x98",
      "\xc3\xb8",
      "\xc5\x93",
      "\xc5\x92",
      "\xc3\x80",
      "\xc3\x83",
      "\xc3\x95",
      "\xc2\xa8",
      "\xc2\xb4",
      "\xe2\x80\xa0",
      "\xc2\xb6",
      "\xc2\xa9",
      "\xc2\xae",
      "\xe2\x84\xa2",
      "\xc4\xb3",
      "\xc4\xb2",
      "\xd7\x90",
      "\xd7\x91",
      "\xd7\x92",
      "\xd7\x93",
      "\xd7\x94",
      "\xd7\x95",
      "\xd7\x96",
      "\xd7\x97",
      "\xd7\x98",
      "\xd7\x99",
      "\xd7\x9b",
      "\xd7\x9c",
      "\xd7\x9e",
      "\xd7\xa0",
      "\xd7\xa1",
      "\xd7\xa2",
      "\xd7\xa4",
      "\xd7\xa6",
      "\xd7\xa7",
      "\xd7\xa8",
      "\xd7\xa9",
      "\xd7\xaa",
      "\xd7\x9f",
      "\xd7\x9a",
      "\xd7\x9d",
      "\xd7\xa3",
      "\xd7\xa5",
      "\xc2\xa7",
      "\xe2\x82\xac",
      "\xe2\x88\x9e",
      "\xce\xb1",
      "\xce\xb2",
      "\xce\x93",
      "\xcf\x80",
      "\xce\xa3",
      "\xcf\x83",
      "\xc2\xb5",
      "\xcf\x84",
      "\xce\xa6",
      "\xce\xb8",
      "\xce\xa9",
      "\xce\xb4",
      "\xe2\x88\xae",
      "\xcf\x86",
      "\xe2\x88\x88",
      "\xe2\x88\x8f",
      "\xe2\x89\xa1",
      "\xc2\xb1",
      "\xe2\x89\xa5",
      "\xe2\x89\xa4",
      "\xe2\x8c\xa0",
      "\xe2\x8c\xa1",
      "\xc3\xb7",
      "\xe2\x89\x88",
      "\xc2\xb0",
      "\xe2\x80\xa2",
      "\xc2\xb7",
      "\xe2\x88\x9a",
      "\xe2\x81\xbf",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xc2\xaf",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a1 => "\xad",
      0x000000a2 => "\x9b",
      0x000000a3 => "\x9c",
      0x000000a5 => "\x9d",
      0x000000a7 => "\xdd",
      0x000000a8 => "\xb9",
      0x000000a9 => "\xbd",
      0x000000aa => "\xa6",
      0x000000ab => "\xae",
      0x000000ac => "\xaa",
      0x000000ae => "\xbe",
      0x000000af => "\xff",
      0x000000b0 => "\xf8",
      0x000000b1 => "\xf1",
      0x000000b2 => "\xfd",
      0x000000b3 => "\xfe",
      0x000000b4 => "\xba",
      0x000000b5 => "\xe6",
      0x000000b6 => "\xbc",
      0x000000b7 => "\xfa",
      0x000000ba => "\xa7",
      0x000000bb => "\xaf",
      0x000000bc => "\xac",
      0x000000bd => "\xab",
      0x000000bf => "\xa8",
      0x000000c0 => "\xb6",
      0x000000c3 => "\xb7",
      0x000000c4 => "\x8e",
      0x000000c5 => "\x8f",
      0x000000c6 => "\x92",
      0x000000c7 => "\x80",
      0x000000c9 => "\x90",
      0x000000d1 => "\xa5",
      0x000000d5 => "\xb8",
      0x000000d6 => "\x99",
      0x000000d8 => "\xb2",
      0x000000dc => "\x9a",
      0x000000df => "\x9e",
      0x000000e0 => "\x85",
      0x000000e1 => "\xa0",
      0x000000e2 => "\x83",
      0x000000e3 => "\xb0",
      0x000000e4 => "\x84",
      0x000000e5 => "\x86",
      0x000000e6 => "\x91",
      0x000000e7 => "\x87",
      0x000000e8 => "\x8a",
      0x000000e9 => "\x82",
      0x000000ea => "\x88",
      0x000000eb => "\x89",
      0x000000ec => "\x8d",
      0x000000ed => "\xa1",
      0x000000ee => "\x8c",
      0x000000ef => "\x8b",
      0x000000f1 => "\xa4",
      0x000000f2 => "\x95",
      0x000000f3 => "\xa2",
      0x000000f4 => "\x93",
      0x000000f5 => "\xb1",
      0x000000f6 => "\x94",
      0x000000f7 => "\xf6",
      0x000000f8 => "\xb3",
      0x000000f9 => "\x97",
      0x000000fa => "\xa3",
      0x000000fb => "\x96",
      0x000000fc => "\x81",
      0x000000ff => "\x98",
      0x00000132 => "\xc1",
      0x00000133 => "\xc0",
      0x00000152 => "\xb5",
      0x00000153 => "\xb4",
      0x00000192 => "\x9f",
      0x00000393 => "\xe2",
      0x000003a3 => "\xe4",
      0x000003a6 => "\xe8",
      0x000003a9 => "\xea",
      0x000003b1 => "\xe0",
      0x000003b2 => "\xe1",
      0x000003b4 => "\xeb",
      0x000003b8 => "\xe9",
      0x000003c0 => "\xe3",
      0x000003c3 => "\xe5",
      0x000003c4 => "\xe7",
      0x000003c6 => "\xed",
      0x000005d0 => "\xc2",
      0x000005d1 => "\xc3",
      0x000005d2 => "\xc4",
      0x000005d3 => "\xc5",
      0x000005d4 => "\xc6",
      0x000005d5 => "\xc7",
      0x000005d6 => "\xc8",
      0x000005d7 => "\xc9",
      0x000005d8 => "\xca",
      0x000005d9 => "\xcb",
      0x000005da => "\xd9",
      0x000005db => "\xcc",
      0x000005dc => "\xcd",
      0x000005dd => "\xda",
      0x000005de => "\xce",
      0x000005df => "\xd8",
      0x000005e0 => "\xcf",
      0x000005e1 => "\xd0",
      0x000005e2 => "\xd1",
      0x000005e3 => "\xdb",
      0x000005e4 => "\xd2",
      0x000005e5 => "\xdc",
      0x000005e6 => "\xd3",
      0x000005e7 => "\xd4",
      0x000005e8 => "\xd5",
      0x000005e9 => "\xd6",
      0x000005ea => "\xd7",
      0x00002020 => "\xbb",
      0x00002022 => "\xf9",
      0x0000207f => "\xfc",
      0x000020ac => "\xde",
      0x00002122 => "\xbf",
      0x00002208 => "\xee",
      0x0000220f => "\xef",
      0x0000221a => "\xfb",
      0x0000221e => "\xdf",
      0x0000222e => "\xec",
      0x00002248 => "\xf7",
      0x00002261 => "\xf0",
      0x00002264 => "\xf3",
      0x00002265 => "\xf2",
      0x00002310 => "\xa9",
      0x00002320 => "\xf4",
      0x00002321 => "\xf5",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ATARI_ST_EURO - Conversion routines for ATARI-ST-EURO
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ATARI-ST-EURO.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.1
    source: Guido Flohr E<lt>guido.flohr@cantanea.comE<gt>
   alias ATARIST-EURO
   alias X-ATARIST-EURO
   alias X-ATARI-ST-EURO
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE
      80 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      81 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      82 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      83 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      84 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      85 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      86 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      87 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      88 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      89 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      8A |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      8B |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      8C |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      8D |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      8E |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      8F |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      90 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      91 |  000000E6 | LATIN SMALL LETTER AE
      92 |  000000C6 | LATIN CAPITAL LETTER AE
      93 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      94 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      95 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      96 |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      97 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      98 |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      99 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      9A |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      9B |  000000A2 | CENT SIGN
      9C |  000000A3 | POUND SIGN
      9D |  000000A5 | YEN SIGN
      9E |  000000DF | LATIN SMALL LETTER SHARP S
      9F |  00000192 | LATIN SMALL LETTER F WITH HOOK
      A0 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      A1 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      A2 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      A3 |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      A4 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      A5 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      A6 |  000000AA | FEMININE ORDINAL INDICATOR
      A7 |  000000BA | MASCULINE ORDINAL INDICATOR
      A8 |  000000BF | INVERTED QUESTION MARK
      A9 |  00002310 | REVERSED NOT SIGN
      AA |  000000AC | NOT SIGN
      AB |  000000BD | VULGAR FRACTION ONE HALF
      AC |  000000BC | VULGAR FRACTION ONE QUARTER
      AD |  000000A1 | INVERTED EXCLAMATION MARK
      AE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AF |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      B0 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      B1 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      B2 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      B3 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      B4 |  00000153 | LATIN SMALL LIGATURE OE
      B5 |  00000152 | LATIN CAPITAL LIGATURE OE
      B6 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      B7 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      B8 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      B9 |  000000A8 | DIAERESIS
      BA |  000000B4 | ACUTE ACCENT
      BB |  00002020 | DAGGER
      BC |  000000B6 | PILCROW SIGN
      BD |  000000A9 | COPYRIGHT SIGN
      BE |  000000AE | REGISTERED SIGN
      BF |  00002122 | TRADE MARK SIGN
      C0 |  00000133 | LATIN SMALL LIGATURE IJ
      C1 |  00000132 | LATIN CAPITAL LIGATURE IJ
      C2 |  000005D0 | HEBREW LETTER ALEF
      C3 |  000005D1 | HEBREW LETTER BET
      C4 |  000005D2 | HEBREW LETTER GIMEL
      C5 |  000005D3 | HEBREW LETTER DALET
      C6 |  000005D4 | HEBREW LETTER HE
      C7 |  000005D5 | HEBREW LETTER VAV
      C8 |  000005D6 | HEBREW LETTER ZAYIN
      C9 |  000005D7 | HEBREW LETTER HET
      CA |  000005D8 | HEBREW LETTER TET
      CB |  000005D9 | HEBREW LETTER YOD
      CC |  000005DB | HEBREW LETTER KAF
      CD |  000005DC | HEBREW LETTER LAMED
      CE |  000005DE | HEBREW LETTER MEM
      CF |  000005E0 | HEBREW LETTER NUN
      D0 |  000005E1 | HEBREW LETTER SAMEKH
      D1 |  000005E2 | HEBREW LETTER AYIN
      D2 |  000005E4 | HEBREW LETTER PE
      D3 |  000005E6 | HEBREW LETTER TSADI
      D4 |  000005E7 | HEBREW LETTER QOF
      D5 |  000005E8 | HEBREW LETTER RESH
      D6 |  000005E9 | HEBREW LETTER SHIN
      D7 |  000005EA | HEBREW LETTER TAV
      D8 |  000005DF | HEBREW LETTER FINAL NUN
      D9 |  000005DA | HEBREW LETTER FINAL KAF
      DA |  000005DD | HEBREW LETTER FINAL MEM
      DB |  000005E3 | HEBREW LETTER FINAL PE
      DC |  000005E5 | HEBREW LETTER FINAL TSADI
      DD |  000000A7 | SECTION SIGN
      DE |  000020AC | EURO SIGN
      DF |  0000221E | INFINITY
      E0 |  000003B1 | GREEK SMALL LETTER ALPHA
      E1 |  000003B2 | GREEK SMALL LETTER BETA
      E2 |  00000393 | GREEK CAPITAL LETTER GAMMA
      E3 |  000003C0 | GREEK SMALL LETTER PI
      E4 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      E5 |  000003C3 | GREEK SMALL LETTER SIGMA
      E6 |  000000B5 | MICRO SIGN
      E7 |  000003C4 | GREEK SMALL LETTER TAU
      E8 |  000003A6 | GREEK CAPITAL LETTER PHI
      E9 |  000003B8 | GREEK SMALL LETTER THETA
      EA |  000003A9 | GREEK CAPITAL LETTER OMEGA
      EB |  000003B4 | GREEK SMALL LETTER DELTA
      EC |  0000222E | CONTOUR INTEGRAL
      ED |  000003C6 | GREEK SMALL LETTER PHI
      EE |  00002208 | ELEMENT OF
      EF |  0000220F | N-ARY PRODUCT
      F0 |  00002261 | IDENTICAL TO
      F1 |  000000B1 | PLUS-MINUS SIGN
      F2 |  00002265 | GREATER-THAN OR EQUAL TO
      F3 |  00002264 | LESS-THAN OR EQUAL TO
      F4 |  00002320 | TOP HALF INTEGRAL
      F5 |  00002321 | BOTTOM HALF INTEGRAL
      F6 |  000000F7 | DIVISION SIGN
      F7 |  00002248 | ALMOST EQUAL TO
      F8 |  000000B0 | DEGREE SIGN
      F9 |  00002022 | BULLET
      FA |  000000B7 | MIDDLE DOT
      FB |  0000221A | SQUARE ROOT
      FC |  0000207F | SUPERSCRIPT LATIN SMALL LETTER N
      FD |  000000B2 | SUPERSCRIPT TWO
      FE |  000000B3 | SUPERSCRIPT THREE
      FF |  000000AF | MACRON
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ATARI_ST_EURO

    $main::fatpacked{"Locale/RecodeData/CP10007.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_CP10007';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for CP10007.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::CP10007;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0410,
      0x0411,
      0x0412,
      0x0413,
      0x0414,
      0x0415,
      0x0416,
      0x0417,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0x041d,
      0x041e,
      0x041f,
      0x0420,
      0x0421,
      0x0422,
      0x0423,
      0x0424,
      0x0425,
      0x0426,
      0x0427,
      0x0428,
      0x0429,
      0x042a,
      0x042b,
      0x042c,
      0x042d,
      0x042e,
      0x042f,
      0x2020,
      0x00b0,
      0x00a2,
      0x00a3,
      0x00a7,
      0x2022,
      0x00b6,
      0x0406,
      0x00ae,
      0x00a9,
      0x2122,
      0x0402,
      0x0452,
      0x2260,
      0x0403,
      0x0453,
      0x221e,
      0x00b1,
      0x2264,
      0x2265,
      0x0456,
      0x00b5,
      0x0491,
      0x0408,
      0x0404,
      0x0454,
      0x0407,
      0x0457,
      0x0409,
      0x0459,
      0x040a,
      0x045a,
      0x0458,
      0x0405,
      0x00ac,
      0x221a,
      0x0192,
      0x2248,
      0x2206,
      0x00ab,
      0x00bb,
      0x2026,
      0x00a0,
      0x040b,
      0x045b,
      0x040c,
      0x045c,
      0x0455,
      0x2013,
      0x2014,
      0x201c,
      0x201d,
      0x2018,
      0x2019,
      0x00f7,
      0x201e,
      0x040e,
      0x045e,
      0x040f,
      0x045f,
      0x2116,
      0x0401,
      0x0451,
      0x044f,
      0x0430,
      0x0431,
      0x0432,
      0x0433,
      0x0434,
      0x0435,
      0x0436,
      0x0437,
      0x0438,
      0x0439,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0444,
      0x0445,
      0x0446,
      0x0447,
      0x0448,
      0x0449,
      0x044a,
      0x044b,
      0x044c,
      0x044d,
      0x044e,
      0x00a4,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\x92",
      "\xd0\x93",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\x96",
      "\xd0\x97",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xa0",
      "\xd0\xa1",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\xa4",
      "\xd0\xa5",
      "\xd0\xa6",
      "\xd0\xa7",
      "\xd0\xa8",
      "\xd0\xa9",
      "\xd0\xaa",
      "\xd0\xab",
      "\xd0\xac",
      "\xd0\xad",
      "\xd0\xae",
      "\xd0\xaf",
      "\xe2\x80\xa0",
      "\xc2\xb0",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa7",
      "\xe2\x80\xa2",
      "\xc2\xb6",
      "\xd0\x86",
      "\xc2\xae",
      "\xc2\xa9",
      "\xe2\x84\xa2",
      "\xd0\x82",
      "\xd1\x92",
      "\xe2\x89\xa0",
      "\xd0\x83",
      "\xd1\x93",
      "\xe2\x88\x9e",
      "\xc2\xb1",
      "\xe2\x89\xa4",
      "\xe2\x89\xa5",
      "\xd1\x96",
      "\xc2\xb5",
      "\xd2\x91",
      "\xd0\x88",
      "\xd0\x84",
      "\xd1\x94",
      "\xd0\x87",
      "\xd1\x97",
      "\xd0\x89",
      "\xd1\x99",
      "\xd0\x8a",
      "\xd1\x9a",
      "\xd1\x98",
      "\xd0\x85",
      "\xc2\xac",
      "\xe2\x88\x9a",
      "\xc6\x92",
      "\xe2\x89\x88",
      "\xe2\x88\x86",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x80\xa6",
      "\xc2\xa0",
      "\xd0\x8b",
      "\xd1\x9b",
      "\xd0\x8c",
      "\xd1\x9c",
      "\xd1\x95",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xc3\xb7",
      "\xe2\x80\x9e",
      "\xd0\x8e",
      "\xd1\x9e",
      "\xd0\x8f",
      "\xd1\x9f",
      "\xe2\x84\x96",
      "\xd0\x81",
      "\xd1\x91",
      "\xd1\x8f",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xd0\xb2",
      "\xd0\xb3",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd0\xb6",
      "\xd0\xb7",
      "\xd0\xb8",
      "\xd0\xb9",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd1\x84",
      "\xd1\x85",
      "\xd1\x86",
      "\xd1\x87",
      "\xd1\x88",
      "\xd1\x89",
      "\xd1\x8a",
      "\xd1\x8b",
      "\xd1\x8c",
      "\xd1\x8d",
      "\xd1\x8e",
      "\xc2\xa4",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xca",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xff",
      0x000000a7 => "\xa4",
      0x000000a9 => "\xa9",
      0x000000ab => "\xc7",
      0x000000ac => "\xc2",
      0x000000ae => "\xa8",
      0x000000b0 => "\xa1",
      0x000000b1 => "\xb1",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xa6",
      0x000000bb => "\xc8",
      0x000000f7 => "\xd6",
      0x00000192 => "\xc4",
      0x00000401 => "\xdd",
      0x00000402 => "\xab",
      0x00000403 => "\xae",
      0x00000404 => "\xb8",
      0x00000405 => "\xc1",
      0x00000406 => "\xa7",
      0x00000407 => "\xba",
      0x00000408 => "\xb7",
      0x00000409 => "\xbc",
      0x0000040a => "\xbe",
      0x0000040b => "\xcb",
      0x0000040c => "\xcd",
      0x0000040e => "\xd8",
      0x0000040f => "\xda",
      0x00000410 => "\x80",
      0x00000411 => "\x81",
      0x00000412 => "\x82",
      0x00000413 => "\x83",
      0x00000414 => "\x84",
      0x00000415 => "\x85",
      0x00000416 => "\x86",
      0x00000417 => "\x87",
      0x00000418 => "\x88",
      0x00000419 => "\x89",
      0x0000041a => "\x8a",
      0x0000041b => "\x8b",
      0x0000041c => "\x8c",
      0x0000041d => "\x8d",
      0x0000041e => "\x8e",
      0x0000041f => "\x8f",
      0x00000420 => "\x90",
      0x00000421 => "\x91",
      0x00000422 => "\x92",
      0x00000423 => "\x93",
      0x00000424 => "\x94",
      0x00000425 => "\x95",
      0x00000426 => "\x96",
      0x00000427 => "\x97",
      0x00000428 => "\x98",
      0x00000429 => "\x99",
      0x0000042a => "\x9a",
      0x0000042b => "\x9b",
      0x0000042c => "\x9c",
      0x0000042d => "\x9d",
      0x0000042e => "\x9e",
      0x0000042f => "\x9f",
      0x00000430 => "\xe0",
      0x00000431 => "\xe1",
      0x00000432 => "\xe2",
      0x00000433 => "\xe3",
      0x00000434 => "\xe4",
      0x00000435 => "\xe5",
      0x00000436 => "\xe6",
      0x00000437 => "\xe7",
      0x00000438 => "\xe8",
      0x00000439 => "\xe9",
      0x0000043a => "\xea",
      0x0000043b => "\xeb",
      0x0000043c => "\xec",
      0x0000043d => "\xed",
      0x0000043e => "\xee",
      0x0000043f => "\xef",
      0x00000440 => "\xf0",
      0x00000441 => "\xf1",
      0x00000442 => "\xf2",
      0x00000443 => "\xf3",
      0x00000444 => "\xf4",
      0x00000445 => "\xf5",
      0x00000446 => "\xf6",
      0x00000447 => "\xf7",
      0x00000448 => "\xf8",
      0x00000449 => "\xf9",
      0x0000044a => "\xfa",
      0x0000044b => "\xfb",
      0x0000044c => "\xfc",
      0x0000044d => "\xfd",
      0x0000044e => "\xfe",
      0x0000044f => "\xdf",
      0x00000451 => "\xde",
      0x00000452 => "\xac",
      0x00000453 => "\xaf",
      0x00000454 => "\xb9",
      0x00000455 => "\xcf",
      0x00000456 => "\xb4",
      0x00000457 => "\xbb",
      0x00000458 => "\xc0",
      0x00000459 => "\xbd",
      0x0000045a => "\xbf",
      0x0000045b => "\xcc",
      0x0000045c => "\xce",
      0x0000045e => "\xd9",
      0x0000045f => "\xdb",
      0x00000491 => "\xb6",
      0x00002013 => "\xd0",
      0x00002014 => "\xd1",
      0x00002018 => "\xd4",
      0x00002019 => "\xd5",
      0x0000201c => "\xd2",
      0x0000201d => "\xd3",
      0x0000201e => "\xd7",
      0x00002020 => "\xa0",
      0x00002022 => "\xa5",
      0x00002026 => "\xc9",
      0x00002116 => "\xdc",
      0x00002122 => "\xaa",
      0x00002206 => "\xc6",
      0x0000221a => "\xc3",
      0x0000221e => "\xb0",
      0x00002248 => "\xc5",
      0x00002260 => "\xad",
      0x00002264 => "\xb2",
      0x00002265 => "\xb3",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::CP10007 - Conversion routines for CP10007
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for CP10007.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   This is the old MacCyrillic which M$ keeps around as CP10007.
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL
      01 |  00000001 | START OF HEADING
      02 |  00000002 | START OF TEXT
      03 |  00000003 | END OF TEXT
      04 |  00000004 | END OF TRANSMISSION
      05 |  00000005 | ENQUIRY
      06 |  00000006 | ACKNOWLEDGE
      07 |  00000007 | BELL
      08 |  00000008 | BACKSPACE
      09 |  00000009 | HORIZONTAL TABULATION
      0A |  0000000A | LINE FEED
      0B |  0000000B | VERTICAL TABULATION
      0C |  0000000C | FORM FEED
      0D |  0000000D | CARRIAGE RETURN
      0E |  0000000E | SHIFT OUT
      0F |  0000000F | SHIFT IN
      10 |  00000010 | DATA LINK ESCAPE
      11 |  00000011 | DEVICE CONTROL ONE
      12 |  00000012 | DEVICE CONTROL TWO
      13 |  00000013 | DEVICE CONTROL THREE
      14 |  00000014 | DEVICE CONTROL FOUR
      15 |  00000015 | NEGATIVE ACKNOWLEDGE
      16 |  00000016 | SYNCHRONOUS IDLE
      17 |  00000017 | END OF TRANSMISSION BLOCK
      18 |  00000018 | CANCEL
      19 |  00000019 | END OF MEDIUM
      1A |  0000001A | SUBSTITUTE
      1B |  0000001B | ESCAPE
      1C |  0000001C | FILE SEPARATOR
      1D |  0000001D | GROUP SEPARATOR
      1E |  0000001E | RECORD SEPARATOR
      1F |  0000001F | UNIT SEPARATOR
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE
      80 |  00000410 | CYRILLIC CAPITAL LETTER A
      81 |  00000411 | CYRILLIC CAPITAL LETTER BE
      82 |  00000412 | CYRILLIC CAPITAL LETTER VE
      83 |  00000413 | CYRILLIC CAPITAL LETTER GHE
      84 |  00000414 | CYRILLIC CAPITAL LETTER DE
      85 |  00000415 | CYRILLIC CAPITAL LETTER IE
      86 |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      87 |  00000417 | CYRILLIC CAPITAL LETTER ZE
      88 |  00000418 | CYRILLIC CAPITAL LETTER I
      89 |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      8A |  0000041A | CYRILLIC CAPITAL LETTER KA
      8B |  0000041B | CYRILLIC CAPITAL LETTER EL
      8C |  0000041C | CYRILLIC CAPITAL LETTER EM
      8D |  0000041D | CYRILLIC CAPITAL LETTER EN
      8E |  0000041E | CYRILLIC CAPITAL LETTER O
      8F |  0000041F | CYRILLIC CAPITAL LETTER PE
      90 |  00000420 | CYRILLIC CAPITAL LETTER ER
      91 |  00000421 | CYRILLIC CAPITAL LETTER ES
      92 |  00000422 | CYRILLIC CAPITAL LETTER TE
      93 |  00000423 | CYRILLIC CAPITAL LETTER U
      94 |  00000424 | CYRILLIC CAPITAL LETTER EF
      95 |  00000425 | CYRILLIC CAPITAL LETTER HA
      96 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      97 |  00000427 | CYRILLIC CAPITAL LETTER CHE
      98 |  00000428 | CYRILLIC CAPITAL LETTER SHA
      99 |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      9A |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
      9B |  0000042B | CYRILLIC CAPITAL LETTER YERU
      9C |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      9D |  0000042D | CYRILLIC CAPITAL LETTER E
      9E |  0000042E | CYRILLIC CAPITAL LETTER YU
      9F |  0000042F | CYRILLIC CAPITAL LETTER YA
      A0 |  00002020 | DAGGER
      A1 |  000000B0 | DEGREE SIGN
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A7 | SECTION SIGN
      A5 |  00002022 | BULLET
      A6 |  000000B6 | PILCROW SIGN
      A7 |  00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
      A8 |  000000AE | REGISTERED SIGN
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  00002122 | TRADE MARK SIGN
      AB |  00000402 | CYRILLIC CAPITAL LETTER DJE
      AC |  00000452 | CYRILLIC SMALL LETTER DJE
      AD |  00002260 | NOT EQUAL TO
      AE |  00000403 | CYRILLIC CAPITAL LETTER GJE
      AF |  00000453 | CYRILLIC SMALL LETTER GJE
      B0 |  0000221E | INFINITY
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  00002264 | LESS-THAN OR EQUAL TO
      B3 |  00002265 | GREATER-THAN OR EQUAL TO
      B4 |  00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
      B5 |  000000B5 | MICRO SIGN
      B6 |  00000491 | CYRILLIC SMALL LETTER GHE WITH UPTURN
      B7 |  00000408 | CYRILLIC CAPITAL LETTER JE
      B8 |  00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE
      B9 |  00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE
      BA |  00000407 | CYRILLIC CAPITAL LETTER YI
      BB |  00000457 | CYRILLIC SMALL LETTER YI
      BC |  00000409 | CYRILLIC CAPITAL LETTER LJE
      BD |  00000459 | CYRILLIC SMALL LETTER LJE
      BE |  0000040A | CYRILLIC CAPITAL LETTER NJE
      BF |  0000045A | CYRILLIC SMALL LETTER NJE
      C0 |  00000458 | CYRILLIC SMALL LETTER JE
      C1 |  00000405 | CYRILLIC CAPITAL LETTER DZE
      C2 |  000000AC | NOT SIGN
      C3 |  0000221A | SQUARE ROOT
      C4 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      C5 |  00002248 | ALMOST EQUAL TO
      C6 |  00002206 | INCREMENT
      C7 |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      C8 |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      C9 |  00002026 | HORIZONTAL ELLIPSIS
      CA |  000000A0 | NO-BREAK SPACE
      CB |  0000040B | CYRILLIC CAPITAL LETTER TSHE
      CC |  0000045B | CYRILLIC SMALL LETTER TSHE
      CD |  0000040C | CYRILLIC CAPITAL LETTER KJE
      CE |  0000045C | CYRILLIC SMALL LETTER KJE
      CF |  00000455 | CYRILLIC SMALL LETTER DZE
      D0 |  00002013 | EN DASH
      D1 |  00002014 | EM DASH
      D2 |  0000201C | LEFT DOUBLE QUOTATION MARK
      D3 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      D4 |  00002018 | LEFT SINGLE QUOTATION MARK
      D5 |  00002019 | RIGHT SINGLE QUOTATION MARK
      D6 |  000000F7 | DIVISION SIGN
      D7 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      D8 |  0000040E | CYRILLIC CAPITAL LETTER SHORT U
      D9 |  0000045E | CYRILLIC SMALL LETTER SHORT U
      DA |  0000040F | CYRILLIC CAPITAL LETTER DZHE
      DB |  0000045F | CYRILLIC SMALL LETTER DZHE
      DC |  00002116 | NUMERO SIGN
      DD |  00000401 | CYRILLIC CAPITAL LETTER IO
      DE |  00000451 | CYRILLIC SMALL LETTER IO
      DF |  0000044F | CYRILLIC SMALL LETTER YA
      E0 |  00000430 | CYRILLIC SMALL LETTER A
      E1 |  00000431 | CYRILLIC SMALL LETTER BE
      E2 |  00000432 | CYRILLIC SMALL LETTER VE
      E3 |  00000433 | CYRILLIC SMALL LETTER GHE
      E4 |  00000434 | CYRILLIC SMALL LETTER DE
      E5 |  00000435 | CYRILLIC SMALL LETTER IE
      E6 |  00000436 | CYRILLIC SMALL LETTER ZHE
      E7 |  00000437 | CYRILLIC SMALL LETTER ZE
      E8 |  00000438 | CYRILLIC SMALL LETTER I
      E9 |  00000439 | CYRILLIC SMALL LETTER SHORT I
      EA |  0000043A | CYRILLIC SMALL LETTER KA
      EB |  0000043B | CYRILLIC SMALL LETTER EL
      EC |  0000043C | CYRILLIC SMALL LETTER EM
      ED |  0000043D | CYRILLIC SMALL LETTER EN
      EE |  0000043E | CYRILLIC SMALL LETTER O
      EF |  0000043F | CYRILLIC SMALL LETTER PE
      F0 |  00000440 | CYRILLIC SMALL LETTER ER
      F1 |  00000441 | CYRILLIC SMALL LETTER ES
      F2 |  00000442 | CYRILLIC SMALL LETTER TE
      F3 |  00000443 | CYRILLIC SMALL LETTER U
      F4 |  00000444 | CYRILLIC SMALL LETTER EF
      F5 |  00000445 | CYRILLIC SMALL LETTER HA
      F6 |  00000446 | CYRILLIC SMALL LETTER TSE
      F7 |  00000447 | CYRILLIC SMALL LETTER CHE
      F8 |  00000448 | CYRILLIC SMALL LETTER SHA
      F9 |  00000449 | CYRILLIC SMALL LETTER SHCHA
      FA |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      FB |  0000044B | CYRILLIC SMALL LETTER YERU
      FC |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      FD |  0000044D | CYRILLIC SMALL LETTER E
      FE |  0000044E | CYRILLIC SMALL LETTER YU
      FF |  000000A4 | CURRENCY SIGN
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_CP10007

    $main::fatpacked{"Locale/RecodeData/CP1250.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_CP1250';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for CP1250.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::CP1250;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x20ac,
      0xfffd,
      0x201a,
      0xfffd,
      0x201e,
      0x2026,
      0x2020,
      0x2021,
      0xfffd,
      0x2030,
      0x0160,
      0x2039,
      0x015a,
      0x0164,
      0x017d,
      0x0179,
      0xfffd,
      0x2018,
      0x2019,
      0x201c,
      0x201d,
      0x2022,
      0x2013,
      0x2014,
      0xfffd,
      0x2122,
      0x0161,
      0x203a,
      0x015b,
      0x0165,
      0x017e,
      0x017a,
      0x00a0,
      0x02c7,
      0x02d8,
      0x0141,
      0x00a4,
      0x0104,
      0x00a6,
      0x00a7,
      0x00a8,
      0x00a9,
      0x015e,
      0x00ab,
      0x00ac,
      0x00ad,
      0x00ae,
      0x017b,
      0x00b0,
      0x00b1,
      0x02db,
      0x0142,
      0x00b4,
      0x00b5,
      0x00b6,
      0x00b7,
      0x00b8,
      0x0105,
      0x015f,
      0x00bb,
      0x013d,
      0x02dd,
      0x013e,
      0x017c,
      0x0154,
      0x00c1,
      0x00c2,
      0x0102,
      0x00c4,
      0x0139,
      0x0106,
      0x00c7,
      0x010c,
      0x00c9,
      0x0118,
      0x00cb,
      0x011a,
      0x00cd,
      0x00ce,
      0x010e,
      0x0110,
      0x0143,
      0x0147,
      0x00d3,
      0x00d4,
      0x0150,
      0x00d6,
      0x00d7,
      0x0158,
      0x016e,
      0x00da,
      0x0170,
      0x00dc,
      0x00dd,
      0x0162,
      0x00df,
      0x0155,
      0x00e1,
      0x00e2,
      0x0103,
      0x00e4,
      0x013a,
      0x0107,
      0x00e7,
      0x010d,
      0x00e9,
      0x0119,
      0x00eb,
      0x011b,
      0x00ed,
      0x00ee,
      0x010f,
      0x0111,
      0x0144,
      0x0148,
      0x00f3,
      0x00f4,
      0x0151,
      0x00f6,
      0x00f7,
      0x0159,
      0x016f,
      0x00fa,
      0x0171,
      0x00fc,
      0x00fd,
      0x0163,
      0x02d9,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xe2\x82\xac",
      "\xef\xbf\xbd",
      "\xe2\x80\x9a",
      "\xef\xbf\xbd",
      "\xe2\x80\x9e",
      "\xe2\x80\xa6",
      "\xe2\x80\xa0",
      "\xe2\x80\xa1",
      "\xef\xbf\xbd",
      "\xe2\x80\xb0",
      "\xc5\xa0",
      "\xe2\x80\xb9",
      "\xc5\x9a",
      "\xc5\xa4",
      "\xc5\xbd",
      "\xc5\xb9",
      "\xef\xbf\xbd",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\xa2",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xef\xbf\xbd",
      "\xe2\x84\xa2",
      "\xc5\xa1",
      "\xe2\x80\xba",
      "\xc5\x9b",
      "\xc5\xa5",
      "\xc5\xbe",
      "\xc5\xba",
      "\xc2\xa0",
      "\xcb\x87",
      "\xcb\x98",
      "\xc5\x81",
      "\xc2\xa4",
      "\xc4\x84",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc2\xa9",
      "\xc5\x9e",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xc5\xbb",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xcb\x9b",
      "\xc5\x82",
      "\xc2\xb4",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xc2\xb8",
      "\xc4\x85",
      "\xc5\x9f",
      "\xc2\xbb",
      "\xc4\xbd",
      "\xcb\x9d",
      "\xc4\xbe",
      "\xc5\xbc",
      "\xc5\x94",
      "\xc3\x81",
      "\xc3\x82",
      "\xc4\x82",
      "\xc3\x84",
      "\xc4\xb9",
      "\xc4\x86",
      "\xc3\x87",
      "\xc4\x8c",
      "\xc3\x89",
      "\xc4\x98",
      "\xc3\x8b",
      "\xc4\x9a",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc4\x8e",
      "\xc4\x90",
      "\xc5\x83",
      "\xc5\x87",
      "\xc3\x93",
      "\xc3\x94",
      "\xc5\x90",
      "\xc3\x96",
      "\xc3\x97",
      "\xc5\x98",
      "\xc5\xae",
      "\xc3\x9a",
      "\xc5\xb0",
      "\xc3\x9c",
      "\xc3\x9d",
      "\xc5\xa2",
      "\xc3\x9f",
      "\xc5\x95",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc4\x83",
      "\xc3\xa4",
      "\xc4\xba",
      "\xc4\x87",
      "\xc3\xa7",
      "\xc4\x8d",
      "\xc3\xa9",
      "\xc4\x99",
      "\xc3\xab",
      "\xc4\x9b",
      "\xc3\xad",
      "\xc3\xae",
      "\xc4\x8f",
      "\xc4\x91",
      "\xc5\x84",
      "\xc5\x88",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc5\x91",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc5\x99",
      "\xc5\xaf",
      "\xc3\xba",
      "\xc5\xb1",
      "\xc3\xbc",
      "\xc3\xbd",
      "\xc5\xa3",
      "\xcb\x99",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xa0",
      0x000000a4 => "\xa4",
      0x000000a6 => "\xa6",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xa8",
      0x000000a9 => "\xa9",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b4 => "\xb4",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000b8 => "\xb8",
      0x000000bb => "\xbb",
      0x000000c1 => "\xc1",
      0x000000c2 => "\xc2",
      0x000000c4 => "\xc4",
      0x000000c7 => "\xc7",
      0x000000c9 => "\xc9",
      0x000000cb => "\xcb",
      0x000000cd => "\xcd",
      0x000000ce => "\xce",
      0x000000d3 => "\xd3",
      0x000000d4 => "\xd4",
      0x000000d6 => "\xd6",
      0x000000d7 => "\xd7",
      0x000000da => "\xda",
      0x000000dc => "\xdc",
      0x000000dd => "\xdd",
      0x000000df => "\xdf",
      0x000000e1 => "\xe1",
      0x000000e2 => "\xe2",
      0x000000e4 => "\xe4",
      0x000000e7 => "\xe7",
      0x000000e9 => "\xe9",
      0x000000eb => "\xeb",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f6 => "\xf6",
      0x000000f7 => "\xf7",
      0x000000fa => "\xfa",
      0x000000fc => "\xfc",
      0x000000fd => "\xfd",
      0x00000102 => "\xc3",
      0x00000103 => "\xe3",
      0x00000104 => "\xa5",
      0x00000105 => "\xb9",
      0x00000106 => "\xc6",
      0x00000107 => "\xe6",
      0x0000010c => "\xc8",
      0x0000010d => "\xe8",
      0x0000010e => "\xcf",
      0x0000010f => "\xef",
      0x00000110 => "\xd0",
      0x00000111 => "\xf0",
      0x00000118 => "\xca",
      0x00000119 => "\xea",
      0x0000011a => "\xcc",
      0x0000011b => "\xec",
      0x00000139 => "\xc5",
      0x0000013a => "\xe5",
      0x0000013d => "\xbc",
      0x0000013e => "\xbe",
      0x00000141 => "\xa3",
      0x00000142 => "\xb3",
      0x00000143 => "\xd1",
      0x00000144 => "\xf1",
      0x00000147 => "\xd2",
      0x00000148 => "\xf2",
      0x00000150 => "\xd5",
      0x00000151 => "\xf5",
      0x00000154 => "\xc0",
      0x00000155 => "\xe0",
      0x00000158 => "\xd8",
      0x00000159 => "\xf8",
      0x0000015a => "\x8c",
      0x0000015b => "\x9c",
      0x0000015e => "\xaa",
      0x0000015f => "\xba",
      0x00000160 => "\x8a",
      0x00000161 => "\x9a",
      0x00000162 => "\xde",
      0x00000163 => "\xfe",
      0x00000164 => "\x8d",
      0x00000165 => "\x9d",
      0x0000016e => "\xd9",
      0x0000016f => "\xf9",
      0x00000170 => "\xdb",
      0x00000171 => "\xfb",
      0x00000179 => "\x8f",
      0x0000017a => "\x9f",
      0x0000017b => "\xaf",
      0x0000017c => "\xbf",
      0x0000017d => "\x8e",
      0x0000017e => "\x9e",
      0x000002c7 => "\xa1",
      0x000002d8 => "\xa2",
      0x000002d9 => "\xff",
      0x000002db => "\xb2",
      0x000002dd => "\xbd",
      0x00002013 => "\x96",
      0x00002014 => "\x97",
      0x00002018 => "\x91",
      0x00002019 => "\x92",
      0x0000201a => "\x82",
      0x0000201c => "\x93",
      0x0000201d => "\x94",
      0x0000201e => "\x84",
      0x00002020 => "\x86",
      0x00002021 => "\x87",
      0x00002022 => "\x95",
      0x00002026 => "\x85",
      0x00002030 => "\x89",
      0x00002039 => "\x8b",
      0x0000203a => "\x9b",
      0x000020ac => "\x80",
      0x00002122 => "\x99",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::CP1250 - Conversion routines for CP1250
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for CP1250.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
   repertoiremap: mnemonic,ds
    source: UNICODE 1.0
   alias MS-EE
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000020AC | EURO SIGN
      82 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      84 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      85 |  00002026 | HORIZONTAL ELLIPSIS
      86 |  00002020 | DAGGER
      87 |  00002021 | DOUBLE DAGGER
      89 |  00002030 | PER MILLE SIGN
      8A |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      8B |  00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
      8C |  0000015A | LATIN CAPITAL LETTER S WITH ACUTE
      8D |  00000164 | LATIN CAPITAL LETTER T WITH CARON
      8E |  0000017D | LATIN CAPITAL LETTER Z WITH CARON
      8F |  00000179 | LATIN CAPITAL LETTER Z WITH ACUTE
      91 |  00002018 | LEFT SINGLE QUOTATION MARK
      92 |  00002019 | RIGHT SINGLE QUOTATION MARK
      93 |  0000201C | LEFT DOUBLE QUOTATION MARK
      94 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      95 |  00002022 | BULLET
      96 |  00002013 | EN DASH
      97 |  00002014 | EM DASH
      99 |  00002122 | TRADE MARK SIGN
      9A |  00000161 | LATIN SMALL LETTER S WITH CARON
      9B |  0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
      9C |  0000015B | LATIN SMALL LETTER S WITH ACUTE
      9D |  00000165 | LATIN SMALL LETTER T WITH CARON
      9E |  0000017E | LATIN SMALL LETTER Z WITH CARON
      9F |  0000017A | LATIN SMALL LETTER Z WITH ACUTE
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  000002C7 | CARON (Mandarin Chinese third tone)
      A2 |  000002D8 | BREVE
      A3 |  00000141 | LATIN CAPITAL LETTER L WITH STROKE
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  00000104 | LATIN CAPITAL LETTER A WITH OGONEK
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  0000015E | LATIN CAPITAL LETTER S WITH CEDILLA
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000002DB | OGONEK
      B3 |  00000142 | LATIN SMALL LETTER L WITH STROKE
      B4 |  000000B4 | ACUTE ACCENT
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  000000B8 | CEDILLA
      B9 |  00000105 | LATIN SMALL LETTER A WITH OGONEK
      BA |  0000015F | LATIN SMALL LETTER S WITH CEDILLA
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  0000013D | LATIN CAPITAL LETTER L WITH CARON
      BD |  000002DD | DOUBLE ACUTE ACCENT
      BE |  0000013E | LATIN SMALL LETTER L WITH CARON
      BF |  0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE
      C0 |  00000154 | LATIN CAPITAL LETTER R WITH ACUTE
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C3 |  00000102 | LATIN CAPITAL LETTER A WITH BREVE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  00000139 | LATIN CAPITAL LETTER L WITH ACUTE
      C6 |  00000106 | LATIN CAPITAL LETTER C WITH ACUTE
      C7 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      C8 |  0000010C | LATIN CAPITAL LETTER C WITH CARON
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  00000118 | LATIN CAPITAL LETTER E WITH OGONEK
      CB |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      CC |  0000011A | LATIN CAPITAL LETTER E WITH CARON
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      CF |  0000010E | LATIN CAPITAL LETTER D WITH CARON
      D0 |  00000110 | LATIN CAPITAL LETTER D WITH STROKE
      D1 |  00000143 | LATIN CAPITAL LETTER N WITH ACUTE
      D2 |  00000147 | LATIN CAPITAL LETTER N WITH CARON
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  00000150 | LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  000000D7 | MULTIPLICATION SIGN
      D8 |  00000158 | LATIN CAPITAL LETTER R WITH CARON
      D9 |  0000016E | LATIN CAPITAL LETTER U WITH RING ABOVE
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  00000170 | LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      DE |  00000162 | LATIN CAPITAL LETTER T WITH CEDILLA
      DF |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E0 |  00000155 | LATIN SMALL LETTER R WITH ACUTE
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  00000103 | LATIN SMALL LETTER A WITH BREVE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  0000013A | LATIN SMALL LETTER L WITH ACUTE
      E6 |  00000107 | LATIN SMALL LETTER C WITH ACUTE
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  0000010D | LATIN SMALL LETTER C WITH CARON
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  00000119 | LATIN SMALL LETTER E WITH OGONEK
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  0000011B | LATIN SMALL LETTER E WITH CARON
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  0000010F | LATIN SMALL LETTER D WITH CARON
      F0 |  00000111 | LATIN SMALL LETTER D WITH STROKE
      F1 |  00000144 | LATIN SMALL LETTER N WITH ACUTE
      F2 |  00000148 | LATIN SMALL LETTER N WITH CARON
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  00000151 | LATIN SMALL LETTER O WITH DOUBLE ACUTE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  000000F7 | DIVISION SIGN
      F8 |  00000159 | LATIN SMALL LETTER R WITH CARON
      F9 |  0000016F | LATIN SMALL LETTER U WITH RING ABOVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  00000171 | LATIN SMALL LETTER U WITH DOUBLE ACUTE
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      FE |  00000163 | LATIN SMALL LETTER T WITH CEDILLA
      FF |  000002D9 | DOT ABOVE (Mandarin Chinese light tone)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_CP1250

    $main::fatpacked{"Locale/RecodeData/CP1251.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_CP1251';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for CP1251.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::CP1251;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0402,
      0x0403,
      0x201a,
      0x0453,
      0x201e,
      0x2026,
      0x2020,
      0x2021,
      0x20ac,
      0x2030,
      0x0409,
      0x2039,
      0x040a,
      0x040c,
      0x040b,
      0x040f,
      0x0452,
      0x2018,
      0x2019,
      0x201c,
      0x201d,
      0x2022,
      0x2013,
      0x2014,
      0xfffd,
      0x2122,
      0x0459,
      0x203a,
      0x045a,
      0x045c,
      0x045b,
      0x045f,
      0x00a0,
      0x040e,
      0x045e,
      0x0408,
      0x00a4,
      0x0490,
      0x00a6,
      0x00a7,
      0x0401,
      0x00a9,
      0x0404,
      0x00ab,
      0x00ac,
      0x00ad,
      0x00ae,
      0x0407,
      0x00b0,
      0x00b1,
      0x0406,
      0x0456,
      0x0491,
      0x00b5,
      0x00b6,
      0x00b7,
      0x0451,
      0x2116,
      0x0454,
      0x00bb,
      0x0458,
      0x0405,
      0x0455,
      0x0457,
      0x0410,
      0x0411,
      0x0412,
      0x0413,
      0x0414,
      0x0415,
      0x0416,
      0x0417,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0x041d,
      0x041e,
      0x041f,
      0x0420,
      0x0421,
      0x0422,
      0x0423,
      0x0424,
      0x0425,
      0x0426,
      0x0427,
      0x0428,
      0x0429,
      0x042a,
      0x042b,
      0x042c,
      0x042d,
      0x042e,
      0x042f,
      0x0430,
      0x0431,
      0x0432,
      0x0433,
      0x0434,
      0x0435,
      0x0436,
      0x0437,
      0x0438,
      0x0439,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0444,
      0x0445,
      0x0446,
      0x0447,
      0x0448,
      0x0449,
      0x044a,
      0x044b,
      0x044c,
      0x044d,
      0x044e,
      0x044f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xd0\x82",
      "\xd0\x83",
      "\xe2\x80\x9a",
      "\xd1\x93",
      "\xe2\x80\x9e",
      "\xe2\x80\xa6",
      "\xe2\x80\xa0",
      "\xe2\x80\xa1",
      "\xe2\x82\xac",
      "\xe2\x80\xb0",
      "\xd0\x89",
      "\xe2\x80\xb9",
      "\xd0\x8a",
      "\xd0\x8c",
      "\xd0\x8b",
      "\xd0\x8f",
      "\xd1\x92",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\xa2",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xef\xbf\xbd",
      "\xe2\x84\xa2",
      "\xd1\x99",
      "\xe2\x80\xba",
      "\xd1\x9a",
      "\xd1\x9c",
      "\xd1\x9b",
      "\xd1\x9f",
      "\xc2\xa0",
      "\xd0\x8e",
      "\xd1\x9e",
      "\xd0\x88",
      "\xc2\xa4",
      "\xd2\x90",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xd0\x81",
      "\xc2\xa9",
      "\xd0\x84",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xd0\x87",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xd0\x86",
      "\xd1\x96",
      "\xd2\x91",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xd1\x91",
      "\xe2\x84\x96",
      "\xd1\x94",
      "\xc2\xbb",
      "\xd1\x98",
      "\xd0\x85",
      "\xd1\x95",
      "\xd1\x97",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\x92",
      "\xd0\x93",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\x96",
      "\xd0\x97",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xa0",
      "\xd0\xa1",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\xa4",
      "\xd0\xa5",
      "\xd0\xa6",
      "\xd0\xa7",
      "\xd0\xa8",
      "\xd0\xa9",
      "\xd0\xaa",
      "\xd0\xab",
      "\xd0\xac",
      "\xd0\xad",
      "\xd0\xae",
      "\xd0\xaf",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xd0\xb2",
      "\xd0\xb3",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd0\xb6",
      "\xd0\xb7",
      "\xd0\xb8",
      "\xd0\xb9",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd1\x84",
      "\xd1\x85",
      "\xd1\x86",
      "\xd1\x87",
      "\xd1\x88",
      "\xd1\x89",
      "\xd1\x8a",
      "\xd1\x8b",
      "\xd1\x8c",
      "\xd1\x8d",
      "\xd1\x8e",
      "\xd1\x8f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xa0",
      0x000000a4 => "\xa4",
      0x000000a6 => "\xa6",
      0x000000a7 => "\xa7",
      0x000000a9 => "\xa9",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000bb => "\xbb",
      0x00000401 => "\xa8",
      0x00000402 => "\x80",
      0x00000403 => "\x81",
      0x00000404 => "\xaa",
      0x00000405 => "\xbd",
      0x00000406 => "\xb2",
      0x00000407 => "\xaf",
      0x00000408 => "\xa3",
      0x00000409 => "\x8a",
      0x0000040a => "\x8c",
      0x0000040b => "\x8e",
      0x0000040c => "\x8d",
      0x0000040e => "\xa1",
      0x0000040f => "\x8f",
      0x00000410 => "\xc0",
      0x00000411 => "\xc1",
      0x00000412 => "\xc2",
      0x00000413 => "\xc3",
      0x00000414 => "\xc4",
      0x00000415 => "\xc5",
      0x00000416 => "\xc6",
      0x00000417 => "\xc7",
      0x00000418 => "\xc8",
      0x00000419 => "\xc9",
      0x0000041a => "\xca",
      0x0000041b => "\xcb",
      0x0000041c => "\xcc",
      0x0000041d => "\xcd",
      0x0000041e => "\xce",
      0x0000041f => "\xcf",
      0x00000420 => "\xd0",
      0x00000421 => "\xd1",
      0x00000422 => "\xd2",
      0x00000423 => "\xd3",
      0x00000424 => "\xd4",
      0x00000425 => "\xd5",
      0x00000426 => "\xd6",
      0x00000427 => "\xd7",
      0x00000428 => "\xd8",
      0x00000429 => "\xd9",
      0x0000042a => "\xda",
      0x0000042b => "\xdb",
      0x0000042c => "\xdc",
      0x0000042d => "\xdd",
      0x0000042e => "\xde",
      0x0000042f => "\xdf",
      0x00000430 => "\xe0",
      0x00000431 => "\xe1",
      0x00000432 => "\xe2",
      0x00000433 => "\xe3",
      0x00000434 => "\xe4",
      0x00000435 => "\xe5",
      0x00000436 => "\xe6",
      0x00000437 => "\xe7",
      0x00000438 => "\xe8",
      0x00000439 => "\xe9",
      0x0000043a => "\xea",
      0x0000043b => "\xeb",
      0x0000043c => "\xec",
      0x0000043d => "\xed",
      0x0000043e => "\xee",
      0x0000043f => "\xef",
      0x00000440 => "\xf0",
      0x00000441 => "\xf1",
      0x00000442 => "\xf2",
      0x00000443 => "\xf3",
      0x00000444 => "\xf4",
      0x00000445 => "\xf5",
      0x00000446 => "\xf6",
      0x00000447 => "\xf7",
      0x00000448 => "\xf8",
      0x00000449 => "\xf9",
      0x0000044a => "\xfa",
      0x0000044b => "\xfb",
      0x0000044c => "\xfc",
      0x0000044d => "\xfd",
      0x0000044e => "\xfe",
      0x0000044f => "\xff",
      0x00000451 => "\xb8",
      0x00000452 => "\x90",
      0x00000453 => "\x83",
      0x00000454 => "\xba",
      0x00000455 => "\xbe",
      0x00000456 => "\xb3",
      0x00000457 => "\xbf",
      0x00000458 => "\xbc",
      0x00000459 => "\x9a",
      0x0000045a => "\x9c",
      0x0000045b => "\x9e",
      0x0000045c => "\x9d",
      0x0000045e => "\xa2",
      0x0000045f => "\x9f",
      0x00000490 => "\xa5",
      0x00000491 => "\xb4",
      0x00002013 => "\x96",
      0x00002014 => "\x97",
      0x00002018 => "\x91",
      0x00002019 => "\x92",
      0x0000201a => "\x82",
      0x0000201c => "\x93",
      0x0000201d => "\x94",
      0x0000201e => "\x84",
      0x00002020 => "\x86",
      0x00002021 => "\x87",
      0x00002022 => "\x95",
      0x00002026 => "\x85",
      0x00002030 => "\x89",
      0x00002039 => "\x8b",
      0x0000203a => "\x9b",
      0x000020ac => "\x88",
      0x00002116 => "\xb9",
      0x00002122 => "\x99",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::CP1251 - Conversion routines for CP1251
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for CP1251.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
   repertoiremap: mnemonic,ds
    source: UNICODE 1.0
   alias MS-CYRL
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000402 | CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
      81 |  00000403 | CYRILLIC CAPITAL LETTER GJE
      82 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      83 |  00000453 | CYRILLIC SMALL LETTER GJE
      84 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      85 |  00002026 | HORIZONTAL ELLIPSIS
      86 |  00002020 | DAGGER
      87 |  00002021 | DOUBLE DAGGER
      88 |  000020AC | EURO SIGN
      89 |  00002030 | PER MILLE SIGN
      8A |  00000409 | CYRILLIC CAPITAL LETTER LJE
      8B |  00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
      8C |  0000040A | CYRILLIC CAPITAL LETTER NJE
      8D |  0000040C | CYRILLIC CAPITAL LETTER KJE
      8E |  0000040B | CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
      8F |  0000040F | CYRILLIC CAPITAL LETTER DZHE
      90 |  00000452 | CYRILLIC SMALL LETTER DJE (Serbocroatian)
      91 |  00002018 | LEFT SINGLE QUOTATION MARK
      92 |  00002019 | RIGHT SINGLE QUOTATION MARK
      93 |  0000201C | LEFT DOUBLE QUOTATION MARK
      94 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      95 |  00002022 | BULLET
      96 |  00002013 | EN DASH
      97 |  00002014 | EM DASH
      99 |  00002122 | TRADE MARK SIGN
      9A |  00000459 | CYRILLIC SMALL LETTER LJE
      9B |  0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
      9C |  0000045A | CYRILLIC SMALL LETTER NJE
      9D |  0000045C | CYRILLIC SMALL LETTER KJE
      9E |  0000045B | CYRILLIC SMALL LETTER TSHE (Serbocroatian)
      9F |  0000045F | CYRILLIC SMALL LETTER DZHE
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  0000040E | CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
      A2 |  0000045E | CYRILLIC SMALL LETTER SHORT U (Byelorussian)
      A3 |  00000408 | CYRILLIC CAPITAL LETTER JE
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  00000490 | CYRILLIC CAPITAL LETTER GHE WITH UPTURN
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      A8 |  00000401 | CYRILLIC CAPITAL LETTER IO
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  00000407 | CYRILLIC CAPITAL LETTER YI (Ukrainian)
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
      B3 |  00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
      B4 |  00000491 | CYRILLIC SMALL LETTER GHE WITH UPTURN
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  00000451 | CYRILLIC SMALL LETTER IO
      B9 |  00002116 | NUMERO SIGN
      BA |  00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  00000458 | CYRILLIC SMALL LETTER JE
      BD |  00000405 | CYRILLIC CAPITAL LETTER DZE
      BE |  00000455 | CYRILLIC SMALL LETTER DZE
      BF |  00000457 | CYRILLIC SMALL LETTER YI (Ukrainian)
      C0 |  00000410 | CYRILLIC CAPITAL LETTER A
      C1 |  00000411 | CYRILLIC CAPITAL LETTER BE
      C2 |  00000412 | CYRILLIC CAPITAL LETTER VE
      C3 |  00000413 | CYRILLIC CAPITAL LETTER GHE
      C4 |  00000414 | CYRILLIC CAPITAL LETTER DE
      C5 |  00000415 | CYRILLIC CAPITAL LETTER IE
      C6 |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      C7 |  00000417 | CYRILLIC CAPITAL LETTER ZE
      C8 |  00000418 | CYRILLIC CAPITAL LETTER I
      C9 |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      CA |  0000041A | CYRILLIC CAPITAL LETTER KA
      CB |  0000041B | CYRILLIC CAPITAL LETTER EL
      CC |  0000041C | CYRILLIC CAPITAL LETTER EM
      CD |  0000041D | CYRILLIC CAPITAL LETTER EN
      CE |  0000041E | CYRILLIC CAPITAL LETTER O
      CF |  0000041F | CYRILLIC CAPITAL LETTER PE
      D0 |  00000420 | CYRILLIC CAPITAL LETTER ER
      D1 |  00000421 | CYRILLIC CAPITAL LETTER ES
      D2 |  00000422 | CYRILLIC CAPITAL LETTER TE
      D3 |  00000423 | CYRILLIC CAPITAL LETTER U
      D4 |  00000424 | CYRILLIC CAPITAL LETTER EF
      D5 |  00000425 | CYRILLIC CAPITAL LETTER HA
      D6 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      D7 |  00000427 | CYRILLIC CAPITAL LETTER CHE
      D8 |  00000428 | CYRILLIC CAPITAL LETTER SHA
      D9 |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      DA |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
      DB |  0000042B | CYRILLIC CAPITAL LETTER YERU
      DC |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      DD |  0000042D | CYRILLIC CAPITAL LETTER E
      DE |  0000042E | CYRILLIC CAPITAL LETTER YU
      DF |  0000042F | CYRILLIC CAPITAL LETTER YA
      E0 |  00000430 | CYRILLIC SMALL LETTER A
      E1 |  00000431 | CYRILLIC SMALL LETTER BE
      E2 |  00000432 | CYRILLIC SMALL LETTER VE
      E3 |  00000433 | CYRILLIC SMALL LETTER GHE
      E4 |  00000434 | CYRILLIC SMALL LETTER DE
      E5 |  00000435 | CYRILLIC SMALL LETTER IE
      E6 |  00000436 | CYRILLIC SMALL LETTER ZHE
      E7 |  00000437 | CYRILLIC SMALL LETTER ZE
      E8 |  00000438 | CYRILLIC SMALL LETTER I
      E9 |  00000439 | CYRILLIC SMALL LETTER SHORT I
      EA |  0000043A | CYRILLIC SMALL LETTER KA
      EB |  0000043B | CYRILLIC SMALL LETTER EL
      EC |  0000043C | CYRILLIC SMALL LETTER EM
      ED |  0000043D | CYRILLIC SMALL LETTER EN
      EE |  0000043E | CYRILLIC SMALL LETTER O
      EF |  0000043F | CYRILLIC SMALL LETTER PE
      F0 |  00000440 | CYRILLIC SMALL LETTER ER
      F1 |  00000441 | CYRILLIC SMALL LETTER ES
      F2 |  00000442 | CYRILLIC SMALL LETTER TE
      F3 |  00000443 | CYRILLIC SMALL LETTER U
      F4 |  00000444 | CYRILLIC SMALL LETTER EF
      F5 |  00000445 | CYRILLIC SMALL LETTER HA
      F6 |  00000446 | CYRILLIC SMALL LETTER TSE
      F7 |  00000447 | CYRILLIC SMALL LETTER CHE
      F8 |  00000448 | CYRILLIC SMALL LETTER SHA
      F9 |  00000449 | CYRILLIC SMALL LETTER SHCHA
      FA |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      FB |  0000044B | CYRILLIC SMALL LETTER YERU
      FC |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      FD |  0000044D | CYRILLIC SMALL LETTER E
      FE |  0000044E | CYRILLIC SMALL LETTER YU
      FF |  0000044F | CYRILLIC SMALL LETTER YA
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_CP1251

    $main::fatpacked{"Locale/RecodeData/CP1252.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_CP1252';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for CP1252.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::CP1252;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x20ac,
      0xfffd,
      0x201a,
      0x0192,
      0x201e,
      0x2026,
      0x2020,
      0x2021,
      0x02c6,
      0x2030,
      0x0160,
      0x2039,
      0x0152,
      0xfffd,
      0x017d,
      0xfffd,
      0xfffd,
      0x2018,
      0x2019,
      0x201c,
      0x201d,
      0x2022,
      0x2013,
      0x2014,
      0x02dc,
      0x2122,
      0x0161,
      0x203a,
      0x0153,
      0xfffd,
      0x017e,
      0x0178,
      0x00a0,
      0x00a1,
      0x00a2,
      0x00a3,
      0x00a4,
      0x00a5,
      0x00a6,
      0x00a7,
      0x00a8,
      0x00a9,
      0x00aa,
      0x00ab,
      0x00ac,
      0x00ad,
      0x00ae,
      0x00af,
      0x00b0,
      0x00b1,
      0x00b2,
      0x00b3,
      0x00b4,
      0x00b5,
      0x00b6,
      0x00b7,
      0x00b8,
      0x00b9,
      0x00ba,
      0x00bb,
      0x00bc,
      0x00bd,
      0x00be,
      0x00bf,
      0x00c0,
      0x00c1,
      0x00c2,
      0x00c3,
      0x00c4,
      0x00c5,
      0x00c6,
      0x00c7,
      0x00c8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00cc,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00d0,
      0x00d1,
      0x00d2,
      0x00d3,
      0x00d4,
      0x00d5,
      0x00d6,
      0x00d7,
      0x00d8,
      0x00d9,
      0x00da,
      0x00db,
      0x00dc,
      0x00dd,
      0x00de,
      0x00df,
      0x00e0,
      0x00e1,
      0x00e2,
      0x00e3,
      0x00e4,
      0x00e5,
      0x00e6,
      0x00e7,
      0x00e8,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00ec,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00f0,
      0x00f1,
      0x00f2,
      0x00f3,
      0x00f4,
      0x00f5,
      0x00f6,
      0x00f7,
      0x00f8,
      0x00f9,
      0x00fa,
      0x00fb,
      0x00fc,
      0x00fd,
      0x00fe,
      0x00ff,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xe2\x82\xac",
      "\xef\xbf\xbd",
      "\xe2\x80\x9a",
      "\xc6\x92",
      "\xe2\x80\x9e",
      "\xe2\x80\xa6",
      "\xe2\x80\xa0",
      "\xe2\x80\xa1",
      "\xcb\x86",
      "\xe2\x80\xb0",
      "\xc5\xa0",
      "\xe2\x80\xb9",
      "\xc5\x92",
      "\xef\xbf\xbd",
      "\xc5\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\xa2",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xcb\x9c",
      "\xe2\x84\xa2",
      "\xc5\xa1",
      "\xe2\x80\xba",
      "\xc5\x93",
      "\xef\xbf\xbd",
      "\xc5\xbe",
      "\xc5\xb8",
      "\xc2\xa0",
      "\xc2\xa1",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa4",
      "\xc2\xa5",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc2\xa9",
      "\xc2\xaa",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xc2\xaf",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xc2\xb4",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xc2\xb8",
      "\xc2\xb9",
      "\xc2\xba",
      "\xc2\xbb",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc2\xbf",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x82",
      "\xc3\x83",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x86",
      "\xc3\x87",
      "\xc3\x88",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x8c",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x90",
      "\xc3\x91",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x94",
      "\xc3\x95",
      "\xc3\x96",
      "\xc3\x97",
      "\xc3\x98",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc3\x9f",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc3\xa3",
      "\xc3\xa4",
      "\xc3\xa5",
      "\xc3\xa6",
      "\xc3\xa7",
      "\xc3\xa8",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xac",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb0",
      "\xc3\xb1",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc3\xb5",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc3\xb8",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc3\xbf",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xa0",
      0x000000a1 => "\xa1",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xa4",
      0x000000a5 => "\xa5",
      0x000000a6 => "\xa6",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xa8",
      0x000000a9 => "\xa9",
      0x000000aa => "\xaa",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000af => "\xaf",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b2 => "\xb2",
      0x000000b3 => "\xb3",
      0x000000b4 => "\xb4",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000b8 => "\xb8",
      0x000000b9 => "\xb9",
      0x000000ba => "\xba",
      0x000000bb => "\xbb",
      0x000000bc => "\xbc",
      0x000000bd => "\xbd",
      0x000000be => "\xbe",
      0x000000bf => "\xbf",
      0x000000c0 => "\xc0",
      0x000000c1 => "\xc1",
      0x000000c2 => "\xc2",
      0x000000c3 => "\xc3",
      0x000000c4 => "\xc4",
      0x000000c5 => "\xc5",
      0x000000c6 => "\xc6",
      0x000000c7 => "\xc7",
      0x000000c8 => "\xc8",
      0x000000c9 => "\xc9",
      0x000000ca => "\xca",
      0x000000cb => "\xcb",
      0x000000cc => "\xcc",
      0x000000cd => "\xcd",
      0x000000ce => "\xce",
      0x000000cf => "\xcf",
      0x000000d0 => "\xd0",
      0x000000d1 => "\xd1",
      0x000000d2 => "\xd2",
      0x000000d3 => "\xd3",
      0x000000d4 => "\xd4",
      0x000000d5 => "\xd5",
      0x000000d6 => "\xd6",
      0x000000d7 => "\xd7",
      0x000000d8 => "\xd8",
      0x000000d9 => "\xd9",
      0x000000da => "\xda",
      0x000000db => "\xdb",
      0x000000dc => "\xdc",
      0x000000dd => "\xdd",
      0x000000de => "\xde",
      0x000000df => "\xdf",
      0x000000e0 => "\xe0",
      0x000000e1 => "\xe1",
      0x000000e2 => "\xe2",
      0x000000e3 => "\xe3",
      0x000000e4 => "\xe4",
      0x000000e5 => "\xe5",
      0x000000e6 => "\xe6",
      0x000000e7 => "\xe7",
      0x000000e8 => "\xe8",
      0x000000e9 => "\xe9",
      0x000000ea => "\xea",
      0x000000eb => "\xeb",
      0x000000ec => "\xec",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000ef => "\xef",
      0x000000f0 => "\xf0",
      0x000000f1 => "\xf1",
      0x000000f2 => "\xf2",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f5 => "\xf5",
      0x000000f6 => "\xf6",
      0x000000f7 => "\xf7",
      0x000000f8 => "\xf8",
      0x000000f9 => "\xf9",
      0x000000fa => "\xfa",
      0x000000fb => "\xfb",
      0x000000fc => "\xfc",
      0x000000fd => "\xfd",
      0x000000fe => "\xfe",
      0x000000ff => "\xff",
      0x00000152 => "\x8c",
      0x00000153 => "\x9c",
      0x00000160 => "\x8a",
      0x00000161 => "\x9a",
      0x00000178 => "\x9f",
      0x0000017d => "\x8e",
      0x0000017e => "\x9e",
      0x00000192 => "\x83",
      0x000002c6 => "\x88",
      0x000002dc => "\x98",
      0x00002013 => "\x96",
      0x00002014 => "\x97",
      0x00002018 => "\x91",
      0x00002019 => "\x92",
      0x0000201a => "\x82",
      0x0000201c => "\x93",
      0x0000201d => "\x94",
      0x0000201e => "\x84",
      0x00002020 => "\x86",
      0x00002021 => "\x87",
      0x00002022 => "\x95",
      0x00002026 => "\x85",
      0x00002030 => "\x89",
      0x00002039 => "\x8b",
      0x0000203a => "\x9b",
      0x000020ac => "\x80",
      0x00002122 => "\x99",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::CP1252 - Conversion routines for CP1252
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for CP1252.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
   repertoiremap: mnemonic,ds
    source: UNICODE 1.0
   alias MS-ANSI
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000020AC | EURO SIGN
      82 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      83 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      84 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      85 |  00002026 | HORIZONTAL ELLIPSIS
      86 |  00002020 | DAGGER
      87 |  00002021 | DOUBLE DAGGER
      88 |  000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT
      89 |  00002030 | PER MILLE SIGN
      8A |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      8B |  00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
      8C |  00000152 | LATIN CAPITAL LIGATURE OE
      8E |  0000017D | LATIN CAPITAL LETTER Z WITH CARON
      91 |  00002018 | LEFT SINGLE QUOTATION MARK
      92 |  00002019 | RIGHT SINGLE QUOTATION MARK
      93 |  0000201C | LEFT DOUBLE QUOTATION MARK
      94 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      95 |  00002022 | BULLET
      96 |  00002013 | EN DASH
      97 |  00002014 | EM DASH
      98 |  000002DC | SMALL TILDE
      99 |  00002122 | TRADE MARK SIGN
      9A |  00000161 | LATIN SMALL LETTER S WITH CARON
      9B |  0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
      9C |  00000153 | LATIN SMALL LIGATURE OE
      9E |  0000017E | LATIN SMALL LETTER Z WITH CARON
      9F |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  000000A1 | INVERTED EXCLAMATION MARK
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  000000A5 | YEN SIGN
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  000000AA | FEMININE ORDINAL INDICATOR
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  000000AF | MACRON
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  000000B3 | SUPERSCRIPT THREE
      B4 |  000000B4 | ACUTE ACCENT
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  000000B8 | CEDILLA
      B9 |  000000B9 | SUPERSCRIPT ONE
      BA |  000000BA | MASCULINE ORDINAL INDICATOR
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  000000BC | VULGAR FRACTION ONE QUARTER
      BD |  000000BD | VULGAR FRACTION ONE HALF
      BE |  000000BE | VULGAR FRACTION THREE QUARTERS
      BF |  000000BF | INVERTED QUESTION MARK
      C0 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C3 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      C6 |  000000C6 | LATIN CAPITAL LETTER AE
      C7 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      C8 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      CB |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      CC |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      CF |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      D0 |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      D1 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      D2 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  000000D7 | MULTIPLICATION SIGN
      D8 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      D9 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      DE |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      DF |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E0 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      E6 |  000000E6 | LATIN SMALL LETTER AE
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      F0 |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      F1 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      F2 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  000000F7 | DIVISION SIGN
      F8 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      F9 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      FE |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      FF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_CP1252

    $main::fatpacked{"Locale/RecodeData/CP1253.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_CP1253';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for CP1253.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::CP1253;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x20ac,
      0xfffd,
      0x201a,
      0x0192,
      0x201e,
      0x2026,
      0x2020,
      0x2021,
      0xfffd,
      0x2030,
      0xfffd,
      0x2039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x2018,
      0x2019,
      0x201c,
      0x201d,
      0x2022,
      0x2013,
      0x2014,
      0xfffd,
      0x2122,
      0xfffd,
      0x203a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a0,
      0x0385,
      0x0386,
      0x00a3,
      0x00a4,
      0x00a5,
      0x00a6,
      0x00a7,
      0x00a8,
      0x00a9,
      0xfffd,
      0x00ab,
      0x00ac,
      0x00ad,
      0x00ae,
      0x2015,
      0x00b0,
      0x00b1,
      0x00b2,
      0x00b3,
      0x0384,
      0x00b5,
      0x00b6,
      0x00b7,
      0x0388,
      0x0389,
      0x038a,
      0x00bb,
      0x038c,
      0x00bd,
      0x038e,
      0x038f,
      0x0390,
      0x0391,
      0x0392,
      0x0393,
      0x0394,
      0x0395,
      0x0396,
      0x0397,
      0x0398,
      0x0399,
      0x039a,
      0x039b,
      0x039c,
      0x039d,
      0x039e,
      0x039f,
      0x03a0,
      0x03a1,
      0xfffd,
      0x03a3,
      0x03a4,
      0x03a5,
      0x03a6,
      0x03a7,
      0x03a8,
      0x03a9,
      0x03aa,
      0x03ab,
      0x03ac,
      0x03ad,
      0x03ae,
      0x03af,
      0x03b0,
      0x03b1,
      0x03b2,
      0x03b3,
      0x03b4,
      0x03b5,
      0x03b6,
      0x03b7,
      0x03b8,
      0x03b9,
      0x03ba,
      0x03bb,
      0x03bc,
      0x03bd,
      0x03be,
      0x03bf,
      0x03c0,
      0x03c1,
      0x03c2,
      0x03c3,
      0x03c4,
      0x03c5,
      0x03c6,
      0x03c7,
      0x03c8,
      0x03c9,
      0x03ca,
      0x03cb,
      0x03cc,
      0x03cd,
      0x03ce,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xe2\x82\xac",
      "\xef\xbf\xbd",
      "\xe2\x80\x9a",
      "\xc6\x92",
      "\xe2\x80\x9e",
      "\xe2\x80\xa6",
      "\xe2\x80\xa0",
      "\xe2\x80\xa1",
      "\xef\xbf\xbd",
      "\xe2\x80\xb0",
      "\xef\xbf\xbd",
      "\xe2\x80\xb9",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\xa2",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xef\xbf\xbd",
      "\xe2\x84\xa2",
      "\xef\xbf\xbd",
      "\xe2\x80\xba",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa0",
      "\xce\x85",
      "\xce\x86",
      "\xc2\xa3",
      "\xc2\xa4",
      "\xc2\xa5",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc2\xa9",
      "\xef\xbf\xbd",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xe2\x80\x95",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xce\x84",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xce\x88",
      "\xce\x89",
      "\xce\x8a",
      "\xc2\xbb",
      "\xce\x8c",
      "\xc2\xbd",
      "\xce\x8e",
      "\xce\x8f",
      "\xce\x90",
      "\xce\x91",
      "\xce\x92",
      "\xce\x93",
      "\xce\x94",
      "\xce\x95",
      "\xce\x96",
      "\xce\x97",
      "\xce\x98",
      "\xce\x99",
      "\xce\x9a",
      "\xce\x9b",
      "\xce\x9c",
      "\xce\x9d",
      "\xce\x9e",
      "\xce\x9f",
      "\xce\xa0",
      "\xce\xa1",
      "\xef\xbf\xbd",
      "\xce\xa3",
      "\xce\xa4",
      "\xce\xa5",
      "\xce\xa6",
      "\xce\xa7",
      "\xce\xa8",
      "\xce\xa9",
      "\xce\xaa",
      "\xce\xab",
      "\xce\xac",
      "\xce\xad",
      "\xce\xae",
      "\xce\xaf",
      "\xce\xb0",
      "\xce\xb1",
      "\xce\xb2",
      "\xce\xb3",
      "\xce\xb4",
      "\xce\xb5",
      "\xce\xb6",
      "\xce\xb7",
      "\xce\xb8",
      "\xce\xb9",
      "\xce\xba",
      "\xce\xbb",
      "\xce\xbc",
      "\xce\xbd",
      "\xce\xbe",
      "\xce\xbf",
      "\xcf\x80",
      "\xcf\x81",
      "\xcf\x82",
      "\xcf\x83",
      "\xcf\x84",
      "\xcf\x85",
      "\xcf\x86",
      "\xcf\x87",
      "\xcf\x88",
      "\xcf\x89",
      "\xcf\x8a",
      "\xcf\x8b",
      "\xcf\x8c",
      "\xcf\x8d",
      "\xcf\x8e",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xa0",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xa4",
      0x000000a5 => "\xa5",
      0x000000a6 => "\xa6",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xa8",
      0x000000a9 => "\xa9",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b2 => "\xb2",
      0x000000b3 => "\xb3",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000bb => "\xbb",
      0x000000bd => "\xbd",
      0x00000192 => "\x83",
      0x00000384 => "\xb4",
      0x00000385 => "\xa1",
      0x00000386 => "\xa2",
      0x00000388 => "\xb8",
      0x00000389 => "\xb9",
      0x0000038a => "\xba",
      0x0000038c => "\xbc",
      0x0000038e => "\xbe",
      0x0000038f => "\xbf",
      0x00000390 => "\xc0",
      0x00000391 => "\xc1",
      0x00000392 => "\xc2",
      0x00000393 => "\xc3",
      0x00000394 => "\xc4",
      0x00000395 => "\xc5",
      0x00000396 => "\xc6",
      0x00000397 => "\xc7",
      0x00000398 => "\xc8",
      0x00000399 => "\xc9",
      0x0000039a => "\xca",
      0x0000039b => "\xcb",
      0x0000039c => "\xcc",
      0x0000039d => "\xcd",
      0x0000039e => "\xce",
      0x0000039f => "\xcf",
      0x000003a0 => "\xd0",
      0x000003a1 => "\xd1",
      0x000003a3 => "\xd3",
      0x000003a4 => "\xd4",
      0x000003a5 => "\xd5",
      0x000003a6 => "\xd6",
      0x000003a7 => "\xd7",
      0x000003a8 => "\xd8",
      0x000003a9 => "\xd9",
      0x000003aa => "\xda",
      0x000003ab => "\xdb",
      0x000003ac => "\xdc",
      0x000003ad => "\xdd",
      0x000003ae => "\xde",
      0x000003af => "\xdf",
      0x000003b0 => "\xe0",
      0x000003b1 => "\xe1",
      0x000003b2 => "\xe2",
      0x000003b3 => "\xe3",
      0x000003b4 => "\xe4",
      0x000003b5 => "\xe5",
      0x000003b6 => "\xe6",
      0x000003b7 => "\xe7",
      0x000003b8 => "\xe8",
      0x000003b9 => "\xe9",
      0x000003ba => "\xea",
      0x000003bb => "\xeb",
      0x000003bc => "\xec",
      0x000003bd => "\xed",
      0x000003be => "\xee",
      0x000003bf => "\xef",
      0x000003c0 => "\xf0",
      0x000003c1 => "\xf1",
      0x000003c2 => "\xf2",
      0x000003c3 => "\xf3",
      0x000003c4 => "\xf4",
      0x000003c5 => "\xf5",
      0x000003c6 => "\xf6",
      0x000003c7 => "\xf7",
      0x000003c8 => "\xf8",
      0x000003c9 => "\xf9",
      0x000003ca => "\xfa",
      0x000003cb => "\xfb",
      0x000003cc => "\xfc",
      0x000003cd => "\xfd",
      0x000003ce => "\xfe",
      0x00002013 => "\x96",
      0x00002014 => "\x97",
      0x00002015 => "\xaf",
      0x00002018 => "\x91",
      0x00002019 => "\x92",
      0x0000201a => "\x82",
      0x0000201c => "\x93",
      0x0000201d => "\x94",
      0x0000201e => "\x84",
      0x00002020 => "\x86",
      0x00002021 => "\x87",
      0x00002022 => "\x95",
      0x00002026 => "\x85",
      0x00002030 => "\x89",
      0x00002039 => "\x8b",
      0x0000203a => "\x9b",
      0x000020ac => "\x80",
      0x00002122 => "\x99",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::CP1253 - Conversion routines for CP1253
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for CP1253.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
   repertoiremap: mnemonic,ds
    source: UNICODE 1.0
   alias MS-GREEK
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000020AC | EURO SIGN
      82 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      83 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      84 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      85 |  00002026 | HORIZONTAL ELLIPSIS
      86 |  00002020 | DAGGER
      87 |  00002021 | DOUBLE DAGGER
      89 |  00002030 | PER MILLE SIGN
      8B |  00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
      91 |  00002018 | LEFT SINGLE QUOTATION MARK
      92 |  00002019 | RIGHT SINGLE QUOTATION MARK
      93 |  0000201C | LEFT DOUBLE QUOTATION MARK
      94 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      95 |  00002022 | BULLET
      96 |  00002013 | EN DASH
      97 |  00002014 | EM DASH
      99 |  00002122 | TRADE MARK SIGN
      9B |  0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  00000385 | GREEK DIALYTIKA TONOS
      A2 |  00000386 | GREEK CAPITAL LETTER ALPHA WITH TONOS
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  000000A5 | YEN SIGN
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  000000A9 | COPYRIGHT SIGN
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  00002015 | HORIZONTAL BAR
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  000000B3 | SUPERSCRIPT THREE
      B4 |  00000384 | GREEK TONOS
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  00000388 | GREEK CAPITAL LETTER EPSILON WITH TONOS
      B9 |  00000389 | GREEK CAPITAL LETTER ETA WITH TONOS
      BA |  0000038A | GREEK CAPITAL LETTER IOTA WITH TONOS
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  0000038C | GREEK CAPITAL LETTER OMICRON WITH TONOS
      BD |  000000BD | VULGAR FRACTION ONE HALF
      BE |  0000038E | GREEK CAPITAL LETTER UPSILON WITH TONOS
      BF |  0000038F | GREEK CAPITAL LETTER OMEGA WITH TONOS
      C0 |  00000390 | GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
      C1 |  00000391 | GREEK CAPITAL LETTER ALPHA
      C2 |  00000392 | GREEK CAPITAL LETTER BETA
      C3 |  00000393 | GREEK CAPITAL LETTER GAMMA
      C4 |  00000394 | GREEK CAPITAL LETTER DELTA
      C5 |  00000395 | GREEK CAPITAL LETTER EPSILON
      C6 |  00000396 | GREEK CAPITAL LETTER ZETA
      C7 |  00000397 | GREEK CAPITAL LETTER ETA
      C8 |  00000398 | GREEK CAPITAL LETTER THETA
      C9 |  00000399 | GREEK CAPITAL LETTER IOTA
      CA |  0000039A | GREEK CAPITAL LETTER KAPPA
      CB |  0000039B | GREEK CAPITAL LETTER LAMDA
      CC |  0000039C | GREEK CAPITAL LETTER MU
      CD |  0000039D | GREEK CAPITAL LETTER NU
      CE |  0000039E | GREEK CAPITAL LETTER XI
      CF |  0000039F | GREEK CAPITAL LETTER OMICRON
      D0 |  000003A0 | GREEK CAPITAL LETTER PI
      D1 |  000003A1 | GREEK CAPITAL LETTER RHO
      D3 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      D4 |  000003A4 | GREEK CAPITAL LETTER TAU
      D5 |  000003A5 | GREEK CAPITAL LETTER UPSILON
      D6 |  000003A6 | GREEK CAPITAL LETTER PHI
      D7 |  000003A7 | GREEK CAPITAL LETTER CHI
      D8 |  000003A8 | GREEK CAPITAL LETTER PSI
      D9 |  000003A9 | GREEK CAPITAL LETTER OMEGA
      DA |  000003AA | GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
      DB |  000003AB | GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
      DC |  000003AC | GREEK SMALL LETTER ALPHA WITH TONOS
      DD |  000003AD | GREEK SMALL LETTER EPSILON WITH TONOS
      DE |  000003AE | GREEK SMALL LETTER ETA WITH TONOS
      DF |  000003AF | GREEK SMALL LETTER IOTA WITH TONOS
      E0 |  000003B0 | GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
      E1 |  000003B1 | GREEK SMALL LETTER ALPHA
      E2 |  000003B2 | GREEK SMALL LETTER BETA
      E3 |  000003B3 | GREEK SMALL LETTER GAMMA
      E4 |  000003B4 | GREEK SMALL LETTER DELTA
      E5 |  000003B5 | GREEK SMALL LETTER EPSILON
      E6 |  000003B6 | GREEK SMALL LETTER ZETA
      E7 |  000003B7 | GREEK SMALL LETTER ETA
      E8 |  000003B8 | GREEK SMALL LETTER THETA
      E9 |  000003B9 | GREEK SMALL LETTER IOTA
      EA |  000003BA | GREEK SMALL LETTER KAPPA
      EB |  000003BB | GREEK SMALL LETTER LAMDA
      EC |  000003BC | GREEK SMALL LETTER MU
      ED |  000003BD | GREEK SMALL LETTER NU
      EE |  000003BE | GREEK SMALL LETTER XI
      EF |  000003BF | GREEK SMALL LETTER OMICRON
      F0 |  000003C0 | GREEK SMALL LETTER PI
      F1 |  000003C1 | GREEK SMALL LETTER RHO
      F2 |  000003C2 | GREEK SMALL LETTER FINAL SIGMA
      F3 |  000003C3 | GREEK SMALL LETTER SIGMA
      F4 |  000003C4 | GREEK SMALL LETTER TAU
      F5 |  000003C5 | GREEK SMALL LETTER UPSILON
      F6 |  000003C6 | GREEK SMALL LETTER PHI
      F7 |  000003C7 | GREEK SMALL LETTER CHI
      F8 |  000003C8 | GREEK SMALL LETTER PSI
      F9 |  000003C9 | GREEK SMALL LETTER OMEGA
      FA |  000003CA | GREEK SMALL LETTER IOTA WITH DIALYTIKA
      FB |  000003CB | GREEK SMALL LETTER UPSILON WITH DIALYTIKA
      FC |  000003CC | GREEK SMALL LETTER OMICRON WITH TONOS
      FD |  000003CD | GREEK SMALL LETTER UPSILON WITH TONOS
      FE |  000003CE | GREEK SMALL LETTER OMEGA WITH TONOS
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_CP1253

    $main::fatpacked{"Locale/RecodeData/CP1254.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_CP1254';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for CP1254.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::CP1254;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x20ac,
      0xfffd,
      0x201a,
      0x0192,
      0x201e,
      0x2026,
      0x2020,
      0x2021,
      0x02c6,
      0x2030,
      0x0160,
      0x2039,
      0x0152,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x2018,
      0x2019,
      0x201c,
      0x201d,
      0x2022,
      0x2013,
      0x2014,
      0x02dc,
      0x2122,
      0x0161,
      0x203a,
      0x0153,
      0xfffd,
      0xfffd,
      0x0178,
      0x00a0,
      0x00a1,
      0x00a2,
      0x00a3,
      0x00a4,
      0x00a5,
      0x00a6,
      0x00a7,
      0x00a8,
      0x00a9,
      0x00aa,
      0x00ab,
      0x00ac,
      0x00ad,
      0x00ae,
      0x00af,
      0x00b0,
      0x00b1,
      0x00b2,
      0x00b3,
      0x00b4,
      0x00b5,
      0x00b6,
      0x00b7,
      0x00b8,
      0x00b9,
      0x00ba,
      0x00bb,
      0x00bc,
      0x00bd,
      0x00be,
      0x00bf,
      0x00c0,
      0x00c1,
      0x00c2,
      0x00c3,
      0x00c4,
      0x00c5,
      0x00c6,
      0x00c7,
      0x00c8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00cc,
      0x00cd,
      0x00ce,
      0x00cf,
      0x011e,
      0x00d1,
      0x00d2,
      0x00d3,
      0x00d4,
      0x00d5,
      0x00d6,
      0x00d7,
      0x00d8,
      0x00d9,
      0x00da,
      0x00db,
      0x00dc,
      0x0130,
      0x015e,
      0x00df,
      0x00e0,
      0x00e1,
      0x00e2,
      0x00e3,
      0x00e4,
      0x00e5,
      0x00e6,
      0x00e7,
      0x00e8,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00ec,
      0x00ed,
      0x00ee,
      0x00ef,
      0x011f,
      0x00f1,
      0x00f2,
      0x00f3,
      0x00f4,
      0x00f5,
      0x00f6,
      0x00f7,
      0x00f8,
      0x00f9,
      0x00fa,
      0x00fb,
      0x00fc,
      0x0131,
      0x015f,
      0x00ff,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xe2\x82\xac",
      "\xef\xbf\xbd",
      "\xe2\x80\x9a",
      "\xc6\x92",
      "\xe2\x80\x9e",
      "\xe2\x80\xa6",
      "\xe2\x80\xa0",
      "\xe2\x80\xa1",
      "\xcb\x86",
      "\xe2\x80\xb0",
      "\xc5\xa0",
      "\xe2\x80\xb9",
      "\xc5\x92",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\xa2",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xcb\x9c",
      "\xe2\x84\xa2",
      "\xc5\xa1",
      "\xe2\x80\xba",
      "\xc5\x93",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc5\xb8",
      "\xc2\xa0",
      "\xc2\xa1",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa4",
      "\xc2\xa5",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc2\xa9",
      "\xc2\xaa",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xc2\xaf",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xc2\xb4",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xc2\xb8",
      "\xc2\xb9",
      "\xc2\xba",
      "\xc2\xbb",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc2\xbf",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x82",
      "\xc3\x83",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x86",
      "\xc3\x87",
      "\xc3\x88",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x8c",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc4\x9e",
      "\xc3\x91",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x94",
      "\xc3\x95",
      "\xc3\x96",
      "\xc3\x97",
      "\xc3\x98",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc4\xb0",
      "\xc5\x9e",
      "\xc3\x9f",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc3\xa3",
      "\xc3\xa4",
      "\xc3\xa5",
      "\xc3\xa6",
      "\xc3\xa7",
      "\xc3\xa8",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xac",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc4\x9f",
      "\xc3\xb1",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc3\xb5",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc3\xb8",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc4\xb1",
      "\xc5\x9f",
      "\xc3\xbf",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xa0",
      0x000000a1 => "\xa1",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xa4",
      0x000000a5 => "\xa5",
      0x000000a6 => "\xa6",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xa8",
      0x000000a9 => "\xa9",
      0x000000aa => "\xaa",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000af => "\xaf",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b2 => "\xb2",
      0x000000b3 => "\xb3",
      0x000000b4 => "\xb4",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000b8 => "\xb8",
      0x000000b9 => "\xb9",
      0x000000ba => "\xba",
      0x000000bb => "\xbb",
      0x000000bc => "\xbc",
      0x000000bd => "\xbd",
      0x000000be => "\xbe",
      0x000000bf => "\xbf",
      0x000000c0 => "\xc0",
      0x000000c1 => "\xc1",
      0x000000c2 => "\xc2",
      0x000000c3 => "\xc3",
      0x000000c4 => "\xc4",
      0x000000c5 => "\xc5",
      0x000000c6 => "\xc6",
      0x000000c7 => "\xc7",
      0x000000c8 => "\xc8",
      0x000000c9 => "\xc9",
      0x000000ca => "\xca",
      0x000000cb => "\xcb",
      0x000000cc => "\xcc",
      0x000000cd => "\xcd",
      0x000000ce => "\xce",
      0x000000cf => "\xcf",
      0x000000d1 => "\xd1",
      0x000000d2 => "\xd2",
      0x000000d3 => "\xd3",
      0x000000d4 => "\xd4",
      0x000000d5 => "\xd5",
      0x000000d6 => "\xd6",
      0x000000d7 => "\xd7",
      0x000000d8 => "\xd8",
      0x000000d9 => "\xd9",
      0x000000da => "\xda",
      0x000000db => "\xdb",
      0x000000dc => "\xdc",
      0x000000df => "\xdf",
      0x000000e0 => "\xe0",
      0x000000e1 => "\xe1",
      0x000000e2 => "\xe2",
      0x000000e3 => "\xe3",
      0x000000e4 => "\xe4",
      0x000000e5 => "\xe5",
      0x000000e6 => "\xe6",
      0x000000e7 => "\xe7",
      0x000000e8 => "\xe8",
      0x000000e9 => "\xe9",
      0x000000ea => "\xea",
      0x000000eb => "\xeb",
      0x000000ec => "\xec",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000ef => "\xef",
      0x000000f1 => "\xf1",
      0x000000f2 => "\xf2",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f5 => "\xf5",
      0x000000f6 => "\xf6",
      0x000000f7 => "\xf7",
      0x000000f8 => "\xf8",
      0x000000f9 => "\xf9",
      0x000000fa => "\xfa",
      0x000000fb => "\xfb",
      0x000000fc => "\xfc",
      0x000000ff => "\xff",
      0x0000011e => "\xd0",
      0x0000011f => "\xf0",
      0x00000130 => "\xdd",
      0x00000131 => "\xfd",
      0x00000152 => "\x8c",
      0x00000153 => "\x9c",
      0x0000015e => "\xde",
      0x0000015f => "\xfe",
      0x00000160 => "\x8a",
      0x00000161 => "\x9a",
      0x00000178 => "\x9f",
      0x00000192 => "\x83",
      0x000002c6 => "\x88",
      0x000002dc => "\x98",
      0x00002013 => "\x96",
      0x00002014 => "\x97",
      0x00002018 => "\x91",
      0x00002019 => "\x92",
      0x0000201a => "\x82",
      0x0000201c => "\x93",
      0x0000201d => "\x94",
      0x0000201e => "\x84",
      0x00002020 => "\x86",
      0x00002021 => "\x87",
      0x00002022 => "\x95",
      0x00002026 => "\x85",
      0x00002030 => "\x89",
      0x00002039 => "\x8b",
      0x0000203a => "\x9b",
      0x000020ac => "\x80",
      0x00002122 => "\x99",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::CP1254 - Conversion routines for CP1254
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for CP1254.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
   repertoiremap: mnemonic,ds
    source: UNICODE 1.0
   alias MS-TURK
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000020AC | EURO SIGN
      82 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      83 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      84 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      85 |  00002026 | HORIZONTAL ELLIPSIS
      86 |  00002020 | DAGGER
      87 |  00002021 | DOUBLE DAGGER
      88 |  000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT
      89 |  00002030 | PER MILLE SIGN
      8A |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      8B |  00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
      8C |  00000152 | LATIN CAPITAL LIGATURE OE
      91 |  00002018 | LEFT SINGLE QUOTATION MARK
      92 |  00002019 | RIGHT SINGLE QUOTATION MARK
      93 |  0000201C | LEFT DOUBLE QUOTATION MARK
      94 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      95 |  00002022 | BULLET
      96 |  00002013 | EN DASH
      97 |  00002014 | EM DASH
      98 |  000002DC | SMALL TILDE
      99 |  00002122 | TRADE MARK SIGN
      9A |  00000161 | LATIN SMALL LETTER S WITH CARON
      9B |  0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
      9C |  00000153 | LATIN SMALL LIGATURE OE
      9F |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  000000A1 | INVERTED EXCLAMATION MARK
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  000000A5 | YEN SIGN
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  000000AA | FEMININE ORDINAL INDICATOR
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  000000AF | MACRON
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  000000B3 | SUPERSCRIPT THREE
      B4 |  000000B4 | ACUTE ACCENT
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  000000B8 | CEDILLA
      B9 |  000000B9 | SUPERSCRIPT ONE
      BA |  000000BA | MASCULINE ORDINAL INDICATOR
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  000000BC | VULGAR FRACTION ONE QUARTER
      BD |  000000BD | VULGAR FRACTION ONE HALF
      BE |  000000BE | VULGAR FRACTION THREE QUARTERS
      BF |  000000BF | INVERTED QUESTION MARK
      C0 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C3 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      C6 |  000000C6 | LATIN CAPITAL LETTER AE
      C7 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      C8 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      CB |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      CC |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      CF |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      D0 |  0000011E | LATIN CAPITAL LETTER G WITH BREVE
      D1 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      D2 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  000000D7 | MULTIPLICATION SIGN
      D8 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      D9 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  00000130 | LATIN CAPITAL LETTER I WITH DOT ABOVE
      DE |  0000015E | LATIN CAPITAL LETTER S WITH CEDILLA
      DF |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E0 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      E6 |  000000E6 | LATIN SMALL LETTER AE
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  000000EC | LATIN SMALL LETTER E WITH GRAVE
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      F0 |  0000011F | LATIN SMALL LETTER G WITH BREVE
      F1 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      F2 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  000000F7 | DIVISION SIGN
      F8 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      F9 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  00000131 | LATIN SMALL LETTER DOTLESS I
      FE |  0000015F | LATIN SMALL LETTER S WITH CEDILLA
      FF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_CP1254

    $main::fatpacked{"Locale/RecodeData/CP1256.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_CP1256';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for CP1256.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::CP1256;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x20ac,
      0x067e,
      0x201a,
      0x0192,
      0x201e,
      0x2026,
      0x2020,
      0x2021,
      0x02c6,
      0x2030,
      0x0679,
      0x2039,
      0x0152,
      0x0686,
      0x0698,
      0x0688,
      0x06af,
      0x2018,
      0x2019,
      0x201c,
      0x201d,
      0x2022,
      0x2013,
      0x2014,
      0x06a9,
      0x2122,
      0x0691,
      0x203a,
      0x0153,
      0x200c,
      0x200d,
      0x06ba,
      0x00a0,
      0x060c,
      0x00a2,
      0x00a3,
      0x00a4,
      0x00a5,
      0x00a6,
      0x00a7,
      0x00a8,
      0x00a9,
      0x06be,
      0x00ab,
      0x00ac,
      0x00ad,
      0x00ae,
      0x00af,
      0x00b0,
      0x00b1,
      0x00b2,
      0x00b3,
      0x00b4,
      0x00b5,
      0x00b6,
      0x00b7,
      0x00b8,
      0x00b9,
      0x061b,
      0x00bb,
      0x00bc,
      0x00bd,
      0x00be,
      0x061f,
      0x06c1,
      0x0621,
      0x0622,
      0x0623,
      0x0624,
      0x0625,
      0x0626,
      0x0627,
      0x0628,
      0x0629,
      0x062a,
      0x062b,
      0x062c,
      0x062d,
      0x062e,
      0x062f,
      0x0630,
      0x0631,
      0x0632,
      0x0633,
      0x0634,
      0x0635,
      0x0636,
      0x00d7,
      0x0637,
      0x0638,
      0x0639,
      0x063a,
      0x0640,
      0x0641,
      0x0642,
      0x0643,
      0x00e0,
      0x0644,
      0x00e2,
      0x0645,
      0x0646,
      0x0647,
      0x0648,
      0x00e7,
      0x00e8,
      0x00e9,
      0x00ea,
      0x00eb,
      0x0649,
      0x064a,
      0x00ee,
      0x00ef,
      0x064b,
      0x064c,
      0x064d,
      0x064e,
      0x00f4,
      0x064f,
      0x0650,
      0x00f7,
      0x0651,
      0x00f9,
      0x0652,
      0x00fb,
      0x00fc,
      0x200e,
      0x200f,
      0x06d2,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xe2\x82\xac",
      "\xd9\xbe",
      "\xe2\x80\x9a",
      "\xc6\x92",
      "\xe2\x80\x9e",
      "\xe2\x80\xa6",
      "\xe2\x80\xa0",
      "\xe2\x80\xa1",
      "\xcb\x86",
      "\xe2\x80\xb0",
      "\xd9\xb9",
      "\xe2\x80\xb9",
      "\xc5\x92",
      "\xda\x86",
      "\xda\x98",
      "\xda\x88",
      "\xda\xaf",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\xa2",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xda\xa9",
      "\xe2\x84\xa2",
      "\xda\x91",
      "\xe2\x80\xba",
      "\xc5\x93",
      "\xe2\x80\x8c",
      "\xe2\x80\x8d",
      "\xda\xba",
      "\xc2\xa0",
      "\xd8\x8c",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa4",
      "\xc2\xa5",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc2\xa9",
      "\xda\xbe",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xc2\xaf",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xc2\xb4",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xc2\xb8",
      "\xc2\xb9",
      "\xd8\x9b",
      "\xc2\xbb",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xd8\x9f",
      "\xdb\x81",
      "\xd8\xa1",
      "\xd8\xa2",
      "\xd8\xa3",
      "\xd8\xa4",
      "\xd8\xa5",
      "\xd8\xa6",
      "\xd8\xa7",
      "\xd8\xa8",
      "\xd8\xa9",
      "\xd8\xaa",
      "\xd8\xab",
      "\xd8\xac",
      "\xd8\xad",
      "\xd8\xae",
      "\xd8\xaf",
      "\xd8\xb0",
      "\xd8\xb1",
      "\xd8\xb2",
      "\xd8\xb3",
      "\xd8\xb4",
      "\xd8\xb5",
      "\xd8\xb6",
      "\xc3\x97",
      "\xd8\xb7",
      "\xd8\xb8",
      "\xd8\xb9",
      "\xd8\xba",
      "\xd9\x80",
      "\xd9\x81",
      "\xd9\x82",
      "\xd9\x83",
      "\xc3\xa0",
      "\xd9\x84",
      "\xc3\xa2",
      "\xd9\x85",
      "\xd9\x86",
      "\xd9\x87",
      "\xd9\x88",
      "\xc3\xa7",
      "\xc3\xa8",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xd9\x89",
      "\xd9\x8a",
      "\xc3\xae",
      "\xc3\xaf",
      "\xd9\x8b",
      "\xd9\x8c",
      "\xd9\x8d",
      "\xd9\x8e",
      "\xc3\xb4",
      "\xd9\x8f",
      "\xd9\x90",
      "\xc3\xb7",
      "\xd9\x91",
      "\xc3\xb9",
      "\xd9\x92",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xe2\x80\x8e",
      "\xe2\x80\x8f",
      "\xdb\x92",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xa0",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xa4",
      0x000000a5 => "\xa5",
      0x000000a6 => "\xa6",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xa8",
      0x000000a9 => "\xa9",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000af => "\xaf",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b2 => "\xb2",
      0x000000b3 => "\xb3",
      0x000000b4 => "\xb4",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000b8 => "\xb8",
      0x000000b9 => "\xb9",
      0x000000bb => "\xbb",
      0x000000bc => "\xbc",
      0x000000bd => "\xbd",
      0x000000be => "\xbe",
      0x000000d7 => "\xd7",
      0x000000e0 => "\xe0",
      0x000000e2 => "\xe2",
      0x000000e7 => "\xe7",
      0x000000e8 => "\xe8",
      0x000000e9 => "\xe9",
      0x000000ea => "\xea",
      0x000000eb => "\xeb",
      0x000000ee => "\xee",
      0x000000ef => "\xef",
      0x000000f4 => "\xf4",
      0x000000f7 => "\xf7",
      0x000000f9 => "\xf9",
      0x000000fb => "\xfb",
      0x000000fc => "\xfc",
      0x00000152 => "\x8c",
      0x00000153 => "\x9c",
      0x00000192 => "\x83",
      0x000002c6 => "\x88",
      0x0000060c => "\xa1",
      0x0000061b => "\xba",
      0x0000061f => "\xbf",
      0x00000621 => "\xc1",
      0x00000622 => "\xc2",
      0x00000623 => "\xc3",
      0x00000624 => "\xc4",
      0x00000625 => "\xc5",
      0x00000626 => "\xc6",
      0x00000627 => "\xc7",
      0x00000628 => "\xc8",
      0x00000629 => "\xc9",
      0x0000062a => "\xca",
      0x0000062b => "\xcb",
      0x0000062c => "\xcc",
      0x0000062d => "\xcd",
      0x0000062e => "\xce",
      0x0000062f => "\xcf",
      0x00000630 => "\xd0",
      0x00000631 => "\xd1",
      0x00000632 => "\xd2",
      0x00000633 => "\xd3",
      0x00000634 => "\xd4",
      0x00000635 => "\xd5",
      0x00000636 => "\xd6",
      0x00000637 => "\xd8",
      0x00000638 => "\xd9",
      0x00000639 => "\xda",
      0x0000063a => "\xdb",
      0x00000640 => "\xdc",
      0x00000641 => "\xdd",
      0x00000642 => "\xde",
      0x00000643 => "\xdf",
      0x00000644 => "\xe1",
      0x00000645 => "\xe3",
      0x00000646 => "\xe4",
      0x00000647 => "\xe5",
      0x00000648 => "\xe6",
      0x00000649 => "\xec",
      0x0000064a => "\xed",
      0x0000064b => "\xf0",
      0x0000064c => "\xf1",
      0x0000064d => "\xf2",
      0x0000064e => "\xf3",
      0x0000064f => "\xf5",
      0x00000650 => "\xf6",
      0x00000651 => "\xf8",
      0x00000652 => "\xfa",
      0x00000679 => "\x8a",
      0x0000067e => "\x81",
      0x00000686 => "\x8d",
      0x00000688 => "\x8f",
      0x00000691 => "\x9a",
      0x00000698 => "\x8e",
      0x000006a9 => "\x98",
      0x000006af => "\x90",
      0x000006ba => "\x9f",
      0x000006be => "\xaa",
      0x000006c1 => "\xc0",
      0x000006d2 => "\xff",
      0x0000200c => "\x9d",
      0x0000200d => "\x9e",
      0x0000200e => "\xfd",
      0x0000200f => "\xfe",
      0x00002013 => "\x96",
      0x00002014 => "\x97",
      0x00002018 => "\x91",
      0x00002019 => "\x92",
      0x0000201a => "\x82",
      0x0000201c => "\x93",
      0x0000201d => "\x94",
      0x0000201e => "\x84",
      0x00002020 => "\x86",
      0x00002021 => "\x87",
      0x00002022 => "\x95",
      0x00002026 => "\x85",
      0x00002030 => "\x89",
      0x00002039 => "\x8b",
      0x0000203a => "\x9b",
      0x000020ac => "\x80",
      0x00002122 => "\x99",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::CP1256 - Conversion routines for CP1256
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for CP1256.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
   repertoiremap: mnemonic,ds
    source: UNICODE 1.0
   alias MS-ARAB
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000020AC | EURO SIGN
      81 |  0000067E | ARABIC LETTER PEH
      82 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      83 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      84 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      85 |  00002026 | HORIZONTAL ELLIPSIS
      86 |  00002020 | DAGGER
      87 |  00002021 | DOUBLE DAGGER
      88 |  000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT
      89 |  00002030 | PER MILLE SIGN
      8A |  00000679 | ARABIC LETTER TTEH
      8B |  00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
      8C |  00000152 | LATIN CAPITAL LIGATURE OE
      8D |  00000686 | ARABIC LETTER TCHEH
      8E |  00000698 | ARABIC LETTER JEH
      8F |  00000688 | ARABIC LETTER DDAL
      90 |  000006AF | ARABIC LETTER GAF
      91 |  00002018 | LEFT SINGLE QUOTATION MARK
      92 |  00002019 | RIGHT SINGLE QUOTATION MARK
      93 |  0000201C | LEFT DOUBLE QUOTATION MARK
      94 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      95 |  00002022 | BULLET
      96 |  00002013 | EN DASH
      97 |  00002014 | EM DASH
      98 |  000006A9 | ARABIC LETTER KEHEH
      99 |  00002122 | TRADE MARK SIGN
      9A |  00000691 | ARABIC LETTER RREH
      9B |  0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
      9C |  00000153 | LATIN SMALL LIGATURE OE
      9D |  0000200C | ZERO WIDTH NON-JOINER
      9E |  0000200D | ZERO WIDTH JOINER
      9F |  000006BA | ARABIC LETTER NOON
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  0000060C | ARABIC COMMA
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  000000A5 | YEN SIGN
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  000006BE | ARABIC LETTER HEH DOACHASHMEE
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  000000AF | MACRON
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  000000B3 | SUPERSCRIPT THREE
      B4 |  000000B4 | ACUTE ACCENT
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  000000B8 | CEDILLA
      B9 |  000000B9 | SUPERSCRIPT ONE
      BA |  0000061B | ARABIC SEMICOLON
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  000000BC | VULGAR FRACTION ONE QUARTER
      BD |  000000BD | VULGAR FRACTION ONE HALF
      BE |  000000BE | VULGAR FRACTION THREE QUARTERS
      BF |  0000061F | ARABIC QUESTION MARK
      C0 |  000006C1 | ARABIC LETTER HEH GOAL
      C1 |  00000621 | ARABIC LETTER HAMZA
      C2 |  00000622 | ARABIC LETTER ALEF WITH MADDA ABOVE
      C3 |  00000623 | ARABIC LETTER ALEF WITH HAMZA ABOVE
      C4 |  00000624 | ARABIC LETTER WAW WITH HAMZA ABOVE
      C5 |  00000625 | ARABIC LETTER ALEF WITH HAMZA BELOW
      C6 |  00000626 | ARABIC LETTER YEH WITH HAMZA ABOVE
      C7 |  00000627 | ARABIC LETTER ALEF
      C8 |  00000628 | ARABIC LETTER BEH
      C9 |  00000629 | ARABIC LETTER TEH MARBUTA
      CA |  0000062A | ARABIC LETTER TEH
      CB |  0000062B | ARABIC LETTER THEH
      CC |  0000062C | ARABIC LETTER JEEM
      CD |  0000062D | ARABIC LETTER HAH
      CE |  0000062E | ARABIC LETTER KHAH
      CF |  0000062F | ARABIC LETTER DAL
      D0 |  00000630 | ARABIC LETTER THAL
      D1 |  00000631 | ARABIC LETTER REH
      D2 |  00000632 | ARABIC LETTER ZAIN
      D3 |  00000633 | ARABIC LETTER SEEN
      D4 |  00000634 | ARABIC LETTER SHEEN
      D5 |  00000635 | ARABIC LETTER SAD
      D6 |  00000636 | ARABIC LETTER DAD
      D7 |  000000D7 | MULTIPLICATION SIGN
      D8 |  00000637 | ARABIC LETTER TAH
      D9 |  00000638 | ARABIC LETTER ZAH
      DA |  00000639 | ARABIC LETTER AIN
      DB |  0000063A | ARABIC LETTER GHAIN
      DC |  00000640 | ARABIC TATWEEL
      DD |  00000641 | ARABIC LETTER FEH
      DE |  00000642 | ARABIC LETTER QAF
      DF |  00000643 | ARABIC LETTER KAF
      E0 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      E1 |  00000644 | ARABIC LETTER LAM
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  00000645 | ARABIC LETTER MEEM
      E4 |  00000646 | ARABIC LETTER NOON
      E5 |  00000647 | ARABIC LETTER HEH
      E6 |  00000648 | ARABIC LETTER WAW
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  00000649 | ARABIC LETTER ALEF MAKSURA
      ED |  0000064A | ARABIC LETTER YEH
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      F0 |  0000064B | ARABIC FATHATAN
      F1 |  0000064C | ARABIC DAMMATAN
      F2 |  0000064D | ARABIC KASRATAN
      F3 |  0000064E | ARABIC FATHA
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  0000064F | ARABIC DAMMA
      F6 |  00000650 | ARABIC KASRA
      F7 |  000000F7 | DIVISION SIGN
      F8 |  00000651 | ARABIC SHADDA
      F9 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      FA |  00000652 | ARABIC SUKUN
      FB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  0000200E | LEFT-TO-RIGHT MARK
      FE |  0000200F | RIGHT-TO-LEFT MARK
      FF |  000006D2 | ARABIC LETTER YEH BARREE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_CP1256

    $main::fatpacked{"Locale/RecodeData/CP1257.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_CP1257';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for CP1257.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::CP1257;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x20ac,
      0xfffd,
      0x201a,
      0xfffd,
      0x201e,
      0x2026,
      0x2020,
      0x2021,
      0xfffd,
      0x2030,
      0xfffd,
      0x2039,
      0xfffd,
      0x00a8,
      0x02c7,
      0x00b8,
      0xfffd,
      0x2018,
      0x2019,
      0x201c,
      0x201d,
      0x2022,
      0x2013,
      0x2014,
      0xfffd,
      0x2122,
      0xfffd,
      0x203a,
      0xfffd,
      0x00af,
      0x02db,
      0xfffd,
      0x00a0,
      0xfffd,
      0x00a2,
      0x00a3,
      0x00a4,
      0xfffd,
      0x00a6,
      0x00a7,
      0x00d8,
      0x00a9,
      0x0156,
      0x00ab,
      0x00ac,
      0x00ad,
      0x00ae,
      0x00c6,
      0x00b0,
      0x00b1,
      0x00b2,
      0x00b3,
      0x00b4,
      0x00b5,
      0x00b6,
      0x00b7,
      0x00f8,
      0x00b9,
      0x0157,
      0x00bb,
      0x00bc,
      0x00bd,
      0x00be,
      0x00e6,
      0x0104,
      0x012e,
      0x0100,
      0x0106,
      0x00c4,
      0x00c5,
      0x0118,
      0x0112,
      0x010c,
      0x00c9,
      0x0179,
      0x0116,
      0x0122,
      0x0136,
      0x012a,
      0x013b,
      0x0160,
      0x0143,
      0x0145,
      0x00d3,
      0x014c,
      0x00d5,
      0x00d6,
      0x00d7,
      0x0172,
      0x0141,
      0x015a,
      0x016a,
      0x00dc,
      0x017b,
      0x017d,
      0x00df,
      0x0105,
      0x012f,
      0x0101,
      0x0107,
      0x00e4,
      0x00e5,
      0x0119,
      0x0113,
      0x010d,
      0x00e9,
      0x017a,
      0x0117,
      0x0123,
      0x0137,
      0x012b,
      0x013c,
      0x0161,
      0x0144,
      0x0146,
      0x00f3,
      0x014d,
      0x00f5,
      0x00f6,
      0x00f7,
      0x0173,
      0x0142,
      0x015b,
      0x016b,
      0x00fc,
      0x017c,
      0x017e,
      0x02d9,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xe2\x82\xac",
      "\xef\xbf\xbd",
      "\xe2\x80\x9a",
      "\xef\xbf\xbd",
      "\xe2\x80\x9e",
      "\xe2\x80\xa6",
      "\xe2\x80\xa0",
      "\xe2\x80\xa1",
      "\xef\xbf\xbd",
      "\xe2\x80\xb0",
      "\xef\xbf\xbd",
      "\xe2\x80\xb9",
      "\xef\xbf\xbd",
      "\xc2\xa8",
      "\xcb\x87",
      "\xc2\xb8",
      "\xef\xbf\xbd",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\xa2",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xef\xbf\xbd",
      "\xe2\x84\xa2",
      "\xef\xbf\xbd",
      "\xe2\x80\xba",
      "\xef\xbf\xbd",
      "\xc2\xaf",
      "\xcb\x9b",
      "\xef\xbf\xbd",
      "\xc2\xa0",
      "\xef\xbf\xbd",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa4",
      "\xef\xbf\xbd",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xc3\x98",
      "\xc2\xa9",
      "\xc5\x96",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xc3\x86",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xc2\xb4",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xc3\xb8",
      "\xc2\xb9",
      "\xc5\x97",
      "\xc2\xbb",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc3\xa6",
      "\xc4\x84",
      "\xc4\xae",
      "\xc4\x80",
      "\xc4\x86",
      "\xc3\x84",
      "\xc3\x85",
      "\xc4\x98",
      "\xc4\x92",
      "\xc4\x8c",
      "\xc3\x89",
      "\xc5\xb9",
      "\xc4\x96",
      "\xc4\xa2",
      "\xc4\xb6",
      "\xc4\xaa",
      "\xc4\xbb",
      "\xc5\xa0",
      "\xc5\x83",
      "\xc5\x85",
      "\xc3\x93",
      "\xc5\x8c",
      "\xc3\x95",
      "\xc3\x96",
      "\xc3\x97",
      "\xc5\xb2",
      "\xc5\x81",
      "\xc5\x9a",
      "\xc5\xaa",
      "\xc3\x9c",
      "\xc5\xbb",
      "\xc5\xbd",
      "\xc3\x9f",
      "\xc4\x85",
      "\xc4\xaf",
      "\xc4\x81",
      "\xc4\x87",
      "\xc3\xa4",
      "\xc3\xa5",
      "\xc4\x99",
      "\xc4\x93",
      "\xc4\x8d",
      "\xc3\xa9",
      "\xc5\xba",
      "\xc4\x97",
      "\xc4\xa3",
      "\xc4\xb7",
      "\xc4\xab",
      "\xc4\xbc",
      "\xc5\xa1",
      "\xc5\x84",
      "\xc5\x86",
      "\xc3\xb3",
      "\xc5\x8d",
      "\xc3\xb5",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc5\xb3",
      "\xc5\x82",
      "\xc5\x9b",
      "\xc5\xab",
      "\xc3\xbc",
      "\xc5\xbc",
      "\xc5\xbe",
      "\xcb\x99",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xa0",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xa4",
      0x000000a6 => "\xa6",
      0x000000a7 => "\xa7",
      0x000000a8 => "\x8d",
      0x000000a9 => "\xa9",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000af => "\x9d",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b2 => "\xb2",
      0x000000b3 => "\xb3",
      0x000000b4 => "\xb4",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000b8 => "\x8f",
      0x000000b9 => "\xb9",
      0x000000bb => "\xbb",
      0x000000bc => "\xbc",
      0x000000bd => "\xbd",
      0x000000be => "\xbe",
      0x000000c4 => "\xc4",
      0x000000c5 => "\xc5",
      0x000000c6 => "\xaf",
      0x000000c9 => "\xc9",
      0x000000d3 => "\xd3",
      0x000000d5 => "\xd5",
      0x000000d6 => "\xd6",
      0x000000d7 => "\xd7",
      0x000000d8 => "\xa8",
      0x000000dc => "\xdc",
      0x000000df => "\xdf",
      0x000000e4 => "\xe4",
      0x000000e5 => "\xe5",
      0x000000e6 => "\xbf",
      0x000000e9 => "\xe9",
      0x000000f3 => "\xf3",
      0x000000f5 => "\xf5",
      0x000000f6 => "\xf6",
      0x000000f7 => "\xf7",
      0x000000f8 => "\xb8",
      0x000000fc => "\xfc",
      0x00000100 => "\xc2",
      0x00000101 => "\xe2",
      0x00000104 => "\xc0",
      0x00000105 => "\xe0",
      0x00000106 => "\xc3",
      0x00000107 => "\xe3",
      0x0000010c => "\xc8",
      0x0000010d => "\xe8",
      0x00000112 => "\xc7",
      0x00000113 => "\xe7",
      0x00000116 => "\xcb",
      0x00000117 => "\xeb",
      0x00000118 => "\xc6",
      0x00000119 => "\xe6",
      0x00000122 => "\xcc",
      0x00000123 => "\xec",
      0x0000012a => "\xce",
      0x0000012b => "\xee",
      0x0000012e => "\xc1",
      0x0000012f => "\xe1",
      0x00000136 => "\xcd",
      0x00000137 => "\xed",
      0x0000013b => "\xcf",
      0x0000013c => "\xef",
      0x00000141 => "\xd9",
      0x00000142 => "\xf9",
      0x00000143 => "\xd1",
      0x00000144 => "\xf1",
      0x00000145 => "\xd2",
      0x00000146 => "\xf2",
      0x0000014c => "\xd4",
      0x0000014d => "\xf4",
      0x00000156 => "\xaa",
      0x00000157 => "\xba",
      0x0000015a => "\xda",
      0x0000015b => "\xfa",
      0x00000160 => "\xd0",
      0x00000161 => "\xf0",
      0x0000016a => "\xdb",
      0x0000016b => "\xfb",
      0x00000172 => "\xd8",
      0x00000173 => "\xf8",
      0x00000179 => "\xca",
      0x0000017a => "\xea",
      0x0000017b => "\xdd",
      0x0000017c => "\xfd",
      0x0000017d => "\xde",
      0x0000017e => "\xfe",
      0x000002c7 => "\x8e",
      0x000002d9 => "\xff",
      0x000002db => "\x9e",
      0x00002013 => "\x96",
      0x00002014 => "\x97",
      0x00002018 => "\x91",
      0x00002019 => "\x92",
      0x0000201a => "\x82",
      0x0000201c => "\x93",
      0x0000201d => "\x94",
      0x0000201e => "\x84",
      0x00002020 => "\x86",
      0x00002021 => "\x87",
      0x00002022 => "\x95",
      0x00002026 => "\x85",
      0x00002030 => "\x89",
      0x00002039 => "\x8b",
      0x0000203a => "\x9b",
      0x000020ac => "\x80",
      0x00002122 => "\x99",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::CP1257 - Conversion routines for CP1257
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for CP1257.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: CEN/TC304 N283
   alias WINBALTRIM
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000020AC | EURO SIGN
      82 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      84 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      85 |  00002026 | HORIZONTAL ELLIPSIS
      86 |  00002020 | DAGGER
      87 |  00002021 | DOUBLE DAGGER
      89 |  00002030 | PER MILLE SIGN
      8B |  00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
      8D |  000000A8 | DIAERESIS
      8E |  000002C7 | CARON (Mandarin Chinese third tone)
      8F |  000000B8 | CEDILLA
      91 |  00002018 | LEFT SINGLE QUOTATION MARK
      92 |  00002019 | RIGHT SINGLE QUOTATION MARK
      93 |  0000201C | LEFT DOUBLE QUOTATION MARK
      94 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      95 |  00002022 | BULLET
      96 |  00002013 | EN DASH
      97 |  00002014 | EM DASH
      99 |  00002122 | TRADE MARK SIGN
      9B |  0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
      9D |  000000AF | MACRON
      9E |  000002DB | OGONEK
      A0 |  000000A0 | NO-BREAK SPACE
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A4 | CURRENCY SIGN
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  00000156 | LATIN CAPITAL LETTER R WITH CEDILLA
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  000000C6 | LATIN CAPITAL LETTER AE
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  000000B3 | SUPERSCRIPT THREE
      B4 |  000000B4 | ACUTE ACCENT
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      B9 |  000000B9 | SUPERSCRIPT ONE
      BA |  00000157 | LATIN SMALL LETTER R WITH CEDILLA
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  000000BC | VULGAR FRACTION ONE QUARTER
      BD |  000000BD | VULGAR FRACTION ONE HALF
      BE |  000000BE | VULGAR FRACTION THREE QUARTERS
      BF |  000000E6 | LATIN SMALL LETTER AE
      C0 |  00000104 | LATIN CAPITAL LETTER A WITH OGONEK
      C1 |  0000012E | LATIN CAPITAL LETTER I WITH OGONEK
      C2 |  00000100 | LATIN CAPITAL LETTER A WITH MACRON
      C3 |  00000106 | LATIN CAPITAL LETTER C WITH ACUTE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      C6 |  00000118 | LATIN CAPITAL LETTER E WITH OGONEK
      C7 |  00000112 | LATIN CAPITAL LETTER E WITH MACRON
      C8 |  0000010C | LATIN CAPITAL LETTER C WITH CARON
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  00000179 | LATIN CAPITAL LETTER Z WITH ACUTE
      CB |  00000116 | LATIN CAPITAL LETTER E WITH DOT ABOVE
      CC |  00000122 | LATIN CAPITAL LETTER G WITH CEDILLA
      CD |  00000136 | LATIN CAPITAL LETTER K WITH CEDILLA
      CE |  0000012A | LATIN CAPITAL LETTER I WITH MACRON
      CF |  0000013B | LATIN CAPITAL LETTER L WITH CEDILLA
      D0 |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      D1 |  00000143 | LATIN CAPITAL LETTER N WITH ACUTE
      D2 |  00000145 | LATIN CAPITAL LETTER N WITH CEDILLA
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  0000014C | LATIN CAPITAL LETTER O WITH MACRON
      D5 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  000000D7 | MULTIPLICATION SIGN
      D8 |  00000172 | LATIN CAPITAL LETTER U WITH OGONEK
      D9 |  00000141 | LATIN CAPITAL LETTER L WITH STROKE
      DA |  0000015A | LATIN CAPITAL LETTER S WITH ACUTE
      DB |  0000016A | LATIN CAPITAL LETTER U WITH MACRON
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE
      DE |  0000017D | LATIN CAPITAL LETTER Z WITH CARON
      DF |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E0 |  00000105 | LATIN SMALL LETTER A WITH OGONEK
      E1 |  0000012F | LATIN SMALL LETTER I WITH OGONEK
      E2 |  00000101 | LATIN SMALL LETTER A WITH MACRON
      E3 |  00000107 | LATIN SMALL LETTER C WITH ACUTE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      E6 |  00000119 | LATIN SMALL LETTER E WITH OGONEK
      E7 |  00000113 | LATIN SMALL LETTER E WITH MACRON
      E8 |  0000010D | LATIN SMALL LETTER C WITH CARON
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  0000017A | LATIN SMALL LETTER Z WITH ACUTE
      EB |  00000117 | LATIN SMALL LETTER E WITH DOT ABOVE
      EC |  00000123 | LATIN SMALL LETTER G WITH CEDILLA
      ED |  00000137 | LATIN SMALL LETTER K WITH CEDILLA
      EE |  0000012B | LATIN SMALL LETTER I WITH MACRON
      EF |  0000013C | LATIN SMALL LETTER L WITH CEDILLA
      F0 |  00000161 | LATIN SMALL LETTER S WITH CARON
      F1 |  00000144 | LATIN SMALL LETTER N WITH ACUTE
      F2 |  00000146 | LATIN SMALL LETTER N WITH CEDILLA
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  0000014D | LATIN SMALL LETTER O WITH MACRON
      F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  000000F7 | DIVISION SIGN
      F8 |  00000173 | LATIN SMALL LETTER U WITH OGONEK
      F9 |  00000142 | LATIN SMALL LETTER L WITH STROKE
      FA |  0000015B | LATIN SMALL LETTER S WITH ACUTE
      FB |  0000016B | LATIN SMALL LETTER U WITH MACRON
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE
      FE |  0000017E | LATIN SMALL LETTER Z WITH CARON
      FF |  000002D9 | DOT ABOVE (Mandarin Chinese light tone)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_CP1257

    $main::fatpacked{"Locale/RecodeData/CSN_369103.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_CSN_369103';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for CSN_369103.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::CSN_369103;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x00a4,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0x0104,
      0x02d8,
      0x0141,
      0x0024,
      0x013d,
      0x015a,
      0x00a7,
      0x00a8,
      0x0160,
      0x015e,
      0x0164,
      0x0179,
      0x00ad,
      0x017d,
      0x017b,
      0x00b0,
      0x0105,
      0x02db,
      0x0142,
      0x00b4,
      0x013e,
      0x015b,
      0x02c7,
      0x00b8,
      0x0161,
      0x015f,
      0x0165,
      0x017a,
      0x02dd,
      0x017e,
      0x017c,
      0x0154,
      0x00c1,
      0x00c2,
      0x0102,
      0x00c4,
      0x0139,
      0x0106,
      0x00c7,
      0x010c,
      0x00c9,
      0x0118,
      0x00cb,
      0x011a,
      0x00cd,
      0x00ce,
      0x010e,
      0x0110,
      0x0143,
      0x0147,
      0x00d3,
      0x00d4,
      0x0150,
      0x00d6,
      0x00d7,
      0x0158,
      0x016e,
      0x00da,
      0x0170,
      0x00dc,
      0x00dd,
      0x0162,
      0x00df,
      0x0155,
      0x00e1,
      0x00e2,
      0x0103,
      0x00e4,
      0x013a,
      0x0107,
      0x00e7,
      0x010d,
      0x00e9,
      0x0119,
      0x00eb,
      0x011b,
      0x00ed,
      0x00ee,
      0x010f,
      0x0111,
      0x0144,
      0x0148,
      0x00f3,
      0x00f4,
      0x0151,
      0x00f6,
      0x00f7,
      0x0159,
      0x016f,
      0x00fa,
      0x0171,
      0x00fc,
      0x00fd,
      0x0163,
      0x02d9,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\xc2\xa4",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xc4\x84",
      "\xcb\x98",
      "\xc5\x81",
      "\x24",
      "\xc4\xbd",
      "\xc5\x9a",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc5\xa0",
      "\xc5\x9e",
      "\xc5\xa4",
      "\xc5\xb9",
      "\xc2\xad",
      "\xc5\xbd",
      "\xc5\xbb",
      "\xc2\xb0",
      "\xc4\x85",
      "\xcb\x9b",
      "\xc5\x82",
      "\xc2\xb4",
      "\xc4\xbe",
      "\xc5\x9b",
      "\xcb\x87",
      "\xc2\xb8",
      "\xc5\xa1",
      "\xc5\x9f",
      "\xc5\xa5",
      "\xc5\xba",
      "\xcb\x9d",
      "\xc5\xbe",
      "\xc5\xbc",
      "\xc5\x94",
      "\xc3\x81",
      "\xc3\x82",
      "\xc4\x82",
      "\xc3\x84",
      "\xc4\xb9",
      "\xc4\x86",
      "\xc3\x87",
      "\xc4\x8c",
      "\xc3\x89",
      "\xc4\x98",
      "\xc3\x8b",
      "\xc4\x9a",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc4\x8e",
      "\xc4\x90",
      "\xc5\x83",
      "\xc5\x87",
      "\xc3\x93",
      "\xc3\x94",
      "\xc5\x90",
      "\xc3\x96",
      "\xc3\x97",
      "\xc5\x98",
      "\xc5\xae",
      "\xc3\x9a",
      "\xc5\xb0",
      "\xc3\x9c",
      "\xc3\x9d",
      "\xc5\xa2",
      "\xc3\x9f",
      "\xc5\x95",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc4\x83",
      "\xc3\xa4",
      "\xc4\xba",
      "\xc4\x87",
      "\xc3\xa7",
      "\xc4\x8d",
      "\xc3\xa9",
      "\xc4\x99",
      "\xc3\xab",
      "\xc4\x9b",
      "\xc3\xad",
      "\xc3\xae",
      "\xc4\x8f",
      "\xc4\x91",
      "\xc5\x84",
      "\xc5\x88",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc5\x91",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc5\x99",
      "\xc5\xaf",
      "\xc3\xba",
      "\xc5\xb1",
      "\xc3\xbc",
      "\xc3\xbd",
      "\xc5\xa3",
      "\xcb\x99",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\xa4",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000a4 => "\x24",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xa8",
      0x000000ad => "\xad",
      0x000000b0 => "\xb0",
      0x000000b4 => "\xb4",
      0x000000b8 => "\xb8",
      0x000000c1 => "\xc1",
      0x000000c2 => "\xc2",
      0x000000c4 => "\xc4",
      0x000000c7 => "\xc7",
      0x000000c9 => "\xc9",
      0x000000cb => "\xcb",
      0x000000cd => "\xcd",
      0x000000ce => "\xce",
      0x000000d3 => "\xd3",
      0x000000d4 => "\xd4",
      0x000000d6 => "\xd6",
      0x000000d7 => "\xd7",
      0x000000da => "\xda",
      0x000000dc => "\xdc",
      0x000000dd => "\xdd",
      0x000000df => "\xdf",
      0x000000e1 => "\xe1",
      0x000000e2 => "\xe2",
      0x000000e4 => "\xe4",
      0x000000e7 => "\xe7",
      0x000000e9 => "\xe9",
      0x000000eb => "\xeb",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f6 => "\xf6",
      0x000000f7 => "\xf7",
      0x000000fa => "\xfa",
      0x000000fc => "\xfc",
      0x000000fd => "\xfd",
      0x00000102 => "\xc3",
      0x00000103 => "\xe3",
      0x00000104 => "\xa1",
      0x00000105 => "\xb1",
      0x00000106 => "\xc6",
      0x00000107 => "\xe6",
      0x0000010c => "\xc8",
      0x0000010d => "\xe8",
      0x0000010e => "\xcf",
      0x0000010f => "\xef",
      0x00000110 => "\xd0",
      0x00000111 => "\xf0",
      0x00000118 => "\xca",
      0x00000119 => "\xea",
      0x0000011a => "\xcc",
      0x0000011b => "\xec",
      0x00000139 => "\xc5",
      0x0000013a => "\xe5",
      0x0000013d => "\xa5",
      0x0000013e => "\xb5",
      0x00000141 => "\xa3",
      0x00000142 => "\xb3",
      0x00000143 => "\xd1",
      0x00000144 => "\xf1",
      0x00000147 => "\xd2",
      0x00000148 => "\xf2",
      0x00000150 => "\xd5",
      0x00000151 => "\xf5",
      0x00000154 => "\xc0",
      0x00000155 => "\xe0",
      0x00000158 => "\xd8",
      0x00000159 => "\xf8",
      0x0000015a => "\xa6",
      0x0000015b => "\xb6",
      0x0000015e => "\xaa",
      0x0000015f => "\xba",
      0x00000160 => "\xa9",
      0x00000161 => "\xb9",
      0x00000162 => "\xde",
      0x00000163 => "\xfe",
      0x00000164 => "\xab",
      0x00000165 => "\xbb",
      0x0000016e => "\xd9",
      0x0000016f => "\xf9",
      0x00000170 => "\xdb",
      0x00000171 => "\xfb",
      0x00000179 => "\xac",
      0x0000017a => "\xbc",
      0x0000017b => "\xaf",
      0x0000017c => "\xbf",
      0x0000017d => "\xae",
      0x0000017e => "\xbe",
      0x000002c7 => "\xb7",
      0x000002d8 => "\xa2",
      0x000002d9 => "\xff",
      0x000002db => "\xb2",
      0x000002dd => "\xbd",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::CSN_369103 - Conversion routines for CSN_369103
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for CSN_369103.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
   repertoiremap: mnemonic,ds
    source: ECMA registry
   alias ISO-IR-139
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  000000A4 | CURRENCY SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  00000104 | LATIN CAPITAL LETTER A WITH OGONEK
      A2 |  000002D8 | BREVE
      A3 |  00000141 | LATIN CAPITAL LETTER L WITH STROKE
      A4 |  00000024 | DOLLAR SIGN
      A5 |  0000013D | LATIN CAPITAL LETTER L WITH CARON
      A6 |  0000015A | LATIN CAPITAL LETTER S WITH ACUTE
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      AA |  0000015E | LATIN CAPITAL LETTER S WITH CEDILLA
      AB |  00000164 | LATIN CAPITAL LETTER T WITH CARON
      AC |  00000179 | LATIN CAPITAL LETTER Z WITH ACUTE
      AD |  000000AD | SOFT HYPHEN
      AE |  0000017D | LATIN CAPITAL LETTER Z WITH CARON
      AF |  0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE
      B0 |  000000B0 | DEGREE SIGN
      B1 |  00000105 | LATIN SMALL LETTER A WITH OGONEK
      B2 |  000002DB | OGONEK
      B3 |  00000142 | LATIN SMALL LETTER L WITH STROKE
      B4 |  000000B4 | ACUTE ACCENT
      B5 |  0000013E | LATIN SMALL LETTER L WITH CARON
      B6 |  0000015B | LATIN SMALL LETTER S WITH ACUTE
      B7 |  000002C7 | CARON (Mandarin Chinese third tone)
      B8 |  000000B8 | CEDILLA
      B9 |  00000161 | LATIN SMALL LETTER S WITH CARON
      BA |  0000015F | LATIN SMALL LETTER S WITH CEDILLA
      BB |  00000165 | LATIN SMALL LETTER T WITH CARON
      BC |  0000017A | LATIN SMALL LETTER Z WITH ACUTE
      BD |  000002DD | DOUBLE ACUTE ACCENT
      BE |  0000017E | LATIN SMALL LETTER Z WITH CARON
      BF |  0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE
      C0 |  00000154 | LATIN CAPITAL LETTER R WITH ACUTE
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C3 |  00000102 | LATIN CAPITAL LETTER A WITH BREVE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  00000139 | LATIN CAPITAL LETTER L WITH ACUTE
      C6 |  00000106 | LATIN CAPITAL LETTER C WITH ACUTE
      C7 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      C8 |  0000010C | LATIN CAPITAL LETTER C WITH CARON
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  00000118 | LATIN CAPITAL LETTER E WITH OGONEK
      CB |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      CC |  0000011A | LATIN CAPITAL LETTER E WITH CARON
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      CF |  0000010E | LATIN CAPITAL LETTER D WITH CARON
      D0 |  00000110 | LATIN CAPITAL LETTER D WITH STROKE
      D1 |  00000143 | LATIN CAPITAL LETTER N WITH ACUTE
      D2 |  00000147 | LATIN CAPITAL LETTER N WITH CARON
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  00000150 | LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  000000D7 | MULTIPLICATION SIGN
      D8 |  00000158 | LATIN CAPITAL LETTER R WITH CARON
      D9 |  0000016E | LATIN CAPITAL LETTER U WITH RING ABOVE
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  00000170 | LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      DE |  00000162 | LATIN CAPITAL LETTER T WITH CEDILLA
      DF |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E0 |  00000155 | LATIN SMALL LETTER R WITH ACUTE
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  00000103 | LATIN SMALL LETTER A WITH BREVE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  0000013A | LATIN SMALL LETTER L WITH ACUTE
      E6 |  00000107 | LATIN SMALL LETTER C WITH ACUTE
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  0000010D | LATIN SMALL LETTER C WITH CARON
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  00000119 | LATIN SMALL LETTER E WITH OGONEK
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  0000011B | LATIN SMALL LETTER E WITH CARON
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  0000010F | LATIN SMALL LETTER D WITH CARON
      F0 |  00000111 | LATIN SMALL LETTER D WITH STROKE
      F1 |  00000144 | LATIN SMALL LETTER N WITH ACUTE
      F2 |  00000148 | LATIN SMALL LETTER N WITH CARON
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  00000151 | LATIN SMALL LETTER O WITH DOUBLE ACUTE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  000000F7 | DIVISION SIGN
      F8 |  00000159 | LATIN SMALL LETTER R WITH CARON
      F9 |  0000016F | LATIN SMALL LETTER U WITH RING ABOVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  00000171 | LATIN SMALL LETTER U WITH DOUBLE ACUTE
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      FE |  00000163 | LATIN SMALL LETTER T WITH CEDILLA
      FF |  000002D9 | DOT ABOVE (Mandarin Chinese light tone)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_CSN_369103

    $main::fatpacked{"Locale/RecodeData/CWI.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_CWI';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for CWI.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::CWI;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c7,
      0x00fc,
      0x00e9,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e5,
      0x00e7,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ef,
      0x00ee,
      0x00cd,
      0x00c4,
      0x00c1,
      0x00c9,
      0x00e6,
      0x00c6,
      0x0151,
      0x00f6,
      0x00d3,
      0x0171,
      0x00da,
      0x0170,
      0x00d6,
      0x00dc,
      0x00a2,
      0x00a3,
      0x00a5,
      0x20a7,
      0xe01f,
      0x00e1,
      0x00ed,
      0x00f3,
      0x00fa,
      0x00f1,
      0x00d1,
      0x00aa,
      0x0150,
      0x00bf,
      0x2310,
      0x00ac,
      0x00bd,
      0x00bc,
      0x00a1,
      0x00ab,
      0x00bb,
      0x2591,
      0x2592,
      0x2593,
      0x2502,
      0x2524,
      0x2561,
      0x2562,
      0x2556,
      0x2555,
      0x2563,
      0x2551,
      0x2557,
      0x255d,
      0x255c,
      0x255b,
      0x2510,
      0x2514,
      0x2534,
      0x252c,
      0x251c,
      0x2500,
      0x253c,
      0x255e,
      0x255f,
      0x255a,
      0x2554,
      0x2569,
      0x2566,
      0x2560,
      0x2550,
      0x256c,
      0x2567,
      0x2568,
      0x2564,
      0x2565,
      0x2559,
      0x2558,
      0x2552,
      0x2553,
      0x256b,
      0x256a,
      0x2518,
      0x250c,
      0x2588,
      0x2584,
      0x258c,
      0x2590,
      0x2580,
      0x03b1,
      0x03b2,
      0x0393,
      0x03c0,
      0x03a3,
      0x03c3,
      0x03bc,
      0x03c4,
      0x03a6,
      0x0398,
      0x03a9,
      0x03b4,
      0x221e,
      0x2205,
      0x03b5,
      0x2229,
      0x2261,
      0x00b1,
      0x2265,
      0x2264,
      0x2320,
      0x2321,
      0x00f7,
      0x2248,
      0x2218,
      0x00b7,
      0x2022,
      0x221a,
      0x207f,
      0x00b2,
      0x25a0,
      0x00a0,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x87",
      "\xc3\xbc",
      "\xc3\xa9",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xaf",
      "\xc3\xae",
      "\xc3\x8d",
      "\xc3\x84",
      "\xc3\x81",
      "\xc3\x89",
      "\xc3\xa6",
      "\xc3\x86",
      "\xc5\x91",
      "\xc3\xb6",
      "\xc3\x93",
      "\xc5\xb1",
      "\xc3\x9a",
      "\xc5\xb0",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xe2\x82\xa7",
      "\xee\x80\x9f",
      "\xc3\xa1",
      "\xc3\xad",
      "\xc3\xb3",
      "\xc3\xba",
      "\xc3\xb1",
      "\xc3\x91",
      "\xc2\xaa",
      "\xc5\x90",
      "\xc2\xbf",
      "\xe2\x8c\x90",
      "\xc2\xac",
      "\xc2\xbd",
      "\xc2\xbc",
      "\xc2\xa1",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x94\x82",
      "\xe2\x94\xa4",
      "\xe2\x95\xa1",
      "\xe2\x95\xa2",
      "\xe2\x95\x96",
      "\xe2\x95\x95",
      "\xe2\x95\xa3",
      "\xe2\x95\x91",
      "\xe2\x95\x97",
      "\xe2\x95\x9d",
      "\xe2\x95\x9c",
      "\xe2\x95\x9b",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\xb4",
      "\xe2\x94\xac",
      "\xe2\x94\x9c",
      "\xe2\x94\x80",
      "\xe2\x94\xbc",
      "\xe2\x95\x9e",
      "\xe2\x95\x9f",
      "\xe2\x95\x9a",
      "\xe2\x95\x94",
      "\xe2\x95\xa9",
      "\xe2\x95\xa6",
      "\xe2\x95\xa0",
      "\xe2\x95\x90",
      "\xe2\x95\xac",
      "\xe2\x95\xa7",
      "\xe2\x95\xa8",
      "\xe2\x95\xa4",
      "\xe2\x95\xa5",
      "\xe2\x95\x99",
      "\xe2\x95\x98",
      "\xe2\x95\x92",
      "\xe2\x95\x93",
      "\xe2\x95\xab",
      "\xe2\x95\xaa",
      "\xe2\x94\x98",
      "\xe2\x94\x8c",
      "\xe2\x96\x88",
      "\xe2\x96\x84",
      "\xe2\x96\x8c",
      "\xe2\x96\x90",
      "\xe2\x96\x80",
      "\xce\xb1",
      "\xce\xb2",
      "\xce\x93",
      "\xcf\x80",
      "\xce\xa3",
      "\xcf\x83",
      "\xce\xbc",
      "\xcf\x84",
      "\xce\xa6",
      "\xce\x98",
      "\xce\xa9",
      "\xce\xb4",
      "\xe2\x88\x9e",
      "\xe2\x88\x85",
      "\xce\xb5",
      "\xe2\x88\xa9",
      "\xe2\x89\xa1",
      "\xc2\xb1",
      "\xe2\x89\xa5",
      "\xe2\x89\xa4",
      "\xe2\x8c\xa0",
      "\xe2\x8c\xa1",
      "\xc3\xb7",
      "\xe2\x89\x88",
      "\xe2\x88\x98",
      "\xc2\xb7",
      "\xe2\x80\xa2",
      "\xe2\x88\x9a",
      "\xe2\x81\xbf",
      "\xc2\xb2",
      "\xe2\x96\xa0",
      "\xc2\xa0",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xff",
      0x000000a1 => "\xad",
      0x000000a2 => "\x9b",
      0x000000a3 => "\x9c",
      0x000000a5 => "\x9d",
      0x000000aa => "\xa6",
      0x000000ab => "\xae",
      0x000000ac => "\xaa",
      0x000000b1 => "\xf1",
      0x000000b2 => "\xfd",
      0x000000b7 => "\xf9",
      0x000000bb => "\xaf",
      0x000000bc => "\xac",
      0x000000bd => "\xab",
      0x000000bf => "\xa8",
      0x000000c1 => "\x8f",
      0x000000c4 => "\x8e",
      0x000000c6 => "\x92",
      0x000000c7 => "\x80",
      0x000000c9 => "\x90",
      0x000000cd => "\x8d",
      0x000000d1 => "\xa5",
      0x000000d3 => "\x95",
      0x000000d6 => "\x99",
      0x000000da => "\x97",
      0x000000dc => "\x9a",
      0x000000e0 => "\x85",
      0x000000e1 => "\xa0",
      0x000000e2 => "\x83",
      0x000000e4 => "\x84",
      0x000000e5 => "\x86",
      0x000000e6 => "\x91",
      0x000000e7 => "\x87",
      0x000000e8 => "\x8a",
      0x000000e9 => "\x82",
      0x000000ea => "\x88",
      0x000000eb => "\x89",
      0x000000ed => "\xa1",
      0x000000ee => "\x8c",
      0x000000ef => "\x8b",
      0x000000f1 => "\xa4",
      0x000000f3 => "\xa2",
      0x000000f6 => "\x94",
      0x000000f7 => "\xf6",
      0x000000fa => "\xa3",
      0x000000fc => "\x81",
      0x00000150 => "\xa7",
      0x00000151 => "\x93",
      0x00000170 => "\x98",
      0x00000171 => "\x96",
      0x00000393 => "\xe2",
      0x00000398 => "\xe9",
      0x000003a3 => "\xe4",
      0x000003a6 => "\xe8",
      0x000003a9 => "\xea",
      0x000003b1 => "\xe0",
      0x000003b2 => "\xe1",
      0x000003b4 => "\xeb",
      0x000003b5 => "\xee",
      0x000003bc => "\xe6",
      0x000003c0 => "\xe3",
      0x000003c3 => "\xe5",
      0x000003c4 => "\xe7",
      0x00002022 => "\xfa",
      0x0000207f => "\xfc",
      0x000020a7 => "\x9e",
      0x00002205 => "\xed",
      0x00002218 => "\xf8",
      0x0000221a => "\xfb",
      0x0000221e => "\xec",
      0x00002229 => "\xef",
      0x00002248 => "\xf7",
      0x00002261 => "\xf0",
      0x00002264 => "\xf3",
      0x00002265 => "\xf2",
      0x00002310 => "\xa9",
      0x00002320 => "\xf4",
      0x00002321 => "\xf5",
      0x00002500 => "\xc4",
      0x00002502 => "\xb3",
      0x0000250c => "\xda",
      0x00002510 => "\xbf",
      0x00002514 => "\xc0",
      0x00002518 => "\xd9",
      0x0000251c => "\xc3",
      0x00002524 => "\xb4",
      0x0000252c => "\xc2",
      0x00002534 => "\xc1",
      0x0000253c => "\xc5",
      0x00002550 => "\xcd",
      0x00002551 => "\xba",
      0x00002552 => "\xd5",
      0x00002553 => "\xd6",
      0x00002554 => "\xc9",
      0x00002555 => "\xb8",
      0x00002556 => "\xb7",
      0x00002557 => "\xbb",
      0x00002558 => "\xd4",
      0x00002559 => "\xd3",
      0x0000255a => "\xc8",
      0x0000255b => "\xbe",
      0x0000255c => "\xbd",
      0x0000255d => "\xbc",
      0x0000255e => "\xc6",
      0x0000255f => "\xc7",
      0x00002560 => "\xcc",
      0x00002561 => "\xb5",
      0x00002562 => "\xb6",
      0x00002563 => "\xb9",
      0x00002564 => "\xd1",
      0x00002565 => "\xd2",
      0x00002566 => "\xcb",
      0x00002567 => "\xcf",
      0x00002568 => "\xd0",
      0x00002569 => "\xca",
      0x0000256a => "\xd8",
      0x0000256b => "\xd7",
      0x0000256c => "\xce",
      0x00002580 => "\xdf",
      0x00002584 => "\xdc",
      0x00002588 => "\xdb",
      0x0000258c => "\xdd",
      0x00002590 => "\xde",
      0x00002591 => "\xb0",
      0x00002592 => "\xb1",
      0x00002593 => "\xb2",
      0x000025a0 => "\xfe",
      0x0000e01f => "\x9f",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::CWI - Conversion routines for CWI
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for CWI.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: Computerworld Sza'mita'stechnika vol 3 issue 13 1988-06-29
   alias CWI-2
   alias CP-HU
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      81 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      82 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      83 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      84 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      85 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      86 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      87 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      88 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      89 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      8A |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      8B |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      8C |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      8D |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      8E |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      8F |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      90 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      91 |  000000E6 | LATIN SMALL LETTER AE
      92 |  000000C6 | LATIN CAPITAL LETTER AE
      93 |  00000151 | LATIN SMALL LETTER O WITH DOUBLE ACUTE
      94 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      95 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      96 |  00000171 | LATIN SMALL LETTER U WITH DOUBLE ACUTE
      97 |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      98 |  00000170 | LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
      99 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      9A |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      9B |  000000A2 | CENT SIGN
      9C |  000000A3 | POUND SIGN
      9D |  000000A5 | YEN SIGN
      9E |  000020A7 | PESETA SIGN
      9F |  0000E01F | HUNGARIAN FLORINTH (CWI_9F)
      A0 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      A1 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      A2 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      A3 |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      A4 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      A5 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      A6 |  000000AA | FEMININE ORDINAL INDICATOR
      A7 |  00000150 | LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
      A8 |  000000BF | INVERTED QUESTION MARK
      A9 |  00002310 | REVERSED NOT SIGN
      AA |  000000AC | NOT SIGN
      AB |  000000BD | VULGAR FRACTION ONE HALF
      AC |  000000BC | VULGAR FRACTION ONE QUARTER
      AD |  000000A1 | INVERTED EXCLAMATION MARK
      AE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AF |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      B0 |  00002591 | LIGHT SHADE
      B1 |  00002592 | MEDIUM SHADE
      B2 |  00002593 | DARK SHADE
      B3 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      B4 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      B5 |  00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
      B6 |  00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
      B7 |  00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
      B8 |  00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
      B9 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      BA |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      BB |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      BC |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      BD |  0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
      BE |  0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
      BF |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      C0 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      C1 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      C2 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      C3 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      C4 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      C5 |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      C6 |  0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
      C7 |  0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
      C8 |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      C9 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      CA |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      CB |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      CC |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      CD |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      CE |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      CF |  00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
      D0 |  00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
      D1 |  00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
      D2 |  00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
      D3 |  00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
      D4 |  00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
      D5 |  00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
      D6 |  00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
      D7 |  0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
      D8 |  0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
      D9 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      DA |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      DB |  00002588 | FULL BLOCK
      DC |  00002584 | LOWER HALF BLOCK
      DD |  0000258C | LEFT HALF BLOCK
      DE |  00002590 | RIGHT HALF BLOCK
      DF |  00002580 | UPPER HALF BLOCK
      E0 |  000003B1 | GREEK SMALL LETTER ALPHA
      E1 |  000003B2 | GREEK SMALL LETTER BETA
      E2 |  00000393 | GREEK CAPITAL LETTER GAMMA
      E3 |  000003C0 | GREEK SMALL LETTER PI
      E4 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      E5 |  000003C3 | GREEK SMALL LETTER SIGMA
      E6 |  000003BC | GREEK SMALL LETTER MU
      E7 |  000003C4 | GREEK SMALL LETTER TAU
      E8 |  000003A6 | GREEK CAPITAL LETTER PHI
      E9 |  00000398 | GREEK CAPITAL LETTER THETA
      EA |  000003A9 | GREEK CAPITAL LETTER OMEGA
      EB |  000003B4 | GREEK SMALL LETTER DELTA
      EC |  0000221E | INFINITY
      ED |  00002205 | EMPTY SET
      EE |  000003B5 | GREEK SMALL LETTER EPSILON
      EF |  00002229 | INTERSECTION
      F0 |  00002261 | IDENTICAL TO
      F1 |  000000B1 | PLUS-MINUS SIGN
      F2 |  00002265 | GREATER-THAN OR EQUAL TO
      F3 |  00002264 | LESS-THAN OR EQUAL TO
      F4 |  00002320 | TOP HALF INTEGRAL
      F5 |  00002321 | BOTTOM HALF INTEGRAL
      F6 |  000000F7 | DIVISION SIGN
      F7 |  00002248 | ALMOST EQUAL TO
      F8 |  00002218 | RING OPERATOR
      F9 |  000000B7 | MIDDLE DOT
      FA |  00002022 | BULLET
      FB |  0000221A | SQUARE ROOT
      FC |  0000207F | SUPERSCRIPT LATIN SMALL LETTER N
      FD |  000000B2 | SUPERSCRIPT TWO
      FE |  000025A0 | BLACK SQUARE
      FF |  000000A0 | NO-BREAK SPACE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_CWI

    $main::fatpacked{"Locale/RecodeData/DEC_MCS.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_DEC_MCS';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for DEC-MCS.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::DEC_MCS;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0xfffd,
      0x00a1,
      0x00a2,
      0x00a3,
      0xfffd,
      0x00a5,
      0xfffd,
      0x00a7,
      0x00a4,
      0x00a9,
      0x00aa,
      0x00ab,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00b0,
      0x00b1,
      0x00b2,
      0x00b3,
      0xfffd,
      0x00b5,
      0x00b6,
      0x00b7,
      0xfffd,
      0x00b9,
      0x00ba,
      0x00bb,
      0x00bc,
      0x00bd,
      0xfffd,
      0x00bf,
      0x00c0,
      0x00c1,
      0x00c2,
      0x00c3,
      0x00c4,
      0x00c5,
      0x00c6,
      0x00c7,
      0x00c8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00cc,
      0x00cd,
      0x00ce,
      0x00cf,
      0xfffd,
      0x00d1,
      0x00d2,
      0x00d3,
      0x00d4,
      0x00d5,
      0x00d6,
      0x0152,
      0x00d8,
      0x00d9,
      0x00da,
      0x00db,
      0x00dc,
      0x0178,
      0xfffd,
      0x00df,
      0x00e0,
      0x00e1,
      0x00e2,
      0x00e3,
      0x00e4,
      0x00e5,
      0x00e6,
      0x00e7,
      0x00e8,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00ec,
      0x00ed,
      0x00ee,
      0x00ef,
      0xfffd,
      0x00f1,
      0x00f2,
      0x00f3,
      0x00f4,
      0x00f5,
      0x00f6,
      0x0153,
      0x00f8,
      0x00f9,
      0x00fa,
      0x00fb,
      0x00fc,
      0x00ff,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xef\xbf\xbd",
      "\xc2\xa1",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xef\xbf\xbd",
      "\xc2\xa5",
      "\xef\xbf\xbd",
      "\xc2\xa7",
      "\xc2\xa4",
      "\xc2\xa9",
      "\xc2\xaa",
      "\xc2\xab",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xef\xbf\xbd",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xef\xbf\xbd",
      "\xc2\xb9",
      "\xc2\xba",
      "\xc2\xbb",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xef\xbf\xbd",
      "\xc2\xbf",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x82",
      "\xc3\x83",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x86",
      "\xc3\x87",
      "\xc3\x88",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x8c",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xef\xbf\xbd",
      "\xc3\x91",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x94",
      "\xc3\x95",
      "\xc3\x96",
      "\xc5\x92",
      "\xc3\x98",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc5\xb8",
      "\xef\xbf\xbd",
      "\xc3\x9f",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc3\xa3",
      "\xc3\xa4",
      "\xc3\xa5",
      "\xc3\xa6",
      "\xc3\xa7",
      "\xc3\xa8",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xac",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xef\xbf\xbd",
      "\xc3\xb1",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc3\xb5",
      "\xc3\xb6",
      "\xc5\x93",
      "\xc3\xb8",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xbf",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a1 => "\xa1",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xa8",
      0x000000a5 => "\xa5",
      0x000000a7 => "\xa7",
      0x000000a9 => "\xa9",
      0x000000aa => "\xaa",
      0x000000ab => "\xab",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b2 => "\xb2",
      0x000000b3 => "\xb3",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000b9 => "\xb9",
      0x000000ba => "\xba",
      0x000000bb => "\xbb",
      0x000000bc => "\xbc",
      0x000000bd => "\xbd",
      0x000000bf => "\xbf",
      0x000000c0 => "\xc0",
      0x000000c1 => "\xc1",
      0x000000c2 => "\xc2",
      0x000000c3 => "\xc3",
      0x000000c4 => "\xc4",
      0x000000c5 => "\xc5",
      0x000000c6 => "\xc6",
      0x000000c7 => "\xc7",
      0x000000c8 => "\xc8",
      0x000000c9 => "\xc9",
      0x000000ca => "\xca",
      0x000000cb => "\xcb",
      0x000000cc => "\xcc",
      0x000000cd => "\xcd",
      0x000000ce => "\xce",
      0x000000cf => "\xcf",
      0x000000d1 => "\xd1",
      0x000000d2 => "\xd2",
      0x000000d3 => "\xd3",
      0x000000d4 => "\xd4",
      0x000000d5 => "\xd5",
      0x000000d6 => "\xd6",
      0x000000d8 => "\xd8",
      0x000000d9 => "\xd9",
      0x000000da => "\xda",
      0x000000db => "\xdb",
      0x000000dc => "\xdc",
      0x000000df => "\xdf",
      0x000000e0 => "\xe0",
      0x000000e1 => "\xe1",
      0x000000e2 => "\xe2",
      0x000000e3 => "\xe3",
      0x000000e4 => "\xe4",
      0x000000e5 => "\xe5",
      0x000000e6 => "\xe6",
      0x000000e7 => "\xe7",
      0x000000e8 => "\xe8",
      0x000000e9 => "\xe9",
      0x000000ea => "\xea",
      0x000000eb => "\xeb",
      0x000000ec => "\xec",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000ef => "\xef",
      0x000000f1 => "\xf1",
      0x000000f2 => "\xf2",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f5 => "\xf5",
      0x000000f6 => "\xf6",
      0x000000f8 => "\xf8",
      0x000000f9 => "\xf9",
      0x000000fa => "\xfa",
      0x000000fb => "\xfb",
      0x000000fc => "\xfc",
      0x000000ff => "\xfd",
      0x00000152 => "\xd7",
      0x00000153 => "\xf7",
      0x00000178 => "\xdd",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::DEC_MCS - Conversion routines for DEC_MCS
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for DEC-MCS.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    VAX/VMS User's Manual, Order Number: AI-Y517A-TE, April 1986.
   alias DEC
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A1 |  000000A1 | INVERTED EXCLAMATION MARK
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A5 |  000000A5 | YEN SIGN
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A4 | CURRENCY SIGN
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  000000AA | FEMININE ORDINAL INDICATOR
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  000000B3 | SUPERSCRIPT THREE
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B9 |  000000B9 | SUPERSCRIPT ONE
      BA |  000000BA | MASCULINE ORDINAL INDICATOR
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  000000BC | VULGAR FRACTION ONE QUARTER
      BD |  000000BD | VULGAR FRACTION ONE HALF
      BF |  000000BF | INVERTED QUESTION MARK
      C0 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C3 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      C6 |  000000C6 | LATIN CAPITAL LETTER AE
      C7 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      C8 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      CB |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      CC |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      CF |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      D1 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      D2 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  00000152 | LATIN CAPITAL LIGATURE OE
      D8 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      D9 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      DF |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E0 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      E6 |  000000E6 | LATIN SMALL LETTER AE
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      F1 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      F2 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  00000153 | LATIN SMALL LIGATURE OE
      F8 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      F9 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_DEC_MCS

    $main::fatpacked{"Locale/RecodeData/EBCDIC_AT_DE.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_EBCDIC_AT_DE';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for EBCDIC-AT-DE.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::EBCDIC_AT_DE;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00c4,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00dc,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00f6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0060,
      0x003a,
      0x0023,
      0x00a7,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00df,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e4,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00fc,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00d6,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\x84",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\x9c",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xb6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x60",
      "\x3a",
      "\x23",
      "\xc2\xa7",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\x9f",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa4",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xbc",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\x96",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a7 => "\x7c",
      0x000000c4 => "\x4a",
      0x000000d6 => "\xe0",
      0x000000dc => "\x5a",
      0x000000df => "\xa1",
      0x000000e4 => "\xc0",
      0x000000f6 => "\x6a",
      0x000000fc => "\xd0",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::EBCDIC_AT_DE - Conversion routines for EBCDIC_AT_DE
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for EBCDIC-AT-DE.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      5A |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  000000A7 | SECTION SIGN
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A1 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C0 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D0 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E0 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_EBCDIC_AT_DE

    $main::fatpacked{"Locale/RecodeData/EBCDIC_AT_DE_A.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_EBCDIC_AT_DE_A';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for EBCDIC-AT-DE-A.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::EBCDIC_AT_DE_A;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00f6,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x007c,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00fc,
      0x00dc,
      0x002a,
      0x0029,
      0x003b,
      0x00ac,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00df,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x003a,
      0x00c4,
      0x00d6,
      0x0027,
      0x003d,
      0x00e4,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xb6",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x7c",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xbc",
      "\xc3\x9c",
      "\x2a",
      "\x29",
      "\x3b",
      "\xc2\xac",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\x9f",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x3a",
      "\xc3\x84",
      "\xc3\x96",
      "\x27",
      "\x3d",
      "\xc3\xa4",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005f => "\x6d",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007c => "\x4f",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000ac => "\x5f",
      0x000000c4 => "\x7b",
      0x000000d6 => "\x7c",
      0x000000dc => "\x5b",
      0x000000df => "\x6a",
      0x000000e4 => "\x7f",
      0x000000f6 => "\x4a",
      0x000000fc => "\x5a",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::EBCDIC_AT_DE_A - Conversion routines for EBCDIC_AT_DE_A
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for EBCDIC-AT-DE-A.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  0000007C | VERTICAL LINE
      50 |  00000026 | AMPERSAND
      5A |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      5B |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  000000AC | NOT SIGN
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000DF | LATIN SMALL LETTER SHARP S (German)
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      7A |  0000003A | COLON
      7B |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      7C |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_EBCDIC_AT_DE_A

    $main::fatpacked{"Locale/RecodeData/EBCDIC_CA_FR.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_EBCDIC_CA_FR';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for EBCDIC-CA-FR.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::EBCDIC_CA_FR;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0x00e2,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e7,
      0xfffd,
      0x00e0,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0xfffd,
      0x00ea,
      0x00eb,
      0xfffd,
      0xfffd,
      0x00ee,
      0x00ef,
      0xfffd,
      0xfffd,
      0x00b4,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0x00c2,
      0xfffd,
      0x00c0,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00c7,
      0xfffd,
      0x00f9,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0x00c9,
      0x00ca,
      0x00cb,
      0xfffd,
      0x00ce,
      0x00cf,
      0xfffd,
      0xfffd,
      0x0060,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a8,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e9,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0x00f4,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e8,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0x00fb,
      0x00fc,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00b8,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0x00d4,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0x00db,
      0x00dc,
      0x00d9,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xc3\xa2",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa7",
      "\xef\xbf\xbd",
      "\xc3\xa0",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xef\xbf\xbd",
      "\xc3\xaa",
      "\xc3\xab",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xae",
      "\xc3\xaf",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xb4",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xc3\x82",
      "\xef\xbf\xbd",
      "\xc3\x80",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\x87",
      "\xef\xbf\xbd",
      "\xc3\xb9",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xef\xbf\xbd",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x60",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa8",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa9",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xc3\xb4",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa8",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xb8",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xc3\x94",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x99",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a8 => "\xa1",
      0x000000b4 => "\x5a",
      0x000000b8 => "\xe0",
      0x000000c0 => "\x64",
      0x000000c2 => "\x62",
      0x000000c7 => "\x68",
      0x000000c9 => "\x71",
      0x000000ca => "\x72",
      0x000000cb => "\x73",
      0x000000ce => "\x75",
      0x000000cf => "\x76",
      0x000000d4 => "\xeb",
      0x000000d9 => "\xfd",
      0x000000db => "\xfb",
      0x000000dc => "\xfc",
      0x000000e0 => "\x4a",
      0x000000e2 => "\x42",
      0x000000e7 => "\x48",
      0x000000e8 => "\xd0",
      0x000000e9 => "\xc0",
      0x000000ea => "\x52",
      0x000000eb => "\x53",
      0x000000ee => "\x56",
      0x000000ef => "\x57",
      0x000000f4 => "\xcb",
      0x000000f9 => "\x6a",
      0x000000fb => "\xdb",
      0x000000fc => "\xdc",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::EBCDIC_CA_FR - Conversion routines for EBCDIC_CA_FR
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for EBCDIC-CA-FR.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      42 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      48 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      4A |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      52 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      53 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      56 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      57 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      5A |  000000B4 | ACUTE ACCENT
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      64 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      68 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      6A |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      71 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      72 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      73 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      75 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      76 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A1 |  000000A8 | DIAERESIS
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C0 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CB |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      D0 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      DC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      E0 |  000000B8 | CEDILLA
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EB |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      FC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      FD |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_EBCDIC_CA_FR

    $main::fatpacked{"Locale/RecodeData/EBCDIC_DK_NO.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_EBCDIC_DK_NO';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for EBCDIC-DK-NO.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::EBCDIC_DK_NO;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0023,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a4,
      0x00c5,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00f8,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0060,
      0x003a,
      0x00c6,
      0x00d8,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00fc,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e6,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e5,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005c,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x23",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa4",
      "\xc3\x85",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xb8",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x60",
      "\x3a",
      "\xc3\x86",
      "\xc3\x98",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xbc",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa6",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa5",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5c",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\x4a",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005c => "\xe0",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a4 => "\x5a",
      0x000000c5 => "\x5b",
      0x000000c6 => "\x7b",
      0x000000d8 => "\x7c",
      0x000000e5 => "\xd0",
      0x000000e6 => "\xc0",
      0x000000f8 => "\x6a",
      0x000000fc => "\xa1",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::EBCDIC_DK_NO - Conversion routines for EBCDIC_DK_NO
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for EBCDIC-DK-NO.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
   repertoiremap: mnemonic,ds
    source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  00000023 | NUMBER SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      5A |  000000A4 | CURRENCY SIGN
      5B |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  000000C6 | LATIN CAPITAL LETTER AE
      7C |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A1 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C0 |  000000E6 | LATIN SMALL LETTER AE
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D0 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E0 |  0000005C | REVERSE SOLIDUS
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_EBCDIC_DK_NO

    $main::fatpacked{"Locale/RecodeData/EBCDIC_DK_NO_A.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_EBCDIC_DK_NO_A';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for EBCDIC-DK-NO-A.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::EBCDIC_DK_NO_A;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00f8,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x007c,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e5,
      0x00c5,
      0x002a,
      0x0029,
      0x003b,
      0x00ac,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x003a,
      0x00c6,
      0x00d8,
      0x0027,
      0x003d,
      0x00e6,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xb8",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x7c",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa5",
      "\xc3\x85",
      "\x2a",
      "\x29",
      "\x3b",
      "\xc2\xac",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x3a",
      "\xc3\x86",
      "\xc3\x98",
      "\x27",
      "\x3d",
      "\xc3\xa6",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005f => "\x6d",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007c => "\x4f",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a6 => "\x6a",
      0x000000ac => "\x5f",
      0x000000c5 => "\x5b",
      0x000000c6 => "\x7b",
      0x000000d8 => "\x7c",
      0x000000e5 => "\x5a",
      0x000000e6 => "\x7f",
      0x000000f8 => "\x4a",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::EBCDIC_DK_NO_A - Conversion routines for EBCDIC_DK_NO_A
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for EBCDIC-DK-NO-A.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  0000007C | VERTICAL LINE
      50 |  00000026 | AMPERSAND
      5A |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      5B |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  000000AC | NOT SIGN
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      7A |  0000003A | COLON
      7B |  000000C6 | LATIN CAPITAL LETTER AE
      7C |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  000000E6 | LATIN SMALL LETTER AE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_EBCDIC_DK_NO_A

    $main::fatpacked{"Locale/RecodeData/EBCDIC_ES.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_EBCDIC_ES';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for EBCDIC-ES.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::EBCDIC_ES;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a2,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x007c,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0021,
      0x20a7,
      0x002a,
      0x0029,
      0x003b,
      0x00ac,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00f1,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0060,
      0x003a,
      0x00d1,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a8,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007d,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005c,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa2",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x7c",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x21",
      "\xe2\x82\xa7",
      "\x2a",
      "\x29",
      "\x3b",
      "\xc2\xac",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xb1",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x60",
      "\x3a",
      "\xc3\x91",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa8",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7d",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5c",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x5a",
      0x00000022 => "\x7f",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005c => "\xe0",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\xc0",
      0x0000007c => "\x4f",
      0x0000007d => "\xd0",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a2 => "\x4a",
      0x000000a8 => "\xa1",
      0x000000ac => "\x5f",
      0x000000d1 => "\x7b",
      0x000000f1 => "\x6a",
      0x000020a7 => "\x5b",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::EBCDIC_ES - Conversion routines for EBCDIC_ES
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for EBCDIC-ES.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  000000A2 | CENT SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  0000007C | VERTICAL LINE
      50 |  00000026 | AMPERSAND
      5A |  00000021 | EXCLAMATION MARK
      5B |  000020A7 | PESETA SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  000000AC | NOT SIGN
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A1 |  000000A8 | DIAERESIS
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C0 |  0000007B | LEFT CURLY BRACKET
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D0 |  0000007D | RIGHT CURLY BRACKET
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E0 |  0000005C | REVERSE SOLIDUS
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_EBCDIC_ES

    $main::fatpacked{"Locale/RecodeData/EBCDIC_ES_A.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_EBCDIC_ES_A';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for EBCDIC-ES-A.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::EBCDIC_ES_A;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a2,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x007c,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0021,
      0x20a7,
      0x002a,
      0x0029,
      0x003b,
      0x00ac,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x003a,
      0x00d1,
      0x0040,
      0x0027,
      0x003d,
      0x00f1,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa2",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x7c",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x21",
      "\xe2\x82\xa7",
      "\x2a",
      "\x29",
      "\x3b",
      "\xc2\xac",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x3a",
      "\xc3\x91",
      "\x40",
      "\x27",
      "\x3d",
      "\xc3\xb1",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x5a",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005f => "\x6d",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007c => "\x4f",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a2 => "\x4a",
      0x000000a6 => "\x6a",
      0x000000ac => "\x5f",
      0x000000d1 => "\x7b",
      0x000000f1 => "\x7f",
      0x000020a7 => "\x5b",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::EBCDIC_ES_A - Conversion routines for EBCDIC_ES_A
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for EBCDIC-ES-A.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  000000A2 | CENT SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  0000007C | VERTICAL LINE
      50 |  00000026 | AMPERSAND
      5A |  00000021 | EXCLAMATION MARK
      5B |  000020A7 | PESETA SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  000000AC | NOT SIGN
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      7A |  0000003A | COLON
      7B |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_EBCDIC_ES_A

    $main::fatpacked{"Locale/RecodeData/EBCDIC_ES_S.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_EBCDIC_ES_S';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for EBCDIC-ES-S.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::EBCDIC_ES_S;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a2,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x007c,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0021,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x00ac,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00f1,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0060,
      0x003a,
      0x00d1,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a8,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007d,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005c,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa2",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x7c",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x21",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\xc2\xac",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xb1",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x60",
      "\x3a",
      "\xc3\x91",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa8",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7d",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5c",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x5a",
      0x00000022 => "\x7f",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005c => "\xe0",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\xc0",
      0x0000007c => "\x4f",
      0x0000007d => "\xd0",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a2 => "\x4a",
      0x000000a8 => "\xa1",
      0x000000ac => "\x5f",
      0x000000d1 => "\x7b",
      0x000000f1 => "\x6a",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::EBCDIC_ES_S - Conversion routines for EBCDIC_ES_S
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for EBCDIC-ES-S.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  000000A2 | CENT SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  0000007C | VERTICAL LINE
      50 |  00000026 | AMPERSAND
      5A |  00000021 | EXCLAMATION MARK
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  000000AC | NOT SIGN
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A1 |  000000A8 | DIAERESIS
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C0 |  0000007B | LEFT CURLY BRACKET
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D0 |  0000007D | RIGHT CURLY BRACKET
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E0 |  0000005C | REVERSE SOLIDUS
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_EBCDIC_ES_S

    $main::fatpacked{"Locale/RecodeData/EBCDIC_FI_SE.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_EBCDIC_FI_SE';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for EBCDIC-FI-SE.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::EBCDIC_FI_SE;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a7,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a4,
      0x00c5,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00f6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e9,
      0x003a,
      0x00c4,
      0x00d6,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00fc,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e4,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e5,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00c9,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa7",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa4",
      "\xc3\x85",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xb6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa9",
      "\x3a",
      "\xc3\x84",
      "\xc3\x96",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xbc",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa4",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa5",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\x89",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a4 => "\x5a",
      0x000000a7 => "\x4a",
      0x000000c4 => "\x7b",
      0x000000c5 => "\x5b",
      0x000000c9 => "\xe0",
      0x000000d6 => "\x7c",
      0x000000e4 => "\xc0",
      0x000000e5 => "\xd0",
      0x000000e9 => "\x79",
      0x000000f6 => "\x6a",
      0x000000fc => "\xa1",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::EBCDIC_FI_SE - Conversion routines for EBCDIC_FI_SE
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for EBCDIC-FI-SE.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  000000A7 | SECTION SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      5A |  000000A4 | CURRENCY SIGN
      5B |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      79 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      7A |  0000003A | COLON
      7B |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      7C |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A1 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C0 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D0 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E0 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_EBCDIC_FI_SE

    $main::fatpacked{"Locale/RecodeData/EBCDIC_FI_SE_A.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_EBCDIC_FI_SE_A';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for EBCDIC-FI-SE-A.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::EBCDIC_FI_SE_A;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00f6,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x007c,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e5,
      0x00c5,
      0x002a,
      0x0029,
      0x003b,
      0x00ac,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x003a,
      0x00c4,
      0x00d6,
      0x0027,
      0x003d,
      0x00e4,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xb6",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x7c",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa5",
      "\xc3\x85",
      "\x2a",
      "\x29",
      "\x3b",
      "\xc2\xac",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x3a",
      "\xc3\x84",
      "\xc3\x96",
      "\x27",
      "\x3d",
      "\xc3\xa4",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005f => "\x6d",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007c => "\x4f",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a6 => "\x6a",
      0x000000ac => "\x5f",
      0x000000c4 => "\x7b",
      0x000000c5 => "\x5b",
      0x000000d6 => "\x7c",
      0x000000e4 => "\x7f",
      0x000000e5 => "\x5a",
      0x000000f6 => "\x4a",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::EBCDIC_FI_SE_A - Conversion routines for EBCDIC_FI_SE_A
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for EBCDIC-FI-SE-A.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  0000007C | VERTICAL LINE
      50 |  00000026 | AMPERSAND
      5A |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      5B |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  000000AC | NOT SIGN
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      7A |  0000003A | COLON
      7B |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      7C |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_EBCDIC_FI_SE_A

    $main::fatpacked{"Locale/RecodeData/EBCDIC_FR.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_EBCDIC_FR';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for EBCDIC-FR.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::EBCDIC_FR;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00b0,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a7,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00f9,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0060,
      0x003a,
      0x00a3,
      0x00e0,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a8,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e9,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e8,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e7,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xb0",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa7",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xb9",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x60",
      "\x3a",
      "\xc2\xa3",
      "\xc3\xa0",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa8",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa9",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa8",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa7",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a3 => "\x7b",
      0x000000a7 => "\x5a",
      0x000000a8 => "\xa1",
      0x000000b0 => "\x4a",
      0x000000e0 => "\x7c",
      0x000000e7 => "\xe0",
      0x000000e8 => "\xd0",
      0x000000e9 => "\xc0",
      0x000000f9 => "\x6a",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::EBCDIC_FR - Conversion routines for EBCDIC_FR
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for EBCDIC-FR.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  000000B0 | DEGREE SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      5A |  000000A7 | SECTION SIGN
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  000000A3 | POUND SIGN
      7C |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A1 |  000000A8 | DIAERESIS
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C0 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D0 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E0 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_EBCDIC_FR

    $main::fatpacked{"Locale/RecodeData/EBCDIC_IS_FRISS.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_EBCDIC_IS_FRISS';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for EBCDIC-IS-FRISS.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::EBCDIC_IS_FRISS;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e1,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x003c,
      0x002e,
      0x00c1,
      0x0028,
      0x002b,
      0x0021,
      0x00d0,
      0x00e9,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00ed,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0024,
      0x0025,
      0x00c9,
      0x002a,
      0x0029,
      0x003b,
      0x0026,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0023,
      0x2018,
      0x002c,
      0x00de,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00cd,
      0xfffd,
      0xfffd,
      0x007c,
      0x00f0,
      0x003a,
      0x00c6,
      0x00d6,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00dd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00b0,
      0x00f6,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0x005b,
      0x00fd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005d,
      0x00a8,
      0xfffd,
      0xfffd,
      0x00fe,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00f3,
      0xfffd,
      0x00e6,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00fa,
      0xfffd,
      0x00b4,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00d3,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00da,
      0x007f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa1",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x3c",
      "\x2e",
      "\xc3\x81",
      "\x28",
      "\x2b",
      "\x21",
      "\xc3\x90",
      "\xc3\xa9",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xad",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x24",
      "\x25",
      "\xc3\x89",
      "\x2a",
      "\x29",
      "\x3b",
      "\x26",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x23",
      "\xe2\x80\x98",
      "\x2c",
      "\xc3\x9e",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\x8d",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7c",
      "\xc3\xb0",
      "\x3a",
      "\xc3\x86",
      "\xc3\x96",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\x9d",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xb0",
      "\xc3\xb6",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5b",
      "\xc3\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5d",
      "\xc2\xa8",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xbe",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xb3",
      "\xef\xbf\xbd",
      "\xc3\xa6",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xba",
      "\xef\xbf\xbd",
      "\xc2\xb4",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\x93",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\x9a",
      "\x7f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\x69",
      0x00000024 => "\x59",
      0x00000025 => "\x5a",
      0x00000026 => "\x5f",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4a",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\xac",
      0x0000005d => "\xbc",
      0x0000005f => "\x6d",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007c => "\x78",
      0x0000007f => "\xff",
      0x000000a8 => "\xbd",
      0x000000b0 => "\xa0",
      0x000000b4 => "\xe0",
      0x000000c1 => "\x4c",
      0x000000c6 => "\x7b",
      0x000000c9 => "\x5b",
      0x000000cd => "\x75",
      0x000000d0 => "\x50",
      0x000000d3 => "\xee",
      0x000000d6 => "\x7c",
      0x000000da => "\xfe",
      0x000000dd => "\x8d",
      0x000000de => "\x6c",
      0x000000e1 => "\x45",
      0x000000e6 => "\xd0",
      0x000000e9 => "\x51",
      0x000000ed => "\x55",
      0x000000f0 => "\x79",
      0x000000f3 => "\xce",
      0x000000f6 => "\xa1",
      0x000000fa => "\xde",
      0x000000fd => "\xad",
      0x000000fe => "\xc0",
      0x00002018 => "\x6a",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::EBCDIC_IS_FRISS - Conversion routines for EBCDIC_IS_FRISS
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for EBCDIC-IS-FRISS.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: Skyrsuvelar Rikisins og Reykjavikurborgar, feb 1982
   alias FRISS
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      40 |  00000020 | SPACE
      45 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      4A |  0000003C | LESS-THAN SIGN
      4B |  0000002E | FULL STOP
      4C |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      51 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      55 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      59 |  00000024 | DOLLAR SIGN
      5A |  00000025 | PERCENT SIGN
      5B |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  00000026 | AMPERSAND
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      69 |  00000023 | NUMBER SIGN
      6A |  00002018 | LEFT SINGLE QUOTATION MARK
      6B |  0000002C | COMMA
      6C |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      75 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      78 |  0000007C | VERTICAL LINE
      79 |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      7A |  0000003A | COLON
      7B |  000000C6 | LATIN CAPITAL LETTER AE
      7C |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8D |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A0 |  000000B0 | DEGREE SIGN
      A1 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AC |  0000005B | LEFT SQUARE BRACKET
      AD |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      BC |  0000005D | RIGHT SQUARE BRACKET
      BD |  000000A8 | DIAERESIS
      C0 |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CE |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      D0 |  000000E6 | LATIN SMALL LETTER AE
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DE |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      E0 |  000000B4 | ACUTE ACCENT
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FE |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      FF |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_EBCDIC_IS_FRISS

    $main::fatpacked{"Locale/RecodeData/EBCDIC_IT.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_EBCDIC_IT';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for EBCDIC-IT.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::EBCDIC_IT;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00b0,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e9,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00f2,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00f9,
      0x003a,
      0x00a3,
      0x00a7,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00ec,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e0,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e8,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e7,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xb0",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa9",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xb2",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xb9",
      "\x3a",
      "\xc2\xa3",
      "\xc2\xa7",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xac",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa0",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa8",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa7",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a3 => "\x7b",
      0x000000a7 => "\x7c",
      0x000000b0 => "\x4a",
      0x000000e0 => "\xc0",
      0x000000e7 => "\xe0",
      0x000000e8 => "\xd0",
      0x000000e9 => "\x5a",
      0x000000ec => "\xa1",
      0x000000f2 => "\x6a",
      0x000000f9 => "\x79",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::EBCDIC_IT - Conversion routines for EBCDIC_IT
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for EBCDIC-IT.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  000000B0 | DEGREE SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      5A |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      79 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      7A |  0000003A | COLON
      7B |  000000A3 | POUND SIGN
      7C |  000000A7 | SECTION SIGN
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A1 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C0 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D0 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E0 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_EBCDIC_IT

    $main::fatpacked{"Locale/RecodeData/EBCDIC_PT.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_EBCDIC_PT';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for EBCDIC-PT.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::EBCDIC_PT;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005b,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005d,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00f5,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0060,
      0x003a,
      0x00c3,
      0x00d5,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e7,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e3,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00b4,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00c7,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5b",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5d",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xb5",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x60",
      "\x3a",
      "\xc3\x83",
      "\xc3\x95",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa7",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa3",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xb4",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\x87",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x4a",
      0x0000005d => "\x5a",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000b4 => "\xd0",
      0x000000c3 => "\x7b",
      0x000000c7 => "\xe0",
      0x000000d5 => "\x7c",
      0x000000e3 => "\xc0",
      0x000000e7 => "\xa1",
      0x000000f5 => "\x6a",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::EBCDIC_PT - Conversion routines for EBCDIC_PT
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for EBCDIC-PT.
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  0000005B | LEFT SQUARE BRACKET
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      5A |  0000005D | RIGHT SQUARE BRACKET
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      7C |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A1 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C0 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D0 |  000000B4 | ACUTE ACCENT
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E0 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_EBCDIC_PT

    $main::fatpacked{"Locale/RecodeData/EBCDIC_UK.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_EBCDIC_UK';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for EBCDIC-UK.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::EBCDIC_UK;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0024,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x007c,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0021,
      0x00a3,
      0x002a,
      0x0029,
      0x003b,
      0x00ac,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0060,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x203e,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007d,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005c,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x24",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x7c",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x21",
      "\xc2\xa3",
      "\x2a",
      "\x29",
      "\x3b",
      "\xc2\xac",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x60",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x80\xbe",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7d",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5c",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x5a",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x4a",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005c => "\xe0",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\xc0",
      0x0000007c => "\x4f",
      0x0000007d => "\xd0",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a3 => "\x5b",
      0x000000a6 => "\x6a",
      0x000000ac => "\x5f",
      0x0000203e => "\xa1",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::EBCDIC_UK - Conversion routines for EBCDIC_UK
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for EBCDIC-UK.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  00000024 | DOLLAR SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  0000007C | VERTICAL LINE
      50 |  00000026 | AMPERSAND
      5A |  00000021 | EXCLAMATION MARK
      5B |  000000A3 | POUND SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  000000AC | NOT SIGN
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A1 |  0000203E | OVERLINE
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C0 |  0000007B | LEFT CURLY BRACKET
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D0 |  0000007D | RIGHT CURLY BRACKET
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E0 |  0000005C | REVERSE SOLIDUS
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_EBCDIC_UK

    $main::fatpacked{"Locale/RecodeData/EBCDIC_US.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_EBCDIC_US';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for EBCDIC-US.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::EBCDIC_US;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a2,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x007c,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0021,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x00ac,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0060,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007e,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007d,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005c,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa2",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x7c",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x21",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\xc2\xac",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x60",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7e",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7d",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5c",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x5a",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005c => "\xe0",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\xc0",
      0x0000007c => "\x4f",
      0x0000007d => "\xd0",
      0x0000007e => "\xa1",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a2 => "\x4a",
      0x000000a6 => "\x6a",
      0x000000ac => "\x5f",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::EBCDIC_US - Conversion routines for EBCDIC_US
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for EBCDIC-US.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3270 Char Set Ref Ch 10, GA27-2837-9, April 1987
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  000000A2 | CENT SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  0000007C | VERTICAL LINE
      50 |  00000026 | AMPERSAND
      5A |  00000021 | EXCLAMATION MARK
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  000000AC | NOT SIGN
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A1 |  0000007E | TILDE
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C0 |  0000007B | LEFT CURLY BRACKET
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D0 |  0000007D | RIGHT CURLY BRACKET
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E0 |  0000005C | REVERSE SOLIDUS
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_EBCDIC_US

    $main::fatpacked{"Locale/RecodeData/ECMA_CYRILLIC.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ECMA_CYRILLIC';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ECMA-CYRILLIC.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ECMA_CYRILLIC;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0x0452,
      0x0453,
      0x0451,
      0x0454,
      0x0455,
      0x0456,
      0x0457,
      0x0458,
      0x0459,
      0x045a,
      0x045b,
      0x045c,
      0x00ad,
      0x045e,
      0x045f,
      0x2116,
      0x0402,
      0x0403,
      0x0401,
      0x0404,
      0x0405,
      0x0406,
      0x0407,
      0x0408,
      0x0409,
      0x040a,
      0x040b,
      0x040c,
      0x00a4,
      0x040e,
      0x040f,
      0x044e,
      0x0430,
      0x0431,
      0x0446,
      0x0434,
      0x0435,
      0x0444,
      0x0433,
      0x0445,
      0x0438,
      0x0439,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x044f,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0436,
      0x0432,
      0x044c,
      0x044b,
      0x0437,
      0x0448,
      0x044d,
      0x0449,
      0x0447,
      0x044a,
      0x042e,
      0x0410,
      0x0411,
      0x0426,
      0x0414,
      0x0415,
      0x0424,
      0x0413,
      0x0425,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0x041d,
      0x041e,
      0x041f,
      0x042f,
      0x0420,
      0x0421,
      0x0422,
      0x0423,
      0x0416,
      0x0412,
      0x042c,
      0x042b,
      0x0417,
      0x0428,
      0x042d,
      0x0429,
      0x0427,
      0x042a,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xd1\x92",
      "\xd1\x93",
      "\xd1\x91",
      "\xd1\x94",
      "\xd1\x95",
      "\xd1\x96",
      "\xd1\x97",
      "\xd1\x98",
      "\xd1\x99",
      "\xd1\x9a",
      "\xd1\x9b",
      "\xd1\x9c",
      "\xc2\xad",
      "\xd1\x9e",
      "\xd1\x9f",
      "\xe2\x84\x96",
      "\xd0\x82",
      "\xd0\x83",
      "\xd0\x81",
      "\xd0\x84",
      "\xd0\x85",
      "\xd0\x86",
      "\xd0\x87",
      "\xd0\x88",
      "\xd0\x89",
      "\xd0\x8a",
      "\xd0\x8b",
      "\xd0\x8c",
      "\xc2\xa4",
      "\xd0\x8e",
      "\xd0\x8f",
      "\xd1\x8e",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xd1\x86",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd1\x84",
      "\xd0\xb3",
      "\xd1\x85",
      "\xd0\xb8",
      "\xd0\xb9",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xd1\x8f",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd0\xb6",
      "\xd0\xb2",
      "\xd1\x8c",
      "\xd1\x8b",
      "\xd0\xb7",
      "\xd1\x88",
      "\xd1\x8d",
      "\xd1\x89",
      "\xd1\x87",
      "\xd1\x8a",
      "\xd0\xae",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\xa6",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\xa4",
      "\xd0\x93",
      "\xd0\xa5",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xaf",
      "\xd0\xa0",
      "\xd0\xa1",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\x96",
      "\xd0\x92",
      "\xd0\xac",
      "\xd0\xab",
      "\xd0\x97",
      "\xd0\xa8",
      "\xd0\xad",
      "\xd0\xa9",
      "\xd0\xa7",
      "\xd0\xaa",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000a4 => "\xbd",
      0x000000ad => "\xad",
      0x00000401 => "\xb3",
      0x00000402 => "\xb1",
      0x00000403 => "\xb2",
      0x00000404 => "\xb4",
      0x00000405 => "\xb5",
      0x00000406 => "\xb6",
      0x00000407 => "\xb7",
      0x00000408 => "\xb8",
      0x00000409 => "\xb9",
      0x0000040a => "\xba",
      0x0000040b => "\xbb",
      0x0000040c => "\xbc",
      0x0000040e => "\xbe",
      0x0000040f => "\xbf",
      0x00000410 => "\xe1",
      0x00000411 => "\xe2",
      0x00000412 => "\xf7",
      0x00000413 => "\xe7",
      0x00000414 => "\xe4",
      0x00000415 => "\xe5",
      0x00000416 => "\xf6",
      0x00000417 => "\xfa",
      0x00000418 => "\xe9",
      0x00000419 => "\xea",
      0x0000041a => "\xeb",
      0x0000041b => "\xec",
      0x0000041c => "\xed",
      0x0000041d => "\xee",
      0x0000041e => "\xef",
      0x0000041f => "\xf0",
      0x00000420 => "\xf2",
      0x00000421 => "\xf3",
      0x00000422 => "\xf4",
      0x00000423 => "\xf5",
      0x00000424 => "\xe6",
      0x00000425 => "\xe8",
      0x00000426 => "\xe3",
      0x00000427 => "\xfe",
      0x00000428 => "\xfb",
      0x00000429 => "\xfd",
      0x0000042a => "\xff",
      0x0000042b => "\xf9",
      0x0000042c => "\xf8",
      0x0000042d => "\xfc",
      0x0000042e => "\xe0",
      0x0000042f => "\xf1",
      0x00000430 => "\xc1",
      0x00000431 => "\xc2",
      0x00000432 => "\xd7",
      0x00000433 => "\xc7",
      0x00000434 => "\xc4",
      0x00000435 => "\xc5",
      0x00000436 => "\xd6",
      0x00000437 => "\xda",
      0x00000438 => "\xc9",
      0x00000439 => "\xca",
      0x0000043a => "\xcb",
      0x0000043b => "\xcc",
      0x0000043c => "\xcd",
      0x0000043d => "\xce",
      0x0000043e => "\xcf",
      0x0000043f => "\xd0",
      0x00000440 => "\xd2",
      0x00000441 => "\xd3",
      0x00000442 => "\xd4",
      0x00000443 => "\xd5",
      0x00000444 => "\xc6",
      0x00000445 => "\xc8",
      0x00000446 => "\xc3",
      0x00000447 => "\xde",
      0x00000448 => "\xdb",
      0x00000449 => "\xdd",
      0x0000044a => "\xdf",
      0x0000044b => "\xd9",
      0x0000044c => "\xd8",
      0x0000044d => "\xdc",
      0x0000044e => "\xc0",
      0x0000044f => "\xd1",
      0x00000451 => "\xa3",
      0x00000452 => "\xa1",
      0x00000453 => "\xa2",
      0x00000454 => "\xa4",
      0x00000455 => "\xa5",
      0x00000456 => "\xa6",
      0x00000457 => "\xa7",
      0x00000458 => "\xa8",
      0x00000459 => "\xa9",
      0x0000045a => "\xaa",
      0x0000045b => "\xab",
      0x0000045c => "\xac",
      0x0000045e => "\xae",
      0x0000045f => "\xaf",
      0x00002116 => "\xb0",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ECMA_CYRILLIC - Conversion routines for ECMA_CYRILLIC
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ECMA-CYRILLIC.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-111
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  00000452 | CYRILLIC SMALL LETTER DJE (Serbocroatian)
      A2 |  00000453 | CYRILLIC SMALL LETTER GJE
      A3 |  00000451 | CYRILLIC SMALL LETTER IO
      A4 |  00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE
      A5 |  00000455 | CYRILLIC SMALL LETTER DZE
      A6 |  00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
      A7 |  00000457 | CYRILLIC SMALL LETTER YI (Ukrainian)
      A8 |  00000458 | CYRILLIC SMALL LETTER JE
      A9 |  00000459 | CYRILLIC SMALL LETTER LJE
      AA |  0000045A | CYRILLIC SMALL LETTER NJE
      AB |  0000045B | CYRILLIC SMALL LETTER TSHE (Serbocroatian)
      AC |  0000045C | CYRILLIC SMALL LETTER KJE
      AD |  000000AD | SOFT HYPHEN
      AE |  0000045E | CYRILLIC SMALL LETTER SHORT U (Byelorussian)
      AF |  0000045F | CYRILLIC SMALL LETTER DZHE
      B0 |  00002116 | NUMERO SIGN
      B1 |  00000402 | CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
      B2 |  00000403 | CYRILLIC CAPITAL LETTER GJE
      B3 |  00000401 | CYRILLIC CAPITAL LETTER IO
      B4 |  00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE
      B5 |  00000405 | CYRILLIC CAPITAL LETTER DZE
      B6 |  00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
      B7 |  00000407 | CYRILLIC CAPITAL LETTER YI (Ukrainian)
      B8 |  00000408 | CYRILLIC CAPITAL LETTER JE
      B9 |  00000409 | CYRILLIC CAPITAL LETTER LJE
      BA |  0000040A | CYRILLIC CAPITAL LETTER NJE
      BB |  0000040B | CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
      BC |  0000040C | CYRILLIC CAPITAL LETTER KJE
      BD |  000000A4 | CURRENCY SIGN
      BE |  0000040E | CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
      BF |  0000040F | CYRILLIC CAPITAL LETTER DZHE
      C0 |  0000044E | CYRILLIC SMALL LETTER YU
      C1 |  00000430 | CYRILLIC SMALL LETTER A
      C2 |  00000431 | CYRILLIC SMALL LETTER BE
      C3 |  00000446 | CYRILLIC SMALL LETTER TSE
      C4 |  00000434 | CYRILLIC SMALL LETTER DE
      C5 |  00000435 | CYRILLIC SMALL LETTER IE
      C6 |  00000444 | CYRILLIC SMALL LETTER EF
      C7 |  00000433 | CYRILLIC SMALL LETTER GHE
      C8 |  00000445 | CYRILLIC SMALL LETTER HA
      C9 |  00000438 | CYRILLIC SMALL LETTER I
      CA |  00000439 | CYRILLIC SMALL LETTER SHORT I
      CB |  0000043A | CYRILLIC SMALL LETTER KA
      CC |  0000043B | CYRILLIC SMALL LETTER EL
      CD |  0000043C | CYRILLIC SMALL LETTER EM
      CE |  0000043D | CYRILLIC SMALL LETTER EN
      CF |  0000043E | CYRILLIC SMALL LETTER O
      D0 |  0000043F | CYRILLIC SMALL LETTER PE
      D1 |  0000044F | CYRILLIC SMALL LETTER YA
      D2 |  00000440 | CYRILLIC SMALL LETTER ER
      D3 |  00000441 | CYRILLIC SMALL LETTER ES
      D4 |  00000442 | CYRILLIC SMALL LETTER TE
      D5 |  00000443 | CYRILLIC SMALL LETTER U
      D6 |  00000436 | CYRILLIC SMALL LETTER ZHE
      D7 |  00000432 | CYRILLIC SMALL LETTER VE
      D8 |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      D9 |  0000044B | CYRILLIC SMALL LETTER YERU
      DA |  00000437 | CYRILLIC SMALL LETTER ZE
      DB |  00000448 | CYRILLIC SMALL LETTER SHA
      DC |  0000044D | CYRILLIC SMALL LETTER E
      DD |  00000449 | CYRILLIC SMALL LETTER SHCHA
      DE |  00000447 | CYRILLIC SMALL LETTER CHE
      DF |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      E0 |  0000042E | CYRILLIC CAPITAL LETTER YU
      E1 |  00000410 | CYRILLIC CAPITAL LETTER A
      E2 |  00000411 | CYRILLIC CAPITAL LETTER BE
      E3 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      E4 |  00000414 | CYRILLIC CAPITAL LETTER DE
      E5 |  00000415 | CYRILLIC CAPITAL LETTER IE
      E6 |  00000424 | CYRILLIC CAPITAL LETTER EF
      E7 |  00000413 | CYRILLIC CAPITAL LETTER GHE
      E8 |  00000425 | CYRILLIC CAPITAL LETTER HA
      E9 |  00000418 | CYRILLIC CAPITAL LETTER I
      EA |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      EB |  0000041A | CYRILLIC CAPITAL LETTER KA
      EC |  0000041B | CYRILLIC CAPITAL LETTER EL
      ED |  0000041C | CYRILLIC CAPITAL LETTER EM
      EE |  0000041D | CYRILLIC CAPITAL LETTER EN
      EF |  0000041E | CYRILLIC CAPITAL LETTER O
      F0 |  0000041F | CYRILLIC CAPITAL LETTER PE
      F1 |  0000042F | CYRILLIC CAPITAL LETTER YA
      F2 |  00000420 | CYRILLIC CAPITAL LETTER ER
      F3 |  00000421 | CYRILLIC CAPITAL LETTER ES
      F4 |  00000422 | CYRILLIC CAPITAL LETTER TE
      F5 |  00000423 | CYRILLIC CAPITAL LETTER U
      F6 |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      F7 |  00000412 | CYRILLIC CAPITAL LETTER VE
      F8 |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      F9 |  0000042B | CYRILLIC CAPITAL LETTER YERU
      FA |  00000417 | CYRILLIC CAPITAL LETTER ZE
      FB |  00000428 | CYRILLIC CAPITAL LETTER SHA
      FC |  0000042D | CYRILLIC CAPITAL LETTER E
      FD |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      FE |  00000427 | CYRILLIC CAPITAL LETTER CHE
      FF |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ECMA_CYRILLIC

    $main::fatpacked{"Locale/RecodeData/GEORGIAN_ACADEMY.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_GEORGIAN_ACADEMY';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for GEORGIAN-ACADEMY.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::GEORGIAN_ACADEMY;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x201a,
      0x0192,
      0x201e,
      0x2026,
      0x2020,
      0x2021,
      0x02c6,
      0x2030,
      0x0160,
      0x2039,
      0x0152,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x2018,
      0x2019,
      0x201c,
      0x201d,
      0x2022,
      0x2013,
      0x2014,
      0x02dc,
      0x2122,
      0x0161,
      0x203a,
      0x0153,
      0x009d,
      0x009e,
      0x0178,
      0x00a0,
      0x00a1,
      0x00a2,
      0x00a3,
      0x00a4,
      0x00a5,
      0x00a6,
      0x00a7,
      0x00a8,
      0x00a9,
      0x00aa,
      0x00ab,
      0x00ac,
      0x00ad,
      0x00ae,
      0x00af,
      0x00b0,
      0x00b1,
      0x00b2,
      0x00b3,
      0x00b4,
      0x00b5,
      0x00b6,
      0x00b7,
      0x00b8,
      0x00b9,
      0x00ba,
      0x00bb,
      0x00bc,
      0x00bd,
      0x00be,
      0x00bf,
      0x10d0,
      0x10d1,
      0x10d2,
      0x10d3,
      0x10d4,
      0x10d5,
      0x10d6,
      0x10d7,
      0x10d8,
      0x10d9,
      0x10da,
      0x10db,
      0x10dc,
      0x10dd,
      0x10de,
      0x10df,
      0x10e0,
      0x10e1,
      0x10e2,
      0x10e3,
      0x10e4,
      0x10e5,
      0x10e6,
      0x10e7,
      0x10e8,
      0x10e9,
      0x10ea,
      0x10eb,
      0x10ec,
      0x10ed,
      0x10ee,
      0x10ef,
      0x10f0,
      0x10f1,
      0x10f2,
      0x10f3,
      0x10f4,
      0x10f5,
      0x10f6,
      0x00e7,
      0x00e8,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00ec,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00f0,
      0x00f1,
      0x00f2,
      0x00f3,
      0x00f4,
      0x00f5,
      0x00f6,
      0x00f7,
      0x00f8,
      0x00f9,
      0x00fa,
      0x00fb,
      0x00fc,
      0x00fd,
      0x00fe,
      0x00ff,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xe2\x80\x9a",
      "\xc6\x92",
      "\xe2\x80\x9e",
      "\xe2\x80\xa6",
      "\xe2\x80\xa0",
      "\xe2\x80\xa1",
      "\xcb\x86",
      "\xe2\x80\xb0",
      "\xc5\xa0",
      "\xe2\x80\xb9",
      "\xc5\x92",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\xa2",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xcb\x9c",
      "\xe2\x84\xa2",
      "\xc5\xa1",
      "\xe2\x80\xba",
      "\xc5\x93",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc5\xb8",
      "\xc2\xa0",
      "\xc2\xa1",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa4",
      "\xc2\xa5",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc2\xa9",
      "\xc2\xaa",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xc2\xaf",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xc2\xb4",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xc2\xb8",
      "\xc2\xb9",
      "\xc2\xba",
      "\xc2\xbb",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc2\xbf",
      "\xe1\x83\x90",
      "\xe1\x83\x91",
      "\xe1\x83\x92",
      "\xe1\x83\x93",
      "\xe1\x83\x94",
      "\xe1\x83\x95",
      "\xe1\x83\x96",
      "\xe1\x83\x97",
      "\xe1\x83\x98",
      "\xe1\x83\x99",
      "\xe1\x83\x9a",
      "\xe1\x83\x9b",
      "\xe1\x83\x9c",
      "\xe1\x83\x9d",
      "\xe1\x83\x9e",
      "\xe1\x83\x9f",
      "\xe1\x83\xa0",
      "\xe1\x83\xa1",
      "\xe1\x83\xa2",
      "\xe1\x83\xa3",
      "\xe1\x83\xa4",
      "\xe1\x83\xa5",
      "\xe1\x83\xa6",
      "\xe1\x83\xa7",
      "\xe1\x83\xa8",
      "\xe1\x83\xa9",
      "\xe1\x83\xaa",
      "\xe1\x83\xab",
      "\xe1\x83\xac",
      "\xe1\x83\xad",
      "\xe1\x83\xae",
      "\xe1\x83\xaf",
      "\xe1\x83\xb0",
      "\xe1\x83\xb1",
      "\xe1\x83\xb2",
      "\xe1\x83\xb3",
      "\xe1\x83\xb4",
      "\xe1\x83\xb5",
      "\xe1\x83\xb6",
      "\xc3\xa7",
      "\xc3\xa8",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xac",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb0",
      "\xc3\xb1",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc3\xb5",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc3\xb8",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc3\xbf",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x000000a0 => "\xa0",
      0x000000a1 => "\xa1",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xa4",
      0x000000a5 => "\xa5",
      0x000000a6 => "\xa6",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xa8",
      0x000000a9 => "\xa9",
      0x000000aa => "\xaa",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000af => "\xaf",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b2 => "\xb2",
      0x000000b3 => "\xb3",
      0x000000b4 => "\xb4",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000b8 => "\xb8",
      0x000000b9 => "\xb9",
      0x000000ba => "\xba",
      0x000000bb => "\xbb",
      0x000000bc => "\xbc",
      0x000000bd => "\xbd",
      0x000000be => "\xbe",
      0x000000bf => "\xbf",
      0x000000e7 => "\xe7",
      0x000000e8 => "\xe8",
      0x000000e9 => "\xe9",
      0x000000ea => "\xea",
      0x000000eb => "\xeb",
      0x000000ec => "\xec",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000ef => "\xef",
      0x000000f0 => "\xf0",
      0x000000f1 => "\xf1",
      0x000000f2 => "\xf2",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f5 => "\xf5",
      0x000000f6 => "\xf6",
      0x000000f7 => "\xf7",
      0x000000f8 => "\xf8",
      0x000000f9 => "\xf9",
      0x000000fa => "\xfa",
      0x000000fb => "\xfb",
      0x000000fc => "\xfc",
      0x000000fd => "\xfd",
      0x000000fe => "\xfe",
      0x000000ff => "\xff",
      0x00000152 => "\x8c",
      0x00000153 => "\x9c",
      0x00000160 => "\x8a",
      0x00000161 => "\x9a",
      0x00000178 => "\x9f",
      0x00000192 => "\x83",
      0x000002c6 => "\x88",
      0x000002dc => "\x98",
      0x000010d0 => "\xc0",
      0x000010d1 => "\xc1",
      0x000010d2 => "\xc2",
      0x000010d3 => "\xc3",
      0x000010d4 => "\xc4",
      0x000010d5 => "\xc5",
      0x000010d6 => "\xc6",
      0x000010d7 => "\xc7",
      0x000010d8 => "\xc8",
      0x000010d9 => "\xc9",
      0x000010da => "\xca",
      0x000010db => "\xcb",
      0x000010dc => "\xcc",
      0x000010dd => "\xcd",
      0x000010de => "\xce",
      0x000010df => "\xcf",
      0x000010e0 => "\xd0",
      0x000010e1 => "\xd1",
      0x000010e2 => "\xd2",
      0x000010e3 => "\xd3",
      0x000010e4 => "\xd4",
      0x000010e5 => "\xd5",
      0x000010e6 => "\xd6",
      0x000010e7 => "\xd7",
      0x000010e8 => "\xd8",
      0x000010e9 => "\xd9",
      0x000010ea => "\xda",
      0x000010eb => "\xdb",
      0x000010ec => "\xdc",
      0x000010ed => "\xdd",
      0x000010ee => "\xde",
      0x000010ef => "\xdf",
      0x000010f0 => "\xe0",
      0x000010f1 => "\xe1",
      0x000010f2 => "\xe2",
      0x000010f3 => "\xe3",
      0x000010f4 => "\xe4",
      0x000010f5 => "\xe5",
      0x000010f6 => "\xe6",
      0x00002013 => "\x96",
      0x00002014 => "\x97",
      0x00002018 => "\x91",
      0x00002019 => "\x92",
      0x0000201a => "\x82",
      0x0000201c => "\x93",
      0x0000201d => "\x94",
      0x0000201e => "\x84",
      0x00002020 => "\x86",
      0x00002021 => "\x87",
      0x00002022 => "\x95",
      0x00002026 => "\x85",
      0x00002030 => "\x89",
      0x00002039 => "\x8b",
      0x0000203a => "\x9b",
      0x00002122 => "\x99",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::GEORGIAN_ACADEMY - Conversion routines for GEORGIAN-ACADEMY
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for GEORGIAN-ACADEMY.
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      83 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      84 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      85 |  00002026 | HORIZONTAL ELLIPSIS
      86 |  00002020 | DAGGER
      87 |  00002021 | DOUBLE DAGGER
      88 |  000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT
      89 |  00002030 | PER MILLE SIGN
      8A |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      8B |  00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
      8C |  00000152 | LATIN CAPITAL LIGATURE OE
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00002018 | LEFT SINGLE QUOTATION MARK
      92 |  00002019 | RIGHT SINGLE QUOTATION MARK
      93 |  0000201C | LEFT DOUBLE QUOTATION MARK
      94 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      95 |  00002022 | BULLET
      96 |  00002013 | EN DASH
      97 |  00002014 | EM DASH
      98 |  000002DC | SMALL TILDE
      99 |  00002122 | TRADE MARK SIGN
      9A |  00000161 | LATIN SMALL LETTER S WITH CARON
      9B |  0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
      9C |  00000153 | LATIN SMALL LIGATURE OE
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  000000A1 | INVERTED EXCLAMATION MARK
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  000000A5 | YEN SIGN
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  000000AA | FEMININE ORDINAL INDICATOR
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  000000AF | MACRON
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  000000B3 | SUPERSCRIPT THREE
      B4 |  000000B4 | ACUTE ACCENT
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  000000B8 | CEDILLA
      B9 |  000000B9 | SUPERSCRIPT ONE
      BA |  000000BA | MASCULINE ORDINAL INDICATOR
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  000000BC | VULGAR FRACTION ONE QUARTER
      BD |  000000BD | VULGAR FRACTION ONE HALF
      BE |  000000BE | VULGAR FRACTION THREE QUARTERS
      BF |  000000BF | INVERTED QUESTION MARK
      C0 |  000010D0 | GEORGIAN LETTER AN
      C1 |  000010D1 | GEORGIAN LETTER BAN
      C2 |  000010D2 | GEORGIAN LETTER GAN
      C3 |  000010D3 | GEORGIAN LETTER DON
      C4 |  000010D4 | GEORGIAN LETTER EN
      C5 |  000010D5 | GEORGIAN LETTER VIN
      C6 |  000010D6 | GEORGIAN LETTER ZEN
      C7 |  000010D7 | GEORGIAN LETTER TAN
      C8 |  000010D8 | GEORGIAN LETTER IN
      C9 |  000010D9 | GEORGIAN LETTER KAN
      CA |  000010DA | GEORGIAN LETTER LAS
      CB |  000010DB | GEORGIAN LETTER MAN
      CC |  000010DC | GEORGIAN LETTER NAR
      CD |  000010DD | GEORGIAN LETTER ON
      CE |  000010DE | GEORGIAN LETTER PAR
      CF |  000010DF | GEORGIAN LETTER ZHAR
      D0 |  000010E0 | GEORGIAN LETTER RAE
      D1 |  000010E1 | GEORGIAN LETTER SAN
      D2 |  000010E2 | GEORGIAN LETTER TAR
      D3 |  000010E3 | GEORGIAN LETTER UN
      D4 |  000010E4 | GEORGIAN LETTER PHAR
      D5 |  000010E5 | GEORGIAN LETTER KHAR
      D6 |  000010E6 | GEORGIAN LETTER GHAN
      D7 |  000010E7 | GEORGIAN LETTER QAR
      D8 |  000010E8 | GEORGIAN LETTER SHIN
      D9 |  000010E9 | GEORGIAN LETTER CHIN
      DA |  000010EA | GEORGIAN LETTER CAN
      DB |  000010EB | GEORGIAN LETTER JIL
      DC |  000010EC | GEORGIAN LETTER CIL
      DD |  000010ED | GEORGIAN LETTER CHAR
      DE |  000010EE | GEORGIAN LETTER XAN
      DF |  000010EF | GEORGIAN LETTER JHAN
      E0 |  000010F0 | GEORGIAN LETTER HAE
      E1 |  000010F1 | GEORGIAN LETTER HE
      E2 |  000010F2 | GEORGIAN LETTER HIE
      E3 |  000010F3 | GEORGIAN LETTER WE
      E4 |  000010F4 | GEORGIAN LETTER HAR
      E5 |  000010F5 | GEORGIAN LETTER HOE
      E6 |  000010F6 | GEORGIAN LETTER FI
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      F0 |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      F1 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      F2 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  000000F7 | DIVISION SIGN
      F8 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      F9 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      FE |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      FF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_GEORGIAN_ACADEMY

    $main::fatpacked{"Locale/RecodeData/GEORGIAN_PS.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_GEORGIAN_PS';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for GEORGIAN-PS.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::GEORGIAN_PS;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x201a,
      0x0192,
      0x201e,
      0x2026,
      0x2020,
      0x2021,
      0x02c6,
      0x2030,
      0x0160,
      0x2039,
      0x0152,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x2018,
      0x2019,
      0x201c,
      0x201d,
      0x2022,
      0x2013,
      0x2014,
      0x02dc,
      0x2122,
      0x0161,
      0x203a,
      0x0153,
      0x009d,
      0x009e,
      0x0178,
      0x00a0,
      0x00a1,
      0x00a2,
      0x00a3,
      0x00a4,
      0x00a5,
      0x00a6,
      0x00a7,
      0x00a8,
      0x00a9,
      0x00aa,
      0x00ab,
      0x00ac,
      0x00ad,
      0x00ae,
      0x00af,
      0x00b0,
      0x00b1,
      0x00b2,
      0x00b3,
      0x00b4,
      0x00b5,
      0x00b6,
      0x00b7,
      0x00b8,
      0x00b9,
      0x00ba,
      0x00bb,
      0x00bc,
      0x00bd,
      0x00be,
      0x00bf,
      0x10d0,
      0x10d1,
      0x10d2,
      0x10d3,
      0x10d4,
      0x10d5,
      0x10d6,
      0x10f1,
      0x10d7,
      0x10d8,
      0x10d9,
      0x10da,
      0x10db,
      0x10dc,
      0x10f2,
      0x10dd,
      0x10de,
      0x10df,
      0x10e0,
      0x10e1,
      0x10e2,
      0x10f3,
      0x10e3,
      0x10e4,
      0x10e5,
      0x10e6,
      0x10e7,
      0x10e8,
      0x10e9,
      0x10ea,
      0x10eb,
      0x10ec,
      0x10ed,
      0x10ee,
      0x10f4,
      0x10ef,
      0x10f0,
      0x10f5,
      0x00e6,
      0x00e7,
      0x00e8,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00ec,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00f0,
      0x00f1,
      0x00f2,
      0x00f3,
      0x00f4,
      0x00f5,
      0x00f6,
      0x00f7,
      0x00f8,
      0x00f9,
      0x00fa,
      0x00fb,
      0x00fc,
      0x00fd,
      0x00fe,
      0x00ff,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xe2\x80\x9a",
      "\xc6\x92",
      "\xe2\x80\x9e",
      "\xe2\x80\xa6",
      "\xe2\x80\xa0",
      "\xe2\x80\xa1",
      "\xcb\x86",
      "\xe2\x80\xb0",
      "\xc5\xa0",
      "\xe2\x80\xb9",
      "\xc5\x92",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\xa2",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xcb\x9c",
      "\xe2\x84\xa2",
      "\xc5\xa1",
      "\xe2\x80\xba",
      "\xc5\x93",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc5\xb8",
      "\xc2\xa0",
      "\xc2\xa1",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa4",
      "\xc2\xa5",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc2\xa9",
      "\xc2\xaa",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xc2\xaf",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xc2\xb4",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xc2\xb8",
      "\xc2\xb9",
      "\xc2\xba",
      "\xc2\xbb",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc2\xbf",
      "\xe1\x83\x90",
      "\xe1\x83\x91",
      "\xe1\x83\x92",
      "\xe1\x83\x93",
      "\xe1\x83\x94",
      "\xe1\x83\x95",
      "\xe1\x83\x96",
      "\xe1\x83\xb1",
      "\xe1\x83\x97",
      "\xe1\x83\x98",
      "\xe1\x83\x99",
      "\xe1\x83\x9a",
      "\xe1\x83\x9b",
      "\xe1\x83\x9c",
      "\xe1\x83\xb2",
      "\xe1\x83\x9d",
      "\xe1\x83\x9e",
      "\xe1\x83\x9f",
      "\xe1\x83\xa0",
      "\xe1\x83\xa1",
      "\xe1\x83\xa2",
      "\xe1\x83\xb3",
      "\xe1\x83\xa3",
      "\xe1\x83\xa4",
      "\xe1\x83\xa5",
      "\xe1\x83\xa6",
      "\xe1\x83\xa7",
      "\xe1\x83\xa8",
      "\xe1\x83\xa9",
      "\xe1\x83\xaa",
      "\xe1\x83\xab",
      "\xe1\x83\xac",
      "\xe1\x83\xad",
      "\xe1\x83\xae",
      "\xe1\x83\xb4",
      "\xe1\x83\xaf",
      "\xe1\x83\xb0",
      "\xe1\x83\xb5",
      "\xc3\xa6",
      "\xc3\xa7",
      "\xc3\xa8",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xac",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb0",
      "\xc3\xb1",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc3\xb5",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc3\xb8",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc3\xbf",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x000000a0 => "\xa0",
      0x000000a1 => "\xa1",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xa4",
      0x000000a5 => "\xa5",
      0x000000a6 => "\xa6",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xa8",
      0x000000a9 => "\xa9",
      0x000000aa => "\xaa",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000af => "\xaf",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b2 => "\xb2",
      0x000000b3 => "\xb3",
      0x000000b4 => "\xb4",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000b8 => "\xb8",
      0x000000b9 => "\xb9",
      0x000000ba => "\xba",
      0x000000bb => "\xbb",
      0x000000bc => "\xbc",
      0x000000bd => "\xbd",
      0x000000be => "\xbe",
      0x000000bf => "\xbf",
      0x000000e6 => "\xe6",
      0x000000e7 => "\xe7",
      0x000000e8 => "\xe8",
      0x000000e9 => "\xe9",
      0x000000ea => "\xea",
      0x000000eb => "\xeb",
      0x000000ec => "\xec",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000ef => "\xef",
      0x000000f0 => "\xf0",
      0x000000f1 => "\xf1",
      0x000000f2 => "\xf2",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f5 => "\xf5",
      0x000000f6 => "\xf6",
      0x000000f7 => "\xf7",
      0x000000f8 => "\xf8",
      0x000000f9 => "\xf9",
      0x000000fa => "\xfa",
      0x000000fb => "\xfb",
      0x000000fc => "\xfc",
      0x000000fd => "\xfd",
      0x000000fe => "\xfe",
      0x000000ff => "\xff",
      0x00000152 => "\x8c",
      0x00000153 => "\x9c",
      0x00000160 => "\x8a",
      0x00000161 => "\x9a",
      0x00000178 => "\x9f",
      0x00000192 => "\x83",
      0x000002c6 => "\x88",
      0x000002dc => "\x98",
      0x000010d0 => "\xc0",
      0x000010d1 => "\xc1",
      0x000010d2 => "\xc2",
      0x000010d3 => "\xc3",
      0x000010d4 => "\xc4",
      0x000010d5 => "\xc5",
      0x000010d6 => "\xc6",
      0x000010d7 => "\xc8",
      0x000010d8 => "\xc9",
      0x000010d9 => "\xca",
      0x000010da => "\xcb",
      0x000010db => "\xcc",
      0x000010dc => "\xcd",
      0x000010dd => "\xcf",
      0x000010de => "\xd0",
      0x000010df => "\xd1",
      0x000010e0 => "\xd2",
      0x000010e1 => "\xd3",
      0x000010e2 => "\xd4",
      0x000010e3 => "\xd6",
      0x000010e4 => "\xd7",
      0x000010e5 => "\xd8",
      0x000010e6 => "\xd9",
      0x000010e7 => "\xda",
      0x000010e8 => "\xdb",
      0x000010e9 => "\xdc",
      0x000010ea => "\xdd",
      0x000010eb => "\xde",
      0x000010ec => "\xdf",
      0x000010ed => "\xe0",
      0x000010ee => "\xe1",
      0x000010ef => "\xe3",
      0x000010f0 => "\xe4",
      0x000010f1 => "\xc7",
      0x000010f2 => "\xce",
      0x000010f3 => "\xd5",
      0x000010f4 => "\xe2",
      0x000010f5 => "\xe5",
      0x00002013 => "\x96",
      0x00002014 => "\x97",
      0x00002018 => "\x91",
      0x00002019 => "\x92",
      0x0000201a => "\x82",
      0x0000201c => "\x93",
      0x0000201d => "\x94",
      0x0000201e => "\x84",
      0x00002020 => "\x86",
      0x00002021 => "\x87",
      0x00002022 => "\x95",
      0x00002026 => "\x85",
      0x00002030 => "\x89",
      0x00002039 => "\x8b",
      0x0000203a => "\x9b",
      0x00002122 => "\x99",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::GEORGIAN_PS - Conversion routines for GEORGIAN-PS
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for GEORGIAN-PS.
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      83 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      84 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      85 |  00002026 | HORIZONTAL ELLIPSIS
      86 |  00002020 | DAGGER
      87 |  00002021 | DOUBLE DAGGER
      88 |  000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT
      89 |  00002030 | PER MILLE SIGN
      8A |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      8B |  00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
      8C |  00000152 | LATIN CAPITAL LIGATURE OE
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00002018 | LEFT SINGLE QUOTATION MARK
      92 |  00002019 | RIGHT SINGLE QUOTATION MARK
      93 |  0000201C | LEFT DOUBLE QUOTATION MARK
      94 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      95 |  00002022 | BULLET
      96 |  00002013 | EN DASH
      97 |  00002014 | EM DASH
      98 |  000002DC | SMALL TILDE
      99 |  00002122 | TRADE MARK SIGN
      9A |  00000161 | LATIN SMALL LETTER S WITH CARON
      9B |  0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
      9C |  00000153 | LATIN SMALL LIGATURE OE
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  000000A1 | INVERTED EXCLAMATION MARK
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  000000A5 | YEN SIGN
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  000000AA | FEMININE ORDINAL INDICATOR
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  000000AF | MACRON
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  000000B3 | SUPERSCRIPT THREE
      B4 |  000000B4 | ACUTE ACCENT
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  000000B8 | CEDILLA
      B9 |  000000B9 | SUPERSCRIPT ONE
      BA |  000000BA | MASCULINE ORDINAL INDICATOR
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  000000BC | VULGAR FRACTION ONE QUARTER
      BD |  000000BD | VULGAR FRACTION ONE HALF
      BE |  000000BE | VULGAR FRACTION THREE QUARTERS
      BF |  000000BF | INVERTED QUESTION MARK
      C0 |  000010D0 | GEORGIAN LETTER AN
      C1 |  000010D1 | GEORGIAN LETTER BAN
      C2 |  000010D2 | GEORGIAN LETTER GAN
      C3 |  000010D3 | GEORGIAN LETTER DON
      C4 |  000010D4 | GEORGIAN LETTER EN
      C5 |  000010D5 | GEORGIAN LETTER VIN
      C6 |  000010D6 | GEORGIAN LETTER ZEN
      C7 |  000010F1 | GEORGIAN LETTER HE
      C8 |  000010D7 | GEORGIAN LETTER TAN
      C9 |  000010D8 | GEORGIAN LETTER IN
      CA |  000010D9 | GEORGIAN LETTER KAN
      CB |  000010DA | GEORGIAN LETTER LAS
      CC |  000010DB | GEORGIAN LETTER MAN
      CD |  000010DC | GEORGIAN LETTER NAR
      CE |  000010F2 | GEORGIAN LETTER HIE
      CF |  000010DD | GEORGIAN LETTER ON
      D0 |  000010DE | GEORGIAN LETTER PAR
      D1 |  000010DF | GEORGIAN LETTER ZHAR
      D2 |  000010E0 | GEORGIAN LETTER RAE
      D3 |  000010E1 | GEORGIAN LETTER SAN
      D4 |  000010E2 | GEORGIAN LETTER TAR
      D5 |  000010F3 | GEORGIAN LETTER WE
      D6 |  000010E3 | GEORGIAN LETTER UN
      D7 |  000010E4 | GEORGIAN LETTER PHAR
      D8 |  000010E5 | GEORGIAN LETTER KHAR
      D9 |  000010E6 | GEORGIAN LETTER GHAN
      DA |  000010E7 | GEORGIAN LETTER QAR
      DB |  000010E8 | GEORGIAN LETTER SHIN
      DC |  000010E9 | GEORGIAN LETTER CHIN
      DD |  000010EA | GEORGIAN LETTER CAN
      DE |  000010EB | GEORGIAN LETTER JIL
      DF |  000010EC | GEORGIAN LETTER CIL
      E0 |  000010ED | GEORGIAN LETTER CHAR
      E1 |  000010EE | GEORGIAN LETTER XAN
      E2 |  000010F4 | GEORGIAN LETTER HAR
      E3 |  000010EF | GEORGIAN LETTER JHAN
      E4 |  000010F0 | GEORGIAN LETTER HAE
      E5 |  000010F5 | GEORGIAN LETTER HOE
      E6 |  000000E6 | LATIN SMALL LETTER AE
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      F0 |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      F1 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      F2 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  000000F7 | DIVISION SIGN
      F8 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      F9 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      FE |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      FF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_GEORGIAN_PS

    $main::fatpacked{"Locale/RecodeData/GOST_19768_74.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_GOST_19768_74';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for GOST_19768-74.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::GOST_19768_74;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0x0401,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00ad,
      0xfffd,
      0xfffd,
      0x0410,
      0x0411,
      0x0412,
      0x0413,
      0x0414,
      0x0415,
      0x0416,
      0x0417,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0x041d,
      0x041e,
      0x041f,
      0x0420,
      0x0421,
      0x0422,
      0x0423,
      0x0424,
      0x0425,
      0x0426,
      0x0427,
      0x0428,
      0x0429,
      0x042a,
      0x042b,
      0x042c,
      0x042d,
      0x042e,
      0x042f,
      0x0430,
      0x0431,
      0x0432,
      0x0433,
      0x0434,
      0x0435,
      0x0436,
      0x0437,
      0x0438,
      0x0439,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0444,
      0x0445,
      0x0446,
      0x0447,
      0x0448,
      0x0449,
      0x044a,
      0x044b,
      0x044c,
      0x044d,
      0x044e,
      0x044f,
      0xfffd,
      0x0451,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xd0\x81",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xad",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\x92",
      "\xd0\x93",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\x96",
      "\xd0\x97",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xa0",
      "\xd0\xa1",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\xa4",
      "\xd0\xa5",
      "\xd0\xa6",
      "\xd0\xa7",
      "\xd0\xa8",
      "\xd0\xa9",
      "\xd0\xaa",
      "\xd0\xab",
      "\xd0\xac",
      "\xd0\xad",
      "\xd0\xae",
      "\xd0\xaf",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xd0\xb2",
      "\xd0\xb3",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd0\xb6",
      "\xd0\xb7",
      "\xd0\xb8",
      "\xd0\xb9",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd1\x84",
      "\xd1\x85",
      "\xd1\x86",
      "\xd1\x87",
      "\xd1\x88",
      "\xd1\x89",
      "\xd1\x8a",
      "\xd1\x8b",
      "\xd1\x8c",
      "\xd1\x8d",
      "\xd1\x8e",
      "\xd1\x8f",
      "\xef\xbf\xbd",
      "\xd1\x91",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000ad => "\xad",
      0x00000401 => "\xa1",
      0x00000410 => "\xb0",
      0x00000411 => "\xb1",
      0x00000412 => "\xb2",
      0x00000413 => "\xb3",
      0x00000414 => "\xb4",
      0x00000415 => "\xb5",
      0x00000416 => "\xb6",
      0x00000417 => "\xb7",
      0x00000418 => "\xb8",
      0x00000419 => "\xb9",
      0x0000041a => "\xba",
      0x0000041b => "\xbb",
      0x0000041c => "\xbc",
      0x0000041d => "\xbd",
      0x0000041e => "\xbe",
      0x0000041f => "\xbf",
      0x00000420 => "\xc0",
      0x00000421 => "\xc1",
      0x00000422 => "\xc2",
      0x00000423 => "\xc3",
      0x00000424 => "\xc4",
      0x00000425 => "\xc5",
      0x00000426 => "\xc6",
      0x00000427 => "\xc7",
      0x00000428 => "\xc8",
      0x00000429 => "\xc9",
      0x0000042a => "\xca",
      0x0000042b => "\xcb",
      0x0000042c => "\xcc",
      0x0000042d => "\xcd",
      0x0000042e => "\xce",
      0x0000042f => "\xcf",
      0x00000430 => "\xd0",
      0x00000431 => "\xd1",
      0x00000432 => "\xd2",
      0x00000433 => "\xd3",
      0x00000434 => "\xd4",
      0x00000435 => "\xd5",
      0x00000436 => "\xd6",
      0x00000437 => "\xd7",
      0x00000438 => "\xd8",
      0x00000439 => "\xd9",
      0x0000043a => "\xda",
      0x0000043b => "\xdb",
      0x0000043c => "\xdc",
      0x0000043d => "\xdd",
      0x0000043e => "\xde",
      0x0000043f => "\xdf",
      0x00000440 => "\xe0",
      0x00000441 => "\xe1",
      0x00000442 => "\xe2",
      0x00000443 => "\xe3",
      0x00000444 => "\xe4",
      0x00000445 => "\xe5",
      0x00000446 => "\xe6",
      0x00000447 => "\xe7",
      0x00000448 => "\xe8",
      0x00000449 => "\xe9",
      0x0000044a => "\xea",
      0x0000044b => "\xeb",
      0x0000044c => "\xec",
      0x0000044d => "\xed",
      0x0000044e => "\xee",
      0x0000044f => "\xef",
      0x00000451 => "\xf1",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::GOST_19768_74 - Conversion routines for GOST_19768_74
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for GOST_19768-74.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ST_SEV_358-88
   alias ISO-IR-153
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  00000401 | CYRILLIC CAPITAL LETTER IO
      AD |  000000AD | SOFT HYPHEN
      B0 |  00000410 | CYRILLIC CAPITAL LETTER A
      B1 |  00000411 | CYRILLIC CAPITAL LETTER BE
      B2 |  00000412 | CYRILLIC CAPITAL LETTER VE
      B3 |  00000413 | CYRILLIC CAPITAL LETTER GHE
      B4 |  00000414 | CYRILLIC CAPITAL LETTER DE
      B5 |  00000415 | CYRILLIC CAPITAL LETTER IE
      B6 |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      B7 |  00000417 | CYRILLIC CAPITAL LETTER ZE
      B8 |  00000418 | CYRILLIC CAPITAL LETTER I
      B9 |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      BA |  0000041A | CYRILLIC CAPITAL LETTER KA
      BB |  0000041B | CYRILLIC CAPITAL LETTER EL
      BC |  0000041C | CYRILLIC CAPITAL LETTER EM
      BD |  0000041D | CYRILLIC CAPITAL LETTER EN
      BE |  0000041E | CYRILLIC CAPITAL LETTER O
      BF |  0000041F | CYRILLIC CAPITAL LETTER PE
      C0 |  00000420 | CYRILLIC CAPITAL LETTER ER
      C1 |  00000421 | CYRILLIC CAPITAL LETTER ES
      C2 |  00000422 | CYRILLIC CAPITAL LETTER TE
      C3 |  00000423 | CYRILLIC CAPITAL LETTER U
      C4 |  00000424 | CYRILLIC CAPITAL LETTER EF
      C5 |  00000425 | CYRILLIC CAPITAL LETTER HA
      C6 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      C7 |  00000427 | CYRILLIC CAPITAL LETTER CHE
      C8 |  00000428 | CYRILLIC CAPITAL LETTER SHA
      C9 |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      CA |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
      CB |  0000042B | CYRILLIC CAPITAL LETTER YERU
      CC |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      CD |  0000042D | CYRILLIC CAPITAL LETTER E
      CE |  0000042E | CYRILLIC CAPITAL LETTER YU
      CF |  0000042F | CYRILLIC CAPITAL LETTER YA
      D0 |  00000430 | CYRILLIC SMALL LETTER A
      D1 |  00000431 | CYRILLIC SMALL LETTER BE
      D2 |  00000432 | CYRILLIC SMALL LETTER VE
      D3 |  00000433 | CYRILLIC SMALL LETTER GHE
      D4 |  00000434 | CYRILLIC SMALL LETTER DE
      D5 |  00000435 | CYRILLIC SMALL LETTER IE
      D6 |  00000436 | CYRILLIC SMALL LETTER ZHE
      D7 |  00000437 | CYRILLIC SMALL LETTER ZE
      D8 |  00000438 | CYRILLIC SMALL LETTER I
      D9 |  00000439 | CYRILLIC SMALL LETTER SHORT I
      DA |  0000043A | CYRILLIC SMALL LETTER KA
      DB |  0000043B | CYRILLIC SMALL LETTER EL
      DC |  0000043C | CYRILLIC SMALL LETTER EM
      DD |  0000043D | CYRILLIC SMALL LETTER EN
      DE |  0000043E | CYRILLIC SMALL LETTER O
      DF |  0000043F | CYRILLIC SMALL LETTER PE
      E0 |  00000440 | CYRILLIC SMALL LETTER ER
      E1 |  00000441 | CYRILLIC SMALL LETTER ES
      E2 |  00000442 | CYRILLIC SMALL LETTER TE
      E3 |  00000443 | CYRILLIC SMALL LETTER U
      E4 |  00000444 | CYRILLIC SMALL LETTER EF
      E5 |  00000445 | CYRILLIC SMALL LETTER HA
      E6 |  00000446 | CYRILLIC SMALL LETTER TSE
      E7 |  00000447 | CYRILLIC SMALL LETTER CHE
      E8 |  00000448 | CYRILLIC SMALL LETTER SHA
      E9 |  00000449 | CYRILLIC SMALL LETTER SHCHA
      EA |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      EB |  0000044B | CYRILLIC SMALL LETTER YERU
      EC |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      ED |  0000044D | CYRILLIC SMALL LETTER E
      EE |  0000044E | CYRILLIC SMALL LETTER YU
      EF |  0000044F | CYRILLIC SMALL LETTER YA
      F1 |  00000451 | CYRILLIC SMALL LETTER IO
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_GOST_19768_74

    $main::fatpacked{"Locale/RecodeData/GREEK7.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_GREEK7';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for GREEK7.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::GREEK7;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x00a4,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0391,
      0x0392,
      0x0393,
      0x0394,
      0x0395,
      0x0396,
      0x0397,
      0x0398,
      0x0399,
      0xfffd,
      0x039a,
      0x039b,
      0x039c,
      0x039d,
      0x039e,
      0x039f,
      0x03a0,
      0x03a1,
      0x03a3,
      0x03a4,
      0x03a5,
      0x03a6,
      0xfffd,
      0x03a7,
      0x03a8,
      0x03a9,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x03b1,
      0x03b2,
      0x03b3,
      0x03b4,
      0x03b5,
      0x03b6,
      0x03b7,
      0x03b8,
      0x03b9,
      0xfffd,
      0x03ba,
      0x03bb,
      0x03bc,
      0x03bd,
      0x03be,
      0x03bf,
      0x03c0,
      0x03c1,
      0x03c3,
      0x03c4,
      0x03c5,
      0x03c6,
      0x03c2,
      0x03c7,
      0x03c8,
      0x03c9,
      0x007b,
      0x007c,
      0x007d,
      0x203e,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\xc2\xa4",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\xce\x91",
      "\xce\x92",
      "\xce\x93",
      "\xce\x94",
      "\xce\x95",
      "\xce\x96",
      "\xce\x97",
      "\xce\x98",
      "\xce\x99",
      "\xef\xbf\xbd",
      "\xce\x9a",
      "\xce\x9b",
      "\xce\x9c",
      "\xce\x9d",
      "\xce\x9e",
      "\xce\x9f",
      "\xce\xa0",
      "\xce\xa1",
      "\xce\xa3",
      "\xce\xa4",
      "\xce\xa5",
      "\xce\xa6",
      "\xef\xbf\xbd",
      "\xce\xa7",
      "\xce\xa8",
      "\xce\xa9",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\xce\xb1",
      "\xce\xb2",
      "\xce\xb3",
      "\xce\xb4",
      "\xce\xb5",
      "\xce\xb6",
      "\xce\xb7",
      "\xce\xb8",
      "\xce\xb9",
      "\xef\xbf\xbd",
      "\xce\xba",
      "\xce\xbb",
      "\xce\xbc",
      "\xce\xbd",
      "\xce\xbe",
      "\xce\xbf",
      "\xcf\x80",
      "\xcf\x81",
      "\xcf\x83",
      "\xcf\x84",
      "\xcf\x85",
      "\xcf\x86",
      "\xcf\x82",
      "\xcf\x87",
      "\xcf\x88",
      "\xcf\x89",
      "\x7b",
      "\x7c",
      "\x7d",
      "\xe2\x80\xbe",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007f => "\x7f",
      0x000000a4 => "\x24",
      0x00000391 => "\x41",
      0x00000392 => "\x42",
      0x00000393 => "\x43",
      0x00000394 => "\x44",
      0x00000395 => "\x45",
      0x00000396 => "\x46",
      0x00000397 => "\x47",
      0x00000398 => "\x48",
      0x00000399 => "\x49",
      0x0000039a => "\x4b",
      0x0000039b => "\x4c",
      0x0000039c => "\x4d",
      0x0000039d => "\x4e",
      0x0000039e => "\x4f",
      0x0000039f => "\x50",
      0x000003a0 => "\x51",
      0x000003a1 => "\x52",
      0x000003a3 => "\x53",
      0x000003a4 => "\x54",
      0x000003a5 => "\x55",
      0x000003a6 => "\x56",
      0x000003a7 => "\x58",
      0x000003a8 => "\x59",
      0x000003a9 => "\x5a",
      0x000003b1 => "\x61",
      0x000003b2 => "\x62",
      0x000003b3 => "\x63",
      0x000003b4 => "\x64",
      0x000003b5 => "\x65",
      0x000003b6 => "\x66",
      0x000003b7 => "\x67",
      0x000003b8 => "\x68",
      0x000003b9 => "\x69",
      0x000003ba => "\x6b",
      0x000003bb => "\x6c",
      0x000003bc => "\x6d",
      0x000003bd => "\x6e",
      0x000003be => "\x6f",
      0x000003bf => "\x70",
      0x000003c0 => "\x71",
      0x000003c1 => "\x72",
      0x000003c2 => "\x77",
      0x000003c3 => "\x73",
      0x000003c4 => "\x74",
      0x000003c5 => "\x75",
      0x000003c6 => "\x76",
      0x000003c7 => "\x78",
      0x000003c8 => "\x79",
      0x000003c9 => "\x7a",
      0x0000203e => "\x7e",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::GREEK7 - Conversion routines for GREEK7
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for GREEK7.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
   repertoiremap: mnemonic,ds
    source: ECMA registry
   alias ISO-IR-88
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  000000A4 | CURRENCY SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000391 | GREEK CAPITAL LETTER ALPHA
      42 |  00000392 | GREEK CAPITAL LETTER BETA
      43 |  00000393 | GREEK CAPITAL LETTER GAMMA
      44 |  00000394 | GREEK CAPITAL LETTER DELTA
      45 |  00000395 | GREEK CAPITAL LETTER EPSILON
      46 |  00000396 | GREEK CAPITAL LETTER ZETA
      47 |  00000397 | GREEK CAPITAL LETTER ETA
      48 |  00000398 | GREEK CAPITAL LETTER THETA
      49 |  00000399 | GREEK CAPITAL LETTER IOTA
      4B |  0000039A | GREEK CAPITAL LETTER KAPPA
      4C |  0000039B | GREEK CAPITAL LETTER LAMDA
      4D |  0000039C | GREEK CAPITAL LETTER MU
      4E |  0000039D | GREEK CAPITAL LETTER NU
      4F |  0000039E | GREEK CAPITAL LETTER XI
      50 |  0000039F | GREEK CAPITAL LETTER OMICRON
      51 |  000003A0 | GREEK CAPITAL LETTER PI
      52 |  000003A1 | GREEK CAPITAL LETTER RHO
      53 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      54 |  000003A4 | GREEK CAPITAL LETTER TAU
      55 |  000003A5 | GREEK CAPITAL LETTER UPSILON
      56 |  000003A6 | GREEK CAPITAL LETTER PHI
      58 |  000003A7 | GREEK CAPITAL LETTER CHI
      59 |  000003A8 | GREEK CAPITAL LETTER PSI
      5A |  000003A9 | GREEK CAPITAL LETTER OMEGA
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  000003B1 | GREEK SMALL LETTER ALPHA
      62 |  000003B2 | GREEK SMALL LETTER BETA
      63 |  000003B3 | GREEK SMALL LETTER GAMMA
      64 |  000003B4 | GREEK SMALL LETTER DELTA
      65 |  000003B5 | GREEK SMALL LETTER EPSILON
      66 |  000003B6 | GREEK SMALL LETTER ZETA
      67 |  000003B7 | GREEK SMALL LETTER ETA
      68 |  000003B8 | GREEK SMALL LETTER THETA
      69 |  000003B9 | GREEK SMALL LETTER IOTA
      6B |  000003BA | GREEK SMALL LETTER KAPPA
      6C |  000003BB | GREEK SMALL LETTER LAMDA
      6D |  000003BC | GREEK SMALL LETTER MU
      6E |  000003BD | GREEK SMALL LETTER NU
      6F |  000003BE | GREEK SMALL LETTER XI
      70 |  000003BF | GREEK SMALL LETTER OMICRON
      71 |  000003C0 | GREEK SMALL LETTER PI
      72 |  000003C1 | GREEK SMALL LETTER RHO
      73 |  000003C3 | GREEK SMALL LETTER SIGMA
      74 |  000003C4 | GREEK SMALL LETTER TAU
      75 |  000003C5 | GREEK SMALL LETTER UPSILON
      76 |  000003C6 | GREEK SMALL LETTER PHI
      77 |  000003C2 | GREEK SMALL LETTER FINAL SIGMA
      78 |  000003C7 | GREEK SMALL LETTER CHI
      79 |  000003C8 | GREEK SMALL LETTER PSI
      7A |  000003C9 | GREEK SMALL LETTER OMEGA
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000203E | OVERLINE
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_GREEK7

    $main::fatpacked{"Locale/RecodeData/GREEK7_OLD.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_GREEK7_OLD';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for GREEK7-OLD.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::GREEK7_OLD;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x00a3,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x00b4,
      0x03b1,
      0x03b2,
      0x03c8,
      0x03b4,
      0x03b5,
      0x03c6,
      0x03b3,
      0x03b7,
      0x03b9,
      0x03be,
      0x03ba,
      0x03bb,
      0x03bc,
      0x03bd,
      0x03bf,
      0x03c0,
      0x037a,
      0x03c1,
      0x03c3,
      0x03c4,
      0x03b8,
      0x03c9,
      0x03c2,
      0x03c7,
      0x03c5,
      0x03b6,
      0x1fcf,
      0x1fbf,
      0x1fce,
      0x007e,
      0x005f,
      0x0060,
      0x0391,
      0x0392,
      0x03a8,
      0x0394,
      0x0395,
      0x03a6,
      0x0393,
      0x0397,
      0x0399,
      0x039e,
      0x039a,
      0x039b,
      0x039c,
      0x039d,
      0x039f,
      0x03a0,
      0xfffd,
      0x03a1,
      0x03a3,
      0x03a4,
      0x0398,
      0x03a9,
      0x00b7,
      0x03a7,
      0x03a5,
      0x0396,
      0x1fdf,
      0x1ffe,
      0x1fde,
      0x00a8,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\xc2\xa3",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\xc2\xb4",
      "\xce\xb1",
      "\xce\xb2",
      "\xcf\x88",
      "\xce\xb4",
      "\xce\xb5",
      "\xcf\x86",
      "\xce\xb3",
      "\xce\xb7",
      "\xce\xb9",
      "\xce\xbe",
      "\xce\xba",
      "\xce\xbb",
      "\xce\xbc",
      "\xce\xbd",
      "\xce\xbf",
      "\xcf\x80",
      "\xcd\xba",
      "\xcf\x81",
      "\xcf\x83",
      "\xcf\x84",
      "\xce\xb8",
      "\xcf\x89",
      "\xcf\x82",
      "\xcf\x87",
      "\xcf\x85",
      "\xce\xb6",
      "\xe1\xbf\x8f",
      "\xe1\xbe\xbf",
      "\xe1\xbf\x8e",
      "\x7e",
      "\x5f",
      "\x60",
      "\xce\x91",
      "\xce\x92",
      "\xce\xa8",
      "\xce\x94",
      "\xce\x95",
      "\xce\xa6",
      "\xce\x93",
      "\xce\x97",
      "\xce\x99",
      "\xce\x9e",
      "\xce\x9a",
      "\xce\x9b",
      "\xce\x9c",
      "\xce\x9d",
      "\xce\x9f",
      "\xce\xa0",
      "\xef\xbf\xbd",
      "\xce\xa1",
      "\xce\xa3",
      "\xce\xa4",
      "\xce\x98",
      "\xce\xa9",
      "\xc2\xb7",
      "\xce\xa7",
      "\xce\xa5",
      "\xce\x96",
      "\xe1\xbf\x9f",
      "\xe1\xbf\xbe",
      "\xe1\xbf\x9e",
      "\xc2\xa8",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x0000007e => "\x5e",
      0x0000007f => "\x7f",
      0x000000a3 => "\x23",
      0x000000a8 => "\x7e",
      0x000000b4 => "\x40",
      0x000000b7 => "\x77",
      0x0000037a => "\x51",
      0x00000391 => "\x61",
      0x00000392 => "\x62",
      0x00000393 => "\x67",
      0x00000394 => "\x64",
      0x00000395 => "\x65",
      0x00000396 => "\x7a",
      0x00000397 => "\x68",
      0x00000398 => "\x75",
      0x00000399 => "\x69",
      0x0000039a => "\x6b",
      0x0000039b => "\x6c",
      0x0000039c => "\x6d",
      0x0000039d => "\x6e",
      0x0000039e => "\x6a",
      0x0000039f => "\x6f",
      0x000003a0 => "\x70",
      0x000003a1 => "\x72",
      0x000003a3 => "\x73",
      0x000003a4 => "\x74",
      0x000003a5 => "\x79",
      0x000003a6 => "\x66",
      0x000003a7 => "\x78",
      0x000003a8 => "\x63",
      0x000003a9 => "\x76",
      0x000003b1 => "\x41",
      0x000003b2 => "\x42",
      0x000003b3 => "\x47",
      0x000003b4 => "\x44",
      0x000003b5 => "\x45",
      0x000003b6 => "\x5a",
      0x000003b7 => "\x48",
      0x000003b8 => "\x55",
      0x000003b9 => "\x49",
      0x000003ba => "\x4b",
      0x000003bb => "\x4c",
      0x000003bc => "\x4d",
      0x000003bd => "\x4e",
      0x000003be => "\x4a",
      0x000003bf => "\x4f",
      0x000003c0 => "\x50",
      0x000003c1 => "\x52",
      0x000003c2 => "\x57",
      0x000003c3 => "\x53",
      0x000003c4 => "\x54",
      0x000003c5 => "\x59",
      0x000003c6 => "\x46",
      0x000003c7 => "\x58",
      0x000003c8 => "\x43",
      0x000003c9 => "\x56",
      0x00001fbf => "\x5c",
      0x00001fce => "\x5d",
      0x00001fcf => "\x5b",
      0x00001fde => "\x7d",
      0x00001fdf => "\x7b",
      0x00001ffe => "\x7c",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::GREEK7_OLD - Conversion routines for GREEK7_OLD
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for GREEK7-OLD.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-18
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  000000A3 | POUND SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  000000B4 | ACUTE ACCENT
      41 |  000003B1 | GREEK SMALL LETTER ALPHA
      42 |  000003B2 | GREEK SMALL LETTER BETA
      43 |  000003C8 | GREEK SMALL LETTER PSI
      44 |  000003B4 | GREEK SMALL LETTER DELTA
      45 |  000003B5 | GREEK SMALL LETTER EPSILON
      46 |  000003C6 | GREEK SMALL LETTER PHI
      47 |  000003B3 | GREEK SMALL LETTER GAMMA
      48 |  000003B7 | GREEK SMALL LETTER ETA
      49 |  000003B9 | GREEK SMALL LETTER IOTA
      4A |  000003BE | GREEK SMALL LETTER XI
      4B |  000003BA | GREEK SMALL LETTER KAPPA
      4C |  000003BB | GREEK SMALL LETTER LAMDA
      4D |  000003BC | GREEK SMALL LETTER MU
      4E |  000003BD | GREEK SMALL LETTER NU
      4F |  000003BF | GREEK SMALL LETTER OMICRON
      50 |  000003C0 | GREEK SMALL LETTER PI
      51 |  0000037A | GREEK YPOGEGRAMMENI
      52 |  000003C1 | GREEK SMALL LETTER RHO
      53 |  000003C3 | GREEK SMALL LETTER SIGMA
      54 |  000003C4 | GREEK SMALL LETTER TAU
      55 |  000003B8 | GREEK SMALL LETTER THETA
      56 |  000003C9 | GREEK SMALL LETTER OMEGA
      57 |  000003C2 | GREEK SMALL LETTER FINAL SIGMA
      58 |  000003C7 | GREEK SMALL LETTER CHI
      59 |  000003C5 | GREEK SMALL LETTER UPSILON
      5A |  000003B6 | GREEK SMALL LETTER ZETA
      5B |  00001FCF | GREEK PSILI AND PERISPOMENI
      5C |  00001FBF | GREEK PSILI
      5D |  00001FCE | GREEK PSILI AND OXIA
      5E |  0000007E | TILDE
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000391 | GREEK CAPITAL LETTER ALPHA
      62 |  00000392 | GREEK CAPITAL LETTER BETA
      63 |  000003A8 | GREEK CAPITAL LETTER PSI
      64 |  00000394 | GREEK CAPITAL LETTER DELTA
      65 |  00000395 | GREEK CAPITAL LETTER EPSILON
      66 |  000003A6 | GREEK CAPITAL LETTER PHI
      67 |  00000393 | GREEK CAPITAL LETTER GAMMA
      68 |  00000397 | GREEK CAPITAL LETTER ETA
      69 |  00000399 | GREEK CAPITAL LETTER IOTA
      6A |  0000039E | GREEK CAPITAL LETTER XI
      6B |  0000039A | GREEK CAPITAL LETTER KAPPA
      6C |  0000039B | GREEK CAPITAL LETTER LAMDA
      6D |  0000039C | GREEK CAPITAL LETTER MU
      6E |  0000039D | GREEK CAPITAL LETTER NU
      6F |  0000039F | GREEK CAPITAL LETTER OMICRON
      70 |  000003A0 | GREEK CAPITAL LETTER PI
      72 |  000003A1 | GREEK CAPITAL LETTER RHO
      73 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      74 |  000003A4 | GREEK CAPITAL LETTER TAU
      75 |  00000398 | GREEK CAPITAL LETTER THETA
      76 |  000003A9 | GREEK CAPITAL LETTER OMEGA
      77 |  000000B7 | MIDDLE DOT
      78 |  000003A7 | GREEK CAPITAL LETTER CHI
      79 |  000003A5 | GREEK CAPITAL LETTER UPSILON
      7A |  00000396 | GREEK CAPITAL LETTER ZETA
      7B |  00001FDF | GREEK DASIA AND PERISPOMENI
      7C |  00001FFE | GREEK DASIA
      7D |  00001FDE | GREEK DASIA AND OXIA
      7E |  000000A8 | DIAERESIS
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_GREEK7_OLD

    $main::fatpacked{"Locale/RecodeData/GREEK_CCITT.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_GREEK_CCITT';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for GREEK-CCITT.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::GREEK_CCITT;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x00a4,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0391,
      0x0392,
      0x0393,
      0x0394,
      0x0395,
      0x0396,
      0x0397,
      0x0398,
      0x0399,
      0x039a,
      0x039b,
      0x039c,
      0x039d,
      0x039e,
      0x039f,
      0x03a0,
      0x03a1,
      0xfffd,
      0x03a3,
      0x03a4,
      0x03a5,
      0x03a6,
      0x03a7,
      0x03a8,
      0x03a9,
      0xfffd,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0xfffd,
      0x03b1,
      0x03b2,
      0x03b3,
      0x03b4,
      0x03b5,
      0x03b6,
      0x03b7,
      0x03b8,
      0x03b9,
      0x03ba,
      0x03bb,
      0x03bc,
      0x03bd,
      0x03be,
      0x03bf,
      0x03c0,
      0x03c1,
      0x03c2,
      0x03c3,
      0x03c4,
      0x03c5,
      0x03c6,
      0x03c7,
      0x03c8,
      0x03c9,
      0xfffd,
      0x007b,
      0x007c,
      0x007d,
      0x00af,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\xc2\xa4",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\xce\x91",
      "\xce\x92",
      "\xce\x93",
      "\xce\x94",
      "\xce\x95",
      "\xce\x96",
      "\xce\x97",
      "\xce\x98",
      "\xce\x99",
      "\xce\x9a",
      "\xce\x9b",
      "\xce\x9c",
      "\xce\x9d",
      "\xce\x9e",
      "\xce\x9f",
      "\xce\xa0",
      "\xce\xa1",
      "\xef\xbf\xbd",
      "\xce\xa3",
      "\xce\xa4",
      "\xce\xa5",
      "\xce\xa6",
      "\xce\xa7",
      "\xce\xa8",
      "\xce\xa9",
      "\xef\xbf\xbd",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\xef\xbf\xbd",
      "\xce\xb1",
      "\xce\xb2",
      "\xce\xb3",
      "\xce\xb4",
      "\xce\xb5",
      "\xce\xb6",
      "\xce\xb7",
      "\xce\xb8",
      "\xce\xb9",
      "\xce\xba",
      "\xce\xbb",
      "\xce\xbc",
      "\xce\xbd",
      "\xce\xbe",
      "\xce\xbf",
      "\xcf\x80",
      "\xcf\x81",
      "\xcf\x82",
      "\xcf\x83",
      "\xcf\x84",
      "\xcf\x85",
      "\xcf\x86",
      "\xcf\x87",
      "\xcf\x88",
      "\xcf\x89",
      "\xef\xbf\xbd",
      "\x7b",
      "\x7c",
      "\x7d",
      "\xc2\xaf",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007f => "\x7f",
      0x000000a4 => "\x24",
      0x000000af => "\x7e",
      0x00000391 => "\x41",
      0x00000392 => "\x42",
      0x00000393 => "\x43",
      0x00000394 => "\x44",
      0x00000395 => "\x45",
      0x00000396 => "\x46",
      0x00000397 => "\x47",
      0x00000398 => "\x48",
      0x00000399 => "\x49",
      0x0000039a => "\x4a",
      0x0000039b => "\x4b",
      0x0000039c => "\x4c",
      0x0000039d => "\x4d",
      0x0000039e => "\x4e",
      0x0000039f => "\x4f",
      0x000003a0 => "\x50",
      0x000003a1 => "\x51",
      0x000003a3 => "\x53",
      0x000003a4 => "\x54",
      0x000003a5 => "\x55",
      0x000003a6 => "\x56",
      0x000003a7 => "\x57",
      0x000003a8 => "\x58",
      0x000003a9 => "\x59",
      0x000003b1 => "\x61",
      0x000003b2 => "\x62",
      0x000003b3 => "\x63",
      0x000003b4 => "\x64",
      0x000003b5 => "\x65",
      0x000003b6 => "\x66",
      0x000003b7 => "\x67",
      0x000003b8 => "\x68",
      0x000003b9 => "\x69",
      0x000003ba => "\x6a",
      0x000003bb => "\x6b",
      0x000003bc => "\x6c",
      0x000003bd => "\x6d",
      0x000003be => "\x6e",
      0x000003bf => "\x6f",
      0x000003c0 => "\x70",
      0x000003c1 => "\x71",
      0x000003c2 => "\x72",
      0x000003c3 => "\x73",
      0x000003c4 => "\x74",
      0x000003c5 => "\x75",
      0x000003c6 => "\x76",
      0x000003c7 => "\x77",
      0x000003c8 => "\x78",
      0x000003c9 => "\x79",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::GREEK_CCITT - Conversion routines for GREEK_CCITT
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for GREEK-CCITT.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
   repertoiremap: mnemonic,ds
    source: ECMA registry
   alias ISO-IR-150
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  000000A4 | CURRENCY SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000391 | GREEK CAPITAL LETTER ALPHA
      42 |  00000392 | GREEK CAPITAL LETTER BETA
      43 |  00000393 | GREEK CAPITAL LETTER GAMMA
      44 |  00000394 | GREEK CAPITAL LETTER DELTA
      45 |  00000395 | GREEK CAPITAL LETTER EPSILON
      46 |  00000396 | GREEK CAPITAL LETTER ZETA
      47 |  00000397 | GREEK CAPITAL LETTER ETA
      48 |  00000398 | GREEK CAPITAL LETTER THETA
      49 |  00000399 | GREEK CAPITAL LETTER IOTA
      4A |  0000039A | GREEK CAPITAL LETTER KAPPA
      4B |  0000039B | GREEK CAPITAL LETTER LAMDA
      4C |  0000039C | GREEK CAPITAL LETTER MU
      4D |  0000039D | GREEK CAPITAL LETTER NU
      4E |  0000039E | GREEK CAPITAL LETTER XI
      4F |  0000039F | GREEK CAPITAL LETTER OMICRON
      50 |  000003A0 | GREEK CAPITAL LETTER PI
      51 |  000003A1 | GREEK CAPITAL LETTER RHO
      53 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      54 |  000003A4 | GREEK CAPITAL LETTER TAU
      55 |  000003A5 | GREEK CAPITAL LETTER UPSILON
      56 |  000003A6 | GREEK CAPITAL LETTER PHI
      57 |  000003A7 | GREEK CAPITAL LETTER CHI
      58 |  000003A8 | GREEK CAPITAL LETTER PSI
      59 |  000003A9 | GREEK CAPITAL LETTER OMEGA
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      61 |  000003B1 | GREEK SMALL LETTER ALPHA
      62 |  000003B2 | GREEK SMALL LETTER BETA
      63 |  000003B3 | GREEK SMALL LETTER GAMMA
      64 |  000003B4 | GREEK SMALL LETTER DELTA
      65 |  000003B5 | GREEK SMALL LETTER EPSILON
      66 |  000003B6 | GREEK SMALL LETTER ZETA
      67 |  000003B7 | GREEK SMALL LETTER ETA
      68 |  000003B8 | GREEK SMALL LETTER THETA
      69 |  000003B9 | GREEK SMALL LETTER IOTA
      6A |  000003BA | GREEK SMALL LETTER KAPPA
      6B |  000003BB | GREEK SMALL LETTER LAMDA
      6C |  000003BC | GREEK SMALL LETTER MU
      6D |  000003BD | GREEK SMALL LETTER NU
      6E |  000003BE | GREEK SMALL LETTER XI
      6F |  000003BF | GREEK SMALL LETTER OMICRON
      70 |  000003C0 | GREEK SMALL LETTER PI
      71 |  000003C1 | GREEK SMALL LETTER RHO
      72 |  000003C2 | GREEK SMALL LETTER FINAL SIGMA
      73 |  000003C3 | GREEK SMALL LETTER SIGMA
      74 |  000003C4 | GREEK SMALL LETTER TAU
      75 |  000003C5 | GREEK SMALL LETTER UPSILON
      76 |  000003C6 | GREEK SMALL LETTER PHI
      77 |  000003C7 | GREEK SMALL LETTER CHI
      78 |  000003C8 | GREEK SMALL LETTER PSI
      79 |  000003C9 | GREEK SMALL LETTER OMEGA
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  000000AF | MACRON
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_GREEK_CCITT

    $main::fatpacked{"Locale/RecodeData/HP_ROMAN8.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_HP_ROMAN8';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for HP-ROMAN8.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::HP_ROMAN8;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0x00c0,
      0x00c2,
      0x00c8,
      0x00ca,
      0x00cb,
      0x00ce,
      0x00cf,
      0x00b4,
      0x02cb,
      0x02c6,
      0x00a8,
      0x02dc,
      0x00d9,
      0x00db,
      0x20a4,
      0x00af,
      0x00dd,
      0x00fd,
      0x00b0,
      0x00c7,
      0x00e7,
      0x00d1,
      0x00f1,
      0x00a1,
      0x00bf,
      0x00a4,
      0x00a3,
      0x00a5,
      0x00a7,
      0x0192,
      0x00a2,
      0x00e2,
      0x00ea,
      0x00f4,
      0x00fb,
      0x00e1,
      0x00e9,
      0x00f3,
      0x00fa,
      0x00e0,
      0x00e8,
      0x00f2,
      0x00f9,
      0x00e4,
      0x00eb,
      0x00f6,
      0x00fc,
      0x00c5,
      0x00ee,
      0x00d8,
      0x00c6,
      0x00e5,
      0x00ed,
      0x00f8,
      0x00e6,
      0x00c4,
      0x00ec,
      0x00d6,
      0x00dc,
      0x00c9,
      0x00ef,
      0x00df,
      0x00d4,
      0x00c1,
      0x00c3,
      0x00e3,
      0x00d0,
      0x00f0,
      0x00cd,
      0x00cc,
      0x00d3,
      0x00d2,
      0x00d5,
      0x00f5,
      0x0160,
      0x0161,
      0x00da,
      0x0178,
      0x00ff,
      0x00de,
      0x00fe,
      0x00b7,
      0x00b5,
      0x00b6,
      0x00be,
      0x2014,
      0x00bc,
      0x00bd,
      0x00aa,
      0x00ba,
      0x00ab,
      0x25a0,
      0x00bb,
      0x00b1,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xc3\x80",
      "\xc3\x82",
      "\xc3\x88",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc2\xb4",
      "\xcb\x8b",
      "\xcb\x86",
      "\xc2\xa8",
      "\xcb\x9c",
      "\xc3\x99",
      "\xc3\x9b",
      "\xe2\x82\xa4",
      "\xc2\xaf",
      "\xc3\x9d",
      "\xc3\xbd",
      "\xc2\xb0",
      "\xc3\x87",
      "\xc3\xa7",
      "\xc3\x91",
      "\xc3\xb1",
      "\xc2\xa1",
      "\xc2\xbf",
      "\xc2\xa4",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xc2\xa7",
      "\xc6\x92",
      "\xc2\xa2",
      "\xc3\xa2",
      "\xc3\xaa",
      "\xc3\xb4",
      "\xc3\xbb",
      "\xc3\xa1",
      "\xc3\xa9",
      "\xc3\xb3",
      "\xc3\xba",
      "\xc3\xa0",
      "\xc3\xa8",
      "\xc3\xb2",
      "\xc3\xb9",
      "\xc3\xa4",
      "\xc3\xab",
      "\xc3\xb6",
      "\xc3\xbc",
      "\xc3\x85",
      "\xc3\xae",
      "\xc3\x98",
      "\xc3\x86",
      "\xc3\xa5",
      "\xc3\xad",
      "\xc3\xb8",
      "\xc3\xa6",
      "\xc3\x84",
      "\xc3\xac",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc3\x89",
      "\xc3\xaf",
      "\xc3\x9f",
      "\xc3\x94",
      "\xc3\x81",
      "\xc3\x83",
      "\xc3\xa3",
      "\xc3\x90",
      "\xc3\xb0",
      "\xc3\x8d",
      "\xc3\x8c",
      "\xc3\x93",
      "\xc3\x92",
      "\xc3\x95",
      "\xc3\xb5",
      "\xc5\xa0",
      "\xc5\xa1",
      "\xc3\x9a",
      "\xc5\xb8",
      "\xc3\xbf",
      "\xc3\x9e",
      "\xc3\xbe",
      "\xc2\xb7",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xbe",
      "\xe2\x80\x94",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc2\xab",
      "\xe2\x96\xa0",
      "\xc2\xbb",
      "\xc2\xb1",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000a1 => "\xb8",
      0x000000a2 => "\xbf",
      0x000000a3 => "\xbb",
      0x000000a4 => "\xba",
      0x000000a5 => "\xbc",
      0x000000a7 => "\xbd",
      0x000000a8 => "\xab",
      0x000000aa => "\xf9",
      0x000000ab => "\xfb",
      0x000000af => "\xb0",
      0x000000b0 => "\xb3",
      0x000000b1 => "\xfe",
      0x000000b4 => "\xa8",
      0x000000b5 => "\xf3",
      0x000000b6 => "\xf4",
      0x000000b7 => "\xf2",
      0x000000ba => "\xfa",
      0x000000bb => "\xfd",
      0x000000bc => "\xf7",
      0x000000bd => "\xf8",
      0x000000be => "\xf5",
      0x000000bf => "\xb9",
      0x000000c0 => "\xa1",
      0x000000c1 => "\xe0",
      0x000000c2 => "\xa2",
      0x000000c3 => "\xe1",
      0x000000c4 => "\xd8",
      0x000000c5 => "\xd0",
      0x000000c6 => "\xd3",
      0x000000c7 => "\xb4",
      0x000000c8 => "\xa3",
      0x000000c9 => "\xdc",
      0x000000ca => "\xa4",
      0x000000cb => "\xa5",
      0x000000cc => "\xe6",
      0x000000cd => "\xe5",
      0x000000ce => "\xa6",
      0x000000cf => "\xa7",
      0x000000d0 => "\xe3",
      0x000000d1 => "\xb6",
      0x000000d2 => "\xe8",
      0x000000d3 => "\xe7",
      0x000000d4 => "\xdf",
      0x000000d5 => "\xe9",
      0x000000d6 => "\xda",
      0x000000d8 => "\xd2",
      0x000000d9 => "\xad",
      0x000000da => "\xed",
      0x000000db => "\xae",
      0x000000dc => "\xdb",
      0x000000dd => "\xb1",
      0x000000de => "\xf0",
      0x000000df => "\xde",
      0x000000e0 => "\xc8",
      0x000000e1 => "\xc4",
      0x000000e2 => "\xc0",
      0x000000e3 => "\xe2",
      0x000000e4 => "\xcc",
      0x000000e5 => "\xd4",
      0x000000e6 => "\xd7",
      0x000000e7 => "\xb5",
      0x000000e8 => "\xc9",
      0x000000e9 => "\xc5",
      0x000000ea => "\xc1",
      0x000000eb => "\xcd",
      0x000000ec => "\xd9",
      0x000000ed => "\xd5",
      0x000000ee => "\xd1",
      0x000000ef => "\xdd",
      0x000000f0 => "\xe4",
      0x000000f1 => "\xb7",
      0x000000f2 => "\xca",
      0x000000f3 => "\xc6",
      0x000000f4 => "\xc2",
      0x000000f5 => "\xea",
      0x000000f6 => "\xce",
      0x000000f8 => "\xd6",
      0x000000f9 => "\xcb",
      0x000000fa => "\xc7",
      0x000000fb => "\xc3",
      0x000000fc => "\xcf",
      0x000000fd => "\xb2",
      0x000000fe => "\xf1",
      0x000000ff => "\xef",
      0x00000160 => "\xeb",
      0x00000161 => "\xec",
      0x00000178 => "\xee",
      0x00000192 => "\xbe",
      0x000002c6 => "\xaa",
      0x000002cb => "\xa9",
      0x000002dc => "\xac",
      0x00002014 => "\xf6",
      0x000020a4 => "\xaf",
      0x000025a0 => "\xfc",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::HP_ROMAN8 - Conversion routines for HP_ROMAN8
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for HP-ROMAN8.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: LaserJet IIP Printer User's Manual,
    HP part no 33471-90901, Hewlet-Packard, June 1989.
   alias ROMAN8
   alias R8
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      A2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      A3 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      A4 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      A5 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      A6 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      A7 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      A8 |  000000B4 | ACUTE ACCENT
      A9 |  000002CB | MODIFIER LETTER GRAVE ACCENT (Mandarin Chinese fourth tone)
      AA |  000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT
      AB |  000000A8 | DIAERESIS
      AC |  000002DC | SMALL TILDE
      AD |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      AE |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      AF |  000020A4 | LIRA SIGN
      B0 |  000000AF | MACRON
      B1 |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      B2 |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      B3 |  000000B0 | DEGREE SIGN
      B4 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      B5 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      B6 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      B7 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      B8 |  000000A1 | INVERTED EXCLAMATION MARK
      B9 |  000000BF | INVERTED QUESTION MARK
      BA |  000000A4 | CURRENCY SIGN
      BB |  000000A3 | POUND SIGN
      BC |  000000A5 | YEN SIGN
      BD |  000000A7 | SECTION SIGN
      BE |  00000192 | LATIN SMALL LETTER F WITH HOOK
      BF |  000000A2 | CENT SIGN
      C0 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      C1 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      C2 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      C3 |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      C4 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      C5 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      C6 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      C7 |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      C8 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      C9 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      CA |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      CB |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      CC |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      CD |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      CE |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      CF |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      D0 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      D1 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      D2 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      D3 |  000000C6 | LATIN CAPITAL LETTER AE
      D4 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      D5 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      D6 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      D7 |  000000E6 | LATIN SMALL LETTER AE
      D8 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      D9 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      DA |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      DB |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DC |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      DD |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      DE |  000000DF | LATIN SMALL LETTER SHARP S (German)
      DF |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      E0 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      E1 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      E2 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      E3 |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      E4 |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      E5 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      E6 |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      E7 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      E8 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      E9 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      EA |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      EB |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      EC |  00000161 | LATIN SMALL LETTER S WITH CARON
      ED |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      EE |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      EF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      F0 |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      F1 |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      F2 |  000000B7 | MIDDLE DOT
      F3 |  000000B5 | MICRO SIGN
      F4 |  000000B6 | PILCROW SIGN
      F5 |  000000BE | VULGAR FRACTION THREE QUARTERS
      F6 |  00002014 | EM DASH
      F7 |  000000BC | VULGAR FRACTION ONE QUARTER
      F8 |  000000BD | VULGAR FRACTION ONE HALF
      F9 |  000000AA | FEMININE ORDINAL INDICATOR
      FA |  000000BA | MASCULINE ORDINAL INDICATOR
      FB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      FC |  000025A0 | BLACK SQUARE
      FD |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      FE |  000000B1 | PLUS-MINUS SIGN
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_HP_ROMAN8

    $main::fatpacked{"Locale/RecodeData/IBM037.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM037';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM037.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM037;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x00a0,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e1,
      0x00e3,
      0x00e5,
      0x00e7,
      0x00f1,
      0x00a2,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x007c,
      0x0026,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00ec,
      0x00df,
      0x0021,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x00ac,
      0x002d,
      0x002f,
      0x00c2,
      0x00c4,
      0x00c0,
      0x00c1,
      0x00c3,
      0x00c5,
      0x00c7,
      0x00d1,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x00f8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x0060,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0x00d8,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x00ab,
      0x00bb,
      0x00f0,
      0x00fd,
      0x00fe,
      0x00b1,
      0x00b0,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x00aa,
      0x00ba,
      0x00e6,
      0x00b8,
      0x00c6,
      0x00a4,
      0x00b5,
      0x007e,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x00a1,
      0x00bf,
      0x00d0,
      0x00dd,
      0x00de,
      0x00ae,
      0x005e,
      0x00a3,
      0x00a5,
      0x00b7,
      0x00a9,
      0x00a7,
      0x00b6,
      0x00bc,
      0x00bd,
      0x00be,
      0x005b,
      0x005d,
      0x00af,
      0x00a8,
      0x00b4,
      0x00d7,
      0x007b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0x00f4,
      0x00f6,
      0x00f2,
      0x00f3,
      0x00f5,
      0x007d,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x00b9,
      0x00fb,
      0x00fc,
      0x00f9,
      0x00fa,
      0x00ff,
      0x005c,
      0x00f7,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00b2,
      0x00d4,
      0x00d6,
      0x00d2,
      0x00d3,
      0x00d5,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00b3,
      0x00db,
      0x00dc,
      0x00d9,
      0x00da,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xc2\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa3",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xb1",
      "\xc2\xa2",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x7c",
      "\x26",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xac",
      "\xc3\x9f",
      "\x21",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\xc2\xac",
      "\x2d",
      "\x2f",
      "\xc3\x82",
      "\xc3\x84",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x83",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x91",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xc3\xb8",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\x60",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xc3\x98",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xc2\xab",
      "\xc2\xbb",
      "\xc3\xb0",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc2\xb1",
      "\xc2\xb0",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc3\xa6",
      "\xc2\xb8",
      "\xc3\x86",
      "\xc2\xa4",
      "\xc2\xb5",
      "\x7e",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc2\xa1",
      "\xc2\xbf",
      "\xc3\x90",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc2\xae",
      "\x5e",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xc2\xb7",
      "\xc2\xa9",
      "\xc2\xa7",
      "\xc2\xb6",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\x5b",
      "\x5d",
      "\xc2\xaf",
      "\xc2\xa8",
      "\xc2\xb4",
      "\xc3\x97",
      "\x7b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb5",
      "\x7d",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc2\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbf",
      "\x5c",
      "\xc3\xb7",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xb2",
      "\xc3\x94",
      "\xc3\x96",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x95",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc2\xb3",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x5a",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\xba",
      0x0000005c => "\xe0",
      0x0000005d => "\xbb",
      0x0000005e => "\xb0",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\xc0",
      0x0000007c => "\x4f",
      0x0000007d => "\xd0",
      0x0000007e => "\xa1",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x41",
      0x000000a1 => "\xaa",
      0x000000a2 => "\x4a",
      0x000000a3 => "\xb1",
      0x000000a4 => "\x9f",
      0x000000a5 => "\xb2",
      0x000000a6 => "\x6a",
      0x000000a7 => "\xb5",
      0x000000a8 => "\xbd",
      0x000000a9 => "\xb4",
      0x000000aa => "\x9a",
      0x000000ab => "\x8a",
      0x000000ac => "\x5f",
      0x000000ad => "\xca",
      0x000000ae => "\xaf",
      0x000000af => "\xbc",
      0x000000b0 => "\x90",
      0x000000b1 => "\x8f",
      0x000000b2 => "\xea",
      0x000000b3 => "\xfa",
      0x000000b4 => "\xbe",
      0x000000b5 => "\xa0",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb3",
      0x000000b8 => "\x9d",
      0x000000b9 => "\xda",
      0x000000ba => "\x9b",
      0x000000bb => "\x8b",
      0x000000bc => "\xb7",
      0x000000bd => "\xb8",
      0x000000be => "\xb9",
      0x000000bf => "\xab",
      0x000000c0 => "\x64",
      0x000000c1 => "\x65",
      0x000000c2 => "\x62",
      0x000000c3 => "\x66",
      0x000000c4 => "\x63",
      0x000000c5 => "\x67",
      0x000000c6 => "\x9e",
      0x000000c7 => "\x68",
      0x000000c8 => "\x74",
      0x000000c9 => "\x71",
      0x000000ca => "\x72",
      0x000000cb => "\x73",
      0x000000cc => "\x78",
      0x000000cd => "\x75",
      0x000000ce => "\x76",
      0x000000cf => "\x77",
      0x000000d0 => "\xac",
      0x000000d1 => "\x69",
      0x000000d2 => "\xed",
      0x000000d3 => "\xee",
      0x000000d4 => "\xeb",
      0x000000d5 => "\xef",
      0x000000d6 => "\xec",
      0x000000d7 => "\xbf",
      0x000000d8 => "\x80",
      0x000000d9 => "\xfd",
      0x000000da => "\xfe",
      0x000000db => "\xfb",
      0x000000dc => "\xfc",
      0x000000dd => "\xad",
      0x000000de => "\xae",
      0x000000df => "\x59",
      0x000000e0 => "\x44",
      0x000000e1 => "\x45",
      0x000000e2 => "\x42",
      0x000000e3 => "\x46",
      0x000000e4 => "\x43",
      0x000000e5 => "\x47",
      0x000000e6 => "\x9c",
      0x000000e7 => "\x48",
      0x000000e8 => "\x54",
      0x000000e9 => "\x51",
      0x000000ea => "\x52",
      0x000000eb => "\x53",
      0x000000ec => "\x58",
      0x000000ed => "\x55",
      0x000000ee => "\x56",
      0x000000ef => "\x57",
      0x000000f0 => "\x8c",
      0x000000f1 => "\x49",
      0x000000f2 => "\xcd",
      0x000000f3 => "\xce",
      0x000000f4 => "\xcb",
      0x000000f5 => "\xcf",
      0x000000f6 => "\xcc",
      0x000000f7 => "\xe1",
      0x000000f8 => "\x70",
      0x000000f9 => "\xdd",
      0x000000fa => "\xde",
      0x000000fb => "\xdb",
      0x000000fc => "\xdc",
      0x000000fd => "\x8d",
      0x000000fe => "\x8e",
      0x000000ff => "\xdf",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM037 - Conversion routines for IBM037
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM037.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP037
   alias EBCDIC-CP-US
   alias EBCDIC-CP-CA
   alias EBCDIC-CP-WT
   alias EBCDIC-CP-NL
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000000A0 | NO-BREAK SPACE
      42 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      43 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      44 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      45 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      46 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      47 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      48 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      49 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      4A |  000000A2 | CENT SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  0000007C | VERTICAL LINE
      50 |  00000026 | AMPERSAND
      51 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      52 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      53 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      54 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      55 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      56 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      57 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      58 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      59 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      5A |  00000021 | EXCLAMATION MARK
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  000000AC | NOT SIGN
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      63 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      64 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      65 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      66 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      67 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      68 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      69 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      71 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      72 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      73 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      74 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      75 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      76 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      77 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      78 |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      8B |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      8C |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      8D |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      8E |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      8F |  000000B1 | PLUS-MINUS SIGN
      90 |  000000B0 | DEGREE SIGN
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  000000AA | FEMININE ORDINAL INDICATOR
      9B |  000000BA | MASCULINE ORDINAL INDICATOR
      9C |  000000E6 | LATIN SMALL LETTER AE
      9D |  000000B8 | CEDILLA
      9E |  000000C6 | LATIN CAPITAL LETTER AE
      9F |  000000A4 | CURRENCY SIGN
      A0 |  000000B5 | MICRO SIGN
      A1 |  0000007E | TILDE
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  000000A1 | INVERTED EXCLAMATION MARK
      AB |  000000BF | INVERTED QUESTION MARK
      AC |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      AD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      AE |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      AF |  000000AE | REGISTERED SIGN
      B0 |  0000005E | CIRCUMFLEX ACCENT
      B1 |  000000A3 | POUND SIGN
      B2 |  000000A5 | YEN SIGN
      B3 |  000000B7 | MIDDLE DOT
      B4 |  000000A9 | COPYRIGHT SIGN
      B5 |  000000A7 | SECTION SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000BC | VULGAR FRACTION ONE QUARTER
      B8 |  000000BD | VULGAR FRACTION ONE HALF
      B9 |  000000BE | VULGAR FRACTION THREE QUARTERS
      BA |  0000005B | LEFT SQUARE BRACKET
      BB |  0000005D | RIGHT SQUARE BRACKET
      BC |  000000AF | MACRON
      BD |  000000A8 | DIAERESIS
      BE |  000000B4 | ACUTE ACCENT
      BF |  000000D7 | MULTIPLICATION SIGN
      C0 |  0000007B | LEFT CURLY BRACKET
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      CC |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      CD |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      CE |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      CF |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      D0 |  0000007D | RIGHT CURLY BRACKET
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  000000B9 | SUPERSCRIPT ONE
      DB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      DC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      DD |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      DE |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      DF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      E0 |  0000005C | REVERSE SOLIDUS
      E1 |  000000F7 | DIVISION SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000B2 | SUPERSCRIPT TWO
      EB |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      EC |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      ED |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000B3 | SUPERSCRIPT THREE
      FB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      FC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      FD |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      FE |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM037

    $main::fatpacked{"Locale/RecodeData/IBM038.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM038';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM038.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM038;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005b,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005d,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0060,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007e,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007d,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005c,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5b",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5d",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x60",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7e",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7d",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5c",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x4a",
      0x0000005c => "\xe0",
      0x0000005d => "\x5a",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\xc0",
      0x0000007d => "\xd0",
      0x0000007e => "\xa1",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a6 => "\x6a",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM038 - Conversion routines for IBM038
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM038.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3174 Character Set Ref, GA27-3831-02, March 1990
   alias EBCDIC-INT
   alias CP038
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  0000005B | LEFT SQUARE BRACKET
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      5A |  0000005D | RIGHT SQUARE BRACKET
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A1 |  0000007E | TILDE
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C0 |  0000007B | LEFT CURLY BRACKET
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D0 |  0000007D | RIGHT CURLY BRACKET
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E0 |  0000005C | REVERSE SOLIDUS
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM038

    $main::fatpacked{"Locale/RecodeData/IBM1004.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM1004';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM1004.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM1004;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0xfffd,
      0xfffd,
      0x201a,
      0xfffd,
      0x201e,
      0x2026,
      0x2020,
      0x2021,
      0x02c6,
      0x2030,
      0x0160,
      0x2039,
      0x0152,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x2018,
      0x2019,
      0x201c,
      0x201d,
      0x2022,
      0x2013,
      0x2014,
      0x02dc,
      0x2122,
      0x0161,
      0x203a,
      0x0153,
      0xfffd,
      0xfffd,
      0x0178,
      0x00a0,
      0x00a1,
      0x00a2,
      0x00a3,
      0x00a4,
      0x00a5,
      0x00a6,
      0x00a7,
      0x00a8,
      0x00a9,
      0x00aa,
      0x00ab,
      0x00ac,
      0x00ad,
      0x00ae,
      0x00af,
      0x00b0,
      0x00b1,
      0x00b2,
      0x00b3,
      0x00b4,
      0x00b5,
      0x00b6,
      0x00b7,
      0x00b8,
      0x00b9,
      0x00ba,
      0x00bb,
      0x00bc,
      0x00bd,
      0x00be,
      0x00bf,
      0x00c0,
      0x00c1,
      0x00c2,
      0x00c3,
      0x00c4,
      0x00c5,
      0x00c6,
      0x00c7,
      0x00c8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00cc,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00d0,
      0x00d1,
      0x00d2,
      0x00d3,
      0x00d4,
      0x00d5,
      0x00d6,
      0x00d7,
      0x00d8,
      0x00d9,
      0x00da,
      0x00db,
      0x00dc,
      0x00dd,
      0x00de,
      0x00df,
      0x00e0,
      0x00e1,
      0x00e2,
      0x00e3,
      0x00e4,
      0x00e5,
      0x00e6,
      0x00e7,
      0x00e8,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00ec,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00f0,
      0x00f1,
      0x00f2,
      0x00f3,
      0x00f4,
      0x00f5,
      0x00f6,
      0x00f7,
      0x00f8,
      0x00f9,
      0x00fa,
      0x00fb,
      0x00fc,
      0x00fd,
      0x00fe,
      0x00ff,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x80\x9a",
      "\xef\xbf\xbd",
      "\xe2\x80\x9e",
      "\xe2\x80\xa6",
      "\xe2\x80\xa0",
      "\xe2\x80\xa1",
      "\xcb\x86",
      "\xe2\x80\xb0",
      "\xc5\xa0",
      "\xe2\x80\xb9",
      "\xc5\x92",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\xa2",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xcb\x9c",
      "\xe2\x84\xa2",
      "\xc5\xa1",
      "\xe2\x80\xba",
      "\xc5\x93",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc5\xb8",
      "\xc2\xa0",
      "\xc2\xa1",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa4",
      "\xc2\xa5",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc2\xa9",
      "\xc2\xaa",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xc2\xaf",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xc2\xb4",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xc2\xb8",
      "\xc2\xb9",
      "\xc2\xba",
      "\xc2\xbb",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc2\xbf",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x82",
      "\xc3\x83",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x86",
      "\xc3\x87",
      "\xc3\x88",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x8c",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x90",
      "\xc3\x91",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x94",
      "\xc3\x95",
      "\xc3\x96",
      "\xc3\x97",
      "\xc3\x98",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc3\x9f",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc3\xa3",
      "\xc3\xa4",
      "\xc3\xa5",
      "\xc3\xa6",
      "\xc3\xa7",
      "\xc3\xa8",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xac",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb0",
      "\xc3\xb1",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc3\xb5",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc3\xb8",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc3\xbf",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xa0",
      0x000000a1 => "\xa1",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xa4",
      0x000000a5 => "\xa5",
      0x000000a6 => "\xa6",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xa8",
      0x000000a9 => "\xa9",
      0x000000aa => "\xaa",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000af => "\xaf",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b2 => "\xb2",
      0x000000b3 => "\xb3",
      0x000000b4 => "\xb4",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000b8 => "\xb8",
      0x000000b9 => "\xb9",
      0x000000ba => "\xba",
      0x000000bb => "\xbb",
      0x000000bc => "\xbc",
      0x000000bd => "\xbd",
      0x000000be => "\xbe",
      0x000000bf => "\xbf",
      0x000000c0 => "\xc0",
      0x000000c1 => "\xc1",
      0x000000c2 => "\xc2",
      0x000000c3 => "\xc3",
      0x000000c4 => "\xc4",
      0x000000c5 => "\xc5",
      0x000000c6 => "\xc6",
      0x000000c7 => "\xc7",
      0x000000c8 => "\xc8",
      0x000000c9 => "\xc9",
      0x000000ca => "\xca",
      0x000000cb => "\xcb",
      0x000000cc => "\xcc",
      0x000000cd => "\xcd",
      0x000000ce => "\xce",
      0x000000cf => "\xcf",
      0x000000d0 => "\xd0",
      0x000000d1 => "\xd1",
      0x000000d2 => "\xd2",
      0x000000d3 => "\xd3",
      0x000000d4 => "\xd4",
      0x000000d5 => "\xd5",
      0x000000d6 => "\xd6",
      0x000000d7 => "\xd7",
      0x000000d8 => "\xd8",
      0x000000d9 => "\xd9",
      0x000000da => "\xda",
      0x000000db => "\xdb",
      0x000000dc => "\xdc",
      0x000000dd => "\xdd",
      0x000000de => "\xde",
      0x000000df => "\xdf",
      0x000000e0 => "\xe0",
      0x000000e1 => "\xe1",
      0x000000e2 => "\xe2",
      0x000000e3 => "\xe3",
      0x000000e4 => "\xe4",
      0x000000e5 => "\xe5",
      0x000000e6 => "\xe6",
      0x000000e7 => "\xe7",
      0x000000e8 => "\xe8",
      0x000000e9 => "\xe9",
      0x000000ea => "\xea",
      0x000000eb => "\xeb",
      0x000000ec => "\xec",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000ef => "\xef",
      0x000000f0 => "\xf0",
      0x000000f1 => "\xf1",
      0x000000f2 => "\xf2",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f5 => "\xf5",
      0x000000f6 => "\xf6",
      0x000000f7 => "\xf7",
      0x000000f8 => "\xf8",
      0x000000f9 => "\xf9",
      0x000000fa => "\xfa",
      0x000000fb => "\xfb",
      0x000000fc => "\xfc",
      0x000000fd => "\xfd",
      0x000000fe => "\xfe",
      0x000000ff => "\xff",
      0x00000152 => "\x8c",
      0x00000153 => "\x9c",
      0x00000160 => "\x8a",
      0x00000161 => "\x9a",
      0x00000178 => "\x9f",
      0x000002c6 => "\x88",
      0x000002dc => "\x98",
      0x00002013 => "\x96",
      0x00002014 => "\x97",
      0x00002018 => "\x91",
      0x00002019 => "\x92",
      0x0000201a => "\x82",
      0x0000201c => "\x93",
      0x0000201d => "\x94",
      0x0000201e => "\x84",
      0x00002020 => "\x86",
      0x00002021 => "\x87",
      0x00002022 => "\x95",
      0x00002026 => "\x85",
      0x00002030 => "\x89",
      0x00002039 => "\x8b",
      0x0000203a => "\x9b",
      0x00002122 => "\x99",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM1004 - Conversion routines for IBM1004
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM1004.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: CEN/TC304 N283, 1994-02-04
   alias CP1004
   alias OS2LATIN1
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      82 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      84 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      85 |  00002026 | HORIZONTAL ELLIPSIS
      86 |  00002020 | DAGGER
      87 |  00002021 | DOUBLE DAGGER
      88 |  000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT
      89 |  00002030 | PER MILLE SIGN
      8A |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      8B |  00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
      8C |  00000152 | LATIN CAPITAL LIGATURE OE
      91 |  00002018 | LEFT SINGLE QUOTATION MARK
      92 |  00002019 | RIGHT SINGLE QUOTATION MARK
      93 |  0000201C | LEFT DOUBLE QUOTATION MARK
      94 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      95 |  00002022 | BULLET
      96 |  00002013 | EN DASH
      97 |  00002014 | EM DASH
      98 |  000002DC | SMALL TILDE
      99 |  00002122 | TRADE MARK SIGN
      9A |  00000161 | LATIN SMALL LETTER S WITH CARON
      9B |  0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
      9C |  00000153 | LATIN SMALL LIGATURE OE
      9F |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  000000A1 | INVERTED EXCLAMATION MARK
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  000000A5 | YEN SIGN
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  000000AA | FEMININE ORDINAL INDICATOR
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  000000AF | MACRON
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  000000B3 | SUPERSCRIPT THREE
      B4 |  000000B4 | ACUTE ACCENT
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  000000B8 | CEDILLA
      B9 |  000000B9 | SUPERSCRIPT ONE
      BA |  000000BA | MASCULINE ORDINAL INDICATOR
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  000000BC | VULGAR FRACTION ONE QUARTER
      BD |  000000BD | VULGAR FRACTION ONE HALF
      BE |  000000BE | VULGAR FRACTION THREE QUARTERS
      BF |  000000BF | INVERTED QUESTION MARK
      C0 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C3 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      C6 |  000000C6 | LATIN CAPITAL LETTER AE
      C7 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      C8 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      CB |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      CC |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      CF |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      D0 |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      D1 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      D2 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  000000D7 | MULTIPLICATION SIGN
      D8 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      D9 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      DE |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      DF |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E0 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      E6 |  000000E6 | LATIN SMALL LETTER AE
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      F0 |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      F1 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      F2 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  000000F7 | DIVISION SIGN
      F8 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      F9 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      FE |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      FF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM1004

    $main::fatpacked{"Locale/RecodeData/IBM1026.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM1026';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM1026.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM1026;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x00a0,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e1,
      0x00e3,
      0x00e5,
      0x007b,
      0x00f1,
      0x00c7,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00ec,
      0x00df,
      0x011e,
      0x0130,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0x00c2,
      0x00c4,
      0x00c0,
      0x00c1,
      0x00c3,
      0x00c5,
      0x005b,
      0x00d1,
      0x015f,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x00f8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x0131,
      0x003a,
      0x00d6,
      0x015e,
      0x0027,
      0x003d,
      0x00dc,
      0x00d8,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x00ab,
      0x00bb,
      0x007d,
      0x0060,
      0x00a6,
      0x00b1,
      0x00b0,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x00aa,
      0x00ba,
      0x00e6,
      0x02db,
      0x00c6,
      0x00a4,
      0x00b5,
      0x00f6,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x00a1,
      0x00bf,
      0x005d,
      0x0024,
      0x0040,
      0x00ae,
      0x00a2,
      0x00a3,
      0x00a5,
      0x00b7,
      0x00a9,
      0x00a7,
      0x00b6,
      0x00bc,
      0x00bd,
      0x00be,
      0x00ac,
      0x007c,
      0x2014,
      0x00a8,
      0x00b4,
      0x00d7,
      0x00e7,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0x00f4,
      0x007e,
      0x00f2,
      0x00f3,
      0x00f5,
      0x011f,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x00b9,
      0x00fb,
      0x005c,
      0x00f9,
      0x00fa,
      0x00ff,
      0x00fc,
      0x00f7,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00b2,
      0x00d4,
      0x0023,
      0x00d2,
      0x00d3,
      0x00d5,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00b3,
      0x00db,
      0x0022,
      0x00d9,
      0x00da,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xc2\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa3",
      "\xc3\xa5",
      "\x7b",
      "\xc3\xb1",
      "\xc3\x87",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xac",
      "\xc3\x9f",
      "\xc4\x9e",
      "\xc4\xb0",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xc3\x82",
      "\xc3\x84",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x83",
      "\xc3\x85",
      "\x5b",
      "\xc3\x91",
      "\xc5\x9f",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xc3\xb8",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\xc4\xb1",
      "\x3a",
      "\xc3\x96",
      "\xc5\x9e",
      "\x27",
      "\x3d",
      "\xc3\x9c",
      "\xc3\x98",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xc2\xab",
      "\xc2\xbb",
      "\x7d",
      "\x60",
      "\xc2\xa6",
      "\xc2\xb1",
      "\xc2\xb0",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc3\xa6",
      "\xcb\x9b",
      "\xc3\x86",
      "\xc2\xa4",
      "\xc2\xb5",
      "\xc3\xb6",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc2\xa1",
      "\xc2\xbf",
      "\x5d",
      "\x24",
      "\x40",
      "\xc2\xae",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xc2\xb7",
      "\xc2\xa9",
      "\xc2\xa7",
      "\xc2\xb6",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc2\xac",
      "\x7c",
      "\xe2\x80\x94",
      "\xc2\xa8",
      "\xc2\xb4",
      "\xc3\x97",
      "\xc3\xa7",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xc3\xb4",
      "\x7e",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb5",
      "\xc4\x9f",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc2\xb9",
      "\xc3\xbb",
      "\x5c",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbf",
      "\xc3\xbc",
      "\xc3\xb7",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xb2",
      "\xc3\x94",
      "\x23",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x95",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc2\xb3",
      "\xc3\x9b",
      "\x22",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\xfc",
      0x00000023 => "\xec",
      0x00000024 => "\xad",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\xae",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x68",
      0x0000005c => "\xdc",
      0x0000005d => "\xac",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x8d",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\x48",
      0x0000007c => "\xbb",
      0x0000007d => "\x8c",
      0x0000007e => "\xcc",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x41",
      0x000000a1 => "\xaa",
      0x000000a2 => "\xb0",
      0x000000a3 => "\xb1",
      0x000000a4 => "\x9f",
      0x000000a5 => "\xb2",
      0x000000a6 => "\x8e",
      0x000000a7 => "\xb5",
      0x000000a8 => "\xbd",
      0x000000a9 => "\xb4",
      0x000000aa => "\x9a",
      0x000000ab => "\x8a",
      0x000000ac => "\xba",
      0x000000ad => "\xca",
      0x000000ae => "\xaf",
      0x000000b0 => "\x90",
      0x000000b1 => "\x8f",
      0x000000b2 => "\xea",
      0x000000b3 => "\xfa",
      0x000000b4 => "\xbe",
      0x000000b5 => "\xa0",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb3",
      0x000000b9 => "\xda",
      0x000000ba => "\x9b",
      0x000000bb => "\x8b",
      0x000000bc => "\xb7",
      0x000000bd => "\xb8",
      0x000000be => "\xb9",
      0x000000bf => "\xab",
      0x000000c0 => "\x64",
      0x000000c1 => "\x65",
      0x000000c2 => "\x62",
      0x000000c3 => "\x66",
      0x000000c4 => "\x63",
      0x000000c5 => "\x67",
      0x000000c6 => "\x9e",
      0x000000c7 => "\x4a",
      0x000000c8 => "\x74",
      0x000000c9 => "\x71",
      0x000000ca => "\x72",
      0x000000cb => "\x73",
      0x000000cc => "\x78",
      0x000000cd => "\x75",
      0x000000ce => "\x76",
      0x000000cf => "\x77",
      0x000000d1 => "\x69",
      0x000000d2 => "\xed",
      0x000000d3 => "\xee",
      0x000000d4 => "\xeb",
      0x000000d5 => "\xef",
      0x000000d6 => "\x7b",
      0x000000d7 => "\xbf",
      0x000000d8 => "\x80",
      0x000000d9 => "\xfd",
      0x000000da => "\xfe",
      0x000000db => "\xfb",
      0x000000dc => "\x7f",
      0x000000df => "\x59",
      0x000000e0 => "\x44",
      0x000000e1 => "\x45",
      0x000000e2 => "\x42",
      0x000000e3 => "\x46",
      0x000000e4 => "\x43",
      0x000000e5 => "\x47",
      0x000000e6 => "\x9c",
      0x000000e7 => "\xc0",
      0x000000e8 => "\x54",
      0x000000e9 => "\x51",
      0x000000ea => "\x52",
      0x000000eb => "\x53",
      0x000000ec => "\x58",
      0x000000ed => "\x55",
      0x000000ee => "\x56",
      0x000000ef => "\x57",
      0x000000f1 => "\x49",
      0x000000f2 => "\xcd",
      0x000000f3 => "\xce",
      0x000000f4 => "\xcb",
      0x000000f5 => "\xcf",
      0x000000f6 => "\xa1",
      0x000000f7 => "\xe1",
      0x000000f8 => "\x70",
      0x000000f9 => "\xdd",
      0x000000fa => "\xde",
      0x000000fb => "\xdb",
      0x000000fc => "\xe0",
      0x000000ff => "\xdf",
      0x0000011e => "\x5a",
      0x0000011f => "\xd0",
      0x00000130 => "\x5b",
      0x00000131 => "\x79",
      0x0000015e => "\x7c",
      0x0000015f => "\x6a",
      0x000002db => "\x9d",
      0x00002014 => "\xbc",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM1026 - Conversion routines for IBM1026
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM1026.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP1026
   alias 1026
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000000A0 | NO-BREAK SPACE
      42 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      43 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      44 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      45 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      46 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      47 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      48 |  0000007B | LEFT CURLY BRACKET
      49 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      4A |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      51 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      52 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      53 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      54 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      55 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      56 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      57 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      58 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      59 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      5A |  0000011E | LATIN CAPITAL LETTER G WITH BREVE
      5B |  00000130 | LATIN CAPITAL LETTER I WITH DOT ABOVE
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      63 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      64 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      65 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      66 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      67 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      68 |  0000005B | LEFT SQUARE BRACKET
      69 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      6A |  0000015F | LATIN SMALL LETTER S WITH CEDILLA
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      71 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      72 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      73 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      74 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      75 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      76 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      77 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      78 |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      79 |  00000131 | LATIN SMALL LETTER DOTLESS I
      7A |  0000003A | COLON
      7B |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      7C |  0000015E | LATIN CAPITAL LETTER S WITH CEDILLA
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      80 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      8B |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      8C |  0000007D | RIGHT CURLY BRACKET
      8D |  00000060 | GRAVE ACCENT
      8E |  000000A6 | BROKEN BAR
      8F |  000000B1 | PLUS-MINUS SIGN
      90 |  000000B0 | DEGREE SIGN
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  000000AA | FEMININE ORDINAL INDICATOR
      9B |  000000BA | MASCULINE ORDINAL INDICATOR
      9C |  000000E6 | LATIN SMALL LETTER AE
      9D |  000002DB | OGONEK
      9E |  000000C6 | LATIN CAPITAL LETTER AE
      9F |  000000A4 | CURRENCY SIGN
      A0 |  000000B5 | MICRO SIGN
      A1 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  000000A1 | INVERTED EXCLAMATION MARK
      AB |  000000BF | INVERTED QUESTION MARK
      AC |  0000005D | RIGHT SQUARE BRACKET
      AD |  00000024 | DOLLAR SIGN
      AE |  00000040 | COMMERCIAL AT
      AF |  000000AE | REGISTERED SIGN
      B0 |  000000A2 | CENT SIGN
      B1 |  000000A3 | POUND SIGN
      B2 |  000000A5 | YEN SIGN
      B3 |  000000B7 | MIDDLE DOT
      B4 |  000000A9 | COPYRIGHT SIGN
      B5 |  000000A7 | SECTION SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000BC | VULGAR FRACTION ONE QUARTER
      B8 |  000000BD | VULGAR FRACTION ONE HALF
      B9 |  000000BE | VULGAR FRACTION THREE QUARTERS
      BA |  000000AC | NOT SIGN
      BB |  0000007C | VERTICAL LINE
      BC |  00002014 | EM DASH
      BD |  000000A8 | DIAERESIS
      BE |  000000B4 | ACUTE ACCENT
      BF |  000000D7 | MULTIPLICATION SIGN
      C0 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      CC |  0000007E | TILDE
      CD |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      CE |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      CF |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      D0 |  0000011F | LATIN SMALL LETTER G WITH BREVE
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  000000B9 | SUPERSCRIPT ONE
      DB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      DC |  0000005C | REVERSE SOLIDUS
      DD |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      DE |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      DF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      E0 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      E1 |  000000F7 | DIVISION SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000B2 | SUPERSCRIPT TWO
      EB |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      EC |  00000023 | NUMBER SIGN
      ED |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000B3 | SUPERSCRIPT THREE
      FB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      FC |  00000022 | QUOTATION MARK
      FD |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      FE |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM1026

    $main::fatpacked{"Locale/RecodeData/IBM1047.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM1047';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM1047.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM1047;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x00a0,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e1,
      0x00e3,
      0x00e5,
      0x00e7,
      0x00f1,
      0x00a2,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x007c,
      0x0026,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00ec,
      0x00df,
      0x0021,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0x00c2,
      0x00c4,
      0x00c0,
      0x00c1,
      0x00c3,
      0x00c5,
      0x00c7,
      0x00d1,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x00f8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x0060,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0x00d8,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x00ab,
      0x00bb,
      0x00f0,
      0x00fd,
      0x00fe,
      0x00b1,
      0x00b0,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x00aa,
      0x00ba,
      0x00e6,
      0x00b8,
      0x00c6,
      0x00a4,
      0x00b5,
      0x007e,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x00a1,
      0x00bf,
      0x00d0,
      0x005b,
      0x00de,
      0x00ae,
      0x00ac,
      0x00a3,
      0x00a5,
      0x00b7,
      0x00a9,
      0x00a7,
      0x00b6,
      0x00bc,
      0x00bd,
      0x00be,
      0x00dd,
      0x00a8,
      0x00af,
      0x005d,
      0x00b4,
      0x00d7,
      0x007b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0x00f4,
      0x00f6,
      0x00f2,
      0x00f3,
      0x00f5,
      0x007d,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x00b9,
      0x00fb,
      0x00fc,
      0x00f9,
      0x00fa,
      0x00ff,
      0x005c,
      0x00f7,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00b2,
      0x00d4,
      0x00d6,
      0x00d2,
      0x00d3,
      0x00d5,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00b3,
      0x00db,
      0x00dc,
      0x00d9,
      0x00da,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xc2\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa3",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xb1",
      "\xc2\xa2",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x7c",
      "\x26",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xac",
      "\xc3\x9f",
      "\x21",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xc3\x82",
      "\xc3\x84",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x83",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x91",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xc3\xb8",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\x60",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xc3\x98",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xc2\xab",
      "\xc2\xbb",
      "\xc3\xb0",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc2\xb1",
      "\xc2\xb0",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc3\xa6",
      "\xc2\xb8",
      "\xc3\x86",
      "\xc2\xa4",
      "\xc2\xb5",
      "\x7e",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc2\xa1",
      "\xc2\xbf",
      "\xc3\x90",
      "\x5b",
      "\xc3\x9e",
      "\xc2\xae",
      "\xc2\xac",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xc2\xb7",
      "\xc2\xa9",
      "\xc2\xa7",
      "\xc2\xb6",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc3\x9d",
      "\xc2\xa8",
      "\xc2\xaf",
      "\x5d",
      "\xc2\xb4",
      "\xc3\x97",
      "\x7b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb5",
      "\x7d",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc2\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbf",
      "\x5c",
      "\xc3\xb7",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xb2",
      "\xc3\x94",
      "\xc3\x96",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x95",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc2\xb3",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x5a",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\xad",
      0x0000005c => "\xe0",
      0x0000005d => "\xbd",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\xc0",
      0x0000007c => "\x4f",
      0x0000007d => "\xd0",
      0x0000007e => "\xa1",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x41",
      0x000000a1 => "\xaa",
      0x000000a2 => "\x4a",
      0x000000a3 => "\xb1",
      0x000000a4 => "\x9f",
      0x000000a5 => "\xb2",
      0x000000a6 => "\x6a",
      0x000000a7 => "\xb5",
      0x000000a8 => "\xbb",
      0x000000a9 => "\xb4",
      0x000000aa => "\x9a",
      0x000000ab => "\x8a",
      0x000000ac => "\xb0",
      0x000000ad => "\xca",
      0x000000ae => "\xaf",
      0x000000af => "\xbc",
      0x000000b0 => "\x90",
      0x000000b1 => "\x8f",
      0x000000b2 => "\xea",
      0x000000b3 => "\xfa",
      0x000000b4 => "\xbe",
      0x000000b5 => "\xa0",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb3",
      0x000000b8 => "\x9d",
      0x000000b9 => "\xda",
      0x000000ba => "\x9b",
      0x000000bb => "\x8b",
      0x000000bc => "\xb7",
      0x000000bd => "\xb8",
      0x000000be => "\xb9",
      0x000000bf => "\xab",
      0x000000c0 => "\x64",
      0x000000c1 => "\x65",
      0x000000c2 => "\x62",
      0x000000c3 => "\x66",
      0x000000c4 => "\x63",
      0x000000c5 => "\x67",
      0x000000c6 => "\x9e",
      0x000000c7 => "\x68",
      0x000000c8 => "\x74",
      0x000000c9 => "\x71",
      0x000000ca => "\x72",
      0x000000cb => "\x73",
      0x000000cc => "\x78",
      0x000000cd => "\x75",
      0x000000ce => "\x76",
      0x000000cf => "\x77",
      0x000000d0 => "\xac",
      0x000000d1 => "\x69",
      0x000000d2 => "\xed",
      0x000000d3 => "\xee",
      0x000000d4 => "\xeb",
      0x000000d5 => "\xef",
      0x000000d6 => "\xec",
      0x000000d7 => "\xbf",
      0x000000d8 => "\x80",
      0x000000d9 => "\xfd",
      0x000000da => "\xfe",
      0x000000db => "\xfb",
      0x000000dc => "\xfc",
      0x000000dd => "\xba",
      0x000000de => "\xae",
      0x000000df => "\x59",
      0x000000e0 => "\x44",
      0x000000e1 => "\x45",
      0x000000e2 => "\x42",
      0x000000e3 => "\x46",
      0x000000e4 => "\x43",
      0x000000e5 => "\x47",
      0x000000e6 => "\x9c",
      0x000000e7 => "\x48",
      0x000000e8 => "\x54",
      0x000000e9 => "\x51",
      0x000000ea => "\x52",
      0x000000eb => "\x53",
      0x000000ec => "\x58",
      0x000000ed => "\x55",
      0x000000ee => "\x56",
      0x000000ef => "\x57",
      0x000000f0 => "\x8c",
      0x000000f1 => "\x49",
      0x000000f2 => "\xcd",
      0x000000f3 => "\xce",
      0x000000f4 => "\xcb",
      0x000000f5 => "\xcf",
      0x000000f6 => "\xcc",
      0x000000f7 => "\xe1",
      0x000000f8 => "\x70",
      0x000000f9 => "\xdd",
      0x000000fa => "\xde",
      0x000000fb => "\xdb",
      0x000000fc => "\xdc",
      0x000000fd => "\x8d",
      0x000000fe => "\x8e",
      0x000000ff => "\xdf",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM1047 - Conversion routines for IBM1047
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM1047.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM Character Data Representation Architecture
    Registry SC09-1391-00 p 150.
   alias CP1047
   alias 1047
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000000A0 | NO-BREAK SPACE
      42 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      43 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      44 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      45 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      46 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      47 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      48 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      49 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      4A |  000000A2 | CENT SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  0000007C | VERTICAL LINE
      50 |  00000026 | AMPERSAND
      51 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      52 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      53 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      54 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      55 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      56 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      57 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      58 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      59 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      5A |  00000021 | EXCLAMATION MARK
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      63 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      64 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      65 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      66 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      67 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      68 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      69 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      71 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      72 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      73 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      74 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      75 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      76 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      77 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      78 |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      8B |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      8C |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      8D |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      8E |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      8F |  000000B1 | PLUS-MINUS SIGN
      90 |  000000B0 | DEGREE SIGN
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  000000AA | FEMININE ORDINAL INDICATOR
      9B |  000000BA | MASCULINE ORDINAL INDICATOR
      9C |  000000E6 | LATIN SMALL LETTER AE
      9D |  000000B8 | CEDILLA
      9E |  000000C6 | LATIN CAPITAL LETTER AE
      9F |  000000A4 | CURRENCY SIGN
      A0 |  000000B5 | MICRO SIGN
      A1 |  0000007E | TILDE
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  000000A1 | INVERTED EXCLAMATION MARK
      AB |  000000BF | INVERTED QUESTION MARK
      AC |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      AD |  0000005B | LEFT SQUARE BRACKET
      AE |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      AF |  000000AE | REGISTERED SIGN
      B0 |  000000AC | NOT SIGN
      B1 |  000000A3 | POUND SIGN
      B2 |  000000A5 | YEN SIGN
      B3 |  000000B7 | MIDDLE DOT
      B4 |  000000A9 | COPYRIGHT SIGN
      B5 |  000000A7 | SECTION SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000BC | VULGAR FRACTION ONE QUARTER
      B8 |  000000BD | VULGAR FRACTION ONE HALF
      B9 |  000000BE | VULGAR FRACTION THREE QUARTERS
      BA |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      BB |  000000A8 | DIAERESIS
      BC |  000000AF | MACRON
      BD |  0000005D | RIGHT SQUARE BRACKET
      BE |  000000B4 | ACUTE ACCENT
      BF |  000000D7 | MULTIPLICATION SIGN
      C0 |  0000007B | LEFT CURLY BRACKET
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      CC |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      CD |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      CE |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      CF |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      D0 |  0000007D | RIGHT CURLY BRACKET
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  000000B9 | SUPERSCRIPT ONE
      DB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      DC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      DD |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      DE |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      DF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      E0 |  0000005C | REVERSE SOLIDUS
      E1 |  000000F7 | DIVISION SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000B2 | SUPERSCRIPT TWO
      EB |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      EC |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      ED |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000B3 | SUPERSCRIPT THREE
      FB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      FC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      FD |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      FE |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM1047

    $main::fatpacked{"Locale/RecodeData/IBM256.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM256';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM256.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM256;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x00a0,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e1,
      0x00e3,
      0x00e5,
      0x00e7,
      0x00f1,
      0x005b,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00ec,
      0x00df,
      0x005d,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0x00c2,
      0x00c4,
      0x00c0,
      0x00c1,
      0x00c3,
      0x00c5,
      0x00c7,
      0x00d1,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x00f8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x0060,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0x00d8,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x00ab,
      0x00bb,
      0x00f0,
      0x00fd,
      0x00fe,
      0x00b1,
      0x00b0,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x00aa,
      0x00ba,
      0x00e6,
      0x00b8,
      0x00c6,
      0x00a4,
      0x00b5,
      0x007e,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x00a1,
      0x00bf,
      0x00d0,
      0x00dd,
      0x00de,
      0x00ae,
      0x00a2,
      0x00a3,
      0x00a5,
      0x20a7,
      0x0192,
      0x00a7,
      0x00b6,
      0x00bc,
      0x00bd,
      0x00be,
      0x00ac,
      0x007c,
      0x203e,
      0x00a8,
      0x00b4,
      0x2017,
      0x007b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0x00f4,
      0x00f6,
      0x00f2,
      0x00f3,
      0x00f5,
      0x007d,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x00b9,
      0x00fb,
      0x00fc,
      0x00f9,
      0x00fa,
      0x00ff,
      0x005c,
      0x2003,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00b2,
      0x00d4,
      0x00d6,
      0x00d2,
      0x00d3,
      0x00d5,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00b3,
      0x00db,
      0x00dc,
      0x00d9,
      0x00da,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xc2\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa3",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xb1",
      "\x5b",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xac",
      "\xc3\x9f",
      "\x5d",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xc3\x82",
      "\xc3\x84",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x83",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x91",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xc3\xb8",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\x60",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xc3\x98",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xc2\xab",
      "\xc2\xbb",
      "\xc3\xb0",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc2\xb1",
      "\xc2\xb0",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc3\xa6",
      "\xc2\xb8",
      "\xc3\x86",
      "\xc2\xa4",
      "\xc2\xb5",
      "\x7e",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc2\xa1",
      "\xc2\xbf",
      "\xc3\x90",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc2\xae",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xe2\x82\xa7",
      "\xc6\x92",
      "\xc2\xa7",
      "\xc2\xb6",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc2\xac",
      "\x7c",
      "\xe2\x80\xbe",
      "\xc2\xa8",
      "\xc2\xb4",
      "\xe2\x80\x97",
      "\x7b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb5",
      "\x7d",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc2\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbf",
      "\x5c",
      "\xe2\x80\x83",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xb2",
      "\xc3\x94",
      "\xc3\x96",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x95",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc2\xb3",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x4a",
      0x0000005c => "\xe0",
      0x0000005d => "\x5a",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\xc0",
      0x0000007c => "\xbb",
      0x0000007d => "\xd0",
      0x0000007e => "\xa1",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x41",
      0x000000a1 => "\xaa",
      0x000000a2 => "\xb0",
      0x000000a3 => "\xb1",
      0x000000a4 => "\x9f",
      0x000000a5 => "\xb2",
      0x000000a6 => "\x6a",
      0x000000a7 => "\xb5",
      0x000000a8 => "\xbd",
      0x000000aa => "\x9a",
      0x000000ab => "\x8a",
      0x000000ac => "\xba",
      0x000000ad => "\xca",
      0x000000ae => "\xaf",
      0x000000b0 => "\x90",
      0x000000b1 => "\x8f",
      0x000000b2 => "\xea",
      0x000000b3 => "\xfa",
      0x000000b4 => "\xbe",
      0x000000b5 => "\xa0",
      0x000000b6 => "\xb6",
      0x000000b8 => "\x9d",
      0x000000b9 => "\xda",
      0x000000ba => "\x9b",
      0x000000bb => "\x8b",
      0x000000bc => "\xb7",
      0x000000bd => "\xb8",
      0x000000be => "\xb9",
      0x000000bf => "\xab",
      0x000000c0 => "\x64",
      0x000000c1 => "\x65",
      0x000000c2 => "\x62",
      0x000000c3 => "\x66",
      0x000000c4 => "\x63",
      0x000000c5 => "\x67",
      0x000000c6 => "\x9e",
      0x000000c7 => "\x68",
      0x000000c8 => "\x74",
      0x000000c9 => "\x71",
      0x000000ca => "\x72",
      0x000000cb => "\x73",
      0x000000cc => "\x78",
      0x000000cd => "\x75",
      0x000000ce => "\x76",
      0x000000cf => "\x77",
      0x000000d0 => "\xac",
      0x000000d1 => "\x69",
      0x000000d2 => "\xed",
      0x000000d3 => "\xee",
      0x000000d4 => "\xeb",
      0x000000d5 => "\xef",
      0x000000d6 => "\xec",
      0x000000d8 => "\x80",
      0x000000d9 => "\xfd",
      0x000000da => "\xfe",
      0x000000db => "\xfb",
      0x000000dc => "\xfc",
      0x000000dd => "\xad",
      0x000000de => "\xae",
      0x000000df => "\x59",
      0x000000e0 => "\x44",
      0x000000e1 => "\x45",
      0x000000e2 => "\x42",
      0x000000e3 => "\x46",
      0x000000e4 => "\x43",
      0x000000e5 => "\x47",
      0x000000e6 => "\x9c",
      0x000000e7 => "\x48",
      0x000000e8 => "\x54",
      0x000000e9 => "\x51",
      0x000000ea => "\x52",
      0x000000eb => "\x53",
      0x000000ec => "\x58",
      0x000000ed => "\x55",
      0x000000ee => "\x56",
      0x000000ef => "\x57",
      0x000000f0 => "\x8c",
      0x000000f1 => "\x49",
      0x000000f2 => "\xcd",
      0x000000f3 => "\xce",
      0x000000f4 => "\xcb",
      0x000000f5 => "\xcf",
      0x000000f6 => "\xcc",
      0x000000f8 => "\x70",
      0x000000f9 => "\xdd",
      0x000000fa => "\xde",
      0x000000fb => "\xdb",
      0x000000fc => "\xdc",
      0x000000fd => "\x8d",
      0x000000fe => "\x8e",
      0x000000ff => "\xdf",
      0x00000192 => "\xb4",
      0x00002003 => "\xe1",
      0x00002017 => "\xbf",
      0x0000203e => "\xbc",
      0x000020a7 => "\xb3",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM256 - Conversion routines for IBM256
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM256.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM Registry C-H 3-3220-050
   alias EBCDIC-INT1
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000000A0 | NO-BREAK SPACE
      42 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      43 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      44 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      45 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      46 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      47 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      48 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      49 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      4A |  0000005B | LEFT SQUARE BRACKET
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      51 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      52 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      53 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      54 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      55 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      56 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      57 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      58 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      59 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      5A |  0000005D | RIGHT SQUARE BRACKET
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      63 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      64 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      65 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      66 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      67 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      68 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      69 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      71 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      72 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      73 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      74 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      75 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      76 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      77 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      78 |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      8B |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      8C |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      8D |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      8E |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      8F |  000000B1 | PLUS-MINUS SIGN
      90 |  000000B0 | DEGREE SIGN
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  000000AA | FEMININE ORDINAL INDICATOR
      9B |  000000BA | MASCULINE ORDINAL INDICATOR
      9C |  000000E6 | LATIN SMALL LETTER AE
      9D |  000000B8 | CEDILLA
      9E |  000000C6 | LATIN CAPITAL LETTER AE
      9F |  000000A4 | CURRENCY SIGN
      A0 |  000000B5 | MICRO SIGN
      A1 |  0000007E | TILDE
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  000000A1 | INVERTED EXCLAMATION MARK
      AB |  000000BF | INVERTED QUESTION MARK
      AC |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      AD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      AE |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      AF |  000000AE | REGISTERED SIGN
      B0 |  000000A2 | CENT SIGN
      B1 |  000000A3 | POUND SIGN
      B2 |  000000A5 | YEN SIGN
      B3 |  000020A7 | PESETA SIGN
      B4 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      B5 |  000000A7 | SECTION SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000BC | VULGAR FRACTION ONE QUARTER
      B8 |  000000BD | VULGAR FRACTION ONE HALF
      B9 |  000000BE | VULGAR FRACTION THREE QUARTERS
      BA |  000000AC | NOT SIGN
      BB |  0000007C | VERTICAL LINE
      BC |  0000203E | OVERLINE
      BD |  000000A8 | DIAERESIS
      BE |  000000B4 | ACUTE ACCENT
      BF |  00002017 | DOUBLE LOW LINE
      C0 |  0000007B | LEFT CURLY BRACKET
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      CC |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      CD |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      CE |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      CF |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      D0 |  0000007D | RIGHT CURLY BRACKET
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  000000B9 | SUPERSCRIPT ONE
      DB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      DC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      DD |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      DE |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      DF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      E0 |  0000005C | REVERSE SOLIDUS
      E1 |  00002003 | EM SPACE
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000B2 | SUPERSCRIPT TWO
      EB |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      EC |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      ED |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000B3 | SUPERSCRIPT THREE
      FB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      FC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      FD |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      FE |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM256

    $main::fatpacked{"Locale/RecodeData/IBM273.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM273';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM273.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM273;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x00a0,
      0x00e2,
      0x007b,
      0x00e0,
      0x00e1,
      0x00e3,
      0x00e5,
      0x00e7,
      0x00f1,
      0x00c4,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00ec,
      0x007e,
      0x00dc,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0x00c2,
      0x005b,
      0x00c0,
      0x00c1,
      0x00c3,
      0x00c5,
      0x00c7,
      0x00d1,
      0x00f6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x00f8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x0060,
      0x003a,
      0x0023,
      0x00a7,
      0x0027,
      0x003d,
      0x0022,
      0x00d8,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x00ab,
      0x00bb,
      0x00f0,
      0x00fd,
      0x00fe,
      0x00b1,
      0x00b0,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x00aa,
      0x00ba,
      0x00e6,
      0x00b8,
      0x00c6,
      0x00a4,
      0x00b5,
      0x00df,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x00a1,
      0x00bf,
      0x00d0,
      0x00dd,
      0x00de,
      0x00ae,
      0x00a2,
      0x00a3,
      0x00a5,
      0x00b7,
      0x00a9,
      0x0040,
      0x00b6,
      0x00bc,
      0x00bd,
      0x00be,
      0x00ac,
      0x007c,
      0x203e,
      0x00a8,
      0x00b4,
      0x00d7,
      0x00e4,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0x00f4,
      0x00a6,
      0x00f2,
      0x00f3,
      0x00f5,
      0x00fc,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x00b9,
      0x00fb,
      0x007d,
      0x00f9,
      0x00fa,
      0x00ff,
      0x00d6,
      0x00f7,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00b2,
      0x00d4,
      0x005c,
      0x00d2,
      0x00d3,
      0x00d5,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00b3,
      0x00db,
      0x005d,
      0x00d9,
      0x00da,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xc2\xa0",
      "\xc3\xa2",
      "\x7b",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa3",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xb1",
      "\xc3\x84",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xac",
      "\x7e",
      "\xc3\x9c",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xc3\x82",
      "\x5b",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x83",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x91",
      "\xc3\xb6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xc3\xb8",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\x60",
      "\x3a",
      "\x23",
      "\xc2\xa7",
      "\x27",
      "\x3d",
      "\x22",
      "\xc3\x98",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xc2\xab",
      "\xc2\xbb",
      "\xc3\xb0",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc2\xb1",
      "\xc2\xb0",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc3\xa6",
      "\xc2\xb8",
      "\xc3\x86",
      "\xc2\xa4",
      "\xc2\xb5",
      "\xc3\x9f",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc2\xa1",
      "\xc2\xbf",
      "\xc3\x90",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc2\xae",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xc2\xb7",
      "\xc2\xa9",
      "\x40",
      "\xc2\xb6",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc2\xac",
      "\x7c",
      "\xe2\x80\xbe",
      "\xc2\xa8",
      "\xc2\xb4",
      "\xc3\x97",
      "\xc3\xa4",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xc3\xb4",
      "\xc2\xa6",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb5",
      "\xc3\xbc",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc2\xb9",
      "\xc3\xbb",
      "\x7d",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbf",
      "\xc3\x96",
      "\xc3\xb7",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xb2",
      "\xc3\x94",
      "\x5c",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x95",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc2\xb3",
      "\xc3\x9b",
      "\x5d",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\xb5",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x63",
      0x0000005c => "\xec",
      0x0000005d => "\xfc",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\x43",
      0x0000007c => "\xbb",
      0x0000007d => "\xdc",
      0x0000007e => "\x59",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x41",
      0x000000a1 => "\xaa",
      0x000000a2 => "\xb0",
      0x000000a3 => "\xb1",
      0x000000a4 => "\x9f",
      0x000000a5 => "\xb2",
      0x000000a6 => "\xcc",
      0x000000a7 => "\x7c",
      0x000000a8 => "\xbd",
      0x000000a9 => "\xb4",
      0x000000aa => "\x9a",
      0x000000ab => "\x8a",
      0x000000ac => "\xba",
      0x000000ad => "\xca",
      0x000000ae => "\xaf",
      0x000000b0 => "\x90",
      0x000000b1 => "\x8f",
      0x000000b2 => "\xea",
      0x000000b3 => "\xfa",
      0x000000b4 => "\xbe",
      0x000000b5 => "\xa0",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb3",
      0x000000b8 => "\x9d",
      0x000000b9 => "\xda",
      0x000000ba => "\x9b",
      0x000000bb => "\x8b",
      0x000000bc => "\xb7",
      0x000000bd => "\xb8",
      0x000000be => "\xb9",
      0x000000bf => "\xab",
      0x000000c0 => "\x64",
      0x000000c1 => "\x65",
      0x000000c2 => "\x62",
      0x000000c3 => "\x66",
      0x000000c4 => "\x4a",
      0x000000c5 => "\x67",
      0x000000c6 => "\x9e",
      0x000000c7 => "\x68",
      0x000000c8 => "\x74",
      0x000000c9 => "\x71",
      0x000000ca => "\x72",
      0x000000cb => "\x73",
      0x000000cc => "\x78",
      0x000000cd => "\x75",
      0x000000ce => "\x76",
      0x000000cf => "\x77",
      0x000000d0 => "\xac",
      0x000000d1 => "\x69",
      0x000000d2 => "\xed",
      0x000000d3 => "\xee",
      0x000000d4 => "\xeb",
      0x000000d5 => "\xef",
      0x000000d6 => "\xe0",
      0x000000d7 => "\xbf",
      0x000000d8 => "\x80",
      0x000000d9 => "\xfd",
      0x000000da => "\xfe",
      0x000000db => "\xfb",
      0x000000dc => "\x5a",
      0x000000dd => "\xad",
      0x000000de => "\xae",
      0x000000df => "\xa1",
      0x000000e0 => "\x44",
      0x000000e1 => "\x45",
      0x000000e2 => "\x42",
      0x000000e3 => "\x46",
      0x000000e4 => "\xc0",
      0x000000e5 => "\x47",
      0x000000e6 => "\x9c",
      0x000000e7 => "\x48",
      0x000000e8 => "\x54",
      0x000000e9 => "\x51",
      0x000000ea => "\x52",
      0x000000eb => "\x53",
      0x000000ec => "\x58",
      0x000000ed => "\x55",
      0x000000ee => "\x56",
      0x000000ef => "\x57",
      0x000000f0 => "\x8c",
      0x000000f1 => "\x49",
      0x000000f2 => "\xcd",
      0x000000f3 => "\xce",
      0x000000f4 => "\xcb",
      0x000000f5 => "\xcf",
      0x000000f6 => "\x6a",
      0x000000f7 => "\xe1",
      0x000000f8 => "\x70",
      0x000000f9 => "\xdd",
      0x000000fa => "\xde",
      0x000000fb => "\xdb",
      0x000000fc => "\xd0",
      0x000000fd => "\x8d",
      0x000000fe => "\x8e",
      0x000000ff => "\xdf",
      0x0000203e => "\xbc",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM273 - Conversion routines for IBM273
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM273.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP273
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000000A0 | NO-BREAK SPACE
      42 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      43 |  0000007B | LEFT CURLY BRACKET
      44 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      45 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      46 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      47 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      48 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      49 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      4A |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      51 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      52 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      53 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      54 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      55 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      56 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      57 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      58 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      59 |  0000007E | TILDE
      5A |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      63 |  0000005B | LEFT SQUARE BRACKET
      64 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      65 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      66 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      67 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      68 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      69 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      6A |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      71 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      72 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      73 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      74 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      75 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      76 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      77 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      78 |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  000000A7 | SECTION SIGN
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      8B |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      8C |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      8D |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      8E |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      8F |  000000B1 | PLUS-MINUS SIGN
      90 |  000000B0 | DEGREE SIGN
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  000000AA | FEMININE ORDINAL INDICATOR
      9B |  000000BA | MASCULINE ORDINAL INDICATOR
      9C |  000000E6 | LATIN SMALL LETTER AE
      9D |  000000B8 | CEDILLA
      9E |  000000C6 | LATIN CAPITAL LETTER AE
      9F |  000000A4 | CURRENCY SIGN
      A0 |  000000B5 | MICRO SIGN
      A1 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  000000A1 | INVERTED EXCLAMATION MARK
      AB |  000000BF | INVERTED QUESTION MARK
      AC |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      AD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      AE |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      AF |  000000AE | REGISTERED SIGN
      B0 |  000000A2 | CENT SIGN
      B1 |  000000A3 | POUND SIGN
      B2 |  000000A5 | YEN SIGN
      B3 |  000000B7 | MIDDLE DOT
      B4 |  000000A9 | COPYRIGHT SIGN
      B5 |  00000040 | COMMERCIAL AT
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000BC | VULGAR FRACTION ONE QUARTER
      B8 |  000000BD | VULGAR FRACTION ONE HALF
      B9 |  000000BE | VULGAR FRACTION THREE QUARTERS
      BA |  000000AC | NOT SIGN
      BB |  0000007C | VERTICAL LINE
      BC |  0000203E | OVERLINE
      BD |  000000A8 | DIAERESIS
      BE |  000000B4 | ACUTE ACCENT
      BF |  000000D7 | MULTIPLICATION SIGN
      C0 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      CC |  000000A6 | BROKEN BAR
      CD |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      CE |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      CF |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      D0 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  000000B9 | SUPERSCRIPT ONE
      DB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      DC |  0000007D | RIGHT CURLY BRACKET
      DD |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      DE |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      DF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      E0 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      E1 |  000000F7 | DIVISION SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000B2 | SUPERSCRIPT TWO
      EB |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      EC |  0000005C | REVERSE SOLIDUS
      ED |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000B3 | SUPERSCRIPT THREE
      FB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      FC |  0000005D | RIGHT SQUARE BRACKET
      FD |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      FE |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM273

    $main::fatpacked{"Locale/RecodeData/IBM274.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM274';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM274.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM274;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005b,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005d,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00f9,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0060,
      0x003a,
      0x0023,
      0x00e0,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a8,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e9,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e8,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e7,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5b",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5d",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xb9",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x60",
      "\x3a",
      "\x23",
      "\xc3\xa0",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa8",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa9",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa8",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa7",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x4a",
      0x0000005d => "\x5a",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a8 => "\xa1",
      0x000000e0 => "\x7c",
      0x000000e7 => "\xe0",
      0x000000e8 => "\xd0",
      0x000000e9 => "\xc0",
      0x000000f9 => "\x6a",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM274 - Conversion routines for IBM274
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM274.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3174 Character Set Ref, GA27-3831-02, March 1990
   alias EBCDIC-BE
   alias CP274
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  0000005B | LEFT SQUARE BRACKET
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      5A |  0000005D | RIGHT SQUARE BRACKET
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A1 |  000000A8 | DIAERESIS
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C0 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D0 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E0 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM274

    $main::fatpacked{"Locale/RecodeData/IBM275.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM275';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM275.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM275;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00c9,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0024,
      0x00c7,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e7,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e3,
      0x003a,
      0x00d5,
      0x00c3,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007e,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00f5,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00e9,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005c,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\x89",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x24",
      "\xc3\x87",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa7",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa3",
      "\x3a",
      "\xc3\x95",
      "\xc3\x83",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7e",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xb5",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc3\xa9",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5c",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000024 => "\x5a",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005c => "\xe0",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007e => "\xa1",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000c3 => "\x7c",
      0x000000c7 => "\x5b",
      0x000000c9 => "\x4a",
      0x000000d5 => "\x7b",
      0x000000e3 => "\x79",
      0x000000e7 => "\x6a",
      0x000000e9 => "\xd0",
      0x000000f5 => "\xc0",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM275 - Conversion routines for IBM275
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM275.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias EBCDIC-BR
   alias CP275
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      5A |  00000024 | DOLLAR SIGN
      5B |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      79 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      7A |  0000003A | COLON
      7B |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      7C |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A1 |  0000007E | TILDE
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C0 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D0 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E0 |  0000005C | REVERSE SOLIDUS
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM275

    $main::fatpacked{"Locale/RecodeData/IBM277.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM277';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM277.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM277;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x00a0,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e1,
      0x00e3,
      0x007d,
      0x00e7,
      0x00f1,
      0x0023,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00ec,
      0x00df,
      0x00a4,
      0x00c5,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0x00c2,
      0x00c4,
      0x00c0,
      0x00c1,
      0x00c3,
      0x0024,
      0x00c7,
      0x00d1,
      0x00f8,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x00a6,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x0060,
      0x003a,
      0x00c6,
      0x00d8,
      0x0027,
      0x003d,
      0x0022,
      0x0040,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x00ab,
      0x00bb,
      0x00f0,
      0x00fd,
      0x00fe,
      0x00b1,
      0x00b0,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x00aa,
      0x00ba,
      0x007b,
      0x00b8,
      0x005b,
      0x005d,
      0x00b5,
      0x00fc,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x00a1,
      0x00bf,
      0x00d0,
      0x00dd,
      0x00de,
      0x00ae,
      0x00a2,
      0x00a3,
      0x00a5,
      0x00b7,
      0x00a9,
      0x00a7,
      0x00b6,
      0x00bc,
      0x00bd,
      0x00be,
      0x00ac,
      0x007c,
      0x203e,
      0x00a8,
      0x00b4,
      0x00d7,
      0x00e6,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0x00f4,
      0x00f6,
      0x00f2,
      0x00f3,
      0x00f5,
      0x00e5,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x00b9,
      0x00fb,
      0x007e,
      0x00f9,
      0x00fa,
      0x00ff,
      0x005c,
      0x00f7,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00b2,
      0x00d4,
      0x00d6,
      0x00d2,
      0x00d3,
      0x00d5,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00b3,
      0x00db,
      0x00dc,
      0x00d9,
      0x00da,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xc2\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa3",
      "\x7d",
      "\xc3\xa7",
      "\xc3\xb1",
      "\x23",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xac",
      "\xc3\x9f",
      "\xc2\xa4",
      "\xc3\x85",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xc3\x82",
      "\xc3\x84",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x83",
      "\x24",
      "\xc3\x87",
      "\xc3\x91",
      "\xc3\xb8",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xc2\xa6",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\x60",
      "\x3a",
      "\xc3\x86",
      "\xc3\x98",
      "\x27",
      "\x3d",
      "\x22",
      "\x40",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xc2\xab",
      "\xc2\xbb",
      "\xc3\xb0",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc2\xb1",
      "\xc2\xb0",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xc2\xaa",
      "\xc2\xba",
      "\x7b",
      "\xc2\xb8",
      "\x5b",
      "\x5d",
      "\xc2\xb5",
      "\xc3\xbc",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc2\xa1",
      "\xc2\xbf",
      "\xc3\x90",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc2\xae",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xc2\xb7",
      "\xc2\xa9",
      "\xc2\xa7",
      "\xc2\xb6",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc2\xac",
      "\x7c",
      "\xe2\x80\xbe",
      "\xc2\xa8",
      "\xc2\xb4",
      "\xc3\x97",
      "\xc3\xa6",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb5",
      "\xc3\xa5",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc2\xb9",
      "\xc3\xbb",
      "\x7e",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbf",
      "\x5c",
      "\xc3\xb7",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xb2",
      "\xc3\x94",
      "\xc3\x96",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x95",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc2\xb3",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\x4a",
      0x00000024 => "\x67",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x80",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x9e",
      0x0000005c => "\xe0",
      0x0000005d => "\x9f",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\x9c",
      0x0000007c => "\xbb",
      0x0000007d => "\x47",
      0x0000007e => "\xdc",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x41",
      0x000000a1 => "\xaa",
      0x000000a2 => "\xb0",
      0x000000a3 => "\xb1",
      0x000000a4 => "\x5a",
      0x000000a5 => "\xb2",
      0x000000a6 => "\x70",
      0x000000a7 => "\xb5",
      0x000000a8 => "\xbd",
      0x000000a9 => "\xb4",
      0x000000aa => "\x9a",
      0x000000ab => "\x8a",
      0x000000ac => "\xba",
      0x000000ad => "\xca",
      0x000000ae => "\xaf",
      0x000000b0 => "\x90",
      0x000000b1 => "\x8f",
      0x000000b2 => "\xea",
      0x000000b3 => "\xfa",
      0x000000b4 => "\xbe",
      0x000000b5 => "\xa0",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb3",
      0x000000b8 => "\x9d",
      0x000000b9 => "\xda",
      0x000000ba => "\x9b",
      0x000000bb => "\x8b",
      0x000000bc => "\xb7",
      0x000000bd => "\xb8",
      0x000000be => "\xb9",
      0x000000bf => "\xab",
      0x000000c0 => "\x64",
      0x000000c1 => "\x65",
      0x000000c2 => "\x62",
      0x000000c3 => "\x66",
      0x000000c4 => "\x63",
      0x000000c5 => "\x5b",
      0x000000c6 => "\x7b",
      0x000000c7 => "\x68",
      0x000000c8 => "\x74",
      0x000000c9 => "\x71",
      0x000000ca => "\x72",
      0x000000cb => "\x73",
      0x000000cc => "\x78",
      0x000000cd => "\x75",
      0x000000ce => "\x76",
      0x000000cf => "\x77",
      0x000000d0 => "\xac",
      0x000000d1 => "\x69",
      0x000000d2 => "\xed",
      0x000000d3 => "\xee",
      0x000000d4 => "\xeb",
      0x000000d5 => "\xef",
      0x000000d6 => "\xec",
      0x000000d7 => "\xbf",
      0x000000d8 => "\x7c",
      0x000000d9 => "\xfd",
      0x000000da => "\xfe",
      0x000000db => "\xfb",
      0x000000dc => "\xfc",
      0x000000dd => "\xad",
      0x000000de => "\xae",
      0x000000df => "\x59",
      0x000000e0 => "\x44",
      0x000000e1 => "\x45",
      0x000000e2 => "\x42",
      0x000000e3 => "\x46",
      0x000000e4 => "\x43",
      0x000000e5 => "\xd0",
      0x000000e6 => "\xc0",
      0x000000e7 => "\x48",
      0x000000e8 => "\x54",
      0x000000e9 => "\x51",
      0x000000ea => "\x52",
      0x000000eb => "\x53",
      0x000000ec => "\x58",
      0x000000ed => "\x55",
      0x000000ee => "\x56",
      0x000000ef => "\x57",
      0x000000f0 => "\x8c",
      0x000000f1 => "\x49",
      0x000000f2 => "\xcd",
      0x000000f3 => "\xce",
      0x000000f4 => "\xcb",
      0x000000f5 => "\xcf",
      0x000000f6 => "\xcc",
      0x000000f7 => "\xe1",
      0x000000f8 => "\x6a",
      0x000000f9 => "\xdd",
      0x000000fa => "\xde",
      0x000000fb => "\xdb",
      0x000000fc => "\xa1",
      0x000000fd => "\x8d",
      0x000000fe => "\x8e",
      0x000000ff => "\xdf",
      0x0000203e => "\xbc",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM277 - Conversion routines for IBM277
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM277.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias EBCDIC-CP-DK
   alias EBCDIC-CP-NO
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000000A0 | NO-BREAK SPACE
      42 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      43 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      44 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      45 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      46 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      47 |  0000007D | RIGHT CURLY BRACKET
      48 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      49 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      4A |  00000023 | NUMBER SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      51 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      52 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      53 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      54 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      55 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      56 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      57 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      58 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      59 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      5A |  000000A4 | CURRENCY SIGN
      5B |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      63 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      64 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      65 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      66 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      67 |  00000024 | DOLLAR SIGN
      68 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      69 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      6A |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  000000A6 | BROKEN BAR
      71 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      72 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      73 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      74 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      75 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      76 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      77 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      78 |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  000000C6 | LATIN CAPITAL LETTER AE
      7C |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  00000040 | COMMERCIAL AT
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      8B |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      8C |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      8D |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      8E |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      8F |  000000B1 | PLUS-MINUS SIGN
      90 |  000000B0 | DEGREE SIGN
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  000000AA | FEMININE ORDINAL INDICATOR
      9B |  000000BA | MASCULINE ORDINAL INDICATOR
      9C |  0000007B | LEFT CURLY BRACKET
      9D |  000000B8 | CEDILLA
      9E |  0000005B | LEFT SQUARE BRACKET
      9F |  0000005D | RIGHT SQUARE BRACKET
      A0 |  000000B5 | MICRO SIGN
      A1 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  000000A1 | INVERTED EXCLAMATION MARK
      AB |  000000BF | INVERTED QUESTION MARK
      AC |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      AD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      AE |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      AF |  000000AE | REGISTERED SIGN
      B0 |  000000A2 | CENT SIGN
      B1 |  000000A3 | POUND SIGN
      B2 |  000000A5 | YEN SIGN
      B3 |  000000B7 | MIDDLE DOT
      B4 |  000000A9 | COPYRIGHT SIGN
      B5 |  000000A7 | SECTION SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000BC | VULGAR FRACTION ONE QUARTER
      B8 |  000000BD | VULGAR FRACTION ONE HALF
      B9 |  000000BE | VULGAR FRACTION THREE QUARTERS
      BA |  000000AC | NOT SIGN
      BB |  0000007C | VERTICAL LINE
      BC |  0000203E | OVERLINE
      BD |  000000A8 | DIAERESIS
      BE |  000000B4 | ACUTE ACCENT
      BF |  000000D7 | MULTIPLICATION SIGN
      C0 |  000000E6 | LATIN SMALL LETTER AE
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      CC |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      CD |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      CE |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      CF |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      D0 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  000000B9 | SUPERSCRIPT ONE
      DB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      DC |  0000007E | TILDE
      DD |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      DE |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      DF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      E0 |  0000005C | REVERSE SOLIDUS
      E1 |  000000F7 | DIVISION SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000B2 | SUPERSCRIPT TWO
      EB |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      EC |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      ED |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000B3 | SUPERSCRIPT THREE
      FB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      FC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      FD |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      FE |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM277

    $main::fatpacked{"Locale/RecodeData/IBM278.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM278';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM278.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM278;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x00a0,
      0x00e2,
      0x007b,
      0x00e0,
      0x00e1,
      0x00e3,
      0x007d,
      0x00e7,
      0x00f1,
      0x00a7,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0x0060,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00ec,
      0x00df,
      0x00a4,
      0x00c5,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0x00c2,
      0x0023,
      0x00c0,
      0x00c1,
      0x00c3,
      0x0024,
      0x00c7,
      0x00d1,
      0x00f6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x00f8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x00e9,
      0x003a,
      0x00c4,
      0x00d6,
      0x0027,
      0x003d,
      0x0022,
      0x00d8,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x00ab,
      0x00bb,
      0x00f0,
      0x00fd,
      0x00fe,
      0x00b1,
      0x00b0,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x00aa,
      0x00ba,
      0x00e6,
      0x00b8,
      0x00c6,
      0x005d,
      0x00b5,
      0x00fc,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x00a1,
      0x00bf,
      0x00d0,
      0x00dd,
      0x00de,
      0x00ae,
      0x00a2,
      0x00a3,
      0x00a5,
      0x00b7,
      0x00a9,
      0x005b,
      0x00b6,
      0x00bc,
      0x00bd,
      0x00be,
      0x00ac,
      0x007c,
      0x203e,
      0x00a8,
      0x00b4,
      0x00d7,
      0x00e4,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0x00f4,
      0x00a6,
      0x00f2,
      0x00f3,
      0x00f5,
      0x00e5,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x00b9,
      0x00fb,
      0x007e,
      0x00f9,
      0x00fa,
      0x00ff,
      0x005c,
      0x00f7,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00b2,
      0x00d4,
      0x0040,
      0x00d2,
      0x00d3,
      0x00d5,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00b3,
      0x00db,
      0x00dc,
      0x00d9,
      0x00da,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xc2\xa0",
      "\xc3\xa2",
      "\x7b",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa3",
      "\x7d",
      "\xc3\xa7",
      "\xc3\xb1",
      "\xc2\xa7",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\x60",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xac",
      "\xc3\x9f",
      "\xc2\xa4",
      "\xc3\x85",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xc3\x82",
      "\x23",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x83",
      "\x24",
      "\xc3\x87",
      "\xc3\x91",
      "\xc3\xb6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xc3\xb8",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\xc3\xa9",
      "\x3a",
      "\xc3\x84",
      "\xc3\x96",
      "\x27",
      "\x3d",
      "\x22",
      "\xc3\x98",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xc2\xab",
      "\xc2\xbb",
      "\xc3\xb0",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc2\xb1",
      "\xc2\xb0",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc3\xa6",
      "\xc2\xb8",
      "\xc3\x86",
      "\x5d",
      "\xc2\xb5",
      "\xc3\xbc",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc2\xa1",
      "\xc2\xbf",
      "\xc3\x90",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc2\xae",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xc2\xb7",
      "\xc2\xa9",
      "\x5b",
      "\xc2\xb6",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc2\xac",
      "\x7c",
      "\xe2\x80\xbe",
      "\xc2\xa8",
      "\xc2\xb4",
      "\xc3\x97",
      "\xc3\xa4",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xc3\xb4",
      "\xc2\xa6",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb5",
      "\xc3\xa5",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc2\xb9",
      "\xc3\xbb",
      "\x7e",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbf",
      "\x5c",
      "\xc3\xb7",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xb2",
      "\xc3\x94",
      "\x40",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x95",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc2\xb3",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\x63",
      0x00000024 => "\x67",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\xec",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\xb5",
      0x0000005c => "\xe0",
      0x0000005d => "\x9f",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x51",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\x43",
      0x0000007c => "\xbb",
      0x0000007d => "\x47",
      0x0000007e => "\xdc",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x41",
      0x000000a1 => "\xaa",
      0x000000a2 => "\xb0",
      0x000000a3 => "\xb1",
      0x000000a4 => "\x5a",
      0x000000a5 => "\xb2",
      0x000000a6 => "\xcc",
      0x000000a7 => "\x4a",
      0x000000a8 => "\xbd",
      0x000000a9 => "\xb4",
      0x000000aa => "\x9a",
      0x000000ab => "\x8a",
      0x000000ac => "\xba",
      0x000000ad => "\xca",
      0x000000ae => "\xaf",
      0x000000b0 => "\x90",
      0x000000b1 => "\x8f",
      0x000000b2 => "\xea",
      0x000000b3 => "\xfa",
      0x000000b4 => "\xbe",
      0x000000b5 => "\xa0",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb3",
      0x000000b8 => "\x9d",
      0x000000b9 => "\xda",
      0x000000ba => "\x9b",
      0x000000bb => "\x8b",
      0x000000bc => "\xb7",
      0x000000bd => "\xb8",
      0x000000be => "\xb9",
      0x000000bf => "\xab",
      0x000000c0 => "\x64",
      0x000000c1 => "\x65",
      0x000000c2 => "\x62",
      0x000000c3 => "\x66",
      0x000000c4 => "\x7b",
      0x000000c5 => "\x5b",
      0x000000c6 => "\x9e",
      0x000000c7 => "\x68",
      0x000000c8 => "\x74",
      0x000000c9 => "\x71",
      0x000000ca => "\x72",
      0x000000cb => "\x73",
      0x000000cc => "\x78",
      0x000000cd => "\x75",
      0x000000ce => "\x76",
      0x000000cf => "\x77",
      0x000000d0 => "\xac",
      0x000000d1 => "\x69",
      0x000000d2 => "\xed",
      0x000000d3 => "\xee",
      0x000000d4 => "\xeb",
      0x000000d5 => "\xef",
      0x000000d6 => "\x7c",
      0x000000d7 => "\xbf",
      0x000000d8 => "\x80",
      0x000000d9 => "\xfd",
      0x000000da => "\xfe",
      0x000000db => "\xfb",
      0x000000dc => "\xfc",
      0x000000dd => "\xad",
      0x000000de => "\xae",
      0x000000df => "\x59",
      0x000000e0 => "\x44",
      0x000000e1 => "\x45",
      0x000000e2 => "\x42",
      0x000000e3 => "\x46",
      0x000000e4 => "\xc0",
      0x000000e5 => "\xd0",
      0x000000e6 => "\x9c",
      0x000000e7 => "\x48",
      0x000000e8 => "\x54",
      0x000000e9 => "\x79",
      0x000000ea => "\x52",
      0x000000eb => "\x53",
      0x000000ec => "\x58",
      0x000000ed => "\x55",
      0x000000ee => "\x56",
      0x000000ef => "\x57",
      0x000000f0 => "\x8c",
      0x000000f1 => "\x49",
      0x000000f2 => "\xcd",
      0x000000f3 => "\xce",
      0x000000f4 => "\xcb",
      0x000000f5 => "\xcf",
      0x000000f6 => "\x6a",
      0x000000f7 => "\xe1",
      0x000000f8 => "\x70",
      0x000000f9 => "\xdd",
      0x000000fa => "\xde",
      0x000000fb => "\xdb",
      0x000000fc => "\xa1",
      0x000000fd => "\x8d",
      0x000000fe => "\x8e",
      0x000000ff => "\xdf",
      0x0000203e => "\xbc",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM278 - Conversion routines for IBM278
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM278.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP278
   alias EBCDIC-CP-FI
   alias EBCDIC-CP-SE
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000000A0 | NO-BREAK SPACE
      42 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      43 |  0000007B | LEFT CURLY BRACKET
      44 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      45 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      46 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      47 |  0000007D | RIGHT CURLY BRACKET
      48 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      49 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      4A |  000000A7 | SECTION SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      51 |  00000060 | GRAVE ACCENT
      52 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      53 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      54 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      55 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      56 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      57 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      58 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      59 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      5A |  000000A4 | CURRENCY SIGN
      5B |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      63 |  00000023 | NUMBER SIGN
      64 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      65 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      66 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      67 |  00000024 | DOLLAR SIGN
      68 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      69 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      6A |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      71 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      72 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      73 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      74 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      75 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      76 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      77 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      78 |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      79 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      7A |  0000003A | COLON
      7B |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      7C |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      8B |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      8C |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      8D |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      8E |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      8F |  000000B1 | PLUS-MINUS SIGN
      90 |  000000B0 | DEGREE SIGN
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  000000AA | FEMININE ORDINAL INDICATOR
      9B |  000000BA | MASCULINE ORDINAL INDICATOR
      9C |  000000E6 | LATIN SMALL LETTER AE
      9D |  000000B8 | CEDILLA
      9E |  000000C6 | LATIN CAPITAL LETTER AE
      9F |  0000005D | RIGHT SQUARE BRACKET
      A0 |  000000B5 | MICRO SIGN
      A1 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  000000A1 | INVERTED EXCLAMATION MARK
      AB |  000000BF | INVERTED QUESTION MARK
      AC |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      AD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      AE |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      AF |  000000AE | REGISTERED SIGN
      B0 |  000000A2 | CENT SIGN
      B1 |  000000A3 | POUND SIGN
      B2 |  000000A5 | YEN SIGN
      B3 |  000000B7 | MIDDLE DOT
      B4 |  000000A9 | COPYRIGHT SIGN
      B5 |  0000005B | LEFT SQUARE BRACKET
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000BC | VULGAR FRACTION ONE QUARTER
      B8 |  000000BD | VULGAR FRACTION ONE HALF
      B9 |  000000BE | VULGAR FRACTION THREE QUARTERS
      BA |  000000AC | NOT SIGN
      BB |  0000007C | VERTICAL LINE
      BC |  0000203E | OVERLINE
      BD |  000000A8 | DIAERESIS
      BE |  000000B4 | ACUTE ACCENT
      BF |  000000D7 | MULTIPLICATION SIGN
      C0 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      CC |  000000A6 | BROKEN BAR
      CD |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      CE |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      CF |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      D0 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  000000B9 | SUPERSCRIPT ONE
      DB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      DC |  0000007E | TILDE
      DD |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      DE |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      DF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      E0 |  0000005C | REVERSE SOLIDUS
      E1 |  000000F7 | DIVISION SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000B2 | SUPERSCRIPT TWO
      EB |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      EC |  00000040 | COMMERCIAL AT
      ED |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000B3 | SUPERSCRIPT THREE
      FB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      FC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      FD |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      FE |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM278

    $main::fatpacked{"Locale/RecodeData/IBM280.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM280';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM280.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM280;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x00a0,
      0x00e2,
      0x00e4,
      0x007b,
      0x00e1,
      0x00e3,
      0x00e5,
      0x005c,
      0x00f1,
      0x00b0,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0x005d,
      0x00ea,
      0x00eb,
      0x007d,
      0x00ed,
      0x00ee,
      0x00ef,
      0x007e,
      0x00df,
      0x00e9,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0x00c2,
      0x00c4,
      0x00c0,
      0x00c1,
      0x00c3,
      0x00c5,
      0x00c7,
      0x00d1,
      0x00f2,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x00f8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x00f9,
      0x003a,
      0x00a3,
      0x00a7,
      0x0027,
      0x003d,
      0x0022,
      0x00d8,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x00ab,
      0x00bb,
      0x00f0,
      0x00fd,
      0x00fe,
      0x00b1,
      0x005b,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x00aa,
      0x00ba,
      0x00e6,
      0x00b8,
      0x00c6,
      0x00a4,
      0x00b5,
      0x00ec,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x00a1,
      0x00bf,
      0x00d0,
      0x00dd,
      0x00de,
      0x00ae,
      0x00a2,
      0x0023,
      0x00a5,
      0x00b7,
      0x00a9,
      0x0040,
      0x00b6,
      0x00bc,
      0x00bd,
      0x00be,
      0x00ac,
      0x007c,
      0x203e,
      0x00a8,
      0x00b4,
      0x00d7,
      0x00e0,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0x00f4,
      0x00f6,
      0x00a6,
      0x00f3,
      0x00f5,
      0x00e8,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x00b9,
      0x00fb,
      0x00fc,
      0x0060,
      0x00fa,
      0x00ff,
      0x00e7,
      0x00f7,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00b2,
      0x00d4,
      0x00d6,
      0x00d2,
      0x00d3,
      0x00d5,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00b3,
      0x00db,
      0x00dc,
      0x00d9,
      0x00da,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xc2\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\x7b",
      "\xc3\xa1",
      "\xc3\xa3",
      "\xc3\xa5",
      "\x5c",
      "\xc3\xb1",
      "\xc2\xb0",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\x5d",
      "\xc3\xaa",
      "\xc3\xab",
      "\x7d",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\x7e",
      "\xc3\x9f",
      "\xc3\xa9",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xc3\x82",
      "\xc3\x84",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x83",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x91",
      "\xc3\xb2",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xc3\xb8",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\xc3\xb9",
      "\x3a",
      "\xc2\xa3",
      "\xc2\xa7",
      "\x27",
      "\x3d",
      "\x22",
      "\xc3\x98",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xc2\xab",
      "\xc2\xbb",
      "\xc3\xb0",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc2\xb1",
      "\x5b",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc3\xa6",
      "\xc2\xb8",
      "\xc3\x86",
      "\xc2\xa4",
      "\xc2\xb5",
      "\xc3\xac",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc2\xa1",
      "\xc2\xbf",
      "\xc3\x90",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc2\xae",
      "\xc2\xa2",
      "\x23",
      "\xc2\xa5",
      "\xc2\xb7",
      "\xc2\xa9",
      "\x40",
      "\xc2\xb6",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc2\xac",
      "\x7c",
      "\xe2\x80\xbe",
      "\xc2\xa8",
      "\xc2\xb4",
      "\xc3\x97",
      "\xc3\xa0",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc2\xa6",
      "\xc3\xb3",
      "\xc3\xb5",
      "\xc3\xa8",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc2\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\x60",
      "\xc3\xba",
      "\xc3\xbf",
      "\xc3\xa7",
      "\xc3\xb7",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xb2",
      "\xc3\x94",
      "\xc3\x96",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x95",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc2\xb3",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\xb1",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\xb5",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x90",
      0x0000005c => "\x48",
      0x0000005d => "\x51",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\xdd",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\x44",
      0x0000007c => "\xbb",
      0x0000007d => "\x54",
      0x0000007e => "\x58",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x41",
      0x000000a1 => "\xaa",
      0x000000a2 => "\xb0",
      0x000000a3 => "\x7b",
      0x000000a4 => "\x9f",
      0x000000a5 => "\xb2",
      0x000000a6 => "\xcd",
      0x000000a7 => "\x7c",
      0x000000a8 => "\xbd",
      0x000000a9 => "\xb4",
      0x000000aa => "\x9a",
      0x000000ab => "\x8a",
      0x000000ac => "\xba",
      0x000000ad => "\xca",
      0x000000ae => "\xaf",
      0x000000b0 => "\x4a",
      0x000000b1 => "\x8f",
      0x000000b2 => "\xea",
      0x000000b3 => "\xfa",
      0x000000b4 => "\xbe",
      0x000000b5 => "\xa0",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb3",
      0x000000b8 => "\x9d",
      0x000000b9 => "\xda",
      0x000000ba => "\x9b",
      0x000000bb => "\x8b",
      0x000000bc => "\xb7",
      0x000000bd => "\xb8",
      0x000000be => "\xb9",
      0x000000bf => "\xab",
      0x000000c0 => "\x64",
      0x000000c1 => "\x65",
      0x000000c2 => "\x62",
      0x000000c3 => "\x66",
      0x000000c4 => "\x63",
      0x000000c5 => "\x67",
      0x000000c6 => "\x9e",
      0x000000c7 => "\x68",
      0x000000c8 => "\x74",
      0x000000c9 => "\x71",
      0x000000ca => "\x72",
      0x000000cb => "\x73",
      0x000000cc => "\x78",
      0x000000cd => "\x75",
      0x000000ce => "\x76",
      0x000000cf => "\x77",
      0x000000d0 => "\xac",
      0x000000d1 => "\x69",
      0x000000d2 => "\xed",
      0x000000d3 => "\xee",
      0x000000d4 => "\xeb",
      0x000000d5 => "\xef",
      0x000000d6 => "\xec",
      0x000000d7 => "\xbf",
      0x000000d8 => "\x80",
      0x000000d9 => "\xfd",
      0x000000da => "\xfe",
      0x000000db => "\xfb",
      0x000000dc => "\xfc",
      0x000000dd => "\xad",
      0x000000de => "\xae",
      0x000000df => "\x59",
      0x000000e0 => "\xc0",
      0x000000e1 => "\x45",
      0x000000e2 => "\x42",
      0x000000e3 => "\x46",
      0x000000e4 => "\x43",
      0x000000e5 => "\x47",
      0x000000e6 => "\x9c",
      0x000000e7 => "\xe0",
      0x000000e8 => "\xd0",
      0x000000e9 => "\x5a",
      0x000000ea => "\x52",
      0x000000eb => "\x53",
      0x000000ec => "\xa1",
      0x000000ed => "\x55",
      0x000000ee => "\x56",
      0x000000ef => "\x57",
      0x000000f0 => "\x8c",
      0x000000f1 => "\x49",
      0x000000f2 => "\x6a",
      0x000000f3 => "\xce",
      0x000000f4 => "\xcb",
      0x000000f5 => "\xcf",
      0x000000f6 => "\xcc",
      0x000000f7 => "\xe1",
      0x000000f8 => "\x70",
      0x000000f9 => "\x79",
      0x000000fa => "\xde",
      0x000000fb => "\xdb",
      0x000000fc => "\xdc",
      0x000000fd => "\x8d",
      0x000000fe => "\x8e",
      0x000000ff => "\xdf",
      0x0000203e => "\xbc",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM280 - Conversion routines for IBM280
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM280.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP280
   alias EBCDIC-CP-IT
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000000A0 | NO-BREAK SPACE
      42 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      43 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      44 |  0000007B | LEFT CURLY BRACKET
      45 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      46 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      47 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      48 |  0000005C | REVERSE SOLIDUS
      49 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      4A |  000000B0 | DEGREE SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      51 |  0000005D | RIGHT SQUARE BRACKET
      52 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      53 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      54 |  0000007D | RIGHT CURLY BRACKET
      55 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      56 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      57 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      58 |  0000007E | TILDE
      59 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      5A |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      63 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      64 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      65 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      66 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      67 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      68 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      69 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      6A |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      71 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      72 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      73 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      74 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      75 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      76 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      77 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      78 |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      79 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      7A |  0000003A | COLON
      7B |  000000A3 | POUND SIGN
      7C |  000000A7 | SECTION SIGN
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      8B |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      8C |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      8D |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      8E |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      8F |  000000B1 | PLUS-MINUS SIGN
      90 |  0000005B | LEFT SQUARE BRACKET
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  000000AA | FEMININE ORDINAL INDICATOR
      9B |  000000BA | MASCULINE ORDINAL INDICATOR
      9C |  000000E6 | LATIN SMALL LETTER AE
      9D |  000000B8 | CEDILLA
      9E |  000000C6 | LATIN CAPITAL LETTER AE
      9F |  000000A4 | CURRENCY SIGN
      A0 |  000000B5 | MICRO SIGN
      A1 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  000000A1 | INVERTED EXCLAMATION MARK
      AB |  000000BF | INVERTED QUESTION MARK
      AC |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      AD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      AE |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      AF |  000000AE | REGISTERED SIGN
      B0 |  000000A2 | CENT SIGN
      B1 |  00000023 | NUMBER SIGN
      B2 |  000000A5 | YEN SIGN
      B3 |  000000B7 | MIDDLE DOT
      B4 |  000000A9 | COPYRIGHT SIGN
      B5 |  00000040 | COMMERCIAL AT
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000BC | VULGAR FRACTION ONE QUARTER
      B8 |  000000BD | VULGAR FRACTION ONE HALF
      B9 |  000000BE | VULGAR FRACTION THREE QUARTERS
      BA |  000000AC | NOT SIGN
      BB |  0000007C | VERTICAL LINE
      BC |  0000203E | OVERLINE
      BD |  000000A8 | DIAERESIS
      BE |  000000B4 | ACUTE ACCENT
      BF |  000000D7 | MULTIPLICATION SIGN
      C0 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      CC |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      CD |  000000A6 | BROKEN BAR
      CE |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      CF |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      D0 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  000000B9 | SUPERSCRIPT ONE
      DB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      DC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      DD |  00000060 | GRAVE ACCENT
      DE |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      DF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      E0 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E1 |  000000F7 | DIVISION SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000B2 | SUPERSCRIPT TWO
      EB |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      EC |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      ED |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000B3 | SUPERSCRIPT THREE
      FB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      FC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      FD |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      FE |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM280

    $main::fatpacked{"Locale/RecodeData/IBM281.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM281';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM281.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM281;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a3,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x007c,
      0x0026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0021,
      0x00a5,
      0x002a,
      0x0029,
      0x003b,
      0x00ac,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0060,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x203e,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007d,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0024,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa3",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x7c",
      "\x26",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x21",
      "\xc2\xa5",
      "\x2a",
      "\x29",
      "\x3b",
      "\xc2\xac",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x60",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x80\xbe",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7d",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x24",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x5a",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\xe0",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\xc0",
      0x0000007c => "\x4f",
      0x0000007d => "\xd0",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a3 => "\x4a",
      0x000000a5 => "\x5b",
      0x000000a6 => "\x6a",
      0x000000ac => "\x5f",
      0x0000203e => "\xa1",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM281 - Conversion routines for IBM281
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM281.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3174 Character Set Ref, GA27-3831-02, March 1990
   alias EBCDIC-JP-E
   alias CP281
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      4A |  000000A3 | POUND SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  0000007C | VERTICAL LINE
      50 |  00000026 | AMPERSAND
      5A |  00000021 | EXCLAMATION MARK
      5B |  000000A5 | YEN SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  000000AC | NOT SIGN
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      A1 |  0000203E | OVERLINE
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      C0 |  0000007B | LEFT CURLY BRACKET
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D0 |  0000007D | RIGHT CURLY BRACKET
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E0 |  00000024 | DOLLAR SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM281

    $main::fatpacked{"Locale/RecodeData/IBM284.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM284';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM284.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM284;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x00a0,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e1,
      0x00e3,
      0x00e5,
      0x00e7,
      0x00a6,
      0x005b,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x007c,
      0x0026,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00ec,
      0x00df,
      0x005d,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x00ac,
      0x002d,
      0x002f,
      0x00c2,
      0x00c4,
      0x00c0,
      0x00c1,
      0x00c3,
      0x00c5,
      0x00c7,
      0x0023,
      0x00f1,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x00f8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x0060,
      0x003a,
      0x00d1,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0x00d8,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x00ab,
      0x00bb,
      0x00f0,
      0x00fd,
      0x00fe,
      0x00b1,
      0x00b0,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x00aa,
      0x00ba,
      0x00e6,
      0x00b8,
      0x00c6,
      0x00a4,
      0x00b5,
      0x00a8,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x00a1,
      0x00bf,
      0x00d0,
      0x00dd,
      0x00de,
      0x00ae,
      0x00a2,
      0x00a3,
      0x00a5,
      0x00b7,
      0x00a9,
      0x00a7,
      0x00b6,
      0x00bc,
      0x00bd,
      0x00be,
      0x005e,
      0x0021,
      0x203e,
      0x007e,
      0x00b4,
      0x00d7,
      0x007b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0x00f4,
      0x00f6,
      0x00f2,
      0x00f3,
      0x00f5,
      0x007d,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x00b9,
      0x00fb,
      0x00fc,
      0x00f9,
      0x00fa,
      0x00ff,
      0x005c,
      0x00f7,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00b2,
      0x00d4,
      0x00d6,
      0x00d2,
      0x00d3,
      0x00d5,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00b3,
      0x00db,
      0x00dc,
      0x00d9,
      0x00da,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xc2\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa3",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc2\xa6",
      "\x5b",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x7c",
      "\x26",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xac",
      "\xc3\x9f",
      "\x5d",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\xc2\xac",
      "\x2d",
      "\x2f",
      "\xc3\x82",
      "\xc3\x84",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x83",
      "\xc3\x85",
      "\xc3\x87",
      "\x23",
      "\xc3\xb1",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xc3\xb8",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\x60",
      "\x3a",
      "\xc3\x91",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xc3\x98",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xc2\xab",
      "\xc2\xbb",
      "\xc3\xb0",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc2\xb1",
      "\xc2\xb0",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc3\xa6",
      "\xc2\xb8",
      "\xc3\x86",
      "\xc2\xa4",
      "\xc2\xb5",
      "\xc2\xa8",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc2\xa1",
      "\xc2\xbf",
      "\xc3\x90",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc2\xae",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xc2\xb7",
      "\xc2\xa9",
      "\xc2\xa7",
      "\xc2\xb6",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\x5e",
      "\x21",
      "\xe2\x80\xbe",
      "\x7e",
      "\xc2\xb4",
      "\xc3\x97",
      "\x7b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb5",
      "\x7d",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc2\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbf",
      "\x5c",
      "\xc3\xb7",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xb2",
      "\xc3\x94",
      "\xc3\x96",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x95",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc2\xb3",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\xbb",
      0x00000022 => "\x7f",
      0x00000023 => "\x69",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x4a",
      0x0000005c => "\xe0",
      0x0000005d => "\x5a",
      0x0000005e => "\xba",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\xc0",
      0x0000007c => "\x4f",
      0x0000007d => "\xd0",
      0x0000007e => "\xbd",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x41",
      0x000000a1 => "\xaa",
      0x000000a2 => "\xb0",
      0x000000a3 => "\xb1",
      0x000000a4 => "\x9f",
      0x000000a5 => "\xb2",
      0x000000a6 => "\x49",
      0x000000a7 => "\xb5",
      0x000000a8 => "\xa1",
      0x000000a9 => "\xb4",
      0x000000aa => "\x9a",
      0x000000ab => "\x8a",
      0x000000ac => "\x5f",
      0x000000ad => "\xca",
      0x000000ae => "\xaf",
      0x000000b0 => "\x90",
      0x000000b1 => "\x8f",
      0x000000b2 => "\xea",
      0x000000b3 => "\xfa",
      0x000000b4 => "\xbe",
      0x000000b5 => "\xa0",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb3",
      0x000000b8 => "\x9d",
      0x000000b9 => "\xda",
      0x000000ba => "\x9b",
      0x000000bb => "\x8b",
      0x000000bc => "\xb7",
      0x000000bd => "\xb8",
      0x000000be => "\xb9",
      0x000000bf => "\xab",
      0x000000c0 => "\x64",
      0x000000c1 => "\x65",
      0x000000c2 => "\x62",
      0x000000c3 => "\x66",
      0x000000c4 => "\x63",
      0x000000c5 => "\x67",
      0x000000c6 => "\x9e",
      0x000000c7 => "\x68",
      0x000000c8 => "\x74",
      0x000000c9 => "\x71",
      0x000000ca => "\x72",
      0x000000cb => "\x73",
      0x000000cc => "\x78",
      0x000000cd => "\x75",
      0x000000ce => "\x76",
      0x000000cf => "\x77",
      0x000000d0 => "\xac",
      0x000000d1 => "\x7b",
      0x000000d2 => "\xed",
      0x000000d3 => "\xee",
      0x000000d4 => "\xeb",
      0x000000d5 => "\xef",
      0x000000d6 => "\xec",
      0x000000d7 => "\xbf",
      0x000000d8 => "\x80",
      0x000000d9 => "\xfd",
      0x000000da => "\xfe",
      0x000000db => "\xfb",
      0x000000dc => "\xfc",
      0x000000dd => "\xad",
      0x000000de => "\xae",
      0x000000df => "\x59",
      0x000000e0 => "\x44",
      0x000000e1 => "\x45",
      0x000000e2 => "\x42",
      0x000000e3 => "\x46",
      0x000000e4 => "\x43",
      0x000000e5 => "\x47",
      0x000000e6 => "\x9c",
      0x000000e7 => "\x48",
      0x000000e8 => "\x54",
      0x000000e9 => "\x51",
      0x000000ea => "\x52",
      0x000000eb => "\x53",
      0x000000ec => "\x58",
      0x000000ed => "\x55",
      0x000000ee => "\x56",
      0x000000ef => "\x57",
      0x000000f0 => "\x8c",
      0x000000f1 => "\x6a",
      0x000000f2 => "\xcd",
      0x000000f3 => "\xce",
      0x000000f4 => "\xcb",
      0x000000f5 => "\xcf",
      0x000000f6 => "\xcc",
      0x000000f7 => "\xe1",
      0x000000f8 => "\x70",
      0x000000f9 => "\xdd",
      0x000000fa => "\xde",
      0x000000fb => "\xdb",
      0x000000fc => "\xdc",
      0x000000fd => "\x8d",
      0x000000fe => "\x8e",
      0x000000ff => "\xdf",
      0x0000203e => "\xbc",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM284 - Conversion routines for IBM284
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM284.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP284
   alias EBCDIC-CP-ES
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000000A0 | NO-BREAK SPACE
      42 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      43 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      44 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      45 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      46 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      47 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      48 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      49 |  000000A6 | BROKEN BAR
      4A |  0000005B | LEFT SQUARE BRACKET
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  0000007C | VERTICAL LINE
      50 |  00000026 | AMPERSAND
      51 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      52 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      53 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      54 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      55 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      56 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      57 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      58 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      59 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      5A |  0000005D | RIGHT SQUARE BRACKET
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  000000AC | NOT SIGN
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      63 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      64 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      65 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      66 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      67 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      68 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      69 |  00000023 | NUMBER SIGN
      6A |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      71 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      72 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      73 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      74 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      75 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      76 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      77 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      78 |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      8B |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      8C |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      8D |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      8E |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      8F |  000000B1 | PLUS-MINUS SIGN
      90 |  000000B0 | DEGREE SIGN
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  000000AA | FEMININE ORDINAL INDICATOR
      9B |  000000BA | MASCULINE ORDINAL INDICATOR
      9C |  000000E6 | LATIN SMALL LETTER AE
      9D |  000000B8 | CEDILLA
      9E |  000000C6 | LATIN CAPITAL LETTER AE
      9F |  000000A4 | CURRENCY SIGN
      A0 |  000000B5 | MICRO SIGN
      A1 |  000000A8 | DIAERESIS
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  000000A1 | INVERTED EXCLAMATION MARK
      AB |  000000BF | INVERTED QUESTION MARK
      AC |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      AD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      AE |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      AF |  000000AE | REGISTERED SIGN
      B0 |  000000A2 | CENT SIGN
      B1 |  000000A3 | POUND SIGN
      B2 |  000000A5 | YEN SIGN
      B3 |  000000B7 | MIDDLE DOT
      B4 |  000000A9 | COPYRIGHT SIGN
      B5 |  000000A7 | SECTION SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000BC | VULGAR FRACTION ONE QUARTER
      B8 |  000000BD | VULGAR FRACTION ONE HALF
      B9 |  000000BE | VULGAR FRACTION THREE QUARTERS
      BA |  0000005E | CIRCUMFLEX ACCENT
      BB |  00000021 | EXCLAMATION MARK
      BC |  0000203E | OVERLINE
      BD |  0000007E | TILDE
      BE |  000000B4 | ACUTE ACCENT
      BF |  000000D7 | MULTIPLICATION SIGN
      C0 |  0000007B | LEFT CURLY BRACKET
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      CC |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      CD |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      CE |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      CF |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      D0 |  0000007D | RIGHT CURLY BRACKET
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  000000B9 | SUPERSCRIPT ONE
      DB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      DC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      DD |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      DE |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      DF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      E0 |  0000005C | REVERSE SOLIDUS
      E1 |  000000F7 | DIVISION SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000B2 | SUPERSCRIPT TWO
      EB |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      EC |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      ED |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000B3 | SUPERSCRIPT THREE
      FB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      FC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      FD |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      FE |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM284

    $main::fatpacked{"Locale/RecodeData/IBM285.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM285';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM285.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM285;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x00a0,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e1,
      0x00e3,
      0x00e5,
      0x00e7,
      0x00f1,
      0x0024,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x007c,
      0x0026,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00ec,
      0x00df,
      0x0021,
      0x00a3,
      0x002a,
      0x0029,
      0x003b,
      0x00ac,
      0x002d,
      0x002f,
      0x00c2,
      0x00c4,
      0x00c0,
      0x00c1,
      0x00c3,
      0x00c5,
      0x00c7,
      0x00d1,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x00f8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x0060,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0x00d8,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x00ab,
      0x00bb,
      0x00f0,
      0x00fd,
      0x00fe,
      0x00b1,
      0x00b0,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x00aa,
      0x00ba,
      0x00e6,
      0x00b8,
      0x00c6,
      0x00a4,
      0x00b5,
      0x203e,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x00a1,
      0x00bf,
      0x00d0,
      0x00dd,
      0x00de,
      0x00ae,
      0x00a2,
      0x005b,
      0x00a5,
      0x00b7,
      0x00a9,
      0x00a7,
      0x00b6,
      0x00bc,
      0x00bd,
      0x00be,
      0x005e,
      0x005d,
      0x007e,
      0x00a8,
      0x00b4,
      0x00d7,
      0x007b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0x00f4,
      0x00f6,
      0x00f2,
      0x00f3,
      0x00f5,
      0x007d,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x00b9,
      0x00fb,
      0x00fc,
      0x00f9,
      0x00fa,
      0x00ff,
      0x005c,
      0x00f7,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00b2,
      0x00d4,
      0x00d6,
      0x00d2,
      0x00d3,
      0x00d5,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00b3,
      0x00db,
      0x00dc,
      0x00d9,
      0x00da,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xc2\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa3",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xb1",
      "\x24",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x7c",
      "\x26",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xac",
      "\xc3\x9f",
      "\x21",
      "\xc2\xa3",
      "\x2a",
      "\x29",
      "\x3b",
      "\xc2\xac",
      "\x2d",
      "\x2f",
      "\xc3\x82",
      "\xc3\x84",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x83",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x91",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xc3\xb8",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\x60",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xc3\x98",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xc2\xab",
      "\xc2\xbb",
      "\xc3\xb0",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc2\xb1",
      "\xc2\xb0",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc3\xa6",
      "\xc2\xb8",
      "\xc3\x86",
      "\xc2\xa4",
      "\xc2\xb5",
      "\xe2\x80\xbe",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc2\xa1",
      "\xc2\xbf",
      "\xc3\x90",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc2\xae",
      "\xc2\xa2",
      "\x5b",
      "\xc2\xa5",
      "\xc2\xb7",
      "\xc2\xa9",
      "\xc2\xa7",
      "\xc2\xb6",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\x5e",
      "\x5d",
      "\x7e",
      "\xc2\xa8",
      "\xc2\xb4",
      "\xc3\x97",
      "\x7b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb5",
      "\x7d",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc2\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbf",
      "\x5c",
      "\xc3\xb7",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xb2",
      "\xc3\x94",
      "\xc3\x96",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x95",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc2\xb3",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x5a",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x4a",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\xb1",
      0x0000005c => "\xe0",
      0x0000005d => "\xbb",
      0x0000005e => "\xba",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\xc0",
      0x0000007c => "\x4f",
      0x0000007d => "\xd0",
      0x0000007e => "\xbc",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x41",
      0x000000a1 => "\xaa",
      0x000000a2 => "\xb0",
      0x000000a3 => "\x5b",
      0x000000a4 => "\x9f",
      0x000000a5 => "\xb2",
      0x000000a6 => "\x6a",
      0x000000a7 => "\xb5",
      0x000000a8 => "\xbd",
      0x000000a9 => "\xb4",
      0x000000aa => "\x9a",
      0x000000ab => "\x8a",
      0x000000ac => "\x5f",
      0x000000ad => "\xca",
      0x000000ae => "\xaf",
      0x000000b0 => "\x90",
      0x000000b1 => "\x8f",
      0x000000b2 => "\xea",
      0x000000b3 => "\xfa",
      0x000000b4 => "\xbe",
      0x000000b5 => "\xa0",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb3",
      0x000000b8 => "\x9d",
      0x000000b9 => "\xda",
      0x000000ba => "\x9b",
      0x000000bb => "\x8b",
      0x000000bc => "\xb7",
      0x000000bd => "\xb8",
      0x000000be => "\xb9",
      0x000000bf => "\xab",
      0x000000c0 => "\x64",
      0x000000c1 => "\x65",
      0x000000c2 => "\x62",
      0x000000c3 => "\x66",
      0x000000c4 => "\x63",
      0x000000c5 => "\x67",
      0x000000c6 => "\x9e",
      0x000000c7 => "\x68",
      0x000000c8 => "\x74",
      0x000000c9 => "\x71",
      0x000000ca => "\x72",
      0x000000cb => "\x73",
      0x000000cc => "\x78",
      0x000000cd => "\x75",
      0x000000ce => "\x76",
      0x000000cf => "\x77",
      0x000000d0 => "\xac",
      0x000000d1 => "\x69",
      0x000000d2 => "\xed",
      0x000000d3 => "\xee",
      0x000000d4 => "\xeb",
      0x000000d5 => "\xef",
      0x000000d6 => "\xec",
      0x000000d7 => "\xbf",
      0x000000d8 => "\x80",
      0x000000d9 => "\xfd",
      0x000000da => "\xfe",
      0x000000db => "\xfb",
      0x000000dc => "\xfc",
      0x000000dd => "\xad",
      0x000000de => "\xae",
      0x000000df => "\x59",
      0x000000e0 => "\x44",
      0x000000e1 => "\x45",
      0x000000e2 => "\x42",
      0x000000e3 => "\x46",
      0x000000e4 => "\x43",
      0x000000e5 => "\x47",
      0x000000e6 => "\x9c",
      0x000000e7 => "\x48",
      0x000000e8 => "\x54",
      0x000000e9 => "\x51",
      0x000000ea => "\x52",
      0x000000eb => "\x53",
      0x000000ec => "\x58",
      0x000000ed => "\x55",
      0x000000ee => "\x56",
      0x000000ef => "\x57",
      0x000000f0 => "\x8c",
      0x000000f1 => "\x49",
      0x000000f2 => "\xcd",
      0x000000f3 => "\xce",
      0x000000f4 => "\xcb",
      0x000000f5 => "\xcf",
      0x000000f6 => "\xcc",
      0x000000f7 => "\xe1",
      0x000000f8 => "\x70",
      0x000000f9 => "\xdd",
      0x000000fa => "\xde",
      0x000000fb => "\xdb",
      0x000000fc => "\xdc",
      0x000000fd => "\x8d",
      0x000000fe => "\x8e",
      0x000000ff => "\xdf",
      0x0000203e => "\xa1",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM285 - Conversion routines for IBM285
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM285.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP285
   alias EBCDIC-CP-GB
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000000A0 | NO-BREAK SPACE
      42 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      43 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      44 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      45 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      46 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      47 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      48 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      49 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      4A |  00000024 | DOLLAR SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  0000007C | VERTICAL LINE
      50 |  00000026 | AMPERSAND
      51 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      52 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      53 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      54 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      55 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      56 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      57 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      58 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      59 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      5A |  00000021 | EXCLAMATION MARK
      5B |  000000A3 | POUND SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  000000AC | NOT SIGN
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      63 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      64 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      65 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      66 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      67 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      68 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      69 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      71 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      72 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      73 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      74 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      75 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      76 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      77 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      78 |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      8B |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      8C |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      8D |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      8E |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      8F |  000000B1 | PLUS-MINUS SIGN
      90 |  000000B0 | DEGREE SIGN
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  000000AA | FEMININE ORDINAL INDICATOR
      9B |  000000BA | MASCULINE ORDINAL INDICATOR
      9C |  000000E6 | LATIN SMALL LETTER AE
      9D |  000000B8 | CEDILLA
      9E |  000000C6 | LATIN CAPITAL LETTER AE
      9F |  000000A4 | CURRENCY SIGN
      A0 |  000000B5 | MICRO SIGN
      A1 |  0000203E | OVERLINE
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  000000A1 | INVERTED EXCLAMATION MARK
      AB |  000000BF | INVERTED QUESTION MARK
      AC |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      AD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      AE |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      AF |  000000AE | REGISTERED SIGN
      B0 |  000000A2 | CENT SIGN
      B1 |  0000005B | LEFT SQUARE BRACKET
      B2 |  000000A5 | YEN SIGN
      B3 |  000000B7 | MIDDLE DOT
      B4 |  000000A9 | COPYRIGHT SIGN
      B5 |  000000A7 | SECTION SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000BC | VULGAR FRACTION ONE QUARTER
      B8 |  000000BD | VULGAR FRACTION ONE HALF
      B9 |  000000BE | VULGAR FRACTION THREE QUARTERS
      BA |  0000005E | CIRCUMFLEX ACCENT
      BB |  0000005D | RIGHT SQUARE BRACKET
      BC |  0000007E | TILDE
      BD |  000000A8 | DIAERESIS
      BE |  000000B4 | ACUTE ACCENT
      BF |  000000D7 | MULTIPLICATION SIGN
      C0 |  0000007B | LEFT CURLY BRACKET
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      CC |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      CD |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      CE |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      CF |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      D0 |  0000007D | RIGHT CURLY BRACKET
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  000000B9 | SUPERSCRIPT ONE
      DB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      DC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      DD |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      DE |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      DF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      E0 |  0000005C | REVERSE SOLIDUS
      E1 |  000000F7 | DIVISION SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000B2 | SUPERSCRIPT TWO
      EB |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      EC |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      ED |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000B3 | SUPERSCRIPT THREE
      FB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      FC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      FD |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      FE |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM285

    $main::fatpacked{"Locale/RecodeData/IBM290.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM290';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM290.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM290;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x3002,
      0x300c,
      0x300d,
      0x3001,
      0x30fb,
      0x30f2,
      0x30a1,
      0x30a3,
      0x30a5,
      0x00a3,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x007c,
      0x0026,
      0x30a7,
      0x30a9,
      0x30e3,
      0x30e5,
      0x30e7,
      0x30c3,
      0xfffd,
      0x30fc,
      0xfffd,
      0x0021,
      0x00a5,
      0x002a,
      0x0029,
      0x003b,
      0x00ac,
      0x002d,
      0x002f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0060,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x30a2,
      0x30a4,
      0x30a6,
      0x30a8,
      0x30aa,
      0x30ab,
      0x30ad,
      0x30af,
      0x30b1,
      0x30b3,
      0xfffd,
      0x30b5,
      0x30b7,
      0x30b9,
      0x30bb,
      0x30bd,
      0x30bf,
      0x30c1,
      0x30c4,
      0x30c6,
      0x30c8,
      0x30ca,
      0x30cb,
      0x30cc,
      0x30cd,
      0x30ce,
      0xfffd,
      0xfffd,
      0x30cf,
      0x30d2,
      0x30d5,
      0xfffd,
      0x203e,
      0x30d8,
      0x30db,
      0x30de,
      0x30df,
      0x30e0,
      0x30e1,
      0x30e2,
      0x30e4,
      0x30e6,
      0xfffd,
      0x30e8,
      0x30e9,
      0x30ea,
      0x30eb,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x30ec,
      0x30ed,
      0x30ef,
      0x30f3,
      0x309b,
      0x309c,
      0xfffd,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0024,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xe3\x80\x82",
      "\xe3\x80\x8c",
      "\xe3\x80\x8d",
      "\xe3\x80\x81",
      "\xe3\x83\xbb",
      "\xe3\x83\xb2",
      "\xe3\x82\xa1",
      "\xe3\x82\xa3",
      "\xe3\x82\xa5",
      "\xc2\xa3",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x7c",
      "\x26",
      "\xe3\x82\xa7",
      "\xe3\x82\xa9",
      "\xe3\x83\xa3",
      "\xe3\x83\xa5",
      "\xe3\x83\xa7",
      "\xe3\x83\x83",
      "\xef\xbf\xbd",
      "\xe3\x83\xbc",
      "\xef\xbf\xbd",
      "\x21",
      "\xc2\xa5",
      "\x2a",
      "\x29",
      "\x3b",
      "\xc2\xac",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x60",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\xe3\x82\xa2",
      "\xe3\x82\xa4",
      "\xe3\x82\xa6",
      "\xe3\x82\xa8",
      "\xe3\x82\xaa",
      "\xe3\x82\xab",
      "\xe3\x82\xad",
      "\xe3\x82\xaf",
      "\xe3\x82\xb1",
      "\xe3\x82\xb3",
      "\xef\xbf\xbd",
      "\xe3\x82\xb5",
      "\xe3\x82\xb7",
      "\xe3\x82\xb9",
      "\xe3\x82\xbb",
      "\xe3\x82\xbd",
      "\xe3\x82\xbf",
      "\xe3\x83\x81",
      "\xe3\x83\x84",
      "\xe3\x83\x86",
      "\xe3\x83\x88",
      "\xe3\x83\x8a",
      "\xe3\x83\x8b",
      "\xe3\x83\x8c",
      "\xe3\x83\x8d",
      "\xe3\x83\x8e",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe3\x83\x8f",
      "\xe3\x83\x92",
      "\xe3\x83\x95",
      "\xef\xbf\xbd",
      "\xe2\x80\xbe",
      "\xe3\x83\x98",
      "\xe3\x83\x9b",
      "\xe3\x83\x9e",
      "\xe3\x83\x9f",
      "\xe3\x83\xa0",
      "\xe3\x83\xa1",
      "\xe3\x83\xa2",
      "\xe3\x83\xa4",
      "\xe3\x83\xa6",
      "\xef\xbf\xbd",
      "\xe3\x83\xa8",
      "\xe3\x83\xa9",
      "\xe3\x83\xaa",
      "\xe3\x83\xab",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe3\x83\xac",
      "\xe3\x83\xad",
      "\xe3\x83\xaf",
      "\xe3\x83\xb3",
      "\xe3\x82\x9b",
      "\xe3\x82\x9c",
      "\xef\xbf\xbd",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x24",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x5a",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\xe0",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x0000007c => "\x4f",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a3 => "\x4a",
      0x000000a5 => "\x5b",
      0x000000a6 => "\x6a",
      0x000000ac => "\x5f",
      0x0000203e => "\xa1",
      0x00003001 => "\x44",
      0x00003002 => "\x41",
      0x0000300c => "\x42",
      0x0000300d => "\x43",
      0x0000309b => "\xbe",
      0x0000309c => "\xbf",
      0x000030a1 => "\x47",
      0x000030a2 => "\x81",
      0x000030a3 => "\x48",
      0x000030a4 => "\x82",
      0x000030a5 => "\x49",
      0x000030a6 => "\x83",
      0x000030a7 => "\x51",
      0x000030a8 => "\x84",
      0x000030a9 => "\x52",
      0x000030aa => "\x85",
      0x000030ab => "\x86",
      0x000030ad => "\x87",
      0x000030af => "\x88",
      0x000030b1 => "\x89",
      0x000030b3 => "\x8a",
      0x000030b5 => "\x8c",
      0x000030b7 => "\x8d",
      0x000030b9 => "\x8e",
      0x000030bb => "\x8f",
      0x000030bd => "\x90",
      0x000030bf => "\x91",
      0x000030c1 => "\x92",
      0x000030c3 => "\x56",
      0x000030c4 => "\x93",
      0x000030c6 => "\x94",
      0x000030c8 => "\x95",
      0x000030ca => "\x96",
      0x000030cb => "\x97",
      0x000030cc => "\x98",
      0x000030cd => "\x99",
      0x000030ce => "\x9a",
      0x000030cf => "\x9d",
      0x000030d2 => "\x9e",
      0x000030d5 => "\x9f",
      0x000030d8 => "\xa2",
      0x000030db => "\xa3",
      0x000030de => "\xa4",
      0x000030df => "\xa5",
      0x000030e0 => "\xa6",
      0x000030e1 => "\xa7",
      0x000030e2 => "\xa8",
      0x000030e3 => "\x53",
      0x000030e4 => "\xa9",
      0x000030e5 => "\x54",
      0x000030e6 => "\xaa",
      0x000030e7 => "\x55",
      0x000030e8 => "\xac",
      0x000030e9 => "\xad",
      0x000030ea => "\xae",
      0x000030eb => "\xaf",
      0x000030ec => "\xba",
      0x000030ed => "\xbb",
      0x000030ef => "\xbc",
      0x000030f2 => "\x46",
      0x000030f3 => "\xbd",
      0x000030fb => "\x45",
      0x000030fc => "\x58",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM290 - Conversion routines for IBM290
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM290.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3174 Character Set Ref, GA27-3831-02, March 1990
   alias CP290
   alias EBCDIC-JP-KANA
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  00003002 | IDEOGRAPHIC FULL STOP
      42 |  0000300C | LEFT CORNER BRACKET
      43 |  0000300D | RIGHT CORNER BRACKET
      44 |  00003001 | IDEOGRAPHIC COMMA
      45 |  000030FB | KATAKANA MIDDLE DOT
      46 |  000030F2 | KATAKANA LETTER WO
      47 |  000030A1 | KATAKANA LETTER SMALL A
      48 |  000030A3 | KATAKANA LETTER SMALL I
      49 |  000030A5 | KATAKANA LETTER SMALL U
      4A |  000000A3 | POUND SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  0000007C | VERTICAL LINE
      50 |  00000026 | AMPERSAND
      51 |  000030A7 | KATAKANA LETTER SMALL E
      52 |  000030A9 | KATAKANA LETTER SMALL O
      53 |  000030E3 | KATAKANA LETTER SMALL YA
      54 |  000030E5 | KATAKANA LETTER SMALL YU
      55 |  000030E7 | KATAKANA LETTER SMALL YO
      56 |  000030C3 | KATAKANA LETTER SMALL TU
      58 |  000030FC | KATAKANA-HIRAGANA PROLONGED SOUND MARK
      5A |  00000021 | EXCLAMATION MARK
      5B |  000000A5 | YEN SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  000000AC | NOT SIGN
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  000030A2 | KATAKANA LETTER A
      82 |  000030A4 | KATAKANA LETTER I
      83 |  000030A6 | KATAKANA LETTER U
      84 |  000030A8 | KATAKANA LETTER E
      85 |  000030AA | KATAKANA LETTER O
      86 |  000030AB | KATAKANA LETTER KA
      87 |  000030AD | KATAKANA LETTER KI
      88 |  000030AF | KATAKANA LETTER KU
      89 |  000030B1 | KATAKANA LETTER KE
      8A |  000030B3 | KATAKANA LETTER KO
      8C |  000030B5 | KATAKANA LETTER SA
      8D |  000030B7 | KATAKANA LETTER SI
      8E |  000030B9 | KATAKANA LETTER SU
      8F |  000030BB | KATAKANA LETTER SE
      90 |  000030BD | KATAKANA LETTER SO
      91 |  000030BF | KATAKANA LETTER TA
      92 |  000030C1 | KATAKANA LETTER TI
      93 |  000030C4 | KATAKANA LETTER TU
      94 |  000030C6 | KATAKANA LETTER TE
      95 |  000030C8 | KATAKANA LETTER TO
      96 |  000030CA | KATAKANA LETTER NA
      97 |  000030CB | KATAKANA LETTER NI
      98 |  000030CC | KATAKANA LETTER NU
      99 |  000030CD | KATAKANA LETTER NE
      9A |  000030CE | KATAKANA LETTER NO
      9D |  000030CF | KATAKANA LETTER HA
      9E |  000030D2 | KATAKANA LETTER HI
      9F |  000030D5 | KATAKANA LETTER HU
      A1 |  0000203E | OVERLINE
      A2 |  000030D8 | KATAKANA LETTER HE
      A3 |  000030DB | KATAKANA LETTER HO
      A4 |  000030DE | KATAKANA LETTER MA
      A5 |  000030DF | KATAKANA LETTER MI
      A6 |  000030E0 | KATAKANA LETTER MU
      A7 |  000030E1 | KATAKANA LETTER ME
      A8 |  000030E2 | KATAKANA LETTER MO
      A9 |  000030E4 | KATAKANA LETTER YA
      AA |  000030E6 | KATAKANA LETTER YU
      AC |  000030E8 | KATAKANA LETTER YO
      AD |  000030E9 | KATAKANA LETTER RA
      AE |  000030EA | KATAKANA LETTER RI
      AF |  000030EB | KATAKANA LETTER RU
      BA |  000030EC | KATAKANA LETTER RE
      BB |  000030ED | KATAKANA LETTER RO
      BC |  000030EF | KATAKANA LETTER WA
      BD |  000030F3 | KATAKANA LETTER N
      BE |  0000309B | KATAKANA-HIRAGANA VOICED SOUND MARK
      BF |  0000309C | KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      E0 |  00000024 | DOLLAR SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM290

    $main::fatpacked{"Locale/RecodeData/IBM297.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM297';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM297.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM297;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x00a0,
      0x00e2,
      0x00e4,
      0x0040,
      0x00e1,
      0x00e3,
      0x00e5,
      0x005c,
      0x00f1,
      0x00b0,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0x007b,
      0x00ea,
      0x00eb,
      0x007d,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00ec,
      0x00df,
      0x00a7,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0x00c2,
      0x00c4,
      0x00c0,
      0x00c1,
      0x00c3,
      0x00c5,
      0x00c7,
      0x00d1,
      0x00f9,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x00f8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x00b5,
      0x003a,
      0x00a3,
      0x00e0,
      0x0027,
      0x003d,
      0x0022,
      0x00d8,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x00ab,
      0x00bb,
      0x00f0,
      0x00fd,
      0x00fe,
      0x00b1,
      0x005b,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x00aa,
      0x00ba,
      0x00e6,
      0x00b8,
      0x00c6,
      0x00a4,
      0x0060,
      0x00a8,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x00a1,
      0x00bf,
      0x00d0,
      0x00dd,
      0x00de,
      0x00ae,
      0x00a2,
      0x0023,
      0x00a5,
      0x00b7,
      0x00a9,
      0x005d,
      0x00b6,
      0x00bc,
      0x00bd,
      0x00be,
      0x00ac,
      0x007c,
      0x203e,
      0x007e,
      0x00b4,
      0x00d7,
      0x00e9,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0x00f4,
      0x00f6,
      0x00f2,
      0x00f3,
      0x00f5,
      0x00e8,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x00b9,
      0x00fb,
      0x00fc,
      0x00a6,
      0x00fa,
      0x00ff,
      0x00e7,
      0x00f7,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00b2,
      0x00d4,
      0x00d6,
      0x00d2,
      0x00d3,
      0x00d5,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00b3,
      0x00db,
      0x00dc,
      0x00d9,
      0x00da,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xc2\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\x40",
      "\xc3\xa1",
      "\xc3\xa3",
      "\xc3\xa5",
      "\x5c",
      "\xc3\xb1",
      "\xc2\xb0",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\x7b",
      "\xc3\xaa",
      "\xc3\xab",
      "\x7d",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xac",
      "\xc3\x9f",
      "\xc2\xa7",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xc3\x82",
      "\xc3\x84",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x83",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x91",
      "\xc3\xb9",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xc3\xb8",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\xc2\xb5",
      "\x3a",
      "\xc2\xa3",
      "\xc3\xa0",
      "\x27",
      "\x3d",
      "\x22",
      "\xc3\x98",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xc2\xab",
      "\xc2\xbb",
      "\xc3\xb0",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc2\xb1",
      "\x5b",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc3\xa6",
      "\xc2\xb8",
      "\xc3\x86",
      "\xc2\xa4",
      "\x60",
      "\xc2\xa8",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc2\xa1",
      "\xc2\xbf",
      "\xc3\x90",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc2\xae",
      "\xc2\xa2",
      "\x23",
      "\xc2\xa5",
      "\xc2\xb7",
      "\xc2\xa9",
      "\x5d",
      "\xc2\xb6",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc2\xac",
      "\x7c",
      "\xe2\x80\xbe",
      "\x7e",
      "\xc2\xb4",
      "\xc3\x97",
      "\xc3\xa9",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb5",
      "\xc3\xa8",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc2\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc2\xa6",
      "\xc3\xba",
      "\xc3\xbf",
      "\xc3\xa7",
      "\xc3\xb7",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xb2",
      "\xc3\x94",
      "\xc3\x96",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x95",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc2\xb3",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\xb1",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x44",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x90",
      0x0000005c => "\x48",
      0x0000005d => "\xb5",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\xa0",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\x51",
      0x0000007c => "\xbb",
      0x0000007d => "\x54",
      0x0000007e => "\xbd",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x41",
      0x000000a1 => "\xaa",
      0x000000a2 => "\xb0",
      0x000000a3 => "\x7b",
      0x000000a4 => "\x9f",
      0x000000a5 => "\xb2",
      0x000000a6 => "\xdd",
      0x000000a7 => "\x5a",
      0x000000a8 => "\xa1",
      0x000000a9 => "\xb4",
      0x000000aa => "\x9a",
      0x000000ab => "\x8a",
      0x000000ac => "\xba",
      0x000000ad => "\xca",
      0x000000ae => "\xaf",
      0x000000b0 => "\x4a",
      0x000000b1 => "\x8f",
      0x000000b2 => "\xea",
      0x000000b3 => "\xfa",
      0x000000b4 => "\xbe",
      0x000000b5 => "\x79",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb3",
      0x000000b8 => "\x9d",
      0x000000b9 => "\xda",
      0x000000ba => "\x9b",
      0x000000bb => "\x8b",
      0x000000bc => "\xb7",
      0x000000bd => "\xb8",
      0x000000be => "\xb9",
      0x000000bf => "\xab",
      0x000000c0 => "\x64",
      0x000000c1 => "\x65",
      0x000000c2 => "\x62",
      0x000000c3 => "\x66",
      0x000000c4 => "\x63",
      0x000000c5 => "\x67",
      0x000000c6 => "\x9e",
      0x000000c7 => "\x68",
      0x000000c8 => "\x74",
      0x000000c9 => "\x71",
      0x000000ca => "\x72",
      0x000000cb => "\x73",
      0x000000cc => "\x78",
      0x000000cd => "\x75",
      0x000000ce => "\x76",
      0x000000cf => "\x77",
      0x000000d0 => "\xac",
      0x000000d1 => "\x69",
      0x000000d2 => "\xed",
      0x000000d3 => "\xee",
      0x000000d4 => "\xeb",
      0x000000d5 => "\xef",
      0x000000d6 => "\xec",
      0x000000d7 => "\xbf",
      0x000000d8 => "\x80",
      0x000000d9 => "\xfd",
      0x000000da => "\xfe",
      0x000000db => "\xfb",
      0x000000dc => "\xfc",
      0x000000dd => "\xad",
      0x000000de => "\xae",
      0x000000df => "\x59",
      0x000000e0 => "\x7c",
      0x000000e1 => "\x45",
      0x000000e2 => "\x42",
      0x000000e3 => "\x46",
      0x000000e4 => "\x43",
      0x000000e5 => "\x47",
      0x000000e6 => "\x9c",
      0x000000e7 => "\xe0",
      0x000000e8 => "\xd0",
      0x000000e9 => "\xc0",
      0x000000ea => "\x52",
      0x000000eb => "\x53",
      0x000000ec => "\x58",
      0x000000ed => "\x55",
      0x000000ee => "\x56",
      0x000000ef => "\x57",
      0x000000f0 => "\x8c",
      0x000000f1 => "\x49",
      0x000000f2 => "\xcd",
      0x000000f3 => "\xce",
      0x000000f4 => "\xcb",
      0x000000f5 => "\xcf",
      0x000000f6 => "\xcc",
      0x000000f7 => "\xe1",
      0x000000f8 => "\x70",
      0x000000f9 => "\x6a",
      0x000000fa => "\xde",
      0x000000fb => "\xdb",
      0x000000fc => "\xdc",
      0x000000fd => "\x8d",
      0x000000fe => "\x8e",
      0x000000ff => "\xdf",
      0x0000203e => "\xbc",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM297 - Conversion routines for IBM297
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM297.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP297
   alias EBCDIC-CP-FR
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000000A0 | NO-BREAK SPACE
      42 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      43 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      44 |  00000040 | COMMERCIAL AT
      45 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      46 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      47 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      48 |  0000005C | REVERSE SOLIDUS
      49 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      4A |  000000B0 | DEGREE SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      51 |  0000007B | LEFT CURLY BRACKET
      52 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      53 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      54 |  0000007D | RIGHT CURLY BRACKET
      55 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      56 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      57 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      58 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      59 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      5A |  000000A7 | SECTION SIGN
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      63 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      64 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      65 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      66 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      67 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      68 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      69 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      6A |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      71 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      72 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      73 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      74 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      75 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      76 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      77 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      78 |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      79 |  000000B5 | MICRO SIGN
      7A |  0000003A | COLON
      7B |  000000A3 | POUND SIGN
      7C |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      8B |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      8C |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      8D |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      8E |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      8F |  000000B1 | PLUS-MINUS SIGN
      90 |  0000005B | LEFT SQUARE BRACKET
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  000000AA | FEMININE ORDINAL INDICATOR
      9B |  000000BA | MASCULINE ORDINAL INDICATOR
      9C |  000000E6 | LATIN SMALL LETTER AE
      9D |  000000B8 | CEDILLA
      9E |  000000C6 | LATIN CAPITAL LETTER AE
      9F |  000000A4 | CURRENCY SIGN
      A0 |  00000060 | GRAVE ACCENT
      A1 |  000000A8 | DIAERESIS
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  000000A1 | INVERTED EXCLAMATION MARK
      AB |  000000BF | INVERTED QUESTION MARK
      AC |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      AD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      AE |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      AF |  000000AE | REGISTERED SIGN
      B0 |  000000A2 | CENT SIGN
      B1 |  00000023 | NUMBER SIGN
      B2 |  000000A5 | YEN SIGN
      B3 |  000000B7 | MIDDLE DOT
      B4 |  000000A9 | COPYRIGHT SIGN
      B5 |  0000005D | RIGHT SQUARE BRACKET
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000BC | VULGAR FRACTION ONE QUARTER
      B8 |  000000BD | VULGAR FRACTION ONE HALF
      B9 |  000000BE | VULGAR FRACTION THREE QUARTERS
      BA |  000000AC | NOT SIGN
      BB |  0000007C | VERTICAL LINE
      BC |  0000203E | OVERLINE
      BD |  0000007E | TILDE
      BE |  000000B4 | ACUTE ACCENT
      BF |  000000D7 | MULTIPLICATION SIGN
      C0 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      CC |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      CD |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      CE |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      CF |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      D0 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  000000B9 | SUPERSCRIPT ONE
      DB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      DC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      DD |  000000A6 | BROKEN BAR
      DE |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      DF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      E0 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E1 |  000000F7 | DIVISION SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000B2 | SUPERSCRIPT TWO
      EB |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      EC |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      ED |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000B3 | SUPERSCRIPT THREE
      FB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      FC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      FD |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      FE |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM297

    $main::fatpacked{"Locale/RecodeData/IBM420.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM420';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM420.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM420;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x00a0,
      0x0651,
      0xfe7d,
      0x0640,
      0xfffd,
      0x0621,
      0x0622,
      0xfe82,
      0x0623,
      0x00a2,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x007c,
      0x0026,
      0xfe84,
      0x0624,
      0xfffd,
      0xfffd,
      0x0626,
      0x0627,
      0xfe8e,
      0x0628,
      0xfe91,
      0x0021,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x00ac,
      0x002d,
      0x002f,
      0x0629,
      0x062a,
      0xfe97,
      0x062b,
      0xfe9b,
      0x062c,
      0xfe9f,
      0x062d,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfea3,
      0x062e,
      0xfea7,
      0x062f,
      0x0630,
      0x0631,
      0x0632,
      0x0633,
      0xfeb3,
      0x060c,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0x0634,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0xfeb7,
      0x0635,
      0xfebb,
      0x0636,
      0xfebf,
      0x0637,
      0x0638,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0639,
      0xfeca,
      0xfecb,
      0xfecc,
      0x063a,
      0xfece,
      0xfecf,
      0x00f7,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfed0,
      0x0641,
      0xfed3,
      0x0642,
      0xfed7,
      0x0643,
      0xfedb,
      0x0644,
      0xfef5,
      0xfef6,
      0xfef7,
      0xfef8,
      0xfffd,
      0xfffd,
      0xfefb,
      0xfefc,
      0xfedf,
      0x0645,
      0xfee3,
      0x0646,
      0xfee7,
      0x0647,
      0x061b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0xfeeb,
      0xfffd,
      0xfeec,
      0xfffd,
      0x0648,
      0x061f,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0649,
      0xfef0,
      0x064a,
      0xfef2,
      0xfef3,
      0x0660,
      0x00d7,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x0661,
      0x0662,
      0xfffd,
      0x0663,
      0x0664,
      0x0665,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0x0666,
      0x0667,
      0x0668,
      0x0669,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xc2\xa0",
      "\xd9\x91",
      "\xef\xb9\xbd",
      "\xd9\x80",
      "\xef\xbf\xbd",
      "\xd8\xa1",
      "\xd8\xa2",
      "\xef\xba\x82",
      "\xd8\xa3",
      "\xc2\xa2",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x7c",
      "\x26",
      "\xef\xba\x84",
      "\xd8\xa4",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd8\xa6",
      "\xd8\xa7",
      "\xef\xba\x8e",
      "\xd8\xa8",
      "\xef\xba\x91",
      "\x21",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\xc2\xac",
      "\x2d",
      "\x2f",
      "\xd8\xa9",
      "\xd8\xaa",
      "\xef\xba\x97",
      "\xd8\xab",
      "\xef\xba\x9b",
      "\xd8\xac",
      "\xef\xba\x9f",
      "\xd8\xad",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xba\xa3",
      "\xd8\xae",
      "\xef\xba\xa7",
      "\xd8\xaf",
      "\xd8\xb0",
      "\xd8\xb1",
      "\xd8\xb2",
      "\xd8\xb3",
      "\xef\xba\xb3",
      "\xd8\x8c",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xd8\xb4",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xef\xba\xb7",
      "\xd8\xb5",
      "\xef\xba\xbb",
      "\xd8\xb6",
      "\xef\xba\xbf",
      "\xd8\xb7",
      "\xd8\xb8",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xd8\xb9",
      "\xef\xbb\x8a",
      "\xef\xbb\x8b",
      "\xef\xbb\x8c",
      "\xd8\xba",
      "\xef\xbb\x8e",
      "\xef\xbb\x8f",
      "\xc3\xb7",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbb\x90",
      "\xd9\x81",
      "\xef\xbb\x93",
      "\xd9\x82",
      "\xef\xbb\x97",
      "\xd9\x83",
      "\xef\xbb\x9b",
      "\xd9\x84",
      "\xef\xbb\xb5",
      "\xef\xbb\xb6",
      "\xef\xbb\xb7",
      "\xef\xbb\xb8",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbb\xbb",
      "\xef\xbb\xbc",
      "\xef\xbb\x9f",
      "\xd9\x85",
      "\xef\xbb\xa3",
      "\xd9\x86",
      "\xef\xbb\xa7",
      "\xd9\x87",
      "\xd8\x9b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xef\xbb\xab",
      "\xef\xbf\xbd",
      "\xef\xbb\xac",
      "\xef\xbf\xbd",
      "\xd9\x88",
      "\xd8\x9f",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xd9\x89",
      "\xef\xbb\xb0",
      "\xd9\x8a",
      "\xef\xbb\xb2",
      "\xef\xbb\xb3",
      "\xd9\xa0",
      "\xc3\x97",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xd9\xa1",
      "\xd9\xa2",
      "\xef\xbf\xbd",
      "\xd9\xa3",
      "\xd9\xa4",
      "\xd9\xa5",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xd9\xa6",
      "\xd9\xa7",
      "\xd9\xa8",
      "\xd9\xa9",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x5a",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005f => "\x6d",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007c => "\x4f",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x41",
      0x000000a2 => "\x4a",
      0x000000a6 => "\x6a",
      0x000000ac => "\x5f",
      0x000000ad => "\xca",
      0x000000d7 => "\xe0",
      0x000000f7 => "\xa1",
      0x0000060c => "\x79",
      0x0000061b => "\xc0",
      0x0000061f => "\xd0",
      0x00000621 => "\x46",
      0x00000622 => "\x47",
      0x00000623 => "\x49",
      0x00000624 => "\x52",
      0x00000626 => "\x55",
      0x00000627 => "\x56",
      0x00000628 => "\x58",
      0x00000629 => "\x62",
      0x0000062a => "\x63",
      0x0000062b => "\x65",
      0x0000062c => "\x67",
      0x0000062d => "\x69",
      0x0000062e => "\x71",
      0x0000062f => "\x73",
      0x00000630 => "\x74",
      0x00000631 => "\x75",
      0x00000632 => "\x76",
      0x00000633 => "\x77",
      0x00000634 => "\x80",
      0x00000635 => "\x8b",
      0x00000636 => "\x8d",
      0x00000637 => "\x8f",
      0x00000638 => "\x90",
      0x00000639 => "\x9a",
      0x0000063a => "\x9e",
      0x00000640 => "\x44",
      0x00000641 => "\xab",
      0x00000642 => "\xad",
      0x00000643 => "\xaf",
      0x00000644 => "\xb1",
      0x00000645 => "\xbb",
      0x00000646 => "\xbd",
      0x00000647 => "\xbf",
      0x00000648 => "\xcf",
      0x00000649 => "\xda",
      0x0000064a => "\xdc",
      0x00000651 => "\x42",
      0x00000660 => "\xdf",
      0x00000661 => "\xea",
      0x00000662 => "\xeb",
      0x00000663 => "\xed",
      0x00000664 => "\xee",
      0x00000665 => "\xef",
      0x00000666 => "\xfb",
      0x00000667 => "\xfc",
      0x00000668 => "\xfd",
      0x00000669 => "\xfe",
      0x0000fe7d => "\x43",
      0x0000fe82 => "\x48",
      0x0000fe84 => "\x51",
      0x0000fe8e => "\x57",
      0x0000fe91 => "\x59",
      0x0000fe97 => "\x64",
      0x0000fe9b => "\x66",
      0x0000fe9f => "\x68",
      0x0000fea3 => "\x70",
      0x0000fea7 => "\x72",
      0x0000feb3 => "\x78",
      0x0000feb7 => "\x8a",
      0x0000febb => "\x8c",
      0x0000febf => "\x8e",
      0x0000feca => "\x9b",
      0x0000fecb => "\x9c",
      0x0000fecc => "\x9d",
      0x0000fece => "\x9f",
      0x0000fecf => "\xa0",
      0x0000fed0 => "\xaa",
      0x0000fed3 => "\xac",
      0x0000fed7 => "\xae",
      0x0000fedb => "\xb0",
      0x0000fedf => "\xba",
      0x0000fee3 => "\xbc",
      0x0000fee7 => "\xbe",
      0x0000feeb => "\xcb",
      0x0000feec => "\xcd",
      0x0000fef0 => "\xdb",
      0x0000fef2 => "\xdd",
      0x0000fef3 => "\xde",
      0x0000fef5 => "\xb2",
      0x0000fef6 => "\xb3",
      0x0000fef7 => "\xb4",
      0x0000fef8 => "\xb5",
      0x0000fefb => "\xb8",
      0x0000fefc => "\xb9",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\xd0"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM420 - Conversion routines for IBM420
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM420.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
    IBM NLS RM p 11-11
   alias CP420
   alias EBCDIC-CP-AR1
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000000A0 | NO-BREAK SPACE
      42 |  00000651 | ARABIC SHADDA
      43 |  0000FE7D | ARABIC SHADDA MEDIAL FORM
      44 |  00000640 | ARABIC TATWEEL
      46 |  00000621 | ARABIC LETTER HAMZA
      47 |  00000622 | ARABIC LETTER ALEF WITH MADDA ABOVE
      48 |  0000FE82 | ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
      49 |  00000623 | ARABIC LETTER ALEF WITH HAMZA ABOVE
      4A |  000000A2 | CENT SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  0000007C | VERTICAL LINE
      50 |  00000026 | AMPERSAND
      51 |  0000FE84 | ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
      52 |  00000624 | ARABIC LETTER WAW WITH HAMZA ABOVE
      55 |  00000626 | ARABIC LETTER YEH WITH HAMZA ABOVE
      56 |  00000627 | ARABIC LETTER ALEF
      57 |  0000FE8E | ARABIC LETTER ALEF FINAL FORM
      58 |  00000628 | ARABIC LETTER BEH
      59 |  0000FE91 | ARABIC LETTER BEH INITIAL FORM
      5A |  00000021 | EXCLAMATION MARK
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  000000AC | NOT SIGN
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  00000629 | ARABIC LETTER TEH MARBUTA
      63 |  0000062A | ARABIC LETTER TEH
      64 |  0000FE97 | ARABIC LETTER TEH INITIAL FORM
      65 |  0000062B | ARABIC LETTER THEH
      66 |  0000FE9B | ARABIC LETTER THEH INITIAL FORM
      67 |  0000062C | ARABIC LETTER JEEM
      68 |  0000FE9F | ARABIC LETTER JEEM INITIAL FORM
      69 |  0000062D | ARABIC LETTER HAH
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  0000FEA3 | ARABIC LETTER HAH INITIAL FORM
      71 |  0000062E | ARABIC LETTER KHAH
      72 |  0000FEA7 | ARABIC LETTER KHAH INITIAL FORM
      73 |  0000062F | ARABIC LETTER DAL
      74 |  00000630 | ARABIC LETTER THAL
      75 |  00000631 | ARABIC LETTER REH
      76 |  00000632 | ARABIC LETTER ZAIN
      77 |  00000633 | ARABIC LETTER SEEN
      78 |  0000FEB3 | ARABIC LETTER SEEN INITIAL FORM
      79 |  0000060C | ARABIC COMMA
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  00000634 | ARABIC LETTER SHEEN
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  0000FEB7 | ARABIC LETTER SHEEN INITIAL FORM
      8B |  00000635 | ARABIC LETTER SAD
      8C |  0000FEBB | ARABIC LETTER SAD INITIAL FORM
      8D |  00000636 | ARABIC LETTER DAD
      8E |  0000FEBF | ARABIC LETTER DAD INITIAL FORM
      8F |  00000637 | ARABIC LETTER TAH
      90 |  00000638 | ARABIC LETTER ZAH
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  00000639 | ARABIC LETTER AIN
      9B |  0000FECA | ARABIC LETTER AIN FINAL FORM
      9C |  0000FECB | ARABIC LETTER AIN INITIAL FORM
      9D |  0000FECC | ARABIC LETTER AIN MEDIAL FORM
      9E |  0000063A | ARABIC LETTER GHAIN
      9F |  0000FECE | ARABIC LETTER GHAIN FINAL FORM
      A0 |  0000FECF | ARABIC LETTER GHAIN INITIAL FORM
      A1 |  000000F7 | DIVISION SIGN
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  0000FED0 | ARABIC LETTER GHAIN MEDIAL FORM
      AB |  00000641 | ARABIC LETTER FEH
      AC |  0000FED3 | ARABIC LETTER FEH INITIAL FORM
      AD |  00000642 | ARABIC LETTER QAF
      AE |  0000FED7 | ARABIC LETTER QAF INITIAL FORM
      AF |  00000643 | ARABIC LETTER KAF
      B0 |  0000FEDB | ARABIC LETTER KAF INITIAL FORM
      B1 |  00000644 | ARABIC LETTER LAM
      B2 |  0000FEF5 | ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
      B3 |  0000FEF6 | ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
      B4 |  0000FEF7 | ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
      B5 |  0000FEF8 | ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
      B8 |  0000FEFB | ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
      B9 |  0000FEFC | ARABIC LIGATURE LAM WITH ALEF FINAL FORM
      BA |  0000FEDF | ARABIC LETTER LAM INITIAL FORM
      BB |  00000645 | ARABIC LETTER MEEM
      BC |  0000FEE3 | ARABIC LETTER MEEM INITIAL FORM
      BD |  00000646 | ARABIC LETTER NOON
      BE |  0000FEE7 | ARABIC LETTER NOON INITIAL FORM
      BF |  00000647 | ARABIC LETTER HEH
      C0 |  0000061B | ARABIC SEMICOLON
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  0000FEEB | ARABIC LETTER HEH INITIAL FORM
      CD |  0000FEEC | ARABIC LETTER HEH MEDIAL FORM
      CF |  00000648 | ARABIC LETTER WAW
      D0 |  0000061F | ARABIC QUESTION MARK
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  00000649 | ARABIC LETTER ALEF MAKSURA
      DB |  0000FEF0 | ARABIC LETTER ALEF MAKSURA FINAL FORM
      DC |  0000064A | ARABIC LETTER YEH
      DD |  0000FEF2 | ARABIC LETTER YEH FINAL FORM
      DE |  0000FEF3 | ARABIC LETTER YEH INITIAL FORM
      DF |  00000660 | ARABIC-INDIC DIGIT ZERO
      E0 |  000000D7 | MULTIPLICATION SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  00000661 | ARABIC-INDIC DIGIT ONE
      EB |  00000662 | ARABIC-INDIC DIGIT TWO
      ED |  00000663 | ARABIC-INDIC DIGIT THREE
      EE |  00000664 | ARABIC-INDIC DIGIT FOUR
      EF |  00000665 | ARABIC-INDIC DIGIT FIVE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FB |  00000666 | ARABIC-INDIC DIGIT SIX
      FC |  00000667 | ARABIC-INDIC DIGIT SEVEN
      FD |  00000668 | ARABIC-INDIC DIGIT EIGHT
      FE |  00000669 | ARABIC-INDIC DIGIT NINE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM420

    $main::fatpacked{"Locale/RecodeData/IBM423.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM423';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM423.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM423;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x0391,
      0x0392,
      0x0393,
      0x0394,
      0x0395,
      0x0396,
      0x0397,
      0x0398,
      0x0399,
      0x005b,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0x039a,
      0x039b,
      0x039c,
      0x039d,
      0x039e,
      0x039f,
      0x03a0,
      0x03a1,
      0x03a3,
      0x005d,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0x03a4,
      0x03a5,
      0x03a6,
      0x03a7,
      0x03a8,
      0x03a9,
      0xfffd,
      0xfffd,
      0xfffd,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0x0386,
      0x0388,
      0x0389,
      0xfffd,
      0x038a,
      0x038c,
      0x038e,
      0x038f,
      0x0060,
      0x003a,
      0x00a3,
      0x00a7,
      0x0027,
      0x003d,
      0x0022,
      0x00c4,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x03b1,
      0x03b2,
      0x03b3,
      0x03b4,
      0x03b5,
      0x03b6,
      0x00d6,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x03b7,
      0x03b8,
      0x03b9,
      0x03ba,
      0x03bb,
      0x03bc,
      0x00dc,
      0x00a8,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x03bd,
      0x03be,
      0x03bf,
      0x03c0,
      0x03c1,
      0x03c2,
      0xfffd,
      0x03ac,
      0x03ad,
      0x03ae,
      0x03ca,
      0x03af,
      0x03cc,
      0x03cd,
      0x03cb,
      0x03ce,
      0x03c3,
      0x03c4,
      0x03c5,
      0x03c6,
      0x03c7,
      0x03c8,
      0x00b8,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0xfffd,
      0x03c9,
      0x00c2,
      0x00e0,
      0x00e4,
      0x00ea,
      0x00b4,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x00b1,
      0x00e9,
      0x00e8,
      0x00eb,
      0x00ee,
      0x00ef,
      0x00b0,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00bd,
      0x00f6,
      0x00f4,
      0x00fb,
      0x00f9,
      0x00fc,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00ff,
      0x00e7,
      0x00c7,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xce\x91",
      "\xce\x92",
      "\xce\x93",
      "\xce\x94",
      "\xce\x95",
      "\xce\x96",
      "\xce\x97",
      "\xce\x98",
      "\xce\x99",
      "\x5b",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xce\x9a",
      "\xce\x9b",
      "\xce\x9c",
      "\xce\x9d",
      "\xce\x9e",
      "\xce\x9f",
      "\xce\xa0",
      "\xce\xa1",
      "\xce\xa3",
      "\x5d",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xce\xa4",
      "\xce\xa5",
      "\xce\xa6",
      "\xce\xa7",
      "\xce\xa8",
      "\xce\xa9",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xce\x86",
      "\xce\x88",
      "\xce\x89",
      "\xef\xbf\xbd",
      "\xce\x8a",
      "\xce\x8c",
      "\xce\x8e",
      "\xce\x8f",
      "\x60",
      "\x3a",
      "\xc2\xa3",
      "\xc2\xa7",
      "\x27",
      "\x3d",
      "\x22",
      "\xc3\x84",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xce\xb1",
      "\xce\xb2",
      "\xce\xb3",
      "\xce\xb4",
      "\xce\xb5",
      "\xce\xb6",
      "\xc3\x96",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xce\xb7",
      "\xce\xb8",
      "\xce\xb9",
      "\xce\xba",
      "\xce\xbb",
      "\xce\xbc",
      "\xc3\x9c",
      "\xc2\xa8",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xce\xbd",
      "\xce\xbe",
      "\xce\xbf",
      "\xcf\x80",
      "\xcf\x81",
      "\xcf\x82",
      "\xef\xbf\xbd",
      "\xce\xac",
      "\xce\xad",
      "\xce\xae",
      "\xcf\x8a",
      "\xce\xaf",
      "\xcf\x8c",
      "\xcf\x8d",
      "\xcf\x8b",
      "\xcf\x8e",
      "\xcf\x83",
      "\xcf\x84",
      "\xcf\x85",
      "\xcf\x86",
      "\xcf\x87",
      "\xcf\x88",
      "\xc2\xb8",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xef\xbf\xbd",
      "\xcf\x89",
      "\xc3\x82",
      "\xc3\xa0",
      "\xc3\xa4",
      "\xc3\xaa",
      "\xc2\xb4",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc2\xb1",
      "\xc3\xa9",
      "\xc3\xa8",
      "\xc3\xab",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc2\xb0",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xbd",
      "\xc3\xb6",
      "\xc3\xb4",
      "\xc3\xbb",
      "\xc3\xb9",
      "\xc3\xbc",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc3\xbf",
      "\xc3\xa7",
      "\xc3\x87",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x4a",
      0x0000005d => "\x5a",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a3 => "\x7b",
      0x000000a7 => "\x7c",
      0x000000a8 => "\xa1",
      0x000000b0 => "\xe0",
      0x000000b1 => "\xda",
      0x000000b4 => "\xd0",
      0x000000b8 => "\xc0",
      0x000000bd => "\xea",
      0x000000c2 => "\xcc",
      0x000000c4 => "\x80",
      0x000000c7 => "\xfc",
      0x000000d6 => "\x90",
      0x000000dc => "\xa0",
      0x000000e0 => "\xcd",
      0x000000e4 => "\xce",
      0x000000e7 => "\xfb",
      0x000000e8 => "\xdc",
      0x000000e9 => "\xdb",
      0x000000ea => "\xcf",
      0x000000eb => "\xdd",
      0x000000ee => "\xde",
      0x000000ef => "\xdf",
      0x000000f4 => "\xec",
      0x000000f6 => "\xeb",
      0x000000f9 => "\xee",
      0x000000fb => "\xed",
      0x000000fc => "\xef",
      0x000000ff => "\xfa",
      0x00000386 => "\x71",
      0x00000388 => "\x72",
      0x00000389 => "\x73",
      0x0000038a => "\x75",
      0x0000038c => "\x76",
      0x0000038e => "\x77",
      0x0000038f => "\x78",
      0x00000391 => "\x41",
      0x00000392 => "\x42",
      0x00000393 => "\x43",
      0x00000394 => "\x44",
      0x00000395 => "\x45",
      0x00000396 => "\x46",
      0x00000397 => "\x47",
      0x00000398 => "\x48",
      0x00000399 => "\x49",
      0x0000039a => "\x51",
      0x0000039b => "\x52",
      0x0000039c => "\x53",
      0x0000039d => "\x54",
      0x0000039e => "\x55",
      0x0000039f => "\x56",
      0x000003a0 => "\x57",
      0x000003a1 => "\x58",
      0x000003a3 => "\x59",
      0x000003a4 => "\x62",
      0x000003a5 => "\x63",
      0x000003a6 => "\x64",
      0x000003a7 => "\x65",
      0x000003a8 => "\x66",
      0x000003a9 => "\x67",
      0x000003ac => "\xb1",
      0x000003ad => "\xb2",
      0x000003ae => "\xb3",
      0x000003af => "\xb5",
      0x000003b1 => "\x8a",
      0x000003b2 => "\x8b",
      0x000003b3 => "\x8c",
      0x000003b4 => "\x8d",
      0x000003b5 => "\x8e",
      0x000003b6 => "\x8f",
      0x000003b7 => "\x9a",
      0x000003b8 => "\x9b",
      0x000003b9 => "\x9c",
      0x000003ba => "\x9d",
      0x000003bb => "\x9e",
      0x000003bc => "\x9f",
      0x000003bd => "\xaa",
      0x000003be => "\xab",
      0x000003bf => "\xac",
      0x000003c0 => "\xad",
      0x000003c1 => "\xae",
      0x000003c2 => "\xaf",
      0x000003c3 => "\xba",
      0x000003c4 => "\xbb",
      0x000003c5 => "\xbc",
      0x000003c6 => "\xbd",
      0x000003c7 => "\xbe",
      0x000003c8 => "\xbf",
      0x000003c9 => "\xcb",
      0x000003ca => "\xb4",
      0x000003cb => "\xb8",
      0x000003cc => "\xb6",
      0x000003cd => "\xb7",
      0x000003ce => "\xb9",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM423 - Conversion routines for IBM423
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM423.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP423
   alias EBCDIC-CP-GR
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  00000391 | GREEK CAPITAL LETTER ALPHA
      42 |  00000392 | GREEK CAPITAL LETTER BETA
      43 |  00000393 | GREEK CAPITAL LETTER GAMMA
      44 |  00000394 | GREEK CAPITAL LETTER DELTA
      45 |  00000395 | GREEK CAPITAL LETTER EPSILON
      46 |  00000396 | GREEK CAPITAL LETTER ZETA
      47 |  00000397 | GREEK CAPITAL LETTER ETA
      48 |  00000398 | GREEK CAPITAL LETTER THETA
      49 |  00000399 | GREEK CAPITAL LETTER IOTA
      4A |  0000005B | LEFT SQUARE BRACKET
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      51 |  0000039A | GREEK CAPITAL LETTER KAPPA
      52 |  0000039B | GREEK CAPITAL LETTER LAMDA
      53 |  0000039C | GREEK CAPITAL LETTER MU
      54 |  0000039D | GREEK CAPITAL LETTER NU
      55 |  0000039E | GREEK CAPITAL LETTER XI
      56 |  0000039F | GREEK CAPITAL LETTER OMICRON
      57 |  000003A0 | GREEK CAPITAL LETTER PI
      58 |  000003A1 | GREEK CAPITAL LETTER RHO
      59 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      5A |  0000005D | RIGHT SQUARE BRACKET
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000003A4 | GREEK CAPITAL LETTER TAU
      63 |  000003A5 | GREEK CAPITAL LETTER UPSILON
      64 |  000003A6 | GREEK CAPITAL LETTER PHI
      65 |  000003A7 | GREEK CAPITAL LETTER CHI
      66 |  000003A8 | GREEK CAPITAL LETTER PSI
      67 |  000003A9 | GREEK CAPITAL LETTER OMEGA
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      71 |  00000386 | GREEK CAPITAL LETTER ALPHA WITH TONOS
      72 |  00000388 | GREEK CAPITAL LETTER EPSILON WITH TONOS
      73 |  00000389 | GREEK CAPITAL LETTER ETA WITH TONOS
      75 |  0000038A | GREEK CAPITAL LETTER IOTA WITH TONOS
      76 |  0000038C | GREEK CAPITAL LETTER OMICRON WITH TONOS
      77 |  0000038E | GREEK CAPITAL LETTER UPSILON WITH TONOS
      78 |  0000038F | GREEK CAPITAL LETTER OMEGA WITH TONOS
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  000000A3 | POUND SIGN
      7C |  000000A7 | SECTION SIGN
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  000003B1 | GREEK SMALL LETTER ALPHA
      8B |  000003B2 | GREEK SMALL LETTER BETA
      8C |  000003B3 | GREEK SMALL LETTER GAMMA
      8D |  000003B4 | GREEK SMALL LETTER DELTA
      8E |  000003B5 | GREEK SMALL LETTER EPSILON
      8F |  000003B6 | GREEK SMALL LETTER ZETA
      90 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  000003B7 | GREEK SMALL LETTER ETA
      9B |  000003B8 | GREEK SMALL LETTER THETA
      9C |  000003B9 | GREEK SMALL LETTER IOTA
      9D |  000003BA | GREEK SMALL LETTER KAPPA
      9E |  000003BB | GREEK SMALL LETTER LAMDA
      9F |  000003BC | GREEK SMALL LETTER MU
      A0 |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      A1 |  000000A8 | DIAERESIS
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  000003BD | GREEK SMALL LETTER NU
      AB |  000003BE | GREEK SMALL LETTER XI
      AC |  000003BF | GREEK SMALL LETTER OMICRON
      AD |  000003C0 | GREEK SMALL LETTER PI
      AE |  000003C1 | GREEK SMALL LETTER RHO
      AF |  000003C2 | GREEK SMALL LETTER FINAL SIGMA
      B1 |  000003AC | GREEK SMALL LETTER ALPHA WITH TONOS
      B2 |  000003AD | GREEK SMALL LETTER EPSILON WITH TONOS
      B3 |  000003AE | GREEK SMALL LETTER ETA WITH TONOS
      B4 |  000003CA | GREEK SMALL LETTER IOTA WITH DIALYTIKA
      B5 |  000003AF | GREEK SMALL LETTER IOTA WITH TONOS
      B6 |  000003CC | GREEK SMALL LETTER OMICRON WITH TONOS
      B7 |  000003CD | GREEK SMALL LETTER UPSILON WITH TONOS
      B8 |  000003CB | GREEK SMALL LETTER UPSILON WITH DIALYTIKA
      B9 |  000003CE | GREEK SMALL LETTER OMEGA WITH TONOS
      BA |  000003C3 | GREEK SMALL LETTER SIGMA
      BB |  000003C4 | GREEK SMALL LETTER TAU
      BC |  000003C5 | GREEK SMALL LETTER UPSILON
      BD |  000003C6 | GREEK SMALL LETTER PHI
      BE |  000003C7 | GREEK SMALL LETTER CHI
      BF |  000003C8 | GREEK SMALL LETTER PSI
      C0 |  000000B8 | CEDILLA
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CB |  000003C9 | GREEK SMALL LETTER OMEGA
      CC |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      CD |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      CE |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      CF |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      D0 |  000000B4 | ACUTE ACCENT
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  000000B1 | PLUS-MINUS SIGN
      DB |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      DC |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      DD |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      DE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      DF |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      E0 |  000000B0 | DEGREE SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000BD | VULGAR FRACTION ONE HALF
      EB |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      EC |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      ED |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      EE |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      EF |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      FB |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      FC |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM423

    $main::fatpacked{"Locale/RecodeData/IBM424.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM424';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM424.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM424;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x05d0,
      0x05d1,
      0x05d2,
      0x05d3,
      0x05d4,
      0x05d5,
      0x05d6,
      0x05d7,
      0x05d8,
      0x00a2,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x007c,
      0x0026,
      0x05d9,
      0x05da,
      0x05db,
      0x05dc,
      0x05dd,
      0x05de,
      0x05df,
      0x05e0,
      0x05e1,
      0x0021,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x00ac,
      0x002d,
      0x002f,
      0x05e2,
      0x05e3,
      0x05e4,
      0x05e5,
      0x05e6,
      0x05e7,
      0x05e8,
      0x05e9,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0x05ea,
      0xfffd,
      0xfffd,
      0x00a0,
      0xfffd,
      0xfffd,
      0xfffd,
      0x21d4,
      0x0060,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x00ab,
      0x00bb,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00b0,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00b8,
      0xfffd,
      0x00a4,
      0x00b5,
      0x007e,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00ae,
      0x005e,
      0x00a3,
      0x00a5,
      0x00b7,
      0x00a9,
      0x00a7,
      0x00b6,
      0x00bc,
      0x00bd,
      0x00be,
      0x005b,
      0x005d,
      0x203e,
      0x00a8,
      0x00b4,
      0x00d7,
      0x007b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007d,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x00b9,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005c,
      0x00f7,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00b2,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00b3,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xd7\x90",
      "\xd7\x91",
      "\xd7\x92",
      "\xd7\x93",
      "\xd7\x94",
      "\xd7\x95",
      "\xd7\x96",
      "\xd7\x97",
      "\xd7\x98",
      "\xc2\xa2",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x7c",
      "\x26",
      "\xd7\x99",
      "\xd7\x9a",
      "\xd7\x9b",
      "\xd7\x9c",
      "\xd7\x9d",
      "\xd7\x9e",
      "\xd7\x9f",
      "\xd7\xa0",
      "\xd7\xa1",
      "\x21",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\xc2\xac",
      "\x2d",
      "\x2f",
      "\xd7\xa2",
      "\xd7\xa3",
      "\xd7\xa4",
      "\xd7\xa5",
      "\xd7\xa6",
      "\xd7\xa7",
      "\xd7\xa8",
      "\xd7\xa9",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xd7\xaa",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa0",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x87\x94",
      "\x60",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xc2\xab",
      "\xc2\xbb",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xb0",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xb8",
      "\xef\xbf\xbd",
      "\xc2\xa4",
      "\xc2\xb5",
      "\x7e",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xae",
      "\x5e",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xc2\xb7",
      "\xc2\xa9",
      "\xc2\xa7",
      "\xc2\xb6",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\x5b",
      "\x5d",
      "\xe2\x80\xbe",
      "\xc2\xa8",
      "\xc2\xb4",
      "\xc3\x97",
      "\x7b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7d",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc2\xb9",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5c",
      "\xc3\xb7",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xb2",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc2\xb3",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x5a",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\xba",
      0x0000005c => "\xe0",
      0x0000005d => "\xbb",
      0x0000005e => "\xb0",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\xc0",
      0x0000007c => "\x4f",
      0x0000007d => "\xd0",
      0x0000007e => "\xa1",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x74",
      0x000000a2 => "\x4a",
      0x000000a3 => "\xb1",
      0x000000a4 => "\x9f",
      0x000000a5 => "\xb2",
      0x000000a6 => "\x6a",
      0x000000a7 => "\xb5",
      0x000000a8 => "\xbd",
      0x000000a9 => "\xb4",
      0x000000ab => "\x8a",
      0x000000ac => "\x5f",
      0x000000ad => "\xca",
      0x000000ae => "\xaf",
      0x000000b0 => "\x90",
      0x000000b2 => "\xea",
      0x000000b3 => "\xfa",
      0x000000b4 => "\xbe",
      0x000000b5 => "\xa0",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb3",
      0x000000b8 => "\x9d",
      0x000000b9 => "\xda",
      0x000000bb => "\x8b",
      0x000000bc => "\xb7",
      0x000000bd => "\xb8",
      0x000000be => "\xb9",
      0x000000d7 => "\xbf",
      0x000000f7 => "\xe1",
      0x000005d0 => "\x41",
      0x000005d1 => "\x42",
      0x000005d2 => "\x43",
      0x000005d3 => "\x44",
      0x000005d4 => "\x45",
      0x000005d5 => "\x46",
      0x000005d6 => "\x47",
      0x000005d7 => "\x48",
      0x000005d8 => "\x49",
      0x000005d9 => "\x51",
      0x000005da => "\x52",
      0x000005db => "\x53",
      0x000005dc => "\x54",
      0x000005dd => "\x55",
      0x000005de => "\x56",
      0x000005df => "\x57",
      0x000005e0 => "\x58",
      0x000005e1 => "\x59",
      0x000005e2 => "\x62",
      0x000005e3 => "\x63",
      0x000005e4 => "\x64",
      0x000005e5 => "\x65",
      0x000005e6 => "\x66",
      0x000005e7 => "\x67",
      0x000005e8 => "\x68",
      0x000005e9 => "\x69",
      0x000005ea => "\x71",
      0x0000203e => "\xbc",
      0x000021d4 => "\x78",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM424 - Conversion routines for IBM424
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM424.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP424
   alias EBCDIC-CP-HE
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000005D0 | HEBREW LETTER ALEF
      42 |  000005D1 | HEBREW LETTER BET
      43 |  000005D2 | HEBREW LETTER GIMEL
      44 |  000005D3 | HEBREW LETTER DALET
      45 |  000005D4 | HEBREW LETTER HE
      46 |  000005D5 | HEBREW LETTER VAV
      47 |  000005D6 | HEBREW LETTER ZAYIN
      48 |  000005D7 | HEBREW LETTER HET
      49 |  000005D8 | HEBREW LETTER TET
      4A |  000000A2 | CENT SIGN
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  0000007C | VERTICAL LINE
      50 |  00000026 | AMPERSAND
      51 |  000005D9 | HEBREW LETTER YOD
      52 |  000005DA | HEBREW LETTER FINAL KAF
      53 |  000005DB | HEBREW LETTER KAF
      54 |  000005DC | HEBREW LETTER LAMED
      55 |  000005DD | HEBREW LETTER FINAL MEM
      56 |  000005DE | HEBREW LETTER MEM
      57 |  000005DF | HEBREW LETTER FINAL NUN
      58 |  000005E0 | HEBREW LETTER NUN
      59 |  000005E1 | HEBREW LETTER SAMEKH
      5A |  00000021 | EXCLAMATION MARK
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  000000AC | NOT SIGN
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000005E2 | HEBREW LETTER AYIN
      63 |  000005E3 | HEBREW LETTER FINAL PE
      64 |  000005E4 | HEBREW LETTER PE
      65 |  000005E5 | HEBREW LETTER FINAL TSADI
      66 |  000005E6 | HEBREW LETTER TSADI
      67 |  000005E7 | HEBREW LETTER QOF
      68 |  000005E8 | HEBREW LETTER RESH
      69 |  000005E9 | HEBREW LETTER SHIN
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      71 |  000005EA | HEBREW LETTER TAV
      74 |  000000A0 | NO-BREAK SPACE
      78 |  000021D4 | LEFT RIGHT DOUBLE ARROW
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      8B |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      90 |  000000B0 | DEGREE SIGN
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9D |  000000B8 | CEDILLA
      9F |  000000A4 | CURRENCY SIGN
      A0 |  000000B5 | MICRO SIGN
      A1 |  0000007E | TILDE
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AF |  000000AE | REGISTERED SIGN
      B0 |  0000005E | CIRCUMFLEX ACCENT
      B1 |  000000A3 | POUND SIGN
      B2 |  000000A5 | YEN SIGN
      B3 |  000000B7 | MIDDLE DOT
      B4 |  000000A9 | COPYRIGHT SIGN
      B5 |  000000A7 | SECTION SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000BC | VULGAR FRACTION ONE QUARTER
      B8 |  000000BD | VULGAR FRACTION ONE HALF
      B9 |  000000BE | VULGAR FRACTION THREE QUARTERS
      BA |  0000005B | LEFT SQUARE BRACKET
      BB |  0000005D | RIGHT SQUARE BRACKET
      BC |  0000203E | OVERLINE
      BD |  000000A8 | DIAERESIS
      BE |  000000B4 | ACUTE ACCENT
      BF |  000000D7 | MULTIPLICATION SIGN
      C0 |  0000007B | LEFT CURLY BRACKET
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      D0 |  0000007D | RIGHT CURLY BRACKET
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  000000B9 | SUPERSCRIPT ONE
      E0 |  0000005C | REVERSE SOLIDUS
      E1 |  000000F7 | DIVISION SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000B2 | SUPERSCRIPT TWO
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000B3 | SUPERSCRIPT THREE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM424

    $main::fatpacked{"Locale/RecodeData/IBM437.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM437';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM437.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM437;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c7,
      0x00fc,
      0x00e9,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e5,
      0x00e7,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ef,
      0x00ee,
      0x00ec,
      0x00c4,
      0x00c5,
      0x00c9,
      0x00e6,
      0x00c6,
      0x00f4,
      0x00f6,
      0x00f2,
      0x00fb,
      0x00f9,
      0x00ff,
      0x00d6,
      0x00dc,
      0x00a2,
      0x00a3,
      0x00a5,
      0x20a7,
      0x0192,
      0x00e1,
      0x00ed,
      0x00f3,
      0x00fa,
      0x00f1,
      0x00d1,
      0x00aa,
      0x00ba,
      0x00bf,
      0x2310,
      0x00ac,
      0x00bd,
      0x00bc,
      0x00a1,
      0x00ab,
      0x00bb,
      0x2591,
      0x2592,
      0x2593,
      0x2502,
      0x2524,
      0x2561,
      0x2562,
      0x2556,
      0x2555,
      0x2563,
      0x2551,
      0x2557,
      0x255d,
      0x255c,
      0x255b,
      0x2510,
      0x2514,
      0x2534,
      0x252c,
      0x251c,
      0x2500,
      0x253c,
      0x255e,
      0x255f,
      0x255a,
      0x2554,
      0x2569,
      0x2566,
      0x2560,
      0x2550,
      0x256c,
      0x2567,
      0x2568,
      0x2564,
      0x2565,
      0x2559,
      0x2558,
      0x2552,
      0x2553,
      0x256b,
      0x256a,
      0x2518,
      0x250c,
      0x2588,
      0x2584,
      0x258c,
      0x2590,
      0x2580,
      0x03b1,
      0x00df,
      0x0393,
      0x03c0,
      0x03a3,
      0x03c3,
      0x00b5,
      0x03c4,
      0x03a6,
      0x0398,
      0x03a9,
      0x03b4,
      0x221e,
      0x03c6,
      0x03b5,
      0x2229,
      0x2261,
      0x00b1,
      0x2265,
      0x2264,
      0x2320,
      0x2321,
      0x00f7,
      0x2248,
      0x00b0,
      0x2219,
      0x00b7,
      0x221a,
      0x207f,
      0x00b2,
      0x25a0,
      0x00a0,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x87",
      "\xc3\xbc",
      "\xc3\xa9",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xaf",
      "\xc3\xae",
      "\xc3\xac",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x89",
      "\xc3\xa6",
      "\xc3\x86",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb2",
      "\xc3\xbb",
      "\xc3\xb9",
      "\xc3\xbf",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xe2\x82\xa7",
      "\xc6\x92",
      "\xc3\xa1",
      "\xc3\xad",
      "\xc3\xb3",
      "\xc3\xba",
      "\xc3\xb1",
      "\xc3\x91",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc2\xbf",
      "\xe2\x8c\x90",
      "\xc2\xac",
      "\xc2\xbd",
      "\xc2\xbc",
      "\xc2\xa1",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x94\x82",
      "\xe2\x94\xa4",
      "\xe2\x95\xa1",
      "\xe2\x95\xa2",
      "\xe2\x95\x96",
      "\xe2\x95\x95",
      "\xe2\x95\xa3",
      "\xe2\x95\x91",
      "\xe2\x95\x97",
      "\xe2\x95\x9d",
      "\xe2\x95\x9c",
      "\xe2\x95\x9b",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\xb4",
      "\xe2\x94\xac",
      "\xe2\x94\x9c",
      "\xe2\x94\x80",
      "\xe2\x94\xbc",
      "\xe2\x95\x9e",
      "\xe2\x95\x9f",
      "\xe2\x95\x9a",
      "\xe2\x95\x94",
      "\xe2\x95\xa9",
      "\xe2\x95\xa6",
      "\xe2\x95\xa0",
      "\xe2\x95\x90",
      "\xe2\x95\xac",
      "\xe2\x95\xa7",
      "\xe2\x95\xa8",
      "\xe2\x95\xa4",
      "\xe2\x95\xa5",
      "\xe2\x95\x99",
      "\xe2\x95\x98",
      "\xe2\x95\x92",
      "\xe2\x95\x93",
      "\xe2\x95\xab",
      "\xe2\x95\xaa",
      "\xe2\x94\x98",
      "\xe2\x94\x8c",
      "\xe2\x96\x88",
      "\xe2\x96\x84",
      "\xe2\x96\x8c",
      "\xe2\x96\x90",
      "\xe2\x96\x80",
      "\xce\xb1",
      "\xc3\x9f",
      "\xce\x93",
      "\xcf\x80",
      "\xce\xa3",
      "\xcf\x83",
      "\xc2\xb5",
      "\xcf\x84",
      "\xce\xa6",
      "\xce\x98",
      "\xce\xa9",
      "\xce\xb4",
      "\xe2\x88\x9e",
      "\xcf\x86",
      "\xce\xb5",
      "\xe2\x88\xa9",
      "\xe2\x89\xa1",
      "\xc2\xb1",
      "\xe2\x89\xa5",
      "\xe2\x89\xa4",
      "\xe2\x8c\xa0",
      "\xe2\x8c\xa1",
      "\xc3\xb7",
      "\xe2\x89\x88",
      "\xc2\xb0",
      "\xe2\x88\x99",
      "\xc2\xb7",
      "\xe2\x88\x9a",
      "\xe2\x81\xbf",
      "\xc2\xb2",
      "\xe2\x96\xa0",
      "\xc2\xa0",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xff",
      0x000000a1 => "\xad",
      0x000000a2 => "\x9b",
      0x000000a3 => "\x9c",
      0x000000a5 => "\x9d",
      0x000000aa => "\xa6",
      0x000000ab => "\xae",
      0x000000ac => "\xaa",
      0x000000b0 => "\xf8",
      0x000000b1 => "\xf1",
      0x000000b2 => "\xfd",
      0x000000b5 => "\xe6",
      0x000000b7 => "\xfa",
      0x000000ba => "\xa7",
      0x000000bb => "\xaf",
      0x000000bc => "\xac",
      0x000000bd => "\xab",
      0x000000bf => "\xa8",
      0x000000c4 => "\x8e",
      0x000000c5 => "\x8f",
      0x000000c6 => "\x92",
      0x000000c7 => "\x80",
      0x000000c9 => "\x90",
      0x000000d1 => "\xa5",
      0x000000d6 => "\x99",
      0x000000dc => "\x9a",
      0x000000df => "\xe1",
      0x000000e0 => "\x85",
      0x000000e1 => "\xa0",
      0x000000e2 => "\x83",
      0x000000e4 => "\x84",
      0x000000e5 => "\x86",
      0x000000e6 => "\x91",
      0x000000e7 => "\x87",
      0x000000e8 => "\x8a",
      0x000000e9 => "\x82",
      0x000000ea => "\x88",
      0x000000eb => "\x89",
      0x000000ec => "\x8d",
      0x000000ed => "\xa1",
      0x000000ee => "\x8c",
      0x000000ef => "\x8b",
      0x000000f1 => "\xa4",
      0x000000f2 => "\x95",
      0x000000f3 => "\xa2",
      0x000000f4 => "\x93",
      0x000000f6 => "\x94",
      0x000000f7 => "\xf6",
      0x000000f9 => "\x97",
      0x000000fa => "\xa3",
      0x000000fb => "\x96",
      0x000000fc => "\x81",
      0x000000ff => "\x98",
      0x00000192 => "\x9f",
      0x00000393 => "\xe2",
      0x00000398 => "\xe9",
      0x000003a3 => "\xe4",
      0x000003a6 => "\xe8",
      0x000003a9 => "\xea",
      0x000003b1 => "\xe0",
      0x000003b4 => "\xeb",
      0x000003b5 => "\xee",
      0x000003c0 => "\xe3",
      0x000003c3 => "\xe5",
      0x000003c4 => "\xe7",
      0x000003c6 => "\xed",
      0x0000207f => "\xfc",
      0x000020a7 => "\x9e",
      0x00002219 => "\xf9",
      0x0000221a => "\xfb",
      0x0000221e => "\xec",
      0x00002229 => "\xef",
      0x00002248 => "\xf7",
      0x00002261 => "\xf0",
      0x00002264 => "\xf3",
      0x00002265 => "\xf2",
      0x00002310 => "\xa9",
      0x00002320 => "\xf4",
      0x00002321 => "\xf5",
      0x00002500 => "\xc4",
      0x00002502 => "\xb3",
      0x0000250c => "\xda",
      0x00002510 => "\xbf",
      0x00002514 => "\xc0",
      0x00002518 => "\xd9",
      0x0000251c => "\xc3",
      0x00002524 => "\xb4",
      0x0000252c => "\xc2",
      0x00002534 => "\xc1",
      0x0000253c => "\xc5",
      0x00002550 => "\xcd",
      0x00002551 => "\xba",
      0x00002552 => "\xd5",
      0x00002553 => "\xd6",
      0x00002554 => "\xc9",
      0x00002555 => "\xb8",
      0x00002556 => "\xb7",
      0x00002557 => "\xbb",
      0x00002558 => "\xd4",
      0x00002559 => "\xd3",
      0x0000255a => "\xc8",
      0x0000255b => "\xbe",
      0x0000255c => "\xbd",
      0x0000255d => "\xbc",
      0x0000255e => "\xc6",
      0x0000255f => "\xc7",
      0x00002560 => "\xcc",
      0x00002561 => "\xb5",
      0x00002562 => "\xb6",
      0x00002563 => "\xb9",
      0x00002564 => "\xd1",
      0x00002565 => "\xd2",
      0x00002566 => "\xcb",
      0x00002567 => "\xcf",
      0x00002568 => "\xd0",
      0x00002569 => "\xca",
      0x0000256a => "\xd8",
      0x0000256b => "\xd7",
      0x0000256c => "\xce",
      0x00002580 => "\xdf",
      0x00002584 => "\xdc",
      0x00002588 => "\xdb",
      0x0000258c => "\xdd",
      0x00002590 => "\xde",
      0x00002591 => "\xb0",
      0x00002592 => "\xb1",
      0x00002593 => "\xb2",
      0x000025a0 => "\xfe",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM437 - Conversion routines for IBM437
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM437.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP437
   alias 437
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      81 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      82 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      83 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      84 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      85 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      86 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      87 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      88 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      89 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      8A |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      8B |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      8C |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      8D |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      8E |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      8F |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      90 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      91 |  000000E6 | LATIN SMALL LETTER AE
      92 |  000000C6 | LATIN CAPITAL LETTER AE
      93 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      94 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      95 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      96 |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      97 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      98 |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      99 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      9A |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      9B |  000000A2 | CENT SIGN
      9C |  000000A3 | POUND SIGN
      9D |  000000A5 | YEN SIGN
      9E |  000020A7 | PESETA SIGN
      9F |  00000192 | LATIN SMALL LETTER F WITH HOOK
      A0 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      A1 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      A2 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      A3 |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      A4 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      A5 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      A6 |  000000AA | FEMININE ORDINAL INDICATOR
      A7 |  000000BA | MASCULINE ORDINAL INDICATOR
      A8 |  000000BF | INVERTED QUESTION MARK
      A9 |  00002310 | REVERSED NOT SIGN
      AA |  000000AC | NOT SIGN
      AB |  000000BD | VULGAR FRACTION ONE HALF
      AC |  000000BC | VULGAR FRACTION ONE QUARTER
      AD |  000000A1 | INVERTED EXCLAMATION MARK
      AE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AF |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      B0 |  00002591 | LIGHT SHADE
      B1 |  00002592 | MEDIUM SHADE
      B2 |  00002593 | DARK SHADE
      B3 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      B4 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      B5 |  00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
      B6 |  00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
      B7 |  00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
      B8 |  00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
      B9 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      BA |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      BB |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      BC |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      BD |  0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
      BE |  0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
      BF |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      C0 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      C1 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      C2 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      C3 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      C4 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      C5 |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      C6 |  0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
      C7 |  0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
      C8 |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      C9 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      CA |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      CB |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      CC |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      CD |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      CE |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      CF |  00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
      D0 |  00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
      D1 |  00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
      D2 |  00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
      D3 |  00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
      D4 |  00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
      D5 |  00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
      D6 |  00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
      D7 |  0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
      D8 |  0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
      D9 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      DA |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      DB |  00002588 | FULL BLOCK
      DC |  00002584 | LOWER HALF BLOCK
      DD |  0000258C | LEFT HALF BLOCK
      DE |  00002590 | RIGHT HALF BLOCK
      DF |  00002580 | UPPER HALF BLOCK
      E0 |  000003B1 | GREEK SMALL LETTER ALPHA
      E1 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E2 |  00000393 | GREEK CAPITAL LETTER GAMMA
      E3 |  000003C0 | GREEK SMALL LETTER PI
      E4 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      E5 |  000003C3 | GREEK SMALL LETTER SIGMA
      E6 |  000000B5 | MICRO SIGN
      E7 |  000003C4 | GREEK SMALL LETTER TAU
      E8 |  000003A6 | GREEK CAPITAL LETTER PHI
      E9 |  00000398 | GREEK CAPITAL LETTER THETA
      EA |  000003A9 | GREEK CAPITAL LETTER OMEGA
      EB |  000003B4 | GREEK SMALL LETTER DELTA
      EC |  0000221E | INFINITY
      ED |  000003C6 | GREEK SMALL LETTER PHI
      EE |  000003B5 | GREEK SMALL LETTER EPSILON
      EF |  00002229 | INTERSECTION
      F0 |  00002261 | IDENTICAL TO
      F1 |  000000B1 | PLUS-MINUS SIGN
      F2 |  00002265 | GREATER-THAN OR EQUAL TO
      F3 |  00002264 | LESS-THAN OR EQUAL TO
      F4 |  00002320 | TOP HALF INTEGRAL
      F5 |  00002321 | BOTTOM HALF INTEGRAL
      F6 |  000000F7 | DIVISION SIGN
      F7 |  00002248 | ALMOST EQUAL TO
      F8 |  000000B0 | DEGREE SIGN
      F9 |  00002219 | BULLET OPERATOR
      FA |  000000B7 | MIDDLE DOT
      FB |  0000221A | SQUARE ROOT
      FC |  0000207F | SUPERSCRIPT LATIN SMALL LETTER N
      FD |  000000B2 | SUPERSCRIPT TWO
      FE |  000025A0 | BLACK SQUARE
      FF |  000000A0 | NO-BREAK SPACE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM437

    $main::fatpacked{"Locale/RecodeData/IBM500.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM500';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM500.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM500;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x00a0,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e1,
      0x00e3,
      0x00e5,
      0x00e7,
      0x00f1,
      0x005b,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00ec,
      0x00df,
      0x005d,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0x00c2,
      0x00c4,
      0x00c0,
      0x00c1,
      0x00c3,
      0x00c5,
      0x00c7,
      0x00d1,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x00f8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x0060,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0x00d8,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x00ab,
      0x00bb,
      0x00f0,
      0x00fd,
      0x00fe,
      0x00b1,
      0x00b0,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x00aa,
      0x00ba,
      0x00e6,
      0x00b8,
      0x00c6,
      0x00a4,
      0x00b5,
      0x007e,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x00a1,
      0x00bf,
      0x00d0,
      0x00dd,
      0x00de,
      0x00ae,
      0x00a2,
      0x00a3,
      0x00a5,
      0x00b7,
      0x00a9,
      0x00a7,
      0x00b6,
      0x00bc,
      0x00bd,
      0x00be,
      0x00ac,
      0x007c,
      0x00af,
      0x00a8,
      0x00b4,
      0x00d7,
      0x007b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0x00f4,
      0x00f6,
      0x00f2,
      0x00f3,
      0x00f5,
      0x007d,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x00b9,
      0x00fb,
      0x00fc,
      0x00f9,
      0x00fa,
      0x00ff,
      0x005c,
      0x00f7,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00b2,
      0x00d4,
      0x00d6,
      0x00d2,
      0x00d3,
      0x00d5,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00b3,
      0x00db,
      0x00dc,
      0x00d9,
      0x00da,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xc2\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa3",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xb1",
      "\x5b",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xac",
      "\xc3\x9f",
      "\x5d",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xc3\x82",
      "\xc3\x84",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x83",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x91",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xc3\xb8",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\x60",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xc3\x98",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xc2\xab",
      "\xc2\xbb",
      "\xc3\xb0",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc2\xb1",
      "\xc2\xb0",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc3\xa6",
      "\xc2\xb8",
      "\xc3\x86",
      "\xc2\xa4",
      "\xc2\xb5",
      "\x7e",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc2\xa1",
      "\xc2\xbf",
      "\xc3\x90",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc2\xae",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xc2\xb7",
      "\xc2\xa9",
      "\xc2\xa7",
      "\xc2\xb6",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc2\xac",
      "\x7c",
      "\xc2\xaf",
      "\xc2\xa8",
      "\xc2\xb4",
      "\xc3\x97",
      "\x7b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb5",
      "\x7d",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc2\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbf",
      "\x5c",
      "\xc3\xb7",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xb2",
      "\xc3\x94",
      "\xc3\x96",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x95",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc2\xb3",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x4a",
      0x0000005c => "\xe0",
      0x0000005d => "\x5a",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\xc0",
      0x0000007c => "\xbb",
      0x0000007d => "\xd0",
      0x0000007e => "\xa1",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x41",
      0x000000a1 => "\xaa",
      0x000000a2 => "\xb0",
      0x000000a3 => "\xb1",
      0x000000a4 => "\x9f",
      0x000000a5 => "\xb2",
      0x000000a6 => "\x6a",
      0x000000a7 => "\xb5",
      0x000000a8 => "\xbd",
      0x000000a9 => "\xb4",
      0x000000aa => "\x9a",
      0x000000ab => "\x8a",
      0x000000ac => "\xba",
      0x000000ad => "\xca",
      0x000000ae => "\xaf",
      0x000000af => "\xbc",
      0x000000b0 => "\x90",
      0x000000b1 => "\x8f",
      0x000000b2 => "\xea",
      0x000000b3 => "\xfa",
      0x000000b4 => "\xbe",
      0x000000b5 => "\xa0",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb3",
      0x000000b8 => "\x9d",
      0x000000b9 => "\xda",
      0x000000ba => "\x9b",
      0x000000bb => "\x8b",
      0x000000bc => "\xb7",
      0x000000bd => "\xb8",
      0x000000be => "\xb9",
      0x000000bf => "\xab",
      0x000000c0 => "\x64",
      0x000000c1 => "\x65",
      0x000000c2 => "\x62",
      0x000000c3 => "\x66",
      0x000000c4 => "\x63",
      0x000000c5 => "\x67",
      0x000000c6 => "\x9e",
      0x000000c7 => "\x68",
      0x000000c8 => "\x74",
      0x000000c9 => "\x71",
      0x000000ca => "\x72",
      0x000000cb => "\x73",
      0x000000cc => "\x78",
      0x000000cd => "\x75",
      0x000000ce => "\x76",
      0x000000cf => "\x77",
      0x000000d0 => "\xac",
      0x000000d1 => "\x69",
      0x000000d2 => "\xed",
      0x000000d3 => "\xee",
      0x000000d4 => "\xeb",
      0x000000d5 => "\xef",
      0x000000d6 => "\xec",
      0x000000d7 => "\xbf",
      0x000000d8 => "\x80",
      0x000000d9 => "\xfd",
      0x000000da => "\xfe",
      0x000000db => "\xfb",
      0x000000dc => "\xfc",
      0x000000dd => "\xad",
      0x000000de => "\xae",
      0x000000df => "\x59",
      0x000000e0 => "\x44",
      0x000000e1 => "\x45",
      0x000000e2 => "\x42",
      0x000000e3 => "\x46",
      0x000000e4 => "\x43",
      0x000000e5 => "\x47",
      0x000000e6 => "\x9c",
      0x000000e7 => "\x48",
      0x000000e8 => "\x54",
      0x000000e9 => "\x51",
      0x000000ea => "\x52",
      0x000000eb => "\x53",
      0x000000ec => "\x58",
      0x000000ed => "\x55",
      0x000000ee => "\x56",
      0x000000ef => "\x57",
      0x000000f0 => "\x8c",
      0x000000f1 => "\x49",
      0x000000f2 => "\xcd",
      0x000000f3 => "\xce",
      0x000000f4 => "\xcb",
      0x000000f5 => "\xcf",
      0x000000f6 => "\xcc",
      0x000000f7 => "\xe1",
      0x000000f8 => "\x70",
      0x000000f9 => "\xdd",
      0x000000fa => "\xde",
      0x000000fb => "\xdb",
      0x000000fc => "\xdc",
      0x000000fd => "\x8d",
      0x000000fe => "\x8e",
      0x000000ff => "\xdf",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM500 - Conversion routines for IBM500
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM500.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP500
   alias 500
   alias 500V1
   alias EBCDIC-CP-BE
   alias EBCDIC-CP-CH
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000000A0 | NO-BREAK SPACE
      42 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      43 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      44 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      45 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      46 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      47 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      48 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      49 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      4A |  0000005B | LEFT SQUARE BRACKET
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      51 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      52 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      53 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      54 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      55 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      56 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      57 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      58 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      59 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      5A |  0000005D | RIGHT SQUARE BRACKET
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      63 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      64 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      65 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      66 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      67 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      68 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      69 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      71 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      72 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      73 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      74 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      75 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      76 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      77 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      78 |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      8B |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      8C |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      8D |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      8E |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      8F |  000000B1 | PLUS-MINUS SIGN
      90 |  000000B0 | DEGREE SIGN
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  000000AA | FEMININE ORDINAL INDICATOR
      9B |  000000BA | MASCULINE ORDINAL INDICATOR
      9C |  000000E6 | LATIN SMALL LETTER AE
      9D |  000000B8 | CEDILLA
      9E |  000000C6 | LATIN CAPITAL LETTER AE
      9F |  000000A4 | CURRENCY SIGN
      A0 |  000000B5 | MICRO SIGN
      A1 |  0000007E | TILDE
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  000000A1 | INVERTED EXCLAMATION MARK
      AB |  000000BF | INVERTED QUESTION MARK
      AC |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      AD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      AE |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      AF |  000000AE | REGISTERED SIGN
      B0 |  000000A2 | CENT SIGN
      B1 |  000000A3 | POUND SIGN
      B2 |  000000A5 | YEN SIGN
      B3 |  000000B7 | MIDDLE DOT
      B4 |  000000A9 | COPYRIGHT SIGN
      B5 |  000000A7 | SECTION SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000BC | VULGAR FRACTION ONE QUARTER
      B8 |  000000BD | VULGAR FRACTION ONE HALF
      B9 |  000000BE | VULGAR FRACTION THREE QUARTERS
      BA |  000000AC | NOT SIGN
      BB |  0000007C | VERTICAL LINE
      BC |  000000AF | MACRON
      BD |  000000A8 | DIAERESIS
      BE |  000000B4 | ACUTE ACCENT
      BF |  000000D7 | MULTIPLICATION SIGN
      C0 |  0000007B | LEFT CURLY BRACKET
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      CC |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      CD |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      CE |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      CF |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      D0 |  0000007D | RIGHT CURLY BRACKET
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  000000B9 | SUPERSCRIPT ONE
      DB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      DC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      DD |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      DE |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      DF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      E0 |  0000005C | REVERSE SOLIDUS
      E1 |  000000F7 | DIVISION SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000B2 | SUPERSCRIPT TWO
      EB |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      EC |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      ED |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000B3 | SUPERSCRIPT THREE
      FB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      FC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      FD |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      FE |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM500

    $main::fatpacked{"Locale/RecodeData/IBM850.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM850';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM850.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM850;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c7,
      0x00fc,
      0x00e9,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e5,
      0x00e7,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ef,
      0x00ee,
      0x00ec,
      0x00c4,
      0x00c5,
      0x00c9,
      0x00e6,
      0x00c6,
      0x00f4,
      0x00f6,
      0x00f2,
      0x00fb,
      0x00f9,
      0x00ff,
      0x00d6,
      0x00dc,
      0x00f8,
      0x00a3,
      0x00d8,
      0x00d7,
      0x0192,
      0x00e1,
      0x00ed,
      0x00f3,
      0x00fa,
      0x00f1,
      0x00d1,
      0x00aa,
      0x00ba,
      0x00bf,
      0x00ae,
      0x00ac,
      0x00bd,
      0x00bc,
      0x00a1,
      0x00ab,
      0x00bb,
      0x2591,
      0x2592,
      0x2593,
      0x2502,
      0x2524,
      0x00c1,
      0x00c2,
      0x00c0,
      0x00a9,
      0x2563,
      0x2551,
      0x2557,
      0x255d,
      0x00a2,
      0x00a5,
      0x2510,
      0x2514,
      0x2534,
      0x252c,
      0x251c,
      0x2500,
      0x253c,
      0x00e3,
      0x00c3,
      0x255a,
      0x2554,
      0x2569,
      0x2566,
      0x2560,
      0x2550,
      0x256c,
      0x00a4,
      0x00f0,
      0x00d0,
      0x00ca,
      0x00cb,
      0x00c8,
      0x0131,
      0x00cd,
      0x00ce,
      0x00cf,
      0x2518,
      0x250c,
      0x2588,
      0x2584,
      0x00a6,
      0x00cc,
      0x2580,
      0x00d3,
      0x00df,
      0x00d4,
      0x00d2,
      0x00f5,
      0x00d5,
      0x00b5,
      0x00fe,
      0x00de,
      0x00da,
      0x00db,
      0x00d9,
      0x00fd,
      0x00dd,
      0x00af,
      0x00b4,
      0x00ad,
      0x00b1,
      0x2017,
      0x00be,
      0x00b6,
      0x00a7,
      0x00f7,
      0x00b8,
      0x00b0,
      0x00a8,
      0x00b7,
      0x00b9,
      0x00b3,
      0x00b2,
      0x25a0,
      0x00a0,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x87",
      "\xc3\xbc",
      "\xc3\xa9",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xaf",
      "\xc3\xae",
      "\xc3\xac",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x89",
      "\xc3\xa6",
      "\xc3\x86",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb2",
      "\xc3\xbb",
      "\xc3\xb9",
      "\xc3\xbf",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc3\xb8",
      "\xc2\xa3",
      "\xc3\x98",
      "\xc3\x97",
      "\xc6\x92",
      "\xc3\xa1",
      "\xc3\xad",
      "\xc3\xb3",
      "\xc3\xba",
      "\xc3\xb1",
      "\xc3\x91",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc2\xbf",
      "\xc2\xae",
      "\xc2\xac",
      "\xc2\xbd",
      "\xc2\xbc",
      "\xc2\xa1",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x94\x82",
      "\xe2\x94\xa4",
      "\xc3\x81",
      "\xc3\x82",
      "\xc3\x80",
      "\xc2\xa9",
      "\xe2\x95\xa3",
      "\xe2\x95\x91",
      "\xe2\x95\x97",
      "\xe2\x95\x9d",
      "\xc2\xa2",
      "\xc2\xa5",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\xb4",
      "\xe2\x94\xac",
      "\xe2\x94\x9c",
      "\xe2\x94\x80",
      "\xe2\x94\xbc",
      "\xc3\xa3",
      "\xc3\x83",
      "\xe2\x95\x9a",
      "\xe2\x95\x94",
      "\xe2\x95\xa9",
      "\xe2\x95\xa6",
      "\xe2\x95\xa0",
      "\xe2\x95\x90",
      "\xe2\x95\xac",
      "\xc2\xa4",
      "\xc3\xb0",
      "\xc3\x90",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc4\xb1",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xe2\x94\x98",
      "\xe2\x94\x8c",
      "\xe2\x96\x88",
      "\xe2\x96\x84",
      "\xc2\xa6",
      "\xc3\x8c",
      "\xe2\x96\x80",
      "\xc3\x93",
      "\xc3\x9f",
      "\xc3\x94",
      "\xc3\x92",
      "\xc3\xb5",
      "\xc3\x95",
      "\xc2\xb5",
      "\xc3\xbe",
      "\xc3\x9e",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x99",
      "\xc3\xbd",
      "\xc3\x9d",
      "\xc2\xaf",
      "\xc2\xb4",
      "\xc2\xad",
      "\xc2\xb1",
      "\xe2\x80\x97",
      "\xc2\xbe",
      "\xc2\xb6",
      "\xc2\xa7",
      "\xc3\xb7",
      "\xc2\xb8",
      "\xc2\xb0",
      "\xc2\xa8",
      "\xc2\xb7",
      "\xc2\xb9",
      "\xc2\xb3",
      "\xc2\xb2",
      "\xe2\x96\xa0",
      "\xc2\xa0",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xff",
      0x000000a1 => "\xad",
      0x000000a2 => "\xbd",
      0x000000a3 => "\x9c",
      0x000000a4 => "\xcf",
      0x000000a5 => "\xbe",
      0x000000a6 => "\xdd",
      0x000000a7 => "\xf5",
      0x000000a8 => "\xf9",
      0x000000a9 => "\xb8",
      0x000000aa => "\xa6",
      0x000000ab => "\xae",
      0x000000ac => "\xaa",
      0x000000ad => "\xf0",
      0x000000ae => "\xa9",
      0x000000af => "\xee",
      0x000000b0 => "\xf8",
      0x000000b1 => "\xf1",
      0x000000b2 => "\xfd",
      0x000000b3 => "\xfc",
      0x000000b4 => "\xef",
      0x000000b5 => "\xe6",
      0x000000b6 => "\xf4",
      0x000000b7 => "\xfa",
      0x000000b8 => "\xf7",
      0x000000b9 => "\xfb",
      0x000000ba => "\xa7",
      0x000000bb => "\xaf",
      0x000000bc => "\xac",
      0x000000bd => "\xab",
      0x000000be => "\xf3",
      0x000000bf => "\xa8",
      0x000000c0 => "\xb7",
      0x000000c1 => "\xb5",
      0x000000c2 => "\xb6",
      0x000000c3 => "\xc7",
      0x000000c4 => "\x8e",
      0x000000c5 => "\x8f",
      0x000000c6 => "\x92",
      0x000000c7 => "\x80",
      0x000000c8 => "\xd4",
      0x000000c9 => "\x90",
      0x000000ca => "\xd2",
      0x000000cb => "\xd3",
      0x000000cc => "\xde",
      0x000000cd => "\xd6",
      0x000000ce => "\xd7",
      0x000000cf => "\xd8",
      0x000000d0 => "\xd1",
      0x000000d1 => "\xa5",
      0x000000d2 => "\xe3",
      0x000000d3 => "\xe0",
      0x000000d4 => "\xe2",
      0x000000d5 => "\xe5",
      0x000000d6 => "\x99",
      0x000000d7 => "\x9e",
      0x000000d8 => "\x9d",
      0x000000d9 => "\xeb",
      0x000000da => "\xe9",
      0x000000db => "\xea",
      0x000000dc => "\x9a",
      0x000000dd => "\xed",
      0x000000de => "\xe8",
      0x000000df => "\xe1",
      0x000000e0 => "\x85",
      0x000000e1 => "\xa0",
      0x000000e2 => "\x83",
      0x000000e3 => "\xc6",
      0x000000e4 => "\x84",
      0x000000e5 => "\x86",
      0x000000e6 => "\x91",
      0x000000e7 => "\x87",
      0x000000e8 => "\x8a",
      0x000000e9 => "\x82",
      0x000000ea => "\x88",
      0x000000eb => "\x89",
      0x000000ec => "\x8d",
      0x000000ed => "\xa1",
      0x000000ee => "\x8c",
      0x000000ef => "\x8b",
      0x000000f0 => "\xd0",
      0x000000f1 => "\xa4",
      0x000000f2 => "\x95",
      0x000000f3 => "\xa2",
      0x000000f4 => "\x93",
      0x000000f5 => "\xe4",
      0x000000f6 => "\x94",
      0x000000f7 => "\xf6",
      0x000000f8 => "\x9b",
      0x000000f9 => "\x97",
      0x000000fa => "\xa3",
      0x000000fb => "\x96",
      0x000000fc => "\x81",
      0x000000fd => "\xec",
      0x000000fe => "\xe7",
      0x000000ff => "\x98",
      0x00000131 => "\xd5",
      0x00000192 => "\x9f",
      0x00002017 => "\xf2",
      0x00002500 => "\xc4",
      0x00002502 => "\xb3",
      0x0000250c => "\xda",
      0x00002510 => "\xbf",
      0x00002514 => "\xc0",
      0x00002518 => "\xd9",
      0x0000251c => "\xc3",
      0x00002524 => "\xb4",
      0x0000252c => "\xc2",
      0x00002534 => "\xc1",
      0x0000253c => "\xc5",
      0x00002550 => "\xcd",
      0x00002551 => "\xba",
      0x00002554 => "\xc9",
      0x00002557 => "\xbb",
      0x0000255a => "\xc8",
      0x0000255d => "\xbc",
      0x00002560 => "\xcc",
      0x00002563 => "\xb9",
      0x00002566 => "\xcb",
      0x00002569 => "\xca",
      0x0000256c => "\xce",
      0x00002580 => "\xdf",
      0x00002584 => "\xdc",
      0x00002588 => "\xdb",
      0x00002591 => "\xb0",
      0x00002592 => "\xb1",
      0x00002593 => "\xb2",
      0x000025a0 => "\xfe",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM850 - Conversion routines for IBM850
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM850.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
    source: UNICODE 1.0
   alias CP850
   alias 850
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      81 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      82 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      83 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      84 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      85 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      86 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      87 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      88 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      89 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      8A |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      8B |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      8C |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      8D |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      8E |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      8F |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      90 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      91 |  000000E6 | LATIN SMALL LETTER AE
      92 |  000000C6 | LATIN CAPITAL LETTER AE
      93 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      94 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      95 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      96 |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      97 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      98 |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      99 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      9A |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      9B |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      9C |  000000A3 | POUND SIGN
      9D |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      9E |  000000D7 | MULTIPLICATION SIGN
      9F |  00000192 | LATIN SMALL LETTER F WITH HOOK
      A0 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      A1 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      A2 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      A3 |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      A4 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      A5 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      A6 |  000000AA | FEMININE ORDINAL INDICATOR
      A7 |  000000BA | MASCULINE ORDINAL INDICATOR
      A8 |  000000BF | INVERTED QUESTION MARK
      A9 |  000000AE | REGISTERED SIGN
      AA |  000000AC | NOT SIGN
      AB |  000000BD | VULGAR FRACTION ONE HALF
      AC |  000000BC | VULGAR FRACTION ONE QUARTER
      AD |  000000A1 | INVERTED EXCLAMATION MARK
      AE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AF |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      B0 |  00002591 | LIGHT SHADE
      B1 |  00002592 | MEDIUM SHADE
      B2 |  00002593 | DARK SHADE
      B3 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      B4 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      B5 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      B6 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      B7 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      B8 |  000000A9 | COPYRIGHT SIGN
      B9 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      BA |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      BB |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      BC |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      BD |  000000A2 | CENT SIGN
      BE |  000000A5 | YEN SIGN
      BF |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      C0 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      C1 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      C2 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      C3 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      C4 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      C5 |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      C6 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      C7 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      C8 |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      C9 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      CA |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      CB |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      CC |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      CD |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      CE |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      CF |  000000A4 | CURRENCY SIGN
      D0 |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      D1 |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      D2 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      D3 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      D4 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      D5 |  00000131 | LATIN SMALL LETTER DOTLESS I
      D6 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      D7 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      D8 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      D9 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      DA |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      DB |  00002588 | FULL BLOCK
      DC |  00002584 | LOWER HALF BLOCK
      DD |  000000A6 | BROKEN BAR
      DE |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      DF |  00002580 | UPPER HALF BLOCK
      E0 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      E1 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E2 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      E3 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      E4 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      E5 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      E6 |  000000B5 | MICRO SIGN
      E7 |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      E8 |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      E9 |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      EA |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      EB |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      EC |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      ED |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      EE |  000000AF | MACRON
      EF |  000000B4 | ACUTE ACCENT
      F0 |  000000AD | SOFT HYPHEN
      F1 |  000000B1 | PLUS-MINUS SIGN
      F2 |  00002017 | DOUBLE LOW LINE
      F3 |  000000BE | VULGAR FRACTION THREE QUARTERS
      F4 |  000000B6 | PILCROW SIGN
      F5 |  000000A7 | SECTION SIGN
      F6 |  000000F7 | DIVISION SIGN
      F7 |  000000B8 | CEDILLA
      F8 |  000000B0 | DEGREE SIGN
      F9 |  000000A8 | DIAERESIS
      FA |  000000B7 | MIDDLE DOT
      FB |  000000B9 | SUPERSCRIPT ONE
      FC |  000000B3 | SUPERSCRIPT THREE
      FD |  000000B2 | SUPERSCRIPT TWO
      FE |  000025A0 | BLACK SQUARE
      FF |  000000A0 | NO-BREAK SPACE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM850

    $main::fatpacked{"Locale/RecodeData/IBM851.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM851';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM851.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM851;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c7,
      0x00fc,
      0x00e9,
      0x00e2,
      0x00e4,
      0x00e0,
      0x0386,
      0x00e7,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ef,
      0x00ee,
      0x0388,
      0x00c4,
      0x0389,
      0x038a,
      0xfffd,
      0x038c,
      0x00f4,
      0x00f6,
      0x038e,
      0x00fb,
      0x00f9,
      0x038f,
      0x00d6,
      0x00dc,
      0x03ac,
      0x00a3,
      0x03ad,
      0x03ae,
      0x03af,
      0x03ca,
      0x0390,
      0x03cc,
      0x03cd,
      0x0391,
      0x0392,
      0x0393,
      0x0394,
      0x0395,
      0x0396,
      0x0397,
      0x00bd,
      0x0398,
      0x0399,
      0x00ab,
      0x00bb,
      0x2591,
      0x2592,
      0x2593,
      0x2502,
      0x2524,
      0x039a,
      0x039b,
      0x039d,
      0x039c,
      0x2563,
      0x2551,
      0x2557,
      0x255d,
      0x039e,
      0x039f,
      0x2510,
      0x2514,
      0x2534,
      0x252c,
      0x251c,
      0x2500,
      0x253c,
      0x03a0,
      0x03a1,
      0x255a,
      0x2554,
      0x2569,
      0x2566,
      0x2560,
      0x2550,
      0x256c,
      0x03a3,
      0x03a4,
      0x03a5,
      0x03a6,
      0x03a7,
      0x03a8,
      0x03a9,
      0x03b1,
      0x03b2,
      0x03b3,
      0x2518,
      0x250c,
      0x2588,
      0x2584,
      0x03b4,
      0x03b5,
      0x2580,
      0x03b6,
      0x03b7,
      0x03b8,
      0x03b9,
      0x03ba,
      0x03bb,
      0x03bc,
      0x03bd,
      0x03be,
      0x03bf,
      0x03c0,
      0x03c1,
      0x03c3,
      0x03c2,
      0x03c4,
      0x00b4,
      0x00ad,
      0x00b1,
      0x03c5,
      0x03c6,
      0x03c7,
      0x00a7,
      0x03c8,
      0x02db,
      0x00b0,
      0x00a8,
      0x03c9,
      0x03cb,
      0x03b0,
      0x03ce,
      0x25a0,
      0x00a0,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x87",
      "\xc3\xbc",
      "\xc3\xa9",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xce\x86",
      "\xc3\xa7",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xaf",
      "\xc3\xae",
      "\xce\x88",
      "\xc3\x84",
      "\xce\x89",
      "\xce\x8a",
      "\xef\xbf\xbd",
      "\xce\x8c",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xce\x8e",
      "\xc3\xbb",
      "\xc3\xb9",
      "\xce\x8f",
      "\xc3\x96",
      "\xc3\x9c",
      "\xce\xac",
      "\xc2\xa3",
      "\xce\xad",
      "\xce\xae",
      "\xce\xaf",
      "\xcf\x8a",
      "\xce\x90",
      "\xcf\x8c",
      "\xcf\x8d",
      "\xce\x91",
      "\xce\x92",
      "\xce\x93",
      "\xce\x94",
      "\xce\x95",
      "\xce\x96",
      "\xce\x97",
      "\xc2\xbd",
      "\xce\x98",
      "\xce\x99",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x94\x82",
      "\xe2\x94\xa4",
      "\xce\x9a",
      "\xce\x9b",
      "\xce\x9d",
      "\xce\x9c",
      "\xe2\x95\xa3",
      "\xe2\x95\x91",
      "\xe2\x95\x97",
      "\xe2\x95\x9d",
      "\xce\x9e",
      "\xce\x9f",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\xb4",
      "\xe2\x94\xac",
      "\xe2\x94\x9c",
      "\xe2\x94\x80",
      "\xe2\x94\xbc",
      "\xce\xa0",
      "\xce\xa1",
      "\xe2\x95\x9a",
      "\xe2\x95\x94",
      "\xe2\x95\xa9",
      "\xe2\x95\xa6",
      "\xe2\x95\xa0",
      "\xe2\x95\x90",
      "\xe2\x95\xac",
      "\xce\xa3",
      "\xce\xa4",
      "\xce\xa5",
      "\xce\xa6",
      "\xce\xa7",
      "\xce\xa8",
      "\xce\xa9",
      "\xce\xb1",
      "\xce\xb2",
      "\xce\xb3",
      "\xe2\x94\x98",
      "\xe2\x94\x8c",
      "\xe2\x96\x88",
      "\xe2\x96\x84",
      "\xce\xb4",
      "\xce\xb5",
      "\xe2\x96\x80",
      "\xce\xb6",
      "\xce\xb7",
      "\xce\xb8",
      "\xce\xb9",
      "\xce\xba",
      "\xce\xbb",
      "\xce\xbc",
      "\xce\xbd",
      "\xce\xbe",
      "\xce\xbf",
      "\xcf\x80",
      "\xcf\x81",
      "\xcf\x83",
      "\xcf\x82",
      "\xcf\x84",
      "\xc2\xb4",
      "\xc2\xad",
      "\xc2\xb1",
      "\xcf\x85",
      "\xcf\x86",
      "\xcf\x87",
      "\xc2\xa7",
      "\xcf\x88",
      "\xcb\x9b",
      "\xc2\xb0",
      "\xc2\xa8",
      "\xcf\x89",
      "\xcf\x8b",
      "\xce\xb0",
      "\xcf\x8e",
      "\xe2\x96\xa0",
      "\xc2\xa0",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xff",
      0x000000a3 => "\x9c",
      0x000000a7 => "\xf5",
      0x000000a8 => "\xf9",
      0x000000ab => "\xae",
      0x000000ad => "\xf0",
      0x000000b0 => "\xf8",
      0x000000b1 => "\xf1",
      0x000000b4 => "\xef",
      0x000000bb => "\xaf",
      0x000000bd => "\xab",
      0x000000c4 => "\x8e",
      0x000000c7 => "\x80",
      0x000000d6 => "\x99",
      0x000000dc => "\x9a",
      0x000000e0 => "\x85",
      0x000000e2 => "\x83",
      0x000000e4 => "\x84",
      0x000000e7 => "\x87",
      0x000000e8 => "\x8a",
      0x000000e9 => "\x82",
      0x000000ea => "\x88",
      0x000000eb => "\x89",
      0x000000ee => "\x8c",
      0x000000ef => "\x8b",
      0x000000f4 => "\x93",
      0x000000f6 => "\x94",
      0x000000f9 => "\x97",
      0x000000fb => "\x96",
      0x000000fc => "\x81",
      0x000002db => "\xf7",
      0x00000386 => "\x86",
      0x00000388 => "\x8d",
      0x00000389 => "\x8f",
      0x0000038a => "\x90",
      0x0000038c => "\x92",
      0x0000038e => "\x95",
      0x0000038f => "\x98",
      0x00000390 => "\xa1",
      0x00000391 => "\xa4",
      0x00000392 => "\xa5",
      0x00000393 => "\xa6",
      0x00000394 => "\xa7",
      0x00000395 => "\xa8",
      0x00000396 => "\xa9",
      0x00000397 => "\xaa",
      0x00000398 => "\xac",
      0x00000399 => "\xad",
      0x0000039a => "\xb5",
      0x0000039b => "\xb6",
      0x0000039c => "\xb8",
      0x0000039d => "\xb7",
      0x0000039e => "\xbd",
      0x0000039f => "\xbe",
      0x000003a0 => "\xc6",
      0x000003a1 => "\xc7",
      0x000003a3 => "\xcf",
      0x000003a4 => "\xd0",
      0x000003a5 => "\xd1",
      0x000003a6 => "\xd2",
      0x000003a7 => "\xd3",
      0x000003a8 => "\xd4",
      0x000003a9 => "\xd5",
      0x000003ac => "\x9b",
      0x000003ad => "\x9d",
      0x000003ae => "\x9e",
      0x000003af => "\x9f",
      0x000003b0 => "\xfc",
      0x000003b1 => "\xd6",
      0x000003b2 => "\xd7",
      0x000003b3 => "\xd8",
      0x000003b4 => "\xdd",
      0x000003b5 => "\xde",
      0x000003b6 => "\xe0",
      0x000003b7 => "\xe1",
      0x000003b8 => "\xe2",
      0x000003b9 => "\xe3",
      0x000003ba => "\xe4",
      0x000003bb => "\xe5",
      0x000003bc => "\xe6",
      0x000003bd => "\xe7",
      0x000003be => "\xe8",
      0x000003bf => "\xe9",
      0x000003c0 => "\xea",
      0x000003c1 => "\xeb",
      0x000003c2 => "\xed",
      0x000003c3 => "\xec",
      0x000003c4 => "\xee",
      0x000003c5 => "\xf2",
      0x000003c6 => "\xf3",
      0x000003c7 => "\xf4",
      0x000003c8 => "\xf6",
      0x000003c9 => "\xfa",
      0x000003ca => "\xa0",
      0x000003cb => "\xfb",
      0x000003cc => "\xa2",
      0x000003cd => "\xa3",
      0x000003ce => "\xfd",
      0x00002500 => "\xc4",
      0x00002502 => "\xb3",
      0x0000250c => "\xda",
      0x00002510 => "\xbf",
      0x00002514 => "\xc0",
      0x00002518 => "\xd9",
      0x0000251c => "\xc3",
      0x00002524 => "\xb4",
      0x0000252c => "\xc2",
      0x00002534 => "\xc1",
      0x0000253c => "\xc5",
      0x00002550 => "\xcd",
      0x00002551 => "\xba",
      0x00002554 => "\xc9",
      0x00002557 => "\xbb",
      0x0000255a => "\xc8",
      0x0000255d => "\xbc",
      0x00002560 => "\xcc",
      0x00002563 => "\xb9",
      0x00002566 => "\xcb",
      0x00002569 => "\xca",
      0x0000256c => "\xce",
      0x00002580 => "\xdf",
      0x00002584 => "\xdc",
      0x00002588 => "\xdb",
      0x00002591 => "\xb0",
      0x00002592 => "\xb1",
      0x00002593 => "\xb2",
      0x000025a0 => "\xfe",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM851 - Conversion routines for IBM851
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM851.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP851
   alias 851
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      81 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      82 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      83 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      84 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      85 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      86 |  00000386 | GREEK CAPITAL LETTER ALPHA WITH TONOS
      87 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      88 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      89 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      8A |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      8B |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      8C |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      8D |  00000388 | GREEK CAPITAL LETTER EPSILON WITH TONOS
      8E |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      8F |  00000389 | GREEK CAPITAL LETTER ETA WITH TONOS
      90 |  0000038A | GREEK CAPITAL LETTER IOTA WITH TONOS
      92 |  0000038C | GREEK CAPITAL LETTER OMICRON WITH TONOS
      93 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      94 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      95 |  0000038E | GREEK CAPITAL LETTER UPSILON WITH TONOS
      96 |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      97 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      98 |  0000038F | GREEK CAPITAL LETTER OMEGA WITH TONOS
      99 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      9A |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      9B |  000003AC | GREEK SMALL LETTER ALPHA WITH TONOS
      9C |  000000A3 | POUND SIGN
      9D |  000003AD | GREEK SMALL LETTER EPSILON WITH TONOS
      9E |  000003AE | GREEK SMALL LETTER ETA WITH TONOS
      9F |  000003AF | GREEK SMALL LETTER IOTA WITH TONOS
      A0 |  000003CA | GREEK SMALL LETTER IOTA WITH DIALYTIKA
      A1 |  00000390 | GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
      A2 |  000003CC | GREEK SMALL LETTER OMICRON WITH TONOS
      A3 |  000003CD | GREEK SMALL LETTER UPSILON WITH TONOS
      A4 |  00000391 | GREEK CAPITAL LETTER ALPHA
      A5 |  00000392 | GREEK CAPITAL LETTER BETA
      A6 |  00000393 | GREEK CAPITAL LETTER GAMMA
      A7 |  00000394 | GREEK CAPITAL LETTER DELTA
      A8 |  00000395 | GREEK CAPITAL LETTER EPSILON
      A9 |  00000396 | GREEK CAPITAL LETTER ZETA
      AA |  00000397 | GREEK CAPITAL LETTER ETA
      AB |  000000BD | VULGAR FRACTION ONE HALF
      AC |  00000398 | GREEK CAPITAL LETTER THETA
      AD |  00000399 | GREEK CAPITAL LETTER IOTA
      AE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AF |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      B0 |  00002591 | LIGHT SHADE
      B1 |  00002592 | MEDIUM SHADE
      B2 |  00002593 | DARK SHADE
      B3 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      B4 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      B5 |  0000039A | GREEK CAPITAL LETTER KAPPA
      B6 |  0000039B | GREEK CAPITAL LETTER LAMDA
      B7 |  0000039D | GREEK CAPITAL LETTER NU
      B8 |  0000039C | GREEK CAPITAL LETTER MU
      B9 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      BA |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      BB |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      BC |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      BD |  0000039E | GREEK CAPITAL LETTER XI
      BE |  0000039F | GREEK CAPITAL LETTER OMICRON
      BF |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      C0 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      C1 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      C2 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      C3 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      C4 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      C5 |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      C6 |  000003A0 | GREEK CAPITAL LETTER PI
      C7 |  000003A1 | GREEK CAPITAL LETTER RHO
      C8 |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      C9 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      CA |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      CB |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      CC |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      CD |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      CE |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      CF |  000003A3 | GREEK CAPITAL LETTER SIGMA
      D0 |  000003A4 | GREEK CAPITAL LETTER TAU
      D1 |  000003A5 | GREEK CAPITAL LETTER UPSILON
      D2 |  000003A6 | GREEK CAPITAL LETTER PHI
      D3 |  000003A7 | GREEK CAPITAL LETTER CHI
      D4 |  000003A8 | GREEK CAPITAL LETTER PSI
      D5 |  000003A9 | GREEK CAPITAL LETTER OMEGA
      D6 |  000003B1 | GREEK SMALL LETTER ALPHA
      D7 |  000003B2 | GREEK SMALL LETTER BETA
      D8 |  000003B3 | GREEK SMALL LETTER GAMMA
      D9 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      DA |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      DB |  00002588 | FULL BLOCK
      DC |  00002584 | LOWER HALF BLOCK
      DD |  000003B4 | GREEK SMALL LETTER DELTA
      DE |  000003B5 | GREEK SMALL LETTER EPSILON
      DF |  00002580 | UPPER HALF BLOCK
      E0 |  000003B6 | GREEK SMALL LETTER ZETA
      E1 |  000003B7 | GREEK SMALL LETTER ETA
      E2 |  000003B8 | GREEK SMALL LETTER THETA
      E3 |  000003B9 | GREEK SMALL LETTER IOTA
      E4 |  000003BA | GREEK SMALL LETTER KAPPA
      E5 |  000003BB | GREEK SMALL LETTER LAMDA
      E6 |  000003BC | GREEK SMALL LETTER MU
      E7 |  000003BD | GREEK SMALL LETTER NU
      E8 |  000003BE | GREEK SMALL LETTER XI
      E9 |  000003BF | GREEK SMALL LETTER OMICRON
      EA |  000003C0 | GREEK SMALL LETTER PI
      EB |  000003C1 | GREEK SMALL LETTER RHO
      EC |  000003C3 | GREEK SMALL LETTER SIGMA
      ED |  000003C2 | GREEK SMALL LETTER FINAL SIGMA
      EE |  000003C4 | GREEK SMALL LETTER TAU
      EF |  000000B4 | ACUTE ACCENT
      F0 |  000000AD | SOFT HYPHEN
      F1 |  000000B1 | PLUS-MINUS SIGN
      F2 |  000003C5 | GREEK SMALL LETTER UPSILON
      F3 |  000003C6 | GREEK SMALL LETTER PHI
      F4 |  000003C7 | GREEK SMALL LETTER CHI
      F5 |  000000A7 | SECTION SIGN
      F6 |  000003C8 | GREEK SMALL LETTER PSI
      F7 |  000002DB | OGONEK
      F8 |  000000B0 | DEGREE SIGN
      F9 |  000000A8 | DIAERESIS
      FA |  000003C9 | GREEK SMALL LETTER OMEGA
      FB |  000003CB | GREEK SMALL LETTER UPSILON WITH DIALYTIKA
      FC |  000003B0 | GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
      FD |  000003CE | GREEK SMALL LETTER OMEGA WITH TONOS
      FE |  000025A0 | BLACK SQUARE
      FF |  000000A0 | NO-BREAK SPACE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM851

    $main::fatpacked{"Locale/RecodeData/IBM852.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM852';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM852.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM852;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c7,
      0x00fc,
      0x00e9,
      0x00e2,
      0x00e4,
      0x016f,
      0x0107,
      0x00e7,
      0x0142,
      0x00eb,
      0x0150,
      0x0151,
      0x00ee,
      0x0179,
      0x00c4,
      0x0106,
      0x00c9,
      0x0139,
      0x013a,
      0x00f4,
      0x00f6,
      0x013d,
      0x013e,
      0x015a,
      0x015b,
      0x00d6,
      0x00dc,
      0x0164,
      0x0165,
      0x0141,
      0x00d7,
      0x010d,
      0x00e1,
      0x00ed,
      0x00f3,
      0x00fa,
      0x0104,
      0x0105,
      0x017d,
      0x017e,
      0x0118,
      0x0119,
      0x00ac,
      0x017a,
      0x010c,
      0x015f,
      0x00ab,
      0x00bb,
      0x2591,
      0x2592,
      0x2593,
      0x2502,
      0x2524,
      0x00c1,
      0x00c2,
      0x011a,
      0x015e,
      0x2563,
      0x2551,
      0x2557,
      0x255d,
      0x017b,
      0x017c,
      0x2510,
      0x2514,
      0x2534,
      0x252c,
      0x251c,
      0x2500,
      0x253c,
      0x0102,
      0x0103,
      0x255a,
      0x2554,
      0x2569,
      0x2566,
      0x2560,
      0x2550,
      0x256c,
      0x00a4,
      0x0111,
      0x0110,
      0x010e,
      0x00cb,
      0x010f,
      0x0147,
      0x00cd,
      0x00ce,
      0x011b,
      0x2518,
      0x250c,
      0x2588,
      0x2584,
      0x0162,
      0x016e,
      0x2580,
      0x00d3,
      0x00df,
      0x00d4,
      0x0143,
      0x0144,
      0x0148,
      0x0160,
      0x0161,
      0x0154,
      0x00da,
      0x0155,
      0x0170,
      0x00fd,
      0x00dd,
      0x0163,
      0x00b4,
      0x00ad,
      0x02dd,
      0x02db,
      0x02c7,
      0x02d8,
      0x00a7,
      0x00f7,
      0x00b8,
      0x00b0,
      0x00a8,
      0x02d9,
      0x0171,
      0x0158,
      0x0159,
      0x25a0,
      0x00a0,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x87",
      "\xc3\xbc",
      "\xc3\xa9",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc5\xaf",
      "\xc4\x87",
      "\xc3\xa7",
      "\xc5\x82",
      "\xc3\xab",
      "\xc5\x90",
      "\xc5\x91",
      "\xc3\xae",
      "\xc5\xb9",
      "\xc3\x84",
      "\xc4\x86",
      "\xc3\x89",
      "\xc4\xb9",
      "\xc4\xba",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc4\xbd",
      "\xc4\xbe",
      "\xc5\x9a",
      "\xc5\x9b",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc5\xa4",
      "\xc5\xa5",
      "\xc5\x81",
      "\xc3\x97",
      "\xc4\x8d",
      "\xc3\xa1",
      "\xc3\xad",
      "\xc3\xb3",
      "\xc3\xba",
      "\xc4\x84",
      "\xc4\x85",
      "\xc5\xbd",
      "\xc5\xbe",
      "\xc4\x98",
      "\xc4\x99",
      "\xc2\xac",
      "\xc5\xba",
      "\xc4\x8c",
      "\xc5\x9f",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x94\x82",
      "\xe2\x94\xa4",
      "\xc3\x81",
      "\xc3\x82",
      "\xc4\x9a",
      "\xc5\x9e",
      "\xe2\x95\xa3",
      "\xe2\x95\x91",
      "\xe2\x95\x97",
      "\xe2\x95\x9d",
      "\xc5\xbb",
      "\xc5\xbc",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\xb4",
      "\xe2\x94\xac",
      "\xe2\x94\x9c",
      "\xe2\x94\x80",
      "\xe2\x94\xbc",
      "\xc4\x82",
      "\xc4\x83",
      "\xe2\x95\x9a",
      "\xe2\x95\x94",
      "\xe2\x95\xa9",
      "\xe2\x95\xa6",
      "\xe2\x95\xa0",
      "\xe2\x95\x90",
      "\xe2\x95\xac",
      "\xc2\xa4",
      "\xc4\x91",
      "\xc4\x90",
      "\xc4\x8e",
      "\xc3\x8b",
      "\xc4\x8f",
      "\xc5\x87",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc4\x9b",
      "\xe2\x94\x98",
      "\xe2\x94\x8c",
      "\xe2\x96\x88",
      "\xe2\x96\x84",
      "\xc5\xa2",
      "\xc5\xae",
      "\xe2\x96\x80",
      "\xc3\x93",
      "\xc3\x9f",
      "\xc3\x94",
      "\xc5\x83",
      "\xc5\x84",
      "\xc5\x88",
      "\xc5\xa0",
      "\xc5\xa1",
      "\xc5\x94",
      "\xc3\x9a",
      "\xc5\x95",
      "\xc5\xb0",
      "\xc3\xbd",
      "\xc3\x9d",
      "\xc5\xa3",
      "\xc2\xb4",
      "\xc2\xad",
      "\xcb\x9d",
      "\xcb\x9b",
      "\xcb\x87",
      "\xcb\x98",
      "\xc2\xa7",
      "\xc3\xb7",
      "\xc2\xb8",
      "\xc2\xb0",
      "\xc2\xa8",
      "\xcb\x99",
      "\xc5\xb1",
      "\xc5\x98",
      "\xc5\x99",
      "\xe2\x96\xa0",
      "\xc2\xa0",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xff",
      0x000000a4 => "\xcf",
      0x000000a7 => "\xf5",
      0x000000a8 => "\xf9",
      0x000000ab => "\xae",
      0x000000ac => "\xaa",
      0x000000ad => "\xf0",
      0x000000b0 => "\xf8",
      0x000000b4 => "\xef",
      0x000000b8 => "\xf7",
      0x000000bb => "\xaf",
      0x000000c1 => "\xb5",
      0x000000c2 => "\xb6",
      0x000000c4 => "\x8e",
      0x000000c7 => "\x80",
      0x000000c9 => "\x90",
      0x000000cb => "\xd3",
      0x000000cd => "\xd6",
      0x000000ce => "\xd7",
      0x000000d3 => "\xe0",
      0x000000d4 => "\xe2",
      0x000000d6 => "\x99",
      0x000000d7 => "\x9e",
      0x000000da => "\xe9",
      0x000000dc => "\x9a",
      0x000000dd => "\xed",
      0x000000df => "\xe1",
      0x000000e1 => "\xa0",
      0x000000e2 => "\x83",
      0x000000e4 => "\x84",
      0x000000e7 => "\x87",
      0x000000e9 => "\x82",
      0x000000eb => "\x89",
      0x000000ed => "\xa1",
      0x000000ee => "\x8c",
      0x000000f3 => "\xa2",
      0x000000f4 => "\x93",
      0x000000f6 => "\x94",
      0x000000f7 => "\xf6",
      0x000000fa => "\xa3",
      0x000000fc => "\x81",
      0x000000fd => "\xec",
      0x00000102 => "\xc6",
      0x00000103 => "\xc7",
      0x00000104 => "\xa4",
      0x00000105 => "\xa5",
      0x00000106 => "\x8f",
      0x00000107 => "\x86",
      0x0000010c => "\xac",
      0x0000010d => "\x9f",
      0x0000010e => "\xd2",
      0x0000010f => "\xd4",
      0x00000110 => "\xd1",
      0x00000111 => "\xd0",
      0x00000118 => "\xa8",
      0x00000119 => "\xa9",
      0x0000011a => "\xb7",
      0x0000011b => "\xd8",
      0x00000139 => "\x91",
      0x0000013a => "\x92",
      0x0000013d => "\x95",
      0x0000013e => "\x96",
      0x00000141 => "\x9d",
      0x00000142 => "\x88",
      0x00000143 => "\xe3",
      0x00000144 => "\xe4",
      0x00000147 => "\xd5",
      0x00000148 => "\xe5",
      0x00000150 => "\x8a",
      0x00000151 => "\x8b",
      0x00000154 => "\xe8",
      0x00000155 => "\xea",
      0x00000158 => "\xfc",
      0x00000159 => "\xfd",
      0x0000015a => "\x97",
      0x0000015b => "\x98",
      0x0000015e => "\xb8",
      0x0000015f => "\xad",
      0x00000160 => "\xe6",
      0x00000161 => "\xe7",
      0x00000162 => "\xdd",
      0x00000163 => "\xee",
      0x00000164 => "\x9b",
      0x00000165 => "\x9c",
      0x0000016e => "\xde",
      0x0000016f => "\x85",
      0x00000170 => "\xeb",
      0x00000171 => "\xfb",
      0x00000179 => "\x8d",
      0x0000017a => "\xab",
      0x0000017b => "\xbd",
      0x0000017c => "\xbe",
      0x0000017d => "\xa6",
      0x0000017e => "\xa7",
      0x000002c7 => "\xf3",
      0x000002d8 => "\xf4",
      0x000002d9 => "\xfa",
      0x000002db => "\xf2",
      0x000002dd => "\xf1",
      0x00002500 => "\xc4",
      0x00002502 => "\xb3",
      0x0000250c => "\xda",
      0x00002510 => "\xbf",
      0x00002514 => "\xc0",
      0x00002518 => "\xd9",
      0x0000251c => "\xc3",
      0x00002524 => "\xb4",
      0x0000252c => "\xc2",
      0x00002534 => "\xc1",
      0x0000253c => "\xc5",
      0x00002550 => "\xcd",
      0x00002551 => "\xba",
      0x00002554 => "\xc9",
      0x00002557 => "\xbb",
      0x0000255a => "\xc8",
      0x0000255d => "\xbc",
      0x00002560 => "\xcc",
      0x00002563 => "\xb9",
      0x00002566 => "\xcb",
      0x00002569 => "\xca",
      0x0000256c => "\xce",
      0x00002580 => "\xdf",
      0x00002584 => "\xdc",
      0x00002588 => "\xdb",
      0x00002591 => "\xb0",
      0x00002592 => "\xb1",
      0x00002593 => "\xb2",
      0x000025a0 => "\xfe",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM852 - Conversion routines for IBM852
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM852.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP852
   alias 852
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      81 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      82 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      83 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      84 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      85 |  0000016F | LATIN SMALL LETTER U WITH RING ABOVE
      86 |  00000107 | LATIN SMALL LETTER C WITH ACUTE
      87 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      88 |  00000142 | LATIN SMALL LETTER L WITH STROKE
      89 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      8A |  00000150 | LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
      8B |  00000151 | LATIN SMALL LETTER O WITH DOUBLE ACUTE
      8C |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      8D |  00000179 | LATIN CAPITAL LETTER Z WITH ACUTE
      8E |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      8F |  00000106 | LATIN CAPITAL LETTER C WITH ACUTE
      90 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      91 |  00000139 | LATIN CAPITAL LETTER L WITH ACUTE
      92 |  0000013A | LATIN SMALL LETTER L WITH ACUTE
      93 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      94 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      95 |  0000013D | LATIN CAPITAL LETTER L WITH CARON
      96 |  0000013E | LATIN SMALL LETTER L WITH CARON
      97 |  0000015A | LATIN CAPITAL LETTER S WITH ACUTE
      98 |  0000015B | LATIN SMALL LETTER S WITH ACUTE
      99 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      9A |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      9B |  00000164 | LATIN CAPITAL LETTER T WITH CARON
      9C |  00000165 | LATIN SMALL LETTER T WITH CARON
      9D |  00000141 | LATIN CAPITAL LETTER L WITH STROKE
      9E |  000000D7 | MULTIPLICATION SIGN
      9F |  0000010D | LATIN SMALL LETTER C WITH CARON
      A0 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      A1 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      A2 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      A3 |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      A4 |  00000104 | LATIN CAPITAL LETTER A WITH OGONEK
      A5 |  00000105 | LATIN SMALL LETTER A WITH OGONEK
      A6 |  0000017D | LATIN CAPITAL LETTER Z WITH CARON
      A7 |  0000017E | LATIN SMALL LETTER Z WITH CARON
      A8 |  00000118 | LATIN CAPITAL LETTER E WITH OGONEK
      A9 |  00000119 | LATIN SMALL LETTER E WITH OGONEK
      AA |  000000AC | NOT SIGN
      AB |  0000017A | LATIN SMALL LETTER Z WITH ACUTE
      AC |  0000010C | LATIN CAPITAL LETTER C WITH CARON
      AD |  0000015F | LATIN SMALL LETTER S WITH CEDILLA
      AE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AF |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      B0 |  00002591 | LIGHT SHADE
      B1 |  00002592 | MEDIUM SHADE
      B2 |  00002593 | DARK SHADE
      B3 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      B4 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      B5 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      B6 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      B7 |  0000011A | LATIN CAPITAL LETTER E WITH CARON
      B8 |  0000015E | LATIN CAPITAL LETTER S WITH CEDILLA
      B9 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      BA |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      BB |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      BC |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      BD |  0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE
      BE |  0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE
      BF |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      C0 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      C1 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      C2 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      C3 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      C4 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      C5 |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      C6 |  00000102 | LATIN CAPITAL LETTER A WITH BREVE
      C7 |  00000103 | LATIN SMALL LETTER A WITH BREVE
      C8 |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      C9 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      CA |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      CB |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      CC |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      CD |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      CE |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      CF |  000000A4 | CURRENCY SIGN
      D0 |  00000111 | LATIN SMALL LETTER D WITH STROKE
      D1 |  00000110 | LATIN CAPITAL LETTER D WITH STROKE
      D2 |  0000010E | LATIN CAPITAL LETTER D WITH CARON
      D3 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      D4 |  0000010F | LATIN SMALL LETTER D WITH CARON
      D5 |  00000147 | LATIN CAPITAL LETTER N WITH CARON
      D6 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      D7 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      D8 |  0000011B | LATIN SMALL LETTER E WITH CARON
      D9 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      DA |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      DB |  00002588 | FULL BLOCK
      DC |  00002584 | LOWER HALF BLOCK
      DD |  00000162 | LATIN CAPITAL LETTER T WITH CEDILLA
      DE |  0000016E | LATIN CAPITAL LETTER U WITH RING ABOVE
      DF |  00002580 | UPPER HALF BLOCK
      E0 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      E1 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E2 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      E3 |  00000143 | LATIN CAPITAL LETTER N WITH ACUTE
      E4 |  00000144 | LATIN SMALL LETTER N WITH ACUTE
      E5 |  00000148 | LATIN SMALL LETTER N WITH CARON
      E6 |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      E7 |  00000161 | LATIN SMALL LETTER S WITH CARON
      E8 |  00000154 | LATIN CAPITAL LETTER R WITH ACUTE
      E9 |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      EA |  00000155 | LATIN SMALL LETTER R WITH ACUTE
      EB |  00000170 | LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
      EC |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      ED |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      EE |  00000163 | LATIN SMALL LETTER T WITH CEDILLA
      EF |  000000B4 | ACUTE ACCENT
      F0 |  000000AD | SOFT HYPHEN
      F1 |  000002DD | DOUBLE ACUTE ACCENT
      F2 |  000002DB | OGONEK
      F3 |  000002C7 | CARON (Mandarin Chinese third tone)
      F4 |  000002D8 | BREVE
      F5 |  000000A7 | SECTION SIGN
      F6 |  000000F7 | DIVISION SIGN
      F7 |  000000B8 | CEDILLA
      F8 |  000000B0 | DEGREE SIGN
      F9 |  000000A8 | DIAERESIS
      FA |  000002D9 | DOT ABOVE (Mandarin Chinese light tone)
      FB |  00000171 | LATIN SMALL LETTER U WITH DOUBLE ACUTE
      FC |  00000158 | LATIN CAPITAL LETTER R WITH CARON
      FD |  00000159 | LATIN SMALL LETTER R WITH CARON
      FE |  000025A0 | BLACK SQUARE
      FF |  000000A0 | NO-BREAK SPACE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM852

    $main::fatpacked{"Locale/RecodeData/IBM855.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM855';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM855.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM855;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0452,
      0x0402,
      0x0453,
      0x0403,
      0x0451,
      0x0401,
      0x0454,
      0x0404,
      0x0455,
      0x0405,
      0x0456,
      0x0406,
      0x0457,
      0x0407,
      0x0458,
      0x0408,
      0x0459,
      0x0409,
      0x045a,
      0x040a,
      0x045b,
      0x040b,
      0x045c,
      0x040c,
      0x045e,
      0x040e,
      0x045f,
      0x040f,
      0x044e,
      0x042e,
      0x044a,
      0x042a,
      0x0430,
      0x0410,
      0x0431,
      0x0411,
      0x0446,
      0x0426,
      0x0434,
      0x0414,
      0x0435,
      0x0415,
      0x0444,
      0x0424,
      0x0433,
      0x0413,
      0x00ab,
      0x00bb,
      0x2591,
      0x2592,
      0x2593,
      0x2502,
      0x2524,
      0x0445,
      0x0425,
      0x0438,
      0x0418,
      0x2563,
      0x2551,
      0x2557,
      0x255d,
      0x0439,
      0x0419,
      0x2510,
      0x2514,
      0x2534,
      0x252c,
      0x251c,
      0x2500,
      0x253c,
      0x043a,
      0x041a,
      0x255a,
      0x2554,
      0x2569,
      0x2566,
      0x2560,
      0x2550,
      0x256c,
      0x00a4,
      0x043b,
      0x041b,
      0x043c,
      0x041c,
      0x043d,
      0x041d,
      0x043e,
      0x041e,
      0x043f,
      0x2518,
      0x250c,
      0x2588,
      0x2584,
      0x041f,
      0x044f,
      0x2580,
      0x042f,
      0x0440,
      0x0420,
      0x0441,
      0x0421,
      0x0442,
      0x0422,
      0x0443,
      0x0423,
      0x0436,
      0x0416,
      0x0432,
      0x0412,
      0x044c,
      0x042c,
      0x2116,
      0x00ad,
      0x044b,
      0x042b,
      0x0437,
      0x0417,
      0x0448,
      0x0428,
      0x044d,
      0x042d,
      0x0449,
      0x0429,
      0x0447,
      0x0427,
      0x00a7,
      0x25a0,
      0x00a0,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xd1\x92",
      "\xd0\x82",
      "\xd1\x93",
      "\xd0\x83",
      "\xd1\x91",
      "\xd0\x81",
      "\xd1\x94",
      "\xd0\x84",
      "\xd1\x95",
      "\xd0\x85",
      "\xd1\x96",
      "\xd0\x86",
      "\xd1\x97",
      "\xd0\x87",
      "\xd1\x98",
      "\xd0\x88",
      "\xd1\x99",
      "\xd0\x89",
      "\xd1\x9a",
      "\xd0\x8a",
      "\xd1\x9b",
      "\xd0\x8b",
      "\xd1\x9c",
      "\xd0\x8c",
      "\xd1\x9e",
      "\xd0\x8e",
      "\xd1\x9f",
      "\xd0\x8f",
      "\xd1\x8e",
      "\xd0\xae",
      "\xd1\x8a",
      "\xd0\xaa",
      "\xd0\xb0",
      "\xd0\x90",
      "\xd0\xb1",
      "\xd0\x91",
      "\xd1\x86",
      "\xd0\xa6",
      "\xd0\xb4",
      "\xd0\x94",
      "\xd0\xb5",
      "\xd0\x95",
      "\xd1\x84",
      "\xd0\xa4",
      "\xd0\xb3",
      "\xd0\x93",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x94\x82",
      "\xe2\x94\xa4",
      "\xd1\x85",
      "\xd0\xa5",
      "\xd0\xb8",
      "\xd0\x98",
      "\xe2\x95\xa3",
      "\xe2\x95\x91",
      "\xe2\x95\x97",
      "\xe2\x95\x9d",
      "\xd0\xb9",
      "\xd0\x99",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\xb4",
      "\xe2\x94\xac",
      "\xe2\x94\x9c",
      "\xe2\x94\x80",
      "\xe2\x94\xbc",
      "\xd0\xba",
      "\xd0\x9a",
      "\xe2\x95\x9a",
      "\xe2\x95\x94",
      "\xe2\x95\xa9",
      "\xe2\x95\xa6",
      "\xe2\x95\xa0",
      "\xe2\x95\x90",
      "\xe2\x95\xac",
      "\xc2\xa4",
      "\xd0\xbb",
      "\xd0\x9b",
      "\xd0\xbc",
      "\xd0\x9c",
      "\xd0\xbd",
      "\xd0\x9d",
      "\xd0\xbe",
      "\xd0\x9e",
      "\xd0\xbf",
      "\xe2\x94\x98",
      "\xe2\x94\x8c",
      "\xe2\x96\x88",
      "\xe2\x96\x84",
      "\xd0\x9f",
      "\xd1\x8f",
      "\xe2\x96\x80",
      "\xd0\xaf",
      "\xd1\x80",
      "\xd0\xa0",
      "\xd1\x81",
      "\xd0\xa1",
      "\xd1\x82",
      "\xd0\xa2",
      "\xd1\x83",
      "\xd0\xa3",
      "\xd0\xb6",
      "\xd0\x96",
      "\xd0\xb2",
      "\xd0\x92",
      "\xd1\x8c",
      "\xd0\xac",
      "\xe2\x84\x96",
      "\xc2\xad",
      "\xd1\x8b",
      "\xd0\xab",
      "\xd0\xb7",
      "\xd0\x97",
      "\xd1\x88",
      "\xd0\xa8",
      "\xd1\x8d",
      "\xd0\xad",
      "\xd1\x89",
      "\xd0\xa9",
      "\xd1\x87",
      "\xd0\xa7",
      "\xc2\xa7",
      "\xe2\x96\xa0",
      "\xc2\xa0",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xff",
      0x000000a4 => "\xcf",
      0x000000a7 => "\xfd",
      0x000000ab => "\xae",
      0x000000ad => "\xf0",
      0x000000bb => "\xaf",
      0x00000401 => "\x85",
      0x00000402 => "\x81",
      0x00000403 => "\x83",
      0x00000404 => "\x87",
      0x00000405 => "\x89",
      0x00000406 => "\x8b",
      0x00000407 => "\x8d",
      0x00000408 => "\x8f",
      0x00000409 => "\x91",
      0x0000040a => "\x93",
      0x0000040b => "\x95",
      0x0000040c => "\x97",
      0x0000040e => "\x99",
      0x0000040f => "\x9b",
      0x00000410 => "\xa1",
      0x00000411 => "\xa3",
      0x00000412 => "\xec",
      0x00000413 => "\xad",
      0x00000414 => "\xa7",
      0x00000415 => "\xa9",
      0x00000416 => "\xea",
      0x00000417 => "\xf4",
      0x00000418 => "\xb8",
      0x00000419 => "\xbe",
      0x0000041a => "\xc7",
      0x0000041b => "\xd1",
      0x0000041c => "\xd3",
      0x0000041d => "\xd5",
      0x0000041e => "\xd7",
      0x0000041f => "\xdd",
      0x00000420 => "\xe2",
      0x00000421 => "\xe4",
      0x00000422 => "\xe6",
      0x00000423 => "\xe8",
      0x00000424 => "\xab",
      0x00000425 => "\xb6",
      0x00000426 => "\xa5",
      0x00000427 => "\xfc",
      0x00000428 => "\xf6",
      0x00000429 => "\xfa",
      0x0000042a => "\x9f",
      0x0000042b => "\xf2",
      0x0000042c => "\xee",
      0x0000042d => "\xf8",
      0x0000042e => "\x9d",
      0x0000042f => "\xe0",
      0x00000430 => "\xa0",
      0x00000431 => "\xa2",
      0x00000432 => "\xeb",
      0x00000433 => "\xac",
      0x00000434 => "\xa6",
      0x00000435 => "\xa8",
      0x00000436 => "\xe9",
      0x00000437 => "\xf3",
      0x00000438 => "\xb7",
      0x00000439 => "\xbd",
      0x0000043a => "\xc6",
      0x0000043b => "\xd0",
      0x0000043c => "\xd2",
      0x0000043d => "\xd4",
      0x0000043e => "\xd6",
      0x0000043f => "\xd8",
      0x00000440 => "\xe1",
      0x00000441 => "\xe3",
      0x00000442 => "\xe5",
      0x00000443 => "\xe7",
      0x00000444 => "\xaa",
      0x00000445 => "\xb5",
      0x00000446 => "\xa4",
      0x00000447 => "\xfb",
      0x00000448 => "\xf5",
      0x00000449 => "\xf9",
      0x0000044a => "\x9e",
      0x0000044b => "\xf1",
      0x0000044c => "\xed",
      0x0000044d => "\xf7",
      0x0000044e => "\x9c",
      0x0000044f => "\xde",
      0x00000451 => "\x84",
      0x00000452 => "\x80",
      0x00000453 => "\x82",
      0x00000454 => "\x86",
      0x00000455 => "\x88",
      0x00000456 => "\x8a",
      0x00000457 => "\x8c",
      0x00000458 => "\x8e",
      0x00000459 => "\x90",
      0x0000045a => "\x92",
      0x0000045b => "\x94",
      0x0000045c => "\x96",
      0x0000045e => "\x98",
      0x0000045f => "\x9a",
      0x00002116 => "\xef",
      0x00002500 => "\xc4",
      0x00002502 => "\xb3",
      0x0000250c => "\xda",
      0x00002510 => "\xbf",
      0x00002514 => "\xc0",
      0x00002518 => "\xd9",
      0x0000251c => "\xc3",
      0x00002524 => "\xb4",
      0x0000252c => "\xc2",
      0x00002534 => "\xc1",
      0x0000253c => "\xc5",
      0x00002550 => "\xcd",
      0x00002551 => "\xba",
      0x00002554 => "\xc9",
      0x00002557 => "\xbb",
      0x0000255a => "\xc8",
      0x0000255d => "\xbc",
      0x00002560 => "\xcc",
      0x00002563 => "\xb9",
      0x00002566 => "\xcb",
      0x00002569 => "\xca",
      0x0000256c => "\xce",
      0x00002580 => "\xdf",
      0x00002584 => "\xdc",
      0x00002588 => "\xdb",
      0x00002591 => "\xb0",
      0x00002592 => "\xb1",
      0x00002593 => "\xb2",
      0x000025a0 => "\xfe",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM855 - Conversion routines for IBM855
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM855.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP855
   alias 855
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000452 | CYRILLIC SMALL LETTER DJE (Serbocroatian)
      81 |  00000402 | CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
      82 |  00000453 | CYRILLIC SMALL LETTER GJE
      83 |  00000403 | CYRILLIC CAPITAL LETTER GJE
      84 |  00000451 | CYRILLIC SMALL LETTER IO
      85 |  00000401 | CYRILLIC CAPITAL LETTER IO
      86 |  00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE
      87 |  00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE
      88 |  00000455 | CYRILLIC SMALL LETTER DZE
      89 |  00000405 | CYRILLIC CAPITAL LETTER DZE
      8A |  00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
      8B |  00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
      8C |  00000457 | CYRILLIC SMALL LETTER YI (Ukrainian)
      8D |  00000407 | CYRILLIC CAPITAL LETTER YI (Ukrainian)
      8E |  00000458 | CYRILLIC SMALL LETTER JE
      8F |  00000408 | CYRILLIC CAPITAL LETTER JE
      90 |  00000459 | CYRILLIC SMALL LETTER LJE
      91 |  00000409 | CYRILLIC CAPITAL LETTER LJE
      92 |  0000045A | CYRILLIC SMALL LETTER NJE
      93 |  0000040A | CYRILLIC CAPITAL LETTER NJE
      94 |  0000045B | CYRILLIC SMALL LETTER TSHE (Serbocroatian)
      95 |  0000040B | CYRILLIC CAPITAL LETTER TSHE
      96 |  0000045C | CYRILLIC SMALL LETTER KJE
      97 |  0000040C | CYRILLIC CAPITAL LETTER KJE
      98 |  0000045E | CYRILLIC SMALL LETTER SHORT U (Byelorussian)
      99 |  0000040E | CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
      9A |  0000045F | CYRILLIC SMALL LETTER DZHE
      9B |  0000040F | CYRILLIC CAPITAL LETTER DZHE
      9C |  0000044E | CYRILLIC SMALL LETTER YU
      9D |  0000042E | CYRILLIC CAPITAL LETTER YU
      9E |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      9F |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
      A0 |  00000430 | CYRILLIC SMALL LETTER A
      A1 |  00000410 | CYRILLIC CAPITAL LETTER A
      A2 |  00000431 | CYRILLIC SMALL LETTER BE
      A3 |  00000411 | CYRILLIC CAPITAL LETTER BE
      A4 |  00000446 | CYRILLIC SMALL LETTER TSE
      A5 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      A6 |  00000434 | CYRILLIC SMALL LETTER DE
      A7 |  00000414 | CYRILLIC CAPITAL LETTER DE
      A8 |  00000435 | CYRILLIC SMALL LETTER IE
      A9 |  00000415 | CYRILLIC CAPITAL LETTER IE
      AA |  00000444 | CYRILLIC SMALL LETTER EF
      AB |  00000424 | CYRILLIC CAPITAL LETTER EF
      AC |  00000433 | CYRILLIC SMALL LETTER GHE
      AD |  00000413 | CYRILLIC CAPITAL LETTER GHE
      AE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AF |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      B0 |  00002591 | LIGHT SHADE
      B1 |  00002592 | MEDIUM SHADE
      B2 |  00002593 | DARK SHADE
      B3 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      B4 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      B5 |  00000445 | CYRILLIC SMALL LETTER HA
      B6 |  00000425 | CYRILLIC CAPITAL LETTER HA
      B7 |  00000438 | CYRILLIC SMALL LETTER I
      B8 |  00000418 | CYRILLIC CAPITAL LETTER I
      B9 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      BA |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      BB |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      BC |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      BD |  00000439 | CYRILLIC SMALL LETTER SHORT I
      BE |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      BF |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      C0 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      C1 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      C2 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      C3 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      C4 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      C5 |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      C6 |  0000043A | CYRILLIC SMALL LETTER KA
      C7 |  0000041A | CYRILLIC CAPITAL LETTER KA
      C8 |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      C9 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      CA |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      CB |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      CC |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      CD |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      CE |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      CF |  000000A4 | CURRENCY SIGN
      D0 |  0000043B | CYRILLIC SMALL LETTER EL
      D1 |  0000041B | CYRILLIC CAPITAL LETTER EL
      D2 |  0000043C | CYRILLIC SMALL LETTER EM
      D3 |  0000041C | CYRILLIC CAPITAL LETTER EM
      D4 |  0000043D | CYRILLIC SMALL LETTER EN
      D5 |  0000041D | CYRILLIC CAPITAL LETTER EN
      D6 |  0000043E | CYRILLIC SMALL LETTER O
      D7 |  0000041E | CYRILLIC CAPITAL LETTER O
      D8 |  0000043F | CYRILLIC SMALL LETTER PE
      D9 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      DA |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      DB |  00002588 | FULL BLOCK
      DC |  00002584 | LOWER HALF BLOCK
      DD |  0000041F | CYRILLIC CAPITAL LETTER PE
      DE |  0000044F | CYRILLIC SMALL LETTER YA
      DF |  00002580 | UPPER HALF BLOCK
      E0 |  0000042F | CYRILLIC CAPITAL LETTER YA
      E1 |  00000440 | CYRILLIC SMALL LETTER ER
      E2 |  00000420 | CYRILLIC CAPITAL LETTER ER
      E3 |  00000441 | CYRILLIC SMALL LETTER ES
      E4 |  00000421 | CYRILLIC CAPITAL LETTER ES
      E5 |  00000442 | CYRILLIC SMALL LETTER TE
      E6 |  00000422 | CYRILLIC CAPITAL LETTER TE
      E7 |  00000443 | CYRILLIC SMALL LETTER U
      E8 |  00000423 | CYRILLIC CAPITAL LETTER U
      E9 |  00000436 | CYRILLIC SMALL LETTER ZHE
      EA |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      EB |  00000432 | CYRILLIC SMALL LETTER VE
      EC |  00000412 | CYRILLIC CAPITAL LETTER VE
      ED |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      EE |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      EF |  00002116 | NUMERO SIGN
      F0 |  000000AD | SOFT HYPHEN
      F1 |  0000044B | CYRILLIC SMALL LETTER YERU
      F2 |  0000042B | CYRILLIC CAPITAL LETTER YERU
      F3 |  00000437 | CYRILLIC SMALL LETTER ZE
      F4 |  00000417 | CYRILLIC CAPITAL LETTER ZE
      F5 |  00000448 | CYRILLIC SMALL LETTER SHA
      F6 |  00000428 | CYRILLIC CAPITAL LETTER SHA
      F7 |  0000044D | CYRILLIC SMALL LETTER E
      F8 |  0000042D | CYRILLIC CAPITAL LETTER E
      F9 |  00000449 | CYRILLIC SMALL LETTER SHCHA
      FA |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      FB |  00000447 | CYRILLIC SMALL LETTER CHE
      FC |  00000427 | CYRILLIC CAPITAL LETTER CHE
      FD |  000000A7 | SECTION SIGN
      FE |  000025A0 | BLACK SQUARE
      FF |  000000A0 | NO-BREAK SPACE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM855

    $main::fatpacked{"Locale/RecodeData/IBM857.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM857';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM857.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM857;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c7,
      0x00fc,
      0x00e9,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e5,
      0x00e7,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ef,
      0x00ee,
      0x0131,
      0x00c4,
      0x00c5,
      0x00c9,
      0x00e6,
      0x00c6,
      0x00f4,
      0x00f6,
      0x00f2,
      0x00fb,
      0x00f9,
      0x0130,
      0x00d6,
      0x00dc,
      0x00f8,
      0x00a3,
      0x00d8,
      0x015e,
      0x015f,
      0x00e1,
      0x00ed,
      0x00f3,
      0x00fa,
      0x00f1,
      0x00d1,
      0x011e,
      0x011f,
      0x00bf,
      0x00ae,
      0x00ac,
      0x00bd,
      0x00bc,
      0x00a1,
      0x00ab,
      0x00bb,
      0x2591,
      0x2592,
      0x2593,
      0x2502,
      0x2524,
      0x00c1,
      0x00c2,
      0x00c0,
      0x00a9,
      0x2563,
      0x2551,
      0x2557,
      0x255d,
      0x00a2,
      0x00a5,
      0x2510,
      0x2514,
      0x2534,
      0x252c,
      0x251c,
      0x2500,
      0x253c,
      0x00e3,
      0x00c3,
      0x255a,
      0x2554,
      0x2569,
      0x2566,
      0x2560,
      0x2550,
      0x256c,
      0x00a4,
      0x00ba,
      0x00aa,
      0x00ca,
      0x00cb,
      0x00c8,
      0xfffd,
      0x00cd,
      0x00ce,
      0x00cf,
      0x2518,
      0x250c,
      0x2588,
      0x2584,
      0x00a6,
      0x00cc,
      0x2580,
      0x00d3,
      0x00df,
      0x00d4,
      0x00d2,
      0x00f5,
      0x00d5,
      0x00b5,
      0xfffd,
      0x00d7,
      0x00da,
      0x00db,
      0x00d9,
      0x00ec,
      0x00ff,
      0x00af,
      0x00b4,
      0x00ad,
      0x00b1,
      0xfffd,
      0x00be,
      0x00b6,
      0x00a7,
      0x00f7,
      0x00b8,
      0x00b0,
      0x00a8,
      0x00b7,
      0x00b9,
      0x00b3,
      0x00b2,
      0x25a0,
      0x00a0,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x87",
      "\xc3\xbc",
      "\xc3\xa9",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xaf",
      "\xc3\xae",
      "\xc4\xb1",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x89",
      "\xc3\xa6",
      "\xc3\x86",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb2",
      "\xc3\xbb",
      "\xc3\xb9",
      "\xc4\xb0",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc3\xb8",
      "\xc2\xa3",
      "\xc3\x98",
      "\xc5\x9e",
      "\xc5\x9f",
      "\xc3\xa1",
      "\xc3\xad",
      "\xc3\xb3",
      "\xc3\xba",
      "\xc3\xb1",
      "\xc3\x91",
      "\xc4\x9e",
      "\xc4\x9f",
      "\xc2\xbf",
      "\xc2\xae",
      "\xc2\xac",
      "\xc2\xbd",
      "\xc2\xbc",
      "\xc2\xa1",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x94\x82",
      "\xe2\x94\xa4",
      "\xc3\x81",
      "\xc3\x82",
      "\xc3\x80",
      "\xc2\xa9",
      "\xe2\x95\xa3",
      "\xe2\x95\x91",
      "\xe2\x95\x97",
      "\xe2\x95\x9d",
      "\xc2\xa2",
      "\xc2\xa5",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\xb4",
      "\xe2\x94\xac",
      "\xe2\x94\x9c",
      "\xe2\x94\x80",
      "\xe2\x94\xbc",
      "\xc3\xa3",
      "\xc3\x83",
      "\xe2\x95\x9a",
      "\xe2\x95\x94",
      "\xe2\x95\xa9",
      "\xe2\x95\xa6",
      "\xe2\x95\xa0",
      "\xe2\x95\x90",
      "\xe2\x95\xac",
      "\xc2\xa4",
      "\xc2\xba",
      "\xc2\xaa",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x88",
      "\xef\xbf\xbd",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xe2\x94\x98",
      "\xe2\x94\x8c",
      "\xe2\x96\x88",
      "\xe2\x96\x84",
      "\xc2\xa6",
      "\xc3\x8c",
      "\xe2\x96\x80",
      "\xc3\x93",
      "\xc3\x9f",
      "\xc3\x94",
      "\xc3\x92",
      "\xc3\xb5",
      "\xc3\x95",
      "\xc2\xb5",
      "\xef\xbf\xbd",
      "\xc3\x97",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x99",
      "\xc3\xac",
      "\xc3\xbf",
      "\xc2\xaf",
      "\xc2\xb4",
      "\xc2\xad",
      "\xc2\xb1",
      "\xef\xbf\xbd",
      "\xc2\xbe",
      "\xc2\xb6",
      "\xc2\xa7",
      "\xc3\xb7",
      "\xc2\xb8",
      "\xc2\xb0",
      "\xc2\xa8",
      "\xc2\xb7",
      "\xc2\xb9",
      "\xc2\xb3",
      "\xc2\xb2",
      "\xe2\x96\xa0",
      "\xc2\xa0",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xff",
      0x000000a1 => "\xad",
      0x000000a2 => "\xbd",
      0x000000a3 => "\x9c",
      0x000000a4 => "\xcf",
      0x000000a5 => "\xbe",
      0x000000a6 => "\xdd",
      0x000000a7 => "\xf5",
      0x000000a8 => "\xf9",
      0x000000a9 => "\xb8",
      0x000000aa => "\xd1",
      0x000000ab => "\xae",
      0x000000ac => "\xaa",
      0x000000ad => "\xf0",
      0x000000ae => "\xa9",
      0x000000af => "\xee",
      0x000000b0 => "\xf8",
      0x000000b1 => "\xf1",
      0x000000b2 => "\xfd",
      0x000000b3 => "\xfc",
      0x000000b4 => "\xef",
      0x000000b5 => "\xe6",
      0x000000b6 => "\xf4",
      0x000000b7 => "\xfa",
      0x000000b8 => "\xf7",
      0x000000b9 => "\xfb",
      0x000000ba => "\xd0",
      0x000000bb => "\xaf",
      0x000000bc => "\xac",
      0x000000bd => "\xab",
      0x000000be => "\xf3",
      0x000000bf => "\xa8",
      0x000000c0 => "\xb7",
      0x000000c1 => "\xb5",
      0x000000c2 => "\xb6",
      0x000000c3 => "\xc7",
      0x000000c4 => "\x8e",
      0x000000c5 => "\x8f",
      0x000000c6 => "\x92",
      0x000000c7 => "\x80",
      0x000000c8 => "\xd4",
      0x000000c9 => "\x90",
      0x000000ca => "\xd2",
      0x000000cb => "\xd3",
      0x000000cc => "\xde",
      0x000000cd => "\xd6",
      0x000000ce => "\xd7",
      0x000000cf => "\xd8",
      0x000000d1 => "\xa5",
      0x000000d2 => "\xe3",
      0x000000d3 => "\xe0",
      0x000000d4 => "\xe2",
      0x000000d5 => "\xe5",
      0x000000d6 => "\x99",
      0x000000d7 => "\xe8",
      0x000000d8 => "\x9d",
      0x000000d9 => "\xeb",
      0x000000da => "\xe9",
      0x000000db => "\xea",
      0x000000dc => "\x9a",
      0x000000df => "\xe1",
      0x000000e0 => "\x85",
      0x000000e1 => "\xa0",
      0x000000e2 => "\x83",
      0x000000e3 => "\xc6",
      0x000000e4 => "\x84",
      0x000000e5 => "\x86",
      0x000000e6 => "\x91",
      0x000000e7 => "\x87",
      0x000000e8 => "\x8a",
      0x000000e9 => "\x82",
      0x000000ea => "\x88",
      0x000000eb => "\x89",
      0x000000ec => "\xec",
      0x000000ed => "\xa1",
      0x000000ee => "\x8c",
      0x000000ef => "\x8b",
      0x000000f1 => "\xa4",
      0x000000f2 => "\x95",
      0x000000f3 => "\xa2",
      0x000000f4 => "\x93",
      0x000000f5 => "\xe4",
      0x000000f6 => "\x94",
      0x000000f7 => "\xf6",
      0x000000f8 => "\x9b",
      0x000000f9 => "\x97",
      0x000000fa => "\xa3",
      0x000000fb => "\x96",
      0x000000fc => "\x81",
      0x000000ff => "\xed",
      0x0000011e => "\xa6",
      0x0000011f => "\xa7",
      0x00000130 => "\x98",
      0x00000131 => "\x8d",
      0x0000015e => "\x9e",
      0x0000015f => "\x9f",
      0x00002500 => "\xc4",
      0x00002502 => "\xb3",
      0x0000250c => "\xda",
      0x00002510 => "\xbf",
      0x00002514 => "\xc0",
      0x00002518 => "\xd9",
      0x0000251c => "\xc3",
      0x00002524 => "\xb4",
      0x0000252c => "\xc2",
      0x00002534 => "\xc1",
      0x0000253c => "\xc5",
      0x00002550 => "\xcd",
      0x00002551 => "\xba",
      0x00002554 => "\xc9",
      0x00002557 => "\xbb",
      0x0000255a => "\xc8",
      0x0000255d => "\xbc",
      0x00002560 => "\xcc",
      0x00002563 => "\xb9",
      0x00002566 => "\xcb",
      0x00002569 => "\xca",
      0x0000256c => "\xce",
      0x00002580 => "\xdf",
      0x00002584 => "\xdc",
      0x00002588 => "\xdb",
      0x00002591 => "\xb0",
      0x00002592 => "\xb1",
      0x00002593 => "\xb2",
      0x000025a0 => "\xfe",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM857 - Conversion routines for IBM857
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM857.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP857
   alias 857
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      81 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      82 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      83 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      84 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      85 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      86 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      87 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      88 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      89 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      8A |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      8B |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      8C |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      8D |  00000131 | LATIN SMALL LETTER DOTLESS I
      8E |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      8F |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      90 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      91 |  000000E6 | LATIN SMALL LETTER AE
      92 |  000000C6 | LATIN CAPITAL LETTER AE
      93 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      94 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      95 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      96 |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      97 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      98 |  00000130 | LATIN CAPITAL LETTER I WITH DOT ABOVE
      99 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      9A |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      9B |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      9C |  000000A3 | POUND SIGN
      9D |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      9E |  0000015E | LATIN CAPITAL LETTER S WITH CEDILLA
      9F |  0000015F | LATIN SMALL LETTER S WITH CEDILLA
      A0 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      A1 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      A2 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      A3 |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      A4 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      A5 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      A6 |  0000011E | LATIN CAPITAL LETTER G WITH BREVE
      A7 |  0000011F | LATIN SMALL LETTER G WITH BREVE
      A8 |  000000BF | INVERTED QUESTION MARK
      A9 |  000000AE | REGISTERED SIGN
      AA |  000000AC | NOT SIGN
      AB |  000000BD | VULGAR FRACTION ONE HALF
      AC |  000000BC | VULGAR FRACTION ONE QUARTER
      AD |  000000A1 | INVERTED EXCLAMATION MARK
      AE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AF |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      B0 |  00002591 | LIGHT SHADE
      B1 |  00002592 | MEDIUM SHADE
      B2 |  00002593 | DARK SHADE
      B3 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      B4 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      B5 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      B6 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      B7 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      B8 |  000000A9 | COPYRIGHT SIGN
      B9 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      BA |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      BB |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      BC |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      BD |  000000A2 | CENT SIGN
      BE |  000000A5 | YEN SIGN
      BF |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      C0 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      C1 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      C2 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      C3 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      C4 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      C5 |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      C6 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      C7 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      C8 |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      C9 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      CA |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      CB |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      CC |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      CD |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      CE |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      CF |  000000A4 | CURRENCY SIGN
      D0 |  000000BA | MASCULINE ORDINAL INDICATOR
      D1 |  000000AA | FEMININE ORDINAL INDICATOR
      D2 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      D3 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      D4 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      D6 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      D7 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      D8 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      D9 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      DA |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      DB |  00002588 | FULL BLOCK
      DC |  00002584 | LOWER HALF BLOCK
      DD |  000000A6 | BROKEN BAR
      DE |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      DF |  00002580 | UPPER HALF BLOCK
      E0 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      E1 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E2 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      E3 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      E4 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      E5 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      E6 |  000000B5 | MICRO SIGN
      E8 |  000000D7 | MULTIPLICATION SIGN
      E9 |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      EA |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      EB |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      EC |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      ED |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      EE |  000000AF | MACRON
      EF |  000000B4 | ACUTE ACCENT
      F0 |  000000AD | SOFT HYPHEN
      F1 |  000000B1 | PLUS-MINUS SIGN
      F3 |  000000BE | VULGAR FRACTION THREE QUARTERS
      F4 |  000000B6 | PILCROW SIGN
      F5 |  000000A7 | SECTION SIGN
      F6 |  000000F7 | DIVISION SIGN
      F7 |  000000B8 | CEDILLA
      F8 |  000000B0 | DEGREE SIGN
      F9 |  000000A8 | DIAERESIS
      FA |  000000B7 | MIDDLE DOT
      FB |  000000B9 | SUPERSCRIPT ONE
      FC |  000000B3 | SUPERSCRIPT THREE
      FD |  000000B2 | SUPERSCRIPT TWO
      FE |  000025A0 | BLACK SQUARE
      FF |  000000A0 | NO-BREAK SPACE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM857

    $main::fatpacked{"Locale/RecodeData/IBM860.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM860';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM860.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM860;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c7,
      0x00fc,
      0x00e9,
      0x00e2,
      0x00e3,
      0x00e0,
      0x00c1,
      0x00e7,
      0x00ea,
      0x00ca,
      0x00e8,
      0x00cd,
      0x00d4,
      0x00ec,
      0x00c3,
      0x00c2,
      0x00c9,
      0x00c0,
      0x00c8,
      0x00f4,
      0x00f5,
      0x00f2,
      0x00da,
      0x00f9,
      0x00cc,
      0x00d5,
      0x00dc,
      0x00a2,
      0x00a3,
      0x00d9,
      0x20a7,
      0x00d3,
      0x00e1,
      0x00ed,
      0x00f3,
      0x00fa,
      0x00f1,
      0x00d1,
      0x00aa,
      0x00ba,
      0x00bf,
      0x00d2,
      0x00ac,
      0x00bd,
      0x00bc,
      0x00a1,
      0x00ab,
      0x00bb,
      0x2591,
      0x2592,
      0x2593,
      0x2502,
      0x2524,
      0x2561,
      0x2562,
      0x2556,
      0x2555,
      0x2563,
      0x2551,
      0x2557,
      0x255d,
      0x255c,
      0x255b,
      0x2510,
      0x2514,
      0x2534,
      0x252c,
      0x251c,
      0x2500,
      0x253c,
      0x255e,
      0x255f,
      0x255a,
      0x2554,
      0x2569,
      0x2566,
      0x2560,
      0x2550,
      0x256c,
      0x2567,
      0x2568,
      0x2564,
      0x2565,
      0x2559,
      0x2558,
      0x2552,
      0x2553,
      0x256b,
      0x256a,
      0x2518,
      0x250c,
      0x2588,
      0x2584,
      0x258c,
      0x2590,
      0x2580,
      0x03b1,
      0x00df,
      0x0393,
      0x03c0,
      0x03a3,
      0x03c3,
      0x00b5,
      0x03c4,
      0x03a6,
      0x0398,
      0x03a9,
      0x03b4,
      0x221e,
      0x03c6,
      0x03b5,
      0x2229,
      0x2261,
      0x00b1,
      0x2265,
      0x2264,
      0x2320,
      0x2321,
      0x00f7,
      0x2248,
      0x00b0,
      0x2219,
      0x00b7,
      0x221a,
      0x207f,
      0x00b2,
      0x25a0,
      0x00a0,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x87",
      "\xc3\xbc",
      "\xc3\xa9",
      "\xc3\xa2",
      "\xc3\xa3",
      "\xc3\xa0",
      "\xc3\x81",
      "\xc3\xa7",
      "\xc3\xaa",
      "\xc3\x8a",
      "\xc3\xa8",
      "\xc3\x8d",
      "\xc3\x94",
      "\xc3\xac",
      "\xc3\x83",
      "\xc3\x82",
      "\xc3\x89",
      "\xc3\x80",
      "\xc3\x88",
      "\xc3\xb4",
      "\xc3\xb5",
      "\xc3\xb2",
      "\xc3\x9a",
      "\xc3\xb9",
      "\xc3\x8c",
      "\xc3\x95",
      "\xc3\x9c",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc3\x99",
      "\xe2\x82\xa7",
      "\xc3\x93",
      "\xc3\xa1",
      "\xc3\xad",
      "\xc3\xb3",
      "\xc3\xba",
      "\xc3\xb1",
      "\xc3\x91",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc2\xbf",
      "\xc3\x92",
      "\xc2\xac",
      "\xc2\xbd",
      "\xc2\xbc",
      "\xc2\xa1",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x94\x82",
      "\xe2\x94\xa4",
      "\xe2\x95\xa1",
      "\xe2\x95\xa2",
      "\xe2\x95\x96",
      "\xe2\x95\x95",
      "\xe2\x95\xa3",
      "\xe2\x95\x91",
      "\xe2\x95\x97",
      "\xe2\x95\x9d",
      "\xe2\x95\x9c",
      "\xe2\x95\x9b",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\xb4",
      "\xe2\x94\xac",
      "\xe2\x94\x9c",
      "\xe2\x94\x80",
      "\xe2\x94\xbc",
      "\xe2\x95\x9e",
      "\xe2\x95\x9f",
      "\xe2\x95\x9a",
      "\xe2\x95\x94",
      "\xe2\x95\xa9",
      "\xe2\x95\xa6",
      "\xe2\x95\xa0",
      "\xe2\x95\x90",
      "\xe2\x95\xac",
      "\xe2\x95\xa7",
      "\xe2\x95\xa8",
      "\xe2\x95\xa4",
      "\xe2\x95\xa5",
      "\xe2\x95\x99",
      "\xe2\x95\x98",
      "\xe2\x95\x92",
      "\xe2\x95\x93",
      "\xe2\x95\xab",
      "\xe2\x95\xaa",
      "\xe2\x94\x98",
      "\xe2\x94\x8c",
      "\xe2\x96\x88",
      "\xe2\x96\x84",
      "\xe2\x96\x8c",
      "\xe2\x96\x90",
      "\xe2\x96\x80",
      "\xce\xb1",
      "\xc3\x9f",
      "\xce\x93",
      "\xcf\x80",
      "\xce\xa3",
      "\xcf\x83",
      "\xc2\xb5",
      "\xcf\x84",
      "\xce\xa6",
      "\xce\x98",
      "\xce\xa9",
      "\xce\xb4",
      "\xe2\x88\x9e",
      "\xcf\x86",
      "\xce\xb5",
      "\xe2\x88\xa9",
      "\xe2\x89\xa1",
      "\xc2\xb1",
      "\xe2\x89\xa5",
      "\xe2\x89\xa4",
      "\xe2\x8c\xa0",
      "\xe2\x8c\xa1",
      "\xc3\xb7",
      "\xe2\x89\x88",
      "\xc2\xb0",
      "\xe2\x88\x99",
      "\xc2\xb7",
      "\xe2\x88\x9a",
      "\xe2\x81\xbf",
      "\xc2\xb2",
      "\xe2\x96\xa0",
      "\xc2\xa0",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xff",
      0x000000a1 => "\xad",
      0x000000a2 => "\x9b",
      0x000000a3 => "\x9c",
      0x000000aa => "\xa6",
      0x000000ab => "\xae",
      0x000000ac => "\xaa",
      0x000000b0 => "\xf8",
      0x000000b1 => "\xf1",
      0x000000b2 => "\xfd",
      0x000000b5 => "\xe6",
      0x000000b7 => "\xfa",
      0x000000ba => "\xa7",
      0x000000bb => "\xaf",
      0x000000bc => "\xac",
      0x000000bd => "\xab",
      0x000000bf => "\xa8",
      0x000000c0 => "\x91",
      0x000000c1 => "\x86",
      0x000000c2 => "\x8f",
      0x000000c3 => "\x8e",
      0x000000c7 => "\x80",
      0x000000c8 => "\x92",
      0x000000c9 => "\x90",
      0x000000ca => "\x89",
      0x000000cc => "\x98",
      0x000000cd => "\x8b",
      0x000000d1 => "\xa5",
      0x000000d2 => "\xa9",
      0x000000d3 => "\x9f",
      0x000000d4 => "\x8c",
      0x000000d5 => "\x99",
      0x000000d9 => "\x9d",
      0x000000da => "\x96",
      0x000000dc => "\x9a",
      0x000000df => "\xe1",
      0x000000e0 => "\x85",
      0x000000e1 => "\xa0",
      0x000000e2 => "\x83",
      0x000000e3 => "\x84",
      0x000000e7 => "\x87",
      0x000000e8 => "\x8a",
      0x000000e9 => "\x82",
      0x000000ea => "\x88",
      0x000000ec => "\x8d",
      0x000000ed => "\xa1",
      0x000000f1 => "\xa4",
      0x000000f2 => "\x95",
      0x000000f3 => "\xa2",
      0x000000f4 => "\x93",
      0x000000f5 => "\x94",
      0x000000f7 => "\xf6",
      0x000000f9 => "\x97",
      0x000000fa => "\xa3",
      0x000000fc => "\x81",
      0x00000393 => "\xe2",
      0x00000398 => "\xe9",
      0x000003a3 => "\xe4",
      0x000003a6 => "\xe8",
      0x000003a9 => "\xea",
      0x000003b1 => "\xe0",
      0x000003b4 => "\xeb",
      0x000003b5 => "\xee",
      0x000003c0 => "\xe3",
      0x000003c3 => "\xe5",
      0x000003c4 => "\xe7",
      0x000003c6 => "\xed",
      0x0000207f => "\xfc",
      0x000020a7 => "\x9e",
      0x00002219 => "\xf9",
      0x0000221a => "\xfb",
      0x0000221e => "\xec",
      0x00002229 => "\xef",
      0x00002248 => "\xf7",
      0x00002261 => "\xf0",
      0x00002264 => "\xf3",
      0x00002265 => "\xf2",
      0x00002320 => "\xf4",
      0x00002321 => "\xf5",
      0x00002500 => "\xc4",
      0x00002502 => "\xb3",
      0x0000250c => "\xda",
      0x00002510 => "\xbf",
      0x00002514 => "\xc0",
      0x00002518 => "\xd9",
      0x0000251c => "\xc3",
      0x00002524 => "\xb4",
      0x0000252c => "\xc2",
      0x00002534 => "\xc1",
      0x0000253c => "\xc5",
      0x00002550 => "\xcd",
      0x00002551 => "\xba",
      0x00002552 => "\xd5",
      0x00002553 => "\xd6",
      0x00002554 => "\xc9",
      0x00002555 => "\xb8",
      0x00002556 => "\xb7",
      0x00002557 => "\xbb",
      0x00002558 => "\xd4",
      0x00002559 => "\xd3",
      0x0000255a => "\xc8",
      0x0000255b => "\xbe",
      0x0000255c => "\xbd",
      0x0000255d => "\xbc",
      0x0000255e => "\xc6",
      0x0000255f => "\xc7",
      0x00002560 => "\xcc",
      0x00002561 => "\xb5",
      0x00002562 => "\xb6",
      0x00002563 => "\xb9",
      0x00002564 => "\xd1",
      0x00002565 => "\xd2",
      0x00002566 => "\xcb",
      0x00002567 => "\xcf",
      0x00002568 => "\xd0",
      0x00002569 => "\xca",
      0x0000256a => "\xd8",
      0x0000256b => "\xd7",
      0x0000256c => "\xce",
      0x00002580 => "\xdf",
      0x00002584 => "\xdc",
      0x00002588 => "\xdb",
      0x0000258c => "\xdd",
      0x00002590 => "\xde",
      0x00002591 => "\xb0",
      0x00002592 => "\xb1",
      0x00002593 => "\xb2",
      0x000025a0 => "\xfe",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM860 - Conversion routines for IBM860
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM860.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP860
   alias 860
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      81 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      82 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      83 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      84 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      85 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      86 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      87 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      88 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      89 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      8A |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      8B |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      8C |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      8D |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      8E |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      8F |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      90 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      91 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      92 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      93 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      94 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      95 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      96 |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      97 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      98 |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      99 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      9A |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      9B |  000000A2 | CENT SIGN
      9C |  000000A3 | POUND SIGN
      9D |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      9E |  000020A7 | PESETA SIGN
      9F |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      A0 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      A1 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      A2 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      A3 |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      A4 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      A5 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      A6 |  000000AA | FEMININE ORDINAL INDICATOR
      A7 |  000000BA | MASCULINE ORDINAL INDICATOR
      A8 |  000000BF | INVERTED QUESTION MARK
      A9 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      AA |  000000AC | NOT SIGN
      AB |  000000BD | VULGAR FRACTION ONE HALF
      AC |  000000BC | VULGAR FRACTION ONE QUARTER
      AD |  000000A1 | INVERTED EXCLAMATION MARK
      AE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AF |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      B0 |  00002591 | LIGHT SHADE
      B1 |  00002592 | MEDIUM SHADE
      B2 |  00002593 | DARK SHADE
      B3 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      B4 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      B5 |  00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
      B6 |  00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
      B7 |  00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
      B8 |  00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
      B9 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      BA |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      BB |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      BC |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      BD |  0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
      BE |  0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
      BF |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      C0 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      C1 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      C2 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      C3 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      C4 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      C5 |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      C6 |  0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
      C7 |  0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
      C8 |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      C9 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      CA |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      CB |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      CC |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      CD |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      CE |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      CF |  00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
      D0 |  00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
      D1 |  00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
      D2 |  00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
      D3 |  00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
      D4 |  00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
      D5 |  00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
      D6 |  00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
      D7 |  0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
      D8 |  0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
      D9 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      DA |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      DB |  00002588 | FULL BLOCK
      DC |  00002584 | LOWER HALF BLOCK
      DD |  0000258C | LEFT HALF BLOCK
      DE |  00002590 | RIGHT HALF BLOCK
      DF |  00002580 | UPPER HALF BLOCK
      E0 |  000003B1 | GREEK SMALL LETTER ALPHA
      E1 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E2 |  00000393 | GREEK CAPITAL LETTER GAMMA
      E3 |  000003C0 | GREEK SMALL LETTER PI
      E4 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      E5 |  000003C3 | GREEK SMALL LETTER SIGMA
      E6 |  000000B5 | MICRO SIGN
      E7 |  000003C4 | GREEK SMALL LETTER TAU
      E8 |  000003A6 | GREEK CAPITAL LETTER PHI
      E9 |  00000398 | GREEK CAPITAL LETTER THETA
      EA |  000003A9 | GREEK CAPITAL LETTER OMEGA
      EB |  000003B4 | GREEK SMALL LETTER DELTA
      EC |  0000221E | INFINITY
      ED |  000003C6 | GREEK SMALL LETTER PHI
      EE |  000003B5 | GREEK SMALL LETTER EPSILON
      EF |  00002229 | INTERSECTION
      F0 |  00002261 | IDENTICAL TO
      F1 |  000000B1 | PLUS-MINUS SIGN
      F2 |  00002265 | GREATER-THAN OR EQUAL TO
      F3 |  00002264 | LESS-THAN OR EQUAL TO
      F4 |  00002320 | TOP HALF INTEGRAL
      F5 |  00002321 | BOTTOM HALF INTEGRAL
      F6 |  000000F7 | DIVISION SIGN
      F7 |  00002248 | ALMOST EQUAL TO
      F8 |  000000B0 | DEGREE SIGN
      F9 |  00002219 | BULLET OPERATOR
      FA |  000000B7 | MIDDLE DOT
      FB |  0000221A | SQUARE ROOT
      FC |  0000207F | SUPERSCRIPT LATIN SMALL LETTER N
      FD |  000000B2 | SUPERSCRIPT TWO
      FE |  000025A0 | BLACK SQUARE
      FF |  000000A0 | NO-BREAK SPACE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM860

    $main::fatpacked{"Locale/RecodeData/IBM861.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM861';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM861.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM861;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c7,
      0x00fc,
      0x00e9,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e5,
      0x00e7,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00d0,
      0x00f0,
      0x00de,
      0x00c4,
      0x00c5,
      0x00c9,
      0x00e6,
      0x00c6,
      0x00f4,
      0x00f6,
      0x00fe,
      0x00fb,
      0x00dd,
      0x00fd,
      0x00d6,
      0x00dc,
      0x00f8,
      0x00a3,
      0x00d8,
      0x20a7,
      0x0192,
      0x00e1,
      0x00ed,
      0x00f3,
      0x00fa,
      0x00c1,
      0x00cd,
      0x00d3,
      0x00da,
      0x00bf,
      0x2310,
      0x00ac,
      0x00bd,
      0x00bc,
      0x00a1,
      0x00ab,
      0x00bb,
      0x2591,
      0x2592,
      0x2593,
      0x2502,
      0x2524,
      0x2561,
      0x2562,
      0x2556,
      0x2555,
      0x2563,
      0x2551,
      0x2557,
      0x255d,
      0x255c,
      0x255b,
      0x2510,
      0x2514,
      0x2534,
      0x252c,
      0x251c,
      0x2500,
      0x253c,
      0x255e,
      0x255f,
      0x255a,
      0x2554,
      0x2569,
      0x2566,
      0x2560,
      0x2550,
      0x256c,
      0x2567,
      0x2568,
      0x2564,
      0x2565,
      0x2559,
      0x2558,
      0x2552,
      0x2553,
      0x256b,
      0x256a,
      0x2518,
      0x250c,
      0x2588,
      0x2584,
      0x258c,
      0x2590,
      0x2580,
      0x03b1,
      0x00df,
      0x0393,
      0x03c0,
      0x03a3,
      0x03c3,
      0x00b5,
      0x03c4,
      0x03a6,
      0x0398,
      0x03a9,
      0x03b4,
      0x221e,
      0x03c6,
      0x03b5,
      0x2229,
      0x2261,
      0x00b1,
      0x2265,
      0x2264,
      0x2320,
      0x2321,
      0x00f7,
      0x2248,
      0x00b0,
      0x2219,
      0x00b7,
      0x221a,
      0x207f,
      0x00b2,
      0x25a0,
      0x00a0,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x87",
      "\xc3\xbc",
      "\xc3\xa9",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\x90",
      "\xc3\xb0",
      "\xc3\x9e",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x89",
      "\xc3\xa6",
      "\xc3\x86",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xbe",
      "\xc3\xbb",
      "\xc3\x9d",
      "\xc3\xbd",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc3\xb8",
      "\xc2\xa3",
      "\xc3\x98",
      "\xe2\x82\xa7",
      "\xc6\x92",
      "\xc3\xa1",
      "\xc3\xad",
      "\xc3\xb3",
      "\xc3\xba",
      "\xc3\x81",
      "\xc3\x8d",
      "\xc3\x93",
      "\xc3\x9a",
      "\xc2\xbf",
      "\xe2\x8c\x90",
      "\xc2\xac",
      "\xc2\xbd",
      "\xc2\xbc",
      "\xc2\xa1",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x94\x82",
      "\xe2\x94\xa4",
      "\xe2\x95\xa1",
      "\xe2\x95\xa2",
      "\xe2\x95\x96",
      "\xe2\x95\x95",
      "\xe2\x95\xa3",
      "\xe2\x95\x91",
      "\xe2\x95\x97",
      "\xe2\x95\x9d",
      "\xe2\x95\x9c",
      "\xe2\x95\x9b",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\xb4",
      "\xe2\x94\xac",
      "\xe2\x94\x9c",
      "\xe2\x94\x80",
      "\xe2\x94\xbc",
      "\xe2\x95\x9e",
      "\xe2\x95\x9f",
      "\xe2\x95\x9a",
      "\xe2\x95\x94",
      "\xe2\x95\xa9",
      "\xe2\x95\xa6",
      "\xe2\x95\xa0",
      "\xe2\x95\x90",
      "\xe2\x95\xac",
      "\xe2\x95\xa7",
      "\xe2\x95\xa8",
      "\xe2\x95\xa4",
      "\xe2\x95\xa5",
      "\xe2\x95\x99",
      "\xe2\x95\x98",
      "\xe2\x95\x92",
      "\xe2\x95\x93",
      "\xe2\x95\xab",
      "\xe2\x95\xaa",
      "\xe2\x94\x98",
      "\xe2\x94\x8c",
      "\xe2\x96\x88",
      "\xe2\x96\x84",
      "\xe2\x96\x8c",
      "\xe2\x96\x90",
      "\xe2\x96\x80",
      "\xce\xb1",
      "\xc3\x9f",
      "\xce\x93",
      "\xcf\x80",
      "\xce\xa3",
      "\xcf\x83",
      "\xc2\xb5",
      "\xcf\x84",
      "\xce\xa6",
      "\xce\x98",
      "\xce\xa9",
      "\xce\xb4",
      "\xe2\x88\x9e",
      "\xcf\x86",
      "\xce\xb5",
      "\xe2\x88\xa9",
      "\xe2\x89\xa1",
      "\xc2\xb1",
      "\xe2\x89\xa5",
      "\xe2\x89\xa4",
      "\xe2\x8c\xa0",
      "\xe2\x8c\xa1",
      "\xc3\xb7",
      "\xe2\x89\x88",
      "\xc2\xb0",
      "\xe2\x88\x99",
      "\xc2\xb7",
      "\xe2\x88\x9a",
      "\xe2\x81\xbf",
      "\xc2\xb2",
      "\xe2\x96\xa0",
      "\xc2\xa0",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xff",
      0x000000a1 => "\xad",
      0x000000a3 => "\x9c",
      0x000000ab => "\xae",
      0x000000ac => "\xaa",
      0x000000b0 => "\xf8",
      0x000000b1 => "\xf1",
      0x000000b2 => "\xfd",
      0x000000b5 => "\xe6",
      0x000000b7 => "\xfa",
      0x000000bb => "\xaf",
      0x000000bc => "\xac",
      0x000000bd => "\xab",
      0x000000bf => "\xa8",
      0x000000c1 => "\xa4",
      0x000000c4 => "\x8e",
      0x000000c5 => "\x8f",
      0x000000c6 => "\x92",
      0x000000c7 => "\x80",
      0x000000c9 => "\x90",
      0x000000cd => "\xa5",
      0x000000d0 => "\x8b",
      0x000000d3 => "\xa6",
      0x000000d6 => "\x99",
      0x000000d8 => "\x9d",
      0x000000da => "\xa7",
      0x000000dc => "\x9a",
      0x000000dd => "\x97",
      0x000000de => "\x8d",
      0x000000df => "\xe1",
      0x000000e0 => "\x85",
      0x000000e1 => "\xa0",
      0x000000e2 => "\x83",
      0x000000e4 => "\x84",
      0x000000e5 => "\x86",
      0x000000e6 => "\x91",
      0x000000e7 => "\x87",
      0x000000e8 => "\x8a",
      0x000000e9 => "\x82",
      0x000000ea => "\x88",
      0x000000eb => "\x89",
      0x000000ed => "\xa1",
      0x000000f0 => "\x8c",
      0x000000f3 => "\xa2",
      0x000000f4 => "\x93",
      0x000000f6 => "\x94",
      0x000000f7 => "\xf6",
      0x000000f8 => "\x9b",
      0x000000fa => "\xa3",
      0x000000fb => "\x96",
      0x000000fc => "\x81",
      0x000000fd => "\x98",
      0x000000fe => "\x95",
      0x00000192 => "\x9f",
      0x00000393 => "\xe2",
      0x00000398 => "\xe9",
      0x000003a3 => "\xe4",
      0x000003a6 => "\xe8",
      0x000003a9 => "\xea",
      0x000003b1 => "\xe0",
      0x000003b4 => "\xeb",
      0x000003b5 => "\xee",
      0x000003c0 => "\xe3",
      0x000003c3 => "\xe5",
      0x000003c4 => "\xe7",
      0x000003c6 => "\xed",
      0x0000207f => "\xfc",
      0x000020a7 => "\x9e",
      0x00002219 => "\xf9",
      0x0000221a => "\xfb",
      0x0000221e => "\xec",
      0x00002229 => "\xef",
      0x00002248 => "\xf7",
      0x00002261 => "\xf0",
      0x00002264 => "\xf3",
      0x00002265 => "\xf2",
      0x00002310 => "\xa9",
      0x00002320 => "\xf4",
      0x00002321 => "\xf5",
      0x00002500 => "\xc4",
      0x00002502 => "\xb3",
      0x0000250c => "\xda",
      0x00002510 => "\xbf",
      0x00002514 => "\xc0",
      0x00002518 => "\xd9",
      0x0000251c => "\xc3",
      0x00002524 => "\xb4",
      0x0000252c => "\xc2",
      0x00002534 => "\xc1",
      0x0000253c => "\xc5",
      0x00002550 => "\xcd",
      0x00002551 => "\xba",
      0x00002552 => "\xd5",
      0x00002553 => "\xd6",
      0x00002554 => "\xc9",
      0x00002555 => "\xb8",
      0x00002556 => "\xb7",
      0x00002557 => "\xbb",
      0x00002558 => "\xd4",
      0x00002559 => "\xd3",
      0x0000255a => "\xc8",
      0x0000255b => "\xbe",
      0x0000255c => "\xbd",
      0x0000255d => "\xbc",
      0x0000255e => "\xc6",
      0x0000255f => "\xc7",
      0x00002560 => "\xcc",
      0x00002561 => "\xb5",
      0x00002562 => "\xb6",
      0x00002563 => "\xb9",
      0x00002564 => "\xd1",
      0x00002565 => "\xd2",
      0x00002566 => "\xcb",
      0x00002567 => "\xcf",
      0x00002568 => "\xd0",
      0x00002569 => "\xca",
      0x0000256a => "\xd8",
      0x0000256b => "\xd7",
      0x0000256c => "\xce",
      0x00002580 => "\xdf",
      0x00002584 => "\xdc",
      0x00002588 => "\xdb",
      0x0000258c => "\xdd",
      0x00002590 => "\xde",
      0x00002591 => "\xb0",
      0x00002592 => "\xb1",
      0x00002593 => "\xb2",
      0x000025a0 => "\xfe",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM861 - Conversion routines for IBM861
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM861.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP861
   alias 861
   alias CP-IS
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      81 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      82 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      83 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      84 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      85 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      86 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      87 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      88 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      89 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      8A |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      8B |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      8C |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      8D |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      8E |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      8F |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      90 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      91 |  000000E6 | LATIN SMALL LETTER AE
      92 |  000000C6 | LATIN CAPITAL LETTER AE
      93 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      94 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      95 |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      96 |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      97 |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      98 |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      99 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      9A |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      9B |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      9C |  000000A3 | POUND SIGN
      9D |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      9E |  000020A7 | PESETA SIGN
      9F |  00000192 | LATIN SMALL LETTER F WITH HOOK
      A0 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      A1 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      A2 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      A3 |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      A4 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      A5 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      A6 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      A7 |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      A8 |  000000BF | INVERTED QUESTION MARK
      A9 |  00002310 | REVERSED NOT SIGN
      AA |  000000AC | NOT SIGN
      AB |  000000BD | VULGAR FRACTION ONE HALF
      AC |  000000BC | VULGAR FRACTION ONE QUARTER
      AD |  000000A1 | INVERTED EXCLAMATION MARK
      AE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AF |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      B0 |  00002591 | LIGHT SHADE
      B1 |  00002592 | MEDIUM SHADE
      B2 |  00002593 | DARK SHADE
      B3 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      B4 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      B5 |  00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
      B6 |  00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
      B7 |  00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
      B8 |  00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
      B9 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      BA |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      BB |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      BC |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      BD |  0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
      BE |  0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
      BF |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      C0 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      C1 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      C2 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      C3 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      C4 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      C5 |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      C6 |  0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
      C7 |  0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
      C8 |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      C9 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      CA |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      CB |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      CC |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      CD |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      CE |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      CF |  00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
      D0 |  00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
      D1 |  00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
      D2 |  00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
      D3 |  00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
      D4 |  00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
      D5 |  00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
      D6 |  00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
      D7 |  0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
      D8 |  0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
      D9 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      DA |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      DB |  00002588 | FULL BLOCK
      DC |  00002584 | LOWER HALF BLOCK
      DD |  0000258C | LEFT HALF BLOCK
      DE |  00002590 | RIGHT HALF BLOCK
      DF |  00002580 | UPPER HALF BLOCK
      E0 |  000003B1 | GREEK SMALL LETTER ALPHA
      E1 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E2 |  00000393 | GREEK CAPITAL LETTER GAMMA
      E3 |  000003C0 | GREEK SMALL LETTER PI
      E4 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      E5 |  000003C3 | GREEK SMALL LETTER SIGMA
      E6 |  000000B5 | MICRO SIGN
      E7 |  000003C4 | GREEK SMALL LETTER TAU
      E8 |  000003A6 | GREEK CAPITAL LETTER PHI
      E9 |  00000398 | GREEK CAPITAL LETTER THETA
      EA |  000003A9 | GREEK CAPITAL LETTER OMEGA
      EB |  000003B4 | GREEK SMALL LETTER DELTA
      EC |  0000221E | INFINITY
      ED |  000003C6 | GREEK SMALL LETTER PHI
      EE |  000003B5 | GREEK SMALL LETTER EPSILON
      EF |  00002229 | INTERSECTION
      F0 |  00002261 | IDENTICAL TO
      F1 |  000000B1 | PLUS-MINUS SIGN
      F2 |  00002265 | GREATER-THAN OR EQUAL TO
      F3 |  00002264 | LESS-THAN OR EQUAL TO
      F4 |  00002320 | TOP HALF INTEGRAL
      F5 |  00002321 | BOTTOM HALF INTEGRAL
      F6 |  000000F7 | DIVISION SIGN
      F7 |  00002248 | ALMOST EQUAL TO
      F8 |  000000B0 | DEGREE SIGN
      F9 |  00002219 | BULLET OPERATOR
      FA |  000000B7 | MIDDLE DOT
      FB |  0000221A | SQUARE ROOT
      FC |  0000207F | SUPERSCRIPT LATIN SMALL LETTER N
      FD |  000000B2 | SUPERSCRIPT TWO
      FE |  000025A0 | BLACK SQUARE
      FF |  000000A0 | NO-BREAK SPACE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM861

    $main::fatpacked{"Locale/RecodeData/IBM862.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM862';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM862.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM862;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x05d0,
      0x05d1,
      0x05d2,
      0x05d3,
      0x05d4,
      0x05d5,
      0x05d6,
      0x05d7,
      0x05d8,
      0x05d9,
      0x05da,
      0x05db,
      0x05dc,
      0x05dd,
      0x05de,
      0x05df,
      0x05e0,
      0x05e1,
      0x05e2,
      0x05e3,
      0x05e4,
      0x05e5,
      0x05e6,
      0x05e7,
      0x05e8,
      0x05e9,
      0x05ea,
      0x00a2,
      0x00a3,
      0x00a5,
      0x20a7,
      0x0192,
      0x00e1,
      0x00ed,
      0x00f3,
      0x00fa,
      0x00f1,
      0x00d1,
      0x00aa,
      0x00ba,
      0x00bf,
      0x2310,
      0x00ac,
      0x00bd,
      0x00bc,
      0x00a1,
      0x00ab,
      0x00bb,
      0x2591,
      0x2592,
      0x2593,
      0x2502,
      0x2524,
      0x2561,
      0x2562,
      0x2556,
      0x2555,
      0x2563,
      0x2551,
      0x2557,
      0x255d,
      0x255c,
      0x255b,
      0x2510,
      0x2514,
      0x2534,
      0x252c,
      0x251c,
      0x2500,
      0x253c,
      0x255e,
      0x255f,
      0x255a,
      0x2554,
      0x2569,
      0x2566,
      0x2560,
      0x2550,
      0x256c,
      0x2567,
      0x2568,
      0x2564,
      0x2565,
      0x2559,
      0x2558,
      0x2552,
      0x2553,
      0x256b,
      0x256a,
      0x2518,
      0x250c,
      0x2588,
      0x2584,
      0x258c,
      0x2590,
      0x2580,
      0x03b1,
      0x00df,
      0x0393,
      0x03c0,
      0x03a3,
      0x03c3,
      0x00b5,
      0x03c4,
      0x03a6,
      0x0398,
      0x03a9,
      0x03b4,
      0x221e,
      0x03c6,
      0x03b5,
      0x2229,
      0x2261,
      0x00b1,
      0x2265,
      0x2264,
      0x2320,
      0x2321,
      0x00f7,
      0x2248,
      0x00b0,
      0x2219,
      0x00b7,
      0x221a,
      0x207f,
      0x00b2,
      0x25a0,
      0x00a0,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xd7\x90",
      "\xd7\x91",
      "\xd7\x92",
      "\xd7\x93",
      "\xd7\x94",
      "\xd7\x95",
      "\xd7\x96",
      "\xd7\x97",
      "\xd7\x98",
      "\xd7\x99",
      "\xd7\x9a",
      "\xd7\x9b",
      "\xd7\x9c",
      "\xd7\x9d",
      "\xd7\x9e",
      "\xd7\x9f",
      "\xd7\xa0",
      "\xd7\xa1",
      "\xd7\xa2",
      "\xd7\xa3",
      "\xd7\xa4",
      "\xd7\xa5",
      "\xd7\xa6",
      "\xd7\xa7",
      "\xd7\xa8",
      "\xd7\xa9",
      "\xd7\xaa",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xe2\x82\xa7",
      "\xc6\x92",
      "\xc3\xa1",
      "\xc3\xad",
      "\xc3\xb3",
      "\xc3\xba",
      "\xc3\xb1",
      "\xc3\x91",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc2\xbf",
      "\xe2\x8c\x90",
      "\xc2\xac",
      "\xc2\xbd",
      "\xc2\xbc",
      "\xc2\xa1",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x94\x82",
      "\xe2\x94\xa4",
      "\xe2\x95\xa1",
      "\xe2\x95\xa2",
      "\xe2\x95\x96",
      "\xe2\x95\x95",
      "\xe2\x95\xa3",
      "\xe2\x95\x91",
      "\xe2\x95\x97",
      "\xe2\x95\x9d",
      "\xe2\x95\x9c",
      "\xe2\x95\x9b",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\xb4",
      "\xe2\x94\xac",
      "\xe2\x94\x9c",
      "\xe2\x94\x80",
      "\xe2\x94\xbc",
      "\xe2\x95\x9e",
      "\xe2\x95\x9f",
      "\xe2\x95\x9a",
      "\xe2\x95\x94",
      "\xe2\x95\xa9",
      "\xe2\x95\xa6",
      "\xe2\x95\xa0",
      "\xe2\x95\x90",
      "\xe2\x95\xac",
      "\xe2\x95\xa7",
      "\xe2\x95\xa8",
      "\xe2\x95\xa4",
      "\xe2\x95\xa5",
      "\xe2\x95\x99",
      "\xe2\x95\x98",
      "\xe2\x95\x92",
      "\xe2\x95\x93",
      "\xe2\x95\xab",
      "\xe2\x95\xaa",
      "\xe2\x94\x98",
      "\xe2\x94\x8c",
      "\xe2\x96\x88",
      "\xe2\x96\x84",
      "\xe2\x96\x8c",
      "\xe2\x96\x90",
      "\xe2\x96\x80",
      "\xce\xb1",
      "\xc3\x9f",
      "\xce\x93",
      "\xcf\x80",
      "\xce\xa3",
      "\xcf\x83",
      "\xc2\xb5",
      "\xcf\x84",
      "\xce\xa6",
      "\xce\x98",
      "\xce\xa9",
      "\xce\xb4",
      "\xe2\x88\x9e",
      "\xcf\x86",
      "\xce\xb5",
      "\xe2\x88\xa9",
      "\xe2\x89\xa1",
      "\xc2\xb1",
      "\xe2\x89\xa5",
      "\xe2\x89\xa4",
      "\xe2\x8c\xa0",
      "\xe2\x8c\xa1",
      "\xc3\xb7",
      "\xe2\x89\x88",
      "\xc2\xb0",
      "\xe2\x88\x99",
      "\xc2\xb7",
      "\xe2\x88\x9a",
      "\xe2\x81\xbf",
      "\xc2\xb2",
      "\xe2\x96\xa0",
      "\xc2\xa0",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xff",
      0x000000a1 => "\xad",
      0x000000a2 => "\x9b",
      0x000000a3 => "\x9c",
      0x000000a5 => "\x9d",
      0x000000aa => "\xa6",
      0x000000ab => "\xae",
      0x000000ac => "\xaa",
      0x000000b0 => "\xf8",
      0x000000b1 => "\xf1",
      0x000000b2 => "\xfd",
      0x000000b5 => "\xe6",
      0x000000b7 => "\xfa",
      0x000000ba => "\xa7",
      0x000000bb => "\xaf",
      0x000000bc => "\xac",
      0x000000bd => "\xab",
      0x000000bf => "\xa8",
      0x000000d1 => "\xa5",
      0x000000df => "\xe1",
      0x000000e1 => "\xa0",
      0x000000ed => "\xa1",
      0x000000f1 => "\xa4",
      0x000000f3 => "\xa2",
      0x000000f7 => "\xf6",
      0x000000fa => "\xa3",
      0x00000192 => "\x9f",
      0x00000393 => "\xe2",
      0x00000398 => "\xe9",
      0x000003a3 => "\xe4",
      0x000003a6 => "\xe8",
      0x000003a9 => "\xea",
      0x000003b1 => "\xe0",
      0x000003b4 => "\xeb",
      0x000003b5 => "\xee",
      0x000003c0 => "\xe3",
      0x000003c3 => "\xe5",
      0x000003c4 => "\xe7",
      0x000003c6 => "\xed",
      0x000005d0 => "\x80",
      0x000005d1 => "\x81",
      0x000005d2 => "\x82",
      0x000005d3 => "\x83",
      0x000005d4 => "\x84",
      0x000005d5 => "\x85",
      0x000005d6 => "\x86",
      0x000005d7 => "\x87",
      0x000005d8 => "\x88",
      0x000005d9 => "\x89",
      0x000005da => "\x8a",
      0x000005db => "\x8b",
      0x000005dc => "\x8c",
      0x000005dd => "\x8d",
      0x000005de => "\x8e",
      0x000005df => "\x8f",
      0x000005e0 => "\x90",
      0x000005e1 => "\x91",
      0x000005e2 => "\x92",
      0x000005e3 => "\x93",
      0x000005e4 => "\x94",
      0x000005e5 => "\x95",
      0x000005e6 => "\x96",
      0x000005e7 => "\x97",
      0x000005e8 => "\x98",
      0x000005e9 => "\x99",
      0x000005ea => "\x9a",
      0x0000207f => "\xfc",
      0x000020a7 => "\x9e",
      0x00002219 => "\xf9",
      0x0000221a => "\xfb",
      0x0000221e => "\xec",
      0x00002229 => "\xef",
      0x00002248 => "\xf7",
      0x00002261 => "\xf0",
      0x00002264 => "\xf3",
      0x00002265 => "\xf2",
      0x00002310 => "\xa9",
      0x00002320 => "\xf4",
      0x00002321 => "\xf5",
      0x00002500 => "\xc4",
      0x00002502 => "\xb3",
      0x0000250c => "\xda",
      0x00002510 => "\xbf",
      0x00002514 => "\xc0",
      0x00002518 => "\xd9",
      0x0000251c => "\xc3",
      0x00002524 => "\xb4",
      0x0000252c => "\xc2",
      0x00002534 => "\xc1",
      0x0000253c => "\xc5",
      0x00002550 => "\xcd",
      0x00002551 => "\xba",
      0x00002552 => "\xd5",
      0x00002553 => "\xd6",
      0x00002554 => "\xc9",
      0x00002555 => "\xb8",
      0x00002556 => "\xb7",
      0x00002557 => "\xbb",
      0x00002558 => "\xd4",
      0x00002559 => "\xd3",
      0x0000255a => "\xc8",
      0x0000255b => "\xbe",
      0x0000255c => "\xbd",
      0x0000255d => "\xbc",
      0x0000255e => "\xc6",
      0x0000255f => "\xc7",
      0x00002560 => "\xcc",
      0x00002561 => "\xb5",
      0x00002562 => "\xb6",
      0x00002563 => "\xb9",
      0x00002564 => "\xd1",
      0x00002565 => "\xd2",
      0x00002566 => "\xcb",
      0x00002567 => "\xcf",
      0x00002568 => "\xd0",
      0x00002569 => "\xca",
      0x0000256a => "\xd8",
      0x0000256b => "\xd7",
      0x0000256c => "\xce",
      0x00002580 => "\xdf",
      0x00002584 => "\xdc",
      0x00002588 => "\xdb",
      0x0000258c => "\xdd",
      0x00002590 => "\xde",
      0x00002591 => "\xb0",
      0x00002592 => "\xb1",
      0x00002593 => "\xb2",
      0x000025a0 => "\xfe",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM862 - Conversion routines for IBM862
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM862.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP862
   alias 862
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000005D0 | HEBREW LETTER ALEF
      81 |  000005D1 | HEBREW LETTER BET
      82 |  000005D2 | HEBREW LETTER GIMEL
      83 |  000005D3 | HEBREW LETTER DALET
      84 |  000005D4 | HEBREW LETTER HE
      85 |  000005D5 | HEBREW LETTER VAV
      86 |  000005D6 | HEBREW LETTER ZAYIN
      87 |  000005D7 | HEBREW LETTER HET
      88 |  000005D8 | HEBREW LETTER TET
      89 |  000005D9 | HEBREW LETTER YOD
      8A |  000005DA | HEBREW LETTER FINAL KAF
      8B |  000005DB | HEBREW LETTER KAF
      8C |  000005DC | HEBREW LETTER LAMED
      8D |  000005DD | HEBREW LETTER FINAL MEM
      8E |  000005DE | HEBREW LETTER MEM
      8F |  000005DF | HEBREW LETTER FINAL NUN
      90 |  000005E0 | HEBREW LETTER NUN
      91 |  000005E1 | HEBREW LETTER SAMEKH
      92 |  000005E2 | HEBREW LETTER AYIN
      93 |  000005E3 | HEBREW LETTER FINAL PE
      94 |  000005E4 | HEBREW LETTER PE
      95 |  000005E5 | HEBREW LETTER FINAL TSADI
      96 |  000005E6 | HEBREW LETTER TSADI
      97 |  000005E7 | HEBREW LETTER QOF
      98 |  000005E8 | HEBREW LETTER RESH
      99 |  000005E9 | HEBREW LETTER SHIN
      9A |  000005EA | HEBREW LETTER TAV
      9B |  000000A2 | CENT SIGN
      9C |  000000A3 | POUND SIGN
      9D |  000000A5 | YEN SIGN
      9E |  000020A7 | PESETA SIGN
      9F |  00000192 | LATIN SMALL LETTER F WITH HOOK
      A0 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      A1 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      A2 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      A3 |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      A4 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      A5 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      A6 |  000000AA | FEMININE ORDINAL INDICATOR
      A7 |  000000BA | MASCULINE ORDINAL INDICATOR
      A8 |  000000BF | INVERTED QUESTION MARK
      A9 |  00002310 | REVERSED NOT SIGN
      AA |  000000AC | NOT SIGN
      AB |  000000BD | VULGAR FRACTION ONE HALF
      AC |  000000BC | VULGAR FRACTION ONE QUARTER
      AD |  000000A1 | INVERTED EXCLAMATION MARK
      AE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AF |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      B0 |  00002591 | LIGHT SHADE
      B1 |  00002592 | MEDIUM SHADE
      B2 |  00002593 | DARK SHADE
      B3 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      B4 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      B5 |  00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
      B6 |  00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
      B7 |  00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
      B8 |  00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
      B9 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      BA |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      BB |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      BC |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      BD |  0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
      BE |  0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
      BF |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      C0 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      C1 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      C2 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      C3 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      C4 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      C5 |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      C6 |  0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
      C7 |  0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
      C8 |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      C9 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      CA |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      CB |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      CC |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      CD |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      CE |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      CF |  00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
      D0 |  00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
      D1 |  00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
      D2 |  00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
      D3 |  00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
      D4 |  00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
      D5 |  00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
      D6 |  00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
      D7 |  0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
      D8 |  0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
      D9 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      DA |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      DB |  00002588 | FULL BLOCK
      DC |  00002584 | LOWER HALF BLOCK
      DD |  0000258C | LEFT HALF BLOCK
      DE |  00002590 | RIGHT HALF BLOCK
      DF |  00002580 | UPPER HALF BLOCK
      E0 |  000003B1 | GREEK SMALL LETTER ALPHA
      E1 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E2 |  00000393 | GREEK CAPITAL LETTER GAMMA
      E3 |  000003C0 | GREEK SMALL LETTER PI
      E4 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      E5 |  000003C3 | GREEK SMALL LETTER SIGMA
      E6 |  000000B5 | MICRO SIGN
      E7 |  000003C4 | GREEK SMALL LETTER TAU
      E8 |  000003A6 | GREEK CAPITAL LETTER PHI
      E9 |  00000398 | GREEK CAPITAL LETTER THETA
      EA |  000003A9 | GREEK CAPITAL LETTER OMEGA
      EB |  000003B4 | GREEK SMALL LETTER DELTA
      EC |  0000221E | INFINITY
      ED |  000003C6 | GREEK SMALL LETTER PHI
      EE |  000003B5 | GREEK SMALL LETTER EPSILON
      EF |  00002229 | INTERSECTION
      F0 |  00002261 | IDENTICAL TO
      F1 |  000000B1 | PLUS-MINUS SIGN
      F2 |  00002265 | GREATER-THAN OR EQUAL TO
      F3 |  00002264 | LESS-THAN OR EQUAL TO
      F4 |  00002320 | TOP HALF INTEGRAL
      F5 |  00002321 | BOTTOM HALF INTEGRAL
      F6 |  000000F7 | DIVISION SIGN
      F7 |  00002248 | ALMOST EQUAL TO
      F8 |  000000B0 | DEGREE SIGN
      F9 |  00002219 | BULLET OPERATOR
      FA |  000000B7 | MIDDLE DOT
      FB |  0000221A | SQUARE ROOT
      FC |  0000207F | SUPERSCRIPT LATIN SMALL LETTER N
      FD |  000000B2 | SUPERSCRIPT TWO
      FE |  000025A0 | BLACK SQUARE
      FF |  000000A0 | NO-BREAK SPACE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM862

    $main::fatpacked{"Locale/RecodeData/IBM863.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM863';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM863.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM863;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c7,
      0x00fc,
      0x00e9,
      0x00e2,
      0x00c2,
      0x00e0,
      0x00b6,
      0x00e7,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ef,
      0x00ee,
      0x2017,
      0x00c0,
      0x00a7,
      0x00c9,
      0x00c8,
      0x00ca,
      0x00f4,
      0x00cb,
      0x00cf,
      0x00fb,
      0x00f9,
      0x00a4,
      0x00d4,
      0x00dc,
      0x00a2,
      0x00a3,
      0x00d9,
      0x00db,
      0x0192,
      0x00a6,
      0x00b4,
      0x00f3,
      0x00fa,
      0x00a8,
      0x00b8,
      0x00b3,
      0x00af,
      0x00ce,
      0x2310,
      0x00ac,
      0x00bd,
      0x00bc,
      0x00be,
      0x00ab,
      0x00bb,
      0x2591,
      0x2592,
      0x2593,
      0x2502,
      0x2524,
      0x2561,
      0x2562,
      0x2556,
      0x2555,
      0x2563,
      0x2551,
      0x2557,
      0x255d,
      0x255c,
      0x255b,
      0x2510,
      0x2514,
      0x2534,
      0x252c,
      0x251c,
      0x2500,
      0x253c,
      0x255e,
      0x255f,
      0x255a,
      0x2554,
      0x2569,
      0x2566,
      0x2560,
      0x2550,
      0x256c,
      0x2567,
      0x2568,
      0x2564,
      0x2565,
      0x2559,
      0x2558,
      0x2552,
      0x2553,
      0x256b,
      0x256a,
      0x2518,
      0x250c,
      0x2588,
      0x2584,
      0x258c,
      0x2590,
      0x2580,
      0x03b1,
      0x00df,
      0x0393,
      0x03c0,
      0x03a3,
      0x03c3,
      0x00b5,
      0x03c4,
      0x03a6,
      0x0398,
      0x03a9,
      0x03b4,
      0x221e,
      0x03c6,
      0x03b5,
      0x2229,
      0x2261,
      0x00b1,
      0x2265,
      0x2264,
      0x2320,
      0x2321,
      0x00f7,
      0x2248,
      0x00b0,
      0x2219,
      0x00b7,
      0x221a,
      0x207f,
      0x00b2,
      0x25a0,
      0x00a0,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x87",
      "\xc3\xbc",
      "\xc3\xa9",
      "\xc3\xa2",
      "\xc3\x82",
      "\xc3\xa0",
      "\xc2\xb6",
      "\xc3\xa7",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xaf",
      "\xc3\xae",
      "\xe2\x80\x97",
      "\xc3\x80",
      "\xc2\xa7",
      "\xc3\x89",
      "\xc3\x88",
      "\xc3\x8a",
      "\xc3\xb4",
      "\xc3\x8b",
      "\xc3\x8f",
      "\xc3\xbb",
      "\xc3\xb9",
      "\xc2\xa4",
      "\xc3\x94",
      "\xc3\x9c",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc3\x99",
      "\xc3\x9b",
      "\xc6\x92",
      "\xc2\xa6",
      "\xc2\xb4",
      "\xc3\xb3",
      "\xc3\xba",
      "\xc2\xa8",
      "\xc2\xb8",
      "\xc2\xb3",
      "\xc2\xaf",
      "\xc3\x8e",
      "\xe2\x8c\x90",
      "\xc2\xac",
      "\xc2\xbd",
      "\xc2\xbc",
      "\xc2\xbe",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x94\x82",
      "\xe2\x94\xa4",
      "\xe2\x95\xa1",
      "\xe2\x95\xa2",
      "\xe2\x95\x96",
      "\xe2\x95\x95",
      "\xe2\x95\xa3",
      "\xe2\x95\x91",
      "\xe2\x95\x97",
      "\xe2\x95\x9d",
      "\xe2\x95\x9c",
      "\xe2\x95\x9b",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\xb4",
      "\xe2\x94\xac",
      "\xe2\x94\x9c",
      "\xe2\x94\x80",
      "\xe2\x94\xbc",
      "\xe2\x95\x9e",
      "\xe2\x95\x9f",
      "\xe2\x95\x9a",
      "\xe2\x95\x94",
      "\xe2\x95\xa9",
      "\xe2\x95\xa6",
      "\xe2\x95\xa0",
      "\xe2\x95\x90",
      "\xe2\x95\xac",
      "\xe2\x95\xa7",
      "\xe2\x95\xa8",
      "\xe2\x95\xa4",
      "\xe2\x95\xa5",
      "\xe2\x95\x99",
      "\xe2\x95\x98",
      "\xe2\x95\x92",
      "\xe2\x95\x93",
      "\xe2\x95\xab",
      "\xe2\x95\xaa",
      "\xe2\x94\x98",
      "\xe2\x94\x8c",
      "\xe2\x96\x88",
      "\xe2\x96\x84",
      "\xe2\x96\x8c",
      "\xe2\x96\x90",
      "\xe2\x96\x80",
      "\xce\xb1",
      "\xc3\x9f",
      "\xce\x93",
      "\xcf\x80",
      "\xce\xa3",
      "\xcf\x83",
      "\xc2\xb5",
      "\xcf\x84",
      "\xce\xa6",
      "\xce\x98",
      "\xce\xa9",
      "\xce\xb4",
      "\xe2\x88\x9e",
      "\xcf\x86",
      "\xce\xb5",
      "\xe2\x88\xa9",
      "\xe2\x89\xa1",
      "\xc2\xb1",
      "\xe2\x89\xa5",
      "\xe2\x89\xa4",
      "\xe2\x8c\xa0",
      "\xe2\x8c\xa1",
      "\xc3\xb7",
      "\xe2\x89\x88",
      "\xc2\xb0",
      "\xe2\x88\x99",
      "\xc2\xb7",
      "\xe2\x88\x9a",
      "\xe2\x81\xbf",
      "\xc2\xb2",
      "\xe2\x96\xa0",
      "\xc2\xa0",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xff",
      0x000000a2 => "\x9b",
      0x000000a3 => "\x9c",
      0x000000a4 => "\x98",
      0x000000a6 => "\xa0",
      0x000000a7 => "\x8f",
      0x000000a8 => "\xa4",
      0x000000ab => "\xae",
      0x000000ac => "\xaa",
      0x000000af => "\xa7",
      0x000000b0 => "\xf8",
      0x000000b1 => "\xf1",
      0x000000b2 => "\xfd",
      0x000000b3 => "\xa6",
      0x000000b4 => "\xa1",
      0x000000b5 => "\xe6",
      0x000000b6 => "\x86",
      0x000000b7 => "\xfa",
      0x000000b8 => "\xa5",
      0x000000bb => "\xaf",
      0x000000bc => "\xac",
      0x000000bd => "\xab",
      0x000000be => "\xad",
      0x000000c0 => "\x8e",
      0x000000c2 => "\x84",
      0x000000c7 => "\x80",
      0x000000c8 => "\x91",
      0x000000c9 => "\x90",
      0x000000ca => "\x92",
      0x000000cb => "\x94",
      0x000000ce => "\xa8",
      0x000000cf => "\x95",
      0x000000d4 => "\x99",
      0x000000d9 => "\x9d",
      0x000000db => "\x9e",
      0x000000dc => "\x9a",
      0x000000df => "\xe1",
      0x000000e0 => "\x85",
      0x000000e2 => "\x83",
      0x000000e7 => "\x87",
      0x000000e8 => "\x8a",
      0x000000e9 => "\x82",
      0x000000ea => "\x88",
      0x000000eb => "\x89",
      0x000000ee => "\x8c",
      0x000000ef => "\x8b",
      0x000000f3 => "\xa2",
      0x000000f4 => "\x93",
      0x000000f7 => "\xf6",
      0x000000f9 => "\x97",
      0x000000fa => "\xa3",
      0x000000fb => "\x96",
      0x000000fc => "\x81",
      0x00000192 => "\x9f",
      0x00000393 => "\xe2",
      0x00000398 => "\xe9",
      0x000003a3 => "\xe4",
      0x000003a6 => "\xe8",
      0x000003a9 => "\xea",
      0x000003b1 => "\xe0",
      0x000003b4 => "\xeb",
      0x000003b5 => "\xee",
      0x000003c0 => "\xe3",
      0x000003c3 => "\xe5",
      0x000003c4 => "\xe7",
      0x000003c6 => "\xed",
      0x00002017 => "\x8d",
      0x0000207f => "\xfc",
      0x00002219 => "\xf9",
      0x0000221a => "\xfb",
      0x0000221e => "\xec",
      0x00002229 => "\xef",
      0x00002248 => "\xf7",
      0x00002261 => "\xf0",
      0x00002264 => "\xf3",
      0x00002265 => "\xf2",
      0x00002310 => "\xa9",
      0x00002320 => "\xf4",
      0x00002321 => "\xf5",
      0x00002500 => "\xc4",
      0x00002502 => "\xb3",
      0x0000250c => "\xda",
      0x00002510 => "\xbf",
      0x00002514 => "\xc0",
      0x00002518 => "\xd9",
      0x0000251c => "\xc3",
      0x00002524 => "\xb4",
      0x0000252c => "\xc2",
      0x00002534 => "\xc1",
      0x0000253c => "\xc5",
      0x00002550 => "\xcd",
      0x00002551 => "\xba",
      0x00002552 => "\xd5",
      0x00002553 => "\xd6",
      0x00002554 => "\xc9",
      0x00002555 => "\xb8",
      0x00002556 => "\xb7",
      0x00002557 => "\xbb",
      0x00002558 => "\xd4",
      0x00002559 => "\xd3",
      0x0000255a => "\xc8",
      0x0000255b => "\xbe",
      0x0000255c => "\xbd",
      0x0000255d => "\xbc",
      0x0000255e => "\xc6",
      0x0000255f => "\xc7",
      0x00002560 => "\xcc",
      0x00002561 => "\xb5",
      0x00002562 => "\xb6",
      0x00002563 => "\xb9",
      0x00002564 => "\xd1",
      0x00002565 => "\xd2",
      0x00002566 => "\xcb",
      0x00002567 => "\xcf",
      0x00002568 => "\xd0",
      0x00002569 => "\xca",
      0x0000256a => "\xd8",
      0x0000256b => "\xd7",
      0x0000256c => "\xce",
      0x00002580 => "\xdf",
      0x00002584 => "\xdc",
      0x00002588 => "\xdb",
      0x0000258c => "\xdd",
      0x00002590 => "\xde",
      0x00002591 => "\xb0",
      0x00002592 => "\xb1",
      0x00002593 => "\xb2",
      0x000025a0 => "\xfe",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM863 - Conversion routines for IBM863
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM863.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM Keyboard layouts and code pages, PN 07G4586 June 1991
   alias CP863
   alias 863
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      81 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      82 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      83 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      84 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      85 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      86 |  000000B6 | PILCROW SIGN
      87 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      88 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      89 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      8A |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      8B |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      8C |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      8D |  00002017 | DOUBLE LOW LINE
      8E |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      8F |  000000A7 | SECTION SIGN
      90 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      91 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      92 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      93 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      94 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      95 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      96 |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      97 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      98 |  000000A4 | CURRENCY SIGN
      99 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      9A |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      9B |  000000A2 | CENT SIGN
      9C |  000000A3 | POUND SIGN
      9D |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      9E |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      9F |  00000192 | LATIN SMALL LETTER F WITH HOOK
      A0 |  000000A6 | BROKEN BAR
      A1 |  000000B4 | ACUTE ACCENT
      A2 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      A3 |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      A4 |  000000A8 | DIAERESIS
      A5 |  000000B8 | CEDILLA
      A6 |  000000B3 | SUPERSCRIPT THREE
      A7 |  000000AF | MACRON
      A8 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      A9 |  00002310 | REVERSED NOT SIGN
      AA |  000000AC | NOT SIGN
      AB |  000000BD | VULGAR FRACTION ONE HALF
      AC |  000000BC | VULGAR FRACTION ONE QUARTER
      AD |  000000BE | VULGAR FRACTION THREE QUARTERS
      AE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AF |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      B0 |  00002591 | LIGHT SHADE
      B1 |  00002592 | MEDIUM SHADE
      B2 |  00002593 | DARK SHADE
      B3 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      B4 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      B5 |  00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
      B6 |  00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
      B7 |  00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
      B8 |  00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
      B9 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      BA |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      BB |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      BC |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      BD |  0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
      BE |  0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
      BF |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      C0 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      C1 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      C2 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      C3 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      C4 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      C5 |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      C6 |  0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
      C7 |  0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
      C8 |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      C9 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      CA |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      CB |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      CC |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      CD |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      CE |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      CF |  00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
      D0 |  00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
      D1 |  00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
      D2 |  00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
      D3 |  00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
      D4 |  00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
      D5 |  00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
      D6 |  00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
      D7 |  0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
      D8 |  0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
      D9 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      DA |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      DB |  00002588 | FULL BLOCK
      DC |  00002584 | LOWER HALF BLOCK
      DD |  0000258C | LEFT HALF BLOCK
      DE |  00002590 | RIGHT HALF BLOCK
      DF |  00002580 | UPPER HALF BLOCK
      E0 |  000003B1 | GREEK SMALL LETTER ALPHA
      E1 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E2 |  00000393 | GREEK CAPITAL LETTER GAMMA
      E3 |  000003C0 | GREEK SMALL LETTER PI
      E4 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      E5 |  000003C3 | GREEK SMALL LETTER SIGMA
      E6 |  000000B5 | MICRO SIGN
      E7 |  000003C4 | GREEK SMALL LETTER TAU
      E8 |  000003A6 | GREEK CAPITAL LETTER PHI
      E9 |  00000398 | GREEK CAPITAL LETTER THETA
      EA |  000003A9 | GREEK CAPITAL LETTER OMEGA
      EB |  000003B4 | GREEK SMALL LETTER DELTA
      EC |  0000221E | INFINITY
      ED |  000003C6 | GREEK SMALL LETTER PHI
      EE |  000003B5 | GREEK SMALL LETTER EPSILON
      EF |  00002229 | INTERSECTION
      F0 |  00002261 | IDENTICAL TO
      F1 |  000000B1 | PLUS-MINUS SIGN
      F2 |  00002265 | GREATER-THAN OR EQUAL TO
      F3 |  00002264 | LESS-THAN OR EQUAL TO
      F4 |  00002320 | TOP HALF INTEGRAL
      F5 |  00002321 | BOTTOM HALF INTEGRAL
      F6 |  000000F7 | DIVISION SIGN
      F7 |  00002248 | ALMOST EQUAL TO
      F8 |  000000B0 | DEGREE SIGN
      F9 |  00002219 | BULLET OPERATOR
      FA |  000000B7 | MIDDLE DOT
      FB |  0000221A | SQUARE ROOT
      FC |  0000207F | SUPERSCRIPT LATIN SMALL LETTER N
      FD |  000000B2 | SUPERSCRIPT TWO
      FE |  000025A0 | BLACK SQUARE
      FF |  000000A0 | NO-BREAK SPACE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM863

    $main::fatpacked{"Locale/RecodeData/IBM864.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM864';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM864.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM864;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x066a,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00b0,
      0x00b7,
      0x2219,
      0x221a,
      0x2592,
      0x2500,
      0x2502,
      0x253c,
      0x2524,
      0x252c,
      0x251c,
      0x2534,
      0x2510,
      0x250c,
      0x2514,
      0x2518,
      0x03b2,
      0x221e,
      0x03c6,
      0x00b1,
      0x00bd,
      0x00bc,
      0x2248,
      0x00ab,
      0x00bb,
      0xfef7,
      0xfef8,
      0xfffd,
      0xfffd,
      0xfefb,
      0xfefc,
      0xfffd,
      0x00a0,
      0x00ad,
      0xfe82,
      0x00a3,
      0x00a4,
      0xfe84,
      0xfffd,
      0xfffd,
      0xfe8e,
      0xfe8f,
      0xfe95,
      0xfe99,
      0x060c,
      0xfe9d,
      0xfea1,
      0xfea5,
      0x0660,
      0x0661,
      0x0662,
      0x0663,
      0x0664,
      0x0665,
      0x0666,
      0x0667,
      0x0668,
      0x0669,
      0xfed1,
      0x061b,
      0xfeb1,
      0xfeb5,
      0xfeb9,
      0x061f,
      0x00a2,
      0xfe80,
      0xfe81,
      0xfe83,
      0xfe85,
      0xfeca,
      0xfe8b,
      0xfe8d,
      0xfe91,
      0xfe93,
      0xfe97,
      0xfe9b,
      0xfe9f,
      0xfea3,
      0xfea7,
      0xfea9,
      0xfeab,
      0xfead,
      0xfeaf,
      0xfeb3,
      0xfeb7,
      0xfebb,
      0xfebf,
      0xfec1,
      0xfec5,
      0xfecb,
      0xfecf,
      0x00a6,
      0x00ac,
      0x00f7,
      0x00d7,
      0xfec9,
      0x0640,
      0xfed3,
      0xfed7,
      0xfedb,
      0xfedf,
      0xfee3,
      0xfee7,
      0xfeeb,
      0xfeed,
      0xfeef,
      0xfef3,
      0xfebd,
      0xfecc,
      0xfece,
      0xfecd,
      0xfee1,
      0xfe7d,
      0x0651,
      0xfee5,
      0xfee9,
      0xfeec,
      0xfef0,
      0xfef2,
      0xfed0,
      0xfed5,
      0xfef5,
      0xfef6,
      0xfedd,
      0xfed9,
      0xfef1,
      0x25a0,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\xd9\xaa",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\xb0",
      "\xc2\xb7",
      "\xe2\x88\x99",
      "\xe2\x88\x9a",
      "\xe2\x96\x92",
      "\xe2\x94\x80",
      "\xe2\x94\x82",
      "\xe2\x94\xbc",
      "\xe2\x94\xa4",
      "\xe2\x94\xac",
      "\xe2\x94\x9c",
      "\xe2\x94\xb4",
      "\xe2\x94\x90",
      "\xe2\x94\x8c",
      "\xe2\x94\x94",
      "\xe2\x94\x98",
      "\xce\xb2",
      "\xe2\x88\x9e",
      "\xcf\x86",
      "\xc2\xb1",
      "\xc2\xbd",
      "\xc2\xbc",
      "\xe2\x89\x88",
      "\xc2\xab",
      "\xc2\xbb",
      "\xef\xbb\xb7",
      "\xef\xbb\xb8",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbb\xbb",
      "\xef\xbb\xbc",
      "\xef\xbf\xbd",
      "\xc2\xa0",
      "\xc2\xad",
      "\xef\xba\x82",
      "\xc2\xa3",
      "\xc2\xa4",
      "\xef\xba\x84",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xba\x8e",
      "\xef\xba\x8f",
      "\xef\xba\x95",
      "\xef\xba\x99",
      "\xd8\x8c",
      "\xef\xba\x9d",
      "\xef\xba\xa1",
      "\xef\xba\xa5",
      "\xd9\xa0",
      "\xd9\xa1",
      "\xd9\xa2",
      "\xd9\xa3",
      "\xd9\xa4",
      "\xd9\xa5",
      "\xd9\xa6",
      "\xd9\xa7",
      "\xd9\xa8",
      "\xd9\xa9",
      "\xef\xbb\x91",
      "\xd8\x9b",
      "\xef\xba\xb1",
      "\xef\xba\xb5",
      "\xef\xba\xb9",
      "\xd8\x9f",
      "\xc2\xa2",
      "\xef\xba\x80",
      "\xef\xba\x81",
      "\xef\xba\x83",
      "\xef\xba\x85",
      "\xef\xbb\x8a",
      "\xef\xba\x8b",
      "\xef\xba\x8d",
      "\xef\xba\x91",
      "\xef\xba\x93",
      "\xef\xba\x97",
      "\xef\xba\x9b",
      "\xef\xba\x9f",
      "\xef\xba\xa3",
      "\xef\xba\xa7",
      "\xef\xba\xa9",
      "\xef\xba\xab",
      "\xef\xba\xad",
      "\xef\xba\xaf",
      "\xef\xba\xb3",
      "\xef\xba\xb7",
      "\xef\xba\xbb",
      "\xef\xba\xbf",
      "\xef\xbb\x81",
      "\xef\xbb\x85",
      "\xef\xbb\x8b",
      "\xef\xbb\x8f",
      "\xc2\xa6",
      "\xc2\xac",
      "\xc3\xb7",
      "\xc3\x97",
      "\xef\xbb\x89",
      "\xd9\x80",
      "\xef\xbb\x93",
      "\xef\xbb\x97",
      "\xef\xbb\x9b",
      "\xef\xbb\x9f",
      "\xef\xbb\xa3",
      "\xef\xbb\xa7",
      "\xef\xbb\xab",
      "\xef\xbb\xad",
      "\xef\xbb\xaf",
      "\xef\xbb\xb3",
      "\xef\xba\xbd",
      "\xef\xbb\x8c",
      "\xef\xbb\x8e",
      "\xef\xbb\x8d",
      "\xef\xbb\xa1",
      "\xef\xb9\xbd",
      "\xd9\x91",
      "\xef\xbb\xa5",
      "\xef\xbb\xa9",
      "\xef\xbb\xac",
      "\xef\xbb\xb0",
      "\xef\xbb\xb2",
      "\xef\xbb\x90",
      "\xef\xbb\x95",
      "\xef\xbb\xb5",
      "\xef\xbb\xb6",
      "\xef\xbb\x9d",
      "\xef\xbb\x99",
      "\xef\xbb\xb1",
      "\xe2\x96\xa0",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xa0",
      0x000000a2 => "\xc0",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xa4",
      0x000000a6 => "\xdb",
      0x000000ab => "\x97",
      0x000000ac => "\xdc",
      0x000000ad => "\xa1",
      0x000000b0 => "\x80",
      0x000000b1 => "\x93",
      0x000000b7 => "\x81",
      0x000000bb => "\x98",
      0x000000bc => "\x95",
      0x000000bd => "\x94",
      0x000000d7 => "\xde",
      0x000000f7 => "\xdd",
      0x000003b2 => "\x90",
      0x000003c6 => "\x92",
      0x0000060c => "\xac",
      0x0000061b => "\xbb",
      0x0000061f => "\xbf",
      0x00000640 => "\xe0",
      0x00000651 => "\xf1",
      0x00000660 => "\xb0",
      0x00000661 => "\xb1",
      0x00000662 => "\xb2",
      0x00000663 => "\xb3",
      0x00000664 => "\xb4",
      0x00000665 => "\xb5",
      0x00000666 => "\xb6",
      0x00000667 => "\xb7",
      0x00000668 => "\xb8",
      0x00000669 => "\xb9",
      0x0000066a => "\x25",
      0x00002219 => "\x82",
      0x0000221a => "\x83",
      0x0000221e => "\x91",
      0x00002248 => "\x96",
      0x00002500 => "\x85",
      0x00002502 => "\x86",
      0x0000250c => "\x8d",
      0x00002510 => "\x8c",
      0x00002514 => "\x8e",
      0x00002518 => "\x8f",
      0x0000251c => "\x8a",
      0x00002524 => "\x88",
      0x0000252c => "\x89",
      0x00002534 => "\x8b",
      0x0000253c => "\x87",
      0x00002592 => "\x84",
      0x000025a0 => "\xfe",
      0x0000fe7d => "\xf0",
      0x0000fe80 => "\xc1",
      0x0000fe81 => "\xc2",
      0x0000fe82 => "\xa2",
      0x0000fe83 => "\xc3",
      0x0000fe84 => "\xa5",
      0x0000fe85 => "\xc4",
      0x0000fe8b => "\xc6",
      0x0000fe8d => "\xc7",
      0x0000fe8e => "\xa8",
      0x0000fe8f => "\xa9",
      0x0000fe91 => "\xc8",
      0x0000fe93 => "\xc9",
      0x0000fe95 => "\xaa",
      0x0000fe97 => "\xca",
      0x0000fe99 => "\xab",
      0x0000fe9b => "\xcb",
      0x0000fe9d => "\xad",
      0x0000fe9f => "\xcc",
      0x0000fea1 => "\xae",
      0x0000fea3 => "\xcd",
      0x0000fea5 => "\xaf",
      0x0000fea7 => "\xce",
      0x0000fea9 => "\xcf",
      0x0000feab => "\xd0",
      0x0000fead => "\xd1",
      0x0000feaf => "\xd2",
      0x0000feb1 => "\xbc",
      0x0000feb3 => "\xd3",
      0x0000feb5 => "\xbd",
      0x0000feb7 => "\xd4",
      0x0000feb9 => "\xbe",
      0x0000febb => "\xd5",
      0x0000febd => "\xeb",
      0x0000febf => "\xd6",
      0x0000fec1 => "\xd7",
      0x0000fec5 => "\xd8",
      0x0000fec9 => "\xdf",
      0x0000feca => "\xc5",
      0x0000fecb => "\xd9",
      0x0000fecc => "\xec",
      0x0000fecd => "\xee",
      0x0000fece => "\xed",
      0x0000fecf => "\xda",
      0x0000fed0 => "\xf7",
      0x0000fed1 => "\xba",
      0x0000fed3 => "\xe1",
      0x0000fed5 => "\xf8",
      0x0000fed7 => "\xe2",
      0x0000fed9 => "\xfc",
      0x0000fedb => "\xe3",
      0x0000fedd => "\xfb",
      0x0000fedf => "\xe4",
      0x0000fee1 => "\xef",
      0x0000fee3 => "\xe5",
      0x0000fee5 => "\xf2",
      0x0000fee7 => "\xe6",
      0x0000fee9 => "\xf3",
      0x0000feeb => "\xe7",
      0x0000feec => "\xf4",
      0x0000feed => "\xe8",
      0x0000feef => "\xe9",
      0x0000fef0 => "\xf5",
      0x0000fef1 => "\xfd",
      0x0000fef2 => "\xf6",
      0x0000fef3 => "\xea",
      0x0000fef5 => "\xf9",
      0x0000fef6 => "\xfa",
      0x0000fef7 => "\x99",
      0x0000fef8 => "\x9a",
      0x0000fefb => "\x9d",
      0x0000fefc => "\x9e",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM864 - Conversion routines for IBM864
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM864.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   automatically generated from the charDB
   alias CP864
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL
      01 |  00000001 | START OF HEADING
      02 |  00000002 | START OF TEXT
      03 |  00000003 | END OF TEXT
      04 |  00000004 | END OF TRANSMISSION
      05 |  00000005 | ENQUIRY
      06 |  00000006 | ACKNOWLEDGE
      07 |  00000007 | BELL
      08 |  00000008 | BACKSPACE
      09 |  00000009 | HORIZONTAL TABULATION
      0A |  0000000A | LINE FEED
      0B |  0000000B | VERTICAL TABULATION
      0C |  0000000C | FORM FEED
      0D |  0000000D | CARRIAGE RETURN
      0E |  0000000E | SHIFT OUT
      0F |  0000000F | SHIFT IN
      10 |  00000010 | DATA LINK ESCAPE
      11 |  00000011 | DEVICE CONTROL ONE
      12 |  00000012 | DEVICE CONTROL TWO
      13 |  00000013 | DEVICE CONTROL THREE
      14 |  00000014 | DEVICE CONTROL FOUR
      15 |  00000015 | NEGATIVE ACKNOWLEDGE
      16 |  00000016 | SYNCHRONOUS IDLE
      17 |  00000017 | END OF TRANSMISSION BLOCK
      18 |  00000018 | CANCEL
      19 |  00000019 | END OF MEDIUM
      1A |  0000001A | SUBSTITUTE
      1B |  0000001B | ESCAPE
      1C |  0000001C | FILE SEPARATOR
      1D |  0000001D | GROUP SEPARATOR
      1E |  0000001E | RECORD SEPARATOR
      1F |  0000001F | UNIT SEPARATOR
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  0000066A | ARABIC PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE
      80 |  000000B0 | DEGREE SIGN
      81 |  000000B7 | MIDDLE DOT
      82 |  00002219 | BULLET OPERATOR
      83 |  0000221A | SQUARE ROOT
      84 |  00002592 | MEDIUM SHADE
      85 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      86 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      87 |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      88 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      89 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      8A |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      8B |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      8C |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      8D |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      8E |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      8F |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      90 |  000003B2 | GREEK SMALL LETTER BETA
      91 |  0000221E | INFINITY
      92 |  000003C6 | GREEK SMALL LETTER PHI
      93 |  000000B1 | PLUS-MINUS SIGN
      94 |  000000BD | VULGAR FRACTION ONE HALF
      95 |  000000BC | VULGAR FRACTION ONE QUARTER
      96 |  00002248 | ALMOST EQUAL TO
      97 |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      98 |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      99 |  0000FEF7 | ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM
      9A |  0000FEF8 | ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM
      9D |  0000FEFB | ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM
      9E |  0000FEFC | ARABIC LIGATURE LAM WITH ALEF FINAL FORM
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  000000AD | SOFT HYPHEN
      A2 |  0000FE82 | ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  0000FE84 | ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM
      A8 |  0000FE8E | ARABIC LETTER ALEF FINAL FORM
      A9 |  0000FE8F | ARABIC LETTER BEH ISOLATED FORM
      AA |  0000FE95 | ARABIC LETTER TEH ISOLATED FORM
      AB |  0000FE99 | ARABIC LETTER THEH ISOLATED FORM
      AC |  0000060C | ARABIC COMMA
      AD |  0000FE9D | ARABIC LETTER JEEM ISOLATED FORM
      AE |  0000FEA1 | ARABIC LETTER HAH ISOLATED FORM
      AF |  0000FEA5 | ARABIC LETTER KHAH ISOLATED FORM
      B0 |  00000660 | ARABIC-INDIC DIGIT ZERO
      B1 |  00000661 | ARABIC-INDIC DIGIT ONE
      B2 |  00000662 | ARABIC-INDIC DIGIT TWO
      B3 |  00000663 | ARABIC-INDIC DIGIT THREE
      B4 |  00000664 | ARABIC-INDIC DIGIT FOUR
      B5 |  00000665 | ARABIC-INDIC DIGIT FIVE
      B6 |  00000666 | ARABIC-INDIC DIGIT SIX
      B7 |  00000667 | ARABIC-INDIC DIGIT SEVEN
      B8 |  00000668 | ARABIC-INDIC DIGIT EIGHT
      B9 |  00000669 | ARABIC-INDIC DIGIT NINE
      BA |  0000FED1 | ARABIC LETTER FEH ISOLATED FORM
      BB |  0000061B | ARABIC SEMICOLON
      BC |  0000FEB1 | ARABIC LETTER SEEN ISOLATED FORM
      BD |  0000FEB5 | ARABIC LETTER SHEEN ISOLATED FORM
      BE |  0000FEB9 | ARABIC LETTER SAD ISOLATED FORM
      BF |  0000061F | ARABIC QUESTION MARK
      C0 |  000000A2 | CENT SIGN
      C1 |  0000FE80 | ARABIC LETTER HAMZA ISOLATED FORM
      C2 |  0000FE81 | ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM
      C3 |  0000FE83 | ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM
      C4 |  0000FE85 | ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM
      C5 |  0000FECA | ARABIC LETTER AIN FINAL FORM
      C6 |  0000FE8B | ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM
      C7 |  0000FE8D | ARABIC LETTER ALEF ISOLATED FORM
      C8 |  0000FE91 | ARABIC LETTER BEH INITIAL FORM
      C9 |  0000FE93 | ARABIC LETTER TEH MARBUTA ISOLATED FORM
      CA |  0000FE97 | ARABIC LETTER TEH INITIAL FORM
      CB |  0000FE9B | ARABIC LETTER THEH INITIAL FORM
      CC |  0000FE9F | ARABIC LETTER JEEM INITIAL FORM
      CD |  0000FEA3 | ARABIC LETTER HAH INITIAL FORM
      CE |  0000FEA7 | ARABIC LETTER KHAH INITIAL FORM
      CF |  0000FEA9 | ARABIC LETTER DAL ISOLATED FORM
      D0 |  0000FEAB | ARABIC LETTER THAL ISOLATED FORM
      D1 |  0000FEAD | ARABIC LETTER REH ISOLATED FORM
      D2 |  0000FEAF | ARABIC LETTER ZAIN ISOLATED FORM
      D3 |  0000FEB3 | ARABIC LETTER SEEN INITIAL FORM
      D4 |  0000FEB7 | ARABIC LETTER SHEEN INITIAL FORM
      D5 |  0000FEBB | ARABIC LETTER SAD INITIAL FORM
      D6 |  0000FEBF | ARABIC LETTER DAD INITIAL FORM
      D7 |  0000FEC1 | ARABIC LETTER TAH ISOLATED FORM
      D8 |  0000FEC5 | ARABIC LETTER ZAH ISOLATED FORM
      D9 |  0000FECB | ARABIC LETTER AIN INITIAL FORM
      DA |  0000FECF | ARABIC LETTER GHAIN INITIAL FORM
      DB |  000000A6 | BROKEN BAR
      DC |  000000AC | NOT SIGN
      DD |  000000F7 | DIVISION SIGN
      DE |  000000D7 | MULTIPLICATION SIGN
      DF |  0000FEC9 | ARABIC LETTER AIN ISOLATED FORM
      E0 |  00000640 | ARABIC TATWEEL
      E1 |  0000FED3 | ARABIC LETTER FEH INITIAL FORM
      E2 |  0000FED7 | ARABIC LETTER QAF INITIAL FORM
      E3 |  0000FEDB | ARABIC LETTER KAF INITIAL FORM
      E4 |  0000FEDF | ARABIC LETTER LAM INITIAL FORM
      E5 |  0000FEE3 | ARABIC LETTER MEEM INITIAL FORM
      E6 |  0000FEE7 | ARABIC LETTER NOON INITIAL FORM
      E7 |  0000FEEB | ARABIC LETTER HEH INITIAL FORM
      E8 |  0000FEED | ARABIC LETTER WAW ISOLATED FORM
      E9 |  0000FEEF | ARABIC LETTER ALEF MAKSURA ISOLATED FORM
      EA |  0000FEF3 | ARABIC LETTER YEH INITIAL FORM
      EB |  0000FEBD | ARABIC LETTER DAD ISOLATED FORM
      EC |  0000FECC | ARABIC LETTER AIN MEDIAL FORM
      ED |  0000FECE | ARABIC LETTER GHAIN FINAL FORM
      EE |  0000FECD | ARABIC LETTER GHAIN ISOLATED FORM
      EF |  0000FEE1 | ARABIC LETTER MEEM ISOLATED FORM
      F0 |  0000FE7D | ARABIC SHADDA MEDIAL FORM
      F1 |  00000651 | ARABIC SHADDA
      F2 |  0000FEE5 | ARABIC LETTER NOON ISOLATED FORM
      F3 |  0000FEE9 | ARABIC LETTER HEH ISOLATED FORM
      F4 |  0000FEEC | ARABIC LETTER HEH MEDIAL FORM
      F5 |  0000FEF0 | ARABIC LETTER ALEF MAKSURA FINAL FORM
      F6 |  0000FEF2 | ARABIC LETTER YEH FINAL FORM
      F7 |  0000FED0 | ARABIC LETTER GHAIN MEDIAL FORM
      F8 |  0000FED5 | ARABIC LETTER QAF ISOLATED FORM
      F9 |  0000FEF5 | ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM
      FA |  0000FEF6 | ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM
      FB |  0000FEDD | ARABIC LETTER LAM ISOLATED FORM
      FC |  0000FED9 | ARABIC LETTER KAF ISOLATED FORM
      FD |  0000FEF1 | ARABIC LETTER YEH ISOLATED FORM
      FE |  000025A0 | BLACK SQUARE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM864

    $main::fatpacked{"Locale/RecodeData/IBM865.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM865';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM865.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM865;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c7,
      0x00fc,
      0x00e9,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e5,
      0x00e7,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ef,
      0x00ee,
      0x00ec,
      0x00c4,
      0x00c5,
      0x00c9,
      0x00e6,
      0x00c6,
      0x00f4,
      0x00f6,
      0x00f2,
      0x00fb,
      0x00f9,
      0x00ff,
      0x00d6,
      0x00dc,
      0x00f8,
      0x00a3,
      0x00d8,
      0x20a7,
      0x0192,
      0x00e1,
      0x00ed,
      0x00f3,
      0x00fa,
      0x00f1,
      0x00d1,
      0x00aa,
      0x00ba,
      0x00bf,
      0x2310,
      0x00ac,
      0x00bd,
      0x00bc,
      0x00a1,
      0x00ab,
      0x00a4,
      0x2591,
      0x2592,
      0x2593,
      0x2502,
      0x2524,
      0x2561,
      0x2562,
      0x2556,
      0x2555,
      0x2563,
      0x2551,
      0x2557,
      0x255d,
      0x255c,
      0x255b,
      0x2510,
      0x2514,
      0x2534,
      0x252c,
      0x251c,
      0x2500,
      0x253c,
      0x255e,
      0x255f,
      0x255a,
      0x2554,
      0x2569,
      0x2566,
      0x2560,
      0x2550,
      0x256c,
      0x2567,
      0x2568,
      0x2564,
      0x2565,
      0x2559,
      0x2558,
      0x2552,
      0x2553,
      0x256b,
      0x256a,
      0x2518,
      0x250c,
      0x2588,
      0x2584,
      0x258c,
      0x2590,
      0x2580,
      0x03b1,
      0x00df,
      0x0393,
      0x03c0,
      0x03a3,
      0x03c3,
      0x00b5,
      0x03c4,
      0x03a6,
      0x0398,
      0x03a9,
      0x03b4,
      0x221e,
      0x03c6,
      0x03b5,
      0x2229,
      0x2261,
      0x00b1,
      0x2265,
      0x2264,
      0x2320,
      0x2321,
      0x00f7,
      0x2248,
      0x00b0,
      0x2219,
      0x00b7,
      0x221a,
      0x207f,
      0x00b2,
      0x25a0,
      0x00a0,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x87",
      "\xc3\xbc",
      "\xc3\xa9",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xaf",
      "\xc3\xae",
      "\xc3\xac",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x89",
      "\xc3\xa6",
      "\xc3\x86",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb2",
      "\xc3\xbb",
      "\xc3\xb9",
      "\xc3\xbf",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc3\xb8",
      "\xc2\xa3",
      "\xc3\x98",
      "\xe2\x82\xa7",
      "\xc6\x92",
      "\xc3\xa1",
      "\xc3\xad",
      "\xc3\xb3",
      "\xc3\xba",
      "\xc3\xb1",
      "\xc3\x91",
      "\xc2\xaa",
      "\xc2\xba",
      "\xc2\xbf",
      "\xe2\x8c\x90",
      "\xc2\xac",
      "\xc2\xbd",
      "\xc2\xbc",
      "\xc2\xa1",
      "\xc2\xab",
      "\xc2\xa4",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x94\x82",
      "\xe2\x94\xa4",
      "\xe2\x95\xa1",
      "\xe2\x95\xa2",
      "\xe2\x95\x96",
      "\xe2\x95\x95",
      "\xe2\x95\xa3",
      "\xe2\x95\x91",
      "\xe2\x95\x97",
      "\xe2\x95\x9d",
      "\xe2\x95\x9c",
      "\xe2\x95\x9b",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\xb4",
      "\xe2\x94\xac",
      "\xe2\x94\x9c",
      "\xe2\x94\x80",
      "\xe2\x94\xbc",
      "\xe2\x95\x9e",
      "\xe2\x95\x9f",
      "\xe2\x95\x9a",
      "\xe2\x95\x94",
      "\xe2\x95\xa9",
      "\xe2\x95\xa6",
      "\xe2\x95\xa0",
      "\xe2\x95\x90",
      "\xe2\x95\xac",
      "\xe2\x95\xa7",
      "\xe2\x95\xa8",
      "\xe2\x95\xa4",
      "\xe2\x95\xa5",
      "\xe2\x95\x99",
      "\xe2\x95\x98",
      "\xe2\x95\x92",
      "\xe2\x95\x93",
      "\xe2\x95\xab",
      "\xe2\x95\xaa",
      "\xe2\x94\x98",
      "\xe2\x94\x8c",
      "\xe2\x96\x88",
      "\xe2\x96\x84",
      "\xe2\x96\x8c",
      "\xe2\x96\x90",
      "\xe2\x96\x80",
      "\xce\xb1",
      "\xc3\x9f",
      "\xce\x93",
      "\xcf\x80",
      "\xce\xa3",
      "\xcf\x83",
      "\xc2\xb5",
      "\xcf\x84",
      "\xce\xa6",
      "\xce\x98",
      "\xce\xa9",
      "\xce\xb4",
      "\xe2\x88\x9e",
      "\xcf\x86",
      "\xce\xb5",
      "\xe2\x88\xa9",
      "\xe2\x89\xa1",
      "\xc2\xb1",
      "\xe2\x89\xa5",
      "\xe2\x89\xa4",
      "\xe2\x8c\xa0",
      "\xe2\x8c\xa1",
      "\xc3\xb7",
      "\xe2\x89\x88",
      "\xc2\xb0",
      "\xe2\x88\x99",
      "\xc2\xb7",
      "\xe2\x88\x9a",
      "\xe2\x81\xbf",
      "\xc2\xb2",
      "\xe2\x96\xa0",
      "\xc2\xa0",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xff",
      0x000000a1 => "\xad",
      0x000000a3 => "\x9c",
      0x000000a4 => "\xaf",
      0x000000aa => "\xa6",
      0x000000ab => "\xae",
      0x000000ac => "\xaa",
      0x000000b0 => "\xf8",
      0x000000b1 => "\xf1",
      0x000000b2 => "\xfd",
      0x000000b5 => "\xe6",
      0x000000b7 => "\xfa",
      0x000000ba => "\xa7",
      0x000000bc => "\xac",
      0x000000bd => "\xab",
      0x000000bf => "\xa8",
      0x000000c4 => "\x8e",
      0x000000c5 => "\x8f",
      0x000000c6 => "\x92",
      0x000000c7 => "\x80",
      0x000000c9 => "\x90",
      0x000000d1 => "\xa5",
      0x000000d6 => "\x99",
      0x000000d8 => "\x9d",
      0x000000dc => "\x9a",
      0x000000df => "\xe1",
      0x000000e0 => "\x85",
      0x000000e1 => "\xa0",
      0x000000e2 => "\x83",
      0x000000e4 => "\x84",
      0x000000e5 => "\x86",
      0x000000e6 => "\x91",
      0x000000e7 => "\x87",
      0x000000e8 => "\x8a",
      0x000000e9 => "\x82",
      0x000000ea => "\x88",
      0x000000eb => "\x89",
      0x000000ec => "\x8d",
      0x000000ed => "\xa1",
      0x000000ee => "\x8c",
      0x000000ef => "\x8b",
      0x000000f1 => "\xa4",
      0x000000f2 => "\x95",
      0x000000f3 => "\xa2",
      0x000000f4 => "\x93",
      0x000000f6 => "\x94",
      0x000000f7 => "\xf6",
      0x000000f8 => "\x9b",
      0x000000f9 => "\x97",
      0x000000fa => "\xa3",
      0x000000fb => "\x96",
      0x000000fc => "\x81",
      0x000000ff => "\x98",
      0x00000192 => "\x9f",
      0x00000393 => "\xe2",
      0x00000398 => "\xe9",
      0x000003a3 => "\xe4",
      0x000003a6 => "\xe8",
      0x000003a9 => "\xea",
      0x000003b1 => "\xe0",
      0x000003b4 => "\xeb",
      0x000003b5 => "\xee",
      0x000003c0 => "\xe3",
      0x000003c3 => "\xe5",
      0x000003c4 => "\xe7",
      0x000003c6 => "\xed",
      0x0000207f => "\xfc",
      0x000020a7 => "\x9e",
      0x00002219 => "\xf9",
      0x0000221a => "\xfb",
      0x0000221e => "\xec",
      0x00002229 => "\xef",
      0x00002248 => "\xf7",
      0x00002261 => "\xf0",
      0x00002264 => "\xf3",
      0x00002265 => "\xf2",
      0x00002310 => "\xa9",
      0x00002320 => "\xf4",
      0x00002321 => "\xf5",
      0x00002500 => "\xc4",
      0x00002502 => "\xb3",
      0x0000250c => "\xda",
      0x00002510 => "\xbf",
      0x00002514 => "\xc0",
      0x00002518 => "\xd9",
      0x0000251c => "\xc3",
      0x00002524 => "\xb4",
      0x0000252c => "\xc2",
      0x00002534 => "\xc1",
      0x0000253c => "\xc5",
      0x00002550 => "\xcd",
      0x00002551 => "\xba",
      0x00002552 => "\xd5",
      0x00002553 => "\xd6",
      0x00002554 => "\xc9",
      0x00002555 => "\xb8",
      0x00002556 => "\xb7",
      0x00002557 => "\xbb",
      0x00002558 => "\xd4",
      0x00002559 => "\xd3",
      0x0000255a => "\xc8",
      0x0000255b => "\xbe",
      0x0000255c => "\xbd",
      0x0000255d => "\xbc",
      0x0000255e => "\xc6",
      0x0000255f => "\xc7",
      0x00002560 => "\xcc",
      0x00002561 => "\xb5",
      0x00002562 => "\xb6",
      0x00002563 => "\xb9",
      0x00002564 => "\xd1",
      0x00002565 => "\xd2",
      0x00002566 => "\xcb",
      0x00002567 => "\xcf",
      0x00002568 => "\xd0",
      0x00002569 => "\xca",
      0x0000256a => "\xd8",
      0x0000256b => "\xd7",
      0x0000256c => "\xce",
      0x00002580 => "\xdf",
      0x00002584 => "\xdc",
      0x00002588 => "\xdb",
      0x0000258c => "\xdd",
      0x00002590 => "\xde",
      0x00002591 => "\xb0",
      0x00002592 => "\xb1",
      0x00002593 => "\xb2",
      0x000025a0 => "\xfe",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM865 - Conversion routines for IBM865
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM865.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM DOS 3.3 Ref (Abridged), 94X9575 (Feb 1987)
   alias CP865
   alias 865
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      81 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      82 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      83 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      84 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      85 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      86 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      87 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      88 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      89 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      8A |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      8B |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      8C |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      8D |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      8E |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      8F |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      90 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      91 |  000000E6 | LATIN SMALL LETTER AE
      92 |  000000C6 | LATIN CAPITAL LETTER AE
      93 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      94 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      95 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      96 |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      97 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      98 |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      99 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      9A |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      9B |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      9C |  000000A3 | POUND SIGN
      9D |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      9E |  000020A7 | PESETA SIGN
      9F |  00000192 | LATIN SMALL LETTER F WITH HOOK
      A0 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      A1 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      A2 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      A3 |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      A4 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      A5 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      A6 |  000000AA | FEMININE ORDINAL INDICATOR
      A7 |  000000BA | MASCULINE ORDINAL INDICATOR
      A8 |  000000BF | INVERTED QUESTION MARK
      A9 |  00002310 | REVERSED NOT SIGN
      AA |  000000AC | NOT SIGN
      AB |  000000BD | VULGAR FRACTION ONE HALF
      AC |  000000BC | VULGAR FRACTION ONE QUARTER
      AD |  000000A1 | INVERTED EXCLAMATION MARK
      AE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AF |  000000A4 | CURRENCY SIGN
      B0 |  00002591 | LIGHT SHADE
      B1 |  00002592 | MEDIUM SHADE
      B2 |  00002593 | DARK SHADE
      B3 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      B4 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      B5 |  00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
      B6 |  00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
      B7 |  00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
      B8 |  00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
      B9 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      BA |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      BB |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      BC |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      BD |  0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
      BE |  0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
      BF |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      C0 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      C1 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      C2 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      C3 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      C4 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      C5 |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      C6 |  0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
      C7 |  0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
      C8 |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      C9 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      CA |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      CB |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      CC |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      CD |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      CE |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      CF |  00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
      D0 |  00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
      D1 |  00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
      D2 |  00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
      D3 |  00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
      D4 |  00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
      D5 |  00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
      D6 |  00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
      D7 |  0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
      D8 |  0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
      D9 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      DA |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      DB |  00002588 | FULL BLOCK
      DC |  00002584 | LOWER HALF BLOCK
      DD |  0000258C | LEFT HALF BLOCK
      DE |  00002590 | RIGHT HALF BLOCK
      DF |  00002580 | UPPER HALF BLOCK
      E0 |  000003B1 | GREEK SMALL LETTER ALPHA
      E1 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E2 |  00000393 | GREEK CAPITAL LETTER GAMMA
      E3 |  000003C0 | GREEK SMALL LETTER PI
      E4 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      E5 |  000003C3 | GREEK SMALL LETTER SIGMA
      E6 |  000000B5 | MICRO SIGN
      E7 |  000003C4 | GREEK SMALL LETTER TAU
      E8 |  000003A6 | GREEK CAPITAL LETTER PHI
      E9 |  00000398 | GREEK CAPITAL LETTER THETA
      EA |  000003A9 | GREEK CAPITAL LETTER OMEGA
      EB |  000003B4 | GREEK SMALL LETTER DELTA
      EC |  0000221E | INFINITY
      ED |  000003C6 | GREEK SMALL LETTER PHI
      EE |  000003B5 | GREEK SMALL LETTER EPSILON
      EF |  00002229 | INTERSECTION
      F0 |  00002261 | IDENTICAL TO
      F1 |  000000B1 | PLUS-MINUS SIGN
      F2 |  00002265 | GREATER-THAN OR EQUAL TO
      F3 |  00002264 | LESS-THAN OR EQUAL TO
      F4 |  00002320 | TOP HALF INTEGRAL
      F5 |  00002321 | BOTTOM HALF INTEGRAL
      F6 |  000000F7 | DIVISION SIGN
      F7 |  00002248 | ALMOST EQUAL TO
      F8 |  000000B0 | DEGREE SIGN
      F9 |  00002219 | BULLET OPERATOR
      FA |  000000B7 | MIDDLE DOT
      FB |  0000221A | SQUARE ROOT
      FC |  0000207F | SUPERSCRIPT LATIN SMALL LETTER N
      FD |  000000B2 | SUPERSCRIPT TWO
      FE |  000025A0 | BLACK SQUARE
      FF |  000000A0 | NO-BREAK SPACE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM865

    $main::fatpacked{"Locale/RecodeData/IBM866.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM866';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM866.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM866;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0410,
      0x0411,
      0x0412,
      0x0413,
      0x0414,
      0x0415,
      0x0416,
      0x0417,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0x041d,
      0x041e,
      0x041f,
      0x0420,
      0x0421,
      0x0422,
      0x0423,
      0x0424,
      0x0425,
      0x0426,
      0x0427,
      0x0428,
      0x0429,
      0x042a,
      0x042b,
      0x042c,
      0x042d,
      0x042e,
      0x042f,
      0x0430,
      0x0431,
      0x0432,
      0x0433,
      0x0434,
      0x0435,
      0x0436,
      0x0437,
      0x0438,
      0x0439,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x2591,
      0x2592,
      0x2593,
      0x2502,
      0x2524,
      0x2561,
      0x2562,
      0x2556,
      0x2555,
      0x2563,
      0x2551,
      0x2557,
      0x255d,
      0x255c,
      0x255b,
      0x2510,
      0x2514,
      0x2534,
      0x252c,
      0x251c,
      0x2500,
      0x253c,
      0x255e,
      0x255f,
      0x255a,
      0x2554,
      0x2569,
      0x2566,
      0x2560,
      0x2550,
      0x256c,
      0x2567,
      0x2568,
      0x2564,
      0x2565,
      0x2559,
      0x2558,
      0x2552,
      0x2553,
      0x256b,
      0x256a,
      0x2518,
      0x250c,
      0x2588,
      0x2584,
      0x258c,
      0x2590,
      0x2580,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0444,
      0x0445,
      0x0446,
      0x0447,
      0x0448,
      0x0449,
      0x044a,
      0x044b,
      0x044c,
      0x044d,
      0x044e,
      0x044f,
      0x0401,
      0x0451,
      0x0404,
      0x0454,
      0x0407,
      0x0457,
      0x040e,
      0x045e,
      0x00b0,
      0x2219,
      0x00b7,
      0x221a,
      0x2116,
      0x00a4,
      0x25a0,
      0x00a0,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\x92",
      "\xd0\x93",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\x96",
      "\xd0\x97",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xa0",
      "\xd0\xa1",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\xa4",
      "\xd0\xa5",
      "\xd0\xa6",
      "\xd0\xa7",
      "\xd0\xa8",
      "\xd0\xa9",
      "\xd0\xaa",
      "\xd0\xab",
      "\xd0\xac",
      "\xd0\xad",
      "\xd0\xae",
      "\xd0\xaf",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xd0\xb2",
      "\xd0\xb3",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd0\xb6",
      "\xd0\xb7",
      "\xd0\xb8",
      "\xd0\xb9",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x94\x82",
      "\xe2\x94\xa4",
      "\xe2\x95\xa1",
      "\xe2\x95\xa2",
      "\xe2\x95\x96",
      "\xe2\x95\x95",
      "\xe2\x95\xa3",
      "\xe2\x95\x91",
      "\xe2\x95\x97",
      "\xe2\x95\x9d",
      "\xe2\x95\x9c",
      "\xe2\x95\x9b",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\xb4",
      "\xe2\x94\xac",
      "\xe2\x94\x9c",
      "\xe2\x94\x80",
      "\xe2\x94\xbc",
      "\xe2\x95\x9e",
      "\xe2\x95\x9f",
      "\xe2\x95\x9a",
      "\xe2\x95\x94",
      "\xe2\x95\xa9",
      "\xe2\x95\xa6",
      "\xe2\x95\xa0",
      "\xe2\x95\x90",
      "\xe2\x95\xac",
      "\xe2\x95\xa7",
      "\xe2\x95\xa8",
      "\xe2\x95\xa4",
      "\xe2\x95\xa5",
      "\xe2\x95\x99",
      "\xe2\x95\x98",
      "\xe2\x95\x92",
      "\xe2\x95\x93",
      "\xe2\x95\xab",
      "\xe2\x95\xaa",
      "\xe2\x94\x98",
      "\xe2\x94\x8c",
      "\xe2\x96\x88",
      "\xe2\x96\x84",
      "\xe2\x96\x8c",
      "\xe2\x96\x90",
      "\xe2\x96\x80",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd1\x84",
      "\xd1\x85",
      "\xd1\x86",
      "\xd1\x87",
      "\xd1\x88",
      "\xd1\x89",
      "\xd1\x8a",
      "\xd1\x8b",
      "\xd1\x8c",
      "\xd1\x8d",
      "\xd1\x8e",
      "\xd1\x8f",
      "\xd0\x81",
      "\xd1\x91",
      "\xd0\x84",
      "\xd1\x94",
      "\xd0\x87",
      "\xd1\x97",
      "\xd0\x8e",
      "\xd1\x9e",
      "\xc2\xb0",
      "\xe2\x88\x99",
      "\xc2\xb7",
      "\xe2\x88\x9a",
      "\xe2\x84\x96",
      "\xc2\xa4",
      "\xe2\x96\xa0",
      "\xc2\xa0",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xff",
      0x000000a4 => "\xfd",
      0x000000b0 => "\xf8",
      0x000000b7 => "\xfa",
      0x00000401 => "\xf0",
      0x00000404 => "\xf2",
      0x00000407 => "\xf4",
      0x0000040e => "\xf6",
      0x00000410 => "\x80",
      0x00000411 => "\x81",
      0x00000412 => "\x82",
      0x00000413 => "\x83",
      0x00000414 => "\x84",
      0x00000415 => "\x85",
      0x00000416 => "\x86",
      0x00000417 => "\x87",
      0x00000418 => "\x88",
      0x00000419 => "\x89",
      0x0000041a => "\x8a",
      0x0000041b => "\x8b",
      0x0000041c => "\x8c",
      0x0000041d => "\x8d",
      0x0000041e => "\x8e",
      0x0000041f => "\x8f",
      0x00000420 => "\x90",
      0x00000421 => "\x91",
      0x00000422 => "\x92",
      0x00000423 => "\x93",
      0x00000424 => "\x94",
      0x00000425 => "\x95",
      0x00000426 => "\x96",
      0x00000427 => "\x97",
      0x00000428 => "\x98",
      0x00000429 => "\x99",
      0x0000042a => "\x9a",
      0x0000042b => "\x9b",
      0x0000042c => "\x9c",
      0x0000042d => "\x9d",
      0x0000042e => "\x9e",
      0x0000042f => "\x9f",
      0x00000430 => "\xa0",
      0x00000431 => "\xa1",
      0x00000432 => "\xa2",
      0x00000433 => "\xa3",
      0x00000434 => "\xa4",
      0x00000435 => "\xa5",
      0x00000436 => "\xa6",
      0x00000437 => "\xa7",
      0x00000438 => "\xa8",
      0x00000439 => "\xa9",
      0x0000043a => "\xaa",
      0x0000043b => "\xab",
      0x0000043c => "\xac",
      0x0000043d => "\xad",
      0x0000043e => "\xae",
      0x0000043f => "\xaf",
      0x00000440 => "\xe0",
      0x00000441 => "\xe1",
      0x00000442 => "\xe2",
      0x00000443 => "\xe3",
      0x00000444 => "\xe4",
      0x00000445 => "\xe5",
      0x00000446 => "\xe6",
      0x00000447 => "\xe7",
      0x00000448 => "\xe8",
      0x00000449 => "\xe9",
      0x0000044a => "\xea",
      0x0000044b => "\xeb",
      0x0000044c => "\xec",
      0x0000044d => "\xed",
      0x0000044e => "\xee",
      0x0000044f => "\xef",
      0x00000451 => "\xf1",
      0x00000454 => "\xf3",
      0x00000457 => "\xf5",
      0x0000045e => "\xf7",
      0x00002116 => "\xfc",
      0x00002219 => "\xf9",
      0x0000221a => "\xfb",
      0x00002500 => "\xc4",
      0x00002502 => "\xb3",
      0x0000250c => "\xda",
      0x00002510 => "\xbf",
      0x00002514 => "\xc0",
      0x00002518 => "\xd9",
      0x0000251c => "\xc3",
      0x00002524 => "\xb4",
      0x0000252c => "\xc2",
      0x00002534 => "\xc1",
      0x0000253c => "\xc5",
      0x00002550 => "\xcd",
      0x00002551 => "\xba",
      0x00002552 => "\xd5",
      0x00002553 => "\xd6",
      0x00002554 => "\xc9",
      0x00002555 => "\xb8",
      0x00002556 => "\xb7",
      0x00002557 => "\xbb",
      0x00002558 => "\xd4",
      0x00002559 => "\xd3",
      0x0000255a => "\xc8",
      0x0000255b => "\xbe",
      0x0000255c => "\xbd",
      0x0000255d => "\xbc",
      0x0000255e => "\xc6",
      0x0000255f => "\xc7",
      0x00002560 => "\xcc",
      0x00002561 => "\xb5",
      0x00002562 => "\xb6",
      0x00002563 => "\xb9",
      0x00002564 => "\xd1",
      0x00002565 => "\xd2",
      0x00002566 => "\xcb",
      0x00002567 => "\xcf",
      0x00002568 => "\xd0",
      0x00002569 => "\xca",
      0x0000256a => "\xd8",
      0x0000256b => "\xd7",
      0x0000256c => "\xce",
      0x00002580 => "\xdf",
      0x00002584 => "\xdc",
      0x00002588 => "\xdb",
      0x0000258c => "\xdd",
      0x00002590 => "\xde",
      0x00002591 => "\xb0",
      0x00002592 => "\xb1",
      0x00002593 => "\xb2",
      0x000025a0 => "\xfe",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM866 - Conversion routines for IBM866
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM866.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   automatically generated from the charDB
   alias CP866
   alias 866
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL
      01 |  00000001 | START OF HEADING
      02 |  00000002 | START OF TEXT
      03 |  00000003 | END OF TEXT
      04 |  00000004 | END OF TRANSMISSION
      05 |  00000005 | ENQUIRY
      06 |  00000006 | ACKNOWLEDGE
      07 |  00000007 | BELL
      08 |  00000008 | BACKSPACE
      09 |  00000009 | HORIZONTAL TABULATION
      0A |  0000000A | LINE FEED
      0B |  0000000B | VERTICAL TABULATION
      0C |  0000000C | FORM FEED
      0D |  0000000D | CARRIAGE RETURN
      0E |  0000000E | SHIFT OUT
      0F |  0000000F | SHIFT IN
      10 |  00000010 | DATA LINK ESCAPE
      11 |  00000011 | DEVICE CONTROL ONE
      12 |  00000012 | DEVICE CONTROL TWO
      13 |  00000013 | DEVICE CONTROL THREE
      14 |  00000014 | DEVICE CONTROL FOUR
      15 |  00000015 | NEGATIVE ACKNOWLEDGE
      16 |  00000016 | SYNCHRONOUS IDLE
      17 |  00000017 | END OF TRANSMISSION BLOCK
      18 |  00000018 | CANCEL
      19 |  00000019 | END OF MEDIUM
      1A |  0000001A | SUBSTITUTE
      1B |  0000001B | ESCAPE
      1C |  0000001C | FILE SEPARATOR
      1D |  0000001D | GROUP SEPARATOR
      1E |  0000001E | RECORD SEPARATOR
      1F |  0000001F | UNIT SEPARATOR
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE
      80 |  00000410 | CYRILLIC CAPITAL LETTER A
      81 |  00000411 | CYRILLIC CAPITAL LETTER BE
      82 |  00000412 | CYRILLIC CAPITAL LETTER VE
      83 |  00000413 | CYRILLIC CAPITAL LETTER GHE
      84 |  00000414 | CYRILLIC CAPITAL LETTER DE
      85 |  00000415 | CYRILLIC CAPITAL LETTER IE
      86 |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      87 |  00000417 | CYRILLIC CAPITAL LETTER ZE
      88 |  00000418 | CYRILLIC CAPITAL LETTER I
      89 |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      8A |  0000041A | CYRILLIC CAPITAL LETTER KA
      8B |  0000041B | CYRILLIC CAPITAL LETTER EL
      8C |  0000041C | CYRILLIC CAPITAL LETTER EM
      8D |  0000041D | CYRILLIC CAPITAL LETTER EN
      8E |  0000041E | CYRILLIC CAPITAL LETTER O
      8F |  0000041F | CYRILLIC CAPITAL LETTER PE
      90 |  00000420 | CYRILLIC CAPITAL LETTER ER
      91 |  00000421 | CYRILLIC CAPITAL LETTER ES
      92 |  00000422 | CYRILLIC CAPITAL LETTER TE
      93 |  00000423 | CYRILLIC CAPITAL LETTER U
      94 |  00000424 | CYRILLIC CAPITAL LETTER EF
      95 |  00000425 | CYRILLIC CAPITAL LETTER HA
      96 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      97 |  00000427 | CYRILLIC CAPITAL LETTER CHE
      98 |  00000428 | CYRILLIC CAPITAL LETTER SHA
      99 |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      9A |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
      9B |  0000042B | CYRILLIC CAPITAL LETTER YERU
      9C |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      9D |  0000042D | CYRILLIC CAPITAL LETTER E
      9E |  0000042E | CYRILLIC CAPITAL LETTER YU
      9F |  0000042F | CYRILLIC CAPITAL LETTER YA
      A0 |  00000430 | CYRILLIC SMALL LETTER A
      A1 |  00000431 | CYRILLIC SMALL LETTER BE
      A2 |  00000432 | CYRILLIC SMALL LETTER VE
      A3 |  00000433 | CYRILLIC SMALL LETTER GHE
      A4 |  00000434 | CYRILLIC SMALL LETTER DE
      A5 |  00000435 | CYRILLIC SMALL LETTER IE
      A6 |  00000436 | CYRILLIC SMALL LETTER ZHE
      A7 |  00000437 | CYRILLIC SMALL LETTER ZE
      A8 |  00000438 | CYRILLIC SMALL LETTER I
      A9 |  00000439 | CYRILLIC SMALL LETTER SHORT I
      AA |  0000043A | CYRILLIC SMALL LETTER KA
      AB |  0000043B | CYRILLIC SMALL LETTER EL
      AC |  0000043C | CYRILLIC SMALL LETTER EM
      AD |  0000043D | CYRILLIC SMALL LETTER EN
      AE |  0000043E | CYRILLIC SMALL LETTER O
      AF |  0000043F | CYRILLIC SMALL LETTER PE
      B0 |  00002591 | LIGHT SHADE
      B1 |  00002592 | MEDIUM SHADE
      B2 |  00002593 | DARK SHADE
      B3 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      B4 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      B5 |  00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
      B6 |  00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
      B7 |  00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
      B8 |  00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
      B9 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      BA |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      BB |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      BC |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      BD |  0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
      BE |  0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
      BF |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      C0 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      C1 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      C2 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      C3 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      C4 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      C5 |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      C6 |  0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
      C7 |  0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
      C8 |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      C9 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      CA |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      CB |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      CC |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      CD |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      CE |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      CF |  00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
      D0 |  00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
      D1 |  00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
      D2 |  00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
      D3 |  00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
      D4 |  00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
      D5 |  00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
      D6 |  00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
      D7 |  0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
      D8 |  0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
      D9 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      DA |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      DB |  00002588 | FULL BLOCK
      DC |  00002584 | LOWER HALF BLOCK
      DD |  0000258C | LEFT HALF BLOCK
      DE |  00002590 | RIGHT HALF BLOCK
      DF |  00002580 | UPPER HALF BLOCK
      E0 |  00000440 | CYRILLIC SMALL LETTER ER
      E1 |  00000441 | CYRILLIC SMALL LETTER ES
      E2 |  00000442 | CYRILLIC SMALL LETTER TE
      E3 |  00000443 | CYRILLIC SMALL LETTER U
      E4 |  00000444 | CYRILLIC SMALL LETTER EF
      E5 |  00000445 | CYRILLIC SMALL LETTER HA
      E6 |  00000446 | CYRILLIC SMALL LETTER TSE
      E7 |  00000447 | CYRILLIC SMALL LETTER CHE
      E8 |  00000448 | CYRILLIC SMALL LETTER SHA
      E9 |  00000449 | CYRILLIC SMALL LETTER SHCHA
      EA |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      EB |  0000044B | CYRILLIC SMALL LETTER YERU
      EC |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      ED |  0000044D | CYRILLIC SMALL LETTER E
      EE |  0000044E | CYRILLIC SMALL LETTER YU
      EF |  0000044F | CYRILLIC SMALL LETTER YA
      F0 |  00000401 | CYRILLIC CAPITAL LETTER IO
      F1 |  00000451 | CYRILLIC SMALL LETTER IO
      F2 |  00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE
      F3 |  00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE
      F4 |  00000407 | CYRILLIC CAPITAL LETTER YI
      F5 |  00000457 | CYRILLIC SMALL LETTER YI
      F6 |  0000040E | CYRILLIC CAPITAL LETTER SHORT U
      F7 |  0000045E | CYRILLIC SMALL LETTER SHORT U
      F8 |  000000B0 | DEGREE SIGN
      F9 |  00002219 | BULLET OPERATOR
      FA |  000000B7 | MIDDLE DOT
      FB |  0000221A | SQUARE ROOT
      FC |  00002116 | NUMERO SIGN
      FD |  000000A4 | CURRENCY SIGN
      FE |  000025A0 | BLACK SQUARE
      FF |  000000A0 | NO-BREAK SPACE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM866

    $main::fatpacked{"Locale/RecodeData/IBM868.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM868';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM868.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM868;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0660,
      0x0661,
      0x0662,
      0x0663,
      0x0664,
      0x0665,
      0x0666,
      0x0667,
      0x0668,
      0x0669,
      0x060c,
      0x061b,
      0x061f,
      0x0622,
      0x0627,
      0xfe8e,
      0xe016,
      0x0628,
      0xfe91,
      0x067e,
      0xfffd,
      0x0629,
      0x062a,
      0xfe97,
      0xfffd,
      0xfffd,
      0x062b,
      0xfe9b,
      0x062c,
      0xfe9f,
      0xfffd,
      0xfffd,
      0x062d,
      0xfea3,
      0x062e,
      0xfea7,
      0x062f,
      0xfffd,
      0x0630,
      0x0631,
      0xfffd,
      0x0632,
      0xfffd,
      0x0633,
      0xfeb3,
      0x0634,
      0x00ab,
      0x00bb,
      0xfeb7,
      0x0635,
      0x2591,
      0x2592,
      0x2593,
      0x2502,
      0x2524,
      0xfebb,
      0x0636,
      0xfebf,
      0x0637,
      0x2563,
      0x2551,
      0x2557,
      0x255d,
      0x0638,
      0x0639,
      0x2510,
      0x2514,
      0x2534,
      0x252c,
      0x251c,
      0x2500,
      0x253c,
      0xfeca,
      0xfecb,
      0x255a,
      0x2554,
      0x2569,
      0x2566,
      0x2560,
      0x2550,
      0x256c,
      0xfecc,
      0x063a,
      0xfece,
      0xfecf,
      0xfed0,
      0x0641,
      0xfed3,
      0x0642,
      0xfed7,
      0xfeda,
      0x2518,
      0x250c,
      0x2588,
      0x2580,
      0xfedb,
      0xfffd,
      0x2584,
      0xfffd,
      0x0644,
      0xfede,
      0xfee0,
      0x0645,
      0xfee3,
      0xfffd,
      0x0646,
      0xfee7,
      0xfffd,
      0x0648,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0621,
      0x00ad,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0651,
      0xfe7d,
      0xfffd,
      0x25a0,
      0x00a0,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xd9\xa0",
      "\xd9\xa1",
      "\xd9\xa2",
      "\xd9\xa3",
      "\xd9\xa4",
      "\xd9\xa5",
      "\xd9\xa6",
      "\xd9\xa7",
      "\xd9\xa8",
      "\xd9\xa9",
      "\xd8\x8c",
      "\xd8\x9b",
      "\xd8\x9f",
      "\xd8\xa2",
      "\xd8\xa7",
      "\xef\xba\x8e",
      "\xee\x80\x96",
      "\xd8\xa8",
      "\xef\xba\x91",
      "\xd9\xbe",
      "\xef\xbf\xbd",
      "\xd8\xa9",
      "\xd8\xaa",
      "\xef\xba\x97",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd8\xab",
      "\xef\xba\x9b",
      "\xd8\xac",
      "\xef\xba\x9f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd8\xad",
      "\xef\xba\xa3",
      "\xd8\xae",
      "\xef\xba\xa7",
      "\xd8\xaf",
      "\xef\xbf\xbd",
      "\xd8\xb0",
      "\xd8\xb1",
      "\xef\xbf\xbd",
      "\xd8\xb2",
      "\xef\xbf\xbd",
      "\xd8\xb3",
      "\xef\xba\xb3",
      "\xd8\xb4",
      "\xc2\xab",
      "\xc2\xbb",
      "\xef\xba\xb7",
      "\xd8\xb5",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x94\x82",
      "\xe2\x94\xa4",
      "\xef\xba\xbb",
      "\xd8\xb6",
      "\xef\xba\xbf",
      "\xd8\xb7",
      "\xe2\x95\xa3",
      "\xe2\x95\x91",
      "\xe2\x95\x97",
      "\xe2\x95\x9d",
      "\xd8\xb8",
      "\xd8\xb9",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\xb4",
      "\xe2\x94\xac",
      "\xe2\x94\x9c",
      "\xe2\x94\x80",
      "\xe2\x94\xbc",
      "\xef\xbb\x8a",
      "\xef\xbb\x8b",
      "\xe2\x95\x9a",
      "\xe2\x95\x94",
      "\xe2\x95\xa9",
      "\xe2\x95\xa6",
      "\xe2\x95\xa0",
      "\xe2\x95\x90",
      "\xe2\x95\xac",
      "\xef\xbb\x8c",
      "\xd8\xba",
      "\xef\xbb\x8e",
      "\xef\xbb\x8f",
      "\xef\xbb\x90",
      "\xd9\x81",
      "\xef\xbb\x93",
      "\xd9\x82",
      "\xef\xbb\x97",
      "\xef\xbb\x9a",
      "\xe2\x94\x98",
      "\xe2\x94\x8c",
      "\xe2\x96\x88",
      "\xe2\x96\x80",
      "\xef\xbb\x9b",
      "\xef\xbf\xbd",
      "\xe2\x96\x84",
      "\xef\xbf\xbd",
      "\xd9\x84",
      "\xef\xbb\x9e",
      "\xef\xbb\xa0",
      "\xd9\x85",
      "\xef\xbb\xa3",
      "\xef\xbf\xbd",
      "\xd9\x86",
      "\xef\xbb\xa7",
      "\xef\xbf\xbd",
      "\xd9\x88",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd8\xa1",
      "\xc2\xad",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd9\x91",
      "\xef\xb9\xbd",
      "\xef\xbf\xbd",
      "\xe2\x96\xa0",
      "\xc2\xa0",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xff",
      0x000000ab => "\xae",
      0x000000ad => "\xf2",
      0x000000bb => "\xaf",
      0x0000060c => "\x8a",
      0x0000061b => "\x8b",
      0x0000061f => "\x8c",
      0x00000621 => "\xf1",
      0x00000622 => "\x8d",
      0x00000627 => "\x8e",
      0x00000628 => "\x91",
      0x00000629 => "\x95",
      0x0000062a => "\x96",
      0x0000062b => "\x9a",
      0x0000062c => "\x9c",
      0x0000062d => "\xa0",
      0x0000062e => "\xa2",
      0x0000062f => "\xa4",
      0x00000630 => "\xa6",
      0x00000631 => "\xa7",
      0x00000632 => "\xa9",
      0x00000633 => "\xab",
      0x00000634 => "\xad",
      0x00000635 => "\xb1",
      0x00000636 => "\xb8",
      0x00000637 => "\xba",
      0x00000638 => "\xbf",
      0x00000639 => "\xc0",
      0x0000063a => "\xd2",
      0x00000641 => "\xd6",
      0x00000642 => "\xd8",
      0x00000644 => "\xe3",
      0x00000645 => "\xe6",
      0x00000646 => "\xe9",
      0x00000648 => "\xec",
      0x00000651 => "\xfb",
      0x00000660 => "\x80",
      0x00000661 => "\x81",
      0x00000662 => "\x82",
      0x00000663 => "\x83",
      0x00000664 => "\x84",
      0x00000665 => "\x85",
      0x00000666 => "\x86",
      0x00000667 => "\x87",
      0x00000668 => "\x88",
      0x00000669 => "\x89",
      0x0000067e => "\x93",
      0x00002500 => "\xc6",
      0x00002502 => "\xb5",
      0x0000250c => "\xdc",
      0x00002510 => "\xc1",
      0x00002514 => "\xc2",
      0x00002518 => "\xdb",
      0x0000251c => "\xc5",
      0x00002524 => "\xb6",
      0x0000252c => "\xc4",
      0x00002534 => "\xc3",
      0x0000253c => "\xc7",
      0x00002550 => "\xcf",
      0x00002551 => "\xbc",
      0x00002554 => "\xcb",
      0x00002557 => "\xbd",
      0x0000255a => "\xca",
      0x0000255d => "\xbe",
      0x00002560 => "\xce",
      0x00002563 => "\xbb",
      0x00002566 => "\xcd",
      0x00002569 => "\xcc",
      0x0000256c => "\xd0",
      0x00002580 => "\xde",
      0x00002584 => "\xe1",
      0x00002588 => "\xdd",
      0x00002591 => "\xb2",
      0x00002592 => "\xb3",
      0x00002593 => "\xb4",
      0x000025a0 => "\xfe",
      0x0000e016 => "\x90",
      0x0000fe7d => "\xfc",
      0x0000fe8e => "\x8f",
      0x0000fe91 => "\x92",
      0x0000fe97 => "\x97",
      0x0000fe9b => "\x9b",
      0x0000fe9f => "\x9d",
      0x0000fea3 => "\xa1",
      0x0000fea7 => "\xa3",
      0x0000feb3 => "\xac",
      0x0000feb7 => "\xb0",
      0x0000febb => "\xb7",
      0x0000febf => "\xb9",
      0x0000feca => "\xc8",
      0x0000fecb => "\xc9",
      0x0000fecc => "\xd1",
      0x0000fece => "\xd3",
      0x0000fecf => "\xd4",
      0x0000fed0 => "\xd5",
      0x0000fed3 => "\xd7",
      0x0000fed7 => "\xd9",
      0x0000feda => "\xda",
      0x0000fedb => "\xdf",
      0x0000fede => "\xe4",
      0x0000fee0 => "\xe5",
      0x0000fee3 => "\xe7",
      0x0000fee7 => "\xea",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x8c"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM868 - Conversion routines for IBM868
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM868.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP868
   alias CP-AR
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000660 | ARABIC-INDIC DIGIT ZERO
      81 |  00000661 | ARABIC-INDIC DIGIT ONE
      82 |  00000662 | ARABIC-INDIC DIGIT TWO
      83 |  00000663 | ARABIC-INDIC DIGIT THREE
      84 |  00000664 | ARABIC-INDIC DIGIT FOUR
      85 |  00000665 | ARABIC-INDIC DIGIT FIVE
      86 |  00000666 | ARABIC-INDIC DIGIT SIX
      87 |  00000667 | ARABIC-INDIC DIGIT SEVEN
      88 |  00000668 | ARABIC-INDIC DIGIT EIGHT
      89 |  00000669 | ARABIC-INDIC DIGIT NINE
      8A |  0000060C | ARABIC COMMA
      8B |  0000061B | ARABIC SEMICOLON
      8C |  0000061F | ARABIC QUESTION MARK
      8D |  00000622 | ARABIC LETTER ALEF WITH MADDA ABOVE
      8E |  00000627 | ARABIC LETTER ALEF
      8F |  0000FE8E | ARABIC LETTER ALEF FINAL FORM
      90 |  0000E016 | ARABIC LETTER ALEF FINAL FORM COMPATIBILITY E<lt>IBM868_90E<gt>
      91 |  00000628 | ARABIC LETTER BEH
      92 |  0000FE91 | ARABIC LETTER BEH INITIAL FORM
      93 |  0000067E | ARABIC LETTER PEH
      95 |  00000629 | ARABIC LETTER TEH MARBUTA
      96 |  0000062A | ARABIC LETTER TEH
      97 |  0000FE97 | ARABIC LETTER TEH INITIAL FORM
      9A |  0000062B | ARABIC LETTER THEH
      9B |  0000FE9B | ARABIC LETTER THEH INITIAL FORM
      9C |  0000062C | ARABIC LETTER JEEM
      9D |  0000FE9F | ARABIC LETTER JEEM INITIAL FORM
      A0 |  0000062D | ARABIC LETTER HAH
      A1 |  0000FEA3 | ARABIC LETTER HAH INITIAL FORM
      A2 |  0000062E | ARABIC LETTER KHAH
      A3 |  0000FEA7 | ARABIC LETTER KHAH INITIAL FORM
      A4 |  0000062F | ARABIC LETTER DAL
      A6 |  00000630 | ARABIC LETTER THAL
      A7 |  00000631 | ARABIC LETTER REH
      A9 |  00000632 | ARABIC LETTER ZAIN
      AB |  00000633 | ARABIC LETTER SEEN
      AC |  0000FEB3 | ARABIC LETTER SEEN INITIAL FORM
      AD |  00000634 | ARABIC LETTER SHEEN
      AE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AF |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      B0 |  0000FEB7 | ARABIC LETTER SHEEN INITIAL FORM
      B1 |  00000635 | ARABIC LETTER SAD
      B2 |  00002591 | LIGHT SHADE
      B3 |  00002592 | MEDIUM SHADE
      B4 |  00002593 | DARK SHADE
      B5 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      B6 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      B7 |  0000FEBB | ARABIC LETTER SAD INITIAL FORM
      B8 |  00000636 | ARABIC LETTER DAD
      B9 |  0000FEBF | ARABIC LETTER DAD INITIAL FORM
      BA |  00000637 | ARABIC LETTER TAH
      BB |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      BC |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      BD |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      BE |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      BF |  00000638 | ARABIC LETTER ZAH
      C0 |  00000639 | ARABIC LETTER AIN
      C1 |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      C2 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      C3 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      C4 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      C5 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      C6 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      C7 |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      C8 |  0000FECA | ARABIC LETTER AIN FINAL FORM
      C9 |  0000FECB | ARABIC LETTER AIN INITIAL FORM
      CA |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      CB |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      CC |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      CD |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      CE |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      CF |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      D0 |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      D1 |  0000FECC | ARABIC LETTER AIN MEDIAL FORM
      D2 |  0000063A | ARABIC LETTER GHAIN
      D3 |  0000FECE | ARABIC LETTER GHAIN FINAL FORM
      D4 |  0000FECF | ARABIC LETTER GHAIN INITIAL FORM
      D5 |  0000FED0 | ARABIC LETTER GHAIN MEDIAL FORM
      D6 |  00000641 | ARABIC LETTER FEH
      D7 |  0000FED3 | ARABIC LETTER FEH INITIAL FORM
      D8 |  00000642 | ARABIC LETTER QAF
      D9 |  0000FED7 | ARABIC LETTER QAF INITIAL FORM
      DA |  0000FEDA | ARABIC LETTER KAF FINAL FORM
      DB |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      DC |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      DD |  00002588 | FULL BLOCK
      DE |  00002580 | UPPER HALF BLOCK
      DF |  0000FEDB | ARABIC LETTER KAF INITIAL FORM
      E1 |  00002584 | LOWER HALF BLOCK
      E3 |  00000644 | ARABIC LETTER LAM
      E4 |  0000FEDE | ARABIC LETTER LAM FINAL FORM
      E5 |  0000FEE0 | ARABIC LETTER LAM MEDIAL FORM
      E6 |  00000645 | ARABIC LETTER MEEM
      E7 |  0000FEE3 | ARABIC LETTER MEEM INITIAL FORM
      E9 |  00000646 | ARABIC LETTER NOON
      EA |  0000FEE7 | ARABIC LETTER NOON INITIAL FORM
      EC |  00000648 | ARABIC LETTER WAW
      F1 |  00000621 | ARABIC LETTER HAMZA
      F2 |  000000AD | SOFT HYPHEN
      FB |  00000651 | ARABIC SHADDA
      FC |  0000FE7D | ARABIC SHADDA MEDIAL FORM
      FE |  000025A0 | BLACK SQUARE
      FF |  000000A0 | NO-BREAK SPACE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM868

    $main::fatpacked{"Locale/RecodeData/IBM869.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM869';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM869.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM869;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0386,
      0xfffd,
      0x00b7,
      0x00ac,
      0x00a6,
      0x2018,
      0x2019,
      0x0388,
      0x2015,
      0x0389,
      0x038a,
      0x03aa,
      0x038c,
      0xfffd,
      0xfffd,
      0x038e,
      0x03ab,
      0x00a9,
      0x038f,
      0x00b2,
      0x00b3,
      0x03ac,
      0x00a3,
      0x03ad,
      0x03ae,
      0x03af,
      0x03ca,
      0x0390,
      0x03cc,
      0x03cd,
      0x0391,
      0x0392,
      0x0393,
      0x0394,
      0x0395,
      0x0396,
      0x0397,
      0x00bd,
      0x0398,
      0x0399,
      0x00ab,
      0x00bb,
      0x2591,
      0x2592,
      0x2593,
      0x2502,
      0x2524,
      0x039a,
      0x039b,
      0x039c,
      0x039d,
      0x2563,
      0x2551,
      0x2557,
      0x255d,
      0x039e,
      0x039f,
      0x2510,
      0x2514,
      0x2534,
      0x252c,
      0x251c,
      0x2500,
      0x253c,
      0x03a0,
      0x03a1,
      0x255a,
      0x2554,
      0x2569,
      0x2566,
      0x2560,
      0x2550,
      0x256c,
      0x03a3,
      0x03a4,
      0x03a5,
      0x03a6,
      0x03a7,
      0x03a8,
      0x03a9,
      0x03b1,
      0x03b2,
      0x03b3,
      0x2518,
      0x250c,
      0x2588,
      0x2584,
      0x03b4,
      0x03b5,
      0x2580,
      0x03b6,
      0x03b7,
      0x03b8,
      0x03b9,
      0x03ba,
      0x03bb,
      0x03bc,
      0x03bd,
      0x03be,
      0x03bf,
      0x03c0,
      0x03c1,
      0x03c3,
      0x03c2,
      0x03c4,
      0x0384,
      0x00ad,
      0x00b1,
      0x03c5,
      0x03c6,
      0x03c7,
      0x00a7,
      0x03c8,
      0x0385,
      0x00b0,
      0x00a8,
      0x03c9,
      0x03cb,
      0x03b0,
      0x03ce,
      0x25a0,
      0x00a0,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xce\x86",
      "\xef\xbf\xbd",
      "\xc2\xb7",
      "\xc2\xac",
      "\xc2\xa6",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xce\x88",
      "\xe2\x80\x95",
      "\xce\x89",
      "\xce\x8a",
      "\xce\xaa",
      "\xce\x8c",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xce\x8e",
      "\xce\xab",
      "\xc2\xa9",
      "\xce\x8f",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xce\xac",
      "\xc2\xa3",
      "\xce\xad",
      "\xce\xae",
      "\xce\xaf",
      "\xcf\x8a",
      "\xce\x90",
      "\xcf\x8c",
      "\xcf\x8d",
      "\xce\x91",
      "\xce\x92",
      "\xce\x93",
      "\xce\x94",
      "\xce\x95",
      "\xce\x96",
      "\xce\x97",
      "\xc2\xbd",
      "\xce\x98",
      "\xce\x99",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x94\x82",
      "\xe2\x94\xa4",
      "\xce\x9a",
      "\xce\x9b",
      "\xce\x9c",
      "\xce\x9d",
      "\xe2\x95\xa3",
      "\xe2\x95\x91",
      "\xe2\x95\x97",
      "\xe2\x95\x9d",
      "\xce\x9e",
      "\xce\x9f",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\xb4",
      "\xe2\x94\xac",
      "\xe2\x94\x9c",
      "\xe2\x94\x80",
      "\xe2\x94\xbc",
      "\xce\xa0",
      "\xce\xa1",
      "\xe2\x95\x9a",
      "\xe2\x95\x94",
      "\xe2\x95\xa9",
      "\xe2\x95\xa6",
      "\xe2\x95\xa0",
      "\xe2\x95\x90",
      "\xe2\x95\xac",
      "\xce\xa3",
      "\xce\xa4",
      "\xce\xa5",
      "\xce\xa6",
      "\xce\xa7",
      "\xce\xa8",
      "\xce\xa9",
      "\xce\xb1",
      "\xce\xb2",
      "\xce\xb3",
      "\xe2\x94\x98",
      "\xe2\x94\x8c",
      "\xe2\x96\x88",
      "\xe2\x96\x84",
      "\xce\xb4",
      "\xce\xb5",
      "\xe2\x96\x80",
      "\xce\xb6",
      "\xce\xb7",
      "\xce\xb8",
      "\xce\xb9",
      "\xce\xba",
      "\xce\xbb",
      "\xce\xbc",
      "\xce\xbd",
      "\xce\xbe",
      "\xce\xbf",
      "\xcf\x80",
      "\xcf\x81",
      "\xcf\x83",
      "\xcf\x82",
      "\xcf\x84",
      "\xce\x84",
      "\xc2\xad",
      "\xc2\xb1",
      "\xcf\x85",
      "\xcf\x86",
      "\xcf\x87",
      "\xc2\xa7",
      "\xcf\x88",
      "\xce\x85",
      "\xc2\xb0",
      "\xc2\xa8",
      "\xcf\x89",
      "\xcf\x8b",
      "\xce\xb0",
      "\xcf\x8e",
      "\xe2\x96\xa0",
      "\xc2\xa0",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xff",
      0x000000a3 => "\x9c",
      0x000000a6 => "\x8a",
      0x000000a7 => "\xf5",
      0x000000a8 => "\xf9",
      0x000000a9 => "\x97",
      0x000000ab => "\xae",
      0x000000ac => "\x89",
      0x000000ad => "\xf0",
      0x000000b0 => "\xf8",
      0x000000b1 => "\xf1",
      0x000000b2 => "\x99",
      0x000000b3 => "\x9a",
      0x000000b7 => "\x88",
      0x000000bb => "\xaf",
      0x000000bd => "\xab",
      0x00000384 => "\xef",
      0x00000385 => "\xf7",
      0x00000386 => "\x86",
      0x00000388 => "\x8d",
      0x00000389 => "\x8f",
      0x0000038a => "\x90",
      0x0000038c => "\x92",
      0x0000038e => "\x95",
      0x0000038f => "\x98",
      0x00000390 => "\xa1",
      0x00000391 => "\xa4",
      0x00000392 => "\xa5",
      0x00000393 => "\xa6",
      0x00000394 => "\xa7",
      0x00000395 => "\xa8",
      0x00000396 => "\xa9",
      0x00000397 => "\xaa",
      0x00000398 => "\xac",
      0x00000399 => "\xad",
      0x0000039a => "\xb5",
      0x0000039b => "\xb6",
      0x0000039c => "\xb7",
      0x0000039d => "\xb8",
      0x0000039e => "\xbd",
      0x0000039f => "\xbe",
      0x000003a0 => "\xc6",
      0x000003a1 => "\xc7",
      0x000003a3 => "\xcf",
      0x000003a4 => "\xd0",
      0x000003a5 => "\xd1",
      0x000003a6 => "\xd2",
      0x000003a7 => "\xd3",
      0x000003a8 => "\xd4",
      0x000003a9 => "\xd5",
      0x000003aa => "\x91",
      0x000003ab => "\x96",
      0x000003ac => "\x9b",
      0x000003ad => "\x9d",
      0x000003ae => "\x9e",
      0x000003af => "\x9f",
      0x000003b0 => "\xfc",
      0x000003b1 => "\xd6",
      0x000003b2 => "\xd7",
      0x000003b3 => "\xd8",
      0x000003b4 => "\xdd",
      0x000003b5 => "\xde",
      0x000003b6 => "\xe0",
      0x000003b7 => "\xe1",
      0x000003b8 => "\xe2",
      0x000003b9 => "\xe3",
      0x000003ba => "\xe4",
      0x000003bb => "\xe5",
      0x000003bc => "\xe6",
      0x000003bd => "\xe7",
      0x000003be => "\xe8",
      0x000003bf => "\xe9",
      0x000003c0 => "\xea",
      0x000003c1 => "\xeb",
      0x000003c2 => "\xed",
      0x000003c3 => "\xec",
      0x000003c4 => "\xee",
      0x000003c5 => "\xf2",
      0x000003c6 => "\xf3",
      0x000003c7 => "\xf4",
      0x000003c8 => "\xf6",
      0x000003c9 => "\xfa",
      0x000003ca => "\xa0",
      0x000003cb => "\xfb",
      0x000003cc => "\xa2",
      0x000003cd => "\xa3",
      0x000003ce => "\xfd",
      0x00002015 => "\x8e",
      0x00002018 => "\x8b",
      0x00002019 => "\x8c",
      0x00002500 => "\xc4",
      0x00002502 => "\xb3",
      0x0000250c => "\xda",
      0x00002510 => "\xbf",
      0x00002514 => "\xc0",
      0x00002518 => "\xd9",
      0x0000251c => "\xc3",
      0x00002524 => "\xb4",
      0x0000252c => "\xc2",
      0x00002534 => "\xc1",
      0x0000253c => "\xc5",
      0x00002550 => "\xcd",
      0x00002551 => "\xba",
      0x00002554 => "\xc9",
      0x00002557 => "\xbb",
      0x0000255a => "\xc8",
      0x0000255d => "\xbc",
      0x00002560 => "\xcc",
      0x00002563 => "\xb9",
      0x00002566 => "\xcb",
      0x00002569 => "\xca",
      0x0000256c => "\xce",
      0x00002580 => "\xdf",
      0x00002584 => "\xdc",
      0x00002588 => "\xdb",
      0x00002591 => "\xb0",
      0x00002592 => "\xb1",
      0x00002593 => "\xb2",
      0x000025a0 => "\xfe",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM869 - Conversion routines for IBM869
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM869.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM Keyboard layouts and code pages, PN 07G4586 June 1991
   alias CP869
   alias 869
   alias CP-GR
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      86 |  00000386 | GREEK CAPITAL LETTER ALPHA WITH TONOS
      88 |  000000B7 | MIDDLE DOT
      89 |  000000AC | NOT SIGN
      8A |  000000A6 | BROKEN BAR
      8B |  00002018 | LEFT SINGLE QUOTATION MARK
      8C |  00002019 | RIGHT SINGLE QUOTATION MARK
      8D |  00000388 | GREEK CAPITAL LETTER EPSILON WITH TONOS
      8E |  00002015 | HORIZONTAL BAR
      8F |  00000389 | GREEK CAPITAL LETTER ETA WITH TONOS
      90 |  0000038A | GREEK CAPITAL LETTER IOTA WITH TONOS
      91 |  000003AA | GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
      92 |  0000038C | GREEK CAPITAL LETTER OMICRON WITH TONOS
      95 |  0000038E | GREEK CAPITAL LETTER UPSILON WITH TONOS
      96 |  000003AB | GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
      97 |  000000A9 | COPYRIGHT SIGN
      98 |  0000038F | GREEK CAPITAL LETTER OMEGA WITH TONOS
      99 |  000000B2 | SUPERSCRIPT TWO
      9A |  000000B3 | SUPERSCRIPT THREE
      9B |  000003AC | GREEK SMALL LETTER ALPHA WITH TONOS
      9C |  000000A3 | POUND SIGN
      9D |  000003AD | GREEK SMALL LETTER EPSILON WITH TONOS
      9E |  000003AE | GREEK SMALL LETTER ETA WITH TONOS
      9F |  000003AF | GREEK SMALL LETTER IOTA WITH TONOS
      A0 |  000003CA | GREEK SMALL LETTER IOTA WITH DIALYTIKA
      A1 |  00000390 | GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
      A2 |  000003CC | GREEK SMALL LETTER OMICRON WITH TONOS
      A3 |  000003CD | GREEK SMALL LETTER UPSILON WITH TONOS
      A4 |  00000391 | GREEK CAPITAL LETTER ALPHA
      A5 |  00000392 | GREEK CAPITAL LETTER BETA
      A6 |  00000393 | GREEK CAPITAL LETTER GAMMA
      A7 |  00000394 | GREEK CAPITAL LETTER DELTA
      A8 |  00000395 | GREEK CAPITAL LETTER EPSILON
      A9 |  00000396 | GREEK CAPITAL LETTER ZETA
      AA |  00000397 | GREEK CAPITAL LETTER ETA
      AB |  000000BD | VULGAR FRACTION ONE HALF
      AC |  00000398 | GREEK CAPITAL LETTER THETA
      AD |  00000399 | GREEK CAPITAL LETTER IOTA
      AE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AF |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      B0 |  00002591 | LIGHT SHADE
      B1 |  00002592 | MEDIUM SHADE
      B2 |  00002593 | DARK SHADE
      B3 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      B4 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      B5 |  0000039A | GREEK CAPITAL LETTER KAPPA
      B6 |  0000039B | GREEK CAPITAL LETTER LAMDA
      B7 |  0000039C | GREEK CAPITAL LETTER MU
      B8 |  0000039D | GREEK CAPITAL LETTER NU
      B9 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      BA |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      BB |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      BC |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      BD |  0000039E | GREEK CAPITAL LETTER XI
      BE |  0000039F | GREEK CAPITAL LETTER OMICRON
      BF |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      C0 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      C1 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      C2 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      C3 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      C4 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      C5 |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      C6 |  000003A0 | GREEK CAPITAL LETTER PI
      C7 |  000003A1 | GREEK CAPITAL LETTER RHO
      C8 |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      C9 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      CA |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      CB |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      CC |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      CD |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      CE |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      CF |  000003A3 | GREEK CAPITAL LETTER SIGMA
      D0 |  000003A4 | GREEK CAPITAL LETTER TAU
      D1 |  000003A5 | GREEK CAPITAL LETTER UPSILON
      D2 |  000003A6 | GREEK CAPITAL LETTER PHI
      D3 |  000003A7 | GREEK CAPITAL LETTER CHI
      D4 |  000003A8 | GREEK CAPITAL LETTER PSI
      D5 |  000003A9 | GREEK CAPITAL LETTER OMEGA
      D6 |  000003B1 | GREEK SMALL LETTER ALPHA
      D7 |  000003B2 | GREEK SMALL LETTER BETA
      D8 |  000003B3 | GREEK SMALL LETTER GAMMA
      D9 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      DA |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      DB |  00002588 | FULL BLOCK
      DC |  00002584 | LOWER HALF BLOCK
      DD |  000003B4 | GREEK SMALL LETTER DELTA
      DE |  000003B5 | GREEK SMALL LETTER EPSILON
      DF |  00002580 | UPPER HALF BLOCK
      E0 |  000003B6 | GREEK SMALL LETTER ZETA
      E1 |  000003B7 | GREEK SMALL LETTER ETA
      E2 |  000003B8 | GREEK SMALL LETTER THETA
      E3 |  000003B9 | GREEK SMALL LETTER IOTA
      E4 |  000003BA | GREEK SMALL LETTER KAPPA
      E5 |  000003BB | GREEK SMALL LETTER LAMDA
      E6 |  000003BC | GREEK SMALL LETTER MU
      E7 |  000003BD | GREEK SMALL LETTER NU
      E8 |  000003BE | GREEK SMALL LETTER XI
      E9 |  000003BF | GREEK SMALL LETTER OMICRON
      EA |  000003C0 | GREEK SMALL LETTER PI
      EB |  000003C1 | GREEK SMALL LETTER RHO
      EC |  000003C3 | GREEK SMALL LETTER SIGMA
      ED |  000003C2 | GREEK SMALL LETTER FINAL SIGMA
      EE |  000003C4 | GREEK SMALL LETTER TAU
      EF |  00000384 | GREEK TONOS
      F0 |  000000AD | SOFT HYPHEN
      F1 |  000000B1 | PLUS-MINUS SIGN
      F2 |  000003C5 | GREEK SMALL LETTER UPSILON
      F3 |  000003C6 | GREEK SMALL LETTER PHI
      F4 |  000003C7 | GREEK SMALL LETTER CHI
      F5 |  000000A7 | SECTION SIGN
      F6 |  000003C8 | GREEK SMALL LETTER PSI
      F7 |  00000385 | GREEK DIALYTIKA TONOS
      F8 |  000000B0 | DEGREE SIGN
      F9 |  000000A8 | DIAERESIS
      FA |  000003C9 | GREEK SMALL LETTER OMEGA
      FB |  000003CB | GREEK SMALL LETTER UPSILON WITH DIALYTIKA
      FC |  000003B0 | GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
      FD |  000003CE | GREEK SMALL LETTER OMEGA WITH TONOS
      FE |  000025A0 | BLACK SQUARE
      FF |  000000A0 | NO-BREAK SPACE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM869

    $main::fatpacked{"Locale/RecodeData/IBM870.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM870';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM870.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM870;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x00a0,
      0xfffd,
      0x00e4,
      0xfffd,
      0x00e1,
      0x0103,
      0x010d,
      0x00e7,
      0x0107,
      0x005b,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0x00e9,
      0xfffd,
      0x00eb,
      0x016f,
      0x00ed,
      0xfffd,
      0x013e,
      0x013a,
      0x00df,
      0x005d,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0xfffd,
      0x00c4,
      0x02dd,
      0x00c1,
      0xfffd,
      0x010c,
      0x00c7,
      0x0106,
      0x007c,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x02c7,
      0x00c9,
      0xfffd,
      0x00cb,
      0x016e,
      0x00cd,
      0xfffd,
      0x013d,
      0x0139,
      0x0060,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0x02d8,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x015b,
      0x0148,
      0x0111,
      0x00fd,
      0x0159,
      0xfffd,
      0x00b0,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0142,
      0x0144,
      0x0161,
      0x00b8,
      0x02db,
      0x00a4,
      0x0105,
      0x007e,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x015a,
      0x0147,
      0x0110,
      0x00dd,
      0x0158,
      0xfffd,
      0x00b7,
      0x0104,
      0x017c,
      0xfffd,
      0x017b,
      0x00a7,
      0x00b6,
      0x017e,
      0x017a,
      0x017d,
      0x0179,
      0x0143,
      0x0160,
      0x00a8,
      0x00b4,
      0x00d7,
      0x007b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0x00f4,
      0x00f6,
      0x0155,
      0x00f3,
      0x0151,
      0x007d,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x011a,
      0x0171,
      0x00fc,
      0x0165,
      0x00fa,
      0x011b,
      0x005c,
      0x00f7,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x010f,
      0x00d4,
      0x00d6,
      0x0154,
      0x00d3,
      0x0150,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x010e,
      0x0170,
      0x00dc,
      0x0164,
      0x00da,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xc2\xa0",
      "\xef\xbf\xbd",
      "\xc3\xa4",
      "\xef\xbf\xbd",
      "\xc3\xa1",
      "\xc4\x83",
      "\xc4\x8d",
      "\xc3\xa7",
      "\xc4\x87",
      "\x5b",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xc3\xa9",
      "\xef\xbf\xbd",
      "\xc3\xab",
      "\xc5\xaf",
      "\xc3\xad",
      "\xef\xbf\xbd",
      "\xc4\xbe",
      "\xc4\xba",
      "\xc3\x9f",
      "\x5d",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xef\xbf\xbd",
      "\xc3\x84",
      "\xcb\x9d",
      "\xc3\x81",
      "\xef\xbf\xbd",
      "\xc4\x8c",
      "\xc3\x87",
      "\xc4\x86",
      "\x7c",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xcb\x87",
      "\xc3\x89",
      "\xef\xbf\xbd",
      "\xc3\x8b",
      "\xc5\xae",
      "\xc3\x8d",
      "\xef\xbf\xbd",
      "\xc4\xbd",
      "\xc4\xb9",
      "\x60",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xcb\x98",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xc5\x9b",
      "\xc5\x88",
      "\xc4\x91",
      "\xc3\xbd",
      "\xc5\x99",
      "\xef\xbf\xbd",
      "\xc2\xb0",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xc5\x82",
      "\xc5\x84",
      "\xc5\xa1",
      "\xc2\xb8",
      "\xcb\x9b",
      "\xc2\xa4",
      "\xc4\x85",
      "\x7e",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc5\x9a",
      "\xc5\x87",
      "\xc4\x90",
      "\xc3\x9d",
      "\xc5\x98",
      "\xef\xbf\xbd",
      "\xc2\xb7",
      "\xc4\x84",
      "\xc5\xbc",
      "\xef\xbf\xbd",
      "\xc5\xbb",
      "\xc2\xa7",
      "\xc2\xb6",
      "\xc5\xbe",
      "\xc5\xba",
      "\xc5\xbd",
      "\xc5\xb9",
      "\xc5\x83",
      "\xc5\xa0",
      "\xc2\xa8",
      "\xc2\xb4",
      "\xc3\x97",
      "\x7b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc5\x95",
      "\xc3\xb3",
      "\xc5\x91",
      "\x7d",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc4\x9a",
      "\xc5\xb1",
      "\xc3\xbc",
      "\xc5\xa5",
      "\xc3\xba",
      "\xc4\x9b",
      "\x5c",
      "\xc3\xb7",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc4\x8f",
      "\xc3\x94",
      "\xc3\x96",
      "\xc5\x94",
      "\xc3\x93",
      "\xc5\x90",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc4\x8e",
      "\xc5\xb0",
      "\xc3\x9c",
      "\xc5\xa4",
      "\xc3\x9a",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x4a",
      0x0000005c => "\xe0",
      0x0000005d => "\x5a",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\xc0",
      0x0000007c => "\x6a",
      0x0000007d => "\xd0",
      0x0000007e => "\xa1",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x41",
      0x000000a4 => "\x9f",
      0x000000a7 => "\xb5",
      0x000000a8 => "\xbd",
      0x000000ad => "\xca",
      0x000000b0 => "\x90",
      0x000000b4 => "\xbe",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb0",
      0x000000b8 => "\x9d",
      0x000000c1 => "\x65",
      0x000000c4 => "\x63",
      0x000000c7 => "\x68",
      0x000000c9 => "\x71",
      0x000000cb => "\x73",
      0x000000cd => "\x75",
      0x000000d3 => "\xee",
      0x000000d4 => "\xeb",
      0x000000d6 => "\xec",
      0x000000d7 => "\xbf",
      0x000000da => "\xfe",
      0x000000dc => "\xfc",
      0x000000dd => "\xad",
      0x000000df => "\x59",
      0x000000e1 => "\x45",
      0x000000e4 => "\x43",
      0x000000e7 => "\x48",
      0x000000e9 => "\x51",
      0x000000eb => "\x53",
      0x000000ed => "\x55",
      0x000000f3 => "\xce",
      0x000000f4 => "\xcb",
      0x000000f6 => "\xcc",
      0x000000f7 => "\xe1",
      0x000000fa => "\xde",
      0x000000fc => "\xdc",
      0x000000fd => "\x8d",
      0x00000103 => "\x46",
      0x00000104 => "\xb1",
      0x00000105 => "\xa0",
      0x00000106 => "\x69",
      0x00000107 => "\x49",
      0x0000010c => "\x67",
      0x0000010d => "\x47",
      0x0000010e => "\xfa",
      0x0000010f => "\xea",
      0x00000110 => "\xac",
      0x00000111 => "\x8c",
      0x0000011a => "\xda",
      0x0000011b => "\xdf",
      0x00000139 => "\x78",
      0x0000013a => "\x58",
      0x0000013d => "\x77",
      0x0000013e => "\x57",
      0x00000142 => "\x9a",
      0x00000143 => "\xbb",
      0x00000144 => "\x9b",
      0x00000147 => "\xab",
      0x00000148 => "\x8b",
      0x00000150 => "\xef",
      0x00000151 => "\xcf",
      0x00000154 => "\xed",
      0x00000155 => "\xcd",
      0x00000158 => "\xae",
      0x00000159 => "\x8e",
      0x0000015a => "\xaa",
      0x0000015b => "\x8a",
      0x00000160 => "\xbc",
      0x00000161 => "\x9c",
      0x00000164 => "\xfd",
      0x00000165 => "\xdd",
      0x0000016e => "\x74",
      0x0000016f => "\x54",
      0x00000170 => "\xfb",
      0x00000171 => "\xdb",
      0x00000179 => "\xba",
      0x0000017a => "\xb8",
      0x0000017b => "\xb4",
      0x0000017c => "\xb2",
      0x0000017d => "\xb9",
      0x0000017e => "\xb7",
      0x000002c7 => "\x70",
      0x000002d8 => "\x80",
      0x000002db => "\x9e",
      0x000002dd => "\x64",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM870 - Conversion routines for IBM870
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM870.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP870
   alias EBCDIC-CP-ROECE
   alias EBCDIC-CP-YU
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000000A0 | NO-BREAK SPACE
      43 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      45 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      46 |  00000103 | LATIN SMALL LETTER A WITH BREVE
      47 |  0000010D | LATIN SMALL LETTER C WITH CARON
      48 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      49 |  00000107 | LATIN SMALL LETTER C WITH ACUTE
      4A |  0000005B | LEFT SQUARE BRACKET
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      51 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      53 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      54 |  0000016F | LATIN SMALL LETTER U WITH RING ABOVE
      55 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      57 |  0000013E | LATIN SMALL LETTER L WITH CARON
      58 |  0000013A | LATIN SMALL LETTER L WITH ACUTE
      59 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      5A |  0000005D | RIGHT SQUARE BRACKET
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      63 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      64 |  000002DD | DOUBLE ACUTE ACCENT
      65 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      67 |  0000010C | LATIN CAPITAL LETTER C WITH CARON
      68 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      69 |  00000106 | LATIN CAPITAL LETTER C WITH ACUTE
      6A |  0000007C | VERTICAL LINE
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  000002C7 | CARON (Mandarin Chinese third tone)
      71 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      73 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      74 |  0000016E | LATIN CAPITAL LETTER U WITH RING ABOVE
      75 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      77 |  0000013D | LATIN CAPITAL LETTER L WITH CARON
      78 |  00000139 | LATIN CAPITAL LETTER L WITH ACUTE
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  000002D8 | BREVE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  0000015B | LATIN SMALL LETTER S WITH ACUTE
      8B |  00000148 | LATIN SMALL LETTER N WITH CARON
      8C |  00000111 | LATIN SMALL LETTER D WITH STROKE
      8D |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      8E |  00000159 | LATIN SMALL LETTER R WITH CARON
      90 |  000000B0 | DEGREE SIGN
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  00000142 | LATIN SMALL LETTER L WITH STROKE
      9B |  00000144 | LATIN SMALL LETTER N WITH ACUTE
      9C |  00000161 | LATIN SMALL LETTER S WITH CARON
      9D |  000000B8 | CEDILLA
      9E |  000002DB | OGONEK
      9F |  000000A4 | CURRENCY SIGN
      A0 |  00000105 | LATIN SMALL LETTER A WITH OGONEK
      A1 |  0000007E | TILDE
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  0000015A | LATIN CAPITAL LETTER S WITH ACUTE
      AB |  00000147 | LATIN CAPITAL LETTER N WITH CARON
      AC |  00000110 | LATIN CAPITAL LETTER D WITH STROKE
      AD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      AE |  00000158 | LATIN CAPITAL LETTER R WITH CARON
      B0 |  000000B7 | MIDDLE DOT
      B1 |  00000104 | LATIN CAPITAL LETTER A WITH OGONEK
      B2 |  0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE
      B4 |  0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE
      B5 |  000000A7 | SECTION SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  0000017E | LATIN SMALL LETTER Z WITH CARON
      B8 |  0000017A | LATIN SMALL LETTER Z WITH ACUTE
      B9 |  0000017D | LATIN CAPITAL LETTER Z WITH CARON
      BA |  00000179 | LATIN CAPITAL LETTER Z WITH ACUTE
      BB |  00000143 | LATIN CAPITAL LETTER N WITH ACUTE
      BC |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      BD |  000000A8 | DIAERESIS
      BE |  000000B4 | ACUTE ACCENT
      BF |  000000D7 | MULTIPLICATION SIGN
      C0 |  0000007B | LEFT CURLY BRACKET
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      CC |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      CD |  00000155 | LATIN SMALL LETTER R WITH ACUTE
      CE |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      CF |  00000151 | LATIN SMALL LETTER O WITH DOUBLE ACUTE
      D0 |  0000007D | RIGHT CURLY BRACKET
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  0000011A | LATIN CAPITAL LETTER E WITH CARON
      DB |  00000171 | LATIN SMALL LETTER U WITH DOUBLE ACUTE
      DC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      DD |  00000165 | LATIN SMALL LETTER T WITH CARON
      DE |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      DF |  0000011B | LATIN SMALL LETTER E WITH CARON
      E0 |  0000005C | REVERSE SOLIDUS
      E1 |  000000F7 | DIVISION SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  0000010F | LATIN SMALL LETTER D WITH CARON
      EB |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      EC |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      ED |  00000154 | LATIN CAPITAL LETTER R WITH ACUTE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  00000150 | LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  0000010E | LATIN CAPITAL LETTER D WITH CARON
      FB |  00000170 | LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
      FC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      FD |  00000164 | LATIN CAPITAL LETTER T WITH CARON
      FE |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM870

    $main::fatpacked{"Locale/RecodeData/IBM871.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM871';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM871.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM871;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x00a0,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e1,
      0x00e3,
      0x00e5,
      0x00e7,
      0x00f1,
      0x00fe,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00ec,
      0x00df,
      0x00c6,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x00d6,
      0x002d,
      0x002f,
      0x00c2,
      0x00c4,
      0x00c0,
      0x00c1,
      0x00c3,
      0x00c5,
      0x00c7,
      0x00d1,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x00f8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x00f0,
      0x003a,
      0x0023,
      0x00d0,
      0x0027,
      0x003d,
      0x0022,
      0x00d8,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x00ab,
      0x00bb,
      0x0060,
      0x00fd,
      0x007b,
      0x00b1,
      0x00b0,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x00aa,
      0x00ba,
      0x007d,
      0x00b8,
      0x005d,
      0x00a4,
      0x00b5,
      0x00f6,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x00a1,
      0x00bf,
      0x0040,
      0x00dd,
      0x005b,
      0x00ae,
      0x00a2,
      0x00a3,
      0x00a5,
      0x00b7,
      0x00a9,
      0x00a7,
      0x00b6,
      0x00bc,
      0x00bd,
      0x00be,
      0x00ac,
      0x007c,
      0x00af,
      0x00a8,
      0x005c,
      0x00d7,
      0x00de,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0x00f4,
      0x007e,
      0x00f2,
      0x00f3,
      0x00f5,
      0x00e6,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x00b9,
      0x00fb,
      0x00fc,
      0x00f9,
      0x00fa,
      0x00ff,
      0x00b4,
      0x00f7,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00b2,
      0x00d4,
      0x005e,
      0x00d2,
      0x00d3,
      0x00d5,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00b3,
      0x00db,
      0x00dc,
      0x00d9,
      0x00da,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xc2\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa3",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xb1",
      "\xc3\xbe",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xac",
      "\xc3\x9f",
      "\xc3\x86",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\xc3\x96",
      "\x2d",
      "\x2f",
      "\xc3\x82",
      "\xc3\x84",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x83",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x91",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xc3\xb8",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\xc3\xb0",
      "\x3a",
      "\x23",
      "\xc3\x90",
      "\x27",
      "\x3d",
      "\x22",
      "\xc3\x98",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xc2\xab",
      "\xc2\xbb",
      "\x60",
      "\xc3\xbd",
      "\x7b",
      "\xc2\xb1",
      "\xc2\xb0",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xc2\xaa",
      "\xc2\xba",
      "\x7d",
      "\xc2\xb8",
      "\x5d",
      "\xc2\xa4",
      "\xc2\xb5",
      "\xc3\xb6",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc2\xa1",
      "\xc2\xbf",
      "\x40",
      "\xc3\x9d",
      "\x5b",
      "\xc2\xae",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa5",
      "\xc2\xb7",
      "\xc2\xa9",
      "\xc2\xa7",
      "\xc2\xb6",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc2\xac",
      "\x7c",
      "\xc2\xaf",
      "\xc2\xa8",
      "\x5c",
      "\xc3\x97",
      "\xc3\x9e",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xc3\xb4",
      "\x7e",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb5",
      "\xc3\xa6",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc2\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbf",
      "\xc2\xb4",
      "\xc3\xb7",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xb2",
      "\xc3\x94",
      "\x5e",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x95",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc2\xb3",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\xac",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\xae",
      0x0000005c => "\xbe",
      0x0000005d => "\x9e",
      0x0000005e => "\xec",
      0x0000005f => "\x6d",
      0x00000060 => "\x8c",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\x8e",
      0x0000007c => "\xbb",
      0x0000007d => "\x9c",
      0x0000007e => "\xcc",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x41",
      0x000000a1 => "\xaa",
      0x000000a2 => "\xb0",
      0x000000a3 => "\xb1",
      0x000000a4 => "\x9f",
      0x000000a5 => "\xb2",
      0x000000a6 => "\x6a",
      0x000000a7 => "\xb5",
      0x000000a8 => "\xbd",
      0x000000a9 => "\xb4",
      0x000000aa => "\x9a",
      0x000000ab => "\x8a",
      0x000000ac => "\xba",
      0x000000ad => "\xca",
      0x000000ae => "\xaf",
      0x000000af => "\xbc",
      0x000000b0 => "\x90",
      0x000000b1 => "\x8f",
      0x000000b2 => "\xea",
      0x000000b3 => "\xfa",
      0x000000b4 => "\xe0",
      0x000000b5 => "\xa0",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb3",
      0x000000b8 => "\x9d",
      0x000000b9 => "\xda",
      0x000000ba => "\x9b",
      0x000000bb => "\x8b",
      0x000000bc => "\xb7",
      0x000000bd => "\xb8",
      0x000000be => "\xb9",
      0x000000bf => "\xab",
      0x000000c0 => "\x64",
      0x000000c1 => "\x65",
      0x000000c2 => "\x62",
      0x000000c3 => "\x66",
      0x000000c4 => "\x63",
      0x000000c5 => "\x67",
      0x000000c6 => "\x5a",
      0x000000c7 => "\x68",
      0x000000c8 => "\x74",
      0x000000c9 => "\x71",
      0x000000ca => "\x72",
      0x000000cb => "\x73",
      0x000000cc => "\x78",
      0x000000cd => "\x75",
      0x000000ce => "\x76",
      0x000000cf => "\x77",
      0x000000d0 => "\x7c",
      0x000000d1 => "\x69",
      0x000000d2 => "\xed",
      0x000000d3 => "\xee",
      0x000000d4 => "\xeb",
      0x000000d5 => "\xef",
      0x000000d6 => "\x5f",
      0x000000d7 => "\xbf",
      0x000000d8 => "\x80",
      0x000000d9 => "\xfd",
      0x000000da => "\xfe",
      0x000000db => "\xfb",
      0x000000dc => "\xfc",
      0x000000dd => "\xad",
      0x000000de => "\xc0",
      0x000000df => "\x59",
      0x000000e0 => "\x44",
      0x000000e1 => "\x45",
      0x000000e2 => "\x42",
      0x000000e3 => "\x46",
      0x000000e4 => "\x43",
      0x000000e5 => "\x47",
      0x000000e6 => "\xd0",
      0x000000e7 => "\x48",
      0x000000e8 => "\x54",
      0x000000e9 => "\x51",
      0x000000ea => "\x52",
      0x000000eb => "\x53",
      0x000000ec => "\x58",
      0x000000ed => "\x55",
      0x000000ee => "\x56",
      0x000000ef => "\x57",
      0x000000f0 => "\x79",
      0x000000f1 => "\x49",
      0x000000f2 => "\xcd",
      0x000000f3 => "\xce",
      0x000000f4 => "\xcb",
      0x000000f5 => "\xcf",
      0x000000f6 => "\xa1",
      0x000000f7 => "\xe1",
      0x000000f8 => "\x70",
      0x000000f9 => "\xdd",
      0x000000fa => "\xde",
      0x000000fb => "\xdb",
      0x000000fc => "\xdc",
      0x000000fd => "\x8d",
      0x000000fe => "\x4a",
      0x000000ff => "\xdf",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM871 - Conversion routines for IBM871
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM871.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP871
   alias EBCDIC-CP-IS
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000000A0 | NO-BREAK SPACE
      42 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      43 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      44 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      45 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      46 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      47 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      48 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      49 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      4A |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      51 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      52 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      53 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      54 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      55 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      56 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      57 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      58 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      59 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      5A |  000000C6 | LATIN CAPITAL LETTER AE
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      63 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      64 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      65 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      66 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      67 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      68 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      69 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      71 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      72 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      73 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      74 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      75 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      76 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      77 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      78 |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      79 |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      8B |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      8C |  00000060 | GRAVE ACCENT
      8D |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      8E |  0000007B | LEFT CURLY BRACKET
      8F |  000000B1 | PLUS-MINUS SIGN
      90 |  000000B0 | DEGREE SIGN
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  000000AA | FEMININE ORDINAL INDICATOR
      9B |  000000BA | MASCULINE ORDINAL INDICATOR
      9C |  0000007D | RIGHT CURLY BRACKET
      9D |  000000B8 | CEDILLA
      9E |  0000005D | RIGHT SQUARE BRACKET
      9F |  000000A4 | CURRENCY SIGN
      A0 |  000000B5 | MICRO SIGN
      A1 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  000000A1 | INVERTED EXCLAMATION MARK
      AB |  000000BF | INVERTED QUESTION MARK
      AC |  00000040 | COMMERCIAL AT
      AD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      AE |  0000005B | LEFT SQUARE BRACKET
      AF |  000000AE | REGISTERED SIGN
      B0 |  000000A2 | CENT SIGN
      B1 |  000000A3 | POUND SIGN
      B2 |  000000A5 | YEN SIGN
      B3 |  000000B7 | MIDDLE DOT
      B4 |  000000A9 | COPYRIGHT SIGN
      B5 |  000000A7 | SECTION SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000BC | VULGAR FRACTION ONE QUARTER
      B8 |  000000BD | VULGAR FRACTION ONE HALF
      B9 |  000000BE | VULGAR FRACTION THREE QUARTERS
      BA |  000000AC | NOT SIGN
      BB |  0000007C | VERTICAL LINE
      BC |  000000AF | MACRON
      BD |  000000A8 | DIAERESIS
      BE |  0000005C | REVERSE SOLIDUS
      BF |  000000D7 | MULTIPLICATION SIGN
      C0 |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      CC |  0000007E | TILDE
      CD |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      CE |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      CF |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      D0 |  000000E6 | LATIN SMALL LETTER AE
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  000000B9 | SUPERSCRIPT ONE
      DB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      DC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      DD |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      DE |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      DF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      E0 |  000000B4 | ACUTE ACCENT
      E1 |  000000F7 | DIVISION SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000B2 | SUPERSCRIPT TWO
      EB |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      EC |  0000005E | CIRCUMFLEX ACCENT
      ED |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000B3 | SUPERSCRIPT THREE
      FB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      FC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      FD |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      FE |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM871

    $main::fatpacked{"Locale/RecodeData/IBM874.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM874';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM874.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM874;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x20ac,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x2026,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x2018,
      0x2019,
      0x201c,
      0x201d,
      0x2022,
      0x2013,
      0x2014,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a0,
      0x0e01,
      0x0e02,
      0x0e03,
      0x0e04,
      0x0e05,
      0x0e06,
      0x0e07,
      0x0e08,
      0x0e09,
      0x0e0a,
      0x0e0b,
      0x0e0c,
      0x0e0d,
      0x0e0e,
      0x0e0f,
      0x0e10,
      0x0e11,
      0x0e12,
      0x0e13,
      0x0e14,
      0x0e15,
      0x0e16,
      0x0e17,
      0x0e18,
      0x0e19,
      0x0e1a,
      0x0e1b,
      0x0e1c,
      0x0e1d,
      0x0e1e,
      0x0e1f,
      0x0e20,
      0x0e21,
      0x0e22,
      0x0e23,
      0x0e24,
      0x0e25,
      0x0e26,
      0x0e27,
      0x0e28,
      0x0e29,
      0x0e2a,
      0x0e2b,
      0x0e2c,
      0x0e2d,
      0x0e2e,
      0x0e2f,
      0x0e30,
      0x0e31,
      0x0e32,
      0x0e33,
      0x0e34,
      0x0e35,
      0x0e36,
      0x0e37,
      0x0e38,
      0x0e39,
      0x0e3a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0e3f,
      0x0e40,
      0x0e41,
      0x0e42,
      0x0e43,
      0x0e44,
      0x0e45,
      0x0e46,
      0x0e47,
      0x0e48,
      0x0e49,
      0x0e4a,
      0x0e4b,
      0x0e4c,
      0x0e4d,
      0x0e4e,
      0x0e4f,
      0x0e50,
      0x0e51,
      0x0e52,
      0x0e53,
      0x0e54,
      0x0e55,
      0x0e56,
      0x0e57,
      0x0e58,
      0x0e59,
      0x0e5a,
      0x0e5b,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xe2\x82\xac",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x80\xa6",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\xa2",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa0",
      "\xe0\xb8\x81",
      "\xe0\xb8\x82",
      "\xe0\xb8\x83",
      "\xe0\xb8\x84",
      "\xe0\xb8\x85",
      "\xe0\xb8\x86",
      "\xe0\xb8\x87",
      "\xe0\xb8\x88",
      "\xe0\xb8\x89",
      "\xe0\xb8\x8a",
      "\xe0\xb8\x8b",
      "\xe0\xb8\x8c",
      "\xe0\xb8\x8d",
      "\xe0\xb8\x8e",
      "\xe0\xb8\x8f",
      "\xe0\xb8\x90",
      "\xe0\xb8\x91",
      "\xe0\xb8\x92",
      "\xe0\xb8\x93",
      "\xe0\xb8\x94",
      "\xe0\xb8\x95",
      "\xe0\xb8\x96",
      "\xe0\xb8\x97",
      "\xe0\xb8\x98",
      "\xe0\xb8\x99",
      "\xe0\xb8\x9a",
      "\xe0\xb8\x9b",
      "\xe0\xb8\x9c",
      "\xe0\xb8\x9d",
      "\xe0\xb8\x9e",
      "\xe0\xb8\x9f",
      "\xe0\xb8\xa0",
      "\xe0\xb8\xa1",
      "\xe0\xb8\xa2",
      "\xe0\xb8\xa3",
      "\xe0\xb8\xa4",
      "\xe0\xb8\xa5",
      "\xe0\xb8\xa6",
      "\xe0\xb8\xa7",
      "\xe0\xb8\xa8",
      "\xe0\xb8\xa9",
      "\xe0\xb8\xaa",
      "\xe0\xb8\xab",
      "\xe0\xb8\xac",
      "\xe0\xb8\xad",
      "\xe0\xb8\xae",
      "\xe0\xb8\xaf",
      "\xe0\xb8\xb0",
      "\xe0\xb8\xb1",
      "\xe0\xb8\xb2",
      "\xe0\xb8\xb3",
      "\xe0\xb8\xb4",
      "\xe0\xb8\xb5",
      "\xe0\xb8\xb6",
      "\xe0\xb8\xb7",
      "\xe0\xb8\xb8",
      "\xe0\xb8\xb9",
      "\xe0\xb8\xba",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe0\xb8\xbf",
      "\xe0\xb9\x80",
      "\xe0\xb9\x81",
      "\xe0\xb9\x82",
      "\xe0\xb9\x83",
      "\xe0\xb9\x84",
      "\xe0\xb9\x85",
      "\xe0\xb9\x86",
      "\xe0\xb9\x87",
      "\xe0\xb9\x88",
      "\xe0\xb9\x89",
      "\xe0\xb9\x8a",
      "\xe0\xb9\x8b",
      "\xe0\xb9\x8c",
      "\xe0\xb9\x8d",
      "\xe0\xb9\x8e",
      "\xe0\xb9\x8f",
      "\xe0\xb9\x90",
      "\xe0\xb9\x91",
      "\xe0\xb9\x92",
      "\xe0\xb9\x93",
      "\xe0\xb9\x94",
      "\xe0\xb9\x95",
      "\xe0\xb9\x96",
      "\xe0\xb9\x97",
      "\xe0\xb9\x98",
      "\xe0\xb9\x99",
      "\xe0\xb9\x9a",
      "\xe0\xb9\x9b",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xa0",
      0x00000e01 => "\xa1",
      0x00000e02 => "\xa2",
      0x00000e03 => "\xa3",
      0x00000e04 => "\xa4",
      0x00000e05 => "\xa5",
      0x00000e06 => "\xa6",
      0x00000e07 => "\xa7",
      0x00000e08 => "\xa8",
      0x00000e09 => "\xa9",
      0x00000e0a => "\xaa",
      0x00000e0b => "\xab",
      0x00000e0c => "\xac",
      0x00000e0d => "\xad",
      0x00000e0e => "\xae",
      0x00000e0f => "\xaf",
      0x00000e10 => "\xb0",
      0x00000e11 => "\xb1",
      0x00000e12 => "\xb2",
      0x00000e13 => "\xb3",
      0x00000e14 => "\xb4",
      0x00000e15 => "\xb5",
      0x00000e16 => "\xb6",
      0x00000e17 => "\xb7",
      0x00000e18 => "\xb8",
      0x00000e19 => "\xb9",
      0x00000e1a => "\xba",
      0x00000e1b => "\xbb",
      0x00000e1c => "\xbc",
      0x00000e1d => "\xbd",
      0x00000e1e => "\xbe",
      0x00000e1f => "\xbf",
      0x00000e20 => "\xc0",
      0x00000e21 => "\xc1",
      0x00000e22 => "\xc2",
      0x00000e23 => "\xc3",
      0x00000e24 => "\xc4",
      0x00000e25 => "\xc5",
      0x00000e26 => "\xc6",
      0x00000e27 => "\xc7",
      0x00000e28 => "\xc8",
      0x00000e29 => "\xc9",
      0x00000e2a => "\xca",
      0x00000e2b => "\xcb",
      0x00000e2c => "\xcc",
      0x00000e2d => "\xcd",
      0x00000e2e => "\xce",
      0x00000e2f => "\xcf",
      0x00000e30 => "\xd0",
      0x00000e31 => "\xd1",
      0x00000e32 => "\xd2",
      0x00000e33 => "\xd3",
      0x00000e34 => "\xd4",
      0x00000e35 => "\xd5",
      0x00000e36 => "\xd6",
      0x00000e37 => "\xd7",
      0x00000e38 => "\xd8",
      0x00000e39 => "\xd9",
      0x00000e3a => "\xda",
      0x00000e3f => "\xdf",
      0x00000e40 => "\xe0",
      0x00000e41 => "\xe1",
      0x00000e42 => "\xe2",
      0x00000e43 => "\xe3",
      0x00000e44 => "\xe4",
      0x00000e45 => "\xe5",
      0x00000e46 => "\xe6",
      0x00000e47 => "\xe7",
      0x00000e48 => "\xe8",
      0x00000e49 => "\xe9",
      0x00000e4a => "\xea",
      0x00000e4b => "\xeb",
      0x00000e4c => "\xec",
      0x00000e4d => "\xed",
      0x00000e4e => "\xee",
      0x00000e4f => "\xef",
      0x00000e50 => "\xf0",
      0x00000e51 => "\xf1",
      0x00000e52 => "\xf2",
      0x00000e53 => "\xf3",
      0x00000e54 => "\xf4",
      0x00000e55 => "\xf5",
      0x00000e56 => "\xf6",
      0x00000e57 => "\xf7",
      0x00000e58 => "\xf8",
      0x00000e59 => "\xf9",
      0x00000e5a => "\xfa",
      0x00000e5b => "\xfb",
      0x00002013 => "\x96",
      0x00002014 => "\x97",
      0x00002018 => "\x91",
      0x00002019 => "\x92",
      0x0000201c => "\x93",
      0x0000201d => "\x94",
      0x00002022 => "\x95",
      0x00002026 => "\x85",
      0x000020ac => "\x80",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM874 - Conversion routines for IBM874
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM874.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   automatically generated from the charDB
   alias CP874
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL
      01 |  00000001 | START OF HEADING
      02 |  00000002 | START OF TEXT
      03 |  00000003 | END OF TEXT
      04 |  00000004 | END OF TRANSMISSION
      05 |  00000005 | ENQUIRY
      06 |  00000006 | ACKNOWLEDGE
      07 |  00000007 | BELL
      08 |  00000008 | BACKSPACE
      09 |  00000009 | HORIZONTAL TABULATION
      0A |  0000000A | LINE FEED
      0B |  0000000B | VERTICAL TABULATION
      0C |  0000000C | FORM FEED
      0D |  0000000D | CARRIAGE RETURN
      0E |  0000000E | SHIFT OUT
      0F |  0000000F | SHIFT IN
      10 |  00000010 | DATA LINK ESCAPE
      11 |  00000011 | DEVICE CONTROL ONE
      12 |  00000012 | DEVICE CONTROL TWO
      13 |  00000013 | DEVICE CONTROL THREE
      14 |  00000014 | DEVICE CONTROL FOUR
      15 |  00000015 | NEGATIVE ACKNOWLEDGE
      16 |  00000016 | SYNCHRONOUS IDLE
      17 |  00000017 | END OF TRANSMISSION BLOCK
      18 |  00000018 | CANCEL
      19 |  00000019 | END OF MEDIUM
      1A |  0000001A | SUBSTITUTE
      1B |  0000001B | ESCAPE
      1C |  0000001C | FILE SEPARATOR
      1D |  0000001D | GROUP SEPARATOR
      1E |  0000001E | RECORD SEPARATOR
      1F |  0000001F | UNIT SEPARATOR
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE
      80 |  000020AC | EURO SIGN
      85 |  00002026 | HORIZONTAL ELLIPSIS
      91 |  00002018 | LEFT SINGLE QUOTATION MARK
      92 |  00002019 | RIGHT SINGLE QUOTATION MARK
      93 |  0000201C | LEFT DOUBLE QUOTATION MARK
      94 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      95 |  00002022 | BULLET
      96 |  00002013 | EN DASH
      97 |  00002014 | EM DASH
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  00000E01 | THAI CHARACTER KO KAI
      A2 |  00000E02 | THAI CHARACTER KHO KHAI
      A3 |  00000E03 | THAI CHARACTER KHO KHUAT
      A4 |  00000E04 | THAI CHARACTER KHO KHWAI
      A5 |  00000E05 | THAI CHARACTER KHO KHON
      A6 |  00000E06 | THAI CHARACTER KHO RAKHANG
      A7 |  00000E07 | THAI CHARACTER NGO NGU
      A8 |  00000E08 | THAI CHARACTER CHO CHAN
      A9 |  00000E09 | THAI CHARACTER CHO CHING
      AA |  00000E0A | THAI CHARACTER CHO CHANG
      AB |  00000E0B | THAI CHARACTER SO SO
      AC |  00000E0C | THAI CHARACTER CHO CHOE
      AD |  00000E0D | THAI CHARACTER YO YING
      AE |  00000E0E | THAI CHARACTER DO CHADA
      AF |  00000E0F | THAI CHARACTER TO PATAK
      B0 |  00000E10 | THAI CHARACTER THO THAN
      B1 |  00000E11 | THAI CHARACTER THO NANGMONTHO
      B2 |  00000E12 | THAI CHARACTER THO PHUTHAO
      B3 |  00000E13 | THAI CHARACTER NO NEN
      B4 |  00000E14 | THAI CHARACTER DO DEK
      B5 |  00000E15 | THAI CHARACTER TO TAO
      B6 |  00000E16 | THAI CHARACTER THO THUNG
      B7 |  00000E17 | THAI CHARACTER THO THAHAN
      B8 |  00000E18 | THAI CHARACTER THO THONG
      B9 |  00000E19 | THAI CHARACTER NO NU
      BA |  00000E1A | THAI CHARACTER BO BAIMAI
      BB |  00000E1B | THAI CHARACTER PO PLA
      BC |  00000E1C | THAI CHARACTER PHO PHUNG
      BD |  00000E1D | THAI CHARACTER FO FA
      BE |  00000E1E | THAI CHARACTER PHO PHAN
      BF |  00000E1F | THAI CHARACTER FO FAN
      C0 |  00000E20 | THAI CHARACTER PHO SAMPHAO
      C1 |  00000E21 | THAI CHARACTER MO MA
      C2 |  00000E22 | THAI CHARACTER YO YAK
      C3 |  00000E23 | THAI CHARACTER RO RUA
      C4 |  00000E24 | THAI CHARACTER RU
      C5 |  00000E25 | THAI CHARACTER LO LING
      C6 |  00000E26 | THAI CHARACTER LU
      C7 |  00000E27 | THAI CHARACTER WO WAEN
      C8 |  00000E28 | THAI CHARACTER SO SALA
      C9 |  00000E29 | THAI CHARACTER SO RUSI
      CA |  00000E2A | THAI CHARACTER SO SUA
      CB |  00000E2B | THAI CHARACTER HO HIP
      CC |  00000E2C | THAI CHARACTER LO CHULA
      CD |  00000E2D | THAI CHARACTER O ANG
      CE |  00000E2E | THAI CHARACTER HO NOKHUK
      CF |  00000E2F | THAI CHARACTER PAIYANNOI
      D0 |  00000E30 | THAI CHARACTER SARA A
      D1 |  00000E31 | THAI CHARACTER MAI HAN-AKAT
      D2 |  00000E32 | THAI CHARACTER SARA AA
      D3 |  00000E33 | THAI CHARACTER SARA AM
      D4 |  00000E34 | THAI CHARACTER SARA I
      D5 |  00000E35 | THAI CHARACTER SARA II
      D6 |  00000E36 | THAI CHARACTER SARA UE
      D7 |  00000E37 | THAI CHARACTER SARA UEE
      D8 |  00000E38 | THAI CHARACTER SARA U
      D9 |  00000E39 | THAI CHARACTER SARA UU
      DA |  00000E3A | THAI CHARACTER PHINTHU
      DF |  00000E3F | THAI CURRENCY SYMBOL BAHT
      E0 |  00000E40 | THAI CHARACTER SARA E
      E1 |  00000E41 | THAI CHARACTER SARA AE
      E2 |  00000E42 | THAI CHARACTER SARA O
      E3 |  00000E43 | THAI CHARACTER SARA AI MAIMUAN
      E4 |  00000E44 | THAI CHARACTER SARA AI MAIMALAI
      E5 |  00000E45 | THAI CHARACTER LAKKHANGYAO
      E6 |  00000E46 | THAI CHARACTER MAIYAMOK
      E7 |  00000E47 | THAI CHARACTER MAITAIKHU
      E8 |  00000E48 | THAI CHARACTER MAI EK
      E9 |  00000E49 | THAI CHARACTER MAI THO
      EA |  00000E4A | THAI CHARACTER MAI TRI
      EB |  00000E4B | THAI CHARACTER MAI CHATTAWA
      EC |  00000E4C | THAI CHARACTER THANTHAKHAT
      ED |  00000E4D | THAI CHARACTER NIKHAHIT
      EE |  00000E4E | THAI CHARACTER YAMAKKAN
      EF |  00000E4F | THAI CHARACTER FONGMAN
      F0 |  00000E50 | THAI DIGIT ZERO
      F1 |  00000E51 | THAI DIGIT ONE
      F2 |  00000E52 | THAI DIGIT TWO
      F3 |  00000E53 | THAI DIGIT THREE
      F4 |  00000E54 | THAI DIGIT FOUR
      F5 |  00000E55 | THAI DIGIT FIVE
      F6 |  00000E56 | THAI DIGIT SIX
      F7 |  00000E57 | THAI DIGIT SEVEN
      F8 |  00000E58 | THAI DIGIT EIGHT
      F9 |  00000E59 | THAI DIGIT NINE
      FA |  00000E5A | THAI CHARACTER ANGKHANKHU
      FB |  00000E5B | THAI CHARACTER KHOMUT
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM874

    $main::fatpacked{"Locale/RecodeData/IBM875.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM875';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM875.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM875;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x0391,
      0x0392,
      0x0393,
      0x0394,
      0x0395,
      0x0396,
      0x0397,
      0x0398,
      0x0399,
      0x005b,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0x039a,
      0x039b,
      0x039c,
      0x039d,
      0x039e,
      0x039f,
      0x03a0,
      0x03a1,
      0x03a3,
      0x005d,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0x03a4,
      0x03a5,
      0x03a6,
      0x03a7,
      0x03a8,
      0x03a9,
      0x03aa,
      0x03ab,
      0xfffd,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x00a8,
      0x0386,
      0x0388,
      0x0389,
      0x2207,
      0x038a,
      0x038c,
      0x038e,
      0x038f,
      0x0060,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0x0385,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x03b1,
      0x03b2,
      0x03b3,
      0x03b4,
      0x03b5,
      0x03b6,
      0x00b0,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x03b7,
      0x03b8,
      0x03b9,
      0x03ba,
      0x03bb,
      0x03bc,
      0x00b4,
      0x007e,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x03bd,
      0x03be,
      0x03bf,
      0x03c0,
      0x03c1,
      0x03c3,
      0x00a3,
      0x03ac,
      0x03ad,
      0x03ae,
      0x0390,
      0x03af,
      0x03cc,
      0x03cd,
      0x03b0,
      0x03ce,
      0x03c2,
      0x03c4,
      0x03c5,
      0x03c6,
      0x03c7,
      0x03c8,
      0x007b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0x03c9,
      0x03ca,
      0x03cb,
      0x2018,
      0x2015,
      0x007d,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x00b1,
      0x00bd,
      0xfffd,
      0x00b7,
      0x2019,
      0x00a6,
      0x005c,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00b2,
      0x00a7,
      0xfffd,
      0xfffd,
      0x00ab,
      0x00ac,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00b3,
      0x00a9,
      0xfffd,
      0xfffd,
      0x00bb,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xce\x91",
      "\xce\x92",
      "\xce\x93",
      "\xce\x94",
      "\xce\x95",
      "\xce\x96",
      "\xce\x97",
      "\xce\x98",
      "\xce\x99",
      "\x5b",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xce\x9a",
      "\xce\x9b",
      "\xce\x9c",
      "\xce\x9d",
      "\xce\x9e",
      "\xce\x9f",
      "\xce\xa0",
      "\xce\xa1",
      "\xce\xa3",
      "\x5d",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xce\xa4",
      "\xce\xa5",
      "\xce\xa6",
      "\xce\xa7",
      "\xce\xa8",
      "\xce\xa9",
      "\xce\xaa",
      "\xce\xab",
      "\xef\xbf\xbd",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xc2\xa8",
      "\xce\x86",
      "\xce\x88",
      "\xce\x89",
      "\xe2\x88\x87",
      "\xce\x8a",
      "\xce\x8c",
      "\xce\x8e",
      "\xce\x8f",
      "\x60",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xce\x85",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xce\xb1",
      "\xce\xb2",
      "\xce\xb3",
      "\xce\xb4",
      "\xce\xb5",
      "\xce\xb6",
      "\xc2\xb0",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xce\xb7",
      "\xce\xb8",
      "\xce\xb9",
      "\xce\xba",
      "\xce\xbb",
      "\xce\xbc",
      "\xc2\xb4",
      "\x7e",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xce\xbd",
      "\xce\xbe",
      "\xce\xbf",
      "\xcf\x80",
      "\xcf\x81",
      "\xcf\x83",
      "\xc2\xa3",
      "\xce\xac",
      "\xce\xad",
      "\xce\xae",
      "\xce\x90",
      "\xce\xaf",
      "\xcf\x8c",
      "\xcf\x8d",
      "\xce\xb0",
      "\xcf\x8e",
      "\xcf\x82",
      "\xcf\x84",
      "\xcf\x85",
      "\xcf\x86",
      "\xcf\x87",
      "\xcf\x88",
      "\x7b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xcf\x89",
      "\xcf\x8a",
      "\xcf\x8b",
      "\xe2\x80\x98",
      "\xe2\x80\x95",
      "\x7d",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xc2\xb1",
      "\xc2\xbd",
      "\xef\xbf\xbd",
      "\xc2\xb7",
      "\xe2\x80\x99",
      "\xc2\xa6",
      "\x5c",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xb2",
      "\xc2\xa7",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xab",
      "\xc2\xac",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc2\xb3",
      "\xc2\xa9",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xbb",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x4a",
      0x0000005c => "\xe0",
      0x0000005d => "\x5a",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x79",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\xc0",
      0x0000007d => "\xd0",
      0x0000007e => "\xa1",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a3 => "\xb0",
      0x000000a6 => "\xdf",
      0x000000a7 => "\xeb",
      0x000000a8 => "\x70",
      0x000000a9 => "\xfb",
      0x000000ab => "\xee",
      0x000000ac => "\xef",
      0x000000ad => "\xca",
      0x000000b0 => "\x90",
      0x000000b1 => "\xda",
      0x000000b2 => "\xea",
      0x000000b3 => "\xfa",
      0x000000b4 => "\xa0",
      0x000000b7 => "\xdd",
      0x000000bb => "\xfe",
      0x000000bd => "\xdb",
      0x00000385 => "\x80",
      0x00000386 => "\x71",
      0x00000388 => "\x72",
      0x00000389 => "\x73",
      0x0000038a => "\x75",
      0x0000038c => "\x76",
      0x0000038e => "\x77",
      0x0000038f => "\x78",
      0x00000390 => "\xb4",
      0x00000391 => "\x41",
      0x00000392 => "\x42",
      0x00000393 => "\x43",
      0x00000394 => "\x44",
      0x00000395 => "\x45",
      0x00000396 => "\x46",
      0x00000397 => "\x47",
      0x00000398 => "\x48",
      0x00000399 => "\x49",
      0x0000039a => "\x51",
      0x0000039b => "\x52",
      0x0000039c => "\x53",
      0x0000039d => "\x54",
      0x0000039e => "\x55",
      0x0000039f => "\x56",
      0x000003a0 => "\x57",
      0x000003a1 => "\x58",
      0x000003a3 => "\x59",
      0x000003a4 => "\x62",
      0x000003a5 => "\x63",
      0x000003a6 => "\x64",
      0x000003a7 => "\x65",
      0x000003a8 => "\x66",
      0x000003a9 => "\x67",
      0x000003aa => "\x68",
      0x000003ab => "\x69",
      0x000003ac => "\xb1",
      0x000003ad => "\xb2",
      0x000003ae => "\xb3",
      0x000003af => "\xb5",
      0x000003b0 => "\xb8",
      0x000003b1 => "\x8a",
      0x000003b2 => "\x8b",
      0x000003b3 => "\x8c",
      0x000003b4 => "\x8d",
      0x000003b5 => "\x8e",
      0x000003b6 => "\x8f",
      0x000003b7 => "\x9a",
      0x000003b8 => "\x9b",
      0x000003b9 => "\x9c",
      0x000003ba => "\x9d",
      0x000003bb => "\x9e",
      0x000003bc => "\x9f",
      0x000003bd => "\xaa",
      0x000003be => "\xab",
      0x000003bf => "\xac",
      0x000003c0 => "\xad",
      0x000003c1 => "\xae",
      0x000003c2 => "\xba",
      0x000003c3 => "\xaf",
      0x000003c4 => "\xbb",
      0x000003c5 => "\xbc",
      0x000003c6 => "\xbd",
      0x000003c7 => "\xbe",
      0x000003c8 => "\xbf",
      0x000003c9 => "\xcb",
      0x000003ca => "\xcc",
      0x000003cb => "\xcd",
      0x000003cc => "\xb6",
      0x000003cd => "\xb7",
      0x000003ce => "\xb9",
      0x00002015 => "\xcf",
      0x00002018 => "\xce",
      0x00002019 => "\xde",
      0x00002207 => "\x74",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM875 - Conversion routines for IBM875
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM875.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: UNICODE 1.0
   alias CP875
   alias EBCDIC-GREEK
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  00000391 | GREEK CAPITAL LETTER ALPHA
      42 |  00000392 | GREEK CAPITAL LETTER BETA
      43 |  00000393 | GREEK CAPITAL LETTER GAMMA
      44 |  00000394 | GREEK CAPITAL LETTER DELTA
      45 |  00000395 | GREEK CAPITAL LETTER EPSILON
      46 |  00000396 | GREEK CAPITAL LETTER ZETA
      47 |  00000397 | GREEK CAPITAL LETTER ETA
      48 |  00000398 | GREEK CAPITAL LETTER THETA
      49 |  00000399 | GREEK CAPITAL LETTER IOTA
      4A |  0000005B | LEFT SQUARE BRACKET
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      51 |  0000039A | GREEK CAPITAL LETTER KAPPA
      52 |  0000039B | GREEK CAPITAL LETTER LAMDA
      53 |  0000039C | GREEK CAPITAL LETTER MU
      54 |  0000039D | GREEK CAPITAL LETTER NU
      55 |  0000039E | GREEK CAPITAL LETTER XI
      56 |  0000039F | GREEK CAPITAL LETTER OMICRON
      57 |  000003A0 | GREEK CAPITAL LETTER PI
      58 |  000003A1 | GREEK CAPITAL LETTER RHO
      59 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      5A |  0000005D | RIGHT SQUARE BRACKET
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000003A4 | GREEK CAPITAL LETTER TAU
      63 |  000003A5 | GREEK CAPITAL LETTER UPSILON
      64 |  000003A6 | GREEK CAPITAL LETTER PHI
      65 |  000003A7 | GREEK CAPITAL LETTER CHI
      66 |  000003A8 | GREEK CAPITAL LETTER PSI
      67 |  000003A9 | GREEK CAPITAL LETTER OMEGA
      68 |  000003AA | GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
      69 |  000003AB | GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  000000A8 | DIAERESIS
      71 |  00000386 | GREEK CAPITAL LETTER ALPHA WITH TONOS
      72 |  00000388 | GREEK CAPITAL LETTER EPSILON WITH TONOS
      73 |  00000389 | GREEK CAPITAL LETTER ETA WITH TONOS
      74 |  00002207 | NABLA
      75 |  0000038A | GREEK CAPITAL LETTER IOTA WITH TONOS
      76 |  0000038C | GREEK CAPITAL LETTER OMICRON WITH TONOS
      77 |  0000038E | GREEK CAPITAL LETTER UPSILON WITH TONOS
      78 |  0000038F | GREEK CAPITAL LETTER OMEGA WITH TONOS
      79 |  00000060 | GRAVE ACCENT
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  00000385 | GREEK DIALYTIKA TONOS
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  000003B1 | GREEK SMALL LETTER ALPHA
      8B |  000003B2 | GREEK SMALL LETTER BETA
      8C |  000003B3 | GREEK SMALL LETTER GAMMA
      8D |  000003B4 | GREEK SMALL LETTER DELTA
      8E |  000003B5 | GREEK SMALL LETTER EPSILON
      8F |  000003B6 | GREEK SMALL LETTER ZETA
      90 |  000000B0 | DEGREE SIGN
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  000003B7 | GREEK SMALL LETTER ETA
      9B |  000003B8 | GREEK SMALL LETTER THETA
      9C |  000003B9 | GREEK SMALL LETTER IOTA
      9D |  000003BA | GREEK SMALL LETTER KAPPA
      9E |  000003BB | GREEK SMALL LETTER LAMDA
      9F |  000003BC | GREEK SMALL LETTER MU
      A0 |  000000B4 | ACUTE ACCENT
      A1 |  0000007E | TILDE
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  000003BD | GREEK SMALL LETTER NU
      AB |  000003BE | GREEK SMALL LETTER XI
      AC |  000003BF | GREEK SMALL LETTER OMICRON
      AD |  000003C0 | GREEK SMALL LETTER PI
      AE |  000003C1 | GREEK SMALL LETTER RHO
      AF |  000003C3 | GREEK SMALL LETTER SIGMA
      B0 |  000000A3 | POUND SIGN
      B1 |  000003AC | GREEK SMALL LETTER ALPHA WITH TONOS
      B2 |  000003AD | GREEK SMALL LETTER EPSILON WITH TONOS
      B3 |  000003AE | GREEK SMALL LETTER ETA WITH TONOS
      B4 |  00000390 | GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
      B5 |  000003AF | GREEK SMALL LETTER IOTA WITH TONOS
      B6 |  000003CC | GREEK SMALL LETTER OMICRON WITH TONOS
      B7 |  000003CD | GREEK SMALL LETTER UPSILON WITH TONOS
      B8 |  000003B0 | GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
      B9 |  000003CE | GREEK SMALL LETTER OMEGA WITH TONOS
      BA |  000003C2 | GREEK SMALL LETTER FINAL SIGMA
      BB |  000003C4 | GREEK SMALL LETTER TAU
      BC |  000003C5 | GREEK SMALL LETTER UPSILON
      BD |  000003C6 | GREEK SMALL LETTER PHI
      BE |  000003C7 | GREEK SMALL LETTER CHI
      BF |  000003C8 | GREEK SMALL LETTER PSI
      C0 |  0000007B | LEFT CURLY BRACKET
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  000003C9 | GREEK SMALL LETTER OMEGA
      CC |  000003CA | GREEK SMALL LETTER IOTA WITH DIALYTIKA
      CD |  000003CB | GREEK SMALL LETTER UPSILON WITH DIALYTIKA
      CE |  00002018 | LEFT SINGLE QUOTATION MARK
      CF |  00002015 | HORIZONTAL BAR
      D0 |  0000007D | RIGHT CURLY BRACKET
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  000000B1 | PLUS-MINUS SIGN
      DB |  000000BD | VULGAR FRACTION ONE HALF
      DD |  000000B7 | MIDDLE DOT
      DE |  00002019 | RIGHT SINGLE QUOTATION MARK
      DF |  000000A6 | BROKEN BAR
      E0 |  0000005C | REVERSE SOLIDUS
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000B2 | SUPERSCRIPT TWO
      EB |  000000A7 | SECTION SIGN
      EE |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      EF |  000000AC | NOT SIGN
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000B3 | SUPERSCRIPT THREE
      FB |  000000A9 | COPYRIGHT SIGN
      FE |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM875

    $main::fatpacked{"Locale/RecodeData/IBM880.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM880';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM880.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM880;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0x0452,
      0x0453,
      0x0451,
      0xfffd,
      0x0455,
      0x0456,
      0x0457,
      0x0458,
      0x005b,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0x0459,
      0x045a,
      0x045b,
      0x045c,
      0xfffd,
      0x045f,
      0x042a,
      0x2116,
      0x0402,
      0x005d,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0x0403,
      0x0401,
      0xfffd,
      0x0405,
      0x0406,
      0x0407,
      0x0408,
      0x0409,
      0x00a6,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x040a,
      0x040b,
      0x040c,
      0xfffd,
      0xfffd,
      0x040f,
      0x044e,
      0x0430,
      0x0431,
      0xfffd,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0x0446,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x0434,
      0x0435,
      0x0444,
      0x0433,
      0x0445,
      0x0438,
      0x0439,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x044f,
      0xfffd,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0436,
      0x0432,
      0x044c,
      0x044b,
      0x0437,
      0x0448,
      0x044d,
      0x0449,
      0x0447,
      0x044a,
      0x042e,
      0x0410,
      0x0411,
      0x0426,
      0x0414,
      0x0415,
      0x0424,
      0x0413,
      0xfffd,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x0425,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0xfffd,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x041d,
      0x041e,
      0x041f,
      0x042f,
      0x0420,
      0x0421,
      0x005c,
      0x00a4,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x0422,
      0x0423,
      0x0416,
      0x0412,
      0x042c,
      0x042b,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x0417,
      0x0428,
      0x042d,
      0x0429,
      0x0427,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xd1\x92",
      "\xd1\x93",
      "\xd1\x91",
      "\xef\xbf\xbd",
      "\xd1\x95",
      "\xd1\x96",
      "\xd1\x97",
      "\xd1\x98",
      "\x5b",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xd1\x99",
      "\xd1\x9a",
      "\xd1\x9b",
      "\xd1\x9c",
      "\xef\xbf\xbd",
      "\xd1\x9f",
      "\xd0\xaa",
      "\xe2\x84\x96",
      "\xd0\x82",
      "\x5d",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xd0\x83",
      "\xd0\x81",
      "\xef\xbf\xbd",
      "\xd0\x85",
      "\xd0\x86",
      "\xd0\x87",
      "\xd0\x88",
      "\xd0\x89",
      "\xc2\xa6",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xd0\x8a",
      "\xd0\x8b",
      "\xd0\x8c",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd0\x8f",
      "\xd1\x8e",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xef\xbf\xbd",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xd1\x86",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd1\x84",
      "\xd0\xb3",
      "\xd1\x85",
      "\xd0\xb8",
      "\xd0\xb9",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xd1\x8f",
      "\xef\xbf\xbd",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd0\xb6",
      "\xd0\xb2",
      "\xd1\x8c",
      "\xd1\x8b",
      "\xd0\xb7",
      "\xd1\x88",
      "\xd1\x8d",
      "\xd1\x89",
      "\xd1\x87",
      "\xd1\x8a",
      "\xd0\xae",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\xa6",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\xa4",
      "\xd0\x93",
      "\xef\xbf\xbd",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xd0\xa5",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xef\xbf\xbd",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xaf",
      "\xd0\xa0",
      "\xd0\xa1",
      "\x5c",
      "\xc2\xa4",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\x96",
      "\xd0\x92",
      "\xd0\xac",
      "\xd0\xab",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xd0\x97",
      "\xd0\xa8",
      "\xd0\xad",
      "\xd0\xa9",
      "\xd0\xa7",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x4a",
      0x0000005c => "\xe0",
      0x0000005d => "\x5a",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a4 => "\xe1",
      0x000000a6 => "\x6a",
      0x00000401 => "\x63",
      0x00000402 => "\x59",
      0x00000403 => "\x62",
      0x00000405 => "\x65",
      0x00000406 => "\x66",
      0x00000407 => "\x67",
      0x00000408 => "\x68",
      0x00000409 => "\x69",
      0x0000040a => "\x70",
      0x0000040b => "\x71",
      0x0000040c => "\x72",
      0x0000040f => "\x75",
      0x00000410 => "\xb9",
      0x00000411 => "\xba",
      0x00000412 => "\xed",
      0x00000413 => "\xbf",
      0x00000414 => "\xbc",
      0x00000415 => "\xbd",
      0x00000416 => "\xec",
      0x00000417 => "\xfa",
      0x00000418 => "\xcb",
      0x00000419 => "\xcc",
      0x0000041a => "\xcd",
      0x0000041b => "\xce",
      0x0000041c => "\xcf",
      0x0000041d => "\xda",
      0x0000041e => "\xdb",
      0x0000041f => "\xdc",
      0x00000420 => "\xde",
      0x00000421 => "\xdf",
      0x00000422 => "\xea",
      0x00000423 => "\xeb",
      0x00000424 => "\xbe",
      0x00000425 => "\xca",
      0x00000426 => "\xbb",
      0x00000427 => "\xfe",
      0x00000428 => "\xfb",
      0x00000429 => "\xfd",
      0x0000042a => "\x57",
      0x0000042b => "\xef",
      0x0000042c => "\xee",
      0x0000042d => "\xfc",
      0x0000042e => "\xb8",
      0x0000042f => "\xdd",
      0x00000430 => "\x77",
      0x00000431 => "\x78",
      0x00000432 => "\xaf",
      0x00000433 => "\x8d",
      0x00000434 => "\x8a",
      0x00000435 => "\x8b",
      0x00000436 => "\xae",
      0x00000437 => "\xb2",
      0x00000438 => "\x8f",
      0x00000439 => "\x90",
      0x0000043a => "\x9a",
      0x0000043b => "\x9b",
      0x0000043c => "\x9c",
      0x0000043d => "\x9d",
      0x0000043e => "\x9e",
      0x0000043f => "\x9f",
      0x00000440 => "\xaa",
      0x00000441 => "\xab",
      0x00000442 => "\xac",
      0x00000443 => "\xad",
      0x00000444 => "\x8c",
      0x00000445 => "\x8e",
      0x00000446 => "\x80",
      0x00000447 => "\xb6",
      0x00000448 => "\xb3",
      0x00000449 => "\xb5",
      0x0000044a => "\xb7",
      0x0000044b => "\xb1",
      0x0000044c => "\xb0",
      0x0000044d => "\xb4",
      0x0000044e => "\x76",
      0x0000044f => "\xa0",
      0x00000451 => "\x44",
      0x00000452 => "\x42",
      0x00000453 => "\x43",
      0x00000455 => "\x46",
      0x00000456 => "\x47",
      0x00000457 => "\x48",
      0x00000458 => "\x49",
      0x00000459 => "\x51",
      0x0000045a => "\x52",
      0x0000045b => "\x53",
      0x0000045c => "\x54",
      0x0000045f => "\x56",
      0x00002116 => "\x58",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM880 - Conversion routines for IBM880
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM880.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP880
   alias EBCDIC-CYRILLIC
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      42 |  00000452 | CYRILLIC SMALL LETTER DJE (Serbocroatian)
      43 |  00000453 | CYRILLIC SMALL LETTER GJE
      44 |  00000451 | CYRILLIC SMALL LETTER IO
      46 |  00000455 | CYRILLIC SMALL LETTER DZE
      47 |  00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
      48 |  00000457 | CYRILLIC SMALL LETTER YI (Ukrainian)
      49 |  00000458 | CYRILLIC SMALL LETTER JE
      4A |  0000005B | LEFT SQUARE BRACKET
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      51 |  00000459 | CYRILLIC SMALL LETTER LJE
      52 |  0000045A | CYRILLIC SMALL LETTER NJE
      53 |  0000045B | CYRILLIC SMALL LETTER TSHE (Serbocroatian)
      54 |  0000045C | CYRILLIC SMALL LETTER KJE
      56 |  0000045F | CYRILLIC SMALL LETTER DZHE
      57 |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
      58 |  00002116 | NUMERO SIGN
      59 |  00000402 | CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
      5A |  0000005D | RIGHT SQUARE BRACKET
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  00000403 | CYRILLIC CAPITAL LETTER GJE
      63 |  00000401 | CYRILLIC CAPITAL LETTER IO
      65 |  00000405 | CYRILLIC CAPITAL LETTER DZE
      66 |  00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
      67 |  00000407 | CYRILLIC CAPITAL LETTER YI (Ukrainian)
      68 |  00000408 | CYRILLIC CAPITAL LETTER JE
      69 |  00000409 | CYRILLIC CAPITAL LETTER LJE
      6A |  000000A6 | BROKEN BAR
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  0000040A | CYRILLIC CAPITAL LETTER NJE
      71 |  0000040B | CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
      72 |  0000040C | CYRILLIC CAPITAL LETTER KJE
      75 |  0000040F | CYRILLIC CAPITAL LETTER DZHE
      76 |  0000044E | CYRILLIC SMALL LETTER YU
      77 |  00000430 | CYRILLIC SMALL LETTER A
      78 |  00000431 | CYRILLIC SMALL LETTER BE
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  00000446 | CYRILLIC SMALL LETTER TSE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  00000434 | CYRILLIC SMALL LETTER DE
      8B |  00000435 | CYRILLIC SMALL LETTER IE
      8C |  00000444 | CYRILLIC SMALL LETTER EF
      8D |  00000433 | CYRILLIC SMALL LETTER GHE
      8E |  00000445 | CYRILLIC SMALL LETTER HA
      8F |  00000438 | CYRILLIC SMALL LETTER I
      90 |  00000439 | CYRILLIC SMALL LETTER SHORT I
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  0000043A | CYRILLIC SMALL LETTER KA
      9B |  0000043B | CYRILLIC SMALL LETTER EL
      9C |  0000043C | CYRILLIC SMALL LETTER EM
      9D |  0000043D | CYRILLIC SMALL LETTER EN
      9E |  0000043E | CYRILLIC SMALL LETTER O
      9F |  0000043F | CYRILLIC SMALL LETTER PE
      A0 |  0000044F | CYRILLIC SMALL LETTER YA
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  00000440 | CYRILLIC SMALL LETTER ER
      AB |  00000441 | CYRILLIC SMALL LETTER ES
      AC |  00000442 | CYRILLIC SMALL LETTER TE
      AD |  00000443 | CYRILLIC SMALL LETTER U
      AE |  00000436 | CYRILLIC SMALL LETTER ZHE
      AF |  00000432 | CYRILLIC SMALL LETTER VE
      B0 |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      B1 |  0000044B | CYRILLIC SMALL LETTER YERU
      B2 |  00000437 | CYRILLIC SMALL LETTER ZE
      B3 |  00000448 | CYRILLIC SMALL LETTER SHA
      B4 |  0000044D | CYRILLIC SMALL LETTER E
      B5 |  00000449 | CYRILLIC SMALL LETTER SHCHA
      B6 |  00000447 | CYRILLIC SMALL LETTER CHE
      B7 |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      B8 |  0000042E | CYRILLIC CAPITAL LETTER YU
      B9 |  00000410 | CYRILLIC CAPITAL LETTER A
      BA |  00000411 | CYRILLIC CAPITAL LETTER BE
      BB |  00000426 | CYRILLIC CAPITAL LETTER TSE
      BC |  00000414 | CYRILLIC CAPITAL LETTER DE
      BD |  00000415 | CYRILLIC CAPITAL LETTER IE
      BE |  00000424 | CYRILLIC CAPITAL LETTER EF
      BF |  00000413 | CYRILLIC CAPITAL LETTER GHE
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  00000425 | CYRILLIC CAPITAL LETTER HA
      CB |  00000418 | CYRILLIC CAPITAL LETTER I
      CC |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      CD |  0000041A | CYRILLIC CAPITAL LETTER KA
      CE |  0000041B | CYRILLIC CAPITAL LETTER EL
      CF |  0000041C | CYRILLIC CAPITAL LETTER EM
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  0000041D | CYRILLIC CAPITAL LETTER EN
      DB |  0000041E | CYRILLIC CAPITAL LETTER O
      DC |  0000041F | CYRILLIC CAPITAL LETTER PE
      DD |  0000042F | CYRILLIC CAPITAL LETTER YA
      DE |  00000420 | CYRILLIC CAPITAL LETTER ER
      DF |  00000421 | CYRILLIC CAPITAL LETTER ES
      E0 |  0000005C | REVERSE SOLIDUS
      E1 |  000000A4 | CURRENCY SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  00000422 | CYRILLIC CAPITAL LETTER TE
      EB |  00000423 | CYRILLIC CAPITAL LETTER U
      EC |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      ED |  00000412 | CYRILLIC CAPITAL LETTER VE
      EE |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      EF |  0000042B | CYRILLIC CAPITAL LETTER YERU
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  00000417 | CYRILLIC CAPITAL LETTER ZE
      FB |  00000428 | CYRILLIC CAPITAL LETTER SHA
      FC |  0000042D | CYRILLIC CAPITAL LETTER E
      FD |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      FE |  00000427 | CYRILLIC CAPITAL LETTER CHE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM880

    $main::fatpacked{"Locale/RecodeData/IBM891.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM891';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM891.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM891;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM891 - Conversion routines for IBM891
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM891.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP891
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM891

    $main::fatpacked{"Locale/RecodeData/IBM903.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM903';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM903.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM903;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM903 - Conversion routines for IBM903
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM903.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP903
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM903

    $main::fatpacked{"Locale/RecodeData/IBM904.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM904';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM904.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM904;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00a2,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00ac,
      0x00a6,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\xa2",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xac",
      "\xc2\xa6",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a2 => "\x80",
      0x000000a6 => "\xfe",
      0x000000ac => "\xfd",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM904 - Conversion routines for IBM904
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM904.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP904
   alias 904
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000A2 | CENT SIGN
      FD |  000000AC | NOT SIGN
      FE |  000000A6 | BROKEN BAR
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM904

    $main::fatpacked{"Locale/RecodeData/IBM905.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM905';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM905.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM905;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0xfffd,
      0x00e2,
      0x00e4,
      0x00e0,
      0x00e1,
      0xfffd,
      0x010b,
      0x007b,
      0x00f1,
      0x00c7,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00e8,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00ec,
      0x00df,
      0x011e,
      0x0130,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0x00c2,
      0x00c4,
      0x00c0,
      0x00c1,
      0xfffd,
      0x010a,
      0x005b,
      0x00d1,
      0x015f,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0xfffd,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x0131,
      0x003a,
      0x00d6,
      0x015e,
      0x0027,
      0x003d,
      0x00dc,
      0x02d8,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x0127,
      0x0109,
      0x015d,
      0x016d,
      0xfffd,
      0x007c,
      0x00b0,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0125,
      0x011d,
      0x0135,
      0x02db,
      0xfffd,
      0x00a4,
      0x00b5,
      0x00f6,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x0126,
      0x0108,
      0x015c,
      0x016c,
      0xfffd,
      0x0040,
      0x00b7,
      0x00a3,
      0x017c,
      0x007d,
      0x017b,
      0x00a7,
      0x005d,
      0xfffd,
      0x00bd,
      0x0024,
      0x0124,
      0x011c,
      0x0134,
      0x00a8,
      0x00b4,
      0x00d7,
      0x00e7,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0x00f4,
      0x007e,
      0x00f2,
      0x00f3,
      0x0121,
      0x011f,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0060,
      0x00fb,
      0x005c,
      0x00f9,
      0x00fa,
      0xfffd,
      0x00fc,
      0x00f7,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00b2,
      0x00d4,
      0x0023,
      0x00d2,
      0x00d3,
      0x0120,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x00b3,
      0x00db,
      0x0022,
      0x00d9,
      0x00da,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xef\xbf\xbd",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xef\xbf\xbd",
      "\xc4\x8b",
      "\x7b",
      "\xc3\xb1",
      "\xc3\x87",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xa8",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xac",
      "\xc3\x9f",
      "\xc4\x9e",
      "\xc4\xb0",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xc3\x82",
      "\xc3\x84",
      "\xc3\x80",
      "\xc3\x81",
      "\xef\xbf\xbd",
      "\xc4\x8a",
      "\x5b",
      "\xc3\x91",
      "\xc5\x9f",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xef\xbf\xbd",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\xc4\xb1",
      "\x3a",
      "\xc3\x96",
      "\xc5\x9e",
      "\x27",
      "\x3d",
      "\xc3\x9c",
      "\xcb\x98",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xc4\xa7",
      "\xc4\x89",
      "\xc5\x9d",
      "\xc5\xad",
      "\xef\xbf\xbd",
      "\x7c",
      "\xc2\xb0",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xc4\xa5",
      "\xc4\x9d",
      "\xc4\xb5",
      "\xcb\x9b",
      "\xef\xbf\xbd",
      "\xc2\xa4",
      "\xc2\xb5",
      "\xc3\xb6",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc4\xa6",
      "\xc4\x88",
      "\xc5\x9c",
      "\xc5\xac",
      "\xef\xbf\xbd",
      "\x40",
      "\xc2\xb7",
      "\xc2\xa3",
      "\xc5\xbc",
      "\x7d",
      "\xc5\xbb",
      "\xc2\xa7",
      "\x5d",
      "\xef\xbf\xbd",
      "\xc2\xbd",
      "\x24",
      "\xc4\xa4",
      "\xc4\x9c",
      "\xc4\xb4",
      "\xc2\xa8",
      "\xc2\xb4",
      "\xc3\x97",
      "\xc3\xa7",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xc3\xb4",
      "\x7e",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc4\xa1",
      "\xc4\x9f",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x60",
      "\xc3\xbb",
      "\x5c",
      "\xc3\xb9",
      "\xc3\xba",
      "\xef\xbf\xbd",
      "\xc3\xbc",
      "\xc3\xb7",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc2\xb2",
      "\xc3\x94",
      "\x23",
      "\xc3\x92",
      "\xc3\x93",
      "\xc4\xa0",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xc2\xb3",
      "\xc3\x9b",
      "\x22",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\xfc",
      0x00000023 => "\xec",
      0x00000024 => "\xb9",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\xaf",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x68",
      0x0000005c => "\xdc",
      0x0000005d => "\xb6",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\xda",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\x48",
      0x0000007c => "\x8f",
      0x0000007d => "\xb3",
      0x0000007e => "\xcc",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a3 => "\xb1",
      0x000000a4 => "\x9f",
      0x000000a7 => "\xb5",
      0x000000a8 => "\xbd",
      0x000000ad => "\xca",
      0x000000b0 => "\x90",
      0x000000b2 => "\xea",
      0x000000b3 => "\xfa",
      0x000000b4 => "\xbe",
      0x000000b5 => "\xa0",
      0x000000b7 => "\xb0",
      0x000000bd => "\xb8",
      0x000000c0 => "\x64",
      0x000000c1 => "\x65",
      0x000000c2 => "\x62",
      0x000000c4 => "\x63",
      0x000000c7 => "\x4a",
      0x000000c8 => "\x74",
      0x000000c9 => "\x71",
      0x000000ca => "\x72",
      0x000000cb => "\x73",
      0x000000cc => "\x78",
      0x000000cd => "\x75",
      0x000000ce => "\x76",
      0x000000cf => "\x77",
      0x000000d1 => "\x69",
      0x000000d2 => "\xed",
      0x000000d3 => "\xee",
      0x000000d4 => "\xeb",
      0x000000d6 => "\x7b",
      0x000000d7 => "\xbf",
      0x000000d9 => "\xfd",
      0x000000da => "\xfe",
      0x000000db => "\xfb",
      0x000000dc => "\x7f",
      0x000000df => "\x59",
      0x000000e0 => "\x44",
      0x000000e1 => "\x45",
      0x000000e2 => "\x42",
      0x000000e4 => "\x43",
      0x000000e7 => "\xc0",
      0x000000e8 => "\x54",
      0x000000e9 => "\x51",
      0x000000ea => "\x52",
      0x000000eb => "\x53",
      0x000000ec => "\x58",
      0x000000ed => "\x55",
      0x000000ee => "\x56",
      0x000000ef => "\x57",
      0x000000f1 => "\x49",
      0x000000f2 => "\xcd",
      0x000000f3 => "\xce",
      0x000000f4 => "\xcb",
      0x000000f6 => "\xa1",
      0x000000f7 => "\xe1",
      0x000000f9 => "\xdd",
      0x000000fa => "\xde",
      0x000000fb => "\xdb",
      0x000000fc => "\xe0",
      0x00000108 => "\xab",
      0x00000109 => "\x8b",
      0x0000010a => "\x67",
      0x0000010b => "\x47",
      0x0000011c => "\xbb",
      0x0000011d => "\x9b",
      0x0000011e => "\x5a",
      0x0000011f => "\xd0",
      0x00000120 => "\xef",
      0x00000121 => "\xcf",
      0x00000124 => "\xba",
      0x00000125 => "\x9a",
      0x00000126 => "\xaa",
      0x00000127 => "\x8a",
      0x00000130 => "\x5b",
      0x00000131 => "\x79",
      0x00000134 => "\xbc",
      0x00000135 => "\x9c",
      0x0000015c => "\xac",
      0x0000015d => "\x8c",
      0x0000015e => "\x7c",
      0x0000015f => "\x6a",
      0x0000016c => "\xad",
      0x0000016d => "\x8d",
      0x0000017b => "\xb4",
      0x0000017c => "\xb2",
      0x000002d8 => "\x80",
      0x000002db => "\x9d",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM905 - Conversion routines for IBM905
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM905.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM 3174 Character Set Ref, GA27-3831-02, March 1990
   alias CP905
   alias EBCDIC-CP-TR
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      42 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      43 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      44 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      45 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      47 |  0000010B | LATIN SMALL LETTER C WITH DOT ABOVE
      48 |  0000007B | LEFT CURLY BRACKET
      49 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      4A |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      51 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      52 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      53 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      54 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      55 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      56 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      57 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      58 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      59 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      5A |  0000011E | LATIN CAPITAL LETTER G WITH BREVE
      5B |  00000130 | LATIN CAPITAL LETTER I WITH DOT ABOVE
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      63 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      64 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      65 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      67 |  0000010A | LATIN CAPITAL LETTER C WITH DOT ABOVE
      68 |  0000005B | LEFT SQUARE BRACKET
      69 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      6A |  0000015F | LATIN SMALL LETTER S WITH CEDILLA
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      71 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      72 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      73 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      74 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      75 |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      76 |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      77 |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      78 |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      79 |  00000131 | LATIN SMALL LETTER DOTLESS I
      7A |  0000003A | COLON
      7B |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      7C |  0000015E | LATIN CAPITAL LETTER S WITH CEDILLA
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      80 |  000002D8 | BREVE
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  00000127 | LATIN SMALL LETTER H WITH STROKE
      8B |  00000109 | LATIN SMALL LETTER C WITH CIRCUMFLEX
      8C |  0000015D | LATIN SMALL LETTER S WITH CIRCUMFLEX
      8D |  0000016D | LATIN SMALL LETTER U WITH BREVE
      8F |  0000007C | VERTICAL LINE
      90 |  000000B0 | DEGREE SIGN
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  00000125 | LATIN SMALL LETTER H WITH CIRCUMFLEX
      9B |  0000011D | LATIN SMALL LETTER G WITH CIRCUMFLEX
      9C |  00000135 | LATIN SMALL LETTER J WITH CIRCUMFLEX
      9D |  000002DB | OGONEK
      9F |  000000A4 | CURRENCY SIGN
      A0 |  000000B5 | MICRO SIGN
      A1 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  00000126 | LATIN CAPITAL LETTER H WITH STROKE
      AB |  00000108 | LATIN CAPITAL LETTER C WITH CIRCUMFLEX
      AC |  0000015C | LATIN CAPITAL LETTER S WITH CIRCUMFLEX
      AD |  0000016C | LATIN CAPITAL LETTER U WITH BREVE
      AF |  00000040 | COMMERCIAL AT
      B0 |  000000B7 | MIDDLE DOT
      B1 |  000000A3 | POUND SIGN
      B2 |  0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE
      B3 |  0000007D | RIGHT CURLY BRACKET
      B4 |  0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE
      B5 |  000000A7 | SECTION SIGN
      B6 |  0000005D | RIGHT SQUARE BRACKET
      B8 |  000000BD | VULGAR FRACTION ONE HALF
      B9 |  00000024 | DOLLAR SIGN
      BA |  00000124 | LATIN CAPITAL LETTER H WITH CIRCUMFLEX
      BB |  0000011C | LATIN CAPITAL LETTER G WITH CIRCUMFLEX
      BC |  00000134 | LATIN CAPITAL LETTER J WITH CIRCUMFLEX
      BD |  000000A8 | DIAERESIS
      BE |  000000B4 | ACUTE ACCENT
      BF |  000000D7 | MULTIPLICATION SIGN
      C0 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CB |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      CC |  0000007E | TILDE
      CD |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      CE |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      CF |  00000121 | LATIN SMALL LETTER G WITH DOT ABOVE
      D0 |  0000011F | LATIN SMALL LETTER G WITH BREVE
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  00000060 | GRAVE ACCENT
      DB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      DC |  0000005C | REVERSE SOLIDUS
      DD |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      DE |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      E0 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      E1 |  000000F7 | DIVISION SIGN
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  000000B2 | SUPERSCRIPT TWO
      EB |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      EC |  00000023 | NUMBER SIGN
      ED |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  00000120 | LATIN CAPITAL LETTER G WITH DOT ABOVE
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FA |  000000B3 | SUPERSCRIPT THREE
      FB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      FC |  00000022 | QUOTATION MARK
      FD |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      FE |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM905

    $main::fatpacked{"Locale/RecodeData/IBM918.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IBM918';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IBM918.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IBM918;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x009c,
      0x0009,
      0x0086,
      0x007f,
      0x0097,
      0x008d,
      0x008e,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x009d,
      0x0085,
      0x0008,
      0x0087,
      0x0018,
      0x0019,
      0x0092,
      0x008f,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x000a,
      0x0017,
      0x001b,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x0005,
      0x0006,
      0x0007,
      0x0090,
      0x0091,
      0x0016,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0004,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x0014,
      0x0015,
      0x009e,
      0x001a,
      0x0020,
      0x00a0,
      0x060c,
      0x061b,
      0x061f,
      0x0623,
      0x0627,
      0xfe8e,
      0xfffd,
      0x0628,
      0x005b,
      0x002e,
      0x003c,
      0x0028,
      0x002b,
      0x0021,
      0x0026,
      0xfe91,
      0x067e,
      0xfffd,
      0x0629,
      0x062a,
      0xfe97,
      0xfffd,
      0xfffd,
      0x062b,
      0x005d,
      0x0024,
      0x002a,
      0x0029,
      0x003b,
      0x005e,
      0x002d,
      0x002f,
      0xfe9b,
      0x062c,
      0xfe9f,
      0xfffd,
      0xfffd,
      0x062d,
      0xfea3,
      0x062e,
      0x0060,
      0x002c,
      0x0025,
      0x005f,
      0x003e,
      0x003f,
      0x0660,
      0x0661,
      0x0662,
      0x0663,
      0x0664,
      0x0665,
      0x0666,
      0x0667,
      0x0668,
      0x0669,
      0x003a,
      0x0023,
      0x0040,
      0x0027,
      0x003d,
      0x0022,
      0xfea7,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x062f,
      0xfffd,
      0x0630,
      0x0631,
      0xfffd,
      0x0632,
      0xfffd,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0633,
      0xfeb3,
      0x0634,
      0xfeb7,
      0x0635,
      0xfebb,
      0x0636,
      0x007e,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfebf,
      0x0637,
      0x0638,
      0x0639,
      0xfeca,
      0xfecb,
      0xfecc,
      0x063a,
      0xfece,
      0xfecf,
      0xfed0,
      0x0641,
      0xfed3,
      0x0642,
      0xfed7,
      0x0643,
      0xfedb,
      0x007c,
      0xfffd,
      0xfffd,
      0x0644,
      0xfede,
      0x007b,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x00ad,
      0xfffd,
      0x0645,
      0xfee3,
      0xfffd,
      0x0646,
      0x007d,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0xfee7,
      0xfffd,
      0x0648,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005c,
      0xfffd,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x0621,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0651,
      0xfe7d,
      0x009f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\xc2\x9c",
      "\x09",
      "\xc2\x86",
      "\x7f",
      "\xc2\x97",
      "\xc2\x8d",
      "\xc2\x8e",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xc2\x9d",
      "\xc2\x85",
      "\x08",
      "\xc2\x87",
      "\x18",
      "\x19",
      "\xc2\x92",
      "\xc2\x8f",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\x0a",
      "\x17",
      "\x1b",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\x05",
      "\x06",
      "\x07",
      "\xc2\x90",
      "\xc2\x91",
      "\x16",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\x04",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\x14",
      "\x15",
      "\xc2\x9e",
      "\x1a",
      "\x20",
      "\xc2\xa0",
      "\xd8\x8c",
      "\xd8\x9b",
      "\xd8\x9f",
      "\xd8\xa3",
      "\xd8\xa7",
      "\xef\xba\x8e",
      "\xef\xbf\xbd",
      "\xd8\xa8",
      "\x5b",
      "\x2e",
      "\x3c",
      "\x28",
      "\x2b",
      "\x21",
      "\x26",
      "\xef\xba\x91",
      "\xd9\xbe",
      "\xef\xbf\xbd",
      "\xd8\xa9",
      "\xd8\xaa",
      "\xef\xba\x97",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd8\xab",
      "\x5d",
      "\x24",
      "\x2a",
      "\x29",
      "\x3b",
      "\x5e",
      "\x2d",
      "\x2f",
      "\xef\xba\x9b",
      "\xd8\xac",
      "\xef\xba\x9f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd8\xad",
      "\xef\xba\xa3",
      "\xd8\xae",
      "\x60",
      "\x2c",
      "\x25",
      "\x5f",
      "\x3e",
      "\x3f",
      "\xd9\xa0",
      "\xd9\xa1",
      "\xd9\xa2",
      "\xd9\xa3",
      "\xd9\xa4",
      "\xd9\xa5",
      "\xd9\xa6",
      "\xd9\xa7",
      "\xd9\xa8",
      "\xd9\xa9",
      "\x3a",
      "\x23",
      "\x40",
      "\x27",
      "\x3d",
      "\x22",
      "\xef\xba\xa7",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\xd8\xaf",
      "\xef\xbf\xbd",
      "\xd8\xb0",
      "\xd8\xb1",
      "\xef\xbf\xbd",
      "\xd8\xb2",
      "\xef\xbf\xbd",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\xd8\xb3",
      "\xef\xba\xb3",
      "\xd8\xb4",
      "\xef\xba\xb7",
      "\xd8\xb5",
      "\xef\xba\xbb",
      "\xd8\xb6",
      "\x7e",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xba\xbf",
      "\xd8\xb7",
      "\xd8\xb8",
      "\xd8\xb9",
      "\xef\xbb\x8a",
      "\xef\xbb\x8b",
      "\xef\xbb\x8c",
      "\xd8\xba",
      "\xef\xbb\x8e",
      "\xef\xbb\x8f",
      "\xef\xbb\x90",
      "\xd9\x81",
      "\xef\xbb\x93",
      "\xd9\x82",
      "\xef\xbb\x97",
      "\xd9\x83",
      "\xef\xbb\x9b",
      "\x7c",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd9\x84",
      "\xef\xbb\x9e",
      "\x7b",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\xc2\xad",
      "\xef\xbf\xbd",
      "\xd9\x85",
      "\xef\xbb\xa3",
      "\xef\xbf\xbd",
      "\xd9\x86",
      "\x7d",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\xef\xbb\xa7",
      "\xef\xbf\xbd",
      "\xd9\x88",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5c",
      "\xef\xbf\xbd",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xd8\xa1",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd9\x91",
      "\xef\xb9\xbd",
      "\xc2\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x37",
      0x00000005 => "\x2d",
      0x00000006 => "\x2e",
      0x00000007 => "\x2f",
      0x00000008 => "\x16",
      0x00000009 => "\x05",
      0x0000000a => "\x25",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x3c",
      0x00000015 => "\x3d",
      0x00000016 => "\x32",
      0x00000017 => "\x26",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x3f",
      0x0000001b => "\x27",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x40",
      0x00000021 => "\x4f",
      0x00000022 => "\x7f",
      0x00000023 => "\x7b",
      0x00000024 => "\x5b",
      0x00000025 => "\x6c",
      0x00000026 => "\x50",
      0x00000027 => "\x7d",
      0x00000028 => "\x4d",
      0x00000029 => "\x5d",
      0x0000002a => "\x5c",
      0x0000002b => "\x4e",
      0x0000002c => "\x6b",
      0x0000002d => "\x60",
      0x0000002e => "\x4b",
      0x0000002f => "\x61",
      0x00000030 => "\xf0",
      0x00000031 => "\xf1",
      0x00000032 => "\xf2",
      0x00000033 => "\xf3",
      0x00000034 => "\xf4",
      0x00000035 => "\xf5",
      0x00000036 => "\xf6",
      0x00000037 => "\xf7",
      0x00000038 => "\xf8",
      0x00000039 => "\xf9",
      0x0000003a => "\x7a",
      0x0000003b => "\x5e",
      0x0000003c => "\x4c",
      0x0000003d => "\x7e",
      0x0000003e => "\x6e",
      0x0000003f => "\x6f",
      0x00000040 => "\x7c",
      0x00000041 => "\xc1",
      0x00000042 => "\xc2",
      0x00000043 => "\xc3",
      0x00000044 => "\xc4",
      0x00000045 => "\xc5",
      0x00000046 => "\xc6",
      0x00000047 => "\xc7",
      0x00000048 => "\xc8",
      0x00000049 => "\xc9",
      0x0000004a => "\xd1",
      0x0000004b => "\xd2",
      0x0000004c => "\xd3",
      0x0000004d => "\xd4",
      0x0000004e => "\xd5",
      0x0000004f => "\xd6",
      0x00000050 => "\xd7",
      0x00000051 => "\xd8",
      0x00000052 => "\xd9",
      0x00000053 => "\xe2",
      0x00000054 => "\xe3",
      0x00000055 => "\xe4",
      0x00000056 => "\xe5",
      0x00000057 => "\xe6",
      0x00000058 => "\xe7",
      0x00000059 => "\xe8",
      0x0000005a => "\xe9",
      0x0000005b => "\x4a",
      0x0000005c => "\xe0",
      0x0000005d => "\x5a",
      0x0000005e => "\x5f",
      0x0000005f => "\x6d",
      0x00000060 => "\x6a",
      0x00000061 => "\x81",
      0x00000062 => "\x82",
      0x00000063 => "\x83",
      0x00000064 => "\x84",
      0x00000065 => "\x85",
      0x00000066 => "\x86",
      0x00000067 => "\x87",
      0x00000068 => "\x88",
      0x00000069 => "\x89",
      0x0000006a => "\x91",
      0x0000006b => "\x92",
      0x0000006c => "\x93",
      0x0000006d => "\x94",
      0x0000006e => "\x95",
      0x0000006f => "\x96",
      0x00000070 => "\x97",
      0x00000071 => "\x98",
      0x00000072 => "\x99",
      0x00000073 => "\xa2",
      0x00000074 => "\xa3",
      0x00000075 => "\xa4",
      0x00000076 => "\xa5",
      0x00000077 => "\xa6",
      0x00000078 => "\xa7",
      0x00000079 => "\xa8",
      0x0000007a => "\xa9",
      0x0000007b => "\xc0",
      0x0000007c => "\xbb",
      0x0000007d => "\xd0",
      0x0000007e => "\xa1",
      0x0000007f => "\x07",
      0x00000080 => "\x20",
      0x00000081 => "\x21",
      0x00000082 => "\x22",
      0x00000083 => "\x23",
      0x00000084 => "\x24",
      0x00000085 => "\x15",
      0x00000086 => "\x06",
      0x00000087 => "\x17",
      0x00000088 => "\x28",
      0x00000089 => "\x29",
      0x0000008a => "\x2a",
      0x0000008b => "\x2b",
      0x0000008c => "\x2c",
      0x0000008d => "\x09",
      0x0000008e => "\x0a",
      0x0000008f => "\x1b",
      0x00000090 => "\x30",
      0x00000091 => "\x31",
      0x00000092 => "\x1a",
      0x00000093 => "\x33",
      0x00000094 => "\x34",
      0x00000095 => "\x35",
      0x00000096 => "\x36",
      0x00000097 => "\x08",
      0x00000098 => "\x38",
      0x00000099 => "\x39",
      0x0000009a => "\x3a",
      0x0000009b => "\x3b",
      0x0000009c => "\x04",
      0x0000009d => "\x14",
      0x0000009e => "\x3e",
      0x0000009f => "\xff",
      0x000000a0 => "\x41",
      0x000000ad => "\xca",
      0x0000060c => "\x42",
      0x0000061b => "\x43",
      0x0000061f => "\x44",
      0x00000621 => "\xea",
      0x00000623 => "\x45",
      0x00000627 => "\x46",
      0x00000628 => "\x49",
      0x00000629 => "\x54",
      0x0000062a => "\x55",
      0x0000062b => "\x59",
      0x0000062c => "\x63",
      0x0000062d => "\x67",
      0x0000062e => "\x69",
      0x0000062f => "\x8a",
      0x00000630 => "\x8c",
      0x00000631 => "\x8d",
      0x00000632 => "\x8f",
      0x00000633 => "\x9a",
      0x00000634 => "\x9c",
      0x00000635 => "\x9e",
      0x00000636 => "\xa0",
      0x00000637 => "\xab",
      0x00000638 => "\xac",
      0x00000639 => "\xad",
      0x0000063a => "\xb1",
      0x00000641 => "\xb5",
      0x00000642 => "\xb7",
      0x00000643 => "\xb9",
      0x00000644 => "\xbe",
      0x00000645 => "\xcc",
      0x00000646 => "\xcf",
      0x00000648 => "\xdc",
      0x00000651 => "\xfd",
      0x00000660 => "\x70",
      0x00000661 => "\x71",
      0x00000662 => "\x72",
      0x00000663 => "\x73",
      0x00000664 => "\x74",
      0x00000665 => "\x75",
      0x00000666 => "\x76",
      0x00000667 => "\x77",
      0x00000668 => "\x78",
      0x00000669 => "\x79",
      0x0000067e => "\x52",
      0x0000fe7d => "\xfe",
      0x0000fe8e => "\x47",
      0x0000fe91 => "\x51",
      0x0000fe97 => "\x56",
      0x0000fe9b => "\x62",
      0x0000fe9f => "\x64",
      0x0000fea3 => "\x68",
      0x0000fea7 => "\x80",
      0x0000feb3 => "\x9b",
      0x0000feb7 => "\x9d",
      0x0000febb => "\x9f",
      0x0000febf => "\xaa",
      0x0000feca => "\xae",
      0x0000fecb => "\xaf",
      0x0000fecc => "\xb0",
      0x0000fece => "\xb2",
      0x0000fecf => "\xb3",
      0x0000fed0 => "\xb4",
      0x0000fed3 => "\xb6",
      0x0000fed7 => "\xb8",
      0x0000fedb => "\xba",
      0x0000fede => "\xbf",
      0x0000fee3 => "\xcd",
      0x0000fee7 => "\xda",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x6f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IBM918 - Conversion routines for IBM918
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IBM918.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: IBM NLS RM Vol2 SE09-8002-01, March 1990
   alias CP918
   alias EBCDIC-CP-AR2
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  0000009C | STRING TERMINATOR (ST)
      05 |  00000009 | CHARACTER TABULATION (HT)
      06 |  00000086 | START OF SELECTED AREA (SSA)
      07 |  0000007F | DELETE (DEL)
      08 |  00000097 | END OF GUARDED AREA (EPA)
      09 |  0000008D | REVERSE LINE FEED (RI)
      0A |  0000008E | SINGLE-SHIFT TWO (SS2)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      15 |  00000085 | NEXT LINE (NEL)
      16 |  00000008 | BACKSPACE (BS)
      17 |  00000087 | END OF SELECTED AREA (ESA)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  00000092 | PRIVATE USE TWO (PU2)
      1B |  0000008F | SINGLE-SHIFT THREE (SS3)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000080 | PADDING CHARACTER (PAD)
      21 |  00000081 | HIGH OCTET PRESET (HOP)
      22 |  00000082 | BREAK PERMITTED HERE (BPH)
      23 |  00000083 | NO BREAK HERE (NBH)
      24 |  00000084 | INDEX (IND)
      25 |  0000000A | LINE FEED (LF)
      26 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      27 |  0000001B | ESCAPE (ESC)
      28 |  00000088 | CHARACTER TABULATION SET (HTS)
      29 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      2A |  0000008A | LINE TABULATION SET (VTS)
      2B |  0000008B | PARTIAL LINE FORWARD (PLD)
      2C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      2D |  00000005 | ENQUIRY (ENQ)
      2E |  00000006 | ACKNOWLEDGE (ACK)
      2F |  00000007 | BELL (BEL)
      30 |  00000090 | DEVICE CONTROL STRING (DCS)
      31 |  00000091 | PRIVATE USE ONE (PU1)
      32 |  00000016 | SYNCHRONOUS IDLE (SYN)
      33 |  00000093 | SET TRANSMIT STATE (STS)
      34 |  00000094 | CANCEL CHARACTER (CCH)
      35 |  00000095 | MESSAGE WAITING (MW)
      36 |  00000096 | START OF GUARDED AREA (SPA)
      37 |  00000004 | END OF TRANSMISSION (EOT)
      38 |  00000098 | START OF STRING (SOS)
      39 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      3A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      3B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      3C |  00000014 | DEVICE CONTROL FOUR (DC4)
      3D |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      3E |  0000009E | PRIVACY MESSAGE (PM)
      3F |  0000001A | SUBSTITUTE (SUB)
      40 |  00000020 | SPACE
      41 |  000000A0 | NO-BREAK SPACE
      42 |  0000060C | ARABIC COMMA
      43 |  0000061B | ARABIC SEMICOLON
      44 |  0000061F | ARABIC QUESTION MARK
      45 |  00000623 | ARABIC LETTER ALEF WITH HAMZA ABOVE
      46 |  00000627 | ARABIC LETTER ALEF
      47 |  0000FE8E | ARABIC LETTER ALEF FINAL FORM
      49 |  00000628 | ARABIC LETTER BEH
      4A |  0000005B | LEFT SQUARE BRACKET
      4B |  0000002E | FULL STOP
      4C |  0000003C | LESS-THAN SIGN
      4D |  00000028 | LEFT PARENTHESIS
      4E |  0000002B | PLUS SIGN
      4F |  00000021 | EXCLAMATION MARK
      50 |  00000026 | AMPERSAND
      51 |  0000FE91 | ARABIC LETTER BEH INITIAL FORM
      52 |  0000067E | ARABIC LETTER PEH
      54 |  00000629 | ARABIC LETTER TEH MARBUTA
      55 |  0000062A | ARABIC LETTER TEH
      56 |  0000FE97 | ARABIC LETTER TEH INITIAL FORM
      59 |  0000062B | ARABIC LETTER THEH
      5A |  0000005D | RIGHT SQUARE BRACKET
      5B |  00000024 | DOLLAR SIGN
      5C |  0000002A | ASTERISK
      5D |  00000029 | RIGHT PARENTHESIS
      5E |  0000003B | SEMICOLON
      5F |  0000005E | CIRCUMFLEX ACCENT
      60 |  0000002D | HYPHEN-MINUS
      61 |  0000002F | SOLIDUS
      62 |  0000FE9B | ARABIC LETTER THEH INITIAL FORM
      63 |  0000062C | ARABIC LETTER JEEM
      64 |  0000FE9F | ARABIC LETTER JEEM INITIAL FORM
      67 |  0000062D | ARABIC LETTER HAH
      68 |  0000FEA3 | ARABIC LETTER HAH INITIAL FORM
      69 |  0000062E | ARABIC LETTER KHAH
      6A |  00000060 | GRAVE ACCENT
      6B |  0000002C | COMMA
      6C |  00000025 | PERCENT SIGN
      6D |  0000005F | LOW LINE
      6E |  0000003E | GREATER-THAN SIGN
      6F |  0000003F | QUESTION MARK
      70 |  00000660 | ARABIC-INDIC DIGIT ZERO
      71 |  00000661 | ARABIC-INDIC DIGIT ONE
      72 |  00000662 | ARABIC-INDIC DIGIT TWO
      73 |  00000663 | ARABIC-INDIC DIGIT THREE
      74 |  00000664 | ARABIC-INDIC DIGIT FOUR
      75 |  00000665 | ARABIC-INDIC DIGIT FIVE
      76 |  00000666 | ARABIC-INDIC DIGIT SIX
      77 |  00000667 | ARABIC-INDIC DIGIT SEVEN
      78 |  00000668 | ARABIC-INDIC DIGIT EIGHT
      79 |  00000669 | ARABIC-INDIC DIGIT NINE
      7A |  0000003A | COLON
      7B |  00000023 | NUMBER SIGN
      7C |  00000040 | COMMERCIAL AT
      7D |  00000027 | APOSTROPHE
      7E |  0000003D | EQUALS SIGN
      7F |  00000022 | QUOTATION MARK
      80 |  0000FEA7 | ARABIC LETTER KHAH INITIAL FORM
      81 |  00000061 | LATIN SMALL LETTER A
      82 |  00000062 | LATIN SMALL LETTER B
      83 |  00000063 | LATIN SMALL LETTER C
      84 |  00000064 | LATIN SMALL LETTER D
      85 |  00000065 | LATIN SMALL LETTER E
      86 |  00000066 | LATIN SMALL LETTER F
      87 |  00000067 | LATIN SMALL LETTER G
      88 |  00000068 | LATIN SMALL LETTER H
      89 |  00000069 | LATIN SMALL LETTER I
      8A |  0000062F | ARABIC LETTER DAL
      8C |  00000630 | ARABIC LETTER THAL
      8D |  00000631 | ARABIC LETTER REH
      8F |  00000632 | ARABIC LETTER ZAIN
      91 |  0000006A | LATIN SMALL LETTER J
      92 |  0000006B | LATIN SMALL LETTER K
      93 |  0000006C | LATIN SMALL LETTER L
      94 |  0000006D | LATIN SMALL LETTER M
      95 |  0000006E | LATIN SMALL LETTER N
      96 |  0000006F | LATIN SMALL LETTER O
      97 |  00000070 | LATIN SMALL LETTER P
      98 |  00000071 | LATIN SMALL LETTER Q
      99 |  00000072 | LATIN SMALL LETTER R
      9A |  00000633 | ARABIC LETTER SEEN
      9B |  0000FEB3 | ARABIC LETTER SEEN INITIAL FORM
      9C |  00000634 | ARABIC LETTER SHEEN
      9D |  0000FEB7 | ARABIC LETTER SHEEN INITIAL FORM
      9E |  00000635 | ARABIC LETTER SAD
      9F |  0000FEBB | ARABIC LETTER SAD INITIAL FORM
      A0 |  00000636 | ARABIC LETTER DAD
      A1 |  0000007E | TILDE
      A2 |  00000073 | LATIN SMALL LETTER S
      A3 |  00000074 | LATIN SMALL LETTER T
      A4 |  00000075 | LATIN SMALL LETTER U
      A5 |  00000076 | LATIN SMALL LETTER V
      A6 |  00000077 | LATIN SMALL LETTER W
      A7 |  00000078 | LATIN SMALL LETTER X
      A8 |  00000079 | LATIN SMALL LETTER Y
      A9 |  0000007A | LATIN SMALL LETTER Z
      AA |  0000FEBF | ARABIC LETTER DAD INITIAL FORM
      AB |  00000637 | ARABIC LETTER TAH
      AC |  00000638 | ARABIC LETTER ZAH
      AD |  00000639 | ARABIC LETTER AIN
      AE |  0000FECA | ARABIC LETTER AIN FINAL FORM
      AF |  0000FECB | ARABIC LETTER AIN INITIAL FORM
      B0 |  0000FECC | ARABIC LETTER AIN MEDIAL FORM
      B1 |  0000063A | ARABIC LETTER GHAIN
      B2 |  0000FECE | ARABIC LETTER GHAIN FINAL FORM
      B3 |  0000FECF | ARABIC LETTER GHAIN INITIAL FORM
      B4 |  0000FED0 | ARABIC LETTER GHAIN MEDIAL FORM
      B5 |  00000641 | ARABIC LETTER FEH
      B6 |  0000FED3 | ARABIC LETTER FEH INITIAL FORM
      B7 |  00000642 | ARABIC LETTER QAF
      B8 |  0000FED7 | ARABIC LETTER QAF INITIAL FORM
      B9 |  00000643 | ARABIC LETTER KAF
      BA |  0000FEDB | ARABIC LETTER KAF INITIAL FORM
      BB |  0000007C | VERTICAL LINE
      BE |  00000644 | ARABIC LETTER LAM
      BF |  0000FEDE | ARABIC LETTER LAM FINAL FORM
      C0 |  0000007B | LEFT CURLY BRACKET
      C1 |  00000041 | LATIN CAPITAL LETTER A
      C2 |  00000042 | LATIN CAPITAL LETTER B
      C3 |  00000043 | LATIN CAPITAL LETTER C
      C4 |  00000044 | LATIN CAPITAL LETTER D
      C5 |  00000045 | LATIN CAPITAL LETTER E
      C6 |  00000046 | LATIN CAPITAL LETTER F
      C7 |  00000047 | LATIN CAPITAL LETTER G
      C8 |  00000048 | LATIN CAPITAL LETTER H
      C9 |  00000049 | LATIN CAPITAL LETTER I
      CA |  000000AD | SOFT HYPHEN
      CC |  00000645 | ARABIC LETTER MEEM
      CD |  0000FEE3 | ARABIC LETTER MEEM INITIAL FORM
      CF |  00000646 | ARABIC LETTER NOON
      D0 |  0000007D | RIGHT CURLY BRACKET
      D1 |  0000004A | LATIN CAPITAL LETTER J
      D2 |  0000004B | LATIN CAPITAL LETTER K
      D3 |  0000004C | LATIN CAPITAL LETTER L
      D4 |  0000004D | LATIN CAPITAL LETTER M
      D5 |  0000004E | LATIN CAPITAL LETTER N
      D6 |  0000004F | LATIN CAPITAL LETTER O
      D7 |  00000050 | LATIN CAPITAL LETTER P
      D8 |  00000051 | LATIN CAPITAL LETTER Q
      D9 |  00000052 | LATIN CAPITAL LETTER R
      DA |  0000FEE7 | ARABIC LETTER NOON INITIAL FORM
      DC |  00000648 | ARABIC LETTER WAW
      E0 |  0000005C | REVERSE SOLIDUS
      E2 |  00000053 | LATIN CAPITAL LETTER S
      E3 |  00000054 | LATIN CAPITAL LETTER T
      E4 |  00000055 | LATIN CAPITAL LETTER U
      E5 |  00000056 | LATIN CAPITAL LETTER V
      E6 |  00000057 | LATIN CAPITAL LETTER W
      E7 |  00000058 | LATIN CAPITAL LETTER X
      E8 |  00000059 | LATIN CAPITAL LETTER Y
      E9 |  0000005A | LATIN CAPITAL LETTER Z
      EA |  00000621 | ARABIC LETTER HAMZA
      F0 |  00000030 | DIGIT ZERO
      F1 |  00000031 | DIGIT ONE
      F2 |  00000032 | DIGIT TWO
      F3 |  00000033 | DIGIT THREE
      F4 |  00000034 | DIGIT FOUR
      F5 |  00000035 | DIGIT FIVE
      F6 |  00000036 | DIGIT SIX
      F7 |  00000037 | DIGIT SEVEN
      F8 |  00000038 | DIGIT EIGHT
      F9 |  00000039 | DIGIT NINE
      FD |  00000651 | ARABIC SHADDA
      FE |  0000FE7D | ARABIC SHADDA MEDIAL FORM
      FF |  0000009F | APPLICATION PROGRAM COMMAND (APC)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IBM918

    $main::fatpacked{"Locale/RecodeData/IEC_P27_1.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_IEC_P27_1';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for IEC_P27-1.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::IEC_P27_1;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x02c7,
      0x2261,
      0x2227,
      0x2228,
      0x2229,
      0x222a,
      0x2282,
      0x2283,
      0x21d0,
      0x21d2,
      0x2234,
      0x2235,
      0x2208,
      0x220b,
      0x2286,
      0x2287,
      0x222b,
      0x222e,
      0x221e,
      0x2207,
      0x2202,
      0x223c,
      0x2248,
      0x2243,
      0x2245,
      0x2264,
      0x2260,
      0x2265,
      0x2194,
      0x00ac,
      0x2200,
      0x2203,
      0x05d0,
      0x25a1,
      0x2225,
      0x0393,
      0x0394,
      0x22a5,
      0x2220,
      0x221f,
      0x0398,
      0x2329,
      0x232a,
      0x039b,
      0x2032,
      0x2033,
      0x039e,
      0x2213,
      0x03a0,
      0x00b2,
      0x03a3,
      0x00d7,
      0x00b3,
      0x03a5,
      0x03a6,
      0x00b7,
      0x03a8,
      0x03a9,
      0x2205,
      0x21c0,
      0x221a,
      0x0192,
      0x221d,
      0x00b1,
      0x00b0,
      0x03b1,
      0x03b2,
      0x03b3,
      0x03b4,
      0x03b5,
      0x03b6,
      0x03b7,
      0x03b8,
      0x03b9,
      0x03ba,
      0x03bb,
      0x03bc,
      0x03bd,
      0x03be,
      0x2030,
      0x03c0,
      0x03c1,
      0x03c3,
      0x00f7,
      0x03c4,
      0x03c5,
      0x03c6,
      0x03c7,
      0x03c8,
      0x03c9,
      0x2020,
      0x2190,
      0x2191,
      0x2192,
      0x2193,
      0x203e,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xcb\x87",
      "\xe2\x89\xa1",
      "\xe2\x88\xa7",
      "\xe2\x88\xa8",
      "\xe2\x88\xa9",
      "\xe2\x88\xaa",
      "\xe2\x8a\x82",
      "\xe2\x8a\x83",
      "\xe2\x87\x90",
      "\xe2\x87\x92",
      "\xe2\x88\xb4",
      "\xe2\x88\xb5",
      "\xe2\x88\x88",
      "\xe2\x88\x8b",
      "\xe2\x8a\x86",
      "\xe2\x8a\x87",
      "\xe2\x88\xab",
      "\xe2\x88\xae",
      "\xe2\x88\x9e",
      "\xe2\x88\x87",
      "\xe2\x88\x82",
      "\xe2\x88\xbc",
      "\xe2\x89\x88",
      "\xe2\x89\x83",
      "\xe2\x89\x85",
      "\xe2\x89\xa4",
      "\xe2\x89\xa0",
      "\xe2\x89\xa5",
      "\xe2\x86\x94",
      "\xc2\xac",
      "\xe2\x88\x80",
      "\xe2\x88\x83",
      "\xd7\x90",
      "\xe2\x96\xa1",
      "\xe2\x88\xa5",
      "\xce\x93",
      "\xce\x94",
      "\xe2\x8a\xa5",
      "\xe2\x88\xa0",
      "\xe2\x88\x9f",
      "\xce\x98",
      "\xe2\x8c\xa9",
      "\xe2\x8c\xaa",
      "\xce\x9b",
      "\xe2\x80\xb2",
      "\xe2\x80\xb3",
      "\xce\x9e",
      "\xe2\x88\x93",
      "\xce\xa0",
      "\xc2\xb2",
      "\xce\xa3",
      "\xc3\x97",
      "\xc2\xb3",
      "\xce\xa5",
      "\xce\xa6",
      "\xc2\xb7",
      "\xce\xa8",
      "\xce\xa9",
      "\xe2\x88\x85",
      "\xe2\x87\x80",
      "\xe2\x88\x9a",
      "\xc6\x92",
      "\xe2\x88\x9d",
      "\xc2\xb1",
      "\xc2\xb0",
      "\xce\xb1",
      "\xce\xb2",
      "\xce\xb3",
      "\xce\xb4",
      "\xce\xb5",
      "\xce\xb6",
      "\xce\xb7",
      "\xce\xb8",
      "\xce\xb9",
      "\xce\xba",
      "\xce\xbb",
      "\xce\xbc",
      "\xce\xbd",
      "\xce\xbe",
      "\xe2\x80\xb0",
      "\xcf\x80",
      "\xcf\x81",
      "\xcf\x83",
      "\xc3\xb7",
      "\xcf\x84",
      "\xcf\x85",
      "\xcf\x86",
      "\xcf\x87",
      "\xcf\x88",
      "\xcf\x89",
      "\xe2\x80\xa0",
      "\xe2\x86\x90",
      "\xe2\x86\x91",
      "\xe2\x86\x92",
      "\xe2\x86\x93",
      "\xe2\x80\xbe",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000ac => "\xbd",
      0x000000b0 => "\xe0",
      0x000000b1 => "\xdf",
      0x000000b2 => "\xd1",
      0x000000b3 => "\xd4",
      0x000000b7 => "\xd7",
      0x000000d7 => "\xd3",
      0x000000f7 => "\xf3",
      0x00000192 => "\xdd",
      0x000002c7 => "\xa0",
      0x00000393 => "\xc3",
      0x00000394 => "\xc4",
      0x00000398 => "\xc8",
      0x0000039b => "\xcb",
      0x0000039e => "\xce",
      0x000003a0 => "\xd0",
      0x000003a3 => "\xd2",
      0x000003a5 => "\xd5",
      0x000003a6 => "\xd6",
      0x000003a8 => "\xd8",
      0x000003a9 => "\xd9",
      0x000003b1 => "\xe1",
      0x000003b2 => "\xe2",
      0x000003b3 => "\xe3",
      0x000003b4 => "\xe4",
      0x000003b5 => "\xe5",
      0x000003b6 => "\xe6",
      0x000003b7 => "\xe7",
      0x000003b8 => "\xe8",
      0x000003b9 => "\xe9",
      0x000003ba => "\xea",
      0x000003bb => "\xeb",
      0x000003bc => "\xec",
      0x000003bd => "\xed",
      0x000003be => "\xee",
      0x000003c0 => "\xf0",
      0x000003c1 => "\xf1",
      0x000003c3 => "\xf2",
      0x000003c4 => "\xf4",
      0x000003c5 => "\xf5",
      0x000003c6 => "\xf6",
      0x000003c7 => "\xf7",
      0x000003c8 => "\xf8",
      0x000003c9 => "\xf9",
      0x000005d0 => "\xc0",
      0x00002020 => "\xfa",
      0x00002030 => "\xef",
      0x00002032 => "\xcc",
      0x00002033 => "\xcd",
      0x0000203e => "\xff",
      0x00002190 => "\xfb",
      0x00002191 => "\xfc",
      0x00002192 => "\xfd",
      0x00002193 => "\xfe",
      0x00002194 => "\xbc",
      0x000021c0 => "\xdb",
      0x000021d0 => "\xa8",
      0x000021d2 => "\xa9",
      0x00002200 => "\xbe",
      0x00002202 => "\xb4",
      0x00002203 => "\xbf",
      0x00002205 => "\xda",
      0x00002207 => "\xb3",
      0x00002208 => "\xac",
      0x0000220b => "\xad",
      0x00002213 => "\xcf",
      0x0000221a => "\xdc",
      0x0000221d => "\xde",
      0x0000221e => "\xb2",
      0x0000221f => "\xc7",
      0x00002220 => "\xc6",
      0x00002225 => "\xc2",
      0x00002227 => "\xa2",
      0x00002228 => "\xa3",
      0x00002229 => "\xa4",
      0x0000222a => "\xa5",
      0x0000222b => "\xb0",
      0x0000222e => "\xb1",
      0x00002234 => "\xaa",
      0x00002235 => "\xab",
      0x0000223c => "\xb5",
      0x00002243 => "\xb7",
      0x00002245 => "\xb8",
      0x00002248 => "\xb6",
      0x00002260 => "\xba",
      0x00002261 => "\xa1",
      0x00002264 => "\xb9",
      0x00002265 => "\xbb",
      0x00002282 => "\xa6",
      0x00002283 => "\xa7",
      0x00002286 => "\xae",
      0x00002287 => "\xaf",
      0x000022a5 => "\xc5",
      0x00002329 => "\xc9",
      0x0000232a => "\xca",
      0x000025a1 => "\xc1",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::IEC_P27_1 - Conversion routines for IEC_P27_1
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for IEC_P27-1.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-143
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000002C7 | CARON (Mandarin Chinese third tone)
      A1 |  00002261 | IDENTICAL TO
      A2 |  00002227 | LOGICAL AND
      A3 |  00002228 | LOGICAL OR
      A4 |  00002229 | INTERSECTION
      A5 |  0000222A | UNION
      A6 |  00002282 | SUBSET OF
      A7 |  00002283 | SUPERSET OF
      A8 |  000021D0 | LEFTWARDS DOUBLE ARROW
      A9 |  000021D2 | RIGHTWARDS DOUBLE ARROW
      AA |  00002234 | THEREFORE
      AB |  00002235 | BECAUSE
      AC |  00002208 | ELEMENT OF
      AD |  0000220B | CONTAINS AS MEMBER
      AE |  00002286 | SUBSET OF OR EQUAL TO
      AF |  00002287 | SUPERSET OF OR EQUAL TO
      B0 |  0000222B | INTEGRAL
      B1 |  0000222E | CONTOUR INTEGRAL
      B2 |  0000221E | INFINITY
      B3 |  00002207 | NABLA
      B4 |  00002202 | PARTIAL DIFFERENTIAL
      B5 |  0000223C | TILDE OPERATOR
      B6 |  00002248 | ALMOST EQUAL TO
      B7 |  00002243 | ASYMPTOTICALLY EQUAL TO
      B8 |  00002245 | APPROXIMATELY EQUAL TO
      B9 |  00002264 | LESS-THAN OR EQUAL TO
      BA |  00002260 | NOT EQUAL TO
      BB |  00002265 | GREATER-THAN OR EQUAL TO
      BC |  00002194 | LEFT RIGHT ARROW
      BD |  000000AC | NOT SIGN
      BE |  00002200 | FOR ALL
      BF |  00002203 | THERE EXISTS
      C0 |  000005D0 | HEBREW LETTER ALEF
      C1 |  000025A1 | WHITE SQUARE
      C2 |  00002225 | PARALLEL TO
      C3 |  00000393 | GREEK CAPITAL LETTER GAMMA
      C4 |  00000394 | GREEK CAPITAL LETTER DELTA
      C5 |  000022A5 | UP TACK
      C6 |  00002220 | ANGLE
      C7 |  0000221F | RIGHT ANGLE
      C8 |  00000398 | GREEK CAPITAL LETTER THETA
      C9 |  00002329 | LEFT-POINTING ANGLE BRACKET
      CA |  0000232A | RIGHT-POINTING ANGLE BRACKET
      CB |  0000039B | GREEK CAPITAL LETTER LAMDA
      CC |  00002032 | PRIME
      CD |  00002033 | DOUBLE PRIME
      CE |  0000039E | GREEK CAPITAL LETTER XI
      CF |  00002213 | MINUS-OR-PLUS SIGN
      D0 |  000003A0 | GREEK CAPITAL LETTER PI
      D1 |  000000B2 | SUPERSCRIPT TWO
      D2 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      D3 |  000000D7 | MULTIPLICATION SIGN
      D4 |  000000B3 | SUPERSCRIPT THREE
      D5 |  000003A5 | GREEK CAPITAL LETTER UPSILON
      D6 |  000003A6 | GREEK CAPITAL LETTER PHI
      D7 |  000000B7 | MIDDLE DOT
      D8 |  000003A8 | GREEK CAPITAL LETTER PSI
      D9 |  000003A9 | GREEK CAPITAL LETTER OMEGA
      DA |  00002205 | EMPTY SET
      DB |  000021C0 | RIGHTWARDS HARPOON WITH BARB UPWARDS
      DC |  0000221A | SQUARE ROOT
      DD |  00000192 | LATIN SMALL LETTER F WITH HOOK
      DE |  0000221D | PROPORTIONAL TO
      DF |  000000B1 | PLUS-MINUS SIGN
      E0 |  000000B0 | DEGREE SIGN
      E1 |  000003B1 | GREEK SMALL LETTER ALPHA
      E2 |  000003B2 | GREEK SMALL LETTER BETA
      E3 |  000003B3 | GREEK SMALL LETTER GAMMA
      E4 |  000003B4 | GREEK SMALL LETTER DELTA
      E5 |  000003B5 | GREEK SMALL LETTER EPSILON
      E6 |  000003B6 | GREEK SMALL LETTER ZETA
      E7 |  000003B7 | GREEK SMALL LETTER ETA
      E8 |  000003B8 | GREEK SMALL LETTER THETA
      E9 |  000003B9 | GREEK SMALL LETTER IOTA
      EA |  000003BA | GREEK SMALL LETTER KAPPA
      EB |  000003BB | GREEK SMALL LETTER LAMDA
      EC |  000003BC | GREEK SMALL LETTER MU
      ED |  000003BD | GREEK SMALL LETTER NU
      EE |  000003BE | GREEK SMALL LETTER XI
      EF |  00002030 | PER MILLE SIGN
      F0 |  000003C0 | GREEK SMALL LETTER PI
      F1 |  000003C1 | GREEK SMALL LETTER RHO
      F2 |  000003C3 | GREEK SMALL LETTER SIGMA
      F3 |  000000F7 | DIVISION SIGN
      F4 |  000003C4 | GREEK SMALL LETTER TAU
      F5 |  000003C5 | GREEK SMALL LETTER UPSILON
      F6 |  000003C6 | GREEK SMALL LETTER PHI
      F7 |  000003C7 | GREEK SMALL LETTER CHI
      F8 |  000003C8 | GREEK SMALL LETTER PSI
      F9 |  000003C9 | GREEK SMALL LETTER OMEGA
      FA |  00002020 | DAGGER
      FB |  00002190 | LEFTWARDS ARROW
      FC |  00002191 | UPWARDS ARROW
      FD |  00002192 | RIGHTWARDS ARROW
      FE |  00002193 | DOWNWARDS ARROW
      FF |  0000203E | OVERLINE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_IEC_P27_1

    $main::fatpacked{"Locale/RecodeData/INIS.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_INIS';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for INIS.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::INIS;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0024,
      0x0025,
      0xfffd,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0xfffd,
      0xfffd,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0xfffd,
      0x005d,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0xfffd,
      0x007c,
      0xfffd,
      0xfffd,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x24",
      "\x25",
      "\xef\xbf\xbd",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\xef\xbf\xbd",
      "\x5d",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xef\xbf\xbd",
      "\x7c",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005d => "\x5d",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007c => "\x7c",
      0x0000007f => "\x7f",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::INIS - Conversion routines for INIS
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for INIS.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-49
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5D |  0000005D | RIGHT SQUARE BRACKET
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7C |  0000007C | VERTICAL LINE
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_INIS

    $main::fatpacked{"Locale/RecodeData/INIS_8.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_INIS_8';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for INIS-8.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::INIS_8;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x03b1,
      0x03b2,
      0x03b3,
      0x03b4,
      0x039e,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x2192,
      0x222b,
      0x2070,
      0x00b9,
      0x00b2,
      0x00b3,
      0x2074,
      0x2075,
      0x2076,
      0x2077,
      0x2078,
      0x2079,
      0x207a,
      0x207b,
      0x30eb,
      0x0394,
      0x039b,
      0x03a9,
      0x2080,
      0x2081,
      0x2082,
      0x2083,
      0x2084,
      0x2085,
      0x2086,
      0x2087,
      0x2088,
      0x2089,
      0x03a3,
      0x03bc,
      0x03bd,
      0x03c9,
      0x03c0,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xce\xb1",
      "\xce\xb2",
      "\xce\xb3",
      "\xce\xb4",
      "\xce\x9e",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x86\x92",
      "\xe2\x88\xab",
      "\xe2\x81\xb0",
      "\xc2\xb9",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xe2\x81\xb4",
      "\xe2\x81\xb5",
      "\xe2\x81\xb6",
      "\xe2\x81\xb7",
      "\xe2\x81\xb8",
      "\xe2\x81\xb9",
      "\xe2\x81\xba",
      "\xe2\x81\xbb",
      "\xe3\x83\xab",
      "\xce\x94",
      "\xce\x9b",
      "\xce\xa9",
      "\xe2\x82\x80",
      "\xe2\x82\x81",
      "\xe2\x82\x82",
      "\xe2\x82\x83",
      "\xe2\x82\x84",
      "\xe2\x82\x85",
      "\xe2\x82\x86",
      "\xe2\x82\x87",
      "\xe2\x82\x88",
      "\xe2\x82\x89",
      "\xce\xa3",
      "\xce\xbc",
      "\xce\xbd",
      "\xcf\x89",
      "\xcf\x80",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x0000007f => "\x7f",
      0x000000b2 => "\x62",
      0x000000b3 => "\x63",
      0x000000b9 => "\x61",
      0x00000394 => "\x6d",
      0x0000039b => "\x6e",
      0x0000039e => "\x3e",
      0x000003a3 => "\x7a",
      0x000003a9 => "\x6f",
      0x000003b1 => "\x3a",
      0x000003b2 => "\x3b",
      0x000003b3 => "\x3c",
      0x000003b4 => "\x3d",
      0x000003bc => "\x7b",
      0x000003bd => "\x7c",
      0x000003c0 => "\x7e",
      0x000003c9 => "\x7d",
      0x00002070 => "\x60",
      0x00002074 => "\x64",
      0x00002075 => "\x65",
      0x00002076 => "\x66",
      0x00002077 => "\x67",
      0x00002078 => "\x68",
      0x00002079 => "\x69",
      0x0000207a => "\x6a",
      0x0000207b => "\x6b",
      0x00002080 => "\x70",
      0x00002081 => "\x71",
      0x00002082 => "\x72",
      0x00002083 => "\x73",
      0x00002084 => "\x74",
      0x00002085 => "\x75",
      0x00002086 => "\x76",
      0x00002087 => "\x77",
      0x00002088 => "\x78",
      0x00002089 => "\x79",
      0x00002192 => "\x5e",
      0x0000222b => "\x5f",
      0x000030eb => "\x6c",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::INIS_8 - Conversion routines for INIS_8
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for INIS-8.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
   repertoiremap: mnemonic,ds
    source: ECMA registry
   alias ISO-IR-50
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      3A |  000003B1 | GREEK SMALL LETTER ALPHA
      3B |  000003B2 | GREEK SMALL LETTER BETA
      3C |  000003B3 | GREEK SMALL LETTER GAMMA
      3D |  000003B4 | GREEK SMALL LETTER DELTA
      3E |  0000039E | GREEK CAPITAL LETTER XI
      5E |  00002192 | RIGHTWARDS ARROW
      5F |  0000222B | INTEGRAL
      60 |  00002070 | SUPERSCRIPT ZERO
      61 |  000000B9 | SUPERSCRIPT ONE
      62 |  000000B2 | SUPERSCRIPT TWO
      63 |  000000B3 | SUPERSCRIPT THREE
      64 |  00002074 | SUPERSCRIPT FOUR
      65 |  00002075 | SUPERSCRIPT FIVE
      66 |  00002076 | SUPERSCRIPT SIX
      67 |  00002077 | SUPERSCRIPT SEVEN
      68 |  00002078 | SUPERSCRIPT EIGHT
      69 |  00002079 | SUPERSCRIPT NINE
      6A |  0000207A | SUPERSCRIPT PLUS SIGN
      6B |  0000207B | SUPERSCRIPT MINUS
      6C |  000030EB | KATAKANA LETTER RU
      6D |  00000394 | GREEK CAPITAL LETTER DELTA
      6E |  0000039B | GREEK CAPITAL LETTER LAMDA
      6F |  000003A9 | GREEK CAPITAL LETTER OMEGA
      70 |  00002080 | SUBSCRIPT ZERO
      71 |  00002081 | SUBSCRIPT ONE
      72 |  00002082 | SUBSCRIPT TWO
      73 |  00002083 | SUBSCRIPT THREE
      74 |  00002084 | SUBSCRIPT FOUR
      75 |  00002085 | SUBSCRIPT FIVE
      76 |  00002086 | SUBSCRIPT SIX
      77 |  00002087 | SUBSCRIPT SEVEN
      78 |  00002088 | SUBSCRIPT EIGHT
      79 |  00002089 | SUBSCRIPT NINE
      7A |  000003A3 | GREEK CAPITAL LETTER SIGMA
      7B |  000003BC | GREEK SMALL LETTER MU
      7C |  000003BD | GREEK SMALL LETTER NU
      7D |  000003C9 | GREEK SMALL LETTER OMEGA
      7E |  000003C0 | GREEK SMALL LETTER PI
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_INIS_8

    $main::fatpacked{"Locale/RecodeData/INIS_CYRILLIC.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_INIS_CYRILLIC';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for INIS-CYRILLIC.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::INIS_CYRILLIC;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x221a,
      0xfffd,
      0x2192,
      0x222b,
      0x03b1,
      0x03b2,
      0x03b3,
      0x03b4,
      0x03a3,
      0x03bc,
      0x03bd,
      0x03c9,
      0x03c0,
      0x039e,
      0x0394,
      0x039b,
      0x03a9,
      0x042a,
      0x207b,
      0x207a,
      0x044e,
      0x0430,
      0x0431,
      0x0446,
      0x0434,
      0x0435,
      0x0444,
      0x0433,
      0x0445,
      0x0438,
      0x0439,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x044f,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0436,
      0x0432,
      0x044c,
      0x044b,
      0x0437,
      0x0448,
      0x044d,
      0x0449,
      0x0447,
      0x044a,
      0x042e,
      0x0410,
      0x0411,
      0x0426,
      0x0414,
      0x0415,
      0x0424,
      0x0413,
      0x0425,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0x041d,
      0x041e,
      0x041f,
      0x042f,
      0x0420,
      0x0421,
      0x0422,
      0x0423,
      0x0416,
      0x0412,
      0x042c,
      0x042b,
      0x0417,
      0x0428,
      0x042d,
      0x0429,
      0x0427,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x88\x9a",
      "\xef\xbf\xbd",
      "\xe2\x86\x92",
      "\xe2\x88\xab",
      "\xce\xb1",
      "\xce\xb2",
      "\xce\xb3",
      "\xce\xb4",
      "\xce\xa3",
      "\xce\xbc",
      "\xce\xbd",
      "\xcf\x89",
      "\xcf\x80",
      "\xce\x9e",
      "\xce\x94",
      "\xce\x9b",
      "\xce\xa9",
      "\xd0\xaa",
      "\xe2\x81\xbb",
      "\xe2\x81\xba",
      "\xd1\x8e",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xd1\x86",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd1\x84",
      "\xd0\xb3",
      "\xd1\x85",
      "\xd0\xb8",
      "\xd0\xb9",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xd1\x8f",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd0\xb6",
      "\xd0\xb2",
      "\xd1\x8c",
      "\xd1\x8b",
      "\xd0\xb7",
      "\xd1\x88",
      "\xd1\x8d",
      "\xd1\x89",
      "\xd1\x87",
      "\xd1\x8a",
      "\xd0\xae",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\xa6",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\xa4",
      "\xd0\x93",
      "\xd0\xa5",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xaf",
      "\xd0\xa0",
      "\xd0\xa1",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\x96",
      "\xd0\x92",
      "\xd0\xac",
      "\xd0\xab",
      "\xd0\x97",
      "\xd0\xa8",
      "\xd0\xad",
      "\xd0\xa9",
      "\xd0\xa7",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x0000007f => "\x7f",
      0x00000394 => "\x3a",
      0x0000039b => "\x3b",
      0x0000039e => "\x39",
      0x000003a3 => "\x34",
      0x000003a9 => "\x3c",
      0x000003b1 => "\x30",
      0x000003b2 => "\x31",
      0x000003b3 => "\x32",
      0x000003b4 => "\x33",
      0x000003bc => "\x35",
      0x000003bd => "\x36",
      0x000003c0 => "\x38",
      0x000003c9 => "\x37",
      0x00000410 => "\x61",
      0x00000411 => "\x62",
      0x00000412 => "\x77",
      0x00000413 => "\x67",
      0x00000414 => "\x64",
      0x00000415 => "\x65",
      0x00000416 => "\x76",
      0x00000417 => "\x7a",
      0x00000418 => "\x69",
      0x00000419 => "\x6a",
      0x0000041a => "\x6b",
      0x0000041b => "\x6c",
      0x0000041c => "\x6d",
      0x0000041d => "\x6e",
      0x0000041e => "\x6f",
      0x0000041f => "\x70",
      0x00000420 => "\x72",
      0x00000421 => "\x73",
      0x00000422 => "\x74",
      0x00000423 => "\x75",
      0x00000424 => "\x66",
      0x00000425 => "\x68",
      0x00000426 => "\x63",
      0x00000427 => "\x7e",
      0x00000428 => "\x7b",
      0x00000429 => "\x7d",
      0x0000042a => "\x3d",
      0x0000042b => "\x79",
      0x0000042c => "\x78",
      0x0000042d => "\x7c",
      0x0000042e => "\x60",
      0x0000042f => "\x71",
      0x00000430 => "\x41",
      0x00000431 => "\x42",
      0x00000432 => "\x57",
      0x00000433 => "\x47",
      0x00000434 => "\x44",
      0x00000435 => "\x45",
      0x00000436 => "\x56",
      0x00000437 => "\x5a",
      0x00000438 => "\x49",
      0x00000439 => "\x4a",
      0x0000043a => "\x4b",
      0x0000043b => "\x4c",
      0x0000043c => "\x4d",
      0x0000043d => "\x4e",
      0x0000043e => "\x4f",
      0x0000043f => "\x50",
      0x00000440 => "\x52",
      0x00000441 => "\x53",
      0x00000442 => "\x54",
      0x00000443 => "\x55",
      0x00000444 => "\x46",
      0x00000445 => "\x48",
      0x00000446 => "\x43",
      0x00000447 => "\x5e",
      0x00000448 => "\x5b",
      0x00000449 => "\x5d",
      0x0000044a => "\x5f",
      0x0000044b => "\x59",
      0x0000044c => "\x58",
      0x0000044d => "\x5c",
      0x0000044e => "\x40",
      0x0000044f => "\x51",
      0x0000207a => "\x3f",
      0x0000207b => "\x3e",
      0x00002192 => "\x2e",
      0x0000221a => "\x2c",
      0x0000222b => "\x2f",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::INIS_CYRILLIC - Conversion routines for INIS_CYRILLIC
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for INIS-CYRILLIC.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-51
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      2C |  0000221A | SQUARE ROOT
      2E |  00002192 | RIGHTWARDS ARROW
      2F |  0000222B | INTEGRAL
      30 |  000003B1 | GREEK SMALL LETTER ALPHA
      31 |  000003B2 | GREEK SMALL LETTER BETA
      32 |  000003B3 | GREEK SMALL LETTER GAMMA
      33 |  000003B4 | GREEK SMALL LETTER DELTA
      34 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      35 |  000003BC | GREEK SMALL LETTER MU
      36 |  000003BD | GREEK SMALL LETTER NU
      37 |  000003C9 | GREEK SMALL LETTER OMEGA
      38 |  000003C0 | GREEK SMALL LETTER PI
      39 |  0000039E | GREEK CAPITAL LETTER XI
      3A |  00000394 | GREEK CAPITAL LETTER DELTA
      3B |  0000039B | GREEK CAPITAL LETTER LAMDA
      3C |  000003A9 | GREEK CAPITAL LETTER OMEGA
      3D |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
      3E |  0000207B | SUPERSCRIPT MINUS
      3F |  0000207A | SUPERSCRIPT PLUS SIGN
      40 |  0000044E | CYRILLIC SMALL LETTER YU
      41 |  00000430 | CYRILLIC SMALL LETTER A
      42 |  00000431 | CYRILLIC SMALL LETTER BE
      43 |  00000446 | CYRILLIC SMALL LETTER TSE
      44 |  00000434 | CYRILLIC SMALL LETTER DE
      45 |  00000435 | CYRILLIC SMALL LETTER IE
      46 |  00000444 | CYRILLIC SMALL LETTER EF
      47 |  00000433 | CYRILLIC SMALL LETTER GHE
      48 |  00000445 | CYRILLIC SMALL LETTER HA
      49 |  00000438 | CYRILLIC SMALL LETTER I
      4A |  00000439 | CYRILLIC SMALL LETTER SHORT I
      4B |  0000043A | CYRILLIC SMALL LETTER KA
      4C |  0000043B | CYRILLIC SMALL LETTER EL
      4D |  0000043C | CYRILLIC SMALL LETTER EM
      4E |  0000043D | CYRILLIC SMALL LETTER EN
      4F |  0000043E | CYRILLIC SMALL LETTER O
      50 |  0000043F | CYRILLIC SMALL LETTER PE
      51 |  0000044F | CYRILLIC SMALL LETTER YA
      52 |  00000440 | CYRILLIC SMALL LETTER ER
      53 |  00000441 | CYRILLIC SMALL LETTER ES
      54 |  00000442 | CYRILLIC SMALL LETTER TE
      55 |  00000443 | CYRILLIC SMALL LETTER U
      56 |  00000436 | CYRILLIC SMALL LETTER ZHE
      57 |  00000432 | CYRILLIC SMALL LETTER VE
      58 |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      59 |  0000044B | CYRILLIC SMALL LETTER YERU
      5A |  00000437 | CYRILLIC SMALL LETTER ZE
      5B |  00000448 | CYRILLIC SMALL LETTER SHA
      5C |  0000044D | CYRILLIC SMALL LETTER E
      5D |  00000449 | CYRILLIC SMALL LETTER SHCHA
      5E |  00000447 | CYRILLIC SMALL LETTER CHE
      5F |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      60 |  0000042E | CYRILLIC CAPITAL LETTER YU
      61 |  00000410 | CYRILLIC CAPITAL LETTER A
      62 |  00000411 | CYRILLIC CAPITAL LETTER BE
      63 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      64 |  00000414 | CYRILLIC CAPITAL LETTER DE
      65 |  00000415 | CYRILLIC CAPITAL LETTER IE
      66 |  00000424 | CYRILLIC CAPITAL LETTER EF
      67 |  00000413 | CYRILLIC CAPITAL LETTER GHE
      68 |  00000425 | CYRILLIC CAPITAL LETTER HA
      69 |  00000418 | CYRILLIC CAPITAL LETTER I
      6A |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      6B |  0000041A | CYRILLIC CAPITAL LETTER KA
      6C |  0000041B | CYRILLIC CAPITAL LETTER EL
      6D |  0000041C | CYRILLIC CAPITAL LETTER EM
      6E |  0000041D | CYRILLIC CAPITAL LETTER EN
      6F |  0000041E | CYRILLIC CAPITAL LETTER O
      70 |  0000041F | CYRILLIC CAPITAL LETTER PE
      71 |  0000042F | CYRILLIC CAPITAL LETTER YA
      72 |  00000420 | CYRILLIC CAPITAL LETTER ER
      73 |  00000421 | CYRILLIC CAPITAL LETTER ES
      74 |  00000422 | CYRILLIC CAPITAL LETTER TE
      75 |  00000423 | CYRILLIC CAPITAL LETTER U
      76 |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      77 |  00000412 | CYRILLIC CAPITAL LETTER VE
      78 |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      79 |  0000042B | CYRILLIC CAPITAL LETTER YERU
      7A |  00000417 | CYRILLIC CAPITAL LETTER ZE
      7B |  00000428 | CYRILLIC CAPITAL LETTER SHA
      7C |  0000042D | CYRILLIC CAPITAL LETTER E
      7D |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      7E |  00000427 | CYRILLIC CAPITAL LETTER CHE
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_INIS_CYRILLIC

    $main::fatpacked{"Locale/RecodeData/ISO_10367_BOX.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_10367_BOX';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO_10367-BOX.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_10367_BOX;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x2551,
      0x2550,
      0x2554,
      0x2557,
      0x255a,
      0x255d,
      0x2560,
      0x2563,
      0x2566,
      0x2569,
      0x256c,
      0xe019,
      0x2584,
      0x2588,
      0x25aa,
      0xfffd,
      0x2502,
      0x2500,
      0x250c,
      0x2510,
      0x2514,
      0x2518,
      0x251c,
      0x2524,
      0x252c,
      0x2534,
      0x253c,
      0x2591,
      0x2592,
      0x2593,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x95\x91",
      "\xe2\x95\x90",
      "\xe2\x95\x94",
      "\xe2\x95\x97",
      "\xe2\x95\x9a",
      "\xe2\x95\x9d",
      "\xe2\x95\xa0",
      "\xe2\x95\xa3",
      "\xe2\x95\xa6",
      "\xe2\x95\xa9",
      "\xe2\x95\xac",
      "\xee\x80\x99",
      "\xe2\x96\x84",
      "\xe2\x96\x88",
      "\xe2\x96\xaa",
      "\xef\xbf\xbd",
      "\xe2\x94\x82",
      "\xe2\x94\x80",
      "\xe2\x94\x8c",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\x98",
      "\xe2\x94\x9c",
      "\xe2\x94\xa4",
      "\xe2\x94\xac",
      "\xe2\x94\xb4",
      "\xe2\x94\xbc",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x00002500 => "\xd1",
      0x00002502 => "\xd0",
      0x0000250c => "\xd2",
      0x00002510 => "\xd3",
      0x00002514 => "\xd4",
      0x00002518 => "\xd5",
      0x0000251c => "\xd6",
      0x00002524 => "\xd7",
      0x0000252c => "\xd8",
      0x00002534 => "\xd9",
      0x0000253c => "\xda",
      0x00002550 => "\xc1",
      0x00002551 => "\xc0",
      0x00002554 => "\xc2",
      0x00002557 => "\xc3",
      0x0000255a => "\xc4",
      0x0000255d => "\xc5",
      0x00002560 => "\xc6",
      0x00002563 => "\xc7",
      0x00002566 => "\xc8",
      0x00002569 => "\xc9",
      0x0000256c => "\xca",
      0x00002584 => "\xcc",
      0x00002588 => "\xcd",
      0x00002591 => "\xdb",
      0x00002592 => "\xdc",
      0x00002593 => "\xdd",
      0x000025aa => "\xce",
      0x0000e019 => "\xcb",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_10367_BOX - Conversion routines for ISO_10367_BOX
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO_10367-BOX.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-155
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      C0 |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      C1 |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      C2 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      C3 |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      C4 |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      C5 |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      C6 |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      C7 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      C8 |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      C9 |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      CA |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      CB |  0000E019 | Unit space B E<lt>ISO-IR-8-1_60E<gt>
      CC |  00002584 | LOWER HALF BLOCK
      CD |  00002588 | FULL BLOCK
      CE |  000025AA | BLACK SMALL SQUARE
      D0 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      D1 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      D2 |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      D3 |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      D4 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      D5 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      D6 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      D7 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      D8 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      D9 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      DA |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      DB |  00002591 | LIGHT SHADE
      DC |  00002592 | MEDIUM SHADE
      DD |  00002593 | DARK SHADE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_10367_BOX

    $main::fatpacked{"Locale/RecodeData/ISO_2033_1983.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_2033_1983';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO_2033-1983.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_2033_1983;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x2446,
      0x2447,
      0x2448,
      0x2449,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xe2\x91\x86",
      "\xe2\x91\x87",
      "\xe2\x91\x88",
      "\xe2\x91\x89",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000007f => "\x7f",
      0x00002446 => "\x3a",
      0x00002447 => "\x3b",
      0x00002448 => "\x3c",
      0x00002449 => "\x3d",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_2033_1983 - Conversion routines for ISO_2033_1983
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO_2033-1983.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
   repertoiremap: mnemonic,ds
    source: ECMA registry
   alias ISO-IR-98
   alias E13B
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  00002446 | OCR BRANCH BANK IDENTIFICATION
      3B |  00002447 | OCR AMOUNT OF CHECK
      3C |  00002448 | OCR DASH
      3D |  00002449 | OCR CUSTOMER ACCOUNT NUMBER
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_2033_1983

    $main::fatpacked{"Locale/RecodeData/ISO_5427.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_5427';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO_5427.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_5427;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x00a4,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x044e,
      0x0430,
      0x0431,
      0x0446,
      0x0434,
      0x0435,
      0x0444,
      0x0433,
      0x0445,
      0x0438,
      0x0439,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x044f,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0436,
      0x0432,
      0x044c,
      0x044b,
      0x0437,
      0x0448,
      0x044d,
      0x0449,
      0x0447,
      0x044a,
      0x042e,
      0x0410,
      0x0411,
      0x0426,
      0x0414,
      0x0415,
      0x0424,
      0x0413,
      0x0425,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0x041d,
      0x041e,
      0x041f,
      0x042f,
      0x0420,
      0x0421,
      0x0422,
      0x0423,
      0x0416,
      0x0412,
      0x042c,
      0x042b,
      0x0417,
      0x0428,
      0x042d,
      0x0429,
      0x0427,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\xc2\xa4",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\xd1\x8e",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xd1\x86",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd1\x84",
      "\xd0\xb3",
      "\xd1\x85",
      "\xd0\xb8",
      "\xd0\xb9",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xd1\x8f",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd0\xb6",
      "\xd0\xb2",
      "\xd1\x8c",
      "\xd1\x8b",
      "\xd0\xb7",
      "\xd1\x88",
      "\xd1\x8d",
      "\xd1\x89",
      "\xd1\x87",
      "\xd1\x8a",
      "\xd0\xae",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\xa6",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\xa4",
      "\xd0\x93",
      "\xd0\xa5",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xaf",
      "\xd0\xa0",
      "\xd0\xa1",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\x96",
      "\xd0\x92",
      "\xd0\xac",
      "\xd0\xab",
      "\xd0\x97",
      "\xd0\xa8",
      "\xd0\xad",
      "\xd0\xa9",
      "\xd0\xa7",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x0000007f => "\x7f",
      0x000000a4 => "\x24",
      0x00000410 => "\x61",
      0x00000411 => "\x62",
      0x00000412 => "\x77",
      0x00000413 => "\x67",
      0x00000414 => "\x64",
      0x00000415 => "\x65",
      0x00000416 => "\x76",
      0x00000417 => "\x7a",
      0x00000418 => "\x69",
      0x00000419 => "\x6a",
      0x0000041a => "\x6b",
      0x0000041b => "\x6c",
      0x0000041c => "\x6d",
      0x0000041d => "\x6e",
      0x0000041e => "\x6f",
      0x0000041f => "\x70",
      0x00000420 => "\x72",
      0x00000421 => "\x73",
      0x00000422 => "\x74",
      0x00000423 => "\x75",
      0x00000424 => "\x66",
      0x00000425 => "\x68",
      0x00000426 => "\x63",
      0x00000427 => "\x7e",
      0x00000428 => "\x7b",
      0x00000429 => "\x7d",
      0x0000042b => "\x79",
      0x0000042c => "\x78",
      0x0000042d => "\x7c",
      0x0000042e => "\x60",
      0x0000042f => "\x71",
      0x00000430 => "\x41",
      0x00000431 => "\x42",
      0x00000432 => "\x57",
      0x00000433 => "\x47",
      0x00000434 => "\x44",
      0x00000435 => "\x45",
      0x00000436 => "\x56",
      0x00000437 => "\x5a",
      0x00000438 => "\x49",
      0x00000439 => "\x4a",
      0x0000043a => "\x4b",
      0x0000043b => "\x4c",
      0x0000043c => "\x4d",
      0x0000043d => "\x4e",
      0x0000043e => "\x4f",
      0x0000043f => "\x50",
      0x00000440 => "\x52",
      0x00000441 => "\x53",
      0x00000442 => "\x54",
      0x00000443 => "\x55",
      0x00000444 => "\x46",
      0x00000445 => "\x48",
      0x00000446 => "\x43",
      0x00000447 => "\x5e",
      0x00000448 => "\x5b",
      0x00000449 => "\x5d",
      0x0000044a => "\x5f",
      0x0000044b => "\x59",
      0x0000044c => "\x58",
      0x0000044d => "\x5c",
      0x0000044e => "\x40",
      0x0000044f => "\x51",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_5427 - Conversion routines for ISO_5427
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO_5427.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-37
   alias KOI-7
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  000000A4 | CURRENCY SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  0000044E | CYRILLIC SMALL LETTER YU
      41 |  00000430 | CYRILLIC SMALL LETTER A
      42 |  00000431 | CYRILLIC SMALL LETTER BE
      43 |  00000446 | CYRILLIC SMALL LETTER TSE
      44 |  00000434 | CYRILLIC SMALL LETTER DE
      45 |  00000435 | CYRILLIC SMALL LETTER IE
      46 |  00000444 | CYRILLIC SMALL LETTER EF
      47 |  00000433 | CYRILLIC SMALL LETTER GHE
      48 |  00000445 | CYRILLIC SMALL LETTER HA
      49 |  00000438 | CYRILLIC SMALL LETTER I
      4A |  00000439 | CYRILLIC SMALL LETTER SHORT I
      4B |  0000043A | CYRILLIC SMALL LETTER KA
      4C |  0000043B | CYRILLIC SMALL LETTER EL
      4D |  0000043C | CYRILLIC SMALL LETTER EM
      4E |  0000043D | CYRILLIC SMALL LETTER EN
      4F |  0000043E | CYRILLIC SMALL LETTER O
      50 |  0000043F | CYRILLIC SMALL LETTER PE
      51 |  0000044F | CYRILLIC SMALL LETTER YA
      52 |  00000440 | CYRILLIC SMALL LETTER ER
      53 |  00000441 | CYRILLIC SMALL LETTER ES
      54 |  00000442 | CYRILLIC SMALL LETTER TE
      55 |  00000443 | CYRILLIC SMALL LETTER U
      56 |  00000436 | CYRILLIC SMALL LETTER ZHE
      57 |  00000432 | CYRILLIC SMALL LETTER VE
      58 |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      59 |  0000044B | CYRILLIC SMALL LETTER YERU
      5A |  00000437 | CYRILLIC SMALL LETTER ZE
      5B |  00000448 | CYRILLIC SMALL LETTER SHA
      5C |  0000044D | CYRILLIC SMALL LETTER E
      5D |  00000449 | CYRILLIC SMALL LETTER SHCHA
      5E |  00000447 | CYRILLIC SMALL LETTER CHE
      5F |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      60 |  0000042E | CYRILLIC CAPITAL LETTER YU
      61 |  00000410 | CYRILLIC CAPITAL LETTER A
      62 |  00000411 | CYRILLIC CAPITAL LETTER BE
      63 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      64 |  00000414 | CYRILLIC CAPITAL LETTER DE
      65 |  00000415 | CYRILLIC CAPITAL LETTER IE
      66 |  00000424 | CYRILLIC CAPITAL LETTER EF
      67 |  00000413 | CYRILLIC CAPITAL LETTER GHE
      68 |  00000425 | CYRILLIC CAPITAL LETTER HA
      69 |  00000418 | CYRILLIC CAPITAL LETTER I
      6A |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      6B |  0000041A | CYRILLIC CAPITAL LETTER KA
      6C |  0000041B | CYRILLIC CAPITAL LETTER EL
      6D |  0000041C | CYRILLIC CAPITAL LETTER EM
      6E |  0000041D | CYRILLIC CAPITAL LETTER EN
      6F |  0000041E | CYRILLIC CAPITAL LETTER O
      70 |  0000041F | CYRILLIC CAPITAL LETTER PE
      71 |  0000042F | CYRILLIC CAPITAL LETTER YA
      72 |  00000420 | CYRILLIC CAPITAL LETTER ER
      73 |  00000421 | CYRILLIC CAPITAL LETTER ES
      74 |  00000422 | CYRILLIC CAPITAL LETTER TE
      75 |  00000423 | CYRILLIC CAPITAL LETTER U
      76 |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      77 |  00000412 | CYRILLIC CAPITAL LETTER VE
      78 |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      79 |  0000042B | CYRILLIC CAPITAL LETTER YERU
      7A |  00000417 | CYRILLIC CAPITAL LETTER ZE
      7B |  00000428 | CYRILLIC CAPITAL LETTER SHA
      7C |  0000042D | CYRILLIC CAPITAL LETTER E
      7D |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      7E |  00000427 | CYRILLIC CAPITAL LETTER CHE
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_5427

    $main::fatpacked{"Locale/RecodeData/ISO_5427_EXT.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_5427_EXT';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO_5427-EXT.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_5427_EXT;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0491,
      0x0452,
      0x0453,
      0x0454,
      0x0451,
      0x0455,
      0x0456,
      0x0457,
      0x0458,
      0x0459,
      0x045a,
      0x045b,
      0x045c,
      0x045e,
      0x045f,
      0xfffd,
      0x0463,
      0x0473,
      0x0475,
      0x046b,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x005b,
      0xfffd,
      0x005d,
      0xfffd,
      0x005f,
      0x0490,
      0x0402,
      0x0403,
      0x0404,
      0x0401,
      0x0405,
      0x0406,
      0x0407,
      0x0408,
      0x0409,
      0x040a,
      0x040b,
      0x040c,
      0x040e,
      0x040f,
      0x042a,
      0x0462,
      0x0472,
      0x0474,
      0x046a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd2\x91",
      "\xd1\x92",
      "\xd1\x93",
      "\xd1\x94",
      "\xd1\x91",
      "\xd1\x95",
      "\xd1\x96",
      "\xd1\x97",
      "\xd1\x98",
      "\xd1\x99",
      "\xd1\x9a",
      "\xd1\x9b",
      "\xd1\x9c",
      "\xd1\x9e",
      "\xd1\x9f",
      "\xef\xbf\xbd",
      "\xd1\xa3",
      "\xd1\xb3",
      "\xd1\xb5",
      "\xd1\xab",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x5b",
      "\xef\xbf\xbd",
      "\x5d",
      "\xef\xbf\xbd",
      "\x5f",
      "\xd2\x90",
      "\xd0\x82",
      "\xd0\x83",
      "\xd0\x84",
      "\xd0\x81",
      "\xd0\x85",
      "\xd0\x86",
      "\xd0\x87",
      "\xd0\x88",
      "\xd0\x89",
      "\xd0\x8a",
      "\xd0\x8b",
      "\xd0\x8c",
      "\xd0\x8e",
      "\xd0\x8f",
      "\xd0\xaa",
      "\xd1\xa2",
      "\xd1\xb2",
      "\xd1\xb4",
      "\xd1\xaa",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x0000005b => "\x5b",
      0x0000005d => "\x5d",
      0x0000005f => "\x5f",
      0x0000007f => "\x7f",
      0x00000401 => "\x64",
      0x00000402 => "\x61",
      0x00000403 => "\x62",
      0x00000404 => "\x63",
      0x00000405 => "\x65",
      0x00000406 => "\x66",
      0x00000407 => "\x67",
      0x00000408 => "\x68",
      0x00000409 => "\x69",
      0x0000040a => "\x6a",
      0x0000040b => "\x6b",
      0x0000040c => "\x6c",
      0x0000040e => "\x6d",
      0x0000040f => "\x6e",
      0x0000042a => "\x6f",
      0x00000451 => "\x44",
      0x00000452 => "\x41",
      0x00000453 => "\x42",
      0x00000454 => "\x43",
      0x00000455 => "\x45",
      0x00000456 => "\x46",
      0x00000457 => "\x47",
      0x00000458 => "\x48",
      0x00000459 => "\x49",
      0x0000045a => "\x4a",
      0x0000045b => "\x4b",
      0x0000045c => "\x4c",
      0x0000045e => "\x4d",
      0x0000045f => "\x4e",
      0x00000462 => "\x70",
      0x00000463 => "\x50",
      0x0000046a => "\x73",
      0x0000046b => "\x53",
      0x00000472 => "\x71",
      0x00000473 => "\x51",
      0x00000474 => "\x72",
      0x00000475 => "\x52",
      0x00000490 => "\x60",
      0x00000491 => "\x40",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_5427_EXT - Conversion routines for ISO_5427_EXT
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO_5427-EXT.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
   repertoiremap: mnemonic,ds
    source: ECMA registry
   alias ISO-IR-54
   alias ISO_5427:1981
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      40 |  00000491 | CYRILLIC SMALL LETTER GHE WITH UPTURN
      41 |  00000452 | CYRILLIC SMALL LETTER DJE
      42 |  00000453 | CYRILLIC SMALL LETTER GJE
      43 |  00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE
      44 |  00000451 | CYRILLIC SMALL LETTER IO
      45 |  00000455 | CYRILLIC SMALL LETTER DZE
      46 |  00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
      47 |  00000457 | CYRILLIC SMALL LETTER YI
      48 |  00000458 | CYRILLIC SMALL LETTER JE
      49 |  00000459 | CYRILLIC SMALL LETTER LJE
      4A |  0000045A | CYRILLIC SMALL LETTER NJE
      4B |  0000045B | CYRILLIC SMALL LETTER TSHE
      4C |  0000045C | CYRILLIC SMALL LETTER KJE
      4D |  0000045E | CYRILLIC SMALL LETTER SHORT U
      4E |  0000045F | CYRILLIC SMALL LETTER DZHE
      50 |  00000463 | CYRILLIC SMALL LETTER YAT
      51 |  00000473 | CYRILLIC SMALL LETTER FITA
      52 |  00000475 | CYRILLIC SMALL LETTER IZHITSA
      53 |  0000046B | CYRILLIC SMALL LETTER BIG YUS
      5B |  0000005B | LEFT SQUARE BRACKET
      5D |  0000005D | RIGHT SQUARE BRACKET
      5F |  0000005F | LOW LINE
      60 |  00000490 | CYRILLIC CAPITAL LETTER GHE WITH UPTURN
      61 |  00000402 | CYRILLIC CAPITAL LETTER DJE
      62 |  00000403 | CYRILLIC CAPITAL LETTER GJE
      63 |  00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE
      64 |  00000401 | CYRILLIC CAPITAL LETTER IO
      65 |  00000405 | CYRILLIC CAPITAL LETTER DZE
      66 |  00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
      67 |  00000407 | CYRILLIC CAPITAL LETTER YI
      68 |  00000408 | CYRILLIC CAPITAL LETTER JE
      69 |  00000409 | CYRILLIC CAPITAL LETTER LJE
      6A |  0000040A | CYRILLIC CAPITAL LETTER NJE
      6B |  0000040B | CYRILLIC CAPITAL LETTER TSHE
      6C |  0000040C | CYRILLIC CAPITAL LETTER KJE
      6D |  0000040E | CYRILLIC CAPITAL LETTER SHORT U
      6E |  0000040F | CYRILLIC CAPITAL LETTER DZHE
      6F |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
      70 |  00000462 | CYRILLIC CAPITAL LETTER YAT
      71 |  00000472 | CYRILLIC CAPITAL LETTER FITA
      72 |  00000474 | CYRILLIC CAPITAL LETTER IZHITSA
      73 |  0000046A | CYRILLIC CAPITAL LETTER BIG YUS
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_5427_EXT

    $main::fatpacked{"Locale/RecodeData/ISO_5428.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_5428';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO_5428.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_5428;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0xe002,
      0xe003,
      0xe009,
      0xe005,
      0xe012,
      0xe013,
      0xe014,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00ab,
      0x00bb,
      0x201d,
      0x201c,
      0x0374,
      0x0375,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00b7,
      0xfffd,
      0xfffd,
      0xfffd,
      0x003b,
      0xfffd,
      0x0391,
      0x0392,
      0xfffd,
      0x0393,
      0x0394,
      0x0395,
      0x03da,
      0x03dc,
      0x0396,
      0x0397,
      0x0398,
      0x0399,
      0x039a,
      0x039b,
      0x039c,
      0x039d,
      0x039e,
      0x039f,
      0x03a0,
      0x03de,
      0x03a1,
      0x03a3,
      0xfffd,
      0x03a4,
      0x03a5,
      0x03a6,
      0x03a7,
      0x03a8,
      0x03a9,
      0x03e0,
      0xfffd,
      0xfffd,
      0x03b1,
      0x03b2,
      0x03d0,
      0x03b3,
      0x03b4,
      0x03b5,
      0xe01a,
      0xe01b,
      0x03b6,
      0x03b7,
      0x03b8,
      0x03b9,
      0x03ba,
      0x03bb,
      0x03bc,
      0x03bd,
      0x03be,
      0x03bf,
      0x03c0,
      0xe01c,
      0x03c1,
      0x03c3,
      0x03c2,
      0x03c4,
      0x03c5,
      0x03c6,
      0x03c7,
      0x03c8,
      0x03c9,
      0xe01d,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\xee\x80\x82",
      "\xee\x80\x83",
      "\xee\x80\x89",
      "\xee\x80\x85",
      "\xee\x80\x92",
      "\xee\x80\x93",
      "\xee\x80\x94",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x80\x9d",
      "\xe2\x80\x9c",
      "\xcd\xb4",
      "\xcd\xb5",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xb7",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\x3b",
      "\xef\xbf\xbd",
      "\xce\x91",
      "\xce\x92",
      "\xef\xbf\xbd",
      "\xce\x93",
      "\xce\x94",
      "\xce\x95",
      "\xcf\x9a",
      "\xcf\x9c",
      "\xce\x96",
      "\xce\x97",
      "\xce\x98",
      "\xce\x99",
      "\xce\x9a",
      "\xce\x9b",
      "\xce\x9c",
      "\xce\x9d",
      "\xce\x9e",
      "\xce\x9f",
      "\xce\xa0",
      "\xcf\x9e",
      "\xce\xa1",
      "\xce\xa3",
      "\xef\xbf\xbd",
      "\xce\xa4",
      "\xce\xa5",
      "\xce\xa6",
      "\xce\xa7",
      "\xce\xa8",
      "\xce\xa9",
      "\xcf\xa0",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xce\xb1",
      "\xce\xb2",
      "\xcf\x90",
      "\xce\xb3",
      "\xce\xb4",
      "\xce\xb5",
      "\xee\x80\x9a",
      "\xee\x80\x9b",
      "\xce\xb6",
      "\xce\xb7",
      "\xce\xb8",
      "\xce\xb9",
      "\xce\xba",
      "\xce\xbb",
      "\xce\xbc",
      "\xce\xbd",
      "\xce\xbe",
      "\xce\xbf",
      "\xcf\x80",
      "\xee\x80\x9c",
      "\xcf\x81",
      "\xcf\x83",
      "\xcf\x82",
      "\xcf\x84",
      "\xcf\x85",
      "\xcf\x86",
      "\xcf\x87",
      "\xcf\x88",
      "\xcf\x89",
      "\xee\x80\x9d",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x0000003b => "\x3f",
      0x0000007f => "\x7f",
      0x000000ab => "\x30",
      0x000000b7 => "\x3b",
      0x000000bb => "\x31",
      0x00000374 => "\x34",
      0x00000375 => "\x35",
      0x00000391 => "\x41",
      0x00000392 => "\x42",
      0x00000393 => "\x44",
      0x00000394 => "\x45",
      0x00000395 => "\x46",
      0x00000396 => "\x49",
      0x00000397 => "\x4a",
      0x00000398 => "\x4b",
      0x00000399 => "\x4c",
      0x0000039a => "\x4d",
      0x0000039b => "\x4e",
      0x0000039c => "\x4f",
      0x0000039d => "\x50",
      0x0000039e => "\x51",
      0x0000039f => "\x52",
      0x000003a0 => "\x53",
      0x000003a1 => "\x55",
      0x000003a3 => "\x56",
      0x000003a4 => "\x58",
      0x000003a5 => "\x59",
      0x000003a6 => "\x5a",
      0x000003a7 => "\x5b",
      0x000003a8 => "\x5c",
      0x000003a9 => "\x5d",
      0x000003b1 => "\x61",
      0x000003b2 => "\x62",
      0x000003b3 => "\x64",
      0x000003b4 => "\x65",
      0x000003b5 => "\x66",
      0x000003b6 => "\x69",
      0x000003b7 => "\x6a",
      0x000003b8 => "\x6b",
      0x000003b9 => "\x6c",
      0x000003ba => "\x6d",
      0x000003bb => "\x6e",
      0x000003bc => "\x6f",
      0x000003bd => "\x70",
      0x000003be => "\x71",
      0x000003bf => "\x72",
      0x000003c0 => "\x73",
      0x000003c1 => "\x75",
      0x000003c2 => "\x77",
      0x000003c3 => "\x76",
      0x000003c4 => "\x78",
      0x000003c5 => "\x79",
      0x000003c6 => "\x7a",
      0x000003c7 => "\x7b",
      0x000003c8 => "\x7c",
      0x000003c9 => "\x7d",
      0x000003d0 => "\x63",
      0x000003da => "\x47",
      0x000003dc => "\x48",
      0x000003de => "\x54",
      0x000003e0 => "\x5e",
      0x0000201c => "\x33",
      0x0000201d => "\x32",
      0x0000e002 => "\x21",
      0x0000e003 => "\x22",
      0x0000e005 => "\x24",
      0x0000e009 => "\x23",
      0x0000e012 => "\x25",
      0x0000e013 => "\x26",
      0x0000e014 => "\x27",
      0x0000e01a => "\x67",
      0x0000e01b => "\x68",
      0x0000e01c => "\x74",
      0x0000e01d => "\x7e",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_5428 - Conversion routines for ISO_5428
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO_5428.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-55
   alias ISO_5428:1980
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  0000E002 | NON-SPACING GRAVE ACCENT E<lt>ISO-IR-103_C1E<gt> (not a real character)
      22 |  0000E003 | NON-SPACING ACUTE ACCENT E<lt>ISO-IR-103_C2E<gt> (not a real character)
      23 |  0000E009 | NON-SPACING DIAERESIS E<lt>ISO-IR-103_C8E<gt> (not a real character)
      24 |  0000E005 | NON-SPACING TILDE E<lt>ISO-IR-103_C4E<gt> (not a real character)
      25 |  0000E012 | GREEK NON-SPACING PSILI PNEUMATA E<lt>ISO-IR-55_25E<gt> (not a real character)
      26 |  0000E013 | GREEK NON-SPACING DASIA PNEUMATA E<lt>ISO-IR-55_26E<gt> (not a real character)
      27 |  0000E014 | GREEK NON-SPACING IOTA BELOW E<lt>ISO-IR-55_27E<gt> (not a real character)
      30 |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      31 |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      32 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      33 |  0000201C | LEFT DOUBLE QUOTATION MARK
      34 |  00000374 | GREEK NUMERAL SIGN (Dexia keraia)
      35 |  00000375 | GREEK LOWER NUMERAL SIGN (Aristeri keraia)
      3B |  000000B7 | MIDDLE DOT
      3F |  0000003B | SEMICOLON
      41 |  00000391 | GREEK CAPITAL LETTER ALPHA
      42 |  00000392 | GREEK CAPITAL LETTER BETA
      44 |  00000393 | GREEK CAPITAL LETTER GAMMA
      45 |  00000394 | GREEK CAPITAL LETTER DELTA
      46 |  00000395 | GREEK CAPITAL LETTER EPSILON
      47 |  000003DA | GREEK LETTER STIGMA
      48 |  000003DC | GREEK LETTER DIGAMMA
      49 |  00000396 | GREEK CAPITAL LETTER ZETA
      4A |  00000397 | GREEK CAPITAL LETTER ETA
      4B |  00000398 | GREEK CAPITAL LETTER THETA
      4C |  00000399 | GREEK CAPITAL LETTER IOTA
      4D |  0000039A | GREEK CAPITAL LETTER KAPPA
      4E |  0000039B | GREEK CAPITAL LETTER LAMDA
      4F |  0000039C | GREEK CAPITAL LETTER MU
      50 |  0000039D | GREEK CAPITAL LETTER NU
      51 |  0000039E | GREEK CAPITAL LETTER XI
      52 |  0000039F | GREEK CAPITAL LETTER OMICRON
      53 |  000003A0 | GREEK CAPITAL LETTER PI
      54 |  000003DE | GREEK LETTER KOPPA
      55 |  000003A1 | GREEK CAPITAL LETTER RHO
      56 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      58 |  000003A4 | GREEK CAPITAL LETTER TAU
      59 |  000003A5 | GREEK CAPITAL LETTER UPSILON
      5A |  000003A6 | GREEK CAPITAL LETTER PHI
      5B |  000003A7 | GREEK CAPITAL LETTER CHI
      5C |  000003A8 | GREEK CAPITAL LETTER PSI
      5D |  000003A9 | GREEK CAPITAL LETTER OMEGA
      5E |  000003E0 | GREEK LETTER SAMPI
      61 |  000003B1 | GREEK SMALL LETTER ALPHA
      62 |  000003B2 | GREEK SMALL LETTER BETA
      63 |  000003D0 | GREEK BETA SYMBOL
      64 |  000003B3 | GREEK SMALL LETTER GAMMA
      65 |  000003B4 | GREEK SMALL LETTER DELTA
      66 |  000003B5 | GREEK SMALL LETTER EPSILON
      67 |  0000E01A | GREEK SMALL LETTER STIGMA E<lt>ISO-IR-55_47E<gt>
      68 |  0000E01B | GREEK SMALL LETTER DIGAMMA E<lt>ISO-IR-55_48E<gt>
      69 |  000003B6 | GREEK SMALL LETTER ZETA
      6A |  000003B7 | GREEK SMALL LETTER ETA
      6B |  000003B8 | GREEK SMALL LETTER THETA
      6C |  000003B9 | GREEK SMALL LETTER IOTA
      6D |  000003BA | GREEK SMALL LETTER KAPPA
      6E |  000003BB | GREEK SMALL LETTER LAMDA
      6F |  000003BC | GREEK SMALL LETTER MU
      70 |  000003BD | GREEK SMALL LETTER NU
      71 |  000003BE | GREEK SMALL LETTER XI
      72 |  000003BF | GREEK SMALL LETTER OMICRON
      73 |  000003C0 | GREEK SMALL LETTER PI
      74 |  0000E01C | GREEK SMALL LETTER KOPPA E<lt>ISO-IR-55_54E<gt>
      75 |  000003C1 | GREEK SMALL LETTER RHO
      76 |  000003C3 | GREEK SMALL LETTER SIGMA
      77 |  000003C2 | GREEK SMALL LETTER FINAL SIGMA
      78 |  000003C4 | GREEK SMALL LETTER TAU
      79 |  000003C5 | GREEK SMALL LETTER UPSILON
      7A |  000003C6 | GREEK SMALL LETTER PHI
      7B |  000003C7 | GREEK SMALL LETTER CHI
      7C |  000003C8 | GREEK SMALL LETTER PSI
      7D |  000003C9 | GREEK SMALL LETTER OMEGA
      7E |  0000E01D | GREEK SMALL LETTER SAMPI E<lt>ISO-IR-55_5EE<gt>
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_5428

    $main::fatpacked{"Locale/RecodeData/ISO_8859_1.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_8859_1';
  #! /bin/false
  
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO-8859-1.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_8859_1;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  use constant TO_UTF8 => [
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xc2\xa1",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa4",
      "\xc2\xa5",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc2\xa9",
      "\xc2\xaa",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xc2\xaf",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xc2\xb4",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xc2\xb8",
      "\xc2\xb9",
      "\xc2\xba",
      "\xc2\xbb",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc2\xbf",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x82",
      "\xc3\x83",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x86",
      "\xc3\x87",
      "\xc3\x88",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x8c",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x90",
      "\xc3\x91",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x94",
      "\xc3\x95",
      "\xc3\x96",
      "\xc3\x97",
      "\xc3\x98",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc3\x9f",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc3\xa3",
      "\xc3\xa4",
      "\xc3\xa5",
      "\xc3\xa6",
      "\xc3\xa7",
      "\xc3\xa8",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xac",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb0",
      "\xc3\xb1",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc3\xb5",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc3\xb8",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc3\xbf",
  ];
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		# FIXME: Maybe the lookup is cheaper than the call to chr().
  		$_[1] = join '', 
  		    map $_ > 255 ? "\x3f" : chr $_,
  			    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8') {
  		$_[1] = join '', map TO_UTF8->[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ unpack 'C*', $_[1] ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_8859_1 - Conversion routines for ISO-8859-1
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module contains the conversion tables and routines for ISO-8859-1.
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  000000A1 | INVERTED EXCLAMATION MARK
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  000000A5 | YEN SIGN
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  000000AA | FEMININE ORDINAL INDICATOR
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  000000AF | MACRON
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  000000B3 | SUPERSCRIPT THREE
      B4 |  000000B4 | ACUTE ACCENT
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  000000B8 | CEDILLA
      B9 |  000000B9 | SUPERSCRIPT ONE
      BA |  000000BA | MASCULINE ORDINAL INDICATOR
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  000000BC | VULGAR FRACTION ONE QUARTER
      BD |  000000BD | VULGAR FRACTION ONE HALF
      BE |  000000BE | VULGAR FRACTION THREE QUARTERS
      BF |  000000BF | INVERTED QUESTION MARK
      C0 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C3 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      C6 |  000000C6 | LATIN CAPITAL LETTER AE
      C7 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      C8 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      CB |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      CC |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      CF |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      D0 |  000000D0 | LATIN CAPITAL LETTER ETH
      D1 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      D2 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  000000D7 | MULTIPLICATION SIGN
      D8 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      D9 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      DE |  000000DE | LATIN CAPITAL LETTER THORN
      DF |  000000DF | LATIN SMALL LETTER SHARP S
      E0 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      E6 |  000000E6 | LATIN SMALL LETTER AE
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      F0 |  000000F0 | LATIN SMALL LETTER ETH
      F1 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      F2 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  000000F7 | DIVISION SIGN
      F8 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      F9 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      FE |  000000FE | LATIN SMALL LETTER THORN
      FF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_8859_1

    $main::fatpacked{"Locale/RecodeData/ISO_8859_10.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_8859_10';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO-8859-10.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_8859_10;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0x0104,
      0x0112,
      0x0122,
      0x012a,
      0x0128,
      0x0136,
      0x00a7,
      0x013b,
      0x0110,
      0x0160,
      0x0166,
      0x017d,
      0x00ad,
      0x016a,
      0x014a,
      0x00b0,
      0x0105,
      0x0113,
      0x0123,
      0x012b,
      0x0129,
      0x0137,
      0x00b7,
      0x013c,
      0x0111,
      0x0161,
      0x0167,
      0x017e,
      0x2015,
      0x016b,
      0x014b,
      0x0100,
      0x00c1,
      0x00c2,
      0x00c3,
      0x00c4,
      0x00c5,
      0x00c6,
      0x012e,
      0x010c,
      0x00c9,
      0x0118,
      0x00cb,
      0x0116,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00d0,
      0x0145,
      0x014c,
      0x00d3,
      0x00d4,
      0x00d5,
      0x00d6,
      0x0168,
      0x00d8,
      0x0172,
      0x00da,
      0x00db,
      0x00dc,
      0x00dd,
      0x00de,
      0x00df,
      0x0101,
      0x00e1,
      0x00e2,
      0x00e3,
      0x00e4,
      0x00e5,
      0x00e6,
      0x012f,
      0x010d,
      0x00e9,
      0x0119,
      0x00eb,
      0x0117,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00f0,
      0x0146,
      0x014d,
      0x00f3,
      0x00f4,
      0x00f5,
      0x00f6,
      0x0169,
      0x00f8,
      0x0173,
      0x00fa,
      0x00fb,
      0x00fc,
      0x00fd,
      0x00fe,
      0x0138,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xc4\x84",
      "\xc4\x92",
      "\xc4\xa2",
      "\xc4\xaa",
      "\xc4\xa8",
      "\xc4\xb6",
      "\xc2\xa7",
      "\xc4\xbb",
      "\xc4\x90",
      "\xc5\xa0",
      "\xc5\xa6",
      "\xc5\xbd",
      "\xc2\xad",
      "\xc5\xaa",
      "\xc5\x8a",
      "\xc2\xb0",
      "\xc4\x85",
      "\xc4\x93",
      "\xc4\xa3",
      "\xc4\xab",
      "\xc4\xa9",
      "\xc4\xb7",
      "\xc2\xb7",
      "\xc4\xbc",
      "\xc4\x91",
      "\xc5\xa1",
      "\xc5\xa7",
      "\xc5\xbe",
      "\xe2\x80\x95",
      "\xc5\xab",
      "\xc5\x8b",
      "\xc4\x80",
      "\xc3\x81",
      "\xc3\x82",
      "\xc3\x83",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x86",
      "\xc4\xae",
      "\xc4\x8c",
      "\xc3\x89",
      "\xc4\x98",
      "\xc3\x8b",
      "\xc4\x96",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x90",
      "\xc5\x85",
      "\xc5\x8c",
      "\xc3\x93",
      "\xc3\x94",
      "\xc3\x95",
      "\xc3\x96",
      "\xc5\xa8",
      "\xc3\x98",
      "\xc5\xb2",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc3\x9f",
      "\xc4\x81",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc3\xa3",
      "\xc3\xa4",
      "\xc3\xa5",
      "\xc3\xa6",
      "\xc4\xaf",
      "\xc4\x8d",
      "\xc3\xa9",
      "\xc4\x99",
      "\xc3\xab",
      "\xc4\x97",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb0",
      "\xc5\x86",
      "\xc5\x8d",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc3\xb5",
      "\xc3\xb6",
      "\xc5\xa9",
      "\xc3\xb8",
      "\xc5\xb3",
      "\xc3\xba",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc4\xb8",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000a7 => "\xa7",
      0x000000ad => "\xad",
      0x000000b0 => "\xb0",
      0x000000b7 => "\xb7",
      0x000000c1 => "\xc1",
      0x000000c2 => "\xc2",
      0x000000c3 => "\xc3",
      0x000000c4 => "\xc4",
      0x000000c5 => "\xc5",
      0x000000c6 => "\xc6",
      0x000000c9 => "\xc9",
      0x000000cb => "\xcb",
      0x000000cd => "\xcd",
      0x000000ce => "\xce",
      0x000000cf => "\xcf",
      0x000000d0 => "\xd0",
      0x000000d3 => "\xd3",
      0x000000d4 => "\xd4",
      0x000000d5 => "\xd5",
      0x000000d6 => "\xd6",
      0x000000d8 => "\xd8",
      0x000000da => "\xda",
      0x000000db => "\xdb",
      0x000000dc => "\xdc",
      0x000000dd => "\xdd",
      0x000000de => "\xde",
      0x000000df => "\xdf",
      0x000000e1 => "\xe1",
      0x000000e2 => "\xe2",
      0x000000e3 => "\xe3",
      0x000000e4 => "\xe4",
      0x000000e5 => "\xe5",
      0x000000e6 => "\xe6",
      0x000000e9 => "\xe9",
      0x000000eb => "\xeb",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000ef => "\xef",
      0x000000f0 => "\xf0",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f5 => "\xf5",
      0x000000f6 => "\xf6",
      0x000000f8 => "\xf8",
      0x000000fa => "\xfa",
      0x000000fb => "\xfb",
      0x000000fc => "\xfc",
      0x000000fd => "\xfd",
      0x000000fe => "\xfe",
      0x00000100 => "\xc0",
      0x00000101 => "\xe0",
      0x00000104 => "\xa1",
      0x00000105 => "\xb1",
      0x0000010c => "\xc8",
      0x0000010d => "\xe8",
      0x00000110 => "\xa9",
      0x00000111 => "\xb9",
      0x00000112 => "\xa2",
      0x00000113 => "\xb2",
      0x00000116 => "\xcc",
      0x00000117 => "\xec",
      0x00000118 => "\xca",
      0x00000119 => "\xea",
      0x00000122 => "\xa3",
      0x00000123 => "\xb3",
      0x00000128 => "\xa5",
      0x00000129 => "\xb5",
      0x0000012a => "\xa4",
      0x0000012b => "\xb4",
      0x0000012e => "\xc7",
      0x0000012f => "\xe7",
      0x00000136 => "\xa6",
      0x00000137 => "\xb6",
      0x00000138 => "\xff",
      0x0000013b => "\xa8",
      0x0000013c => "\xb8",
      0x00000145 => "\xd1",
      0x00000146 => "\xf1",
      0x0000014a => "\xaf",
      0x0000014b => "\xbf",
      0x0000014c => "\xd2",
      0x0000014d => "\xf2",
      0x00000160 => "\xaa",
      0x00000161 => "\xba",
      0x00000166 => "\xab",
      0x00000167 => "\xbb",
      0x00000168 => "\xd7",
      0x00000169 => "\xf7",
      0x0000016a => "\xae",
      0x0000016b => "\xbe",
      0x00000172 => "\xd9",
      0x00000173 => "\xf9",
      0x0000017d => "\xac",
      0x0000017e => "\xbc",
      0x00002015 => "\xbd",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_8859_10 - Conversion routines for ISO-8859-10
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO-8859-10.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-157
   alias ISO_8859-10:1992
   alias ISO_8859-10
   alias L6
   alias LATIN6
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  00000104 | LATIN CAPITAL LETTER A WITH OGONEK
      A2 |  00000112 | LATIN CAPITAL LETTER E WITH MACRON
      A3 |  00000122 | LATIN CAPITAL LETTER G WITH CEDILLA
      A4 |  0000012A | LATIN CAPITAL LETTER I WITH MACRON
      A5 |  00000128 | LATIN CAPITAL LETTER I WITH TILDE
      A6 |  00000136 | LATIN CAPITAL LETTER K WITH CEDILLA
      A7 |  000000A7 | SECTION SIGN
      A8 |  0000013B | LATIN CAPITAL LETTER L WITH CEDILLA
      A9 |  00000110 | LATIN CAPITAL LETTER D WITH STROKE
      AA |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      AB |  00000166 | LATIN CAPITAL LETTER T WITH STROKE
      AC |  0000017D | LATIN CAPITAL LETTER Z WITH CARON
      AD |  000000AD | SOFT HYPHEN
      AE |  0000016A | LATIN CAPITAL LETTER U WITH MACRON
      AF |  0000014A | LATIN CAPITAL LETTER ENG (Sami)
      B0 |  000000B0 | DEGREE SIGN
      B1 |  00000105 | LATIN SMALL LETTER A WITH OGONEK
      B2 |  00000113 | LATIN SMALL LETTER E WITH MACRON
      B3 |  00000123 | LATIN SMALL LETTER G WITH CEDILLA
      B4 |  0000012B | LATIN SMALL LETTER I WITH MACRON
      B5 |  00000129 | LATIN SMALL LETTER I WITH TILDE
      B6 |  00000137 | LATIN SMALL LETTER K WITH CEDILLA
      B7 |  000000B7 | MIDDLE DOT
      B8 |  0000013C | LATIN SMALL LETTER L WITH CEDILLA
      B9 |  00000111 | LATIN SMALL LETTER D WITH STROKE
      BA |  00000161 | LATIN SMALL LETTER S WITH CARON
      BB |  00000167 | LATIN SMALL LETTER T WITH STROKE
      BC |  0000017E | LATIN SMALL LETTER Z WITH CARON
      BD |  00002015 | HORIZONTAL BAR
      BE |  0000016B | LATIN SMALL LETTER U WITH MACRON
      BF |  0000014B | LATIN SMALL LETTER ENG (Sami)
      C0 |  00000100 | LATIN CAPITAL LETTER A WITH MACRON
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C3 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      C6 |  000000C6 | LATIN CAPITAL LETTER AE
      C7 |  0000012E | LATIN CAPITAL LETTER I WITH OGONEK
      C8 |  0000010C | LATIN CAPITAL LETTER C WITH CARON
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  00000118 | LATIN CAPITAL LETTER E WITH OGONEK
      CB |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      CC |  00000116 | LATIN CAPITAL LETTER E WITH DOT ABOVE
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      CF |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      D0 |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      D1 |  00000145 | LATIN CAPITAL LETTER N WITH CEDILLA
      D2 |  0000014C | LATIN CAPITAL LETTER O WITH MACRON
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  00000168 | LATIN CAPITAL LETTER U WITH TILDE
      D8 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      D9 |  00000172 | LATIN CAPITAL LETTER U WITH OGONEK
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      DE |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      DF |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E0 |  00000101 | LATIN SMALL LETTER A WITH MACRON
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      E6 |  000000E6 | LATIN SMALL LETTER AE
      E7 |  0000012F | LATIN SMALL LETTER I WITH OGONEK
      E8 |  0000010D | LATIN SMALL LETTER C WITH CARON
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  00000119 | LATIN SMALL LETTER E WITH OGONEK
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  00000117 | LATIN SMALL LETTER E WITH DOT ABOVE
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      F0 |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      F1 |  00000146 | LATIN SMALL LETTER N WITH CEDILLA
      F2 |  0000014D | LATIN SMALL LETTER O WITH MACRON
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  00000169 | LATIN SMALL LETTER U WITH TILDE
      F8 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      F9 |  00000173 | LATIN SMALL LETTER U WITH OGONEK
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      FE |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      FF |  00000138 | LATIN SMALL LETTER KRA (Greenlandic)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_8859_10

    $main::fatpacked{"Locale/RecodeData/ISO_8859_11.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_8859_11';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO-8859-11.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_8859_11;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
  	0xfffd,
      0x00a0,
      0x0e01,
      0x0e02,
      0x0e03,
      0x0e04,
      0x0e05,
      0x0e06,
      0x0e07,
      0x0e08,
      0x0e09,
      0x0e0a,
      0x0e0b,
      0x0e0c,
      0x0e0d,
      0x0e0e,
      0x0e0f,
      0x0e10,
      0x0e11,
      0x0e12,
      0x0e13,
      0x0e14,
      0x0e15,
      0x0e16,
      0x0e17,
      0x0e18,
      0x0e19,
      0x0e1a,
      0x0e1b,
      0x0e1c,
      0x0e1d,
      0x0e1e,
      0x0e1f,
      0x0e20,
      0x0e21,
      0x0e22,
      0x0e23,
      0x0e24,
      0x0e25,
      0x0e26,
      0x0e27,
      0x0e28,
      0x0e29,
      0x0e2a,
      0x0e2b,
      0x0e2c,
      0x0e2d,
      0x0e2e,
      0x0e2f,
      0x0e30,
      0x0e31,
      0x0e32,
      0x0e33,
      0x0e34,
      0x0e35,
      0x0e36,
      0x0e37,
      0x0e38,
      0x0e39,
      0x0e3a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0e3f,
      0x0e40,
      0x0e41,
      0x0e42,
      0x0e43,
      0x0e44,
      0x0e45,
      0x0e46,
      0x0e47,
      0x0e48,
      0x0e49,
      0x0e4a,
      0x0e4b,
      0x0e4c,
      0x0e4d,
      0x0e4e,
      0x0e4f,
      0x0e50,
      0x0e51,
      0x0e52,
      0x0e53,
      0x0e54,
      0x0e55,
      0x0e56,
      0x0e57,
      0x0e58,
      0x0e59,
      0x0e5a,
      0x0e5b,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa0",
      "\xe0\xb8\x81",
      "\xe0\xb8\x82",
      "\xe0\xb8\x83",
      "\xe0\xb8\x84",
      "\xe0\xb8\x85",
      "\xe0\xb8\x86",
      "\xe0\xb8\x87",
      "\xe0\xb8\x88",
      "\xe0\xb8\x89",
      "\xe0\xb8\x8a",
      "\xe0\xb8\x8b",
      "\xe0\xb8\x8c",
      "\xe0\xb8\x8d",
      "\xe0\xb8\x8e",
      "\xe0\xb8\x8f",
      "\xe0\xb8\x90",
      "\xe0\xb8\x91",
      "\xe0\xb8\x92",
      "\xe0\xb8\x93",
      "\xe0\xb8\x94",
      "\xe0\xb8\x95",
      "\xe0\xb8\x96",
      "\xe0\xb8\x97",
      "\xe0\xb8\x98",
      "\xe0\xb8\x99",
      "\xe0\xb8\x9a",
      "\xe0\xb8\x9b",
      "\xe0\xb8\x9c",
      "\xe0\xb8\x9d",
      "\xe0\xb8\x9e",
      "\xe0\xb8\x9f",
      "\xe0\xb8\xa0",
      "\xe0\xb8\xa1",
      "\xe0\xb8\xa2",
      "\xe0\xb8\xa3",
      "\xe0\xb8\xa4",
      "\xe0\xb8\xa5",
      "\xe0\xb8\xa6",
      "\xe0\xb8\xa7",
      "\xe0\xb8\xa8",
      "\xe0\xb8\xa9",
      "\xe0\xb8\xaa",
      "\xe0\xb8\xab",
      "\xe0\xb8\xac",
      "\xe0\xb8\xad",
      "\xe0\xb8\xae",
      "\xe0\xb8\xaf",
      "\xe0\xb8\xb0",
      "\xe0\xb8\xb1",
      "\xe0\xb8\xb2",
      "\xe0\xb8\xb3",
      "\xe0\xb8\xb4",
      "\xe0\xb8\xb5",
      "\xe0\xb8\xb6",
      "\xe0\xb8\xb7",
      "\xe0\xb8\xb8",
      "\xe0\xb8\xb9",
      "\xe0\xb8\xba",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe0\xb8\xbf",
      "\xe0\xb9\x80",
      "\xe0\xb9\x81",
      "\xe0\xb9\x82",
      "\xe0\xb9\x83",
      "\xe0\xb9\x84",
      "\xe0\xb9\x85",
      "\xe0\xb9\x86",
      "\xe0\xb9\x87",
      "\xe0\xb9\x88",
      "\xe0\xb9\x89",
      "\xe0\xb9\x8a",
      "\xe0\xb9\x8b",
      "\xe0\xb9\x8c",
      "\xe0\xb9\x8d",
      "\xe0\xb9\x8e",
      "\xe0\xb9\x8f",
      "\xe0\xb9\x90",
      "\xe0\xb9\x91",
      "\xe0\xb9\x92",
      "\xe0\xb9\x93",
      "\xe0\xb9\x94",
      "\xe0\xb9\x95",
      "\xe0\xb9\x96",
      "\xe0\xb9\x97",
      "\xe0\xb9\x98",
      "\xe0\xb9\x99",
      "\xe0\xb9\x9a",
      "\xe0\xb9\x9b",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xa0",
      0x00000e01 => "\xa1",
      0x00000e02 => "\xa2",
      0x00000e03 => "\xa3",
      0x00000e04 => "\xa4",
      0x00000e05 => "\xa5",
      0x00000e06 => "\xa6",
      0x00000e07 => "\xa7",
      0x00000e08 => "\xa8",
      0x00000e09 => "\xa9",
      0x00000e0a => "\xaa",
      0x00000e0b => "\xab",
      0x00000e0c => "\xac",
      0x00000e0d => "\xad",
      0x00000e0e => "\xae",
      0x00000e0f => "\xaf",
      0x00000e10 => "\xb0",
      0x00000e11 => "\xb1",
      0x00000e12 => "\xb2",
      0x00000e13 => "\xb3",
      0x00000e14 => "\xb4",
      0x00000e15 => "\xb5",
      0x00000e16 => "\xb6",
      0x00000e17 => "\xb7",
      0x00000e18 => "\xb8",
      0x00000e19 => "\xb9",
      0x00000e1a => "\xba",
      0x00000e1b => "\xbb",
      0x00000e1c => "\xbc",
      0x00000e1d => "\xbd",
      0x00000e1e => "\xbe",
      0x00000e1f => "\xbf",
      0x00000e20 => "\xc0",
      0x00000e21 => "\xc1",
      0x00000e22 => "\xc2",
      0x00000e23 => "\xc3",
      0x00000e24 => "\xc4",
      0x00000e25 => "\xc5",
      0x00000e26 => "\xc6",
      0x00000e27 => "\xc7",
      0x00000e28 => "\xc8",
      0x00000e29 => "\xc9",
      0x00000e2a => "\xca",
      0x00000e2b => "\xcb",
      0x00000e2c => "\xcc",
      0x00000e2d => "\xcd",
      0x00000e2e => "\xce",
      0x00000e2f => "\xcf",
      0x00000e30 => "\xd0",
      0x00000e31 => "\xd1",
      0x00000e32 => "\xd2",
      0x00000e33 => "\xd3",
      0x00000e34 => "\xd4",
      0x00000e35 => "\xd5",
      0x00000e36 => "\xd6",
      0x00000e37 => "\xd7",
      0x00000e38 => "\xd8",
      0x00000e39 => "\xd9",
      0x00000e3a => "\xda",
      0x00000e3f => "\xdf",
      0x00000e40 => "\xe0",
      0x00000e41 => "\xe1",
      0x00000e42 => "\xe2",
      0x00000e43 => "\xe3",
      0x00000e44 => "\xe4",
      0x00000e45 => "\xe5",
      0x00000e46 => "\xe6",
      0x00000e47 => "\xe7",
      0x00000e48 => "\xe8",
      0x00000e49 => "\xe9",
      0x00000e4a => "\xea",
      0x00000e4b => "\xeb",
      0x00000e4c => "\xec",
      0x00000e4d => "\xed",
      0x00000e4e => "\xee",
      0x00000e4f => "\xef",
      0x00000e50 => "\xf0",
      0x00000e51 => "\xf1",
      0x00000e52 => "\xf2",
      0x00000e53 => "\xf3",
      0x00000e54 => "\xf4",
      0x00000e55 => "\xf5",
      0x00000e56 => "\xf6",
      0x00000e57 => "\xf7",
      0x00000e58 => "\xf8",
      0x00000e59 => "\xf9",
      0x00000e5a => "\xfa",
      0x00000e5b => "\xfb",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_8859_11 - Conversion routines for ISO-8859-11
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO-8859-11.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   source: Guido Flohr E<lt>guido.flohr@cantanea.comE<gt>
  
   The encoding ISO-8859-11 is not yet official at the time of this writing.
   It is based on TIS-620, but with the addition of the non-breaking space.
  
   The mapping of 0xfc-0xff is identical to Latin-1 but this should be
   checked.
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  00000E01 | THAI CHARACTER KO KAI
      A2 |  00000E02 | THAI CHARACTER KHO KHAI
      A3 |  00000E03 | THAI CHARACTER KHO KHUAT
      A4 |  00000E04 | THAI CHARACTER KHO KHWAI
      A5 |  00000E05 | THAI CHARACTER KHO KHON
      A6 |  00000E06 | THAI CHARACTER KHO RAKHANG
      A7 |  00000E07 | THAI CHARACTER NGO NGU
      A8 |  00000E08 | THAI CHARACTER CHO CHAN
      A9 |  00000E09 | THAI CHARACTER CHO CHING
      AA |  00000E0A | THAI CHARACTER CHO CHANG
      AB |  00000E0B | THAI CHARACTER SO SO
      AC |  00000E0C | THAI CHARACTER CHO CHOE
      AD |  00000E0D | THAI CHARACTER YO YING
      AE |  00000E0E | THAI CHARACTER DO CHADA
      AF |  00000E0F | THAI CHARACTER TO PATAK
      B0 |  00000E10 | THAI CHARACTER THO THAN
      B1 |  00000E11 | THAI CHARACTER THO NANGMONTHO
      B2 |  00000E12 | THAI CHARACTER THO PHUTHAO
      B3 |  00000E13 | THAI CHARACTER NO NEN
      B4 |  00000E14 | THAI CHARACTER DO DEK
      B5 |  00000E15 | THAI CHARACTER TO TAO
      B6 |  00000E16 | THAI CHARACTER THO THUNG
      B7 |  00000E17 | THAI CHARACTER THO THAHAN
      B8 |  00000E18 | THAI CHARACTER THO THONG
      B9 |  00000E19 | THAI CHARACTER NO NU
      BA |  00000E1A | THAI CHARACTER BO BAIMAI
      BB |  00000E1B | THAI CHARACTER PO PLA
      BC |  00000E1C | THAI CHARACTER PHO PHUNG
      BD |  00000E1D | THAI CHARACTER FO FA
      BE |  00000E1E | THAI CHARACTER PHO PHAN
      BF |  00000E1F | THAI CHARACTER FO FAN
      C0 |  00000E20 | THAI CHARACTER PHO SAMPHAO
      C1 |  00000E21 | THAI CHARACTER MO MA
      C2 |  00000E22 | THAI CHARACTER YO YAK
      C3 |  00000E23 | THAI CHARACTER RO RUA
      C4 |  00000E24 | THAI CHARACTER RU
      C5 |  00000E25 | THAI CHARACTER LO LING
      C6 |  00000E26 | THAI CHARACTER LU
      C7 |  00000E27 | THAI CHARACTER WO WAEN
      C8 |  00000E28 | THAI CHARACTER SO SALA
      C9 |  00000E29 | THAI CHARACTER SO RUSI
      CA |  00000E2A | THAI CHARACTER SO SUA
      CB |  00000E2B | THAI CHARACTER HO HIP
      CC |  00000E2C | THAI CHARACTER LO CHULA
      CD |  00000E2D | THAI CHARACTER O ANG
      CE |  00000E2E | THAI CHARACTER HO NOKHUK
      CF |  00000E2F | THAI CHARACTER PAIYANNOI
      D0 |  00000E30 | THAI CHARACTER SARA A
      D1 |  00000E31 | THAI CHARACTER MAI HAN-AKAT
      D2 |  00000E32 | THAI CHARACTER SARA AA
      D3 |  00000E33 | THAI CHARACTER SARA AM
      D4 |  00000E34 | THAI CHARACTER SARA I
      D5 |  00000E35 | THAI CHARACTER SARA II
      D6 |  00000E36 | THAI CHARACTER SARA UE
      D7 |  00000E37 | THAI CHARACTER SARA UEE
      D8 |  00000E38 | THAI CHARACTER SARA U
      D9 |  00000E39 | THAI CHARACTER SARA UU
      DA |  00000E3A | THAI CHARACTER PHINTHU
      DF |  00000E3F | THAI CHARACTER SYMBOL BAHT
      E0 |  00000E40 | THAI CHARACTER SARA E
      E1 |  00000E41 | THAI CHARACTER SARA AE
      E2 |  00000E42 | THAI CHARACTER SARA O
      E3 |  00000E43 | THAI CHARACTER SARA AI MAIMUAN
      E4 |  00000E44 | THAI CHARACTER SARA AI MAIMALAI
      E5 |  00000E45 | THAI CHARACTER LAKKHANGYAO
      E6 |  00000E46 | THAI CHARACTER MAIYAMOK
      E7 |  00000E47 | THAI CHARACTER MAITAIKHU
      E8 |  00000E48 | THAI CHARACTER MAI EK
      E9 |  00000E49 | THAI CHARACTER MAI THO
      EA |  00000E4A | THAI CHARACTER MAI TRI
      EB |  00000E4B | THAI CHARACTER MAI CHATTAWA
      EC |  00000E4C | THAI CHARACTER THANTHAKHAT
      ED |  00000E4D | THAI CHARACTER NIKHAHIT
      EE |  00000E4E | THAI CHARACTER YAMAKKAN
      EF |  00000E4F | THAI CHARACTER FONGMAN
      F0 |  00000E50 | THAI DIGIT ZERO
      F1 |  00000E51 | THAI DIGIT ONE
      F2 |  00000E52 | THAI DIGIT TWO
      F3 |  00000E53 | THAI DIGIT THREE
      F4 |  00000E54 | THAI DIGIT FOUR
      F5 |  00000E55 | THAI DIGIT FIVE
      F6 |  00000E56 | THAI DIGIT SIX
      F7 |  00000E57 | THAI DIGIT SEVEN
      F8 |  00000E58 | THAI DIGIT EIGHT
      F9 |  00000E59 | THAI DIGIT NINE
      FA |  00000E5A | THAI CHARACTER ANGKHANKHU
      FB |  00000E5B | THAI CHARACTER KHOMUT
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_8859_11

    $main::fatpacked{"Locale/RecodeData/ISO_8859_13.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_8859_13';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO-8859-13.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_8859_13;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0x201d,
      0x00a2,
      0x00a3,
      0x00a4,
      0x201e,
      0x00a6,
      0x00a7,
      0x00d8,
      0x00a9,
      0x0156,
      0x00ab,
      0x00ac,
      0x00ad,
      0x00ae,
      0x00c6,
      0x00b0,
      0x00b1,
      0x00b2,
      0x00b3,
      0x201c,
      0x00b5,
      0x00b6,
      0x00b7,
      0x00f8,
      0x00b9,
      0x0157,
      0x00bb,
      0x00bc,
      0x00bd,
      0x00be,
      0x00e6,
      0x0104,
      0x012e,
      0x0100,
      0x0106,
      0x00c4,
      0x00c5,
      0x0118,
      0x0112,
      0x010c,
      0x00c9,
      0x0179,
      0x0116,
      0x0122,
      0x0136,
      0x012a,
      0x013b,
      0x0160,
      0x0143,
      0x0145,
      0x00d3,
      0x014c,
      0x00d5,
      0x00d6,
      0x00d7,
      0x0172,
      0x0141,
      0x015a,
      0x016a,
      0x00dc,
      0x017b,
      0x017d,
      0x00df,
      0x0105,
      0x012f,
      0x0101,
      0x0107,
      0x00e4,
      0x00e5,
      0x0119,
      0x0113,
      0x010d,
      0x00e9,
      0x017a,
      0x0117,
      0x0123,
      0x0137,
      0x012b,
      0x013c,
      0x0161,
      0x0144,
      0x0146,
      0x00f3,
      0x014d,
      0x00f5,
      0x00f6,
      0x00f7,
      0x0173,
      0x0142,
      0x015b,
      0x016b,
      0x00fc,
      0x017c,
      0x017e,
      0x2019,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xe2\x80\x9d",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa4",
      "\xe2\x80\x9e",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xc3\x98",
      "\xc2\xa9",
      "\xc5\x96",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xc3\x86",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xe2\x80\x9c",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xc3\xb8",
      "\xc2\xb9",
      "\xc5\x97",
      "\xc2\xbb",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc3\xa6",
      "\xc4\x84",
      "\xc4\xae",
      "\xc4\x80",
      "\xc4\x86",
      "\xc3\x84",
      "\xc3\x85",
      "\xc4\x98",
      "\xc4\x92",
      "\xc4\x8c",
      "\xc3\x89",
      "\xc5\xb9",
      "\xc4\x96",
      "\xc4\xa2",
      "\xc4\xb6",
      "\xc4\xaa",
      "\xc4\xbb",
      "\xc5\xa0",
      "\xc5\x83",
      "\xc5\x85",
      "\xc3\x93",
      "\xc5\x8c",
      "\xc3\x95",
      "\xc3\x96",
      "\xc3\x97",
      "\xc5\xb2",
      "\xc5\x81",
      "\xc5\x9a",
      "\xc5\xaa",
      "\xc3\x9c",
      "\xc5\xbb",
      "\xc5\xbd",
      "\xc3\x9f",
      "\xc4\x85",
      "\xc4\xaf",
      "\xc4\x81",
      "\xc4\x87",
      "\xc3\xa4",
      "\xc3\xa5",
      "\xc4\x99",
      "\xc4\x93",
      "\xc4\x8d",
      "\xc3\xa9",
      "\xc5\xba",
      "\xc4\x97",
      "\xc4\xa3",
      "\xc4\xb7",
      "\xc4\xab",
      "\xc4\xbc",
      "\xc5\xa1",
      "\xc5\x84",
      "\xc5\x86",
      "\xc3\xb3",
      "\xc5\x8d",
      "\xc3\xb5",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc5\xb3",
      "\xc5\x82",
      "\xc5\x9b",
      "\xc5\xab",
      "\xc3\xbc",
      "\xc5\xbc",
      "\xc5\xbe",
      "\xe2\x80\x99",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xa4",
      0x000000a6 => "\xa6",
      0x000000a7 => "\xa7",
      0x000000a9 => "\xa9",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b2 => "\xb2",
      0x000000b3 => "\xb3",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000b9 => "\xb9",
      0x000000bb => "\xbb",
      0x000000bc => "\xbc",
      0x000000bd => "\xbd",
      0x000000be => "\xbe",
      0x000000c4 => "\xc4",
      0x000000c5 => "\xc5",
      0x000000c6 => "\xaf",
      0x000000c9 => "\xc9",
      0x000000d3 => "\xd3",
      0x000000d5 => "\xd5",
      0x000000d6 => "\xd6",
      0x000000d7 => "\xd7",
      0x000000d8 => "\xa8",
      0x000000dc => "\xdc",
      0x000000df => "\xdf",
      0x000000e4 => "\xe4",
      0x000000e5 => "\xe5",
      0x000000e6 => "\xbf",
      0x000000e9 => "\xe9",
      0x000000f3 => "\xf3",
      0x000000f5 => "\xf5",
      0x000000f6 => "\xf6",
      0x000000f7 => "\xf7",
      0x000000f8 => "\xb8",
      0x000000fc => "\xfc",
      0x00000100 => "\xc2",
      0x00000101 => "\xe2",
      0x00000104 => "\xc0",
      0x00000105 => "\xe0",
      0x00000106 => "\xc3",
      0x00000107 => "\xe3",
      0x0000010c => "\xc8",
      0x0000010d => "\xe8",
      0x00000112 => "\xc7",
      0x00000113 => "\xe7",
      0x00000116 => "\xcb",
      0x00000117 => "\xeb",
      0x00000118 => "\xc6",
      0x00000119 => "\xe6",
      0x00000122 => "\xcc",
      0x00000123 => "\xec",
      0x0000012a => "\xce",
      0x0000012b => "\xee",
      0x0000012e => "\xc1",
      0x0000012f => "\xe1",
      0x00000136 => "\xcd",
      0x00000137 => "\xed",
      0x0000013b => "\xcf",
      0x0000013c => "\xef",
      0x00000141 => "\xd9",
      0x00000142 => "\xf9",
      0x00000143 => "\xd1",
      0x00000144 => "\xf1",
      0x00000145 => "\xd2",
      0x00000146 => "\xf2",
      0x0000014c => "\xd4",
      0x0000014d => "\xf4",
      0x00000156 => "\xaa",
      0x00000157 => "\xba",
      0x0000015a => "\xda",
      0x0000015b => "\xfa",
      0x00000160 => "\xd0",
      0x00000161 => "\xf0",
      0x0000016a => "\xdb",
      0x0000016b => "\xfb",
      0x00000172 => "\xd8",
      0x00000173 => "\xf8",
      0x00000179 => "\xca",
      0x0000017a => "\xea",
      0x0000017b => "\xdd",
      0x0000017c => "\xfd",
      0x0000017d => "\xde",
      0x0000017e => "\xfe",
      0x00002019 => "\xff",
      0x0000201c => "\xb4",
      0x0000201d => "\xa1",
      0x0000201e => "\xa5",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_8859_13 - Conversion routines for ISO-8859-13
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO-8859-13.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   automatically generated from the charDB
   alias ISO-IR-179
   alias LATIN7
   alias L7
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL
      01 |  00000001 | START OF HEADING
      02 |  00000002 | START OF TEXT
      03 |  00000003 | END OF TEXT
      04 |  00000004 | END OF TRANSMISSION
      05 |  00000005 | ENQUIRY
      06 |  00000006 | ACKNOWLEDGE
      07 |  00000007 | BELL
      08 |  00000008 | BACKSPACE
      09 |  00000009 | HORIZONTAL TABULATION
      0A |  0000000A | LINE FEED
      0B |  0000000B | VERTICAL TABULATION
      0C |  0000000C | FORM FEED
      0D |  0000000D | CARRIAGE RETURN
      0E |  0000000E | SHIFT OUT
      0F |  0000000F | SHIFT IN
      10 |  00000010 | DATA LINK ESCAPE
      11 |  00000011 | DEVICE CONTROL ONE
      12 |  00000012 | DEVICE CONTROL TWO
      13 |  00000013 | DEVICE CONTROL THREE
      14 |  00000014 | DEVICE CONTROL FOUR
      15 |  00000015 | NEGATIVE ACKNOWLEDGE
      16 |  00000016 | SYNCHRONOUS IDLE
      17 |  00000017 | END OF TRANSMISSION BLOCK
      18 |  00000018 | CANCEL
      19 |  00000019 | END OF MEDIUM
      1A |  0000001A | SUBSTITUTE
      1B |  0000001B | ESCAPE
      1C |  0000001C | FILE SEPARATOR
      1D |  0000001D | GROUP SEPARATOR
      1E |  0000001E | RECORD SEPARATOR
      1F |  0000001F | UNIT SEPARATOR
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  00000156 | LATIN CAPITAL LETTER R WITH CEDILLA
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  000000C6 | LATIN CAPITAL LETTER AE
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  000000B3 | SUPERSCRIPT THREE
      B4 |  0000201C | LEFT DOUBLE QUOTATION MARK
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      B9 |  000000B9 | SUPERSCRIPT ONE
      BA |  00000157 | LATIN SMALL LETTER R WITH CEDILLA
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  000000BC | VULGAR FRACTION ONE QUARTER
      BD |  000000BD | VULGAR FRACTION ONE HALF
      BE |  000000BE | VULGAR FRACTION THREE QUARTERS
      BF |  000000E6 | LATIN SMALL LETTER AE
      C0 |  00000104 | LATIN CAPITAL LETTER A WITH OGONEK
      C1 |  0000012E | LATIN CAPITAL LETTER I WITH OGONEK
      C2 |  00000100 | LATIN CAPITAL LETTER A WITH MACRON
      C3 |  00000106 | LATIN CAPITAL LETTER C WITH ACUTE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      C6 |  00000118 | LATIN CAPITAL LETTER E WITH OGONEK
      C7 |  00000112 | LATIN CAPITAL LETTER E WITH MACRON
      C8 |  0000010C | LATIN CAPITAL LETTER C WITH CARON
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  00000179 | LATIN CAPITAL LETTER Z WITH ACUTE
      CB |  00000116 | LATIN CAPITAL LETTER E WITH DOT ABOVE
      CC |  00000122 | LATIN CAPITAL LETTER G WITH CEDILLA
      CD |  00000136 | LATIN CAPITAL LETTER K WITH CEDILLA
      CE |  0000012A | LATIN CAPITAL LETTER I WITH MACRON
      CF |  0000013B | LATIN CAPITAL LETTER L WITH CEDILLA
      D0 |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      D1 |  00000143 | LATIN CAPITAL LETTER N WITH ACUTE
      D2 |  00000145 | LATIN CAPITAL LETTER N WITH CEDILLA
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  0000014C | LATIN CAPITAL LETTER O WITH MACRON
      D5 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  000000D7 | MULTIPLICATION SIGN
      D8 |  00000172 | LATIN CAPITAL LETTER U WITH OGONEK
      D9 |  00000141 | LATIN CAPITAL LETTER L WITH STROKE
      DA |  0000015A | LATIN CAPITAL LETTER S WITH ACUTE
      DB |  0000016A | LATIN CAPITAL LETTER U WITH MACRON
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE
      DE |  0000017D | LATIN CAPITAL LETTER Z WITH CARON
      DF |  000000DF | LATIN SMALL LETTER SHARP S
      E0 |  00000105 | LATIN SMALL LETTER A WITH OGONEK
      E1 |  0000012F | LATIN SMALL LETTER I WITH OGONEK
      E2 |  00000101 | LATIN SMALL LETTER A WITH MACRON
      E3 |  00000107 | LATIN SMALL LETTER C WITH ACUTE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      E6 |  00000119 | LATIN SMALL LETTER E WITH OGONEK
      E7 |  00000113 | LATIN SMALL LETTER E WITH MACRON
      E8 |  0000010D | LATIN SMALL LETTER C WITH CARON
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  0000017A | LATIN SMALL LETTER Z WITH ACUTE
      EB |  00000117 | LATIN SMALL LETTER E WITH DOT ABOVE
      EC |  00000123 | LATIN SMALL LETTER G WITH CEDILLA
      ED |  00000137 | LATIN SMALL LETTER K WITH CEDILLA
      EE |  0000012B | LATIN SMALL LETTER I WITH MACRON
      EF |  0000013C | LATIN SMALL LETTER L WITH CEDILLA
      F0 |  00000161 | LATIN SMALL LETTER S WITH CARON
      F1 |  00000144 | LATIN SMALL LETTER N WITH ACUTE
      F2 |  00000146 | LATIN SMALL LETTER N WITH CEDILLA
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  0000014D | LATIN SMALL LETTER O WITH MACRON
      F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  000000F7 | DIVISION SIGN
      F8 |  00000173 | LATIN SMALL LETTER U WITH OGONEK
      F9 |  00000142 | LATIN SMALL LETTER L WITH STROKE
      FA |  0000015B | LATIN SMALL LETTER S WITH ACUTE
      FB |  0000016B | LATIN SMALL LETTER U WITH MACRON
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE
      FE |  0000017E | LATIN SMALL LETTER Z WITH CARON
      FF |  00002019 | RIGHT SINGLE QUOTATION MARK
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_8859_13

    $main::fatpacked{"Locale/RecodeData/ISO_8859_14.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_8859_14';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO-8859-14.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_8859_14;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0x1e02,
      0x1e03,
      0x00a3,
      0x010a,
      0x010b,
      0x1e0a,
      0x00a7,
      0x1e80,
      0x00a9,
      0x1e82,
      0x1e0b,
      0x1ef2,
      0x00ad,
      0x00ae,
      0x0178,
      0x1e1e,
      0x1e1f,
      0x0120,
      0x0121,
      0x1e40,
      0x1e41,
      0x00b6,
      0x1e56,
      0x1e81,
      0x1e57,
      0x1e83,
      0x1e60,
      0x1ef3,
      0x1e84,
      0x1e85,
      0x1e61,
      0x00c0,
      0x00c1,
      0x00c2,
      0x00c3,
      0x00c4,
      0x00c5,
      0x00c6,
      0x00c7,
      0x00c8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00cc,
      0x00cd,
      0x00ce,
      0x00cf,
      0x0174,
      0x00d1,
      0x00d2,
      0x00d3,
      0x00d4,
      0x00d5,
      0x00d6,
      0x1e6a,
      0x00d8,
      0x00d9,
      0x00da,
      0x00db,
      0x00dc,
      0x00dd,
      0x0176,
      0x00df,
      0x00e0,
      0x00e1,
      0x00e2,
      0x00e3,
      0x00e4,
      0x00e5,
      0x00e6,
      0x00e7,
      0x00e8,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00ec,
      0x00ed,
      0x00ee,
      0x00ef,
      0x0175,
      0x00f1,
      0x00f2,
      0x00f3,
      0x00f4,
      0x00f5,
      0x00f6,
      0x1e6b,
      0x00f8,
      0x00f9,
      0x00fa,
      0x00fb,
      0x00fc,
      0x00fd,
      0x0177,
      0x00ff,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xe1\xb8\x82",
      "\xe1\xb8\x83",
      "\xc2\xa3",
      "\xc4\x8a",
      "\xc4\x8b",
      "\xe1\xb8\x8a",
      "\xc2\xa7",
      "\xe1\xba\x80",
      "\xc2\xa9",
      "\xe1\xba\x82",
      "\xe1\xb8\x8b",
      "\xe1\xbb\xb2",
      "\xc2\xad",
      "\xc2\xae",
      "\xc5\xb8",
      "\xe1\xb8\x9e",
      "\xe1\xb8\x9f",
      "\xc4\xa0",
      "\xc4\xa1",
      "\xe1\xb9\x80",
      "\xe1\xb9\x81",
      "\xc2\xb6",
      "\xe1\xb9\x96",
      "\xe1\xba\x81",
      "\xe1\xb9\x97",
      "\xe1\xba\x83",
      "\xe1\xb9\xa0",
      "\xe1\xbb\xb3",
      "\xe1\xba\x84",
      "\xe1\xba\x85",
      "\xe1\xb9\xa1",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x82",
      "\xc3\x83",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x86",
      "\xc3\x87",
      "\xc3\x88",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x8c",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc5\xb4",
      "\xc3\x91",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x94",
      "\xc3\x95",
      "\xc3\x96",
      "\xe1\xb9\xaa",
      "\xc3\x98",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x9d",
      "\xc5\xb6",
      "\xc3\x9f",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc3\xa3",
      "\xc3\xa4",
      "\xc3\xa5",
      "\xc3\xa6",
      "\xc3\xa7",
      "\xc3\xa8",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xac",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc5\xb5",
      "\xc3\xb1",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc3\xb5",
      "\xc3\xb6",
      "\xe1\xb9\xab",
      "\xc3\xb8",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xbd",
      "\xc5\xb7",
      "\xc3\xbf",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000a3 => "\xa3",
      0x000000a7 => "\xa7",
      0x000000a9 => "\xa9",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000b6 => "\xb6",
      0x000000c0 => "\xc0",
      0x000000c1 => "\xc1",
      0x000000c2 => "\xc2",
      0x000000c3 => "\xc3",
      0x000000c4 => "\xc4",
      0x000000c5 => "\xc5",
      0x000000c6 => "\xc6",
      0x000000c7 => "\xc7",
      0x000000c8 => "\xc8",
      0x000000c9 => "\xc9",
      0x000000ca => "\xca",
      0x000000cb => "\xcb",
      0x000000cc => "\xcc",
      0x000000cd => "\xcd",
      0x000000ce => "\xce",
      0x000000cf => "\xcf",
      0x000000d1 => "\xd1",
      0x000000d2 => "\xd2",
      0x000000d3 => "\xd3",
      0x000000d4 => "\xd4",
      0x000000d5 => "\xd5",
      0x000000d6 => "\xd6",
      0x000000d8 => "\xd8",
      0x000000d9 => "\xd9",
      0x000000da => "\xda",
      0x000000db => "\xdb",
      0x000000dc => "\xdc",
      0x000000dd => "\xdd",
      0x000000df => "\xdf",
      0x000000e0 => "\xe0",
      0x000000e1 => "\xe1",
      0x000000e2 => "\xe2",
      0x000000e3 => "\xe3",
      0x000000e4 => "\xe4",
      0x000000e5 => "\xe5",
      0x000000e6 => "\xe6",
      0x000000e7 => "\xe7",
      0x000000e8 => "\xe8",
      0x000000e9 => "\xe9",
      0x000000ea => "\xea",
      0x000000eb => "\xeb",
      0x000000ec => "\xec",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000ef => "\xef",
      0x000000f1 => "\xf1",
      0x000000f2 => "\xf2",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f5 => "\xf5",
      0x000000f6 => "\xf6",
      0x000000f8 => "\xf8",
      0x000000f9 => "\xf9",
      0x000000fa => "\xfa",
      0x000000fb => "\xfb",
      0x000000fc => "\xfc",
      0x000000fd => "\xfd",
      0x000000ff => "\xff",
      0x0000010a => "\xa4",
      0x0000010b => "\xa5",
      0x00000120 => "\xb2",
      0x00000121 => "\xb3",
      0x00000174 => "\xd0",
      0x00000175 => "\xf0",
      0x00000176 => "\xde",
      0x00000177 => "\xfe",
      0x00000178 => "\xaf",
      0x00001e02 => "\xa1",
      0x00001e03 => "\xa2",
      0x00001e0a => "\xa6",
      0x00001e0b => "\xab",
      0x00001e1e => "\xb0",
      0x00001e1f => "\xb1",
      0x00001e40 => "\xb4",
      0x00001e41 => "\xb5",
      0x00001e56 => "\xb7",
      0x00001e57 => "\xb9",
      0x00001e60 => "\xbb",
      0x00001e61 => "\xbf",
      0x00001e6a => "\xd7",
      0x00001e6b => "\xf7",
      0x00001e80 => "\xa8",
      0x00001e81 => "\xb8",
      0x00001e82 => "\xaa",
      0x00001e83 => "\xba",
      0x00001e84 => "\xbd",
      0x00001e85 => "\xbe",
      0x00001ef2 => "\xac",
      0x00001ef3 => "\xbc",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_8859_14 - Conversion routines for ISO-8859-14
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO-8859-14.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   automatically generated from the charDB
   alias LATIN8
   alias L8
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL
      01 |  00000001 | START OF HEADING
      02 |  00000002 | START OF TEXT
      03 |  00000003 | END OF TEXT
      04 |  00000004 | END OF TRANSMISSION
      05 |  00000005 | ENQUIRY
      06 |  00000006 | ACKNOWLEDGE
      07 |  00000007 | BELL
      08 |  00000008 | BACKSPACE
      09 |  00000009 | HORIZONTAL TABULATION
      0A |  0000000A | LINE FEED
      0B |  0000000B | VERTICAL TABULATION
      0C |  0000000C | FORM FEED
      0D |  0000000D | CARRIAGE RETURN
      0E |  0000000E | SHIFT OUT
      0F |  0000000F | SHIFT IN
      10 |  00000010 | DATA LINK ESCAPE
      11 |  00000011 | DEVICE CONTROL ONE
      12 |  00000012 | DEVICE CONTROL TWO
      13 |  00000013 | DEVICE CONTROL THREE
      14 |  00000014 | DEVICE CONTROL FOUR
      15 |  00000015 | NEGATIVE ACKNOWLEDGE
      16 |  00000016 | SYNCHRONOUS IDLE
      17 |  00000017 | END OF TRANSMISSION BLOCK
      18 |  00000018 | CANCEL
      19 |  00000019 | END OF MEDIUM
      1A |  0000001A | SUBSTITUTE
      1B |  0000001B | ESCAPE
      1C |  0000001C | FILE SEPARATOR
      1D |  0000001D | GROUP SEPARATOR
      1E |  0000001E | RECORD SEPARATOR
      1F |  0000001F | UNIT SEPARATOR
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  00001E02 | LATIN CAPITAL LETTER B WITH DOT ABOVE
      A2 |  00001E03 | LATIN SMALL LETTER B WITH DOT ABOVE
      A3 |  000000A3 | POUND SIGN
      A4 |  0000010A | LATIN CAPITAL LETTER C WITH DOT ABOVE
      A5 |  0000010B | LATIN SMALL LETTER C WITH DOT ABOVE
      A6 |  00001E0A | LATIN CAPITAL LETTER D WITH DOT ABOVE
      A7 |  000000A7 | SECTION SIGN
      A8 |  00001E80 | LATIN CAPITAL LETTER W WITH GRAVE
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  00001E82 | LATIN CAPITAL LETTER W WITH ACUTE
      AB |  00001E0B | LATIN SMALL LETTER D WITH DOT ABOVE
      AC |  00001EF2 | LATIN CAPITAL LETTER Y WITH GRAVE
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      B0 |  00001E1E | LATIN CAPITAL LETTER F WITH DOT ABOVE
      B1 |  00001E1F | LATIN SMALL LETTER F WITH DOT ABOVE
      B2 |  00000120 | LATIN CAPITAL LETTER G WITH DOT ABOVE
      B3 |  00000121 | LATIN SMALL LETTER G WITH DOT ABOVE
      B4 |  00001E40 | LATIN CAPITAL LETTER M WITH DOT ABOVE
      B5 |  00001E41 | LATIN SMALL LETTER M WITH DOT ABOVE
      B6 |  000000B6 | PILCROW SIGN
      B7 |  00001E56 | LATIN CAPITAL LETTER P WITH DOT ABOVE
      B8 |  00001E81 | LATIN SMALL LETTER W WITH GRAVE
      B9 |  00001E57 | LATIN SMALL LETTER P WITH DOT ABOVE
      BA |  00001E83 | LATIN SMALL LETTER W WITH ACUTE
      BB |  00001E60 | LATIN CAPITAL LETTER S WITH DOT ABOVE
      BC |  00001EF3 | LATIN SMALL LETTER Y WITH GRAVE
      BD |  00001E84 | LATIN CAPITAL LETTER W WITH DIAERESIS
      BE |  00001E85 | LATIN SMALL LETTER W WITH DIAERESIS
      BF |  00001E61 | LATIN SMALL LETTER S WITH DOT ABOVE
      C0 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C3 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      C6 |  000000C6 | LATIN CAPITAL LETTER AE
      C7 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      C8 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      CB |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      CC |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      CF |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      D0 |  00000174 | LATIN CAPITAL LETTER W WITH CIRCUMFLEX
      D1 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      D2 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  00001E6A | LATIN CAPITAL LETTER T WITH DOT ABOVE
      D8 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      D9 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      DE |  00000176 | LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
      DF |  000000DF | LATIN SMALL LETTER SHARP S
      E0 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      E6 |  000000E6 | LATIN SMALL LETTER AE
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      F0 |  00000175 | LATIN SMALL LETTER W WITH CIRCUMFLEX
      F1 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      F2 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  00001E6B | LATIN SMALL LETTER T WITH DOT ABOVE
      F8 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      F9 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      FE |  00000177 | LATIN SMALL LETTER Y WITH CIRCUMFLEX
      FF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_8859_14

    $main::fatpacked{"Locale/RecodeData/ISO_8859_15.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_8859_15';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO-8859-15.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_8859_15;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0x00a1,
      0x00a2,
      0x00a3,
      0x20ac,
      0x00a5,
      0x0160,
      0x00a7,
      0x0161,
      0x00a9,
      0x00aa,
      0x00ab,
      0x00ac,
      0x00ad,
      0x00ae,
      0x00af,
      0x00b0,
      0x00b1,
      0x00b2,
      0x00b3,
      0x017d,
      0x00b5,
      0x00b6,
      0x00b7,
      0x017e,
      0x00b9,
      0x00ba,
      0x00bb,
      0x0152,
      0x0153,
      0x0178,
      0x00bf,
      0x00c0,
      0x00c1,
      0x00c2,
      0x00c3,
      0x00c4,
      0x00c5,
      0x00c6,
      0x00c7,
      0x00c8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00cc,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00d0,
      0x00d1,
      0x00d2,
      0x00d3,
      0x00d4,
      0x00d5,
      0x00d6,
      0x00d7,
      0x00d8,
      0x00d9,
      0x00da,
      0x00db,
      0x00dc,
      0x00dd,
      0x00de,
      0x00df,
      0x00e0,
      0x00e1,
      0x00e2,
      0x00e3,
      0x00e4,
      0x00e5,
      0x00e6,
      0x00e7,
      0x00e8,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00ec,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00f0,
      0x00f1,
      0x00f2,
      0x00f3,
      0x00f4,
      0x00f5,
      0x00f6,
      0x00f7,
      0x00f8,
      0x00f9,
      0x00fa,
      0x00fb,
      0x00fc,
      0x00fd,
      0x00fe,
      0x00ff,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xc2\xa1",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xe2\x82\xac",
      "\xc2\xa5",
      "\xc5\xa0",
      "\xc2\xa7",
      "\xc5\xa1",
      "\xc2\xa9",
      "\xc2\xaa",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xc2\xaf",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xc5\xbd",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xc5\xbe",
      "\xc2\xb9",
      "\xc2\xba",
      "\xc2\xbb",
      "\xc5\x92",
      "\xc5\x93",
      "\xc5\xb8",
      "\xc2\xbf",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x82",
      "\xc3\x83",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x86",
      "\xc3\x87",
      "\xc3\x88",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x8c",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x90",
      "\xc3\x91",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x94",
      "\xc3\x95",
      "\xc3\x96",
      "\xc3\x97",
      "\xc3\x98",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc3\x9f",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc3\xa3",
      "\xc3\xa4",
      "\xc3\xa5",
      "\xc3\xa6",
      "\xc3\xa7",
      "\xc3\xa8",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xac",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb0",
      "\xc3\xb1",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc3\xb5",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc3\xb8",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc3\xbf",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000a1 => "\xa1",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a5 => "\xa5",
      0x000000a7 => "\xa7",
      0x000000a9 => "\xa9",
      0x000000aa => "\xaa",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000af => "\xaf",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b2 => "\xb2",
      0x000000b3 => "\xb3",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000b9 => "\xb9",
      0x000000ba => "\xba",
      0x000000bb => "\xbb",
      0x000000bf => "\xbf",
      0x000000c0 => "\xc0",
      0x000000c1 => "\xc1",
      0x000000c2 => "\xc2",
      0x000000c3 => "\xc3",
      0x000000c4 => "\xc4",
      0x000000c5 => "\xc5",
      0x000000c6 => "\xc6",
      0x000000c7 => "\xc7",
      0x000000c8 => "\xc8",
      0x000000c9 => "\xc9",
      0x000000ca => "\xca",
      0x000000cb => "\xcb",
      0x000000cc => "\xcc",
      0x000000cd => "\xcd",
      0x000000ce => "\xce",
      0x000000cf => "\xcf",
      0x000000d0 => "\xd0",
      0x000000d1 => "\xd1",
      0x000000d2 => "\xd2",
      0x000000d3 => "\xd3",
      0x000000d4 => "\xd4",
      0x000000d5 => "\xd5",
      0x000000d6 => "\xd6",
      0x000000d7 => "\xd7",
      0x000000d8 => "\xd8",
      0x000000d9 => "\xd9",
      0x000000da => "\xda",
      0x000000db => "\xdb",
      0x000000dc => "\xdc",
      0x000000dd => "\xdd",
      0x000000de => "\xde",
      0x000000df => "\xdf",
      0x000000e0 => "\xe0",
      0x000000e1 => "\xe1",
      0x000000e2 => "\xe2",
      0x000000e3 => "\xe3",
      0x000000e4 => "\xe4",
      0x000000e5 => "\xe5",
      0x000000e6 => "\xe6",
      0x000000e7 => "\xe7",
      0x000000e8 => "\xe8",
      0x000000e9 => "\xe9",
      0x000000ea => "\xea",
      0x000000eb => "\xeb",
      0x000000ec => "\xec",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000ef => "\xef",
      0x000000f0 => "\xf0",
      0x000000f1 => "\xf1",
      0x000000f2 => "\xf2",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f5 => "\xf5",
      0x000000f6 => "\xf6",
      0x000000f7 => "\xf7",
      0x000000f8 => "\xf8",
      0x000000f9 => "\xf9",
      0x000000fa => "\xfa",
      0x000000fb => "\xfb",
      0x000000fc => "\xfc",
      0x000000fd => "\xfd",
      0x000000fe => "\xfe",
      0x000000ff => "\xff",
      0x00000152 => "\xbc",
      0x00000153 => "\xbd",
      0x00000160 => "\xa6",
      0x00000161 => "\xa8",
      0x00000178 => "\xbe",
      0x0000017d => "\xb4",
      0x0000017e => "\xb8",
      0x000020ac => "\xa4",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_8859_15 - Conversion routines for ISO-8859-15
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO-8859-15.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   automatically generated from the charDB
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL
      01 |  00000001 | START OF HEADING
      02 |  00000002 | START OF TEXT
      03 |  00000003 | END OF TEXT
      04 |  00000004 | END OF TRANSMISSION
      05 |  00000005 | ENQUIRY
      06 |  00000006 | ACKNOWLEDGE
      07 |  00000007 | BELL
      08 |  00000008 | BACKSPACE
      09 |  00000009 | HORIZONTAL TABULATION
      0A |  0000000A | LINE FEED
      0B |  0000000B | VERTICAL TABULATION
      0C |  0000000C | FORM FEED
      0D |  0000000D | CARRIAGE RETURN
      0E |  0000000E | SHIFT OUT
      0F |  0000000F | SHIFT IN
      10 |  00000010 | DATA LINK ESCAPE
      11 |  00000011 | DEVICE CONTROL ONE
      12 |  00000012 | DEVICE CONTROL TWO
      13 |  00000013 | DEVICE CONTROL THREE
      14 |  00000014 | DEVICE CONTROL FOUR
      15 |  00000015 | NEGATIVE ACKNOWLEDGE
      16 |  00000016 | SYNCHRONOUS IDLE
      17 |  00000017 | END OF TRANSMISSION BLOCK
      18 |  00000018 | CANCEL
      19 |  00000019 | END OF MEDIUM
      1A |  0000001A | SUBSTITUTE
      1B |  0000001B | ESCAPE
      1C |  0000001C | FILE SEPARATOR
      1D |  0000001D | GROUP SEPARATOR
      1E |  0000001E | RECORD SEPARATOR
      1F |  0000001F | UNIT SEPARATOR
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  000000A1 | INVERTED EXCLAMATION MARK
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000020AC | EURO SIGN
      A5 |  000000A5 | YEN SIGN
      A6 |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      A7 |  000000A7 | SECTION SIGN
      A8 |  00000161 | LATIN SMALL LETTER S WITH CARON
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  000000AA | FEMININE ORDINAL INDICATOR
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  000000AF | MACRON
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  000000B3 | SUPERSCRIPT THREE
      B4 |  0000017D | LATIN CAPITAL LETTER Z WITH CARON
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  0000017E | LATIN SMALL LETTER Z WITH CARON
      B9 |  000000B9 | SUPERSCRIPT ONE
      BA |  000000BA | MASCULINE ORDINAL INDICATOR
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  00000152 | LATIN CAPITAL LIGATURE OE
      BD |  00000153 | LATIN SMALL LIGATURE OE
      BE |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      BF |  000000BF | INVERTED QUESTION MARK
      C0 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C3 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      C6 |  000000C6 | LATIN CAPITAL LETTER AE
      C7 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      C8 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      CB |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      CC |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      CF |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      D0 |  000000D0 | LATIN CAPITAL LETTER ETH
      D1 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      D2 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  000000D7 | MULTIPLICATION SIGN
      D8 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      D9 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      DE |  000000DE | LATIN CAPITAL LETTER THORN
      DF |  000000DF | LATIN SMALL LETTER SHARP S
      E0 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      E6 |  000000E6 | LATIN SMALL LETTER AE
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      F0 |  000000F0 | LATIN SMALL LETTER ETH
      F1 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      F2 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  000000F7 | DIVISION SIGN
      F8 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      F9 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      FE |  000000FE | LATIN SMALL LETTER THORN
      FF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_8859_15

    $main::fatpacked{"Locale/RecodeData/ISO_8859_16.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_8859_16';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO-8859-16.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_8859_16;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0x0104,
      0x0105,
      0x0141,
      0x20ac,
      0x201e,
      0x0160,
      0x00a7,
      0x0161,
      0x00a9,
      0x0218,
      0x00ab,
      0x0179,
      0x00ad,
      0x017a,
      0x017b,
      0x00b0,
      0x00b1,
      0x010c,
      0x0142,
      0x017d,
      0x201d,
      0x00b6,
      0x00b7,
      0x017e,
      0x010d,
      0x0219,
      0x00bb,
      0x0152,
      0x0153,
      0x0178,
      0x017c,
      0x00c0,
      0x00c1,
      0x00c2,
      0x0102,
      0x00c4,
      0x0106,
      0x00c6,
      0x00c7,
      0x00c8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00cc,
      0x00cd,
      0x00ce,
      0x00cf,
      0x0110,
      0x0143,
      0x00d2,
      0x00d3,
      0x00d4,
      0x0150,
      0x00d6,
      0x015a,
      0x0170,
      0x00d9,
      0x00da,
      0x00db,
      0x00dc,
      0x0118,
      0x021a,
      0x00df,
      0x00e0,
      0x00e1,
      0x00e2,
      0x0103,
      0x00e4,
      0x0107,
      0x00e6,
      0x00e7,
      0x00e8,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00ec,
      0x00ed,
      0x00ee,
      0x00ef,
      0x0111,
      0x0144,
      0x00f2,
      0x00f3,
      0x00f4,
      0x0151,
      0x00f6,
      0x015b,
      0x0171,
      0x00f9,
      0x00fa,
      0x00fb,
      0x00fc,
      0x0119,
      0x021b,
      0x00ff,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xc4\x84",
      "\xc4\x85",
      "\xc5\x81",
      "\xe2\x82\xac",
      "\xe2\x80\x9e",
      "\xc5\xa0",
      "\xc2\xa7",
      "\xc5\xa1",
      "\xc2\xa9",
      "\xc8\x98",
      "\xc2\xab",
      "\xc5\xb9",
      "\xc2\xad",
      "\xc5\xba",
      "\xc5\xbb",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc4\x8c",
      "\xc5\x82",
      "\xc5\xbd",
      "\xe2\x80\x9d",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xc5\xbe",
      "\xc4\x8d",
      "\xc8\x99",
      "\xc2\xbb",
      "\xc5\x92",
      "\xc5\x93",
      "\xc5\xb8",
      "\xc5\xbc",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x82",
      "\xc4\x82",
      "\xc3\x84",
      "\xc4\x86",
      "\xc3\x86",
      "\xc3\x87",
      "\xc3\x88",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x8c",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc4\x90",
      "\xc5\x83",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x94",
      "\xc5\x90",
      "\xc3\x96",
      "\xc5\x9a",
      "\xc5\xb0",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc4\x98",
      "\xc8\x9a",
      "\xc3\x9f",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc4\x83",
      "\xc3\xa4",
      "\xc4\x87",
      "\xc3\xa6",
      "\xc3\xa7",
      "\xc3\xa8",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xac",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc4\x91",
      "\xc5\x84",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc5\x91",
      "\xc3\xb6",
      "\xc5\x9b",
      "\xc5\xb1",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc4\x99",
      "\xc8\x9b",
      "\xc3\xbf",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000a7 => "\xa7",
      0x000000a9 => "\xa9",
      0x000000ab => "\xab",
      0x000000ad => "\xad",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000bb => "\xbb",
      0x000000c0 => "\xc0",
      0x000000c1 => "\xc1",
      0x000000c2 => "\xc2",
      0x000000c4 => "\xc4",
      0x000000c6 => "\xc6",
      0x000000c7 => "\xc7",
      0x000000c8 => "\xc8",
      0x000000c9 => "\xc9",
      0x000000ca => "\xca",
      0x000000cb => "\xcb",
      0x000000cc => "\xcc",
      0x000000cd => "\xcd",
      0x000000ce => "\xce",
      0x000000cf => "\xcf",
      0x000000d2 => "\xd2",
      0x000000d3 => "\xd3",
      0x000000d4 => "\xd4",
      0x000000d6 => "\xd6",
      0x000000d9 => "\xd9",
      0x000000da => "\xda",
      0x000000db => "\xdb",
      0x000000dc => "\xdc",
      0x000000df => "\xdf",
      0x000000e0 => "\xe0",
      0x000000e1 => "\xe1",
      0x000000e2 => "\xe2",
      0x000000e4 => "\xe4",
      0x000000e6 => "\xe6",
      0x000000e7 => "\xe7",
      0x000000e8 => "\xe8",
      0x000000e9 => "\xe9",
      0x000000ea => "\xea",
      0x000000eb => "\xeb",
      0x000000ec => "\xec",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000ef => "\xef",
      0x000000f2 => "\xf2",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f6 => "\xf6",
      0x000000f9 => "\xf9",
      0x000000fa => "\xfa",
      0x000000fb => "\xfb",
      0x000000fc => "\xfc",
      0x000000ff => "\xff",
      0x00000102 => "\xc3",
      0x00000103 => "\xe3",
      0x00000104 => "\xa1",
      0x00000105 => "\xa2",
      0x00000106 => "\xc5",
      0x00000107 => "\xe5",
      0x0000010c => "\xb2",
      0x0000010d => "\xb9",
      0x00000110 => "\xd0",
      0x00000111 => "\xf0",
      0x00000118 => "\xdd",
      0x00000119 => "\xfd",
      0x00000141 => "\xa3",
      0x00000142 => "\xb3",
      0x00000143 => "\xd1",
      0x00000144 => "\xf1",
      0x00000150 => "\xd5",
      0x00000151 => "\xf5",
      0x00000152 => "\xbc",
      0x00000153 => "\xbd",
      0x0000015a => "\xd7",
      0x0000015b => "\xf7",
      0x00000160 => "\xa6",
      0x00000161 => "\xa8",
      0x00000170 => "\xd8",
      0x00000171 => "\xf8",
      0x00000178 => "\xbe",
      0x00000179 => "\xac",
      0x0000017a => "\xae",
      0x0000017b => "\xaf",
      0x0000017c => "\xbf",
      0x0000017d => "\xb4",
      0x0000017e => "\xb8",
      0x00000218 => "\xaa",
      0x00000219 => "\xba",
      0x0000021a => "\xde",
      0x0000021b => "\xfe",
      0x0000201d => "\xb5",
      0x0000201e => "\xa5",
      0x000020ac => "\xa4",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_8859_16 - Conversion routines for ISO-8859-16
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO-8859-16.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   automatically generated from the charDB
   alias ISO-IR-226
   alias LATIN10
   alias L10
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL
      01 |  00000001 | START OF HEADING
      02 |  00000002 | START OF TEXT
      03 |  00000003 | END OF TEXT
      04 |  00000004 | END OF TRANSMISSION
      05 |  00000005 | ENQUIRY
      06 |  00000006 | ACKNOWLEDGE
      07 |  00000007 | BELL
      08 |  00000008 | BACKSPACE
      09 |  00000009 | HORIZONTAL TABULATION
      0A |  0000000A | LINE FEED
      0B |  0000000B | VERTICAL TABULATION
      0C |  0000000C | FORM FEED
      0D |  0000000D | CARRIAGE RETURN
      0E |  0000000E | SHIFT OUT
      0F |  0000000F | SHIFT IN
      10 |  00000010 | DATA LINK ESCAPE
      11 |  00000011 | DEVICE CONTROL ONE
      12 |  00000012 | DEVICE CONTROL TWO
      13 |  00000013 | DEVICE CONTROL THREE
      14 |  00000014 | DEVICE CONTROL FOUR
      15 |  00000015 | NEGATIVE ACKNOWLEDGE
      16 |  00000016 | SYNCHRONOUS IDLE
      17 |  00000017 | END OF TRANSMISSION BLOCK
      18 |  00000018 | CANCEL
      19 |  00000019 | END OF MEDIUM
      1A |  0000001A | SUBSTITUTE
      1B |  0000001B | ESCAPE
      1C |  0000001C | FILE SEPARATOR
      1D |  0000001D | GROUP SEPARATOR
      1E |  0000001E | RECORD SEPARATOR
      1F |  0000001F | UNIT SEPARATOR
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  00000104 | LATIN CAPITAL LETTER A WITH OGONEK
      A2 |  00000105 | LATIN SMALL LETTER A WITH OGONEK
      A3 |  00000141 | LATIN CAPITAL LETTER L WITH STROKE
      A4 |  000020AC | EURO SIGN
      A5 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      A6 |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      A7 |  000000A7 | SECTION SIGN
      A8 |  00000161 | LATIN SMALL LETTER S WITH CARON
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  00000218 | LATIN CAPITAL LETTER S WITH COMMA BELOW
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  00000179 | LATIN CAPITAL LETTER Z WITH ACUTE
      AD |  000000AD | SOFT HYPHEN
      AE |  0000017A | LATIN SMALL LETTER Z WITH ACUTE
      AF |  0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  0000010C | LATIN CAPITAL LETTER C WITH CARON
      B3 |  00000142 | LATIN SMALL LETTER L WITH STROKE
      B4 |  0000017D | LATIN CAPITAL LETTER Z WITH CARON
      B5 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  0000017E | LATIN SMALL LETTER Z WITH CARON
      B9 |  0000010D | LATIN SMALL LETTER C WITH CARON
      BA |  00000219 | LATIN SMALL LETTER S WITH COMMA BELOW
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  00000152 | LATIN CAPITAL LIGATURE OE
      BD |  00000153 | LATIN SMALL LIGATURE OE
      BE |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      BF |  0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE
      C0 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C3 |  00000102 | LATIN CAPITAL LETTER A WITH BREVE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  00000106 | LATIN CAPITAL LETTER C WITH ACUTE
      C6 |  000000C6 | LATIN CAPITAL LETTER AE
      C7 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      C8 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      CB |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      CC |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      CF |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      D0 |  00000110 | LATIN CAPITAL LETTER D WITH STROKE
      D1 |  00000143 | LATIN CAPITAL LETTER N WITH ACUTE
      D2 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  00000150 | LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  0000015A | LATIN CAPITAL LETTER S WITH ACUTE
      D8 |  00000170 | LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
      D9 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  00000118 | LATIN CAPITAL LETTER E WITH OGONEK
      DE |  0000021A | LATIN CAPITAL LETTER T WITH COMMA BELOW
      DF |  000000DF | LATIN SMALL LETTER SHARP S
      E0 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  00000103 | LATIN SMALL LETTER A WITH BREVE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  00000107 | LATIN SMALL LETTER C WITH ACUTE
      E6 |  000000E6 | LATIN SMALL LETTER AE
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      F0 |  00000111 | LATIN SMALL LETTER D WITH STROKE
      F1 |  00000144 | LATIN SMALL LETTER N WITH ACUTE
      F2 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  00000151 | LATIN SMALL LETTER O WITH DOUBLE ACUTE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  0000015B | LATIN SMALL LETTER S WITH ACUTE
      F8 |  00000171 | LATIN SMALL LETTER U WITH DOUBLE ACUTE
      F9 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  00000119 | LATIN SMALL LETTER E WITH OGONEK
      FE |  0000021B | LATIN SMALL LETTER T WITH COMMA BELOW
      FF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_8859_16

    $main::fatpacked{"Locale/RecodeData/ISO_8859_2.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_8859_2';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO-8859-2.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_8859_2;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0x0104,
      0x02d8,
      0x0141,
      0x00a4,
      0x013d,
      0x015a,
      0x00a7,
      0x00a8,
      0x0160,
      0x015e,
      0x0164,
      0x0179,
      0x00ad,
      0x017d,
      0x017b,
      0x00b0,
      0x0105,
      0x02db,
      0x0142,
      0x00b4,
      0x013e,
      0x015b,
      0x02c7,
      0x00b8,
      0x0161,
      0x015f,
      0x0165,
      0x017a,
      0x02dd,
      0x017e,
      0x017c,
      0x0154,
      0x00c1,
      0x00c2,
      0x0102,
      0x00c4,
      0x0139,
      0x0106,
      0x00c7,
      0x010c,
      0x00c9,
      0x0118,
      0x00cb,
      0x011a,
      0x00cd,
      0x00ce,
      0x010e,
      0x0110,
      0x0143,
      0x0147,
      0x00d3,
      0x00d4,
      0x0150,
      0x00d6,
      0x00d7,
      0x0158,
      0x016e,
      0x00da,
      0x0170,
      0x00dc,
      0x00dd,
      0x0162,
      0x00df,
      0x0155,
      0x00e1,
      0x00e2,
      0x0103,
      0x00e4,
      0x013a,
      0x0107,
      0x00e7,
      0x010d,
      0x00e9,
      0x0119,
      0x00eb,
      0x011b,
      0x00ed,
      0x00ee,
      0x010f,
      0x0111,
      0x0144,
      0x0148,
      0x00f3,
      0x00f4,
      0x0151,
      0x00f6,
      0x00f7,
      0x0159,
      0x016f,
      0x00fa,
      0x0171,
      0x00fc,
      0x00fd,
      0x0163,
      0x02d9,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xc4\x84",
      "\xcb\x98",
      "\xc5\x81",
      "\xc2\xa4",
      "\xc4\xbd",
      "\xc5\x9a",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc5\xa0",
      "\xc5\x9e",
      "\xc5\xa4",
      "\xc5\xb9",
      "\xc2\xad",
      "\xc5\xbd",
      "\xc5\xbb",
      "\xc2\xb0",
      "\xc4\x85",
      "\xcb\x9b",
      "\xc5\x82",
      "\xc2\xb4",
      "\xc4\xbe",
      "\xc5\x9b",
      "\xcb\x87",
      "\xc2\xb8",
      "\xc5\xa1",
      "\xc5\x9f",
      "\xc5\xa5",
      "\xc5\xba",
      "\xcb\x9d",
      "\xc5\xbe",
      "\xc5\xbc",
      "\xc5\x94",
      "\xc3\x81",
      "\xc3\x82",
      "\xc4\x82",
      "\xc3\x84",
      "\xc4\xb9",
      "\xc4\x86",
      "\xc3\x87",
      "\xc4\x8c",
      "\xc3\x89",
      "\xc4\x98",
      "\xc3\x8b",
      "\xc4\x9a",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc4\x8e",
      "\xc4\x90",
      "\xc5\x83",
      "\xc5\x87",
      "\xc3\x93",
      "\xc3\x94",
      "\xc5\x90",
      "\xc3\x96",
      "\xc3\x97",
      "\xc5\x98",
      "\xc5\xae",
      "\xc3\x9a",
      "\xc5\xb0",
      "\xc3\x9c",
      "\xc3\x9d",
      "\xc5\xa2",
      "\xc3\x9f",
      "\xc5\x95",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc4\x83",
      "\xc3\xa4",
      "\xc4\xba",
      "\xc4\x87",
      "\xc3\xa7",
      "\xc4\x8d",
      "\xc3\xa9",
      "\xc4\x99",
      "\xc3\xab",
      "\xc4\x9b",
      "\xc3\xad",
      "\xc3\xae",
      "\xc4\x8f",
      "\xc4\x91",
      "\xc5\x84",
      "\xc5\x88",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc5\x91",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc5\x99",
      "\xc5\xaf",
      "\xc3\xba",
      "\xc5\xb1",
      "\xc3\xbc",
      "\xc3\xbd",
      "\xc5\xa3",
      "\xcb\x99",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000a4 => "\xa4",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xa8",
      0x000000ad => "\xad",
      0x000000b0 => "\xb0",
      0x000000b4 => "\xb4",
      0x000000b8 => "\xb8",
      0x000000c1 => "\xc1",
      0x000000c2 => "\xc2",
      0x000000c4 => "\xc4",
      0x000000c7 => "\xc7",
      0x000000c9 => "\xc9",
      0x000000cb => "\xcb",
      0x000000cd => "\xcd",
      0x000000ce => "\xce",
      0x000000d3 => "\xd3",
      0x000000d4 => "\xd4",
      0x000000d6 => "\xd6",
      0x000000d7 => "\xd7",
      0x000000da => "\xda",
      0x000000dc => "\xdc",
      0x000000dd => "\xdd",
      0x000000df => "\xdf",
      0x000000e1 => "\xe1",
      0x000000e2 => "\xe2",
      0x000000e4 => "\xe4",
      0x000000e7 => "\xe7",
      0x000000e9 => "\xe9",
      0x000000eb => "\xeb",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f6 => "\xf6",
      0x000000f7 => "\xf7",
      0x000000fa => "\xfa",
      0x000000fc => "\xfc",
      0x000000fd => "\xfd",
      0x00000102 => "\xc3",
      0x00000103 => "\xe3",
      0x00000104 => "\xa1",
      0x00000105 => "\xb1",
      0x00000106 => "\xc6",
      0x00000107 => "\xe6",
      0x0000010c => "\xc8",
      0x0000010d => "\xe8",
      0x0000010e => "\xcf",
      0x0000010f => "\xef",
      0x00000110 => "\xd0",
      0x00000111 => "\xf0",
      0x00000118 => "\xca",
      0x00000119 => "\xea",
      0x0000011a => "\xcc",
      0x0000011b => "\xec",
      0x00000139 => "\xc5",
      0x0000013a => "\xe5",
      0x0000013d => "\xa5",
      0x0000013e => "\xb5",
      0x00000141 => "\xa3",
      0x00000142 => "\xb3",
      0x00000143 => "\xd1",
      0x00000144 => "\xf1",
      0x00000147 => "\xd2",
      0x00000148 => "\xf2",
      0x00000150 => "\xd5",
      0x00000151 => "\xf5",
      0x00000154 => "\xc0",
      0x00000155 => "\xe0",
      0x00000158 => "\xd8",
      0x00000159 => "\xf8",
      0x0000015a => "\xa6",
      0x0000015b => "\xb6",
      0x0000015e => "\xaa",
      0x0000015f => "\xba",
      0x00000160 => "\xa9",
      0x00000161 => "\xb9",
      0x00000162 => "\xde",
      0x00000163 => "\xfe",
      0x00000164 => "\xab",
      0x00000165 => "\xbb",
      0x0000016e => "\xd9",
      0x0000016f => "\xf9",
      0x00000170 => "\xdb",
      0x00000171 => "\xfb",
      0x00000179 => "\xac",
      0x0000017a => "\xbc",
      0x0000017b => "\xaf",
      0x0000017c => "\xbf",
      0x0000017d => "\xae",
      0x0000017e => "\xbe",
      0x000002c7 => "\xb7",
      0x000002d8 => "\xa2",
      0x000002d9 => "\xff",
      0x000002db => "\xb2",
      0x000002dd => "\xbd",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_8859_2 - Conversion routines for ISO-8859-2
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO-8859-2.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-101
   alias ISO_8859-2:1987
   alias ISO_8859-2
   alias LATIN2
   alias L2
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  00000104 | LATIN CAPITAL LETTER A WITH OGONEK
      A2 |  000002D8 | BREVE
      A3 |  00000141 | LATIN CAPITAL LETTER L WITH STROKE
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  0000013D | LATIN CAPITAL LETTER L WITH CARON
      A6 |  0000015A | LATIN CAPITAL LETTER S WITH ACUTE
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      AA |  0000015E | LATIN CAPITAL LETTER S WITH CEDILLA
      AB |  00000164 | LATIN CAPITAL LETTER T WITH CARON
      AC |  00000179 | LATIN CAPITAL LETTER Z WITH ACUTE
      AD |  000000AD | SOFT HYPHEN
      AE |  0000017D | LATIN CAPITAL LETTER Z WITH CARON
      AF |  0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE
      B0 |  000000B0 | DEGREE SIGN
      B1 |  00000105 | LATIN SMALL LETTER A WITH OGONEK
      B2 |  000002DB | OGONEK
      B3 |  00000142 | LATIN SMALL LETTER L WITH STROKE
      B4 |  000000B4 | ACUTE ACCENT
      B5 |  0000013E | LATIN SMALL LETTER L WITH CARON
      B6 |  0000015B | LATIN SMALL LETTER S WITH ACUTE
      B7 |  000002C7 | CARON (Mandarin Chinese third tone)
      B8 |  000000B8 | CEDILLA
      B9 |  00000161 | LATIN SMALL LETTER S WITH CARON
      BA |  0000015F | LATIN SMALL LETTER S WITH CEDILLA
      BB |  00000165 | LATIN SMALL LETTER T WITH CARON
      BC |  0000017A | LATIN SMALL LETTER Z WITH ACUTE
      BD |  000002DD | DOUBLE ACUTE ACCENT
      BE |  0000017E | LATIN SMALL LETTER Z WITH CARON
      BF |  0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE
      C0 |  00000154 | LATIN CAPITAL LETTER R WITH ACUTE
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C3 |  00000102 | LATIN CAPITAL LETTER A WITH BREVE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  00000139 | LATIN CAPITAL LETTER L WITH ACUTE
      C6 |  00000106 | LATIN CAPITAL LETTER C WITH ACUTE
      C7 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      C8 |  0000010C | LATIN CAPITAL LETTER C WITH CARON
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  00000118 | LATIN CAPITAL LETTER E WITH OGONEK
      CB |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      CC |  0000011A | LATIN CAPITAL LETTER E WITH CARON
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      CF |  0000010E | LATIN CAPITAL LETTER D WITH CARON
      D0 |  00000110 | LATIN CAPITAL LETTER D WITH STROKE
      D1 |  00000143 | LATIN CAPITAL LETTER N WITH ACUTE
      D2 |  00000147 | LATIN CAPITAL LETTER N WITH CARON
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  00000150 | LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  000000D7 | MULTIPLICATION SIGN
      D8 |  00000158 | LATIN CAPITAL LETTER R WITH CARON
      D9 |  0000016E | LATIN CAPITAL LETTER U WITH RING ABOVE
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  00000170 | LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      DE |  00000162 | LATIN CAPITAL LETTER T WITH CEDILLA
      DF |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E0 |  00000155 | LATIN SMALL LETTER R WITH ACUTE
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  00000103 | LATIN SMALL LETTER A WITH BREVE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  0000013A | LATIN SMALL LETTER L WITH ACUTE
      E6 |  00000107 | LATIN SMALL LETTER C WITH ACUTE
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  0000010D | LATIN SMALL LETTER C WITH CARON
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  00000119 | LATIN SMALL LETTER E WITH OGONEK
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  0000011B | LATIN SMALL LETTER E WITH CARON
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  0000010F | LATIN SMALL LETTER D WITH CARON
      F0 |  00000111 | LATIN SMALL LETTER D WITH STROKE
      F1 |  00000144 | LATIN SMALL LETTER N WITH ACUTE
      F2 |  00000148 | LATIN SMALL LETTER N WITH CARON
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  00000151 | LATIN SMALL LETTER O WITH DOUBLE ACUTE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  000000F7 | DIVISION SIGN
      F8 |  00000159 | LATIN SMALL LETTER R WITH CARON
      F9 |  0000016F | LATIN SMALL LETTER U WITH RING ABOVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  00000171 | LATIN SMALL LETTER U WITH DOUBLE ACUTE
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      FE |  00000163 | LATIN SMALL LETTER T WITH CEDILLA
      FF |  000002D9 | DOT ABOVE (Mandarin Chinese light tone)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_8859_2

    $main::fatpacked{"Locale/RecodeData/ISO_8859_3.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_8859_3';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO-8859-3.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_8859_3;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0x0126,
      0x02d8,
      0x00a3,
      0x00a4,
      0xfffd,
      0x0124,
      0x00a7,
      0x00a8,
      0x0130,
      0x015e,
      0x011e,
      0x0134,
      0x00ad,
      0xfffd,
      0x017b,
      0x00b0,
      0x0127,
      0x00b2,
      0x00b3,
      0x00b4,
      0x00b5,
      0x0125,
      0x00b7,
      0x00b8,
      0x0131,
      0x015f,
      0x011f,
      0x0135,
      0x00bd,
      0xfffd,
      0x017c,
      0x00c0,
      0x00c1,
      0x00c2,
      0xfffd,
      0x00c4,
      0x010a,
      0x0108,
      0x00c7,
      0x00c8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00cc,
      0x00cd,
      0x00ce,
      0x00cf,
      0xfffd,
      0x00d1,
      0x00d2,
      0x00d3,
      0x00d4,
      0x0120,
      0x00d6,
      0x00d7,
      0x011c,
      0x00d9,
      0x00da,
      0x00db,
      0x00dc,
      0x016c,
      0x015c,
      0x00df,
      0x00e0,
      0x00e1,
      0x00e2,
      0xfffd,
      0x00e4,
      0x010b,
      0x0109,
      0x00e7,
      0x00e8,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00ec,
      0x00ed,
      0x00ee,
      0x00ef,
      0xfffd,
      0x00f1,
      0x00f2,
      0x00f3,
      0x00f4,
      0x0121,
      0x00f6,
      0x00f7,
      0x011d,
      0x00f9,
      0x00fa,
      0x00fb,
      0x00fc,
      0x016d,
      0x015d,
      0x02d9,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xc4\xa6",
      "\xcb\x98",
      "\xc2\xa3",
      "\xc2\xa4",
      "\xef\xbf\xbd",
      "\xc4\xa4",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc4\xb0",
      "\xc5\x9e",
      "\xc4\x9e",
      "\xc4\xb4",
      "\xc2\xad",
      "\xef\xbf\xbd",
      "\xc5\xbb",
      "\xc2\xb0",
      "\xc4\xa7",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xc2\xb4",
      "\xc2\xb5",
      "\xc4\xa5",
      "\xc2\xb7",
      "\xc2\xb8",
      "\xc4\xb1",
      "\xc5\x9f",
      "\xc4\x9f",
      "\xc4\xb5",
      "\xc2\xbd",
      "\xef\xbf\xbd",
      "\xc5\xbc",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x82",
      "\xef\xbf\xbd",
      "\xc3\x84",
      "\xc4\x8a",
      "\xc4\x88",
      "\xc3\x87",
      "\xc3\x88",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x8c",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xef\xbf\xbd",
      "\xc3\x91",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x94",
      "\xc4\xa0",
      "\xc3\x96",
      "\xc3\x97",
      "\xc4\x9c",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc5\xac",
      "\xc5\x9c",
      "\xc3\x9f",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xef\xbf\xbd",
      "\xc3\xa4",
      "\xc4\x8b",
      "\xc4\x89",
      "\xc3\xa7",
      "\xc3\xa8",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xac",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xef\xbf\xbd",
      "\xc3\xb1",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc4\xa1",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc4\x9d",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc5\xad",
      "\xc5\x9d",
      "\xcb\x99",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xa4",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xa8",
      0x000000ad => "\xad",
      0x000000b0 => "\xb0",
      0x000000b2 => "\xb2",
      0x000000b3 => "\xb3",
      0x000000b4 => "\xb4",
      0x000000b5 => "\xb5",
      0x000000b7 => "\xb7",
      0x000000b8 => "\xb8",
      0x000000bd => "\xbd",
      0x000000c0 => "\xc0",
      0x000000c1 => "\xc1",
      0x000000c2 => "\xc2",
      0x000000c4 => "\xc4",
      0x000000c7 => "\xc7",
      0x000000c8 => "\xc8",
      0x000000c9 => "\xc9",
      0x000000ca => "\xca",
      0x000000cb => "\xcb",
      0x000000cc => "\xcc",
      0x000000cd => "\xcd",
      0x000000ce => "\xce",
      0x000000cf => "\xcf",
      0x000000d1 => "\xd1",
      0x000000d2 => "\xd2",
      0x000000d3 => "\xd3",
      0x000000d4 => "\xd4",
      0x000000d6 => "\xd6",
      0x000000d7 => "\xd7",
      0x000000d9 => "\xd9",
      0x000000da => "\xda",
      0x000000db => "\xdb",
      0x000000dc => "\xdc",
      0x000000df => "\xdf",
      0x000000e0 => "\xe0",
      0x000000e1 => "\xe1",
      0x000000e2 => "\xe2",
      0x000000e4 => "\xe4",
      0x000000e7 => "\xe7",
      0x000000e8 => "\xe8",
      0x000000e9 => "\xe9",
      0x000000ea => "\xea",
      0x000000eb => "\xeb",
      0x000000ec => "\xec",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000ef => "\xef",
      0x000000f1 => "\xf1",
      0x000000f2 => "\xf2",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f6 => "\xf6",
      0x000000f7 => "\xf7",
      0x000000f9 => "\xf9",
      0x000000fa => "\xfa",
      0x000000fb => "\xfb",
      0x000000fc => "\xfc",
      0x00000108 => "\xc6",
      0x00000109 => "\xe6",
      0x0000010a => "\xc5",
      0x0000010b => "\xe5",
      0x0000011c => "\xd8",
      0x0000011d => "\xf8",
      0x0000011e => "\xab",
      0x0000011f => "\xbb",
      0x00000120 => "\xd5",
      0x00000121 => "\xf5",
      0x00000124 => "\xa6",
      0x00000125 => "\xb6",
      0x00000126 => "\xa1",
      0x00000127 => "\xb1",
      0x00000130 => "\xa9",
      0x00000131 => "\xb9",
      0x00000134 => "\xac",
      0x00000135 => "\xbc",
      0x0000015c => "\xde",
      0x0000015d => "\xfe",
      0x0000015e => "\xaa",
      0x0000015f => "\xba",
      0x0000016c => "\xdd",
      0x0000016d => "\xfd",
      0x0000017b => "\xaf",
      0x0000017c => "\xbf",
      0x000002d8 => "\xa2",
      0x000002d9 => "\xff",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_8859_3 - Conversion routines for ISO-8859-3
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO-8859-3.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-109
   alias ISO_8859-3:1988
   alias ISO_8859-3
   alias LATIN3
   alias L3
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  00000126 | LATIN CAPITAL LETTER H WITH STROKE
      A2 |  000002D8 | BREVE
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A4 | CURRENCY SIGN
      A6 |  00000124 | LATIN CAPITAL LETTER H WITH CIRCUMFLEX
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  00000130 | LATIN CAPITAL LETTER I WITH DOT ABOVE
      AA |  0000015E | LATIN CAPITAL LETTER S WITH CEDILLA
      AB |  0000011E | LATIN CAPITAL LETTER G WITH BREVE
      AC |  00000134 | LATIN CAPITAL LETTER J WITH CIRCUMFLEX
      AD |  000000AD | SOFT HYPHEN
      AF |  0000017B | LATIN CAPITAL LETTER Z WITH DOT ABOVE
      B0 |  000000B0 | DEGREE SIGN
      B1 |  00000127 | LATIN SMALL LETTER H WITH STROKE
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  000000B3 | SUPERSCRIPT THREE
      B4 |  000000B4 | ACUTE ACCENT
      B5 |  000000B5 | MICRO SIGN
      B6 |  00000125 | LATIN SMALL LETTER H WITH CIRCUMFLEX
      B7 |  000000B7 | MIDDLE DOT
      B8 |  000000B8 | CEDILLA
      B9 |  00000131 | LATIN SMALL LETTER DOTLESS I
      BA |  0000015F | LATIN SMALL LETTER S WITH CEDILLA
      BB |  0000011F | LATIN SMALL LETTER G WITH BREVE
      BC |  00000135 | LATIN SMALL LETTER J WITH CIRCUMFLEX
      BD |  000000BD | VULGAR FRACTION ONE HALF
      BF |  0000017C | LATIN SMALL LETTER Z WITH DOT ABOVE
      C0 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  0000010A | LATIN CAPITAL LETTER C WITH DOT ABOVE
      C6 |  00000108 | LATIN CAPITAL LETTER C WITH CIRCUMFLEX
      C7 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      C8 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      CB |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      CC |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      CF |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      D1 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      D2 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  00000120 | LATIN CAPITAL LETTER G WITH DOT ABOVE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  000000D7 | MULTIPLICATION SIGN
      D8 |  0000011C | LATIN CAPITAL LETTER G WITH CIRCUMFLEX
      D9 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  0000016C | LATIN CAPITAL LETTER U WITH BREVE
      DE |  0000015C | LATIN CAPITAL LETTER S WITH CIRCUMFLEX
      DF |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E0 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  0000010B | LATIN SMALL LETTER C WITH DOT ABOVE
      E6 |  00000109 | LATIN SMALL LETTER C WITH CIRCUMFLEX
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      F1 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      F2 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  00000121 | LATIN SMALL LETTER G WITH DOT ABOVE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  000000F7 | DIVISION SIGN
      F8 |  0000011D | LATIN SMALL LETTER G WITH CIRCUMFLEX
      F9 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  0000016D | LATIN SMALL LETTER U WITH BREVE
      FE |  0000015D | LATIN SMALL LETTER S WITH CIRCUMFLEX
      FF |  000002D9 | DOT ABOVE (Mandarin Chinese light tone)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_8859_3

    $main::fatpacked{"Locale/RecodeData/ISO_8859_4.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_8859_4';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO-8859-4.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_8859_4;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0x0104,
      0x0138,
      0x0156,
      0x00a4,
      0x0128,
      0x013b,
      0x00a7,
      0x00a8,
      0x0160,
      0x0112,
      0x0122,
      0x0166,
      0x00ad,
      0x017d,
      0x00af,
      0x00b0,
      0x0105,
      0x02db,
      0x0157,
      0x00b4,
      0x0129,
      0x013c,
      0x02c7,
      0x00b8,
      0x0161,
      0x0113,
      0x0123,
      0x0167,
      0x014a,
      0x017e,
      0x014b,
      0x0100,
      0x00c1,
      0x00c2,
      0x00c3,
      0x00c4,
      0x00c5,
      0x00c6,
      0x012e,
      0x010c,
      0x00c9,
      0x0118,
      0x00cb,
      0x0116,
      0x00cd,
      0x00ce,
      0x012a,
      0x0110,
      0x0145,
      0x014c,
      0x0136,
      0x00d4,
      0x00d5,
      0x00d6,
      0x00d7,
      0x00d8,
      0x0172,
      0x00da,
      0x00db,
      0x00dc,
      0x0168,
      0x016a,
      0x00df,
      0x0101,
      0x00e1,
      0x00e2,
      0x00e3,
      0x00e4,
      0x00e5,
      0x00e6,
      0x012f,
      0x010d,
      0x00e9,
      0x0119,
      0x00eb,
      0x0117,
      0x00ed,
      0x00ee,
      0x012b,
      0x0111,
      0x0146,
      0x014d,
      0x0137,
      0x00f4,
      0x00f5,
      0x00f6,
      0x00f7,
      0x00f8,
      0x0173,
      0x00fa,
      0x00fb,
      0x00fc,
      0x0169,
      0x016b,
      0x02d9,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xc4\x84",
      "\xc4\xb8",
      "\xc5\x96",
      "\xc2\xa4",
      "\xc4\xa8",
      "\xc4\xbb",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc5\xa0",
      "\xc4\x92",
      "\xc4\xa2",
      "\xc5\xa6",
      "\xc2\xad",
      "\xc5\xbd",
      "\xc2\xaf",
      "\xc2\xb0",
      "\xc4\x85",
      "\xcb\x9b",
      "\xc5\x97",
      "\xc2\xb4",
      "\xc4\xa9",
      "\xc4\xbc",
      "\xcb\x87",
      "\xc2\xb8",
      "\xc5\xa1",
      "\xc4\x93",
      "\xc4\xa3",
      "\xc5\xa7",
      "\xc5\x8a",
      "\xc5\xbe",
      "\xc5\x8b",
      "\xc4\x80",
      "\xc3\x81",
      "\xc3\x82",
      "\xc3\x83",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x86",
      "\xc4\xae",
      "\xc4\x8c",
      "\xc3\x89",
      "\xc4\x98",
      "\xc3\x8b",
      "\xc4\x96",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc4\xaa",
      "\xc4\x90",
      "\xc5\x85",
      "\xc5\x8c",
      "\xc4\xb6",
      "\xc3\x94",
      "\xc3\x95",
      "\xc3\x96",
      "\xc3\x97",
      "\xc3\x98",
      "\xc5\xb2",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc5\xa8",
      "\xc5\xaa",
      "\xc3\x9f",
      "\xc4\x81",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc3\xa3",
      "\xc3\xa4",
      "\xc3\xa5",
      "\xc3\xa6",
      "\xc4\xaf",
      "\xc4\x8d",
      "\xc3\xa9",
      "\xc4\x99",
      "\xc3\xab",
      "\xc4\x97",
      "\xc3\xad",
      "\xc3\xae",
      "\xc4\xab",
      "\xc4\x91",
      "\xc5\x86",
      "\xc5\x8d",
      "\xc4\xb7",
      "\xc3\xb4",
      "\xc3\xb5",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc3\xb8",
      "\xc5\xb3",
      "\xc3\xba",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc5\xa9",
      "\xc5\xab",
      "\xcb\x99",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000a4 => "\xa4",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xa8",
      0x000000ad => "\xad",
      0x000000af => "\xaf",
      0x000000b0 => "\xb0",
      0x000000b4 => "\xb4",
      0x000000b8 => "\xb8",
      0x000000c1 => "\xc1",
      0x000000c2 => "\xc2",
      0x000000c3 => "\xc3",
      0x000000c4 => "\xc4",
      0x000000c5 => "\xc5",
      0x000000c6 => "\xc6",
      0x000000c9 => "\xc9",
      0x000000cb => "\xcb",
      0x000000cd => "\xcd",
      0x000000ce => "\xce",
      0x000000d4 => "\xd4",
      0x000000d5 => "\xd5",
      0x000000d6 => "\xd6",
      0x000000d7 => "\xd7",
      0x000000d8 => "\xd8",
      0x000000da => "\xda",
      0x000000db => "\xdb",
      0x000000dc => "\xdc",
      0x000000df => "\xdf",
      0x000000e1 => "\xe1",
      0x000000e2 => "\xe2",
      0x000000e3 => "\xe3",
      0x000000e4 => "\xe4",
      0x000000e5 => "\xe5",
      0x000000e6 => "\xe6",
      0x000000e9 => "\xe9",
      0x000000eb => "\xeb",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000f4 => "\xf4",
      0x000000f5 => "\xf5",
      0x000000f6 => "\xf6",
      0x000000f7 => "\xf7",
      0x000000f8 => "\xf8",
      0x000000fa => "\xfa",
      0x000000fb => "\xfb",
      0x000000fc => "\xfc",
      0x00000100 => "\xc0",
      0x00000101 => "\xe0",
      0x00000104 => "\xa1",
      0x00000105 => "\xb1",
      0x0000010c => "\xc8",
      0x0000010d => "\xe8",
      0x00000110 => "\xd0",
      0x00000111 => "\xf0",
      0x00000112 => "\xaa",
      0x00000113 => "\xba",
      0x00000116 => "\xcc",
      0x00000117 => "\xec",
      0x00000118 => "\xca",
      0x00000119 => "\xea",
      0x00000122 => "\xab",
      0x00000123 => "\xbb",
      0x00000128 => "\xa5",
      0x00000129 => "\xb5",
      0x0000012a => "\xcf",
      0x0000012b => "\xef",
      0x0000012e => "\xc7",
      0x0000012f => "\xe7",
      0x00000136 => "\xd3",
      0x00000137 => "\xf3",
      0x00000138 => "\xa2",
      0x0000013b => "\xa6",
      0x0000013c => "\xb6",
      0x00000145 => "\xd1",
      0x00000146 => "\xf1",
      0x0000014a => "\xbd",
      0x0000014b => "\xbf",
      0x0000014c => "\xd2",
      0x0000014d => "\xf2",
      0x00000156 => "\xa3",
      0x00000157 => "\xb3",
      0x00000160 => "\xa9",
      0x00000161 => "\xb9",
      0x00000166 => "\xac",
      0x00000167 => "\xbc",
      0x00000168 => "\xdd",
      0x00000169 => "\xfd",
      0x0000016a => "\xde",
      0x0000016b => "\xfe",
      0x00000172 => "\xd9",
      0x00000173 => "\xf9",
      0x0000017d => "\xae",
      0x0000017e => "\xbe",
      0x000002c7 => "\xb7",
      0x000002d9 => "\xff",
      0x000002db => "\xb2",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_8859_4 - Conversion routines for ISO-8859-4
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO-8859-4.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-110
   alias ISO_8859-4:1988
   alias ISO_8859-4
   alias LATIN4
   alias L4
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  00000104 | LATIN CAPITAL LETTER A WITH OGONEK
      A2 |  00000138 | LATIN SMALL LETTER KRA (Greenlandic)
      A3 |  00000156 | LATIN CAPITAL LETTER R WITH CEDILLA
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  00000128 | LATIN CAPITAL LETTER I WITH TILDE
      A6 |  0000013B | LATIN CAPITAL LETTER L WITH CEDILLA
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      AA |  00000112 | LATIN CAPITAL LETTER E WITH MACRON
      AB |  00000122 | LATIN CAPITAL LETTER G WITH CEDILLA
      AC |  00000166 | LATIN CAPITAL LETTER T WITH STROKE
      AD |  000000AD | SOFT HYPHEN
      AE |  0000017D | LATIN CAPITAL LETTER Z WITH CARON
      AF |  000000AF | MACRON
      B0 |  000000B0 | DEGREE SIGN
      B1 |  00000105 | LATIN SMALL LETTER A WITH OGONEK
      B2 |  000002DB | OGONEK
      B3 |  00000157 | LATIN SMALL LETTER R WITH CEDILLA
      B4 |  000000B4 | ACUTE ACCENT
      B5 |  00000129 | LATIN SMALL LETTER I WITH TILDE
      B6 |  0000013C | LATIN SMALL LETTER L WITH CEDILLA
      B7 |  000002C7 | CARON (Mandarin Chinese third tone)
      B8 |  000000B8 | CEDILLA
      B9 |  00000161 | LATIN SMALL LETTER S WITH CARON
      BA |  00000113 | LATIN SMALL LETTER E WITH MACRON
      BB |  00000123 | LATIN SMALL LETTER G WITH CEDILLA
      BC |  00000167 | LATIN SMALL LETTER T WITH STROKE
      BD |  0000014A | LATIN CAPITAL LETTER ENG (Sami)
      BE |  0000017E | LATIN SMALL LETTER Z WITH CARON
      BF |  0000014B | LATIN SMALL LETTER ENG (Sami)
      C0 |  00000100 | LATIN CAPITAL LETTER A WITH MACRON
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C3 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      C6 |  000000C6 | LATIN CAPITAL LETTER AE
      C7 |  0000012E | LATIN CAPITAL LETTER I WITH OGONEK
      C8 |  0000010C | LATIN CAPITAL LETTER C WITH CARON
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  00000118 | LATIN CAPITAL LETTER E WITH OGONEK
      CB |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      CC |  00000116 | LATIN CAPITAL LETTER E WITH DOT ABOVE
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      CF |  0000012A | LATIN CAPITAL LETTER I WITH MACRON
      D0 |  00000110 | LATIN CAPITAL LETTER D WITH STROKE
      D1 |  00000145 | LATIN CAPITAL LETTER N WITH CEDILLA
      D2 |  0000014C | LATIN CAPITAL LETTER O WITH MACRON
      D3 |  00000136 | LATIN CAPITAL LETTER K WITH CEDILLA
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  000000D7 | MULTIPLICATION SIGN
      D8 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      D9 |  00000172 | LATIN CAPITAL LETTER U WITH OGONEK
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  00000168 | LATIN CAPITAL LETTER U WITH TILDE
      DE |  0000016A | LATIN CAPITAL LETTER U WITH MACRON
      DF |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E0 |  00000101 | LATIN SMALL LETTER A WITH MACRON
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      E6 |  000000E6 | LATIN SMALL LETTER AE
      E7 |  0000012F | LATIN SMALL LETTER I WITH OGONEK
      E8 |  0000010D | LATIN SMALL LETTER C WITH CARON
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  00000119 | LATIN SMALL LETTER E WITH OGONEK
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  00000117 | LATIN SMALL LETTER E WITH DOT ABOVE
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  0000012B | LATIN SMALL LETTER I WITH MACRON
      F0 |  00000111 | LATIN SMALL LETTER D WITH STROKE
      F1 |  00000146 | LATIN SMALL LETTER N WITH CEDILLA
      F2 |  0000014D | LATIN SMALL LETTER O WITH MACRON
      F3 |  00000137 | LATIN SMALL LETTER K WITH CEDILLA
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  000000F7 | DIVISION SIGN
      F8 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      F9 |  00000173 | LATIN SMALL LETTER U WITH OGONEK
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  00000169 | LATIN SMALL LETTER U WITH TILDE
      FE |  0000016B | LATIN SMALL LETTER U WITH MACRON
      FF |  000002D9 | DOT ABOVE (Mandarin Chinese light tone)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_8859_4

    $main::fatpacked{"Locale/RecodeData/ISO_8859_5.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_8859_5';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO-8859-5.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_8859_5;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0x0401,
      0x0402,
      0x0403,
      0x0404,
      0x0405,
      0x0406,
      0x0407,
      0x0408,
      0x0409,
      0x040a,
      0x040b,
      0x040c,
      0x00ad,
      0x040e,
      0x040f,
      0x0410,
      0x0411,
      0x0412,
      0x0413,
      0x0414,
      0x0415,
      0x0416,
      0x0417,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0x041d,
      0x041e,
      0x041f,
      0x0420,
      0x0421,
      0x0422,
      0x0423,
      0x0424,
      0x0425,
      0x0426,
      0x0427,
      0x0428,
      0x0429,
      0x042a,
      0x042b,
      0x042c,
      0x042d,
      0x042e,
      0x042f,
      0x0430,
      0x0431,
      0x0432,
      0x0433,
      0x0434,
      0x0435,
      0x0436,
      0x0437,
      0x0438,
      0x0439,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0444,
      0x0445,
      0x0446,
      0x0447,
      0x0448,
      0x0449,
      0x044a,
      0x044b,
      0x044c,
      0x044d,
      0x044e,
      0x044f,
      0x2116,
      0x0451,
      0x0452,
      0x0453,
      0x0454,
      0x0455,
      0x0456,
      0x0457,
      0x0458,
      0x0459,
      0x045a,
      0x045b,
      0x045c,
      0x00a7,
      0x045e,
      0x045f,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xd0\x81",
      "\xd0\x82",
      "\xd0\x83",
      "\xd0\x84",
      "\xd0\x85",
      "\xd0\x86",
      "\xd0\x87",
      "\xd0\x88",
      "\xd0\x89",
      "\xd0\x8a",
      "\xd0\x8b",
      "\xd0\x8c",
      "\xc2\xad",
      "\xd0\x8e",
      "\xd0\x8f",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\x92",
      "\xd0\x93",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\x96",
      "\xd0\x97",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xa0",
      "\xd0\xa1",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\xa4",
      "\xd0\xa5",
      "\xd0\xa6",
      "\xd0\xa7",
      "\xd0\xa8",
      "\xd0\xa9",
      "\xd0\xaa",
      "\xd0\xab",
      "\xd0\xac",
      "\xd0\xad",
      "\xd0\xae",
      "\xd0\xaf",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xd0\xb2",
      "\xd0\xb3",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd0\xb6",
      "\xd0\xb7",
      "\xd0\xb8",
      "\xd0\xb9",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd1\x84",
      "\xd1\x85",
      "\xd1\x86",
      "\xd1\x87",
      "\xd1\x88",
      "\xd1\x89",
      "\xd1\x8a",
      "\xd1\x8b",
      "\xd1\x8c",
      "\xd1\x8d",
      "\xd1\x8e",
      "\xd1\x8f",
      "\xe2\x84\x96",
      "\xd1\x91",
      "\xd1\x92",
      "\xd1\x93",
      "\xd1\x94",
      "\xd1\x95",
      "\xd1\x96",
      "\xd1\x97",
      "\xd1\x98",
      "\xd1\x99",
      "\xd1\x9a",
      "\xd1\x9b",
      "\xd1\x9c",
      "\xc2\xa7",
      "\xd1\x9e",
      "\xd1\x9f",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000a7 => "\xfd",
      0x000000ad => "\xad",
      0x00000401 => "\xa1",
      0x00000402 => "\xa2",
      0x00000403 => "\xa3",
      0x00000404 => "\xa4",
      0x00000405 => "\xa5",
      0x00000406 => "\xa6",
      0x00000407 => "\xa7",
      0x00000408 => "\xa8",
      0x00000409 => "\xa9",
      0x0000040a => "\xaa",
      0x0000040b => "\xab",
      0x0000040c => "\xac",
      0x0000040e => "\xae",
      0x0000040f => "\xaf",
      0x00000410 => "\xb0",
      0x00000411 => "\xb1",
      0x00000412 => "\xb2",
      0x00000413 => "\xb3",
      0x00000414 => "\xb4",
      0x00000415 => "\xb5",
      0x00000416 => "\xb6",
      0x00000417 => "\xb7",
      0x00000418 => "\xb8",
      0x00000419 => "\xb9",
      0x0000041a => "\xba",
      0x0000041b => "\xbb",
      0x0000041c => "\xbc",
      0x0000041d => "\xbd",
      0x0000041e => "\xbe",
      0x0000041f => "\xbf",
      0x00000420 => "\xc0",
      0x00000421 => "\xc1",
      0x00000422 => "\xc2",
      0x00000423 => "\xc3",
      0x00000424 => "\xc4",
      0x00000425 => "\xc5",
      0x00000426 => "\xc6",
      0x00000427 => "\xc7",
      0x00000428 => "\xc8",
      0x00000429 => "\xc9",
      0x0000042a => "\xca",
      0x0000042b => "\xcb",
      0x0000042c => "\xcc",
      0x0000042d => "\xcd",
      0x0000042e => "\xce",
      0x0000042f => "\xcf",
      0x00000430 => "\xd0",
      0x00000431 => "\xd1",
      0x00000432 => "\xd2",
      0x00000433 => "\xd3",
      0x00000434 => "\xd4",
      0x00000435 => "\xd5",
      0x00000436 => "\xd6",
      0x00000437 => "\xd7",
      0x00000438 => "\xd8",
      0x00000439 => "\xd9",
      0x0000043a => "\xda",
      0x0000043b => "\xdb",
      0x0000043c => "\xdc",
      0x0000043d => "\xdd",
      0x0000043e => "\xde",
      0x0000043f => "\xdf",
      0x00000440 => "\xe0",
      0x00000441 => "\xe1",
      0x00000442 => "\xe2",
      0x00000443 => "\xe3",
      0x00000444 => "\xe4",
      0x00000445 => "\xe5",
      0x00000446 => "\xe6",
      0x00000447 => "\xe7",
      0x00000448 => "\xe8",
      0x00000449 => "\xe9",
      0x0000044a => "\xea",
      0x0000044b => "\xeb",
      0x0000044c => "\xec",
      0x0000044d => "\xed",
      0x0000044e => "\xee",
      0x0000044f => "\xef",
      0x00000451 => "\xf1",
      0x00000452 => "\xf2",
      0x00000453 => "\xf3",
      0x00000454 => "\xf4",
      0x00000455 => "\xf5",
      0x00000456 => "\xf6",
      0x00000457 => "\xf7",
      0x00000458 => "\xf8",
      0x00000459 => "\xf9",
      0x0000045a => "\xfa",
      0x0000045b => "\xfb",
      0x0000045c => "\xfc",
      0x0000045e => "\xfe",
      0x0000045f => "\xff",
      0x00002116 => "\xf0",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_8859_5 - Conversion routines for ISO-8859-5
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO-8859-5.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-144
   alias ISO_8859-5:1988
   alias ISO_8859-5
   alias CYRILLIC
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  00000401 | CYRILLIC CAPITAL LETTER IO
      A2 |  00000402 | CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
      A3 |  00000403 | CYRILLIC CAPITAL LETTER GJE
      A4 |  00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE
      A5 |  00000405 | CYRILLIC CAPITAL LETTER DZE
      A6 |  00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
      A7 |  00000407 | CYRILLIC CAPITAL LETTER YI (Ukrainian)
      A8 |  00000408 | CYRILLIC CAPITAL LETTER JE
      A9 |  00000409 | CYRILLIC CAPITAL LETTER LJE
      AA |  0000040A | CYRILLIC CAPITAL LETTER NJE
      AB |  0000040B | CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
      AC |  0000040C | CYRILLIC CAPITAL LETTER KJE
      AD |  000000AD | SOFT HYPHEN
      AE |  0000040E | CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
      AF |  0000040F | CYRILLIC CAPITAL LETTER DZHE
      B0 |  00000410 | CYRILLIC CAPITAL LETTER A
      B1 |  00000411 | CYRILLIC CAPITAL LETTER BE
      B2 |  00000412 | CYRILLIC CAPITAL LETTER VE
      B3 |  00000413 | CYRILLIC CAPITAL LETTER GHE
      B4 |  00000414 | CYRILLIC CAPITAL LETTER DE
      B5 |  00000415 | CYRILLIC CAPITAL LETTER IE
      B6 |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      B7 |  00000417 | CYRILLIC CAPITAL LETTER ZE
      B8 |  00000418 | CYRILLIC CAPITAL LETTER I
      B9 |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      BA |  0000041A | CYRILLIC CAPITAL LETTER KA
      BB |  0000041B | CYRILLIC CAPITAL LETTER EL
      BC |  0000041C | CYRILLIC CAPITAL LETTER EM
      BD |  0000041D | CYRILLIC CAPITAL LETTER EN
      BE |  0000041E | CYRILLIC CAPITAL LETTER O
      BF |  0000041F | CYRILLIC CAPITAL LETTER PE
      C0 |  00000420 | CYRILLIC CAPITAL LETTER ER
      C1 |  00000421 | CYRILLIC CAPITAL LETTER ES
      C2 |  00000422 | CYRILLIC CAPITAL LETTER TE
      C3 |  00000423 | CYRILLIC CAPITAL LETTER U
      C4 |  00000424 | CYRILLIC CAPITAL LETTER EF
      C5 |  00000425 | CYRILLIC CAPITAL LETTER HA
      C6 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      C7 |  00000427 | CYRILLIC CAPITAL LETTER CHE
      C8 |  00000428 | CYRILLIC CAPITAL LETTER SHA
      C9 |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      CA |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
      CB |  0000042B | CYRILLIC CAPITAL LETTER YERU
      CC |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      CD |  0000042D | CYRILLIC CAPITAL LETTER E
      CE |  0000042E | CYRILLIC CAPITAL LETTER YU
      CF |  0000042F | CYRILLIC CAPITAL LETTER YA
      D0 |  00000430 | CYRILLIC SMALL LETTER A
      D1 |  00000431 | CYRILLIC SMALL LETTER BE
      D2 |  00000432 | CYRILLIC SMALL LETTER VE
      D3 |  00000433 | CYRILLIC SMALL LETTER GHE
      D4 |  00000434 | CYRILLIC SMALL LETTER DE
      D5 |  00000435 | CYRILLIC SMALL LETTER IE
      D6 |  00000436 | CYRILLIC SMALL LETTER ZHE
      D7 |  00000437 | CYRILLIC SMALL LETTER ZE
      D8 |  00000438 | CYRILLIC SMALL LETTER I
      D9 |  00000439 | CYRILLIC SMALL LETTER SHORT I
      DA |  0000043A | CYRILLIC SMALL LETTER KA
      DB |  0000043B | CYRILLIC SMALL LETTER EL
      DC |  0000043C | CYRILLIC SMALL LETTER EM
      DD |  0000043D | CYRILLIC SMALL LETTER EN
      DE |  0000043E | CYRILLIC SMALL LETTER O
      DF |  0000043F | CYRILLIC SMALL LETTER PE
      E0 |  00000440 | CYRILLIC SMALL LETTER ER
      E1 |  00000441 | CYRILLIC SMALL LETTER ES
      E2 |  00000442 | CYRILLIC SMALL LETTER TE
      E3 |  00000443 | CYRILLIC SMALL LETTER U
      E4 |  00000444 | CYRILLIC SMALL LETTER EF
      E5 |  00000445 | CYRILLIC SMALL LETTER HA
      E6 |  00000446 | CYRILLIC SMALL LETTER TSE
      E7 |  00000447 | CYRILLIC SMALL LETTER CHE
      E8 |  00000448 | CYRILLIC SMALL LETTER SHA
      E9 |  00000449 | CYRILLIC SMALL LETTER SHCHA
      EA |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      EB |  0000044B | CYRILLIC SMALL LETTER YERU
      EC |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      ED |  0000044D | CYRILLIC SMALL LETTER E
      EE |  0000044E | CYRILLIC SMALL LETTER YU
      EF |  0000044F | CYRILLIC SMALL LETTER YA
      F0 |  00002116 | NUMERO SIGN
      F1 |  00000451 | CYRILLIC SMALL LETTER IO
      F2 |  00000452 | CYRILLIC SMALL LETTER DJE (Serbocroatian)
      F3 |  00000453 | CYRILLIC SMALL LETTER GJE
      F4 |  00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE
      F5 |  00000455 | CYRILLIC SMALL LETTER DZE
      F6 |  00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
      F7 |  00000457 | CYRILLIC SMALL LETTER YI (Ukrainian)
      F8 |  00000458 | CYRILLIC SMALL LETTER JE
      F9 |  00000459 | CYRILLIC SMALL LETTER LJE
      FA |  0000045A | CYRILLIC SMALL LETTER NJE
      FB |  0000045B | CYRILLIC SMALL LETTER TSHE (Serbocroatian)
      FC |  0000045C | CYRILLIC SMALL LETTER KJE
      FD |  000000A7 | SECTION SIGN
      FE |  0000045E | CYRILLIC SMALL LETTER SHORT U (Byelorussian)
      FF |  0000045F | CYRILLIC SMALL LETTER DZHE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_8859_5

    $main::fatpacked{"Locale/RecodeData/ISO_8859_6.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_8859_6';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO-8859-6.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_8859_6;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a4,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x060c,
      0x00ad,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x061b,
      0xfffd,
      0xfffd,
      0xfffd,
      0x061f,
      0xfffd,
      0x0621,
      0x0622,
      0x0623,
      0x0624,
      0x0625,
      0x0626,
      0x0627,
      0x0628,
      0x0629,
      0x062a,
      0x062b,
      0x062c,
      0x062d,
      0x062e,
      0x062f,
      0x0630,
      0x0631,
      0x0632,
      0x0633,
      0x0634,
      0x0635,
      0x0636,
      0x0637,
      0x0638,
      0x0639,
      0x063a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0640,
      0x0641,
      0x0642,
      0x0643,
      0x0644,
      0x0645,
      0x0646,
      0x0647,
      0x0648,
      0x0649,
      0x064a,
      0x064b,
      0x064c,
      0x064d,
      0x064e,
      0x064f,
      0x0650,
      0x0651,
      0x0652,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa4",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd8\x8c",
      "\xc2\xad",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd8\x9b",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd8\x9f",
      "\xef\xbf\xbd",
      "\xd8\xa1",
      "\xd8\xa2",
      "\xd8\xa3",
      "\xd8\xa4",
      "\xd8\xa5",
      "\xd8\xa6",
      "\xd8\xa7",
      "\xd8\xa8",
      "\xd8\xa9",
      "\xd8\xaa",
      "\xd8\xab",
      "\xd8\xac",
      "\xd8\xad",
      "\xd8\xae",
      "\xd8\xaf",
      "\xd8\xb0",
      "\xd8\xb1",
      "\xd8\xb2",
      "\xd8\xb3",
      "\xd8\xb4",
      "\xd8\xb5",
      "\xd8\xb6",
      "\xd8\xb7",
      "\xd8\xb8",
      "\xd8\xb9",
      "\xd8\xba",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd9\x80",
      "\xd9\x81",
      "\xd9\x82",
      "\xd9\x83",
      "\xd9\x84",
      "\xd9\x85",
      "\xd9\x86",
      "\xd9\x87",
      "\xd9\x88",
      "\xd9\x89",
      "\xd9\x8a",
      "\xd9\x8b",
      "\xd9\x8c",
      "\xd9\x8d",
      "\xd9\x8e",
      "\xd9\x8f",
      "\xd9\x90",
      "\xd9\x91",
      "\xd9\x92",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000a4 => "\xa4",
      0x000000ad => "\xad",
      0x0000060c => "\xac",
      0x0000061b => "\xbb",
      0x0000061f => "\xbf",
      0x00000621 => "\xc1",
      0x00000622 => "\xc2",
      0x00000623 => "\xc3",
      0x00000624 => "\xc4",
      0x00000625 => "\xc5",
      0x00000626 => "\xc6",
      0x00000627 => "\xc7",
      0x00000628 => "\xc8",
      0x00000629 => "\xc9",
      0x0000062a => "\xca",
      0x0000062b => "\xcb",
      0x0000062c => "\xcc",
      0x0000062d => "\xcd",
      0x0000062e => "\xce",
      0x0000062f => "\xcf",
      0x00000630 => "\xd0",
      0x00000631 => "\xd1",
      0x00000632 => "\xd2",
      0x00000633 => "\xd3",
      0x00000634 => "\xd4",
      0x00000635 => "\xd5",
      0x00000636 => "\xd6",
      0x00000637 => "\xd7",
      0x00000638 => "\xd8",
      0x00000639 => "\xd9",
      0x0000063a => "\xda",
      0x00000640 => "\xe0",
      0x00000641 => "\xe1",
      0x00000642 => "\xe2",
      0x00000643 => "\xe3",
      0x00000644 => "\xe4",
      0x00000645 => "\xe5",
      0x00000646 => "\xe6",
      0x00000647 => "\xe7",
      0x00000648 => "\xe8",
      0x00000649 => "\xe9",
      0x0000064a => "\xea",
      0x0000064b => "\xeb",
      0x0000064c => "\xec",
      0x0000064d => "\xed",
      0x0000064e => "\xee",
      0x0000064f => "\xef",
      0x00000650 => "\xf0",
      0x00000651 => "\xf1",
      0x00000652 => "\xf2",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_8859_6 - Conversion routines for ISO-8859-6
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO-8859-6.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-127
   alias ISO_8859-6:1987
   alias ISO_8859-6
   alias ECMA-114
   alias ASMO-708
   alias ARABIC
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A4 |  000000A4 | CURRENCY SIGN
      AC |  0000060C | ARABIC COMMA
      AD |  000000AD | SOFT HYPHEN
      BB |  0000061B | ARABIC SEMICOLON
      BF |  0000061F | ARABIC QUESTION MARK
      C1 |  00000621 | ARABIC LETTER HAMZA
      C2 |  00000622 | ARABIC LETTER ALEF WITH MADDA ABOVE
      C3 |  00000623 | ARABIC LETTER ALEF WITH HAMZA ABOVE
      C4 |  00000624 | ARABIC LETTER WAW WITH HAMZA ABOVE
      C5 |  00000625 | ARABIC LETTER ALEF WITH HAMZA BELOW
      C6 |  00000626 | ARABIC LETTER YEH WITH HAMZA ABOVE
      C7 |  00000627 | ARABIC LETTER ALEF
      C8 |  00000628 | ARABIC LETTER BEH
      C9 |  00000629 | ARABIC LETTER TEH MARBUTA
      CA |  0000062A | ARABIC LETTER TEH
      CB |  0000062B | ARABIC LETTER THEH
      CC |  0000062C | ARABIC LETTER JEEM
      CD |  0000062D | ARABIC LETTER HAH
      CE |  0000062E | ARABIC LETTER KHAH
      CF |  0000062F | ARABIC LETTER DAL
      D0 |  00000630 | ARABIC LETTER THAL
      D1 |  00000631 | ARABIC LETTER REH
      D2 |  00000632 | ARABIC LETTER ZAIN
      D3 |  00000633 | ARABIC LETTER SEEN
      D4 |  00000634 | ARABIC LETTER SHEEN
      D5 |  00000635 | ARABIC LETTER SAD
      D6 |  00000636 | ARABIC LETTER DAD
      D7 |  00000637 | ARABIC LETTER TAH
      D8 |  00000638 | ARABIC LETTER ZAH
      D9 |  00000639 | ARABIC LETTER AIN
      DA |  0000063A | ARABIC LETTER GHAIN
      E0 |  00000640 | ARABIC TATWEEL
      E1 |  00000641 | ARABIC LETTER FEH
      E2 |  00000642 | ARABIC LETTER QAF
      E3 |  00000643 | ARABIC LETTER KAF
      E4 |  00000644 | ARABIC LETTER LAM
      E5 |  00000645 | ARABIC LETTER MEEM
      E6 |  00000646 | ARABIC LETTER NOON
      E7 |  00000647 | ARABIC LETTER HEH
      E8 |  00000648 | ARABIC LETTER WAW
      E9 |  00000649 | ARABIC LETTER ALEF MAKSURA
      EA |  0000064A | ARABIC LETTER YEH
      EB |  0000064B | ARABIC FATHATAN
      EC |  0000064C | ARABIC DAMMATAN
      ED |  0000064D | ARABIC KASRATAN
      EE |  0000064E | ARABIC FATHA
      EF |  0000064F | ARABIC DAMMA
      F0 |  00000650 | ARABIC KASRA
      F1 |  00000651 | ARABIC SHADDA
      F2 |  00000652 | ARABIC SUKUN
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_8859_6

    $main::fatpacked{"Locale/RecodeData/ISO_8859_7.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_8859_7';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO-8859-7.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_8859_7;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0x2018,
      0x2019,
      0x00a3,
      0xfffd,
      0xfffd,
      0x00a6,
      0x00a7,
      0x00a8,
      0x00a9,
      0xfffd,
      0x00ab,
      0x00ac,
      0x00ad,
      0xfffd,
      0x2015,
      0x00b0,
      0x00b1,
      0x00b2,
      0x00b3,
      0x0384,
      0x0385,
      0x0386,
      0x00b7,
      0x0388,
      0x0389,
      0x038a,
      0x00bb,
      0x038c,
      0x00bd,
      0x038e,
      0x038f,
      0x0390,
      0x0391,
      0x0392,
      0x0393,
      0x0394,
      0x0395,
      0x0396,
      0x0397,
      0x0398,
      0x0399,
      0x039a,
      0x039b,
      0x039c,
      0x039d,
      0x039e,
      0x039f,
      0x03a0,
      0x03a1,
      0xfffd,
      0x03a3,
      0x03a4,
      0x03a5,
      0x03a6,
      0x03a7,
      0x03a8,
      0x03a9,
      0x03aa,
      0x03ab,
      0x03ac,
      0x03ad,
      0x03ae,
      0x03af,
      0x03b0,
      0x03b1,
      0x03b2,
      0x03b3,
      0x03b4,
      0x03b5,
      0x03b6,
      0x03b7,
      0x03b8,
      0x03b9,
      0x03ba,
      0x03bb,
      0x03bc,
      0x03bd,
      0x03be,
      0x03bf,
      0x03c0,
      0x03c1,
      0x03c2,
      0x03c3,
      0x03c4,
      0x03c5,
      0x03c6,
      0x03c7,
      0x03c8,
      0x03c9,
      0x03ca,
      0x03cb,
      0x03cc,
      0x03cd,
      0x03ce,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xc2\xa3",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc2\xa9",
      "\xef\xbf\xbd",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xef\xbf\xbd",
      "\xe2\x80\x95",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xce\x84",
      "\xce\x85",
      "\xce\x86",
      "\xc2\xb7",
      "\xce\x88",
      "\xce\x89",
      "\xce\x8a",
      "\xc2\xbb",
      "\xce\x8c",
      "\xc2\xbd",
      "\xce\x8e",
      "\xce\x8f",
      "\xce\x90",
      "\xce\x91",
      "\xce\x92",
      "\xce\x93",
      "\xce\x94",
      "\xce\x95",
      "\xce\x96",
      "\xce\x97",
      "\xce\x98",
      "\xce\x99",
      "\xce\x9a",
      "\xce\x9b",
      "\xce\x9c",
      "\xce\x9d",
      "\xce\x9e",
      "\xce\x9f",
      "\xce\xa0",
      "\xce\xa1",
      "\xef\xbf\xbd",
      "\xce\xa3",
      "\xce\xa4",
      "\xce\xa5",
      "\xce\xa6",
      "\xce\xa7",
      "\xce\xa8",
      "\xce\xa9",
      "\xce\xaa",
      "\xce\xab",
      "\xce\xac",
      "\xce\xad",
      "\xce\xae",
      "\xce\xaf",
      "\xce\xb0",
      "\xce\xb1",
      "\xce\xb2",
      "\xce\xb3",
      "\xce\xb4",
      "\xce\xb5",
      "\xce\xb6",
      "\xce\xb7",
      "\xce\xb8",
      "\xce\xb9",
      "\xce\xba",
      "\xce\xbb",
      "\xce\xbc",
      "\xce\xbd",
      "\xce\xbe",
      "\xce\xbf",
      "\xcf\x80",
      "\xcf\x81",
      "\xcf\x82",
      "\xcf\x83",
      "\xcf\x84",
      "\xcf\x85",
      "\xcf\x86",
      "\xcf\x87",
      "\xcf\x88",
      "\xcf\x89",
      "\xcf\x8a",
      "\xcf\x8b",
      "\xcf\x8c",
      "\xcf\x8d",
      "\xcf\x8e",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000a3 => "\xa3",
      0x000000a6 => "\xa6",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xa8",
      0x000000a9 => "\xa9",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b2 => "\xb2",
      0x000000b3 => "\xb3",
      0x000000b7 => "\xb7",
      0x000000bb => "\xbb",
      0x000000bd => "\xbd",
      0x00000384 => "\xb4",
      0x00000385 => "\xb5",
      0x00000386 => "\xb6",
      0x00000388 => "\xb8",
      0x00000389 => "\xb9",
      0x0000038a => "\xba",
      0x0000038c => "\xbc",
      0x0000038e => "\xbe",
      0x0000038f => "\xbf",
      0x00000390 => "\xc0",
      0x00000391 => "\xc1",
      0x00000392 => "\xc2",
      0x00000393 => "\xc3",
      0x00000394 => "\xc4",
      0x00000395 => "\xc5",
      0x00000396 => "\xc6",
      0x00000397 => "\xc7",
      0x00000398 => "\xc8",
      0x00000399 => "\xc9",
      0x0000039a => "\xca",
      0x0000039b => "\xcb",
      0x0000039c => "\xcc",
      0x0000039d => "\xcd",
      0x0000039e => "\xce",
      0x0000039f => "\xcf",
      0x000003a0 => "\xd0",
      0x000003a1 => "\xd1",
      0x000003a3 => "\xd3",
      0x000003a4 => "\xd4",
      0x000003a5 => "\xd5",
      0x000003a6 => "\xd6",
      0x000003a7 => "\xd7",
      0x000003a8 => "\xd8",
      0x000003a9 => "\xd9",
      0x000003aa => "\xda",
      0x000003ab => "\xdb",
      0x000003ac => "\xdc",
      0x000003ad => "\xdd",
      0x000003ae => "\xde",
      0x000003af => "\xdf",
      0x000003b0 => "\xe0",
      0x000003b1 => "\xe1",
      0x000003b2 => "\xe2",
      0x000003b3 => "\xe3",
      0x000003b4 => "\xe4",
      0x000003b5 => "\xe5",
      0x000003b6 => "\xe6",
      0x000003b7 => "\xe7",
      0x000003b8 => "\xe8",
      0x000003b9 => "\xe9",
      0x000003ba => "\xea",
      0x000003bb => "\xeb",
      0x000003bc => "\xec",
      0x000003bd => "\xed",
      0x000003be => "\xee",
      0x000003bf => "\xef",
      0x000003c0 => "\xf0",
      0x000003c1 => "\xf1",
      0x000003c2 => "\xf2",
      0x000003c3 => "\xf3",
      0x000003c4 => "\xf4",
      0x000003c5 => "\xf5",
      0x000003c6 => "\xf6",
      0x000003c7 => "\xf7",
      0x000003c8 => "\xf8",
      0x000003c9 => "\xf9",
      0x000003ca => "\xfa",
      0x000003cb => "\xfb",
      0x000003cc => "\xfc",
      0x000003cd => "\xfd",
      0x000003ce => "\xfe",
      0x00002015 => "\xaf",
      0x00002018 => "\xa1",
      0x00002019 => "\xa2",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_8859_7 - Conversion routines for ISO-8859-7
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO-8859-7.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-126
   alias ISO_8859-7:1987
   alias ISO_8859-7
   alias ELOT_928
   alias ECMA-118
   alias GREEK
   alias GREEK8
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  00002018 | LEFT SINGLE QUOTATION MARK
      A2 |  00002019 | RIGHT SINGLE QUOTATION MARK
      A3 |  000000A3 | POUND SIGN
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  000000A9 | COPYRIGHT SIGN
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AF |  00002015 | HORIZONTAL BAR
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  000000B3 | SUPERSCRIPT THREE
      B4 |  00000384 | GREEK TONOS
      B5 |  00000385 | GREEK DIALYTIKA TONOS
      B6 |  00000386 | GREEK CAPITAL LETTER ALPHA WITH TONOS
      B7 |  000000B7 | MIDDLE DOT
      B8 |  00000388 | GREEK CAPITAL LETTER EPSILON WITH TONOS
      B9 |  00000389 | GREEK CAPITAL LETTER ETA WITH TONOS
      BA |  0000038A | GREEK CAPITAL LETTER IOTA WITH TONOS
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  0000038C | GREEK CAPITAL LETTER OMICRON WITH TONOS
      BD |  000000BD | VULGAR FRACTION ONE HALF
      BE |  0000038E | GREEK CAPITAL LETTER UPSILON WITH TONOS
      BF |  0000038F | GREEK CAPITAL LETTER OMEGA WITH TONOS
      C0 |  00000390 | GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
      C1 |  00000391 | GREEK CAPITAL LETTER ALPHA
      C2 |  00000392 | GREEK CAPITAL LETTER BETA
      C3 |  00000393 | GREEK CAPITAL LETTER GAMMA
      C4 |  00000394 | GREEK CAPITAL LETTER DELTA
      C5 |  00000395 | GREEK CAPITAL LETTER EPSILON
      C6 |  00000396 | GREEK CAPITAL LETTER ZETA
      C7 |  00000397 | GREEK CAPITAL LETTER ETA
      C8 |  00000398 | GREEK CAPITAL LETTER THETA
      C9 |  00000399 | GREEK CAPITAL LETTER IOTA
      CA |  0000039A | GREEK CAPITAL LETTER KAPPA
      CB |  0000039B | GREEK CAPITAL LETTER LAMDA
      CC |  0000039C | GREEK CAPITAL LETTER MU
      CD |  0000039D | GREEK CAPITAL LETTER NU
      CE |  0000039E | GREEK CAPITAL LETTER XI
      CF |  0000039F | GREEK CAPITAL LETTER OMICRON
      D0 |  000003A0 | GREEK CAPITAL LETTER PI
      D1 |  000003A1 | GREEK CAPITAL LETTER RHO
      D3 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      D4 |  000003A4 | GREEK CAPITAL LETTER TAU
      D5 |  000003A5 | GREEK CAPITAL LETTER UPSILON
      D6 |  000003A6 | GREEK CAPITAL LETTER PHI
      D7 |  000003A7 | GREEK CAPITAL LETTER CHI
      D8 |  000003A8 | GREEK CAPITAL LETTER PSI
      D9 |  000003A9 | GREEK CAPITAL LETTER OMEGA
      DA |  000003AA | GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
      DB |  000003AB | GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
      DC |  000003AC | GREEK SMALL LETTER ALPHA WITH TONOS
      DD |  000003AD | GREEK SMALL LETTER EPSILON WITH TONOS
      DE |  000003AE | GREEK SMALL LETTER ETA WITH TONOS
      DF |  000003AF | GREEK SMALL LETTER IOTA WITH TONOS
      E0 |  000003B0 | GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
      E1 |  000003B1 | GREEK SMALL LETTER ALPHA
      E2 |  000003B2 | GREEK SMALL LETTER BETA
      E3 |  000003B3 | GREEK SMALL LETTER GAMMA
      E4 |  000003B4 | GREEK SMALL LETTER DELTA
      E5 |  000003B5 | GREEK SMALL LETTER EPSILON
      E6 |  000003B6 | GREEK SMALL LETTER ZETA
      E7 |  000003B7 | GREEK SMALL LETTER ETA
      E8 |  000003B8 | GREEK SMALL LETTER THETA
      E9 |  000003B9 | GREEK SMALL LETTER IOTA
      EA |  000003BA | GREEK SMALL LETTER KAPPA
      EB |  000003BB | GREEK SMALL LETTER LAMDA
      EC |  000003BC | GREEK SMALL LETTER MU
      ED |  000003BD | GREEK SMALL LETTER NU
      EE |  000003BE | GREEK SMALL LETTER XI
      EF |  000003BF | GREEK SMALL LETTER OMICRON
      F0 |  000003C0 | GREEK SMALL LETTER PI
      F1 |  000003C1 | GREEK SMALL LETTER RHO
      F2 |  000003C2 | GREEK SMALL LETTER FINAL SIGMA
      F3 |  000003C3 | GREEK SMALL LETTER SIGMA
      F4 |  000003C4 | GREEK SMALL LETTER TAU
      F5 |  000003C5 | GREEK SMALL LETTER UPSILON
      F6 |  000003C6 | GREEK SMALL LETTER PHI
      F7 |  000003C7 | GREEK SMALL LETTER CHI
      F8 |  000003C8 | GREEK SMALL LETTER PSI
      F9 |  000003C9 | GREEK SMALL LETTER OMEGA
      FA |  000003CA | GREEK SMALL LETTER IOTA WITH DIALYTIKA
      FB |  000003CB | GREEK SMALL LETTER UPSILON WITH DIALYTIKA
      FC |  000003CC | GREEK SMALL LETTER OMICRON WITH TONOS
      FD |  000003CD | GREEK SMALL LETTER UPSILON WITH TONOS
      FE |  000003CE | GREEK SMALL LETTER OMEGA WITH TONOS
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_8859_7

    $main::fatpacked{"Locale/RecodeData/ISO_8859_8.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_8859_8';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO-8859-8.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_8859_8;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0xfffd,
      0x00a2,
      0x00a3,
      0x00a4,
      0x00a5,
      0x00a6,
      0x00a7,
      0x00a8,
      0x00a9,
      0x00d7,
      0x00ab,
      0x00ac,
      0x00ad,
      0x00ae,
      0x00af,
      0x00b0,
      0x00b1,
      0x00b2,
      0x00b3,
      0x00b4,
      0x00b5,
      0x00b6,
      0x00b7,
      0x00b8,
      0x00b9,
      0x00f7,
      0x00bb,
      0x00bc,
      0x00bd,
      0x00be,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x2017,
      0x05d0,
      0x05d1,
      0x05d2,
      0x05d3,
      0x05d4,
      0x05d5,
      0x05d6,
      0x05d7,
      0x05d8,
      0x05d9,
      0x05da,
      0x05db,
      0x05dc,
      0x05dd,
      0x05de,
      0x05df,
      0x05e0,
      0x05e1,
      0x05e2,
      0x05e3,
      0x05e4,
      0x05e5,
      0x05e6,
      0x05e7,
      0x05e8,
      0x05e9,
      0x05ea,
      0xfffd,
      0xfffd,
      0x200e,
      0x200f,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xef\xbf\xbd",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa4",
      "\xc2\xa5",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc2\xa9",
      "\xc3\x97",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xc2\xaf",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xc2\xb4",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xc2\xb8",
      "\xc2\xb9",
      "\xc3\xb7",
      "\xc2\xbb",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x80\x97",
      "\xd7\x90",
      "\xd7\x91",
      "\xd7\x92",
      "\xd7\x93",
      "\xd7\x94",
      "\xd7\x95",
      "\xd7\x96",
      "\xd7\x97",
      "\xd7\x98",
      "\xd7\x99",
      "\xd7\x9a",
      "\xd7\x9b",
      "\xd7\x9c",
      "\xd7\x9d",
      "\xd7\x9e",
      "\xd7\x9f",
      "\xd7\xa0",
      "\xd7\xa1",
      "\xd7\xa2",
      "\xd7\xa3",
      "\xd7\xa4",
      "\xd7\xa5",
      "\xd7\xa6",
      "\xd7\xa7",
      "\xd7\xa8",
      "\xd7\xa9",
      "\xd7\xaa",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x80\x8e",
      "\xe2\x80\x8f",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xa4",
      0x000000a5 => "\xa5",
      0x000000a6 => "\xa6",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xa8",
      0x000000a9 => "\xa9",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000af => "\xaf",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b2 => "\xb2",
      0x000000b3 => "\xb3",
      0x000000b4 => "\xb4",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000b8 => "\xb8",
      0x000000b9 => "\xb9",
      0x000000bb => "\xbb",
      0x000000bc => "\xbc",
      0x000000bd => "\xbd",
      0x000000be => "\xbe",
      0x000000d7 => "\xaa",
      0x000000f7 => "\xba",
      0x000005d0 => "\xe0",
      0x000005d1 => "\xe1",
      0x000005d2 => "\xe2",
      0x000005d3 => "\xe3",
      0x000005d4 => "\xe4",
      0x000005d5 => "\xe5",
      0x000005d6 => "\xe6",
      0x000005d7 => "\xe7",
      0x000005d8 => "\xe8",
      0x000005d9 => "\xe9",
      0x000005da => "\xea",
      0x000005db => "\xeb",
      0x000005dc => "\xec",
      0x000005dd => "\xed",
      0x000005de => "\xee",
      0x000005df => "\xef",
      0x000005e0 => "\xf0",
      0x000005e1 => "\xf1",
      0x000005e2 => "\xf2",
      0x000005e3 => "\xf3",
      0x000005e4 => "\xf4",
      0x000005e5 => "\xf5",
      0x000005e6 => "\xf6",
      0x000005e7 => "\xf7",
      0x000005e8 => "\xf8",
      0x000005e9 => "\xf9",
      0x000005ea => "\xfa",
      0x0000200e => "\xfd",
      0x0000200f => "\xfe",
      0x00002017 => "\xdf",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_8859_8 - Conversion routines for ISO-8859-8
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO-8859-8.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-138
   alias ISO_8859-8:1988
   alias ISO_8859-8
   alias HEBREW
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  000000A5 | YEN SIGN
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  000000D7 | MULTIPLICATION SIGN
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  000000AF | MACRON
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  000000B3 | SUPERSCRIPT THREE
      B4 |  000000B4 | ACUTE ACCENT
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  000000B8 | CEDILLA
      B9 |  000000B9 | SUPERSCRIPT ONE
      BA |  000000F7 | DIVISION SIGN
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  000000BC | VULGAR FRACTION ONE QUARTER
      BD |  000000BD | VULGAR FRACTION ONE HALF
      BE |  000000BE | VULGAR FRACTION THREE QUARTERS
      DF |  00002017 | DOUBLE LOW LINE
      E0 |  000005D0 | HEBREW LETTER ALEF
      E1 |  000005D1 | HEBREW LETTER BET
      E2 |  000005D2 | HEBREW LETTER GIMEL
      E3 |  000005D3 | HEBREW LETTER DALET
      E4 |  000005D4 | HEBREW LETTER HE
      E5 |  000005D5 | HEBREW LETTER VAV
      E6 |  000005D6 | HEBREW LETTER ZAYIN
      E7 |  000005D7 | HEBREW LETTER HET
      E8 |  000005D8 | HEBREW LETTER TET
      E9 |  000005D9 | HEBREW LETTER YOD
      EA |  000005DA | HEBREW LETTER FINAL KAF
      EB |  000005DB | HEBREW LETTER KAF
      EC |  000005DC | HEBREW LETTER LAMED
      ED |  000005DD | HEBREW LETTER FINAL MEM
      EE |  000005DE | HEBREW LETTER MEM
      EF |  000005DF | HEBREW LETTER FINAL NUN
      F0 |  000005E0 | HEBREW LETTER NUN
      F1 |  000005E1 | HEBREW LETTER SAMEKH
      F2 |  000005E2 | HEBREW LETTER AYIN
      F3 |  000005E3 | HEBREW LETTER FINAL PE
      F4 |  000005E4 | HEBREW LETTER PE
      F5 |  000005E5 | HEBREW LETTER FINAL TSADI
      F6 |  000005E6 | HEBREW LETTER TSADI
      F7 |  000005E7 | HEBREW LETTER QOF
      F8 |  000005E8 | HEBREW LETTER RESH
      F9 |  000005E9 | HEBREW LETTER SHIN
      FA |  000005EA | HEBREW LETTER TAV
      FD |  0000200E | LEFT-TO-RIGHT MARK
      FE |  0000200F | RIGHT-TO-LEFT MARK
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_8859_8

    $main::fatpacked{"Locale/RecodeData/ISO_8859_9.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_ISO_8859_9';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for ISO-8859-9.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::ISO_8859_9;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0080,
      0x0081,
      0x0082,
      0x0083,
      0x0084,
      0x0085,
      0x0086,
      0x0087,
      0x0088,
      0x0089,
      0x008a,
      0x008b,
      0x008c,
      0x008d,
      0x008e,
      0x008f,
      0x0090,
      0x0091,
      0x0092,
      0x0093,
      0x0094,
      0x0095,
      0x0096,
      0x0097,
      0x0098,
      0x0099,
      0x009a,
      0x009b,
      0x009c,
      0x009d,
      0x009e,
      0x009f,
      0x00a0,
      0x00a1,
      0x00a2,
      0x00a3,
      0x00a4,
      0x00a5,
      0x00a6,
      0x00a7,
      0x00a8,
      0x00a9,
      0x00aa,
      0x00ab,
      0x00ac,
      0x00ad,
      0x00ae,
      0x00af,
      0x00b0,
      0x00b1,
      0x00b2,
      0x00b3,
      0x00b4,
      0x00b5,
      0x00b6,
      0x00b7,
      0x00b8,
      0x00b9,
      0x00ba,
      0x00bb,
      0x00bc,
      0x00bd,
      0x00be,
      0x00bf,
      0x00c0,
      0x00c1,
      0x00c2,
      0x00c3,
      0x00c4,
      0x00c5,
      0x00c6,
      0x00c7,
      0x00c8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00cc,
      0x00cd,
      0x00ce,
      0x00cf,
      0x011e,
      0x00d1,
      0x00d2,
      0x00d3,
      0x00d4,
      0x00d5,
      0x00d6,
      0x00d7,
      0x00d8,
      0x00d9,
      0x00da,
      0x00db,
      0x00dc,
      0x0130,
      0x015e,
      0x00df,
      0x00e0,
      0x00e1,
      0x00e2,
      0x00e3,
      0x00e4,
      0x00e5,
      0x00e6,
      0x00e7,
      0x00e8,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00ec,
      0x00ed,
      0x00ee,
      0x00ef,
      0x011f,
      0x00f1,
      0x00f2,
      0x00f3,
      0x00f4,
      0x00f5,
      0x00f6,
      0x00f7,
      0x00f8,
      0x00f9,
      0x00fa,
      0x00fb,
      0x00fc,
      0x0131,
      0x015f,
      0x00ff,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\x80",
      "\xc2\x81",
      "\xc2\x82",
      "\xc2\x83",
      "\xc2\x84",
      "\xc2\x85",
      "\xc2\x86",
      "\xc2\x87",
      "\xc2\x88",
      "\xc2\x89",
      "\xc2\x8a",
      "\xc2\x8b",
      "\xc2\x8c",
      "\xc2\x8d",
      "\xc2\x8e",
      "\xc2\x8f",
      "\xc2\x90",
      "\xc2\x91",
      "\xc2\x92",
      "\xc2\x93",
      "\xc2\x94",
      "\xc2\x95",
      "\xc2\x96",
      "\xc2\x97",
      "\xc2\x98",
      "\xc2\x99",
      "\xc2\x9a",
      "\xc2\x9b",
      "\xc2\x9c",
      "\xc2\x9d",
      "\xc2\x9e",
      "\xc2\x9f",
      "\xc2\xa0",
      "\xc2\xa1",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa4",
      "\xc2\xa5",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc2\xa9",
      "\xc2\xaa",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xc2\xaf",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc2\xb2",
      "\xc2\xb3",
      "\xc2\xb4",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xc2\xb8",
      "\xc2\xb9",
      "\xc2\xba",
      "\xc2\xbb",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc2\xbf",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x82",
      "\xc3\x83",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x86",
      "\xc3\x87",
      "\xc3\x88",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x8c",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc4\x9e",
      "\xc3\x91",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x94",
      "\xc3\x95",
      "\xc3\x96",
      "\xc3\x97",
      "\xc3\x98",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc4\xb0",
      "\xc5\x9e",
      "\xc3\x9f",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc3\xa3",
      "\xc3\xa4",
      "\xc3\xa5",
      "\xc3\xa6",
      "\xc3\xa7",
      "\xc3\xa8",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xac",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc4\x9f",
      "\xc3\xb1",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc3\xb5",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc3\xb8",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc4\xb1",
      "\xc5\x9f",
      "\xc3\xbf",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000080 => "\x80",
      0x00000081 => "\x81",
      0x00000082 => "\x82",
      0x00000083 => "\x83",
      0x00000084 => "\x84",
      0x00000085 => "\x85",
      0x00000086 => "\x86",
      0x00000087 => "\x87",
      0x00000088 => "\x88",
      0x00000089 => "\x89",
      0x0000008a => "\x8a",
      0x0000008b => "\x8b",
      0x0000008c => "\x8c",
      0x0000008d => "\x8d",
      0x0000008e => "\x8e",
      0x0000008f => "\x8f",
      0x00000090 => "\x90",
      0x00000091 => "\x91",
      0x00000092 => "\x92",
      0x00000093 => "\x93",
      0x00000094 => "\x94",
      0x00000095 => "\x95",
      0x00000096 => "\x96",
      0x00000097 => "\x97",
      0x00000098 => "\x98",
      0x00000099 => "\x99",
      0x0000009a => "\x9a",
      0x0000009b => "\x9b",
      0x0000009c => "\x9c",
      0x0000009d => "\x9d",
      0x0000009e => "\x9e",
      0x0000009f => "\x9f",
      0x000000a0 => "\xa0",
      0x000000a1 => "\xa1",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xa4",
      0x000000a5 => "\xa5",
      0x000000a6 => "\xa6",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xa8",
      0x000000a9 => "\xa9",
      0x000000aa => "\xaa",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000af => "\xaf",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b2 => "\xb2",
      0x000000b3 => "\xb3",
      0x000000b4 => "\xb4",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000b8 => "\xb8",
      0x000000b9 => "\xb9",
      0x000000ba => "\xba",
      0x000000bb => "\xbb",
      0x000000bc => "\xbc",
      0x000000bd => "\xbd",
      0x000000be => "\xbe",
      0x000000bf => "\xbf",
      0x000000c0 => "\xc0",
      0x000000c1 => "\xc1",
      0x000000c2 => "\xc2",
      0x000000c3 => "\xc3",
      0x000000c4 => "\xc4",
      0x000000c5 => "\xc5",
      0x000000c6 => "\xc6",
      0x000000c7 => "\xc7",
      0x000000c8 => "\xc8",
      0x000000c9 => "\xc9",
      0x000000ca => "\xca",
      0x000000cb => "\xcb",
      0x000000cc => "\xcc",
      0x000000cd => "\xcd",
      0x000000ce => "\xce",
      0x000000cf => "\xcf",
      0x000000d1 => "\xd1",
      0x000000d2 => "\xd2",
      0x000000d3 => "\xd3",
      0x000000d4 => "\xd4",
      0x000000d5 => "\xd5",
      0x000000d6 => "\xd6",
      0x000000d7 => "\xd7",
      0x000000d8 => "\xd8",
      0x000000d9 => "\xd9",
      0x000000da => "\xda",
      0x000000db => "\xdb",
      0x000000dc => "\xdc",
      0x000000df => "\xdf",
      0x000000e0 => "\xe0",
      0x000000e1 => "\xe1",
      0x000000e2 => "\xe2",
      0x000000e3 => "\xe3",
      0x000000e4 => "\xe4",
      0x000000e5 => "\xe5",
      0x000000e6 => "\xe6",
      0x000000e7 => "\xe7",
      0x000000e8 => "\xe8",
      0x000000e9 => "\xe9",
      0x000000ea => "\xea",
      0x000000eb => "\xeb",
      0x000000ec => "\xec",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000ef => "\xef",
      0x000000f1 => "\xf1",
      0x000000f2 => "\xf2",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f5 => "\xf5",
      0x000000f6 => "\xf6",
      0x000000f7 => "\xf7",
      0x000000f8 => "\xf8",
      0x000000f9 => "\xf9",
      0x000000fa => "\xfa",
      0x000000fb => "\xfb",
      0x000000fc => "\xfc",
      0x000000ff => "\xff",
      0x0000011e => "\xd0",
      0x0000011f => "\xf0",
      0x00000130 => "\xdd",
      0x00000131 => "\xfd",
      0x0000015e => "\xde",
      0x0000015f => "\xfe",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::ISO_8859_9 - Conversion routines for ISO-8859-9
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for ISO-8859-9.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-148
   alias ISO_8859-9:1989
   alias ISO_8859-9
   alias LATIN5
   alias L5
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000080 | PADDING CHARACTER (PAD)
      81 |  00000081 | HIGH OCTET PRESET (HOP)
      82 |  00000082 | BREAK PERMITTED HERE (BPH)
      83 |  00000083 | NO BREAK HERE (NBH)
      84 |  00000084 | INDEX (IND)
      85 |  00000085 | NEXT LINE (NEL)
      86 |  00000086 | START OF SELECTED AREA (SSA)
      87 |  00000087 | END OF SELECTED AREA (ESA)
      88 |  00000088 | CHARACTER TABULATION SET (HTS)
      89 |  00000089 | CHARACTER TABULATION WITH JUSTIFICATION (HTJ)
      8A |  0000008A | LINE TABULATION SET (VTS)
      8B |  0000008B | PARTIAL LINE FORWARD (PLD)
      8C |  0000008C | PARTIAL LINE BACKWARD (PLU)
      8D |  0000008D | REVERSE LINE FEED (RI)
      8E |  0000008E | SINGLE-SHIFT TWO (SS2)
      8F |  0000008F | SINGLE-SHIFT THREE (SS3)
      90 |  00000090 | DEVICE CONTROL STRING (DCS)
      91 |  00000091 | PRIVATE USE ONE (PU1)
      92 |  00000092 | PRIVATE USE TWO (PU2)
      93 |  00000093 | SET TRANSMIT STATE (STS)
      94 |  00000094 | CANCEL CHARACTER (CCH)
      95 |  00000095 | MESSAGE WAITING (MW)
      96 |  00000096 | START OF GUARDED AREA (SPA)
      97 |  00000097 | END OF GUARDED AREA (EPA)
      98 |  00000098 | START OF STRING (SOS)
      99 |  00000099 | SINGLE GRAPHIC CHARACTER INTRODUCER (SGCI)
      9A |  0000009A | SINGLE CHARACTER INTRODUCER (SCI)
      9B |  0000009B | CONTROL SEQUENCE INTRODUCER (CSI)
      9C |  0000009C | STRING TERMINATOR (ST)
      9D |  0000009D | OPERATING SYSTEM COMMAND (OSC)
      9E |  0000009E | PRIVACY MESSAGE (PM)
      9F |  0000009F | APPLICATION PROGRAM COMMAND (APC)
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  000000A1 | INVERTED EXCLAMATION MARK
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  000000A5 | YEN SIGN
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  000000AA | FEMININE ORDINAL INDICATOR
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  000000AF | MACRON
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  000000B3 | SUPERSCRIPT THREE
      B4 |  000000B4 | ACUTE ACCENT
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  000000B8 | CEDILLA
      B9 |  000000B9 | SUPERSCRIPT ONE
      BA |  000000BA | MASCULINE ORDINAL INDICATOR
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  000000BC | VULGAR FRACTION ONE QUARTER
      BD |  000000BD | VULGAR FRACTION ONE HALF
      BE |  000000BE | VULGAR FRACTION THREE QUARTERS
      BF |  000000BF | INVERTED QUESTION MARK
      C0 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C3 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      C6 |  000000C6 | LATIN CAPITAL LETTER AE
      C7 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      C8 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      CB |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      CC |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      CF |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      D0 |  0000011E | LATIN CAPITAL LETTER G WITH BREVE
      D1 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      D2 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  000000D7 | MULTIPLICATION SIGN
      D8 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      D9 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  00000130 | LATIN CAPITAL LETTER I WITH DOT ABOVE
      DE |  0000015E | LATIN CAPITAL LETTER S WITH CEDILLA
      DF |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E0 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      E6 |  000000E6 | LATIN SMALL LETTER AE
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      F0 |  0000011F | LATIN SMALL LETTER G WITH BREVE
      F1 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      F2 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  000000F7 | DIVISION SIGN
      F8 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      F9 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  00000131 | LATIN SMALL LETTER DOTLESS I
      FE |  0000015F | LATIN SMALL LETTER S WITH CEDILLA
      FF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_ISO_8859_9

    $main::fatpacked{"Locale/RecodeData/KOI8_R.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_KOI8_R';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for KOI8-R.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::KOI8_R;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x2500,
      0x2502,
      0x250c,
      0x2510,
      0x2514,
      0x2518,
      0x251c,
      0x2524,
      0x252c,
      0x2534,
      0x253c,
      0x2580,
      0x2584,
      0x2588,
      0x258c,
      0x2590,
      0x2591,
      0x2592,
      0x2593,
      0x2320,
      0x25a0,
      0x2219,
      0x221a,
      0x2248,
      0x2264,
      0x2265,
      0x00a0,
      0x2321,
      0x00b0,
      0x00b2,
      0x00b7,
      0x00f7,
      0x2550,
      0x2551,
      0x2552,
      0x0451,
      0x2553,
      0x2554,
      0x2555,
      0x2556,
      0x2557,
      0x2558,
      0x2559,
      0x255a,
      0x255b,
      0x255c,
      0x255d,
      0x255e,
      0x255f,
      0x2560,
      0x2561,
      0x0401,
      0x2562,
      0x2563,
      0x2564,
      0x2565,
      0x2566,
      0x2567,
      0x2568,
      0x2569,
      0x256a,
      0x256b,
      0x256c,
      0x00a9,
      0x044e,
      0x0430,
      0x0431,
      0x0446,
      0x0434,
      0x0435,
      0x0444,
      0x0433,
      0x0445,
      0x0438,
      0x0439,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x044f,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0436,
      0x0432,
      0x044c,
      0x044b,
      0x0437,
      0x0448,
      0x044d,
      0x0449,
      0x0447,
      0x044a,
      0x042e,
      0x0410,
      0x0411,
      0x0426,
      0x0414,
      0x0415,
      0x0424,
      0x0413,
      0x0425,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0x041d,
      0x041e,
      0x041f,
      0x042f,
      0x0420,
      0x0421,
      0x0422,
      0x0423,
      0x0416,
      0x0412,
      0x042c,
      0x042b,
      0x0417,
      0x0428,
      0x042d,
      0x0429,
      0x0427,
      0x042a,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xe2\x94\x80",
      "\xe2\x94\x82",
      "\xe2\x94\x8c",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\x98",
      "\xe2\x94\x9c",
      "\xe2\x94\xa4",
      "\xe2\x94\xac",
      "\xe2\x94\xb4",
      "\xe2\x94\xbc",
      "\xe2\x96\x80",
      "\xe2\x96\x84",
      "\xe2\x96\x88",
      "\xe2\x96\x8c",
      "\xe2\x96\x90",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x8c\xa0",
      "\xe2\x96\xa0",
      "\xe2\x88\x99",
      "\xe2\x88\x9a",
      "\xe2\x89\x88",
      "\xe2\x89\xa4",
      "\xe2\x89\xa5",
      "\xc2\xa0",
      "\xe2\x8c\xa1",
      "\xc2\xb0",
      "\xc2\xb2",
      "\xc2\xb7",
      "\xc3\xb7",
      "\xe2\x95\x90",
      "\xe2\x95\x91",
      "\xe2\x95\x92",
      "\xd1\x91",
      "\xe2\x95\x93",
      "\xe2\x95\x94",
      "\xe2\x95\x95",
      "\xe2\x95\x96",
      "\xe2\x95\x97",
      "\xe2\x95\x98",
      "\xe2\x95\x99",
      "\xe2\x95\x9a",
      "\xe2\x95\x9b",
      "\xe2\x95\x9c",
      "\xe2\x95\x9d",
      "\xe2\x95\x9e",
      "\xe2\x95\x9f",
      "\xe2\x95\xa0",
      "\xe2\x95\xa1",
      "\xd0\x81",
      "\xe2\x95\xa2",
      "\xe2\x95\xa3",
      "\xe2\x95\xa4",
      "\xe2\x95\xa5",
      "\xe2\x95\xa6",
      "\xe2\x95\xa7",
      "\xe2\x95\xa8",
      "\xe2\x95\xa9",
      "\xe2\x95\xaa",
      "\xe2\x95\xab",
      "\xe2\x95\xac",
      "\xc2\xa9",
      "\xd1\x8e",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xd1\x86",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd1\x84",
      "\xd0\xb3",
      "\xd1\x85",
      "\xd0\xb8",
      "\xd0\xb9",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xd1\x8f",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd0\xb6",
      "\xd0\xb2",
      "\xd1\x8c",
      "\xd1\x8b",
      "\xd0\xb7",
      "\xd1\x88",
      "\xd1\x8d",
      "\xd1\x89",
      "\xd1\x87",
      "\xd1\x8a",
      "\xd0\xae",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\xa6",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\xa4",
      "\xd0\x93",
      "\xd0\xa5",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xaf",
      "\xd0\xa0",
      "\xd0\xa1",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\x96",
      "\xd0\x92",
      "\xd0\xac",
      "\xd0\xab",
      "\xd0\x97",
      "\xd0\xa8",
      "\xd0\xad",
      "\xd0\xa9",
      "\xd0\xa7",
      "\xd0\xaa",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\x9a",
      0x000000a9 => "\xbf",
      0x000000b0 => "\x9c",
      0x000000b2 => "\x9d",
      0x000000b7 => "\x9e",
      0x000000f7 => "\x9f",
      0x00000401 => "\xb3",
      0x00000410 => "\xe1",
      0x00000411 => "\xe2",
      0x00000412 => "\xf7",
      0x00000413 => "\xe7",
      0x00000414 => "\xe4",
      0x00000415 => "\xe5",
      0x00000416 => "\xf6",
      0x00000417 => "\xfa",
      0x00000418 => "\xe9",
      0x00000419 => "\xea",
      0x0000041a => "\xeb",
      0x0000041b => "\xec",
      0x0000041c => "\xed",
      0x0000041d => "\xee",
      0x0000041e => "\xef",
      0x0000041f => "\xf0",
      0x00000420 => "\xf2",
      0x00000421 => "\xf3",
      0x00000422 => "\xf4",
      0x00000423 => "\xf5",
      0x00000424 => "\xe6",
      0x00000425 => "\xe8",
      0x00000426 => "\xe3",
      0x00000427 => "\xfe",
      0x00000428 => "\xfb",
      0x00000429 => "\xfd",
      0x0000042a => "\xff",
      0x0000042b => "\xf9",
      0x0000042c => "\xf8",
      0x0000042d => "\xfc",
      0x0000042e => "\xe0",
      0x0000042f => "\xf1",
      0x00000430 => "\xc1",
      0x00000431 => "\xc2",
      0x00000432 => "\xd7",
      0x00000433 => "\xc7",
      0x00000434 => "\xc4",
      0x00000435 => "\xc5",
      0x00000436 => "\xd6",
      0x00000437 => "\xda",
      0x00000438 => "\xc9",
      0x00000439 => "\xca",
      0x0000043a => "\xcb",
      0x0000043b => "\xcc",
      0x0000043c => "\xcd",
      0x0000043d => "\xce",
      0x0000043e => "\xcf",
      0x0000043f => "\xd0",
      0x00000440 => "\xd2",
      0x00000441 => "\xd3",
      0x00000442 => "\xd4",
      0x00000443 => "\xd5",
      0x00000444 => "\xc6",
      0x00000445 => "\xc8",
      0x00000446 => "\xc3",
      0x00000447 => "\xde",
      0x00000448 => "\xdb",
      0x00000449 => "\xdd",
      0x0000044a => "\xdf",
      0x0000044b => "\xd9",
      0x0000044c => "\xd8",
      0x0000044d => "\xdc",
      0x0000044e => "\xc0",
      0x0000044f => "\xd1",
      0x00000451 => "\xa3",
      0x00002219 => "\x95",
      0x0000221a => "\x96",
      0x00002248 => "\x97",
      0x00002264 => "\x98",
      0x00002265 => "\x99",
      0x00002320 => "\x93",
      0x00002321 => "\x9b",
      0x00002500 => "\x80",
      0x00002502 => "\x81",
      0x0000250c => "\x82",
      0x00002510 => "\x83",
      0x00002514 => "\x84",
      0x00002518 => "\x85",
      0x0000251c => "\x86",
      0x00002524 => "\x87",
      0x0000252c => "\x88",
      0x00002534 => "\x89",
      0x0000253c => "\x8a",
      0x00002550 => "\xa0",
      0x00002551 => "\xa1",
      0x00002552 => "\xa2",
      0x00002553 => "\xa4",
      0x00002554 => "\xa5",
      0x00002555 => "\xa6",
      0x00002556 => "\xa7",
      0x00002557 => "\xa8",
      0x00002558 => "\xa9",
      0x00002559 => "\xaa",
      0x0000255a => "\xab",
      0x0000255b => "\xac",
      0x0000255c => "\xad",
      0x0000255d => "\xae",
      0x0000255e => "\xaf",
      0x0000255f => "\xb0",
      0x00002560 => "\xb1",
      0x00002561 => "\xb2",
      0x00002562 => "\xb4",
      0x00002563 => "\xb5",
      0x00002564 => "\xb6",
      0x00002565 => "\xb7",
      0x00002566 => "\xb8",
      0x00002567 => "\xb9",
      0x00002568 => "\xba",
      0x00002569 => "\xbb",
      0x0000256a => "\xbc",
      0x0000256b => "\xbd",
      0x0000256c => "\xbe",
      0x00002580 => "\x8b",
      0x00002584 => "\x8c",
      0x00002588 => "\x8d",
      0x0000258c => "\x8e",
      0x00002590 => "\x8f",
      0x00002591 => "\x90",
      0x00002592 => "\x91",
      0x00002593 => "\x92",
      0x000025a0 => "\x94",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::KOI8_R - Conversion routines for KOI8-R
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for KOI8-R.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: RFC1489 via Gabor Kiss E<lt>kissg@sztaki.huE<gt>
    and Andrey A. Chernov E<lt>ache@astral.msk.suE<gt>
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      81 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      82 |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      83 |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      84 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      85 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      86 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      87 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      88 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      89 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      8A |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      8B |  00002580 | UPPER HALF BLOCK
      8C |  00002584 | LOWER HALF BLOCK
      8D |  00002588 | FULL BLOCK
      8E |  0000258C | LEFT HALF BLOCK
      8F |  00002590 | RIGHT HALF BLOCK
      90 |  00002591 | LIGHT SHADE
      91 |  00002592 | MEDIUM SHADE
      92 |  00002593 | DARK SHADE
      93 |  00002320 | TOP HALF INTEGRAL
      94 |  000025A0 | BLACK SQUARE
      95 |  00002219 | BULLET OPERATOR
      96 |  0000221A | SQUARE ROOT
      97 |  00002248 | ALMOST EQUAL TO
      98 |  00002264 | LESS-THAN OR EQUAL TO
      99 |  00002265 | GREATER-THAN OR EQUAL TO
      9A |  000000A0 | NO-BREAK SPACE
      9B |  00002321 | BOTTOM HALF INTEGRAL
      9C |  000000B0 | DEGREE SIGN
      9D |  000000B2 | SUPERSCRIPT TWO
      9E |  000000B7 | MIDDLE DOT
      9F |  000000F7 | DIVISION SIGN
      A0 |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      A1 |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      A2 |  00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
      A3 |  00000451 | CYRILLIC SMALL LETTER IO
      A4 |  00002553 | BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
      A5 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      A6 |  00002555 | BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
      A7 |  00002556 | BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
      A8 |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      A9 |  00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
      AA |  00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
      AB |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      AC |  0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
      AD |  0000255C | BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
      AE |  0000255D | BOX DRAWINGS DOUBLE UP AND LEFT
      AF |  0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
      B0 |  0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
      B1 |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      B2 |  00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
      B3 |  00000401 | CYRILLIC CAPITAL LETTER IO
      B4 |  00002562 | BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
      B5 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      B6 |  00002564 | BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
      B7 |  00002565 | BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
      B8 |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      B9 |  00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
      BA |  00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
      BB |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      BC |  0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
      BD |  0000256B | BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
      BE |  0000256C | BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
      BF |  000000A9 | COPYRIGHT SIGN
      C0 |  0000044E | CYRILLIC SMALL LETTER YU
      C1 |  00000430 | CYRILLIC SMALL LETTER A
      C2 |  00000431 | CYRILLIC SMALL LETTER BE
      C3 |  00000446 | CYRILLIC SMALL LETTER TSE
      C4 |  00000434 | CYRILLIC SMALL LETTER DE
      C5 |  00000435 | CYRILLIC SMALL LETTER IE
      C6 |  00000444 | CYRILLIC SMALL LETTER EF
      C7 |  00000433 | CYRILLIC SMALL LETTER GHE
      C8 |  00000445 | CYRILLIC SMALL LETTER HA
      C9 |  00000438 | CYRILLIC SMALL LETTER I
      CA |  00000439 | CYRILLIC SMALL LETTER SHORT I
      CB |  0000043A | CYRILLIC SMALL LETTER KA
      CC |  0000043B | CYRILLIC SMALL LETTER EL
      CD |  0000043C | CYRILLIC SMALL LETTER EM
      CE |  0000043D | CYRILLIC SMALL LETTER EN
      CF |  0000043E | CYRILLIC SMALL LETTER O
      D0 |  0000043F | CYRILLIC SMALL LETTER PE
      D1 |  0000044F | CYRILLIC SMALL LETTER YA
      D2 |  00000440 | CYRILLIC SMALL LETTER ER
      D3 |  00000441 | CYRILLIC SMALL LETTER ES
      D4 |  00000442 | CYRILLIC SMALL LETTER TE
      D5 |  00000443 | CYRILLIC SMALL LETTER U
      D6 |  00000436 | CYRILLIC SMALL LETTER ZHE
      D7 |  00000432 | CYRILLIC SMALL LETTER VE
      D8 |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      D9 |  0000044B | CYRILLIC SMALL LETTER YERU
      DA |  00000437 | CYRILLIC SMALL LETTER ZE
      DB |  00000448 | CYRILLIC SMALL LETTER SHA
      DC |  0000044D | CYRILLIC SMALL LETTER E
      DD |  00000449 | CYRILLIC SMALL LETTER SHCHA
      DE |  00000447 | CYRILLIC SMALL LETTER CHE
      DF |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      E0 |  0000042E | CYRILLIC CAPITAL LETTER YU
      E1 |  00000410 | CYRILLIC CAPITAL LETTER A
      E2 |  00000411 | CYRILLIC CAPITAL LETTER BE
      E3 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      E4 |  00000414 | CYRILLIC CAPITAL LETTER DE
      E5 |  00000415 | CYRILLIC CAPITAL LETTER IE
      E6 |  00000424 | CYRILLIC CAPITAL LETTER EF
      E7 |  00000413 | CYRILLIC CAPITAL LETTER GHE
      E8 |  00000425 | CYRILLIC CAPITAL LETTER HA
      E9 |  00000418 | CYRILLIC CAPITAL LETTER I
      EA |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      EB |  0000041A | CYRILLIC CAPITAL LETTER KA
      EC |  0000041B | CYRILLIC CAPITAL LETTER EL
      ED |  0000041C | CYRILLIC CAPITAL LETTER EM
      EE |  0000041D | CYRILLIC CAPITAL LETTER EN
      EF |  0000041E | CYRILLIC CAPITAL LETTER O
      F0 |  0000041F | CYRILLIC CAPITAL LETTER PE
      F1 |  0000042F | CYRILLIC CAPITAL LETTER YA
      F2 |  00000420 | CYRILLIC CAPITAL LETTER ER
      F3 |  00000421 | CYRILLIC CAPITAL LETTER ES
      F4 |  00000422 | CYRILLIC CAPITAL LETTER TE
      F5 |  00000423 | CYRILLIC CAPITAL LETTER U
      F6 |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      F7 |  00000412 | CYRILLIC CAPITAL LETTER VE
      F8 |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      F9 |  0000042B | CYRILLIC CAPITAL LETTER YERU
      FA |  00000417 | CYRILLIC CAPITAL LETTER ZE
      FB |  00000428 | CYRILLIC CAPITAL LETTER SHA
      FC |  0000042D | CYRILLIC CAPITAL LETTER E
      FD |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      FE |  00000427 | CYRILLIC CAPITAL LETTER CHE
      FF |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_KOI8_R

    $main::fatpacked{"Locale/RecodeData/KOI8_RU.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_KOI8_RU';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for KOI8-RU.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::KOI8_RU;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x2500,
      0x2502,
      0x250c,
      0x2510,
      0x2514,
      0x2518,
      0x251c,
      0x2524,
      0x252c,
      0x2534,
      0x253c,
      0x2580,
      0x2584,
      0x2588,
      0x258c,
      0x2590,
      0x2591,
      0x2592,
      0x2593,
      0x2320,
      0x25a0,
      0x2219,
      0x221a,
      0x2248,
      0x2264,
      0x2265,
      0x00a0,
      0x2321,
      0x00b0,
      0x00b2,
      0x00b7,
      0x00f7,
      0x2550,
      0x2551,
      0x2552,
      0x0451,
      0x0454,
      0x2554,
      0x0456,
      0x0457,
      0x2557,
      0x2558,
      0x2559,
      0x255a,
      0x255b,
      0x0491,
      0x045e,
      0x255e,
      0x255f,
      0x2560,
      0x2561,
      0x0401,
      0x0404,
      0x2563,
      0x0406,
      0x0407,
      0x2566,
      0x2567,
      0x2568,
      0x2569,
      0x256a,
      0x0490,
      0x040e,
      0x00a9,
      0x044e,
      0x0430,
      0x0431,
      0x0446,
      0x0434,
      0x0435,
      0x0444,
      0x0433,
      0x0445,
      0x0438,
      0x0439,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x044f,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0436,
      0x0432,
      0x044c,
      0x044b,
      0x0437,
      0x0448,
      0x044d,
      0x0449,
      0x0447,
      0x044a,
      0x042e,
      0x0410,
      0x0411,
      0x0426,
      0x0414,
      0x0415,
      0x0424,
      0x0413,
      0x0425,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0x041d,
      0x041e,
      0x041f,
      0x042f,
      0x0420,
      0x0421,
      0x0422,
      0x0423,
      0x0416,
      0x0412,
      0x042c,
      0x042b,
      0x0417,
      0x0428,
      0x042d,
      0x0429,
      0x0427,
      0x042a,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xe2\x94\x80",
      "\xe2\x94\x82",
      "\xe2\x94\x8c",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\x98",
      "\xe2\x94\x9c",
      "\xe2\x94\xa4",
      "\xe2\x94\xac",
      "\xe2\x94\xb4",
      "\xe2\x94\xbc",
      "\xe2\x96\x80",
      "\xe2\x96\x84",
      "\xe2\x96\x88",
      "\xe2\x96\x8c",
      "\xe2\x96\x90",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x8c\xa0",
      "\xe2\x96\xa0",
      "\xe2\x88\x99",
      "\xe2\x88\x9a",
      "\xe2\x89\x88",
      "\xe2\x89\xa4",
      "\xe2\x89\xa5",
      "\xc2\xa0",
      "\xe2\x8c\xa1",
      "\xc2\xb0",
      "\xc2\xb2",
      "\xc2\xb7",
      "\xc3\xb7",
      "\xe2\x95\x90",
      "\xe2\x95\x91",
      "\xe2\x95\x92",
      "\xd1\x91",
      "\xd1\x94",
      "\xe2\x95\x94",
      "\xd1\x96",
      "\xd1\x97",
      "\xe2\x95\x97",
      "\xe2\x95\x98",
      "\xe2\x95\x99",
      "\xe2\x95\x9a",
      "\xe2\x95\x9b",
      "\xd2\x91",
      "\xd1\x9e",
      "\xe2\x95\x9e",
      "\xe2\x95\x9f",
      "\xe2\x95\xa0",
      "\xe2\x95\xa1",
      "\xd0\x81",
      "\xd0\x84",
      "\xe2\x95\xa3",
      "\xd0\x86",
      "\xd0\x87",
      "\xe2\x95\xa6",
      "\xe2\x95\xa7",
      "\xe2\x95\xa8",
      "\xe2\x95\xa9",
      "\xe2\x95\xaa",
      "\xd2\x90",
      "\xd0\x8e",
      "\xc2\xa9",
      "\xd1\x8e",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xd1\x86",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd1\x84",
      "\xd0\xb3",
      "\xd1\x85",
      "\xd0\xb8",
      "\xd0\xb9",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xd1\x8f",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd0\xb6",
      "\xd0\xb2",
      "\xd1\x8c",
      "\xd1\x8b",
      "\xd0\xb7",
      "\xd1\x88",
      "\xd1\x8d",
      "\xd1\x89",
      "\xd1\x87",
      "\xd1\x8a",
      "\xd0\xae",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\xa6",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\xa4",
      "\xd0\x93",
      "\xd0\xa5",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xaf",
      "\xd0\xa0",
      "\xd0\xa1",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\x96",
      "\xd0\x92",
      "\xd0\xac",
      "\xd0\xab",
      "\xd0\x97",
      "\xd0\xa8",
      "\xd0\xad",
      "\xd0\xa9",
      "\xd0\xa7",
      "\xd0\xaa",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\x9a",
      0x000000a9 => "\xbf",
      0x000000b0 => "\x9c",
      0x000000b2 => "\x9d",
      0x000000b7 => "\x9e",
      0x000000f7 => "\x9f",
      0x00000401 => "\xb3",
      0x00000404 => "\xb4",
      0x00000406 => "\xb6",
      0x00000407 => "\xb7",
      0x0000040e => "\xbe",
      0x00000410 => "\xe1",
      0x00000411 => "\xe2",
      0x00000412 => "\xf7",
      0x00000413 => "\xe7",
      0x00000414 => "\xe4",
      0x00000415 => "\xe5",
      0x00000416 => "\xf6",
      0x00000417 => "\xfa",
      0x00000418 => "\xe9",
      0x00000419 => "\xea",
      0x0000041a => "\xeb",
      0x0000041b => "\xec",
      0x0000041c => "\xed",
      0x0000041d => "\xee",
      0x0000041e => "\xef",
      0x0000041f => "\xf0",
      0x00000420 => "\xf2",
      0x00000421 => "\xf3",
      0x00000422 => "\xf4",
      0x00000423 => "\xf5",
      0x00000424 => "\xe6",
      0x00000425 => "\xe8",
      0x00000426 => "\xe3",
      0x00000427 => "\xfe",
      0x00000428 => "\xfb",
      0x00000429 => "\xfd",
      0x0000042a => "\xff",
      0x0000042b => "\xf9",
      0x0000042c => "\xf8",
      0x0000042d => "\xfc",
      0x0000042e => "\xe0",
      0x0000042f => "\xf1",
      0x00000430 => "\xc1",
      0x00000431 => "\xc2",
      0x00000432 => "\xd7",
      0x00000433 => "\xc7",
      0x00000434 => "\xc4",
      0x00000435 => "\xc5",
      0x00000436 => "\xd6",
      0x00000437 => "\xda",
      0x00000438 => "\xc9",
      0x00000439 => "\xca",
      0x0000043a => "\xcb",
      0x0000043b => "\xcc",
      0x0000043c => "\xcd",
      0x0000043d => "\xce",
      0x0000043e => "\xcf",
      0x0000043f => "\xd0",
      0x00000440 => "\xd2",
      0x00000441 => "\xd3",
      0x00000442 => "\xd4",
      0x00000443 => "\xd5",
      0x00000444 => "\xc6",
      0x00000445 => "\xc8",
      0x00000446 => "\xc3",
      0x00000447 => "\xde",
      0x00000448 => "\xdb",
      0x00000449 => "\xdd",
      0x0000044a => "\xdf",
      0x0000044b => "\xd9",
      0x0000044c => "\xd8",
      0x0000044d => "\xdc",
      0x0000044e => "\xc0",
      0x0000044f => "\xd1",
      0x00000451 => "\xa3",
      0x00000454 => "\xa4",
      0x00000456 => "\xa6",
      0x00000457 => "\xa7",
      0x0000045e => "\xae",
      0x00000490 => "\xbd",
      0x00000491 => "\xad",
      0x00002219 => "\x95",
      0x0000221a => "\x96",
      0x00002248 => "\x97",
      0x00002264 => "\x98",
      0x00002265 => "\x99",
      0x00002320 => "\x93",
      0x00002321 => "\x9b",
      0x00002500 => "\x80",
      0x00002502 => "\x81",
      0x0000250c => "\x82",
      0x00002510 => "\x83",
      0x00002514 => "\x84",
      0x00002518 => "\x85",
      0x0000251c => "\x86",
      0x00002524 => "\x87",
      0x0000252c => "\x88",
      0x00002534 => "\x89",
      0x0000253c => "\x8a",
      0x00002550 => "\xa0",
      0x00002551 => "\xa1",
      0x00002552 => "\xa2",
      0x00002554 => "\xa5",
      0x00002557 => "\xa8",
      0x00002558 => "\xa9",
      0x00002559 => "\xaa",
      0x0000255a => "\xab",
      0x0000255b => "\xac",
      0x0000255e => "\xaf",
      0x0000255f => "\xb0",
      0x00002560 => "\xb1",
      0x00002561 => "\xb2",
      0x00002563 => "\xb5",
      0x00002566 => "\xb8",
      0x00002567 => "\xb9",
      0x00002568 => "\xba",
      0x00002569 => "\xbb",
      0x0000256a => "\xbc",
      0x00002580 => "\x8b",
      0x00002584 => "\x8c",
      0x00002588 => "\x8d",
      0x0000258c => "\x8e",
      0x00002590 => "\x8f",
      0x00002591 => "\x90",
      0x00002592 => "\x91",
      0x00002593 => "\x92",
      0x000025a0 => "\x94",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::KOI8_RU - Conversion routines for KOI8-RU
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for KOI8-RU.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
  
   This charmap has been generated automatically from GNU libiconv
   conversions.
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      81 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      82 |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      83 |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      84 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      85 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      86 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      87 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      88 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      89 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      8A |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      8B |  00002580 | UPPER HALF BLOCK
      8C |  00002584 | LOWER HALF BLOCK
      8D |  00002588 | FULL BLOCK
      8E |  0000258C | LEFT HALF BLOCK
      8F |  00002590 | RIGHT HALF BLOCK
      90 |  00002591 | LIGHT SHADE
      91 |  00002592 | MEDIUM SHADE
      92 |  00002593 | DARK SHADE
      93 |  00002320 | TOP HALF INTEGRAL
      94 |  000025A0 | BLACK SQUARE
      95 |  00002219 | BULLET OPERATOR
      96 |  0000221A | SQUARE ROOT
      97 |  00002248 | ALMOST EQUAL TO
      98 |  00002264 | LESS-THAN OR EQUAL TO
      99 |  00002265 | GREATER-THAN OR EQUAL TO
      9A |  000000A0 | NO-BREAK SPACE
      9B |  00002321 | BOTTOM HALF INTEGRAL
      9C |  000000B0 | DEGREE SIGN
      9D |  000000B2 | SUPERSCRIPT TWO
      9E |  000000B7 | MIDDLE DOT
      9F |  000000F7 | DIVISION SIGN
      A0 |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      A1 |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      A2 |  00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
      A3 |  00000451 | CYRILLIC SMALL LETTER IO
      A4 |  00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE
      A5 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      A6 |  00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
      A7 |  00000457 | CYRILLIC SMALL LETTER YI
      A8 |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      A9 |  00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
      AA |  00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
      AB |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      AC |  0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
      AD |  00000491 | CYRILLIC SMALL LETTER GHE WITH UPTURN
      AE |  0000045E | CYRILLIC SMALL LETTER SHORT U
      AF |  0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
      B0 |  0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
      B1 |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      B2 |  00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
      B3 |  00000401 | CYRILLIC CAPITAL LETTER IO
      B4 |  00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE
      B5 |  00002563 | BOX DRAWINGS DOUBLE VERTICAL AND LEFT
      B6 |  00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
      B7 |  00000407 | CYRILLIC CAPITAL LETTER YI
      B8 |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      B9 |  00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
      BA |  00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
      BB |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      BC |  0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
      BD |  00000490 | CYRILLIC CAPITAL LETTER GHE WITH UPTURN
      BE |  0000040E | CYRILLIC CAPITAL LETTER SHORT U
      BF |  000000A9 | COPYRIGHT SIGN
      C0 |  0000044E | CYRILLIC SMALL LETTER YU
      C1 |  00000430 | CYRILLIC SMALL LETTER A
      C2 |  00000431 | CYRILLIC SMALL LETTER BE
      C3 |  00000446 | CYRILLIC SMALL LETTER TSE
      C4 |  00000434 | CYRILLIC SMALL LETTER DE
      C5 |  00000435 | CYRILLIC SMALL LETTER IE
      C6 |  00000444 | CYRILLIC SMALL LETTER EF
      C7 |  00000433 | CYRILLIC SMALL LETTER GHE
      C8 |  00000445 | CYRILLIC SMALL LETTER HA
      C9 |  00000438 | CYRILLIC SMALL LETTER I
      CA |  00000439 | CYRILLIC SMALL LETTER SHORT I
      CB |  0000043A | CYRILLIC SMALL LETTER KA
      CC |  0000043B | CYRILLIC SMALL LETTER EL
      CD |  0000043C | CYRILLIC SMALL LETTER EM
      CE |  0000043D | CYRILLIC SMALL LETTER EN
      CF |  0000043E | CYRILLIC SMALL LETTER O
      D0 |  0000043F | CYRILLIC SMALL LETTER PE
      D1 |  0000044F | CYRILLIC SMALL LETTER YA
      D2 |  00000440 | CYRILLIC SMALL LETTER ER
      D3 |  00000441 | CYRILLIC SMALL LETTER ES
      D4 |  00000442 | CYRILLIC SMALL LETTER TE
      D5 |  00000443 | CYRILLIC SMALL LETTER U
      D6 |  00000436 | CYRILLIC SMALL LETTER ZHE
      D7 |  00000432 | CYRILLIC SMALL LETTER VE
      D8 |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      D9 |  0000044B | CYRILLIC SMALL LETTER YERU
      DA |  00000437 | CYRILLIC SMALL LETTER ZE
      DB |  00000448 | CYRILLIC SMALL LETTER SHA
      DC |  0000044D | CYRILLIC SMALL LETTER E
      DD |  00000449 | CYRILLIC SMALL LETTER SHCHA
      DE |  00000447 | CYRILLIC SMALL LETTER CHE
      DF |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      E0 |  0000042E | CYRILLIC CAPITAL LETTER YU
      E1 |  00000410 | CYRILLIC CAPITAL LETTER A
      E2 |  00000411 | CYRILLIC CAPITAL LETTER BE
      E3 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      E4 |  00000414 | CYRILLIC CAPITAL LETTER DE
      E5 |  00000415 | CYRILLIC CAPITAL LETTER IE
      E6 |  00000424 | CYRILLIC CAPITAL LETTER EF
      E7 |  00000413 | CYRILLIC CAPITAL LETTER GHE
      E8 |  00000425 | CYRILLIC CAPITAL LETTER HA
      E9 |  00000418 | CYRILLIC CAPITAL LETTER I
      EA |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      EB |  0000041A | CYRILLIC CAPITAL LETTER KA
      EC |  0000041B | CYRILLIC CAPITAL LETTER EL
      ED |  0000041C | CYRILLIC CAPITAL LETTER EM
      EE |  0000041D | CYRILLIC CAPITAL LETTER EN
      EF |  0000041E | CYRILLIC CAPITAL LETTER O
      F0 |  0000041F | CYRILLIC CAPITAL LETTER PE
      F1 |  0000042F | CYRILLIC CAPITAL LETTER YA
      F2 |  00000420 | CYRILLIC CAPITAL LETTER ER
      F3 |  00000421 | CYRILLIC CAPITAL LETTER ES
      F4 |  00000422 | CYRILLIC CAPITAL LETTER TE
      F5 |  00000423 | CYRILLIC CAPITAL LETTER U
      F6 |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      F7 |  00000412 | CYRILLIC CAPITAL LETTER VE
      F8 |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      F9 |  0000042B | CYRILLIC CAPITAL LETTER YERU
      FA |  00000417 | CYRILLIC CAPITAL LETTER ZE
      FB |  00000428 | CYRILLIC CAPITAL LETTER SHA
      FC |  0000042D | CYRILLIC CAPITAL LETTER E
      FD |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      FE |  00000427 | CYRILLIC CAPITAL LETTER CHE
      FF |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_KOI8_RU

    $main::fatpacked{"Locale/RecodeData/KOI8_T.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_KOI8_T';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for KOI8-T.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::KOI8_T;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x049b,
      0x0493,
      0x201a,
      0x0492,
      0x201e,
      0x2026,
      0x2020,
      0x2021,
      0xfffd,
      0x2030,
      0x04b3,
      0x2039,
      0x04b2,
      0x04b7,
      0x04b6,
      0xfffd,
      0x049a,
      0x2018,
      0x2019,
      0x201c,
      0x201d,
      0x2022,
      0x2013,
      0x2014,
      0xfffd,
      0x2122,
      0xfffd,
      0x203a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x04ef,
      0x04ee,
      0x0451,
      0x00a4,
      0x04e3,
      0x00a6,
      0x00a7,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00ab,
      0x00ac,
      0x00ad,
      0x00ae,
      0xfffd,
      0x00b0,
      0x00b1,
      0x00b2,
      0x0401,
      0xfffd,
      0x04e2,
      0x00b6,
      0x00b7,
      0xfffd,
      0x2116,
      0xfffd,
      0x00bb,
      0xfffd,
      0xfffd,
      0xfffd,
      0x00a9,
      0x044e,
      0x0430,
      0x0431,
      0x0446,
      0x0434,
      0x0435,
      0x0444,
      0x0433,
      0x0445,
      0x0438,
      0x0439,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x044f,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0436,
      0x0432,
      0x044c,
      0x044b,
      0x0437,
      0x0448,
      0x044d,
      0x0449,
      0x0447,
      0x044a,
      0x042e,
      0x0410,
      0x0411,
      0x0426,
      0x0414,
      0x0415,
      0x0424,
      0x0413,
      0x0425,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0x041d,
      0x041e,
      0x041f,
      0x042f,
      0x0420,
      0x0421,
      0x0422,
      0x0423,
      0x0416,
      0x0412,
      0x042c,
      0x042b,
      0x0417,
      0x0428,
      0x042d,
      0x0429,
      0x0427,
      0x042a,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xd2\x9b",
      "\xd2\x93",
      "\xe2\x80\x9a",
      "\xd2\x92",
      "\xe2\x80\x9e",
      "\xe2\x80\xa6",
      "\xe2\x80\xa0",
      "\xe2\x80\xa1",
      "\xef\xbf\xbd",
      "\xe2\x80\xb0",
      "\xd2\xb3",
      "\xe2\x80\xb9",
      "\xd2\xb2",
      "\xd2\xb7",
      "\xd2\xb6",
      "\xef\xbf\xbd",
      "\xd2\x9a",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\xa2",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xef\xbf\xbd",
      "\xe2\x84\xa2",
      "\xef\xbf\xbd",
      "\xe2\x80\xba",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd3\xaf",
      "\xd3\xae",
      "\xd1\x91",
      "\xc2\xa4",
      "\xd3\xa3",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xef\xbf\xbd",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc2\xb2",
      "\xd0\x81",
      "\xef\xbf\xbd",
      "\xd3\xa2",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xef\xbf\xbd",
      "\xe2\x84\x96",
      "\xef\xbf\xbd",
      "\xc2\xbb",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xa9",
      "\xd1\x8e",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xd1\x86",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd1\x84",
      "\xd0\xb3",
      "\xd1\x85",
      "\xd0\xb8",
      "\xd0\xb9",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xd1\x8f",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd0\xb6",
      "\xd0\xb2",
      "\xd1\x8c",
      "\xd1\x8b",
      "\xd0\xb7",
      "\xd1\x88",
      "\xd1\x8d",
      "\xd1\x89",
      "\xd1\x87",
      "\xd1\x8a",
      "\xd0\xae",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\xa6",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\xa4",
      "\xd0\x93",
      "\xd0\xa5",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xaf",
      "\xd0\xa0",
      "\xd0\xa1",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\x96",
      "\xd0\x92",
      "\xd0\xac",
      "\xd0\xab",
      "\xd0\x97",
      "\xd0\xa8",
      "\xd0\xad",
      "\xd0\xa9",
      "\xd0\xa7",
      "\xd0\xaa",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a4 => "\xa4",
      0x000000a6 => "\xa6",
      0x000000a7 => "\xa7",
      0x000000a9 => "\xbf",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b2 => "\xb2",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000bb => "\xbb",
      0x00000401 => "\xb3",
      0x00000410 => "\xe1",
      0x00000411 => "\xe2",
      0x00000412 => "\xf7",
      0x00000413 => "\xe7",
      0x00000414 => "\xe4",
      0x00000415 => "\xe5",
      0x00000416 => "\xf6",
      0x00000417 => "\xfa",
      0x00000418 => "\xe9",
      0x00000419 => "\xea",
      0x0000041a => "\xeb",
      0x0000041b => "\xec",
      0x0000041c => "\xed",
      0x0000041d => "\xee",
      0x0000041e => "\xef",
      0x0000041f => "\xf0",
      0x00000420 => "\xf2",
      0x00000421 => "\xf3",
      0x00000422 => "\xf4",
      0x00000423 => "\xf5",
      0x00000424 => "\xe6",
      0x00000425 => "\xe8",
      0x00000426 => "\xe3",
      0x00000427 => "\xfe",
      0x00000428 => "\xfb",
      0x00000429 => "\xfd",
      0x0000042a => "\xff",
      0x0000042b => "\xf9",
      0x0000042c => "\xf8",
      0x0000042d => "\xfc",
      0x0000042e => "\xe0",
      0x0000042f => "\xf1",
      0x00000430 => "\xc1",
      0x00000431 => "\xc2",
      0x00000432 => "\xd7",
      0x00000433 => "\xc7",
      0x00000434 => "\xc4",
      0x00000435 => "\xc5",
      0x00000436 => "\xd6",
      0x00000437 => "\xda",
      0x00000438 => "\xc9",
      0x00000439 => "\xca",
      0x0000043a => "\xcb",
      0x0000043b => "\xcc",
      0x0000043c => "\xcd",
      0x0000043d => "\xce",
      0x0000043e => "\xcf",
      0x0000043f => "\xd0",
      0x00000440 => "\xd2",
      0x00000441 => "\xd3",
      0x00000442 => "\xd4",
      0x00000443 => "\xd5",
      0x00000444 => "\xc6",
      0x00000445 => "\xc8",
      0x00000446 => "\xc3",
      0x00000447 => "\xde",
      0x00000448 => "\xdb",
      0x00000449 => "\xdd",
      0x0000044a => "\xdf",
      0x0000044b => "\xd9",
      0x0000044c => "\xd8",
      0x0000044d => "\xdc",
      0x0000044e => "\xc0",
      0x0000044f => "\xd1",
      0x00000451 => "\xa3",
      0x00000492 => "\x83",
      0x00000493 => "\x81",
      0x0000049a => "\x90",
      0x0000049b => "\x80",
      0x000004b2 => "\x8c",
      0x000004b3 => "\x8a",
      0x000004b6 => "\x8e",
      0x000004b7 => "\x8d",
      0x000004e2 => "\xb5",
      0x000004e3 => "\xa5",
      0x000004ee => "\xa2",
      0x000004ef => "\xa1",
      0x00002013 => "\x96",
      0x00002014 => "\x97",
      0x00002018 => "\x91",
      0x00002019 => "\x92",
      0x0000201a => "\x82",
      0x0000201c => "\x93",
      0x0000201d => "\x94",
      0x0000201e => "\x84",
      0x00002020 => "\x86",
      0x00002021 => "\x87",
      0x00002022 => "\x95",
      0x00002026 => "\x85",
      0x00002030 => "\x89",
      0x00002039 => "\x8b",
      0x0000203a => "\x9b",
      0x00002116 => "\xb9",
      0x00002122 => "\x99",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::KOI8_T - Conversion routines for KOI8-T
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for KOI8-T.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   Author: Michael Davis E<lt>tajik_fonts@iname.comE<gt>
   URL:    http://www.traveltajikistan.com/fonts
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL
      01 |  00000001 | START OF HEADING
      02 |  00000002 | START OF TEXT
      03 |  00000003 | END OF TEXT
      04 |  00000004 | END OF TRANSMISSION
      05 |  00000005 | ENQUIRY
      06 |  00000006 | ACKNOWLEDGE
      07 |  00000007 | BELL
      08 |  00000008 | BACKSPACE
      09 |  00000009 | HORIZONTAL TABULATION
      0A |  0000000A | LINE FEED
      0B |  0000000B | VERTICAL TABULATION
      0C |  0000000C | FORM FEED
      0D |  0000000D | CARRIAGE RETURN
      0E |  0000000E | SHIFT OUT
      0F |  0000000F | SHIFT IN
      10 |  00000010 | DATA LINK ESCAPE
      11 |  00000011 | DEVICE CONTROL ONE
      12 |  00000012 | DEVICE CONTROL TWO
      13 |  00000013 | DEVICE CONTROL THREE
      14 |  00000014 | DEVICE CONTROL FOUR
      15 |  00000015 | NEGATIVE ACKNOWLEDGE
      16 |  00000016 | SYNCHRONOUS IDLE
      17 |  00000017 | END OF TRANSMISSION BLOCK
      18 |  00000018 | CANCEL
      19 |  00000019 | END OF MEDIUM
      1A |  0000001A | SUBSTITUTE
      1B |  0000001B | ESCAPE
      1C |  0000001C | FILE SEPARATOR
      1D |  0000001D | GROUP SEPARATOR
      1E |  0000001E | RECORD SEPARATOR
      1F |  0000001F | UNIT SEPARATOR
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE
      80 |  0000049B | CYRILLIC SMALL LETTER KA WITH DESCENDER
      81 |  00000493 | CYRILLIC SMALL LETTER GHE WITH STROKE
      82 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      83 |  00000492 | CYRILLIC CAPITAL LETTER GHE WITH STROKE
      84 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      85 |  00002026 | HORIZONTAL ELLIPSIS
      86 |  00002020 | DAGGER
      87 |  00002021 | DOUBLE DAGGER
      89 |  00002030 | PER MILLE SIGN
      8A |  000004B3 | CYRILLIC SMALL LETTER HA WITH DESCENDER
      8B |  00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
      8C |  000004B2 | CYRILLIC CAPITAL LETTER HA WITH DESCENDER
      8D |  000004B7 | CYRILLIC SMALL LETTER CHE WITH DESCENDER
      8E |  000004B6 | CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
      90 |  0000049A | CYRILLIC CAPITAL LETTER KA WITH DESCENDER
      91 |  00002018 | LEFT SINGLE QUOTATION MARK
      92 |  00002019 | RIGHT SINGLE QUOTATION MARK
      93 |  0000201C | LEFT DOUBLE QUOTATION MARK
      94 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      95 |  00002022 | BULLET
      96 |  00002013 | EN DASH
      97 |  00002014 | EM DASH
      99 |  00002122 | TRADE MARK SIGN
      9B |  0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
      A1 |  000004EF | CYRILLIC SMALL LETTER U WITH MACRON
      A2 |  000004EE | CYRILLIC CAPITAL LETTER U WITH MACRON
      A3 |  00000451 | CYRILLIC SMALL LETTER IO
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  000004E3 | CYRILLIC SMALL LETTER I WITH MACRON
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000000B2 | SUPERSCRIPT TWO
      B3 |  00000401 | CYRILLIC CAPITAL LETTER IE
      B5 |  000004E2 | CYRILLIC CAPITAL LETTER I WITH MACRON
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B9 |  00002116 | NUMERO SIGN
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BF |  000000A9 | COPYRIGHT SIGN
      C0 |  0000044E | CYRILLIC SMALL LETTER YU
      C1 |  00000430 | CYRILLIC SMALL LETTER A
      C2 |  00000431 | CYRILLIC SMALL LETTER BE
      C3 |  00000446 | CYRILLIC SMALL LETTER TSE
      C4 |  00000434 | CYRILLIC SMALL LETTER DE
      C5 |  00000435 | CYRILLIC SMALL LETTER IE
      C6 |  00000444 | CYRILLIC SMALL LETTER EF
      C7 |  00000433 | CYRILLIC SMALL LETTER GHE
      C8 |  00000445 | CYRILLIC SMALL LETTER HA
      C9 |  00000438 | CYRILLIC SMALL LETTER I
      CA |  00000439 | CYRILLIC SMALL LETTER SHORT I
      CB |  0000043A | CYRILLIC SMALL LETTER KA
      CC |  0000043B | CYRILLIC SMALL LETTER EL
      CD |  0000043C | CYRILLIC SMALL LETTER EM
      CE |  0000043D | CYRILLIC SMALL LETTER EN
      CF |  0000043E | CYRILLIC SMALL LETTER O
      D0 |  0000043F | CYRILLIC SMALL LETTER PE
      D1 |  0000044F | CYRILLIC SMALL LETTER YA
      D2 |  00000440 | CYRILLIC SMALL LETTER ER
      D3 |  00000441 | CYRILLIC SMALL LETTER ES
      D4 |  00000442 | CYRILLIC SMALL LETTER TE
      D5 |  00000443 | CYRILLIC SMALL LETTER U
      D6 |  00000436 | CYRILLIC SMALL LETTER ZHE
      D7 |  00000432 | CYRILLIC SMALL LETTER VE
      D8 |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      D9 |  0000044B | CYRILLIC SMALL LETTER YERU
      DA |  00000437 | CYRILLIC SMALL LETTER ZE
      DB |  00000448 | CYRILLIC SMALL LETTER SHA
      DC |  0000044D | CYRILLIC SMALL LETTER E
      DD |  00000449 | CYRILLIC SMALL LETTER SHCHA
      DE |  00000447 | CYRILLIC SMALL LETTER CHE
      DF |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      E0 |  0000042E | CYRILLIC CAPITAL LETTER YU
      E1 |  00000410 | CYRILLIC CAPITAL LETTER A
      E2 |  00000411 | CYRILLIC CAPITAL LETTER BE
      E3 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      E4 |  00000414 | CYRILLIC CAPITAL LETTER DE
      E5 |  00000415 | CYRILLIC CAPITAL LETTER IE
      E6 |  00000424 | CYRILLIC CAPITAL LETTER EF
      E7 |  00000413 | CYRILLIC CAPITAL LETTER GHE
      E8 |  00000425 | CYRILLIC CAPITAL LETTER HA
      E9 |  00000418 | CYRILLIC CAPITAL LETTER I
      EA |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      EB |  0000041A | CYRILLIC CAPITAL LETTER KA
      EC |  0000041B | CYRILLIC CAPITAL LETTER EL
      ED |  0000041C | CYRILLIC CAPITAL LETTER EM
      EE |  0000041D | CYRILLIC CAPITAL LETTER EN
      EF |  0000041E | CYRILLIC CAPITAL LETTER O
      F0 |  0000041F | CYRILLIC CAPITAL LETTER PE
      F1 |  0000042F | CYRILLIC CAPITAL LETTER YA
      F2 |  00000420 | CYRILLIC CAPITAL LETTER ER
      F3 |  00000421 | CYRILLIC CAPITAL LETTER ES
      F4 |  00000422 | CYRILLIC CAPITAL LETTER TE
      F5 |  00000423 | CYRILLIC CAPITAL LETTER U
      F6 |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      F7 |  00000412 | CYRILLIC CAPITAL LETTER VE
      F8 |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      F9 |  0000042B | CYRILLIC CAPITAL LETTER YERU
      FA |  00000417 | CYRILLIC CAPITAL LETTER ZE
      FB |  00000428 | CYRILLIC CAPITAL LETTER SHA
      FC |  0000042D | CYRILLIC CAPITAL LETTER E
      FD |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      FE |  00000427 | CYRILLIC CAPITAL LETTER CHE
      FF |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_KOI8_T

    $main::fatpacked{"Locale/RecodeData/KOI8_U.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_KOI8_U';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for KOI8-U.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::KOI8_U;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x2500,
      0x2502,
      0x250c,
      0x2510,
      0x2514,
      0x2518,
      0x251c,
      0x2524,
      0x252c,
      0x2534,
      0x253c,
      0x2580,
      0x2584,
      0x2588,
      0x258c,
      0x2590,
      0x2591,
      0x2592,
      0x2593,
      0x2320,
      0x25a0,
      0x2219,
      0x221a,
      0x2248,
      0x2264,
      0x2265,
      0x00a0,
      0x2321,
      0x00b0,
      0x00b2,
      0x00b7,
      0x00f7,
      0x2550,
      0x2551,
      0x2552,
      0x0451,
      0x0454,
      0x2554,
      0x0456,
      0x0457,
      0x2557,
      0x2558,
      0x2559,
      0x255a,
      0x255b,
      0x0491,
      0x255d,
      0x255e,
      0x255f,
      0x2560,
      0x2561,
      0x0401,
      0x0404,
      0x2563,
      0x0406,
      0x0407,
      0x2566,
      0x2567,
      0x2568,
      0x2569,
      0x256a,
      0x0490,
      0x256c,
      0x00a9,
      0x044e,
      0x0430,
      0x0431,
      0x0446,
      0x0434,
      0x0435,
      0x0444,
      0x0433,
      0x0445,
      0x0438,
      0x0439,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x044f,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0436,
      0x0432,
      0x044c,
      0x044b,
      0x0437,
      0x0448,
      0x044d,
      0x0449,
      0x0447,
      0x044a,
      0x042e,
      0x0410,
      0x0411,
      0x0426,
      0x0414,
      0x0415,
      0x0424,
      0x0413,
      0x0425,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0x041d,
      0x041e,
      0x041f,
      0x042f,
      0x0420,
      0x0421,
      0x0422,
      0x0423,
      0x0416,
      0x0412,
      0x042c,
      0x042b,
      0x0417,
      0x0428,
      0x042d,
      0x0429,
      0x0427,
      0x042a,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xe2\x94\x80",
      "\xe2\x94\x82",
      "\xe2\x94\x8c",
      "\xe2\x94\x90",
      "\xe2\x94\x94",
      "\xe2\x94\x98",
      "\xe2\x94\x9c",
      "\xe2\x94\xa4",
      "\xe2\x94\xac",
      "\xe2\x94\xb4",
      "\xe2\x94\xbc",
      "\xe2\x96\x80",
      "\xe2\x96\x84",
      "\xe2\x96\x88",
      "\xe2\x96\x8c",
      "\xe2\x96\x90",
      "\xe2\x96\x91",
      "\xe2\x96\x92",
      "\xe2\x96\x93",
      "\xe2\x8c\xa0",
      "\xe2\x96\xa0",
      "\xe2\x88\x99",
      "\xe2\x88\x9a",
      "\xe2\x89\x88",
      "\xe2\x89\xa4",
      "\xe2\x89\xa5",
      "\xc2\xa0",
      "\xe2\x8c\xa1",
      "\xc2\xb0",
      "\xc2\xb2",
      "\xc2\xb7",
      "\xc3\xb7",
      "\xe2\x95\x90",
      "\xe2\x95\x91",
      "\xe2\x95\x92",
      "\xd1\x91",
      "\xd1\x94",
      "\xe2\x95\x94",
      "\xd1\x96",
      "\xd1\x97",
      "\xe2\x95\x97",
      "\xe2\x95\x98",
      "\xe2\x95\x99",
      "\xe2\x95\x9a",
      "\xe2\x95\x9b",
      "\xd2\x91",
      "\xe2\x95\x9d",
      "\xe2\x95\x9e",
      "\xe2\x95\x9f",
      "\xe2\x95\xa0",
      "\xe2\x95\xa1",
      "\xd0\x81",
      "\xd0\x84",
      "\xe2\x95\xa3",
      "\xd0\x86",
      "\xd0\x87",
      "\xe2\x95\xa6",
      "\xe2\x95\xa7",
      "\xe2\x95\xa8",
      "\xe2\x95\xa9",
      "\xe2\x95\xaa",
      "\xd2\x90",
      "\xe2\x95\xac",
      "\xc2\xa9",
      "\xd1\x8e",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xd1\x86",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd1\x84",
      "\xd0\xb3",
      "\xd1\x85",
      "\xd0\xb8",
      "\xd0\xb9",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xd1\x8f",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd0\xb6",
      "\xd0\xb2",
      "\xd1\x8c",
      "\xd1\x8b",
      "\xd0\xb7",
      "\xd1\x88",
      "\xd1\x8d",
      "\xd1\x89",
      "\xd1\x87",
      "\xd1\x8a",
      "\xd0\xae",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\xa6",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\xa4",
      "\xd0\x93",
      "\xd0\xa5",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xaf",
      "\xd0\xa0",
      "\xd0\xa1",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\x96",
      "\xd0\x92",
      "\xd0\xac",
      "\xd0\xab",
      "\xd0\x97",
      "\xd0\xa8",
      "\xd0\xad",
      "\xd0\xa9",
      "\xd0\xa7",
      "\xd0\xaa",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\x9a",
      0x000000a9 => "\xbf",
      0x000000b0 => "\x9c",
      0x000000b2 => "\x9d",
      0x000000b7 => "\x9e",
      0x000000f7 => "\x9f",
      0x00000401 => "\xb3",
      0x00000404 => "\xb4",
      0x00000406 => "\xb6",
      0x00000407 => "\xb7",
      0x00000410 => "\xe1",
      0x00000411 => "\xe2",
      0x00000412 => "\xf7",
      0x00000413 => "\xe7",
      0x00000414 => "\xe4",
      0x00000415 => "\xe5",
      0x00000416 => "\xf6",
      0x00000417 => "\xfa",
      0x00000418 => "\xe9",
      0x00000419 => "\xea",
      0x0000041a => "\xeb",
      0x0000041b => "\xec",
      0x0000041c => "\xed",
      0x0000041d => "\xee",
      0x0000041e => "\xef",
      0x0000041f => "\xf0",
      0x00000420 => "\xf2",
      0x00000421 => "\xf3",
      0x00000422 => "\xf4",
      0x00000423 => "\xf5",
      0x00000424 => "\xe6",
      0x00000425 => "\xe8",
      0x00000426 => "\xe3",
      0x00000427 => "\xfe",
      0x00000428 => "\xfb",
      0x00000429 => "\xfd",
      0x0000042a => "\xff",
      0x0000042b => "\xf9",
      0x0000042c => "\xf8",
      0x0000042d => "\xfc",
      0x0000042e => "\xe0",
      0x0000042f => "\xf1",
      0x00000430 => "\xc1",
      0x00000431 => "\xc2",
      0x00000432 => "\xd7",
      0x00000433 => "\xc7",
      0x00000434 => "\xc4",
      0x00000435 => "\xc5",
      0x00000436 => "\xd6",
      0x00000437 => "\xda",
      0x00000438 => "\xc9",
      0x00000439 => "\xca",
      0x0000043a => "\xcb",
      0x0000043b => "\xcc",
      0x0000043c => "\xcd",
      0x0000043d => "\xce",
      0x0000043e => "\xcf",
      0x0000043f => "\xd0",
      0x00000440 => "\xd2",
      0x00000441 => "\xd3",
      0x00000442 => "\xd4",
      0x00000443 => "\xd5",
      0x00000444 => "\xc6",
      0x00000445 => "\xc8",
      0x00000446 => "\xc3",
      0x00000447 => "\xde",
      0x00000448 => "\xdb",
      0x00000449 => "\xdd",
      0x0000044a => "\xdf",
      0x0000044b => "\xd9",
      0x0000044c => "\xd8",
      0x0000044d => "\xdc",
      0x0000044e => "\xc0",
      0x0000044f => "\xd1",
      0x00000451 => "\xa3",
      0x00000454 => "\xa4",
      0x00000456 => "\xa6",
      0x00000457 => "\xa7",
      0x00000490 => "\xbd",
      0x00000491 => "\xad",
      0x00002219 => "\x95",
      0x0000221a => "\x96",
      0x00002248 => "\x97",
      0x00002264 => "\x98",
      0x00002265 => "\x99",
      0x00002320 => "\x93",
      0x00002321 => "\x9b",
      0x00002500 => "\x80",
      0x00002502 => "\x81",
      0x0000250c => "\x82",
      0x00002510 => "\x83",
      0x00002514 => "\x84",
      0x00002518 => "\x85",
      0x0000251c => "\x86",
      0x00002524 => "\x87",
      0x0000252c => "\x88",
      0x00002534 => "\x89",
      0x0000253c => "\x8a",
      0x00002550 => "\xa0",
      0x00002551 => "\xa1",
      0x00002552 => "\xa2",
      0x00002554 => "\xa5",
      0x00002557 => "\xa8",
      0x00002558 => "\xa9",
      0x00002559 => "\xaa",
      0x0000255a => "\xab",
      0x0000255b => "\xac",
      0x0000255d => "\xae",
      0x0000255e => "\xaf",
      0x0000255f => "\xb0",
      0x00002560 => "\xb1",
      0x00002561 => "\xb2",
      0x00002563 => "\xb5",
      0x00002566 => "\xb8",
      0x00002567 => "\xb9",
      0x00002568 => "\xba",
      0x00002569 => "\xbb",
      0x0000256a => "\xbc",
      0x0000256c => "\xbe",
      0x00002580 => "\x8b",
      0x00002584 => "\x8c",
      0x00002588 => "\x8d",
      0x0000258c => "\x8e",
      0x00002590 => "\x8f",
      0x00002591 => "\x90",
      0x00002592 => "\x91",
      0x00002593 => "\x92",
      0x000025a0 => "\x94",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::KOI8_U - Conversion routines for KOI8-U
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for KOI8-U.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.1
    source: RFC 2319
    source: http://www.net.ua/KOI8-U/
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00002500 | BOX DRAWINGS LIGHT HORIZONTAL
      81 |  00002502 | BOX DRAWINGS LIGHT VERTICAL
      82 |  0000250C | BOX DRAWINGS LIGHT DOWN AND RIGHT
      83 |  00002510 | BOX DRAWINGS LIGHT DOWN AND LEFT
      84 |  00002514 | BOX DRAWINGS LIGHT UP AND RIGHT
      85 |  00002518 | BOX DRAWINGS LIGHT UP AND LEFT
      86 |  0000251C | BOX DRAWINGS LIGHT VERTICAL AND RIGHT
      87 |  00002524 | BOX DRAWINGS LIGHT VERTICAL AND LEFT
      88 |  0000252C | BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
      89 |  00002534 | BOX DRAWINGS LIGHT UP AND HORIZONTAL
      8A |  0000253C | BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
      8B |  00002580 | UPPER HALF BLOCK
      8C |  00002584 | LOWER HALF BLOCK
      8D |  00002588 | FULL BLOCK
      8E |  0000258C | LEFT HALF BLOCK
      8F |  00002590 | RIGHT HALF BLOCK
      90 |  00002591 | LIGHT SHADE
      91 |  00002592 | MEDIUM SHADE
      92 |  00002593 | DARK SHADE
      93 |  00002320 | TOP HALF INTEGRAL
      94 |  000025A0 | BLACK SQUARE
      95 |  00002219 | BULLET OPERATOR
      96 |  0000221A | SQUARE ROOT
      97 |  00002248 | ALMOST EQUAL TO
      98 |  00002264 | LESS THAN OR EQUAL TO
      99 |  00002265 | GREATER THAN OR EQUAL TO
      9A |  000000A0 | NO-BREAK SPACE
      9B |  00002321 | BOTTOM HALF INTEGRAL
      9C |  000000B0 | DEGREE SIGN
      9D |  000000B2 | SUPERSCRIPT DIGIT TWO
      9E |  000000B7 | MIDDLE DOT
      9F |  000000F7 | DIVISION SIGN
      A0 |  00002550 | BOX DRAWINGS DOUBLE HORIZONTAL
      A1 |  00002551 | BOX DRAWINGS DOUBLE VERTICAL
      A2 |  00002552 | BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
      A3 |  00000451 | CYRILLIC SMALL LETTER IO
      A4 |  00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE
      A5 |  00002554 | BOX DRAWINGS DOUBLE DOWN AND RIGHT
      A6 |  00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
      A7 |  00000457 | CYRILLIC SMALL LETTER YI (Ukrainian)
      A8 |  00002557 | BOX DRAWINGS DOUBLE DOWN AND LEFT
      A9 |  00002558 | BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
      AA |  00002559 | BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
      AB |  0000255A | BOX DRAWINGS DOUBLE UP AND RIGHT
      AC |  0000255B | BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
      AD |  00000491 | CYRILLIC SMALL LETTER GHE WITH UPTURN
      AE |  0000255D | BOX DRAWINGS  DOUBLE UP AND LEFT
      AF |  0000255E | BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
      B0 |  0000255F | BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
      B1 |  00002560 | BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
      B2 |  00002561 | BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
      B3 |  00000401 | CYRILLIC CAPITAL LETTER IO
      B4 |  00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE
      B5 |  00002563 | DOUBLE VERTICAL AND LEFT
      B6 |  00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
      B7 |  00000407 | CYRILLIC CAPITAL LETTER YI (Ukrainian)
      B8 |  00002566 | BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
      B9 |  00002567 | BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
      BA |  00002568 | BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
      BB |  00002569 | BOX DRAWINGS DOUBLE UP AND HORIZONTAL
      BC |  0000256A | BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
      BD |  00000490 | CYRILLIC CAPITAL LETTER GHE WITH UPTURN
      BE |  0000256C | BOX DRAWINGS  DOUBLE VERTICAL AND HORIZONTAL
      BF |  000000A9 | COPYRIGHT SIGN
      C0 |  0000044E | CYRILLIC SMALL LETTER YU
      C1 |  00000430 | CYRILLIC SMALL LETTER A
      C2 |  00000431 | CYRILLIC SMALL LETTER BE
      C3 |  00000446 | CYRILLIC SMALL LETTER TSE
      C4 |  00000434 | CYRILLIC SMALL LETTER DE
      C5 |  00000435 | CYRILLIC SMALL LETTER IE
      C6 |  00000444 | CYRILLIC SMALL LETTER EF
      C7 |  00000433 | CYRILLIC SMALL LETTER GHE
      C8 |  00000445 | CYRILLIC SMALL LETTER HA
      C9 |  00000438 | CYRILLIC SMALL LETTER I
      CA |  00000439 | CYRILLIC SMALL LETTER SHORT I
      CB |  0000043A | CYRILLIC SMALL LETTER KA
      CC |  0000043B | CYRILLIC SMALL LETTER EL
      CD |  0000043C | CYRILLIC SMALL LETTER EM
      CE |  0000043D | CYRILLIC SMALL LETTER EN
      CF |  0000043E | CYRILLIC SMALL LETTER O
      D0 |  0000043F | CYRILLIC SMALL LETTER PE
      D1 |  0000044F | CYRILLIC SMALL LETTER YA
      D2 |  00000440 | CYRILLIC SMALL LETTER ER
      D3 |  00000441 | CYRILLIC SMALL LETTER ES
      D4 |  00000442 | CYRILLIC SMALL LETTER TE
      D5 |  00000443 | CYRILLIC SMALL LETTER U
      D6 |  00000436 | CYRILLIC SMALL LETTER ZHE
      D7 |  00000432 | CYRILLIC SMALL LETTER VE
      D8 |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      D9 |  0000044B | CYRILLIC SMALL LETTER YERU
      DA |  00000437 | CYRILLIC SMALL LETTER ZE
      DB |  00000448 | CYRILLIC SMALL LETTER SHA
      DC |  0000044D | CYRILLIC SMALL LETTER E
      DD |  00000449 | CYRILLIC SMALL LETTER SHCHA
      DE |  00000447 | CYRILLIC SMALL LETTER CHE
      DF |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      E0 |  0000042E | CYRILLIC CAPITAL LETTER YU
      E1 |  00000410 | CYRILLIC CAPITAL LETTER A
      E2 |  00000411 | CYRILLIC CAPITAL LETTER BE
      E3 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      E4 |  00000414 | CYRILLIC CAPITAL LETTER DE
      E5 |  00000415 | CYRILLIC CAPITAL LETTER IE
      E6 |  00000424 | CYRILLIC CAPITAL LETTER EF
      E7 |  00000413 | CYRILLIC CAPITAL LETTER GHE
      E8 |  00000425 | CYRILLIC CAPITAL LETTER HA
      E9 |  00000418 | CYRILLIC CAPITAL LETTER I
      EA |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      EB |  0000041A | CYRILLIC CAPITAL LETTER KA
      EC |  0000041B | CYRILLIC CAPITAL LETTER EL
      ED |  0000041C | CYRILLIC CAPITAL LETTER EM
      EE |  0000041D | CYRILLIC CAPITAL LETTER EN
      EF |  0000041E | CYRILLIC CAPITAL LETTER O
      F0 |  0000041F | CYRILLIC CAPITAL LETTER PE
      F1 |  0000042F | CYRILLIC CAPITAL LETTER YA
      F2 |  00000420 | CYRILLIC CAPITAL LETTER ER
      F3 |  00000421 | CYRILLIC CAPITAL LETTER ES
      F4 |  00000422 | CYRILLIC CAPITAL LETTER TE
      F5 |  00000423 | CYRILLIC CAPITAL LETTER U
      F6 |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      F7 |  00000412 | CYRILLIC CAPITAL LETTER VE
      F8 |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      F9 |  0000042B | CYRILLIC CAPITAL LETTER YERU
      FA |  00000417 | CYRILLIC CAPITAL LETTER ZE
      FB |  00000428 | CYRILLIC CAPITAL LETTER SHA
      FC |  0000042D | CYRILLIC CAPITAL LETTER E
      FD |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      FE |  00000427 | CYRILLIC CAPITAL LETTER CHE
      FF |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_KOI8_U

    $main::fatpacked{"Locale/RecodeData/KOI_8.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_KOI_8';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for KOI-8.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::KOI_8;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x044e,
      0x0430,
      0x0431,
      0x0446,
      0x0434,
      0x0435,
      0x0444,
      0x0433,
      0x0445,
      0x0438,
      0x0439,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x044f,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0436,
      0x0432,
      0x044c,
      0x044b,
      0x0437,
      0x0448,
      0x044d,
      0x0449,
      0x0447,
      0x044a,
      0x042e,
      0x0410,
      0x0411,
      0x0426,
      0x0414,
      0x0415,
      0x0424,
      0x0413,
      0x0425,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0x041d,
      0x041e,
      0x041f,
      0x042f,
      0x0420,
      0x0421,
      0x0422,
      0x0423,
      0x0416,
      0x0412,
      0x042c,
      0x042b,
      0x0417,
      0x0428,
      0x042d,
      0x0429,
      0x0427,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd1\x8e",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xd1\x86",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd1\x84",
      "\xd0\xb3",
      "\xd1\x85",
      "\xd0\xb8",
      "\xd0\xb9",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xd1\x8f",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd0\xb6",
      "\xd0\xb2",
      "\xd1\x8c",
      "\xd1\x8b",
      "\xd0\xb7",
      "\xd1\x88",
      "\xd1\x8d",
      "\xd1\x89",
      "\xd1\x87",
      "\xd1\x8a",
      "\xd0\xae",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\xa6",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\xa4",
      "\xd0\x93",
      "\xd0\xa5",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xaf",
      "\xd0\xa0",
      "\xd0\xa1",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\x96",
      "\xd0\x92",
      "\xd0\xac",
      "\xd0\xab",
      "\xd0\x97",
      "\xd0\xa8",
      "\xd0\xad",
      "\xd0\xa9",
      "\xd0\xa7",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000410 => "\xe1",
      0x00000411 => "\xe2",
      0x00000412 => "\xf7",
      0x00000413 => "\xe7",
      0x00000414 => "\xe4",
      0x00000415 => "\xe5",
      0x00000416 => "\xf6",
      0x00000417 => "\xfa",
      0x00000418 => "\xe9",
      0x00000419 => "\xea",
      0x0000041a => "\xeb",
      0x0000041b => "\xec",
      0x0000041c => "\xed",
      0x0000041d => "\xee",
      0x0000041e => "\xef",
      0x0000041f => "\xf0",
      0x00000420 => "\xf2",
      0x00000421 => "\xf3",
      0x00000422 => "\xf4",
      0x00000423 => "\xf5",
      0x00000424 => "\xe6",
      0x00000425 => "\xe8",
      0x00000426 => "\xe3",
      0x00000427 => "\xfe",
      0x00000428 => "\xfb",
      0x00000429 => "\xfd",
      0x0000042b => "\xf9",
      0x0000042c => "\xf8",
      0x0000042d => "\xfc",
      0x0000042e => "\xe0",
      0x0000042f => "\xf1",
      0x00000430 => "\xc1",
      0x00000431 => "\xc2",
      0x00000432 => "\xd7",
      0x00000433 => "\xc7",
      0x00000434 => "\xc4",
      0x00000435 => "\xc5",
      0x00000436 => "\xd6",
      0x00000437 => "\xda",
      0x00000438 => "\xc9",
      0x00000439 => "\xca",
      0x0000043a => "\xcb",
      0x0000043b => "\xcc",
      0x0000043c => "\xcd",
      0x0000043d => "\xce",
      0x0000043e => "\xcf",
      0x0000043f => "\xd0",
      0x00000440 => "\xd2",
      0x00000441 => "\xd3",
      0x00000442 => "\xd4",
      0x00000443 => "\xd5",
      0x00000444 => "\xc6",
      0x00000445 => "\xc8",
      0x00000446 => "\xc3",
      0x00000447 => "\xde",
      0x00000448 => "\xdb",
      0x00000449 => "\xdd",
      0x0000044a => "\xdf",
      0x0000044b => "\xd9",
      0x0000044c => "\xd8",
      0x0000044d => "\xdc",
      0x0000044e => "\xc0",
      0x0000044f => "\xd1",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::KOI_8 - Conversion routines for KOI-8
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for KOI-8.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: Andrey A. Chernov E<lt>ache@astral.msk.suE<gt>
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      C0 |  0000044E | CYRILLIC SMALL LETTER YU
      C1 |  00000430 | CYRILLIC SMALL LETTER A
      C2 |  00000431 | CYRILLIC SMALL LETTER BE
      C3 |  00000446 | CYRILLIC SMALL LETTER TSE
      C4 |  00000434 | CYRILLIC SMALL LETTER DE
      C5 |  00000435 | CYRILLIC SMALL LETTER IE
      C6 |  00000444 | CYRILLIC SMALL LETTER EF
      C7 |  00000433 | CYRILLIC SMALL LETTER GHE
      C8 |  00000445 | CYRILLIC SMALL LETTER HA
      C9 |  00000438 | CYRILLIC SMALL LETTER I
      CA |  00000439 | CYRILLIC SMALL LETTER SHORT I
      CB |  0000043A | CYRILLIC SMALL LETTER KA
      CC |  0000043B | CYRILLIC SMALL LETTER EL
      CD |  0000043C | CYRILLIC SMALL LETTER EM
      CE |  0000043D | CYRILLIC SMALL LETTER EN
      CF |  0000043E | CYRILLIC SMALL LETTER O
      D0 |  0000043F | CYRILLIC SMALL LETTER PE
      D1 |  0000044F | CYRILLIC SMALL LETTER YA
      D2 |  00000440 | CYRILLIC SMALL LETTER ER
      D3 |  00000441 | CYRILLIC SMALL LETTER ES
      D4 |  00000442 | CYRILLIC SMALL LETTER TE
      D5 |  00000443 | CYRILLIC SMALL LETTER U
      D6 |  00000436 | CYRILLIC SMALL LETTER ZHE
      D7 |  00000432 | CYRILLIC SMALL LETTER VE
      D8 |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      D9 |  0000044B | CYRILLIC SMALL LETTER YERU
      DA |  00000437 | CYRILLIC SMALL LETTER ZE
      DB |  00000448 | CYRILLIC SMALL LETTER SHA
      DC |  0000044D | CYRILLIC SMALL LETTER E
      DD |  00000449 | CYRILLIC SMALL LETTER SHCHA
      DE |  00000447 | CYRILLIC SMALL LETTER CHE
      DF |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      E0 |  0000042E | CYRILLIC CAPITAL LETTER YU
      E1 |  00000410 | CYRILLIC CAPITAL LETTER A
      E2 |  00000411 | CYRILLIC CAPITAL LETTER BE
      E3 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      E4 |  00000414 | CYRILLIC CAPITAL LETTER DE
      E5 |  00000415 | CYRILLIC CAPITAL LETTER IE
      E6 |  00000424 | CYRILLIC CAPITAL LETTER EF
      E7 |  00000413 | CYRILLIC CAPITAL LETTER GHE
      E8 |  00000425 | CYRILLIC CAPITAL LETTER HA
      E9 |  00000418 | CYRILLIC CAPITAL LETTER I
      EA |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      EB |  0000041A | CYRILLIC CAPITAL LETTER KA
      EC |  0000041B | CYRILLIC CAPITAL LETTER EL
      ED |  0000041C | CYRILLIC CAPITAL LETTER EM
      EE |  0000041D | CYRILLIC CAPITAL LETTER EN
      EF |  0000041E | CYRILLIC CAPITAL LETTER O
      F0 |  0000041F | CYRILLIC CAPITAL LETTER PE
      F1 |  0000042F | CYRILLIC CAPITAL LETTER YA
      F2 |  00000420 | CYRILLIC CAPITAL LETTER ER
      F3 |  00000421 | CYRILLIC CAPITAL LETTER ES
      F4 |  00000422 | CYRILLIC CAPITAL LETTER TE
      F5 |  00000423 | CYRILLIC CAPITAL LETTER U
      F6 |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      F7 |  00000412 | CYRILLIC CAPITAL LETTER VE
      F8 |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      F9 |  0000042B | CYRILLIC CAPITAL LETTER YERU
      FA |  00000417 | CYRILLIC CAPITAL LETTER ZE
      FB |  00000428 | CYRILLIC CAPITAL LETTER SHA
      FC |  0000042D | CYRILLIC CAPITAL LETTER E
      FD |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      FE |  00000427 | CYRILLIC CAPITAL LETTER CHE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_KOI_8

    $main::fatpacked{"Locale/RecodeData/LATIN_GREEK.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_LATIN_GREEK';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for LATIN-GREEK.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::LATIN_GREEK;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x00a3,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0391,
      0x0392,
      0x03a8,
      0x0394,
      0x0395,
      0x03a6,
      0x0393,
      0x0397,
      0x0399,
      0x039e,
      0x039a,
      0x039b,
      0x039c,
      0x039d,
      0x039f,
      0x03a0,
      0xfffd,
      0x03a1,
      0x03a3,
      0x03a4,
      0x0398,
      0x03a9,
      0x00b7,
      0x03a7,
      0x03a5,
      0x0396,
      0x007b,
      0x007c,
      0x007d,
      0x00a8,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\xc2\xa3",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\xce\x91",
      "\xce\x92",
      "\xce\xa8",
      "\xce\x94",
      "\xce\x95",
      "\xce\xa6",
      "\xce\x93",
      "\xce\x97",
      "\xce\x99",
      "\xce\x9e",
      "\xce\x9a",
      "\xce\x9b",
      "\xce\x9c",
      "\xce\x9d",
      "\xce\x9f",
      "\xce\xa0",
      "\xef\xbf\xbd",
      "\xce\xa1",
      "\xce\xa3",
      "\xce\xa4",
      "\xce\x98",
      "\xce\xa9",
      "\xc2\xb7",
      "\xce\xa7",
      "\xce\xa5",
      "\xce\x96",
      "\x7b",
      "\x7c",
      "\x7d",
      "\xc2\xa8",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007f => "\x7f",
      0x000000a3 => "\x23",
      0x000000a8 => "\x7e",
      0x000000b7 => "\x77",
      0x00000391 => "\x61",
      0x00000392 => "\x62",
      0x00000393 => "\x67",
      0x00000394 => "\x64",
      0x00000395 => "\x65",
      0x00000396 => "\x7a",
      0x00000397 => "\x68",
      0x00000398 => "\x75",
      0x00000399 => "\x69",
      0x0000039a => "\x6b",
      0x0000039b => "\x6c",
      0x0000039c => "\x6d",
      0x0000039d => "\x6e",
      0x0000039e => "\x6a",
      0x0000039f => "\x6f",
      0x000003a0 => "\x70",
      0x000003a1 => "\x72",
      0x000003a3 => "\x73",
      0x000003a4 => "\x74",
      0x000003a5 => "\x79",
      0x000003a6 => "\x66",
      0x000003a7 => "\x78",
      0x000003a8 => "\x63",
      0x000003a9 => "\x76",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::LATIN_GREEK - Conversion routines for LATIN_GREEK
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for LATIN-GREEK.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-19
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  000000A3 | POUND SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000391 | GREEK CAPITAL LETTER ALPHA
      62 |  00000392 | GREEK CAPITAL LETTER BETA
      63 |  000003A8 | GREEK CAPITAL LETTER PSI
      64 |  00000394 | GREEK CAPITAL LETTER DELTA
      65 |  00000395 | GREEK CAPITAL LETTER EPSILON
      66 |  000003A6 | GREEK CAPITAL LETTER PHI
      67 |  00000393 | GREEK CAPITAL LETTER GAMMA
      68 |  00000397 | GREEK CAPITAL LETTER ETA
      69 |  00000399 | GREEK CAPITAL LETTER IOTA
      6A |  0000039E | GREEK CAPITAL LETTER XI
      6B |  0000039A | GREEK CAPITAL LETTER KAPPA
      6C |  0000039B | GREEK CAPITAL LETTER LAMDA
      6D |  0000039C | GREEK CAPITAL LETTER MU
      6E |  0000039D | GREEK CAPITAL LETTER NU
      6F |  0000039F | GREEK CAPITAL LETTER OMICRON
      70 |  000003A0 | GREEK CAPITAL LETTER PI
      72 |  000003A1 | GREEK CAPITAL LETTER RHO
      73 |  000003A3 | GREEK CAPITAL LETTER SIGMA
      74 |  000003A4 | GREEK CAPITAL LETTER TAU
      75 |  00000398 | GREEK CAPITAL LETTER THETA
      76 |  000003A9 | GREEK CAPITAL LETTER OMEGA
      77 |  000000B7 | MIDDLE DOT
      78 |  000003A7 | GREEK CAPITAL LETTER CHI
      79 |  000003A5 | GREEK CAPITAL LETTER UPSILON
      7A |  00000396 | GREEK CAPITAL LETTER ZETA
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  000000A8 | DIAERESIS
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_LATIN_GREEK

    $main::fatpacked{"Locale/RecodeData/LATIN_GREEK_1.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_LATIN_GREEK_1';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for LATIN-GREEK-1.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::LATIN_GREEK_1;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x039e,
      0x0022,
      0x0393,
      0x00a4,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x03a8,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x03a0,
      0x0394,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x03a9,
      0x0398,
      0x03a6,
      0x039b,
      0x03a3,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x203e,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\xce\x9e",
      "\x22",
      "\xce\x93",
      "\xc2\xa4",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\xce\xa8",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\xce\xa0",
      "\xce\x94",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xce\xa9",
      "\xce\x98",
      "\xce\xa6",
      "\xce\x9b",
      "\xce\xa3",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\xe2\x80\xbe",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000022 => "\x22",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007f => "\x7f",
      0x000000a4 => "\x24",
      0x00000393 => "\x23",
      0x00000394 => "\x40",
      0x00000398 => "\x5c",
      0x0000039b => "\x5e",
      0x0000039e => "\x21",
      0x000003a0 => "\x3f",
      0x000003a3 => "\x5f",
      0x000003a6 => "\x5d",
      0x000003a8 => "\x3a",
      0x000003a9 => "\x5b",
      0x0000203e => "\x7e",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::LATIN_GREEK_1 - Conversion routines for LATIN_GREEK_1
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for LATIN-GREEK-1.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-27
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  0000039E | GREEK CAPITAL LETTER XI
      22 |  00000022 | QUOTATION MARK
      23 |  00000393 | GREEK CAPITAL LETTER GAMMA
      24 |  000000A4 | CURRENCY SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  000003A8 | GREEK CAPITAL LETTER PSI
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  000003A0 | GREEK CAPITAL LETTER PI
      40 |  00000394 | GREEK CAPITAL LETTER DELTA
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  000003A9 | GREEK CAPITAL LETTER OMEGA
      5C |  00000398 | GREEK CAPITAL LETTER THETA
      5D |  000003A6 | GREEK CAPITAL LETTER PHI
      5E |  0000039B | GREEK CAPITAL LETTER LAMDA
      5F |  000003A3 | GREEK CAPITAL LETTER SIGMA
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000203E | OVERLINE
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_LATIN_GREEK_1

    $main::fatpacked{"Locale/RecodeData/MACARABIC.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_MACARABIC';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for MACARABIC.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::MACARABIC;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c4,
      0x00a0,
      0x00c7,
      0x00c9,
      0x00d1,
      0x00d6,
      0x00dc,
      0x00e1,
      0x00e0,
      0x00e2,
      0x00e4,
      0x06ba,
      0x00ab,
      0x00e7,
      0x00e9,
      0x00e8,
      0x00ea,
      0x00eb,
      0x00ed,
      0x2026,
      0x00ee,
      0x00ef,
      0x00f1,
      0x00f3,
      0x00bb,
      0x00f4,
      0x00f6,
      0x00f7,
      0x00fa,
      0x00f9,
      0x00fb,
      0x00fc,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x066a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x060c,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0660,
      0x0661,
      0x0662,
      0x0663,
      0x0664,
      0x0665,
      0x0666,
      0x0667,
      0x0668,
      0x0669,
      0xfffd,
      0x061b,
      0xfffd,
      0xfffd,
      0xfffd,
      0x061f,
      0x066d,
      0x0621,
      0x0622,
      0x0623,
      0x0624,
      0x0625,
      0x0626,
      0x0627,
      0x0628,
      0x0629,
      0x062a,
      0x062b,
      0x062c,
      0x062d,
      0x062e,
      0x062f,
      0x0630,
      0x0631,
      0x0632,
      0x0633,
      0x0634,
      0x0635,
      0x0636,
      0x0637,
      0x0638,
      0x0639,
      0x063a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0640,
      0x0641,
      0x0642,
      0x0643,
      0x0644,
      0x0645,
      0x0646,
      0x0647,
      0x0648,
      0x0649,
      0x064a,
      0x064b,
      0x064c,
      0x064d,
      0x064e,
      0x064f,
      0x0650,
      0x0651,
      0x0652,
      0x067e,
      0x0679,
      0x0686,
      0x06d5,
      0x06a4,
      0x06af,
      0x0688,
      0x0691,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0698,
      0x06d2,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x84",
      "\xc2\xa0",
      "\xc3\x87",
      "\xc3\x89",
      "\xc3\x91",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc3\xa1",
      "\xc3\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xda\xba",
      "\xc2\xab",
      "\xc3\xa7",
      "\xc3\xa9",
      "\xc3\xa8",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xad",
      "\xe2\x80\xa6",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb1",
      "\xc3\xb3",
      "\xc2\xbb",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc3\xba",
      "\xc3\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd9\xaa",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd8\x8c",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd9\xa0",
      "\xd9\xa1",
      "\xd9\xa2",
      "\xd9\xa3",
      "\xd9\xa4",
      "\xd9\xa5",
      "\xd9\xa6",
      "\xd9\xa7",
      "\xd9\xa8",
      "\xd9\xa9",
      "\xef\xbf\xbd",
      "\xd8\x9b",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd8\x9f",
      "\xd9\xad",
      "\xd8\xa1",
      "\xd8\xa2",
      "\xd8\xa3",
      "\xd8\xa4",
      "\xd8\xa5",
      "\xd8\xa6",
      "\xd8\xa7",
      "\xd8\xa8",
      "\xd8\xa9",
      "\xd8\xaa",
      "\xd8\xab",
      "\xd8\xac",
      "\xd8\xad",
      "\xd8\xae",
      "\xd8\xaf",
      "\xd8\xb0",
      "\xd8\xb1",
      "\xd8\xb2",
      "\xd8\xb3",
      "\xd8\xb4",
      "\xd8\xb5",
      "\xd8\xb6",
      "\xd8\xb7",
      "\xd8\xb8",
      "\xd8\xb9",
      "\xd8\xba",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd9\x80",
      "\xd9\x81",
      "\xd9\x82",
      "\xd9\x83",
      "\xd9\x84",
      "\xd9\x85",
      "\xd9\x86",
      "\xd9\x87",
      "\xd9\x88",
      "\xd9\x89",
      "\xd9\x8a",
      "\xd9\x8b",
      "\xd9\x8c",
      "\xd9\x8d",
      "\xd9\x8e",
      "\xd9\x8f",
      "\xd9\x90",
      "\xd9\x91",
      "\xd9\x92",
      "\xd9\xbe",
      "\xd9\xb9",
      "\xda\x86",
      "\xdb\x95",
      "\xda\xa4",
      "\xda\xaf",
      "\xda\x88",
      "\xda\x91",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xda\x98",
      "\xdb\x92",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\x81",
      0x000000ab => "\x8c",
      0x000000bb => "\x98",
      0x000000c4 => "\x80",
      0x000000c7 => "\x82",
      0x000000c9 => "\x83",
      0x000000d1 => "\x84",
      0x000000d6 => "\x85",
      0x000000dc => "\x86",
      0x000000e0 => "\x88",
      0x000000e1 => "\x87",
      0x000000e2 => "\x89",
      0x000000e4 => "\x8a",
      0x000000e7 => "\x8d",
      0x000000e8 => "\x8f",
      0x000000e9 => "\x8e",
      0x000000ea => "\x90",
      0x000000eb => "\x91",
      0x000000ed => "\x92",
      0x000000ee => "\x94",
      0x000000ef => "\x95",
      0x000000f1 => "\x96",
      0x000000f3 => "\x97",
      0x000000f4 => "\x99",
      0x000000f6 => "\x9a",
      0x000000f7 => "\x9b",
      0x000000f9 => "\x9d",
      0x000000fa => "\x9c",
      0x000000fb => "\x9e",
      0x000000fc => "\x9f",
      0x0000060c => "\xac",
      0x0000061b => "\xbb",
      0x0000061f => "\xbf",
      0x00000621 => "\xc1",
      0x00000622 => "\xc2",
      0x00000623 => "\xc3",
      0x00000624 => "\xc4",
      0x00000625 => "\xc5",
      0x00000626 => "\xc6",
      0x00000627 => "\xc7",
      0x00000628 => "\xc8",
      0x00000629 => "\xc9",
      0x0000062a => "\xca",
      0x0000062b => "\xcb",
      0x0000062c => "\xcc",
      0x0000062d => "\xcd",
      0x0000062e => "\xce",
      0x0000062f => "\xcf",
      0x00000630 => "\xd0",
      0x00000631 => "\xd1",
      0x00000632 => "\xd2",
      0x00000633 => "\xd3",
      0x00000634 => "\xd4",
      0x00000635 => "\xd5",
      0x00000636 => "\xd6",
      0x00000637 => "\xd7",
      0x00000638 => "\xd8",
      0x00000639 => "\xd9",
      0x0000063a => "\xda",
      0x00000640 => "\xe0",
      0x00000641 => "\xe1",
      0x00000642 => "\xe2",
      0x00000643 => "\xe3",
      0x00000644 => "\xe4",
      0x00000645 => "\xe5",
      0x00000646 => "\xe6",
      0x00000647 => "\xe7",
      0x00000648 => "\xe8",
      0x00000649 => "\xe9",
      0x0000064a => "\xea",
      0x0000064b => "\xeb",
      0x0000064c => "\xec",
      0x0000064d => "\xed",
      0x0000064e => "\xee",
      0x0000064f => "\xef",
      0x00000650 => "\xf0",
      0x00000651 => "\xf1",
      0x00000652 => "\xf2",
      0x00000660 => "\xb0",
      0x00000661 => "\xb1",
      0x00000662 => "\xb2",
      0x00000663 => "\xb3",
      0x00000664 => "\xb4",
      0x00000665 => "\xb5",
      0x00000666 => "\xb6",
      0x00000667 => "\xb7",
      0x00000668 => "\xb8",
      0x00000669 => "\xb9",
      0x0000066a => "\xa5",
      0x0000066d => "\xc0",
      0x00000679 => "\xf4",
      0x0000067e => "\xf3",
      0x00000686 => "\xf5",
      0x00000688 => "\xf9",
      0x00000691 => "\xfa",
      0x00000698 => "\xfe",
      0x000006a4 => "\xf7",
      0x000006af => "\xf8",
      0x000006ba => "\x8b",
      0x000006d2 => "\xff",
      0x000006d5 => "\xf6",
      0x00002026 => "\x93",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::MACARABIC - Conversion routines for MACARABIC
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for MACARABIC.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
  
   This charmap has been generated automatically from GNU libiconv
   conversions.
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      81 |  000000A0 | NO-BREAK SPACE
      82 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      83 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      84 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      85 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      86 |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      87 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      88 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      89 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      8A |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      8B |  000006BA | ARABIC LETTER NOON GHUNNA
      8C |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      8D |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      8E |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      8F |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      90 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      91 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      92 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      93 |  00002026 | HORIZONTAL ELLIPSIS
      94 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      95 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      96 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      97 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      98 |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      99 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      9A |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      9B |  000000F7 | DIVISION SIGN
      9C |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      9D |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      9E |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      9F |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      A5 |  0000066A | ARABIC PERCENT SIGN
      AC |  0000060C | ARABIC COMMA
      B0 |  00000660 | ARABIC-INDIC DIGIT ZERO
      B1 |  00000661 | ARABIC-INDIC DIGIT ONE
      B2 |  00000662 | ARABIC-INDIC DIGIT TWO
      B3 |  00000663 | ARABIC-INDIC DIGIT THREE
      B4 |  00000664 | ARABIC-INDIC DIGIT FOUR
      B5 |  00000665 | ARABIC-INDIC DIGIT FIVE
      B6 |  00000666 | ARABIC-INDIC DIGIT SIX
      B7 |  00000667 | ARABIC-INDIC DIGIT SEVEN
      B8 |  00000668 | ARABIC-INDIC DIGIT EIGHT
      B9 |  00000669 | ARABIC-INDIC DIGIT NINE
      BB |  0000061B | ARABIC SEMICOLON
      BF |  0000061F | ARABIC QUESTION MARK
      C0 |  0000066D | ARABIC FIVE POINTED STAR
      C1 |  00000621 | ARABIC LETTER HAMZA
      C2 |  00000622 | ARABIC LETTER ALEF WITH MADDA ABOVE
      C3 |  00000623 | ARABIC LETTER ALEF WITH HAMZA ABOVE
      C4 |  00000624 | ARABIC LETTER WAW WITH HAMZA ABOVE
      C5 |  00000625 | ARABIC LETTER ALEF WITH HAMZA BELOW
      C6 |  00000626 | ARABIC LETTER YEH WITH HAMZA ABOVE
      C7 |  00000627 | ARABIC LETTER ALEF
      C8 |  00000628 | ARABIC LETTER BEH
      C9 |  00000629 | ARABIC LETTER TEH MARBUTA
      CA |  0000062A | ARABIC LETTER TEH
      CB |  0000062B | ARABIC LETTER THEH
      CC |  0000062C | ARABIC LETTER JEEM
      CD |  0000062D | ARABIC LETTER HAH
      CE |  0000062E | ARABIC LETTER KHAH
      CF |  0000062F | ARABIC LETTER DAL
      D0 |  00000630 | ARABIC LETTER THAL
      D1 |  00000631 | ARABIC LETTER REH
      D2 |  00000632 | ARABIC LETTER ZAIN
      D3 |  00000633 | ARABIC LETTER SEEN
      D4 |  00000634 | ARABIC LETTER SHEEN
      D5 |  00000635 | ARABIC LETTER SAD
      D6 |  00000636 | ARABIC LETTER DAD
      D7 |  00000637 | ARABIC LETTER TAH
      D8 |  00000638 | ARABIC LETTER ZAH
      D9 |  00000639 | ARABIC LETTER AIN
      DA |  0000063A | ARABIC LETTER GHAIN
      E0 |  00000640 | ARABIC TATWEEL
      E1 |  00000641 | ARABIC LETTER FEH
      E2 |  00000642 | ARABIC LETTER QAF
      E3 |  00000643 | ARABIC LETTER KAF
      E4 |  00000644 | ARABIC LETTER LAM
      E5 |  00000645 | ARABIC LETTER MEEM
      E6 |  00000646 | ARABIC LETTER NOON
      E7 |  00000647 | ARABIC LETTER HEH
      E8 |  00000648 | ARABIC LETTER WAW
      E9 |  00000649 | ARABIC LETTER ALEF MAKSURA
      EA |  0000064A | ARABIC LETTER YEH
      EB |  0000064B | ARABIC FATHATAN
      EC |  0000064C | ARABIC DAMMATAN
      ED |  0000064D | ARABIC KASRATAN
      EE |  0000064E | ARABIC FATHA
      EF |  0000064F | ARABIC DAMMA
      F0 |  00000650 | ARABIC KASRA
      F1 |  00000651 | ARABIC SHADDA
      F2 |  00000652 | ARABIC SUKUN
      F3 |  0000067E | ARABIC LETTER PEH
      F4 |  00000679 | ARABIC LETTER TTEH
      F5 |  00000686 | ARABIC LETTER TCHEH
      F6 |  000006D5 | ARABIC LETTER AE
      F7 |  000006A4 | ARABIC LETTER VEH
      F8 |  000006AF | ARABIC LETTER GAF
      F9 |  00000688 | ARABIC LETTER DDAL
      FA |  00000691 | ARABIC LETTER RREH
      FE |  00000698 | ARABIC LETTER JEH
      FF |  000006D2 | ARABIC LETTER YEH BARREE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_MACARABIC

    $main::fatpacked{"Locale/RecodeData/MACCROATIAN.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_MACCROATIAN';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for MACCROATIAN.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::MACCROATIAN;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c4,
      0x00c5,
      0x00c7,
      0x00c9,
      0x00d1,
      0x00d6,
      0x00dc,
      0x00e1,
      0x00e0,
      0x00e2,
      0x00e4,
      0x00e3,
      0x00e5,
      0x00e7,
      0x00e9,
      0x00e8,
      0x00ea,
      0x00eb,
      0x00ed,
      0x00ec,
      0x00ee,
      0x00ef,
      0x00f1,
      0x00f3,
      0x00f2,
      0x00f4,
      0x00f6,
      0x00f5,
      0x00fa,
      0x00f9,
      0x00fb,
      0x00fc,
      0x2020,
      0x00b0,
      0x00a2,
      0x00a3,
      0x00a7,
      0x2022,
      0x00b6,
      0x00df,
      0x00ae,
      0x0160,
      0x2122,
      0x00b4,
      0x00a8,
      0x2260,
      0x017d,
      0x00d8,
      0x221e,
      0x00b1,
      0x2264,
      0x2265,
      0x2206,
      0x00b5,
      0x2202,
      0x2211,
      0x220f,
      0x0161,
      0x222b,
      0x00aa,
      0x00ba,
      0x2126,
      0x017e,
      0x00f8,
      0x00bf,
      0x00a1,
      0x00ac,
      0x221a,
      0x0192,
      0x2248,
      0x0106,
      0x00ab,
      0x010c,
      0x2026,
      0x00a0,
      0x00c0,
      0x00c3,
      0x00d5,
      0x0152,
      0x0153,
      0x0110,
      0x2014,
      0x201c,
      0x201d,
      0x2018,
      0x2019,
      0x00f7,
      0x25ca,
      0xfffd,
      0x00a9,
      0x2044,
      0x00a4,
      0x2039,
      0x203a,
      0x00c6,
      0x00bb,
      0x2013,
      0x00b7,
      0x201a,
      0x201e,
      0x2030,
      0x00c2,
      0x0107,
      0x00c1,
      0x010d,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x00d3,
      0x00d4,
      0x0111,
      0x00d2,
      0x00da,
      0x00db,
      0x00d9,
      0x0131,
      0x02c6,
      0x02dc,
      0x00af,
      0x03c0,
      0x00cb,
      0x02da,
      0x00b8,
      0x00ca,
      0x00e6,
      0x02c7,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x89",
      "\xc3\x91",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc3\xa1",
      "\xc3\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa3",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xa9",
      "\xc3\xa8",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xad",
      "\xc3\xac",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb1",
      "\xc3\xb3",
      "\xc3\xb2",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb5",
      "\xc3\xba",
      "\xc3\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xe2\x80\xa0",
      "\xc2\xb0",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa7",
      "\xe2\x80\xa2",
      "\xc2\xb6",
      "\xc3\x9f",
      "\xc2\xae",
      "\xc5\xa0",
      "\xe2\x84\xa2",
      "\xc2\xb4",
      "\xc2\xa8",
      "\xe2\x89\xa0",
      "\xc5\xbd",
      "\xc3\x98",
      "\xe2\x88\x9e",
      "\xc2\xb1",
      "\xe2\x89\xa4",
      "\xe2\x89\xa5",
      "\xe2\x88\x86",
      "\xc2\xb5",
      "\xe2\x88\x82",
      "\xe2\x88\x91",
      "\xe2\x88\x8f",
      "\xc5\xa1",
      "\xe2\x88\xab",
      "\xc2\xaa",
      "\xc2\xba",
      "\xe2\x84\xa6",
      "\xc5\xbe",
      "\xc3\xb8",
      "\xc2\xbf",
      "\xc2\xa1",
      "\xc2\xac",
      "\xe2\x88\x9a",
      "\xc6\x92",
      "\xe2\x89\x88",
      "\xc4\x86",
      "\xc2\xab",
      "\xc4\x8c",
      "\xe2\x80\xa6",
      "\xc2\xa0",
      "\xc3\x80",
      "\xc3\x83",
      "\xc3\x95",
      "\xc5\x92",
      "\xc5\x93",
      "\xc4\x90",
      "\xe2\x80\x94",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xc3\xb7",
      "\xe2\x97\x8a",
      "\xef\xbf\xbd",
      "\xc2\xa9",
      "\xe2\x81\x84",
      "\xc2\xa4",
      "\xe2\x80\xb9",
      "\xe2\x80\xba",
      "\xc3\x86",
      "\xc2\xbb",
      "\xe2\x80\x93",
      "\xc2\xb7",
      "\xe2\x80\x9a",
      "\xe2\x80\x9e",
      "\xe2\x80\xb0",
      "\xc3\x82",
      "\xc4\x87",
      "\xc3\x81",
      "\xc4\x8d",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\xc3\x93",
      "\xc3\x94",
      "\xc4\x91",
      "\xc3\x92",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x99",
      "\xc4\xb1",
      "\xcb\x86",
      "\xcb\x9c",
      "\xc2\xaf",
      "\xcf\x80",
      "\xc3\x8b",
      "\xcb\x9a",
      "\xc2\xb8",
      "\xc3\x8a",
      "\xc3\xa6",
      "\xcb\x87",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xca",
      0x000000a1 => "\xc1",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xdb",
      0x000000a7 => "\xa4",
      0x000000a8 => "\xac",
      0x000000a9 => "\xd9",
      0x000000aa => "\xbb",
      0x000000ab => "\xc7",
      0x000000ac => "\xc2",
      0x000000ae => "\xa8",
      0x000000af => "\xf8",
      0x000000b0 => "\xa1",
      0x000000b1 => "\xb1",
      0x000000b4 => "\xab",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xa6",
      0x000000b7 => "\xe1",
      0x000000b8 => "\xfc",
      0x000000ba => "\xbc",
      0x000000bb => "\xdf",
      0x000000bf => "\xc0",
      0x000000c0 => "\xcb",
      0x000000c1 => "\xe7",
      0x000000c2 => "\xe5",
      0x000000c3 => "\xcc",
      0x000000c4 => "\x80",
      0x000000c5 => "\x81",
      0x000000c6 => "\xde",
      0x000000c7 => "\x82",
      0x000000c8 => "\xe9",
      0x000000c9 => "\x83",
      0x000000ca => "\xfd",
      0x000000cb => "\xfa",
      0x000000cc => "\xed",
      0x000000cd => "\xea",
      0x000000ce => "\xeb",
      0x000000cf => "\xec",
      0x000000d1 => "\x84",
      0x000000d2 => "\xf1",
      0x000000d3 => "\xee",
      0x000000d4 => "\xef",
      0x000000d5 => "\xcd",
      0x000000d6 => "\x85",
      0x000000d8 => "\xaf",
      0x000000d9 => "\xf4",
      0x000000da => "\xf2",
      0x000000db => "\xf3",
      0x000000dc => "\x86",
      0x000000df => "\xa7",
      0x000000e0 => "\x88",
      0x000000e1 => "\x87",
      0x000000e2 => "\x89",
      0x000000e3 => "\x8b",
      0x000000e4 => "\x8a",
      0x000000e5 => "\x8c",
      0x000000e6 => "\xfe",
      0x000000e7 => "\x8d",
      0x000000e8 => "\x8f",
      0x000000e9 => "\x8e",
      0x000000ea => "\x90",
      0x000000eb => "\x91",
      0x000000ec => "\x93",
      0x000000ed => "\x92",
      0x000000ee => "\x94",
      0x000000ef => "\x95",
      0x000000f1 => "\x96",
      0x000000f2 => "\x98",
      0x000000f3 => "\x97",
      0x000000f4 => "\x99",
      0x000000f5 => "\x9b",
      0x000000f6 => "\x9a",
      0x000000f7 => "\xd6",
      0x000000f8 => "\xbf",
      0x000000f9 => "\x9d",
      0x000000fa => "\x9c",
      0x000000fb => "\x9e",
      0x000000fc => "\x9f",
      0x00000106 => "\xc6",
      0x00000107 => "\xe6",
      0x0000010c => "\xc8",
      0x0000010d => "\xe8",
      0x00000110 => "\xd0",
      0x00000111 => "\xf0",
      0x00000131 => "\xf5",
      0x00000152 => "\xce",
      0x00000153 => "\xcf",
      0x00000160 => "\xa9",
      0x00000161 => "\xb9",
      0x0000017d => "\xae",
      0x0000017e => "\xbe",
      0x00000192 => "\xc4",
      0x000002c6 => "\xf6",
      0x000002c7 => "\xff",
      0x000002da => "\xfb",
      0x000002dc => "\xf7",
      0x000003c0 => "\xf9",
      0x00002013 => "\xe0",
      0x00002014 => "\xd1",
      0x00002018 => "\xd4",
      0x00002019 => "\xd5",
      0x0000201a => "\xe2",
      0x0000201c => "\xd2",
      0x0000201d => "\xd3",
      0x0000201e => "\xe3",
      0x00002020 => "\xa0",
      0x00002022 => "\xa5",
      0x00002026 => "\xc9",
      0x00002030 => "\xe4",
      0x00002039 => "\xdc",
      0x0000203a => "\xdd",
      0x00002044 => "\xda",
      0x00002122 => "\xaa",
      0x00002126 => "\xbd",
      0x00002202 => "\xb6",
      0x00002206 => "\xb4",
      0x0000220f => "\xb8",
      0x00002211 => "\xb7",
      0x0000221a => "\xc3",
      0x0000221e => "\xb0",
      0x0000222b => "\xba",
      0x00002248 => "\xc5",
      0x00002260 => "\xad",
      0x00002264 => "\xb2",
      0x00002265 => "\xb3",
      0x000025ca => "\xd7",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::MACCROATIAN - Conversion routines for MACCROATIAN
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for MACCROATIAN.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
  
   This charmap has been generated automatically from GNU libiconv
   conversions.
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      81 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      82 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      83 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      84 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      85 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      86 |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      87 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      88 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      89 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      8A |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      8B |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      8C |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      8D |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      8E |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      8F |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      90 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      91 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      92 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      93 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      94 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      95 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      96 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      97 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      98 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      99 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      9A |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      9B |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      9C |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      9D |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      9E |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      9F |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      A0 |  00002020 | DAGGER
      A1 |  000000B0 | DEGREE SIGN
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A7 | SECTION SIGN
      A5 |  00002022 | BULLET
      A6 |  000000B6 | PILCROW SIGN
      A7 |  000000DF | LATIN SMALL LETTER SHARP S
      A8 |  000000AE | REGISTERED SIGN
      A9 |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      AA |  00002122 | TRADE MARK SIGN
      AB |  000000B4 | ACUTE ACCENT
      AC |  000000A8 | DIAERESIS
      AD |  00002260 | NOT EQUAL TO
      AE |  0000017D | LATIN CAPITAL LETTER Z WITH CARON
      AF |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      B0 |  0000221E | INFINITY
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  00002264 | LESS-THAN OR EQUAL TO
      B3 |  00002265 | GREATER-THAN OR EQUAL TO
      B4 |  00002206 | INCREMENT
      B5 |  000000B5 | MICRO SIGN
      B6 |  00002202 | PARTIAL DIFFERENTIAL
      B7 |  00002211 | N-ARY SUMMATION
      B8 |  0000220F | N-ARY PRODUCT
      B9 |  00000161 | LATIN SMALL LETTER S WITH CARON
      BA |  0000222B | INTEGRAL
      BB |  000000AA | FEMININE ORDINAL INDICATOR
      BC |  000000BA | MASCULINE ORDINAL INDICATOR
      BD |  00002126 | OHM SIGN
      BE |  0000017E | LATIN SMALL LETTER Z WITH CARON
      BF |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      C0 |  000000BF | INVERTED QUESTION MARK
      C1 |  000000A1 | INVERTED EXCLAMATION MARK
      C2 |  000000AC | NOT SIGN
      C3 |  0000221A | SQUARE ROOT
      C4 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      C5 |  00002248 | ALMOST EQUAL TO
      C6 |  00000106 | LATIN CAPITAL LETTER C WITH ACUTE
      C7 |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      C8 |  0000010C | LATIN CAPITAL LETTER C WITH CARON
      C9 |  00002026 | HORIZONTAL ELLIPSIS
      CA |  000000A0 | NO-BREAK SPACE
      CB |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      CC |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      CD |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      CE |  00000152 | LATIN CAPITAL LIGATURE OE
      CF |  00000153 | LATIN SMALL LIGATURE OE
      D0 |  00000110 | LATIN CAPITAL LETTER D WITH STROKE
      D1 |  00002014 | EM DASH
      D2 |  0000201C | LEFT DOUBLE QUOTATION MARK
      D3 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      D4 |  00002018 | LEFT SINGLE QUOTATION MARK
      D5 |  00002019 | RIGHT SINGLE QUOTATION MARK
      D6 |  000000F7 | DIVISION SIGN
      D7 |  000025CA | LOZENGE
      D9 |  000000A9 | COPYRIGHT SIGN
      DA |  00002044 | FRACTION SLASH
      DB |  000000A4 | CURRENCY SIGN
      DC |  00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
      DD |  0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
      DE |  000000C6 | LATIN CAPITAL LETTER AE
      DF |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      E0 |  00002013 | EN DASH
      E1 |  000000B7 | MIDDLE DOT
      E2 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      E3 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      E4 |  00002030 | PER MILLE SIGN
      E5 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      E6 |  00000107 | LATIN SMALL LETTER C WITH ACUTE
      E7 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      E8 |  0000010D | LATIN SMALL LETTER C WITH CARON
      E9 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      EA |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      EB |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      EC |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      ED |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      F0 |  00000111 | LATIN SMALL LETTER D WITH STROKE
      F1 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      F2 |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      F3 |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      F4 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      F5 |  00000131 | LATIN SMALL LETTER DOTLESS I
      F6 |  000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT
      F7 |  000002DC | SMALL TILDE
      F8 |  000000AF | MACRON
      F9 |  000003C0 | GREEK SMALL LETTER PI
      FA |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      FB |  000002DA | RING ABOVE
      FC |  000000B8 | CEDILLA
      FD |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      FE |  000000E6 | LATIN SMALL LETTER AE
      FF |  000002C7 | CARON
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_MACCROATIAN

    $main::fatpacked{"Locale/RecodeData/MACCYRILLIC.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_MACCYRILLIC';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for MACCYRILLIC.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::MACCYRILLIC;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0410,
      0x0411,
      0x0412,
      0x0413,
      0x0414,
      0x0415,
      0x0416,
      0x0417,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0x041d,
      0x041e,
      0x041f,
      0x0420,
      0x0421,
      0x0422,
      0x0423,
      0x0424,
      0x0425,
      0x0426,
      0x0427,
      0x0428,
      0x0429,
      0x042a,
      0x042b,
      0x042c,
      0x042d,
      0x042e,
      0x042f,
      0x2020,
      0x00b0,
      0x00a2,
      0x00a3,
      0x00a7,
      0x2022,
      0x00b6,
      0x0406,
      0x00ae,
      0x00a9,
      0x2122,
      0x0402,
      0x0452,
      0x2260,
      0x0403,
      0x0453,
      0x221e,
      0x00b1,
      0x2264,
      0x2265,
      0x0456,
      0x00b5,
      0x2202,
      0x0408,
      0x0404,
      0x0454,
      0x0407,
      0x0457,
      0x0409,
      0x0459,
      0x040a,
      0x045a,
      0x0458,
      0x0405,
      0x00ac,
      0x221a,
      0x0192,
      0x2248,
      0x2206,
      0x00ab,
      0x00bb,
      0x2026,
      0x00a0,
      0x040b,
      0x045b,
      0x040c,
      0x045c,
      0x0455,
      0x2013,
      0x2014,
      0x201c,
      0x201d,
      0x2018,
      0x2019,
      0x00f7,
      0x201e,
      0x040e,
      0x045e,
      0x040f,
      0x045f,
      0x2116,
      0x0401,
      0x0451,
      0x044f,
      0x0430,
      0x0431,
      0x0432,
      0x0433,
      0x0434,
      0x0435,
      0x0436,
      0x0437,
      0x0438,
      0x0439,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0444,
      0x0445,
      0x0446,
      0x0447,
      0x0448,
      0x0449,
      0x044a,
      0x044b,
      0x044c,
      0x044d,
      0x044e,
      0x00a4,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\x92",
      "\xd0\x93",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\x96",
      "\xd0\x97",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xa0",
      "\xd0\xa1",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\xa4",
      "\xd0\xa5",
      "\xd0\xa6",
      "\xd0\xa7",
      "\xd0\xa8",
      "\xd0\xa9",
      "\xd0\xaa",
      "\xd0\xab",
      "\xd0\xac",
      "\xd0\xad",
      "\xd0\xae",
      "\xd0\xaf",
      "\xe2\x80\xa0",
      "\xc2\xb0",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa7",
      "\xe2\x80\xa2",
      "\xc2\xb6",
      "\xd0\x86",
      "\xc2\xae",
      "\xc2\xa9",
      "\xe2\x84\xa2",
      "\xd0\x82",
      "\xd1\x92",
      "\xe2\x89\xa0",
      "\xd0\x83",
      "\xd1\x93",
      "\xe2\x88\x9e",
      "\xc2\xb1",
      "\xe2\x89\xa4",
      "\xe2\x89\xa5",
      "\xd1\x96",
      "\xc2\xb5",
      "\xe2\x88\x82",
      "\xd0\x88",
      "\xd0\x84",
      "\xd1\x94",
      "\xd0\x87",
      "\xd1\x97",
      "\xd0\x89",
      "\xd1\x99",
      "\xd0\x8a",
      "\xd1\x9a",
      "\xd1\x98",
      "\xd0\x85",
      "\xc2\xac",
      "\xe2\x88\x9a",
      "\xc6\x92",
      "\xe2\x89\x88",
      "\xe2\x88\x86",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x80\xa6",
      "\xc2\xa0",
      "\xd0\x8b",
      "\xd1\x9b",
      "\xd0\x8c",
      "\xd1\x9c",
      "\xd1\x95",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xc3\xb7",
      "\xe2\x80\x9e",
      "\xd0\x8e",
      "\xd1\x9e",
      "\xd0\x8f",
      "\xd1\x9f",
      "\xe2\x84\x96",
      "\xd0\x81",
      "\xd1\x91",
      "\xd1\x8f",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xd0\xb2",
      "\xd0\xb3",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd0\xb6",
      "\xd0\xb7",
      "\xd0\xb8",
      "\xd0\xb9",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd1\x84",
      "\xd1\x85",
      "\xd1\x86",
      "\xd1\x87",
      "\xd1\x88",
      "\xd1\x89",
      "\xd1\x8a",
      "\xd1\x8b",
      "\xd1\x8c",
      "\xd1\x8d",
      "\xd1\x8e",
      "\xc2\xa4",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xca",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xff",
      0x000000a7 => "\xa4",
      0x000000a9 => "\xa9",
      0x000000ab => "\xc7",
      0x000000ac => "\xc2",
      0x000000ae => "\xa8",
      0x000000b0 => "\xa1",
      0x000000b1 => "\xb1",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xa6",
      0x000000bb => "\xc8",
      0x000000f7 => "\xd6",
      0x00000192 => "\xc4",
      0x00000401 => "\xdd",
      0x00000402 => "\xab",
      0x00000403 => "\xae",
      0x00000404 => "\xb8",
      0x00000405 => "\xc1",
      0x00000406 => "\xa7",
      0x00000407 => "\xba",
      0x00000408 => "\xb7",
      0x00000409 => "\xbc",
      0x0000040a => "\xbe",
      0x0000040b => "\xcb",
      0x0000040c => "\xcd",
      0x0000040e => "\xd8",
      0x0000040f => "\xda",
      0x00000410 => "\x80",
      0x00000411 => "\x81",
      0x00000412 => "\x82",
      0x00000413 => "\x83",
      0x00000414 => "\x84",
      0x00000415 => "\x85",
      0x00000416 => "\x86",
      0x00000417 => "\x87",
      0x00000418 => "\x88",
      0x00000419 => "\x89",
      0x0000041a => "\x8a",
      0x0000041b => "\x8b",
      0x0000041c => "\x8c",
      0x0000041d => "\x8d",
      0x0000041e => "\x8e",
      0x0000041f => "\x8f",
      0x00000420 => "\x90",
      0x00000421 => "\x91",
      0x00000422 => "\x92",
      0x00000423 => "\x93",
      0x00000424 => "\x94",
      0x00000425 => "\x95",
      0x00000426 => "\x96",
      0x00000427 => "\x97",
      0x00000428 => "\x98",
      0x00000429 => "\x99",
      0x0000042a => "\x9a",
      0x0000042b => "\x9b",
      0x0000042c => "\x9c",
      0x0000042d => "\x9d",
      0x0000042e => "\x9e",
      0x0000042f => "\x9f",
      0x00000430 => "\xe0",
      0x00000431 => "\xe1",
      0x00000432 => "\xe2",
      0x00000433 => "\xe3",
      0x00000434 => "\xe4",
      0x00000435 => "\xe5",
      0x00000436 => "\xe6",
      0x00000437 => "\xe7",
      0x00000438 => "\xe8",
      0x00000439 => "\xe9",
      0x0000043a => "\xea",
      0x0000043b => "\xeb",
      0x0000043c => "\xec",
      0x0000043d => "\xed",
      0x0000043e => "\xee",
      0x0000043f => "\xef",
      0x00000440 => "\xf0",
      0x00000441 => "\xf1",
      0x00000442 => "\xf2",
      0x00000443 => "\xf3",
      0x00000444 => "\xf4",
      0x00000445 => "\xf5",
      0x00000446 => "\xf6",
      0x00000447 => "\xf7",
      0x00000448 => "\xf8",
      0x00000449 => "\xf9",
      0x0000044a => "\xfa",
      0x0000044b => "\xfb",
      0x0000044c => "\xfc",
      0x0000044d => "\xfd",
      0x0000044e => "\xfe",
      0x0000044f => "\xdf",
      0x00000451 => "\xde",
      0x00000452 => "\xac",
      0x00000453 => "\xaf",
      0x00000454 => "\xb9",
      0x00000455 => "\xcf",
      0x00000456 => "\xb4",
      0x00000457 => "\xbb",
      0x00000458 => "\xc0",
      0x00000459 => "\xbd",
      0x0000045a => "\xbf",
      0x0000045b => "\xcc",
      0x0000045c => "\xce",
      0x0000045e => "\xd9",
      0x0000045f => "\xdb",
      0x00002013 => "\xd0",
      0x00002014 => "\xd1",
      0x00002018 => "\xd4",
      0x00002019 => "\xd5",
      0x0000201c => "\xd2",
      0x0000201d => "\xd3",
      0x0000201e => "\xd7",
      0x00002020 => "\xa0",
      0x00002022 => "\xa5",
      0x00002026 => "\xc9",
      0x00002116 => "\xdc",
      0x00002122 => "\xaa",
      0x00002202 => "\xb6",
      0x00002206 => "\xc6",
      0x0000221a => "\xc3",
      0x0000221e => "\xb0",
      0x00002248 => "\xc5",
      0x00002260 => "\xad",
      0x00002264 => "\xb2",
      0x00002265 => "\xb3",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::MACCYRILLIC - Conversion routines for MACCYRILLIC
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for MACCYRILLIC.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
  
   This charmap has been generated automatically from GNU libiconv
   conversions.
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000410 | CYRILLIC CAPITAL LETTER A
      81 |  00000411 | CYRILLIC CAPITAL LETTER BE
      82 |  00000412 | CYRILLIC CAPITAL LETTER VE
      83 |  00000413 | CYRILLIC CAPITAL LETTER GHE
      84 |  00000414 | CYRILLIC CAPITAL LETTER DE
      85 |  00000415 | CYRILLIC CAPITAL LETTER IE
      86 |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      87 |  00000417 | CYRILLIC CAPITAL LETTER ZE
      88 |  00000418 | CYRILLIC CAPITAL LETTER I
      89 |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      8A |  0000041A | CYRILLIC CAPITAL LETTER KA
      8B |  0000041B | CYRILLIC CAPITAL LETTER EL
      8C |  0000041C | CYRILLIC CAPITAL LETTER EM
      8D |  0000041D | CYRILLIC CAPITAL LETTER EN
      8E |  0000041E | CYRILLIC CAPITAL LETTER O
      8F |  0000041F | CYRILLIC CAPITAL LETTER PE
      90 |  00000420 | CYRILLIC CAPITAL LETTER ER
      91 |  00000421 | CYRILLIC CAPITAL LETTER ES
      92 |  00000422 | CYRILLIC CAPITAL LETTER TE
      93 |  00000423 | CYRILLIC CAPITAL LETTER U
      94 |  00000424 | CYRILLIC CAPITAL LETTER EF
      95 |  00000425 | CYRILLIC CAPITAL LETTER HA
      96 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      97 |  00000427 | CYRILLIC CAPITAL LETTER CHE
      98 |  00000428 | CYRILLIC CAPITAL LETTER SHA
      99 |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      9A |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
      9B |  0000042B | CYRILLIC CAPITAL LETTER YERU
      9C |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      9D |  0000042D | CYRILLIC CAPITAL LETTER E
      9E |  0000042E | CYRILLIC CAPITAL LETTER YU
      9F |  0000042F | CYRILLIC CAPITAL LETTER YA
      A0 |  00002020 | DAGGER
      A1 |  000000B0 | DEGREE SIGN
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A7 | SECTION SIGN
      A5 |  00002022 | BULLET
      A6 |  000000B6 | PILCROW SIGN
      A7 |  00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
      A8 |  000000AE | REGISTERED SIGN
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  00002122 | TRADE MARK SIGN
      AB |  00000402 | CYRILLIC CAPITAL LETTER DJE
      AC |  00000452 | CYRILLIC SMALL LETTER DJE
      AD |  00002260 | NOT EQUAL TO
      AE |  00000403 | CYRILLIC CAPITAL LETTER GJE
      AF |  00000453 | CYRILLIC SMALL LETTER GJE
      B0 |  0000221E | INFINITY
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  00002264 | LESS-THAN OR EQUAL TO
      B3 |  00002265 | GREATER-THAN OR EQUAL TO
      B4 |  00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
      B5 |  000000B5 | MICRO SIGN
      B6 |  00002202 | PARTIAL DIFFERENTIAL
      B7 |  00000408 | CYRILLIC CAPITAL LETTER JE
      B8 |  00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE
      B9 |  00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE
      BA |  00000407 | CYRILLIC CAPITAL LETTER YI
      BB |  00000457 | CYRILLIC SMALL LETTER YI
      BC |  00000409 | CYRILLIC CAPITAL LETTER LJE
      BD |  00000459 | CYRILLIC SMALL LETTER LJE
      BE |  0000040A | CYRILLIC CAPITAL LETTER NJE
      BF |  0000045A | CYRILLIC SMALL LETTER NJE
      C0 |  00000458 | CYRILLIC SMALL LETTER JE
      C1 |  00000405 | CYRILLIC CAPITAL LETTER DZE
      C2 |  000000AC | NOT SIGN
      C3 |  0000221A | SQUARE ROOT
      C4 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      C5 |  00002248 | ALMOST EQUAL TO
      C6 |  00002206 | INCREMENT
      C7 |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      C8 |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      C9 |  00002026 | HORIZONTAL ELLIPSIS
      CA |  000000A0 | NO-BREAK SPACE
      CB |  0000040B | CYRILLIC CAPITAL LETTER TSHE
      CC |  0000045B | CYRILLIC SMALL LETTER TSHE
      CD |  0000040C | CYRILLIC CAPITAL LETTER KJE
      CE |  0000045C | CYRILLIC SMALL LETTER KJE
      CF |  00000455 | CYRILLIC SMALL LETTER DZE
      D0 |  00002013 | EN DASH
      D1 |  00002014 | EM DASH
      D2 |  0000201C | LEFT DOUBLE QUOTATION MARK
      D3 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      D4 |  00002018 | LEFT SINGLE QUOTATION MARK
      D5 |  00002019 | RIGHT SINGLE QUOTATION MARK
      D6 |  000000F7 | DIVISION SIGN
      D7 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      D8 |  0000040E | CYRILLIC CAPITAL LETTER SHORT U
      D9 |  0000045E | CYRILLIC SMALL LETTER SHORT U
      DA |  0000040F | CYRILLIC CAPITAL LETTER DZHE
      DB |  0000045F | CYRILLIC SMALL LETTER DZHE
      DC |  00002116 | NUMERO SIGN
      DD |  00000401 | CYRILLIC CAPITAL LETTER IO
      DE |  00000451 | CYRILLIC SMALL LETTER IO
      DF |  0000044F | CYRILLIC SMALL LETTER YA
      E0 |  00000430 | CYRILLIC SMALL LETTER A
      E1 |  00000431 | CYRILLIC SMALL LETTER BE
      E2 |  00000432 | CYRILLIC SMALL LETTER VE
      E3 |  00000433 | CYRILLIC SMALL LETTER GHE
      E4 |  00000434 | CYRILLIC SMALL LETTER DE
      E5 |  00000435 | CYRILLIC SMALL LETTER IE
      E6 |  00000436 | CYRILLIC SMALL LETTER ZHE
      E7 |  00000437 | CYRILLIC SMALL LETTER ZE
      E8 |  00000438 | CYRILLIC SMALL LETTER I
      E9 |  00000439 | CYRILLIC SMALL LETTER SHORT I
      EA |  0000043A | CYRILLIC SMALL LETTER KA
      EB |  0000043B | CYRILLIC SMALL LETTER EL
      EC |  0000043C | CYRILLIC SMALL LETTER EM
      ED |  0000043D | CYRILLIC SMALL LETTER EN
      EE |  0000043E | CYRILLIC SMALL LETTER O
      EF |  0000043F | CYRILLIC SMALL LETTER PE
      F0 |  00000440 | CYRILLIC SMALL LETTER ER
      F1 |  00000441 | CYRILLIC SMALL LETTER ES
      F2 |  00000442 | CYRILLIC SMALL LETTER TE
      F3 |  00000443 | CYRILLIC SMALL LETTER U
      F4 |  00000444 | CYRILLIC SMALL LETTER EF
      F5 |  00000445 | CYRILLIC SMALL LETTER HA
      F6 |  00000446 | CYRILLIC SMALL LETTER TSE
      F7 |  00000447 | CYRILLIC SMALL LETTER CHE
      F8 |  00000448 | CYRILLIC SMALL LETTER SHA
      F9 |  00000449 | CYRILLIC SMALL LETTER SHCHA
      FA |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      FB |  0000044B | CYRILLIC SMALL LETTER YERU
      FC |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      FD |  0000044D | CYRILLIC SMALL LETTER E
      FE |  0000044E | CYRILLIC SMALL LETTER YU
      FF |  000000A4 | CURRENCY SIGN
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_MACCYRILLIC

    $main::fatpacked{"Locale/RecodeData/MACGREEK.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_MACGREEK';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for MACGREEK.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::MACGREEK;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c4,
      0x00b9,
      0x00b2,
      0x00c9,
      0x00b3,
      0x00d6,
      0x00dc,
      0x0385,
      0x00e0,
      0x00e2,
      0x00e4,
      0x0384,
      0x00a8,
      0x00e7,
      0x00e9,
      0x00e8,
      0x00ea,
      0x00eb,
      0x00a3,
      0x2122,
      0x00ee,
      0x00ef,
      0x2022,
      0x00bd,
      0x2030,
      0x00f4,
      0x00f6,
      0x00a6,
      0x00ad,
      0x00f9,
      0x00fb,
      0x00fc,
      0x2020,
      0x0393,
      0x0394,
      0x0398,
      0x039b,
      0x039e,
      0x03a0,
      0x00df,
      0x00ae,
      0x00a9,
      0x03a3,
      0x03aa,
      0x00a7,
      0x2260,
      0x00b0,
      0x0387,
      0x0391,
      0x00b1,
      0x2264,
      0x2265,
      0x00a5,
      0x0392,
      0x0395,
      0x0396,
      0x0397,
      0x0399,
      0x039a,
      0x039c,
      0x03a6,
      0x03ab,
      0x03a8,
      0x03a9,
      0x03ac,
      0x039d,
      0x00ac,
      0x039f,
      0x03a1,
      0x2248,
      0x03a4,
      0x00ab,
      0x00bb,
      0x2026,
      0x00a0,
      0x03a5,
      0x03a7,
      0x0386,
      0x0388,
      0x0153,
      0x2013,
      0x2015,
      0x201c,
      0x201d,
      0x2018,
      0x2019,
      0x00f7,
      0x0389,
      0x038a,
      0x038c,
      0x038e,
      0x03ad,
      0x03ae,
      0x03af,
      0x03cc,
      0x038f,
      0x03cd,
      0x03b1,
      0x03b2,
      0x03c8,
      0x03b4,
      0x03b5,
      0x03c6,
      0x03b3,
      0x03b7,
      0x03b9,
      0x03be,
      0x03ba,
      0x03bb,
      0x03bc,
      0x03bd,
      0x03bf,
      0x03c0,
      0x03ce,
      0x03c1,
      0x03c3,
      0x03c4,
      0x03b8,
      0x03c9,
      0x03c2,
      0x03c7,
      0x03c5,
      0x03b6,
      0x03ca,
      0x03cb,
      0x0390,
      0x03b0,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x84",
      "\xc2\xb9",
      "\xc2\xb2",
      "\xc3\x89",
      "\xc2\xb3",
      "\xc3\x96",
      "\xc3\x9c",
      "\xce\x85",
      "\xc3\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xce\x84",
      "\xc2\xa8",
      "\xc3\xa7",
      "\xc3\xa9",
      "\xc3\xa8",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc2\xa3",
      "\xe2\x84\xa2",
      "\xc3\xae",
      "\xc3\xaf",
      "\xe2\x80\xa2",
      "\xc2\xbd",
      "\xe2\x80\xb0",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc2\xa6",
      "\xc2\xad",
      "\xc3\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xe2\x80\xa0",
      "\xce\x93",
      "\xce\x94",
      "\xce\x98",
      "\xce\x9b",
      "\xce\x9e",
      "\xce\xa0",
      "\xc3\x9f",
      "\xc2\xae",
      "\xc2\xa9",
      "\xce\xa3",
      "\xce\xaa",
      "\xc2\xa7",
      "\xe2\x89\xa0",
      "\xc2\xb0",
      "\xce\x87",
      "\xce\x91",
      "\xc2\xb1",
      "\xe2\x89\xa4",
      "\xe2\x89\xa5",
      "\xc2\xa5",
      "\xce\x92",
      "\xce\x95",
      "\xce\x96",
      "\xce\x97",
      "\xce\x99",
      "\xce\x9a",
      "\xce\x9c",
      "\xce\xa6",
      "\xce\xab",
      "\xce\xa8",
      "\xce\xa9",
      "\xce\xac",
      "\xce\x9d",
      "\xc2\xac",
      "\xce\x9f",
      "\xce\xa1",
      "\xe2\x89\x88",
      "\xce\xa4",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x80\xa6",
      "\xc2\xa0",
      "\xce\xa5",
      "\xce\xa7",
      "\xce\x86",
      "\xce\x88",
      "\xc5\x93",
      "\xe2\x80\x93",
      "\xe2\x80\x95",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xc3\xb7",
      "\xce\x89",
      "\xce\x8a",
      "\xce\x8c",
      "\xce\x8e",
      "\xce\xad",
      "\xce\xae",
      "\xce\xaf",
      "\xcf\x8c",
      "\xce\x8f",
      "\xcf\x8d",
      "\xce\xb1",
      "\xce\xb2",
      "\xcf\x88",
      "\xce\xb4",
      "\xce\xb5",
      "\xcf\x86",
      "\xce\xb3",
      "\xce\xb7",
      "\xce\xb9",
      "\xce\xbe",
      "\xce\xba",
      "\xce\xbb",
      "\xce\xbc",
      "\xce\xbd",
      "\xce\xbf",
      "\xcf\x80",
      "\xcf\x8e",
      "\xcf\x81",
      "\xcf\x83",
      "\xcf\x84",
      "\xce\xb8",
      "\xcf\x89",
      "\xcf\x82",
      "\xcf\x87",
      "\xcf\x85",
      "\xce\xb6",
      "\xcf\x8a",
      "\xcf\x8b",
      "\xce\x90",
      "\xce\xb0",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xca",
      0x000000a3 => "\x92",
      0x000000a5 => "\xb4",
      0x000000a6 => "\x9b",
      0x000000a7 => "\xac",
      0x000000a8 => "\x8c",
      0x000000a9 => "\xa9",
      0x000000ab => "\xc7",
      0x000000ac => "\xc2",
      0x000000ad => "\x9c",
      0x000000ae => "\xa8",
      0x000000b0 => "\xae",
      0x000000b1 => "\xb1",
      0x000000b2 => "\x82",
      0x000000b3 => "\x84",
      0x000000b9 => "\x81",
      0x000000bb => "\xc8",
      0x000000bd => "\x97",
      0x000000c4 => "\x80",
      0x000000c9 => "\x83",
      0x000000d6 => "\x85",
      0x000000dc => "\x86",
      0x000000df => "\xa7",
      0x000000e0 => "\x88",
      0x000000e2 => "\x89",
      0x000000e4 => "\x8a",
      0x000000e7 => "\x8d",
      0x000000e8 => "\x8f",
      0x000000e9 => "\x8e",
      0x000000ea => "\x90",
      0x000000eb => "\x91",
      0x000000ee => "\x94",
      0x000000ef => "\x95",
      0x000000f4 => "\x99",
      0x000000f6 => "\x9a",
      0x000000f7 => "\xd6",
      0x000000f9 => "\x9d",
      0x000000fb => "\x9e",
      0x000000fc => "\x9f",
      0x00000153 => "\xcf",
      0x00000384 => "\x8b",
      0x00000385 => "\x87",
      0x00000386 => "\xcd",
      0x00000387 => "\xaf",
      0x00000388 => "\xce",
      0x00000389 => "\xd7",
      0x0000038a => "\xd8",
      0x0000038c => "\xd9",
      0x0000038e => "\xda",
      0x0000038f => "\xdf",
      0x00000390 => "\xfd",
      0x00000391 => "\xb0",
      0x00000392 => "\xb5",
      0x00000393 => "\xa1",
      0x00000394 => "\xa2",
      0x00000395 => "\xb6",
      0x00000396 => "\xb7",
      0x00000397 => "\xb8",
      0x00000398 => "\xa3",
      0x00000399 => "\xb9",
      0x0000039a => "\xba",
      0x0000039b => "\xa4",
      0x0000039c => "\xbb",
      0x0000039d => "\xc1",
      0x0000039e => "\xa5",
      0x0000039f => "\xc3",
      0x000003a0 => "\xa6",
      0x000003a1 => "\xc4",
      0x000003a3 => "\xaa",
      0x000003a4 => "\xc6",
      0x000003a5 => "\xcb",
      0x000003a6 => "\xbc",
      0x000003a7 => "\xcc",
      0x000003a8 => "\xbe",
      0x000003a9 => "\xbf",
      0x000003aa => "\xab",
      0x000003ab => "\xbd",
      0x000003ac => "\xc0",
      0x000003ad => "\xdb",
      0x000003ae => "\xdc",
      0x000003af => "\xdd",
      0x000003b0 => "\xfe",
      0x000003b1 => "\xe1",
      0x000003b2 => "\xe2",
      0x000003b3 => "\xe7",
      0x000003b4 => "\xe4",
      0x000003b5 => "\xe5",
      0x000003b6 => "\xfa",
      0x000003b7 => "\xe8",
      0x000003b8 => "\xf5",
      0x000003b9 => "\xe9",
      0x000003ba => "\xeb",
      0x000003bb => "\xec",
      0x000003bc => "\xed",
      0x000003bd => "\xee",
      0x000003be => "\xea",
      0x000003bf => "\xef",
      0x000003c0 => "\xf0",
      0x000003c1 => "\xf2",
      0x000003c2 => "\xf7",
      0x000003c3 => "\xf3",
      0x000003c4 => "\xf4",
      0x000003c5 => "\xf9",
      0x000003c6 => "\xe6",
      0x000003c7 => "\xf8",
      0x000003c8 => "\xe3",
      0x000003c9 => "\xf6",
      0x000003ca => "\xfb",
      0x000003cb => "\xfc",
      0x000003cc => "\xde",
      0x000003cd => "\xe0",
      0x000003ce => "\xf1",
      0x00002013 => "\xd0",
      0x00002015 => "\xd1",
      0x00002018 => "\xd4",
      0x00002019 => "\xd5",
      0x0000201c => "\xd2",
      0x0000201d => "\xd3",
      0x00002020 => "\xa0",
      0x00002022 => "\x96",
      0x00002026 => "\xc9",
      0x00002030 => "\x98",
      0x00002122 => "\x93",
      0x00002248 => "\xc5",
      0x00002260 => "\xad",
      0x00002264 => "\xb2",
      0x00002265 => "\xb3",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::MACGREEK - Conversion routines for MACGREEK
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for MACGREEK.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
  
   This charmap has been generated automatically from GNU libiconv
   conversions.
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      81 |  000000B9 | SUPERSCRIPT ONE
      82 |  000000B2 | SUPERSCRIPT TWO
      83 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      84 |  000000B3 | SUPERSCRIPT THREE
      85 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      86 |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      87 |  00000385 | GREEK DIALYTIKA TONOS
      88 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      89 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      8A |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      8B |  00000384 | GREEK TONOS
      8C |  000000A8 | DIAERESIS
      8D |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      8E |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      8F |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      90 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      91 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      92 |  000000A3 | POUND SIGN
      93 |  00002122 | TRADE MARK SIGN
      94 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      95 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      96 |  00002022 | BULLET
      97 |  000000BD | VULGAR FRACTION ONE HALF
      98 |  00002030 | PER MILLE SIGN
      99 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      9A |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      9B |  000000A6 | BROKEN BAR
      9C |  000000AD | SOFT HYPHEN
      9D |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      9E |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      9F |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      A0 |  00002020 | DAGGER
      A1 |  00000393 | GREEK CAPITAL LETTER GAMMA
      A2 |  00000394 | GREEK CAPITAL LETTER DELTA
      A3 |  00000398 | GREEK CAPITAL LETTER THETA
      A4 |  0000039B | GREEK CAPITAL LETTER LAMDA
      A5 |  0000039E | GREEK CAPITAL LETTER XI
      A6 |  000003A0 | GREEK CAPITAL LETTER PI
      A7 |  000000DF | LATIN SMALL LETTER SHARP S
      A8 |  000000AE | REGISTERED SIGN
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  000003A3 | GREEK CAPITAL LETTER SIGMA
      AB |  000003AA | GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
      AC |  000000A7 | SECTION SIGN
      AD |  00002260 | NOT EQUAL TO
      AE |  000000B0 | DEGREE SIGN
      AF |  00000387 | GREEK ANO TELEIA
      B0 |  00000391 | GREEK CAPITAL LETTER ALPHA
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  00002264 | LESS-THAN OR EQUAL TO
      B3 |  00002265 | GREATER-THAN OR EQUAL TO
      B4 |  000000A5 | YEN SIGN
      B5 |  00000392 | GREEK CAPITAL LETTER BETA
      B6 |  00000395 | GREEK CAPITAL LETTER EPSILON
      B7 |  00000396 | GREEK CAPITAL LETTER ZETA
      B8 |  00000397 | GREEK CAPITAL LETTER ETA
      B9 |  00000399 | GREEK CAPITAL LETTER IOTA
      BA |  0000039A | GREEK CAPITAL LETTER KAPPA
      BB |  0000039C | GREEK CAPITAL LETTER MU
      BC |  000003A6 | GREEK CAPITAL LETTER PHI
      BD |  000003AB | GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
      BE |  000003A8 | GREEK CAPITAL LETTER PSI
      BF |  000003A9 | GREEK CAPITAL LETTER OMEGA
      C0 |  000003AC | GREEK SMALL LETTER ALPHA WITH TONOS
      C1 |  0000039D | GREEK CAPITAL LETTER NU
      C2 |  000000AC | NOT SIGN
      C3 |  0000039F | GREEK CAPITAL LETTER OMICRON
      C4 |  000003A1 | GREEK CAPITAL LETTER RHO
      C5 |  00002248 | ALMOST EQUAL TO
      C6 |  000003A4 | GREEK CAPITAL LETTER TAU
      C7 |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      C8 |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      C9 |  00002026 | HORIZONTAL ELLIPSIS
      CA |  000000A0 | NO-BREAK SPACE
      CB |  000003A5 | GREEK CAPITAL LETTER UPSILON
      CC |  000003A7 | GREEK CAPITAL LETTER CHI
      CD |  00000386 | GREEK CAPITAL LETTER ALPHA WITH TONOS
      CE |  00000388 | GREEK CAPITAL LETTER EPSILON WITH TONOS
      CF |  00000153 | LATIN SMALL LIGATURE OE
      D0 |  00002013 | EN DASH
      D1 |  00002015 | HORIZONTAL BAR
      D2 |  0000201C | LEFT DOUBLE QUOTATION MARK
      D3 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      D4 |  00002018 | LEFT SINGLE QUOTATION MARK
      D5 |  00002019 | RIGHT SINGLE QUOTATION MARK
      D6 |  000000F7 | DIVISION SIGN
      D7 |  00000389 | GREEK CAPITAL LETTER ETA WITH TONOS
      D8 |  0000038A | GREEK CAPITAL LETTER IOTA WITH TONOS
      D9 |  0000038C | GREEK CAPITAL LETTER OMICRON WITH TONOS
      DA |  0000038E | GREEK CAPITAL LETTER UPSILON WITH TONOS
      DB |  000003AD | GREEK SMALL LETTER EPSILON WITH TONOS
      DC |  000003AE | GREEK SMALL LETTER ETA WITH TONOS
      DD |  000003AF | GREEK SMALL LETTER IOTA WITH TONOS
      DE |  000003CC | GREEK SMALL LETTER OMICRON WITH TONOS
      DF |  0000038F | GREEK CAPITAL LETTER OMEGA WITH TONOS
      E0 |  000003CD | GREEK SMALL LETTER UPSILON WITH TONOS
      E1 |  000003B1 | GREEK SMALL LETTER ALPHA
      E2 |  000003B2 | GREEK SMALL LETTER BETA
      E3 |  000003C8 | GREEK SMALL LETTER PSI
      E4 |  000003B4 | GREEK SMALL LETTER DELTA
      E5 |  000003B5 | GREEK SMALL LETTER EPSILON
      E6 |  000003C6 | GREEK SMALL LETTER PHI
      E7 |  000003B3 | GREEK SMALL LETTER GAMMA
      E8 |  000003B7 | GREEK SMALL LETTER ETA
      E9 |  000003B9 | GREEK SMALL LETTER IOTA
      EA |  000003BE | GREEK SMALL LETTER XI
      EB |  000003BA | GREEK SMALL LETTER KAPPA
      EC |  000003BB | GREEK SMALL LETTER LAMDA
      ED |  000003BC | GREEK SMALL LETTER MU
      EE |  000003BD | GREEK SMALL LETTER NU
      EF |  000003BF | GREEK SMALL LETTER OMICRON
      F0 |  000003C0 | GREEK SMALL LETTER PI
      F1 |  000003CE | GREEK SMALL LETTER OMEGA WITH TONOS
      F2 |  000003C1 | GREEK SMALL LETTER RHO
      F3 |  000003C3 | GREEK SMALL LETTER SIGMA
      F4 |  000003C4 | GREEK SMALL LETTER TAU
      F5 |  000003B8 | GREEK SMALL LETTER THETA
      F6 |  000003C9 | GREEK SMALL LETTER OMEGA
      F7 |  000003C2 | GREEK SMALL LETTER FINAL SIGMA
      F8 |  000003C7 | GREEK SMALL LETTER CHI
      F9 |  000003C5 | GREEK SMALL LETTER UPSILON
      FA |  000003B6 | GREEK SMALL LETTER ZETA
      FB |  000003CA | GREEK SMALL LETTER IOTA WITH DIALYTIKA
      FC |  000003CB | GREEK SMALL LETTER UPSILON WITH DIALYTIKA
      FD |  00000390 | GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
      FE |  000003B0 | GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_MACGREEK

    $main::fatpacked{"Locale/RecodeData/MACHEBREW.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_MACHEBREW';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for MACHEBREW.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::MACHEBREW;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c4,
      0xfb1f,
      0x00c7,
      0x00c9,
      0x00d1,
      0x00d6,
      0x00dc,
      0x00e1,
      0x00e0,
      0x00e2,
      0x00e4,
      0x00e3,
      0x00e5,
      0x00e7,
      0x00e9,
      0x00e8,
      0x00ea,
      0x00eb,
      0x00ed,
      0x00ec,
      0x00ee,
      0x00ef,
      0x00f1,
      0x00f3,
      0x00f2,
      0x00f4,
      0x00f6,
      0x00f5,
      0x00fa,
      0x00f9,
      0x00fb,
      0x00fc,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x20aa,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x201e,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x05bc,
      0xfb4b,
      0xfb35,
      0x2026,
      0x00a0,
      0x05b8,
      0x05b7,
      0x05b5,
      0x05b6,
      0x05b4,
      0x2013,
      0x2014,
      0x201c,
      0x201d,
      0x2018,
      0x2019,
      0xfb2a,
      0xfb2b,
      0x05bf,
      0x05b0,
      0x05b2,
      0x05b1,
      0x05bb,
      0x05b9,
      0xfffd,
      0x05b3,
      0x05d0,
      0x05d1,
      0x05d2,
      0x05d3,
      0x05d4,
      0x05d5,
      0x05d6,
      0x05d7,
      0x05d8,
      0x05d9,
      0x05da,
      0x05db,
      0x05dc,
      0x05dd,
      0x05de,
      0x05df,
      0x05e0,
      0x05e1,
      0x05e2,
      0x05e3,
      0x05e4,
      0x05e5,
      0x05e6,
      0x05e7,
      0x05e8,
      0x05e9,
      0x05ea,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x84",
      "\xef\xac\x9f",
      "\xc3\x87",
      "\xc3\x89",
      "\xc3\x91",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc3\xa1",
      "\xc3\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa3",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xa9",
      "\xc3\xa8",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xad",
      "\xc3\xac",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb1",
      "\xc3\xb3",
      "\xc3\xb2",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb5",
      "\xc3\xba",
      "\xc3\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x82\xaa",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x80\x9e",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xd6\xbc",
      "\xef\xad\x8b",
      "\xef\xac\xb5",
      "\xe2\x80\xa6",
      "\xc2\xa0",
      "\xd6\xb8",
      "\xd6\xb7",
      "\xd6\xb5",
      "\xd6\xb6",
      "\xd6\xb4",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xef\xac\xaa",
      "\xef\xac\xab",
      "\xd6\xbf",
      "\xd6\xb0",
      "\xd6\xb2",
      "\xd6\xb1",
      "\xd6\xbb",
      "\xd6\xb9",
      "\xef\xbf\xbd",
      "\xd6\xb3",
      "\xd7\x90",
      "\xd7\x91",
      "\xd7\x92",
      "\xd7\x93",
      "\xd7\x94",
      "\xd7\x95",
      "\xd7\x96",
      "\xd7\x97",
      "\xd7\x98",
      "\xd7\x99",
      "\xd7\x9a",
      "\xd7\x9b",
      "\xd7\x9c",
      "\xd7\x9d",
      "\xd7\x9e",
      "\xd7\x9f",
      "\xd7\xa0",
      "\xd7\xa1",
      "\xd7\xa2",
      "\xd7\xa3",
      "\xd7\xa4",
      "\xd7\xa5",
      "\xd7\xa6",
      "\xd7\xa7",
      "\xd7\xa8",
      "\xd7\xa9",
      "\xd7\xaa",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xca",
      0x000000c4 => "\x80",
      0x000000c7 => "\x82",
      0x000000c9 => "\x83",
      0x000000d1 => "\x84",
      0x000000d6 => "\x85",
      0x000000dc => "\x86",
      0x000000e0 => "\x88",
      0x000000e1 => "\x87",
      0x000000e2 => "\x89",
      0x000000e3 => "\x8b",
      0x000000e4 => "\x8a",
      0x000000e5 => "\x8c",
      0x000000e7 => "\x8d",
      0x000000e8 => "\x8f",
      0x000000e9 => "\x8e",
      0x000000ea => "\x90",
      0x000000eb => "\x91",
      0x000000ec => "\x93",
      0x000000ed => "\x92",
      0x000000ee => "\x94",
      0x000000ef => "\x95",
      0x000000f1 => "\x96",
      0x000000f2 => "\x98",
      0x000000f3 => "\x97",
      0x000000f4 => "\x99",
      0x000000f5 => "\x9b",
      0x000000f6 => "\x9a",
      0x000000f9 => "\x9d",
      0x000000fa => "\x9c",
      0x000000fb => "\x9e",
      0x000000fc => "\x9f",
      0x000005b0 => "\xd9",
      0x000005b1 => "\xdb",
      0x000005b2 => "\xda",
      0x000005b3 => "\xdf",
      0x000005b4 => "\xcf",
      0x000005b5 => "\xcd",
      0x000005b6 => "\xce",
      0x000005b7 => "\xcc",
      0x000005b8 => "\xcb",
      0x000005b9 => "\xdd",
      0x000005bb => "\xdc",
      0x000005bc => "\xc6",
      0x000005bf => "\xd8",
      0x000005d0 => "\xe0",
      0x000005d1 => "\xe1",
      0x000005d2 => "\xe2",
      0x000005d3 => "\xe3",
      0x000005d4 => "\xe4",
      0x000005d5 => "\xe5",
      0x000005d6 => "\xe6",
      0x000005d7 => "\xe7",
      0x000005d8 => "\xe8",
      0x000005d9 => "\xe9",
      0x000005da => "\xea",
      0x000005db => "\xeb",
      0x000005dc => "\xec",
      0x000005dd => "\xed",
      0x000005de => "\xee",
      0x000005df => "\xef",
      0x000005e0 => "\xf0",
      0x000005e1 => "\xf1",
      0x000005e2 => "\xf2",
      0x000005e3 => "\xf3",
      0x000005e4 => "\xf4",
      0x000005e5 => "\xf5",
      0x000005e6 => "\xf6",
      0x000005e7 => "\xf7",
      0x000005e8 => "\xf8",
      0x000005e9 => "\xf9",
      0x000005ea => "\xfa",
      0x00002013 => "\xd0",
      0x00002014 => "\xd1",
      0x00002018 => "\xd4",
      0x00002019 => "\xd5",
      0x0000201c => "\xd2",
      0x0000201d => "\xd3",
      0x0000201e => "\xc1",
      0x00002026 => "\xc9",
      0x000020aa => "\xa6",
      0x0000fb1f => "\x81",
      0x0000fb2a => "\xd6",
      0x0000fb2b => "\xd7",
      0x0000fb35 => "\xc8",
      0x0000fb4b => "\xc7",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::MACHEBREW - Conversion routines for MACHEBREW
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for MACHEBREW.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
  
   This charmap has been generated automatically from GNU libiconv
   conversions.
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      81 |  0000FB1F | HEBREW LIGATURE YIDDISH YOD YOD PATAH
      82 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      83 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      84 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      85 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      86 |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      87 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      88 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      89 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      8A |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      8B |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      8C |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      8D |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      8E |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      8F |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      90 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      91 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      92 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      93 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      94 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      95 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      96 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      97 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      98 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      99 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      9A |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      9B |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      9C |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      9D |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      9E |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      9F |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      A6 |  000020AA | NEW SHEQEL SIGN
      C1 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      C6 |  000005BC | HEBREW POINT DAGESH OR MAPIQ
      C7 |  0000FB4B | HEBREW LETTER VAV WITH HOLAM
      C8 |  0000FB35 | HEBREW LETTER VAV WITH DAGESH
      C9 |  00002026 | HORIZONTAL ELLIPSIS
      CA |  000000A0 | NO-BREAK SPACE
      CB |  000005B8 | HEBREW POINT QAMATS
      CC |  000005B7 | HEBREW POINT PATAH
      CD |  000005B5 | HEBREW POINT TSERE
      CE |  000005B6 | HEBREW POINT SEGOL
      CF |  000005B4 | HEBREW POINT HIRIQ
      D0 |  00002013 | EN DASH
      D1 |  00002014 | EM DASH
      D2 |  0000201C | LEFT DOUBLE QUOTATION MARK
      D3 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      D4 |  00002018 | LEFT SINGLE QUOTATION MARK
      D5 |  00002019 | RIGHT SINGLE QUOTATION MARK
      D6 |  0000FB2A | HEBREW LETTER SHIN WITH SHIN DOT
      D7 |  0000FB2B | HEBREW LETTER SHIN WITH SIN DOT
      D8 |  000005BF | HEBREW POINT RAFE
      D9 |  000005B0 | HEBREW POINT SHEVA
      DA |  000005B2 | HEBREW POINT HATAF PATAH
      DB |  000005B1 | HEBREW POINT HATAF SEGOL
      DC |  000005BB | HEBREW POINT QUBUTS
      DD |  000005B9 | HEBREW POINT HOLAM
      DF |  000005B3 | HEBREW POINT HATAF QAMATS
      E0 |  000005D0 | HEBREW LETTER ALEF
      E1 |  000005D1 | HEBREW LETTER BET
      E2 |  000005D2 | HEBREW LETTER GIMEL
      E3 |  000005D3 | HEBREW LETTER DALET
      E4 |  000005D4 | HEBREW LETTER HE
      E5 |  000005D5 | HEBREW LETTER VAV
      E6 |  000005D6 | HEBREW LETTER ZAYIN
      E7 |  000005D7 | HEBREW LETTER HET
      E8 |  000005D8 | HEBREW LETTER TET
      E9 |  000005D9 | HEBREW LETTER YOD
      EA |  000005DA | HEBREW LETTER FINAL KAF
      EB |  000005DB | HEBREW LETTER KAF
      EC |  000005DC | HEBREW LETTER LAMED
      ED |  000005DD | HEBREW LETTER FINAL MEM
      EE |  000005DE | HEBREW LETTER MEM
      EF |  000005DF | HEBREW LETTER FINAL NUN
      F0 |  000005E0 | HEBREW LETTER NUN
      F1 |  000005E1 | HEBREW LETTER SAMEKH
      F2 |  000005E2 | HEBREW LETTER AYIN
      F3 |  000005E3 | HEBREW LETTER FINAL PE
      F4 |  000005E4 | HEBREW LETTER PE
      F5 |  000005E5 | HEBREW LETTER FINAL TSADI
      F6 |  000005E6 | HEBREW LETTER TSADI
      F7 |  000005E7 | HEBREW LETTER QOF
      F8 |  000005E8 | HEBREW LETTER RESH
      F9 |  000005E9 | HEBREW LETTER SHIN
      FA |  000005EA | HEBREW LETTER TAV
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_MACHEBREW

    $main::fatpacked{"Locale/RecodeData/MACICELAND.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_MACICELAND';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for MACICELAND.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::MACICELAND;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c4,
      0x00c5,
      0x00c7,
      0x00c9,
      0x00d1,
      0x00d6,
      0x00dc,
      0x00e1,
      0x00e0,
      0x00e2,
      0x00e4,
      0x00e3,
      0x00e5,
      0x00e7,
      0x00e9,
      0x00e8,
      0x00ea,
      0x00eb,
      0x00ed,
      0x00ec,
      0x00ee,
      0x00ef,
      0x00f1,
      0x00f3,
      0x00f2,
      0x00f4,
      0x00f6,
      0x00f5,
      0x00fa,
      0x00f9,
      0x00fb,
      0x00fc,
      0x00dd,
      0x00b0,
      0x00a2,
      0x00a3,
      0x00a7,
      0x2022,
      0x00b6,
      0x00df,
      0x00ae,
      0x00a9,
      0x2122,
      0x00b4,
      0x00a8,
      0x2260,
      0x00c6,
      0x00d8,
      0x221e,
      0x00b1,
      0x2264,
      0x2265,
      0x00a5,
      0x00b5,
      0x2202,
      0x2211,
      0x220f,
      0x03c0,
      0x222b,
      0x00aa,
      0x00ba,
      0x2126,
      0x00e6,
      0x00f8,
      0x00bf,
      0x00a1,
      0x00ac,
      0x221a,
      0x0192,
      0x2248,
      0x2206,
      0x00ab,
      0x00bb,
      0x2026,
      0x00a0,
      0x00c0,
      0x00c3,
      0x00d5,
      0x0152,
      0x0153,
      0x2013,
      0x2014,
      0x201c,
      0x201d,
      0x2018,
      0x2019,
      0x00f7,
      0x25ca,
      0x00ff,
      0x0178,
      0x2044,
      0x00a4,
      0x00d0,
      0x00f0,
      0x00de,
      0x00fe,
      0x00fd,
      0x00b7,
      0x201a,
      0x201e,
      0x2030,
      0x00c2,
      0x00ca,
      0x00c1,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x00d3,
      0x00d4,
      0xfffd,
      0x00d2,
      0x00da,
      0x00db,
      0x00d9,
      0x0131,
      0x02c6,
      0x02dc,
      0x00af,
      0x02d8,
      0x02d9,
      0x02da,
      0x00b8,
      0x02dd,
      0x02db,
      0x02c7,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x89",
      "\xc3\x91",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc3\xa1",
      "\xc3\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa3",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xa9",
      "\xc3\xa8",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xad",
      "\xc3\xac",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb1",
      "\xc3\xb3",
      "\xc3\xb2",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb5",
      "\xc3\xba",
      "\xc3\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\x9d",
      "\xc2\xb0",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa7",
      "\xe2\x80\xa2",
      "\xc2\xb6",
      "\xc3\x9f",
      "\xc2\xae",
      "\xc2\xa9",
      "\xe2\x84\xa2",
      "\xc2\xb4",
      "\xc2\xa8",
      "\xe2\x89\xa0",
      "\xc3\x86",
      "\xc3\x98",
      "\xe2\x88\x9e",
      "\xc2\xb1",
      "\xe2\x89\xa4",
      "\xe2\x89\xa5",
      "\xc2\xa5",
      "\xc2\xb5",
      "\xe2\x88\x82",
      "\xe2\x88\x91",
      "\xe2\x88\x8f",
      "\xcf\x80",
      "\xe2\x88\xab",
      "\xc2\xaa",
      "\xc2\xba",
      "\xe2\x84\xa6",
      "\xc3\xa6",
      "\xc3\xb8",
      "\xc2\xbf",
      "\xc2\xa1",
      "\xc2\xac",
      "\xe2\x88\x9a",
      "\xc6\x92",
      "\xe2\x89\x88",
      "\xe2\x88\x86",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x80\xa6",
      "\xc2\xa0",
      "\xc3\x80",
      "\xc3\x83",
      "\xc3\x95",
      "\xc5\x92",
      "\xc5\x93",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xc3\xb7",
      "\xe2\x97\x8a",
      "\xc3\xbf",
      "\xc5\xb8",
      "\xe2\x81\x84",
      "\xc2\xa4",
      "\xc3\x90",
      "\xc3\xb0",
      "\xc3\x9e",
      "\xc3\xbe",
      "\xc3\xbd",
      "\xc2\xb7",
      "\xe2\x80\x9a",
      "\xe2\x80\x9e",
      "\xe2\x80\xb0",
      "\xc3\x82",
      "\xc3\x8a",
      "\xc3\x81",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\xc3\x93",
      "\xc3\x94",
      "\xef\xbf\xbd",
      "\xc3\x92",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x99",
      "\xc4\xb1",
      "\xcb\x86",
      "\xcb\x9c",
      "\xc2\xaf",
      "\xcb\x98",
      "\xcb\x99",
      "\xcb\x9a",
      "\xc2\xb8",
      "\xcb\x9d",
      "\xcb\x9b",
      "\xcb\x87",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xca",
      0x000000a1 => "\xc1",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xdb",
      0x000000a5 => "\xb4",
      0x000000a7 => "\xa4",
      0x000000a8 => "\xac",
      0x000000a9 => "\xa9",
      0x000000aa => "\xbb",
      0x000000ab => "\xc7",
      0x000000ac => "\xc2",
      0x000000ae => "\xa8",
      0x000000af => "\xf8",
      0x000000b0 => "\xa1",
      0x000000b1 => "\xb1",
      0x000000b4 => "\xab",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xa6",
      0x000000b7 => "\xe1",
      0x000000b8 => "\xfc",
      0x000000ba => "\xbc",
      0x000000bb => "\xc8",
      0x000000bf => "\xc0",
      0x000000c0 => "\xcb",
      0x000000c1 => "\xe7",
      0x000000c2 => "\xe5",
      0x000000c3 => "\xcc",
      0x000000c4 => "\x80",
      0x000000c5 => "\x81",
      0x000000c6 => "\xae",
      0x000000c7 => "\x82",
      0x000000c8 => "\xe9",
      0x000000c9 => "\x83",
      0x000000ca => "\xe6",
      0x000000cb => "\xe8",
      0x000000cc => "\xed",
      0x000000cd => "\xea",
      0x000000ce => "\xeb",
      0x000000cf => "\xec",
      0x000000d0 => "\xdc",
      0x000000d1 => "\x84",
      0x000000d2 => "\xf1",
      0x000000d3 => "\xee",
      0x000000d4 => "\xef",
      0x000000d5 => "\xcd",
      0x000000d6 => "\x85",
      0x000000d8 => "\xaf",
      0x000000d9 => "\xf4",
      0x000000da => "\xf2",
      0x000000db => "\xf3",
      0x000000dc => "\x86",
      0x000000dd => "\xa0",
      0x000000de => "\xde",
      0x000000df => "\xa7",
      0x000000e0 => "\x88",
      0x000000e1 => "\x87",
      0x000000e2 => "\x89",
      0x000000e3 => "\x8b",
      0x000000e4 => "\x8a",
      0x000000e5 => "\x8c",
      0x000000e6 => "\xbe",
      0x000000e7 => "\x8d",
      0x000000e8 => "\x8f",
      0x000000e9 => "\x8e",
      0x000000ea => "\x90",
      0x000000eb => "\x91",
      0x000000ec => "\x93",
      0x000000ed => "\x92",
      0x000000ee => "\x94",
      0x000000ef => "\x95",
      0x000000f0 => "\xdd",
      0x000000f1 => "\x96",
      0x000000f2 => "\x98",
      0x000000f3 => "\x97",
      0x000000f4 => "\x99",
      0x000000f5 => "\x9b",
      0x000000f6 => "\x9a",
      0x000000f7 => "\xd6",
      0x000000f8 => "\xbf",
      0x000000f9 => "\x9d",
      0x000000fa => "\x9c",
      0x000000fb => "\x9e",
      0x000000fc => "\x9f",
      0x000000fd => "\xe0",
      0x000000fe => "\xdf",
      0x000000ff => "\xd8",
      0x00000131 => "\xf5",
      0x00000152 => "\xce",
      0x00000153 => "\xcf",
      0x00000178 => "\xd9",
      0x00000192 => "\xc4",
      0x000002c6 => "\xf6",
      0x000002c7 => "\xff",
      0x000002d8 => "\xf9",
      0x000002d9 => "\xfa",
      0x000002da => "\xfb",
      0x000002db => "\xfe",
      0x000002dc => "\xf7",
      0x000002dd => "\xfd",
      0x000003c0 => "\xb9",
      0x00002013 => "\xd0",
      0x00002014 => "\xd1",
      0x00002018 => "\xd4",
      0x00002019 => "\xd5",
      0x0000201a => "\xe2",
      0x0000201c => "\xd2",
      0x0000201d => "\xd3",
      0x0000201e => "\xe3",
      0x00002022 => "\xa5",
      0x00002026 => "\xc9",
      0x00002030 => "\xe4",
      0x00002044 => "\xda",
      0x00002122 => "\xaa",
      0x00002126 => "\xbd",
      0x00002202 => "\xb6",
      0x00002206 => "\xc6",
      0x0000220f => "\xb8",
      0x00002211 => "\xb7",
      0x0000221a => "\xc3",
      0x0000221e => "\xb0",
      0x0000222b => "\xba",
      0x00002248 => "\xc5",
      0x00002260 => "\xad",
      0x00002264 => "\xb2",
      0x00002265 => "\xb3",
      0x000025ca => "\xd7",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::MACICELAND - Conversion routines for MACICELAND
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for MACICELAND.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
  
   This charmap has been generated automatically from GNU libiconv
   conversions.
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      81 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      82 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      83 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      84 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      85 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      86 |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      87 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      88 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      89 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      8A |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      8B |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      8C |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      8D |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      8E |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      8F |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      90 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      91 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      92 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      93 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      94 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      95 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      96 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      97 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      98 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      99 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      9A |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      9B |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      9C |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      9D |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      9E |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      9F |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      A0 |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      A1 |  000000B0 | DEGREE SIGN
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A7 | SECTION SIGN
      A5 |  00002022 | BULLET
      A6 |  000000B6 | PILCROW SIGN
      A7 |  000000DF | LATIN SMALL LETTER SHARP S
      A8 |  000000AE | REGISTERED SIGN
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  00002122 | TRADE MARK SIGN
      AB |  000000B4 | ACUTE ACCENT
      AC |  000000A8 | DIAERESIS
      AD |  00002260 | NOT EQUAL TO
      AE |  000000C6 | LATIN CAPITAL LETTER AE
      AF |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      B0 |  0000221E | INFINITY
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  00002264 | LESS-THAN OR EQUAL TO
      B3 |  00002265 | GREATER-THAN OR EQUAL TO
      B4 |  000000A5 | YEN SIGN
      B5 |  000000B5 | MICRO SIGN
      B6 |  00002202 | PARTIAL DIFFERENTIAL
      B7 |  00002211 | N-ARY SUMMATION
      B8 |  0000220F | N-ARY PRODUCT
      B9 |  000003C0 | GREEK SMALL LETTER PI
      BA |  0000222B | INTEGRAL
      BB |  000000AA | FEMININE ORDINAL INDICATOR
      BC |  000000BA | MASCULINE ORDINAL INDICATOR
      BD |  00002126 | OHM SIGN
      BE |  000000E6 | LATIN SMALL LETTER AE
      BF |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      C0 |  000000BF | INVERTED QUESTION MARK
      C1 |  000000A1 | INVERTED EXCLAMATION MARK
      C2 |  000000AC | NOT SIGN
      C3 |  0000221A | SQUARE ROOT
      C4 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      C5 |  00002248 | ALMOST EQUAL TO
      C6 |  00002206 | INCREMENT
      C7 |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      C8 |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      C9 |  00002026 | HORIZONTAL ELLIPSIS
      CA |  000000A0 | NO-BREAK SPACE
      CB |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      CC |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      CD |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      CE |  00000152 | LATIN CAPITAL LIGATURE OE
      CF |  00000153 | LATIN SMALL LIGATURE OE
      D0 |  00002013 | EN DASH
      D1 |  00002014 | EM DASH
      D2 |  0000201C | LEFT DOUBLE QUOTATION MARK
      D3 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      D4 |  00002018 | LEFT SINGLE QUOTATION MARK
      D5 |  00002019 | RIGHT SINGLE QUOTATION MARK
      D6 |  000000F7 | DIVISION SIGN
      D7 |  000025CA | LOZENGE
      D8 |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      D9 |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      DA |  00002044 | FRACTION SLASH
      DB |  000000A4 | CURRENCY SIGN
      DC |  000000D0 | LATIN CAPITAL LETTER ETH
      DD |  000000F0 | LATIN SMALL LETTER ETH
      DE |  000000DE | LATIN CAPITAL LETTER THORN
      DF |  000000FE | LATIN SMALL LETTER THORN
      E0 |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      E1 |  000000B7 | MIDDLE DOT
      E2 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      E3 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      E4 |  00002030 | PER MILLE SIGN
      E5 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      E6 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      E7 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      E8 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      E9 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      EA |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      EB |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      EC |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      ED |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      F1 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      F2 |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      F3 |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      F4 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      F5 |  00000131 | LATIN SMALL LETTER DOTLESS I
      F6 |  000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT
      F7 |  000002DC | SMALL TILDE
      F8 |  000000AF | MACRON
      F9 |  000002D8 | BREVE
      FA |  000002D9 | DOT ABOVE
      FB |  000002DA | RING ABOVE
      FC |  000000B8 | CEDILLA
      FD |  000002DD | DOUBLE ACUTE ACCENT
      FE |  000002DB | OGONEK
      FF |  000002C7 | CARON
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_MACICELAND

    $main::fatpacked{"Locale/RecodeData/MACINTOSH.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_MACINTOSH';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for MACINTOSH.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::MACINTOSH;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c4,
      0x00c5,
      0x00c7,
      0x00c9,
      0x00d1,
      0x00d6,
      0x00dc,
      0x00e1,
      0x00e0,
      0x00e2,
      0x00e4,
      0x00e3,
      0x00e5,
      0x00e7,
      0x00e9,
      0x00e8,
      0x00ea,
      0x00eb,
      0x00ed,
      0x00ec,
      0x00ee,
      0x00ef,
      0x00f1,
      0x00f3,
      0x00f2,
      0x00f4,
      0x00f6,
      0x00f5,
      0x00fa,
      0x00f9,
      0x00fb,
      0x00fc,
      0x2020,
      0x00b0,
      0x00a2,
      0x00a3,
      0x00a7,
      0x2022,
      0x00b6,
      0x00df,
      0x00ae,
      0x00a9,
      0x2122,
      0x00b4,
      0x00a8,
      0x2260,
      0x00c6,
      0x00d8,
      0x221e,
      0x00b1,
      0x2264,
      0x2265,
      0x00a5,
      0x00b5,
      0x2202,
      0x2211,
      0x220f,
      0x03c0,
      0x222b,
      0x00aa,
      0x00ba,
      0x03a9,
      0x00e6,
      0x00f8,
      0x00bf,
      0x00a1,
      0x00ac,
      0x221a,
      0x0192,
      0x2248,
      0x0394,
      0x00ab,
      0x00bb,
      0x2026,
      0x00a0,
      0x00c0,
      0x00c3,
      0x00d5,
      0x0152,
      0x0153,
      0x2013,
      0x2014,
      0x201c,
      0x201d,
      0x2018,
      0x2019,
      0x00f7,
      0x25ca,
      0x00ff,
      0x0178,
      0x2044,
      0x20ac,
      0x2039,
      0x203a,
      0xfb01,
      0xfb02,
      0x2021,
      0x00b7,
      0x201a,
      0x201e,
      0x2030,
      0x00c2,
      0x00ca,
      0x00c1,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x00d3,
      0x00d4,
      0xe01e,
      0x00d2,
      0x00da,
      0x00db,
      0x00d9,
      0x0131,
      0x02c6,
      0x02dc,
      0x00af,
      0x02d8,
      0x02d9,
      0x02da,
      0x00b8,
      0x02dd,
      0x02db,
      0x02c7,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x89",
      "\xc3\x91",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc3\xa1",
      "\xc3\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa3",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xa9",
      "\xc3\xa8",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xad",
      "\xc3\xac",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb1",
      "\xc3\xb3",
      "\xc3\xb2",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb5",
      "\xc3\xba",
      "\xc3\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xe2\x80\xa0",
      "\xc2\xb0",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa7",
      "\xe2\x80\xa2",
      "\xc2\xb6",
      "\xc3\x9f",
      "\xc2\xae",
      "\xc2\xa9",
      "\xe2\x84\xa2",
      "\xc2\xb4",
      "\xc2\xa8",
      "\xe2\x89\xa0",
      "\xc3\x86",
      "\xc3\x98",
      "\xe2\x88\x9e",
      "\xc2\xb1",
      "\xe2\x89\xa4",
      "\xe2\x89\xa5",
      "\xc2\xa5",
      "\xc2\xb5",
      "\xe2\x88\x82",
      "\xe2\x88\x91",
      "\xe2\x88\x8f",
      "\xcf\x80",
      "\xe2\x88\xab",
      "\xc2\xaa",
      "\xc2\xba",
      "\xce\xa9",
      "\xc3\xa6",
      "\xc3\xb8",
      "\xc2\xbf",
      "\xc2\xa1",
      "\xc2\xac",
      "\xe2\x88\x9a",
      "\xc6\x92",
      "\xe2\x89\x88",
      "\xce\x94",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x80\xa6",
      "\xc2\xa0",
      "\xc3\x80",
      "\xc3\x83",
      "\xc3\x95",
      "\xc5\x92",
      "\xc5\x93",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xc3\xb7",
      "\xe2\x97\x8a",
      "\xc3\xbf",
      "\xc5\xb8",
      "\xe2\x81\x84",
      "\xe2\x82\xac",
      "\xe2\x80\xb9",
      "\xe2\x80\xba",
      "\xef\xac\x81",
      "\xef\xac\x82",
      "\xe2\x80\xa1",
      "\xc2\xb7",
      "\xe2\x80\x9a",
      "\xe2\x80\x9e",
      "\xe2\x80\xb0",
      "\xc3\x82",
      "\xc3\x8a",
      "\xc3\x81",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\xc3\x93",
      "\xc3\x94",
      "\xee\x80\x9e",
      "\xc3\x92",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x99",
      "\xc4\xb1",
      "\xcb\x86",
      "\xcb\x9c",
      "\xc2\xaf",
      "\xcb\x98",
      "\xcb\x99",
      "\xcb\x9a",
      "\xc2\xb8",
      "\xcb\x9d",
      "\xcb\x9b",
      "\xcb\x87",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xca",
      0x000000a1 => "\xc1",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a5 => "\xb4",
      0x000000a7 => "\xa4",
      0x000000a8 => "\xac",
      0x000000a9 => "\xa9",
      0x000000aa => "\xbb",
      0x000000ab => "\xc7",
      0x000000ac => "\xc2",
      0x000000ae => "\xa8",
      0x000000af => "\xf8",
      0x000000b0 => "\xa1",
      0x000000b1 => "\xb1",
      0x000000b4 => "\xab",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xa6",
      0x000000b7 => "\xe1",
      0x000000b8 => "\xfc",
      0x000000ba => "\xbc",
      0x000000bb => "\xc8",
      0x000000bf => "\xc0",
      0x000000c0 => "\xcb",
      0x000000c1 => "\xe7",
      0x000000c2 => "\xe5",
      0x000000c3 => "\xcc",
      0x000000c4 => "\x80",
      0x000000c5 => "\x81",
      0x000000c6 => "\xae",
      0x000000c7 => "\x82",
      0x000000c8 => "\xe9",
      0x000000c9 => "\x83",
      0x000000ca => "\xe6",
      0x000000cb => "\xe8",
      0x000000cc => "\xed",
      0x000000cd => "\xea",
      0x000000ce => "\xeb",
      0x000000cf => "\xec",
      0x000000d1 => "\x84",
      0x000000d2 => "\xf1",
      0x000000d3 => "\xee",
      0x000000d4 => "\xef",
      0x000000d5 => "\xcd",
      0x000000d6 => "\x85",
      0x000000d8 => "\xaf",
      0x000000d9 => "\xf4",
      0x000000da => "\xf2",
      0x000000db => "\xf3",
      0x000000dc => "\x86",
      0x000000df => "\xa7",
      0x000000e0 => "\x88",
      0x000000e1 => "\x87",
      0x000000e2 => "\x89",
      0x000000e3 => "\x8b",
      0x000000e4 => "\x8a",
      0x000000e5 => "\x8c",
      0x000000e6 => "\xbe",
      0x000000e7 => "\x8d",
      0x000000e8 => "\x8f",
      0x000000e9 => "\x8e",
      0x000000ea => "\x90",
      0x000000eb => "\x91",
      0x000000ec => "\x93",
      0x000000ed => "\x92",
      0x000000ee => "\x94",
      0x000000ef => "\x95",
      0x000000f1 => "\x96",
      0x000000f2 => "\x98",
      0x000000f3 => "\x97",
      0x000000f4 => "\x99",
      0x000000f5 => "\x9b",
      0x000000f6 => "\x9a",
      0x000000f7 => "\xd6",
      0x000000f8 => "\xbf",
      0x000000f9 => "\x9d",
      0x000000fa => "\x9c",
      0x000000fb => "\x9e",
      0x000000fc => "\x9f",
      0x000000ff => "\xd8",
      0x00000131 => "\xf5",
      0x00000152 => "\xce",
      0x00000153 => "\xcf",
      0x00000178 => "\xd9",
      0x00000192 => "\xc4",
      0x000002c6 => "\xf6",
      0x000002c7 => "\xff",
      0x000002d8 => "\xf9",
      0x000002d9 => "\xfa",
      0x000002da => "\xfb",
      0x000002db => "\xfe",
      0x000002dc => "\xf7",
      0x000002dd => "\xfd",
      0x00000394 => "\xc6",
      0x000003a9 => "\xbd",
      0x000003c0 => "\xb9",
      0x00002013 => "\xd0",
      0x00002014 => "\xd1",
      0x00002018 => "\xd4",
      0x00002019 => "\xd5",
      0x0000201a => "\xe2",
      0x0000201c => "\xd2",
      0x0000201d => "\xd3",
      0x0000201e => "\xe3",
      0x00002020 => "\xa0",
      0x00002021 => "\xe0",
      0x00002022 => "\xa5",
      0x00002026 => "\xc9",
      0x00002030 => "\xe4",
      0x00002039 => "\xdc",
      0x0000203a => "\xdd",
      0x00002044 => "\xda",
      0x000020ac => "\xdb",
      0x00002122 => "\xaa",
      0x00002202 => "\xb6",
      0x0000220f => "\xb8",
      0x00002211 => "\xb7",
      0x0000221a => "\xc3",
      0x0000221e => "\xb0",
      0x0000222b => "\xba",
      0x00002248 => "\xc5",
      0x00002260 => "\xad",
      0x00002264 => "\xb2",
      0x00002265 => "\xb3",
      0x000025ca => "\xd7",
      0x0000e01e => "\xf0",
      0x0000fb01 => "\xde",
      0x0000fb02 => "\xdf",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::MACINTOSH - Conversion routines for MACINTOSH
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for MACINTOSH.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: The Unicode Standard ver 1.0, ISBN 0-201-56788-1, Oct 1991
   alias MAC
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      81 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      82 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      83 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      84 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      85 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      86 |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      87 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      88 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      89 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      8A |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      8B |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      8C |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      8D |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      8E |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      8F |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      90 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      91 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      92 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      93 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      94 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      95 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      96 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      97 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      98 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      99 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      9A |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      9B |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      9C |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      9D |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      9E |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      9F |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      A0 |  00002020 | DAGGER
      A1 |  000000B0 | DEGREE SIGN
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A7 | SECTION SIGN
      A5 |  00002022 | BULLET
      A6 |  000000B6 | PILCROW SIGN
      A7 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      A8 |  000000AE | REGISTERED SIGN
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  00002122 | TRADE MARK SIGN
      AB |  000000B4 | ACUTE ACCENT
      AC |  000000A8 | DIAERESIS
      AD |  00002260 | NOT EQUAL TO
      AE |  000000C6 | LATIN CAPITAL LETTER AE
      AF |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      B0 |  0000221E | INFINITY
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  00002264 | LESS-THAN OR EQUAL TO
      B3 |  00002265 | GREATER-THAN OR EQUAL TO
      B4 |  000000A5 | YEN SIGN
      B5 |  000000B5 | MICRO SIGN
      B6 |  00002202 | PARTIAL DIFFERENTIAL
      B7 |  00002211 | N-ARY SUMMATION
      B8 |  0000220F | N-ARY PRODUCT
      B9 |  000003C0 | GREEK SMALL LETTER PI
      BA |  0000222B | INTEGRAL
      BB |  000000AA | FEMININE ORDINAL INDICATOR
      BC |  000000BA | MASCULINE ORDINAL INDICATOR
      BD |  000003A9 | GREEK CAPITAL LETTER OMEGA
      BE |  000000E6 | LATIN SMALL LETTER AE
      BF |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      C0 |  000000BF | INVERTED QUESTION MARK
      C1 |  000000A1 | INVERTED EXCLAMATION MARK
      C2 |  000000AC | NOT SIGN
      C3 |  0000221A | SQUARE ROOT
      C4 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      C5 |  00002248 | ALMOST EQUAL TO
      C6 |  00000394 | GREEK CAPITAL LETTER DELTA
      C7 |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      C8 |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      C9 |  00002026 | HORIZONTAL ELLIPSIS
      CA |  000000A0 | NO-BREAK SPACE
      CB |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      CC |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      CD |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      CE |  00000152 | LATIN CAPITAL LIGATURE OE
      CF |  00000153 | LATIN SMALL LIGATURE OE
      D0 |  00002013 | EN DASH
      D1 |  00002014 | EM DASH
      D2 |  0000201C | LEFT DOUBLE QUOTATION MARK
      D3 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      D4 |  00002018 | LEFT SINGLE QUOTATION MARK
      D5 |  00002019 | RIGHT SINGLE QUOTATION MARK
      D6 |  000000F7 | DIVISION SIGN
      D7 |  000025CA | LOZENGE
      D8 |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      D9 |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      DA |  00002044 | FRACTION SLASH
      DB |  000020AC | EURO SIGN
      DC |  00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
      DD |  0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
      DE |  0000FB01 | LATIN SMALL LIGATURE FI
      DF |  0000FB02 | LATIN SMALL LIGATURE FL
      E0 |  00002021 | DOUBLE DAGGER
      E1 |  000000B7 | MIDDLE DOT
      E2 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      E3 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      E4 |  00002030 | PER MILLE SIGN
      E5 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      E6 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      E7 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      E8 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      E9 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      EA |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      EB |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      EC |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      ED |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      F0 |  0000E01E | APPLE LOGO (Macintosh_F0)
      F1 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      F2 |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      F3 |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      F4 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      F5 |  00000131 | LATIN SMALL LETTER DOTLESS I
      F6 |  000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT
      F7 |  000002DC | SMALL TILDE
      F8 |  000000AF | MACRON
      F9 |  000002D8 | BREVE
      FA |  000002D9 | DOT ABOVE (Mandarin Chinese light tone)
      FB |  000002DA | RING ABOVE
      FC |  000000B8 | CEDILLA
      FD |  000002DD | DOUBLE ACUTE ACCENT
      FE |  000002DB | OGONEK
      FF |  000002C7 | CARON (Mandarin Chinese third tone)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_MACINTOSH

    $main::fatpacked{"Locale/RecodeData/MACROMANIA.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_MACROMANIA';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for MACROMANIA.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::MACROMANIA;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c4,
      0x00c5,
      0x00c7,
      0x00c9,
      0x00d1,
      0x00d6,
      0x00dc,
      0x00e1,
      0x00e0,
      0x00e2,
      0x00e4,
      0x00e3,
      0x00e5,
      0x00e7,
      0x00e9,
      0x00e8,
      0x00ea,
      0x00eb,
      0x00ed,
      0x00ec,
      0x00ee,
      0x00ef,
      0x00f1,
      0x00f3,
      0x00f2,
      0x00f4,
      0x00f6,
      0x00f5,
      0x00fa,
      0x00f9,
      0x00fb,
      0x00fc,
      0x2020,
      0x00b0,
      0x00a2,
      0x00a3,
      0x00a7,
      0x2022,
      0x00b6,
      0x00df,
      0x00ae,
      0x00a9,
      0x2122,
      0x00b4,
      0x00a8,
      0x2260,
      0x0102,
      0x015e,
      0x221e,
      0x00b1,
      0x2264,
      0x2265,
      0x00a5,
      0x00b5,
      0x2202,
      0x2211,
      0x220f,
      0x03c0,
      0x222b,
      0x00aa,
      0x00ba,
      0x2126,
      0x0103,
      0x015f,
      0x00bf,
      0x00a1,
      0x00ac,
      0x221a,
      0x0192,
      0x2248,
      0x2206,
      0x00ab,
      0x00bb,
      0x2026,
      0x00a0,
      0x00c0,
      0x00c3,
      0x00d5,
      0x0152,
      0x0153,
      0x2013,
      0x2014,
      0x201c,
      0x201d,
      0x2018,
      0x2019,
      0x00f7,
      0x25ca,
      0x00ff,
      0x0178,
      0x2044,
      0x00a4,
      0x2039,
      0x203a,
      0x0162,
      0x0163,
      0x2021,
      0x00b7,
      0x201a,
      0x201e,
      0x2030,
      0x00c2,
      0x00ca,
      0x00c1,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x00d3,
      0x00d4,
      0xfffd,
      0x00d2,
      0x00da,
      0x00db,
      0x00d9,
      0x0131,
      0x02c6,
      0x02dc,
      0x00af,
      0x02d8,
      0x02d9,
      0x02da,
      0x00b8,
      0x02dd,
      0x02db,
      0x02c7,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x89",
      "\xc3\x91",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc3\xa1",
      "\xc3\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa3",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xa9",
      "\xc3\xa8",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xad",
      "\xc3\xac",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb1",
      "\xc3\xb3",
      "\xc3\xb2",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb5",
      "\xc3\xba",
      "\xc3\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xe2\x80\xa0",
      "\xc2\xb0",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa7",
      "\xe2\x80\xa2",
      "\xc2\xb6",
      "\xc3\x9f",
      "\xc2\xae",
      "\xc2\xa9",
      "\xe2\x84\xa2",
      "\xc2\xb4",
      "\xc2\xa8",
      "\xe2\x89\xa0",
      "\xc4\x82",
      "\xc5\x9e",
      "\xe2\x88\x9e",
      "\xc2\xb1",
      "\xe2\x89\xa4",
      "\xe2\x89\xa5",
      "\xc2\xa5",
      "\xc2\xb5",
      "\xe2\x88\x82",
      "\xe2\x88\x91",
      "\xe2\x88\x8f",
      "\xcf\x80",
      "\xe2\x88\xab",
      "\xc2\xaa",
      "\xc2\xba",
      "\xe2\x84\xa6",
      "\xc4\x83",
      "\xc5\x9f",
      "\xc2\xbf",
      "\xc2\xa1",
      "\xc2\xac",
      "\xe2\x88\x9a",
      "\xc6\x92",
      "\xe2\x89\x88",
      "\xe2\x88\x86",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x80\xa6",
      "\xc2\xa0",
      "\xc3\x80",
      "\xc3\x83",
      "\xc3\x95",
      "\xc5\x92",
      "\xc5\x93",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xc3\xb7",
      "\xe2\x97\x8a",
      "\xc3\xbf",
      "\xc5\xb8",
      "\xe2\x81\x84",
      "\xc2\xa4",
      "\xe2\x80\xb9",
      "\xe2\x80\xba",
      "\xc5\xa2",
      "\xc5\xa3",
      "\xe2\x80\xa1",
      "\xc2\xb7",
      "\xe2\x80\x9a",
      "\xe2\x80\x9e",
      "\xe2\x80\xb0",
      "\xc3\x82",
      "\xc3\x8a",
      "\xc3\x81",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\xc3\x93",
      "\xc3\x94",
      "\xef\xbf\xbd",
      "\xc3\x92",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x99",
      "\xc4\xb1",
      "\xcb\x86",
      "\xcb\x9c",
      "\xc2\xaf",
      "\xcb\x98",
      "\xcb\x99",
      "\xcb\x9a",
      "\xc2\xb8",
      "\xcb\x9d",
      "\xcb\x9b",
      "\xcb\x87",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xca",
      0x000000a1 => "\xc1",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xdb",
      0x000000a5 => "\xb4",
      0x000000a7 => "\xa4",
      0x000000a8 => "\xac",
      0x000000a9 => "\xa9",
      0x000000aa => "\xbb",
      0x000000ab => "\xc7",
      0x000000ac => "\xc2",
      0x000000ae => "\xa8",
      0x000000af => "\xf8",
      0x000000b0 => "\xa1",
      0x000000b1 => "\xb1",
      0x000000b4 => "\xab",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xa6",
      0x000000b7 => "\xe1",
      0x000000b8 => "\xfc",
      0x000000ba => "\xbc",
      0x000000bb => "\xc8",
      0x000000bf => "\xc0",
      0x000000c0 => "\xcb",
      0x000000c1 => "\xe7",
      0x000000c2 => "\xe5",
      0x000000c3 => "\xcc",
      0x000000c4 => "\x80",
      0x000000c5 => "\x81",
      0x000000c7 => "\x82",
      0x000000c8 => "\xe9",
      0x000000c9 => "\x83",
      0x000000ca => "\xe6",
      0x000000cb => "\xe8",
      0x000000cc => "\xed",
      0x000000cd => "\xea",
      0x000000ce => "\xeb",
      0x000000cf => "\xec",
      0x000000d1 => "\x84",
      0x000000d2 => "\xf1",
      0x000000d3 => "\xee",
      0x000000d4 => "\xef",
      0x000000d5 => "\xcd",
      0x000000d6 => "\x85",
      0x000000d9 => "\xf4",
      0x000000da => "\xf2",
      0x000000db => "\xf3",
      0x000000dc => "\x86",
      0x000000df => "\xa7",
      0x000000e0 => "\x88",
      0x000000e1 => "\x87",
      0x000000e2 => "\x89",
      0x000000e3 => "\x8b",
      0x000000e4 => "\x8a",
      0x000000e5 => "\x8c",
      0x000000e7 => "\x8d",
      0x000000e8 => "\x8f",
      0x000000e9 => "\x8e",
      0x000000ea => "\x90",
      0x000000eb => "\x91",
      0x000000ec => "\x93",
      0x000000ed => "\x92",
      0x000000ee => "\x94",
      0x000000ef => "\x95",
      0x000000f1 => "\x96",
      0x000000f2 => "\x98",
      0x000000f3 => "\x97",
      0x000000f4 => "\x99",
      0x000000f5 => "\x9b",
      0x000000f6 => "\x9a",
      0x000000f7 => "\xd6",
      0x000000f9 => "\x9d",
      0x000000fa => "\x9c",
      0x000000fb => "\x9e",
      0x000000fc => "\x9f",
      0x000000ff => "\xd8",
      0x00000102 => "\xae",
      0x00000103 => "\xbe",
      0x00000131 => "\xf5",
      0x00000152 => "\xce",
      0x00000153 => "\xcf",
      0x0000015e => "\xaf",
      0x0000015f => "\xbf",
      0x00000162 => "\xde",
      0x00000163 => "\xdf",
      0x00000178 => "\xd9",
      0x00000192 => "\xc4",
      0x000002c6 => "\xf6",
      0x000002c7 => "\xff",
      0x000002d8 => "\xf9",
      0x000002d9 => "\xfa",
      0x000002da => "\xfb",
      0x000002db => "\xfe",
      0x000002dc => "\xf7",
      0x000002dd => "\xfd",
      0x000003c0 => "\xb9",
      0x00002013 => "\xd0",
      0x00002014 => "\xd1",
      0x00002018 => "\xd4",
      0x00002019 => "\xd5",
      0x0000201a => "\xe2",
      0x0000201c => "\xd2",
      0x0000201d => "\xd3",
      0x0000201e => "\xe3",
      0x00002020 => "\xa0",
      0x00002021 => "\xe0",
      0x00002022 => "\xa5",
      0x00002026 => "\xc9",
      0x00002030 => "\xe4",
      0x00002039 => "\xdc",
      0x0000203a => "\xdd",
      0x00002044 => "\xda",
      0x00002122 => "\xaa",
      0x00002126 => "\xbd",
      0x00002202 => "\xb6",
      0x00002206 => "\xc6",
      0x0000220f => "\xb8",
      0x00002211 => "\xb7",
      0x0000221a => "\xc3",
      0x0000221e => "\xb0",
      0x0000222b => "\xba",
      0x00002248 => "\xc5",
      0x00002260 => "\xad",
      0x00002264 => "\xb2",
      0x00002265 => "\xb3",
      0x000025ca => "\xd7",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::MACROMANIA - Conversion routines for MACROMANIA
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for MACROMANIA.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
  
   This charmap has been generated automatically from GNU libiconv
   conversions.
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      81 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      82 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      83 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      84 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      85 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      86 |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      87 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      88 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      89 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      8A |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      8B |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      8C |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      8D |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      8E |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      8F |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      90 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      91 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      92 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      93 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      94 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      95 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      96 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      97 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      98 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      99 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      9A |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      9B |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      9C |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      9D |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      9E |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      9F |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      A0 |  00002020 | DAGGER
      A1 |  000000B0 | DEGREE SIGN
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A7 | SECTION SIGN
      A5 |  00002022 | BULLET
      A6 |  000000B6 | PILCROW SIGN
      A7 |  000000DF | LATIN SMALL LETTER SHARP S
      A8 |  000000AE | REGISTERED SIGN
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  00002122 | TRADE MARK SIGN
      AB |  000000B4 | ACUTE ACCENT
      AC |  000000A8 | DIAERESIS
      AD |  00002260 | NOT EQUAL TO
      AE |  00000102 | LATIN CAPITAL LETTER A WITH BREVE
      AF |  0000015E | LATIN CAPITAL LETTER S WITH CEDILLA
      B0 |  0000221E | INFINITY
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  00002264 | LESS-THAN OR EQUAL TO
      B3 |  00002265 | GREATER-THAN OR EQUAL TO
      B4 |  000000A5 | YEN SIGN
      B5 |  000000B5 | MICRO SIGN
      B6 |  00002202 | PARTIAL DIFFERENTIAL
      B7 |  00002211 | N-ARY SUMMATION
      B8 |  0000220F | N-ARY PRODUCT
      B9 |  000003C0 | GREEK SMALL LETTER PI
      BA |  0000222B | INTEGRAL
      BB |  000000AA | FEMININE ORDINAL INDICATOR
      BC |  000000BA | MASCULINE ORDINAL INDICATOR
      BD |  00002126 | OHM SIGN
      BE |  00000103 | LATIN SMALL LETTER A WITH BREVE
      BF |  0000015F | LATIN SMALL LETTER S WITH CEDILLA
      C0 |  000000BF | INVERTED QUESTION MARK
      C1 |  000000A1 | INVERTED EXCLAMATION MARK
      C2 |  000000AC | NOT SIGN
      C3 |  0000221A | SQUARE ROOT
      C4 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      C5 |  00002248 | ALMOST EQUAL TO
      C6 |  00002206 | INCREMENT
      C7 |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      C8 |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      C9 |  00002026 | HORIZONTAL ELLIPSIS
      CA |  000000A0 | NO-BREAK SPACE
      CB |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      CC |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      CD |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      CE |  00000152 | LATIN CAPITAL LIGATURE OE
      CF |  00000153 | LATIN SMALL LIGATURE OE
      D0 |  00002013 | EN DASH
      D1 |  00002014 | EM DASH
      D2 |  0000201C | LEFT DOUBLE QUOTATION MARK
      D3 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      D4 |  00002018 | LEFT SINGLE QUOTATION MARK
      D5 |  00002019 | RIGHT SINGLE QUOTATION MARK
      D6 |  000000F7 | DIVISION SIGN
      D7 |  000025CA | LOZENGE
      D8 |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      D9 |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      DA |  00002044 | FRACTION SLASH
      DB |  000000A4 | CURRENCY SIGN
      DC |  00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
      DD |  0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
      DE |  00000162 | LATIN CAPITAL LETTER T WITH CEDILLA
      DF |  00000163 | LATIN SMALL LETTER T WITH CEDILLA
      E0 |  00002021 | DOUBLE DAGGER
      E1 |  000000B7 | MIDDLE DOT
      E2 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      E3 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      E4 |  00002030 | PER MILLE SIGN
      E5 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      E6 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      E7 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      E8 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      E9 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      EA |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      EB |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      EC |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      ED |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      F1 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      F2 |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      F3 |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      F4 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      F5 |  00000131 | LATIN SMALL LETTER DOTLESS I
      F6 |  000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT
      F7 |  000002DC | SMALL TILDE
      F8 |  000000AF | MACRON
      F9 |  000002D8 | BREVE
      FA |  000002D9 | DOT ABOVE
      FB |  000002DA | RING ABOVE
      FC |  000000B8 | CEDILLA
      FD |  000002DD | DOUBLE ACUTE ACCENT
      FE |  000002DB | OGONEK
      FF |  000002C7 | CARON
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_MACROMANIA

    $main::fatpacked{"Locale/RecodeData/MACTHAI.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_MACTHAI';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for MACTHAI.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::MACTHAI;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00ab,
      0x00bb,
      0x2026,
      0xf88c,
      0xf88f,
      0xf892,
      0xf895,
      0xf898,
      0xf88b,
      0xf88e,
      0xf891,
      0xf894,
      0xf897,
      0x201c,
      0x201d,
      0xf899,
      0xfffd,
      0x2022,
      0xf884,
      0xf889,
      0xf885,
      0xf886,
      0xf887,
      0xf888,
      0xf88a,
      0xf88d,
      0xf890,
      0xf893,
      0xf896,
      0x2018,
      0x2019,
      0xfffd,
      0x00a0,
      0x0e01,
      0x0e02,
      0x0e03,
      0x0e04,
      0x0e05,
      0x0e06,
      0x0e07,
      0x0e08,
      0x0e09,
      0x0e0a,
      0x0e0b,
      0x0e0c,
      0x0e0d,
      0x0e0e,
      0x0e0f,
      0x0e10,
      0x0e11,
      0x0e12,
      0x0e13,
      0x0e14,
      0x0e15,
      0x0e16,
      0x0e17,
      0x0e18,
      0x0e19,
      0x0e1a,
      0x0e1b,
      0x0e1c,
      0x0e1d,
      0x0e1e,
      0x0e1f,
      0x0e20,
      0x0e21,
      0x0e22,
      0x0e23,
      0x0e24,
      0x0e25,
      0x0e26,
      0x0e27,
      0x0e28,
      0x0e29,
      0x0e2a,
      0x0e2b,
      0x0e2c,
      0x0e2d,
      0x0e2e,
      0x0e2f,
      0x0e30,
      0x0e31,
      0x0e32,
      0x0e33,
      0x0e34,
      0x0e35,
      0x0e36,
      0x0e37,
      0x0e38,
      0x0e39,
      0x0e3a,
      0xfeff,
      0x200b,
      0x2013,
      0x2014,
      0x0e3f,
      0x0e40,
      0x0e41,
      0x0e42,
      0x0e43,
      0x0e44,
      0x0e45,
      0x0e46,
      0x0e47,
      0x0e48,
      0x0e49,
      0x0e4a,
      0x0e4b,
      0x0e4c,
      0x0e4d,
      0x2122,
      0x0e4f,
      0x0e50,
      0x0e51,
      0x0e52,
      0x0e53,
      0x0e54,
      0x0e55,
      0x0e56,
      0x0e57,
      0x0e58,
      0x0e59,
      0x00ae,
      0x00a9,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x80\xa6",
      "\xef\xa2\x8c",
      "\xef\xa2\x8f",
      "\xef\xa2\x92",
      "\xef\xa2\x95",
      "\xef\xa2\x98",
      "\xef\xa2\x8b",
      "\xef\xa2\x8e",
      "\xef\xa2\x91",
      "\xef\xa2\x94",
      "\xef\xa2\x97",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xef\xa2\x99",
      "\xef\xbf\xbd",
      "\xe2\x80\xa2",
      "\xef\xa2\x84",
      "\xef\xa2\x89",
      "\xef\xa2\x85",
      "\xef\xa2\x86",
      "\xef\xa2\x87",
      "\xef\xa2\x88",
      "\xef\xa2\x8a",
      "\xef\xa2\x8d",
      "\xef\xa2\x90",
      "\xef\xa2\x93",
      "\xef\xa2\x96",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xef\xbf\xbd",
      "\xc2\xa0",
      "\xe0\xb8\x81",
      "\xe0\xb8\x82",
      "\xe0\xb8\x83",
      "\xe0\xb8\x84",
      "\xe0\xb8\x85",
      "\xe0\xb8\x86",
      "\xe0\xb8\x87",
      "\xe0\xb8\x88",
      "\xe0\xb8\x89",
      "\xe0\xb8\x8a",
      "\xe0\xb8\x8b",
      "\xe0\xb8\x8c",
      "\xe0\xb8\x8d",
      "\xe0\xb8\x8e",
      "\xe0\xb8\x8f",
      "\xe0\xb8\x90",
      "\xe0\xb8\x91",
      "\xe0\xb8\x92",
      "\xe0\xb8\x93",
      "\xe0\xb8\x94",
      "\xe0\xb8\x95",
      "\xe0\xb8\x96",
      "\xe0\xb8\x97",
      "\xe0\xb8\x98",
      "\xe0\xb8\x99",
      "\xe0\xb8\x9a",
      "\xe0\xb8\x9b",
      "\xe0\xb8\x9c",
      "\xe0\xb8\x9d",
      "\xe0\xb8\x9e",
      "\xe0\xb8\x9f",
      "\xe0\xb8\xa0",
      "\xe0\xb8\xa1",
      "\xe0\xb8\xa2",
      "\xe0\xb8\xa3",
      "\xe0\xb8\xa4",
      "\xe0\xb8\xa5",
      "\xe0\xb8\xa6",
      "\xe0\xb8\xa7",
      "\xe0\xb8\xa8",
      "\xe0\xb8\xa9",
      "\xe0\xb8\xaa",
      "\xe0\xb8\xab",
      "\xe0\xb8\xac",
      "\xe0\xb8\xad",
      "\xe0\xb8\xae",
      "\xe0\xb8\xaf",
      "\xe0\xb8\xb0",
      "\xe0\xb8\xb1",
      "\xe0\xb8\xb2",
      "\xe0\xb8\xb3",
      "\xe0\xb8\xb4",
      "\xe0\xb8\xb5",
      "\xe0\xb8\xb6",
      "\xe0\xb8\xb7",
      "\xe0\xb8\xb8",
      "\xe0\xb8\xb9",
      "\xe0\xb8\xba",
      "\xef\xbb\xbf",
      "\xe2\x80\x8b",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xe0\xb8\xbf",
      "\xe0\xb9\x80",
      "\xe0\xb9\x81",
      "\xe0\xb9\x82",
      "\xe0\xb9\x83",
      "\xe0\xb9\x84",
      "\xe0\xb9\x85",
      "\xe0\xb9\x86",
      "\xe0\xb9\x87",
      "\xe0\xb9\x88",
      "\xe0\xb9\x89",
      "\xe0\xb9\x8a",
      "\xe0\xb9\x8b",
      "\xe0\xb9\x8c",
      "\xe0\xb9\x8d",
      "\xe2\x84\xa2",
      "\xe0\xb9\x8f",
      "\xe0\xb9\x90",
      "\xe0\xb9\x91",
      "\xe0\xb9\x92",
      "\xe0\xb9\x93",
      "\xe0\xb9\x94",
      "\xe0\xb9\x95",
      "\xe0\xb9\x96",
      "\xe0\xb9\x97",
      "\xe0\xb9\x98",
      "\xe0\xb9\x99",
      "\xc2\xae",
      "\xc2\xa9",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xa0",
      0x000000a9 => "\xfb",
      0x000000ab => "\x80",
      0x000000ae => "\xfa",
      0x000000bb => "\x81",
      0x00000e01 => "\xa1",
      0x00000e02 => "\xa2",
      0x00000e03 => "\xa3",
      0x00000e04 => "\xa4",
      0x00000e05 => "\xa5",
      0x00000e06 => "\xa6",
      0x00000e07 => "\xa7",
      0x00000e08 => "\xa8",
      0x00000e09 => "\xa9",
      0x00000e0a => "\xaa",
      0x00000e0b => "\xab",
      0x00000e0c => "\xac",
      0x00000e0d => "\xad",
      0x00000e0e => "\xae",
      0x00000e0f => "\xaf",
      0x00000e10 => "\xb0",
      0x00000e11 => "\xb1",
      0x00000e12 => "\xb2",
      0x00000e13 => "\xb3",
      0x00000e14 => "\xb4",
      0x00000e15 => "\xb5",
      0x00000e16 => "\xb6",
      0x00000e17 => "\xb7",
      0x00000e18 => "\xb8",
      0x00000e19 => "\xb9",
      0x00000e1a => "\xba",
      0x00000e1b => "\xbb",
      0x00000e1c => "\xbc",
      0x00000e1d => "\xbd",
      0x00000e1e => "\xbe",
      0x00000e1f => "\xbf",
      0x00000e20 => "\xc0",
      0x00000e21 => "\xc1",
      0x00000e22 => "\xc2",
      0x00000e23 => "\xc3",
      0x00000e24 => "\xc4",
      0x00000e25 => "\xc5",
      0x00000e26 => "\xc6",
      0x00000e27 => "\xc7",
      0x00000e28 => "\xc8",
      0x00000e29 => "\xc9",
      0x00000e2a => "\xca",
      0x00000e2b => "\xcb",
      0x00000e2c => "\xcc",
      0x00000e2d => "\xcd",
      0x00000e2e => "\xce",
      0x00000e2f => "\xcf",
      0x00000e30 => "\xd0",
      0x00000e31 => "\xd1",
      0x00000e32 => "\xd2",
      0x00000e33 => "\xd3",
      0x00000e34 => "\xd4",
      0x00000e35 => "\xd5",
      0x00000e36 => "\xd6",
      0x00000e37 => "\xd7",
      0x00000e38 => "\xd8",
      0x00000e39 => "\xd9",
      0x00000e3a => "\xda",
      0x00000e3f => "\xdf",
      0x00000e40 => "\xe0",
      0x00000e41 => "\xe1",
      0x00000e42 => "\xe2",
      0x00000e43 => "\xe3",
      0x00000e44 => "\xe4",
      0x00000e45 => "\xe5",
      0x00000e46 => "\xe6",
      0x00000e47 => "\xe7",
      0x00000e48 => "\xe8",
      0x00000e49 => "\xe9",
      0x00000e4a => "\xea",
      0x00000e4b => "\xeb",
      0x00000e4c => "\xec",
      0x00000e4d => "\xed",
      0x00000e4f => "\xef",
      0x00000e50 => "\xf0",
      0x00000e51 => "\xf1",
      0x00000e52 => "\xf2",
      0x00000e53 => "\xf3",
      0x00000e54 => "\xf4",
      0x00000e55 => "\xf5",
      0x00000e56 => "\xf6",
      0x00000e57 => "\xf7",
      0x00000e58 => "\xf8",
      0x00000e59 => "\xf9",
      0x0000200b => "\xdc",
      0x00002013 => "\xdd",
      0x00002014 => "\xde",
      0x00002018 => "\x9d",
      0x00002019 => "\x9e",
      0x0000201c => "\x8d",
      0x0000201d => "\x8e",
      0x00002022 => "\x91",
      0x00002026 => "\x82",
      0x00002122 => "\xee",
      0x0000f884 => "\x92",
      0x0000f885 => "\x94",
      0x0000f886 => "\x95",
      0x0000f887 => "\x96",
      0x0000f888 => "\x97",
      0x0000f889 => "\x93",
      0x0000f88a => "\x98",
      0x0000f88b => "\x88",
      0x0000f88c => "\x83",
      0x0000f88d => "\x99",
      0x0000f88e => "\x89",
      0x0000f88f => "\x84",
      0x0000f890 => "\x9a",
      0x0000f891 => "\x8a",
      0x0000f892 => "\x85",
      0x0000f893 => "\x9b",
      0x0000f894 => "\x8b",
      0x0000f895 => "\x86",
      0x0000f896 => "\x9c",
      0x0000f897 => "\x8c",
      0x0000f898 => "\x87",
      0x0000f899 => "\x8f",
      0x0000feff => "\xdb",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::MACTHAI - Conversion routines for MACTHAI
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for MACTHAI.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
  
   This charmap has been generated automatically from GNU libiconv
   conversions.
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      81 |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      82 |  00002026 | HORIZONTAL ELLIPSIS
      83 |  0000F88C | E<lt>CJKE<gt>
      84 |  0000F88F | E<lt>CJKE<gt>
      85 |  0000F892 | E<lt>CJKE<gt>
      86 |  0000F895 | E<lt>CJKE<gt>
      87 |  0000F898 | E<lt>CJKE<gt>
      88 |  0000F88B | E<lt>CJKE<gt>
      89 |  0000F88E | E<lt>CJKE<gt>
      8A |  0000F891 | E<lt>CJKE<gt>
      8B |  0000F894 | E<lt>CJKE<gt>
      8C |  0000F897 | E<lt>CJKE<gt>
      8D |  0000201C | LEFT DOUBLE QUOTATION MARK
      8E |  0000201D | RIGHT DOUBLE QUOTATION MARK
      8F |  0000F899 | E<lt>CJKE<gt>
      91 |  00002022 | BULLET
      92 |  0000F884 | E<lt>CJKE<gt>
      93 |  0000F889 | E<lt>CJKE<gt>
      94 |  0000F885 | E<lt>CJKE<gt>
      95 |  0000F886 | E<lt>CJKE<gt>
      96 |  0000F887 | E<lt>CJKE<gt>
      97 |  0000F888 | E<lt>CJKE<gt>
      98 |  0000F88A | E<lt>CJKE<gt>
      99 |  0000F88D | E<lt>CJKE<gt>
      9A |  0000F890 | E<lt>CJKE<gt>
      9B |  0000F893 | E<lt>CJKE<gt>
      9C |  0000F896 | E<lt>CJKE<gt>
      9D |  00002018 | LEFT SINGLE QUOTATION MARK
      9E |  00002019 | RIGHT SINGLE QUOTATION MARK
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  00000E01 | THAI CHARACTER KO KAI
      A2 |  00000E02 | THAI CHARACTER KHO KHAI
      A3 |  00000E03 | THAI CHARACTER KHO KHUAT
      A4 |  00000E04 | THAI CHARACTER KHO KHWAI
      A5 |  00000E05 | THAI CHARACTER KHO KHON
      A6 |  00000E06 | THAI CHARACTER KHO RAKHANG
      A7 |  00000E07 | THAI CHARACTER NGO NGU
      A8 |  00000E08 | THAI CHARACTER CHO CHAN
      A9 |  00000E09 | THAI CHARACTER CHO CHING
      AA |  00000E0A | THAI CHARACTER CHO CHANG
      AB |  00000E0B | THAI CHARACTER SO SO
      AC |  00000E0C | THAI CHARACTER CHO CHOE
      AD |  00000E0D | THAI CHARACTER YO YING
      AE |  00000E0E | THAI CHARACTER DO CHADA
      AF |  00000E0F | THAI CHARACTER TO PATAK
      B0 |  00000E10 | THAI CHARACTER THO THAN
      B1 |  00000E11 | THAI CHARACTER THO NANGMONTHO
      B2 |  00000E12 | THAI CHARACTER THO PHUTHAO
      B3 |  00000E13 | THAI CHARACTER NO NEN
      B4 |  00000E14 | THAI CHARACTER DO DEK
      B5 |  00000E15 | THAI CHARACTER TO TAO
      B6 |  00000E16 | THAI CHARACTER THO THUNG
      B7 |  00000E17 | THAI CHARACTER THO THAHAN
      B8 |  00000E18 | THAI CHARACTER THO THONG
      B9 |  00000E19 | THAI CHARACTER NO NU
      BA |  00000E1A | THAI CHARACTER BO BAIMAI
      BB |  00000E1B | THAI CHARACTER PO PLA
      BC |  00000E1C | THAI CHARACTER PHO PHUNG
      BD |  00000E1D | THAI CHARACTER FO FA
      BE |  00000E1E | THAI CHARACTER PHO PHAN
      BF |  00000E1F | THAI CHARACTER FO FAN
      C0 |  00000E20 | THAI CHARACTER PHO SAMPHAO
      C1 |  00000E21 | THAI CHARACTER MO MA
      C2 |  00000E22 | THAI CHARACTER YO YAK
      C3 |  00000E23 | THAI CHARACTER RO RUA
      C4 |  00000E24 | THAI CHARACTER RU
      C5 |  00000E25 | THAI CHARACTER LO LING
      C6 |  00000E26 | THAI CHARACTER LU
      C7 |  00000E27 | THAI CHARACTER WO WAEN
      C8 |  00000E28 | THAI CHARACTER SO SALA
      C9 |  00000E29 | THAI CHARACTER SO RUSI
      CA |  00000E2A | THAI CHARACTER SO SUA
      CB |  00000E2B | THAI CHARACTER HO HIP
      CC |  00000E2C | THAI CHARACTER LO CHULA
      CD |  00000E2D | THAI CHARACTER O ANG
      CE |  00000E2E | THAI CHARACTER HO NOKHUK
      CF |  00000E2F | THAI CHARACTER PAIYANNOI
      D0 |  00000E30 | THAI CHARACTER SARA A
      D1 |  00000E31 | THAI CHARACTER MAI HAN-AKAT
      D2 |  00000E32 | THAI CHARACTER SARA AA
      D3 |  00000E33 | THAI CHARACTER SARA AM
      D4 |  00000E34 | THAI CHARACTER SARA I
      D5 |  00000E35 | THAI CHARACTER SARA II
      D6 |  00000E36 | THAI CHARACTER SARA UE
      D7 |  00000E37 | THAI CHARACTER SARA UEE
      D8 |  00000E38 | THAI CHARACTER SARA U
      D9 |  00000E39 | THAI CHARACTER SARA UU
      DA |  00000E3A | THAI CHARACTER PHINTHU
      DB |  0000FEFF | ZERO WIDTH NO-BREAK SPACE
      DC |  0000200B | ZERO WIDTH SPACE
      DD |  00002013 | EN DASH
      DE |  00002014 | EM DASH
      DF |  00000E3F | THAI CURRENCY SYMBOL BAHT
      E0 |  00000E40 | THAI CHARACTER SARA E
      E1 |  00000E41 | THAI CHARACTER SARA AE
      E2 |  00000E42 | THAI CHARACTER SARA O
      E3 |  00000E43 | THAI CHARACTER SARA AI MAIMUAN
      E4 |  00000E44 | THAI CHARACTER SARA AI MAIMALAI
      E5 |  00000E45 | THAI CHARACTER LAKKHANGYAO
      E6 |  00000E46 | THAI CHARACTER MAIYAMOK
      E7 |  00000E47 | THAI CHARACTER MAITAIKHU
      E8 |  00000E48 | THAI CHARACTER MAI EK
      E9 |  00000E49 | THAI CHARACTER MAI THO
      EA |  00000E4A | THAI CHARACTER MAI TRI
      EB |  00000E4B | THAI CHARACTER MAI CHATTAWA
      EC |  00000E4C | THAI CHARACTER THANTHAKHAT
      ED |  00000E4D | THAI CHARACTER NIKHAHIT
      EE |  00002122 | TRADE MARK SIGN
      EF |  00000E4F | THAI CHARACTER FONGMAN
      F0 |  00000E50 | THAI DIGIT ZERO
      F1 |  00000E51 | THAI DIGIT ONE
      F2 |  00000E52 | THAI DIGIT TWO
      F3 |  00000E53 | THAI DIGIT THREE
      F4 |  00000E54 | THAI DIGIT FOUR
      F5 |  00000E55 | THAI DIGIT FIVE
      F6 |  00000E56 | THAI DIGIT SIX
      F7 |  00000E57 | THAI DIGIT SEVEN
      F8 |  00000E58 | THAI DIGIT EIGHT
      F9 |  00000E59 | THAI DIGIT NINE
      FA |  000000AE | REGISTERED SIGN
      FB |  000000A9 | COPYRIGHT SIGN
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_MACTHAI

    $main::fatpacked{"Locale/RecodeData/MACTURKISH.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_MACTURKISH';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for MACTURKISH.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::MACTURKISH;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c4,
      0x00c5,
      0x00c7,
      0x00c9,
      0x00d1,
      0x00d6,
      0x00dc,
      0x00e1,
      0x00e0,
      0x00e2,
      0x00e4,
      0x00e3,
      0x00e5,
      0x00e7,
      0x00e9,
      0x00e8,
      0x00ea,
      0x00eb,
      0x00ed,
      0x00ec,
      0x00ee,
      0x00ef,
      0x00f1,
      0x00f3,
      0x00f2,
      0x00f4,
      0x00f6,
      0x00f5,
      0x00fa,
      0x00f9,
      0x00fb,
      0x00fc,
      0x2020,
      0x00b0,
      0x00a2,
      0x00a3,
      0x00a7,
      0x2022,
      0x00b6,
      0x00df,
      0x00ae,
      0x00a9,
      0x2122,
      0x00b4,
      0x00a8,
      0x2260,
      0x00c6,
      0x00d8,
      0x221e,
      0x00b1,
      0x2264,
      0x2265,
      0x00a5,
      0x00b5,
      0x2202,
      0x2211,
      0x220f,
      0x03c0,
      0x222b,
      0x00aa,
      0x00ba,
      0x2126,
      0x00e6,
      0x00f8,
      0x00bf,
      0x00a1,
      0x00ac,
      0x221a,
      0x0192,
      0x2248,
      0x2206,
      0x00ab,
      0x00bb,
      0x2026,
      0x00a0,
      0x00c0,
      0x00c3,
      0x00d5,
      0x0152,
      0x0153,
      0x2013,
      0x2014,
      0x201c,
      0x201d,
      0x2018,
      0x2019,
      0x00f7,
      0x25ca,
      0x00ff,
      0x0178,
      0x011e,
      0x011f,
      0x0130,
      0x0131,
      0x015e,
      0x015f,
      0x2021,
      0x00b7,
      0x201a,
      0x201e,
      0x2030,
      0x00c2,
      0x00ca,
      0x00c1,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x00d3,
      0x00d4,
      0xfffd,
      0x00d2,
      0x00da,
      0x00db,
      0x00d9,
      0xfffd,
      0x02c6,
      0x02dc,
      0x00af,
      0x02d8,
      0x02d9,
      0x02da,
      0x00b8,
      0x02dd,
      0x02db,
      0x02c7,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x89",
      "\xc3\x91",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc3\xa1",
      "\xc3\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa3",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xa9",
      "\xc3\xa8",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xad",
      "\xc3\xac",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb1",
      "\xc3\xb3",
      "\xc3\xb2",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb5",
      "\xc3\xba",
      "\xc3\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xe2\x80\xa0",
      "\xc2\xb0",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa7",
      "\xe2\x80\xa2",
      "\xc2\xb6",
      "\xc3\x9f",
      "\xc2\xae",
      "\xc2\xa9",
      "\xe2\x84\xa2",
      "\xc2\xb4",
      "\xc2\xa8",
      "\xe2\x89\xa0",
      "\xc3\x86",
      "\xc3\x98",
      "\xe2\x88\x9e",
      "\xc2\xb1",
      "\xe2\x89\xa4",
      "\xe2\x89\xa5",
      "\xc2\xa5",
      "\xc2\xb5",
      "\xe2\x88\x82",
      "\xe2\x88\x91",
      "\xe2\x88\x8f",
      "\xcf\x80",
      "\xe2\x88\xab",
      "\xc2\xaa",
      "\xc2\xba",
      "\xe2\x84\xa6",
      "\xc3\xa6",
      "\xc3\xb8",
      "\xc2\xbf",
      "\xc2\xa1",
      "\xc2\xac",
      "\xe2\x88\x9a",
      "\xc6\x92",
      "\xe2\x89\x88",
      "\xe2\x88\x86",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x80\xa6",
      "\xc2\xa0",
      "\xc3\x80",
      "\xc3\x83",
      "\xc3\x95",
      "\xc5\x92",
      "\xc5\x93",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xc3\xb7",
      "\xe2\x97\x8a",
      "\xc3\xbf",
      "\xc5\xb8",
      "\xc4\x9e",
      "\xc4\x9f",
      "\xc4\xb0",
      "\xc4\xb1",
      "\xc5\x9e",
      "\xc5\x9f",
      "\xe2\x80\xa1",
      "\xc2\xb7",
      "\xe2\x80\x9a",
      "\xe2\x80\x9e",
      "\xe2\x80\xb0",
      "\xc3\x82",
      "\xc3\x8a",
      "\xc3\x81",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\xc3\x93",
      "\xc3\x94",
      "\xef\xbf\xbd",
      "\xc3\x92",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x99",
      "\xef\xbf\xbd",
      "\xcb\x86",
      "\xcb\x9c",
      "\xc2\xaf",
      "\xcb\x98",
      "\xcb\x99",
      "\xcb\x9a",
      "\xc2\xb8",
      "\xcb\x9d",
      "\xcb\x9b",
      "\xcb\x87",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xca",
      0x000000a1 => "\xc1",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a5 => "\xb4",
      0x000000a7 => "\xa4",
      0x000000a8 => "\xac",
      0x000000a9 => "\xa9",
      0x000000aa => "\xbb",
      0x000000ab => "\xc7",
      0x000000ac => "\xc2",
      0x000000ae => "\xa8",
      0x000000af => "\xf8",
      0x000000b0 => "\xa1",
      0x000000b1 => "\xb1",
      0x000000b4 => "\xab",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xa6",
      0x000000b7 => "\xe1",
      0x000000b8 => "\xfc",
      0x000000ba => "\xbc",
      0x000000bb => "\xc8",
      0x000000bf => "\xc0",
      0x000000c0 => "\xcb",
      0x000000c1 => "\xe7",
      0x000000c2 => "\xe5",
      0x000000c3 => "\xcc",
      0x000000c4 => "\x80",
      0x000000c5 => "\x81",
      0x000000c6 => "\xae",
      0x000000c7 => "\x82",
      0x000000c8 => "\xe9",
      0x000000c9 => "\x83",
      0x000000ca => "\xe6",
      0x000000cb => "\xe8",
      0x000000cc => "\xed",
      0x000000cd => "\xea",
      0x000000ce => "\xeb",
      0x000000cf => "\xec",
      0x000000d1 => "\x84",
      0x000000d2 => "\xf1",
      0x000000d3 => "\xee",
      0x000000d4 => "\xef",
      0x000000d5 => "\xcd",
      0x000000d6 => "\x85",
      0x000000d8 => "\xaf",
      0x000000d9 => "\xf4",
      0x000000da => "\xf2",
      0x000000db => "\xf3",
      0x000000dc => "\x86",
      0x000000df => "\xa7",
      0x000000e0 => "\x88",
      0x000000e1 => "\x87",
      0x000000e2 => "\x89",
      0x000000e3 => "\x8b",
      0x000000e4 => "\x8a",
      0x000000e5 => "\x8c",
      0x000000e6 => "\xbe",
      0x000000e7 => "\x8d",
      0x000000e8 => "\x8f",
      0x000000e9 => "\x8e",
      0x000000ea => "\x90",
      0x000000eb => "\x91",
      0x000000ec => "\x93",
      0x000000ed => "\x92",
      0x000000ee => "\x94",
      0x000000ef => "\x95",
      0x000000f1 => "\x96",
      0x000000f2 => "\x98",
      0x000000f3 => "\x97",
      0x000000f4 => "\x99",
      0x000000f5 => "\x9b",
      0x000000f6 => "\x9a",
      0x000000f7 => "\xd6",
      0x000000f8 => "\xbf",
      0x000000f9 => "\x9d",
      0x000000fa => "\x9c",
      0x000000fb => "\x9e",
      0x000000fc => "\x9f",
      0x000000ff => "\xd8",
      0x0000011e => "\xda",
      0x0000011f => "\xdb",
      0x00000130 => "\xdc",
      0x00000131 => "\xdd",
      0x00000152 => "\xce",
      0x00000153 => "\xcf",
      0x0000015e => "\xde",
      0x0000015f => "\xdf",
      0x00000178 => "\xd9",
      0x00000192 => "\xc4",
      0x000002c6 => "\xf6",
      0x000002c7 => "\xff",
      0x000002d8 => "\xf9",
      0x000002d9 => "\xfa",
      0x000002da => "\xfb",
      0x000002db => "\xfe",
      0x000002dc => "\xf7",
      0x000002dd => "\xfd",
      0x000003c0 => "\xb9",
      0x00002013 => "\xd0",
      0x00002014 => "\xd1",
      0x00002018 => "\xd4",
      0x00002019 => "\xd5",
      0x0000201a => "\xe2",
      0x0000201c => "\xd2",
      0x0000201d => "\xd3",
      0x0000201e => "\xe3",
      0x00002020 => "\xa0",
      0x00002021 => "\xe0",
      0x00002022 => "\xa5",
      0x00002026 => "\xc9",
      0x00002030 => "\xe4",
      0x00002122 => "\xaa",
      0x00002126 => "\xbd",
      0x00002202 => "\xb6",
      0x00002206 => "\xc6",
      0x0000220f => "\xb8",
      0x00002211 => "\xb7",
      0x0000221a => "\xc3",
      0x0000221e => "\xb0",
      0x0000222b => "\xba",
      0x00002248 => "\xc5",
      0x00002260 => "\xad",
      0x00002264 => "\xb2",
      0x00002265 => "\xb3",
      0x000025ca => "\xd7",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::MACTURKISH - Conversion routines for MACTURKISH
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for MACTURKISH.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
  
   This charmap has been generated automatically from GNU libiconv
   conversions.
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      81 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      82 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      83 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      84 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      85 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      86 |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      87 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      88 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      89 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      8A |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      8B |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      8C |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      8D |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      8E |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      8F |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      90 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      91 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      92 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      93 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      94 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      95 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      96 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      97 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      98 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      99 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      9A |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      9B |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      9C |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      9D |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      9E |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      9F |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      A0 |  00002020 | DAGGER
      A1 |  000000B0 | DEGREE SIGN
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A7 | SECTION SIGN
      A5 |  00002022 | BULLET
      A6 |  000000B6 | PILCROW SIGN
      A7 |  000000DF | LATIN SMALL LETTER SHARP S
      A8 |  000000AE | REGISTERED SIGN
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  00002122 | TRADE MARK SIGN
      AB |  000000B4 | ACUTE ACCENT
      AC |  000000A8 | DIAERESIS
      AD |  00002260 | NOT EQUAL TO
      AE |  000000C6 | LATIN CAPITAL LETTER AE
      AF |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      B0 |  0000221E | INFINITY
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  00002264 | LESS-THAN OR EQUAL TO
      B3 |  00002265 | GREATER-THAN OR EQUAL TO
      B4 |  000000A5 | YEN SIGN
      B5 |  000000B5 | MICRO SIGN
      B6 |  00002202 | PARTIAL DIFFERENTIAL
      B7 |  00002211 | N-ARY SUMMATION
      B8 |  0000220F | N-ARY PRODUCT
      B9 |  000003C0 | GREEK SMALL LETTER PI
      BA |  0000222B | INTEGRAL
      BB |  000000AA | FEMININE ORDINAL INDICATOR
      BC |  000000BA | MASCULINE ORDINAL INDICATOR
      BD |  00002126 | OHM SIGN
      BE |  000000E6 | LATIN SMALL LETTER AE
      BF |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      C0 |  000000BF | INVERTED QUESTION MARK
      C1 |  000000A1 | INVERTED EXCLAMATION MARK
      C2 |  000000AC | NOT SIGN
      C3 |  0000221A | SQUARE ROOT
      C4 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      C5 |  00002248 | ALMOST EQUAL TO
      C6 |  00002206 | INCREMENT
      C7 |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      C8 |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      C9 |  00002026 | HORIZONTAL ELLIPSIS
      CA |  000000A0 | NO-BREAK SPACE
      CB |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      CC |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      CD |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      CE |  00000152 | LATIN CAPITAL LIGATURE OE
      CF |  00000153 | LATIN SMALL LIGATURE OE
      D0 |  00002013 | EN DASH
      D1 |  00002014 | EM DASH
      D2 |  0000201C | LEFT DOUBLE QUOTATION MARK
      D3 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      D4 |  00002018 | LEFT SINGLE QUOTATION MARK
      D5 |  00002019 | RIGHT SINGLE QUOTATION MARK
      D6 |  000000F7 | DIVISION SIGN
      D7 |  000025CA | LOZENGE
      D8 |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      D9 |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      DA |  0000011E | LATIN CAPITAL LETTER G WITH BREVE
      DB |  0000011F | LATIN SMALL LETTER G WITH BREVE
      DC |  00000130 | LATIN CAPITAL LETTER I WITH DOT ABOVE
      DD |  00000131 | LATIN SMALL LETTER DOTLESS I
      DE |  0000015E | LATIN CAPITAL LETTER S WITH CEDILLA
      DF |  0000015F | LATIN SMALL LETTER S WITH CEDILLA
      E0 |  00002021 | DOUBLE DAGGER
      E1 |  000000B7 | MIDDLE DOT
      E2 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      E3 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      E4 |  00002030 | PER MILLE SIGN
      E5 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      E6 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      E7 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      E8 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      E9 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      EA |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      EB |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      EC |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      ED |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      F1 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      F2 |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      F3 |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      F4 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      F6 |  000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT
      F7 |  000002DC | SMALL TILDE
      F8 |  000000AF | MACRON
      F9 |  000002D8 | BREVE
      FA |  000002D9 | DOT ABOVE
      FB |  000002DA | RING ABOVE
      FC |  000000B8 | CEDILLA
      FD |  000002DD | DOUBLE ACUTE ACCENT
      FE |  000002DB | OGONEK
      FF |  000002C7 | CARON
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_MACTURKISH

    $main::fatpacked{"Locale/RecodeData/MACUKRAINE.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_MACUKRAINE';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for MACUKRAINE.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::MACUKRAINE;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0410,
      0x0411,
      0x0412,
      0x0413,
      0x0414,
      0x0415,
      0x0416,
      0x0417,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0x041d,
      0x041e,
      0x041f,
      0x0420,
      0x0421,
      0x0422,
      0x0423,
      0x0424,
      0x0425,
      0x0426,
      0x0427,
      0x0428,
      0x0429,
      0x042a,
      0x042b,
      0x042c,
      0x042d,
      0x042e,
      0x042f,
      0x2020,
      0x00b0,
      0x0490,
      0x00a3,
      0x00a7,
      0x2022,
      0x00b6,
      0x0406,
      0x00ae,
      0x00a9,
      0x2122,
      0x0402,
      0x0452,
      0x2260,
      0x0403,
      0x0453,
      0x221e,
      0x00b1,
      0x2264,
      0x2265,
      0x0456,
      0x00b5,
      0x0491,
      0x0408,
      0x0404,
      0x0454,
      0x0407,
      0x0457,
      0x0409,
      0x0459,
      0x040a,
      0x045a,
      0x0458,
      0x0405,
      0x00ac,
      0x221a,
      0x0192,
      0x2248,
      0x2206,
      0x00ab,
      0x00bb,
      0x2026,
      0x00a0,
      0x040b,
      0x045b,
      0x040c,
      0x045c,
      0x0455,
      0x2013,
      0x2014,
      0x201c,
      0x201d,
      0x2018,
      0x2019,
      0x00f7,
      0x201e,
      0x040e,
      0x045e,
      0x040f,
      0x045f,
      0x2116,
      0x0401,
      0x0451,
      0x044f,
      0x0430,
      0x0431,
      0x0432,
      0x0433,
      0x0434,
      0x0435,
      0x0436,
      0x0437,
      0x0438,
      0x0439,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0444,
      0x0445,
      0x0446,
      0x0447,
      0x0448,
      0x0449,
      0x044a,
      0x044b,
      0x044c,
      0x044d,
      0x044e,
      0x00a4,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\x92",
      "\xd0\x93",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\x96",
      "\xd0\x97",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xa0",
      "\xd0\xa1",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\xa4",
      "\xd0\xa5",
      "\xd0\xa6",
      "\xd0\xa7",
      "\xd0\xa8",
      "\xd0\xa9",
      "\xd0\xaa",
      "\xd0\xab",
      "\xd0\xac",
      "\xd0\xad",
      "\xd0\xae",
      "\xd0\xaf",
      "\xe2\x80\xa0",
      "\xc2\xb0",
      "\xd2\x90",
      "\xc2\xa3",
      "\xc2\xa7",
      "\xe2\x80\xa2",
      "\xc2\xb6",
      "\xd0\x86",
      "\xc2\xae",
      "\xc2\xa9",
      "\xe2\x84\xa2",
      "\xd0\x82",
      "\xd1\x92",
      "\xe2\x89\xa0",
      "\xd0\x83",
      "\xd1\x93",
      "\xe2\x88\x9e",
      "\xc2\xb1",
      "\xe2\x89\xa4",
      "\xe2\x89\xa5",
      "\xd1\x96",
      "\xc2\xb5",
      "\xd2\x91",
      "\xd0\x88",
      "\xd0\x84",
      "\xd1\x94",
      "\xd0\x87",
      "\xd1\x97",
      "\xd0\x89",
      "\xd1\x99",
      "\xd0\x8a",
      "\xd1\x9a",
      "\xd1\x98",
      "\xd0\x85",
      "\xc2\xac",
      "\xe2\x88\x9a",
      "\xc6\x92",
      "\xe2\x89\x88",
      "\xe2\x88\x86",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x80\xa6",
      "\xc2\xa0",
      "\xd0\x8b",
      "\xd1\x9b",
      "\xd0\x8c",
      "\xd1\x9c",
      "\xd1\x95",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xc3\xb7",
      "\xe2\x80\x9e",
      "\xd0\x8e",
      "\xd1\x9e",
      "\xd0\x8f",
      "\xd1\x9f",
      "\xe2\x84\x96",
      "\xd0\x81",
      "\xd1\x91",
      "\xd1\x8f",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xd0\xb2",
      "\xd0\xb3",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd0\xb6",
      "\xd0\xb7",
      "\xd0\xb8",
      "\xd0\xb9",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd1\x84",
      "\xd1\x85",
      "\xd1\x86",
      "\xd1\x87",
      "\xd1\x88",
      "\xd1\x89",
      "\xd1\x8a",
      "\xd1\x8b",
      "\xd1\x8c",
      "\xd1\x8d",
      "\xd1\x8e",
      "\xc2\xa4",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xca",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xff",
      0x000000a7 => "\xa4",
      0x000000a9 => "\xa9",
      0x000000ab => "\xc7",
      0x000000ac => "\xc2",
      0x000000ae => "\xa8",
      0x000000b0 => "\xa1",
      0x000000b1 => "\xb1",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xa6",
      0x000000bb => "\xc8",
      0x000000f7 => "\xd6",
      0x00000192 => "\xc4",
      0x00000401 => "\xdd",
      0x00000402 => "\xab",
      0x00000403 => "\xae",
      0x00000404 => "\xb8",
      0x00000405 => "\xc1",
      0x00000406 => "\xa7",
      0x00000407 => "\xba",
      0x00000408 => "\xb7",
      0x00000409 => "\xbc",
      0x0000040a => "\xbe",
      0x0000040b => "\xcb",
      0x0000040c => "\xcd",
      0x0000040e => "\xd8",
      0x0000040f => "\xda",
      0x00000410 => "\x80",
      0x00000411 => "\x81",
      0x00000412 => "\x82",
      0x00000413 => "\x83",
      0x00000414 => "\x84",
      0x00000415 => "\x85",
      0x00000416 => "\x86",
      0x00000417 => "\x87",
      0x00000418 => "\x88",
      0x00000419 => "\x89",
      0x0000041a => "\x8a",
      0x0000041b => "\x8b",
      0x0000041c => "\x8c",
      0x0000041d => "\x8d",
      0x0000041e => "\x8e",
      0x0000041f => "\x8f",
      0x00000420 => "\x90",
      0x00000421 => "\x91",
      0x00000422 => "\x92",
      0x00000423 => "\x93",
      0x00000424 => "\x94",
      0x00000425 => "\x95",
      0x00000426 => "\x96",
      0x00000427 => "\x97",
      0x00000428 => "\x98",
      0x00000429 => "\x99",
      0x0000042a => "\x9a",
      0x0000042b => "\x9b",
      0x0000042c => "\x9c",
      0x0000042d => "\x9d",
      0x0000042e => "\x9e",
      0x0000042f => "\x9f",
      0x00000430 => "\xe0",
      0x00000431 => "\xe1",
      0x00000432 => "\xe2",
      0x00000433 => "\xe3",
      0x00000434 => "\xe4",
      0x00000435 => "\xe5",
      0x00000436 => "\xe6",
      0x00000437 => "\xe7",
      0x00000438 => "\xe8",
      0x00000439 => "\xe9",
      0x0000043a => "\xea",
      0x0000043b => "\xeb",
      0x0000043c => "\xec",
      0x0000043d => "\xed",
      0x0000043e => "\xee",
      0x0000043f => "\xef",
      0x00000440 => "\xf0",
      0x00000441 => "\xf1",
      0x00000442 => "\xf2",
      0x00000443 => "\xf3",
      0x00000444 => "\xf4",
      0x00000445 => "\xf5",
      0x00000446 => "\xf6",
      0x00000447 => "\xf7",
      0x00000448 => "\xf8",
      0x00000449 => "\xf9",
      0x0000044a => "\xfa",
      0x0000044b => "\xfb",
      0x0000044c => "\xfc",
      0x0000044d => "\xfd",
      0x0000044e => "\xfe",
      0x0000044f => "\xdf",
      0x00000451 => "\xde",
      0x00000452 => "\xac",
      0x00000453 => "\xaf",
      0x00000454 => "\xb9",
      0x00000455 => "\xcf",
      0x00000456 => "\xb4",
      0x00000457 => "\xbb",
      0x00000458 => "\xc0",
      0x00000459 => "\xbd",
      0x0000045a => "\xbf",
      0x0000045b => "\xcc",
      0x0000045c => "\xce",
      0x0000045e => "\xd9",
      0x0000045f => "\xdb",
      0x00000490 => "\xa2",
      0x00000491 => "\xb6",
      0x00002013 => "\xd0",
      0x00002014 => "\xd1",
      0x00002018 => "\xd4",
      0x00002019 => "\xd5",
      0x0000201c => "\xd2",
      0x0000201d => "\xd3",
      0x0000201e => "\xd7",
      0x00002020 => "\xa0",
      0x00002022 => "\xa5",
      0x00002026 => "\xc9",
      0x00002116 => "\xdc",
      0x00002122 => "\xaa",
      0x00002206 => "\xc6",
      0x0000221a => "\xc3",
      0x0000221e => "\xb0",
      0x00002248 => "\xc5",
      0x00002260 => "\xad",
      0x00002264 => "\xb2",
      0x00002265 => "\xb3",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::MACUKRAINE - Conversion routines for MACUKRAINE
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for MACUKRAINE.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
  
   This charmap has been generated automatically from GNU libiconv
   conversions.
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00000410 | CYRILLIC CAPITAL LETTER A
      81 |  00000411 | CYRILLIC CAPITAL LETTER BE
      82 |  00000412 | CYRILLIC CAPITAL LETTER VE
      83 |  00000413 | CYRILLIC CAPITAL LETTER GHE
      84 |  00000414 | CYRILLIC CAPITAL LETTER DE
      85 |  00000415 | CYRILLIC CAPITAL LETTER IE
      86 |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      87 |  00000417 | CYRILLIC CAPITAL LETTER ZE
      88 |  00000418 | CYRILLIC CAPITAL LETTER I
      89 |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      8A |  0000041A | CYRILLIC CAPITAL LETTER KA
      8B |  0000041B | CYRILLIC CAPITAL LETTER EL
      8C |  0000041C | CYRILLIC CAPITAL LETTER EM
      8D |  0000041D | CYRILLIC CAPITAL LETTER EN
      8E |  0000041E | CYRILLIC CAPITAL LETTER O
      8F |  0000041F | CYRILLIC CAPITAL LETTER PE
      90 |  00000420 | CYRILLIC CAPITAL LETTER ER
      91 |  00000421 | CYRILLIC CAPITAL LETTER ES
      92 |  00000422 | CYRILLIC CAPITAL LETTER TE
      93 |  00000423 | CYRILLIC CAPITAL LETTER U
      94 |  00000424 | CYRILLIC CAPITAL LETTER EF
      95 |  00000425 | CYRILLIC CAPITAL LETTER HA
      96 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      97 |  00000427 | CYRILLIC CAPITAL LETTER CHE
      98 |  00000428 | CYRILLIC CAPITAL LETTER SHA
      99 |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      9A |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
      9B |  0000042B | CYRILLIC CAPITAL LETTER YERU
      9C |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      9D |  0000042D | CYRILLIC CAPITAL LETTER E
      9E |  0000042E | CYRILLIC CAPITAL LETTER YU
      9F |  0000042F | CYRILLIC CAPITAL LETTER YA
      A0 |  00002020 | DAGGER
      A1 |  000000B0 | DEGREE SIGN
      A2 |  00000490 | CYRILLIC CAPITAL LETTER GHE WITH UPTURN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A7 | SECTION SIGN
      A5 |  00002022 | BULLET
      A6 |  000000B6 | PILCROW SIGN
      A7 |  00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
      A8 |  000000AE | REGISTERED SIGN
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  00002122 | TRADE MARK SIGN
      AB |  00000402 | CYRILLIC CAPITAL LETTER DJE
      AC |  00000452 | CYRILLIC SMALL LETTER DJE
      AD |  00002260 | NOT EQUAL TO
      AE |  00000403 | CYRILLIC CAPITAL LETTER GJE
      AF |  00000453 | CYRILLIC SMALL LETTER GJE
      B0 |  0000221E | INFINITY
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  00002264 | LESS-THAN OR EQUAL TO
      B3 |  00002265 | GREATER-THAN OR EQUAL TO
      B4 |  00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
      B5 |  000000B5 | MICRO SIGN
      B6 |  00000491 | CYRILLIC SMALL LETTER GHE WITH UPTURN
      B7 |  00000408 | CYRILLIC CAPITAL LETTER JE
      B8 |  00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE
      B9 |  00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE
      BA |  00000407 | CYRILLIC CAPITAL LETTER YI
      BB |  00000457 | CYRILLIC SMALL LETTER YI
      BC |  00000409 | CYRILLIC CAPITAL LETTER LJE
      BD |  00000459 | CYRILLIC SMALL LETTER LJE
      BE |  0000040A | CYRILLIC CAPITAL LETTER NJE
      BF |  0000045A | CYRILLIC SMALL LETTER NJE
      C0 |  00000458 | CYRILLIC SMALL LETTER JE
      C1 |  00000405 | CYRILLIC CAPITAL LETTER DZE
      C2 |  000000AC | NOT SIGN
      C3 |  0000221A | SQUARE ROOT
      C4 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      C5 |  00002248 | ALMOST EQUAL TO
      C6 |  00002206 | INCREMENT
      C7 |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      C8 |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      C9 |  00002026 | HORIZONTAL ELLIPSIS
      CA |  000000A0 | NO-BREAK SPACE
      CB |  0000040B | CYRILLIC CAPITAL LETTER TSHE
      CC |  0000045B | CYRILLIC SMALL LETTER TSHE
      CD |  0000040C | CYRILLIC CAPITAL LETTER KJE
      CE |  0000045C | CYRILLIC SMALL LETTER KJE
      CF |  00000455 | CYRILLIC SMALL LETTER DZE
      D0 |  00002013 | EN DASH
      D1 |  00002014 | EM DASH
      D2 |  0000201C | LEFT DOUBLE QUOTATION MARK
      D3 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      D4 |  00002018 | LEFT SINGLE QUOTATION MARK
      D5 |  00002019 | RIGHT SINGLE QUOTATION MARK
      D6 |  000000F7 | DIVISION SIGN
      D7 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      D8 |  0000040E | CYRILLIC CAPITAL LETTER SHORT U
      D9 |  0000045E | CYRILLIC SMALL LETTER SHORT U
      DA |  0000040F | CYRILLIC CAPITAL LETTER DZHE
      DB |  0000045F | CYRILLIC SMALL LETTER DZHE
      DC |  00002116 | NUMERO SIGN
      DD |  00000401 | CYRILLIC CAPITAL LETTER IO
      DE |  00000451 | CYRILLIC SMALL LETTER IO
      DF |  0000044F | CYRILLIC SMALL LETTER YA
      E0 |  00000430 | CYRILLIC SMALL LETTER A
      E1 |  00000431 | CYRILLIC SMALL LETTER BE
      E2 |  00000432 | CYRILLIC SMALL LETTER VE
      E3 |  00000433 | CYRILLIC SMALL LETTER GHE
      E4 |  00000434 | CYRILLIC SMALL LETTER DE
      E5 |  00000435 | CYRILLIC SMALL LETTER IE
      E6 |  00000436 | CYRILLIC SMALL LETTER ZHE
      E7 |  00000437 | CYRILLIC SMALL LETTER ZE
      E8 |  00000438 | CYRILLIC SMALL LETTER I
      E9 |  00000439 | CYRILLIC SMALL LETTER SHORT I
      EA |  0000043A | CYRILLIC SMALL LETTER KA
      EB |  0000043B | CYRILLIC SMALL LETTER EL
      EC |  0000043C | CYRILLIC SMALL LETTER EM
      ED |  0000043D | CYRILLIC SMALL LETTER EN
      EE |  0000043E | CYRILLIC SMALL LETTER O
      EF |  0000043F | CYRILLIC SMALL LETTER PE
      F0 |  00000440 | CYRILLIC SMALL LETTER ER
      F1 |  00000441 | CYRILLIC SMALL LETTER ES
      F2 |  00000442 | CYRILLIC SMALL LETTER TE
      F3 |  00000443 | CYRILLIC SMALL LETTER U
      F4 |  00000444 | CYRILLIC SMALL LETTER EF
      F5 |  00000445 | CYRILLIC SMALL LETTER HA
      F6 |  00000446 | CYRILLIC SMALL LETTER TSE
      F7 |  00000447 | CYRILLIC SMALL LETTER CHE
      F8 |  00000448 | CYRILLIC SMALL LETTER SHA
      F9 |  00000449 | CYRILLIC SMALL LETTER SHCHA
      FA |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      FB |  0000044B | CYRILLIC SMALL LETTER YERU
      FC |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      FD |  0000044D | CYRILLIC SMALL LETTER E
      FE |  0000044E | CYRILLIC SMALL LETTER YU
      FF |  000000A4 | CURRENCY SIGN
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_MACUKRAINE

    $main::fatpacked{"Locale/RecodeData/MAC_IS.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_MAC_IS';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for MAC-IS.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::MAC_IS;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c4,
      0x00c5,
      0x00c7,
      0x00c9,
      0x00d1,
      0x00d6,
      0x00dc,
      0x00e1,
      0x00e0,
      0x00e2,
      0x00e4,
      0x00e3,
      0x00e5,
      0x00e7,
      0x00e9,
      0x00e8,
      0x00ea,
      0x00eb,
      0x00ed,
      0x00ec,
      0x00ee,
      0x00ef,
      0x00f1,
      0x00f3,
      0x00f2,
      0x00f4,
      0x00f6,
      0x00f5,
      0x00fa,
      0x00f9,
      0x00fb,
      0x00fc,
      0x2020,
      0x00b0,
      0x00a2,
      0x00a3,
      0x00a7,
      0x2022,
      0x00b6,
      0x00df,
      0x00ae,
      0x00a9,
      0x2122,
      0x00b4,
      0x00a8,
      0x2260,
      0x00c6,
      0x00d8,
      0x221e,
      0x00b1,
      0x2264,
      0x2265,
      0x00a5,
      0x00b5,
      0x2202,
      0x2211,
      0x220f,
      0x03c0,
      0x222b,
      0x00aa,
      0x00ba,
      0x03a9,
      0x00e6,
      0x00f8,
      0x00bf,
      0x00a1,
      0x00ac,
      0x221a,
      0x0192,
      0x2248,
      0x0394,
      0x00ab,
      0x00bb,
      0x2026,
      0x00a0,
      0x00c0,
      0x00c3,
      0x00d5,
      0x0152,
      0x0153,
      0x2014,
      0x2013,
      0x201c,
      0x201d,
      0x2018,
      0x2019,
      0x00f7,
      0x25c6,
      0x00ff,
      0x0178,
      0x2044,
      0x00a4,
      0x0110,
      0x0111,
      0x00de,
      0x00fe,
      0x2021,
      0x00b7,
      0x201a,
      0x201e,
      0x2030,
      0x00c2,
      0x00ca,
      0x00c1,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x00d3,
      0x00d4,
      0xe01e,
      0x00d2,
      0x00da,
      0x00db,
      0x00d9,
      0x0131,
      0xfffd,
      0xfffd,
      0x00af,
      0x02d8,
      0x02d9,
      0x02da,
      0x00b8,
      0x02dd,
      0x02db,
      0x02c7,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x89",
      "\xc3\x91",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc3\xa1",
      "\xc3\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa3",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xa9",
      "\xc3\xa8",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xad",
      "\xc3\xac",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb1",
      "\xc3\xb3",
      "\xc3\xb2",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb5",
      "\xc3\xba",
      "\xc3\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xe2\x80\xa0",
      "\xc2\xb0",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xc2\xa7",
      "\xe2\x80\xa2",
      "\xc2\xb6",
      "\xc3\x9f",
      "\xc2\xae",
      "\xc2\xa9",
      "\xe2\x84\xa2",
      "\xc2\xb4",
      "\xc2\xa8",
      "\xe2\x89\xa0",
      "\xc3\x86",
      "\xc3\x98",
      "\xe2\x88\x9e",
      "\xc2\xb1",
      "\xe2\x89\xa4",
      "\xe2\x89\xa5",
      "\xc2\xa5",
      "\xc2\xb5",
      "\xe2\x88\x82",
      "\xe2\x88\x91",
      "\xe2\x88\x8f",
      "\xcf\x80",
      "\xe2\x88\xab",
      "\xc2\xaa",
      "\xc2\xba",
      "\xce\xa9",
      "\xc3\xa6",
      "\xc3\xb8",
      "\xc2\xbf",
      "\xc2\xa1",
      "\xc2\xac",
      "\xe2\x88\x9a",
      "\xc6\x92",
      "\xe2\x89\x88",
      "\xce\x94",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x80\xa6",
      "\xc2\xa0",
      "\xc3\x80",
      "\xc3\x83",
      "\xc3\x95",
      "\xc5\x92",
      "\xc5\x93",
      "\xe2\x80\x94",
      "\xe2\x80\x93",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xc3\xb7",
      "\xe2\x97\x86",
      "\xc3\xbf",
      "\xc5\xb8",
      "\xe2\x81\x84",
      "\xc2\xa4",
      "\xc4\x90",
      "\xc4\x91",
      "\xc3\x9e",
      "\xc3\xbe",
      "\xe2\x80\xa1",
      "\xc2\xb7",
      "\xe2\x80\x9a",
      "\xe2\x80\x9e",
      "\xe2\x80\xb0",
      "\xc3\x82",
      "\xc3\x8a",
      "\xc3\x81",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\xc3\x93",
      "\xc3\x94",
      "\xee\x80\x9e",
      "\xc3\x92",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x99",
      "\xc4\xb1",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc2\xaf",
      "\xcb\x98",
      "\xcb\x99",
      "\xcb\x9a",
      "\xc2\xb8",
      "\xcb\x9d",
      "\xcb\x9b",
      "\xcb\x87",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xca",
      0x000000a1 => "\xc1",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xdb",
      0x000000a5 => "\xb4",
      0x000000a7 => "\xa4",
      0x000000a8 => "\xac",
      0x000000a9 => "\xa9",
      0x000000aa => "\xbb",
      0x000000ab => "\xc7",
      0x000000ac => "\xc2",
      0x000000ae => "\xa8",
      0x000000af => "\xf8",
      0x000000b0 => "\xa1",
      0x000000b1 => "\xb1",
      0x000000b4 => "\xab",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xa6",
      0x000000b7 => "\xe1",
      0x000000b8 => "\xfc",
      0x000000ba => "\xbc",
      0x000000bb => "\xc8",
      0x000000bf => "\xc0",
      0x000000c0 => "\xcb",
      0x000000c1 => "\xe7",
      0x000000c2 => "\xe5",
      0x000000c3 => "\xcc",
      0x000000c4 => "\x80",
      0x000000c5 => "\x81",
      0x000000c6 => "\xae",
      0x000000c7 => "\x82",
      0x000000c8 => "\xe9",
      0x000000c9 => "\x83",
      0x000000ca => "\xe6",
      0x000000cb => "\xe8",
      0x000000cc => "\xed",
      0x000000cd => "\xea",
      0x000000ce => "\xeb",
      0x000000cf => "\xec",
      0x000000d1 => "\x84",
      0x000000d2 => "\xf1",
      0x000000d3 => "\xee",
      0x000000d4 => "\xef",
      0x000000d5 => "\xcd",
      0x000000d6 => "\x85",
      0x000000d8 => "\xaf",
      0x000000d9 => "\xf4",
      0x000000da => "\xf2",
      0x000000db => "\xf3",
      0x000000dc => "\x86",
      0x000000de => "\xde",
      0x000000df => "\xa7",
      0x000000e0 => "\x88",
      0x000000e1 => "\x87",
      0x000000e2 => "\x89",
      0x000000e3 => "\x8b",
      0x000000e4 => "\x8a",
      0x000000e5 => "\x8c",
      0x000000e6 => "\xbe",
      0x000000e7 => "\x8d",
      0x000000e8 => "\x8f",
      0x000000e9 => "\x8e",
      0x000000ea => "\x90",
      0x000000eb => "\x91",
      0x000000ec => "\x93",
      0x000000ed => "\x92",
      0x000000ee => "\x94",
      0x000000ef => "\x95",
      0x000000f1 => "\x96",
      0x000000f2 => "\x98",
      0x000000f3 => "\x97",
      0x000000f4 => "\x99",
      0x000000f5 => "\x9b",
      0x000000f6 => "\x9a",
      0x000000f7 => "\xd6",
      0x000000f8 => "\xbf",
      0x000000f9 => "\x9d",
      0x000000fa => "\x9c",
      0x000000fb => "\x9e",
      0x000000fc => "\x9f",
      0x000000fe => "\xdf",
      0x000000ff => "\xd8",
      0x00000110 => "\xdc",
      0x00000111 => "\xdd",
      0x00000131 => "\xf5",
      0x00000152 => "\xce",
      0x00000153 => "\xcf",
      0x00000178 => "\xd9",
      0x00000192 => "\xc4",
      0x000002c7 => "\xff",
      0x000002d8 => "\xf9",
      0x000002d9 => "\xfa",
      0x000002da => "\xfb",
      0x000002db => "\xfe",
      0x000002dd => "\xfd",
      0x00000394 => "\xc6",
      0x000003a9 => "\xbd",
      0x000003c0 => "\xb9",
      0x00002013 => "\xd1",
      0x00002014 => "\xd0",
      0x00002018 => "\xd4",
      0x00002019 => "\xd5",
      0x0000201a => "\xe2",
      0x0000201c => "\xd2",
      0x0000201d => "\xd3",
      0x0000201e => "\xe3",
      0x00002020 => "\xa0",
      0x00002021 => "\xe0",
      0x00002022 => "\xa5",
      0x00002026 => "\xc9",
      0x00002030 => "\xe4",
      0x00002044 => "\xda",
      0x00002122 => "\xaa",
      0x00002202 => "\xb6",
      0x0000220f => "\xb8",
      0x00002211 => "\xb7",
      0x0000221a => "\xc3",
      0x0000221e => "\xb0",
      0x0000222b => "\xba",
      0x00002248 => "\xc5",
      0x00002260 => "\xad",
      0x00002264 => "\xb2",
      0x00002265 => "\xb3",
      0x000025c6 => "\xd7",
      0x0000e01e => "\xf0",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::MAC_IS - Conversion routines for MAC-IS
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for MAC-IS.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      81 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      82 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      83 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      84 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      85 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      86 |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      87 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      88 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      89 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      8A |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      8B |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      8C |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      8D |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      8E |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      8F |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      90 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      91 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      92 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      93 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      94 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      95 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      96 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      97 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      98 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      99 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      9A |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      9B |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      9C |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      9D |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      9E |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      9F |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      A0 |  00002020 | DAGGER
      A1 |  000000B0 | DEGREE SIGN
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A7 | SECTION SIGN
      A5 |  00002022 | BULLET
      A6 |  000000B6 | PILCROW SIGN
      A7 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      A8 |  000000AE | REGISTERED SIGN
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  00002122 | TRADE MARK SIGN
      AB |  000000B4 | ACUTE ACCENT
      AC |  000000A8 | DIAERESIS
      AD |  00002260 | NOT EQUAL TO
      AE |  000000C6 | LATIN CAPITAL LETTER AE
      AF |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      B0 |  0000221E | INFINITY
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  00002264 | LESS-THAN OR EQUAL TO
      B3 |  00002265 | GREATER-THAN OR EQUAL TO
      B4 |  000000A5 | YEN SIGN
      B5 |  000000B5 | MICRO SIGN
      B6 |  00002202 | PARTIAL DIFFERENTIAL
      B7 |  00002211 | N-ARY SUMMATION
      B8 |  0000220F | N-ARY PRODUCT
      B9 |  000003C0 | GREEK SMALL LETTER PI
      BA |  0000222B | INTEGRAL
      BB |  000000AA | FEMININE ORDINAL INDICATOR
      BC |  000000BA | MASCULINE ORDINAL INDICATOR
      BD |  000003A9 | GREEK CAPITAL LETTER OMEGA
      BE |  000000E6 | LATIN SMALL LETTER AE
      BF |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      C0 |  000000BF | INVERTED QUESTION MARK
      C1 |  000000A1 | INVERTED EXCLAMATION MARK
      C2 |  000000AC | NOT SIGN
      C3 |  0000221A | SQUARE ROOT
      C4 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      C5 |  00002248 | ALMOST EQUAL TO
      C6 |  00000394 | GREEK CAPITAL LETTER DELTA
      C7 |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      C8 |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      C9 |  00002026 | HORIZONTAL ELLIPSIS
      CA |  000000A0 | NO-BREAK SPACE
      CB |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      CC |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      CD |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      CE |  00000152 | LATIN CAPITAL LIGATURE OE
      CF |  00000153 | LATIN SMALL LIGATURE OE
      D0 |  00002014 | EM DASH
      D1 |  00002013 | EN DASH
      D2 |  0000201C | LEFT DOUBLE QUOTATION MARK
      D3 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      D4 |  00002018 | LEFT SINGLE QUOTATION MARK
      D5 |  00002019 | RIGHT SINGLE QUOTATION MARK
      D6 |  000000F7 | DIVISION SIGN
      D7 |  000025C6 | BLACK DIAMOND
      D8 |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      D9 |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      DA |  00002044 | FRACTION SLASH
      DB |  000000A4 | CURRENCY SIGN
      DC |  00000110 | LATIN CAPITAL LETTER D WITH STROKE
      DD |  00000111 | LATIN SMALL LETTER D WITH STROKE
      DE |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      DF |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      E0 |  00002021 | DOUBLE DAGGER
      E1 |  000000B7 | MIDDLE DOT
      E2 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      E3 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      E4 |  00002030 | PER MILLE SIGN
      E5 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      E6 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      E7 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      E8 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      E9 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      EA |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      EB |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      EC |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      ED |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      F0 |  0000E01E | APPLE LOGO (Macintosh_F0)
      F1 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      F2 |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      F3 |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      F4 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      F5 |  00000131 | LATIN SMALL LETTER DOTLESS I
      F8 |  000000AF | MACRON
      F9 |  000002D8 | BREVE
      FA |  000002D9 | DOT ABOVE (Mandarin Chinese light tone)
      FB |  000002DA | RING ABOVE
      FC |  000000B8 | CEDILLA
      FD |  000002DD | DOUBLE ACUTE ACCENT
      FE |  000002DB | OGONEK
      FF |  000002C7 | CARON (Mandarin Chinese third tone)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_MAC_IS

    $main::fatpacked{"Locale/RecodeData/MAC_SAMI.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_MAC_SAMI';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for MAC-SAMI.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::MAC_SAMI;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00c4,
      0x00c5,
      0x00c7,
      0x00c9,
      0x00d1,
      0x00d6,
      0x00dc,
      0x00e1,
      0x00e0,
      0x00e2,
      0x00e4,
      0x00e3,
      0x00e5,
      0x00e7,
      0x00e9,
      0x00e8,
      0x00ea,
      0x00eb,
      0x00ed,
      0x00ec,
      0x00ee,
      0x00ef,
      0x00f1,
      0x00f3,
      0x00f2,
      0x00f4,
      0x00f6,
      0x00f5,
      0x00fa,
      0x00f9,
      0x00fb,
      0x00fc,
      0x00dd,
      0x00b0,
      0x010c,
      0x00a3,
      0x00a7,
      0x2022,
      0x00b6,
      0x00df,
      0x00ae,
      0x00a9,
      0x2122,
      0x00b4,
      0x00a8,
      0x2260,
      0x00c6,
      0x00d8,
      0x0110,
      0x014a,
      0x821e,
      0x821f,
      0x0160,
      0x0166,
      0x2202,
      0x017d,
      0x010d,
      0x0111,
      0x014b,
      0x0161,
      0x0167,
      0x017e,
      0x00e6,
      0x00f8,
      0x00bf,
      0x00a1,
      0x00ac,
      0x221a,
      0x0192,
      0x2248,
      0x2206,
      0x00ab,
      0x00bb,
      0x2026,
      0x00a0,
      0x00c0,
      0x00c3,
      0x00d5,
      0x0152,
      0x0153,
      0x2013,
      0x2014,
      0x201c,
      0x201d,
      0x2018,
      0x2019,
      0x00f7,
      0x25ca,
      0x00ff,
      0x0178,
      0x2044,
      0x00a4,
      0x00d0,
      0x00f0,
      0x00de,
      0x00fe,
      0x00fd,
      0x00b7,
      0x201a,
      0x201e,
      0x2030,
      0x00c2,
      0x00ca,
      0x00c1,
      0x00cb,
      0x00c8,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00cc,
      0x00d3,
      0x00d4,
      0xf8ff,
      0x00d2,
      0x00da,
      0x00db,
      0x00d9,
      0x0131,
      0x01b7,
      0x0292,
      0x01ee,
      0x01ef,
      0x01e4,
      0x01e5,
      0x01e6,
      0x01e7,
      0x01e8,
      0x01e9,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x89",
      "\xc3\x91",
      "\xc3\x96",
      "\xc3\x9c",
      "\xc3\xa1",
      "\xc3\xa0",
      "\xc3\xa2",
      "\xc3\xa4",
      "\xc3\xa3",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xa9",
      "\xc3\xa8",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xad",
      "\xc3\xac",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb1",
      "\xc3\xb3",
      "\xc3\xb2",
      "\xc3\xb4",
      "\xc3\xb6",
      "\xc3\xb5",
      "\xc3\xba",
      "\xc3\xb9",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\x9d",
      "\xc2\xb0",
      "\xc4\x8c",
      "\xc2\xa3",
      "\xc2\xa7",
      "\xe2\x80\xa2",
      "\xc2\xb6",
      "\xc3\x9f",
      "\xc2\xae",
      "\xc2\xa9",
      "\xe2\x84\xa2",
      "\xc2\xb4",
      "\xc2\xa8",
      "\xe2\x89\xa0",
      "\xc3\x86",
      "\xc3\x98",
      "\xc4\x90",
      "\xc5\x8a",
      "\xe8\x88\x9e",
      "\xe8\x88\x9f",
      "\xc5\xa0",
      "\xc5\xa6",
      "\xe2\x88\x82",
      "\xc5\xbd",
      "\xc4\x8d",
      "\xc4\x91",
      "\xc5\x8b",
      "\xc5\xa1",
      "\xc5\xa7",
      "\xc5\xbe",
      "\xc3\xa6",
      "\xc3\xb8",
      "\xc2\xbf",
      "\xc2\xa1",
      "\xc2\xac",
      "\xe2\x88\x9a",
      "\xc6\x92",
      "\xe2\x89\x88",
      "\xe2\x88\x86",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x80\xa6",
      "\xc2\xa0",
      "\xc3\x80",
      "\xc3\x83",
      "\xc3\x95",
      "\xc5\x92",
      "\xc5\x93",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xc3\xb7",
      "\xe2\x97\x8a",
      "\xc3\xbf",
      "\xc5\xb8",
      "\xe2\x81\x84",
      "\xc2\xa4",
      "\xc3\x90",
      "\xc3\xb0",
      "\xc3\x9e",
      "\xc3\xbe",
      "\xc3\xbd",
      "\xc2\xb7",
      "\xe2\x80\x9a",
      "\xe2\x80\x9e",
      "\xe2\x80\xb0",
      "\xc3\x82",
      "\xc3\x8a",
      "\xc3\x81",
      "\xc3\x8b",
      "\xc3\x88",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x8c",
      "\xc3\x93",
      "\xc3\x94",
      "\xef\xa3\xbf",
      "\xc3\x92",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x99",
      "\xc4\xb1",
      "\xc6\xb7",
      "\xca\x92",
      "\xc7\xae",
      "\xc7\xaf",
      "\xc7\xa4",
      "\xc7\xa5",
      "\xc7\xa6",
      "\xc7\xa7",
      "\xc7\xa8",
      "\xc7\xa9",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xca",
      0x000000a1 => "\xc1",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xdb",
      0x000000a7 => "\xa4",
      0x000000a8 => "\xac",
      0x000000a9 => "\xa9",
      0x000000ab => "\xc7",
      0x000000ac => "\xc2",
      0x000000ae => "\xa8",
      0x000000b0 => "\xa1",
      0x000000b4 => "\xab",
      0x000000b6 => "\xa6",
      0x000000b7 => "\xe1",
      0x000000bb => "\xc8",
      0x000000bf => "\xc0",
      0x000000c0 => "\xcb",
      0x000000c1 => "\xe7",
      0x000000c2 => "\xe5",
      0x000000c3 => "\xcc",
      0x000000c4 => "\x80",
      0x000000c5 => "\x81",
      0x000000c6 => "\xae",
      0x000000c7 => "\x82",
      0x000000c8 => "\xe9",
      0x000000c9 => "\x83",
      0x000000ca => "\xe6",
      0x000000cb => "\xe8",
      0x000000cc => "\xed",
      0x000000cd => "\xea",
      0x000000ce => "\xeb",
      0x000000cf => "\xec",
      0x000000d0 => "\xdc",
      0x000000d1 => "\x84",
      0x000000d2 => "\xf1",
      0x000000d3 => "\xee",
      0x000000d4 => "\xef",
      0x000000d5 => "\xcd",
      0x000000d6 => "\x85",
      0x000000d8 => "\xaf",
      0x000000d9 => "\xf4",
      0x000000da => "\xf2",
      0x000000db => "\xf3",
      0x000000dc => "\x86",
      0x000000dd => "\xa0",
      0x000000de => "\xde",
      0x000000df => "\xa7",
      0x000000e0 => "\x88",
      0x000000e1 => "\x87",
      0x000000e2 => "\x89",
      0x000000e3 => "\x8b",
      0x000000e4 => "\x8a",
      0x000000e5 => "\x8c",
      0x000000e6 => "\xbe",
      0x000000e7 => "\x8d",
      0x000000e8 => "\x8f",
      0x000000e9 => "\x8e",
      0x000000ea => "\x90",
      0x000000eb => "\x91",
      0x000000ec => "\x93",
      0x000000ed => "\x92",
      0x000000ee => "\x94",
      0x000000ef => "\x95",
      0x000000f0 => "\xdd",
      0x000000f1 => "\x96",
      0x000000f2 => "\x98",
      0x000000f3 => "\x97",
      0x000000f4 => "\x99",
      0x000000f5 => "\x9b",
      0x000000f6 => "\x9a",
      0x000000f7 => "\xd6",
      0x000000f8 => "\xbf",
      0x000000f9 => "\x9d",
      0x000000fa => "\x9c",
      0x000000fb => "\x9e",
      0x000000fc => "\x9f",
      0x000000fd => "\xe0",
      0x000000fe => "\xdf",
      0x000000ff => "\xd8",
      0x0000010c => "\xa2",
      0x0000010d => "\xb8",
      0x00000110 => "\xb0",
      0x00000111 => "\xb9",
      0x00000131 => "\xf5",
      0x0000014a => "\xb1",
      0x0000014b => "\xba",
      0x00000152 => "\xce",
      0x00000153 => "\xcf",
      0x00000160 => "\xb4",
      0x00000161 => "\xbb",
      0x00000166 => "\xb5",
      0x00000167 => "\xbc",
      0x00000178 => "\xd9",
      0x0000017d => "\xb7",
      0x0000017e => "\xbd",
      0x00000192 => "\xc4",
      0x000001b7 => "\xf6",
      0x000001e4 => "\xfa",
      0x000001e5 => "\xfb",
      0x000001e6 => "\xfc",
      0x000001e7 => "\xfd",
      0x000001e8 => "\xfe",
      0x000001e9 => "\xff",
      0x000001ee => "\xf8",
      0x000001ef => "\xf9",
      0x00000292 => "\xf7",
      0x00002013 => "\xd0",
      0x00002014 => "\xd1",
      0x00002018 => "\xd4",
      0x00002019 => "\xd5",
      0x0000201a => "\xe2",
      0x0000201c => "\xd2",
      0x0000201d => "\xd3",
      0x0000201e => "\xe3",
      0x00002022 => "\xa5",
      0x00002026 => "\xc9",
      0x00002030 => "\xe4",
      0x00002044 => "\xda",
      0x00002122 => "\xaa",
      0x00002202 => "\xb6",
      0x00002206 => "\xc6",
      0x0000221a => "\xc3",
      0x00002248 => "\xc5",
      0x00002260 => "\xad",
      0x000025ca => "\xd7",
      0x0000821e => "\xb2",
      0x0000821f => "\xb3",
      0x0000f8ff => "\xf0",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::MAC_SAMI - Conversion routines for MAC-SAMI
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for MAC-SAMI.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   source:  http://www.indigo.ie/egt/standards/se/mac-sami.html
   author:  Regnor Jernsletten E<lt>Regnor.Jernsletten@sami.uit.noE<gt>
   date:    2001-07-31
   comment: Macintosh sami standard.
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL
      01 |  00000001 | START OF HEADING
      02 |  00000002 | START OF TEXT
      03 |  00000003 | END OF TEXT
      04 |  00000004 | END OF TRANSMISSION
      05 |  00000005 | ENQUIRY
      06 |  00000006 | ACKNOWLEDGE
      07 |  00000007 | BELL
      08 |  00000008 | BACKSPACE
      09 |  00000009 | HORIZONTAL TABULATION
      0A |  0000000A | LINE FEED
      0B |  0000000B | VERTICAL TABULATION
      0C |  0000000C | FORM FEED
      0D |  0000000D | CARRIAGE RETURN
      0E |  0000000E | SHIFT OUT
      0F |  0000000F | SHIFT IN
      10 |  00000010 | DATA LINK ESCAPE
      11 |  00000011 | DEVICE CONTROL ONE
      12 |  00000012 | DEVICE CONTROL TWO
      13 |  00000013 | DEVICE CONTROL THREE
      14 |  00000014 | DEVICE CONTROL FOUR
      15 |  00000015 | NEGATIVE ACKNOWLEDGE
      16 |  00000016 | SYNCHRONOUS IDLE
      17 |  00000017 | END OF TRANSMISSION BLOCK
      18 |  00000018 | CANCEL
      19 |  00000019 | END OF MEDIUM
      1A |  0000001A | SUBSTITUTE
      1B |  0000001B | ESCAPE
      1C |  0000001C | FILE SEPARATOR
      1D |  0000001D | GROUP SEPARATOR
      1E |  0000001E | RECORD SEPARATOR
      1F |  0000001F | UNIT SEPARATOR
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE
      80 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      81 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      82 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      83 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      84 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      85 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      86 |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      87 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      88 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      89 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      8A |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      8B |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      8C |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      8D |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      8E |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      8F |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      90 |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      91 |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      92 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      93 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      94 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      95 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      96 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      97 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      98 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      99 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      9A |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      9B |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      9C |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      9D |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      9E |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      9F |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      A0 |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      A1 |  000000B0 | DEGREE SIGN
      A2 |  0000010C | LATIN CAPITAL LETTER C WITH CARON
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A7 | SECTION SIGN
      A5 |  00002022 | BULLET
      A6 |  000000B6 | PILCROW SIGN
      A7 |  000000DF | LATIN SMALL LETTER SHARP S (German)
      A8 |  000000AE | REGISTERED SIGN
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  00002122 | TRADE MARK SIGN
      AB |  000000B4 | ACUTE ACCENT
      AC |  000000A8 | DIAERESIS
      AD |  00002260 | NOT EQUAL TO
      AE |  000000C6 | LATIN CAPITAL LETTER AE
      AF |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      B0 |  00000110 | LATIN CAPITAL LETTER D WITH STROKE
      B1 |  0000014A | LATIN CAPITAL LETTER ENG
      B2 |  0000821E | LATIN CAPITAL LETTER H WITH CARON
      B3 |  0000821F | LATIN SMALL LETTER H WITH CARON
      B4 |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      B5 |  00000166 | LATIN CAPITAL LETTER T WITH STROKE
      B6 |  00002202 | PARTIAL DIFFERENTIAL
      B7 |  0000017D | LATIN CAPITAL LETTER Z WITH CARON
      B8 |  0000010D | LATIN SMALL LETTER C WITH CARON
      B9 |  00000111 | LATIN SMALL LETTER D WITH STROKE
      BA |  0000014B | LATIN SMALL LETTER ENG
      BB |  00000161 | LATIN SMALL LETTER S WITH CARON
      BC |  00000167 | LATIN SMALL LETTER T WITH STROKE
      BD |  0000017E | LATIN SMALL LETTER Z WITH CARON
      BE |  000000E6 | LATIN SMALL LETTER AE
      BF |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      C0 |  000000BF | INVERTED QUESTION MARK
      C1 |  000000A1 | INVERTED EXCLAMATION MARK
      C2 |  000000AC | NOT SIGN
      C3 |  0000221A | SQUARE ROOT
      C4 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      C5 |  00002248 | ALMOST EQUAL TO
      C6 |  00002206 | INCREMENT
      C7 |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      C8 |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      C9 |  00002026 | HORIZONTAL ELLIPSIS
      CA |  000000A0 | NO-BREAK SPACE
      CB |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      CC |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      CD |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      CE |  00000152 | LATIN CAPITAL LETTER LIGATURE OE
      CF |  00000153 | LATIN SMALL LETTER LIGATURE OE
      D0 |  00002013 | EN DASH
      D1 |  00002014 | EM DASH
      D2 |  0000201C | LEFT DOUBLE QUOTATION MARK
      D3 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      D4 |  00002018 | LEFT SINGLE QUOTATION MARK
      D5 |  00002019 | RIGHT SINGLE QUOTATION MARK
      D6 |  000000F7 | DIVISION SIGN
      D7 |  000025CA | LOZENGE
      D8 |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
      D9 |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      DA |  00002044 | FRACTION SLASH
      DB |  000000A4 | CURRENCY SIGN
      DC |  000000D0 | LATIN CAPITAL LETTER ETH
      DD |  000000F0 | LATIN SMALL LETTER ETH
      DE |  000000DE | LATIN CAPITAL LETTER THORN
      DF |  000000FE | LATIN SMALL LETTER THORN
      E0 |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      E1 |  000000B7 | MIDDLE DOT
      E2 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      E3 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      E4 |  00002030 | PER MILLE SIGN
      E5 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      E6 |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      E7 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      E8 |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      E9 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      EA |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      EB |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      EC |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      ED |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      EE |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      EF |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      F0 |  0000F8FF | APPLE SIGN
      F1 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      F2 |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      F3 |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      F4 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      F5 |  00000131 | LATIN SMALL LETTER DOTLESS I
      F6 |  000001B7 | LATIN CAPITAL LETTER EZH
      F7 |  00000292 | LATIN SMALL LETTER EZH
      F8 |  000001EE | LATIN CAPITAL LETTER EZH WITH CARON
      F9 |  000001EF | LATIN SMALL LETTER EZH WITH CARON
      FA |  000001E4 | LATIN CAPITAL LETTER G WITH STROKE
      FB |  000001E5 | LATIN SMALLL LETTER G WITH STROKE
      FC |  000001E6 | LATIN CAPITAL LETTER G WITH CARON
      FD |  000001E7 | LATIN SMALL LETTER G WITH CARON
      FE |  000001E8 | LATIN CAPITAL LETTER K WITH CARON
      FF |  000001E9 | LATIN SMALL LETTER K WITH CARON
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_MAC_SAMI

    $main::fatpacked{"Locale/RecodeData/MAC_UK.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_MAC_UK';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for MAC-UK.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::MAC_UK;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x0410,
      0x0411,
      0x0412,
      0x0413,
      0x0414,
      0x0415,
      0x0416,
      0x0417,
      0x0418,
      0x0419,
      0x041a,
      0x041b,
      0x041c,
      0x041d,
      0x041e,
      0x041f,
      0x0420,
      0x0421,
      0x0422,
      0x0423,
      0x0424,
      0x0425,
      0x0426,
      0x0427,
      0x0428,
      0x0429,
      0x042a,
      0x042b,
      0x042c,
      0x042d,
      0x042e,
      0x042f,
      0x2020,
      0x00b0,
      0x0490,
      0x00a3,
      0x00a7,
      0x2022,
      0x00b6,
      0x0406,
      0x00ae,
      0x00a9,
      0x2122,
      0x0402,
      0x0452,
      0x2260,
      0x0403,
      0x0453,
      0x221e,
      0x00b1,
      0x2264,
      0x2265,
      0x0456,
      0x00b5,
      0x0491,
      0x0408,
      0x0404,
      0x0454,
      0x0407,
      0x0457,
      0x0409,
      0x0459,
      0x040a,
      0x045a,
      0x0458,
      0x0405,
      0x00ac,
      0x221a,
      0x0192,
      0x2248,
      0x2206,
      0x00ab,
      0x00bb,
      0x2026,
      0x00a0,
      0x040b,
      0x045b,
      0x040c,
      0x045c,
      0x0455,
      0x2013,
      0x2014,
      0x201c,
      0x201d,
      0x2018,
      0x2019,
      0x00f7,
      0x201e,
      0x040e,
      0x045e,
      0x040f,
      0x045f,
      0x2116,
      0x0401,
      0x0451,
      0x044f,
      0x0430,
      0x0431,
      0x0432,
      0x0433,
      0x0434,
      0x0435,
      0x0436,
      0x0437,
      0x0438,
      0x0439,
      0x043a,
      0x043b,
      0x043c,
      0x043d,
      0x043e,
      0x043f,
      0x0440,
      0x0441,
      0x0442,
      0x0443,
      0x0444,
      0x0445,
      0x0446,
      0x0447,
      0x0448,
      0x0449,
      0x044a,
      0x044b,
      0x044c,
      0x044d,
      0x044e,
      0x00a4,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xd0\x90",
      "\xd0\x91",
      "\xd0\x92",
      "\xd0\x93",
      "\xd0\x94",
      "\xd0\x95",
      "\xd0\x96",
      "\xd0\x97",
      "\xd0\x98",
      "\xd0\x99",
      "\xd0\x9a",
      "\xd0\x9b",
      "\xd0\x9c",
      "\xd0\x9d",
      "\xd0\x9e",
      "\xd0\x9f",
      "\xd0\xa0",
      "\xd0\xa1",
      "\xd0\xa2",
      "\xd0\xa3",
      "\xd0\xa4",
      "\xd0\xa5",
      "\xd0\xa6",
      "\xd0\xa7",
      "\xd0\xa8",
      "\xd0\xa9",
      "\xd0\xaa",
      "\xd0\xab",
      "\xd0\xac",
      "\xd0\xad",
      "\xd0\xae",
      "\xd0\xaf",
      "\xe2\x80\xa0",
      "\xc2\xb0",
      "\xd2\x90",
      "\xc2\xa3",
      "\xc2\xa7",
      "\xe2\x80\xa2",
      "\xc2\xb6",
      "\xd0\x86",
      "\xc2\xae",
      "\xc2\xa9",
      "\xe2\x84\xa2",
      "\xd0\x82",
      "\xd1\x92",
      "\xe2\x89\xa0",
      "\xd0\x83",
      "\xd1\x93",
      "\xe2\x88\x9e",
      "\xc2\xb1",
      "\xe2\x89\xa4",
      "\xe2\x89\xa5",
      "\xd1\x96",
      "\xc2\xb5",
      "\xd2\x91",
      "\xd0\x88",
      "\xd0\x84",
      "\xd1\x94",
      "\xd0\x87",
      "\xd1\x97",
      "\xd0\x89",
      "\xd1\x99",
      "\xd0\x8a",
      "\xd1\x9a",
      "\xd1\x98",
      "\xd0\x85",
      "\xc2\xac",
      "\xe2\x88\x9a",
      "\xc6\x92",
      "\xe2\x89\x88",
      "\xe2\x88\x86",
      "\xc2\xab",
      "\xc2\xbb",
      "\xe2\x80\xa6",
      "\xc2\xa0",
      "\xd0\x8b",
      "\xd1\x9b",
      "\xd0\x8c",
      "\xd1\x9c",
      "\xd1\x95",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xc3\xb7",
      "\xe2\x80\x9e",
      "\xd0\x8e",
      "\xd1\x9e",
      "\xd0\x8f",
      "\xd1\x9f",
      "\xe2\x84\x96",
      "\xd0\x81",
      "\xd1\x91",
      "\xd1\x8f",
      "\xd0\xb0",
      "\xd0\xb1",
      "\xd0\xb2",
      "\xd0\xb3",
      "\xd0\xb4",
      "\xd0\xb5",
      "\xd0\xb6",
      "\xd0\xb7",
      "\xd0\xb8",
      "\xd0\xb9",
      "\xd0\xba",
      "\xd0\xbb",
      "\xd0\xbc",
      "\xd0\xbd",
      "\xd0\xbe",
      "\xd0\xbf",
      "\xd1\x80",
      "\xd1\x81",
      "\xd1\x82",
      "\xd1\x83",
      "\xd1\x84",
      "\xd1\x85",
      "\xd1\x86",
      "\xd1\x87",
      "\xd1\x88",
      "\xd1\x89",
      "\xd1\x8a",
      "\xd1\x8b",
      "\xd1\x8c",
      "\xd1\x8d",
      "\xd1\x8e",
      "\xc2\xa4",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xca",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xff",
      0x000000a7 => "\xa4",
      0x000000a9 => "\xa9",
      0x000000ab => "\xc7",
      0x000000ac => "\xc2",
      0x000000ae => "\xa8",
      0x000000b0 => "\xa1",
      0x000000b1 => "\xb1",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xa6",
      0x000000bb => "\xc8",
      0x000000f7 => "\xd6",
      0x00000192 => "\xc4",
      0x00000401 => "\xdd",
      0x00000402 => "\xab",
      0x00000403 => "\xae",
      0x00000404 => "\xb8",
      0x00000405 => "\xc1",
      0x00000406 => "\xa7",
      0x00000407 => "\xba",
      0x00000408 => "\xb7",
      0x00000409 => "\xbc",
      0x0000040a => "\xbe",
      0x0000040b => "\xcb",
      0x0000040c => "\xcd",
      0x0000040e => "\xd8",
      0x0000040f => "\xda",
      0x00000410 => "\x80",
      0x00000411 => "\x81",
      0x00000412 => "\x82",
      0x00000413 => "\x83",
      0x00000414 => "\x84",
      0x00000415 => "\x85",
      0x00000416 => "\x86",
      0x00000417 => "\x87",
      0x00000418 => "\x88",
      0x00000419 => "\x89",
      0x0000041a => "\x8a",
      0x0000041b => "\x8b",
      0x0000041c => "\x8c",
      0x0000041d => "\x8d",
      0x0000041e => "\x8e",
      0x0000041f => "\x8f",
      0x00000420 => "\x90",
      0x00000421 => "\x91",
      0x00000422 => "\x92",
      0x00000423 => "\x93",
      0x00000424 => "\x94",
      0x00000425 => "\x95",
      0x00000426 => "\x96",
      0x00000427 => "\x97",
      0x00000428 => "\x98",
      0x00000429 => "\x99",
      0x0000042a => "\x9a",
      0x0000042b => "\x9b",
      0x0000042c => "\x9c",
      0x0000042d => "\x9d",
      0x0000042e => "\x9e",
      0x0000042f => "\x9f",
      0x00000430 => "\xe0",
      0x00000431 => "\xe1",
      0x00000432 => "\xe2",
      0x00000433 => "\xe3",
      0x00000434 => "\xe4",
      0x00000435 => "\xe5",
      0x00000436 => "\xe6",
      0x00000437 => "\xe7",
      0x00000438 => "\xe8",
      0x00000439 => "\xe9",
      0x0000043a => "\xea",
      0x0000043b => "\xeb",
      0x0000043c => "\xec",
      0x0000043d => "\xed",
      0x0000043e => "\xee",
      0x0000043f => "\xef",
      0x00000440 => "\xf0",
      0x00000441 => "\xf1",
      0x00000442 => "\xf2",
      0x00000443 => "\xf3",
      0x00000444 => "\xf4",
      0x00000445 => "\xf5",
      0x00000446 => "\xf6",
      0x00000447 => "\xf7",
      0x00000448 => "\xf8",
      0x00000449 => "\xf9",
      0x0000044a => "\xfa",
      0x0000044b => "\xfb",
      0x0000044c => "\xfc",
      0x0000044d => "\xfd",
      0x0000044e => "\xfe",
      0x0000044f => "\xdf",
      0x00000451 => "\xde",
      0x00000452 => "\xac",
      0x00000453 => "\xaf",
      0x00000454 => "\xb9",
      0x00000455 => "\xcf",
      0x00000456 => "\xb4",
      0x00000457 => "\xbb",
      0x00000458 => "\xc0",
      0x00000459 => "\xbd",
      0x0000045a => "\xbf",
      0x0000045b => "\xcc",
      0x0000045c => "\xce",
      0x0000045e => "\xd9",
      0x0000045f => "\xdb",
      0x00000490 => "\xa2",
      0x00000491 => "\xb6",
      0x00002013 => "\xd0",
      0x00002014 => "\xd1",
      0x00002018 => "\xd4",
      0x00002019 => "\xd5",
      0x0000201c => "\xd2",
      0x0000201d => "\xd3",
      0x0000201e => "\xd7",
      0x00002020 => "\xa0",
      0x00002022 => "\xa5",
      0x00002026 => "\xc9",
      0x00002116 => "\xdc",
      0x00002122 => "\xaa",
      0x00002206 => "\xc6",
      0x0000221a => "\xc3",
      0x0000221e => "\xb0",
      0x00002248 => "\xc5",
      0x00002260 => "\xad",
      0x00002264 => "\xb2",
      0x00002265 => "\xb3",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::MAC_UK - Conversion routines for MAC-UK
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for MAC-UK.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   automatically generated from the charDB
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL
      01 |  00000001 | START OF HEADING
      02 |  00000002 | START OF TEXT
      03 |  00000003 | END OF TEXT
      04 |  00000004 | END OF TRANSMISSION
      05 |  00000005 | ENQUIRY
      06 |  00000006 | ACKNOWLEDGE
      07 |  00000007 | BELL
      08 |  00000008 | BACKSPACE
      09 |  00000009 | HORIZONTAL TABULATION
      0A |  0000000A | LINE FEED
      0B |  0000000B | VERTICAL TABULATION
      0C |  0000000C | FORM FEED
      0D |  0000000D | CARRIAGE RETURN
      0E |  0000000E | SHIFT OUT
      0F |  0000000F | SHIFT IN
      10 |  00000010 | DATA LINK ESCAPE
      11 |  00000011 | DEVICE CONTROL ONE
      12 |  00000012 | DEVICE CONTROL TWO
      13 |  00000013 | DEVICE CONTROL THREE
      14 |  00000014 | DEVICE CONTROL FOUR
      15 |  00000015 | NEGATIVE ACKNOWLEDGE
      16 |  00000016 | SYNCHRONOUS IDLE
      17 |  00000017 | END OF TRANSMISSION BLOCK
      18 |  00000018 | CANCEL
      19 |  00000019 | END OF MEDIUM
      1A |  0000001A | SUBSTITUTE
      1B |  0000001B | ESCAPE
      1C |  0000001C | FILE SEPARATOR
      1D |  0000001D | GROUP SEPARATOR
      1E |  0000001E | RECORD SEPARATOR
      1F |  0000001F | UNIT SEPARATOR
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE
      80 |  00000410 | CYRILLIC CAPITAL LETTER A
      81 |  00000411 | CYRILLIC CAPITAL LETTER BE
      82 |  00000412 | CYRILLIC CAPITAL LETTER VE
      83 |  00000413 | CYRILLIC CAPITAL LETTER GHE
      84 |  00000414 | CYRILLIC CAPITAL LETTER DE
      85 |  00000415 | CYRILLIC CAPITAL LETTER IE
      86 |  00000416 | CYRILLIC CAPITAL LETTER ZHE
      87 |  00000417 | CYRILLIC CAPITAL LETTER ZE
      88 |  00000418 | CYRILLIC CAPITAL LETTER I
      89 |  00000419 | CYRILLIC CAPITAL LETTER SHORT I
      8A |  0000041A | CYRILLIC CAPITAL LETTER KA
      8B |  0000041B | CYRILLIC CAPITAL LETTER EL
      8C |  0000041C | CYRILLIC CAPITAL LETTER EM
      8D |  0000041D | CYRILLIC CAPITAL LETTER EN
      8E |  0000041E | CYRILLIC CAPITAL LETTER O
      8F |  0000041F | CYRILLIC CAPITAL LETTER PE
      90 |  00000420 | CYRILLIC CAPITAL LETTER ER
      91 |  00000421 | CYRILLIC CAPITAL LETTER ES
      92 |  00000422 | CYRILLIC CAPITAL LETTER TE
      93 |  00000423 | CYRILLIC CAPITAL LETTER U
      94 |  00000424 | CYRILLIC CAPITAL LETTER EF
      95 |  00000425 | CYRILLIC CAPITAL LETTER HA
      96 |  00000426 | CYRILLIC CAPITAL LETTER TSE
      97 |  00000427 | CYRILLIC CAPITAL LETTER CHE
      98 |  00000428 | CYRILLIC CAPITAL LETTER SHA
      99 |  00000429 | CYRILLIC CAPITAL LETTER SHCHA
      9A |  0000042A | CYRILLIC CAPITAL LETTER HARD SIGN
      9B |  0000042B | CYRILLIC CAPITAL LETTER YERU
      9C |  0000042C | CYRILLIC CAPITAL LETTER SOFT SIGN
      9D |  0000042D | CYRILLIC CAPITAL LETTER E
      9E |  0000042E | CYRILLIC CAPITAL LETTER YU
      9F |  0000042F | CYRILLIC CAPITAL LETTER YA
      A0 |  00002020 | DAGGER
      A1 |  000000B0 | DEGREE SIGN
      A2 |  00000490 | CYRILLIC CAPITAL LETTER GHE WITH UPTURN
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A7 | SECTION SIGN
      A5 |  00002022 | BULLET
      A6 |  000000B6 | PILCROW SIGN
      A7 |  00000406 | CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
      A8 |  000000AE | REGISTERED SIGN
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  00002122 | TRADE MARK SIGN
      AB |  00000402 | CYRILLIC CAPITAL LETTER DJE
      AC |  00000452 | CYRILLIC SMALL LETTER DJE
      AD |  00002260 | NOT EQUAL TO
      AE |  00000403 | CYRILLIC CAPITAL LETTER GJE
      AF |  00000453 | CYRILLIC SMALL LETTER GJE
      B0 |  0000221E | INFINITY
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  00002264 | LESS-THAN OR EQUAL TO
      B3 |  00002265 | GREATER-THAN OR EQUAL TO
      B4 |  00000456 | CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
      B5 |  000000B5 | MICRO SIGN
      B6 |  00000491 | CYRILLIC SMALL LETTER GHE WITH UPTURN
      B7 |  00000408 | CYRILLIC CAPITAL LETTER JE
      B8 |  00000404 | CYRILLIC CAPITAL LETTER UKRAINIAN IE
      B9 |  00000454 | CYRILLIC SMALL LETTER UKRAINIAN IE
      BA |  00000407 | CYRILLIC CAPITAL LETTER YI
      BB |  00000457 | CYRILLIC SMALL LETTER YI
      BC |  00000409 | CYRILLIC CAPITAL LETTER LJE
      BD |  00000459 | CYRILLIC SMALL LETTER LJE
      BE |  0000040A | CYRILLIC CAPITAL LETTER NJE
      BF |  0000045A | CYRILLIC SMALL LETTER NJE
      C0 |  00000458 | CYRILLIC SMALL LETTER JE
      C1 |  00000405 | CYRILLIC CAPITAL LETTER DZE
      C2 |  000000AC | NOT SIGN
      C3 |  0000221A | SQUARE ROOT
      C4 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      C5 |  00002248 | ALMOST EQUAL TO
      C6 |  00002206 | INCREMENT
      C7 |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      C8 |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      C9 |  00002026 | HORIZONTAL ELLIPSIS
      CA |  000000A0 | NO-BREAK SPACE
      CB |  0000040B | CYRILLIC CAPITAL LETTER TSHE
      CC |  0000045B | CYRILLIC SMALL LETTER TSHE
      CD |  0000040C | CYRILLIC CAPITAL LETTER KJE
      CE |  0000045C | CYRILLIC SMALL LETTER KJE
      CF |  00000455 | CYRILLIC SMALL LETTER DZE
      D0 |  00002013 | EN DASH
      D1 |  00002014 | EM DASH
      D2 |  0000201C | LEFT DOUBLE QUOTATION MARK
      D3 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      D4 |  00002018 | LEFT SINGLE QUOTATION MARK
      D5 |  00002019 | RIGHT SINGLE QUOTATION MARK
      D6 |  000000F7 | DIVISION SIGN
      D7 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      D8 |  0000040E | CYRILLIC CAPITAL LETTER SHORT U
      D9 |  0000045E | CYRILLIC SMALL LETTER SHORT U
      DA |  0000040F | CYRILLIC CAPITAL LETTER DZHE
      DB |  0000045F | CYRILLIC SMALL LETTER DZHE
      DC |  00002116 | NUMERO SIGN
      DD |  00000401 | CYRILLIC CAPITAL LETTER IO
      DE |  00000451 | CYRILLIC SMALL LETTER IO
      DF |  0000044F | CYRILLIC SMALL LETTER YA
      E0 |  00000430 | CYRILLIC SMALL LETTER A
      E1 |  00000431 | CYRILLIC SMALL LETTER BE
      E2 |  00000432 | CYRILLIC SMALL LETTER VE
      E3 |  00000433 | CYRILLIC SMALL LETTER GHE
      E4 |  00000434 | CYRILLIC SMALL LETTER DE
      E5 |  00000435 | CYRILLIC SMALL LETTER IE
      E6 |  00000436 | CYRILLIC SMALL LETTER ZHE
      E7 |  00000437 | CYRILLIC SMALL LETTER ZE
      E8 |  00000438 | CYRILLIC SMALL LETTER I
      E9 |  00000439 | CYRILLIC SMALL LETTER SHORT I
      EA |  0000043A | CYRILLIC SMALL LETTER KA
      EB |  0000043B | CYRILLIC SMALL LETTER EL
      EC |  0000043C | CYRILLIC SMALL LETTER EM
      ED |  0000043D | CYRILLIC SMALL LETTER EN
      EE |  0000043E | CYRILLIC SMALL LETTER O
      EF |  0000043F | CYRILLIC SMALL LETTER PE
      F0 |  00000440 | CYRILLIC SMALL LETTER ER
      F1 |  00000441 | CYRILLIC SMALL LETTER ES
      F2 |  00000442 | CYRILLIC SMALL LETTER TE
      F3 |  00000443 | CYRILLIC SMALL LETTER U
      F4 |  00000444 | CYRILLIC SMALL LETTER EF
      F5 |  00000445 | CYRILLIC SMALL LETTER HA
      F6 |  00000446 | CYRILLIC SMALL LETTER TSE
      F7 |  00000447 | CYRILLIC SMALL LETTER CHE
      F8 |  00000448 | CYRILLIC SMALL LETTER SHA
      F9 |  00000449 | CYRILLIC SMALL LETTER SHCHA
      FA |  0000044A | CYRILLIC SMALL LETTER HARD SIGN
      FB |  0000044B | CYRILLIC SMALL LETTER YERU
      FC |  0000044C | CYRILLIC SMALL LETTER SOFT SIGN
      FD |  0000044D | CYRILLIC SMALL LETTER E
      FE |  0000044E | CYRILLIC SMALL LETTER YU
      FF |  000000A4 | CURRENCY SIGN
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_MAC_UK

    $main::fatpacked{"Locale/RecodeData/NATS_DANO.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_NATS_DANO';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for NATS-DANO.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::NATS_DANO;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x00ab,
      0x00bb,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0xe018,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00c6,
      0x00d8,
      0x00c5,
      0x25a0,
      0x005f,
      0xe019,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x00e6,
      0x00f8,
      0x00e5,
      0x2013,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\xc2\xab",
      "\xc2\xbb",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\xee\x80\x98",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc3\x86",
      "\xc3\x98",
      "\xc3\x85",
      "\xe2\x96\xa0",
      "\x5f",
      "\xee\x80\x99",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc3\xa6",
      "\xc3\xb8",
      "\xc3\xa5",
      "\xe2\x80\x93",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005f => "\x5f",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007f => "\x7f",
      0x000000ab => "\x22",
      0x000000bb => "\x23",
      0x000000c5 => "\x5d",
      0x000000c6 => "\x5b",
      0x000000d8 => "\x5c",
      0x000000e5 => "\x7d",
      0x000000e6 => "\x7b",
      0x000000f8 => "\x7c",
      0x00002013 => "\x7e",
      0x000025a0 => "\x5e",
      0x0000e018 => "\x40",
      0x0000e019 => "\x60",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::NATS_DANO - Conversion routines for NATS_DANO
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for NATS-DANO.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-9-1
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      23 |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  0000E018 | Unit space A E<lt>ISO-IR-8-1_40E<gt>
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  000000C6 | LATIN CAPITAL LETTER AE
      5C |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      5D |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      5E |  000025A0 | BLACK SQUARE
      5F |  0000005F | LOW LINE
      60 |  0000E019 | Unit space B E<lt>ISO-IR-8-1_60E<gt>
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  000000E6 | LATIN SMALL LETTER AE
      7C |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      7D |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      7E |  00002013 | EN DASH
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_NATS_DANO

    $main::fatpacked{"Locale/RecodeData/NATS_SEFI.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_NATS_SEFI';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for NATS-SEFI.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::NATS_SEFI;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0xe018,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x00c4,
      0x00d6,
      0x00c5,
      0x25a0,
      0x005f,
      0xe019,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x00e4,
      0x00f6,
      0x00e5,
      0x2013,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\xee\x80\x98",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\xc3\x84",
      "\xc3\x96",
      "\xc3\x85",
      "\xe2\x96\xa0",
      "\x5f",
      "\xee\x80\x99",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\xc3\xa4",
      "\xc3\xb6",
      "\xc3\xa5",
      "\xe2\x80\x93",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005f => "\x5f",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007f => "\x7f",
      0x000000c4 => "\x5b",
      0x000000c5 => "\x5d",
      0x000000d6 => "\x5c",
      0x000000e4 => "\x7b",
      0x000000e5 => "\x7d",
      0x000000f6 => "\x7c",
      0x00002013 => "\x7e",
      0x000025a0 => "\x5e",
      0x0000e018 => "\x40",
      0x0000e019 => "\x60",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::NATS_SEFI - Conversion routines for NATS_SEFI
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for NATS-SEFI.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    source: ECMA registry
   alias ISO-IR-8-1
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  0000E018 | Unit space A E<lt>ISO-IR-8-1_40E<gt>
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      5C |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      5D |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      5E |  000025A0 | BLACK SQUARE
      5F |  0000005F | LOW LINE
      60 |  0000E019 | Unit space B E<lt>ISO-IR-8-1_60E<gt>
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      7C |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      7D |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      7E |  00002013 | EN DASH
      7F |  0000007F | DELETE (DEL)
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_NATS_SEFI

    $main::fatpacked{"Locale/RecodeData/NEXTSTEP.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_NEXTSTEP';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for NEXTSTEP.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::NEXTSTEP;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x00a0,
      0x00c0,
      0x00c1,
      0x00c2,
      0x00c3,
      0x00c4,
      0x00c5,
      0x00c7,
      0x00c8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00cc,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00d0,
      0x00d1,
      0x00d2,
      0x00d3,
      0x00d4,
      0x00d5,
      0x00d6,
      0x00d9,
      0x00da,
      0x00db,
      0x00dc,
      0x00dd,
      0x00de,
      0x00b5,
      0x00d7,
      0x00f7,
      0x00a9,
      0x00a1,
      0x00a2,
      0x00a3,
      0x2044,
      0x00a5,
      0x0192,
      0x00a7,
      0x00a4,
      0x2019,
      0x201c,
      0x00ab,
      0x2039,
      0x203a,
      0xfb01,
      0xfb02,
      0x00ae,
      0x2013,
      0x2020,
      0x2021,
      0x00b7,
      0x00a6,
      0x00b6,
      0x2022,
      0x201a,
      0x201e,
      0x201d,
      0x00bb,
      0x2026,
      0x2030,
      0x00ac,
      0x00bf,
      0x00b9,
      0x02cb,
      0x00b4,
      0x02c6,
      0x02dc,
      0x00af,
      0x02d8,
      0x02d9,
      0x00a8,
      0x00b2,
      0x02da,
      0x00b8,
      0x00b3,
      0x02dd,
      0x02db,
      0x02c7,
      0x2014,
      0x00b1,
      0x00bc,
      0x00bd,
      0x00be,
      0x00e0,
      0x00e1,
      0x00e2,
      0x00e3,
      0x00e4,
      0x00e5,
      0x00e7,
      0x00e8,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00ec,
      0x00c6,
      0x00ed,
      0x00aa,
      0x00ee,
      0x00ef,
      0x00f0,
      0x00f1,
      0x0141,
      0x00d8,
      0x0152,
      0x00ba,
      0x00f2,
      0x00f3,
      0x00f4,
      0x00f5,
      0x00f6,
      0x00e6,
      0x00f9,
      0x00fa,
      0x00fb,
      0x0131,
      0x00fc,
      0x00fd,
      0x0142,
      0x00f8,
      0x0153,
      0x00df,
      0x00fe,
      0x00ff,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xc2\xa0",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x82",
      "\xc3\x83",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x87",
      "\xc3\x88",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x8c",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x90",
      "\xc3\x91",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x94",
      "\xc3\x95",
      "\xc3\x96",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc2\xb5",
      "\xc3\x97",
      "\xc3\xb7",
      "\xc2\xa9",
      "\xc2\xa1",
      "\xc2\xa2",
      "\xc2\xa3",
      "\xe2\x81\x84",
      "\xc2\xa5",
      "\xc6\x92",
      "\xc2\xa7",
      "\xc2\xa4",
      "\xe2\x80\x99",
      "\xe2\x80\x9c",
      "\xc2\xab",
      "\xe2\x80\xb9",
      "\xe2\x80\xba",
      "\xef\xac\x81",
      "\xef\xac\x82",
      "\xc2\xae",
      "\xe2\x80\x93",
      "\xe2\x80\xa0",
      "\xe2\x80\xa1",
      "\xc2\xb7",
      "\xc2\xa6",
      "\xc2\xb6",
      "\xe2\x80\xa2",
      "\xe2\x80\x9a",
      "\xe2\x80\x9e",
      "\xe2\x80\x9d",
      "\xc2\xbb",
      "\xe2\x80\xa6",
      "\xe2\x80\xb0",
      "\xc2\xac",
      "\xc2\xbf",
      "\xc2\xb9",
      "\xcb\x8b",
      "\xc2\xb4",
      "\xcb\x86",
      "\xcb\x9c",
      "\xc2\xaf",
      "\xcb\x98",
      "\xcb\x99",
      "\xc2\xa8",
      "\xc2\xb2",
      "\xcb\x9a",
      "\xc2\xb8",
      "\xc2\xb3",
      "\xcb\x9d",
      "\xcb\x9b",
      "\xcb\x87",
      "\xe2\x80\x94",
      "\xc2\xb1",
      "\xc2\xbc",
      "\xc2\xbd",
      "\xc2\xbe",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc3\xa3",
      "\xc3\xa4",
      "\xc3\xa5",
      "\xc3\xa7",
      "\xc3\xa8",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xac",
      "\xc3\x86",
      "\xc3\xad",
      "\xc2\xaa",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb0",
      "\xc3\xb1",
      "\xc5\x81",
      "\xc3\x98",
      "\xc5\x92",
      "\xc2\xba",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc3\xb5",
      "\xc3\xb6",
      "\xc3\xa6",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbb",
      "\xc4\xb1",
      "\xc3\xbc",
      "\xc3\xbd",
      "\xc5\x82",
      "\xc3\xb8",
      "\xc5\x93",
      "\xc3\x9f",
      "\xc3\xbe",
      "\xc3\xbf",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\x80",
      0x000000a1 => "\xa1",
      0x000000a2 => "\xa2",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xa8",
      0x000000a5 => "\xa5",
      0x000000a6 => "\xb5",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xc8",
      0x000000a9 => "\xa0",
      0x000000aa => "\xe3",
      0x000000ab => "\xab",
      0x000000ac => "\xbe",
      0x000000ae => "\xb0",
      0x000000af => "\xc5",
      0x000000b1 => "\xd1",
      0x000000b2 => "\xc9",
      0x000000b3 => "\xcc",
      0x000000b4 => "\xc2",
      0x000000b5 => "\x9d",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb4",
      0x000000b8 => "\xcb",
      0x000000b9 => "\xc0",
      0x000000ba => "\xeb",
      0x000000bb => "\xbb",
      0x000000bc => "\xd2",
      0x000000bd => "\xd3",
      0x000000be => "\xd4",
      0x000000bf => "\xbf",
      0x000000c0 => "\x81",
      0x000000c1 => "\x82",
      0x000000c2 => "\x83",
      0x000000c3 => "\x84",
      0x000000c4 => "\x85",
      0x000000c5 => "\x86",
      0x000000c6 => "\xe1",
      0x000000c7 => "\x87",
      0x000000c8 => "\x88",
      0x000000c9 => "\x89",
      0x000000ca => "\x8a",
      0x000000cb => "\x8b",
      0x000000cc => "\x8c",
      0x000000cd => "\x8d",
      0x000000ce => "\x8e",
      0x000000cf => "\x8f",
      0x000000d0 => "\x90",
      0x000000d1 => "\x91",
      0x000000d2 => "\x92",
      0x000000d3 => "\x93",
      0x000000d4 => "\x94",
      0x000000d5 => "\x95",
      0x000000d6 => "\x96",
      0x000000d7 => "\x9e",
      0x000000d8 => "\xe9",
      0x000000d9 => "\x97",
      0x000000da => "\x98",
      0x000000db => "\x99",
      0x000000dc => "\x9a",
      0x000000dd => "\x9b",
      0x000000de => "\x9c",
      0x000000df => "\xfb",
      0x000000e0 => "\xd5",
      0x000000e1 => "\xd6",
      0x000000e2 => "\xd7",
      0x000000e3 => "\xd8",
      0x000000e4 => "\xd9",
      0x000000e5 => "\xda",
      0x000000e6 => "\xf1",
      0x000000e7 => "\xdb",
      0x000000e8 => "\xdc",
      0x000000e9 => "\xdd",
      0x000000ea => "\xde",
      0x000000eb => "\xdf",
      0x000000ec => "\xe0",
      0x000000ed => "\xe2",
      0x000000ee => "\xe4",
      0x000000ef => "\xe5",
      0x000000f0 => "\xe6",
      0x000000f1 => "\xe7",
      0x000000f2 => "\xec",
      0x000000f3 => "\xed",
      0x000000f4 => "\xee",
      0x000000f5 => "\xef",
      0x000000f6 => "\xf0",
      0x000000f7 => "\x9f",
      0x000000f8 => "\xf9",
      0x000000f9 => "\xf2",
      0x000000fa => "\xf3",
      0x000000fb => "\xf4",
      0x000000fc => "\xf6",
      0x000000fd => "\xf7",
      0x000000fe => "\xfc",
      0x000000ff => "\xfd",
      0x00000131 => "\xf5",
      0x00000141 => "\xe8",
      0x00000142 => "\xf8",
      0x00000152 => "\xea",
      0x00000153 => "\xfa",
      0x00000192 => "\xa6",
      0x000002c6 => "\xc3",
      0x000002c7 => "\xcf",
      0x000002cb => "\xc1",
      0x000002d8 => "\xc6",
      0x000002d9 => "\xc7",
      0x000002da => "\xca",
      0x000002db => "\xce",
      0x000002dc => "\xc4",
      0x000002dd => "\xcd",
      0x00002013 => "\xb1",
      0x00002014 => "\xd0",
      0x00002019 => "\xa9",
      0x0000201a => "\xb8",
      0x0000201c => "\xaa",
      0x0000201d => "\xba",
      0x0000201e => "\xb9",
      0x00002020 => "\xb2",
      0x00002021 => "\xb3",
      0x00002022 => "\xb7",
      0x00002026 => "\xbc",
      0x00002030 => "\xbd",
      0x00002039 => "\xac",
      0x0000203a => "\xad",
      0x00002044 => "\xa4",
      0x0000fb01 => "\xae",
      0x0000fb02 => "\xaf",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::NEXTSTEP - Conversion routines for NEXTSTEP
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for NEXTSTEP.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
  
   This charmap has been generated automatically from GNU libiconv
   conversions.
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000000A0 | NO-BREAK SPACE
      81 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      82 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      83 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      84 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      85 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      86 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      87 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      88 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      89 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      8A |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      8B |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      8C |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      8D |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      8E |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      8F |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      90 |  000000D0 | LATIN CAPITAL LETTER ETH
      91 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      92 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      93 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      94 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      95 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      96 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      97 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      98 |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      99 |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      9A |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      9B |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      9C |  000000DE | LATIN CAPITAL LETTER THORN
      9D |  000000B5 | MICRO SIGN
      9E |  000000D7 | MULTIPLICATION SIGN
      9F |  000000F7 | DIVISION SIGN
      A0 |  000000A9 | COPYRIGHT SIGN
      A1 |  000000A1 | INVERTED EXCLAMATION MARK
      A2 |  000000A2 | CENT SIGN
      A3 |  000000A3 | POUND SIGN
      A4 |  00002044 | FRACTION SLASH
      A5 |  000000A5 | YEN SIGN
      A6 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A4 | CURRENCY SIGN
      A9 |  00002019 | RIGHT SINGLE QUOTATION MARK
      AA |  0000201C | LEFT DOUBLE QUOTATION MARK
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
      AD |  0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
      AE |  0000FB01 | LATIN SMALL LIGATURE FI
      AF |  0000FB02 | LATIN SMALL LIGATURE FL
      B0 |  000000AE | REGISTERED SIGN
      B1 |  00002013 | EN DASH
      B2 |  00002020 | DAGGER
      B3 |  00002021 | DOUBLE DAGGER
      B4 |  000000B7 | MIDDLE DOT
      B5 |  000000A6 | BROKEN BAR
      B6 |  000000B6 | PILCROW SIGN
      B7 |  00002022 | BULLET
      B8 |  0000201A | SINGLE LOW-9 QUOTATION MARK
      B9 |  0000201E | DOUBLE LOW-9 QUOTATION MARK
      BA |  0000201D | RIGHT DOUBLE QUOTATION MARK
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  00002026 | HORIZONTAL ELLIPSIS
      BD |  00002030 | PER MILLE SIGN
      BE |  000000AC | NOT SIGN
      BF |  000000BF | INVERTED QUESTION MARK
      C0 |  000000B9 | SUPERSCRIPT ONE
      C1 |  000002CB | MODIFIER LETTER GRAVE ACCENT
      C2 |  000000B4 | ACUTE ACCENT
      C3 |  000002C6 | MODIFIER LETTER CIRCUMFLEX ACCENT
      C4 |  000002DC | SMALL TILDE
      C5 |  000000AF | MACRON
      C6 |  000002D8 | BREVE
      C7 |  000002D9 | DOT ABOVE
      C8 |  000000A8 | DIAERESIS
      C9 |  000000B2 | SUPERSCRIPT TWO
      CA |  000002DA | RING ABOVE
      CB |  000000B8 | CEDILLA
      CC |  000000B3 | SUPERSCRIPT THREE
      CD |  000002DD | DOUBLE ACUTE ACCENT
      CE |  000002DB | OGONEK
      CF |  000002C7 | CARON
      D0 |  00002014 | EM DASH
      D1 |  000000B1 | PLUS-MINUS SIGN
      D2 |  000000BC | VULGAR FRACTION ONE QUARTER
      D3 |  000000BD | VULGAR FRACTION ONE HALF
      D4 |  000000BE | VULGAR FRACTION THREE QUARTERS
      D5 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      D6 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      D7 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      D8 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      D9 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      DA |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      DB |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      DC |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      DD |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      DE |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      DF |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      E0 |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      E1 |  000000C6 | LATIN CAPITAL LETTER AE
      E2 |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      E3 |  000000AA | FEMININE ORDINAL INDICATOR
      E4 |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      E5 |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      E6 |  000000F0 | LATIN SMALL LETTER ETH
      E7 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      E8 |  00000141 | LATIN CAPITAL LETTER L WITH STROKE
      E9 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      EA |  00000152 | LATIN CAPITAL LIGATURE OE
      EB |  000000BA | MASCULINE ORDINAL INDICATOR
      EC |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      ED |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      EE |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      EF |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F0 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F1 |  000000E6 | LATIN SMALL LETTER AE
      F2 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      F3 |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      F4 |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      F5 |  00000131 | LATIN SMALL LETTER DOTLESS I
      F6 |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      F7 |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      F8 |  00000142 | LATIN SMALL LETTER L WITH STROKE
      F9 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      FA |  00000153 | LATIN SMALL LIGATURE OE
      FB |  000000DF | LATIN SMALL LETTER SHARP S
      FC |  000000FE | LATIN SMALL LETTER THORN
      FD |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_NEXTSTEP

    $main::fatpacked{"Locale/RecodeData/SAMI_WS2.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_SAMI_WS2';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for WIN-SAMI-2.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::SAMI_WS2;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x20ac,
      0xfffd,
      0x010c,
      0x0192,
      0x010d,
      0x01b7,
      0x0292,
      0x01ee,
      0x01ef,
      0x0110,
      0x0160,
      0x2039,
      0x0152,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x2018,
      0x2019,
      0x201c,
      0x201d,
      0x2022,
      0x2013,
      0x2014,
      0x0111,
      0x01e6,
      0x0161,
      0x203a,
      0x0153,
      0xfffd,
      0xfffd,
      0x0178,
      0x00a0,
      0x01e7,
      0x01e4,
      0x00a3,
      0x00a4,
      0x01e5,
      0x00a6,
      0x00a7,
      0x00a8,
      0x00a9,
      0x021e,
      0x00ab,
      0x00ac,
      0x00ad,
      0x00ae,
      0x021f,
      0x00b0,
      0x00b1,
      0x01e8,
      0x01e9,
      0x00b4,
      0x00b5,
      0x00b6,
      0x00b7,
      0x014a,
      0x014b,
      0x0166,
      0x00bb,
      0x0167,
      0x00bd,
      0x017d,
      0x017e,
      0x00c0,
      0x00c1,
      0x00c2,
      0x00c3,
      0x00c4,
      0x00c5,
      0x00c6,
      0x00c7,
      0x00c8,
      0x00c9,
      0x00ca,
      0x00cb,
      0x00cc,
      0x00cd,
      0x00ce,
      0x00cf,
      0x00d0,
      0x00d1,
      0x00d2,
      0x00d3,
      0x00d4,
      0x00d5,
      0x00d6,
      0x00d7,
      0x00d8,
      0x00d9,
      0x00da,
      0x00db,
      0x00dc,
      0x00dd,
      0x00de,
      0x00df,
      0x00e0,
      0x00e1,
      0x00e2,
      0x00e3,
      0x00e4,
      0x00e5,
      0x00e6,
      0x00e7,
      0x00e8,
      0x00e9,
      0x00ea,
      0x00eb,
      0x00ec,
      0x00ed,
      0x00ee,
      0x00ef,
      0x00f0,
      0x00f1,
      0x00f2,
      0x00f3,
      0x00f4,
      0x00f5,
      0x00f6,
      0x00f7,
      0x00f8,
      0x00f9,
      0x00fa,
      0x00fb,
      0x00fc,
      0x00fd,
      0x00fe,
      0x00ff,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xe2\x82\xac",
      "\xef\xbf\xbd",
      "\xc4\x8c",
      "\xc6\x92",
      "\xc4\x8d",
      "\xc6\xb7",
      "\xca\x92",
      "\xc7\xae",
      "\xc7\xaf",
      "\xc4\x90",
      "\xc5\xa0",
      "\xe2\x80\xb9",
      "\xc5\x92",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe2\x80\x98",
      "\xe2\x80\x99",
      "\xe2\x80\x9c",
      "\xe2\x80\x9d",
      "\xe2\x80\xa2",
      "\xe2\x80\x93",
      "\xe2\x80\x94",
      "\xc4\x91",
      "\xc7\xa6",
      "\xc5\xa1",
      "\xe2\x80\xba",
      "\xc5\x93",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xc5\xb8",
      "\xc2\xa0",
      "\xc7\xa7",
      "\xc7\xa4",
      "\xc2\xa3",
      "\xc2\xa4",
      "\xc7\xa5",
      "\xc2\xa6",
      "\xc2\xa7",
      "\xc2\xa8",
      "\xc2\xa9",
      "\xc8\x9e",
      "\xc2\xab",
      "\xc2\xac",
      "\xc2\xad",
      "\xc2\xae",
      "\xc8\x9f",
      "\xc2\xb0",
      "\xc2\xb1",
      "\xc7\xa8",
      "\xc7\xa9",
      "\xc2\xb4",
      "\xc2\xb5",
      "\xc2\xb6",
      "\xc2\xb7",
      "\xc5\x8a",
      "\xc5\x8b",
      "\xc5\xa6",
      "\xc2\xbb",
      "\xc5\xa7",
      "\xc2\xbd",
      "\xc5\xbd",
      "\xc5\xbe",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x82",
      "\xc3\x83",
      "\xc3\x84",
      "\xc3\x85",
      "\xc3\x86",
      "\xc3\x87",
      "\xc3\x88",
      "\xc3\x89",
      "\xc3\x8a",
      "\xc3\x8b",
      "\xc3\x8c",
      "\xc3\x8d",
      "\xc3\x8e",
      "\xc3\x8f",
      "\xc3\x90",
      "\xc3\x91",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x94",
      "\xc3\x95",
      "\xc3\x96",
      "\xc3\x97",
      "\xc3\x98",
      "\xc3\x99",
      "\xc3\x9a",
      "\xc3\x9b",
      "\xc3\x9c",
      "\xc3\x9d",
      "\xc3\x9e",
      "\xc3\x9f",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc3\xa3",
      "\xc3\xa4",
      "\xc3\xa5",
      "\xc3\xa6",
      "\xc3\xa7",
      "\xc3\xa8",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xc3\xab",
      "\xc3\xac",
      "\xc3\xad",
      "\xc3\xae",
      "\xc3\xaf",
      "\xc3\xb0",
      "\xc3\xb1",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc3\xb5",
      "\xc3\xb6",
      "\xc3\xb7",
      "\xc3\xb8",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc3\xbb",
      "\xc3\xbc",
      "\xc3\xbd",
      "\xc3\xbe",
      "\xc3\xbf",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000a0 => "\xa0",
      0x000000a3 => "\xa3",
      0x000000a4 => "\xa4",
      0x000000a6 => "\xa6",
      0x000000a7 => "\xa7",
      0x000000a8 => "\xa8",
      0x000000a9 => "\xa9",
      0x000000ab => "\xab",
      0x000000ac => "\xac",
      0x000000ad => "\xad",
      0x000000ae => "\xae",
      0x000000b0 => "\xb0",
      0x000000b1 => "\xb1",
      0x000000b4 => "\xb4",
      0x000000b5 => "\xb5",
      0x000000b6 => "\xb6",
      0x000000b7 => "\xb7",
      0x000000bb => "\xbb",
      0x000000bd => "\xbd",
      0x000000c0 => "\xc0",
      0x000000c1 => "\xc1",
      0x000000c2 => "\xc2",
      0x000000c3 => "\xc3",
      0x000000c4 => "\xc4",
      0x000000c5 => "\xc5",
      0x000000c6 => "\xc6",
      0x000000c7 => "\xc7",
      0x000000c8 => "\xc8",
      0x000000c9 => "\xc9",
      0x000000ca => "\xca",
      0x000000cb => "\xcb",
      0x000000cc => "\xcc",
      0x000000cd => "\xcd",
      0x000000ce => "\xce",
      0x000000cf => "\xcf",
      0x000000d0 => "\xd0",
      0x000000d1 => "\xd1",
      0x000000d2 => "\xd2",
      0x000000d3 => "\xd3",
      0x000000d4 => "\xd4",
      0x000000d5 => "\xd5",
      0x000000d6 => "\xd6",
      0x000000d7 => "\xd7",
      0x000000d8 => "\xd8",
      0x000000d9 => "\xd9",
      0x000000da => "\xda",
      0x000000db => "\xdb",
      0x000000dc => "\xdc",
      0x000000dd => "\xdd",
      0x000000de => "\xde",
      0x000000df => "\xdf",
      0x000000e0 => "\xe0",
      0x000000e1 => "\xe1",
      0x000000e2 => "\xe2",
      0x000000e3 => "\xe3",
      0x000000e4 => "\xe4",
      0x000000e5 => "\xe5",
      0x000000e6 => "\xe6",
      0x000000e7 => "\xe7",
      0x000000e8 => "\xe8",
      0x000000e9 => "\xe9",
      0x000000ea => "\xea",
      0x000000eb => "\xeb",
      0x000000ec => "\xec",
      0x000000ed => "\xed",
      0x000000ee => "\xee",
      0x000000ef => "\xef",
      0x000000f0 => "\xf0",
      0x000000f1 => "\xf1",
      0x000000f2 => "\xf2",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f5 => "\xf5",
      0x000000f6 => "\xf6",
      0x000000f7 => "\xf7",
      0x000000f8 => "\xf8",
      0x000000f9 => "\xf9",
      0x000000fa => "\xfa",
      0x000000fb => "\xfb",
      0x000000fc => "\xfc",
      0x000000fd => "\xfd",
      0x000000fe => "\xfe",
      0x000000ff => "\xff",
      0x0000010c => "\x82",
      0x0000010d => "\x84",
      0x00000110 => "\x89",
      0x00000111 => "\x98",
      0x0000014a => "\xb8",
      0x0000014b => "\xb9",
      0x00000152 => "\x8c",
      0x00000153 => "\x9c",
      0x00000160 => "\x8a",
      0x00000161 => "\x9a",
      0x00000166 => "\xba",
      0x00000167 => "\xbc",
      0x00000178 => "\x9f",
      0x0000017d => "\xbe",
      0x0000017e => "\xbf",
      0x00000192 => "\x83",
      0x000001b7 => "\x85",
      0x000001e4 => "\xa2",
      0x000001e5 => "\xa5",
      0x000001e6 => "\x99",
      0x000001e7 => "\xa1",
      0x000001e8 => "\xb2",
      0x000001e9 => "\xb3",
      0x000001ee => "\x87",
      0x000001ef => "\x88",
      0x0000021e => "\xaa",
      0x0000021f => "\xaf",
      0x00000292 => "\x86",
      0x00002013 => "\x96",
      0x00002014 => "\x97",
      0x00002018 => "\x91",
      0x00002019 => "\x92",
      0x0000201c => "\x93",
      0x0000201d => "\x94",
      0x00002022 => "\x95",
      0x00002039 => "\x8b",
      0x0000203a => "\x9b",
      0x000020ac => "\x80",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::SAMI_WS2 - Conversion routines for SAMI_WS2
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for WIN-SAMI-2.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   source: E<lt>URL:http://www2.isl.uit.no/trond/ws2t.htmlE<gt> and
           E<lt>URL:http://www.unicode.org/unicode/alloc/Pipeline.htmlE<gt>
   author: Petter Reinholdtsen E<lt>pere@td.org.uit.noE<gt>
   date:   1999-01-20
   based on info from Trond Trosterud E<lt>Trond.Trosterud@hum.uit.noE<gt>.
   This charmap is based on MS CP1252, not ISO 8859/1.
   alias WS2
   alias WINDOWS-SAMI2
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  000020AC | EURO SIGN
      82 |  0000010C | LATIN CAPITAL LETTER C WITH CARON
      83 |  00000192 | LATIN SMALL LETTER F WITH HOOK
      84 |  0000010D | LATIN SMALL LETTER C WITH CARON
      85 |  000001B7 | LATIN CAPITAL LETTER EZH
      86 |  00000292 | LATIN SMALL LETTER EZH
      87 |  000001EE | LATIN CAPITAL LETTER EZH WITH CARON
      88 |  000001EF | LATIN SMALL LETTER EZH WITH CARON
      89 |  00000110 | LATIN CAPITAL LETTER D WITH STROKE
      8A |  00000160 | LATIN CAPITAL LETTER S WITH CARON
      8B |  00002039 | SINGLE LEFT-POINTING ANGLE QUOTATION MARK
      8C |  00000152 | LATIN CAPITAL LIGATURE OE
      91 |  00002018 | LEFT SINGLE QUOTATION MARK
      92 |  00002019 | RIGHT SINGLE QUOTATION MARK
      93 |  0000201C | LEFT DOUBLE QUOTATION MARK
      94 |  0000201D | RIGHT DOUBLE QUOTATION MARK
      95 |  00002022 | BULLET
      96 |  00002013 | EN DASH
      97 |  00002014 | EM DASH
      98 |  00000111 | LATIN SMALL LETTER D WITH STROKE
      99 |  000001E6 | LATIN CAPITAL LETTER G WITH CARON
      9A |  00000161 | LATIN SMALL LETTER S WITH CARON
      9B |  0000203A | SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
      9C |  00000153 | LATIN SMALL LIGATURE OE
      9F |  00000178 | LATIN CAPITAL LETTER Y WITH DIAERESIS
      A0 |  000000A0 | NO-BREAK SPACE
      A1 |  000001E7 | LATIN SMALL LETTER G WITH CARON
      A2 |  000001E4 | LATIN CAPITAL LETTER G WITH STROKE
      A3 |  000000A3 | POUND SIGN
      A4 |  000000A4 | CURRENCY SIGN
      A5 |  000001E5 | LATIN SMALL LETTER G WITH STROKE
      A6 |  000000A6 | BROKEN BAR
      A7 |  000000A7 | SECTION SIGN
      A8 |  000000A8 | DIAERESIS
      A9 |  000000A9 | COPYRIGHT SIGN
      AA |  0000021E | LATIN CAPITAL LETTER H WITH CARON
      AB |  000000AB | LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
      AC |  000000AC | NOT SIGN
      AD |  000000AD | SOFT HYPHEN
      AE |  000000AE | REGISTERED SIGN
      AF |  0000021F | LATIN SMALL LETTER H WITH CARON
      B0 |  000000B0 | DEGREE SIGN
      B1 |  000000B1 | PLUS-MINUS SIGN
      B2 |  000001E8 | LATIN CAPITAL LETTER K WITH CARON
      B3 |  000001E9 | LATIN SMALL LETTER K WITH CARON
      B4 |  000000B4 | ACUTE ACCENT
      B5 |  000000B5 | MICRO SIGN
      B6 |  000000B6 | PILCROW SIGN
      B7 |  000000B7 | MIDDLE DOT
      B8 |  0000014A | LATIN CAPITAL LETTER ENG (Sami)
      B9 |  0000014B | LATIN SMALL LETTER ENG (Sami)
      BA |  00000166 | LATIN CAPITAL LETTER T WITH STROKE
      BB |  000000BB | RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
      BC |  00000167 | LATIN SMALL LETTER T WITH STROKE
      BD |  000000BD | VULGAR FRACTION ONE HALF
      BE |  0000017D | LATIN CAPITAL LETTER Z WITH CARON
      BF |  0000017E | LATIN SMALL LETTER Z WITH CARON
      C0 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C3 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      C4 |  000000C4 | LATIN CAPITAL LETTER A WITH DIAERESIS
      C5 |  000000C5 | LATIN CAPITAL LETTER A WITH RING ABOVE
      C6 |  000000C6 | LATIN CAPITAL LETTER AE
      C7 |  000000C7 | LATIN CAPITAL LETTER C WITH CEDILLA
      C8 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      CB |  000000CB | LATIN CAPITAL LETTER E WITH DIAERESIS
      CC |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  000000CE | LATIN CAPITAL LETTER I WITH CIRCUMFLEX
      CF |  000000CF | LATIN CAPITAL LETTER I WITH DIAERESIS
      D0 |  000000D0 | LATIN CAPITAL LETTER ETH (Icelandic)
      D1 |  000000D1 | LATIN CAPITAL LETTER N WITH TILDE
      D2 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      D6 |  000000D6 | LATIN CAPITAL LETTER O WITH DIAERESIS
      D7 |  000000D7 | MULTIPLICATION SIGN
      D8 |  000000D8 | LATIN CAPITAL LETTER O WITH STROKE
      D9 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  000000DB | LATIN CAPITAL LETTER U WITH CIRCUMFLEX
      DC |  000000DC | LATIN CAPITAL LETTER U WITH DIAERESIS
      DD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      DE |  000000DE | LATIN CAPITAL LETTER THORN (Icelandic)
      DF |  000000DF | LATIN SMALL LETTER SHARP S (German)
      E0 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      E4 |  000000E4 | LATIN SMALL LETTER A WITH DIAERESIS
      E5 |  000000E5 | LATIN SMALL LETTER A WITH RING ABOVE
      E6 |  000000E6 | LATIN SMALL LETTER AE
      E7 |  000000E7 | LATIN SMALL LETTER C WITH CEDILLA
      E8 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      EB |  000000EB | LATIN SMALL LETTER E WITH DIAERESIS
      EC |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  000000EE | LATIN SMALL LETTER I WITH CIRCUMFLEX
      EF |  000000EF | LATIN SMALL LETTER I WITH DIAERESIS
      F0 |  000000F0 | LATIN SMALL LETTER ETH (Icelandic)
      F1 |  000000F1 | LATIN SMALL LETTER N WITH TILDE
      F2 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F6 |  000000F6 | LATIN SMALL LETTER O WITH DIAERESIS
      F7 |  000000F7 | DIVISION SIGN
      F8 |  000000F8 | LATIN SMALL LETTER O WITH STROKE
      F9 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  000000FB | LATIN SMALL LETTER U WITH CIRCUMFLEX
      FC |  000000FC | LATIN SMALL LETTER U WITH DIAERESIS
      FD |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      FE |  000000FE | LATIN SMALL LETTER THORN (Icelandic)
      FF |  000000FF | LATIN SMALL LETTER Y WITH DIAERESIS
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_SAMI_WS2

    $main::fatpacked{"Locale/RecodeData/TIS_620.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_TIS_620';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for TIS-620.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::TIS_620;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x0002,
      0x0003,
      0x0004,
      0x0005,
      0x0006,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x0014,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x0019,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x001e,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0e01,
      0x0e02,
      0x0e03,
      0x0e04,
      0x0e05,
      0x0e06,
      0x0e07,
      0x0e08,
      0x0e09,
      0x0e0a,
      0x0e0b,
      0x0e0c,
      0x0e0d,
      0x0e0e,
      0x0e0f,
      0x0e10,
      0x0e11,
      0x0e12,
      0x0e13,
      0x0e14,
      0x0e15,
      0x0e16,
      0x0e17,
      0x0e18,
      0x0e19,
      0x0e1a,
      0x0e1b,
      0x0e1c,
      0x0e1d,
      0x0e1e,
      0x0e1f,
      0x0e20,
      0x0e21,
      0x0e22,
      0x0e23,
      0x0e24,
      0x0e25,
      0x0e26,
      0x0e27,
      0x0e28,
      0x0e29,
      0x0e2a,
      0x0e2b,
      0x0e2c,
      0x0e2d,
      0x0e2e,
      0x0e2f,
      0x0e30,
      0x0e31,
      0x0e32,
      0x0e33,
      0x0e34,
      0x0e35,
      0x0e36,
      0x0e37,
      0x0e38,
      0x0e39,
      0x0e3a,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
      0x0e3f,
      0x0e40,
      0x0e41,
      0x0e42,
      0x0e43,
      0x0e44,
      0x0e45,
      0x0e46,
      0x0e47,
      0x0e48,
      0x0e49,
      0x0e4a,
      0x0e4b,
      0x0e4c,
      0x0e4d,
      0x0e4e,
      0x0e4f,
      0x0e50,
      0x0e51,
      0x0e52,
      0x0e53,
      0x0e54,
      0x0e55,
      0x0e56,
      0x0e57,
      0x0e58,
      0x0e59,
      0x0e5a,
      0x0e5b,
      0xfffd,
      0xfffd,
      0xfffd,
      0xfffd,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\x02",
      "\x03",
      "\x04",
      "\x05",
      "\x06",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\x14",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\x19",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\x1e",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe0\xb8\x81",
      "\xe0\xb8\x82",
      "\xe0\xb8\x83",
      "\xe0\xb8\x84",
      "\xe0\xb8\x85",
      "\xe0\xb8\x86",
      "\xe0\xb8\x87",
      "\xe0\xb8\x88",
      "\xe0\xb8\x89",
      "\xe0\xb8\x8a",
      "\xe0\xb8\x8b",
      "\xe0\xb8\x8c",
      "\xe0\xb8\x8d",
      "\xe0\xb8\x8e",
      "\xe0\xb8\x8f",
      "\xe0\xb8\x90",
      "\xe0\xb8\x91",
      "\xe0\xb8\x92",
      "\xe0\xb8\x93",
      "\xe0\xb8\x94",
      "\xe0\xb8\x95",
      "\xe0\xb8\x96",
      "\xe0\xb8\x97",
      "\xe0\xb8\x98",
      "\xe0\xb8\x99",
      "\xe0\xb8\x9a",
      "\xe0\xb8\x9b",
      "\xe0\xb8\x9c",
      "\xe0\xb8\x9d",
      "\xe0\xb8\x9e",
      "\xe0\xb8\x9f",
      "\xe0\xb8\xa0",
      "\xe0\xb8\xa1",
      "\xe0\xb8\xa2",
      "\xe0\xb8\xa3",
      "\xe0\xb8\xa4",
      "\xe0\xb8\xa5",
      "\xe0\xb8\xa6",
      "\xe0\xb8\xa7",
      "\xe0\xb8\xa8",
      "\xe0\xb8\xa9",
      "\xe0\xb8\xaa",
      "\xe0\xb8\xab",
      "\xe0\xb8\xac",
      "\xe0\xb8\xad",
      "\xe0\xb8\xae",
      "\xe0\xb8\xaf",
      "\xe0\xb8\xb0",
      "\xe0\xb8\xb1",
      "\xe0\xb8\xb2",
      "\xe0\xb8\xb3",
      "\xe0\xb8\xb4",
      "\xe0\xb8\xb5",
      "\xe0\xb8\xb6",
      "\xe0\xb8\xb7",
      "\xe0\xb8\xb8",
      "\xe0\xb8\xb9",
      "\xe0\xb8\xba",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xe0\xb8\xbf",
      "\xe0\xb9\x80",
      "\xe0\xb9\x81",
      "\xe0\xb9\x82",
      "\xe0\xb9\x83",
      "\xe0\xb9\x84",
      "\xe0\xb9\x85",
      "\xe0\xb9\x86",
      "\xe0\xb9\x87",
      "\xe0\xb9\x88",
      "\xe0\xb9\x89",
      "\xe0\xb9\x8a",
      "\xe0\xb9\x8b",
      "\xe0\xb9\x8c",
      "\xe0\xb9\x8d",
      "\xe0\xb9\x8e",
      "\xe0\xb9\x8f",
      "\xe0\xb9\x90",
      "\xe0\xb9\x91",
      "\xe0\xb9\x92",
      "\xe0\xb9\x93",
      "\xe0\xb9\x94",
      "\xe0\xb9\x95",
      "\xe0\xb9\x96",
      "\xe0\xb9\x97",
      "\xe0\xb9\x98",
      "\xe0\xb9\x99",
      "\xe0\xb9\x9a",
      "\xe0\xb9\x9b",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
      "\xef\xbf\xbd",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000002 => "\x02",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000005 => "\x05",
      0x00000006 => "\x06",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000014 => "\x14",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x00000019 => "\x19",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001e => "\x1e",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x00000e01 => "\xa1",
      0x00000e02 => "\xa2",
      0x00000e03 => "\xa3",
      0x00000e04 => "\xa4",
      0x00000e05 => "\xa5",
      0x00000e06 => "\xa6",
      0x00000e07 => "\xa7",
      0x00000e08 => "\xa8",
      0x00000e09 => "\xa9",
      0x00000e0a => "\xaa",
      0x00000e0b => "\xab",
      0x00000e0c => "\xac",
      0x00000e0d => "\xad",
      0x00000e0e => "\xae",
      0x00000e0f => "\xaf",
      0x00000e10 => "\xb0",
      0x00000e11 => "\xb1",
      0x00000e12 => "\xb2",
      0x00000e13 => "\xb3",
      0x00000e14 => "\xb4",
      0x00000e15 => "\xb5",
      0x00000e16 => "\xb6",
      0x00000e17 => "\xb7",
      0x00000e18 => "\xb8",
      0x00000e19 => "\xb9",
      0x00000e1a => "\xba",
      0x00000e1b => "\xbb",
      0x00000e1c => "\xbc",
      0x00000e1d => "\xbd",
      0x00000e1e => "\xbe",
      0x00000e1f => "\xbf",
      0x00000e20 => "\xc0",
      0x00000e21 => "\xc1",
      0x00000e22 => "\xc2",
      0x00000e23 => "\xc3",
      0x00000e24 => "\xc4",
      0x00000e25 => "\xc5",
      0x00000e26 => "\xc6",
      0x00000e27 => "\xc7",
      0x00000e28 => "\xc8",
      0x00000e29 => "\xc9",
      0x00000e2a => "\xca",
      0x00000e2b => "\xcb",
      0x00000e2c => "\xcc",
      0x00000e2d => "\xcd",
      0x00000e2e => "\xce",
      0x00000e2f => "\xcf",
      0x00000e30 => "\xd0",
      0x00000e31 => "\xd1",
      0x00000e32 => "\xd2",
      0x00000e33 => "\xd3",
      0x00000e34 => "\xd4",
      0x00000e35 => "\xd5",
      0x00000e36 => "\xd6",
      0x00000e37 => "\xd7",
      0x00000e38 => "\xd8",
      0x00000e39 => "\xd9",
      0x00000e3a => "\xda",
      0x00000e3f => "\xdf",
      0x00000e40 => "\xe0",
      0x00000e41 => "\xe1",
      0x00000e42 => "\xe2",
      0x00000e43 => "\xe3",
      0x00000e44 => "\xe4",
      0x00000e45 => "\xe5",
      0x00000e46 => "\xe6",
      0x00000e47 => "\xe7",
      0x00000e48 => "\xe8",
      0x00000e49 => "\xe9",
      0x00000e4a => "\xea",
      0x00000e4b => "\xeb",
      0x00000e4c => "\xec",
      0x00000e4d => "\xed",
      0x00000e4e => "\xee",
      0x00000e4f => "\xef",
      0x00000e50 => "\xf0",
      0x00000e51 => "\xf1",
      0x00000e52 => "\xf2",
      0x00000e53 => "\xf3",
      0x00000e54 => "\xf4",
      0x00000e55 => "\xf5",
      0x00000e56 => "\xf6",
      0x00000e57 => "\xf7",
      0x00000e58 => "\xf8",
      0x00000e59 => "\xf9",
      0x00000e5a => "\xfa",
      0x00000e5b => "\xfb",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::TIS_620 - Conversion routines for TIS-620
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for TIS-620.
  
  =head1 COMMENTS
  
  The following comments have been extracted from the original charmap:
  
   version: 1.0
    sources: Thai Industrial Standards Institute, ECMA registry, IANA
   alias TIS620
   alias TIS620-0
   alias TIS620.2529-1
   alias TIS620.2533-0
   alias ISO-IR-166
  
  Please note that aliases listed above are not necessarily valid!
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      A1 |  00000E01 | THAI CHARACTER KO KAI
      A2 |  00000E02 | THAI CHARACTER KHO KHAI
      A3 |  00000E03 | THAI CHARACTER KHO KHUAT
      A4 |  00000E04 | THAI CHARACTER KHO KHWAI
      A5 |  00000E05 | THAI CHARACTER KHO KHON
      A6 |  00000E06 | THAI CHARACTER KHO RAKHANG
      A7 |  00000E07 | THAI CHARACTER NGO NGU
      A8 |  00000E08 | THAI CHARACTER CHO CHAN
      A9 |  00000E09 | THAI CHARACTER CHO CHING
      AA |  00000E0A | THAI CHARACTER CHO CHANG
      AB |  00000E0B | THAI CHARACTER SO SO
      AC |  00000E0C | THAI CHARACTER CHO CHOE
      AD |  00000E0D | THAI CHARACTER YO YING
      AE |  00000E0E | THAI CHARACTER DO CHADA
      AF |  00000E0F | THAI CHARACTER TO PATAK
      B0 |  00000E10 | THAI CHARACTER THO THAN
      B1 |  00000E11 | THAI CHARACTER THO NANGMONTHO
      B2 |  00000E12 | THAI CHARACTER THO PHUTHAO
      B3 |  00000E13 | THAI CHARACTER NO NEN
      B4 |  00000E14 | THAI CHARACTER DO DEK
      B5 |  00000E15 | THAI CHARACTER TO TAO
      B6 |  00000E16 | THAI CHARACTER THO THUNG
      B7 |  00000E17 | THAI CHARACTER THO THAHAN
      B8 |  00000E18 | THAI CHARACTER THO THONG
      B9 |  00000E19 | THAI CHARACTER NO NU
      BA |  00000E1A | THAI CHARACTER BO BAIMAI
      BB |  00000E1B | THAI CHARACTER PO PLA
      BC |  00000E1C | THAI CHARACTER PHO PHUNG
      BD |  00000E1D | THAI CHARACTER FO FA
      BE |  00000E1E | THAI CHARACTER PHO PHAN
      BF |  00000E1F | THAI CHARACTER FO FAN
      C0 |  00000E20 | THAI CHARACTER PHO SAMPHAO
      C1 |  00000E21 | THAI CHARACTER MO MA
      C2 |  00000E22 | THAI CHARACTER YO YAK
      C3 |  00000E23 | THAI CHARACTER RO RUA
      C4 |  00000E24 | THAI CHARACTER RU
      C5 |  00000E25 | THAI CHARACTER LO LING
      C6 |  00000E26 | THAI CHARACTER LU
      C7 |  00000E27 | THAI CHARACTER WO WAEN
      C8 |  00000E28 | THAI CHARACTER SO SALA
      C9 |  00000E29 | THAI CHARACTER SO RUSI
      CA |  00000E2A | THAI CHARACTER SO SUA
      CB |  00000E2B | THAI CHARACTER HO HIP
      CC |  00000E2C | THAI CHARACTER LO CHULA
      CD |  00000E2D | THAI CHARACTER O ANG
      CE |  00000E2E | THAI CHARACTER HO NOKHUK
      CF |  00000E2F | THAI CHARACTER PAIYANNOI
      D0 |  00000E30 | THAI CHARACTER SARA A
      D1 |  00000E31 | THAI CHARACTER MAI HAN-AKAT
      D2 |  00000E32 | THAI CHARACTER SARA AA
      D3 |  00000E33 | THAI CHARACTER SARA AM
      D4 |  00000E34 | THAI CHARACTER SARA I
      D5 |  00000E35 | THAI CHARACTER SARA II
      D6 |  00000E36 | THAI CHARACTER SARA UE
      D7 |  00000E37 | THAI CHARACTER SARA UEE
      D8 |  00000E38 | THAI CHARACTER SARA U
      D9 |  00000E39 | THAI CHARACTER SARA UU
      DA |  00000E3A | THAI CHARACTER PHINTHU
      DF |  00000E3F | THAI CHARACTER SYMBOL BAHT
      E0 |  00000E40 | THAI CHARACTER SARA E
      E1 |  00000E41 | THAI CHARACTER SARA AE
      E2 |  00000E42 | THAI CHARACTER SARA O
      E3 |  00000E43 | THAI CHARACTER SARA AI MAIMUAN
      E4 |  00000E44 | THAI CHARACTER SARA AI MAIMALAI
      E5 |  00000E45 | THAI CHARACTER LAKKHANGYAO
      E6 |  00000E46 | THAI CHARACTER MAIYAMOK
      E7 |  00000E47 | THAI CHARACTER MAITAIKHU
      E8 |  00000E48 | THAI CHARACTER MAI EK
      E9 |  00000E49 | THAI CHARACTER MAI THO
      EA |  00000E4A | THAI CHARACTER MAI TRI
      EB |  00000E4B | THAI CHARACTER MAI CHATTAWA
      EC |  00000E4C | THAI CHARACTER THANTHAKHAT
      ED |  00000E4D | THAI CHARACTER NIKHAHIT
      EE |  00000E4E | THAI CHARACTER YAMAKKAN
      EF |  00000E4F | THAI CHARACTER FONGMAN
      F0 |  00000E50 | THAI DIGIT ZERO
      F1 |  00000E51 | THAI DIGIT ONE
      F2 |  00000E52 | THAI DIGIT TWO
      F3 |  00000E53 | THAI DIGIT THREE
      F4 |  00000E54 | THAI DIGIT FOUR
      F5 |  00000E55 | THAI DIGIT FIVE
      F6 |  00000E56 | THAI DIGIT SIX
      F7 |  00000E57 | THAI DIGIT SEVEN
      F8 |  00000E58 | THAI DIGIT EIGHT
      F9 |  00000E59 | THAI DIGIT NINE
      FA |  00000E5A | THAI CHARACTER ANGKHANKHU
      FB |  00000E5B | THAI CHARACTER KHOMUT
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_TIS_620

    $main::fatpacked{"Locale/RecodeData/US_ASCII.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_US_ASCII';
  #! /bin/false
  
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for US-ASCII.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::US_ASCII;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		# FIXME: Maybe the lookup is cheaper than the call to chr().
  		$_[1] = join '', 
  		    map $_ > 0x7f ? '?' : chr $_,
  			    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8') {
  		# FIXME: Maybe the lookup is cheaper than the call to chr().
  		$_[1] = join '', 
  		    map $_ > 0x7f ? "\xef\xbf\xbd" : chr $_, unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map { $_ > 0x7f ? 0xfffd : $_ } unpack 'C*', $_[1] ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::US_ASCII - Conversion routines for US-ASCII
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module contains the conversion tables and routines for US-ASCII.
  
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00000002 | START OF TEXT (STX)
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00000005 | ENQUIRY (ENQ)
      06 |  00000006 | ACKNOWLEDGE (ACK)
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00000014 | DEVICE CONTROL FOUR (DC4)
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00000019 | END OF MEDIUM (EM)
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  0000001E | RECORD SEPARATOR (IS2)
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_US_ASCII

    $main::fatpacked{"Locale/RecodeData/UTF_8.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_UTF_8';
  #! /bin/false
  
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for UTF-8 (perl < 5.8.0).
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::UTF_8;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  	return $_[0]->_fromInternal ($_[1]);
      } else {
  	return $_[0]->_toInternal ($_[1]);
      }
  }
  
  # This routine assumes that the internal representation is always sane
  # and contains valid codes only.
  sub _fromInternal
  {
      $_[1] = join '', map {
  	if ($_ <= 0x7f) {
  	    chr $_;
  	} elsif ($_ <= 0x7ff) {
  	    pack ("C2", 
  		  (0xc0 | (($_ >> 6) & 0x1f)),
  		  (0x80 | ($_ & 0x3f)));
  	} elsif ($_ <= 0xffff) {
  	    pack ("C3", 
  		  (0xe0 | (($_ >> 12) & 0xf)),
  		  (0x80 | (($_ >> 6) & 0x3f)),
  		  (0x80 | ($_ & 0x3f)));
  	} elsif ($_ <= 0x1fffff) {
  	    pack ("C4", 
  		  (0xf0 | (($_ >> 18) & 0x7)),
  		  (0x80 | (($_ >> 12) & 0x3f)),
  		  (0x80 | (($_ >> 6) & 0x3f)),
  		  (0x80 | ($_ & 0x3f)));
  	} elsif ($_ <= 0x3ffffff) {
  	    pack ("C5", 
  		  (0xf0 | (($_ >> 24) & 0x3)),
  		  (0x80 | (($_ >> 18) & 0x3f)),
  		  (0x80 | (($_ >> 12) & 0x3f)),
  		  (0x80 | (($_ >> 6) & 0x3f)),
  		  (0x80 | ($_ & 0x3f)));
  	} else {
  	    pack ("C6", 
  		  (0xf0 | (($_ >> 30) & 0x3)),
  		  (0x80 | (($_ >> 24) & 0x1)),
  		  (0x80 | (($_ >> 18) & 0x3f)),
  		  (0x80 | (($_ >> 12) & 0x3f)),
  		  (0x80 | (($_ >> 6) & 0x3f)),
  		  (0x80 | ($_ & 0x3f)));
  	}
      } @{$_[1]};
      return 1;
  }
  
  # Decode UTF-8 into integers.  We do not bother to care about possibly
  # configured replacement characters here and simply fall back to 0xfffd.
  # Rationale: the internal format is never output directly and the other
  # encoders will handle the replacement character correctly.
  sub _toInternal
  {
      if ($] >= 5.006) {
  	$_[1] = [ unpack "U*", $_[1] ];
  	return 1;
      }
  
      # Sigh, we have to decode ourselves.  FIXME: Should be optimized.
      # The routine is awfully slow.
      # It also does not necessarily detect illegal multi-byte sequences.
  
      my @chars = ();
      my @bytes = unpack "C*", $_[1];
  
      BYTE: while (@bytes) {
  	my $byte = shift @bytes;
          if ($byte < 0x80) {
              push @chars, $byte;
          } elsif ($byte < 0xc0 || $byte > 0xfd) {
              push @chars, 0xfffd;
          } else {
              my $num_bytes;
              my $char;
              if ($byte < 0xe0) {
                  $char = $byte & 0x1f;
                  $num_bytes = 1;
              } elsif ($byte < 0xf0) {
                  $char = $byte & 0xf;
                  $num_bytes = 2;
              } elsif ($byte < 0xf8) {
                  $char = $byte & 0x7;
                  $num_bytes = 3;
              } elsif ($byte < 0xfc) {
                  $char = $byte & 0x3;
                  $num_bytes = 4;
              } else {
                  $char = $byte & 0x1;
                  $num_bytes = 5;
              }
              for (my $i = 0; $i < $num_bytes; ++$i) {
                  my $next = shift @bytes;
                  if (!defined $next || $next < 0x80 || $next > 0xbf) {
                      push @chars, 0xfffd;
                      next BYTE;
                  } else {
                      $char <<= 6;
                      $char |= $next & 0x3f;
                  }
              }
              push @chars, $char;
          }
      }
      
      $_[1] = \@chars;
      
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::UTF_8 - Conversion routines for UTF-8
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This modules contains the conversion tables for UTF-8.  It is capable of
  converting from UTF-8 to the internal format of libintl-perl and vice
  versa.   It is only suitable for Perl versions E<lt>= 5.8.0.  However,
  you do not have to bother about version checking, Locale::Recode(3)
  will do that for you.
  
  
  =head1 CHARACTER TABLE
  
  See http://www.unicode.org/.
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_UTF_8

    $main::fatpacked{"Locale/RecodeData/VISCII.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA_VISCII';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Conversion routines for VISCII.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::VISCII;
  
  use strict;
  
  require Locale::RecodeData;
  use base qw(Locale::RecodeData);
  
  my @to_ucs4 = (
      0x0000,
      0x0001,
      0x1eb2,
      0x0003,
      0x0004,
      0x1eb4,
      0x1eaa,
      0x0007,
      0x0008,
      0x0009,
      0x000a,
      0x000b,
      0x000c,
      0x000d,
      0x000e,
      0x000f,
      0x0010,
      0x0011,
      0x0012,
      0x0013,
      0x1ef6,
      0x0015,
      0x0016,
      0x0017,
      0x0018,
      0x1ef8,
      0x001a,
      0x001b,
      0x001c,
      0x001d,
      0x1ef4,
      0x001f,
      0x0020,
      0x0021,
      0x0022,
      0x0023,
      0x0024,
      0x0025,
      0x0026,
      0x0027,
      0x0028,
      0x0029,
      0x002a,
      0x002b,
      0x002c,
      0x002d,
      0x002e,
      0x002f,
      0x0030,
      0x0031,
      0x0032,
      0x0033,
      0x0034,
      0x0035,
      0x0036,
      0x0037,
      0x0038,
      0x0039,
      0x003a,
      0x003b,
      0x003c,
      0x003d,
      0x003e,
      0x003f,
      0x0040,
      0x0041,
      0x0042,
      0x0043,
      0x0044,
      0x0045,
      0x0046,
      0x0047,
      0x0048,
      0x0049,
      0x004a,
      0x004b,
      0x004c,
      0x004d,
      0x004e,
      0x004f,
      0x0050,
      0x0051,
      0x0052,
      0x0053,
      0x0054,
      0x0055,
      0x0056,
      0x0057,
      0x0058,
      0x0059,
      0x005a,
      0x005b,
      0x005c,
      0x005d,
      0x005e,
      0x005f,
      0x0060,
      0x0061,
      0x0062,
      0x0063,
      0x0064,
      0x0065,
      0x0066,
      0x0067,
      0x0068,
      0x0069,
      0x006a,
      0x006b,
      0x006c,
      0x006d,
      0x006e,
      0x006f,
      0x0070,
      0x0071,
      0x0072,
      0x0073,
      0x0074,
      0x0075,
      0x0076,
      0x0077,
      0x0078,
      0x0079,
      0x007a,
      0x007b,
      0x007c,
      0x007d,
      0x007e,
      0x007f,
      0x1ea0,
      0x1eae,
      0x1eb0,
      0x1eb6,
      0x1ea4,
      0x1ea6,
      0x1ea8,
      0x1eac,
      0x1ebc,
      0x1eb8,
      0x1ebe,
      0x1ec0,
      0x1ec2,
      0x1ec4,
      0x1ec6,
      0x1ed0,
      0x1ed2,
      0x1ed4,
      0x1ed6,
      0x1ed8,
      0x1ee2,
      0x1eda,
      0x1edc,
      0x1ede,
      0x1eca,
      0x1ece,
      0x1ecc,
      0x1ec8,
      0x1ee6,
      0x0168,
      0x1ee4,
      0x1ef2,
      0x00d5,
      0x1eaf,
      0x1eb1,
      0x1eb7,
      0x1ea5,
      0x1ea7,
      0x1ea9,
      0x1ead,
      0x1ebd,
      0x1eb9,
      0x1ebf,
      0x1ec1,
      0x1ec3,
      0x1ec5,
      0x1ec7,
      0x1ed1,
      0x1ed3,
      0x1ed5,
      0x1ed7,
      0x1ee0,
      0x01a0,
      0x1ed9,
      0x1edd,
      0x1edf,
      0x1ecb,
      0x1ef0,
      0x1ee8,
      0x1eea,
      0x1eec,
      0x01a1,
      0x1edb,
      0x01af,
      0x00c0,
      0x00c1,
      0x00c2,
      0x00c3,
      0x1ea2,
      0x0102,
      0x1eb3,
      0x1eb5,
      0x00c8,
      0x00c9,
      0x00ca,
      0x1eba,
      0x00cc,
      0x00cd,
      0x0128,
      0x1ef3,
      0x0110,
      0x1ee9,
      0x00d2,
      0x00d3,
      0x00d4,
      0x1ea1,
      0x1ef7,
      0x1eeb,
      0x1eed,
      0x00d9,
      0x00da,
      0x1ef9,
      0x1ef5,
      0x00dd,
      0x1ee1,
      0x01b0,
      0x00e0,
      0x00e1,
      0x00e2,
      0x00e3,
      0x1ea3,
      0x0103,
      0x1eef,
      0x1eab,
      0x00e8,
      0x00e9,
      0x00ea,
      0x1ebb,
      0x00ec,
      0x00ed,
      0x0129,
      0x1ec9,
      0x0111,
      0x1ef1,
      0x00f2,
      0x00f3,
      0x00f4,
      0x00f5,
      0x1ecf,
      0x1ecd,
      0x1ee5,
      0x00f9,
      0x00fa,
      0x0169,
      0x1ee7,
      0x00fd,
      0x1ee3,
      0x1eee,
  );
  
  my @to_utf8 = (
      "\x00",
      "\x01",
      "\xe1\xba\xb2",
      "\x03",
      "\x04",
      "\xe1\xba\xb4",
      "\xe1\xba\xaa",
      "\x07",
      "\x08",
      "\x09",
      "\x0a",
      "\x0b",
      "\x0c",
      "\x0d",
      "\x0e",
      "\x0f",
      "\x10",
      "\x11",
      "\x12",
      "\x13",
      "\xe1\xbb\xb6",
      "\x15",
      "\x16",
      "\x17",
      "\x18",
      "\xe1\xbb\xb8",
      "\x1a",
      "\x1b",
      "\x1c",
      "\x1d",
      "\xe1\xbb\xb4",
      "\x1f",
      "\x20",
      "\x21",
      "\x22",
      "\x23",
      "\x24",
      "\x25",
      "\x26",
      "\x27",
      "\x28",
      "\x29",
      "\x2a",
      "\x2b",
      "\x2c",
      "\x2d",
      "\x2e",
      "\x2f",
      "\x30",
      "\x31",
      "\x32",
      "\x33",
      "\x34",
      "\x35",
      "\x36",
      "\x37",
      "\x38",
      "\x39",
      "\x3a",
      "\x3b",
      "\x3c",
      "\x3d",
      "\x3e",
      "\x3f",
      "\x40",
      "\x41",
      "\x42",
      "\x43",
      "\x44",
      "\x45",
      "\x46",
      "\x47",
      "\x48",
      "\x49",
      "\x4a",
      "\x4b",
      "\x4c",
      "\x4d",
      "\x4e",
      "\x4f",
      "\x50",
      "\x51",
      "\x52",
      "\x53",
      "\x54",
      "\x55",
      "\x56",
      "\x57",
      "\x58",
      "\x59",
      "\x5a",
      "\x5b",
      "\x5c",
      "\x5d",
      "\x5e",
      "\x5f",
      "\x60",
      "\x61",
      "\x62",
      "\x63",
      "\x64",
      "\x65",
      "\x66",
      "\x67",
      "\x68",
      "\x69",
      "\x6a",
      "\x6b",
      "\x6c",
      "\x6d",
      "\x6e",
      "\x6f",
      "\x70",
      "\x71",
      "\x72",
      "\x73",
      "\x74",
      "\x75",
      "\x76",
      "\x77",
      "\x78",
      "\x79",
      "\x7a",
      "\x7b",
      "\x7c",
      "\x7d",
      "\x7e",
      "\x7f",
      "\xe1\xba\xa0",
      "\xe1\xba\xae",
      "\xe1\xba\xb0",
      "\xe1\xba\xb6",
      "\xe1\xba\xa4",
      "\xe1\xba\xa6",
      "\xe1\xba\xa8",
      "\xe1\xba\xac",
      "\xe1\xba\xbc",
      "\xe1\xba\xb8",
      "\xe1\xba\xbe",
      "\xe1\xbb\x80",
      "\xe1\xbb\x82",
      "\xe1\xbb\x84",
      "\xe1\xbb\x86",
      "\xe1\xbb\x90",
      "\xe1\xbb\x92",
      "\xe1\xbb\x94",
      "\xe1\xbb\x96",
      "\xe1\xbb\x98",
      "\xe1\xbb\xa2",
      "\xe1\xbb\x9a",
      "\xe1\xbb\x9c",
      "\xe1\xbb\x9e",
      "\xe1\xbb\x8a",
      "\xe1\xbb\x8e",
      "\xe1\xbb\x8c",
      "\xe1\xbb\x88",
      "\xe1\xbb\xa6",
      "\xc5\xa8",
      "\xe1\xbb\xa4",
      "\xe1\xbb\xb2",
      "\xc3\x95",
      "\xe1\xba\xaf",
      "\xe1\xba\xb1",
      "\xe1\xba\xb7",
      "\xe1\xba\xa5",
      "\xe1\xba\xa7",
      "\xe1\xba\xa9",
      "\xe1\xba\xad",
      "\xe1\xba\xbd",
      "\xe1\xba\xb9",
      "\xe1\xba\xbf",
      "\xe1\xbb\x81",
      "\xe1\xbb\x83",
      "\xe1\xbb\x85",
      "\xe1\xbb\x87",
      "\xe1\xbb\x91",
      "\xe1\xbb\x93",
      "\xe1\xbb\x95",
      "\xe1\xbb\x97",
      "\xe1\xbb\xa0",
      "\xc6\xa0",
      "\xe1\xbb\x99",
      "\xe1\xbb\x9d",
      "\xe1\xbb\x9f",
      "\xe1\xbb\x8b",
      "\xe1\xbb\xb0",
      "\xe1\xbb\xa8",
      "\xe1\xbb\xaa",
      "\xe1\xbb\xac",
      "\xc6\xa1",
      "\xe1\xbb\x9b",
      "\xc6\xaf",
      "\xc3\x80",
      "\xc3\x81",
      "\xc3\x82",
      "\xc3\x83",
      "\xe1\xba\xa2",
      "\xc4\x82",
      "\xe1\xba\xb3",
      "\xe1\xba\xb5",
      "\xc3\x88",
      "\xc3\x89",
      "\xc3\x8a",
      "\xe1\xba\xba",
      "\xc3\x8c",
      "\xc3\x8d",
      "\xc4\xa8",
      "\xe1\xbb\xb3",
      "\xc4\x90",
      "\xe1\xbb\xa9",
      "\xc3\x92",
      "\xc3\x93",
      "\xc3\x94",
      "\xe1\xba\xa1",
      "\xe1\xbb\xb7",
      "\xe1\xbb\xab",
      "\xe1\xbb\xad",
      "\xc3\x99",
      "\xc3\x9a",
      "\xe1\xbb\xb9",
      "\xe1\xbb\xb5",
      "\xc3\x9d",
      "\xe1\xbb\xa1",
      "\xc6\xb0",
      "\xc3\xa0",
      "\xc3\xa1",
      "\xc3\xa2",
      "\xc3\xa3",
      "\xe1\xba\xa3",
      "\xc4\x83",
      "\xe1\xbb\xaf",
      "\xe1\xba\xab",
      "\xc3\xa8",
      "\xc3\xa9",
      "\xc3\xaa",
      "\xe1\xba\xbb",
      "\xc3\xac",
      "\xc3\xad",
      "\xc4\xa9",
      "\xe1\xbb\x89",
      "\xc4\x91",
      "\xe1\xbb\xb1",
      "\xc3\xb2",
      "\xc3\xb3",
      "\xc3\xb4",
      "\xc3\xb5",
      "\xe1\xbb\x8f",
      "\xe1\xbb\x8d",
      "\xe1\xbb\xa5",
      "\xc3\xb9",
      "\xc3\xba",
      "\xc5\xa9",
      "\xe1\xbb\xa7",
      "\xc3\xbd",
      "\xe1\xbb\xa3",
      "\xe1\xbb\xae",
  );
  
  my %from_ucs4 = (
      0x00000000 => "\x00",
      0x00000001 => "\x01",
      0x00000003 => "\x03",
      0x00000004 => "\x04",
      0x00000007 => "\x07",
      0x00000008 => "\x08",
      0x00000009 => "\x09",
      0x0000000a => "\x0a",
      0x0000000b => "\x0b",
      0x0000000c => "\x0c",
      0x0000000d => "\x0d",
      0x0000000e => "\x0e",
      0x0000000f => "\x0f",
      0x00000010 => "\x10",
      0x00000011 => "\x11",
      0x00000012 => "\x12",
      0x00000013 => "\x13",
      0x00000015 => "\x15",
      0x00000016 => "\x16",
      0x00000017 => "\x17",
      0x00000018 => "\x18",
      0x0000001a => "\x1a",
      0x0000001b => "\x1b",
      0x0000001c => "\x1c",
      0x0000001d => "\x1d",
      0x0000001f => "\x1f",
      0x00000020 => "\x20",
      0x00000021 => "\x21",
      0x00000022 => "\x22",
      0x00000023 => "\x23",
      0x00000024 => "\x24",
      0x00000025 => "\x25",
      0x00000026 => "\x26",
      0x00000027 => "\x27",
      0x00000028 => "\x28",
      0x00000029 => "\x29",
      0x0000002a => "\x2a",
      0x0000002b => "\x2b",
      0x0000002c => "\x2c",
      0x0000002d => "\x2d",
      0x0000002e => "\x2e",
      0x0000002f => "\x2f",
      0x00000030 => "\x30",
      0x00000031 => "\x31",
      0x00000032 => "\x32",
      0x00000033 => "\x33",
      0x00000034 => "\x34",
      0x00000035 => "\x35",
      0x00000036 => "\x36",
      0x00000037 => "\x37",
      0x00000038 => "\x38",
      0x00000039 => "\x39",
      0x0000003a => "\x3a",
      0x0000003b => "\x3b",
      0x0000003c => "\x3c",
      0x0000003d => "\x3d",
      0x0000003e => "\x3e",
      0x0000003f => "\x3f",
      0x00000040 => "\x40",
      0x00000041 => "\x41",
      0x00000042 => "\x42",
      0x00000043 => "\x43",
      0x00000044 => "\x44",
      0x00000045 => "\x45",
      0x00000046 => "\x46",
      0x00000047 => "\x47",
      0x00000048 => "\x48",
      0x00000049 => "\x49",
      0x0000004a => "\x4a",
      0x0000004b => "\x4b",
      0x0000004c => "\x4c",
      0x0000004d => "\x4d",
      0x0000004e => "\x4e",
      0x0000004f => "\x4f",
      0x00000050 => "\x50",
      0x00000051 => "\x51",
      0x00000052 => "\x52",
      0x00000053 => "\x53",
      0x00000054 => "\x54",
      0x00000055 => "\x55",
      0x00000056 => "\x56",
      0x00000057 => "\x57",
      0x00000058 => "\x58",
      0x00000059 => "\x59",
      0x0000005a => "\x5a",
      0x0000005b => "\x5b",
      0x0000005c => "\x5c",
      0x0000005d => "\x5d",
      0x0000005e => "\x5e",
      0x0000005f => "\x5f",
      0x00000060 => "\x60",
      0x00000061 => "\x61",
      0x00000062 => "\x62",
      0x00000063 => "\x63",
      0x00000064 => "\x64",
      0x00000065 => "\x65",
      0x00000066 => "\x66",
      0x00000067 => "\x67",
      0x00000068 => "\x68",
      0x00000069 => "\x69",
      0x0000006a => "\x6a",
      0x0000006b => "\x6b",
      0x0000006c => "\x6c",
      0x0000006d => "\x6d",
      0x0000006e => "\x6e",
      0x0000006f => "\x6f",
      0x00000070 => "\x70",
      0x00000071 => "\x71",
      0x00000072 => "\x72",
      0x00000073 => "\x73",
      0x00000074 => "\x74",
      0x00000075 => "\x75",
      0x00000076 => "\x76",
      0x00000077 => "\x77",
      0x00000078 => "\x78",
      0x00000079 => "\x79",
      0x0000007a => "\x7a",
      0x0000007b => "\x7b",
      0x0000007c => "\x7c",
      0x0000007d => "\x7d",
      0x0000007e => "\x7e",
      0x0000007f => "\x7f",
      0x000000c0 => "\xc0",
      0x000000c1 => "\xc1",
      0x000000c2 => "\xc2",
      0x000000c3 => "\xc3",
      0x000000c8 => "\xc8",
      0x000000c9 => "\xc9",
      0x000000ca => "\xca",
      0x000000cc => "\xcc",
      0x000000cd => "\xcd",
      0x000000d2 => "\xd2",
      0x000000d3 => "\xd3",
      0x000000d4 => "\xd4",
      0x000000d5 => "\xa0",
      0x000000d9 => "\xd9",
      0x000000da => "\xda",
      0x000000dd => "\xdd",
      0x000000e0 => "\xe0",
      0x000000e1 => "\xe1",
      0x000000e2 => "\xe2",
      0x000000e3 => "\xe3",
      0x000000e8 => "\xe8",
      0x000000e9 => "\xe9",
      0x000000ea => "\xea",
      0x000000ec => "\xec",
      0x000000ed => "\xed",
      0x000000f2 => "\xf2",
      0x000000f3 => "\xf3",
      0x000000f4 => "\xf4",
      0x000000f5 => "\xf5",
      0x000000f9 => "\xf9",
      0x000000fa => "\xfa",
      0x000000fd => "\xfd",
      0x00000102 => "\xc5",
      0x00000103 => "\xe5",
      0x00000110 => "\xd0",
      0x00000111 => "\xf0",
      0x00000128 => "\xce",
      0x00000129 => "\xee",
      0x00000168 => "\x9d",
      0x00000169 => "\xfb",
      0x000001a0 => "\xb4",
      0x000001a1 => "\xbd",
      0x000001af => "\xbf",
      0x000001b0 => "\xdf",
      0x00001ea0 => "\x80",
      0x00001ea1 => "\xd5",
      0x00001ea2 => "\xc4",
      0x00001ea3 => "\xe4",
      0x00001ea4 => "\x84",
      0x00001ea5 => "\xa4",
      0x00001ea6 => "\x85",
      0x00001ea7 => "\xa5",
      0x00001ea8 => "\x86",
      0x00001ea9 => "\xa6",
      0x00001eaa => "\x06",
      0x00001eab => "\xe7",
      0x00001eac => "\x87",
      0x00001ead => "\xa7",
      0x00001eae => "\x81",
      0x00001eaf => "\xa1",
      0x00001eb0 => "\x82",
      0x00001eb1 => "\xa2",
      0x00001eb2 => "\x02",
      0x00001eb3 => "\xc6",
      0x00001eb4 => "\x05",
      0x00001eb5 => "\xc7",
      0x00001eb6 => "\x83",
      0x00001eb7 => "\xa3",
      0x00001eb8 => "\x89",
      0x00001eb9 => "\xa9",
      0x00001eba => "\xcb",
      0x00001ebb => "\xeb",
      0x00001ebc => "\x88",
      0x00001ebd => "\xa8",
      0x00001ebe => "\x8a",
      0x00001ebf => "\xaa",
      0x00001ec0 => "\x8b",
      0x00001ec1 => "\xab",
      0x00001ec2 => "\x8c",
      0x00001ec3 => "\xac",
      0x00001ec4 => "\x8d",
      0x00001ec5 => "\xad",
      0x00001ec6 => "\x8e",
      0x00001ec7 => "\xae",
      0x00001ec8 => "\x9b",
      0x00001ec9 => "\xef",
      0x00001eca => "\x98",
      0x00001ecb => "\xb8",
      0x00001ecc => "\x9a",
      0x00001ecd => "\xf7",
      0x00001ece => "\x99",
      0x00001ecf => "\xf6",
      0x00001ed0 => "\x8f",
      0x00001ed1 => "\xaf",
      0x00001ed2 => "\x90",
      0x00001ed3 => "\xb0",
      0x00001ed4 => "\x91",
      0x00001ed5 => "\xb1",
      0x00001ed6 => "\x92",
      0x00001ed7 => "\xb2",
      0x00001ed8 => "\x93",
      0x00001ed9 => "\xb5",
      0x00001eda => "\x95",
      0x00001edb => "\xbe",
      0x00001edc => "\x96",
      0x00001edd => "\xb6",
      0x00001ede => "\x97",
      0x00001edf => "\xb7",
      0x00001ee0 => "\xb3",
      0x00001ee1 => "\xde",
      0x00001ee2 => "\x94",
      0x00001ee3 => "\xfe",
      0x00001ee4 => "\x9e",
      0x00001ee5 => "\xf8",
      0x00001ee6 => "\x9c",
      0x00001ee7 => "\xfc",
      0x00001ee8 => "\xba",
      0x00001ee9 => "\xd1",
      0x00001eea => "\xbb",
      0x00001eeb => "\xd7",
      0x00001eec => "\xbc",
      0x00001eed => "\xd8",
      0x00001eee => "\xff",
      0x00001eef => "\xe6",
      0x00001ef0 => "\xb9",
      0x00001ef1 => "\xf1",
      0x00001ef2 => "\x9f",
      0x00001ef3 => "\xcf",
      0x00001ef4 => "\x1e",
      0x00001ef5 => "\xdc",
      0x00001ef6 => "\x14",
      0x00001ef7 => "\xd6",
      0x00001ef8 => "\x19",
      0x00001ef9 => "\xdb",
  );
  
  sub _recode
  {
      if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = join '',
  	        map $from_ucs4{$_} 
                  || (defined $from_ucs4{$_} ? $from_ucs4{$_} : "\x3f"),
  		    @{$_[1]};
      } elsif ($_[0]->{_to} eq 'UTF-8',) {
  		$_[1] = join '', map $to_utf8[$_], unpack 'C*', $_[1];
      } else {
  		$_[1] = [ map 
  				  $to_ucs4[$_],
  				  unpack 'C*', $_[1] 
  				  ];
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::VISCII - Conversion routines for VISCII
  
  =head1 SYNOPSIS
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module is generated and contains the conversion tables and
  routines for VISCII.
  =head1 CHARACTER TABLE
  
  The following table is sorted in the same order as the original charmap.
  All character codes are in hexadecimal.  Please read 'ISO-10646' as
  'ISO-10646-UCS4'.
  
   Local | ISO-10646 | Description
  -------+-----------+-------------------------------------------------
      00 |  00000000 | NULL (NUL)
      01 |  00000001 | START OF HEADING (SOH)
      02 |  00001EB2 | LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
      03 |  00000003 | END OF TEXT (ETX)
      04 |  00000004 | END OF TRANSMISSION (EOT)
      05 |  00001EB4 | LATIN CAPITAL LETTER A WITH BREVE AND TILDE
      06 |  00001EAA | LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
      07 |  00000007 | BELL (BEL)
      08 |  00000008 | BACKSPACE (BS)
      09 |  00000009 | CHARACTER TABULATION (HT)
      0A |  0000000A | LINE FEED (LF)
      0B |  0000000B | LINE TABULATION (VT)
      0C |  0000000C | FORM FEED (FF)
      0D |  0000000D | CARRIAGE RETURN (CR)
      0E |  0000000E | SHIFT OUT (SO)
      0F |  0000000F | SHIFT IN (SI)
      10 |  00000010 | DATALINK ESCAPE (DLE)
      11 |  00000011 | DEVICE CONTROL ONE (DC1)
      12 |  00000012 | DEVICE CONTROL TWO (DC2)
      13 |  00000013 | DEVICE CONTROL THREE (DC3)
      14 |  00001EF6 | LATIN CAPITAL LETTER Y WITH HOOK ABOVE
      15 |  00000015 | NEGATIVE ACKNOWLEDGE (NAK)
      16 |  00000016 | SYNCHRONOUS IDLE (SYN)
      17 |  00000017 | END OF TRANSMISSION BLOCK (ETB)
      18 |  00000018 | CANCEL (CAN)
      19 |  00001EF8 | LATIN CAPITAL LETTER Y WITH TILDE
      1A |  0000001A | SUBSTITUTE (SUB)
      1B |  0000001B | ESCAPE (ESC)
      1C |  0000001C | FILE SEPARATOR (IS4)
      1D |  0000001D | GROUP SEPARATOR (IS3)
      1E |  00001EF4 | LATIN CAPITAL LETTER Y WITH DOT BELOW
      1F |  0000001F | UNIT SEPARATOR (IS1)
      20 |  00000020 | SPACE
      21 |  00000021 | EXCLAMATION MARK
      22 |  00000022 | QUOTATION MARK
      23 |  00000023 | NUMBER SIGN
      24 |  00000024 | DOLLAR SIGN
      25 |  00000025 | PERCENT SIGN
      26 |  00000026 | AMPERSAND
      27 |  00000027 | APOSTROPHE
      28 |  00000028 | LEFT PARENTHESIS
      29 |  00000029 | RIGHT PARENTHESIS
      2A |  0000002A | ASTERISK
      2B |  0000002B | PLUS SIGN
      2C |  0000002C | COMMA
      2D |  0000002D | HYPHEN-MINUS
      2E |  0000002E | FULL STOP
      2F |  0000002F | SOLIDUS
      30 |  00000030 | DIGIT ZERO
      31 |  00000031 | DIGIT ONE
      32 |  00000032 | DIGIT TWO
      33 |  00000033 | DIGIT THREE
      34 |  00000034 | DIGIT FOUR
      35 |  00000035 | DIGIT FIVE
      36 |  00000036 | DIGIT SIX
      37 |  00000037 | DIGIT SEVEN
      38 |  00000038 | DIGIT EIGHT
      39 |  00000039 | DIGIT NINE
      3A |  0000003A | COLON
      3B |  0000003B | SEMICOLON
      3C |  0000003C | LESS-THAN SIGN
      3D |  0000003D | EQUALS SIGN
      3E |  0000003E | GREATER-THAN SIGN
      3F |  0000003F | QUESTION MARK
      40 |  00000040 | COMMERCIAL AT
      41 |  00000041 | LATIN CAPITAL LETTER A
      42 |  00000042 | LATIN CAPITAL LETTER B
      43 |  00000043 | LATIN CAPITAL LETTER C
      44 |  00000044 | LATIN CAPITAL LETTER D
      45 |  00000045 | LATIN CAPITAL LETTER E
      46 |  00000046 | LATIN CAPITAL LETTER F
      47 |  00000047 | LATIN CAPITAL LETTER G
      48 |  00000048 | LATIN CAPITAL LETTER H
      49 |  00000049 | LATIN CAPITAL LETTER I
      4A |  0000004A | LATIN CAPITAL LETTER J
      4B |  0000004B | LATIN CAPITAL LETTER K
      4C |  0000004C | LATIN CAPITAL LETTER L
      4D |  0000004D | LATIN CAPITAL LETTER M
      4E |  0000004E | LATIN CAPITAL LETTER N
      4F |  0000004F | LATIN CAPITAL LETTER O
      50 |  00000050 | LATIN CAPITAL LETTER P
      51 |  00000051 | LATIN CAPITAL LETTER Q
      52 |  00000052 | LATIN CAPITAL LETTER R
      53 |  00000053 | LATIN CAPITAL LETTER S
      54 |  00000054 | LATIN CAPITAL LETTER T
      55 |  00000055 | LATIN CAPITAL LETTER U
      56 |  00000056 | LATIN CAPITAL LETTER V
      57 |  00000057 | LATIN CAPITAL LETTER W
      58 |  00000058 | LATIN CAPITAL LETTER X
      59 |  00000059 | LATIN CAPITAL LETTER Y
      5A |  0000005A | LATIN CAPITAL LETTER Z
      5B |  0000005B | LEFT SQUARE BRACKET
      5C |  0000005C | REVERSE SOLIDUS
      5D |  0000005D | RIGHT SQUARE BRACKET
      5E |  0000005E | CIRCUMFLEX ACCENT
      5F |  0000005F | LOW LINE
      60 |  00000060 | GRAVE ACCENT
      61 |  00000061 | LATIN SMALL LETTER A
      62 |  00000062 | LATIN SMALL LETTER B
      63 |  00000063 | LATIN SMALL LETTER C
      64 |  00000064 | LATIN SMALL LETTER D
      65 |  00000065 | LATIN SMALL LETTER E
      66 |  00000066 | LATIN SMALL LETTER F
      67 |  00000067 | LATIN SMALL LETTER G
      68 |  00000068 | LATIN SMALL LETTER H
      69 |  00000069 | LATIN SMALL LETTER I
      6A |  0000006A | LATIN SMALL LETTER J
      6B |  0000006B | LATIN SMALL LETTER K
      6C |  0000006C | LATIN SMALL LETTER L
      6D |  0000006D | LATIN SMALL LETTER M
      6E |  0000006E | LATIN SMALL LETTER N
      6F |  0000006F | LATIN SMALL LETTER O
      70 |  00000070 | LATIN SMALL LETTER P
      71 |  00000071 | LATIN SMALL LETTER Q
      72 |  00000072 | LATIN SMALL LETTER R
      73 |  00000073 | LATIN SMALL LETTER S
      74 |  00000074 | LATIN SMALL LETTER T
      75 |  00000075 | LATIN SMALL LETTER U
      76 |  00000076 | LATIN SMALL LETTER V
      77 |  00000077 | LATIN SMALL LETTER W
      78 |  00000078 | LATIN SMALL LETTER X
      79 |  00000079 | LATIN SMALL LETTER Y
      7A |  0000007A | LATIN SMALL LETTER Z
      7B |  0000007B | LEFT CURLY BRACKET
      7C |  0000007C | VERTICAL LINE
      7D |  0000007D | RIGHT CURLY BRACKET
      7E |  0000007E | TILDE
      7F |  0000007F | DELETE (DEL)
      80 |  00001EA0 | LATIN CAPITAL LETTER A WITH DOT BELOW
      81 |  00001EAE | LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
      82 |  00001EB0 | LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
      83 |  00001EB6 | LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
      84 |  00001EA4 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
      85 |  00001EA6 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
      86 |  00001EA8 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
      87 |  00001EAC | LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
      88 |  00001EBC | LATIN CAPITAL LETTER E WITH TILDE
      89 |  00001EB8 | LATIN CAPITAL LETTER E WITH DOT BELOW
      8A |  00001EBE | LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
      8B |  00001EC0 | LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
      8C |  00001EC2 | LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
      8D |  00001EC4 | LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
      8E |  00001EC6 | LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
      8F |  00001ED0 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
      90 |  00001ED2 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
      91 |  00001ED4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
      92 |  00001ED6 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
      93 |  00001ED8 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
      94 |  00001EE2 | LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
      95 |  00001EDA | LATIN CAPITAL LETTER O WITH HORN AND ACUTE
      96 |  00001EDC | LATIN CAPITAL LETTER O WITH HORN AND GRAVE
      97 |  00001EDE | LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
      98 |  00001ECA | LATIN CAPITAL LETTER I WITH DOT BELOW
      99 |  00001ECE | LATIN CAPITAL LETTER O WITH HOOK ABOVE
      9A |  00001ECC | LATIN CAPITAL LETTER O WITH DOT BELOW
      9B |  00001EC8 | LATIN CAPITAL LETTER I WITH HOOK ABOVE
      9C |  00001EE6 | LATIN CAPITAL LETTER U WITH HOOK ABOVE
      9D |  00000168 | LATIN CAPITAL LETTER U WITH TILDE
      9E |  00001EE4 | LATIN CAPITAL LETTER U WITH DOT BELOW
      9F |  00001EF2 | LATIN CAPITAL LETTER Y WITH GRAVE
      A0 |  000000D5 | LATIN CAPITAL LETTER O WITH TILDE
      A1 |  00001EAF | LATIN SMALL LETTER A WITH BREVE AND ACUTE
      A2 |  00001EB1 | LATIN SMALL LETTER A WITH BREVE AND GRAVE
      A3 |  00001EB7 | LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
      A4 |  00001EA5 | LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
      A5 |  00001EA7 | LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
      A6 |  00001EA9 | LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
      A7 |  00001EAD | LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
      A8 |  00001EBD | LATIN SMALL LETTER E WITH TILDE
      A9 |  00001EB9 | LATIN SMALL LETTER E WITH DOT BELOW
      AA |  00001EBF | LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
      AB |  00001EC1 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
      AC |  00001EC3 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
      AD |  00001EC5 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
      AE |  00001EC7 | LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
      AF |  00001ED1 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
      B0 |  00001ED3 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
      B1 |  00001ED5 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
      B2 |  00001ED7 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
      B3 |  00001EE0 | LATIN CAPITAL LETTER O WITH HORN AND TILDE
      B4 |  000001A0 | LATIN CAPITAL LETTER O WITH HORN
      B5 |  00001ED9 | LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
      B6 |  00001EDD | LATIN SMALL LETTER O WITH HORN AND GRAVE
      B7 |  00001EDF | LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
      B8 |  00001ECB | LATIN SMALL LETTER I WITH DOT BELOW
      B9 |  00001EF0 | LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
      BA |  00001EE8 | LATIN CAPITAL LETTER U WITH HORN AND ACUTE
      BB |  00001EEA | LATIN CAPITAL LETTER U WITH HORN AND GRAVE
      BC |  00001EEC | LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
      BD |  000001A1 | LATIN SMALL LETTER O WITH HORN
      BE |  00001EDB | LATIN SMALL LETTER O WITH HORN AND ACUTE
      BF |  000001AF | LATIN CAPITAL LETTER U WITH HORN
      C0 |  000000C0 | LATIN CAPITAL LETTER A WITH GRAVE
      C1 |  000000C1 | LATIN CAPITAL LETTER A WITH ACUTE
      C2 |  000000C2 | LATIN CAPITAL LETTER A WITH CIRCUMFLEX
      C3 |  000000C3 | LATIN CAPITAL LETTER A WITH TILDE
      C4 |  00001EA2 | LATIN CAPITAL LETTER A WITH HOOK ABOVE
      C5 |  00000102 | LATIN CAPITAL LETTER A WITH BREVE
      C6 |  00001EB3 | LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
      C7 |  00001EB5 | LATIN SMALL LETTER A WITH BREVE AND TILDE
      C8 |  000000C8 | LATIN CAPITAL LETTER E WITH GRAVE
      C9 |  000000C9 | LATIN CAPITAL LETTER E WITH ACUTE
      CA |  000000CA | LATIN CAPITAL LETTER E WITH CIRCUMFLEX
      CB |  00001EBA | LATIN CAPITAL LETTER E WITH HOOK ABOVE
      CC |  000000CC | LATIN CAPITAL LETTER I WITH GRAVE
      CD |  000000CD | LATIN CAPITAL LETTER I WITH ACUTE
      CE |  00000128 | LATIN CAPITAL LETTER I WITH TILDE
      CF |  00001EF3 | LATIN SMALL LETTER Y WITH GRAVE
      D0 |  00000110 | LATIN CAPITAL LETTER D WITH STROKE
      D1 |  00001EE9 | LATIN SMALL LETTER U WITH HORN AND ACUTE
      D2 |  000000D2 | LATIN CAPITAL LETTER O WITH GRAVE
      D3 |  000000D3 | LATIN CAPITAL LETTER O WITH ACUTE
      D4 |  000000D4 | LATIN CAPITAL LETTER O WITH CIRCUMFLEX
      D5 |  00001EA1 | LATIN SMALL LETTER A WITH DOT BELOW
      D6 |  00001EF7 | LATIN SMALL LETTER Y WITH HOOK ABOVE
      D7 |  00001EEB | LATIN SMALL LETTER U WITH HORN AND GRAVE
      D8 |  00001EED | LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
      D9 |  000000D9 | LATIN CAPITAL LETTER U WITH GRAVE
      DA |  000000DA | LATIN CAPITAL LETTER U WITH ACUTE
      DB |  00001EF9 | LATIN SMALL LETTER Y WITH TILDE
      DC |  00001EF5 | LATIN SMALL LETTER Y WITH DOT BELOW
      DD |  000000DD | LATIN CAPITAL LETTER Y WITH ACUTE
      DE |  00001EE1 | LATIN SMALL LETTER O WITH HORN AND TILDE
      DF |  000001B0 | LATIN SMALL LETTER U WITH HORN
      E0 |  000000E0 | LATIN SMALL LETTER A WITH GRAVE
      E1 |  000000E1 | LATIN SMALL LETTER A WITH ACUTE
      E2 |  000000E2 | LATIN SMALL LETTER A WITH CIRCUMFLEX
      E3 |  000000E3 | LATIN SMALL LETTER A WITH TILDE
      E4 |  00001EA3 | LATIN SMALL LETTER A WITH HOOK ABOVE
      E5 |  00000103 | LATIN SMALL LETTER A WITH BREVE
      E6 |  00001EEF | LATIN SMALL LETTER U WITH HORN AND TILDE
      E7 |  00001EAB | LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
      E8 |  000000E8 | LATIN SMALL LETTER E WITH GRAVE
      E9 |  000000E9 | LATIN SMALL LETTER E WITH ACUTE
      EA |  000000EA | LATIN SMALL LETTER E WITH CIRCUMFLEX
      EB |  00001EBB | LATIN SMALL LETTER E WITH HOOK ABOVE
      EC |  000000EC | LATIN SMALL LETTER I WITH GRAVE
      ED |  000000ED | LATIN SMALL LETTER I WITH ACUTE
      EE |  00000129 | LATIN SMALL LETTER I WITH TILDE
      EF |  00001EC9 | LATIN SMALL LETTER I WITH HOOK ABOVE
      F0 |  00000111 | LATIN SMALL LETTER D WITH STROKE
      F1 |  00001EF1 | LATIN SMALL LETTER U WITH HORN AND DOT BELOW
      F2 |  000000F2 | LATIN SMALL LETTER O WITH GRAVE
      F3 |  000000F3 | LATIN SMALL LETTER O WITH ACUTE
      F4 |  000000F4 | LATIN SMALL LETTER O WITH CIRCUMFLEX
      F5 |  000000F5 | LATIN SMALL LETTER O WITH TILDE
      F6 |  00001ECF | LATIN SMALL LETTER O WITH HOOK ABOVE
      F7 |  00001ECD | LATIN SMALL LETTER O WITH DOT BELOW
      F8 |  00001EE5 | LATIN SMALL LETTER U WITH DOT BELOW
      F9 |  000000F9 | LATIN SMALL LETTER U WITH GRAVE
      FA |  000000FA | LATIN SMALL LETTER U WITH ACUTE
      FB |  00000169 | LATIN SMALL LETTER U WITH TILDE
      FC |  00001EE7 | LATIN SMALL LETTER U WITH HOOK ABOVE
      FD |  000000FD | LATIN SMALL LETTER Y WITH ACUTE
      FE |  00001EE3 | LATIN SMALL LETTER O WITH HORN AND DOT BELOW
      FF |  00001EEE | LATIN CAPITAL LETTER U WITH HORN AND TILDE
  
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::RecodeData(3), Locale::Recode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA_VISCII

    $main::fatpacked{"Locale/RecodeData/_Encode.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_RECODEDATA__ENCODE';
  #! /bin/false
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Interface to Encode.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::RecodeData::_Encode;
  
  use strict;
  use integer;
  
  use Encode;
  
  require Locale::RecodeData;
  use base qw (Locale::RecodeData);
  
  sub _recode
  {
  	use bytes;
  
  	my $retval;
  	
  	if ($_[0]->{_from} eq 'INTERNAL') {
  		$_[1] = pack "N*", @{$_[1]};
  		$retval = Encode::from_to ($_[1], 'UTF-32BE', $_[0]->{_to});
  	} elsif ($_[0]->{_to} eq 'INTERNAL') {
  		$retval = Encode::from_to ($_[1], $_[0]->{_from}, 'UTF-32BE');
  		return unless defined $retval;
  		$_[1] = [ unpack "N*", $_[1] ];
  	} else {
  		$retval = Encode::from_to ($_[1], $_[0]->{_from}, $_[0]->{_to});
  	}
  	
  	return unless defined $retval;
  	return 1;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::RecodeData::_Encode - Internal wrapper around Encode 
  
  =head1 SYNOPSIS
  
  use Locale::RecodeData::_Encode;
  
  This module is internal to libintl.  Do not use directly!
  
  =head1 DESCRIPTION
  
  This module converts text with the help of Encode(3).  It is 
  tried first for conversions if libintl-perl detects the presence
  of Encode.
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::Recode(3), Encode(3), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_RECODEDATA__ENCODE

    $main::fatpacked{"Locale/TextDomain.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_TEXTDOMAIN';
  #! /bin/false
  
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # High-level interface to Perl i18n.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package __TiedTextDomain;
  
  use strict;
  
  sub TIEHASH
  {
      my ($class, $function) = @_;
      bless {
          __function => $function,
      }, $class;
  }
  
  sub FETCH
  {
      my ($self, $msg) = @_;
      
      &{$self->{__function}} ($msg);
  }
  
  sub FIRSTKEY
  {
      my $self = shift;
      my $reset_iterator = keys %$self;
      return scalar each %$self;
  }
  
  sub NEXTKEY
  {
      my $self = shift;
      return scalar each %$self;
  }
  
  sub CLEAR {}
  sub STORE {}
  sub DELETE {}
  
  1;
  
  package Locale::TextDomain;
  
  use strict;
  
  use Locale::Messages qw (textdomain bindtextdomain dgettext dngettext dpgettext dnpgettext);
  use Cwd qw (abs_path);
  
  use vars qw ($VERSION);
  
  $VERSION = '1.26';
  
  require Exporter;
  
  use vars qw (@ISA @EXPORT %__ $__);
  
  @ISA = ('Exporter');
  @EXPORT = qw (__ __x __n __nx __xn __p __px __np __npx $__ %__ 
                N__ N__n N__p N__np);
  
  my %textdomains = ();
  my %bound_dirs = ();
  my @default_dirs = ();
  
  sub __ ($);
  	
  sub __find_domain ($);
  sub __expand ($%);
  sub __tied_gettext ($$);
  
  BEGIN {
      # Tie the hash to gettext().
      tie %__, '__TiedTextDomain', \&__tied_gettext;
      $__ = \%__;
  
  	# Add default search directories, but only if they exist.
  	for my $dir (qw (/usr/share/locale /usr/local/share/locale)) {
          if (-d $dir) {
              @default_dirs = ($dir);
              last;
          }
      }
  }
  
  # Normal gettext.
  sub __ ($)
  {
      my $msgid = shift;
  	
      my $package = caller;
      
      my $textdomain = $textdomains{$package};
      
      __find_domain $textdomain if 
  		defined $textdomain && defined $bound_dirs{$textdomain};
      
      return dgettext $textdomain => $msgid;
  }
  
  # Called from tied hash.
  sub __tied_gettext ($$)
  {
      my ($msgid) = @_;
      
      my ($package) = caller (1);
      
      my $textdomain = $textdomains{$package};
      unless (defined $textdomain) {
  		my ($maybe_package, $filename, $line) = caller (2);
  		if (exists $textdomains{$maybe_package}) {
  			warn <<EOF;
  Probable use of \$__ or \%__ where __() should be used at $filename:$line.
  EOF
  		}
  	}
      __find_domain $textdomain if
  		defined $textdomain && defined $bound_dirs{$textdomain};
      
      return dgettext $textdomain => $msgid;
  }
  
  # With interpolation.
  sub __x ($@)
  {
      my ($msgid, %vars) = @_;
      
      my $package = caller;
      
      my $textdomain = $textdomains{$package};
      
      __find_domain $textdomain if
  		defined $textdomain && defined $bound_dirs{$textdomain};
      
      return __expand ((dgettext $textdomain => $msgid), %vars);
  }
  
  # Plural.
  sub __n ($$$)
  {
      my ($msgid, $msgid_plural, $count) = @_;
      
      my $package = caller;
      
      my $textdomain = $textdomains{$package};
      
      __find_domain $textdomain if
  		defined $textdomain && defined $bound_dirs{$textdomain};
      
      return dngettext $textdomain, $msgid, $msgid_plural, $count;
  }
  
  # Plural with interpolation.
  sub __nx ($$$@)
  {
      my ($msgid, $msgid_plural, $count, %args) = @_;
      
      my $package = caller;
      
      my $textdomain = $textdomains{$package};
      
      __find_domain $textdomain if
  		defined $textdomain && defined $bound_dirs{$textdomain};
      
      return __expand ((dngettext $textdomain, $msgid, $msgid_plural, $count),
  					 %args);
  }
  
  # Plural with interpolation.
  sub __xn ($$$@)
  {
      my ($msgid, $msgid_plural, $count, %args) = @_;
      
      my $package = caller;
      
      my $textdomain = $textdomains{$package};
      
      __find_domain $textdomain if
  		defined $textdomain && defined $bound_dirs{$textdomain};
      
      return __expand ((dngettext $textdomain, $msgid, $msgid_plural, $count),
  					 %args);
  }
  
  # Context. (p is for particular or special)
  sub __p ($$)
  {
      my $msgctxt = shift;
      my $msgid = shift;
  	
      my $package = caller;
      
      my $textdomain = $textdomains{$package};
      
      __find_domain $textdomain if 
  		defined $textdomain && defined $bound_dirs{$textdomain};
      
      return dpgettext $textdomain => $msgctxt, $msgid;
  }
  
  # With interpolation.
  sub __px ($$@)
  {
      my ($msgctxt, $msgid, %vars) = @_;
      
      my $package = caller;
      
      my $textdomain = $textdomains{$package};
      
      __find_domain $textdomain if
  		defined $textdomain && defined $bound_dirs{$textdomain};
      
      return __expand ((dpgettext $textdomain => $msgctxt, $msgid), %vars);
  }
  
  # Context + Plural.
  sub __np ($$$$)
  {
      my ($msgctxt, $msgid, $msgid_plural, $count) = @_;
      
      my $package = caller;
      
      my $textdomain = $textdomains{$package};
      
      __find_domain $textdomain if
  		defined $textdomain && defined $bound_dirs{$textdomain};
      
      return dnpgettext $textdomain, $msgctxt, $msgid, $msgid_plural, $count;
  }
  
  # Plural with interpolation.
  sub __npx ($$$$@)
  {
      my ($msgctxt, $msgid, $msgid_plural, $count, %args) = @_;
      
      my $package = caller;
      
      my $textdomain = $textdomains{$package};
      
      __find_domain $textdomain if
  		defined $textdomain && defined $bound_dirs{$textdomain};
      
      return __expand ((dnpgettext $textdomain, $msgctxt, $msgid, $msgid_plural, $count),
  					 %args);
  }
  
  # Dummy functions for string marking.
  sub N__($)
  {
      return shift;
  }
  
  sub N__n($$$)
  {
      return @_;
  }
  
  sub N__p($$) {
      return @_;
  }
  
  sub N__np($$$$) {
      return @_;
  }
  
  sub import
  {
      my ($self, $textdomain, @search_dirs) = @_;
      
      # Check our caller.
      my $package = caller;
      return if exists $textdomains{$package};
      
      # Was a textdomain specified?
  	$textdomain = textdomain unless defined $textdomain && length $textdomain;
      
      # Remember the textdomain of that package.
      $textdomains{$package} = $textdomain;
      
      # Remember that we still have to bind that textdomain to
      # a directory.
      unless (exists $bound_dirs{$textdomain}) {
  		unless (@search_dirs) {
  			@search_dirs = ((map $_ . '/LocaleData', @INC), @default_dirs)
  				unless @search_dirs;
  			if (my $share = eval {
  				require File::ShareDir;
  				File::ShareDir::dist_dir ($textdomain);
  			}) {
  				unshift @search_dirs, 
                          map { "$share/$_" }
                          qw (locale LocaleData);
              }
  		}
  		$bound_dirs{$textdomain} = [grep { -d $_ } @search_dirs];
      }
  	
      Locale::TextDomain->export_to_level (1, $package, @EXPORT);
      
      return;
  }
  
  # Private functions.
  sub __find_domain ($)
  {
  	my $domain = shift;
  	
  	my $try_dirs = $bound_dirs{$domain};
  	
  	if (defined $try_dirs) {
  		my $found_dir = '';
  		
  		TRYDIR: foreach my $dir (map { abs_path $_ } grep { -d $_ } @$try_dirs) {
  			# Is there a message catalog?  We have to search recursively
  			# for it.  Since globbing is reported to be buggy under
  			# MS-DOS, we roll our own version.
  			local *DIR;
  			if (opendir DIR, $dir) {
  				my @files = map { "$dir/$_/LC_MESSAGES/$domain.mo" } 
  					grep { ! /^\.\.?$/ } readdir DIR;
  
  				foreach my $file (@files) {
  					if (-f $file || -l $file) {
  						# If we find a non-readable file on our way,
  						# we access has been disabled on purpose.
  						# Therefore no -r check here.
  						$found_dir = $dir;
  						last TRYDIR;
  					}
  				}
  			}
  		}
  		
  		# If there was no success, this will fall back to the default search
  		# directories.
  		bindtextdomain $domain => $found_dir;
      }
      
      # The search has completed.
      undef $bound_dirs{$domain};
      
      return 1;
  }
  
  sub __expand ($%)
  {
      my ($translation, %args) = @_;
      
      my $re = join '|', map { quotemeta $_ } keys %args;
      $translation =~ s/\{($re)\}/defined $args{$1} ? $args{$1} : "{$1}"/ge;
      
      return $translation;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::TextDomain - Perl Interface to Uniforum Message Translation
  
  =head1 SYNOPSIS
  
   use Locale::TextDomain ('my-package', @locale_dirs);
   
   use Locale::TextDomain qw (my-package);
   
   my $translated = __"Hello World!\n";
   
   my $alt = $__{"Hello World!\n"};
   
   my $alt2 = $__->{"Hello World!\n"};
  
   my @list = (N__"Hello",
               N__"World");
   
   printf (__n ("one file read", 
                "%d files read", 
                $num_files),
           $num_files);
  
   print __nx ("one file read", "{num} files read", $num_files,
               num => $num_files);
  
   my $translated_context = __p ("Verb, to view", "View");
  
   printf (__np ("Files read from filesystems",
                 "one file read", 
                 "%d files read", 
                 $num_files),
           $num_files);
  
   print __npx ("Files read from filesystems",
                "one file read", 
                "{num} files read", 
                $num_files,
                num => $num_files);
  
  
  =head1 DESCRIPTION
  
  The module Locale::TextDomain(3pm) provides a high-level interface
  to Perl message translation.
  
  =head2 Textdomains
  
  When you request a translation for a given string, the system used
  in libintl-perl follows a standard strategy to find a suitable message
  catalog containing the translation: Unless you explicitely define
  a name for the message catalog, libintl-perl will assume that your
  catalog is called 'messages' (unless you have changed the default
  value to something else via Locale::Messages(3pm), method textdomain()).
  
  You might think that his default strategy leaves room for optimization
  and you are right.  It would be a lot smarter if multiple software
  packages, all with their individual message catalogs, could be installed
  on one system, and it should also be possible that third-party
  components of your software (like Perl modules) can load their
  message catalogs, too, without interfering with yours.
  
  The solution is clear, you have to assign a unique name to your message
  database, and you have to specify that name at run-time.  That unique
  name is the so-called I<textdomain> of your software package.  The name is
  actually arbitrary but you should follow these best-practice guidelines
  to ensure maximum interoperability:
  
  =over 8
  
  =item File System Safety
  
  In practice, textdomains get mapped into file names, and you should
  therefore make sure that the textdomain you choose is a valid filename
  on every system that will run your software.
  
  =item Case-sensitivity
  
  Textdomains are always case-sensitive (i. e. 'Package' and 'PACKAGE'
  are not the same).  However, since the message catalogs will be stored
  on file systems, that may or may not distinguish case when looking
  up file names, you should avoid potential conflicts here.
  
  =item Textdomain Should Match CPAN Name
  
  If your software is listed as a module on CPAN, you should simply 
  choose the name on CPAN as your textdomain.  The textdomain for 
  libintl-perl is hence 'libintl-perl'.  But please replace all 
  periods ('.') in your package name with an underscore because ...
  
  =item Internet Domain Names as a Fallback
  
  ... if your software is I<not> a module listed on CPAN, as a last 
  resort you should use the Java(tm) package scheme, i. e. choose
  an internet domain that you are owner of (or ask the owner of an
  internet domain) and concatenate your preferred textdomain with the
  reversed internet domain.  Example: Your company runs the web-site
  'www.foobar.org' and is the owner of the domain 'foobar.org'.  The
  textdomain for your company's software 'barfoos' should hence be
  'org.foobar.barfoos'.
  
  =back
  
  If your software is likely to be installed in different versions on
  the same system, it is probably a good idea to append some version
  information to your textdomain.
  
  Other systems are less strict with the naming scheme for textdomains
  but the phenomena known as Perl is actually a plethora of small,
  specialized modules and it is probably wisest to postulate some
  namespace model in order to avoid chaos.
  
  =head2 Binding textdomains to directories
  
  Once the system knows the I<textdomain> of the message that you 
  want to get translated into the user's language, it still has to
  find the correct message catalog.  By default, libintl-perl will
  look up the string in the translation database found in the 
  directories F</usr/share/locale> and F</usr/local/share/locale>
  (in that order).
  
  It is neither guaranteed that these directories exist on the target
  machine, nor can you be sure that the installation routine has write 
  access to these locations.  You can therefore instruct libintl-perl 
  to search other directories prior to the default directories.  Specifying 
  a differnt search directory is called I<binding> a textdomain to a 
  directory.
  
  Beginning with version 1.20, B<Locale::TextDomain> extends the default 
  strategy by a Perl-specific approach.  If L<File::ShareDir> is installed, it 
  will look in the subdirectories named F<locale> and F<LocaleData> (in that 
  order) in the directory returned by C<File::ShareDir::dist_dir ($textdomain)>
  (if L<File::ShareDir> is installed),
  and check for a database containing the message for your textdomain there.
  This allows you to install your database in the Perl-specific shared directory
  using L<Module::Install>'s C<install_share> directive or the Dist::Zilla
  L<ShareDir plugin|Dist::Zilla::Plugin::ShareDir>.
  
  If L<File::ShareDir> is not availabe, or if Locale::TextDomain fails to find
  the translation files in the L<File::ShareDir> directory, it will next look in
  every directory found in the standard include path C<@INC>, and check for a
  database containing the message for your textdomain there. Example: If the
  path F</usr/lib/perl/5.8.0/site_perl> is in your C<@INC>, you can install your
  translation files in F</usr/lib/perl/5.8.0/site_perl/LocaleData>, and they
  will be found at run-time.
  
  =head1 USAGE
  
  It is crucial to remember that you use Locale::TextDomain(3) as
  specified in the section L</SYNOPSIS>, that means you have to 
  B<use> it, not B<require> it.  The module behaves quite differently 
  compared to other modules.
  
  The most significant difference is the meaning of the list passed
  as an argument to the use() function.  It actually works like this:
  
      use Locale::TextDomain (TEXTDOMAIN, DIRECTORY, ...)
  
  The first argument (the first string passed to use()) is the textdomain
  of your package, optionally followed by a list of directories to search
  I<instead> of the Perl-specific directories (see above: F</LocaleData>
  appended to a F<File::ShareDir> directory and every path in C<@INC>).
  
  If you are the author of a package 'barfoos', you will probably put
  the line
  
      use Locale::TextDomain 'barfoos';
  
  resp. for non-CPAN modules
  
      use Locale::TextDomain 'org.foobar.barfoos';
  
  in every module of your package that contains translatable strings. If
  your module has been installed properly, including the message catalogs,
  it will then be able to retrieve these translations at run-time.
  
  If you have not installed the translation database in a directory
  F<LocaleData> in the L<File::ShareDir> directory or the standard include
  path C<@INC> (or in the system directories F</usr/share/locale> resp.
  F</usr/local/share/locale>), you have to explicitely specify a search
  path by giving the names of directories (as strings!) as additional
  arguments to use():
  
      use Locale::TextDomain qw (barfoos ./dir1 ./dir2);
  
  Alternatively you can call the function bindtextdomain() with suitable
  arguments (see the entry for bindtextdomain() in 
  L<Locale::Messages/FUNCTIONS>).  If you do so, you should pass 
  C<undef> as an additional argument in order to avoid unnecessary
  lookups:
  
      use Locale::TextDomain ('barfoos', undef);
  
  You see that the arguments given to use() have nothing to do with
  what is imported into your namespace, but they are rather arguments
  to textdomain(), resp. bindtextdomain().  Does that mean that 
  B<Locale::TextDomain> exports nothing into your namespace? Umh, not
  exactly ... in fact it imports I<all> functions listed below into
  your namespace, and hence you should not define conflicting functions
  (and variables) yourself.
  
  So, why has Locale::TextDomain to be different from other modules?
  If you have ever written software in C and prepared it for 
  internationalization (i18n), you will probably have defined some
  preprocessor macros like:
  
      #define _(String) dgettext ("my-textdomain", String)
      #define N_(String) String
  
  You only have to define that once in C, and the textdomain for your
  package is automatically inserted into all gettext functions.  In 
  Perl there is no such mechanism (at least it is not portable,
  option -P) and using the gettext functions could become quite
  cumbersome without some extra fiddling:
  
      print dgettext ("my-textdomain", "Hello world!\n");
  
  This is no fun.  In C it would merely be a
  
      printf (_("Hello world!\n"));
  
  Perl has to be more concise and shorter than C ... see the next
  section for how you can use B<Locale::TextDomain> to end up in Perl 
  with a mere
  
      print __"Hello World!\n";
  
  =head1 EXPORTED FUNCTIONS
  
  All functions have quite funny names on purpose.  In fact the 
  purpose for that is quite clear: They should be short, operator-like,
  and they should not yell for conflicts with existing functions in
  I<your> namespace.  You will understand it, when you internationalize
  your first Perl program or module.  Preparing it is more like marking
  strings as being translatable than inserting function calls.  Here
  we go:
  
  =over 4
  
  =item B<__ MSGID>
  
  B<NOTE:> This is a I<double> underscore!
  
  The basic and most-used function.  It is a short-cut for a call
  to gettext() resp. dgettext(), and simply returns the translation for
  B<MSGID>.  If your old code reads like this:
  
      print "permission denied";
      
  You will now write:
  
      print __"permission denied";
  
  That's all, the string will be output in the user's preferred language,
  provided that you have installed a translation for it.
  
  Of course you can also use parentheses:
  
      print __("permission denied");
  
  Or even:
  
      print (__("permission denied"));
  
  In my eyes, the first version without parentheses looks best.
  
  =item B<__x MSGID, ID1 =E<gt> VAL1, ID2 =E<gt> VAL2, ...>
  
  One of the nicest features in Perl is its capability to interpolate
  variables into strings:
  
      print "This is the $color $thing.\n";
  
  This nice feature might con you into thinking that you could now
  write
  
      print __"This is the $color $thing.\n";
  
  Alas, that would be nice, but it is not possible.  Remember that the
  function __() serves both as an operator for translating strings 
  I<and> as a mark for translatable strings.  If the above string would
  get extracted from your Perl code, the un-interpolated form would
  end up in the message catalog because when parsing your code it
  is unpredictable what values the variables C<$thing> and C<$color>
  will have at run-time (this fact is most probably one of the reasons
  you have written your program for).
  
  However, at run-time, Perl will have interpolated the values already
  I<before> __() (resp. the underlying gettext() function) has seen the
  original string.  Consequently something like "This is the red car.\n"
  will be looked up in the message catalog, it will not be found (because
  only "This is the $color $thing.\n" is included in the database), 
  and the original, untranslated string will be returned.
  Honestly, because this is almost always an error, the xgettext(1)
  program will bail out with a fatal error when it comes across that
  string in your code.
  
  There are two workarounds for that:
  
      printf __"This is the %s %s.\n", $color, $thing;
  
  But that has several disadvantages: Your translator will only
  see the isolated string, and without the surrounding code it
  is almost impossible to interpret it correctly.  Of course, GNU
  emacs and other software capable of editing PO translation files
  will allow you to examine the context in the source code, but it
  is more likely that your translator will look for a less challenging
  translation project when she frequently comes across such messages.
  
  And even if she does understand the underlying programming, what
  if she has to reorder the color and the thing like in French:
  
      msgid "This is the red car.\n";
      msgstr "Cela est la voiture rouge.\n"
  
  Zut alors! While it is possible to reorder the arguments to printf()
  and friends, it requires a syntax that is is nothing that you want to 
  learn.
  
  So what? The Perl backend to GNU gettext has defined an alternative
  format for interpolatable strings:
  
      "This is the {color} {thing}.\n";
  
  Instead of Perl variables you use place-holders (legal Perl variables
  are also legal place-holders) in curly braces, and then you call
  
      print __x ("This is the {color} {thing}.\n", 
                 thing => $thang,
                 color => $color);
  
  The function __x() will take the additional hash and replace all
  occurencies of the hash keys in curly braces with the corresponding
  values.  Simple, readable, understandable to translators, what else
  would you want?  And if the translator forgets, misspells or otherwise
  messes up some "variables", the msgfmt(1) program, that is used to
  compile the textual translation file into its binary representation
  will even choke on these errors and refuse to compile the translation.
  
  =item B<__n MSGID, MSGID_PLURAL, COUNT>
  
  Whew! That looks complicated ... It is best explained with an example.
  We'll have another look at your vintage code:
  
      if ($files_deleted > 1) {
          print "All files have been deleted.\n";
      } else {
          print "One file has been deleted.\n";
      }
  
  Your intent is clear, you wanted to avoid the cumbersome
  "1 files deleted".  This is okay for English, but other languages
  have more than one plural form.  For example in Russian it makes
  a difference whether you want to say 1 file, 3 files or 6 files.
  You will use three different forms of the noun 'file' in each
  case.  [Note: Yep, very smart you are, the Russian word for 'file'
  is in fact the English word, and it is an invariable noun, but if you
  know that, you will also understand the rest despite this little
  simplification ...].
  
  That is the reason for the existance of the function ngettext(),
  that __n() is a short-cut for: 
  
      print __n"One file has been deleted.\n", 
               "All files have been deleted.\n",
               $files_deleted;
  
  Alternatively:
  
      print __n ("One file has been deleted.\n",
                 "All files have been deleted.\n",
                 $files_deleted);
  
  The effect is always the same: libintl-perl will find out which
  plural form to pick for your user's language, and the output string
  will always look okay.
  
  =item B<__nx MSGID, MSGID_PLURAL, COUNT, VAR1 =E<gt> VAL1, VAR2 =E<gt> VAL2, ...>
  
  Bringing it all together:
  
      print __nx ("One file has been deleted.\n",
                  "{count} files have been deleted.\n",
                  $num_files,
                  count => $num_files);
  
  The function __nx() picks the correct plural form (also for English!)
  I<and> it is capable of interpolating variables into strings.
  
  Have a close look at the order of arguments: The first argument is the
  string in the singular, the second one is the plural string. The third
  one is an integer indicating the number of items.  This third argument
  is I<only> used to pick the correct translation.  The optionally 
  following arguments make up the hash used for interpolation.  In the
  beginning it is often a little confusing that the variable holding the
  number of items will usually be repeated somewhere in the interpolation
  hash.
  
  =item B<__xn MSGID, MSGID_PLURAL, COUNT, VAR1 =E<gt> VAL1, VAR2 =E<gt> VAL2, ...>
  
  Does exactly the same thing as __nx().  In fact it is a common typo
  promoted to a feature.
  
  =item B<__p MSGCTXT, MSGID>
  
  This is much like __. The "p" stands for "particular", and the MSGCTXT 
  is used to provide context to the translator. This may be neccessary
  when your string is short, and could stand for multiple things. For example:
  
      print __p"Verb, to view", "View";
      print __p"Noun, a view", "View";
  
  The above may be "View" entries in a menu, where View->Source and File->View 
  are different forms of "View", and likely need to be translated differently.
  
  A typical usage are GUI programs.  Imagine a program with a main
  menu and the notorious "Open" entry in the "File" menu.  Now imagine,
  there is another menu entry Preferences->Advanced->Policy where you have 
  a choice between the alternatives "Open" and "Closed".  In English, "Open"
  is the adequate text at both places.  In other languages, it is very
  likely that you need two different translations.  Therefore, you would
  now write:
  
      __p"File|", "Open";
      __p"Preferences|Advanced|Policy", "Open";
  
  In English, or if no translation can be found, the second argument
  (MSGID) is returned.
  
  This function was introduced in libintl-perl 1.17.
  
  =item B<__px MSGCTXT, MSGID, VAR1 =E<gt> VAL1, VAR2 =E<gt> VAL2, ...>
  
  Like __p(), but supports variable substitution in the string, like __x().
  
      print __px("Verb, to view", "View {file}", file => $filename);
  
  See __p() and __x() for more details.
  
  This function was introduced in libintl-perl 1.17.
  
  =item B<__np MSGCTXT, MSGID, MSGID_PLURAL, COUNT>
  
  This adds context to plural calls. It should not be needed very often,
  if at all, due to the __nx() function. The type of variable substitution
  used in other gettext libraries (using sprintf-like sybols, like %s or %1)
  sometimes required context. For a (bad) example of this:
  
      printf (__np("[count] files have been deleted",
                  "One file has been deleted.\n",
                  "%s files have been deleted.\n",
                  $num_files),
              $num_files);
  
  NOTE: The above usage is discouraged. Just use the __nx() call, which 
  provides inline context via the key names.
  
  This function was introduced in libintl-perl 1.17.
  
  =item B<__npx MSGCTXT, MSGID, MSGID_PLURAL, COUNT, VAR1 =E<gt> VAL1, VAR2 =E<gt> VAL2, ...>
  
  This is provided for comleteness. It adds the variable interpolation
  into the string to the previous method, __np().
  
  It's usage would be like so:
  
      print __npx ("Files being permenantly removed",
                   "One file has been deleted.\n",
                   "{count} files have been deleted.\n",
                   $num_files,
                   count => $num_files);
  
  I cannot think of any situations requiring this, but we can easily 
  support it, so here it is.
  
  This function was introduced in libintl-perl 1.17.
  
  =item B<N__ (ARG1, ARG2, ...)>
  
  A no-op function that simply echoes its arguments to the caller.  Take
  the following piece of Perl:
  
      my @options = (
          "Open",
          "Save",
          "Save As",
      );
  
      ...
  
      my $option = $options[1];
  
  Now say that you want to have this translatable.  You could sometimes
  simply do:
  
      my @options = (
          __"Open",
          __"Save",
          __"Save As",
      );
  
      ...
  
      my $option = $options[1];
  
  But often times this will not be what you want, for example when you
  also need the unmodified original string.  Sometimes it may not even
  work, for example, when the preferred user language is not yet
  determined at the time that the list is initialized.
  
  In these cases you would write:
  
      my @options = (
          N__"Open",
          N__"Save",
          N__"Save As",
      );
  
      ...
  
      my $option = __($options[1]);
      # or: my $option = dgettext ('my-domain', $options[1]);
  
  Now all the strings in C<@options> will be left alone, since N__()
  returns its arguments (one ore more) unmodified.  Nevertheless, the
  string extractor will be able to recognize the strings as being 
  translatable.  And you can still get the translation later by passing
  the variable instead of the string to one of the above translation
  functions.
  
  =item B<N__n (MSGID, MSGID_PLURAL, COUNT)>
  
  Does exactly the same as N__().  You will use this form if you have 
  to mark the strings as having plural forms.
  
  =item B<N__p (MSGCTXT, MSGID)>
  
  Marks B<MSGID> as N__() does, but in the context B<MSGCTXT>.
  
  =item B<N__np (MSGCTXT, MSGID, MSGID_PLURAL, COUNT)>
  
  Marks B<MSGID> as N__n() does, but in the context B<MSGCTXT>.
  =back
  
  =head1 EXPORTED VARIABLES
  
  The module exports several variables into your namespace:
  
  =over 4
  
  =item B<%__>
  
  A tied hash.  Its keys are your original messages, the values are
  their translations:
  
      my $title = "<h1>$__{'My Homepage'}</h1>";
  
  This is much better for your translation team than
  
      my $title = __"<h1>My Homepage</h1>";
  
  In the second case the HTML code will make it into the translation
  database and your translators have to be aware of HTML syntax when
  translating strings.
  
  B<Warning:> Do I<not> use this hash outside of double-quoted strings!
  The code in the tied hash object relies on the correct working of
  the function caller() (see "perldoc -f caller"), and this function
  will report incorrect results if the tied hash value is the argument
  to a function from another package, for example:
  
    my $result = Other::Package::do_it ($__{'Some string'});
  
  The tied hash code will see "Other::Package" as the calling package,
  instead of your own package.  Consequently it will look up the message
  in the wrong text domain.  There is no workaround for this bug.
  Therefore:
  
  Never use the tied hash interpolated strings!
  
  =item B<$__>
  
  A reference to C<%__>, in case you prefer:
  
       my $title = "<h1>$__->{'My Homepage'}</h1>";
  
  =back
  
  =head1 PERFORMANCE
  
  Message translation can be a time-consuming task.  Take this little
  example:
  
      1: use Locale::TextDomain ('my-domain');
      2: use POSIX (:locale_h);
      3: 
      4: setlocale (LC_ALL, '');
      5: print __"Hello world!\n";
  
  This will usually be quite fast, but in pathological cases it may
  run for several seconds.  A worst-case scenario would be a
  Chinese user at a terminal that understands the codeset Big5-HKSCS.
  Your translator for Chinese has however chosen to encode the translations
  in the codeset EUC-TW.
  
  What will happen at run-time?  First, the library will search and load a
  (maybe large) message catalog for your textdomain 'my-domain'.  Then
  it will look up the translation for "Hello world!\n", it will find that
  it is encoded in EUC-TW.  Since that differs from the output codeset
  Big5-HKSCS, it will first load a conversion table containing several
  ten-thousands of codepoints for EUC-TW, then it does the same with
  the smaller, but still very large conversion table for Big5-HKSCS,
  it will convert the translation on the fly from EUC-TW into Big5-HKSCS,
  and finally it will return the converted translation.
  
  A worst-case scenario but realistic.  And for these five lines of codes,
  there is not much you can do to make it any faster.  You should understand,
  however, I<when> the different steps will take place, so that you can
  arrange your code for it.
  
  You have learned in the section L</DESCRIPTION> that line 1 is 
  responsible for locating your message database.  However, the
  use() will do nothing more than remembering your settings.  It will
  not search any directories, it will not load any catalogs or 
  conversion tables.
  
  Somewhere in your code you will always have a call to 
  POSIX::setlocale(), and the performance of this call may be time-consuming,
  depending on the architecture of your system.  On some systems, this
  will consume very little time, on others it will only consume a
  considerable amount of time for the first call, and on others it may
  always be time-consuming.  Since you cannot know, how setlocale() is
  implemented on the target system, you should reduce the calls to
  setlocale() to a minimum.
  
  Line 5 requests the translation for your string.  Only now, the library
  will actually load the message catalog, and only now will it load
  eventually needed conversion tables.  And from now on, all this information
  will be cached in memory.  This strategy is used throughout libintl-perl,
  and you may describe it as 'load-on-first-access'.  Getting the next
  translation will consume very little resources.
  
  However, although the translation retrieval is somewhat obfuscated
  by an operator-like function call, it is still a function call, and in
  fact it even involves a chain of function calls.  Consequently, the
  following example is probably bad practice:
  
      foreach (1 .. 100_000) {
          print __"Hello world!\n";
      }
  
  This example introduces a lot of overhead into your program.  Better
  do this:
  
      my $string = __"Hello world!\n";
      foreach (1 .. 100_000) {
          print $string;
      }
  
  The translation will never change, there is no need to retrieve it
  over and over again.  Although libintl-perl will of course cache
  the translation read from the file system, you can still avoid the
  overhead for the function calls.
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::Messages(3pm), Locale::gettext_pp(3pm), perl(1),
  gettext(1), gettext(3)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_TEXTDOMAIN

    $main::fatpacked{"Locale/TextDomain/UTF8.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_TEXTDOMAIN_UTF8';
  package Locale::TextDomain::UTF8;
  
  use 5.010001;
  use strict;
  use warnings;
  
  our $VERSION = '0.01'; # VERSION
  
  use Encode             ();
  use Locale::Messages   ();
  
  $ENV{OUTPUT_CHARSET} = 'UTF-8';
  sub import {
      my ($class, $textdomain, @search_dirs) = @_;
  
      my $pkg = caller;
  
      eval qq[package $pkg; use Locale::TextDomain \$textdomain, \@search_dirs;];
      die $@ if $@;
      Locale::Messages::bind_textdomain_filter(
          $textdomain, \&Encode::decode_utf8);
  }
  
  1;
  # ABSTRACT: Shortcut to use Locale::TextDomain and decoding to UTF8
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Locale::TextDomain::UTF8 - Shortcut to use Locale::TextDomain and decoding to UTF8
  
  =head1 VERSION
  
  version 0.01
  
  =head1 SYNOPSIS
  
  Instead of:
  
   use Locale::TextDomain 'Some-TextDomain';
  
  you now say:
  
   use Locale::TextDomain::UTF8 'Some-TextDomain';
  
  =head1 DESCRIPTION
  
   use Locale::TextDomain::UTF8 'Some-TextDomain'
  
  is equivalent to:
  
   use Locale::TextDomain 'Some-TextDomain';
   use Locale::Messages qw(bind_textdomain_filter);
   use Encode;
   BEGIN {
       $ENV{OUTPUT_CHARSET} = 'UTF-8';
       bind_textdomain_filter 'Some-TextDomain' => \&Encode::decode_utf8;
   }
  
  it's just more convenient, especially if you have to do it for each textdomain.
  
  Why would you want this? To ensure that strings returned by the C<__()>, et al
  functions are UTF8-encoded Perl strings. For example, if you want to pass the
  strings to L<Unicode::GCString>. For more details, see the Perl Advent article
  mentioned in the SEE ALSO section.
  
  =head1 SEE ALSO
  
  L<Locale::TextDomain>
  
  L<Locale::Messages>
  
  L<http://www.perladvent.org/2013/2013-12-09.html>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Locale-TextDomain-UTF8>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Locale-TextDomain-UTF8>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Locale-TextDomain-UTF8>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  Steven Haryanto <stevenharyanto@gmail.com>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2013 by Steven Haryanto.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOCALE_TEXTDOMAIN_UTF8

    $main::fatpacked{"Locale/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_UTIL';
  #! /bin/false
  
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Portable methods for locale handling.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::Util;
  
  use strict;
  
  use constant DEBUG => 0;
  
  use base qw (Exporter);
  
  use vars qw (@EXPORT_OK);
  
  @EXPORT_OK = qw (parse_http_accept_language
  				 parse_http_accept_charset
  				 set_locale set_locale_cache get_locale_cache
  				 web_set_locale);
  
  # The following list maps languages to a rough guess of the country that
  # is most likely to be meant if no locale info for the country alone is
  # found.  I have assembled the list to the best of my knowledge, preferring
  # the country that has the language as its official language, and in doubt
  # listing the country that has the most speakers of that language.  Corrections
  # are welcome.
  use constant LANG2COUNTRY => {
      aa => 'ET', # Afar => Ethiopia
      ab => 'AB', # Abkhazian => Georgia
      # ae => '??', # Avestan => ??, Iran?
      af => 'za',  # Afrikaans => South Africa
      am => 'ET', # Amharic => Ethiopia
      ar => 'EG', # Arabic => Egypt
      as => 'IN', # Assamese => India
      ay => 'BO', # Aymara => Bolivia
      az => 'AZ', # Azerbaijani => Azerbaijan
      ba => 'RU', # Bashkir => Russia
      be => 'BY', # Belarusian => Belarus
      bg => 'BG', # Bulgarian => Bulgaria
      bh => 'IN', # Bihari => India
      bi => 'VU', # Bislama => Vanuatu
      bn => 'BD', # Bengali => Bangladesh
      bo => 'CN', # Tibetan => China
      br => 'FR', # Breton => France
      bs => 'BA', # Bosnian => Bosnia and Herzegovina
      ca => 'ES', # Catalan => Spain
      ce => 'RU', # Chechen => Russia
      ch => '??', # Chamorro => Guam (or mp?)
      co => 'FR', # Corsican => France
      cs => 'CZ', # Czech => Czech Republic
      cu => 'BG', # Church Slavic => Bulgaria
      cv => 'RU', # Chuvash => Russia
      cy => 'GB', # Welsh => United Kingdom
      da => 'DK', # Danish => Denmark
      de => 'DE', # German => Germany
      dz => 'BT', # Dzongkha => Bhutan
      el => 'GR', # Greek => Greece
      en => 'US', # English => United States
      es => 'ES', # Actually Mexico and the US have more Spanish speakers
                  # than Spain.  But it can be assumed that they either add
                  # the country to their browser settings or will not care
                  # to much.
      et => 'EE', # Estonian => Estonia
      fa => 'IR', # Iran, Islamic Republic of
      fi => 'FI', # Finnish => Finland
      fj => 'FJ', # Fijian => Fiji
      fo => 'FO', # Faeroese => Faroe Islands
      fr => 'FR', # French => France
      fy => 'FY', # Frisian => Netherlands
      ga => 'IE', # Irish => Ireland
      gd => 'GB', # Gaelic (Scots) => United Kingdom
      gl => 'ES', # Gallegan => Spain
      gn => 'PY', # Guarani => Paraguay
      gu => 'IN', # Gujarati => IN
      gv => 'GB', # Manx => United Kingdom
      ha => 'NE', # Hausa => Niger (ng?)
      he => 'IL', # Hebrew => Israel
      hi => 'IN', # Hindi => India
      ho => 'PG', # Hiri Motu => Papua New Guinea
      hr => 'HR', # Croatian
      hu => 'HU', # Hungarian => Hungary
      hy => 'AM', # Armenian => Armenia
      hz => 'NA', # Herero => Namibia
      # ia => '??', # Interlingua (aka "latino sine flexione") => ??
      id => 'ID', # Indonesian => Indonesia
      # ie => '??', # Interlingue => ???
      ik => 'US', # Inupiaq => United States
      is => 'IS', # Icelandic => Iceland
      it => 'IT', # Italian => Italy
      iu => 'CA', # Inuktitut => Canada
      iw => 'IL', # Hebrew => Israel
      ja => 'JP', # Japanese => Japan
      jw => 'ID', # Javanese => Indonesia
      ka => 'GE', # Georgian => Georgia
      ki => 'KE', # Kikuyu => Kenya
      kj => 'AO', # Kuanyama => Angola (na?)
      kk => 'KZ', # Kazakh => Kazakhstan
      kl => 'GL', # Kalaallisut => Greenland
      km => 'KH', # Khmer => Cambodia
      kn => 'IN', # Kannada => India
      ko => 'KR', # Korean => Korea, Republic of (more speakers than North Korea)
      ks => 'IN', # Kashmiri => India
      ku => 'TR', # Kurdish => Turkey
      kv => 'RU', # Komi => Russia
      kw => 'GB', # Cornish => United Kingdom
      ky => 'KG', # Kirghyz => Kyrgyzstan
      la => 'VA', # Latin => Holy See (Vatican City State)
      lb => 'LU', # Letzeburgesch => Luxembourg
      ln => 'CG', # Lingala => Republic of the Congo (cd?)
      lo => 'LA', # Lao => Lao People's Democratic Republic
      lt => 'LT', # Lithuanian => Lithuania
      lv => 'LV', # Latvian => Latvia
      mg => 'MG', # Malagasy => Madagascar
      mh => 'MH', # Marshall => Marshall Islands
      mi => 'NZ', # Maori => New Zealand
      mk => 'MK', # Macedonian => Macedonia, the Former Yugoslav Republic of
      ml => 'IN', # Malayalam => India
      mn => 'MN', # Mongolian => Mongolia
      mr => 'IN', # Marathi => India
      ms => 'MY', # Malay => Malaysia (FIXME: not really sure ...)
      mt => 'MT', # Maltese => Malta
      my => 'MM', # Burmese => Myanmar
      na => 'NR', # Nauru => Nauru
      nb => 'NO', # Norwegian Bokmål => Norway
      nd => 'ZA', # Ndebele, North => South Africa
      ne => 'NP', # Nepali => Nepal
      ng => 'NA', # Ndonga => Namibia
      nl => 'NL', # Dutch => Netherlands
      nn => 'NO', # Norwegian Nynorsk => Norway
      no => 'NO', # Norwegian => Norway
      nr => 'ZA', # Ndebele, South => South Africa
      nv => 'US', # Navajo => United States
      ny => 'MW', # Chichewa; Nyanja => Malawi
      oc => 'FR', # Occitan (post 1500) => France
      om => 'ET', # Oromo => Ethiopia
      or => 'IN', # Oriya => India
      os => 'RU', # Ossetian; Ossetic => Russia (FIXME: Or Georgia?)
      pa => 'IN', # Panjabi => India
      pi => 'IN', # Pali => India (FIXME: Or Thailand, Sri Lanka, Myanmar,
                  # Cambodia)
      pl => 'PL', # Polish => Poland
      ps => 'PK', # Pushto => Pakistan
      pt => 'PT', # Portuguese => Portugal (following our rules this should
                  # actually be Brazil but that would be to unrealistic,
                  # people from Brazil set their locale to pt_BR).
      qu => 'PE', # Quechua => Peru
      rm => 'CH', # Rhaeto-Romance => Switzerland
      rn => 'RW', # Rundi => Rwanda
      ro => 'RO', # Romanian => Romania
      ru => 'RU', # Russian => Russia
      rw => 'RW', # Kinyarwanda => Rwanda
      sa => 'IN', # Sanskrit => India
      sc => 'IT', # Sardinian => Italy
      sd => 'IN', # Sindhi => India
      se => 'SE', # Sami => Sweden (Totally unsure here.  The Sami languages 
  	            # are also spoken in Norway, Finland and Russia, but the 
                  # largest part of the area seems to be in Sweden. 
      sg => '??', # Sango => Central African Republic
      si => 'LK', # Sinhalese => Sri Lanka
      sk => 'SK', # Slovakian => Slovakia
      sl => 'SI', # Slovenian => Slovenia
      sm => 'WS', # Samoan => Samoa
      sh => 'ZW', # Shona => Zimbabwe (FIXME: Rather Mozambique?)
      so => 'SO', # Somali => Somalia
      sq => 'AL', # Albanian => Albania
      sr => 'YU', # Serbian => Yugoslavia
      ss => '??', # Swati => Swaziland (za?)
      st => 'LS', # Sotho => Lesotho
      su => 'IN', # Sundanese => Indonesia
      sv => 'SE', # Swedish => Sweden
      sw => 'TZ', # Suaheli => Tanzania, United Republic of
      ta => 'LK', # Tamil => Sri Lanka
      te => 'IN', # Telugu => India
      tg => 'TJ', # Tajik => Tajikistan
      th => 'TH', # Thai => Thailand
      ti => 'ER', # Tigrinya => Eritrea
      tk => 'TM', # Turkmen => Turkmenistan
      tl => 'PH', # Tagalog => Philippines
      tn => 'BW', # Tswana => Botswana
      to => 'TO', # Tonga => Tonga
      tr => 'TR', # Turkish => Turkish
      tt => 'RU', # Tatar => Russia
      tw => 'GH', # Twi => Ghana
      ug => 'CN', # Uighur => China
      uk => 'UA', # Ukrainian => Ukraine
      ur => 'PK', # Urdu => Pakistan
      uz => 'UZ', # Uzbek => Uzbekistan
      vi => 'VN', # Vietnamese => Vietnam
      # vo => '??', # Volapuk => Nowhere
      wo => 'SN', # Wolof => Senegal
      xh => 'ZA', # Xhosa => South Africa
      yi => 'IL', # Yiddish => Israel (FIXME: Rather United States?)
      yo => 'NG', # Yoruba => Nigeria
      za => 'CN', # Zhuang => China
      zh => 'CN', # Chinese => China
      zu => 'ZA', # Zulu => South Africa
  };
  
  use constant WIN32LANGUAGE => {
      aa => "Afar",
      ab => "Abkhazian",
      ae => "Avestan",
      af => "Afrikaans",
      am => "Amharic",
      ar => "Arabic",
      as => "Assamese",
      ay => "Aymara",
      az => "Azerbaijani",
      ba => "Bashkir",
      be => "Belarusian",
      bg => "Bulgarian",
      bh => "Bihari",
      bi => "Bislama",
      bn => "Bengali",
      bo => "Tibetan",
      br => "Breton",
      bs => "Bosnian",
      ca => "Catalan",
      ce => "Chechen",
      ch => "Chamorro",
      co => "Corsican",
      cs => "Czech",
      cu => "Church Slavic",
      cv => "Chuvash",
      cy => "Welsh",
      da => "Danish",
      de => "German",
      dz => "Dzongkha",
      el => "Greek",
      en => "English",
      eo => "Esperanto",
      es => "Spanish",
      et => "Estonian",
      eu => "Basque",
      fa => "Persian",
      fi => "Finnish",
      fj => "Fijian",
      fo => "Faeroese",
      fr => "French",
      fy => "Frisian",
      ga => "Irish",
      gd => "Gaelic (Scots)",
      gl => "Gallegan",
      gn => "Guarani",
      gu => "Gujarati",
      gv => "Manx",
      ha => "Hausa",
      he => "Hebrew",
      hi => "Hindi",
      ho => "Hiri Motu",
      hr => "Croatian",
      hu => "Hungarian",
      hy => "Armenian",
      hz => "Herero",
      ia => "Interlingua",
      id => "Indonesian",
      ie => "Interlingue",
      ik => "Inupiaq",
      is => "Icelandic",
      it => "Italian",
      iu => "Inuktitut",
      ja => "Japanese",
      jw => "Javanese",
      ka => "Georgian",
      ki => "Kikuyu",
      kj => "Kuanyama",
      kk => "Kazakh",
      kl => "Kalaallisut",
      km => "Khmer",
      kn => "Kannada",
      ko => "Korean",
      ks => "Kashmiri",
      ku => "Kurdish",
      kv => "Komi",
      kw => "Cornish",
      ky => "Kirghiz",
      la => "Latin",
      lb => "Letzeburgesch",
      ln => "Lingala",
      lo => "Lao",
      lt => "Lithuanian",
      lv => "Latvian",
      mg => "Malagasy",
      mh => "Marshall",
      mi => "Maori",
      # Sorry, lads, but that is what M$ calls your language ...
      mk => "FYRO Macedonian",
      ml => "Malayalam",
      mn => "Mongolian",
      mo => "Moldavian",
      mr => "Marathi",
      ms => "Malay",
      mt => "Maltese",
      my => "Burmese",
      na => "Nauru",
      nb => "Norwegian (Bokmål)",
      nd => "Ndebele, North",
      ne => "Nepali",
      ng => "Ndonga",
      nl => "Dutch",
      nn => "Norwegian-Nynorsk",
      no => "Norwegian-Nynorsk",
      nr => "Ndebele, South",
      nv => "Navajo",
      ny => "Chichewa",
      oc => "Occitan (post 1500)",
      om => "Oromo",
      or => "Oriya",
      os => "Ossetian",
      pa => "Panjabi",
      pi => "Pali",
      pl => "Polish",
      ps => "Pushto",
      pt => "Portuguese",
      qu => "Quechua",
      rm => "Rhaeto-Romance",
      rn => "Rundi",
      ro => "Romanian",
      ru => "Russian",
      rw => "Kinyarwanda",
      sa => "Sanskrit",
      sc => "Sardinian",
      sd => "Sindhi",
      se => "Sami",
      sg => "Sango",
      si => "Sinhalese",
      sk => "Slovak",
      sl => "Slovenian",
      sm => "Samoan",
      sn => "Shona",
      so => "Somali",
      sq => "Albanian",
      sr => "Serbian",
      ss => "Swati",
      st => "Sotho",
      su => "Sundanese",
      sv => "Swedish",
      sw => "Swahili",
      ta => "Tamil",
      te => "Telugu",
      tg => "Tajik",
      th => "Thai",
      ti => "Tigrinya",
      tk => "Turkmen",
      tl => "Tagalog",
      tn => "Tswana",
      to => "Tonga",
      tr => "Turkish",
      ts => "Tsonga",
      tt => "Tatar",
      tw => "Twi",
      ug => "Uighur",
      uk => "Ukrainian",
      ur => "Urdu",
      uz => "Uzbek",
      vi => "Vietnamese",
      vo => "Volapuk",
      wo => "Wolof",
      xh => "Xhosa",
      yi => "Yiddish",
      yo => "Yoruba",
      za => "Zhuang",
      zh => "Chinese",
      zu => "Zulu",
  };
  
  use constant WIN32COUNTRY => {
      ad => "Andorra",
      ae => "United Arab Emirates",
      af => "Afghanistan",
      ag => "Antigua and Barbuda",
      ai => "Anguilla",
      al => "Albania",
      am => "Armenia",
      an => "Netherlands Antilles",
      ao => "Angola",
      aq => "Antarctica",
      ar => "Argentina",
      as => "American Samoa",
      at => "Austria",
      au => "Australia",
      aw => "Aruba",
      ax => "Aland Islands",
      az => "Azerbaijan",
      ba => "Bosnia and Herzegovina",
      bb => "Barbados",
      bd => "Bangladesh",
      be => "Belgium",
      bf => "Burkina Faso",
      bg => "Bulgaria",
      bh => "Bahrain",
      bi => "Burundi",
      bj => "Benin",
      bm => "Bermuda",
      bn => "Brunei Darussalam",
      bo => "Bolivia",
      br => "Brazil",
      bs => "Bahamas",
      bt => "Bhutan",
      bv => "Bouvet Island",
      bw => "Botswana",
      by => "Belarus",
      bz => "Belize",
      ca => "Canada",
      cc => "Cocos (Keeling) Islands",
      cd => "Congo, The Democratic Republic of the",
      cf => "Central African Republic",
      cg => "Congo",
      ch => "Switzerland",
      ci => "Cote D'Ivoire",
      ck => "Cook Islands",
      cl => "Chile",
      cm => "Cameroon",
      cn => "China",
      co => "Colombia",
      cr => "Costa Rica",
      cs => "Serbia and Montenegro",
      cu => "Cuba",
      cv => "Cape Verde",
      cx => "Christmas Island",
      cy => "Cyprus",
      cz => "Czech Republic",
      de => "Germany",
      dj => "Djibouti",
      dk => "Denmark",
      dm => "Dominica",
      do => "Dominican Republic",
      dz => "Algeria",
      ec => "Ecuador",
      ee => "Estonia",
      eg => "Egypt",
      eh => "Western Sahara",
      er => "Eritrea",
      es => "Spain",
      et => "Ethiopia",
      fi => "Finland",
      fj => "Fiji",
      fk => "Falkland Islands (Malvinas)",
      fm => "Micronesia, Federated States of",
      fo => "Faroe Islands",
      fr => "France",
      fx => "France, Metropolitan",
      ga => "Gabon",
      gb => "United Kingdom",
      gd => "Grenada",
      ge => "Georgia",
      gf => "French Guiana",
      gh => "Ghana",
      gi => "Gibraltar",
      gl => "Greenland",
      gm => "Gambia",
      gn => "Guinea",
      gp => "Guadeloupe",
      gq => "Equatorial Guinea",
      gr => "Greece",
      gs => "South Georgia and the South Sandwich Islands",
      gt => "Guatemala",
      gu => "Guam",
      gw => "Guinea-Bissau",
      gy => "Guyana",
      hk => "Hong Kong",
      hm => "Heard Island and McDonald Islands",
      hn => "Honduras",
      hr => "Croatia",
      ht => "Haiti",
      hu => "Hungary",
      id => "Indonesia",
      ie => "Ireland",
      il => "Israel",
      in => "India",
      io => "British Indian Ocean Territory",
      iq => "Iraq",
      ir => "Iran",
      is => "Iceland",
      it => "Italy",
      jm => "Jamaica",
      jo => "Jordan",
      jp => "Japan",
      ke => "Kenya",
      kg => "Kyrgyzstan",
      kh => "Cambodia",
      ki => "Kiribati",
      km => "Comoros",
      kn => "Saint Kitts and Nevis",
      kp => "North-Korea",
      kr => "Korea",
      kw => "Kuwait",
      ky => "Cayman Islands",
      kz => "Kazakhstan",
      la => "Laos",
      lb => "Lebanon",
      lc => "Saint Lucia",
      li => "Liechtenstein",
      lk => "Sri Lanka",
      lr => "Liberia",
      ls => "Lesotho",
      lt => "Lithuania",
      lu => "Luxembourg",
      lv => "Latvia",
      ly => "Libyan",
      ma => "Morocco",
      mc => "Monaco",
      md => "Moldova",
      mg => "Madagascar",
      mh => "Marshall Islands",
      mk => "Former Yugoslav Republic of Macedonia",
      ml => "Mali",
      mm => "Myanmar",
      mn => "Mongolia",
      mo => "Macao",
      mp => "Northern Mariana Islands",
      mq => "Martinique",
      mr => "Mauritania",
      ms => "Montserrat",
      mt => "Malta",
      mu => "Mauritius",
      mv => "Maldives",
      mw => "Malawi",
      mx => "Mexico",
      my => "Malaysia",
      mz => "Mozambique",
      na => "Namibia",
      nc => "New Caledonia",
      ne => "Niger",
      nf => "Norfolk Island",
      ng => "Nigeria",
      ni => "Nicaragua",
      nl => "Netherlands",
      no => "Norway",
      np => "Nepal",
      nr => "Nauru",
      nu => "Niue",
      nz => "New Zealand",
      om => "Oman",
      pa => "Panama",
      pe => "Peru",
      pf => "French Polynesia",
      pg => "Papua New Guinea",
      ph => "Philippines",
      pk => "Pakistan",
      pl => "Poland",
      pm => "Saint Pierre and Miquelon",
      pn => "Pitcairn",
      pr => "Puerto Rico",
      ps => "Palestinian Territory, Occupied",
      pt => "Portugal",
      pw => "Palau",
      py => "Paraguay",
      qa => "Qatar",
      re => "Reunion",
      ro => "Romania",
      ru => "Russian Federation",
      rw => "Rwanda",
      sa => "Saudi Arabia",
      sb => "Solomon Islands",
      sc => "Seychelles",
      sd => "Sudan",
      se => "Sweden",
      sg => "Singapore",
      sh => "Saint Helena",
      si => "Slovenia",
      sj => "Svalbard and Jan Mayen",
      sk => "Slovakia",
      sl => "Sierra Leone",
      sm => "San Marino",
      sn => "Senegal",
      so => "Somalia",
      sr => "Suriname",
      st => "Sao Tome and Principe",
      sv => "El Salvador",
      sy => "Syrian Arab Republic",
      sz => "Swaziland",
      tc => "Turks and Caicos Islands",
      td => "Chad",
      tf => "French Southern Territories",
      tg => "Togo",
      th => "Thailand",
      tj => "Tajikistan",
      tk => "Tokelau",
      tl => "Timor-Leste",
      tm => "Turkmenistan",
      tn => "Tunisia",
      to => "Tonga",
      tr => "Turkey",
      tt => "Trinidad and Tobago",
      tv => "Tuvalu",
      tw => "Taiwan, Province of China",
      tz => "Tanzania, United Republic of",
      ua => "Ukraine",
      ug => "Uganda",
      um => "United States Minor Outlying Islands",
      us => "United States",
      uy => "Uruguay",
      uz => "Uzbekistan",
      va => "Holy See (Vatican City State)",
      vc => "Saint Vincent and the Grenadines",
      ve => "Venezuela",
      vg => "Virgin Islands, British",
      vi => "Virgin Islands, U.S.",
      vn => "Vietnam",
      vu => "Vanuatu",
      wf => "Wallis and Futuna",
      ws => "Samoa",
      ye => "Yemen",
      yt => "Mayotte",
      za => "South Africa",
      zm => "Zambia",
      zw => "Zimbabwe",
  };
  
  my $locale_cache;
  
  sub parse_http_accept_language {
  	my ($string) = @_;
  
  	my @tokens = split / *, */, $string;
  	
  	my %retval;
  	foreach my $token (@tokens) {
  		my $quality = 1;
  		# This RE is more forgiving than the standard.  It accepts
  		# values greater than 1.0 and with more fractional digits
  		# than 3.
  		if ($token =~ s/ *; *q *= *([0-9]+(?:\.([0-9]+))?)$//) {
  			$quality = $1;
  		}
  		$retval{$token} = $quality;
  	}
  
  	# RFC 2616 only allows 1-8 characters for language and country
  	# but we are more forgiving.
  	return grep { 
  		/^[A-Za-z]+(?:-[A-Za-z]+)?$/
  		} map {
  			$_ = 'C' if $_ eq '*'; $_
  		}	sort { 
  			$retval{$b} <=> $retval{$a} 
  		} keys %retval;
  }
  
  sub parse_http_accept_charset {
  	my ($string) = @_;
  
  	my @tokens = split / *, */, $string;
  	
  	my %retval;
  	foreach my $token (@tokens) {
  		my $quality = 1;
  		# This RE is more forgiving than the standard.  It accepts
  		# values greater than 1.0 and with more fractional digits
  		# than 3.
  		if ($token =~ s/ *; *q *= *([0-9]+(?:\.([0-9]+))?)$//) {
  			$quality = $1;
  		}
  		$retval{$token} = $quality;
  	}
  
  	return grep { 
  		# This is really allowed in character set names ...
  		/^[-!\#\$\%\&\'\+\.0-9A-Z_\`a-z\|\~]+$/
  		} map {
  			$_ = undef if $_ eq '*'; $_
  		}	sort { 
  			$retval{$b} <=> $retval{$a} 
  		} keys %retval;
  }
  
  sub set_locale {
  	my ($category, $language, $country, $charset) = @_;
  	
  	require POSIX;
  
      $country = '' unless defined $country;
      $charset = '' unless defined $charset;
      
  	my $set_locale;
  	# Look up the cache first.
      if (my $retval = $locale_cache->{$language}->{$country}->{$charset}) {
      	my ($locale, $country) = @$retval;
  	POSIX::setlocale ($category, $locale);
          return @$retval;
      }
  
  	# Initialize the cache with the undefined value so that we can do
  	# error returns without setting it.
  	$locale_cache->{$language}->{$country}->{$charset} = undef;
  
  	my $windows = ($^O !~ /darwin/i && $^O =~ /win/i) ? 1 : 0;
  	if ($windows) {
  		return &__set_locale_windows;
  	}
  	
  	my $set_language;
  	my $set_country;
  
  	# First we try to only use the language.
  	my @languages = ($language);
  	my @lc_languages = map { lc $_ } @languages;
  	my @uc_languages = map { uc $_ } @languages;
  	my %seen = ();
  
  	foreach my $language (@languages, @lc_languages, @uc_languages) {
  		next if $seen{$language}++;
  		warn "Trying lingua only setlocale '$language'.\n" if DEBUG;
  		my $result = POSIX::setlocale ($category, $language);
  		if ($result) {
  			$set_locale = $set_language = $result if $result;
  			last;
  		}
  	}
  
  	# Now try it with the country appended.
  	my @countries = length $country ? ($country) : ();
  	my @uc_countries = map { uc $_ } @countries;
  	my @lc_countries = map { uc $_ } @countries;
  	push @countries, @uc_countries, @lc_countries;
   
   LINGUA: foreach my $language (@languages, @lc_languages, @uc_languages) {
  		my $count = 0;
  		my @guessed_countries = (LANG2COUNTRY->{lc $language},
  								 lc LANG2COUNTRY->{lc $language},
  								 uc LANG2COUNTRY->{lc $language});
  		foreach my $c (@countries, @guessed_countries) {
  			++$count;
  			next unless defined $c && length $c;
  			my $try = $language . '_' . $c;
  			next if $seen{$try}++;
  			warn "Trying setlocale '$try'.\n" if DEBUG;
  			my $result = POSIX::setlocale ($category, $try);
  			if ($result) {
  				$set_locale = $result;
  				if ($count >= @countries) {
  					$set_country = $c; 
  				} else {
  					$set_country = $country;
  				}
  
  				last LINGUA;
  			}
  		}
  	}
  	
  	unless (length $charset) {
  		return unless defined $set_locale && length $set_locale;
  		
  		$locale_cache->{$language}->{$country}->{$charset} = 
  			[$set_locale, $set_country];
  		return wantarray ? ($set_locale, $set_country) : $set_locale;
  	}
  	
  	my @charsets = ($charset);
  	my $cleaned = $charset;
  	push @charsets, $cleaned if $cleaned =~ s/-//g;
  	my @lc_charsets = map { lc $charset } @charsets;
  	my @uc_charsets = map { uc $charset } @charsets;
  	push @charsets, @lc_charsets, @uc_charsets;
  	
  	%seen = ();
   LINGUA2: foreach my $language (@languages, 
  								@lc_languages, @uc_languages) {
  	     my @guessed_countries = (LANG2COUNTRY->{lc $language},
  								 lc LANG2COUNTRY->{lc $language},
  								 uc LANG2COUNTRY->{lc $language});
  	     my $count = 0;
  		 foreach my $c (@countries, @guessed_countries) {
  			 ++$count;
  			 $c = '' unless defined $c && length $c;
  			 my $country_try = $language;
  			 $country_try .= (length $c) ? "_$c" : '';
  			 
  			 foreach my $ch (@charsets, @lc_charsets, @uc_charsets) {
  				 my $try = $country_try . '.' . $ch;
  				 next if $seen{$try}++;
  				 warn "Trying setlocale '$try'.\n" if DEBUG;
  				 
  				 my $result = POSIX::setlocale ($category, $try);
  				 if ($result) {
  					 $set_locale = $result;
  					 if ($count >= @countries) {
  						 $set_country = $c; 
  					 } else {
  						 $set_country = $country;
  					 }
  					 
  					 last LINGUA2;
  				 }
  			 }
  		 } 
  	 }
  
  	return unless defined $set_locale && length $set_locale;
  
  	$locale_cache->{$language}->{$country}->{$charset} = 
  		[$set_locale, $set_country];
  
  	return wantarray ? ($set_locale, $set_country) : $set_locale;
  }
  
  sub __set_locale_windows {
  	my ($category, $language, $country, $charset) = @_;
  
      my $set_locale;
  
      $country = '' unless defined $country;
      $charset = '' unless defined $charset;
      	
  	# First we try to only use the language.
  	my $long_language = WIN32LANGUAGE->{lc $language};
  	my @languages = ($long_language, $language);
  	my %seen = ();
  	foreach my $language (@languages) {
  		next if $seen{$language}++;
  		warn "Trying lingua only setlocale '$language'.\n" if DEBUG;
  		my $result = POSIX::setlocale ($category, $language);
  		if ($result) {
  			$set_locale = $result if $result;
  			last;
  		}
  	}
  	
  	# Now try it with the country appended.
  	my $set_country;
  	if (length $country) {
          COMBI: foreach my $language (@languages) {
              # We do not need a fallback country here, because the "system" already
              # provides the information.
  	        my @short_countries = ($country);
  		    my @countries = map { 
  			    WIN32COUNTRY->{lc $_} 
  			    } grep { length $_ } @short_countries;
  		    foreach my $c (@countries) {
  			    next unless defined $c && length $c;
  			    my $try = $language . '_' . $c;
  			    next if $seen{$try}++;
  			    warn "Trying setlocale '$try'.\n" if DEBUG;
  			    my $result = POSIX::setlocale ($category, $try);
  			    if ($result) {
  				    $set_locale = $result;
  					$set_country = $c;
  				    last COMBI;
  			    }
  		    }
  	    }
  	}
  
  	return unless defined $set_locale && length $set_locale;
  
      # Apparently, there is no point in setting a charset.  Even the new
      # MS-DOS versions like 2000 or XP still have the concept of more or
      # less fixed codepages.  Switching to UTF-8 does not work.
  	$locale_cache->{$language}->{$country}->{$charset} = 
  		[$set_locale, $set_country];
  	return wantarray ? ($set_locale, $set_country) : $set_locale;
  }
  
  sub get_locale_cache {
  	$locale_cache;
  }
  
  sub set_locale_cache {
  	if (ref $_[0] && 'HASH' eq ref $_[0]) {
  		$locale_cache = $_[0];
      } else {
  		my %locale_cache = @_;
  		$locale_cache = \%locale_cache;
  	}
  }
  
  sub web_set_locale {
  	my ($accept_language, $accept_charset, $category, $available) = @_;
  
  	my %available;
  	if ($available) {
  		foreach (@$available) {
  			my $locale = $_;
  			$locale =~ s/[_\@\.].*//;
  			$available{lc $locale} = 1;
  		}
  	}
  
  	my @languages;
  	if (ref $accept_language && 'ARRAY' eq ref $accept_language) {
  		@languages = @$accept_language;
  	} else {
  		@languages = parse_http_accept_language $accept_language;
  	}
  
  	if ($available) {
  		my @all = @languages;
  		@languages = ();
  		foreach my $locale (@all) {
  			my $language = lc $locale;
  			$language =~ s/[_\@\.].*//;
  			push @languages, $locale if $available{$language};
  		}
  	}
  
  	my @charsets;
  	if (defined $accept_charset) {
  		if (ref $accept_charset && 'ARRAY' eq ref $accept_charset) {
  			@charsets = @$accept_charset;
  		} else {
  			@charsets = parse_http_accept_charset $accept_charset;
  		}
  	}
  
  	unless (defined $category) {
  		require POSIX;
  		$category = POSIX::LC_ALL();
  	}
  
  	my ($set_locale, $set_language, $set_country, $set_charset);
  	foreach my $lang (@languages) {
  		my ($language, $country) = split /-/, $lang, 2;
  
  		my ($locale, $country_used) = 
  			set_locale ($category, $language, $country, $charsets[0]);
  		
  		if (defined $locale) {
  			# If a country was specified, we have to check whether it
  			# was actually selected.
  			if (defined $country) {
  				if (!defined $country
  					|| ($country ne $country_used)) {
  					$set_language = $language;
  					$set_locale = $locale;
  					$set_country = $country_used;
  					$set_charset = $charsets[0];
  				}
  			}
  
  			if (wantarray) {
  				return $locale, $lang, $country_used, $charsets[0];
  			} else {
  				return $locale;
  			}
  		}
  	}
  	
  	if (defined $set_locale) {
  		if (wantarray) {
  			return $set_locale, $set_language, $set_country, $set_charset;
  		} else {
  			return $set_locale;
  		}
  	}
  
  	return;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::Util - Portable l10n and i10n functions
  
  =head1 SYNOPSIS
  
    use Locale::Util;
  
    my @linguas = parse_http_accept_language $ENV{HTTP_ACCEPT_LANGUAGE};
  
    my @charsets = parse_http_accept_charset $ENV{HTTP_ACCEPT_CHARSET};
  
    # Trie to set the locale to Brasilian Portuguese in UTF-8.
    my $set_locale = set_locale LC_ALL, 'pt', 'BR', 'utf-8';
  
    set_locale_cache $last_cache;
    
    my $cache = get_locale_cache;
  
    web_set_locale ($ENV{HTTP_ACCEPT_LANGUAGE}, $ENV_ACCEPT_CHARSET);
  
    web_set_locale (['fr-BE', 'fr', 'it'], ['cp1252', 'utf-8']);
  
  =head1 DESCRIPTION
  
  This module provides portable functions dealing with localization
  (l10n) and internationalization(i10n).  It doesn't export anything
  by default, you have to specify each function you need in the import
  list, or use the fully qualified name.
  
  The functions here have a focus on web development, although they 
  are general enough to have them in the Locale:: namespace.
  
  This module is considered alpha code.  The interface is not stable.
  Please contact the author if you want to use it in production code.
  
  This module was introduced in libintl-perl 1.17.
  
  =head1 FUNCTIONS
  
  =over 4
  
  =item B<parse_http_accept_language STRING>
  
  Parses a string as passed in the HTTP header "Accept-Language".
  It returns a list of tokens sorted by the quality value, see RFC 2616 
  for details.
  
  Example:
  
    parse_http_accept ("fr-fr, fr; q=0.7, de; q=0.3");
  
  This means: Give me French for France with a quality value of 1.0
  (the maximum).  Otherwise I will take any other French version 
  (quality 0.7), German has a quality of 0.3 for me.
  
  The function will return a list of tokens in the order of their quality
  values, in this case "fr-fr", "fr" and "de".
  
  The function is more forgiving than RFC 2616.  It accepts quality
  values greater than 1.0 and with more than 3 decimal places.  It
  also accepts languages and country names with more than 8 characters.
  The language "*" is translated into "C".
  
  =item B<parse_http_accept_charset STRING>
  
  Parses a string as passed in the HTTP header "Accept-Charset".
  It returns a list of tokens sorted by the quality value, see RFC 2616 
  for details.
  
  The special character set "*" (means all character sets) will be
  translated to the undefined value.
  
  =item B<set_locale CATEGORY, LANGUAGE[, COUNTRY, CHARSET]>
  
  Tries to set the user locale by means of POSIX::setlocale().  The latter
  function has the disadvantage, that its second argument (the locale
  description string) is completely non-standard and system-dependent.
  This function tries its best at guessing the system's notion of a locale
  dientifier, with the arguments supplied:
  
  =over 8
  
  =item B<CATEGORY>
  
  An integer argument for a valid locale category.  These are the
  LC_* constants (LC_ALL, LC_CTIME, LC_COLLATE, ...) defined in both
  Locale::Messages(3pm) and POSIX(3pm).
  
  =item B<LANGUAGE>
  
  A 2-letter language identifier as per ISO 639.  Case doesn't matter,
  but an unchanged version (ie. not lower-cased) of the language you
  provided will always be tried to.
  
  =item B<COUNTRY>
  
  A 2-letter language identifier as per ISO 639.  Case doesn't matter,
  but an unchanged version (ie. not lower-cased) of the language you
  provided will always be tried to.
  
  This parameter is optional.  If it is not defined, the function will
  try to guess an appropriate country, otherwise leave it to the 
  operating system.
  
  =item B<CHARSET>
  
  A valid charset name.  Valid means valid!  The charset "utf8" is not
  valid (it is "utf-8").  Charset names that are accepted by the
  guessing algorithms in Encode(3pm) are also not necessarily valid.
  
  If the parameter is undefined, it is ignored.  It is always ignored
  under Windows.
  
  =back
  
  The function tries to approach the desired locale in loops, refining
  it on every success.  It will first try to set the language (for 
  any country), then try to select the correct language, and finally
  try to select the correct charset.
  
  The return value is false in case of failure, or the return value
  of the underlying POSIX::setlocale() call in case of success.
  
  In array context, the function returns the country name 
  that was passed in the successful
  call to POSIX::setlocale().  If this string is equal to the country
  name you passed as an argument, you can be reasonably sure that
  the settings for this country are really used.  If it is not
  equal, the function has taken a guess at the country (it has a list
  of "default" countries for each language).  It seems that under
  Windows, POSIX::setlocale() also succeeds, if you pass a country
  name that is actually not supported.  Therefore, the information
  is not completely reliable.
  
  Please note that this function is intended for server processes 
  (especially web applications) that need to switch in a portable
  way to a certain locale.  It is B<not> the recommended way to set 
  the program locale for a regular application.  In a regular application
  you should do the following:
  
      use POSIX qw (setlocale LC_ALL);
      setlocale LC_ALL, '';
  
  The empty string as the second argument means, that the system
  should switch to the user's default locale.
  
  =item B<get_locale_cache>
  
  The function set_locale() is potentially expansive, especially when
  it fails, because it can try a lot of different combinations, and 
  the system may have to load a lot of locale definitions from its
  internal database.
  
  In order to speed up things, results are internally cached in a 
  hash, keys are the languages, subkeys countries, subsubkeys the
  charsets.  You can get a reference to this hash with get_locale_cache().
  
  The function cannot fail.
  
  =item B<set_locale_cache HASH>
  
  Sets the internal cache.  You can either pass a hash or a hash reference.
  The function will use this as its cache, discarding its old cache.
  This allows you to keep the hash persistent.
  
  The function cannot fail.
  
  =item B<web_set_locale (ACCEPT_LANGUAGE, ACCEPT_CHARSET, CATEGORY,
                          AVAILABLE)>
  
  Try to change the locale to the settings described by ACCEPT_LANGUAGE
  and ACCEPT_CHARSET.  For each argument you can either pass a string
  as in the corresponding http header, or a reference to an array
  of language resp. charset identifiers.
  
  Currently only the first charset passed is used as an argument.
  You are strongly encouraged to pass a hard-coded value here, so
  that you have control about your output.
  
  The argument B<CATEGORY> specifies the category (one of the LC_*
  constants as defined in Locale::Messages(3pm) or in POSIX(3pm)).
  The category defaults to LC_ALL.
  
  You can pass an optional reference to a list of locales in 
  XPG4 format that are available in your application.  This is
  useful if you know which languages are supported by your application.
  In fact, only the language part of the values in the list are
  considered (for example for "en_US", only "en" is used).  The
  country or other parts are ignored.
  
  The function returns the return value of the underlying set_locale()
  call, or false on failure.
  
  The function returns false on failure.  On success it returns the 
  return value of the underlying set_locale() call.  This value can
  be used directly in subsequent calls to POSIX::setlocale().  In 
  array context, it additionally returns the identifiers for the language, 
  the country, and the charset actually used.
  
  =back
  
  =head1 BUGS
  
  The function set_locale() probably fails to guess the correct locale
  identifier on a lot of systems.  If you have found such a case,
  please submit it as a bug report.
  
  The bug tracking system for this packags is at
  http://rt.cpan.org/NoAuth/Bugs.html?libintl-perl
  
  Please note that this module is considered alpha code, and the interface
  is not stable.  Please contact the author, if you want to use it in
  production code.
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  POSIX(3pm), perl(1)
  
  =cut
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  cperl-indent-level: 4
  cperl-continued-statement-offset: 2
  tab-width: 4
  End:
  =cut
LOCALE_UTIL

    $main::fatpacked{"Locale/gettext_dumb.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_GETTEXT_DUMB';
  #! /bin/false
  
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Pure Perl implementation of Uniforum message translation.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::gettext_dumb;
  
  use Locale::gettext_pp;
  
  use vars qw (%EXPORT_TAGS @EXPORT_OK @ISA $VERSION);
  
  %EXPORT_TAGS = (locale_h => [ qw (gettext
                                    dgettext
                                    dcgettext
                                    ngettext
                                    dngettext
                                    dcngettext
                                    pgettext
                                    dpgettext
                                    dcpgettext
                                    npgettext
                                    dnpgettext
                                    dcnpgettext
                                    textdomain
                                    bindtextdomain
                                    bind_textdomain_codeset
                                    )],
                  libintl_h => [ qw (LC_CTYPE
                                     LC_NUMERIC
                                     LC_TIME
                                     LC_COLLATE
                                     LC_MONETARY
                                     LC_MESSAGES
                                     LC_ALL)],
                  );
  
  @EXPORT_OK = qw (gettext
                   dgettext
                   dcgettext
                   ngettext
                   dngettext
                   dcngettext
                   pgettext
                   dpgettext
                   dcpgettext
                   npgettext
                   dnpgettext
                   dcnpgettext
                   textdomain
                   bindtextdomain
                   bind_textdomain_codeset
                   nl_putenv
                   setlocale
                   LC_CTYPE
                   LC_NUMERIC
                   LC_TIME
                   LC_COLLATE
                   LC_MONETARY
                   LC_MESSAGES
                   LC_ALL);
                   
  @ISA = qw (Exporter);
  
  *Locale::gettext_dumb::textdomain = \&Locale::gettext_pp::textdomain;
  *Locale::gettext_dumb::bindtextdomain = \&Locale::gettext_pp::bindtextdomain;
  *Locale::gettext_dumb::bind_textdomain_codeset = 
      \&Locale::gettext_pp::bind_textdomain_codeset;
  
  *Locale::gettext_dumb::nl_putenv = \&Locale::gettext_pp::nl_putenv;
  
  *Locale::gettext_dumb::LC_CTYPE = \&Locale::gettext_pp::LC_CTYPE;
  *Locale::gettext_dumb::LC_NUMERIC = \&Locale::gettext_pp::LC_NUMERIC;
  *Locale::gettext_dumb::LC_TIME= \&Locale::gettext_pp::LC_TIME;
  *Locale::gettext_dumb::LC_COLLATE = \&Locale::gettext_pp::LC_COLLATE;
  *Locale::gettext_dumb::LC_MONETARY = \&Locale::gettext_pp::LC_MONETARY;
  *Locale::gettext_dumb::LC_MESSAGES = \&Locale::gettext_pp::LC_MESSAGES;
  *Locale::gettext_dumb::LC_ALL = \&Locale::gettext_pp::LC_ALL;
  
  
  sub gettext ($) {
      my ($msgid) = @_;
  
      return dcnpgettext ('', undef, $msgid, undef, undef, undef);
  }
  
  sub dgettext ($$) {
      my ($domainname, $msgid) = @_;
  
      return dcnpgettext ($domainname, undef, $msgid, undef, undef, undef);
  }
  
  sub dcgettext ($$$) {
      my ($domainname, $msgid, $category) = @_;
  
      return dcnpgettext ($domainname, undef, $msgid, undef, undef, undef);
  }
  
  sub ngettext ($$$) {
      my ($msgid, $msgid_plural, $n) = @_;
  
      return dcnpgettext ('', undef, $msgid, $msgid_plural, $n, undef);
  }
  
  sub dngettext ($$$$) {
      my ($domainname, $msgid, $msgid_plural, $n) = @_;
  
      return dcnpgettext ($domainname, undef, $msgid, $msgid_plural, $n, undef);
  }
  
  sub dcngettext ($$$$$) {
      my ($domainname, $msgid, $msgid_plural, $n, $category) = @_;
  
      return dcnpgettext ($domainname, undef, $msgid, $msgid_plural, $n, , 
                          $category);
  }
  
  sub pgettext ($$) {
      my ($msgctxt, $msgid) = @_;
  
      return dcnpgettext ('', $msgctxt, $msgid, undef, undef, undef);
  }
  
  sub dpgettext ($$$) {
      my ($domainname, $msgctxt, $msgid) = @_;
  
      return dcnpgettext ($domainname, $msgctxt, $msgid, undef, undef, undef);
  }
  
  sub dcpgettext($$$$) {
      my ($domainname, $msgctxt, $msgid, $category) = @_;
  
      return dcnpgettext ($domainname, $msgctxt, $msgid, undef, undef, undef);
  }
  
  sub npgettext ($$$$) {
      my ($msgctxt, $msgid, $msgid_plural, $n) = @_;
  
      return dcnpgettext ('', $msgctxt, $msgid, $msgid_plural, $n, undef);
  }
  
  sub dnpgettext ($$$$$) {
      my ($domainname, $msgctxt, $msgid, $msgid_plural, $n) = @_;
  
      return dcnpgettext ($domainname, $msgctxt, $msgid, $msgid_plural, $n, undef);
  }
  
  sub dcnpgettext ($$$$$$) {
      my ($domainname, $msgctxt, $msgid, $msgid_plural, $n, $category) = @_;
  
      my $locale;
  
      if (exists $ENV{LANGUAGE} && length $ENV{LANGUAGE}) {
          $locale = $ENV{LANGUAGE};
          $locale =~ s/:.*//s;
      } elsif (exists $ENV{LC_ALL} && length $ENV{LC_ALL}) {
          $locale = $ENV{LC_ALL};
      } elsif (exists $ENV{LANG} && length $ENV{LANG}) {
          $locale = $ENV{LANG};
      } elsif (exists $ENV{LC_MESSAGES} && length $ENV{LC_MESSAGES}) {
          $locale = $ENV{LC_MESSAGES};
      } else {
          $locale = 'C';
      }
      
      return Locale::gettext_pp::_dcnpgettext_impl ($domainname, $msgctxt,
                                                    $msgid, $msgid_plural, $n,
                                                    $category, $locale);
  }
  
  sub setlocale($;$) {
  	&POSIX::setlocale;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::gettext_dumb - Locale unaware Implementation of Uniforum Message Translation
  
  =head1 SYNOPSIS
  
   use Locale::gettext_dumb (:locale_h :libintl_h);
  
   # Normally, you will not want to include this module directly but this way:
   use Locale::Messages;
   
   my $selected = Locale::Messages->select_package ('gettext_dumb');
  
   gettext $msgid;
   dgettext $domainname, $msgid;
   dcgettext $domainname, $msgid, LC_MESSAGES;
   ngettext $msgid, $msgid_plural, $count;
   dngettext $domainname, $msgid, $msgid_plural, $count;
   dcngettext $domainname, $msgid, $msgid_plural, $count, LC_MESSAGES;
   pgettext $msgctxt, $msgid;
   dpgettext $domainname, $msgctxt, $msgid;
   dcpgettext $domainname, $msgctxt, $msgid, LC_MESSAGES;
   npgettext $msgctxt, $msgid, $msgid_plural, $count;
   dnpgettext $domainname, $msgctxt, $msgid, $msgid_plural, $count;
   dcnpgettext $domainname, $msgctxt, $msgid, $msgid_plural, $count, LC_MESSAGES;
   textdomain $domainname;
   bindtextdomain $domainname, $directory;
   bind_textdomain_codeset $domainname, $encoding;
   my $category = LC_CTYPE;
   my $category = LC_NUMERIC;
   my $category = LC_TIME;
   my $category = LC_COLLATE;
   my $category = LC_MONETARY;
   my $category = LC_MESSAGES;
   my $category = LC_ALL;
  
  =head1 DESCRIPTION
  
  B<IMPORTANT!> This module is experimental.  It may not work as described!
  
  The module B<Locale::gettext_dumb> does exactly the same as 
  Locale::gettext_xs(3pm) or Locale::gettext_pp(3pm).
  
  While both other modules use POSIX::setlocale() to determine the currently
  selected locale, this backend only checks the environment variables
  LANGUAGE, LANG, LC_ALL, LC_MESSAGES (in that order), when it tries to locate
  a message catalog (a .mo file).
  
  This class was introduced in libintl-perl 1.22.
  
  =head1 USAGE
  
  This module should not be used for desktop software or scripts run locally.
  Why? If you use a message catalog for example in Danish in UTF-8 (da_DA.UTF8)
  but the  system locale is set to Russian with KOI8-R (ru_RU.KOI8-R) you
  may produce invalid output, either invalid multi-byte sequences or invalid
  text, depending on how you look at it.
  
  That will happen, when you mix output from B<Locale::gettext_pp> with
  locale-dependent output from the operating system like the contents of
  the variable "$!", date and time formatting functions (localtime(),
  gmtime(), POSIX::strftime() etc.), number formatting with printf() and
  friends, and so on.
  
  A typical usage scenario looks like this:
  
  You have a server application (for example a web application) that is supposed
  to display a fixed set of messages in many languages.  If you want to do this
  with Locale::gettext_xs(3pm) or Locale::gettext_pp(3pm), you have to install
  the locale data for all of those languages.  Otherwise, translating the
  messages will not work.
  
  With Locale::gettext_dumb(3pm) you can relax these requirements, and display
  messages for all languages that you have mo files for.
  
  On the other hand, you will soon reach limits with this approach.  Almost
  any application requires more than bare translation of messages for
  localisation.  You want to formatted dates and times, you want to display
  numbers in the correct formatting for the selected languages, and you may
  want to display system error messages ("$!").
  
  In practice, Locale::gettext_dumb(3pm) is still useful in these scenarios.
  Your users will have to live with the fact that the presented output is
  in different languages resp. for different locales, when "their" locale
  is not installed on your system.
  
  More dangerous is mixing output in different character sets but that can
  be easily avoided.  Simply make sure that B<Locale::gettext_dump> uses 
  UTF-8 (for example by setting the environment variable OUTPUT_CHARSET or
  by calling bind_textdomain_codeset()) and make sure that the system locale
  also uses UTF-8, for example "en_US.UTF8".  If that fails, switch to a
  locale that uses a subset of UTF-8.  In practice that will be US-ASCII, the
  character set used by the default locale "C" resp. "POSIX".
  
  Your application will then to a certain extent mix output for different
  localisations resp. languages.  But this is completely under your control.
  
  =head1 EXAMPLE
  
  See above! Normally you should not use this module! However, let us assume
  you have read the warnings.  In a web application you would do something
  like this:
  
      use Locale::TextDomain qw (com.example.yourapp);
      use Locale::Messages qw (nl_putenv LC_ALL bindtextdomain
                               bind_textdomain_codeset);
      use Locale::Util qw (web_set_locale);
      use POSIX qw (setlocale);
      
      # First try to switch to the locale requested by the user.  If you
      # know it you can try to pass it to setlocale like this:
      #
      #   my $hardcoded_locale = 'fr_FR.UTF-8';
      #   my $success = POSIX::setlocale (LC_ALL, $hardcoded_locale);
      #
      # However, we try to let libintl-perl do a better job for us:
      my $success = web_set_locale $ENV{HTTP_ACCEPT_LANGUAGE},
                                   $ENV{HTTP_ACCEPT_CHARSET};
      # Note: If your application forces the use of UTF-8 for its output
      # you should pass 'UTF-8' as the second argument to web_set_locale
      # instead of $ENV{HTTP_ACCEPT_CHARSET}.
      
      if (!$success) {
          # Did not work.  Switch to the dumb interface of
          # Locale::Messages.
          Locale::Messages->select_package ('gettext_dumb');
          
          # And try to switch to a default locale:
          if (!setlocale (LC_ALL, 'en_US.UTF-8')) {
              # Still no luck.  Enforce at least US-ASCII:
              setlocale (LC_ALL, 'C');
          }
          bind_textdomain_codeset 'com.example.yourapp', 'utf-8';
      }
      
  If your application forces the usage of UTF-8 you should ignore the environment
  variable 
      
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::TextDomain(3pm), Locale::Messages(3pm), Encode(3pm),
  perllocale(3pm), POSIX(3pm), perl(1), gettext(1), gettext(3)
  
  =cut
  
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  tab-width: 4
  End:
LOCALE_GETTEXT_DUMB

    $main::fatpacked{"Locale/gettext_pp.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_GETTEXT_PP';
  #! /bin/false
  
  # vim: set autoindent shiftwidth=4 tabstop=4:
  
  # Pure Perl implementation of Uniforum message translation.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::gettext_pp;
  
  use strict;
  
  require 5.004;
  
  use vars qw ($__gettext_pp_default_dir 
      		 $__gettext_pp_textdomain
      		 $__gettext_pp_domain_bindings
      		 $__gettext_pp_domain_codeset_bindings
      		 $__gettext_pp_domains
      		 $__gettext_pp_recoders
      		 $__gettext_pp_unavailable_dirs
      		 $__gettext_pp_domain_cache
      		 $__gettext_pp_alias_cache
      		 $__gettext_pp_context_glue);
  
  use locale;
  use File::Spec;
  
  BEGIN {
      $__gettext_pp_textdomain = 'messages';
      $__gettext_pp_domain_bindings = {};
      $__gettext_pp_domain_codeset_bindings = {};
      $__gettext_pp_domains = {};
      $__gettext_pp_recoders = {};
      $__gettext_pp_unavailable_dirs = {};
      $__gettext_pp_domain_cache = {};
      $__gettext_pp_alias_cache = {};
      # The separator between msgctxt and msgid in a .mo file.  */
      $__gettext_pp_context_glue = "\004";
      
      $__gettext_pp_default_dir = '';
      
      for my $dir (qw (/usr/share/locale /usr/local/share/locale)) {
      	if (-d $dir) {
      		$__gettext_pp_default_dir = $dir;
      		last;
      	}
      }
  }
  
  BEGIN {
      	require POSIX;
      	require Exporter;
      	use IO::Handle;
      	require Locale::Recode;
  
      	local $@;
      	my ($has_messages, $five_ok);
      	
      	$has_messages = eval '&POSIX::LC_MESSAGES';
  
      	unless (defined $has_messages && length $has_messages) {
      			$five_ok = ! grep {my $x = eval "&POSIX::$_" || 0; $x eq '5';}
      							qw (LC_CTYPE
      							   LC_NUMERIC
      							   LC_TIME
      							   LC_COLLATE
      							   LC_MONETARY
      							   LC_ALL);
      		if ($five_ok) {
      			$five_ok = POSIX::setlocale (5, '');
      		}
      	}
      	
      	if (defined $has_messages && length $has_messages) {
  eval <<'EOF';
  sub LC_MESSAGES()
  {
      local $!; # Do not clobber errno!
      
      return &POSIX::LC_MESSAGES;
  }
  EOF
      	} elsif ($five_ok) {
  eval <<'EOF';
  sub LC_MESSAGES()
  {
      local $!; # Do not clobber errno!
  
      # Hack: POSIX.pm deems LC_MESSAGES an invalid macro until
      # Perl 5.8.0.  However, on LC_MESSAGES should be 5 ...
      return 5;
  }
  EOF
      	} else {
  eval <<'EOF';
  sub LC_MESSAGES()
  {
      local $!; # Do not clobber errno!
  
      # This fallback value is widely used,
      # when LC_MESSAGES is not available.
      return 1729;
  }
  EOF
      	}
  }
  
  use vars qw (%EXPORT_TAGS @EXPORT_OK @ISA $VERSION);
  
  %EXPORT_TAGS = (locale_h => [ qw (
      							  gettext
      							  dgettext
      							  dcgettext
      							  ngettext
      							  dngettext
      							  dcngettext
      							  pgettext
      							  dpgettext
      							  dcpgettext
      							  npgettext
      							  dnpgettext
      							  dcnpgettext
      							  textdomain
      							  bindtextdomain
      							  bind_textdomain_codeset
      							  )
      						  ],
      			libintl_h => [ qw (LC_CTYPE
      							   LC_NUMERIC
      							   LC_TIME
      							   LC_COLLATE
      							   LC_MONETARY
      							   LC_MESSAGES
      							   LC_ALL)
      						   ],
      			);
  
  @EXPORT_OK = qw (gettext
      			 dgettext
      			 dcgettext
      			 ngettext
      			 dngettext
      			 dcngettext
      			 pgettext
      			 dpgettext
      			 dcpgettext
      			 npgettext
      			 dnpgettext
      			 dcnpgettext
      			 textdomain
      			 bindtextdomain
      			 bind_textdomain_codeset
                   nl_putenv
                   setlocale
      			 LC_CTYPE
      			 LC_NUMERIC
      			 LC_TIME
      			 LC_COLLATE
      			 LC_MONETARY
      			 LC_MESSAGES
      			 LC_ALL);
  @ISA = qw (Exporter);
  
  my $has_nl_langinfo;
  
  sub __load_catalog;
  sub __load_domain;
  sub __locale_category;
  sub __untaint_plural_header;
  sub __compile_plural_function;
  
  sub LC_NUMERIC()
  {
      &POSIX::LC_NUMERIC;
  }
  
  sub LC_CTYPE()
  {
      &POSIX::LC_CTYPE;
  }
  
  sub LC_TIME()
  {
      &POSIX::LC_TIME;
  }
  
  sub LC_COLLATE()
  {
      &POSIX::LC_COLLATE;
  }
  
  sub LC_MONETARY()
  {
      &POSIX::LC_MONETARY;
  }
  
  sub LC_ALL()
  {
      &POSIX::LC_ALL;
  }
  
  sub textdomain(;$)
  {
      my $new_domain = shift;
      
      $__gettext_pp_textdomain = $new_domain if defined $new_domain && 
      	length $new_domain;
      
      return $__gettext_pp_textdomain;
  }
  
  sub bindtextdomain($;$)
  {
      my ($domain, $directory) = @_;
  
      my $retval;	
      if (defined $domain && length $domain) {
      	if (defined $directory && length $directory) {
      		$retval = $__gettext_pp_domain_bindings->{$domain} 
      			= $directory;
      	} elsif (exists $__gettext_pp_domain_bindings->{$domain}) {
      		$retval = $__gettext_pp_domain_bindings->{$domain};
      	} else {
      		$retval = $__gettext_pp_default_dir;
      	}
      	$retval = '/usr/share/locale' unless defined $retval && 
      		length $retval;
      	return $retval;
      } else {
      	return;
      }
  }
  
  sub bind_textdomain_codeset($;$)
  {
      my ($domain, $codeset) = @_;
      
      if (defined $domain && length $domain) {
      	if (defined $codeset && length $codeset) {
      		return $__gettext_pp_domain_codeset_bindings->{$domain} = $codeset;
      	} elsif (exists $__gettext_pp_domain_codeset_bindings->{$domain}) {
      		return $__gettext_pp_domain_codeset_bindings->{$domain};
      	}
      }
      
      return;
  }
  
  sub gettext($)
  {
      my ($msgid) = @_;
  
      return dcnpgettext ('', undef, $msgid, undef, undef, undef);
  }
  
  sub dgettext($$)
  {
      my ($domainname, $msgid) = @_;
  
      return dcnpgettext ($domainname, undef, $msgid, undef, undef, undef);
  }
  
  sub dcgettext($$$)
  {
      my ($domainname, $msgid, $category) = @_;
  
      return dcnpgettext ($domainname, undef, $msgid, undef, undef, undef);
  }
  
  sub ngettext($$$)
  {
      my ($msgid, $msgid_plural, $n) = @_;
  
      return dcnpgettext ('', undef, $msgid, $msgid_plural, $n, undef);
  }
  
  sub dngettext($$$$)
  {
      my ($domainname, $msgid, $msgid_plural, $n) = @_;
  
      return dcnpgettext ($domainname, undef, $msgid, $msgid_plural, $n, undef);
  }
  
  sub dcngettext($$$$$)
  {
      my ($domainname, $msgid, $msgid_plural, $n, $category) = @_;
  
      return dcnpgettext ($domainname, undef, $msgid, $msgid_plural, $n, , $category);
  }
  
  
  sub pgettext($$)
  {
      my ($msgctxt, $msgid) = @_;
  
      return dcnpgettext ('', $msgctxt, $msgid, undef, undef, undef);
  }
  
  sub dpgettext($$$)
  {
      my ($domainname, $msgctxt, $msgid) = @_;
  
      return dcnpgettext ($domainname, $msgctxt, $msgid, undef, undef, undef);
  }
  
  sub dcpgettext($$$$)
  {
      my ($domainname, $msgctxt, $msgid, $category) = @_;
  
      return dcnpgettext ($domainname, $msgctxt, $msgid, undef, undef, undef);
  }
  
  sub npgettext($$$$)
  {
      my ($msgctxt, $msgid, $msgid_plural, $n) = @_;
  
      return dcnpgettext ('', $msgctxt, $msgid, $msgid_plural, $n, undef);
  }
  
  sub dnpgettext($$$$$)
  {
      my ($domainname, $msgctxt, $msgid, $msgid_plural, $n) = @_;
  
      return dcnpgettext ($domainname, $msgctxt, $msgid, $msgid_plural, $n, undef);
  }
  
  # This is the actual implementation of dncpgettext.  It is also used by the
  # corresponding function in Locale::gettext_dumb.
  sub _dcnpgettext_impl {
      my ($domainname, $msgctxt, $msgid, $msgid_plural, $n, $category,
          $locale) = @_;
  
      return unless defined $msgid;
  
      my $plural = defined $msgid_plural;
      my $msg_ctxt_id = defined $msgctxt ? join($__gettext_pp_context_glue, ($msgctxt, $msgid)) : $msgid;
      
      local $!; # Do not clobber errno!
      
      # This is also done in __load_domain but we need a proper value.
      $domainname = $__gettext_pp_textdomain
      	unless defined $domainname && length $domainname;
      
      # Category is always LC_MESSAGES (other categories are ignored).
      my $category_name = 'LC_MESSAGES';
      $category = LC_MESSAGES;
  
      my $domains = __load_domain ($domainname, $category, $category_name,
                                   $locale);
      
      my @trans = ();
      my $domain;
      my $found;
      foreach my $this_domain (@$domains) {
      	if ($this_domain && defined $this_domain->{messages}->{$msg_ctxt_id}) {
      		@trans = @{$this_domain->{messages}->{$msg_ctxt_id}};
      		shift @trans;
      		$domain = $this_domain;
      		$found = 1;
      		last;
      	}
      }
      @trans = ($msgid, $msgid_plural) unless @trans;
      
      my $trans = $trans[0];
      if ($plural) {
      	if ($domain) {
      		my $nplurals = 0;
      		($nplurals, $plural) = &{$domain->{plural_func}} ($n);
      		$plural = 0 unless defined $plural;
      		$nplurals = 0 unless defined $nplurals;
      		$plural = 0 if $nplurals <= $plural;
      	} else {
      		$plural = $n != 1 || 0;
      	}
      	
      	$trans = $trans[$plural] if defined $trans[$plural];
      }
      
      if ($found && defined $domain->{po_header}->{charset}) {
      	my $input_codeset = $domain->{po_header}->{charset};
      	# Convert into output charset.
      	my $output_codeset = $__gettext_pp_domain_codeset_bindings->{$domainname};
  
      	$output_codeset = $ENV{OUTPUT_CHARSET} unless defined $output_codeset;
      	$output_codeset = __get_codeset ($category, $category_name,
      									 $domain->{locale_id})
      		unless defined $output_codeset;
      	
      	unless (defined $output_codeset) {
      		# Still no point.
      		my $lc_ctype = __locale_category (POSIX::LC_CTYPE(), 
      									   'LC_CTYPE');
      		$output_codeset = $1
      			if $lc_ctype =~ /^[a-z]{2}(?:_[A-Z]{2})?\.([^@]+)/;
      	}
  
      	# No point. :-(
      	$output_codeset = $domain->{po_header}->{charset}
      		unless defined $output_codeset;
      
      	if (exists $__gettext_pp_domain_cache->{$output_codeset}) {
      		$output_codeset = $__gettext_pp_domain_cache->{$output_codeset};
      	} else {
      		$output_codeset = 'utf-8' if lc $output_codeset eq 'utf8';
      		$output_codeset = 
      			$__gettext_pp_domain_cache->{$output_codeset} =
      			Locale::Recode->resolveAlias ($output_codeset);
      	}
      	
      	if (defined $output_codeset &&
      		$output_codeset ne $domain->{po_header}->{charset}) {
      		# We have to convert.
      		my $recoder;
      		
      		if (exists 
      			$__gettext_pp_recoders->{$input_codeset}->{$output_codeset}) {
      			$recoder = $__gettext_pp_recoders->{$input_codeset}->{$output_codeset};
      		} else {
      			$recoder = 
      				$__gettext_pp_recoders->{$input_codeset}->{$output_codeset} =
      				Locale::Recode->new (from => $input_codeset,
      									 to => $output_codeset,
      									 );
      		}
      		
      		$recoder->recode ($trans);
      	}
      }
      
      return $trans;
  }
  
  sub dcnpgettext ($$$$$$) {
      return &_dcnpgettext_impl;
  }
  
  sub nl_putenv ($)
  {
      my ($envspec) = @_;
      return unless defined $envspec;
      return unless length $envspec;
      return if substr ($envspec, 0, 1) eq '=';
      
      my ($var, $value) = split /=/, $envspec, 2;
  
      # In Perl we *could* set empty environment variables even under
      # MS-DOS, but for compatibility reasons, we implement the
      # brain-damaged behavior of the Microsoft putenv().
      if ($^O eq 'MSWin32') {
          $value = '' unless defined $value;
          if (length $value) {
              $ENV{$var} = $value;
          } else {
              delete $ENV{$var};
          }
      } else {
          if (defined $value) {
              $ENV{$var} = $value;
          } else {
              delete $ENV{$var};
          }
      }
  
      return 1;
  }
  
  sub setlocale($;$) {
  	require POSIX;
  	&POSIX::setlocale;
  }
  
  sub __load_domain
  {
      my ($domainname, $category, $category_name, $locale) = @_;
  
          # If no locale was selected for the requested locale category,
          # l10n is disabled completely.  This matches the behavior of GNU
          # gettext.
          if ($category != LC_MESSAGES) {
              # Not supported.
              return [];
          }
          
          if (!defined $locale && $category != 1729) {
                  $locale = POSIX::setlocale ($category);
                  if (!defined $locale || 'C' eq $locale || 'POSIX' eq $locale) {
                          return [];
                  }
          }
      
      $domainname = $__gettext_pp_textdomain
      	unless defined $domainname && length $domainname;
  
      my $dir = bindtextdomain ($domainname, '');
      $dir = $__gettext_pp_default_dir unless defined $dir && length $dir;
      return [] unless defined $dir && length $dir;
  
      my @locales;
      my $cache_key;
  
      if (defined $ENV{LANGUAGE} && length $ENV{LANGUAGE}) {
      	@locales = split /:/, $ENV{LANGUAGE};
      	$cache_key = $ENV{LANGUAGE};
      } elsif (!defined $locale) {
              # The system does not have LC_MESSAGES.  Guess the value.
      	@locales = $cache_key = __locale_category ($category, 
      	                                           $category_name);
      } else {
              @locales = $cache_key = $locale;
      }
  
      # Have we looked that one up already?
      my $domains = $__gettext_pp_domain_cache->{$dir}->{$cache_key}->{$category_name}->{$domainname};
      return $domains if defined $domains;
      return [] unless @locales;
      
      my @dirs = ($dir);
      my @tries = (@locales);
      my %locale_lookup = map { $_ => $_ } @tries;
  
      foreach my $locale (@locales) {
      	if ($locale =~ /^([a-z][a-z])
      		(?:(_[A-Z][A-Z])?
      		 (\.[-_A-Za-z0-9]+)?
      		 )?
      		(\@[-_A-Za-z0-9]+)?$/x) {
      		
      		if (defined $3) {
      			defined $2 ?
      				push @tries, $1 . $2 . $3 : push @tries, $1 . $3;
      		}
      		if (defined $2) {
      			push @tries, $1 . $2;
      			$locale_lookup{$1 . $2} = $locale;
      		}
      		if (defined $1) {
      			push @tries, $1 if defined $1;
      			$locale_lookup{$1} = $locale;
      		}
      	}
      }
      	push @dirs, $__gettext_pp_default_dir
      	if $__gettext_pp_default_dir && $dir ne $__gettext_pp_default_dir;
      
      my %seen = ();
      foreach my $basedir (@dirs) {
      	foreach my $try (@tries) {
      		my $fulldir = "$basedir/$try/$category_name";
      		
      		next if $seen{$fulldir}++;
  
      		# If the cache for unavailable directories is removed,
      		# the three lines below should be replaced by:
      		# 'next unless -d $fulldir;'
      		next if $__gettext_pp_unavailable_dirs->{$fulldir};
      		++$__gettext_pp_unavailable_dirs->{$fulldir} and next
      				unless -d $fulldir;
                          my $filename = File::Spec->catfile ($fulldir, 
                                                              "$domainname.mo");
      		my $domain = __load_catalog ($filename, $try);
      		next unless $domain;
      			
      		$domain->{locale_id} = $locale_lookup{$try};
      		push @$domains, $domain;
      	}
      }
      $__gettext_pp_domain_cache->{$dir}
                                ->{$cache_key}
                                ->{$category_name}
                                ->{$domainname} = $domains;
  
      $domains = [] unless defined $domains;
      
      return $domains;
  }
  
  sub __load_catalog
  {
      my ($filename, $locale) = @_;
      
      # Alternatively we could check the filename for evil characters ...
      # (Important for CGIs).
      return unless -f $filename && -r $filename;
      
      local $/;
      local *HANDLE;
      
      open HANDLE, "<$filename"
      	or return;
      binmode HANDLE;
      my $raw = <HANDLE>;
      close HANDLE;
      
      # Corrupted?
      return if ! defined $raw || length $raw < 28;
      
      my $filesize = length $raw;
      
      # Read the magic number in order to determine the byte order.
      my $domain = {};
      my $unpack = 'N';
      $domain->{potter} = unpack $unpack, substr $raw, 0, 4;
      
      if ($domain->{potter} == 0xde120495) {
      	$unpack = 'V';
      } elsif ($domain->{potter} != 0x950412de) {
      	return;
      }
      my $domain_unpack = $unpack x 6;
      
      my ($revision, $num_strings, $msgids_off, $msgstrs_off,
      	$hash_size, $hash_off) = 
      		unpack (($unpack x 6), substr $raw, 4, 24);
      
      return unless $revision == 0; # Invalid revision number.
      
      $domain->{revision} = $revision;
      $domain->{num_strings} = $num_strings;
      $domain->{msgids_off} = $msgids_off;
      $domain->{msgstrs_off} = $msgstrs_off;
      $domain->{hash_size} = $hash_size;
      $domain->{hash_off} = $hash_off;
      
      return if $msgids_off + 4 * $num_strings > $filesize;
      return if $msgstrs_off + 4 * $num_strings > $filesize;
      
      my @orig_tab = unpack (($unpack x (2 * $num_strings)), 
      					   substr $raw, $msgids_off, 8 * $num_strings);
      my @trans_tab = unpack (($unpack x (2 * $num_strings)), 
      						substr $raw, $msgstrs_off, 8 * $num_strings);
      
      my $messages = {};
      
      for (my $count = 0; $count < 2 * $num_strings; $count += 2) {
      	my $orig_length = $orig_tab[$count];
      	my $orig_offset = $orig_tab[$count + 1];
      	my $trans_length = $trans_tab[$count];
      	my $trans_offset = $trans_tab[$count + 1];
      	
      	return if $orig_offset + $orig_length > $filesize;
      	return if $trans_offset + $trans_length > $filesize;
      	
      	my @origs = split /\000/, substr $raw, $orig_offset, $orig_length;
      	my @trans = split /\000/, substr $raw, $trans_offset, $trans_length;
      	
      	# The singular is the key, the plural plus all translations is the
      	# value.
      	my $msgid = $origs[0];
      	$msgid = '' unless defined $msgid && length $msgid;
      	my $msgstr = [ $origs[1], @trans ];
      	$messages->{$msgid} = $msgstr;
      }
      
      $domain->{messages} = $messages;
      
      # Try to find po header information.
      my $po_header = {};
      my $null_entry = $messages->{''}->[1];
      if ($null_entry) {
      	my @lines = split /\n/, $null_entry;
      	foreach my $line (@lines) {
      		my ($key, $value) = split /:/, $line, 2;
      		$key =~ s/-/_/g;
      		$po_header->{lc $key} = $value;
      	}
      }
      $domain->{po_header} = $po_header;
      
      if (exists $domain->{po_header}->{content_type}) {
      	my $content_type = $domain->{po_header}->{content_type};
      	if ($content_type =~ s/.*=//) {
      		$domain->{po_header}->{charset} = $content_type;
      	}
      }
      
      my $code = $domain->{po_header}->{plural_forms} || '';
      
      # Whitespace, locale-independent.
      my $s = '[ \t\r\n\013\014]';
  
      # Untaint the plural header.
      # Keep line breaks as is (Perl 5_005 compatibility).
      $code = $domain->{po_header}->{plural_forms} 
          = __untaint_plural_header $code;
  
      $domain->{plural_func} = __compile_plural_function $code;
  
      unless (defined $domain->{po_header}->{charset} 
              && length $domain->{po_header}->{charset} 
              && $locale =~ /^(?:[a-z][a-z])
                              (?:(?:_[A-Z][A-Z])?
                               (\.[-_A-Za-z0-9]+)?
                              )?
                              (?:\@[-_A-Za-z0-9]+)?$/x) {
          $domain->{po_header}->{charset} = $1;
      }
                                  
      if (defined $domain->{po_header}->{charset}) {
          $domain->{po_header}->{charset} = 
              Locale::Recode->resolveAlias ($domain->{po_header}->{charset});
      }
      
      return $domain;
  }
  
  sub __locale_category
  {
      my ($category, $category_name) = @_;
      
      local $@;
      my $value = eval {POSIX::setlocale ($category)};
      
      # We support only XPG syntax, i. e.
      # language[_territory[.codeset]][@modifier].
      undef $value unless (defined $value && 
      					 length $value &&
      					 $value =~ /^[a-z][a-z]
      					 (?:_[A-Z][A-Z]
      					  (?:\.[-_A-Za-z0-9]+)?
      					  )?
      					 (?:\@[-_A-Za-z0-9]+)?$/x);
  
      unless ($value) {
      	$value = $ENV{LC_ALL};
      	$value = $ENV{$category_name} unless defined $value && length $value;
      	$value = $ENV{LANG} unless defined $value && length $value;
      	return 'C' unless defined $value && length $value;
      }
      
      return $value if $value ne 'C' && $value ne 'POSIX';
  }
  
  sub __get_codeset
  {
      my ($category, $category_name, $locale_id) = @_;
  
      local $@;
      unless (defined $has_nl_langinfo) {
      	eval {
      		require I18N::Langinfo;
      	};
      	$has_nl_langinfo = !$@;
      }
  
      if ($has_nl_langinfo) {
      	# Try to set the locale via the specified id.
      	my $saved_locale = eval { POSIX::setlocale (LC_ALL) };
      	my $had_lc_all = exists $ENV{LC_ALL};
      	my $saved_lc_all = $ENV{LC_ALL} if $had_lc_all;
  
      	# Now try to set the locale via the environment.  There is no
      	# point in calling the langinfo routines if this fails.
      	$ENV{LC_ALL} = $locale_id;
      	my $codeset;
      	my $lc_all = eval { POSIX::setlocale (LC_ALL, $locale_id); };
      	$codeset = I18N::Langinfo::langinfo (I18N::Langinfo::CODESET())
      		if defined $lc_all;
  
          # Restore environment.
      	if ($saved_locale) {
      		eval { POSIX::setlocale (LC_ALL, $saved_locale); }
      	}
      	if ($had_lc_all) {
              $ENV{LC_ALL} = $saved_lc_all if $had_lc_all;
      	} else {
      	    delete $ENV{LC_ALL};
      	}
      	return $codeset;
      }
  
      return;
  }
      
  sub __untaint_plural_header {
      my ($code) = @_;
  
      # Whitespace, locale-independent.
      my $s = '[ \t\r\n\013\014]';
  
      if ($code =~ m{^($s*
      				 nplurals$s*=$s*[0-9]+
      				 $s*;$s*
      				 plural$s*=$s*(?:$s|[-\?\|\&=!<>+*/\%:;a-zA-Z0-9_\(\)])+
      				 )}xms) {
      	return $1;
      }
  
      return '';    
  }
  
  sub __compile_plural_function {
      my ($code) = @_;
  
      # The leading and trailing space is necessary to be able to match
      # against word boundaries.
      my $plural_func;
      
      if (length $code) {
      	my $code = ' ' . $code . ' ';
      	$code =~ 
      		s/(?<=[^_a-zA-Z0-9])[_a-z][_A-Za-z0-9]*(?=[^_a-zA-Z0-9])/\$$&/gs;
      	
      	$code = "sub { my \$n = shift || 0; 
      			   my (\$plural, \$nplurals); 
      			   $code; 
      			   return (\$nplurals, \$plural ? \$plural : 0); }";
      	
      	# Now try to evaluate the code.	 There is no need to run the code in
      	# a Safe compartment.  The above substitutions should have destroyed
      	# all evil code.  Corrections are welcome!
          #warn $code;
      	$plural_func = eval $code;
          #warn $@ if $@;
      	undef $plural_func if $@;
      }
          
      # Default is Germanic plural (which is incorrect for French).
      $plural_func = eval "sub { (2, 1 != shift || 0) }" unless $plural_func;
  
      return $plural_func;    
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Locale::gettext_pp - Pure Perl Implementation of Uniforum Message Translation
  
  =head1 SYNOPSIS
  
   use Locale::gettext_pp (:locale_h :libintl_h);
  
   gettext $msgid;
   dgettext $domainname, $msgid;
   dcgettext $domainname, $msgid, LC_MESSAGES;
   ngettext $msgid, $msgid_plural, $count;
   dngettext $domainname, $msgid, $msgid_plural, $count;
   dcngettext $domainname, $msgid, $msgid_plural, $count, LC_MESSAGES;
   pgettext $msgctxt, $msgid;
   dpgettext $domainname, $msgctxt, $msgid;
   dcpgettext $domainname, $msgctxt, $msgid, LC_MESSAGES;
   npgettext $msgctxt, $msgid, $msgid_plural, $count;
   dnpgettext $domainname, $msgctxt, $msgid, $msgid_plural, $count;
   dcnpgettext $domainname, $msgctxt, $msgid, $msgid_plural, $count, LC_MESSAGES;
   textdomain $domainname;
   bindtextdomain $domainname, $directory;
   bind_textdomain_codeset $domainname, $encoding;
   my $category = LC_CTYPE;
   my $category = LC_NUMERIC;
   my $category = LC_TIME;
   my $category = LC_COLLATE;
   my $category = LC_MONETARY;
   my $category = LC_MESSAGES;
   my $category = LC_ALL;
  
  =head1 DESCRIPTION
  
  The module B<Locale::gettext_pp> is the low-level interface to 
  message translation according to the Uniforum approach that is
  for example used in GNU gettext and Sun's Solaris.
  
  Normally you should not use this module directly, but the high
  level interface Locale::TextDomain(3) that provides a much simpler
  interface.    This description is therefore deliberately kept
  brief.    Please refer to the GNU gettext documentation available at
  L<http://www.gnu.org/manual/gettext/> for in-depth and background 
  information on the topic.
  
  =head1 FUNCTIONS
  
  The module exports by default nothing.    Every function has to be
  imported explicitely or via an export tag (L<"EXPORT TAGS">).
  
  =over 4
  
  =item B<gettext MSGID>
  
  See L<Locale::Messages/FUNCTIONS>.
  
  =item B<dgettext TEXTDOMAIN, MSGID>
  
  See L<Locale::Messages/FUNCTIONS>.
  
  =item B<dcgettext TEXTDOMAIN, MSGID, CATEGORY>
  
  See L<Locale::Messages/FUNCTIONS>.
  
  =item B<ngettext MSGID, MSGID_PLURAL, COUNT>
  
  See L<Locale::Messages/FUNCTIONS>.
  
  =item B<dngettext TEXTDOMAIN, MSGID, MSGID_PLURAL, COUNT>
  
  See L<Locale::Messages/FUNCTIONS>.
  
  =item B<dcngettext TEXTDOMAIN, MSGID, MSGID_PLURAL, COUNT, CATEGORY>
  
  See L<Locale::Messages/FUNCTIONS>.
  
  =item B<pgettext MSGCTXT, MSGID>
  
  See L<Locale::Messages/FUNCTIONS>.
  
  =item B<dpgettext TEXTDOMAIN, MSGCTXT, MSGID>
  
  See L<Locale::Messages/FUNCTIONS>.
  
  =item B<dcpgettext TEXTDOMAIN, MSGCTXT, MSGID, CATEGORY>
  
  See L<Locale::Messages/FUNCTIONS>.
  
  =item B<npgettext MSGCTXT, MSGID, MSGID_PLURAL, COUNT>
  
  See L<Locale::Messages/FUNCTIONS>.
  
  =item B<dnpgettext TEXTDOMAIN, MSGCTXT, MSGID, MSGID_PLURAL, COUNT>
  
  See L<Locale::Messages/FUNCTIONS>.
  
  =item B<dcnpgettext TEXTDOMAIN, MSGCTXT, MSGID, MSGID_PLURAL, COUNT, CATEGORY>
  
  See L<Locale::Messages/FUNCTIONS>.
  
  =item B<textdomain TEXTDOMAIN>
  
  See L<Locale::Messages/FUNCTIONS>.
  
  =item B<bindtextdomain TEXTDOMAIN, DIRECTORY>
  
  See L<Locale::Messages/FUNCTIONS>.
  
  =item B<bind_textdomain_codeset TEXTDOMAIN, ENCODING>
  
  =item B<nl_putenv ENVSPEC>
  
  See L<Locale::Messages/FUNCTIONS>.
  
  =item B<setlocale>
  
  See L<Locale::Messages/FUNCTIONS>.
  
  =back
  
  =head1 CONSTANTS
  
  You can (maybe) get the same constants from POSIX(3); see there for
  a detailed description
  
  =over 4
  
  =item B<LC_CTYPE>
  
  =item B<LC_NUMERIC>
  
  =item B<LC_TIME>
  
  =item B<LC_COLLATE>
  
  =item B<LC_MONETARY>
  
  =item B<LC_MESSAGES>
  
  =item B<LC_ALL>
  
  See L<Locale::Messages/CONSTANTS> for more information.
  
  =back
  
  =head1 EXPORT TAGS
  
  This module does not export anything unless explicitely requested.
  You can import groups of functions via two tags:
  
  =over 4
  
  =item B<use Locale::gettext_pp (':locale_h')>
  
  Imports the functions that are normally defined in the C include
  file F<locale.h>:
  
  =over 8
  
  =item B<gettext()>
  
  =item B<dgettext()>
  
  =item B<dcgettext()>
  
  =item B<ngettext()>
  
  =item B<dngettext()>
  
  =item B<dcngettext()>
  
  =item B<pgettext()>
  
  Introduced with libintl-perl 1.17.
  
  =item B<dpgettext()>
  
  Introduced with libintl-perl 1.17.
  
  =item B<dcpgettext()>
  
  Introduced with libintl-perl 1.17.
  
  =item B<npgettext()>
  
  Introduced with libintl-perl 1.17.
  
  =item B<dnpgettext()>
  
  Introduced with libintl-perl 1.17.
  
  =item B<dcnpgettext()>
  
  Introduced with libintl-perl 1.17.
  
  =item B<textdomain()>
  
  =item B<bindtextdomain()>
  
  =item B<bind_textdomain_codeset()>
  
  =back
  
  =item B<use Locale::gettext_pp (':libintl_h')>
  
  Imports the locale category constants:
  
  =over 8
  
  =item B<LC_CTYPE>
  
  =item B<LC_NUMERIC>
  
  =item B<LC_TIME>
  
  =item B<LC_COLLATE>
  
  =item B<LC_MONETARY>
  
  =item B<LC_MESSAGES>
  
  =item B<LC_ALL>
  
  =back
  
  =back
  
  =head1 AUTHOR
  
  Copyright (C) 2002-2016 L<Guido Flohr|http://www.guido-flohr.net/>
  (L<mailto:guido.flohr@cantanea.com>), all rights reserved.  See the source
  code for details!code for details!
  
  =head1 SEE ALSO
  
  Locale::TextDomain(3pm), Locale::Messages(3pm), Encode(3pm),
  perllocale(3pm), POSIX(3pm), perl(1), gettext(1), gettext(3)
  
  =cut
  
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  tab-width: 4
  End:
  
  =cut
LOCALE_GETTEXT_PP

    $main::fatpacked{"Locale/gettext_xs.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOCALE_GETTEXT_XS';
  #! /bin/false
  
  # vim: tabstop=4
  
  # Perl XS implementation of Uniforum message translation.
  # Copyright (C) 2002-2016 Guido Flohr <guido.flohr@cantanea.com>,
  # all rights reserved.
  
  # This program is free software: you can redistribute it and/or modify
  # it under the terms of the GNU General Public License as published by
  # the Free Software Foundation; either version 3 of the License, or
  # (at your option) any later version.
  
  # This program is distributed in the hope that it will be useful,
  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  # GNU General Public License for more details.
  
  # You should have received a copy of the GNU General Public License
  # along with this program.  If not, see <http://www.gnu.org/licenses/>.
  
  package Locale::gettext_xs;
  
  require DynaLoader;
  require Exporter;
  
  use vars qw (%EXPORT_TAGS @EXPORT_OK @ISA);
  
  %EXPORT_TAGS = (locale_h => [ qw (
  								  gettext
  								  dgettext
  								  dcgettext
  								  ngettext
  								  dngettext
  								  dcngettext
  								  pgettext
  								  dpgettext
  								  dcpgettext
  								  npgettext
  								  dnpgettext
  								  dcnpgettext
  								  textdomain
  								  bindtextdomain
  								  bind_textdomain_codeset
  								  )
  							  ],
  				libintl_h => [ qw (LC_CTYPE
  								   LC_NUMERIC
  								   LC_TIME
  								   LC_COLLATE
  								   LC_MONETARY
  								   LC_MESSAGES
  								   LC_ALL)
  							   ],
  				);
  
  @EXPORT_OK = qw (gettext
  				 dgettext
  				 dcgettext
  				 ngettext
  				 dngettext
  				 dcngettext
                   pgettext
                   dpgettext
                   dcpgettext
                   npgettext
                   dnpgettext
                   dcnpgettext
  				 textdomain
  				 bindtextdomain
  				 bind_textdomain_codeset
  				 nl_putenv
                   setlocale
  				 LC_CTYPE
  				 LC_NUMERIC
  				 LC_TIME
  				 LC_COLLATE
  				 LC_MONETARY
  				 LC_MESSAGES
  				 LC_ALL);
  @ISA = qw (Exporter DynaLoader);
  
  bootstrap Locale::gettext_xs;
  
  require File::Spec;
  
  # Reimplement pgettext functions
  sub pgettext ($$) {
  	my ($msgctxt, $msgid) = @_;
  
  	my $msg_ctxt_id = join("\004", $msgctxt, $msgid);
  	return Locale::gettext_xs::_pgettext_aux
  		("", $msg_ctxt_id, $msgid, Locale::gettext_xs::LC_MESSAGES());
  }
  sub dpgettext ($$$) {
  	my ($domain, $msgctxt, $msgid) = @_;
  
  	my $msg_ctxt_id = join("\004", $msgctxt, $msgid);
  	return Locale::gettext_xs::_pgettext_aux
  		($domain, $msg_ctxt_id, $msgid, Locale::gettext_xs::LC_MESSAGES());
  }
  sub dcpgettext ($$$$) {
  	my ($domain, $msgctxt, $msgid, $category) = @_;
  
  	my $msg_ctxt_id = join("\004", $msgctxt, $msgid);
  	return Locale::gettext_xs::_pgettext_aux
  		($domain, $msg_ctxt_id, $msgid, $category);
  }
  
  # Reimplement npgettext functions
  sub npgettext ($$$$) {
  	my ($msgctxt, $msgid1, $msgid2, $n) = @_;
  
  	my $msg_ctxt_id = join("\004", $msgctxt, $msgid1);
  	return Locale::gettext_xs::_npgettext_aux
  		("", $msg_ctxt_id, $msgid1, $msgid2, $n, Locale::gettext_xs::LC_MESSAGES());
  }
  sub dnpgettext ($$$$$) {
  	my ($domain, $msgctxt, $msgid1, $msgid2, $n) = @_;
  
  	my $msg_ctxt_id = join("\004", $msgctxt, $msgid1);
  	return Locale::gettext_xs::_npgettext_aux
  		($domain, $msg_ctxt_id, $msgid1, $msgid2, $n, Locale::gettext_xs::LC_MESSAGES());
  }
  sub dcnpgettext ($$$$$$) {
  	my ($domain, $msgctxt, $msgid1, $msgid2, $n, $category) = @_;
  
  	my $msg_ctxt_id = join("\004", $msgctxt, $msgid1);
  	return Locale::gettext_xs::_npgettext_aux
  		($domain, $msg_ctxt_id, $msgid1, $msgid2, $n, $category);
  }
  
  # Wrapper function that converts Perl paths to OS paths.
  sub bindtextdomain ($;$) {
  	my ($domain, $directory) = @_;
  
  	if (defined $domain && length $domain && 
  		defined $directory && length $directory) {
  		return Locale::gettext_xs::_bindtextdomain 
  			($domain, File::Spec->catdir ($directory));
  	} else {
  		return &Locale::gettext_xs::_bindtextdomain;
  	}
  }
  
  # In the XS version, making the prototype optional, does not work.
  sub textdomain (;$) {
  	my $domain = shift;
  
  	if (defined $domain) {
  		return Locale::gettext_xs::_textdomain ($domain);
  	} else {
  		return Locale::gettext_xs::_textdomain ("");
  	}
  }
  
  sub nl_putenv ($) {
      my ($envspec) = @_;
      
      return unless defined $envspec;
      return unless length $envspec;
      return if substr ($envspec, 0, 1) eq '=';
      
      my ($var, $value) = split /=/, $envspec, 2;
      
      if ($^O eq 'MSWin32') {
          $value = '' unless defined $value;
          return unless Locale::gettext_xs::_nl_putenv ("$var=$value") == 0;
          if (length $value) {
              $ENV{$var} = $value;
          } else {
              delete $ENV{$var};
          }
      } else {
          if (defined $value) {
              $ENV{$var} = $value;
          } else {
              delete $ENV{$var};
          }
      }
  
      return 1;
  }
  
  1;
  
  __END__
  
  Local Variables:
  mode: perl
  perl-indent-level: 4
  perl-continued-statement-offset: 4
  perl-continued-brace-offset: 0
  perl-brace-offset: -4
  perl-brace-imaginary-offset: 0
  perl-label-offset: -4
  tab-width: 4
  End:
  
LOCALE_GETTEXT_XS

    $main::fatpacked{"Log/Any.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY';
  use 5.008001;
  use strict;
  use warnings;
  
  package Log::Any;
  
  # ABSTRACT: Bringing loggers and listeners together
  our $VERSION = '1.042';
  
  use Log::Any::Manager;
  use Log::Any::Proxy::Null;
  use Log::Any::Adapter::Util qw(
    require_dynamic
    detection_aliases
    detection_methods
    log_level_aliases
    logging_aliases
    logging_and_detection_methods
    logging_methods
  );
  
  # This is overridden in Log::Any::Test
  our $OverrideDefaultAdapterClass;
  our $OverrideDefaultProxyClass;
  
  # singleton and accessor
  {
      my $manager = Log::Any::Manager->new();
      sub _manager { return $manager }
  }
  
  sub import {
      my $class  = shift;
      my $caller = caller();
  
      my @export_params = ( $caller, @_ );
      $class->_export_to_caller(@export_params);
  }
  
  sub _export_to_caller {
      my $class  = shift;
      my $caller = shift;
  
      # Parse parameters passed to 'use Log::Any'
      my $saw_log_param;
      my @params;
      while ( my $param = shift @_ ) {
          if ( $param eq '$log' ) {
              $saw_log_param = 1;    # defer until later
              next;                  # singular
          }
          else {
              push @params, $param, shift @_;    # pairwise
          }
      }
  
      unless ( @params % 2 == 0 ) {
          require Carp;
          Carp::croak("Argument list not balanced: @params");
      }
  
      # get logger if one was requested
      if ($saw_log_param) {
          no strict 'refs';
          my $proxy = $class->get_logger( category => $caller, @params );
          my $varname = "$caller\::log";
          *$varname = \$proxy;
      }
  }
  
  sub get_logger {
      my ( $class, %params ) = @_;
      no warnings 'once';
  
      my $proxy_class = $class->_get_proxy_class( delete $params{proxy_class} );
      my $category =
        defined $params{category} ? delete $params{'category'} : caller;
  
      if ( my $default = delete $params{'default_adapter'} ) {
          my @default_adapter_params = ();
          if (ref $default eq 'ARRAY') {
              ($default, @default_adapter_params) = @{ $default };
          }
          # Every default adapter is set only for a given logger category.
          # When another adapter is configured (by using
          # Log::Any::Adapter->set) for this category, it takes
          # precedence, but if that adapter is later removed, the default
          # we set here takes over again.
          $class->_manager->set_default(
              $category, $default, @default_adapter_params
          );
      }
  
      my $adapter = $class->_manager->get_adapter( $category );
  
      require_dynamic($proxy_class);
      return $proxy_class->new(
          %params, adapter => $adapter, category => $category,
      );
  }
  
  sub _get_proxy_class {
      my ( $self, $proxy_name ) = @_;
      return $Log::Any::OverrideDefaultProxyClass
        if $Log::Any::OverrideDefaultProxyClass;
      return "Log::Any::Proxy" if !$proxy_name && _manager->has_consumer;
      return "Log::Any::Proxy::Null" if !$proxy_name;
      my $proxy_class = (
            substr( $proxy_name, 0, 1 ) eq '+'
          ? substr( $proxy_name, 1 )
          : "Log::Any::Proxy::$proxy_name"
      );
      return $proxy_class;
  }
  
  # For backward compatibility
  sub set_adapter {
      my $class = shift;
      Log::Any->_manager->set(@_);
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Any - Bringing loggers and listeners together
  
  =head1 VERSION
  
  version 1.042
  
  =head1 SYNOPSIS
  
  In a CPAN or other module:
  
      package Foo;
      use Log::Any qw($log);
  
      # log a string
      $log->error("an error occurred");
  
      # log a string and data using a formatting filter
      $log->debugf("arguments are: %s", \@_);
  
      # log an error and throw an exception
      die $log->fatal("a fatal error occurred");
  
  In a Moo/Moose-based module:
  
      package Foo;
      use Log::Any ();
      use Moo;
  
      has log => (
          is => 'ro',
          default => sub { Log::Any->get_logger },
      );
  
  In your application:
  
      use Foo;
      use Log::Any::Adapter;
  
      # Send all logs to Log::Log4perl
      Log::Any::Adapter->set('Log4perl');
  
      # Send all logs to Log::Dispatch
      my $log = Log::Dispatch->new(outputs => [[ ... ]]);
      Log::Any::Adapter->set( 'Dispatch', dispatcher => $log );
  
      # See Log::Any::Adapter documentation for more options
  
  =head1 DESCRIPTION
  
  C<Log::Any> provides a standard log production API for modules.
  L<Log::Any::Adapter> allows applications to choose the mechanism for log
  consumption, whether screen, file or another logging mechanism like
  L<Log::Dispatch> or L<Log::Log4perl>.
  
  Many modules have something interesting to say. Unfortunately there is no
  standard way for them to say it - some output to STDERR, others to C<warn>,
  others to custom file logs. And there is no standard way to get a module to
  start talking - sometimes you must call a uniquely named method, other times
  set a package variable.
  
  This being Perl, there are many logging mechanisms available on CPAN.  Each has
  their pros and cons. Unfortunately, the existence of so many mechanisms makes
  it difficult for a CPAN author to commit his/her users to one of them. This may
  be why many CPAN modules invent their own logging or choose not to log at all.
  
  To untangle this situation, we must separate the two parts of a logging API.
  The first, I<log production>, includes methods to output logs (like
  C<$log-E<gt>debug>) and methods to inspect whether a log level is activated
  (like C<$log-E<gt>is_debug>). This is generally all that CPAN modules care
  about. The second, I<log consumption>, includes a way to configure where
  logging goes (a file, the screen, etc.) and the code to send it there. This
  choice generally belongs to the application.
  
  A CPAN module uses C<Log::Any> to get a log producer object.  An application,
  in turn, may choose one or more logging mechanisms via L<Log::Any::Adapter>, or
  none at all.
  
  C<Log::Any> has a very tiny footprint and no dependencies beyond Perl 5.8.1,
  which makes it appropriate for even small CPAN modules to use. It defaults to
  'null' logging activity, so a module can safely log without worrying about
  whether the application has chosen (or will ever choose) a logging mechanism.
  
  See L<http://www.openswartz.com/2007/09/06/standard-logging-api/> for the
  original post proposing this module.
  
  =head1 LOG LEVELS
  
  C<Log::Any> supports the following log levels and aliases, which is meant to be
  inclusive of the major logging packages:
  
       trace
       debug
       info (inform)
       notice
       warning (warn)
       error (err)
       critical (crit, fatal)
       alert
       emergency
  
  Levels are translated as appropriate to the underlying logging mechanism. For
  example, log4perl only has six levels, so we translate 'notice' to 'info' and
  the top three levels to 'fatal'.  See the documentation of an adapter class
  for specifics.
  
  =head1 CATEGORIES
  
  Every logger has a category, generally the name of the class that asked for the
  logger. Some logging mechanisms, like log4perl, can direct logs to different
  places depending on category.
  
  =head1 PRODUCING LOGS (FOR MODULES)
  
  =head2 Getting a logger
  
  The most convenient way to get a logger in your module is:
  
      use Log::Any qw($log);
  
  This creates a package variable I<$log> and assigns it to the logger for the
  current package. It is equivalent to
  
      our $log = Log::Any->get_logger;
  
  In general, to get a logger for a specified category:
  
      my $log = Log::Any->get_logger(category => $category)
  
  If no category is specified, the calling package is used.
  
  A logger object is an instance of L<Log::Any::Proxy>, which passes
  on messages to the L<Log::Any::Adapter> handling its category.
  
  If the C<proxy_class> argument is passed, an alternative to
  L<Log::Any::Proxy> (such as a subclass) will be instantiated and returned
  instead.  The argument is automatically prepended with "Log::Any::Proxy::".
  If instead you want to pass the full name of a proxy class, prefix it with
  a "+". E.g.
  
      # Log::Any::Proxy::Foo
      my $log = Log::Any->get_logger(proxy_class => 'Foo');
  
      # MyLog::Proxy
      my $log = Log::Any->get_logger(proxy_class => '+MyLog::Proxy');
  
  =head2 Logging
  
  To log a message, pass a single string to any of the log levels or aliases. e.g.
  
      $log->error("this is an error");
      $log->warn("this is a warning");
      $log->warning("this is also a warning");
  
  The log string will be returned so that it can be used further (e.g. for a C<die> or
  C<warn> call).
  
  You should B<not> include a newline in your message; that is the responsibility
  of the logging mechanism, which may or may not want the newline.
  
  There are also versions of each of these methods with an additional "f" suffix
  (C<infof>, C<errorf>, C<debugf>, etc.) that format a list of arguments.  The
  specific formatting mechanism and meaning of the arguments is controlled by the
  L<Log::Any::Proxy> object.
  
      $log->errorf("an error occurred: %s", $@);
      $log->debugf("called with %d params: %s", $param_count, \@params);
  
  By default it renders like C<sprintf>, with the following additional features:
  
  =over
  
  =item *
  
  Any complex references (like C<\@params> above) are automatically converted to
  single-line strings with C<Data::Dumper>.
  
  =item *
  
  Any undefined values are automatically converted to the string "<undef>".
  
  =back
  
  =head2 Log level detection
  
  To detect whether a log level is on, use "is_" followed by any of the log
  levels or aliases. e.g.
  
      if ($log->is_info()) { ... }
      $log->debug("arguments are: " . Dumper(\@_))
          if $log->is_debug();
  
  This is important for efficiency, as you can avoid the work of putting together
  the logging message (in the above case, stringifying C<@_>) if the log level is
  not active.
  
  The formatting methods (C<infof>, C<errorf>, etc.) check the log level for you.
  
  Some logging mechanisms don't support detection of log levels. In these cases
  the detection methods will always return 1.
  
  In contrast, the default logging mechanism - Null - will return 0 for all
  detection methods.
  
  =head2 Setting an alternate default logger
  
  When no other adapters are configured for your logger, C<Log::Any> uses
  the C<default_adapter>. To choose something other than Null as the
  default, pass it as a parameter when loading C<Log::Any>
  
      use Log::Any '$log', default_adapter => 'Stderr';
  
  The name of the default class follows the same rules as used by L<Log::Any::Adapter>.
  
  To pass arguments to the default adapter's constructor, use an arrayref:
  
      use Log::Any '$log', default_adapter => [ 'File' => '/var/log/mylog.log' ];
  
  When a consumer configures their own adapter, the default adapter will be
  overridden. If they later remove their adapter, the default adapter will be
  used again.
  
  =head2 Configuring the proxy
  
  Any parameter passed on the import line or via the C<get_logger> method
  are passed on the the L<Log::Any::Proxy> constructor.
  
      use Log::Any '$log', filter => \&myfilter;
  
  =head2 Testing
  
  L<Log::Any::Test> provides a mechanism to test code that uses C<Log::Any>.
  
  =head1 CONSUMING LOGS (FOR APPLICATIONS)
  
  Log::Any provides modules with a L<Log::Any::Proxy> object, which is the log
  producer.  To consume its output and direct it where you want (a file, the
  screen, syslog, etc.), you use L<Log::Any::Adapter> along with a
  destination-specific subclass.
  
  For example, to send output to a file via L<Log::Any::Adapter::File>, your
  application could do this:
  
      use Log::Any::Adapter ('File', '/path/to/file.log');
  
  See the L<Log::Any::Adapter> documentation for more details.
  
  =head1 Q & A
  
  =over
  
  =item Isn't Log::Any just yet another logging mechanism?
  
  No. C<Log::Any> does not include code that knows how to log to a particular
  place (file, screen, etc.) It can only forward logging requests to another
  logging mechanism.
  
  =item Why don't you just pick the best logging mechanism, and use and promote it?
  
  Each of the logging mechanisms have their pros and cons, particularly in terms
  of how they are configured. For example, log4perl offers a great deal of power
  and flexibility but uses a global and potentially heavy configuration, whereas
  C<Log::Dispatch> is extremely configuration-light but doesn't handle
  categories. There is also the unnamed future logger that may have advantages
  over either of these two, and all the custom in-house loggers people have
  created and cannot (for whatever reason) stop using.
  
  =item Is it safe for my critical module to depend on Log::Any?
  
  Our intent is to keep C<Log::Any> minimal, and change it only when absolutely
  necessary. Most of the "innovation", if any, is expected to occur in
  C<Log::Any::Adapter>, which your module should not have to depend on (unless it
  wants to direct logs somewhere specific). C<Log::Any> has no non-core dependencies.
  
  =item Why doesn't Log::Any use I<insert modern Perl technique>?
  
  To encourage CPAN module authors to adopt and use C<Log::Any>, we aim to have
  as few dependencies and chances of breakage as possible. Thus, no C<Moose> or
  other niceties.
  
  =back
  
  =for :stopwords cpan testmatrix url annocpan anno bugtracker rt cpants kwalitee diff irc mailto metadata placeholders metacpan
  
  =head1 SUPPORT
  
  =head2 Bugs / Feature Requests
  
  Please report any bugs or feature requests through the issue tracker
  at L<https://github.com/preaction/Log-Any/issues>.
  You will be notified automatically of any progress on your issue.
  
  =head2 Source Code
  
  This is open source software.  The code repository is available for
  public review and contribution under the terms of the license.
  
  L<https://github.com/preaction/Log-Any>
  
    git clone https://github.com/preaction/Log-Any.git
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Jonathan Swartz <swartz@pobox.com>
  
  =item *
  
  David Golden <dagolden@cpan.org>
  
  =item *
  
  Doug Bell <preaction@cpan.org>
  
  =back
  
  =head1 CONTRIBUTORS
  
  =for stopwords bj5004 cm-perl Lucas Kanashiro Maxim Vuets Stephen Thirlwall
  
  =over 4
  
  =item *
  
  bj5004 <bartosz.jakubski@hurra.com>
  
  =item *
  
  cm-perl <cm-perl@users.noreply.github.com>
  
  =item *
  
  Lucas Kanashiro <kanashiro.duarte@gmail.com>
  
  =item *
  
  Maxim Vuets <maxim.vuets@booking.com>
  
  =item *
  
  Stephen Thirlwall <sdt@dr.com>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by Jonathan Swartz, David Golden, and Doug Bell.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_ANY

    $main::fatpacked{"Log/Any/Adapter.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_ADAPTER';
  use 5.008001;
  use strict;
  use warnings;
  
  package Log::Any::Adapter;
  
  # ABSTRACT: Tell Log::Any where to send its logs
  our $VERSION = '1.042';
  
  use Log::Any;
  
  sub import {
      my $pkg = shift;
      Log::Any->_manager->set(@_) if (@_);
  }
  
  sub set {
      my $pkg = shift;
      Log::Any->_manager->set(@_)
  }
  
  sub remove {
      my $pkg = shift;
      Log::Any->_manager->remove(@_)
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Any::Adapter - Tell Log::Any where to send its logs
  
  =head1 VERSION
  
  version 1.042
  
  =head1 SYNOPSIS
  
      # Log to a file, or stdout, or stderr for all categories
      #
      use Log::Any::Adapter ('File', '/path/to/file.log');
      use Log::Any::Adapter ('Stdout');
      use Log::Any::Adapter ('Stderr');
  
      # Use Log::Log4perl for all categories
      #
      Log::Log4perl::init('/etc/log4perl.conf');
      Log::Any::Adapter->set('Log4perl');
  
      # Use Log::Dispatch for Foo::Baz
      #
      use Log::Dispatch;
      my $log = Log::Dispatch->new(outputs => [[ ... ]]);
      Log::Any::Adapter->set( { category => 'Foo::Baz' },
          'Dispatch', dispatcher => $log );
  
      # Use Log::Dispatch::Config for Foo::Baz and its subcategories
      #
      use Log::Dispatch::Config;
      Log::Dispatch::Config->configure('/path/to/log.conf');
      Log::Any::Adapter->set(
          { category => qr/^Foo::Baz/ },
          'Dispatch', dispatcher => Log::Dispatch::Config->instance() );
  
      # Use your own adapter for all categories
      #
      Log::Any::Adapter->set('+My::Log::Any::Adapter', ...);
  
  =head1 DESCRIPTION
  
  Log::Any::Adapter connects log producers and log consumers.  Its methods
  instantiate a logging adapter (a subclass of L<Log::Any::Adapter::Base>)
  and route log messages from one or more categories to it.
  
  =head1 ADAPTERS
  
  In order to use a logging mechanism with C<Log::Any>, there needs to be an
  adapter class for it. Typically this is named Log::Any::Adapter::I<something>.
  
  =head2 Adapters in this distribution
  
  Three basic adapters come with this distribution -- L<Log::Any::Adapter::File>,
  L<Log::Any::Adapter::Stdout> and L<Log::Any::Adapter::Stderr>:
  
      use Log::Any::Adapter ('File', '/path/to/file.log');
      use Log::Any::Adapter ('Stdout');
      use Log::Any::Adapter ('Stderr');
  
      # or
  
      use Log::Any::Adapter;
      Log::Any::Adapter->set('File', '/path/to/file.log');
      Log::Any::Adapter->set('Stdout');
      Log::Any::Adapter->set('Stderr');
  
  All of them simply output the message and newline to the specified destination;
  a datestamp prefix is added in the C<File> case. For anything more complex
  you'll want to use a more robust adapter from CPAN.
  
  =head2 Adapters on CPAN
  
  A sampling of adapters available on CPAN as of this writing:
  
  =over
  
  =item *
  
  L<Log::Any::Adapter::Log4perl|Log::Any::Adapter::Log4perl>
  
  =item *
  
  L<Log::Any::Adapter::Dispatch|Log::Any::Adapter::Dispatch>
  
  =item *
  
  L<Log::Any::Adapter::FileHandle|Log::Any::Adapter::FileHandle>
  
  =item *
  
  L<Log::Any::Adapter::Syslog|Log::Any::Adapter::Syslog>
  
  =back
  
  You may find other adapters on CPAN by searching for "Log::Any::Adapter", or
  create your own adapter. See
  L<Log::Any::Adapter::Development|Log::Any::Adapter::Development> for more
  information on the latter.
  
  =head1 SETTING AND REMOVING ADAPTERS
  
  =over
  
  =item Log::Any::Adapter->set ([options, ]adapter_name, adapter_params...)
  
  This method sets the adapter to use for all log categories, or for a particular
  set of categories.
  
  I<adapter_name> is the name of an adapter. It is automatically prepended with
  "Log::Any::Adapter::". If instead you want to pass the full name of an adapter,
  prefix it with a "+". e.g.
  
      # Use My::Adapter class
      Log::Any::Adapter->set('+My::Adapter', arg => $value);
  
  I<adapter_params> are passed along to the adapter constructor. See the
  documentation for the individual adapter classes for more information.
  
  An optional hash of I<options> may be passed as the first argument. Options
  are:
  
  =over
  
  =item category
  
  A string containing a category name, or a regex (created with C<qr//>) matching
  multiple categories.  If not specified, all categories will be routed to the
  adapter.
  
  =item lexically
  
  A reference to a lexical variable. When the variable goes out of scope, the
  adapter setting will be removed. e.g.
  
      {
          Log::Any::Adapter->set({lexically => \my $lex}, ...);
  
          # in effect here
          ...
      }
      # no longer in effect here
  
  =back
  
  C<set> returns an entry object, which can be passed to C<remove>.  If you
  call C<set> repeatedly without calling C<remove> you will leak memory.  For
  most programs that set an adapter once until the end of the program, this
  shouldn't matter.
  
  =item use Log::Any::Adapter (...)
  
  If you pass arguments to C<use Log::Any::Adapter>, it calls C<<
  Log::Any::Adapter->set >> with those arguments.
  
  =item Log::Any::Adapter->remove (entry)
  
  Remove an I<entry> previously returned by C<set>.
  
  =back
  
  =head1 USING MORE THAN ONE ADAPTER
  
  C<Log::Any> maintains a stack of entries created via C<set>.  If you call
  C<set> repeatedly, you will leak memory unless you do one of the
  following:
  
  =over 4
  
  =item *
  
  call C<remove> on the adapter returned from C<set> when you are done with it
  
  =item *
  
  use the C<lexically> feature to set a guard variable that will clean it up when it goes out of scope
  
  =back
  
  When getting a logger for a particular category, C<Log::Any> will work its way
  down the stack and use the first matching entry.
  
  Whenever the stack changes, any C<Log::Any> loggers that have previously been
  created will automatically adjust to the new stack. For example:
  
      my $log = Log::Any->get_logger();
      $log->error("aiggh!");   # this goes nowhere
      ...
      {
          Log::Any::Adapter->set({ lexically => \my $lex }, 'Log4perl');
          $log->error("aiggh!");   # this goes to log4perl
          ...
      }
      $log->error("aiggh!");   # this goes nowhere again
  
  =head1 SEE ALSO
  
  L<Log::Any|Log::Any>
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Jonathan Swartz <swartz@pobox.com>
  
  =item *
  
  David Golden <dagolden@cpan.org>
  
  =item *
  
  Doug Bell <preaction@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by Jonathan Swartz, David Golden, and Doug Bell.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_ANY_ADAPTER

    $main::fatpacked{"Log/Any/Adapter/Base.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_ADAPTER_BASE';
  use 5.008001;
  use strict;
  use warnings;
  
  package Log::Any::Adapter::Base;
  
  our $VERSION = '1.042';
  
  # we import these in case any legacy adapter uses them as class methods
  use Log::Any::Adapter::Util qw/make_method dump_one_line/;
  
  sub new {
      my $class = shift;
      my $self  = {@_};
      bless $self, $class;
      $self->init(@_);
      return $self;
  }
  
  sub init { }
  
  # Create stub logging methods
  for my $method ( Log::Any::Adapter::Util::logging_and_detection_methods() ) {
      no strict 'refs';
      *$method = sub {
          my $class = ref( $_[0] ) || $_[0];
          die "$class does not implement $method";
      };
  }
  
  # This methods installs a method that delegates to an object attribute
  sub delegate_method_to_slot {
      my ( $class, $slot, $method, $adapter_method ) = @_;
  
      make_method( $method,
          sub { my $self = shift; return $self->{$slot}->$adapter_method(@_) },
          $class );
  }
  
  1;
LOG_ANY_ADAPTER_BASE

    $main::fatpacked{"Log/Any/Adapter/File.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_ADAPTER_FILE';
  use 5.008001;
  use strict;
  use warnings;
  
  package Log::Any::Adapter::File;
  
  # ABSTRACT: Simple adapter for logging to files
  our $VERSION = '1.042';
  
  use Config;
  use Fcntl qw/:flock/;
  use IO::File;
  use Log::Any::Adapter::Util ();
  
  use Log::Any::Adapter::Base;
  our @ISA = qw/Log::Any::Adapter::Base/;
  
  my $HAS_FLOCK = $Config{d_flock} || $Config{d_fcntl_can_lock} || $Config{d_lockf};
  
  my $trace_level = Log::Any::Adapter::Util::numeric_level('trace');
  sub new {
      my ( $class, $file, @args ) = @_;
      return $class->SUPER::new( file => $file, log_level => $trace_level, @args );
  }
  
  sub init {
      my $self = shift;
      if ( exists $self->{log_level} ) {
          $self->{log_level} = Log::Any::Adapter::Util::numeric_level( $self->{log_level} )
              unless $self->{log_level} =~ /^\d+$/;
      }
      else {
          $self->{log_level} = $trace_level;
      }
      my $file = $self->{file};
      my $binmode ||= ':utf8';
      $binmode = ":$binmode" unless substr($binmode,0,1) eq ':';
      open( $self->{fh}, ">>$binmode", $file )
        or die "cannot open '$file' for append: $!";
      $self->{fh}->autoflush(1);
  }
  
  foreach my $method ( Log::Any::Adapter::Util::logging_methods() ) {
      no strict 'refs';
      my $method_level = Log::Any::Adapter::Util::numeric_level( $method );
      *{$method} = sub {
          my ( $self, $text ) = @_;
          return if $method_level > $self->{log_level};
          my $msg = sprintf( "[%s] %s\n", scalar(localtime), $text );
          flock($self->{fh}, LOCK_EX) if $HAS_FLOCK;
          $self->{fh}->print($msg);
          flock($self->{fh}, LOCK_UN) if $HAS_FLOCK;
        }
  }
  
  foreach my $method ( Log::Any::Adapter::Util::detection_methods() ) {
      no strict 'refs';
      my $base = substr($method,3);
      my $method_level = Log::Any::Adapter::Util::numeric_level( $base );
      *{$method} = sub {
          return !!(  $method_level <= $_[0]->{log_level} );
      };
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Any::Adapter::File - Simple adapter for logging to files
  
  =head1 VERSION
  
  version 1.042
  
  =head1 SYNOPSIS
  
      use Log::Any::Adapter ('File', '/path/to/file.log');
  
      # or
  
      use Log::Any::Adapter;
      ...
      Log::Any::Adapter->set('File', '/path/to/file.log');
  
      # with minimum level 'warn'
  
      use Log::Any::Adapter (
          'File', '/path/to/file.log', log_level => 'warn',
      );
  
  =head1 DESCRIPTION
  
  This simple built-in L<Log::Any|Log::Any> adapter logs each message to the
  specified file, with a datestamp prefix and newline appended. The file is
  opened for append with autoflush on.  If C<flock> is available, the handle
  will be locked when writing.
  
  The C<log_level> attribute may be set to define a minimum level to log.
  
  The C<binmode> attribute may be set to define a PerlIO layer string to use
  when opening the file.  The default is C<:utf8>.
  
  Category is ignored.
  
  =head1 SEE ALSO
  
  L<Log::Any|Log::Any>, L<Log::Any::Adapter|Log::Any::Adapter>
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Jonathan Swartz <swartz@pobox.com>
  
  =item *
  
  David Golden <dagolden@cpan.org>
  
  =item *
  
  Doug Bell <preaction@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by Jonathan Swartz, David Golden, and Doug Bell.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_ANY_ADAPTER_FILE

    $main::fatpacked{"Log/Any/Adapter/Log4perl.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_ADAPTER_LOG4PERL';
  use strict;
  use warnings;
  
  package Log::Any::Adapter::Log4perl;
  # ABSTRACT: Log::Any adapter for Log::Log4perl
  
  use Log::Log4perl 1.32; # bug-free wrapper_register available
  use Log::Any::Adapter::Util 1.03 qw(make_method);
  use base qw(Log::Any::Adapter::Base);
  
  our $VERSION = '0.08';
  
  # Ensure %F, %C, etc. skip Log::Any related packages
  Log::Log4perl->wrapper_register(__PACKAGE__);
  Log::Log4perl->wrapper_register("Log::Any::Proxy");
  
  sub init {
      my ($self) = @_;
  
      $self->{logger} = Log::Log4perl->get_logger( $self->{category} );
  }
  
  foreach my $method ( Log::Any->logging_and_detection_methods() ) {
      my $log4perl_method = $method;
  
      # Map log levels down to log4perl levels where necessary
      #
      for ($log4perl_method) {
          s/notice/info/;
          s/warning/warn/;
          s/critical|alert|emergency/fatal/;
      }
  
      make_method(
          $method,
          sub {
              my $self = shift;
              return $self->{logger}->$log4perl_method(@_);
          }
      );
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Any::Adapter::Log4perl - Log::Any adapter for Log::Log4perl
  
  =head1 VERSION
  
  version 0.08
  
  =head1 SYNOPSIS
  
      use Log::Log4perl;
      Log::Log4perl::init('/etc/log4perl.conf');
  
      Log::Any::Adapter->set('Log::Log4perl');
  
  =head1 DESCRIPTION
  
  This Log::Any adapter uses L<Log::Log4perl|Log::Log4perl> for logging. log4perl
  must be initialized before calling I<set>. There are no parameters.
  
  =for Pod::Coverage init
  
  =head1 LOG LEVEL TRANSLATION
  
  Log levels are translated from Log::Any to Log4perl as follows:
  
      notice -> info
      warning -> warn
      critical -> fatal
      alert -> fatal
      emergency -> fatal
  
  =head1 SEE ALSO
  
  =over 4
  
  =item *
  
  L<Log::Any>
  
  =item *
  
  L<Log::Any::Adapter>
  
  =item *
  
  L<Log::Log4perl>
  
  =back
  
  =for :stopwords cpan testmatrix url annocpan anno bugtracker rt cpants kwalitee diff irc mailto metadata placeholders metacpan
  
  =head1 SUPPORT
  
  =head2 Bugs / Feature Requests
  
  Please report any bugs or feature requests through the issue tracker
  at L<https://github.com/dagolden/Log-Any-Adapter-Log4perl/issues>.
  You will be notified automatically of any progress on your issue.
  
  =head2 Source Code
  
  This is open source software.  The code repository is available for
  public review and contribution under the terms of the license.
  
  L<https://github.com/dagolden/Log-Any-Adapter-Log4perl>
  
    git clone https://github.com/dagolden/Log-Any-Adapter-Log4perl.git
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Jonathan Swartz <swartz@pobox.com>
  
  =item *
  
  David Golden <dagolden@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by Jonathan Swartz.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_ANY_ADAPTER_LOG4PERL

    $main::fatpacked{"Log/Any/Adapter/Null.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_ADAPTER_NULL';
  use 5.008001;
  use strict;
  use warnings;
  
  package Log::Any::Adapter::Null;
  
  # ABSTRACT: Discards all log messages
  our $VERSION = '1.042';
  
  use Log::Any::Adapter::Base;
  our @ISA = qw/Log::Any::Adapter::Base/;
  
  use Log::Any::Adapter::Util ();
  
  # All methods are no-ops and return false
  
  foreach my $method (Log::Any::Adapter::Util::logging_and_detection_methods()) {
      no strict 'refs';
      *{$method} = sub { return '' }; # false
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Any::Adapter::Null - Discards all log messages
  
  =head1 VERSION
  
  version 1.042
  
  =head1 SYNOPSIS
  
      Log::Any::Adapter->set('Null');
  
  =head1 DESCRIPTION
  
  This Log::Any adapter discards all log messages and returns false for all
  detection methods (e.g. is_debug). This is the default adapter when Log::Any is
  loaded.
  
  =head1 SEE ALSO
  
  L<Log::Any|Log::Any>, L<Log::Any::Adapter|Log::Any::Adapter>
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Jonathan Swartz <swartz@pobox.com>
  
  =item *
  
  David Golden <dagolden@cpan.org>
  
  =item *
  
  Doug Bell <preaction@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by Jonathan Swartz, David Golden, and Doug Bell.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_ANY_ADAPTER_NULL

    $main::fatpacked{"Log/Any/Adapter/Screen.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_ADAPTER_SCREEN';
  package Log::Any::Adapter::Screen;
  
  our $DATE = '2016-10-04'; # DATE
  our $VERSION = '0.13'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Log::Any;
  use Log::Any::Adapter::Util qw(make_method);
  use parent qw(Log::Any::Adapter::Base);
  
  my $CODE_RESET = "\e[0m"; # PRECOMPUTED FROM: do { require Term::ANSIColor; Term::ANSIColor::color('reset') }
  my $DEFAULT_COLORS = {alert=>"\e[31m",critical=>"\e[31m",debug=>"",emergency=>"\e[31m",error=>"\e[35m",info=>"\e[32m",notice=>"\e[32m",trace=>"\e[33m",warning=>"\e[1;34m"}; # PRECOMPUTED FROM: do { require Term::ANSIColor; my $tmp = {trace=>'yellow', debug=>'', info=>'green',notice=>'green',warning=>'bold blue',error=>'magenta',critical=>'red',alert=>'red',emergency=>'red'}; for (keys %$tmp) { if ($tmp->{$_}) { $tmp->{$_} = Term::ANSIColor::color($tmp->{$_}) } }; $tmp }
  
  my $Time0;
  
  my @logging_methods = Log::Any->logging_methods;
  our %logging_levels;
  for my $i (0..@logging_methods-1) {
      $logging_levels{$logging_methods[$i]} = $i;
  }
  # some common typos
  $logging_levels{warn} = $logging_levels{warning};
  
  sub _min_level {
      my $self = shift;
  
      return $ENV{LOG_LEVEL}
          if $ENV{LOG_LEVEL} && defined $logging_levels{$ENV{LOG_LEVEL}};
      return 'trace' if $ENV{TRACE};
      return 'debug' if $ENV{DEBUG};
      return 'info'  if $ENV{VERBOSE};
      return 'error' if $ENV{QUIET};
      $self->{default_level};
  }
  
  sub init {
      my ($self) = @_;
      $self->{default_level} //= 'warning';
      $self->{stderr}    //= 1;
      $self->{use_color} //= $ENV{COLOR} // (-t STDOUT);
      if ($self->{colors}) {
          require Term::ANSIColor;
          # convert color names to escape sequence
          my $orig = $self->{colors};
          $self->{colors} = {
              map {($_,($orig->{$_} ? Term::ANSIColor::color($orig->{$_}) : ''))}
                  keys %$orig
              };
      } else {
          $self->{colors} = $DEFAULT_COLORS;
      }
      $self->{min_level} //= $self->_min_level;
      if (!$self->{formatter}) {
          if (($ENV{LOG_PREFIX} // '') eq 'elapsed') {
              require Time::HiRes;
              $Time0 //= Time::HiRes::time();
          }
          $self->{formatter} = sub {
              my ($self, $msg) = @_;
              my $env = $ENV{LOG_PREFIX} // '';
              if ($env eq 'elapsed') {
                  my $time = Time::HiRes::time();
                  $msg = sprintf("[%9.3fms] %s", ($time - $Time0)*1000, $msg);
              }
              $msg;
          };
      }
      $self->{_fh} = $self->{stderr} ? \*STDERR : \*STDOUT;
  }
  
  sub hook_before_log {
      return;
      #my ($self, $msg) = @_;
  }
  
  sub hook_after_log {
      my ($self, $msg) = @_;
      print { $self->{_fh} } "\n" unless $msg =~ /\n\z/;
  }
  
  for my $method (Log::Any->logging_methods()) {
      make_method(
          $method,
          sub {
              my ($self, $msg) = @_;
  
              return if $logging_levels{$method} <
                  $logging_levels{$self->{min_level}};
  
              $self->hook_before_log($msg);
  
              if ($self->{formatter}) {
                  $msg = $self->{formatter}->($self, $msg);
              }
  
              if ($self->{use_color} && $self->{colors}{$method}) {
                  $msg = $self->{colors}{$method} . $msg . $CODE_RESET;
              }
  
              print { $self->{_fh} } $msg;
  
              $self->hook_after_log($msg);
          }
      );
  }
  
  for my $method (Log::Any->detection_methods()) {
      my $level = $method; $level =~ s/^is_//;
      make_method(
          $method,
          sub {
              my $self = shift;
              $logging_levels{$level} >= $logging_levels{$self->{min_level}};
          }
      );
  }
  
  1;
  # ABSTRACT: Send logs to screen, with colors and some other features
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Any::Adapter::Screen - Send logs to screen, with colors and some other features
  
  =head1 VERSION
  
  This document describes version 0.13 of Log::Any::Adapter::Screen (from Perl distribution Log-Any-Adapter-Screen), released on 2016-10-04.
  
  =head1 SYNOPSIS
  
   use Log::Any::Adapter;
   Log::Any::Adapter->set('Screen',
       # min_level => 'debug', # default is 'warning'
       # colors    => { trace => 'bold yellow on_gray', ... }, # customize colors
       # use_color => 1, # force color even when not interactive
       # stderr    => 0, # print to STDOUT instead of the default STDERR
       # formatter => sub { "LOG: $_[1]" }, # default none
   );
  
  =head1 DESCRIPTION
  
  This Log::Any adapter prints log messages to screen (STDERR/STDOUT). The
  messages are colored according to level (unless coloring is turned off). It has
  a few other features: allow passing formatter, allow setting level from some
  environment variables, add prefix/timestamps.
  
  Parameters:
  
  =over 4
  
  =item * min_level => STRING
  
  Set logging level. Default is warning. If LOG_LEVEL environment variable is set,
  it will be used instead. If TRACE environment variable is set to true, level
  will be set to 'trace'. If DEBUG environment variable is set to true, level will
  be set to 'debug'. If VERBOSE environment variable is set to true, level will be
  set to 'info'.If QUIET environment variable is set to true, level will be set to
  'error'.
  
  =item * use_color => BOOL
  
  Whether to use color or not. Default is true only when running interactively (-t
  STDOUT returns true).
  
  =item * colors => HASH
  
  Customize colors. Hash keys are the logging methods, hash values are colors
  supported by L<Term::ANSIColor>.
  
  The default colors are:
  
   method/level                 color
   ------------                 -----
   trace                        yellow
   debug                        (none, terminal default)
   info, notice                 green
   warning                      bold blue
   error                        magenta
   critical, alert, emergency   red
  
  =item * stderr => BOOL
  
  Whether to print to STDERR, default is true. If set to 0, will print to STDOUT
  instead.
  
  =item * formatter => CODEREF
  
  Allow formatting message. If defined, message will be passed before being
  colorized. Coderef will be passed:
  
   ($self, $message)
  
  and is expected to return the formatted message.
  
  The default formatter can optionally prefix the message with extra stuffs,
  depending on the content of LOG_PREFIX environment variable, such as: elapsed
  time (e.g. C<< [0.023ms] >>) if LOG_PREFIX is C<elapsed>.
  
  NOTE: Log::Any 1.00+ now has a proxy object which allows
  formatting/customization of message before it is sent to adapter(s), so
  formatting does not have to be done on a per-adapter basis. As an alternative to
  this attribute, you can also consider using the proxy object or the (upcoming?)
  global proxy object.
  
  =item * default_level => STR (default: warning)
  
  If no level-setting environment variables are defined, will default to this
  level.
  
  =back
  
  =for Pod::Coverage ^(init|hook_.+)$
  
  =head1 ENVIRONMENT
  
  =head2 COLOR => bool
  
  Can be set to 0 to explicitly disable colors. The default is to check for C<<-t
  STDOUT>>.
  
  =head2 LOG_LEVEL => str
  
  =head2 QUIET => bool
  
  =head2 VERBOSE => bool
  
  =head2 DEBUG => bool
  
  =head2 TRACE => bool
  
  These environment variables can set the default for C<min_level>. See
  documentation about C<min_level> for more details.
  
  =head2 LOG_PREFIX => str
  
  The default formatter groks these variables. See documentation about
  C<formatter> about more details.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Log-Any-Adapter-Screen>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Log-Any-Adapter-ScreenColoredLevel>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Log-Any-Adapter-Screen>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  Originally inspired by L<Log::Log4perl::Appender::ScreenColoredLevel>. The old
  name for this adapter is Log::Any::Adapter::ScreenColoredLevel but at some point
  I figure using a shorter name is better for my fingers.
  
  L<Log::Any>
  
  L<Log::Log4perl::Appender::ScreenColoredLevel>
  
  L<Term::ANSIColor>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_ANY_ADAPTER_SCREEN

    $main::fatpacked{"Log/Any/Adapter/Stderr.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_ADAPTER_STDERR';
  use 5.008001;
  use strict;
  use warnings;
  
  package Log::Any::Adapter::Stderr;
  
  # ABSTRACT: Simple adapter for logging to STDERR
  our $VERSION = '1.042';
  
  use Log::Any::Adapter::Util ();
  
  use Log::Any::Adapter::Base;
  our @ISA = qw/Log::Any::Adapter::Base/;
  
  my $trace_level = Log::Any::Adapter::Util::numeric_level('trace');
  
  sub init {
      my ($self) = @_;
      if ( exists $self->{log_level} ) {
          $self->{log_level} =
            Log::Any::Adapter::Util::numeric_level( $self->{log_level} )
            unless $self->{log_level} =~ /^\d+$/;
      }
      else {
          $self->{log_level} = $trace_level;
      }
  }
  
  foreach my $method ( Log::Any::Adapter::Util::logging_methods() ) {
      no strict 'refs';
      my $method_level = Log::Any::Adapter::Util::numeric_level($method);
      *{$method} = sub {
          my ( $self, $text ) = @_;
          return if $method_level > $self->{log_level};
          print STDERR "$text\n";
      };
  }
  
  foreach my $method ( Log::Any::Adapter::Util::detection_methods() ) {
      no strict 'refs';
      my $base = substr( $method, 3 );
      my $method_level = Log::Any::Adapter::Util::numeric_level($base);
      *{$method} = sub {
          return !!( $method_level <= $_[0]->{log_level} );
      };
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Any::Adapter::Stderr - Simple adapter for logging to STDERR
  
  =head1 VERSION
  
  version 1.042
  
  =head1 SYNOPSIS
  
      use Log::Any::Adapter ('Stderr');
  
      # or
  
      use Log::Any::Adapter;
      ...
      Log::Any::Adapter->set('Stderr');
  
      # with minimum level 'warn'
  
      use Log::Any::Adapter ('Stderr', log_level => 'warn' );
  
  =head1 DESCRIPTION
  
  This simple built-in L<Log::Any|Log::Any> adapter logs each message to STDERR
  with a newline appended. Category is ignored.
  
  The C<log_level> attribute may be set to define a minimum level to log.
  
  =head1 SEE ALSO
  
  L<Log::Any|Log::Any>, L<Log::Any::Adapter|Log::Any::Adapter>
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Jonathan Swartz <swartz@pobox.com>
  
  =item *
  
  David Golden <dagolden@cpan.org>
  
  =item *
  
  Doug Bell <preaction@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by Jonathan Swartz, David Golden, and Doug Bell.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_ANY_ADAPTER_STDERR

    $main::fatpacked{"Log/Any/Adapter/Stdout.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_ADAPTER_STDOUT';
  use 5.008001;
  use strict;
  use warnings;
  
  package Log::Any::Adapter::Stdout;
  
  # ABSTRACT: Simple adapter for logging to STDOUT
  our $VERSION = '1.042';
  
  use Log::Any::Adapter::Util ();
  
  use Log::Any::Adapter::Base;
  our @ISA = qw/Log::Any::Adapter::Base/;
  
  my $trace_level = Log::Any::Adapter::Util::numeric_level('trace');
  
  sub init {
      my ($self) = @_;
      if ( exists $self->{log_level} ) {
          $self->{log_level} =
            Log::Any::Adapter::Util::numeric_level( $self->{log_level} )
            unless $self->{log_level} =~ /^\d+$/;
      }
      else {
          $self->{log_level} = $trace_level;
      }
  }
  
  foreach my $method ( Log::Any::Adapter::Util::logging_methods() ) {
      no strict 'refs';
      my $method_level = Log::Any::Adapter::Util::numeric_level($method);
      *{$method} = sub {
          my ( $self, $text ) = @_;
          return if $method_level > $self->{log_level};
          print STDOUT "$text\n";
      };
  }
  
  foreach my $method ( Log::Any::Adapter::Util::detection_methods() ) {
      no strict 'refs';
      my $base = substr( $method, 3 );
      my $method_level = Log::Any::Adapter::Util::numeric_level($base);
      *{$method} = sub {
          return !!( $method_level <= $_[0]->{log_level} );
      };
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Any::Adapter::Stdout - Simple adapter for logging to STDOUT
  
  =head1 VERSION
  
  version 1.042
  
  =head1 SYNOPSIS
  
      use Log::Any::Adapter ('Stdout');
  
      # or
  
      use Log::Any::Adapter;
      ...
      Log::Any::Adapter->set('Stdout');
  
      # with minimum level 'warn'
  
      use Log::Any::Adapter ('Stdout', log_level => 'warn' );
  
  =head1 DESCRIPTION
  
  This simple built-in L<Log::Any|Log::Any> adapter logs each message to STDOUT
  with a newline appended. Category is ignored.
  
  The C<log_level> attribute may be set to define a minimum level to log.
  
  =head1 SEE ALSO
  
  L<Log::Any|Log::Any>, L<Log::Any::Adapter|Log::Any::Adapter>
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Jonathan Swartz <swartz@pobox.com>
  
  =item *
  
  David Golden <dagolden@cpan.org>
  
  =item *
  
  Doug Bell <preaction@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by Jonathan Swartz, David Golden, and Doug Bell.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_ANY_ADAPTER_STDOUT

    $main::fatpacked{"Log/Any/Adapter/Test.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_ADAPTER_TEST';
  use 5.008001;
  use strict;
  use warnings;
  
  package Log::Any::Adapter::Test;
  
  our $VERSION = '1.042';
  
  use Log::Any::Adapter::Util qw/dump_one_line/;
  use Test::Builder;
  
  use Log::Any::Adapter::Base;
  our @ISA = qw/Log::Any::Adapter::Base/;
  
  my $tb = Test::Builder->new();
  my @msgs;
  
  # Ignore arguments for the original adapter if we're overriding, but recover
  # category from argument list; this depends on category => $category being put
  # at the end of the list in Log::Any::Manager. If not overriding, allow
  # arguments as usual.
  
  sub new {
      my $class = shift;
      if ( defined $Log::Any::OverrideDefaultAdapterClass
          && $Log::Any::OverrideDefaultAdapterClass eq __PACKAGE__ )
      {
          my $category = pop @_;
          return $class->SUPER::new( category => $category );
      }
      else {
          return $class->SUPER::new(@_);
      }
  }
  
  # All detection methods return true
  #
  foreach my $method ( Log::Any::Adapter::Util::detection_methods() ) {
      no strict 'refs';
      *{$method} = sub { 1 };
  }
  
  # All logging methods push onto msgs array
  #
  foreach my $method ( Log::Any::Adapter::Util::logging_methods() ) {
      no strict 'refs';
      *{$method} = sub {
          my ( $self, $msg ) = @_;
          push(
              @msgs,
              {
                  message  => $msg,
                  level    => $method,
                  category => $self->{category}
              }
          );
      };
  }
  
  # Testing methods below
  #
  
  sub msgs {
      my $self = shift;
  
      return \@msgs;
  }
  
  sub clear {
      my ($self) = @_;
  
      @msgs = ();
  }
  
  sub contains_ok {
      my ( $self, $regex, $test_name ) = @_;
  
      local $Test::Builder::Level = $Test::Builder::Level + 1;
  
      $test_name ||= "log contains '$regex'";
      my $found =
        _first_index( sub { $_->{message} =~ /$regex/ }, @{ $self->msgs } );
      if ( $found != -1 ) {
          splice( @{ $self->msgs }, $found, 1 );
          $tb->ok( 1, $test_name );
      }
      else {
          $tb->ok( 0, $test_name );
          $tb->diag( "could not find message matching $regex" );
          _diag_msgs();
      }
  }
  
  sub category_contains_ok {
      my ( $self, $category, $regex, $test_name ) = @_;
  
      local $Test::Builder::Level = $Test::Builder::Level + 1;
  
      $test_name ||= "log for $category contains '$regex'";
      my $found =
        _first_index(
          sub { $_->{category} eq $category && $_->{message} =~ /$regex/ },
          @{ $self->msgs } );
      if ( $found != -1 ) {
          splice( @{ $self->msgs }, $found, 1 );
          $tb->ok( 1, $test_name );
      }
      else {
          $tb->ok( 0, $test_name );
          $tb->diag( "could not find $category message matching $regex" );
          _diag_msgs();
      }
  }
  
  sub does_not_contain_ok {
      my ( $self, $regex, $test_name ) = @_;
  
      local $Test::Builder::Level = $Test::Builder::Level + 1;
  
      $test_name ||= "log does not contain '$regex'";
      my $found =
        _first_index( sub { $_->{message} =~ /$regex/ }, @{ $self->msgs } );
      if ( $found != -1 ) {
          $tb->ok( 0, $test_name );
          $tb->diag( "found message matching $regex: " . $self->msgs->[$found]->{message} );
      }
      else {
          $tb->ok( 1, $test_name );
      }
  }
  
  sub category_does_not_contain_ok {
      my ( $self, $category, $regex, $test_name ) = @_;
  
      local $Test::Builder::Level = $Test::Builder::Level + 1;
  
      $test_name ||= "log for $category contains '$regex'";
      my $found =
        _first_index(
          sub { $_->{category} eq $category && $_->{message} =~ /$regex/ },
          @{ $self->msgs } );
      if ( $found != -1 ) {
          $tb->ok( 0, $test_name );
          $tb->diag( "found $category message matching $regex: "
                . $self->msgs->[$found] );
      }
      else {
          $tb->ok( 1, $test_name );
      }
  }
  
  sub empty_ok {
      my ( $self, $test_name ) = @_;
  
      local $Test::Builder::Level = $Test::Builder::Level + 1;
  
      $test_name ||= "log is empty";
      if ( !@{ $self->msgs } ) {
          $tb->ok( 1, $test_name );
      }
      else {
          $tb->ok( 0, $test_name );
          $tb->diag( "log is not empty" );
          _diag_msgs();
          $self->clear();
      }
  }
  
  sub contains_only_ok {
      my ( $self, $regex, $test_name ) = @_;
  
      local $Test::Builder::Level = $Test::Builder::Level + 1;
  
      $test_name ||= "log contains only '$regex'";
      my $count = scalar( @{ $self->msgs } );
      if ( $count == 1 ) {
          local $Test::Builder::Level = $Test::Builder::Level + 1;
          $self->contains_ok( $regex, $test_name );
      }
      else {
          $tb->ok( 0, $test_name );
          _diag_msgs();
      }
  }
  
  sub _diag_msgs {
      my $count = @msgs;
      if ( ! $count ) {
          $tb->diag("log contains no messages");
      }
      else {
          $tb->diag("log contains $count message" . ( $count > 1 ? "s:" : ":"));
          $tb->diag(dump_one_line($_)) for @msgs;
      }
  }
  
  sub _first_index {
      my $f = shift;
      for my $i ( 0 .. $#_ ) {
          local *_ = \$_[$i];
          return $i if $f->();
      }
      return -1;
  }
  
  
  1;
LOG_ANY_ADAPTER_TEST

    $main::fatpacked{"Log/Any/Adapter/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_ADAPTER_UTIL';
  use 5.008001;
  use strict;
  use warnings;
  
  package Log::Any::Adapter::Util;
  
  # ABSTRACT: Common utility functions for Log::Any
  our $VERSION = '1.042';
  
  use Exporter;
  our @ISA = qw/Exporter/;
  
  my %LOG_LEVELS;
  BEGIN {
      %LOG_LEVELS = (
          EMERGENCY => 0,
          ALERT     => 1,
          CRITICAL  => 2,
          ERROR     => 3,
          WARNING   => 4,
          NOTICE    => 5,
          INFO      => 6,
          DEBUG     => 7,
          TRACE     => 8,
      );
  }
  
  use constant \%LOG_LEVELS;
  
  our @EXPORT_OK = qw(
    cmp_deeply
    detection_aliases
    detection_methods
    dump_one_line
    log_level_aliases
    logging_aliases
    logging_and_detection_methods
    logging_methods
    make_method
    numeric_level
    read_file
    require_dynamic
  );
  
  push @EXPORT_OK, keys %LOG_LEVELS;
  
  our %EXPORT_TAGS = ( 'levels' => [ keys %LOG_LEVELS ] );
  
  my ( %LOG_LEVEL_ALIASES, @logging_methods, @logging_aliases, @detection_methods,
      @detection_aliases, @logging_and_detection_methods );
  
  BEGIN {
      %LOG_LEVEL_ALIASES = (
          inform => 'info',
          warn   => 'warning',
          err    => 'error',
          crit   => 'critical',
          fatal  => 'critical'
      );
      @logging_methods =
        qw(trace debug info notice warning error critical alert emergency);
      @logging_aliases               = keys(%LOG_LEVEL_ALIASES);
      @detection_methods             = map { "is_$_" } @logging_methods;
      @detection_aliases             = map { "is_$_" } @logging_aliases;
      @logging_and_detection_methods = ( @logging_methods, @detection_methods );
  }
  
  #pod =func logging_methods
  #pod
  #pod Returns a list of all logging method. E.g. "trace", "info", etc.
  #pod
  #pod =cut
  
  sub logging_methods               { @logging_methods }
  
  #pod =func detection_methods
  #pod
  #pod Returns a list of detection methods.  E.g. "is_trace", "is_info", etc.
  #pod
  #pod =cut
  
  sub detection_methods             { @detection_methods }
  
  #pod =func logging_and_detection_methods
  #pod
  #pod Returns a list of logging and detection methods (but not aliases).
  #pod
  #pod =cut
  
  sub logging_and_detection_methods { @logging_and_detection_methods }
  
  #pod =func log_level_aliases
  #pod
  #pod Returns key/value pairs mapping aliases to "official" names.  E.g. "err" maps
  #pod to "error".
  #pod
  #pod =cut
  
  sub log_level_aliases             { %LOG_LEVEL_ALIASES }
  
  #pod =func logging_aliases
  #pod
  #pod Returns a list of logging alias names.  These are the keys from
  #pod L</log_level_aliases>.
  #pod
  #pod =cut
  
  sub logging_aliases               { @logging_aliases }
  
  #pod =func detection_aliases
  #pod
  #pod Returns a list of detection aliases.  E.g. "is_err", "is_fatal", etc.
  #pod
  #pod =cut
  
  sub detection_aliases             { @detection_aliases }
  
  #pod =func numeric_level
  #pod
  #pod Given a level name (or alias), returns the numeric value described above under
  #pod log level constants.  E.g. "err" would return 3.
  #pod
  #pod =cut
  
  sub numeric_level {
      my ($level) = @_;
      my $canonical =
        exists $LOG_LEVEL_ALIASES{$level} ? $LOG_LEVEL_ALIASES{$level} : $level;
      return $LOG_LEVELS{ uc($canonical) };
  }
  
  #pod =func dump_one_line
  #pod
  #pod Given a reference, returns a one-line L<Data::Dumper> dump with keys sorted.
  #pod
  #pod =cut
  
  # lazy trampoline to load Data::Dumper only on demand but then not try to
  # require it pointlessly each time
  *dump_one_line = sub {
      require Data::Dumper;
  
      my $dumper = sub {
          my ($value) = @_;
  
          return Data::Dumper->new( [$value] )->Indent(0)->Sortkeys(1)->Quotekeys(0)
          ->Terse(1)->Useqq(1)->Dump();
      };
  
      my $string = $dumper->(@_);
      no warnings 'redefine';
      *dump_one_line = $dumper;
      return $string;
  };
  
  #pod =func make_method
  #pod
  #pod Given a method name, a code reference and a package name, installs the code
  #pod reference as a method in the package.
  #pod
  #pod =cut
  
  sub make_method {
      my ( $method, $code, $pkg ) = @_;
  
      $pkg ||= caller();
      no strict 'refs';
      *{ $pkg . "::$method" } = $code;
  }
  
  #pod =func require_dynamic (DEPRECATED)
  #pod
  #pod Given a class name, attempts to load it via require unless the class
  #pod already has a constructor available.  Throws an error on failure. Used
  #pod internally and may become private in the future.
  #pod
  #pod =cut
  
  sub require_dynamic {
      my ($class) = @_;
  
      return 1 if $class->can('new'); # duck-type that class is loaded
  
      unless ( defined( eval "require $class; 1" ) )
      {    ## no critic (ProhibitStringyEval)
          die $@;
      }
  }
  
  #pod =func read_file (DEPRECATED)
  #pod
  #pod Slurp a file.  Does *not* apply any layers.  Used for testing and may
  #pod become private in the future.
  #pod
  #pod =cut
  
  sub read_file {
      my ($file) = @_;
  
      local $/ = undef;
      open( my $fh, '<:utf8', $file ) ## no critic
        or die "cannot open '$file': $!";
      my $contents = <$fh>;
      return $contents;
  }
  
  #pod =func cmp_deeply (DEPRECATED)
  #pod
  #pod Compares L<dump_one_line> results for two references.  Also takes a test
  #pod label as a third argument.  Used for testing and may become private in the
  #pod future.
  #pod
  #pod =cut
  
  sub cmp_deeply {
      my ( $ref1, $ref2, $name ) = @_;
  
      my $tb = Test::Builder->new();
      $tb->is_eq( dump_one_line($ref1), dump_one_line($ref2), $name );
  }
  
  # 0.XX version loaded Log::Any and some adapters relied on this happening
  # behind the scenes.  Since Log::Any now uses this module, we load Log::Any
  # via require after compilation to mitigate circularity.
  require Log::Any;
  
  1;
  
  
  # vim: ts=4 sts=4 sw=4 et tw=75:
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Any::Adapter::Util - Common utility functions for Log::Any
  
  =head1 VERSION
  
  version 1.042
  
  =head1 DESCRIPTION
  
  This module has utility functions to help develop L<Log::Any::Adapter>
  subclasses or L<Log::Any::Proxy> formatters/filters.  It also has some
  functions used in internal testing.
  
  =head1 USAGE
  
  Nothing is exported by default.
  
  =head2 Log level constants
  
  If the C<:levels> tag is included in the import list, the following numeric
  constants will be imported:
  
      EMERGENCY => 0
      ALERT     => 1
      CRITICAL  => 2
      ERROR     => 3
      WARNING   => 4
      NOTICE    => 5
      INFO      => 6
      DEBUG     => 7
      TRACE     => 8
  
  =head1 FUNCTIONS
  
  =head2 logging_methods
  
  Returns a list of all logging method. E.g. "trace", "info", etc.
  
  =head2 detection_methods
  
  Returns a list of detection methods.  E.g. "is_trace", "is_info", etc.
  
  =head2 logging_and_detection_methods
  
  Returns a list of logging and detection methods (but not aliases).
  
  =head2 log_level_aliases
  
  Returns key/value pairs mapping aliases to "official" names.  E.g. "err" maps
  to "error".
  
  =head2 logging_aliases
  
  Returns a list of logging alias names.  These are the keys from
  L</log_level_aliases>.
  
  =head2 detection_aliases
  
  Returns a list of detection aliases.  E.g. "is_err", "is_fatal", etc.
  
  =head2 numeric_level
  
  Given a level name (or alias), returns the numeric value described above under
  log level constants.  E.g. "err" would return 3.
  
  =head2 dump_one_line
  
  Given a reference, returns a one-line L<Data::Dumper> dump with keys sorted.
  
  =head2 make_method
  
  Given a method name, a code reference and a package name, installs the code
  reference as a method in the package.
  
  =head2 require_dynamic (DEPRECATED)
  
  Given a class name, attempts to load it via require unless the class
  already has a constructor available.  Throws an error on failure. Used
  internally and may become private in the future.
  
  =head2 read_file (DEPRECATED)
  
  Slurp a file.  Does *not* apply any layers.  Used for testing and may
  become private in the future.
  
  =head2 cmp_deeply (DEPRECATED)
  
  Compares L<dump_one_line> results for two references.  Also takes a test
  label as a third argument.  Used for testing and may become private in the
  future.
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Jonathan Swartz <swartz@pobox.com>
  
  =item *
  
  David Golden <dagolden@cpan.org>
  
  =item *
  
  Doug Bell <preaction@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by Jonathan Swartz, David Golden, and Doug Bell.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_ANY_ADAPTER_UTIL

    $main::fatpacked{"Log/Any/App.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_APP';
  package Log::Any::App;
  
  our $DATE = '2016-03-16'; # DATE
  our $VERSION = '0.53'; # VERSION
  
  # i need this to run on centos 5.x. otherwise all my other servers are debian
  # 5.x and 6.x+ (perl 5.010).
  use 5.008000;
  use strict;
  use warnings;
  
  use File::Path qw(make_path);
  use File::Spec;
  use Log::Any::IfLOG;
  use Log::Any::Adapter;
  
  use vars qw($dbg_ctx);
  
  our %PATTERN_STYLES = (
      plain             => '%m',
      plain_nl          => '%m%n',
      script_short      => '[%r] %m%n',
      script_long       => '[%d] %m%n',
      daemon            => '[pid %P] [%d] %m%n',
      syslog            => '[pid %p] %m',
  );
  for (keys %PATTERN_STYLES) {
      $PATTERN_STYLES{"cat_$_"} = "[cat %c]$PATTERN_STYLES{$_}";
      $PATTERN_STYLES{"loc_$_"} = "[loc %l]$PATTERN_STYLES{$_}";
  }
  
  my $init_args;
  our $init_called;
  my $is_daemon;
  
  # poor man's version of 5.10's //
  sub _ifdef {
      my $def = pop @_;
      for (@_) {
          return $_ if defined($_);
      }
      $def;
  }
  
  # j=as json (except the last default)
  sub _ifdefj {
      require JSON::MaybeXS;
  
      my $def = pop @_;
      for (@_) {
          return JSON::MaybeXS::decode_json($_) if defined($_);
      }
      $def;
  }
  
  sub init {
      return if $init_called++;
  
      $is_daemon = undef;
  
      my ($args, $caller) = @_;
      $caller ||= caller();
  
      my $spec = _parse_opts($args, $caller);
      if ($spec->{log} && $spec->{init}) {
          _init_log4perl($spec);
          if ($ENV{LOG_ENV}) {
             my $log_main = Log::Any->get_logger(category => 'main');
             $log_main->tracef("Environment variables: %s", \%ENV);
         }
      }
      $spec;
  }
  
  sub _gen_appender_config {
      my ($ospec, $apd_name, $filter) = @_;
  
      my $name = $ospec->{name};
      my $class;
      my $params = {};
      if ($name =~ /^dir/i) {
          $class = "Log::Dispatch::Dir";
          $params->{dirname}   = $ospec->{path};
          $params->{filename_pattern} = $ospec->{filename_pattern};
          $params->{max_size}  = $ospec->{max_size} if $ospec->{max_size};
          $params->{max_files} = $ospec->{histories}+1 if $ospec->{histories};
          $params->{max_age}   = $ospec->{max_age} if $ospec->{max_age};
      } elsif ($name =~ /^file/i) {
          $class = "Log::Dispatch::FileWriteRotate";
          my ($dir, $prefix) = $ospec->{path} =~ m!(.+)/(.+)!;
          $dir ||= "."; $prefix ||= $ospec->{path};
          $params->{dir}         = $dir;
          $params->{prefix}      = $prefix;
          $params->{suffix}      = $ospec->{suffix};
          $params->{size}        = $ospec->{max_size};
          $params->{period}      = $ospec->{period};
          $params->{histories}   = $ospec->{histories};
          $params->{buffer_size} = $ospec->{buffer_size};
      } elsif ($name =~ /^screen/i) {
          $class = "Log::Log4perl::Appender::" .
              ($ospec->{color} ? "ScreenColoredLevels" : "Screen");
          $params->{stderr}  = $ospec->{stderr} ? 1:0;
          $params->{"color.WARN"} = "bold blue"; # blue on black is so unreadable
      } elsif ($name =~ /^syslog/i) {
          $class = "Log::Dispatch::Syslog";
          $params->{mode}     = 'append';
          $params->{ident}    = $ospec->{ident};
          $params->{facility} = $ospec->{facility};
      } elsif ($name =~ /^unixsock/i) {
          $class = "Log::Log4perl::Appender::Socket::UNIX";
          $params->{Socket} = $ospec->{path};
      } elsif ($name =~ /^array/i) {
          $class = "Log::Dispatch::ArrayWithLimits";
          $params->{array}     = $ospec->{array};
          $params->{max_elems} = $ospec->{max_elems};
      } else {
          die "BUG: Unknown appender type: $name";
      }
  
      join(
          "",
          "log4perl.appender.$apd_name = $class\n",
          (map { "log4perl.appender.$apd_name.$_ = $params->{$_}\n" }
               grep {defined $params->{$_}} keys %$params),
          "log4perl.appender.$apd_name.layout = PatternLayout\n",
          "log4perl.appender.$apd_name.layout.ConversionPattern = $ospec->{pattern}\n",
          ($filter ? "log4perl.appender.$apd_name.Filter = $filter\n" : ""),
      );
  }
  
  sub _lit {
      require Data::Dump;
      Data::Dump::dump(shift);
  }
  
  sub _gen_l4p_config {
      my ($spec) = @_;
  
      my @otypes = qw(file dir screen syslog unixsock array);
  
      # we use a custom perl code to implement filter_* specs.
      my @fccode;
      push @fccode, 'my %p = @_';
      push @fccode, 'my $str';
      for my $ospec (map { @{ $spec->{$_} } } @otypes) {
          if (defined $ospec->{filter_text}) {
              push @fccode, '$str = '._lit($ospec->{filter_text});
              push @fccode, 'return 0 if $p{name} eq '._lit($ospec->{name}).
                  ' && index($_, $str) == -1';
          }
          if (defined $ospec->{filter_no_text}) {
              push @fccode, '$str = '._lit($ospec->{filter_no_text});
              push @fccode, 'return 0 if $p{name} eq '._lit($ospec->{name}).
                  ' && index($_, $str) > -1';
          }
          if (defined $ospec->{filter_citext}) {
              push @fccode, '$str = '._lit($ospec->{filter_citext});
              push @fccode, 'return 0 if $p{name} eq '._lit($ospec->{name}).
                  ' && !/\Q$str/io';
          }
          if (defined $ospec->{filter_no_citext}) {
              push @fccode, '$str = '._lit($ospec->{filter_no_citext});
              push @fccode, 'return 0 if $p{name} eq '._lit($ospec->{name}).
                  ' && /\Q$str/io';
          }
          if (defined $ospec->{filter_re}) {
              push @fccode, '$str = '._lit($ospec->{filter_re});
              push @fccode, 'return 0 if $p{name} eq '._lit($ospec->{name}).
                  ' && $_ !~ ' . (ref($ospec->{filter_re}) eq 'Regexp' ? '$str' : 'qr/$str/o');
          }
          if (defined $ospec->{filter_no_re}) {
              push @fccode, '$str = '._lit($ospec->{filter_no_re});
              push @fccode, 'return 0 if $p{name} eq '._lit($ospec->{name}).
                  ' && $_ =~ ' . (ref($ospec->{filter_re}) eq 'Regexp' ? '$str' : 'qr/$str/o');
          }
      }
      push @fccode, "1";
      my $fccode = join "; ", @fccode;
  
      my $filters_str = join(
          "",
          "log4perl.filter.FilterCustom = sub { $fccode }\n",
          "\n",
          "log4perl.filter.FilterOFF0 = Log::Log4perl::Filter::LevelRange\n",
          "log4perl.filter.FilterOFF0.LevelMin = TRACE\n",
          "log4perl.filter.FilterOFF0.LevelMax = FATAL\n",
          "log4perl.filter.FilterOFF0.AcceptOnMatch = false\n",
          "\n",
          "log4perl.filter.FilterOFF = Log::Log4perl::Filter::Boolean\n",
          "log4perl.filter.FilterOFF.logic = FilterOFF0 && FilterCustom\n",
          map {join(
              "",
              "log4perl.filter.Filter${_}0 = Log::Log4perl::Filter::LevelRange\n",
              "log4perl.filter.Filter${_}0.LevelMin = $_\n",
              "log4perl.filter.Filter${_}0.LevelMax = FATAL\n",
              "log4perl.filter.Filter${_}0.AcceptOnMatch = true\n",
              "\n",
              "log4perl.filter.Filter$_ = Log::Log4perl::Filter::Boolean\n",
              "log4perl.filter.Filter$_.logic = Filter${_}0 && FilterCustom\n",
              "\n",
          )} qw(FATAL ERROR WARN INFO DEBUG), # TRACE
      );
  
      my %levels; # key = output name; value = { cat => level, ... }
      my %cats;   # list of categories
      my %ospecs; # key = oname; this is just a shortcut to get ospec
  
      # 1. list all levels for each category and output
      for my $ospec (map { @{ $spec->{$_} } } @otypes) {
          my $oname = $ospec->{name};
          $ospecs{$oname} = $ospec;
          $levels{$oname} = {};
          my %seen_cats;
          if ($ospec->{category_level}) {
              while (my ($cat0, $level) = each %{ $ospec->{category_level} }) {
                  my @cat = _extract_category($ospec, $cat0);
                  for my $cat (@cat) {
                      next if $seen_cats{$cat}++;
                      $cats{$cat}++;
                      $levels{$oname}{$cat} = $level;
                  }
              }
          }
          if ($spec->{category_level}) {
              while (my ($cat0, $level) = each %{ $spec->{category_level} }) {
                  my @cat = _extract_category($ospec, $cat0);
                  for my $cat (@cat) {
                      next if $seen_cats{$cat}++;
                      $cats{$cat}++;
                      $levels{$oname}{$cat} = $level;
                  }
              }
          }
          my @cat = _extract_category($ospec);
          for my $cat (@cat) {
              next if $seen_cats{$cat}++;
              $cats{$cat}++;
              $levels{$oname}{$cat} = $ospec->{level};
          }
      }
      #print Dumper \%levels; exit;
  
      my $find_olevel = sub {
          my ($oname, $cat) = @_;
          my $olevel = $levels{$oname}{''};
          my @c = split /\./, $cat;
          for (my $i=0; $i<@c; $i++) {
              my $c = join(".", @c[0..$i]);
              if ($levels{$oname}{$c}) {
                  $olevel = $levels{$oname}{$c};
              }
          }
          $olevel;
      };
  
      # 2. determine level for each category (which is the minimum level of all
      # appenders for that category)
      my %cat_configs; # key = cat, value = [catlevel, apdname, ...]
      my $add_str = '';
      my $apd_str = '';
      for my $cat0 (sort {$a cmp $b} keys %cats) {
          $add_str .= "log4perl.additivity.$cat0 = 0\n" unless $cat0 eq '';
          my @cats = ($cat0);
          # since we don't use additivity, we need to add supercategories ourselves
          while ($cat0 =~ s/\.[^.]+$//) { push @cats, $cat0 }
          for my $cat (@cats) {
              my $cat_level;
              for my $oname (keys %levels) {
                  my $olevel = $find_olevel->($oname, $cat);
                  next unless $olevel;
                  $cat_level = _ifdef($cat_level, $olevel);
                  $cat_level = _min_level($cat_level, $olevel);
              }
              $cat_configs{$cat} = [uc($cat_level)];
              #next if $cat_level eq 'off';
          }
      }
      #print Dumper \%cat_configs; exit;
  
      # 3. add appenders for each category
      my %generated_appenders; # key = apdname, just a memory hash
      for my $cat (keys %cat_configs) {
          my $cat_level = $cat_configs{$cat}[0];
          for my $oname (keys %levels) {
              my $ospec = $ospecs{$oname};
              my $olevel = $find_olevel->($oname, $cat);
              #print "D:oname=$oname, cat=$cat, olevel=$olevel, cat_level=$cat_level\n";
              my $apd_name;
              my $filter;
              if ($olevel ne $cat_level &&
                      _min_level($olevel, $cat_level) eq $cat_level) {
                  # we need to filter the appender, since the category level is
                  # lower than the output level
                  $apd_name = $oname . "_" . uc($olevel);
                  $filter = "Filter".uc($olevel);
              } else {
                  $apd_name = $oname;
                  $filter = "FilterCustom";
              }
              unless ($generated_appenders{$apd_name}++) {
                  $apd_str .= _gen_appender_config($ospec, $apd_name, $filter).
                      "\n";
              }
              push @{ $cat_configs{$cat} }, $apd_name;
          }
      }
      #print Dumper \%cat_configs; exit;
  
      # 4. write out log4perl category line
      my $cat_str = '';
      for my $cat (sort {$a cmp $b} keys %cat_configs) {
          my $l = $cat eq '' ? '' : ".$cat";
          $cat_str .= "log4perl.logger$l = ".join(", ", @{ $cat_configs{$cat} })."\n";
      }
  
      join(
          "",
          "# filters\n", $filters_str,
          "# categories\n", $cat_str, $add_str, "\n",
          "# appenders\n", $apd_str,
      );
  }
  
  sub _init_log4perl {
      require Log::Log4perl;
  
      my ($spec) = @_;
  
      # create intermediate directories for dir
      for (@{ $spec->{dir} }) {
          my $dir = _dirname($_->{path});
          make_path($dir) if length($dir) && !(-d $dir);
      }
  
      # create intermediate directories for file
      for (@{ $spec->{file} }) {
          my $dir = _dirname($_->{path});
          make_path($dir) if length($dir) && !(-d $dir);
      }
  
      my $config_str = _gen_l4p_config($spec);
      if ($spec->{dump}) {
          require Data::Dump;
          print "Log::Any::App configuration:\n",
              Data::Dump::dump($spec);
          print "Log4perl configuration: <<EOC\n", $config_str, "EOC\n";
      }
  
      Log::Log4perl->init(\$config_str);
      Log::Any::Adapter->set('Log4perl');
  }
  
  sub _basename {
      my $path = shift;
      my ($vol, $dir, $file) = File::Spec->splitpath($path);
      $file;
  }
  
  sub _dirname {
      my $path = shift;
      my ($vol, $dir, $file) = File::Spec->splitpath($path);
      $dir;
  }
  
  # we separate args and opts, because we need to export logger early
  # (BEGIN), but configure logger in INIT (to be able to detect
  # existence of other modules).
  
  sub _parse_args {
      my ($args, $caller) = @_;
      $args = _ifdef($args, []); # if we don't import(), we never get args
  
      my $i = 0;
      while ($i < @$args) {
          my $arg = $args->[$i];
          do { $i+=2; next } if $arg =~ /^-(\w+)$/;
          if ($arg eq '$log') {
              _export_logger($caller);
          } else {
              die "Unknown arg '$arg', valid arg is '\$log' or -OPTS";
          }
          $i++;
      }
  }
  
  sub _parse_opts {
      require File::HomeDir;
  
      my ($args, $caller) = @_;
      $args = _ifdef($args, []); # if we don't import(), we never get args
      _debug("parse_opts: args = [".join(", ", @$args)."]");
  
      my $i = 0;
      my %opts;
      while ($i < @$args) {
          my $arg = $args->[$i];
          do { $i++; next } unless $arg =~ /^-(\w+)$/;
          my $opt = $1;
          die "Missing argument for option $opt" unless $i++ < @$args-1;
          $arg = $args->[$i];
          $opts{$opt} = $arg;
          $i++;
      }
  
      my $spec = {};
  
      $spec->{log} = _ifdef($ENV{LOG}, 1);
      if (defined $opts{log}) {
          $spec->{log} = $opts{log};
          delete $opts{log};
      }
      # exit as early as possible if we are not doing any logging
      goto END_PARSE_OPTS unless $spec->{log};
  
      $spec->{name} = _basename($0);
      if (defined $opts{name}) {
          $spec->{name} = $opts{name};
          delete $opts{name};
      }
  
      $spec->{level_flag_paths} = [File::HomeDir->my_home, "/etc"];
      if (defined $opts{level_flag_paths}) {
          $spec->{level_flag_paths} = $opts{level_flag_paths};
          delete $opts{level_flag_paths};
      }
  
      $spec->{level} = _set_level("", "", $spec);
      if (!$spec->{level} && defined($opts{level})) {
          $spec->{level} = _check_level($opts{level}, "-level");
          _debug("Set general level to $spec->{level} (from -level)");
      } elsif (!$spec->{level}) {
          $spec->{level} = "warn";
          _debug("Set general level to $spec->{level} (default)");
      }
      delete $opts{level};
  
      $spec->{category_alias} = _ifdefj($ENV{LOG_CATEGORY_ALIAS}, {});
      if (defined $opts{category_alias}) {
          die "category_alias must be a hashref"
              unless ref($opts{category_alias}) eq 'HASH';
          $spec->{category_alias} = $opts{category_alias};
          delete $opts{category_alias};
      }
  
      if (defined $opts{category_level}) {
          die "category_level must be a hashref"
              unless ref($opts{category_level}) eq 'HASH';
          $spec->{category_level} = {};
          for (keys %{ $opts{category_level} }) {
              $spec->{category_level}{$_} =
                  _check_level($opts{category_level}{$_}, "-category_level{$_}");
          }
          delete $opts{category_level};
      }
  
      $spec->{init} = 1;
      if (defined $opts{init}) {
          $spec->{init} = $opts{init};
          delete $opts{init};
      }
  
      $spec->{daemon} = 0;
      if (defined $opts{daemon}) {
          $spec->{daemon} = $opts{daemon};
          _debug("setting is_daemon=$opts{daemon} (from daemon option)");
          $is_daemon = $opts{daemon};
          delete $opts{daemon};
      }
  
      $spec->{dump} = $ENV{LOGANYAPP_DEBUG};
      if (defined $opts{dump}) {
          $spec->{dump} = 1;
          delete $opts{dump};
      }
  
      $spec->{filter_text} = $ENV{LOG_FILTER_TEXT};
      if (defined $opts{filter_text}) {
          $spec->{filter_text} = $opts{filter_text};
          delete $opts{filter_text};
      }
      $spec->{filter_no_text} = $ENV{LOG_FILTER_NO_TEXT};
      if (defined $opts{filter_no_text}) {
          $spec->{filter_no_text} = $opts{filter_no_text};
          delete $opts{filter_no_text};
      }
      $spec->{filter_citext} = $ENV{LOG_FILTER_CITEXT};
      if (defined $opts{filter_citext}) {
          $spec->{filter_citext} = $opts{filter_citext};
          delete $opts{filter_citext};
      }
      $spec->{filter_no_citext} = $ENV{LOG_FILTER_NO_CITEXT};
      if (defined $opts{filter_no_citext}) {
          $spec->{filter_no_citext} = $opts{filter_no_citext};
          delete $opts{filter_no_citext};
      }
      $spec->{filter_re} = $ENV{LOG_FILTER_RE};
      if (defined $opts{filter_re}) {
          $spec->{filter_re} = $opts{filter_re};
          delete $opts{filter_re};
      }
      $spec->{filter_no_re} = $ENV{LOG_FILTER_NO_RE};
      if (defined $opts{filter_no_re}) {
          $spec->{filter_no_re} = $opts{filter_no_re};
          delete $opts{filter_no_re};
      }
  
      $spec->{file} = [];
      _parse_opt_file($spec, _ifdef($opts{file}, ($0 ne '-e' ? 1:0)));
      delete $opts{file};
  
      $spec->{dir} = [];
      _parse_opt_dir($spec, _ifdef($opts{dir}, 0));
      delete $opts{dir};
  
      $spec->{screen} = [];
      _parse_opt_screen($spec, _ifdef($opts{screen}, !_is_daemon()));
      delete $opts{screen};
  
      $spec->{syslog} = [];
      _parse_opt_syslog($spec, _ifdef($opts{syslog}, _is_daemon()));
      delete $opts{syslog};
  
      $spec->{unixsock} = [];
      _parse_opt_unixsock($spec, _ifdef($opts{unixsock}, 0));
      delete $opts{unixsock};
  
      $spec->{array} = [];
      _parse_opt_array($spec, _ifdef($opts{array}, 0));
      delete $opts{array};
  
      if (keys %opts) {
          die "Unknown option(s) ".join(", ", keys %opts)." Known opts are: ".
              "log, name, level, category_level, category_alias, dump, init, ".
                  "filter_{,no_}{text,citext,re}, file, dir, screen, syslog, ".
                      "unixsock, array";
      }
  
    END_PARSE_OPTS:
      #use Data::Dump; dd $spec;
      $spec;
  }
  
  sub _is_daemon {
      if (defined $is_daemon) { return $is_daemon }
      if (defined $main::IS_DAEMON) {
          $is_daemon = $main::IS_DAEMON;
          _debug("Setting is_daemon=$main::IS_DAEMON (from \$main::IS_DAEMON)");
          return $main::IS_DAEMON;
      }
  
      for (
          "App/Daemon.pm",
          "Daemon/Easy.pm",
          "Daemon/Daemonize.pm",
          "Daemon/Generic.pm",
          "Daemonise.pm",
          "Daemon/Simple.pm",
          "HTTP/Daemon.pm",
          "IO/Socket/INET/Daemon.pm",
          #"Mojo/Server/Daemon.pm", # simply loading Mojo::UserAgent will load this too
          "MooseX/Daemonize.pm",
          "Net/Daemon.pm",
          "Net/Server.pm",
          "Proc/Daemon.pm",
          "Proc/PID/File.pm",
          "Win32/Daemon/Simple.pm") {
          if ($INC{$_}) {
              _debug("setting is_daemon=1 (from existence of module $_)");
              $is_daemon = 1;
              return 1;
          }
      }
      _debug("setting is_daemon=0 (no indication that we are a daemon)");
      $is_daemon = 0;
      0;
  }
  
  sub _parse_opt_OUTPUT {
      my (%args) = @_;
      my $kind = $args{kind};
      my $default_sub = $args{default_sub};
      my $postprocess = $args{postprocess};
      my $spec = $args{spec};
      my $arg = $args{arg};
  
      return unless $arg;
  
      if (!ref($arg) || ref($arg) eq 'HASH') {
          my $name = uc($kind).(@{ $spec->{$kind} }+0);
          local $dbg_ctx = $name;
          push @{ $spec->{$kind} }, $default_sub->($spec);
          $spec->{$kind}[-1]{name} = $name;
          if (!ref($arg)) {
              # leave every output parameter as is
          } else {
              for my $k (keys %$arg) {
                  for ($spec->{$kind}[-1]) {
                      exists($_->{$k}) or die "Invalid $kind argument: $k, please".
                          " only specify one of: " . join(", ", sort keys %$_);
                      $_->{$k} = $k eq 'level' ?
                          _check_level($arg->{$k}, "-$kind") : $arg->{$k};
                      _debug("Set level of $kind to $_->{$k} (spec)")
                          if $k eq 'level';
                  }
              }
          }
          $spec->{$kind}[-1]{main_spec} = $spec;
          _set_pattern($spec->{$kind}[-1], $kind);
          $postprocess->(spec => $spec, ospec => $spec->{$kind}[-1])
              if $postprocess;
      } elsif (ref($arg) eq 'ARRAY') {
          for (@$arg) {
              _parse_opt_OUTPUT(%args, arg => $_);
          }
      } else {
          die "Invalid argument for -$kind, ".
              "must be a boolean or hashref or arrayref";
      }
  }
  
  sub _set_pattern_style {
      my ($x) = @_;
      ($ENV{LOG_SHOW_LOCATION} ? 'loc_':
           $ENV{LOG_SHOW_CATEGORY} ? 'cat_':'') . $x;
  }
  
  sub _default_file {
      require File::HomeDir;
  
      my ($spec) = @_;
      my $level = _set_level("file", "file", $spec);
      if (!$level) {
          $level = $spec->{level};
          _debug("Set level of file to $level (general level)");
      }
      return {
          level => $level,
          category_level => _ifdefj($ENV{FILE_LOG_CATEGORY_LEVEL},
                                    $ENV{LOG_CATEGORY_LEVEL},
                                    $spec->{category_level}),
          path => $> ? File::Spec->catfile(File::HomeDir->my_home, "$spec->{name}.log") :
              "/var/log/$spec->{name}.log", # XXX and on Windows?
          max_size => undef,
          histories => undef,
          period => undef,
          buffer_size => undef,
          category => '',
          pattern_style => _set_pattern_style('daemon'),
          pattern => undef,
  
          filter_text      => _ifdef($ENV{FILE_LOG_FILTER_TEXT}, $spec->{filter_text}),
          filter_no_text   => _ifdef($ENV{FILE_LOG_FILTER_NO_TEXT}, $spec->{filter_no_text}),
          filter_citext    => _ifdef($ENV{FILE_LOG_FILTER_CITEXT}, $spec->{filter_citext}),
          filter_no_citext => _ifdef($ENV{FILE_LOG_FILTER_NO_CITEXT}, $spec->{filter_no_citext}),
          filter_re        => _ifdef($ENV{FILE_LOG_FILTER_RE}, $spec->{filter_re}),
          filter_no_re     => _ifdef($ENV{FILE_LOG_FILTER_NO_RE}, $spec->{filter_no_re}),
      };
  }
  
  sub _parse_opt_file {
      my ($spec, $arg) = @_;
  
      if (!ref($arg) && $arg && $arg !~ /^(1|yes|true)$/i) {
          $arg = {path => $arg};
      }
  
      _parse_opt_OUTPUT(
          kind => 'file', default_sub => \&_default_file,
          spec => $spec, arg => $arg,
          postprocess => sub {
              my (%args) = @_;
              my $spec  = $args{spec};
              my $ospec = $args{ospec};
              if ($ospec->{path} =~ m!/$!) {
                  my $p = $ospec->{path};
                  $p .= "$spec->{name}.log";
                  _debug("File path ends with /, assumed to be dir, ".
                             "final path becomes $p");
                  $ospec->{path} = $p;
              }
          },
      );
  }
  
  sub _default_dir {
      require File::HomeDir;
  
      my ($spec) = @_;
      my $level = _set_level("dir", "dir", $spec);
      if (!$level) {
          $level = $spec->{level};
          _debug("Set level of dir to $level (general level)");
      }
      return {
          level => $level,
          category_level => _ifdefj($ENV{DIR_LOG_CATEGORY_LEVEL},
                                     $ENV{LOG_CATEGORY_LEVEL},
                                     $spec->{category_level}),
          path => $> ? File::Spec->catfile(File::HomeDir->my_home, "log", $spec->{name}) :
              "/var/log/$spec->{name}", # XXX and on Windows?
          max_size => undef,
          max_age => undef,
          histories => undef,
          category => '',
          pattern_style => _set_pattern_style('plain'),
          pattern => undef,
          filename_pattern => undef,
  
          filter_text      => _ifdef($ENV{DIR_LOG_FILTER_TEXT}, $spec->{filter_text}),
          filter_no_text   => _ifdef($ENV{DIR_LOG_FILTER_NO_TEXT}, $spec->{filter_no_text}),
          filter_citext    => _ifdef($ENV{DIR_LOG_FILTER_CITEXT}, $spec->{filter_citext}),
          filter_no_citext => _ifdef($ENV{DIR_LOG_FILTER_NO_CITEXT}, $spec->{filter_no_citext}),
          filter_re        => _ifdef($ENV{DIR_LOG_FILTER_RE}, $spec->{filter_re}),
          filter_no_re     => _ifdef($ENV{DIR_LOG_FILTER_NO_RE}, $spec->{filter_no_re}),
      };
  }
  
  sub _parse_opt_dir {
      my ($spec, $arg) = @_;
  
      if (!ref($arg) && $arg && $arg !~ /^(1|yes|true)$/i) {
          $arg = {path => $arg};
      }
  
      _parse_opt_OUTPUT(
          kind => 'dir', default_sub => \&_default_dir,
          spec => $spec, arg => $arg,
      );
  }
  
  sub _default_screen {
      my ($spec) = @_;
      my $level = _set_level("screen", "screen", $spec);
      if (!$level) {
          $level = $spec->{level};
          _debug("Set level of screen to $level (general level)");
      }
      return {
          color => _ifdef($ENV{COLOR}, (-t STDOUT)),
          stderr => 1,
          level => $level,
          category_level => _ifdefj($ENV{SCREEN_LOG_CATEGORY_LEVEL},
                                     $ENV{LOG_CATEGORY_LEVEL},
                                     $spec->{category_level}),
          category => '',
          pattern_style => _set_pattern_style(
              $ENV{LOG_ELAPSED_TIME_IN_SCREEN} ? 'script_short' : 'plain_nl'),
          pattern => undef,
  
          filter_text      => _ifdef($ENV{SCREEN_LOG_FILTER_TEXT}, $spec->{filter_text}),
          filter_no_text   => _ifdef($ENV{SCREEN_FILTER_NO_TEXT}, $spec->{filter_no_text}),
          filter_citext    => _ifdef($ENV{SCREEN_FILTER_CITEXT}, $spec->{filter_citext}),
          filter_no_citext => _ifdef($ENV{SCREEN_FILTER_NO_CITEXT}, $spec->{filter_no_citext}),
          filter_re        => _ifdef($ENV{SCREEN_FILTER_RE}, $spec->{filter_re}),
          filter_no_re     => _ifdef($ENV{SCREEN_FILTER_NO_RE}, $spec->{filter_no_re}),
      };
  }
  
  sub _parse_opt_screen {
      my ($spec, $arg) = @_;
      _parse_opt_OUTPUT(
          kind => 'screen', default_sub => \&_default_screen,
          spec => $spec, arg => $arg,
      );
  }
  
  sub _default_syslog {
      my ($spec) = @_;
      my $level = _set_level("syslog", "syslog", $spec);
      if (!$level) {
          $level = $spec->{level};
          _debug("Set level of syslog to $level (general level)");
      }
      return {
          level => $level,
          category_level => _ifdefj($ENV{SYSLOG_LOG_CATEGORY_LEVEL},
                                     $ENV{LOG_CATEGORY_LEVEL},
                                     $spec->{category_level}),
          ident => $spec->{name},
          facility => 'daemon',
          pattern_style => _set_pattern_style('syslog'),
          pattern => undef,
          category => '',
  
          filter_text      => _ifdef($ENV{SYSLOG_LOG_FILTER_TEXT}, $spec->{filter_text}),
          filter_no_text   => _ifdef($ENV{SYSLOG_FILTER_NO_TEXT}, $spec->{filter_no_text}),
          filter_citext    => _ifdef($ENV{SYSLOG_FILTER_CITEXT}, $spec->{filter_citext}),
          filter_no_citext => _ifdef($ENV{SYSLOG_FILTER_NO_CITEXT}, $spec->{filter_no_citext}),
          filter_re        => _ifdef($ENV{SYSLOG_FILTER_RE}, $spec->{filter_re}),
          filter_no_re     => _ifdef($ENV{SYSLOG_FILTER_NO_RE}, $spec->{filter_no_re}),
      };
  }
  
  sub _parse_opt_syslog {
      my ($spec, $arg) = @_;
      _parse_opt_OUTPUT(
          kind => 'syslog', default_sub => \&_default_syslog,
          spec => $spec, arg => $arg,
      );
  }
  
  sub _default_unixsock {
      require File::HomeDir;
  
      my ($spec) = @_;
      my $level = _set_level("unixsock", "unixsock", $spec);
      if (!$level) {
          $level = $spec->{level};
          _debug("Set level of unixsock to $level (general level)");
      }
      return {
          level => $level,
          category_level => _ifdefj($ENV{UNIXSOCK_LOG_CATEGORY_LEVEL},
                                    $ENV{LOG_CATEGORY_LEVEL},
                                    $spec->{category_level}),
          path => $> ? File::Spec->catfile(File::HomeDir->my_home, "$spec->{name}-log.sock") :
              "/var/run/$spec->{name}-log.sock", # XXX and on Windows?
          category => '',
          pattern_style => _set_pattern_style('daemon'),
          pattern => undef,
  
          filter_text      => _ifdef($ENV{UNIXSOCK_LOG_FILTER_TEXT}, $spec->{filter_text}),
          filter_no_text   => _ifdef($ENV{UNIXSOCK_LOG_FILTER_NO_TEXT}, $spec->{filter_no_text}),
          filter_citext    => _ifdef($ENV{UNIXSOCK_LOG_FILTER_CITEXT}, $spec->{filter_citext}),
          filter_no_citext => _ifdef($ENV{UNIXSOCK_LOG_FILTER_NO_CITEXT}, $spec->{filter_no_citext}),
          filter_re        => _ifdef($ENV{UNIXSOCK_LOG_FILTER_RE}, $spec->{filter_re}),
          filter_no_re     => _ifdef($ENV{UNIXSOCK_LOG_FILTER_NO_RE}, $spec->{filter_no_re}),
      };
  }
  
  sub _parse_opt_unixsock {
      my ($spec, $arg) = @_;
  
      if (!ref($arg) && $arg && $arg !~ /^(1|yes|true)$/i) {
          $arg = {path => $arg};
      }
  
      _parse_opt_OUTPUT(
          kind => 'unixsock', default_sub => \&_default_unixsock,
          spec => $spec, arg => $arg,
          postprocess => sub {
              my (%args) = @_;
              my $spec  = $args{spec};
              my $ospec = $args{ospec};
              if ($ospec->{path} =~ m!/$!) {
                  my $p = $ospec->{path};
                  $p .= "$spec->{name}-log.sock";
                  _debug("Unix socket path ends with /, assumed to be dir, ".
                             "final path becomes $p");
                  $ospec->{path} = $p;
              }
  
              # currently Log::Log4perl::Appender::Socket::UNIX *connects to an
              # existing and listening* Unix socket and prints log to it. we are
              # *not* creating a listening unix socket where clients can connect
              # and see logs. to do that, we'll need a separate thread/process
              # that listens to unix socket and stores (some) log entries and
              # display it to users when they connect and request them.
              #
              #if ($ospec->{create} && !(-e $ospec->{path})) {
              #    _debug("Creating Unix socket $ospec->{path} ...");
              #    require IO::Socket::UNIX::Util;
              #    IO::Socket::UNIX::Util::create_unix_socket(
              #        $ospec->{path});
              #}
          },
      );
  }
  
  sub _default_array {
      my ($spec) = @_;
      my $level = _set_level("array", "array", $spec);
      if (!$level) {
          $level = $spec->{level};
          _debug("Set level of array to $level (general level)");
      }
      return {
          level => $level,
          category_level => _ifdefj($ENV{ARRAY_LOG_CATEGORY_LEVEL},
                                    $ENV{LOG_CATEGORY_LEVEL},
                                    $spec->{category_level}),
          array => [],
          max_elems => undef,
          category => '',
          pattern_style => _set_pattern_style('script_long'),
          pattern => undef,
  
          filter_text      => _ifdef($ENV{ARRAY_LOG_FILTER_TEXT}, $spec->{filter_text}),
          filter_no_text   => _ifdef($ENV{ARRAY_LOG_FILTER_NO_TEXT}, $spec->{filter_no_text}),
          filter_citext    => _ifdef($ENV{ARRAY_LOG_FILTER_CITEXT}, $spec->{filter_citext}),
          filter_no_citext => _ifdef($ENV{ARRAY_LOG_FILTER_NO_CITEXT}, $spec->{filter_no_citext}),
          filter_re        => _ifdef($ENV{ARRAY_LOG_FILTER_RE}, $spec->{filter_re}),
          filter_no_re     => _ifdef($ENV{ARRAY_LOG_FILTER_NO_RE}, $spec->{filter_no_re}),
      };
  }
  
  sub _parse_opt_array {
      my ($spec, $arg) = @_;
  
      _parse_opt_OUTPUT(
          kind => 'array', default_sub => \&_default_array,
          spec => $spec, arg => $arg,
      );
  }
  
  sub _set_pattern {
      my ($s, $name) = @_;
      _debug("Setting $name pattern ...");
      unless (defined($s->{pattern})) {
          die "BUG: neither pattern nor pattern_style is defined ($name)"
              unless defined($s->{pattern_style});
          die "Unknown pattern style for $name `$s->{pattern_style}`, ".
              "use one of: ".join(", ", keys %PATTERN_STYLES)
              unless defined($PATTERN_STYLES{ $s->{pattern_style} });
          $s->{pattern} = $PATTERN_STYLES{ $s->{pattern_style} };
          _debug("Set $name pattern to `$s->{pattern}` ".
                     "(from style `$s->{pattern_style}`)");
      }
  }
  
  sub _extract_category {
      my ($ospec, $c) = @_;
      my $c0 = _ifdef($c, $ospec->{category});
      my @res;
      if (ref($c0) eq 'ARRAY') { @res = @$c0 } else { @res = ($c0) }
      # replace alias with real value
      for (my $i=0; $i<@res; $i++) {
          my $c1 = $res[$i];
          my $a = $ospec->{main_spec}{category_alias}{$c1};
          next unless defined($a);
          if (ref($a) eq 'ARRAY') {
              splice @res, $i, 1, @$a;
              $i += (@$a-1);
          } else {
              $res[$i] = $a;
          }
      }
      for (@res) {
          s/::/./g;
          # $_ = lc; # XXX do we need this?
      }
      @res;
  }
  
  sub _cat2apd {
      my $cat = shift;
      $cat =~ s/[^A-Za-z0-9_]+/_/g;
      $cat;
  }
  
  sub _check_level {
      my ($level, $from) = @_;
      $level =~ /^(off|fatal|error|warn|info|debug|trace)$/i
          or die "Unknown level (from $from): $level";
      lc($1);
  }
  
  sub _set_level {
      my ($prefix, $which, $spec) = @_;
      #use Data::Dump; dd $spec;
      my $p_ = $prefix ? "${prefix}_" : "";
      my $P_ = $prefix ? uc("${prefix}_") : "";
      my $F_ = $prefix ? ucfirst("${prefix}_") : "";
      my $pd = $prefix ? "${prefix}-" : "";
      my $pr = $prefix ? qr/$prefix(_|-)/ : qr//;
      my ($level, $from);
  
      my @label2level =([trace=>"trace"], [debug=>"debug"],
                        [verbose=>"info"], [quiet=>"error"]);
  
      _debug("Setting ", ($which ? "level of $which" : "general level"), " ...");
    SET:
      {
          if ($INC{"App/Options.pm"}) {
              my $key;
              for (qw/log_level loglevel/) {
                  $key = $p_ . $_;
                  _debug("Checking \$App::options{$key}: ", _ifdef($App::options{$key}, "(undef)"));
                  if ($App::options{$key}) {
                      $level = _check_level($App::options{$key}, "\$App::options{$key}");
                      $from = "\$App::options{$key}";
                      last SET;
                  }
              }
              for (@label2level) {
                  $key = $p_ . $_->[0];
                  _debug("Checking \$App::options{$key}: ", _ifdef($App::options{$key}, "(undef)"));
                  if ($App::options{$key}) {
                      $level = $_->[1];
                      $from = "\$App::options{$key}";
                      last SET;
                  }
              }
          }
  
          my $i = 0;
          _debug("Checking \@ARGV ...");
          while ($i < @ARGV) {
              my $arg = $ARGV[$i];
              $from = "cmdline arg $arg";
              if ($arg =~ /^--${pr}log[_-]?level=(.+)/) {
                  _debug("\$ARGV[$i] looks like an option to specify level: $arg");
                  $level = _check_level($1, "ARGV $arg");
                  last SET;
              }
              if ($arg =~ /^--${pr}log[_-]?level$/ and $i < @ARGV-1) {
                  _debug("\$ARGV[$i] and \$ARGV[${\($i+1)}] looks like an option to specify level: $arg ", $ARGV[$i+1]);
                  $level = _check_level($ARGV[$i+1], "ARGV $arg ".$ARGV[$i+1]);
                  last SET;
              }
              for (@label2level) {
                  if ($arg =~ /^--${pr}$_->[0](=(1|yes|true))?$/i) {
                      _debug("\$ARGV[$i] looks like an option to specify level: $arg");
                      $level = $_->[1];
                      last SET;
                  }
              }
              $i++;
          }
  
          for (qw/LOG_LEVEL LOGLEVEL/) {
              my $key = $P_ . $_;
              _debug("Checking environment variable $key: ", _ifdef($ENV{$key}, "(undef)"));
              if ($ENV{$key}) {
                  $level = _check_level($ENV{$key}, "ENV $key");
                  $from = "\$ENV{$key}";
                  last SET;
              }
          }
          for (@label2level) {
              my $key = $P_ . uc($_->[0]);
              _debug("Checking environment variable $key: ", _ifdef($ENV{$key}, "(undef)"));
              if ($ENV{$key}) {
                  $level = $_->[1];
                  $from = "\$ENV{$key}";
                  last SET;
              }
          }
  
          for my $dir (@{$spec->{level_flag_paths}}) {
              for (@label2level) {
                  my $filename = "$dir/$spec->{name}." . $P_ . "log_level";
                  my $exists = -f $filename;
                  my $content;
                  if ($exists) {
                      open my($f), $filename;
                      $content = <$f>;
                      chomp($content) if defined($content);
                      close $f;
                  }
                  _debug("Checking level flag file content $filename: ",
                         (defined($content) ? $content : "(undef)"));
                  if (defined $content) {
                      $level = _check_level($content,
                                            "level flag file $filename");
                      $from = $filename;
                      last SET;
                  }
  
                  $filename = "$dir/$spec->{name}." . $P_ . uc($_->[0]);
                  $exists = -e $filename;
                  _debug("Checking level flag file $filename: ",
                         ($exists ? "EXISTS" : 0));
                  if ($exists) {
                      $level = $_->[1];
                      $from = $filename;
                      last SET;
                  }
              }
          }
  
          no strict 'refs';
          for ("${F_}Log_Level", "${P_}LOG_LEVEL", "${p_}log_level",
               "${F_}LogLevel",  "${P_}LOGLEVEL",  "${p_}loglevel") {
              my $varname = "main::$_";
              _debug("Checking variable \$$varname: ", _ifdef($$varname, "(undef)"));
              if ($$varname) {
                  $from = "\$$varname";
                  $level = _check_level($$varname, "\$$varname");
                  last SET;
              }
          }
          for (@label2level) {
              for my $varname (
                  "main::$F_" . ucfirst($_->[0]),
                  "main::$P_" . uc($_->[0])) {
                  _debug("Checking variable \$$varname: ", _ifdef($$varname, "(undef)"));
                  if ($$varname) {
                      $from = "\$$varname";
                      $level = $_->[1];
                      last SET;
                  }
              }
          }
      }
  
      _debug("Set ", ($which ? "level of $which" : "general level"), " to $level (from $from)") if $level;
      return $level;
  }
  
  # return the lower level (e.g. _min_level("debug", "INFO") -> INFO
  sub _min_level {
      my ($l1, $l2) = @_;
      my %vals = (OFF=>99,
                  FATAL=>6, ERROR=>5, WARN=>4, INFO=>3, DEBUG=>2, TRACE=>1);
      $vals{uc($l1)} > $vals{uc($l2)} ? $l2 : $l1;
  }
  
  sub _export_logger {
      my ($caller) = @_;
      my $log_for_caller = Log::Any->get_logger(category => $caller);
      my $varname = "$caller\::log";
      no strict 'refs';
      *$varname = \$log_for_caller;
  }
  
  sub _debug {
      return unless $ENV{LOGANYAPP_DEBUG};
      print $dbg_ctx, ": " if $dbg_ctx;
      print @_, "\n";
  }
  
  sub import {
      my ($self, @args) = @_;
      my $caller = caller();
      _parse_args(\@args, $caller);
      $init_args = \@args;
  }
  
  {
      no warnings;
      # if we are loaded at run-time, it's too late to run INIT blocks, so user
      # must call init() manually. but sometimes this is what the user wants. so
      # shut up perl warning.
      INIT {
          my $caller = caller();
          init($init_args, $caller);
      }
  }
  
  1;
  # ABSTRACT: An easy way to use Log::Any in applications
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Any::App - An easy way to use Log::Any in applications
  
  =head1 VERSION
  
  This document describes version 0.53 of Log::Any::App (from Perl distribution Log-Any-App), released on 2016-03-16.
  
  =head1 SYNOPSIS
  
  Most of the time you only need to do this:
  
   # in your script.pl
   use Log::Any::App '$log';
   $log->warn("blah ...");
   if ($log->is_debug) { ... }
  
   # or, in command line
   % perl -MLog::Any::App -MModuleThatUsesLogAny -e'...'
  
  Here's the default logging that Log::Any::App sets up for you:
  
   Condition                        screen  file               syslog        dir
   --------------------------------+-------+------------------+-------------+---
   -e (one-liners)                  y       -                  -             -
   Scripts running as normal user   y       ~/NAME.log         -             -
   Scripts running as root          y       /var/log/NAME.log  -             -
   Daemons                          -       y                  y             -
  
  You can customize level from outside the script, using environment variables or
  command-line options (won't interfere with command-line processing modules like
  Getopt::Long etc):
  
   % DEBUG=1 script.pl
   % LOG_LEVEL=trace script.pl
   % script.pl --verbose
  
  And to customize other stuffs:
  
   use Log::Any::App '$log',
       -syslog => 1, # turn on syslog logging explicitly
       -screen => 0, # turn off screen logging explicitly
       -file   => {path=>'/foo/bar', max_size=>'10M', histories=>10};
                  # customize file logging
  
  For more customization like categories, per-category level, per-output level,
  multiple outputs, string patterns, etc see L</USING AND EXAMPLES> and init().
  
  =head1 DESCRIPTION
  
  IMPORTANT: Please read L</"ROAD TO 1.0"> on some incompatibilities in the near
  future, before 1.0 is released.
  
  Log::Any::App is a convenient combo for L<Log::Any> and L<Log::Log4perl>
  (although alternative backends beside Log4perl might be considered in the
  future). To use Log::Any::App you need to be sold on the idea of Log::Any first,
  so please do a read up on that first.
  
  The goal of Log::Any::App is to provide developers an easy and concise way to
  add logging to their I<*applications*>. That is, instead of modules; modules
  remain using Log::Any to produce logs. Applications can upgrade to full Log4perl
  later when necessary, although in my experience, they usually don't.
  
  With Log::Any::App, you can replace this code in your application:
  
   use Log::Any '$log';
   use Log::Any::Adapter;
   use Log::Log4perl;
   my $log4perl_config = '
     some
     long
     multiline
     config...';
   Log::Log4perl->init(\$log4perl_config);
   Log::Any::Adapter->set('Log4perl');
  
  with just this:
  
   use Log::Any::App '$log'; # plus some other options when necessary
  
  Most of the time you don't need to configure anything as Log::Any::App will
  construct the most appropriate default Log4perl configuration for your
  application.
  
  =head1 USING AND EXAMPLES
  
  To use Log::Any::App, just do:
  
   use Log::Any::App '$log';
  
  or from the command line:
  
   % perl -MLog::Any::App -MModuleThatUsesLogAny -e ...
  
  This will send logs to screen as well as file (unless -e scripts, which only log
  to screen). Default log file is ~/$SCRIPT_NAME.log, or /var/log/$SCRIPT_NAME.log
  if script is running as root. Default level is 'warn'.
  
  The 'use Log::Any::App' statement can be issued before or after the modules that
  use Log::Any, it doesn't matter. Logging will be initialized in the INIT phase
  by Log::Any::App.
  
  You are not required to import '$log', and don't need to if you do not produce
  logs in your application (only in the modules).
  
  =head2 Changing logging level
  
  Since one of the most commonly tweaked logging setting is level (for example:
  increasing level when debugging problems), Log::Any::App provides several
  mechanisms to change log level, either from the script or from outside the
  script, for your convenience. Below are the mechanisms, ordered from highest
  priority:
  
  =over 4
  
  =item * import argument (inside the script)
  
  =item * command line arguments (outside the script)
  
  =item * environment variables (outside the script)
  
  =item * level flag files (outside the script)
  
  =item * variables in 'main' package (inside the script)
  
  =back
  
  These mechanisms are explained in more details in the documentation for the
  B<init()> function. But below are some examples.
  
  To change level from inside the script:
  
   use Log::Any::App '$log', -level => 'debug';
  
  This is useful if you want a fixed level that cannot be overridden by other
  mechanisms (since setting level using import argument has the highest priority).
  But oftentimes what you want is changing level without modifying the script
  itself. Thereby, just write:
  
   use Log::Any::App '$log';
  
  and then you can use environment variables to change level:
  
   TRACE=1 script.pl;         # setting level to trace
   DEBUG=1 script.pl;         # setting level to debug
   VERBOSE=1 script.pl;       # setting level to info
   QUIET=1 script.pl;         # setting level to error
   LOG_LEVEL=trace script.pl; # setting a specific log level
  
  or command-line options:
  
   script.pl --trace
   script.pl --debug
   script.pl --verbose
   script.pl --quiet
   script.pl --log_level=debug;   # '--log-level debug' will also do
  
  Regarding command-line options: Log::Any::App won't consume the command-line
  options from @ARGV and thus won't interfere with command-line processing modules
  like L<Getopt::Long> or L<App::Options>. If you use a command-line processing
  module and plan to use command-line options to set level, you might want to
  define these level options, or your command-line processing module will complain
  about unknown options.
  
  =head2 Changing default level
  
  The default log level is 'warn'. To change the default level, you can use 'main'
  package variables (since they have the lowest priority):
  
   use Log::Any::App '$log';
   BEGIN { our $Log_Level = 'info' } # be more verbose by default
  
  Then you will still be able to use level flag files or environment variables or
  command-line options to override this setting.
  
  =head2 Changing per-output level
  
  Logging level can also be specified on a per-output level. For example, if you
  want your script to be chatty on the screen but still logs to file at the
  default 'warn' level:
  
   SCREEN_VERBOSE=1 script.pl
   SCREEN_DEBUG=1 script.pl
   SCREEN_TRACE=1 script.pl
   SCREEN_LOG_LEVEL=info script.pl
  
   script.pl --screen_verbose
   script.pl --screen-debug
   script.pl --screen-trace=1
   script.pl --screen-log-level=info
  
  Similarly, to set only file level, use FILE_VERBOSE, FILE_LOG_LEVEL,
  --file-trace, and so on.
  
  =head2 Setting default per-output level
  
  As with setting default level, you can also set default level on a per-output
  basis:
  
   use Log::Any::App '$log';
   BEGIN {
       our $Screen_Log_Level = 'off';
       our $File_Quiet = 1; # setting file level to 'error'
       # and so on
   }
  
  If a per-output level is not specified, it will default to the general log level.
  
  =head2 Enabling/disabling output
  
  To disable a certain output, you can do this:
  
   use Log::Any::App '$log', -file => 0;
  
  or:
  
   use Log::Any::App '$log', -screen => {level=>'off'};
  
  and this won't allow the output to be re-enabled from outside the script. However
  if you do this:
  
   use Log::Any::App;
   BEGIN { our $Screen_Log_Level = 'off' }
  
  then by default screen logging is turned off but you will be able to override
  the screen log level using level flag files or environment variables or
  command-line options (SCREEN_DEBUG, --screen-verbose, and so on).
  
  =head2 Changing log level of cron scripts
  
  Environment variables and command-line options allow changing log level without
  modifying the script. But for scripts specified in crontab, they still require
  changing crontab entries, e.g.:
  
   # turn on debugging
   */5 * * * * DEBUG=1 foo
  
   # be silent
   */5 * * * * bar --quiet
  
  Another mechanism, level flag file, is useful in this case. By doing:
  
   $ echo debug > ~/foo.log_level
   # touch /etc/bar.QUIET
  
  you can also change log levels without modifying your crontab.
  
  =head2 Changing log file name/location
  
  By default Log::Any::App will log to file to ~/$NAME.log (or /var/log/$NAME.log
  if script is running as root), where $NAME is taken from the basename of $0. But
  this can be changed using:
  
   use Log::Any::App '$log', -name => 'myprog';
  
  Or, using custom path:
  
   use Log::Any::App '$log', -file => '/path/to/file';
  
  =head2 Changing other output parameters
  
  Each output argument can accept a hashref to specify various options. For
  example:
  
   use Log::Any::App '$log',
       -screen => {color=>0},   # never use color
       -file   => {path=>'/var/log/foo',
                   max_size=>'10M',
                   histories=>10,
                  },
  
  For all the available options of each output, see the init() function.
  
  =head2 Logging to syslog
  
  Logging to syslog is enabled by default if your script looks like or declare
  that it is a daemon, e.g.:
  
   use Net::Daemon; # this indicate your program is a daemon
   use Log::Any::App; # syslog logging will be turned on by default
  
   use Log::Any::App -daemon => 1; # script declares that it is a daemon
  
   # idem
   package main;
   our $IS_DAEMON = 1;
  
  But if you are certain you don't want syslog logging:
  
   use Log::Any::App -syslog => 0;
  
  =head2 Logging to directory
  
  This is done using L<Log::Dispatch::Dir> where each log message is logged to a
  different file in a specified directory. By default logging to dir is not turned
  on, to turn it on:
  
   use Log::Any::App '$log', -dir => 1;
  
  For all the available options of directory output, see the init() function.
  
  =head2 Multiple outputs
  
  Each output argument can accept an arrayref to specify more than one output. For
  example below is a code to log to three files:
  
   use Log::Any::App '$log',
       -file => [1, # default, to ~/$NAME.log or /var/log/$NAME.log
                 "/var/log/log1",
                 {path=>"/var/log/debug_foo", category=>'Foo', level=>'debug'}];
  
  =head2 Changing level of certain module(s)
  
  Suppose you want to shut up logs from modules Foo, Bar::Baz, and Qux (and their
  submodules as well, e.g. Foo::Alpha, Bar::Baz::Beta::Gamma) because they are too
  noisy:
  
   use Log::Any::App '$log',
       -category_level => { Foo => 'off', 'Bar::Baz' => 'off', Qux => 'off' };
  
  or (same thing):
  
   use Log::Any::App '$log',
       -category_alias => { -noisy => [qw/Foo Bar::Baz Qux/] },
       -category_level => { -noisy => 'off' };
  
  You can even specify this on a per-output basis. Suppose you only want to shut
  up the noisy modules on the screen, but not on the file:
  
   use Log::Any::App '$log',
      -category_alias => { -noisy => [qw/Foo Bar::Baz Qux/] },
      -screen => { category_level => { -noisy => 'off' } };
  
  Or perhaps, you want to shut up the noisy modules everywhere, except on the
  screen:
  
   use Log::Any::App '$log',
       -category_alias => { -noisy => [qw/Foo Bar::Baz Qux/] },
       -category_level => { -noisy => 'off' },
       -syslog => 1,                        # uses general -category_level
       -file   => "/var/log/foo",           # uses general -category_level
       -screen => { category_level => {} }; # overrides general -category_level
  
  You can also do this from the outside the script using environment variable,
  which is more flexible. Encode data structure using JSON:
  
   % LOG_SHOW_CATEGORY=1 \
     LOG_CATEGORY_ALIAS='{"-noisy":["Foo","Bar::Baz","Quz"]}' \
     LOG_CATEGORY_LEVEL='{"-noisy":"off"}' script.pl ...
  
  =head2 Only displaying log from certain module(s)
  
  Use a combination of LOG_LEVEL and LOG_CATEGORY_LEVEL. For example:
  
   % LOG_LEVEL=off LOG_CATEGORY_LEVEL='{"Foo.Bar":"trace", "Baz":"info"}' \
     script.pl ...
  
  =head2 Displaying category name
  
   % LOG_SHOW_CATEGORY=1 script.pl ...
  
  Now instead of:
  
   [25] Starting baz ritual ...
  
  now log messages will be prefixed with category:
  
   [cat Foo.Bar][25] Starting baz ritual ...
  
  =head2 Displaying location name
  
   % LOG_SHOW_LOCATION=1 script.pl ...
  
  Now log messages will be prefixed with location (function/file/line number)
  information:
  
   [loc Foo::Bar lib/Foo/Bar.pm (12)][25] Starting baz ritual ...
  
  =head2 Preventing logging level to be changed from outside the script
  
  Sometimes, for security/audit reasons, you don't want to allow script caller to
  change logging level. As explained previously, you can use the 'level' import
  argument (the highest priority of level-setting):
  
   use Log::Any::App '$log', -level => 'debug'; # always use debug level
  
  TODO: Allow something like 'debug+' to allow other mechanisms to *increase* the
  level but not decrease it. Or 'debug-' to allow other mechanisms to decrease
  level but not increase it. And finally 'debug,trace' to specify allowable levels
  (is this necessary?)
  
  =head2 Debugging
  
  To see the Log4perl configuration that is generated by Log::Any::App and how it
  came to be, set environment LOGANYAPP_DEBUG to true.
  
  =head1 PATTERN STYLES
  
  Log::Any::App provides some styles for Log4perl patterns. You can specify
  C<pattern_style> instead of directly specifying C<pattern>. example:
  
   use Log::Any::App -screen => {pattern_style=>"script_long"};
  
   Name           Description                        Example output
   ----           -----------                        --------------
   plain          The message, the whole message,    Message
                  and nothing but the message.
                  Used by dir logging.
  
                  Equivalent to pattern: '%m'
  
   plain_nl       Message plus newline. The default  Message
                  for screen without
                  LOG_ELAPSED_TIME_IN_SCREEN.
  
                  Equivalent to pattern: '%m%n'
  
   script_short   For scripts that run for a short   [234] Message
                  time (a few seconds). Shows just
                  the number of milliseconds. This
                  is the default for screen under
                  LOG_ELAPSED_TIME_IN_SCREEN.
  
                  Equivalent to pattern:
                  '[%r] %m%n'
  
   script_long    Scripts that will run for a        [2010-04-22 18:01:02] Message
                  while (more than a few seconds).
                  Shows date/time.
  
                  Equivalent to pattern:
                  '[%d] %m%n'
  
   daemon         For typical daemons. Shows PID     [pid 1234] [2010-04-22 18:01:02] Message
                  and date/time. This is the
                  default for file logging.
  
                  Equivalent to pattern:
                  '[pid %P] [%d] %m%n'
  
   syslog         Style suitable for syslog          [pid 1234] Message
                  logging.
  
                  Equivalent to pattern:
                  '[pid %p] %m'
  
  For each of the above there are also C<cat_XXX> (e.g. C<cat_script_long>) which
  are the same as XXX but with C<[cat %c]> in front of the pattern. It is used
  mainly to show categories and then filter by categories. You can turn picking
  default pattern style with category using environment variable
  LOG_SHOW_CATEGORY.
  
  And for each of the above there are also C<loc_XXX> (e.g. C<loc_syslog>) which
  are the same as XXX but with C<[loc %l]> in front of the pattern. It is used to
  show calling location (file, function/method, and line number). You can turn
  picking default pattern style with location prefix using environment variable
  LOG_SHOW_LOCATION.
  
  If you have a favorite pattern style, please do share them.
  
  =head1 BUGS/TODOS
  
  Need to provide appropriate defaults for Windows/other OS.
  
  =head1 ROAD TO 1.0
  
  Here are some planned changes/development before 1.0 is reached. There might be
  some incompatibilities, please read this section carefully.
  
  =over 4
  
  =item * Everything is configurable via environment/command-line/option file
  
  As I I<love> specifying log options from environment, I will make I<every>
  init() options configurable from outside the script
  (environment/command-line/control file). Of course, init() arguments still take
  precedence for authors that do not want some/all options to be overridden from
  outside.
  
  =item * Reorganization of command-line/environment names
  
  Aside from the handy and short TRACE (--trace), DEBUG, VERBOSE, QUIET, all the
  other environment names will be put under LOG_ prefix. This means FILE_LOG_LEVEL
  will be changed to LOG_FILE_LEVEL, and so on. SCREEN_VERBOSE will be changed to
  VERBOSE_SCREEN.
  
  This is meant to reduce "pollution" of the environment variables namespace.
  
  Log option file (option file for short, previously "flag file") will be searched
  in <PROG>.log_options. Its content is in JSON and will become init() arguments.
  For example:
  
   {"file": 1, "screen":{"level":"trace"}}
  
  or more akin to init() (both will be supported):
  
   ["-file": 1, "-screen":{"level":"trace"}]
  
  =item * Possible reorganization of package variable names
  
  To be more strict and reduce confusion, case variation might not be searched.
  
  =item * Pluggable backend
  
  This is actually the main motivator to reach 1.0 and all these changes. Backends
  will be put in Log::Any::App::Backend::Log4perl, and so on.
  
  =item * Pluggable output
  
  Probably split to Log::Any::App::Output::file, and so on. Each output needs
  its backend support.
  
  =item * App::Options support will probably be dropped
  
  I no longer use App::Options these days, and I don't know of any Log::Any::App
  user who does.
  
  =item * Probably some hooks to allow for more flexibility.
  
  For example, if user wants to parse or detect levels/log file paths/etc from
  some custom logic.
  
  =back
  
  =head1 FUNCTIONS
  
  None is exported.
  
  =head2 init(\@args)
  
  This is the actual function that implements the setup and configuration of
  logging. You normally need not call this function explicitly (but see below), it
  will be called once in an INIT block. In fact, when you do:
  
   use Log::Any::App 'a', 'b', 'c';
  
  it is actually passed as:
  
   init(['a', 'b', 'c']);
  
  You will need to call init() manually if you require Log::Any::App at runtime,
  in which case it is too late to run INIT block. If you want to run Log::Any::App
  in runtime phase, do this:
  
   require Log::Any::App;
   Log::Any::App::init(['a', 'b', 'c']);
  
  Arguments to init can be one or more of:
  
  =over 4
  
  =item -log => BOOL
  
  Whether to do log at all. Default is from LOG environment variable, or 1. This
  option is only to allow users to disable Log::Any::App (thus speeding up startup
  by avoiding loading Log4perl, etc) by passing LOG=1 environment when running
  programs. However, if you explicitly set this option to 1, Log::Any::App cannot
  be disabled this way.
  
  =item -init => BOOL
  
  Whether to call Log::Log4perl->init() after setting up the Log4perl
  configuration. Default is true. You can set this to false, and you can
  initialize Log4perl yourself (but then there's not much point in using this
  module, right?)
  
  =item -name => STRING
  
  Change the program name. Default is taken from $0.
  
  =item -level_flag_paths => ARRAY OF STRING
  
  Edit level flag file locations. The default is [$homedir, "/etc"].
  
  =item -daemon => BOOL
  
  Declare that script is a daemon. Default is no. Aside from this, to declare that
  your script is a daemon you can also set $main::IS_DAEMON to true.
  
  =item -category_alias => {ALIAS=>CATEGORY, ...}
  
  Create category aliases so the ALIAS can be used in place of real categories in
  each output's category specification. For example, instead of doing this:
  
   init(
       -file   => [category=>[qw/Foo Bar Baz/], ...],
       -screen => [category=>[qw/Foo Bar Baz/]],
   );
  
  you can do this instead:
  
   init(
       -category_alias => {-fbb => [qw/Foo Bar Baz/]},
       -file   => [category=>'-fbb', ...],
       -screen => [category=>'-fbb', ...],
   );
  
  You can also specify this from the environment variable LOG_CATEGORY_ALIAS using
  JSON encoding, e.g.
  
   LOG_CATEGORY_ALIAS='{"-fbb":["Foo","Bar","Baz"]}'
  
  =item -category_level => {CATEGORY=>LEVEL, ...}
  
  Specify per-category level. Categories not mentioned on this will use the
  general level (-level). This can be used to increase or decrease logging on
  certain categories/modules.
  
  You can also specify this from the environment variable LOG_CATEGORY_LEVEL using
  JSON encoding, e.g.
  
   LOG_CATEGORY_LEVEL='{"-fbb":"off"}'
  
  =item -level => 'trace'|'debug'|'info'|'warn'|'error'|'fatal'|'off'
  
  Specify log level for all outputs. Each output can override this value. The
  default log level is determined as follow:
  
  B<Search in command-line options>. If L<App::Options> is present, these keys are
  checked in B<%App::options>: B<log_level>, B<trace> (if true then level is
  C<trace>), B<debug> (if true then level is C<debug>), B<verbose> (if true then
  level is C<info>), B<quiet> (if true then level is C<error>).
  
  Otherwise, it will try to scrape @ARGV for the presence of B<--log-level>,
  B<--trace>, B<--debug>, B<--verbose>, or B<--quiet> (this usually works because
  Log::Any::App does this in the INIT phase, before you call L<Getopt::Long>'s
  GetOptions() or the like).
  
  B<Search in environment variables>. Otherwise, it will look for environment
  variables: B<LOG_LEVEL>, B<QUIET>. B<VERBOSE>, B<DEBUG>, B<TRACE>.
  
  B<Search in level flag files>. Otherwise, it will look for existence of files
  with one of these names C<$NAME.QUIET>, C<$NAME.VERBOSE>, C<$NAME.TRACE>,
  C<$NAME.DEBUG>, or content of C<$NAME.log_level> in ~ or /etc.
  
  B<Search in main package variables>. Otherwise, it will try to search for
  package variables in the C<main> namespace with names like C<$Log_Level> or
  C<$LOG_LEVEL> or C<$log_level>, C<$Quiet> or C<$QUIET> or C<$quiet>, C<$Verbose>
  or C<$VERBOSE> or C<$verbose>, C<$Trace> or C<$TRACE> or C<$trace>, C<$Debug> or
  C<$DEBUG> or C<$debug>.
  
  If everything fails, it defaults to 'warn'.
  
  =item -filter_text => STR
  
  Only show log lines matching STR. Default from C<LOG_FILTER_TEXT> environment.
  
  =item -filter_no_text => STR
  
  Only show log lines not matching STR. Default from C<LOG_FILTER_NO_TEXT>
  environment.
  
  =item -filter_citext => STR
  
  Only show log lines matching STR (case insensitive). Default from
  C<LOG_FILTER_CITEXT> environment.
  
  =item -filter_no_citext => STR
  
  Only show log lines not matching STR (case insensitive). Default from
  C<LOG_FILTER_NO_CITEXT> environment.
  
  =item -filter_re => RE
  
  Only show log lines matching regex pattern RE. Default from C<LOG_FILTER_RE>
  environment.
  
  =item -filter_no_re => RE
  
  Only show log lines not matching regex pattern RE. Default from
  C<LOG_FILTER_NO_RE> environment.
  
  =item -file => 0 | 1|yes|true | PATH | {opts} | [{opts}, ...]
  
  Specify output to one or more files, using L<Log::Dispatch::FileWriteRotate>.
  
  If the argument is a false boolean value, file logging will be turned off. If
  argument is a true value that matches /^(1|yes|true)$/i, file logging will be
  turned on with default path, etc. If the argument is another scalar value then
  it is assumed to be a path. If the argument is a hashref, then the keys of the
  hashref must be one of: C<level>, C<path>, C<max_size> (maximum size before
  rotating, in bytes, 0 means unlimited or never rotate), C<histories> (number of
  old files to keep, excluding the current file), C<suffix> (will be passed to
  Log::Dispatch::FileWriteRotate's constructor), C<period> (will be passed to
  Log::Dispatch::FileWriteRotate's constructor), C<buffer_size> (will be passed to
  Log::Dispatch::FileWriteRotate's constructor), C<category> (a string of ref to
  array of strings), C<category_level> (a hashref, similar to -category_level),
  C<pattern_style> (see L<"PATTERN STYLES">), C<pattern> (Log4perl pattern),
  C<filter_text>, C<filter_no_text>, C<filter_citext>, C<filter_no_citext>,
  C<filter_re>, C<filter_no_re>.
  
  If the argument is an arrayref, it is assumed to be specifying multiple files,
  with each element of the array as a hashref.
  
  How Log::Any::App determines defaults for file logging:
  
  If program is a one-liner script specified using "perl -e", the default is no
  file logging. Otherwise file logging is turned on.
  
  If the program runs as root, the default path is C</var/log/$NAME.log>, where
  $NAME is taken from B<$0> (or C<-name>). Otherwise the default path is
  ~/$NAME.log. Intermediate directories will be made with L<File::Path>.
  
  If specified C<path> ends with a slash (e.g. "/my/log/"), it is assumed to be a
  directory and the final file path is directory appended with $NAME.log.
  
  Default rotating behaviour is no rotate (max_size = 0).
  
  Default level for file is the same as the global level set by B<-level>. But
  App::options, command line, environment, level flag file, and package variables
  in main are also searched first (for B<FILE_LOG_LEVEL>, B<FILE_TRACE>,
  B<FILE_DEBUG>, B<FILE_VERBOSE>, B<FILE_QUIET>, and the similars).
  
  You can also specify category level from environment FILE_LOG_CATEGORY_LEVEL.
  
  =item -dir => 0 | 1|yes|true | PATH | {opts} | [{opts}, ...]
  
  Log messages using L<Log::Dispatch::Dir>. Each message is logged into separate
  files in the directory. Useful for dumping content (e.g. HTML, network dumps, or
  temporary results).
  
  If the argument is a false boolean value, dir logging will be turned off. If
  argument is a true value that matches /^(1|yes|true)$/i, dir logging will be
  turned on with defaults path, etc. If the argument is another scalar value then
  it is assumed to be a directory path. If the argument is a hashref, then the
  keys of the hashref must be one of: C<level>, C<path>, C<max_size> (maximum
  total size of files before deleting older files, in bytes, 0 means unlimited),
  C<max_age> (maximum age of files to keep, in seconds, undef means unlimited).
  C<histories> (number of old files to keep, excluding the current file),
  C<category>, C<category_level> (a hashref, similar to -category_level),
  C<pattern_style> (see L<"PATTERN STYLES">), C<pattern> (Log4perl pattern),
  C<filename_pattern> (pattern of file name), C<filter_text>, C<filter_no_text>,
  C<filter_citext>, C<filter_no_citext>, C<filter_re>, C<filter_no_re>.
  
  If the argument is an arrayref, it is assumed to be specifying multiple
  directories, with each element of the array as a hashref.
  
  How Log::Any::App determines defaults for dir logging:
  
  Directory logging is by default turned off. You have to explicitly turn it on.
  
  If the program runs as root, the default path is C</var/log/$NAME/>, where $NAME
  is taken from B<$0>. Otherwise the default path is ~/log/$NAME/. Intermediate
  directories will be created with File::Path. Program name can be changed using
  C<-name>.
  
  Default rotating parameters are: histories=1000, max_size=0, max_age=undef.
  
  Default level for dir logging is the same as the global level set by B<-level>.
  But App::options, command line, environment, level flag file, and package
  variables in main are also searched first (for B<DIR_LOG_LEVEL>, B<DIR_TRACE>,
  B<DIR_DEBUG>, B<DIR_VERBOSE>, B<DIR_QUIET>, and the similars).
  
  You can also specify category level from environment DIR_LOG_CATEGORY_LEVEL.
  
  =item -screen => 0 | 1|yes|true | {opts}
  
  Log messages using L<Log::Log4perl::Appender::ScreenColoredLevels>.
  
  If the argument is a false boolean value, screen logging will be turned off. If
  argument is a true value that matches /^(1|yes|true)$/i, screen logging will be
  turned on with default settings. If the argument is a hashref, then the keys of
  the hashref must be one of: C<color> (default is true, set to 0 to turn off
  color), C<stderr> (default is true, set to 0 to log to stdout instead),
  C<level>, C<category>, C<category_level> (a hashref, similar to
  -category_level), C<pattern_style> (see L<"PATTERN STYLE">), C<pattern>
  (Log4perl string pattern), C<filter_text>, C<filter_no_text>, C<filter_citext>,
  C<filter_no_citext>, C<filter_re>, C<filter_no_re>.
  
  How Log::Any::App determines defaults for screen logging:
  
  Screen logging is turned on by default.
  
  Default level for screen logging is the same as the global level set by
  B<-level>. But App::options, command line, environment, level flag file, and
  package variables in main are also searched first (for B<SCREEN_LOG_LEVEL>,
  B<SCREEN_TRACE>, B<SCREEN_DEBUG>, B<SCREEN_VERBOSE>, B<SCREEN_QUIET>, and the
  similars).
  
  Color can also be turned on/off using environment variable COLOR (if B<color>
  argument is not set).
  
  You can also specify category level from environment SCREEN_LOG_CATEGORY_LEVEL.
  
  =item -syslog => 0 | 1|yes|true | {opts}
  
  Log messages using L<Log::Dispatch::Syslog>.
  
  If the argument is a false boolean value, syslog logging will be turned off. If
  argument is a true value that matches /^(1|yes|true)$/i, syslog logging will be
  turned on with default level, ident, etc. If the argument is a hashref, then the
  keys of the hashref must be one of: C<level>, C<ident>, C<facility>,
  C<category>, C<category_level> (a hashref, similar to -category_level),
  C<pattern_style> (see L<"PATTERN STYLES">), C<pattern> (Log4perl pattern),
  C<filter_text>, C<filter_no_text>, C<filter_citext>, C<filter_no_citext>,
  C<filter_re>, C<filter_no_re>.
  
  How Log::Any::App determines defaults for syslog logging:
  
  If a program is a daemon (determined by detecting modules like L<Net::Server> or
  L<Proc::PID::File>, or by checking if -daemon or $main::IS_DAEMON is true) then
  syslog logging is turned on by default and facility is set to C<daemon>,
  otherwise the default is off.
  
  Ident is program's name by default ($0, or C<-name>).
  
  Default level for syslog logging is the same as the global level set by
  B<-level>. But App::options, command line, environment, level flag file, and
  package variables in main are also searched first (for B<SYSLOG_LOG_LEVEL>,
  B<SYSLOG_TRACE>, B<SYSLOG_DEBUG>, B<SYSLOG_VERBOSE>, B<SYSLOG_QUIET>, and the
  similars).
  
  You can also specify category level from environment SYSLOG_LOG_CATEGORY_LEVEL.
  
  =item -unixsock => 0 | 1|yes|true | PATH | {opts} | [{opts}, ...]
  
  Specify output to one or more B<existing, listening, datagram> Unix domain
  sockets, using L<Log::Log4perl::Appender::Socket::UNIX>.
  
  The listening end might be a different process, or the same process using a
  different thread of nonblocking I/O. It usually makes little sense to make the
  same program the listening end. If you want, for example, to let a client
  connects to your program to see logs being produced, you might want to setup an
  in-memory output (C<-array>) and create another thread or non-blocking I/O to
  listen to client requests and show them the content of the array when requested.
  
  If the argument is a false boolean value, Unix domain socket logging will be
  turned off. If argument is a true value that matches /^(1|yes|true)$/i, Unix
  domain socket logging will be turned on with default path, etc. If the argument
  is another scalar value then it is assumed to be a path. If the argument is a
  hashref, then the keys of the hashref must be one of: C<level>, C<path>,
  C<filter_text>, C<filter_no_text>, C<filter_citext>, C<filter_no_citext>,
  C<filter_re>, C<filter_no_re>.
  
  If the argument is an arrayref, it is assumed to be specifying multiple sockets,
  with each element of the array as a hashref.
  
  How Log::Any::App determines defaults for Unix domain socket logging:
  
  By default Unix domain socket logging is off.
  
  If the program runs as root, the default path is C</var/run/$NAME-log.sock>,
  where $NAME is taken from B<$0> (or C<-name>). Otherwise the default path is
  ~/$NAME-log.sock.
  
  If specified C<path> ends with a slash (e.g. "/my/log/"), it is assumed to be a
  directory and the final socket path is directory appended with $NAME-log.sock.
  
  Default level is the same as the global level set by B<-level>. But
  App::options, command line, environment, level flag file, and package variables
  in main are also searched first (for B<UNIXSOCK_LOG_LEVEL>, B<UNIXSOCK_TRACE>,
  B<UNIXSOCK_DEBUG>, B<UNIXSOCK_VERBOSE>, B<UNIXSOCK_QUIET>, and the similars).
  
  You can also specify category level from environment
  UNIXSOCK_LOG_CATEGORY_LEVEL.
  
  =item -array => 0 | {opts} | [{opts}, ...]
  
  Specify output to one or more Perl arrays. Logging will be done using
  L<Log::Dispatch::ArrayWithLimits>. Note that the syntax is:
  
   -array => {array=>$ary}
  
  and not just:
  
   -array => $ary
  
  because that will be interpreted as multiple array outputs:
  
   -array => [{output1}, ...]
  
  If the argument is a false boolean value, array logging will be turned off.
  Otherwise argument must be a hashref or an arrayref (to specify multiple
  outputs). If the argument is a hashref, then the keys of the hashref must be one
  of: C<level>, C<array> (defaults to new anonymous array []), C<filter_text>,
  C<filter_no_text>, C<filter_citext>, C<filter_no_citext>, C<filter_re>,
  C<filter_no_re>. If the argument is an arrayref, it is assumed to be specifying
  multiple sockets, with each element of the array as a hashref.
  
  How Log::Any::App determines defaults for array logging:
  
  By default array logging is off.
  
  Default level is the same as the global level set by B<-level>. But
  App::options, command line, environment, level flag file, and package variables
  in main are also searched first (for B<ARRAY_LOG_LEVEL>, B<ARRAY_TRACE>,
  B<ARRAY_DEBUG>, B<ARRAY_VERBOSE>, B<ARRAY_QUIET>, and the similars).
  
  You can also specify category level from environment ARRAY_LOG_CATEGORY_LEVEL.
  
  =item -dump => BOOL
  
  If set to true then Log::Any::App will dump the generated Log4perl config.
  Useful for debugging the logging.
  
  =back
  
  =head1 FAQ
  
  =head2 Why?
  
  I initially wrote Log::Any::App because I'm sick of having to parse command-line
  options to set log level like --verbose, --log-level=debug for every script.
  Also, before using Log::Any I previously used Log4perl directly and modules
  which produce logs using Log4perl cannot be directly use'd in one-liners without
  Log4perl complaining about uninitialized configuration or some such. Thus, I
  like Log::Any's default null adapter and want to settle using Log::Any for any
  kind of logging. Log::Any::App makes it easy to output Log::Any logs in your
  scripts and even one-liners.
  
  =head2 What's the benefit of using Log::Any::App?
  
  You get all the benefits of Log::Any, as what Log::Any::App does is just wrap
  Log::Any and Log4perl with some nice defaults. It provides you with an easy way
  to consume Log::Any logs and customize level/some other options via various
  ways.
  
  =head2 And what's the benefit of using Log::Any?
  
  This is better described in the Log::Any documentation itself, but in short:
  Log::Any frees your module users to use whatever logging framework they want. It
  increases the reusability of your modules.
  
  =head2 Do I need Log::Any::App if I am writing modules?
  
  No, if you write modules just use Log::Any.
  
  =head2 Why use Log4perl?
  
  Log::Any::App uses the Log4perl adapter to display the logs because it is
  mature, flexible, featureful. The other alternative adapter is Log::Dispatch,
  but you can use Log::Dispatch::* output modules in Log4perl and (currently) not
  vice versa.
  
  Other adapters might be considered in the future, for now I'm fairly satisfied
  with Log4perl. It does have a slightly heavy startup cost for my taste, but it
  is still bearable.
  
  =head2 Are you coupling adapter with Log::Any (thus defeating Log::Any's purpose)?
  
  No, producing logs are still done with Log::Any as usual and not tied to
  Log4perl in any way. Your modules, as explained above, only 'use Log::Any' and
  do not depend on Log::Any::App at all.
  
  Should portions of your application code get refactored into modules later, you
  don't need to change the logging part. And if your application becomes more
  complex and Log::Any::App doesn't suffice your custom logging needs anymore, you
  can just replace 'use Log::Any::App' line with something more adequate.
  
  =head2 How do I create extra logger objects?
  
  The usual way as with Log::Any:
  
   my $other_log = Log::Any->get_logger(category => $category);
  
  =head2 My needs are not met by the simple configuration system of Log::Any::App!
  
  You can use the Log4perl adapter directly and write your own Log4perl
  configuration (or even other adapters). Log::Any::App is meant for quick and
  simple logging output needs anyway (but do tell me if your logging output needs
  are reasonably simple and should be supported by Log::Any::App).
  
  =head2 What is array output for?
  
  Logging to a Perl array might be useful for testing/debugging, or (one use-case
  I can think of) for letting users of your program connect to your program
  directly to request viewing the logs being produced (although logging to other
  outputs doesn't preclude this ability). For example, here is a program that uses
  a separate thread to listen to Unix socket for requests to view the (last 100)
  logs. Requires perl built with threads enabled.
  
   use threads;
   use threads::shared;
   BEGIN { our @buf :shared }
   use IO::Socket::UNIX::Util qw(create_unix_stream_socket);
   use Log::Any::App '$log', -array => [{array => 'main::buf', max_elems=>100}];
  
   my $sock = create_unix_stream_socket('/tmp/app-logview.sock');
  
   # thread to listen to unix socket and receive log viewing instruction
   my $thr = threads->create(
      sub {
          local $| = 1;
          while (my $cli = $sock->accept) {
              while (1) {
                  print $cli "> ";
                  my $line = <$cli>;
                  last unless $line;
                  if ($line =~ /\Ar(ead)?\b/i) {
                      print $cli @buf;
                  } else {
                      print $cli "Unknown command\n";
                  }
              }
          }
      });
  
   # main thread, application which produces logs
   $|++;
   while (1) {
       $log->warnf("Log (%d) ...", ++$i);
       sleep 1;
   }
  
  After you run this program, you can connect to it, e.g. from another terminal:
  
   % socat UNIX-CONNECT:/tmp/app-logview.sock -
   > read
   [2014/07/06 23:34:49] Log (1) ...
   [2014/07/06 23:34:50] Log (2) ...
   [2014/07/06 23:34:50] Log (3) ...
   [2014/07/06 23:34:51] Log (4) ...
   [2014/07/06 23:34:51] Log (5) ...
  
  =head1 ENVIRONMENT
  
  Below is summary of environment variables used.
  
  =head2 Turning on/off logging
  
   LOG (bool)
  
  =head2 Setting general level
  
   TRACE (bool)       setting general level to trace
   DEBUG (bool)       setting general level to debug
   VERBOSE (bool)     setting general level to info
   QUIET (bool)       setting general level to error (turn off warnings)
   LOG_LEVEL (str)
  
  =head2 Setting per-output level
  
   FILE_TRACE, FILE_DEBUG, FILE_VERBOSE, FILE_QUIET, FILE_LOG_LEVEL
   SCREEN_TRACE and so on
   DIR_TRACE and so on
   SYSLOG_TRACE and so on
   UNIXSOCK_TRACE and so on
   ARRAY_TRACE and so on
  
  =head2 Setting per-category level
  
   LOG_CATEGORY_LEVEL (hash, json)
   LOG_CATEGORY_ALIAS (hash, json)
  
  =head2 Setting per-output, per-category level
  
   FILE_LOG_CATEGORY_LEVEL
   SCREEN_LOG_CATEGORY_LEVEL
   and so on
  
  =head2 Controlling extra fields to log
  
   LOG_SHOW_LOCATION
   LOG_SHOW_CATEGORY
  
  =head2 Force-enable or disable color
  
   COLOR (bool)
  
  =head2 Turn on Log::Any::App's debugging
  
   LOGANYAPP_DEBUG (bool)
  
  =head2 Turn on showing elapsed time in screen
  
   LOG_ELAPSED_TIME_IN_SCREEN (bool)
  
  Note that elapsed time is currently produced using Log::Log4perl's %r (number of
  milliseconds since the program started, where program started means when
  Log::Log4perl starts counting time).
  
  =head2 Filtering
  
   LOG_FILTER_TEXT (str)
   LOG_FILTER_NO_TEXT (str)
   LOG_FILTER_CITEXT (str)
   LOG_FILTER_NO_CITEXT (str)
   LOG_FILTER_RE (str)
   LOG_FILTER_NO_RE (str)
  
  =head2 Per-output filtering
  
   {FILE,DIR,SCREEN,SYSLOG,UNIXSOCK,ARRAY}_LOG_FILTER_TEXT (str)
   and so on
  
  =head2 Extra things to log
  
  =over
  
  =item * LOG_ENV (bool)
  
  If set to 1, will dump environment variables at the start of program. Useful for
  debugging e.g. CGI or git hook scripts. You might also want to look at
  L<Log::Any::Adapter::Core::Patch::UseDataDump> to make the dump more readable.
  
  Logging will be done under category C<main> and at level C<trace>.
  
  =back
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Log-Any-App>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Log-Any-App>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Log-Any-App>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Log::Any> and L<Log::Log4perl>
  
  Some alternative logging modules: L<Log::Dispatchouli> (based on
  L<Log::Dispatch>), L<Log::Fast>, L<Log::Log4perl::Tiny>. Really, there are 7,451
  of them (roughly one third of CPAN) at the time of this writing.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_ANY_APP

    $main::fatpacked{"Log/Any/IfLOG.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_IFLOG';
  package Log::Any::IfLOG;
  
  our $DATE = '2016-06-16'; # DATE
  our $VERSION = '0.08'; # VERSION
  
  our $DEBUG;
  our $ENABLE_LOG;
  
  my $log_singleton;
  sub __log_singleton {
      if (!$log_singleton) { $log_singleton = Log::Any::IfLOG::DumbObj->new }
      $log_singleton;
  }
  
  sub __log_enabled {
      if (defined $ENABLE_LOG) {
          return $ENABLE_LOG;
      } elsif ($INC{'Log/Any.pm'}) {
          # Log::Any has been loaded, so we have absorbed the cost anyway
          return 1;
      } else {
          return
              $ENV{LOG} || $ENV{TRACE} || $ENV{DEBUG} ||
              $ENV{VERBOSE} || $ENV{QUIET} || $ENV{LOG_LEVEL};
      }
  }
  
  sub import {
      my $self = shift;
  
      my $caller = caller();
      if (__log_enabled()) {
          require Log::Any;
          Log::Any->_export_to_caller($caller, @_);
      } else {
          my $saw_log_param = grep { $_ eq '$log' } @_;
          if ($saw_log_param) {
              __log_singleton(); # to init $log_singleton
              *{"$caller\::log"} = \$log_singleton;
          }
      }
  }
  
  sub get_logger {
      if (__log_enabled()) {
          require Log::Any;
          my $class = shift;
          if ($class eq 'Log::Any::IfLOG') {
              Log::Any->get_logger(@_);
          } else {
              Log::Any::get_logger($class, @_);
          }
      } else {
          return __log_singleton();
      }
  }
  
  package
      Log::Any::IfLOG::DumbObj;
  sub new { my $o = ""; bless \$o, shift }
  sub AUTOLOAD { 0 }
  
  1;
  # ABSTRACT: Load Log::Any only if "logging is enabled"
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Any::IfLOG - Load Log::Any only if "logging is enabled"
  
  =head1 VERSION
  
  This document describes version 0.08 of Log::Any::IfLOG (from Perl distribution Log-Any-IfLOG), released on 2016-06-16.
  
  =head1 SYNOPSIS
  
   use Log::Any::IfLOG '$log';
  
  =head1 DESCRIPTION
  
  This module is a drop-in replacement/wrapper for L<Log::Any> to be used from
  your modules. This is a quick-hack solution to avoid the cost of loading
  Log::Any under "normal condition". Since Log::Any 1.00, startup overhead
  increases to about 7-10ms on my PC/laptop (from under 1ms for the previous
  version). Because I want to keep startup overhead of CLI apps under 50ms (see
  L<Perinci::CmdLine::Lite>) to keep tab completion from getting a noticeable lag,
  every millisecond counts.
  
  This module will only load L<Log::Any> when "logging is enabled". Otherwise, it
  will just return without loading anything. If C<$log> is requested in import, a
  fake object is returned that responds to methods like C<debug>, C<is_debug> and
  so on but will do nothing when called and just return 0.
  
  To determine "logging is enabled":
  
  =over
  
  =item * Is $ENABLE_LOG defined?
  
  This package variable can be used to force "logging enabled" (if true) or
  "logging disabled" (if false). Normally, you don't need to do this except for
  testing.
  
  =item * Is Log::Any is already loaded (from %INC)?
  
  If Log::Any is already loaded, it means we have taken the overhead hit anyway so
  logging is enabled.
  
  =item * Is one of log-related environment variables true?
  
  If one of L<LOG>, C<TRACE>, or C<DEBUG>, or C<VERBOSE>, or C<QUIET>, or
  C<LOG_LEVEL> is true then logging is enabled. These variables are used by
  L<Perinci::CmdLine>.
  
  Otherwise, logging is disabled.
  
  =back
  
  =for Pod::Coverage ^(.+)$
  
  =head1 VARIABLES
  
  =head2 $ENABLE_LOG => bool
  
  This setting can be forced to force loading Log::Any or not.
  
  =head1 ENVIRONMENT
  
  =head2 LOG => bool
  
  =head2 TRACE => bool
  
  =head2 DEBUG => bool
  
  =head2 VERBOSE => bool
  
  =head2 QUIET => bool
  
  =head2 LOG_LEVEL => str
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Log-Any-IfLOG>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Log-Any-IfLOG>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Log-Any-IfLOG>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Log::Any>
  
  L<http://github.com/dagolden/Log-Any/issues/24>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_ANY_IFLOG

    $main::fatpacked{"Log/Any/Manager.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_MANAGER';
  use 5.008001;
  use strict;
  use warnings;
  
  package Log::Any::Manager;
  
  our $VERSION = '1.042';
  
  sub new {
      my $class = shift;
      my $self  = {
          # The stack of adapter entries
          entries         => [],
          # A cache of keys with category names and values of a hashref
          # with stack entries (from the entries attribute) and adapters
          category_cache  => {},
          # The adapter to use if no other adapter is appropriate
          default_adapter => {},
      };
      bless $self, $class;
  
      return $self;
  }
  
  sub has_consumer {
      my ( $self ) = @_;
      return !!( @{ $self->{entries} } || keys %{ $self->{default_adapter} } );
  }
  
  sub get_adapter {
      my ( $self, $category ) = @_;
  
      # Create a new adapter for this category if it is not already in cache
      #
      my $category_cache = $self->{category_cache};
      if ( !defined( $category_cache->{$category} ) ) {
          my $entry = $self->_choose_entry_for_category($category);
          my $adapter = $self->_new_adapter_for_entry( $entry, $category );
          $category_cache->{$category} = { entry => $entry, adapter => $adapter };
      }
      return $category_cache->{$category}->{adapter};
  }
  
  {
      no warnings 'once';
      *get_logger = \&get_adapter;    # backwards compatibility
  }
  
  sub _choose_entry_for_category {
      my ( $self, $category ) = @_;
  
      foreach my $entry ( @{ $self->{entries} } ) {
          if ( $category =~ $entry->{pattern} ) {
              return $entry;
          }
      }
      # nothing requested so fallback to default
      my $default = $self->{default_adapter}{$category}
          || [ $self->_get_adapter_class("Null"), [] ];
      my ($adapter_class, $adapter_params) = @$default;
      _require_dynamic($adapter_class);
      return {
          adapter_class  => $adapter_class,
          adapter_params => $adapter_params,
      };
  }
  
  sub _new_adapter_for_entry {
      my ( $self, $entry, $category ) = @_;
  
      return $entry->{adapter_class}
        ->new( @{ $entry->{adapter_params} }, category => $category );
  }
  
  sub set_default {
      my ( $self, $category, $adapter_name, @adapter_params ) = @_;
      Log::Any::Proxy::Null->inflate_nulls;
      my $adapter_class = $self->_get_adapter_class($adapter_name);
      $self->{default_adapter}{$category} = [$adapter_class, \@adapter_params];
  }
  
  # =head2 set
  #
  #   $mgr->set( $options );
  #
  # Set the current adapter. Called from
  # L<Log::Any::Adapter::set|Log::Any::Adapter/SETTING AND REMOVING ADAPTERS>, the
  # standard API for setting the current adapter. Adds a new entry to the
  # C<entries> stack and refreshes all the matching adapters.
  #
  # See L<Log::Any::Adapter|Log::Any::Adapter/SETTING AND REMOVING ADAPTERS>
  # for available options.
  #
  # Returns the newly-created entry in the stack.
  sub set {
      my $self = shift;
      my $options;
      if ( ref( $_[0] ) eq 'HASH' ) {
          $options = shift(@_);
      }
      my ( $adapter_name, @adapter_params ) = @_;
  
      unless ( defined($adapter_name) && $adapter_name =~ /\S/ ) {
          require Carp;
          Carp::croak("expected adapter name");
      }
  
      my $pattern = $options->{category};
      if ( !defined($pattern) ) {
          $pattern = qr/.*/;
      }
      elsif ( !ref($pattern) ) {
          $pattern = qr/^\Q$pattern\E$/;
      }
  
      my $adapter_class = $self->_get_adapter_class($adapter_name);
      _require_dynamic($adapter_class);
  
      my $entry = $self->_new_entry( $pattern, $adapter_class, \@adapter_params );
      unshift( @{ $self->{entries} }, $entry );
  
      $self->_reselect_matching_adapters($pattern);
  
      if ( my $lex_ref = $options->{lexically} ) {
          $$lex_ref = Log::Any::Manager::_Guard->new(
              sub { $self->remove($entry) unless _in_global_destruction() } );
      }
  
      Log::Any::Proxy::Null->inflate_nulls;
      return $entry;
  }
  
  sub remove {
      my ( $self, $entry ) = @_;
  
      my $pattern = $entry->{pattern};
      $self->{entries} = [ grep { $_ ne $entry } @{ $self->{entries} } ];
      $self->_reselect_matching_adapters($pattern);
  }
  
  sub _new_entry {
      my ( $self, $pattern, $adapter_class, $adapter_params ) = @_;
  
      return {
          pattern        => $pattern,
          adapter_class  => $adapter_class,
          adapter_params => $adapter_params,
      };
  }
  
  # =head2 _reselect_matching_adapters
  #
  #   $self->_reselect_matching_adapters( $pattern )
  #
  # Given a pattern, reselect which adapter should match. This is called
  # after entries are added/removed from the C<entries> attribute.
  #
  # XXX Does not actually use $pattern, so do we need to pass it in?
  sub _reselect_matching_adapters {
      my ( $self, $pattern ) = @_;
  
      return if _in_global_destruction();
  
      # Reselect adapter for each category matching $pattern
      #
      while ( my ( $category, $category_info ) =
          each( %{ $self->{category_cache} } ) )
      {
          my $new_entry = $self->_choose_entry_for_category($category);
          if ( $new_entry ne $category_info->{entry} ) {
              my $new_adapter =
                $self->_new_adapter_for_entry( $new_entry, $category );
              # Replace existing references to the adapter with the new
              # adapter
              %{ $category_info->{adapter} } = %$new_adapter;
              bless( $category_info->{adapter}, ref($new_adapter) );
              $category_info->{entry} = $new_entry;
          }
      }
  }
  
  sub _get_adapter_class {
      my ( $self, $adapter_name ) = @_;
      return $Log::Any::OverrideDefaultAdapterClass if $Log::Any::OverrideDefaultAdapterClass;
      $adapter_name =~ s/^Log:://;    # Log::Dispatch -> Dispatch, etc.
      my $adapter_class = (
            substr( $adapter_name, 0, 1 ) eq '+'
          ? substr( $adapter_name, 1 )
          : "Log::Any::Adapter::$adapter_name"
      );
      return $adapter_class;
  }
  
  # This is adapted from the pure perl parts of Devel::GlobalDestruction
  if ( defined ${^GLOBAL_PHASE} ) {
      eval 'sub _in_global_destruction () { ${^GLOBAL_PHASE} eq q[DESTRUCT] }; 1' ## no critic
        or die $@;
  }
  else {
      require B;
      my $started = !B::main_start()->isa(q[B::NULL]);
      unless ($started) {
          eval '0 && $started; CHECK { $started = 1 }; 1' ## no critic
            or die $@;
      }
      eval ## no critic
        '0 && $started; sub _in_global_destruction () { $started && B::main_start()->isa(q[B::NULL]) }; 1'
        or die $@;
  }
  
  # XXX not DRY and not a great way to do this, but oh, well.
  sub _require_dynamic {
      my ($class) = @_;
  
      return 1 if $class->can('new'); # duck-type that class is loaded
  
      unless ( defined( eval "require $class; 1" ) )
      {    ## no critic (ProhibitStringyEval)
          die $@;
      }
  }
  
  package    # hide from PAUSE
    Log::Any::Manager::_Guard;
  
  sub new { bless $_[1], $_[0] }
  
  sub DESTROY { $_[0]->() }
  
  1;
LOG_ANY_MANAGER

    $main::fatpacked{"Log/Any/Proxy.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_PROXY';
  use 5.008001;
  use strict;
  use warnings;
  
  package Log::Any::Proxy;
  
  # ABSTRACT: Log::Any generator proxy object
  our $VERSION = '1.042';
  
  use Log::Any::Adapter::Util ();
  
  sub _default_formatter {
      my ( $cat, $lvl, $format, @params ) = @_;
      return $format->() if ref($format) eq 'CODE';
      my @new_params =
        map {
             !defined($_) ? '<undef>'
            : ref($_)     ? Log::Any::Adapter::Util::dump_one_line($_)
            : $_
        } @params;
      # Perl 5.22 adds a 'redundant' warning if the number parameters exceeds
      # the number of sprintf placeholders.  If a user does this, the warning
      # is issued from here, which isn't very helpful.  Doing something
      # clever would be expensive, so instead we just disable warnings for
      # the final line of this subroutine.
      no warnings;
      return sprintf( $format, @new_params );
  }
  
  sub new {
      my $class = shift;
      my $self = { formatter => \&_default_formatter, @_ };
      unless ( $self->{adapter} ) {
          require Carp;
          Carp::croak("$class requires an 'adapter' parameter");
      }
      unless ( $self->{category} ) {
          require Carp;
          Carp::croak("$class requires an 'category' parameter")
      }
      bless $self, $class;
      $self->init(@_);
      return $self;
  }
  
  sub init { }
  
  for my $attr (qw/adapter filter formatter prefix/) {
      no strict 'refs';
      *{$attr} = sub { return $_[0]->{$attr} };
  }
  
  my %aliases = Log::Any::Adapter::Util::log_level_aliases();
  
  # Set up methods/aliases and detection methods/aliases
  foreach my $name ( Log::Any::Adapter::Util::logging_methods(), keys(%aliases) )
  {
      my $realname    = $aliases{$name} || $name;
      my $namef       = $name . "f";
      my $is_name     = "is_$name";
      my $is_realname = "is_$realname";
      my $numeric     = Log::Any::Adapter::Util::numeric_level($realname);
      no strict 'refs';
      *{$is_name} = sub {
          my ($self) = @_;
          return $self->{adapter}->$is_realname;
      };
      *{$name} = sub {
          my ( $self, @parts ) = @_;
          my $message = join(" ", grep { defined($_) && length($_) } @parts );
          if ( length $message ) {
              $message = $self->{filter}->( $self->{category}, $numeric, $message )
                if defined $self->{filter};
              if ( defined $message and length $message ) {
                  $message = "$self->{prefix}$message"
                    if defined $self->{prefix} && length $self->{prefix};
                  $self->{adapter}->$realname($message);
              }
          }
          return $message if defined wantarray;
      };
      *{$namef} = sub {
          my ( $self, @args ) = @_;
          return unless $self->{adapter}->$is_realname;
          my $message =
            $self->{formatter}->( $self->{category}, $numeric, @args );
          return unless defined $message and length $message;
          return $self->$name($message);
      };
  }
  
  1;
  
  
  # vim: ts=4 sts=4 sw=4 et tw=75:
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Any::Proxy - Log::Any generator proxy object
  
  =head1 VERSION
  
  version 1.042
  
  =head1 SYNOPSIS
  
      # prefix log messages
      use Log::Any '$log', prefix => 'MyApp: ';
  
      # transform log messages
      use Log::Any '$log', filter => \&myfilter;
  
      # format with String::Flogger instead of the default
      use String::Flogger;
      use Log::Any '$log', formatter => sub {
          my ($cat, $lvl, @args) = @_;
          String::Flogger::flog( @args );
      };
  
  =head1 DESCRIPTION
  
  Log::Any::Proxy objects are what modules use to produce log messages.  They
  construct messages and pass them along to a configured adapter.
  
  =head1 USAGE
  
  =head2 Simple logging
  
  Your library can do simple logging using logging methods corresponding to
  the log levels (or aliases):
  
  =over 4
  
  =item *
  
  trace
  
  =item *
  
  debug
  
  =item *
  
  info (inform)
  
  =item *
  
  notice
  
  =item *
  
  warning (warn)
  
  =item *
  
  error (err)
  
  =item *
  
  critical (crit, fatal)
  
  =item *
  
  alert
  
  =item *
  
  emergency
  
  =back
  
  Pass a string to be logged.  Do not include a newline.
  
      $log->info("Got some new for you.");
  
  The log string will be transformed via the C<filter> attribute (if any) and
  the C<prefix> (if any) will be prepended. Returns the transformed log string.
  
  B<NOTE>: While you are encouraged to pass a single string to be logged, if
  multiple arguments are passed, they are concatenated with a space character
  into a single string before processing.  This ensures consistency across
  adapters, some of which may support multiple arguments to their logging
  functions (and which concatenate in different ways) and some of which do
  not.
  
  =head2 Advanced logging
  
  Your library can do advanced logging using logging methods corresponding to
  the log levels (or aliases), but with an "f" appended:
  
  =over 4
  
  =item *
  
  tracef
  
  =item *
  
  debugf
  
  =item *
  
  infof (informf)
  
  =item *
  
  noticef
  
  =item *
  
  warningf (warnf)
  
  =item *
  
  errorf (errf)
  
  =item *
  
  criticalf (critf, fatalf)
  
  =item *
  
  alertf
  
  =item *
  
  emergencyf
  
  =back
  
  When these methods are called, the adapter is first checked to see if it is
  logging at that level.  If not, the method returns without logging.
  
  Next, arguments are transformed to a message string via the C<formatter>
  attribute.
  
  The default formatter first checks if the first log argument is a code
  reference.  If so, it will executed and the result used as the formatted
  message. Otherwise, the formatter acts like C<sprintf> with some helpful
  formatting.
  
  Finally, the message string is logged via the simple logging functions,
  which can transform or prefix as described above. The transformed log
  string is then returned.
  
  =head1 ATTRIBUTES
  
  =head2 adapter
  
  A L<Log::Any::Adapter> object to receive any messages logged.  This is
  generated by L<Log::Any> and can not be overridden.
  
  =head2 category
  
  The category name of the proxy.  If not provided, L<Log::Any> will set it
  equal to the calling when the proxy is constructed.
  
  =head2 filter
  
  A code reference to transform messages before passing them to a
  Log::Any::Adapter.  It gets three arguments: a category, a numeric level
  and a string.  It should return a string to be logged.
  
      sub {
          my ($cat, $lvl, $msg) = @_;
          return "[$lvl] $msg";
      }
  
  If the return value is undef or the empty string, no message will be
  logged.  Otherwise, the return value is passed to the logging adapter.
  
  Numeric levels range from 0 (emergency) to 8 (trace).  Constant functions
  for these levels are available from L<Log::Any::Adapter::Util>.
  
  =head2 formatter
  
  A code reference to format messages given to the C<*f> methods (C<tracef>,
  C<debugf>, C<infof>, etc..)
  
  It get three or more arguments: a category, a numeric level and the list
  of arguments passsed to the C<*f> method.  It should return a string to
  be logged.
  
      sub {
          my ($cat, $lvl, $format, @args) = @_;
          return sprintf($format, @args);
      }
  
  The default formatter does the following:
  
  =over 4
  
  =item *
  
  if the first argument is a code reference, it is executed and the result returned
  
  =item *
  
  otherwise, it acts like C<sprintf>, except that undef arguments are changed to C<< <undef> >> and any references or objects are dumped via L<Data::Dumper> (but without newlines).
  
  =back
  
  Numeric levels range from 0 (emergency) to 8 (trace).  Constant functions
  for these levels are available from L<Log::Any::Adapter::Util>.
  
  =head2 prefix
  
  If defined, this string will be prepended to all messages.  It will not
  include a trailing space, so add that yourself if you want.  This is less
  flexible/powerful than L</filter>, but avoids an extra function call.
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Jonathan Swartz <swartz@pobox.com>
  
  =item *
  
  David Golden <dagolden@cpan.org>
  
  =item *
  
  Doug Bell <preaction@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by Jonathan Swartz, David Golden, and Doug Bell.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_ANY_PROXY

    $main::fatpacked{"Log/Any/Proxy/Null.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_PROXY_NULL';
  use 5.008001;
  use strict;
  use warnings;
  
  package Log::Any::Proxy::Null;
  
  # ABSTRACT: Log::Any generator proxy for no adapters
  our $VERSION = '1.042';
  
  use Log::Any::Adapter::Util ();
  use Log::Any::Proxy;
  our @ISA = qw/Log::Any::Proxy/;
  
  # Null proxy objects waiting for inflation into regular proxy objects
  my @nulls;
  
  sub new {
      my $obj = shift->SUPER::new( @_ );
      push @nulls, $obj;
      return $obj;
  }
  
  sub inflate_nulls {
      bless shift( @nulls ), 'Log::Any::Proxy' while @nulls;
  }
  
  my %aliases = Log::Any::Adapter::Util::log_level_aliases();
  
  # Set up methods/aliases and detection methods/aliases
  foreach my $name ( Log::Any::Adapter::Util::logging_methods(), keys(%aliases) )
  {
      my $namef       = $name . "f";
      my $super_name  = "SUPER::" . $name;
      my $super_namef = "SUPER::" . $namef;
      no strict 'refs';
      *{$name} = sub {
          return unless defined wantarray;
          return shift->$super_name( @_ );
      };
      *{$namef} = sub {
          return unless defined wantarray;
          return shift->$super_namef( @_ );
      };
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Any::Proxy::Null - Log::Any generator proxy for no adapters
  
  =head1 VERSION
  
  version 1.042
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Jonathan Swartz <swartz@pobox.com>
  
  =item *
  
  David Golden <dagolden@cpan.org>
  
  =item *
  
  Doug Bell <preaction@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by Jonathan Swartz, David Golden, and Doug Bell.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_ANY_PROXY_NULL

    $main::fatpacked{"Log/Any/Proxy/Test.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_PROXY_TEST';
  use 5.008001;
  use strict;
  use warnings;
  
  package Log::Any::Proxy::Test;
  
  our $VERSION = '1.042';
  
  use Log::Any::Proxy;
  our @ISA = qw/Log::Any::Proxy/;
  
  my @test_methods = qw(
    msgs
    clear
    contains_ok
    category_contains_ok
    does_not_contain_ok
    category_does_not_contain_ok
    empty_ok
    contains_only_ok
  );
  
  foreach my $name (@test_methods) {
      no strict 'refs';
      *{$name} = sub {
          my $self = shift;
          $self->{adapter}->$name(@_);
      };
  }
  
  1;
LOG_ANY_PROXY_TEST

    $main::fatpacked{"Log/Any/Test.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_ANY_TEST';
  use 5.008001;
  use strict;
  use warnings;
  
  package Log::Any::Test;
  
  # ABSTRACT: Test what you're logging with Log::Any
  our $VERSION = '1.042';
  
  no warnings 'once';
  $Log::Any::OverrideDefaultAdapterClass = 'Log::Any::Adapter::Test';
  $Log::Any::OverrideDefaultProxyClass   = 'Log::Any::Proxy::Test';
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Any::Test - Test what you're logging with Log::Any
  
  =head1 VERSION
  
  version 1.042
  
  =head1 SYNOPSIS
  
      use Test::More;
      use Log::Any::Test;    # should appear before 'use Log::Any'!
      use Log::Any qw($log);
  
      # ...
      # call something that logs using Log::Any
      # ...
  
      # now test to make sure you logged the right things
  
      $log->contains_ok(qr/good log message/, "good message was logged");
      $log->does_not_contain_ok(qr/unexpected log message/, "unexpected message was not logged");
      $log->empty_ok("no more logs");
  
      # or
  
      my $msgs = $log->msgs;
      cmp_deeply($msgs, [{message => 'msg1', level => 'debug'}, ...]);
  
  =head1 DESCRIPTION
  
  C<Log::Any::Test> is a simple module that allows you to test what has been
  logged with Log::Any. Most of its API and implementation have been taken from
  L<Log::Any::Dispatch|Log::Any::Dispatch>.
  
  Using C<Log::Any::Test> signals C<Log::Any> to send all subsequent log
  messages to a single global in-memory buffer and to make the log proxy
  provide a number of testing functions.  To use it, load C<Log::Any::Test>
  before anything that loads C<Log::Any>.  To actually use the test methods,
  you need to load C<Log::Any> and get a log object from it, as shown in the
  L</SYNOPSIS>.
  
  =head1 METHODS
  
  The test_name is optional in the *_ok methods; a reasonable default will be
  provided.
  
  =over
  
  =item msgs ()
  
  Returns the current contents of the global log buffer as an array reference,
  where each element is a hash containing a I<category>, I<level>, and I<message>
  key.  e.g.
  
    {
      category => 'Foo',
      level => 'error',
      message => 'this is an error'
    },
    {
      category => 'Bar::Baz',
      level => 'debug',
      message => 'this is a debug'
    }
  
  =item contains_ok ($regex[, $test_name])
  
  Tests that a message in the log buffer matches I<$regex>. On success, the
  message is I<removed> from the log buffer (but any other matches are left
  untouched).
  
  =item does_not_contain_ok ($regex[, $test_name])
  
  Tests that no message in the log buffer matches I<$regex>.
  
  =item category_contains_ok ($category, $regex[, $test_name])
  
  Tests that a message in the log buffer from a specific category matches
  I<$regex>. On success, the message is I<removed> from the log buffer (but any
  other matches are left untouched).
  
  =item category_does_not_contain_ok ($category, $regex[, $test_name])
  
  Tests that no message from a specific category in the log buffer matches
  I<$regex>.
  
  =item empty_ok ([$test_name])
  
  Tests that there is no log buffer left. On failure, the log buffer is cleared
  to limit further cascading failures.
  
  =item contains_only_ok ($regex[, $test_name])
  
  Tests that there is a single message in the log buffer and it matches
  I<$regex>. On success, the message is removed.
  
  =item clear ()
  
  Clears the log buffer.
  
  =back
  
  =head1 SEE ALSO
  
  L<Log::Any|Log::Any>, L<Test::Log::Dispatch|Test::Log::Dispatch>
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Jonathan Swartz <swartz@pobox.com>
  
  =item *
  
  David Golden <dagolden@cpan.org>
  
  =item *
  
  Doug Bell <preaction@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by Jonathan Swartz, David Golden, and Doug Bell.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_ANY_TEST

    $main::fatpacked{"Log/Dispatch.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH';
  package Log::Dispatch;
  
  use 5.006;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.56';
  
  use base qw( Log::Dispatch::Base );
  
  use Log::Dispatch::Vars qw( %CanonicalLevelNames @OrderedLevels );
  use Module::Runtime qw( use_package_optimistically );
  use Params::Validate 1.03 qw(validate_with ARRAYREF CODEREF);
  use Carp ();
  
  BEGIN {
      foreach my $l ( keys %CanonicalLevelNames ) {
          my $sub = sub {
              my $self = shift;
              $self->log(
                  level   => $CanonicalLevelNames{$l},
                  message => @_ > 1 ? "@_" : $_[0],
              );
          };
  
          no strict 'refs';
          *{$l} = $sub;
      }
  }
  
  sub new {
      my $proto = shift;
      my $class = ref $proto || $proto;
  
      my %p = validate_with(
          params => \@_,
          spec   => {
              outputs   => { type => ARRAYREF,           optional => 1 },
              callbacks => { type => ARRAYREF | CODEREF, optional => 1 }
          },
          allow_extra => 1,    # for backward compatibility
      );
  
      my $self = bless {}, $class;
  
      my @cb = $self->_get_callbacks(%p);
      $self->{callbacks} = \@cb if @cb;
  
      if ( my $outputs = $p{outputs} ) {
          if ( ref $outputs->[1] eq 'HASH' ) {
  
              # 2.23 API
              # outputs => [
              #   File => { min_level => 'debug', filename => 'logfile' },
              #   Screen => { min_level => 'warning' }
              # ]
              while ( my ( $class, $params ) = splice @$outputs, 0, 2 ) {
                  $self->_add_output( $class, %$params );
              }
          }
          else {
  
              # 2.24+ syntax
              # outputs => [
              #   [ 'File',   min_level => 'debug', filename => 'logfile' ],
              #   [ 'Screen', min_level => 'warning' ]
              # ]
              foreach my $arr (@$outputs) {
                  die "expected arrayref, not '$arr'"
                      unless ref $arr eq 'ARRAY';
                  $self->_add_output(@$arr);
              }
          }
      }
  
      return $self;
  }
  
  sub clone {
      my $self = shift;
  
      my %clone = (
          callbacks => [ @{ $self->{callbacks} || [] } ],
          outputs   => { %{ $self->{outputs}   || {} } },
      );
  
      return bless \%clone, ref $self;
  }
  
  sub _add_output {
      my $self  = shift;
      my $class = shift;
  
      my $full_class
          = substr( $class, 0, 1 ) eq '+'
          ? substr( $class, 1 )
          : "Log::Dispatch::$class";
  
      use_package_optimistically($full_class);
  
      $self->add( $full_class->new(@_) );
  }
  
  sub add {
      my $self   = shift;
      my $object = shift;
  
      # Once 5.6 is more established start using the warnings module.
      if ( exists $self->{outputs}{ $object->name } && $^W ) {
          Carp::carp(
              "Log::Dispatch::* object ", $object->name,
              " already exists."
          );
      }
  
      $self->{outputs}{ $object->name } = $object;
  }
  
  sub remove {
      my $self = shift;
      my $name = shift;
  
      return delete $self->{outputs}{$name};
  }
  
  sub outputs {
      my $self = shift;
  
      return values %{ $self->{outputs} };
  }
  
  sub callbacks {
      my $self = shift;
  
      return @{ $self->{callbacks} };
  }
  
  sub log {
      my $self = shift;
      my %p    = @_;
  
      if ( exists $p{level} && $p{level} =~ /\A[0-7]\z/ ) {
          $p{level} = $OrderedLevels[ $p{level} ];
      }
  
      return unless $self->would_log( $p{level} );
  
      $self->_log_to_outputs( $self->_prepare_message(%p) );
  }
  
  sub _prepare_message {
      my $self = shift;
      my %p    = @_;
  
      $p{message} = $p{message}->()
          if ref $p{message} eq 'CODE';
  
      $p{message} = $self->_apply_callbacks(%p)
          if $self->{callbacks};
  
      return %p;
  }
  
  sub _log_to_outputs {
      my $self = shift;
      my %p    = @_;
  
      foreach ( keys %{ $self->{outputs} } ) {
          $p{name} = $_;
          $self->_log_to(%p);
      }
  }
  
  sub log_and_die {
      my $self = shift;
  
      my %p = $self->_prepare_message(@_);
  
      $self->_log_to_outputs(%p) if $self->would_log( $p{level} );
  
      $self->_die_with_message(%p);
  }
  
  sub log_and_croak {
      my $self = shift;
  
      $self->log_and_die( @_, carp_level => 3 );
  }
  
  sub _die_with_message {
      my $self = shift;
      my %p    = @_;
  
      my $msg = $p{message};
  
      local $Carp::CarpLevel = ( $Carp::CarpLevel || 0 ) + $p{carp_level}
          if exists $p{carp_level};
  
      Carp::croak($msg);
  }
  
  sub log_to {
      my $self = shift;
      my %p    = @_;
  
      $p{message} = $self->_apply_callbacks(%p)
          if $self->{callbacks};
  
      $self->_log_to(%p);
  }
  
  sub _log_to {
      my $self = shift;
      my %p    = @_;
      my $name = $p{name};
  
      if ( exists $self->{outputs}{$name} ) {
          $self->{outputs}{$name}->log(@_);
      }
      elsif ($^W) {
          Carp::carp(
              "Log::Dispatch::* object named '$name' not in dispatcher\n");
      }
  }
  
  sub output {
      my $self = shift;
      my $name = shift;
  
      return unless exists $self->{outputs}{$name};
  
      return $self->{outputs}{$name};
  }
  
  sub level_is_valid {
      shift;
      my $level = shift;
  
      if ( !defined $level ) {
          Carp::croak('Logging level was not provided');
      }
  
      return $CanonicalLevelNames{$level};
  }
  
  sub would_log {
      my $self  = shift;
      my $level = shift;
  
      return 0 unless $self->level_is_valid($level);
  
      foreach ( values %{ $self->{outputs} } ) {
          return 1 if $_->_should_log($level);
      }
  
      return 0;
  }
  
  sub is_debug     { $_[0]->would_log('debug') }
  sub is_info      { $_[0]->would_log('info') }
  sub is_notice    { $_[0]->would_log('notice') }
  sub is_warning   { $_[0]->would_log('warning') }
  sub is_warn      { $_[0]->would_log('warn') }
  sub is_error     { $_[0]->would_log('error') }
  sub is_err       { $_[0]->would_log('err') }
  sub is_critical  { $_[0]->would_log('critical') }
  sub is_crit      { $_[0]->would_log('crit') }
  sub is_alert     { $_[0]->would_log('alert') }
  sub is_emerg     { $_[0]->would_log('emerg') }
  sub is_emergency { $_[0]->would_log('emergency') }
  
  1;
  
  # ABSTRACT: Dispatches messages to one or more outputs
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch - Dispatches messages to one or more outputs
  
  =head1 VERSION
  
  version 2.56
  
  =head1 SYNOPSIS
  
    use Log::Dispatch;
  
    # Simple API
    #
    my $log = Log::Dispatch->new(
        outputs => [
            [ 'File',   min_level => 'debug', filename => 'logfile' ],
            [ 'Screen', min_level => 'warning' ],
        ],
    );
  
    $log->info('Blah, blah');
  
    # More verbose API
    #
    my $log = Log::Dispatch->new();
    $log->add(
        Log::Dispatch::File->new(
            name      => 'file1',
            min_level => 'debug',
            filename  => 'logfile'
        )
    );
    $log->add(
        Log::Dispatch::Screen->new(
            name      => 'screen',
            min_level => 'warning',
        )
    );
  
    $log->log( level => 'info', message => 'Blah, blah' );
  
    my $sub = sub { my %p = @_; return reverse $p{message}; };
    my $reversing_dispatcher = Log::Dispatch->new( callbacks => $sub );
  
  =head1 DESCRIPTION
  
  This module manages a set of Log::Dispatch::* output objects that can be
  logged to via a unified interface.
  
  The idea is that you create a Log::Dispatch object and then add various
  logging objects to it (such as a file logger or screen logger). Then you
  call the C<log> method of the dispatch object, which passes the message to
  each of the objects, which in turn decide whether or not to accept the
  message and what to do with it.
  
  This makes it possible to call single method and send a message to a
  log file, via email, to the screen, and anywhere else, all with very
  little code needed on your part, once the dispatching object has been
  created.
  
  =head1 METHODS
  
  This class provides the following methods:
  
  =head2 Log::Dispatch->new(...)
  
  This method takes the following parameters:
  
  =over 4
  
  =item * outputs( [ [ class, params, ... ], [ class, params, ... ], ... ] )
  
  This parameter is a reference to a list of lists. Each inner list consists of
  a class name and a set of constructor params. The class is automatically
  prefixed with 'Log::Dispatch::' unless it begins with '+', in which case the
  string following '+' is taken to be a full classname. e.g.
  
      outputs => [ [ 'File',          min_level => 'debug', filename => 'logfile' ],
                   [ '+My::Dispatch', min_level => 'info' ] ]
  
  For each inner list, a new output object is created and added to the
  dispatcher (via the C<add()> method).
  
  See L<OUTPUT CLASSES> for the parameters that can be used when creating an
  output object.
  
  =item * callbacks( \& or [ \&, \&, ... ] )
  
  This parameter may be a single subroutine reference or an array
  reference of subroutine references. These callbacks will be called in
  the order they are given and passed a hash containing the following keys:
  
   ( message => $log_message, level => $log_level )
  
  In addition, any key/value pairs passed to a logging method will be
  passed onto your callback.
  
  The callbacks are expected to modify the message and then return a
  single scalar containing that modified message. These callbacks will
  be called when either the C<log> or C<log_to> methods are called and
  will only be applied to a given message once. If they do not return
  the message then you will get no output. Make sure to return the
  message!
  
  =back
  
  =head2 $dispatch->clone()
  
  This returns a I<shallow> clone of the original object. The underlying output
  objects and callbacks are shared between the two objects. However any changes
  made to the outputs or callbacks that the object contains are not shared.
  
  =head2 $dispatch->log( level => $, message => $ or \& )
  
  Sends the message (at the appropriate level) to all the output objects that
  the dispatcher contains (by calling the C<log_to> method repeatedly).
  
  The level can be specified by name or by an integer from 0 (debug) to 7
  (critical).
  
  This method also accepts a subroutine reference as the message
  argument. This reference will be called only if there is an output
  that will accept a message of the specified level.
  
  =head2 $dispatch->debug (message), info (message), ...
  
  You may call any valid log level (including valid abbreviations) as a method
  with a single argument that is the message to be logged. This is converted
  into a call to the C<log> method with the appropriate level.
  
  For example:
  
   $log->alert('Strange data in incoming request');
  
  translates to:
  
   $log->log( level => 'alert', message => 'Strange data in incoming request' );
  
  If you pass an array to these methods, it will be stringified as is:
  
   my @array = ('Something', 'bad', 'is', 'here');
   $log->alert(@array);
  
   # is equivalent to
  
   $log->alert("@array");
  
  You can also pass a subroutine reference, just like passing one to the
  C<log()> method.
  
  =head2 $dispatch->log_and_die( level => $, message => $ or \& )
  
  Has the same behavior as calling C<log()> but calls
  C<_die_with_message()> at the end.
  
  =head2 $dispatch->log_and_croak( level => $, message => $ or \& )
  
  This method adjusts the C<$Carp::CarpLevel> scalar so that the croak
  comes from the context in which it is called.
  
  You can throw exception objects by subclassing this method.
  
  If the C<carp_level> parameter is present its value will be added to
  the current value of C<$Carp::CarpLevel>.
  
  =head2 $dispatch->log_to( name => $, level => $, message => $ )
  
  Sends the message only to the named object. Note: this will not properly
  handle a subroutine reference as the message.
  
  =head2 $dispatch->add_callback( $code )
  
  Adds a callback (like those given during construction). It is added to the end
  of the list of callbacks. Note that this can also be called on individual
  output objects.
  
  =head2 $dispatch->callbacks()
  
  Returns a list of the callbacks in a given output.
  
  =head2 $dispatch->level_is_valid( $string )
  
  Returns true or false to indicate whether or not the given string is a
  valid log level. Can be called as either a class or object method.
  
  =head2 $dispatch->would_log( $string )
  
  Given a log level, returns true or false to indicate whether or not
  anything would be logged for that log level.
  
  =head2 $dispatch->is_C<$level>
  
  There are methods for every log level: C<is_debug()>, C<is_warning()>, etc.
  
  This returns true if the logger will log a message at the given level.
  
  =head2 $dispatch->add( Log::Dispatch::* OBJECT )
  
  Adds a new L<output object|OUTPUT CLASSES> to the dispatcher. If an object
  of the same name already exists, then that object is replaced, with
  a warning if C<$^W> is true.
  
  =head2 $dispatch->remove($)
  
  Removes the object that matches the name given to the remove method.
  The return value is the object being removed or undef if no object
  matched this.
  
  =head2 $dispatch->outputs()
  
  Returns a list of output objects.
  
  =head2 $dispatch->output( $name )
  
  Returns the output object of the given name. Returns undef or an empty
  list, depending on context, if the given output does not exist.
  
  =head2 $dispatch->_die_with_message( message => $, carp_level => $ )
  
  This method is used by C<log_and_die> and will either die() or croak()
  depending on the value of C<message>: if it's a reference or it ends
  with a new line then a plain die will be used, otherwise it will
  croak.
  
  =head1 OUTPUT CLASSES
  
  An output class - e.g. L<Log::Dispatch::File> or
  L<Log::Dispatch::Screen> - implements a particular way
  of dispatching logs. Many output classes come with this distribution,
  and others are available separately on CPAN.
  
  The following common parameters can be used when creating an output class.
  All are optional. Most output classes will have additional parameters beyond
  these, see their documentation for details.
  
  =over 4
  
  =item * name ($)
  
  A name for the object (not the filename!). This is useful if you want to
  refer to the object later, e.g. to log specifically to it or remove it.
  
  By default a unique name will be generated. You should not depend on the
  form of generated names, as they may change.
  
  =item * min_level ($)
  
  The minimum L<logging level|LOG LEVELS> this object will accept. Required.
  
  =item * max_level ($)
  
  The maximum L<logging level|LOG LEVELS> this object will accept. By default
  the maximum is the highest possible level (which means functionally that the
  object has no maximum).
  
  =item * callbacks( \& or [ \&, \&, ... ] )
  
  This parameter may be a single subroutine reference or an array
  reference of subroutine references. These callbacks will be called in
  the order they are given and passed a hash containing the following keys:
  
   ( message => $log_message, level => $log_level )
  
  The callbacks are expected to modify the message and then return a
  single scalar containing that modified message. These callbacks will
  be called when either the C<log> or C<log_to> methods are called and
  will only be applied to a given message once. If they do not return
  the message then you will get no output. Make sure to return the
  message!
  
  =item * newline (0|1)
  
  If true, a callback will be added to the end of the callbacks list that adds
  a newline to the end of each message. Default is false, but some
  output classes may decide to make the default true.
  
  =back
  
  =head1 LOG LEVELS
  
  The log levels that Log::Dispatch uses are taken directly from the
  syslog man pages (except that I expanded them to full words). Valid
  levels are:
  
  =over 4
  
  =item debug
  
  =item info
  
  =item notice
  
  =item warning
  
  =item error
  
  =item critical
  
  =item alert
  
  =item emergency
  
  =back
  
  Alternately, the numbers 0 through 7 may be used (debug is 0 and emergency is
  7). The syslog standard of 'err', 'crit', and 'emerg' is also acceptable. We
  also allow 'warn' as a synonym for 'warning'.
  
  =head1 SUBCLASSING
  
  This module was designed to be easy to subclass. If you want to handle
  messaging in a way not implemented in this package, you should be able to add
  this with minimal effort. It is generally as simple as subclassing
  Log::Dispatch::Output and overriding the C<new> and C<log_message>
  methods. See the L<Log::Dispatch::Output> docs for more details.
  
  If you would like to create your own subclass for sending email then
  it is even simpler. Simply subclass L<Log::Dispatch::Email> and
  override the C<send_email> method. See the L<Log::Dispatch::Email>
  docs for more details.
  
  The logging levels that Log::Dispatch uses are borrowed from the standard
  UNIX syslog levels, except that where syslog uses partial words ("err")
  Log::Dispatch also allows the use of the full word as well ("error").
  
  =head1 RELATED MODULES
  
  =head2 Log::Dispatch::DBI
  
  Written by Tatsuhiko Miyagawa. Log output to a database table.
  
  =head2 Log::Dispatch::FileRotate
  
  Written by Mark Pfeiffer. Rotates log files periodically as part of
  its usage.
  
  =head2 Log::Dispatch::File::Stamped
  
  Written by Eric Cholet. Stamps log files with date and time
  information.
  
  =head2 Log::Dispatch::Jabber
  
  Written by Aaron Straup Cope. Logs messages via Jabber.
  
  =head2 Log::Dispatch::Tk
  
  Written by Dominique Dumont. Logs messages to a Tk window.
  
  =head2 Log::Dispatch::Win32EventLog
  
  Written by Arthur Bergman. Logs messages to the Windows event log.
  
  =head2 Log::Log4perl
  
  An implementation of Java's log4j API in Perl. Log messages can be limited by
  fine-grained controls, and if they end up being logged, both native Log4perl
  and Log::Dispatch appenders can be used to perform the actual logging
  job. Created by Mike Schilli and Kevin Goess.
  
  =head2 Log::Dispatch::Config
  
  Written by Tatsuhiko Miyagawa. Allows configuration of logging via a
  text file similar (or so I'm told) to how it is done with log4j.
  Simpler than Log::Log4perl.
  
  =head2 Log::Agent
  
  A very different API for doing many of the same things that
  Log::Dispatch does. Originally written by Raphael Manfredi.
  
  =head1 SEE ALSO
  
  L<Log::Dispatch::ApacheLog>, L<Log::Dispatch::Email>,
  L<Log::Dispatch::Email::MailSend>, L<Log::Dispatch::Email::MailSender>,
  L<Log::Dispatch::Email::MailSendmail>, L<Log::Dispatch::Email::MIMELite>,
  L<Log::Dispatch::File>, L<Log::Dispatch::File::Locked>,
  L<Log::Dispatch::Handle>, L<Log::Dispatch::Output>, L<Log::Dispatch::Screen>,
  L<Log::Dispatch::Syslog>
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 DONATIONS
  
  If you'd like to thank me for the work I've done on this module, please
  consider making a "donation" to me via PayPal. I spend a lot of free time
  creating free software, and would appreciate any support you'd care to offer.
  
  Please note that B<I am not suggesting that you must do this> in order for me
  to continue working on this particular software. I will continue to do so,
  inasmuch as I have in the past, for as long as it interests me.
  
  Similarly, a donation made in this way will probably not make me work on this
  software much more, unless I get so many donations that I can consider working
  on free software full time (let's all have a chuckle at that together).
  
  To donate, log into PayPal and send money to autarch@urth.org, or use the
  button at L<http://www.urth.org/~autarch/fs-donation.html>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 CONTRIBUTORS
  
  =for stopwords Graham Ollis Gregory Oschwald Jonathan Swartz Karen Etheridge Konrad Bucheli Olaf Alders Olivier Mengué Rohan Carly Ross Attrill Salvador Fandiño Steve Bertrand Whitney Jackson
  
  =over 4
  
  =item *
  
  Graham Ollis <plicease@cpan.org>
  
  =item *
  
  Gregory Oschwald <goschwald@maxmind.com>
  
  =item *
  
  Jonathan Swartz <swartz@pobox.com>
  
  =item *
  
  Karen Etheridge <ether@cpan.org>
  
  =item *
  
  Konrad Bucheli <kb@open.ch>
  
  =item *
  
  Olaf Alders <olaf@wundersolutions.com>
  
  =item *
  
  Olivier Mengué <dolmen@cpan.org>
  
  =item *
  
  Rohan Carly <se456@rohan.id.au>
  
  =item *
  
  Ross Attrill <ross.attrill@gmail.com>
  
  =item *
  
  Salvador Fandiño <sfandino@yahoo.com>
  
  =item *
  
  Steve Bertrand <steveb@cpan.org>
  
  =item *
  
  Whitney Jackson <whitney.jackson@baml.com>
  
  =back
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH

    $main::fatpacked{"Log/Dispatch/ApacheLog.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_APACHELOG';
  package Log::Dispatch::ApacheLog;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.56';
  
  use Log::Dispatch::Output;
  
  use base qw( Log::Dispatch::Output );
  
  use Params::Validate qw(validate);
  Params::Validate::validation_options( allow_extra => 1 );
  
  BEGIN {
      if ( $ENV{MOD_PERL} && $ENV{MOD_PERL} =~ /2\./ ) {
          require Apache2::Log;
      }
      else {
          require Apache::Log;
      }
  }
  
  sub new {
      my $proto = shift;
      my $class = ref $proto || $proto;
  
      my %p = validate( @_, { apache => { can => 'log' } } );
  
      my $self = bless {}, $class;
  
      $self->_basic_init(%p);
      $self->{apache_log} = $p{apache}->log;
  
      return $self;
  }
  
  {
      my %methods = (
          emergency => 'emerg',
          critical  => 'crit',
          warning   => 'warn',
      );
  
      sub log_message {
          my $self = shift;
          my %p    = @_;
  
          my $level = $self->_level_as_name( $p{level} );
  
          my $method = $methods{$level} || $level;
  
          $self->{apache_log}->$method( $p{message} );
      }
  }
  
  1;
  
  # ABSTRACT: Object for logging to Apache::Log objects
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::ApacheLog - Object for logging to Apache::Log objects
  
  =head1 VERSION
  
  version 2.56
  
  =head1 SYNOPSIS
  
    use Log::Dispatch;
  
    my $log = Log::Dispatch->new(
        outputs => [
            [ 'ApacheLog', apache => $r ],
        ],
    );
  
    $log->emerg('Kaboom');
  
  =head1 DESCRIPTION
  
  This module allows you to pass messages to Apache's log object,
  represented by the L<Apache::Log> class.
  
  =head1 CONSTRUCTOR
  
  The constructor takes the following parameters in addition to the standard
  parameters documented in L<Log::Dispatch::Output>:
  
  =over 4
  
  =item * apache ($)
  
  An object of either the L<Apache> or L<Apache::Server> classes. Required.
  
  =back
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH_APACHELOG

    $main::fatpacked{"Log/Dispatch/ArrayWithLimits.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_ARRAYWITHLIMITS';
  package Log::Dispatch::ArrayWithLimits;
  
  use 5.010001;
  use warnings;
  use strict;
  
  use parent qw(Log::Dispatch::Output);
  
  our $DATE = '2015-01-03'; # DATE
  our $VERSION = '0.04'; # VERSION
  
  sub new {
      my ($class, %args) = @_;
      my $self = {};
      $self->{array} = $args{array} // [];
      if (!ref($self->{array})) {
          no strict 'refs';
          say "$self->{array}";
          $self->{array} = \@{"$self->{array}"};
      }
      $self->{max_elems} = $args{max_elems} // undef;
      bless $self, $class;
      $self->_basic_init(%args);
      $self;
  }
  
  sub log_message {
      my $self = shift;
      my %args = @_;
  
      push @{$self->{array}}, $args{message};
  
      if (defined($self->{max_elems}) && @{$self->{array}} > $self->{max_elems}) {
          # splice() is not supported for threads::shared-array, so we use
          # repeated shift
          while (@{$self->{array}} > $self->{max_elems}) {
              shift @{$self->{array}};
          }
      }
  }
  
  1;
  # ABSTRACT: Log to array, with some limits applied
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::ArrayWithLimits - Log to array, with some limits applied
  
  =head1 VERSION
  
  This document describes version 0.04 of Log::Dispatch::ArrayWithLimits (from Perl distribution Log-Dispatch-ArrayWithLimits), released on 2015-01-03.
  
  =head1 SYNOPSIS
  
   use Log::Dispatch::ArrayWithLimits;
  
   my $file = Log::Dispatch::ArrayWithLimits(
       min_level     => 'info',
       array         => $ary,    # default: [], you can always refer by name e.g. 'My::array' to refer to @My::array
       max_elems     => 100,     # defaults unlimited
   );
  
   $file->log(level => 'info', message => "Your comment\n");
  
  =head1 DESCRIPTION
  
  This module functions similarly to L<Log::Dispatch::Array>, with a few
  differences:
  
  =over
  
  =item * only the messages (strings) are stored
  
  =item * allow specifying array variable name (e.g. "My::array" instead of \@My:array)
  
  This makes it possible to use in L<Log::Log4perl> configuration, which is a text
  file.
  
  =item * can apply some limits
  
  Currently only max_elems (the maximum number of elements in the array) is
  available. Future limits will be added.
  
  =back
  
  Logging to an in-process array can be useful when debugging/testing, or when you
  want to let users of your program connect to your program to request viewing the
  ogs being produced.
  
  =head1 METHODS
  
  =head2 new(%args)
  
  Constructor. This method takes a hash of parameters. The following options are
  valid: C<min_level> and C<max_level> (see L<Log::Dispatch> documentation);
  C<array> (a reference to an array, or if value is string, will be taken as name
  of array variable; this is so this module can be used/configured e.g. by
  L<Log::Log4perl> because configuration is specified via a text file),
  C<max_elems>.
  
  =head2 log_message(message => STR)
  
  Send a message to the appropriate output. Generally this shouldn't be called
  directly but should be called through the C<log()> method (in
  LLog::Dispatch::Output>).
  
  =head1 SEE ALSO
  
  L<Log::Dispatch>
  
  L<Log::Dispatch::Array>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Log-Dispatch-ArrayWithLimits>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Log-Dispatch-ArrayWithLimits>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch-ArrayWithLimits>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_DISPATCH_ARRAYWITHLIMITS

    $main::fatpacked{"Log/Dispatch/Base.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_BASE';
  package Log::Dispatch::Base;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.56';
  
  sub _get_callbacks {
      shift;
      my %p = @_;
  
      return unless exists $p{callbacks};
  
      return @{ $p{callbacks} }
          if ref $p{callbacks} eq 'ARRAY';
  
      return $p{callbacks}
          if ref $p{callbacks} eq 'CODE';
  
      return;
  }
  
  sub _apply_callbacks {
      my $self = shift;
      my %p    = @_;
  
      my $msg = delete $p{message};
      foreach my $cb ( @{ $self->{callbacks} } ) {
          $msg = $cb->( message => $msg, %p );
      }
  
      return $msg;
  }
  
  sub add_callback {
      my $self  = shift;
      my $value = shift;
  
      Carp::carp("given value $value is not a valid callback")
          unless ref $value eq 'CODE';
  
      $self->{callbacks} ||= [];
      push @{ $self->{callbacks} }, $value;
  
      return;
  }
  
  1;
  
  # ABSTRACT: Code shared by dispatch and output objects.
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::Base - Code shared by dispatch and output objects.
  
  =head1 VERSION
  
  version 2.56
  
  =head1 SYNOPSIS
  
    use Log::Dispatch::Base;
  
    ...
  
    @ISA = qw(Log::Dispatch::Base);
  
  =head1 DESCRIPTION
  
  Unless you are me, you probably don't need to know what this class
  does.
  
  =for Pod::Coverage add_callback
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH_BASE

    $main::fatpacked{"Log/Dispatch/Code.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_CODE';
  package Log::Dispatch::Code;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.56';
  
  use Log::Dispatch::Output;
  
  use base qw( Log::Dispatch::Output );
  
  use Params::Validate qw(validate CODEREF);
  Params::Validate::validation_options( allow_extra => 1 );
  
  sub new {
      my $proto = shift;
      my $class = ref $proto || $proto;
  
      my %p = validate( @_, { code => CODEREF } );
  
      my $self = bless {}, $class;
  
      $self->_basic_init(%p);
      $self->{code} = $p{code};
  
      return $self;
  }
  
  sub log_message {
      my $self = shift;
      my %p    = @_;
  
      delete $p{name};
  
      $self->{code}->(%p);
  }
  
  1;
  
  # ABSTRACT: Object for logging to a subroutine reference
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::Code - Object for logging to a subroutine reference
  
  =head1 VERSION
  
  version 2.56
  
  =head1 SYNOPSIS
  
    use Log::Dispatch;
  
    my $log = Log::Dispatch->new(
        outputs => [
            [
                'Code',
                min_level => 'emerg',
                code      => \&_log_it,
            ],
        ]
    );
  
    sub _log_it {
        my %p = @_;
  
        warn $p{message};
    }
  
  =head1 DESCRIPTION
  
  This module supplies a simple object for logging to a subroutine reference.
  
  =for Pod::Coverage new log_message
  
  =head1 CONSTRUCTOR
  
  The constructor takes the following parameters in addition to the standard
  parameters documented in L<Log::Dispatch::Output>:
  
  =over 4
  
  =item * code ($)
  
  The subroutine reference.
  
  =back
  
  =head1 HOW IT WORKS
  
  The subroutine you provide will be called with a hash of named arguments. The
  two arguments are:
  
  =over 4
  
  =item * level
  
  The log level of the message. This will be a string like "info" or "error".
  
  =item * message
  
  The message being logged.
  
  =back
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH_CODE

    $main::fatpacked{"Log/Dispatch/Dir.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_DIR';
  package Log::Dispatch::Dir;
  
  our $DATE = '2015-12-16'; # DATE
  our $VERSION = '0.14'; # VERSION
  
  use 5.010001;
  use warnings;
  use strict;
  use Log::Dispatch::Output;
  use base qw(Log::Dispatch::Output);
  
  use File::Slurp::Tiny qw(write_file);
  #use File::Stat qw(:stat); # doesn't work in all platforms?
  use Params::Validate qw(validate SCALAR CODEREF);
  use POSIX;
  
  Params::Validate::validation_options( allow_extra => 1 );
  
  sub new {
      my $proto = shift;
      my $class = ref $proto || $proto;
  
      my %p = @_;
  
      my $self = bless {}, $class;
  
      $self->_basic_init(%p);
      $self->_make_handle(%p);
  
      return $self;
  }
  
  sub _make_handle {
      my $self = shift;
  
      my %p = validate(
          @_,
          {
              dirname             => { type => SCALAR },
              permissions         => { type => SCALAR , optional => 1 },
              filename_pattern    => { type => SCALAR , optional => 1 },
              filename_sub        => { type => CODEREF, optional => 1 },
              max_size            => { type => SCALAR , optional => 1 },
              max_files           => { type => SCALAR , optional => 1 },
              max_age             => { type => SCALAR , optional => 1 },
              rotate_probability  => { type => SCALAR , optional => 1 },
          });
  
      $self->{dirname}            = $p{dirname};
      $self->{permissions}        = $p{permissions};
      $self->{filename_pattern}   = $p{filename_pattern} ||
          '%Y-%m-%d-%H%M%S.pid-%{pid}.%{ext}';
      $self->{filename_sub}       = $p{filename_sub};
      $self->{max_size}           = $p{max_size};
      $self->{max_files}          = $p{max_files};
      $self->{max_age}            = $p{max_age};
      $self->{rotate_probability} = ($p{rotate_probability}) || 0.25;
      $self->_open_dir();
  }
  
  sub _open_dir {
      my $self = shift;
  
      unless (-e $self->{dirname}) {
          my $perm = $self->{permissions} // 0755;
          mkdir($self->{dirname}, $perm)
              or die "Cannot create directory `$self->{dirname}: $!";
          $self->{chmodded} = 1;
      }
  
      unless (-d $self->{dirname}) {
          die "$self->{dirname} is not a directory";
      }
  
      if ($self->{permissions} && ! $self->{chmodded}) {
          chmod $self->{permissions}, $self->{dirname}
              or die "Cannot chmod $self->{dirname} to $self->{permissions}: $!";
          $self->{chmodded} = 1;
      }
  }
  
  my $default_ext = "log";
  my $libmagic;
  
  sub _resolve_pattern {
      my ($self, $p) = @_;
      my $pat = $self->{filename_pattern};
      my $now = time;
  
      my @vars = qw(Y y m d H M S z Z %);
      my $strftime = POSIX::strftime(join("|", map {"%$_"} @vars),
                                     localtime($now));
      my %vars;
      my $i = 0;
      for (split /\|/, $strftime) {
          $vars{ $vars[$i] } = $_;
          $i++;
      }
  
      push @vars, "{pid}";
      $vars{"{pid}"} = $$;
  
      push @vars, "{ext}";
      $vars{"{ext}"} = sub {
          my $p = shift;
          unless (defined $libmagic) {
              if (eval { require File::LibMagic; require Media::Type::Simple }) {
                  $libmagic = File::LibMagic->new;
              } else {
                  print "err = $@\n";
                  $libmagic = 0;
              }
          }
          return $default_ext unless $libmagic;
          my $type = $libmagic->checktype_contents($p->{message} // '');
          return $default_ext unless $type;
          $type =~ s/[; ].*//; # only get the mime type
          my $ext = Media::Type::Simple::ext_from_type($type);
          ($ext) = $ext =~ /(.+)/ if $ext; # untaint
          return $ext || $default_ext;
      };
  
      my $res = $pat;
      $res =~ s[%(\{\w+\}|\S)]
               [defined($vars{$1}) ?
                    ( ref($vars{$1}) eq 'CODE' ?
                          $vars{$1}->($p) : $vars{$1} ) :
                              die("Invalid filename_pattern `%$1'")]eg;
      $res;
  }
  
  sub log_message {
      my $self = shift;
      my %p = @_;
  
      my $filename0 = defined($self->{filename_sub}) ?
          $self->{filename_sub}->(%p) :
          $self->_resolve_pattern(\%p);
  
      my $filename = $filename0;
      my $i = 0;
      while (-e "$self->{dirname}/$filename") {
          $i++;
          $filename = "$filename0.$i";
      }
  
      write_file("$self->{dirname}/$filename", $p{message});
      $self->_rotate(\%p) if (rand() < $self->{rotate_probability});
  }
  
  sub _rotate {
      my ($self, $p) = @_;
  
      my $ms = $self->{max_size};
      my $mf = $self->{max_files};
      my $ma = $self->{max_age};
  
      return unless (defined($ms) || defined($mf) || defined($ma));
  
      my @entries;
      my $d = $self->{dirname};
      my $now = time;
      local *DH;
      opendir DH, $self->{dirname};
      while (my $e = readdir DH) {
          ($e) = $e =~ /(.*)/s; # untaint
          next if $e eq '.' || $e eq '..';
          my @st = stat "$d/$e";
          push @entries, {name => $e, age => ($now-$st[10]), size => $st[7]};
      }
      closedir DH;
  
      @entries = sort {$a->{age} <=> $b->{age}} @entries;
  
      # max files
      if (defined($mf) && @entries > $mf) {
          unlink "$d/$_->{name}" for (splice @entries, $mf);
      }
  
      # max age
      if (defined($ma)) {
          my $i = 0;
          for (@entries) {
              if ($_->{age} > $ma) {
                  unlink "$d/$_->{name}" for (splice @entries, $i);
                  last;
              }
              $i++;
          }
      }
  
      # max size
      if (defined($ms)) {
          my $i = 0;
          my $tot_size = 0;
          for (@entries) {
              $tot_size += $_->{size};
              if ($tot_size > $ms) {
                  unlink "$d/$_->{name}" for (splice @entries, $i);
                  last;
              }
              $i++;
          }
      }
  }
  
  1;
  # ABSTRACT: Log messages to separate files in a directory, with rotate options
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::Dir - Log messages to separate files in a directory, with rotate options
  
  =head1 VERSION
  
  This document describes version 0.14 of Log::Dispatch::Dir (from Perl distribution Log-Dispatch-Dir), released on 2015-12-16.
  
  =head1 SYNOPSIS
  
      use Log::Dispatch::Dir;
  
      my $dir = Log::Dispatch::Dir->new(
          name => 'dir1',
          min_level => 'info',
          dirname => 'somedir.log',
          filename_pattern => '%Y-%m-%d-%H%M%S.%{ext}',
      );
      $dir->log( level => 'info', message => 'your comment\n" );
  
      # limit total size
      my $dir = Log::Dispatch::Dir->new(
          # ...
          max_size => 10*1024*1024, # 10MB
      );
  
      # limit number of files
      my $dir = Log::Dispatch::Dir->new(
          # ...
          max_files => 1000,
      );
  
      # limit oldest file
      my $dir = Log::Dispatch::Dir->new(
          # ...
          max_age => 10*24*3600, # 10 days
      );
  
  =head1 DESCRIPTION
  
  This module provides a simple object for logging to directories under the
  Log::Dispatch::* system, and automatically rotating them according to different
  constraints. Each message will be logged to a separate file the directory.
  
  Logging to separate files can be useful for example when dumping whole network
  responses (like HTTP::Response content).
  
  =head1 METHODS
  
  =head2 new(%p)
  
  This method takes a hash of parameters. The following options are valid:
  
  =over 4
  
  =item * name ($)
  
  The name of the object (not the dirname!).  Required.
  
  =item * min_level ($)
  
  The minimum logging level this object will accept. See the Log::Dispatch
  documentation on L<Log Levels|Log::Dispatch/"Log Levels"> for more information.
  Required.
  
  =item * max_level ($)
  
  The maximum logging level this obejct will accept. See the Log::Dispatch
  documentation on L<Log Levels|Log::Dispatch/"Log Levels"> for more information.
  This is not required. By default the maximum is the highest possible level
  (which means functionally that the object has no maximum).
  
  =item * dirname ($)
  
  The directory to write to.
  
  =item * permissions ($)
  
  If the directory does not already exist, the permissions that it should be
  created with. Optional. The argument passed must be a valid octal value, such as
  0700 or the constants available from Fcntl, like S_IRUSR|S_IWUSR|S_IXUSR.
  
  See L<perlfunc/chmod> for more on potential traps when passing octal values
  around. Most importantly, remember that if you pass a string that looks like an
  octal value, like this:
  
   my $mode = '0644';
  
  Then the resulting directory will end up with permissions like this:
  
   --w----r-T
  
  which is probably not what you want.
  
  =item * callbacks( \& or [ \&, \&, ... ] )
  
  This parameter may be a single subroutine reference or an array reference of
  subroutine references. These callbacks will be called in the order they are
  given and passed a hash containing the following keys:
  
   ( message => $log_message, level => $log_level )
  
  The callbacks are expected to modify the message and then return a single scalar
  containing that modified message. These callbacks will be called when either the
  C<log> or C<log_to> methods are called and will only be applied to a given
  message once.
  
  =item * filename_pattern ($)
  
  Names to give to each file, expressed in pattern a la strftime()'s. Optional.
  Default is '%Y-%m-%d-%H%M%S.pid-%{pid}.%{ext}'. Time is expressed in local time.
  
  If file of the same name already exists, a suffix ".1", ".2", and so on will be
  appended.
  
  Available pattern:
  
  =over 8
  
  =item %Y - 4-digit year number, e.g. 2009
  
  =item %y - 2-digit year number, e.g. 09 for year 2009
  
  =item %m - 2-digit month, e.g. 04 for April
  
  =item %d - 2-digit day of month, e.g. 28
  
  =item %H - 2-digit hour, e.g. 01
  
  =item %M - 2-digit minute, e.g. 57
  
  =item %S - 2-digit second, e.g. 59
  
  =item %z - the time zone as hour offset from GMT
  
  =item %Z - the time zone or name or abbreviation
  
  =item %{pid} - Process ID
  
  =item %{ext} - Guessed file extension
  
  Try to detect appropriate file extension using L<File::LibMagic>. For example,
  if log message looks like an HTML document, then 'html'. If File::LibMagic is
  not available or type cannot be detected, defaults to 'log'.
  
  =item %% - literal '%' character
  
  =back
  
  =item * filename_sub (\&)
  
  A more generic mechanism for B<filename_pattern>. If B<filename_sub> is given,
  B<filename_pattern> will be ignored. The code will be called with the same
  arguments as log_message() and is expected to return a filename. Will die if
  code returns undef.
  
  =item * max_size ($)
  
  Maximum total size of files, in bytes. After the size is surpassed, oldest files
  (based on ctime) will be deleted. Optional. Default is undefined, which means
  unlimited.
  
  =item * max_files ($)
  
  Maximum number of files. After this number is surpassed, oldest files
  (based on ctime) will be deleted. Optional. Default is undefined, which means
  unlimited.
  
  =item * max_age ($)
  
  Maximum age of files (based on ctime), in seconds. After the age is surpassed,
  files older than this age will be deleted. Optional. Default is undefined, which
  means unlimited.
  
  =item * rotate_probability ($)
  
  A number between 0 and 1 which specifies the probability that rotate()
  will be called after each log_message(). This is a balance between performance
  and rotate size accuracy. 1 means always rotate, 0 means never rotate. Optional.
  Default is 0.25.
  
  =back
  
  =head2 log_message(message => $)
  
  Sends a message to the appropriate output. Generally this shouldn't be called
  directly but should be called through the C<log()> method (in
  Log::Dispatch::Output).
  
  =head1 SEE ALSO
  
  L<Log::Dispatch>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Log-Dispatch-Dir>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Log-Dispatch-Dir>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch-Dir>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_DISPATCH_DIR

    $main::fatpacked{"Log/Dispatch/Email.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_EMAIL';
  package Log::Dispatch::Email;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.56';
  
  use Log::Dispatch::Output;
  
  use base qw( Log::Dispatch::Output );
  
  use Devel::GlobalDestruction qw( in_global_destruction );
  use Params::Validate qw(validate SCALAR ARRAYREF BOOLEAN);
  Params::Validate::validation_options( allow_extra => 1 );
  
  # need to untaint this value
  my ($program) = $0 =~ /(.+)/;
  
  sub new {
      my $proto = shift;
      my $class = ref $proto || $proto;
  
      my %p = validate(
          @_, {
              subject => {
                  type    => SCALAR,
                  default => "$program: log email"
              },
              to   => { type => SCALAR | ARRAYREF },
              from => {
                  type     => SCALAR,
                  optional => 1
              },
              buffered => {
                  type    => BOOLEAN,
                  default => 1
              },
          }
      );
  
      my $self = bless {}, $class;
  
      $self->_basic_init(%p);
  
      $self->{subject} = $p{subject} || "$0: log email";
      $self->{to} = ref $p{to} ? $p{to} : [ $p{to} ];
      $self->{from} = $p{from};
  
      # Default to buffered for obvious reasons!
      $self->{buffered} = $p{buffered};
  
      $self->{buffer} = [] if $self->{buffered};
  
      return $self;
  }
  
  sub log_message {
      my $self = shift;
      my %p    = @_;
  
      if ( $self->{buffered} ) {
          push @{ $self->{buffer} }, $p{message};
      }
      else {
          $self->send_email(@_);
      }
  }
  
  sub send_email {
      my $self  = shift;
      my $class = ref $self;
  
      die "The send_email method must be overridden in the $class subclass";
  }
  
  sub flush {
      my $self = shift;
  
      if ( $self->{buffered} && @{ $self->{buffer} } ) {
          my $message = join '', @{ $self->{buffer} };
  
          $self->send_email( message => $message );
          $self->{buffer} = [];
      }
  }
  
  sub DESTROY {
      my $self = shift;
  
      if (   in_global_destruction()
          && $self->{buffered}
          && @{ $self->{buffer} } ) {
  
          my $name  = $self->name();
          my $class = ref $self;
          my $message
              = "Log messages for the $name output (a $class object) remain unsent but the program is terminating.\n";
          $message .= "The messages are:\n";
          $message .= "  $_\n" for @{ $self->{buffer} };
      }
      else {
          $self->flush();
      }
  }
  
  1;
  
  # ABSTRACT: Base class for objects that send log messages via email
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::Email - Base class for objects that send log messages via email
  
  =head1 VERSION
  
  version 2.56
  
  =head1 SYNOPSIS
  
    package Log::Dispatch::Email::MySender;
  
    use Log::Dispatch::Email;
    use base qw( Log::Dispatch::Email );
  
    sub send_email {
        my $self = shift;
        my %p    = @_;
  
        # Send email somehow. Message is in $p{message}
    }
  
  =head1 DESCRIPTION
  
  This module should be used as a base class to implement
  Log::Dispatch::* objects that send their log messages via email.
  Implementing a subclass simply requires the code shown in the
  L<SYNOPSIS> with a real implementation of the C<send_email()> method.
  
  =for Pod::Coverage new log_message
  
  =head1 CONSTRUCTOR
  
  The constructor takes the following parameters in addition to the standard
  parameters documented in L<Log::Dispatch::Output>:
  
  =over 4
  
  =item * subject ($)
  
  The subject of the email messages which are sent. Defaults to "$0:
  log email"
  
  =item * to ($ or \@)
  
  Either a string or a list reference of strings containing email
  addresses. Required.
  
  =item * from ($)
  
  A string containing an email address. This is optional and may not
  work with all mail sending methods.
  
  =item * buffered (0 or 1)
  
  This determines whether the object sends one email per message it is
  given or whether it stores them up and sends them all at once. The
  default is to buffer messages.
  
  =back
  
  =head1 METHODS
  
  This class provides the following methods:
  
  =head2 $email->send_email(%p)
  
  This is the method that must be subclassed. For now the only
  parameter in the hash is 'message'.
  
  =head2 $email->flush
  
  If the object is buffered, then this method will call the
  C<send_email()> method to send the contents of the buffer and then
  clear the buffer.
  
  =head2 $email->DESTROY
  
  On destruction, the object will call C<flush()> to send any pending
  email.
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH_EMAIL

    $main::fatpacked{"Log/Dispatch/Email/MIMELite.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_EMAIL_MIMELITE';
  package Log::Dispatch::Email::MIMELite;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.56';
  
  use Log::Dispatch::Email;
  
  use base qw( Log::Dispatch::Email );
  
  use MIME::Lite;
  
  sub send_email {
      my $self = shift;
      my %p    = @_;
  
      my %mail = (
          To      => ( join ',', @{ $self->{to} } ),
          Subject => $self->{subject},
          Type    => 'TEXT',
          Data    => $p{message},
      );
  
      $mail{From} = $self->{from} if defined $self->{from};
  
      local $?;
      unless ( MIME::Lite->new(%mail)->send ) {
          warn "Error sending mail with MIME::Lite";
      }
  }
  
  1;
  
  # ABSTRACT: Subclass of Log::Dispatch::Email that uses the MIME::Lite module
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::Email::MIMELite - Subclass of Log::Dispatch::Email that uses the MIME::Lite module
  
  =head1 VERSION
  
  version 2.56
  
  =head1 SYNOPSIS
  
    use Log::Dispatch;
  
    my $log = Log::Dispatch->new(
        outputs => [
            [
                'Email::MIMELite',
                min_level => 'emerg',
                to        => [qw( foo@example.com bar@example.org )],
                subject   => 'Big error!'
            ]
        ],
    );
  
    $log->emerg("Something bad is happening");
  
  =head1 DESCRIPTION
  
  This is a subclass of L<Log::Dispatch::Email> that implements the
  send_email method using the L<MIME::Lite> module.
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH_EMAIL_MIMELITE

    $main::fatpacked{"Log/Dispatch/Email/MailSend.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_EMAIL_MAILSEND';
  package Log::Dispatch::Email::MailSend;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.56';
  
  use Log::Dispatch::Email;
  
  use base qw( Log::Dispatch::Email );
  
  use Mail::Send;
  
  sub send_email {
      my $self = shift;
      my %p    = @_;
  
      my $msg = Mail::Send->new;
  
      $msg->to( join ',', @{ $self->{to} } );
      $msg->subject( $self->{subject} );
  
      # Does this ever work for this module?
      $msg->set( 'From', $self->{from} ) if $self->{from};
  
      local ( $?, $@, $SIG{__DIE__} );
      eval {
          my $fh = $msg->open
              or die "Cannot open handle to mail program";
  
          $fh->print( $p{message} )
              or die "Cannot print message to mail program handle";
  
          $fh->close
              or die "Cannot close handle to mail program";
      };
  
      warn $@ if $@;
  }
  
  1;
  
  # ABSTRACT: Subclass of Log::Dispatch::Email that uses the Mail::Send module
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::Email::MailSend - Subclass of Log::Dispatch::Email that uses the Mail::Send module
  
  =head1 VERSION
  
  version 2.56
  
  =head1 SYNOPSIS
  
    use Log::Dispatch;
  
    my $log = Log::Dispatch->new(
        outputs => [
            [
                'Email::MailSend',
                min_level => 'emerg',
                to        => [qw( foo@example.com bar@example.org )],
                subject   => 'Big error!'
            ]
        ],
    );
  
    $log->emerg("Something bad is happening");
  
  =head1 DESCRIPTION
  
  This is a subclass of L<Log::Dispatch::Email> that implements the send_email
  method using the L<Mail::Send> module.
  
  =head1 CHANGING HOW MAIL IS SENT
  
  Since L<Mail::Send> is a subclass of L<Mail::Mailer>, you can change
  how mail is sent from this module by simply C<use>ing L<Mail::Mailer>
  in your code before mail is sent. For example, to send mail via smtp,
  you could do:
  
    use Mail::Mailer 'smtp', Server => 'foo.example.com';
  
  For more details, see the L<Mail::Mailer> docs.
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH_EMAIL_MAILSEND

    $main::fatpacked{"Log/Dispatch/Email/MailSender.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_EMAIL_MAILSENDER';
  package Log::Dispatch::Email::MailSender;
  
  # By: Joseph Annino
  # (c) 2002
  # Licensed under the same terms as Perl
  #
  
  use strict;
  use warnings;
  
  our $VERSION = '2.56';
  
  use Log::Dispatch::Email;
  
  use base qw( Log::Dispatch::Email );
  
  use Mail::Sender ();
  
  sub new {
      my $proto = shift;
      my $class = ref $proto || $proto;
  
      my %p = @_;
  
      my $smtp = delete $p{smtp} || 'localhost';
      my $port = delete $p{port} || '25';
  
      my $authid       = delete $p{authid};
      my $authpwd      = delete $p{authpwd};
      my $auth         = delete $p{auth};
      my $tls_required = delete $p{tls_required};
      my $replyto      = delete $p{replyto};
      my $fake_from    = delete $p{fake_from};
  
      my $self = $class->SUPER::new(%p);
  
      $self->{smtp} = $smtp;
      $self->{port} = $port;
  
      $self->{authid}       = $authid;
      $self->{authpwd}      = $authpwd;
      $self->{auth}         = $auth;
      $self->{tls_required} = $tls_required;
  
      $self->{fake_from} = $fake_from;
      $self->{replyto}   = $replyto;
  
      return $self;
  }
  
  sub send_email {
      my $self = shift;
      my %p    = @_;
  
      local ( $?, $@, $SIG{__DIE__} );
      eval {
          my $sender = Mail::Sender->new(
              {
                  from => $self->{from} || 'LogDispatch@foo.bar',
                  fake_from    => $self->{fake_from},
                  replyto      => $self->{replyto},
                  to           => ( join ',', @{ $self->{to} } ),
                  subject      => $self->{subject},
                  smtp         => $self->{smtp},
                  port         => $self->{port},
                  authid       => $self->{authid},
                  authpwd      => $self->{authpwd},
                  auth         => $self->{auth},
                  tls_required => $self->{tls_required},
  
                  #debug => \*STDERR,
              }
          );
  
          die "Error sending mail ($sender): $Mail::Sender::Error"
              unless ref $sender;
  
          ref $sender->MailMsg( { msg => $p{message} } )
              or die "Error sending mail: $Mail::Sender::Error";
      };
  
      warn $@ if $@;
  }
  
  1;
  
  # ABSTRACT: Subclass of Log::Dispatch::Email that uses the Mail::Sender module
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::Email::MailSender - Subclass of Log::Dispatch::Email that uses the Mail::Sender module
  
  =head1 VERSION
  
  version 2.56
  
  =head1 SYNOPSIS
  
    use Log::Dispatch;
  
    my $log = Log::Dispatch->new(
        outputs => [
            [
                'Email::MailSender',
                min_level => 'emerg',
                to        => [qw( foo@example.com bar@example.org )],
                subject   => 'Big error!'
            ]
        ],
    );
  
    $log->emerg("Something bad is happening");
  
  =head1 DESCRIPTION
  
  This is a subclass of L<Log::Dispatch::Email> that implements the send_email
  method using the L<Mail::Sender> module.
  
  =head1 CONSTRUCTOR
  
  The constructor takes the following parameters in addition to the parameters
  documented in L<Log::Dispatch::Output> and L<Log::Dispatch::Email>:
  
  =over 4
  
  =item * smtp ($)
  
  The smtp server to connect to. This defaults to "localhost".
  
  =item * port ($)
  
  The port to use when connecting. This defaults to 25.
  
  =item * auth ($)
  
  Optional. The SMTP authentication protocol to use to login to the server. At
  the time of writing Mail::Sender only supports LOGIN, PLAIN, CRAM-MD5 and
  NTLM.
  
  Some protocols have module dependencies. CRAM-MD5 depends on Digest::HMAC_MD5
  and NTLM on Authen::NTLM.
  
  =item * authid ($)
  
  Optional. The username used to login to the server.
  
  =item * authpwd ($)
  
  Optional. The password used to login to the server.
  
  =item * tls_required ($)
  
  Optional. If you set this option to a true value, Mail::Sender will fail
  whenever it's unable to use TLS.
  
  =item * fake_from ($)
  
  The From address that will be shown in headers. If not specified we use the
  value of from.
  
  =item * replyto ($)
  
  The reply-to address.
  
  =back
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH_EMAIL_MAILSENDER

    $main::fatpacked{"Log/Dispatch/Email/MailSendmail.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_EMAIL_MAILSENDMAIL';
  package Log::Dispatch::Email::MailSendmail;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.56';
  
  use Log::Dispatch::Email;
  
  use base qw( Log::Dispatch::Email );
  
  use Mail::Sendmail ();
  
  sub send_email {
      my $self = shift;
      my %p    = @_;
  
      my %mail = (
          To      => ( join ',', @{ $self->{to} } ),
          Subject => $self->{subject},
          Message => $p{message},
  
          # Mail::Sendmail insists on having this parameter.
          From => $self->{from} || 'LogDispatch@foo.bar',
      );
  
      local $?;
      unless ( Mail::Sendmail::sendmail(%mail) ) {
          warn "Error sending mail: $Mail::Sendmail::error";
      }
  }
  
  1;
  
  # ABSTRACT: Subclass of Log::Dispatch::Email that uses the Mail::Sendmail module
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::Email::MailSendmail - Subclass of Log::Dispatch::Email that uses the Mail::Sendmail module
  
  =head1 VERSION
  
  version 2.56
  
  =head1 SYNOPSIS
  
    use Log::Dispatch;
  
    my $log = Log::Dispatch->new(
        outputs => [
            [
                'Email::MailSendmail',
                min_level => 'emerg',
                to        => [qw( foo@example.com bar@example.org )],
                subject   => 'Big error!'
            ]
        ],
    );
  
    $log->emerg("Something bad is happening");
  
  =head1 DESCRIPTION
  
  This is a subclass of L<Log::Dispatch::Email> that implements the
  send_email method using the L<Mail::Sendmail> module.
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH_EMAIL_MAILSENDMAIL

    $main::fatpacked{"Log/Dispatch/File.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_FILE';
  package Log::Dispatch::File;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.56';
  
  use Log::Dispatch::Output;
  
  use base qw( Log::Dispatch::Output );
  
  use Params::Validate qw(validate SCALAR BOOLEAN);
  Params::Validate::validation_options( allow_extra => 1 );
  
  use Scalar::Util qw( openhandle );
  
  # Prevents death later on if IO::File can't export this constant.
  *O_APPEND = \&APPEND unless defined &O_APPEND;
  
  sub APPEND {0}
  
  sub new {
      my $proto = shift;
      my $class = ref $proto || $proto;
  
      my %p = @_;
  
      my $self = bless {}, $class;
  
      $self->_basic_init(%p);
      $self->_make_handle;
  
      return $self;
  }
  
  sub _basic_init {
      my $self = shift;
  
      $self->SUPER::_basic_init(@_);
  
      my %p = validate(
          @_, {
              filename => { type => SCALAR },
              mode     => {
                  type    => SCALAR,
                  default => '>'
              },
              binmode => {
                  type    => SCALAR,
                  default => undef
              },
              autoflush => {
                  type    => BOOLEAN,
                  default => 1
              },
              close_after_write => {
                  type    => BOOLEAN,
                  default => 0
              },
              permissions => {
                  type     => SCALAR,
                  optional => 1
              },
              syswrite => {
                  type    => BOOLEAN,
                  default => 0
              },
          }
      );
  
      $self->{filename}    = $p{filename};
      $self->{binmode}     = $p{binmode};
      $self->{autoflush}   = $p{autoflush};
      $self->{close}       = $p{close_after_write};
      $self->{permissions} = $p{permissions};
      $self->{syswrite}    = $p{syswrite};
  
      if ( $self->{close} ) {
          $self->{mode} = '>>';
      }
      elsif (
             exists $p{mode}
          && defined $p{mode}
          && (
              $p{mode} =~ /^(?:>>|append)$/
              || (   $p{mode} =~ /^\d+$/
                  && $p{mode} == O_APPEND() )
          )
          ) {
          $self->{mode} = '>>';
      }
      else {
          $self->{mode} = '>';
      }
  }
  
  sub _make_handle {
      my $self = shift;
  
      $self->_open_file() unless $self->{close};
  }
  
  sub _open_file {
      my $self = shift;
  
      open my $fh, $self->{mode}, $self->{filename}
          or die "Cannot write to '$self->{filename}': $!";
  
      if ( $self->{autoflush} ) {
          my $oldfh = select $fh;
          $| = 1;
          select $oldfh;
      }
  
      if ( $self->{permissions}
          && !$self->{chmodded} ) {
          my $current_mode = ( stat $self->{filename} )[2] & 07777;
          if ( $current_mode ne $self->{permissions} ) {
              chmod $self->{permissions}, $self->{filename}
                  or die
                  "Cannot chmod $self->{filename} to $self->{permissions}: $!";
          }
  
          $self->{chmodded} = 1;
      }
  
      if ( $self->{binmode} ) {
          binmode $fh, $self->{binmode};
      }
  
      $self->{fh} = $fh;
  }
  
  sub log_message {
      my $self = shift;
      my %p    = @_;
  
      if ( $self->{close} ) {
          $self->_open_file;
      }
  
      my $fh = $self->{fh};
  
      if ( $self->{syswrite} ) {
          defined syswrite( $fh, $p{message} )
              or die "Cannot write to '$self->{filename}': $!";
      }
      else {
          print $fh $p{message}
              or die "Cannot write to '$self->{filename}': $!";
      }
  
      if ( $self->{close} ) {
          close $fh
              or die "Cannot close '$self->{filename}': $!";
          delete $self->{fh};
      }
  }
  
  sub DESTROY {
      my $self = shift;
  
      if ( $self->{fh} ) {
          my $fh = $self->{fh};
          close $fh if openhandle($fh);
      }
  }
  
  1;
  
  # ABSTRACT: Object for logging to files
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::File - Object for logging to files
  
  =head1 VERSION
  
  version 2.56
  
  =head1 SYNOPSIS
  
    use Log::Dispatch;
  
    my $log = Log::Dispatch->new(
        outputs => [
            [
                'File',
                min_level => 'info',
                filename  => 'Somefile.log',
                mode      => '>>',
                newline   => 1
            ]
        ],
    );
  
    $log->emerg("I've fallen and I can't get up");
  
  =head1 DESCRIPTION
  
  This module provides a simple object for logging to files under the
  Log::Dispatch::* system.
  
  Note that a newline will I<not> be added automatically at the end of a message
  by default. To do that, pass C<< newline => 1 >>.
  
  =for Pod::Coverage new log_message
  
  =head1 CONSTRUCTOR
  
  The constructor takes the following parameters in addition to the standard
  parameters documented in L<Log::Dispatch::Output>:
  
  =over 4
  
  =item * filename ($)
  
  The filename to be opened for writing.
  
  =item * mode ($)
  
  The mode the file should be opened with. Valid options are 'write',
  '>', 'append', '>>', or the relevant constants from Fcntl. The
  default is 'write'.
  
  =item * binmode ($)
  
  A layer name to be passed to binmode, like ":encoding(UTF-8)" or ":raw".
  
  =item * close_after_write ($)
  
  Whether or not the file should be closed after each write. This
  defaults to false.
  
  If this is true, then the mode will always be append, so that the file is not
  re-written for each new message.
  
  =item * autoflush ($)
  
  Whether or not the file should be autoflushed. This defaults to true.
  
  =item * syswrite ($)
  
  Whether or not to perform the write using L<perlfunc/syswrite>(),
  as opposed to L<perlfunc/print>(). This defaults to false.
  The usual caveats and warnings as documented in L<perlfunc/syswrite> apply.
  
  =item * permissions ($)
  
  If the file does not already exist, the permissions that it should
  be created with. Optional. The argument passed must be a valid
  octal value, such as 0600 or the constants available from Fcntl, like
  S_IRUSR|S_IWUSR.
  
  See L<perlfunc/chmod> for more on potential traps when passing octal
  values around. Most importantly, remember that if you pass a string
  that looks like an octal value, like this:
  
   my $mode = '0644';
  
  Then the resulting file will end up with permissions like this:
  
   --w----r-T
  
  which is probably not what you want.
  
  =back
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH_FILE

    $main::fatpacked{"Log/Dispatch/File/Locked.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_FILE_LOCKED';
  package Log::Dispatch::File::Locked;
  
  use strict;
  use warnings;
  
  use base qw( Log::Dispatch::File );
  
  our $VERSION = '2.56';
  
  use Fcntl qw(:DEFAULT :flock);
  
  sub log_message {
      my $self = shift;
      my %p    = @_;
  
      if ( $self->{close} ) {
          $self->_open_file;
      }
  
      my $fh = $self->{fh};
  
      flock( $fh, LOCK_EX )
          or die "Cannot lock '$self->{filename}' for writing: $!";
  
      # just in case there was an append while we waited for the lock
      seek( $fh, 0, 2 )
          or die "Cannot seek to end of '$self->{filename}': $!";
  
      if ( $self->{syswrite} ) {
          defined syswrite( $fh, $p{message} )
              or die "Cannot write to '$self->{filename}': $!";
      }
      else {
          print $fh $p{message}
              or die "Cannot write to '$self->{filename}': $!";
      }
  
      flock( $fh, LOCK_UN ) or die "Cannot unlock '$self->{filename}'";
      if ( $self->{close} ) {
          close $fh
              or die "Cannot close '$self->{filename}': $!";
          delete $self->{fh};
      }
  }
  
  1;
  
  # ABSTRACT: Subclass of Log::Dispatch::File to facilitate locking
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::File::Locked - Subclass of Log::Dispatch::File to facilitate locking
  
  =head1 VERSION
  
  version 2.56
  
  =head1 SYNOPSIS
  
    use Log::Dispatch;
  
    my $log = Log::Dispatch->new(
        outputs => [
            [
                'File::Locked',
                min_level => 'info',
                filename  => 'Somefile.log',
                mode      => '>>',
                newline   => 1
            ]
        ],
    );
  
    $log->emerg("I've fallen and I can't get up");
  
  =head1 DESCRIPTION
  
  This module acts exactly like L<Log::Dispatch::File> except that it
  obtains an exclusive lock on the file while opening it.
  
  Note that if you are using this output because you want to write to a file
  from multiple processes, you should open the file with the append C<mode>
  (C<<< >> >>>), or else it's quite likely that one process will overwrite
  another.
  
  =head1 SEE ALSO
  
  L<perlfunc/flock>
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH_FILE_LOCKED

    $main::fatpacked{"Log/Dispatch/FileWriteRotate.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_FILEWRITEROTATE';
  package Log::Dispatch::FileWriteRotate;
  
  our $DATE = '2016-10-02'; # DATE
  our $VERSION = '0.05'; # VERSION
  
  use 5.010001;
  use warnings;
  use strict;
  
  use File::Write::Rotate;
  use Log::Dispatch::Output;
  use base qw(Log::Dispatch::Output);
  
  sub new {
      my $class = shift;
      my $self = bless {}, $class;
      my %args = @_;
      $self->_basic_init(%args);
      $self->_make_handle(%args);
  
      $self;
  }
  
  sub _make_handle {
      my $self = shift;
      my %args = @_;
  
      for (keys %args) {
          # XXX hook_*
          delete $args{$_} unless /\A(
                                       dir|prefix|suffix|period|size|histories|
                                       binmode|buffer_size|lock_mode|
                                       rotate_probability
                                   )\z/x;
      }
      $self->{_fwr} = File::Write::Rotate->new(%args);
  }
  
  sub log_message {
      my $self = shift;
      my %args = @_;
  
      $self->{_fwr}->write($args{message});
  }
  
  1;
  # ABSTRACT: Log to files that archive/rotate themselves, w/ File::Write::Rotate
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::FileWriteRotate - Log to files that archive/rotate themselves, w/ File::Write::Rotate
  
  =head1 VERSION
  
  This document describes version 0.05 of Log::Dispatch::FileWriteRotate (from Perl distribution Log-Dispatch-FileWriteRotate), released on 2016-10-02.
  
  =head1 SYNOPSIS
  
   use Log::Dispatch::FileWriteRotate;
  
   my $file = Log::Dispatch::FileWriteRotate(
       min_level => 'info',
  
       # will be passed to File::Write::Rotate
       dir       => '/var/log',
       prefix    => 'myapp',
       suffix    => '.log',
       period    => 'monthly',
       size      => 25*1024*1024,
       histories => 12,
   );
  
   $file->log(level => 'info', message => "Your comment\n");
  
  =head1 DESCRIPTION
  
  This module functions similarly to L<Log::Dispatch::FileRotate>, but uses
  L<File::Write::Rotate> as backend, thus interoperates more easily with other
  modules which use File::Write::Rotate as backend, e.g.
  L<Tie::Handle::FileWriteRotate> or L<Process::Govern>.
  
  =head1 METHODS
  
  =head2 new(%args)
  
  Constructor. This method takes a hash of parameters. The following options are
  valid: C<min_level> and C<max_level> (see L<Log::Dispatch> documentation);
  C<dir>, C<prefix>, C<suffix>, C<period>, C<size>, and C<histories> (see
  L<File::Write::Rotate>).
  
  =head2 log_message(message => STR)
  
  Send a message to the appropriate output. Generally this shouldn't be called
  directly but should be called through the C<log()> method (in
  LLog::Dispatch::Output>).
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Log-Dispatch-FileWriteRotate>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Log-Dispatch-FileWriteRotate>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch-FileWriteRotate>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Log::Dispatch>
  
  L<File::Write::Rotate>
  
  L<Log::Dispatch::FileRotate>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
LOG_DISPATCH_FILEWRITEROTATE

    $main::fatpacked{"Log/Dispatch/Handle.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_HANDLE';
  package Log::Dispatch::Handle;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.56';
  
  use Log::Dispatch::Output;
  
  use base qw( Log::Dispatch::Output );
  
  use Params::Validate qw(validate SCALAR ARRAYREF BOOLEAN);
  Params::Validate::validation_options( allow_extra => 1 );
  
  sub new {
      my $proto = shift;
      my $class = ref $proto || $proto;
  
      my %p = validate( @_, { handle => { can => 'print' } } );
  
      my $self = bless {}, $class;
  
      $self->_basic_init(%p);
      $self->{handle} = $p{handle};
  
      return $self;
  }
  
  sub log_message {
      my $self = shift;
      my %p    = @_;
  
      $self->{handle}->print( $p{message} )
          or die "Cannot write to handle: $!";
  }
  
  1;
  
  # ABSTRACT: Object for logging to IO::Handle classes
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::Handle - Object for logging to IO::Handle classes
  
  =head1 VERSION
  
  version 2.56
  
  =head1 SYNOPSIS
  
    use Log::Dispatch;
  
    my $log = Log::Dispatch->new(
        outputs => [
            [
                'Handle',
                min_level => 'emerg',
                handle    => $io_socket_object,
            ],
        ]
    );
  
    $log->emerg('I am the Lizard King!');
  
  =head1 DESCRIPTION
  
  This module supplies a very simple object for logging to some sort of
  handle object. Basically, anything that implements a C<print()>
  method can be passed the object constructor and it should work.
  
  =for Pod::Coverage new log_message
  
  =head1 CONSTRUCTOR
  
  The constructor takes the following parameters in addition to the standard
  parameters documented in L<Log::Dispatch::Output>:
  
  =over 4
  
  =item * handle ($)
  
  The handle object. This object must implement a C<print()> method.
  
  =back
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH_HANDLE

    $main::fatpacked{"Log/Dispatch/Null.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_NULL';
  package Log::Dispatch::Null;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.56';
  
  use Log::Dispatch::Output;
  
  use base qw( Log::Dispatch::Output );
  
  sub new {
      my $proto = shift;
      my $class = ref $proto || $proto;
  
      my $self = bless {}, $class;
  
      $self->_basic_init(@_);
  
      return $self;
  }
  
  sub log_message { }
  
  1;
  
  # ABSTRACT: Object that accepts messages and does nothing
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::Null - Object that accepts messages and does nothing
  
  =head1 VERSION
  
  version 2.56
  
  =head1 SYNOPSIS
  
    use Log::Dispatch;
  
    my $null
        = Log::Dispatch->new( outputs => [ [ 'Null', min_level => 'debug' ] ] );
  
    $null->emerg( "I've fallen and I can't get up" );
  
  =head1 DESCRIPTION
  
  This class provides a null logging object. Messages can be sent to the
  object but it does nothing with them.
  
  =for Pod::Coverage new log_message
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH_NULL

    $main::fatpacked{"Log/Dispatch/Output.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_OUTPUT';
  package Log::Dispatch::Output;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.56';
  
  use Log::Dispatch;
  
  use base qw( Log::Dispatch::Base );
  
  use Log::Dispatch::Vars qw( %LevelNamesToNumbers @OrderedLevels );
  use Params::Validate qw(validate SCALAR ARRAYREF CODEREF BOOLEAN);
  Params::Validate::validation_options( allow_extra => 1 );
  
  use Carp ();
  
  sub new {
      my $proto = shift;
      my $class = ref $proto || $proto;
  
      die "The new method must be overridden in the $class subclass";
  }
  
  sub log {
      my $self = shift;
  
      my %p = validate(
          @_, {
              level   => { type => SCALAR },
              message => { type => SCALAR },
          }
      );
  
      return unless $self->_should_log( $p{level} );
  
      local $!;
      $p{message} = $self->_apply_callbacks(%p)
          if $self->{callbacks};
  
      $self->log_message(%p);
  }
  
  sub _basic_init {
      my $self = shift;
  
      my %p = validate(
          @_, {
              name      => { type => SCALAR, optional => 1 },
              min_level => { type => SCALAR, required => 1 },
              max_level => {
                  type     => SCALAR,
                  optional => 1
              },
              callbacks => {
                  type     => ARRAYREF | CODEREF,
                  optional => 1
              },
              newline => { type => BOOLEAN, optional => 1 },
          }
      );
  
      $self->{level_names}   = \@OrderedLevels;
      $self->{level_numbers} = \%LevelNamesToNumbers;
  
      $self->{name} = $p{name} || $self->_unique_name();
  
      $self->{min_level} = $self->_level_as_number( $p{min_level} );
      die "Invalid level specified for min_level"
          unless defined $self->{min_level};
  
      # Either use the parameter supplied or just the highest possible level.
      $self->{max_level} = (
          exists $p{max_level}
          ? $self->_level_as_number( $p{max_level} )
          : $#{ $self->{level_names} }
      );
  
      die "Invalid level specified for max_level"
          unless defined $self->{max_level};
  
      my @cb = $self->_get_callbacks(%p);
      $self->{callbacks} = \@cb if @cb;
  
      if ( $p{newline} ) {
          push @{ $self->{callbacks} }, \&_add_newline_callback;
      }
  }
  
  sub name {
      my $self = shift;
  
      return $self->{name};
  }
  
  sub min_level {
      my $self = shift;
  
      return $self->{level_names}[ $self->{min_level} ];
  }
  
  sub max_level {
      my $self = shift;
  
      return $self->{level_names}[ $self->{max_level} ];
  }
  
  sub accepted_levels {
      my $self = shift;
  
      return @{ $self->{level_names} }
          [ $self->{min_level} .. $self->{max_level} ];
  }
  
  sub _should_log {
      my $self = shift;
  
      my $msg_level = $self->_level_as_number(shift);
      return (   ( $msg_level >= $self->{min_level} )
              && ( $msg_level <= $self->{max_level} ) );
  }
  
  sub _level_as_number {
      my $self  = shift;
      my $level = shift;
  
      unless ( defined $level ) {
          Carp::croak "undefined value provided for log level";
      }
  
      return $level if $level =~ /^\d$/;
  
      unless ( Log::Dispatch->level_is_valid($level) ) {
          Carp::croak "$level is not a valid Log::Dispatch log level";
      }
  
      return $self->{level_numbers}{$level};
  }
  
  sub _level_as_name {
      my $self  = shift;
      my $level = shift;
  
      unless ( defined $level ) {
          Carp::croak "undefined value provided for log level";
      }
  
      return $level unless $level =~ /^\d$/;
  
      return $self->{level_names}[$level];
  }
  
  my $_unique_name_counter = 0;
  
  sub _unique_name {
      my $self = shift;
  
      return '_anon_' . $_unique_name_counter++;
  }
  
  sub _add_newline_callback {
  
      # This weird construct is an optimization since this might be called a lot
      # - see https://github.com/autarch/Log-Dispatch/pull/7
      +{@_}->{message} . "\n";
  }
  
  1;
  
  # ABSTRACT: Base class for all Log::Dispatch::* objects
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::Output - Base class for all Log::Dispatch::* objects
  
  =head1 VERSION
  
  version 2.56
  
  =head1 SYNOPSIS
  
    package Log::Dispatch::MySubclass;
  
    use Log::Dispatch::Output;
    use base qw( Log::Dispatch::Output );
  
    sub new {
        my $proto = shift;
        my $class = ref $proto || $proto;
  
        my %p = @_;
  
        my $self = bless {}, $class;
  
        $self->_basic_init(%p);
  
        # Do more if you like
  
        return $self;
    }
  
    sub log_message {
        my $self = shift;
        my %p    = @_;
  
        # Do something with message in $p{message}
    }
  
    1;
  
  =head1 DESCRIPTION
  
  This module is the base class from which all Log::Dispatch::* objects
  should be derived.
  
  =head1 CONSTRUCTOR
  
  The constructor, C<new>, must be overridden in a subclass. See L<Output
  Classes|Log::Dispatch/OUTPUT CLASSES> for a description of the common
  parameters accepted by this constructor.
  
  =head1 METHODS
  
  This class provides the following methods:
  
  =head2 $output->_basic_init(%p)
  
  This should be called from a subclass's constructor. Make sure to
  pass the arguments in @_ to it. It sets the object's name and minimum
  level from the passed parameters  It also sets up two other attributes which
  are used by other Log::Dispatch::Output methods, level_names and level_numbers.
  Subclasses will perform parameter validation in this method, and must also call
  the superclass's method.
  
  =head2 $output->name
  
  Returns the object's name.
  
  =head2 $output->min_level
  
  Returns the object's minimum log level.
  
  =head2 $output->max_level
  
  Returns the object's maximum log level.
  
  =head2 $output->accepted_levels
  
  Returns a list of the object's accepted levels (by name) from minimum
  to maximum.
  
  =head2 $output->log( level => $, message => $ )
  
  Sends a message if the level is greater than or equal to the object's
  minimum level. This method applies any message formatting callbacks
  that the object may have.
  
  =head2 $output->_should_log ($)
  
  This method is called from the C<log()> method with the log level of
  the message to be logged as an argument. It returns a boolean value
  indicating whether or not the message should be logged by this
  particular object. The C<log()> method will not process the message
  if the return value is false.
  
  =head2 $output->_level_as_number ($)
  
  This method will take a log level as a string (or a number) and return
  the number of that log level. If not given an argument, it returns
  the calling object's log level instead. If it cannot determine the
  level then it will croak.
  
  =head2 $output->add_callback( $code )
  
  Adds a callback (like those given during construction). It is added to the end
  of the list of callbacks.
  
  =head1 SUBCLASSING
  
  This class should be used as the base class for all logging objects
  you create that you would like to work under the Log::Dispatch
  architecture. Subclassing is fairly trivial. For most subclasses, if
  you simply copy the code in the SYNOPSIS and then put some
  functionality into the C<log_message> method then you should be all
  set. Please make sure to use the C<_basic_init> method as described above.
  
  The actual logging implementation should be done in a C<log_message>
  method that you write. B<Do not override C<log>!>.
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH_OUTPUT

    $main::fatpacked{"Log/Dispatch/Screen.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_SCREEN';
  package Log::Dispatch::Screen;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.56';
  
  use Log::Dispatch::Output;
  
  use base qw( Log::Dispatch::Output );
  
  use Encode qw( encode );
  use IO::Handle;
  use Params::Validate qw(validate BOOLEAN);
  Params::Validate::validation_options( allow_extra => 1 );
  
  sub new {
      my $proto = shift;
      my $class = ref $proto || $proto;
  
      my %p = validate(
          @_, {
              stderr => {
                  type    => BOOLEAN,
                  default => 1,
              },
              utf8 => {
                  type    => BOOLEAN,
                  default => 0,
              },
          }
      );
  
      my $self = bless \%p, $class;
      $self->_basic_init(%p);
  
      return $self;
  }
  
  sub log_message {
      my $self = shift;
      my %p    = @_;
  
      # This is a bit gross but it's important that we print directly to the
      # STDOUT or STDERR handle for backwards compatibility. Various modules
      # have tests which rely on this, so we can't open a new filehandle to fd 1
      # or 2 and use that.
      my $message
          = $self->{utf8} ? encode( 'UTF-8', $p{message} ) : $p{message};
      if ( $self->{stderr} ) {
          print STDERR $message;
      }
      else {
          print STDOUT $message;
      }
  }
  
  1;
  
  # ABSTRACT: Object for logging to the screen
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::Screen - Object for logging to the screen
  
  =head1 VERSION
  
  version 2.56
  
  =head1 SYNOPSIS
  
    use Log::Dispatch;
  
    my $log = Log::Dispatch->new(
        outputs => [
            [
                'Screen',
                min_level => 'debug',
                stderr    => 1,
                newline   => 1
            ]
        ],
    );
  
    $log->alert("I'm searching the city for sci-fi wasabi");
  
  =head1 DESCRIPTION
  
  This module provides an object for logging to the screen (really
  C<STDOUT> or C<STDERR>).
  
  Note that a newline will I<not> be added automatically at the end of a
  message by default. To do that, pass C<< newline => 1 >>.
  
  The handle will be autoflushed, but this module opens it's own handle to fd 1
  or 2 instead of using the global C<STDOUT> or C<STDERR>.
  
  =for Pod::Coverage new log_message
  
  =head1 CONSTRUCTOR
  
  The constructor takes the following parameters in addition to the standard
  parameters documented in L<Log::Dispatch::Output>:
  
  =over 4
  
  =item * stderr (0 or 1)
  
  Indicates whether or not logging information should go to C<STDERR>. If
  false, logging information is printed to C<STDOUT> instead.
  
  This defaults to true.
  
  =item * utf8 (0 or 1)
  
  If this is true, then the output uses C<binmode> to apply the
  C<:encoding(UTF-8)> layer to the relevant handle for output. This will not
  affect C<STDOUT> or C<STDERR> in other parts of your code.
  
  This defaults to false.
  
  =back
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH_SCREEN

    $main::fatpacked{"Log/Dispatch/Syslog.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_SYSLOG';
  package Log::Dispatch::Syslog;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.56';
  
  use Log::Dispatch::Output;
  
  use base qw( Log::Dispatch::Output );
  
  use Params::Validate qw(validate ARRAYREF BOOLEAN HASHREF SCALAR);
  Params::Validate::validation_options( allow_extra => 1 );
  
  use Scalar::Util qw( reftype );
  use Sys::Syslog 0.28 ();
  
  sub new {
      my $proto = shift;
      my $class = ref $proto || $proto;
  
      my %p = @_;
  
      my $self = bless {}, $class;
  
      $self->_basic_init(%p);
      $self->_init(%p);
  
      return $self;
  }
  
  my ($Ident) = $0 =~ /(.+)/;
  
  my $thread_lock;
  my $threads_loaded;
  
  sub _init {
      my $self = shift;
  
      my %p = validate(
          @_, {
              ident => {
                  type    => SCALAR,
                  default => $Ident
              },
              logopt => {
                  type    => SCALAR,
                  default => ''
              },
              facility => {
                  type    => SCALAR,
                  default => 'user'
              },
              socket => {
                  type    => SCALAR | ARRAYREF | HASHREF,
                  default => undef
              },
              lock => {
                  type    => BOOLEAN,
                  default => 0,
              },
          }
      );
  
      $self->{$_} = $p{$_} for qw( ident logopt facility socket lock );
      if ( $self->{lock} ) {
  
          unless ($threads_loaded) {
              local ( $@, $SIG{__DIE__} );
  
              # These need to be loaded with use, not require.
              eval 'use threads; use threads::shared';
              $threads_loaded = 1;
          }
          &threads::shared::share( \$thread_lock );
      }
  
      $self->{priorities} = [
          'DEBUG',
          'INFO',
          'NOTICE',
          'WARNING',
          'ERR',
          'CRIT',
          'ALERT',
          'EMERG'
      ];
  }
  
  sub log_message {
      my $self = shift;
      my %p    = @_;
  
      my $pri = $self->_level_as_number( $p{level} );
  
      lock($thread_lock) if $self->{lock};
  
      local ( $@, $SIG{__DIE__} );
      eval {
          if ( defined $self->{socket} ) {
              Sys::Syslog::setlogsock(
                  ref $self->{socket} && reftype( $self->{socket} ) eq 'ARRAY'
                  ? @{ $self->{socket} }
                  : $self->{socket}
              );
          }
  
          Sys::Syslog::openlog(
              $self->{ident},
              $self->{logopt},
              $self->{facility}
          );
          Sys::Syslog::syslog( $self->{priorities}[$pri], $p{message} );
          Sys::Syslog::closelog;
      };
  
      warn $@ if $@ and $^W;
  }
  
  1;
  
  # ABSTRACT: Object for logging to system log.
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::Syslog - Object for logging to system log.
  
  =head1 VERSION
  
  version 2.56
  
  =head1 SYNOPSIS
  
    use Log::Dispatch;
  
    my $log = Log::Dispatch->new(
        outputs => [
            [
                'Syslog',
                min_level => 'info',
                ident     => 'Yadda yadda'
            ]
        ]
    );
  
    $log->emerg("Time to die.");
  
  =head1 DESCRIPTION
  
  This module provides a simple object for sending messages to the
  system log (via UNIX syslog calls).
  
  Note that logging may fail if you try to pass UTF-8 characters in the
  log message. If logging fails and warnings are enabled, the error
  message will be output using Perl's C<warn>.
  
  =for Pod::Coverage new log_message
  
  =head1 CONSTRUCTOR
  
  The constructor takes the following parameters in addition to the standard
  parameters documented in L<Log::Dispatch::Output>:
  
  =over 4
  
  =item * ident ($)
  
  This string will be prepended to all messages in the system log.
  Defaults to $0.
  
  =item * logopt ($)
  
  A string containing the log options (separated by any separator you
  like). See the openlog(3) and Sys::Syslog docs for more details.
  Defaults to ''.
  
  =item * facility ($)
  
  Specifies what type of program is doing the logging to the system log.
  Valid options are 'auth', 'authpriv', 'cron', 'daemon', 'kern',
  'local0' through 'local7', 'mail, 'news', 'syslog', 'user',
  'uucp'. Defaults to 'user'
  
  =item * socket ($, \@, or \%)
  
  Tells what type of socket to use for sending syslog messages. Valid
  options are listed in C<Sys::Syslog>.
  
  If you don't provide this, then we let C<Sys::Syslog> simply pick one
  that works, which is the preferred option, as it makes your code more
  portable.
  
  If you pass an array reference, it is dereferenced and passed to
  C<Sys::Syslog::setlogsock()>.
  
  If you pass a hash reference, it is passed to C<Sys::Syslog::setlogsock()> as
  is.
  
  =item * lock ($)
  
  If this is set to a true value, then the calls to C<setlogsock()>,
  C<openlog()>, C<syslog()>, and C<closelog()> will all be guarded by a
  thread-locked variable.
  
  This is only relevant when running you are using Perl threads in your
  application. Setting this to a true value will cause the L<threads> and
  L<threads::shared> modules to be loaded.
  
  This defaults to false.
  
  =back
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH_SYSLOG

    $main::fatpacked{"Log/Dispatch/Vars.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_DISPATCH_VARS';
  package Log::Dispatch::Vars;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.56';
  
  use Exporter qw( import );
  
  our @EXPORT_OK = qw(
      %CanonicalLevelNames
      %LevelNamesToNumbers
      @OrderedLevels
  );
  
  our %CanonicalLevelNames = (
      (
          map { $_ => $_ }
              qw(
              debug
              info
              notice
              warning
              error
              critical
              alert
              emergency
              )
      ),
      warn  => 'warning',
      err   => 'error',
      crit  => 'critical',
      emerg => 'emergency',
  );
  
  our @OrderedLevels = qw(
      debug
      info
      notice
      warning
      error
      critical
      alert
      emergency
  );
  
  our %LevelNamesToNumbers = (
      ( map { $OrderedLevels[$_] => $_ } 0 .. $#OrderedLevels ),
      warn  => 3,
      err   => 4,
      crit  => 5,
      emerg => 7
  );
  
  1;
  
  # ABSTRACT: Variables used internally by multiple packages
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Log::Dispatch::Vars - Variables used internally by multiple packages
  
  =head1 VERSION
  
  version 2.56
  
  =head1 DESCRIPTION
  
  There are no user-facing parts here.
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Log-Dispatch>
  (or L<bug-log-dispatch@rt.cpan.org|mailto:bug-log-dispatch@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2016 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
LOG_DISPATCH_VARS

    $main::fatpacked{"Log/Log4perl.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL';
  ##################################################
  package Log::Log4perl;
  ##################################################
  
  END { local($?); Log::Log4perl::Logger::cleanup(); }
  
  use 5.006;
  use strict;
  use warnings;
  
  use Carp;
  
  use Log::Log4perl::Util;
  use Log::Log4perl::Logger;
  use Log::Log4perl::Level;
  use Log::Log4perl::Config;
  use Log::Log4perl::Appender;
  
  our $VERSION = '1.47';
  
     # set this to '1' if you're using a wrapper
     # around Log::Log4perl
  our $caller_depth = 0;
  
      #this is a mapping of convenience names to opcode masks used in
      #$ALLOWED_CODE_OPS_IN_CONFIG_FILE below
  our %ALLOWED_CODE_OPS = (
      'safe'        => [ ':browse' ],
      'restrictive' => [ ':default' ],
  );
  
  our %WRAPPERS_REGISTERED = map { $_ => 1 } qw(Log::Log4perl);
  
      #set this to the opcodes which are allowed when
      #$ALLOW_CODE_IN_CONFIG_FILE is set to a true value
      #if undefined, there are no restrictions on code that can be
      #excuted
  our @ALLOWED_CODE_OPS_IN_CONFIG_FILE;
  
      #this hash lists things that should be exported into the Safe
      #compartment.  The keys are the package the symbol should be
      #exported from and the values are array references to the names
      #of the symbols (including the leading type specifier)
  our %VARS_SHARED_WITH_SAFE_COMPARTMENT = (
      main => [ '%ENV' ],
  );
  
      #setting this to a true value will allow Perl code to be executed
      #within the config file.  It works in conjunction with
      #$ALLOWED_CODE_OPS_IN_CONFIG_FILE, which if defined restricts the
      #opcodes which can be executed using the 'Safe' module.
      #setting this to a false value disables code execution in the
      #config file
  our $ALLOW_CODE_IN_CONFIG_FILE = 1;
  
      #arrays in a log message will be joined using this character,
      #see Log::Log4perl::Appender::DBI
  our $JOIN_MSG_ARRAY_CHAR = '';
  
      #version required for XML::DOM, to enable XML Config parsing
      #and XML Config unit tests
  our $DOM_VERSION_REQUIRED = '1.29'; 
  
  our $CHATTY_DESTROY_METHODS = 0;
  
  our $LOGDIE_MESSAGE_ON_STDERR = 1;
  our $LOGEXIT_CODE             = 1;
  our %IMPORT_CALLED;
  
  our $EASY_CLOSURES = {};
  
    # to throw refs as exceptions via logcarp/confess, turn this off
  our $STRINGIFY_DIE_MESSAGE = 1;
  
  use constant _INTERNAL_DEBUG => 0;
  
  ##################################################
  sub import {
  ##################################################
      my($class) = shift;
  
      my $caller_pkg = caller();
  
      return 1 if $IMPORT_CALLED{$caller_pkg}++;
  
      my(%tags) = map { $_ => 1 } @_;
  
          # Lazy man's logger
      if(exists $tags{':easy'}) {
          $tags{':levels'} = 1;
          $tags{':nowarn'} = 1;
          $tags{'get_logger'} = 1;
      }
  
      if(exists $tags{':no_extra_logdie_message'}) {
          $Log::Log4perl::LOGDIE_MESSAGE_ON_STDERR = 0;
          delete $tags{':no_extra_logdie_message'};
      }
  
      if(exists $tags{get_logger}) {
          # Export get_logger into the calling module's 
          no strict qw(refs);
          *{"$caller_pkg\::get_logger"} = *get_logger;
  
          delete $tags{get_logger};
      }
  
      if(exists $tags{':levels'}) {
          # Export log levels ($DEBUG, $INFO etc.) from Log4perl::Level
          for my $key (keys %Log::Log4perl::Level::PRIORITY) {
              my $name  = "$caller_pkg\::$key";
                 # Need to split this up in two lines, or CVS will
                 # mess it up.
              my $value = $
                          Log::Log4perl::Level::PRIORITY{$key};
              no strict qw(refs);
              *{"$name"} = \$value;
          }
  
          delete $tags{':levels'};
      }
  
          # Lazy man's logger
      if(exists $tags{':easy'}) {
          delete $tags{':easy'};
  
              # Define default logger object in caller's package
          my $logger = get_logger("$caller_pkg");
          
              # Define DEBUG, INFO, etc. routines in caller's package
          for(qw(TRACE DEBUG INFO WARN ERROR FATAL ALWAYS)) {
              my $level   = $_;
              $level = "OFF" if $level eq "ALWAYS";
              my $lclevel = lc($_);
              easy_closure_create($caller_pkg, $_, sub {
                  Log::Log4perl::Logger::init_warn() unless 
                      $Log::Log4perl::Logger::INITIALIZED or
                      $Log::Log4perl::Logger::NON_INIT_WARNED;
                  $logger->{$level}->($logger, @_, $level);
              }, $logger);
          }
  
              # Define LOGCROAK, LOGCLUCK, etc. routines in caller's package
          for(qw(LOGCROAK LOGCLUCK LOGCARP LOGCONFESS)) {
              my $method = "Log::Log4perl::Logger::" . lc($_);
  
              easy_closure_create($caller_pkg, $_, sub {
                  unshift @_, $logger;
                  goto &$method;
              }, $logger);
          }
  
              # Define LOGDIE, LOGWARN
           easy_closure_create($caller_pkg, "LOGDIE", sub {
               Log::Log4perl::Logger::init_warn() unless 
                       $Log::Log4perl::Logger::INITIALIZED or
                       $Log::Log4perl::Logger::NON_INIT_WARNED;
               $logger->{FATAL}->($logger, @_, "FATAL");
               $Log::Log4perl::LOGDIE_MESSAGE_ON_STDERR ?
                   CORE::die(Log::Log4perl::Logger::callerline(join '', @_)) :
                   exit $Log::Log4perl::LOGEXIT_CODE;
           }, $logger);
  
           easy_closure_create($caller_pkg, "LOGEXIT", sub {
              Log::Log4perl::Logger::init_warn() unless 
                      $Log::Log4perl::Logger::INITIALIZED or
                      $Log::Log4perl::Logger::NON_INIT_WARNED;
              $logger->{FATAL}->($logger, @_, "FATAL");
              exit $Log::Log4perl::LOGEXIT_CODE;
           }, $logger);
  
          easy_closure_create($caller_pkg, "LOGWARN", sub {
              Log::Log4perl::Logger::init_warn() unless 
                      $Log::Log4perl::Logger::INITIALIZED or
                      $Log::Log4perl::Logger::NON_INIT_WARNED;
              $logger->{WARN}->($logger, @_, "WARN");
              CORE::warn(Log::Log4perl::Logger::callerline(join '', @_))
                  if $Log::Log4perl::LOGDIE_MESSAGE_ON_STDERR;
          }, $logger);
      }
  
      if(exists $tags{':nowarn'}) {
          $Log::Log4perl::Logger::NON_INIT_WARNED = 1;
          delete $tags{':nowarn'};
      }
  
      if(exists $tags{':nostrict'}) {
          $Log::Log4perl::Logger::NO_STRICT = 1;
          delete $tags{':nostrict'};
      }
  
      if(exists $tags{':resurrect'}) {
          my $FILTER_MODULE = "Filter::Util::Call";
          if(! Log::Log4perl::Util::module_available($FILTER_MODULE)) {
              die "$FILTER_MODULE required with :resurrect" .
                  "(install from CPAN)";
          }
          eval "require $FILTER_MODULE" or die "Cannot pull in $FILTER_MODULE";
          Filter::Util::Call::filter_add(
              sub {
                  my($status);
                  s/^\s*###l4p// if
                      ($status = Filter::Util::Call::filter_read()) > 0;
                  $status;
                  });
          delete $tags{':resurrect'};
      }
  
      if(keys %tags) {
          # We received an Option we couldn't understand.
          die "Unknown Option(s): @{[keys %tags]}";
      }
  }
  
  ##################################################
  sub initialized {
  ##################################################
      return $Log::Log4perl::Logger::INITIALIZED;
  }
  
  ##################################################
  sub new {
  ##################################################
      die "THIS CLASS ISN'T FOR DIRECT USE. " .
          "PLEASE CHECK 'perldoc " . __PACKAGE__ . "'.";
  }
  
  ##################################################
  sub reset { # Mainly for debugging/testing
  ##################################################
      # Delegate this to the logger ...
      return Log::Log4perl::Logger->reset();
  }
  
  ##################################################
  sub init_once { # Call init only if it hasn't been
                  # called yet.
  ##################################################
      init(@_) unless $Log::Log4perl::Logger::INITIALIZED;
  }
  
  ##################################################
  sub init { # Read the config file
  ##################################################
      my($class, @args) = @_;
  
      #woops, they called ::init instead of ->init, let's be forgiving
      if ($class ne __PACKAGE__) {
          unshift(@args, $class);
      }
  
      # Delegate this to the config module
      return Log::Log4perl::Config->init(@args);
  }
  
  ##################################################
  sub init_and_watch { 
  ##################################################
      my($class, @args) = @_;
  
      #woops, they called ::init instead of ->init, let's be forgiving
      if ($class ne __PACKAGE__) {
          unshift(@args, $class);
      }
  
      # Delegate this to the config module
      return Log::Log4perl::Config->init_and_watch(@args);
  }
  
  
  ##################################################
  sub easy_init { # Initialize the root logger with a screen appender
  ##################################################
      my($class, @args) = @_;
  
      # Did somebody call us with Log::Log4perl::easy_init()?
      if(ref($class) or $class =~ /^\d+$/) {
          unshift @args, $class;
      }
  
      # Reset everything first
      Log::Log4perl->reset();
  
      my @loggers = ();
  
      my %default = ( level    => $DEBUG,
                      file     => "STDERR",
                      utf8     => undef,
                      category => "",
                      layout   => "%d %m%n",
                    );
  
      if(!@args) {
          push @loggers, \%default;
      } else {
          for my $arg (@args) {
              if($arg =~ /^\d+$/) {
                  my %logger = (%default, level => $arg);
                  push @loggers, \%logger;
              } elsif(ref($arg) eq "HASH") {
                  my %logger = (%default, %$arg);
                  push @loggers, \%logger;
              } else {
                  # I suggest this becomes a croak() after a
                  # reasonable deprecation cycle.
                  carp "All arguments to easy_init should be either "
                     . "an integer log level or a hash reference.";
              }
          }
      }
  
      for my $logger (@loggers) {
  
          my $app;
  
          if($logger->{file} =~ /^stderr$/i) {
              $app = Log::Log4perl::Appender->new(
                  "Log::Log4perl::Appender::Screen",
                  utf8 => $logger->{utf8});
          } elsif($logger->{file} =~ /^stdout$/i) {
              $app = Log::Log4perl::Appender->new(
                  "Log::Log4perl::Appender::Screen",
                  stderr => 0,
                  utf8   => $logger->{utf8});
          } else {
              my $binmode;
              if($logger->{file} =~ s/^(:.*?)>/>/) {
                  $binmode = $1;
              }
              $logger->{file} =~ /^(>)?(>)?/;
              my $mode = ($2 ? "append" : "write");
              $logger->{file} =~ s/.*>+\s*//g;
              $app = Log::Log4perl::Appender->new(
                  "Log::Log4perl::Appender::File",
                  filename => $logger->{file},
                  mode     => $mode,
                  utf8     => $logger->{utf8},
                  binmode  => $binmode,
              );
          }
  
          my $layout = Log::Log4perl::Layout::PatternLayout->new(
                                                          $logger->{layout});
          $app->layout($layout);
  
          my $log = Log::Log4perl->get_logger($logger->{category});
          $log->level($logger->{level});
          $log->add_appender($app);
      }
  
      $Log::Log4perl::Logger::INITIALIZED = 1;
  }
  
  ##################################################
  sub wrapper_register {  
  ##################################################
      my $wrapper = $_[-1];
  
      $WRAPPERS_REGISTERED{ $wrapper } = 1;
  }
  
  ##################################################
  sub get_logger {  # Get an instance (shortcut)
  ##################################################
      # get_logger() can be called in the following ways:
      #
      #   (1) Log::Log4perl::get_logger()     => ()
      #   (2) Log::Log4perl->get_logger()     => ("Log::Log4perl")
      #   (3) Log::Log4perl::get_logger($cat) => ($cat)
      #   
      #   (5) Log::Log4perl->get_logger($cat) => ("Log::Log4perl", $cat)
      #   (6)   L4pSubclass->get_logger($cat) => ("L4pSubclass", $cat)
  
      # Note that (4) L4pSubclass->get_logger() => ("L4pSubclass")
      # is indistinguishable from (3) and therefore can't be allowed.
      # Wrapper classes always have to specify the category explicitly.
  
      my $category;
  
      if(@_ == 0) {
            # 1
          my $level = 0;
          do { $category = scalar caller($level++);
          } while exists $WRAPPERS_REGISTERED{ $category };
  
      } elsif(@_ == 1) {
            # 2, 3
          $category = $_[0];
  
          my $level = 0;
          while(exists $WRAPPERS_REGISTERED{ $category }) { 
              $category = scalar caller($level++);
          }
  
      } else {
            # 5, 6
          $category = $_[1];
      }
  
      # Delegate this to the logger module
      return Log::Log4perl::Logger->get_logger($category);
  }
  
  ###########################################
  sub caller_depth_offset {
  ###########################################
      my( $level ) = @_;
  
      my $category;
  
      { 
          my $category = scalar caller($level + 1);
  
          if(defined $category and
             exists $WRAPPERS_REGISTERED{ $category }) {
              $level++;
              redo;
          }
      }
  
      return $level;
  }
  
  ##################################################
  sub appenders {  # Get a hashref of all defined appender wrappers
  ##################################################
      return \%Log::Log4perl::Logger::APPENDER_BY_NAME;
  }
  
  ##################################################
  sub add_appender { # Add an appender to the system, but don't assign
  	           # it to a logger yet
  ##################################################
      my($class, $appender) = @_;
  
      my $name = $appender->name();
      die "Mandatory parameter 'name' missing in appender" unless defined $name;
  
        # Make it known by name in the Log4perl universe
        # (so that composite appenders can find it)
      Log::Log4perl->appenders()->{ $name } = $appender;
  }
  
  ##################################################
  # Return number of appenders changed
  sub appender_thresholds_adjust {  # Readjust appender thresholds
  ##################################################
          # If someone calls L4p-> and not L4p::
      shift if $_[0] eq __PACKAGE__;
      my($delta, $appenders) = @_;
  	my $retval = 0;
  
      if($delta == 0) {
            # Nothing to do, no delta given.
          return;
      }
  
      if(defined $appenders) {
              # Map names to objects
          $appenders = [map { 
                         die "Unkown appender: '$_'" unless exists
                            $Log::Log4perl::Logger::APPENDER_BY_NAME{
                              $_};
                         $Log::Log4perl::Logger::APPENDER_BY_NAME{
                           $_} 
                        } @$appenders];
      } else {
              # Just hand over all known appenders
          $appenders = [values %{Log::Log4perl::appenders()}] unless 
              defined $appenders;
      }
  
          # Change all appender thresholds;
      foreach my $app (@$appenders) {
          my $old_thres = $app->threshold();
          my $new_thres;
          if($delta > 0) {
              $new_thres = Log::Log4perl::Level::get_higher_level(
                               $old_thres, $delta);
          } else {
              $new_thres = Log::Log4perl::Level::get_lower_level(
                               $old_thres, -$delta);
          }
  
          ++$retval if ($app->threshold($new_thres) == $new_thres);
      }
  	return $retval;
  }
  
  ##################################################
  sub appender_by_name {  # Get a (real) appender by name
  ##################################################
          # If someone calls L4p->appender_by_name and not L4p::appender_by_name
      shift if $_[0] eq __PACKAGE__;
  
      my($name) = @_;
  
      if(defined $name and
         exists $Log::Log4perl::Logger::APPENDER_BY_NAME{
                   $name}) {
          return $Log::Log4perl::Logger::APPENDER_BY_NAME{
                   $name}->{appender};
      } else {
          return undef;
      }
  }
  
  ##################################################
  sub eradicate_appender {  # Remove an appender from the system
  ##################################################
          # If someone calls L4p->... and not L4p::...
      shift if $_[0] eq __PACKAGE__;
      Log::Log4perl::Logger->eradicate_appender(@_);
  }
  
  ##################################################
  sub infiltrate_lwp {  # 
  ##################################################
      no warnings qw(redefine);
  
      my $l4p_wrapper = sub {
          my($prio, @message) = @_;
          local $Log::Log4perl::caller_depth =
                $Log::Log4perl::caller_depth + 2;
          get_logger(scalar caller(1))->log($prio, @message);
      };
  
      *LWP::Debug::trace = sub { 
          $l4p_wrapper->($INFO, @_); 
      };
      *LWP::Debug::conns =
      *LWP::Debug::debug = sub { 
          $l4p_wrapper->($DEBUG, @_); 
      };
  }
  
  ##################################################
  sub easy_closure_create {
  ##################################################
      my($caller_pkg, $entry, $code, $logger) = @_;
  
      no strict 'refs';
  
      print("easy_closure: Setting shortcut $caller_pkg\::$entry ", 
           "(logger=$logger\n") if _INTERNAL_DEBUG;
  
      $EASY_CLOSURES->{ $caller_pkg }->{ $entry } = $logger;
      *{"$caller_pkg\::$entry"} = $code;
  }
  
  ###########################################
  sub easy_closure_cleanup {
  ###########################################
      my($caller_pkg, $entry) = @_;
  
      no warnings 'redefine';
      no strict 'refs';
  
      my $logger = $EASY_CLOSURES->{ $caller_pkg }->{ $entry };
  
      print("easy_closure: Nuking easy shortcut $caller_pkg\::$entry ", 
           "(logger=$logger\n") if _INTERNAL_DEBUG;
  
      *{"$caller_pkg\::$entry"} = sub { };
      delete $EASY_CLOSURES->{ $caller_pkg }->{ $entry };
  }
  
  ##################################################
  sub easy_closure_category_cleanup {
  ##################################################
      my($caller_pkg) = @_;
  
      if(! exists $EASY_CLOSURES->{ $caller_pkg } ) {
          return 1;
      }
  
      for my $entry ( keys %{ $EASY_CLOSURES->{ $caller_pkg } } ) {
          easy_closure_cleanup( $caller_pkg, $entry );
      }
  
      delete $EASY_CLOSURES->{ $caller_pkg };
  }
  
  ###########################################
  sub easy_closure_global_cleanup {
  ###########################################
  
      for my $caller_pkg ( keys %$EASY_CLOSURES ) {
          easy_closure_category_cleanup( $caller_pkg );
      }
  }
  
  ###########################################
  sub easy_closure_logger_remove {
  ###########################################
      my($class, $logger) = @_;
  
      PKG: for my $caller_pkg ( keys %$EASY_CLOSURES ) {
          for my $entry ( keys %{ $EASY_CLOSURES->{ $caller_pkg } } ) {
              if( $logger == $EASY_CLOSURES->{ $caller_pkg }->{ $entry } ) {
                  easy_closure_category_cleanup( $caller_pkg );
                  next PKG;
              }
          }
      }
  }
  
  ##################################################
  sub remove_logger {
  ##################################################
      my ($class, $logger) = @_;
  
      # Any stealth logger convenience function still using it will
      # now become a no-op.
      Log::Log4perl->easy_closure_logger_remove( $logger );
  
      # Remove the logger from the system
      delete $Log::Log4perl::Logger::LOGGERS_BY_NAME->{ $logger->{category} };
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl - Log4j implementation for Perl
  
  =head1 SYNOPSIS
          
  		# Easy mode if you like it simple ...
  
      use Log::Log4perl qw(:easy);
      Log::Log4perl->easy_init($ERROR);
  
      DEBUG "This doesn't go anywhere";
      ERROR "This gets logged";
  
          # ... or standard mode for more features:
  
      Log::Log4perl::init('/etc/log4perl.conf');
      
      --or--
      
          # Check config every 10 secs
      Log::Log4perl::init_and_watch('/etc/log4perl.conf',10);
  
      --then--
      
      $logger = Log::Log4perl->get_logger('house.bedrm.desk.topdrwr');
      
      $logger->debug('this is a debug message');
      $logger->info('this is an info message');
      $logger->warn('etc');
      $logger->error('..');
      $logger->fatal('..');
      
      #####/etc/log4perl.conf###############################
      log4perl.logger.house              = WARN,  FileAppndr1
      log4perl.logger.house.bedroom.desk = DEBUG, FileAppndr1
      
      log4perl.appender.FileAppndr1      = Log::Log4perl::Appender::File
      log4perl.appender.FileAppndr1.filename = desk.log 
      log4perl.appender.FileAppndr1.layout   = \
                              Log::Log4perl::Layout::SimpleLayout
      ######################################################
  
  =head1 ABSTRACT
  
  Log::Log4perl provides a powerful logging API for your application
  
  =head1 DESCRIPTION
  
  Log::Log4perl lets you remote-control and fine-tune the logging behaviour
  of your system from the outside. It implements the widely popular 
  (Java-based) Log4j logging package in pure Perl. 
  
  B<For a detailed tutorial on Log::Log4perl usage, please read> 
  
  L<http://www.perl.com/pub/a/2002/09/11/log4perl.html>
  
  Logging beats a debugger if you want to know what's going on 
  in your code during runtime. However, traditional logging packages
  are too static and generate a flood of log messages in your log files
  that won't help you.
  
  C<Log::Log4perl> is different. It allows you to control the number of 
  logging messages generated at three different levels:
  
  =over 4
  
  =item *
  
  At a central location in your system (either in a configuration file or
  in the startup code) you specify I<which components> (classes, functions) 
  of your system should generate logs.
  
  =item *
  
  You specify how detailed the logging of these components should be by
  specifying logging I<levels>.
  
  =item *
  
  You also specify which so-called I<appenders> you want to feed your
  log messages to ("Print it to the screen and also append it to /tmp/my.log")
  and which format ("Write the date first, then the file name and line 
  number, and then the log message") they should be in.
  
  =back
  
  This is a very powerful and flexible mechanism. You can turn on and off
  your logs at any time, specify the level of detail and make that
  dependent on the subsystem that's currently executed. 
  
  Let me give you an example: You might 
  find out that your system has a problem in the 
  C<MySystem::Helpers::ScanDir>
  component. Turning on detailed debugging logs all over the system would
  generate a flood of useless log messages and bog your system down beyond
  recognition. With C<Log::Log4perl>, however, you can tell the system:
  "Continue to log only severe errors to the log file. Open a second
  log file, turn on full debug logs in the C<MySystem::Helpers::ScanDir>
  component and dump all messages originating from there into the new
  log file". And all this is possible by just changing the parameters
  in a configuration file, which your system can re-read even 
  while it's running!
  
  =head1 How to use it
  
  The C<Log::Log4perl> package can be initialized in two ways: Either
  via Perl commands or via a C<log4j>-style configuration file.
  
  =head2 Initialize via a configuration file
  
  This is the easiest way to prepare your system for using
  C<Log::Log4perl>. Use a configuration file like this:
  
      ############################################################
      # A simple root logger with a Log::Log4perl::Appender::File 
      # file appender in Perl.
      ############################################################
      log4perl.rootLogger=ERROR, LOGFILE
      
      log4perl.appender.LOGFILE=Log::Log4perl::Appender::File
      log4perl.appender.LOGFILE.filename=/var/log/myerrs.log
      log4perl.appender.LOGFILE.mode=append
      
      log4perl.appender.LOGFILE.layout=PatternLayout
      log4perl.appender.LOGFILE.layout.ConversionPattern=[%r] %F %L %c - %m%n
  
  These lines define your standard logger that's appending severe
  errors to C</var/log/myerrs.log>, using the format
  
      [millisecs] source-filename line-number class - message newline
  
  Assuming that this configuration file is saved as C<log.conf>, you need to 
  read it in the startup section of your code, using the following
  commands:
  
    use Log::Log4perl;
    Log::Log4perl->init("log.conf");
  
  After that's done I<somewhere> in the code, you can retrieve
  logger objects I<anywhere> in the code. Note that
  there's no need to carry any logger references around with your 
  functions and methods. You can get a logger anytime via a singleton
  mechanism:
  
      package My::MegaPackage;
      use  Log::Log4perl;
  
      sub some_method {
          my($param) = @_;
  
          my $log = Log::Log4perl->get_logger("My::MegaPackage");
  
          $log->debug("Debug message");
          $log->info("Info message");
          $log->error("Error message");
  
          ...
      }
  
  With the configuration file above, C<Log::Log4perl> will write
  "Error message" to the specified log file, but won't do anything for 
  the C<debug()> and C<info()> calls, because the log level has been set
  to C<ERROR> for all components in the first line of 
  configuration file shown above.
  
  Why C<Log::Log4perl-E<gt>get_logger> and
  not C<Log::Log4perl-E<gt>new>? We don't want to create a new
  object every time. Usually in OO-Programming, you create an object
  once and use the reference to it to call its methods. However,
  this requires that you pass around the object to all functions
  and the last thing we want is pollute each and every function/method
  we're using with a handle to the C<Logger>:
  
      sub function {  # Brrrr!!
          my($logger, $some, $other, $parameters) = @_;
      }
  
  Instead, if a function/method wants a reference to the logger, it
  just calls the Logger's static C<get_logger($category)> method to obtain
  a reference to the I<one and only> possible logger object of
  a certain category.
  That's called a I<singleton> if you're a Gamma fan.
  
  How does the logger know
  which messages it is supposed to log and which ones to suppress?
  C<Log::Log4perl> works with inheritance: The config file above didn't 
  specify anything about C<My::MegaPackage>. 
  And yet, we've defined a logger of the category 
  C<My::MegaPackage>.
  In this case, C<Log::Log4perl> will walk up the namespace hierarchy
  (C<My> and then we're at the root) to figure out if a log level is
  defined somewhere. In the case above, the log level at the root
  (root I<always> defines a log level, but not necessarily an appender)
  defines that 
  the log level is supposed to be C<ERROR> -- meaning that I<DEBUG>
  and I<INFO> messages are suppressed. Note that this 'inheritance' is
  unrelated to Perl's class inheritance, it is merely related to the
  logger namespace.
  By the way, if you're ever in doubt about what a logger's category is, 
  use C<$logger-E<gt>category()> to retrieve it.
  
  =head2 Log Levels
  
  There are six predefined log levels: C<FATAL>, C<ERROR>, C<WARN>, C<INFO>,
  C<DEBUG>, and C<TRACE> (in descending priority). Your configured logging level
  has to at least match the priority of the logging message.
  
  If your configured logging level is C<WARN>, then messages logged 
  with C<info()>, C<debug()>, and C<trace()> will be suppressed. 
  C<fatal()>, C<error()> and C<warn()> will make their way through,
  because their priority is higher or equal than the configured setting.
  
  Instead of calling the methods
  
      $logger->trace("...");  # Log a trace message
      $logger->debug("...");  # Log a debug message
      $logger->info("...");   # Log a info message
      $logger->warn("...");   # Log a warn message
      $logger->error("...");  # Log a error message
      $logger->fatal("...");  # Log a fatal message
  
  you could also call the C<log()> method with the appropriate level
  using the constants defined in C<Log::Log4perl::Level>:
  
      use Log::Log4perl::Level;
  
      $logger->log($TRACE, "...");
      $logger->log($DEBUG, "...");
      $logger->log($INFO, "...");
      $logger->log($WARN, "...");
      $logger->log($ERROR, "...");
      $logger->log($FATAL, "...");
  
  This form is rarely used, but it comes in handy if you want to log 
  at different levels depending on an exit code of a function:
  
      $logger->log( $exit_level{ $rc }, "...");
  
  As for needing more logging levels than these predefined ones: It's
  usually best to steer your logging behaviour via the category 
  mechanism instead.
  
  If you need to find out if the currently configured logging
  level would allow a logger's logging statement to go through, use the
  logger's C<is_I<level>()> methods:
  
      $logger->is_trace()    # True if trace messages would go through
      $logger->is_debug()    # True if debug messages would go through
      $logger->is_info()     # True if info messages would go through
      $logger->is_warn()     # True if warn messages would go through
      $logger->is_error()    # True if error messages would go through
      $logger->is_fatal()    # True if fatal messages would go through
  
  Example: C<$logger-E<gt>is_warn()> returns true if the logger's current
  level, as derived from either the logger's category (or, in absence of
  that, one of the logger's parent's level setting) is 
  C<$WARN>, C<$ERROR> or C<$FATAL>.
  
  Also available are a series of more Java-esque functions which return
  the same values. These are of the format C<isI<Level>Enabled()>,
  so C<$logger-E<gt>isDebugEnabled()> is synonymous to 
  C<$logger-E<gt>is_debug()>.
  
  
  These level checking functions
  will come in handy later, when we want to block unnecessary
  expensive parameter construction in case the logging level is too
  low to log the statement anyway, like in:
  
      if($logger->is_error()) {
          $logger->error("Erroneous array: @super_long_array");
      }
  
  If we had just written
  
      $logger->error("Erroneous array: @super_long_array");
  
  then Perl would have interpolated
  C<@super_long_array> into the string via an expensive operation
  only to figure out shortly after that the string can be ignored
  entirely because the configured logging level is lower than C<$ERROR>.
  
  The to-be-logged
  message passed to all of the functions described above can
  consist of an arbitrary number of arguments, which the logging functions
  just chain together to a single string. Therefore
  
      $logger->debug("Hello ", "World", "!");  # and
      $logger->debug("Hello World!");
  
  are identical.
  
  Note that even if one of the methods above returns true, it doesn't 
  necessarily mean that the message will actually get logged. 
  What is_debug() checks is that
  the logger used is configured to let a message of the given priority 
  (DEBUG) through. But after this check, Log4perl will eventually apply custom 
  filters and forward the message to one or more appenders. None of this
  gets checked by is_xxx(), for the simple reason that it's 
  impossible to know what a custom filter does with a message without
  having the actual message or what an appender does to a message without
  actually having it log it.
  
  =head2 Log and die or warn
  
  Often, when you croak / carp / warn / die, you want to log those messages.
  Rather than doing the following:
  
      $logger->fatal($err) && die($err);
  
  you can use the following:
  
      $logger->logdie($err);
  
  And if instead of using
  
      warn($message);
      $logger->warn($message);
  
  to both issue a warning via Perl's warn() mechanism and make sure you have
  the same message in the log file as well, use:
  
      $logger->logwarn($message);
  
  Since there is
  an ERROR level between WARN and FATAL, there are two additional helper
  functions in case you'd like to use ERROR for either warn() or die():
  
      $logger->error_warn();
      $logger->error_die();
  
  Finally, there's the Carp functions that, in addition to logging,
  also pass the stringified message to their companions in the Carp package:
  
      $logger->logcarp();        # warn w/ 1-level stack trace
      $logger->logcluck();       # warn w/ full stack trace
      $logger->logcroak();       # die w/ 1-level stack trace
      $logger->logconfess();     # die w/ full stack trace
  
  =head2 Appenders
  
  If you don't define any appenders, nothing will happen. Appenders will
  be triggered whenever the configured logging level requires a message
  to be logged and not suppressed.
  
  C<Log::Log4perl> doesn't define any appenders by default, not even the root
  logger has one.
  
  C<Log::Log4perl> already comes with a standard set of appenders:
  
      Log::Log4perl::Appender::Screen
      Log::Log4perl::Appender::ScreenColoredLevels
      Log::Log4perl::Appender::File
      Log::Log4perl::Appender::Socket
      Log::Log4perl::Appender::DBI
      Log::Log4perl::Appender::Synchronized
      Log::Log4perl::Appender::RRDs
  
  to log to the screen, to files and to databases. 
  
  On CPAN, you can find additional appenders like
  
      Log::Log4perl::Layout::XMLLayout
  
  by Guido Carls E<lt>gcarls@cpan.orgE<gt>.
  It allows for hooking up Log::Log4perl with the graphical Log Analyzer
  Chainsaw (see 
  L<Log::Log4perl::FAQ/"Can I use Log::Log4perl with log4j's Chainsaw?">).
  
  =head2 Additional Appenders via Log::Dispatch
  
  C<Log::Log4perl> also supports I<Dave Rolskys> excellent C<Log::Dispatch>
  framework which implements a wide variety of different appenders. 
  
  Here's the list of appender modules currently available via C<Log::Dispatch>:
  
         Log::Dispatch::ApacheLog
         Log::Dispatch::DBI (by Tatsuhiko Miyagawa)
         Log::Dispatch::Email,
         Log::Dispatch::Email::MailSend,
         Log::Dispatch::Email::MailSendmail,
         Log::Dispatch::Email::MIMELite
         Log::Dispatch::File
         Log::Dispatch::FileRotate (by Mark Pfeiffer)
         Log::Dispatch::Handle
         Log::Dispatch::Screen
         Log::Dispatch::Syslog
         Log::Dispatch::Tk (by Dominique Dumont)
  
  Please note that in order to use any of these additional appenders, you
  have to fetch Log::Dispatch from CPAN and install it. Also the particular
  appender you're using might require installing the particular module.
  
  For additional information on appenders, please check the
  L<Log::Log4perl::Appender> manual page.
  
  =head2 Appender Example
  
  Now let's assume that we want to log C<info()> or
  higher prioritized messages in the C<Foo::Bar> category
  to both STDOUT and to a log file, say C<test.log>.
  In the initialization section of your system,
  just define two appenders using the readily available
  C<Log::Log4perl::Appender::File> and C<Log::Log4perl::Appender::Screen> 
  modules:
  
    use Log::Log4perl;
  
       # Configuration in a string ...
    my $conf = q(
      log4perl.category.Foo.Bar          = INFO, Logfile, Screen
  
      log4perl.appender.Logfile          = Log::Log4perl::Appender::File
      log4perl.appender.Logfile.filename = test.log
      log4perl.appender.Logfile.layout   = Log::Log4perl::Layout::PatternLayout
      log4perl.appender.Logfile.layout.ConversionPattern = [%r] %F %L %m%n
  
      log4perl.appender.Screen         = Log::Log4perl::Appender::Screen
      log4perl.appender.Screen.stderr  = 0
      log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout
    );
  
       # ... passed as a reference to init()
    Log::Log4perl::init( \$conf );
  
  Once the initialization shown above has happened once, typically in
  the startup code of your system, just use the defined logger anywhere in 
  your system:
  
    ##########################
    # ... in some function ...
    ##########################
    my $log = Log::Log4perl::get_logger("Foo::Bar");
  
      # Logs both to STDOUT and to the file test.log
    $log->info("Important Info!");
  
  The C<layout> settings specified in the configuration section define the 
  format in which the
  message is going to be logged by the specified appender. The format shown
  for the file appender is logging not only the message but also the number of
  milliseconds since the program has started (%r), the name of the file
  the call to the logger has happened and the line number there (%F and
  %L), the message itself (%m) and a OS-specific newline character (%n):
  
      [187] ./myscript.pl 27 Important Info!
  
  The
  screen appender above, on the other hand, 
  uses a C<SimpleLayout>, which logs the 
  debug level, a hyphen (-) and the log message:
  
      INFO - Important Info!
  
  For more detailed info on layout formats, see L<Log Layouts>. 
  
  In the configuration sample above, we chose to define a I<category> 
  logger (C<Foo::Bar>).
  This will cause only messages originating from
  this specific category logger to be logged in the defined format
  and locations.
  
  =head2 Logging newlines
  
  There's some controversy between different logging systems as to when and 
  where newlines are supposed to be added to logged messages.
  
  The Log4perl way is that a logging statement I<should not> 
  contain a newline:
  
      $logger->info("Some message");
      $logger->info("Another message");
  
  If this is supposed to end up in a log file like
  
      Some message
      Another message
  
  then an appropriate appender layout like "%m%n" will take care of adding
  a newline at the end of each message to make sure every message is 
  printed on its own line.
  
  Other logging systems, Log::Dispatch in particular, recommend adding the
  newline to the log statement. This doesn't work well, however, if you, say,
  replace your file appender by a database appender, and all of a sudden
  those newlines scattered around the code don't make sense anymore.
  
  Assigning matching layouts to different appenders and leaving newlines
  out of the code solves this problem. If you inherited code that has logging
  statements with newlines and want to make it work with Log4perl, read
  the L<Log::Log4perl::Layout::PatternLayout> documentation on how to 
  accomplish that.
  
  =head2 Configuration files
  
  As shown above, you can define C<Log::Log4perl> loggers both from within
  your Perl code or from configuration files. The latter have the unbeatable
  advantage that you can modify your system's logging behaviour without 
  interfering with the code at all. So even if your code is being run by 
  somebody who's totally oblivious to Perl, they still can adapt the
  module's logging behaviour to their needs.
  
  C<Log::Log4perl> has been designed to understand C<Log4j> configuration
  files -- as used by the original Java implementation. Instead of 
  reiterating the format description in [2], let me just list three
  examples (also derived from [2]), which should also illustrate
  how it works:
  
      log4j.rootLogger=DEBUG, A1
      log4j.appender.A1=org.apache.log4j.ConsoleAppender
      log4j.appender.A1.layout=org.apache.log4j.PatternLayout
      log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %c %x - %m%n
  
  This enables messages of priority C<DEBUG> or higher in the root
  hierarchy and has the system write them to the console. 
  C<ConsoleAppender> is a Java appender, but C<Log::Log4perl> jumps
  through a significant number of hoops internally to map these to their
  corresponding Perl classes, C<Log::Log4perl::Appender::Screen> in this case.
  
  Second example:
  
      log4perl.rootLogger=DEBUG, A1
      log4perl.appender.A1=Log::Log4perl::Appender::Screen
      log4perl.appender.A1.layout=PatternLayout
      log4perl.appender.A1.layout.ConversionPattern=%d %-5p %c - %m%n
      log4perl.logger.com.foo=WARN
  
  This defines two loggers: The root logger and the C<com.foo> logger.
  The root logger is easily triggered by debug-messages, 
  but the C<com.foo> logger makes sure that messages issued within
  the C<Com::Foo> component and below are only forwarded to the appender
  if they're of priority I<warning> or higher. 
  
  Note that the C<com.foo> logger doesn't define an appender. Therefore,
  it will just propagate the message up the hierarchy until the root logger
  picks it up and forwards it to the one and only appender of the root
  category, using the format defined for it.
  
  Third example:
  
      log4j.rootLogger=DEBUG, stdout, R
      log4j.appender.stdout=org.apache.log4j.ConsoleAppender
      log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
      log4j.appender.stdout.layout.ConversionPattern=%5p (%F:%L) - %m%n
      log4j.appender.R=org.apache.log4j.RollingFileAppender
      log4j.appender.R.File=example.log
      log4j.appender.R.layout=org.apache.log4j.PatternLayout
      log4j.appender.R.layout.ConversionPattern=%p %c - %m%n
  
  The root logger defines two appenders here: C<stdout>, which uses 
  C<org.apache.log4j.ConsoleAppender> (ultimately mapped by C<Log::Log4perl>
  to L<Log::Log4perl::Appender::Screen>) to write to the screen. And
  C<R>, a C<org.apache.log4j.RollingFileAppender> 
  (mapped by C<Log::Log4perl> to 
  L<Log::Dispatch::FileRotate> with the C<File> attribute specifying the
  log file.
  
  See L<Log::Log4perl::Config> for more examples and syntax explanations.
  
  =head2 Log Layouts
  
  If the logging engine passes a message to an appender, because it thinks
  it should be logged, the appender doesn't just
  write it out haphazardly. There's ways to tell the appender how to format
  the message and add all sorts of interesting data to it: The date and
  time when the event happened, the file, the line number, the
  debug level of the logger and others.
  
  There's currently two layouts defined in C<Log::Log4perl>: 
  C<Log::Log4perl::Layout::SimpleLayout> and
  C<Log::Log4perl::Layout::PatternLayout>:
  
  =over 4 
  
  =item C<Log::Log4perl::SimpleLayout> 
  
  formats a message in a simple
  way and just prepends it by the debug level and a hyphen:
  C<"$level - $message>, for example C<"FATAL - Can't open password file">.
  
  =item C<Log::Log4perl::Layout::PatternLayout> 
  
  on the other hand is very powerful and 
  allows for a very flexible format in C<printf>-style. The format
  string can contain a number of placeholders which will be
  replaced by the logging engine when it's time to log the message:
  
      %c Category of the logging event.
      %C Fully qualified package (or class) name of the caller
      %d Current date in yyyy/MM/dd hh:mm:ss format
      %F File where the logging event occurred
      %H Hostname (if Sys::Hostname is available)
      %l Fully qualified name of the calling method followed by the
         callers source the file name and line number between 
         parentheses.
      %L Line number within the file where the log statement was issued
      %m The message to be logged
      %m{chomp} The message to be logged, stripped off a trailing newline
      %M Method or function where the logging request was issued
      %n Newline (OS-independent)
      %p Priority of the logging event
      %P pid of the current process
      %r Number of milliseconds elapsed from program start to logging 
         event
      %R Number of milliseconds elapsed from last logging event to
         current logging event 
      %T A stack trace of functions called
      %x The topmost NDC (see below)
      %X{key} The entry 'key' of the MDC (see below)
      %% A literal percent (%) sign
  
  NDC and MDC are explained in L<"Nested Diagnostic Context (NDC)">
  and L<"Mapped Diagnostic Context (MDC)">.
  
  Also, C<%d> can be fine-tuned to display only certain characteristics
  of a date, according to the SimpleDateFormat in the Java World
  (L<http://java.sun.com/j2se/1.3/docs/api/java/text/SimpleDateFormat.html>)
  
  In this way, C<%d{HH:mm}> displays only hours and minutes of the current date,
  while C<%d{yy, EEEE}> displays a two-digit year, followed by a spelled-out day
  (like C<Wednesday>). 
  
  Similar options are available for shrinking the displayed category or
  limit file/path components, C<%F{1}> only displays the source file I<name>
  without any path components while C<%F> logs the full path. %c{2} only
  logs the last two components of the current category, C<Foo::Bar::Baz> 
  becomes C<Bar::Baz> and saves space.
  
  If those placeholders aren't enough, then you can define your own right in
  the config file like this:
  
      log4perl.PatternLayout.cspec.U = sub { return "UID $<" }
  
  See L<Log::Log4perl::Layout::PatternLayout> for further details on
  customized specifiers.
  
  Please note that the subroutines you're defining in this way are going
  to be run in the C<main> namespace, so be sure to fully qualify functions
  and variables if they're located in different packages.
  
  SECURITY NOTE: this feature means arbitrary perl code can be embedded in the 
  config file.  In the rare case where the people who have access to your config 
  file are different from the people who write your code and shouldn't have 
  execute rights, you might want to call
  
      Log::Log4perl::Config->allow_code(0);
  
  before you call init(). Alternatively you can supply a restricted set of
  Perl opcodes that can be embedded in the config file as described in
  L<"Restricting what Opcodes can be in a Perl Hook">.
  
  =back
  
  All placeholders are quantifiable, just like in I<printf>. Following this 
  tradition, C<%-20c> will reserve 20 chars for the category and left-justify it.
  
  For more details on logging and how to use the flexible and the simple
  format, check out the original C<log4j> website under
  
  L<SimpleLayout|http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/SimpleLayout.html>
  and
  L<PatternLayout|http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html>
  
  =head2 Penalties
  
  Logging comes with a price tag. C<Log::Log4perl> has been optimized
  to allow for maximum performance, both with logging enabled and disabled.
  
  But you need to be aware that there's a small hit every time your code
  encounters a log statement -- no matter if logging is enabled or not. 
  C<Log::Log4perl> has been designed to keep this so low that it will
  be unnoticeable to most applications.
  
  Here's a couple of tricks which help C<Log::Log4perl> to avoid
  unnecessary delays:
  
  You can save serious time if you're logging something like
  
          # Expensive in non-debug mode!
      for (@super_long_array) {
          $logger->debug("Element: $_");
      }
  
  and C<@super_long_array> is fairly big, so looping through it is pretty
  expensive. Only you, the programmer, knows that going through that C<for>
  loop can be skipped entirely if the current logging level for the 
  actual component is higher than C<debug>.
  In this case, use this instead:
  
          # Cheap in non-debug mode!
      if($logger->is_debug()) {
          for (@super_long_array) {
              $logger->debug("Element: $_");
          }
      }
  
  If you're afraid that generating the parameters to the
  logging function is fairly expensive, use closures:
  
          # Passed as subroutine ref
      use Data::Dumper;
      $logger->debug(sub { Dumper($data) } );
  
  This won't unravel C<$data> via Dumper() unless it's actually needed
  because it's logged. 
  
  Also, Log::Log4perl lets you specify arguments
  to logger functions in I<message output filter syntax>:
  
      $logger->debug("Structure: ",
                     { filter => \&Dumper,
                       value  => $someref });
  
  In this way, shortly before Log::Log4perl sending the
  message out to any appenders, it will be searching all arguments for
  hash references and treat them in a special way:
  
  It will invoke the function given as a reference with the C<filter> key
  (C<Data::Dumper::Dumper()>) and pass it the value that came with
  the key named C<value> as an argument.
  The anonymous hash in the call above will be replaced by the return 
  value of the filter function.
  
  =head1 Categories
  
  B<Categories are also called "Loggers" in Log4perl, both refer
  to the same thing and these terms are used interchangeably.>
  C<Log::Log4perl> uses I<categories> to determine if a log statement in
  a component should be executed or suppressed at the current logging level.
  Most of the time, these categories are just the classes the log statements
  are located in:
  
      package Candy::Twix;
  
      sub new { 
          my $logger = Log::Log4perl->get_logger("Candy::Twix");
          $logger->debug("Creating a new Twix bar");
          bless {}, shift;
      }
   
      # ...
  
      package Candy::Snickers;
  
      sub new { 
          my $logger = Log::Log4perl->get_logger("Candy.Snickers");
          $logger->debug("Creating a new Snickers bar");
          bless {}, shift;
      }
  
      # ...
  
      package main;
      Log::Log4perl->init("mylogdefs.conf");
  
          # => "LOG> Creating a new Snickers bar"
      my $first = Candy::Snickers->new();
          # => "LOG> Creating a new Twix bar"
      my $second = Candy::Twix->new();
  
  Note that you can separate your category hierarchy levels
  using either dots like
  in Java (.) or double-colons (::) like in Perl. Both notations
  are equivalent and are handled the same way internally.
  
  However, categories are just there to make
  use of inheritance: if you invoke a logger in a sub-category, 
  it will bubble up the hierarchy and call the appropriate appenders.
  Internally, categories are not related to the class hierarchy of the program
  at all -- they're purely virtual. You can use arbitrary categories --
  for example in the following program, which isn't oo-style, but
  procedural:
  
      sub print_portfolio {
  
          my $log = Log::Log4perl->get_logger("user.portfolio");
          $log->debug("Quotes requested: @_");
  
          for(@_) {
              print "$_: ", get_quote($_), "\n";
          }
      }
  
      sub get_quote {
  
          my $log = Log::Log4perl->get_logger("internet.quotesystem");
          $log->debug("Fetching quote: $_[0]");
  
          return yahoo_quote($_[0]);
      }
  
  The logger in first function, C<print_portfolio>, is assigned the
  (virtual) C<user.portfolio> category. Depending on the C<Log4perl>
  configuration, this will either call a C<user.portfolio> appender,
  a C<user> appender, or an appender assigned to root -- without
  C<user.portfolio> having any relevance to the class system used in 
  the program.
  The logger in the second function adheres to the 
  C<internet.quotesystem> category -- again, maybe because it's bundled 
  with other Internet functions, but not because there would be
  a class of this name somewhere.
  
  However, be careful, don't go overboard: if you're developing a system
  in object-oriented style, using the class hierarchy is usually your best
  choice. Think about the people taking over your code one day: The
  class hierarchy is probably what they know right up front, so it's easy
  for them to tune the logging to their needs.
  
  =head2 Turn off a component
  
  C<Log4perl> doesn't only allow you to selectively switch I<on> a category
  of log messages, you can also use the mechanism to selectively I<disable>
  logging in certain components whereas logging is kept turned on in higher-level
  categories. This mechanism comes in handy if you find that while bumping 
  up the logging level of a high-level (i. e. close to root) category, 
  that one component logs more than it should, 
  
  Here's how it works: 
  
      ############################################################
      # Turn off logging in a lower-level category while keeping
      # it active in higher-level categories.
      ############################################################
      log4perl.rootLogger=DEBUG, LOGFILE
      log4perl.logger.deep.down.the.hierarchy = ERROR, LOGFILE
  
      # ... Define appenders ...
  
  This way, log messages issued from within 
  C<Deep::Down::The::Hierarchy> and below will be
  logged only if they're C<ERROR> or worse, while in all other system components
  even C<DEBUG> messages will be logged.
  
  =head2 Return Values
  
  All logging methods return values indicating if their message
  actually reached one or more appenders. If the message has been
  suppressed because of level constraints, C<undef> is returned.
  
  For example,
  
      my $ret = $logger->info("Message");
  
  will return C<undef> if the system debug level for the current category
  is not C<INFO> or more permissive. 
  If Log::Log4perl
  forwarded the message to one or more appenders, the number of appenders
  is returned.
  
  If appenders decide to veto on the message with an appender threshold,
  the log method's return value will have them excluded. This means that if
  you've got one appender holding an appender threshold and you're 
  logging a message
  which passes the system's log level hurdle but not the appender threshold,
  C<0> will be returned by the log function.
  
  The bottom line is: Logging functions will return a I<true> value if the message
  made it through to one or more appenders and a I<false> value if it didn't.
  This allows for constructs like
  
      $logger->fatal("@_") or print STDERR "@_\n";
  
  which will ensure that the fatal message isn't lost
  if the current level is lower than FATAL or printed twice if 
  the level is acceptable but an appender already points to STDERR.
  
  =head2 Pitfalls with Categories
  
  Be careful with just blindly reusing the system's packages as
  categories. If you do, you'll get into trouble with inherited methods.
  Imagine the following class setup:
  
      use Log::Log4perl;
  
      ###########################################
      package Bar;
      ###########################################
      sub new {
          my($class) = @_;
          my $logger = Log::Log4perl::get_logger(__PACKAGE__);
          $logger->debug("Creating instance");
          bless {}, $class;
      }
      ###########################################
      package Bar::Twix;
      ###########################################
      our @ISA = qw(Bar);
  
      ###########################################
      package main;
      ###########################################
      Log::Log4perl->init(\ qq{
      log4perl.category.Bar.Twix = DEBUG, Screen
      log4perl.appender.Screen = Log::Log4perl::Appender::Screen
      log4perl.appender.Screen.layout = SimpleLayout
      });
  
      my $bar = Bar::Twix->new();
  
  C<Bar::Twix> just inherits everything from C<Bar>, including the constructor
  C<new()>.
  Contrary to what you might be thinking at first, this won't log anything. 
  Reason for this is the C<get_logger()> call in package C<Bar>, which
  will always get a logger of the C<Bar> category, even if we call C<new()> via
  the C<Bar::Twix> package, which will make perl go up the inheritance 
  tree to actually execute C<Bar::new()>. Since we've only defined logging
  behaviour for C<Bar::Twix> in the configuration file, nothing will happen.
  
  This can be fixed by changing the C<get_logger()> method in C<Bar::new()>
  to obtain a logger of the category matching the
  I<actual> class of the object, like in
  
          # ... in Bar::new() ...
      my $logger = Log::Log4perl::get_logger( $class );
  
  In a method other than the constructor, the class name of the actual
  object can be obtained by calling C<ref()> on the object reference, so
  
      package BaseClass;
      use Log::Log4perl qw( get_logger );
  
      sub new { 
          bless {}, shift; 
      }
  
      sub method {
          my( $self ) = @_;
  
          get_logger( ref $self )->debug( "message" );
      }
  
      package SubClass;
      our @ISA = qw(BaseClass);
  
  is the recommended pattern to make sure that 
  
      my $sub = SubClass->new();
      $sub->meth();
  
  starts logging if the C<"SubClass"> category 
  (and not the C<"BaseClass"> category has logging enabled at the DEBUG level.
  
  =head2 Initialize once and only once
  
  It's important to realize that Log::Log4perl gets initialized once and only
  once, typically at the start of a program or system. Calling C<init()>
  more than once will cause it to clobber the existing configuration and
  I<replace> it by the new one.
  
  If you're in a traditional CGI environment, where every request is
  handled by a new process, calling C<init()> every time is fine. In
  persistent environments like C<mod_perl>, however, Log::Log4perl
  should be initialized either at system startup time (Apache offers
  startup handlers for that) or via
  
          # Init or skip if already done
      Log::Log4perl->init_once($conf_file);
  
  C<init_once()> is identical to C<init()>, just with the exception
  that it will leave a potentially existing configuration alone and 
  will only call C<init()> if Log::Log4perl hasn't been initialized yet.
  
  If you're just curious if Log::Log4perl has been initialized yet, the
  check
  
      if(Log::Log4perl->initialized()) {
          # Yes, Log::Log4perl has already been initialized
      } else {
          # No, not initialized yet ...
      }
  
  can be used.
  
  If you're afraid that the components of your system are stepping on 
  each other's toes or if you are thinking that different components should
  initialize Log::Log4perl separately, try to consolidate your system
  to use a centralized Log4perl configuration file and use 
  Log4perl's I<categories> to separate your components.
  
  =head2 Custom Filters
  
  Log4perl allows the use of customized filters in its appenders
  to control the output of messages. These filters might grep for
  certain text chunks in a message, verify that its priority
  matches or exceeds a certain level or that this is the 10th
  time the same message has been submitted -- and come to a log/no log 
  decision based upon these circumstantial facts.
  
  Check out L<Log::Log4perl::Filter> for detailed instructions 
  on how to use them.
  
  =head2 Performance
  
  The performance of Log::Log4perl calls obviously depends on a lot of things.
  But to give you a general idea, here's some rough numbers:
  
  On a Pentium 4 Linux box at 2.4 GHz, you'll get through
  
  =over 4
  
  =item *
  
  500,000 suppressed log statements per second
  
  =item *
  
  30,000 logged messages per second (using an in-memory appender)
  
  =item *
  
  init_and_watch delay mode: 300,000 suppressed, 30,000 logged.
  init_and_watch signal mode: 450,000 suppressed, 30,000 logged.
  
  =back
  
  Numbers depend on the complexity of the Log::Log4perl configuration.
  For a more detailed benchmark test, check the C<docs/benchmark.results.txt> 
  document in the Log::Log4perl distribution.
  
  =head1 Cool Tricks
  
  Here's a collection of useful tricks for the advanced C<Log::Log4perl> user.
  For more, check the FAQ, either in the distribution 
  (L<Log::Log4perl::FAQ>) or on L<http://log4perl.sourceforge.net>.
  
  =head2 Shortcuts
  
  When getting an instance of a logger, instead of saying
  
      use Log::Log4perl;
      my $logger = Log::Log4perl->get_logger();
  
  it's often more convenient to import the C<get_logger> method from 
  C<Log::Log4perl> into the current namespace:
  
      use Log::Log4perl qw(get_logger);
      my $logger = get_logger();
  
  Please note this difference: To obtain the root logger, please use
  C<get_logger("")>, call it without parameters (C<get_logger()>), you'll
  get the logger of a category named after the current package. 
  C<get_logger()> is equivalent to C<get_logger(__PACKAGE__)>.
  
  =head2 Alternative initialization
  
  Instead of having C<init()> read in a configuration file by specifying
  a file name or passing it a reference to an open filehandle
  (C<Log::Log4perl-E<gt>init( \*FILE )>),
  you can 
  also pass in a reference to a string, containing the content of
  the file:
  
      Log::Log4perl->init( \$config_text );
  
  Also, if you've got the C<name=value> pairs of the configuration in
  a hash, you can just as well initialize C<Log::Log4perl> with
  a reference to it:
  
      my %key_value_pairs = (
          "log4perl.rootLogger"       => "ERROR, LOGFILE",
          "log4perl.appender.LOGFILE" => "Log::Log4perl::Appender::File",
          ...
      );
  
      Log::Log4perl->init( \%key_value_pairs );
  
  Or also you can use a URL, see below:
  
  =head2 Using LWP to parse URLs
  
  (This section borrowed from XML::DOM::Parser by T.J. Mather).
  
  The init() function now also supports URLs, e.g. I<http://www.erols.com/enno/xsa.xml>.
  It uses LWP to download the file and then calls parse() on the resulting string.
  By default it will use a L<LWP::UserAgent> that is created as follows:
  
   use LWP::UserAgent;
   $LWP_USER_AGENT = LWP::UserAgent->new;
   $LWP_USER_AGENT->env_proxy;
  
  Note that env_proxy reads proxy settings from environment variables, which is what Log4perl needs to
  do to get through our firewall. If you want to use a different LWP::UserAgent, you can 
  set it with
  
      Log::Log4perl::Config::set_LWP_UserAgent($my_agent);
  
  Currently, LWP is used when the filename (passed to parsefile) starts with one of
  the following URL schemes: http, https, ftp, wais, gopher, or file (followed by a colon.)
  
  Don't use this feature with init_and_watch().
  
  =head2 Automatic reloading of changed configuration files
  
  Instead of just statically initializing Log::Log4perl via
  
      Log::Log4perl->init($conf_file);
  
  there's a way to have Log::Log4perl periodically check for changes
  in the configuration and reload it if necessary:
  
      Log::Log4perl->init_and_watch($conf_file, $delay);
  
  In this mode, Log::Log4perl will examine the configuration file 
  C<$conf_file> every C<$delay> seconds for changes via the file's
  last modification timestamp. If the file has been updated, it will
  be reloaded and replace the current Log::Log4perl configuration.
  
  The way this works is that with every logger function called 
  (debug(), is_debug(), etc.), Log::Log4perl will check if the delay 
  interval has expired. If so, it will run a -M file check on the 
  configuration file. If its timestamp has been modified, the current
  configuration will be dumped and new content of the file will be
  loaded.
  
  This convenience comes at a price, though: Calling time() with every
  logging function call, especially the ones that are "suppressed" (!), 
  will slow down these Log4perl calls by about 40%.
  
  To alleviate this performance hit a bit, C<init_and_watch()> 
  can be configured to listen for a Unix signal to reload the 
  configuration instead:
  
      Log::Log4perl->init_and_watch($conf_file, 'HUP');
  
  This will set up a signal handler for SIGHUP and reload the configuration
  if the application receives this signal, e.g. via the C<kill> command:
  
      kill -HUP pid
  
  where C<pid> is the process ID of the application. This will bring you back
  to about 85% of Log::Log4perl's normal execution speed for suppressed
  statements. For details, check out L<"Performance">. For more info
  on the signal handler, look for L<Log::Log4perl::Config::Watch/"SIGNAL MODE">.
  
  If you have a somewhat long delay set between physical config file checks
  or don't want to use the signal associated with the config file watcher,
  you can trigger a configuration reload at the next possible time by
  calling C<Log::Log4perl::Config-E<gt>watcher-E<gt>force_next_check()>.
  
  One thing to watch out for: If the configuration file contains a syntax
  or other fatal error, a running application will stop with C<die> if
  this damaged configuration will be loaded during runtime, triggered
  either by a signal or if the delay period expired and the change is 
  detected. This behaviour might change in the future.
  
  To allow the application to intercept and control a configuration reload
  in init_and_watch mode, a callback can be specified:
  
      Log::Log4perl->init_and_watch($conf_file, 10, { 
              preinit_callback => \&callback });
  
  If Log4perl determines that the configuration needs to be reloaded, it will
  call the C<preinit_callback> function without parameters. If the callback
  returns a true value, Log4perl will proceed and reload the configuration.  If
  the callback returns a false value, Log4perl will keep the old configuration
  and skip reloading it until the next time around.  Inside the callback, an
  application can run all kinds of checks, including accessing the configuration
  file, which is available via
  C<Log::Log4perl::Config-E<gt>watcher()-E<gt>file()>.
  
  =head2 Variable Substitution
  
  To avoid having to retype the same expressions over and over again,
  Log::Log4perl's configuration files support simple variable substitution.
  New variables are defined simply by adding
  
      varname = value
  
  lines to the configuration file before using
  
      ${varname}
  
  afterwards to recall the assigned values. Here's an example:
  
      layout_class   = Log::Log4perl::Layout::PatternLayout
      layout_pattern = %d %F{1} %L> %m %n
      
      log4perl.category.Bar.Twix = WARN, Logfile, Screen
  
      log4perl.appender.Logfile  = Log::Log4perl::Appender::File
      log4perl.appender.Logfile.filename = test.log
      log4perl.appender.Logfile.layout = ${layout_class}
      log4perl.appender.Logfile.layout.ConversionPattern = ${layout_pattern}
  
      log4perl.appender.Screen  = Log::Log4perl::Appender::Screen
      log4perl.appender.Screen.layout = ${layout_class}
      log4perl.appender.Screen.layout.ConversionPattern = ${layout_pattern}
  
  This is a convenient way to define two appenders with the same layout 
  without having to retype the pattern definitions.
  
  Variable substitution via C<${varname}> 
  will first try to find an explicitly defined 
  variable. If that fails, it will check your shell's environment
  for a variable of that name. If that also fails, the program will C<die()>.
  
  =head2 Perl Hooks in the Configuration File
  
  If some of the values used in the Log4perl configuration file 
  need to be dynamically modified by the program, use Perl hooks:
  
      log4perl.appender.File.filename = \
          sub { return getLogfileName(); }
  
  Each value starting with the string C<sub {...> is interpreted as Perl code to
  be executed at the time the application parses the configuration
  via C<Log::Log4perl::init()>. The return value of the subroutine
  is used by Log::Log4perl as the configuration value.
  
  The Perl code is executed in the C<main> package, functions in
  other packages have to be called in fully-qualified notation.
  
  Here's another example, utilizing an environment variable as a
  username for a DBI appender:
  
      log4perl.appender.DB.username = \
          sub { $ENV{DB_USER_NAME } }
  
  However, please note the difference between these code snippets and those
  used for user-defined conversion specifiers as discussed in
  L<Log::Log4perl::Layout::PatternLayout>: 
  While the snippets above are run I<once>
  when C<Log::Log4perl::init()> is called, the conversion specifier
  snippets are executed I<each time> a message is rendered according to
  the PatternLayout.
  
  SECURITY NOTE: this feature means arbitrary perl code can be embedded in the 
  config file.  In the rare case where the people who have access to your config 
  file are different from the people who write your code and shouldn't have 
  execute rights, you might want to set
  
      Log::Log4perl::Config->allow_code(0);
  
  before you call init().  Alternatively you can supply a restricted set of
  Perl opcodes that can be embedded in the config file as described in
  L<"Restricting what Opcodes can be in a Perl Hook">.
  
  =head2 Restricting what Opcodes can be in a Perl Hook
  
  The value you pass to Log::Log4perl::Config->allow_code() determines whether
  the code that is embedded in the config file is eval'd unrestricted, or
  eval'd in a Safe compartment.  By default, a value of '1' is assumed,
  which does a normal 'eval' without any restrictions. A value of '0' 
  however prevents any embedded code from being evaluated.
  
  If you would like fine-grained control over what can and cannot be included
  in embedded code, then please utilize the following methods:
  
   Log::Log4perl::Config->allow_code( $allow );
   Log::Log4perl::Config->allowed_code_ops($op1, $op2, ... );
   Log::Log4perl::Config->vars_shared_with_safe_compartment( [ \%vars | $package, \@vars ] );
   Log::Log4perl::Config->allowed_code_ops_convenience_map( [ \%map | $name, \@mask ] );
  
  Log::Log4perl::Config-E<gt>allowed_code_ops() takes a list of opcode masks
  that are allowed to run in the compartment.  The opcode masks must be
  specified as described in L<Opcode>:
  
   Log::Log4perl::Config->allowed_code_ops(':subprocess');
  
  This example would allow Perl operations like backticks, system, fork, and
  waitpid to be executed in the compartment.  Of course, you probably don't
  want to use this mask -- it would allow exactly what the Safe compartment is
  designed to prevent.
  
  Log::Log4perl::Config-E<gt>vars_shared_with_safe_compartment() 
  takes the symbols which
  should be exported into the Safe compartment before the code is evaluated. 
  The keys of this hash are the package names that the symbols are in, and the
  values are array references to the literal symbol names.  For convenience,
  the default settings export the '%ENV' hash from the 'main' package into the
  compartment:
  
   Log::Log4perl::Config->vars_shared_with_safe_compartment(
     main => [ '%ENV' ],
   );
  
  Log::Log4perl::Config-E<gt>allowed_code_ops_convenience_map() is an accessor
  method to a map of convenience names to opcode masks. At present, the
  following convenience names are defined:
  
   safe        = [ ':browse' ]
   restrictive = [ ':default' ]
  
  For convenience, if Log::Log4perl::Config-E<gt>allow_code() is called with a
  value which is a key of the map previously defined with
  Log::Log4perl::Config-E<gt>allowed_code_ops_convenience_map(), then the
  allowed opcodes are set according to the value defined in the map. If this
  is confusing, consider the following:
  
   use Log::Log4perl;
   
   my $config = <<'END';
    log4perl.logger = INFO, Main
    log4perl.appender.Main = Log::Log4perl::Appender::File
    log4perl.appender.Main.filename = \
        sub { "example" . getpwuid($<) . ".log" }
    log4perl.appender.Main.layout = Log::Log4perl::Layout::SimpleLayout
   END
   
   $Log::Log4perl::Config->allow_code('restrictive');
   Log::Log4perl->init( \$config );       # will fail
   $Log::Log4perl::Config->allow_code('safe');
   Log::Log4perl->init( \$config );       # will succeed
  
  The reason that the first call to -E<gt>init() fails is because the
  'restrictive' name maps to an opcode mask of ':default'.  getpwuid() is not
  part of ':default', so -E<gt>init() fails.  The 'safe' name maps to an opcode
  mask of ':browse', which allows getpwuid() to run, so -E<gt>init() succeeds.
  
  allowed_code_ops_convenience_map() can be invoked in several ways:
  
  =over 4
  
  =item allowed_code_ops_convenience_map()
  
  Returns the entire convenience name map as a hash reference in scalar
  context or a hash in list context.
  
  =item allowed_code_ops_convenience_map( \%map )
  
  Replaces the entire convenience name map with the supplied hash reference.
  
  =item allowed_code_ops_convenience_map( $name )
  
  Returns the opcode mask for the given convenience name, or undef if no such
  name is defined in the map.
  
  =item allowed_code_ops_convenience_map( $name, \@mask )
  
  Adds the given name/mask pair to the convenience name map.  If the name
  already exists in the map, it's value is replaced with the new mask.
  
  =back
  
  as can vars_shared_with_safe_compartment():
  
  =over 4
  
  =item vars_shared_with_safe_compartment()
  
  Return the entire map of packages to variables as a hash reference in scalar
  context or a hash in list context.
  
  =item vars_shared_with_safe_compartment( \%packages )
  
  Replaces the entire map of packages to variables with the supplied hash
  reference.
  
  =item vars_shared_with_safe_compartment( $package )
  
  Returns the arrayref of variables to be shared for a specific package.
  
  =item vars_shared_with_safe_compartment( $package, \@vars )
  
  Adds the given package / varlist pair to the map.  If the package already
  exists in the map, it's value is replaced with the new arrayref of variable
  names.
  
  =back
  
  For more information on opcodes and Safe Compartments, see L<Opcode> and
  L<Safe>.
  
  =head2 Changing the Log Level on a Logger
  
  Log4perl provides some internal functions for quickly adjusting the
  log level from within a running Perl program. 
  
  Now, some people might
  argue that you should adjust your levels from within an external 
  Log4perl configuration file, but Log4perl is everybody's darling.
  
  Typically run-time adjusting of levels is done
  at the beginning, or in response to some external input (like a
  "more logging" runtime command for diagnostics).
  
  You get the log level from a logger object with:
  
      $current_level = $logger->level();
  
  and you may set it with the same method, provided you first
  imported the log level constants, with:
  
      use Log::Log4perl::Level;
  
  Then you can set the level on a logger to one of the constants,
  
      $logger->level($ERROR); # one of DEBUG, INFO, WARN, ERROR, FATAL
  
  To B<increase> the level of logging currently being done, use:
  
      $logger->more_logging($delta);
  
  and to B<decrease> it, use:
  
      $logger->less_logging($delta);
  
  $delta must be a positive integer (for now, we may fix this later ;).
  
  There are also two equivalent functions:
  
      $logger->inc_level($delta);
      $logger->dec_level($delta);
  
  They're included to allow you a choice in readability. Some folks
  will prefer more/less_logging, as they're fairly clear in what they
  do, and allow the programmer not to worry too much about what a Level
  is and whether a higher level means more or less logging. However,
  other folks who do understand and have lots of code that deals with
  levels will probably prefer the inc_level() and dec_level() methods as
  they want to work with Levels and not worry about whether that means
  more or less logging. :)
  
  That diatribe aside, typically you'll use more_logging() or inc_level()
  as such:
  
      my $v = 0; # default level of verbosity.
      
      GetOptions("v+" => \$v, ...);
  
      if( $v ) {
        $logger->more_logging($v); # inc logging level once for each -v in ARGV
      }
  
  =head2 Custom Log Levels
  
  First off, let me tell you that creating custom levels is heavily
  deprecated by the log4j folks. Indeed, instead of creating additional
  levels on top of the predefined DEBUG, INFO, WARN, ERROR and FATAL, 
  you should use categories to control the amount of logging smartly,
  based on the location of the log-active code in the system.
  
  Nevertheless, 
  Log4perl provides a nice way to create custom levels via the 
  create_custom_level() routine function. However, this must be done
  before the first call to init() or get_logger(). Say you want to create
  a NOTIFY logging level that comes after WARN (and thus before INFO).
  You'd do such as follows:
  
      use Log::Log4perl;
      use Log::Log4perl::Level;
  
      Log::Log4perl::Logger::create_custom_level("NOTIFY", "WARN");
  
  And that's it! C<create_custom_level()> creates the following functions /
  variables for level FOO:
  
      $FOO_INT        # integer to use in L4p::Level::to_level()
      $logger->foo()  # log function to log if level = FOO
      $logger->is_foo()   # true if current level is >= FOO
  
  These levels can also be used in your
  config file, but note that your config file probably won't be
  portable to another log4perl or log4j environment unless you've
  made the appropriate mods there too.
  
  Since Log4perl translates log levels to syslog and Log::Dispatch if 
  their appenders are used, you may add mappings for custom levels as well:
  
    Log::Log4perl::Level::add_priority("NOTIFY", "WARN",
                                       $syslog_equiv, $log_dispatch_level);
  
  For example, if your new custom "NOTIFY" level is supposed to map 
  to syslog level 2 ("LOG_NOTICE") and Log::Dispatch level 2 ("notice"), use:
  
    Log::Log4perl::Logger::create_custom_level("NOTIFY", "WARN", 2, 2);
  
  =head2 System-wide log levels
  
  As a fairly drastic measure to decrease (or increase) the logging level
  all over the system with one single configuration option, use the C<threshold>
  keyword in the Log4perl configuration file:
  
      log4perl.threshold = ERROR
  
  sets the system-wide (or hierarchy-wide according to the log4j documentation)
  to ERROR and therefore deprives every logger in the system of the right 
  to log lower-prio messages.
  
  =head2 Easy Mode
  
  For teaching purposes (especially for [1]), I've put C<:easy> mode into 
  C<Log::Log4perl>, which just initializes a single root logger with a 
  defined priority and a screen appender including some nice standard layout:
  
      ### Initialization Section
      use Log::Log4perl qw(:easy);
      Log::Log4perl->easy_init($ERROR);  # Set priority of root logger to ERROR
  
      ### Application Section
      my $logger = get_logger();
      $logger->fatal("This will get logged.");
      $logger->debug("This won't.");
  
  This will dump something like
  
      2002/08/04 11:43:09 ERROR> script.pl:16 main::function - This will get logged.
  
  to the screen. While this has been proven to work well familiarizing people
  with C<Log::Logperl> slowly, effectively avoiding to clobber them over the 
  head with a 
  plethora of different knobs to fiddle with (categories, appenders, levels, 
  layout), the overall mission of C<Log::Log4perl> is to let people use
  categories right from the start to get used to the concept. So, let's keep
  this one fairly hidden in the man page (congrats on reading this far :).
  
  =head2 Stealth loggers
  
  Sometimes, people are lazy. If you're whipping up a 50-line script and want 
  the comfort of Log::Log4perl without having the burden of carrying a
  separate log4perl.conf file or a 5-liner defining that you want to append
  your log statements to a file, you can use the following features:
  
      use Log::Log4perl qw(:easy);
  
      Log::Log4perl->easy_init( { level   => $DEBUG,
                                  file    => ">>test.log" } );
  
          # Logs to test.log via stealth logger
      DEBUG("Debug this!");
      INFO("Info this!");
      WARN("Warn this!");
      ERROR("Error this!");
  
      some_function();
  
      sub some_function {
              # Same here
          FATAL("Fatal this!");
      }
  
  In C<:easy> mode, C<Log::Log4perl> will instantiate a I<stealth logger>
  and introduce the
  convenience functions C<TRACE>, C<DEBUG()>, C<INFO()>, C<WARN()>, 
  C<ERROR()>, C<FATAL()>, and C<ALWAYS> into the package namespace.
  These functions simply take messages as
  arguments and forward them to the stealth loggers methods (C<debug()>,
  C<info()>, and so on).
  
  If a message should never be blocked, regardless of the log level,
  use the C<ALWAYS> function which corresponds to a log level of C<OFF>:
  
      ALWAYS "This will be printed regardless of the log level";
  
  The C<easy_init> method can be called with a single level value to
  create a STDERR appender and a root logger as in
  
      Log::Log4perl->easy_init($DEBUG);
  
  or, as shown below (and in the example above) 
  with a reference to a hash, specifying values
  for C<level> (the logger's priority), C<file> (the appender's data sink),
  C<category> (the logger's category and C<layout> for the appender's 
  pattern layout specification.
  All key-value pairs are optional, they 
  default to C<$DEBUG> for C<level>, C<STDERR> for C<file>,
  C<""> (root category) for C<category> and 
  C<%d %m%n> for C<layout>:
  
      Log::Log4perl->easy_init( { level    => $DEBUG,
                                  file     => ">test.log",
                                  utf8     => 1,
                                  category => "Bar::Twix",
                                  layout   => '%F{1}-%L-%M: %m%n' } );
  
  The C<file> parameter takes file names preceded by C<"E<gt>">
  (overwrite) and C<"E<gt>E<gt>"> (append) as arguments. This will
  cause C<Log::Log4perl::Appender::File> appenders to be created behind
  the scenes. Also the keywords C<STDOUT> and C<STDERR> (no C<E<gt>> or
  C<E<gt>E<gt>>) are recognized, which will utilize and configure
  C<Log::Log4perl::Appender::Screen> appropriately. The C<utf8> flag,
  if set to a true value, runs a C<binmode> command on the file handle
  to establish a utf8 line discipline on the file, otherwise you'll get a
  'wide character in print' warning message and probably not what you'd
  expect as output.
  
  The stealth loggers can be used in different packages, you just need to make
  sure you're calling the "use" function in every package you're using
  C<Log::Log4perl>'s easy services:
  
      package Bar::Twix;
      use Log::Log4perl qw(:easy);
      sub eat { DEBUG("Twix mjam"); }
  
      package Bar::Mars;
      use Log::Log4perl qw(:easy);
      sub eat { INFO("Mars mjam"); }
  
      package main;
  
      use Log::Log4perl qw(:easy);
  
      Log::Log4perl->easy_init( { level    => $DEBUG,
                                  file     => ">>test.log",
                                  category => "Bar::Twix",
                                  layout   => '%F{1}-%L-%M: %m%n' },
                                { level    => $DEBUG,
                                  file     => "STDOUT",
                                  category => "Bar::Mars",
                                  layout   => '%m%n' },
                              );
      Bar::Twix::eat();
      Bar::Mars::eat();
  
  As shown above, C<easy_init()> will take any number of different logger 
  definitions as hash references.
  
  Also, stealth loggers feature the functions C<LOGWARN()>, C<LOGDIE()>,
  and C<LOGEXIT()>,
  combining a logging request with a subsequent Perl warn() or die() or exit()
  statement. So, for example
  
      if($all_is_lost) {
          LOGDIE("Terrible Problem");
      }
  
  will log the message if the package's logger is at least C<FATAL> but
  C<die()> (including the traditional output to STDERR) in any case afterwards.
  
  See L<"Log and die or warn"> for the similar C<logdie()> and C<logwarn()>
  functions of regular (i.e non-stealth) loggers.
  
  Similarily, C<LOGCARP()>, C<LOGCLUCK()>, C<LOGCROAK()>, and C<LOGCONFESS()>
  are provided in C<:easy> mode, facilitating the use of C<logcarp()>,
  C<logcluck()>, C<logcroak()>, and C<logconfess()> with stealth loggers.
  
  B<When using Log::Log4perl in easy mode, 
  please make sure you understand the implications of 
  L</"Pitfalls with Categories">>.
  
  By the way, these convenience functions perform exactly as fast as the 
  standard Log::Log4perl logger methods, there's I<no> performance penalty
  whatsoever.
  
  =head2 Nested Diagnostic Context (NDC)
  
  If you find that your application could use a global (thread-specific)
  data stack which your loggers throughout the system have easy access to,
  use Nested Diagnostic Contexts (NDCs). Also check out
  L<"Mapped Diagnostic Context (MDC)">, this might turn out to be even more
  useful.
  
  For example, when handling a request of a web client, it's probably 
  useful to have the user's IP address available in all log statements
  within code dealing with this particular request. Instead of passing
  this piece of data around between your application functions, you can just
  use the global (but thread-specific) NDC mechanism. It allows you
  to push data pieces (scalars usually) onto its stack via
  
      Log::Log4perl::NDC->push("San");
      Log::Log4perl::NDC->push("Francisco");
  
  and have your loggers retrieve them again via the "%x" placeholder in
  the PatternLayout. With the stack values above and a PatternLayout format
  like "%x %m%n", the call
  
      $logger->debug("rocks");
  
  will end up as 
  
      San Francisco rocks
  
  in the log appender.
  
  The stack mechanism allows for nested structures.
  Just make sure that at the end of the request, you either decrease the stack
  one by one by calling
  
      Log::Log4perl::NDC->pop();
      Log::Log4perl::NDC->pop();
  
  or clear out the entire NDC stack by calling
  
      Log::Log4perl::NDC->remove();
  
  Even if you should forget to do that, C<Log::Log4perl> won't grow the stack
  indefinitely, but limit it to a maximum, defined in C<Log::Log4perl::NDC>
  (currently 5). A call to C<push()> on a full stack will just replace
  the topmost element by the new value.
  
  Again, the stack is always available via the "%x" placeholder
  in the Log::Log4perl::Layout::PatternLayout class whenever a logger
  fires. It will replace "%x" by the blank-separated list of the
  values on the stack. It does that by just calling
  
      Log::Log4perl::NDC->get();
  
  internally. See details on how this standard log4j feature is implemented
  in L<Log::Log4perl::NDC>.
  
  =head2 Mapped Diagnostic Context (MDC)
  
  Just like the previously discussed NDC stores thread-specific
  information in a stack structure, the MDC implements a hash table
  to store key/value pairs in.
  
  The static method
  
      Log::Log4perl::MDC->put($key, $value);
  
  stores C<$value> under a key C<$key>, with which it can be retrieved later
  (possibly in a totally different part of the system) by calling
  the C<get> method:
  
      my $value = Log::Log4perl::MDC->get($key);
  
  If no value has been stored previously under C<$key>, the C<get> method
  will return C<undef>.
  
  Typically, MDC values are retrieved later on via the C<"%X{...}"> placeholder
  in C<Log::Log4perl::Layout::PatternLayout>. If the C<get()> method
  returns C<undef>, the placeholder will expand to the string C<[undef]>.
  
  An application taking a web request might store the remote host
  like
  
      Log::Log4perl::MDC->put("remote_host", $r->headers("HOST"));
  
  at its beginning and if the appender's layout looks something like
  
      log4perl.appender.Logfile.layout.ConversionPattern = %X{remote_host}: %m%n
  
  then a log statement like
  
     DEBUG("Content delivered");
  
  will log something like
  
     adsl-63.dsl.snf.pacbell.net: Content delivered 
  
  later on in the program.
  
  For details, please check L<Log::Log4perl::MDC>.
  
  =head2 Resurrecting hidden Log4perl Statements
  
  Sometimes scripts need to be deployed in environments without having
  Log::Log4perl installed yet. On the other hand, you don't want to
  live without your Log4perl statements -- they're gonna come in
  handy later.
  
  So, just deploy your script with Log4perl statements commented out with the
  pattern C<###l4p>, like in
  
      ###l4p DEBUG "It works!";
      # ...
      ###l4p INFO "Really!";
  
  If Log::Log4perl is available,
  use the C<:resurrect> tag to have Log4perl resurrect those buried 
  statements before the script starts running:
  
      use Log::Log4perl qw(:resurrect :easy);
  
      ###l4p Log::Log4perl->easy_init($DEBUG);
      ###l4p DEBUG "It works!";
      # ...
      ###l4p INFO "Really!";
  
  This will have a source filter kick in and indeed print
  
      2004/11/18 22:08:46 It works!
      2004/11/18 22:08:46 Really!
  
  In environments lacking Log::Log4perl, just comment out the first line
  and the script will run nevertheless (but of course without logging):
  
      # use Log::Log4perl qw(:resurrect :easy);
  
      ###l4p Log::Log4perl->easy_init($DEBUG);
      ###l4p DEBUG "It works!";
      # ...
      ###l4p INFO "Really!";
  
  because everything's a regular comment now. Alternatively, put the
  magic Log::Log4perl comment resurrection line into your shell's 
  PERL5OPT environment variable, e.g. for bash:
  
      set PERL5OPT=-MLog::Log4perl=:resurrect,:easy
      export PERL5OPT
  
  This will awaken the giant within an otherwise silent script like
  the following:
  
      #!/usr/bin/perl
  
      ###l4p Log::Log4perl->easy_init($DEBUG);
      ###l4p DEBUG "It works!";
  
  As of C<Log::Log4perl> 1.12, you can even force I<all> modules
  loaded by a script to have their hidden Log4perl statements
  resurrected. For this to happen, load C<Log::Log4perl::Resurrector>
  I<before> loading any modules:
  
      use Log::Log4perl qw(:easy);
      use Log::Log4perl::Resurrector;
  
      use Foobar; # All hidden Log4perl statements in here will
                  # be uncommented before Foobar gets loaded.
  
      Log::Log4perl->easy_init($DEBUG);
      ...
  
  Check the C<Log::Log4perl::Resurrector> manpage for more details.
  
  =head2 Access defined appenders
  
  All appenders defined in the configuration file or via Perl code
  can be retrieved by the C<appender_by_name()> class method. This comes
  in handy if you want to manipulate or query appender properties after
  the Log4perl configuration has been loaded via C<init()>.
  
  Note that internally, Log::Log4perl uses the C<Log::Log4perl::Appender> 
  wrapper class to control the real appenders (like 
  C<Log::Log4perl::Appender::File> or C<Log::Dispatch::FileRotate>). 
  The C<Log::Log4perl::Appender> class has an C<appender> attribute,
  pointing to the real appender.
  
  The reason for this is that external appenders like 
  C<Log::Dispatch::FileRotate> don't support all of Log::Log4perl's 
  appender control mechanisms (like appender thresholds).
  
  The previously mentioned method C<appender_by_name()> returns a
  reference to the I<real> appender object. If you want access to the
  wrapper class (e.g. if you want to modify the appender's threshold),
  use the hash C<$Log::Log4perl::Logger::APPENDER_BY_NAME{...}> instead,
  which holds references to all appender wrapper objects.
  
  =head2 Modify appender thresholds
  
  To set an appender's threshold, use its C<threshold()> method:
  
      $app->threshold( $FATAL );
  
  To conveniently adjust I<all> appender thresholds (e.g. because a script
  uses more_logging()), use
  
         # decrease thresholds of all appenders
      Log::Log4perl->appender_thresholds_adjust(-1);
  
  This will decrease the thresholds of all appenders in the system by
  one level, i.e. WARN becomes INFO, INFO becomes DEBUG, etc. To only modify 
  selected ones, use
  
         # decrease thresholds of all appenders
      Log::Log4perl->appender_thresholds_adjust(-1, ['AppName1', ...]);
  
  and pass the names of affected appenders in a ref to an array.
  
  =head1 Advanced configuration within Perl
  
  Initializing Log::Log4perl can certainly also be done from within Perl.
  At last, this is what C<Log::Log4perl::Config> does behind the scenes.
  Log::Log4perl's configuration file parsers are using a publically 
  available API to set up Log::Log4perl's categories, appenders and layouts.
  
  Here's an example on how to configure two appenders with the same layout
  in Perl, without using a configuration file at all:
  
    ########################
    # Initialization section
    ########################
    use Log::Log4perl;
    use Log::Log4perl::Layout;
    use Log::Log4perl::Level;
  
       # Define a category logger
    my $log = Log::Log4perl->get_logger("Foo::Bar");
  
       # Define a layout
    my $layout = Log::Log4perl::Layout::PatternLayout->new("[%r] %F %L %m%n");
  
       # Define a file appender
    my $file_appender = Log::Log4perl::Appender->new(
                            "Log::Log4perl::Appender::File",
                            name      => "filelog",
                            filename  => "/tmp/my.log");
  
       # Define a stdout appender
    my $stdout_appender =  Log::Log4perl::Appender->new(
                            "Log::Log4perl::Appender::Screen",
                            name      => "screenlog",
                            stderr    => 0);
  
       # Have both appenders use the same layout (could be different)
    $stdout_appender->layout($layout);
    $file_appender->layout($layout);
  
    $log->add_appender($stdout_appender);
    $log->add_appender($file_appender);
    $log->level($INFO);
  
  Please note the class of the appender object is passed as a I<string> to
  C<Log::Log4perl::Appender> in the I<first> argument. Behind the scenes,
  C<Log::Log4perl::Appender> will create the necessary
  C<Log::Log4perl::Appender::*> (or C<Log::Dispatch::*>) object and pass
  along the name value pairs we provided to
  C<Log::Log4perl::Appender-E<gt>new()> after the first argument.
  
  The C<name> value is optional and if you don't provide one,
  C<Log::Log4perl::Appender-E<gt>new()> will create a unique one for you.
  The names and values of additional parameters are dependent on the requirements
  of the particular appender class and can be looked up in their
  manual pages.
  
  A side note: In case you're wondering if
  C<Log::Log4perl::Appender-E<gt>new()> will also take care of the
  C<min_level> argument to the C<Log::Dispatch::*> constructors called
  behind the scenes -- yes, it does. This is because we want the
  C<Log::Dispatch> objects to blindly log everything we send them
  (C<debug> is their lowest setting) because I<we> in C<Log::Log4perl>
  want to call the shots and decide on when and what to log.
  
  The call to the appender's I<layout()> method specifies the format (as a
  previously created C<Log::Log4perl::Layout::PatternLayout> object) in which the
  message is being logged in the specified appender. 
  If you don't specify a layout, the logger will fall back to
  C<Log::Log4perl::SimpleLayout>, which logs the debug level, a hyphen (-)
  and the log message.
  
  Layouts are objects, here's how you create them:
  
          # Create a simple layout
      my $simple = Log::Log4perl::SimpleLayout();
  
          # create a flexible layout:
          # ("yyyy/MM/dd hh:mm:ss (file:lineno)> message\n")
      my $pattern = Log::Log4perl::Layout::PatternLayout("%d (%F:%L)> %m%n");
  
  Every appender has exactly one layout assigned to it. You assign
  the layout to the appender using the appender's C<layout()> object:
  
      my $app =  Log::Log4perl::Appender->new(
                    "Log::Log4perl::Appender::Screen",
                    name      => "screenlog",
                    stderr    => 0);
  
          # Assign the previously defined flexible layout
      $app->layout($pattern);
  
          # Add the appender to a previously defined logger
      $logger->add_appender($app);
  
          # ... and you're good to go!
      $logger->debug("Blah");
          # => "2002/07/10 23:55:35 (test.pl:207)> Blah\n"
  
  It's also possible to remove appenders from a logger:
  
      $logger->remove_appender($appender_name);
  
  will remove an appender, specified by name, from a given logger. 
  Please note that this does
  I<not> remove an appender from the system.
  
  To eradicate an appender from the system, 
  you need to call C<Log::Log4perl-E<gt>eradicate_appender($appender_name)>
  which will first remove the appender from every logger in the system
  and then will delete all references Log4perl holds to it.
  
  To remove a logger from the system, use 
  C<Log::Log4perl-E<gt>remove_logger($logger)>. After the remaining 
  reference C<$logger> goes away, the logger will self-destruct. If the
  logger in question is a stealth logger, all of its convenience shortcuts
  (DEBUG, INFO, etc) will turn into no-ops.
  
  =head1 How about Log::Dispatch::Config?
  
  Tatsuhiko Miyagawa's C<Log::Dispatch::Config> is a very clever 
  simplified logger implementation, covering some of the I<log4j>
  functionality. Among the things that 
  C<Log::Log4perl> can but C<Log::Dispatch::Config> can't are:
  
  =over 4
  
  =item *
  
  You can't assign categories to loggers. For small systems that's fine,
  but if you can't turn off and on detailed logging in only a tiny
  subsystem of your environment, you're missing out on a majorly
  useful log4j feature.
  
  =item *
  
  Defining appender thresholds. Important if you want to solve problems like
  "log all messages of level FATAL to STDERR, plus log all DEBUG
  messages in C<Foo::Bar> to a log file". If you don't have appenders
  thresholds, there's no way to prevent cluttering STDERR with DEBUG messages.
  
  =item *
  
  PatternLayout specifications in accordance with the standard
  (e.g. "%d{HH:mm}").
  
  =back
  
  Bottom line: Log::Dispatch::Config is fine for small systems with
  simple logging requirements. However, if you're
  designing a system with lots of subsystems which you need to control
  independently, you'll love the features of C<Log::Log4perl>,
  which is equally easy to use.
  
  =head1 Using Log::Log4perl with wrapper functions and classes
  
  If you don't use C<Log::Log4perl> as described above, 
  but from a wrapper function, the pattern layout will generate wrong data 
  for %F, %C, %L, and the like. Reason for this is that C<Log::Log4perl>'s 
  loggers assume a static caller depth to the application that's using them. 
  
  If you're using
  one (or more) wrapper functions, C<Log::Log4perl> will indicate where
  your logger function called the loggers, not where your application
  called your wrapper:
  
      use Log::Log4perl qw(:easy);
      Log::Log4perl->easy_init({ level => $DEBUG, 
                                 layout => "%M %m%n" });
  
      sub mylog {
          my($message) = @_;
  
          DEBUG $message;
      }
  
      sub func {
          mylog "Hello";
      }
  
      func();
  
  prints
  
      main::mylog Hello
  
  but that's probably not what your application expects. Rather, you'd
  want
  
      main::func Hello
  
  because the C<func> function called your logging function.
  
  But don't despair, there's a solution: Just register your wrapper
  package with Log4perl beforehand. If Log4perl then finds that it's being 
  called from a registered wrapper, it will automatically step up to the
  next call frame.
  
      Log::Log4perl->wrapper_register(__PACKAGE__);
  
      sub mylog {
          my($message) = @_;
  
          DEBUG $message;
      }
  
  Alternatively, you can increase the value of the global variable
  C<$Log::Log4perl::caller_depth> (defaults to 0) by one for every
  wrapper that's in between your application and C<Log::Log4perl>,
  then C<Log::Log4perl> will compensate for the difference:
  
      sub mylog {
          my($message) = @_;
  
          local $Log::Log4perl::caller_depth =
                $Log::Log4perl::caller_depth + 1;
          DEBUG $message;
      }
  
  Also, note that if you're writing a subclass of Log4perl, like
  
      package MyL4pWrapper;
      use Log::Log4perl;
      our @ISA = qw(Log::Log4perl);
  
  and you want to call get_logger() in your code, like
  
      use MyL4pWrapper;
  
      sub get_logger {
          my $logger = Log::Log4perl->get_logger();
      }
  
  then the get_logger() call will get a logger for the C<MyL4pWrapper>
  category, not for the package calling the wrapper class as in
  
      package UserPackage;
      my $logger = MyL4pWrapper->get_logger();
  
  To have the above call to get_logger return a logger for the 
  "UserPackage" category, you need to tell Log4perl that "MyL4pWrapper"
  is a Log4perl wrapper class:
  
      use MyL4pWrapper;
      Log::Log4perl->wrapper_register(__PACKAGE__);
  
      sub get_logger {
            # Now gets a logger for the category of the calling package
          my $logger = Log::Log4perl->get_logger();
      }
  
  This feature works both for Log4perl-relaying classes like the wrapper
  described above, and for wrappers that inherit from Log4perl use Log4perl's
  get_logger function via inheritance, alike.
  
  =head1 Access to Internals
  
  The following methods are only of use if you want to peek/poke in
  the internals of Log::Log4perl. Be careful not to disrupt its
  inner workings.
  
  =over 4
  
  =item C<< Log::Log4perl->appenders() >>
  
  To find out which appenders are currently defined (not only
  for a particular logger, but overall), a C<appenders()>
  method is available to return a reference to a hash mapping appender
  names to their Log::Log4perl::Appender object references.
  
  =back
  
  =head1 Dirty Tricks
  
  =over 4
  
  =item infiltrate_lwp()
  
  The famous LWP::UserAgent module isn't Log::Log4perl-enabled. Often, though,
  especially when tracing Web-related problems, it would be helpful to get
  some insight on what's happening inside LWP::UserAgent. Ideally, LWP::UserAgent
  would even play along in the Log::Log4perl framework.
  
  A call to C<Log::Log4perl-E<gt>infiltrate_lwp()> does exactly this. 
  In a very rude way, it pulls the rug from under LWP::UserAgent and transforms
  its C<debug/conn> messages into C<debug()> calls of loggers of the category
  C<"LWP::UserAgent">. Similarily, C<LWP::UserAgent>'s C<trace> messages 
  are turned into C<Log::Log4perl>'s C<info()> method calls. Note that this
  only works for LWP::UserAgent versions E<lt> 5.822, because this (and
  probably later) versions miss debugging functions entirely.
  
  =item Suppressing 'duplicate' LOGDIE messages
  
  If a script with a simple Log4perl configuration uses logdie() to catch
  errors and stop processing, as in 
  
      use Log::Log4perl qw(:easy) ;
      Log::Log4perl->easy_init($DEBUG);
      
      shaky_function() or LOGDIE "It failed!";
  
  there's a cosmetic problem: The message gets printed twice:
  
      2005/07/10 18:37:14 It failed!
      It failed! at ./t line 12
  
  The obvious solution is to use LOGEXIT() instead of LOGDIE(), but there's
  also a special tag for Log4perl that suppresses the second message:
  
      use Log::Log4perl qw(:no_extra_logdie_message);
  
  This causes logdie() and logcroak() to call exit() instead of die(). To
  modify the script exit code in these occasions, set the variable
  C<$Log::Log4perl::LOGEXIT_CODE> to the desired value, the default is 1.
  
  =item Redefine values without causing errors
  
  Log4perl's configuration file parser has a few basic safety mechanisms to 
  make sure configurations are more or less sane. 
  
  One of these safety measures is catching redefined values. For example, if
  you first write
  
      log4perl.category = WARN, Logfile
  
  and then a couple of lines later
  
      log4perl.category = TRACE, Logfile
  
  then you might have unintentionally overwritten the first value and Log4perl
  will die on this with an error (suspicious configurations always throw an
  error). Now, there's a chance that this is intentional, for example when
  you're lumping together several configuration files and actually I<want>
  the first value to overwrite the second. In this case use
  
      use Log::Log4perl qw(:nostrict);
  
  to put Log4perl in a more permissive mode.
  
  =item Prevent croak/confess from stringifying
  
  The logcroak/logconfess functions stringify their arguments before
  they pass them to Carp's croak/confess functions. This can get in the
  way if you want to throw an object or a hashref as an exception, in
  this case use:
  
      $Log::Log4perl::STRINGIFY_DIE_MESSAGE = 0;
  
      eval {
            # throws { foo => "bar" }
            # without stringification
          $logger->logcroak( { foo => "bar" } );
      };
  
  =back
  
  =head1 EXAMPLE
  
  A simple example to cut-and-paste and get started:
  
      use Log::Log4perl qw(get_logger);
      
      my $conf = q(
      log4perl.category.Bar.Twix         = WARN, Logfile
      log4perl.appender.Logfile          = Log::Log4perl::Appender::File
      log4perl.appender.Logfile.filename = test.log
      log4perl.appender.Logfile.layout = \
          Log::Log4perl::Layout::PatternLayout
      log4perl.appender.Logfile.layout.ConversionPattern = %d %F{1} %L> %m %n
      );
      
      Log::Log4perl::init(\$conf);
      
      my $logger = get_logger("Bar::Twix");
      $logger->error("Blah");
  
  This will log something like
  
      2002/09/19 23:48:15 t1 25> Blah 
  
  to the log file C<test.log>, which Log4perl will append to or 
  create it if it doesn't exist already.
  
  =head1 INSTALLATION
  
  If you want to use external appenders provided with C<Log::Dispatch>,
  you need to install C<Log::Dispatch> (2.00 or better) from CPAN,
  which itself depends on C<Attribute-Handlers> and
  C<Params-Validate>. And a lot of other modules, that's the reason
  why we're now shipping Log::Log4perl with its own standard appenders
  and only if you wish to use additional ones, you'll have to go through
  the C<Log::Dispatch> installation process.
  
  Log::Log4perl needs C<Test::More>, C<Test::Harness> and C<File::Spec>, 
  but they already come with fairly recent versions of perl.
  If not, everything's automatically fetched from CPAN if you're using the CPAN 
  shell (CPAN.pm), because they're listed as dependencies.
  
  C<Time::HiRes> (1.20 or better) is required only if you need the
  fine-grained time stamps of the C<%r> parameter in
  C<Log::Log4perl::Layout::PatternLayout>.
  
  Manual installation works as usual with
  
      perl Makefile.PL
      make
      make test
      make install
  
  =head1 DEVELOPMENT
  
  Log::Log4perl is still being actively developed. We will
  always make sure the test suite (approx. 500 cases) will pass, but there 
  might still be bugs. please check L<http://github.com/mschilli/log4perl>
  for the latest release. The api has reached a mature state, we will 
  not change it unless for a good reason.
  
  Bug reports and feedback are always welcome, just email them to our 
  mailing list shown in the AUTHORS section. We're usually addressing
  them immediately.
  
  =head1 REFERENCES
  
  =over 4
  
  =item [1]
  
  Michael Schilli, "Retire your debugger, log smartly with Log::Log4perl!",
  Tutorial on perl.com, 09/2002, 
  L<http://www.perl.com/pub/a/2002/09/11/log4perl.html>
  
  =item [2]
  
  Ceki Gülcü, "Short introduction to log4j",
  L<http://logging.apache.org/log4j/1.2/manual.html>
  
  =item [3]
  
  Vipan Singla, "Don't Use System.out.println! Use Log4j.",
  L<http://www.vipan.com/htdocs/log4jhelp.html>
  
  =item [4]
  
  The Log::Log4perl project home page: L<http://log4perl.com>
  
  =back
  
  =head1 SEE ALSO
  
  L<Log::Log4perl::Config|Log::Log4perl::Config>,
  L<Log::Log4perl::Appender|Log::Log4perl::Appender>,
  L<Log::Log4perl::Layout::PatternLayout|Log::Log4perl::Layout::PatternLayout>,
  L<Log::Log4perl::Layout::SimpleLayout|Log::Log4perl::Layout::SimpleLayout>,
  L<Log::Log4perl::Level|Log::Log4perl::Level>,
  L<Log::Log4perl::JavaMap|Log::Log4perl::JavaMap>
  L<Log::Log4perl::NDC|Log::Log4perl::NDC>,
  
  =head1 AUTHORS
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier, David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
LOG_LOG4PERL

    $main::fatpacked{"Log/Log4perl/Appender.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_APPENDER';
  ##################################################
  package Log::Log4perl::Appender;
  ##################################################
  
  use 5.006;
  use strict;
  use warnings;
  
  use Log::Log4perl::Config;
  use Log::Log4perl::Level;
  use Carp;
  
  use constant _INTERNAL_DEBUG => 0;
  
  our $unique_counter = 0;
  
  ##################################################
  sub reset {
  ##################################################
      $unique_counter = 0;
  }
  
  ##################################################
  sub unique_name {
  ##################################################
          # THREADS: Need to lock here to make it thread safe
      $unique_counter++;
      my $unique_name = sprintf("app%03d", $unique_counter);
          # THREADS: Need to unlock here to make it thread safe
      return $unique_name;
  }
  
  ##################################################
  sub new {
  ##################################################
      my($class, $appenderclass, %params) = @_;
  
          # Pull in the specified Log::Log4perl::Appender object
      eval {
  
             # Eval erroneously succeeds on unknown appender classes if
             # the eval string just consists of valid perl code (e.g. an
             # appended ';' in $appenderclass variable). Fail if we see
             # anything in there that can't be class name.
          die "'$appenderclass' not a valid class name " if 
              $appenderclass =~ /[^:\w]/;
  
          # Check if the class/package is already available because
          # something like Class::Prototyped injected it previously.
  
          # Use UNIVERSAL::can to check the appender's new() method
          # [RT 28987]
          if( ! $appenderclass->can('new') ) {
              # Not available yet, try to pull it in.
              # see 'perldoc -f require' for why two evals
              eval "require $appenderclass";
                   #unless ${$appenderclass.'::IS_LOADED'};  #for unit tests, 
                                                            #see 004Config
              die $@ if $@;
          }
      };
  
      $@ and die "ERROR: can't load appenderclass '$appenderclass'\n$@";
  
      $params{name} = unique_name() unless exists $params{name};
  
      # If it's a Log::Dispatch::File appender, default to append 
      # mode (Log::Dispatch::File defaults to 'clobber') -- consensus 9/2002
      # (Log::Log4perl::Appender::File already defaults to 'append')
      if ($appenderclass eq 'Log::Dispatch::File' &&
          ! exists $params{mode}) {
          $params{mode} = 'append';
      }
  
      my $appender = $appenderclass->new(
              # Set min_level to the lowest setting. *we* are 
              # controlling this now, the appender should just
              # log it with no questions asked.
          min_level => 'debug',
              # Set 'name' and other parameters
          map { $_ => $params{$_} } keys %params,
      );
  
      my $self = {
                   appender  => $appender,
                   name      => $params{name},
                   layout    => undef,
                   level     => $ALL,
                   composite => 0,
                 };
  
          #whether to collapse arrays, etc.
      $self->{warp_message} = $params{warp_message};
      if($self->{warp_message} and
         my $cref = 
         Log::Log4perl::Config::compile_if_perl($self->{warp_message})) {
          $self->{warp_message} = $cref;
      }
      
      bless $self, $class;
  
      return $self;
  }
  
  ##################################################
  sub composite { # Set/Get the composite flag
  ##################################################
      my ($self, $flag) = @_;
  
      $self->{composite} = $flag if defined $flag;
      return $self->{composite};
  }
  
  ##################################################
  sub threshold { # Set/Get the appender threshold
  ##################################################
      my ($self, $level) = @_;
  
      print "Setting threshold to $level\n" if _INTERNAL_DEBUG;
  
      if(defined $level) {
          # Checking for \d makes for a faster regex(p)
          $self->{level} = ($level =~ /^(\d+)$/) ? $level :
              # Take advantage of &to_priority's error reporting
              Log::Log4perl::Level::to_priority($level);
      }
  
      return $self->{level};
  }
  
  ##################################################
  sub log { 
  ##################################################
  # Relay this call to Log::Log4perl::Appender:* or
  # Log::Dispatch::*
  ##################################################
      my ($self, $p, $category, $level, $cache) = @_;
  
      # Check if the appender has a last-minute veto in form
      # of an "appender threshold"
      if($self->{level} > $
                          Log::Log4perl::Level::PRIORITY{$level}) {
          print "$self->{level} > $level, aborting\n" if _INTERNAL_DEBUG;
          return undef;
      }
  
      # Run against the (yes only one) customized filter (which in turn
      # might call other filters via the Boolean filter) and check if its
      # ok() method approves the message or blocks it.
      if($self->{filter}) {
          if($self->{filter}->ok(%$p,
                                 log4p_category => $category,
                                 log4p_level    => $level )) {
              print "Filter $self->{filter}->{name} passes\n" if _INTERNAL_DEBUG;
          } else {
              print "Filter $self->{filter}->{name} blocks\n" if _INTERNAL_DEBUG;
              return undef;
          }
      }
  
      unless($self->composite()) {
  
              #not defined, the normal case
          if (! defined $self->{warp_message} ){
                  #join any message elements
              if (ref $p->{message} eq "ARRAY") {
                  for my $i (0..$#{$p->{message}}) {
                      if( !defined $p->{message}->[ $i ] ) {
                          local $Carp::CarpLevel =
                          $Carp::CarpLevel + $Log::Log4perl::caller_depth + 1;
                          carp "Warning: Log message argument #" . 
                               ($i+1) . " undefined";
                      }
                  }
                  $p->{message} = 
                      join($Log::Log4perl::JOIN_MSG_ARRAY_CHAR, 
                           @{$p->{message}} 
                           );
              }
              
              #defined but false, e.g. Appender::DBI
          } elsif (! $self->{warp_message}) {
              ;  #leave the message alone
      
          } elsif (ref($self->{warp_message}) eq "CODE") {
              #defined and a subref
              $p->{message} = 
                  [$self->{warp_message}->(@{$p->{message}})];
          } else {
              #defined and a function name?
              no strict qw(refs);
              $p->{message} = 
                  [$self->{warp_message}->(@{$p->{message}})];
          }
  
          $p->{message} = $self->{layout}->render($p->{message}, 
              $category,
              $level,
              3 + $Log::Log4perl::caller_depth,
          ) if $self->layout();
      }
  
      my $args = [%$p, log4p_category => $category, log4p_level => $level];
  
      if(defined $cache) {
          $$cache = $args;
      } else {
          $self->{appender}->log(@$args);
      }
  
      return 1;
  }
  
  ###########################################
  sub log_cached {
  ###########################################
      my ($self, $cache) = @_;
  
      $self->{appender}->log(@$cache);
  }
  
  ##################################################
  sub name { # Set/Get the name
  ##################################################
      my($self, $name) = @_;
  
          # Somebody wants to *set* the name?
      if($name) {
          $self->{name} = $name;
      }
  
      return $self->{name};
  }
  
  ###########################################
  sub layout { # Set/Get the layout object
               # associated with this appender
  ###########################################
      my($self, $layout) = @_;
  
          # Somebody wants to *set* the layout?
      if($layout) {
          $self->{layout} = $layout;
  
          # somebody wants a layout, but not set yet, so give 'em default
      }elsif (! $self->{layout}) {
          $self->{layout} = Log::Log4perl::Layout::SimpleLayout
                                                  ->new($self->{name});
  
      }
  
      return $self->{layout};
  }
  
  ##################################################
  sub filter { # Set filter
  ##################################################
      my ($self, $filter) = @_;
  
      if($filter) {
          print "Setting filter to $filter->{name}\n" if _INTERNAL_DEBUG;
          $self->{filter} = $filter;
      }
  
      return $self->{filter};
  }
  
  ##################################################
  sub AUTOLOAD { 
  ##################################################
  # Relay everything else to the underlying 
  # Log::Log4perl::Appender::* or Log::Dispatch::*
  #  object
  ##################################################
      my $self = shift;
  
      no strict qw(vars);
  
      $AUTOLOAD =~ s/.*:://;
  
      if(! defined $self->{appender}) {
          die "Can't locate object method $AUTOLOAD() in ", __PACKAGE__;
      }
  
      return $self->{appender}->$AUTOLOAD(@_);
  }
  
  ##################################################
  sub DESTROY {
  ##################################################
      foreach my $key (keys %{$_[0]}) {
          # print "deleting $key\n";
          delete $_[0]->{$key};
      }
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Appender - Log appender class
  
  =head1 SYNOPSIS
  
    use Log::Log4perl;
  
        # Define a logger
    my $logger = Log::Log4perl->get_logger("abc.def.ghi");
  
        # Define a layout
    my $layout = Log::Log4perl::Layout::PatternLayout->new(
                     "%d (%F:%L)> %m");
  
        # Define an appender
    my $appender = Log::Log4perl::Appender->new(
                     "Log::Log4perl::Appender::Screen",
                     name => 'dumpy');
  
        # Set the appender's layout
    $appender->layout($layout);
    $logger->add_appender($appender);
  
  =head1 DESCRIPTION
  
  This class is a wrapper around the C<Log::Log4perl::Appender>
  appender set. 
  
  It also supports the <Log::Dispatch::*> collections of appenders. The
  module hides the idiosyncrasies of C<Log::Dispatch> (e.g. every
  dispatcher gotta have a name, but there's no accessor to retrieve it)
  from C<Log::Log4perl> and yet re-uses the extremely useful variety of
  dispatchers already created and tested in C<Log::Dispatch>.
  
  =head1 FUNCTIONS
  
  =head2 Log::Log4perl::Appender->new($dispatcher_class_name, ...);
  
  The constructor C<new()> takes the name of the appender
  class to be created as a I<string> (!) argument, optionally followed by 
  a number of appender-specific parameters,
  for example:
  
        # Define an appender
    my $appender = Log::Log4perl::Appender->new(
        "Log::Log4perl::Appender::File"
        filename => 'out.log');
  
  In case of C<Log::Dispatch> appenders,
  if no C<name> parameter is specified, the appender object will create
  a unique one (format C<appNNN>), which can be retrieved later via
  the C<name()> method:
  
    print "The appender's name is ", $appender->name(), "\n";
  
  Other parameters are specific to the appender class being used.
  In the case above, the C<filename> parameter specifies the name of 
  the C<Log::Log4perl::Appender::File> dispatcher used. 
  
  However, if, for instance, 
  you're using a C<Log::Dispatch::Email> dispatcher to send you 
  email, you'll have to specify C<from> and C<to> email addresses.
  Every dispatcher is different.
  Please check the C<Log::Dispatch::*> documentation for the appender used
  for details on specific requirements.
  
  The C<new()> method will just pass these parameters on to a newly created
  C<Log::Dispatch::*> object of the specified type.
  
  When it comes to logging, the C<Log::Log4perl::Appender> will transparently
  relay all messages to the C<Log::Dispatch::*> object it carries 
  in its womb.
  
  =head2 $appender->layout($layout);
  
  The C<layout()> method sets the log layout
  used by the appender to the format specified by the 
  C<Log::Log4perl::Layout::*> object which is passed to it as a reference.
  Currently there's two layouts available:
  
      Log::Log4perl::Layout::SimpleLayout
      Log::Log4perl::Layout::PatternLayout
  
  Please check the L<Log::Log4perl::Layout::SimpleLayout> and 
  L<Log::Log4perl::Layout::PatternLayout> manual pages for details.
  
  =head1 Supported Appenders 
  
  Here's the list of appender modules currently available via C<Log::Dispatch>,
  if not noted otherwise, written by Dave Rolsky:
  
         Log::Dispatch::ApacheLog
         Log::Dispatch::DBI (by Tatsuhiko Miyagawa)
         Log::Dispatch::Email,
         Log::Dispatch::Email::MailSend,
         Log::Dispatch::Email::MailSendmail,
         Log::Dispatch::Email::MIMELite
         Log::Dispatch::File
         Log::Dispatch::FileRotate (by Mark Pfeiffer)
         Log::Dispatch::Handle
         Log::Dispatch::Screen
         Log::Dispatch::Syslog
         Log::Dispatch::Tk (by Dominique Dumont)
  
  C<Log4perl> doesn't care which ones you use, they're all handled in 
  the same way via the C<Log::Log4perl::Appender> interface.
  Please check the well-written manual pages of the 
  C<Log::Dispatch> hierarchy on how to use each one of them.
  
  =head1 Parameters passed on to the appender's log() method
  
  When calling the appender's log()-Funktion, Log::Log4perl will 
  submit a list of key/value pairs. Entries to the following keys are
  guaranteed to be present:
  
  =over 4
  
  =item message
  
  Text of the rendered message
  
  =item log4p_category
  
  Name of the category of the logger that triggered the event.
  
  =item log4p_level
  
  Log::Log4perl level of the event
  
  =back
  
  =head1 Pitfalls
  
  Since the C<Log::Dispatch::File> appender truncates log files by default,
  and most of the time this is I<not> what you want, we've instructed 
  C<Log::Log4perl> to change this behavior by slipping it the 
  C<mode =E<gt> append> parameter behind the scenes. So, effectively
  with C<Log::Log4perl> 0.23, a configuration like
  
      log4perl.category = INFO, FileAppndr
      log4perl.appender.FileAppndr          = Log::Dispatch::File
      log4perl.appender.FileAppndr.filename = test.log
      log4perl.appender.FileAppndr.layout   = Log::Log4perl::Layout::SimpleLayout
  
  will always I<append> to an existing logfile C<test.log> while if you 
  specifically request clobbering like in
  
      log4perl.category = INFO, FileAppndr
      log4perl.appender.FileAppndr          = Log::Dispatch::File
      log4perl.appender.FileAppndr.filename = test.log
      log4perl.appender.FileAppndr.mode     = write
      log4perl.appender.FileAppndr.layout   = Log::Log4perl::Layout::SimpleLayout
  
  it will overwrite an existing log file C<test.log> and start from scratch.
  
  =head1 Appenders Expecting Message Chunks
  
  Instead of simple strings, certain appenders are expecting multiple fields
  as log messages. If a statement like 
  
      $logger->debug($ip, $user, "signed in");
  
  causes an off-the-shelf C<Log::Log4perl::Appender::Screen> 
  appender to fire, the appender will 
  just concatenate the three message chunks passed to it
  in order to form a single string.
  The chunks will be separated by a string defined in 
  C<$Log::Log4perl::JOIN_MSG_ARRAY_CHAR> (defaults to the empty string
  ""). 
  
  However, different appenders might choose to 
  interpret the message above differently: An
  appender like C<Log::Log4perl::Appender::DBI> might take the
  three arguments passed to the logger and put them in three separate
  rows into the DB.
  
  The  C<warp_message> appender option is used to specify the desired 
  behavior.
  If no setting for the appender property
  
      # *** Not defined ***
      # log4perl.appender.SomeApp.warp_message
  
  is defined in the Log4perl configuration file, the
  appender referenced by C<SomeApp> will fall back to the standard behavior
  and join all message chunks together, separating them by
  C<$Log::Log4perl::JOIN_MSG_ARRAY_CHAR>.
  
  If, on the other hand, it is set to a false value, like in
  
      log4perl.appender.SomeApp.layout=NoopLayout
      log4perl.appender.SomeApp.warp_message = 0
  
  then the message chunks are passed unmodified to the appender as an
  array reference. Please note that you need to set the appender's
  layout to C<Log::Log4perl::Layout::NoopLayout> which just leaves 
  the messages chunks alone instead of formatting them or replacing
  conversion specifiers.
  
  B<Please note that the standard appenders in the Log::Dispatch hierarchy
  will choke on a bunch of messages passed to them as an array reference. 
  You can't use C<warp_message = 0> (or the function name syntax
  defined below) on them.
  Only special appenders like Log::Log4perl::Appender::DBI can deal with
  this.>
  
  If (and now we're getting fancy)
  an appender expects message chunks, but we would 
  like to pre-inspect and probably modify them before they're 
  actually passed to the appender's C<log>
  method, an inspection subroutine can be defined with the
  appender's C<warp_message> property:
  
      log4perl.appender.SomeApp.layout=NoopLayout
      log4perl.appender.SomeApp.warp_message = sub { \
                                             $#_ = 2 if @_ > 3; \
                                             return @_; }
  
  The inspection subroutine defined by the C<warp_message> 
  property will receive the list of message chunks, like they were
  passed to the logger and is expected to return a corrected list.
  The example above simply limits the argument list to a maximum of
  three by cutting off excess elements and returning the shortened list.
  
  Also, the warp function can be specified by name like in
  
      log4perl.appender.SomeApp.layout=NoopLayout
      log4perl.appender.SomeApp.warp_message = main::filter_my_message
  
  In this example,
  C<filter_my_message> is a function in the C<main> package, 
  defined like this:
  
      my $COUNTER = 0;
  
      sub filter_my_message {
          my @chunks = @_;
          unshift @chunks, ++$COUNTER;
          return @chunks;
      }
  
  The subroutine above will add an ever increasing counter
  as an additional first field to 
  every message passed to the C<SomeApp> appender -- but not to
  any other appender in the system.
  
  =head2 Composite Appenders
  
  Composite appenders relay their messages to sub-appenders after providing
  some filtering or synchronizing functionality on incoming messages. 
  Examples are 
  Log::Log4perl::Appender::Synchronized,
  Log::Log4perl::Appender::Limit, and
  Log::Log4perl::Appender::Buffer. Check their manual pages for details.
  
  Composite appender objects are regular Log::Log4perl::Appender objects, 
  but they have the composite flag set:
  
      $app->composite(1);
  
  and they define a post_init() method, which sets the appender it relays
  its messages to:
  
      ###########################################
      sub post_init {
      ############################################
          my($self) = @_;
      
          if(! exists $self->{appender}) {
              die "No appender defined for " . __PACKAGE__;
          }
      
          my $appenders = Log::Log4perl->appenders();
          my $appender = Log::Log4perl->appenders()->{$self->{appender}};
      
          if(! defined $appender) {
              die "Appender $self->{appender} not defined (yet) when " .
                  __PACKAGE__ . " needed it";
          }
      
          $self->{app} = $appender;
      }
  
  The reason for this post-processing step is that the relay appender
  might not be defined yet when the composite appender gets defined.
  This can happen if Log4perl is initialized with a configuration file
  (which is the most common way to initialize Log4perl), because
  appenders spring into existence in unpredictable order.
  
  For example, if you define a Synchronized appender like
  
      log4perl.appender.Syncer            = Log::Log4perl::Appender::Synchronized
      log4perl.appender.Syncer.appender   = Logfile
  
  then Log4perl will set the appender's C<appender> attribute to the
  I<name> of the appender to finally relay messages to. After the
  Log4perl configuration file has been processed, Log4perl will remember to 
  call the composite appender's post_init() method, which will grab
  the relay appender instance referred to by the name (Logfile) 
  and set it in its C<app> attribute. This is exactly what the
  code snippet above does.
  
  But if you initialize Log4perl by its API, you need to remember to
  perform these steps. Here's the lineup:
  
      use Log::Log4perl qw(get_logger :levels);
      
      my $fileApp = Log::Log4perl::Appender->new(
      		'Log::Log4perl::Appender::File',
      		name     => 'MyFileApp',
      		filename => 'mylog',
      		mode     => 'append',
      		);
      $fileApp->layout(
      		Log::Log4perl::Layout::PatternLayout::Multiline->new(
      			'%d{yyyy-MM-dd HH:mm:ss} %p [%c] #%P> %m%n')
      		);
        # Make the appender known to the system (without assigning it to
        # any logger
      Log::Log4perl->add_appender( $fileApp );
      
      my $syncApp = Log::Log4perl::Appender->new(
      		'Log::Log4perl::Appender::Synchronized',
      		name       => 'MySyncApp',
      		appender   => 'MyFileApp',
      		key        => 'nem',
      		);
      $syncApp->post_init();
      $syncApp->composite(1);
  
        # The Synchronized appender is now ready, assign it to a logger
        # and start logging.
      get_logger("")->add_appender($syncApp);
  
      get_logger("")->level($DEBUG);
      get_logger("wonk")->debug("waah!");
  
  The composite appender's log() function will typically cache incoming 
  messages until a certain trigger condition is met and then forward a bulk
  of messages to the relay appender.
  
  Caching messages is surprisingly tricky, because you want them to look
  like they came from the code location they were originally issued from
  and not from the location that triggers the flush. Luckily, Log4perl
  offers a cache mechanism for messages, all you need to do is call the
  base class' log() function with an additional reference to a scalar,
  and then save its content to your composite appender's message buffer
  afterwards:
  
      ###########################################
      sub log {
      ###########################################
          my($self, %params) = @_;
  
          # ... some logic to decide whether to cache or flush
  
              # Adjust the caller stack
          local $Log::Log4perl::caller_depth =
                $Log::Log4perl::caller_depth + 2;
  
              # We need to cache.
              # Ask the appender to save a cached message in $cache
          $self->{relay_app}->SUPER::log(\%params,
                               $params{log4p_category},
                               $params{log4p_level}, \my $cache);
  
              # Save it in the appender's message buffer
          push @{ $self->{buffer} }, $cache;
      }
  
  Note that before calling the log() method of the relay appender's base class
  (and thus introducing two additional levels on the call stack), we need to
  adjust the call stack to allow Log4perl to render cspecs like the %M or %L
  correctly.  The cache will then contain a correctly rendered message, according
  to the layout of the target appender.
  
  Later, when the time comes to flush the cached messages, a call to the relay
  appender's base class' log_cached() method with the cached message as 
  an argument will forward the correctly rendered message:
  
      ###########################################
      sub log {
      ###########################################
          my($self, %params) = @_;
  
          # ... some logic to decide whether to cache or flush
  
              # Flush pending messages if we have any
          for my $cache (@{$self->{buffer}}) {
              $self->{relay_app}->SUPER::log_cached($cache);
          }
      }
  
  
  =head1 SEE ALSO
  
  Log::Dispatch
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_APPENDER

    $main::fatpacked{"Log/Log4perl/Appender/Buffer.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_APPENDER_BUFFER';
  ######################################################################
  # Buffer.pm -- 2004, Mike Schilli <m@perlmeister.com>
  ######################################################################
  # Composite appender buffering messages until a trigger condition is met.
  ######################################################################
  
  ###########################################
  package Log::Log4perl::Appender::Buffer;
  ###########################################
  
  use strict;
  use warnings;
  
  our @ISA = qw(Log::Log4perl::Appender);
  
  our $CVSVERSION   = '$Revision: 1.2 $';
  our ($VERSION)    = ($CVSVERSION =~ /(\d+\.\d+)/);
  
  ###########################################
  sub new {
  ###########################################
      my($class, %options) = @_;
  
      my $self = {
          appender=> undef,
          buffer  => [],
          options => { 
              max_messages  => undef, 
              trigger       => undef,
              trigger_level => undef,
          },
          level   => 0,
          %options,
      };
  
      if($self->{trigger_level}) {
          $self->{trigger} = level_trigger($self->{trigger_level});
      }
  
          # Pass back the appender to be synchronized as a dependency
          # to the configuration file parser
      push @{$options{l4p_depends_on}}, $self->{appender};
  
          # Run our post_init method in the configurator after
          # all appenders have been defined to make sure the
          # appender we're playing 'dam' for really exists
      push @{$options{l4p_post_config_subs}}, sub { $self->post_init() };
  
      bless $self, $class;
  }
  
  ###########################################
  sub log {
  ###########################################
      my($self, %params) = @_;
  
      local $Log::Log4perl::caller_depth =
          $Log::Log4perl::caller_depth + 2;
  
          # Do we need to discard a message because there's already
          # max_size messages in the buffer?
      if(defined $self->{max_messages} and
         @{$self->{buffer}} == $self->{max_messages}) {
          shift @{$self->{buffer}};
      }
          # Ask the appender to save a cached message in $cache
      $self->{app}->SUPER::log(\%params,
                           $params{log4p_category},
                           $params{log4p_level}, \my $cache);
  
          # Save it in the appender's message buffer, but only if
          # it hasn't been suppressed by an appender threshold
      if( defined $cache ) {
          push @{ $self->{buffer} }, $cache;
      }
  
      $self->flush() if $self->{trigger}->($self, \%params);
  }
  
  ###########################################
  sub flush {
  ###########################################
      my($self) = @_;
  
          # Flush pending messages if we have any
      for my $cache (@{$self->{buffer}}) {
          $self->{app}->SUPER::log_cached($cache);
      }
  
          # Empty buffer
      $self->{buffer} = [];
  }
  
  ###########################################
  sub post_init {
  ###########################################
      my($self) = @_;
  
      if(! exists $self->{appender}) {
         die "No appender defined for " . __PACKAGE__;
      }
  
      my $appenders = Log::Log4perl->appenders();
      my $appender = Log::Log4perl->appenders()->{$self->{appender}};
  
      if(! defined $appender) {
         die "Appender $self->{appender} not defined (yet) when " .
             __PACKAGE__ . " needed it";
      }
  
      $self->{app} = $appender;
  }
  
  ###########################################
  sub level_trigger {
  ###########################################
      my($level) = @_;
  
          # closure holding $level
      return sub {
          my($self, $params) = @_;
  
          return Log::Log4perl::Level::to_priority(
                   $params->{log4p_level}) >= 
                 Log::Log4perl::Level::to_priority($level);
      };
  }
      
  ###########################################
  sub DESTROY {
  ###########################################
      my($self) = @_;
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
      Log::Log4perl::Appender::Buffer - Buffering Appender
  
  =head1 SYNOPSIS
  
      use Log::Log4perl qw(:easy);
  
      my $conf = qq(
      log4perl.category                  = DEBUG, Buffer
  
          # Regular Screen Appender
      log4perl.appender.Screen           = Log::Log4perl::Appender::Screen
      log4perl.appender.Screen.stdout    = 1
      log4perl.appender.Screen.layout    = PatternLayout
      log4perl.appender.Screen.layout.ConversionPattern = %d %p %c %m %n
  
          # Buffering appender, using the appender above as outlet
      log4perl.appender.Buffer               = Log::Log4perl::Appender::Buffer
      log4perl.appender.Buffer.appender      = Screen
      log4perl.appender.Buffer.trigger_level = ERROR
      );
  
      Log::Log4perl->init(\$conf);
  
      DEBUG("This message gets buffered.");
      INFO("This message gets buffered also.");
  
      # Time passes. Nothing happens. But then ...
  
      print "It's GO time!!!\n";
  
      ERROR("This message triggers a buffer flush.");
  
  =head1 DESCRIPTION
  
  C<Log::Log4perl::Appender::Buffer> takes these arguments:
  
  =over 4
  
  =item C<appender>
  
  Specifies the name of the appender it buffers messages for. The
  appender specified must be defined somewhere in the configuration file,
  not necessarily before the definition of 
  C<Log::Log4perl::Appender::Buffer>.
  
  =item C<max_messages>
  
  Specifies the maximum number of messages the appender will hold in
  its ring buffer. C<max_messages> is optional. By default,
  C<Log::Log4perl::Appender::Buffer> will I<not> limit the number of
  messages buffered. This might be undesirable in long-running processes
  accumulating lots of messages before a flush happens. If
  C<max_messages> is set to a numeric value,
  C<Log::Log4perl::Appender::Buffer> will displace old messages in its
  buffer to make room if the buffer is full.
  
  =item C<trigger_level>
  
  If trigger_level is set to one of Log4perl's levels (see
  Log::Log4perl::Level), a C<trigger> function will be defined internally
  to flush the buffer if a message with a priority of $level or higher
  comes along. This is just a convenience function. Defining
  
      log4perl.appender.Buffer.trigger_level = ERROR
  
  is equivalent to creating a trigger function like
  
      log4perl.appender.Buffer.trigger = sub {   \
          my($self, $params) = @_;               \
          return $params->{log4p_level} >=       \
                 $Log::Log4perl::Level::ERROR; }
  
  See the next section for defining generic trigger functions.
  
  =item C<trigger>
  
  C<trigger> holds a reference to a subroutine, which
  C<Log::Log4perl::Appender::Buffer> will call on every incoming message
  with the same parameters as the appender's C<log()> method:
  
          my($self, $params) = @_;
  
  C<$params> references a hash containing
  the message priority (key C<l4p_level>), the
  message category (key C<l4p_category>) and the content of the message
  (key C<message>).
  
  If the subroutine returns 1, it will trigger a flush of buffered messages.
  
  Shortcut 
  
  =back
  
  =head1 DEVELOPMENT NOTES
  
  C<Log::Log4perl::Appender::Buffer> is a I<composite> appender.
  Unlike other appenders, it doesn't log any messages, it just
  passes them on to its attached sub-appender.
  For this reason, it doesn't need a layout (contrary to regular appenders).
  If it defines none, messages are passed on unaltered.
  
  Custom filters are also applied to the composite appender only.
  They are I<not> applied to the sub-appender. Same applies to appender
  thresholds. This behaviour might change in the future.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_APPENDER_BUFFER

    $main::fatpacked{"Log/Log4perl/Appender/DBI.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_APPENDER_DBI';
  package Log::Log4perl::Appender::DBI;
  
  our @ISA = qw(Log::Log4perl::Appender);
  
  use Carp;
  
  use strict;
  use DBI;
  
  sub new {
      my($proto, %p) = @_;
      my $class = ref $proto || $proto;
  
      my $self = bless {}, $class;
  
      $self->_init(%p);
  
      my %defaults = (
          reconnect_attempts => 1,
          reconnect_sleep    => 0,
      );
  
      for (keys %defaults) {
          if(exists $p{$_}) {
              $self->{$_} = $p{$_};
          } else {
              $self->{$_} = $defaults{$_};
          }
      }
  
      #e.g.
      #log4j.appender.DBAppndr.params.1 = %p    
      #log4j.appender.DBAppndr.params.2 = %5.5m
      foreach my $pnum (keys %{$p{params}}){
          $self->{bind_value_layouts}{$pnum} = 
                  Log::Log4perl::Layout::PatternLayout->new({
                     ConversionPattern  => {value  => $p{params}->{$pnum}},
                     undef_column_value => undef,
                  });
      }
      #'bind_value_layouts' now contains a PatternLayout
      #for each parameter heading for the Sql engine
  
      $self->{SQL} = $p{sql}; #save for error msg later on
  
      $self->{MAX_COL_SIZE} = $p{max_col_size};
  
      $self->{BUFFERSIZE} = $p{bufferSize} || 1; 
  
      if ($p{usePreparedStmt}) {
          $self->{sth} = $self->create_statement($p{sql});
          $self->{usePreparedStmt} = 1;
      }else{
          $self->{layout} = Log::Log4perl::Layout::PatternLayout->new({
              ConversionPattern  => {value  => $p{sql}},
              undef_column_value => undef,
          });
      }
  
      if ($self->{usePreparedStmt} &&  $self->{bufferSize}){
          warn "Log4perl: you've defined both usePreparedStmt and bufferSize \n".
          "in your appender '$p{name}'--\n".
          "I'm going to ignore bufferSize and just use a prepared stmt\n";
      }
  
      return $self;
  }
  
  
  sub _init {
      my $self = shift;
      my %params = @_;
  
      if ($params{dbh}) {
          $self->{dbh} = $params{dbh};
      } else {
          $self->{connect} = sub {
              DBI->connect(@params{qw(datasource username password)},
                           {PrintError => 0, $params{attrs} ? %{$params{attrs}} : ()})
                              or croak "Log4perl: $DBI::errstr";
          };
          $self->{dbh} = $self->{connect}->();
          $self->{_mine} = 1;
      }
  }
  
  sub create_statement {
      my ($self, $stmt) = @_;
  
      $stmt || croak "Log4perl: sql not set in Log4perl::Appender::DBI";
  
      return $self->{dbh}->prepare($stmt) || croak "Log4perl: DBI->prepare failed $DBI::errstr\n$stmt";
  
  }
  
  
  sub log {
      my $self = shift;
      my %p = @_;
  
      #%p is
      #    { name    => $appender_name,
      #      level   => loglevel
      #      message => $message,
      #      log4p_category => $category,
      #      log4p_level  => $level,);
      #    },
  
          #getting log4j behavior with no specified ConversionPattern
      chomp $p{message} unless ref $p{message}; 
  
          
      my $qmarks = $self->calculate_bind_values(\%p);
  
  
      if ($self->{usePreparedStmt}) {
  
          $self->query_execute($self->{sth}, @$qmarks);
  
      }else{
  
          #first expand any %x's in the statement
          my $stmt = $self->{layout}->render(
                          $p{message},
                          $p{log4p_category},
                          $p{log4p_level},
                          5 + $Log::Log4perl::caller_depth,  
                          );
  
          push @{$self->{BUFFER}}, $stmt, $qmarks;
  
          $self->check_buffer();
      }
  }
  
  sub query_execute {
      my($self, $sth, @qmarks) = @_;
  
      my $errstr = "[no error]";
  
      for my $attempt (0..$self->{reconnect_attempts}) {
          #warn "Exe: @qmarks"; # TODO
          if(! $sth->execute(@qmarks)) {
  
                    # save errstr because ping() would override it [RT 56145]
                  $errstr = $self->{dbh}->errstr();
  
                  # Exe failed -- was it because we lost the DB
                  # connection?
                  if($self->{dbh}->ping()) {
                      # No, the connection is ok, we failed because there's
                      # something wrong with the execute(): Bad SQL or 
                      # missing parameters or some such). Abort.
                      croak "Log4perl: DBI appender error: '$errstr'";
                  }
  
                  if($attempt == $self->{reconnect_attempts}) {
                      croak "Log4perl: DBI appender failed to " .
                            ($self->{reconnect_attempts} == 1 ? "" : "re") .
                            "connect " .
                            "to database after " .
                            "$self->{reconnect_attempts} attempt" .
                            ($self->{reconnect_attempts} == 1 ? "" : "s") .
                            " (last error error was [$errstr]";
                  }
              if(! $self->{dbh}->ping()) {
                  # Ping failed, try to reconnect
                  if($attempt) {
                      #warn "Sleeping"; # TODO
                      sleep($self->{reconnect_sleep}) if $self->{reconnect_sleep};
                  }
  
                  eval {
                      #warn "Reconnecting to DB"; # TODO
                      $self->{dbh} = $self->{connect}->();
                  };
              }
  
              if ($self->{usePreparedStmt}) {
                  $sth = $self->create_statement($self->{SQL});
                  $self->{sth} = $sth if $self->{sth};
              } else {
                  #warn "Pending stmt: $self->{pending_stmt}"; #TODO
                  $sth = $self->create_statement($self->{pending_stmt});
              }
  
              next;
          }
          return 1;
      }
      croak "Log4perl: DBI->execute failed $errstr, \n".
            "on $self->{SQL}\n @qmarks";
  }
  
  sub calculate_bind_values {
      my ($self, $p) = @_;
  
      my @qmarks;
      my $user_ph_idx = 0;
  
      my $i=0;
      
      if ($self->{bind_value_layouts}) {
  
          my $prev_pnum = 0;
          my $max_pnum = 0;
      
          my @pnums = sort {$a <=> $b} keys %{$self->{bind_value_layouts}};
          $max_pnum = $pnums[-1];
          
          #Walk through the integers for each possible bind value.
          #If it doesn't have a layout assigned from the config file
          #then shift it off the array from the $log call
          #This needs to be reworked now that we always get an arrayref? --kg 1/2003
          foreach my $pnum (1..$max_pnum){
              my $msg;
      
                  #we've got a bind_value_layout to fill the spot
              if ($self->{bind_value_layouts}{$pnum}){
                 $msg = $self->{bind_value_layouts}{$pnum}->render(
                          $p->{message},
                          $p->{log4p_category},
                          $p->{log4p_level},
                          5 + $Log::Log4perl::caller_depth,  
                      );
  
                 #we don't have a bind_value_layout, so get
                 #a message bit
              }elsif (ref $p->{message} eq 'ARRAY' && @{$p->{message}}){
                  #$msg = shift @{$p->{message}};
                  $msg = $p->{message}->[$i++];
  
                 #here handle cases where we ran out of message bits
                 #before we ran out of bind_value_layouts, just keep going
              }elsif (ref $p->{message} eq 'ARRAY'){
                  $msg = undef;
                  $p->{message} = undef;
  
                 #here handle cases where we didn't get an arrayref
                 #log the message in the first placeholder and nothing in the rest
              }elsif (! ref $p->{message} ){
                  $msg = $p->{message};
                  $p->{message} = undef;
  
              }
  
              if ($self->{MAX_COL_SIZE} &&
                  length($msg) > $self->{MAX_COL_SIZE}){
                  substr($msg, $self->{MAX_COL_SIZE}) = '';
              }
              push @qmarks, $msg;
          }
      }
  
      #handle leftovers
      if (ref $p->{message} eq 'ARRAY' && @{$p->{message}} ) {
          #push @qmarks, @{$p->{message}};
          push @qmarks, @{$p->{message}}[$i..@{$p->{message}}-1];
  
      }
  
      return \@qmarks;
  }
  
  
  sub check_buffer {
      my $self = shift;
  
      return unless ($self->{BUFFER} && ref $self->{BUFFER} eq 'ARRAY');
  
      if (scalar @{$self->{BUFFER}} >= $self->{BUFFERSIZE} * 2) {
  
          my ($sth, $stmt, $prev_stmt);
  
          $prev_stmt = ""; # Init to avoid warning (ms 5/10/03)
  
          while (@{$self->{BUFFER}}) {
              my ($stmt, $qmarks) = splice (@{$self->{BUFFER}},0,2);
  
              $self->{pending_stmt} = $stmt;
  
                  #reuse the sth if the stmt doesn't change
              if ($stmt ne $prev_stmt) {
                  $sth->finish if $sth;
                  $sth = $self->create_statement($stmt);
              }
  
              $self->query_execute($sth, @$qmarks);
  
              $prev_stmt = $stmt;
  
          }
  
          $sth->finish;
  
          my $dbh = $self->{dbh};
  
          if ($dbh && ! $dbh->{AutoCommit}) {
              $dbh->commit;
          }
      }
  }
  
  sub DESTROY {
      my $self = shift;
  
      $self->{BUFFERSIZE} = 1;
  
      $self->check_buffer();
  
      if ($self->{_mine} && $self->{dbh}) {
          $self->{dbh}->disconnect;
      }
  }
  
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Appender::DBI - implements appending to a DB
  
  =head1 SYNOPSIS
  
      my $config = q{
       log4j.category = WARN, DBAppndr
       log4j.appender.DBAppndr             = Log::Log4perl::Appender::DBI
       log4j.appender.DBAppndr.datasource  = DBI:CSV:f_dir=t/tmp
       log4j.appender.DBAppndr.username    = bobjones
       log4j.appender.DBAppndr.password    = 12345
       log4j.appender.DBAppndr.sql         = \
          insert into log4perltest           \
          (loglevel, custid, category, message, ipaddr) \
          values (?,?,?,?,?)
       log4j.appender.DBAppndr.params.1 = %p    
                                     #2 is custid from the log() call
       log4j.appender.DBAppndr.params.3 = %c
                                     #4 is the message from log()
                                     #5 is ipaddr from log()
  
       log4j.appender.DBAppndr.usePreparedStmt = 1
        #--or--
       log4j.appender.DBAppndr.bufferSize = 2
  
       #just pass through the array of message items in the log statement
       log4j.appender.DBAppndr.layout    = Log::Log4perl::Layout::NoopLayout
       log4j.appender.DBAppndr.warp_message = 0
  
       #driver attributes support
       log4j.appender.DBAppndr.attrs.f_encoding = utf8
      };
  
      Log::Log4perl::init ( \$config ) ;                                      
  
      my $logger = Log::Log4perl->get_logger () ;                             
      $logger->warn( $custid, 'big problem!!', $ip_addr );
  
  =head1 CAVEAT
  
  This is a very young module and there are a lot of variations
  in setups with different databases and connection methods,
  so make sure you test thoroughly!  Any feedback is welcome!
  
  =head1 DESCRIPTION
  
  This is a specialized Log::Dispatch object customized to work with
  log4perl and its abilities, originally based on Log::Dispatch::DBI 
  by Tatsuhiko Miyagawa but with heavy modifications.
  
  It is an attempted compromise between what Log::Dispatch::DBI was 
  doing and what log4j's JDBCAppender does.  Note the log4j docs say
  the JDBCAppender "is very likely to be completely replaced in the future."
  
  The simplest usage is this:
  
      log4j.category = WARN, DBAppndr
      log4j.appender.DBAppndr            = Log::Log4perl::Appender::DBI
      log4j.appender.DBAppndr.datasource = DBI:CSV:f_dir=t/tmp
      log4j.appender.DBAppndr.username   = bobjones
      log4j.appender.DBAppndr.password   = 12345
      log4j.appender.DBAppndr.sql        = \
         INSERT INTO logtbl                \
            (loglevel, message)            \
            VALUES ('%c','%m')
  
      log4j.appender.DBAppndr.layout    = Log::Log4perl::Layout::PatternLayout
  
  
      $logger->fatal('fatal message');
      $logger->warn('warning message');
  
      ===============================
      |FATAL|fatal message          |
      |WARN |warning message        |
      ===============================
  
  
  But the downsides to that usage are:
  
  =over 4
  
  =item * 
  
  You'd better be darn sure there are not quotes in your log message, or your
  insert could have unforeseen consequences!  This is a very insecure way to
  handle database inserts, using place holders and bind values is much better, 
  keep reading. (Note that the log4j docs warn "Be careful of quotes in your 
  messages!") B<*>.
  
  =item *
  
  It's not terribly high-performance, a statement is created and executed
  for each log call.
  
  =item *
  
  The only run-time parameter you get is the %m message, in reality
  you probably want to log specific data in specific table columns.
  
  =back
  
  So let's try using placeholders, and tell the logger to create a
  prepared statement handle at the beginning and just reuse it 
  (just like Log::Dispatch::DBI does)
  
  
      log4j.appender.DBAppndr.sql = \
         INSERT INTO logtbl \
            (custid, loglevel, message) \
            VALUES (?,?,?)
  
      #---------------------------------------------------
      #now the bind values:
                                    #1 is the custid
      log4j.appender.DBAppndr.params.2 = %p    
                                    #3 is the message
      #---------------------------------------------------
  
      log4j.appender.DBAppndr.layout    = Log::Log4perl::Layout::NoopLayout
      log4j.appender.DBAppndr.warp_message = 0
      
      log4j.appender.DBAppndr.usePreparedStmt = 1
      
      
      $logger->warn( 1234, 'warning message' ); 
  
  
  Now see how we're using the '?' placeholders in our statement?  This
  means we don't have to worry about messages that look like 
  
      invalid input: 1234';drop table custid;
  
  fubaring our database!
  
  Normally a list of things in the logging statement gets concatenated into 
  a single string, but setting C<warp_message> to 0 and using the 
  NoopLayout means that in
  
      $logger->warn( 1234, 'warning message', 'bgates' );
  
  the individual list values will still be available for the DBI appender later 
  on.  (If C<warp_message> is not set to 0, the default behavior is to
  join the list elements into a single string.   If PatternLayout or SimpleLayout
  are used, their attempt to C<render()> your layout will result in something 
  like "ARRAY(0x841d8dc)" in your logs.  More information on C<warp_message>
  is in Log::Log4perl::Appender.)
  
  In your insert SQL you can mix up '?' placeholders with conversion specifiers 
  (%c, %p, etc) as you see fit--the logger will match the question marks to 
  params you've defined in the config file and populate the rest with values 
  from your list.  If there are more '?' placeholders than there are values in 
  your message, it will use undef for the rest.  For instance, 
  
  	log4j.appender.DBAppndr.sql =                 \
  	   insert into log4perltest                   \
  	   (loglevel, message, datestr, subpoena_id)\
  	   values (?,?,?,?)
  	log4j.appender.DBAppndr.params.1 = %p
  	log4j.appender.DBAppndr.params.3 = %d
  
  	log4j.appender.DBAppndr.warp_message=0
  
  
  	$logger->info('arrest him!', $subpoena_id);
  
  results in the first '?' placeholder being bound to %p, the second to
  "arrest him!", the third to the date from "%d", and the fourth to your
  $subpoenaid.  If you forget the $subpoena_id and just log
  
  	$logger->info('arrest him!');
  
  then you just get undef in the fourth column.
  
  
  If the logger statement is also being handled by other non-DBI appenders,
  they will just join the list into a string, joined with 
  C<$Log::Log4perl::JOIN_MSG_ARRAY_CHAR> (default is an empty string).
  
  And see the C<usePreparedStmt>?  That creates a statement handle when
  the logger object is created and just reuses it.  That, however, may
  be problematic for long-running processes like webservers, in which case
  you can use this parameter instead
  
      log4j.appender.DBAppndr.bufferSize=2
  
  This copies log4j's JDBCAppender's behavior, it saves up that many
  log statements and writes them all out at once.  If your INSERT
  statement uses only ? placeholders and no %x conversion specifiers
  it should be quite efficient because the logger can re-use the
  same statement handle for the inserts.
  
  If the program ends while the buffer is only partly full, the DESTROY
  block should flush the remaining statements, if the DESTROY block
  runs of course.
  
  * I<As I was writing this, Danko Mannhaupt was coming out with his
  improved log4j JDBCAppender (http://www.mannhaupt.com/danko/projects/)
  which overcomes many of the drawbacks of the original JDBCAppender.>
  
  =head1 DESCRIPTION 2
  
  Or another way to say the same thing:
  
  The idea is that if you're logging to a database table, you probably
  want specific parts of your log information in certain columns.  To this
  end, you pass an list to the log statement, like 
  
      $logger->warn('big problem!!',$userid,$subpoena_nr,$ip_addr);
  
  and the array members drop into the positions defined by the placeholders
  in your SQL statement. You can also define information in the config
  file like
  
      log4j.appender.DBAppndr.params.2 = %p    
  
  in which case those numbered placeholders will be filled in with
  the specified values, and the rest of the placeholders will be
  filled in with the values from your log statement's array.
  
  =head1 MISC PARAMETERS
  
  
  =over 4
  
  =item usePreparedStmt
  
  See above.
  
  =item warp_message
  
  see Log::Log4perl::Appender
  
  =item max_col_size
  
  If you're used to just throwing debugging messages like huge stacktraces
  into your logger, some databases (Sybase's DBD!!) may surprise you 
  by choking on data size limitations.  Normally, the data would
  just be truncated to fit in the column, but Sybases's DBD it turns out
  maxes out at 255 characters.  Use this parameter in such a situation
  to truncate long messages before they get to the INSERT statement.
  
  =back
  
  =head1 CHANGING DBH CONNECTIONS (POOLING)
  
  If you want to get your dbh from some place in particular, like
  maybe a pool, subclass and override _init() and/or create_statement(), 
  for instance 
  
      sub _init {
          ; #no-op, no pooling at this level
      }
      sub create_statement {
          my ($self, $stmt) = @_;
      
          $stmt || croak "Log4perl: sql not set in ".__PACKAGE__;
      
          return My::Connections->getConnection->prepare($stmt) 
              || croak "Log4perl: DBI->prepare failed $DBI::errstr\n$stmt";
      }
  
  
  =head1 LIFE OF CONNECTIONS
  
  If you're using C<log4j.appender.DBAppndr.usePreparedStmt>
  this module creates an sth when it starts and keeps it for the life
  of the program.  For long-running processes (e.g. mod_perl), connections
  might go stale, but if C<Log::Log4perl::Appender::DBI> tries to write
  a message and figures out that the DB connection is no longer working
  (using DBI's ping method), it will reconnect.
  
  The reconnection process can be controlled by two parameters,
  C<reconnect_attempts> and C<reconnect_sleep>. C<reconnect_attempts>
  specifies the number of reconnections attempts the DBI appender 
  performs until it gives up and dies. C<reconnect_sleep> is the
  time between reconnection attempts, measured in seconds.
  C<reconnect_attempts> defaults to 1,  C<reconnect_sleep> to 0.
  
  Alternatively, use C<Apache::DBI> or C<Apache::DBI::Cache> and read
  CHANGING DB CONNECTIONS above.
  
  Note that C<Log::Log4perl::Appender::DBI> holds one connection open
  for every appender, which might be too many.
  
  =head1 SEE ALSO
  
  L<Log::Dispatch::DBI>
  
  L<Log::Log4perl::JavaMap::JDBCAppender>
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_APPENDER_DBI

    $main::fatpacked{"Log/Log4perl/Appender/File.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_APPENDER_FILE';
  ##################################################
  package Log::Log4perl::Appender::File;
  ##################################################
  
  our @ISA = qw(Log::Log4perl::Appender);
  
  use warnings;
  use strict;
  use Log::Log4perl::Config::Watch;
  use Fcntl;
  use File::Path;
  use File::Spec::Functions qw(splitpath);
  use constant _INTERNAL_DEBUG => 0;
  
  ##################################################
  sub new {
  ##################################################
      my($class, @options) = @_;
  
      my $self = {
          name      => "unknown name",
          umask     => undef,
          owner     => undef,
          group     => undef,
          autoflush => 1,
          syswrite  => 0,
          mode      => "append",
          binmode   => undef,
          utf8      => undef,
          recreate  => 0,
          recreate_check_interval => 30,
          recreate_check_signal   => undef,
          recreate_pid_write      => undef,
          create_at_logtime       => 0,
          header_text             => undef,
          mkpath                  => 0,
          mkpath_umask            => 0,
          @options,
      };
  
      if($self->{create_at_logtime}) {
          $self->{recreate}  = 1;
      }
      for my $param ('umask', 'mkpath_umask') {
          if(defined $self->{$param} and $self->{$param} =~ /^0/) {
                  # umask value is a string, meant to be an oct value
              $self->{$param} = oct($self->{$param});
          }
      }
  
      die "Mandatory parameter 'filename' missing" unless
          exists $self->{filename};
  
      bless $self, $class;
  
      if($self->{recreate_pid_write}) {
          print "Creating pid file",
                " $self->{recreate_pid_write}\n" if _INTERNAL_DEBUG;
          open FILE, ">$self->{recreate_pid_write}" or
              die "Cannot open $self->{recreate_pid_write}";
          print FILE "$$\n";
          close FILE;
      }
  
          # This will die() if it fails
      $self->file_open() unless $self->{create_at_logtime};
  
      return $self;
  }
  
  ##################################################
  sub filename {
  ##################################################
      my($self) = @_;
  
      return $self->{filename};
  }
  
  ##################################################
  sub file_open {
  ##################################################
      my($self) = @_;
  
      my $arrows  = ">";
      my $sysmode = (O_CREAT|O_WRONLY);
  
  
      if($self->{mode} eq "append") {
          $arrows   = ">>";
          $sysmode |= O_APPEND;
      } elsif ($self->{mode} eq "pipe") {
          $arrows = "|";
      } else {
          $sysmode |= O_TRUNC;
      }
  
      my $fh = do { local *FH; *FH; };
  
  
      my $didnt_exist = ! -e $self->{filename};
      if($didnt_exist && $self->{mkpath}) {
          my ($volume, $path, $file) = splitpath($self->{filename});
          if($path ne '' && !-e $path) {
              my $old_umask = umask($self->{mkpath_umask}) if defined $self->{mkpath_umask};
              my $options = {};
              foreach my $param (qw(owner group) ) {
                  $options->{$param} = $self->{$param} if defined $self->{$param};
              }
              eval {
                  mkpath($path,$options);
              };
              umask($old_umask) if defined $old_umask;
              die "Can't create path ${path} ($!)" if $@;
          }
      }
  
      my $old_umask = umask($self->{umask}) if defined $self->{umask};
  
      eval {
          if($self->{syswrite}) {
              sysopen $fh, "$self->{filename}", $sysmode or
                  die "Can't sysopen $self->{filename} ($!)";
          } else {
              open $fh, "$arrows$self->{filename}" or
                  die "Can't open $self->{filename} ($!)";
          }
      };
      umask($old_umask) if defined $old_umask;
      die $@ if $@;
  
      if($didnt_exist and
           ( defined $self->{owner} or defined $self->{group} )
        ) {
  
          eval { $self->perms_fix() };
  
          if($@) {
                # Cleanup and re-throw
              unlink $self->{filename};
              die $@;
          }
      }
  
      if($self->{recreate}) {
          $self->{watcher} = Log::Log4perl::Config::Watch->new(
              file           => $self->{filename},
              (defined $self->{recreate_check_interval} ?
                (check_interval => $self->{recreate_check_interval}) : ()),
              (defined $self->{recreate_check_signal} ?
                (signal => $self->{recreate_check_signal}) : ()),
          );
      }
  
      $self->{fh} = $fh;
  
      if ($self->{autoflush} and ! $self->{syswrite}) {
          my $oldfh = select $self->{fh};
          $| = 1;
          select $oldfh;
      }
  
      if (defined $self->{binmode}) {
          binmode $self->{fh}, $self->{binmode};
      }
  
      if (defined $self->{utf8}) {
          binmode $self->{fh}, ":utf8";
      }
  
      if(defined $self->{header_text}) {
          if( $self->{header_text} !~ /\n\Z/ ) {
              $self->{header_text} .= "\n";
          }
          my $fh = $self->{fh};
          print $fh $self->{header_text};
      }
  }
  
  ##################################################
  sub file_close {
  ##################################################
      my($self) = @_;
  
      if(defined $self->{fh}) {
          $self->close_with_care( $self->{ fh } );
      }
  
      undef $self->{fh};
  }
  
  ##################################################
  sub perms_fix {
  ##################################################
      my($self) = @_;
  
      my ($uid_org, $gid_org) = (stat $self->{filename})[4,5];
  
      my ($uid, $gid) = ($uid_org, $gid_org);
  
      if(!defined $uid) {
          die "stat of $self->{filename} failed ($!)";
      }
  
      my $needs_fixing = 0;
  
      if(defined $self->{owner}) {
          $uid = $self->{owner};
          if($self->{owner} !~ /^\d+$/) {
              $uid = (getpwnam($self->{owner}))[2];
              die "Unknown user: $self->{owner}" unless defined $uid;
          }
      }
  
      if(defined $self->{group}) {
          $gid = $self->{group};
          if($self->{group} !~ /^\d+$/) {
              $gid = getgrnam($self->{group});
  
              die "Unknown group: $self->{group}" unless defined $gid;
          }
      }
      if($uid != $uid_org or $gid != $gid_org) {
          chown($uid, $gid, $self->{filename}) or
              die "chown('$uid', '$gid') on '$self->{filename}' failed: $!";
      }
  }
  
  ##################################################
  sub file_switch {
  ##################################################
      my($self, $new_filename) = @_;
  
      print "Switching file from $self->{filename} to $new_filename\n" if
          _INTERNAL_DEBUG;
  
      $self->file_close();
      $self->{filename} = $new_filename;
      $self->file_open();
  }
  
  ##################################################
  sub log {
  ##################################################
      my($self, %params) = @_;
  
      if($self->{recreate}) {
          if($self->{recreate_check_signal}) {
              if(!$self->{watcher} or
                 $self->{watcher}->{signal_caught}) {
                  $self->file_switch($self->{filename});
                  $self->{watcher}->{signal_caught} = 0;
              }
          } else {
              if(!$self->{watcher} or
                  $self->{watcher}->file_has_moved()) {
                  $self->file_switch($self->{filename});
              }
          }
      }
  
      my $fh = $self->{fh};
  
      if($self->{syswrite}) {
         defined (syswrite $fh, $params{message}) or
             die "Cannot syswrite to '$self->{filename}': $!";
      } else {
          print $fh $params{message} or
              die "Cannot write to '$self->{filename}': $!";
      }
  }
  
  ##################################################
  sub DESTROY {
  ##################################################
      my($self) = @_;
  
      if ($self->{fh}) {
          my $fh = $self->{fh};
          $self->close_with_care( $fh );
      }
  }
  
  ###########################################
  sub close_with_care {
  ###########################################
      my( $self, $fh ) = @_;
  
      my $prev_rc = $?;
  
      my $rc = close $fh;
  
        # [rt #84723] If a sig handler is reaping the child generated
        # by close() internally before close() gets to it, it'll
        # result in a weird (but benign) error that we don't want to
        # expose to the user.
      if( !$rc ) {
          if( $self->{ mode } eq "pipe" and
              $!{ ECHILD } ) {
              if( $Log::Log4perl::CHATTY_DESTROY_METHODS ) {
                  warn "$$: pipe closed with ECHILD error -- guess that's ok";
              }
              $? = $prev_rc;
          } else {
              warn "Can't close $self->{filename} ($!)";
          }
      }
  
      return $rc;
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Appender::File - Log to file
  
  =head1 SYNOPSIS
  
      use Log::Log4perl::Appender::File;
  
      my $app = Log::Log4perl::Appender::File->new(
        filename  => 'file.log',
        mode      => 'append',
        autoflush => 1,
        umask     => 0222,
      );
  
      $file->log(message => "Log me\n");
  
  =head1 DESCRIPTION
  
  This is a simple appender for writing to a file.
  
  The C<log()> method takes a single scalar. If a newline character
  should terminate the message, it has to be added explicitly.
  
  Upon destruction of the object, the filehandle to access the
  file is flushed and closed.
  
  If you want to switch over to a different logfile, use the
  C<file_switch($newfile)> method which will first close the old
  file handle and then open a one to the new file specified.
  
  =head2 OPTIONS
  
  =over 4
  
  =item filename
  
  Name of the log file.
  
  =item mode
  
  Messages will be append to the file if C<$mode> is set to the
  string C<"append">. Will clobber the file
  if set to C<"clobber">. If it is C<"pipe">, the file will be understood
  as executable to pipe output to. Default mode is C<"append">.
  
  =item autoflush
  
  C<autoflush>, if set to a true value, triggers flushing the data
  out to the file on every call to C<log()>. C<autoflush> is on by default.
  
  =item syswrite
  
  C<syswrite>, if set to a true value, makes sure that the appender uses
  syswrite() instead of print() to log the message. C<syswrite()> usually
  maps to the operating system's C<write()> function and makes sure that
  no other process writes to the same log file while C<write()> is busy.
  Might safe you from having to use other synchronisation measures like
  semaphores (see: Synchronized appender).
  
  =item umask
  
  Specifies the C<umask> to use when creating the file, determining
  the file's permission settings.
  If set to C<0022> (default), new
  files will be created with C<rw-r--r--> permissions.
  If set to C<0000>, new files will be created with C<rw-rw-rw-> permissions.
  
  =item owner
  
  If set, specifies that the owner of the newly created log file should
  be different from the effective user id of the running process.
  Only makes sense if the process is running as root.
  Both numerical user ids and user names are acceptable.
  Log4perl does not attempt to change the ownership of I<existing> files.
  
  =item group
  
  If set, specifies that the group of the newly created log file should
  be different from the effective group id of the running process.
  Only makes sense if the process is running as root.
  Both numerical group ids and group names are acceptable.
  Log4perl does not attempt to change the group membership of I<existing> files.
  
  =item utf8
  
  If you're printing out Unicode strings, the output filehandle needs
  to be set into C<:utf8> mode:
  
      my $app = Log::Log4perl::Appender::File->new(
        filename  => 'file.log',
        mode      => 'append',
        utf8      => 1,
      );
  
  =item binmode
  
  To manipulate the output filehandle via C<binmode()>, use the
  binmode parameter:
  
      my $app = Log::Log4perl::Appender::File->new(
        filename  => 'file.log',
        mode      => 'append',
        binmode   => ":utf8",
      );
  
  A setting of ":utf8" for C<binmode> is equivalent to specifying
  the C<utf8> option (see above).
  
  =item recreate
  
  Normally, if a file appender logs to a file and the file gets moved to
  a different location (e.g. via C<mv>), the appender's open file handle
  will automatically follow the file to the new location.
  
  This may be undesirable. When using an external logfile rotator,
  for example, the appender should create a new file under the old name
  and start logging into it. If the C<recreate> option is set to a true value,
  C<Log::Log4perl::Appender::File> will do exactly that. It defaults to
  false. Check the C<recreate_check_interval> option for performance
  optimizations with this feature.
  
  =item recreate_check_interval
  
  In C<recreate> mode, the appender has to continuously check if the
  file it is logging to is still in the same location. This check is
  fairly expensive, since it has to call C<stat> on the file name and
  figure out if its inode has changed. Doing this with every call
  to C<log> can be prohibitively expensive. Setting it to a positive
  integer value N will only check the file every N seconds. It defaults to 30.
  
  This obviously means that the appender will continue writing to
  a moved file until the next check occurs, in the worst case
  this will happen C<recreate_check_interval> seconds after the file
  has been moved or deleted. If this is undesirable,
  setting C<recreate_check_interval> to 0 will have the
  appender check the file with I<every> call to C<log()>.
  
  =item recreate_check_signal
  
  In C<recreate> mode, if this option is set to a signal name
  (e.g. "USR1"), the appender will recreate a missing logfile
  when it receives the signal. It uses less resources than constant
  polling. The usual limitation with perl's signal handling apply.
  Check the FAQ for using this option with the log rotating
  utility C<newsyslog>.
  
  =item recreate_pid_write
  
  The popular log rotating utility C<newsyslog> expects a pid file
  in order to send the application a signal when its logs have
  been rotated. This option expects a path to a file where the pid
  of the currently running application gets written to.
  Check the FAQ for using this option with the log rotating
  utility C<newsyslog>.
  
  =item create_at_logtime
  
  The file appender typically creates its logfile in its constructor, i.e.
  at Log4perl C<init()> time. This is desirable for most use cases, because
  it makes sure that file permission problems get detected right away, and
  not after days/weeks/months of operation when the appender suddenly needs
  to log something and fails because of a problem that was obvious at
  startup.
  
  However, there are rare use cases where the file shouldn't be created
  at Log4perl C<init()> time, e.g. if the appender can't be used by the current
  user although it is defined in the configuration file. If you set
  C<create_at_logtime> to a true value, the file appender will try to create
  the file at log time. Note that this setting lets permission problems
  sit undetected until log time, which might be undesirable.
  
  =item header_text
  
  If you want Log4perl to print a header into every newly opened
  (or re-opened) logfile, set C<header_text> to either a string
  or a subroutine returning a string. If the message doesn't have a newline,
  a newline at the end of the header will be provided.
  
  =item mkpath
  
  If this this option is set to true,
  the directory path will be created if it does not exist yet.
  
  =item mkpath_umask
  
  Specifies the C<umask> to use when creating the directory, determining
  the directory's permission settings.
  If set to C<0022> (default), new
  directory will be created with C<rwxr-xr-x> permissions.
  If set to C<0000>, new directory will be created with C<rwxrwxrwx> permissions.
  
  =back
  
  Design and implementation of this module has been greatly inspired by
  Dave Rolsky's C<Log::Dispatch> appender framework.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt>
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself.
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches):
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull,
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter,
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope,
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_APPENDER_FILE

    $main::fatpacked{"Log/Log4perl/Appender/Limit.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_APPENDER_LIMIT';
  ######################################################################
  # Limit.pm -- 2003, Mike Schilli <m@perlmeister.com>
  ######################################################################
  # Special composite appender limiting the number of messages relayed
  # to its appender(s).
  ######################################################################
  
  ###########################################
  package Log::Log4perl::Appender::Limit;
  ###########################################
  
  use strict;
  use warnings;
  use Storable;
  
  our @ISA = qw(Log::Log4perl::Appender);
  
  our $CVSVERSION   = '$Revision: 1.7 $';
  our ($VERSION)    = ($CVSVERSION =~ /(\d+\.\d+)/);
  
  ###########################################
  sub new {
  ###########################################
      my($class, %options) = @_;
  
      my $self = {
          max_until_flushed   => undef,
          max_until_discarded => undef,
          appender_method_on_flush 
                              => undef,
          appender            => undef,
          accumulate          => 1,
          persistent          => undef,
          block_period        => 3600,
          buffer              => [],
          %options,
      };
  
          # Pass back the appender to be limited as a dependency
          # to the configuration file parser
      push @{$options{l4p_depends_on}}, $self->{appender};
  
          # Run our post_init method in the configurator after
          # all appenders have been defined to make sure the
          # appenders we're connecting to really exist.
      push @{$options{l4p_post_config_subs}}, sub { $self->post_init() };
  
      bless $self, $class;
  
      if(defined $self->{persistent}) {
          $self->restore();
      }
  
      return $self;
  }
  
  ###########################################
  sub log {
  ###########################################
      my($self, %params) = @_;
      
      local $Log::Log4perl::caller_depth =
          $Log::Log4perl::caller_depth + 2;
  
          # Check if message needs to be discarded
      my $discard = 0;
      if(defined $self->{max_until_discarded} and
         scalar @{$self->{buffer}} >= $self->{max_until_discarded} - 1) {
          $discard = 1;
      }
  
          # Check if we need to flush
      my $flush = 0;
      if(defined $self->{max_until_flushed} and
         scalar @{$self->{buffer}} >= $self->{max_until_flushed} - 1) {
          $flush = 1;
      }
  
      if(!$flush and
         (exists $self->{sent_last} and
          $self->{sent_last} + $self->{block_period} > time()
         )
        ) {
              # Message needs to be blocked for now.
          return if $discard;
  
              # Ask the appender to save a cached message in $cache
          $self->{app}->SUPER::log(\%params,
                               $params{log4p_category},
                               $params{log4p_level}, \my $cache);
  
              # Save message and other parameters
          push @{$self->{buffer}}, $cache if $self->{accumulate};
  
          $self->save() if $self->{persistent};
  
          return;
      }
  
      # Relay all messages we got to the SUPER class, which needs to render the
      # messages according to the appender's layout, first.
  
          # Log pending messages if we have any
      $self->flush();
  
          # Log current message as well
      $self->{app}->SUPER::log(\%params,
                               $params{log4p_category},
                               $params{log4p_level});
  
      $self->{sent_last} = time();
  
          # We need to store the timestamp persistently, if requested
      $self->save() if $self->{persistent};
  }
  
  ###########################################
  sub post_init {
  ###########################################
      my($self) = @_;
  
      if(! exists $self->{appender}) {
         die "No appender defined for " . __PACKAGE__;
      }
  
      my $appenders = Log::Log4perl->appenders();
      my $appender = Log::Log4perl->appenders()->{$self->{appender}};
  
      if(! defined $appender) {
         die "Appender $self->{appender} not defined (yet) when " .
             __PACKAGE__ . " needed it";
      }
  
      $self->{app} = $appender;
  }
  
  ###########################################
  sub save {
  ###########################################
      my($self) = @_;
  
      my $pdata = [$self->{buffer}, $self->{sent_last}];
  
          # Save the buffer if we're in persistent mode
      store $pdata, $self->{persistent} or
          die "Cannot save messages in $self->{persistent} ($!)";
  }
  
  ###########################################
  sub restore {
  ###########################################
      my($self) = @_;
  
      if(-f $self->{persistent}) {
          my $pdata = retrieve $self->{persistent} or
              die "Cannot retrieve messages from $self->{persistent} ($!)";
          ($self->{buffer}, $self->{sent_last}) = @$pdata;
      }
  }
  
  ###########################################
  sub flush {
  ###########################################
      my($self) = @_;
  
          # Log pending messages if we have any
      for(@{$self->{buffer}}) {
          $self->{app}->SUPER::log_cached($_);
      }
  
        # call flush() on the attached appender if so desired.
      if( $self->{appender_method_on_flush} ) {
          no strict 'refs';
          my $method = $self->{appender_method_on_flush};
          $self->{app}->$method();
      }
  
          # Empty buffer
      $self->{buffer} = [];
  }
  
  ###########################################
  sub DESTROY {
  ###########################################
      my($self) = @_;
  
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
      Log::Log4perl::Appender::Limit - Limit message delivery via block period
  
  =head1 SYNOPSIS
  
      use Log::Log4perl qw(:easy);
  
      my $conf = qq(
        log4perl.category = WARN, Limiter
      
            # Email appender
        log4perl.appender.Mailer          = Log::Dispatch::Email::MailSend
        log4perl.appender.Mailer.to       = drone\@pageme.com
        log4perl.appender.Mailer.subject  = Something's broken!
        log4perl.appender.Mailer.buffered = 0
        log4perl.appender.Mailer.layout   = PatternLayout
        log4perl.appender.Mailer.layout.ConversionPattern=%d %m %n
  
            # Limiting appender, using the email appender above
        log4perl.appender.Limiter              = Log::Log4perl::Appender::Limit
        log4perl.appender.Limiter.appender     = Mailer
        log4perl.appender.Limiter.block_period = 3600
      );
  
      Log::Log4perl->init(\$conf);
      WARN("This message will be sent immediately.");
      WARN("This message will be delayed by one hour.");
      sleep(3601);
      WARN("This message plus the last one will be sent now, seperately.");
  
  =head1 DESCRIPTION
  
  =over 4
  
  =item C<appender>
  
  Specifies the name of the appender used by the limiter. The
  appender specified must be defined somewhere in the configuration file,
  not necessarily before the definition of 
  C<Log::Log4perl::Appender::Limit>.
  
  =item C<block_period>
  
  Period in seconds between delivery of messages. If messages arrive in between,
  they will be either saved (if C<accumulate> is set to a true value) or
  discarded (if C<accumulate> isn't set).
  
  =item C<persistent>
  
  File name in which C<Log::Log4perl::Appender::Limit> persistently stores 
  delivery times. If omitted, the appender will have no recollection of what
  happened when the program restarts.
  
  =item C<max_until_flushed>
  
  Maximum number of accumulated messages. If exceeded, the appender flushes 
  all messages, regardless if the interval set in C<block_period> 
  has passed or not. Don't mix with C<max_until_discarded>.
  
  =item C<max_until_discarded>
  
  Maximum number of accumulated messages. If exceeded, the appender will
  simply discard additional messages, waiting for C<block_period> to expire
  to flush all accumulated messages. Don't mix with C<max_until_flushed>.
  
  =item C<appender_method_on_flush>
  
  Optional method name to be called on the appender attached to the
  limiter when messages are flushed. For example, to have the sample code 
  in the SYNOPSIS section bundle buffered emails into one, change the 
  mailer's C<buffered> parameter to C<1> and set the limiters 
  C<appender_method_on_flush> value to the string C<"flush">:
  
        log4perl.category = WARN, Limiter
      
            # Email appender
        log4perl.appender.Mailer          = Log::Dispatch::Email::MailSend
        log4perl.appender.Mailer.to       = drone\@pageme.com
        log4perl.appender.Mailer.subject  = Something's broken!
        log4perl.appender.Mailer.buffered = 1
        log4perl.appender.Mailer.layout   = PatternLayout
        log4perl.appender.Mailer.layout.ConversionPattern=%d %m %n
  
            # Limiting appender, using the email appender above
        log4perl.appender.Limiter              = Log::Log4perl::Appender::Limit
        log4perl.appender.Limiter.appender     = Mailer
        log4perl.appender.Limiter.block_period = 3600
        log4perl.appender.Limiter.appender_method_on_flush = flush
  
  This will cause the mailer to buffer messages and wait for C<flush()>
  to send out the whole batch. The limiter will then call the appender's
  C<flush()> method when it's own buffer gets flushed out.
  
  =back
  
  If the appender attached to C<Limit> uses C<PatternLayout> with a timestamp
  specifier, you will notice that the message timestamps are reflecting the
  original log event, not the time of the message rendering in the
  attached appender. Major trickery has been applied to accomplish 
  this (Cough!).
  
  =head1 DEVELOPMENT NOTES
  
  C<Log::Log4perl::Appender::Limit> is a I<composite> appender.
  Unlike other appenders, it doesn't log any messages, it just
  passes them on to its attached sub-appender.
  For this reason, it doesn't need a layout (contrary to regular appenders).
  If it defines none, messages are passed on unaltered.
  
  Custom filters are also applied to the composite appender only.
  They are I<not> applied to the sub-appender. Same applies to appender
  thresholds. This behaviour might change in the future.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_APPENDER_LIMIT

    $main::fatpacked{"Log/Log4perl/Appender/RRDs.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_APPENDER_RRDS';
  ##################################################
  package Log::Log4perl::Appender::RRDs;
  ##################################################
  our @ISA = qw(Log::Log4perl::Appender);
  
  use warnings;
  use strict;
  use RRDs;
  
  ##################################################
  sub new {
  ##################################################
      my($class, @options) = @_;
  
      my $self = {
          name             => "unknown name",
          dbname           => undef,
          rrdupd_params => [],
          @options,
      };
  
      die "Mandatory parameter 'dbname' missing" unless
          defined $self->{dbname};
  
      bless $self, $class;
  
      return $self;
  }
  
  ##################################################
  sub log {
  ##################################################
      my($self, %params) = @_;
  
      #print "UPDATE: '$self->{dbname}' - '$params{message}'\n";
  
      RRDs::update($self->{dbname}, 
                   @{$params{rrdupd_params}},
                   $params{message}) or
          die "Cannot update rrd $self->{dbname} ",
              "with $params{message} ($!)";
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Appender::RRDs - Log to a RRDtool Archive
      
  =head1 SYNOPSIS
      
      use Log::Log4perl qw(get_logger);
      use RRDs;
      
      my $DB = "myrrddb.dat";
      
      RRDs::create(
        $DB, "--step=1",
        "DS:myvalue:GAUGE:2:U:U",
        "RRA:MAX:0.5:1:120");
      
      print time(), "\n";
      
      Log::Log4perl->init(\qq{
        log4perl.category = INFO, RRDapp
        log4perl.appender.RRDapp = Log::Log4perl::Appender::RRDs
        log4perl.appender.RRDapp.dbname = $DB
        log4perl.appender.RRDapp.layout = Log::Log4perl::Layout::PatternLayout
        log4perl.appender.RRDapp.layout.ConversionPattern = N:%m
      });
      
      my $logger = get_logger();
      
      for(10, 15, 20, 25) {
          $logger->info($_);
          sleep 1;
      }
     
  =head1 DESCRIPTION
  
  C<Log::Log4perl::Appender::RRDs> appenders facilitate writing data
  to RRDtool round-robin archives via Log4perl. For documentation
  on RRD and its Perl interface C<RRDs> (which comes with the distribution),
  check out L<http://rrdtool.org>.
  
  Messages sent to Log4perl's RRDs appender are expected to be numerical values
  (ints or floats), which then are used to run a C<rrdtool update> command
  on an existing round-robin database. The name of this database needs to
  be set in the appender's C<dbname> configuration parameter.
  
  If there's more parameters you wish to pass to the C<update> method,
  use the C<rrdupd_params> configuration parameter:
  
      log4perl.appender.RRDapp.rrdupd_params = --template=in:out
  
  To read out the round robin database later on, use C<rrdtool fetch>
  or C<rrdtool graph> for graphic displays.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_APPENDER_RRDS

    $main::fatpacked{"Log/Log4perl/Appender/Screen.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_APPENDER_SCREEN';
  ##################################################
  package Log::Log4perl::Appender::Screen;
  ##################################################
  
  our @ISA = qw(Log::Log4perl::Appender);
  
  use warnings;
  use strict;
  
  ##################################################
  sub new {
  ##################################################
      my($class, @options) = @_;
  
      my $self = {
          name   => "unknown name",
          stderr => 1,
          utf8   => undef,
          @options,
      };
  
      if( $self->{utf8} ) {
          if( $self->{stderr} ) {
              binmode STDERR, ":utf8";
          } else {
              binmode STDOUT, ":utf8";
          }
      }
  
      bless $self, $class;
  }
      
  ##################################################
  sub log {
  ##################################################
      my($self, %params) = @_;
  
      if($self->{stderr}) {
          print STDERR $params{message};
      } else {
          print $params{message};
      }
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Appender::Screen - Log to STDOUT/STDERR
  
  =head1 SYNOPSIS
  
      use Log::Log4perl::Appender::Screen;
  
      my $app = Log::Log4perl::Appender::Screen->new(
        stderr    => 0,
        utf8      => 1,
      );
  
      $file->log(message => "Log me\n");
  
  =head1 DESCRIPTION
  
  This is a simple appender for writing to STDOUT or STDERR.
  
  The constructor C<new()> take an optional parameter C<stderr>,
  if set to a true value, the appender will log to STDERR. 
  The default setting for C<stderr> is 1, so messages will be logged to 
  STDERR by default.
  
  If C<stderr>
  is set to a false value, it will log to STDOUT (or, more accurately,
  whichever file handle is selected via C<select()>, STDOUT by default). 
  
  Design and implementation of this module has been greatly inspired by
  Dave Rolsky's C<Log::Dispatch> appender framework.
  
  To enable printing wide utf8 characters, set the utf8 option to a true
  value:
  
      my $app = Log::Log4perl::Appender::Screen->new(
        stderr    => 1,
        utf8      => 1,
      );
  
  This will issue the necessary binmode command to the selected output
  channel (stderr/stdout).
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_APPENDER_SCREEN

    $main::fatpacked{"Log/Log4perl/Appender/ScreenColoredLevels.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_APPENDER_SCREENCOLOREDLEVELS';
  ##################################################
  package Log::Log4perl::Appender::ScreenColoredLevels;
  ##################################################
  use Log::Log4perl::Appender::Screen;
  our @ISA = qw(Log::Log4perl::Appender::Screen);
  
  use warnings;
  use strict;
  
  use Term::ANSIColor qw();
  use Log::Log4perl::Level;
  
  BEGIN {
      $Term::ANSIColor::EACHLINE="\n";
  }
  
  ##################################################
  sub new {
  ##################################################
      my($class, %options) = @_;
  
      my %specific_options = ( color => {} );
  
      for my $option ( keys %specific_options ) {
          $specific_options{ $option } = delete $options{ $option } if
              exists $options{ $option };
      }
  
      my $self = $class->SUPER::new( %options );
      @$self{ keys %specific_options } = values %specific_options;
      bless $self, __PACKAGE__; # rebless
  
        # also accept lower/mixed case levels in config
      for my $level ( keys %{ $self->{color} } ) {
          my $uclevel = uc($level);
          $self->{color}->{$uclevel} = $self->{color}->{$level};
      }
  
      my %default_colors = (
          TRACE   => 'yellow',
          DEBUG   => '',
          INFO    => 'green',
          WARN    => 'blue',
          ERROR   => 'magenta',
          FATAL   => 'red',
      );
      for my $level ( keys %default_colors ) {
          if ( ! exists $self->{ 'color' }->{ $level } ) {
              $self->{ 'color' }->{ $level } = $default_colors{ $level };
          }
      }
  
      bless $self, $class;
  }
      
  ##################################################
  sub log {
  ##################################################
      my($self, %params) = @_;
  
      my $msg = $params{ 'message' };
  
      if ( my $color = $self->{ 'color' }->{ $params{ 'log4p_level' } } ) {
          $msg = Term::ANSIColor::colored( $msg, $color );
      }
      
      if($self->{stderr}) {
          print STDERR $msg;
      } else {
          print $msg;
      }
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Appender::ScreenColoredLevel - Colorize messages according to level
  
  =head1 SYNOPSIS
  
      use Log::Log4perl qw(:easy);
  
      Log::Log4perl->init(\ <<'EOT');
        log4perl.category = DEBUG, Screen
        log4perl.appender.Screen = \
            Log::Log4perl::Appender::ScreenColoredLevels
        log4perl.appender.Screen.layout = \
            Log::Log4perl::Layout::PatternLayout
        log4perl.appender.Screen.layout.ConversionPattern = \
            %d %F{1} %L> %m %n
      EOT
  
        # Appears black
      DEBUG "Debug Message";
  
        # Appears green
      INFO  "Info Message";
  
        # Appears blue
      WARN  "Warn Message";
  
        # Appears magenta
      ERROR "Error Message";
  
        # Appears red
      FATAL "Fatal Message";
  
  =head1 DESCRIPTION
  
  This appender acts like Log::Log4perl::Appender::Screen, except that
  it colorizes its output, based on the priority of the message sent.
  
  You can configure the colors and attributes used for the different
  levels, by specifying them in your configuration:
  
      log4perl.appender.Screen.color.TRACE=cyan
      log4perl.appender.Screen.color.DEBUG=bold blue
  
  You can also specify nothing, to indicate that level should not have
  coloring applied, which means the text will be whatever the default
  color for your terminal is.  This is the default for debug messages.
  
      log4perl.appender.Screen.color.DEBUG=
  
  You can use any attribute supported by L<Term::ANSIColor> as a configuration
  option.
  
      log4perl.appender.Screen.color.FATAL=\
          bold underline blink red on_white
  
  The commonly used colors and attributes are:
  
  =over 4
  
  =item attributes
  
  BOLD, DARK, UNDERLINE, UNDERSCORE, BLINK
  
  =item colors
  
  BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE
  
  =item background colors
  
  ON_BLACK, ON_RED, ON_GREEN, ON_YELLOW, ON_BLUE, ON_MAGENTA, ON_CYAN, ON_WHITE
  
  =back
  
  See L<Term::ANSIColor> for a complete list, and information on which are
  supported by various common terminal emulators.
  
  The default values for these options are:
  
  =over 4
  
  =item Trace
  
  Yellow
  
  =item Debug
  
  None (whatever the terminal default is)
  
  =item Info
  
  Green
  
  =item Warn
  
  Blue
  
  =item Error
  
  Magenta
  
  =item Fatal
  
  Red
  
  =back
  
  The constructor C<new()> takes an optional parameter C<stderr>,
  if set to a true value, the appender will log to STDERR. If C<stderr>
  is set to a false value, it will log to STDOUT. The default setting
  for C<stderr> is 1, so messages will be logged to STDERR by default.
  The constructor can also take an optional parameter C<color>, whose
  value is a  hashref of color configuration options, any levels that
  are not included in the hashref will be set to their default values.
  
  =head2 Using ScreenColoredLevels on Windows
  
  Note that if you're using this appender on Windows, you need to fetch
  Win32::Console::ANSI from CPAN and add
  
      use Win32::Console::ANSI;
  
  to your script.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_APPENDER_SCREENCOLOREDLEVELS

    $main::fatpacked{"Log/Log4perl/Appender/Socket.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_APPENDER_SOCKET';
  ##################################################
  package Log::Log4perl::Appender::Socket;
  ##################################################
  our @ISA = qw(Log::Log4perl::Appender);
  
  use warnings;
  use strict;
  
  use IO::Socket::INET;
  
  ##################################################
  sub new {
  ##################################################
      my($class, @options) = @_;
  
      my $self = {
          name            => "unknown name",
          silent_recovery => 0,
          no_warning      => 0,
          PeerAddr        => "localhost",
          Proto           => 'tcp',
          Timeout         => 5,
          @options,
      };
  
      bless $self, $class;
  
      unless ($self->{defer_connection}){
          unless($self->connect(@options)) {
              if($self->{silent_recovery}) {
                  if( ! $self->{no_warning}) {
                      warn "Connect to $self->{PeerAddr}:$self->{PeerPort} failed: $!";
                  }
                 return $self;
              }
              die "Connect to $self->{PeerAddr}:$self->{PeerPort} failed: $!";
          }
  
          $self->{socket}->autoflush(1); 
          #autoflush has been the default behavior since 1997
      }
  
      return $self;
  }
      
  ##################################################
  sub connect {
  ##################################################
      my($self, @options) = @_;
  
      $self->{socket} = IO::Socket::INET->new(@options);
  
      return $self->{socket};
  }
  
  ##################################################
  sub log {
  ##################################################
      my($self, %params) = @_;
  
  
      {
              # If we were never able to establish
              # a connection, try to establish one 
              # here. If it fails, return.
          if(($self->{silent_recovery} or $self->{defer_connection}) and 
             !defined $self->{socket}) {
              if(! $self->connect(%$self)) {
                  return undef;
              }
          }
    
              # Try to send the message across
          eval { $self->{socket}->send($params{message}); 
               };
  
          if($@) {
              warn "Send to " . ref($self) . " failed ($@), retrying once...";
              if($self->connect(%$self)) {
                  redo;
              }
              if($self->{silent_recovery}) {
                  return undef;
              }
              warn "Reconnect to $self->{PeerAddr}:$self->{PeerPort} " .
                   "failed: $!";
              return undef;
          }
      };
  
      return 1;
  }
  
  ##################################################
  sub DESTROY {
  ##################################################
      my($self) = @_;
  
      undef $self->{socket};
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Appender::Socket - Log to a socket
  
  =head1 SYNOPSIS
  
      use Log::Log4perl::Appender::Socket;
  
      my $appender = Log::Log4perl::Appender::Socket->new(
        PeerAddr => "server.foo.com",
        PeerPort => 1234,
      );
  
      $appender->log(message => "Log me\n");
  
  =head1 DESCRIPTION
  
  This is a simple appender for writing to a socket. It relies on
  L<IO::Socket::INET> and offers all parameters this module offers.
  
  Upon destruction of the object, pending messages will be flushed
  and the socket will be closed.
  
  If the appender cannot contact the server during the initialization
  phase (while running the constructor C<new>), it will C<die()>.
  
  If the appender fails to log a message because the socket's C<send()>
  method fails (most likely because the server went down), it will
  try to reconnect once. If it succeeds, the message will be sent.
  If the reconnect fails, a warning is sent to STDERR and the C<log()>
  method returns, discarding the message.
  
  If the option C<silent_recovery> is given to the constructor and
  set to a true value, the behaviour is different: If the socket connection
  can't be established at initialization time, a single warning is issued.
  Every log attempt will then try to establish the connection and 
  discard the message silently if it fails.
  If you don't even want the warning, set the C<no_warning> option to
  a true value.
  
  Connecting at initialization time may not be the best option when
  running under Apache1 Apache2/prefork, because the parent process creates
  the socket and the connections are shared among the forked children--all
  the children writing to the same socket could intermingle messages.  So instead
  of that, you can use C<defer_connection> which will put off making the
  connection until the first log message is sent.
  
  =head1 EXAMPLE
  
  Write a server quickly using the IO::Socket::INET module:
  
      use IO::Socket::INET;
  
      my $sock = IO::Socket::INET->new(
          Listen    => 5,
          LocalAddr => 'localhost',
          LocalPort => 12345,
          Proto     => 'tcp');
  
      while(my $client = $sock->accept()) {
          print "Client connected\n";
          while(<$client>) {
              print "$_\n";
          }
      }
  
  Start it and then run the following script as a client:
  
      use Log::Log4perl qw(:easy);
  
      my $conf = q{
          log4perl.category                  = WARN, Socket
          log4perl.appender.Socket           = Log::Log4perl::Appender::Socket
          log4perl.appender.Socket.PeerAddr  = localhost
          log4perl.appender.Socket.PeerPort  = 12345
          log4perl.appender.Socket.layout    = SimpleLayout
      };
  
      Log::Log4perl->init(\$conf);
  
      sleep(2);
  
      for(1..10) {
          ERROR("Quack!");
          sleep(5);
      }
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_APPENDER_SOCKET

    $main::fatpacked{"Log/Log4perl/Appender/String.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_APPENDER_STRING';
  package Log::Log4perl::Appender::String;
  our @ISA = qw(Log::Log4perl::Appender);
  
  ##################################################
  # Log dispatcher writing to a string buffer
  ##################################################
  
  ##################################################
  sub new {
  ##################################################
      my $proto  = shift;
      my $class  = ref $proto || $proto;
      my %params = @_;
  
      my $self = {
          name      => "unknown name",
          string    => "",
          %params,
      };
  
      bless $self, $class;
  }
  
  ##################################################
  sub log {   
  ##################################################
      my $self = shift;
      my %params = @_;
  
      $self->{string} .= $params{message};
  }
  
  ##################################################
  sub string {   
  ##################################################
      my($self, $new) = @_;
  
      if(defined $new) {
          $self->{string} = $new;
      }
  
      return $self->{string};
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Appender::String - Append to a string
  
  =head1 SYNOPSIS
  
    use Log::Log4perl::Appender::String;
  
    my $appender = Log::Log4perl::Appender::String->new( 
        name      => 'my string appender',
    );
  
        # Append to the string
    $appender->log( 
        message => "I'm searching the city for sci-fi wasabi\n" 
    );
  
        # Retrieve the result
    my $result = $appender->string();
  
        # Reset the buffer to the empty string
    $appender->string("");
  
  =head1 DESCRIPTION
  
  This is a simple appender used internally by C<Log::Log4perl>. It
  appends messages to a scalar instance variable.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_APPENDER_STRING

    $main::fatpacked{"Log/Log4perl/Appender/Synchronized.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_APPENDER_SYNCHRONIZED';
  ######################################################################
  # Synchronized.pm -- 2003, 2007 Mike Schilli <m@perlmeister.com>
  ######################################################################
  # Special appender employing a locking strategy to synchronize
  # access.
  ######################################################################
  
  ###########################################
  package Log::Log4perl::Appender::Synchronized;
  ###########################################
  
  use strict;
  use warnings;
  use Log::Log4perl::Util::Semaphore;
  
  our @ISA = qw(Log::Log4perl::Appender);
  
  our $CVSVERSION   = '$Revision: 1.12 $';
  our ($VERSION)    = ($CVSVERSION =~ /(\d+\.\d+)/);
  
  ###########################################
  sub new {
  ###########################################
      my($class, %options) = @_;
  
      my $self = {
          appender=> undef,
          key     => '_l4p',
          level   => 0,
          %options,
      };
  
      my @values = ();
      for my $param (qw(uid gid mode destroy key)) {
          push @values, $param, $self->{$param} if defined $self->{$param};
      }
  
      $self->{sem} = Log::Log4perl::Util::Semaphore->new(
          @values
      );
  
          # Pass back the appender to be synchronized as a dependency
          # to the configuration file parser
      push @{$options{l4p_depends_on}}, $self->{appender};
  
          # Run our post_init method in the configurator after
          # all appenders have been defined to make sure the
          # appender we're synchronizing really exists
      push @{$options{l4p_post_config_subs}}, sub { $self->post_init() };
  
      bless $self, $class;
  }
  
  ###########################################
  sub log {
  ###########################################
      my($self, %params) = @_;
      
      $self->{sem}->semlock();
  
      # Relay that to the SUPER class which needs to render the
      # message according to the appender's layout, first.
      $Log::Log4perl::caller_depth +=2;
      $self->{app}->SUPER::log(\%params, 
                               $params{log4p_category},
                               $params{log4p_level});
      $Log::Log4perl::caller_depth -=2;
  
      $self->{sem}->semunlock();
  }
  
  ###########################################
  sub post_init {
  ###########################################
      my($self) = @_;
  
      if(! exists $self->{appender}) {
         die "No appender defined for " . __PACKAGE__;
      }
  
      my $appenders = Log::Log4perl->appenders();
      my $appender = Log::Log4perl->appenders()->{$self->{appender}};
  
      if(! defined $appender) {
         die "Appender $self->{appender} not defined (yet) when " .
             __PACKAGE__ . " needed it";
      }
  
      $self->{app} = $appender;
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
      Log::Log4perl::Appender::Synchronized - Synchronizing other appenders
  
  =head1 SYNOPSIS
  
      use Log::Log4perl qw(:easy);
  
      my $conf = qq(
      log4perl.category                   = WARN, Syncer
      
          # File appender (unsynchronized)
      log4perl.appender.Logfile           = Log::Log4perl::Appender::File
      log4perl.appender.Logfile.autoflush = 1
      log4perl.appender.Logfile.filename  = test.log
      log4perl.appender.Logfile.mode      = truncate
      log4perl.appender.Logfile.layout    = SimpleLayout
      
          # Synchronizing appender, using the file appender above
      log4perl.appender.Syncer            = Log::Log4perl::Appender::Synchronized
      log4perl.appender.Syncer.appender   = Logfile
  );
  
      Log::Log4perl->init(\$conf);
      WARN("This message is guaranteed to be complete.");
  
  =head1 DESCRIPTION
  
  If multiple processes are using the same C<Log::Log4perl> appender 
  without synchronization, overwrites might happen. A typical scenario
  for this would be a process spawning children, each of which inherits
  the parent's Log::Log4perl configuration.
  
  In most cases, you won't need an external synchronisation tool like
  Log::Log4perl::Appender::Synchronized at all. Log4perl's file appender, 
  Log::Log4perl::Appender::File, for example, provides the C<syswrite>
  mechanism for making sure that even long log lines won't interleave.
  Short log lines won't interleave anyway, because the operating system
  makes sure the line gets written before a task switch occurs.
  
  In cases where you need additional synchronization, however, you can use
  C<Log::Log4perl::Appender::Synchronized> as a gateway between your
  loggers and your appenders. An appender itself, 
  C<Log::Log4perl::Appender::Synchronized> just takes two additional
  arguments:
  
  =over 4
  
  =item C<appender>
  
  Specifies the name of the appender it synchronizes access to. The
  appender specified must be defined somewhere in the configuration file,
  not necessarily before the definition of 
  C<Log::Log4perl::Appender::Synchronized>.
  
  =item C<key>
  
  This optional argument specifies the key for the semaphore that
  C<Log::Log4perl::Appender::Synchronized> uses internally to ensure
  atomic operations. It defaults to C<_l4p>. If you define more than
  one C<Log::Log4perl::Appender::Synchronized> appender, it is 
  important to specify different keys for them, as otherwise every
  new C<Log::Log4perl::Appender::Synchronized> appender will nuke
  previously defined semaphores. The maximum key length is four
  characters, longer keys will be truncated to 4 characters -- 
  C<mylongkey1> and C<mylongkey2> are interpreted to be the same:
  C<mylo> (thanks to David Viner E<lt>dviner@yahoo-inc.comE<gt> for
  pointing this out).
  
  =back
  
  C<Log::Log4perl::Appender::Synchronized> uses Log::Log4perl::Util::Semaphore
  internally to perform locking with semaphores provided by the
  operating system used.
  
  =head2 Performance tips
  
  The C<Log::Log4perl::Appender::Synchronized> serializes access to a
  protected resource globally, slowing down actions otherwise performed in
  parallel.
  
  Unless specified otherwise, all instances of 
  C<Log::Log4perl::Appender::Synchronized> objects in the system will
  use the same global IPC key C<_l4p>.
  
  To control access to different appender instances, it often makes sense
  to define different keys for different synchronizing appenders. In this
  way, Log::Log4perl serializes access to each appender instance separately:
  
      log4perl.category                   = WARN, Syncer1, Syncer2
      
          # File appender 1 (unsynchronized)
      log4perl.appender.Logfile1           = Log::Log4perl::Appender::File
      log4perl.appender.Logfile1.filename  = test1.log
      log4perl.appender.Logfile1.layout    = SimpleLayout
      
          # File appender 2 (unsynchronized)
      log4perl.appender.Logfile2           = Log::Log4perl::Appender::File
      log4perl.appender.Logfile2.filename  = test2.log
      log4perl.appender.Logfile2.layout    = SimpleLayout
      
          # Synchronizing appender, using the file appender above
      log4perl.appender.Syncer1            = Log::Log4perl::Appender::Synchronized
      log4perl.appender.Syncer1.appender   = Logfile1
      log4perl.appender.Syncer1.key        = l4p1
  
          # Synchronizing appender, using the file appender above
      log4perl.appender.Syncer2            = Log::Log4perl::Appender::Synchronized
      log4perl.appender.Syncer2.appender   = Logfile2
      log4perl.appender.Syncer2.key        = l4p2
  
  Without the C<.key = l4p1> and C<.key = l4p2> lines, both Synchronized 
  appenders would be using the default C<_l4p> key, causing unnecessary
  serialization of output written to different files.
  
  =head2 Advanced configuration
  
  To configure the underlying Log::Log4perl::Util::Semaphore module in 
  a different way than with the default settings provided by 
  Log::Log4perl::Appender::Synchronized, use the following parameters:
  
      log4perl.appender.Syncer1.destroy  = 1
      log4perl.appender.Syncer1.mode     = sub { 0775 }
      log4perl.appender.Syncer1.uid      = hugo
      log4perl.appender.Syncer1.gid      = 100
  
  Valid options are 
  C<destroy> (Remove the semaphore on exit), 
  C<mode> (permissions on the semaphore), 
  C<uid> (uid or user name the semaphore is owned by), 
  and
  C<gid> (group id the semaphore is owned by), 
  
  Note that C<mode> is usually given in octal and therefore needs to be
  specified as a perl sub {}, unless you want to calculate what 0755 means
  in decimal.
  
  Changing ownership or group settings for a semaphore will obviously only
  work if the current user ID owns the semaphore already or if the current
  user is C<root>. The C<destroy> option causes the current process to 
  destroy the semaphore on exit. Spawned children of the process won't
  inherit this behavior.
  
  =head2 Semaphore user and group IDs with mod_perl
  
  Setting user and group IDs is especially important when the Synchronized
  appender is used with mod_perl. If Log4perl gets initialized by a startup
  handler, which runs as root, and not as the user who will later use
  the semaphore, the settings for uid, gid, and mode can help establish 
  matching semaphore ownership and access rights.
  
  =head1 DEVELOPMENT NOTES
  
  C<Log::Log4perl::Appender::Synchronized> is a I<composite> appender.
  Unlike other appenders, it doesn't log any messages, it just
  passes them on to its attached sub-appender.
  For this reason, it doesn't need a layout (contrary to regular appenders).
  If it defines none, messages are passed on unaltered.
  
  Custom filters are also applied to the composite appender only.
  They are I<not> applied to the sub-appender. Same applies to appender
  thresholds. This behaviour might change in the future.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_APPENDER_SYNCHRONIZED

    $main::fatpacked{"Log/Log4perl/Appender/TestArrayBuffer.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_APPENDER_TESTARRAYBUFFER';
  ##################################################
  package Log::Log4perl::Appender::TestArrayBuffer;
  ##################################################
  # Like Log::Log4perl::Appender::TestBuffer, just with 
  # array capability.
  # For testing only.
  ##################################################
  
  use base qw( Log::Log4perl::Appender::TestBuffer );
  
  ##################################################
  sub log {   
  ##################################################
      my $self = shift;
      my %params = @_;
  
      $self->{buffer} .= "[$params{level}]: " if $LOG_PRIORITY;
  
      if(ref($params{message}) eq "ARRAY") {
          $self->{buffer} .= "[" . join(',', @{$params{message}}) . "]";
      } else {
          $self->{buffer} .= $params{message};
      }
  }
  
  1;
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Appender::TestArrayBuffer - Subclass of Appender::TestBuffer
  
  =head1 SYNOPSIS
  
    use Log::Log4perl::Appender::TestArrayBuffer;
  
    my $appender = Log::Log4perl::Appender::TestArrayBuffer->new( 
        name      => 'buffer',
    );
  
        # Append to the buffer
    $appender->log( 
        level =  > 'alert', 
        message => ['first', 'second', 'third'],
    );
  
        # Retrieve the result
    my $result = $appender->buffer();
  
        # Reset the buffer to the empty string
    $appender->reset();
  
  =head1 DESCRIPTION
  
  This class is a subclass of Log::Log4perl::Appender::TestBuffer and
  just provides message array refs as an additional feature. 
  
  Just like Log::Log4perl::Appender::TestBuffer, 
  Log::Log4perl::Appender::TestArrayBuffer is used for internal
  Log::Log4perl testing only.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_APPENDER_TESTARRAYBUFFER

    $main::fatpacked{"Log/Log4perl/Appender/TestBuffer.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_APPENDER_TESTBUFFER';
  package Log::Log4perl::Appender::TestBuffer;
  our @ISA = qw(Log::Log4perl::Appender);
  
  ##################################################
  # Log dispatcher writing to a string buffer
  # For testing.
  # This is like having a Log::Log4perl::Appender::TestBuffer
  ##################################################
  
  our %POPULATION       = ();
  our $LOG_PRIORITY     = 0;
  our $DESTROY_MESSAGES = "";
  
  ##################################################
  sub new {
  ##################################################
      my $proto  = shift;
      my $class  = ref $proto || $proto;
      my %params = @_;
  
      my $self = {
          name      => "unknown name",
          %params,
      };
  
      bless $self, $class;
  
      $self->{stderr} = exists $params{stderr} ? $params{stderr} : 1;
      $self->{buffer} = "";
  
      $POPULATION{$self->{name}} = $self;
  
      return $self;
  }
  
  ##################################################
  sub log {   
  ##################################################
      my $self = shift;
      my %params = @_;
  
      if( !defined $params{level} ) {
          die "No level defined in log() call of " . __PACKAGE__;
      }
      $self->{buffer} .= "[$params{level}]: " if $LOG_PRIORITY;
      $self->{buffer} .= $params{message};
  }
  
  ###########################################
  sub clear {
  ###########################################
      my($self) = @_;
  
      $self->{buffer} = "";
  }
  
  ##################################################
  sub buffer {   
  ##################################################
      my($self, $new) = @_;
  
      if(defined $new) {
          $self->{buffer} = $new;
      }
  
      return $self->{buffer};
  }
  
  ##################################################
  sub reset {   
  ##################################################
      my($self) = @_;
  
      %POPULATION = ();
      $self->{buffer} = "";
  }
  
  ##################################################
  sub DESTROY {   
  ##################################################
      my($self) = @_;
  
      $DESTROY_MESSAGES .= __PACKAGE__ . " destroyed";
  
      #this delete() along with &reset() above was causing
      #Attempt to free unreferenced scalar at 
      #blib/lib/Log/Log4perl/TestBuffer.pm line 69.
      #delete $POPULATION{$self->name};
  }
  
  ##################################################
  sub by_name {   
  ##################################################
      my($self, $name) = @_;
  
      # Return a TestBuffer by appender name. This is useful if
      # test buffers are created behind our back (e.g. via the
      # Log4perl config file) and later on we want to 
      # retrieve an instance to query its content.
  
      die "No name given"  unless defined $name;
  
      return $POPULATION{$name};
  
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Appender::TestBuffer - Appender class for testing
  
  =head1 SYNOPSIS
  
    use Log::Log4perl::Appender::TestBuffer;
  
    my $appender = Log::Log4perl::Appender::TestBuffer->new( 
        name      => 'mybuffer',
    );
  
        # Append to the buffer
    $appender->log( 
        level =  > 'alert', 
        message => "I'm searching the city for sci-fi wasabi\n" 
    );
  
        # Retrieve the result
    my $result = $appender->buffer();
  
        # Clear the buffer to the empty string
    $appender->clear();
  
  =head1 DESCRIPTION
  
  This class is used for internal testing of C<Log::Log4perl>. It
  is a C<Log::Dispatch>-style appender, which writes to a buffer 
  in memory, from where actual results can be easily retrieved later
  to compare with expected results.
  
  Every buffer created is stored in an internal global array, and can
  later be referenced by name:
  
      my $app = Log::Log4perl::Appender::TestBuffer->by_name("mybuffer");
  
  retrieves the appender object of a previously created buffer "mybuffer".
  To reset this global array and have it forget all of the previously 
  created testbuffer appenders (external references to those appenders
  nonwithstanding), use
  
      Log::Log4perl::Appender::TestBuffer->reset();
  
  =head1 SEE ALSO
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_APPENDER_TESTBUFFER

    $main::fatpacked{"Log/Log4perl/Appender/TestFileCreeper.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_APPENDER_TESTFILECREEPER';
  ##################################################
  package Log::Log4perl::Appender::TestFileCreeper;
  ##################################################
  # Test appender, intentionally slow. It writes 
  # out one byte at a time to provoke sync errors.
  # Don't use it, unless for testing.
  ##################################################
  
  use warnings;
  use strict;
  
  use Log::Log4perl::Appender::File;
  
  our @ISA = qw(Log::Log4perl::Appender::File);
  
  ##################################################
  sub log {
  ##################################################
      my($self, %params) = @_;
  
      my $fh = $self->{fh};
  
      for (split //, $params{message}) {
          print $fh $_;
          my $oldfh = select $self->{fh}; 
          $| = 1; 
          select $oldfh;
      }
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Appender::TestFileCreeper - Intentionally slow test appender
  
  =head1 SYNOPSIS
  
      use Log::Log4perl::Appender::TestFileCreeper;
  
      my $app = Log::Log4perl::Appender::TestFileCreeper->new(
        filename  => 'file.log',
        mode      => 'append',
      );
  
      $file->log(message => "Log me\n");
  
  =head1 DESCRIPTION
  
  This is a test appender, and it is intentionally slow. It writes 
  out one byte at a time to provoke sync errors. Don't use it, unless 
  for testing.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_APPENDER_TESTFILECREEPER

    $main::fatpacked{"Log/Log4perl/Catalyst.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_CATALYST';
  package Log::Log4perl::Catalyst;
  
  use strict;
  use Log::Log4perl qw(:levels);
  use Log::Log4perl::Logger;
  
  our $VERSION                  = $Log::Log4perl::VERSION;
  our $CATALYST_APPENDER_SUFFIX = "catalyst_buffer";
  our $LOG_LEVEL_ADJUSTMENT     = 1;
  
  init();
  
  ##################################################
  sub init {
  ##################################################
  
      my @levels = qw[ trace debug info warn error fatal ];
  
      Log::Log4perl->wrapper_register(__PACKAGE__);
  
      for my $level (@levels) {
          no strict 'refs';
  
          *{$level} = sub {
              my ( $self, @message ) = @_;
  
              local $Log::Log4perl::caller_depth =
                    $Log::Log4perl::caller_depth +
                       $LOG_LEVEL_ADJUSTMENT;
  
              my $logger = Log::Log4perl->get_logger();
              $logger->$level(@message);
              return 1;
          };
  
          *{"is_$level"} = sub {
              my ( $self, @message ) = @_;
  
              local $Log::Log4perl::caller_depth =
                    $Log::Log4perl::caller_depth +
                       $LOG_LEVEL_ADJUSTMENT;
  
              my $logger = Log::Log4perl->get_logger();
              my $func   = "is_" . $level;
              return $logger->$func;
          };
      }
  }
  
  ##################################################
  sub new {
  ##################################################
      my($class, $config, %options) = @_;
  
      my $self = {
          autoflush   => 0,
          abort       => 0,
          watch_delay => 0,
          %options,
      };
  
      if( !Log::Log4perl->initialized() ) {
          if( defined $config ) {
              if( $self->{watch_delay} ) {
                  Log::Log4perl::init_and_watch( $config, $self->{watch_delay} );
              } else {
                  Log::Log4perl::init( $config );
              }
          } else {
               Log::Log4perl->easy_init({
                   level  => $DEBUG,
                   layout => "[%d] [catalyst] [%p] %m%n",
               });
          }
      }
  
        # Unless we have autoflush, Catalyst likes to buffer all messages
        # until it calls flush(). This is somewhat unusual for Log4perl,
        # but we just put an army of buffer appenders in front of all 
        # appenders defined in the system.
  
      if(! $options{autoflush} ) {
          for my $appender (values %Log::Log4perl::Logger::APPENDER_BY_NAME) {
              next if $appender->{name} =~ /_$CATALYST_APPENDER_SUFFIX$/;
  
              # put a buffering appender in front of every appender
              # defined so far
  
              my $buf_app_name = "$appender->{name}_$CATALYST_APPENDER_SUFFIX";
  
              my $buf_app = Log::Log4perl::Appender->new(
                  'Log::Log4perl::Appender::Buffer',
                  name       => $buf_app_name,
                  appender   => $appender->{name},
                  trigger    => sub { 0 },    # only trigger on explicit flush()
              );
  
              Log::Log4perl->add_appender($buf_app);
              $buf_app->post_init();
              $buf_app->composite(1);
  
              # Point all loggers currently connected to the previously defined
              # appenders to the chained buffer appenders instead.
  
              foreach my $logger (
                             values %$Log::Log4perl::Logger::LOGGERS_BY_NAME){
                  if(defined $logger->remove_appender( $appender->{name}, 0, 1)) {
                      $logger->add_appender( $buf_app );
                  }
              }
          }
      }
  
      bless $self, $class;
  
      return $self;
  }
  
  ##################################################
  sub _flush {
  ##################################################
      my ($self) = @_;
  
      for my $appender (values %Log::Log4perl::Logger::APPENDER_BY_NAME) {
          next if $appender->{name} !~ /_$CATALYST_APPENDER_SUFFIX$/;
  
          if ($self->abort) {
              $appender->{appender}{buffer} = [];
          }
          else {
              $appender->flush();
          }
      }
  
      $self->abort(undef);
  }
  
  ##################################################
  sub abort {
  ##################################################
      my $self = shift;
  
      $self->{abort} = $_[0] if @_;
  
      return $self->{abort};
  }
  
  ##################################################
  sub levels {
  ##################################################
        # stub function, until we have something meaningful
      return 0;
  }
  
  ##################################################
  sub enable {
  ##################################################
        # stub function, until we have something meaningful
      return 0;
  }
  
  ##################################################
  sub disable {
  ##################################################
        # stub function, until we have something meaningful
      return 0;
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Catalyst - Log::Log4perl Catalyst Module
  
  =head1 SYNOPSIS
  
  In your main Catalyst application module:
  
    use Log::Log4perl::Catalyst;
  
      # Either make Log4perl act like the Catalyst default logger:
    __PACKAGE__->log(Log::Log4perl::Catalyst->new());
  
      # or use a Log4perl configuration file, utilizing the full 
      # functionality of Log4perl
    __PACKAGE__->log(Log::Log4perl::Catalyst->new('l4p.conf'));
    
  ... and then sprinkle logging statements all over any code executed
  by Catalyst:
  
      $c->log->debug("This is using log4perl!");
  
  =head1 DESCRIPTION
  
  This module provides Log4perl functions to Catalyst applications. It was
  inspired by Catalyst::Log::Log4perl on CPAN, but has been completely 
  rewritten and uses a different approach to unite Catalyst and Log4perl.
  
  Log4perl provides loggers, usually associated with the current
  package, which can then be remote-controlled by a central
  configuration. This means that if you have a controller function like
  
      package MyApp::Controller::User;
  
      sub add : Chained('base'): PathPart('add'): Args(0) {
          my ( $self, $c ) = @_;
  
          $c->log->info("Adding a user");
          # ...
      }
  
  Level-based control is available via the following methods:
  
     $c->log->debug("Reading configuration");
     $c->log->info("Adding a user");
     $c->log->warn("Can't read configuration ($!)");
     $c->log->error("Can't add user ", $user);
     $c->log->fatal("Database down, aborting request");
  
  But that's not all, Log4perl is much more powerful.
  
  The logging statement can be suppressed or activated based on a Log4perl
  file that looks like
  
        # All MyApp loggers opened up for DEBUG and above
      log4perl.logger.MyApp = DEBUG, Screen
      # ...
  
  or 
  
        # All loggers block messages below INFO
      log4perl.logger=INFO, Screen
      # ...
  
  respectively. See the Log4perl manpage on how to perform fine-grained 
  log-level and location filtering, and how to forward messages not only
  to the screen or to log files, but also to databases, email appenders,
  and much more.
  
  Also, you can change the message layout. For example if you want
  to know where a particular statement was logged, turn on file names and 
  line numbers:
  
      # Log4perl configuration file
      # ...
      log4perl.appender.Screen.layout.ConversionPattern = \
            %F{1}-%L: %p %m%n
  
  Messages will then look like
  
      MyApp.pm-1869: INFO Saving user profile for user "wonko"
  
  Or want to log a request's IP address with every log statement? No problem 
  with Log4perl, just call
  
      Log::Log4perl::MDC->put( "ip", $c->req->address() );
  
  at the beginning of the request cycle and use
  
      # Log4perl configuration file
      # ...
      log4perl.appender.Screen.layout.ConversionPattern = \
            [%d]-%X{ip} %F{1}-%L: %p %m%n
  
  as a Log4perl layout. Messages will look like
  
      [2010/02/22 23:25:55]-123.122.108.10 MyApp.pm-1953: INFO Reading profile for user "wonko"
  
  Again, check the Log4perl manual page, there's a plethora of configuration
  options.
  
  =head1 METHODS
  
  =over 4
  
  =item new($config, [%options])
  
  If called without parameters, new() initializes Log4perl in a way 
  so that messages are logged similarly to Catalyst's default logging
  mechanism. If you provide a configuration, either the name of a configuration
  file or a reference to a scalar string containing the configuration, it
  will call Log4perl with these parameters.
  
  The second (optional) parameter is a list of key/value pairs:
  
    'autoflush'   =>  1   # Log without buffering ('abort' not supported)
    'watch_delay' => 30   # If set, use L<Log::Log4perl>'s init_and_watch
  
  =item _flush()
  
  Flushes the cache.
  
  =item abort($abort)
  
  Clears the logging system's internal buffers without logging anything.
  
  =back
  
  =head2 Using :easy Macros with Catalyst
  
  If you're tired of typing
  
      $c->log->debug("...");
  
  and would prefer to use Log4perl's convenient :easy mode macros like
  
      DEBUG "...";
  
  then just pull those macros in via Log::Log4perl's :easy mode and start
  cranking:
  
      use Log::Log4perl qw(:easy);
  
        # ... use macros later on
      sub base :Chained('/') :PathPart('apples') :CaptureArgs(0) {
          my ( $self, $c ) = @_;
  
          DEBUG "Handling apples";
      }
  
  Note the difference between Log4perl's initialization in Catalyst, which
  uses the Catalyst-specific Log::Log4perl::Catalyst module (top of this
  page), and making use of Log4perl's loggers with the standard 
  Log::Log4perl loggers and macros. While initialization requires Log4perl
  to perform dark magic to conform to Catalyst's different logging strategy,
  obtaining Log4perl's logger objects or calling its macros are unchanged.
  
  Instead of using Catalyst's way of referencing the "context" object $c to 
  obtain logger references via its log() method, you can just as well use 
  Log4perl's get_logger() or macros to access Log4perl's logger singletons. 
  The result is the same.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_CATALYST

    $main::fatpacked{"Log/Log4perl/Config.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_CONFIG';
  ##################################################
  package Log::Log4perl::Config;
  ##################################################
  use 5.006;
  use strict;
  use warnings;
  
  use Log::Log4perl::Logger;
  use Log::Log4perl::Level;
  use Log::Log4perl::Config::PropertyConfigurator;
  use Log::Log4perl::JavaMap;
  use Log::Log4perl::Filter;
  use Log::Log4perl::Filter::Boolean;
  use Log::Log4perl::Config::Watch;
  
  use constant _INTERNAL_DEBUG => 0;
  
  our $CONFIG_FILE_READS       = 0;
  our $CONFIG_INTEGRITY_CHECK  = 1;
  our $CONFIG_INTEGRITY_ERROR  = undef;
  
  our $WATCHER;
  our $DEFAULT_WATCH_DELAY = 60; # seconds
  our $OPTS = {};
  our $OLD_CONFIG;
  our $LOGGERS_DEFINED;
  our $UTF8 = 0;
  
  ###########################################
  sub init {
  ###########################################
      Log::Log4perl::Logger->reset();
  
      undef $WATCHER; # just in case there's a one left over (e.g. test cases)
  
      return _init(@_);
  }
  
  ###########################################
  sub utf8 {
  ###########################################
      my( $class, $flag ) = @_;
  
      $UTF8 = $flag if defined $flag;
  
      return $UTF8;
  }
  
  ###########################################
  sub watcher {
  ###########################################
      return $WATCHER;
  }
  
  ###########################################
  sub init_and_watch {
  ###########################################
      my ($class, $config, $delay, $opts) = @_;
          # delay can be a signal name - in this case we're gonna
          # set up a signal handler.
  
      if(defined $WATCHER) {
          $config = $WATCHER->file();
          if(defined $Log::Log4perl::Config::Watch::SIGNAL_CAUGHT) {
              $delay  = $WATCHER->signal();
          } else {
              $delay  = $WATCHER->check_interval();
          }
      }
  
      print "init_and_watch ($config-$delay). Resetting.\n" if _INTERNAL_DEBUG;
  
      Log::Log4perl::Logger->reset();
  
      defined ($delay) or $delay = $DEFAULT_WATCH_DELAY;  
  
      if (ref $config) {
          die "Log4perl can only watch a file, not a string of " .
              "configuration information";
      }elsif ($config =~ m!^(https?|ftp|wais|gopher|file):!){
          die "Log4perl can only watch a file, not a url like $config";
      }
  
      if($delay =~ /\D/) {
          $WATCHER = Log::Log4perl::Config::Watch->new(
                            file         => $config,
                            signal       => $delay,
                            l4p_internal => 1,
                     );
      } else {
          $WATCHER = Log::Log4perl::Config::Watch->new(
                            file           => $config,
                            check_interval => $delay,
                            l4p_internal   => 1,
                     );
      }
  
      if(defined $opts) {
          die "Parameter $opts needs to be a hash ref" if ref($opts) ne "HASH";
          $OPTS = $opts;
      }
  
      eval { _init($class, $config); };
  
      if($@) {
          die "$@" unless defined $OLD_CONFIG;
              # Call _init with a pre-parsed config to go back to old setting
          _init($class, undef, $OLD_CONFIG);
          warn "Loading new config failed, reverted to old one\n";
      }
  }
  
  ##################################################
  sub _init {
  ##################################################
      my($class, $config, $data) = @_;
  
      my %additivity = ();
  
      $LOGGERS_DEFINED = 0;
  
      print "Calling _init\n" if _INTERNAL_DEBUG;
  
      #keep track so we don't create the same one twice
      my %appenders_created = ();
  
      #some appenders need to run certain subroutines right at the
      #end of the configuration phase, when all settings are in place.
      my @post_config_subs  = ();
  
      # This logic is probably suited to win an obfuscated programming
      # contest. It desperately needs to be rewritten.
      # Basically, it works like this:
      # config_read() reads the entire config file into a hash of hashes:
      #     log4j.logger.foo.bar.baz: WARN, A1
      # gets transformed into
      #     $data->{log4j}->{logger}->{foo}->{bar}->{baz} = "WARN, A1";
      # The code below creates the necessary loggers, sets the appenders
      # and the layouts etc.
      # In order to transform parts of this tree back into identifiers
      # (like "foo.bar.baz"), we're using the leaf_paths functions below.
      # Pretty scary. But it allows the lines of the config file to be
      # in *arbitrary* order.
  
      $data = config_read($config) unless defined $data;
      
      if(_INTERNAL_DEBUG) {
          require Data::Dumper;
          Data::Dumper->import();
          print Data::Dumper::Dumper($data);
      }
  
      my @loggers      = ();
      my %filter_names = ();
  
      my $system_wide_threshold;
  
        # Autocorrect the rootlogger/rootLogger typo
      if(exists $data->{rootlogger} and 
         ! exists $data->{rootLogger}) {
           $data->{rootLogger} = $data->{rootlogger};
      }
  
          # Find all logger definitions in the conf file. Start
          # with root loggers.
      if(exists $data->{rootLogger}) {
          $LOGGERS_DEFINED++;
          push @loggers, ["", $data->{rootLogger}->{value}];
      }
          
          # Check if we've got a system-wide threshold setting
      if(exists $data->{threshold}) {
              # yes, we do.
          $system_wide_threshold = $data->{threshold}->{value};
      }
  
      if (exists $data->{oneMessagePerAppender}){
                      $Log::Log4perl::one_message_per_appender = 
                          $data->{oneMessagePerAppender}->{value};
      }
  
      if(exists $data->{utcDateTimes}) {
          require Log::Log4perl::DateFormat;
          $Log::Log4perl::DateFormat::GMTIME = !!$data->{utcDateTimes}->{value};
      }
  
          # Boolean filters 
      my %boolean_filters = ();
  
          # Continue with lower level loggers. Both 'logger' and 'category'
          # are valid keywords. Also 'additivity' is one, having a logger
          # attached. We'll differentiate between the two further down.
      for my $key (qw(logger category additivity PatternLayout filter)) {
  
          if(exists $data->{$key}) {
  
              for my $path (@{leaf_paths($data->{$key})}) {
  
                  print "Path before: @$path\n" if _INTERNAL_DEBUG;
  
                  my $value = boolean_to_perlish(pop @$path);
  
                  pop @$path; # Drop the 'value' keyword part
  
                  if($key eq "additivity") {
                      # This isn't a logger but an additivity setting.
                      # Save it in a hash under the logger's name for later.
                      $additivity{join('.', @$path)} = $value;
  
                      #a global user-defined conversion specifier (cspec)
                  }elsif ($key eq "PatternLayout"){
                      &add_global_cspec(@$path[-1], $value);
  
                  }elsif ($key eq "filter"){
                      print "Found entry @$path\n" if _INTERNAL_DEBUG;
                      $filter_names{@$path[0]}++;
                  } else {
  
                      if (ref($value) eq "ARRAY") {
                        die "Multiple definitions of logger ".join('.',@$path)." in log4perl config";
                      }
  
                      # This is a regular logger
                      $LOGGERS_DEFINED++;
                      push @loggers, [join('.', @$path), $value];
                  }
              }
          }
      }
  
          # Now go over all filters found by name
      for my $filter_name (sort keys %filter_names) {
  
          print "Checking filter $filter_name\n" if _INTERNAL_DEBUG;
  
              # The boolean filter needs all other filters already
              # initialized, defer its initialization
          if($data->{filter}->{$filter_name}->{value} eq
             "Log::Log4perl::Filter::Boolean") {
              print "Boolean filter ($filter_name)\n" if _INTERNAL_DEBUG;
              $boolean_filters{$filter_name}++;
              next;
          }
  
          my $type = $data->{filter}->{$filter_name}->{value};
          if(my $code = compile_if_perl($type)) {
              $type = $code;
          }
          
          print "Filter $filter_name is of type $type\n" if _INTERNAL_DEBUG;
  
          my $filter;
  
          if(ref($type) eq "CODE") {
                  # Subroutine - map into generic Log::Log4perl::Filter class
              $filter = Log::Log4perl::Filter->new($filter_name, $type);
          } else {
                  # Filter class
                  die "Filter class '$type' doesn't exist" unless
                       Log::Log4perl::Util::module_available($type);
                  eval "require $type" or die "Require of $type failed ($!)";
  
                  # Invoke with all defined parameter
                  # key/values (except the key 'value' which is the entry 
                  # for the class)
              $filter = $type->new(name => $filter_name,
                  map { $_ => $data->{filter}->{$filter_name}->{$_}->{value} } 
                  grep { $_ ne "value" } 
                  sort keys %{$data->{filter}->{$filter_name}});
          }
              # Register filter with the global filter registry
          $filter->register();
      }
  
          # Initialize boolean filters (they need the other filters to be
          # initialized to be able to compile their logic)
      for my $name (sort keys %boolean_filters) {
          my $logic = $data->{filter}->{$name}->{logic}->{value};
          die "No logic defined for boolean filter $name" unless defined $logic;
          my $filter = Log::Log4perl::Filter::Boolean->new(
                           name  => $name, 
                           logic => $logic);
          $filter->register();
      }
  
      for (@loggers) {
          my($name, $value) = @$_;
  
          my $logger = Log::Log4perl::Logger->get_logger($name);
          my ($level, @appnames) = split /\s*,\s*/, $value;
  
          $logger->level(
              Log::Log4perl::Level::to_priority($level),
              'dont_reset_all');
  
          if(exists $additivity{$name}) {
              $logger->additivity($additivity{$name}, 1);
          }
  
          for my $appname (@appnames) {
  
              my $appender = create_appender_instance(
                  $data, $appname, \%appenders_created, \@post_config_subs,
                  $system_wide_threshold);
  
              $logger->add_appender($appender, 'dont_reset_all');
              set_appender_by_name($appname, $appender, \%appenders_created);
          }
      }
  
      #run post_config subs
      for(@post_config_subs) {
          $_->();
      }
  
      #now we're done, set up all the output methods (e.g. ->debug('...'))
      Log::Log4perl::Logger::reset_all_output_methods();
  
      #Run a sanity test on the config not disabled
      if($Log::Log4perl::Config::CONFIG_INTEGRITY_CHECK and
         !config_is_sane()) {
          warn "Log::Log4perl configuration looks suspicious: ",
               "$CONFIG_INTEGRITY_ERROR";
      }
  
          # Successful init(), save config for later
      $OLD_CONFIG = $data;
  
      $Log::Log4perl::Logger::INITIALIZED = 1;
  }
  
  ##################################################
  sub config_is_sane {
  ##################################################
      if(! $LOGGERS_DEFINED) {
          $CONFIG_INTEGRITY_ERROR = "No loggers defined";
          return 0;
      }    
  
      if(scalar keys %Log::Log4perl::Logger::APPENDER_BY_NAME == 0) {
          $CONFIG_INTEGRITY_ERROR = "No appenders defined";
          return 0;
      }
  
      return 1;
  }
  
  ##################################################
  sub create_appender_instance {
  ##################################################
      my($data, $appname, $appenders_created, $post_config_subs,
         $system_wide_threshold) = @_;
  
      my $appenderclass = get_appender_by_name(
              $data, $appname, $appenders_created);
  
      print "appenderclass=$appenderclass\n" if _INTERNAL_DEBUG;
  
      my $appender;
  
      if (ref $appenderclass) {
          $appender = $appenderclass;
      } else {
          die "ERROR: you didn't tell me how to " .
              "implement your appender '$appname'"
                  unless $appenderclass;
  
          if (Log::Log4perl::JavaMap::translate($appenderclass)){
              # It's Java. Try to map
              print "Trying to map Java $appname\n" if _INTERNAL_DEBUG;
              $appender = Log::Log4perl::JavaMap::get($appname, 
                                          $data->{appender}->{$appname});
  
          }else{
              # It's Perl
              my @params = grep { $_ ne "layout" and
                                  $_ ne "value"
                                } sort keys %{$data->{appender}->{$appname}};
      
              my %param = ();
              foreach my $pname (@params){
                  #this could be simple value like 
                  #{appender}{myAppender}{file}{value} => 'log.txt'
                  #or a structure like
                  #{appender}{myAppender}{login} => 
                  #                         { name => {value => 'bob'},
                  #                           pwd  => {value => 'xxx'},
                  #                         }
                  #in the latter case we send a hashref to the appender
                  if (exists $data->{appender}{$appname}
                                    {$pname}{value}      ) {
                      $param{$pname} = $data->{appender}{$appname}
                                              {$pname}{value};
                  }else{
                      $param{$pname} = {map {$_ => $data->{appender}
                                                          {$appname}
                                                          {$pname}
                                                          {$_}
                                                          {value}} 
                                       sort keys %{$data->{appender}
                                                     {$appname}
                                                     {$pname}}
                                       };
                  }
      
              }
  
              my $depends_on = [];
      
              $appender = Log::Log4perl::Appender->new(
                  $appenderclass, 
                  name                 => $appname,
                  l4p_post_config_subs => $post_config_subs,
                  l4p_depends_on       => $depends_on,
                  %param,
              ); 
      
              for my $dependency (@$depends_on) {
                  # If this appender indicates that it needs other appenders
                  # to exist (e.g. because it's a composite appender that
                  # relays messages on to its appender-refs) then we're 
                  # creating their instances here. Reason for this is that 
                  # these appenders are not attached to any logger and are
                  # therefore missed by the config parser which goes through
                  # the defined loggers and just creates *their* attached
                  # appenders.
                  $appender->composite(1);
                  next if exists $appenders_created->{$appname};
                  my $app = create_appender_instance($data, $dependency, 
                               $appenders_created,
                               $post_config_subs);
                  # If the appender appended a subroutine to $post_config_subs
                  # (a reference to an array of subroutines)
                  # here, the configuration parser will later execute this
                  # method. This is used by a composite appender which needs
                  # to make sure all of its appender-refs are available when
                  # all configuration settings are done.
  
                  # Smuggle this sub-appender into the hash of known appenders 
                  # without attaching it to any logger directly.
                  $
                  Log::Log4perl::Logger::APPENDER_BY_NAME{$dependency} = $app;
              }
          }
      }
  
      add_layout_by_name($data, $appender, $appname) unless
          $appender->composite();
  
         # Check for appender thresholds
      my $threshold = 
         $data->{appender}->{$appname}->{Threshold}->{value};
  
      if(defined $system_wide_threshold and
         !defined $threshold) {
          $threshold = $system_wide_threshold;
      }
  
      if(defined $threshold) {
              # Need to split into two lines because of CVS
          $appender->threshold($
              Log::Log4perl::Level::PRIORITY{$threshold});
      }
  
          # Check for custom filters attached to the appender
      my $filtername = 
         $data->{appender}->{$appname}->{Filter}->{value};
      if(defined $filtername) {
              # Need to split into two lines because of CVS
          my $filter = Log::Log4perl::Filter::by_name($filtername);
          die "Filter $filtername doesn't exist" unless defined $filter;
          $appender->filter($filter);
      }
  
      if(defined $system_wide_threshold and
         defined $threshold and
         $
          Log::Log4perl::Level::PRIORITY{$system_wide_threshold} > 
         $
           Log::Log4perl::Level::PRIORITY{$threshold}
        ) {
          $appender->threshold($
              Log::Log4perl::Level::PRIORITY{$system_wide_threshold});
      }
  
      if(exists $data->{appender}->{$appname}->{threshold}) {
          die "invalid keyword 'threshold' - perhaps you meant 'Threshold'?";
      }
  
      return $appender;
  }
  
  ###########################################
  sub add_layout_by_name {
  ###########################################
      my($data, $appender, $appender_name) = @_;
  
      my $layout_class = $data->{appender}->{$appender_name}->{layout}->{value};
  
      die "Layout not specified for appender $appender_name" unless $layout_class;
  
      $layout_class =~ s/org.apache.log4j./Log::Log4perl::Layout::/;
  
          # Check if we have this layout class
      if(!Log::Log4perl::Util::module_available($layout_class)) {
          if(Log::Log4perl::Util::module_available(
             "Log::Log4perl::Layout::$layout_class")) {
              # Someone used the layout shortcut, use the fully qualified
              # module name instead.
              $layout_class = "Log::Log4perl::Layout::$layout_class";
          } else {
              die "ERROR: trying to set layout for $appender_name to " .
                  "'$layout_class' failed";
          }
      }
  
      eval "require $layout_class" or 
          die "Require to $layout_class failed ($!)";
  
      $appender->layout($layout_class->new(
          $data->{appender}->{$appender_name}->{layout},
          ));
  }
  
  ###########################################
  sub get_appender_by_name {
  ###########################################
      my($data, $name, $appenders_created) = @_;
  
      if (exists $appenders_created->{$name}) {
          return $appenders_created->{$name};
      } else {
          return $data->{appender}->{$name}->{value};
      }
  }
  
  ###########################################
  sub set_appender_by_name {
  ###########################################
  # keep track of appenders we've already created
  ###########################################
      my($appname, $appender, $appenders_created) = @_;
  
      $appenders_created->{$appname} ||= $appender;
  }
  
  ##################################################
  sub add_global_cspec {
  ##################################################
  # the config file said
  # log4j.PatternLayout.cspec.Z=sub {return $$*2}
  ##################################################
      my ($letter, $perlcode) = @_;
  
      die "error: only single letters allowed in log4j.PatternLayout.cspec.$letter"
          unless ($letter =~ /^[a-zA-Z]$/);
  
      Log::Log4perl::Layout::PatternLayout::add_global_cspec($letter, $perlcode);
  }
  
  my $LWP_USER_AGENT;
  sub set_LWP_UserAgent
  {
      $LWP_USER_AGENT = shift;
  }
  
  
  ###########################################
  sub config_read {
  ###########################################
  # Read the lib4j configuration and store the
  # values into a nested hash structure.
  ###########################################
      my($config) = @_;
  
      die "Configuration not defined" unless defined $config;
  
      my @text;
      my $parser;
  
      $CONFIG_FILE_READS++;  # Count for statistical purposes
  
      my $base_configurator = Log::Log4perl::Config::BaseConfigurator->new(
          utf8 => $UTF8,
      );
  
      my $data = {};
  
      if (ref($config) eq 'HASH') {   # convert the hashref into a list 
                                      # of name/value pairs
          print "Reading config from hash\n" if _INTERNAL_DEBUG;
          @text = ();
          for my $key ( sort keys %$config ) {
              if( ref( $config->{$key} ) eq "CODE" ) {
                  $config->{$key} = $config->{$key}->();
              }
              push @text, $key . '=' . $config->{$key} . "\n";
          }
      } elsif (ref $config eq 'SCALAR') {
          print "Reading config from scalar\n" if _INTERNAL_DEBUG;
          @text = split(/\n/,$$config);
  
      } elsif (ref $config eq 'GLOB' or 
               ref $config eq 'IO::File') {
              # If we have a file handle, just call the reader
          print "Reading config from file handle\n" if _INTERNAL_DEBUG;
          @text = @{ $base_configurator->file_h_read( $config ) };
  
      } elsif (ref $config) {
              # Caller provided a config parser object, which already
              # knows which file (or DB or whatever) to parse.
          print "Reading config from parser object\n" if _INTERNAL_DEBUG;
          $data = $config->parse();
          return $data;
  
      } elsif ($config =~ m|^ldap://|){
         if(! Log::Log4perl::Util::module_available("Net::LDAP")) {
             die "Log4perl: missing Net::LDAP needed to parse LDAP urls\n$@\n";
         }
  
         require Net::LDAP;
         require Log::Log4perl::Config::LDAPConfigurator;
  
         return Log::Log4perl::Config::LDAPConfigurator->new->parse($config);
  
      } else {
  
          if ($config =~ /^(https?|ftp|wais|gopher|file):/){
              my ($result, $ua);
      
              die "LWP::UserAgent not available" unless
                  Log::Log4perl::Util::module_available("LWP::UserAgent");
  
              require LWP::UserAgent;
              unless (defined $LWP_USER_AGENT) {
                  $LWP_USER_AGENT = LWP::UserAgent->new;
      
                  # Load proxy settings from environment variables, i.e.:
                  # http_proxy, ftp_proxy, no_proxy etc (see LWP::UserAgent)
                  # You need these to go thru firewalls.
                  $LWP_USER_AGENT->env_proxy;
              }
              $ua = $LWP_USER_AGENT;
  
              my $req = new HTTP::Request GET => $config;
              my $res = $ua->request($req);
  
              if ($res->is_success) {
                  @text = split(/\n/, $res->content);
              } else {
                  die "Log4perl couln't get $config, ".
                       $res->message." ";
              }
          } else {
              print "Reading config from file '$config'\n" if _INTERNAL_DEBUG;
              print "Reading ", -s $config, " bytes.\n" if _INTERNAL_DEBUG;
                # Use the BaseConfigurator's file reader to avoid duplicating
                # utf8 handling here.
              $base_configurator->file( $config );
              @text = @{ $base_configurator->text() };
          }
      }
      
      print "Reading $config: [@text]\n" if _INTERNAL_DEBUG;
  
      if(! grep /\S/, @text) {
          return $data;
      }
  
      if ($text[0] =~ /^<\?xml /) {
  
          die "XML::DOM not available" unless
                  Log::Log4perl::Util::module_available("XML::DOM");
  
          require XML::DOM; 
          require Log::Log4perl::Config::DOMConfigurator;
  
          XML::DOM->VERSION($Log::Log4perl::DOM_VERSION_REQUIRED);
          $parser = Log::Log4perl::Config::DOMConfigurator->new();
          $data = $parser->parse(\@text);
      } else {
          $parser = Log::Log4perl::Config::PropertyConfigurator->new();
          $data = $parser->parse(\@text);
      }
  
      $data = $parser->parse_post_process( $data, leaf_paths($data) );
  
      return $data;
  }
  
  ###########################################
  sub unlog4j {
  ###########################################
      my ($string) = @_;
  
      $string =~ s#^org\.apache\.##;
      $string =~ s#^log4j\.##;
      $string =~ s#^l4p\.##;
      $string =~ s#^log4perl\.##i;
  
      $string =~ s#\.#::#g;
  
      return $string;
  }
  
  ############################################################
  sub leaf_paths {
  ############################################################
  # Takes a reference to a hash of hashes structure of 
  # arbitrary depth, walks the tree and returns a reference
  # to an array of all possible leaf paths (each path is an 
  # array again).
  # Example: { a => { b => { c => d }, e => f } } would generate
  #          [ [a, b, c, d], [a, e, f] ]
  ############################################################
      my ($root) = @_;
  
      my @stack  = ();
      my @result = ();
  
      push @stack, [$root, []];  
      
      while(@stack) {
          my $item = pop @stack;
  
          my($node, $path) = @$item;
  
          if(ref($node) eq "HASH") { 
              for(sort keys %$node) {
                  push @stack, [$node->{$_}, [@$path, $_]];
              }
          } else {
              push @result, [@$path, $node];
          }
      }
      return \@result;
  }
  
  ###########################################
  sub leaf_path_to_hash {
  ###########################################
      my($leaf_path, $data) = @_;
  
      my $ref = \$data;
  
      for my $part ( @$leaf_path[0..$#$leaf_path-1] ) {
          $ref = \$$ref->{ $part };
      }
  
      return $ref;
  }
  
  ###########################################
  sub eval_if_perl {
  ###########################################
      my($value) = @_;
  
      if(my $cref = compile_if_perl($value)) {
          return $cref->();
      }
  
      return $value;
  }
  
  ###########################################
  sub compile_if_perl {
  ###########################################
      my($value) = @_;
  
      if($value =~ /^\s*sub\s*{/ ) {
          my $mask;
          unless( Log::Log4perl::Config->allow_code() ) {
              die "\$Log::Log4perl::Config->allow_code() setting " .
                  "prohibits Perl code in config file";
          }
          if( defined( $mask = Log::Log4perl::Config->allowed_code_ops() ) ) {
              return compile_in_safe_cpt($value, $mask );
          }
          elsif( $mask = Log::Log4perl::Config->allowed_code_ops_convenience_map(
                               Log::Log4perl::Config->allow_code()
                            ) ) {
              return compile_in_safe_cpt($value, $mask );
          }
          elsif( Log::Log4perl::Config->allow_code() == 1 ) {
  
              # eval without restriction
              my $cref = eval "package main; $value" or 
                  die "Can't evaluate '$value' ($@)";
              return $cref;
          }
          else {
              die "Invalid value for \$Log::Log4perl::Config->allow_code(): '".
                  Log::Log4perl::Config->allow_code() . "'";
          }
      }
  
      return undef;
  }
  
  ###########################################
  sub compile_in_safe_cpt {
  ###########################################
      my($value, $allowed_ops) = @_;
  
      # set up a Safe compartment
      require Safe;
      my $safe = Safe->new();
      $safe->permit_only( @{ $allowed_ops } );
   
      # share things with the compartment
      for( sort keys %{ Log::Log4perl::Config->vars_shared_with_safe_compartment() } ) {
          my $toshare = Log::Log4perl::Config->vars_shared_with_safe_compartment($_);
          $safe->share_from( $_, $toshare )
              or die "Can't share @{ $toshare } with Safe compartment";
      }
      
      # evaluate with restrictions
      my $cref = $safe->reval("package main; $value") or
          die "Can't evaluate '$value' in Safe compartment ($@)";
      return $cref;
      
  }
  
  ###########################################
  sub boolean_to_perlish {
  ###########################################
      my($value) = @_;
  
          # Translate boolean to perlish
      $value = 1 if $value =~ /^true$/i;
      $value = 0 if $value =~ /^false$/i;
  
      return $value;
  }
  
  ###########################################
  sub vars_shared_with_safe_compartment {
  ###########################################
      my($class, @args) = @_;
  
          # Allow both for ...::Config::foo() and ...::Config->foo()
      if(defined $class and $class ne __PACKAGE__) {
          unshift @args, $class;
      }
     
      # handle different invocation styles
      if(@args == 1 && ref $args[0] eq 'HASH' ) {
          # replace entire hash of vars
          %Log::Log4perl::VARS_SHARED_WITH_SAFE_COMPARTMENT = %{$args[0]};
      }
      elsif( @args == 1 ) {
          # return vars for given package
          return $Log::Log4perl::VARS_SHARED_WITH_SAFE_COMPARTMENT{
                 $args[0]};
      }
      elsif( @args == 2 ) {
          # add/replace package/var pair
          $Log::Log4perl::VARS_SHARED_WITH_SAFE_COMPARTMENT{
             $args[0]} = $args[1];
      }
  
      return wantarray ? %Log::Log4perl::VARS_SHARED_WITH_SAFE_COMPARTMENT
                       : \%Log::Log4perl::VARS_SHARED_WITH_SAFE_COMPARTMENT;
      
  }
  
  ###########################################
  sub allowed_code_ops {
  ###########################################
      my($class, @args) = @_;
  
          # Allow both for ...::Config::foo() and ...::Config->foo()
      if(defined $class and $class ne __PACKAGE__) {
          unshift @args, $class;
      }
     
      if(@args) {
          @Log::Log4perl::ALLOWED_CODE_OPS_IN_CONFIG_FILE = @args;
      }
      else {
          # give back 'undef' instead of an empty arrayref
          unless( @Log::Log4perl::ALLOWED_CODE_OPS_IN_CONFIG_FILE ) {
              return;
          }
      }
  
      return wantarray ? @Log::Log4perl::ALLOWED_CODE_OPS_IN_CONFIG_FILE
                       : \@Log::Log4perl::ALLOWED_CODE_OPS_IN_CONFIG_FILE;
  }
  
  ###########################################
  sub allowed_code_ops_convenience_map {
  ###########################################
      my($class, @args) = @_;
  
          # Allow both for ...::Config::foo() and ...::Config->foo()
      if(defined $class and $class ne __PACKAGE__) {
          unshift @args, $class;
      }
  
      # handle different invocation styles
      if( @args == 1 && ref $args[0] eq 'HASH' ) {
          # replace entire map
          %Log::Log4perl::ALLOWED_CODE_OPS = %{$args[0]};
      }
      elsif( @args == 1 ) {
          # return single opcode mask
          return $Log::Log4perl::ALLOWED_CODE_OPS{
                     $args[0]};
      }
      elsif( @args == 2 ) {
          # make sure the mask is an array ref
          if( ref $args[1] ne 'ARRAY' ) {
              die "invalid mask (not an array ref) for convenience name '$args[0]'";
          }
          # add name/mask pair
          $Log::Log4perl::ALLOWED_CODE_OPS{
              $args[0]} = $args[1];
      }
  
      return wantarray ? %Log::Log4perl::ALLOWED_CODE_OPS
                       : \%Log::Log4perl::ALLOWED_CODE_OPS
  }
  
  ###########################################
  sub allow_code {
  ###########################################
      my($class, @args) = @_;
  
          # Allow both for ...::Config::foo() and ...::Config->foo()
      if(defined $class and $class ne __PACKAGE__) {
          unshift @args, $class;
      }
     
      if(@args) {
          $Log::Log4perl::ALLOW_CODE_IN_CONFIG_FILE = 
              $args[0];
      }
  
      return $Log::Log4perl::ALLOW_CODE_IN_CONFIG_FILE;
  }
  
  ################################################
  sub var_subst {
  ################################################
      my($varname, $subst_hash) = @_;
  
          # Throw out blanks
      $varname =~ s/\s+//g;
  
      if(exists $subst_hash->{$varname}) {
          print "Replacing variable: '$varname' => '$subst_hash->{$varname}'\n" 
              if _INTERNAL_DEBUG;
          return $subst_hash->{$varname};
  
      } elsif(exists $ENV{$varname}) {
          print "Replacing ENV variable: '$varname' => '$ENV{$varname}'\n" 
              if _INTERNAL_DEBUG;
          return $ENV{$varname};
  
      }
  
      die "Undefined Variable '$varname'";
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Config - Log4perl configuration file syntax
  
  =head1 DESCRIPTION
  
  In C<Log::Log4perl>, configuration files are used to describe how the
  system's loggers ought to behave. 
  
  The format is the same as the one as used for C<log4j>, just with
  a few perl-specific extensions, like enabling the C<Bar::Twix>
  syntax instead of insisting on the Java-specific C<Bar.Twix>.
  
  Comment lines and blank lines (all whitespace or empty) are ignored.
  
  Comment lines may start with arbitrary whitespace followed by one of:
  
  =over 4
  
  =item # - Common comment delimiter
  
  =item ! - Java .properties file comment delimiter accepted by log4j
  
  =item ; - Common .ini file comment delimiter
  
  =back
  
  Comments at the end of a line are not supported. So if you write
  
      log4perl.appender.A1.filename=error.log #in current dir
  
  you will find your messages in a file called C<error.log #in current dir>.
  
  Also, blanks between syntactical entities are ignored, it doesn't 
  matter if you write
  
      log4perl.logger.Bar.Twix=WARN,Screen
  
  or 
  
      log4perl.logger.Bar.Twix = WARN, Screen
  
  C<Log::Log4perl> will strip the blanks while parsing your input.
  
  Assignments need to be on a single line. However, you can break the
  line if you want to by using a continuation character at the end of the
  line. Instead of writing
  
      log4perl.appender.A1.layout=Log::Log4perl::Layout::SimpleLayout
  
  you can break the line at any point by putting a backslash at the very (!)
  end of the line to be continued:
  
      log4perl.appender.A1.layout=\
          Log::Log4perl::Layout::SimpleLayout
  
  Watch out for trailing blanks after the backslash, which would prevent
  the line from being properly concatenated.
  
  =head2 Loggers
  
  Loggers are addressed by category:
  
      log4perl.logger.Bar.Twix      = WARN, Screen
  
  This sets all loggers under the C<Bar::Twix> hierarchy on priority
  C<WARN> and attaches a later-to-be-defined C<Screen> appender to them.
  Settings for the root appender (which doesn't have a name) can be
  accomplished by simply omitting the name:
  
      log4perl.logger = FATAL, Database, Mailer 
  
  This sets the root appender's level to C<FATAL> and also attaches the 
  later-to-be-defined appenders C<Database> and C<Mailer> to it. Alternatively,
  the root logger can be addressed as C<rootLogger>:
  
      log4perl.rootLogger = FATAL, Database, Mailer
  
  The additivity flag of a logger is set or cleared via the 
  C<additivity> keyword:
  
      log4perl.additivity.Bar.Twix = 0|1
  
  (Note the reversed order of keyword and logger name, resulting
  from the dilemma that a logger name could end in C<.additivity>
  according to the log4j documentation).
  
  =head2 Appenders and Layouts
  
  Appender names used in Log4perl configuration file
  lines need to be resolved later on, in order to
  define the appender's properties and its layout. To specify properties
  of an appender, just use the C<appender> keyword after the
  C<log4perl> intro and the appender's name:
  
          # The Bar::Twix logger and its appender
      log4perl.logger.Bar.Twix = DEBUG, A1
      log4perl.appender.A1=Log::Log4perl::Appender::File
      log4perl.appender.A1.filename=test.log
      log4perl.appender.A1.mode=append
      log4perl.appender.A1.layout=Log::Log4perl::Layout::SimpleLayout
  
  This sets a priority of C<DEBUG> for loggers in the C<Bar::Twix>
  hierarchy and assigns the C<A1> appender to it, which is later on
  resolved to be an appender of type C<Log::Log4perl::Appender::File>, simply
  appending to a log file. According to the C<Log::Log4perl::Appender::File>
  manpage, the C<filename> parameter specifies the name of the log file
  and the C<mode> parameter can be set to C<append> or C<write> (the
  former will append to the logfile if one with the specified name
  already exists while the latter would clobber and overwrite it).
  
  The order of the entries in the configuration file is not important,
  C<Log::Log4perl> will read in the entire file first and try to make
  sense of the lines after it knows the entire context.
  
  You can very well define all loggers first and then their appenders
  (you could even define your appenders first and then your loggers,
  but let's not go there):
  
      log4perl.logger.Bar.Twix = DEBUG, A1
      log4perl.logger.Bar.Snickers = FATAL, A2
  
      log4perl.appender.A1=Log::Log4perl::Appender::File
      log4perl.appender.A1.filename=test.log
      log4perl.appender.A1.mode=append
      log4perl.appender.A1.layout=Log::Log4perl::Layout::SimpleLayout
  
      log4perl.appender.A2=Log::Log4perl::Appender::Screen
      log4perl.appender.A2.stderr=0
      log4perl.appender.A2.layout=Log::Log4perl::Layout::PatternLayout
      log4perl.appender.A2.layout.ConversionPattern = %d %m %n
  
  Note that you have to specify the full path to the layout class
  and that C<ConversionPattern> is the keyword to specify the printf-style
  formatting instructions.
  
  =head1 Configuration File Cookbook
  
  Here's some examples of often-used Log4perl configuration files:
  
  =head2 Append to STDERR
  
      log4perl.category.Bar.Twix      = WARN, Screen
      log4perl.appender.Screen        = Log::Log4perl::Appender::Screen
      log4perl.appender.Screen.layout = \
          Log::Log4perl::Layout::PatternLayout
      log4perl.appender.Screen.layout.ConversionPattern = %d %m %n
  
  =head2 Append to STDOUT
  
      log4perl.category.Bar.Twix      = WARN, Screen
      log4perl.appender.Screen        = Log::Log4perl::Appender::Screen
      log4perl.appender.Screen.stderr = 0
      log4perl.appender.Screen.layout = \
          Log::Log4perl::Layout::PatternLayout
      log4perl.appender.Screen.layout.ConversionPattern = %d %m %n
  
  =head2 Append to a log file
  
      log4perl.logger.Bar.Twix = DEBUG, A1
      log4perl.appender.A1=Log::Log4perl::Appender::File
      log4perl.appender.A1.filename=test.log
      log4perl.appender.A1.mode=append
      log4perl.appender.A1.layout = \
          Log::Log4perl::Layout::PatternLayout
      log4perl.appender.A1.layout.ConversionPattern = %d %m %n
  
  Note that you could even leave out 
  
      log4perl.appender.A1.mode=append
  
  and still have the logger append to the logfile by default, although
  the C<Log::Log4perl::Appender::File> module does exactly the opposite.
  This is due to some nasty trickery C<Log::Log4perl> performs behind 
  the scenes to make sure that beginner's CGI applications don't clobber 
  the log file every time they're called.
  
  =head2 Write a log file from scratch
  
  If you loathe the Log::Log4perl's append-by-default strategy, you can
  certainly override it:
  
      log4perl.logger.Bar.Twix = DEBUG, A1
      log4perl.appender.A1=Log::Log4perl::Appender::File
      log4perl.appender.A1.filename=test.log
      log4perl.appender.A1.mode=write
      log4perl.appender.A1.layout=Log::Log4perl::Layout::SimpleLayout
  
  C<write> is the C<mode> that has C<Log::Log4perl::Appender::File>
  explicitly clobber the log file if it exists.
  
  =head2 Configuration files encoded in utf-8
  
  If your configuration file is encoded in utf-8 (which matters if you 
  e.g. specify utf8-encoded appender filenames in it), then you need to 
  tell Log4perl before running init():
  
      use Log::Log4perl::Config;
      Log::Log4perl::Config->utf( 1 );
  
      Log::Log4perl->init( ... );
  
  This makes sure Log4perl interprets utf8-encoded config files correctly.
  This setting might become the default at some point.
  
  =head1 SEE ALSO
  
  Log::Log4perl::Config::PropertyConfigurator
  
  Log::Log4perl::Config::DOMConfigurator
  
  Log::Log4perl::Config::LDAPConfigurator (coming soon!)
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_CONFIG

    $main::fatpacked{"Log/Log4perl/Config/BaseConfigurator.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_CONFIG_BASECONFIGURATOR';
  package Log::Log4perl::Config::BaseConfigurator;
  
  use warnings;
  use strict;
  use constant _INTERNAL_DEBUG => 0;
  
  *eval_if_perl      = \&Log::Log4perl::Config::eval_if_perl;
  *compile_if_perl   = \&Log::Log4perl::Config::compile_if_perl;
  *leaf_path_to_hash = \&Log::Log4perl::Config::leaf_path_to_hash;
  
  ################################################
  sub new {
  ################################################
      my($class, %options) = @_;
  
      my $self = { 
          utf8 => 0,
          %options,
      };
  
      bless $self, $class;
  
      $self->file($self->{file}) if exists $self->{file};
      $self->text($self->{text}) if exists $self->{text};
  
      return $self;
  }
  
  ################################################
  sub text {
  ################################################
      my($self, $text) = @_;
  
          # $text is an array of scalars (lines)
      if(defined $text) {
          if(ref $text eq "ARRAY") {
              $self->{text} = $text;
          } else {
              $self->{text} = [split "\n", $text];
          }
      }
  
      return $self->{text};
  }
  
  ################################################
  sub file {
  ################################################
      my($self, $filename) = @_;
  
      open my $fh, "$filename" or die "Cannot open $filename ($!)";
  
      if( $self->{ utf8 } ) {
          binmode $fh, ":utf8";
      }
  
      $self->file_h_read( $fh );
      close $fh;
  }
  
  ################################################
  sub file_h_read {
  ################################################
      my($self, $fh) = @_;
  
          # Dennis Gregorovic <dgregor@redhat.com> added this
          # to protect apps which are tinkering with $/ globally.
      local $/ = "\n";
  
      $self->{text} = [<$fh>];
  }
  
  ################################################
  sub parse {
  ################################################
      die __PACKAGE__ . "::parse() is a virtual method. " .
          "It must be implemented " .
          "in a derived class (currently: ", ref(shift), ")";
  }
  
  ################################################
  sub parse_post_process {
  ################################################
      my($self, $data, $leaf_paths) = @_;
      
      #   [
      #     'category',
      #     'value',
      #     'WARN, Logfile'
      #   ],
      #   [
      #     'appender',
      #     'Logfile',
      #     'value',
      #     'Log::Log4perl::Appender::File'
      #   ],
      #   [
      #     'appender',
      #     'Logfile',
      #     'filename',
      #     'value',
      #     'test.log'
      #   ],
      #   [
      #     'appender',
      #     'Logfile',
      #     'layout',
      #     'value',
      #     'Log::Log4perl::Layout::PatternLayout'
      #   ],
      #   [
      #     'appender',
      #     'Logfile',
      #     'layout',
      #     'ConversionPattern',
      #     'value',
      #     '%d %F{1} %L> %m %n'
      #   ]
  
      for my $path ( @{ Log::Log4perl::Config::leaf_paths( $data )} ) {
  
          print "path=@$path\n" if _INTERNAL_DEBUG;
  
          if(0) {
          } elsif( 
              $path->[0] eq "appender" and
              $path->[2] eq "trigger"
            ) {
              my $ref = leaf_path_to_hash( $path, $data );
              my $code = compile_if_perl( $$ref );
  
              if(_INTERNAL_DEBUG) {
                  if($code) {
                      print "Code compiled: $$ref\n";
                  } else {
                      print "Not compiled: $$ref\n";
                  }
              }
  
              $$ref = $code if defined $code;
          } elsif (
              $path->[0] eq "filter"
            ) {
              # do nothing
          } elsif (
              $path->[0] eq "appender" and
              $path->[2] eq "warp_message"
            ) {
              # do nothing
          } elsif (
              $path->[0] eq "appender" and
              $path->[3] eq "cspec" or
              $path->[1] eq "cspec"
            ) {
                # could be either
                #    appender appndr layout cspec
                # or 
                #    PatternLayout cspec U value ...
                #
              # do nothing
          } else {
              my $ref = leaf_path_to_hash( $path, $data );
  
              if(_INTERNAL_DEBUG) {
                  print "Calling eval_if_perl on $$ref\n";
              }
  
              $$ref = eval_if_perl( $$ref );
          }
      }
  
      return $data;
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Config::BaseConfigurator - Configurator Base Class
  
  =head1 SYNOPSIS
  
  This is a virtual base class, all configurators should be derived from it.
  
  =head1 DESCRIPTION
  
  =head2 METHODS
  
  =over 4
  
  =item C<< new >>
  
  Constructor, typically called like
  
      my $config_parser = SomeConfigParser->new(
          file => $file,
      );
  
      my $data = $config_parser->parse();
  
  Instead of C<file>, the derived class C<SomeConfigParser> may define any 
  type of configuration input medium (e.g. C<url =E<gt> 'http://foobar'>).
  It just has to make sure its C<parse()> method will later pull the input
  data from the medium specified.
  
  The base class accepts a filename or a reference to an array
  of text lines:
  
  =over 4
  
  =item C<< file >>
  
  Specifies a file which the C<parse()> method later parses.
  
  =item C<< text >>
  
  Specifies a reference to an array of scalars, representing configuration
  records (typically lines of a file). Also accepts a simple scalar, which it 
  splits at its newlines and transforms it into an array:
  
      my $config_parser = MyYAMLParser->new(
          text => ['foo: bar',
                   'baz: bam',
                  ],
      );
  
      my $data = $config_parser->parse();
  
  =back
  
  If either C<file> or C<text> parameters have been specified in the 
  constructor call, a later call to the configurator's C<text()> method
  will return a reference to an array of configuration text lines.
  This will typically be used by the C<parse()> method to process the 
  input.
  
  =item C<< parse >>
  
  Virtual method, needs to be defined by the derived class.
  
  =back
  
  =head2 Parser requirements
  
  =over 4
  
  =item *
  
  If the parser provides variable substitution functionality, it has
  to implement it.
  
  =item *
  
  The parser's C<parse()> method returns a reference to a hash of hashes (HoH). 
  The top-most hash contains the
  top-level keywords (C<category>, C<appender>) as keys, associated
  with values which are references to more deeply nested hashes.
  
  =item *
  
  The C<log4perl.> prefix (e.g. as used in the PropertyConfigurator class)
  is stripped, it's not part in the HoH structure.
  
  =item *
  
  Each Log4perl config value is indicated by the C<value> key, as in
  
      $data->{category}->{Bar}->{Twix}->{value} = "WARN, Logfile"
  
  =back
  
  =head2 EXAMPLES
  
  The following Log::Log4perl configuration:
  
      log4perl.category.Bar.Twix        = WARN, Screen
      log4perl.appender.Screen          = Log::Log4perl::Appender::File
      log4perl.appender.Screen.filename = test.log
      log4perl.appender.Screen.layout   = Log::Log4perl::Layout::SimpleLayout
  
  needs to be transformed by the parser's C<parse()> method 
  into this data structure:
  
      { appender => {
          Screen  => {
            layout => { 
              value  => "Log::Log4perl::Layout::SimpleLayout" },
              value  => "Log::Log4perl::Appender::Screen",
          },
        },
        category => { 
          Bar => { 
            Twix => { 
              value => "WARN, Screen" } 
          } }
      }
  
  For a full-fledged example, check out the sample YAML parser implementation 
  in C<eg/yamlparser>. It uses a simple YAML syntax to specify the Log4perl 
  configuration to illustrate the concept.
  
  =head1 SEE ALSO
  
  Log::Log4perl::Config::PropertyConfigurator
  
  Log::Log4perl::Config::DOMConfigurator
  
  Log::Log4perl::Config::LDAPConfigurator (tbd!)
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_CONFIG_BASECONFIGURATOR

    $main::fatpacked{"Log/Log4perl/Config/DOMConfigurator.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_CONFIG_DOMCONFIGURATOR';
  package Log::Log4perl::Config::DOMConfigurator;
  use Log::Log4perl::Config::BaseConfigurator;
  
  our @ISA = qw(Log::Log4perl::Config::BaseConfigurator);
  
  #todo
  # DONE(param-text) some params not attrs but values, like <sql>...</sql>
  # DONE see DEBUG!!!  below
  # NO, (really is only used for AsyncAppender) appender-ref in <appender>
  # DONE check multiple appenders in a category
  # DONE in Config.pm re URL loading, steal from XML::DOM
  # DONE, OK see PropConfigurator re importing unlog4j, eval_if_perl
  # NO (is specified in DTD) - need to handle 0/1, true/false?
  # DONE see Config, need to check version of XML::DOM
  # OK user defined levels? see parse_level
  # OK make sure 2nd test is using log4perl constructs, not log4j
  # OK handle new filter stuff
  # make sure sample code actually works
  # try removing namespace prefixes in the xml
  
  use XML::DOM;
  use Log::Log4perl::Level;
  use strict;
  
  use constant _INTERNAL_DEBUG => 0;
  
  our $VERSION = 0.03;
  
  our $APPENDER_TAG = qr/^((log4j|log4perl):)?appender$/;
  
  our $FILTER_TAG = qr/^(log4perl:)?filter$/;
  our $FILTER_REF_TAG = qr/^(log4perl:)?filter-ref$/;
  
  #can't use ValParser here because we're using namespaces? 
  #doesn't seem to work - kg 3/2003 
  our $PARSER_CLASS = 'XML::DOM::Parser';
  
  our $LOG4J_PREFIX = 'log4j';
  our $LOG4PERL_PREFIX = 'log4perl';
      
  
  #poor man's export
  *eval_if_perl = \&Log::Log4perl::Config::eval_if_perl;
  *unlog4j      = \&Log::Log4perl::Config::unlog4j;
  
  
  ###################################################
  sub parse {
  ###################################################
      my($self, $newtext) = @_;
  
      $self->text($newtext) if defined $newtext;
      my $text = $self->{text};
  
      my $parser = $PARSER_CLASS->new;
      my $doc = $parser->parse (join('',@$text));
  
  
      my $l4p_tree = {};
      
      my $config = $doc->getElementsByTagName("$LOG4J_PREFIX:configuration")->item(0)||
                   $doc->getElementsByTagName("$LOG4PERL_PREFIX:configuration")->item(0);
  
      my $threshold = uc(subst($config->getAttribute('threshold')));
      if ($threshold) {
          $l4p_tree->{threshold}{value} = $threshold;
      }
  
      if (subst($config->getAttribute('oneMessagePerAppender')) eq 'true') {
          $l4p_tree->{oneMessagePerAppender}{value} = 1;
      }
  
      for my $kid ($config->getChildNodes){
  
          next unless $kid->getNodeType == ELEMENT_NODE;
  
          my $tag_name = $kid->getTagName;
  
          if ($tag_name =~ $APPENDER_TAG) {
              &parse_appender($l4p_tree, $kid);
  
          }elsif ($tag_name eq 'category' || $tag_name eq 'logger'){
              &parse_category($l4p_tree, $kid);
              #Treating them the same is not entirely accurate, 
              #the dtd says 'logger' doesn't accept
              #a 'class' attribute while 'category' does.
              #But that's ok, log4perl doesn't do anything with that attribute
  
          }elsif ($tag_name eq 'root'){
              &parse_root($l4p_tree, $kid);
  
          }elsif ($tag_name =~ $FILTER_TAG){
              #parse log4perl's chainable boolean filters
              &parse_l4p_filter($l4p_tree, $kid);
  
          }elsif ($tag_name eq 'renderer'){
              warn "Log4perl: ignoring renderer tag in config, unimplemented";
              #"log4j will render the content of the log message according to 
              # user specified criteria. For example, if you frequently need 
              # to log Oranges, an object type used in your current project, 
              # then you can register an OrangeRenderer that will be invoked 
              # whenever an orange needs to be logged. "
           
          }elsif ($tag_name eq 'PatternLayout'){#log4perl only
              &parse_patternlayout($l4p_tree, $kid);
          }
      }
      $doc->dispose;
  
      return $l4p_tree;
  }
  
  #this is just for toplevel log4perl.PatternLayout tags
  #holding the custom cspecs
  sub parse_patternlayout {
      my ($l4p_tree, $node) = @_;
  
      my $l4p_branch = {};
  
      for my $child ($node->getChildNodes) {
          next unless $child->getNodeType == ELEMENT_NODE;
  
          my $name = subst($child->getAttribute('name'));
          my $value;
  
          foreach my $grandkid ($child->getChildNodes){
              if ($grandkid->getNodeType == TEXT_NODE) {
                  $value .= $grandkid->getData;
              }
          }
          $value =~ s/^ +//;  #just to make the unit tests pass
          $value =~ s/ +$//;
          $l4p_branch->{$name}{value} = subst($value);
      }
      $l4p_tree->{PatternLayout}{cspec} = $l4p_branch;
  }
  
  
  #for parsing the root logger, if any
  sub parse_root {
      my ($l4p_tree, $node) = @_;
  
      my $l4p_branch = {};
  
      &parse_children_of_logger_element($l4p_branch, $node);
  
      $l4p_tree->{category}{value} = $l4p_branch->{value};
  
  }
  
  
  #this parses a custom log4perl-specific filter set up under
  #the root element, as opposed to children of the appenders
  sub parse_l4p_filter {
      my ($l4p_tree, $node) = @_;
  
      my $l4p_branch = {};
  
      my $name = subst($node->getAttribute('name'));
  
      my $class = subst($node->getAttribute('class'));
      my $value = subst($node->getAttribute('value'));
  
      if ($class && $value) {
          die "Log4perl: only one of class or value allowed, not both, "
              ."in XMLConfig filter '$name'";
      }elsif ($class || $value){
          $l4p_branch->{value} = ($value || $class);
  
      }
  
      for my $child ($node->getChildNodes) {
  
          if ($child->getNodeType == ELEMENT_NODE){
  
              my $tag_name = $child->getTagName();
  
              if ($tag_name =~ /^(param|param-nested|param-text)$/) {
                  &parse_any_param($l4p_branch, $child);
              }
          }elsif ($child->getNodeType == TEXT_NODE){
              my $text = $child->getData;
              next unless $text =~ /\S/;
              if ($class && $value) {
                  die "Log4perl: only one of class, value or PCDATA allowed, "
                      ."in XMLConfig filter '$name'";
              }
              $l4p_branch->{value} .= subst($text); 
          }
      }
  
      $l4p_tree->{filter}{$name} = $l4p_branch;
  }
  
     
  #for parsing a category/logger element
  sub parse_category {
      my ($l4p_tree, $node) = @_;
  
      my $name = subst($node->getAttribute('name'));
  
      $l4p_tree->{category} ||= {};
   
      my $ptr = $l4p_tree->{category};
  
      for my $part (split /\.|::/, $name) {
          $ptr->{$part} = {} unless exists $ptr->{$part};
          $ptr = $ptr->{$part};
      }
  
      my $l4p_branch = $ptr;
  
      my $class = subst($node->getAttribute('class'));
      $class                       && 
         $class ne 'Log::Log4perl' &&
         $class ne 'org.apache.log4j.Logger' &&
         warn "setting category $name to class $class ignored, only Log::Log4perl implemented";
  
      #this is kind of funky, additivity has its own spot in the tree
      my $additivity = subst(subst($node->getAttribute('additivity')));
      if (length $additivity > 0) {
          $l4p_tree->{additivity} ||= {};
          my $add_ptr = $l4p_tree->{additivity};
  
          for my $part (split /\.|::/, $name) {
              $add_ptr->{$part} = {} unless exists $add_ptr->{$part};
              $add_ptr = $add_ptr->{$part};
          }
          $add_ptr->{value} = &parse_boolean($additivity);
      }
  
      &parse_children_of_logger_element($l4p_branch, $node);
  }
  
  # parses the children of a category element
  sub parse_children_of_logger_element {
      my ($l4p_branch, $node) = @_;
  
      my (@appenders, $priority);
  
      for my $child ($node->getChildNodes) {
          next unless $child->getNodeType == ELEMENT_NODE;
              
          my $tag_name = $child->getTagName();
  
          if ($tag_name eq 'param') {
              my $name = subst($child->getAttribute('name'));
              my $value = subst($child->getAttribute('value'));
              if ($value =~ /^(all|debug|info|warn|error|fatal|off|null)^/) {
                  $value = uc $value;
              }
              $l4p_branch->{$name} = {value => $value};
          
          }elsif ($tag_name eq 'appender-ref'){
              push @appenders, subst($child->getAttribute('ref'));
              
          }elsif ($tag_name eq 'level' || $tag_name eq 'priority'){
              $priority = &parse_level($child);
          }
      }
      $l4p_branch->{value} = $priority.', '.join(',', @appenders);
      
      return;
  }
  
  
  sub parse_level {
      my $node = shift;
  
      my $level = uc (subst($node->getAttribute('value')));
  
      die "Log4perl: invalid level in config: $level"
          unless Log::Log4perl::Level::is_valid($level);
  
      return $level;
  }
  
  
  
  sub parse_appender {
      my ($l4p_tree, $node) = @_;
  
      my $name = subst($node->getAttribute("name"));
  
      my $l4p_branch = {};
  
      my $class = subst($node->getAttribute("class"));
  
      $l4p_branch->{value} = $class;
  
      print "looking at $name----------------------\n"  if _INTERNAL_DEBUG;
  
      for my $child ($node->getChildNodes) {
          next unless $child->getNodeType == ELEMENT_NODE;
  
          my $tag_name = $child->getTagName();
  
          my $name = unlog4j(subst($child->getAttribute('name')));
  
          if ($tag_name =~ /^(param|param-nested|param-text)$/) {
  
              &parse_any_param($l4p_branch, $child);
  
              my $value;
  
          }elsif ($tag_name =~ /($LOG4PERL_PREFIX:)?layout/){
              $l4p_branch->{layout} = parse_layout($child);
  
          }elsif ($tag_name =~  $FILTER_TAG){
              $l4p_branch->{Filter} = parse_filter($child);
  
          }elsif ($tag_name =~ $FILTER_REF_TAG){
              $l4p_branch->{Filter} = parse_filter_ref($child);
  
          }elsif ($tag_name eq 'errorHandler'){
              die "errorHandlers not supported yet";
  
          }elsif ($tag_name eq 'appender-ref'){
              #dtd: Appenders may also reference (or include) other appenders. 
              #This feature in log4j is only for appenders who implement the 
              #AppenderAttachable interface, and the only one that does that
              #is the AsyncAppender, which writes logs in a separate thread.
              #I don't see the need to support this on the perl side any 
              #time soon.  --kg 3/2003
              die "Log4perl: in config file, <appender-ref> tag is unsupported in <appender>";
          }else{
              die "Log4perl: in config file, <$tag_name> is unsupported\n";
          }
      }
      $l4p_tree->{appender}{$name} = $l4p_branch;
  }
  
  sub parse_any_param {
      my ($l4p_branch, $child) = @_;
  
      my $tag_name = $child->getTagName();
      my $name = subst($child->getAttribute('name'));
      my $value;
  
      print "parse_any_param: <$tag_name name=$name\n" if _INTERNAL_DEBUG;
  
      #<param-nested>
      #note we don't set it to { value => $value }
      #and we don't test for multiple values
      if ($tag_name eq 'param-nested'){
          
          if ($l4p_branch->{$name}){
              die "Log4perl: in config file, multiple param-nested tags for $name not supported";
          }
          $l4p_branch->{$name} = &parse_param_nested($child); 
  
          return;
  
      #<param>
      }elsif ($tag_name eq 'param') {
  
           $value = subst($child->getAttribute('value'));
  
           print "parse_param_nested: got param $name = $value\n"  
               if _INTERNAL_DEBUG;
          
           if ($value =~ /^(all|debug|info|warn|error|fatal|off|null)$/) {
               $value = uc $value;
           }
  
           if ($name !~ /warp_message|filter/ &&
              $child->getParentNode->getAttribute('name') ne 'cspec') {
              $value = eval_if_perl($value);
           }
      #<param-text>
      }elsif ($tag_name eq 'param-text'){
  
          foreach my $grandkid ($child->getChildNodes){
              if ($grandkid->getNodeType == TEXT_NODE) {
                  $value .= $grandkid->getData;
              }
          }
          if ($name !~ /warp_message|filter/ &&
              $child->getParentNode->getAttribute('name') ne 'cspec') {
              $value = eval_if_perl($value);
          }
      }
  
      $value = subst($value);
  
       #multiple values for the same param name
       if (defined $l4p_branch->{$name}{value} ) {
           if (ref $l4p_branch->{$name}{value} ne 'ARRAY'){
               my $temp = $l4p_branch->{$name}{value};
               $l4p_branch->{$name}{value} = [$temp];
           }
           push @{$l4p_branch->{$name}{value}}, $value;
       }else{
           $l4p_branch->{$name} = {value => $value};
       }
  }
  
  #handles an appender's <param-nested> elements
  sub parse_param_nested {
      my ($node) = shift;
  
      my $l4p_branch = {};
  
      for my $child ($node->getChildNodes) {
          next unless $child->getNodeType == ELEMENT_NODE;
  
          my $tag_name = $child->getTagName();
  
          if ($tag_name =~ /^param|param-nested|param-text$/) {
              &parse_any_param($l4p_branch, $child);
          }
      }
  
      return $l4p_branch;
  }
  
  #this handles filters that are children of appenders, as opposed
  #to the custom filters that go under the root element
  sub parse_filter {
      my $node = shift;
  
      my $filter_tree = {};
  
      my $class_name = subst($node->getAttribute('class'));
  
      $filter_tree->{value} = $class_name;
  
      print "\tparsing filter on class $class_name\n"  if _INTERNAL_DEBUG;  
  
      for my $child ($node->getChildNodes) {
          next unless $child->getNodeType == ELEMENT_NODE;
  
          my $tag_name = $child->getTagName();
  
          if ($tag_name =~ 'param|param-nested|param-text') {
              &parse_any_param($filter_tree, $child);
          
          }else{
              die "Log4perl: don't know what to do with a ".$child->getTagName()
                  ."inside a filter element";
          }
      }
      return $filter_tree;
  }
  
  sub parse_filter_ref {
      my $node = shift;
  
      my $filter_tree = {};
  
      my $filter_id = subst($node->getAttribute('id'));
  
      $filter_tree->{value} = $filter_id;
  
      return $filter_tree;
  }
  
  
  
  sub parse_layout {
      my $node = shift;
  
      my $layout_tree = {};
  
      my $class_name = subst($node->getAttribute('class'));
      
      $layout_tree->{value} = $class_name;
      #
      print "\tparsing layout $class_name\n"  if _INTERNAL_DEBUG;  
      for my $child ($node->getChildNodes) {
          next unless $child->getNodeType == ELEMENT_NODE;
          if ($child->getTagName() eq 'param') {
              my $name = subst($child->getAttribute('name'));
              my $value = subst($child->getAttribute('value'));
              if ($value =~ /^(all|debug|info|warn|error|fatal|off|null)$/) {
                  $value = uc $value;
              }
              print "\tparse_layout: got param $name = $value\n"
                  if _INTERNAL_DEBUG;
              $layout_tree->{$name}{value} = $value;  
  
          }elsif ($child->getTagName() eq 'cspec') {
              my $name = subst($child->getAttribute('name'));
              my $value;
              foreach my $grandkid ($child->getChildNodes){
                  if ($grandkid->getNodeType == TEXT_NODE) {
                      $value .= $grandkid->getData;
                  }
              }
              $value =~ s/^ +//;
              $value =~ s/ +$//;
              $layout_tree->{cspec}{$name}{value} = subst($value);  
          }
      }
      return $layout_tree;
  }
  
  sub parse_boolean {
      my $a = shift;
  
      if ($a eq '0' || lc $a eq 'false') {
          return '0';
      }elsif ($a eq '1' || lc $a eq 'true'){
          return '1';
      }else{
          return $a; #probably an error, punt
      }
  }
  
  
  #this handles variable substitution
  sub subst {
      my $val = shift;
  
      $val =~ s/\$\{(.*?)}/
                        Log::Log4perl::Config::var_subst($1, {})/gex;
      return $val;
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Config::DOMConfigurator - reads xml config files
  
  =head1 SYNOPSIS
  
      --------------------------
      --using the log4j DTD--
      --------------------------
  
      <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
  
      <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  
      <appender name="FileAppndr1" class="org.apache.log4j.FileAppender">
          <layout class="Log::Log4perl::Layout::PatternLayout">
                  <param name="ConversionPattern"
                         value="%d %4r [%t] %-5p %c %t - %m%n"/>
          </layout>
          <param name="File" value="t/tmp/DOMtest"/>
          <param name="Append" value="false"/>
      </appender>
  
      <category name="a.b.c.d" additivity="false">
          <level value="warn"/>  <!-- note lowercase! -->
          <appender-ref ref="FileAppndr1"/>
      </category>
  
     <root>
          <priority value="warn"/>
          <appender-ref ref="FileAppndr1"/>
     </root>
  
     </log4j:configuration>
     
     
     
     --------------------------
     --using the log4perl DTD--
     --------------------------
     
     <?xml version="1.0" encoding="UTF-8"?>
      <!DOCTYPE log4perl:configuration SYSTEM "log4perl.dtd">
  
      <log4perl:configuration xmlns:log4perl="http://log4perl.sourceforge.net/"
          threshold="debug" oneMessagePerAppender="true">
  
      <log4perl:appender name="jabbender" class="Log::Dispatch::Jabber">
  
              <param-nested name="login">
                     <param name="hostname" value="a.jabber.server"/>
                     <param name="password" value="12345"/>
                     <param name="port"     value="5222"/>
                     <param name="resource" value="logger"/>
                     <param name="username" value="bobjones"/>
              </param-nested>
  
              <param name="to" value="bob@a.jabber.server"/>
  
              <param-text name="to">
                    mary@another.jabber.server
              </param-text>
  
              <log4perl:layout class="org.apache.log4j.PatternLayout">
                  <param name="ConversionPattern" value = "%K xx %G %U"/>
                  <cspec name="K">
                      sub { return sprintf "%1x", $$}
                  </cspec>
                  <cspec name="G">
                      sub {return 'thisistheGcspec'}
                  </cspec>
              </log4perl:layout>
      </log4perl:appender>
  
      <log4perl:appender name="DBAppndr2" class="Log::Log4perl::Appender::DBI">
                <param name="warp_message" value="0"/>
                <param name="datasource" value="DBI:CSV:f_dir=t/tmp"/>
                <param name="bufferSize" value="2"/>
                <param name="password" value="sub { $ENV{PWD} }"/>
                <param name="username" value="bobjones"/>
  
                <param-text name="sql">
                    INSERT INTO log4perltest
                              (loglevel, message, shortcaller, thingid,
                              category, pkg, runtime1, runtime2)
                    VALUES
                               (?,?,?,?,?,?,?,?)
                </param-text>
  
                 <param-nested name="params">
                      <param name="1" value="%p"/>
                      <param name="3" value="%5.5l"/>
                      <param name="5" value="%c"/>
                      <param name="6" value="%C"/>
                 </param-nested>
  
                 <layout class="Log::Log4perl::Layout::NoopLayout"/>
      </log4perl:appender>
  
      <category name="animal.dog">
                 <priority value="info"/>
                 <appender-ref ref="jabbender"/>
                 <appender-ref ref="DBAppndr2"/>
      </category>
  
      <category name="plant">
              <priority value="debug"/>
              <appender-ref ref="DBAppndr2"/>
      </category>
  
      <PatternLayout>
          <cspec name="U"><![CDATA[
              sub {
                  return "UID $< GID $(";
              }
          ]]></cspec>
      </PatternLayout>
  
      </log4perl:configuration>
      
  
  
  
  =head1 DESCRIPTION
  
  This module implements an XML config, complementing the properties-style
  config described elsewhere.
  
  =head1 WHY
  
  "Why would I want my config in XML?" you ask.  Well, there are a couple
  reasons you might want to.  Maybe you have a personal preference
  for XML.  Maybe you manage your config with other tools that have an
  affinity for XML, like XML-aware editors or automated config
  generators.  Or maybe (and this is the big one) you don't like
  having to run your application just to check the syntax of your
  config file.
  
  By using an XML config and referencing a DTD, you can use a namespace-aware
  validating parser to see if your XML config at least follows the rules set 
  in the DTD. 
  
  =head1 HOW
  
  To reference a DTD, drop this in after the <?xml...> declaration
  in your config file:
  
      <!DOCTYPE log4perl:configuration SYSTEM "log4perl.dtd">
  
  That tells the parser to validate your config against the DTD in
  "log4perl.dtd", which is available in the xml/ directory of
  the log4perl distribution.  Note that you'll also need to grab
  the log4j-1.2.dtd from there as well, since the it's included
  by log4perl.dtd.
  
  Namespace-aware validating parsers are not the norm in Perl.  
  But the Xerces project 
  (http://xml.apache.org/xerces-c/index.html --lots of binaries available, 
  even rpm's)  does provide just such a parser
  that you can use like this:
  
      StdInParse -ns -v < my-log4perl-config.xml
  
  This module itself does not use a validating parser, the obvious
  one XML::DOM::ValParser doesn't seem to handle namespaces.
  
  =head1 WHY TWO DTDs
  
  The log4j DTD is from the log4j project, they designed it to 
  handle their needs.  log4perl has added some extensions to the 
  original log4j functionality which needed some extensions to the
  log4j DTD.  If you aren't using these features then you can validate
  your config against the log4j dtd and know that you're using
  unadulterated log4j config tags.   
  
  The features added by the log4perl dtd are:
  
  =over 4
  
  =item 1 oneMessagePerAppender global setting
  
      log4perl.oneMessagePerAppender=1
  
  =item 2 globally defined user conversion specifiers
  
      log4perl.PatternLayout.cspec.G=sub { return "UID $< GID $("; }
  
  =item 3 appender-local custom conversion specifiers
  
       log4j.appender.appndr1.layout.cspec.K = sub {return sprintf "%1x", $$ }
  
  =item 4 nested options
  
       log4j.appender.jabbender          = Log::Dispatch::Jabber
       #(note how these are nested under 'login')
       log4j.appender.jabbender.login.hostname = a.jabber.server
       log4j.appender.jabbender.login.port     = 5222
       log4j.appender.jabbender.login.username = bobjones
  
  =item 5 the log4perl-specific filters, see L<Log::Log4perl::Filter>,
  lots of examples in t/044XML-Filter.t, here's a short one:
  
  
    <?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE log4perl:configuration SYSTEM "log4perl.dtd">
  
    <log4perl:configuration xmlns:log4perl="http://log4perl.sourceforge.net/">
     
    <appender name="A1" class="Log::Log4perl::Appender::TestBuffer">
          <layout class="Log::Log4perl::Layout::SimpleLayout"/>
          <filter class="Log::Log4perl::Filter::Boolean">
              <param name="logic" value="!Match3 &amp;&amp; (Match1 || Match2)"/> 
          </filter>
    </appender>   
    
    <appender name="A2" class="Log::Log4perl::Appender::TestBuffer">
          <layout class="Log::Log4perl::Layout::SimpleLayout"/>
          <filter-ref id="Match1"/>
    </appender>   
    
    <log4perl:filter name="Match1" value="sub { /let this through/ }" />
    
    <log4perl:filter name="Match2">
          sub { 
              /and that, too/ 
          }
     </log4perl:filter>
    
    <log4perl:filter name="Match3" class="Log::Log4perl::Filter::StringMatch">
      <param name="StringToMatch" value="suppress"/>
      <param name="AcceptOnMatch" value="true"/>
    </log4perl:filter>
    
    <log4perl:filter name="MyBoolean" class="Log::Log4perl::Filter::Boolean">
      <param name="logic" value="!Match3 &amp;&amp; (Match1 || Match2)"/>
    </log4perl:filter>
    
     
     <root>
             <priority value="info"/>
             <appender-ref ref="A1"/>
     </root>
     
     </log4perl:configuration>
  
  
  =back
  
  
  So we needed to extend the log4j dtd to cover these additions.
  Now I could have just taken a 'steal this code' approach and mixed
  parts of the log4j dtd into a log4perl dtd, but that would be
  cut-n-paste programming.  So I've used namespaces and
  
  =over 4
  
  =item * 
  
  replaced three elements:
  
  =over 4
  
  =item <log4perl:configuration>
  
  handles #1) and accepts <PatternLayout>
  
  =item <log4perl:appender> 
  
  accepts <param-nested> and <param-text>
  
  =item <log4perl:layout> 
  
  accepts custom cspecs for #3)
  
  =back
  
  =item * 
  
  added a <param-nested> element (complementing the <param> element)
      to handle #4)
  
  =item * 
  
  added a root <PatternLayout> element to handle #2)
  
  =item * 
  
  added <param-text> which lets you put things like perl code
      into escaped CDATA between the tags, so you don't have to worry
      about escaping characters and quotes
  
  =item * 
  
  added <cspec>
  
  =back
  
  See the examples up in the L<"SYNOPSIS"> for how all that gets used.
  
  =head1 WHY NAMESPACES
  
  I liked the idea of using the log4j DTD I<in situ>, so I used namespaces
  to extend it.  If you really don't like having to type <log4perl:appender>
  instead of just <appender>, you can make your own DTD combining
  the two DTDs and getting rid of the namespace prefixes.  Then you can
  validate against that, and log4perl should accept it just fine.
  
  =head1 VARIABLE SUBSTITUTION
  
  This supports variable substitution like C<${foobar}> in text and in 
  attribute values except for appender-ref.  If an environment variable is defined
  for that name, its value is substituted. So you can do stuff like
  
          <param name="${hostname}" value="${hostnameval}.foo.com"/>
          <param-text name="to">${currentsysadmin}@foo.com</param-text>
  
  
  =head1 REQUIRES
  
  To use this module you need XML::DOM installed.  
  
  To use the log4perl.dtd, you'll have to reference it in your XML config,
  and you'll also need to note that log4perl.dtd references the 
  log4j dtd as "log4j-1.2.dtd", so your validator needs to be able
  to find that file as well.  If you don't like having to schlep two
  files around, feel free
  to dump the contents of "log4j-1.2.dtd" into your "log4perl.dtd" file.
  
  =head1 CAVEATS
  
  You can't mix a multiple param-nesteds with the same name, I'm going to
  leave that for now, there's presently no need for a list of structs
  in the config.
  
  =head1 CHANGES
  
  0.03 2/26/2003 Added support for log4perl extensions to the log4j dtd
  
  =head1 SEE ALSO
  
  t/038XML-DOM1.t, t/039XML-DOM2.t for examples
  
  xml/log4perl.dtd, xml/log4j-1.2.dtd
  
  Log::Log4perl::Config
  
  Log::Log4perl::Config::PropertyConfigurator
  
  Log::Log4perl::Config::LDAPConfigurator (coming soon!)
  
  The code is brazenly modeled on log4j's DOMConfigurator class, (by 
  Christopher Taylor, Ceki Gülcü, and Anders Kristensen) and any
  perceived similarity is not coincidental.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_CONFIG_DOMCONFIGURATOR

    $main::fatpacked{"Log/Log4perl/Config/PropertyConfigurator.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_CONFIG_PROPERTYCONFIGURATOR';
  package Log::Log4perl::Config::PropertyConfigurator;
  use Log::Log4perl::Config::BaseConfigurator;
  
  use warnings;
  use strict;
  
  our @ISA = qw(Log::Log4perl::Config::BaseConfigurator);
  
  our %NOT_A_MULT_VALUE = map { $_ => 1 }
      qw(conversionpattern);
  
  #poor man's export
  *eval_if_perl = \&Log::Log4perl::Config::eval_if_perl;
  *compile_if_perl = \&Log::Log4perl::Config::compile_if_perl;
  *unlog4j      = \&Log::Log4perl::Config::unlog4j;
  
  use constant _INTERNAL_DEBUG => 0;
  
  our $COMMENT_REGEX = qr/[#;!]/;
  
  ################################################
  sub parse {
  ################################################
      my($self, $newtext) = @_;
  
      $self->text($newtext) if defined $newtext;
  
      my $text = $self->{text};
  
      die "Config parser has nothing to parse" unless defined $text;
  
      my $data = {};
      my %var_subst = ();
  
      while (@$text) {
          local $_ = shift @$text;
          s/^\s*$COMMENT_REGEX.*//;
          next unless /\S/;
      
          my @parts = ();
  
          while (/(.+?)\\\s*$/) {
              my $prev = $1;
              my $next = shift(@$text);
              $next =~ s/^ +//g;  #leading spaces
              $next =~ s/^$COMMENT_REGEX.*//;
              $_ = $prev. $next;
              chomp;
          }
  
          if(my($key, $val) = /(\S+?)\s*=\s*(.*)/) {
  
              my $key_org = $key;
  
              $val =~ s/\s+$//;
  
                  # Everything could potentially be a variable assignment
              $var_subst{$key} = $val;
  
                  # Substitute any variables
              $val =~ s/\$\{(.*?)\}/
                        Log::Log4perl::Config::var_subst($1, \%var_subst)/gex;
  
              $key = unlog4j($key);
  
              my $how_deep = 0;
              my $ptr = $data;
              for my $part (split /\.|::/, $key) {
                  push @parts, $part;
                  $ptr->{$part} = {} unless exists $ptr->{$part};
                  $ptr = $ptr->{$part};
                  ++$how_deep;
              }
  
              #here's where we deal with turning multiple values like this:
              # log4j.appender.jabbender.to = him@a.jabber.server
              # log4j.appender.jabbender.to = her@a.jabber.server
              #into an arrayref like this:
              #to => { value => 
              #       ["him\@a.jabber.server", "her\@a.jabber.server"] },
              # 
              # This only is allowed for properties of appenders
              # not listed in %NOT_A_MULT_VALUE (see top of file).
              if (exists $ptr->{value} && 
                  $how_deep > 2 &&
                  defined $parts[0] && lc($parts[0]) eq "appender" && 
                  defined $parts[2] && ! exists $NOT_A_MULT_VALUE{lc($parts[2])}
                 ) {
                  if (ref ($ptr->{value}) ne 'ARRAY') {
                      my $temp = $ptr->{value};
                      $ptr->{value} = [];
                      push (@{$ptr->{value}}, $temp);
                  }
                  push (@{$ptr->{value}}, $val);
              }else{
                  if(defined $ptr->{value}) {
                      if(! $Log::Log4perl::Logger::NO_STRICT) {
                          die "$key_org redefined";
                      }
                  }
                  $ptr->{value} = $val;
              }
          }
      }
      $self->{data} = $data;
      return $data;
  }
  
  ################################################
  sub value {
  ################################################
    my($self, $path) = @_;
  
    $path = unlog4j($path);
  
    my @p = split /::/, $path;
  
    my $found = 0;
    my $r = $self->{data};
  
    while (my $n = shift @p) {
        if (exists $r->{$n}) {
            $r = $r->{$n};
            $found = 1;
        } else {
            $found = 0;
        }
    }
  
    if($found and exists $r->{value}) {
        return $r->{value};
    } else {
        return undef;
    }
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Config::PropertyConfigurator - reads properties file
  
  =head1 SYNOPSIS
  
      # This class is used internally by Log::Log4perl
  
      use Log::Log4perl::Config::PropertyConfigurator;
  
      my $conf = Log::Log4perl::Config::PropertyConfigurator->new();
      $conf->file("l4p.conf");
      $conf->parse(); # will die() on error
  
      my $value = $conf->value("log4perl.appender.LOGFILE.filename");
     
      if(defined $value) {
          printf("The appender's file name is $value\n");
      } else {
          printf("The appender's file name is not defined.\n");
      }
  
  =head1 DESCRIPTION
  
  Initializes log4perl from a properties file, stuff like
  
      log4j.category.a.b.c.d = WARN, A1
      log4j.category.a.b = INFO, A1
  
  It also understands variable substitution, the following
  configuration is equivalent to the previous one:
  
      settings = WARN, A1
      log4j.category.a.b.c.d = ${settings}
      log4j.category.a.b = INFO, A1
  
  =head1 SEE ALSO
  
  Log::Log4perl::Config
  
  Log::Log4perl::Config::BaseConfigurator
  
  Log::Log4perl::Config::DOMConfigurator
  
  Log::Log4perl::Config::LDAPConfigurator (tbd!)
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_CONFIG_PROPERTYCONFIGURATOR

    $main::fatpacked{"Log/Log4perl/Config/Watch.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_CONFIG_WATCH';
  package Log::Log4perl::Config::Watch;
  
  use constant _INTERNAL_DEBUG => 0;
  
  our $NEXT_CHECK_TIME;
  our $SIGNAL_CAUGHT;
  
  our $L4P_TEST_CHANGE_DETECTED;
  our $L4P_TEST_CHANGE_CHECKED;
  
  ###########################################
  sub new {
  ###########################################
      my($class, %options) = @_;
  
      my $self = { file            => "",
                   check_interval  => 30,
                   l4p_internal    => 0,
                   signal          => undef,
                   %options,
                   _last_checked_at => 0,
                   _last_timestamp  => 0,
                 };
  
      bless $self, $class;
  
      if($self->{signal}) {
              # We're in signal mode, set up the handler
          print "Setting up signal handler for '$self->{signal}'\n" if
              _INTERNAL_DEBUG;
  
          # save old signal handlers; they belong to other appenders or
          # possibly something else in the consuming application
          my $old_sig_handler = $SIG{$self->{signal}};
          $SIG{$self->{signal}} = sub { 
              print "Caught $self->{signal} signal\n" if _INTERNAL_DEBUG;
              $self->force_next_check();
              $old_sig_handler->(@_) if $old_sig_handler and ref $old_sig_handler eq 'CODE';
          };
              # Reset the marker. The handler is going to modify it.
          $self->{signal_caught} = 0;
          $SIGNAL_CAUGHT = 0 if $self->{l4p_internal};
      } else {
              # Just called to initialize
          $self->change_detected(undef, 1);
          $self->file_has_moved(undef, 1);
      }
  
      return $self;
  }
  
  ###########################################
  sub force_next_check {
  ###########################################
      my($self) = @_;
  
      $self->{signal_caught}   = 1;
      $self->{next_check_time} = 0;
  
      if( $self->{l4p_internal} ) {
          $SIGNAL_CAUGHT = 1;
          $NEXT_CHECK_TIME = 0;
      }
  }
  
  ###########################################
  sub force_next_check_reset {
  ###########################################
      my($self) = @_;
  
      $self->{signal_caught} = 0;
      $SIGNAL_CAUGHT = 0 if $self->{l4p_internal};
  }
  
  ###########################################
  sub file {
  ###########################################
      my($self) = @_;
  
      return $self->{file};
  }
  
  ###########################################
  sub signal {
  ###########################################
      my($self) = @_;
  
      return $self->{signal};
  }
  
  ###########################################
  sub check_interval {
  ###########################################
      my($self) = @_;
  
      return $self->{check_interval};
  }
  
  ###########################################
  sub file_has_moved {
  ###########################################
      my($self, $time, $force) = @_;
  
      my $task = sub {
          my @stat = stat($self->{file});
  
          my $has_moved = 0;
  
          if(! $stat[0]) {
              # The file's gone, obviously it got moved or deleted.
              print "File is gone\n" if _INTERNAL_DEBUG;
              return 1;
          }
  
          my $current_inode = "$stat[0]:$stat[1]";
          print "Current inode: $current_inode\n" if _INTERNAL_DEBUG;
  
          if(exists $self->{_file_inode} and 
              $self->{_file_inode} ne $current_inode) {
              print "Inode changed from $self->{_file_inode} to ",
                    "$current_inode\n" if _INTERNAL_DEBUG;
              $has_moved = 1;
          }
  
          $self->{_file_inode} = $current_inode;
          return $has_moved;
      };
  
      return $self->check($time, $task, $force);
  }
  
  ###########################################
  sub change_detected {
  ###########################################
      my($self, $time, $force) = @_;
  
      my $task = sub {
          my @stat = stat($self->{file});
          my $new_timestamp = $stat[9];
  
          $L4P_TEST_CHANGE_CHECKED = 1;
  
          if(! defined $new_timestamp) {
              if($self->{l4p_internal}) {
                  # The file is gone? Let it slide, we don't want L4p to re-read
                  # the config now, it's gonna die.
                  return undef;
              }
              $L4P_TEST_CHANGE_DETECTED = 1;
              return 1;
          }
  
          if($new_timestamp > $self->{_last_timestamp}) {
              $self->{_last_timestamp} = $new_timestamp;
              print "Change detected (file=$self->{file} store=$new_timestamp)\n"
                    if _INTERNAL_DEBUG;
              $L4P_TEST_CHANGE_DETECTED = 1;
              return 1; # Has changed
          }
             
          print "$self->{file} unchanged (file=$new_timestamp ",
                "stored=$self->{_last_timestamp})!\n" if _INTERNAL_DEBUG;
          return "";  # Hasn't changed
      };
  
      return $self->check($time, $task, $force);
  }
  
  ###########################################
  sub check {
  ###########################################
      my($self, $time, $task, $force) = @_;
  
      $time = time() unless defined $time;
  
      if( $self->{signal_caught} or $SIGNAL_CAUGHT ) {
         $force = 1;
         $self->force_next_check_reset();
         print "Caught signal, forcing check\n" if _INTERNAL_DEBUG;
  
      }
  
      print "Soft check (file=$self->{file} time=$time)\n" if _INTERNAL_DEBUG;
  
          # Do we need to check?
      if(!$force and
         $self->{_last_checked_at} + 
         $self->{check_interval} > $time) {
          print "No need to check\n" if _INTERNAL_DEBUG;
          return ""; # don't need to check, return false
      }
         
      $self->{_last_checked_at} = $time;
  
      # Set global var for optimizations in case we just have one watcher
      # (like in Log::Log4perl)
      $self->{next_check_time} = $time + $self->{check_interval};
      $NEXT_CHECK_TIME = $self->{next_check_time} if $self->{l4p_internal};
  
      print "Hard check (file=$self->{file} time=$time)\n" if _INTERNAL_DEBUG;
      return $task->($time);
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Config::Watch - Detect file changes
  
  =head1 SYNOPSIS
  
      use Log::Log4perl::Config::Watch;
  
      my $watcher = Log::Log4perl::Config::Watch->new(
                            file            => "/data/my.conf",
                            check_interval  => 30,
                    );
  
      while(1) {
          if($watcher->change_detected()) {
              print "Change detected!\n";
          }
          sleep(1);
      }
  
  =head1 DESCRIPTION
  
  This module helps detecting changes in files. Although it comes with the
  C<Log::Log4perl> distribution, it can be used independently.
  
  The constructor defines the file to be watched and the check interval 
  in seconds. Subsequent calls to C<change_detected()> will 
  
  =over 4
  
  =item *
  
  return a false value immediately without doing physical file checks
  if C<check_interval> hasn't elapsed.
  
  =item *
  
  perform a physical test on the specified file if the number
  of seconds specified in C<check_interval> 
  have elapsed since the last physical check. If the file's modification
  date has changed since the last physical check, it will return a true 
  value, otherwise a false value is returned.
  
  =back
  
  Bottom line: C<check_interval> allows you to call the function
  C<change_detected()> as often as you like, without paying the performing
  a significant performance penalty because file system operations 
  are being performed (however, you pay the price of not knowing about
  file changes until C<check_interval> seconds have elapsed).
  
  The module clearly distinguishes system time from file system time. 
  If your (e.g. NFS mounted) file system is off by a constant amount
  of time compared to the executing computer's clock, it'll just
  work fine.
  
  To disable the resource-saving delay feature, just set C<check_interval> 
  to 0 and C<change_detected()> will run a physical file test on
  every call.
  
  If you already have the current time available, you can pass it
  on to C<change_detected()> as an optional parameter, like in
  
      change_detected($time)
  
  which then won't trigger a call to C<time()>, but use the value
  provided.
  
  =head2 SIGNAL MODE
  
  Instead of polling time and file changes, C<new()> can be instructed 
  to set up a signal handler. If you call the constructor like
  
      my $watcher = Log::Log4perl::Config::Watch->new(
                            file    => "/data/my.conf",
                            signal  => 'HUP'
                    );
  
  then a signal handler will be installed, setting the object's variable 
  C<$self-E<gt>{signal_caught}> to a true value when the signal arrives.
  Comes with all the problems that signal handlers go along with.
  
  =head2 TRIGGER CHECKS
  
  To trigger a physical file check on the next call to C<change_detected()>
  regardless if C<check_interval> has expired or not, call
  
      $watcher->force_next_check();
  
  on the watcher object.
  
  =head2 DETECT MOVED FILES
  
  The watcher can also be used to detect files that have moved. It will 
  not only detect if a watched file has disappeared, but also if it has
  been replaced by a new file in the meantime.
  
      my $watcher = Log::Log4perl::Config::Watch->new(
          file           => "/data/my.conf",
          check_interval => 30,
      );
  
      while(1) {
          if($watcher->file_has_moved()) {
              print "File has moved!\n";
          }
          sleep(1);
      }
  
  The parameters C<check_interval> and C<signal> limit the number of physical 
  file system checks, similarily as with C<change_detected()>.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_CONFIG_WATCH

    $main::fatpacked{"Log/Log4perl/DateFormat.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_DATEFORMAT';
  ###########################################
  package Log::Log4perl::DateFormat;
  ###########################################
  use warnings;
  use strict;
  
  use Carp qw( croak );
  
  our $GMTIME = 0;
  
  my @MONTH_NAMES = qw(
  January February March April May June July
  August September October November December);
  
  my @WEEK_DAYS = qw(
  Sunday Monday Tuesday Wednesday Thursday Friday Saturday);
  
  ###########################################
  sub new {
  ###########################################
      my($class, $format) = @_;
  
      my $self = { 
                    stack => [],
                    fmt   => undef,
                 };
  
      bless $self, $class;
  
          # Predefined formats
      if($format eq "ABSOLUTE") {
          $format = "HH:mm:ss,SSS";
      } elsif($format eq "DATE") {
          $format = "dd MMM yyyy HH:mm:ss,SSS";
      } elsif($format eq "ISO8601") {
          $format = "yyyy-MM-dd HH:mm:ss,SSS";
      } elsif($format eq "APACHE") {
          $format = "[EEE MMM dd HH:mm:ss yyyy]";
      }
  
      if($format) { 
          $self->prepare($format);
      }
  
      return $self;
  }
  
  ###########################################
  sub prepare {
  ###########################################
      my($self, $format) = @_;
  
      # the actual DateTime spec allows for literal text delimited by
      # single quotes; a single quote can be embedded in the literal
      # text by using two single quotes.
      #
      # my strategy here is to split the format into active and literal
      # "chunks"; active chunks are prepared using $self->rep() as
      # before, while literal chunks get transformed to accommodate
      # single quotes and to protect percent signs.
      #
      # motivation: the "recommended" ISO-8601 date spec for a time in
      # UTC is actually:
      #
      #     YYYY-mm-dd'T'hh:mm:ss.SSS'Z'
  
      my $fmt = "";
  
      foreach my $chunk ( split /('(?:''|[^'])*')/, $format ) {
          if ( $chunk =~ /\A'(.*)'\z/ ) {
                # literal text
              my $literal = $1;
              $literal =~ s/''/'/g;
              $literal =~ s/\%/\%\%/g;
              $fmt .= $literal;
          } elsif ( $chunk =~ /'/ ) {
                # single quotes should always be in a literal
              croak "bad date format \"$format\": " .
                    "unmatched single quote in chunk \"$chunk\"";
          } else {
              # handle active chunks just like before
              $chunk =~ s/(([GyMdhHmsSEeDFwWakKzZ])\2*)/$self->rep($1)/ge;
              $fmt .= $chunk;
          }
      }
  
      return $self->{fmt} = $fmt;
  }
  
  ###########################################
  sub rep {
  ###########################################
      my ($self, $string) = @_;
  
      my $first = substr $string, 0, 1;
      my $len   = length $string;
  
      my $time=time();
      my @g = gmtime($time);
      my @t = localtime($time);
      my $z = $t[1]-$g[1]+($t[2]-$g[2])*60+($t[7]-$g[7])*1440+
              ($t[5]-$g[5])*(525600+(abs($t[7]-$g[7])>364)*1440);
      my $offset = sprintf("%+.2d%.2d", $z/60, "00");
  
      #my ($s,$mi,$h,$d,$mo,$y,$wd,$yd,$dst) = localtime($time);
  
      # Here's how this works:
      # Detect what kind of parameter we're dealing with and determine
      # what type of sprintf-placeholder to return (%d, %02d, %s or whatever).
      # Then, we're setting up an array, specific to the current format,
      # that can be used later on to compute the components of the placeholders
      # one by one when we get the components of the current time later on
      # via localtime.
      
      # So, we're parsing the "yyyy/MM" format once, replace it by, say
      # "%04d:%02d" and store an array that says "for the first placeholder,
      # get the localtime-parameter on index #5 (which is years since the
      # epoch), add 1900 to it and pass it on to sprintf(). For the 2nd 
      # placeholder, get the localtime component at index #2 (which is hours)
      # and pass it on unmodified to sprintf.
      
      # So, the array to compute the time format at logtime contains
      # as many elements as the original SimpleDateFormat contained. Each
      # entry is a array ref, holding an array with 2 elements: The index
      # into the localtime to obtain the value and a reference to a subroutine
      # to do computations eventually. The subroutine expects the original
      # localtime() time component (like year since the epoch) and returns
      # the desired value for sprintf (like y+1900).
  
      # This way, we're parsing the original format only once (during system
      # startup) and during runtime all we do is call localtime *once* and
      # run a number of blazingly fast computations, according to the number
      # of placeholders in the format.
  
  ###########
  #G - epoch#
  ###########
      if($first eq "G") {
          # Always constant
          return "AD";
  
  ###################
  #e - epoch seconds#
  ###################
      } elsif($first eq "e") {
            # index (0) irrelevant, but we return time() which 
            # comes in as 2nd parameter
          push @{$self->{stack}}, [0, sub { return $_[1] }];
          return "%d";
  
  ##########
  #y - year#
  ##########
      } elsif($first eq "y") {
          if($len >= 4) {
              # 4-digit year
              push @{$self->{stack}}, [5, sub { return $_[0] + 1900 }];
              return "%04d";
          } else {
              # 2-digit year
              push @{$self->{stack}}, [5, sub { $_[0] % 100 }];
              return "%02d";
          }
  
  ###########
  #M - month#
  ###########
      } elsif($first eq "M") {
          if($len >= 3) {
              # Use month name
              push @{$self->{stack}}, [4, sub { return $MONTH_NAMES[$_[0]] }];
             if($len >= 4) {
                  return "%s";
              } else {
                 return "%.3s";
              }
          } elsif($len == 2) {
              # Use zero-padded month number
              push @{$self->{stack}}, [4, sub { $_[0]+1 }];
              return "%02d";
          } else {
              # Use zero-padded month number
              push @{$self->{stack}}, [4, sub { $_[0]+1 }];
              return "%d";
          }
  
  ##################
  #d - day of month#
  ##################
      } elsif($first eq "d") {
          push @{$self->{stack}}, [3, sub { return $_[0] }];
          return "%0" . $len . "d";
  
  ##################
  #h - am/pm hour#
  ##################
      } elsif($first eq "h") {
          push @{$self->{stack}}, [2, sub { ($_[0] % 12) || 12 }];
          return "%0" . $len . "d";
  
  ##################
  #H - 24 hour#
  ##################
      } elsif($first eq "H") {
          push @{$self->{stack}}, [2, sub { return $_[0] }];
          return "%0" . $len . "d";
  
  ##################
  #m - minute#
  ##################
      } elsif($first eq "m") {
          push @{$self->{stack}}, [1, sub { return $_[0] }];
          return "%0" . $len . "d";
  
  ##################
  #s - second#
  ##################
      } elsif($first eq "s") {
          push @{$self->{stack}}, [0, sub { return $_[0] }];
          return "%0" . $len . "d";
  
  ##################
  #E - day of week #
  ##################
      } elsif($first eq "E") {
          push @{$self->{stack}}, [6, sub { $WEEK_DAYS[$_[0]] }];
         if($len >= 4) {
              return "%${len}s";
          } else {
             return "%.3s";
          }
  
  ######################
  #D - day of the year #
  ######################
      } elsif($first eq "D") {
          push @{$self->{stack}}, [7, sub { $_[0] + 1}];
          return "%0" . $len . "d";
  
  ######################
  #a - am/pm marker    #
  ######################
      } elsif($first eq "a") {
          push @{$self->{stack}}, [2, sub { $_[0] < 12 ? "AM" : "PM" }];
          return "%${len}s";
  
  ######################
  #S - milliseconds    #
  ######################
      } elsif($first eq "S") {
          push @{$self->{stack}}, 
               [9, sub { substr sprintf("%06d", $_[0]), 0, $len }];
          return "%s";
  
  ###############################
  #Z - RFC 822 time zone  -0800 #
  ###############################
      } elsif($first eq "Z") {
          push @{$self->{stack}}, [10, sub { $offset }];
          return "%s";
  
  #############################
  #Something that's not defined
  #(F=day of week in month
  # w=week in year W=week in month
  # k=hour in day K=hour in am/pm
  # z=timezone
  #############################
      } else {
          return "-- '$first' not (yet) implemented --";
      }
  
      return $string;
  }
  
  ###########################################
  sub format {
  ###########################################
      my($self, $secs, $msecs) = @_;
  
      $msecs = 0 unless defined $msecs;
  
      my @time; 
  
      if($GMTIME) {
          @time = gmtime($secs);
      } else {
          @time = localtime($secs);
      }
  
          # add milliseconds
      push @time, $msecs;
  
      my @values = ();
  
      for(@{$self->{stack}}) {
          my($val, $code) = @$_;
          if($code) {
              push @values, $code->($time[$val], $secs);
          } else {
              push @values, $time[$val];
          }
      }
  
      return sprintf($self->{fmt}, @values);
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::DateFormat - Log4perl advanced date formatter helper class
  
  =head1 SYNOPSIS
  
      use Log::Log4perl::DateFormat;
  
      my $format = Log::Log4perl::DateFormat->new("HH:mm:ss,SSS");
  
      # Simple time, resolution in seconds
      my $time = time();
      print $format->format($time), "\n";
          # => "17:02:39,000"
  
      # Advanced time, resultion in milliseconds
      use Time::HiRes;
      my ($secs, $msecs) = Time::HiRes::gettimeofday();
      print $format->format($secs, $msecs), "\n";
          # => "17:02:39,959"
  
  =head1 DESCRIPTION
  
  C<Log::Log4perl::DateFormat> is a low-level helper class for the 
  advanced date formatting functions in C<Log::Log4perl::Layout::PatternLayout>.
  
  Unless you're writing your own Layout class like
  L<Log::Log4perl::Layout::PatternLayout>, there's probably not much use
  for you to read this.
  
  C<Log::Log4perl::DateFormat> is a formatter which allows dates to be
  formatted according to the log4j spec on
  
      http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html
  
  which allows the following placeholders to be recognized and processed:
  
      Symbol Meaning              Presentation    Example
      ------ -------              ------------    -------
      G      era designator       (Text)          AD
      e      epoch seconds        (Number)        1315011604
      y      year                 (Number)        1996
      M      month in year        (Text & Number) July & 07
      d      day in month         (Number)        10
      h      hour in am/pm (1~12) (Number)        12
      H      hour in day (0~23)   (Number)        0
      m      minute in hour       (Number)        30
      s      second in minute     (Number)        55
      S      millisecond          (Number)        978
      E      day in week          (Text)          Tuesday
      D      day in year          (Number)        189
      F      day of week in month (Number)        2 (2nd Wed in July)
      w      week in year         (Number)        27
      W      week in month        (Number)        2
      a      am/pm marker         (Text)          PM
      k      hour in day (1~24)   (Number)        24
      K      hour in am/pm (0~11) (Number)        0
      z      time zone            (Text)          Pacific Standard Time
      Z      RFC 822 time zone    (Text)          -0800
      '      escape for text      (Delimiter)
      ''     single quote         (Literal)       '
  
  For example, if you want to format the current Unix time in 
  C<"MM/dd HH:mm"> format, all you have to do is this:
  
      use Log::Log4perl::DateFormat;
  
      my $format = Log::Log4perl::DateFormat->new("MM/dd HH:mm");
  
      my $time = time();
      print $format->format($time), "\n";
  
  While the C<new()> method is expensive, because it parses the format
  strings and sets up all kinds of structures behind the scenes, 
  followup calls to C<format()> are fast, because C<DateFormat> will
  just call C<localtime()> and C<sprintf()> once to return the formatted
  date/time string.
  
  So, typically, you would initialize the formatter once and then reuse
  it over and over again to display all kinds of time values.
  
  Also, for your convenience, 
  the following predefined formats are available, just as outlined in the
  log4j spec:
  
      Format   Equivalent                     Example
      ABSOLUTE "HH:mm:ss,SSS"                 "15:49:37,459"
      DATE     "dd MMM yyyy HH:mm:ss,SSS"     "06 Nov 1994 15:49:37,459"
      ISO8601  "yyyy-MM-dd HH:mm:ss,SSS"      "1999-11-27 15:49:37,459"
      APACHE   "[EEE MMM dd HH:mm:ss yyyy]"   "[Wed Mar 16 15:49:37 2005]"
  
  So, instead of passing 
  
      Log::Log4perl::DateFormat->new("HH:mm:ss,SSS");
  
  you could just as well say
  
      Log::Log4perl::DateFormat->new("ABSOLUTE");
  
  and get the same result later on.
  
  =head2 Known Shortcomings
   
  The following placeholders are currently I<not> recognized, unless
  someone (and that could be you :) implements them:
  
      F day of week in month
      w week in year 
      W week in month
      k hour in day 
      K hour in am/pm
      z timezone (but we got 'Z' for the numeric time zone value)
  
  Also, C<Log::Log4perl::DateFormat> just knows about English week and
  month names, internationalization support has to be added.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_DATEFORMAT

    $main::fatpacked{"Log/Log4perl/Filter.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_FILTER';
  ##################################################
  package Log::Log4perl::Filter;
  ##################################################
  
  use 5.006;
  use strict;
  use warnings;
  
  use Log::Log4perl::Level;
  use Log::Log4perl::Config;
  
  use constant _INTERNAL_DEBUG => 0;
  
  our %FILTERS_DEFINED = ();
  
  ##################################################
  sub new {
  ##################################################
      my($class, $name, $action) = @_;
    
      print "Creating filter $name\n" if _INTERNAL_DEBUG;
  
      my $self = { name => $name };
      bless $self, $class;
  
      if(ref($action) eq "CODE") {
          # it's a code ref
          $self->{ok} = $action;
      } else {
          # it's something else
          die "Code for ($name/$action) not properly defined";
      }
  
      return $self;
  }
  
  ##################################################
  sub register {         # Register a filter by name
                         # (Passed on to subclasses)
  ##################################################
      my($self) = @_;
  
      by_name($self->{name}, $self);
  }
  
  ##################################################
  sub by_name {        # Get/Set a filter object by name
  ##################################################
      my($name, $value) = @_;
  
      if(defined $value) {
          $FILTERS_DEFINED{$name} = $value;
      }
  
      if(exists $FILTERS_DEFINED{$name}) {
          return $FILTERS_DEFINED{$name};
      } else {
          return undef;
      }
  }
  
  ##################################################
  sub reset {
  ##################################################
      %FILTERS_DEFINED = ();
  }
  
  ##################################################
  sub ok {
  ##################################################
      my($self, %p) = @_;
  
      print "Calling $self->{name}'s ok method\n" if _INTERNAL_DEBUG;
  
          # Force filter classes to define their own
          # ok(). Exempt are only sub {..} ok functions,
          # defined in the conf file.
      die "This is to be overridden by the filter" unless
           defined $self->{ok};
  
      # What should we set the message in $_ to? The most logical
      # approach seems to be to concat all parts together. If some
      # filter wants to dissect the parts, it still can examine %p,
      # which gets passed to the subroutine and contains the chunks
      # in $p{message}.
          # Split because of CVS
      local($_) = join $
                       Log::Log4perl::JOIN_MSG_ARRAY_CHAR, @{$p{message}};
      print "\$_ is '$_'\n" if _INTERNAL_DEBUG;
  
      my $decision = $self->{ok}->(%p);
  
      print "$self->{name}'s ok'ed: ", 
            ($decision ? "yes" : "no"), "\n" if _INTERNAL_DEBUG;
  
      return $decision;
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Filter - Log4perl Custom Filter Base Class
  
  =head1 SYNOPSIS
  
    use Log::Log4perl;
  
    Log::Log4perl->init(\ <<'EOT');
      log4perl.logger = INFO, Screen
      log4perl.filter.MyFilter        = sub { /let this through/ }
      log4perl.appender.Screen        = Log::Log4perl::Appender::Screen
      log4perl.appender.Screen.Filter = MyFilter
      log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout
    EOT
  
        # Define a logger
    my $logger = Log::Log4perl->get_logger("Some");
  
        # Let this through
    $logger->info("Here's the info, let this through!");
  
        # Suppress this
    $logger->info("Here's the info, suppress this!");
  
    #################################################################
    # StringMatch Filter:
    #################################################################
    log4perl.filter.M1               = Log::Log4perl::Filter::StringMatch
    log4perl.filter.M1.StringToMatch = let this through
    log4perl.filter.M1.AcceptOnMatch = true
  
    #################################################################
    # LevelMatch Filter:
    #################################################################
    log4perl.filter.M1               = Log::Log4perl::Filter::LevelMatch
    log4perl.filter.M1.LevelToMatch  = INFO
    log4perl.filter.M1.AcceptOnMatch = true
  
  =head1 DESCRIPTION
  
  Log4perl allows the use of customized filters in its appenders
  to control the output of messages. These filters might grep for
  certain text chunks in a message, verify that its priority
  matches or exceeds a certain level or that this is the 10th
  time the same message has been submitted -- and come to a log/no log 
  decision based upon these circumstantial facts.
  
  Filters have names and can be specified in two different ways in the Log4perl
  configuration file: As subroutines or as filter classes. Here's a 
  simple filter named C<MyFilter> which just verifies that the 
  oncoming message matches the regular expression C</let this through/i>:
  
      log4perl.filter.MyFilter        = sub { /let this through/i }
  
  It exploits the fact that when the subroutine defined
  above is called on a message,
  Perl's special C<$_> variable will be set to the message text (prerendered,
  i.e. concatenated but not layouted) to be logged. 
  The subroutine is expected to return a true value 
  if it wants the message to be logged or a false value if doesn't.
  
  Also, Log::Log4perl will pass a hash to the subroutine,
  containing all key/value pairs that it would pass to the corresponding 
  appender, as specified in Log::Log4perl::Appender. Here's an
  example of a filter checking the priority of the oncoming message:
  
    log4perl.filter.MyFilter        = sub {    \
         my %p = @_;                           \
         if($p{log4p_level} eq "WARN" or       \
            $p{log4p_level} eq "INFO") {       \
             return 1;                         \
         }                                     \
         return 0;                             \
    }     
  
  If the message priority equals C<WARN> or C<INFO>, 
  it returns a true value, causing
  the message to be logged.
  
  =head2 Predefined Filters
  
  For common tasks like verifying that the message priority matches
  a certain priority, there's already a 
  set of predefined filters available. To perform an exact level match, it's
  much cleaner to use Log4perl's C<LevelMatch> filter instead:
  
    log4perl.filter.M1               = Log::Log4perl::Filter::LevelMatch
    log4perl.filter.M1.LevelToMatch  = INFO
    log4perl.filter.M1.AcceptOnMatch = true
  
  This will let the message through if its priority is INFO and suppress
  it otherwise. The statement can be negated by saying
  
    log4perl.filter.M1.AcceptOnMatch = false
  
  instead. This way, the message will be logged if its priority is
  anything but INFO.
  
  On a similar note, Log4perl's C<StringMatch> filter will check the 
  oncoming message for strings or regular expressions:
  
    log4perl.filter.M1               = Log::Log4perl::Filter::StringMatch
    log4perl.filter.M1.StringToMatch = bl.. bl..
    log4perl.filter.M1.AcceptOnMatch = true
  
  This will open the gate for messages like C<blah blah> because the 
  regular expression in the C<StringToMatch> matches them. Again,
  the setting of C<AcceptOnMatch> determines if the filter is defined
  in a positive or negative way.
  
  All class filter entries in the configuration file
  have to adhere to the following rule:
  Only after a filter has been defined by name and class/subroutine,
  its attribute values can be
  assigned, just like the C<true> value above gets assigned to the
  C<AcceptOnMatch> attribute I<after> the
  filter C<M1> has been defined.
  
  =head2 Attaching a filter to an appender
  
  Attaching a filter to an appender is as easy as assigning its name to
  the appender's C<Filter> attribute:
  
      log4perl.appender.MyAppender.Filter = MyFilter
  
  This will cause C<Log::Log4perl> to call the filter subroutine/method
  every time a message is supposed to be passed to the appender. Depending
  on the filter's return value, C<Log::Log4perl> will either continue as
  planned or withdraw immediately.
  
  =head2 Combining filters with Log::Log4perl::Filter::Boolean
  
  Sometimes, it's useful to combine the output of various filters to
  arrive at a log/no log decision. While Log4j, Log4perl's mother ship,
  has chosen to implement this feature as a filter chain, similar to Linux' IP chains,
  Log4perl tries a different approach. 
  
  Typically, filter results will not need to be bumped along chains but 
  combined in a programmatic manner using boolean logic. "Log if
  this filter says 'yes' and that filter says 'no'" 
  is a fairly common requirement, but hard to implement as a chain.
  
  C<Log::Log4perl::Filter::Boolean> is a specially predefined custom filter
  for Log4perl. It combines the results of other custom filters 
  in arbitrary ways, using boolean expressions:
  
      log4perl.logger = WARN, AppWarn, AppError
  
      log4perl.filter.Match1       = sub { /let this through/ }
      log4perl.filter.Match2       = sub { /and that, too/ }
      log4perl.filter.MyBoolean       = Log::Log4perl::Filter::Boolean
      log4perl.filter.MyBoolean.logic = Match1 || Match2
  
      log4perl.appender.Screen        = Log::Log4perl::Appender::Screen
      log4perl.appender.Screen.Filter = MyBoolean
      log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout
  
  C<Log::Log4perl::Filter::Boolean>'s boolean expressions allow for combining
  different appenders by name using AND (&& or &), OR (|| or |) and NOT (!) as
  logical expressions. Also, parentheses can be used for defining precedences. 
  Operator precedence follows standard Perl conventions. Here's a bunch of examples:
  
      Match1 && !Match2            # Match1 and not Match2
      !(Match1 || Match2)          # Neither Match1 nor Match2
      (Match1 && Match2) || Match3 # Both Match1 and Match2 or Match3
  
  =head2 Writing your own filter classes
  
  If none of Log::Log4perl's predefined filter classes fits your needs,
  you can easily roll your own: Just define a new class,
  derive it from the baseclass C<Log::Log4perl::Filter>,
  and define its C<new> and C<ok> methods like this:
  
      package Log::Log4perl::Filter::MyFilter;
  
      use base Log::Log4perl::Filter;
  
      sub new {
          my ($class, %options) = @_;
  
          my $self = { %options,
                     };
       
          bless $self, $class;
  
          return $self;
      }
  
      sub ok {
           my ($self, %p) = @_;
  
           # ... decide and return 1 or 0
      }
  
      1;
  
  Log4perl will call the ok() method to determine if the filter
  should let the message pass or not. A true return value indicates
  the message will be logged by the appender, a false value blocks it.
  
  Values you've defined for its attributes in Log4perl's configuration file,
  will be received through its C<new> method:
  
      log4perl.filter.MyFilter       = Log::Log4perl::Filter::MyFilter
      log4perl.filter.MyFilter.color = red
  
  will cause C<Log::Log4perl::Filter::MyFilter>'s constructor to be called
  like this:
  
      Log::Log4perl::Filter::MyFilter->new( name  => "MyFilter",
                                            color => "red" );
  
  The custom filter class should use this to set the object's attributes, 
  to have them available later to base log/nolog decisions on it.
  
  C<ok()> is the filter's method to tell if it agrees or disagrees with logging
  the message. It will be called by Log::Log4perl whenever it needs the
  filter to decide. A false value returned by C<ok()> will block messages,
  a true value will let them through.
  
  =head2 A Practical Example: Level Matching
  
  See L<Log::Log4perl::FAQ> for this.
  
  =head1 SEE ALSO
  
  L<Log::Log4perl::Filter::LevelMatch>,
  L<Log::Log4perl::Filter::LevelRange>,
  L<Log::Log4perl::Filter::StringRange>,
  L<Log::Log4perl::Filter::Boolean>
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_FILTER

    $main::fatpacked{"Log/Log4perl/Filter/Boolean.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_FILTER_BOOLEAN';
  ##################################################
  package Log::Log4perl::Filter::Boolean;
  ##################################################
  
  use 5.006;
  
  use strict;
  use warnings;
  
  use Log::Log4perl::Level;
  use Log::Log4perl::Config;
  
  use constant _INTERNAL_DEBUG => 0;
  
  use base qw(Log::Log4perl::Filter);
  
  ##################################################
  sub new {
  ##################################################
      my ($class, %options) = @_;
  
      my $self = { params => {},
                   %options,
                 };
       
      bless $self, $class;
       
      print "Compiling '$options{logic}'\n" if _INTERNAL_DEBUG;
  
          # Set up meta-decider for later
      $self->compile_logic($options{logic});
  
      return $self;
  }
  
  ##################################################
  sub ok {
  ##################################################
       my ($self, %p) = @_;
  
       return $self->eval_logic(\%p);
  }
  
  ##################################################
  sub compile_logic {
  ##################################################
      my ($self, $logic) = @_;
  
         # Extract Filter placeholders in logic as defined
         # in configuration file.
      while($logic =~ /([\w_-]+)/g) {
              # Get the corresponding filter object
          my $filter = Log::Log4perl::Filter::by_name($1);
          die "Filter $1 required by Boolean filter, but not defined" 
              unless $filter;
  
          $self->{params}->{$1} = $filter;
      }
  
          # Fabricate a parameter list: A1/A2/A3 => $A1, $A2, $A3
      my $plist = join ', ', map { '$' . $_ } keys %{$self->{params}};
  
          # Replace all the (dollar-less) placeholders in the code with
          # calls to their respective coderefs.  
          $logic =~ s/([\w_-]+)/\&\$$1/g;
  
          # Set up the meta decider, which transforms the config file
          # logic into compiled perl code
      my $func = <<EOT;
          sub { 
              my($plist) = \@_;
              $logic;
          }
  EOT
  
      print "func=$func\n" if _INTERNAL_DEBUG;
  
      my $eval_func = eval $func;
  
      if(! $eval_func) {
          die "Syntax error in Boolean filter logic: $eval_func";
      }
  
      $self->{eval_func} = $eval_func;
  }
  
  ##################################################
  sub eval_logic {
  ##################################################
      my($self, $p) = @_;
  
      my @plist = ();
  
          # Eval the results of all filters referenced
          # in the code (although the order of keys is
          # not predictable, it is consistent :)
      for my $param (keys %{$self->{params}}) {
          # Pass a coderef as a param that will run the filter's ok method and
          # return a 1 or 0.  
          print "Passing filter $param\n" if _INTERNAL_DEBUG;
          push(@plist, sub {
              return $self->{params}->{$param}->ok(%$p) ? 1 : 0
          });
      }
  
          # Now pipe the parameters into the canned function,
          # have it evaluate the logic and return the final
          # decision
      print "Passing in (", join(', ', @plist), ")\n" if _INTERNAL_DEBUG;
      return $self->{eval_func}->(@plist);
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Filter::Boolean - Special filter to combine the results of others
  
  =head1 SYNOPSIS
  
      log4perl.logger = WARN, AppWarn, AppError
  
      log4perl.filter.Match1       = sub { /let this through/ }
      log4perl.filter.Match2       = sub { /and that, too/ }
      log4perl.filter.MyBoolean       = Log::Log4perl::Filter::Boolean
      log4perl.filter.MyBoolean.logic = Match1 || Match2
  
      log4perl.appender.Screen        = Log::Dispatch::Screen
      log4perl.appender.Screen.Filter = MyBoolean
      log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout
  
  =head1 DESCRIPTION
  
  Sometimes, it's useful to combine the output of various filters to
  arrive at a log/no log decision. While Log4j, Log4perl's mother ship,
  chose to implement this feature as a filter chain, similar to Linux' IP chains,
  Log4perl tries a different approach. 
  
  Typically, filter results will not need to be passed along in chains but 
  combined in a programmatic manner using boolean logic. "Log if
  this filter says 'yes' and that filter says 'no'" 
  is a fairly common requirement but hard to implement as a chain.
  
  C<Log::Log4perl::Filter::Boolean> is a special predefined custom filter
  for Log4perl which combines the results of other custom filters 
  in arbitrary ways, using boolean expressions:
  
      log4perl.logger = WARN, AppWarn, AppError
  
      log4perl.filter.Match1       = sub { /let this through/ }
      log4perl.filter.Match2       = sub { /and that, too/ }
      log4perl.filter.MyBoolean       = Log::Log4perl::Filter::Boolean
      log4perl.filter.MyBoolean.logic = Match1 || Match2
  
      log4perl.appender.Screen        = Log::Dispatch::Screen
      log4perl.appender.Screen.Filter = MyBoolean
      log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout
  
  C<Log::Log4perl::Filter::Boolean>'s boolean expressions allow for combining
  different appenders by name using AND (&& or &), OR (|| or |) and NOT (!) as
  logical expressions. Parentheses are used for grouping. Precedence follows
  standard Perl. Here's a bunch of examples:
  
      Match1 && !Match2            # Match1 and not Match2
      !(Match1 || Match2)          # Neither Match1 nor Match2
      (Match1 && Match2) || Match3 # Both Match1 and Match2 or Match3
  
  =head1 SEE ALSO
  
  L<Log::Log4perl::Filter>,
  L<Log::Log4perl::Filter::LevelMatch>,
  L<Log::Log4perl::Filter::LevelRange>,
  L<Log::Log4perl::Filter::MDC>,
  L<Log::Log4perl::Filter::StringRange>
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_FILTER_BOOLEAN

    $main::fatpacked{"Log/Log4perl/Filter/LevelMatch.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_FILTER_LEVELMATCH';
  ##################################################
  package Log::Log4perl::Filter::LevelMatch;
  ##################################################
  
  use 5.006;
  
  use strict;
  use warnings;
  
  use Log::Log4perl::Level;
  use Log::Log4perl::Config;
  use Log::Log4perl::Util qw( params_check );
  
  use constant _INTERNAL_DEBUG => 0;
  
  use base qw(Log::Log4perl::Filter);
  
  ##################################################
  sub new {
  ##################################################
      my ($class, %options) = @_;
  
      my $self = { LevelToMatch  => '',
                   AcceptOnMatch => 1,
                   %options,
                 };
       
      params_check( $self,
                    [ qw( LevelToMatch ) ], 
                    [ qw( name AcceptOnMatch ) ] 
                  );
  
      $self->{AcceptOnMatch} = Log::Log4perl::Config::boolean_to_perlish(
                                                  $self->{AcceptOnMatch});
  
      bless $self, $class;
  
      return $self;
  }
  
  ##################################################
  sub ok {
  ##################################################
       my ($self, %p) = @_;
  
       if($self->{LevelToMatch} eq $p{log4p_level}) {
           print "Levels match\n" if _INTERNAL_DEBUG;
           return $self->{AcceptOnMatch};
       } else {
           print "Levels don't match\n" if _INTERNAL_DEBUG;
           return !$self->{AcceptOnMatch};
       }
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Filter::LevelMatch - Filter to match the log level exactly
  
  =head1 SYNOPSIS
  
      log4perl.filter.Match1               = Log::Log4perl::Filter::LevelMatch
      log4perl.filter.Match1.LevelToMatch  = ERROR
      log4perl.filter.Match1.AcceptOnMatch = true
  
  =head1 DESCRIPTION
  
  This Log4perl custom filter checks if the currently submitted message
  matches a predefined priority, as set in C<LevelToMatch>.
  The additional parameter C<AcceptOnMatch> defines if the filter
  is supposed to pass or block the message (C<true> or C<false>)
  on a match.
  
  =head1 SEE ALSO
  
  L<Log::Log4perl::Filter>,
  L<Log::Log4perl::Filter::Boolean>,
  L<Log::Log4perl::Filter::LevelRange>,
  L<Log::Log4perl::Filter::MDC>,
  L<Log::Log4perl::Filter::StringMatch>
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_FILTER_LEVELMATCH

    $main::fatpacked{"Log/Log4perl/Filter/LevelRange.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_FILTER_LEVELRANGE';
  ##################################################
  package Log::Log4perl::Filter::LevelRange;
  ##################################################
  
  use 5.006;
  
  use strict;
  use warnings;
  
  use Log::Log4perl::Level;
  use Log::Log4perl::Config;
  use Log::Log4perl::Util qw( params_check );
  
  use constant _INTERNAL_DEBUG => 0;
  
  use base "Log::Log4perl::Filter";
  
  ##################################################
  sub new {
  ##################################################
      my ($class, %options) = @_;
  
      my $self = { LevelMin      => 'DEBUG',
                   LevelMax      => 'FATAL',
                   AcceptOnMatch => 1,
                   %options,
                 };
       
      params_check( $self,
                    [ qw( LevelMin LevelMax ) ], 
                    [ qw( name AcceptOnMatch ) ] 
                  );
  
      $self->{AcceptOnMatch} = Log::Log4perl::Config::boolean_to_perlish(
                                                  $self->{AcceptOnMatch});
  
      bless $self, $class;
  
      return $self;
  }
  
  ##################################################
  sub ok {
  ##################################################
       my ($self, %p) = @_;
  
       if(Log::Log4perl::Level::to_priority($self->{LevelMin}) <= 
          Log::Log4perl::Level::to_priority($p{log4p_level}) and
          Log::Log4perl::Level::to_priority($self->{LevelMax}) >= 
          Log::Log4perl::Level::to_priority($p{log4p_level})) {
           return $self->{AcceptOnMatch};
       } else {
           return ! $self->{AcceptOnMatch};
       }
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Filter::LevelRange - Filter for a range of log levels
  
  =head1 SYNOPSIS
  
      log4perl.filter.Match1               = Log::Log4perl::Filter::LevelRange
      log4perl.filter.Match1.LevelMin      = INFO
      log4perl.filter.Match1.LevelMax      = ERROR
      log4perl.filter.Match1.AcceptOnMatch = true
  
  =head1 DESCRIPTION
  
  This Log4perl custom filter checks if the current message
  has a priority matching a predefined range. 
  The C<LevelMin> and C<LevelMax> parameters define the levels
  (choose from C<DEBUG>, C<INFO>, C<WARN>, C<ERROR>, C<FATAL>) marking
  the window of allowed messages priorities.
  
  C<LevelMin> defaults to C<DEBUG>, and C<LevelMax> to C<FATAL>.
  
  The additional parameter C<AcceptOnMatch> defines if the filter
  is supposed to pass or block the message (C<true> or C<false>).
  
  =head1 SEE ALSO
  
  L<Log::Log4perl::Filter>,
  L<Log::Log4perl::Filter::Boolean>,
  L<Log::Log4perl::Filter::LevelMatch>,
  L<Log::Log4perl::Filter::MDC>,
  L<Log::Log4perl::Filter::StringMatch>
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_FILTER_LEVELRANGE

    $main::fatpacked{"Log/Log4perl/Filter/MDC.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_FILTER_MDC';
  package Log::Log4perl::Filter::MDC;
  use strict;
  use warnings;
  
  use Log::Log4perl::Util qw( params_check );
  
  use base "Log::Log4perl::Filter";
  
  sub new {
      my ( $class, %options ) = @_;
  
      my $self = {%options};
  
      params_check( $self, [qw( KeyToMatch RegexToMatch )] );
  
      $self->{RegexToMatch} = qr/$self->{RegexToMatch}/;
  
      bless $self, $class;
  
      return $self;
  }
  
  sub ok {
      my ( $self, %p ) = @_;
  
      my $context = Log::Log4perl::MDC->get_context;
  
      my $value = $context->{ $self->{KeyToMatch} };
      return 1
          if defined $value && $value =~ $self->{RegexToMatch};
  
      return 0;
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Filter::MDC - Filter to match on values of a MDC key
  
  =head1 SYNOPSIS
  
      log4perl.filter.Match1               = Log::Log4perl::Filter::MDC
      log4perl.filter.Match1.KeyToMatch    = foo
      log4perl.filter.Match1.RegexToMatch  = bar
  
  =head1 DESCRIPTION
  
  This Log4perl filter checks if a predefined MDC key, as set in C<KeyToMatch>,
  of the currently submitted message matches a predefined regex, as set in
  C<RegexToMatch>.
  
  =head1 SEE ALSO
  
  L<Log::Log4perl::Filter>,
  L<Log::Log4perl::Filter::Boolean>,
  L<Log::Log4perl::Filter::LevelMatch>,
  L<Log::Log4perl::Filter::LevelRange>,
  L<Log::Log4perl::Filter::MDC>,
  L<Log::Log4perl::Filter::StringMatch>
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_FILTER_MDC

    $main::fatpacked{"Log/Log4perl/Filter/StringMatch.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_FILTER_STRINGMATCH';
  ##################################################
  package Log::Log4perl::Filter::StringMatch;
  ##################################################
  
  use 5.006;
  
  use strict;
  use warnings;
  
  use Log::Log4perl::Config;
  use Log::Log4perl::Util qw( params_check );
  
  use constant _INTERNAL_DEBUG => 0;
  
  use base "Log::Log4perl::Filter";
  
  ##################################################
  sub new {
  ##################################################
       my ($class, %options) = @_;
  
       print join('-', %options) if _INTERNAL_DEBUG;
  
       my $self = { StringToMatch => undef,
                    AcceptOnMatch => 1,
                    %options,
                  };
       
       params_check( $self,
                    [ qw( StringToMatch ) ], 
                    [ qw( name AcceptOnMatch ) ] 
                  );
  
       $self->{AcceptOnMatch} = Log::Log4perl::Config::boolean_to_perlish(
                                                   $self->{AcceptOnMatch});
  
       $self->{StringToMatch} = qr($self->{StringToMatch});
  
       bless $self, $class;
  
       return $self;
  }
  
  ##################################################
  sub ok {
  ##################################################
       my ($self, %p) = @_;
  
       local($_) = join $
                       Log::Log4perl::JOIN_MSG_ARRAY_CHAR, @{$p{message}};
  
       if($_ =~ $self->{StringToMatch}) {
           print "Strings match\n" if _INTERNAL_DEBUG;
           return $self->{AcceptOnMatch};
       } else {
           print "Strings don't match ($_/$self->{StringToMatch})\n" 
               if _INTERNAL_DEBUG;
           return !$self->{AcceptOnMatch};
       }
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Filter::StringMatch - Filter on log message string
  
  =head1 SYNOPSIS
  
      log4perl.filter.Match1               = Log::Log4perl::Filter::StringMatch
      log4perl.filter.Match1.StringToMatch = blah blah
      log4perl.filter.Match1.AcceptOnMatch = true
  
  =head1 DESCRIPTION
  
  This Log4perl custom filter checks if the currently submitted message
  matches a predefined regular expression, as set in the C<StringToMatch>
  parameter. It uses common Perl 5 regexes.
  
  The additional parameter C<AcceptOnMatch> defines if the filter
  is supposed to pass or block the message on a match (C<true> or C<false>).
  
  =head1 SEE ALSO
  
  L<Log::Log4perl::Filter>,
  L<Log::Log4perl::Filter::Boolean>,
  L<Log::Log4perl::Filter::LevelMatch>,
  L<Log::Log4perl::Filter::LevelRange>,
  L<Log::Log4perl::Filter::MDC>
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_FILTER_STRINGMATCH

    $main::fatpacked{"Log/Log4perl/InternalDebug.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_INTERNALDEBUG';
  package Log::Log4perl::InternalDebug;
  use warnings;
  use strict;
  
  use File::Temp qw(tempfile);
  use File::Spec;
  
  require Log::Log4perl::Resurrector;
  
  ###########################################
  sub enable {
  ###########################################
      unshift @INC, \&internal_debug_loader;
  }
  
  ##################################################
  sub internal_debug_fh {
  ##################################################
      my($file) = @_;
  
      local($/) = undef;
      open FILE, "<$file" or die "Cannot open $file";
      my $text = <FILE>;
      close FILE;
  
      my($tmp_fh, $tmpfile) = tempfile( UNLINK => 1 );
  
      $text =~ s/_INTERNAL_DEBUG(?!\s*=>)/1/g;
  
      print $tmp_fh $text;
      seek $tmp_fh, 0, 0;
  
      return $tmp_fh;
  }
  
  ###########################################
  sub internal_debug_loader {
  ###########################################
      my ($code, $module) = @_;
  
        # Skip non-Log4perl modules
      if($module !~ m#^Log/Log4perl#) {
          return undef;
      }
  
      my $path = $module;
      if(!-f $path) {
          $path = Log::Log4perl::Resurrector::pm_search( $module );
      }
  
      my $fh = internal_debug_fh($path);
  
      my $abs_path = File::Spec->rel2abs( $path );
      $INC{$module} = $abs_path;
  
      return $fh;
  }
  
  ###########################################
  sub resurrector_init {
  ###########################################
      unshift @INC, \&resurrector_loader;
  }
  
  ###########################################
  sub import {
  ###########################################
      # enable it on import
    enable();
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::InternalDebug - Dark Magic to enable _INTERNAL_DEBUG
  
  =head1 DESCRIPTION
  
  When called with
  
      perl -MLog::Log4perl::InternalDebug t/001Test.t
  
  scripts will run with _INTERNAL_DEBUG set to a true value and hence
  print internal Log4perl debugging information.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_INTERNALDEBUG

    $main::fatpacked{"Log/Log4perl/JavaMap.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_JAVAMAP';
  package Log::Log4perl::JavaMap;
  
  use Carp;
  use strict;
  
  use constant _INTERNAL_DEBUG => 0;
  
  our %translate = (
      'org.apache.log4j.ConsoleAppender' => 
          'Log::Log4perl::JavaMap::ConsoleAppender',
      'org.apache.log4j.FileAppender'    => 
          'Log::Log4perl::JavaMap::FileAppender',
      'org.apache.log4j.RollingFileAppender'    => 
          'Log::Log4perl::JavaMap::RollingFileAppender',
      'org.apache.log4j.TestBuffer'    => 
          'Log::Log4perl::JavaMap::TestBuffer',
       'org.apache.log4j.jdbc.JDBCAppender'    => 
          'Log::Log4perl::JavaMap::JDBCAppender',
       'org.apache.log4j.SyslogAppender'    => 
          'Log::Log4perl::JavaMap::SyslogAppender',
       'org.apache.log4j.NTEventLogAppender'    => 
          'Log::Log4perl::JavaMap::NTEventLogAppender',
  );
  
  our %user_defined;
  
  sub get {
      my ($appender_name, $appender_data) = @_;
  
      print "Trying to map $appender_name\n" if _INTERNAL_DEBUG;
  
      $appender_data->{value} ||
              die "ERROR: you didn't tell me how to implement your appender " .
                  "'$appender_name'";
  
      my $perl_class = $translate{$appender_data->{value}} || 
                       $user_defined{$appender_data->{value}} ||
              die "ERROR:  I don't know how to make a '$appender_data->{value}' " .
                  "to implement your appender '$appender_name', that's not a " .
                  "supported class\n";
      eval {
          eval "require $perl_class";  #see 'perldoc -f require' for why two evals
          die $@ if $@;
      };
      $@ and die "ERROR: trying to set appender for $appender_name to " .
                 "$appender_data->{value} using $perl_class failed\n$@  \n";
  
      my $app = $perl_class->new($appender_name, $appender_data);
      return $app;
  }
  
  #an external api to the two hashes
  sub translate {
      my $java_class = shift;
  
      return $translate{$java_class} || 
              $user_defined{$java_class};
  }
  
  1;
  
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::JavaMap - maps java log4j appenders to Log::Dispatch classes
  
  =head1 SYNOPSIS
  
       ###############################
       log4j.appender.FileAppndr1        = org.apache.log4j.FileAppender
       log4j.appender.FileAppndr1.File   = /var/log/onetime.log
       log4j.appender.FileAppndr1.Append = false
  
       log4j.appender.FileAppndr1.layout = org.apache.log4j.PatternLayout
       log4j.appender.FileAppndr1.layout.ConversionPattern=%d %4r [%t] %-5p %c %x - %m%n
       ###############################
  
  
  =head1 DESCRIPTION
  
  If somebody wants to create an appender called C<org.apache.log4j.ConsoleAppender>,
  we want to translate it to Log::Dispatch::Screen, and then translate
  the log4j options into Log::Dispatch parameters..
  
  =head2 What's Implemented
  
  (Note that you can always use the Log::Dispatch::* module.  By 'implemented'
  I mean having a translation class that translates log4j options into
  the Log::Dispatch options so you can use log4j rather than log4perl 
  syntax in your config file.)
  
  Here's the list of appenders I see on the current (6/2002) log4j site.
  
  These are implemented
  
      ConsoleAppender     - Log::Dispatch::Screen
      FileAppender        - Log::Dispatch::File
      RollingFileAppender - Log::Dispatch::FileRotate (by Mark Pfeiffer)
      JDBCAppender        - Log::Log4perl::Appender::DBI
      SyslogAppender      - Log::Dispatch::Syslog
      NTEventLogAppender  - Log::Dispatch::Win32EventLog
  
  
  These should/will/might be implemented
      
      DailyRollingFileAppender - 
      SMTPAppender     - Log::Dispatch::Email::MailSender
      
  
  These might be implemented but they don't have corresponding classes
  in Log::Dispatch (yet):
  
      NullAppender
      TelnetAppender
  
  These might be simulated
  
      LF5Appender - use Tk?
      ExternallyRolledFileAppender - catch a HUP instead?
  
  These will probably not be implemented
  
      AsyncAppender
      JMSAppender
      SocketAppender - (ships a serialized LoggingEvent to the server side)
      SocketHubAppender
  
  =head1 ROLL YOUR OWN
  
  Let's say you've in a mixed Java/Perl environment and you've
  come up with some custom Java appender with behavior you want to 
  use in both worlds, C<myorg.customAppender>.  You write a
  Perl appender with the same behavior C<Myorg::CustomAppender>. You
  want to use one config file across both applications, so the
  config file will have to say 'myorg.customAppender'.  But
  the mapping from C<myorg.customAppender> to C<Myorg::CustomAppender>
  isn't in this JavaMap class, so what do you do?
  
  In  your Perl code, before you call Log::Log4perl::init(), do this:
  
      $Log::Log4perl::JavaMap::user_defined{'myorg.customAppender'} = 
          'Myorg::CustomAppender';
  
  and you can use 'myorg.customAppender' in your config file with
  impunity.
  
  =head1 SEE ALSO
  
  http://jakarta.apache.org/log4j/docs/
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_JAVAMAP

    $main::fatpacked{"Log/Log4perl/JavaMap/ConsoleAppender.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_JAVAMAP_CONSOLEAPPENDER';
  package Log::Log4perl::JavaMap::ConsoleAppender;
  
  use Carp;
  use strict;
  use Log::Dispatch::Screen;
  
  
  sub new {
      my ($class, $appender_name, $data) = @_;
      my $stderr;
  
      if (my $t = $data->{Target}{value}) {
          if ($t eq 'System.out') {
              $stderr = 0;
          }elsif ($t eq 'System.err') {
              $stderr = 1;
          }else{
              die "ERROR: illegal value '$t' for $data->{value}.Target' in appender $appender_name\n";
          }
      }elsif (defined $data->{stderr}{value}){
          $stderr = $data->{stderr}{value};
      }else{
          $stderr = 0;
      }
  
      return Log::Log4perl::Appender->new("Log::Dispatch::Screen",
          name   => $appender_name,
          stderr => $stderr );
  }
  
  
  1;
  
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::JavaMap::ConsoleAppender - wraps Log::Dispatch::Screen
  
  =head1 SYNOPSIS
  
  
  =head1 DESCRIPTION
  
  Possible config properties for log4j ConsoleAppender are 
  
      Target (System.out, System.err, default is System.out)
  
  Possible config properties for Log::Dispatch::Screen are
  
      stderr (0 or 1)
  
  =head1 SEE ALSO
  
  http://jakarta.apache.org/log4j/docs/
  
  Log::Log4perl::Javamap
  
  Log::Dispatch::Screen
  
  =cut 
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_JAVAMAP_CONSOLEAPPENDER

    $main::fatpacked{"Log/Log4perl/JavaMap/FileAppender.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_JAVAMAP_FILEAPPENDER';
  package Log::Log4perl::JavaMap::FileAppender;
  
  use Carp;
  use strict;
  use Log::Dispatch::File;
  
  
  sub new {
      my ($class, $appender_name, $data) = @_;
      my $stderr;
  
      my $filename =  $data->{File}{value} || 
                  $data->{filename}{value} || 
                  die "'File' not supplied for appender '$appender_name', required for a '$data->{value}'\n";
  
      my $mode;
      if (defined($data->{Append}{value})){
          if (lc $data->{Append}{value} eq 'true' || $data->{Append}{value} == 1){
              $mode = 'append';
          }elsif (lc $data->{Append}{value} eq 'false' || $data->{Append}{value} == 0) {
              $mode = 'write';
          }elsif($data->{Append} =~ /^(write|append)$/){
              $mode = $data->{Append}
          }else{
              die "'$data->{Append}' is not a legal value for Append for appender '$appender_name', '$data->{value}'\n";
          }
      }else{
          $mode = 'append';
      }
  
      my $autoflush;
      if (defined($data->{BufferedIO}{value})){
          if (lc $data->{BufferedIO}{value} eq 'true' || $data->{BufferedIO}{value}){
              $autoflush = 1;
          }elsif (lc $data->{BufferedIO}{value} eq 'true' || ! $data->{BufferedIO}{value}) {
              $autoflush = 0;
          }else{
              die "'$data->{BufferedIO}' is not a legal value for BufferedIO for appender '$appender_name', '$data->{value}'\n";
          }
      }else{
          $autoflush = 1;
      }
  
  
      return Log::Log4perl::Appender->new("Log::Dispatch::File",
          name      => $appender_name,
          filename  => $filename,
          mode      => $mode,
          autoflush => $autoflush,
      );
  }
  
  1;
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::JavaMap::FileAppender - wraps Log::Dispatch::File
  
  =head1 SYNOPSIS
  
  
  =head1 DESCRIPTION
  
  Possible config properties for log4j ConsoleAppender are 
  
      File
      Append      "true|false|1|0" default=true
      BufferedIO  "true|false|1|0" default=false (i.e. autoflush is on)
  
  Possible config properties for Log::Dispatch::File are
  
      filename
      mode  "write|append"
      autoflush 0|1
  
  =head1 SEE ALSO
  
  http://jakarta.apache.org/log4j/docs/
  
  Log::Log4perl::Javamap
  
  Log::Dispatch::File
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_JAVAMAP_FILEAPPENDER

    $main::fatpacked{"Log/Log4perl/JavaMap/JDBCAppender.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_JAVAMAP_JDBCAPPENDER';
  package Log::Log4perl::JavaMap::JDBCAppender;
  
  use Carp;
  use strict;
  
  sub new {
      my ($class, $appender_name, $data) = @_;
      my $stderr;
  
      my $pwd =  $data->{password}{value} || 
                  die "'password' not supplied for appender '$appender_name', required for a '$data->{value}'\n";
  
      my $username =  $data->{user}{value} || 
                  $data->{username}{value} || 
                  die "'user' not supplied for appender '$appender_name', required for a '$data->{value}'\n";
  
  
      my $sql =  $data->{sql}{value} || 
                  die "'sql' not supplied for appender '$appender_name', required for a '$data->{value}'\n";
  
  
      my $dsn;
  
      my $databaseURL = $data->{URL}{value};
      if ($databaseURL) {
          $databaseURL =~ m|^jdbc:(.+?):(.+?)://(.+?):(.+?);(.+)|;
          my $driverName = $1;
          my $databaseName = $2;
          my $hostname = $3;
          my $port = $4;
          my $params = $5;
          $dsn = "dbi:$driverName:database=$databaseName;host=$hostname;port=$port;$params";
      }elsif ($data->{datasource}{value}){
          $dsn = $data->{datasource}{value};
      }else{
          die "'databaseURL' not supplied for appender '$appender_name', required for a '$data->{value}'\n";
      }
  
  
      #this part isn't supported by log4j, it's my Log4perl
      #hack, but I think it's so useful I'm going to implement it
      #anyway
      my %bind_value_params;
      foreach my $p (keys %{$data->{params}}){
          $bind_value_params{$p} =  $data->{params}{$p}{value};
      }
  
      return Log::Log4perl::Appender->new("Log::Log4perl::Appender::DBI",
          datasource    => $dsn,
          username      => $username,
          password      => $pwd, 
          sql           => $sql,
          params        => \%bind_value_params,
              #warp_message also not a log4j thing, but see above
          warp_message=> $data->{warp_message}{value},  
      );
  }
  
  1;
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::JavaMap::JDBCAppender - wraps Log::Log4perl::Appender::DBI
  
  =head1 SYNOPSIS
  
  
  =head1 DESCRIPTION
  
  Possible config properties for log4j JDBCAppender are 
  
      bufferSize 
      sql
      password
      user
      URL - attempting to translate a JDBC URL into DBI parameters,
          let me know if you find problems
  
  Possible config properties for Log::Log4perl::Appender::DBI are
  
      bufferSize 
      sql
      password
      username
      datasource
      
      usePreparedStmt 0|1
      
      (patternLayout).dontCollapseArrayRefs 0|1
      
      
  =head1 SEE ALSO
  
  http://jakarta.apache.org/log4j/docs/
  
  Log::Log4perl::Javamap
  
  Log::Log4perl::Appender::DBI
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_JAVAMAP_JDBCAPPENDER

    $main::fatpacked{"Log/Log4perl/JavaMap/NTEventLogAppender.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_JAVAMAP_NTEVENTLOGAPPENDER';
  package Log::Log4perl::JavaMap::NTEventLogAppender;
  
  use Carp;
  use strict;
  
  
  
  sub new {
      my ($class, $appender_name, $data) = @_;
      my $stderr;
  
      my ($source,   #        
          );
  
      if (defined $data->{Source}{value}) {
          $source = $data->{Source}{value}
      }elsif (defined $data->{source}{value}){
          $source = $data->{source}{value};
      }else{
          $source = 'user';
      }
  
      
      return Log::Log4perl::Appender->new("Log::Dispatch::Win32EventLog",
          name      => $appender_name,
          source    => $source,
          min_level => 'debug',
      );
  }
  
  1;
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::JavaMap::NTEventLogAppender - wraps Log::Dispatch::Win32EventLog
  
  
  =head1 DESCRIPTION
  
  This maps log4j's NTEventLogAppender to Log::Dispatch::Win32EventLog
  
  Possible config properties for log4j NTEventLogAppender are 
  
      Source
  
  Possible config properties for Log::Dispatch::Win32EventLog are
  
      source
  
  Boy, that was hard.
  
  =head1 SEE ALSO
  
  http://jakarta.apache.org/log4j/docs/
  
  Log::Log4perl::Javamap
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_JAVAMAP_NTEVENTLOGAPPENDER

    $main::fatpacked{"Log/Log4perl/JavaMap/RollingFileAppender.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_JAVAMAP_ROLLINGFILEAPPENDER';
  package Log::Log4perl::JavaMap::RollingFileAppender;
  
  use Carp;
  use strict;
  use Log::Dispatch::FileRotate 1.10;
  
  
  sub new {
      my ($class, $appender_name, $data) = @_;
      my $stderr;
  
      my $filename =  $data->{File}{value} || 
                  $data->{filename}{value} || 
                  die "'File' not supplied for appender '$appender_name', required for a '$data->{value}'\n";
  
      my $mode;
      if (defined($data->{Append}{value})){
          if (lc $data->{Append}{value} eq 'true' || $data->{Append}{value} == 1){
              $mode = 'append';
          }elsif (lc $data->{Append}{value} eq 'false' || $data->{Append}{value} == 0) {
              $mode = 'write';
          }elsif($data->{Append} =~ /^(write|append)$/){
              $mode = $data->{Append}
          }else{
              die "'$data->{Append}' is not a legal value for Append for appender '$appender_name', '$data->{value}'\n";
          }
      }else{
          $mode = 'append';
      }
  
      my $autoflush;
      if (defined($data->{BufferedIO}{value})){
          if (lc $data->{BufferedIO}{value} eq 'true' || $data->{BufferedIO}{value}){
              $autoflush = 1;
          }elsif (lc $data->{BufferedIO}{value} eq 'true' || ! $data->{BufferedIO}{value}) {
              $autoflush = 0;
          }else{
              die "'$data->{BufferedIO}' is not a legal value for BufferedIO for appender '$appender_name', '$data->{value}'\n";
          }
      }else{
          $autoflush = 1;
      }
  
      my $max;
      if (defined $data->{MaxBackupIndex}{value}) {
          $max = $data->{MaxBackupIndex}{value};
      }elsif (defined $data->{max}{value}){
          $max = $data->{max}{value};
      }else{
          $max = 1;
  
      }
  
      my $size;
      if (defined $data->{MaxFileSize}{value}) {
          $size = $data->{MaxFileSize}{value}
      }elsif (defined $data->{size}{value}){
          $size = $data->{size}{value};
      }else{
          $size = 10_000_000;
      }
  
  
      return Log::Log4perl::Appender->new("Log::Dispatch::FileRotate",
          name      => $appender_name,
          filename  => $filename,
          mode      => $mode,
          autoflush => $autoflush,
          size      => $size,
          max       => $max,
      );
  }
  
  1;
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::JavaMap::RollingFileAppender - wraps Log::Dispatch::FileRotate
  
  =head1 SYNOPSIS
  
  
  =head1 DESCRIPTION
  
  This maps log4j's RollingFileAppender to Log::Dispatch::FileRotate 
  by Mark Pfeiffer, <markpf@mlp-consulting.com.au>.
  
  Possible config properties for log4j ConsoleAppender are 
  
      File
      Append      "true|false|1|0" default=true
      BufferedIO  "true|false|1|0" default=false (i.e. autoflush is on)
      MaxFileSize default 10_000_000
      MaxBackupIndex default is 1
  
  Possible config properties for Log::Dispatch::FileRotate are
  
      filename
      mode  "write|append"
      autoflush 0|1
      size
      max
  
  =head1 SEE ALSO
  
  http://jakarta.apache.org/log4j/docs/
  
  Log::Log4perl::Javamap
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_JAVAMAP_ROLLINGFILEAPPENDER

    $main::fatpacked{"Log/Log4perl/JavaMap/SyslogAppender.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_JAVAMAP_SYSLOGAPPENDER';
  package Log::Log4perl::JavaMap::SyslogAppender;
  
  use Carp;
  use strict;
  use Log::Dispatch::Syslog;
  
  
  sub new {
      my ($class, $appender_name, $data) = @_;
      my $stderr;
  
      my ($ident,    #defaults to $0
          $logopt,   #Valid options are 'cons', 'pid', 'ndelay', and 'nowait'.
          $facility, #Valid options are 'auth', 'authpriv',
                     #  'cron', 'daemon', 'kern', 'local0' through 'local7',
                     #   'mail, 'news', 'syslog', 'user', 'uucp'.  Defaults to
                     #   'user'
          $socket,   #Valid options are 'unix' or 'inet'. Defaults to 'inet'
          );
  
      if (defined $data->{Facility}{value}) {
          $facility = $data->{Facility}{value}
      }elsif (defined $data->{facility}{value}){
          $facility = $data->{facility}{value};
      }else{
          $facility = 'user';
      }
  
      if (defined $data->{Ident}{value}) {
          $ident = $data->{Ident}{value}
      }elsif (defined $data->{ident}{value}){
          $ident = $data->{ident}{value};
      }else{
          $ident = $0;
      }
      
      return Log::Log4perl::Appender->new("Log::Dispatch::Syslog",
          name      => $appender_name,
          facility  => $facility,
          ident     => $ident,
          min_level => 'debug',
      );
  }
  
  1;
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::JavaMap::SysLogAppender - wraps Log::Dispatch::Syslog
  
  
  =head1 DESCRIPTION
  
  This maps log4j's SyslogAppender to Log::Dispatch::Syslog
  
  Possible config properties for log4j SyslogAppender are 
  
      SyslogHost (Log::Dispatch::Syslog only accepts 'localhost')
      Facility
  
  Possible config properties for Log::Dispatch::Syslog are
  
      min_level (debug)
      max_level
      ident    (defaults to $0)
      logopt
      facility 
      socket   (defaults to 'inet')
  
  =head1 SEE ALSO
  
  http://jakarta.apache.org/log4j/docs/
  
  Log::Log4perl::Javamap
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_JAVAMAP_SYSLOGAPPENDER

    $main::fatpacked{"Log/Log4perl/JavaMap/TestBuffer.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_JAVAMAP_TESTBUFFER';
  package Log::Log4perl::JavaMap::TestBuffer;
  
  use Carp;
  use strict;
  use Log::Log4perl::Appender::TestBuffer;
  
  use constant _INTERNAL_DEBUG => 0;
  
  sub new {
      my ($class, $appender_name, $data) = @_;
      my $stderr;
  
      return Log::Log4perl::Appender->new("Log::Log4perl::Appender::TestBuffer",
                                          name => $appender_name);
  }
  
  1;
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::JavaMap::TestBuffer - wraps Log::Log4perl::Appender::TestBuffer
  
  =head1 SYNOPSIS
  
  =head1 DESCRIPTION
  
  Just for testing the Java mapping.
  
  =head1 SEE ALSO
  
  http://jakarta.apache.org/log4j/docs/
  
  Log::Log4perl::Javamap
  
  Log::Dispatch::Screen
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_JAVAMAP_TESTBUFFER

    $main::fatpacked{"Log/Log4perl/Layout.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_LAYOUT';
  package Log::Log4perl::Layout;
  
  
  use Log::Log4perl::Layout::SimpleLayout;
  use Log::Log4perl::Layout::PatternLayout;
  use Log::Log4perl::Layout::PatternLayout::Multiline;
  
  
  ####################################################
  sub appender_name {
  ####################################################
      my ($self, $arg) = @_;
  
      if ($arg) {
          die "setting appender_name unimplemented until it makes sense";
      }
      return $self->{appender_name};
  }
  
  
  ##################################################
  sub define {
  ##################################################
      ;  #subclasses may implement
  }
  
  
  ##################################################
  sub render {
  ##################################################
      die "subclass must implement render";
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Layout - Log4perl Layout Virtual Base Class
  
  =head1 SYNOPSIS
  
      # Not to be used directly, see below
  
  =head1 DESCRIPTION
  
  C<Log::Log4perl::Layout> is a virtual base class for the two currently 
  implemented layout types
  
      Log::Log4perl::Layout::SimpleLayout
      Log::Log4perl::Layout::PatternLayout
  
  Unless you're implementing a new layout class for Log4perl, you shouldn't
  use this class directly, but rather refer to
  L<Log::Log4perl::Layout::SimpleLayout> or 
  L<Log::Log4perl::Layout::PatternLayout>.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_LAYOUT

    $main::fatpacked{"Log/Log4perl/Layout/NoopLayout.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_LAYOUT_NOOPLAYOUT';
  ##################################################
  package Log::Log4perl::Layout::NoopLayout;
  ##################################################
  
  
  ##################################################
  sub new {
  ##################################################
      my $class = shift;
      $class = ref ($class) || $class;
  
      my $self = {
          format      => undef,
          info_needed => {},
          stack       => [],
      };
  
      bless $self, $class;
  
      return $self;
  }
  
  ##################################################
  sub render {
  ##################################################
      #my($self, $message, $category, $priority, $caller_level) = @_;
      return $_[1];;
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Layout::NoopLayout - Pass-thru Layout
  
  =head1 SYNOPSIS
  
    use Log::Log4perl::Layout::NoopLayout;
    my $layout = Log::Log4perl::Layout::NoopLayout->new();
  
  =head1 DESCRIPTION
  
  This is a no-op layout, returns the logging message unaltered,
  useful for implementing the DBI logger.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_LAYOUT_NOOPLAYOUT

    $main::fatpacked{"Log/Log4perl/Layout/PatternLayout.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_LAYOUT_PATTERNLAYOUT';
  ##################################################
  package Log::Log4perl::Layout::PatternLayout;
  ##################################################
  
  use 5.006;
  use strict;
  use warnings;
  
  use constant _INTERNAL_DEBUG => 0;
  
  use Carp;
  use Log::Log4perl::Util;
  use Log::Log4perl::Level;
  use Log::Log4perl::DateFormat;
  use Log::Log4perl::NDC;
  use Log::Log4perl::MDC;
  use Log::Log4perl::Util::TimeTracker;
  use File::Spec;
  use File::Basename;
  
  our $TIME_HIRES_AVAILABLE_WARNED = 0;
  our $HOSTNAME;
  our %GLOBAL_USER_DEFINED_CSPECS = ();
  
  our $CSPECS = 'cCdFHIlLmMnpPrRtTxX%';
  
  BEGIN {
      # Check if we've got Sys::Hostname. If not, just punt.
      $HOSTNAME = "unknown.host";
      if(Log::Log4perl::Util::module_available("Sys::Hostname")) {
          require Sys::Hostname;
          $HOSTNAME = Sys::Hostname::hostname();
      }
  }
  
  use base qw(Log::Log4perl::Layout);
  
  no strict qw(refs);
  
  ##################################################
  sub new {
  ##################################################
      my $class = shift;
      $class = ref ($class) || $class;
  
      my $options       = ref $_[0] eq "HASH" ? shift : {};
      my $layout_string = @_ ? shift : '%m%n';
      
      my $self = {
          format                => undef,
          info_needed           => {},
          stack                 => [],
          CSPECS                => $CSPECS,
          dontCollapseArrayRefs => $options->{dontCollapseArrayRefs}{value},
          last_time             => undef,
          undef_column_value    => 
              (exists $options->{ undef_column_value } 
                  ? $options->{ undef_column_value } 
                  : "[undef]"),
      };
  
      $self->{timer} = Log::Log4perl::Util::TimeTracker->new(
          time_function => $options->{time_function}
      );
  
      if(exists $options->{ConversionPattern}->{value}) {
          $layout_string = $options->{ConversionPattern}->{value};
      }
  
      if(exists $options->{message_chomp_before_newline}) {
          $self->{message_chomp_before_newline} = 
            $options->{message_chomp_before_newline}->{value};
      } else {
          $self->{message_chomp_before_newline} = 1;
      }
  
      bless $self, $class;
  
      #add the global user-defined cspecs
      foreach my $f (keys %GLOBAL_USER_DEFINED_CSPECS){
              #add it to the list of letters
          $self->{CSPECS} .= $f;
               #for globals, the coderef is already evaled, 
          $self->{USER_DEFINED_CSPECS}{$f} = $GLOBAL_USER_DEFINED_CSPECS{$f};
      }
  
      #add the user-defined cspecs local to this appender
      foreach my $f (keys %{$options->{cspec}}){
          $self->add_layout_cspec($f, $options->{cspec}{$f}{value});
      }
  
      # non-portable line breaks
      $layout_string =~ s/\\n/\n/g;
      $layout_string =~ s/\\r/\r/g;
  
      $self->define($layout_string);
  
      return $self;
  }
  
  ##################################################
  sub define {
  ##################################################
      my($self, $format) = @_;
  
          # If the message contains a %m followed by a newline,
          # make a note of that so that we can cut a superfluous 
          # \n off the message later on
      if($self->{message_chomp_before_newline} and $format =~ /%m%n/) {
          $self->{message_chompable} = 1;
      } else {
          $self->{message_chompable} = 0;
      }
  
      # Parse the format
      $format =~ s/%(-?\d*(?:\.\d+)?) 
                         ([$self->{CSPECS}])
                         (?:{(.*?)})*/
                         rep($self, $1, $2, $3);
                        /gex;
  
      $self->{printformat} = $format;
  }
  
  ##################################################
  sub rep {
  ##################################################
      my($self, $num, $op, $curlies) = @_;
  
      return "%%" if $op eq "%";
  
      # If it's a %d{...} construct, initialize a simple date
      # format formatter, so that we can quickly render later on.
      # If it's just %d, assume %d{yyyy/MM/dd HH:mm:ss}
      if($op eq "d") {
          if(defined $curlies) {
              $curlies = Log::Log4perl::DateFormat->new($curlies);
          } else {
              $curlies = Log::Log4perl::DateFormat->new("yyyy/MM/dd HH:mm:ss");
          }
      } elsif($op eq "m") {
          $curlies = $self->curlies_csv_parse($curlies);
      }
  
      push @{$self->{stack}}, [$op, $curlies];
  
      $self->{info_needed}->{$op}++;
  
      return "%${num}s";
  }
  
  ###########################################
  sub curlies_csv_parse {
  ###########################################
      my($self, $curlies) = @_;
  
      my $data = {};
  
      if(defined $curlies and length $curlies) {
          $curlies =~ s/\s//g;
  
          for my $field (split /,/, $curlies) {
              my($key, $value) = split /=/, $field;
              $data->{$key} = $value;
          }
      }
  
      return $data;
  }
  
  ##################################################
  sub render {
  ##################################################
      my($self, $message, $category, $priority, $caller_level) = @_;
  
      $caller_level = 0 unless defined  $caller_level;
  
      my %info    = ();
  
      $info{m}    = $message;
          # See 'define'
      chomp $info{m} if $self->{message_chompable};
  
      my @results = ();
  
      my $caller_offset = Log::Log4perl::caller_depth_offset( $caller_level );
  
      if($self->{info_needed}->{L} or
         $self->{info_needed}->{F} or
         $self->{info_needed}->{C} or
         $self->{info_needed}->{l} or
         $self->{info_needed}->{M} or
         $self->{info_needed}->{T} or
         0
        ) {
  
          my ($package, $filename, $line, 
              $subroutine, $hasargs,
              $wantarray, $evaltext, $is_require, 
              $hints, $bitmask) = caller($caller_offset);
  
          # If caller() choked because of a whacko caller level,
          # correct undefined values to '[undef]' in order to prevent 
          # warning messages when interpolating later
          unless(defined $bitmask) {
              for($package, 
                  $filename, $line,
                  $subroutine, $hasargs,
                  $wantarray, $evaltext, $is_require,
                  $hints, $bitmask) {
                  $_ = '[undef]' unless defined $_;
              }
          }
  
          $info{L} = $line;
          $info{F} = $filename;
          $info{C} = $package;
  
          if($self->{info_needed}->{M} or
             $self->{info_needed}->{l} or
             0) {
              # To obtain the name of the subroutine which triggered the 
              # logger, we need to go one additional level up.
              my $levels_up = 1; 
              {
                  my @callinfo = caller($caller_offset+$levels_up);
  
                  if(_INTERNAL_DEBUG) {
                      callinfo_dump( $caller_offset, \@callinfo );
                  }
  
                  $subroutine = $callinfo[3];
                      # If we're inside an eval, go up one level further.
                  if(defined $subroutine and
                     $subroutine eq "(eval)") {
                      print "Inside an eval, one up\n" if _INTERNAL_DEBUG;
                      $levels_up++;
                      redo;
                  }
              }
              $subroutine = "main::" unless $subroutine;
              print "Subroutine is '$subroutine'\n" if _INTERNAL_DEBUG;
              $info{M} = $subroutine;
              $info{l} = "$subroutine $filename ($line)";
          }
      }
  
      $info{X} = "[No curlies defined]";
      $info{x} = Log::Log4perl::NDC->get() if $self->{info_needed}->{x};
      $info{c} = $category;
      $info{d} = 1; # Dummy value, corrected later
      $info{n} = "\n";
      $info{p} = $priority;
      $info{P} = $$;
      $info{H} = $HOSTNAME;
  
      my $current_time;
  
      if($self->{info_needed}->{r} or $self->{info_needed}->{R}) {
          if(!$TIME_HIRES_AVAILABLE_WARNED++ and 
             !$self->{timer}->hires_available()) {
              warn "Requested %r/%R pattern without installed Time::HiRes\n";
          }
          $current_time = [$self->{timer}->gettimeofday()];
      }
  
      if($self->{info_needed}->{r}) {
          $info{r} = $self->{timer}->milliseconds( $current_time );
      }
      if($self->{info_needed}->{R}) {
          $info{R} = $self->{timer}->delta_milliseconds( $current_time );
      }
  
          # Stack trace wanted?
      if($self->{info_needed}->{T}) {
          local $Carp::CarpLevel =
                $Carp::CarpLevel + $caller_offset;
          my $mess = Carp::longmess(); 
          chomp($mess);
          # $mess =~ s/(?:\A\s*at.*\n|^\s*Log::Log4perl.*\n|^\s*)//mg;
          $mess =~ s/(?:\A\s*at.*\n|^\s*)//mg;
          $mess =~ s/\n/, /g;
          $info{T} = $mess;
      }
  
          # As long as they're not implemented yet ..
      $info{t} = "N/A";
  
          # Iterate over all info fields on the stack
      for my $e (@{$self->{stack}}) {
          my($op, $curlies) = @$e;
  
          my $result;
  
          if(exists $self->{USER_DEFINED_CSPECS}->{$op}) {
              next unless $self->{info_needed}->{$op};
              $self->{curlies} = $curlies;
              $result = $self->{USER_DEFINED_CSPECS}->{$op}->($self, 
                                $message, $category, $priority, 
                                $caller_offset+1);
          } elsif(exists $info{$op}) {
              $result = $info{$op};
              if($curlies) {
                  $result = $self->curly_action($op, $curlies, $info{$op},
                                                $self->{printformat}, \@results);
              } else {
                  # just for %d
                  if($op eq 'd') {
                      $result = $info{$op}->format($self->{timer}->gettimeofday());
                  }
              }
          } else {
              warn "Format %'$op' not implemented (yet)";
              $result = "FORMAT-ERROR";
          }
  
          $result = $self->{undef_column_value} unless defined $result;
          push @results, $result;
      }
  
        # dbi appender needs that
      if( scalar @results == 1 and
          !defined $results[0] ) {
          return undef;
      }
  
      return (sprintf $self->{printformat}, @results);
  }
  
  ##################################################
  sub curly_action {
  ##################################################
      my($self, $ops, $curlies, $data, $printformat, $results) = @_;
  
      if($ops eq "c") {
          $data = shrink_category($data, $curlies);
      } elsif($ops eq "C") {
          $data = shrink_category($data, $curlies);
      } elsif($ops eq "X") {
          $data = Log::Log4perl::MDC->get($curlies);
      } elsif($ops eq "d") {
          $data = $curlies->format( $self->{timer}->gettimeofday() );
      } elsif($ops eq "M") {
          $data = shrink_category($data, $curlies);
      } elsif($ops eq "m") {
          if(exists $curlies->{chomp}) {
              chomp $data;
          }
          if(exists $curlies->{indent}) {
              if(defined $curlies->{indent}) {
                    # fixed indent
                  $data =~ s/\n/ "\n" . (" " x $curlies->{indent})/ge;
              } else {
                    # indent on the lead-in
                  no warnings; # trailing array elements are undefined
                  my $indent = length sprintf $printformat, @$results;
                  $data =~ s/\n/ "\n" . (" " x $indent)/ge;
              }
          }
      } elsif($ops eq "F") {
          my @parts = File::Spec->splitdir($data);
              # Limit it to max curlies entries
          if(@parts > $curlies) {
              splice @parts, 0, @parts - $curlies;
          }
          $data = File::Spec->catfile(@parts);
      } elsif($ops eq "p") {
          $data = substr $data, 0, $curlies;
      }
  
      return $data;
  }
  
  ##################################################
  sub shrink_category {
  ##################################################
      my($category, $len) = @_;
  
      my @components = split /\.|::/, $category;
  
      if(@components > $len) {
          splice @components, 0, @components - $len;
          $category = join '.', @components;
      } 
  
      return $category;
  }
  
  ##################################################
  sub add_global_cspec {
  ##################################################
  # This is a Class method.
  # Accepts a coderef or text
  ##################################################
  
      unless($Log::Log4perl::ALLOW_CODE_IN_CONFIG_FILE) {
          die "\$Log::Log4perl::ALLOW_CODE_IN_CONFIG_FILE setting " .
              "prohibits user defined cspecs";
      }
  
      my ($letter, $perlcode) = @_;
  
      croak "Illegal value '$letter' in call to add_global_cspec()"
          unless ($letter =~ /^[a-zA-Z]$/);
  
      croak "Missing argument for perlcode for 'cspec.$letter' ".
            "in call to add_global_cspec()"
          unless $perlcode;
  
      croak "Please don't redefine built-in cspecs [$CSPECS]\n".
            "like you do for \"cspec.$letter\"\n "
          if ($CSPECS =~/$letter/);
  
      if (ref $perlcode eq 'CODE') {
          $GLOBAL_USER_DEFINED_CSPECS{$letter} = $perlcode;
  
      }elsif (! ref $perlcode){
          
          $GLOBAL_USER_DEFINED_CSPECS{$letter} = 
              Log::Log4perl::Config::compile_if_perl($perlcode);
  
          if ($@) {
              die qq{Compilation failed for your perl code for }.
                  qq{"log4j.PatternLayout.cspec.$letter":\n}.
                  qq{This is the error message: \t$@\n}.
                  qq{This is the code that failed: \n$perlcode\n};
          }
  
          croak "eval'ing your perlcode for 'log4j.PatternLayout.cspec.$letter' ".
                "doesn't return a coderef \n".
                "Here is the perl code: \n\t$perlcode\n "
              unless (ref $GLOBAL_USER_DEFINED_CSPECS{$letter} eq 'CODE');
  
      }else{
          croak "I don't know how to handle perlcode=$perlcode ".
                "for 'cspec.$letter' in call to add_global_cspec()";
      }
  }
  
  ##################################################
  sub add_layout_cspec {
  ##################################################
  # object method
  # adds a cspec just for this layout
  ##################################################
      my ($self, $letter, $perlcode) = @_;
  
      unless($Log::Log4perl::ALLOW_CODE_IN_CONFIG_FILE) {
          die "\$Log::Log4perl::ALLOW_CODE_IN_CONFIG_FILE setting " .
              "prohibits user defined cspecs";
      }
  
      croak "Illegal value '$letter' in call to add_layout_cspec()"
          unless ($letter =~ /^[a-zA-Z]$/);
  
      croak "Missing argument for perlcode for 'cspec.$letter' ".
            "in call to add_layout_cspec()"
          unless $perlcode;
  
      croak "Please don't redefine built-in cspecs [$CSPECS] \n".
            "like you do for 'cspec.$letter'"
          if ($CSPECS =~/$letter/);
  
      if (ref $perlcode eq 'CODE') {
  
          $self->{USER_DEFINED_CSPECS}{$letter} = $perlcode;
  
      }elsif (! ref $perlcode){
          
          $self->{USER_DEFINED_CSPECS}{$letter} =
              Log::Log4perl::Config::compile_if_perl($perlcode);
  
          if ($@) {
              die qq{Compilation failed for your perl code for }.
                  qq{"cspec.$letter":\n}.
                  qq{This is the error message: \t$@\n}.
                  qq{This is the code that failed: \n$perlcode\n};
          }
          croak "eval'ing your perlcode for 'cspec.$letter' ".
                "doesn't return a coderef \n".
                "Here is the perl code: \n\t$perlcode\n "
              unless (ref $self->{USER_DEFINED_CSPECS}{$letter} eq 'CODE');
  
  
      }else{
          croak "I don't know how to handle perlcode=$perlcode ".
                "for 'cspec.$letter' in call to add_layout_cspec()";
      }
  
      $self->{CSPECS} .= $letter;
  }
  
  ###########################################
  sub callinfo_dump {
  ###########################################
      my($level, $info) = @_;
  
      my @called_by = caller(0);
  
      # Just for internal debugging
      $called_by[1] = basename $called_by[1];
      print "caller($level) at $called_by[1]-$called_by[2] returned ";
  
      my @by_idx;
  
      # $info->[1] = basename $info->[1] if defined $info->[1];
  
      my $i = 0;
      for my $field (qw(package filename line subroutine hasargs
                        wantarray evaltext is_require hints bitmask)) {
          $by_idx[$i] = $field;
          $i++;
      }
  
      $i = 0;
      for my $value (@$info) {
          my $field = $by_idx[ $i ];
          print "$field=", 
                (defined $info->[$i] ? $info->[$i] : "[undef]"),
                " ";
          $i++;
      }
  
      print "\n";
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Layout::PatternLayout - Pattern Layout
  
  =head1 SYNOPSIS
  
    use Log::Log4perl::Layout::PatternLayout;
  
    my $layout = Log::Log4perl::Layout::PatternLayout->new(
                                                     "%d (%F:%L)> %m");
  
  
  =head1 DESCRIPTION
  
  Creates a pattern layout according to
  http://jakarta.apache.org/log4j/docs/api/org/apache/log4j/PatternLayout.html
  and a couple of Log::Log4perl-specific extensions.
  
  The C<new()> method creates a new PatternLayout, specifying its log
  format. The format
  string can contain a number of placeholders which will be
  replaced by the logging engine when it's time to log the message:
  
      %c Category of the logging event.
      %C Fully qualified package (or class) name of the caller
      %d Current date in yyyy/MM/dd hh:mm:ss format
      %d{...} Current date in customized format (see below)
      %F File where the logging event occurred
      %H Hostname (if Sys::Hostname is available)
      %l Fully qualified name of the calling method followed by the
         callers source the file name and line number between 
         parentheses.
      %L Line number within the file where the log statement was issued
      %m The message to be logged
      %m{chomp} Log message, stripped off a trailing newline
      %m{indent} Log message, multi-lines indented so they line up with first
      %m{indent=n} Log message, multi-lines indented by n spaces
      %M Method or function where the logging request was issued
      %n Newline (OS-independent)
      %p Priority of the logging event (%p{1} shows the first letter)
      %P pid of the current process
      %r Number of milliseconds elapsed from program start to logging 
         event
      %R Number of milliseconds elapsed from last logging event to
         current logging event 
      %T A stack trace of functions called
      %x The topmost NDC (see below)
      %X{key} The entry 'key' of the MDC (see below)
      %% A literal percent (%) sign
  
  NDC and MDC are explained in L<Log::Log4perl/"Nested Diagnostic Context (NDC)">
  and L<Log::Log4perl/"Mapped Diagnostic Context (MDC)">.
  
  The granularity of time values is milliseconds if Time::HiRes is available.
  If not, only full seconds are used.
  
  Every once in a while, someone uses the "%m%n" pattern and
  additionally provides an extra newline in the log message (e.g.
  C<-E<gt>log("message\n")>. To avoid printing an extra newline in
  this case, the PatternLayout will chomp the message, printing only
  one newline. This option can be controlled by PatternLayout's
  C<message_chomp_before_newline> option. See L<Advanced options>
  for details.
  
  =head2 Quantify placeholders
  
  All placeholders can be extended with formatting instructions,
  just like in I<printf>:
  
      %20c   Reserve 20 chars for the category, right-justify and fill
             with blanks if it is shorter
      %-20c  Same as %20c, but left-justify and fill the right side 
             with blanks
      %09r   Zero-pad the number of milliseconds to 9 digits
      %.8c   Specify the maximum field with and have the formatter
             cut off the rest of the value
  
  =head2 Fine-tuning with curlies
  
  Some placeholders have special functions defined if you add curlies 
  with content after them:
  
      %c{1}  Just show the right-most category compontent, useful in large
             class hierarchies (Foo::Baz::Bar -> Bar)
      %c{2}  Just show the two right most category components
             (Foo::Baz::Bar -> Baz::Bar)
  
      %F     Display source file including full path
      %F{1}  Just display filename
      %F{2}  Display filename and last path component (dir/test.log)
      %F{3}  Display filename and last two path components (d1/d2/test.log)
  
      %M     Display fully qualified method/function name
      %M{1}  Just display method name (foo)
      %M{2}  Display method name and last path component (main::foo)
  
  In this way, you're able to shrink the displayed category or
  limit file/path components to save space in your logs.
  
  =head2 Fine-tune the date
  
  If you're not happy with the default %d format for the date which 
  looks like
  
      yyyy/MM/DD HH:mm:ss
  
  (which is slightly different from Log4j which uses C<yyyy-MM-dd HH:mm:ss,SSS>)
  you're free to fine-tune it in order to display only certain characteristics
  of a date, according to the SimpleDateFormat in the Java World
  (http://java.sun.com/j2se/1.3/docs/api/java/text/SimpleDateFormat.html):
  
      %d{HH:mm}     "23:45" -- Just display hours and minutes
      %d{yy, EEEE}  "02, Monday" -- Just display two-digit year 
                                    and spelled-out weekday
  Here's the symbols and their meaning, according to the SimpleDateFormat
  specification:
  
      Symbol   Meaning                 Presentation     Example
      ------   -------                 ------------     -------
      G        era designator          (Text)           AD
      y        year                    (Number)         1996 
      M        month in year           (Text & Number)  July & 07
      d        day in month            (Number)         10
      h        hour in am/pm (1-12)    (Number)         12
      H        hour in day (0-23)      (Number)         0
      m        minute in hour          (Number)         30
      s        second in minute        (Number)         55
      E        day in week             (Text)           Tuesday
      D        day in year             (Number)         189
      a        am/pm marker            (Text)           PM
      e        epoch seconds           (Number)         1315011604
  
      (Text): 4 or more pattern letters--use full form, < 4--use short or 
              abbreviated form if one exists. 
  
      (Number): the minimum number of digits. Shorter numbers are 
                zero-padded to this amount. Year is handled 
                specially; that is, if the count of 'y' is 2, the 
                Year will be truncated to 2 digits. 
  
      (Text & Number): 3 or over, use text, otherwise use number. 
  
  There's also a bunch of pre-defined formats:
  
      %d{ABSOLUTE}   "HH:mm:ss,SSS"
      %d{DATE}       "dd MMM yyyy HH:mm:ss,SSS"
      %d{ISO8601}    "yyyy-MM-dd HH:mm:ss,SSS"
  
  =head2 Custom cspecs
  
  First of all, "cspecs" is short for "conversion specifiers", which is 
  the log4j and the printf(3) term for what Mike is calling "placeholders."
  I suggested "cspecs" for this part of the api before I saw that Mike was 
  using "placeholders" consistently in the log4perl documentation.  Ah, the
  joys of collaboration ;=) --kg
  
  If the existing corpus of placeholders/cspecs isn't good enough for you,
  you can easily roll your own:
  
      #'U' a global user-defined cspec     
      log4j.PatternLayout.cspec.U = sub { return "UID: $< "}
      
      #'K' cspec local to appndr1                 (pid in hex)
      log4j.appender.appndr1.layout.cspec.K = sub { return sprintf "%1x", $$}
      
      #and now you can use them
      log4j.appender.appndr1.layout.ConversionPattern = %K %U %m%n
  
  The benefit of this approach is that you can define and use the cspecs 
  right next to each other in the config file.
  
  If you're an API kind of person, there's also this call:
  
      Log::Log4perl::Layout::PatternLayout::
                      add_global_cspec('Z', sub {'zzzzzzzz'}); #snooze?
  
  When the log message is being put together, your anonymous sub 
  will be called with these arguments:
  
      ($layout, $message, $category, $priority, $caller_level);
      
      layout: the PatternLayout object that called it
      message: the logging message (%m)
      category: e.g. groceries.beverages.adult.beer.schlitz
      priority: e.g. DEBUG|WARN|INFO|ERROR|FATAL
      caller_level: how many levels back up the call stack you have 
          to go to find the caller
  
  Please note that the subroutines you're defining in this way are going
  to be run in the C<main> namespace, so be sure to fully qualify functions
  and variables if they're located in different packages. I<Also make sure
  these subroutines aren't using Log4perl, otherwise Log4perl will enter 
  an infinite recursion.>
  
  With Log4perl 1.20 and better, cspecs can be written with parameters in
  curly braces. Writing something like
  
      log4perl.appender.Screen.layout.ConversionPattern = %U{user} %U{id} %m%n
  
  will cause the cspec function defined for %U to be called twice, once
  with the parameter 'user' and then again with the parameter 'id', 
  and the placeholders in the cspec string will be replaced with
  the respective return values.
  
  The parameter value is available in the 'curlies' entry of the first
  parameter passed to the subroutine (the layout object reference). 
  So, if you wanted to map %U{xxx} to entries in the POE session hash, 
  you'd write something like:
  
     log4perl.PatternLayout.cspec.U = sub { \
       POE::Kernel->get_active_session->get_heap()->{ $_[0]->{curlies} } }
                                            
  B<SECURITY NOTE>
    
  This feature means arbitrary perl code can be embedded in the config file. 
  In the rare case where the people who have access to your config file are
  different from the people who write your code and shouldn't have execute
  rights, you might want to set
  
      $Log::Log4perl::Config->allow_code(0);
  
  before you call init().  Alternatively you can supply a restricted set of
  Perl opcodes that can be embedded in the config file as described in
  L<Log::Log4perl/"Restricting what Opcodes can be in a Perl Hook">.
    
  =head2 Advanced Options
  
  The constructor of the C<Log::Log4perl::Layout::PatternLayout> class
  takes an optional hash reference as a first argument to specify
  additional options in order to (ab)use it in creative ways:
  
    my $layout = Log::Log4perl::Layout::PatternLayout->new(
      { time_function       => \&my_time_func,
      }, 
      "%d (%F:%L)> %m");
  
  Here's a list of parameters:
  
  =over 4
  
  =item time_function
  
  Takes a reference to a function returning the time for the time/date
  fields, either in seconds
  since the epoch or as an array, carrying seconds and 
  microseconds, just like C<Time::HiRes::gettimeofday> does.
  
  =item message_chomp_before_newline
  
  If a layout contains the pattern "%m%n" and the message ends with a newline,
  PatternLayout will chomp the message, to prevent printing two newlines. 
  If this is not desired, and you want two newlines in this case, 
  the feature can be turned off by setting the
  C<message_chomp_before_newline> option to a false value:
  
    my $layout = Log::Log4perl::Layout::PatternLayout->new(
        { message_chomp_before_newline => 0
        }, 
        "%d (%F:%L)> %m%n");
  
  In a Log4perl configuration file, the feature can be turned off like this:
  
      log4perl.appender.App.layout   = PatternLayout
      log4perl.appender.App.layout.ConversionPattern = %d %m%n
        # Yes, I want two newlines
      log4perl.appender.App.layout.message_chomp_before_newline = 0
  
  =back
  
  =head2 Getting rid of newlines
  
  If your code contains logging statements like 
  
        # WRONG, don't do that!
      $logger->debug("Some message\n");
  
  then it's usually best to strip the newlines from these calls. As explained
  in L<Log::Log4perl/Logging newlines>, logging statements should never contain
  newlines, but rely on appender layouts to add necessary newlines instead.
  
  If changing the code is not an option, use the special PatternLayout 
  placeholder %m{chomp} to refer to the message excluding a trailing 
  newline:
  
      log4perl.appender.App.layout.ConversionPattern = %d %m{chomp}%n
  
  This will add a single newline to every message, regardless if it
  complies with the Log4perl newline guidelines or not (thanks to 
  Tim Bunce for this idea).
  
  =head2 Multi Lines
  
  If a log message consists of several lines, like
  
      $logger->debug("line1\nline2\nline3");
  
  then by default, they get logged like this (assuming the the layout is
  set to "%d>%m%n"):
  
        # layout %d>%m%n
      2014/07/27 12:46:16>line1
      line2
      line3
  
  If you'd rather have the messages aligned like
  
        # layout %d>%m{indent}%n
      2014/07/27 12:46:16>line1
                          line2
                          line3
  
  then use the C<%m{indent}> option for the %m specifier. This option
  can also take a fixed value, as in C<%m{indent=2}>, which indents
  subsequent lines by two spaces:
  
        # layout %d>%m{indent=2}%n
      2014/07/27 12:46:16>line1
        line2
        line3
  
  Note that you can still add the C<chomp> option for the C<%m> specifier
  in this case (see above what it does), simply add it after a 
  separating comma, like in C<%m{indent=2,chomp}>.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_LAYOUT_PATTERNLAYOUT

    $main::fatpacked{"Log/Log4perl/Layout/PatternLayout/Multiline.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_LAYOUT_PATTERNLAYOUT_MULTILINE';
  #!/usr/bin/perl
  
  package Log::Log4perl::Layout::PatternLayout::Multiline;
  use base qw(Log::Log4perl::Layout::PatternLayout);
  
  ###########################################
  sub render {
  ###########################################
      my($self, $message, $category, $priority, $caller_level) = @_;
  
      my @messages = split /\r?\n/, $message;
  
      $caller_level = 0 unless defined $caller_level;
  
      my $result = '';
  
      for my $msg ( @messages ) {
          $result .= $self->SUPER::render(
              $msg, $category, $priority, $caller_level + 1
          );
      }
      return $result;
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
      Log::Log4perl::Layout::PatternLayout::Multiline
  
  =head1 SYNOPSIS
  
      use Log::Log4perl::Layout::PatternLayout::Multiline;
  
      my $layout = Log::Log4perl::Layout::PatternLayout::Multiline->new(
          "%d (%F:%L)> %m");
  
  =head1 DESCRIPTION
  
  C<Log::Log4perl::Layout::PatternLayout::Multiline> is a subclass
  of Log4perl's PatternLayout and is helpful if you send multiline
  messages to your appenders which appear as
  
      2007/04/04 23:59:01 This is
      a message with
      multiple lines
  
  and you want them to appear as 
  
      2007/04/04 23:59:01 This is
      2007/04/04 23:59:01 a message with
      2007/04/04 23:59:01 multiple lines
  
  instead. This layout class simply splits up the incoming message into
  several chunks split by line breaks and renders them with PatternLayout
  just as if it had arrived in separate chunks in the first place.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_LAYOUT_PATTERNLAYOUT_MULTILINE

    $main::fatpacked{"Log/Log4perl/Layout/SimpleLayout.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_LAYOUT_SIMPLELAYOUT';
  ##################################################
  package Log::Log4perl::Layout::SimpleLayout;
  ##################################################
  # as documented in
  # http://jakarta.apache.org/log4j/docs/api/org/apache/log4j/SimpleLayout.html
  ##################################################
  
  use 5.006;
  use strict;
  use warnings;
  use Log::Log4perl::Level;
  
  no strict qw(refs);
  use base qw(Log::Log4perl::Layout);
  
  ##################################################
  sub new {
  ##################################################
      my $class = shift;
      $class = ref ($class) || $class;
  
      my $self = {
          format      => undef,
          info_needed => {},
          stack       => [],
      };
  
      bless $self, $class;
  
      return $self;
  }
  
  ##################################################
  sub render {
  ##################################################
      my($self, $message, $category, $priority, $caller_level) = @_;
  
      return "$priority - $message\n";
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Layout::SimpleLayout - Simple Layout
  
  =head1 SYNOPSIS
  
    use Log::Log4perl::Layout::SimpleLayout;
    my $layout = Log::Log4perl::Layout::SimpleLayout->new();
  
  =head1 DESCRIPTION
  
  This class implements the C<log4j> simple layout format -- it basically 
  just prints the message priority and the message, that's all.
  Check 
  http://jakarta.apache.org/log4j/docs/api/org/apache/log4j/SimpleLayout.html
  for details.
  
  =head1 SEE ALSO
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_LAYOUT_SIMPLELAYOUT

    $main::fatpacked{"Log/Log4perl/Level.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_LEVEL';
  ###############r###################################
  package Log::Log4perl::Level;
  ##################################################
  
  use 5.006;
  use strict;
  use warnings;
  use Carp;
  
  # log4j, for whatever reason, puts 0 as all and MAXINT as OFF.
  # this seems less optimal, as more logging would imply a higher
  # level. But oh well. Probably some brokenness that has persisted. :)
  use constant ALL_INT   => 0;
  use constant TRACE_INT =>  5000;
  use constant DEBUG_INT => 10000;
  use constant INFO_INT  => 20000;
  use constant WARN_INT  => 30000;
  use constant ERROR_INT => 40000;
  use constant FATAL_INT => 50000;
  use constant OFF_INT   => (2 ** 31) - 1;
  
  no strict qw(refs);
  use vars qw(%PRIORITY %LEVELS %SYSLOG %L4P_TO_LD);
  
  %PRIORITY = (); # unless (%PRIORITY);
  %LEVELS = () unless (%LEVELS);
  %SYSLOG = () unless (%SYSLOG);
  %L4P_TO_LD = () unless (%L4P_TO_LD);
  
  sub add_priority {
    my ($prio, $intval, $syslog, $log_dispatch_level) = @_;
    $prio = uc($prio); # just in case;
  
    $PRIORITY{$prio}    = $intval;
    $LEVELS{$intval}    = $prio;
  
    # Set up the mapping between Log4perl integer levels and 
    # Log::Dispatch levels
    # Note: Log::Dispatch uses the following levels:
    # 0 debug
    # 1 info
    # 2 notice
    # 3 warning
    # 4 error
    # 5 critical
    # 6 alert
    # 7 emergency
  
        # The equivalent Log::Dispatch level is optional, set it to 
        # the highest value (7=emerg) if it's not provided.
    $log_dispatch_level = 7 unless defined $log_dispatch_level;
    
    $L4P_TO_LD{$prio}  = $log_dispatch_level;
  
    $SYSLOG{$prio}      = $syslog if defined($syslog);
  }
  
  # create the basic priorities
  add_priority("OFF",   OFF_INT,   -1, 7);
  add_priority("FATAL", FATAL_INT,  0, 7);
  add_priority("ERROR", ERROR_INT,  3, 4);
  add_priority("WARN",  WARN_INT,   4, 3);
  add_priority("INFO",  INFO_INT,   6, 1);
  add_priority("DEBUG", DEBUG_INT,  7, 0);
  add_priority("TRACE", TRACE_INT,  8, 0);
  add_priority("ALL",   ALL_INT,    8, 0);
  
  # we often sort numerically, so a helper func for readability
  sub numerically {$a <=> $b}
  
  ###########################################
  sub import {
  ###########################################
      my($class, $namespace) = @_;
             
      if(defined $namespace) {
          # Export $OFF, $FATAL, $ERROR etc. to
          # the given namespace
          $namespace .= "::" unless $namespace =~ /::$/;
      } else {
          # Export $OFF, $FATAL, $ERROR etc. to
          # the caller's namespace
          $namespace = caller(0) . "::";
      }
  
      for my $key (keys %PRIORITY) {
          my $name  = "$namespace$key";
          my $value = $PRIORITY{$key};
          *{"$name"} = \$value;
  	my $nameint = "$namespace${key}_INT";
  	my $func = uc($key) . "_INT";
  	*{"$nameint"} = \&$func;
      }
  }
  
  ##################################################
  sub new { 
  ##################################################
      # We don't need any of this class nonsense
      # in Perl, because we won't allow subclassing
      # from this. We're optimizing for raw speed.
  }
  
  ##################################################
  sub to_priority {
  # changes a level name string to a priority numeric
  ##################################################
      my($string) = @_;
  
      if(exists $PRIORITY{$string}) {
          return $PRIORITY{$string};
      }else{
          croak "level '$string' is not a valid error level (".join ('|', keys %PRIORITY),')';
      }
  }
  
  ##################################################
  sub to_level {
  # changes a priority numeric constant to a level name string 
  ##################################################
      my ($priority) = @_;
      if (exists $LEVELS{$priority}) {
          return $LEVELS{$priority}
      }else {
        croak("priority '$priority' is not a valid error level number (",
  	  join("|", sort numerically keys %LEVELS), "
            )");
      }
  
  }
  
  ##################################################
  sub to_LogDispatch_string {
  # translates into strings that Log::Dispatch recognizes
  ##################################################
      my($priority) = @_;
  
      confess "do what? no priority?" unless defined $priority;
  
      my $string;
  
      if(exists $LEVELS{$priority}) {
          $string = $LEVELS{$priority};
      }
  
          # Log::Dispatch idiosyncrasies
      if($priority == $PRIORITY{WARN}) {
          $string = "WARNING";
      }
           
      if($priority == $PRIORITY{FATAL}) {
          $string = "EMERGENCY";
      }
           
      return $string;
  }
  
  ###################################################
  sub is_valid {
  ###################################################
      my $q = shift;
  
      if ($q =~ /[A-Z]/) {
          return exists $PRIORITY{$q};
      }else{
          return $LEVELS{$q};
      }
      
  }
  
  sub get_higher_level {
      my ($old_priority, $delta) = @_;
  
      $delta ||= 1;
  
      my $new_priority = 0;
  
      foreach (1..$delta){
          #so the list is TRACE, DEBUG, INFO, WARN, ERROR, FATAL
        # but remember, the numbers go in reverse order!
          foreach my $p (sort numerically keys %LEVELS){
              if ($p > $old_priority) {
                  $new_priority = $p;
                  last;
              }
          }
          $old_priority = $new_priority;
      }
      return $new_priority;
  }
  
  sub get_lower_level {
      my ($old_priority, $delta) = @_;
  
      $delta ||= 1;
  
      my $new_priority = 0;
  
      foreach (1..$delta){
          #so the list is FATAL, ERROR, WARN, INFO, DEBUG, TRACE
        # but remember, the numbers go in reverse order!
          foreach my $p (reverse sort numerically keys %LEVELS){
              if ($p < $old_priority) {
                  $new_priority = $p;
                  last;
              }
          }
          $old_priority = $new_priority;
      }
      return $new_priority;
  }
  
  sub isGreaterOrEqual {
    my $lval = shift;
    my $rval = shift;
    
    # in theory, we should check if the above really ARE valid levels.
    # but we just use numeric comparison, since they aren't really classes.
  
    # oh, yeah, and 'cuz level ints go from 0 .. N with 0 being highest,
    # these are reversed.
    return $lval <= $rval;
  }
  
  ######################################################################
  # 
  # since the integer representation of levels is reversed from what
  # we normally want, we don't want to use < and >... instead, we
  # want to use this comparison function
  
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Level - Predefined log levels
  
  =head1 SYNOPSIS
  
    use Log::Log4perl::Level;
    print $ERROR, "\n";
  
    # -- or --
  
    use Log::Log4perl qw(:levels);
    print $ERROR, "\n";
  
  =head1 DESCRIPTION
  
  C<Log::Log4perl::Level> simply exports a predefined set of I<Log4perl> log
  levels into the caller's name space. It is used internally by 
  C<Log::Log4perl>. The following scalars are defined:
  
      $OFF
      $FATAL
      $ERROR
      $WARN
      $INFO
      $DEBUG
      $TRACE
      $ALL
  
  C<Log::Log4perl> also exports these constants into the caller's namespace
  if you pull it in providing the C<:levels> tag:
  
      use Log::Log4perl qw(:levels);
  
  This is the preferred way, there's usually no need to call 
  C<Log::Log4perl::Level> explicitly.
  
  The numerical values assigned to these constants are purely virtual,
  only used by Log::Log4perl internally and can change at any time,
  so please don't make any assumptions. You can test for numerical equality
  by directly comparing two level values, that's ok:
  
      if( get_logger()->level() == $DEBUG ) {
          print "The logger's level is DEBUG\n";
      }
  
  But if you want to figure out which of two levels is more verbose, use
  Log4perl's own comparator:
  
      if( Log::Log4perl::Level::isGreaterOrEqual( $level1, $level2 ) ) {
          print Log::Log4perl::Level::to_level( $level1 ), 
              " is equal or more verbose than ", 
              Log::Log4perl::Level::to_level( $level2 ), "\n";
      }
  
  If the caller wants to import level constants into a different namespace,
  it can be provided with the C<use> command:
  
      use Log::Log4perl::Level qw(MyNameSpace);
  
  After this C<$MyNameSpace::ERROR>, C<$MyNameSpace::INFO> etc. 
  will be defined accordingly.
  
  =head2 Numeric levels and Strings
  
  Level variables like $DEBUG or $WARN have numeric values that are 
  internal to Log4perl. Transform them to strings that can be used
  in a Log4perl configuration file, use the c<to_level()> function
  provided by Log::Log4perl::Level:
  
      use Log::Log4perl qw(:easy);
      use Log::Log4perl::Level;
  
          # prints "DEBUG"
      print Log::Log4perl::Level::to_level( $DEBUG ), "\n";
  
  To perform the reverse transformation, which takes a string like
  "DEBUG" and converts it into a constant like C<$DEBUG>, use the
  to_priority() function:
  
      use Log::Log4perl qw(:easy);
      use Log::Log4perl::Level;
  
      my $numval = Log::Log4perl::Level::to_priority( "DEBUG" );
  
  after which $numval could be used where a numerical value is required:
  
      Log::Log4perl->easy_init( $numval );
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_LEVEL

    $main::fatpacked{"Log/Log4perl/Logger.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_LOGGER';
  ##################################################
  package Log::Log4perl::Logger;
  ##################################################
  
  use 5.006;
  use strict;
  use warnings;
  
  use Log::Log4perl;
  use Log::Log4perl::Level;
  use Log::Log4perl::Layout;
  use Log::Log4perl::Appender;
  use Log::Log4perl::Appender::String;
  use Log::Log4perl::Filter;
  use Carp;
  
  $Carp::Internal{"Log::Log4perl"}++;
  $Carp::Internal{"Log::Log4perl::Logger"}++;
  
  use constant _INTERNAL_DEBUG => 0;
  
      # Initialization
  our $ROOT_LOGGER;
  our $LOGGERS_BY_NAME = {};
  our %APPENDER_BY_NAME = ();
  our $INITIALIZED = 0;
  our $NON_INIT_WARNED;
  our $DIE_DEBUG = 0;
  our $DIE_DEBUG_BUFFER = "";
      # Define the default appender that's used for formatting
      # warn/die/croak etc. messages.
  our $STRING_APP_NAME = "_l4p_warn";
  our $STRING_APP      = Log::Log4perl::Appender->new(
                            "Log::Log4perl::Appender::String",
                            name => $STRING_APP_NAME);
  $STRING_APP->layout(Log::Log4perl::Layout::PatternLayout->new("%m"));
  our $STRING_APP_CODEREF = generate_coderef([[$STRING_APP_NAME, $STRING_APP]]);
  
  __PACKAGE__->reset();
  
  ###########################################
  sub warning_render {
  ###########################################
      my($logger, @message) = @_;
  
      $STRING_APP->string("");
      $STRING_APP_CODEREF->($logger, 
                            @message, 
                            Log::Log4perl::Level::to_level($ALL));
      return $STRING_APP->string();
  }
  
  ##################################################
  sub cleanup {
  ##################################################
      # warn "Logger cleanup";
  
      # Nuke all convenience loggers to avoid them causing cleanup to 
      # be delayed until global destruction. Problem is that something like
      #     *{"DEBUG"} = sub { $logger->debug };
      # ties up a reference to $logger until global destruction, so we 
      # need to clean up all :easy shortcuts, hence freeing the last
      # logger references, to then rely on the garbage collector for cleaning
      # up the loggers.
      Log::Log4perl->easy_closure_global_cleanup();
  
      # Delete all loggers
      $LOGGERS_BY_NAME = {};
  
      # Delete the root logger
      undef $ROOT_LOGGER;
  
      # Delete all appenders
      %APPENDER_BY_NAME   = ();
  
      undef $INITIALIZED;
  }
  
  ##################################################
  sub DESTROY {
  ##################################################
      CORE::warn "Destroying logger $_[0] ($_[0]->{category})" 
              if $Log::Log4perl::CHATTY_DESTROY_METHODS;
  }
  
  ##################################################
  sub reset {
  ##################################################
      $ROOT_LOGGER        = __PACKAGE__->_new("", $OFF);
  #    $LOGGERS_BY_NAME    = {};  #leave this alone, it's used by 
                                  #reset_all_output_methods when 
                                  #the config changes
  
      %APPENDER_BY_NAME   = ();
      undef $INITIALIZED;
      undef $NON_INIT_WARNED;
      Log::Log4perl::Appender::reset();
  
      #clear out all the existing appenders
      foreach my $logger (values %$LOGGERS_BY_NAME){
          $logger->{appender_names} = [];
  
  	#this next bit deals with an init_and_watch case where a category
  	#is deleted from the config file, we need to zero out the existing
  	#loggers so ones not in the config file not continue with their old
  	#behavior --kg
          next if $logger eq $ROOT_LOGGER;
          $logger->{level} = undef;
          $logger->level();  #set it from the hierarchy
      }
  
      # Clear all filters
      Log::Log4perl::Filter::reset();
  }
  
  ##################################################
  sub _new {
  ##################################################
      my($class, $category, $level) = @_;
  
      print("_new: $class/$category/", defined $level ? $level : "undef",
            "\n") if _INTERNAL_DEBUG;
  
      die "usage: __PACKAGE__->_new(category)" unless
          defined $category;
      
      $category  =~ s/::/./g;
  
         # Have we created it previously?
      if(exists $LOGGERS_BY_NAME->{$category}) {
          print "_new: exists already\n" if _INTERNAL_DEBUG;
          return $LOGGERS_BY_NAME->{$category};
      }
  
      my $self  = {
          category  => $category,
          num_appenders => 0,
          additivity    => 1,
          level         => $level,
          layout        => undef,
                  };
  
     bless $self, $class;
  
     $level ||= $self->level();
  
          # Save it in global structure
     $LOGGERS_BY_NAME->{$category} = $self;
  
     $self->set_output_methods;
  
     print("Created logger $self ($category)\n") if _INTERNAL_DEBUG;
  
     return $self;
  }
  
  ##################################################
  sub category {
  ##################################################
     my ($self) = @_;
  
     return $self->{ category };
  }
  
  ##################################################
  sub reset_all_output_methods {
  ##################################################
      print "reset_all_output_methods: \n" if _INTERNAL_DEBUG;
  
      foreach my $loggername ( keys %$LOGGERS_BY_NAME){
          $LOGGERS_BY_NAME->{$loggername}->set_output_methods;
      }
      $ROOT_LOGGER->set_output_methods;
  }
  
  ##################################################
  sub set_output_methods {
  # Here's a big performance increase.  Instead of having the logger
  # calculate whether to log and whom to log to every time log() is called,
  # we calculate it once when the logger is created, and recalculate
  # it if the config information ever changes.
  #
  ##################################################
     my ($self) = @_;
      
     my (@appenders, %seen);
  
     my ($level) = $self->level();
  
     print "set_output_methods: $self->{category}/$level\n" if _INTERNAL_DEBUG;
  
     #collect the appenders in effect for this category    
  
     for(my $logger = $self; $logger; $logger = parent_logger($logger)) {
  
          foreach my $appender_name (@{$logger->{appender_names}}){
  
                  #only one message per appender, (configurable)
              next if $seen{$appender_name} ++ && 
                      $Log::Log4perl::one_message_per_appender;
  
              push (@appenders,     
                     [$appender_name,
                      $APPENDER_BY_NAME{$appender_name},
                     ]
              );
          }
          last unless $logger->{additivity};
      }
  
          #make a no-op coderef for inactive levels
      my $noop = generate_noop_coderef();
  
         #make a coderef
      my $coderef = (! @appenders ? $noop : &generate_coderef(\@appenders)); 
  
      my %priority = %Log::Log4perl::Level::PRIORITY; #convenience and cvs
  
     # changed to >= from <= as level ints were reversed
      foreach my $levelname (keys %priority){
          if (Log::Log4perl::Level::isGreaterOrEqual($level,
  						   $priority{$levelname}
  						   )) {
              print "  ($priority{$levelname} <= $level)\n"
                    if _INTERNAL_DEBUG;
              $self->{$levelname}      = $coderef;
              $self->{"is_$levelname"} = generate_is_xxx_coderef("1");
              print "Setting is_$levelname to 1\n" if _INTERNAL_DEBUG;
          }else{
              print "  ($priority{$levelname} > $level)\n" if _INTERNAL_DEBUG;
              $self->{$levelname}      = $noop;
              $self->{"is_$levelname"} = generate_is_xxx_coderef("0");
              print "Setting is_$levelname to 0\n" if _INTERNAL_DEBUG;
          }
  
          print("  Setting [$self] $self->{category}.$levelname to ",
                ($self->{$levelname} == $noop ? "NOOP" : 
                ("Coderef [$coderef]: " . scalar @appenders . " appenders")), 
                "\n") if _INTERNAL_DEBUG;
      }
  }
  
  ##################################################
  sub generate_coderef {
  ##################################################
      my $appenders = shift;
                      
      print "generate_coderef: ", scalar @$appenders, 
            " appenders\n" if _INTERNAL_DEBUG;
  
      my $watch_check_code = generate_watch_code("logger", 1);
  
      return sub {
        my $logger = shift;
        my $level  = pop;
  
        my $message;
        my $appenders_fired = 0;
        
        # Evaluate all parameters that need to be evaluated. Two kinds:
        #
        # (1) It's a hash like { filter => "filtername",
        #                        value  => "value" }
        #     => filtername(value)
        #
        # (2) It's a code ref
        #     => coderef()
        #
  
        $message   = [map { ref $_ eq "HASH" && 
                             exists $_->{filter} && 
                             ref $_->{filter} eq 'CODE' ?
                                 $_->{filter}->($_->{value}) :
                             ref $_ eq "CODE" ?
                                 $_->() : $_ 
                            } @_];                  
  
        print("coderef: $logger->{category}\n") if _INTERNAL_DEBUG;
  
        if(defined $Log::Log4perl::Config::WATCHER) {
            return unless $watch_check_code->($logger, @_, $level);
        }
  
        foreach my $a (@$appenders) {   #note the closure here
            my ($appender_name, $appender) = @$a;
  
            print("  Sending message '<$message->[0]>' ($level) " .
                  "to $appender_name\n") if _INTERNAL_DEBUG;
                  
            $appender->log(
                #these get passed through to Log::Dispatch
                { name    => $appender_name,
                  level   => $Log::Log4perl::Level::L4P_TO_LD{
                                 $level},   
                  message => $message,
                },
                #these we need
                $logger->{category},
                $level,
            ) and $appenders_fired++;
                # Only counting it if it returns a true value. Otherwise
                # the appender threshold might have suppressed it after all.
      
        } #end foreach appenders
      
        return $appenders_fired;
  
      }; #end coderef
  }
  
  ##################################################
  sub generate_noop_coderef {
  ##################################################
      my $watch_delay_code;
  
      # This might seem crazy at first, but even in a Log4perl noop, we
      # need to check if the configuration changed in a init_and_watch 
      # situation. Why? Say, an application is running in a loop that
      # constantly tries to issue debug() messages, but they're suppressed by
      # the current Log4perl configuration. If debug() (which is a noop
      # here) wasn't watching the configuration for changes, it would never
      # catch the case where someone bumps up the log level and expects
      # the application to pick it up and start logging debug() statements.
  
      my $watch_check_code = generate_watch_code("logger", 1);
  
      my $coderef;
  
      if(defined $Log::Log4perl::Config::WATCHER) {
          $coderef = $watch_check_code;
      } else {
          $coderef = sub { undef };
      }
  
      return $coderef;
  }
  
  ##################################################
  sub generate_is_xxx_coderef {
  ##################################################
      my($return_token) = @_;
  
      return generate_watch_code("checker", $return_token);
  }
  
  ##################################################
  sub generate_watch_code {
  ##################################################
      my($type, $return_token) = @_;
  
      print "generate_watch_code:\n" if _INTERNAL_DEBUG;
  
        # No watcher configured, return a no-op as watch code.
      if(! defined $Log::Log4perl::Config::WATCHER) {
          return sub { $return_token };
      }
  
      my $cond = generate_watch_conditional();
  
      return sub {
          print "exe_watch_code:\n" if _INTERNAL_DEBUG;
  
         if(_INTERNAL_DEBUG) {
             print "Next check: ",
               "$Log::Log4perl::Config::Watch::NEXT_CHECK_TIME ",
               " Now: ", time(), " Mod: ",
               (stat($Log::Log4perl::Config::WATCHER->file()))[9],
               "\n";
         }
  
         if( $cond->() ) {
             my $init_permitted = 1;
  
             if(exists $Log::Log4perl::Config::OPTS->{ preinit_callback } ) {
                 print "Calling preinit_callback\n" if _INTERNAL_DEBUG;
                 $init_permitted = 
                 $Log::Log4perl::Config::OPTS->{ preinit_callback }->( 
                     Log::Log4perl::Config->watcher()->file() );
                 print "Callback returned $init_permitted\n" if _INTERNAL_DEBUG;
             }
  
             if( $init_permitted ) {
                 Log::Log4perl->init_and_watch();
             } else {
                 # It was time to reinit, but init wasn't permitted.
                 # Return true, so that the logger continues as if
                 # it wasn't time to reinit.
                 return 1;
             }
  
             my $logger = shift;
             my $level  = pop;
  
             # Forward call to new configuration
             if($type eq "checker") {
                 return $logger->$level();
  
             } elsif( $type eq "logger") {
                 my $methodname = lc($level);
  
                 # Bump up the caller level by three, since
                 # we've artificially introduced additional levels.
                 local $Log::Log4perl::caller_depth =
                       $Log::Log4perl::caller_depth + 3;
  
                 # Get a new logger for the same category (the old
                 # logger might be obsolete because of the re-init)
                 $logger = Log::Log4perl::get_logger( $logger->{category} );
  
                 $logger->$methodname(@_); # send the message
                 # to the new configuration
                 return undef;     # Return false, so the logger finishes
                 # prematurely and doesn't log the same 
                 # message again.
             } else {
                 die "internal error: unknown type";
             }
         } else {
             if(_INTERNAL_DEBUG) {
                 print "Conditional returned false\n";
             }
             return $return_token;
         }
     };
  }
  
  ##################################################
  sub generate_watch_conditional {
  ##################################################
  
      if(defined $Log::Log4perl::Config::Watch::SIGNAL_CAUGHT) {
          # In this mode, we just check for the variable indicating
          # that the signal has been caught
          return sub {
              return $Log::Log4perl::Config::Watch::SIGNAL_CAUGHT;
          };
      }
  
      return sub {
          return 
              ( time() > $Log::Log4perl::Config::Watch::NEXT_CHECK_TIME and 
                $Log::Log4perl::Config::WATCHER->change_detected() );
      };
  }
  
  ##################################################
  sub parent_string {
  ##################################################
      my($string) = @_;
  
      if($string eq "") {
          return undef; # root doesn't have a parent.
      }
  
      my @components = split /\./, $string;
      
      if(@components == 1) {
          return "";
      }
  
      pop @components;
  
      return join('.', @components);
  }
  
  ##################################################
  sub level {
  ##################################################
      my($self, $level, $dont_reset_all) = @_;
  
          # 'Set' function
      if(defined $level) {
          croak "invalid level '$level'" 
                  unless Log::Log4perl::Level::is_valid($level);
          if ($level =~ /\D/){
              $level = Log::Log4perl::Level::to_priority($level);
          }
          $self->{level} = $level;   
  
          &reset_all_output_methods
              unless $dont_reset_all;  #keep us from getting overworked 
                                       #if it's the config file calling us 
  
          return $level;
      }
  
          # 'Get' function
      if(defined $self->{level}) {
          return $self->{level};
      }
  
      for(my $logger = $self; $logger; $logger = parent_logger($logger)) {
  
          # Does the current logger have the level defined?
  
          if($logger->{category} eq "") {
              # It's the root logger
              return $ROOT_LOGGER->{level};
          }
              
          if(defined $LOGGERS_BY_NAME->{$logger->{category}}->{level}) {
              return $LOGGERS_BY_NAME->{$logger->{category}}->{level};
          }
      }
  
      # We should never get here because at least the root logger should
      # have a level defined
      die "We should never get here.";
  }
  
  ##################################################
  sub parent_logger {
  # Get the parent of the current logger or undef
  ##################################################
      my($logger) = @_;
  
          # Is it the root logger?
      if($logger->{category} eq "") {
          # Root has no parent
          return undef;
      }
  
          # Go to the next defined (!) parent
      my $parent_class = parent_string($logger->{category});
  
      while($parent_class ne "" and
            ! exists $LOGGERS_BY_NAME->{$parent_class}) {
          $parent_class = parent_string($parent_class);
          $logger =  $LOGGERS_BY_NAME->{$parent_class};
      }
  
      if($parent_class eq "") {
          $logger = $ROOT_LOGGER;
      } else {
          $logger = $LOGGERS_BY_NAME->{$parent_class};
      }
  
      return $logger;
  }
  
  ##################################################
  sub get_root_logger {
  ##################################################
      my($class) = @_;
      return $ROOT_LOGGER;    
  }
  
  ##################################################
  sub additivity {
  ##################################################
      my($self, $onoff, $no_reinit) = @_;
  
      if(defined $onoff) {
          $self->{additivity} = $onoff;
      }
  
      if( ! $no_reinit ) {
          $self->set_output_methods();
      }
  
      return $self->{additivity};
  }
  
  ##################################################
  sub get_logger {
  ##################################################
      my($class, $category) = @_;
  
      unless(defined $ROOT_LOGGER) {
          Carp::confess "Internal error: Root Logger not initialized.";
      }
  
      return $ROOT_LOGGER if $category eq "";
  
      my $logger = $class->_new($category);
      return $logger;
  }
  
  ##################################################
  sub add_appender {
  ##################################################
      my($self, $appender, $dont_reset_all) = @_;
  
          # We take this as an indicator that we're initialized.
      $INITIALIZED = 1;
  
      my $appender_name = $appender->name();
  
      $self->{num_appenders}++;  #should this be inside the unless?
  
        # Add newly created appender to the end of the appender array
      unless (grep{$_ eq $appender_name} @{$self->{appender_names}}){
          $self->{appender_names} = [sort @{$self->{appender_names}}, 
                                          $appender_name];
      }
  
      $APPENDER_BY_NAME{$appender_name} = $appender;
  
      reset_all_output_methods
                  unless $dont_reset_all;  # keep us from getting overworked
                                           # if it's  the config file calling us
  
          # For chaining calls ...
      return $appender;
  }
  
  ##################################################
  sub remove_appender {
  ##################################################
      my($self, $appender_name, $dont_reset_all, $sloppy) = @_;
  
      my %appender_names = map { $_ => 1 } @{$self->{appender_names}};
      
      if(!exists $appender_names{$appender_name}) {
          die "No such appender: $appender_name" unless $sloppy;
          return undef;
      }
  
      delete $appender_names{$appender_name};
      $self->{num_appenders}--;
      $self->{appender_names} = [sort keys %appender_names];
  
      &reset_all_output_methods
                  unless $dont_reset_all; 
  }
  
  ##################################################
  sub eradicate_appender {
  ##################################################
          # If someone calls Logger->... and not Logger::...
      shift if $_[0] eq __PACKAGE__;
  
      my($appender_name, $dont_reset_all) = @_;
  
      return 0 unless exists 
          $APPENDER_BY_NAME{$appender_name};
  
          # Remove the given appender from all loggers
          # and delete all references to it, causing
          # its DESTROY method to be called.
      foreach my $logger (values %$LOGGERS_BY_NAME){
          $logger->remove_appender($appender_name, 0, 1);
      }
          # Also remove it from the root logger
      $ROOT_LOGGER->remove_appender($appender_name, 0, 1);
      
      delete $APPENDER_BY_NAME{$appender_name};
  
      &reset_all_output_methods
                  unless $dont_reset_all; 
  
      return 1;
  }
  
  ##################################################
  sub has_appenders {
  ##################################################
      my($self) = @_;
  
      return $self->{num_appenders};
  }
  
  ##################################################
  sub log {
  # external api
  ##################################################
      my ($self, $priority, @messages) = @_;
  
      confess("log: No priority given!") unless defined($priority);
  
         # Just in case of 'init_and_watch' -- see Changes 0.21
      $_[0] = $LOGGERS_BY_NAME->{$_[0]->{category}} if 
          defined $Log::Log4perl::Config::WATCHER;
  
      init_warn() unless $INITIALIZED or $NON_INIT_WARNED;
  
      croak "priority $priority isn't numeric" if ($priority =~ /\D/);
  
      my $which = Log::Log4perl::Level::to_level($priority);
  
      $self->{$which}->($self, @messages, 
                      Log::Log4perl::Level::to_level($priority));
  }
  
  ######################################################################
  #
  # create_custom_level 
  # creates a custom level
  # in theory, could be used to create the default ones
  ######################################################################
  sub create_custom_level {
  ######################################################################
    my $level = shift || die("create_custom_level: " .
                             "forgot to pass in a level string!");
    my $after = shift || die("create_custom_level: " .
                             "forgot to pass in a level after which to " .
                             "place the new level!");
    my $syslog_equiv = shift; # can be undef
    my $log_dispatch_level = shift; # optional
  
    ## only let users create custom levels before initialization
  
    die("create_custom_level must be called before init or " .
        "first get_logger() call") if ($INITIALIZED);
  
    my %PRIORITY = %Log::Log4perl::Level::PRIORITY; #convenience
  
    die("create_custom_level: no such level \"$after\"! Use one of: ", 
       join(", ", sort keys %PRIORITY)) unless $PRIORITY{$after};
  
    # figure out new int value by AFTER + (AFTER+ 1) / 2
  
    my $next_prio = Log::Log4perl::Level::get_lower_level($PRIORITY{$after}, 1);
    my $cust_prio = int(($PRIORITY{$after} + $next_prio) / 2);
  
    die(qq{create_custom_level: Calculated level of $cust_prio already exists!
        This should only happen if you've made some insane number of custom
        levels (like 15 one after another)
        You can usually fix this by re-arranging your code from:
        create_custom_level("cust1", X);
        create_custom_level("cust2", X);
        create_custom_level("cust3", X);
        create_custom_level("cust4", X);
        create_custom_level("cust5", X);
        into:
        create_custom_level("cust3", X);
        create_custom_level("cust5", X);
        create_custom_level("cust4", 4);
        create_custom_level("cust2", cust3);
        create_custom_level("cust1", cust2);
     }) if (${Log::Log4perl::Level::LEVELS{$cust_prio}});
  
    Log::Log4perl::Level::add_priority($level, $cust_prio, $syslog_equiv,
                                       $log_dispatch_level);
  
    print("Adding prio $level at $cust_prio\n") if _INTERNAL_DEBUG;
  
    # get $LEVEL into namespace of Log::Log4perl::Logger to 
    # create $logger->foo nd $logger->is_foo
    my $name = "Log::Log4perl::Logger::";
    my $key = $level;
  
    no strict qw(refs);
    # be sure to use ${Log...} as CVS adds log entries for Log
    *{"$name$key"} = \${Log::Log4perl::Level::PRIORITY{$level}};
  
    # now, stick it in the caller's namespace
    $name = caller(0) . "::";
    *{"$name$key"} = \${Log::Log4perl::Level::PRIORITY{$level}};
    use strict qw(refs);
  
    create_log_level_methods($level);
  
    return 0;
  
  }
  
  ########################################
  #
  # if we were hackin' lisp (or scheme), we'd be returning some lambda
  # expressions. But we aren't. :) So we'll just create some strings and
  # eval them.
  ########################################
  sub create_log_level_methods {
  ########################################
    my $level = shift || die("create_log_level_methods: " .
                             "forgot to pass in a level string!");
    my $lclevel = lc($level);
    my $levelint = uc($level) . "_INT";
    my $initial_cap = ucfirst($lclevel);
  
    no strict qw(refs);
  
    # This is a bit better way to create code on the fly than eval'ing strings.
    # -erik
  
    *{__PACKAGE__ . "::$lclevel"} = sub {
          if(_INTERNAL_DEBUG) {
              my $level_disp = (defined $_[0]->{level} ? $_[0]->{level} 
                                                       : "[undef]");
              print "$lclevel: ($_[0]->{category}/$level_disp) [@_]\n";
          }
          init_warn() unless $INITIALIZED or $NON_INIT_WARNED;
          $_[0]->{$level}->(@_, $level) if defined $_[0]->{$level};
       };
  
    # Added these to have is_xxx functions as fast as xxx functions
    # -ms
    
    my $islevel   = "is_" . $level;
    my $islclevel = "is_" . $lclevel;
  
    *{__PACKAGE__ . "::is_$lclevel"} = sub {
        $_[0]->{$islevel}->($_[0], $islclevel);
    };
    
    # Add the isXxxEnabled() methods as identical to the is_xxx
    # functions. - dviner
    
    *{__PACKAGE__ . "::is".$initial_cap."Enabled"} = 
                             \&{__PACKAGE__ . "::is_$lclevel"};
    
    use strict qw(refs);
  
    return 0;
  }
  
  #now lets autogenerate the logger subs based on the defined priorities
  foreach my $level (keys %Log::Log4perl::Level::PRIORITY){
    create_log_level_methods($level);
  }
  
  ##################################################
  sub init_warn {
  ##################################################
      CORE::warn "Log4perl: Seems like no initialization happened. " .
                 "Forgot to call init()?\n";
      # Only tell this once;
      $NON_INIT_WARNED = 1;
  }
  
  #######################################################
  # call me from a sub-func to spew the sub-func's caller
  #######################################################
  sub callerline {
    my $message = join ('', @_);
  
    my $caller_offset = 
      Log::Log4perl::caller_depth_offset( 
          $Log::Log4perl::caller_depth + 1 );
  
    my ($pack, $file, $line) = caller($caller_offset);
  
    if (not chomp $message) {     # no newline
      $message .= " at $file line $line";
  
      # Someday, we'll use Threads. Really.
      if (defined &Thread::tid) {
        my $tid = Thread->self->tid;
        $message .= " thread $tid" if $tid;
      }
    }
  
    return ($message, "\n");
  }
  
  #######################################################
  sub and_warn {
  #######################################################
    my $self = shift;
    CORE::warn(callerline($self->warning_render(@_)));
  }
  
  #######################################################
  sub and_die {
  #######################################################
    my $self = shift;
    my $arg  = $_[0];
  
    my($msg) = callerline($self->warning_render(@_));
  
    if($DIE_DEBUG) {
        $DIE_DEBUG_BUFFER = "DIE_DEBUG: $msg";
    } else {
        if( $Log::Log4perl::STRINGIFY_DIE_MESSAGE ) {
            die("$msg\n");
        }
        die $arg;
    }
  }
  
  ##################################################
  sub logwarn {
  ##################################################
    my $self = shift;
  
    local $Log::Log4perl::caller_depth = 
          $Log::Log4perl::caller_depth + 1;
  
    if ($self->is_warn()) {
          # Since we're one caller level off now, compensate for that.
      my @chomped = @_;
      chomp($chomped[-1]);
      $self->warn(@chomped);
    }
  
    $self->and_warn(@_);
  }
  
  ##################################################
  sub logdie {
  ##################################################
    my $self = shift;
  
    local $Log::Log4perl::caller_depth = 
          $Log::Log4perl::caller_depth + 1;
  
    if ($self->is_fatal()) {
          # Since we're one caller level off now, compensate for that.
      my @chomped = @_;
      chomp($chomped[-1]);
      $self->fatal(@chomped);
    }
  
    $Log::Log4perl::LOGDIE_MESSAGE_ON_STDERR ? 
        $self->and_die(@_) : 
          exit($Log::Log4perl::LOGEXIT_CODE);
  }
  
  ##################################################
  sub logexit {
  ##################################################
    my $self = shift;
  
    local $Log::Log4perl::caller_depth = 
          $Log::Log4perl::caller_depth + 1;
  
    if ($self->is_fatal()) {
          # Since we're one caller level off now, compensate for that.
      my @chomped = @_;
      chomp($chomped[-1]);
      $self->fatal(@chomped);
    }
  
    exit $Log::Log4perl::LOGEXIT_CODE;
  }
  
  ##################################################
  # clucks and carps are WARN level
  sub logcluck {
  ##################################################
    my $self = shift;
  
    local $Log::Log4perl::caller_depth = 
          $Log::Log4perl::caller_depth + 1;
  
    local $Carp::CarpLevel = 
          $Carp::CarpLevel + 1;
  
    my $msg = $self->warning_render(@_);
  
    if ($self->is_warn()) {
      my $message = Carp::longmess($msg);
      foreach (split(/\n/, $message)) {
        $self->warn("$_\n");
      }
    }
  
    Carp::cluck($msg);
  }
  
  ##################################################
  sub logcarp {
  ##################################################
    my $self = shift;
  
    local $Carp::CarpLevel = $Carp::CarpLevel + 1;
  
    local $Log::Log4perl::caller_depth = 
          $Log::Log4perl::caller_depth + 1;
  
    my $msg = $self->warning_render(@_);
  
    if ($self->is_warn()) {
      my $message = Carp::shortmess($msg);
      foreach (split(/\n/, $message)) {
        $self->warn("$_\n");
      }
    }
  
    Carp::carp($msg);
  }
  
  ##################################################
  # croaks and confess are FATAL level
  ##################################################
  sub logcroak {
  ##################################################
    my $self = shift;
    my $arg  = $_[0];
  
    my $msg = $self->warning_render(@_);
  
    local $Carp::CarpLevel = 
          $Carp::CarpLevel + 1;
  
    local $Log::Log4perl::caller_depth = 
          $Log::Log4perl::caller_depth + 1;
  
    if ($self->is_fatal()) {
      my $message = Carp::shortmess($msg);
      foreach (split(/\n/, $message)) {
        $self->fatal("$_\n");
      }
    }
  
    my $croak_msg = $arg;
  
    if( $Log::Log4perl::STRINGIFY_DIE_MESSAGE ) {
        $croak_msg = $msg;
    }
  
    $Log::Log4perl::LOGDIE_MESSAGE_ON_STDERR ? 
        Carp::croak($croak_msg) : 
          exit($Log::Log4perl::LOGEXIT_CODE);
  }
  
  ##################################################
  sub logconfess {
  ##################################################
    my $self = shift;
    my $arg  = $_[0];
  
    local $Carp::CarpLevel = 
          $Carp::CarpLevel + 1;
  
    local $Log::Log4perl::caller_depth = 
          $Log::Log4perl::caller_depth + 1;
  
    my $msg = $self->warning_render(@_);
  
    if ($self->is_fatal()) {
      my $message = Carp::longmess($msg);
      foreach (split(/\n/, $message)) {
        $self->fatal("$_\n");
      }
    }
  
    my $confess_msg = $arg;
  
    if( $Log::Log4perl::STRINGIFY_DIE_MESSAGE ) {
        $confess_msg = $msg;
    }
  
    $Log::Log4perl::LOGDIE_MESSAGE_ON_STDERR ? 
        confess($confess_msg) :
          exit($Log::Log4perl::LOGEXIT_CODE);
  }
  
  ##################################################
  # in case people prefer to use error for warning
  ##################################################
  sub error_warn {
  ##################################################
    my $self = shift;
  
    local $Log::Log4perl::caller_depth = 
          $Log::Log4perl::caller_depth + 1;
  
    if ($self->is_error()) {
      $self->error(@_);
    }
  
    $self->and_warn(@_);
  }
  
  ##################################################
  sub error_die {
  ##################################################
    my $self = shift;
  
    local $Log::Log4perl::caller_depth = 
          $Log::Log4perl::caller_depth + 1;
  
    my $msg = $self->warning_render(@_);
  
    if ($self->is_error()) {
      $self->error($msg);
    }
  
    $Log::Log4perl::LOGDIE_MESSAGE_ON_STDERR ? 
        $self->and_die($msg) :
          exit($Log::Log4perl::LOGEXIT_CODE);
  }
  
  ##################################################
  sub more_logging {
  ##################################################
    my ($self) = shift;
    return $self->dec_level(@_);
  }
  
  ##################################################
  sub inc_level {
  ##################################################
      my ($self, $delta) = @_;
  
      $delta ||= 1;
  
      $self->level(Log::Log4perl::Level::get_higher_level($self->level(), 
                                                          $delta));
  
      $self->set_output_methods;
  }
  
  ##################################################
  sub less_logging {
  ##################################################
    my ($self) = shift;
    return $self->inc_level(@_);
  }
  
  ##################################################
  sub dec_level {
  ##################################################
      my ($self, $delta) = @_;
  
      $delta ||= 1;
  
      $self->level(Log::Log4perl::Level::get_lower_level($self->level(), $delta));
  
      $self->set_output_methods;
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Logger - Main Logger Class
  
  =head1 SYNOPSIS
  
      # It's not here
  
  =head1 DESCRIPTION
  
  While everything that makes Log4perl tick is implemented here,
  please refer to L<Log::Log4perl> for documentation.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_LOGGER

    $main::fatpacked{"Log/Log4perl/MDC.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_MDC';
  ##################################################
  package Log::Log4perl::MDC;
  ##################################################
  
  use 5.006;
  use strict;
  use warnings;
  
  our %MDC_HASH = ();
  
  ###########################################
  sub get {
  ###########################################
      my($class, $key) = @_;
  
      if($class ne __PACKAGE__) {
          # Somebody called us with Log::Log4perl::MDC::get($key)
          $key = $class;
      }
  
      if(exists $MDC_HASH{$key}) {
          return $MDC_HASH{$key};
      } else {
          return undef;
      }
  }
  
  ###########################################
  sub put {
  ###########################################
      my($class, $key, $value) = @_;
  
      if($class ne __PACKAGE__) {
          # Somebody called us with Log::Log4perl::MDC::put($key, $value)
          $value = $key;
          $key   = $class;
      }
  
      $MDC_HASH{$key} = $value;
  }
  
  ###########################################
  sub remove {
  ###########################################
      %MDC_HASH = ();
  
      1;
  }
  
  ###########################################
  sub get_context {
  ###########################################
      return \%MDC_HASH;
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::MDC - Mapped Diagnostic Context
  
  =head1 DESCRIPTION
  
  Log::Log4perl allows loggers to maintain global thread-specific data, 
  called the Nested Diagnostic Context (NDC) and 
  Mapped Diagnostic Context (MDC).
  
  The MDC is a simple thread-specific hash table, in which the application
  can stuff values under certain keys and retrieve them later
  via the C<"%X{key}"> placeholder in 
  C<Log::Log4perl::Layout::PatternLayout>s.
  
  =over 4
  
  =item Log::Log4perl::MDC->put($key, $value);
  
  Store a value C<$value> under key C<$key> in the map.
  
  =item my $value = Log::Log4perl::MDC->get($key);
  
  Retrieve the content of the map under the specified key.
  Typically done by C<%X{key}> in
  C<Log::Log4perl::Layout::PatternLayout>.
  If no value exists to the given key, C<undef> is returned.
  
  =item my $text = Log::Log4perl::MDC->remove();
  
  Delete all entries from the map.
  
  =item Log::Log4perl::MDC->get_context();
  
  Returns a reference to the hash table.
  
  =back
  
  Please note that all of the methods above are class methods, there's no
  instances of this class. Since the thread model in perl 5.8.0 is
  "no shared data unless explicitly requested" the data structures
  used are just global (and therefore thread-specific).
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_MDC

    $main::fatpacked{"Log/Log4perl/NDC.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_NDC';
  ##################################################
  package Log::Log4perl::NDC;
  ##################################################
  
  use 5.006;
  use strict;
  use warnings;
  
  our @NDC_STACK = ();
  our $MAX_SIZE  = 5;
  
  ###########################################
  sub get {
  ###########################################
      if(@NDC_STACK) {
          # Return elements blank separated
          return join " ", @NDC_STACK;
      } else {
          return "[undef]";
      }
  }
  
  ###########################################
  sub pop {
  ###########################################
      if(@NDC_STACK) {
          return pop @NDC_STACK;
      } else {
          return undef;
      }
  }
  
  ###########################################
  sub push {
  ###########################################
      my($self, $text) = @_;
  
      unless(defined $text) {
          # Somebody called us via Log::Log4perl::NDC::push("blah") ?
          $text = $self;
      }
  
      if(@NDC_STACK >= $MAX_SIZE) {
          CORE::pop(@NDC_STACK);
      }
  
      return push @NDC_STACK, $text;
  }
  
  ###########################################
  sub remove {
  ###########################################
      @NDC_STACK = ();
  }
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::NDC - Nested Diagnostic Context
  
  =head1 DESCRIPTION
  
  Log::Log4perl allows loggers to maintain global thread-specific data, 
  called the Nested Diagnostic Context (NDC).
  
  At some point, the application might decide to push a piece of
  data onto the NDC stack, which other parts of the application might 
  want to reuse. For example, at the beginning of a web request in a server,
  the application might decide to push the IP address of the client
  onto the stack to provide it for other loggers down the road without
  having to pass the data from function to function.
  
  The Log::Log4perl::Layout::PatternLayout class even provides the handy
  C<%x> placeholder which is replaced by the blank-separated list
  of elements currently on the stack.
  
  This module maintains a simple stack which you can push data on to, query
  what's on top, pop it off again or delete the entire stack.
  
  Its purpose is to provide a thread-specific context which all 
  Log::Log4perl loggers can refer to without the application having to
  pass around the context data between its functions.
  
  Since in 5.8.0 perl's threads don't share data only upon request,
  global data is by definition thread-specific.
  
  =over 4
  
  =item Log::Log4perl::NDC->push($text);
  
  Push an item onto the stack. If the stack grows beyond the defined
  limit (C<$Log::Log4perl::NDC::MAX_SIZE>), just the topmost element
  will be replated.
  
  This is typically done when a context is entered.
  
  =item Log::Log4perl::NDC->pop();
  
  Discard the upmost element of the stack. This is typically done when
  a context is left.
  
  =item my $text = Log::Log4perl::NDC->get();
  
  Retrieve the content of the stack as a string of blank-separated values
  without disrupting the stack structure. Typically done by C<%x>.
  If the stack is empty the value C<"[undef]"> is being returned.
  
  =item Log::Log4perl::NDC->remove();
  
  Reset the stack, remove all items.
  
  =back
  
  Please note that all of the methods above are class methods, there's no
  instances of this class.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_NDC

    $main::fatpacked{"Log/Log4perl/Resurrector.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_RESURRECTOR';
  package Log::Log4perl::Resurrector;
  use warnings;
  use strict;
  
  # [rt.cpan.org #84818]
  use if $^O eq "MSWin32", "Win32"; 
  
  use File::Temp qw(tempfile);
  use File::Spec;
  
  use constant INTERNAL_DEBUG => 0;
  
  our $resurrecting = '';
  
  ###########################################
  sub import {
  ###########################################
      resurrector_init();
  }
  
  ##################################################
  sub resurrector_fh {
  ##################################################
      my($file) = @_;
  
      local($/) = undef;
      open FILE, "<$file" or die "Cannot open $file";
      my $text = <FILE>;
      close FILE;
  
      print "Read ", length($text), " bytes from $file\n" if INTERNAL_DEBUG;
  
      my($tmp_fh, $tmpfile) = tempfile( UNLINK => 1 );
      print "Opened tmpfile $tmpfile\n" if INTERNAL_DEBUG;
  
      $text =~ s/^\s*###l4p//mg;
  
      print "Text=[$text]\n" if INTERNAL_DEBUG;
  
      print $tmp_fh $text;
      seek $tmp_fh, 0, 0;
  
      return $tmp_fh;
  }
  
  ###########################################
  sub resurrector_loader {
  ###########################################
      my ($code, $module) = @_;
  
      print "resurrector_loader called with $module\n" if INTERNAL_DEBUG;
  
        # Avoid recursion
      if($resurrecting eq $module) {
          print "ignoring $module (recursion)\n" if INTERNAL_DEBUG;
          return undef;
      }
      
      local $resurrecting = $module;
      
      
        # Skip Log4perl appenders
      if($module =~ m#^Log/Log4perl/Appender#) {
          print "Ignoring $module (Log4perl-internal)\n" if INTERNAL_DEBUG;
          return undef;
      }
  
      my $path = $module;
  
        # Skip unknown files
      if(!-f $module) {
            # We might have a 'use lib' statement that modified the
            # INC path, search again.
          $path = pm_search($module);
          if(! defined $path) {
              print "File $module not found\n" if INTERNAL_DEBUG;
              return undef;
          }
          print "File $module found in $path\n" if INTERNAL_DEBUG;
      }
  
      print "Resurrecting module $path\n" if INTERNAL_DEBUG;
  
      my $fh = resurrector_fh($path);
  
      my $abs_path = File::Spec->rel2abs( $path );
      print "Setting %INC entry of $module to $abs_path\n" if INTERNAL_DEBUG;
      $INC{$module} = $abs_path;
  
      return $fh;
  }
  
  ###########################################
  sub pm_search {
  ###########################################
      my($pmfile) = @_;
  
      for(@INC) {
            # Skip subrefs
          next if ref($_);
          my $path = File::Spec->catfile($_, $pmfile);
          return $path if -f $path;
      }
  
      return undef;
  }
  
  ###########################################
  sub resurrector_init {
  ###########################################
      unshift @INC, \&resurrector_loader;
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Resurrector - Dark Magic to resurrect hidden L4p statements
  
  =head1 DESCRIPTION
  
  Loading C<use Log::Log4perl::Resurrector> causes subsequently loaded
  modules to have their hidden
  
      ###l4p use Log::Log4perl qw(:easy);
  
      ###l4p DEBUG(...)
      ###l4p INFO(...)
      ...
  
  statements uncommented and therefore 'resurrected', i.e. activated.
  
  This allows for a module C<Foobar.pm> to be written with Log4perl
  statements commented out and running at full speed in normal mode.
  When loaded via
  
      use Foobar;
  
  all hidden Log4perl statements will be ignored.
  
  However, if a script loads the module C<Foobar> I<after> loading 
  C<Log::Log4perl::Resurrector>, as in
  
      use Log::Log4perl::Resurrector;
      use Foobar;
  
  then C<Log::Log4perl::Resurrector> will have put a source filter in place
  that will extract all hidden Log4perl statements in C<Foobar> before 
  C<Foobar> actually gets loaded. 
  
  Therefore, C<Foobar> will then behave as if the
  
      ###l4p use Log::Log4perl qw(:easy);
  
      ###l4p DEBUG(...)
      ###l4p INFO(...)
      ...
  
  statements were actually written like
  
      use Log::Log4perl qw(:easy);
  
      DEBUG(...)
      INFO(...)
      ...
  
  and the module C<Foobar> will indeed be Log4perl-enabled. Whether any
  activated Log4perl statement will actually trigger log
  messages, is up to the Log4perl configuration, of course.
  
  There's a startup cost to using C<Log::Log4perl::Resurrector> (all
  subsequently loaded modules are examined) but once the compilation
  phase has finished, the perl program will run at full speed.
  
  Some of the techniques used in this module have been stolen from the
  C<Acme::Incorporated> CPAN module, written by I<chromatic>. Long
  live CPAN!
   
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_RESURRECTOR

    $main::fatpacked{"Log/Log4perl/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_UTIL';
  package Log::Log4perl::Util;
  
  require Exporter;
  our @EXPORT_OK = qw( params_check );
  our @ISA       = qw( Exporter );
  
  use File::Spec;
  
  ###########################################
  sub params_check {
  ###########################################
      my( $hash, $required, $optional ) = @_;
  
      my $pkg       = caller();
      my %hash_copy = %$hash;
  
      if( defined $required ) {
          for my $p ( @$required ) {
              if( !exists $hash->{ $p } or
                  !defined $hash->{ $p } ) {
                  die "$pkg: Required parameter $p missing.";
              }
              delete $hash_copy{ $p };
          }
      }
  
      if( defined $optional ) {
          for my $p ( @$optional ) {
              delete $hash_copy{ $p };
          }
          if( scalar keys %hash_copy ) {
              die "$pkg: Unknown parameter: ", join( ",", keys %hash_copy );
          }
      }
  }
  
  ##################################################
  sub module_available {  # Check if a module is available
  ##################################################
      my($full_name) = @_;
  
        # Weird cases like "strict;" (including the semicolon) would 
        # succeed with the eval below, so check those up front. 
        # I can't believe Perl doesn't have a proper way to check if a 
        # module is available or not!
      return 0 if $full_name =~ /[^\w:]/;
  
      local $SIG{__DIE__} = sub {};
  
      eval "require $full_name";
  
      if($@) {
          return 0;
      }
  
      return 1;
  }
  
  ##################################################
  sub tmpfile_name {  # File::Temp without the bells and whistles
  ##################################################
  
      my $name = File::Spec->catfile(File::Spec->tmpdir(), 
                                'l4p-tmpfile-' . 
                                "$$-" .
                                int(rand(9999999)));
  
          # Some crazy versions of File::Spec use backslashes on Win32
      $name =~ s#\\#/#g;
      return $name;
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Util - Internal utility functions
  
  =head1 DESCRIPTION
  
  Only internal functions here. Don't peek.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_UTIL

    $main::fatpacked{"Log/Log4perl/Util/Semaphore.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_UTIL_SEMAPHORE';
  #//////////////////////////////////////////
  package Log::Log4perl::Util::Semaphore;
  #//////////////////////////////////////////
  use IPC::SysV qw(IPC_RMID IPC_CREAT IPC_EXCL SEM_UNDO IPC_NOWAIT 
                   IPC_SET IPC_STAT SETVAL);
  use IPC::Semaphore;
  use POSIX qw(EEXIST);
  use strict;
  use warnings;
  use constant INTERNAL_DEBUG => 0;
  
  ###########################################
  sub new {
  ###########################################
      my($class, %options) = @_;
  
      my $self = {
          key           => undef,
          mode          => undef,
          uid           => undef,
          gid           => undef,
          destroy       => undef,
          semop_wait    => .1,
          semop_retries => 1,
  	creator       => $$,
          %options,
      };
  
      $self->{ikey} = unpack("i", pack("A4", $self->{key}));
  
        # Accept usernames in the uid field as well
      if(defined $self->{uid} and 
         $self->{uid} =~ /\D/) {
          $self->{uid} = (getpwnam $self->{uid})[2];
      }
  
      bless $self, $class;
      $self->init();
  
      my @values = ();
      for my $param (qw(mode uid gid)) {
          push @values, $param, $self->{$param} if defined $self->{$param};
      }
      $self->semset(@values) if @values;
  
      return $self;
  }
  
  ###########################################
  sub init {
  ###########################################
      my($self) = @_;
  
      print "Semaphore init '$self->{key}'/'$self->{ikey}'\n" if INTERNAL_DEBUG;
  
      $self->{id} = semget( $self->{ikey}, 
                            1, 
                            &IPC_EXCL|&IPC_CREAT|($self->{mode}||0777),
                    );
     
     if(! defined $self->{id} and
        $! == EEXIST) {
         print "Semaphore '$self->{key}' already exists\n" if INTERNAL_DEBUG;
         $self->{id} = semget( $self->{ikey}, 1, 0 )
             or die "semget($self->{ikey}) failed: $!";
     } elsif($!) {
         die "Cannot create semaphore $self->{key}/$self->{ikey} ($!)";
     }
  }
  
  ###########################################
  sub status_as_string {
  ###########################################
      my($self, @values) = @_;
  
      my $sem = IPC::Semaphore->new($self->{ikey}, 1, 0);
  
      my $values  = join('/', $sem->getall());
      my $ncnt    = $sem->getncnt(0);
      my $pidlast = $sem->getpid(0);
      my $zcnt    = $sem->getzcnt(0);
      my $id      = $sem->id();
  
      return <<EOT;
  Semaphore Status
  Key ...................................... $self->{key}
  iKey ..................................... $self->{ikey}
  Id ....................................... $id
  Values ................................... $values
  Processes waiting for counter increase ... $ncnt
  Processes waiting for counter to hit 0 ... $zcnt
  Last process to perform an operation ..... $pidlast
  EOT
  }
  
  ###########################################
  sub semsetval {
  ###########################################
      my($self, %keyvalues) = @_;
  
      my $sem = IPC::Semaphore->new($self->{ikey}, 1, 0);
      $sem->setval(%keyvalues);
  }
  
  ###########################################
  sub semset {
  ###########################################
      my($self, @values) = @_;
  
      print "Setting values for semaphore $self->{key}/$self->{ikey}\n" if
          INTERNAL_DEBUG;
  
      my $sem = IPC::Semaphore->new($self->{ikey}, 1, 0);
      $sem->set(@values);
  }
  
  ###########################################
  sub semlock {
  ###########################################
      my($self) = @_;
  
      my $operation = pack("s!*", 
                            # wait until it's 0
                           0, 0, 0,
                            # increment by 1
                           0, 1, SEM_UNDO
                          );
  
      print "Locking semaphore '$self->{key}'\n" if INTERNAL_DEBUG;
      $self->semop($self->{id}, $operation);
  }
  
  ###########################################
  sub semunlock {
  ###########################################
      my($self) = @_;
  
  #    my $operation = pack("s!*", 
  #                          # decrement by 1
  #                         0, -1, SEM_UNDO
  #                        );
  #
      print "Unlocking semaphore '$self->{key}'\n" if INTERNAL_DEBUG;
  
  #      # ignore errors, as they might result from trying to unlock an
  #      # already unlocked semaphore.
  #    semop($self->{id}, $operation);
  
      semctl $self->{id}, 0, SETVAL, 0;
  }
  
  ###########################################
  sub remove {
  ###########################################
      my($self) = @_;
  
      print "Removing semaphore '$self->{key}'\n" if INTERNAL_DEBUG;
  
      semctl ($self->{id}, 0, &IPC_RMID, 0) or 
          die "Removing semaphore $self->{key} failed: $!";
  }
  
  ###########################################
  sub DESTROY {
  ###########################################
      my($self) = @_;
  
      if($self->{destroy} && $$==$self->{creator}) {
          $self->remove();
      }
  }
  
  ###########################################
  sub semop {
  ###########################################
      my($self, @args) = @_;
  
      my $retries     = $self->{semop_retries};
  
      my $rc;
  
      {
          $rc = semop($args[0], $args[1]);
  
          if(!$rc and 
             $! =~ /temporarily unavailable/ and
             $retries-- > 0) {
              $rc = 'undef' unless defined $rc;
              print "semop failed (rc=$rc), retrying\n", 
                    $self->status_as_string if INTERNAL_DEBUG;
              select undef, undef, undef, $self->{semop_wait};
              redo;
          }
      }
  
      $rc or die "semop(@args) failed: $! ";
      $rc;
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Util::Semaphore - Easy to use semaphores
  
  =head1 SYNOPSIS
  
      use Log::Log4perl::Util::Semaphore;
      my $sem = Log::Log4perl::Util::Semaphore->new( key => "abc" );
  
      $sem->semlock();
        # ... critical section 
      $sem->semunlock();
  
      $sem->semset( uid  => (getpwnam("hugo"))[2], 
                    gid  => 102,
                    mode => 0644
                  );
  
  =head1 DESCRIPTION
  
  Log::Log4perl::Util::Semaphore provides the synchronisation mechanism
  for the Synchronized.pm appender in Log4perl, but can be used independently
  of Log4perl.
  
  As a convenience, the C<uid> field accepts user names as well, which it 
  translates into the corresponding uid by running C<getpwnam>.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_UTIL_SEMAPHORE

    $main::fatpacked{"Log/Log4perl/Util/TimeTracker.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'LOG_LOG4PERL_UTIL_TIMETRACKER';
  ##################################################
  package Log::Log4perl::Util::TimeTracker;
  ##################################################
  
  use 5.006;
  use strict;
  use warnings;
  use Log::Log4perl::Util;
  use Carp;
  
  our $TIME_HIRES_AVAILABLE;
  
  BEGIN {
      # Check if we've got Time::HiRes. If not, don't make a big fuss,
      # just set a flag so we know later on that we can't have fine-grained
      # time stamps
      $TIME_HIRES_AVAILABLE = 0;
      if(Log::Log4perl::Util::module_available("Time::HiRes")) {
          require Time::HiRes;
          $TIME_HIRES_AVAILABLE = 1;
      }
  }
  
  ##################################################
  sub new {
  ##################################################
      my $class = shift;
      $class = ref ($class) || $class;
  
      my $self = {
          reset_time            => undef,
          @_,
      };
  
      $self->{time_function} = \&_gettimeofday unless 
          defined $self->{time_function};
  
      bless $self, $class;
  
      $self->reset();
  
      return $self;
  }
  
  ##################################################
  sub hires_available {
  ##################################################
      return $TIME_HIRES_AVAILABLE;
  }
  
  ##################################################
  sub _gettimeofday {
  ##################################################
      # Return secs and optionally msecs if we have Time::HiRes
      if($TIME_HIRES_AVAILABLE) {
          return (Time::HiRes::gettimeofday());
      } else {
          return (time(), 0);
      }
  }
  
  ##################################################
  sub gettimeofday {
  ##################################################
      my($self) = @_;
  
      my($seconds, $microseconds) = $self->{time_function}->();
  
      $microseconds = 0 if ! defined $microseconds;
      return($seconds, $microseconds);
  }
  
  ##################################################
  sub reset {
  ##################################################
      my($self) = @_;
  
      my $current_time = [$self->gettimeofday()];
      $self->{reset_time} = $current_time;
      $self->{last_call_time} = $current_time;
  
      return $current_time;
  }
  
  ##################################################
  sub time_diff {
  ##################################################
      my($time_from, $time_to) = @_;
  
      my $seconds = $time_to->[0] -
                    $time_from->[0];
  
      my $milliseconds = int(( $time_to->[1] -
                               $time_from->[1] ) / 1000);
  
      if($milliseconds < 0) {
          $milliseconds = 1000 + $milliseconds;
          $seconds--;
      }
  
      return($seconds, $milliseconds);
  }
  
  ##################################################
  sub milliseconds {
  ##################################################
      my($self, $current_time) = @_;
  
      $current_time = [ $self->gettimeofday() ] unless
          defined $current_time;
  
      my($seconds, $milliseconds) = time_diff(
              $self->{reset_time}, 
              $current_time);
  
      return $seconds*1000 + $milliseconds;
  }
  
  ##################################################
  sub delta_milliseconds {
  ##################################################
      my($self, $current_time) = @_;
  
      $current_time = [ $self->gettimeofday() ] unless
          defined $current_time;
  
      my($seconds, $milliseconds) = time_diff(
              $self->{last_call_time}, 
              $current_time);
  
      $self->{last_call_time} = $current_time;
  
      return $seconds*1000 + $milliseconds;
  }
  
  1;
  
  __END__
  
  =encoding utf8
  
  =head1 NAME
  
  Log::Log4perl::Util::TimeTracker - Track time elapsed
  
  =head1 SYNOPSIS
  
    use Log::Log4perl::Util::TimeTracker;
  
    my $timer = Log::Log4perl::Util::TimeTracker->new();
  
      # equivalent to Time::HiRes::gettimeofday(), regardless
      # if Time::HiRes is present or not. 
    my($seconds, $microseconds) = $timer->gettimeofday();
  
      # reset internal timer
    $timer->reset();
  
      # return milliseconds since last reset
    $msecs = $timer->milliseconds();
  
      # return milliseconds since last call
    $msecs = $timer->delta_milliseconds();
  
  =head1 DESCRIPTION
  
  This utility module helps tracking time elapsed for PatternLayout's
  date and time placeholders. Its accuracy depends on the availability
  of the Time::HiRes module. If it's available, its granularity is
  milliseconds, if not, seconds.
  
  The most common use of this module is calling the gettimeofday() 
  method:
  
    my($seconds, $microseconds) = $timer->gettimeofday();
  
  It returns seconds and microseconds of the current epoch time. If 
  Time::HiRes is installed, it will simply defer to its gettimeofday()
  function, if it's missing, time() will be called instead and $microseconds
  will always be 0.
  
  To measure time elapsed in milliseconds, use the reset() method to 
  reset the timer to the current time, followed by one or more calls to
  the milliseconds() method:
  
      # reset internal timer
    $timer->reset();
  
      # return milliseconds since last reset
    $msecs = $timer->milliseconds();
  
  On top of the time span between the last reset and the current time, 
  the module keeps track of the time between calls to delta_milliseconds():
  
    $msecs = $timer->delta_milliseconds();
  
  On the first call, this will return the number of milliseconds since the
  last reset(), on subsequent calls, it will return the time elapsed in
  milliseconds since the last call to delta_milliseconds() instead. Note
  that reset() also resets the time of the last call.
  
  The internal timer of this module gets its time input from the POSIX time() 
  function, or, if the Time::HiRes module is available, from its 
  gettimeofday() function. To figure out which one it is, use
  
      if( $timer->hires_available() ) {
          print "Hooray, we get real milliseconds!\n";
      } else {
          print "Milliseconds are just bogus\n";
      }
  
  For testing purposes, a different time source can be provided, so test
  suites can simulate time passing by without actually having to wait:
  
    my $start_time = time();
  
    my $timer = Log::Log4perl::Util::TimeTracker->new(
            time_function => sub {
                return $start_time++;
            },
    );
  
  Every call to $timer->epoch() will then return a time value that is one
  second ahead of the value returned on the previous call. This also means
  that every call to delta_milliseconds() will return a value that exceeds
  the value returned on the previous call by 1000.
  
  =head1 LICENSE
  
  Copyright 2002-2013 by Mike Schilli E<lt>m@perlmeister.comE<gt> 
  and Kevin Goess E<lt>cpan@goess.orgE<gt>.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =head1 AUTHOR
  
  Please contribute patches to the project on Github:
  
      http://github.com/mschilli/log4perl
  
  Send bug reports or requests for enhancements to the authors via our
  
  MAILING LIST (questions, bug reports, suggestions/patches): 
  log4perl-devel@lists.sourceforge.net
  
  Authors (please contact them via the list above, not directly):
  Mike Schilli <m@perlmeister.com>,
  Kevin Goess <cpan@goess.org>
  
  Contributors (in alphabetical order):
  Ateeq Altaf, Cory Bennett, Jens Berthold, Jeremy Bopp, Hutton
  Davidson, Chris R. Donnelly, Matisse Enzer, Hugh Esco, Anthony
  Foiani, James FitzGibbon, Carl Franks, Dennis Gregorovic, Andy
  Grundman, Paul Harrington, Alexander Hartmaier  David Hull, 
  Robert Jacobson, Jason Kohles, Jeff Macdonald, Markus Peter, 
  Brett Rann, Peter Rabbitson, Erik Selberg, Aaron Straup Cope, 
  Lars Thegler, David Viner, Mac Yang.
  
LOG_LOG4PERL_UTIL_TIMETRACKER

    $main::fatpacked{"MRO/Compat.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MRO_COMPAT';
  package MRO::Compat;
  use strict;
  use warnings;
  require 5.006_000;
  
  # Keep this < 1.00, so people can tell the fake
  #  mro.pm from the real one
  our $VERSION = '0.12';
  
  BEGIN {
      # Alias our private functions over to
      # the mro:: namespace and load
      # Class::C3 if Perl < 5.9.5
      if($] < 5.009_005) {
          $mro::VERSION # to fool Module::Install when generating META.yml
              = $VERSION;
          $INC{'mro.pm'} = __FILE__;
          *mro::import            = \&__import;
          *mro::get_linear_isa    = \&__get_linear_isa;
          *mro::set_mro           = \&__set_mro;
          *mro::get_mro           = \&__get_mro;
          *mro::get_isarev        = \&__get_isarev;
          *mro::is_universal      = \&__is_universal;
          *mro::method_changed_in = \&__method_changed_in;
          *mro::invalidate_all_method_caches
                                  = \&__invalidate_all_method_caches;
          require Class::C3;
          if($Class::C3::XS::VERSION && $Class::C3::XS::VERSION > 0.03) {
              *mro::get_pkg_gen   = \&__get_pkg_gen_c3xs;
          }
          else {
              *mro::get_pkg_gen   = \&__get_pkg_gen_pp;
          }
      }
  
      # Load mro.pm and provide no-op Class::C3::.*initialize() funcs for 5.9.5+
      else {
          require mro;
          no warnings 'redefine';
          *Class::C3::initialize = sub { 1 };
          *Class::C3::reinitialize = sub { 1 };
          *Class::C3::uninitialize = sub { 1 };
      }
  }
  
  =head1 NAME
  
  MRO::Compat - mro::* interface compatibility for Perls < 5.9.5
  
  =head1 SYNOPSIS
  
     package PPP;      use base qw/Exporter/;
     package X;        use base qw/PPP/;
     package Y;        use base qw/PPP/;
     package Z;        use base qw/PPP/;
  
     package FooClass; use base qw/X Y Z/;
  
     package main;
     use MRO::Compat;
     my $linear = mro::get_linear_isa('FooClass');
     print join(q{, }, @$linear);
  
     # Prints: FooClass, X, PPP, Exporter, Y, Z
  
  =head1 DESCRIPTION
  
  The "mro" namespace provides several utilities for dealing
  with method resolution order and method caching in general
  in Perl 5.9.5 and higher.
  
  This module provides those interfaces for
  earlier versions of Perl (back to 5.6.0 anyways).
  
  It is a harmless no-op to use this module on 5.9.5+.  That
  is to say, code which properly uses L<MRO::Compat> will work
  unmodified on both older Perls and 5.9.5+.
  
  If you're writing a piece of software that would like to use
  the parts of 5.9.5+'s mro:: interfaces that are supported
  here, and you want compatibility with older Perls, this
  is the module for you.
  
  Some parts of this code will work better and/or faster with
  L<Class::C3::XS> installed (which is an optional prereq
  of L<Class::C3>, which is in turn a prereq of this
  package), but it's not a requirement.
  
  This module never exports any functions.  All calls must
  be fully qualified with the C<mro::> prefix.
  
  The interface documentation here serves only as a quick
  reference of what the function basically does, and what
  differences between L<MRO::Compat> and 5.9.5+ one should
  look out for.  The main docs in 5.9.5's L<mro> are the real
  interface docs, and contain a lot of other useful information.
  
  =head1 Functions
  
  =head2 mro::get_linear_isa($classname[, $type])
  
  Returns an arrayref which is the linearized "ISA" of the given class.
  Uses whichever MRO is currently in effect for that class by default,
  or the given MRO (either C<c3> or C<dfs> if specified as C<$type>).
  
  The linearized ISA of a class is a single ordered list of all of the
  classes that would be visited in the process of resolving a method
  on the given class, starting with itself.  It does not include any
  duplicate entries.
  
  Note that C<UNIVERSAL> (and any members of C<UNIVERSAL>'s MRO) are not
  part of the MRO of a class, even though all classes implicitly inherit
  methods from C<UNIVERSAL> and its parents.
  
  =cut
  
  sub __get_linear_isa_dfs {
      no strict 'refs';
  
      my $classname = shift;
  
      my @lin = ($classname);
      my %stored;
      foreach my $parent (@{"$classname\::ISA"}) {
          my $plin = __get_linear_isa_dfs($parent);
          foreach (@$plin) {
              next if exists $stored{$_};
              push(@lin, $_);
              $stored{$_} = 1;
          }
      }
      return \@lin;
  }
  
  sub __get_linear_isa {
      my ($classname, $type) = @_;
      die "mro::get_mro requires a classname" if !defined $classname;
  
      $type ||= __get_mro($classname);
      if($type eq 'dfs') {
          return __get_linear_isa_dfs($classname);
      }
      elsif($type eq 'c3') {
          return [Class::C3::calculateMRO($classname)];
      }
      die "type argument must be 'dfs' or 'c3'";
  }
  
  =head2 mro::import
  
  This allows the C<use mro 'dfs'> and
  C<use mro 'c3'> syntaxes, providing you
  L<use MRO::Compat> first.  Please see the
  L</USING C3> section for additional details.
  
  =cut
  
  sub __import {
      if($_[1]) {
          goto &Class::C3::import if $_[1] eq 'c3';
          __set_mro(scalar(caller), $_[1]);
      }
  }
  
  =head2 mro::set_mro($classname, $type)
  
  Sets the mro of C<$classname> to one of the types
  C<dfs> or C<c3>.  Please see the L</USING C3>
  section for additional details.
  
  =cut
  
  sub __set_mro {
      my ($classname, $type) = @_;
  
      if(!defined $classname || !$type) {
          die q{Usage: mro::set_mro($classname, $type)};
      }
  
      if($type eq 'c3') {
          eval "package $classname; use Class::C3";
          die $@ if $@;
      }
      elsif($type eq 'dfs') {
          # In the dfs case, check whether we need to undo C3
          if(defined $Class::C3::MRO{$classname}) {
              Class::C3::_remove_method_dispatch_table($classname);
          }
          delete $Class::C3::MRO{$classname};
      }
      else {
          die qq{Invalid mro type "$type"};
      }
  
      return;
  }
  
  =head2 mro::get_mro($classname)
  
  Returns the MRO of the given class (either C<c3> or C<dfs>).
  
  It considers any Class::C3-using class to have C3 MRO
  even before L<Class::C3::initialize()> is called.
  
  =cut
  
  sub __get_mro {
      my $classname = shift;
      die "mro::get_mro requires a classname" if !defined $classname;
      return 'c3' if exists $Class::C3::MRO{$classname};
      return 'dfs';
  }
  
  =head2 mro::get_isarev($classname)
  
  Returns an arrayref of classes who are subclasses of the
  given classname.  In other words, classes in whose @ISA
  hierarchy we appear, no matter how indirectly.
  
  This is much slower on pre-5.9.5 Perls with MRO::Compat
  than it is on 5.9.5+, as it has to search the entire
  package namespace.
  
  =cut
  
  sub __get_all_pkgs_with_isas {
      no strict 'refs';
      no warnings 'recursion';
  
      my @retval;
  
      my $search = shift;
      my $pfx;
      my $isa;
      if(defined $search) {
          $isa = \@{"$search\::ISA"};
          $pfx = "$search\::";
      }
      else {
          $search = 'main';
          $isa = \@main::ISA;
          $pfx = '';
      }
  
      push(@retval, $search) if scalar(@$isa);
  
      foreach my $cand (keys %{"$search\::"}) {
          if($cand =~ s/::$//) {
              next if $cand eq $search; # skip self-reference (main?)
              push(@retval, @{__get_all_pkgs_with_isas($pfx . $cand)});
          }
      }
  
      return \@retval;
  }
  
  sub __get_isarev_recurse {
      no strict 'refs';
  
      my ($class, $all_isas, $level) = @_;
  
      die "Recursive inheritance detected" if $level > 100;
  
      my %retval;
  
      foreach my $cand (@$all_isas) {
          my $found_me;
          foreach (@{"$cand\::ISA"}) {
              if($_ eq $class) {
                  $found_me = 1;
                  last;
              }
          }
          if($found_me) {
              $retval{$cand} = 1;
              map { $retval{$_} = 1 }
                  @{__get_isarev_recurse($cand, $all_isas, $level+1)};
          }
      }
      return [keys %retval];
  }
  
  sub __get_isarev {
      my $classname = shift;
      die "mro::get_isarev requires a classname" if !defined $classname;
  
      __get_isarev_recurse($classname, __get_all_pkgs_with_isas(), 0);
  }
  
  =head2 mro::is_universal($classname)
  
  Returns a boolean status indicating whether or not
  the given classname is either C<UNIVERSAL> itself,
  or one of C<UNIVERSAL>'s parents by C<@ISA> inheritance.
  
  Any class for which this function returns true is
  "universal" in the sense that all classes potentially
  inherit methods from it.
  
  =cut
  
  sub __is_universal {
      my $classname = shift;
      die "mro::is_universal requires a classname" if !defined $classname;
  
      my $lin = __get_linear_isa('UNIVERSAL');
      foreach (@$lin) {
          return 1 if $classname eq $_;
      }
  
      return 0;
  }
  
  =head2 mro::invalidate_all_method_caches
  
  Increments C<PL_sub_generation>, which invalidates method
  caching in all packages.
  
  Please note that this is rarely necessary, unless you are
  dealing with a situation which is known to confuse Perl's
  method caching.
  
  =cut
  
  sub __invalidate_all_method_caches {
      # Super secret mystery code :)
      @f845a9c1ac41be33::ISA = @f845a9c1ac41be33::ISA;
      return;
  }
  
  =head2 mro::method_changed_in($classname)
  
  Invalidates the method cache of any classes dependent on the
  given class.  In L<MRO::Compat> on pre-5.9.5 Perls, this is
  an alias for C<mro::invalidate_all_method_caches> above, as
  pre-5.9.5 Perls have no other way to do this.  It will still
  enforce the requirement that you pass it a classname, for
  compatibility.
  
  Please note that this is rarely necessary, unless you are
  dealing with a situation which is known to confuse Perl's
  method caching.
  
  =cut
  
  sub __method_changed_in {
      my $classname = shift;
      die "mro::method_changed_in requires a classname" if !defined $classname;
  
      __invalidate_all_method_caches();
  }
  
  =head2 mro::get_pkg_gen($classname)
  
  Returns an integer which is incremented every time a local
  method of or the C<@ISA> of the given package changes on
  Perl 5.9.5+.  On earlier Perls with this L<MRO::Compat> module,
  it will probably increment a lot more often than necessary.
  
  =cut
  
  {
      my $__pkg_gen = 2;
      sub __get_pkg_gen_pp {
          my $classname = shift;
          die "mro::get_pkg_gen requires a classname" if !defined $classname;
          return $__pkg_gen++;
      }
  }
  
  sub __get_pkg_gen_c3xs {
      my $classname = shift;
      die "mro::get_pkg_gen requires a classname" if !defined $classname;
  
      return Class::C3::XS::_plsubgen();
  }
  
  =head1 USING C3
  
  While this module makes the 5.9.5+ syntaxes
  C<use mro 'c3'> and C<mro::set_mro("Foo", 'c3')> available
  on older Perls, it does so merely by passing off the work
  to L<Class::C3>.
  
  It does not remove the need for you to call
  C<Class::C3::initialize()>, C<Class::C3::reinitialize()>, and/or
  C<Class::C3::uninitialize()> at the appropriate times
  as documented in the L<Class::C3> docs.  These three functions
  are always provided by L<MRO::Compat>, either via L<Class::C3>
  itself on older Perls, or directly as no-ops on 5.9.5+.
  
  =head1 SEE ALSO
  
  L<Class::C3>
  
  L<mro>
  
  =head1 AUTHOR
  
  Brandon L. Black, E<lt>blblack@gmail.comE<gt>
  
  =head1 COPYRIGHT AND LICENSE
  
  Copyright 2007-2008 Brandon L. Black E<lt>blblack@gmail.comE<gt>
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself. 
  
  =cut
  
  1;
MRO_COMPAT

    $main::fatpacked{"Method/Generate/Accessor.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'METHOD_GENERATE_ACCESSOR';
  package Method::Generate::Accessor;
  
  use Moo::_strictures;
  use Moo::_Utils qw(_load_module _maybe_load_module _install_coderef);
  use Moo::Object ();
  BEGIN { our @ISA = qw(Moo::Object) }
  use Sub::Quote qw(quote_sub quoted_from_sub quotify sanitize_identifier);
  use Scalar::Util 'blessed';
  use Carp qw(croak);
  BEGIN { our @CARP_NOT = qw(Moo::_Utils) }
  use overload ();
  BEGIN {
    *_CAN_WEAKEN_READONLY = (
      "$]" < 5.008_003 or $ENV{MOO_TEST_PRE_583}
    ) ? sub(){0} : sub(){1};
    our $CAN_HAZ_XS =
      !$ENV{MOO_XS_DISABLE}
        &&
      _maybe_load_module('Class::XSAccessor')
        &&
      (eval { Class::XSAccessor->VERSION('1.07') })
    ;
    our $CAN_HAZ_XS_PRED =
      $CAN_HAZ_XS &&
      (eval { Class::XSAccessor->VERSION('1.17') })
    ;
  }
  BEGIN {
    package
      Method::Generate::Accessor::_Generated;
    $Carp::Internal{+__PACKAGE__} = 1;
  }
  
  my $module_name_only = qr/\A$Module::Runtime::module_name_rx\z/;
  
  sub _die_overwrite
  {
    my ($pkg, $method, $type) = @_;
    croak "You cannot overwrite a locally defined method ($method) with "
      . ( $type || 'an accessor' );
  }
  
  sub generate_method {
    my ($self, $into, $name, $spec, $quote_opts) = @_;
    $quote_opts = {
      no_defer => 1,
      package => 'Method::Generate::Accessor::_Generated',
      %{ $quote_opts||{} },
    };
    $spec->{allow_overwrite}++ if $name =~ s/^\+//;
    croak "Must have an is" unless my $is = $spec->{is};
    if ($is eq 'ro') {
      $spec->{reader} = $name unless exists $spec->{reader};
    } elsif ($is eq 'rw') {
      $spec->{accessor} = $name unless exists $spec->{accessor}
        or ( $spec->{reader} and $spec->{writer} );
    } elsif ($is eq 'lazy') {
      $spec->{reader} = $name unless exists $spec->{reader};
      $spec->{lazy} = 1;
      $spec->{builder} ||= '_build_'.$name unless exists $spec->{default};
    } elsif ($is eq 'rwp') {
      $spec->{reader} = $name unless exists $spec->{reader};
      $spec->{writer} = "_set_${name}" unless exists $spec->{writer};
    } elsif ($is ne 'bare') {
      croak "Unknown is ${is}";
    }
    if (exists $spec->{builder}) {
      if(ref $spec->{builder}) {
        $self->_validate_codulatable('builder', $spec->{builder},
          "$into->$name", 'or a method name');
        $spec->{builder_sub} = $spec->{builder};
        $spec->{builder} = 1;
      }
      $spec->{builder} = '_build_'.$name if ($spec->{builder}||0) eq 1;
      croak "Invalid builder for $into->$name - not a valid method name"
        if $spec->{builder} !~ $module_name_only;
    }
    if (($spec->{predicate}||0) eq 1) {
      $spec->{predicate} = $name =~ /^_/ ? "_has${name}" : "has_${name}";
    }
    if (($spec->{clearer}||0) eq 1) {
      $spec->{clearer} = $name =~ /^_/ ? "_clear${name}" : "clear_${name}";
    }
    if (($spec->{trigger}||0) eq 1) {
      $spec->{trigger} = quote_sub('shift->_trigger_'.$name.'(@_)');
    }
    if (($spec->{coerce}||0) eq 1) {
      my $isa = $spec->{isa};
      if (blessed $isa and $isa->can('coercion')) {
        $spec->{coerce} = $isa->coercion;
      } elsif (blessed $isa and $isa->can('coerce')) {
        $spec->{coerce} = sub { $isa->coerce(@_) };
      } else {
        croak "Invalid coercion for $into->$name - no appropriate type constraint";
      }
    }
  
    foreach my $setting (qw( isa coerce )) {
      next if !exists $spec->{$setting};
      $self->_validate_codulatable($setting, $spec->{$setting}, "$into->$name");
    }
  
    if (exists $spec->{default}) {
      if (ref $spec->{default}) {
        $self->_validate_codulatable('default', $spec->{default}, "$into->$name",
          'or a non-ref');
      }
    }
  
    if (exists $spec->{moosify}) {
      if (ref $spec->{moosify} ne 'ARRAY') {
        $spec->{moosify} = [$spec->{moosify}];
      }
  
      foreach my $spec (@{$spec->{moosify}}) {
        $self->_validate_codulatable('moosify', $spec, "$into->$name");
      }
    }
  
    my %methods;
    if (my $reader = $spec->{reader}) {
      _die_overwrite($into, $reader, 'a reader')
        if !$spec->{allow_overwrite} && defined &{"${into}::${reader}"};
      if (our $CAN_HAZ_XS && $self->is_simple_get($name, $spec)) {
        $methods{$reader} = $self->_generate_xs(
          getters => $into, $reader, $name, $spec
        );
      } else {
        $self->{captures} = {};
        $methods{$reader} =
          quote_sub "${into}::${reader}"
            => '    Carp::croak("'.$reader.' is a read-only accessor") if @_ > 1;'."\n"
               .$self->_generate_get($name, $spec)
            => delete $self->{captures}
            => $quote_opts
          ;
      }
    }
    if (my $accessor = $spec->{accessor}) {
      _die_overwrite($into, $accessor, 'an accessor')
        if !$spec->{allow_overwrite} && defined &{"${into}::${accessor}"};
      if (
        our $CAN_HAZ_XS
        && $self->is_simple_get($name, $spec)
        && $self->is_simple_set($name, $spec)
      ) {
        $methods{$accessor} = $self->_generate_xs(
          accessors => $into, $accessor, $name, $spec
        );
      } else {
        $self->{captures} = {};
        $methods{$accessor} =
          quote_sub "${into}::${accessor}"
            => $self->_generate_getset($name, $spec)
            => delete $self->{captures}
            => $quote_opts
          ;
      }
    }
    if (my $writer = $spec->{writer}) {
      _die_overwrite($into, $writer, 'a writer')
        if !$spec->{allow_overwrite} && defined &{"${into}::${writer}"};
      if (
        our $CAN_HAZ_XS
        && $self->is_simple_set($name, $spec)
      ) {
        $methods{$writer} = $self->_generate_xs(
          setters => $into, $writer, $name, $spec
        );
      } else {
        $self->{captures} = {};
        $methods{$writer} =
          quote_sub "${into}::${writer}"
            => $self->_generate_set($name, $spec)
            => delete $self->{captures}
            => $quote_opts
          ;
      }
    }
    if (my $pred = $spec->{predicate}) {
      _die_overwrite($into, $pred, 'a predicate')
        if !$spec->{allow_overwrite} && defined &{"${into}::${pred}"};
      if (our $CAN_HAZ_XS && our $CAN_HAZ_XS_PRED) {
        $methods{$pred} = $self->_generate_xs(
          exists_predicates => $into, $pred, $name, $spec
        );
      } else {
        $methods{$pred} =
          quote_sub "${into}::${pred}"
            => $self->_generate_simple_has('$_[0]', $name, $spec)."\n"
            => {}
            => $quote_opts
          ;
      }
    }
    if (my $pred = $spec->{builder_sub}) {
      _install_coderef( "${into}::$spec->{builder}" => $spec->{builder_sub} );
    }
    if (my $cl = $spec->{clearer}) {
      _die_overwrite($into, $cl, 'a clearer')
        if !$spec->{allow_overwrite} && defined &{"${into}::${cl}"};
      $methods{$cl} =
        quote_sub "${into}::${cl}"
          => $self->_generate_simple_clear('$_[0]', $name, $spec)."\n"
          => {}
          => $quote_opts
        ;
    }
    if (my $hspec = $spec->{handles}) {
      my $asserter = $spec->{asserter} ||= '_assert_'.$name;
      my @specs = do {
        if (ref($hspec) eq 'ARRAY') {
          map [ $_ => $_ ], @$hspec;
        } elsif (ref($hspec) eq 'HASH') {
          map [ $_ => ref($hspec->{$_}) ? @{$hspec->{$_}} : $hspec->{$_} ],
            keys %$hspec;
        } elsif (!ref($hspec)) {
          require Moo::Role;
          _load_module $hspec;
          map [ $_ => $_ ], Moo::Role->methods_provided_by($hspec)
        } else {
          croak "You gave me a handles of ${hspec} and I have no idea why";
        }
      };
      foreach my $delegation_spec (@specs) {
        my ($proxy, $target, @args) = @$delegation_spec;
        _die_overwrite($into, $proxy, 'a delegation')
          if !$spec->{allow_overwrite} && defined &{"${into}::${proxy}"};
        $self->{captures} = {};
        $methods{$proxy} =
          quote_sub "${into}::${proxy}"
            => $self->_generate_delegation($asserter, $target, \@args)
            => delete $self->{captures}
            => $quote_opts
          ;
      }
    }
    if (my $asserter = $spec->{asserter}) {
      _die_overwrite($into, $asserter, 'an asserter')
        if !$spec->{allow_overwrite} && defined &{"${into}::${asserter}"};
      local $self->{captures} = {};
      $methods{$asserter} =
        quote_sub "${into}::${asserter}"
          => $self->_generate_asserter($name, $spec)
          => delete $self->{captures}
          => $quote_opts
        ;
    }
    \%methods;
  }
  
  sub is_simple_attribute {
    my ($self, $name, $spec) = @_;
    # clearer doesn't have to be listed because it doesn't
    # affect whether defined/exists makes a difference
    !grep $spec->{$_},
      qw(lazy default builder coerce isa trigger predicate weak_ref);
  }
  
  sub is_simple_get {
    my ($self, $name, $spec) = @_;
    !($spec->{lazy} and (exists $spec->{default} or $spec->{builder}));
  }
  
  sub is_simple_set {
    my ($self, $name, $spec) = @_;
    !grep $spec->{$_}, qw(coerce isa trigger weak_ref);
  }
  
  sub has_default {
    my ($self, $name, $spec) = @_;
    $spec->{builder} or exists $spec->{default} or (($spec->{is}||'') eq 'lazy');
  }
  
  sub has_eager_default {
    my ($self, $name, $spec) = @_;
    (!$spec->{lazy} and (exists $spec->{default} or $spec->{builder}));
  }
  
  sub _generate_get {
    my ($self, $name, $spec) = @_;
    my $simple = $self->_generate_simple_get('$_[0]', $name, $spec);
    if ($self->is_simple_get($name, $spec)) {
      $simple;
    } else {
      $self->_generate_use_default(
        '$_[0]', $name, $spec,
        $self->_generate_simple_has('$_[0]', $name, $spec),
      );
    }
  }
  
  sub generate_simple_has {
    my $self = shift;
    $self->{captures} = {};
    my $code = $self->_generate_simple_has(@_);
    ($code, delete $self->{captures});
  }
  
  sub _generate_simple_has {
    my ($self, $me, $name) = @_;
    "exists ${me}->{${\quotify $name}}";
  }
  
  sub _generate_simple_clear {
    my ($self, $me, $name) = @_;
    "    delete ${me}->{${\quotify $name}}\n"
  }
  
  sub generate_get_default {
    my $self = shift;
    $self->{captures} = {};
    my $code = $self->_generate_get_default(@_);
    ($code, delete $self->{captures});
  }
  
  sub generate_use_default {
    my $self = shift;
    $self->{captures} = {};
    my $code = $self->_generate_use_default(@_);
    ($code, delete $self->{captures});
  }
  
  sub _generate_use_default {
    my ($self, $me, $name, $spec, $test) = @_;
    my $get_value = $self->_generate_get_default($me, $name, $spec);
    if ($spec->{coerce}) {
      $get_value = $self->_generate_coerce(
        $name, $get_value,
        $spec->{coerce}
      )
    }
    $test." ? \n"
    .$self->_generate_simple_get($me, $name, $spec)."\n:"
    .($spec->{isa} ?
         "    do {\n      my \$value = ".$get_value.";\n"
        ."      ".$self->_generate_isa_check($name, '$value', $spec->{isa}).";\n"
        ."      ".$self->_generate_simple_set($me, $name, $spec, '$value')."\n"
        ."    }\n"
      : '    ('.$self->_generate_simple_set($me, $name, $spec, $get_value).")\n"
    );
  }
  
  sub _generate_get_default {
    my ($self, $me, $name, $spec) = @_;
    if (exists $spec->{default}) {
      ref $spec->{default}
        ? $self->_generate_call_code($name, 'default', $me, $spec->{default})
      : quotify $spec->{default};
    }
    else {
      "${me}->${\$spec->{builder}}"
    }
  }
  
  sub generate_simple_get {
    my ($self, @args) = @_;
    $self->{captures} = {};
    my $code = $self->_generate_simple_get(@args);
    ($code, delete $self->{captures});
  }
  
  sub _generate_simple_get {
    my ($self, $me, $name) = @_;
    my $name_str = quotify $name;
    "${me}->{${name_str}}";
  }
  
  sub _generate_set {
    my ($self, $name, $spec) = @_;
    my ($me, $source) = ('$_[0]', '$_[1]');
    if ($self->is_simple_set($name, $spec)) {
      return $self->_generate_simple_set($me, $name, $spec, $source);
    }
  
    my ($coerce, $trigger, $isa_check) = @{$spec}{qw(coerce trigger isa)};
    if ($coerce) {
      $source = $self->_generate_coerce($name, $source, $coerce);
    }
    if ($isa_check) {
      'scalar do { my $value = '.$source.";\n"
      .'  ('.$self->_generate_isa_check($name, '$value', $isa_check)."),\n"
      .'  ('.$self->_generate_simple_set($me, $name, $spec, '$value')."),\n"
      .($trigger
        ? '('.$self->_generate_trigger($name, $me, '$value', $trigger)."),\n"
        : '')
      .'  ('.$self->_generate_simple_get($me, $name, $spec)."),\n"
      ."}";
    }
    elsif ($trigger) {
      my $set = $self->_generate_simple_set($me, $name, $spec, $source);
      "scalar (\n"
      . '  ('.$self->_generate_trigger($name, $me, "($set)", $trigger)."),\n"
      . '  ('.$self->_generate_simple_get($me, $name, $spec)."),\n"
      . ")";
    }
    else {
      '('.$self->_generate_simple_set($me, $name, $spec, $source).')';
    }
  }
  
  sub generate_coerce {
    my $self = shift;
    $self->{captures} = {};
    my $code = $self->_generate_coerce(@_);
    ($code, delete $self->{captures});
  }
  
  sub _attr_desc {
    my ($name, $init_arg) = @_;
    return quotify($name) if !defined($init_arg) or $init_arg eq $name;
    return quotify($name).' (constructor argument: '.quotify($init_arg).')';
  }
  
  sub _generate_coerce {
    my ($self, $name, $value, $coerce, $init_arg) = @_;
    $self->_wrap_attr_exception(
      $name,
      "coercion",
      $init_arg,
      $self->_generate_call_code($name, 'coerce', "${value}", $coerce),
      1,
    );
  }
  
  sub generate_trigger {
    my $self = shift;
    $self->{captures} = {};
    my $code = $self->_generate_trigger(@_);
    ($code, delete $self->{captures});
  }
  
  sub _generate_trigger {
    my ($self, $name, $obj, $value, $trigger) = @_;
    $self->_generate_call_code($name, 'trigger', "${obj}, ${value}", $trigger);
  }
  
  sub generate_isa_check {
    my ($self, @args) = @_;
    $self->{captures} = {};
    my $code = $self->_generate_isa_check(@args);
    ($code, delete $self->{captures});
  }
  
  sub _wrap_attr_exception {
    my ($self, $name, $step, $arg, $code, $want_return) = @_;
    my $prefix = quotify("${step} for "._attr_desc($name, $arg).' failed: ');
    "do {\n"
    .'  local $Method::Generate::Accessor::CurrentAttribute = {'."\n"
    .'    init_arg => '.quotify($arg).",\n"
    .'    name     => '.quotify($name).",\n"
    .'    step     => '.quotify($step).",\n"
    ."  };\n"
    .($want_return ? '  (my $_return),'."\n" : '')
    .'  (my $_error), (my $_old_error = $@);'."\n"
    ."  (eval {\n"
    .'    ($@ = $_old_error),'."\n"
    .'    ('
    .($want_return ? '$_return ='."\n" : '')
    .$code."),\n"
    ."    1\n"
    ."  } or\n"
    .'    $_error = CORE::ref $@ ? $@ : '.$prefix.'.$@);'."\n"
    .'  ($@ = $_old_error),'."\n"
    .'  (defined $_error and CORE::die $_error);'."\n"
    .($want_return ? '  $_return;'."\n" : '')
    ."}\n"
  }
  
  sub _generate_isa_check {
    my ($self, $name, $value, $check, $init_arg) = @_;
    $self->_wrap_attr_exception(
      $name,
      "isa check",
      $init_arg,
      $self->_generate_call_code($name, 'isa_check', $value, $check)
    );
  }
  
  sub _generate_call_code {
    my ($self, $name, $type, $values, $sub) = @_;
    $sub = \&{$sub} if blessed($sub);  # coderef if blessed
    if (my $quoted = quoted_from_sub($sub)) {
      my $local = 1;
      if ($values eq '@_' || $values eq '$_[0]') {
        $local = 0;
        $values = '@_';
      }
      my $code = $quoted->[1];
      if (my $captures = $quoted->[2]) {
        my $cap_name = qq{\$${type}_captures_for_}.sanitize_identifier($name);
        $self->{captures}->{$cap_name} = \$captures;
        Sub::Quote::inlinify($code, $values,
          Sub::Quote::capture_unroll($cap_name, $captures, 6), $local);
      } else {
        Sub::Quote::inlinify($code, $values, undef, $local);
      }
    } else {
      my $cap_name = qq{\$${type}_for_}.sanitize_identifier($name);
      $self->{captures}->{$cap_name} = \$sub;
      "${cap_name}->(${values})";
    }
  }
  
  sub _sanitize_name { sanitize_identifier($_[1]) }
  
  sub generate_populate_set {
    my $self = shift;
    $self->{captures} = {};
    my $code = $self->_generate_populate_set(@_);
    ($code, delete $self->{captures});
  }
  
  sub _generate_populate_set {
    my ($self, $me, $name, $spec, $source, $test, $init_arg) = @_;
  
    my $has_default = $self->has_eager_default($name, $spec);
    if (!($has_default || $test)) {
      return '';
    }
    if ($has_default) {
      my $get_default = $self->_generate_get_default($me, $name, $spec);
      $source =
        $test
          ? "(\n  ${test}\n"
              ."   ? ${source}\n   : "
              .$get_default
              .")"
          : $get_default;
    }
    if ($spec->{coerce}) {
      $source = $self->_generate_coerce(
        $name, $source,
        $spec->{coerce}, $init_arg
      )
    }
    if ($spec->{isa}) {
      $source = 'scalar do { my $value = '.$source.";\n"
      .'  ('.$self->_generate_isa_check(
          $name, '$value', $spec->{isa}, $init_arg
        )."),\n"
      ."  \$value\n"
      ."}\n";
    }
    my $set = $self->_generate_simple_set($me, $name, $spec, $source);
    my $trigger = $spec->{trigger} ? $self->_generate_trigger(
      $name, $me, $self->_generate_simple_get($me, $name, $spec),
      $spec->{trigger}
    ) : undef;
    if ($has_default) {
      "($set)," . ($trigger ? "($test and $trigger)," : '')
    }
    else {
      "($test and ($set)" . ($trigger ? ", ($trigger)" : '') . "),";
    }
  }
  
  sub _generate_core_set {
    my ($self, $me, $name, $spec, $value) = @_;
    my $name_str = quotify $name;
    "${me}->{${name_str}} = ${value}";
  }
  
  sub _generate_simple_set {
    my ($self, $me, $name, $spec, $value) = @_;
    my $name_str = quotify $name;
    my $simple = $self->_generate_core_set($me, $name, $spec, $value);
  
    if ($spec->{weak_ref}) {
      require Scalar::Util;
      my $get = $self->_generate_simple_get($me, $name, $spec);
  
      # Perl < 5.8.3 can't weaken refs to readonly vars
      # (e.g. string constants). This *can* be solved by:
      #
      # &Internals::SvREADONLY($foo, 0);
      # Scalar::Util::weaken($foo);
      # &Internals::SvREADONLY($foo, 1);
      #
      # but requires Internal functions and is just too damn crazy
      # so simply throw a better exception
      my $weak_simple = _CAN_WEAKEN_READONLY
        ? "do { Scalar::Util::weaken(${simple}); no warnings 'void'; $get }"
        : <<"EOC"
          ( eval { Scalar::Util::weaken($simple); 1 }
            ? do { no warnings 'void'; $get }
            : do {
              if( \$@ =~ /Modification of a read-only value attempted/) {
                require Carp;
                Carp::croak( sprintf (
                  'Reference to readonly value in "%s" can not be weakened on Perl < 5.8.3',
                  $name_str,
                ) );
              } else {
                die \$@;
              }
            }
          )
  EOC
    } else {
      $simple;
    }
  }
  
  sub _generate_getset {
    my ($self, $name, $spec) = @_;
    q{(@_ > 1}."\n      ? ".$self->_generate_set($name, $spec)
      ."\n      : ".$self->_generate_get($name, $spec)."\n    )";
  }
  
  sub _generate_asserter {
    my ($self, $name, $spec) = @_;
  
    "do {\n"
     ."  my \$val = ".$self->_generate_get($name, $spec).";\n"
     ."  ".$self->_generate_simple_has('$_[0]', $name, $spec)."\n"
     ."    or Carp::croak(\"Attempted to access '${name}' but it is not set\");\n"
     ."  \$val;\n"
     ."}\n";
  }
  sub _generate_delegation {
    my ($self, $asserter, $target, $args) = @_;
    my $arg_string = do {
      if (@$args) {
        # I could, I reckon, linearise out non-refs here using quotify
        # plus something to check for numbers but I'm unsure if it's worth it
        $self->{captures}{'@curries'} = $args;
        '@curries, @_';
      } else {
        '@_';
      }
    };
    "shift->${asserter}->${target}(${arg_string});";
  }
  
  sub _generate_xs {
    my ($self, $type, $into, $name, $slot) = @_;
    Class::XSAccessor->import(
      class => $into,
      $type => { $name => $slot },
      replace => 1,
    );
    $into->can($name);
  }
  
  sub default_construction_string { '{}' }
  
  sub _validate_codulatable {
    my ($self, $setting, $value, $into, $appended) = @_;
    my $invalid = "Invalid $setting '" . overload::StrVal($value)
      . "' for $into not a coderef";
    $invalid .= " $appended" if $appended;
  
    unless (ref $value and (ref $value eq 'CODE' or blessed($value))) {
      croak "$invalid or code-convertible object";
    }
  
    unless (eval { \&$value }) {
      croak "$invalid and could not be converted to a coderef: $@";
    }
  
    1;
  }
  
  1;
METHOD_GENERATE_ACCESSOR

    $main::fatpacked{"Method/Generate/BuildAll.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'METHOD_GENERATE_BUILDALL';
  package Method::Generate::BuildAll;
  
  use Moo::_strictures;
  use Moo::Object ();
  BEGIN { our @ISA = qw(Moo::Object) }
  use Sub::Quote qw(quote_sub quotify);
  use Moo::_Utils qw(_getglob);
  use Moo::_mro;
  
  sub generate_method {
    my ($self, $into) = @_;
    quote_sub "${into}::BUILDALL"
      => join('',
        $self->_handle_subbuild($into),
        qq{    my \$self = shift;\n},
        $self->buildall_body_for($into, '$self', '@_'),
        qq{    return \$self\n},
      )
      => {}
      => { no_defer => 1 }
    ;
  }
  
  sub _handle_subbuild {
    my ($self, $into) = @_;
    '    if (ref($_[0]) ne '.quotify($into).') {'."\n".
    '      return shift->Moo::Object::BUILDALL(@_)'.";\n".
    '    }'."\n";
  }
  
  sub buildall_body_for {
    my ($self, $into, $me, $args) = @_;
    my @builds =
      grep *{_getglob($_)}{CODE},
      map "${_}::BUILD",
      reverse @{mro::get_linear_isa($into)};
    '    (('.$args.')[0]->{__no_BUILD__} or ('."\n"
    .join('', map qq{      ${me}->${_}(${args}),\n}, @builds)
    ."    )),\n";
  }
  
  1;
METHOD_GENERATE_BUILDALL

    $main::fatpacked{"Method/Generate/Constructor.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'METHOD_GENERATE_CONSTRUCTOR';
  package Method::Generate::Constructor;
  
  use Moo::_strictures;
  use Sub::Quote qw(quote_sub quotify);
  use Sub::Defer;
  use Moo::_Utils qw(_getstash _getglob);
  use Moo::_mro;
  use Scalar::Util qw(weaken);
  use Carp qw(croak);
  use Carp::Heavy ();
  BEGIN { our @CARP_NOT = qw(Sub::Defer) }
  BEGIN {
    local $Moo::sification::disabled = 1;
    require Moo;
    Moo->import;
  }
  
  sub register_attribute_specs {
    my ($self, @new_specs) = @_;
    $self->assert_constructor;
    my $specs = $self->{attribute_specs}||={};
    while (my ($name, $new_spec) = splice @new_specs, 0, 2) {
      if ($name =~ s/^\+//) {
        croak "has '+${name}' given but no ${name} attribute already exists"
          unless my $old_spec = $specs->{$name};
        foreach my $key (keys %$old_spec) {
          if (!exists $new_spec->{$key}) {
            $new_spec->{$key} = $old_spec->{$key}
              unless $key eq 'handles';
          }
          elsif ($key eq 'moosify') {
            $new_spec->{$key} = [
              map { ref $_ eq 'ARRAY' ? @$_ : $_ }
                ($old_spec->{$key}, $new_spec->{$key})
            ];
          }
        }
      }
      if ($new_spec->{required}
        && !(
          $self->accessor_generator->has_default($name, $new_spec)
          || !exists $new_spec->{init_arg}
          || defined $new_spec->{init_arg}
        )
      ) {
        croak "You cannot have a required attribute (${name})"
          . " without a default, builder, or an init_arg";
      }
      $new_spec->{index} = scalar keys %$specs
        unless defined $new_spec->{index};
      $specs->{$name} = $new_spec;
    }
    $self;
  }
  
  sub all_attribute_specs {
    $_[0]->{attribute_specs}
  }
  
  sub accessor_generator {
    $_[0]->{accessor_generator}
  }
  
  sub construction_string {
    my ($self) = @_;
    $self->{construction_string}
      ||= $self->_build_construction_string;
  }
  
  sub buildall_generator {
    require Method::Generate::BuildAll;
    Method::Generate::BuildAll->new;
  }
  
  sub _build_construction_string {
    my ($self) = @_;
    my $builder = $self->{construction_builder};
    $builder ? $self->$builder
      : 'bless('
      .$self->accessor_generator->default_construction_string
      .', $class);'
  }
  
  sub install_delayed {
    my ($self) = @_;
    $self->assert_constructor;
    my $package = $self->{package};
    my (undef, @isa) = @{mro::get_linear_isa($package)};
    my $isa = join ',', @isa;
    my (undef, $from_file, $from_line) = caller(Carp::short_error_loc());
    my $constructor = defer_sub "${package}::new" => sub {
      my (undef, @new_isa) = @{mro::get_linear_isa($package)};
      if (join(',', @new_isa) ne $isa) {
        my ($expected_new) = grep { *{_getglob($_.'::new')}{CODE} } @isa;
        my ($found_new) = grep { *{_getglob($_.'::new')}{CODE} } @new_isa;
        if (($found_new||'') ne ($expected_new||'')) {
          $found_new ||= 'none';
          $expected_new ||= 'none';
          croak "Expected parent constructor of $package to be"
          . " $expected_new, but found $found_new: changing the inheritance"
          . " chain (\@ISA) at runtime (after $from_file line $from_line) is unsupported";
        }
      }
  
      my $constructor = $self->generate_method(
        $package, 'new', $self->{attribute_specs}, { no_install => 1, no_defer => 1 }
      );
      $self->{inlined} = 1;
      weaken($self->{constructor} = $constructor);
      $constructor;
    };
    $self->{inlined} = 0;
    weaken($self->{constructor} = $constructor);
    $self;
  }
  
  sub current_constructor {
    my ($self, $package) = @_;
    return *{_getglob("${package}::new")}{CODE};
  }
  
  sub assert_constructor {
    my ($self) = @_;
    my $package = $self->{package} or return 1;
    my $current = $self->current_constructor($package)
      or return 1;
    my $constructor = $self->{constructor}
      or croak "Unknown constructor for $package already exists";
    croak "Constructor for $package has been replaced with an unknown sub"
      if $constructor != $current;
    croak "Constructor for $package has been inlined and cannot be updated"
      if $self->{inlined};
  }
  
  sub generate_method {
    my ($self, $into, $name, $spec, $quote_opts) = @_;
    $quote_opts = {
      %{$quote_opts||{}},
      package => $into,
    };
    foreach my $no_init (grep !exists($spec->{$_}{init_arg}), keys %$spec) {
      $spec->{$no_init}{init_arg} = $no_init;
    }
    local $self->{captures} = {};
  
    my $into_buildargs = $into->can('BUILDARGS');
  
    my $body
      = '    my $invoker = CORE::shift();'."\n"
      . '    my $class = CORE::ref($invoker) ? CORE::ref($invoker) : $invoker;'."\n"
      . $self->_handle_subconstructor($into, $name)
      . ( $into_buildargs && $into_buildargs != \&Moo::Object::BUILDARGS
        ? $self->_generate_args_via_buildargs
        : $self->_generate_args
      )
      . $self->_check_required($spec)
      . '    my $new = '.$self->construction_string.";\n"
      . $self->_assign_new($spec)
      . ( $into->can('BUILD')
        ? $self->buildall_generator->buildall_body_for( $into, '$new', '$args' )
        : ''
      )
      . '    return $new;'."\n";
  
    if ($into->can('DEMOLISH')) {
      require Method::Generate::DemolishAll;
      Method::Generate::DemolishAll->new->generate_method($into);
    }
    quote_sub
      "${into}::${name}" => $body,
      $self->{captures}, $quote_opts||{}
    ;
  }
  
  sub _handle_subconstructor {
    my ($self, $into, $name) = @_;
    if (my $gen = $self->{subconstructor_handler}) {
      '    if ($class ne '.quotify($into).') {'."\n".
      $gen.
      '    }'."\n";
    } else {
      ''
    }
  }
  
  sub _cap_call {
    my ($self, $code, $captures) = @_;
    @{$self->{captures}}{keys %$captures} = values %$captures if $captures;
    $code;
  }
  
  sub _generate_args_via_buildargs {
    my ($self) = @_;
    q{    my $args = $class->BUILDARGS(@_);}."\n"
    .q{    Carp::croak("BUILDARGS did not return a hashref") unless CORE::ref($args) eq 'HASH';}
    ."\n";
  }
  
  # inlined from Moo::Object - update that first.
  sub _generate_args {
    my ($self) = @_;
    return <<'_EOA';
      my $args = scalar @_ == 1
        ? CORE::ref $_[0] eq 'HASH'
          ? { %{ $_[0] } }
          : Carp::croak("Single parameters to new() must be a HASH ref"
              . " data => ". $_[0])
        : @_ % 2
          ? Carp::croak("The new() method for $class expects a hash reference or a"
              . " key/value list. You passed an odd number of arguments")
          : {@_}
      ;
  _EOA
  
  }
  
  sub _assign_new {
    my ($self, $spec) = @_;
    my $ag = $self->accessor_generator;
    my %test;
    NAME: foreach my $name (sort keys %$spec) {
      my $attr_spec = $spec->{$name};
      next NAME unless defined($attr_spec->{init_arg})
                         or $ag->has_eager_default($name, $attr_spec);
      $test{$name} = $attr_spec->{init_arg};
    }
    join '', map {
      my $arg = $test{$_};
      my $arg_key = quotify($arg);
      my $test = defined $arg ? "exists \$args->{$arg_key}" : undef;
      my $source = defined $arg ? "\$args->{$arg_key}" : undef;
      my $attr_spec = $spec->{$_};
      $self->_cap_call($ag->generate_populate_set(
        '$new', $_, $attr_spec, $source, $test, $arg,
      ));
    } sort keys %test;
  }
  
  sub _check_required {
    my ($self, $spec) = @_;
    my @required_init =
      map $spec->{$_}{init_arg},
        grep {
          my %s = %{$spec->{$_}}; # ignore required if default or builder set
          $s{required} and not($s{builder} or exists $s{default})
        } sort keys %$spec;
    return '' unless @required_init;
    '    if (my @missing = grep !exists $args->{$_}, '
      .join(', ', map quotify($_), @required_init).') {'."\n"
      .q{      Carp::croak("Missing required arguments: ".CORE::join(', ', sort @missing));}."\n"
      ."    }\n";
  }
  
  # bootstrap our own constructor
  sub new {
    my $class = shift;
    delete _getstash(__PACKAGE__)->{new};
    bless $class->BUILDARGS(@_), $class;
  }
  Moo->_constructor_maker_for(__PACKAGE__)
  ->register_attribute_specs(
    attribute_specs => {
      is => 'ro',
      reader => 'all_attribute_specs',
    },
    accessor_generator => { is => 'ro' },
    construction_string => { is => 'lazy' },
    construction_builder => { is => 'bare' },
    subconstructor_handler => { is => 'ro' },
    package => { is => 'bare' },
  );
  if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
    Moo::HandleMoose::inject_fake_metaclass_for(__PACKAGE__);
  }
  
  1;
METHOD_GENERATE_CONSTRUCTOR

    $main::fatpacked{"Method/Generate/DemolishAll.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'METHOD_GENERATE_DEMOLISHALL';
  package Method::Generate::DemolishAll;
  
  use Moo::_strictures;
  use Moo::Object ();
  BEGIN { our @ISA = qw(Moo::Object) }
  use Sub::Quote qw(quote_sub quotify);
  use Moo::_Utils qw(_getglob);
  use Moo::_mro;
  
  sub generate_method {
    my ($self, $into) = @_;
    quote_sub "${into}::DEMOLISHALL", join '',
      $self->_handle_subdemolish($into),
      qq{    my \$self = shift;\n},
      $self->demolishall_body_for($into, '$self', '@_'),
      qq{    return \$self\n};
    quote_sub "${into}::DESTROY", join '',
      q!    my $self = shift;
      my $e = do {
        local $?;
        local $@;
        require Devel::GlobalDestruction;
        eval {
          $self->DEMOLISHALL(Devel::GlobalDestruction::in_global_destruction);
        };
        $@;
      };
  
      # fatal warnings+die in DESTROY = bad times (perl rt#123398)
      no warnings FATAL => 'all';
      use warnings 'all';
      die $e if $e; # rethrow
    !;
  }
  
  sub demolishall_body_for {
    my ($self, $into, $me, $args) = @_;
    my @demolishers =
      grep *{_getglob($_)}{CODE},
      map "${_}::DEMOLISH",
      @{mro::get_linear_isa($into)};
    join '', map qq{    ${me}->${_}(${args});\n}, @demolishers;
  }
  
  sub _handle_subdemolish {
    my ($self, $into) = @_;
    '    if (ref($_[0]) ne '.quotify($into).') {'."\n".
    '      return shift->Moo::Object::DEMOLISHALL(@_)'.";\n".
    '    }'."\n";
  }
  
  1;
METHOD_GENERATE_DEMOLISHALL

    $main::fatpacked{"Mo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO';
  package Mo;
  $Mo::VERSION = '0.40';
  $VERSION='0.40';
  no warnings;my$M=__PACKAGE__.'::';*{$M.Object::new}=sub{my$c=shift;my$s=bless{@_},$c;my%n=%{$c.'::'.':E'};map{$s->{$_}=$n{$_}->()if!exists$s->{$_}}keys%n;$s};*{$M.import}=sub{import warnings;$^H|=1538;my($P,%e,%o)=caller.'::';shift;eval"no Mo::$_",&{$M.$_.::e}($P,\%e,\%o,\@_)for@_;return if$e{M};%e=(extends,sub{eval"no $_[0]()";@{$P.ISA}=$_[0]},has,sub{my$n=shift;my$m=sub{$#_?$_[0]{$n}=$_[1]:$_[0]{$n}};@_=(default,@_)if!($#_%2);$m=$o{$_}->($m,$n,@_)for sort keys%o;*{$P.$n}=$m},%e,);*{$P.$_}=$e{$_}for keys%e;@{$P.ISA}=$M.Object};
MO

    $main::fatpacked{"Mo/Golf.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_GOLF';
  ##
  # name:      Mo::Golf
  # abstract:  Module for Compacting Mo Modules
  # author:    Ingy döt Net <ingy@ingy.net>
  # license:   perl
  # copyright: 2011
  # see:
  # - Mo
  
  use strict;
  use warnings;
  package Mo::Golf;
  
  our $VERSION='0.40';
  
  use PPI;
  
  # This is the mapping of common names to shorter forms that still make some
  # sense.
  my %short_names = (
      (
          map {($_, substr($_, 0, 1))}
          qw(
              args builder class default exports features
              generator import is_lazy method MoPKG name
              nonlazy_defaults options reftype self
          )
      ),
      build_subs => 'B',
      old_constructor => 'C',
      caller_pkg => 'P',
  );
  
  my %short_barewords = ( EAGERINIT => q{':E'}, NONLAZY => q{':N'} );
  
  my %hands_off = map {($_,1)} qw'&import *import';
  
  sub import {
      return unless @_ == 2 and $_[1] eq 'golf';
      binmode STDOUT;
      my $text = do { local $/; <> };
      print STDOUT golf( $text );
  };
  
  sub golf {
      my ( $text ) = @_;
  
      my $tree = PPI::Document->new( \$text );
  
      my %finder_subs = _finder_subs();
  
      my @order = qw( comments duplicate_whitespace whitespace trailing_whitespace );
  
      for my $name ( @order ) {
          my $elements = $tree->find( $finder_subs{$name} );
          die $@ if !defined $elements;
          $_->delete for @{ $elements || [] };
      }
  
      $tree->find( $finder_subs{$_} )
        for qw( del_superfluous_concat del_last_semicolon_in_block separate_version shorten_var_names shorten_barewords );
      die $@ if $@;
  
      for my $name ( 'double_semicolon' ) {
          my $elements = $tree->find( $finder_subs{$name} );
          die $@ if !defined $elements;
          $_->delete for @{ $elements || [] };
      }
  
      return $tree->serialize . "\n";
  }
  
  sub tok { "PPI::Token::$_[0]" }
  
  sub _finder_subs {
      return (
          comments => sub { $_[1]->isa( tok 'Comment' ) },
  
          duplicate_whitespace => sub {
              my ( $top, $current ) = @_;
              return 0 if !$current->isa( tok 'Whitespace' );
  
              $current->set_content(' ') if 1 < length $current->content;
  
              return 0 if !$current->next_token;
              return 0 if !$current->next_token->isa( tok 'Whitespace' );
              return 1;
          },
  
          whitespace => sub {
              my ( $top, $current ) = @_;
              return 0 if !$current->isa( tok 'Whitespace' );
              my $prev = $current->previous_token;
              my $next = $current->next_token;
  
              return 1 if $prev->isa( tok 'Number' ) and $next->isa( tok 'Operator' ) and $next->content =~ /^\W/; # my $P
              return 1 if $prev->isa( tok 'Word' )   and $next->isa( tok 'Operator' ) and $next->content =~ /^\W/; # my $P
              return 1 if $prev->isa( tok 'Symbol' ) and $next->isa( tok 'Operator' ) and $next->content =~ /^\W/; # $VERSION =  but not $v and
  
              return 1 if $prev->isa( tok 'Operator' ) and $next->isa( tok 'Quote::Single' ) and $next->content =~ /^\W/; # eq ''
              return 1 if $prev->isa( tok 'Operator' ) and $next->isa( tok 'Quote::Double' ) and $next->content =~ /^\W/; # eq ""
              return 1 if $prev->isa( tok 'Operator' ) and $next->isa( tok 'Symbol' )        and $next->content =~ /^\W/; # eq $v
              return 1 if $prev->isa( tok 'Operator' ) and $next->isa( tok 'Structure' )     and $next->content =~ /^\W/; # eq (
  
              return 1 if $prev->isa( tok 'Word' )       and $next->isa( tok 'Symbol' );           # my $P
              return 1 if $prev->isa( tok 'Word' )       and $next->isa( tok 'Structure' );        # sub {
              return 1 if $prev->isa( tok 'Word' )       and $next->isa( tok 'Quote::Double' );    # eval "
              return 1 if $prev->isa( tok 'Symbol' )     and $next->isa( tok 'Structure' );        # %a )
              return 1 if $prev->isa( tok 'ArrayIndex' ) and $next->isa( tok 'Operator' );         # $#_ ?
              return 1 if $prev->isa( tok 'Word' )       and $next->isa( tok 'Cast' );             # exists &$_
              return 0;
          },
  
          trailing_whitespace => sub {
              my ( $top, $current ) = @_;
              return 0 if !$current->isa( tok 'Whitespace' );
              my $prev = $current->previous_token;
  
              return 1 if $prev->isa( tok 'Structure' );                                           # ;[\n\s]
              return 1 if $prev->isa( tok 'Operator' ) and $prev->content =~ /\W$/;                # = 0.24
              return 1 if $prev->isa( tok 'Quote::Double' );                                       # " .
              return 1 if $prev->isa( tok 'Quote::Single' );                                       # ' }
  
              return 0;
          },
  
          double_semicolon => sub {
              my ( $top, $current ) = @_;
              return 0 if !$current->isa( tok 'Structure' );
              return 0 if $current->content ne ';';
  
              my $prev = $current->previous_token;
  
              return 0 if !$prev->isa( tok 'Structure' );
              return 0 if $prev->content ne ';';
  
              return 1;
          },
  
          del_last_semicolon_in_block => sub {
              my ( $top, $current ) = @_;
              return 0 if !$current->isa( 'PPI::Structure::Block' );
  
              my $last = $current->last_token;
  
              return 0 if !$last->isa( tok 'Structure' );
              return 0 if $last->content ne '}';
  
              my $maybe_semi = $last->previous_token;
  
              return 0 if !$maybe_semi->isa( tok 'Structure' );
              return 0 if $maybe_semi->content ne ';';
  
              $maybe_semi->delete;
  
              return 1;
          },
  
          del_superfluous_concat => sub {
              my ( $top, $current ) = @_;
              return 0 if !$current->isa( tok 'Operator' );
  
              my $prev = $current->previous_token;
              my $next = $current->next_token;
  
              return 0 if $current->content ne '.';
              return 0 if !$prev->isa( tok 'Quote::Double' );
              return 0 if !$next->isa( tok 'Quote::Double' );
  
              $current->delete;
              $prev->set_content( $prev->{separator} . $prev->string . $next->string . $prev->{separator} );
              $next->delete;
  
              return 1;
          },
  
          separate_version => sub {
              my ( $top, $current ) = @_;
              return 0 if !$current->isa( 'PPI::Statement' );
  
              my $first = $current->first_token;
              return 0 if $first->content ne '$VERSION';
  
              $current->$_( PPI::Token::Whitespace->new( "\n" ) ) for qw( insert_before insert_after );
  
              return 1;
          },
  
          shorten_var_names => sub {
              my ( $top, $current ) = @_;
              return 0 if !$current->isa( tok 'Symbol' );
  
              my $long_name = $current->canonical;
  
              return 1 if $hands_off{$long_name};
              (my $name = $long_name) =~ s/^([\$\@\%])// or die $long_name;
              my $sigil = $1;
              die "variable $long_name conflicts with shortened var name"
                  if grep {
                      $name eq $_
                  } values %short_names;
  
              my $short_name = $short_names{$name};
              $current->set_content( "$sigil$short_name" ) if $short_name;
  
              return 1;
          },
  
          shorten_barewords => sub {
              my ( $top, $current ) = @_;
              return 0 if !$current->isa( tok 'Word' );
  
              my $name = $current->content;
  
              die "bareword $name conflicts with shortened bareword"
                  if grep {
                      $name eq $_
                  } values %short_barewords;
  
              my $short_name = $short_barewords{$name};
              $current->set_content( $short_name ) if $short_name;
  
              return 1;
          },
      );
  }
  
  =head1 SYNOPSIS
  
      perl -MMo::Golf=golf < src/Mo/foo.pm > lib/Mo/foo.pm
  
  =head1 DESCRIPTION
  
  This is the module that is responsible for taking Mo code (which is
  documented and fairly readable) and reducing it to a single undecipherable
  line.
MO_GOLF

    $main::fatpacked{"Mo/Inline.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_INLINE';
  ##
  # name:      Mo::Inline
  # abstract:  Inline Mo and Features into your package
  # author:    Ingy döt Net <ingy@ingy.net>
  # license:   perl
  # copyright: 2011
  # see:
  # - Mo
  
  package Mo::Inline;
  use Mo;
  
  our $VERSION='0.40';
  
  use IO::All;
  
  my $matcher = qr/((?m:^#\s*use Mo(\s.*)?;.*\n))(?:#.*\n)*(?:.{400,}\n)?/;
  
  sub run {
      my $self = shift;
      my @files;
      if (not @_ and -d 'lib') {
          print "Searching the 'lib' directory for a Mo to inline:\n";
          @_ = 'lib';
      }
      if (not @_ or @_ == 1 and $_[0] =~ /^(?:-\?|-h|--help)$/) {
          print usage();
          return 0;
      }
      for my $name (@_) {
          die "No file or directory called '$name'"
              unless -e $name;
          die "'$name' is not a Perl module"
              if -f $name and $name !~ /\.pm$/;
          if (-f $name) {
              push @files, $name;
          }
          elsif (-d $name) {
              push @_, grep /\.pm$/, map { "$_" } io($name)->All_Files;
          }
      }
  
      die "No .pm files specified"
          unless @files;
  
      for my $file (@files) {
          my $text = io($file)->all;
          if ($text !~ $matcher) {
              print "Ignoring $file - No Mo to Inline!\n";
              next;
          }
          $self->inline($file, 1);
      }
  }
  
  sub inline {
      my ($self, $file, $noisy) = @_;
      my $text = io($file)->all;
      $text =~ s/$matcher/"$1" . &inliner($2)/eg;
      io($file)->print($text);
      print "Mo Inlined $file\n"
          if $noisy;
  }
  
  sub inliner {
      my $mo = shift;
      require Mo;
      my @features = grep {$_ ne 'qw'} ($mo =~ /(\w+)/g);
      for (@features) {
          eval "require Mo::$_; 1" or die $@;
      }
      my $inline = '';
      $inline .= $_ for map {
          my $module = $_;
          $module .= '.pm';
          my @lines = io($INC{$module})->chomp->getlines;
          $lines[-1];
      } ('Mo', map { s!::!/!g; "Mo/$_" } @features);
      return <<"...";
  #   The following line of code was produced from the previous line by
  #   Mo::Inline version $VERSION
  $inline\@f=qw[@features];use strict;use warnings;
  ...
  }
  
  sub usage {
      <<'...';
  Usage: mo-linline <perl module files or directories>
  
  ...
  }
  
  1;
  
  =head1 SYNOPSIS
  
  In your Mo module:
  
      # This is effectively your own private Mo(ose) setup
      package MyModule::Mo;
      # use Mo qw'build builder default import';
      1;
  
  From the command line:
  
      > mo-inline lib/MyModule/Mo.pm
  
  or:
  
      > mo-inline lib/
  
  or (if you are really lazy):
  
      > mo-inline
  
  Then from another module:
  
      package MyModule::Foo;
      use MyModule::Mo;       # gets build, builder and default automatically
  
  =head1 DESCRIPTION
  
  Mo is so small that you can easily inline it, along with any feature modules.
  Mo provides a script called C<mo-inline> that will do it for you.
  
  All you need to do is comment out the line that uses Mo, and run C<mo-inline>
  on the file. C<mo-inline> will find such comments and do the inlining for you.
  It will also replace any old inlined Mo with the latest version.
  
  What Mo could you possibly want?
  
  =head1 AUTOMATIC FEATURES
  
  By using the L<Mo::import> feature, all uses of your Mo class will turn on all
  the features you specified. You can override it if you want, but that will be
  the default.
  
  =head1 REAL WORLD EXAMPLES
  
  For real world examples of Mo inlined using C<mo-inline>, see L<YAML::Mo>,
  L<Pegex::Mo> and L<TestML::Mo>.
MO_INLINE

    $main::fatpacked{"Mo/Moose.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_MOOSE';
  package Mo::Moose;
  $Mo::Moose::VERSION = '0.40';$M="Mo::";
  $VERSION='0.40';
  *{$M.'Moose::e'}=sub{my($P,$e)=@_;$P=~s/::$//;%$e=(M=>1);require Moose;Moose->import({into=>$P});Moose::Util::MetaRole::apply_metaroles(for=>$P,class_metaroles=>{attribute=>['Attr::Trait']},)};BEGIN{package Attr::Trait;
  $Attr::Trait::VERSION = '0.40';use Moose::Role;around _process_options=>sub{my$orig=shift;my$c=shift;my($n,$o)=@_;$o->{is}||='rw';$o->{lazy}||=1 if defined$o->{default}or defined$o->{builder};$c->$orig(@_)};$INC{'Attr/Trait.pm'}=1}
MO_MOOSE

    $main::fatpacked{"Mo/Mouse.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_MOUSE';
  package Mo::Mouse;
  $Mo::Mouse::VERSION = '0.40';$M="Mo::";
  $VERSION='0.40';
  *{$M.'Mouse::e'}=sub{my($P,$e)=@_;$P=~s/::$//;%$e=(M=>1);require Mouse;require Mouse::Util::MetaRole;Mouse->import({into=>$P});Mouse::Util::MetaRole::apply_metaroles(for=>$P,class_metaroles=>{attribute=>['Attr::Trait']},)};BEGIN{package Attr::Trait;
  $Attr::Trait::VERSION = '0.40';use Mouse::Role;around _process_options=>sub{my$orig=shift;my$c=shift;my($n,$o)=@_;$o->{is}||='rw';$o->{lazy}||=1 if defined$o->{default}or defined$o->{builder};$c->$orig(@_)};$INC{'Attr/Trait.pm'}=1}
MO_MOUSE

    $main::fatpacked{"Mo/build.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_BUILD';
  package Mo::build;
  $Mo::build::VERSION = '0.40';my$M="Mo::";
  $VERSION='0.40';
  *{$M.'build::e'}=sub{my($P,$e)=@_;$e->{new}=sub{$c=shift;my$s=&{$M.Object::new}($c,@_);my@B;do{@B=($c.::BUILD,@B)}while($c)=@{$c.::ISA};exists&$_&&&$_($s)for@B;$s}};
MO_BUILD

    $main::fatpacked{"Mo/builder.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_BUILDER';
  package Mo::builder;
  $Mo::builder::VERSION = '0.40';my$M="Mo::";
  $VERSION='0.40';
  *{$M.'builder::e'}=sub{my($P,$e,$o)=@_;$o->{builder}=sub{my($m,$n,%a)=@_;my$b=$a{builder}or return$m;my$i=exists$a{lazy}?$a{lazy}:!${$P.':N'};$i or ${$P.':E'}{$n}=\&{$P.$b}and return$m;sub{$#_?$m->(@_):!exists$_[0]{$n}?$_[0]{$n}=$_[0]->$b:$m->(@_)}}};
MO_BUILDER

    $main::fatpacked{"Mo/chain.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_CHAIN';
  package Mo::chain;
  $Mo::chain::VERSION = '0.40';my$M="Mo::";
  $VERSION='0.40';
  *{$M.'chain::e'}=sub{my($P,$e,$o)=@_;$o->{chain}=sub{my($m,$n,%a)=@_;$a{chain}or return$m;sub{$#_?($m->(@_),return$_[0]):$m->(@_)}}};
MO_CHAIN

    $main::fatpacked{"Mo/coerce.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_COERCE';
  package Mo::coerce;
  $Mo::coerce::VERSION = '0.40';my$M="Mo::";
  $VERSION='0.40';
  *{$M.'coerce::e'}=sub{my($P,$e,$o)=@_;$o->{coerce}=sub{my($m,$n,%a)=@_;$a{coerce}or return$m;sub{$#_?$m->($_[0],$a{coerce}->($_[1])):$m->(@_)}};my$C=$e->{new}||*{$M.Object::new}{CODE};$e->{new}=sub{my$s=$C->(@_);$s->$_($s->{$_})for keys%$s;$s}};
MO_COERCE

    $main::fatpacked{"Mo/default.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_DEFAULT';
  package Mo::default;
  $Mo::default::VERSION = '0.40';my$M="Mo::";
  $VERSION='0.40';
  *{$M.'default::e'}=sub{my($P,$e,$o)=@_;$o->{default}=sub{my($m,$n,%a)=@_;exists$a{default}or return$m;my($d,$r)=$a{default};my$g='HASH'eq($r=ref$d)?sub{+{%$d}}:'ARRAY'eq$r?sub{[@$d]}:'CODE'eq$r?$d:sub{$d};my$i=exists$a{lazy}?$a{lazy}:!${$P.':N'};$i or ${$P.':E'}{$n}=$g and return$m;sub{$#_?$m->(@_):!exists$_[0]{$n}?$_[0]{$n}=$g->(@_):$m->(@_)}}};
MO_DEFAULT

    $main::fatpacked{"Mo/exporter.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_EXPORTER';
  package Mo::exporter;
  $Mo::exporter::VERSION = '0.40';my$M="Mo::";
  $VERSION='0.40';
  *{$M.'exporter::e'}=sub{my($P)=@_;if(@{$M.EXPORT}){*{$P.$_}=\&{$M.$_}for@{$M.EXPORT}}};
MO_EXPORTER

    $main::fatpacked{"Mo/import.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_IMPORT';
  package Mo::import;
  $Mo::import::VERSION = '0.40';my$M="Mo::";
  $VERSION='0.40';
  my$i=\&import;*{$M.import}=sub{(@_==2 and not$_[1])?pop@_:@_==1?push@_,grep!/import/,@f:();goto&$i};
MO_IMPORT

    $main::fatpacked{"Mo/importer.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_IMPORTER';
  package Mo::importer;
  $Mo::importer::VERSION = '0.40';my$M="Mo::";
  $VERSION='0.40';
  *{$M.'importer::e'}=sub{my($P,$e,$o,$f)=@_;(my$pkg=$P)=~s/::$//;&{$P.'importer'}($pkg,@$f)if defined&{$P.'importer'}};
MO_IMPORTER

    $main::fatpacked{"Mo/is.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_IS';
  package Mo::is;
  $Mo::is::VERSION = '0.40';$M="Mo::";
  $VERSION='0.40';
  *{$M.'is::e'}=sub{my($P,$e,$o)=@_;$o->{is}=sub{my($m,$n,%a)=@_;$a{is}or return$m;sub{$#_&&$a{is}eq'ro'&&caller ne'Mo::coerce'?die$n.' is ro':$m->(@_)}}};
MO_IS

    $main::fatpacked{"Mo/nonlazy.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_NONLAZY';
  package Mo::nonlazy;
  $Mo::nonlazy::VERSION = '0.40';my$M="Mo::";
  $VERSION='0.40';
  *{$M.'nonlazy::e'}=sub{${shift().':N'}=1};
MO_NONLAZY

    $main::fatpacked{"Mo/option.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_OPTION';
  package Mo::option;
  $Mo::option::VERSION = '0.40';my$M="Mo::";
  $VERSION='0.40';
  *{$M.'option::e'}=sub{my($P,$e,$o)=@_;$o->{option}=sub{my($m,$n,%a)=@_;$a{option}or return$m;my$n2=$n;*{$P."read_$n2"}=sub{$_[0]->{$n2}};sub{$#_?$m->(@_):$m->(@_,1);$_[0]}}};
MO_OPTION

    $main::fatpacked{"Mo/required.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_REQUIRED';
  package Mo::required;
  $Mo::required::VERSION = '0.40';my$M="Mo::";
  $VERSION='0.40';
  *{$M.'required::e'}=sub{my($P,$e,$o)=@_;$o->{required}=sub{my($m,$n,%a)=@_;if($a{required}){my$C=*{$P."new"}{CODE}||*{$M.Object::new}{CODE};no warnings 'redefine';*{$P."new"}=sub{my$s=$C->(@_);my%a=@_[1..$#_];die$n." required"if!exists$a{$n};$s}}$m}};
MO_REQUIRED

    $main::fatpacked{"Mo/xs.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MO_XS';
  package Mo::xs;
  $Mo::xs::VERSION = '0.40';my$M="Mo::";
  $VERSION='0.40';
  require Class::XSAccessor;*{$M.'xs::e'}=sub{my($P,$e,$o,$f)=@_;$P=~s/::$//;$e->{has}=sub{my($n,%a)=@_;Class::XSAccessor->import(class=>$P,accessors=>{$n=>$n})}if!grep!/^xs$/,@$f};
MO_XS

    $main::fatpacked{"Module/Implementation.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MODULE_IMPLEMENTATION';
  package Module::Implementation;
  # git description: v0.08-2-gd599347
  $Module::Implementation::VERSION = '0.09';
  
  use strict;
  use warnings;
  
  use Module::Runtime 0.012 qw( require_module );
  use Try::Tiny;
  
  # This is needed for the benefit of Test::CleanNamespaces, which in turn loads
  # Package::Stash, which in turn loads this module and expects a minimum
  # version.
  unless ( exists $Module::Implementation::{VERSION}
      && ${ $Module::Implementation::{VERSION} } ) {
  
      $Module::Implementation::{VERSION} = \42;
  }
  
  my %Implementation;
  
  sub build_loader_sub {
      my $caller = caller();
  
      return _build_loader( $caller, @_ );
  }
  
  sub _build_loader {
      my $package = shift;
      my %args    = @_;
  
      my @implementations = @{ $args{implementations} };
      my @symbols = @{ $args{symbols} || [] };
  
      my $implementation;
      my $env_var = uc $package;
      $env_var =~ s/::/_/g;
      $env_var .= '_IMPLEMENTATION';
  
      return sub {
          my ( $implementation, $loaded ) = _load_implementation(
              $package,
              $ENV{$env_var},
              \@implementations,
          );
  
          $Implementation{$package} = $implementation;
  
          _copy_symbols( $loaded, $package, \@symbols );
  
          return $loaded;
      };
  }
  
  sub implementation_for {
      my $package = shift;
  
      return $Implementation{$package};
  }
  
  sub _load_implementation {
      my $package         = shift;
      my $env_value       = shift;
      my $implementations = shift;
  
      if ($env_value) {
          die "$env_value is not a valid implementation for $package"
              unless grep { $_ eq $env_value } @{$implementations};
  
          my $requested = "${package}::$env_value";
  
          # Values from the %ENV hash are tainted. We know it's safe to untaint
          # this value because the value was one of our known implementations.
          ($requested) = $requested =~ /^(.+)$/;
  
          try {
              require_module($requested);
          }
          catch {
              require Carp;
              Carp::croak("Could not load $requested: $_");
          };
  
          return ( $env_value, $requested );
      }
      else {
          my $err;
          for my $possible ( @{$implementations} ) {
              my $try = "${package}::$possible";
  
              my $ok;
              try {
                  require_module($try);
                  $ok = 1;
              }
              catch {
                  $err .= $_ if defined $_;
              };
  
              return ( $possible, $try ) if $ok;
          }
  
          require Carp;
          if ( defined $err && length $err ) {
              Carp::croak(
                  "Could not find a suitable $package implementation: $err");
          }
          else {
              Carp::croak(
                  'Module::Runtime failed to load a module but did not throw a real error. This should never happen. Something is very broken'
              );
          }
      }
  }
  
  sub _copy_symbols {
      my $from_package = shift;
      my $to_package   = shift;
      my $symbols      = shift;
  
      for my $sym ( @{$symbols} ) {
          my $type = $sym =~ s/^([\$\@\%\&\*])// ? $1 : '&';
  
          my $from = "${from_package}::$sym";
          my $to   = "${to_package}::$sym";
  
          {
              no strict 'refs';
              no warnings 'once';
  
              # Copied from Exporter
              *{$to}
                  = $type eq '&' ? \&{$from}
                  : $type eq '$' ? \${$from}
                  : $type eq '@' ? \@{$from}
                  : $type eq '%' ? \%{$from}
                  : $type eq '*' ? *{$from}
                  : die
                  "Can't copy symbol from $from_package to $to_package: $type$sym";
          }
      }
  }
  
  1;
  
  # ABSTRACT: Loads one of several alternate underlying implementations for a module
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Module::Implementation - Loads one of several alternate underlying implementations for a module
  
  =head1 VERSION
  
  version 0.09
  
  =head1 SYNOPSIS
  
    package Foo::Bar;
  
    use Module::Implementation;
  
    BEGIN {
        my $loader = Module::Implementation::build_loader_sub(
            implementations => [ 'XS',  'PurePerl' ],
            symbols         => [ 'run', 'check' ],
        );
  
        $loader->();
    }
  
    package Consumer;
  
    # loads the first viable implementation
    use Foo::Bar;
  
  =head1 DESCRIPTION
  
  This module abstracts out the process of choosing one of several underlying
  implementations for a module. This can be used to provide XS and pure Perl
  implementations of a module, or it could be used to load an implementation for
  a given OS or any other case of needing to provide multiple implementations.
  
  This module is only useful when you know all the implementations ahead of
  time. If you want to load arbitrary implementations then you probably want
  something like a plugin system, not this module.
  
  =head1 API
  
  This module provides two subroutines, neither of which are exported.
  
  =head2 Module::Implementation::build_loader_sub(...)
  
  This subroutine takes the following arguments.
  
  =over 4
  
  =item * implementations
  
  This should be an array reference of implementation names. Each name should
  correspond to a module in the caller's namespace.
  
  In other words, using the example in the L</SYNOPSIS>, this module will look
  for the C<Foo::Bar::XS> and C<Foo::Bar::PurePerl> modules.
  
  This argument is required.
  
  =item * symbols
  
  A list of symbols to copy from the implementation package to the calling
  package.
  
  These can be prefixed with a variable type: C<$>, C<@>, C<%>, C<&>, or
  C<*)>. If no prefix is given, the symbol is assumed to be a subroutine.
  
  This argument is optional.
  
  =back
  
  This subroutine I<returns> the implementation loader as a sub reference.
  
  It is up to you to call this loader sub in your code.
  
  I recommend that you I<do not> call this loader in an C<import()> sub. If a
  caller explicitly requests no imports, your C<import()> sub will not be run at
  all, which can cause weird breakage.
  
  =head2 Module::Implementation::implementation_for($package)
  
  Given a package name, this subroutine returns the implementation that was
  loaded for the package. This is not a full package name, just the suffix that
  identifies the implementation. For the L</SYNOPSIS> example, this subroutine
  would be called as C<Module::Implementation::implementation_for('Foo::Bar')>,
  and it would return "XS" or "PurePerl".
  
  =head1 HOW THE IMPLEMENTATION LOADER WORKS
  
  The implementation loader works like this ...
  
  First, it checks for an C<%ENV> var specifying the implementation to load. The
  env var is based on the package name which loads the implementations. The
  C<::> package separator is replaced with C<_>, and made entirely
  upper-case. Finally, we append "_IMPLEMENTATION" to this name.
  
  So in our L</SYNOPSIS> example, the corresponding C<%ENV> key would be
  C<FOO_BAR_IMPLEMENTATION>.
  
  If this is set, then the loader will B<only> try to load this one
  implementation.
  
  If the env var requests an implementation which doesn't match one of the
  implementations specified when the loader was created, an error is thrown.
  
  If this one implementation fails to load then loader throws an error. This is
  useful for testing. You can request a specific implementation in a test file
  by writing something like this:
  
    BEGIN { $ENV{FOO_BAR_IMPLEMENTATION} = 'XS' }
    use Foo::Bar;
  
  If the environment variable is I<not> set, then the loader simply tries the
  implementations originally passed to C<Module::Implementation>. The
  implementations are tried in the order in which they were originally passed.
  
  The loader will use the first implementation that loads without an error. It
  will copy any requested symbols from this implementation.
  
  If none of the implementations can be loaded, then the loader throws an
  exception.
  
  The loader returns the name of the package it loaded.
  
  =head1 AUTHOR
  
  Dave Rolsky <autarch@urth.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is Copyright (c) 2014 by Dave Rolsky.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
MODULE_IMPLEMENTATION

    $main::fatpacked{"Module/Installed/Tiny.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MODULE_INSTALLED_TINY';
  package Module::Installed::Tiny;
  
  our $DATE = '2016-08-04'; # DATE
  our $VERSION = '0.003'; # VERSION
  
  use strict;
  use warnings;
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(module_installed module_source);
  
  our $SEPARATOR;
  BEGIN {
      if ($^O =~ /^(dos|os2)/i) {
          $SEPARATOR = '\\';
      } elsif ($^O =~ /^MacOS/i) {
          $SEPARATOR = ':';
      } else {
          $SEPARATOR = '/';
      }
  }
  
  sub _module_source {
      my $name_pm = shift;
  
      for my $entry (@INC) {
          next unless defined $entry;
          my $ref = ref($entry);
          my ($is_hook, @hook_res);
          if ($ref eq 'ARRAY') {
              $is_hook++;
              @hook_res = $entry->[0]->($entry, $name_pm);
          } elsif (UNIVERSAL::can($entry, 'INC')) {
              $is_hook++;
              @hook_res = $entry->INC($name_pm);
          } elsif ($ref eq 'CODE') {
              $is_hook++;
              @hook_res = $entry->($entry, $name_pm);
          } else {
              my $path = "$entry$SEPARATOR$name_pm";
              if (-f $path) {
                  open my($fh), "<", $path
                      or die "Can't locate $name_pm: $path: $!";
                  local $/;
                  return scalar <$fh>;
              }
          }
  
          if ($is_hook) {
              next unless @hook_res;
              my $prepend_ref = shift @hook_res if ref($hook_res[0]) eq 'SCALAR';
              my $fh          = shift @hook_res if ref($hook_res[0]) eq 'GLOB';
              my $code        = shift @hook_res if ref($hook_res[0]) eq 'CODE';
              my $code_state  = shift @hook_res if @hook_res;
              if ($fh) {
                  my $src = "";
                  local $_;
                  while (!eof($fh)) {
                      $_ = <$fh>;
                      if ($code) {
                          $code->($code, $code_state);
                      }
                      $src .= $_;
                  }
                  $src = $$prepend_ref . $src if $prepend_ref;
                  return $src;
              } elsif ($code) {
                  my $src = "";
                  local $_;
                  while ($code->($code, $code_state)) {
                      $src .= $_;
                  }
                  $src = $$prepend_ref . $src if $prepend_ref;
                  return $src;
              }
          }
      }
  
      die "Can't locate $name_pm in \@INC (\@INC contains: ".join(" ", @INC).")";
  }
  
  sub module_source {
      my $name = shift;
  
      # convert Foo::Bar -> Foo/Bar.pm
      my $name_pm;
      if ($name =~ /\A\w+(?:::\w+)*\z/) {
          ($name_pm = "$name.pm") =~ s!::!$SEPARATOR!g;
      } else {
          $name_pm = $name;
      }
  
      _module_source $name_pm;
  }
  
  sub module_installed {
      my $name = shift;
  
      # convert Foo::Bar -> Foo/Bar.pm
      my $name_pm;
      if ($name =~ /\A\w+(?:::\w+)*\z/) {
          ($name_pm = "$name.pm") =~ s!::!$SEPARATOR!g;
      } else {
          $name_pm = $name;
      }
  
      return 1 if exists $INC{$name_pm};
  
      if (eval { _module_source $name_pm; 1 }) {
          1;
      } else {
          0;
      }
  }
  
  1;
  # ABSTRACT: Check if a module is installed, with as little code as possible
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Module::Installed::Tiny - Check if a module is installed, with as little code as possible
  
  =head1 VERSION
  
  This document describes version 0.003 of Module::Installed::Tiny (from Perl distribution Module-Installed-Tiny), released on 2016-08-04.
  
  =head1 SYNOPSIS
  
   use Module::Installed::Tiny qw(module_installed module_source);
  
   # check if a module is available
   if (module_installed "Foo::Bar") {
       # Foo::Bar is available
   } elsif (module_installed "Foo/Baz.pm") {
       # Foo::Baz is available
   }
  
   # get a module's source code, dies on failure
   my $src = module_source("Foo/Baz.pm");
  
  =head1 DESCRIPTION
  
  To check if a module is installed (available), generally the simplest way is to
  try to C<require()> it:
  
   if (eval { require Foo::Bar; 1 }) {
       # Foo::Bar is available
   }
  
  However, this actually loads the module. There are some cases where this is not
  desirable: 1) we have to check a lot of modules (actually loading the modules
  will take a lot of CPU time and memory; 2) some of the modules conflict with one
  another and cannot all be loaded; 3) the module is OS specific and might not
  load under another OS; 4) we simply do not want to execute the module, for
  security or other reasons.
  
  C<Module::Installed::Tiny> provides a routine C<module_installed()> which works
  like Perl's C<require> but does not actually load the module.
  
  This module does not require any other module except L<Exporter>.
  
  =head1 FUNCTIONS
  
  =head2 module_installed($name) => bool
  
  Check that module named C<$name> is available to load. This means that: either
  the module file exists on the filesystem and searchable in C<@INC> and the
  contents of the file can be retrieved, or when there is a require hook in
  C<@INC>, the module's source can be retrieved from the hook.
  
  Note that this does not guarantee that the module can eventually be loaded
  successfully, as there might be syntax or runtime errors in the module's source.
  To check for that, one would need to actually load the module using C<require>.
  
  =head2 module_source($name) => str
  
  Return module's source code, without actually loading it. Die on failure.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Module-Installed-Tiny>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Module-Installed-Tiny>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Module-Installed-Tiny>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Module::Load::Conditional> provides C<check_install> which also does what
  C<module_installed> does, plus can check module version. It also has a couple
  other knobs to customize its behavior. It's less tiny than
  Module::Installed::Tiny though.
  
  L<Module::Path> and L<Module::Path::More>. These modules can also be used to
  check if a module on the filesystem is available. They do not handle require
  hooks, nor do they actually check that the module file is readable.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
MODULE_INSTALLED_TINY

    $main::fatpacked{"Module/List.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MODULE_LIST';
  =head1 NAME
  
  Module::List - module `directory' listing
  
  =head1 SYNOPSIS
  
  	use Module::List qw(list_modules);
  
  	$id_modules = list_modules("Data::ID::",
  			{ list_modules => 1});
  	$prefixes = list_modules("",
  			{ list_prefixes => 1, recurse => 1 });
  
  =head1 DESCRIPTION
  
  This module deals with the examination of the namespace of Perl modules.
  The contents of the module namespace is split across several physical
  directory trees, but this module hides that detail, providing instead
  a view of the abstract namespace.
  
  =cut
  
  package Module::List;
  
  { use 5.006; }
  use warnings;
  use strict;
  
  use Carp qw(croak);
  use File::Spec;
  use IO::Dir 1.03;
  
  our $VERSION = "0.003";
  
  use parent "Exporter";
  our @EXPORT_OK = qw(list_modules);
  
  =head1 FUNCTIONS
  
  =over
  
  =item list_modules(PREFIX, OPTIONS)
  
  This function generates a listing of the contents of part of the module
  namespace.  The part of the namespace under the module name prefix PREFIX
  is examined, and information about it returned as specified by OPTIONS.
  
  Module names are handled by this function in standard bareword syntax.
  They are always fully-qualified; isolated name components are never used.
  A module name prefix is the part of a module name that comes before
  a component of the name, and so either ends with "::" or is the empty
  string.
  
  OPTIONS is a reference to a hash, the elements of which specify what is
  to be returned.  The options are:
  
  =over
  
  =item list_modules
  
  Truth value, default false.  If true, return names of modules in the relevant
  part of the namespace.
  
  =item list_prefixes
  
  Truth value, default false.  If true, return module name prefixes in the
  relevant part of the namespace.  Note that prefixes are returned if the
  corresponding directory exists, even if there is nothing in it.
  
  =item list_pod
  
  Truth value, default false.  If true, return names of POD documentation
  files that are in the module namespace.
  
  =item trivial_syntax
  
  Truth value, default false.  If false, only valid bareword names are
  permitted.  If true, bareword syntax is ignored, and any "::"-separated
  name that can be turned into a correct filename by interpreting name
  components as filename components is permitted.  This is of no use in
  listing actual Perl modules, because the illegal names can't be used in
  Perl, but some programs such as B<perldoc> use a "::"-separated name for
  the sake of appearance without really using bareword syntax.  The loosened
  syntax applies both to the names returned and to the I<PREFIX> parameter.
  
  Precisely, the `trivial syntax' is that each "::"-separated component
  cannot be "." or "..", cannot contain "::" or "/", and (except for the
  final component of a leaf name) cannot end with ":".  This is precisely
  what is required to achieve a unique interconvertible "::"-separated path
  syntax on Unix.  This criterion might change in the future on non-Unix
  systems, where the filename syntax differs.
  
  =item recurse
  
  Truth value, default false.  If false, only names at the next level down
  from PREFIX (having one more component) are returned.  If true, names
  at all lower levels are returned.
  
  =item use_pod_dir
  
  Truth value, default false.  If false, POD documentation files are
  expected to be in the same directory that the corresponding module file
  would be in.  If true, POD files may also be in a subdirectory of that
  named "C<pod>".  (Any POD files in such a subdirectory will therefore be
  visible under two module names, one treating the "C<pod>" subdirectory
  level as part of the module name.)
  
  =back
  
  Note that the default behaviour, if an empty options hash is supplied, is
  to return nothing.  You I<must> specify what kind of information you want.
  
  The function returns a reference to a hash, the keys of which are the
  names of interest.  The value associated with each of these keys is undef.
  
  =cut
  
  sub list_modules($$) {
  	my($prefix, $options) = @_;
  	my $trivial_syntax = $options->{trivial_syntax};
  	my($root_leaf_rx, $root_notleaf_rx);
  	my($notroot_leaf_rx, $notroot_notleaf_rx);
  	if($trivial_syntax) {
  		$root_leaf_rx = $notroot_leaf_rx = qr#:?(?:[^/:]+:)*[^/:]+:?#;
  		$root_notleaf_rx = $notroot_notleaf_rx =
  			qr#:?(?:[^/:]+:)*[^/:]+#;
  	} else {
  		$root_leaf_rx = $root_notleaf_rx = qr/[a-zA-Z_][0-9a-zA-Z_]*/;
  		$notroot_leaf_rx = $notroot_notleaf_rx = qr/[0-9a-zA-Z_]+/;
  	}
  	croak "bad module name prefix `$prefix'"
  		unless $prefix =~ /\A(?:${root_notleaf_rx}::
  					 (?:${notroot_notleaf_rx}::)*)?\z/x &&
  			 $prefix !~ /(?:\A|[^:]::)\.\.?::/;
  	my $list_modules = $options->{list_modules};
  	my $list_prefixes = $options->{list_prefixes};
  	my $list_pod = $options->{list_pod};
  	my $use_pod_dir = $options->{use_pod_dir};
  	return {} unless $list_modules || $list_prefixes || $list_pod;
  	my $recurse = $options->{recurse};
  	my @prefixes = ($prefix);
  	my %seen_prefixes;
  	my %results;
  	while(@prefixes) {
  		my $prefix = pop(@prefixes);
  		my @dir_suffix = split(/::/, $prefix);
  		my $module_rx =
  			$prefix eq "" ? $root_leaf_rx : $notroot_leaf_rx;
  		my $pm_rx = qr/\A($module_rx)\.pmc?\z/;
  		my $pod_rx = qr/\A($module_rx)\.pod\z/;
  		my $dir_rx =
  			$prefix eq "" ? $root_notleaf_rx : $notroot_notleaf_rx;
  		$dir_rx = qr/\A$dir_rx\z/;
  		foreach my $incdir (@INC) {
  			my $dir = File::Spec->catdir($incdir, @dir_suffix);
  			my $dh = IO::Dir->new($dir) or next;
  			while(defined(my $entry = $dh->read)) {
  				if(($list_modules && $entry =~ $pm_rx) ||
  						($list_pod &&
  							$entry =~ $pod_rx)) {
  					$results{$prefix.$1} = undef;
  				} elsif(($list_prefixes || $recurse) &&
  						File::Spec
  							->no_upwards($entry) &&
  						$entry =~ $dir_rx &&
  						-d File::Spec->catdir($dir,
  							$entry)) {
  					my $newpfx = $prefix.$entry."::";
  					next if exists $seen_prefixes{$newpfx};
  					$results{$newpfx} = undef
  						if $list_prefixes;
  					push @prefixes, $newpfx if $recurse;
  				}
  			}
  			next unless $list_pod && $use_pod_dir;
  			$dir = File::Spec->catdir($dir, "pod");
  			$dh = IO::Dir->new($dir) or next;
  			while(defined(my $entry = $dh->read)) {
  				if($entry =~ $pod_rx) {
  					$results{$prefix.$1} = undef;
  				}
  			}
  		}
  	}
  	return \%results;
  }
  
  =back
  
  =head1 SEE ALSO
  
  L<Module::Runtime>
  
  =head1 AUTHOR
  
  Andrew Main (Zefram) <zefram@fysh.org>
  
  =head1 COPYRIGHT
  
  Copyright (C) 2004, 2006, 2009, 2011
  Andrew Main (Zefram) <zefram@fysh.org>
  
  =head1 LICENSE
  
  This module is free software; you can redistribute it and/or modify it
  under the same terms as Perl itself.
  
  =cut
  
  1;
MODULE_LIST

    $main::fatpacked{"Module/Patch.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MODULE_PATCH';
  package Module::Patch;
  
  our $DATE = '2016-06-02'; # DATE
  our $VERSION = '0.24'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  use experimental 'smartmatch';
  use Log::Any::IfLOG '$log';
  
  use Carp;
  use Module::Load;
  use Module::Loaded;
  use Monkey::Patch::Action qw();
  use SHARYANTO::Array::Util qw(match_array_or_regex);
  use Package::MoreUtil qw(list_package_contents package_exists);
  
  our @EXPORT_OK = qw(patch_package);
  
  my%loaded_by_us;
  
  sub import {
      no strict 'refs';
      no warnings; # W lines generate warnings
  
      my $self = shift;
  
      if ($self eq __PACKAGE__) {
          # we are not subclassed, provide exports
          my @caller = caller;
          for (@_) {
              croak "$_ is not exported by ".__PACKAGE__ unless $_ ~~ @EXPORT_OK;
              *{"$caller[0]::$_"} = \&$_;
          }
      } else {
          # we are subclassed, patch caller with patch_data()
          my %opts = @_;
  
          my $load;
          if (exists $opts{-load_target}) {
              $load = $opts{-load_target};
              delete $opts{-load_target};
          }
          $load //= 1;
          my $force;
          if (exists $opts{-force}) {
              $force = $opts{-force};
              delete $opts{-force};
          }
          $force //= 0;
          my $warn;
          if (exists $opts{-warn_target_loaded}) {
              $warn = $opts{-warn_target_loaded};
              delete $opts{-warn_target_loaded};
          }
          $warn //= 1;
  
          # patch already applied, ignore
          return if ${"$self\::handles"};
  
          my $pdata = $self->patch_data or
              die "BUG: $self: No patch data supplied";
          my $v = $pdata->{v} // 1;
          my $curv = 3;
          if ($v == 1 || $v == 2) {
              my $mpv;
              if ($v == 1) {
                  $mpv = "0.06 or earlier";
              } elsif ($v == 2) {
                  $mpv = "0.07-0.09";
              }
              croak "$self ".( ${"$self\::VERSION" } // "?" ).
                  " requires Module::Patch $mpv (patch_data format v=$v),".
                      " this is Module::Patch ".($Module::Patch::VERSION // '?').
                          " (v=$curv), please install an older version of ".
                              "Module::Patch or upgrade $self";
          } elsif ($v == 3) {
              # ok, current version
          } else {
              croak "BUG: $self: Unknown patch_data format version ($v), ".
                  "only v=$curv supported by this version of Module::Patch";
          }
  
          my $target = $self;
          $target =~ s/(?<=\w)::[Pp]atch::\w+$//
              or die "BUG: $self: Bad patch module name '$target', it should ".
                  "end with '::Patch::YourCategory'";
  
          if (is_loaded($target) && !$loaded_by_us{$target}) {
              if ($load && $warn) {
                  carp "$target is loaded before ".__PACKAGE__.", this is not ".
                      "recommended since $target might export subs before ".
                          __PACKAGE__." gets the chance to patch them";
              }
          } else {
              if ($load) {
                  load $target;
                  $loaded_by_us{$target}++;
              } else {
                  croak "FATAL: $self: $target is not loaded, please ".
                      "'use $target' before patching";
              }
          }
  
          # read patch module's configs
          my $pcdata = $pdata->{config} // {};
          my $config = \%{"$self\::config"};
          while (my ($k, $v) = each %$pcdata) {
              $config->{$k} = $v->{default};
              if (exists $opts{$k}) {
                  $config->{$k} = $opts{$k};
                  delete $opts{$k};
              }
          }
  
          if (keys %opts) {
              croak "$self: Unknown option(s): ".join(", ", keys %opts);
          }
  
          if ($pdata->{after_read_config}) {
              $pdata->{after_read_config}->();
          }
  
          if ($pdata->{before_patch}) {
              $pdata->{before_patch}->();
          }
  
          ${"$self\::handles"} = patch_package(
              $target, $pdata->{patches},
              {force=>$force, patch_module=>ref($self) || $self});
  
          if ($pdata->{after_patch}) {
              $pdata->{after_patch}->();
          }
  
      }
  }
  
  sub unimport {
      no strict 'refs';
  
      my $self = shift;
  
      if ($self eq __PACKAGE__) {
          # we are not subclassed, do nothing
      } else {
          my $pdata = $self->patch_data or
              die "BUG: $self: No patch data supplied";
  
          if ($pdata->{before_unpatch}) {
              $pdata->{before_unpatch}->();
          }
  
          my $handles = ${"$self\::handles"};
          $log->tracef("Unpatching %s ...", [keys %$handles]);
          undef ${"$self\::handles"};
          # do we need to undef ${"$self\::config"}?, i'm thinking not really
  
          if ($pdata->{after_unpatch}) {
              $pdata->{after_unpatch}->();
          }
  
      }
  }
  
  sub patch_data {
      die "BUG: patch_data() should be provided by subclass";
  }
  
  sub patch_package {
      no strict 'refs';
  
      my ($package0, $patches_spec, $opts) = @_;
      $opts //= {};
  
      my $handles = {};
      for my $target (ref($package0) eq 'ARRAY' ? @$package0 : ($package0)) {
          croak "FATAL: Target module '$target' not loaded"
              unless package_exists($target);
          my $target_version = ${"$target\::VERSION"};
          my @target_subs;
          my %tp = list_package_contents($target);
          for (keys %tp) {
              if (ref($tp{$_}) eq 'CODE' && !/^\*/) {
                  push @target_subs, $_;
              }
          }
  
          my $i = 0;
        PATCH:
          for my $pspec (@$patches_spec) {
              my $act = $pspec->{action};
              my $errp = ($opts->{patch_module} ? "$opts->{patch_module}: ":"").
                  "patch[$i]"; # error prefix
              $act or die "BUG: $errp: no action supplied";
              $act =~ /\A(wrap|add|replace|add_or_replace|delete)\z/ or die
                  "BUG: $errp: action '$pspec->{action}' unknown";
              if ($act eq 'delete') {
                  $pspec->{code} and die "BUG: $errp: for action 'delete', ".
                      "code must not be supplied";
              } else {
                  $pspec->{code} or die "BUG: $errp: code not supplied";
              }
  
              my $sub_names = ref($pspec->{sub_name}) eq 'ARRAY' ?
                  [@{ $pspec->{sub_name} }] : [$pspec->{sub_name}];
              for (@$sub_names) {
                  $_ = qr/.*/    if $_ eq ':all';
                  $_ = qr/^_/    if $_ eq ':private';
                  $_ = qr/^[^_]/ if $_ eq ':public';
                  die "BUG: $errp: unknown tag in sub_name $_" if /^:/;
              }
  
              my @s;
              for my $sub_name (@$sub_names) {
                  if (ref($sub_name) eq 'Regexp') {
                      for (@target_subs) {
                          push @s, $_ if $_ !~~ @s && $_ =~ $sub_name;
                      }
                  } else {
                      push @s, $sub_name;
                  }
              }
  
              unless (!defined($pspec->{mod_version}) ||
                          $pspec->{mod_version} eq ':all') {
                  defined($target_version) && length($target_version)
                      or croak "FATAL: Target package '$target' does not have ".
                          "\$VERSION";
                  my $mod_versions = $pspec->{mod_version};
                  $mod_versions = ref($mod_versions) eq 'ARRAY' ?
                      [@$mod_versions] : [$mod_versions];
                  for (@$mod_versions) {
                      $_ = qr/.*/    if $_ eq ':all';
                      die "BUG: $errp: unknown tag in mod_version $_"
                          if /^:/;
                  }
  
                  my $ver_match=match_array_or_regex(
                      $target_version, $mod_versions);
                  unless ($ver_match) {
                      carp "$errp: Target module version $target_version ".
                          "does not match [".join(", ", @$mod_versions)."], ".
                              ($opts->{force} ?
                                   "patching anyway (force)":"skipped"). ".";
                      next PATCH unless $opts->{force};
                  }
              }
  
              for my $s (@s) {
                  $log->tracef("Patching %s ...", $s);
                  $handles->{"$target\::$s"} =
                      Monkey::Patch::Action::patch_package(
                          $target, $s, $act, $pspec->{code});
              }
  
              $i++;
          } # for $pspec
      } # for $target
      $handles;
  }
  
  1;
  # ABSTRACT: Patch package with a set of patches
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Module::Patch - Patch package with a set of patches
  
  =head1 VERSION
  
  This document describes version 0.24 of Module::Patch (from Perl distribution Module-Patch), released on 2016-06-02.
  
  =head1 SYNOPSIS
  
  To use Module::Patch directly:
  
   # patching DBI modules so that calls are logged
  
   use Module::Patch qw(patch_package);
   use Log::Any '$log';
   my $handle = patch_package(['DBI', 'DBI::st', 'DBI::db'], [
       {action=>'wrap', mod_version=>':all', sub_name=>':public', code=>sub {
           my $ctx = shift;
  
           $log->tracef("Entering %s(%s) ...", $ctx->{orig_name}, \@_);
           my $res;
           if (wantarray) { $res=[$ctx->{orig}->(@_)] } else { $res=$ctx->{orig}->(@_) }
           $log->tracef("Returned from %s", $ctx->{orig_name});
           if (wantarray) { return @$res } else { return $res }
       }},
   ]);
  
   # restore original
   undef $handle;
  
  To create a patch module by subclassing Module::Patch:
  
   # in your patch module
  
   package Some::Module::Patch::YourCategory;
   use parent qw(Module::Patch);
  
   sub patch_data {
       return {
           v => 3,
           patches => [...], # $patches_spec
           config => { # per-patch-module config
               a => {
                   default => 1,
               },
               b => {},
               c => {
                   default => 3,
               },
           },
       };
   }
   1;
  
   # using your patch module
  
   use Some::Module::Patch::YourCategory
       -force => 1, # optional, force patch even if target version does not match
       -config => {a=>10, b=>20}, # optional, set config value
   ;
  
   # accessing per-patch-module config data
  
   print $Some::Module::Patch::YourCategory::config->{a}; # 10
   print $Some::Module::Patch::YourCategory::config->{c}; # 3, default value
  
   # unpatch, restore original subroutines
   no Some::Module::Patch::YourCategory;
  
  =head1 DESCRIPTION
  
  Module::Patch is basically a convenient way to define and bundle a set of
  patches. Actual patching is done by L<Monkey::Patch::Action>, which provides
  lexically scoped patching.
  
  There are two ways to use this module:
  
  =over 4
  
  =item * subclass it
  
  This is used for convenient bundling of patches. You create a I<patch module> (a
  module that monkey-patches other module by adding/replacing/wrapping/deleting
  subroutines of target module) by subclassing Module::Patch and providing the
  patches specification in patch_data() method.
  
  Patch module should be named I<Some::Module>::Patch::I<YourCategory>.
  I<YourCategory> should be a keyword or phrase (verb + obj) that describes what
  the patch does. For example, L<HTTP::Daemon::Patch::IPv6>,
  L<LWP::UserAgent::Patch::LogResponse>.
  
  Patch module should be use()'d, or require()'d + import()'ed instead of just
  require()'d, because the patching is done in import().
  
  =item * require/import it directly
  
  Module::Patch provides B<patch_package> which is the actual routine to do the
  patching.
  
  =back
  
  =for Pod::Coverage ^(unimport|patch_data)$
  
  =head1 PATCH DATA SPECIFICATION
  
  Patch data must be stored in C<patch_data()> subroutine. It must be a L<DefHash>
  (i.e. a regular Perl hash) with the following known properties:
  
  =over
  
  =item * v => int
  
  Must be 3 (current version).
  
  =item * patches => array
  
  Will be passed to C<patch_package()>.
  
  =item * config => hash
  
  A hash of name and config specifications. Config specification is another
  DefHash and can contain the following properties: C<schema> (a L<Sah> schema),
  C<default> (default value).
  
  =item * after_read_config => coderef
  
  A hook to run after patch module is imported and configuration has been read.
  
  =item * before_patch => coderef
  
  =item * after_patch => coderef
  
  =item * before_unpatch => coderef
  
  =item * after_unpatch => coderef
  
  =back
  
  =head1 FUNCTIONS
  
  =head2 import()
  
  If imported directly, will export @exports as arguments and export requested
  symbols.
  
  If imported from subclass, will take %opts as arguments and run patch_package()
  on caller package. %opts include:
  
  =over 4
  
  =item * -load_target => BOOL (default 1)
  
  Load target modules. Set to 0 if package is already defined in other files and
  cannot be require()-ed.
  
  =item * -warn_target_loaded => BOOL (default 1)
  
  If set to false, do not warn if target modules are loaded before the patch
  module. By default, it warns to prevent users making the mistake of importing
  subroutines from target modules before they are patched.
  
  =item * -force => BOOL
  
  Will be passed to patch_package's \%opts.
  
  =back
  
  =head2 patch_package($package, $patches_spec, \%opts) => HANDLE
  
  Patch target package C<$package> with a set of patches.
  
  C<$patches_spec> is an arrayref containing a series of patches specifications.
  Each patch specification is a hashref containing these keys: C<action> (string,
  required; either 'wrap', 'add', 'replace', 'add_or_replace', 'delete'),
  C<mod_version> (string/regex or array of string/regex, can be ':all' to mean all
  versions; optional; defaults to ':all'). C<sub_name> (string/regex or array of
  string/regex, subroutine(s) to patch, can be ':all' to mean all subroutine,
  ':public' to mean all public subroutines [those not prefixed by C<_>],
  ':private' to mean all private), C<code> (coderef, not required if C<action> is
  'delete').
  
  Die if there is conflict with other patch modules, for example if target module
  has been patched 'delete' and another patch wants to 'wrap' it.
  
  Known options:
  
  =over 4
  
  =item * force => BOOL (default 0)
  
  Force patching even if target module version does not match. The default is to
  warn and skip patching.
  
  =back
  
  =head1 FAQ
  
  =head2 This module does not work! The target module does not get patched!
  
  It probably does. Some of the common mistakes are:
  
  =over
  
  =item * Not storing the handle
  
  You do this:
  
   patch_package(...);
  
  instead of this:
  
   my $handle = patch_package(...);
  
  Since the handle is used to revert the patch, if you do not store C<$handle>,
  you are basically patching and immediately reverting the patch.
  
  =item * Importing before patching
  
  If C<Target::Module> exports symbols, and you patch one of the default exports,
  the users need to patch before importing. Otherwise he/she will get the
  unpatched version. For example, this won't work:
  
   use Target::Module; # by default export foo
   use Target::Module::Patch::Foo; # patches foo
  
   foo(); # user gets the unpatched version
  
  While this does:
  
   use Target::Module::Patch::Foo; # patches foo
   use Target::Module; # by default export foo
  
   foo(); # user gets the patched version
  
  Since 0.16, Module::Patch already warns this (unless C<-load_target> or
  C<-warn_target_loaded> is set to false).
  
  =back
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Module-Patch>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Module-Patch>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Module-Patch>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Monkey::Patch::Action>
  
  L<Pod::Weaver::Plugin::ModulePatch>
  
  Some examples of patch modules that use Module::Patch by subclassing it:
  L<Net::HTTP::Methods::Patch::LogRequest>,
  L<LWP::UserAgent::Patch::HTTPSHardTimeout>.
  
  Some examples of modules that use Module::Patch directly:
  L<Log::Any::For::Class>.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
MODULE_PATCH

    $main::fatpacked{"Module/Path/More.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MODULE_PATH_MORE';
  package Module::Path::More;
  
  our $DATE = '2017-02-01'; # DATE
  our $VERSION = '0.33'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(module_path pod_path);
  
  our $SEPARATOR;
  
  our %SPEC;
  
  $SPEC{':package'} = {
      v => 1.1,
      summary => 'Get path to locally installed Perl module',
  };
  
  BEGIN {
      if ($^O =~ /^(dos|os2)/i) {
          $SEPARATOR = '\\';
      } elsif ($^O =~ /^MacOS/i) {
          $SEPARATOR = ':';
      } else {
          $SEPARATOR = '/';
      }
  }
  
  $SPEC{module_path} = {
      v => 1.1,
      summary => 'Get path to locally installed Perl module',
      description => <<'_',
  
  Search `@INC` (reference entries are skipped) and return path(s) to Perl module
  files with the requested name.
  
  This function is like the one from <pm:Module::Path>, except with a different
  interface and more options (finding all matches instead of the first, the option
  of not absolutizing paths, finding `.pmc` & `.pod` files, finding module
  prefixes).
  
  _
      args => {
          module => {
              summary => 'Module name to search',
              schema  => 'str*',
              req     => 1,
              pos     => 0,
          },
          find_pm => {
              summary => 'Whether to find .pm files',
              schema  => ['int*', min=>0],
              default => 1,
              description => <<'_',
  
  The value of this option is an integer number from 0. 0 means to not search for
  .pm files, while number larger than 0 means to search for .pm files. The larger
  the number, the lower the priority. If more than one type is found (prefix, .pm,
  .pmc, .pod) then the type with the lowest number is returned first.
  
  _
          },
          find_pmc => {
              summary => 'Whether to find .pmc files',
              schema  => ['int*', min=>0],
              default => 2,
              description => <<'_',
  
  The value of this option is an integer number from 0. 0 means to not search for
  .pmc files, while number larger than 0 means to search for .pmc files. The
  larger the number, the lower the priority. If more than one type is found
  (prefix, .pm, .pmc, .pod) then the type with the lowest number is returned
  first.
  
  _
          },
          find_pod => {
              summary => 'Whether to find .pod files',
              schema  => ['int*', min=>0],
              default => 0,
              description => <<'_',
  
  The value of this option is an integer number from 0. 0 means to not search for
  .pod files, while number larger than 0 means to search for .pod files. The
  larger the number, the lower the priority. If more than one type is found
  (prefix, .pm, .pmc, .pod) then the type with the lowest number is returned
  first.
  
  _
          },
          find_prefix => {
              summary => 'Whether to find module prefixes',
              schema  => ['int*', min=>0],
              default => 0,
              description => <<'_',
  
  The value of this option is an integer number from 0. 0 means to not search for
  module prefix, while number larger than 0 means to search for module prefix. The
  larger the number, the lower the priority. If more than one type is found
  (prefix, .pm, .pmc, .pod) then the type with the lowest number is returned
  first.
  
  _
          },
          all => {
              summary => 'Return all results instead of just the first',
              schema  => 'bool',
              default => 0,
          },
          abs => {
              summary => 'Whether to return absolute paths',
              schema  => 'bool',
              default => 0,
          },
      },
      result => {
          schema => ['any' => of => ['str*', ['array*' => of => 'str*']]],
      },
      result_naked => 1,
      examples => [
          {
              summary => 'Find the first Foo::Bar (.pm or .pmc) in @INC',
              args => {module => 'Foo::Bar'},
          },
          {
              summary => 'Find all Foo::Bar (.pm or .pmc) in @INC, return absolute paths',
              args => {module => 'Foo::Bar', all => 1, abs => 1},
          },
          {
              summary => 'Find the Rinci (.pod first, then .pm) in @INC',
              args => {module => 'Rinci', find_pod => 1, find_pm => 2, find_pmc => 0},
          },
      ],
  };
  sub module_path {
      my %args = @_;
  
      my $module = $args{module} or die "Please specify module";
  
      $args{abs}         //= 0;
      $args{all}         //= 0;
      $args{find_pm}     //= 1;
      $args{find_pmc}    //= 2;
      $args{find_pod}    //= 0;
      $args{find_prefix} //= 0;
  
      require Cwd if $args{abs};
  
      my @res;
      my %unfound = (
          ("pm" => 1)     x !!$args{find_pm},
          ("pmc" => 1)    x !!$args{find_pmc},
          ("pod" => 1)    x !!$args{find_pod},
          ("prefix" => 1) x !!$args{find_prefix},
      );
      my $add = sub {
          my ($path, $prio) = @_;
          push @res, [$args{abs} ? Cwd::abs_path($path) : $path, $prio];
      };
  
      my $relpath;
  
      ($relpath = $module) =~ s/::/$SEPARATOR/g;
      $relpath =~ s/\.(pm|pmc|pod)\z//i;
  
      foreach my $dir (@INC) {
          next if not defined($dir);
          next if ref($dir);
  
          my $prefix = $dir . $SEPARATOR . $relpath;
          if ($args{find_pm}) {
              my $file = $prefix . ".pm";
              if (-f $file) {
                  $add->($file, $args{find_pm});
                  delete $unfound{pm};
                  last if !keys(%unfound) && !$args{all};
              }
          }
          if ($args{find_pmc}) {
              my $file = $prefix . ".pmc";
              if (-f $file) {
                  $add->($file, $args{find_pmc});
                  delete $unfound{pmc};
                  last if !keys(%unfound) && !$args{all};
              }
          }
          if ($args{find_pod}) {
              my $file = $prefix . ".pod";
              if (-f $file) {
                  $add->($file, $args{find_pod});
                  delete $unfound{pod};
                  last if !keys(%unfound) && !$args{all};
              }
          }
          if ($args{find_prefix}) {
              if (-d $prefix) {
                  $add->($prefix, $args{find_prefix});
                  delete $unfound{prefix};
                  last if !keys(%unfound) && !$args{all};
              }
          }
      }
  
      @res = map { $_->[0] } sort { $a->[1] <=> $b->[1] } @res;
  
      if ($args{all}) {
          return \@res;
      } else {
          return @res ? $res[0] : undef;
      }
  }
  
  $SPEC{pod_path} = {
      v => 1.1,
      summary => 'Get path to locally installed POD',
      description => <<'_',
  
  This is a shortcut for:
  
      module_path(%args, find_pm=>0, find_pmc=>0, find_pod=>1, find_prefix=>0)
  
  _
      args => {
          module => {
              summary => 'Module name to search',
              schema  => 'str*',
              req     => 1,
              pos     => 0,
          },
          all => {
              summary => 'Return all results instead of just the first',
              schema  => 'bool',
              default => 0,
          },
          abs => {
              summary => 'Whether to return absolute paths',
              schema  => 'bool',
              default => 0,
          },
      },
      result => {
          schema => ['any' => of => ['str*', ['array*' => of => 'str*']]],
      },
      result_naked => 1,
  };
  sub pod_path {
      module_path(@_, find_pm=>0, find_pmc=>0, find_pod=>1, find_prefix=>0);
  }
  
  1;
  # ABSTRACT: Get path to locally installed Perl module
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Module::Path::More - Get path to locally installed Perl module
  
  =head1 VERSION
  
  This document describes version 0.33 of Module::Path::More (from Perl distribution Module-Path-More), released on 2017-02-01.
  
  =head1 SYNOPSIS
  
   use Module::Path::More qw(module_path pod_path);
  
   $path = module_path(module=>'Test::More');
   if (defined($path)) {
     print "Test::More found at $path\n";
   } else {
     print "Danger Will Robinson!\n";
   }
  
   # find all found modules, as well as .pmc and .pod files
   $paths = module_path(module=>'Foo::Bar', all=>1, find_pmc=>1, find_pod=>1);
  
   # just a shortcut for module_path(module=>'Foo',
   #                                 find_pm=>0, find_pmc=>0, find_pod=>1);
   $path = pod_path(module=>'Foo');
  
  =head1 DESCRIPTION
  
  Module::Path::More provides a function, C<module_path()>, which will find where
  a module (or module prefix, or .pod file) is installed locally. (There is also
  another function C<pod_path()> which is just a convenience wrapper.)
  
  It works by looking in all the directories in @INC for an appropriately named
  file. If module is C<Foo::Bar>, will search for C<Foo/Bar.pm>, C<Foo/Bar.pmc>
  (if C<find_pmc> argument is true), C<Foo/Bar> directory (if C<find_prefix>
  argument is true), or C<Foo/Bar.pod> (if C<find_pod> argument is true).
  
  Caveats: Obviously this only works where the module you're after has its own
  C<.pm> file. If a file defines multiple packages, this won't work. This also
  won't find any modules that are being loaded in some special way, for example
  using a code reference in C<@INC>, as described in C<require> in L<perlfunc>.
  
  To check whether a module is available/loadable, it's generally better to use
  something like:
  
   if (eval { require Some::Module; 1 }) {
       # module is available
   }
  
  because this works with fatpacking or any other C<@INC> hook that might be
  installed. If you use:
  
   if (module_path(module => "Some::Module")) {
       # module is available
   }
  
  then it only works if the module is locatable in the filesystem. But on the
  other hand this method can avoid actual loading of the module.
  
  =head1 FUNCTIONS
  
  
  =head2 module_path(%args) -> str|array[str]
  
  Get path to locally installed Perl module.
  
  Examples:
  
  =over
  
  =item * Find the first Foo::Bar (.pm or .pmc) in @INC:
  
   module_path(module => "Foo::Bar"); # -> undef
  
  =item * Find all Foo::Bar (.pm or .pmc) in @INC, return absolute paths:
  
   module_path(module => "Foo::Bar", abs => 1, all => 1); # -> []
  
  =item * Find the Rinci (.pod first, then .pm) in @INC:
  
   module_path(module => "Rinci", find_pm => 2, find_pmc => 0, find_pod => 1);
  
  Result:
  
   "/home/u1/perl5/perlbrew/perls/perl-5.24.0/lib/site_perl/5.24.0/Rinci.pod"
  
  =back
  
  Search C<@INC> (reference entries are skipped) and return path(s) to Perl module
  files with the requested name.
  
  This function is like the one from L<Module::Path>, except with a different
  interface and more options (finding all matches instead of the first, the option
  of not absolutizing paths, finding C<.pmc> & C<.pod> files, finding module
  prefixes).
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<abs> => I<bool> (default: 0)
  
  Whether to return absolute paths.
  
  =item * B<all> => I<bool> (default: 0)
  
  Return all results instead of just the first.
  
  =item * B<find_pm> => I<int> (default: 1)
  
  Whether to find .pm files.
  
  The value of this option is an integer number from 0. 0 means to not search for
  .pm files, while number larger than 0 means to search for .pm files. The larger
  the number, the lower the priority. If more than one type is found (prefix, .pm,
  .pmc, .pod) then the type with the lowest number is returned first.
  
  =item * B<find_pmc> => I<int> (default: 2)
  
  Whether to find .pmc files.
  
  The value of this option is an integer number from 0. 0 means to not search for
  .pmc files, while number larger than 0 means to search for .pmc files. The
  larger the number, the lower the priority. If more than one type is found
  (prefix, .pm, .pmc, .pod) then the type with the lowest number is returned
  first.
  
  =item * B<find_pod> => I<int> (default: 0)
  
  Whether to find .pod files.
  
  The value of this option is an integer number from 0. 0 means to not search for
  .pod files, while number larger than 0 means to search for .pod files. The
  larger the number, the lower the priority. If more than one type is found
  (prefix, .pm, .pmc, .pod) then the type with the lowest number is returned
  first.
  
  =item * B<find_prefix> => I<int> (default: 0)
  
  Whether to find module prefixes.
  
  The value of this option is an integer number from 0. 0 means to not search for
  module prefix, while number larger than 0 means to search for module prefix. The
  larger the number, the lower the priority. If more than one type is found
  (prefix, .pm, .pmc, .pod) then the type with the lowest number is returned
  first.
  
  =item * B<module>* => I<str>
  
  Module name to search.
  
  =back
  
  Return value:  (str|array[str])
  
  
  =head2 pod_path(%args) -> str|array[str]
  
  Get path to locally installed POD.
  
  This is a shortcut for:
  
   module_path(%args, find_pm=>0, find_pmc=>0, find_pod=>1, find_prefix=>0)
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<abs> => I<bool> (default: 0)
  
  Whether to return absolute paths.
  
  =item * B<all> => I<bool> (default: 0)
  
  Return all results instead of just the first.
  
  =item * B<module>* => I<str>
  
  Module name to search.
  
  =back
  
  Return value:  (str|array[str])
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Module-Path-More>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Module-Path-More>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Module-Path-More>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Module::Path>. Module::Path::More is actually a fork of Module::Path.
  Module::Path::More contains features that are not (or have not been accepted) in
  the original module, namely: finding all matches instead of the first found
  match, and finding C<.pmc/.pod> in addition to .pm files. B<Note that the
  interface is different> (Module::Path::More accepts hash/named arguments) so the
  two modules are not drop-in replacements for each other. Also, note that by
  default Module::Path::More does B<not> do an C<abs_path()> to each file it
  finds. I think this module's choice (not doing abs_path) is a more sensible
  default, because usually there is no actual need to do so and doing abs_path()
  or resolving symlinks will sometimes fail or expose filesystem quirks that we
  might not want to deal with at all. However, if you want to do abs_path, you can
  do so by setting C<abs> option to true.
  
  Command-line utility is not included in this distribution, unlike L<mpath> in
  C<Module-Path>. However, you can use L<pmpath|https://metacpan.org/pod/distribution/App-PMUtils/bin/pmpath> from L<App::PMUtils> distribution
  which uses this module.
  
  References:
  
  =over
  
  =item * L<https://github.com/neilbowers/Module-Path/issues/6>
  
  =item * L<https://github.com/neilbowers/Module-Path/issues/7>
  
  =item * L<https://github.com/neilbowers/Module-Path/issues/10>
  
  =item * L<https://rt.cpan.org/Public/Bug/Display.html?id=100979>
  
  =back
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
MODULE_PATH_MORE

    $main::fatpacked{"Module/Runtime.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MODULE_RUNTIME';
  =head1 NAME
  
  Module::Runtime - runtime module handling
  
  =head1 SYNOPSIS
  
  	use Module::Runtime qw(
  		$module_name_rx is_module_name check_module_name
  		module_notional_filename require_module
  	);
  
  	if($module_name =~ /\A$module_name_rx\z/o) { ...
  	if(is_module_name($module_name)) { ...
  	check_module_name($module_name);
  
  	$notional_filename = module_notional_filename($module_name);
  	require_module($module_name);
  
  	use Module::Runtime qw(use_module use_package_optimistically);
  
  	$bi = use_module("Math::BigInt", 1.31)->new("1_234");
  	$widget = use_package_optimistically("Local::Widget")->new;
  
  	use Module::Runtime qw(
  		$top_module_spec_rx $sub_module_spec_rx
  		is_module_spec check_module_spec
  		compose_module_name
  	);
  
  	if($spec =~ /\A$top_module_spec_rx\z/o) { ...
  	if($spec =~ /\A$sub_module_spec_rx\z/o) { ...
  	if(is_module_spec("Standard::Prefix", $spec)) { ...
  	check_module_spec("Standard::Prefix", $spec);
  
  	$module_name =
  		compose_module_name("Standard::Prefix", $spec);
  
  =head1 DESCRIPTION
  
  The functions exported by this module deal with runtime handling of
  Perl modules, which are normally handled at compile time.  This module
  avoids using any other modules, so that it can be used in low-level
  infrastructure.
  
  The parts of this module that work with module names apply the same syntax
  that is used for barewords in Perl source.  In principle this syntax
  can vary between versions of Perl, and this module applies the syntax of
  the Perl on which it is running.  In practice the usable syntax hasn't
  changed yet.  There's some intent for Unicode module names to be supported
  in the future, but this hasn't yet amounted to any consistent facility.
  
  The functions of this module whose purpose is to load modules include
  workarounds for three old Perl core bugs regarding C<require>.  These
  workarounds are applied on any Perl version where the bugs exist, except
  for a case where one of the bugs cannot be adequately worked around in
  pure Perl.
  
  =head2 Module name syntax
  
  The usable module name syntax has not changed from Perl 5.000 up to
  Perl 5.19.8.  The syntax is composed entirely of ASCII characters.
  From Perl 5.6 onwards there has been some attempt to allow the use of
  non-ASCII Unicode characters in Perl source, but it was fundamentally
  broken (like the entirety of Perl 5.6's Unicode handling) and remained
  pretty much entirely unusable until it got some attention in the Perl
  5.15 series.  Although Unicode is now consistently accepted by the
  parser in some places, it remains broken for module names.  Furthermore,
  there has not yet been any work on how to map Unicode module names into
  filenames, so in that respect also Unicode module names are unusable.
  
  The module name syntax is, precisely: the string must consist of one or
  more segments separated by C<::>; each segment must consist of one or more
  identifier characters (ASCII alphanumerics plus "_"); the first character
  of the string must not be a digit.  Thus "C<IO::File>", "C<warnings>",
  and "C<foo::123::x_0>" are all valid module names, whereas "C<IO::>"
  and "C<1foo::bar>" are not.  C<'> separators are not permitted by this
  module, though they remain usable in Perl source, being translated to
  C<::> in the parser.
  
  =head2 Core bugs worked around
  
  The first bug worked around is core bug [perl #68590], which causes
  lexical state in one file to leak into another that is C<require>d/C<use>d
  from it.  This bug is present from Perl 5.6 up to Perl 5.10, and is
  fixed in Perl 5.11.0.  From Perl 5.9.4 up to Perl 5.10.0 no satisfactory
  workaround is possible in pure Perl.  The workaround means that modules
  loaded via this module don't suffer this pollution of their lexical
  state.  Modules loaded in other ways, or via this module on the Perl
  versions where the pure Perl workaround is impossible, remain vulnerable.
  The module L<Lexical::SealRequireHints> provides a complete workaround
  for this bug.
  
  The second bug worked around causes some kinds of failure in module
  loading, principally compilation errors in the loaded module, to be
  recorded in C<%INC> as if they were successful, so later attempts to load
  the same module immediately indicate success.  This bug is present up
  to Perl 5.8.9, and is fixed in Perl 5.9.0.  The workaround means that a
  compilation error in a module loaded via this module won't be cached as
  a success.  Modules loaded in other ways remain liable to produce bogus
  C<%INC> entries, and if a bogus entry exists then it will mislead this
  module if it is used to re-attempt loading.
  
  The third bug worked around causes the wrong context to be seen at
  file scope of a loaded module, if C<require> is invoked in a location
  that inherits context from a higher scope.  This bug is present up to
  Perl 5.11.2, and is fixed in Perl 5.11.3.  The workaround means that
  a module loaded via this module will always see the correct context.
  Modules loaded in other ways remain vulnerable.
  
  =cut
  
  package Module::Runtime;
  
  # Don't "use 5.006" here, because Perl 5.15.6 will load feature.pm if
  # the version check is done that way.
  BEGIN { require 5.006; }
  # Don't "use warnings" here, to avoid dependencies.  Do standardise the
  # warning status by lexical override; unfortunately the only safe bitset
  # to build in is the empty set, equivalent to "no warnings".
  BEGIN { ${^WARNING_BITS} = ""; }
  # Don't "use strict" here, to avoid dependencies.
  
  our $VERSION = "0.014";
  
  # Don't use Exporter here, to avoid dependencies.
  our @EXPORT_OK = qw(
  	$module_name_rx is_module_name is_valid_module_name check_module_name
  	module_notional_filename require_module
  	use_module use_package_optimistically
  	$top_module_spec_rx $sub_module_spec_rx
  	is_module_spec is_valid_module_spec check_module_spec
  	compose_module_name
  );
  my %export_ok = map { ($_ => undef) } @EXPORT_OK;
  sub import {
  	my $me = shift;
  	my $callpkg = caller(0);
  	my $errs = "";
  	foreach(@_) {
  		if(exists $export_ok{$_}) {
  			# We would need to do "no strict 'refs'" here
  			# if we had enabled strict at file scope.
  			if(/\A\$(.*)\z/s) {
  				*{$callpkg."::".$1} = \$$1;
  			} else {
  				*{$callpkg."::".$_} = \&$_;
  			}
  		} else {
  			$errs .= "\"$_\" is not exported by the $me module\n";
  		}
  	}
  	if($errs ne "") {
  		die "${errs}Can't continue after import errors ".
  			"at @{[(caller(0))[1]]} line @{[(caller(0))[2]]}.\n";
  	}
  }
  
  # Logic duplicated from Params::Classify.  Duplicating it here avoids
  # an extensive and potentially circular dependency graph.
  sub _is_string($) {
  	my($arg) = @_;
  	return defined($arg) && ref(\$arg) eq "SCALAR";
  }
  
  =head1 REGULAR EXPRESSIONS
  
  These regular expressions do not include any anchors, so to check
  whether an entire string matches a syntax item you must supply the
  anchors yourself.
  
  =over
  
  =item $module_name_rx
  
  Matches a valid Perl module name in bareword syntax.
  
  =cut
  
  our $module_name_rx = qr/[A-Z_a-z][0-9A-Z_a-z]*(?:::[0-9A-Z_a-z]+)*/;
  
  =item $top_module_spec_rx
  
  Matches a module specification for use with L</compose_module_name>,
  where no prefix is being used.
  
  =cut
  
  my $qual_module_spec_rx =
  	qr#(?:/|::)[A-Z_a-z][0-9A-Z_a-z]*(?:(?:/|::)[0-9A-Z_a-z]+)*#;
  
  my $unqual_top_module_spec_rx =
  	qr#[A-Z_a-z][0-9A-Z_a-z]*(?:(?:/|::)[0-9A-Z_a-z]+)*#;
  
  our $top_module_spec_rx = qr/$qual_module_spec_rx|$unqual_top_module_spec_rx/o;
  
  =item $sub_module_spec_rx
  
  Matches a module specification for use with L</compose_module_name>,
  where a prefix is being used.
  
  =cut
  
  my $unqual_sub_module_spec_rx = qr#[0-9A-Z_a-z]+(?:(?:/|::)[0-9A-Z_a-z]+)*#;
  
  our $sub_module_spec_rx = qr/$qual_module_spec_rx|$unqual_sub_module_spec_rx/o;
  
  =back
  
  =head1 FUNCTIONS
  
  =head2 Basic module handling
  
  =over
  
  =item is_module_name(ARG)
  
  Returns a truth value indicating whether I<ARG> is a plain string
  satisfying Perl module name syntax as described for L</$module_name_rx>.
  
  =cut
  
  sub is_module_name($) { _is_string($_[0]) && $_[0] =~ /\A$module_name_rx\z/o }
  
  =item is_valid_module_name(ARG)
  
  Deprecated alias for L</is_module_name>.
  
  =cut
  
  *is_valid_module_name = \&is_module_name;
  
  =item check_module_name(ARG)
  
  Check whether I<ARG> is a plain string
  satisfying Perl module name syntax as described for L</$module_name_rx>.
  Return normally if it is, or C<die> if it is not.
  
  =cut
  
  sub check_module_name($) {
  	unless(&is_module_name) {
  		die +(_is_string($_[0]) ? "`$_[0]'" : "argument").
  			" is not a module name\n";
  	}
  }
  
  =item module_notional_filename(NAME)
  
  Generates a notional relative filename for a module, which is used in
  some Perl core interfaces.
  The I<NAME> is a string, which should be a valid module name (one or
  more C<::>-separated segments).  If it is not a valid name, the function
  C<die>s.
  
  The notional filename for the named module is generated and returned.
  This filename is always in Unix style, with C</> directory separators
  and a C<.pm> suffix.  This kind of filename can be used as an argument to
  C<require>, and is the key that appears in C<%INC> to identify a module,
  regardless of actual local filename syntax.
  
  =cut
  
  sub module_notional_filename($) {
  	&check_module_name;
  	my($name) = @_;
  	$name =~ s!::!/!g;
  	return $name.".pm";
  }
  
  =item require_module(NAME)
  
  This is essentially the bareword form of C<require>, in runtime form.
  The I<NAME> is a string, which should be a valid module name (one or
  more C<::>-separated segments).  If it is not a valid name, the function
  C<die>s.
  
  The module specified by I<NAME> is loaded, if it hasn't been already,
  in the manner of the bareword form of C<require>.  That means that a
  search through C<@INC> is performed, and a byte-compiled form of the
  module will be used if available.
  
  The return value is as for C<require>.  That is, it is the value returned
  by the module itself if the module is loaded anew, or C<1> if the module
  was already loaded.
  
  =cut
  
  # Don't "use constant" here, to avoid dependencies.
  BEGIN {
  	*_WORK_AROUND_HINT_LEAKAGE =
  		"$]" < 5.011 && !("$]" >= 5.009004 && "$]" < 5.010001)
  			? sub(){1} : sub(){0};
  	*_WORK_AROUND_BROKEN_MODULE_STATE = "$]" < 5.009 ? sub(){1} : sub(){0};
  }
  
  BEGIN { if(_WORK_AROUND_BROKEN_MODULE_STATE) { eval q{
  	sub Module::Runtime::__GUARD__::DESTROY {
  		delete $INC{$_[0]->[0]} if @{$_[0]};
  	}
  	1;
  }; die $@ if $@ ne ""; } }
  
  sub require_module($) {
  	# Localise %^H to work around [perl #68590], where the bug exists
  	# and this is a satisfactory workaround.  The bug consists of
  	# %^H state leaking into each required module, polluting the
  	# module's lexical state.
  	local %^H if _WORK_AROUND_HINT_LEAKAGE;
  	if(_WORK_AROUND_BROKEN_MODULE_STATE) {
  		my $notional_filename = &module_notional_filename;
  		my $guard = bless([ $notional_filename ],
  				"Module::Runtime::__GUARD__");
  		my $result = CORE::require($notional_filename);
  		pop @$guard;
  		return $result;
  	} else {
  		return scalar(CORE::require(&module_notional_filename));
  	}
  }
  
  =back
  
  =head2 Structured module use
  
  =over
  
  =item use_module(NAME[, VERSION])
  
  This is essentially C<use> in runtime form, but without the importing
  feature (which is fundamentally a compile-time thing).  The I<NAME> is
  handled just like in C<require_module> above: it must be a module name,
  and the named module is loaded as if by the bareword form of C<require>.
  
  If a I<VERSION> is specified, the C<VERSION> method of the loaded module is
  called with the specified I<VERSION> as an argument.  This normally serves to
  ensure that the version loaded is at least the version required.  This is
  the same functionality provided by the I<VERSION> parameter of C<use>.
  
  On success, the name of the module is returned.  This is unlike
  L</require_module>, and is done so that the entire call to L</use_module>
  can be used as a class name to call a constructor, as in the example in
  the synopsis.
  
  =cut
  
  sub use_module($;$) {
  	my($name, $version) = @_;
  	require_module($name);
  	$name->VERSION($version) if @_ >= 2;
  	return $name;
  }
  
  =item use_package_optimistically(NAME[, VERSION])
  
  This is an analogue of L</use_module> for the situation where there is
  uncertainty as to whether a package/class is defined in its own module
  or by some other means.  It attempts to arrange for the named package to
  be available, either by loading a module or by doing nothing and hoping.
  
  An attempt is made to load the named module (as if by the bareword form
  of C<require>).  If the module cannot be found then it is assumed that
  the package was actually already loaded by other means, and no error
  is signalled.  That's the optimistic bit.
  
  This is mostly the same operation that is performed by the L<base> pragma
  to ensure that the specified base classes are available.  The behaviour
  of L<base> was simplified in version 2.18, and later improved in version
  2.20, and on both occasions this function changed to match.
  
  If a I<VERSION> is specified, the C<VERSION> method of the loaded package is
  called with the specified I<VERSION> as an argument.  This normally serves
  to ensure that the version loaded is at least the version required.
  On success, the name of the package is returned.  These aspects of the
  function work just like L</use_module>.
  
  =cut
  
  sub use_package_optimistically($;$) {
  	my($name, $version) = @_;
  	my $fn = module_notional_filename($name);
  	eval { local $SIG{__DIE__}; require_module($name); };
  	die $@ if $@ ne "" &&
  		($@ !~ /\ACan't locate \Q$fn\E .+ at \Q@{[__FILE__]}\E line/s ||
  		 $@ =~ /^Compilation\ failed\ in\ require
  			 \ at\ \Q@{[__FILE__]}\E\ line/xm);
  	$name->VERSION($version) if @_ >= 2;
  	return $name;
  }
  
  =back
  
  =head2 Module name composition
  
  =over
  
  =item is_module_spec(PREFIX, SPEC)
  
  Returns a truth value indicating
  whether I<SPEC> is valid input for L</compose_module_name>.
  See below for what that entails.  Whether a I<PREFIX> is supplied affects
  the validity of I<SPEC>, but the exact value of the prefix is unimportant,
  so this function treats I<PREFIX> as a truth value.
  
  =cut
  
  sub is_module_spec($$) {
  	my($prefix, $spec) = @_;
  	return _is_string($spec) &&
  		$spec =~ ($prefix ? qr/\A$sub_module_spec_rx\z/o :
  				    qr/\A$top_module_spec_rx\z/o);
  }
  
  =item is_valid_module_spec(PREFIX, SPEC)
  
  Deprecated alias for L</is_module_spec>.
  
  =cut
  
  *is_valid_module_spec = \&is_module_spec;
  
  =item check_module_spec(PREFIX, SPEC)
  
  Check whether I<SPEC> is valid input for L</compose_module_name>.
  Return normally if it is, or C<die> if it is not.
  
  =cut
  
  sub check_module_spec($$) {
  	unless(&is_module_spec) {
  		die +(_is_string($_[1]) ? "`$_[1]'" : "argument").
  			" is not a module specification\n";
  	}
  }
  
  =item compose_module_name(PREFIX, SPEC)
  
  This function is intended to make it more convenient for a user to specify
  a Perl module name at runtime.  Users have greater need for abbreviations
  and context-sensitivity than programmers, and Perl module names get a
  little unwieldy.  I<SPEC> is what the user specifies, and this function
  translates it into a module name in standard form, which it returns.
  
  I<SPEC> has syntax approximately that of a standard module name: it
  should consist of one or more name segments, each of which consists
  of one or more identifier characters.  However, C</> is permitted as a
  separator, in addition to the standard C<::>.  The two separators are
  entirely interchangeable.
  
  Additionally, if I<PREFIX> is not C<undef> then it must be a module
  name in standard form, and it is prefixed to the user-specified name.
  The user can inhibit the prefix addition by starting I<SPEC> with a
  separator (either C</> or C<::>).
  
  =cut
  
  sub compose_module_name($$) {
  	my($prefix, $spec) = @_;
  	check_module_name($prefix) if defined $prefix;
  	&check_module_spec;
  	if($spec =~ s#\A(?:/|::)##) {
  		# OK
  	} else {
  		$spec = $prefix."::".$spec if defined $prefix;
  	}
  	$spec =~ s#/#::#g;
  	return $spec;
  }
  
  =back
  
  =head1 BUGS
  
  On Perl versions 5.7.2 to 5.8.8, if C<require> is overridden by the
  C<CORE::GLOBAL> mechanism, it is likely to break the heuristics used by
  L</use_package_optimistically>, making it signal an error for a missing
  module rather than assume that it was already loaded.  From Perl 5.8.9
  onwards, and on 5.7.1 and earlier, this module can avoid being confused
  by such an override.  On the affected versions, a C<require> override
  might be installed by L<Lexical::SealRequireHints>, if something requires
  its bugfix but for some reason its XS implementation isn't available.
  
  =head1 SEE ALSO
  
  L<Lexical::SealRequireHints>,
  L<base>,
  L<perlfunc/require>,
  L<perlfunc/use>
  
  =head1 AUTHOR
  
  Andrew Main (Zefram) <zefram@fysh.org>
  
  =head1 COPYRIGHT
  
  Copyright (C) 2004, 2006, 2007, 2009, 2010, 2011, 2012, 2014
  Andrew Main (Zefram) <zefram@fysh.org>
  
  =head1 LICENSE
  
  This module is free software; you can redistribute it and/or modify it
  under the same terms as Perl itself.
  
  =cut
  
  1;
MODULE_RUNTIME

    $main::fatpacked{"Monkey/Patch/Action.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MONKEY_PATCH_ACTION';
  package Monkey::Patch::Action;
  
  use 5.010;
  use warnings;
  use strict;
  
  our $VERSION = '0.04'; # VERSION
  
  use Monkey::Patch::Action::Handle;
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(patch_package);
  our %EXPORT_TAGS = (all => \@EXPORT_OK);
  
  sub patch_package {
      my ($package, $subname, $action, $code, @extra) = @_;
  
      die "Please specify action" unless $action;
      if ($action eq 'delete') {
          die "code not needed for 'delete' action" if $code;
      } else {
          die "Please specify code" unless $code;
      }
  
      my $name = "$package\::$subname";
      my $type;
      if ($action eq 'add') {
          die "Adding $name: must not already exist" if defined(&$name);
          $type = 'sub';
      } elsif ($action eq 'replace') {
          die "Replacing $name: must already exist" unless defined(&$name);
          $type = 'sub';
      } elsif ($action eq 'add_or_replace') {
          $type = 'sub';
      } elsif ($action eq 'wrap') {
          die "Wrapping $name: must already exist" unless defined(&$name);
          $type = 'wrap';
      } elsif ($action eq 'delete') {
          $type = 'delete';
      } else {
          die "Unknown action '$action', please use either ".
              "wrap/add/replace/add_or_replace/delete";
      }
  
      my @caller = caller(0);
  
      Monkey::Patch::Action::Handle->new(
          package => $package,
          subname => $subname,
          extra   => \@extra,
          patcher => \@caller,
          code    => $code,
  
          -type   => $type,
      );
  }
  
  1;
  # ABSTRACT: Wrap/add/replace/delete subs from other package (with restore)
  
  
  __END__
  =pod
  
  =head1 NAME
  
  Monkey::Patch::Action - Wrap/add/replace/delete subs from other package (with restore)
  
  =head1 VERSION
  
  version 0.04
  
  =head1 SYNOPSIS
  
   use Monkey::Patch::Action qw(patch_package);
  
   package Foo;
   sub sub1  { say "Foo's sub1" }
   sub sub2  { say "Foo's sub2, args=", join(",", @_) }
   sub meth1 { my $self = shift; say "Foo's meth1" }
  
   package Bar;
   our @ISA = qw(Foo);
  
   package main;
   my $h; # handle object
   my $foo = Foo->new;
   my $bar = Bar->new;
  
   # replacing a subroutine
   $h = patch_package('Foo', 'sub1', 'replace', sub { "qux" });
   Foo::sub1(); # says "qux"
   undef $h;
   Foo::sub1(); # says "Foo's sub1"
  
   # adding a subroutine
   $h = patch_package('Foo', 'sub3', 'add', sub { "qux" });
   Foo::sub3(); # says "qux"
   undef $h;
   Foo::sub3(); # dies
  
   # deleting a subroutine
   $h = patch_package('Foo', 'sub2', 'delete');
   Foo::sub2(); # dies
   undef $h;
   Foo::sub2(); # says "Foo's sub2, args="
  
   # wrapping a subroutine
   $h = patch_package('Foo', 'sub2', 'wrap',
       sub {
           my $ctx = shift;
           say "wrapping $ctx->{package}::$ctx->{subname}";
           $ctx->{orig}->(@_);
       }
   );
   Foo::sub2(1,2,3); # says "wrapping Foo::sub2" then "Foo's sub2, args=1,2,3"
   undef $h;
   Foo::sub2(1,2,3); # says "Foo's sub2, args=1,2,3"
  
   # stacking patches (note: can actually be unapplied in random order)
   my ($h2, $h3);
   $h  = patch_package('Foo', 'sub1', 'replace', sub { "qux" });
   Foo::sub1(); # says "qux"
   $h2 = patch_package('Foo', 'sub1', 'delete');
   Foo::sub1(); # dies
   $h3 = patch_package('Foo', 'sub1', 'replace', sub { "quux" });
   Foo::sub1(); # says "quux"
   undef $h3;
   Foo::sub1(); # dies
   undef $h2;
   Foo::sub1(); # says "qux"
   undef $h;
   Foo::sub1(); # says "Foo's sub1"
  
  =head1 DESCRIPTION
  
  Monkey-patching is the act of modifying a package at runtime: adding a
  subroutine/method, replacing/deleting/wrapping another, etc. Perl makes it easy
  to do that, for example:
  
   # add a subroutine
   *{"Target::sub1"} = sub { ... };
  
   # another way, can be done from any file
   package Target;
   sub sub2 { ... }
  
   # delete a subroutine
   undef *{"Target::sub3"};
  
  This module makes things even easier by helping you apply a stack of patches and
  unapply them later in flexible order.
  
  =head1 FUNCTIONS
  
  =head2 patch_package($package, $subname, $action, $code, @extra) => HANDLE
  
  Patch C<$package>'s subroutine named C<$subname>. C<$action> is either:
  
  =over 4
  
  =item * C<wrap>
  
  C<$subname> must already exist. C<code> is required.
  
  Your code receives a context hash as its first argument, followed by any
  arguments the subroutine would have normally gotten. Context hash contains:
  C<orig> (the original subroutine that is being wrapped), C<subname>, C<package>,
  C<extra>.
  
  =item * C<add>
  
  C<subname> must not already exist. C<code> is required.
  
  =item * C<replace>
  
  C<subname> must already exist. C<code> is required.
  
  =item * C<add_or_replace>
  
  C<code> is required.
  
  =item * C<delete>
  
  C<code> is not needed.
  
  =back
  
  Die on error.
  
  Function returns a handle object. As soon as you lose the value of the handle
  (by calling in void context, assigning over the variable, undeffing the
  variable, letting it go out of scope, etc), the patch is unapplied.
  
  Patches can be unapplied in random order, but unapplying a patch where the next
  patch is a wrapper can lead to an error. Example: first patch (P1) adds a
  subroutine and second patch (P2) wraps it. If P1 is unapplied before P2, the
  subroutine is now no longer there, and P2 no longer works. Unapplying P1 after
  P2 works, of course.
  
  =head1 FAQ
  
  =head2 Differences with Monkey::Patch?
  
  This module is based on the wonderful L<Monkey::Patch> by Paul Driver. The
  differences are:
  
  =over 4
  
  =item *
  
  This module adds the ability to add/replace/delete subroutines instead of just
  wrapping them.
  
  =item *
  
  Interface to patch_package() is slightly different (see previous item for the
  cause).
  
  =item *
  
  Using this module, the wrapper receives a context hash instead of just the
  original subroutine.
  
  =item *
  
  Monkey::Patch adds convenience for patching classes and objects. To keep things
  simple, no such convenience is currently provided by this module.
  C<patch_package()> *can* patch classes and objects as well (see the next FAQ
  entry).
  
  =back
  
  =head2 How to patch classes and objects?
  
  Patching a class is basically the same as patching any other package, since Perl
  implements a class with a package. One thing to note is that to call a parent's
  method inside your wrapper code, instead of:
  
   $self->SUPER::methname(...)
  
  you need to do something like:
  
   use SUPER;
   SUPER::find_parent(ref($self), 'methname')->methname(...)
  
  Patching an object is also basically patching a class/package, because Perl does
  not have per-object method like Ruby. But if you just want to provide a modified
  behavior for a certain object only, you can do something like:
  
   patch_package($package, $methname, 'wrap',
   sub {
       my $ctx = shift;
       my $self = shift;
  
       my $obj = $ctx->{extra}[0];
       no warnings 'numeric';
       if ($obj == $self) {
           # do stuff
       }
       $ctx->{orig}->(@_);
   }, $obj);
  
  =head1 SEE ALSO
  
  L<Monkey::Patch>
  
  =head1 AUTHOR
  
  Steven Haryanto <stevenharyanto@gmail.com>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2012 by Steven Haryanto.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
  
MONKEY_PATCH_ACTION

    $main::fatpacked{"Monkey/Patch/Action/Handle.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MONKEY_PATCH_ACTION_HANDLE';
  package Monkey::Patch::Action::Handle;
  
  use 5.010;
  use strict;
  use warnings;
  
  use Scalar::Util qw(weaken);
  use Sub::Delete;
  
  our $VERSION = '0.04'; # VERSION
  
  my %stacks;
  
  sub __find_previous {
      my ($stack, $code) = @_;
      state $empty = sub {};
  
      for my $i (1..$#$stack) {
          if ($stack->[$i][1] == $code) {
              return $stack->[$i-1][2] // $stack->[$i-1][1];
          }
      }
      $empty;
  }
  
  sub new {
      my ($class, %args) = @_;
  
      my $type = $args{-type};
      delete $args{-type};
  
      my $code = $args{code};
  
      my $name = "$args{package}::$args{subname}";
      my $stack;
      if (!$stacks{$name}) {
          $stacks{$name} = [];
          push @{$stacks{$name}}, [sub => \&$name] if defined(&$name);
      }
      $stack = $stacks{$name};
  
      my $self = bless \%args, $class;
  
      no strict 'refs';
      no warnings 'redefine';
      if ($type eq 'sub') {
          push @$stack, [$type => $code];
          *$name = $code;
      } elsif ($type eq 'delete') {
          $code = sub {};
          $args{code} = $code;
          push @$stack, [$type, $code];
          delete_sub $name;
      } elsif ($type eq 'wrap') {
          weaken($self);
          my $wrapper = sub {
              my $ctx = {
                  package => $self->{package},
                  subname => $self->{subname},
                  extra   => $self->{extra},
                  orig    => __find_previous($stack, $self->{code}),
              };
              unshift @_, $ctx;
              goto &{$self->{code}};
          };
          push @$stack, [$type => $code => $wrapper];
          *$name = $wrapper;
      }
  
      $self;
  }
  
  sub DESTROY {
      my $self = shift;
  
      my $name  = "$self->{package}::$self->{subname}";
      my $stack = $stacks{$name};
      my $code  = $self->{code};
  
      for my $i (0..$#$stack) {
          if($stack->[$i][1] == $code) {
              if ($stack->[$i+1]) {
                  # check conflict
                  if ($stack->[$i+1][0] eq 'wrap' &&
                          ($i == 0 || $stack->[$i-1][0] eq 'delete')) {
                      my $p = $self->{patcher};
                      warn "Warning: unapplying patch to $name ".
                          "(applied in $p->[1]:$p->[2]) before a wrapping patch";
                  }
              }
  
              no strict 'refs';
              if ($i == @$stack-1) {
                  if ($i) {
                      no warnings 'redefine';
                      if ($stack->[$i-1][0] eq 'delete') {
                          delete_sub $name;
                      } else {
                          *$name = $stack->[$i-1][2] // $stack->[$i-1][1];
                      }
                  } else {
                      delete_sub $name;
                  }
              }
              splice @$stack, $i, 1;
              last;
          }
      }
  }
  
  1;
  
  
  __END__
  =pod
  
  =head1 NAME
  
  Monkey::Patch::Action::Handle
  
  =head1 VERSION
  
  version 0.04
  
  =for Pod::Coverage .*
  
  =head1 AUTHOR
  
  Steven Haryanto <stevenharyanto@gmail.com>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2012 by Steven Haryanto.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
  
MONKEY_PATCH_ACTION_HANDLE

    $main::fatpacked{"Moo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MOO';
  package Moo;
  
  use Moo::_strictures;
  use Moo::_mro;
  use Moo::_Utils qw(
    _getglob
    _getstash
    _install_coderef
    _install_modifier
    _load_module
    _set_loaded
    _unimport_coderefs
  );
  use Carp qw(croak);
  BEGIN {
    our @CARP_NOT = qw(
      Method::Generate::Constructor
      Method::Generate::Accessor
      Moo::sification
      Moo::_Utils
      Moo::Role
    );
  }
  
  our $VERSION = '2.002004';
  $VERSION = eval $VERSION;
  
  require Moo::sification;
  Moo::sification->import;
  
  our %MAKERS;
  
  sub _install_tracked {
    my ($target, $name, $code) = @_;
    $MAKERS{$target}{exports}{$name} = $code;
    _install_coderef "${target}::${name}" => "Moo::${name}" => $code;
  }
  
  sub import {
    my $target = caller;
    my $class = shift;
    _set_loaded(caller);
  
    strict->import;
    warnings->import;
  
    if ($INC{'Role/Tiny.pm'} and Role::Tiny->is_role($target)) {
      croak "Cannot import Moo into a role";
    }
    $MAKERS{$target} ||= {};
    _install_tracked $target => extends => sub {
      $class->_set_superclasses($target, @_);
      $class->_maybe_reset_handlemoose($target);
      return;
    };
    _install_tracked $target => with => sub {
      require Moo::Role;
      Moo::Role->apply_roles_to_package($target, @_);
      $class->_maybe_reset_handlemoose($target);
    };
    _install_tracked $target => has => sub {
      my $name_proto = shift;
      my @name_proto = ref $name_proto eq 'ARRAY' ? @$name_proto : $name_proto;
      if (@_ % 2 != 0) {
        croak "Invalid options for " . join(', ', map "'$_'", @name_proto)
          . " attribute(s): even number of arguments expected, got " . scalar @_;
      }
      my %spec = @_;
      foreach my $name (@name_proto) {
        # Note that when multiple attributes specified, each attribute
        # needs a separate \%specs hashref
        my $spec_ref = @name_proto > 1 ? +{%spec} : \%spec;
        $class->_constructor_maker_for($target)
              ->register_attribute_specs($name, $spec_ref);
        $class->_accessor_maker_for($target)
              ->generate_method($target, $name, $spec_ref);
        $class->_maybe_reset_handlemoose($target);
      }
      return;
    };
    foreach my $type (qw(before after around)) {
      _install_tracked $target => $type => sub {
        _install_modifier($target, $type, @_);
        return;
      };
    }
    return if $MAKERS{$target}{is_class}; # already exported into this package
    my $stash = _getstash($target);
    my @not_methods = map { *$_{CODE}||() } grep !ref($_), values %$stash;
    @{$MAKERS{$target}{not_methods}={}}{@not_methods} = @not_methods;
    $MAKERS{$target}{is_class} = 1;
    {
      no strict 'refs';
      @{"${target}::ISA"} = do {
        require Moo::Object; ('Moo::Object');
      } unless @{"${target}::ISA"};
    }
    if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
      Moo::HandleMoose::inject_fake_metaclass_for($target);
    }
  }
  
  sub unimport {
    my $target = caller;
    _unimport_coderefs($target, $MAKERS{$target});
  }
  
  sub _set_superclasses {
    my $class = shift;
    my $target = shift;
    foreach my $superclass (@_) {
      _load_module($superclass);
      if ($INC{'Role/Tiny.pm'} && Role::Tiny->is_role($superclass)) {
        croak "Can't extend role '$superclass'";
      }
    }
    # Can't do *{...} = \@_ or 5.10.0's mro.pm stops seeing @ISA
    @{*{_getglob("${target}::ISA")}{ARRAY}} = @_;
    if (my $old = delete $Moo::MAKERS{$target}{constructor}) {
      $old->assert_constructor;
      delete _getstash($target)->{new};
      Moo->_constructor_maker_for($target)
         ->register_attribute_specs(%{$old->all_attribute_specs});
    }
    elsif (!$target->isa('Moo::Object')) {
      Moo->_constructor_maker_for($target);
    }
    no warnings 'once'; # piss off. -- mst
    $Moo::HandleMoose::MOUSE{$target} = [
      grep defined, map Mouse::Util::find_meta($_), @_
    ] if Mouse::Util->can('find_meta');
  }
  
  sub _maybe_reset_handlemoose {
    my ($class, $target) = @_;
    if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
      Moo::HandleMoose::maybe_reinject_fake_metaclass_for($target);
    }
  }
  
  sub _accessor_maker_for {
    my ($class, $target) = @_;
    return unless $MAKERS{$target};
    $MAKERS{$target}{accessor} ||= do {
      my $maker_class = do {
        if (my $m = do {
              require Sub::Defer;
              if (my $defer_target =
                    (Sub::Defer::defer_info($target->can('new'))||[])->[0]
                ) {
                my ($pkg) = ($defer_target =~ /^(.*)::[^:]+$/);
                $MAKERS{$pkg} && $MAKERS{$pkg}{accessor};
              } else {
                undef;
              }
            }) {
          ref($m);
        } else {
          require Method::Generate::Accessor;
          'Method::Generate::Accessor'
        }
      };
      $maker_class->new;
    }
  }
  
  sub _constructor_maker_for {
    my ($class, $target) = @_;
    return unless $MAKERS{$target};
    $MAKERS{$target}{constructor} ||= do {
      require Method::Generate::Constructor;
      require Sub::Defer;
  
      my %construct_opts = (
        package => $target,
        accessor_generator => $class->_accessor_maker_for($target),
        subconstructor_handler => (
          '      if ($Moo::MAKERS{$class}) {'."\n"
          .'        if ($Moo::MAKERS{$class}{constructor}) {'."\n"
          .'          package '.$target.';'."\n"
          .'          return $invoker->SUPER::new(@_);'."\n"
          .'        }'."\n"
          .'        '.$class.'->_constructor_maker_for($class);'."\n"
          .'        return $invoker->new(@_)'.";\n"
          .'      } elsif ($INC{"Moose.pm"} and my $meta = Class::MOP::get_metaclass_by_name($class)) {'."\n"
          .'        return $meta->new_object('."\n"
          .'          $class->can("BUILDARGS") ? $class->BUILDARGS(@_)'."\n"
          .'                      : $class->Moo::Object::BUILDARGS(@_)'."\n"
          .'        );'."\n"
          .'      }'."\n"
        ),
      );
  
      my $con;
      my @isa = @{mro::get_linear_isa($target)};
      shift @isa;
      if (my ($parent_new) = grep { *{_getglob($_.'::new')}{CODE} } @isa) {
        if ($parent_new eq 'Moo::Object') {
          # no special constructor needed
        }
        elsif (my $makers = $MAKERS{$parent_new}) {
          $con = $makers->{constructor};
          $construct_opts{construction_string} = $con->construction_string
            if $con;
        }
        elsif ($parent_new->can('BUILDALL')) {
          $construct_opts{construction_builder} = sub {
            my $inv = $target->can('BUILDARGS') ? '' : 'Moo::Object::';
            'do {'
            .'  my $args = $class->'.$inv.'BUILDARGS(@_);'
            .'  $args->{__no_BUILD__} = 1;'
            .'  $invoker->'.$target.'::SUPER::new($args);'
            .'}'
          };
        }
        else {
          $construct_opts{construction_builder} = sub {
            '$invoker->'.$target.'::SUPER::new('
              .($target->can('FOREIGNBUILDARGS') ?
                '$class->FOREIGNBUILDARGS(@_)' : '@_')
              .')'
          };
        }
      }
      ($con ? ref($con) : 'Method::Generate::Constructor')
        ->new(%construct_opts)
        ->install_delayed
        ->register_attribute_specs(%{$con?$con->all_attribute_specs:{}})
    }
  }
  
  sub _concrete_methods_of {
    my ($me, $role) = @_;
    my $makers = $MAKERS{$role};
    # grab role symbol table
    my $stash = _getstash($role);
    # reverse so our keys become the values (captured coderefs) in case
    # they got copied or re-used since
    my $not_methods = { reverse %{$makers->{not_methods}||{}} };
    +{
      # grab all code entries that aren't in the not_methods list
      map {
        my $code = *{$stash->{$_}}{CODE};
        ( ! $code or exists $not_methods->{$code} ) ? () : ($_ => $code)
      } grep !ref($stash->{$_}), keys %$stash
    };
  }
  
  1;
  __END__
  
  =pod
  
  =encoding utf-8
  
  =head1 NAME
  
  Moo - Minimalist Object Orientation (with Moose compatibility)
  
  =head1 SYNOPSIS
  
    package Cat::Food;
  
    use Moo;
    use strictures 2;
    use namespace::clean;
  
    sub feed_lion {
      my $self = shift;
      my $amount = shift || 1;
  
      $self->pounds( $self->pounds - $amount );
    }
  
    has taste => (
      is => 'ro',
    );
  
    has brand => (
      is  => 'ro',
      isa => sub {
        die "Only SWEET-TREATZ supported!" unless $_[0] eq 'SWEET-TREATZ'
      },
    );
  
    has pounds => (
      is  => 'rw',
      isa => sub { die "$_[0] is too much cat food!" unless $_[0] < 15 },
    );
  
    1;
  
  And elsewhere:
  
    my $full = Cat::Food->new(
        taste  => 'DELICIOUS.',
        brand  => 'SWEET-TREATZ',
        pounds => 10,
    );
  
    $full->feed_lion;
  
    say $full->pounds;
  
  =head1 DESCRIPTION
  
  C<Moo> is an extremely light-weight Object Orientation system. It allows one to
  concisely define objects and roles with a convenient syntax that avoids the
  details of Perl's object system.  C<Moo> contains a subset of L<Moose> and is
  optimised for rapid startup.
  
  C<Moo> avoids depending on any XS modules to allow for simple deployments.  The
  name C<Moo> is based on the idea that it provides almost -- but not quite --
  two thirds of L<Moose>.
  
  Unlike L<Mouse> this module does not aim at full compatibility with
  L<Moose>'s surface syntax, preferring instead to provide full interoperability
  via the metaclass inflation capabilities described in L</MOO AND MOOSE>.
  
  For a full list of the minor differences between L<Moose> and L<Moo>'s surface
  syntax, see L</INCOMPATIBILITIES WITH MOOSE>.
  
  =head1 WHY MOO EXISTS
  
  If you want a full object system with a rich Metaprotocol, L<Moose> is
  already wonderful.
  
  But if you don't want to use L<Moose>, you may not want "less metaprotocol"
  like L<Mouse> offers, but you probably want "no metaprotocol", which is what
  Moo provides. C<Moo> is ideal for some situations where deployment or startup
  time precludes using L<Moose> and L<Mouse>:
  
  =over 2
  
  =item a command line or CGI script where fast startup is essential
  
  =item code designed to be deployed as a single file via L<App::FatPacker>
  
  =item a CPAN module that may be used by others in the above situations
  
  =back
  
  C<Moo> maintains transparent compatibility with L<Moose> so if you install and
  load L<Moose> you can use Moo classes and roles in L<Moose> code without
  modification.
  
  Moo -- Minimal Object Orientation -- aims to make it smooth to upgrade to
  L<Moose> when you need more than the minimal features offered by Moo.
  
  =head1 MOO AND MOOSE
  
  If L<Moo> detects L<Moose> being loaded, it will automatically register
  metaclasses for your L<Moo> and L<Moo::Role> packages, so you should be able
  to use them in L<Moose> code without modification.
  
  L<Moo> will also create L<Moose type constraints|Moose::Manual::Types> for
  L<Moo> classes and roles, so that in Moose classes C<< isa => 'MyMooClass' >>
  and C<< isa => 'MyMooRole' >> work the same as for L<Moose> classes and roles.
  
  Extending a L<Moose> class or consuming a L<Moose::Role> will also work.
  
  Extending a L<Mouse> class or consuming a L<Mouse::Role> will also work. But
  note that we don't provide L<Mouse> metaclasses or metaroles so the other way
  around doesn't work. This feature exists for L<Any::Moose> users porting to
  L<Moo>; enabling L<Mouse> users to use L<Moo> classes is not a priority for us.
  
  This means that there is no need for anything like L<Any::Moose> for Moo
  code - Moo and Moose code should simply interoperate without problem. To
  handle L<Mouse> code, you'll likely need an empty Moo role or class consuming
  or extending the L<Mouse> stuff since it doesn't register true L<Moose>
  metaclasses like L<Moo> does.
  
  If you need to disable the metaclass creation, add:
  
    no Moo::sification;
  
  to your code before Moose is loaded, but bear in mind that this switch is
  global and turns the mechanism off entirely so don't put this in library code.
  
  =head1 MOO AND CLASS::XSACCESSOR
  
  If a new enough version of L<Class::XSAccessor> is available, it
  will be used to generate simple accessors, readers, and writers for
  better performance.  Simple accessors are those without lazy defaults,
  type checks/coercions, or triggers.  Readers and writers generated
  by L<Class::XSAccessor> will behave slightly differently: they will
  reject attempts to call them with the incorrect number of parameters.
  
  =head1 MOO VERSUS ANY::MOOSE
  
  L<Any::Moose> will load L<Mouse> normally, and L<Moose> in a program using
  L<Moose> - which theoretically allows you to get the startup time of L<Mouse>
  without disadvantaging L<Moose> users.
  
  Sadly, this doesn't entirely work, since the selection is load order dependent
  - L<Moo>'s metaclass inflation system explained above in L</MOO AND MOOSE> is
  significantly more reliable.
  
  So if you want to write a CPAN module that loads fast or has only pure perl
  dependencies but is also fully usable by L<Moose> users, you should be using
  L<Moo>.
  
  For a full explanation, see the article
  L<http://shadow.cat/blog/matt-s-trout/moo-versus-any-moose> which explains
  the differing strategies in more detail and provides a direct example of
  where L<Moo> succeeds and L<Any::Moose> fails.
  
  =head1 PUBLIC METHODS
  
  Moo provides several methods to any class using it.
  
  =head2 new
  
    Foo::Bar->new( attr1 => 3 );
  
  or
  
    Foo::Bar->new({ attr1 => 3 });
  
  The constructor for the class.  By default it will accept attributes either as a
  hashref, or a list of key value pairs.  This can be customized with the
  L</BUILDARGS> method.
  
  =head2 does
  
    if ($foo->does('Some::Role1')) {
      ...
    }
  
  Returns true if the object composes in the passed role.
  
  =head2 DOES
  
    if ($foo->DOES('Some::Role1') || $foo->DOES('Some::Class1')) {
      ...
    }
  
  Similar to L</does>, but will also return true for both composed roles and
  superclasses.
  
  =head2 meta
  
    my $meta = Foo::Bar->meta;
    my @methods = $meta->get_method_list;
  
  Returns a L<Moose metaclass|Moose::Meta::Class> object for the class.  The
  metaclass will only be built on demand, loading Moose in the process.
  
  =head1 LIFECYCLE METHODS
  
  There are several methods that you can define in your class to control
  construction and destruction of objects.  They should be used rather than trying
  to modify C<new> or C<DESTROY> yourself.
  
  =head2 BUILDARGS
  
    around BUILDARGS => sub {
      my ( $orig, $class, @args ) = @_;
  
      return { attr1 => $args[0] }
        if @args == 1 && !ref $args[0];
  
      return $class->$orig(@args);
    };
  
    Foo::Bar->new( 3 );
  
  This class method is used to transform the arguments to C<new> into a hash
  reference of attribute values.
  
  The default implementation accepts a hash or hash reference of named parameters.
  If it receives a single argument that isn't a hash reference it will throw an
  error.
  
  You can override this method in your class to handle other types of options
  passed to the constructor.
  
  This method should always return a hash reference of named options.
  
  =head2 FOREIGNBUILDARGS
  
    sub FOREIGNBUILDARGS {
      my ( $class, $options ) = @_;
      return $options->{foo};
    }
  
  If you are inheriting from a non-Moo class, the arguments passed to the parent
  class constructor can be manipulated by defining a C<FOREIGNBUILDARGS> method.
  It will receive the same arguments as L</BUILDARGS>, and should return a list
  of arguments to pass to the parent class constructor.
  
  =head2 BUILD
  
    sub BUILD {
      my ($self, $args) = @_;
      die "foo and bar cannot be used at the same time"
        if exists $args->{foo} && exists $args->{bar};
    }
  
  On object creation, any C<BUILD> methods in the class's inheritance hierarchy
  will be called on the object and given the results of L</BUILDARGS>.  They each
  will be called in order from the parent classes down to the child, and thus
  should not themselves call the parent's method.  Typically this is used for
  object validation or possibly logging.
  
  =head2 DEMOLISH
  
    sub DEMOLISH {
      my ($self, $in_global_destruction) = @_;
      ...
    }
  
  When an object is destroyed, any C<DEMOLISH> methods in the inheritance
  hierarchy will be called on the object.  They are given boolean to inform them
  if global destruction is in progress, and are called from the child class upwards
  to the parent.  This is similar to L</BUILD> methods but in the opposite order.
  
  Note that this is implemented by a C<DESTROY> method, which is only created on
  on the first construction of an object of your class.  This saves on overhead for
  classes that are never instantiated or those without C<DEMOLISH> methods.  If you
  try to define your own C<DESTROY>, this will cause undefined results.
  
  =head1 IMPORTED SUBROUTINES
  
  =head2 extends
  
    extends 'Parent::Class';
  
  Declares a base class. Multiple superclasses can be passed for multiple
  inheritance but please consider using L<roles|Moo::Role> instead.  The class
  will be loaded but no errors will be triggered if the class can't be found and
  there are already subs in the class.
  
  Calling extends more than once will REPLACE your superclasses, not add to
  them like 'use base' would.
  
  =head2 with
  
    with 'Some::Role1';
  
  or
  
    with 'Some::Role1', 'Some::Role2';
  
  Composes one or more L<Moo::Role> (or L<Role::Tiny>) roles into the current
  class.  An error will be raised if these roles cannot be composed because they
  have conflicting method definitions.  The roles will be loaded using the same
  mechanism as C<extends> uses.
  
  =head2 has
  
    has attr => (
      is => 'ro',
    );
  
  Declares an attribute for the class.
  
    package Foo;
    use Moo;
    has 'attr' => (
      is => 'ro'
    );
  
    package Bar;
    use Moo;
    extends 'Foo';
    has '+attr' => (
      default => sub { "blah" },
    );
  
  Using the C<+> notation, it's possible to override an attribute.
  
    has [qw(attr1 attr2 attr3)] => (
      is => 'ro',
    );
  
  Using an arrayref with multiple attribute names, it's possible to declare
  multiple attributes with the same options.
  
  The options for C<has> are as follows:
  
  =over 2
  
  =item * C<is>
  
  B<required>, may be C<ro>, C<lazy>, C<rwp> or C<rw>.
  
  C<ro> stands for "read-only" and generates an accessor that dies if you attempt
  to write to it - i.e.  a getter only - by defaulting C<reader> to the name of
  the attribute.
  
  C<lazy> generates a reader like C<ro>, but also sets C<lazy> to 1 and
  C<builder> to C<_build_${attribute_name}> to allow on-demand generated
  attributes.  This feature was my attempt to fix my incompetence when
  originally designing C<lazy_build>, and is also implemented by
  L<MooseX::AttributeShortcuts>. There is, however, nothing to stop you
  using C<lazy> and C<builder> yourself with C<rwp> or C<rw> - it's just that
  this isn't generally a good idea so we don't provide a shortcut for it.
  
  C<rwp> stands for "read-write protected" and generates a reader like C<ro>, but
  also sets C<writer> to C<_set_${attribute_name}> for attributes that are
  designed to be written from inside of the class, but read-only from outside.
  This feature comes from L<MooseX::AttributeShortcuts>.
  
  C<rw> stands for "read-write" and generates a normal getter/setter by
  defaulting the C<accessor> to the name of the attribute specified.
  
  =item * C<isa>
  
  Takes a coderef which is used to validate the attribute.  Unlike L<Moose>, Moo
  does not include a basic type system, so instead of doing C<< isa => 'Num' >>,
  one should do
  
    use Scalar::Util qw(looks_like_number);
    ...
    isa => sub {
      die "$_[0] is not a number!" unless looks_like_number $_[0]
    },
  
  Note that the return value for C<isa> is discarded. Only if the sub dies does
  type validation fail.
  
  L<Sub::Quote aware|/SUB QUOTE AWARE>
  
  Since L<Moo> does B<not> run the C<isa> check before C<coerce> if a coercion
  subroutine has been supplied, C<isa> checks are not structural to your code
  and can, if desired, be omitted on non-debug builds (although if this results
  in an uncaught bug causing your program to break, the L<Moo> authors guarantee
  nothing except that you get to keep both halves).
  
  If you want L<Moose> compatible or L<MooseX::Types> style named types, look at
  L<Type::Tiny>.
  
  To cause your C<isa> entries to be automatically mapped to named
  L<Moose::Meta::TypeConstraint> objects (rather than the default behaviour
  of creating an anonymous type), set:
  
    $Moo::HandleMoose::TYPE_MAP{$isa_coderef} = sub {
      require MooseX::Types::Something;
      return MooseX::Types::Something::TypeName();
    };
  
  Note that this example is purely illustrative; anything that returns a
  L<Moose::Meta::TypeConstraint> object or something similar enough to it to
  make L<Moose> happy is fine.
  
  =item * C<coerce>
  
  Takes a coderef which is meant to coerce the attribute.  The basic idea is to
  do something like the following:
  
   coerce => sub {
     $_[0] % 2 ? $_[0] : $_[0] + 1
   },
  
  Note that L<Moo> will always execute your coercion: this is to permit
  C<isa> entries to be used purely for bug trapping, whereas coercions are
  always structural to your code. We do, however, apply any supplied C<isa>
  check after the coercion has run to ensure that it returned a valid value.
  
  L<Sub::Quote aware|/SUB QUOTE AWARE>
  
  If the C<isa> option is a blessed object providing a C<coerce> or
  C<coercion> method, then the C<coerce> option may be set to just C<1>.
  
  =item * C<handles>
  
  Takes a string
  
    handles => 'RobotRole'
  
  Where C<RobotRole> is a L<role|Moo::Role> that defines an interface which
  becomes the list of methods to handle.
  
  Takes a list of methods
  
    handles => [ qw( one two ) ]
  
  Takes a hashref
  
    handles => {
      un => 'one',
    }
  
  =item * C<trigger>
  
  Takes a coderef which will get called any time the attribute is set. This
  includes the constructor, but not default or built values. The coderef will be
  invoked against the object with the new value as an argument.
  
  If you set this to just C<1>, it generates a trigger which calls the
  C<_trigger_${attr_name}> method on C<$self>. This feature comes from
  L<MooseX::AttributeShortcuts>.
  
  Note that Moose also passes the old value, if any; this feature is not yet
  supported.
  
  L<Sub::Quote aware|/SUB QUOTE AWARE>
  
  =item * C<default>
  
  Takes a coderef which will get called with $self as its only argument to
  populate an attribute if no value for that attribute was supplied to the
  constructor. Alternatively, if the attribute is lazy, C<default> executes when
  the attribute is first retrieved if no value has yet been provided.
  
  If a simple scalar is provided, it will be inlined as a string. Any non-code
  reference (hash, array) will result in an error - for that case instead use
  a code reference that returns the desired value.
  
  Note that if your default is fired during new() there is no guarantee that
  other attributes have been populated yet so you should not rely on their
  existence.
  
  L<Sub::Quote aware|/SUB QUOTE AWARE>
  
  =item * C<predicate>
  
  Takes a method name which will return true if an attribute has a value.
  
  If you set this to just C<1>, the predicate is automatically named
  C<has_${attr_name}> if your attribute's name does not start with an
  underscore, or C<_has_${attr_name_without_the_underscore}> if it does.
  This feature comes from L<MooseX::AttributeShortcuts>.
  
  =item * C<builder>
  
  Takes a method name which will be called to create the attribute - functions
  exactly like default except that instead of calling
  
    $default->($self);
  
  Moo will call
  
    $self->$builder;
  
  The following features come from L<MooseX::AttributeShortcuts>:
  
  If you set this to just C<1>, the builder is automatically named
  C<_build_${attr_name}>.
  
  If you set this to a coderef or code-convertible object, that variable will be
  installed under C<$class::_build_${attr_name}> and the builder set to the same
  name.
  
  =item * C<clearer>
  
  Takes a method name which will clear the attribute.
  
  If you set this to just C<1>, the clearer is automatically named
  C<clear_${attr_name}> if your attribute's name does not start with an
  underscore, or C<_clear_${attr_name_without_the_underscore}> if it does.
  This feature comes from L<MooseX::AttributeShortcuts>.
  
  B<NOTE:> If the attribute is C<lazy>, it will be regenerated from C<default> or
  C<builder> the next time it is accessed. If it is not lazy, it will be C<undef>.
  
  =item * C<lazy>
  
  B<Boolean>.  Set this if you want values for the attribute to be grabbed
  lazily.  This is usually a good idea if you have a L</builder> which requires
  another attribute to be set.
  
  =item * C<required>
  
  B<Boolean>.  Set this if the attribute must be passed on object instantiation.
  
  =item * C<reader>
  
  The name of the method that returns the value of the attribute.  If you like
  Java style methods, you might set this to C<get_foo>
  
  =item * C<writer>
  
  The value of this attribute will be the name of the method to set the value of
  the attribute.  If you like Java style methods, you might set this to
  C<set_foo>.
  
  =item * C<weak_ref>
  
  B<Boolean>.  Set this if you want the reference that the attribute contains to
  be weakened. Use this when circular references, which cause memory leaks, are
  possible.
  
  =item * C<init_arg>
  
  Takes the name of the key to look for at instantiation time of the object.  A
  common use of this is to make an underscored attribute have a non-underscored
  initialization name. C<undef> means that passing the value in on instantiation
  is ignored.
  
  =item * C<moosify>
  
  Takes either a coderef or array of coderefs which is meant to transform the
  given attributes specifications if necessary when upgrading to a Moose role or
  class. You shouldn't need this by default, but is provided as a means of
  possible extensibility.
  
  =back
  
  =head2 before
  
    before foo => sub { ... };
  
  See L<< Class::Method::Modifiers/before method(s) => sub { ... }; >> for full
  documentation.
  
  =head2 around
  
    around foo => sub { ... };
  
  See L<< Class::Method::Modifiers/around method(s) => sub { ... }; >> for full
  documentation.
  
  =head2 after
  
    after foo => sub { ... };
  
  See L<< Class::Method::Modifiers/after method(s) => sub { ... }; >> for full
  documentation.
  
  =head1 SUB QUOTE AWARE
  
  L<Sub::Quote/quote_sub> allows us to create coderefs that are "inlineable,"
  giving us a handy, XS-free speed boost.  Any option that is L<Sub::Quote>
  aware can take advantage of this.
  
  To do this, you can write
  
    use Sub::Quote;
  
    use Moo;
    use namespace::clean;
  
    has foo => (
      is => 'ro',
      isa => quote_sub(q{ die "Not <3" unless $_[0] < 3 })
    );
  
  which will be inlined as
  
    do {
      local @_ = ($_[0]->{foo});
      die "Not <3" unless $_[0] < 3;
    }
  
  or to avoid localizing @_,
  
    has foo => (
      is => 'ro',
      isa => quote_sub(q{ my ($val) = @_; die "Not <3" unless $val < 3 })
    );
  
  which will be inlined as
  
    do {
      my ($val) = ($_[0]->{foo});
      die "Not <3" unless $val < 3;
    }
  
  See L<Sub::Quote> for more information, including how to pass lexical
  captures that will also be compiled into the subroutine.
  
  =head1 CLEANING UP IMPORTS
  
  L<Moo> will not clean up imported subroutines for you; you will have
  to do that manually. The recommended way to do this is to declare your
  imports first, then C<use Moo>, then C<use namespace::clean>.
  Anything imported before L<namespace::clean> will be scrubbed.
  Anything imported or declared after will be still be available.
  
    package Record;
  
    use Digest::MD5 qw(md5_hex);
  
    use Moo;
    use namespace::clean;
  
    has name => (is => 'ro', required => 1);
    has id => (is => 'lazy');
    sub _build_id {
      my ($self) = @_;
      return md5_hex($self->name);
    }
  
    1;
  
  If you were to import C<md5_hex> after L<namespace::clean> you would
  be able to call C<< ->md5_hex() >> on your C<Record> instances (and it
  probably wouldn't do what you expect!).
  
  L<Moo::Role>s behave slightly differently.  Since their methods are
  composed into the consuming class, they can do a little more for you
  automatically.  As long as you declare your imports before calling
  C<use Moo::Role>, those imports and the ones L<Moo::Role> itself
  provides will not be composed into consuming classes so there's usually
  no need to use L<namespace::clean>.
  
  B<On L<namespace::autoclean>:> Older versions of L<namespace::autoclean> would
  inflate Moo classes to full L<Moose> classes, losing the benefits of Moo.  If
  you want to use L<namespace::autoclean> with a Moo class, make sure you are
  using version 0.16 or newer.
  
  =head1 INCOMPATIBILITIES WITH MOOSE
  
  There is no built-in type system.  C<isa> is verified with a coderef; if you
  need complex types, L<Type::Tiny> can provide types, type libraries, and
  will work seamlessly with both L<Moo> and L<Moose>.  L<Type::Tiny> can be
  considered the successor to L<MooseX::Types> and provides a similar API, so
  that you can write
  
    use Types::Standard qw(Int);
    has days_to_live => (is => 'ro', isa => Int);
  
  C<initializer> is not supported in core since the author considers it to be a
  bad idea and Moose best practices recommend avoiding it. Meanwhile C<trigger> or
  C<coerce> are more likely to be able to fulfill your needs.
  
  There is no meta object.  If you need this level of complexity you need
  L<Moose> - Moo is small because it explicitly does not provide a metaprotocol.
  However, if you load L<Moose>, then
  
    Class::MOP::class_of($moo_class_or_role)
  
  will return an appropriate metaclass pre-populated by L<Moo>.
  
  No support for C<super>, C<override>, C<inner>, or C<augment> - the author
  considers augment to be a bad idea, and override can be translated:
  
    override foo => sub {
      ...
      super();
      ...
    };
  
    around foo => sub {
      my ($orig, $self) = (shift, shift);
      ...
      $self->$orig(@_);
      ...
    };
  
  The C<dump> method is not provided by default. The author suggests loading
  L<Devel::Dwarn> into C<main::> (via C<perl -MDevel::Dwarn ...> for example) and
  using C<$obj-E<gt>$::Dwarn()> instead.
  
  L</default> only supports coderefs and plain scalars, because passing a hash
  or array reference as a default is almost always incorrect since the value is
  then shared between all objects using that default.
  
  C<lazy_build> is not supported; you are instead encouraged to use the
  C<< is => 'lazy' >> option supported by L<Moo> and
  L<MooseX::AttributeShortcuts>.
  
  C<auto_deref> is not supported since the author considers it a bad idea and
  it has been considered best practice to avoid it for some time.
  
  C<documentation> will show up in a L<Moose> metaclass created from your class
  but is otherwise ignored. Then again, L<Moose> ignores it as well, so this
  is arguably not an incompatibility.
  
  Since C<coerce> does not require C<isa> to be defined but L<Moose> does
  require it, the metaclass inflation for coerce alone is a trifle insane
  and if you attempt to subtype the result will almost certainly break.
  
  Handling of warnings: when you C<use Moo> we enable strict and warnings, in a
  similar way to Moose. The authors recommend the use of C<strictures>, which
  enables FATAL warnings, and several extra pragmas when used in development:
  L<indirect>, L<multidimensional>, and L<bareword::filehandles>.
  
  Additionally, L<Moo> supports a set of attribute option shortcuts intended to
  reduce common boilerplate.  The set of shortcuts is the same as in the L<Moose>
  module L<MooseX::AttributeShortcuts> as of its version 0.009+.  So if you:
  
    package MyClass;
    use Moo;
    use strictures 2;
  
  The nearest L<Moose> invocation would be:
  
    package MyClass;
  
    use Moose;
    use warnings FATAL => "all";
    use MooseX::AttributeShortcuts;
  
  or, if you're inheriting from a non-Moose class,
  
    package MyClass;
  
    use Moose;
    use MooseX::NonMoose;
    use warnings FATAL => "all";
    use MooseX::AttributeShortcuts;
  
  Finally, Moose requires you to call
  
    __PACKAGE__->meta->make_immutable;
  
  at the end of your class to get an inlined (i.e. not horribly slow)
  constructor. Moo does it automatically the first time ->new is called
  on your class. (C<make_immutable> is a no-op in Moo to ease migration.)
  
  An extension L<MooX::late> exists to ease translating Moose packages
  to Moo by providing a more Moose-like interface.
  
  =head1 SUPPORT
  
  Users' IRC: #moose on irc.perl.org
  
  =for :html
  L<(click for instant chatroom login)|http://chat.mibbit.com/#moose@irc.perl.org>
  
  Development and contribution IRC: #web-simple on irc.perl.org
  
  =for :html
  L<(click for instant chatroom login)|http://chat.mibbit.com/#web-simple@irc.perl.org>
  
  Bugtracker: L<https://rt.cpan.org/Public/Dist/Display.html?Name=Moo>
  
  Git repository: L<git://github.com/moose/Moo.git>
  
  Git browser: L<https://github.com/moose/Moo>
  
  =head1 AUTHOR
  
  mst - Matt S. Trout (cpan:MSTROUT) <mst@shadowcat.co.uk>
  
  =head1 CONTRIBUTORS
  
  dg - David Leadbeater (cpan:DGL) <dgl@dgl.cx>
  
  frew - Arthur Axel "fREW" Schmidt (cpan:FREW) <frioux@gmail.com>
  
  hobbs - Andrew Rodland (cpan:ARODLAND) <arodland@cpan.org>
  
  jnap - John Napiorkowski (cpan:JJNAPIORK) <jjn1056@yahoo.com>
  
  ribasushi - Peter Rabbitson (cpan:RIBASUSHI) <ribasushi@cpan.org>
  
  chip - Chip Salzenberg (cpan:CHIPS) <chip@pobox.com>
  
  ajgb - Alex J. G. Burzyński (cpan:AJGB) <ajgb@cpan.org>
  
  doy - Jesse Luehrs (cpan:DOY) <doy at tozt dot net>
  
  perigrin - Chris Prather (cpan:PERIGRIN) <chris@prather.org>
  
  Mithaldu - Christian Walde (cpan:MITHALDU) <walde.christian@googlemail.com>
  
  ilmari - Dagfinn Ilmari Mannsåker (cpan:ILMARI) <ilmari@ilmari.org>
  
  tobyink - Toby Inkster (cpan:TOBYINK) <tobyink@cpan.org>
  
  haarg - Graham Knop (cpan:HAARG) <haarg@cpan.org>
  
  mattp - Matt Phillips (cpan:MATTP) <mattp@cpan.org>
  
  bluefeet - Aran Deltac (cpan:BLUEFEET) <bluefeet@gmail.com>
  
  bubaflub - Bob Kuo (cpan:BUBAFLUB) <bubaflub@cpan.org>
  
  ether = Karen Etheridge (cpan:ETHER) <ether@cpan.org>
  
  =head1 COPYRIGHT
  
  Copyright (c) 2010-2015 the Moo L</AUTHOR> and L</CONTRIBUTORS>
  as listed above.
  
  =head1 LICENSE
  
  This library is free software and may be distributed under the same terms
  as perl itself. See L<http://dev.perl.org/licenses/>.
  
  =cut
MOO

    $main::fatpacked{"Moo/HandleMoose.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MOO_HANDLEMOOSE';
  package Moo::HandleMoose;
  use Moo::_strictures;
  no warnings 'once';
  use Moo::_Utils qw(_getstash);
  use Sub::Quote qw(quotify);
  use Carp qw(croak);
  
  our %TYPE_MAP;
  
  our $SETUP_DONE;
  
  sub import { return if $SETUP_DONE; inject_all(); $SETUP_DONE = 1; }
  
  sub inject_all {
    croak "Can't inflate Moose metaclass with Moo::sification disabled"
      if $Moo::sification::disabled;
    require Class::MOP;
    inject_fake_metaclass_for($_)
      for grep $_ ne 'Moo::Object', do { no warnings 'once'; keys %Moo::MAKERS };
    inject_fake_metaclass_for($_) for keys %Moo::Role::INFO;
    require Moose::Meta::Method::Constructor;
    @Moo::HandleMoose::FakeConstructor::ISA = 'Moose::Meta::Method::Constructor';
    @Moo::HandleMoose::FakeMeta::ISA = 'Moose::Meta::Method::Meta';
  }
  
  sub maybe_reinject_fake_metaclass_for {
    my ($name) = @_;
    our %DID_INJECT;
    if (delete $DID_INJECT{$name}) {
      unless ($Moo::Role::INFO{$name}) {
        Moo->_constructor_maker_for($name)->install_delayed;
      }
      inject_fake_metaclass_for($name);
    }
  }
  
  sub inject_fake_metaclass_for {
    my ($name) = @_;
    require Class::MOP;
    require Moo::HandleMoose::FakeMetaClass;
    Class::MOP::store_metaclass_by_name(
      $name, bless({ name => $name }, 'Moo::HandleMoose::FakeMetaClass')
    );
    require Moose::Util::TypeConstraints;
    if ($Moo::Role::INFO{$name}) {
      Moose::Util::TypeConstraints::find_or_create_does_type_constraint($name);
    } else {
      Moose::Util::TypeConstraints::find_or_create_isa_type_constraint($name);
    }
  }
  
  {
    package Moo::HandleMoose::FakeConstructor;
  
    sub _uninlined_body { \&Moose::Object::new }
  }
  
  sub inject_real_metaclass_for {
    my ($name) = @_;
    our %DID_INJECT;
    return Class::MOP::get_metaclass_by_name($name) if $DID_INJECT{$name};
    require Moose; require Moo; require Moo::Role; require Scalar::Util;
    Class::MOP::remove_metaclass_by_name($name);
    my ($am_role, $am_class, $meta, $attr_specs, $attr_order) = do {
      if (my $info = $Moo::Role::INFO{$name}) {
        my @attr_info = @{$info->{attributes}||[]};
        (1, 0, Moose::Meta::Role->initialize($name),
         { @attr_info },
         [ @attr_info[grep !($_ % 2), 0..$#attr_info] ]
        )
      } elsif ( my $cmaker = Moo->_constructor_maker_for($name) ) {
        my $specs = $cmaker->all_attribute_specs;
        (0, 1, Moose::Meta::Class->initialize($name), $specs,
         [ sort { $specs->{$a}{index} <=> $specs->{$b}{index} } keys %$specs ]
        );
      } else {
         # This codepath is used if $name does not exist in $Moo::MAKERS
         (0, 0, Moose::Meta::Class->initialize($name), {}, [] )
      }
    };
  
    {
      local $DID_INJECT{$name} = 1;
      foreach my $spec (values %$attr_specs) {
        if (my $inflators = delete $spec->{moosify}) {
          $_->($spec) for @$inflators;
        }
      }
  
      my %methods
        = %{($am_role ? 'Moo::Role' : 'Moo')->_concrete_methods_of($name)};
  
      # if stuff gets added afterwards, _maybe_reset_handlemoose should
      # trigger the recreation of the metaclass but we need to ensure the
      # Moo::Role cache is cleared so we don't confuse Moo itself.
      if (my $info = $Moo::Role::INFO{$name}) {
        delete $info->{methods};
      }
  
      # needed to ensure the method body is stable and get things named
      $methods{$_} = Sub::Defer::undefer_sub($methods{$_})
        for
          grep $_ ne 'new',
          keys %methods;
      my @attrs;
      {
        # This local is completely not required for roles but harmless
        local @{_getstash($name)}{keys %methods};
        my %seen_name;
        foreach my $name (@$attr_order) {
          $seen_name{$name} = 1;
          my %spec = %{$attr_specs->{$name}};
          my %spec_map = (
            map { $_->name => $_->init_arg||$_->name }
            (
              (grep { $_->has_init_arg }
                $meta->attribute_metaclass->meta->get_all_attributes),
              grep { exists($_->{init_arg}) ? defined($_->init_arg) : 1 }
              map {
                my $meta = Moose::Util::resolve_metatrait_alias('Attribute', $_)
                            ->meta;
                map $meta->get_attribute($_), $meta->get_attribute_list
              }  @{$spec{traits}||[]}
            )
          );
          # have to hard code this because Moose's role meta-model is lacking
          $spec_map{traits} ||= 'traits';
  
          $spec{is} = 'ro' if $spec{is} eq 'lazy' or $spec{is} eq 'rwp';
          my $coerce = $spec{coerce};
          if (my $isa = $spec{isa}) {
            my $tc = $spec{isa} = do {
              if (my $mapped = $TYPE_MAP{$isa}) {
                my $type = $mapped->();
                unless ( Scalar::Util::blessed($type)
                    && $type->isa("Moose::Meta::TypeConstraint") ) {
                  croak "error inflating attribute '$name' for package '$_[0]': "
                    ."\$TYPE_MAP{$isa} did not return a valid type constraint'";
                }
                $coerce ? $type->create_child_type(name => $type->name) : $type;
              } else {
                Moose::Meta::TypeConstraint->new(
                  constraint => sub { eval { &$isa; 1 } }
                );
              }
            };
            if ($coerce) {
              $tc->coercion(Moose::Meta::TypeCoercion->new)
                ->_compiled_type_coercion($coerce);
              $spec{coerce} = 1;
            }
          } elsif ($coerce) {
            my $attr = quotify($name);
            my $tc = Moose::Meta::TypeConstraint->new(
                      constraint => sub { die "This is not going to work" },
                      inlined => sub {
                          'my $r = $_[42]{'.$attr.'}; $_[42]{'.$attr.'} = 1; $r'
                      },
                    );
            $tc->coercion(Moose::Meta::TypeCoercion->new)
              ->_compiled_type_coercion($coerce);
            $spec{isa} = $tc;
            $spec{coerce} = 1;
          }
          %spec =
            map { $spec_map{$_} => $spec{$_} }
            grep { exists $spec_map{$_} }
            keys %spec;
          push @attrs, $meta->add_attribute($name => %spec);
        }
        foreach my $mouse (do { our %MOUSE; @{$MOUSE{$name}||[]} }) {
          foreach my $attr ($mouse->get_all_attributes) {
            my %spec = %{$attr};
            delete @spec{qw(
              associated_class associated_methods __METACLASS__
              provides curries
            )};
            my $name = delete $spec{name};
            next if $seen_name{$name}++;
            push @attrs, $meta->add_attribute($name => %spec);
          }
        }
      }
      foreach my $meth_name (keys %methods) {
        my $meth_code = $methods{$meth_name};
        $meta->add_method($meth_name, $meth_code);
      }
  
      if ($am_role) {
        my $info = $Moo::Role::INFO{$name};
        $meta->add_required_methods(@{$info->{requires}});
        foreach my $modifier (@{$info->{modifiers}}) {
          my ($type, @args) = @$modifier;
          my $code = pop @args;
          $meta->${\"add_${type}_method_modifier"}($_, $code) for @args;
        }
      }
      elsif ($am_class) {
        foreach my $attr (@attrs) {
          foreach my $method (@{$attr->associated_methods}) {
            $method->{body} = $name->can($method->name);
          }
        }
        bless(
          $meta->find_method_by_name('new'),
          'Moo::HandleMoose::FakeConstructor',
        );
        my $meta_meth;
        if (
          $meta_meth = $meta->find_method_by_name('meta')
          and $meta_meth->body == \&Moo::Object::meta
        ) {
          bless($meta_meth, 'Moo::HandleMoose::FakeMeta');
        }
        # a combination of Moo and Moose may bypass a Moo constructor but still
        # use a Moo DEMOLISHALL.  We need to make sure this is loaded before
        # global destruction.
        require Method::Generate::DemolishAll;
      }
      $meta->add_role(Class::MOP::class_of($_))
        for grep !/\|/ && $_ ne $name, # reject Foo|Bar and same-role-as-self
          do { no warnings 'once'; keys %{$Moo::Role::APPLIED_TO{$name}} };
    }
    $DID_INJECT{$name} = 1;
    $meta;
  }
  
  1;
MOO_HANDLEMOOSE

    $main::fatpacked{"Moo/HandleMoose/FakeMetaClass.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MOO_HANDLEMOOSE_FAKEMETACLASS';
  package Moo::HandleMoose::FakeMetaClass;
  use Moo::_strictures;
  use Carp ();
  BEGIN { our @CARP_NOT = qw(Moo::HandleMoose) }
  
  sub DESTROY { }
  
  sub AUTOLOAD {
    my ($meth) = (our $AUTOLOAD =~ /([^:]+)$/);
    my $self = shift;
    Carp::croak "Can't call $meth without object instance"
      if !ref $self;
    Carp::croak "Can't inflate Moose metaclass with Moo::sification disabled"
      if $Moo::sification::disabled;
    require Moo::HandleMoose;
    Moo::HandleMoose::inject_real_metaclass_for($self->{name})->$meth(@_)
  }
  sub can {
    my $self = shift;
    return $self->SUPER::can(@_)
      if !ref $self or $Moo::sification::disabled;
    require Moo::HandleMoose;
    Moo::HandleMoose::inject_real_metaclass_for($self->{name})->can(@_)
  }
  sub isa {
    my $self = shift;
    return $self->SUPER::isa(@_)
      if !ref $self or $Moo::sification::disabled;
    require Moo::HandleMoose;
    Moo::HandleMoose::inject_real_metaclass_for($self->{name})->isa(@_)
  }
  sub make_immutable { $_[0] }
  
  1;
MOO_HANDLEMOOSE_FAKEMETACLASS

    $main::fatpacked{"Moo/HandleMoose/_TypeMap.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MOO_HANDLEMOOSE__TYPEMAP';
  package Moo::HandleMoose::_TypeMap;
  use Moo::_strictures;
  
  package
    Moo::HandleMoose;
  our %TYPE_MAP;
  
  package Moo::HandleMoose::_TypeMap;
  
  use Scalar::Util ();
  use Config;
  
  our %WEAK_TYPES;
  
  sub _str_to_ref {
    my $in = shift;
    return $in
      if ref $in;
  
    if ($in =~ /(?:^|=)([A-Z]+)\(0x([0-9a-zA-Z]+)\)$/) {
      my $type = $1;
      my $id = do { no warnings 'portable'; hex "$2" };
      require B;
      my $sv = bless \$id, 'B::SV';
      my $ref = eval { $sv->object_2svref };
      if (!defined $ref or Scalar::Util::reftype($ref) ne $type) {
        die <<'END_ERROR';
  Moo initialization encountered types defined in a parent thread - ensure that
  Moo is require()d before any further thread spawns following a type definition.
  END_ERROR
      }
      return $ref;
    }
    return $in;
  }
  
  sub TIEHASH  { bless {}, $_[0] }
  
  sub STORE {
    my ($self, $key, $value) = @_;
    my $type = _str_to_ref($key);
    $WEAK_TYPES{$type} = $type;
    Scalar::Util::weaken($WEAK_TYPES{$type})
      if ref $type;
    $self->{$key} = $value;
  }
  
  sub FETCH    { $_[0]->{$_[1]} }
  sub FIRSTKEY { my $a = scalar keys %{$_[0]}; each %{$_[0]} }
  sub NEXTKEY  { each %{$_[0]} }
  sub EXISTS   { exists $_[0]->{$_[1]} }
  sub DELETE   { delete $_[0]->{$_[1]} }
  sub CLEAR    { %{$_[0]} = () }
  sub SCALAR   { scalar %{$_[0]} }
  
  sub CLONE {
    my @types = map {
      defined $WEAK_TYPES{$_} ? ($WEAK_TYPES{$_} => $TYPE_MAP{$_}) : ()
    } keys %TYPE_MAP;
    %WEAK_TYPES = ();
    %TYPE_MAP = @types;
  }
  
  sub DESTROY {
    my %types = %{$_[0]};
    untie %TYPE_MAP;
    %TYPE_MAP = %types;
  }
  
  if ($Config{useithreads}) {
    my @types = %TYPE_MAP;
    tie %TYPE_MAP, __PACKAGE__;
    %TYPE_MAP = @types;
  }
  
  1;
MOO_HANDLEMOOSE__TYPEMAP

    $main::fatpacked{"Moo/Object.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MOO_OBJECT';
  package Moo::Object;
  
  use Moo::_strictures;
  use Carp ();
  
  our %NO_BUILD;
  our %NO_DEMOLISH;
  our $BUILD_MAKER;
  our $DEMOLISH_MAKER;
  
  sub new {
    my $class = shift;
    unless (exists $NO_DEMOLISH{$class}) {
      unless ($NO_DEMOLISH{$class} = !$class->can('DEMOLISH')) {
        ($DEMOLISH_MAKER ||= do {
          require Method::Generate::DemolishAll;
          Method::Generate::DemolishAll->new
        })->generate_method($class);
      }
    }
    my $proto = $class->BUILDARGS(@_);
    $NO_BUILD{$class} and
      return bless({}, $class);
    $NO_BUILD{$class} = !$class->can('BUILD') unless exists $NO_BUILD{$class};
    $NO_BUILD{$class}
      ? bless({}, $class)
      : bless({}, $class)->BUILDALL($proto);
  }
  
  # Inlined into Method::Generate::Constructor::_generate_args() - keep in sync
  sub BUILDARGS {
    my $class = shift;
    scalar @_ == 1
      ? ref $_[0] eq 'HASH'
        ? { %{ $_[0] } }
        : Carp::croak("Single parameters to new() must be a HASH ref"
            . " data => ". $_[0])
      : @_ % 2
        ? Carp::croak("The new() method for $class expects a hash reference or a"
            . " key/value list. You passed an odd number of arguments")
        : {@_}
    ;
  }
  
  sub BUILDALL {
    my $self = shift;
    $self->${\(($BUILD_MAKER ||= do {
      require Method::Generate::BuildAll;
      Method::Generate::BuildAll->new
    })->generate_method(ref($self)))}(@_);
  }
  
  sub DEMOLISHALL {
    my $self = shift;
    $self->${\(($DEMOLISH_MAKER ||= do {
      require Method::Generate::DemolishAll;
      Method::Generate::DemolishAll->new
    })->generate_method(ref($self)))}(@_);
  }
  
  sub does {
    return !!0
      unless ($INC{'Moose/Role.pm'} || $INC{'Role/Tiny.pm'});
    require Moo::Role;
    my $does = Moo::Role->can("does_role");
    { no warnings 'redefine'; *does = $does }
    goto &$does;
  }
  
  # duplicated in Moo::Role
  sub meta {
    require Moo::HandleMoose::FakeMetaClass;
    my $class = ref($_[0])||$_[0];
    bless({ name => $class }, 'Moo::HandleMoose::FakeMetaClass');
  }
  
  1;
MOO_OBJECT

    $main::fatpacked{"Moo/Role.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MOO_ROLE';
  package Moo::Role;
  
  use Moo::_strictures;
  use Moo::_Utils qw(
    _getglob
    _getstash
    _install_coderef
    _install_modifier
    _load_module
    _name_coderef
    _set_loaded
    _unimport_coderefs
  );
  use Sub::Defer ();
  use Sub::Quote qw(quote_sub sanitize_identifier);
  use Role::Tiny ();
  use Carp qw(croak);
  BEGIN { our @ISA = qw(Role::Tiny) }
  BEGIN {
    our @CARP_NOT = qw(
      Method::Generate::Accessor
      Method::Generate::Constructor
      Moo::sification
      Moo::_Utils
    );
  }
  
  our $VERSION = '2.002004';
  $VERSION = eval $VERSION;
  
  require Moo::sification;
  Moo::sification->import;
  
  BEGIN {
      *INFO = \%Role::Tiny::INFO;
      *APPLIED_TO = \%Role::Tiny::APPLIED_TO;
      *COMPOSED = \%Role::Tiny::COMPOSED;
      *ON_ROLE_CREATE = \@Role::Tiny::ON_ROLE_CREATE;
  }
  
  our %INFO;
  our %APPLIED_TO;
  our %APPLY_DEFAULTS;
  our %COMPOSED;
  our @ON_ROLE_CREATE;
  
  sub _install_tracked {
    my ($target, $name, $code) = @_;
    $INFO{$target}{exports}{$name} = $code;
    _install_coderef "${target}::${name}" => "Moo::Role::${name}" => $code;
  }
  
  sub import {
    my $target = caller;
    if ($Moo::MAKERS{$target} and $Moo::MAKERS{$target}{is_class}) {
      croak "Cannot import Moo::Role into a Moo class";
    }
    _set_loaded(caller);
    goto &Role::Tiny::import;
  }
  
  sub _install_subs {
    my ($me, $target) = @_;
    _install_tracked $target => has => sub {
      my $name_proto = shift;
      my @name_proto = ref $name_proto eq 'ARRAY' ? @$name_proto : $name_proto;
      if (@_ % 2 != 0) {
        croak("Invalid options for " . join(', ', map "'$_'", @name_proto)
          . " attribute(s): even number of arguments expected, got " . scalar @_)
      }
      my %spec = @_;
      foreach my $name (@name_proto) {
        my $spec_ref = @name_proto > 1 ? +{%spec} : \%spec;
        ($INFO{$target}{accessor_maker} ||= do {
          require Method::Generate::Accessor;
          Method::Generate::Accessor->new
        })->generate_method($target, $name, $spec_ref);
        push @{$INFO{$target}{attributes}||=[]}, $name, $spec_ref;
        $me->_maybe_reset_handlemoose($target);
      }
    };
    # install before/after/around subs
    foreach my $type (qw(before after around)) {
      _install_tracked $target => $type => sub {
        push @{$INFO{$target}{modifiers}||=[]}, [ $type => @_ ];
        $me->_maybe_reset_handlemoose($target);
      };
    }
    _install_tracked $target => requires => sub {
      push @{$INFO{$target}{requires}||=[]}, @_;
      $me->_maybe_reset_handlemoose($target);
    };
    _install_tracked $target => with => sub {
      $me->apply_roles_to_package($target, @_);
      $me->_maybe_reset_handlemoose($target);
    };
    *{_getglob("${target}::meta")} = $me->can('meta');
  }
  
  push @ON_ROLE_CREATE, sub {
    my $target = shift;
    if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
      Moo::HandleMoose::inject_fake_metaclass_for($target);
    }
  };
  
  # duplicate from Moo::Object
  sub meta {
    require Moo::HandleMoose::FakeMetaClass;
    my $class = ref($_[0])||$_[0];
    bless({ name => $class }, 'Moo::HandleMoose::FakeMetaClass');
  }
  
  sub unimport {
    my $target = caller;
    _unimport_coderefs($target, $INFO{$target});
  }
  
  sub _maybe_reset_handlemoose {
    my ($class, $target) = @_;
    if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
      Moo::HandleMoose::maybe_reinject_fake_metaclass_for($target);
    }
  }
  
  sub methods_provided_by {
    my ($self, $role) = @_;
    _load_module($role);
    $self->_inhale_if_moose($role);
    croak "${role} is not a Moo::Role" unless $self->is_role($role);
    return $self->SUPER::methods_provided_by($role);
  }
  
  sub is_role {
    my ($self, $role) = @_;
    $self->_inhale_if_moose($role);
    $self->SUPER::is_role($role);
  }
  
  sub _inhale_if_moose {
    my ($self, $role) = @_;
    my $meta;
    if (!$self->SUPER::is_role($role)
        and (
          $INC{"Moose.pm"}
          and $meta = Class::MOP::class_of($role)
          and ref $meta ne 'Moo::HandleMoose::FakeMetaClass'
          and $meta->isa('Moose::Meta::Role')
        )
        or (
          Mouse::Util->can('find_meta')
          and $meta = Mouse::Util::find_meta($role)
          and $meta->isa('Mouse::Meta::Role')
       )
    ) {
      my $is_mouse = $meta->isa('Mouse::Meta::Role');
      $INFO{$role}{methods} = {
        map +($_ => $role->can($_)),
          grep $role->can($_),
          grep !($is_mouse && $_ eq 'meta'),
          grep !$meta->get_method($_)->isa('Class::MOP::Method::Meta'),
            $meta->get_method_list
      };
      $APPLIED_TO{$role} = {
        map +($_->name => 1), $meta->calculate_all_roles
      };
      $INFO{$role}{requires} = [ $meta->get_required_method_list ];
      $INFO{$role}{attributes} = [
        map +($_ => do {
          my $attr = $meta->get_attribute($_);
          my $spec = { %{ $is_mouse ? $attr : $attr->original_options } };
  
          if ($spec->{isa}) {
  
            my $get_constraint = do {
              my $pkg = $is_mouse
                          ? 'Mouse::Util::TypeConstraints'
                          : 'Moose::Util::TypeConstraints';
              _load_module($pkg);
              $pkg->can('find_or_create_isa_type_constraint');
            };
  
            my $tc = $get_constraint->($spec->{isa});
            my $check = $tc->_compiled_type_constraint;
            my $tc_var = '$_check_for_'.sanitize_identifier($tc->name);
  
            $spec->{isa} = quote_sub
              qq{
                &${tc_var} or Carp::croak "Type constraint failed for \$_[0]"
              },
              { $tc_var => \$check },
              {
                package => $role,
              },
            ;
  
            if ($spec->{coerce}) {
  
               # Mouse has _compiled_type_coercion straight on the TC object
               $spec->{coerce} = $tc->${\(
                 $tc->can('coercion')||sub { $_[0] }
               )}->_compiled_type_coercion;
            }
          }
          $spec;
        }), $meta->get_attribute_list
      ];
      my $mods = $INFO{$role}{modifiers} = [];
      foreach my $type (qw(before after around)) {
        # Mouse pokes its own internals so we have to fall back to doing
        # the same thing in the absence of the Moose API method
        my $map = $meta->${\(
          $meta->can("get_${type}_method_modifiers_map")
          or sub { shift->{"${type}_method_modifiers"} }
        )};
        foreach my $method (keys %$map) {
          foreach my $mod (@{$map->{$method}}) {
            push @$mods, [ $type => $method => $mod ];
          }
        }
      }
      $INFO{$role}{inhaled_from_moose} = 1;
      $INFO{$role}{is_role} = 1;
    }
  }
  
  sub _maybe_make_accessors {
    my ($self, $target, $role) = @_;
    my $m;
    if ($INFO{$role} && $INFO{$role}{inhaled_from_moose}
        or $INC{"Moo.pm"}
        and $m = Moo->_accessor_maker_for($target)
        and ref($m) ne 'Method::Generate::Accessor') {
      $self->_make_accessors($target, $role);
    }
  }
  
  sub _make_accessors_if_moose {
    my ($self, $target, $role) = @_;
    if ($INFO{$role} && $INFO{$role}{inhaled_from_moose}) {
      $self->_make_accessors($target, $role);
    }
  }
  
  sub _make_accessors {
    my ($self, $target, $role) = @_;
    my $acc_gen = ($Moo::MAKERS{$target}{accessor} ||= do {
      require Method::Generate::Accessor;
      Method::Generate::Accessor->new
    });
    my $con_gen = $Moo::MAKERS{$target}{constructor};
    my @attrs = @{$INFO{$role}{attributes}||[]};
    while (my ($name, $spec) = splice @attrs, 0, 2) {
      # needed to ensure we got an index for an arrayref based generator
      if ($con_gen) {
        $spec = $con_gen->all_attribute_specs->{$name};
      }
      $acc_gen->generate_method($target, $name, $spec);
    }
  }
  
  sub _undefer_subs {
    my ($self, $target, $role) = @_;
    Sub::Defer::undefer_package($role);
  }
  
  sub role_application_steps {
    qw(_handle_constructor _undefer_subs _maybe_make_accessors),
      $_[0]->SUPER::role_application_steps;
  }
  
  sub apply_roles_to_package {
    my ($me, $to, @roles) = @_;
    foreach my $role (@roles) {
      _load_module($role);
      $me->_inhale_if_moose($role);
      croak "${role} is not a Moo::Role" unless $me->is_role($role);
    }
    $me->SUPER::apply_roles_to_package($to, @roles);
  }
  
  sub apply_single_role_to_package {
    my ($me, $to, $role) = @_;
    _load_module($role);
    $me->_inhale_if_moose($role);
    croak "${role} is not a Moo::Role" unless $me->is_role($role);
    $me->SUPER::apply_single_role_to_package($to, $role);
  }
  
  sub create_class_with_roles {
    my ($me, $superclass, @roles) = @_;
  
    my ($new_name, $compose_name) = $me->_composite_name($superclass, @roles);
  
    return $new_name if $COMPOSED{class}{$new_name};
  
    foreach my $role (@roles) {
      _load_module($role);
      $me->_inhale_if_moose($role);
      croak "${role} is not a Moo::Role" unless $me->is_role($role);
    }
  
    my $m;
    if ($INC{"Moo.pm"}
        and $m = Moo->_accessor_maker_for($superclass)
        and ref($m) ne 'Method::Generate::Accessor') {
      # old fashioned way time.
      *{_getglob("${new_name}::ISA")} = [ $superclass ];
      $Moo::MAKERS{$new_name} = {is_class => 1};
      $me->apply_roles_to_package($new_name, @roles);
    }
    else {
      $me->SUPER::create_class_with_roles($superclass, @roles);
      $Moo::MAKERS{$new_name} = {is_class => 1};
      $me->_handle_constructor($new_name, $_) for @roles;
    }
  
    if ($INC{'Moo/HandleMoose.pm'} && !$Moo::sification::disabled) {
      Moo::HandleMoose::inject_fake_metaclass_for($new_name);
    }
    _set_loaded($new_name, (caller)[1]);
    return $new_name;
  }
  
  sub apply_roles_to_object {
    my ($me, $object, @roles) = @_;
    my $new = $me->SUPER::apply_roles_to_object($object, @roles);
    my $class = ref $new;
    _set_loaded($class, (caller)[1]);
  
    my $apply_defaults = exists $APPLY_DEFAULTS{$class} ? $APPLY_DEFAULTS{$class}
      : $APPLY_DEFAULTS{$class} = do {
      my %attrs = map { @{$INFO{$_}{attributes}||[]} } @roles;
  
      if ($INC{'Moo.pm'}
          and keys %attrs
          and my $con_gen = Moo->_constructor_maker_for($class)
          and my $m = Moo->_accessor_maker_for($class)) {
        require Sub::Quote;
  
        my $specs = $con_gen->all_attribute_specs;
  
        my %captures;
        my $code = join('',
          "no warnings 'void';\n",
          ( map {
            my $name = $_;
            my $spec = $specs->{$name};
            if ($m->has_eager_default($name, $spec)) {
              my ($has, $has_cap)
                = $m->generate_simple_has('$_[0]', $name, $spec);
              my ($set, $pop_cap)
                = $m->generate_use_default('$_[0]', $name, $spec, $has);
  
              @captures{keys %$has_cap, keys %$pop_cap}
                = (values %$has_cap, values %$pop_cap);
              "($set),";
            }
            else {
              ();
            }
          } sort keys %attrs ),
        );
        Sub::Quote::quote_sub(
          "${class}::_apply_defaults",
          $code,
          \%captures,
          {
            package => $class,
            no_install => 1,
          }
        );
      }
      else {
        0;
      }
    };
    if ($apply_defaults) {
      local $Carp::Internal{+__PACKAGE__} = 1;
      local $Carp::Internal{$class} = 1;
      $new->$apply_defaults;
    }
    return $new;
  }
  
  sub _composable_package_for {
    my ($self, $role) = @_;
    my $composed_name = 'Role::Tiny::_COMPOSABLE::'.$role;
    return $composed_name if $COMPOSED{role}{$composed_name};
    $self->_make_accessors_if_moose($composed_name, $role);
    $self->SUPER::_composable_package_for($role);
  }
  
  sub _install_single_modifier {
    my ($me, @args) = @_;
    _install_modifier(@args);
  }
  
  sub _install_does {
      my ($me, $to) = @_;
  
      # If Role::Tiny actually installed the DOES, give it a name
      my $new = $me->SUPER::_install_does($to) or return;
      return _name_coderef("${to}::DOES", $new);
  }
  
  sub does_role {
    my ($proto, $role) = @_;
    return 1
      if Role::Tiny::does_role($proto, $role);
    my $meta;
    if ($INC{'Moose.pm'}
        and $meta = Class::MOP::class_of($proto)
        and ref $meta ne 'Moo::HandleMoose::FakeMetaClass'
        and $meta->can('does_role')
    ) {
      return $meta->does_role($role);
    }
    return 0;
  }
  
  sub _handle_constructor {
    my ($me, $to, $role) = @_;
    my $attr_info = $INFO{$role} && $INFO{$role}{attributes};
    return unless $attr_info && @$attr_info;
    my $info = $INFO{$to};
    my $con = $INC{"Moo.pm"} && Moo->_constructor_maker_for($to);
    my %existing
      = $info ? @{$info->{attributes} || []}
      : $con  ? %{$con->all_attribute_specs || {}}
      : ();
  
    my @attr_info =
      map { @{$attr_info}[$_, $_+1] }
      grep { ! $existing{$attr_info->[$_]} }
      map { 2 * $_ } 0..@$attr_info/2-1;
  
    if ($info) {
      push @{$info->{attributes}||=[]}, @attr_info;
    }
    elsif ($con) {
      # shallow copy of the specs since the constructor will assign an index
      $con->register_attribute_specs(map ref() ? { %$_ } : $_, @attr_info);
    }
  }
  
  1;
  __END__
  
  =head1 NAME
  
  Moo::Role - Minimal Object Orientation support for Roles
  
  =head1 SYNOPSIS
  
    package My::Role;
  
    use Moo::Role;
    use strictures 2;
  
    sub foo { ... }
  
    sub bar { ... }
  
    has baz => (
      is => 'ro',
    );
  
    1;
  
  And elsewhere:
  
    package Some::Class;
  
    use Moo;
    use strictures 2;
  
    # bar gets imported, but not foo
    with('My::Role');
  
    sub foo { ... }
  
    1;
  
  =head1 DESCRIPTION
  
  C<Moo::Role> builds upon L<Role::Tiny>, so look there for most of the
  documentation on how this works.  The main addition here is extra bits to make
  the roles more "Moosey;" which is to say, it adds L</has>.
  
  =head1 IMPORTED SUBROUTINES
  
  See L<Role::Tiny/IMPORTED SUBROUTINES> for all the other subroutines that are
  imported by this module.
  
  =head2 has
  
    has attr => (
      is => 'ro',
    );
  
  Declares an attribute for the class to be composed into.  See
  L<Moo/has> for all options.
  
  =head1 CLEANING UP IMPORTS
  
  L<Moo::Role> cleans up its own imported methods and any imports
  declared before the C<use Moo::Role> statement automatically.
  Anything imported after C<use Moo::Role> will be composed into
  consuming packages.  A package that consumes this role:
  
    package My::Role::ID;
  
    use Digest::MD5 qw(md5_hex);
    use Moo::Role;
    use Digest::SHA qw(sha1_hex);
  
    requires 'name';
  
    sub as_md5  { my ($self) = @_; return md5_hex($self->name);  }
    sub as_sha1 { my ($self) = @_; return sha1_hex($self->name); }
  
    1;
  
  ..will now have a C<< $self->sha1_hex() >> method available to it
  that probably does not do what you expect.  On the other hand, a call
  to C<< $self->md5_hex() >> will die with the helpful error message:
  C<Can't locate object method "md5_hex">.
  
  See L<Moo/"CLEANING UP IMPORTS"> for more details.
  
  =head1 SUPPORT
  
  See L<Moo> for support and contact information.
  
  =head1 AUTHORS
  
  See L<Moo> for authors.
  
  =head1 COPYRIGHT AND LICENSE
  
  See L<Moo> for the copyright and license.
  
  =cut
MOO_ROLE

    $main::fatpacked{"Moo/_Utils.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MOO__UTILS';
  package Moo::_Utils;
  
  no warnings 'once'; # guard against -w
  
  sub _getglob { \*{$_[0]} }
  sub _getstash { \%{"$_[0]::"} }
  
  use Moo::_strictures;
  
  BEGIN {
    my ($su, $sn);
    $su = $INC{'Sub/Util.pm'} && defined &Sub::Util::set_subname
      or $sn = $INC{'Sub/Name.pm'}
      or $su = eval { require Sub::Util; } && defined &Sub::Util::set_subname
      or $sn = eval { require Sub::Name; };
  
    *_subname = $su ? \&Sub::Util::set_subname
              : $sn ? \&Sub::Name::subname
              : sub { $_[1] };
    *_CAN_SUBNAME = ($su || $sn) ? sub(){1} : sub(){0};
  }
  
  use Module::Runtime qw(use_package_optimistically module_notional_filename);
  
  use Devel::GlobalDestruction ();
  use Exporter qw(import);
  use Config;
  use Carp qw(croak);
  
  our @EXPORT = qw(
      _getglob _install_modifier _load_module _maybe_load_module
      _getstash _install_coderef _name_coderef
      _unimport_coderefs _set_loaded
  );
  
  sub _install_modifier {
    my ($into, $type, $name, $code) = @_;
  
    if (my $to_modify = $into->can($name)) { # CMM will throw for us if not
      require Sub::Defer;
      Sub::Defer::undefer_sub($to_modify);
    }
  
    require Class::Method::Modifiers;
    Class::Method::Modifiers::install_modifier(@_);
  }
  
  sub _load_module {
    my $module = $_[0];
    my $file = eval { module_notional_filename($module) } or croak $@;
    use_package_optimistically($module);
    return 1
      if $INC{$file};
    my $error = $@ || "Can't locate $file";
  
    # can't just ->can('can') because a sub-package Foo::Bar::Baz
    # creates a 'Baz::' key in Foo::Bar's symbol table
    my $stash = _getstash($module)||{};
    return 1 if grep +(!ref($_) and *$_{CODE}), values %$stash;
    return 1
      if $INC{"Moose.pm"} && Class::MOP::class_of($module)
      or Mouse::Util->can('find_meta') && Mouse::Util::find_meta($module);
    croak $error;
  }
  
  our %MAYBE_LOADED;
  sub _maybe_load_module {
    my $module = $_[0];
    return $MAYBE_LOADED{$module}
      if exists $MAYBE_LOADED{$module};
    if(! eval { use_package_optimistically($module) }) {
      warn "$module exists but failed to load with error: $@";
    }
    elsif ( $INC{module_notional_filename($module)} ) {
      return $MAYBE_LOADED{$module} = 1;
    }
    return $MAYBE_LOADED{$module} = 0;
  }
  
  sub _set_loaded {
    $INC{Module::Runtime::module_notional_filename($_[0])} ||= $_[1];
  }
  
  sub _install_coderef {
    my ($glob, $code) = (_getglob($_[0]), _name_coderef(@_));
    no warnings 'redefine';
    if (*{$glob}{CODE}) {
      *{$glob} = $code;
    }
    # perl will sometimes warn about mismatched prototypes coming from the
    # inheritance cache, so disable them if we aren't redefining a sub
    else {
      no warnings 'prototype';
      *{$glob} = $code;
    }
  }
  
  sub _name_coderef {
    shift if @_ > 2; # three args is (target, name, sub)
    _CAN_SUBNAME ? _subname(@_) : $_[1];
  }
  
  sub _unimport_coderefs {
    my ($target, $info) = @_;
    return unless $info and my $exports = $info->{exports};
    my %rev = reverse %$exports;
    my $stash = _getstash($target);
    foreach my $name (keys %$exports) {
      if ($stash->{$name} and defined(&{$stash->{$name}})) {
        if ($rev{$target->can($name)}) {
          my $old = delete $stash->{$name};
          my $full_name = join('::',$target,$name);
          # Copy everything except the code slot back into place (e.g. $has)
          foreach my $type (qw(SCALAR HASH ARRAY IO)) {
            next unless defined(*{$old}{$type});
            no strict 'refs';
            *$full_name = *{$old}{$type};
          }
        }
      }
    }
  }
  
  if ($Config{useithreads}) {
    require Moo::HandleMoose::_TypeMap;
  }
  
  1;
MOO__UTILS

    $main::fatpacked{"Moo/_mro.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MOO__MRO';
  package Moo::_mro;
  use Moo::_strictures;
  
  if ("$]" >= 5.010_000) {
    require mro;
  } else {
    require MRO::Compat;
  }
  
  1;
MOO__MRO

    $main::fatpacked{"Moo/_strictures.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MOO__STRICTURES';
  package Moo::_strictures;
  use strict;
  use warnings;
  
  sub import {
    if ($ENV{MOO_FATAL_WARNINGS}) {
      require strictures;
      strictures->VERSION(2);
      @_ = ('strictures');
      goto &strictures::import;
    }
    else {
      strict->import;
      warnings->import;
    }
  }
  
  1;
MOO__STRICTURES

    $main::fatpacked{"Moo/sification.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'MOO_SIFICATION';
  package Moo::sification;
  
  use Moo::_strictures;
  no warnings 'once';
  use Devel::GlobalDestruction qw(in_global_destruction);
  use Carp qw(croak);
  BEGIN { our @CARP_NOT = qw(Moo::HandleMoose) }
  
  sub unimport {
    croak "Can't disable Moo::sification after inflation has been done"
      if $Moo::HandleMoose::SETUP_DONE;
    our $disabled = 1;
  }
  
  sub Moo::HandleMoose::AuthorityHack::DESTROY {
    unless (our $disabled or in_global_destruction) {
      require Moo::HandleMoose;
      Moo::HandleMoose->import;
    }
  }
  
  sub import {
    return
      if our $setup_done;
    if ($INC{"Moose.pm"}) {
      require Moo::HandleMoose;
      Moo::HandleMoose->import;
    } else {
      $Moose::AUTHORITY = bless({}, 'Moo::HandleMoose::AuthorityHack');
    }
    $setup_done = 1;
  }
  
  1;
MOO_SIFICATION

    $main::fatpacked{"Net/HTTP.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'NET_HTTP';
  package Net::HTTP;
  
  use strict;
  use vars qw($VERSION @ISA $SOCKET_CLASS);
  
  $VERSION = "6.09";
  $VERSION = eval $VERSION;
  
  unless ($SOCKET_CLASS) {
      # Try several, in order of capability and preference
      if (eval { require IO::Socket::IP }) {
         $SOCKET_CLASS = "IO::Socket::IP";    # IPv4+IPv6
      } elsif (eval { require IO::Socket::INET6 }) {
         $SOCKET_CLASS = "IO::Socket::INET6"; # IPv4+IPv6
      } elsif (eval { require IO::Socket::INET }) {
         $SOCKET_CLASS = "IO::Socket::INET";  # IPv4 only
      } else {
         require IO::Socket;
         $SOCKET_CLASS = "IO::Socket::INET";
      }
  }
  require Net::HTTP::Methods;
  require Carp;
  
  @ISA = ($SOCKET_CLASS, 'Net::HTTP::Methods');
  
  sub new {
      my $class = shift;
      Carp::croak("No Host option provided") unless @_;
      $class->SUPER::new(@_);
  }
  
  sub configure {
      my($self, $cnf) = @_;
      $self->http_configure($cnf);
  }
  
  sub http_connect {
      my($self, $cnf) = @_;
      $self->SUPER::configure($cnf);
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Net::HTTP - Low-level HTTP connection (client)
  
  =head1 SYNOPSIS
  
   use Net::HTTP;
   my $s = Net::HTTP->new(Host => "www.perl.com") || die $@;
   $s->write_request(GET => "/", 'User-Agent' => "Mozilla/5.0");
   my($code, $mess, %h) = $s->read_response_headers;
  
   while (1) {
      my $buf;
      my $n = $s->read_entity_body($buf, 1024);
      die "read failed: $!" unless defined $n;
      last unless $n;
      print $buf;
   }
  
  =head1 DESCRIPTION
  
  The C<Net::HTTP> class is a low-level HTTP client.  An instance of the
  C<Net::HTTP> class represents a connection to an HTTP server.  The
  HTTP protocol is described in RFC 2616.  The C<Net::HTTP> class
  supports C<HTTP/1.0> and C<HTTP/1.1>.
  
  C<Net::HTTP> is a sub-class of one of C<IO::Socket::IP> (IPv6+IPv4),
  C<IO::Socket::INET6> (IPv6+IPv4), or C<IO::Socket::INET> (IPv4 only).  
  You can mix the methods described below with reading and writing from the
  socket directly.  This is not necessary a good idea, unless you know what
  you are doing.
  
  The following methods are provided (in addition to those of
  C<IO::Socket::INET>):
  
  =over
  
  =item $s = Net::HTTP->new( %options )
  
  The C<Net::HTTP> constructor method takes the same options as
  C<IO::Socket::INET>'s as well as these:
  
    Host:            Initial host attribute value
    KeepAlive:       Initial keep_alive attribute value
    SendTE:          Initial send_te attribute_value
    HTTPVersion:     Initial http_version attribute value
    PeerHTTPVersion: Initial peer_http_version attribute value
    MaxLineLength:   Initial max_line_length attribute value
    MaxHeaderLines:  Initial max_header_lines attribute value
  
  The C<Host> option is also the default for C<IO::Socket::INET>'s
  C<PeerAddr>.  The C<PeerPort> defaults to 80 if not provided.
  The C<PeerPort> specification can also be embedded in the C<PeerAddr>
  by preceding it with a ":", and closing the IPv6 address on brackets "[]" if
  necessary: "192.0.2.1:80","[2001:db8::1]:80","any.example.com:80".
  
  The C<Listen> option provided by C<IO::Socket::INET>'s constructor
  method is not allowed.
  
  If unable to connect to the given HTTP server then the constructor
  returns C<undef> and $@ contains the reason.  After a successful
  connect, a C<Net:HTTP> object is returned.
  
  =item $s->host
  
  Get/set the default value of the C<Host> header to send.  The $host
  must not be set to an empty string (or C<undef>) for HTTP/1.1.
  
  =item $s->keep_alive
  
  Get/set the I<keep-alive> value.  If this value is TRUE then the
  request will be sent with headers indicating that the server should try
  to keep the connection open so that multiple requests can be sent.
  
  The actual headers set will depend on the value of the C<http_version>
  and C<peer_http_version> attributes.
  
  =item $s->send_te
  
  Get/set the a value indicating if the request will be sent with a "TE"
  header to indicate the transfer encodings that the server can choose to
  use.  The list of encodings announced as accepted by this client depends
  on availability of the following modules: C<Compress::Raw::Zlib> for
  I<deflate>, and C<IO::Compress::Gunzip> for I<gzip>.
  
  =item $s->http_version
  
  Get/set the HTTP version number that this client should announce.
  This value can only be set to "1.0" or "1.1".  The default is "1.1".
  
  =item $s->peer_http_version
  
  Get/set the protocol version number of our peer.  This value will
  initially be "1.0", but will be updated by a successful
  read_response_headers() method call.
  
  =item $s->max_line_length
  
  Get/set a limit on the length of response line and response header
  lines.  The default is 8192.  A value of 0 means no limit.
  
  =item $s->max_header_length
  
  Get/set a limit on the number of header lines that a response can
  have.  The default is 128.  A value of 0 means no limit.
  
  =item $s->format_request($method, $uri, %headers, [$content])
  
  Format a request message and return it as a string.  If the headers do
  not include a C<Host> header, then a header is inserted with the value
  of the C<host> attribute.  Headers like C<Connection> and
  C<Keep-Alive> might also be added depending on the status of the
  C<keep_alive> attribute.
  
  If $content is given (and it is non-empty), then a C<Content-Length>
  header is automatically added unless it was already present.
  
  =item $s->write_request($method, $uri, %headers, [$content])
  
  Format and send a request message.  Arguments are the same as for
  format_request().  Returns true if successful.
  
  =item $s->format_chunk( $data )
  
  Returns the string to be written for the given chunk of data.  
  
  =item $s->write_chunk($data)
  
  Will write a new chunk of request entity body data.  This method
  should only be used if the C<Transfer-Encoding> header with a value of
  C<chunked> was sent in the request.  Note, writing zero-length data is
  a no-op.  Use the write_chunk_eof() method to signal end of entity
  body data.
  
  Returns true if successful.
  
  =item $s->format_chunk_eof( %trailers )
  
  Returns the string to be written for signaling EOF when a
  C<Transfer-Encoding> of C<chunked> is used.
  
  =item $s->write_chunk_eof( %trailers )
  
  Will write eof marker for chunked data and optional trailers.  Note
  that trailers should not really be used unless is was signaled
  with a C<Trailer> header.
  
  Returns true if successful.
  
  =item ($code, $mess, %headers) = $s->read_response_headers( %opts )
  
  Read response headers from server and return it.  The $code is the 3
  digit HTTP status code (see L<HTTP::Status>) and $mess is the textual
  message that came with it.  Headers are then returned as key/value
  pairs.  Since key letter casing is not normalized and the same key can
  even occur multiple times, assigning these values directly to a hash
  is not wise.  Only the $code is returned if this method is called in
  scalar context.
  
  As a side effect this method updates the 'peer_http_version'
  attribute.
  
  Options might be passed in as key/value pairs.  There are currently
  only two options supported; C<laxed> and C<junk_out>.
  
  The C<laxed> option will make read_response_headers() more forgiving
  towards servers that have not learned how to speak HTTP properly.  The
  C<laxed> option is a boolean flag, and is enabled by passing in a TRUE
  value.  The C<junk_out> option can be used to capture bad header lines
  when C<laxed> is enabled.  The value should be an array reference.
  Bad header lines will be pushed onto the array.
  
  The C<laxed> option must be specified in order to communicate with
  pre-HTTP/1.0 servers that don't describe the response outcome or the
  data they send back with a header block.  For these servers
  peer_http_version is set to "0.9" and this method returns (200,
  "Assumed OK").
  
  The method will raise an exception (die) if the server does not speak
  proper HTTP or if the C<max_line_length> or C<max_header_length>
  limits are reached.  If the C<laxed> option is turned on and
  C<max_line_length> and C<max_header_length> checks are turned off,
  then no exception will be raised and this method will always
  return a response code.
  
  =item $n = $s->read_entity_body($buf, $size);
  
  Reads chunks of the entity body content.  Basically the same interface
  as for read() and sysread(), but the buffer offset argument is not
  supported yet.  This method should only be called after a successful
  read_response_headers() call.
  
  The return value will be C<undef> on read errors, 0 on EOF, -1 if no data
  could be returned this time, otherwise the number of bytes assigned
  to $buf.  The $buf is set to "" when the return value is -1.
  
  You normally want to retry this call if this function returns either
  -1 or C<undef> with C<$!> as EINTR or EAGAIN (see L<Errno>).  EINTR
  can happen if the application catches signals and EAGAIN can happen if
  you made the socket non-blocking.
  
  This method will raise exceptions (die) if the server does not speak
  proper HTTP.  This can only happen when reading chunked data.
  
  =item %headers = $s->get_trailers
  
  After read_entity_body() has returned 0 to indicate end of the entity
  body, you might call this method to pick up any trailers.
  
  =item $s->_rbuf
  
  Get/set the read buffer content.  The read_response_headers() and
  read_entity_body() methods use an internal buffer which they will look
  for data before they actually sysread more from the socket itself.  If
  they read too much, the remaining data will be left in this buffer.
  
  =item $s->_rbuf_length
  
  Returns the number of bytes in the read buffer.  This should always be
  the same as:
  
      length($s->_rbuf)
  
  but might be more efficient.
  
  =back
  
  =head1 SUBCLASSING
  
  The read_response_headers() and read_entity_body() will invoke the
  sysread() method when they need more data.  Subclasses might want to
  override this method to control how reading takes place.
  
  The object itself is a glob.  Subclasses should avoid using hash key
  names prefixed with C<http_> and C<io_>.
  
  =head1 SEE ALSO
  
  L<LWP>, L<IO::Socket::INET>, L<Net::HTTP::NB>
  
  =head1 COPYRIGHT
  
  Copyright 2001-2003 Gisle Aas.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =cut
NET_HTTP

    $main::fatpacked{"Net/HTTP/Methods.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'NET_HTTP_METHODS';
  package Net::HTTP::Methods;
  
  require 5.005;  # 4-arg substr
  
  use strict;
  use vars qw($VERSION);
  use URI;
  
  $VERSION = "6.09";
  $VERSION = eval $VERSION;
  
  my $CRLF = "\015\012";   # "\r\n" is not portable
  
  *_bytes = defined(&utf8::downgrade) ?
      sub {
          unless (utf8::downgrade($_[0], 1)) {
              require Carp;
              Carp::croak("Wide character in HTTP request (bytes required)");
          }
          return $_[0];
      }
      :
      sub {
          return $_[0];
      };
  
  
  sub new {
      my $class = shift;
      unshift(@_, "Host") if @_ == 1;
      my %cnf = @_;
      require Symbol;
      my $self = bless Symbol::gensym(), $class;
      return $self->http_configure(\%cnf);
  }
  
  sub http_configure {
      my($self, $cnf) = @_;
  
      die "Listen option not allowed" if $cnf->{Listen};
      my $explicit_host = (exists $cnf->{Host});
      my $host = delete $cnf->{Host};
      my $peer = $cnf->{PeerAddr} || $cnf->{PeerHost};
      if (!$peer) {
  	die "No Host option provided" unless $host;
  	$cnf->{PeerAddr} = $peer = $host;
      }
  
      # CONNECTIONS
      # PREFER: port number from PeerAddr, then PeerPort, then http_default_port
      my $peer_uri = URI->new("http://$peer");
      $cnf->{"PeerPort"} =  $peer_uri->_port || $cnf->{PeerPort} ||  $self->http_default_port;
      $cnf->{"PeerAddr"} = $peer_uri->host;
  
      # HOST header:
      # If specified but blank, ignore.
      # If specified with a value, add the port number
      # If not specified, set to PeerAddr and port number
      # ALWAYS: If IPv6 address, use [brackets]  (thanks to the URI package)
      # ALWAYS: omit port number if http_default_port
      if (($host) || (! $explicit_host)) {
          my $uri =  ($explicit_host) ? URI->new("http://$host") : $peer_uri->clone;
          if (!$uri->_port) {
              # Always use *our*  $self->http_default_port  instead of URI's  (Covers HTTP, HTTPS)
              $uri->port( $cnf->{PeerPort} ||  $self->http_default_port);
          }
          my $host_port = $uri->host_port;               # Returns host:port or [ipv6]:port
          my $remove = ":" . $self->http_default_port;   # we want to remove the default port number
          if (substr($host_port,0-length($remove)) eq $remove) {
              substr($host_port,0-length($remove)) = "";
          }
          $host = $host_port;
      }
  
      $cnf->{Proto} = 'tcp';
  
      my $keep_alive = delete $cnf->{KeepAlive};
      my $http_version = delete $cnf->{HTTPVersion};
      $http_version = "1.1" unless defined $http_version;
      my $peer_http_version = delete $cnf->{PeerHTTPVersion};
      $peer_http_version = "1.0" unless defined $peer_http_version;
      my $send_te = delete $cnf->{SendTE};
      my $max_line_length = delete $cnf->{MaxLineLength};
      $max_line_length = 8*1024 unless defined $max_line_length;
      my $max_header_lines = delete $cnf->{MaxHeaderLines};
      $max_header_lines = 128 unless defined $max_header_lines;
  
      return undef unless $self->http_connect($cnf);
  
      $self->host($host);
      $self->keep_alive($keep_alive);
      $self->send_te($send_te);
      $self->http_version($http_version);
      $self->peer_http_version($peer_http_version);
      $self->max_line_length($max_line_length);
      $self->max_header_lines($max_header_lines);
  
      ${*$self}{'http_buf'} = "";
  
      return $self;
  }
  
  sub http_default_port {
      80;
  }
  
  # set up property accessors
  for my $method (qw(host keep_alive send_te max_line_length max_header_lines peer_http_version)) {
      my $prop_name = "http_" . $method;
      no strict 'refs';
      *$method = sub {
  	my $self = shift;
  	my $old = ${*$self}{$prop_name};
  	${*$self}{$prop_name} = shift if @_;
  	return $old;
      };
  }
  
  # we want this one to be a bit smarter
  sub http_version {
      my $self = shift;
      my $old = ${*$self}{'http_version'};
      if (@_) {
  	my $v = shift;
  	$v = "1.0" if $v eq "1";  # float
  	unless ($v eq "1.0" or $v eq "1.1") {
  	    require Carp;
  	    Carp::croak("Unsupported HTTP version '$v'");
  	}
  	${*$self}{'http_version'} = $v;
      }
      $old;
  }
  
  sub format_request {
      my $self = shift;
      my $method = shift;
      my $uri = shift;
  
      my $content = (@_ % 2) ? pop : "";
  
      for ($method, $uri) {
  	require Carp;
  	Carp::croak("Bad method or uri") if /\s/ || !length;
      }
  
      push(@{${*$self}{'http_request_method'}}, $method);
      my $ver = ${*$self}{'http_version'};
      my $peer_ver = ${*$self}{'http_peer_http_version'} || "1.0";
  
      my @h;
      my @connection;
      my %given = (host => 0, "content-length" => 0, "te" => 0);
      while (@_) {
  	my($k, $v) = splice(@_, 0, 2);
  	my $lc_k = lc($k);
  	if ($lc_k eq "connection") {
  	    $v =~ s/^\s+//;
  	    $v =~ s/\s+$//;
  	    push(@connection, split(/\s*,\s*/, $v));
  	    next;
  	}
  	if (exists $given{$lc_k}) {
  	    $given{$lc_k}++;
  	}
  	push(@h, "$k: $v");
      }
  
      if (length($content) && !$given{'content-length'}) {
  	push(@h, "Content-Length: " . length($content));
      }
  
      my @h2;
      if ($given{te}) {
  	push(@connection, "TE") unless grep lc($_) eq "te", @connection;
      }
      elsif ($self->send_te && gunzip_ok()) {
  	# gzip is less wanted since the IO::Uncompress::Gunzip interface for
  	# it does not really allow chunked decoding to take place easily.
  	push(@h2, "TE: deflate,gzip;q=0.3");
  	push(@connection, "TE");
      }
  
      unless (grep lc($_) eq "close", @connection) {
  	if ($self->keep_alive) {
  	    if ($peer_ver eq "1.0") {
  		# from looking at Netscape's headers
  		push(@h2, "Keep-Alive: 300");
  		unshift(@connection, "Keep-Alive");
  	    }
  	}
  	else {
  	    push(@connection, "close") if $ver ge "1.1";
  	}
      }
      push(@h2, "Connection: " . join(", ", @connection)) if @connection;
      unless ($given{host}) {
  	my $h = ${*$self}{'http_host'};
  	push(@h2, "Host: $h") if $h;
      }
  
      return _bytes(join($CRLF, "$method $uri HTTP/$ver", @h2, @h, "", $content));
  }
  
  
  sub write_request {
      my $self = shift;
      $self->print($self->format_request(@_));
  }
  
  sub format_chunk {
      my $self = shift;
      return $_[0] unless defined($_[0]) && length($_[0]);
      return _bytes(sprintf("%x", length($_[0])) . $CRLF . $_[0] . $CRLF);
  }
  
  sub write_chunk {
      my $self = shift;
      return 1 unless defined($_[0]) && length($_[0]);
      $self->print(_bytes(sprintf("%x", length($_[0])) . $CRLF . $_[0] . $CRLF));
  }
  
  sub format_chunk_eof {
      my $self = shift;
      my @h;
      while (@_) {
  	push(@h, sprintf "%s: %s$CRLF", splice(@_, 0, 2));
      }
      return _bytes(join("", "0$CRLF", @h, $CRLF));
  }
  
  sub write_chunk_eof {
      my $self = shift;
      $self->print($self->format_chunk_eof(@_));
  }
  
  
  sub my_read {
      die if @_ > 3;
      my $self = shift;
      my $len = $_[1];
      for (${*$self}{'http_buf'}) {
  	if (length) {
  	    $_[0] = substr($_, 0, $len, "");
  	    return length($_[0]);
  	}
  	else {
  	    die "read timeout" unless $self->can_read;
  	    return $self->sysread($_[0], $len);
  	}
      }
  }
  
  
  sub my_readline {
      my $self = shift;
      my $what = shift;
      for (${*$self}{'http_buf'}) {
  	my $max_line_length = ${*$self}{'http_max_line_length'};
  	my $pos;
  	while (1) {
  	    # find line ending
  	    $pos = index($_, "\012");
  	    last if $pos >= 0;
  	    die "$what line too long (limit is $max_line_length)"
  		if $max_line_length && length($_) > $max_line_length;
  
  	    # need to read more data to find a line ending
              my $new_bytes = 0;
  
            READ:
              {   # wait until bytes start arriving
                  $self->can_read
                       or die "read timeout";
  
                  # consume all incoming bytes
                  while(1) {
                      my $bytes_read = $self->sysread($_, 1024, length);
                      if(defined $bytes_read) {
                          $new_bytes += $bytes_read;
                          last if $bytes_read < 1024;
                      }
                      elsif($!{EINTR} || $!{EAGAIN} || $!{EWOULDBLOCK}) {
                          redo READ;
                      }
                      else {
                          # if we have already accumulated some data let's at
                          # least return that as a line
                          length or die "$what read failed: $!";
                          last;
                      }
                  }
  
                  # no line-ending, no new bytes
                  return length($_) ? substr($_, 0, length($_), "") : undef
                      if $new_bytes==0;
              }
  	}
  	die "$what line too long ($pos; limit is $max_line_length)"
  	    if $max_line_length && $pos > $max_line_length;
  
  	my $line = substr($_, 0, $pos+1, "");
  	$line =~ s/(\015?\012)\z// || die "Assert";
  	return wantarray ? ($line, $1) : $line;
      }
  }
  
  
  sub can_read {
      my $self = shift;
      return 1 unless defined(fileno($self));
      return 1 if $self->isa('IO::Socket::SSL') && $self->pending;
  
      # With no timeout, wait forever.  An explicit timeout of 0 can be
      # used to just check if the socket is readable without waiting.
      my $timeout = @_ ? shift : (${*$self}{io_socket_timeout} || undef);
  
      my $fbits = '';
      vec($fbits, fileno($self), 1) = 1;
    SELECT:
      {
          my $before;
          $before = time if $timeout;
          my $nfound = select($fbits, undef, undef, $timeout);
          if ($nfound < 0) {
              if ($!{EINTR} || $!{EAGAIN}) {
                  # don't really think EAGAIN can happen here
                  if ($timeout) {
                      $timeout -= time - $before;
                      $timeout = 0 if $timeout < 0;
                  }
                  redo SELECT;
              }
              die "select failed: $!";
          }
          return $nfound > 0;
      }
  }
  
  
  sub _rbuf {
      my $self = shift;
      if (@_) {
  	for (${*$self}{'http_buf'}) {
  	    my $old;
  	    $old = $_ if defined wantarray;
  	    $_ = shift;
  	    return $old;
  	}
      }
      else {
  	return ${*$self}{'http_buf'};
      }
  }
  
  sub _rbuf_length {
      my $self = shift;
      return length ${*$self}{'http_buf'};
  }
  
  
  sub _read_header_lines {
      my $self = shift;
      my $junk_out = shift;
  
      my @headers;
      my $line_count = 0;
      my $max_header_lines = ${*$self}{'http_max_header_lines'};
      while (my $line = my_readline($self, 'Header')) {
  	if ($line =~ /^(\S+?)\s*:\s*(.*)/s) {
  	    push(@headers, $1, $2);
  	}
  	elsif (@headers && $line =~ s/^\s+//) {
  	    $headers[-1] .= " " . $line;
  	}
  	elsif ($junk_out) {
  	    push(@$junk_out, $line);
  	}
  	else {
  	    die "Bad header: '$line'\n";
  	}
  	if ($max_header_lines) {
  	    $line_count++;
  	    if ($line_count >= $max_header_lines) {
  		die "Too many header lines (limit is $max_header_lines)";
  	    }
  	}
      }
      return @headers;
  }
  
  
  sub read_response_headers {
      my($self, %opt) = @_;
      my $laxed = $opt{laxed};
  
      my($status, $eol) = my_readline($self, 'Status');
      unless (defined $status) {
  	die "Server closed connection without sending any data back";
      }
  
      my($peer_ver, $code, $message) = split(/\s+/, $status, 3);
      if (!$peer_ver || $peer_ver !~ s,^HTTP/,, || $code !~ /^[1-5]\d\d$/) {
  	die "Bad response status line: '$status'" unless $laxed;
  	# assume HTTP/0.9
  	${*$self}{'http_peer_http_version'} = "0.9";
  	${*$self}{'http_status'} = "200";
  	substr(${*$self}{'http_buf'}, 0, 0) = $status . ($eol || "");
  	return 200 unless wantarray;
  	return (200, "Assumed OK");
      };
  
      ${*$self}{'http_peer_http_version'} = $peer_ver;
      ${*$self}{'http_status'} = $code;
  
      my $junk_out;
      if ($laxed) {
  	$junk_out = $opt{junk_out} || [];
      }
      my @headers = $self->_read_header_lines($junk_out);
  
      # pick out headers that read_entity_body might need
      my @te;
      my $content_length;
      for (my $i = 0; $i < @headers; $i += 2) {
  	my $h = lc($headers[$i]);
  	if ($h eq 'transfer-encoding') {
  	    my $te = $headers[$i+1];
  	    $te =~ s/^\s+//;
  	    $te =~ s/\s+$//;
  	    push(@te, $te) if length($te);
  	}
  	elsif ($h eq 'content-length') {
  	    # ignore bogus and overflow values
  	    if ($headers[$i+1] =~ /^\s*(\d{1,15})(?:\s|$)/) {
  		$content_length = $1;
  	    }
  	}
      }
      ${*$self}{'http_te'} = join(",", @te);
      ${*$self}{'http_content_length'} = $content_length;
      ${*$self}{'http_first_body'}++;
      delete ${*$self}{'http_trailers'};
      return $code unless wantarray;
      return ($code, $message, @headers);
  }
  
  
  sub read_entity_body {
      my $self = shift;
      my $buf_ref = \$_[0];
      my $size = $_[1];
      die "Offset not supported yet" if $_[2];
  
      my $chunked;
      my $bytes;
  
      if (${*$self}{'http_first_body'}) {
  	${*$self}{'http_first_body'} = 0;
  	delete ${*$self}{'http_chunked'};
  	delete ${*$self}{'http_bytes'};
  	my $method = shift(@{${*$self}{'http_request_method'}});
  	my $status = ${*$self}{'http_status'};
  	if ($method eq "HEAD") {
  	    # this response is always empty regardless of other headers
  	    $bytes = 0;
  	}
  	elsif (my $te = ${*$self}{'http_te'}) {
  	    my @te = split(/\s*,\s*/, lc($te));
  	    die "Chunked must be last Transfer-Encoding '$te'"
  		unless pop(@te) eq "chunked";
  	    pop(@te) while @te && $te[-1] eq "chunked";  # ignore repeated chunked spec
  
  	    for (@te) {
  		if ($_ eq "deflate" && inflate_ok()) {
  		    #require Compress::Raw::Zlib;
  		    my ($i, $status) = Compress::Raw::Zlib::Inflate->new();
  		    die "Can't make inflator: $status" unless $i;
  		    $_ = sub { my $out; $i->inflate($_[0], \$out); $out }
  		}
  		elsif ($_ eq "gzip" && gunzip_ok()) {
  		    #require IO::Uncompress::Gunzip;
  		    my @buf;
  		    $_ = sub {
  			push(@buf, $_[0]);
  			return "" unless $_[1];
  			my $input = join("", @buf);
  			my $output;
  			IO::Uncompress::Gunzip::gunzip(\$input, \$output, Transparent => 0)
  			    or die "Can't gunzip content: $IO::Uncompress::Gunzip::GunzipError";
  			return \$output;
  		    };
  		}
  		elsif ($_ eq "identity") {
  		    $_ = sub { $_[0] };
  		}
  		else {
  		    die "Can't handle transfer encoding '$te'";
  		}
  	    }
  
  	    @te = reverse(@te);
  
  	    ${*$self}{'http_te2'} = @te ? \@te : "";
  	    $chunked = -1;
  	}
  	elsif (defined(my $content_length = ${*$self}{'http_content_length'})) {
  	    $bytes = $content_length;
  	}
          elsif ($status =~ /^(?:1|[23]04)/) {
              # RFC 2616 says that these responses should always be empty
              # but that does not appear to be true in practice [RT#17907]
              $bytes = 0;
          }
  	else {
  	    # XXX Multi-Part types are self delimiting, but RFC 2616 says we
  	    # only has to deal with 'multipart/byteranges'
  
  	    # Read until EOF
  	}
      }
      else {
  	$chunked = ${*$self}{'http_chunked'};
  	$bytes   = ${*$self}{'http_bytes'};
      }
  
      if (defined $chunked) {
  	# The state encoded in $chunked is:
  	#   $chunked == 0:   read CRLF after chunk, then chunk header
          #   $chunked == -1:  read chunk header
  	#   $chunked > 0:    bytes left in current chunk to read
  
  	if ($chunked <= 0) {
  	    my $line = my_readline($self, 'Entity body');
  	    if ($chunked == 0) {
  		die "Missing newline after chunk data: '$line'"
  		    if !defined($line) || $line ne "";
  		$line = my_readline($self, 'Entity body');
  	    }
  	    die "EOF when chunk header expected" unless defined($line);
  	    my $chunk_len = $line;
  	    $chunk_len =~ s/;.*//;  # ignore potential chunk parameters
  	    unless ($chunk_len =~ /^([\da-fA-F]+)\s*$/) {
  		die "Bad chunk-size in HTTP response: $line";
  	    }
  	    $chunked = hex($1);
  	    ${*$self}{'http_chunked'} = $chunked;
  	    if ($chunked == 0) {
  		${*$self}{'http_trailers'} = [$self->_read_header_lines];
  		$$buf_ref = "";
  
  		my $n = 0;
  		if (my $transforms = delete ${*$self}{'http_te2'}) {
  		    for (@$transforms) {
  			$$buf_ref = &$_($$buf_ref, 1);
  		    }
  		    $n = length($$buf_ref);
  		}
  
  		# in case somebody tries to read more, make sure we continue
  		# to return EOF
  		delete ${*$self}{'http_chunked'};
  		${*$self}{'http_bytes'} = 0;
  
  		return $n;
  	    }
  	}
  
  	my $n = $chunked;
  	$n = $size if $size && $size < $n;
  	$n = my_read($self, $$buf_ref, $n);
  	return undef unless defined $n;
  
  	${*$self}{'http_chunked'} = $chunked - $n;
  
  	if ($n > 0) {
  	    if (my $transforms = ${*$self}{'http_te2'}) {
  		for (@$transforms) {
  		    $$buf_ref = &$_($$buf_ref, 0);
  		}
  		$n = length($$buf_ref);
  		$n = -1 if $n == 0;
  	    }
  	}
  	return $n;
      }
      elsif (defined $bytes) {
  	unless ($bytes) {
  	    $$buf_ref = "";
  	    return 0;
  	}
  	my $n = $bytes;
  	$n = $size if $size && $size < $n;
  	$n = my_read($self, $$buf_ref, $n);
  	${*$self}{'http_bytes'} = defined $n ? $bytes - $n : $bytes;
  	return $n;
      }
      else {
  	# read until eof
  	$size ||= 8*1024;
  	return my_read($self, $$buf_ref, $size);
      }
  }
  
  sub get_trailers {
      my $self = shift;
      @{${*$self}{'http_trailers'} || []};
  }
  
  BEGIN {
  my $gunzip_ok;
  my $inflate_ok;
  
  sub gunzip_ok {
      return $gunzip_ok if defined $gunzip_ok;
  
      # Try to load IO::Uncompress::Gunzip.
      local $@;
      local $SIG{__DIE__};
      $gunzip_ok = 0;
  
      eval {
  	require IO::Uncompress::Gunzip;
  	$gunzip_ok++;
      };
  
      return $gunzip_ok;
  }
  
  sub inflate_ok {
      return $inflate_ok if defined $inflate_ok;
  
      # Try to load Compress::Raw::Zlib.
      local $@;
      local $SIG{__DIE__};
      $inflate_ok = 0;
  
      eval {
  	require Compress::Raw::Zlib;
  	$inflate_ok++;
      };
  
      return $inflate_ok;
  }
  
  } # BEGIN
  
  1;
NET_HTTP_METHODS

    $main::fatpacked{"Net/HTTP/NB.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'NET_HTTP_NB';
  package Net::HTTP::NB;
  
  use strict;
  use vars qw($VERSION @ISA);
  
  $VERSION = "6.09";
  $VERSION = eval $VERSION;
  
  require Net::HTTP;
  @ISA=qw(Net::HTTP);
  
  sub can_read {
      return 1;
  }
  
  sub sysread {
      my $self = $_[0];
      if (${*$self}{'httpnb_read_count'}++) {
  	${*$self}{'http_buf'} = ${*$self}{'httpnb_save'};
  	die "Multi-read\n";
      }
      my $buf;
      my $offset = $_[3] || 0;
      my $n = sysread($self, $_[1], $_[2], $offset);
      ${*$self}{'httpnb_save'} .= substr($_[1], $offset);
      return $n;
  }
  
  sub read_response_headers {
      my $self = shift;
      ${*$self}{'httpnb_read_count'} = 0;
      ${*$self}{'httpnb_save'} = ${*$self}{'http_buf'};
      my @h = eval { $self->SUPER::read_response_headers(@_) };
      if ($@) {
  	return if $@ eq "Multi-read\n";
  	die;
      }
      return @h;
  }
  
  sub read_entity_body {
      my $self = shift;
      ${*$self}{'httpnb_read_count'} = 0;
      ${*$self}{'httpnb_save'} = ${*$self}{'http_buf'};
      # XXX I'm not so sure this does the correct thing in case of
      # transfer-encoding transforms
      my $n = eval { $self->SUPER::read_entity_body(@_); };
      if ($@) {
  	$_[0] = "";
  	return -1;
      }
      return $n;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Net::HTTP::NB - Non-blocking HTTP client
  
  =head1 SYNOPSIS
  
   use Net::HTTP::NB;
   my $s = Net::HTTP::NB->new(Host => "www.perl.com") || die $@;
   $s->write_request(GET => "/");
  
   use IO::Select;
   my $sel = IO::Select->new($s);
  
   READ_HEADER: {
      die "Header timeout" unless $sel->can_read(10);
      my($code, $mess, %h) = $s->read_response_headers;
      redo READ_HEADER unless $code;
   }
  
   while (1) {
      die "Body timeout" unless $sel->can_read(10);
      my $buf;
      my $n = $s->read_entity_body($buf, 1024);
      last unless $n;
      print $buf;
   }
  
  =head1 DESCRIPTION
  
  Same interface as C<Net::HTTP> but it will never try multiple reads
  when the read_response_headers() or read_entity_body() methods are
  invoked.  This make it possible to multiplex multiple Net::HTTP::NB
  using select without risk blocking.
  
  If read_response_headers() did not see enough data to complete the
  headers an empty list is returned.
  
  If read_entity_body() did not see new entity data in its read
  the value -1 is returned.
  
  =head1 SEE ALSO
  
  L<Net::HTTP>
  
  =head1 COPYRIGHT
  
  Copyright 2001 Gisle Aas.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =cut
NET_HTTP_NB

    $main::fatpacked{"Net/HTTPS.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'NET_HTTPS';
  package Net::HTTPS;
  
  use strict;
  use vars qw($VERSION $SSL_SOCKET_CLASS @ISA);
  
  $VERSION = "6.09";
  $VERSION = eval $VERSION;
  
  # Figure out which SSL implementation to use
  if ($SSL_SOCKET_CLASS) {
      # somebody already set it
  }
  elsif ($SSL_SOCKET_CLASS = $ENV{PERL_NET_HTTPS_SSL_SOCKET_CLASS}) {
      unless ($SSL_SOCKET_CLASS =~ /^(IO::Socket::SSL|Net::SSL)\z/) {
  	die "Bad socket class [$SSL_SOCKET_CLASS]";
      }
      eval "require $SSL_SOCKET_CLASS";
      die $@ if $@;
  }
  elsif ($IO::Socket::SSL::VERSION) {
      $SSL_SOCKET_CLASS = "IO::Socket::SSL"; # it was already loaded
  }
  elsif ($Net::SSL::VERSION) {
      $SSL_SOCKET_CLASS = "Net::SSL";
  }
  else {
      eval { require IO::Socket::SSL; };
      if ($@) {
  	my $old_errsv = $@;
  	eval {
  	    require Net::SSL;  # from Crypt-SSLeay
  	};
  	if ($@) {
  	    $old_errsv =~ s/\s\(\@INC contains:.*\)/)/g;
  	    die $old_errsv . $@;
  	}
  	$SSL_SOCKET_CLASS = "Net::SSL";
      }
      else {
  	$SSL_SOCKET_CLASS = "IO::Socket::SSL";
      }
  }
  
  require Net::HTTP::Methods;
  
  @ISA=($SSL_SOCKET_CLASS, 'Net::HTTP::Methods');
  
  sub configure {
      my($self, $cnf) = @_;
      $self->http_configure($cnf);
  }
  
  sub http_connect {
      my($self, $cnf) = @_;
      if ($self->isa("Net::SSL")) {
  	if ($cnf->{SSL_verify_mode}) {
  	    if (my $f = $cnf->{SSL_ca_file}) {
  		$ENV{HTTPS_CA_FILE} = $f;
  	    }
  	    if (my $f = $cnf->{SSL_ca_path}) {
  		$ENV{HTTPS_CA_DIR} = $f;
  	    }
  	}
  	if ($cnf->{SSL_verifycn_scheme}) {
  	    $@ = "Net::SSL from Crypt-SSLeay can't verify hostnames; either install IO::Socket::SSL or turn off verification by setting the PERL_LWP_SSL_VERIFY_HOSTNAME environment variable to 0";
  	    return undef;
  	}
      }
      $self->SUPER::configure($cnf);
  }
  
  sub http_default_port {
      443;
  }
  
  if ($SSL_SOCKET_CLASS eq "Net::SSL") {
      # The underlying SSLeay classes fails to work if the socket is
      # placed in non-blocking mode.  This override of the blocking
      # method makes sure it stays the way it was created.
      *blocking = sub { };
  }
  
  1;
  
  =head1 NAME
  
  Net::HTTPS - Low-level HTTP over SSL/TLS connection (client)
  
  =head1 DESCRIPTION
  
  The C<Net::HTTPS> is a low-level HTTP over SSL/TLS client.  The interface is the same
  as the interface for C<Net::HTTP>, but the constructor method take additional parameters
  as accepted by L<IO::Socket::SSL>.  The C<Net::HTTPS> object isa C<IO::Socket::SSL>
  too, which make it inherit additional methods from that base class.
  
  For historical reasons this module also supports using C<Net::SSL> (from the
  Crypt-SSLeay distribution) as its SSL driver and base class.  This base is
  automatically selected if available and C<IO::Socket::SSL> isn't.  You might
  also force which implementation to use by setting $Net::HTTPS::SSL_SOCKET_CLASS
  before loading this module.  If not set this variable is initialized from the
  C<PERL_NET_HTTPS_SSL_SOCKET_CLASS> environment variable.
  
  =head1 ENVIRONMENT
  
  You might set the C<PERL_NET_HTTPS_SSL_SOCKET_CLASS> environment variable to the name
  of the base SSL implementation (and Net::HTTPS base class) to use.  The default
  is C<IO::Socket::SSL>.  Currently the only other supported value is C<Net::SSL>.
  
  =head1 SEE ALSO
  
  L<Net::HTTP>, L<IO::Socket::SSL>
NET_HTTPS

    $main::fatpacked{"Nodejs/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'NODEJS_UTIL';
  package Nodejs::Util;
  
  our $DATE = '2016-07-03'; # DATE
  our $VERSION = '0.006'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(
                         get_nodejs_path
                         nodejs_available
                         system_nodejs
                 );
  
  our %SPEC;
  
  my %arg_all = (
      all => {
          schema => 'bool',
          summary => 'Find all node.js instead of the first found',
          description => <<'_',
  
  If this option is set to true, will return an array of paths intead of path.
  
  _
      },
  );
  
  $SPEC{get_nodejs_path} = {
      v => 1.1,
      summary => 'Check the availability of Node.js executable in PATH',
      description => <<'_',
  
  Return the path to executable or undef if none is available. Node.js is usually
  installed as 'node' or 'nodejs'.
  
  _
      args => {
          %arg_all,
      },
      result_naked => 1,
  };
  sub get_nodejs_path {
      require File::Which;
      require IPC::System::Options;
  
      my %args = @_;
  
      my @paths;
      for my $name (qw/nodejs node/) {
          my $path = File::Which::which($name);
          next unless $path;
  
          # check if it's really nodejs
          my $out = IPC::System::Options::readpipe(
              $path, '-e', 'console.log(1+1)');
          if ($out =~ /\A2\n?\z/) {
              return $path unless $args{all};
              push @paths, $path;
          } else {
              #say "D:Output of $cmd: $out";
          }
      }
      return undef unless @paths;
      \@paths;
  }
  
  $SPEC{nodejs_available} = {
      v => 1.1,
      summary => 'Check the availability of Node.js',
      description => <<'_',
  
  This is a more advanced alternative to `get_nodejs_path()`. Will check for
  `node` or `nodejs` in the PATH, like `get_nodejs_path()`. But you can also
  specify minimum version (and other options in the future). And it will return
  more details.
  
  Will return status 200 if everything is okay. Actual result will return the path
  to executable, and result metadata will contain extra result like detected
  version in `func.version`.
  
  Will return satus 412 if something is wrong. The return message will tell the
  reason.
  
  _
      args => {
          min_version => {
              schema => 'str*',
          },
          path => {
              summary => 'Search this instead of PATH environment variable',
              schema => ['str*'],
          },
          %arg_all,
      },
  };
  sub nodejs_available {
      require IPC::System::Options;
  
      my %args = @_;
      my $all = $args{all};
  
      my $paths = do {
          local $ENV{PATH} = $args{path} if defined $args{path};
          get_nodejs_path(all => 1);
      };
      defined $paths or return [412, "node.js not detected in PATH"];
  
      my $res = [200, "OK"];
      my @filtered_paths;
      my @versions;
      my @errors;
  
      for my $path (@$paths) {
          my $v;
          if ($args{min_version}) {
              my $out = IPC::System::Options::readpipe(
                  $path, '-v');
              $out =~ /^(v\d+\.\d+\.\d+)$/ or do {
                  push @errors, "Can't recognize output of $path -v: $out";
                  next;
              };
              # node happens to use semantic versioning, which we can parse using
              # version.pm
              $v = version->parse($1);
              $v >= version->parse($args{min_version}) or do {
                  push @errors, "Version of $path less than $args{min_version}";
                  next;
              };
          }
          push @filtered_paths, $path;
          push @versions, defined($v) ? "$v" : undef;
      }
  
      $res->[2]                 = $all ? \@filtered_paths : $filtered_paths[0];
      $res->[3]{'func.path'}    = $all ? \@filtered_paths : $filtered_paths[0];
      $res->[3]{'func.version'} = $all ? \@versions       : $versions[0];
      $res->[3]{'func.errors'}  = \@errors;
  
      unless (@filtered_paths) {
          $res->[0] = 412;
          $res->[1] = @errors == 1 ? $errors[0] :
              "No eligible node.js found in PATH";
      }
  
      $res;
  }
  
  sub system_nodejs {
      require IPC::System::Options;
      my $opts = ref($_[0]) eq 'HASH' ? shift : {};
  
      my $harmony_scoping = delete $opts->{harmony_scoping};
      my $path = delete $opts->{path};
  
      my %detect_nodejs_args;
      if ($harmony_scoping) {
          $detect_nodejs_args{min_version} = '0.5.10';
      }
      if ($path) {
          $detect_nodejs_args{path} = $path;
      }
      my $detect_res = nodejs_available(%detect_nodejs_args);
      die "No eligible node.js binary available: ".
          "$detect_res->[0] - $detect_res->[1]" unless $detect_res->[0] == 200;
  
      my @extra_args;
      if ($harmony_scoping) {
          my $node_v = $detect_res->[3]{'func.version'};
          if (version->parse($node_v) < version->parse("2.0.0")) {
              push @extra_args, "--use_strict", "--harmony_scoping";
          } else {
              push @extra_args, "--use_strict";
          }
      }
  
      IPC::System::Options::system(
          $opts,
          $detect_res->[2],
          @extra_args,
          @_,
      );
  }
  
  1;
  # ABSTRACT: Utilities related to Node.js
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Nodejs::Util - Utilities related to Node.js
  
  =head1 VERSION
  
  This document describes version 0.006 of Nodejs::Util (from Perl distribution Nodejs-Util), released on 2016-07-03.
  
  =head1 FUNCTIONS
  
  
  =head2 get_nodejs_path(%args) -> any
  
  Check the availability of Node.js executable in PATH.
  
  Return the path to executable or undef if none is available. Node.js is usually
  installed as 'node' or 'nodejs'.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<all> => I<bool>
  
  Find all node.js instead of the first found.
  
  If this option is set to true, will return an array of paths intead of path.
  
  =back
  
  Return value:  (any)
  
  
  =head2 nodejs_available(%args) -> [status, msg, result, meta]
  
  Check the availability of Node.js.
  
  This is a more advanced alternative to C<get_nodejs_path()>. Will check for
  C<node> or C<nodejs> in the PATH, like C<get_nodejs_path()>. But you can also
  specify minimum version (and other options in the future). And it will return
  more details.
  
  Will return status 200 if everything is okay. Actual result will return the path
  to executable, and result metadata will contain extra result like detected
  version in C<func.version>.
  
  Will return satus 412 if something is wrong. The return message will tell the
  reason.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<all> => I<bool>
  
  Find all node.js instead of the first found.
  
  If this option is set to true, will return an array of paths intead of path.
  
  =item * B<min_version> => I<str>
  
  =item * B<path> => I<str>
  
  Search this instead of PATH environment variable.
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (any)
  
  =head2 system_nodejs([ \%opts ], @argv)
  
  Will call L<IPC::System::Options>'s system(), but with node.js binary as the
  first argument. Known options:
  
  =over
  
  =item * harmony_scoping => bool
  
  If set to 1, will attempt to enable block scoping. This means at least node.js
  v0.5.10 (where C<--harmony_scoping> is first recognized). But
  C<--harmony_scoping> is no longer needed after v2.0.0 and no longer recognized
  in later versions.
  
  =item * path => str
  
  Will be passed to C<nodejs_available()>.
  
  =back
  
  Other options will be passed to C<IPC::System::Options>'s C<system()>.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Nodejs-Util>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Nodejs-Util>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Nodejs-Util>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
NODEJS_UTIL

    $main::fatpacked{"PERLANCAR/Module/List.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERLANCAR_MODULE_LIST';
  package PERLANCAR::Module::List;
  
  our $DATE = '2016-03-17'; # DATE
  our $VERSION = '0.003005'; # VERSION
  
  #IFUNBUILT
  # use strict;
  # use warnings;
  #END IFUNBUILT
  
  sub list_modules($$) {
  	my($prefix, $options) = @_;
  	my $trivial_syntax = $options->{trivial_syntax};
  	my($root_leaf_rx, $root_notleaf_rx);
  	my($notroot_leaf_rx, $notroot_notleaf_rx);
  	if($trivial_syntax) {
  		$root_leaf_rx = $notroot_leaf_rx = qr#:?(?:[^/:]+:)*[^/:]+:?#;
  		$root_notleaf_rx = $notroot_notleaf_rx =
  			qr#:?(?:[^/:]+:)*[^/:]+#;
  	} else {
  		$root_leaf_rx = $root_notleaf_rx = qr/[a-zA-Z_][0-9a-zA-Z_]*/;
  		$notroot_leaf_rx = $notroot_notleaf_rx = qr/[0-9a-zA-Z_]+/;
  	}
  	die "bad module name prefix `$prefix'"
  		unless $prefix =~ /\A(?:${root_notleaf_rx}::
  					 (?:${notroot_notleaf_rx}::)*)?\z/x &&
  			 $prefix !~ /(?:\A|[^:]::)\.\.?::/;
  	my $list_modules = $options->{list_modules};
  	my $list_prefixes = $options->{list_prefixes};
  	my $list_pod = $options->{list_pod};
  	my $use_pod_dir = $options->{use_pod_dir};
  	return {} unless $list_modules || $list_prefixes || $list_pod;
  	my $recurse = $options->{recurse};
  	my $return_path = $options->{return_path};
  	my $all = $options->{all};
  	my @prefixes = ($prefix);
  	my %seen_prefixes;
  	my %results;
  	while(@prefixes) {
  		my $prefix = pop(@prefixes);
  		my @dir_suffix = split(/::/, $prefix);
  		my $module_rx =
  			$prefix eq "" ? $root_leaf_rx : $notroot_leaf_rx;
  		my $pm_rx = qr/\A($module_rx)\.pmc?\z/;
  		my $pod_rx = qr/\A($module_rx)\.pod\z/;
  		my $dir_rx =
  			$prefix eq "" ? $root_notleaf_rx : $notroot_notleaf_rx;
  		$dir_rx = qr/\A$dir_rx\z/;
  		foreach my $incdir (@INC) {
  			my $dir = join("/", $incdir, @dir_suffix);
  			opendir(my $dh, $dir) or next;
  			while(defined(my $entry = readdir($dh))) {
  				if(($list_modules && $entry =~ $pm_rx) ||
  						($list_pod &&
  							$entry =~ $pod_rx)) {
                                              $results{$prefix.$1} = $return_path ? ($all ? [@{ $results{$prefix.$1} || [] }, "$dir/$entry"] : "$dir/$entry") : undef
  						if $all && $return_path || !exists($results{$prefix.$1});
  				} elsif(($list_prefixes || $recurse) &&
  						($entry ne '.' && $entry ne '..') &&
  						$entry =~ $dir_rx &&
  						-d join("/", $dir,
  							$entry)) {
  					my $newpfx = $prefix.$entry."::";
  					next if exists $seen_prefixes{$newpfx};
  					$results{$newpfx} = $return_path ? ($all ? [@{ $results{$newpfx} || [] }, "$dir/$entry/"] : "$dir/$entry/") : undef
  						if ($all && $return_path || !exists($results{$newpfx})) && $list_prefixes;
  					push @prefixes, $newpfx if $recurse;
  				}
  			}
  			next unless $list_pod && $use_pod_dir;
  			$dir = join("/", $dir, "pod");
  			opendir($dh, $dir) or next;
  			while(defined(my $entry = readdir($dh))) {
  				if($entry =~ $pod_rx) {
  					$results{$prefix.$1} = $return_path ? ($all ? [@{ $results{$prefix.$1} || [] }, "$dir/$entry"] : "$dir/$entry") : undef;
  				}
  			}
  		}
  	}
  	return \%results;
  }
  
  1;
  # ABSTRACT: A fork of Module::List
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  PERLANCAR::Module::List - A fork of Module::List
  
  =head1 VERSION
  
  This document describes version 0.003005 of PERLANCAR::Module::List (from Perl distribution PERLANCAR-Module-List), released on 2016-03-17.
  
  =head1 DESCRIPTION
  
  This module is a fork of L<Module::List> 0.003. It's exactly like Module::List,
  except for the following differences:
  
  =over
  
  =item * lower startup overhead (with some caveats)
  
  It strips the usage of L<Exporter>, L<IO::Dir>, L<Carp>, L<File::Spec>, with the
  goal of saving a few milliseconds (a casual test on my PC results in 11ms vs
  39ms).
  
  Path separator is hard-coded as C</>.
  
  =item * Recognize C<return_path> option
  
  Normally the returned hash has C<undef> as the values. With this option set to
  true, the values will contain the path instead. Useful if you want to collect
  all the paths, instead of having to use L<Module::Path> or L<Module::Path::More>
  for each module again.
  
  =item * Recognize C<all> option
  
  If set to true and C<return_path> is also set to true, will return all found
  paths for each module instead of just the first found one. The values of result
  will be an arrayref containing all found paths.
  
  =back
  
  =for Pod::Coverage .+
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/PERLANCAR-Module-List>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-PERLANCAR-Module-List>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=PERLANCAR-Module-List>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Module::List>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERLANCAR_MODULE_LIST

    $main::fatpacked{"Package/MoreUtil.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PACKAGE_MOREUTIL';
  package Package::MoreUtil;
  
  our $DATE = '2014-12-05'; # DATE
  our $VERSION = '0.58'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         package_exists
                         list_package_contents
                         list_subpackages
                 );
  
  sub package_exists {
      no strict 'refs';
  
      my $pkg = shift;
  
      return unless $pkg =~ /\A\w+(::\w+)*\z/;
      if ($pkg =~ s/::(\w+)\z//) {
          return !!${$pkg . "::"}{$1 . "::"};
      } else {
          return !!$::{$pkg . "::"};
      }
  }
  
  # XXX incomplete/improper
  sub list_package_contents {
      no strict 'refs';
  
      my $pkg = shift;
  
      return () unless !length($pkg) || package_exists($pkg);
      my $symtbl = \%{$pkg . "::"};
  
      my %res;
      while (my ($k, $v) = each %$symtbl) {
          next if $k =~ /::$/; # subpackage
          my $n;
          if ("$v" !~ /^\*/) {
              # constant
              $res{$k} = $v;
              next;
          }
          if (defined *$v{CODE}) {
              $res{$k} = *$v{CODE}; # subroutine
              $n++;
          }
          if (defined *$v{HASH}) {
              $res{"\%$k"} = \%{*$v}; # hash
              $n++;
          }
          if (defined *$v{ARRAY}) {
              $res{"\@$k"} = \@{*$v}; # array
              $n++;
          }
          if (defined(*$v{SCALAR}) # XXX always defined?
                  && defined(${*$v})) { # currently we filter undef values
              $res{"\$$k"} = \${*$v}; # scalar
              $n++;
          }
  
          if (!$n) {
              $res{"\*$k"} = $v; # glob
          }
      }
  
      %res;
  }
  
  sub list_subpackages {
      no strict 'refs';
  
      my ($pkg, $recursive, $cur_res, $ref_mem) = @_;
  
      return () unless !length($pkg) || package_exists($pkg);
  
      # this is used to avoid deep recursion. for example (the only one?) %:: and
      # %main:: point to the same thing.
      $ref_mem //= {};
  
      my $symtbl = \%{$pkg . "::"};
      return () if $ref_mem->{"$symtbl"}++;
  
      my $res = $cur_res // [];
      for (sort keys %$symtbl) {
          next unless s/::$//;
          my $name = (length($pkg) ? "$pkg\::" : "" ) . $_;
          push @$res, $name;
          list_subpackages($name, 1, $res, $ref_mem) if $recursive;
      }
  
      @$res;
  }
  
  1;
  # ABSTRACT: Package-related utilities
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Package::MoreUtil - Package-related utilities
  
  =head1 VERSION
  
  This document describes version 0.58 of Package::MoreUtil (from Perl distribution Package-MoreUtil), released on 2014-12-05.
  
  =head1 SYNOPSIS
  
   use Package::MoreUtil qw(
       package_exists
       list_package_contents
       list_subpackages
   );
  
   print "Package Foo::Bar exists" if package_exists("Foo::Bar");
   my %content   = list_package_contents("Foo::Bar");
   my @subpkg    = list_subpackages("Foo::Bar");
   my @allsubpkg = list_subpackages("Foo::Bar", 1); # recursive
  
  =head1 DESCRIPTION
  
  =head1 FUNCTIONS
  
  =head2 package_exists($name) => BOOL
  
  Return true if package "exists". By "exists", it means that the package has been
  defined by C<package> statement or some entries have been created in the symbol
  table (e.g. C<$Foo::var = 1;> will make the C<Foo> package "exist").
  
  This function can be used e.g. for checking before aliasing one package to
  another. Or to casually check whether a module has been loaded.
  
  =head2 list_package_contents($name) => %res
  
  Return a hash containing package contents. For example:
  
   (
       sub1  => \&Foo::Bar::sub1,
       sub2  => \&Foo::Bar::sub2,
       '%h1' => \%Foo::Bar::h1,
       '@a1' => \@Foo::Bar::a1,
       ...
   )
  
  This module won't list subpackages. Use list_subpackages() for that.
  
  =head2 list_subpackages($name[, $recursive]) => @res
  
  List subpackages, e.g.:
  
   (
       "Foo::Bar::Baz",
       "Foo::Bar::Qux",
       ...
   )
  
  If $recursive is true, will also list subpackages of subpackages, and so on.
  
  =head1 FAQ
  
  =head2 How to list all existing packages?
  
  You can recurse from the top, e.g.:
  
   list_subpackages("", 1);
  
  =head1 SEE ALSO
  
  L<perlmod>
  
  L<Package::Util> (currently empty/placeholder at the time of this writing)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Package-MoreUtil>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Package-MoreUtil>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Package-MoreUtil>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PACKAGE_MOREUTIL

    $main::fatpacked{"Package/Stash.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PACKAGE_STASH';
  package Package::Stash;
  BEGIN {
    $Package::Stash::AUTHORITY = 'cpan:DOY';
  }
  $Package::Stash::VERSION = '0.37';
  use strict;
  use warnings;
  use 5.008001;
  # ABSTRACT: routines for manipulating stashes
  
  our $IMPLEMENTATION;
  
  use Module::Implementation 0.06;
  
  BEGIN {
      local $ENV{PACKAGE_STASH_IMPLEMENTATION} = $IMPLEMENTATION
        if ( $IMPLEMENTATION and not $ENV{PACKAGE_STASH_IMPLEMENTATION} );
  
      Module::Implementation::build_loader_sub(
          implementations => [ 'XS', 'PP' ],
          symbols         => [qw(
              new
              name
              namespace
              add_symbol
              remove_glob
              has_symbol
              get_symbol
              get_or_add_symbol
              remove_symbol
              list_all_symbols
              get_all_symbols
          )],
      )->();
      $IMPLEMENTATION = Module::Implementation::implementation_for(__PACKAGE__);
  }
  
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Package::Stash - routines for manipulating stashes
  
  =head1 VERSION
  
  version 0.37
  
  =head1 SYNOPSIS
  
    my $stash = Package::Stash->new('Foo');
    $stash->add_symbol('%foo', {bar => 1});
    # $Foo::foo{bar} == 1
    $stash->has_symbol('$foo') # false
    my $namespace = $stash->namespace;
    *{ $namespace->{foo} }{HASH} # {bar => 1}
  
  =head1 DESCRIPTION
  
  Manipulating stashes (Perl's symbol tables) is occasionally necessary, but
  incredibly messy, and easy to get wrong. This module hides all of that behind a
  simple API.
  
  NOTE: Most methods in this class require a variable specification that includes
  a sigil. If this sigil is absent, it is assumed to represent the IO slot.
  
  Due to limitations in the typeglob API available to perl code, and to typeglob
  manipulation in perl being quite slow, this module provides two
  implementations - one in pure perl, and one using XS. The XS implementation is
  to be preferred for most usages; the pure perl one is provided for cases where
  XS modules are not a possibility. The current implementation in use can be set
  by setting C<$ENV{PACKAGE_STASH_IMPLEMENTATION}> or
  C<$Package::Stash::IMPLEMENTATION> before loading Package::Stash (with the
  environment variable taking precedence), otherwise, it will use the XS
  implementation if possible, falling back to the pure perl one.
  
  =head1 METHODS
  
  =head2 new $package_name
  
  Creates a new C<Package::Stash> object, for the package given as the only
  argument.
  
  =head2 name
  
  Returns the name of the package that this object represents.
  
  =head2 namespace
  
  Returns the raw stash itself.
  
  =head2 add_symbol $variable $value %opts
  
  Adds a new package symbol, for the symbol given as C<$variable>, and optionally
  gives it an initial value of C<$value>. C<$variable> should be the name of
  variable including the sigil, so
  
    Package::Stash->new('Foo')->add_symbol('%foo')
  
  will create C<%Foo::foo>.
  
  Valid options (all optional) are C<filename>, C<first_line_num>, and
  C<last_line_num>.
  
  C<$opts{filename}>, C<$opts{first_line_num}>, and C<$opts{last_line_num}> can
  be used to indicate where the symbol should be regarded as having been defined.
  Currently these values are only used if the symbol is a subroutine ('C<&>'
  sigil) and only if C<$^P & 0x10> is true, in which case the special C<%DB::sub>
  hash is updated to record the values of C<filename>, C<first_line_num>, and
  C<last_line_num> for the subroutine. If these are not passed, their values are
  inferred (as much as possible) from C<caller> information.
  
  This is especially useful for debuggers and profilers, which use C<%DB::sub> to
  determine where the source code for a subroutine can be found.  See
  L<http://perldoc.perl.org/perldebguts.html#Debugger-Internals> for more
  information about C<%DB::sub>.
  
  =head2 remove_glob $name
  
  Removes all package variables with the given name, regardless of sigil.
  
  =head2 has_symbol $variable
  
  Returns whether or not the given package variable (including sigil) exists.
  
  =head2 get_symbol $variable
  
  Returns the value of the given package variable (including sigil).
  
  =head2 get_or_add_symbol $variable
  
  Like C<get_symbol>, except that it will return an empty hashref or
  arrayref if the variable doesn't exist.
  
  =head2 remove_symbol $variable
  
  Removes the package variable described by C<$variable> (which includes the
  sigil); other variables with the same name but different sigils will be
  untouched.
  
  =head2 list_all_symbols $type_filter
  
  Returns a list of package variable names in the package, without sigils. If a
  C<type_filter> is passed, it is used to select package variables of a given
  type, where valid types are the slots of a typeglob ('SCALAR', 'CODE', 'HASH',
  etc). Note that if the package contained any C<BEGIN> blocks, perl will leave
  an empty typeglob in the C<BEGIN> slot, so this will show up if no filter is
  used (and similarly for C<INIT>, C<END>, etc).
  
  =head2 get_all_symbols $type_filter
  
  Returns a hashref, keyed by the variable names in the package. If
  C<$type_filter> is passed, the hash will contain every variable of that type in
  the package as values, otherwise, it will contain the typeglobs corresponding
  to the variable names (basically, a clone of the stash).
  
  =head1 WORKING WITH VARIABLES
  
  It is important to note, that when working with scalar variables, the default
  behavior is to B<copy> values.
  
    my $stash = Package::Stash->new('Some::Namespace');
    my $variable = 1;
    # $Some::Namespace::name is a copy of $variable
    $stash->add_symbol('$name', $variable);
    $variable++
    # $Some::Namespace::name == 1 , $variable == 2
  
  This will likely confuse people who expect it to work the same as typeglob
  assignment, which simply creates new references to existing variables.
  
    my $variable = 1;
    {
        no strict 'refs';
        # assign $Package::Stash::name = $variable
        *{'Package::Stash::name'} = \$variable;
    }
    $variable++ # affects both names
  
  If this behaviour is desired when working with Package::Stash, simply pass
  Package::Stash a scalar ref:
  
    my $stash = Package::Stash->new('Some::Namespace');
    my $variable = 1;
    # $Some::Namespace::name is now $variable
    $stash->add_symbol('$name', \$variable);
    $variable++
    # $Some::Namespace::name == 2 , $variable == 2
  
  This will be what you want as well if you're ever working with L<Readonly>
  variables:
  
    use Readonly;
    Readonly my $value, 'hello';
  
    $stash->add_symbol('$name', \$value); # reference
    print $Some::Namespace::name; # hello
    # Tries to modify the read-only 'hello' and dies.
    $Some::Namespace::name .= " world";
  
    $stash->add_symbol('$name', $value); # copy
    print $Some::Namespace::name; # hello
    # No problem, modifying a copy, not the original
    $Some::Namespace::name .= " world";
  
  =head1 BUGS / CAVEATS
  
  =over 4
  
  =item * Prior to perl 5.10, scalar slots are only considered to exist if they are defined
  
  This is due to a shortcoming within perl itself. See
  L<perlref/Making References> point 7 for more information.
  
  =item * GLOB and FORMAT variables are not (yet) accessible through this module.
  
  =item * Also, see the BUGS section for the specific backends (L<Package::Stash::XS> and L<Package::Stash::PP>)
  
  =back
  
  Please report any bugs to GitHub Issues at
  L<https://github.com/doy/package-stash/issues>.
  
  =head1 SEE ALSO
  
  =over 4
  
  =item * L<Class::MOP::Package>
  
  This module is a factoring out of code that used to live here
  
  =back
  
  =head1 SUPPORT
  
  You can find this documentation for this module with the perldoc command.
  
      perldoc Package::Stash
  
  You can also look for information at:
  
  =over 4
  
  =item * MetaCPAN
  
  L<https://metacpan.org/release/Package-Stash>
  
  =item * Github
  
  L<https://github.com/doy/package-stash>
  
  =item * RT: CPAN's request tracker
  
  L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Package-Stash>
  
  =item * CPAN Ratings
  
  L<http://cpanratings.perl.org/d/Package-Stash>
  
  =back
  
  =head1 HISTORY
  
  Based on code from L<Class::MOP::Package>, by Stevan Little and the Moose
  Cabal.
  
  =head1 AUTHOR
  
  Jesse Luehrs <doy@tozt.net>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by Jesse Luehrs.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PACKAGE_STASH

    $main::fatpacked{"Package/Stash/PP.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PACKAGE_STASH_PP';
  package Package::Stash::PP;
  BEGIN {
    $Package::Stash::PP::AUTHORITY = 'cpan:DOY';
  }
  $Package::Stash::PP::VERSION = '0.37';
  use strict;
  use warnings;
  # ABSTRACT: pure perl implementation of the Package::Stash API
  
  use B;
  use Carp qw(confess);
  use Scalar::Util qw(blessed reftype weaken);
  use Symbol;
  # before 5.12, assigning to the ISA glob would make it lose its magical ->isa
  # powers
  use constant BROKEN_ISA_ASSIGNMENT => ($] < 5.012);
  # before 5.10, stashes don't ever seem to drop to a refcount of zero, so
  # weakening them isn't helpful
  use constant BROKEN_WEAK_STASH     => ($] < 5.010);
  # before 5.10, the scalar slot was always treated as existing if the
  # glob existed
  use constant BROKEN_SCALAR_INITIALIZATION => ($] < 5.010);
  # add_method on anon stashes triggers rt.perl #1804 otherwise
  # fixed in perl commit v5.13.3-70-g0fe688f
  use constant BROKEN_GLOB_ASSIGNMENT => ($] < 5.013004);
  # pre-5.10, ->isa lookups were cached in the ::ISA::CACHE:: slot
  use constant HAS_ISA_CACHE => ($] < 5.010);
  
  
  sub new {
      my $class = shift;
      my ($package) = @_;
  
      if (!defined($package) || (ref($package) && reftype($package) ne 'HASH')) {
          confess "Package::Stash->new must be passed the name of the "
                . "package to access";
      }
      elsif (ref($package) && reftype($package) eq 'HASH') {
          confess "The PP implementation of Package::Stash does not support "
                . "anonymous stashes before perl 5.14"
              if BROKEN_GLOB_ASSIGNMENT;
  
          return bless {
              'namespace' => $package,
          }, $class;
      }
      elsif ($package =~ /\A[0-9A-Z_a-z]+(?:::[0-9A-Z_a-z]+)*\z/) {
          return bless {
              'package' => $package,
          }, $class;
      }
      else {
          confess "$package is not a module name";
      }
  
  }
  
  sub name {
      confess "Can't call name as a class method"
          unless blessed($_[0]);
      confess "Can't get the name of an anonymous package"
          unless defined($_[0]->{package});
      return $_[0]->{package};
  }
  
  sub namespace {
      confess "Can't call namespace as a class method"
          unless blessed($_[0]);
  
      if (BROKEN_WEAK_STASH) {
          no strict 'refs';
          return \%{$_[0]->name . '::'};
      }
      else {
          return $_[0]->{namespace} if defined $_[0]->{namespace};
  
          {
              no strict 'refs';
              $_[0]->{namespace} = \%{$_[0]->name . '::'};
          }
  
          weaken($_[0]->{namespace});
  
          return $_[0]->{namespace};
      }
  }
  
  {
      my %SIGIL_MAP = (
          '$' => 'SCALAR',
          '@' => 'ARRAY',
          '%' => 'HASH',
          '&' => 'CODE',
          ''  => 'IO',
      );
  
      sub _deconstruct_variable_name {
          my ($variable) = @_;
  
          my @ret;
          if (ref($variable) eq 'HASH') {
              @ret = @{$variable}{qw[name sigil type]};
          }
          else {
              (defined $variable && length $variable)
                  || confess "You must pass a variable name";
  
              my $sigil = substr($variable, 0, 1, '');
  
              if (exists $SIGIL_MAP{$sigil}) {
                  @ret = ($variable, $sigil, $SIGIL_MAP{$sigil});
              }
              else {
                  @ret = ("${sigil}${variable}", '', $SIGIL_MAP{''});
              }
          }
  
          # XXX in pure perl, this will access things in inner packages,
          # in xs, this will segfault - probably look more into this at
          # some point
          ($ret[0] !~ /::/)
              || confess "Variable names may not contain ::";
  
          return @ret;
      }
  }
  
  sub _valid_for_type {
      my ($value, $type) = @_;
      if ($type eq 'HASH' || $type eq 'ARRAY'
       || $type eq 'IO'   || $type eq 'CODE') {
          return reftype($value) eq $type;
      }
      else {
          my $ref = reftype($value);
          return !defined($ref) || $ref eq 'SCALAR' || $ref eq 'REF' || $ref eq 'LVALUE' || $ref eq 'REGEXP' || $ref eq 'VSTRING';
      }
  }
  
  sub add_symbol {
      my ($self, $variable, $initial_value, %opts) = @_;
  
      my ($name, $sigil, $type) = _deconstruct_variable_name($variable);
  
      if (@_ > 2) {
          _valid_for_type($initial_value, $type)
              || confess "$initial_value is not of type $type";
  
          # cheap fail-fast check for PERLDBf_SUBLINE and '&'
          if ($^P and $^P & 0x10 && $sigil eq '&') {
              my $filename = $opts{filename};
              my $first_line_num = $opts{first_line_num};
  
              (undef, $filename, $first_line_num) = caller
                  if not defined $filename;
  
              my $last_line_num = $opts{last_line_num} || ($first_line_num ||= 0);
  
              # http://perldoc.perl.org/perldebguts.html#Debugger-Internals
              $DB::sub{$self->name . '::' . $name} = "$filename:$first_line_num-$last_line_num";
          }
      }
  
      if (BROKEN_GLOB_ASSIGNMENT) {
          if (@_ > 2) {
              no strict 'refs';
              no warnings 'redefine';
              *{ $self->name . '::' . $name } = ref $initial_value
                  ? $initial_value : \$initial_value;
          }
          else {
              no strict 'refs';
              if (BROKEN_ISA_ASSIGNMENT && $name eq 'ISA') {
                  *{ $self->name . '::' . $name };
              }
              else {
                  my $undef = _undef_ref_for_type($type);
                  *{ $self->name . '::' . $name } = $undef;
              }
          }
      }
      else {
          my $namespace = $self->namespace;
          {
              # using glob aliasing instead of Symbol::gensym, because otherwise,
              # magic doesn't get applied properly.
              # see <20120710063744.19360.qmail@lists-nntp.develooper.com> on p5p
              local *__ANON__:: = $namespace;
              no strict 'refs';
              no warnings 'void';
              no warnings 'once';
              *{"__ANON__::$name"};
          }
  
          if (@_ > 2) {
              no warnings 'redefine';
              *{ $namespace->{$name} } = ref $initial_value
                  ? $initial_value : \$initial_value;
          }
          else {
              return if BROKEN_ISA_ASSIGNMENT && $name eq 'ISA';
              *{ $namespace->{$name} } = _undef_ref_for_type($type);
          }
      }
  }
  
  sub _undef_ref_for_type {
      my ($type) = @_;
  
      if ($type eq 'ARRAY') {
          return [];
      }
      elsif ($type eq 'HASH') {
          return {};
      }
      elsif ($type eq 'SCALAR') {
          return \undef;
      }
      elsif ($type eq 'IO') {
          return Symbol::geniosym;
      }
      elsif ($type eq 'CODE') {
          confess "Don't know how to vivify CODE variables";
      }
      else {
          confess "Unknown type $type in vivication";
      }
  }
  
  sub remove_glob {
      my ($self, $name) = @_;
      delete $self->namespace->{$name};
  }
  
  sub has_symbol {
      my ($self, $variable) = @_;
  
      my ($name, $sigil, $type) = _deconstruct_variable_name($variable);
  
      my $namespace = $self->namespace;
  
      return unless exists $namespace->{$name};
  
      my $entry_ref = \$namespace->{$name};
      if (reftype($entry_ref) eq 'GLOB') {
          if ($type eq 'SCALAR') {
              if (BROKEN_SCALAR_INITIALIZATION) {
                  return defined ${ *{$entry_ref}{$type} };
              }
              else {
                  my $sv = B::svref_2object($entry_ref)->SV;
                  return $sv->isa('B::SV')
                      || ($sv->isa('B::SPECIAL')
                       && $B::specialsv_name[$$sv] ne 'Nullsv');
              }
          }
          else {
              return defined *{$entry_ref}{$type};
          }
      }
      else {
          # a symbol table entry can be -1 (stub), string (stub with prototype),
          # or reference (constant)
          return $type eq 'CODE';
      }
  }
  
  sub get_symbol {
      my ($self, $variable, %opts) = @_;
  
      my ($name, $sigil, $type) = _deconstruct_variable_name($variable);
  
      my $namespace = $self->namespace;
  
      if (!exists $namespace->{$name}) {
          if ($opts{vivify}) {
              $self->add_symbol($variable);
          }
          else {
              return undef;
          }
      }
  
      my $entry_ref = \$namespace->{$name};
  
      if (ref($entry_ref) eq 'GLOB') {
          return *{$entry_ref}{$type};
      }
      else {
          if ($type eq 'CODE') {
              if (BROKEN_GLOB_ASSIGNMENT || defined($self->{package})) {
                  no strict 'refs';
                  return \&{ $self->name . '::' . $name };
              }
  
              # XXX we should really be able to support arbitrary anonymous
              # stashes here... (not just via Package::Anon)
              if (blessed($namespace) && $namespace->isa('Package::Anon')) {
                  # ->can will call gv_init for us, which inflates the glob
                  # don't know how to do this in general
                  $namespace->bless(\(my $foo))->can($name);
              }
              else {
                  confess "Don't know how to inflate a " . ref($entry_ref)
                        . " into a full coderef (perhaps you could use"
                        . " Package::Anon instead of a bare stash?)"
              }
  
              return *{ $namespace->{$name} }{CODE};
          }
          else {
              return undef;
          }
      }
  }
  
  sub get_or_add_symbol {
      my $self = shift;
      $self->get_symbol(@_, vivify => 1);
  }
  
  sub remove_symbol {
      my ($self, $variable) = @_;
  
      my ($name, $sigil, $type) = _deconstruct_variable_name($variable);
  
      # FIXME:
      # no doubt this is grossly inefficient and
      # could be done much easier and faster in XS
  
      my %desc = (
          SCALAR => { sigil => '$', type => 'SCALAR', name => $name },
          ARRAY  => { sigil => '@', type => 'ARRAY',  name => $name },
          HASH   => { sigil => '%', type => 'HASH',   name => $name },
          CODE   => { sigil => '&', type => 'CODE',   name => $name },
          IO     => { sigil => '',  type => 'IO',     name => $name },
      );
      confess "This should never ever ever happen" if !$desc{$type};
  
      my @types_to_store = grep { $type ne $_ && $self->has_symbol($desc{$_}) }
                                keys %desc;
      my %values = map { $_, $self->get_symbol($desc{$_}) } @types_to_store;
  
      $values{SCALAR} = $self->get_symbol($desc{SCALAR})
        if !defined $values{SCALAR}
          && $type ne 'SCALAR'
          && BROKEN_SCALAR_INITIALIZATION;
  
      $self->remove_glob($name);
  
      $self->add_symbol($desc{$_} => $values{$_})
          for grep { defined $values{$_} } keys %values;
  }
  
  sub list_all_symbols {
      my ($self, $type_filter) = @_;
  
      my $namespace = $self->namespace;
      if (HAS_ISA_CACHE) {
          return grep { $_ ne '::ISA::CACHE::' } keys %{$namespace}
              unless defined $type_filter;
      }
      else {
          return keys %{$namespace}
              unless defined $type_filter;
      }
  
      # NOTE:
      # or we can filter based on
      # type (SCALAR|ARRAY|HASH|CODE)
      if ($type_filter eq 'CODE') {
          return grep {
              # any non-typeglob in the symbol table is a constant or stub
              ref(\$namespace->{$_}) ne 'GLOB'
                  # regular subs are stored in the CODE slot of the typeglob
                  || defined(*{$namespace->{$_}}{CODE})
          } keys %{$namespace};
      }
      elsif ($type_filter eq 'SCALAR') {
          return grep {
              !(HAS_ISA_CACHE && $_ eq '::ISA::CACHE::') &&
              (BROKEN_SCALAR_INITIALIZATION
                  ? (ref(\$namespace->{$_}) eq 'GLOB'
                        && defined(${*{$namespace->{$_}}{'SCALAR'}}))
                  : (do {
                        my $entry = \$namespace->{$_};
                        ref($entry) eq 'GLOB'
                            && B::svref_2object($entry)->SV->isa('B::SV')
                    }))
          } keys %{$namespace};
      }
      else {
          return grep {
              ref(\$namespace->{$_}) eq 'GLOB'
                  && defined(*{$namespace->{$_}}{$type_filter})
          } keys %{$namespace};
      }
  }
  
  sub get_all_symbols {
      my ($self, $type_filter) = @_;
  
      my $namespace = $self->namespace;
      return { %{$namespace} } unless defined $type_filter;
  
      return {
          map { $_ => $self->get_symbol({name => $_, type => $type_filter}) }
              $self->list_all_symbols($type_filter)
      }
  }
  
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Package::Stash::PP - pure perl implementation of the Package::Stash API
  
  =head1 VERSION
  
  version 0.37
  
  =head1 SYNOPSIS
  
    use Package::Stash;
  
  =head1 DESCRIPTION
  
  This is a backend for L<Package::Stash> implemented in pure perl, for those without a compiler or who would like to use this inline in scripts.
  
  =head1 BUGS
  
  =over 4
  
  =item * remove_symbol also replaces the associated typeglob
  
  This can cause unexpected behavior when doing manipulation at compile time -
  removing subroutines will still allow them to be called from within the package
  as subroutines (although they will not be available as methods). This can be
  considered a feature in some cases (this is how L<namespace::clean> works, for
  instance), but should not be relied upon - use C<remove_glob> directly if you
  want this behavior.
  
  =item * Some minor memory leaks
  
  The pure perl implementation has a couple minor memory leaks (see the TODO
  tests in t/20-leaks.t) that I'm having a hard time tracking down - these may be
  core perl bugs, it's hard to tell.
  
  =back
  
  Please report any bugs through RT: email
  C<bug-package-stash at rt.cpan.org>, or browse to
  L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Package-Stash>.
  
  =head1 SEE ALSO
  
  =over 4
  
  =item * L<Class::MOP::Package>
  
  This module is a factoring out of code that used to live here
  
  =back
  
  =head1 SUPPORT
  
  You can find this documentation for this module with the perldoc command.
  
      perldoc Package::Stash
  
  You can also look for information at:
  
  =over 4
  
  =item * AnnoCPAN: Annotated CPAN documentation
  
  L<http://annocpan.org/dist/Package-Stash>
  
  =item * CPAN Ratings
  
  L<http://cpanratings.perl.org/d/Package-Stash>
  
  =item * RT: CPAN's request tracker
  
  L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Package-Stash>
  
  =item * Search CPAN
  
  L<http://search.cpan.org/dist/Package-Stash>
  
  =back
  
  =head1 AUTHOR
  
  Jesse Luehrs <doy at tozt dot net>
  
  Mostly copied from code from L<Class::MOP::Package>, by Stevan Little and the
  Moose Cabal.
  
  =for Pod::Coverage BROKEN_ISA_ASSIGNMENT
  add_symbol
  get_all_symbols
  get_or_add_symbol
  get_symbol
  has_symbol
  list_all_symbols
  name
  namespace
  new
  remove_glob
  
  =head1 AUTHOR
  
  Jesse Luehrs <doy@tozt.net>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by Jesse Luehrs.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PACKAGE_STASH_PP

    $main::fatpacked{"Params/Validate.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PARAMS_VALIDATE';
  package Params::Validate;
  
  use 5.008001;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.24';
  
  use Exporter;
  use Module::Implementation;
  use Params::Validate::Constants;
  
  use vars qw( $NO_VALIDATION %OPTIONS $options );
  
  our @ISA = 'Exporter';
  
  my @types = qw(
      SCALAR
      ARRAYREF
      HASHREF
      CODEREF
      GLOB
      GLOBREF
      SCALARREF
      HANDLE
      BOOLEAN
      UNDEF
      OBJECT
  );
  
  our %EXPORT_TAGS = (
      'all' => [
          qw( validate validate_pos validation_options validate_with ),
          @types
      ],
      types => \@types,
  );
  
  our @EXPORT_OK = ( @{ $EXPORT_TAGS{all} }, 'set_options' );
  our @EXPORT = qw( validate validate_pos );
  
  $NO_VALIDATION = $ENV{PERL_NO_VALIDATION};
  
  {
      my $loader = Module::Implementation::build_loader_sub(
          implementations => [ 'XS', 'PP' ],
          symbols         => [
              qw(
                  validate
                  validate_pos
                  validate_with
                  validation_options
                  set_options
                  ),
          ],
      );
  
      $ENV{PARAMS_VALIDATE_IMPLEMENTATION} = 'PP' if $ENV{PV_TEST_PERL};
  
      $loader->();
  }
  
  1;
  
  # ABSTRACT: Validate method/function parameters
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Params::Validate - Validate method/function parameters
  
  =head1 VERSION
  
  version 1.24
  
  =head1 SYNOPSIS
  
      use Params::Validate qw(:all);
  
      # takes named params (hash or hashref)
      sub foo {
          validate(
              @_, {
                  foo => 1,    # mandatory
                  bar => 0,    # optional
              }
          );
      }
  
      # takes positional params
      sub bar {
          # first two are mandatory, third is optional
          validate_pos( @_, 1, 1, 0 );
      }
  
      sub foo2 {
          validate(
              @_, {
                  foo =>
                      # specify a type
                      { type => ARRAYREF },
                  bar =>
                      # specify an interface
                      { can => [ 'print', 'flush', 'frobnicate' ] },
                  baz => {
                      type      => SCALAR,     # a scalar ...
                                               # ... that is a plain integer ...
                      regex     => qr/^\d+$/,
                      callbacks => {           # ... and smaller than 90
                          'less than 90' => sub { shift() < 90 },
                      },
                  }
              }
          );
      }
  
      sub callback_with_custom_error {
          validate(
              @_,
              {
                  foo => callbacks => {
                      'is an integer' => sub {
                          return 1 if $_[0] =~ /^-?[1-9][0-9]*$/;
                          die "$_[0] is not a valid integer value";
                      },
                  }
              }
          );
      }
  
      sub with_defaults {
          my %p = validate(
              @_, {
                  # required
                  foo => 1,
                  # $p{bar} will be 99 if bar is not given. bar is now
                  # optional.
                  bar => { default => 99 }
              }
          );
      }
  
      sub pos_with_defaults {
          my @p = validate_pos( @_, 1, { default => 99 } );
      }
  
      sub sets_options_on_call {
          my %p = validate_with(
              params => \@_,
              spec   => { foo => { type => SCALAR, default => 2 } },
              normalize_keys => sub { $_[0] =~ s/^-//; lc $_[0] },
          );
      }
  
  =head1 DESCRIPTION
  
  The Params::Validate module allows you to validate method or function
  call parameters to an arbitrary level of specificity. At the simplest
  level, it is capable of validating the required parameters were given
  and that no unspecified additional parameters were passed in.
  
  It is also capable of determining that a parameter is of a specific
  type, that it is an object of a certain class hierarchy, that it
  possesses certain methods, or applying validation callbacks to
  arguments.
  
  =head2 EXPORT
  
  The module always exports the C<validate()> and C<validate_pos()>
  functions.
  
  It also has an additional function available for export,
  C<validate_with>, which can be used to validate any type of
  parameters, and set various options on a per-invocation basis.
  
  In addition, it can export the following constants, which are used as
  part of the type checking. These are C<SCALAR>, C<ARRAYREF>,
  C<HASHREF>, C<CODEREF>, C<GLOB>, C<GLOBREF>, and C<SCALARREF>,
  C<UNDEF>, C<OBJECT>, C<BOOLEAN>, and C<HANDLE>. These are explained
  in the section on L<Type Validation|Params::Validate/Type Validation>.
  
  The constants are available via the export tag C<:types>. There is
  also an C<:all> tag which includes all of the constants as well as the
  C<validation_options()> function.
  
  =head1 PARAMETER VALIDATION
  
  The validation mechanisms provided by this module can handle both
  named or positional parameters. For the most part, the same features
  are available for each. The biggest difference is the way that the
  validation specification is given to the relevant subroutine. The
  other difference is in the error messages produced when validation
  checks fail.
  
  When handling named parameters, the module will accept either a hash
  or a hash reference.
  
  Subroutines expecting named parameters should call the C<validate()>
  subroutine like this:
  
      validate(
          @_, {
              parameter1 => validation spec,
              parameter2 => validation spec,
              ...
          }
      );
  
  Subroutines expecting positional parameters should call the
  C<validate_pos()> subroutine like this:
  
      validate_pos( @_, { validation spec }, { validation spec } );
  
  =head2 Mandatory/Optional Parameters
  
  If you just want to specify that some parameters are mandatory and
  others are optional, this can be done very simply.
  
  For a subroutine expecting named parameters, you would do this:
  
      validate( @_, { foo => 1, bar => 1, baz => 0 } );
  
  This says that the "foo" and "bar" parameters are mandatory and that
  the "baz" parameter is optional. The presence of any other
  parameters will cause an error.
  
  For a subroutine expecting positional parameters, you would do this:
  
      validate_pos( @_, 1, 1, 0, 0 );
  
  This says that you expect at least 2 and no more than 4 parameters.
  If you have a subroutine that has a minimum number of parameters but
  can take any maximum number, you can do this:
  
      validate_pos( @_, 1, 1, (0) x (@_ - 2) );
  
  This will always be valid as long as at least two parameters are
  given. A similar construct could be used for the more complex
  validation parameters described further on.
  
  Please note that this:
  
      validate_pos( @_, 1, 1, 0, 1, 1 );
  
  makes absolutely no sense, so don't do it. Any zeros must come at the
  end of the validation specification.
  
  In addition, if you specify that a parameter can have a default, then
  it is considered optional.
  
  =head2 Type Validation
  
  This module supports the following simple types, which can be
  L<exported as constants|/EXPORT>:
  
  =over 4
  
  =item * SCALAR
  
  A scalar which is not a reference, such as C<10> or C<'hello'>. A
  parameter that is undefined is B<not> treated as a scalar. If you
  want to allow undefined values, you will have to specify C<SCALAR |
  UNDEF>.
  
  =item * ARRAYREF
  
  An array reference such as C<[1, 2, 3]> or C<\@foo>.
  
  =item * HASHREF
  
  A hash reference such as C<< { a => 1, b => 2 } >> or C<\%bar>.
  
  =item * CODEREF
  
  A subroutine reference such as C<\&foo_sub> or C<sub { print "hello" }>.
  
  =item * GLOB
  
  This one is a bit tricky. A glob would be something like C<*FOO>, but
  not C<\*FOO>, which is a glob reference. It should be noted that this
  trick:
  
      my $fh = do { local *FH; };
  
  makes C<$fh> a glob, not a glob reference. On the other hand, the
  return value from C<Symbol::gensym> is a glob reference. Either can
  be used as a file or directory handle.
  
  =item * GLOBREF
  
  A glob reference such as C<\*FOO>. See the L<GLOB|GLOB> entry above
  for more details.
  
  =item * SCALARREF
  
  A reference to a scalar such as C<\$x>.
  
  =item * UNDEF
  
  An undefined value
  
  =item * OBJECT
  
  A blessed reference.
  
  =item * BOOLEAN
  
  This is a special option, and is just a shortcut for C<UNDEF | SCALAR>.
  
  =item * HANDLE
  
  This option is also special, and is just a shortcut for C<GLOB |
  GLOBREF>. However, it seems likely that most people interested in
  either globs or glob references are likely to really be interested in
  whether the parameter in question could be a valid file or directory
  handle.
  
  =back
  
  To specify that a parameter must be of a given type when using named
  parameters, do this:
  
      validate(
          @_, {
              foo => { type => SCALAR },
              bar => { type => HASHREF }
          }
      );
  
  If a parameter can be of more than one type, just use the bitwise or
  (C<|>) operator to combine them.
  
      validate( @_, { foo => { type => GLOB | GLOBREF } );
  
  For positional parameters, this can be specified as follows:
  
      validate_pos( @_, { type => SCALAR | ARRAYREF }, { type => CODEREF } );
  
  =head2 Interface Validation
  
  To specify that a parameter is expected to have a certain set of
  methods, we can do the following:
  
      validate(
          @_, {
              foo =>
                  # just has to be able to ->bar
                  { can => 'bar' }
          }
      );
  
   ... or ...
  
      validate(
          @_, {
              foo =>
                  # must be able to ->bar and ->print
                  { can => [qw( bar print )] }
          }
      );
  
  =head2 Class Validation
  
  A word of warning. When constructing your external interfaces, it is
  probably better to specify what methods you expect an object to
  have rather than what class it should be of (or a child of). This
  will make your API much more flexible.
  
  With that said, if you want to validate that an incoming parameter
  belongs to a class (or child class) or classes, do:
  
      validate(
          @_,
          { foo => { isa => 'My::Frobnicator' } }
      );
  
   ... or ...
  
      validate(
          @_,
          # must be both, not either!
          { foo => { isa => [qw( My::Frobnicator IO::Handle )] } }
      );
  
  =head2 Regex Validation
  
  If you want to specify that a given parameter must match a specific
  regular expression, this can be done with "regex" spec key. For
  example:
  
      validate(
          @_,
          { foo => { regex => qr/^\d+$/ } }
      );
  
  The value of the "regex" key may be either a string or a pre-compiled
  regex created via C<qr>.
  
  If the value being checked against a regex is undefined, the regex is
  explicitly checked against the empty string ('') instead, in order to
  avoid "Use of uninitialized value" warnings.
  
  The C<Regexp::Common> module on CPAN is an excellent source of regular
  expressions suitable for validating input.
  
  =head2 Callback Validation
  
  If none of the above are enough, it is possible to pass in one or more
  callbacks to validate the parameter. The callback will be given the
  B<value> of the parameter as its first argument. Its second argument
  will be all the parameters, as a reference to either a hash or array.
  Callbacks are specified as hash reference. The key is an id for the
  callback (used in error messages) and the value is a subroutine
  reference, such as:
  
      validate(
          @_,
          {
              foo => {
                  callbacks => {
                      'smaller than a breadbox' => sub { shift() < $breadbox },
                      'green or blue'           => sub {
                          return 1 if $_[0] eq 'green' || $_[0] eq 'blue';
                          die "$_[0] is not green or blue!";
                      }
                  }
              }
          }
      );
  
      validate(
          @_, {
              foo => {
                  callbacks => {
                      'bigger than baz' => sub { $_[0] > $_[1]->{baz} }
                  }
              }
          }
      );
  
  The callback should return a true value if the value is valid. If not, it can
  return false or die. If you return false, a generic error message will be
  thrown by C<Params::Validate>.
  
  If your callback dies instead you can provide a custom error message. If the
  callback dies with a plain string, this string will be appended to an
  exception message generated by C<Params::Validate>. If the callback dies with
  a reference (blessed or not), then this will be rethrown as-is by
  C<Params::Validate>.
  
  =head2 Untainting
  
  If you want values untainted, set the "untaint" key in a spec hashref
  to a true value, like this:
  
      my %p = validate(
          @_, {
              foo => { type => SCALAR, untaint => 1 },
              bar => { type => ARRAYREF }
          }
      );
  
  This will untaint the "foo" parameter if the parameters are valid.
  
  Note that untainting is only done if I<all parameters> are valid.
  Also, only the return values are untainted, not the original values
  passed into the validation function.
  
  Asking for untainting of a reference value will not do anything, as
  C<Params::Validate> will only attempt to untaint the reference itself.
  
  =head2 Mandatory/Optional Revisited
  
  If you want to specify something such as type or interface, plus the
  fact that a parameter can be optional, do this:
  
      validate(
          @_, {
              foo => { type => SCALAR },
              bar => { type => ARRAYREF, optional => 1 }
          }
      );
  
  or this for positional parameters:
  
      validate_pos(
          @_,
          { type => SCALAR },
          { type => ARRAYREF, optional => 1 }
      );
  
  By default, parameters are assumed to be mandatory unless specified as
  optional.
  
  =head2 Dependencies
  
  It also possible to specify that a given optional parameter depends on
  the presence of one or more other optional parameters.
  
      validate(
          @_, {
              cc_number => {
                  type     => SCALAR,
                  optional => 1,
                  depends  => [ 'cc_expiration', 'cc_holder_name' ],
              },
              cc_expiration  => { type => SCALAR, optional => 1 },
              cc_holder_name => { type => SCALAR, optional => 1 },
          }
      );
  
  In this case, "cc_number", "cc_expiration", and "cc_holder_name" are
  all optional. However, if "cc_number" is provided, then
  "cc_expiration" and "cc_holder_name" must be provided as well.
  
  This allows you to group together sets of parameters that all must be
  provided together.
  
  The C<validate_pos()> version of dependencies is slightly different,
  in that you can only depend on one other parameter. Also, if for
  example, the second parameter 2 depends on the fourth parameter, then
  it implies a dependency on the third parameter as well. This is
  because if the fourth parameter is required, then the user must also
  provide a third parameter so that there can be four parameters in
  total.
  
  C<Params::Validate> will die if you try to depend on a parameter not
  declared as part of your parameter specification.
  
  =head2 Specifying defaults
  
  If the C<validate()> or C<validate_pos()> functions are called in a list
  context, they will return a hash or containing the original parameters plus
  defaults as indicated by the validation spec.
  
  If the function is not called in a list context, providing a default
  in the validation spec still indicates that the parameter is optional.
  
  The hash or array returned from the function will always be a copy of
  the original parameters, in order to leave C<@_> untouched for the
  calling function.
  
  Simple examples of defaults would be:
  
      my %p = validate( @_, { foo => 1, bar => { default => 99 } } );
  
      my @p = validate_pos( @_, 1, { default => 99 } );
  
  In scalar context, a hash reference or array reference will be
  returned, as appropriate.
  
  =head1 USAGE NOTES
  
  =head2 Validation failure
  
  By default, when validation fails C<Params::Validate> calls
  C<Carp::confess()>. This can be overridden by setting the C<on_fail>
  option, which is described in the L<"GLOBAL" OPTIONS|"GLOBAL" OPTIONS>
  section.
  
  =head2 Method calls
  
  When using this module to validate the parameters passed to a method
  call, you will probably want to remove the class/object from the
  parameter list B<before> calling C<validate()> or C<validate_pos()>.
  If your method expects named parameters, then this is necessary for
  the C<validate()> function to actually work, otherwise C<@_> will not
  be usable as a hash, because it will first have your object (or
  class) B<followed> by a set of keys and values.
  
  Thus the idiomatic usage of C<validate()> in a method call will look
  something like this:
  
      sub method {
          my $self = shift;
  
          my %params = validate(
              @_, {
                  foo => 1,
                  bar => { type => ARRAYREF },
              }
          );
      }
  
  =head2 Speeding Up Validation
  
  In most cases, the validation spec will remain the same for each call to a
  subroutine. In that case, you can speed up validation by defining the
  validation spec just once, rather than on each call to the subroutine:
  
      my %spec = ( ... );
      sub foo {
          my %params = validate( @_, \%spec );
      }
  
  You can also use the C<state> feature to do this:
  
      use feature 'state';
  
      sub foo {
          state $spec = { ... };
          my %params = validate( @_, $spec );
      }
  
  =head1 "GLOBAL" OPTIONS
  
  Because the API for the C<validate()> and C<validate_pos()> functions does not
  make it possible to specify any options other than the validation spec, it is
  possible to set some options as pseudo-'globals'. These allow you to specify
  such things as whether or not the validation of named parameters should be
  case sensitive, for one example.
  
  These options are called pseudo-'globals' because these settings are
  B<only applied to calls originating from the package that set the
  options>.
  
  In other words, if I am in package C<Foo> and I call
  C<validation_options()>, those options are only in effect when I call
  C<validate()> from package C<Foo>.
  
  While this is quite different from how most other modules operate, I
  feel that this is necessary in able to make it possible for one
  module/application to use Params::Validate while still using other
  modules that also use Params::Validate, perhaps with different
  options set.
  
  The downside to this is that if you are writing an app with a standard
  calling style for all functions, and your app has ten modules, B<each
  module must include a call to C<validation_options()>>. You could of
  course write a module that all your modules use which uses various
  trickery to do this when imported.
  
  =head2 Options
  
  =over 4
  
  =item * normalize_keys => $callback
  
  This option is only relevant when dealing with named parameters.
  
  This callback will be used to transform the hash keys of both the
  parameters and the parameter spec when C<validate()> or
  C<validate_with()> are called.
  
  Any alterations made by this callback will be reflected in the
  parameter hash that is returned by the validation function. For
  example:
  
      sub foo {
          return validate_with(
              params => \@_,
              spec   => { foo => { type => SCALAR } },
              normalize_keys =>
                  sub { my $k = shift; $k =~ s/^-//; return uc $k },
          );
  
      }
  
      %p = foo( foo => 20 );
  
      # $p{FOO} is now 20
  
      %p = foo( -fOo => 50 );
  
      # $p{FOO} is now 50
  
  The callback must return a defined value.
  
  If a callback is given then the deprecated "ignore_case" and
  "strip_leading" options are ignored.
  
  =item * allow_extra => $boolean
  
  If true, then the validation routine will allow extra parameters not
  named in the validation specification. In the case of positional
  parameters, this allows an unlimited number of maximum parameters
  (though a minimum may still be set). Defaults to false.
  
  =item * on_fail => $callback
  
  If given, this callback will be called whenever a validation check
  fails. It will be called with a single parameter, which will be a
  string describing the failure. This is useful if you wish to have
  this module throw exceptions as objects rather than as strings, for
  example.
  
  This callback is expected to C<die()> internally. If it does not, the
  validation will proceed onwards, with unpredictable results.
  
  The default is to simply use the Carp module's C<confess()> function.
  
  =item * stack_skip => $number
  
  This tells Params::Validate how many stack frames to skip when finding
  a subroutine name to use in error messages. By default, it looks one
  frame back, at the immediate caller to C<validate()> or
  C<validate_pos()>. If this option is set, then the given number of
  frames are skipped instead.
  
  =item * ignore_case => $boolean
  
  DEPRECATED
  
  This is only relevant when dealing with named parameters. If it is
  true, then the validation code will ignore the case of parameter
  names. Defaults to false.
  
  =item * strip_leading => $characters
  
  DEPRECATED
  
  This too is only relevant when dealing with named parameters. If this
  is given then any parameters starting with these characters will be
  considered equivalent to parameters without them entirely. For
  example, if this is specified as '-', then C<-foo> and C<foo> would be
  considered identical.
  
  =back
  
  =head1 PER-INVOCATION OPTIONS
  
  The C<validate_with()> function can be used to set the options listed
  above on a per-invocation basis. For example:
  
      my %p = validate_with(
          params => \@_,
          spec   => {
              foo => { type    => SCALAR },
              bar => { default => 10 }
          },
          allow_extra => 1,
      );
  
  In addition to the options listed above, it is also possible to set
  the option "called", which should be a string. This string will be
  used in any error messages caused by a failure to meet the validation
  spec.
  
  This subroutine will validate named parameters as a hash if the "spec"
  parameter is a hash reference. If it is an array reference, the
  parameters are assumed to be positional.
  
      my %p = validate_with(
          params => \@_,
          spec   => {
              foo => { type    => SCALAR },
              bar => { default => 10 }
          },
          allow_extra => 1,
          called      => 'The Quux::Baz class constructor',
      );
  
      my @p = validate_with(
          params => \@_,
          spec   => [
              { type    => SCALAR },
              { default => 10 }
          ],
          allow_extra => 1,
          called      => 'The Quux::Baz class constructor',
      );
  
  =head1 DISABLING VALIDATION
  
  If the environment variable C<PERL_NO_VALIDATION> is set to something
  true, then validation is turned off. This may be useful if you only
  want to use this module during development but don't want the speed
  hit during production.
  
  The only error that will be caught will be when an odd number of
  parameters are passed into a function/method that expects a hash.
  
  If you want to selectively turn validation on and off at runtime, you
  can directly set the C<$Params::Validate::NO_VALIDATION> global
  variable. It is B<strongly> recommended that you B<localize> any
  changes to this variable, because other modules you are using may
  expect validation to be on when they execute. For example:
  
      {
          local $Params::Validate::NO_VALIDATION = 1;
  
          # no error
          foo( bar => 2 );
      }
  
      # error
      foo( bar => 2 );
  
      sub foo {
          my %p = validate( @_, { foo => 1 } );
          ...;
      }
  
  But if you want to shoot yourself in the foot and just turn it off, go
  ahead!
  
  =head1 SPECIFYING AN IMPLEMENTATION
  
  This module ships with two equivalent implementations, one in XS and one in
  pure Perl. By default, it will try to load the XS version and fall back to the
  pure Perl implementation as needed. If you want to request a specific version,
  you can set the C<PARAMS_VALIDATE_IMPLEMENTATION> environment variable to
  either C<XS> or C<PP>. If the implementation you ask for cannot be loaded,
  then this module will die when loaded.
  
  =head1 TAINT MODE
  
  The XS implementation of this module has some problems Under taint mode with
  versions of Perl before 5.14. If validation I<fails>, then instead of getting
  the expected error message you'll get a message like "Insecure dependency in
  eval_sv". This can be worked around by either untainting the arguments
  yourself, using the pure Perl implementation, or upgrading your Perl.
  
  =head1 LIMITATIONS
  
  Right now there is no way (short of a callback) to specify that
  something must be of one of a list of classes, or that it must possess
  one of a list of methods. If this is desired, it can be added in the
  future.
  
  Ideally, there would be only one validation function. If someone
  figures out how to do this, please let me know.
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|http://rt.cpan.org/Public/Dist/Display.html?Name=Params-Validate>
  (or L<bug-params-validate@rt.cpan.org|mailto:bug-params-validate@rt.cpan.org>).
  
  I am also usually active on IRC as 'drolsky' on C<irc://irc.perl.org>.
  
  =head1 DONATIONS
  
  If you'd like to thank me for the work I've done on this module, please
  consider making a "donation" to me via PayPal. I spend a lot of free time
  creating free software, and would appreciate any support you'd care to offer.
  
  Please note that B<I am not suggesting that you must do this> in order for me
  to continue working on this particular software. I will continue to do so,
  inasmuch as I have in the past, for as long as it interests me.
  
  Similarly, a donation made in this way will probably not make me work on this
  software much more, unless I get so many donations that I can consider working
  on free software full time (let's all have a chuckle at that together).
  
  To donate, log into PayPal and send money to autarch@urth.org, or use the
  button at L<http://www.urth.org/~autarch/fs-donation.html>.
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Dave Rolsky <autarch@urth.org>
  
  =item *
  
  Ilya Martynov <ilya@martynov.org>
  
  =back
  
  =head1 CONTRIBUTORS
  
  =for stopwords Ivan Bessarabov J.R. Mash Noel Maddy Olivier Mengué Tony Cook Vincent Pit
  
  =over 4
  
  =item *
  
  Ivan Bessarabov <ivan@bessarabov.ru>
  
  =item *
  
  J.R. Mash <jmash.code@gmail.com>
  
  =item *
  
  Noel Maddy <zhtwnpanta@gmail.com>
  
  =item *
  
  Olivier Mengué <dolmen@cpan.org>
  
  =item *
  
  Tony Cook <tony@develop-help.com>
  
  =item *
  
  Vincent Pit <perl@profvince.com>
  
  =back
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2001 - 2016 by Dave Rolsky and Ilya Martynov.
  
  This is free software, licensed under:
  
    The Artistic License 2.0 (GPL Compatible)
  
  =cut
PARAMS_VALIDATE

    $main::fatpacked{"Params/Validate/Constants.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PARAMS_VALIDATE_CONSTANTS';
  package Params::Validate::Constants;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.24';
  
  our @ISA = 'Exporter';
  
  our @EXPORT = qw(
      SCALAR
      ARRAYREF
      HASHREF
      CODEREF
      GLOB
      GLOBREF
      SCALARREF
      HANDLE
      BOOLEAN
      UNDEF
      OBJECT
      UNKNOWN
  );
  
  sub SCALAR ()    { 1 }
  sub ARRAYREF ()  { 2 }
  sub HASHREF ()   { 4 }
  sub CODEREF ()   { 8 }
  sub GLOB ()      { 16 }
  sub GLOBREF ()   { 32 }
  sub SCALARREF () { 64 }
  sub UNKNOWN ()   { 128 }
  sub UNDEF ()     { 256 }
  sub OBJECT ()    { 512 }
  
  sub HANDLE ()  { 16 | 32 }
  sub BOOLEAN () { 1 | 256 }
  
  1;
PARAMS_VALIDATE_CONSTANTS

    $main::fatpacked{"Params/Validate/PP.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PARAMS_VALIDATE_PP';
  package Params::Validate::PP;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.24';
  
  use Params::Validate::Constants;
  use Scalar::Util 1.10 ();
  
  our $options;
  
  # Various internals notes (for me and any future readers of this
  # monstrosity):
  #
  # - A lot of the weirdness is _intentional_, because it optimizes for
  #   the _success_ case.  It does not really matter how slow the code is
  #   after it enters a path that leads to reporting failure.  But the
  #   "success" path should be as fast as possible.
  #
  # -- We only calculate $called as needed for this reason, even though it
  #    means copying code all over.
  #
  # - All the validation routines need to be careful never to alter the
  #   references that are passed.
  #
  # -- The code assumes that _most_ callers will not be using the
  #    skip_leading or ignore_case features.  In order to not alter the
  #    references passed in, we copy them wholesale when normalizing them
  #    to make these features work.  This is slower but lets us be faster
  #    when not using them.
  
  # Matt Sergeant came up with this prototype, which slickly takes the
  # first array (which should be the caller's @_), and makes it a
  # reference.  Everything after is the parameters for validation.
  sub validate_pos (\@@) {
      return if $Params::Validate::NO_VALIDATION && !defined wantarray;
  
      my $p = shift;
  
      my @specs = @_;
  
      my @p = @$p;
      if ($Params::Validate::NO_VALIDATION) {
  
          # if the spec is bigger that's where we can start adding
          # defaults
          for ( my $x = $#p + 1; $x <= $#specs; $x++ ) {
              $p[$x] = $specs[$x]->{default}
                  if ref $specs[$x] && exists $specs[$x]->{default};
          }
  
          return wantarray ? @p : \@p;
      }
  
      # I'm too lazy to pass these around all over the place.
      local $options ||= _get_options( ( caller(0) )[0] )
          unless defined $options;
  
      my $min = 0;
  
      while (1) {
          last
              unless (
              ref $specs[$min]
              ? !( exists $specs[$min]->{default} || $specs[$min]->{optional} )
              : $specs[$min]
              );
  
          $min++;
      }
  
      my $max = scalar @specs;
  
      my $actual = scalar @p;
      unless ( $actual >= $min
          && ( $options->{allow_extra} || $actual <= $max ) ) {
          my $minmax = (
              $options->{allow_extra}
              ? "at least $min"
              : ( $min != $max ? "$min - $max" : $max )
          );
  
          my $val = $options->{allow_extra} ? $min : $max;
          $minmax .= $val != 1 ? ' were' : ' was';
  
          my $called = _get_called();
  
          $options->{on_fail}->( "$actual parameter"
                  . ( $actual != 1 ? 's'    : '' ) . " "
                  . ( $actual != 1 ? 'were' : 'was' )
                  . " passed to $called but $minmax expected\n" );
      }
  
      my $bigger = $#p > $#specs ? $#p : $#specs;
      foreach ( 0 .. $bigger ) {
          my $spec = $specs[$_];
  
          next unless ref $spec;
  
          if ( $_ <= $#p ) {
              _validate_one_param(
                  $p[$_], \@p, $spec,
                  'Parameter #' . ( $_ + 1 ) . ' (%s)'
              );
          }
  
          $p[$_] = $spec->{default} if $_ > $#p && exists $spec->{default};
      }
  
      _validate_pos_depends( \@p, \@specs );
  
      foreach (
          grep {
                     defined $p[$_]
                  && !ref $p[$_]
                  && ref $specs[$_]
                  && $specs[$_]{untaint}
          } 0 .. $bigger
          ) {
          ( $p[$_] ) = $p[$_] =~ /(.+)/;
      }
  
      return wantarray ? @p : \@p;
  }
  
  sub _validate_pos_depends {
      my ( $p, $specs ) = @_;
  
      for my $p_idx ( 0 .. $#$p ) {
          my $spec = $specs->[$p_idx];
  
          next
              unless $spec
              && UNIVERSAL::isa( $spec, 'HASH' )
              && exists $spec->{depends};
  
          my $depends = $spec->{depends};
  
          if ( ref $depends ) {
              require Carp;
              local $Carp::CarpLevel = 2;
              Carp::croak(
                  "Arguments to 'depends' for validate_pos() must be a scalar");
          }
  
          my $p_size = scalar @$p;
          if ( $p_size < $depends - 1 ) {
              my $error
                  = (   "Parameter #"
                      . ( $p_idx + 1 )
                      . " depends on parameter #"
                      . $depends
                      . ", which was not given" );
  
              $options->{on_fail}->($error);
          }
      }
      return 1;
  }
  
  sub _validate_named_depends {
      my ( $p, $specs ) = @_;
  
      foreach my $pname ( keys %$p ) {
          my $spec = $specs->{$pname};
  
          next
              unless $spec
              && UNIVERSAL::isa( $spec, 'HASH' )
              && $spec->{depends};
  
          unless ( UNIVERSAL::isa( $spec->{depends}, 'ARRAY' )
              || !ref $spec->{depends} ) {
              require Carp;
              local $Carp::CarpLevel = 2;
              Carp::croak(
                  "Arguments to 'depends' must be a scalar or arrayref");
          }
  
          foreach my $depends_name (
              ref $spec->{depends}
              ? @{ $spec->{depends} }
              : $spec->{depends}
              ) {
              unless ( exists $p->{$depends_name} ) {
                  my $error
                      = (   "Parameter '$pname' depends on parameter '"
                          . $depends_name
                          . "', which was not given" );
  
                  $options->{on_fail}->($error);
              }
          }
      }
  }
  
  sub validate (\@$) {
      return if $Params::Validate::NO_VALIDATION && !defined wantarray;
  
      my $p = $_[0];
  
      my $specs = $_[1];
      local $options = _get_options( ( caller(0) )[0] ) unless defined $options;
  
      if ( ref $p eq 'ARRAY' ) {
  
          # we were called as validate( @_, ... ) where @_ has a
          # single element, a hash reference
          if ( ref $p->[0] ) {
              $p = { %{ $p->[0] } };
          }
          elsif ( @$p % 2 ) {
              my $called = _get_called();
  
              $options->{on_fail}
                  ->(   "Odd number of parameters in call to $called "
                      . "when named parameters were expected\n" );
          }
          else {
              $p = {@$p};
          }
      }
  
      if ( $options->{normalize_keys} ) {
          $specs = _normalize_callback( $specs, $options->{normalize_keys} );
          $p     = _normalize_callback( $p,     $options->{normalize_keys} );
      }
      elsif ( $options->{ignore_case} || $options->{strip_leading} ) {
          $specs = _normalize_named($specs);
          $p     = _normalize_named($p);
      }
  
      if ($Params::Validate::NO_VALIDATION) {
          return (
              wantarray
              ? (
  
                  # this is a hash containing just the defaults
                  (
                      map { $_ => $specs->{$_}->{default} }
                          grep {
                          ref $specs->{$_}
                              && exists $specs->{$_}->{default}
                          }
                          keys %$specs
                  ),
                  (
                      ref $p eq 'ARRAY'
                      ? (
                          ref $p->[0]
                          ? %{ $p->[0] }
                          : @$p
                          )
                      : %$p
                  )
                  )
              : do {
                  my $ref = (
                      ref $p eq 'ARRAY'
                      ? (
                          ref $p->[0]
                          ? $p->[0]
                          : {@$p}
                          )
                      : $p
                  );
  
                  foreach (
                      grep {
                          ref $specs->{$_}
                              && exists $specs->{$_}->{default}
                      }
                      keys %$specs
                      ) {
                      $ref->{$_} = $specs->{$_}->{default}
                          unless exists $ref->{$_};
                  }
  
                  return $ref;
                  }
          );
      }
  
      _validate_named_depends( $p, $specs );
  
      unless ( $options->{allow_extra} ) {
          if ( my @unmentioned = grep { !exists $specs->{$_} } keys %$p ) {
              my $called = _get_called();
  
              $options->{on_fail}->( "The following parameter"
                      . ( @unmentioned > 1 ? 's were' : ' was' )
                      . " passed in the call to $called but "
                      . ( @unmentioned > 1 ? 'were' : 'was' )
                      . " not listed in the validation options: @unmentioned\n"
              );
          }
      }
  
      my @missing;
  
      # the iterator needs to be reset in case the same hashref is being
      # passed to validate() on successive calls, because we may not go
      # through all the hash's elements
      keys %$specs;
  OUTER:
      while ( my ( $key, $spec ) = each %$specs ) {
          if (
              !exists $p->{$key}
              && (
                  ref $spec
                  ? !(
                      do {
  
                          # we want to short circuit the loop here if we
                          # can assign a default, because there's no need
                          # check anything else at all.
                          if ( exists $spec->{default} ) {
                              $p->{$key} = $spec->{default};
                              next OUTER;
                          }
                      }
                      || do {
  
                          # Similarly, an optional parameter that is
                          # missing needs no additional processing.
                          next OUTER if $spec->{optional};
                      }
                  )
                  : $spec
              )
              ) {
              push @missing, $key;
          }
  
          # Can't validate a non hashref spec beyond the presence or
          # absence of the parameter.
          elsif ( ref $spec ) {
              my $value = defined $p->{$key} ? qq|"$p->{$key}"| : 'undef';
              _validate_one_param(
                  $p->{$key}, $p, $spec,
                  qq{The '$key' parameter (%s)}
              );
          }
      }
  
      if (@missing) {
          my $called = _get_called();
  
          my $missing = join ', ', map {"'$_'"} @missing;
          $options->{on_fail}->( "Mandatory parameter"
                  . ( @missing > 1 ? 's' : '' )
                  . " $missing missing in call to $called\n" );
      }
  
      # do untainting after we know everything passed
      foreach my $key (
          grep {
                     defined $p->{$_}
                  && !ref $p->{$_}
                  && ref $specs->{$_}
                  && $specs->{$_}{untaint}
          }
          keys %$p
          ) {
          ( $p->{$key} ) = $p->{$key} =~ /(.+)/;
      }
  
      return wantarray ? %$p : $p;
  }
  
  sub validate_with {
      return if $Params::Validate::NO_VALIDATION && !defined wantarray;
  
      my %p = @_;
  
      local $options = _get_options( ( caller(0) )[0], %p );
  
      unless ($Params::Validate::NO_VALIDATION) {
          unless ( exists $options->{called} ) {
              $options->{called} = ( caller( $options->{stack_skip} ) )[3];
          }
  
      }
  
      if ( UNIVERSAL::isa( $p{spec}, 'ARRAY' ) ) {
          return validate_pos( @{ $p{params} }, @{ $p{spec} } );
      }
      else {
  
          # intentionally ignore the prototype because this contains
          # either an array or hash reference, and validate() will
          # handle either one properly
          return &validate( $p{params}, $p{spec} );
      }
  }
  
  sub _normalize_callback {
      my ( $p, $func ) = @_;
  
      my %new;
  
      foreach my $key ( keys %$p ) {
          my $new_key = $func->($key);
  
          unless ( defined $new_key ) {
              die
                  "The normalize_keys callback did not return a defined value when normalizing the key '$key'";
          }
  
          if ( exists $new{$new_key} ) {
              die
                  "The normalize_keys callback returned a key that already exists, '$new_key', when normalizing the key '$key'";
          }
  
          $new{$new_key} = $p->{$key};
      }
  
      return \%new;
  }
  
  sub _normalize_named {
  
      # intentional copy so we don't destroy original
      my %h = ( ref $_[0] ) =~ /ARRAY/ ? @{ $_[0] } : %{ $_[0] };
  
      if ( $options->{ignore_case} ) {
          $h{ lc $_ } = delete $h{$_} for keys %h;
      }
  
      if ( $options->{strip_leading} ) {
          foreach my $key ( keys %h ) {
              my $new;
              ( $new = $key ) =~ s/^\Q$options->{strip_leading}\E//;
              $h{$new} = delete $h{$key};
          }
      }
  
      return \%h;
  }
  
  my %Valid = map { $_ => 1 }
      qw( callbacks can default depends isa optional regex type untaint  );
  
  sub _validate_one_param {
      my ( $value, $params, $spec, $id ) = @_;
  
      # for my $key ( keys %{$spec} ) {
      #     unless ( $Valid{$key} ) {
      #         $options->{on_fail}
      #             ->(qq{"$key" is not an allowed validation spec key});
      #     }
      # }
  
      if ( exists $spec->{type} ) {
          unless ( defined $spec->{type}
              && Scalar::Util::looks_like_number( $spec->{type} )
              && $spec->{type} > 0 ) {
              my $msg
                  = "$id has a type specification which is not a number. It is ";
              if ( defined $spec->{type} ) {
                  $msg .= "a string - $spec->{type}";
              }
              else {
                  $msg .= "undef";
              }
  
              $msg
                  .= ".\n Use the constants exported by Params::Validate to declare types.";
  
              $options->{on_fail}->( sprintf( $msg, _stringify($value) ) );
          }
  
          unless ( _get_type($value) & $spec->{type} ) {
              my $type = _get_type($value);
  
              my @is      = _typemask_to_strings($type);
              my @allowed = _typemask_to_strings( $spec->{type} );
              my $article = $is[0] =~ /^[aeiou]/i ? 'an' : 'a';
  
              my $called = _get_called(1);
  
              $options->{on_fail}->(
                  sprintf(
                      "$id to $called was $article '@is', which "
                          . "is not one of the allowed types: @allowed\n",
                      _stringify($value)
                  )
              );
          }
      }
  
      # short-circuit for common case
      return
          unless ( $spec->{isa}
          || $spec->{can}
          || $spec->{callbacks}
          || $spec->{regex} );
  
      if ( exists $spec->{isa} ) {
          foreach ( ref $spec->{isa} ? @{ $spec->{isa} } : $spec->{isa} ) {
              unless (
                  do {
                      local $@ = q{};
                      eval { $value->isa($_) };
                  }
                  ) {
                  my $is = ref $value ? ref $value : 'plain scalar';
                  my $article1 = $_ =~ /^[aeiou]/i  ? 'an' : 'a';
                  my $article2 = $is =~ /^[aeiou]/i ? 'an' : 'a';
  
                  my $called = _get_called(1);
  
                  $options->{on_fail}->(
                      sprintf(
                                "$id to $called was not $article1 '$_' "
                              . "(it is $article2 $is)\n", _stringify($value)
                      )
                  );
              }
          }
      }
  
      if ( exists $spec->{can} ) {
          foreach ( ref $spec->{can} ? @{ $spec->{can} } : $spec->{can} ) {
              unless (
                  do {
                      local $@ = q{};
                      eval { $value->can($_) };
                  }
                  ) {
                  my $called = _get_called(1);
  
                  $options->{on_fail}->(
                      sprintf(
                          "$id to $called does not have the method: '$_'\n",
                          _stringify($value)
                      )
                  );
              }
          }
      }
  
      if ( $spec->{callbacks} ) {
          unless ( UNIVERSAL::isa( $spec->{callbacks}, 'HASH' ) ) {
              my $called = _get_called(1);
  
              $options->{on_fail}->(
                  "'callbacks' validation parameter for $called must be a hash reference\n"
              );
          }
  
          foreach ( keys %{ $spec->{callbacks} } ) {
              unless ( UNIVERSAL::isa( $spec->{callbacks}{$_}, 'CODE' ) ) {
                  my $called = _get_called(1);
  
                  $options->{on_fail}->(
                      "callback '$_' for $called is not a subroutine reference\n"
                  );
              }
  
              my $ok;
              my $e = do {
                  local $@ = q{};
                  local $SIG{__DIE__};
                  $ok = eval { $spec->{callbacks}{$_}->( $value, $params ) };
                  $@;
              };
  
              if ( !$ok ) {
                  my $called = _get_called(1);
  
                  if ( ref $e ) {
                      $options->{on_fail}->($e);
                  }
                  else {
                      my $msg = "$id to $called did not pass the '$_' callback";
                      $msg .= ": $e" if length $e;
                      $msg .= "\n";
                      $options->{on_fail}->( sprintf( $msg, _stringify($value) ) );
                  }
              }
          }
      }
  
      if ( exists $spec->{regex} ) {
          unless ( ( defined $value ? $value : '' ) =~ /$spec->{regex}/ ) {
              my $called = _get_called(1);
  
              $options->{on_fail}->(
                  sprintf(
                      "$id to $called did not pass regex check\n",
                      _stringify($value)
                  )
              );
          }
      }
  }
  
  {
      # if it UNIVERSAL::isa the string on the left then its the type on
      # the right
      my %isas = (
          'ARRAY'  => ARRAYREF,
          'HASH'   => HASHREF,
          'CODE'   => CODEREF,
          'GLOB'   => GLOBREF,
          'SCALAR' => SCALARREF,
          'REGEXP' => SCALARREF,
      );
      my %simple_refs = map { $_ => 1 } keys %isas;
  
      sub _get_type {
          return UNDEF unless defined $_[0];
  
          my $ref = ref $_[0];
          unless ($ref) {
  
              # catches things like:  my $fh = do { local *FH; };
              return GLOB if UNIVERSAL::isa( \$_[0], 'GLOB' );
              return SCALAR;
          }
  
          return $isas{$ref} if $simple_refs{$ref};
  
          foreach ( keys %isas ) {
              return $isas{$_} | OBJECT if UNIVERSAL::isa( $_[0], $_ );
          }
  
          # I really hope this never happens.
          return UNKNOWN;
      }
  }
  
  {
      my %type_to_string = (
          SCALAR()    => 'scalar',
          ARRAYREF()  => 'arrayref',
          HASHREF()   => 'hashref',
          CODEREF()   => 'coderef',
          GLOB()      => 'glob',
          GLOBREF()   => 'globref',
          SCALARREF() => 'scalarref',
          UNDEF()     => 'undef',
          OBJECT()    => 'object',
          UNKNOWN()   => 'unknown',
      );
  
      sub _typemask_to_strings {
          my $mask = shift;
  
          my @types;
          foreach (
              SCALAR,    ARRAYREF, HASHREF, CODEREF, GLOB, GLOBREF,
              SCALARREF, UNDEF,    OBJECT,  UNKNOWN
              ) {
              push @types, $type_to_string{$_} if $mask & $_;
          }
          return @types ? @types : ('unknown');
      }
  }
  
  {
      my %defaults = (
          ignore_case   => 0,
          strip_leading => 0,
          allow_extra   => 0,
          on_fail       => sub {
              require Carp;
              Carp::croak( $_[0] );
          },
          stack_skip     => 1,
          normalize_keys => undef,
      );
  
      *set_options = \&validation_options;
  
      sub validation_options {
          my %opts = @_;
  
          my $caller = caller;
  
          foreach ( keys %defaults ) {
              $opts{$_} = $defaults{$_} unless exists $opts{$_};
          }
  
          $Params::Validate::OPTIONS{$caller} = \%opts;
      }
  
      sub _get_options {
          my $caller = shift;
  
          if (@_) {
  
              return (
                  $Params::Validate::OPTIONS{$caller}
                  ? {
                      %{ $Params::Validate::OPTIONS{$caller} },
                      @_
                      }
                  : { %defaults, @_ }
              );
          }
          else {
              return (
                  exists $Params::Validate::OPTIONS{$caller}
                  ? $Params::Validate::OPTIONS{$caller}
                  : \%defaults
              );
          }
      }
  }
  
  sub _get_called {
      my $extra_skip = $_[0] || 0;
  
      # always add one more for this sub
      $extra_skip++;
  
      my $called = (
          exists $options->{called}
          ? $options->{called}
          : ( caller( $options->{stack_skip} + $extra_skip ) )[3]
      );
  
      $called = '(unknown)' unless defined $called;
  
      return $called;
  }
  
  sub _stringify {
      return defined $_[0] ? qq{"$_[0]"} : 'undef';
  }
  
  1;
PARAMS_VALIDATE_PP

    $main::fatpacked{"Params/Validate/XS.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PARAMS_VALIDATE_XS';
  package Params::Validate::XS;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.24';
  
  use Carp;
  
  my $default_fail = sub {
      Carp::confess( $_[0] );
  };
  
  {
      my %defaults = (
          ignore_case    => 0,
          strip_leading  => 0,
          allow_extra    => 0,
          on_fail        => $default_fail,
          stack_skip     => 1,
          normalize_keys => undef,
      );
  
      *set_options = \&validation_options;
  
      sub validation_options {
          my %opts = @_;
  
          my $caller = caller;
  
          foreach ( keys %defaults ) {
              $opts{$_} = $defaults{$_} unless exists $opts{$_};
          }
  
          $Params::Validate::OPTIONS{$caller} = \%opts;
      }
  
      use XSLoader;
      XSLoader::load(
          __PACKAGE__,
          exists $Params::Validate::XS::{VERSION}
          ? ${ $Params::Validate::XS::{VERSION} }
          : (),
      );
  }
  
  sub _check_regex_from_xs {
      return ( defined $_[0] ? $_[0] : '' ) =~ /$_[1]/ ? 1 : 0;
  }
  
  1;
PARAMS_VALIDATE_XS

    $main::fatpacked{"Parse/VarName.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PARSE_VARNAME';
  package Parse::VarName;
  
  our $DATE = '2016-06-14'; # DATE
  our $VERSION = '0.03'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(split_varname_words);
  
  our %SPEC;
  
  $SPEC{':package'} = {
      v => 1.1,
      summary => 'Routines to parse variable name',
  };
  
  # cannot be put inside sub, warning "Variable %s will not stay shared"
  my @res;
  
  $SPEC{split_varname_words} = {
      v => 1.1,
      summary => 'Split words found in variable name',
      description => <<'_',
  
  Try to split words found in a variable name, e.g. mTime -> [m, Time], foo1Bar ->
  [foo, 1, Bar], Foo::barBaz::Qux2 -> [Foo, bar, Baz, Qux, 2].
  
  _
      args => {
          varname => {
              schema => 'str*',
              req => 1,
              pos => 1,
          },
          include_sep => {
              summary => 'Whether to include non-alphanum separator in result',
              description => <<'_',
  
  For example, under include_sep=true, Foo::barBaz::Qux2 -> [Foo, ::, bar, Baz,
  ::, Qux, 2].
  
  _
              schema => [bool => {default=>0}],
          },
      },
      result_naked => 1,
  };
  sub split_varname_words {
      my %args = @_;
      my $v = $args{varname} or return [400, "Please specify varname"];
  
      #no warnings;
      @res = ();
      $v =~ m!\A(?:
                  (
                      [A-Z][A-Z]+ |
                      [A-Z][a-z]+ |
                      [a-z]+ |
                      [0-9]+ |
                      [^A-Za-z0-9]+
                  )
                  (?{ push @res, $1 })
              )+\z!sxg
                  or return [];
      unless ($args{include_sep}) {
          @res = grep {/[A-Za-z0-9]/} @res;
      }
  
      \@res;
  }
  
  1;
  # ABSTRACT: Routines to parse variable name
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Parse::VarName - Routines to parse variable name
  
  =head1 VERSION
  
  This document describes version 0.03 of Parse::VarName (from Perl distribution Parse-VarName), released on 2016-06-14.
  
  =head1 FUNCTIONS
  
  
  =head2 split_varname_words(%args) -> any
  
  Split words found in variable name.
  
  Try to split words found in a variable name, e.g. mTime -> [m, Time], foo1Bar ->
  [foo, 1, Bar], Foo::barBaz::Qux2 -> [Foo, bar, Baz, Qux, 2].
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<include_sep> => I<bool> (default: 0)
  
  Whether to include non-alphanum separator in result.
  
  For example, under include_sep=true, Foo::barBaz::Qux2 -> [Foo, ::, bar, Baz,
  ::, Qux, 2].
  
  =item * B<varname>* => I<str>
  
  =back
  
  Return value:  (any)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Parse-VarName>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Parse-VarName>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Parse-VarName>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PARSE_VARNAME

    $main::fatpacked{"Perinci/Access.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_ACCESS';
  package Perinci::Access;
  
  our $DATE = '2015-12-17'; # DATE
  our $VERSION = '0.44'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  use Log::Any::IfLOG '$log';
  
  use Scalar::Util qw(blessed);
  use URI::Split qw(uri_split uri_join);
  
  our $Log_Request  = $ENV{LOG_RIAP_REQUEST}  // 0;
  our $Log_Response = $ENV{LOG_RIAP_RESPONSE} // 0;
  
  sub new {
      my ($class, %opts) = @_;
  
      $opts{riap_version}           //= 1.1;
      $opts{handlers}               //= {};
      $opts{handlers}{''}           //= 'Perinci::Access::Schemeless';
      $opts{handlers}{pl}           //= 'Perinci::Access::Perl';
      $opts{handlers}{http}         //= 'Perinci::Access::HTTP::Client';
      $opts{handlers}{https}        //= 'Perinci::Access::HTTP::Client';
      $opts{handlers}{'riap+tcp'}   //= 'Perinci::Access::Simple::Client';
      $opts{handlers}{'riap+unix'}  //= 'Perinci::Access::Simple::Client';
      $opts{handlers}{'riap+pipe'}  //= 'Perinci::Access::Simple::Client';
  
      $opts{_handler_objs}          //= {};
      bless \%opts, $class;
  }
  
  sub _request_or_parse_url {
      my $self = shift;
      my $which = shift;
  
      my ($action, $uri, $extra, $copts);
      if ($which eq 'request') {
          ($action, $uri, $extra, $copts) = @_;
      } else {
          ($uri, $copts) = @_;
      }
  
      my ($sch, $auth, $path, $query, $frag) = uri_split($uri);
      $sch //= "";
      die "Can't handle scheme '$sch' in URL" unless $self->{handlers}{$sch};
  
      # convert riap://perl/Foo/Bar to pl:/Foo/Bar/ as Perl only accepts pl
      if ($sch eq 'riap') {
          $auth //= '';
          die "Unsupported auth '$auth' in riap: scheme, ".
              "only 'perl' is supported" unless $auth eq 'perl';
          $sch = 'pl';
          $auth = undef;
          $uri = uri_join($sch, $auth, $path, $query, $frag);
      }
  
      unless ($self->{_handler_objs}{$sch}) {
          if (blessed($self->{handlers}{$sch})) {
              $self->{_handler_objs}{$sch} = $self->{handlers}{$sch};
          } else {
              my $modp = $self->{handlers}{$sch};
              $modp =~ s!::!/!g; $modp .= ".pm";
              require $modp;
              #$log->tracef("TMP: Creating Riap client object for schema %s with args %s", $sch, $self->{handler_args});
              $self->{_handler_objs}{$sch} = $self->{handlers}{$sch}->new(
                  riap_version => $self->{riap_version},
                  %{ $self->{handler_args} // {}});
          }
      }
  
      my $res;
      if ($which eq 'request') {
          if ($Log_Request && $log->is_trace) {
              $log->tracef(
                  "Riap request (%s): %s -> %s (%s)",
                  ref($self->{_handler_objs}{$sch}),
                  $action, $uri, $extra, $copts);
          }
          $res = $self->{_handler_objs}{$sch}->request(
              $action, $uri, $extra, $copts);
          if ($Log_Response && $log->is_trace) {
              $log->tracef("Riap response: %s", $res);
          }
      } else {
          $res = $self->{_handler_objs}{$sch}->parse_url($uri, $copts);
      }
      $res;
  }
  
  sub request {
      my $self = shift;
      $self->_request_or_parse_url('request', @_);
  }
  
  sub parse_url {
      my $self = shift;
      $self->_request_or_parse_url('parse_url', @_);
  }
  
  1;
  # ABSTRACT: Wrapper for Perinci Riap clients
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Access - Wrapper for Perinci Riap clients
  
  =head1 VERSION
  
  This document describes version 0.44 of Perinci::Access (from Perl distribution Perinci-Access), released on 2015-12-17.
  
  =head1 SYNOPSIS
  
   use Perinci::Access;
  
   my $pa = Perinci::Access->new;
   my $res;
  
   ### launching Riap request
  
   # use Perinci::Access::Perl
   $res = $pa->request(call => "pl:/Mod/SubMod/func");
  
   # use Perinci::Access::Schemeless
   $res = $pa->request(call => "/Mod/SubMod/func");
  
   # use Perinci::Access::HTTP::Client
   $res = $pa->request(info => "http://example.com/Sub/ModSub/func",
                       {uri=>'/Sub/ModSub/func'});
  
   # use Perinci::Access::Simple::Client
   $res = $pa->request(meta => "riap+tcp://localhost:7001/Sub/ModSub/");
  
   # dies, unknown scheme
   $res = $pa->request(call => "baz://example.com/Sub/ModSub/");
  
   ### parse URI
  
   $res = $pa->parse_url("/Foo/bar");                              # {proto=>'pl', path=>"/Foo/bar"}
   $res = $pa->parse_url("pl:/Foo/bar");                           # ditto
   $res = $pa->parse_url("riap+unix:/var/run/apid.sock//Foo/bar"); # {proto=>'riap+unix', path=>"/Foo/bar", unix_sock_path=>"/var/run/apid.sock"}
   $res = $pa->parse_url("riap+tcp://localhost:7001/Sub/ModSub/"); # {proto=>'riap+tcp', path=>"/Sub/ModSub/", host=>"localhost", port=>7001}
   $res = $pa->parse_url("http://cpanlists.org/api/");             # {proto=>'http', path=>"/App/cpanlists/Server/"} # will perform an 'info' Riap request to the server first
  
  =head1 DESCRIPTION
  
  This module provides a convenient wrapper to select appropriate Riap client
  (Perinci::Access::*) objects based on URI scheme.
  
   /Foo/Bar/             -> Perinci::Access::Schemeless
   pl:/Foo/Bar           -> Perinci::Access::Perl
   riap://perl/Foo/Bar/  -> Perinci::Access::Perl (converted to pl:/Foo/Bar/)
   http://...            -> Perinci::Access::HTTP::Client
   https://...           -> Perinci::Access::HTTP::Client
   riap+tcp://...        -> Perinci::Access::Simple::Client
   riap+unix://...       -> Perinci::Access::Simple::Client
   riap+pipe://...       -> Perinci::Access::Simple::Client
  
  For more details on each scheme, please consult the appropriate module.
  
  You can customize or add supported schemes by providing class name or object to
  the B<handlers> attribute (see its documentation for more details).
  
  =head1 VARIABLES
  
  =head2 $Log_Request (BOOL)
  
  Whether to log every Riap request. Default is from environment variable
  LOG_RIAP_REQUEST, or false. Logging is done with L<Log::Any> at trace level.
  
  =head2 $Log_Response (BOOL)
  
  Whether to log every Riap response. Default is from environment variable
  LOG_RIAP_RESPONSE, or false. Logging is done with L<Log::Any> at trace level.
  
  =head1 METHODS
  
  =head2 new(%opts) -> OBJ
  
  Create new instance. Known options:
  
  =over 4
  
  =item * handlers => HASH
  
  A mapping of scheme names and class names or objects. If values are class names,
  they will be require'd and instantiated. The default is:
  
   {
     ''           => 'Perinci::Access::Schemeless',
     pl           => 'Perinci::Access::Perl',
     http         => 'Perinci::Access::HTTP::Client',
     https        => 'Perinci::Access::HTTP::Client',
     'riap+tcp'   => 'Perinci::Access::Simple::Client',
     'riap+unix'  => 'Perinci::Access::Simple::Client',
     'riap+pipe'  => 'Perinci::Access::Simple::Client',
   }
  
  Objects can be given instead of class names. This is used if you need to pass
  special options when instantiating the class.
  
  =item * handler_args => HASH
  
  Arguments to pass to handler objects' constructors.
  
  =back
  
  =head2 $pa->request($action, $server_url[, \%extra_keys[, \%client_opts]]) -> RESP
  
  Send Riap request to Riap server. Pass the request to the appropriate Riap
  client (as configured in C<handlers> constructor options). RESP is the enveloped
  result.
  
  C<%extra_keys> is optional, containing Riap request keys (the C<action> request
   key is taken from C<$action>).
  
  C<%client_opts> is optional, containing Riap-client-specific options. For
  example, to pass HTTP credentials to C<Perinci::Access::HTTP::Client>, you can
  do:
  
   $pa->request(call => 'http://example.com/Foo/bar', {args=>{a=>1}},
                {user=>'admin', password=>'secret'});
  
  =head2 $pa->parse_url($server_url[, \%client_opts]) => HASH
  
  Parse C<$server_url> into its components. Will be done by respective subclasses.
  Die on failure (e.g. invalid URL). Return a hash on success, containing at least
  these keys:
  
  =over
  
  =item * proto => STR
  
  =item * path => STR
  
  Code entity path. Most URL schemes include the code entity path as part of the
  URL, e.g. C<pl>, C<riap+unix>, C<riap+tcp>, or C<riap+pipe>. Some do not, e.g.
  C<http> and C<https>. For the latter case, an C<info> Riap request will be sent
  to the server first to find out the code entity path .
  
  =back
  
  Subclasses will add other appropriate keys.
  
  =head1 ENVIRONMENT
  
  LOG_RIAP_REQUEST
  
  LOG_RIAP_RESPONSE
  
  =head1 SEE ALSO
  
  L<Perinci::Access::Schemeless>
  
  L<Perinci::Access::Perl>
  
  L<Perinci::Access::HTTP::Client>
  
  L<Perinci::Access::Simple::Client>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Access>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Access>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Access>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_ACCESS

    $main::fatpacked{"Perinci/Access/Base.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_ACCESS_BASE';
  package Perinci::Access::Base;
  
  use 5.010001;
  use strict;
  use warnings;
  
  use URI::Split qw(uri_split);
  
  our $VERSION = '0.33'; # VERSION
  
  sub new {
      my ($class, %opts) = @_;
      $opts{riap_version} //= 1.1;
      bless \%opts, $class;
  }
  
  our $re_var     = qr/\A[A-Za-z_][A-Za-z_0-9]*\z/;
  our $re_req_key = $re_var;
  our $re_action  = $re_var;
  
  # do some basic sanity checks on request
  sub check_request {
      my ($self, $req) = @_;
  
      # XXX schema
      #$req //= {};
      #return [400, "Invalid req: must be hashref"]
      #    unless ref($req) eq 'HASH';
  
      # skipped for squeezing out performance
      #for my $k (keys %$req) {
      #    return [400, "Invalid request key '$k', ".
      #                "please only use letters/numbers"]
      #        unless $k =~ $re_req_key;
      #}
  
      $req->{v} //= 1.1;
      return [500, "Protocol version not supported"]
          if $req->{v} ne '1.1' && $req->{v} ne '1.2';
  
      my $action = $req->{action};
      return [400, "Please specify action"] unless $action;
      return [400, "Invalid action, please only use letters/numbers"]
          unless $action =~ $re_action;
  
      if (defined $req->{uri}) {
          ($req->{-uri_scheme}, $req->{-uri_auth}, $req->{-uri_path},
           $req->{-uri_query}, $req->{-uri_frag}) = uri_split($req->{uri});
      }
  
      # return success for further processing
      0;
  }
  
  1;
  # ABSTRACT: Base class for all Perinci Riap clients
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Access::Base - Base class for all Perinci Riap clients
  
  =head1 VERSION
  
  This document describes version 0.33 of Perinci::Access::Base (from Perl distribution Perinci-Access-Base), released on 2015-09-06.
  
  =head1 DESCRIPTION
  
  This is a thin base class for all Riap clients (C<Perinci::Access::*>). It
  currently only provides check_request() which does the following:
  
  =over
  
  =item * perform some basic sanity checking of the Riap request hash C<$req>
  
  =item * split request keys C<uri>
  
  Split result is put in C<< $req->{-uri_scheme} >>, C<< $req->{-uri_auth} >>, C<<
  $req->{-uri_path} >>, C<< $req->{-uri_query} >>, and C<< $req->{-uri_frag} >>.
  
  =back
  
  =head1 ATTRIBUTES
  
  =head2 riap_version => float (default: 1.1)
  
  =head1 METHODS
  
  =head2 new(%args) => OBJ
  
  Constructor. Does nothing except creating a blessed hashref from C<%args>.
  Subclasses should override this method and do additional stuffs as needed.
  
  =head2 check_request($req) => RESP|undef
  
  Should be called by subclasses during the early phase in C<request()>. Will
  return an enveloped error response on error, or undef on success.
  
  =head1 SEE ALSO
  
  L<Perinci::Access>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Access-Base>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Perinci-Access-Base>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Access-Base>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_ACCESS_BASE

    $main::fatpacked{"Perinci/Access/HTTP/Client.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_ACCESS_HTTP_CLIENT';
  package Perinci::Access::HTTP::Client;
  
  our $DATE = '2016-03-16'; # DATE
  our $VERSION = '0.23'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  use experimental 'smartmatch';
  use Log::Any '$log';
  
  use Perinci::AccessUtil qw(strip_riap_stuffs_from_res);
  use Scalar::Util qw(blessed);
  
  use parent qw(Perinci::Access::Base);
  
  my @logging_methods = Log::Any->logging_methods();
  
  sub new {
      my $class = shift;
  
      my $self = $class->SUPER::new(@_);
  
      # attributes
      $self->{retries}         //= 2;
      $self->{retry_delay}     //= 3;
      unless (defined $self->{log_level}) {
          $self->{log_level} =
              $ENV{TRACE} ? 6 :
                  $ENV{DEBUG} ? 5 :
                      $ENV{VERBOSE} ? 4 :
                          $ENV{QUIET} ? 2 :
                              0;
      }
      $self->{log_callback}    //= undef;
      $self->{ssl_cert_file}   //= $ENV{SSL_CERT_FILE};
      $self->{ssl_ca_file}     //= $ENV{SSL_CA_FILE};
      $self->{user}            //= $ENV{PERINCI_HTTP_USER};
      $self->{password}        //= $ENV{PERINCI_HTTP_PASSWORD};
  
      $self;
  }
  
  # for older Perinci::Access::Base 0.28-, to remove later
  sub _init {}
  
  sub request {
      my ($self, $action, $server_url, $extra, $copts) = @_;
      $extra //= {};
      $copts //= {};
      $log->tracef(
          "=> %s\::request(action=%s, server_url=%s, extra=%s)",
          __PACKAGE__, $action, $server_url, $extra);
      return [400, "Please specify server_url"] unless $server_url;
      my $rreq = { v=>$self->{riap_version},
                   action=>$action,
                   ua=>"Perinci/".($Perinci::Access::HTTP::Client::VERSION//"?"),
                   %$extra };
      my $res = $self->check_request($rreq);
      return $res if $res;
  
      state $json = do {
          require JSON::MaybeXS;
          JSON::MaybeXS->new->allow_nonref;
      };
  
      state $ua;
      state $callback = sub {
          my ($resp, $ua, $h, $data) = @_;
  
          # we collect HTTP response body into __buffer first. if __mark is set
          # then we need to separate each log message and response part.
          # otherwise, everything just needs to go to __body.
  
          #$log->tracef("got resp: %s (%d bytes)", $data, length($data));
          #say sprintf("D:got resp: %s (%d bytes)", $data, length($data));
  
          if ($ua->{__mark}) {
              $ua->{__buffer} .= $data;
              if ($ua->{__buffer} =~ /\A([lr])(\d+) /) {
                  my ($chtype, $chlen) = ($1, $2);
                  # not enough data yet
                  my $hlen = 1+length($chlen)+1;
                  return 1 unless length($ua->{__buffer}) >= $hlen + $chlen;
                  my $chdata = substr($ua->{__buffer}, $hlen, $chlen);
                  substr($ua->{__buffer}, 0, $hlen+$chlen) = "";
                  if ($chtype eq 'l') {
                      if ($self->{log_callback}) {
                          $self->{log_callback}->($chdata);
                      } else {
                          $chdata =~ s/^\[(\w+)\]//;
                          my $method = $1;
                          $method = "error" unless $method ~~ @logging_methods;
                          $log->$method("[$server_url] $chdata");
                      }
                      return 1;
                  } elsif ($chtype eq 'r') {
                      $ua->{__body} .= $chdata;
                  } else {
                      $ua->{__body} = "[500,\"Unknown chunk type $chtype".
                          "try updating ${\(__PACKAGE__)} version\"]";
                      return 0;
                  }
              } else {
                  $ua->{__body} = "[500,\"Invalid response from server,".
                      " server is probably using older version of ".
                          "Riap::HTTP server library\"]";
                  return 0;
              }
          } else {
              $ua->{__body} .= $data;
          }
      };
  
      if (!$ua) {
          require LWP::UserAgent;
          $ua = LWP::UserAgent->new(
              ssl_opts => {
                  SSL_cert_file => $self->{ssl_cert_file},
                  SSL_ca_file   => $self->{ssl_ca_file},
              },
          );
          $ua->env_proxy;
          $ua->set_my_handler(
              "request_send", sub {
                  my ($req, $ua, $h) = @_;
                  $ua->{__buffer} = "";
                  $ua->{__body} = "";
              });
          $ua->set_my_handler(
              "response_header", sub {
                  my ($resp, $ua, $h) = @_;
                  if ($resp->header('x-riap-logging')) {
                      $ua->{__mark} = 1;
                  } else {
                      $ua->{__log_level} = 0;
                  }
              });
          $ua->set_my_handler(
              "response_data", $callback);
      }
  
      my $authuser = $copts->{user}     // $self->{user};
      my $authpass = $copts->{password} // $self->{password};
      if (defined $authuser) {
          require URI;
          my $suri = URI->new($server_url);
          my $host = $suri->host;
          my $port = $suri->port;
          $ua->credentials(
              "$host:$port",
              $self->{realm} // "restricted area",
              $authuser,
              $authpass,
          );
      }
  
      my $http_req = HTTP::Request->new(POST => $server_url);
      for (keys %$rreq) {
          next if /\A(?:args|fmt|loglevel|_.*)\z/;
          my $hk = "x-riap-$_";
          my $hv = $rreq->{$_};
          if (!defined($hv) || ref($hv)) {
              $hk = "$hk-j-";
              $hv = $json->encode($hv);
          }
          $http_req->header($hk => $hv);
      }
      $ua->{__log_level} = $self->{log_level};
      $http_req->header('x-riap-loglevel' => $ua->{__log_level});
      $http_req->header('x-riap-fmt'      => 'json');
  
      my %args;
      if ($rreq->{args}) {
          for (keys %{$rreq->{args}}) {
              $args{$_} = $rreq->{args}{$_};
          }
      }
      my $args_s = $json->encode(\%args);
      $http_req->header('Content-Type' => 'application/json');
      $http_req->header('Content-Length' => length($args_s));
      $http_req->content($args_s);
  
      #use Data::Dump; dd $http_req;
  
      my $custom_lwp_imp;
      if ($server_url =~ m!\Ahttps?:/[^/]!i) { # XXX we don't support https, rite?
          require LWP::Protocol::http::SocketUnixAlt;
          $custom_lwp_imp = "LWP::Protocol::http::SocketUnixAlt";
      }
  
      my $attempts = 0;
      my $do_retry;
      my $http_res;
      while (1) {
          $do_retry = 0;
  
          my $old_imp;
          if ($custom_lwp_imp) {
              $old_imp = LWP::Protocol::implementor("http");
              LWP::Protocol::implementor("http", $custom_lwp_imp);
          }
  
          eval { $http_res = $ua->request($http_req) };
          my $eval_err = $@;
  
          if ($old_imp) {
              LWP::Protocol::implementor("http", $old_imp);
          }
  
          return [500, "Client died: $eval_err"] if $eval_err;
  
          if ($http_res->code >= 500) {
              $log->warnf("Network failure (%d - %s), retrying ...",
                          $http_res->code, $http_res->message);
              $do_retry++;
          }
  
          if ($do_retry && $attempts++ < $self->{retries}) {
              sleep $self->{retry_delay};
          } else {
              last;
          }
      }
  
      return [500, "Network failure: ".$http_res->code." - ".$http_res->message]
          unless $http_res->is_success;
  
      # empty __buffer
      $callback->($http_res, $ua, undef, "") if length($ua->{__buffer});
  
      return [500, "Empty response from server (1)"]
          if !length($http_res->content);
      return [500, "Empty response from server (2)"]
          unless length($ua->{__body});
  
      eval {
          #say "D:body=$ua->{__body}";
          $log->tracef("body: %s", $ua->{__body});
          $res = $json->decode($ua->{__body});
      };
      my $eval_err = $@;
      return [500, "Invalid JSON from server: $eval_err"] if $eval_err;
  
      #use Data::Dump; dd $res;
      strip_riap_stuffs_from_res($res);
  }
  
  sub parse_url {
      require URI::Split;
  
      my ($self, $uri, $copts) = @_;
      die "Please specify url" unless $uri;
  
      my $res = $self->request(info => $uri, {}, $copts);
      die "Can't 'info' on $uri: $res->[0] - $res->[1]" unless $res->[0] == 200;
  
      my $resuri = $res->[2]{uri};
      my ($sch, $auth, $path) = URI::Split::uri_split($resuri);
      $sch //= "pl";
  
      {proto=>$sch, path=>$path};
  }
  
  1;
  # ABSTRACT: Riap::HTTP client
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Access::HTTP::Client - Riap::HTTP client
  
  =head1 VERSION
  
  This document describes version 0.23 of Perinci::Access::HTTP::Client (from Perl distribution Perinci-Access-HTTP-Client), released on 2016-03-16.
  
  =head1 SYNOPSIS
  
   use Perinci::Access::HTTP::Client;
   my $pa = Perinci::Access::HTTP::Client->new;
  
   ## perform Riap requests
  
   # list all functions in package
   my $res = $pa->request(list => 'http://localhost:5000/api/',
                          {uri=>'/Some/Module/', type=>'function'});
   # -> [200, "OK", ['/Some/Module/mult2', '/Some/Module/mult2']]
  
   # call function
   $res = $pa->request(call => 'http://localhost:5000/api/',
                       {uri=>'/Some/Module/mult2', args=>{a=>2, b=>3}});
   # -> [200, "OK", 6]
  
   # get function metadata
   $res = $pa->request(meta => 'http://localhost:5000/api/',
                       {uri=>'/Foo/Bar/multn'});
   # -> [200, "OK", {v=>1.1, summary=>'Multiple many numbers', ...}]
  
   # pass HTTP credentials (via object attribute)
   my $pa = Perinci::Access::HTTP::Client->new(user => 'admin', password=>'123');
   my $res = $pa->request(call => '...', {...});
   # -> [200, "OK", 'result']
  
   # HTTP credentials can also be passed on a per-request basis
   my $pa = Perinci::Access::HTTP::Client->new();
   my $res = $pa->request(call => '...', {...}, {user=>'admin', password=>'123'});
  
   ## parse server URL
   $res = $pa->parse_url("https://cpanlists.org/api/"); # {proto=>"https", path=>"/App/cpanlists/Server/"}
  
  =head1 DESCRIPTION
  
  This class implements L<Riap::HTTP> client.
  
  =for Pod::Coverage ^action_.+
  
  =head1 ATTRIBUTES
  
  =over
  
  =item * realm => STR
  
  For HTTP basic authentication. Defaults to "restricted area" (this is the
  default realm used by L<Plack::Middleware::Auth::Basic>).
  
  =item * user => STR
  
  For HTTP basic authentication. Default will be taken from environment
  C<PERINCI_HTTP_USER>.
  
  =item * password => STR
  
  For HTTP basic authentication. Default will be taken from environment
  C<PERINCI_HTTP_PASSWORD>.
  
  =item * ssl_cert_file => STR
  
  Path to SSL client certificate. Default will be taken from environment
  C<SSL_CERT_FILE>.
  
  =item * ssl_cert_file => STR
  
  Path to SSL CA certificate. Default will be taken from environment
  C<SSL_CA_FILE>.
  
  =back
  
  =head1 METHODS
  
  =head2 PKG->new(%attrs) => OBJ
  
  Instantiate object. Known attributes:
  
  =over
  
  =item * retries => INT (default 2)
  
  Number of retries to do on network failure. Setting it to 0 will disable
  retries.
  
  =item * retry_delay => INT (default 3)
  
  Number of seconds to wait between retries.
  
  =item * log_level => INT (default 0 or from environment)
  
  Will be fed into Riap request key 'loglevel' (if >0). Note that some servers
  might forbid setting log level.
  
  If TRACE environment variable is true, default log_level will be set to 6. If
  DEBUG, 5. If VERBOSE, 4. If quiet, 1. Else 0.
  
  =item * log_callback => CODE
  
  Pass log messages from the server to this subroutine. If not specified, log
  messages will be "rethrown" into Log::Any logging methods (e.g. $log->warn(),
  $log->debug(), etc).
  
  =back
  
  =head2 $pa->request($action => $server_url[, \%extra_keys[, \%client_opts]]) => $res
  
  Send Riap request to $server_url. Note that $server_url is the HTTP URL of Riap
  server. You will need to specify code entity URI via C<uri> key in %extra_keys.
  
  C<%extra_keys> is optional and contains additional Riap request keys (except
  C<action>, which is taken from C<$action>).
  
  C<%client_opts> is optional and contains additional information, like C<user>
  (HTTP authentication user, overrides one in object attribute), C<password> (HTTP
  authentication user, overrides one in object attribute).
  
  =head2 $pa->parse_url($server_url[, \%client_opts]) => HASH
  
  =head1 FAQ
  
  =head2 How do I connect to a HTTP server that listens on a Unix socket?
  
  This class can switch to using L<LWP::Protocol::http::SocketUnixAlt> when it
  detects that the server is on a Unix socket, using this syntax (notice the
  single instead of double slash after C<http:>):
  
   http:/path/to/unix.sock//uri
  
  =head2 How do I connect to an HTTPS server without a "real" SSL certificate?
  
  Since this module is using L<LWP>, you can set environment variable
  C<PERL_LWP_SSL_VERIFY_HOSTNAME> to 0. See LWP for more details.
  
  =head1 ENVIRONMENT
  
  C<PERINCI_HTTP_USER>.
  
  C<PERINCI_HTTP_PASSWORD>.
  
  C<SSL_CERT_FILE>, C<SSL_CA_FILE>.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Access-HTTP-Client>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Perinci-Access-HTTP-Client>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Access-HTTP-Client>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci::Access::HTTP::Server>
  
  L<Riap>, L<Rinci>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_ACCESS_HTTP_CLIENT

    $main::fatpacked{"Perinci/Access/Lite.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_ACCESS_LITE';
  package Perinci::Access::Lite;
  
  our $DATE = '2016-09-25'; # DATE
  our $VERSION = '0.14'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Perinci::AccessUtil qw(strip_riap_stuffs_from_res);
  
  sub new {
      my ($class, %args) = @_;
      $args{riap_version} //= 1.1;
      bless \%args, $class;
  }
  
  # copy-pasted from SHARYANTO::Package::Util
  sub __package_exists {
      no strict 'refs';
  
      my $pkg = shift;
  
      return unless $pkg =~ /\A\w+(::\w+)*\z/;
      if ($pkg =~ s/::(\w+)\z//) {
          return !!${$pkg . "::"}{$1 . "::"};
      } else {
          return !!$::{$pkg . "::"};
      }
  }
  
  sub request {
      no strict 'refs';
  
      my ($self, $action, $url, $extra) = @_;
  
      #say "D:request($action => $url)";
  
      $extra //= {};
  
      my $v = $extra->{v} // 1.1;
      if ($v ne '1.1' && $v ne '1.2') {
          return [501, "Riap protocol not supported, must be 1.1 or 1.2"];
      }
  
      my $res;
      if ($url =~ m!\A(?:pl:)?/(\w+(?:/\w+)*)/(\w*)\z!) {
          my ($mod_uripath, $func) = ($1, $2);
          (my $pkg = $mod_uripath) =~ s!/!::!g;
          my $mod_pm = "$mod_uripath.pm";
  
          my $pkg_exists;
  
        LOAD:
          {
              last if exists $INC{$mod_pm};
              $pkg_exists = __package_exists($pkg);
              # special names
              last LOAD if $pkg =~ /\A(main)\z/;
              last if $pkg_exists && defined(${"$pkg\::VERSION"});
              #say "D:Loading $pkg ...";
              eval { require $mod_pm };
              return [500, "Can't load module $pkg: $@"] if $@;
          }
  
          if ($action eq 'list') {
              return [501, "Action 'list' not implemented for ".
                          "non-package entities"]
                  if length($func);
              no strict 'refs';
              my $spec = \%{"$pkg\::SPEC"};
              return [200, "OK (list)", [grep {/\A\w+\z/} sort keys %$spec]];
          } elsif ($action eq 'info') {
              my $data = {
                  uri => "$mod_uripath/$func",
                  type => (!length($func) ? "package" :
                               $func =~ /\A\w+\z/ ? "function" :
                                   $func =~ /\A[\@\$\%]/ ? "variable" :
                                       "?"),
              };
              return [200, "OK (info)", $data];
          } elsif ($action eq 'meta' || $action eq 'call') {
              return [501, "Action 'call' not implemented for package entity"]
                  if !length($func) && $action eq 'call';
              my $meta;
              {
                  no strict 'refs';
                  if (length $func) {
                      $meta = ${"$pkg\::SPEC"}{$func}
                          or return [
                              500, "No metadata for '$url' (".
                                  ($pkg_exists ? "package '$pkg' exists, perhaps you mentioned '$pkg' somewhere without actually loading the module, or perhaps '$func' is a typo?" :
                                       "package '$pkg' doesn't exist, perhaps '$mod_uripath' or '$func' is a typo?") .
                                  ")"];
                  } else {
                      $meta = ${"$pkg\::SPEC"}{':package'} // {v=>1.1};
                  }
                  $meta->{entity_v}    //= ${"$pkg\::VERSION"};
                  $meta->{entity_date} //= ${"$pkg\::DATE"};
              }
  
              require Perinci::Sub::Normalize;
              $meta = Perinci::Sub::Normalize::normalize_function_metadata($meta);
              if ($action eq 'meta') {
                  $meta->{_orig_args_as} = $meta->{args_as};
                  $meta->{args_as} = 'hash';
                  $meta->{_orig_result_naked} = $meta->{result_naked};
                  $meta->{result_naked} = 0;
                  return [200, "OK ($action)", $meta];
              }
  
              # form args (and add special args)
              my $args = { %{$extra->{args} // {}} }; # shallow copy
              if ($meta->{features} && $meta->{features}{progress}) {
                  require Progress::Any;
                  $args->{-progress} = Progress::Any->get_indicator;
              }
  
              # convert args
              my $aa = $meta->{args_as} // 'hash';
              my @args;
              if ($aa =~ /array/) {
                  require Perinci::Sub::ConvertArgs::Array;
                  my $convres = Perinci::Sub::ConvertArgs::Array::convert_args_to_array(
                      args => $args, meta => $meta,
                  );
                  return $convres unless $convres->[0] == 200;
                  if ($aa =~ /ref/) {
                      @args = ($convres->[2]);
                  } else {
                      @args = @{ $convres->[2] };
                  }
              } elsif ($aa eq 'hashref') {
                  @args = ({ %$args });
              } else {
                  # hash
                  @args = %$args;
              }
  
              # call!
              {
                  no strict 'refs';
                  $res = &{"$pkg\::$func"}(@args);
              }
  
              # add envelope
              if ($meta->{result_naked}) {
                  $res = [200, "OK (envelope added by ".__PACKAGE__.")", $res];
              }
  
              # add hint that result is binary
              if (defined $res->[2]) {
                  if ($meta->{result} && $meta->{result}{schema} &&
                          $meta->{result}{schema}[0] eq 'buf') {
                      $res->[3]{'x.hint.result_binary'} = 1;
                  }
              }
  
          } else {
              return [501, "Unknown/unsupported action '$action'"];
          }
      } elsif ($url =~ m!\Ahttps?:/(/?)!i) {
          my $is_unix = !$1;
          my $ht;
          require JSON;
          state $json = JSON->new->allow_nonref;
          if ($is_unix) {
              require HTTP::Tiny::UNIX;
              $ht = HTTP::Tiny::UNIX->new;
          } else {
              require HTTP::Tiny;
              $ht = HTTP::Tiny->new;
          }
          my %headers = (
              "x-riap-v" => $self->{riap_version},
              "x-riap-action" => $action,
              "x-riap-fmt" => "json",
              "content-type" => "application/json",
          );
          my $args = $extra->{args} // {};
          for (keys %$extra) {
              next if /\Aargs\z/;
              $headers{"x-riap-$_"} = $extra->{$_};
          }
          my $htres = $ht->post(
              $url, {
                  headers => \%headers,
                  content => $json->encode($args),
              });
          return [500, "Network error: $htres->{status} - $htres->{reason}"]
              if $htres->{status} != 200;
          return [500, "Server error: didn't return JSON (".$htres->{headers}{'content-type'}.")"]
              unless $htres->{headers}{'content-type'} eq 'application/json';
          return [500, "Server error: didn't return Riap 1.1 response (".$htres->{headers}{'x-riap-v'}.")"]
              unless $htres->{headers}{'x-riap-v'} =~ /\A1\.1(\.\d+)?\z/;
          $res = $json->decode($htres->{content});
      } else {
          return [501, "Unsupported scheme or bad URL '$url'"];
      }
  
      strip_riap_stuffs_from_res($res);
  }
  
  1;
  # ABSTRACT: A lightweight Riap client library
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Access::Lite - A lightweight Riap client library
  
  =head1 VERSION
  
  This document describes version 0.14 of Perinci::Access::Lite (from Perl distribution Perinci-Access-Lite), released on 2016-09-25.
  
  =head1 DESCRIPTION
  
  This module is a lightweight alternative to L<Perinci::Access>. It has less
  prerequisites but does fewer things. The things it supports:
  
  =over
  
  =item * Local (in-process) access to Perl modules and functions
  
  Currently only C<call>, C<meta>, and C<list> actions are implemented. Variables
  and other entities are not yet supported.
  
  The C<list> action only gathers keys from C<%SPEC> and do not yet list
  subpackages.
  
  =item * HTTP/HTTPS
  
  =item * HTTP over Unix socket
  
  =back
  
  Differences with Perinci::Access:
  
  =over
  
  =item * For network access, uses HTTP::Tiny module family instead of LWP
  
  This results in fewer dependencies.
  
  =item * No wrapping, no argument checking
  
  For 'pl' or schemeless URL, no wrapping (L<Perinci::Sub::Wrapper>) is done, only
  normalization (using L<Perinci::Sub::Normalize>).
  
  =item * No transaction or logging support
  
  =item * No support for some schemes
  
  This includes: Riap::Simple over pipe/TCP socket.
  
  =back
  
  =head1 ADDED RESULT METADATA
  
  This class might add the following property/attribute in result metadata:
  
  =head2 x.hint.result_binary => bool
  
  If result's schema type is C<buf>, then this class will set this attribute to
  true, to give hints to result formatters.
  
  =head1 ATTRIBUTES
  
  =head2 riap_version => float (default: 1.1)
  
  =head1 METHODS
  
  =head2 new(%attrs) => obj
  
  =head2 $pa->request($action, $url, $extra) => hash
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Access-Lite>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Access-Lite>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Access-Lite>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci::Access>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_ACCESS_LITE

    $main::fatpacked{"Perinci/Access/Perl.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_ACCESS_PERL';
  package Perinci::Access::Perl;
  
  our $DATE = '2016-06-10'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use URI::Split qw(uri_split);
  
  use parent qw(Perinci::Access::Schemeless);
  
  sub new {
      my $class = shift;
  
      my $self = $class->SUPER::new(@_);
  
      # The pl: uri scheme has a 1:1 mapping between Perl package and path, so
      # /Foo/Bar/ must mean the Foo::Bar package. We don't allow package_prefix or
      # anything fancy like that.
      delete $self->{package_prefix};
  
      $self->{allow_schemes} = ['pl', ''];
      $self->{deny_schemes} = undef;
  
      $self;
  }
  
  sub parse_url {
      my ($self, $uri) = @_;
      die "Please specify url" unless $uri;
  
      my ($sch, $auth, $path) = uri_split($uri);
      $sch //= "";
  
      die "Only pl uri scheme is supported" unless $sch eq 'pl';
      {proto=>"pl", path=>$path};
  }
  
  1;
  # ABSTRACT: Access Perl module, functions, variables through Riap
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Access::Perl - Access Perl module, functions, variables through Riap
  
  =head1 VERSION
  
  This document describes version 0.87 of Perinci::Access::Perl (from Perl distribution Perinci-Access-Perl), released on 2016-06-10.
  
  =head1 SYNOPSIS
  
  First write your code and add Rinci metadata to them:
  
   package MyMod::MySubMod;
  
   our %SPEC;
  
   $SPEC{':package'} = {
       v => 1.1,
       summary => 'This package is blah blah',
   };
  
   $SPEC{'$var1'} = {
       v => 1.1,
       summary => 'This variable is blah blah',
   };
   our $var1;
  
   $SPEC{func1} = {
       v => 1.1,
       summary => 'This function does blah blah',
       args => {
           a => { schema => 'int', req => 1 },
           b => { schema => 'int' },
       },
   };
   sub func1 {
       ...
   }
   1;
  
  then access them through Riap:
  
   use Perinci::Access::Perl;
   my $pa = Perinci::Access::Perl->new;
  
   # call function
   $res = $pa->request(call => '/MyMod/MySubMod/func1', {args=>{a=>1, b=>2}});
  
   # get variables
   $res = $pa->request(get => '/MyMod/MySubMod/$var1');
  
  =head1 DESCRIPTION
  
  This class allows you to access Perl modules, functions, and variables through
  Riap. Only those which have L<Rinci> metadata are accessible. The metadata is
  put in C<%SPEC> package variables, with function names as keys, or C<:package>
  for package metadata, or C<$NAME> for variables. Functions will be wrapped
  before executed (unless you pass C<< wrap => 0 >> to the constructor).
  
  You should probably use this through L<Perinci::Access>.
  
  =head1 FUNCTIONS
  
  =head2 new(%opts) => OBJ
  
  Constructor. For a list of options, see superclass
  L<Perinci::Access::Schemeless> except for C<package_prefix> which are not
  recognized by this class.
  
  =head2 $pa->request($action, $uri, \%extras) => RESP
  
  =head2 $pa->parse_url($url) => HASH
  
  =head1 FAQ
  
  =head2 Why C<%SPEC> (instead of C<%META>, C<%METADATA>, C<%RINCI>, etc)?
  
  The name was first chosen during Sub::Spec era (see BackPAN) in 2011, it stuck.
  By that time I already had had a lot of code written using C<%SPEC>.
  
  =head2 Why wrap?
  
  The wrapping process accomplishes several things, among others: checking of
  metadata, normalization of schemas in metadata, also argument validation and
  exception trapping in function.
  
  The function wrapping introduces a small overhead when performing a sub call
  (typically around several to tens of microseconds on an Intel Core i5 1.7GHz
  notebook). This is usually smaller than the overhead of Perinci::Access::Perl
  itself (typically in the range of 100 microseconds). But if you are concerned
  about the wrapping overhead, see the C<< wrap => 0 >> option.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Access-Perl>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Access-Perl>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Access-Perl>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci::Access::Schemeless>
  
  L<Perinci::Access>
  
  L<Riap>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_ACCESS_PERL

    $main::fatpacked{"Perinci/Access/Schemeless.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_ACCESS_SCHEMELESS';
  package Perinci::Access::Schemeless;
  
  our $DATE = '2016-06-10'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  use experimental 'smartmatch';
  use Log::Any::IfLOG '$log';
  
  use parent qw(Perinci::Access::Base);
  
  use List::Util qw(first);
  use Perinci::Object;
  use Perinci::Sub::Normalize qw(normalize_function_metadata);
  use Perinci::Sub::Util qw(err);
  use Scalar::Util qw(blessed);
  use Module::Path::More qw(module_path);
  use Package::MoreUtil qw(package_exists);
  use Tie::Cache;
  use URI::Split qw(uri_split uri_join);
  
  our $re_perl_package =
      qr/\A[A-Za-z_][A-Za-z_0-9]*(::[A-Za-z_0-9][A-Za-z_0-9]*)*\z/;
  
  sub new {
      require Class::Inspector;
  
      my $class = shift;
      my $self = $class->SUPER::new(@_);
  
      # build a list of supported actions for each type of entity
      my %typeacts = (
          package  => [],
          function => [],
          variable => [],
      ); # key = type, val = [[ACTION, META], ...]
  
      my @comacts;
      for my $meth (@{Class::Inspector->methods(ref $self)}) {
          next unless $meth =~ /^actionmeta_(.+)/;
          my $act = $1;
          my $meta = $self->$meth();
          $self->{_actionmetas}{$act} = $meta;
          for my $type (@{$meta->{applies_to}}) {
              if ($type eq '*') {
                  push @comacts, [$act, $meta];
              } else {
                  push @{$typeacts{$type}}, [$act, $meta];
              }
          }
      }
      for my $type (keys %typeacts) {
          $typeacts{$type} = { map {$_->[0] => $_->[1]}
                                   @{$typeacts{$type}}, @comacts };
      }
      $self->{_typeacts} = \%typeacts;
  
      $self->{cache_size}              //= 100; # for caching metadata & code
      #$self->{use_tx}                  //= 0;
      $self->{wrap}                    //= 1;
      #$self->{custom_tx_manager}       //= undef;
      $self->{load}                    //= 1;
      $self->{normalize_metadata}      //= 1;
      #$self->{after_load}
      #$self->{allow_paths}
      #$self->{deny_paths}
      #$self->{allow_schemes}
      #$self->{deny_schemes}
      #$self->{package_prefix}
      $self->{debug}                   //= $ENV{PERINCI_ACCESS_SCHEMELESS_DEBUG} // 0;
      $self->{accept_argv}             //= 1;
  
      if ($self->{cache_size} > 0) {
          my %metacache;
          tie %metacache, 'Tie::Cache', $self->{cache_size};
          $self->{_meta_cache} = \%metacache;
          my %codecache;
          tie %codecache, 'Tie::Cache', $self->{cache_size};
          $self->{_code_cache} = \%codecache;
      }
  
      $self;
  }
  
  # for older Perinci::Access::Base 0.28-, to remove later
  sub _init {}
  
  # if paths=/a/b, will match /a/b as well as /a/b/c
  sub __match_paths {
      my ($path, $paths) = @_;
  
      my $pathslash = $path =~ m!/\z! ? $path : "$path/";
  
      for (ref($paths) eq 'ARRAY' ? @$paths : $paths) {
          if (ref($_) eq 'Regexp') {
              return 1 if $path =~ $_;
          } else {
              if (m!/\z!) {
                  return 1 if $_ eq $pathslash || index($pathslash, $_) == 0;
              } else {
                  my $p = "$_/";
                  return 1 if $p eq $path || index($pathslash, $p) == 0;
              }
          }
      }
      0;
  }
  
  # if paths=/a/b, will match /a/b as well as /a/b/c AS WELL AS /a and /. only
  # suitable for 'list' action, e.g. allow_path is '/a/b' but we can do 'list /'
  # and 'list /a' too (but not 'list /c').
  sub __match_paths2 {
      my ($path, $paths) = @_;
  
      my $pathslash = $path =~ m!/\z! ? $path : "$path/";
  
      for (ref($paths) eq 'ARRAY' ? @$paths : $paths) {
          if (ref($_) eq 'Regexp') {
              # we can't match a regex against a string, so we just pass here
              return 1;
          } else {
              if (m!/\z!) {
                  return 1 if $_ eq $pathslash || index($_, $pathslash) == 0 ||
                      index($pathslash, $_) == 0;
              } else {
                  my $p = "$_/";
                  return 1 if $p eq $path || index($p, $pathslash) == 0 ||
                      index($pathslash, $p) == 0 ;
              }
          }
      }
      0;
  }
  
  sub _parse_uri {
      my ($self, $req) = @_;
  
      my $path = $req->{-uri_path};
      if (defined $self->{allow_paths}) {
          my $allow;
          if ($self->{_actionmetas}{$req->{action}}{allow_request_parent_path}) {
              $allow = __match_paths2($path, $self->{allow_paths});
          } else {
              $allow = __match_paths($path, $self->{allow_paths});
          }
          return err(403, "Forbidden uri path (does not match allow_paths)")
              unless $allow;
      }
      if (defined($self->{deny_paths}) &&
              __match_paths($path, $self->{deny_paths})) {
          return err(403, "Forbidden uri path (matches deny_paths)");
      }
  
      my $sch = $req->{-uri_scheme} // "";
      if (defined($self->{allow_schemes}) && !($sch ~~ $self->{allow_schemes})) {
          return err(501,
                     "Unsupported uri scheme (does not match allow_schemes)");
      }
      if (defined($self->{deny_schemes}) && ($sch ~~ $self->{deny_schemes})) {
          return err(501, "Unsupported uri scheme (matches deny_schemes)");
      }
  
      my ($dir, $leaf, $perl_package);
      if ($path =~ m!(.*)/(.*)!) {
          $dir  = $1;
          $leaf = $2;
      } else {
          $dir  = $path;
          $leaf = '';
      }
      for ($perl_package) {
          $_ = $dir;
          s!^/+!!;
          s!/+!::!g;
          if (defined $self->{package_prefix}) {
              $_ = $self->{package_prefix} . (length($_) ? "::":"") . $_;
          }
      }
      return err(400, "Invalid perl package name: $perl_package")
          if $perl_package && $perl_package !~ $re_perl_package;
  
      my $type;
      if (length $leaf) {
          if ($leaf =~ /^[%\@\$]/) {
              $type = 'variable';
          } else {
              $type = 'function';
          }
      } else {
          $type = 'package';
          # make sure path ends in /, to ease processing
          $req->{-uri_path} .= "/" unless $path =~ m!/\z!;
      }
  
      $req->{-uri_dir}      = $dir;
      $req->{-uri_leaf}     = $leaf;
      $req->{-perl_package} = $perl_package;
      $req->{-type}         = $type;
  
      #$log->tracef("TMP: req=%s", $req);
      return;
  }
  
  # key = module_p, val = error resp or undef if successful
  my %loadcache;
  tie %loadcache, 'Tie::Cache', 200;
  
  sub _load_module {
      my ($self, $req) = @_;
  
      my $pkg = $req->{-perl_package};
  
      # skip there is no module to load
      return if !$pkg;
  
      # if we are instructed not to load any module, we just check via existence
      # of packages
      unless ($self->{load}) {
          return if package_exists($pkg);
          return err(500, "Package $pkg does not exist");
      }
  
      my $module_p = $pkg;
      $module_p =~ s!::!/!g;
      $module_p .= ".pm";
  
      # module has been required before and successfully loaded
      return if $INC{$module_p};
  
      # module has been required before and failed
      return err(500, "Module $pkg has failed to load previously" .
                     $loadcache{$module_p} ?
                         ": $loadcache{$module_p}[0] - $loadcache{$module_p}[1]" :
                             "")
          if exists($INC{$module_p});
  
      # use cache result (for caching errors, or packages like 'main' and 'CORE'
      # where no modules for such packages exist)
      return $loadcache{$module_p} if exists $loadcache{$module_p};
  
      # load and cache negative result
      my $res;
      {
          my $fullpath = module_path(module=>$pkg, find_pmc=>0, find_prefix=>1);
  
          # when the module path does not exist, but the package does, we can
          # ignore this error. for example: main, CORE, etc.
          my $pkg_exists = package_exists($pkg);
  
          if (!$fullpath) {
              last if $pkg_exists;
              $res = [404, "Can't find module or prefix path for package $pkg"];
              last;
          } elsif ($fullpath !~ /\.pm$/) {
              last if $pkg_exists;
              $res = [405, "Can only find a prefix path for package $pkg"];
              last;
          }
          eval { require $module_p };
          if ($@) {
              $res = [500, "Can't load module $pkg (probably compile error): $@"];
              last;
          }
          # load is successful
          if ($self->{after_load}) {
              eval { $self->{after_load}($self, module=>$pkg) };
              $log->error("after_load for package $pkg dies: $@") if $@;
          }
      }
      $loadcache{$module_p} = $res;
      return $res;
  }
  
  sub __inject_entity_v_date {
      no strict 'refs';
  
      my ($req, $meta) = @_;
  
      my $pkg = $req->{-perl_package};
      unless (defined $meta->{entity_v}) {
          my $ver = ${"$pkg\::VERSION"};
          if (defined $ver) {
              $meta->{entity_v} = $ver;
          }
      }
      unless (defined $meta->{entity_date}) {
          my $date = ${"$pkg\::DATE"};
          if (defined $date) {
              $meta->{entity_date} = $date;
          }
      }
  }
  
  sub get_meta {
      no strict 'refs';
  
      my ($self, $req) = @_;
  
      my $pkg  = $req->{-perl_package};
      my $leaf = $req->{-uri_leaf};
      my $type = $req->{-type};
      if (!length($pkg)) {
          if (length $leaf) {
              # 404 for all non-subpackage entity directly under /
              return [404, "No metadata for ::$leaf (".
                  (package_exists($pkg) ? "package '$pkg' exists, perhaps you mentioned '$pkg' somewhere without actually loading the module, or perhaps '$leaf' is a typo?" :
                       "package '$pkg' doesn't exist, perhaps '$pkg' or '$leaf' is a typo?").
                      ")"
              ];
          } else {
              # empty metadata for root (/)
              $req->{-meta} = {v=>1.1};
              return;
          }
      }
  
      my $name = "$pkg\::$leaf";
      if ($self->{_meta_cache}{$name}) {
          $req->{-meta} = $self->{_meta_cache}{$name};
          $req->{-orig_meta} = $self->{_orig_meta_cache}{$name}
              if $self->{_orig_meta_cache}{$name};
          return;
      }
  
      my $res = $self->_load_module($req);
      # missing module (but existing prefix) is okay for package, we construct an
      # empty package metadata for it
      return $res if $res && !($type eq 'package' && $res->[0] == 405);
  
      my $meta;
      my $metas = \%{"$pkg\::SPEC"};
      $meta = $metas->{ $leaf || ":package" };
  
      if (!$meta && $type eq 'package') {
          $meta = {v=>1.1};
      }
  
      return err(404,
                 join("",
                      "No metadata for $name (package '$pkg' exists, ",
                      "perhaps you mentioned '$pkg' ",
                      "somewhere without actually loading the module, or ",
                      "perhaps '$leaf' is a typo?)",
                  )) unless $meta;
  
      if ($res) {
          if ($res->[0] == 405) {
              $meta = {v=>1.1}; # empty package metadata for dir
          } elsif ($res->[0] != 200) {
              return $res;
          }
      }
  
      # normalize has only been implemented for function
      if ($type eq 'function' && $self->{normalize_metadata}) {
          eval { $meta = normalize_function_metadata($meta) };
          if ($@) {
              return [500, "Can't normalize function metadata: $@"];
          }
  
          $meta->{args} //= {};
          $meta->{_orig_args_as} = $meta->{args_as};
          $meta->{args_as} = 'hash';
          $meta->{_orig_result_naked} = $meta->{result_naked};
          $meta->{result_naked} = 0;
          my $sfp = $self->{set_function_properties};
          if ($sfp) {
              for (keys %$sfp) {
                  $meta->{"_orig_$_"} = $meta->{$_};
                  $meta->{$_} = $sfp->{$_};
              }
          }
      }
  
      __inject_entity_v_date($req, $meta);
  
      if ($self->{cache_size} > 0) {
          $self->{_meta_cache}{$name} = $meta;
      }
  
      $req->{-meta} = $meta;
      return;
  }
  
  sub get_code {
      my ($self, $req) = @_;
  
      # because we're lazy, we assume here that type is already function. it
      # should be okay since get_code() is only called by action_call().
  
      my $name = $req->{-perl_package} . "::" . $req->{-uri_leaf};
      if ($self->{_code_cache}{$name}) {
          $req->{-code} = $self->{_code_cache}{$name};
          return;
      }
  
      my $res = $self->_load_module($req);
      return $res if $res;
  
      return err(404, "Can't find function $req->{-uri_leaf} in ".
                     "module $req->{-perl_package}")
          unless defined &{$name};
  
      # we get our own meta and not use get_meta() because we want to get the
      # original metadata
      my $meta;
      {
          no strict 'refs';
          my $metas = \%{"$req->{-perl_package}::SPEC"};
          $meta = $metas->{ $req->{-uri_leaf} || ":package" };
      }
  
      return err(404, "Can't find function metadata $req->{-uri_leaf} in ".
                     "module $req->{-perl_package}")
          unless $meta;
  
      my $code;
    GET_CODE:
      {
          # we don't need to wrap
          if (!$self->{wrap} ||
                  $meta->{"x.perinci.sub.wrapper.logs"} &&
                      (first {$_->{validate_args}}
                           @{ $meta->{"x.perinci.sub.wrapper.logs"} })
              ) {
              $code = \&{$name};
              last GET_CODE;
          }
  
          require Perinci::Sub::Wrapper;
          my $sfp = $self->{set_function_properties};
  
          my $wrapres = Perinci::Sub::Wrapper::wrap_sub(
              sub_name=>$name, meta=>$meta,
              convert=>{args_as=>'hash', result_naked=>0,
                        ($sfp ? %$sfp : ())
                    });
          return err(500, "Can't wrap function", $wrapres)
              unless $wrapres->[0] == 200;
          $code = $wrapres->[2]{sub};
  
          if ($self->{cache_size} > 0) {
              $self->{_code_cache}{$name} = $code;
              # also put wrapper-generated meta in the cache, so further meta
              # request can use this. the metadata from wrapper contains wrapper
              # logs (x.perinci.sub.wrapper.logs) which can be helpful hint for
              # some uses.
              my $newmeta = $wrapres->[2]{meta};
              $newmeta->{_orig_result_naked} = $meta->{result_naked};
              $newmeta->{_orig_args_as}      = $meta->{args_as};
              if ($sfp) {
                  for (keys %$sfp) {
                      $newmeta->{"_orig_$_"} = $meta->{$_};
                  }
              }
              __inject_entity_v_date($req, $newmeta);
              $self->{_meta_cache}{$name} = $newmeta;
          }
      }
  
      $req->{-code} = $code;
      return;
  }
  
  sub request {
      no strict 'refs';
  
      my ($self, $action, $uri, $extra) = @_;
  
      return err(400, "Please specify URI") unless $uri;
  
      my $req = { action=>$action, uri=>$uri, %{$extra // {}} };
      my $res = $self->check_request($req);
      return $res if $res;
  
      return err(501, "Action '$action' not implemented")
          unless $self->can("actionmeta_$action");
  
      my $am = $self->${\("actionmeta_$action")};
  
      $res = $self->_parse_uri($req);
      return $res if $res;
  
      return err(501, "Action '$action' not implemented for ".
                     "'$req->{-type}' entity")
          unless $am->{applies_to}[0] eq '*' ||
              $req->{-type} ~~ @{ $am->{applies_to} };
  
      my $meth = "action_$action";
      # check transaction
  
      $res = $self->$meth($req);
      if ($self->{debug}) {
          $res->[3] //= {};
          $res->[3]{debug} = {
              req => $req,
          };
      }
      $res;
  }
  
  sub parse_url {
      my ($self, $uri) = @_;
      die "Please specify url" unless $uri;
      my ($sch, $auth, $path) = uri_split($uri);
      return {
          # to mark that we are schemeless
          proto=>'',
          path=>$path,
      };
  }
  
  sub actionmeta_info { +{
      applies_to => ['*'],
      summary    => "Get general information on code entity",
      needs_meta => 0,
      needs_code => 0,
  } }
  
  sub action_info {
      my ($self, $req) = @_;
  
      my $mres = $self->get_meta($req);
      return $mres if $mres;
  
      my $res = {
          uri  => $req->{uri},
          type => $req->{-type},
      };
  
      [200, "OK (info action)", $res];
  }
  
  sub actionmeta_actions { +{
      applies_to => ['*'],
      summary    => "List available actions for code entity",
      needs_meta => 0,
      needs_code => 0,
  } }
  
  sub action_actions {
      my ($self, $req) = @_;
  
      my $mres = $self->get_meta($req);
      return $mres if $mres;
  
      my @res;
      for my $k (sort keys %{ $self->{_typeacts}{$req->{-type}} }) {
          my $v = $self->{_typeacts}{$req->{-type}}{$k};
          if ($req->{detail}) {
              push @res, {name=>$k, summary=>$v->{summary}};
          } else {
              push @res, $k;
          }
      }
      [200, "OK (actions action)", \@res];
  }
  
  sub actionmeta_list { +{
      applies_to => ['package'],
      summary    => "List code entities inside this package code entity",
      # this means, even if allow_path is '/a/b', we allow request on '/a' or '/'.
      allow_request_parent_path => 1,
  } }
  
  sub action_list {
      require Module::List;
  
      my ($self, $req) = @_;
      my $detail = $req->{detail};
      my $f_type = $req->{type} || "";
  
      my @res;
  
      my $filter_path = sub {
          my $path = shift;
          if (defined($self->{allow_paths}) &&
                  !__match_paths2($path, $self->{allow_paths})) {
              return 0;
          }
          if (defined($self->{deny_paths}) &&
                  __match_paths2($path, $self->{deny_paths})) {
              return 0;
          }
          1;
      };
  
      my %mem;
  
      # get submodules
      unless ($f_type && $f_type ne 'package') {
          my $lres = Module::List::list_modules(
              $req->{-perl_package} ? "$req->{-perl_package}\::" : "",
              {list_modules=>1, list_prefixes=>1});
          my $dir = $req->{-uri_dir};
          for my $m (sort keys %$lres) {
              $m =~ s!::$!!;
              $m =~ s!.+::!!;
              my $path = "$dir/$m/";
              next unless $filter_path->($path);
              next if $mem{$path}++;
              if ($detail) {
                  push @res, {uri=>"$m/", type=>"package"};
              } else {
                  push @res, "$m/";
              }
          }
      }
  
      my $res = $self->_load_module($req);
      return $res if $res && $res->[0] != 405;
  
      # get all entities from this module
      no strict 'refs';
      my $spec = \%{"$req->{-perl_package}\::SPEC"};
      my $dir = $req->{-uri_dir};
      for my $e (sort keys %$spec) {
          next if $e =~ /^:/;
          my $path = "$dir/$e";
          next unless $filter_path->($path);
          next if $mem{$path}++;
          my $t = $e =~ /^[%\@\$]/ ? 'variable' : 'function';
          next if $f_type && $f_type ne $t;
          if ($detail) {
              push @res, {
                  uri=>$e, type=>$t,
              };
          } else {
              push @res, $e;
          }
      }
  
      [200, "OK (list action)", \@res];
  }
  
  sub actionmeta_meta { +{
      applies_to => ['*'],
      summary    => "Get metadata",
  } }
  
  sub action_meta {
      my ($self, $req) = @_;
  
      my $res = $self->get_meta($req);
      return $res if $res;
  
      [200, "OK (meta action)", $req->{-meta}];
  }
  
  sub actionmeta_call { +{
      applies_to => ['function'],
      summary    => "Call function",
  } }
  
  sub action_call {
      require UUID::Random;
  
      my ($self, $req) = @_;
  
      my $res;
  
      my $tm; # = does client mention tx_id?
      if (defined $req->{tx_id}) {
          $res = $self->_pre_tx_action($req);
          return $res if $res;
          $tm = $self->{_tx_manager};
          $tm->{_tx_id} = $req->{tx_id};
      }
  
      $res = $self->get_meta($req);
      return $res if $res;
      $res = $self->get_code($req);
      return $res if $res;
  
      my %args;
  
      # try to convert from argv if given argv
      if (exists($req->{argv}) && $self->{accept_argv}) {
          require Perinci::Sub::GetArgs::Argv;
          $res = Perinci::Sub::GetArgs::Argv::get_args_from_argv(
              argv => [@{ $req->{argv} }],
              meta => $req->{-meta},
          );
          return err(400, "Can't parse argv", $res) unless $res->[0] == 200;
          %args = %{ $res->[2] };
      } else {
          %args = %{ $req->{args} // {} };
      }
  
      my $risub = risub($req->{-meta});
  
      if ($req->{dry_run}) {
          return err(412, "Function does not support dry run")
              unless $risub->can_dry_run;
          if ($risub->feature('dry_run')) {
              $args{-dry_run} = 1;
          } else {
              $args{-dry_run} = 1;
              $args{-tx_action} = 'check_state';
              $args{-tx_action_id} = UUID::Random::generate();
              undef $tm;
          }
      }
  
      if ($risub->feature('progress')) {
          require Progress::Any;
          $args{-progress} = Progress::Any->get_indicator();
      }
  
      if ($tm) {
          $res = $tm->action(
              f => "$req->{-perl_package}::$req->{-uri_leaf}", args=>\%args,
              confirm => $req->{confirm},
          );
          $tm->{_tx_id} = undef if $tm;
      } else {
          $args{-confirm} = 1 if $req->{confirm};
          eval { $res = $req->{-code}->(%args) };
          my $eval_err = $@;
          if ($eval_err) {
              $res = err(500, "Function died: $eval_err");
          }
      }
  
      # add hint that result is binary
      if (defined $res->[2]) {
          if ($req->{-meta}{result} && $req->{-meta}{result}{schema} &&
                  $req->{-meta}{result}{schema}[0] eq 'buf') {
              $res->[3]{'x.hint.result_binary'} = 1;
          }
      }
  
      $res;
  }
  
  sub actionmeta_complete_arg_val { +{
      applies_to => ['function'],
      summary    => "Complete function's argument value"
  } }
  
  sub action_complete_arg_val {
      require Perinci::Sub::Complete;
  
      my ($self, $req) = @_;
      my $arg = $req->{arg} or return err(400, "Please specify arg");
      my $word = $req->{word} // "";
      my $ci = $req->{ci};
  
      my $res = $self->get_meta($req);
      return $res if $res;
      [200, "OK (complete_arg_val action)",
       Perinci::Sub::Complete::complete_arg_val(meta=>$req->{-meta}, word=>$word,
                                                arg=>$arg, ci=>$ci) // []];
  }
  
  sub actionmeta_complete_arg_elem { +{
      applies_to => ['function'],
      summary    => "Complete function's argument element value"
  } }
  
  sub action_complete_arg_elem {
      require Perinci::Sub::Complete;
  
      my ($self, $req) = @_;
      my $arg = $req->{arg} or return err(400, "Please specify arg");
      defined(my $index = $req->{index})
          or return err(400, "Please specify index");
      my $word = $req->{word} // "";
      my $ci = $req->{ci};
  
      my $res = $self->get_meta($req);
      return $res if $res;
      [200, "OK (complete_arg_elem action)",
       Perinci::Sub::Complete::complete_arg_elem(
           meta=>$req->{-meta}, word=>$word, arg=>$arg, ci=>$ci, index=>$index,
       ) // []],
  }
  
  sub actionmeta_child_metas { +{
      applies_to => ['package'],
      summary    => "Get metadata of all child entities",
  } }
  
  sub action_child_metas {
      my ($self, $req) = @_;
  
      my $res = $self->action_list($req);
      return $res unless $res->[0] == 200;
      my $ents = $res->[2];
  
      my %res;
      my %om;
      my $base = uri_join(
          $req->{-uri_scheme}, $req->{-uri_auth}, $req->{-uri_dir});
  
      for my $ent (@$ents) {
          $res = $self->request(meta => "$base/$ent");
          # ignore failed request
          next unless $res->[0] == 200;
          $res{$ent} = $res->[2];
      }
      [200, "OK (child_metas action)", \%res];
  }
  
  sub actionmeta_get { +{
      applies_to => ['variable'],
      summary    => "Get value of variable",
  } }
  
  sub action_get {
      no strict 'refs';
  
      my ($self, $req) = @_;
      local $req->{-uri_leaf} = $req->{-uri_leaf};
  
      # extract prefix
      $req->{-uri_leaf} =~ s/^([%\@\$])//
          or return err(500, "BUG: Unknown variable prefix");
      my $prefix = $1;
      my $name = $req->{-perl_package} . "::" . $req->{-uri_leaf};
      my $res =
          $prefix eq '$' ? ${$name} :
              $prefix eq '@' ? \@{$name} :
                  $prefix eq '%' ? \%{$name} :
                      undef;
      [200, "OK (get action)", $res];
  }
  
  sub _pre_tx_action {
      my ($self, $req) = @_;
  
      return err(501, "Transaction not supported by server")
          unless $self->{use_tx};
  
      # instantiate custom tx manager, per request if necessary
      if (ref($self->{custom_tx_manager}) eq 'CODE') {
          eval {
              $self->{_tx_manager} = $self->{custom_tx_manager}->($self);
              die $self->{_tx_manager} unless blessed($self->{_tx_manager});
          };
          return err(500, "Can't initialize custom tx manager: ".
                         "$self->{_tx_manager}: $@") if $@;
      } elsif (!blessed($self->{_tx_manager})) {
          my $tm_cl = $self->{custom_tx_manager} // "Perinci::Tx::Manager";
          my $tm_cl_p = $tm_cl; $tm_cl_p =~ s!::!/!g; $tm_cl_p .= ".pm";
          eval {
              require $tm_cl_p;
              $self->{_tx_manager} = $tm_cl->new(pa => $self);
              die $self->{_tx_manager} unless blessed($self->{_tx_manager});
          };
          return err(500, "Can't initialize tx manager ($tm_cl): $@") if $@;
          # we just want to force newer version, we currently can't specify this
          # in Makefile.PL because peritm's tests use us. this might be rectified
          # in the future.
          if ($tm_cl eq 'Perinci::Tx::Manager') {
              $Perinci::Tx::Manager::VERSION >= 0.29
                  or die "Your Perinci::Tx::Manager is too old, ".
                      "please install v0.29 or later";
          }
      }
  
      return;
  }
  
  sub actionmeta_begin_tx { +{
      applies_to => ['*'],
      summary    => "Start a new transaction",
  } }
  
  sub action_begin_tx {
      my ($self, $req) = @_;
      my $res = $self->_pre_tx_action($req);
      return $res if $res;
  
      $self->{_tx_manager}->begin(
          tx_id   => $req->{tx_id},
          summary => $req->{summary},
      );
  }
  
  sub actionmeta_commit_tx { +{
      applies_to => ['*'],
      summary    => "Commit a transaction",
  } }
  
  sub action_commit_tx {
      my ($self, $req) = @_;
      my $res = $self->_pre_tx_action($req);
      return $res if $res;
  
      $self->{_tx_manager}->commit(
          tx_id  => $req->{tx_id},
      );
  }
  
  sub actionmeta_savepoint_tx { +{
      applies_to => ['*'],
      summary    => "Create a savepoint in a transaction",
  } }
  
  sub action_savepoint_tx {
      my ($self, $req) = @_;
      my $res = $self->_pre_tx_action($req);
      return $res if $res;
  
      $self->{_tx_manager}->savepoint(
          tx_id => $req->{tx_id},
          sp    => $req->{tx_spid},
      );
  }
  
  sub actionmeta_release_tx_savepoint { +{
      applies_to => ['*'],
      summary    => "Release a transaction savepoint",
  } }
  
  sub action_release_tx_savepoint {
      my ($self, $req) =\ @_;
      my $res = $self->_pre_tx_action($req);
      return $res if $res;
  
      $self->{_tx_manager}->release_savepoint(
          tx_id => $req->{tx_id},
          sp    => $req->{tx_spid},
      );
  }
  
  sub actionmeta_rollback_tx { +{
      applies_to => ['*'],
      summary    => "Rollback a transaction (optionally to a savepoint)",
  } }
  
  sub action_rollback_tx {
      my ($self, $req) = @_;
      my $res = $self->_pre_tx_action($req);
      return $res if $res;
  
      $self->{_tx_manager}->rollback(
          tx_id => $req->{tx_id},
          sp    => $req->{tx_spid},
      );
  }
  
  sub actionmeta_list_txs { +{
      applies_to => ['*'],
      summary    => "List transactions",
  } }
  
  sub action_list_txs {
      my ($self, $req) = @_;
      my $res = $self->_pre_tx_action($req);
      return $res if $res;
  
      $self->{_tx_manager}->list(
          detail    => $req->{detail},
          tx_status => $req->{tx_status},
          tx_id     => $req->{tx_id},
      );
  }
  
  sub actionmeta_undo { +{
      applies_to => ['*'],
      summary    => "Undo a committed transaction",
  } }
  
  sub action_undo {
      my ($self, $req) = @_;
      my $res = $self->_pre_tx_action($req);
      return $res if $res;
  
      $self->{_tx_manager}->undo(
          tx_id   => $req->{tx_id},
          confirm => $req->{confirm},
      );
  }
  
  sub actionmeta_redo { +{
      applies_to => ['*'],
      summary    => "Redo an undone committed transaction",
  } }
  
  sub action_redo {
      my ($self, $req) = @_;
      my $res = $self->_pre_tx_action($req);
      return $res if $res;
  
      $self->{_tx_manager}->redo(
          tx_id   => $req->{tx_id},
          confirm => $req->{confirm},
      );
  }
  
  sub actionmeta_discard_tx { +{
      applies_to => ['*'],
      summary    => "Discard (forget) a committed transaction",
  } }
  
  sub action_discard_tx {
      my ($self, $req) = @_;
      my $res = $self->_pre_tx_action($req);
      return $res if $res;
  
      $self->{_tx_manager}->discard(
          tx_id => $req->{tx_id},
      );
  }
  
  sub actionmeta_discard_all_txs { +{
      applies_to => ['*'],
      summary    => "Discard (forget) all committed transactions",
  } }
  
  sub action_discard_all_txs {
      my ($self, $req) = @_;
      my $res = $self->_pre_tx_action($req);
      return $res if $res;
  
      $self->{_tx_manager}->discard_all(
          # XXX select client
      );
  }
  
  1;
  # ABSTRACT: Base class for Perinci::Access::Perl
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Access::Schemeless - Base class for Perinci::Access::Perl
  
  =head1 VERSION
  
  This document describes version 0.87 of Perinci::Access::Schemeless (from Perl distribution Perinci-Access-Perl), released on 2016-06-10.
  
  =head1 DESCRIPTION
  
  This class is the base class for L<Perinci::Access::Perl>, and by default acts
  like Perinci::Access::Perl (e.g. given uri C</Foo/Bar/baz> it will refer to
  function C<baz> in Perl package C<Foo::Bar>; it also looks for Rinci metadata in
  C<%SPEC> package variables by default). But this class is designed to be
  flexible: you can override aspects of it so it can map uri to different Perl
  packages (e.g. using option like C<package_prefix>), you can retrieve Rinci
  metadata from a database or whatever, etc.
  
  Supported features:
  
  =over
  
  =item * Basic Riap actions
  
  These include C<info>, C<actions>, C<meta>, C<list>, and C<call> actions.
  
  =item * Transaction/undo
  
  According to L<Rinci::Transaction>.
  
  =item * Function wrapping
  
  Wrapping is used to convert argument passing style, produce result envelope, add
  argument validation, as well as numerous other functionalities. See
  L<Perinci::Sub::Wrapper> for more details on wrapping. The default behavior will
  call wrapped functions.
  
  =item * Custom location of metadata
  
  By default, metadata are assumed to be stored embedded in Perl source code in
  C<%SPEC> package variables (with keys matching function names, C<$variable>
  names, or C<:package> for the package metadata itself).
  
  You can override C<get_meta()> to provide custom behavior. For example, you can
  store metadata in separate file or database.
  
  =item * Custom code entity tree
  
  By default, tree are formed by traversing Perl packages and their contents, for
  example if a C<list> action is requested on uri C</Foo/Bar/> then the contents
  of package C<Foo::Bar> and its subpackages will be traversed for the entities.
  
  You can override C<action_list()> to provide custom behavior. For example, you
  can lookup from the database.
  
  =item * Progress indicator
  
  Functions can express that they do progress updating through the C<features>
  property in its metadata:
  
   features => {
       progress => 1,
       ...
   }
  
  For these functions, this class will pass a special argument C<-progress>
  containing L<Progress::Any> object. Functions can update progress using this
  object.
  
  =back
  
  =head2 How request is processed
  
  User calls C<< $pa->request($action => $uri, \%extras) >>. Internally, the
  method creates a hash C<$req> which contains Riap request keys as well as
  internal information about the Riap request (the latter will be prefixed with
  dash C<->). Initially it will contain C<action> and C<uri> and the C<%extras>
  keys from the request() arguments sent by the user.
  
  Internal C<_parse_uri()> method will be called to parse C<uri> into C<-uri_dir>
  (the "dir" part), C<-uri_leaf> (the "basename" part), and C<-perl_package>.
  Forbidden or invalid paths will cause this method to return an enveloped error
  response and the request to stop. For example, if C<uri> is C</Foo/Bar/> then
  C<-uri_dir> is C</Foo/Bar/> and C<-uri_leaf> is an empty string. If C<uri> is
  C</Foo/Bar/baz> then C<-uri_dir> is C</Foo/Bar/> while C<-uri_leaf> is C<baz>.
  C<-uri_dir> will be used for the C<list> action. In both cases, C<-perl_package>
  will be set to C<Foo::Bar>.
  
  The code entity type is then determined currently using a few simple heuristic
  rules: if C<-uri_leaf> is empty string, type is C<package>. If C<-uri_leaf>
  begins with C<[$%@]>, type is C<variable>. Otherwise, type is C<function>.
  C<-type> will be set.
  
  After this, the appropriate C<action_ACTION()> method will be called. For
  example if action is C<meta> then C<action_meta()> method will be called, with
  C<$req> as the argument. This will in turn, depending on the action, either call
  C<get_meta()> (for example if action is C<meta>) or C<get_code()> (for example
  if action is C<call>), also with C<$req> as the argument. C<get_meta()> and
  C<get_code()> should return nothing on success, and set either C<-meta> (a
  defhash containing Rinci metadata) or C<-code> (a coderef), respectively. On
  error, they must return an enveloped error response.
  
  C<get_meta()> or C<get_code()> might call C<_load_module()> to load Perl modules
  if the C<load> attribute is set to true.
  
  =for Pod::Coverage ^(actionmeta_.+|action_.+|get_(meta|code))$
  
  =head1 ADDED RESULT METADATA
  
  This class might add the following property/attribute in result metadata:
  
  =head2 x.hint.result_binary => bool
  
  If result's schema type is C<buf>, then this class will set this attribute to
  true, to give hints to result formatters.
  
  =head1 METHODS
  
  =head2 PKG->new(%attrs) => OBJ
  
  Instantiate object. Known attributes:
  
  =over 4
  
  =item * load => BOOL (default: 1)
  
  Whether to load Perl modules that are requested.
  
  =item * after_load => CODE
  
  If set, code will be executed the first time Perl module is successfully loaded.
  
  =item * wrap => BOOL (default: 1)
  
  If set to false, then wil use original subroutine and metadata instead of
  wrapped ones, for example if you are very concerned about performance (do not
  want to add another eval {} and subroutine call introduced by wrapping) or do
  not need the functionality provided by the wrapper (e.g. your function already
  validates its arguments, accepts arguments as hash, and returns enveloped
  result).
  
  Wrapping is implemented inside C<get_code()>.
  
  =item * set_function_properties => HASH
  
  If set, will be passed to L<Perinci::Sub::Wrapper> wrap_sub()'s C<convert>
  argument when wrapping subroutines. Some applications of this include: changing
  C<default_lang> of metadata.
  
  This is only relevant if you enable C<wrap>.
  
  =item * cache_size => INT (default: 100)
  
  Specify cache size (in number of items), for caching metadata and wrapping
  result. Setting this to 0 disables caching.
  
  Caching is implemented inside C<get_meta()> and C<get_code()> so you might want
  to implement your own caching if you override those.
  
  =item * allow_paths => REGEX|STR|ARRAY
  
  If defined, only requests with C<uri> matching specified path will be allowed.
  Can be a string (e.g. C</spanel/api/>) or regex (e.g. C<< qr{^/[^/]+/api/} >>)
  or an array of those.
  
  =item * deny_paths => REGEX|STR|ARRAY
  
  If defined, requests with C<uri> matching specified path will be denied. Like
  C<allow_paths>, value can be a string (e.g. C</spanel/api/>) or regex (e.g. C<<
  qr{^/[^/]+/api/} >>) or an array of those.
  
  =item * allow_schemes => REGEX|STR|ARRAY
  
  By default this class does not care about schemes, it only looks at the uri
  path. You can use this option to limit allowed schemes.
  
  =item * deny_schemes => REGEX|STR|ARRAY
  
  By default this class does not care about schemes, it only looks at the uri
  path. You can use this option to specify forbidden schemes.
  
  =item * use_tx => BOOL (default: 0)
  
  Whether to allow transaction requests from client. Since this can cause the
  server to store transaction/undo data, this must be explicitly allowed.
  
  You need to install L<Perinci::Tx::Manager> for transaction support (unless you
  are using another transaction manager).
  
  =item * custom_tx_manager => STR|CODE
  
  Can be set to a string (class name) or a code that is expected to return a
  transaction manager class.
  
  By default, L<Perinci::Tx::Manager> is instantiated and maintained (not
  reinstantiated on every request), but if C<custom_tx_manager> is a coderef, it
  will be called on each request to get transaction manager. This can be used to
  instantiate Perinci::Tx::Manager in a custom way, e.g. specifying per-user
  transaction data directory and limits, which needs to be done on a per-request
  basis.
  
  =item * accept_argv => BOOL (default: 1)
  
  From version 0.64, C<argv> key is accepted by the C<call> action and will be
  converted to C<args>. This server-side conversion from C<argv> to <args> can
  handle coderefs in C<cmdline_aliases> (and probably other things too) compared
  when doing conversion at the client-side.
  
  This option allows disabling this behavior.
  
  =back
  
  =head2 $pa->request($action => $server_url, \%extra) => $res
  
  Process Riap request and return enveloped result. $server_url will be used as
  the Riap request key 'uri', as there is no server in this case.
  
  =head2 $pa->parse_url($server_url) => HASH
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Access-Perl>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Access-Perl>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Access-Perl>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Riap>, L<Rinci>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_ACCESS_SCHEMELESS

    $main::fatpacked{"Perinci/Access/Simple/Client.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_ACCESS_SIMPLE_CLIENT';
  package Perinci::Access::Simple::Client;
  
  our $DATE = '2016-10-07'; # DATE
  our $VERSION = '0.22'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  use Log::Any '$log';
  
  use Cwd qw(abs_path);
  use Perinci::AccessUtil qw(strip_riap_stuffs_from_res);
  use POSIX qw(:sys_wait_h);
  use Tie::Cache;
  use URI::Split qw(uri_split);
  use URI::Escape;
  
  use parent qw(Perinci::Access::Base);
  
  my @logging_methods = Log::Any->logging_methods();
  
  sub new {
      my $class = shift;
  
      my $self = $class->SUPER::new(@_);
  
      # attributes
      $self->{retries}         //= 2;
      $self->{retry_delay}     //= 3;
      $self->{conn_cache_size} //= 32;
  
      # connection cache, key="tcp:HOST:PORT" OR "unix:ABSPATH" or "pipe:ABSPATH
      # ARGS". value=hash, for tcp & unix {socket=>...} and for pipe {pid=>...,
      # chld_out=>..., chld_in=>...}
      tie my(%conns), 'Tie::Cache', $self->{conn_cache_size};
      $self->{_conns} = \%conns;
  
      $self;
  }
  
  # for older Perinci::Access::Base 0.28-, to remove later
  sub _init {}
  
  sub _delete_cache {
      my ($self, $wanted) = @_;
      my $conns = $self->{_conns};
      return unless $conns;
  
      for my $k ($wanted ? ($wanted) : (keys %$conns)) {
          if ($k =~ /^pipe:/) {
              waitpid($conns->{$k}{pid}, WNOHANG);
          }
          delete $self->{_conns}{$k};
      }
  }
  
  sub DESTROY {
      my ($self) = @_;
  
      #$self->_delete_cache;
  }
  
  sub request {
      my $self = shift;
      $self->_parse_or_request('request', @_);
  }
  
  sub _parse {
      my $self = shift;
      $self->_parse_or_request('parse2', @_);
  }
  
  # which: parse0 = quick parse (for parse_url(), parse2 = more thorough parse
  # (for testing)
  sub _parse_or_request {
      my ($self, $which, $action, $server_url, $extra) = @_;
      $log->tracef("=> %s\::request(action=%s, server_url=%s, extra=%s)",
                   __PACKAGE__, $action, $server_url, $extra);
      return [400, "Please specify server_url"] unless $server_url;
  
      my ($uri,
          $cache_key,
          $host, $port, # tcp
          $path,        # unix & pipe
          $args         # pipe
      );
      my ($srvsch, $srvauth, $srvpath, $srvquery, $srvfrag) =
          uri_split($server_url);
      $srvauth //= "";
      $srvpath //= "";
      return [400, "Please supply only riap+tcp/riap+unix/riap+pipe URL"]
          unless $srvsch =~ /\Ariap\+(tcp|unix|pipe)\z/;
      if ($srvsch eq 'riap+tcp') {
          if ($srvauth =~ m!^(.+):(\d+)$!) {
              ($host, $port) = ($1, $2, $3);
              $uri = $srvpath;
              $cache_key = "tcp:".lc($host).":$port";
          } else {
              return [400, "Invalid riap+tcp URL, please use this format: ".
                  "riap+tcp://host:1234 or riap+tcp://host:1234/uri"];
          }
      } elsif ($srvsch eq 'riap+unix') {
          if ($srvpath =~ m!(.+)/(/.*)!) {
              ($path, $uri) = (uri_unescape($1), $2);
          } elsif ($srvpath =~ m!(.+)!) {
              $path = uri_unescape($1);
          }
          unless ($which eq 'parse0') {
              if (defined($path)) {
                  my $apath = abs_path($path) or
                      return [500, "Can't find absolute path for $path"];
                  $cache_key = "unix:$apath";
              } else {
                  return [400, "Invalid riap+unix URL, please use this format: ".
                              ", e.g.: riap+unix:/path/to/unix/socket or ".
                                  "riap+unix:/path/to/unix/socket//uri"];
              }
          }
      } elsif ($srvsch eq 'riap+pipe') {
          if ($srvpath =~ m!(.+?)//(.*?)/(/.*)!) {
              ($path, $args, $uri) = (uri_unescape($1), $2, $3);
          } elsif ($srvpath =~ m!(.+?)//(.*)!) {
              ($path, $args) = (uri_unescape($1), $2);
          } elsif ($srvpath =~ m!(.+)!) {
              $path = uri_unescape($1);
              $args = '';
          }
          $args = [map {uri_unescape($_)} split m!/!, $args // ''];
          unless ($which eq 'parse0') {
              if (defined($path)) {
                  my $apath = abs_path($path) or
                      return [500, "Can't find absolute path for $path"];
                  $cache_key = "pipe:$apath ".join(" ", @$args);
              } else {
                  return [400, "Invalid riap+pipe URL, please use this format: ".
                              "riap+pipe:/path/to/prog or ".
                                  "riap+pipe:/path/to/prog//arg1/arg2 or ".
                                      "riap+pipe:/path/to/prog//arg1/arg2//uri"];
              }
          }
      }
  
      my $req;
      my $res;
  
      unless ($which eq 'parse0') {
          $req = { v=>$self->{riap_version}, action=>$action, %{$extra // {}} };
          $uri ||= $req->{uri}; $req->{uri} //= $uri;
          $res = $self->check_request($req);
          return $res if $res;
      }
  
      if ($which =~ /parse/) {
          return [200, "OK", {
              args=>$args, host=>$host, path=>$path, port=>$port,
              scheme=>$srvsch, uri=>$uri,
          }];
      }
  
      $log->tracef("Parsed URI, scheme=%s, host=%s, port=%s, path=%s, args=%s, ".
                       "uri=%s", $srvsch, $host, $port, $path, $args, $uri);
  
      require JSON::MaybeXS;
      state $json = JSON::MaybeXS->new->allow_nonref;
  
      my $attempts = 0;
      my $do_retry;
      my $e;
      while (1) {
          $do_retry = 0;
  
          my ($in, $out);
          my $cache = $self->{_conns}{$cache_key};
          # check cache staleness
          if ($cache) {
              if ($srvsch =~ /tcp|unix/) {
                  if ($cache->{socket}->connected) {
                      $in = $out = $cache->{socket};
                  } else {
                      $log->infof("Stale socket cache (%s), discarded",
                                  $cache_key);
                      $cache = undef;
                  }
              } else {
                  if (kill(0, $cache->{pid})) {
                      $in  = $cache->{chld_out};
                      $out = $cache->{chld_in};
                  } else {
                      $log->infof(
                          "Process (%s) seems dead/unsignalable, discarded",
                          $cache_key);
                      $cache = undef;
                  }
              }
          }
          # connect
          if (!$cache) {
              if ($srvsch =~ /tcp|unix/) {
                  my $sock;
                  if ($srvsch eq 'riap+tcp') {
                      require IO::Socket::INET;
                      $sock = IO::Socket::INET->new(
                          PeerHost => $host,
                          PeerPort => $port,
                          Proto    => 'tcp',
                      );
                  } else {
                      use IO::Socket::UNIX;
                      $sock = IO::Socket::UNIX->new(
                          Type => SOCK_STREAM,
                          Peer => $path,
                      );
                  }
                  $e = $@;
                  if ($sock) {
                      $self->{_conns}{$cache_key} = {socket=>$sock};
                      $in = $out = $sock;
                  } else {
                      $e = $srvsch eq 'riap+tcp' ?
                          "Can't connect to TCP socket $host:$port: $e" :
                              "Can't connect to Unix socket $path: $e";
                      $do_retry++; goto RETRY;
                  }
              } else {
                  # taken from Modern::Perl. enable methods on filehandles;
                  # unnecessary when 5.14 autoloads them
                  require IO::File;
                  require IO::Handle;
  
                  require IPC::Open2;
  
                  require String::ShellQuote;
                  my $cmd = $path . (@$args ? " " . join(" ", map {
                      String::ShellQuote::shell_quote($_) } @$args) : "");
                  $log->tracef("executing cmd: %s", $cmd);
  
                  # using shell
                  #my $pid = IPC::Open2::open2($in, $out, $cmd, @$args);
  
                  # not using shell
                  my $pid = IPC::Open2::open2($in, $out, $path, @$args);
  
                  if ($pid) {
                      $self->{_conns}{$cache_key} = {
                          pid=>$pid, chld_out=>$in, chld_in=>$out};
                  } else {
                      $e = "Can't open2 $cmd: $!";
                      $do_retry++; goto RETRY;
                  }
              }
          }
  
          my $req_json;
          eval { $req_json = $json->encode($req) };
          $e = $@;
          return [400, "Can't encode request as JSON: $e"] if $e;
  
          $out->write("j$req_json\015\012");
          $log->tracef("Sent request to server: %s", $req_json);
  
          # XXX alarm/timeout
          my $line = $in->getline;
          $log->tracef("Got line from server: %s", $line);
          if (!$line) {
              $self->_delete_cache($cache_key);
              return [500, "Empty response from server"];
          } elsif ($line !~ /^j(.+)/) {
              $self->_delete_cache($cache_key);
              return [500, "Invalid response line from server: $line"];
          }
          eval { $res = $json->decode($1) };
          $e = $@;
          if ($e) {
              $self->_delete_cache($cache_key);
              return [500, "Invalid JSON response from server: $e"];
          }
          strip_riap_stuffs_from_res($res);
          return $res;
  
        RETRY:
          if ($do_retry && $attempts++ < $self->{retries}) {
              $log->tracef("Request failed ($e), waiting to retry #%s...",
                           $attempts);
              sleep $self->{retry_delay};
          } else {
              last;
          }
      }
      return [500, "$e (tried $attempts times)"];
  }
  
  sub request_tcp {
      my ($self, $action, $hostport, $extra) = @_;
      $self->request($action, "riap+tcp://$hostport->[0]:$hostport->[1]", $extra);
  }
  
  sub request_unix {
      my ($self, $action, $sockpath, $extra) = @_;
      $self->request($action => "riap+unix:" . uri_escape($sockpath), $extra);
  }
  
  sub request_pipe {
      my ($self, $action, $cmd, $extra) = @_;
      $self->request($action => "riap+pipe:" . uri_escape($cmd->[0]) . "//" .
                         join("/", map {uri_escape($_)} @$cmd[1..@$cmd-1]),
                     $extra);
  }
  
  sub parse_url {
      my ($self, $uri) = @_;
  
      my $res0 = $self->_parse_or_request('parse0', 'dummy', $uri);
      #use Data::Dump; dd $res0;
      die "Can't parse URL $uri: $res0->[0] - $res0->[1]" unless $res0->[0]==200;
      $res0 = $res0->[2];
      my $res = {proto=>$res0->{scheme}, path=>$res0->{uri}};
      if ($res->{proto} eq 'riap+unix') {
          $res->{unix_sock_path} = $res0->{path};
      } elsif ($res->{proto} eq 'riap+tcp') {
          $res->{host} = $res0->{host};
          $res->{port} = $res0->{port};
      } elsif ($res->{proto} eq 'riap+pipe') {
          $res->{prog_path} = $res0->{path};
          $res->{args} = $res0->{args};
      }
  
      $res;
  }
  
  1;
  # ABSTRACT: Riap::Simple client
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Access::Simple::Client - Riap::Simple client
  
  =head1 VERSION
  
  This document describes version 0.22 of Perinci::Access::Simple::Client (from Perl distribution Perinci-Access-Simple-Client), released on 2016-10-07.
  
  =head1 SYNOPSIS
  
   use Perinci::Access::Simple::Client;
   my $pa = Perinci::Access::Simple::Client->new;
  
   my $res;
  
   ## performing Riap requests
  
   # to request server over TCP
   $res = $pa->request(call => 'riap+tcp://localhost:5678/Foo/Bar/func',
                       {args => {a1=>1, a2=>2}});
  
   # to request server over Unix socket (separate Unix socket path and Riap
   # request key 'uri' with an extra slash /)
   $res = $pa->request(call => 'riap+unix:/var/run/api.sock//Foo/Bar/func',
                       {args => {a1=>1, a2=>2}});
  
   # to request "server" (program) over pipe (separate program path and first
   # argument with an extra slash /, then separate each program argument with
   # slashes, finally separate last program argument with Riap request key 'uri'
   # with an extra slash /). Arguments are URL-escaped so they can contain slashes
   # if needed (in the encoded form of %2F).
   $res = $pa->request(call => 'riap+pipe:/path/to/prog//arg1/arg2//Foo/Bar/func',
                       {args => {a1=>1, a2=>2}});
  
   # an example for riap+pipe, accessing a remote program via SSH client
   use URI::Escape;
   my @cmd = ('ssh', '-T', 'user@host', '/path/to/program', 'first arg', '2nd');
   my $uri = "/Foo/Bar/func";
   $res = $pa->request(call => 'riap+pipe:' .
                               uri_escape($cmd[0]) . '//' .
                               join('/', map { uri_escape($_) } @cmd[1..@cmd-1]) . '/' .
                               $uri,
                       {args => {a1=>1, a2=>2}});
  
   # helper for riap+tcp
   $res = $pa->request_tcp(call => [$host, $port], \%extra);
  
   # helper for riap+unix
   $res = $pa->request_unix(call => $sockpath, \%extra);
  
   # helper for riap+pipe
   my @cmd = ('/path/to/program', 'first arg', '2nd');
   $res = $pa->request_pipe(call => \@cmd, \%extra);
  
   ## parsing URL
  
   $res = $pa->parse_url("riap+unix:/var/run/apid.sock//Foo/bar");   # -> {proto=>"riap+unix", path=>"/Foo/bar", unix_sock_path=>"/var/run/apid.sock"}
   $res = $pa->parse_url("riap+tcp://localhost:5000/Foo/bar");       # -> {proto=>"riap+tcp" , path=>"/Foo/bar", host=>"localhost", port=>5000}
   $res = $pa->parse_url("riap+pipe:/path/to/prog//a1/a2//Foo/bar"); # -> {proto=>"riap+pipe", path=>"/Foo/bar", prog_path=>"/path/to/prog", args=>["a1", "a2"]}
  
  =head1 DESCRIPTION
  
  This class implements L<Riap::Simple> client. It supports the 'riap+tcp',
  'riap+unix', and 'riap+pipe' schemes for a variety of methods to access the
  server: either via TCP (where the server can be on a remote computer), Unix
  socket, or a program (where the program can also be on a remote computer, e.g.
  accessed via ssh).
  
  =head1 METHODS
  
  =head2 PKG->new(%attrs) => OBJ
  
  Instantiate object. Known attributes:
  
  =over 4
  
  =item * retries => INT (default 2)
  
  Number of retries to do on network failure. Setting it to 0 will disable
  retries.
  
  =item * retry_delay => INT (default 3)
  
  Number of seconds to wait between retries.
  
  =back
  
  =head2 $pa->request($action => $server_url, \%extra) => $res
  
  Send Riap request to C<$server_url>.
  
  =head2 $pa->request_tcp($action => [$host, $port], \%extra) => $res
  
  Helper/wrapper for request(), it forms C<$server_url> using:
  
   "riap+tcp://$host:$port"
  
  You need to specify Riap request key 'uri' in C<%extra>.
  
  =head2 $pa->request_unix($action => $sockpath, \%extra) => $res
  
  Helper/wrapper for request(), it forms C<$server_url> using:
  
   "riap+unix:" . uri_escape($sockpath)
  
  You need to specify Riap request key 'uri' in C<%extra>.
  
  =head2 $pa->request_pipe($action => \@cmd, \%extra) => $res
  
  Helper/wrapper for request(), it forms C<$server_url> using:
  
   "riap+pipe:" . uri_escape($cmd[0]) . "//" .
   join("/", map {uri_escape($_)} @cmd[1..@cmd-1])
  
  You need to specify Riap request key 'uri' in C<%extra>.
  
  =head2 $pa->parse_url($server_url) => HASH
  
  =head1 FAQ
  
  =head2 When I use riap+pipe, is the program executed for each Riap request?
  
  No, this module does some caching, so if you call the same program (with the
  same arguments) 10 times, the same program will be used and it will receive 10
  Riap requests using the L<Riap::Simple> protocol.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Access-Simple-Client>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Access-Simple-Client>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Access-Simple-Client>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci::Access::Simple::Server>
  
  L<Riap::Simple>, L<Riap>, L<Rinci>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_ACCESS_SIMPLE_CLIENT

    $main::fatpacked{"Perinci/AccessUtil.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_ACCESSUTIL';
  package Perinci::AccessUtil;
  
  our $DATE = '2015-09-06'; # DATE
  our $VERSION = '0.06'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use MIME::Base64;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(insert_riap_stuffs_to_res
                      strip_riap_stuffs_from_res
                      decode_args_in_riap_req);
  
  sub insert_riap_stuffs_to_res {
      my ($res, $def_ver, $nmeta, $encode) = @_;
  
      $res->[3]{'riap.v'} //= $def_ver // 1.1;
      if ($res->[3]{'riap.v'} >= 1.2) {
          # do we need to base64-encode?
          {
              last unless $encode // 1;
              last if $res->[3]{'riap.result_encoding'};
              if ($nmeta) {
                  last unless $nmeta->{result}{schema} &&
                      $nmeta->{result}{schema}[0] eq 'buf';
              }
              last unless defined($res->[2]) && !ref($res->[2]) &&
                  $res->[2] =~ /[^\x20-\x7f]/;
              $res->[2] = encode_base64($res->[2], "");
              $res->[3]{'riap.result_encoding'} = 'base64';
          }
      }
      $res;
  }
  
  sub strip_riap_stuffs_from_res {
      my $res = shift;
  
      my $ver = $res->[3]{'riap.v'} // 1.1;
      return [501, "Riap version returned by server ($ver) is not supported, ".
                  "only recognize v1.1 and v1.2"]
          unless $ver == 1.1 || $ver == 1.2;
  
      if ($ver >= 1.2) {
          # check and strip riap.*
          for my $k (keys %{$res->[3]}) {
              next unless $k =~ /\Ariap\./;
              my $val = $res->[3]{$k};
              if ($k eq 'riap.v') {
              } elsif ($k eq 'riap.result_encoding') {
                  return [501, "Unknown result_encoding returned by server ".
                              "($val), only base64 is supported"]
                      unless $val eq 'base64';
                  $res->[2] = decode_base64($res->[2]//'');
              } else {
                  return [501, "Unknown Riap attribute in result metadata ".
                              "returned by server ($k)"];
              }
              delete $res->[3]{$k};
          }
      }
  
      $res;
  }
  
  sub decode_args_in_riap_req {
      my $req = shift;
  
      my $v = $req->{v} // 1.1;
      if ($v >= 1.2) {
          if ($req->{args}) {
              my $args = $req->{args};
              for (keys %$args) {
                  next unless /\A(.+):base64\z/;
                  $args->{$1} = decode_base64($args->{$_});
                  delete $args->{$_};
              }
          }
      }
      $req;
  }
  
  1;
  # ABSTRACT: Utility module for Riap client/server
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::AccessUtil - Utility module for Riap client/server
  
  =head1 VERSION
  
  This document describes version 0.06 of Perinci::AccessUtil (from Perl distribution Perinci-AccessUtil), released on 2015-09-06.
  
  =head1 SYNOPSIS
  
   use Perinci::AccessUtil qw(
       strip_riap_stuffs_from_res
       insert_riap_stuffs_to_res
       decode_args_in_riap_req
   );
  
   strip_riap_stuffs_from_res([200,"OK",undef,{"riap.v"=>1.1}]); # => [200,"OK",undef]
   strip_riap_stuffs_from_res([200,"OK",undef,{"riap.foo"=>1}]); # => [501, "Unknown Riap attribute in result metadata: riap.foo"]
  
   insert_riap_stuffs_to_res([200,"OK",undef); # => [200,"OK",undef,{"riap.v"=>1.1}]
  
   decode_args_in_riap_req({v=>1.2, args=>{"a:base64"=>"AAAA"}}); # => {v=>1.2, args=>{a=>"\0\0\0"}}
  
  =head1 DESCRIPTION
  
  =head1 FUNCTIONS
  
  =head2 insert_riap_stuffs_to_res($envres[, $def_ver, $nmeta, $decode]) => array
  
  Starting in Riap protocol v1.2, server is required to return C<riap.v> in result
  metadata. This routine does just that. In addition to that, this routine also
  encodes result with base64 when necessary.
  
  This routine is used by Riap network server libraries, e.g.
  L<Perinci::Access::HTTP::Server> and L<Perinci::Access::Simple::Server>.
  
  =head2 strip_riap_stuffs_from_res($envres) => array
  
  Starting in Riap protocol v1.2, client is required to check and strip all
  C<riap.*> keys in result metadata (C<< $envres->[3] >>). This routine does just
  that. In addition, this routine also decode result if C<riap.result_encoding> is
  set, so the user already gets the decoded content.
  
  This routine is used by Riap client libraries, e.g. L<Perinci::Access::Lite>,
  L<Perinci::Access::Perl>, and L<Perinci::Access::HTTP::Client>,
  L<Perinci::Access::Simple::Client>.
  
  If there is no error, will return C<$envres> with all C<riap.*> keys already
  stripped. If there is an error, an error response will be returned instead.
  Either way, you can use the response returned by this function to user.
  
  =head2 decode_args_in_riap_req($req) => $req
  
  Replace C<ARGNAME:base64> keys in C<arg> in Riap request C<$req> with their
  decoded values. Only done when C<v> key is at least 1.2.
  
  This routine is used in Riap server libraries like in
  L<Perinci::Access::HTTP::Server> and Perinci::Access::Simple::Server::*.
  
  =head1 SEE ALSO
  
  L<Riap>, L<Perinci::Access>.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-AccessUtil>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-AccessUtil-Check>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-AccessUtil>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_ACCESSUTIL

    $main::fatpacked{"Perinci/CmdLine/Base.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_CMDLINE_BASE';
  package Perinci::CmdLine::Base;
  
  our $DATE = '2017-01-16'; # DATE
  our $VERSION = '1.72'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  use Log::Any::IfLOG '$log';
  
  # this class can actually be a role instead of base class for pericmd &
  # pericmd-lite, but Mo is more lightweight than Role::Tiny (also R::T doesn't
  # have attributes), Role::Basic, or Moo::Role.
  
  BEGIN {
      if ($INC{'Perinci/CmdLine/Classic.pm'}) {
          require Moo; Moo->import;
      } else {
          require Mo; Mo->import(qw(build default));
      }
  }
  
  has actions => (is=>'rw');
  has common_opts => (is=>'rw');
  has completion => (is=>'rw');
  has default_subcommand => (is=>'rw');
  has get_subcommand_from_arg => (is=>'rw', default=>1);
  has auto_abbrev_subcommand => (is=>'rw', default=>1);
  has description => (is=>'rw');
  has exit => (is=>'rw', default=>1);
  has formats => (is=>'rw');
  has default_format => (is=>'rw');
  has pass_cmdline_object => (is=>'rw', default=>0);
  has per_arg_json => (is=>'rw');
  has per_arg_yaml => (is=>'rw');
  has program_name => (
      is=>'rw',
      default => sub {
          my $pn = $ENV{PERINCI_CMDLINE_PROGRAM_NAME};
          if (!defined($pn)) {
              $pn = $0; $pn =~ s!.+/!!;
          }
          $pn;
      });
  has riap_version => (is=>'rw', default=>1.1);
  has riap_client => (is=>'rw');
  has riap_client_args => (is=>'rw');
  has subcommands => (is=>'rw');
  has summary => (is=>'rw');
  has tags => (is=>'rw');
  has url => (is=>'rw');
  
  has read_env => (is=>'rw', default=>1);
  has env_name => (
      is => 'rw',
      lazy => 1,
      default => sub {
          my $self = shift;
          __default_env_name($self->program_name);
      },
  );
  
  has read_config => (is=>'rw', default=>1);
  has config_filename => (is=>'rw');
  has config_dirs => (
      is=>'rw',
      default => sub {
          require Perinci::CmdLine::Util::Config;
          Perinci::CmdLine::Util::Config::get_default_config_dirs();
      },
  );
  
  has cleanser => (
      is => 'rw',
      lazy => 1,
      default => sub {
          require Data::Clean::JSON;
          Data::Clean::JSON->get_cleanser;
      },
  );
  has use_cleanser => (is=>'rw', default=>1);
  
  has extra_urls_for_version => (is=>'rw');
  
  has skip_format => (is=>'rw');
  
  has use_utf8 => (
      is=>'rw',
      default => sub {
          $ENV{UTF8} // 0;
      },
  );
  
  has default_dry_run => (
      is=>'rw',
      default => 0,
  );
  
  # role: requires 'hook_after_get_meta'
  # role: requires 'hook_format_row'
  # role: requires 'default_prompt_template'
  
  # role: requires 'hook_before_run'
  # role: requires 'hook_before_read_config_file'
  # role: requires 'hook_after_read_config_file'
  # role: requires 'hook_after_parse_argv'
  # role: requires 'hook_before_action'
  # role: requires 'hook_after_action'
  # role: requires 'hook_format_result'
  # role: requires 'hook_display_result'
  # role: requires 'hook_after_run'
  
  # we put common stuffs here, but PC::Classic's final version will differ from
  # PC::Lite's in several aspects: translation, supported output formats,
  # PC::Classic currently adds some extra keys, some options are not added by
  # PC::Lite (e.g. history/undo stuffs).
  our %copts = (
  
      version => {
          getopt  => "version|v",
          summary => "Display program's version and exit",
          usage   => "--version (or -v)",
          handler => sub {
              my ($go, $val, $r) = @_;
              $r->{action} = 'version';
              $r->{skip_parse_subcommand_argv} = 1;
          },
      },
  
      help => {
          getopt  => 'help|h|?',
          summary => 'Display help message and exit',
          usage   => "--help (or -h, -?)",
          handler => sub {
              my ($go, $val, $r) = @_;
              $r->{action} = 'help';
              $r->{skip_parse_subcommand_argv} = 1;
          },
          order => 0, # high
      },
  
      format => {
          getopt  => 'format=s',
          summary => 'Choose output format, e.g. json, text',
          handler => sub {
              my ($go, $val, $r) = @_;
              $r->{format} = $val;
          },
          default => undef,
          tags => ['category:output'],
          is_settable_via_config => 1,
      },
      json => {
          getopt  => 'json',
          summary => 'Set output format to json',
          handler => sub {
              my ($go, $val, $r) = @_;
              $r->{format} = (-t STDOUT) ? 'json-pretty' : 'json';
          },
          tags => ['category:output'],
      },
  
      naked_res => {
          getopt  => 'naked-res!',
          summary => 'When outputing as JSON, strip result envelope',
          'summary.alt.bool.not' => 'When outputing as JSON, add result envelope',
          description => <<'_',
  
  By default, when outputing as JSON, the full enveloped result is returned, e.g.:
  
      [200,"OK",[1,2,3],{"func.extra"=>4}]
  
  The reason is so you can get the status (1st element), status message (2nd
  element) as well as result metadata/extra result (4th element) instead of just
  the result (3rd element). However, sometimes you want just the result, e.g. when
  you want to pipe the result for more post-processing. In this case you can use
  `--naked-res` so you just get:
  
      [1,2,3]
  
  _
          handler => sub {
              my ($go, $val, $r) = @_;
              $r->{naked_res} = $val ? 1:0;
          },
          default => 0,
          tags => ['category:output'],
          is_settable_via_config => 1,
      },
  
      subcommands => {
          getopt  => 'subcommands',
          summary => 'List available subcommands',
          usage   => "--subcommands",
          show_in_usage => sub {
              my ($self, $r) = @_;
              !$r->{subcommand_name};
          },
          handler => sub {
              my ($go, $val, $r) = @_;
              $r->{action} = 'subcommands';
              $r->{skip_parse_subcommand_argv} = 1;
          },
      },
  
      # 'cmd=SUBCOMMAND_NAME' can be used to select other subcommands when
      # default_subcommand is in effect.
      cmd => {
          getopt  => "cmd=s",
          summary => 'Select subcommand',
          handler => sub {
              my ($go, $val, $r) = @_;
              $r->{subcommand_name} = $val;
              $r->{subcommand_name_from} = '--cmd';
          },
          completion => sub {
              require Complete::Util;
              my %args = @_;
              my $cmdline = $args{cmdline};
              Complete::Util::complete_array_elem(
                  array => [keys %{ $cmdline->list_subcommands }],
                  word  => $args{word},
                  ci    => 1,
              );
          },
      },
  
      config_path => {
          getopt  => 'config-path=s@',
          schema  => ['array*', of => 'str*'],
          'x.schema.element_entity' => 'filename',
          summary => 'Set path to configuration file',
          handler => sub {
              my ($go, $val, $r) = @_;
              $r->{config_paths} //= [];
              push @{ $r->{config_paths} }, $val;
          },
          tags => ['category:configuration'],
      },
      no_config => {
          getopt  => 'no-config',
          summary => 'Do not use any configuration file',
          handler => sub {
              my ($go, $val, $r) = @_;
              $r->{read_config} = 0;
          },
          tags => ['category:configuration'],
      },
      no_env => {
          getopt  => 'no-env',
          summary => 'Do not read environment for default options',
          handler => sub {
              my ($go, $val, $r) = @_;
              $r->{read_env} = 0;
          },
          tags => ['category:environment'],
      },
      config_profile => {
          getopt  => 'config-profile=s',
          summary => 'Set configuration profile to use',
          handler => sub {
              my ($go, $val, $r) = @_;
              $r->{config_profile} = $val;
          },
          completion => sub {
              # return list of profiles in read config file
  
              my %args = @_;
              my $word    = $args{word} // '';
              my $cmdline = $args{cmdline};
              my $r       = $args{r};
  
              # we are not called from cmdline, bail (actually we might want to
              # return list of programs anyway, but we want to read the value of
              # bash_global_dir et al)
              return undef unless $cmdline;
  
              # since this is common option, at this point we haven't parsed
              # argument or even read config file. let's parse argv first (argv
              # might set --config-path). then read the config files.
              {
                  # this is not activated yet
                  $r->{read_config} = 1;
  
                  my $res = $cmdline->parse_argv($r);
                  #return undef unless $res->[0] == 200;
  
                  # parse_argv() might decide that it doesn't need to read config
                  # files (e.g. in the case of program having a subcommand and
                  # user does not specify any subcommand name, then it will
                  # shortcut to --help and set skip_parse_subcommand_argv=1). we
                  # don't want that here, we want to force reading config files:
                  $cmdline->_read_config($r) unless $r->{config};
              }
  
              # we are not reading any config file, return empty list
              return [] unless $r->{config};
  
              my @profiles;
              for my $section (keys %{$r->{config}}) {
                  my %keyvals;
                  for my $word (split /\s+/, ($section eq 'GLOBAL' ? '' : $section)) {
                      if ($word =~ /(.+)=(.*)/) {
                          $keyvals{$1} = $2;
                      } else {
                          # old syntax, will be removed sometime in the future
                          $keyvals{subcommand} = $word;
                      }
                  }
                  if (defined(my $p = $keyvals{profile})) {
                      push @profiles, $p unless grep {$_ eq $p} @profiles;
                  }
              }
  
              require Complete::Util;
              Complete::Util::complete_array_elem(
                  array=>\@profiles, word=>$word, ci=>1);
          },
          tags => ['category:configuration'],
      },
  
      # since the cmdline opts is consumed, Log::Any::App doesn't see this. we
      # currently work around this via setting env.
      log_level => {
          getopt  => 'log-level=s',
          summary => 'Set log level (note: you also need to set LOG=1 to enable logging)',
          schema  => ['str*' => in => [
              qw/trace debug info warn warning error fatal/]],
          handler => sub {
              my ($go, $val, $r) = @_;
              $r->{log_level} = $val;
              $ENV{LOG_LEVEL} = $val;
          },
          is_settable_via_config => 1,
          tags => ['category:logging'],
      },
      trace => {
          getopt  => "trace",
          summary => "Set log level to trace (note: you also need to set LOG=1 to enable logging, or use TRACE=1)",
          handler => sub {
              my ($go, $val, $r) = @_;
              $ENV{TRACE} = 1;
          },
          tags => ['category:logging'],
      },
      debug => {
          getopt  => "debug",
          summary => "Set log level to debug (note: you also need to set LOG=1 to enable logging, or use DEBUG=1)",
          handler => sub {
              my ($go, $val, $r) = @_;
              $ENV{DEBUG} = 1;
          },
          tags => ['category:logging'],
      },
      verbose => {
          getopt  => "verbose",
          summary => "Set log level to info (note: you also need to set LOG=1 to enable logging, or use VERBOSE=1)",
          handler => sub {
              my ($go, $val, $r) = @_;
              $ENV{VERBOSE} = 1;
              $r->{_help_verbose} = 1;
          },
          tags => ['category:logging'],
      },
      quiet => {
          getopt  => "quiet",
          summary => "Set log level to quiet (note: you also need to set LOG=1 to enable logging, or use QUIET=1)",
          handler => sub {
              my ($go, $val, $r) = @_;
              $ENV{QUIET} = 1;
          },
          tags => ['category:logging'],
      },
  
  );
  
  sub __default_env_name {
      my ($prog) = @_;
  
      for ($prog) {
          $_ //= "PROG"; # shouldn't happen
          $_ = uc($_);
          s/[^A-Z0-9]+/_/g;
          $_ = "_$_" if /\A\d/;
      }
      "${prog}_OPT";
  }
  
  sub hook_before_run {}
  
  sub hook_before_read_config_file {}
  
  sub hook_after_read_config_file {}
  
  sub hook_before_action {}
  
  sub hook_after_action {}
  
  sub get_meta {
      my ($self, $r, $url) = @_;
  
      my $res = $self->riap_client->request(meta => $url);
      die $res unless $res->[0] == 200;
      my $meta = $res->[2];
      $r->{meta} = $meta;
      $log->tracef("[pericmd] Running hook_after_get_meta ...");
      $self->hook_after_get_meta($r);
      $meta;
  }
  
  sub get_program_and_subcommand_name {
      my ($self, $r) = @_;
      my $res = ($self->program_name // "") . " " .
          ($r->{subcommand_name} // "");
      $res =~ s/\s+$//;
      $res;
  }
  
  sub get_subcommand_data {
      my ($self, $name) = @_;
  
      my $scs = $self->subcommands;
      return undef unless $scs;
  
      if (ref($scs) eq 'CODE') {
          return $scs->($self, name=>$name);
      } else {
          return $scs->{$name};
      }
  }
  
  sub list_subcommands {
      my ($self) = @_;
      return $self->{_cache_subcommands} if $self->{_cache_subcommands};
  
      my $scs = $self->subcommands;
      my $res;
      if ($scs) {
          if (ref($scs) eq 'CODE') {
              $scs = $scs->($self);
              die [500, "BUG: Subcommands code didn't return a hashref"]
                  unless ref($scs) eq 'HASH';
          }
          $res = $scs;
      } else {
          $res = {};
      }
      $self->{_cache_subcommands} = $res;
      $res;
  }
  
  sub status2exitcode {
      my ($self, $status) = @_;
      return 0 if $status =~ /^2..|304/;
      $status - 300;
  }
  
  sub _detect_completion {
      my ($self, $r) = @_;
  
      if ($ENV{COMP_SHELL}) {
          $r->{shell} = $ENV{COMP_SHELL};
          return 1;
      } elsif ($ENV{COMP_LINE}) {
          $r->{shell} = 'bash';
          return 1;
      } elsif ($ENV{COMMAND_LINE}) {
          $r->{shell} = 'tcsh';
          return 1;
      }
  
      $r->{shell} //= 'bash';
      0;
  }
  
  sub _read_env {
      my ($self, $r) = @_;
  
      return [] unless $self->read_env;
      my $env_name = $self->env_name;
      my $env = $ENV{$env_name};
      $log->tracef("[pericmd] Checking env %s: %s", $env_name, $env);
      return [] unless defined $env;
  
      # XXX is it "proper" to use Complete::* modules to parse cmdline, outside
      # the context of completion?
  
      my $words;
      if ($r->{shell} eq 'bash') {
          require Complete::Bash;
          ($words, undef) = @{ Complete::Bash::parse_cmdline($env, 0) };
      } elsif ($r->{shell} eq 'fish') {
          ($words, undef) = @{ Complete::Base::parse_cmdline($env) };
      } elsif ($r->{shell} eq 'tcsh') {
          require Complete::Tcsh;
          ($words, undef) = @{ Complete::Tcsh::parse_cmdline($env) };
      } elsif ($r->{shell} eq 'zsh') {
          require Complete::Bash;
          ($words, undef) = @{ Complete::Bash::parse_cmdline($env) };
      } else {
          die "Unsupported shell '$r->{shell}'";
      }
      $log->tracef("[pericmd] Words from env: %s", $words);
      $words;
  }
  
  sub do_completion {
      my ($self, $r) = @_;
  
      local $r->{in_completion} = 1;
  
      my ($words, $cword);
      if ($r->{shell} eq 'bash') {
          require Complete::Bash;
          require Encode;
          ($words, $cword) = @{ Complete::Bash::parse_cmdline(undef, undef, {truncate_current_word=>1}) };
          ($words, $cword) = @{ Complete::Bash::join_wordbreak_words($words, $cword) };
          $words = [map {Encode::decode('UTF-8', $_)} @$words];
      } elsif ($r->{shell} eq 'fish') {
          require Complete::Bash;
          ($words, $cword) = @{ Complete::Bash::parse_cmdline() };
      } elsif ($r->{shell} eq 'tcsh') {
          require Complete::Tcsh;
          ($words, $cword) = @{ Complete::Tcsh::parse_cmdline() };
      } elsif ($r->{shell} eq 'zsh') {
          require Complete::Bash;
          ($words, $cword) = @{ Complete::Bash::parse_cmdline() };
      } else {
          die "Unsupported shell '$r->{shell}'";
      }
  
      shift @$words; $cword--; # strip program name
  
      # @ARGV given by bash is messed up / different. during completion, we
      # get ARGV from parsing COMP_LINE/COMP_POINT.
      @ARGV = @$words;
  
      # check whether subcommand is defined. try to search from --cmd, first
      # command-line argument, or default_subcommand.
      $self->_parse_argv1($r);
  
      if ($r->{read_env}) {
          my $env_words = $self->_read_env($r);
          unshift @ARGV, @$env_words;
          $cword += @$env_words;
      }
  
      #$log->tracef("ARGV=%s", \@ARGV);
      #$log->tracef("words=%s", $words);
  
      # force format to text for completion, because user might type 'cmd --format
      # blah -^'.
      $r->{format} = 'text';
  
      my $scd = $r->{subcommand_data};
      my $meta = $self->get_meta($r, $scd->{url} // $self->{url});
  
      my $subcommand_name_from = $r->{subcommand_name_from} // '';
  
      require Perinci::Sub::Complete;
      my $compres = Perinci::Sub::Complete::complete_cli_arg(
          meta            => $meta, # must be normalized
          words           => $words,
          cword           => $cword,
          common_opts     => $self->common_opts,
          riap_server_url => $scd->{url},
          riap_uri        => undef,
          riap_client     => $self->riap_client,
          extras          => {r=>$r, cmdline=>$self},
          func_arg_starts_at => ($subcommand_name_from eq 'arg' ? 1:0),
          completion      => sub {
              my %args = @_;
              my $type = $args{type};
  
              # user specifies custom completion routine, so use that first
              if ($self->completion) {
                  my $res = $self->completion(%args);
                  return $res if $res;
              }
              # if subcommand name has not been supplied and we're at arg#0,
              # complete subcommand name
              if ($self->subcommands &&
                      $subcommand_name_from ne '--cmd' &&
                           $type eq 'arg' && $args{argpos}==0) {
                  require Complete::Util;
                  return Complete::Util::complete_array_elem(
                      array => [keys %{ $self->list_subcommands }],
                      word  => $words->[$cword]);
              }
  
              # otherwise let periscomp do its thing
              return undef;
          },
      );
  
      my $formatted;
      if ($r->{shell} eq 'bash') {
          require Complete::Bash;
          $formatted = Complete::Bash::format_completion(
              $compres, {word=>$words->[$cword]});
      } elsif ($r->{shell} eq 'fish') {
          require Complete::Fish;
          $formatted = Complete::Fish::format_completion($compres);
      } elsif ($r->{shell} eq 'tcsh') {
          require Complete::Tcsh;
          $formatted = Complete::Tcsh::format_completion($compres);
      } elsif ($r->{shell} eq 'zsh') {
          require Complete::Zsh;
          $formatted = Complete::Zsh::format_completion($compres);
      }
  
      # to properly display unicode filenames
      $self->use_utf8(1);
  
      [200, "OK", $formatted,
       # these extra result are for debugging
       {
           "func.words" => $words,
           "func.cword" => $cword,
           "cmdline.skip_format" => 1,
       }];
  }
  
  sub _read_config {
      require Perinci::CmdLine::Util::Config;
  
      my ($self, $r) = @_;
  
      #$log->tracef("[pericmd] Finding config files ...");
      my $res = Perinci::CmdLine::Util::Config::read_config(
          config_paths     => $r->{config_paths},
          config_filename  => $self->config_filename,
          config_dirs      => $self->config_dirs,
          program_name     => $self->program_name,
      );
      die $res unless $res->[0] == 200;
      $r->{config} = $res->[2];
      $r->{read_config_files} = $res->[3]{'func.read_files'};
      $r->{_config_section_read_order} = $res->[3]{'func.section_read_order'}; # we currently don't want to publish this request key
      #$log->tracef("[pericmd] Read config files: %s",
      #             $r->{'read_config_files'});
  }
  
  sub __min(@) {
      my $m = $_[0];
      for (@_) {
          $m = $_ if $_ < $m;
      }
      $m;
  }
  
  # straight copy of Wikipedia's "Levenshtein Distance"
  sub __editdist {
      my @a = split //, shift;
      my @b = split //, shift;
  
      # There is an extra row and column in the matrix. This is the distance from
      # the empty string to a substring of the target.
      my @d;
      $d[$_][0] = $_ for 0 .. @a;
      $d[0][$_] = $_ for 0 .. @b;
  
      for my $i (1 .. @a) {
          for my $j (1 .. @b) {
              $d[$i][$j] = (
                  $a[$i-1] eq $b[$j-1]
                      ? $d[$i-1][$j-1]
                      : 1 + __min(
                          $d[$i-1][$j],
                          $d[$i][$j-1],
                          $d[$i-1][$j-1]
                      )
                  );
          }
      }
  
      $d[@a][@b];
  }
  
  sub __uniq {
      my %seen = ();
      my $k;
      my $seen_undef;
      grep { defined $_ ? not $seen{ $k = $_ }++ : not $seen_undef++ } @_;
  }
  
  # $cut is whether we should only compare each element of haystack up to the
  # length of needle, so if needle is "foo" and haystack is ["bar", "baroque",
  # "fizzle", "food"], it will be as if haystack is ["bar", "bar", "fiz", "foo"].
  sub __find_similar_strings {
      my ($needle, $haystack, $cut) = @_;
  
      my $factor   = 1.5;
      my $max_dist = 4;
  
      my @res =
          map { $_->[0] }
          sort { $a->[1] <=> $b->[1] }
          grep { defined }
          map {
              my $el = $_;
              if ($cut && length($_) > length($needle)) {
                  $el = substr($el, 0, length($needle));
              }
              my $d = __editdist($el, $needle);
              my $max_distance = __min(
                  __min(length($el), length($needle))/$factor,
                  $max_dist,
              );
              ($d <= $max_distance) ? [$_, $d] : undef
          } @$haystack;
  
      $cut ? __uniq(@res) : @res;
  }
  
  sub __find_similar_go_opts {
      my ($opt, $go_spec) = @_;
  
      $opt =~ s/^--?//;
  
      my @ospecs0 = ref($go_spec) eq 'ARRAY' ?
          keys(%{ { @$go_spec } }) : keys(%$go_spec);
      my @ospecs;
      for my $o (@ospecs0) {
          $o =~ s/^--?//;
          my $is_neg = $o =~ /\!$/;
          $o =~ s/[=:].+|[?+!]$//;
          for (split /\|/, $o) {
              if ($is_neg && length($_) > 1) {
                  push @ospecs, $_, "no$_", "no-$_";
              } else {
                  push @ospecs, $_;
              }
          }
      }
  
      map { length($_) > 1 ? "--$_" : "-$_" }
          __find_similar_strings($opt, \@ospecs, "cut");
  }
  
  sub _parse_argv1 {
      my ($self, $r) = @_;
  
      # parse common_opts which potentially sets subcommand
      my @go_spec;
      {
          # one small downside for this is that we cannot do autoabbrev here,
          # because we're not yet specifying all options here.
  
          require Getopt::Long;
          my $old_go_conf = Getopt::Long::Configure(
              'pass_through', 'no_ignore_case', 'no_auto_abbrev',
              'no_getopt_compat', 'gnu_compat', 'bundling');
          my $co = $self->common_opts // {};
          for my $k (keys %$co) {
              push @go_spec, $co->{$k}{getopt} => sub {
                  my ($go, $val) = @_;
                  $co->{$k}{handler}->($go, $val, $r);
              };
          }
          #$log->tracef("\@ARGV before parsing common opts: %s", \@ARGV);
          Getopt::Long::GetOptions(@go_spec);
          Getopt::Long::Configure($old_go_conf);
          #$log->tracef("\@ARGV after  parsing common opts: %s", \@ARGV);
      }
  
      # select subcommand and fill subcommand data
      {
          my $scn = $r->{subcommand_name};
          my $scn_from = $r->{subcommand_name_from};
          if (!defined($scn) && defined($self->{default_subcommand})) {
              # get from default_subcommand
              if ($self->get_subcommand_from_arg == 1) {
                  $scn = $self->{default_subcommand};
                  $scn_from = 'default_subcommand';
              } elsif ($self->get_subcommand_from_arg == 2 && !@ARGV) {
                  $scn = $self->{default_subcommand};
                  $scn_from = 'default_subcommand';
              }
          }
          if (!defined($scn) && $self->{subcommands} && @ARGV) {
              # get from first command-line arg
              if ($ARGV[0] =~ /\A-/) {
                  if ($r->{in_completion}) {
                      $scn = shift @ARGV;
                      $scn_from = 'arg';
                  } else {
                      my $suggestion = '';
                      my @similar = __find_similar_go_opts($ARGV[0], \@go_spec);
                      $suggestion = " (perhaps you meant ".
                          join("/", @similar)."?)" if @similar;
                      die [400, "Unknown option: $ARGV[0]".$suggestion];
                  }
              } else {
                  $scn = shift @ARGV;
                  $scn_from = 'arg';
              }
          }
  
          my $scd;
          if (defined $scn) {
              $scd = $self->get_subcommand_data($scn);
              unless ($r->{in_completion}) {
                  unless ($scd) {
                      my $scs = $self->list_subcommands;
                      if ($self->auto_abbrev_subcommand) {
                          # check that subcommand is an unambiguous abbreviation
                          # of an existing subcommand
                          my $num_matches = 0;
                          my $complete_scn;
                          for (keys %$scs) {
                              if (index($_, $scn) == 0) {
                                  $num_matches++;
                                  $complete_scn = $_;
                                  last if $num_matches > 1;
                              }
                          }
                          if ($num_matches == 1) {
                              $scn = $complete_scn;
                              $scd = $self->get_subcommand_data($scn);
                              goto L1;
                          }
                      }
                      # provide suggestion of probably mistyped subcommand to user
                      my @similar =
                          __find_similar_strings($scn, [keys %$scs]);
                      my $suggestion = '';
                      $suggestion = " (perhaps you meant ".
                          join("/", @similar)."?)" if @similar;
                      die [500, "Unknown subcommand: $scn".$suggestion];
                  }
              }
          } elsif (!$r->{action} && $self->{subcommands}) {
              # program has subcommands but user doesn't specify any subcommand,
              # or specific action. display help instead.
              $r->{action} = 'help';
              $r->{skip_parse_subcommand_argv} = 1;
          } else {
              $scn = '';
              $scd = {
                  url => $self->url,
                  summary => $self->summary,
                  description => $self->description,
                  pass_cmdline_object => $self->pass_cmdline_object,
                  tags => $self->tags,
              };
          }
        L1:
          $r->{subcommand_name} = $scn;
          $r->{subcommand_name_from} = $scn_from;
          $r->{subcommand_data} = $scd;
      }
  
      $r->{_parse_argv1_done} = 1;
  }
  
  sub _parse_argv2 {
      require Perinci::CmdLine::Util::Config;
  
      my ($self, $r) = @_;
  
      my %args;
  
      if ($r->{read_env}) {
          my $env_words = $self->_read_env($r);
          unshift @ARGV, @$env_words;
      }
  
      # parse argv for per-subcommand command-line opts
      if ($r->{skip_parse_subcommand_argv}) {
          return [200, "OK (subcommand options parsing skipped)"];
      } else {
          my $scd = $r->{subcommand_data};
          my $meta = $self->get_meta($r, $scd->{url});
  
          # first fill in from subcommand specification
          if ($scd->{args}) {
              $args{$_} = $scd->{args}{$_} for keys %{ $scd->{args} };
          }
  
          # then read from configuration
          if ($r->{read_config}) {
  
              $log->tracef("[pericmd] Running hook_before_read_config_file ...");
              $self->hook_before_read_config_file($r);
  
              $self->_read_config($r);
  
              $log->tracef("[pericmd] Running hook_after_read_config_file ...");
              $self->hook_after_read_config_file($r);
  
              my $res = Perinci::CmdLine::Util::Config::get_args_from_config(
                  r                  => $r,
                  config             => $r->{config},
                  args               => \%args,
                  program_name       => $self->program_name,
                  subcommand_name    => $r->{subcommand_name},
                  config_profile     => $r->{config_profile},
                  common_opts        => $self->common_opts,
                  meta               => $meta,
                  meta_is_normalized => 1,
              );
              die $res unless $res->[0] == 200;
              $log->tracef("[pericmd] args after reading config files: %s",
                           \%args);
              my $found = $res->[3]{'func.found'};
              if (defined($r->{config_profile}) && !$found &&
                      defined($r->{read_config_files}) &&
                          @{$r->{read_config_files}} &&
                              !$r->{ignore_missing_config_profile_section}) {
                  return [412, "Profile '$r->{config_profile}' not found ".
                              "in configuration file"];
              }
  
          }
  
          # finally get from argv
  
          # since get_args_from_argv() doesn't pass $r, we need to wrap it
          my $copts = $self->common_opts;
          my %old_handlers;
          for (keys %$copts) {
              my $h = $copts->{$_}{handler};
              $copts->{$_}{handler} = sub {
                  my ($go, $val) = @_;
                  $h->($go, $val, $r);
              };
              $old_handlers{$_} = $h;
          }
  
          my $has_cmdline_src;
          for my $ak (keys %{$meta->{args} // {}}) {
              my $av = $meta->{args}{$ak};
              if ($av->{cmdline_src}) {
                  $has_cmdline_src = 1;
                  last;
              }
              # this will probably be eventually checked by the rinci function's
              # schema: stream arguments need to have cmdline_src set to
              # stdin_or_file, stdin_or_files, stdin, or file.
              if ($av->{stream}) {
                  unless ($av->{cmdline_src} &&
                              $av->{cmdline_src} =~
                                  /\A(stdin|file|stdin_or_files?|stdin_or_args)\z/) {
                      die "BUG: stream argument '$ak' needs to have cmdline_src ".
                          "set to stdin, file, stdin_or_file, stdin_or_files, or stdin_or_args";
                  }
              }
          }
  
          require Perinci::Sub::GetArgs::Argv;
          my $ga_res = Perinci::Sub::GetArgs::Argv::get_args_from_argv(
              argv                => \@ARGV,
              args                => \%args,
              meta                => $meta,
              meta_is_normalized  => 1,
              allow_extra_elems   => $has_cmdline_src ? 1:0,
              per_arg_json        => $self->{per_arg_json},
              per_arg_yaml        => $self->{per_arg_yaml},
              common_opts         => $copts,
              strict              => $r->{in_completion} ? 0:1,
              on_missing_required_args => sub {
                  my %a = @_;
  
                  my ($an, $aa, $as) = ($a{arg}, $a{args}, $a{spec});
                  my $src = $as->{cmdline_src} // '';
  
                  # we only get from stdin if stdin is piped
                  $src = '' if $src eq 'stdin_or_args' && -t STDIN;
  
                  if ($src && $as->{req}) {
                      # don't complain, we will fill argument from other source
                      return 1;
                  } else {
                      # we have no other sources, so we complain about missing arg
                      return 0;
                  }
              },
          );
  
          return $ga_res unless $ga_res->[0] == 200;
  
          # restore
          for (keys %$copts) {
              $copts->{$_}{handler} = $old_handlers{$_};
          }
  
          return $ga_res;
      }
  }
  
  sub parse_argv {
      my ($self, $r) = @_;
  
      $log->tracef("[pericmd] Parsing \@ARGV: %s", \@ARGV);
  
      # we parse argv twice. the first parse is with common_opts only so we're
      # able to catch --help, --version, etc early without having to know about
      # subcommands. two reasons for this: sometimes we need to get subcommand
      # name *from* cmdline opts (e.g. --cmd) and thus it's a chicken-and-egg
      # problem. second, it's faster because we don't have to load Riap client and
      # request the meta through it (especially in the case of remote URL).
      #
      # the second parse is after ge get subcommand name and the function
      # metadata. we can parse the remaining argv to get function arguments.
      #
      # note that when doing completion we're not using this algorithem and only
      # parse argv once. this is to make completion work across common- and
      # per-subcommand opts, e.g. --he<tab> resulting in --help (common opt) as
      # well as --height (function argument).
  
      $self->_parse_argv1($r) unless $r->{_parse_argv1_done};
      $self->_parse_argv2($r);
  }
  
  sub __gen_iter {
      require Data::Sah::Util::Type;
  
      my ($fh, $argspec, $argname) = @_;
      my $schema = $argspec->{schema};
      $schema = $schema->[1]{of} if $schema->[0] eq 'array';
      my $type = Data::Sah::Util::Type::get_type($schema);
  
      if (Data::Sah::Util::Type::is_simple($schema)) {
          my $chomp = $type eq 'buf' ? 0 :
              $argspec->{'cmdline.chomp'} // 1;
          return sub {
              # XXX this will be configurable later. currently by default reading
              # binary is per-64k while reading string is line-by-line.
              local $/ = \(64*1024) if $type eq 'buf';
  
              state $eof;
              return undef if $eof;
              my $l = <$fh>;
              unless (defined $l) {
                  $eof++; return undef;
              }
              chomp($l) if $chomp;
              $l;
          };
      } else {
          # expect JSON stream for non-simple types
          require JSON;
          state $json = JSON->new->allow_nonref;
          my $i = -1;
          return sub {
              state $eof;
              return undef if $eof;
              $i++;
              my $l = <$fh>;
              unless (defined $l) {
                  $eof++; return undef;
              }
              eval { $l = $json->decode($l) };
              if ($@) {
                  die "Invalid JSON in stream argument '$argname' record #$i: $@";
              }
              $l;
          };
      }
  }
  
  # parse cmdline_src argument spec properties for filling argument value from
  # file and/or stdin. currently does not support argument submetadata.
  sub parse_cmdline_src {
      my ($self, $r) = @_;
  
      my $action = $r->{action};
      my $meta   = $r->{meta};
  
      my $url = $r->{subcommand_data}{url} // $self->{url} // '';
      my $is_network = $url =~ m!^(https?|riap[^:]+):!;
  
      # handle cmdline_src
      if ($action eq 'call') {
          my $args_p = $meta->{args} // {};
          my $stdin_seen;
          for my $an (sort {
              my $csa  = $args_p->{$a}{cmdline_src};
              my $csb  = $args_p->{$b}{cmdline_src};
              my $posa = $args_p->{$a}{pos} // 9999;
              my $posb = $args_p->{$b}{pos} // 9999;
  
              # first, always put stdin_line before stdin / stdin_or_files
              (
                  !$csa || !$csb ? 0 :
                      $csa eq 'stdin_line' && $csb eq 'stdin_line' ? 0 :
                      $csa eq 'stdin_line' && $csb =~ /^(stdin|stdin_or_files?|stdin_or_args)/ ? -1 :
                      $csb eq 'stdin_line' && $csa =~ /^(stdin|stdin_or_files?|stdin_or_args)/ ? 1 : 0
              )
              ||
  
              # then order by pos
              ($posa <=> $posb)
  
              ||
              # then by name
              ($a cmp $b)
          } keys %$args_p) {
              #$log->tracef("TMP: handle cmdline_src for arg=%s", $an);
              my $as = $args_p->{$an};
              my $src = $as->{cmdline_src};
              my $type = $as->{schema}[0]
                  or die "BUG: No schema is defined for arg '$an'";
              # Riap::HTTP currently does not support streaming input
              my $do_stream = $as->{stream} && $url !~ /^https?:/;
              if ($src) {
                  die [531,
                       "Invalid 'cmdline_src' value for argument '$an': $src"]
                      unless $src =~ /\A(stdin|file|stdin_or_files?|stdin_or_args|stdin_line)\z/;
                  die [531,
                       "Sorry, argument '$an' is set cmdline_src=$src, but type ".
                           "is not str/buf/array, only those are supported now"]
                      unless $do_stream || $type =~ /\A(str|buf|array)\z/; # XXX stdin_or_args needs array only, not str/buf
  
                  if ($src =~ /\A(stdin|stdin_or_files?|stdin_or_args)\z/) {
                      die [531, "Only one argument can be specified ".
                               "cmdline_src stdin/stdin_or_file/stdin_or_files/stdin_or_args"]
                          if $stdin_seen++;
                  }
                  my $is_ary = $type eq 'array';
                  if ($src eq 'stdin_line' && !exists($r->{args}{$an})) {
                      require Perinci::Object;
                      my $term_readkey_available = eval { require Term::ReadKey; 1 };
                      my $prompt = Perinci::Object::rimeta($as)->langprop('cmdline_prompt') //
                          sprintf($self->default_prompt_template, $an);
                      print $prompt;
                      my $iactive = (-t STDOUT);
                      Term::ReadKey::ReadMode('noecho')
                            if $term_readkey_available && $iactive && $as->{is_password};
                      chomp($r->{args}{$an} = <STDIN>);
                      do { print "\n"; Term::ReadKey::ReadMode(0) if $term_readkey_available }
                          if $iactive && $as->{is_password};
                      $r->{args}{"-cmdline_src_$an"} = 'stdin_line';
                  } elsif ($src eq 'stdin' || $src eq 'file' &&
                          ($r->{args}{$an}//"") eq '-') {
                      die [400, "Argument $an must be set to '-' which means ".
                               "from stdin"]
                          if defined($r->{args}{$an}) &&
                              $r->{args}{$an} ne '-';
                      #$log->trace("Getting argument '$an' value from stdin ...");
                      $r->{args}{$an} = $do_stream ?
                          __gen_iter(\*STDIN, $as, $an) :
                              $is_ary ? [<STDIN>] :
                                  do {local $/; ~~<STDIN>};
                      $r->{args}{"-cmdline_src_$an"} = 'stdin';
                  } elsif ($src eq 'stdin_or_file' || $src eq 'stdin_or_files') {
                      # push back argument value to @ARGV so <> can work to slurp
                      # all the specified files
                      local @ARGV = @ARGV;
                      unshift @ARGV, $r->{args}{$an}
                          if defined $r->{args}{$an};
  
                      # with stdin_or_file, we only accept one file
                      splice @ARGV, 1
                          if @ARGV > 1 && $src eq 'stdin_or_file';
  
                      #$log->tracef("Getting argument '$an' value from ".
                      #                 "$src, \@ARGV=%s ...", \@ARGV);
  
                      # perl doesn't seem to check files, so we check it here
                      for (@ARGV) {
                          next if $_ eq '-';
                          die [500, "Can't read file '$_': $!"] if !(-r $_);
                      }
  
                      $r->{args}{"-cmdline_srcfilenames_$an"} = [@ARGV];
                      $r->{args}{$an} = $do_stream ?
                          __gen_iter(\*ARGV, $as, $an) :
                              $is_ary ? [<>] :
                                  do {local $/; ~~<>};
                      $r->{args}{"-cmdline_src_$an"} = $src;
                  } elsif ($src eq 'stdin_or_args' && !(-t STDIN)) {
                      unless (defined($r->{args}{$an})) {
                          $r->{args}{$an} = $do_stream ?
                              __gen_iter(\*STDIN, $as, $an) :
                              $is_ary ? [map {chomp;$_} <STDIN>] :
                                  do {local $/; ~~<STDIN>};
                      }
                  } elsif ($src eq 'file') {
                      unless (exists $r->{args}{$an}) {
                          if ($as->{req}) {
                              die [400,
                                   "Please specify filename for argument '$an'"];
                          } else {
                              next;
                          }
                      }
                      die [400, "Please specify filename for argument '$an'"]
                          unless defined $r->{args}{$an};
                      #$log->trace("Getting argument '$an' value from ".
                      #                "file ...");
                      my $fh;
                      my $fname = $r->{args}{$an};
                      unless (open $fh, "<", $fname) {
                          die [500, "Can't open file '$fname' for argument '$an'".
                                   ": $!"];
                      }
                      $r->{args}{$an} = $do_stream ?
                          __gen_iter($fh, $as, $an) :
                              $is_ary ? [<$fh>] :
                                  do { local $/; ~~<$fh> };
                      $r->{args}{"-cmdline_src_$an"} = 'file';
                      $r->{args}{"-cmdline_srcfilenames_$an"} = [$fname];
                  }
              }
  
              # encode to base64 if binary and we want to cross network (because
              # it's usually JSON)
              if ($self->riap_version == 1.2 && $is_network &&
                      defined($r->{args}{$an}) && $args_p->{$an}{schema} &&
                          $args_p->{$an}{schema}[0] eq 'buf' &&
                              !$r->{args}{"$an:base64"}) {
                  require MIME::Base64;
                  $r->{args}{"$an:base64"} =
                      MIME::Base64::encode_base64($r->{args}{$an}, "");
                  delete $r->{args}{$an};
              }
          } # for arg
      }
      #$log->tracef("args after cmdline_src is processed: %s", $r->{args});
  }
  
  # determine filehandle to output to (normally STDOUT, but we can also send to a
  # pager, or a temporary file when sending to viewer (the difference between
  # pager and viewer: when we page we use pipe, when we view we write to temporary
  # file then open the viewer. viewer settings override pager settings.
  sub select_output_handle {
      my ($self, $r) = @_;
  
      my $resmeta = $r->{res}[3] // {};
  
      my $handle;
    SELECT_HANDLE:
      {
          # view result using external program
          if ($ENV{VIEW_RESULT} // $resmeta->{"cmdline.view_result"}) {
              my $viewer = $resmeta->{"cmdline.viewer"} // $ENV{VIEWER} //
                  $ENV{BROWSER};
              last if defined $viewer && !$viewer; # ENV{VIEWER} can be set 0/'' to disable viewing result using external program
              die [500, "No VIEWER program set"] unless defined $viewer;
              $r->{viewer} = $viewer;
              require File::Temp;
              my $filename;
              ($handle, $filename) = File::Temp::tempfile();
              $r->{viewer_temp_path} = $filename;
          }
  
          if ($ENV{PAGE_RESULT} // $resmeta->{"cmdline.page_result"}) {
              require File::Which;
              my $pager = $resmeta->{"cmdline.pager"} //
                  $ENV{PAGER};
              unless (defined $pager) {
                  $pager = "less -FRSX" if File::Which::which("less");
              }
              unless (defined $pager) {
                  $pager = "more" if File::Which::which("more");
              }
              unless (defined $pager) {
                  die [500, "Can't determine PAGER"];
              }
              last unless $pager; # ENV{PAGER} can be set 0/'' to disable paging
              #$log->tracef("Paging output using %s", $pager);
              open $handle, "| $pager";
          }
          $handle //= \*STDOUT;
      }
      $r->{output_handle} = $handle;
  }
  
  sub display_result {
      require Data::Sah::Util::Type;
  
      my ($self, $r) = @_;
  
      my $meta = $r->{meta};
      my $res = $r->{res};
      my $fres = $r->{fres};
      my $resmeta = $res->[3] // {};
  
      my $handle = $r->{output_handle};
  
      my $sch = $meta->{result}{schema};
      my $type = Data::Sah::Util::Type::get_type($sch) // '';
  
      if ($resmeta->{stream} // $meta->{result}{stream}) {
          my $x = $res->[2];
          if (ref($x) eq 'CODE') {
              if (Data::Sah::Util::Type::is_simple($sch)) {
                  while (defined(my $l = $x->())) {
                      print $l;
                      print "\n" unless $type eq 'buf';
                  }
              } else {
                  require JSON;
                  state $json = JSON->new->allow_nonref;
                  if ($self->use_cleanser) {
                      while (defined(my $rec = $x->())) {
                          print $json->encode(
                              $self->cleanser->clone_and_clean($rec)), "\n";
                      }
                  } else {
                      while (defined(my $rec = $x->())) {
                          print $json->encode($rec), "\n";
                      }
                  }
              }
          } else {
              die "Result is a stream but no coderef provided";
          }
      } else {
          print $handle $fres;
          if ($r->{viewer}) {
              require ShellQuote::Any::Tiny;
              my $cmd = $r->{viewer} ." ". ShellQuote::Any::Tiny::shell_quote($r->{viewer_temp_path});
              system $cmd;
          }
      }
  }
  
  sub run {
      my ($self) = @_;
      $log->tracef("[pericmd] -> run(), \@ARGV=%s", \@ARGV);
  
      my $co = $self->common_opts;
  
      my $r = {
          orig_argv   => [@ARGV],
          common_opts => $co,
      };
  
      # completion is special case, we delegate to do_completion()
      if ($self->_detect_completion($r)) {
          $r->{res} = $self->do_completion($r);
          goto FORMAT;
      }
  
      # set default from common options
      $r->{naked_res} = $co->{naked_res}{default} if $co->{naked_res};
      $r->{format}    = $co->{format}{default} if $co->{format};
  
      # EXPERIMENTAL, set default format to json if we are running in a pipeline
      # and the right side of the pipe is the 'td' program
      {
          last if (-t STDOUT) || $r->{format};
          last unless eval { require Pipe::Find; 1 };
          my $pipeinfo = Pipe::Find::get_stdout_pipe_process();
          last unless $pipeinfo;
          last unless $pipeinfo->{exe} =~ m![/\\]td\z! ||
              $pipeinfo->{cmdline} =~ m!\A([^\0]*[/\\])?perl\0([^\0]*[/\\])?td\0!;
          $r->{format} = 'json';
      }
  
      $r->{format} //= $self->default_format;
  
      if ($self->read_config) {
          # note that we will be reading config file
          $r->{read_config} = 1;
      }
  
      if ($self->read_env) {
          # note that we will be reading env for default options
          $r->{read_env} = 1;
      }
  
      eval {
          $log->tracef("[pericmd] Running hook_before_run ...");
          $self->hook_before_run($r);
  
          my $parse_res = $self->parse_argv($r);
          if ($parse_res->[0] == 501) {
              # we'll need to send ARGV to the server, because it's impossible to
              # get args from ARGV (e.g. there's a cmdline_alias with CODE, which
              # has been transformed into string when crossing network boundary)
              $r->{send_argv} = 1;
          } elsif ($parse_res->[0] != 200) {
              die $parse_res;
          }
          $r->{parse_argv_res} = $parse_res;
          $r->{args} = $parse_res->[2] // {};
  
          # set defaults
          $r->{action} //= 'call';
  
          $log->tracef("[pericmd] Running hook_after_parse_argv ...");
          $self->hook_after_parse_argv($r);
  
          $self->parse_cmdline_src($r);
  
          #$log->tracef("TMP: parse_res: %s", $parse_res);
  
          my $missing = $parse_res->[3]{"func.missing_args"};
          die [400, "Missing required argument(s): ".join(", ", @$missing)]
              if $missing && @$missing;
  
          my $scd = $r->{subcommand_data};
          if ($scd->{pass_cmdline_object} // $self->pass_cmdline_object) {
              $r->{args}{-cmdline} = $self;
              $r->{args}{-cmdline_r} = $r;
          }
  
          $log->tracef("[pericmd] Running hook_before_action ...");
          $self->hook_before_action($r);
  
          my $meth = "action_$r->{action}";
          die [500, "Unknown action $r->{action}"] unless $self->can($meth);
          $log->tracef("[pericmd] Running %s() ...", $meth);
          $r->{res} = $self->$meth($r);
          #$log->tracef("[pericmd] res=%s", $r->{res}); #1
  
          $log->tracef("[pericmd] Running hook_after_action ...");
          $self->hook_after_action($r);
      };
      my $err = $@;
      if ($err || !$r->{res}) {
          if ($err) {
              $err = [500, "Died: $err"] unless ref($err) eq 'ARRAY';
              if (%Devel::Confess::) {
                  no warnings 'once';
                  require Scalar::Util;
                  my $id = Scalar::Util::refaddr($err);
                  my $stack_trace = $Devel::Confess::MESSAGES{$id};
                  $err->[1] .= "\n$stack_trace" if $stack_trace;
              }
              $err->[1] =~ s/\n+$//;
              $r->{res} = $err;
          } else {
              $r->{res} = [500, "Bug: no response produced"];
          }
      } elsif (ref($r->{res}) ne 'ARRAY') {
          $log->tracef("[pericmd] res=%s", $r->{res}); #2
          $r->{res} = [500, "Bug in program: result not an array"];
      } elsif (!$r->{res}[0] || $r->{res}[0] < 200 || $r->{res}[0] > 555) {
          $log->tracef("[pericmd] res=%s", $r->{res}); #3
          $r->{res} = [500, "Bug in program: invalid result status, ".
                           "must be 200 <= x <= 555"];
      }
      $r->{format} //= $r->{res}[3]{'cmdline.default_format'};
      $r->{format} //= $r->{meta}{'cmdline.default_format'};
      my $restore_orig_result;
      my $orig_result;
      if (exists $r->{res}[3]{'cmdline.result'}) {
          # temporarily change the result for formatting
          $restore_orig_result = 1;
          $orig_result = $r->{res}[2];
          $r->{res}[2] = $r->{res}[3]{'cmdline.result'};
      }
    FORMAT:
      my $is_success = $r->{res}[0] =~ /\A2/ || $r->{res}[0] == 304;
      if ($is_success &&
              ($self->skip_format ||
               $r->{meta}{'cmdline.skip_format'} ||
               $r->{res}[3]{'cmdline.skip_format'})) {
          $r->{fres} = $r->{res}[2] // '';
      } elsif ($is_success &&
                   ($r->{res}[3]{stream} // $r->{meta}{result}{stream})) {
          # stream will be formatted as displayed by display_result()
      }else {
          $log->tracef("[pericmd] Running hook_format_result ...");
          $r->{res}[3]{stream} = 0;
          $r->{fres} = $self->hook_format_result($r) // '';
      }
      $self->select_output_handle($r);
      $log->tracef("[pericmd] Running hook_display_result ...");
      $self->hook_display_result($r);
      $log->tracef("[pericmd] Running hook_after_run ...");
      $self->hook_after_run($r);
  
      if ($restore_orig_result) {
          $r->{res}[2] = $orig_result;
      }
  
      my $exitcode;
      if ($r->{res}[3] && defined($r->{res}[3]{'cmdline.exit_code'})) {
          $exitcode = $r->{res}[3]{'cmdline.exit_code'};
      } else {
          $exitcode = $self->status2exitcode($r->{res}[0]);
      }
      if ($self->exit) {
          $log->tracef("[pericmd] exit(%s)", $exitcode);
          exit $exitcode;
      } else {
          # so this can be tested
          $log->tracef("[pericmd] <- run(), exitcode=%s", $exitcode);
          $r->{res}[3]{'x.perinci.cmdline.base.exit_code'} = $exitcode;
          return $r->{res};
      }
  }
  
  1;
  # ABSTRACT: Base class for Perinci::CmdLine{::Classic,::Lite}
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::CmdLine::Base - Base class for Perinci::CmdLine{::Classic,::Lite}
  
  =head1 VERSION
  
  This document describes version 1.72 of Perinci::CmdLine::Base (from Perl distribution Perinci-CmdLine-Lite), released on 2017-01-16.
  
  =head1 DESCRIPTION
  
  =for Pod::Coverage ^(.+)$
  
  =head1 PROGRAM FLOW (NORMAL)
  
  If you execute C<run()>, this is what will happen, in order:
  
  =over
  
  =item * Detect if we are running under tab completion mode
  
  This is done by checking the existence of special environment varibles like
  C<COMP_LINE> (bash) or C<COMMAND_LINE> (tcsh). If yes, then jump to L</"PROGRAM
  FLOW (TAB COMPLETION)">. Otherwise, continue.
  
  =item * Run hook_before_run, if defined
  
  This hook (and every other hook) will be passed a single argument C<$r>, a hash
  that contains request data (see L</"REQUEST KEYS">).
  
  Some ideas that you can do in this hook: XXX.
  
  =item * Parse command-line arguments (@ARGV) and set C<action>
  
  If C<read_env> attribute is set to true, and there is environment variable
  defined to set default options (see documentation on C<read_env> and C<env_name>
  attributes) then the environment variable is parsed and prepended first to the
  command-line, so it can be parsed together. For example, if your program is
  called C<foo> and environment variable C<FOO_OPT> is set to C<--opt1 --opt2
  val>. When you execute:
  
   % foo --no-opt1 --trace 1 2
  
  then C<@ARGV> will be set to C<< ('--opt1', '--opt2', 'val', '--no-opt1',
  '--trace', 1, 2) >>. This way, command-line arguments can have a higher
  precedence and override settings from the environment variable (in this example,
  C<--opt1> is negated by C<--no-opt1>).
  
  Currently, parsing is done in two steps. The first step is to extract subcommand
  name. Because we want to allow e.g. C<cmd --verbose subcmd> in addition to C<cmd
  subcmd> (that is, user is allowed to specify options before subcommand name) we
  cannot simply get subcommand name from the first element of C<@ARGV> but must
  parse command-line options. Also, we want to allow user specifying subcommand
  name from option C<cmd --cmd subcmd> because we want to support the notion of
  "default subcommand" (subcommand that takes effect if there is no subcommand
  specified).
  
  In the first step, since we do not know the subcommand yet, we only parse common
  options and strip them. Unknown options at this time will be passed through.
  
  If user specifies common option like C<--help> or C<--version>, then action will
  be set to (respectively) C<help> and C<version> and the second step will be
  skipped. Otherwise we continue the the second step and action by default is set
  to C<call>.
  
  At the end of the first step, we already know the subcommand name (of course, if
  subcommand name is unknown, we exit with error) along with subcommand spec: its
  URL, per-subcommand settings, and so on (see the C<subcommands> attribute). If
  there are no subcommands, subcommand name is set to C<''> (empty string) and the
  subcommand spec is filled from the attributes, e.g. C<url>, C<summary>, <tags>,
  and so on.
  
  We then perform a C<meta> Riap request to the URL to get the Rinci metadata.
  After that, C<hook_after_get_meta> is run if provided. From the Rinci metadata
  we get list of arguments (the C<args> property). From this, we generate a spec
  of command-line options to feed to L<Getopt::Long>. There are some conversions
  being done, e.g. an argument called C<foo_bar> will become command-line option
  C<--foo-bar>. Command-line aliases from metadata are also added to the
  C<Getopt::Long> spec.
  
  It is also at this step that we read config file (if C<read_config> attribute is
  true). We run C<hook_before_read_config_file> first. Some ideas to do in this
  hook: setting default config profile.
  
  We then pass the spec to C<Getopt::Long::GetOptions>, we get function arguments.
  
  We then run C<hook_after_parse_argv>. Some ideas to do in this hook: XXX.
  
  Function arguments that are still missing can be filled from STDIN or files, if
  the metadata specifies C<cmdline_src> property (see L<Rinci::function> for more
  details).
  
  =item * Delegate to C<action_$action> method
  
  Before running the C<action_$action> method, C<hook_before_action> is called
  e.g. to allow changing/fixing action, last chance to check arguments, etc.
  
  After we get the action from the previous step, we delegate to separate
  C<action_$action> method (so there is C<action_version>, C<action_help>, and so
  on; and also C<action_call>). These methods also receive C<$r> as their argument
  and must return an enveloped result (see L<Rinci::function> for more details).
  
  Result is put in C<< $r->{res} >>.
  
  C<hook_after_action> is then called e.g. to preformat result.
  
  =item * Run hook_format_result
  
  Hook must set C<< $r->{fres} >> (formatted result).
  
  If C<skip_format> attribute is true, or function metadata has
  C<cmdline.skip_format> set to true, or result has C<cmdline.skip_format>
  metadata property set to true, then this step is skipped and C<< $r->{fres} >>
  is simply taken from C<< $r->{res}[2] >>.
  
  =item * Run hook_display_result
  
  This hook is used by XXX.
  
  =item * Run hook_after_run, if defined
  
  Some ideas to do in this hook: XXX.
  
  =item * Exit (or return result)
  
  If C<exit> attribute is true, will C<exit()> with the action's envelope result
  status. If status is 200, exit code is 0. Otherwise exit code is status minus
  300. So, a response C<< [501, "Not implemented"] >> will result in exit code of
  201.
  
  If C<exit> attribute is false, will simply return the action result (C<<
  $r->{res} >>). And will also set exit code in C<<
  $r->{res}[3]{'x.perinci.cmdline.base.exit_code'} >>.
  
  =back
  
  =head1 PROGRAM FLOW (TAB COMPLETION)
  
  If program is detected running in tab completion mode, there is some differences
  in the flow. First, C<@ARGV> is set from C<COMP_LINE> (or C<COMMAND_LINE>)
  environment variable. Afterwards, completion is done by calling
  L<Perinci::Sub::Complete>'s C<complete_cli_arg>.
  
  The result is then output to STDOUT (resume from Run hook_format_result step in
  the normal program flow).
  
  =head1 REQUEST KEYS
  
  The various values in the C<$r> hash/stash.
  
  =over
  
  =item * orig_argv => array
  
  Original C<@ARGV> at the beginning of C<run()>.
  
  =item * common_opts => hash
  
  Value of C<common_opts> attribute, for convenience.
  
  =item * action => str
  
  Selected action to use. Usually set from the common options.
  
  =item * format => str
  
  Selected format to use. Usually set from the common option C<--format>.
  
  =item * read_config => bool
  
  This is set in run() to signify that we have tried to read config file (this is
  set to true even though config file does not exist). This is never set to true
  when C<read_config> attribute is set, which means that we never try to read any
  config file.
  
  =item * read_env => bool
  
  This is set in run() to signify that we will try to read env for default
  options. This settng can be turned off e.g. in common option C<no_env>. This is
  never set to true when C<read_env> attribute is set to false, which means that
  we never try to read environment.
  
  =item * config => hash
  
  This is set in the routine that reads config file, containing the config hash.
  It might be an empty hash (if there is on config file to read), or a hash with
  sections as keys and hashrefs as values (configuration for each section). The
  data can be merged from several existing config files.
  
  =item * read_config_files => array
  
  This is set in the routine that reads config file, containing the list of config
  files actually read, in order.
  
  =item * config_paths => array of str
  
  =item * config_profile => str
  
  =item * parse_argv_res => array
  
  Enveloped result of C<parse_argv()>.
  
  =item * ignore_missing_config_profile_section => bool (default 1)
  
  This is checked in the parse_argv(). To aid error checking, when a user
  specifies a profile (e.g. via C<--config-profile FOO>) and config file exists
  but the said profile section is not found in the config file, an error is
  returned. This is to notify user that perhaps she mistypes the profile name.
  
  But this checking can be turned off with this setting. This is sometimes used
  when e.g. a subclass wants to pick a config profile automatically by setting C<<
  $r->{config_profile} >> somewhere before reading config file, but do not want to
  fail execution when config profile is not found. An example of code that does
  this is L<Perinci::CmdLine::depak>.
  
  =item * subcommand_name => str
  
  Also set by C<parse_argv()>. The subcommand name in effect, either set
  explicitly by user using C<--cmd> or the first command-line argument, or set
  implicitly with the C<default_subcommand> attribute. Undef if there is no
  subcommand name in effect.
  
  =item * subcommand_name_from => str
  
  Also set by C<parse_argv()>. Tells how the C<subcommand_name> request key is
  set. Value is either C<--cmd> (if set through C<--cmd> common option), C<arg>
  (if set through first command-line argument), C<default_subcommand> (if set to
  C<default_subcommand> attribute), or undef if there is no subcommand_name set.
  
  =item * subcommand_data => hash
  
  Also set by C<parse_argv()>. Subcommand data, including its URL, summary (if
  exists), and so on. Note that if there is no subcommand, this will contain data
  for the main command, i.e. URL will be set from C<url> attribute, summary from
  C<summary> attribute, and so on. This is a convenient way to get what URL and
  summary to use, and so on.
  
  =item * skip_parse_subcommand_argv => bool
  
  Checked by C<parse_argv()>. Can be set to 1, e.g. in common option handler for
  C<--help> or C<--version> to skip parsing @ARGV for per-subcommand options.
  
  =item * args => hash
  
  Also taken from C<parse_argv()> result.
  
  =item * meta => hash
  
  Result of C<get_meta()>.
  
  =item * dry_run => bool
  
  Whether to pass C<-dry_run> special argument to function.
  
  =item * res => array
  
  Enveloped result of C<action_ACTION()>.
  
  =item * fres => str
  
  Result from C<hook_format_result()>.
  
  =item * output_handle => handle
  
  Set by select_output_handle() to choose output handle. Normally it's STDOUT but
  can also be pipe to pager (if paging is turned on).
  
  =item * naked_res => bool
  
  Set to true if user specifies C<--naked-res>.
  
  =item * viewer => str
  
  Program to use as external viewer.
  
  =item * viewer_temp_path => str
  
  Set to temporary filename created to store the result to view to external viewer
  program.
  
  =back
  
  =head1 HOOKS
  
  All hooks will receive the argument C<$r>, a per-request hash/stash. The list
  below is by order of calling.
  
  =head2 $cmd->hook_before_run($r)
  
  Called at the start of C<run()>. Can be used to set some initial values of other
  C<$r> keys. Or setup the logger.
  
  =head2 $cmd->hook_before_read_config_file($r)
  
  Only called when C<read_config> attribute is true.
  
  =head2 $cmd->hook_after_read_config_file($r)
  
  Only called when C<read_config> attribute is true.
  
  =head2 $cmd->hook_after_get_meta($r)
  
  Called after the C<get_meta> method gets function metadata, which normally
  happens during parsing argument, because parsing function arguments require the
  metadata (list of arguments, etc).
  
  PC:Lite as well as PC:Classic use this hook to insert a common option
  C<--dry-run> if function metadata expresses that function supports dry-run mode.
  
  PC:Lite also checks the C<deps> property here. PC:Classic doesn't do this
  because it uses function wrapper (L<Perinci::Sub::Wrapper>) which does this.
  
  =head2 $cmd->hook_after_parse_argv($r)
  
  Called after C<run()> calls C<parse_argv()> and before it checks the result.
  C<$r->{parse_argv_res}> will contain the result of C<parse_argv()>. The hook
  gets a chance to, e.g. fill missing arguments from other source.
  
  Note that for sources specified in the C<cmdline_src> property, this base class
  will do the filling in after running this hook, so no need to do that here.
  
  PC:Lite uses this hook to give default values to function arguments C<<
  $r->{args} >> from the Rinci metadata. PC:Classic doesn't do this because it
  uses function wrapper (L<Perinci::Sub::Wrapper>) which will do this as well as
  some other stuffs (validate function arguments, etc).
  
  =head2 $cmd->hook_before_action($r)
  
  Called before calling the C<action_ACTION> method. Some ideas to do in this
  hook: modifying action to run (C<< $r->{action} >>), last check of arguments
  (C<< $r->{args} >>) before passing them to function.
  
  PC:Lite uses this hook to validate function arguments. PC:Classic does not do
  this because it uses function wrapper which already does this.
  
  =head2 $cmd->hook_after_action($r)
  
  Called after calling C<action_ACTION> method. Some ideas to do in this hook:
  preformatting result (C<< $r->{res} >>).
  
  =head2 $cmd->hook_format_result($r)
  
  The hook is supposed to format result in C<$res->{res}> (an array).
  
  All direct subclasses of PC:Base do the formatting here.
  
  =head2 $cmd->hook_display_result($r)
  
  The hook is supposed to display the formatted result (stored in C<$r->{fres}>)
  to STDOUT. But in the case of streaming output, this hook can also set it up.
  
  All direct subclasses of PC:Base do the formatting here.
  
  =head2 $cmd->hook_after_run($r)
  
  Called at the end of C<run()>, right before it exits (if C<exit> attribute is
  true) or returns C<$r->{res}>. The hook has a chance to modify exit code or
  result.
  
  =head1 SPECIAL ARGUMENTS
  
  Below is list of special arguments that may be passed to your function by the
  framework. Per L<Rinci> specification, these are prefixed by C<-> (dash).
  
  =head2 -dry_run => bool
  
  Only when in dry run mode, to notify function that we are in dry run mode.
  
  =head2 -cmdline => obj
  
  Only when C<pass_cmdline_object> attribute is set to true. This can be useful
  for the function to know about various stuffs, by probing the framework object.
  
  =head2 -cmdline_r => hash
  
  Only when C<pass_cmdline_object> attribute is set to true. Contains the C<$r>
  per-request hash/stash. This can be useful for the function to know about
  various stuffs, e.g. parsed configuration data, etc.
  
  =head2 -cmdline_src_ARGNAME => str
  
  This will be set if argument is retrieved from C<file>, C<stdin>,
  C<stdin_or_file>, C<stdin_or_files>, or C<stdin_line>.
  
  =head2 -cmdline_srcfilenames_ARGNAME => array
  
  An extra information if argument value is retrieved from file(s), so the
  function can know the filename(s).
  
  =head1 METADATA PROPERTY ATTRIBUTE
  
  This module observes the following Rinci metadata property attributes:
  
  =head2 cmdline.default_format => STR
  
  Set default output format (if user does not specify via --format command-line
  option).
  
  =head2 cmdline.skip_format => bool
  
  If you set it to 1, you specify that function's result never needs formatting
  (i.e. the function outputs raw text to be outputted directly), so no formatting
  will be done. See also: C<skip_format> attribute, C<cmdline.skip_format> result
  metadata attribute.
  
  =head1 RESULT METADATA
  
  This module interprets the following result metadata property/attribute:
  
  =head2 attribute: cmdline.exit_code => int
  
  Instruct to use this exit code, instead of using (function status - 300).
  
  =head2 attribute: cmdline.result => any
  
  Replace result. Can be useful for example in this case:
  
   sub is_palindrome {
       my %args = @_;
       my $str = $args{str};
       my $is_palindrome = $str eq reverse($str);
       [200, "OK", $is_palindrome,
        {"cmdline.result" => ($is_palindrome ? "Palindrome" : "Not palindrome")}];
   }
  
  When called as a normal function we return boolean value. But as a CLI, we
  display a more user-friendly message.
  
  =head2 attribute: cmdline.default_format => str
  
  Default format to use. Can be useful when you want to display the result using a
  certain format by default, but still allows user to override the default.
  
  =head2 attribute: cmdline.page_result => bool
  
  If you want to filter the result through pager (currently defaults to
  C<$ENV{PAGER}> or C<less -FRSX>), you can set C<cmdline.page_result> in result
  metadata to true.
  
  For example:
  
   $SPEC{doc} = { ... };
   sub doc {
       ...
       [200, "OK", $doc, {"cmdline.page_result"=>1}];
   }
  
  =head2 attribute: cmdline.pager => STR
  
  Instruct to use specified pager instead of C<$ENV{PAGER}> or the default C<less>
  or C<more>.
  
  =head2 attribute: cmdline.view_result => bool
  
  Aside from using a pager, you can also use a viewer. The difference is, when we
  use a pager we pipe the output directly to the pager, but when we use a viewer
  we write to a temporary file then call the viewer with that temporary filename
  as argument. Viewer settings override pager settings.
  
  If this attribute is set to true, will view result using external viewer
  (external viewer program is set either from C<cmdline.viewer> or C<VIEWER> or
  C<BROWSER>. An error is raised when there is no viewer set.)
  
  =head2 attribute: cmdline.viewer => STR
  
  Instruct to use specified viewer instead of C<$ENV{VIEWER}> or C<$ENV{BROWSER}>.
  
  =head2 attribute: cmdline.skip_format => bool (default: 0)
  
  When we want the command-line framework to just print the result without any
  formatting. See also: C<skip_format> attribute, C<cmdline.skip_format> function
  metadata attribute.
  
  =head2 attribute: x.perinci.cmdline.base.exit_code => int
  
  This is added by this module, so exit code can be tested.
  
  =head1 ATTRIBUTES
  
  =head2 actions => array
  
  Contains a list of known actions and their metadata. Keys should be action
  names, values should be metadata. Metadata is a hash containing these keys:
  
  =head2 common_opts => hash
  
  A hash of common options, which are command-line options that are not associated
  with any subcommand. Each option is itself a specification hash containing these
  keys:
  
  =over
  
  =item * category (str)
  
  Optional, for grouping options in help/usage message, defaults to C<Common
  options>.
  
  =item * getopt (str)
  
  Required, for Getopt::Long specification.
  
  =item * handler (code)
  
  Required, for Getopt::Long specification. Note that the handler will receive C<<
  ($geopt, $val, $r) >> (an extra C<$r>).
  
  =item * usage (str)
  
  Optional, displayed in usage line in help/usage text.
  
  =item * summary (str)
  
  Optional, displayed in description of the option in help/usage text.
  
  =item * show_in_usage (bool or code, default: 1)
  
  A flag, can be set to 0 if we want to skip showing this option in usage in
  --help, to save some space. The default is to show all, except --subcommand when
  we are executing a subcommand (obviously).
  
  =item * show_in_options (bool or code, default: 1)
  
  A flag, can be set to 0 if we want to skip showing this option in options in
  --help. The default is to 0 for --help and --version in compact help. Or
  --subcommands, if we are executing a subcommand (obviously).
  
  =item * order (int)
  
  Optional, for ordering. Lower number means higher precedence, defaults to 1.
  
  =back
  
  A partial example from the default set by the framework:
  
   {
       help => {
           category        => 'Common options',
           getopt          => 'help|h|?',
           usage           => '--help (or -h, -?)',
           handler         => sub { ... },
           order           => 0,
           show_in_options => sub { $ENV{VERBOSE} },
       },
       format => {
           category    => 'Common options',
           getopt      => 'format=s',
           summary     => 'Choose output format, e.g. json, text',
           handler     => sub { ... },
       },
       undo => {
           category => 'Undo options',
           getopt   => 'undo',
           ...
       },
       ...
   }
  
  The default contains: help (getopt C<help|h|?>), version (getopt C<version|v>),
  action (getopt C<action>), format (getopt C<format=s>), format_options (getopt
  C<format-options=s>), json). If there are more than one subcommands, this will
  also be added: list (getopt C<list|l>). If dry-run is supported by function,
  there will also be: dry_run (getopt C<dry-run>). If undo is turned on, there
  will also be: undo (getopt C<undo>), redo (getopt C<redo>), history (getopt
  C<history>), clear_history (getopt C<clear-history>).
  
  Sometimes you do not want some options, e.g. to remove C<format> and
  C<format_options>:
  
   delete $cmd->common_opts->{format};
   delete $cmd->common_opts->{format_options};
   $cmd->run;
  
  Sometimes you want to rename some command-line options, e.g. to change version
  to use capital C<-V> instead of C<-v>:
  
   $cmd->common_opts->{version}{getopt} = 'version|V';
  
  Sometimes you want to add subcommands as common options instead. For example:
  
   $cmd->common_opts->{halt} = {
       category    => 'Server options',
       getopt      => 'halt',
       summary     => 'Halt the server',
       handler     => sub {
           my ($go, $val, $r) = @_;
           $r->{subcommand_name} = 'shutdown';
       },
   };
  
  This will make:
  
   % cmd --halt
  
  equivalent to executing the 'shutdown' subcommand:
  
   % cmd shutdown
  
  =head2 completion => code
  
  Will be passed to L<Perinci::Sub::Complete>'s C<complete_cli_arg()>. See its
  documentation for more details.
  
  =head2 default_subcommand => str
  
  Set subcommand to this if user does not specify which to use (either via first
  command-line argument or C<--cmd> option). See also: C<get_subcommand_from_arg>.
  
  =head2 auto_abbrev_subcommand => bool (default: 1)
  
  If set to yes, then if a partial subcommand name is given on the command-line
  and unambiguously completes to an existing subcommand name, it will be assumed
  to be the complete subcommand name. This is like the C<auto_abbrev> behavior of
  L<Getopt::Long>. For example:
  
   % myapp c
  
  If there are subcommands C<create>, C<modify>, C<move>, C<delete>, then C<c> is
  assumed to be C<create>. But if:
  
   % myapp mo
  
  then it results in an unknown subcommand error because mo is ambiguous between
  C<modify> and C<move>.
  
  Note that subcommand name in config section must be specified in full. This
  option is about convenience at the command-line only.
  
  =head2 get_subcommand_from_arg => int (default: 1)
  
  The default is 1, which is to get subcommand from the first command-line
  argument except when there is C<default_subcommand> defined. Other valid values
  are: 0 (not getting from first command-line argument), 2 (get from first
  command-line argument even though there is C<default_subcommand> defined).
  
  =head2 description => str
  
  =head2 exit => bool (default: 1)
  
  =head2 formats => array
  
  Available output formats.
  
  =head2 default_format => str
  
  Default format.
  
  =head2 pass_cmdline_object => bool (default: 0)
  
  Whether to pass special argument C<-cmdline> containing the cmdline object to
  function. This can be overriden using the C<pass_cmdline_object> on a
  per-subcommand basis.
  
  In addition to C<-cmdline>, C<-cmdline_r> will also be passed, containing the
  C<$r> per-request stash/hash (see L</"REQUEST KEYS">).
  
  Passing the cmdline object can be useful, e.g. to call action_help(), to get the
  settings of the Perinci::CmdLine, etc.
  
  =head2 per_arg_json => bool
  
  This will be passed to L<Perinci::Sub::GetArgs::Argv>, which has this value
  default to 1.
  
  =head2 per_arg_yaml => bool (default: 1)
  
  This will be passed to L<Perinci::Sub::GetArgs::Argv>, which has this value
  default to 1.
  
  =head2 program_name => str
  
  Default is from PERINCI_CMDLINE_PROGRAM_NAME environment or from $0.
  
  =head2 riap_version => float (default: 1.1)
  
  Specify L<Riap> protocol version to use. Will be passed to Riap client
  constructor (unless you already provide a Riap client object, see
  C<riap_client>).
  
  =head2 riap_client => obj
  
  Set to Riap client instance, should you want to create one yourself. Otherwise
  will be set L<Perinci::Access> (in PC:Classic), or L<Perinci::Access::Lite> (in
  PC:Lite).
  
  =head2 riap_client_args => hash
  
  Arguments to pass to Riap client constructor. Will be used unless you create
  your own Riap client object (see C<riap_client>). One of the things this
  attribute is used is to pass HTTP basic authentication to Riap client
  (L<Perinci::Access::HTTP::Client>):
  
   riap_client_args => {handler_args => {user=>$USER, password=>$PASS}}
  
  =head2 subcommands => hash | code
  
  Should be a hash of subcommand specifications or a coderef.
  
  Each subcommand specification is also a hash(ref) and should contain these keys:
  
  =over
  
  =item * C<url> (str, required)
  
  Location of function (accessed via Riap).
  
  =item * C<summary> (str, optional)
  
  Will be retrieved from function metadata at C<url> if unset
  
  =item * C<description> (str, optional)
  
  Shown in verbose help message, if description from function metadata is unset.
  
  =item * C<tags> (array of str, optional)
  
  For grouping or categorizing subcommands, e.g. when displaying list of
  subcommands.
  
  =item * C<log_any_app> (bool, optional)
  
  Whether to load Log::Any::App, default is true. For subcommands that need fast
  startup you can try turning this off for said subcommands. See L</"LOGGING"> for
  more details.
  
  =item * C<use_utf8> (bool, optional)
  
  Whether to issue L<< binmode(STDOUT, ":utf8") >>. See L</"LOGGING"> for more
  details.
  
  =item * C<undo> (bool, optional)
  
  Can be set to 0 to disable transaction for this subcommand; this is only
  relevant when C<undo> attribute is set to true.
  
  =item * C<show_in_help> (bool, optional, default 1)
  
  If you have lots of subcommands, and want to show only some of them in --help
  message, set this to 0 for subcommands that you do not want to show.
  
  =item * C<pass_cmdline_object> (bool, optional, default 0)
  
  To override C<pass_cmdline_object> attribute on a per-subcommand basis.
  
  =item * C<args> (hash, optional)
  
  If specified, will send the arguments (as well as arguments specified via the
  command-line). This can be useful for a function that serves more than one
  subcommand, e.g.:
  
   subcommands => {
       sub1 => {
           summary => 'Subcommand one',
           url     => '/some/func',
           args    => {flag=>'one'},
       },
       sub2 => {
           summary => 'Subcommand two',
           url     => '/some/func',
           args    => {flag=>'two'},
       },
   }
  
  In the example above, both subcommand C<sub1> and C<sub2> point to function at
  C</some/func>. But the function can differentiate between the two via the
  C<flag> argument being sent.
  
   % cmdprog sub1 --foo 1 --bar 2
   % cmdprog sub2 --foo 2
  
  In the first invocation, function will receive arguments C<< {foo=>1, bar=>2,
  flag=>'one'} >> and for the second: C<< {foo=>2, flag=>'two'} >>.
  
  =back
  
  Subcommands can also be a coderef, for dynamic list of subcommands. The coderef
  will be called as a method with hash arguments. It can be called in two cases.
  First, if called without argument C<name> (usually when doing --subcommands) it
  must return a hashref of subcommand specifications. If called with argument
  C<name> it must return subcommand specification for subcommand with the
  requested name only.
  
  =head2 summary => str
  
  =head2 tags => array of str
  
  =head2 url => str
  
  Required if you only want to run one function. URL should point to a function
  entity.
  
  Alternatively you can provide multiple functions from which the user can select
  using the first argument (see B<subcommands>).
  
  =head2 read_env => bool (default: 1)
  
  Whether to read environment variable for default options.
  
  =head2 env_name => str
  
  Environment name to read default options from. Default is from program name,
  upper-cased, sequences of dashes/nonalphanums replaced with a single underscore,
  plus a C<_OPT> suffix. So if your program name is called C<cpandb-cpanmeta> the
  default environment name is C<CPANDB_CPANMETA_OPT>.
  
  =head2 read_config => bool (default: 1)
  
  Whether to read configuration files.
  
  =head2 config_filename => str|array[str]|array[hash]
  
  Configuration filename(s). The default is C<< program_name . ".conf" >>. For
  example, if your program is named C<foo-bar>, config_filename will be
  C<foo-bar.conf>.
  
  You can specify an array of filename strings, which will be checked in order,
  e.g.: C<< ["myapp.conf", "myapp.ini"] >>.
  
  You can also specify an array of hashrefs, for more complex scenario. Each hash
  can contain these keys: C<filename>, C<section>. For example:
  
   [
       {filename => 'mysuite.conf', section=>'myapp1'},
       {filename => 'myapp1.conf'}, # section = GLOBAL (default)
   ]
  
  This means, configuration will be searched in C<mysuite.conf> under the section
  C<myapp1>, and then in C<myapp1.conf> in the default/global section.
  
  =head2 config_dirs => array of str
  
  Which directories to look for configuration file. The default is to look at the
  user's home and then system location. On Unix, it's C<< [ "$ENV{HOME}/.config",
  $ENV{HOME}, "/etc"] >>. If $ENV{HOME} is empty, getpwuid() is used to get home
  directory entry.
  
  =head2 cleanser => obj
  
  Object to cleanse result for JSON output. By default this is an instance of
  L<Data::Clean::JSON> and should not be set to other value in most cases.
  
  =head2 use_cleanser => bool (default: 1)
  
  When a function returns result, and the user wants to display the result as
  JSON, the result might need to be cleansed first (using L<Data::Clean::JSON> by
  default) before it can be encoded to JSON, for example it might contain Perl
  objects or scalar references or other stuffs. If you are sure that your function
  does not produce those kinds of data, you can set this to false to produce a
  more lightweight script.
  
  =head2 extra_urls_for_version => array of str
  
  =head2 skip_format => bool
  
  If set to 1, assume that function returns raw text that need not be translated,
  and so will not offer common command-line options C<--format>, C<--json>, as
  well as C<--naked-res>.
  
  As an alternative to this, can also be done on a per-function level by setting
  function metadata property C<cmdline.skip_format> to true. Or, can also be done
  on a per-function result basis by returning result metadata
  C<cmdline.skip_format> set to true.
  
  =head2 use_utf8 => bool (default: from env UTF8, or 0)
  
  Whether or not to set utf8 flag on output. If undef, will default to UTF8
  environment. If that is also undef, will default to 0.
  
  =head2 default_dry_run => bool (default: 0)
  
  If set to 1, then dry-mode will be turned on by default unless user uses
  DRY_RUN=0 or C<--no-dry-run>.
  
  =head1 METHODS
  
  =head2 $cmd->run() => ENVRES
  
  The main method to run your application. See L</"PROGRAM FLOW"> for more details
  on what this method does.
  
  =head2 $cmd->do_completion() => ENVRES
  
  Called by run().
  
  =head2 $cmd->parse_argv() => ENVRES
  
  Called by run().
  
  =head2 $cmd->get_meta($r, $url) => ENVRES
  
  Called by parse_argv() or do_completion(). Subclass has to implement this.
  
  =head1 ENVIRONMENT
  
  =head2 VIEW_RESULT => bool
  
  Can be set to 1 to force using viewer to view result. Can be set to 0 to
  explicitly disable using viewer to view result even though
  C<cmdline.view_result> result metadata attribute is active.
  
  =head2 VIEWER => str
  
  Can be set to select the viewer program to override C<cmdline.viewer>. Can also
  be set to C<''> or C<0> to explicitly disable using viewer to view result even
  though C<cmdline.view_result> result metadata attribute is active.
  
  =head2 PAGE_RESULT => bool
  
  Can be set to 1 to force paging of result. Can be set to 0 to explicitly disable
  paging even though C<cmd.page_result> result metadata attribute is active.
  
  =head2 PAGER => str
  
  Like in other programs, can be set to select the pager program (when
  C<cmdline.page_result> result metadata is active). Can also be set to C<''> or
  C<0> to explicitly disable paging even though C<cmd.page_result> result metadata
  is active.
  
  =head2 BROWSER => str
  
  When VIEWER is not set, then this environment variable will be used to select
  external viewer program.
  
  =head2 PERINCI_CMDLINE_PROGRAM_NAME => STR
  
  Can be used to set CLI program name.
  
  =head2 UTF8 => bool
  
  To set default for C<use_utf8> attribute.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-CmdLine-Lite>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-CmdLine-Lite>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-CmdLine-Lite>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_CMDLINE_BASE

    $main::fatpacked{"Perinci/CmdLine/Classic.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_CMDLINE_CLASSIC';
  package Perinci::CmdLine::Classic;
  
  our $DATE = '2016-12-15'; # DATE
  our $VERSION = '1.73'; # VERSION
  
  use 5.010001;
  #use strict; # enabled by Moo
  #use warnings; # enabled by Moo
  use Log::Any::IfLOG '$log';
  
  use Moo;
  use experimental 'smartmatch'; # must be after Moo
  use Locale::TextDomain::UTF8 'Perinci-CmdLine-Classic';
  use Perinci::Object;
  use Scalar::Util qw(blessed);
  
  our $REQ_VERSION = 0; # version requested by user
  
  extends 'Perinci::CmdLine::Base';
  
  with 'Color::Theme::Role::ANSI' unless $ENV{COMP_LINE};
  with 'Perinci::CmdLine::Classic::Role::Help' unless $ENV{COMP_LINE};
  with 'Term::App::Role::Attrs' unless $ENV{COMP_LINE};
  
  has log => (is => 'rw', default=>sub{1});
  has undo => (is=>'rw', default=>sub{0});
  has undo_dir => (
      is => 'rw',
      lazy => 1,
      default => sub {
          require File::HomeDir;
  
          my $self = shift;
          my $dir = File::HomeDir->my_home . "/." . $self->program_name;
          mkdir $dir unless -d $dir;
          $dir .= "/.undo";
          mkdir $dir unless -d $dir;
          $dir;
      }
  );
  has riap_client => (
      is => 'rw',
      lazy => 1,
      default => sub {
          my $self = shift;
  
          require Perinci::Access;
          require Perinci::Access::Perl;
          require Perinci::Access::Schemeless;
          my %args = (
              riap_version => $self->riap_version,
              %{$self->riap_client_args // {}},
          );
          my %opts;
          if ($self->undo) {
              $opts{use_tx} = 1;
              $opts{custom_tx_manager} = sub {
                  my $pa = shift;
                  require Perinci::Tx::Manager;
                  state $txm = Perinci::Tx::Manager->new(
                      data_dir => $self->undo_dir,
                      pa => $pa,
                  );
                  $txm;
             };
          }
          $args{handlers} = {
              pl => Perinci::Access::Perl->new(%opts),
              '' => Perinci::Access::Schemeless->new(%opts),
          };
          #$log->tracef("Creating Perinci::Access object with args: %s", \%args);
          Perinci::Access->new(%args);
      }
  );
  has action_metadata => (
      is => 'rw',
      default => sub {
          +{
              clear_history => {
              },
              help => {
                  default_log => 0,
                  use_utf8 => 1,
              },
              history => {
              },
              subcommands => {
                  default_log => 0,
                  use_utf8 => 1,
              },
              redo => {
              },
              call => {
              },
              undo => {
              },
              version => {
                  default_log => 0,
                  use_utf8 => 1,
              },
          },
      },
  );
  has default_prompt_template => (is=>'rw');
  
  # OLD name for backward compat, will be removed later
  sub log_any_app { goto \&log }
  
  sub VERSION {
      my ($pkg, $req) = @_;
      $REQ_VERSION = $req;
  }
  
  sub BUILD {
      my ($self, $args) = @_;
  
      my $formats = [qw(
                           text text-simple text-pretty
                           json json-pretty yaml perl
                           ruby phpserialization)];
  
      if (!$self->{default_prompt_template}) {
          $self->{default_prompt_template} = N__("Enter %s:") . " ",
      }
  
      if (!$self->{actions}) {
          $self->{actions} = {
              version => {
                  default_log => 0,
                  use_utf8 => 1,
              },
              help => {
                  default_log => 0,
                  use_utf8 => 1,
              },
              subcommands => {
                  default_log => 0,
                  use_utf8 => 1,
              },
              call => {},
  
              history => {},
              clear_history => {},
              redo => {},
              undo => {},
          };
      }
  
      # translate summary & usage
      my $_t = sub {
          no warnings;
          my $co_name = shift;
          my $copt = $Perinci::CmdLine::Base::copts{$co_name};
          my %res;
          for (keys %$copt) {
              if ($_ eq 'summary' || $_ eq 'usage') {
                  $res{$_} = N__($copt->{$_});
              } else {
                  $res{$_} = $copt->{$_};
              }
          }
          %res;
      };
  
      if (!$self->{common_opts}) {
          my $copts = {};
  
          $copts->{version} = {
              $_t->('version'),
              show_in_options => sub { $ENV{VERBOSE} },
          };
          $copts->{help} = {
              $_t->('help'),
              show_in_options => sub { $ENV{VERBOSE} },
          };
  
          unless ($self->skip_format) {
              $copts->{format} = {
                  $_t->('format'),
                  schema => ['str*' => in => $formats],
              };
              $copts->{json} = {
                  $_t->('json'),
                  summary => N__("Equivalent to --format=json-pretty"),
              };
              $copts->{naked_res} = {
                  $_t->('naked_res'),
                  summary => N__("When outputing as JSON, strip result envelope"),
              };
              $copts->{format_options} = {
                  getopt  => "format-options=s",
                  summary => N__("Pass options to formatter"),
                  handler => sub {
                      my ($go, $val, $r) = @_;
                      $r->{format_options} = __json_decode($val);
                  },
                  is_settable_via_config => 1,
                  tags => ['category:output'],
              };
          }
  
          if ($self->subcommands) {
              $copts->{subcommands} = {
                  $_t->('subcommands'),
                  show_in_options => sub {
                      my ($self, $r) = @_;
                      $ENV{VERBOSE} && !$r->{subcommand_name};
                  },
                  show_in_help => 0,
              };
          }
  
          if (defined $self->default_subcommand) {
              $copts->{cmd} = { $_t->('cmd') };
          }
  
          if ($self->read_config) {
              $copts->{config_path}    = { $_t->('config_path') };
              $copts->{no_config}      = { $_t->('no_config') };
              $copts->{config_profile} = { $_t->('config_profile') };
          }
  
          if ($self->read_env) {
              $copts->{no_env} = { $_t->('no_env') };
          }
  
          if ($self->log) {
              $copts->{log_level} = { $_t->('log_level'), };
              $copts->{trace}     = { $_t->('trace'), };
              $copts->{debug}     = { $_t->('debug'), };
              $copts->{verbose}   = { $_t->('verbose'), };
              $copts->{quiet}     = { $_t->('quiet'), };
          }
  
          if ($self->undo) {
              $copts->{history} = {
                  getopt  => 'history',
                  summary => N__('List actions history'),
                  handler => sub {
                      my ($go, $val, $r) = @_;
                      $r->{action} = 'history';
                      $r->{skip_parse_subcommand_argv} = 1;
                  },
                  tags => ['category:undo'],
              };
              $copts->{clear_history} = {
                  getopt  => "clear-history",
                  summary => N__('Clear actions history'),
                  handler => sub {
                      my ($go, $val, $r) = @_;
                      $r->{action} = 'clear_history';
                      $r->{skip_parse_subcommand_argv} = 1;
                  },
                  tags => ['category:undo'],
              };
              $copts->{undo} = {
                  getopt  => 'undo',
                  summary => N__('Undo previous action'),
                  handler => sub {
                      my ($go, $val, $r) = @_;
                      $r->{action} = 'undo';
                      $r->{skip_parse_subcommand_argv} = 1;
                  },
                  tags => ['category:undo'],
              };
              $copts->{redo} = {
                  getopt  => 'redo',
                  summary => N__('Redo previous undone action'),
                  handler => sub {
                      my ($go, $val, $r) = @_;
                      $r->{action} = 'redo';
                      $r->{skip_parse_subcommand_argv} = 1;
                  },
              };
          }
          $self->{common_opts} = $copts;
      }
  
      $self->{formats} //= $formats;
      $self->{per_arg_json} //= 1;
      $self->{per_arg_yaml} //= 1;
  
      unless ($ENV{COMP_LINE}) {
          my $ct = $self->{color_theme} // $ENV{PERINCI_CMDLINE_COLOR_THEME};
          if (!$ct) {
              if ($self->use_color) {
                  my $bg = $self->detect_terminal->{default_bgcolor} // '';
                  $ct = 'Default::default' .
                      ($bg eq 'ffffff' ? '_whitebg' : '');
              } else {
                  $ct = 'Default::no_color';
              }
          }
          $self->color_theme($ct);
      }
  }
  
  sub __json_decode {
      require JSON::MaybeXS;
      state $json = do { JSON::MaybeXS->new->allow_nonref };
      $json->decode(shift);
  }
  
  sub __json_encode {
      require JSON::MaybeXS;
      state $json = do { JSON::MaybeXS->new->allow_nonref };
      $json->encode(shift);
  }
  
  sub _color {
      my ($self, $color_name, $text) = @_;
      my $color_code = $color_name ?
          $self->get_theme_color_as_ansi($color_name) : "";
      my $reset_code = $color_code ? "\e[0m" : "";
      "$color_code$text$reset_code";
  }
  
  #NOW UNUSED
  #sub err {
  #    my ($self, $msg) = @_;
  #    $msg .= "\n" unless $msg =~ /\n\z/;
  #    $self->_color('error_label', "ERROR: ") . $msg;
  #}
  
  # format array item as row
  sub hook_format_row {
      state $dfpc = do {
          require Data::Format::Pretty::Console;
          Data::Format::Pretty::Console->new({interactive=>0});
      };
  
      my ($self, $r, $row) = @_;
      my $ref = ref($row);
      # we catch common cases to be faster (avoid dfpc's structure identification)
      if (!$ref) {
          # simple scalar
          return ($row // "") . "\n";
      } elsif ($ref eq 'ARRAY' && !(grep {ref($_)} @$row)) {
          # an array of scalars
          return join("\t", map { $dfpc->_format_cell($_) } @$row) . "\n";
      } else {
          # otherwise, just feed it to dfpc
          return $dfpc->_format($row);
      }
  }
  
  sub hook_after_get_meta {
      my ($self, $r) = @_;
  
      my $metao = risub($r->{meta});
      if ($metao->can_dry_run) {
          my $default_dry_run = $metao->default_dry_run // $self->default_dry_run;
          $r->{dry_run} = 1 if $default_dry_run;
          $r->{dry_run} = ($ENV{DRY_RUN} ? 1:0) if defined $ENV{DRY_RUN};
          $self->common_opts->{dry_run} = {
              getopt  => $default_dry_run ? 'dry-run!' : 'dry-run',
              summary => $default_dry_run ?
                  N__("Disable simulation mode (also via DRY_RUN=0)") :
                  N__("Run in simulation mode (also via DRY_RUN=1)"),
              handler => sub {
                  my ($go, $val, $r) = @_;
                  if ($val) {
                      $log->debugf("[pericmd] Dry-run mode is activated");
                      $r->{dry_run} = 1;
                      #$ENV{VERBOSE} = 1;
                  } else {
                      $log->debugf("[pericmd] Dry-run mode is deactivated");
                      $r->{dry_run} = 0;
                  }
              },
          };
      }
  }
  
  my ($ph1, $ph2); # patch handles
  my $setup_progress;
  sub _setup_progress_output {
      my $self = shift;
  
      if ($ENV{PROGRESS} // (-t STDOUT)) {
          require Progress::Any::Output;
          my $out = Progress::Any::Output->set("TermProgressBarColor");
          $setup_progress = 1;
          # we need to patch the logger adapters so it won't interfere with
          # progress meter's output
          require Monkey::Patch::Action;
          $ph1 = Monkey::Patch::Action::patch_package(
              'Log::Log4perl::Appender::Screen', 'log',
              'replace', sub {
                  my ($self, %params) = @_;
  
                  my $msg = $params{message};
                  $msg =~ s/\n//g;
  
                  # clean currently displayed progress bar first
                  if ($out->{lastlen}) {
                      print
                          "\b" x $out->{lastlen},
                              " " x $out->{lastlen},
                                  "\b" x $out->{lastlen};
                      undef $out->{lastlen};
                  }
  
                  # force output update so progress bar is displayed again
                  # immediately
                  $Progress::Any::output_data{"$out"}{force_update} = 1;
  
                  say $msg;
              },
          ) if defined &{"Log::Log4perl::Appender::Screen::log"};
          $ph2 = Monkey::Patch::Action::patch_package(
              'Log::Log4perl::Appender::ScreenColoredLevels', 'log',
              'replace', sub {
                  my ($self, %params) = @_;
                  # BEGIN copy-paste'ish from ScreenColoredLevels.pm
                  my $msg = $params{message};
                  $msg =~ s/\n//g;
                  if (my $color=$self->{color}->{$params{log4p_level}}) {
                      $msg = Term::ANSIColor::colored($msg, $color);
                  }
                  # END copy-paste'ish
  
                  # clean currently displayed progress bar first
                  if ($out->{lastlen}) {
                      print
                          "\b" x $out->{lastlen},
                              " " x $out->{lastlen},
                                  "\b" x $out->{lastlen};
                      undef $out->{lastlen};
                  }
  
                  # force output update so progress bar is displayed again
                  # immediately
                  $Progress::Any::output_data{"$out"}{force_update} = 1;
  
                  # XXX duplicated code above, perhaps move this to
                  # TermProgressBarColor's clean_bar() or something
  
                  say $msg;
              }
          ) if defined &{"Log::Log4perl::Appender::ScreenColoredLevels::log"};
      }
  }
  
  sub _unsetup_progress_output {
      my $self = shift;
  
      return unless $setup_progress;
      my $out = $Progress::Any::outputs{''}[0];
      $out->cleanup if $out->can("cleanup");
      undef $ph1;
      undef $ph2;
      $setup_progress = 0;
  }
  
  sub _load_log_any_app {
      my ($self, $r) = @_;
      # Log::Any::App::init can already avoid being run twice, but we need to
      # check anyway to avoid logging starting message below twice.
      return if $r->{_log_any_app_loaded}++;
      require Log::Any::App;
      Log::Any::App::init();
  
      # we log this after we initialize Log::Any::App, since Log::Any::App might
      # not be loaded at all. yes, this means that this log message is printed
      # rather late and might not be the first message to be logged (see log
      # messages in run()) if user already loads Log::Any::App by herself.
      $log->debugf("Program %s started with arguments: %s",
                   $0, $r->{orig_argv});
  }
  
  # this hook is called at the start of run(), can be used to initialize stuffs
  sub hook_before_run {
      my ($self, $r) = @_;
  
      $log->tracef("Start of CLI run");
  
      # save, for showing in history, among others
      $r->{orig_argv} = [@ARGV];
  }
  
  sub hook_after_parse_argv {
      my ($self, $r) = @_;
  
      # We load Log::Any::App rather late here, so user can customize level via
      # --debug, --dry-run, etc.
      unless ($ENV{COMP_LINE}) {
          my $do_log = $r->{subcommand_data}{log} //
              $r->{subcommand_data}{log_any_app} # OLD compat, will be removed later
                  if $r->{subcommand_data};
          $do_log //= $ENV{LOG};
          $do_log //= $self->action_metadata->{$r->{action}}{default_log}
              if $self->{action};
          $do_log //= $self->log;
          $self->_load_log_any_app($r) if $do_log;
      }
  }
  
  sub hook_format_result {
      # save startup time under completion
      return if $ENV{COMP_LINE};
  
      my ($self, $r) = @_;
  
      my $res    = $r->{res};
      my $format = $r->{format} // 'text';
      my $meta   = $r->{meta};
  
      require Perinci::Result::Format;
  
      unless ($format ~~ @{ $self->formats }) {
          warn "Unknown output format '$format'";
          $format = 'text';
      }
  
      $res->[3]{format_options} = $r->{format_options} if $r->{format_options};
  
      my $fres;
      if ($res->[3]{is_stream}) {
          $log->tracef("Result is a stream");
          return undef;
      } elsif ($res->[3]{'x.hint.result_binary'} && $format =~ /text/) {
          $fres = $res->[2];
      } else {
          $log->tracef("Formatting output with %s", $format);
          $fres = Perinci::Result::Format::format($res, $format, $r->{naked_res});
      }
  
      # ux: prefix error message with program name
      if ($format=~/text/ && $r->{res}[0] =~ /\A[45]/ && defined($r->{res}[1])) {
          $fres = "$self->{program_name}: $fres";
      }
  
      $fres;
  }
  
  sub hook_display_result {
      my ($self, $r) = @_;
  
      my $res  = $r->{res};
      my $resmeta = $res->[3] // {};
  
      my $handle = $r->{output_handle};
  
      if ($ENV{COMP_LINE} || $res->[3]{"cmdline.skip_format"}) {
          print $handle $res->[2];
          return;
      }
  
      # set utf8 flag
      my $utf8;
      {
          if ($resmeta->{'x.hint.result_binary'}) {
              # XXX only when format is text?
              $utf8 = 0; last;
          }
  
          my $am = $self->action_metadata->{$r->{action}}
              if $r->{action};
          last if defined($utf8 = $am->{use_utf8});
  
          if ($r->{subcommand_data}) {
              last if defined($utf8 = $r->{subcommand_data}{use_utf8});
          }
  
          $utf8 = $self->use_utf8;
      }
      binmode($handle, ":utf8") if $utf8;
  
      $self->display_result($r);
  }
  
  sub hook_after_run {
      my ($self, $r) = @_;
      $self->_unsetup_progress_output;
  }
  
  sub action_subcommands {
      my ($self, $r) = @_;
  
      if (!$self->subcommands) {
          return [200, "OK", __("There are no subcommands") . ".",
                  {"cmdline.skip_format"=>1}];
      }
  
      $r->{_help_buf} = '';
  
      my $subcommands = $self->list_subcommands;
  
      # XXX get summary from Riap if not exist, but this results in multiple Riap
      # requests.
  
      my %percat_subc; # (cat1 => {subcmd1=>..., ...}, ...)
      while (my ($scn, $sc) = each %$subcommands) {
          my $cat = "";
          for my $tag (@{$sc->{tags} // []}) {
              my $tn = ref($tag) ? $tag->{name} : $tag;
              next unless $tn =~ /^category:(.+)/;
              $cat = $1;
              last;
          }
          $percat_subc{$cat}       //= {};
          $percat_subc{$cat}{$scn}   = $sc;
      }
      my $has_many_cats = scalar(keys %percat_subc) > 1;
  
      my $i = 0;
      for my $cat (sort keys %percat_subc) {
          if ($has_many_cats) {
              $self->_help_add_heading(
                  $r,
                  __x("{category} subcommands",
                      category => ucfirst($cat || __("main"))));
          }
          my $subc = $percat_subc{$cat};
          for my $scn (sort keys %$subc) {
              my $sc = $subc->{$scn};
              my $summary = rimeta($sc)->langprop("summary");
              $self->_help_add_row(
                  $r,
                  [$self->_color('program_name', $scn), $summary],
                  {column_widths=>[-17, -40], indent=>1});
          }
      }
      $self->_help_draw_curtbl($r);
  
      [200, "OK", $r->{_help_buf},
       {"cmdline.skip_format"=>1}];
  }
  
  sub action_version {
      no strict 'refs';
  
      my ($self, $r) = @_;
  
      my $url = $r->{subcommand_data}{url} // $self->url;
  
      my @text;
  
      {
          my $meta = $self->get_meta($r, $url);
          push @text, __x(
              "{program} version {version}",
              program => $self->_color('program_name',
                                       $self->get_program_and_subcommand_name),
              version => $self->_color('emphasis', ($meta->{entity_v} // "?")),
          ),
              ($meta->{entity_date} ? " ($meta->{entity_date})" : ""),
              "\n";
          for my $mod (@{ $meta->{'x.dynamic_generator_modules'} // [] }) {
              push @text, "  ", __x(
                  "{program} version {version}",
                  program => $self->_color('emphasis', $mod),
                  version => $self->_color('emphasis', (${"$mod\::VERSION"} // "?")),
              ),
                  (${"$mod\::DATE"} ? " (".${"$mod\::DATE"}.")" : ""),
                      "\n";
          }
      }
  
      for my $url (@{ $self->extra_urls_for_version // [] }) {
          my $meta = $self->get_meta($r, $url);
          push @text, "  ", __x(
              "{program} version {version}",
              program => $self->_color('emphasis', $url),
              version => $self->_color('emphasis', ($meta->{entity_v} // "?")),
          ),
              ($meta->{entity_date} ? " ($meta->{entity_date})" : ''),
              "\n";
      }
  
      push @text, "  ", __x(
          "{program} version {version}",
          program => $self->_color('emphasis', "Perinci::CmdLine::Classic"),
          version => $self->_color('emphasis',
                                   $Perinci::CmdLine::Classic::VERSION || "dev"),
      ),
          ($Perinci::CmdLine::Classic::DATE ? " ($Perinci::CmdLine::Classic::DATE)" : ""),
          "\n";
  
      [200, "OK", join("", @text), {"cmdline.skip_format"=>1}];
  }
  
  sub action_call {
      my ($self, $r) = @_;
  
      my $scn = $r->{subcommand_name};
      my $scd = $r->{subcommand_data};
  
      my %fargs = %{$r->{args} // {}};
  
      my $tx_id;
  
      my $dry_run = $r->{dry_run};
      my $using_tx = !$dry_run && $self->undo && ($scd->{undo} // 1);
  
      # currently we don't attempt to insert tx_id or dry_run when using argv,
      # we'll just give up
      if ($r->{send_argv} && ($dry_run || $using_tx)) {
          return $r->{parse_argv_res};
      }
  
      if ($using_tx) {
          require UUID::Random;
          $tx_id = UUID::Random::generate();
          $tx_id =~ s/-.+//; # 32bit suffices for small number of txs
          my $summary = join(" ", @{ $r->{orig_argv} });
          my $tres = $self->riap_client->request(
              begin_tx => "/", {tx_id=>$tx_id, summary=>$summary});
          if ($tres->[0] != 200) {
              return [$tres->[0], "Can't start transaction '$tx_id': $tres->[1]"];
          }
      }
  
      # setup output progress indicator
      if ($r->{meta}{features}{progress}) {
          $self->_setup_progress_output;
      }
  
      # call function
      my $res;
      if ($r->{send_argv}) {
          $res = $self->riap_client->request(
              call => $scd->{url},
              {argv=>$r->{orig_argv}}, # XXX tx_id, dry_run (see above)
          );
      } else {
          #$log->tracef("Calling function via _pa with arguments: %s", \%fargs);
          $res = $self->riap_client->request(
              call => $scd->{url},
              {args=>\%fargs, tx_id=>$tx_id, dry_run=>$dry_run});
      }
      $log->tracef("call res=%s", $res);
  
      # commit transaction (if using tx)
      if ($using_tx && $res->[0] =~ /\A(?:200|304)\z/) {
          my $tres = $self->riap_client->request(commit_tx => "/", {tx_id=>$tx_id});
          if ($tres->[0] != 200) {
              return [$tres->[0],"Can't commit transaction '$tx_id': $tres->[1]"];
          }
      }
  
      $res;
  }
  
  sub action_history {
      my ($self, $r) = @_;
      my $res = $self->riap_client->request(list_txs => "/", {detail=>1});
      $log->tracef("list_txs res=%s", $res);
      return $res unless $res->[0] == 200;
      $res->[2] = [sort {($b->{tx_commit_time}//0) <=> ($a->{tx_commit_time}//0)}
                       @{$res->[2]}];
      my @txs;
      for my $tx (@{$res->[2]}) {
          next unless $tx->{tx_status} =~ /[CUX]/;
          push @txs, {
              id          => $tx->{tx_id},
              start_time  => $tx->{tx_start_time},
              commit_time => $tx->{tx_commit_time},
              status      => $tx->{tx_status} eq 'X' ? 'error' :
                  $tx->{tx_status} eq 'U' ? 'undone' : '',
              summary     => $tx->{tx_summary},
          };
      }
      [200, "OK", \@txs];
  }
  
  sub action_clear_history {
      my ($self, $r) = @_;
      $self->riap_client->request(discard_all_txs => "/");
  }
  
  sub action_undo {
      my ($self, $r) = @_;
      $self->riap_client->request(undo => "/");
  }
  
  sub action_redo {
      my ($self, $r) = @_;
      $self->riap_client->request(redo => "/");
  }
  
  1;
  # ABSTRACT: Rinci/Riap-based command-line application framework
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::CmdLine::Classic - Rinci/Riap-based command-line application framework
  
  =head1 VERSION
  
  This document describes version 1.73 of Perinci::CmdLine::Classic (from Perl distribution Perinci-CmdLine-Classic), released on 2016-12-15.
  
  =head1 SYNOPSIS
  
  In C<gen-random-num> script:
  
   use Perinci::CmdLine::Classic;
  
   our %SPEC;
  
   $SPEC{gen_random_num} = {
       v => 1.1,
       summary => 'Generate some random numbers',
       args => {
           count => {
               summary => 'How many numbers to generate',
               schema => ['int*' => min=>0],
               default => 1,
               cmdline_aliases=>{n=>{}},
               req => 1,
               pos => 0,
           },
           min => {
               summary => 'Lower limit of random number',
               schema => 'float*',
               default => 0,
           },
           max => {
               summary => 'Upper limit of random number',
               schema => 'float*',
               default => 1,
           },
       },
       result_naked => 1,
   };
   sub gen_random_num {
       my %args = @_;
  
       my @res;
       for (1..$args{count}) {
           push @res, $args{min} + rand()*($args{max}-$args{min});
       }
       \@res;
   }
  
   Perinci::CmdLine::Classic->new(url => '/main/gen_random_num')->run;
  
  Run your script:
  
   % ./gen-random-num
   0.999473691060306
  
   % ./gen-random-num --min 1 --max 10 5
   1.27390166158969
   1.69077475473679
   8.97748327778684
   5.86943773494068
   8.34341298182493
  
  JSON output support out of the box:
  
   % ./gen-random-num -n3 --json
   [200,"OK (envelope added by Perinci::Access::Lite)",[0.257073684902029,0.393782991540746,0.848740540017513],{}]
  
  Automatic help message:
  
   % ./gen-random-num -h
   gen-random-num - Generate some random numbers
  
   Usage:
     gen-random-num --help (or -h, -?)
     gen-random-num --version (or -v)
     gen-random-num [options] [count]
   Options:
     --config-path=s     Set path to configuration file
     --config-profile=s  Set configuration profile to use
     --count=i, -n       How many numbers to generate (=arg[0]) [1]
     --format=s          Choose output format, e.g. json, text [undef]
     --help, -h, -?      Display this help message
     --json              Set output format to json
     --max=f             Upper limit of random number [1]
     --min=f             Lower limit of random number [0]
     --naked-res         When outputing as JSON, strip result envelope [0]
     --no-config         Do not use any configuration file
     --version, -v
  
  Automatic configuration file support:
  
   % cat ~/gen-random-num.conf
   count=5
   max=0.01
  
   % ./gen-random-num
   0.00105268954838724
   0.00701443611501844
   0.0021247476506154
   0.00813872824513005
   0.00752832346491306
  
  Automatic tab completion support:
  
   % complete -C gen-random-num gen-random-num
   % gen-random-num --mi<tab>
  
  See L<Perinci::CmdLine::Manual> for details on other available features
  (subcommands, automatic formatting of data structures, automatic schema
  validation, dry-run mode, automatic POD generation, remote function support,
  automatic CLI generation, automatic --version, automatic HTTP API,
  undo/transactions, configurable output format, logging, progress bar,
  colors/Unicode, and more).
  
  =head1 DESCRIPTION
  
  Perinci::CmdLine is a command-line application framework. It allows you to
  create full-featured CLI applications easily and quickly.
  
  See L<Perinci::CmdLine::Manual> for more details.
  
  There is also a blog post series on Perinci::CmdLine tutorial:
  L<https://perlancar.wordpress.com/category/pericmd-tut/>
  
  Perinci::CmdLine::Classic is the heavier backend implementation which supports
  some extra features currently not supported by the default backend
  implementation L<Perinci::CmdLine::Lite>. These features come at some startup
  overhead cost and more dependencies. You normally should use
  L<Perinci::CmdLine::Any> instead to be able to switch backend on the fly.
  
  Screenshots:
  
  =for Pod::Coverage ^(.+)$
  
  =begin HTML
  
  <p><img src="http://blogs.perl.org/users/perlancar/screenshot-pericmd-help.jpg" /><br />Autogenerated help message
  
  <p><img src="http://blogs.perl.org/users/perlancar/screenshot-pericmd-help_verbose.jpg" /><br />Autogenerated help message (verbose mode)
  
  <p><img src="http://blogs.perl.org/users/perlancar/progany-tpc.jpg" /><br />Progress bar
  
  <p><img src="http://blogs.perl.org/users/perlancar/screenshot-pericmd-completion.jpg" /><br />Tab completion
  
  <p><img src="http://blogs.perl.org/users/perlancar/screenshot-pericmd-format.jpg" /><br />Some output formats
  
  <p><img src="http://blogs.perl.org/users/perlancar/screenshot-trashu.jpg" /><br />Undo/redo
  
  =end HTML
  
  =head1 REQUEST KEYS
  
  See also L<Perinci::CmdLine::Base>. Extra stuffs put by this module to the C<$r>
  hash/stash.
  
  =over
  
  =item * format_options => hash
  
  =back
  
  =head1 RESULT METADATA
  
  All those supported by L<Perinci::CmdLine::Base>, plus:
  
  =head2 x.hint.result_binary => bool
  
  If set to true, then when formatting to C<text> formats, this class won't print
  any newline to keep the data being printed unmodified.
  
  =head1 ATTRIBUTES
  
  All the attributes of L<Perinci::CmdLine::Base>, plus:
  
  =head2 log => BOOL (default: 1)
  
  Whether to load L<Log::Any::App> (enable logging output) by default. See
  L</"LOGGING"> for more details.
  
  =head2 use_utf8 => BOOL
  
  From L<Term::App::Role::Attrs> (please see its docs for more details). There are
  several other attributes added by the role.
  
  =head2 undo => BOOL (optional, default 0)
  
  Whether to enable undo/redo functionality. Some things to note if you intend to
  use undo:
  
  =over
  
  =item * These common command-line options will be recognized
  
  C<--undo>, C<--redo>, C<--history>, C<--clear-history>.
  
  =item * Transactions will be used
  
  C<< use_tx=>1 >> will be passed to L<Perinci::Access>, which will cause it to
  initialize the transaction manager. Riap requests begin_tx and commit_tx will
  enclose the call request to function.
  
  =item * Called function will need to support transaction and undo
  
  Function which does not meet qualifications will refuse to be called.
  
  Exception is when subcommand is specified with C<< undo=>0 >>, where transaction
  will not be used for that subcommand. For an example of disabling transaction
  for some subcommands, see C<bin/u-trash> in the distribution.
  
  =back
  
  =head2 undo_dir => STR (optional, default ~/.<program_name>/.undo)
  
  Where to put undo data. This is actually the transaction manager's data dir.
  
  =head1 METHODS
  
  All the methods of L<Perinci::CmdLine::Base>, plus:
  
  =over
  
  =back
  
  =head1 ENVIRONMENT
  
  All the environment variables that L<Perinci::CmdLine::Base> supports, plus:
  
  =head2 PERINCI_CMDLINE_COLOR_THEME => STR
  
  Can be used to set C<color_theme>.
  
  =head2 PROGRESS => BOOL
  
  Explicitly turn the progress bar on/off.
  
  =head2 COLOR => INT
  
  Please see L<Term::App::Role::Attrs>.
  
  =head2 UTF8 => BOOL
  
  Please see L<Term::App::Role::Attrs>.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-CmdLine-Classic>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-CmdLine-Classic>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-CmdLine-Classic>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci::CmdLine::Any>, L<Perinci::CmdLine::Lite>.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_CMDLINE_CLASSIC

    $main::fatpacked{"Perinci/CmdLine/Classic/ColorTheme/Default.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_CMDLINE_CLASSIC_COLORTHEME_DEFAULT';
  package Perinci::CmdLine::Classic::ColorTheme::Default;
  
  our $DATE = '2016-12-15'; # DATE
  our $VERSION = '1.73'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  our %color_themes = (
  
      no_color => {
          v => 1.1,
          summary => 'Special theme that means no color',
          colors => {
          },
          no_color => 1,
      },
  
      default => {
          v => 1.1,
          summary => 'Default (for terminals with black background)',
          colors => {
              heading       => 'ff9933',
              text          => undef,
              error_label   => 'cc0000',
              warning_label => 'cccc00',
              program_name  => {ansi_fg=>"\e[1m"}, # bold
              option_name   => 'cc6633',
              emphasis      => {ansi_fg=>"\e[1m"}, # bold
              #option_value  => undef,
              #argument      => undef,
          },
      },
  
      default_whitebg => {
          v => 1.1,
          summary => 'Default (for terminals with white background)',
          colors => {
          },
      },
  
  );
  
  1;
  # ABSTRACT: Default color themes
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::CmdLine::Classic::ColorTheme::Default - Default color themes
  
  =head1 VERSION
  
  This document describes version 1.73 of Perinci::CmdLine::Classic::ColorTheme::Default (from Perl distribution Perinci-CmdLine-Classic), released on 2016-12-15.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-CmdLine-Classic>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-CmdLine-Classic>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-CmdLine-Classic>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_CMDLINE_CLASSIC_COLORTHEME_DEFAULT

    $main::fatpacked{"Perinci/CmdLine/Classic/Role/Help.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_CMDLINE_CLASSIC_ROLE_HELP';
  package Perinci::CmdLine::Classic::Role::Help;
  
  our $DATE = '2016-12-15'; # DATE
  our $VERSION = '1.73'; # VERSION
  
  # split here just so it's more organized
  
  use 5.010;
  use Moo::Role;
  
  use Locale::TextDomain::UTF8 'Perinci-CmdLine';
  use Perinci::Object;
  
  sub _help_draw_curtbl {
      my ($self, $r) = @_;
  
      if ($r->{_help_curtbl}) {
          $r->{_help_buf} .= $r->{_help_curtbl}->draw;
          undef $r->{_help_curtbl};
      }
  }
  
  # ansitables are used to draw formatted help. they are 100% wide, with no
  # borders (except space), but you can customize the number of columns (which
  # will be divided equally)
  sub _help_add_table {
      require Text::ANSITable;
  
      my ($self, $r, %args) = @_;
      my $columns = $args{columns} // 1;
  
      $self->_help_draw_curtbl($r);
      my $t = Text::ANSITable->new;
      $t->border_style('Default::spacei_ascii');
      $t->cell_pad(0);
      if ($args{column_widths}) {
          for (0..$columns-1) {
              $t->set_column_style($_, width => $args{column_widths}[$_]);
          }
      } else {
          my $tw = $self->term_width;
          my $cw = int($tw/$columns)-1;
          $t->cell_width($cw);
      }
      $t->show_header(0);
      $t->column_wrap(0); # we'll do our own wrapping, before indent
      $t->columns([0..$columns-1]);
  
      $r->{_help_curtbl} = $t;
  }
  
  sub _help_add_row {
      my ($self, $r, $row, $args) = @_;
      $args //= {};
      my $wrap    = $args->{wrap}   // 0;
      my $indent  = $args->{indent} // 0;
      my $columns = @$row;
  
      # start a new table if necessary
      $self->_help_add_table(
          $r,
          columns=>$columns, column_widths=>$args->{column_widths})
          if !$r->{_help_curtbl} ||
              $columns != @{ $r->{_help_curtbl}{columns} };
  
      my $t = $r->{_help_curtbl};
      my $rownum = @{ $t->{rows} };
  
      $t->add_row($row);
  
      my $dux_available = eval { require Data::Unixish; 1 } && !$@;
  
      if ($dux_available) {
          for (0..@{$t->{columns}}-1) {
              my %styles = (formats=>[]);
              push @{ $styles{formats} },
                  [wrap=>{ansi=>1, mb=>1, width=>$t->{cell_width}-$indent*2}]
                  if $wrap;
              push @{ $styles{formats} }, [lins=>{text=>"  " x $indent}]
                  if $indent && $_ == 0;
              $t->set_cell_style($rownum, $_, \%styles);
          }
      }
  }
  
  sub _help_add_heading {
      my ($self, $r, $heading) = @_;
      $self->_help_add_row($r, [$self->_color('heading', $heading)]);
  }
  
  sub _color {
      my ($self, $color_name, $text) = @_;
      my $color_code = $color_name ?
          $self->get_theme_color_as_ansi($color_name) : "";
      my $reset_code = $color_code ? "\e[0m" : "";
      "$color_code$text$reset_code";
  }
  
  sub help_section_summary {
      my ($self, $r) = @_;
  
      my $summary = rimeta($r->{_help_meta})->langprop("summary");
      return unless $summary;
  
      my $name = $self->get_program_and_subcommand_name($r);
      my $ct = join(
          "",
          $self->_color('program_name', $name),
          ($name && $summary ? ' - ' : ''),
          $summary // "",
      );
      $self->_help_add_row($r, [$ct], {wrap=>1});
  }
  
  sub help_section_usage {
      my ($self, $r) = @_;
  
      my $co = $self->common_opts;
      my @con = grep {
          my $cov = $co->{$_};
          my $show = $cov->{show_in_usage} // 1;
          for ($show) { if (ref($_) eq 'CODE') { $_ = $_->($self, $r) } }
          $show;
      } sort {
          ($co->{$a}{order}//1) <=> ($co->{$b}{order}//1) || $a cmp $b
      } keys %$co;
  
      my $pn = $self->_color(
          'program_name', $self->get_program_and_subcommand_name($r));
      my $ct = "";
      for my $con (@con) {
          my $cov = $co->{$con};
          next unless $cov->{usage};
          $ct .= ($ct ? "\n" : "") . $pn . " " . __($cov->{usage});
      }
      if ($self->subcommands && !$r->{subcommand_name}) {
          if (defined $self->default_subcommand) {
              $ct .= ($ct ? "\n" : "") . $pn .
                  " " . __("--cmd=<other-subcommand> [options]");
          } else {
              $ct .= ($ct ? "\n" : "") . $pn .
                  " " . __("<subcommand> [options]");
          }
      } else {
          my $usage = $r->{_help_clidocdata}{usage_line};
          $usage =~ s/\[\[prog\]\]/$pn/;
          $usage =~ s/\[options\]/__("[options]")/e;
          $ct .= ($ct ? "\n" : "") . $usage;
      }
      $self->_help_add_heading($r, __("Usage"));
      $self->_help_add_row($r, [$ct], {indent=>1});
  }
  
  sub help_section_options {
      my ($self, $r) = @_;
  
      my $opts = $r->{_help_clidocdata}{opts};
      return unless keys %$opts;
  
      my $verbose = $r->{_help_verbose};
      my $info = $r->{_help_info};
      my $meta = $r->{_help_meta};
      my $args_p = $meta->{args};
      my $sc = $self->subcommands;
  
      # group options by raw category, e.g. $cats{""} (for options
      # without category and common options) or $cat{"cat1"}.
      my %cats; # val = [ospec, ...]
  
      for (keys %$opts) {
          push @{ $cats{$opts->{$_}{raw_category} // ''} }, $_;
      }
  
      for my $cat (sort keys %cats) {
          # find the longest option
          my @opts = sort {length($b)<=>length($a)} @{ $cats{$cat} };
          my $len = length($opts[0]);
          # sort again by name
          @opts = sort {
              (my $a_without_dash = $a) =~ s/^-+//;
              (my $b_without_dash = $b) =~ s/^-+//;
              lc($a) cmp lc($b);
          } @opts;
  
          my $cat_title;
          if ($cat eq '') {
              $cat_title = __("Options");
          } else {
              $cat_title = __x("{category} options", category=>ucfirst($cat));
          }
          $self->_help_add_heading($r, $cat_title);
  
          if ($verbose) {
              for my $opt_name (@opts) {
                  my $opt_spec = $opts->{$opt_name};
                  my $arg_spec = $opt_spec->{arg_spec};
                  my $ct = $self->_color('option_name', $opt_name);
                  # BEGIN DUPE1
                  if ($arg_spec && !$opt_spec->{main_opt} &&
                          defined($arg_spec->{pos})) {
                      if ($arg_spec->{greedy}) {
                          $ct .= " (=arg[$arg_spec->{pos}-])";
                      } else {
                          $ct .= " (=arg[$arg_spec->{pos}])";
                      }
                  }
                  if ($arg_spec && !$opt_spec->{main_opt} &&
                          defined($arg_spec->{cmdline_src})) {
                      $ct .= " (or from $arg_spec->{cmdline_src})";
                      $ct =~ s!_or_!/!;
                  }
                  # END DUPE1
                  $self->_help_add_row($r, [$ct], {indent=>1});
  
                  if ($opt_spec->{summary} || $opt_spec->{description}) {
                      my $ct = "";
                      $ct .= ($ct ? "\n\n":"")."$opt_spec->{summary}."
                          if $opt_spec->{summary};
                      $ct .= ($ct ? "\n\n":"").$opt_spec->{description}
                          if $opt_spec->{description};
                      $self->_help_add_row($r, [$ct], {indent=>2, wrap=>1});
                  }
              }
          } else {
              # for compactness, display in columns
              my $tw = $self->term_width;
              my $columns = int($tw/40); $columns = 1 if $columns < 1;
              while (1) {
                  my @row;
                  for (1..$columns) {
                      last unless @opts;
                      my $opt_name = shift @opts;
                      my $opt_spec = $opts->{$opt_name};
                      my $arg_spec = $opt_spec->{arg_spec};
                      my $ct = $self->_color('option_name', $opt_name);
                      # BEGIN DUPE1
                      if ($arg_spec && !$opt_spec->{main_opt} &&
                              defined($arg_spec->{pos})) {
                          if ($arg_spec->{greedy}) {
                              $ct .= " (=arg[$arg_spec->{pos}-])";
                          } else {
                              $ct .= " (=arg[$arg_spec->{pos}])";
                          }
                      }
                      if ($arg_spec && !$opt_spec->{main_opt} &&
                              defined($arg_spec->{cmdline_src})) {
                          $ct .= " (or from $arg_spec->{cmdline_src})";
                          $ct =~ s!_or_!/!;
                      }
                      # END DUPE1
                      push @row, $ct;
                  }
                  last unless @row;
                  for (@row+1 .. $columns) { push @row, "" }
                  $self->_help_add_row($r, \@row, {indent=>1});
              }
          }
      }
  }
  
  sub help_section_subcommands {
      my ($self, $r) = @_;
  
      my $verbose = $r->{_help_verbose};
      return unless $self->subcommands && !$r->{subcommand_name};
      my $scs = $self->list_subcommands;
  
      my @scs = sort keys %$scs;
      my @shown_scs;
      for my $scn (@scs) {
          my $sc = $scs->{$scn};
          next unless $sc->{show_in_help} // 1;
          $sc->{name} = $scn;
          push @shown_scs, $sc;
      }
  
      # for help_section_hints
      my $some_not_shown = @scs > @shown_scs;
      $r->{_help_hide_some_subcommands} = 1 if $some_not_shown;
  
      $self->_help_add_heading(
          $r, $some_not_shown ? __("Popular subcommands") : __("Subcommands"));
  
      # in compact mode, we try to not exceed one screen, so show long mode only
      # if there are a few subcommands.
      my $long_mode = $verbose || @shown_scs < 12;
      if ($long_mode) {
          for (@shown_scs) {
              my $summary = rimeta($_)->langprop("summary");
              $self->_help_add_row(
                  $r,
                  [$self->_color('program_name', $_->{name}), $summary],
                  {column_widths=>[-17, -40], indent=>1});
          }
      } else {
          # for compactness, display in columns
          my $tw = $self->term_width;
          my $columns = int($tw/25); $columns = 1 if $columns < 1;
              while (1) {
                  my @row;
                  for (1..$columns) {
                      last unless @shown_scs;
                      my $sc = shift @shown_scs;
                      push @row, $sc->{name};
                  }
                  last unless @row;
                  for (@row+1 .. $columns) { push @row, "" }
                  $self->_help_add_row($r, \@row, {indent=>1});
              }
  
      }
  }
  
  sub help_section_hints {
      my ($self, $r) = @_;
  
      my $verbose = $r->{_help_verbose};
      my @hints;
      unless ($verbose) {
          push @hints, N__("For more complete help, use '--help --verbose'");
      }
      if ($r->{_help_hide_some_subcommands}) {
          push @hints,
              N__("To see all available subcommands, use '--subcommands'");
      }
      return unless @hints;
  
      $self->_help_add_row(
          $r, [join(" ", map { __($_)."." } @hints)], {wrap=>1});
  }
  
  sub help_section_description {
      my ($self, $r) = @_;
  
      my $desc = rimeta($r->{_help_meta})->langprop("description") //
          $self->description;
      return unless $desc;
  
      $self->_help_add_heading($r, __("Description"));
      $self->_help_add_row($r, [$desc], {wrap=>1, indent=>1});
  }
  
  sub help_section_examples {
      my ($self, $r) = @_;
  
      my $verbose = $r->{_help_verbose};
      my $meta = $r->{_help_meta};
      my $egs = $r->{_help_clidocdata}{examples};
      return unless $egs && @$egs;
  
      $self->_help_add_heading($r, __("Examples"));
      my $pn = $self->_color(
          'program_name', $self->get_program_and_subcommand_name($r));
      for my $eg (@$egs) {
          my $cmdline = $eg->{cmdline};
          $cmdline =~ s/\[\[prog\]\]/$pn/;
          $self->_help_add_row($r, ["% $cmdline"], {indent=>1});
          if ($verbose) {
              my $ct = "";
              if ($eg->{summary}) { $ct .= "$eg->{summary}." }
              if ($eg->{description}) { $ct .= "\n\n$eg->{description}" }
              $self->_help_add_row($r, [$ct], {indent=>2}) if $ct;
          }
      }
  }
  
  sub help_section_result {
      my ($self, $r) = @_;
  
      my $meta   = $r->{_help_meta};
      my $rmeta  = $meta->{result};
      my $rmetao = rimeta($rmeta);
      my $text;
  
      my $summary = $rmetao->langprop('summary') // '';
      my $desc    = $rmetao->langprop('description') // '';
      $text = $summary . ($summary ? "\n\n" : "") . $desc;
  
      # collect handler
      my %handlers;
      for my $k0 (keys %$rmeta) {
          my $v = $rmeta->{$k0};
  
          my $k = $k0; $k =~ s/\..+//;
          next if $k =~ /\A_/;
  
          # check builtin result spec key
          next if $k =~ /\A(
                             summary|description|tags|default_lang|
                             schema|
                             x
                         )\z/x;
  
          # try a property module first
          require "Perinci/Sub/Property/result/$k.pm";
          my $meth = "help_hookmeta_result__$k";
          unless ($self->can($meth)) {
              die "No help handler for property result/$k0 ($meth)";
          }
          my $hmeta = $self->$meth;
          $handlers{$k} = {
              prio => $hmeta->{prio},
              meth => "help_hook_result__$k",
          };
      }
  
      # call all the handlers in order
      for my $k (sort {$handlers{$a}{prio} <=> $handlers{$b}{prio}}
                     keys %handlers) {
          my $h = $handlers{$k};
          my $meth = $h->{meth};
          my $t = $self->$meth($r);
          $text .= $t if $t;
      }
  
      return unless length $text;
  
      $self->_help_add_heading($r, __("Result"));
      $self->_help_add_row($r, [$text], {wrap=>1, indent=>1});
  }
  
  sub help_section_links {
      # not yet
  }
  
  sub action_help {
      my ($self, $r) = @_;
  
      $r->{_help_buf} = '';
  
      my $verbose = $ENV{VERBOSE} // 0;
      local $r->{_help_verbose} = $verbose;
  
      # get function metadata first
      unless ($r->{_help_meta}) {
          my $url = $r->{subcommand_data}{url} // $self->url;
          my $res = $self->riap_client->request(info => $url);
          die [500, "Can't info '$url': $res->[0] - $res->[1]"]
              unless $res->[0] == 200;
          $r->{_help_info} = $res->[2];
          $res = $self->riap_client->request(meta => $url);
          die [500, "Can't meta '$url': $res->[0] - $res->[1]"]
              unless $res->[0] == 200;
          $r->{_help_meta} = $res->[2]; # cache here
      }
  
      # get cli opt spec
      unless ($r->{_help_clidocdata}) {
          require Perinci::Sub::To::CLIDocData;
          my $res = Perinci::Sub::To::CLIDocData::gen_cli_doc_data_from_meta(
              meta => $r->{_help_meta}, meta_is_normalized => 1,
              common_opts  => $self->common_opts,
              per_arg_json => $self->per_arg_json,
              per_arg_yaml => $self->per_arg_yaml,
          );
          die [500, "Can't gen_cli_doc_data_from_meta: $res->[0] - $res->[1]"]
              unless $res->[0] == 200;
          $r->{_help_clidocdata} = $res->[2]; # cache here
      }
  
      # ux: since --verbose will potentially show lots of paragraph text, let's
      # default to 80 and not wider width, unless user specifically requests
      # column width via COLUMNS.
      if ($verbose && !defined($ENV{COLUMNS}) && $self->term_width > 80) {
          $self->term_width(80);
      }
  
      # determine which help sections should we generate
      my @hsects;
      if ($verbose) {
          @hsects = (
              'summary',
              'usage',
              'subcommands',
              'examples',
              'description',
              'options',
              'result',
              'links',
              'hints',
          );
      } else {
          @hsects = (
              'summary',
              'usage',
              'subcommands',
              'examples',
              'options',
              'hints',
          );
      }
  
      for my $s (@hsects) {
          my $meth = "help_section_$s";
          #say "D:$meth";
          #$log->tracef("=> $meth()");
          $self->$meth($r);
      }
      $self->_help_draw_curtbl($r);
      [200, "OK", $r->{_help_buf}, {"cmdline.skip_format"=>1}];
  }
  
  1;
  # ABSTRACT: Help-related routines
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::CmdLine::Classic::Role::Help - Help-related routines
  
  =head1 VERSION
  
  This document describes version 1.73 of Perinci::CmdLine::Classic::Role::Help (from Perl distribution Perinci-CmdLine-Classic), released on 2016-12-15.
  
  =for Pod::Coverage ^(.+)$
  
  =head1 REQUEST KEYS
  
  =over
  
  =item * _help_*
  
  Temporary. Various data stored during help generation that is passed between the
  various C<_help_*> methods.
  
  =back
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-CmdLine-Classic>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-CmdLine-Classic>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-CmdLine-Classic>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_CMDLINE_CLASSIC_ROLE_HELP

    $main::fatpacked{"Perinci/CmdLine/Help.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_CMDLINE_HELP';
  package Perinci::CmdLine::Help;
  
  our $DATE = '2017-01-27'; # DATE
  our $VERSION = '0.14'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(gen_help);
  
  our %SPEC;
  
  $SPEC{gen_help} = {
      v => 1.1,
      summary => 'Generate help message for Perinci::CmdLine-based app',
      args => {
          program_name => {
              schema => 'str*',
              req => 1,
          },
          program_summary => {
              schema => 'str*',
          },
          subcommands => {
              schema => 'hash',
          },
          meta => {
              summary => 'Function metadata, must be normalized',
              schema => 'hash*',
              req => 1,
          },
          common_opts => {
              schema => 'hash*',
              default => {},
          },
          per_arg_json => {
              schema => 'bool*',
          },
          per_arg_yaml => {
              schema => 'bool*',
          },
      },
  };
  sub gen_help {
      no warnings 'once';
      require Text::Wrap;
  
      my %args = @_;
  
      local $Text::Wrap::columns = $ENV{COLUMNS} // 80;
  
      my $meta = $args{meta};
      my $common_opts = $args{common_opts} // {};
  
      my @help;
  
      # summary
      my $progname = $args{program_name};
      push @help, $progname;
      {
          my $sum = $args{program_summary} // $meta->{summary};
          last unless $sum;
          push @help, " - ", $sum, "\n";
      }
  
      my $clidocdata;
  
      # usage
      push @help, "\nUsage:\n";
      {
          for (sort {
              ($common_opts->{$a}{order} // 99) <=>
                  ($common_opts->{$b}{order} // 99) ||
                      $a cmp $b
              } keys %$common_opts) {
              my $co = $common_opts->{$_};
              next unless $co->{usage};
              push @help, "  $progname $co->{usage}\n";
          }
  
          require Perinci::Sub::To::CLIDocData;
          my $res = Perinci::Sub::To::CLIDocData::gen_cli_doc_data_from_meta(
              meta => $meta, meta_is_normalized => 1,
              common_opts  => $common_opts,
              per_arg_json => $args{per_arg_json},
              per_arg_yaml => $args{per_arg_yaml},
          );
          die [500, "gen_cli_doc_data_from_meta failed: ".
                   "$res->[0] - $res->[1]"] unless $res->[0] == 200;
          $clidocdata = $res->[2];
          my $usage = $clidocdata->{usage_line};
          $usage =~ s/\[\[prog\]\]/$progname/;
          push @help, "  $usage\n";
      }
  
      # subcommands
      {
          my $subcommands = $args{subcommands} or last;
          push @help, "\nSubcommands:\n";
          if (keys(%$subcommands) >= 12) {
              # comma-separated list
              push @help, Text::Wrap::wrap(
                  "  ", "  ", join(", ", sort keys %$subcommands)), "\n";
          } else {
              for my $sc_name (sort keys %$subcommands) {
                  my $sc_spec = $subcommands->{$sc_name};
                  next unless $sc_spec->{show_in_help} //1;
                  push @help, "  $sc_name\n";
              }
          }
      }
  
      # example
      {
          # XXX categorize too, like options
          last unless @{ $clidocdata->{examples} };
          push @help, "\nExamples:\n";
          my $i = 0;
          my $egs = $clidocdata->{examples};
          for my $eg (@$egs) {
              $i++;
              my $cmdline = $eg->{cmdline};
              $cmdline =~ s/\[\[prog\]\]/$progname/;
              push @help, "\n" if $eg->{summary} && $i > 1;
              if ($eg->{summary}) {
                  push @help, "  $eg->{summary}:\n";
              } else {
                  push @help, "\n";
              }
              push @help, "  % $cmdline\n";
          }
      }
  
      # description
      {
          my $desc = $args{program_description} // $meta->{description};
          last unless $desc;
          $desc =~ s/\A\n+//;
          $desc =~ s/\n+\z//;
          push @help, "\n", $desc, "\n" if $desc =~ /\S/;
      }
  
      # options
      {
          require Data::Dmp;
  
          my $opts = $clidocdata->{opts};
          last unless keys %$opts;
  
          # find all the categories
          my %options_by_cat; # val=[options...]
          for my $optkey (keys %$opts) {
              for my $cat (@{ $opts->{$optkey}{categories} }) {
                  push @{ $options_by_cat{$cat} }, $optkey;
              }
          }
  
          my $cats_spec = $clidocdata->{option_categories};
          for my $cat (sort {
              ($cats_spec->{$a}{order} // 50) <=> ($cats_spec->{$b}{order} // 50)
                  || $a cmp $b }
                           keys %options_by_cat) {
              # find the longest option
              my @opts = sort {length($b)<=>length($a)}
                  @{ $options_by_cat{$cat} };
              my $len = length($opts[0]);
              # sort again by name
              @opts = sort {
                  (my $a_without_dash = $a) =~ s/^-+//;
                  (my $b_without_dash = $b) =~ s/^-+//;
                  lc($a) cmp lc($b);
              } @opts;
              push @help, "\n$cat:\n";
              for my $opt (@opts) {
                  my $ospec = $opts->{$opt};
                  my $arg_spec = $ospec->{arg_spec};
                  next if grep {$_ eq 'hidden'} @{$arg_spec->{tags} // []};
                  my $is_bool = $arg_spec->{schema} &&
                      $arg_spec->{schema}[0] eq 'bool';
                  my $show_default = exists($ospec->{default}) &&
                      !$is_bool && !$ospec->{is_base64} &&
                          !$ospec->{is_json} && !$ospec->{is_yaml} &&
                              !$ospec->{is_alias};
  
                  my $add_sum = '';
                  if ($ospec->{is_base64}) {
                      $add_sum = " (as base64-encoded str)";
                  } elsif ($ospec->{is_json}) {
                      $add_sum = " (as JSON-encoded str)";
                  } elsif ($ospec->{is_yaml}) {
                      $add_sum = " (as YAML-encoded str)";
                  }
  
                  my $argv = '';
                  if (!$ospec->{main_opt} && defined($ospec->{pos})) {
                      if ($ospec->{greedy}) {
                          $argv = " (=arg[$ospec->{pos}-])";
                      } else {
                          $argv = " (=arg[$ospec->{pos}])";
                      }
                  }
  
                  my $cmdline_src = '';
                  if (!$ospec->{main_opt} && defined($arg_spec->{cmdline_src})) {
                      $cmdline_src = " (or from $arg_spec->{cmdline_src})";
                      $cmdline_src =~ s!_or_!/!g;
                  }
  
                  push @help, sprintf(
                      "  %-${len}s  %s%s%s%s%s\n",
                      $opt,
                      Text::Wrap::wrap("", " " x (2+$len+2 +2),
                                       $ospec->{summary}//''),
                      $add_sum,
                      $argv,
                      $cmdline_src,
                      ($show_default && defined($ospec->{default}) ?
                           " [".Data::Dmp::dmp($ospec->{default})."]":""),
  
                  );
              }
          }
      }
  
      [200, "OK", join("", @help)];
  }
  
  1;
  # ABSTRACT: Generate help message for Perinci::CmdLine-based app
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::CmdLine::Help - Generate help message for Perinci::CmdLine-based app
  
  =head1 VERSION
  
  This document describes version 0.14 of Perinci::CmdLine::Help (from Perl distribution Perinci-CmdLine-Help), released on 2017-01-27.
  
  =head1 DESCRIPTION
  
  Currently used by L<Perinci::CmdLine::Lite> and L<App::riap>. Eventually I want
  L<Perinci::CmdLine> to use this also (needs prettier and more sophisticated
  formatting options first though).
  
  =head1 FUNCTIONS
  
  
  =head2 gen_help(%args) -> [status, msg, result, meta]
  
  Generate help message for Perinci::CmdLine-based app.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<common_opts> => I<hash> (default: {})
  
  =item * B<meta>* => I<hash>
  
  Function metadata, must be normalized.
  
  =item * B<per_arg_json> => I<bool>
  
  =item * B<per_arg_yaml> => I<bool>
  
  =item * B<program_name>* => I<str>
  
  =item * B<program_summary> => I<str>
  
  =item * B<subcommands> => I<hash>
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (any)
  
  =for Pod::Coverage ^()$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-CmdLine-Help>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-CmdLine-Help>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-CmdLine-Help>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_CMDLINE_HELP

    $main::fatpacked{"Perinci/CmdLine/Lite.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_CMDLINE_LITE';
  package Perinci::CmdLine::Lite;
  
  our $DATE = '2017-01-16'; # DATE
  our $VERSION = '1.72'; # VERSION
  
  use 5.010001;
  # use strict; # already enabled by Mo
  # use warnings; # already enabled by Mo
  use Log::Any::IfLOG '$log';
  
  use List::Util qw(first);
  use Mo qw(build default);
  #use Moo;
  extends 'Perinci::CmdLine::Base';
  
  # when debugging, use this instead of the above because Mo doesn't give clear
  # error message if base class has errors.
  #use parent 'Perinci::CmdLine::Base';
  
  has default_prompt_template => (
      is=>'rw',
      default => 'Enter %s: ',
  );
  has log => (
      is=>'rw',
      default => sub {
          if (defined $ENV{LOG}) {
              return $ENV{LOG};
          } elsif ($ENV{LOG_LEVEL} && $ENV{LOG_LEVEL} =~ /^(off|none)$/) {
              return 0;
          } elsif ($ENV{LOG_LEVEL} || $ENV{TRACE} || $ENV{DEBUG} ||
                       $ENV{VERBOSE} || $ENV{QUIET}) {
              return 0;
          }
          0;
      },
  );
  has log_level => (
      is=>'rw',
      default => sub {
          if ($ENV{LOG_LEVEL}) {
              return $ENV{LOG_LEVEL};
          } elsif ($ENV{TRACE}) {
              return 'trace';
          } elsif ($ENV{DEBUG}) {
              return 'debug';
          } elsif ($ENV{VERBOSE}) {
              return 'info';
          } elsif ($ENV{QUIET}) {
              return 'error';
          }
          'warning';
      },
  );
  has validate_args => (
      is=>'rw',
      default => 1,
  );
  
  my $formats = [qw/text text-simple text-pretty json json-pretty csv html html+datatables/];
  
  sub BUILD {
      my ($self, $args) = @_;
  
      if (!$self->{riap_client}) {
          require Perinci::Access::Lite;
          my %rcargs = (
              riap_version => $self->{riap_version} // 1.1,
              %{ $self->{riap_client_args} // {} },
          );
          $self->{riap_client} = Perinci::Access::Lite->new(%rcargs);
      }
  
      if (!$self->{actions}) {
          $self->{actions} = {
              call => {},
              version => {},
              subcommands => {},
              help => {},
          };
      }
  
      my $_t = sub {
          no warnings;
          my $co_name = shift;
          my $href = $Perinci::CmdLine::Base::copts{$co_name};
          %$href;
      };
  
      if (!$self->{common_opts}) {
          my $copts = {};
  
          $copts->{version}   = { $_t->('version'), };
          $copts->{help}      = { $_t->('help'), };
  
          unless ($self->skip_format) {
              $copts->{format}    = {
                  $_t->('format'),
                  schema => ['str*' => in => $formats],
              };
              $copts->{json}      = { $_t->('json'), };
              $copts->{naked_res} = { $_t->('naked_res'), };
          }
          if ($self->subcommands) {
              $copts->{subcommands} = { $_t->('subcommands'), };
          }
          if ($self->default_subcommand) {
              $copts->{cmd} = { $_t->('cmd') };
          }
          if ($self->read_config) {
              $copts->{config_path}    = { $_t->('config_path') };
              $copts->{no_config}      = { $_t->('no_config') };
              $copts->{config_profile} = { $_t->('config_profile') };
          }
          if ($self->read_env) {
              $copts->{no_env} = { $_t->('no_env') };
          }
          if ($self->log) {
              $copts->{log_level} = { $_t->('log_level'), };
              $copts->{trace}     = { $_t->('trace'), };
              $copts->{debug}     = { $_t->('debug'), };
              $copts->{verbose}   = { $_t->('verbose'), };
              $copts->{quiet}     = { $_t->('quiet'), };
          }
          $self->{common_opts} = $copts;
      }
  
      $self->{formats} //= $formats;
  
      $self->{per_arg_json} //= 1;
  }
  
  my $setup_progress;
  sub _setup_progress_output {
      my $self = shift;
  
      return unless $ENV{PROGRESS} // (-t STDOUT);
  
      require Progress::Any::Output;
      Progress::Any::Output->set("TermProgressBarColor");
      $setup_progress = 1;
  }
  
  sub _unsetup_progress_output {
      my $self = shift;
  
      return unless $setup_progress;
      no warnings 'once';
      my $out = $Progress::Any::outputs{''}[0];
      $out->cleanup if $out->can("cleanup");
      $setup_progress = 0;
  }
  
  sub hook_after_parse_argv {
      my ($self, $r) = @_;
  
      # since unlike Perinci::CmdLine, we don't wrap the function (where the
      # wrapper assigns default values for arguments), we must do it here
      # ourselves.
      my $ass  = $r->{meta}{args} // {};
      my $args = $r->{args};
      for (keys %$ass) {
          next if exists $args->{$_};
          my $as = $ass->{$_};
          if (exists $as->{default}) {
              $args->{$_} = $as->{default};
          } elsif ($as->{schema} && exists $as->{schema}[1]{default}) {
              $args->{$_} = $as->{schema}[1]{default};
          }
      }
  
      # set up log adapter
      if ($self->log) {
          require Log::Any::Adapter;
          Log::Any::Adapter->set(
              'Screen',
              min_level => $r->{log_level} // $self->log_level,
              formatter => sub { $self->program_name . ": $_[1]" },
          );
      }
  }
  
  # BEGIN_BLOCK: equal2
  sub equal2 {
      state $require = do { require Scalar::Util };
  
      # for lack of a better name, currently i name this 'equal2'
      my ($val1, $val2) = @_;
  
      # here are the rules:
      # - if both are undef, 1
      # - undef equals nothing else
      # - if both are ref, equal if their refaddr() are equal
      # - if only one is ref, 0
      # - if none is ref, compare using eq
  
      if (defined $val1) {
          return 0 unless defined $val2;
          if (ref $val1) {
              return 0 unless ref $val2;
              return Scalar::Util::refaddr($val1) eq Scalar::Util::refaddr($val2);
          } else {
              return 0 if ref $val2;
              return $val1 eq $val2;
          }
      } else {
          return 0 if defined $val2;
          return 1;
      }
  }
  # END_BLOCK: equal2
  
  sub hook_before_action {
      my ($self, $r) = @_;
  
      # validate arguments using schema from metadata
    VALIDATE_ARGS:
      {
          last unless $self->validate_args;
  
          # unless we're feeding the arguments to function, don't bother
          # validating arguments
          last unless $r->{action} eq 'call';
  
          my $meta = $r->{meta};
  
          # function is probably already wrapped
          last if $meta->{'x.perinci.sub.wrapper.logs'} &&
              (grep { $_->{validate_args} }
               @{ $meta->{'x.perinci.sub.wrapper.logs'} });
  
          require Data::Sah;
  
          # to be cheap, we simply use "$ref" as key as cache key. to be proper,
          # it should be hash of serialized content.
          my %validators; # key = "$schema"
  
          for my $arg (sort keys %{ $meta->{args} // {} }) {
              next unless exists($r->{args}{$arg});
  
              # we don't support validation of input stream because this must be
              # done after each 'get item' (but periswrap does)
              next if $meta->{args}{$arg}{stream};
  
              my $schema = $meta->{args}{$arg}{schema};
              next unless $schema;
              unless ($validators{"$schema"}) {
                  my $v = Data::Sah::gen_validator($schema, {
                      return_type => 'str+val',
                      schema_is_normalized => 1,
                  });
                  $validators{"$schema"} = $v;
              }
              my $res = $validators{"$schema"}->($r->{args}{$arg});
              if ($res->[0]) {
                  die [400, "Argument '$arg' fails validation: $res->[0]"];
              }
              my $val0 = $r->{args}{$arg};
              my $coerced_val = $res->[1];
              $r->{args}{$arg} = $coerced_val;
              $r->{args}{"-orig_$arg"} = $val0 unless equal2($val0, $coerced_val);
          }
  
          if ($meta->{args_rels}) {
              my $schema = [hash => $meta->{args_rels}];
              my $sah = Data::Sah->new;
              my $hc  = $sah->get_compiler("human");
              my $cd  = $hc->init_cd;
              $cd->{args}{lang} //= $cd->{default_lang};
              my $v = Data::Sah::gen_validator($schema, {
                  return_type => 'str',
                  human_hash_values => {
                      field  => $hc->_xlt($cd, "argument"),
                      fields => $hc->_xlt($cd, "arguments"),
                  },
              });
              my $res = $v->($r->{args});
              if ($res) {
                  die [400, $res];
              }
          }
  
      }
  }
  
  sub hook_format_result {
      require Perinci::Result::Format::Lite;
      my ($self, $r) = @_;
  
      my $fmt = $r->{format} // 'text';
  
      if ($fmt eq 'html+datatables') {
          $fmt = 'text-pretty';
          $ENV{VIEW_RESULT} //= 1;
          $ENV{FORMAT_PRETTY_TABLE_BACKEND} //= 'Text::Table::HTML::DataTables';
      }
  
      my $fres = Perinci::Result::Format::Lite::format(
          $r->{res}, $fmt, $r->{naked_res}, $self->{use_cleanser});
  
      # ux: prefix error message with program name
      if ($fmt =~ /text/ && $r->{res}[0] =~ /\A[45]/ && defined($r->{res}[1])) {
          $fres = $self->program_name . ": $fres";
      }
  
      $fres;
  }
  
  sub hook_format_row {
      my ($self, $r, $row) = @_;
  
      if (ref($row) eq 'ARRAY') {
          return join("\t", @$row) . "\n";
      } else {
          return ($row // "") . "\n";
      }
  }
  
  sub hook_display_result {
      my ($self, $r) = @_;
  
      my $res  = $r->{res};
      my $resmeta = $res->[3] // {};
  
      my $handle = $r->{output_handle};
  
      # set utf8 flag
      my $utf8;
      {
          last if defined($utf8 = $ENV{UTF8});
          if ($resmeta->{'x.hint.result_binary'}) {
              # XXX only when format is text?
              $utf8 = 0; last;
          }
          if ($r->{subcommand_data}) {
              last if defined($utf8 = $r->{subcommand_data}{use_utf8});
          }
          $utf8 = $self->use_utf8;
      }
      binmode($handle, ":utf8") if $utf8;
  
      $self->display_result($r);
  }
  
  sub hook_after_run {
      my ($self, $r) = @_;
      $self->_unsetup_progress_output;
  }
  
  sub hook_after_get_meta {
      my ($self, $r) = @_;
  
      require Perinci::Object;
      my $metao = Perinci::Object::risub($r->{meta});
      if ($metao->can_dry_run) {
          my $default_dry_run = $metao->default_dry_run // $self->default_dry_run;
          $r->{dry_run} = 1 if $default_dry_run;
          $r->{dry_run} = ($ENV{DRY_RUN} ? 1:0) if defined $ENV{DRY_RUN};
          $self->common_opts->{dry_run} = {
              getopt  => $default_dry_run ? 'dry-run!' : 'dry-run',
              summary => $default_dry_run ?
                  "Disable simulation mode (also via DRY_RUN=0)" :
                  "Run in simulation mode (also via DRY_RUN=1)",
              handler => sub {
                  my ($go, $val, $r) = @_;
                  if ($val) {
                      $log->debugf("[pericmd] Dry-run mode is activated");
                      $r->{dry_run} = 1;
                      #$ENV{VERBOSE} = 1;
                  } else {
                      $log->debugf("[pericmd] Dry-run mode is deactivated");
                      $r->{dry_run} = 0;
                  }
              },
          };
      }
  
      # check deps property. XXX this should be done only when we don't wrap
      # subroutine, because Perinci::Sub::Wrapper already checks the deps
      # property.
      if ($r->{meta}{deps}) {
          require Perinci::Sub::DepChecker;
          my $res = Perinci::Sub::DepChecker::check_deps($r->{meta}{deps});
          if ($res) {
              die [412, "Dependency failed: $res"];
          }
      }
  }
  
  sub action_subcommands {
      my ($self, $r) = @_;
  
      if (!$self->subcommands) {
          say "There are no subcommands.";
          return 0;
      }
  
      say "Available subcommands:";
      my $scs = $self->list_subcommands;
      my $longest = 6;
      for (keys %$scs) { my $l = length; $longest = $l if $l > $longest }
      [200, "OK",
       join("",
            (map { sprintf("  %-${longest}s  %s\n",$_,$scs->{$_}{summary}//"") }
                 sort keys %$scs),
        )];
  }
  
  sub action_version {
      no strict 'refs';
  
      my ($self, $r) = @_;
  
      my @text;
  
      {
          my $meta = $r->{meta} = $self->get_meta($r, $self->url);
          push @text, $self->get_program_and_subcommand_name($r),
              " version ", ($meta->{entity_v} // "?"),
              ($meta->{entity_date} ? " ($meta->{entity_date})" : ''),
              "\n";
          for my $mod (@{ $meta->{'x.dynamic_generator_modules'} // [] }) {
              push @text, "  $mod version ", ${"$mod\::VERSION"},
                  (${"$mod\::DATE"} ? " (".${"$mod\::DATE"}.")" : ""),
                      "\n";
          }
      }
  
      for my $url (@{ $self->extra_urls_for_version // [] }) {
          my $meta = $self->get_meta($r, $url);
          push @text, "  $url version ", ($meta->{entity_v} // "?"),
              ($meta->{entity_date} ? " ($meta->{entity_date})" : ''),
              "\n";
      }
  
      push @text, "  ", __PACKAGE__,
          " version ", ($Perinci::CmdLine::Lite::VERSION // "?"),
          ($Perinci::CmdLine::Lite::DATE ?
           " ($Perinci::CmdLine::Lite::DATE)":''),
          "\n";
  
      [200, "OK", join("", @text)];
  }
  
  sub action_help {
      require Perinci::CmdLine::Help;
  
      my ($self, $r) = @_;
  
      my @help;
      my $scn    = $r->{subcommand_name};
      my $scd    = $r->{subcommand_data};
  
      my $meta = $self->get_meta($r, $scd->{url} // $self->{url});
  
      # XXX use 'delete local' when we bump minimal perl to 5.12
      my $common_opts = { %{$self->common_opts} };
  
      # hide usage '--subcommands' if we have subcommands but user has specified a
      # subcommand to use
      my $has_sc_no_sc = $self->subcommands &&
          !length($r->{subcommand_name} // '');
      delete $common_opts->{subcommands} if $self->subcommands && !$has_sc_no_sc;
  
      my $res = Perinci::CmdLine::Help::gen_help(
          program_name => $self->get_program_and_subcommand_name($r),
          program_summary => ($scd ? $scd->{summary}:undef ) // $meta->{summary},
          program_description => $scd ? $scd->{description} : undef,
          meta => $meta,
          subcommands => $has_sc_no_sc ? $self->list_subcommands : undef,
          common_opts => $common_opts,
          per_arg_json => $self->per_arg_json,
          per_arg_yaml => $self->per_arg_yaml,
      );
  
      $res->[3]{"cmdline.skip_format"} = 1;
      $res;
  }
  
  sub action_call {
      my ($self, $r) = @_;
  
      my %extra;
      if ($r->{send_argv}) {
          $log->tracef("[pericmd] Sending argv to server: %s", $extra{argv});
          $extra{argv} = $r->{orig_argv};
      } else {
          my %extra_args;
          $extra_args{-dry_run} = 1 if $r->{dry_run};
          $extra{args} = {%extra_args, %{$r->{args}}};
      }
  
      $extra{stream_arg} = 1 if $r->{stream_arg};
  
      my $url = $r->{subcommand_data}{url};
  
      # currently we don't log args because it's potentially large
      $log->tracef("[pericmd] Riap request: action=call, url=%s", $url);
  
      #$log->tracef("TMP: extra=%s", \%extra);
  
      # setup output progress indicator
      if ($r->{meta}{features}{progress}) {
          $self->_setup_progress_output;
      }
  
      $self->riap_client->request(
          call => $url, \%extra);
  }
  
  1;
  # ABSTRACT: A Rinci/Riap-based command-line application framework
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::CmdLine::Lite - A Rinci/Riap-based command-line application framework
  
  =head1 VERSION
  
  This document describes version 1.72 of Perinci::CmdLine::Lite (from Perl distribution Perinci-CmdLine-Lite), released on 2017-01-16.
  
  =head1 SYNOPSIS
  
  In C<gen-random-num> script:
  
   use Perinci::CmdLine::Lite;
  
   our %SPEC;
  
   $SPEC{gen_random_num} = {
       v => 1.1,
       summary => 'Generate some random numbers',
       args => {
           count => {
               summary => 'How many numbers to generate',
               schema => ['int*' => min=>0],
               default => 1,
               cmdline_aliases=>{n=>{}},
               req => 1,
               pos => 0,
           },
           min => {
               summary => 'Lower limit of random number',
               schema => 'float*',
               default => 0,
           },
           max => {
               summary => 'Upper limit of random number',
               schema => 'float*',
               default => 1,
           },
       },
       result_naked => 1,
   };
   sub gen_random_num {
       my %args = @_;
  
       my @res;
       for (1..$args{count}) {
           push @res, $args{min} + rand()*($args{max}-$args{min});
       }
       \@res;
   }
  
   Perinci::CmdLine::Lite->new(url => '/main/gen_random_num')->run;
  
  Run your script:
  
   % ./gen-random-num
   0.999473691060306
  
   % ./gen-random-num --min 1 --max 10 5
   1.27390166158969
   1.69077475473679
   8.97748327778684
   5.86943773494068
   8.34341298182493
  
  JSON output support out of the box:
  
   % ./gen-random-num -n3 --json
   [200,"OK (envelope added by Perinci::Access::Lite)",[0.257073684902029,0.393782991540746,0.848740540017513],{}]
  
  Automatic help message:
  
   % ./gen-random-num -h
   gen-random-num - Generate some random numbers
  
   Usage:
     gen-random-num --help (or -h, -?)
     gen-random-num --version (or -v)
     gen-random-num [options] [count]
   Options:
     --config-path=s     Set path to configuration file
     --config-profile=s  Set configuration profile to use
     --count=i, -n       How many numbers to generate (=arg[0]) [1]
     --format=s          Choose output format, e.g. json, text [undef]
     --help, -h, -?      Display this help message
     --json              Set output format to json
     --max=f             Upper limit of random number [1]
     --min=f             Lower limit of random number [0]
     --naked-res         When outputing as JSON, strip result envelope [0]
     --no-config         Do not use any configuration file
     --version, -v
  
  Automatic configuration file support:
  
   % cat ~/gen-random-num.conf
   count=5
   max=0.01
  
   % ./gen-random-num
   0.00105268954838724
   0.00701443611501844
   0.0021247476506154
   0.00813872824513005
   0.00752832346491306
  
  Automatic tab completion support:
  
   % complete -C gen-random-num gen-random-num
   % gen-random-num --mi<tab>
  
  See L<Perinci::CmdLine::Manual> for details on other available features
  (subcommands, automatic formatting of data structures, automatic schema
  validation, dry-run mode, automatic POD generation, remote function support,
  automatic CLI generation, automatic --version, automatic HTTP API,
  undo/transactions, configurable output format, logging, progress bar,
  colors/Unicode, and more).
  
  =head1 DESCRIPTION
  
  Perinci::CmdLine is a command-line application framework. It allows you to
  create full-featured CLI applications easily and quickly.
  
  See L<Perinci::CmdLine::Manual> for more details.
  
  There is also a blog post series on Perinci::CmdLine tutorial:
  L<https://perlancar.wordpress.com/category/pericmd-tut/>
  
  Perinci::CmdLine::Lite is the default backend implementation. Another
  implementation is the heavier L<Perinci::CmdLine::Classic> which has a couple of
  more features not yet incorporated into ::Lite, e.g. transactions.
  
  You normally should use L<Perinci::CmdLine::Any> instead to be able to switch
  backend on the fly.
  
  =for Pod::Coverage ^(BUILD|get_meta|hook_.+|action_.+)$
  
  =head1 REQUEST KEYS
  
  All those supported by L<Perinci::CmdLine::Base>, plus:
  
  =over
  
  =back
  
  =head1 RESULT METADATA
  
  All those supported by L<Perinci::CmdLine::Base>, plus:
  
  =head2 x.hint.result_binary => bool
  
  If set to true, then when formatting to C<text> formats, this class won't print
  any newline to keep the data being printed unmodified.
  
  =head1 ATTRIBUTES
  
  All the attributes of L<Perinci::CmdLine::Base>, plus:
  
  =head2 log => bool (default: from env or 0)
  
  Whether to enable logging. This currently means setting up L<Log::Any::Adapter>
  to display logging (set in C<hook_after_parse_argv>, so tab completion skips
  this step). To produce log, you use L<Log::Any> in your code.
  
  The default is off. If you set LOG=1 or LOG_LEVEL or TRACE/DEBUG/VERBOSE/QUIET,
  then the default will be on. It defaults to off if you set LOG=0 or
  LOG_LEVEL=off.
  
  =head2 log_level => str (default: from env, or 'warning')
  
  Set default log level. The default can also be set via
  LOG_LEVEL/TRACE/DEBUG/VERBOSE/QUIET.
  
  =head2 validate_args => bool (default: 1)
  
  =head1 METHODS
  
  All the methods of L<Perinci::CmdLine::Base>, plus:
  
  =head1 ENVIRONMENT
  
  All the environment variables that L<Perinci::CmdLine::Base> supports, plus:
  
  =head2 DEBUG
  
  Set log level to 'debug'.
  
  =head2 VERBOSE
  
  Set log level to 'info'.
  
  =head2 QUIET
  
  Set log level to 'error'.
  
  =head2 TRACE
  
  Set log level to 'trace'.
  
  =head2 LOG_LEVEL
  
  Set log level.
  
  =head2 PROGRESS => BOOL
  
  Explicitly turn the progress bar on/off.
  
  =head2 FORMAT_PRETTY_TABLE_COLUMN_ORDERS => array (json)
  
  Set the default of C<table_column_orders> in C<format_options> in result
  metadata, similar to what's implemented in L<Perinci::Result::Format> and
  L<Data::Format::Pretty::Console>.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-CmdLine-Lite>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-CmdLine-Lite>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-CmdLine-Lite>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci::CmdLine::Any>
  
  L<Perinci::CmdLine::Classic>
  
  L<Perinci::CmdLine::Inline>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_CMDLINE_LITE

    $main::fatpacked{"Perinci/CmdLine/Util/Config.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_CMDLINE_UTIL_CONFIG';
  package Perinci::CmdLine::Util::Config;
  
  our $DATE = '2017-01-13'; # DATE
  our $VERSION = '1.71'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  our %SPEC;
  
  # from PERLANCAR::File::HomeDir 0.03, with minor modification
  sub _get_my_home_dir {
      if ($^O eq 'MSWin32') {
          # File::HomeDir always uses exists($ENV{x}) first, does it want to avoid
          # accidentally creating env vars?
          return $ENV{HOME} if $ENV{HOME};
          return $ENV{USERPROFILE} if $ENV{USERPROFILE};
          return join($ENV{HOMEDRIVE}, "\\", $ENV{HOMEPATH})
              if $ENV{HOMEDRIVE} && $ENV{HOMEPATH};
      } else {
          return $ENV{HOME} if $ENV{HOME};
          my @pw;
          eval { @pw = getpwuid($>) };
          return $pw[7] if @pw;
      }
      die "Can't get home directory";
  }
  
  $SPEC{get_default_config_dirs} = {
      v => 1.1,
      args => {},
  };
  sub get_default_config_dirs {
      my @dirs;
      #local $PERLANCAR::File::HomeDir::DIE_ON_FAILURE = 1;
      my $home = _get_my_home_dir();
      if ($^O eq 'MSWin32') {
          push @dirs, $home;
      } else {
          push @dirs, "$home/.config", $home, "/etc";
      }
      \@dirs;
  }
  
  $SPEC{read_config} = {
      v => 1.1,
      args => {
          config_paths    => {},
          config_filename => {},
          config_dirs     => {},
          program_name    => {},
      },
  };
  sub read_config {
      require Config::IOD::Reader;
  
      my %args = @_;
  
      my $config_dirs = $args{config_dirs} // get_default_config_dirs();
  
      my $paths;
  
      my @filenames;
      my %section_config_filename_map;
      if (my $names = $args{config_filename}) {
          for my $name (ref($names) eq 'ARRAY' ? @$names : ($names)) {
              if (ref($name) eq 'HASH') {
                  $section_config_filename_map{$name->{filename}} = $name->{section};
                  push @filenames, $name->{filename};
              } else {
                  $section_config_filename_map{$name} = 'GLOBAL';
                  push @filenames, $name;
              }
          }
      }
      unless (@filenames) {
          @filenames = (($args{program_name} // "prog") . ".conf");
      }
  
      if ($args{config_paths}) {
          $paths = $args{config_paths};
      } else {
          for my $dir (@$config_dirs) {
              for my $name (@filenames) {
                  my $path = "$dir/" . $name;
                  push @$paths, $path if -e $path;
              }
          }
      }
  
      my $reader = Config::IOD::Reader->new;
      my %res;
      my @read;
      my %section_read_order;
      for my $i (0..$#{$paths}) {
          my $path           = $paths->[$i];
          my $filename = $path; $filename =~ s!.*[/\\]!!;
          my $wanted_section = $section_config_filename_map{$filename};
          #$log->tracef("[pericmd] Reading config file '%s' ...", $path);
          my $j = 0;
          $section_read_order{GLOBAL} = [$i, $j++];
          my $hoh = $reader->read_file(
              $path,
              sub {
                  my %args = @_;
                  return unless $args{event} eq 'section';
                  my $section = $args{section};
                  $section_read_order{$section} = [$i, $j++];
              },
          );
          push @read, $path;
          for my $section (keys %$hoh) {
              my $hash = $hoh->{$section};
  
              my $s = $section; $s =~ s/\s*\S*=.*\z//; # strip key=value pairs
              $s = 'GLOBAL' if $s eq '';
              next unless !defined($wanted_section) || $s eq $wanted_section;
  
              for (keys %$hash) {
                  $res{$section}{$_} = $hash->{$_};
              }
          }
      }
      [200, "OK", \%res, {
          'func.read_files' => \@read,
          'func.section_read_order' => \%section_read_order,
      }];
  }
  
  $SPEC{get_args_from_config} = {
      v => 1.1,
      args => {
          r => {},
          config => {},
          args => {},
          subcommand_name => {},
          config_profile => {},
          common_opts => {},
          meta => {},
          meta_is_normalized => {},
      },
  };
  sub get_args_from_config {
      my %fargs = @_;
  
      my $r       = $fargs{r};
      my $conf    = $fargs{config};
      my $progn   = $fargs{program_name};
      my $scn     = $fargs{subcommand_name} // '';
      my $profile = $fargs{config_profile};
      my $args    = $fargs{args} // {};
      my $copts   = $fargs{common_opts};
      my $meta    = $fargs{meta};
      my $found;
  
      unless ($fargs{meta_is_normalized}) {
          require Perinci::Sub::Normalize;
          $meta = Perinci::Sub::Normalize::normalize_function_metadata($meta);
      }
  
      my $csro = $r->{_config_section_read_order} // {};
      my @sections = sort {
          # sort according to the order the section is seen in the file
          my $csro_a = $csro->{$a} // [0,0];
          my $csro_b = $csro->{$b} // [0,0];
          $csro_a->[0] <=> $csro_b->[0] ||
              $csro_a->[1] <=> $csro_b->[1] ||
              $a cmp $b
          } keys %$conf;
  
      my %seen_profiles; # for debugging message
      for my $section0 (@sections) {
          my %keyvals;
          my $sect_name;
          for my $word (split /\s+/, $section0) {
              if ($word =~ /(.*?)=(.*)/) {
                  $keyvals{$1} = $2;
              } else {
                  $sect_name //= $word;
              }
          }
          $seen_profiles{$keyvals{profile}}++ if defined $keyvals{profile};
  
          my $sect_scn     = $keyvals{subcommand} // '';
          my $sect_profile = $keyvals{profile};
  
          # if there is a subcommand name, use section with no subcommand=... or
          # the matching subcommand
          if (length $scn) {
              if (length($sect_scn) && $sect_scn ne $scn) {
                  #$log->tracef(
                  #    "[pericmd] Skipped config section '%s' (%s)",
                  #    $section0, "subcommand does not match '$scn'",
                  #);
                  next;
              }
          } else {
              if (length $sect_scn) {
                  #$log->tracef(
                  #    "[pericmd] Skipped config section '%s' (%s)",
                  #    $section0, "only for a certain subcommand",
                  #);
                  next;
              }
          }
  
          # if user chooses a profile, only use section with no profile=... or the
          # matching profile
          if (defined $profile) {
              if (defined($sect_profile) && $sect_profile ne $profile) {
                  #$log->tracef(
                  #    "[pericmd] Skipped config section '%s' (%s)",
                  #    $section0, "profile does not match '$profile'",
                  #);
                  next;
              }
              $found = 1 if defined($sect_profile) && $sect_profile eq $profile;
          } else {
              if (defined($sect_profile)) {
                  #$log->tracef(
                  #    "[pericmd] Skipped config section '%s' (%s)",
                  #    $section0, "only for a certain profile",
                  #);
                  next;
              }
          }
  
          # only use section marked with program=... if the program name matches
          if (defined($progn) && defined($keyvals{program})) {
              if ($progn ne $keyvals{program}) {
                  #$log->tracef(
                  #    "[pericmd] Skipped config section '%s' (%s)",
                  #    $section0, "program does not match '$progn'",
                  #);
                  next;
              }
          }
  
          # if user specifies env=... then apply filtering by ENV variable
          if (defined(my $env = $keyvals{env})) {
              my ($var, $val);
              if (($var, $val) = $env =~ /\A(\w+)=(.*)\z/) {
                  if (($ENV{$var} // '') ne $val) {
                      #$log->tracef(
                      #    "[pericmd] Skipped config section '%s' (%s)",
                      #    $section0, "env $var has non-matching value '".
                      #        ($ENV{$var} // '')."'",
                      #);
                      next;
                  }
              } elsif (($var, $val) = $env =~ /\A(\w+)!=(.*)\z/) {
                  if (($ENV{$var} // '') eq $val) {
                      #$log->tracef(
                      #    "[pericmd] Skipped config section '%s' (%s)",
                      #    $section0, "env $var has that value",
                      #);
                      next;
                  }
              } elsif (($var, $val) = $env =~ /\A(\w+)\*=(.*)\z/) {
                  if (index(($ENV{$var} // ''), $val) < 0) {
                      #$log->tracef(
                      #    "[pericmd] Skipped config section '%s' (%s)",
                      #    $section0, "env $var has value '".
                      #        ($ENV{$var} // '')."' which does not contain the ".
                      #            "requested string"
                      #);
                      next;
                  }
              } else {
                  if (!$ENV{$env}) {
                      #$log->tracef(
                      #    "[pericmd] Skipped config section '%s' (%s)",
                      #    $section0, "env $env is not set/true",
                      #);
                      next;
                  }
              }
          }
  
          #$log->tracef("[pericmd] Reading config section '%s'", $section0);
  
          my $as = $meta->{args} // {};
          for my $k (keys %{ $conf->{$section0} }) {
              my $v = $conf->{$section0}{$k};
              if ($copts->{$k} && $copts->{$k}{is_settable_via_config}) {
                  my $sch = $copts->{$k}{schema};
                  if ($sch) {
                      require Data::Sah::Normalize;
                      $sch = Data::Sah::Normalize::normalize_schema($sch);
                      # since IOD might return a scalar or an array (depending on
                      # whether there is a single param=val or multiple param=
                      # lines), we need to arrayify the value if the argument is
                      # expected to be an array.
                      if (ref($v) ne 'ARRAY' && $sch->[0] eq 'array') {
                          $v = [$v];
                      }
                  }
                  $copts->{$k}{handler}->(undef, $v, $r);
              } else {
                  # when common option clashes with function argument name, user
                  # can use NAME.arg to refer to function argument.
                  $k =~ s/\.arg\z//;
  
                  # since IOD might return a scalar or an array (depending on
                  # whether there is a single param=val or multiple param= lines),
                  # we need to arrayify the value if the argument is expected to
                  # be an array.
                  if (ref($v) ne 'ARRAY' && $as->{$k} && $as->{$k}{schema} &&
                          $as->{$k}{schema}[0] eq 'array') {
                      $v = [$v];
                  }
                  $args->{$k} = $v;
              }
          }
      }
      #$log->tracef("[pericmd] Seen config profiles: %s",
      #             [sort keys %seen_profiles]);
  
      [200, "OK", $args, {'func.found'=>$found}];
  }
  
  1;
  # ABSTRACT: Utility routines related to config files
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::CmdLine::Util::Config - Utility routines related to config files
  
  =head1 VERSION
  
  This document describes version 1.71 of Perinci::CmdLine::Util::Config (from Perl distribution Perinci-CmdLine-Util-Config), released on 2017-01-13.
  
  =head1 FUNCTIONS
  
  
  =head2 get_args_from_config(%args) -> [status, msg, result, meta]
  
  This function is not exported.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<args> => I<any>
  
  =item * B<common_opts> => I<any>
  
  =item * B<config> => I<any>
  
  =item * B<config_profile> => I<any>
  
  =item * B<meta> => I<any>
  
  =item * B<meta_is_normalized> => I<any>
  
  =item * B<r> => I<any>
  
  =item * B<subcommand_name> => I<any>
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (any)
  
  
  =head2 get_default_config_dirs() -> [status, msg, result, meta]
  
  This function is not exported.
  
  No arguments.
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (any)
  
  
  =head2 read_config(%args) -> [status, msg, result, meta]
  
  This function is not exported.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<config_dirs> => I<any>
  
  =item * B<config_filename> => I<any>
  
  =item * B<config_paths> => I<any>
  
  =item * B<program_name> => I<any>
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (any)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-CmdLine-Util-Config>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-CmdLine-Util-Config>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-CmdLine-Util-Config>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_CMDLINE_UTIL_CONFIG

    $main::fatpacked{"Perinci/Object.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_OBJECT';
  package Perinci::Object;
  
  our $DATE = '2017-02-03'; # DATE
  our $VERSION = '0.30'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA    = qw(Exporter);
  our @EXPORT = qw(rimeta risub rivar ripkg envres envresmulti envrestable
                   riresmeta);
  
  sub rimeta {
      require Perinci::Object::Metadata;
      Perinci::Object::Metadata->new(@_);
  }
  
  sub risub {
      require Perinci::Object::Function;
      Perinci::Object::Function->new(@_);
  }
  
  sub rivar {
      require Perinci::Object::Variable;
      Perinci::Object::Variable->new(@_);
  }
  
  sub ripkg {
      require Perinci::Object::Package;
      Perinci::Object::Package->new(@_);
  }
  
  sub envres {
      require Perinci::Object::EnvResult;
      Perinci::Object::EnvResult->new(@_);
  }
  
  sub envresmulti {
      require Perinci::Object::EnvResultMulti;
      Perinci::Object::EnvResultMulti->new(@_);
  }
  
  sub envrestable {
      require Perinci::Object::EnvResultTable;
      Perinci::Object::EnvResultTable->new(@_);
  }
  
  sub riresmeta {
      require Perinci::Object::ResMeta;
      Perinci::Object::ResMeta->new(@_);
  }
  
  1;
  # ABSTRACT: Object-oriented interface for Rinci metadata
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Object - Object-oriented interface for Rinci metadata
  
  =head1 VERSION
  
  This document describes version 0.30 of Perinci::Object (from Perl distribution Perinci-Object), released on 2017-02-03.
  
  =head1 SYNOPSIS
  
   use Perinci::Object; # automatically exports risub(), rivar(), ripkg(),
                        # envres(), envresmulti(), envrestable(), riresmeta()
   use Data::Dump; # for dd()
  
   # OO interface to function metadata.
  
   my $risub = risub {
       v => 1.1,
       summary => 'Calculate foo and bar',
       "summary.alt.lang.id_ID" => 'Menghitung foo dan bar',
       args => { a1 => { schema => 'int*' }, a2 => { schema => 'str' } },
       features => { pure=>1 },
   };
   dd $risub->type,                                 # "function"
      $risub->v,                                    # 1.1
      $risub->arg('a1'),                            # { schema=>'int*' }
      $risub->arg('a3'),                            # undef
      $risub->feature('pure'),                      # 1
      $risub->feature('foo'),                       # undef
      $risub->langprop('summary'),                  # 'Calculate foo and bar'
      $risub->langprop({lang=>'id_ID'}, 'summary'), # 'Menghitung foo dan bar'
  
   # setting arg and property
   $risub->arg('a3', 'array');  # will actually fail for 1.0 metadata
   $risub->feature('foo', 2);   # ditto
  
   # OO interface to variable metadata
  
   my $rivar = rivar { ... };
  
   # OO interface to package metadata
  
   my $ripkg = ripkg { ... };
  
   # OO interface to enveloped result
  
   my $envres = envres [200, "OK", [1, 2, 3]];
   dd $envres->is_success, # 1
      $envres->status,     # 200
      $envres->message,    # "OK"
      $envres->result,     # [1, 2, 3]
      $envres->meta;       # undef
  
   # setting status, message, result, extra
   $envres->status(404);
   $envres->message('Not found');
   $envres->result(undef);
   $envres->meta({errno=>-100});
  
   # OO interface to function/method result metadata
   my $riresmeta = riresmeta { ... };
  
   # an example of using envresmulti()
   sub myfunc {
       ...
  
       my $envres = envresmulti();
  
       # add result for each item
       $envres->add_result(200, "OK", {item_id=>1});
       $envres->add_result(202, "OK", {item_id=>2, note=>"blah"});
       $envres->add_result(404, "Not found", {item_id=>3});
       ...
  
       # finally, return the result
       return $envres->as_struct;
   }
  
   # an example of using envrestable()
   sub myfunc {
       ...
       my $envres = envrestable();
       $envres->add_field('foo');
       $envres->add_field('bar');
       ...
       return $envres->as_struct;
   }
  
  =head1 DESCRIPTION
  
  L<Rinci> works using pure data structures, but sometimes it's convenient to have
  an object-oriented interface (wrapper) for those data. This module provides just
  that.
  
  =head1 FUNCTIONS
  
  =head2 rimeta $meta => OBJECT
  
  Exported by default. A shortcut for Perinci::Object::Metadata->new($meta).
  
  =head2 risub $meta => OBJECT
  
  Exported by default. A shortcut for Perinci::Object::Function->new($meta).
  
  =head2 rivar $meta => OBJECT
  
  Exported by default. A shortcut for Perinci::Object::Variable->new($meta).
  
  =head2 ripkg $meta => OBJECT
  
  Exported by default. A shortcut for Perinci::Object::Package->new($meta).
  
  =head2 envres $res => OBJECT
  
  Exported by default. A shortcut for Perinci::Object::EnvResult->new($res).
  
  =head2 envresmulti $res => OBJECT
  
  Exported by default. A shortcut for Perinci::Object::EnvResultMulti->new($res).
  
  =head2 envrestable $res => OBJECT
  
  Exported by default. A shortcut for Perinci::Object::EnvResultTable->new($res).
  
  =head2 riresmeta $resmeta => OBJECT
  
  Exported by default. A shortcut for Perinci::Object::ResMeta->new($res).
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Object>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Object>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Object>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Rinci>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_OBJECT

    $main::fatpacked{"Perinci/Object/EnvResult.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_OBJECT_ENVRESULT';
  package Perinci::Object::EnvResult;
  
  our $DATE = '2017-02-03'; # DATE
  our $VERSION = '0.30'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  sub new {
      my ($class, $res) = @_;
      $res //= [0, "", undef];
      my $obj = \$res;
      bless $obj, $class;
  }
  
  sub new_ok {
      my $class = shift;
      my $res = [200, "OK"];
      if (@_) {
          push @$res, $_[0];
      }
      $class->new($res);
  }
  
  sub status {
      my ($self, $new) = @_;
      if (defined $new) {
          die "Status must be an integer between 100 and 555" unless
              int($new) eq $new && $new >= 100 && $new <= 555;
          my $old = ${$self}->[0];
          ${$self}->[0] = $new;
          return $old;
      }
      ${$self}->[0];
  }
  
  sub message {
      my ($self, $new) = @_;
      if (defined $new) {
          die "Extra must be a string" if ref($new);
          my $old = ${$self}->[1];
          ${$self}->[1] = $new;
          return $old;
      }
      ${$self}->[1];
  }
  
  # avoid 'result' as this is ambiguous (the enveloped one? the naked one?). even
  # avoid 'enveloped' (the payload being enveloped? the enveloped result
  # (envelope+result inside)?)
  
  sub payload {
      my ($self, $new) = @_;
      if (defined $new) {
          my $old = ${$self}->[2];
          ${$self}->[2] = $new;
          return $old;
      }
      ${$self}->[2];
  }
  
  sub meta {
      my ($self, $new) = @_;
      if (defined $new) {
          die "Extra must be a hashref" unless ref($new) eq 'HASH';
          my $old = ${$self}->[3];
          ${$self}->[3] = $new;
          return $old;
      }
      ${$self}->[3];
  }
  
  sub is_success {
      my ($self) = @_;
      my $status = ${$self}->[0];
      $status >= 200 && $status <= 299;
  }
  
  sub as_struct {
      my ($self) = @_;
      ${$self};
  }
  
  1;
  # ABSTRACT: Represent enveloped result
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Object::EnvResult - Represent enveloped result
  
  =head1 VERSION
  
  This document describes version 0.30 of Perinci::Object::EnvResult (from Perl distribution Perinci-Object), released on 2017-02-03.
  
  =head1 SYNOPSIS
  
   use Perinci::Object::EnvResult;
   use Data::Dump; # for dd()
  
   my $envres = Perinci::Object::EnvResult->new([200, "OK", [1, 2, 3]]);
   dd $envres->is_success, # 1
      $envres->status,     # 200
      $envres->message,    # "OK"
      $envres->payload,    # [1, 2, 3]
      $envres->meta,       # undef
      $envres->as_struct;  # [200, "OK", [1, 2, 3]]
  
   # setting status, message, result, extra
   $envres->status(404);
   $envres->message('Not found');
   $envres->payload(undef);
   $envres->meta({errno=>-100});
  
   # shortcut: create a new OK result ([200, "OK"] or [200, "OK", $payload])
   $envres = Perinci::Object::EnvResult->new_ok();
   $envres = Perinci::Object::EnvResult->new_ok(42);
  
  =head1 DESCRIPTION
  
  This class provides an object-oriented interface for enveloped result (see
  L<Rinci::function> for more details).
  
  =head1 METHODS
  
  =head2 new($res) => OBJECT
  
  Create a new object from $res enveloped result array.
  
  =head2 new_ok([ $actual_res ]) => OBJECT
  
  Shortcut for C<< new([200,"OK",$actual_res]) >>, or just C<< new([200,"OK"]) >>
  if C<$actual_res> is not specified.
  
  =head2 $envres->status
  
  Get or set status (the 1st element).
  
  =head2 $envres->message
  
  Get or set message (the 2nd element).
  
  =head2 $envres->payload
  
  Get or set the actual payload (the 3rd element).
  
  =head2 $envres->meta
  
  Get or set result metadata (the 4th element).
  
  =head2 $envres->as_struct
  
  Return the represented data structure.
  
  =head2 $envres->is_success
  
  True if status is between 200-299.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Object>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Object>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Object>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci::Object>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_OBJECT_ENVRESULT

    $main::fatpacked{"Perinci/Object/EnvResultMulti.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_OBJECT_ENVRESULTMULTI';
  package Perinci::Object::EnvResultMulti;
  
  our $DATE = '2017-02-03'; # DATE
  our $VERSION = '0.30'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  use parent qw(Perinci::Object::EnvResult);
  
  sub new {
      my ($class, $res) = @_;
      $res //= [200, "Success/no items"];
      my $obj = \$res;
      bless $obj, $class;
  }
  
  sub add_result {
      my ($self, $status, $message, $extra) = @_;
      my $num_ok  = 0;
      my $num_nok = 0;
  
      push @{ ${$self}->[3]{results} },
          {status=>$status, message=>$message, %{ $extra // {} }};
      for (@{ ${$self}->[3]{results} // [] }) {
          if ($_->{status} =~ /\A(2|304)/) {
              $num_ok++;
          } else {
              $num_nok++;
          }
      }
      if ($num_ok) {
          if ($num_nok) {
              ${$self}->[0] = 207;
              ${$self}->[1] = "Partial success";
          } else {
              ${$self}->[0] = 200;
              ${$self}->[1] = "All success";
          }
      } else {
          ${$self}->[0] = $status;
          ${$self}->[1] = $message;
      }
  }
  
  1;
  # ABSTRACT: Represent enveloped result (multistatus)
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Object::EnvResultMulti - Represent enveloped result (multistatus)
  
  =head1 VERSION
  
  This document describes version 0.30 of Perinci::Object::EnvResultMulti (from Perl distribution Perinci-Object), released on 2017-02-03.
  
  =head1 SYNOPSIS
  
   use Perinci::Object::EnvResultMulti;
   use Data::Dump; # for dd()
  
   sub myfunc {
       ...
  
       # if unspecified, the default status will be [200, "Success/no items"]
       my $envres = Perinci::Object::EnvResultMulti->new;
  
       # then you can add result for each item
       $envres->add_result(200, "OK", {item_id=>1});
       $envres->add_result(202, "OK", {item_id=>2, note=>"blah"});
       $envres->add_result(404, "Not found", {item_id=>3});
       ...
  
       # if you add a success status, the overall status will still be 200
  
       # if you add a non-success staus, the overall status will be 207, or
       # the non-success status (if no success has been added)
  
       # finally, return the result
       return $envres->as_struct;
  
       # the result from the above will be: [207, "Partial success", undef,
       # {results => [
       #     {success=>200, message=>"OK", item_id=>1},
       #     {success=>201, message=>"OK", item_id=>2, note=>"blah"},
       #     {success=>404, message=>"Not found", item_id=>3},
       # ]}]
   } # myfunc
  
  =head1 DESCRIPTION
  
  This class is a subclass of L<Perinci::Object::EnvResult> and provides a
  convenience method when you want to use multistatus/detailed per-item results
  (specified in L<Rinci> 1.1.63: C<results> result metadata property). In this
  case, response status can be 200, 207, or non-success. As you add more per-item
  results, this class will set/update the overall response status for you.
  
  =head1 METHODS
  
  =head2 new($res) => OBJECT
  
  Create a new object from C<$res> enveloped result array. If C<$res> is not
  specified, the default is C<< [200, "Success/no items"] >>.
  
  =head2 $envres->add_result($status, $message, \%extra)
  
  Add an item result.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Object>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Object>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Object>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci::Object>
  
  L<Perinci::Object::EnvResult>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_OBJECT_ENVRESULTMULTI

    $main::fatpacked{"Perinci/Object/EnvResultTable.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_OBJECT_ENVRESULTTABLE';
  package Perinci::Object::EnvResultTable;
  
  our $DATE = '2017-02-03'; # DATE
  our $VERSION = '0.30'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  use parent qw(Perinci::Object::EnvResult);
  
  sub add_field {
      my ($self, $name, %attrs) = @_;
      ${$self}->[3]{'table.fields'} //= [];
      push @{ ${$self}->[3]{'table.fields'} }, $name;
  }
  
  1;
  # ABSTRACT: Represent enveloped result (table)
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Object::EnvResultTable - Represent enveloped result (table)
  
  =head1 VERSION
  
  This document describes version 0.30 of Perinci::Object::EnvResultTable (from Perl distribution Perinci-Object), released on 2017-02-03.
  
  =head1 SYNOPSIS
  
   use Perinci::Object::EnvResultTable;
  
   sub myfunc {
       ...
  
       my $envres = Perinci::Object::EnvResultTable->new;
  
       # add fields
       $envres->add_field('foo');
       $envres->add_field('foo');
  
       # finally, return the result
       return $envres->as_struct;
   }
  
  =head1 DESCRIPTION
  
  This class is a subclass of L<Perinci::Object::EnvResult> and provides
  convenience methods when you want to return table data.
  
  =head1 METHODS
  
  =head2 new($res) => OBJECT
  
  Create a new object from C<$res> enveloped result array.
  
  =head2 $envres->add_field($name, %attrs)
  
  Add a table field. This will create/push an entry to the C<table.fields> result
  metadata array.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Object>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Object>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Object>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci::Object>
  
  L<Perinci::Object::EnvResult>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_OBJECT_ENVRESULTTABLE

    $main::fatpacked{"Perinci/Object/Function.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_OBJECT_FUNCTION';
  package Perinci::Object::Function;
  
  our $DATE = '2017-02-03'; # DATE
  our $VERSION = '0.30'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  use parent qw(Perinci::Object::Metadata);
  
  sub type { "function" }
  
  # convenience for accessing features property
  sub feature {
      my $self = shift;
      my $name = shift;
      if (@_) {
          die "1.0 can't set feature" if $self->v eq 1.0;
          my $value = shift;
          ${$self}->{features} //= {};
          my $old = ${$self}->{features}{$name};
          ${$self}->{features}{$name} = $value;
          return $old;
      } else {
          ${$self}->{features}{$name};
      }
  }
  
  sub features {
      my $self = shift;
      ${$self}->{features} // {};
  }
  
  # transaction can be used to emulate dry run, by calling with -tx_action =>
  # 'check_state' only
  sub can_dry_run {
      my $self = shift;
      my $ff = ${$self}->{features} // {};
      $ff->{dry_run} // $ff->{tx} && $ff->{tx}{v} == 2;
  }
  
  sub default_dry_run {
      my $self = shift;
      my $ff = ${$self}->{features} // {};
      ref($ff->{dry_run}) eq 'HASH' && $ff->{dry_run}{default};
  }
  
  # convenience for accessing args property
  sub arg {
      my $self = shift;
      my $name = shift;
      if (@_) {
          die "1.0 can't set arg" if $self->v eq 1.0;
          my $value = shift;
          ${$self}->{args} //= {};
          my $old = ${$self}->{args}{$name};
          ${$self}->{args}{$name} = $value;
          return $old;
      } else {
          ${$self}->{args}{$name};
      }
  }
  
  1;
  # ABSTRACT: Represent function metadata
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Object::Function - Represent function metadata
  
  =head1 VERSION
  
  This document describes version 0.30 of Perinci::Object::Function (from Perl distribution Perinci-Object), released on 2017-02-03.
  
  =head1 SYNOPSIS
  
   use Perinci::Object;
  
   $SPEC{foo} = {
       v        => 1.1,
       args     => { b => {schema=>'int', req=>0} },
       features => {idempotent=>1},
   };
   my $risub = risub $SPEC{foo};
   print $risub->feature('idempotent'), # 1
         $risub->arg('b')->{req},       # 0
         $risub->arg('a');              # undef
  
  =head1 DESCRIPTION
  
  This class provides an object-oriented interface for function metadata.
  
  =head1 METHODS
  
  =head2 new($meta) => OBJECT
  
  Create a new object from $meta. If $meta is undef, creates an empty metadata.
  
  =head2 $risub->type => str
  
  Will return C<function>.
  
  =head2 $risub->features => HASH
  
  Return the C<features> property.
  
  =head2 $risub->feature(NAME[, VALUE])
  
  Get or set named feature (B<features> property in metadata). If a feature
  doesn't exist, undef will be returned.
  
  =head2 $risub->can_dry_run => BOOL
  
  Check whether function can do dry run, either from the C<dry_run> feature, or
  from the C<tx> feature. (Transaction can be used to emulate dry run, by calling
  the function with C<< -tx_action => 'check_state' >> only.)
  
  =head2 $risub->default_dry_run => BOOL
  
  Starting from Rinci 1.1.83, the C<dry_run> feature property can be a hash
  instead of a bool, and can contain this pair C<< default=>1 >> to specify that
  dry-run mode should be the default operation (e.g. for safety).
  
  =head2 $risub->arg(NAME[, VALUE])
  
  Get or set argument (B<args> property in metadata). If an argument doesn't
  exist, undef will be returned.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Object>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Object>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Object>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci::Object>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_OBJECT_FUNCTION

    $main::fatpacked{"Perinci/Object/Metadata.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_OBJECT_METADATA';
  package Perinci::Object::Metadata;
  
  our $DATE = '2017-02-03'; # DATE
  our $VERSION = '0.30'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  # BEGIN COPY-PASTE FROM String::Trim::More
  sub __trim_blank_lines {
      local $_ = shift;
      return $_ unless defined;
      s/\A(?:\n\s*)+//;
      s/(?:\n\s*){2,}\z/\n/;
      $_;
  }
  # END COPY-PASTE
  
  sub new {
      my ($class, $meta) = @_;
      $meta //= {};
      my $obj = \$meta;
      bless $obj, $class;
  }
  
  sub v {
      my $self = shift;
      ${$self}->{v} // 1.0;
  }
  
  sub type {
      die "BUG: type() must be subclassed";
  }
  
  sub as_struct {
      my $self = shift;
      ${$self};
  }
  
  sub langprop {
      my $self = shift;
      my $opts;
      if (ref($_[0]) eq 'HASH') {
          $opts = shift;
      } else {
          $opts = {};
      }
      my $prop = shift;
  
      my $deflang = ${$self}->{default_lang} // "en_US";
      my $olang   = $opts->{lang} || $ENV{LANGUAGE} || $ENV{LANG} || $deflang;
      $olang =~ s/\W.+//; # change "en_US.UTF-8" to "en_US"
      $olang = "en_US" if $olang eq 'C';
      (my $olang2 = $olang) =~ s/\A([a-z]{2})_[A-Z]{2}\z/$1/; # change "en_US" to "en"
      my $mark    = $opts->{mark_different_lang} // 1;
      #print "deflang=$deflang, olang=$olang, mark_different_lang=$mark\n";
  
      my @k;
      if ($olang eq $deflang) {
          @k = ([$olang, $prop, 0]);
      } else {
          @k = (
              [$olang, "$prop.alt.lang.$olang", 0],
              ([$olang2, "$prop.alt.lang.$olang2", 0]) x !!($olang2 ne $olang),
              [$deflang, $prop, $mark],
          );
      }
  
      my $v;
    GET:
      for my $k (@k) {
          #print "k=".join(", ", @$k)."\n";
          $v = ${$self}->{$k->[1]};
          if (defined $v) {
              if ($k->[2]) {
                  my $has_nl = $v =~ s/\n\z//;
                  $v = "{$olang|$k->[0] $v}" . ($has_nl ? "\n" : "");
              }
              $v = __trim_blank_lines($v);
              last GET;
          }
      }
  
      if (@_) {
          # set value
          ${$self}->{$k[0][1]} = $_[0];
      }
  
      $v;
  }
  
  sub name {
      my $self = shift;
      my $opts;
      if (@_ && ref($_[0]) eq 'HASH') {
          $opts = shift;
      } else {
          $opts = {};
      }
      $self->langprop($opts, "name", @_);
  }
  
  sub caption {
      my $self = shift;
      my $opts;
      if (@_ && ref($_[0]) eq 'HASH') {
          $opts = shift;
      } else {
          $opts = {};
      }
      $self->langprop($opts, "caption", @_);
  }
  
  sub summary {
      my $self = shift;
      my $opts;
      if (@_ && ref($_[0]) eq 'HASH') {
          $opts = shift;
      } else {
          $opts = {};
      }
      $self->langprop($opts, "summary", @_);
  }
  
  sub description {
      my $self = shift;
      my $opts;
      if (@_ && ref($_[0]) eq 'HASH') {
          $opts = shift;
      } else {
          $opts = {};
      }
      $self->langprop($opts, "description", @_);
  }
  
  1;
  # ABSTRACT: Base class for Perinci::Object metadata classes
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Object::Metadata - Base class for Perinci::Object metadata classes
  
  =head1 VERSION
  
  This document describes version 0.30 of Perinci::Object::Metadata (from Perl distribution Perinci-Object), released on 2017-02-03.
  
  =head1 METHODS
  
  =head2 new => obj
  
  Constructor.
  
  =head2 v => float
  
  Get version.
  
  =head2 as_struct => hash
  
  Get underlying data structure.
  
  =head2 type => str
  
  Return type (e.g. C<function>, C<package>).
  
  =head2 langprop([ \%opts, ]$prop[, $new_value])
  
  Get or set property value in the specified language (i.e., either in C<prop> or
  C<prop.alt.lang.XXX> properties).
  
  Known options:
  
  =over 4
  
  =item * lang => STR
  
  Defaults to metadata's C<default_lang> (which in turns default to C<en_US> if
  unspecified).
  
  =item * mark_different_lang => BOOL (defaults to 1)
  
  If set to true, text with different language than the language requested will be
  marked, e.g. C<"I love you"> requested in Indonesian language where the value
  for that language is unavailable will result in C<"{en_US I love you}"> being
  returned.
  
  =back
  
  =head2 name([ $new_value ]) => $value
  
  Get or set C<name> property. Will call C<langprop()>.
  
  =head2 summary([ $new_value ]) => $value
  
  Get or set C<summary> property. Will call C<langprop()>.
  
  =head2 description([ $new_value ]) => $value
  
  Get or set C<description> property. Will call C<langprop()>.
  
  =head2 caption([ $new_value ]) => $value
  
  Get or set C<caption> property. Will call C<langprop()>.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Object>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Object>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Object>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_OBJECT_METADATA

    $main::fatpacked{"Perinci/Object/Package.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_OBJECT_PACKAGE';
  package Perinci::Object::Package;
  
  our $DATE = '2017-02-03'; # DATE
  our $VERSION = '0.30'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  use parent qw(Perinci::Object::Metadata);
  
  sub type { "package" }
  
  1;
  # ABSTRACT: Represent package metadata
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Object::Package - Represent package metadata
  
  =head1 VERSION
  
  This document describes version 0.30 of Perinci::Object::Package (from Perl distribution Perinci-Object), released on 2017-02-03.
  
  =head1 METHODS
  
  =head2 $ripkg->type => str
  
  Will return C<package>.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Object>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Object>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Object>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_OBJECT_PACKAGE

    $main::fatpacked{"Perinci/Object/ResMeta.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_OBJECT_RESMETA';
  package Perinci::Object::ResMeta;
  
  our $DATE = '2017-02-03'; # DATE
  our $VERSION = '0.30'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  use parent qw(Perinci::Object::Metadata);
  
  sub type { "resmeta" }
  
  1;
  # ABSTRACT: Represent function/method result metadata
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Object::ResMeta - Represent function/method result metadata
  
  =head1 VERSION
  
  This document describes version 0.30 of Perinci::Object::ResMeta (from Perl distribution Perinci-Object), released on 2017-02-03.
  
  =head1 METHODS
  
  =head2 $riresmeta->type => str
  
  Will return C<resmeta>.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Object>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Object>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Object>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_OBJECT_RESMETA

    $main::fatpacked{"Perinci/Object/Variable.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_OBJECT_VARIABLE';
  package Perinci::Object::Variable;
  
  our $DATE = '2017-02-03'; # DATE
  our $VERSION = '0.30'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  use parent qw(Perinci::Object::Metadata);
  
  sub type { "variable" }
  
  1;
  # ABSTRACT: Represent variable metadata
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Object::Variable - Represent variable metadata
  
  =head1 VERSION
  
  This document describes version 0.30 of Perinci::Object::Variable (from Perl distribution Perinci-Object), released on 2017-02-03.
  
  =head1 METHODS
  
  =head2 $rivar->type => str
  
  Will return C<variable>.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Object>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Object>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Object>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_OBJECT_VARIABLE

    $main::fatpacked{"Perinci/Result/Format.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_RESULT_FORMAT';
  package Perinci::Result::Format;
  
  our $DATE = '2015-11-29'; # DATE
  our $VERSION = '0.45'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  our $Enable_Decoration = 1;
  our $Enable_Cleansing  = 0;
  
  # text formats are special. since they are more oriented towards human instead
  # of machine, we remove envelope when status is 2xx, so users only see content.
  
  # XXX color theme?
  
  my $format_text = sub {
      my ($format, $res) = @_;
  
      my $stack_trace_printed;
  
      my $print_err = sub {
          require Color::ANSI::Util;
          require Term::Detect::Software;
  
          my $use_color = $ENV{COLOR} // 1;
          my $terminfo = Term::Detect::Software::detect_terminal_cached();
          $use_color = 0 if !$terminfo->{color_depth};
          my $colorize = sub {
              my ($color, $str) = @_;
              if ($use_color) {
                  if (ref($color) eq 'ARRAY') {
                      (defined($color->[0]) ?
                           Color::ANSI::Util::ansifg($color->[0]):"").
                                 (defined($color->[1]) ?
                                      Color::ANSI::Util::ansibg($color->[1]):"").
                                            $str . "\e[0m";
                  } else {
                      Color::ANSI::Util::ansifg($color) . $str . "\e[0m";
                  }
              } else {
                  $str;
              }
          };
  
          my $res = shift;
          my $out = $colorize->("cc0000", "ERROR $res->[0]") .
              ($res->[1] ? ": $res->[1]" : "");
          $out =~ s/\n+\z//;
          my $clog; $clog = $res->[3]{logs}[0]
              if $res->[3] && $res->[3]{logs};
          if ($clog->{file} && $clog->{line}) {
              $out .= " (at ".$colorize->('3399cc', $clog->{file}).
                  " line ".$colorize->('3399cc', $clog->{line}).")";
          }
          $out .= "\n";
          if ($clog->{stack_trace} && $INC{"Carp/Always.pm"} &&
                  !$stack_trace_printed) {
              require Data::Dump::OneLine;
              my $i;
              for my $c (@{ $clog->{stack_trace} }) {
                  next unless $i++; # skip first entry
                  my $args;
                  if (!$c->[4]) {
                      $args = "()";
                  } elsif (!ref($c->[4])) {
                      $args = "(...)";
                  } else {
                      # periutil 0.37+ stores call arguments in [4]
  
                      # XXX a flag to let user choose which
  
                      # dump version
                      #$args = Data::Dump::OneLine::dump1(@{ $c->[4] });
                      #$args = "($args)" if @{$c->[4]} < 2;
  
                      # stringify version
                      $args = Data::Dump::OneLine::dump1(
                          map {defined($_) ? "$_":$_} @{ $c->[4] });
                      $args = "($args)" if @{$c->[4]} == 1;
                  }
                  $out .= "    $c->[3]${args} called at $c->[1] line $c->[2]\n";
              }
              $stack_trace_printed++;
          }
          $out;
      };
  
      if (!defined($res->[2])) {
          my $out = $res->[0] =~ /\A(?:2..|304)\z/ ? "" : $print_err->($res);
          my $max = 30;
          my $i = 0;
          my $prev = $res;
          while (1) {
              if ($i > $max) {
                  $out .= "  Previous error list too deep, stopping here\n";
                  last;
              }
              last unless $prev = $prev->[3]{prev};
              last unless ref($prev) eq 'ARRAY';
              $out .= "  " . $print_err->($prev);
              $i++;
          }
          return $out;
      }
      my ($r, $opts);
      if ($res->[0] =~ /\A2../) {
          $r = $res->[2];
          my $rfo = $res->[3]{format_options} // {};
          my $tff = $res->[3]{'table.fields'};
          if ($rfo->{$format}) {
              $opts = $rfo->{$format};
          } elsif ($rfo->{any}) {
              $opts = $rfo->{any};
          } elsif ($tff) {
              $opts = {table_column_orders=>[$tff]};
          }
      } else {
          $r = $res;
      }
      $opts //= {};
      if ($format eq 'text') {
          return Data::Format::Pretty::format_pretty(
              $r, {%$opts, module=>'Console'});
      }
      if ($format eq 'text-simple') {
          return Data::Format::Pretty::format_pretty(
              $r, {%$opts, module=>'SimpleText'});
      }
      if ($format eq 'text-pretty') {
          return Data::Format::Pretty::format_pretty(
              $r, {%$opts, module=>'Text'});
      }
  };
  
  our %Formats = (
      # YAML::Tiny::Color currently does not support circular refs
      yaml          => ['YAML', 'text/yaml', {circular=>0}],
      json          => ['CompactJSON', 'application/json', {circular=>0}],
      'json-pretty' => ['JSON', 'application/json', {circular=>0}],
      text          => [$format_text, 'text/plain', {circular=>0}],
      'text-simple' => [$format_text, 'text/plain', {circular=>0}],
      'text-pretty' => [$format_text, 'text/plain', {circular=>0}],
      'perl'        => ['Perl', 'text/x-perl', {circular=>1}],
      #'php'         => ['PHP', 'application/x-httpd-php', {circular=>0}],
      'phpserialization' => ['PHPSerialization', 'application/vnd.php.serialized', {circular=>0}],
      'ruby'        => ['Ruby', 'application/x-ruby', {circular=>1}],
  );
  
  sub format {
      require Data::Format::Pretty;
  
      my ($res, $format, $is_naked) = @_;
  
      my $fmtinfo = $Formats{$format} or return undef;
      my $formatter = $fmtinfo->[0];
  
      state $cleanser;
      if ($Enable_Cleansing && !$fmtinfo->[2]{circular}) {
          # currently we only have one type of cleansing, oriented towards JSON
          if (!$cleanser) {
              require Data::Clean::JSON;
              $cleanser = Data::Clean::JSON->get_cleanser;
          }
          $res = $cleanser->clone_and_clean($res);
      }
  
      my $deco = $Enable_Decoration;
  
      if (ref($formatter) eq 'CODE') {
          return $formatter->($format, $res);
      } else {
          my %o;
          $o{color} = 0 if !$deco && $format =~ /json|yaml|perl/;
          my $data = $is_naked ? $res->[2] : $res;
          return Data::Format::Pretty::format_pretty(
              $data, {%o, module=>$formatter});
      }
  }
  
  1;
  # ABSTRACT: Format envelope result
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Result::Format - Format envelope result
  
  =head1 VERSION
  
  This document describes version 0.45 of Perinci::Result::Format (from Perl distribution Perinci-Result-Format), released on 2015-11-29.
  
  =head1 SYNOPSIS
  
  =head1 DESCRIPTION
  
  This module formats enveloped result to YAML, JSON, etc. It uses
  L<Data::Format::Pretty> for the backend. It is used by other Perinci modules
  like L<Perinci::CmdLine> and L<Perinci::Access::HTTP::Server>.
  
  The default supported formats are:
  
  =over 4
  
  =item * json
  
  Using Data::Format::Pretty::CompactJSON.
  
  =item * json-pretty
  
  Using Data::Format::Pretty::JSON.
  
  =item * text-simple
  
  Using Data::Format::Pretty::SimpleText.
  
  =item * text-pretty
  
  Using Data::Format::Pretty::Text.
  
  =item * text
  
  Using Data::Format::Pretty::Console.
  
  =item * yaml
  
  Using Data::Format::Pretty::YAML.
  
  =item * perl
  
  Using Data::Format::Pretty::Perl.
  
  =item * phpserialization
  
  Using Data::Format::Pretty::PHPSerialization.
  
  =item * ruby
  
  Using Data::Format::Pretty::Ruby.
  
  =back
  
  =for Pod::Coverage .*
  
  =head1 VARIABLES
  
  =head1 %Perinci::Result::Format::Formats => HASH
  
  Contains a mapping between format names and Data::Format::Pretty::* module
  names + MIME type.
  
  =head1 $Enable_Decoration => BOOL (default: 1)
  
  Decorations include color or other markup, which might make a data structure
  like JSON or YAML string become invalid JSON/YAML. This should be turned off if
  one wants to send the formatting over network.
  
  =head1 $Enable_Cleansing => BOOL (default: 0)
  
  If enabled, cleansing will be done to data to help make sure that data does not
  contain item that cannot be handled by formatter. for example, JSON format
  cannot handle circular references or complex types other than hash/array.
  
  =head1 FUNCTIONS
  
  None is currently exported/exportable.
  
  =head1 format($res, $format[ , $is_naked=0 ]) => STR
  
  Format enveloped result C<$res> with format named C<$format>.
  
  Result metadata (C<< $res->[3] >>) is also checked for key named
  C<format_options>. The value should be a hash like this C<< { FORMAT_NAME =>
  OPTS, ... } >>. FORMAT_NAME can be C<any> to mean any format. This way, function
  results can specify the details of formatting. An example enveloped result:
  
   [200, "OK", ["foo", "bar", "baz"], {
       format_options => {
           "text"        => {list_max_columns=>1},
           "text-pretty" => {list_max_columns=>1},
       }
   }]
  
  The above result specifies that if it is displayed using C<text> or
  C<text-pretty> format, it should be displayed in one columns instead of
  multicolumns.
  
  =head1 RESULT METADATA
  
  =over
  
  =item * property: format_options => HASH
  
  =back
  
  =head1 FAQ
  
  =head2 How to list supported formats?
  
  Simply:
  
   my @supported_formats = keys %Perinci::Result::Format::Formats;
  
  =head2 How to add support for new formats?
  
  First make sure that Data::Format::Pretty::<FORMAT> module is available for your
  format. Look on CPAN. If it's not, i't also not hard to create one.
  
  Then, add your format to %Perinci::Result::Format::Formats hash:
  
   use Perinci::Result::Format;
  
   # this means format named 'xml' will be handled by Data::Format::Pretty::XML
   $Perinci::Result::Format::Formats{xml} = ['XML', 'text/xml'];
  
  =head1 SEE ALSO
  
  L<Data::Format::Pretty>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Result-Format>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Perinci-Result-Format>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Result-Format>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_RESULT_FORMAT

    $main::fatpacked{"Perinci/Result/Format/Lite.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_RESULT_FORMAT_LITE';
  package Perinci::Result::Format::Lite;
  
  our $DATE = '2017-01-10'; # DATE
  our $VERSION = '0.23'; # VERSION
  
  use 5.010001;
  #IFUNBUILT
  # use strict;
  # use warnings;
  #END IFUNBUILT
  
  use List::Util qw(first max);
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(format);
  
  # copy-pasted from List::MoreUtils::PP
  sub firstidx (&@) {
      my $f = shift;
      foreach my $i ( 0 .. $#_ )
          {
              local *_ = \$_[$i];
              return $i if $f->();
          }
      return -1;
  }
  
  sub _json {
      state $json = do {
          if    (eval { require Cpanel::JSON::XS; 1 })   { Cpanel::JSON::XS->new->canonical(1)->convert_blessed->allow_nonref }
          elsif (eval { require JSON::Tiny::Subclassable; 1 }) { JSON::Tiny::Subclassable->new }
          elsif (eval { require JSON::PP; 1 })   { JSON::PP->new->canonical(1)->convert_blessed->allow_nonref }
          else { die "Can't find any JSON module" }
      };
      $json;
  };
  
  sub __cleanse {
      state $cleanser = do {
          eval { require Data::Clean::JSON; 1 };
          if ($@) {
              undef;
          } else {
              Data::Clean::JSON->get_cleanser;
          }
      };
      if ($cleanser) {
          $cleanser->clean_in_place($_[0]);
      } else {
          $_[0];
      }
  }
  
  sub __gen_table {
      my ($data, $header_row, $resmeta, $format) = @_;
  
      $resmeta //= {};
  
      my @columns;
      if ($header_row) {
          @columns = @{$data->[0]};
      } else {
          @columns = map {"col$_"} 0..@{$data->[0]}-1;
      }
  
      my $column_orders; # e.g. [col2, col1, col3, ...]
    SET_COLUMN_ORDERS: {
  
          # find column orders from 'table_column_orders' in result metadata (or
          # from env)
          my $tcos;
          if ($ENV{FORMAT_PRETTY_TABLE_COLUMN_ORDERS}) {
              $tcos = _json->encode($ENV{FORMAT_PRETTY_TABLE_COLUMN_ORDERS});
          } elsif (my $rfos = ($resmeta->{'cmdline.format_options'} //
                                   $resmeta->{format_options})) {
              my $rfo = $rfos->{'text-pretty'} // $rfos->{text} // $rfos->{any};
              if ($rfo) {
                  $tcos = $rfo->{table_column_orders};
              }
          }
          if ($tcos) {
              # find an entry in tcos that @columns contains all the columns of
            COLS:
              for my $cols (@$tcos) {
                  for my $col (@$cols) {
                      next COLS unless first {$_ eq $col} @columns;
                  }
                  $column_orders = $cols;
                  last SET_COLUMN_ORDERS;
              }
          }
  
          # find column orders from table spec
          $column_orders = $resmeta->{'table.fields'};
      }
  
      # reorder each row according to requested column order
      if ($column_orders) {
          # 0->2, 1->0, ... (map column position from unordered to ordered)
          my @map0 = sort {
              my $idx_a = firstidx(sub {$_ eq $a->[1]},
                                   @$column_orders) // 9999;
              my $idx_b = firstidx(sub {$_ eq $b->[1]},
                                   @$column_orders) // 9999;
              $idx_a <=> $idx_b || $a->[1] cmp $b->[1];
          } map {[$_, $columns[$_]]} 0..$#columns;
          #use DD; dd \@map0;
          my @map;
          for (0..$#map0) {
              $map[$_] = $map0[$_][0];
          }
          #use DD; dd \@map;
          my $newdata = [];
          for my $row (@$data) {
              my @newrow;
              for (0..$#map) { $newrow[$_] = $row->[$map[$_]] }
              push @$newdata, \@newrow;
          }
          $data = $newdata;
          my @newcolumns;
          for (@map) { push @newcolumns, $columns[$_] }
          @columns = @newcolumns;
      }
  
      my @field_idxs; # map column to index in table.fields
      {
          my $tff = $resmeta->{'table.fields'} or last;
          for my $i (0..$#columns) {
              $field_idxs[$i] = firstidx { $_ eq $columns[$i] } @$tff;
          }
      }
  
      # add field units as label suffix to header (" (UNIT)")
      {
          last unless $header_row && @$data;
          my $tff = $resmeta->{'table.fields'} or last;
          my $tfu = $resmeta->{'table.field_units'} or last;
          for my $i (0..$#columns) {
              my $field_idx = $field_idxs[$i];
              next unless $field_idx >= 0;
              next unless defined $tfu->[$field_idx];
              $data->[0][$i] .= " ($tfu->[$field_idx])";
          }
      }
  
      # format cells
      {
          my $tff   = $resmeta->{'table.fields'} or last;
          my $tffmt = $resmeta->{'table.field_formats'} or last;
  
          # load required modules
          for my $ffmt (@$tffmt) {
              next unless $ffmt;
              if ($ffmt eq 'iso8601') {
                  #require Time::Local;
              }
          }
  
          for my $i (0..$#{$data}) {
              my $row = $data->[$i];
              for my $j (0..$#columns) {
                  next unless defined $row->[$j];
                  my $field_idx = $field_idxs[$j];
                  next unless $field_idx >= 0;
                  my $ffmt = $tffmt->[$field_idx];
                  next unless $ffmt;
                  if ($ffmt eq 'iso8601_datetime' || $ffmt eq 'iso8601_date') {
                      if ($row->[$j] =~ /\A[0-9]+\z/) {
                          my @t = gmtime($row->[$j]);
                          if ($ffmt eq 'iso8601_datetime') {
                              $row->[$j] = sprintf(
                                  "%04d-%02d-%02dT%02d:%02d:%02dZ",
                                  $t[5]+1900, $t[4]+1, $t[3], $t[2], $t[1], $t[0]);
                          } else {
                              $row->[$j] = sprintf(
                                  "%04d-%02d-%02d",
                                  $t[5]+1900, $t[4]+1, $t[3]);
                          }
                      }
                  } elsif ($ffmt eq 'boolstr') {
                      $row->[$j] = $row->[$j] ? "yes" : "no";
                  } elsif ($ffmt eq 'sci2dec') {
                      if ($row->[$j] =~ /\A(?:[+-]?)(?:\d+\.|\d*\.(\d+))[eE]([+-]?\d+)\z/) {
                          my $n = length($1 || "") - $2; $n = 0 if $n < 0;
                          $row->[$j] = sprintf("%.${n}f", $row->[$j]);
                      }
                  }
              }
          }
      }
  
      if ($format eq 'text-pretty') {
          # align columns
          {
              no warnings 'uninitialized';
              my $tfa = $resmeta->{'table.field_aligns'} or last;
              last unless @$data;
  
              for my $colidx (0..$#columns) {
                  my $field_idx = $field_idxs[$colidx];
                  next unless $field_idx >= 0;
                  my $align = $tfa->[$field_idx];
                  next unless $align;
  
                  # determine max widths
                  my $maxw;
                  my ($maxw_bd, $maxw_d, $maxw_ad); # before digit, digit, after d
                  if ($align eq 'number') {
                      my (@w_bd, @w_d, @w_ad);
                      for my $i (0..$#{$data}) {
                          my $row = $data->[$i];
                          if (@$row > $colidx) {
                              my $cell = $row->[$colidx];
                              if ($header_row && $i == 0) {
                                  my $w = length($cell);
                                  push @w_bd, 0;
                                  push @w_bd, 0;
                                  push @w_ad, 0;
                              } elsif ($cell =~ /\A([+-]?\d+)(\.?)(\d*)\z/) {
                                  # decimal notation number
                                  push @w_bd, length($1);
                                  push @w_d , length($2);
                                  push @w_ad, length($3);
                              } elsif ($cell =~ /\A([+-]?\d+\.?\d*)([eE])([+-]?\d+)\z/) {
                                  # scientific notation number
                                  push @w_bd, length($1);
                                  push @w_d , length($2);
                                  push @w_ad, length($3);
                              } else {
                                  # not a number
                                  push @w_bd, length($cell);
                                  push @w_bd, 0;
                                  push @w_ad, 0;
                              }
                          } else {
                              push @w_bd, 0;
                              push @w_d , 0;
                              push @w_ad, 0;
                          }
                      }
                      $maxw_bd = max(@w_bd);
                      $maxw_d  = max(@w_d);
                      $maxw_ad = max(@w_ad);
                      if ($header_row) {
                          my $w = length($data->[0][$colidx]);
                          if ($maxw_d == 0 && $maxw_ad == 0) {
                              $maxw_bd = $w;
                          }
                      }
                  }
  
                  $maxw = max(map {
                      @$_ > $colidx ? length($_->[$colidx]) : 0
                  } @$data);
  
                  # do the alignment
                  for my $i (0..$#{$data}) {
                      my $row = $data->[$i];
                      for my $i (0..$#{$data}) {
                          my $row = $data->[$i];
                          next unless @$row > $colidx;
                          my $cell = $row->[$colidx];
                          next unless defined($cell);
                          if ($align eq 'number') {
                              my ($bd, $d, $ad);
                              if ($header_row && $i == 0) {
                              } elsif (($bd, $d, $ad) = $cell =~ /\A([+-]?\d+)(\.?)(\d*)\z/) {
                                  $cell = join(
                                      '',
                                      (' ' x ($maxw_bd - length($bd))), $bd,
                                      $d , (' ' x ($maxw_d  - length($d ))),
                                      $ad, (' ' x ($maxw_ad - length($ad))),
                                  );
                              } elsif (($bd, $d, $ad) = $cell =~ /\A([+-]?\d+\.?\d*)([eE])([+-]?\d+)\z/) {
                                  $cell = join(
                                      '',
                                      (' ' x ($maxw_bd - length($bd))), $bd,
                                      $d , (' ' x ($maxw_d  - length($d ))),
                                      $ad, (' ' x ($maxw_ad - length($ad))),
                                  );
                              }
                              my $w = length($cell);
                              $cell = (' ' x ($maxw - $w)) . $cell
                                  if $maxw > $w;
                          } elsif ($align eq 'right') {
                              $cell = (' ' x ($maxw - length($cell))) . $cell;
                          } elsif ($align eq 'middle' || $align eq 'center') {
                              my $w = length($cell);
                              my $n = int(($maxw-$w)/2);
                              $cell = (' ' x $n) . $cell . (' ' x ($maxw-$w-$n));
                          } else {
                              # assumed left
                              $cell .= (' ' x ($maxw - length($cell)));
  
                          }
                          $row->[$colidx] = $cell;
                      }
                  }
              } # for $colidx
          } # END align columns
  
          my $fres;
          if (my $backend = $ENV{FORMAT_PRETTY_TABLE_BACKEND}) {
              require Text::Table::Any;
              $fres = Text::Table::Any::table(rows=>$data, header_row=>$header_row, backend=>$backend);
          } else {
              require Text::Table::Tiny;
              $fres = Text::Table::Tiny::table(rows=>$data, header_row=>$header_row);
          }
          $fres .= "\n" unless $fres =~ /\R\z/ || !length($fres);
          $fres;
      } elsif ($format eq 'csv') {
          no warnings 'uninitialized';
          join(
              "",
              map {
                  my $row = $_;
                  join(
                      ",",
                      map {
                          my $cell = $_;
                          $cell =~ s/(["\\])/\\$1/g;
                          qq("$cell");
                      } @$row)."\n";
              } @$data
          );
      } elsif ($format eq 'html') {
          no warnings 'uninitialized';
          require HTML::Entities;
  
          my $tfa = $resmeta->{'table.field_aligns'};
  
          my @res;
          push @res, "<table".($resmeta->{'table.html_class'} ?
                                   " class=\"".HTML::Entities::encode_entities(
                                       $resmeta->{'table.html_class'})."\"" : "").
                                           ">\n";
          for my $i (0..$#{$data}) {
              my $data_elem = $i == 0 ? "th" : "td";
              push @res, "<thead>\n" if $i == 0;
              push @res, "<tbody>\n" if $i == 1;
              push @res, " <tr>\n";
              my $row = $data->[$i];
              for my $j (0..$#{$row}) {
                  my $field_idx = $field_idxs[$j];
                  my $align;
                  if ($field_idx >= 0 && $tfa->[$field_idx]) {
                      $align = $tfa->[$field_idx];
                      $align = "right" if $align eq 'number';
                      $align = "middle" if $align eq 'center';
                  }
                  push @res, "  <$data_elem",
                      ($align ? " align=\"$align\"" : ""),
                      ">", HTML::Entities::encode_entities($row->[$j]),
                      "</$data_elem>\n";
              }
              push @res, " </tr>\n";
              push @res, "</thead>\n" if $i == 0;
          }
          push @res, "</tbody>\n";
          push @res, "</table>\n";
          join '', @res;
      } else {
          no warnings 'uninitialized';
          shift @$data if $header_row;
          join("", map {join("\t", @$_)."\n"} @$data);
      }
  }
  
  sub format {
      my ($res, $format, $is_naked, $cleanse) = @_;
  
      if ($format =~ /\A(text|text-simple|text-pretty|csv|html)\z/) {
          $format = $format eq 'text' ?
              ((-t STDOUT) ? 'text-pretty' : 'text-simple') : $format;
          no warnings 'uninitialized';
          if ($res->[0] !~ /^(2|304)/) {
              my $fres = "ERROR $res->[0]: $res->[1]";
              if (my $prev = $res->[3]{prev}) {
                  $fres .= " ($prev->[0]: $prev->[1])";
              }
              return "$fres\n";
          } elsif ($res->[3] && $res->[3]{"x.hint.result_binary"}) {
              return $res->[2];
          } else {
              require Data::Check::Structure;
              my $data = $res->[2];
              my $max = 5;
              if (!ref($data)) {
                  $data //= "";
                  $data .= "\n" unless !length($data) || $data =~ /\n\z/;
                  return $data;
              } elsif (ref($data) eq 'ARRAY' && !@$data) {
                  return "";
              } elsif (Data::Check::Structure::is_aos($data, {max=>$max})) {
                  return join("", map {"$_\n"} @$data);
              } elsif (Data::Check::Structure::is_aoaos($data, {max=>$max})) {
                  return __gen_table($data, 0, $res->[3], $format);
              } elsif (Data::Check::Structure::is_hos($data, {max=>$max})) {
                  $data = [map {[$_, $data->{$_}]} sort keys %$data];
                  unshift @$data, ["key", "value"];
                  return __gen_table($data, 1, $res->[3], $format);
              } elsif (Data::Check::Structure::is_aohos($data, {max=>$max})) {
                  # collect all mentioned fields
                  my @fieldnames;
                  if ($res->[3] && $res->[3]{'table.fields'} &&
                          $res->[3]{'table.hide_unknown_fields'}) {
                      @fieldnames = @{ $res->[3]{'table.fields'} };
                  } else {
                      my %fieldnames;
                      for my $row (@$data) {
                          $fieldnames{$_}++ for keys %$row;
                      }
                      @fieldnames = sort keys %fieldnames;
                  }
                  my $newdata = [];
                  for my $row (@$data) {
                      push @$newdata, [map {$row->{$_}} @fieldnames];
                  }
                  unshift @$newdata, \@fieldnames;
                  return __gen_table($newdata, 1, $res->[3], $format);
              } else {
                  $format = 'json-pretty';
              }
          }
      }
  
      my $tff = $res->[3]{'table.fields'};
      $res = $res->[2] if $is_naked;
  
      unless ($format =~ /\Ajson(-pretty)?\z/) {
          warn "Unknown format '$format', fallback to json-pretty";
          $format = 'json-pretty';
      }
      __cleanse($res) if ($cleanse//1);
      if ($format =~ /json/) {
          if ($tff && _json->can("sort_by") &&
                  eval { require Sort::ByExample; 1}) {
              my $cmp = Sort::ByExample->cmp($tff);
              _json->sort_by(sub { $cmp->($JSON::PP::a, $JSON::PP::b) });
          }
  
          if ($format eq 'json') {
              return _json->encode($res) . "\n";
          } else {
              _json->pretty(1);
              return _json->encode($res);
          }
      }
  }
  
  1;
  # ABSTRACT: Format enveloped result
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Result::Format::Lite - Format enveloped result
  
  =head1 VERSION
  
  This document describes version 0.23 of Perinci::Result::Format::Lite (from Perl distribution Perinci-Result-Format-Lite), released on 2017-01-10.
  
  =head1 SYNOPSIS
  
  =head1 DESCRIPTION
  
  =for Pod::Coverage ^(firstidx)$
  
  =head1 FUNCTIONS
  
  =head2 format($res, $format[ , $is_naked=0, $cleanse=1 ]) => str
  
  =head1 ENVIRONMENT
  
  =head2 FORMAT_PRETTY_TABLE_BACKEND => str
  
  If this is set, will render text table using L<Text::Table::Any> (with
  C<backend> set to the value of this environment variable) instead of the default
  L<Text::Table::Tiny>. This is useful if you want to output text table in a
  different format, for example to generate Org tables (make sure
  L<Text::Table::Org> backend is already installed):
  
   % FORMAT_PRETTY_TABLE_BACKEND=Text::Table::Org lcpan rdeps Getopt::Lucid
  
  =head2 FORMAT_PRETTY_TABLE_COLUMN_ORDERS => array (json)
  
  Set the default of C<table_column_orders> in C<format_options> in result
  metadata, similar to what's implemented in L<Perinci::Result::Format> and
  L<Data::Format::Pretty::Console>.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Result-Format-Lite>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Result-Format-Lite>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Result-Format-Lite>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci::Result::Format>, a more heavyweight version of this module.
  
  L<Perinci::CmdLine::Lite> uses this module to format enveloped result.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_RESULT_FORMAT_LITE

    $main::fatpacked{"Perinci/Sub/Complete.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_SUB_COMPLETE';
  package Perinci::Sub::Complete;
  
  our $DATE = '2017-01-15'; # DATE
  our $VERSION = '0.91'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  use Log::Any::IfLOG '$log';
  
  use Complete::Util qw(hashify_answer complete_array_elem complete_hash_key combine_answers modify_answer);
  use Complete::Common qw(:all);
  use Perinci::Sub::Util qw(gen_modified_sub);
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(
                         complete_from_schema
                         complete_arg_val
                         complete_arg_index
                         complete_arg_elem
                         complete_cli_arg
                 );
  our %SPEC;
  
  $SPEC{':package'} = {
      v => 1.1,
      summary => 'Complete command-line argument using Rinci metadata',
  };
  
  my %common_args_riap = (
      riap_client => {
          summary => 'Optional, to perform complete_arg_val to the server',
          schema  => 'obj*',
          description => <<'_',
  
  When the argument spec in the Rinci metadata contains `completion` key, this
  means there is custom completion code for that argument. However, if retrieved
  from a remote server, sometimes the `completion` key no longer contains the code
  (it has been cleansed into a string). Moreover, the completion code needs to run
  on the server.
  
  If supplied this argument and te `riap_server_url` argument, the function will
  try to request to the server (via Riap request `complete_arg_val`). Otherwise,
  the function will just give up/decline completing.
  
  _
          },
      riap_server_url => {
          summary => 'Optional, to perform complete_arg_val to the server',
          schema  => 'str*',
          description => <<'_',
  
  See the `riap_client` argument.
  
  _
      },
      riap_uri => {
          summary => 'Optional, to perform complete_arg_val to the server',
          schema  => 'str*',
          description => <<'_',
  
  See the `riap_client` argument.
  
  _
      },
  );
  
  $SPEC{complete_from_schema} = {
      v => 1.1,
      summary => 'Complete a value from schema',
      description => <<'_',
  
  Employ some heuristics to complete a value from Sah schema. For example, if
  schema is `[str => in => [qw/new open resolved rejected/]]`, then we can
  complete from the `in` clause. Or for something like `[int => between => [1,
  20]]` we can complete using values from 1 to 20.
  
  _
      args => {
          schema => {
              summary => 'Must be normalized',
              req => 1,
          },
          word => {
              schema => [str => default => ''],
              req => 1,
          },
      },
  };
  sub complete_from_schema {
      my %args = @_;
      my $sch  = $args{schema}; # must be normalized
      my $word = $args{word} // "";
  
      my $fres;
      $log->tracef("[comp][periscomp] entering complete_from_schema, word=<%s>, schema=%s", $word, $sch);
  
      my ($type, $cs) = @{$sch};
  
      # schema might be based on other schemas, if that is the case, let's try to
      # look at Sah::SchemaR::* module to quickly find the base type
      unless ($type =~ /\A(all|any|array|bool|buf|cistr|code|date|duration|float|hash|int|num|obj|re|str|undef)\z/) {
          no strict 'refs';
          my $pkg = "Sah::SchemaR::$type";
          (my $pkg_pm = "$pkg.pm") =~ s!::!/!g;
          eval { require $pkg_pm; 1 };
          goto RETURN_RES if $@;
          my $rsch = ${"$pkg\::rschema"};
          $type = $rsch->[0];
          # let's just merge everything, for quick checking of clause
          $cs = {};
          for my $cs0 (@{ $rsch->[1] // [] }) {
              for (keys %$cs0) {
                  $cs->{$_} = $cs0->{$_};
              }
          }
          $log->tracef("[comp][periscomp] retrieving schema from module %s, base type=%s", $pkg, $type);
      }
  
      my $static;
      my $words;
      eval {
          if (my $xcomp = $cs->{'x.completion'}) {
              require Module::Installed::Tiny;
              my $comp;
              if (ref($xcomp) eq 'CODE') {
                  $comp = $xcomp;
              } else {
                  my ($submod, $xcargs);
                  if (ref($xcomp) eq 'ARRAY') {
                      $submod = $xcomp->[0];
                      $xcargs = $xcomp->[1];
                  } else {
                      $submod = $xcomp;
                      $xcargs = {};
                  }
                  my $mod = "Perinci::Sub::XCompletion::$submod";
                  if (Module::Installed::Tiny::module_installed($mod)) {
                      $log->tracef("[comp][periscomp] loading module %s ...", $mod);
                      my $mod_pm = $mod; $mod_pm =~ s!::!/!g; $mod_pm .= ".pm";
                      require $mod_pm;
                      my $fref = \&{"$mod\::gen_completion"};
                      $comp = $fref->(%$xcargs);
                  }
              }
              if ($comp) {
                  $log->tracef("[comp][periscomp] using arg completion routine from schema's 'x.completion' attribute");
                  $fres = $comp->(
                      %{$args{extras} // {}},
                      word=>$word, arg=>$args{arg}, args=>$args{args});
                  return; # from eval
                  }
              }
  
          if ($cs->{is} && !ref($cs->{is})) {
              $log->tracef("[comp][periscomp] adding completion from schema's 'is' clause");
              push @$words, $cs->{is};
              $static++;
              return; # from eval. there should not be any other value
          }
          if ($cs->{in}) {
              $log->tracef("[comp][periscomp] adding completion from schema's 'in' clause");
              push @$words, grep {!ref($_)} @{ $cs->{in} };
              $static++;
              return; # from eval. there should not be any other value
          }
          if ($type eq 'any') {
              # because currently Data::Sah::Normalize doesn't recursively
              # normalize schemas in 'of' clauses, etc.
              require Data::Sah::Normalize;
              if ($cs->{of} && @{ $cs->{of} }) {
                  $fres = combine_answers(
                      grep { defined } map {
                          complete_from_schema(
                              schema=>Data::Sah::Normalize::normalize_schema($_),
                              word => $word,
                          )
                      } @{ $cs->{of} }
                  );
                  goto RETURN_RES; # directly return result
              }
          }
          if ($type eq 'bool') {
              $log->tracef("[comp][periscomp] adding completion from possible values of bool");
              push @$words, 0, 1;
              $static++;
              return; # from eval
          }
          if ($type eq 'int') {
              my $limit = 100;
              if ($cs->{between} &&
                      $cs->{between}[0] - $cs->{between}[0] <= $limit) {
                  $log->tracef("[comp][periscomp] adding completion from schema's 'between' clause");
                  push @$words, $cs->{between}[0] .. $cs->{between}[1];
                  $static++;
              } elsif ($cs->{xbetween} &&
                           $cs->{xbetween}[0] - $cs->{xbetween}[0] <= $limit) {
                  $log->tracef("[comp][periscomp] adding completion from schema's 'xbetween' clause");
                  push @$words, $cs->{xbetween}[0]+1 .. $cs->{xbetween}[1]-1;
                  $static++;
              } elsif (defined($cs->{min}) && defined($cs->{max}) &&
                           $cs->{max}-$cs->{min} <= $limit) {
                  $log->tracef("[comp][periscomp] adding completion from schema's 'min' & 'max' clauses");
                  push @$words, $cs->{min} .. $cs->{max};
                  $static++;
              } elsif (defined($cs->{min}) && defined($cs->{xmax}) &&
                           $cs->{xmax}-$cs->{min} <= $limit) {
                  $log->tracef("[comp][periscomp] adding completion from schema's 'min' & 'xmax' clauses");
                  push @$words, $cs->{min} .. $cs->{xmax}-1;
                  $static++;
              } elsif (defined($cs->{xmin}) && defined($cs->{max}) &&
                           $cs->{max}-$cs->{xmin} <= $limit) {
                  $log->tracef("[comp][periscomp] adding completion from schema's 'xmin' & 'max' clauses");
                  push @$words, $cs->{xmin}+1 .. $cs->{max};
                  $static++;
              } elsif (defined($cs->{xmin}) && defined($cs->{xmax}) &&
                           $cs->{xmax}-$cs->{xmin} <= $limit) {
                  $log->tracef("[comp][periscomp] adding completion from schema's 'xmin' & 'xmax' clauses");
                  push @$words, $cs->{xmin}+1 .. $cs->{xmax}-1;
                  $static++;
              } elsif (length($word) && $word !~ /\A-?\d*\z/) {
                  $log->tracef("[comp][periscomp] word not an int");
                  $words = [];
              } else {
                  # do a digit by digit completion
                  $words = [];
                  for my $sign ("", "-") {
                      for ("", 0..9) {
                          my $i = $sign . $word . $_;
                          next unless length $i;
                          next unless $i =~ /\A-?\d+\z/;
                          next if $i eq '-0';
                          next if $i =~ /\A-?0\d/;
                          next if $cs->{between} &&
                              ($i < $cs->{between}[0] ||
                                   $i > $cs->{between}[1]);
                          next if $cs->{xbetween} &&
                              ($i <= $cs->{xbetween}[0] ||
                                   $i >= $cs->{xbetween}[1]);
                          next if defined($cs->{min} ) && $i <  $cs->{min};
                          next if defined($cs->{xmin}) && $i <= $cs->{xmin};
                          next if defined($cs->{max} ) && $i >  $cs->{max};
                          next if defined($cs->{xmin}) && $i >= $cs->{xmax};
                          push @$words, $i;
                      }
                  }
                  $words = [sort @$words];
              }
              return; # from eval
          }
          if ($type eq 'float') {
              if (length($word) && $word !~ /\A-?\d*(\.\d*)?\z/) {
                  $log->tracef("[comp][periscomp] word not a float");
                  $words = [];
              } else {
                  $words = [];
                  for my $sig ("", "-") {
                      for ("", 0..9,
                           ".0",".1",".2",".3",".4",".5",".6",".7",".8",".9") {
                          my $f = $sig . $word . $_;
                          next unless length $f;
                          next unless $f =~ /\A-?\d+(\.\d+)?\z/;
                          next if $f eq '-0';
                          next if $f =~ /\A-?0\d\z/;
                          next if $cs->{between} &&
                              ($f < $cs->{between}[0] ||
                                   $f > $cs->{between}[1]);
                          next if $cs->{xbetween} &&
                              ($f <= $cs->{xbetween}[0] ||
                                   $f >= $cs->{xbetween}[1]);
                          next if defined($cs->{min} ) && $f <  $cs->{min};
                          next if defined($cs->{xmin}) && $f <= $cs->{xmin};
                          next if defined($cs->{max} ) && $f >  $cs->{max};
                          next if defined($cs->{xmin}) && $f >= $cs->{xmax};
                          push @$words, $f;
                      }
                  }
              }
              return; # from eval
          }
      }; # eval
  
      $log->tracef("[periscomp] complete_from_schema died: %s", $@) if $@;
  
      goto RETURN_RES unless $words;
      $fres = hashify_answer(
          complete_array_elem(array=>$words, word=>$word),
          {static=>$static && $word eq '' ? 1:0},
      );
  
    RETURN_RES:
      $log->tracef("[comp][periscomp] leaving complete_from_schema, result=%s", $fres);
      $fres;
  }
  
  $SPEC{complete_arg_val} = {
      v => 1.1,
      summary => 'Given argument name and function metadata, complete value',
      description => <<'_',
  
  Will attempt to complete using the completion routine specified in the argument
  specification (the `completion` property, or in the case of `complete_arg_elem`
  function, the `element_completion` property), or if that is not specified, from
  argument's schema using `complete_from_schema`.
  
  Completion routine will get `%args`, with the following keys:
  
  * `word` (str, the word to be completed)
  * `arg` (str, the argument name which value is currently being completed)
  * `index (int, only for the `complete_arg_elem` function, the index in the
     argument array that is currently being completed, starts from 0)
  * `args` (hash, the argument hash to the function, so far)
  
  as well as extra keys from `extras` (but these won't overwrite the above
  standard keys).
  
  Completion routine should return a completion answer structure (described in
  <pm:Complete>) which is either a hash or an array. The simplest form of answer
  is just to return an array of strings. Completion routine can also return undef
  to express declination.
  
  _
      args => {
          meta => {
              summary => 'Rinci function metadata, must be normalized',
              schema => 'hash*',
              req => 1,
          },
          arg => {
              summary => 'Argument name',
              schema => 'str*',
              req => 1,
          },
          word => {
              summary => 'Word to be completed',
              schema => ['str*', default => ''],
          },
          args => {
              summary => 'Collected arguments so far, '.
                  'will be passed to completion routines',
              schema  => 'hash',
          },
          extras => {
              summary => 'Add extra arguments to completion routine',
              schema  => 'hash',
              description => <<'_',
  
  The keys from this `extras` hash will be merged into the final `%args` passed to
  completion routines. Note that standard keys like `word`, `cword`, and so on as
  described in the function description will not be overwritten by this.
  
  _
          },
  
          %common_args_riap,
      },
      result_naked => 1,
      result => {
          schema => 'array', # XXX of => str*
      },
  };
  sub complete_arg_val {
      my %args = @_;
  
      $log->tracef("[comp][periscomp] entering complete_arg_val, arg=<%s>", $args{arg});
      my $fres;
  
      my $extras = $args{extras} // {};
  
      my $meta = $args{meta} or do {
          $log->tracef("[comp][periscomp] meta is not supplied, declining");
          goto RETURN_RES;
      };
      my $arg  = $args{arg} or do {
          $log->tracef("[comp][periscomp] arg is not supplied, declining");
          goto RETURN_RES;
      };
      my $word = $args{word} // '';
  
      # XXX reject if meta's v is not 1.1
  
      my $args_prop = $meta->{args} // {};
      my $arg_spec = $args_prop->{$arg} or do {
          $log->tracef("[comp][periscomp] arg '$arg' is not specified in meta, declining");
          goto RETURN_RES;
      };
  
      my $static;
      eval { # completion sub can die, etc.
  
          my $comp;
        GET_COMP_ROUTINE:
          {
              $comp = $arg_spec->{completion};
              if ($comp) {
                  $log->tracef("[comp][periscomp] using arg completion routine from arg spec's 'completion' property");
                  last GET_COMP_ROUTINE;
              }
              my $xcomp = $arg_spec->{'x.completion'};
              if ($xcomp) {
                  if (ref($xcomp) eq 'CODE') {
                      $comp = $xcomp;
                  } else {
                      my ($submod, $xcargs);
                      if (ref($xcomp) eq 'ARRAY') {
                          $submod = $xcomp->[0];
                          $xcargs = $xcomp->[1];
                      } else {
                          $submod = $xcomp;
                          $xcargs = {};
                      }
                      my $mod = "Perinci::Sub::XCompletion::$submod";
                      require Module::Installed::Tiny;
                      if (Module::Installed::Tiny::module_installed($mod)) {
                          $log->tracef("[comp][periscomp] loading module %s ...", $mod);
                          my $mod_pm = $mod; $mod_pm =~ s!::!/!g; $mod_pm .= ".pm";
                          require $mod_pm;
                          my $fref = \&{"$mod\::gen_completion"};
                          $comp = $fref->(%$xcargs);
                      }
                  }
                  if ($comp) {
                      $log->tracef("[comp][periscomp] using arg completion routine from arg spec's 'x.completion' attribute");
                      last GET_COMP_ROUTINE;
                  }
              }
              my $ent = $arg_spec->{'x.schema.entity'};
              if ($ent) {
                  require Module::Installed::Tiny;
                  my $mod = "Perinci::Sub::ArgEntity::$ent";
                  if (Module::Installed::Tiny::module_installed($mod)) {
                      $log->tracef("[comp][periscomp] loading module %s ...", $mod);
                      my $mod_pm = $mod; $mod_pm =~ s!::!/!g; $mod_pm .= ".pm";
                      require $mod_pm;
                      if (defined &{"$mod\::complete_arg_val"}) {
                          $log->tracef("[comp][periscomp] using arg completion routine from complete_arg_val() from %s", $mod);
                          $comp = \&{"$mod\::complete_arg_val"};
                          last GET_COMP_ROUTINE;
                      }
                  }
              }
          } # GET_COMP_ROUTINE
  
          if ($comp) {
              if (ref($comp) eq 'CODE') {
                  $log->tracef("[comp][periscomp] invoking arg completion routine");
                  $fres = $comp->(
                      %$extras,
                      word=>$word, arg=>$arg, args=>$args{args});
                  return; # from eval
              } elsif (ref($comp) eq 'ARRAY') {
                  # this is deprecated but will be supported for some time
                  $log->tracef("[comp][periscomp] using array specified in arg completion routine: %s", $comp);
                  $fres = complete_array_elem(array=>$comp, word=>$word);
                  $static++;
                  return; # from eval
              }
  
              $log->tracef("[comp][periscomp] arg spec's 'completion' property is not a coderef or arrayref");
              if ($args{riap_client} && $args{riap_server_url}) {
                  $log->tracef("[comp][periscomp] trying to perform complete_arg_val request to Riap server");
                  my $res = $args{riap_client}->request(
                      complete_arg_val => $args{riap_server_url},
                      {(uri=>$args{riap_uri}) x !!defined($args{riap_uri}),
                       arg=>$arg, word=>$word},
                  );
                  if ($res->[0] != 200) {
                      $log->tracef("[comp][periscomp] Riap request failed (%s), declining", $res);
                      return; # from eval
                  }
                  $fres = $res->[2];
                  return; # from eval
              }
  
              $log->tracef("[comp][periscomp] declining");
              return; # from eval
          }
  
          my $sch = $arg_spec->{schema};
          unless ($sch) {
              $log->tracef("[comp][periscomp] arg spec does not specify schema, declining");
              return; # from eval
          };
  
          # XXX normalize schema if not normalized
  
          $fres = complete_from_schema(arg=>$arg, extras=>$extras, schema=>$sch, word=>$word);
      };
      $log->debug("[comp][periscomp] completion died: $@") if $@;
      unless ($fres) {
          $log->tracef("[comp][periscomp] no completion from metadata possible, declining");
          goto RETURN_RES;
      }
  
      $fres = hashify_answer($fres);
      $fres->{static} //= $static && $word eq '' ? 1:0;
    RETURN_RES:
      $log->tracef("[comp][periscomp] leaving complete_arg_val, result=%s", $fres);
      $fres;
  }
  
  gen_modified_sub(
      output_name  => 'complete_arg_elem',
      install_sub  => 0,
      base_name    => 'complete_arg_val',
      summary      => 'Given argument name and function metadata, '.
          'complete array element',
      add_args     => {
          index => {
              summary => 'Index of element to complete',
              schema  => ['str*'],
          },
      },
  );
  sub complete_arg_elem {
      require Data::Sah::Normalize;
  
      my %args = @_;
  
      my $fres;
  
      $log->tracef("[comp][periscomp] entering complete_arg_elem, arg=<%s>, index=<%d>",
                   $args{arg}, $args{index});
  
      my $extras = $args{extras} // {};
  
      my $ourextras = {arg=>$args{arg}, args=>$args{args}};
  
      my $meta = $args{meta} or do {
          $log->tracef("[comp][periscomp] meta is not supplied, declining");
          goto RETURN_RES;
      };
      my $arg  = $args{arg} or do {
          $log->tracef("[comp][periscomp] arg is not supplied, declining");
          goto RETURN_RES;
      };
      defined(my $index = $args{index}) or do {
          $log->tracef("[comp][periscomp] index is not supplied, declining");
          goto RETURN_RES;
      };
      my $word = $args{word} // '';
  
      # XXX reject if meta's v is not 1.1
  
      my $args_prop = $meta->{args} // {};
      my $arg_spec = $args_prop->{$arg} or do {
          $log->tracef("[comp][periscomp] arg '$arg' is not specified in meta, declining");
          goto RETURN_RES;
      };
  
      my $static;
      eval { # completion sub can die, etc.
  
          my $elcomp;
        GET_ELCOMP_ROUTINE:
          {
              $elcomp = $arg_spec->{element_completion};
              if ($elcomp) {
                  $log->tracef("[comp][periscomp] using arg element completion routine from 'element_completion' property");
                  last GET_ELCOMP_ROUTINE;
              }
              my $xelcomp = $arg_spec->{'x.element_completion'};
              if ($xelcomp) {
                  if (ref($xelcomp) eq 'CODE') {
                      $elcomp = $xelcomp;
                  } else {
                      my ($submod, $xcargs);
                      if (ref($xelcomp) eq 'ARRAY') {
                          $submod = $xelcomp->[0];
                          $xcargs = $xelcomp->[1];
                      } else {
                          $submod = $xelcomp;
                          $xcargs = {};
                      }
                      my $mod = "Perinci::Sub::XCompletion::$submod";
                      require Module::Installed::Tiny;
                      if (Module::Installed::Tiny::module_installed($mod)) {
                          $log->tracef("[comp][periscomp] loading module %s ...", $mod);
                          my $mod_pm = $mod; $mod_pm =~ s!::!/!g; $mod_pm .= ".pm";
                          require $mod_pm;
                          my $fref = \&{"$mod\::gen_completion"};
                          $elcomp = $fref->(%$xcargs);
                      }
                  }
                  if ($elcomp) {
                      $log->tracef("[comp][periscomp] using arg element completion routine from 'x.element_completion' attribute");
                      last GET_ELCOMP_ROUTINE;
                  }
              }
              my $ent = $arg_spec->{'x.schema.element_entity'};
              if ($ent) {
                  require Module::Installed::Tiny;
                  my $mod = "Perinci::Sub::ArgEntity::$ent";
                  if (Module::Installed::Tiny::module_installed($mod)) {
                      $log->tracef("[comp][periscomp] loading module %s ...", $mod);
                      my $mod_pm = $mod; $mod_pm =~ s!::!/!g; $mod_pm .= ".pm";
                      require $mod_pm;
                      if (defined &{"$mod\::complete_arg_val"}) {
                          $log->tracef("[comp][periscomp] using arg element completion routine from complete_arg_val() from %s", $mod);
                          $elcomp = \&{"$mod\::complete_arg_val"};
                          last GET_ELCOMP_ROUTINE;
                      }
                  }
              }
          } # GET_ELCOMP_ROUTINE
  
          $ourextras->{index} = $index;
          if ($elcomp) {
              if (ref($elcomp) eq 'CODE') {
                  $log->tracef("[comp][periscomp] invoking arg element completion routine");
                  $fres = $elcomp->(
                      %$extras,
                      %$ourextras,
                      word=>$word);
                  return; # from eval
              } elsif (ref($elcomp) eq 'ARRAY') {
                  $log->tracef("[comp][periscomp] using array specified in arg element completion routine: %s", $elcomp);
                  $fres = complete_array_elem(array=>$elcomp, word=>$word);
                  $static = $word eq '';
              }
  
              $log->tracef("[comp][periscomp] arg spec's 'element_completion' property is not a coderef or ".
                               "arrayref");
              if ($args{riap_client} && $args{riap_server_url}) {
                  $log->tracef("[comp][periscomp] trying to perform complete_arg_elem request to Riap server");
                  my $res = $args{riap_client}->request(
                      complete_arg_elem => $args{riap_server_url},
                      {(uri=>$args{riap_uri}) x !!defined($args{riap_uri}),
                       arg=>$arg, args=>$args{args}, word=>$word,
                       index=>$index},
                  );
                  if ($res->[0] != 200) {
                      $log->tracef("[comp][periscomp] Riap request failed (%s), declining", $res);
                      return; # from eval
                  }
                  $fres = $res->[2];
                  return; # from eval
              }
  
              $log->tracef("[comp][periscomp] declining");
              return; # from eval
          } # if ($elcomp)
  
          my $sch = $arg_spec->{schema};
          unless ($sch) {
              $log->tracef("[comp][periscomp] arg spec does not specify schema, declining");
              return; # from eval
          };
  
          my $nsch = Data::Sah::Normalize::normalize_schema($sch);
  
          my ($type, $cs) = @$nsch;
          if ($type ne 'array') {
              $log->tracef("[comp][periscomp] can't complete element for non-array");
              return; # from eval
          }
  
          unless ($cs->{of}) {
              $log->tracef("[comp][periscomp] schema does not specify 'of' clause, declining");
              return; # from eval
          }
  
          # normalize subschema because normalize_schema (as of 0.01) currently
          # does not do it yet
          my $elsch = Data::Sah::Normalize::normalize_schema($cs->{of});
  
          $fres = complete_from_schema(schema=>$elsch, word=>$word);
      };
      $log->debug("[comp][periscomp] completion died: $@") if $@;
      unless ($fres) {
          $log->tracef("[comp][periscomp] no completion from metadata possible, declining");
          goto RETURN_RES;
      }
  
      $fres = hashify_answer($fres);
      $fres->{static} //= $static && $word eq '' ? 1:0;
    RETURN_RES:
      $log->tracef("[comp][periscomp] leaving complete_arg_elem, result=%s", $fres);
      $fres;
  }
  
  $SPEC{complete_arg_index} = {
      v => 1.1,
      summary => 'Given argument name and function metadata, complete arg element index',
      description => <<'_',
  
  This is only relevant for arguments which have `index_completion` property set
  (currently only `hash` type arguments). When that property is not set, will
  simply return undef.
  
  Completion routine will get `%args`, with the following keys:
  
  * `word` (str, the word to be completed)
  * `arg` (str, the argument name which value is currently being completed)
  * `args` (hash, the argument hash to the function, so far)
  
  as well as extra keys from `extras` (but these won't overwrite the above
  standard keys).
  
  Completion routine should return a completion answer structure (described in
  <pm:Complete>) which is either a hash or an array. The simplest form of answer
  is just to return an array of strings. Completion routine can also return undef
  to express declination.
  
  _
      args => {
          meta => {
              summary => 'Rinci function metadata, must be normalized',
              schema => 'hash*',
              req => 1,
          },
          arg => {
              summary => 'Argument name',
              schema => 'str*',
              req => 1,
          },
          word => {
              summary => 'Word to be completed',
              schema => ['str*', default => ''],
          },
          args => {
              summary => 'Collected arguments so far, '.
                  'will be passed to completion routines',
              schema  => 'hash',
          },
          extras => {
              summary => 'Add extra arguments to completion routine',
              schema  => 'hash',
              description => <<'_',
  
  The keys from this `extras` hash will be merged into the final `%args` passed to
  completion routines. Note that standard keys like `word`, `cword`, and so on as
  described in the function description will not be overwritten by this.
  
  _
          },
  
          %common_args_riap,
      },
      result_naked => 1,
      result => {
          schema => 'array', # XXX of => str*
      },
  };
  sub complete_arg_index {
      require Data::Sah::Normalize;
  
      my %args = @_;
  
      my $fres;
  
      $log->tracef("[comp][periscomp] entering complete_arg_index, arg=<%s>",
                   $args{arg});
  
      my $extras = $args{extras} // {};
  
      my $ourextras = {arg=>$args{arg}, args=>$args{args}};
  
      my $meta = $args{meta} or do {
          $log->tracef("[comp][periscomp] meta is not supplied, declining");
          goto RETURN_RES;
      };
      my $arg  = $args{arg} or do {
          $log->tracef("[comp][periscomp] arg is not supplied, declining");
          goto RETURN_RES;
      };
      my $word = $args{word} // '';
  
      # XXX reject if meta's v is not 1.1
  
      my $args_prop = $meta->{args} // {};
      my $arg_spec = $args_prop->{$arg} or do {
          $log->tracef("[comp][periscomp] arg '$arg' is not specified in meta, declining");
          goto RETURN_RES;
      };
  
      my $static;
      eval { # completion sub can die, etc.
  
          my $idxcomp;
        GET_IDXCOMP_ROUTINE:
          {
              $idxcomp = $arg_spec->{index_completion};
              if ($idxcomp) {
                  $log->tracef("[comp][periscomp] using arg element index completion routine from 'index_completion' property");
                  last GET_IDXCOMP_ROUTINE;
              }
          } # GET_IDXCOMP_ROUTINE
  
          if ($idxcomp) {
              if (ref($idxcomp) eq 'CODE') {
                  $log->tracef("[comp][periscomp] invoking arg element index completion routine");
                  $fres = $idxcomp->(
                      %$extras,
                      %$ourextras,
                      word=>$word);
                  return; # from eval
              } elsif (ref($idxcomp) eq 'ARRAY') {
                  $log->tracef("[comp][periscomp] using array specified in arg element index completion routine: %s", $idxcomp);
                  $fres = complete_array_elem(array=>$idxcomp, word=>$word);
                  $static = $word eq '';
              }
  
              $log->tracef("[comp][periscomp] arg spec's 'index_completion' property is not a coderef or ".
                               "arrayref");
              if ($args{riap_client} && $args{riap_server_url}) {
                  $log->tracef("[comp][periscomp] trying to perform complete_arg_index request to Riap server");
                  my $res = $args{riap_client}->request(
                      complete_arg_index => $args{riap_server_url},
                      {(uri=>$args{riap_uri}) x !!defined($args{riap_uri}),
                       arg=>$arg, args=>$args{args}, word=>$word},
                  );
                  if ($res->[0] != 200) {
                      $log->tracef("[comp][periscomp] Riap request failed (%s), declining", $res);
                      return; # from eval
                  }
                  $fres = $res->[2];
                  return; # from eval
              }
  
              $log->tracef("[comp][periscomp] declining");
              return; # from eval
          } # if ($idxcomp)
  
          my $sch = $arg_spec->{schema};
          unless ($sch) {
              $log->tracef("[comp][periscomp] arg spec does not specify schema, declining");
              return; # from eval
          };
  
          my $nsch = Data::Sah::Normalize::normalize_schema($sch);
  
          my ($type, $cs) = @$nsch;
          if ($type ne 'hash') {
              $log->tracef("[comp][periscomp] can't complete element index for non-hash");
              return; # from eval
          }
  
          # collect known keys from some clauses
          my %keys;
          if ($cs->{keys}) {
              $keys{$_}++ for keys %{ $cs->{keys} };
          }
          if ($cs->{indices}) {
              $keys{$_}++ for keys %{ $cs->{indices} };
          }
          if ($cs->{req_keys}) {
              $keys{$_}++ for @{ $cs->{req_keys} };
          }
          if ($cs->{allowed_keys}) {
              $keys{$_}++ for @{ $cs->{allowed_keys} };
          }
  
          # exclude keys that have been specified in collected args
          for (keys %{$args{args}{$arg} // {}}) {
              delete $keys{$_};
          }
  
          $fres = complete_hash_key(word => $word, hash => \%keys);
  
      }; # eval
      $log->debug("[comp][periscomp] completion died: $@") if $@;
      unless ($fres) {
          $log->tracef("[comp][periscomp] no index completion from metadata possible, declining");
          goto RETURN_RES;
      }
  
      $fres = hashify_answer($fres);
      $fres->{static} //= $static && $word eq '' ? 1:0;
    RETURN_RES:
      $log->tracef("[comp][periscomp] leaving complete_arg_index, result=%s", $fres);
      $fres;
  }
  
  $SPEC{complete_cli_arg} = {
      v => 1.1,
      summary => 'Complete command-line argument using Rinci function metadata',
      description => <<'_',
  
  This routine uses <pm:Perinci::Sub::GetArgs::Argv> to generate <pm:Getopt::Long>
  specification from arguments list in Rinci function metadata and common options.
  Then, it will use <pm:Complete::Getopt::Long> to complete option names, option
  values, as well as arguments.
  
  _
      args => {
          meta => {
              summary => 'Rinci function metadata',
              schema => 'hash*',
              req => 1,
          },
          words => {
              summary => 'Command-line arguments',
              schema => ['array*' => {of=>'str*'}],
              req => 1,
          },
          cword => {
              summary => 'On which argument cursor is located (zero-based)',
              schema => 'int*',
              req => 1,
          },
          completion => {
              summary => 'Supply custom completion routine',
              description => <<'_',
  
  If supplied, instead of the default completion routine, this code will be called
  instead. Will receive all arguments that <pm:Complete::Getopt::Long> will pass,
  and additionally:
  
  * `arg` (str, the name of function argument)
  * `args` (hash, the function arguments formed so far)
  * `index` (int, if completing argument element value)
  
  _
              schema => 'code*',
          },
          per_arg_json => {
              summary => 'Will be passed to Perinci::Sub::GetArgs::Argv',
              schema  => 'bool',
          },
          per_arg_yaml => {
              summary => 'Will be passed to Perinci::Sub::GetArgs::Argv',
              schema  => 'bool',
          },
          common_opts => {
              summary => 'Common options',
              description => <<'_',
  
  A hash where the values are hashes containing these keys: `getopt` (Getopt::Long
  option specification), `handler` (Getopt::Long handler). Will be passed to
  `get_args_from_argv()`. Example:
  
      {
          help => {
              getopt  => 'help|h|?',
              handler => sub { ... },
              summary => 'Display help and exit',
          },
          version => {
              getopt  => 'version|v',
              handler => sub { ... },
              summary => 'Display version and exit',
          },
      }
  
  _
              schema => ['hash*'],
          },
          extras => {
              summary => 'Add extra arguments to completion routine',
              schema  => 'hash',
              description => <<'_',
  
  The keys from this `extras` hash will be merged into the final `%args` passed to
  completion routines. Note that standard keys like `word`, `cword`, and so on as
  described in the function description will not be overwritten by this.
  
  _
          },
          func_arg_starts_at => {
              schema  => 'int*',
              default => 0,
              description => <<'_',
  
  This is a (temporary?) workaround for <pm:Perinci::CmdLine>. In an application
  with subcommands (e.g. `cmd --verbose subcmd arg0 arg1 ...`), then `words` will
  still contain the subcommand name. Positional function arguments then start at 1
  not 0. This option allows offsetting function arguments.
  
  _
          },
          %common_args_riap,
      },
      result_naked => 1,
      result => {
          schema => 'hash*',
          description => <<'_',
  
  You can use `format_completion` function in <pm:Complete::Bash> module to format
  the result of this function for bash.
  
  _
      },
  };
  sub complete_cli_arg {
      require Complete::Getopt::Long;
      require Perinci::Sub::GetArgs::Argv;
  
      my %args   = @_;
      my $meta   = $args{meta} or die "Please specify meta";
      my $words  = $args{words} or die "Please specify words";
      my $cword  = $args{cword}; defined($cword) or die "Please specify cword";
      my $copts  = $args{common_opts} // {};
      my $comp   = $args{completion};
      my $extras = {
          %{ $args{extras} // {} },
          words => $args{words},
          cword => $args{cword},
      };
  
      my $fname = __PACKAGE__ . "::complete_cli_arg"; # XXX use __SUB__
      my $fres;
  
      my $word   = $words->[$cword];
      my $args_prop = $meta->{args} // {};
  
      $log->tracef('[comp][periscomp] entering %s(), words=%s, cword=%d, word=<%s>',
                   $fname, $words, $cword, $word);
  
      my $genres = Perinci::Sub::GetArgs::Argv::gen_getopt_long_spec_from_meta(
          meta         => $meta,
          common_opts  => $copts,
          per_arg_json => $args{per_arg_json},
          per_arg_yaml => $args{per_arg_yaml},
          ignore_converted_code => 1,
      );
      die "Can't generate getopt spec from meta: $genres->[0] - $genres->[1]"
          unless $genres->[0] == 200;
      my $gospec = $genres->[2];
      my $specmeta = $genres->[3]{'func.specmeta'};
  
      my $gares = Perinci::Sub::GetArgs::Argv::get_args_from_argv(
          argv   => [@$words],
          meta   => $meta,
          strict => 0,
      );
  
      my $copts_by_ospec = {};
      for (keys %$copts) { $copts_by_ospec->{$copts->{$_}{getopt}}=$copts->{$_} }
  
      my $compgl_comp = sub {
          $log->tracef("[comp][periscomp] entering completion routine (that we supply to Complete::Getopt::Long)");
          my %cargs = @_;
          my $type  = $cargs{type};
          my $ospec = $cargs{ospec} // '';
          my $word  = $cargs{word};
  
          my $fres;
  
          my %rargs = (
              riap_server_url => $args{riap_server_url},
              riap_uri        => $args{riap_uri},
              riap_client     => $args{riap_client},
          );
  
          $extras->{parsed_opts} = $cargs{parsed_opts};
  
          if (my $sm = $specmeta->{$ospec}) {
              $cargs{type} = 'optval';
              if ($sm->{arg}) {
                  $log->tracef("[comp][periscomp] completing option value for a known function argument, arg=<%s>, ospec=<%s>", $sm->{arg}, $ospec);
                  $cargs{arg} = $sm->{arg};
                  my $arg_spec = $args_prop->{$sm->{arg}} or goto RETURN_RES;
                  if ($comp) {
                      $log->tracef("[comp][periscomp] invoking routine supplied from 'completion' argument");
                      my $compres;
                      eval { $compres = $comp->(%cargs) };
                      $log->debug("[comp][periscomp] completion died: $@") if $@;
                      $log->tracef("[comp][periscomp] result from 'completion' routine: %s", $compres);
                      if ($compres) {
                          $fres = $compres;
                          goto RETURN_RES;
                      }
                  }
                  if ($ospec =~ /\@$/) {
                      $fres = complete_arg_elem(
                          meta=>$meta, arg=>$sm->{arg}, args=>$gares->[2],
                          word=>$word, index=>$cargs{nth}, # XXX correct index
                          extras=>$extras, %rargs);
                      goto RETURN_RES;
                  } elsif ($ospec =~ /\%$/) {
                      if ($word =~ /(.*?)=(.*)/s) {
                          my $key = $1;
                          my $val = $2;
                          $fres = complete_arg_elem(
                              meta=>$meta, arg=>$sm->{arg}, args=>$gares->[2],
                              word=>$val, index=>$key,
                              extras=>$extras, %rargs);
                          modify_answer(answer=>$fres, prefix=>"$key=");
                          goto RETURN_RES;
                      } else {
                          $fres = complete_arg_index(
                              meta=>$meta, arg=>$sm->{arg}, args=>$gares->[2],
                              word=>$word, extras=>$extras, %rargs);
                          modify_answer(answer=>$fres, suffix=>"=");
                          $fres->{path_sep} = "=";
                          # XXX actually not entirely correct, we want normal
                          # escaping but without escaping "=", maybe we should
                          # allow customizing, e.g. esc_mode=normal, dont_esc="="
                          # (list of characters to not escape)
                          $fres->{esc_mode} = "none";
                          goto RETURN_RES;
                      }
                  } else {
                      $fres = complete_arg_val(
                          meta=>$meta, arg=>$sm->{arg}, args=>$gares->[2],
                          word=>$word, extras=>$extras, %rargs);
                      goto RETURN_RES;
                  }
              } else {
                  $log->tracef("[comp][periscomp] completing option value for a common option, ospec=<%s>", $ospec);
                  $cargs{arg}  = undef;
                  my $codata = $copts_by_ospec->{$ospec};
                  if ($comp) {
                      $log->tracef("[comp][periscomp] invoking routine supplied from 'completion' argument");
                      my $res;
                      eval { $res = $comp->(%cargs) };
                      $log->debug("[comp][periscomp] completion died: $@") if $@;
                      if ($res) {
                          $fres = $res;
                          goto RETURN_RES;
                      }
                  }
                  if ($codata->{completion}) {
                      $cargs{arg}  = undef;
                      $log->tracef("[comp][periscomp] completing with common option's 'completion' property");
                      my $res;
                      eval { $res = $codata->{completion}->(%cargs) };
                      $log->debug("[comp][periscomp] completion died: $@") if $@;
                      if ($res) {
                          $fres = $res;
                          goto RETURN_RES;
                      }
                  }
                  if ($codata->{schema}) {
                      require Data::Sah::Normalize;
                      my $nsch = Data::Sah::Normalize::normalize_schema(
                          $codata->{schema});
                      $log->tracef("[comp][periscomp] completing with common option's schema");
                      $fres = complete_from_schema(
                          schema => $nsch, word=>$word);
                      goto RETURN_RES;
                  }
                  goto RETURN_RES;
              }
          } elsif ($type eq 'arg') {
              $log->tracef("[comp][periscomp] completing argument #%d", $cargs{argpos});
              $cargs{type} = 'arg';
  
              my $pos = $cargs{argpos};
              my $fasa = $args{func_arg_starts_at} // 0;
  
              # find if there is a non-greedy argument with the exact position
              for my $an (keys %$args_prop) {
                  my $arg_spec = $args_prop->{$an};
                  next unless !$arg_spec->{greedy} &&
                      defined($arg_spec->{pos}) && $arg_spec->{pos} == $pos - $fasa;
                  $log->tracef("[comp][periscomp] this argument position is for non-greedy function argument <%s>", $an);
                  $cargs{arg} = $an;
                  if ($comp) {
                      $log->tracef("[comp][periscomp] invoking routine supplied from 'completion' argument");
                      my $res;
                      eval { $res = $comp->(%cargs) };
                      $log->debug("[comp][periscomp] completion died: $@") if $@;
                      if ($res) {
                          $fres = $res;
                          goto RETURN_RES;
                      }
                  }
                  $fres = complete_arg_val(
                      meta=>$meta, arg=>$an, args=>$gares->[2],
                      word=>$word, extras=>$extras, %rargs);
                  goto RETURN_RES;
              }
  
              # find if there is a greedy argument which takes elements at that
              # position
              for my $an (sort {
                  ($args_prop->{$b}{pos} // 9999) <=> ($args_prop->{$a}{pos} // 9999)
              } keys %$args_prop) {
                  my $arg_spec = $args_prop->{$an};
                  next unless $arg_spec->{greedy} &&
                      defined($arg_spec->{pos}) && $arg_spec->{pos} <= $pos - $fasa;
                  my $index = $pos - $fasa - $arg_spec->{pos};
                  $cargs{arg} = $an;
                  $cargs{index} = $index;
                  $log->tracef("[comp][periscomp] this position is for greedy function argument <%s>'s element[%d]", $an, $index);
                  if ($comp) {
                      $log->tracef("[comp][periscomp] invoking routine supplied from 'completion' argument");
                      my $res;
                      eval { $res = $comp->(%cargs) };
                      $log->debug("[comp][periscomp] completion died: $@") if $@;
                      if ($res) {
                          $fres = $res;
                          goto RETURN_RES;
                      }
                  }
                  $fres = complete_arg_elem(
                      meta=>$meta, arg=>$an, args=>$gares->[2],
                      word=>$word, index=>$index, extras=>$extras, %rargs);
                  goto RETURN_RES;
              }
  
              $log->tracef("[comp][periscomp] there is no matching function argument at this position");
              if ($comp) {
                  $log->tracef("[comp][periscomp] invoking routine supplied from 'completion' argument");
                  my $res;
                  eval { $res = $comp->(%cargs) };
                  $log->debug("[comp][periscomp] completion died: $@") if $@;
                  if ($res) {
                      $fres = $res;
                      goto RETURN_RES;
                  }
              }
              goto RETURN_RES;
          } else {
              $log->tracef("[comp][periscomp] completing option value for an unknown/ambiguous option, declining ...");
              # decline because there's nothing in Rinci metadata that can aid us
              goto RETURN_RES;
          }
        RETURN_RES:
          $log->tracef("[comp][periscomp] leaving completion routine (that we supply to Complete::Getopt::Long)");
          $fres;
      }; # completion routine
  
      $fres = Complete::Getopt::Long::complete_cli_arg(
          getopt_spec => $gospec,
          words       => $words,
          cword       => $cword,
          completion  => $compgl_comp,
          extras      => $extras,
      );
  
    RETURN_RES:
      $log->tracef('[comp][periscomp] leaving %s(), result=%s',
                   $fname, $fres);
      $fres;
  }
  
  1;
  # ABSTRACT: Complete command-line argument using Rinci metadata
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Sub::Complete - Complete command-line argument using Rinci metadata
  
  =head1 VERSION
  
  This document describes version 0.91 of Perinci::Sub::Complete (from Perl distribution Perinci-Sub-Complete), released on 2017-01-15.
  
  =head1 SYNOPSIS
  
  See L<Perinci::CmdLine> or L<Perinci::CmdLine::Lite> or L<App::riap> which use
  this module.
  
  =head1 DESCRIPTION
  
  =head1 FUNCTIONS
  
  
  =head2 complete_arg_elem(%args) -> array
  
  Given argument name and function metadata, complete array element.
  
  Will attempt to complete using the completion routine specified in the argument
  specification (the C<completion> property, or in the case of C<complete_arg_elem>
  function, the C<element_completion> property), or if that is not specified, from
  argument's schema using C<complete_from_schema>.
  
  Completion routine will get C<%args>, with the following keys:
  
  =over
  
  =item * C<word> (str, the word to be completed)
  
  =item * C<arg> (str, the argument name which value is currently being completed)
  
  =item * C<index (int, only for the>complete_arg_elem` function, the index in the
  argument array that is currently being completed, starts from 0)
  
  =item * C<args> (hash, the argument hash to the function, so far)
  
  =back
  
  as well as extra keys from C<extras> (but these won't overwrite the above
  standard keys).
  
  Completion routine should return a completion answer structure (described in
  L<Complete>) which is either a hash or an array. The simplest form of answer
  is just to return an array of strings. Completion routine can also return undef
  to express declination.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<arg>* => I<str>
  
  Argument name.
  
  =item * B<args> => I<hash>
  
  Collected arguments so far, will be passed to completion routines.
  
  =item * B<extras> => I<hash>
  
  Add extra arguments to completion routine.
  
  The keys from this C<extras> hash will be merged into the final C<%args> passed to
  completion routines. Note that standard keys like C<word>, C<cword>, and so on as
  described in the function description will not be overwritten by this.
  
  =item * B<index> => I<str>
  
  Index of element to complete.
  
  =item * B<meta>* => I<hash>
  
  Rinci function metadata, must be normalized.
  
  =item * B<riap_client> => I<obj>
  
  Optional, to perform complete_arg_val to the server.
  
  When the argument spec in the Rinci metadata contains C<completion> key, this
  means there is custom completion code for that argument. However, if retrieved
  from a remote server, sometimes the C<completion> key no longer contains the code
  (it has been cleansed into a string). Moreover, the completion code needs to run
  on the server.
  
  If supplied this argument and te C<riap_server_url> argument, the function will
  try to request to the server (via Riap request C<complete_arg_val>). Otherwise,
  the function will just give up/decline completing.
  
  =item * B<riap_server_url> => I<str>
  
  Optional, to perform complete_arg_val to the server.
  
  See the C<riap_client> argument.
  
  =item * B<riap_uri> => I<str>
  
  Optional, to perform complete_arg_val to the server.
  
  See the C<riap_client> argument.
  
  =item * B<word> => I<str> (default: "")
  
  Word to be completed.
  
  =back
  
  Return value:  (array)
  
  
  =head2 complete_arg_index(%args) -> array
  
  Given argument name and function metadata, complete arg element index.
  
  This is only relevant for arguments which have C<index_completion> property set
  (currently only C<hash> type arguments). When that property is not set, will
  simply return undef.
  
  Completion routine will get C<%args>, with the following keys:
  
  =over
  
  =item * C<word> (str, the word to be completed)
  
  =item * C<arg> (str, the argument name which value is currently being completed)
  
  =item * C<args> (hash, the argument hash to the function, so far)
  
  =back
  
  as well as extra keys from C<extras> (but these won't overwrite the above
  standard keys).
  
  Completion routine should return a completion answer structure (described in
  L<Complete>) which is either a hash or an array. The simplest form of answer
  is just to return an array of strings. Completion routine can also return undef
  to express declination.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<arg>* => I<str>
  
  Argument name.
  
  =item * B<args> => I<hash>
  
  Collected arguments so far, will be passed to completion routines.
  
  =item * B<extras> => I<hash>
  
  Add extra arguments to completion routine.
  
  The keys from this C<extras> hash will be merged into the final C<%args> passed to
  completion routines. Note that standard keys like C<word>, C<cword>, and so on as
  described in the function description will not be overwritten by this.
  
  =item * B<meta>* => I<hash>
  
  Rinci function metadata, must be normalized.
  
  =item * B<riap_client> => I<obj>
  
  Optional, to perform complete_arg_val to the server.
  
  When the argument spec in the Rinci metadata contains C<completion> key, this
  means there is custom completion code for that argument. However, if retrieved
  from a remote server, sometimes the C<completion> key no longer contains the code
  (it has been cleansed into a string). Moreover, the completion code needs to run
  on the server.
  
  If supplied this argument and te C<riap_server_url> argument, the function will
  try to request to the server (via Riap request C<complete_arg_val>). Otherwise,
  the function will just give up/decline completing.
  
  =item * B<riap_server_url> => I<str>
  
  Optional, to perform complete_arg_val to the server.
  
  See the C<riap_client> argument.
  
  =item * B<riap_uri> => I<str>
  
  Optional, to perform complete_arg_val to the server.
  
  See the C<riap_client> argument.
  
  =item * B<word> => I<str> (default: "")
  
  Word to be completed.
  
  =back
  
  Return value:  (array)
  
  
  =head2 complete_arg_val(%args) -> array
  
  Given argument name and function metadata, complete value.
  
  Will attempt to complete using the completion routine specified in the argument
  specification (the C<completion> property, or in the case of C<complete_arg_elem>
  function, the C<element_completion> property), or if that is not specified, from
  argument's schema using C<complete_from_schema>.
  
  Completion routine will get C<%args>, with the following keys:
  
  =over
  
  =item * C<word> (str, the word to be completed)
  
  =item * C<arg> (str, the argument name which value is currently being completed)
  
  =item * C<index (int, only for the>complete_arg_elem` function, the index in the
  argument array that is currently being completed, starts from 0)
  
  =item * C<args> (hash, the argument hash to the function, so far)
  
  =back
  
  as well as extra keys from C<extras> (but these won't overwrite the above
  standard keys).
  
  Completion routine should return a completion answer structure (described in
  L<Complete>) which is either a hash or an array. The simplest form of answer
  is just to return an array of strings. Completion routine can also return undef
  to express declination.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<arg>* => I<str>
  
  Argument name.
  
  =item * B<args> => I<hash>
  
  Collected arguments so far, will be passed to completion routines.
  
  =item * B<extras> => I<hash>
  
  Add extra arguments to completion routine.
  
  The keys from this C<extras> hash will be merged into the final C<%args> passed to
  completion routines. Note that standard keys like C<word>, C<cword>, and so on as
  described in the function description will not be overwritten by this.
  
  =item * B<meta>* => I<hash>
  
  Rinci function metadata, must be normalized.
  
  =item * B<riap_client> => I<obj>
  
  Optional, to perform complete_arg_val to the server.
  
  When the argument spec in the Rinci metadata contains C<completion> key, this
  means there is custom completion code for that argument. However, if retrieved
  from a remote server, sometimes the C<completion> key no longer contains the code
  (it has been cleansed into a string). Moreover, the completion code needs to run
  on the server.
  
  If supplied this argument and te C<riap_server_url> argument, the function will
  try to request to the server (via Riap request C<complete_arg_val>). Otherwise,
  the function will just give up/decline completing.
  
  =item * B<riap_server_url> => I<str>
  
  Optional, to perform complete_arg_val to the server.
  
  See the C<riap_client> argument.
  
  =item * B<riap_uri> => I<str>
  
  Optional, to perform complete_arg_val to the server.
  
  See the C<riap_client> argument.
  
  =item * B<word> => I<str> (default: "")
  
  Word to be completed.
  
  =back
  
  Return value:  (array)
  
  
  =head2 complete_cli_arg(%args) -> hash
  
  Complete command-line argument using Rinci function metadata.
  
  This routine uses L<Perinci::Sub::GetArgs::Argv> to generate L<Getopt::Long>
  specification from arguments list in Rinci function metadata and common options.
  Then, it will use L<Complete::Getopt::Long> to complete option names, option
  values, as well as arguments.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<common_opts> => I<hash>
  
  Common options.
  
  A hash where the values are hashes containing these keys: C<getopt> (Getopt::Long
  option specification), C<handler> (Getopt::Long handler). Will be passed to
  C<get_args_from_argv()>. Example:
  
   {
       help => {
           getopt  => 'help|h|?',
           handler => sub { ... },
           summary => 'Display help and exit',
       },
       version => {
           getopt  => 'version|v',
           handler => sub { ... },
           summary => 'Display version and exit',
       },
   }
  
  =item * B<completion> => I<code>
  
  Supply custom completion routine.
  
  If supplied, instead of the default completion routine, this code will be called
  instead. Will receive all arguments that L<Complete::Getopt::Long> will pass,
  and additionally:
  
  =over
  
  =item * C<arg> (str, the name of function argument)
  
  =item * C<args> (hash, the function arguments formed so far)
  
  =item * C<index> (int, if completing argument element value)
  
  =back
  
  =item * B<cword>* => I<int>
  
  On which argument cursor is located (zero-based).
  
  =item * B<extras> => I<hash>
  
  Add extra arguments to completion routine.
  
  The keys from this C<extras> hash will be merged into the final C<%args> passed to
  completion routines. Note that standard keys like C<word>, C<cword>, and so on as
  described in the function description will not be overwritten by this.
  
  =item * B<func_arg_starts_at> => I<int> (default: 0)
  
  This is a (temporary?) workaround for L<Perinci::CmdLine>. In an application
  with subcommands (e.g. C<cmd --verbose subcmd arg0 arg1 ...>), then C<words> will
  still contain the subcommand name. Positional function arguments then start at 1
  not 0. This option allows offsetting function arguments.
  
  =item * B<meta>* => I<hash>
  
  Rinci function metadata.
  
  =item * B<per_arg_json> => I<bool>
  
  Will be passed to Perinci::Sub::GetArgs::Argv.
  
  =item * B<per_arg_yaml> => I<bool>
  
  Will be passed to Perinci::Sub::GetArgs::Argv.
  
  =item * B<riap_client> => I<obj>
  
  Optional, to perform complete_arg_val to the server.
  
  When the argument spec in the Rinci metadata contains C<completion> key, this
  means there is custom completion code for that argument. However, if retrieved
  from a remote server, sometimes the C<completion> key no longer contains the code
  (it has been cleansed into a string). Moreover, the completion code needs to run
  on the server.
  
  If supplied this argument and te C<riap_server_url> argument, the function will
  try to request to the server (via Riap request C<complete_arg_val>). Otherwise,
  the function will just give up/decline completing.
  
  =item * B<riap_server_url> => I<str>
  
  Optional, to perform complete_arg_val to the server.
  
  See the C<riap_client> argument.
  
  =item * B<riap_uri> => I<str>
  
  Optional, to perform complete_arg_val to the server.
  
  See the C<riap_client> argument.
  
  =item * B<words>* => I<array[str]>
  
  Command-line arguments.
  
  =back
  
  Return value:  (hash)
  
  
  You can use C<format_completion> function in L<Complete::Bash> module to format
  the result of this function for bash.
  
  
  =head2 complete_from_schema(%args) -> [status, msg, result, meta]
  
  Complete a value from schema.
  
  Employ some heuristics to complete a value from Sah schema. For example, if
  schema is C<< [str =E<gt> in =E<gt> [qw/new open resolved rejected/]] >>, then we can
  complete from the C<in> clause. Or for something like C<< [int =E<gt> between =E<gt> [1,
  20]] >> we can complete using values from 1 to 20.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<schema>* => I<any>
  
  Must be normalized.
  
  =item * B<word>* => I<str> (default: "")
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (any)
  
  =for Pod::Coverage ^(.+)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Sub-Complete>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Perinci-Sub-Complete>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Sub-Complete>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Complete>, L<Complete::Getopt::Long>
  
  L<Perinci::CmdLine>, L<Perinci::CmdLine::Lite>, L<App::riap>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_SUB_COMPLETE

    $main::fatpacked{"Perinci/Sub/ConvertArgs/Argv.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_SUB_CONVERTARGS_ARGV';
  package Perinci::Sub::ConvertArgs::Argv;
  
  our $DATE = '2016-12-12'; # DATE
  our $VERSION = '0.10'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Data::Sah::Util::Type qw(is_simple);
  
  use Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(convert_args_to_argv);
  
  our %SPEC;
  
  sub _json {
      require JSON;
      state $json = JSON->new->allow_nonref;
      $json->encode($_[0]);
  }
  
  sub _encode {
      ref($_[0]) ? _json($_[0]) : $_[0];
  }
  
  $SPEC{convert_args_to_argv} = {
      v => 1.1,
      summary => 'Convert hash arguments to command-line options (and arguments)',
      description => <<'_',
  
  Convert hash arguments to command-line arguments. This is the reverse of
  `Perinci::Sub::GetArgs::Argv::get_args_from_argv`.
  
  Note: currently the function expects schemas in metadata to be normalized
  already.
  
  _
      args => {
          args => {req=>1, schema=>'hash*', pos=>0},
          meta => {req=>0, schema=>'hash*', pos=>1},
          use_pos => {
              summary => 'Whether to use positional arguments',
              schema  => 'bool',
              description => <<'_',
  
  For example, given this metadata:
  
      {
          v => 1.1,
          args => {
            arg1 => {pos=>0, req=>1},
            arg2 => {pos=>1},
            arg3 => {},
          },
      }
  
  then under `use_pos=0` the hash `{arg1=>1, arg2=>2, arg3=>'a b'}` will be
  converted to `['--arg1', 1, '--arg2', 2, '--arg3', 'a b']`. Meanwhile if
  `use_pos=1` the same hash will be converted to `[1, 2, '--arg3', 'a b']`.
  
  _
          },
      },
  };
  sub convert_args_to_argv {
      my %fargs = @_;
  
      my $iargs = $fargs{args} or return [400, "Please specify args"];
      my $meta  = $fargs{meta} // {v=>1.1};
      my $args_prop = $meta->{args} // {};
  
      my $v = $meta->{v} // 1.0;
      return [412, "Sorry, only metadata version 1.1 is supported (yours: $v)"]
          unless $v == 1.1;
  
      my @argv;
      my %iargs = %$iargs; # copy 'coz we will delete them one by one as we fill
  
      if ($fargs{use_pos}) {
          for my $arg (sort {$args_prop->{$a}{pos} <=> $args_prop->{$b}{pos}}
                           grep {defined $args_prop->{$_}{pos}} keys %iargs) {
              my $pos = $args_prop->{$arg}{pos};
              if ($args_prop->{$arg}{greedy}) {
                  my $sch = $args_prop->{$arg}{schema};
                  my $is_array_of_simple = $sch && $sch->[0] eq 'array' &&
                      is_simple($sch->[1]{of} // $sch->[1]{each_elem});
                  for my $el (@{ $iargs{$arg} }) {
                      $argv[$pos] = $is_array_of_simple ? $el : _encode($el);
                      $pos++;
                  }
              } else {
                  $argv[$pos] = _encode($iargs{$arg});
              }
              delete $iargs{$arg};
          }
      }
  
      for (sort keys %iargs) {
          my $sch = $args_prop->{$_}{schema};
          my $is_bool = $sch && $sch->[0] eq 'bool';
          my $is_array_of_simple = $sch && $sch->[0] eq 'array' &&
              $sch->[1]{of} && is_simple($sch->[1]{of});
          my $is_hash_of_simple = $sch && $sch->[0] eq 'hash' &&
              is_simple($sch->[1]{of} // $sch->[1]{each_value} // $sch->[1]{each_elem});
          my $can_be_comma_separated = $is_array_of_simple &&
              $sch->[1]{of}[0] =~ /\A(int|float)\z/; # XXX as well as other simple types that cannot contain commas
          my $opt = $_; $opt =~ s/_/-/g;
          my $dashopt = length($opt) > 1 ? "--$opt" : "-$opt";
          if ($is_bool) {
              if ($iargs{$_}) {
                  push @argv, $dashopt;
              } else {
                  push @argv, "--no$opt";
              }
          } elsif ($can_be_comma_separated) {
              push @argv, "$dashopt", join(",", @{ $iargs{$_} });
          } elsif ($is_array_of_simple) {
              for (@{ $iargs{$_} }) {
                  push @argv, "$dashopt", $_;
              }
          } elsif ($is_hash_of_simple) {
              my $arg = $iargs{$_};
              for (sort keys %$arg) {
                  push @argv, "$dashopt", "$_=$arg->{$_}";
              }
          } else {
              if (ref $iargs{$_}) {
                  push @argv, "$dashopt-json", _encode($iargs{$_});
              } else {
                  push @argv, $dashopt, "$iargs{$_}";
              }
          }
      }
      [200, "OK", \@argv];
  }
  
  1;
  # ABSTRACT: Convert hash arguments to command-line options (and arguments)
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Sub::ConvertArgs::Argv - Convert hash arguments to command-line options (and arguments)
  
  =head1 VERSION
  
  This document describes version 0.10 of Perinci::Sub::ConvertArgs::Argv (from Perl distribution Perinci-Sub-ConvertArgs-Argv), released on 2016-12-12.
  
  =head1 SYNOPSIS
  
   use Perinci::Sub::ConvertArgs::Argv qw(convert_args_to_argv);
  
   my $res = convert_args_to_argv(args=>\%args, meta=>$meta, ...);
  
  =head1 FUNCTIONS
  
  
  =head2 convert_args_to_argv(%args) -> [status, msg, result, meta]
  
  Convert hash arguments to command-line options (and arguments).
  
  Convert hash arguments to command-line arguments. This is the reverse of
  C<Perinci::Sub::GetArgs::Argv::get_args_from_argv>.
  
  Note: currently the function expects schemas in metadata to be normalized
  already.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<args>* => I<hash>
  
  =item * B<meta> => I<hash>
  
  =item * B<use_pos> => I<bool>
  
  Whether to use positional arguments.
  
  For example, given this metadata:
  
   {
       v => 1.1,
       args => {
         arg1 => {pos=>0, req=>1},
         arg2 => {pos=>1},
         arg3 => {},
       },
   }
  
  then under C<use_pos=0> the hash C<< {arg1=E<gt>1, arg2=E<gt>2, arg3=E<gt>'a b'} >> will be
  converted to C<['--arg1', 1, '--arg2', 2, '--arg3', 'a b']>. Meanwhile if
  C<use_pos=1> the same hash will be converted to C<[1, 2, '--arg3', 'a b']>.
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (any)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Sub-ConvertArgs-Argv>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Perinci-Sub-ConvertArgs-Argv>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Sub-ConvertArgs-Argv>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci::CmdLine>, which uses this module for presenting command-line
  examples.
  
  L<Perinci::Sub::GetArgs::Argv> which does the reverse: converting command-line
  arguments to hash.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_SUB_CONVERTARGS_ARGV

    $main::fatpacked{"Perinci/Sub/ConvertArgs/Array.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_SUB_CONVERTARGS_ARRAY';
  package Perinci::Sub::ConvertArgs::Array;
  
  our $DATE = '2015-12-29'; # DATE
  our $VERSION = '0.08'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(convert_args_to_array);
  
  our %SPEC;
  
  $SPEC{convert_args_to_array} = {
      v => 1.1,
      summary => 'Convert hash arguments to array',
      description => <<'_',
  
  Using information in 'args' property (particularly the 'pos' and 'greedy' of
  each argument spec), convert hash arguments to array.
  
  Example:
  
      my $meta = {
          v => 1.1,
          summary => 'Multiply 2 numbers (a & b)',
          args => {
              a => ['num*' => {arg_pos=>0}],
              b => ['num*' => {arg_pos=>1}],
          }
      }
  
  then 'convert_args_to_array(args=>{a=>2, b=>3}, meta=>$meta)' will produce:
  
      [200, "OK", [2, 3]]
  
  _
      args => {
          args => {req=>1, schema=>'hash*', pos=>0},
          meta => {req=>1, schema=>'hash*', pos=>1},
      },
  };
  sub convert_args_to_array {
      my %input_args   = @_;
      my $args         = $input_args{args} or return [400, "Please specify args"];
      my $meta         = $input_args{meta} or return [400, "Please specify meta"];
      my $args_prop    = $meta->{args} // {};
  
      my $v = $meta->{v} // 1.0;
      return [412, "Sorry, only metadata version 1.1 is supported (yours: $v)"]
          unless $v == 1.1;
  
      #$log->tracef("-> convert_args_to_array(), args=%s", $args);
  
      my @array;
  
      while (my ($k, $v) = each %$args) {
          next if $k =~ /\A-/; # skip special arguments
          my $as = $args_prop->{$k};
          return [412, "Argument $k: Not specified in args property"] unless $as;
          my $pos = $as->{pos};
          return [412, "Argument $k: No pos specified in arg spec"]
              unless defined $pos;
          if ($as->{greedy}) {
              $v = [$v] if ref($v) ne 'ARRAY';
              # splice can't work if $pos is beyond array's length
              for (@array .. $pos-1) {
                  $array[$_] = undef;
              }
              splice @array, $pos, 0, @$v;
          } else {
              $array[$pos] = $v;
          }
      }
      [200, "OK", \@array];
  }
  
  1;
  # ABSTRACT: Convert hash arguments to array
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Sub::ConvertArgs::Array - Convert hash arguments to array
  
  =head1 VERSION
  
  This document describes version 0.08 of Perinci::Sub::ConvertArgs::Array (from Perl distribution Perinci-Sub-ConvertArgs-Array), released on 2015-12-29.
  
  =head1 SYNOPSIS
  
   use Perinci::Sub::ConvertArgs::Array qw(convert_args_to_array);
  
   my $res = convert_args_to_array(args=>\%args, meta=>$meta, ...);
  
  =head1 DESCRIPTION
  
  This module provides convert_args_to_array() (and
  gencode_convert_args_to_array(), upcoming). This module is used by, among
  others, L<Perinci::Sub::Wrapper>.
  
  =head1 FUNCTIONS
  
  
  =head2 convert_args_to_array(%args) -> [status, msg, result, meta]
  
  Convert hash arguments to array.
  
  Using information in 'args' property (particularly the 'pos' and 'greedy' of
  each argument spec), convert hash arguments to array.
  
  Example:
  
   my $meta = {
       v => 1.1,
       summary => 'Multiply 2 numbers (a & b)',
       args => {
           a => ['num*' => {arg_pos=>0}],
           b => ['num*' => {arg_pos=>1}],
       }
   }
  
  then 'convert_args_to_array(args=>{a=>2, b=>3}, meta=>$meta)' will produce:
  
   [200, "OK", [2, 3]]
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<args>* => I<hash>
  
  =item * B<meta>* => I<hash>
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (any)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Sub-ConvertArgs-Array>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Perinci-Sub-ConvertArgs-Array>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Sub-ConvertArgs-Array>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_SUB_CONVERTARGS_ARRAY

    $main::fatpacked{"Perinci/Sub/DepChecker.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_SUB_DEPCHECKER';
  package Perinci::Sub::DepChecker;
  
  use 5.010001;
  use strict;
  use warnings;
  use experimental 'smartmatch';
  #use Log::Any '$log';
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         check_deps
                         dep_satisfy_rel
                         list_mentioned_dep_clauses
                 );
  
  our $VERSION = '0.11'; # VERSION
  our $DATE = '2015-09-03'; # DATE
  
  my $pa;
  
  sub check_deps {
      my ($val) = @_;
      #say "D:check: ", dump($val);
      for my $dname (keys %$val) {
          my $dval = $val->{$dname};
          unless (defined &{"checkdep_$dname"}) {
              # give a chance to load from a module first
              eval { require "Perinci/Sub/Dep/$dname.pm" };
              return "Unknown dependency type: $dname"
                  unless defined &{"checkdep_$dname"};
          }
          my $check = \&{"checkdep_$dname"};
          my $res = $check->($dval);
          if ($res) {
              $res = "$dname: $res";
              return $res;
          }
      }
      "";
  }
  
  sub checkdep_all {
      my ($val) = @_;
      #say "D:check_all: ", dump($val);
      for (@$val) {
          my $res = check_deps($_);
          return "Some dependencies not met: $res" if $res;
      }
      "";
  }
  
  sub checkdep_any {
      my ($val) = @_;
      my $nfail = 0;
      for (@$val) {
          return "" unless check_deps($_);
          $nfail++;
      }
      $nfail ? "None of the dependencies are met" : "";
  }
  
  sub checkdep_none {
      my ($val) = @_;
      for (@$val) {
          my $res = check_deps($_);
          return "A dependency is met when it shouldn't: $res" unless $res;
      }
      "";
  }
  
  sub checkdep_env {
      my ($cval) = @_;
      $ENV{$cval} ? "" : "Environment variable $cval not set/true";
  }
  
  sub checkdep_code {
      my ($cval) = @_;
      $cval->() ? "" : "code doesn't return true value";
  }
  
  sub checkdep_prog {
      my ($cval) = @_;
  
      if ($cval =~ m!/!) {
          return "Program $cval not executable" unless (-x $cval);
      } else {
          require File::Which;
          return "Program $cval not found in PATH (".
              join(":", File::Spec->path).")"
                  unless File::Which::which($cval);
      }
      "";
  }
  
  sub riap_client {
      return $pa if $pa;
      require Perinci::Access;
      $pa = Perinci::Access->new;
      $pa;
  }
  
  sub checkdep_pkg {
      my ($cval) = @_;
      my $res = riap_client->request(info => $cval);
      $res->[0] == 200 or return "Can't perform 'info' Riap request on '$cval': ".
          "$res->[0] $res->[1]";
      $res->[2]{type} eq 'package' or return "$cval is not a Riap package";
      "";
  }
  
  sub checkdep_func {
      my ($cval) = @_;
      my $res = riap_client->request(info => $cval);
      $res->[0] == 200 or return "Can't perform 'info' Riap request on '$cval': ".
          "$res->[0] $res->[1]";
      $res->[2]{type} eq 'function' or return "$cval is not a Riap function";
      "";
  }
  
  # for backward-compatibility
  sub checkdep_exec { checkdep_prog(@_) }
  
  # we check this dep by checking arguments, so we'll let something like
  # Perinci::Sub::Wrapper to do it
  sub checkdep_tmp_dir { "" }
  
  # we check this dep by checking arguments, so we'll let something like
  # Perinci::Sub::Wrapper to do it
  sub checkdep_trash_dir { "" }
  
  # we check this dep by checking arguments, so we'll let something like
  # Perinci::Sub::Wrapper to do it
  sub checkdep_undo_trash_dir { "" }
  
  sub _all_elems_is {
      my ($ary, $el) = @_;
      (grep {$_ eq $el} @$ary) && !(grep {$_ ne $el} @$ary);
  }
  
  sub _all_nonblank_elems_is {
      my ($ary, $el) = @_;
      (grep {$_ eq $el} @$ary) && !(grep {$_ && $_ ne $el} @$ary);
  }
  
  sub dep_satisfy_rel {
      my ($wanted, $deps) = @_;
      #$log->tracef("=> dep_satisfy_rel(%s, %s)", $wanted, $deps);
  
      my $res;
      for my $dname (keys %$deps) {
          my $dval = $deps->{$dname};
  
          if ($dname eq 'all') {
              my @r = map { dep_satisfy_rel($wanted, $_) } @$dval;
              #$log->tracef("all: %s", \@r);
              next unless @r;
              return "impossible" if "impossible" ~~ @r;
              return "impossible" if "must" ~~ @r && "must not" ~~ @r;
              return "must"       if "must" ~~ @r;
              return "must not"   if "must not" ~~ @r;
              return "might"      if _all_nonblank_elems_is(\@r, "might");
          } elsif ($dname eq 'any') {
              my @r = map { dep_satisfy_rel($wanted, $_) } @$dval;
              #$log->tracef("any: %s", \@r);
              next unless @r;
              return "impossible" if "impossible" ~~ @r;
              return "must"       if _all_elems_is(\@r, "must");
              return "must not"   if _all_elems_is(\@r, "must not");
              next                if _all_elems_is(\@r, "");
              return "might";
          } elsif ($dname eq 'none') {
              my @r = map { dep_satisfy_rel($wanted, $_) } @$dval;
              #$log->tracef("none: %s", \@r);
              next unless @r;
              return "impossible" if "impossible" ~~ @r;
              return "impossible" if "must" ~~ @r && "must not" ~~ @r;
              return "must not"   if "must" ~~ @r;
              return "must"       if "must not" ~~ @r;
              return "might"      if _all_nonblank_elems_is(\@r, "might");
          } else {
              return "must" if $dname eq $wanted;
          }
      }
      "";
  }
  
  sub list_mentioned_dep_clauses {
      my ($deps, $res) = @_;
      $res //= [];
      for my $dname (keys %$deps) {
          my $dval = $deps->{$dname};
          push @$res, $dname unless $dname ~~ @$res;
          if ($dname =~ /\A(?:all|any|none)\z/) {
              list_mentioned_dep_clauses($_, $res) for @$dval;
          }
      }
      $res;
  }
  
  1;
  # ABSTRACT: Check dependencies from 'deps' property
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Sub::DepChecker - Check dependencies from 'deps' property
  
  =head1 VERSION
  
  This document describes version 0.11 of Perinci::Sub::DepChecker (from Perl distribution Perinci-Sub-DepChecker), released on 2015-09-03.
  
  =head1 SYNOPSIS
  
   use Perinci::Spec::DepChecker qw(check_deps dep_satisfy_rel list_mentioned_dep_clauses);
  
   my $err = check_deps($meta->{deps});
   print "Dependencies not met: $err" if $err;
  
   print "We need to prepare foo"
       if dep_satisfy_rel('foo', $meta->{deps}) =~ /^(?:must|might)$/;
  
  =head1 DESCRIPTION
  
  The 'deps' spec clause adds information about subroutine dependencies. This
  module performs check on it.
  
  This module is currently mainly used by L<Perinci::Sub::Wrapper>.
  
  =for Pod::Coverage ^(checkdep_.*|riap_client)$
  
  =head1 FUNCTIONS
  
  None is exported by default, but every function is exportable.
  
  =head2 check_deps($deps) => ERRSTR
  
  Check dependencies. Will in turn call various C<checkdep_NAME()> subroutines.
  Return empty string if all dependencies are met, or a string containing an error
  message stating a dependency error.
  
  Example:
  
   my $err = check_deps({env=>'DEBUG'});
  
  Will check environment variable C<DEBUG>. If true, will return an empty string.
  Otherwise will set $err with something like C<Environment variable DEBUG not
  set/true>.
  
  Another example:
  
   my $err = check_deps({ all=>[{env=>"A"}, {env=>"B", prog=>"bc"}] });
  
  The above will check environment variables C<A>, C<B>, as well as program C<bc>.
  All dependencies must be met (because we use the C<and> metaclause).
  
  To support a custom dependency named C<NAME>, just define C<checkdep_NAME>
  subroutine in L<Perinci::Sub::DepChecker> package which accepts a value and
  should return an empty string on success or an error message string.
  
  =head2 dep_satisfy_rel($name, $deps) => STR
  
  Check dep satisfication relationship, i.e. whether dependency named C<$name>
  must be satisfied in C<$deps>. Due to B<all>, B<any>, and B<none> clauses, this
  needs to be checked recursively and might yield an inconclusive answer
  ("maybe").
  
  Return "must" if C<$name> definitely must be satisfied in C<$deps>, "must not"
  if definitely not, "" if need not be satisfied (dep clause does not exist in
  deps), "impossible" if condition is impossible to be satisfied (due to
  conflicts), "might" if dep might need to be satisfied (but might also not).
  
  Examples:
  
   dep_satisfy_rel('env', {env=>"A"})              # => "must"
   dep_satisfy_rel('a', {all=>[{a=>1}, {b=>1}]})   # => "must"
   dep_satisfy_rel('a', {b=>2})                    # => ""
   dep_satisfy_rel('a', {none=>[{a=>1}, {b=>1}]})  # => "must not"
   dep_satisfy_rel('c', {none=>[{a=>1}, {b=>1}]})  # => ""
   dep_satisfy_rel('a', {any=>[{a=>1}, {b=>1}]})   # => "might"
   dep_satisfy_rel('a', {all=>[{a=>1},
                               {none=>[{a=>1}]}]}) # => "impossible"
  
  This function is useful if we want to prepare something that "must" or "might"
  be needed, or want to avoid preparing something that "must not" be present.
  
  =head2 list_mentioned_dep_clauses($deps) => ARRAYREF
  
  List all dep clauses mentioned in $deps. The returned array is I<not> sorted
  alphabetically, so you will have to do it yourself if you need it sorted.
  
  Example:
  
   list_mentioned_dep_clauses({any=>[{a=>1}, {b=>1}]}) # => [qw/any a b/]
  
  =head1 SEE ALSO
  
  L<Perinci>
  
  'deps' section in L<Rinci::function>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Sub-DepChecker>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Sub-DepChecker>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Sub-DepChecker>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_SUB_DEPCHECKER

    $main::fatpacked{"Perinci/Sub/GetArgs/Argv.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_SUB_GETARGS_ARGV';
  package Perinci::Sub::GetArgs::Argv;
  
  our $DATE = '2017-04-19'; # DATE
  our $VERSION = '0.81'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Data::Sah::Normalize qw(normalize_schema);
  use Data::Sah::Util::Type qw(is_type is_simple);
  use Getopt::Long::Negate::EN qw(negations_for_option);
  use Getopt::Long::Util qw(parse_getopt_long_opt_spec);
  use List::Util qw(first);
  use Perinci::Sub::GetArgs::Array qw(get_args_from_array);
  use Perinci::Sub::Util qw(err);
  
  use Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         gen_getopt_long_spec_from_meta
                         get_args_from_argv
                 );
  
  our %SPEC;
  
  $SPEC{':package'} = {
      v => 1.1,
      summary => 'Get subroutine arguments from command line arguments (@ARGV)',
  };
  
  # retun ($success?, $errmsg, $res)
  sub _parse_json {
      my $str = shift;
  
      state $json = do {
          require JSON::PP;
          JSON::PP->new->allow_nonref;
      };
  
      # to rid of those JSON::PP::Boolean objects which currently choke
      # Data::Sah-generated validator code. in the future Data::Sah can be
      # modified to handle those, or we use a fork of JSON::PP which doesn't
      # produce those in the first place (probably only when performance is
      # critical).
      state $cleanser = do {
          if (eval { require Data::Clean::FromJSON; 1 }) {
              Data::Clean::FromJSON->get_cleanser;
          } else {
              undef;
          }
      };
  
      my $res;
      eval { $res = $json->decode($str); $cleanser->clean_in_place($res) if $cleanser };
      my $e = $@;
      return (!$e, $e, $res);
  }
  
  sub _parse_yaml {
      no warnings 'once';
  
      state $yaml_xs_available = do {
          if (eval { require YAML::XS; 1 }) {
              1;
          } else {
              require YAML::Old;
              0;
          }
      };
  
      my $str = shift;
  
      #local $YAML::Syck::ImplicitTyping = 1;
      my $res;
      eval {
          if ($yaml_xs_available) {
              $res = YAML::XS::Load($str);
          } else {
              # YAML::Old is too strict, it requires "--- " header and newline
              # ending
              $str = "--- $str" unless $str =~ /\A--- /;
              $str .= "\n" unless $str =~ /\n\z/;
              $res = YAML::Old::Load($str);
          }
      };
      my $e = $@;
      return (!$e, $e, $res);
  }
  
  sub _arg2opt {
      my $opt = shift;
      $opt =~ s/[^A-Za-z0-9-]+/-/g; # foo.bar_baz becomes --foo-bar-baz
      $opt;
  }
  
  # this subroutine checks whether a schema mentions a coercion rule from simple
  # types (e.g. 'str_comma_sep', etc).
  sub _is_coercible_from_simple {
      my $nsch = shift;
      my $cset = $nsch->[1] or return 0;
      my $rules = $cset->{'x.perl.coerce_rules'} // $cset->{'x.coerce_rules'}
          or return 0;
      for my $rule (@$rules) {
          next unless $rule =~ /\A([^_]+)_/;
          return 1 if is_simple($1);
      }
      0;
  }
  
  sub _is_simple_or_coercible_from_simple {
      my $nsch = shift;
      is_simple($nsch) || _is_coercible_from_simple($nsch);
  }
  
  # this routine's job is to avoid using Data::Sah::Resolve unless it needs to, to
  # reduce startup overhead
  sub _is_simple_or_array_of_simple_or_hash_of_simple {
      my $nsch = shift;
  
      my $is_simple = 0;
      my $is_array_of_simple = 0;
      my $is_hash_of_simple = 0;
      my $eltype;
  
      my $type = $nsch->[0];
      my $cset = $nsch->[1];
  
      {
          # if not known as builtin type, then resolve it first
          unless (is_type($nsch)) {
              require Data::Sah::Resolve;
              my $res = Data::Sah::Resolve::resolve_schema(
                  {merge_clause_sets => 0}, $nsch);
              $type = $res->[0];
              $cset = $res->[1][0] // {};
          }
  
          $is_simple = _is_simple_or_coercible_from_simple([$type, $cset]);
          last if $is_simple;
  
          if ($type eq 'array') {
              my $elnsch = $cset->{of} // $cset->{each_elem};
              last unless $elnsch;
              $elnsch = normalize_schema($elnsch);
              $eltype = $elnsch->[0];
  
              # if not known as builtin type, then resolve it first
              unless (is_type($elnsch)) {
                  require Data::Sah::Resolve;
                  my $res = Data::Sah::Resolve::resolve_schema(
                      {merge_clause_sets => 0}, $elnsch);
                  $elnsch = [$res->[0], $res->[1][0] // {}]; # XXX we only take the first clause set
                  $eltype = $res->[0];
              }
  
              $is_array_of_simple = _is_simple_or_coercible_from_simple($elnsch);
              last;
          }
  
          if ($type eq 'hash') {
              my $elnsch = $cset->{of} // $cset->{each_value} // $cset->{each_elem};
              last unless $elnsch;
              $elnsch = normalize_schema($elnsch);
              $eltype = $elnsch->[0];
  
              # if not known as builtin type, then resolve it first
              unless (is_type($elnsch)) {
                  require Data::Sah::Resolve;
                  my $res = Data::Sah::Resolve::resolve_schema(
                      {merge_clause_sets => 0}, $elnsch);
                  $elnsch = [$res->[0], $res->[1][0] // {}]; # XXX we only take the first clause set
                  $eltype = $res->[0];
              }
  
              $is_hash_of_simple = _is_simple_or_coercible_from_simple($elnsch);
              last;
          }
      }
  
      #{ no warnings 'uninitialized'; say "D:$nsch->[0]: is_simple=<$is_simple>, is_array_of_simple=<$is_array_of_simple>, is_hash_of_simple=<$is_hash_of_simple>, type=<$type>, eltype=<$eltype>" };
      ($is_simple, $is_array_of_simple, $is_hash_of_simple, $type, $cset, $eltype);
  }
  
  # return one or more triplets of Getopt::Long option spec, its parsed structure,
  # and extra stuffs. we do this to avoid having to call
  # parse_getopt_long_opt_spec().
  sub _opt2ospec {
      my ($opt, $schema, $arg_spec) = @_;
      my ($is_simple, $is_array_of_simple, $is_hash_of_simple, $type, $cset, $eltype) =
          _is_simple_or_array_of_simple_or_hash_of_simple($schema);
  
      my (@opts, @types, @isaos, @ishos);
  
      if ($is_array_of_simple || $is_hash_of_simple) {
          my $singular_opt;
          if ($arg_spec && $arg_spec->{'x.name.is_plural'}) {
              if ($arg_spec->{'x.name.singular'}) {
                  $singular_opt = _arg2opt($arg_spec->{'x.name.singular'});
              } else {
                  require Lingua::EN::PluralToSingular;
                  $singular_opt = Lingua::EN::PluralToSingular::to_singular($opt);
              }
          } else {
              $singular_opt = $opt;
          }
          push @opts , $singular_opt;
          push @types, $eltype;
          push @isaos, $is_array_of_simple ? 1:0;
          push @ishos, $is_hash_of_simple  ? 1:0;
      }
  
      if ($is_simple || !@opts) {
          push @opts , $opt;
          push @types, $type;
          push @isaos, 0;
          push @ishos, 0;
      }
  
      my @res;
  
      for my $i (0..$#opts) {
          my $opt   = $opts[$i];
          my $type  = $types[$i];
          my $isaos = $isaos[$i];
          my $ishos = $ishos[$i];
  
          if ($type eq 'bool') {
              if (length($opt) == 1 || $cset->{is}) {
                  # single-letter option like -b doesn't get --nob.
                  # [bool=>{is=>1}] also means it's a flag and should not get
                  # --nofoo.
                  push @res, ($opt, {opts=>[$opt]}), undef;
              } else {
                  my @negs = negations_for_option($opt);
                  push @res, $opt, {opts=>[$opt]}, {is_neg=>0, neg_opts=>\@negs};
                  for (@negs) {
                      push @res, $_, {opts=>[$_]}, {is_neg=>1, pos_opts=>[$opt]};
                  }
              }
          } elsif ($type eq 'buf') {
              push @res, (
                  "$opt=s", {opts=>[$opt], desttype=>"", type=>"s"}, undef,
                  "$opt-base64=s", {opts=>["$opt-base64"], desttype=>"", type=>"s"}, {is_base64=>1},
              );
          } else {
              my $t = ($type eq 'int' ? 'i' : $type eq 'float' ? 'f' : 's') .
                  ($isaos ? '@' : $ishos ? '%' : '');
              push @res, ("$opt=$t", {opts=>[$opt], desttype=>"", type=>$t}, undef);
          }
      }
  
      @res;
  }
  
  sub _args2opts {
      my %args = @_;
  
      my $argprefix        = $args{argprefix};
      my $parent_args      = $args{parent_args};
      my $meta             = $args{meta};
      my $seen_opts        = $args{seen_opts};
      my $seen_common_opts = $args{seen_common_opts};
      my $seen_func_opts   = $args{seen_func_opts};
      my $rargs            = $args{rargs};
      my $go_spec          = $args{go_spec};
      my $specmeta         = $args{specmeta};
  
      my $args_prop = $meta->{args} // {};
  
      for my $arg (keys %$args_prop) {
          my $fqarg    = "$argprefix$arg";
          my $arg_spec = $args_prop->{$arg};
          next if grep { $_ eq 'hidden' || $_ eq 'hidden-cli' }
              @{ $arg_spec->{tags} // [] };
          my $sch      = $arg_spec->{schema} // ['any', {}];
          my ($is_simple, $is_array_of_simple, $is_hash_of_simple, $type, $cset, $eltype) =
              _is_simple_or_array_of_simple_or_hash_of_simple($sch);
  
          # XXX normalization of 'of' clause should've been handled by sah itself
          if ($type eq 'array' && $cset->{of}) {
              $cset->{of} = normalize_schema($cset->{of});
          }
          my $opt = _arg2opt($fqarg);
          if ($seen_opts->{$opt}) {
              my $i = 1;
              my $opt2;
              while (1) {
                  $opt2 = "$opt-arg" . ($i > 1 ? $i : '');
                  last unless $seen_opts->{$opt2};
                  $i++;
              }
              $opt = $opt2;
          }
  
          my $stash = {};
  
          # why we use coderefs here? due to Getopt::Long's behavior. when
          # @ARGV=qw() and go_spec is ('foo=s' => \$opts{foo}) then %opts will
          # become (foo=>undef). but if go_spec is ('foo=s' => sub { $opts{foo} =
          # $_[1] }) then %opts will become (), which is what we prefer, so we can
          # later differentiate "unspecified" (exists($opts{foo}) == false) and
          # "specified as undef" (exists($opts{foo}) == true but
          # defined($opts{foo}) == false).
  
          my $handler = sub {
              my ($val, $val_set);
  
              # how many times have been called for this argument?
              my $num_called = ++$stash->{called}{$arg};
  
              # hashify rargs till the end of the handler scope if it happens to
              # be an array (this is the case when we want to fill values using
              # element_meta).
              my $rargs = do {
                  if (ref($rargs) eq 'ARRAY') {
                      $rargs->[$num_called-1] //= {};
                      $rargs->[$num_called-1];
                  } else {
                      $rargs;
                  }
              };
  
              if ($is_simple) {
                  $val_set = 1; $val = $_[1];
                  $rargs->{$arg} = $val;
              } elsif ($is_array_of_simple) {
                  $rargs->{$arg} //= [];
                  $val_set = 1; $val = $_[1];
                  push @{ $rargs->{$arg} }, $val;
              } elsif ($is_hash_of_simple) {
                  $rargs->{$arg} //= {};
                  $val_set = 1; $val = $_[2];
                  $rargs->{$arg}{$_[1]} = $val;
              } else {
                  {
                      my ($success, $e, $decoded);
                      ($success, $e, $decoded) = _parse_json($_[1]);
                      if ($success) {
                          $val_set = 1; $val = $decoded;
                          $rargs->{$arg} = $val;
                          last;
                      }
                      ($success, $e, $decoded) = _parse_yaml($_[1]);
                      if ($success) {
                          $val_set = 1; $val = $decoded;
                          $rargs->{$arg} = $val;
                          last;
                      }
                      die "Invalid YAML/JSON in arg '$fqarg'";
                  }
              }
              if ($val_set && $arg_spec->{cmdline_on_getopt}) {
                  $arg_spec->{cmdline_on_getopt}->(
                      arg=>$arg, fqarg=>$fqarg, value=>$val, args=>$rargs,
                      opt=>$opt,
                  );
              }
          }; # handler
  
          my @triplets = _opt2ospec($opt, $sch, $arg_spec);
          my $aliases_processed;
          while (my ($ospec, $parsed, $extra) = splice @triplets, 0, 3) {
              $extra //= {};
              if ($extra->{is_neg}) {
                  $go_spec->{$ospec} = sub { $handler->($_[0], 0) };
              } elsif (defined $extra->{is_neg}) {
                  $go_spec->{$ospec} = sub { $handler->($_[0], 1) };
              } elsif ($extra->{is_base64}) {
                  $go_spec->{$ospec} = sub {
                      require MIME::Base64;
                      my $decoded = MIME::Base64::decode($_[1]);
                      $handler->($_[0], $decoded);
                  };
              } else {
                  $go_spec->{$ospec} = $handler;
              }
  
              $specmeta->{$ospec} = {arg=>$arg, fqarg=>$fqarg, parsed=>$parsed, %$extra};
              for (@{ $parsed->{opts} }) {
                  $seen_opts->{$_}++; $seen_func_opts->{$_} = $fqarg;
              }
  
              if ($parent_args->{per_arg_json} && !$is_simple) {
                  my $jopt = "$opt-json";
                  if ($seen_opts->{$jopt}) {
                      warn "Clash of option: $jopt, not added";
                  } else {
                      my $jospec = "$jopt=s";
                      my $parsed = {type=>"s", opts=>[$jopt]};
                      $go_spec->{$jospec} = sub {
                          my ($success, $e, $decoded);
                          ($success, $e, $decoded) = _parse_json($_[1]);
                          if ($success) {
                              $rargs->{$arg} = $decoded;
                          } else {
                              die "Invalid JSON in option --$jopt: $_[1]: $e";
                          }
                      };
                      $specmeta->{$jospec} = {arg=>$arg, fqarg=>$fqarg, is_json=>1, parsed=>$parsed, %$extra};
                      $seen_opts->{$jopt}++; $seen_func_opts->{$jopt} = $fqarg;
                  }
              }
              if ($parent_args->{per_arg_yaml} && !$is_simple) {
                  my $yopt = "$opt-yaml";
                  if ($seen_opts->{$yopt}) {
                      warn "Clash of option: $yopt, not added";
                  } else {
                      my $yospec = "$yopt=s";
                      my $parsed = {type=>"s", opts=>[$yopt]};
                      $go_spec->{$yospec} = sub {
                          my ($success, $e, $decoded);
                          ($success, $e, $decoded) = _parse_yaml($_[1]);
                          if ($success) {
                              $rargs->{$arg} = $decoded;
                          } else {
                              die "Invalid YAML in option --$yopt: $_[1]: $e";
                          }
                      };
                      $specmeta->{$yospec} = {arg=>$arg, fqarg=>$fqarg, is_yaml=>1, parsed=>$parsed, %$extra};
                      $seen_opts->{$yopt}++; $seen_func_opts->{$yopt} = $fqarg;
                  }
              }
  
              # parse argv_aliases
              if ($arg_spec->{cmdline_aliases} && !$aliases_processed++) {
                  for my $al (keys %{$arg_spec->{cmdline_aliases}}) {
                      my $alspec = $arg_spec->{cmdline_aliases}{$al};
                      my $alsch = $alspec->{schema} //
                          $alspec->{is_flag} ? [bool=>{req=>1,is=>1}] : $sch;
                      my $altype = $alsch->[0];
                      my $alopt = _arg2opt("$argprefix$al");
                      if ($seen_opts->{$alopt}) {
                          warn "Clash of cmdline_alias option $al";
                          next;
                      }
                      my $alcode = $alspec->{code};
                      my $alospec;
                      my $parsed;
                      if ($alcode && $alsch->[0] eq 'bool') {
                          # bool --alias doesn't get --noalias if has code
                          $alospec = $alopt; # instead of "$alopt!"
                          $parsed = {opts=>[$alopt]};
                      } else {
                          ($alospec, $parsed) = _opt2ospec($alopt, $alsch);
                      }
  
                      if ($alcode) {
                          if ($alcode eq 'CODE') {
                              if ($parent_args->{ignore_converted_code}) {
                                  $alcode = sub {};
                              } else {
                                  return [
                                      501,
                                      join("",
                                           "Code in cmdline_aliases for arg $fqarg ",
                                           "got converted into string, probably ",
                                           "because of JSON/YAML transport"),
                                  ];
                              }
                          }
                          # alias handler
                          $go_spec->{$alospec} = sub {
  
                              # do the same like in arg handler
                              my $num_called = ++$stash->{called}{$arg};
                              my $rargs = do {
                                  if (ref($rargs) eq 'ARRAY') {
                                      $rargs->[$num_called-1] //= {};
                                      $rargs->[$num_called-1];
                                  } else {
                                      $rargs;
                                  }
                              };
  
                              $alcode->($rargs, $_[1]);
                          };
                      } else {
                          $go_spec->{$alospec} = $handler;
                      }
                      $specmeta->{$alospec} = {
                          alias     => $al,
                          is_alias  => 1,
                          alias_for => $ospec,
                          arg       => $arg,
                          fqarg     => $fqarg,
                          is_code   => $alcode ? 1:0,
                          parsed    => $parsed,
                          %$extra,
                      };
                      push @{$specmeta->{$ospec}{($alcode ? '':'non').'code_aliases'}},
                          $alospec;
                      $seen_opts->{$alopt}++; $seen_func_opts->{$alopt} = $fqarg;
                  }
              } # cmdline_aliases
  
              # submetadata
              if ($arg_spec->{meta}) {
                  $rargs->{$arg} = {};
                  my $res = _args2opts(
                      %args,
                      argprefix => "$argprefix$arg\::",
                      meta      => $arg_spec->{meta},
                      rargs     => $rargs->{$arg},
                  );
                  return $res if $res;
              }
  
              # element submetadata
              if ($arg_spec->{element_meta}) {
                  $rargs->{$arg} = [];
                  my $res = _args2opts(
                      %args,
                      argprefix => "$argprefix$arg\::",
                      meta      => $arg_spec->{element_meta},
                      rargs     => $rargs->{$arg},
                  );
                  return $res if $res;
              }
          } # for ospec triplet
  
      } # for arg
  
      undef;
  }
  
  $SPEC{gen_getopt_long_spec_from_meta} = {
      v           => 1.1,
      summary     => 'Generate Getopt::Long spec from Rinci function metadata',
      description => <<'_',
  
  This routine will produce a <pm:Getopt::Long> specification from Rinci function
  metadata, as well as some more data structure in the result metadata to help
  producing a command-line help/usage message.
  
  Function arguments will be mapped to command-line options with the same name,
  with non-alphanumeric characters changed to `-` (`-` is preferred over `_`
  because it lets user avoid pressing Shift on popular keyboards). For example:
  `file_size` becomes `file-size`, `file_size.max` becomes `file-size-max`. If
  function argument option name clashes with command-line option or another
  existing option, it will be renamed to `NAME-arg` (or `NAME-arg2` and so on).
  For example: `help` will become `help-arg` (if `common_opts` contains `help`,
  that is).
  
  Each command-line alias (`cmdline_aliases` property) in the argument
  specification will also be added as command-line option, except if it clashes
  with an existing option, in which case this function will warn and skip adding
  the alias. For more information about `cmdline_aliases`, see `Rinci::function`.
  
  For arguments with type of `bool`, Getopt::Long will by default also
  automatically recognize `--noNAME` or `--no-NAME` in addition to `--name`. So
  this function will also check those names for clashes.
  
  For arguments with type array of simple scalar, `--NAME` can be specified more
  than once to append to the array.
  
  If `per_arg_json` setting is active, and argument's schema is not a "required
  simple scalar" (e.g. an array, or a nullable string), then `--NAME-json` will
  also be added to let users input undef (through `--NAME-json null`) or a
  non-scalar value (e.g. `--NAME-json '[1,2,3]'`). If this name conflicts with
  another existing option, a warning will be displayed and the option will not be
  added.
  
  If `per_arg_yaml` setting is active, and argument's schema is not a "required
  simple scalar" (e.g. an array, or a nullable string), then `--NAME-yaml` will
  also be added to let users input undef (through `--NAME-yaml '~'`) or a
  non-scalar value (e.g. `--NAME-yaml '[foo, bar]'`). If this name conflicts with
  another existing option, a warning will be displayed and the option will not be
  added. YAML can express a larger set of values, e.g. binary data, circular
  references, etc.
  
  Will produce a hash (Getopt::Long spec), with `func.specmeta`, `func.opts`,
  `func.common_opts`, `func.func_opts` that contain extra information
  (`func.specmeta` is a hash of getopt spec name and a hash of extra information
  while `func.*opts` lists all used option names).
  
  _
      args => {
          meta => {
              summary => 'Rinci function metadata',
              schema  => 'hash*',
              req     => 1,
          },
          meta_is_normalized => {
              schema => 'bool*',
          },
          args => {
              summary => 'Reference to hash which will store the result',
              schema  => 'hash*',
          },
          common_opts => {
              summary => 'Common options',
              description => <<'_',
  
  A hash where the values are hashes containing these keys: `getopt` (Getopt::Long
  option specification), `handler` (Getopt::Long handler). Will be passed to
  `get_args_from_argv()`. Example:
  
      {
          help => {
              getopt  => 'help|h|?',
              handler => sub { ... },
              summary => 'Display help and exit',
          },
          version => {
              getopt  => 'version|v',
              handler => sub { ... },
              summary => 'Display version and exit',
          },
      }
  
  _
              schema => ['hash*'],
          },
          per_arg_json => {
              summary => 'Whether to add --NAME-json for non-simple arguments',
              schema  => 'bool',
              default => 0,
              description => <<'_',
  
  Will also interpret command-line arguments as JSON if assigned to function
  arguments, if arguments' schema is not simple scalar.
  
  _
          },
          per_arg_yaml => {
              summary => 'Whether to add --NAME-yaml for non-simple arguments',
              schema  => 'bool',
              default => 0,
              description => <<'_',
  
  Will also interpret command-line arguments as YAML if assigned to function
  arguments, if arguments' schema is not simple scalar.
  
  _
          },
          ignore_converted_code => {
              summary => 'Whether to ignore coderefs converted to string',
              schema => 'bool',
              default => 0,
              description => <<'_',
  
  Across network through JSON encoding, coderef in metadata (e.g. in
  `cmdline_aliases` property) usually gets converted to string `CODE`. In some
  cases, like for tab completion, this is pretty harmless so you can turn this
  option on. For example, in the case of `cmdline_aliases`, the effect is just
  that command-line aliases code are not getting executed, but this is usually
  okay.
  
  _
          },
      },
  };
  sub gen_getopt_long_spec_from_meta {
      my %fargs = @_;
  
      my $meta       = $fargs{meta} or return [400, "Please specify meta"];
      unless ($fargs{meta_is_normalized}) {
          require Perinci::Sub::Normalize;
          $meta = Perinci::Sub::Normalize::normalize_function_metadata($meta);
      }
      my $co           = $fargs{common_opts} // {};
      my $per_arg_yaml = $fargs{per_arg_yaml} // 0;
      my $per_arg_json = $fargs{per_arg_json} // 0;
      my $ignore_converted_code = $fargs{ignore_converted_code};
      my $rargs        = $fargs{args} // {};
  
      my %go_spec;
      my %specmeta; # key = option spec, val = hash of extra info
      my %seen_opts;
      my %seen_common_opts;
      my %seen_func_opts;
  
      for my $k (keys %$co) {
          my $v = $co->{$k};
          my $ospec   = $v->{getopt};
          my $handler = $v->{handler};
          my $res = parse_getopt_long_opt_spec($ospec)
              or return [400, "Can't parse common opt spec '$ospec'"];
          $go_spec{$ospec} = $handler;
          $specmeta{$ospec} = {common_opt=>$k, arg=>undef, parsed=>$res};
          for (@{ $res->{opts} }) {
              return [412, "Clash of common opt '$_'"] if $seen_opts{$_};
              $seen_opts{$_}++; $seen_common_opts{$_} = $ospec;
              if ($res->{is_neg}) {
                  $seen_opts{"no$_"}++ ; $seen_common_opts{"no$_"}  = $ospec;
                  $seen_opts{"no-$_"}++; $seen_common_opts{"no-$_"} = $ospec;
              }
          }
      }
  
      my $res = _args2opts(
          argprefix        => "",
          parent_args      => \%fargs,
          meta             => $meta,
          seen_opts        => \%seen_opts,
          seen_common_opts => \%seen_common_opts,
          seen_func_opts   => \%seen_func_opts,
          rargs            => $rargs,
          go_spec          => \%go_spec,
          specmeta         => \%specmeta,
      );
      return $res if $res;
  
      my $opts        = [sort(map {length($_)>1 ? "--$_":"-$_"} keys %seen_opts)];
      my $common_opts = [sort(map {length($_)>1 ? "--$_":"-$_"} keys %seen_common_opts)];
      my $func_opts   = [sort(map {length($_)>1 ? "--$_":"-$_"} keys %seen_func_opts)];
      my $opts_by_common = {};
      for my $k (keys %$co) {
          my $v = $co->{$k};
          my $ospec = $v->{getopt};
          my @opts;
          for (keys %seen_common_opts) {
              next unless $seen_common_opts{$_} eq $ospec;
              push @opts, (length($_)>1 ? "--$_":"-$_");
          }
          $opts_by_common->{$ospec} = [sort @opts];
      }
  
      my $opts_by_arg = {};
      for (keys %seen_func_opts) {
          my $fqarg = $seen_func_opts{$_};
          push @{ $opts_by_arg->{$fqarg} }, length($_)>1 ? "--$_":"-$_";
      }
      for (keys %$opts_by_arg) {
          $opts_by_arg->{$_} = [sort @{ $opts_by_arg->{$_} }];
      }
  
      [200, "OK", \%go_spec,
       {
           "func.specmeta"       => \%specmeta,
           "func.opts"           => $opts,
           "func.common_opts"    => $common_opts,
           "func.func_opts"      => $func_opts,
           "func.opts_by_arg"    => $opts_by_arg,
           "func.opts_by_common" => $opts_by_common,
       }];
  }
  
  $SPEC{get_args_from_argv} = {
      v => 1.1,
      summary => 'Get subroutine arguments (%args) from command-line arguments '.
          '(@ARGV)',
      description => <<'_',
  
  Using information in Rinci function metadata's `args` property, parse command
  line arguments `@argv` into hash `%args`, suitable for passing into subroutines.
  
  Currently uses <pm:Getopt::Long>'s `GetOptions` to do the parsing.
  
  As with GetOptions, this function modifies its `argv` argument, so you might
  want to copy the original `argv` first (or pass a copy instead) if you want to
  preserve the original.
  
  See also: gen_getopt_long_spec_from_meta() which is the routine that generates
  the specification.
  
  _
      args => {
          argv => {
              schema => ['array*' => {
                  of => 'str*',
              }],
              description => 'If not specified, defaults to @ARGV',
          },
          args => {
              summary => 'Specify input args, with some arguments preset',
              schema  => ['hash'],
          },
          meta => {
              schema => ['hash*' => {}],
              req => 1,
          },
          meta_is_normalized => {
              summary => 'Can be set to 1 if your metadata is normalized, '.
                  'to avoid duplicate effort',
              schema => 'bool',
              default => 0,
          },
          strict => {
              schema => ['bool' => {default=>1}],
              summary => 'Strict mode',
              description => <<'_',
  
  If set to 0, will still return parsed argv even if there are parsing errors
  (reported by Getopt::Long). If set to 1 (the default), will die upon error.
  
  Normally you would want to use strict mode, for more error checking. Setting off
  strict is used by, for example, Perinci::Sub::Complete during completion where
  the command-line might still be incomplete.
  
  Should probably be named `ignore_errors`. :-)
  
  _
          },
          per_arg_yaml => {
              schema => ['bool' => {default=>0}],
              summary => 'Whether to recognize --ARGNAME-yaml',
              description => <<'_',
  
  This is useful for example if you want to specify a value which is not
  expressible from the command-line, like 'undef'.
  
      % script.pl --name-yaml '~'
  
  See also: per_arg_json. You should enable just one instead of turning on both.
  
  _
          },
          per_arg_json => {
              schema => ['bool' => {default=>0}],
              summary => 'Whether to recognize --ARGNAME-json',
              description => <<'_',
  
  This is useful for example if you want to specify a value which is not
  expressible from the command-line, like 'undef'.
  
      % script.pl --name-json 'null'
  
  But every other string will need to be quoted:
  
      % script.pl --name-json '"foo"'
  
  See also: per_arg_yaml. You should enable just one instead of turning on both.
  
  _
          },
          common_opts => {
              summary => 'Common options',
              description => <<'_',
  
  A hash where the values are hashes containing these keys: `getopt` (Getopt::Long
  option specification), `handler` (Getopt::Long handler). Will be passed to
  `get_args_from_argv()`. Example:
  
      {
          help => {
              getopt  => 'help|h|?',
              handler => sub { ... },
              summary => 'Display help and exit',
          },
          version => {
              getopt  => 'version|v',
              handler => sub { ... },
              summary => 'Display version and exit',
          },
      }
  
  _
              schema => ['hash*'],
          },
          allow_extra_elems => {
              schema => ['bool' => {default=>0}],
              summary => 'Allow extra/unassigned elements in argv',
              description => <<'_',
  
  If set to 1, then if there are array elements unassigned to one of the
  arguments, instead of generating an error, this function will just ignore them.
  
  This option will be passed to Perinci::Sub::GetArgs::Array's allow_extra_elems.
  
  _
          },
          on_missing_required_args => {
              schema => 'code',
              summary => 'Execute code when there is missing required args',
              description => <<'_',
  
  This can be used to give a chance to supply argument value from other sources if
  not specified by command-line options. Perinci::CmdLine, for example, uses this
  hook to supply value from STDIN or file contents (if argument has `cmdline_src`
  specification key set).
  
  This hook will be called for each missing argument. It will be supplied hash
  arguments: (arg => $the_missing_argument_name, args =>
  $the_resulting_args_so_far, spec => $the_arg_spec).
  
  The hook can return true if it succeeds in making the missing situation
  resolved. In this case, this function will not report the argument as missing.
  
  _
          },
          ignore_converted_code => {
              summary => 'Whether to ignore coderefs converted to string',
              schema => 'bool',
              default => 0,
              description => <<'_',
  
  Across network through JSON encoding, coderef in metadata (e.g. in
  `cmdline_aliases` property) usually gets converted to string `CODE`. In some
  cases, like for tab completion, this is harmless so you can turn this option on.
  
  _
          },
      },
      result => {
          description => <<'_',
  
  Error codes:
  
  * 400 - Error in Getopt::Long option specification, e.g. in common_opts.
  
  * 500 - failure in GetOptions, meaning argv is not valid according to metadata
    specification (only if 'strict' mode is enabled).
  
  * 501 - coderef in cmdline_aliases got converted into a string, probably because
    the metadata was transported (e.g. through Riap::HTTP/Riap::Simple).
  
  _
      },
  };
  sub get_args_from_argv {
      require Getopt::Long;
  
      my %fargs = @_;
      my $argv       = $fargs{argv} // \@ARGV;
      my $meta       = $fargs{meta} or return [400, "Please specify meta"];
      unless ($fargs{meta_is_normalized}) {
          require Perinci::Sub::Normalize;
          $meta = Perinci::Sub::Normalize::normalize_function_metadata($meta);
      }
      my $strict            = $fargs{strict} // 1;
      my $common_opts       = $fargs{common_opts} // {};
      my $per_arg_yaml      = $fargs{per_arg_yaml} // 0;
      my $per_arg_json      = $fargs{per_arg_json} // 0;
      my $allow_extra_elems = $fargs{allow_extra_elems} // 0;
      my $on_missing        = $fargs{on_missing_required_args};
      my $ignore_converted_code = $fargs{ignore_converted_code};
      #$log->tracef("-> get_args_from_argv(), argv=%s", $argv);
  
      # to store the resulting args
      my $rargs = $fargs{args} // {};
  
      # 1. first we generate Getopt::Long spec
      my $genres = gen_getopt_long_spec_from_meta(
          meta => $meta, meta_is_normalized => 1,
          args => $rargs,
          common_opts  => $common_opts,
          per_arg_json => $per_arg_json,
          per_arg_yaml => $per_arg_yaml,
          ignore_converted_code => $ignore_converted_code,
      );
      return err($genres->[0], "Can't generate Getopt::Long spec", $genres)
          if $genres->[0] != 200;
      my $go_spec = $genres->[2];
  
      # 2. then we run GetOptions to fill $rargs from command-line opts
      #$log->tracef("GetOptions spec: %s", \@go_spec);
      {
          local $SIG{__WARN__} = sub{} if !$strict;
          my $old_go_conf = Getopt::Long::Configure(
              $strict ? "no_pass_through" : "pass_through",
              "no_ignore_case", "permute", "no_getopt_compat", "gnu_compat", "bundling");
          my $res = Getopt::Long::GetOptionsFromArray($argv, %$go_spec);
          Getopt::Long::Configure($old_go_conf);
          unless ($res) {
              return [500, "GetOptions failed"] if $strict;
          }
      }
  
      # 3. then we try to fill $rargs from remaining command-line arguments (for
      # args which have 'pos' spec specified)
  
      my $args_prop = $meta->{args};
  
      if (@$argv) {
          my $res = get_args_from_array(
              array=>$argv, meta => $meta,
              meta_is_normalized => 1,
              allow_extra_elems => $allow_extra_elems,
          );
          if ($res->[0] != 200 && $strict) {
              return err(500, "Get args from array failed", $res);
          } elsif ($strict && $res->[0] != 200) {
              return err("Can't get args from argv", $res);
          } elsif ($res->[0] == 200) {
              my $pos_args = $res->[2];
              for my $name (keys %$pos_args) {
                  my $arg_spec = $args_prop->{$name};
                  my $val      = $pos_args->{$name};
                  if (exists $rargs->{$name}) {
                      return [400, "You specified option --$name but also ".
                                  "argument #".$arg_spec->{pos}] if $strict;
                  }
                  my ($is_simple, $is_array_of_simple, $is_hash_of_simple, $type, $cset, $eltype) =
                      _is_simple_or_array_of_simple_or_hash_of_simple($arg_spec->{schema});
  
                  if ($arg_spec->{greedy} && ref($val) eq 'ARRAY' &&
                          !$is_array_of_simple && !$is_hash_of_simple) {
                      my $i = 0;
                      for (@$val) {
                        TRY_PARSING_AS_JSON_YAML:
                          {
                              my ($success, $e, $decoded);
                              if ($per_arg_json) {
                                  ($success, $e, $decoded) = _parse_json($_);
                                  if ($success) {
                                      $_ = $decoded;
                                      last TRY_PARSING_AS_JSON_YAML;
                                  } else {
                                      warn "Failed trying to parse argv #$i as JSON: $e";
                                  }
                              }
                              if ($per_arg_yaml) {
                                  ($success, $e, $decoded) = _parse_yaml($_);
                                  if ($success) {
                                      $_ = $decoded;
                                      last TRY_PARSING_AS_JSON_YAML;
                                  } else {
                                      warn "Failed trying to parse argv #$i as YAML: $e";
                                  }
                              }
                          }
                          $i++;
                      }
                  }
                  if (!$arg_spec->{greedy} && !$is_simple) {
                    TRY_PARSING_AS_JSON_YAML:
                      {
                          my ($success, $e, $decoded);
                          if ($per_arg_json) {
                              ($success, $e, $decoded) = _parse_json($val);
                              if ($success) {
                                  $val = $decoded;
                                  last TRY_PARSING_AS_JSON_YAML;
                              } else {
                                  warn "Failed trying to parse argv #$arg_spec->{pos} as JSON: $e";
                              }
                          }
                          if ($per_arg_yaml) {
                              ($success, $e, $decoded) = _parse_yaml($val);
                              if ($success) {
                                  $val = $decoded;
                                  last TRY_PARSING_AS_JSON_YAML;
                              } else {
                                  warn "Failed trying to parse argv #$arg_spec->{pos} as YAML: $e";
                              }
                          }
                      }
                  }
                  $rargs->{$name} = $val;
                  # we still call cmdline_on_getopt for this
                  if ($arg_spec->{cmdline_on_getopt}) {
                      if ($arg_spec->{greedy}) {
                          $arg_spec->{cmdline_on_getopt}->(
                              arg=>$name, fqarg=>$name, value=>$_, args=>$rargs,
                              opt=>undef, # this marks that value is retrieved from cmdline arg
                          ) for @$val;
                      } else {
                          $arg_spec->{cmdline_on_getopt}->(
                              arg=>$name, fqarg=>$name, value=>$val, args=>$rargs,
                              opt=>undef, # this marks that value is retrieved from cmdline arg
                          );
                      }
                  }
              }
          }
      }
  
      # 4. check missing required args
  
      my %missing_args;
      for my $arg (keys %$args_prop) {
          my $arg_spec = $args_prop->{$arg};
          if (!exists($rargs->{$arg})) {
              next unless $arg_spec->{req};
              # give a chance to hook to set missing arg
              if ($on_missing) {
                  next if $on_missing->(arg=>$arg, args=>$rargs, spec=>$arg_spec);
              }
              next if exists $rargs->{$arg};
              $missing_args{$arg} = 1;
          }
      }
  
      # 5. check 'deps', currently we only support 'arg' dep type
      {
          last unless $strict;
  
          for my $arg (keys %$args_prop) {
              my $arg_spec = $args_prop->{$arg};
              next unless exists $rargs->{$arg};
              next unless $arg_spec->{deps};
              my $dep_arg = $arg_spec->{deps}{arg};
              next unless $dep_arg;
              return [400, "You specify '$arg', but don't specify '$dep_arg' ".
                          "(upon which '$arg' depends)"]
                  unless exists $rargs->{$dep_arg};
          }
      }
  
      #$log->tracef("<- get_args_from_argv(), args=%s, remaining argv=%s",
      #             $rargs, $argv);
      [200, "OK", $rargs, {
          "func.missing_args" => [sort keys %missing_args],
          "func.gen_getopt_long_spec_result" => $genres,
      }];
  }
  
  1;
  # ABSTRACT: Get subroutine arguments from command line arguments (@ARGV)
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Sub::GetArgs::Argv - Get subroutine arguments from command line arguments (@ARGV)
  
  =head1 VERSION
  
  This document describes version 0.81 of Perinci::Sub::GetArgs::Argv (from Perl distribution Perinci-Sub-GetArgs-Argv), released on 2017-04-19.
  
  =head1 SYNOPSIS
  
   use Perinci::Sub::GetArgs::Argv;
  
   my $res = get_args_from_argv(argv=>\@ARGV, meta=>$meta, ...);
  
  =head1 DESCRIPTION
  
  This module provides C<get_args_from_argv()>, which parses command line
  arguments (C<@ARGV>) into subroutine arguments (C<%args>). This module is used
  by L<Perinci::CmdLine>. For explanation on how command-line options are
  processed, see Perinci::CmdLine's documentation.
  
  =head1 FUNCTIONS
  
  
  =head2 gen_getopt_long_spec_from_meta
  
  Usage:
  
   gen_getopt_long_spec_from_meta(%args) -> [status, msg, result, meta]
  
  Generate Getopt::Long spec from Rinci function metadata.
  
  This routine will produce a L<Getopt::Long> specification from Rinci function
  metadata, as well as some more data structure in the result metadata to help
  producing a command-line help/usage message.
  
  Function arguments will be mapped to command-line options with the same name,
  with non-alphanumeric characters changed to C<-> (C<-> is preferred over C<_>
  because it lets user avoid pressing Shift on popular keyboards). For example:
  C<file_size> becomes C<file-size>, C<file_size.max> becomes C<file-size-max>. If
  function argument option name clashes with command-line option or another
  existing option, it will be renamed to C<NAME-arg> (or C<NAME-arg2> and so on).
  For example: C<help> will become C<help-arg> (if C<common_opts> contains C<help>,
  that is).
  
  Each command-line alias (C<cmdline_aliases> property) in the argument
  specification will also be added as command-line option, except if it clashes
  with an existing option, in which case this function will warn and skip adding
  the alias. For more information about C<cmdline_aliases>, see C<Rinci::function>.
  
  For arguments with type of C<bool>, Getopt::Long will by default also
  automatically recognize C<--noNAME> or C<--no-NAME> in addition to C<--name>. So
  this function will also check those names for clashes.
  
  For arguments with type array of simple scalar, C<--NAME> can be specified more
  than once to append to the array.
  
  If C<per_arg_json> setting is active, and argument's schema is not a "required
  simple scalar" (e.g. an array, or a nullable string), then C<--NAME-json> will
  also be added to let users input undef (through C<--NAME-json null>) or a
  non-scalar value (e.g. C<--NAME-json '[1,2,3]'>). If this name conflicts with
  another existing option, a warning will be displayed and the option will not be
  added.
  
  If C<per_arg_yaml> setting is active, and argument's schema is not a "required
  simple scalar" (e.g. an array, or a nullable string), then C<--NAME-yaml> will
  also be added to let users input undef (through C<--NAME-yaml '~'>) or a
  non-scalar value (e.g. C<--NAME-yaml '[foo, bar]'>). If this name conflicts with
  another existing option, a warning will be displayed and the option will not be
  added. YAML can express a larger set of values, e.g. binary data, circular
  references, etc.
  
  Will produce a hash (Getopt::Long spec), with C<func.specmeta>, C<func.opts>,
  C<func.common_opts>, C<func.func_opts> that contain extra information
  (C<func.specmeta> is a hash of getopt spec name and a hash of extra information
  while C<func.*opts> lists all used option names).
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<args> => I<hash>
  
  Reference to hash which will store the result.
  
  =item * B<common_opts> => I<hash>
  
  Common options.
  
  A hash where the values are hashes containing these keys: C<getopt> (Getopt::Long
  option specification), C<handler> (Getopt::Long handler). Will be passed to
  C<get_args_from_argv()>. Example:
  
   {
       help => {
           getopt  => 'help|h|?',
           handler => sub { ... },
           summary => 'Display help and exit',
       },
       version => {
           getopt  => 'version|v',
           handler => sub { ... },
           summary => 'Display version and exit',
       },
   }
  
  =item * B<ignore_converted_code> => I<bool> (default: 0)
  
  Whether to ignore coderefs converted to string.
  
  Across network through JSON encoding, coderef in metadata (e.g. in
  C<cmdline_aliases> property) usually gets converted to string C<CODE>. In some
  cases, like for tab completion, this is pretty harmless so you can turn this
  option on. For example, in the case of C<cmdline_aliases>, the effect is just
  that command-line aliases code are not getting executed, but this is usually
  okay.
  
  =item * B<meta>* => I<hash>
  
  Rinci function metadata.
  
  =item * B<meta_is_normalized> => I<bool>
  
  =item * B<per_arg_json> => I<bool> (default: 0)
  
  Whether to add --NAME-json for non-simple arguments.
  
  Will also interpret command-line arguments as JSON if assigned to function
  arguments, if arguments' schema is not simple scalar.
  
  =item * B<per_arg_yaml> => I<bool> (default: 0)
  
  Whether to add --NAME-yaml for non-simple arguments.
  
  Will also interpret command-line arguments as YAML if assigned to function
  arguments, if arguments' schema is not simple scalar.
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (any)
  
  
  =head2 get_args_from_argv
  
  Usage:
  
   get_args_from_argv(%args) -> [status, msg, result, meta]
  
  Get subroutine arguments (%args) from command-line arguments (@ARGV).
  
  Using information in Rinci function metadata's C<args> property, parse command
  line arguments C<@argv> into hash C<%args>, suitable for passing into subroutines.
  
  Currently uses L<Getopt::Long>'s C<GetOptions> to do the parsing.
  
  As with GetOptions, this function modifies its C<argv> argument, so you might
  want to copy the original C<argv> first (or pass a copy instead) if you want to
  preserve the original.
  
  See also: gen_getopt_long_spec_from_meta() which is the routine that generates
  the specification.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<allow_extra_elems> => I<bool> (default: 0)
  
  Allow extra/unassigned elements in argv.
  
  If set to 1, then if there are array elements unassigned to one of the
  arguments, instead of generating an error, this function will just ignore them.
  
  This option will be passed to Perinci::Sub::GetArgs::Array's allow_extra_elems.
  
  =item * B<args> => I<hash>
  
  Specify input args, with some arguments preset.
  
  =item * B<argv> => I<array[str]>
  
  If not specified, defaults to @ARGV
  
  =item * B<common_opts> => I<hash>
  
  Common options.
  
  A hash where the values are hashes containing these keys: C<getopt> (Getopt::Long
  option specification), C<handler> (Getopt::Long handler). Will be passed to
  C<get_args_from_argv()>. Example:
  
   {
       help => {
           getopt  => 'help|h|?',
           handler => sub { ... },
           summary => 'Display help and exit',
       },
       version => {
           getopt  => 'version|v',
           handler => sub { ... },
           summary => 'Display version and exit',
       },
   }
  
  =item * B<ignore_converted_code> => I<bool> (default: 0)
  
  Whether to ignore coderefs converted to string.
  
  Across network through JSON encoding, coderef in metadata (e.g. in
  C<cmdline_aliases> property) usually gets converted to string C<CODE>. In some
  cases, like for tab completion, this is harmless so you can turn this option on.
  
  =item * B<meta>* => I<hash>
  
  =item * B<meta_is_normalized> => I<bool> (default: 0)
  
  Can be set to 1 if your metadata is normalized, to avoid duplicate effort.
  
  =item * B<on_missing_required_args> => I<code>
  
  Execute code when there is missing required args.
  
  This can be used to give a chance to supply argument value from other sources if
  not specified by command-line options. Perinci::CmdLine, for example, uses this
  hook to supply value from STDIN or file contents (if argument has C<cmdline_src>
  specification key set).
  
  This hook will be called for each missing argument. It will be supplied hash
  arguments: (arg => $the_missing_argument_name, args =>
  $the_resulting_args_so_far, spec => $the_arg_spec).
  
  The hook can return true if it succeeds in making the missing situation
  resolved. In this case, this function will not report the argument as missing.
  
  =item * B<per_arg_json> => I<bool> (default: 0)
  
  Whether to recognize --ARGNAME-json.
  
  This is useful for example if you want to specify a value which is not
  expressible from the command-line, like 'undef'.
  
   % script.pl --name-json 'null'
  
  But every other string will need to be quoted:
  
   % script.pl --name-json '"foo"'
  
  See also: per_arg_yaml. You should enable just one instead of turning on both.
  
  =item * B<per_arg_yaml> => I<bool> (default: 0)
  
  Whether to recognize --ARGNAME-yaml.
  
  This is useful for example if you want to specify a value which is not
  expressible from the command-line, like 'undef'.
  
   % script.pl --name-yaml '~'
  
  See also: per_arg_json. You should enable just one instead of turning on both.
  
  =item * B<strict> => I<bool> (default: 1)
  
  Strict mode.
  
  If set to 0, will still return parsed argv even if there are parsing errors
  (reported by Getopt::Long). If set to 1 (the default), will die upon error.
  
  Normally you would want to use strict mode, for more error checking. Setting off
  strict is used by, for example, Perinci::Sub::Complete during completion where
  the command-line might still be incomplete.
  
  Should probably be named C<ignore_errors>. :-)
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (any)
  
  
  Error codes:
  
  =over
  
  =item * 400 - Error in Getopt::Long option specification, e.g. in common_opts.
  
  =item * 500 - failure in GetOptions, meaning argv is not valid according to metadata
  specification (only if 'strict' mode is enabled).
  
  =item * 501 - coderef in cmdline_aliases got converted into a string, probably because
  the metadata was transported (e.g. through Riap::HTTP/Riap::Simple).
  
  =back
  
  =head1 FAQ
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Sub-GetArgs-Argv>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Perinci-Sub-GetArgs-Argv>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Sub-GetArgs-Argv>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017, 2016, 2015, 2014, 2013, 2012, 2011 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_SUB_GETARGS_ARGV

    $main::fatpacked{"Perinci/Sub/GetArgs/Array.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_SUB_GETARGS_ARRAY';
  package Perinci::Sub::GetArgs::Array;
  
  our $DATE = '2016-12-10'; # DATE
  our $VERSION = '0.16'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  #use Log::Any '$log';
  
  use Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(get_args_from_array);
  
  our %SPEC;
  
  $SPEC{':package'} = {
      v => 1.1,
  };
  
  $SPEC{get_args_from_array} = {
      v => 1.1,
      summary => 'Get subroutine arguments (%args) from array',
      description => <<'_',
  
  Using information in metadata's `args` property (particularly the `pos` and
  `greedy` arg type clauses), extract arguments from an array into a hash
  `\%args`, suitable for passing into subs.
  
  Example:
  
      my $meta = {
          v => 1.1,
          summary => 'Multiply 2 numbers (a & b)',
          args => {
              a => {schema=>'num*', pos=>0},
              b => {schema=>'num*', pos=>1},
          }
      }
  
  then `get_args_from_array(array=>[2, 3], meta=>$meta)` will produce:
  
      [200, "OK", {a=>2, b=>3}]
  
  _
      args => {
          array => {
              schema => ['array*' => {}],
              req => 1,
              description => <<'_',
  
  NOTE: array will be modified/emptied (elements will be taken from the array as
  they are put into the resulting args). Copy your array first if you want to
  preserve its content.
  
  _
          },
          meta => {
              schema => ['hash*' => {}],
              req => 1,
          },
          meta_is_normalized => {
              summary => 'Can be set to 1 if your metadata is normalized, '.
                  'to avoid duplicate effort',
              schema => 'bool',
              default => 0,
          },
          allow_extra_elems => {
              schema => ['bool' => {default=>0}],
              summary => 'Allow extra/unassigned elements in array',
              description => <<'_',
  
  If set to 1, then if there are array elements unassigned to one of the arguments
  (due to missing `pos`, for example), instead of generating an error, the
  function will just ignore them.
  
  _
          },
      },
  };
  sub get_args_from_array {
      my %fargs = @_;
      my $ary  = $fargs{array} or return [400, "Please specify array"];
      my $meta = $fargs{meta} or return [400, "Please specify meta"];
      unless ($fargs{meta_is_normalized}) {
          require Perinci::Sub::Normalize;
          $meta = Perinci::Sub::Normalize::normalize_function_metadata(
              $meta);
      }
      my $allow_extra_elems = $fargs{allow_extra_elems} // 0;
  
      my $rargs = {};
  
      my $args_p = $meta->{args} // {};
      for my $i (reverse 0..@$ary-1) {
          #$log->tracef("i=$i");
          while (my ($a, $as) = each %$args_p) {
              my $o = $as->{pos};
              if (defined($o) && $o == $i) {
                  if ($as->{greedy}) {
                      my $type = $as->{schema}[0];
                      my @elems = splice(@$ary, $i);
                      if ($type eq 'array') {
                          $rargs->{$a} = \@elems;
                      } elsif ($type eq 'hash') {
                          $rargs->{$a} = {};
                          for my $j (0..$#elems) {
                              my $elem = $elems[$j];
                              unless ($elem =~ /(.*?)=(.*)/) {
                                  return [400, "Invalid key=value pair in element #$j"];
                              }
                              $rargs->{$a}{$1} = $2;
                          }
                      } else {
                          $rargs->{$a} = join " ", @elems;
                      }
                      #$log->tracef("assign %s to arg->{$a}", $rargs->{$a});
                  } else {
                      $rargs->{$a} = splice(@$ary, $i, 1);
                      #$log->tracef("assign %s to arg->{$a}", $rargs->{$a});
                  }
              }
          }
      }
  
      return [400, "There are extra, unassigned elements in array: [".
                  join(", ", @$ary)."]"] if @$ary && !$allow_extra_elems;
  
      [200, "OK", $rargs];
  }
  
  1;
  # ABSTRACT: Get subroutine arguments (%args) from array
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Sub::GetArgs::Array - Get subroutine arguments (%args) from array
  
  =head1 VERSION
  
  This document describes version 0.16 of Perinci::Sub::GetArgs::Array (from Perl distribution Perinci-Sub-GetArgs-Array), released on 2016-12-10.
  
  =head1 SYNOPSIS
  
   use Perinci::Sub::GetArgs::Array;
  
   my $res = get_args_from_array(array=>\@ary, meta=>$meta, ...);
  
  =head1 DESCRIPTION
  
  This module provides get_args_from_array(). This module is used by, among
  others, L<Perinci::Sub::GetArgs::Argv>.
  
  =head1 FUNCTIONS
  
  
  =head2 get_args_from_array(%args) -> [status, msg, result, meta]
  
  Get subroutine arguments (%args) from array.
  
  Using information in metadata's C<args> property (particularly the C<pos> and
  C<greedy> arg type clauses), extract arguments from an array into a hash
  C<\%args>, suitable for passing into subs.
  
  Example:
  
   my $meta = {
       v => 1.1,
       summary => 'Multiply 2 numbers (a & b)',
       args => {
           a => {schema=>'num*', pos=>0},
           b => {schema=>'num*', pos=>1},
       }
   }
  
  then C<< get_args_from_array(array=E<gt>[2, 3], meta=E<gt>$meta) >> will produce:
  
   [200, "OK", {a=>2, b=>3}]
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<allow_extra_elems> => I<bool> (default: 0)
  
  Allow extra/unassigned elements in array.
  
  If set to 1, then if there are array elements unassigned to one of the arguments
  (due to missing C<pos>, for example), instead of generating an error, the
  function will just ignore them.
  
  =item * B<array>* => I<array>
  
  NOTE: array will be modified/emptied (elements will be taken from the array as
  they are put into the resulting args). Copy your array first if you want to
  preserve its content.
  
  =item * B<meta>* => I<hash>
  
  =item * B<meta_is_normalized> => I<bool> (default: 0)
  
  Can be set to 1 if your metadata is normalized, to avoid duplicate effort.
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (any)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Sub-GetArgs-Array>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Perinci-Sub-GetArgs-Array>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Sub-GetArgs-Array>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_SUB_GETARGS_ARRAY

    $main::fatpacked{"Perinci/Sub/Normalize.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_SUB_NORMALIZE';
  package Perinci::Sub::Normalize;
  
  our $DATE = '2016-12-11'; # DATE
  our $VERSION = '0.19'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         normalize_function_metadata
                 );
  
  sub _normalize{
      my ($meta, $ver, $opts, $proplist, $nmeta, $prefix, $modprefix) = @_;
  
      my $opt_aup = $opts->{allow_unknown_properties};
      my $opt_nss = $opts->{normalize_sah_schemas};
      my $opt_rip = $opts->{remove_internal_properties};
  
      if (defined $ver) {
          defined($meta->{v}) && $meta->{v} eq $ver
              or die "$prefix: Metadata version must be $ver";
      }
  
    KEY:
      for my $k (keys %$meta) {
          die "Invalid prop/attr syntax '$k', must be word/dotted-word only"
              unless $k =~ /\A(\w+)(?:\.(\w+(?:\.\w+)*))?(?:\((\w+)\))?\z/;
  
          my ($prop, $attr);
          if (defined $3) {
              $prop = $1;
              $attr = defined($2) ? "$2.alt.lang.$3" : "alt.lang.$3";
          } else {
              $prop = $1;
              $attr = $2;
          }
  
          my $nk = "$prop" . (defined($attr) ? ".$attr" : "");
  
          # strip property/attr started with _
          if ($prop =~ /\A_/ || defined($attr) && $attr =~ /\A_|\._/) {
              unless ($opt_rip) {
                  $nmeta->{$nk} = $meta->{$k};
              }
              next KEY;
          }
  
          my $prop_proplist = $proplist->{$prop};
  
          # try to load module that declare new props first
          if (!$opt_aup && !$prop_proplist) {
              $modprefix //= $prefix;
              my $mod = "Perinci/Sub/Property$modprefix/$prop.pm";
              eval { require $mod };
              # hide technical error message from require()
              if ($@) {
                  die "Unknown property '$prefix/$prop' (and couldn't ".
                      "load property module '$mod'): $@" if $@;
              }
              $prop_proplist = $proplist->{$prop};
          }
          die "Unknown property '$prefix/$prop'"
              unless $opt_aup || $prop_proplist;
  
          if ($prop_proplist && $prop_proplist->{_prop}) {
              die "Property '$prefix/$prop' must be a hash"
                  unless ref($meta->{$k}) eq 'HASH';
              $nmeta->{$nk} = {};
              _normalize(
                  $meta->{$k},
                  $prop_proplist->{_ver},
                  $opts,
                  $prop_proplist->{_prop},
                  $nmeta->{$nk},
                  "$prefix/$prop",
              );
          } elsif ($prop_proplist && $prop_proplist->{_elem_prop}) {
              die "Property '$prefix/$prop' must be an array"
                  unless ref($meta->{$k}) eq 'ARRAY';
              $nmeta->{$nk} = [];
              my $i = 0;
              for (@{ $meta->{$k} }) {
                  my $href = {};
                  if (ref($_) eq 'HASH') {
                      _normalize(
                          $_,
                          $prop_proplist->{_ver},
                          $opts,
                          $prop_proplist->{_elem_prop},
                          $href,
                          "$prefix/$prop/$i",
                      );
                      push @{ $nmeta->{$nk} }, $href;
                  } else {
                      push @{ $nmeta->{$nk} }, $_;
                  }
                  $i++;
              }
          } elsif ($prop_proplist && $prop_proplist->{_value_prop}) {
              die "Property '$prefix/$prop' must be a hash"
                  unless ref($meta->{$k}) eq 'HASH';
              $nmeta->{$nk} = {};
              for (keys %{ $meta->{$k} }) {
                  $nmeta->{$nk}{$_} = {};
                  die "Property '$prefix/$prop/$_' must be a hash"
                      unless ref($meta->{$k}{$_}) eq 'HASH';
                  _normalize(
                      $meta->{$k}{$_},
                      $prop_proplist->{_ver},
                      $opts,
                      $prop_proplist->{_value_prop},
                      $nmeta->{$nk}{$_},
                      "$prefix/$prop/$_",
                      ($prop eq 'args' ? "$prefix/arg" : undef),
                  );
              }
          } else {
              if ($k eq 'schema' && $opt_nss) { # XXX currently hardcoded
                  require Data::Sah::Normalize;
                  $nmeta->{$nk} = Data::Sah::Normalize::normalize_schema(
                      $meta->{$k});
              } else {
                  $nmeta->{$nk} = $meta->{$k};
              }
          }
      }
  
      $nmeta;
  }
  
  sub normalize_function_metadata($;$) {
      my ($meta, $opts) = @_;
  
      $opts //= {};
  
      $opts->{allow_unknown_properties}    //= 0;
      $opts->{normalize_sah_schemas}       //= 1;
      $opts->{remove_internal_properties}  //= 0;
  
      require Sah::Schema::rinci::function_meta;
      my $sch = $Sah::Schema::rinci::function_meta::schema;
      my $sch_proplist = $sch->[1]{_prop}
          or die "BUG: Rinci schema structure changed (1a)";
  
      _normalize($meta, 1.1, $opts, $sch_proplist, {}, '');
  }
  
  1;
  # ABSTRACT: Normalize Rinci function metadata
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Sub::Normalize - Normalize Rinci function metadata
  
  =head1 VERSION
  
  This document describes version 0.19 of Perinci::Sub::Normalize (from Perl distribution Perinci-Sub-Normalize), released on 2016-12-11.
  
  =head1 SYNOPSIS
  
   use Perinci::Sub::Normalize qw(normalize_function_metadata);
  
   my $nmeta = normalize_function_metadata($meta);
  
  =head1 FUNCTIONS
  
  =head2 normalize_function_metadata($meta[ , \%opts ]) => HASH
  
  Normalize and check L<Rinci> function metadata C<$meta>. Return normalized
  metadata, which is a shallow copy of C<$meta>. Die on error.
  
  Available options:
  
  =over
  
  =item * allow_unknown_properties => BOOL (default: 0)
  
  If set to true, will die if there are unknown properties.
  
  =item * normalize_sah_schemas => BOOL (default: 1)
  
  By default, L<Sah> schemas e.g. in C<result/schema> or C<args/*/schema> property
  is normalized using L<Data::Sah>'s C<normalize_schema>. Set this to 0 if you
  don't want this.
  
  =item * remove_internal_properties => BOOL (default: 0)
  
  If set to 1, all properties and attributes starting with underscore (C<_>) with
  will be stripped. According to L<DefHash> specification, they are ignored and
  usually contain notes/comments/extra information.
  
  =back
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Sub-Normalize>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Perinci-Sub-Normalize>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Sub-Normalize>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Rinci::function>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_SUB_NORMALIZE

    $main::fatpacked{"Perinci/Sub/To/CLIDocData.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_SUB_TO_CLIDOCDATA';
  package Perinci::Sub::To::CLIDocData;
  
  our $DATE = '2016-10-27'; # DATE
  our $VERSION = '0.28'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Perinci::Object;
  use Perinci::Sub::Util qw(err);
  
  our %SPEC;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(gen_cli_doc_data_from_meta);
  
  sub _has_cats {
      for my $spec (@{ $_[0] }) {
          for (@{ $spec->{tags} // [] }) {
              my $tag_name = ref($_) ? $_->{name} : $_;
              if ($tag_name =~ /^category:/) {
                  return 1;
              }
          }
      }
      0;
  }
  
  sub _add_category_from_spec {
      my ($cats_spec, $thing, $spec, $noun, $has_cats) = @_;
      my @cats;
      for (@{ $spec->{tags} // [] }) {
          my $tag_name = ref($_) ? $_->{name} : $_;
          if ($tag_name =~ /^category(\d+)?:(.+)/) {
              my $cat = ucfirst($2);
              my $ordering = $1 // 50;
              $cat =~ s/-/ /g;
              $cat .= " " . $noun;
              push @cats, [$cat, $ordering]; # name, ordering
          }
      }
      if (!@cats) {
          @cats = [$has_cats ? "Other $noun" : ucfirst($noun), 99]; # XXX translatable?
      }
  
      # old, will be removed someday
      $thing->{category} = $cats[0][0];
      # new/current
      $thing->{categories} = [map {$_->[0]} @cats];
  
      $cats_spec->{$_->[0]}{order} //= $_->[1] for @cats;
  }
  
  sub _add_default_from_arg_spec {
      my ($opt, $arg_spec) = @_;
      if (exists $arg_spec->{default}) {
          $opt->{default} = $arg_spec->{default};
      } elsif ($arg_spec->{schema} && exists($arg_spec->{schema}[1]{default})) {
          $opt->{default} = $arg_spec->{schema}[1]{default};
      }
  }
  
  sub _dash_prefix {
      length($_[0]) > 1 ? "--$_[0]" : "-$_[0]";
  }
  
  sub _fmt_opt {
      my $spec = shift;
      my @ospecs = @_;
      my @res;
      my $i = 0;
      for my $ospec (@ospecs) {
          my $j = 0;
          my $parsed = $ospec->{parsed};
          for (@{ $parsed->{opts} }) {
              my $opt = _dash_prefix($_);
              if ($i==0 && $j==0) {
                  if ($parsed->{type}) {
                      if ($spec->{'x.schema.entity'}) {
                          $opt .= "=".$spec->{'x.schema.entity'};
                      } elsif ($spec->{'x.schema.element_entity'}) {
                          $opt .= "=".$spec->{'x.schema.element_entity'};
                      } else {
                          $opt .= "=$parsed->{type}";
                      }
                  }
                  # mark required option with a '*'
                  $opt .= "*" if $spec->{req} && !$ospec->{is_base64} &&
                      !$ospec->{is_json} && !$ospec->{is_yaml};
              }
              push @res, $opt;
              $j++;
          }
          $i++;
      }
      join ", ", @res;
  }
  
  $SPEC{gen_cli_doc_data_from_meta} = {
      v => 1.1,
      summary => 'From Rinci function metadata, generate structure convenient '.
          'for producing CLI documentation (help/usage/POD)',
      description => <<'_',
  
  This function calls <pm:Perinci::Sub::GetArgs::Argv>'s
  `gen_getopt_long_spec_from_meta()` (or receive its result as an argument, if
  passed, to avoid calling the function twice) and post-processes it: produce
  command usage line, format the options, include information from metadata, group
  the options by category. It also selects examples in the `examples` property
  which are applicable to CLI environment and format them.
  
  The resulting data structure is convenient to use when one wants to produce a
  documentation for CLI program (including help/usage message and POD).
  
  _
      args => {
          meta => {
              schema => 'hash*', # XXX rifunc
              req => 1,
              pos => 0,
          },
          meta_is_normalized => {
              schema => 'bool*',
          },
          common_opts => {
              summary => 'Will be passed to gen_getopt_long_spec_from_meta()',
              schema  => 'hash*',
          },
          ggls_res => {
              summary => 'Full result from gen_getopt_long_spec_from_meta()',
              schema  => 'array*', # XXX envres
              description => <<'_',
  
  If you already call <pm:Perinci::Sub::GetArgs::Argv>'s
  `gen_getopt_long_spec_from_meta()`, you can pass the _full_ enveloped result
  here, to avoid calculating twice. What will be useful for the function is the
  extra result in result metadata (`func.*` keys in `$res->[3]` hash).
  
  _
          },
          per_arg_json => {
              schema => 'bool',
              summary => 'Pass per_arg_json=1 to Perinci::Sub::GetArgs::Argv',
          },
          per_arg_yaml => {
              schema => 'bool',
              summary => 'Pass per_arg_json=1 to Perinci::Sub::GetArgs::Argv',
          },
          lang => {
              schema => 'str*',
          },
      },
      result => {
          schema => 'hash*',
      },
  };
  sub gen_cli_doc_data_from_meta {
      require Getopt::Long::Negate::EN;
  
      my %args = @_;
  
      my $lang = $args{lang};
      my $meta = $args{meta} or return [400, 'Please specify meta'];
      my $common_opts = $args{common_opts};
      unless ($args{meta_is_normalized}) {
          require Perinci::Sub::Normalize;
          $meta = Perinci::Sub::Normalize::normalize_function_metadata($meta);
      }
      my $ggls_res = $args{ggls_res} // do {
          require Perinci::Sub::GetArgs::Argv;
          Perinci::Sub::GetArgs::Argv::gen_getopt_long_spec_from_meta(
              meta=>$meta, meta_is_normalized=>1, common_opts=>$common_opts,
              per_arg_json => $args{per_arg_json},
              per_arg_yaml => $args{per_arg_yaml},
          );
      };
      $ggls_res->[0] == 200 or return $ggls_res;
  
      my $args_prop = $meta->{args} // {};
      my $clidocdata = {
          option_categories => {},
          example_categories => {},
      };
  
      # generate usage line
      {
          my @args;
          my %args_prop = %$args_prop; # copy because we want to iterate & delete
          my $max_pos = -1;
          for (values %args_prop) {
              $max_pos = $_->{pos}
                  if defined($_->{pos}) && $_->{pos} > $max_pos;
          }
          my $pos = 0;
          while ($pos <= $max_pos) {
              my ($arg, $arg_spec);
              for (keys %args_prop) {
                  $arg_spec = $args_prop{$_};
                  if (defined($arg_spec->{pos}) && $arg_spec->{pos}==$pos) {
                      $arg = $_;
                      last;
                  }
              }
              $pos++;
              next unless defined($arg);
              if ($arg_spec->{greedy}) {
                  # try to find the singular form
                  $arg = $arg_spec->{'x.name.singular'}
                      if $arg_spec->{'x.name.is_plural'} &&
                      defined $arg_spec->{'x.name.singular'};
              }
              if ($arg_spec->{req}) {
                  push @args, "<$arg>";
              } else {
                  push @args, "[$arg]";
              }
              $args[-1] .= " ..." if $arg_spec->{greedy};
              delete $args_prop{$arg};
          }
          unshift @args, "[options]" if keys(%args_prop) || keys(%$common_opts); # XXX translatable?
          $clidocdata->{usage_line} = "[[prog]]".
              (@args ? " ".join(" ", @args) : "");
      }
  
      # generate list of options
      my %opts;
      {
          my $ospecs = $ggls_res->[3]{'func.specmeta'};
          # separate groupable aliases because they will be merged with the
          # argument options
          my (@k, @k_aliases);
        OSPEC1:
          for (sort keys %$ospecs) {
              my $ospec = $ospecs->{$_};
              {
                  last unless $ospec->{is_alias};
                  next if $ospec->{is_code};
                  my $arg_spec = $args_prop->{$ospec->{arg}};
                  my $alias_spec = $arg_spec->{cmdline_aliases}{$ospec->{alias}};
                  next if $alias_spec->{summary};
                  push @k_aliases, $_;
                  next OSPEC1;
              }
              push @k, $_;
          }
  
          my %negs; # key=arg, only show one negation form for each arg option
  
        OSPEC2:
          while (@k) {
              my $k = shift @k;
              my $ospec = $ospecs->{$k};
              my $opt;
              my $optkey;
  
              if ($ospec->{is_alias} || defined($ospec->{arg})) {
                  my $arg_spec;
                  my $alias_spec;
  
                  if ($ospec->{is_alias}) {
                      # non-groupable alias
  
                      $arg_spec = $args_prop->{ $ospec->{arg} };
                      $alias_spec = $arg_spec->{cmdline_aliases}{$ospec->{alias}};
                      my $rimeta = rimeta($alias_spec);
                      $optkey = _fmt_opt($arg_spec, $ospec);
                      $opt = {
                          opt_parsed => $ospec->{parsed},
                          orig_opt => $k,
                          is_alias => 1,
                          alias_for => $ospec->{alias_for},
                          summary => $rimeta->langprop({lang=>$lang}, 'summary') //
                              "Alias for "._dash_prefix($ospec->{parsed}{opts}[0]),
                          description =>
                              $rimeta->langprop({lang=>$lang}, 'description'),
                      };
                  } else {
                      # an option for argument
  
                      $arg_spec = $args_prop->{$ospec->{arg}};
                      my $rimeta = rimeta($arg_spec);
                      $opt = {
                          opt_parsed => $ospec->{parsed},
                          orig_opt => $k,
                      };
  
                      # for bool, only display either the positive (e.g. --bool)
                      # or the negative (e.g. --nobool) depending on the default
                      if (defined($ospec->{is_neg})) {
                          my $default = $arg_spec->{default} //
                              $arg_spec->{schema}[1]{default};
                          next OSPEC2 if  $default && !$ospec->{is_neg};
                          next OSPEC2 if !$default &&  $ospec->{is_neg};
                          if ($ospec->{is_neg}) {
                              next OSPEC2 if $negs{$ospec->{arg}}++;
                          }
                      }
  
                      if ($ospec->{is_neg}) {
                          # for negative option, use negative summary instead of
                          # regular (positive sentence) summary
                          $opt->{summary} =
                              $rimeta->langprop({lang=>$lang}, 'summary.alt.bool.not');
                      } elsif (defined $ospec->{is_neg}) {
                          # for boolean option which we show the positive, show
                          # the positive summary if available
                          $opt->{summary} =
                              $rimeta->langprop({lang=>$lang}, 'summary.alt.bool.yes') //
                                  $rimeta->langprop({lang=>$lang}, 'summary');
                      } elsif (($ospec->{parsed}{type}//'') eq 's@') {
                          # for array of string that can be specified via multiple
                          # --opt, show singular version of summary if available.
                          # otherwise show regular summary.
                          $opt->{summary} =
                              $rimeta->langprop({lang=>$lang}, 'summary.alt.plurality.singular') //
                                  $rimeta->langprop({lang=>$lang}, 'summary');
                      } else {
                          $opt->{summary} =
                              $rimeta->langprop({lang=>$lang}, 'summary');
                      }
                      $opt->{description} =
                          $rimeta->langprop({lang=>$lang}, 'description');
  
                      # find aliases that can be grouped together with this option
                      my @aliases;
                      my $j = $#k_aliases;
                      while ($j >= 0) {
                          my $aospec = $ospecs->{ $k_aliases[$j] };
                          {
                              last unless $aospec->{arg} eq $ospec->{arg};
                              push @aliases, $aospec;
                              splice @k_aliases, $j, 1;
                          }
                          $j--;
                      }
  
                      $optkey = _fmt_opt($arg_spec, $ospec, @aliases);
                  }
  
                  $opt->{arg_spec} = $arg_spec;
                  $opt->{alias_spec} = $alias_spec if $alias_spec;
  
                  # include keys from func.specmeta
                  for (qw/arg fqarg is_base64 is_json is_yaml/) {
                      $opt->{$_} = $ospec->{$_} if defined $ospec->{$_};
                  }
  
                  # include keys from arg_spec
                  for (qw/req pos greedy is_password links tags/) {
                      $opt->{$_} = $arg_spec->{$_} if defined $arg_spec->{$_};
                  }
  
                  {
                      # we don't want argument options to end up in "Other" like
                      # --help or -v, they are put at the end. so if an argument
                      # option does not have category, we'll put it in the "main"
                      # category.
                      local $arg_spec->{tags} = ['category0:main']
                          if !$arg_spec->{tags} || !@{$arg_spec->{tags}};
                      _add_category_from_spec($clidocdata->{option_categories},
                                              $opt, $arg_spec, "options", 1);
                  }
                  _add_default_from_arg_spec($opt, $arg_spec);
  
              } else {
                  # option from common_opts
  
                  my $spec = $common_opts->{$ospec->{common_opt}};
  
                  # for bool, only display either the positive (e.g. --bool)
                  # or the negative (e.g. --nobool) depending on the default
                  my $show_neg = $ospec->{parsed}{is_neg} && $spec->{default};
  
                  local $ospec->{parsed}{opts} = do {
                      # XXX check if it's single-letter, get first
                      # non-single-letter
                      my @opts = Getopt::Long::Negate::EN::negations_for_option(
                          $ospec->{parsed}{opts}[0]);
                      [ $opts[0] ];
                  } if $show_neg;
  
                  $optkey = _fmt_opt($spec, $ospec);
                  my $rimeta = rimeta($spec);
                  $opt = {
                      opt_parsed => $ospec->{parsed},
                      orig_opt => $k,
                      common_opt => $ospec->{common_opt},
                      common_opt_spec => $spec,
                      summary => $show_neg ?
                          $rimeta->langprop({lang=>$lang}, 'summary.alt.bool.not') :
                              $rimeta->langprop({lang=>$lang}, 'summary'),
                      (schema => $spec->{schema}) x !!$spec->{schema},
                      ('x.schema.entity' => $spec->{'x.schema.entity'}) x !!$spec->{'x.schema.entity'},
                      ('x.schema.element_entity' => $spec->{'x.schema.element_entity'}) x !!$spec->{'x.schema.element_entity'},
                      description =>
                          $rimeta->langprop({lang=>$lang}, 'description'),
                      (default => $spec->{default}) x !!(exists($spec->{default}) && !$show_neg),
                  };
  
                  _add_category_from_spec($clidocdata->{option_categories},
                                          $opt, $spec, "options", 1);
  
              }
  
              $opts{$optkey} = $opt;
          }
  
          # link ungrouped alias to its main opt
        OPT1:
          for my $k (keys %opts) {
              my $opt = $opts{$k};
              next unless $opt->{is_alias} || $opt->{is_base64} ||
                  $opt->{is_json} || $opt->{is_yaml};
              for my $k2 (keys %opts) {
                  my $arg_opt = $opts{$k2};
                  next if $arg_opt->{is_alias} || $arg_opt->{is_base64} ||
                      $arg_opt->{is_json} || $arg_opt->{is_yaml};
                  next unless defined($arg_opt->{arg}) &&
                      $arg_opt->{arg} eq $opt->{arg};
                  $opt->{main_opt} = $k2;
                  next OPT1;
              }
          }
  
      }
      $clidocdata->{opts} = \%opts;
  
      # filter and format examples
      my @examples;
      {
          my $examples = $meta->{examples} // [];
          my $has_cats = _has_cats($examples);
  
          for my $eg (@$examples) {
              my $rimeta = rimeta($eg);
              my $argv;
              my $cmdline;
              if (defined($eg->{src})) {
                  # we only show shell command examples
                  if ($eg->{src_plang} =~ /^(sh|bash)$/) {
                      $cmdline = $eg->{src};
                  } else {
                      next;
                  }
              } else {
                  require String::ShellQuote;
                  if ($eg->{argv}) {
                      $argv = $eg->{argv};
                  } else {
                      require Perinci::Sub::ConvertArgs::Argv;
                      my $res = Perinci::Sub::ConvertArgs::Argv::convert_args_to_argv(
                          args => $eg->{args}, meta => $meta, use_pos => 1);
                      return err($res, 500, "Can't convert args to argv")
                          unless $res->[0] == 200;
                      $argv = $res->[2];
                  }
                  $cmdline = "[[prog]]";
                  for my $arg (@$argv) {
                      my $qarg = String::ShellQuote::shell_quote($arg);
                      $cmdline .= " $qarg"; # XXX markup with color?
                  }
              }
              my $egdata = {
                  cmdline      => $cmdline,
                  summary      => $rimeta->langprop({lang=>$lang}, 'summary'),
                  description  => $rimeta->langprop({lang=>$lang}, 'description'),
                  example_spec => $eg,
              };
              # XXX show result from $eg
              _add_category_from_spec($clidocdata->{example_categories},
                                      $egdata, $eg, "examples", $has_cats);
              push @examples, $egdata;
          }
      }
      $clidocdata->{examples} = \@examples;
  
      [200, "OK", $clidocdata];
  }
  
  1;
  # ABSTRACT: From Rinci function metadata, generate structure convenient for producing CLI documentation (help/usage/POD)
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Sub::To::CLIDocData - From Rinci function metadata, generate structure convenient for producing CLI documentation (help/usage/POD)
  
  =head1 VERSION
  
  This document describes version 0.28 of Perinci::Sub::To::CLIDocData (from Perl distribution Perinci-Sub-To-CLIDocData), released on 2016-10-27.
  
  =head1 SYNOPSIS
  
   use Perinci::Sub::To::CLIDocData qw(gen_cli_doc_data_from_meta);
   my $clidocdata = gen_cli_doc_data_from_meta(meta => $meta);
  
  Sample function metadata (C<$meta>):
  
   {
     args => {
       bool1 => {
                  cmdline_aliases => { z => { summary => "This is summary for option `-z`" } },
                  schema => "bool",
                  summary => "Another bool option",
                  tags => ["category:cat1"],
                },
       flag1 => {
                  cmdline_aliases => { f => {} },
                  schema => ["bool", "is", 1],
                  tags => ["category:cat1"],
                },
       str1  => {
                  pos => 0,
                  req => 1,
                  schema => "str*",
                  summary => "A required option as well as positional argument",
                },
     },
     examples => [
       {
         argv    => ["a value", "--bool1"],
         summary => "Summary for an example",
         test    => 0,
       },
     ],
     summary => "Function summary",
     v => 1.1,
   }
  
  Sample result:
  
   do {
     my $a = [
       200,
       "OK",
       {
         example_categories => { Examples => { order => 99 } },
         examples => [
           {
             categories   => ["Examples"],
             category     => "Examples",
             cmdline      => "[[prog]] 'a value' --bool1",
             description  => undef,
             example_spec => {
                               argv    => ["a value", "--bool1"],
                               summary => "Summary for an example",
                               test    => 0,
                             },
             summary      => "Summary for an example",
           },
         ],
         option_categories => { "Cat1 options" => { order => 50 }, "Main options" => { order => 0 } },
         opts => {
           "--bool1" => {
             arg         => "bool1",
             arg_spec    => {
                              cmdline_aliases => { z => { summary => "This is summary for option `-z`" } },
                              schema => ["bool", {}, {}],
                              summary => "Another bool option",
                              tags => ["category:cat1"],
                            },
             categories  => ["Cat1 options"],
             category    => "Cat1 options",
             description => undef,
             fqarg       => "bool1",
             opt_parsed  => { opts => ["bool1"] },
             orig_opt    => "bool1",
             summary     => "Another bool option",
             tags        => 'fix',
           },
           "--flag1, -f" => {
             arg         => "flag1",
             arg_spec    => {
                              cmdline_aliases => { f => {} },
                              schema => ["bool", { is => 1 }, {}],
                              tags => ["category:cat1"],
                            },
             categories  => ["Cat1 options"],
             category    => "Cat1 options",
             description => undef,
             fqarg       => "flag1",
             opt_parsed  => { opts => ["flag1"] },
             orig_opt    => "flag1",
             summary     => undef,
             tags        => 'fix',
           },
           "--str1=s*" => {
             arg => "str1",
             arg_spec => {
               pos => 0,
               req => 1,
               schema => ["str", { req => 1 }, {}],
               summary => "A required option as well as positional argument",
             },
             categories => ["Main options"],
             category => "Main options",
             description => undef,
             fqarg => "str1",
             opt_parsed => { desttype => "", opts => ["str1"], type => "s" },
             orig_opt => "str1=s",
             pos => 0,
             req => 1,
             summary => "A required option as well as positional argument",
           },
           "-z" => {
             alias_for   => "bool1",
             alias_spec  => 'fix',
             arg         => "bool1",
             arg_spec    => 'fix',
             categories  => ["Cat1 options"],
             category    => "Cat1 options",
             description => undef,
             fqarg       => "bool1",
             is_alias    => 1,
             main_opt    => "--bool1",
             opt_parsed  => { opts => ["z"] },
             orig_opt    => "z",
             summary     => "This is summary for option `-z`",
             tags        => 'fix',
           },
         },
         usage_line => "[[prog]] [options] <str1>",
       },
     ];
     $a->[2]{opts}{"--bool1"}{tags} = $a->[2]{opts}{"--bool1"}{arg_spec}{tags};
     $a->[2]{opts}{"--flag1, -f"}{tags} = $a->[2]{opts}{"--flag1, -f"}{arg_spec}{tags};
     $a->[2]{opts}{"-z"}{alias_spec} = $a->[2]{opts}{"--bool1"}{arg_spec}{cmdline_aliases}{z};
     $a->[2]{opts}{"-z"}{arg_spec} = $a->[2]{opts}{"--bool1"}{arg_spec};
     $a->[2]{opts}{"-z"}{tags} = $a->[2]{opts}{"--bool1"}{arg_spec}{tags};
     $a;
   }
  
  For a more complete sample, see function metadata for C<demo_cli_opts> in
  L<Perinci::Examples::CLI>.
  
  =head1 FUNCTIONS
  
  
  =head2 gen_cli_doc_data_from_meta(%args) -> [status, msg, result, meta]
  
  From Rinci function metadata, generate structure convenient for producing CLI documentation (help/usage/POD).
  
  This function calls L<Perinci::Sub::GetArgs::Argv>'s
  C<gen_getopt_long_spec_from_meta()> (or receive its result as an argument, if
  passed, to avoid calling the function twice) and post-processes it: produce
  command usage line, format the options, include information from metadata, group
  the options by category. It also selects examples in the C<examples> property
  which are applicable to CLI environment and format them.
  
  The resulting data structure is convenient to use when one wants to produce a
  documentation for CLI program (including help/usage message and POD).
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<common_opts> => I<hash>
  
  Will be passed to gen_getopt_long_spec_from_meta().
  
  =item * B<ggls_res> => I<array>
  
  Full result from gen_getopt_long_spec_from_meta().
  
  If you already call L<Perinci::Sub::GetArgs::Argv>'s
  C<gen_getopt_long_spec_from_meta()>, you can pass the I<full> enveloped result
  here, to avoid calculating twice. What will be useful for the function is the
  extra result in result metadata (C<func.*> keys in C<< $res-E<gt>[3] >> hash).
  
  =item * B<lang> => I<str>
  
  =item * B<meta>* => I<hash>
  
  =item * B<meta_is_normalized> => I<bool>
  
  =item * B<per_arg_json> => I<bool>
  
  Pass per_arg_json=1 to Perinci::Sub::GetArgs::Argv.
  
  =item * B<per_arg_yaml> => I<bool>
  
  Pass per_arg_json=1 to Perinci::Sub::GetArgs::Argv.
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (hash)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Sub-To-CLIDocData>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Perinci-Sub-To-CLIOptSpec>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Sub-To-CLIDocData>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci::CmdLine>, L<Perinci::CmdLine::Lite>
  
  L<Pod::Weaver::Plugin::Rinci>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_SUB_TO_CLIDOCDATA

    $main::fatpacked{"Perinci/Sub/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_SUB_UTIL';
  package Perinci::Sub::Util;
  
  our $DATE = '2017-01-31'; # DATE
  our $VERSION = '0.46'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         err
                         caller
                         warn_err
                         die_err
                         gen_modified_sub
                         gen_curried_sub
                 );
  
  our %SPEC;
  
  $SPEC{':package'} = {
      v => 1.1,
      summary => 'Helper when writing functions',
  };
  
  our $STACK_TRACE;
  our @_c; # to store temporary celler() result
  our $_i; # temporary variable
  sub err {
      require Scalar::Util;
  
      # get information about caller
      my @caller = CORE::caller(1);
      if (!@caller) {
          # probably called from command-line (-e)
          @caller = ("main", "-e", 1, "program");
      }
  
      my ($status, $msg, $meta, $prev);
  
      for (@_) {
          my $ref = ref($_);
          if ($ref eq 'ARRAY') { $prev = $_ }
          elsif ($ref eq 'HASH') { $meta = $_ }
          elsif (!$ref) {
              if (Scalar::Util::looks_like_number($_)) {
                  $status = $_;
              } else {
                  $msg = $_;
              }
          }
      }
  
      $status //= 500;
      $msg  //= "$caller[3] failed";
      $meta //= {};
      $meta->{prev} //= $prev if $prev;
  
      # put information on who produced this error and where/when
      if (!$meta->{logs}) {
  
          # should we produce a stack trace?
          my $stack_trace;
          {
              no warnings;
              # we use Carp::Always as a sign that user wants stack traces
              last unless $STACK_TRACE // $INC{"Carp/Always.pm"};
              # stack trace is already there in previous result's log
              last if $prev && ref($prev->[3]) eq 'HASH' &&
                  ref($prev->[3]{logs}) eq 'ARRAY' &&
                      ref($prev->[3]{logs}[0]) eq 'HASH' &&
                          $prev->[3]{logs}[0]{stack_trace};
              $stack_trace = [];
              $_i = 1;
              while (1) {
                  {
                      package DB;
                      @_c = CORE::caller($_i);
                      if (@_c) {
                          $_c[4] = [@DB::args];
                      }
                  }
                  last unless @_c;
                  push @$stack_trace, [@_c];
                  $_i++;
              }
          }
          push @{ $meta->{logs} }, {
              type    => 'create',
              time    => time(),
              package => $caller[0],
              file    => $caller[1],
              line    => $caller[2],
              func    => $caller[3],
              ( stack_trace => $stack_trace ) x !!$stack_trace,
          };
      }
  
      #die;
      [$status, $msg, undef, $meta];
  }
  
  sub warn_err {
      require Carp;
  
      my $res = err(@_);
      Carp::carp("ERROR $res->[0]: $res->[1]");
  }
  
  sub die_err {
      require Carp;
  
      my $res = err(@_);
      Carp::croak("ERROR $res->[0]: $res->[1]");
  }
  
  sub caller {
      my $n0 = shift;
      my $n  = $n0 // 0;
  
      my $pkg = $Perinci::Sub::Wrapper::default_wrapped_package //
          'Perinci::Sub::Wrapped';
  
      my @r;
      my $i =  0;
      my $j = -1;
      while ($i <= $n+1) { # +1 for this sub itself
          $j++;
          @r = CORE::caller($j);
          last unless @r;
          if ($r[0] eq $pkg && $r[1] =~ /^\(eval /) {
              next;
          }
          $i++;
      }
  
      return unless @r;
      return defined($n0) ? @r : $r[0];
  }
  
  $SPEC{gen_modified_sub} = {
      v => 1.1,
      summary => 'Generate modified metadata (and subroutine) based on another',
      description => <<'_',
  
  Often you'll want to create another sub (and its metadata) based on another, but
  with some modifications, e.g. add/remove/rename some arguments, change summary,
  add/remove some properties, and so on.
  
  Instead of cloning the Rinci metadata and modify it manually yourself, this
  routine provides some shortcuts.
  
  You can specify base sub/metadata using `base_name` (string, subroutine name,
  either qualified or not) or `base_code` (coderef) + `base_meta` (hash).
  
  _
      args => {
          base_name => {
              summary => 'Subroutine name (either qualified or not)',
              schema => 'str*',
              description => <<'_',
  
  If not qualified with package name, will be searched in the caller's package.
  Rinci metadata will be searched in `%SPEC` package variable.
  
  Alternatively, you can also specify `base_code` and `base_meta`.
  
  _
          },
          base_code => {
              summary => 'Base subroutine code',
              schema  => 'code*',
              description => <<'_',
  
  If you specify this, you'll also need to specify `base_meta`.
  
  Alternatively, you can specify `base_name` instead, to let this routine search
  the base subroutine from existing Perl package.
  
  _
          },
          base_meta => {
              summary => 'Base Rinci metadata',
              schema  => 'hash*', # XXX defhash/rifunc
          },
          output_name => {
              summary => 'Where to install the modified sub',
              schema  => 'str*',
              description => <<'_',
  
  Subroutine will be put in the specified name. If the name is not qualified with
  package name, will use caller's package. If no `output_code` is specified, the
  base subroutine reference will be assigned here.
  
  Note that this argument is optional.
  
  _
          },
          output_code => {
              summary => 'Code for the modified sub',
              schema  => 'code*',
              description => <<'_',
  
  If not specified will use `base_code` (which will then be required).
  
  _
          },
          summary => {
              summary => 'Summary for the mod subroutine',
              schema  => 'str*',
          },
          description => {
              summary => 'Description for the mod subroutine',
              schema  => 'str*',
          },
          remove_args => {
              summary => 'List of arguments to remove',
              schema  => 'array*',
          },
          add_args => {
              summary => 'Arguments to add',
              schema  => 'hash*',
          },
          replace_args => {
              summary => 'Arguments to add',
              schema  => 'hash*',
          },
          rename_args => {
              summary => 'Arguments to rename',
              schema  => 'hash*',
          },
          modify_args => {
              summary => 'Arguments to modify',
              description => <<'_',
  
  For each argument you can specify a coderef. The coderef will receive the
  argument ($arg_spec) and is expected to modify the argument specification.
  
  _
              schema  => 'hash*',
          },
          modify_meta => {
              summary => 'Specify code to modify metadata',
              schema  => 'code*',
              description => <<'_',
  
  Code will be called with arguments ($meta) where $meta is the cloned Rinci
  metadata.
  
  _
          },
          install_sub => {
              schema  => 'bool',
              default => 1,
          },
      },
      result => {
          schema => ['hash*' => {
              keys => {
                  code => ['code*'],
                  meta => ['hash*'], # XXX defhash/risub
              },
          }],
      },
  };
  sub gen_modified_sub {
      require Function::Fallback::CoreOrPP;
  
      my %args = @_;
  
      # get base code/meta
      my ($base_code, $base_meta);
      if ($args{base_name}) {
          my ($pkg, $leaf);
          if ($args{base_name} =~ /(.+)::(.+)/) {
              ($pkg, $leaf) = ($1, $2);
          } else {
              $pkg  = CORE::caller();
              $leaf = $args{base_name};
          }
          no strict 'refs';
          $base_code = \&{"$pkg\::$leaf"};
          $base_meta = ${"$pkg\::SPEC"}{$leaf};
          die "Can't find Rinci metadata for $pkg\::$leaf" unless $base_meta;
      } elsif ($args{base_meta}) {
          $base_meta = $args{base_meta};
          $base_code = $args{base_code}
              or die "Please specify base_code";
      } else {
          die "Please specify base_name or base_code+base_meta";
      }
  
      my $output_meta = Function::Fallback::CoreOrPP::clone($base_meta);
      my $output_code = $args{output_code} // $base_code;
  
      # modify metadata
      for (qw/summary description/) {
          $output_meta->{$_} = $args{$_} if $args{$_};
      }
      if ($args{remove_args}) {
          delete $output_meta->{args}{$_} for @{ $args{remove_args} };
      }
      if ($args{add_args}) {
          for my $k (keys %{ $args{add_args} }) {
              my $v = $args{add_args}{$k};
              die "Can't add arg '$k' in mod sub: already exists"
                  if $output_meta->{args}{$k};
              $output_meta->{args}{$k} = $v;
          }
      }
      if ($args{replace_args}) {
          for my $k (keys %{ $args{replace_args} }) {
              my $v = $args{replace_args}{$k};
              die "Can't replace arg '$k' in mod sub: doesn't exist"
                  unless $output_meta->{args}{$k};
              $output_meta->{args}{$k} = $v;
          }
      }
      if ($args{rename_args}) {
          for my $old (keys %{ $args{rename_args} }) {
              my $new = $args{rename_args}{$old};
              my $as = $output_meta->{args}{$old};
              die "Can't rename arg '$old' in mod sub: doesn't exist" unless $as;
              die "Can't rename arg '$old'->'$new' in mod sub: ".
                  "new name already exist" if $output_meta->{args}{$new};
              $output_meta->{args}{$new} = $as;
              delete $output_meta->{args}{$old};
          }
      }
      if ($args{modify_args}) {
          for (keys %{ $args{modify_args} }) {
              $args{modify_args}{$_}->($output_meta->{args}{$_});
          }
      }
      if ($args{modify_meta}) {
          $args{modify_meta}->($output_meta);
      }
  
      # install
      if ($args{output_name}) {
          my ($pkg, $leaf);
          if ($args{output_name} =~ /(.+)::(.+)/) {
              ($pkg, $leaf) = ($1, $2);
          } else {
              $pkg  = CORE::caller();
              $leaf = $args{output_name};
          }
          no strict 'refs';
          no warnings 'redefine';
          *{"$pkg\::$leaf"}       = $output_code if $args{install_sub} // 1;
          ${"$pkg\::SPEC"}{$leaf} = $output_meta;
      }
  
      [200, "OK", {code=>$output_code, meta=>$output_meta}];
  }
  
  $SPEC{gen_curried_sub} = {
      v => 1.1,
      summary => 'Generate curried subroutine (and its metadata)',
      description => <<'_',
  
  This is a more convenient helper than `gen_modified_sub` if you want to create a
  new subroutine that has some of its arguments preset (so they no longer need to
  be present in the new metadata).
  
  For more general needs of modifying a subroutine (e.g. add some arguments,
  modify some arguments, etc) use `gen_modified_sub`.
  
  _
      args => {
          base_name => {
              summary => 'Subroutine name (either qualified or not)',
              schema => 'str*',
              description => <<'_',
  
  If not qualified with package name, will be searched in the caller's package.
  Rinci metadata will be searched in `%SPEC` package variable.
  
  _
              req => 1,
              pos => 0,
          },
          set_args => {
              summary => 'Arguments to set',
              schema  => 'hash*',
          },
          output_name => {
              summary => 'Where to install the modified sub',
              schema  => 'str*',
              description => <<'_',
  
  Subroutine will be put in the specified name. If the name is not qualified with
  package name, will use caller's package.
  
  _
              req => 1,
              pos => 2,
          },
      },
      args_as => 'array',
      result_naked => 1,
  };
  sub gen_curried_sub {
      my ($base_name, $set_args, $output_name) = @_;
  
      my $caller = CORE::caller();
  
      my ($base_pkg, $base_leaf);
      if ($base_name =~ /(.+)::(.+)/) {
          ($base_pkg, $base_leaf) = ($1, $2);
      } else {
          $base_pkg  = $caller;
          $base_leaf = $base_name;
      }
  
      my ($output_pkg, $output_leaf);
      if ($output_name =~ /(.+)::(.+)/) {
          ($output_pkg, $output_leaf) = ($1, $2);
      } else {
          $output_pkg  = $caller;
          $output_leaf = $output_name;
      }
  
      my $base_sub = \&{"$base_pkg\::$base_leaf"};
  
      my $res = gen_modified_sub(
          base_name   => "$base_pkg\::$base_leaf",
          output_name => "$output_pkg\::$output_leaf",
          output_code => sub {
              no strict 'refs';
              $base_sub->(@_, %$set_args);
          },
          remove_args => [keys %$set_args],
          install => 1,
      );
  
      die "Can't generate curried sub: $res->[0] - $res->[1]"
          unless $res->[0] == 200;
  
      1;
  }
  
  1;
  # ABSTRACT: Helper when writing functions
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Sub::Util - Helper when writing functions
  
  =head1 VERSION
  
  This document describes version 0.46 of Perinci::Sub::Util (from Perl distribution Perinci-Sub-Util), released on 2017-01-31.
  
  =head1 SYNOPSIS
  
  Example for err() and caller():
  
   use Perinci::Sub::Util qw(err caller);
  
   sub foo {
       my %args = @_;
       my $res;
  
       my $caller = caller();
  
       $res = bar(...);
       return err($err, 500, "Can't foo") if $res->[0] != 200;
  
       [200, "OK"];
   }
  
  Example for die_err() and warn_err():
  
   use Perinci::Sub::Util qw(warn_err die_err);
   warn_err(403, "Forbidden");
   die_err(403, "Forbidden");
  
  Example for gen_modified_sub():
  
   use Perinci::Sub::Util qw(gen_modified_sub);
  
   $SPEC{list_users} = {
       v => 1.1,
       args => {
           search => {},
           is_suspended => {},
       },
   };
   sub list_users { ... }
  
   gen_modified_sub(
       output_name => 'list_suspended_users',
       base_name   => 'list_users',
       remove_args => ['is_suspended'],
       output_code => sub {
           list_users(@_, is_suspended=>1);
       },
   );
  
  Example for gen_curried_sub():
  
   use Perinci::Sub::Util qw(gen_curried_sub);
  
   $SPEC{list_users} = {
       v => 1.1,
       args => {
           search => {},
           is_suspended => {},
       },
   };
   sub list_users { ... }
  
   # simpler/shorter than gen_modified_sub, but can be used for currying only
   gen_curried_sub('list_users', {is_suspended=>1}, 'list_suspended_users');
  
  =head1 FUNCTIONS
  
  
  =head2 gen_curried_sub($base_name, $output_name, $set_args) -> any
  
  Generate curried subroutine (and its metadata).
  
  This is a more convenient helper than C<gen_modified_sub> if you want to create a
  new subroutine that has some of its arguments preset (so they no longer need to
  be present in the new metadata).
  
  For more general needs of modifying a subroutine (e.g. add some arguments,
  modify some arguments, etc) use C<gen_modified_sub>.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<$base_name>* => I<str>
  
  Subroutine name (either qualified or not).
  
  If not qualified with package name, will be searched in the caller's package.
  Rinci metadata will be searched in C<%SPEC> package variable.
  
  =item * B<$output_name>* => I<str>
  
  Where to install the modified sub.
  
  Subroutine will be put in the specified name. If the name is not qualified with
  package name, will use caller's package.
  
  =item * B<$set_args> => I<hash>
  
  Arguments to set.
  
  =back
  
  Return value:  (any)
  
  
  =head2 gen_modified_sub(%args) -> [status, msg, result, meta]
  
  Generate modified metadata (and subroutine) based on another.
  
  Often you'll want to create another sub (and its metadata) based on another, but
  with some modifications, e.g. add/remove/rename some arguments, change summary,
  add/remove some properties, and so on.
  
  Instead of cloning the Rinci metadata and modify it manually yourself, this
  routine provides some shortcuts.
  
  You can specify base sub/metadata using C<base_name> (string, subroutine name,
  either qualified or not) or C<base_code> (coderef) + C<base_meta> (hash).
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<add_args> => I<hash>
  
  Arguments to add.
  
  =item * B<base_code> => I<code>
  
  Base subroutine code.
  
  If you specify this, you'll also need to specify C<base_meta>.
  
  Alternatively, you can specify C<base_name> instead, to let this routine search
  the base subroutine from existing Perl package.
  
  =item * B<base_meta> => I<hash>
  
  Base Rinci metadata.
  
  =item * B<base_name> => I<str>
  
  Subroutine name (either qualified or not).
  
  If not qualified with package name, will be searched in the caller's package.
  Rinci metadata will be searched in C<%SPEC> package variable.
  
  Alternatively, you can also specify C<base_code> and C<base_meta>.
  
  =item * B<description> => I<str>
  
  Description for the mod subroutine.
  
  =item * B<install_sub> => I<bool> (default: 1)
  
  =item * B<modify_args> => I<hash>
  
  Arguments to modify.
  
  For each argument you can specify a coderef. The coderef will receive the
  argument ($arg_spec) and is expected to modify the argument specification.
  
  =item * B<modify_meta> => I<code>
  
  Specify code to modify metadata.
  
  Code will be called with arguments ($meta) where $meta is the cloned Rinci
  metadata.
  
  =item * B<output_code> => I<code>
  
  Code for the modified sub.
  
  If not specified will use C<base_code> (which will then be required).
  
  =item * B<output_name> => I<str>
  
  Where to install the modified sub.
  
  Subroutine will be put in the specified name. If the name is not qualified with
  package name, will use caller's package. If no C<output_code> is specified, the
  base subroutine reference will be assigned here.
  
  Note that this argument is optional.
  
  =item * B<remove_args> => I<array>
  
  List of arguments to remove.
  
  =item * B<rename_args> => I<hash>
  
  Arguments to rename.
  
  =item * B<replace_args> => I<hash>
  
  Arguments to add.
  
  =item * B<summary> => I<str>
  
  Summary for the mod subroutine.
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (hash)
  
  =head2 caller([ $n ])
  
  Just like Perl's builtin caller(), except that this one will ignore wrapper code
  in the call stack. You should use this if your code is potentially wrapped. See
  L<Perinci::Sub::Wrapper> for more details.
  
  =head2 err(...) => ARRAY
  
  Experimental.
  
  Generate an enveloped error response (see L<Rinci::function>). Can accept
  arguments in an unordered fashion, by utilizing the fact that status codes are
  always integers, messages are strings, result metadata are hashes, and previous
  error responses are arrays. Error responses also seldom contain actual result.
  Status code defaults to 500, status message will default to "FUNC failed". This
  function will also fill the information in the C<logs> result metadata.
  
  Examples:
  
   err();    # => [500, "FUNC failed", undef, {...}];
   err(404); # => [404, "FUNC failed", undef, {...}];
   err(404, "Not found"); # => [404, "Not found", ...]
   err("Not found", 404); # => [404, "Not found", ...]; # order doesn't matter
   err([404, "Prev error"]); # => [500, "FUNC failed", undef,
                             #     {logs=>[...], prev=>[404, "Prev error"]}]
  
  Will put C<stack_trace> in logs only if C<Carp::Always> module is loaded.
  
  =head2 warn_err(...)
  
  This is a shortcut for:
  
   $res = err(...);
   warn "ERROR $res->[0]: $res->[1]";
  
  =head2 die_err(...)
  
  This is a shortcut for:
  
   $res = err(...);
   die "ERROR $res->[0]: $res->[1]";
  
  =head1 FAQ
  
  =head2 What if I want to put result ($res->[2]) into my result with err()?
  
  You can do something like this:
  
   my $err = err(...) if ERROR_CONDITION;
   $err->[2] = SOME_RESULT;
   return $err;
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Sub-Util>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Perinci-Sub-Util>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Sub-Util>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_SUB_UTIL

    $main::fatpacked{"Perinci/Sub/Util/Args.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_SUB_UTIL_ARGS';
  package Perinci::Sub::Util::Args;
  
  our $DATE = '2017-01-31'; # DATE
  our $VERSION = '0.46'; # VERSION
  
  use 5.010001;
  use strict 'subs', 'vars';
  use warnings;
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(
                         args_by_tag
                         argnames_by_tag
                         func_args_by_tag
                         func_argnames_by_tag
                         call_with_its_args
  );
  
  sub args_by_tag {
      my ($meta, $args, $tag) = @_;
  
      my @res;
      my $args_prop = $meta->{args} or return ();
      my $neg = $tag =~ s/\A!//;
      for my $argname (keys %$args_prop) {
          my $argspec = $args_prop->{$argname};
          if ($neg) {
              next unless !$argspec->{tags} ||
                  !(grep {$_ eq $tag} @{$argspec->{tags}});
          } else {
              next unless $argspec->{tags} &&
                  grep {$_ eq $tag} @{$argspec->{tags}};
          }
          push @res, $argname, $args->{$argname}
              if exists $args->{$argname};
      }
      @res;
  }
  
  sub argnames_by_tag {
      my ($meta, $tag) = @_;
  
      my @res;
      my $args_prop = $meta->{args} or return ();
      my $neg = 1 if $tag =~ s/\A!//;
      for my $argname (keys %$args_prop) {
          my $argspec = $args_prop->{$argname};
          if ($neg) {
              next unless !$argspec->{tags} ||
                  !(grep {$_ eq $tag} @{$argspec->{tags}});
          } else {
              next unless $argspec->{tags} &&
                  grep {$_ eq $tag} @{$argspec->{tags}};
          }
          push @res, $argname;
      }
      sort @res;
  }
  
  sub _find_meta {
      my $caller = shift;
      my $func_name = shift;
  
      if ($func_name =~ /(.+)::(.+)/) {
          return ${"$1::SPEC"}{$2};
      } else {
          return ${"$caller->[0]::SPEC"}{$func_name};
      }
  }
  
  sub func_args_by_tag {
      my ($func_name, $args, $tag) = @_;
      my $meta = _find_meta([caller(1)], $func_name)
          or die "Can't find Rinci function metadata for $func_name";
      args_by_tag($meta, $args, $tag);
  }
  
  sub func_argnames_by_tag {
      my ($func_name, $tag) = @_;
      my $meta = _find_meta([caller(1)], $func_name)
          or die "Can't find Rinci function metadata for $func_name";
      argnames_by_tag($meta, $tag);
  }
  
  sub call_with_its_args {
      my ($func_name, $args) = @_;
  
      my ($meta, $func);
      if ($func_name =~ /(.+)::(.+)/) {
          defined &{$func_name}
              or die "Function $func_name not defined";
          $func = \&{$func_name};
          $meta = ${"$1::SPEC"}{$2};
      } else {
          my @caller = caller(1);
          my $fullname = "$caller[0]::$func_name";
          defined &{$fullname}
              or die "Function $fullname not defined";
          $func = \&{$fullname};
          $meta = ${"$caller[0]::SPEC"}{$func_name};
      }
      $meta or die "Can't find Rinci function metadata for $func_name";
  
      my @args;
      if ($meta->{args}) {
          for my $argname (keys %{ $meta->{args} }) {
              push @args, $argname, $args->{$argname}
                  if exists $args->{$argname};
          }
      }
      $func->(@args);
  }
  
  1;
  # ABSTRACT: Utility routines related to Rinci arguments
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Sub::Util::Args - Utility routines related to Rinci arguments
  
  =head1 VERSION
  
  This document describes version 0.46 of Perinci::Sub::Util::Args (from Perl distribution Perinci-Sub-Util), released on 2017-01-31.
  
  =head1 SYNOPSIS
  
   package MyPackage;
  
   use Perinci::Sub::Util::Args qw(
       args_by_tag
       argnames_by_tag
       func_args_by_tag
       func_argnames_by_tag
       call_with_its_args
   );
  
   our %SPEC;
  
   my %func1_args;
  
   $SPEC{myfunc1} = {
       v => 1.1,
       summary => 'My function one',
       args => {
           %func1_args = (
               foo => {tags=>['t1', 't2']},
               bar => {tags=>['t2', 't3']},
               baz => {},
           ),
       },
   };
   sub myfunc1 {
       my %args = @_;
   }
  
   $SPEC{myfunc2} = {
       v => 1.1,
       summary => 'My function two',
       args => {
           %func1_args,
           qux => {tags=>['t3']},
       },
   };
   sub myfunc2 {
       my %args = @_;
       my $res = call_with_its_args('myfunc1', \%args);
   }
  
  =head1 DESCRIPTION
  
  =head1 FUNCTIONS
  
  =head2 args_by_tag
  
  Usage:
  
   my %args = args_by_tag($meta, \%args0, $tag);
  
  Will select only keypairs from C<%args0> arguments which have tag C<$tag>.
  Examples:
  
   my %args = args_by_tag($SPEC{myfunc1}, {foo=>1, bar=>2, baz=>3, qux=>4}, 't2'); # (foo=>1, bar=>2)
  
  =head2 argnames_by_tag
  
  Usage:
  
   my @arg_names = argnames_by_tag($meta, $tag);
  
  Will select only argument names which have tag C<$tag>.
  
  =head2 func_args_by_tag
  
  Usage:
  
   my %args = func_args_by_tag($func_name, \%args0, $tag);
  
  Like L</args_by_tag> except that instead of supplying Rinci function metadata,
  you supply a function name. Rinci metadata will be searched in C<%SPEC>
  variable.
  
  =head2 func_argnames_by_tag
  
  Usage:
  
   my @argnames = func_argnames_by_tag($func_name, $tag);
  
  Like L</argnames_by_tag> except that instead of supplying Rinci function
  metadata, you supply a function name. Rinci metadata will be searched in
  C<%SPEC> variable.
  
  =head2 call_with_its_args
  
  Usage:
  
   my $res = call_with_its_args($func_name, \%args);
  
  Call function with arguments taken from C<%args>. Only arguments which the
  function declares it accepts will be passed.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Sub-Util>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Perinci-Sub-Util>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Sub-Util>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_SUB_UTIL_ARGS

    $main::fatpacked{"Perinci/Sub/Util/ResObj.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_SUB_UTIL_RESOBJ';
  package Perinci::Sub::Util::ResObj;
  
  our $DATE = '2017-01-31'; # DATE
  our $VERSION = '0.46'; # VERSION
  
  use Carp;
  use overload
      q("") => sub {
          my $res = shift; "ERROR $err->[0]: $err->[1]\n" . Carp::longmess();
      };
  
  1;
  # ABSTRACT: An object that represents enveloped response suitable for die()-ing
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Sub::Util::ResObj - An object that represents enveloped response suitable for die()-ing
  
  =head1 VERSION
  
  This document describes version 0.46 of Perinci::Sub::Util::ResObj (from Perl distribution Perinci-Sub-Util), released on 2017-01-31.
  
  =head1 SYNOPSIS
  
  Currently unused. See L<Perinci::Sub::Util>'s C<warn_err> and C<die_err>
  instead.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Sub-Util>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Perinci-Sub-Util>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Sub-Util>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_SUB_UTIL_RESOBJ

    $main::fatpacked{"Perinci/Sub/Util/Sort.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_SUB_UTIL_SORT';
  package Perinci::Sub::Util::Sort;
  
  our $DATE = '2017-01-31'; # DATE
  our $VERSION = '0.46'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         sort_args
                 );
  
  our %SPEC;
  
  sub sort_args {
      my $args = shift;
      sort {
          (($args->{$a}{pos} // 9999) <=> ($args->{$b}{pos} // 9999)) ||
              $a cmp $b
          } keys %$args;
  }
  
  1;
  # ABSTRACT: Sort routines
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Sub::Util::Sort - Sort routines
  
  =head1 VERSION
  
  This document describes version 0.46 of Perinci::Sub::Util::Sort (from Perl distribution Perinci-Sub-Util), released on 2017-01-31.
  
  =head1 SYNOPSIS
  
   use Perinci::Sub::Util::Sort qw(sort_args);
  
   my $meta = {
       v => 1.1,
       args => {
           a1 => { pos=>0 },
           a2 => { pos=>1 },
           opt1 => {},
           opt2 => {},
       },
   };
   my @args = sort_args($meta->{args}); # ('a1','a2','opt1','opt2')
  
  =head1 FUNCTIONS
  
  =head2 sort_args(\%args) => LIST
  
  Sort argument in args property by pos, then by name.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Sub-Util>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Perinci-Sub-Util>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Sub-Util>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_SUB_UTIL_SORT

    $main::fatpacked{"Perinci/Sub/Wrapper.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PERINCI_SUB_WRAPPER';
  package Perinci::Sub::Wrapper;
  
  our $DATE = '2016-06-02'; # DATE
  our $VERSION = '0.83'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  use experimental 'smartmatch';
  use Log::Any::IfLOG '$log';
  
  use Data::Dmp qw(dmp);
  use Function::Fallback::CoreOrPP qw(clone);
  use Perinci::Sub::Normalize qw(normalize_function_metadata);
  use Perinci::Sub::Util qw(err);
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(wrap_sub);
  
  our $Log_Wrapper_Code = $ENV{LOG_PERINCI_WRAPPER_CODE} // 0;
  
  our %SPEC;
  
  $SPEC{':package'} = {
      v => 1.1,
      summary => 'A multi-purpose subroutine wrapping framework',
  };
  
  # "protocol version" (v). whenever there's a significant change in the basic
  # structure of the wrapper, which potentially cause some/a lot of property
  # handlers to stop working, we increase this. property handler must always state
  # which version it follows in its meta. if unspecified, it's assumed to be 1.
  our $protocol_version = 2;
  
  sub new {
      my ($class) = @_;
      bless {}, $class;
  }
  
  sub _check_module {
      my ($self, $mod) = @_;
  
      if ($self->{_args}{core}) {
          if ($mod =~ /\A(experimental|Scalar::Numeric::Util|Scalar::Util::Numeric::PP)\z/) {
              die "BUG: Requested non-core module '$mod' while wrap arg core=1";
          } elsif ($mod =~ /\A(warnings|List::Util)\z/) {
              # core modules
          } else {
              die "BUG: Haven't noted whether module '$mod' is core/non-core";
          }
      }
  
      if ($self->{_args}{pp}) {
          if ($mod =~ /\A(List::Util|Scalar::Numeric::Util)\z/) {
              die "BUG: Requested XS module '$mod' while wrap arg pp=1";
          } elsif ($mod =~ /\A(experimental|warnings|Scalar::Util::Numeric::PP)\z/) {
              # pp modules
          } else {
              die "BUG: Haven't noted whether module '$mod' is pure-perl/XS";
          }
      }
  
      if ($self->{_args}{core_or_pp}) {
          if ($mod =~ /\A(Scalar::Numeric::Util)\z/) {
              die "BUG: Requested non-core XS module '$mod' while wrap arg core_or_pp=1";
          } elsif ($mod =~ /\A(experimental|warnings|List::Util|Scalar::Util::Numeric::PP)\z/) {
              # core or pp modules
          } else {
              die "BUG: Haven't noted whether module '$mod' is non-core xs or not";
          }
      }
  }
  
  sub _add_module {
      my ($self, $mod) = @_;
      unless ($mod ~~ $self->{_modules}) {
          local $self->{_cur_section};
          $self->select_section('before_sub_require_modules');
          if ($mod =~ /\A(use|no) (\S+)/) {
              $self->_check_module($2);
              $self->push_lines("$mod;");
          } elsif ($mod =~ /\A\w+(::\w+)*\z/) {
              $self->_check_module($mod);
              $self->push_lines("require $mod;");
          } else {
              die "BUG: Invalid module name/statement: $mod";
          }
          push @{ $self->{_modules} }, $mod;
      }
  }
  
  sub _add_var {
      my ($self, $var, $value) = @_;
      unless (exists $self->{_vars}{$var}) {
          local $self->{_cur_section};
          $self->select_section('declare_vars');
          $self->push_lines("my \$$var = ".dmp($value).";");
          $self->{_vars}{$var} = $value;
      }
  }
  
  sub _known_sections {
  
      # order=>N regulates the order of code. embed=>1 means the code is for embed
      # mode only and should not be included in dynamic wrapper code.
  
      state $val = {
          before_sub_require_modules => {order=>1},
  
          # reserved by wrapper for setting Perl package and declaring 'sub {'
          OPEN_SUB => {order=>4},
  
          # reserved to say 'my %args = @_;' or 'my @args = @_;' etc
          ACCEPT_ARGS => {order=>5},
  
          # reserved to get args values if converted from array/arrayref
          ACCEPT_ARGS2 => {order=>6},
  
          declare_vars => {order=>7},
  
          # for handlers to put stuffs right before eval. for example, 'timeout'
          # uses this to set ALRM signal handler.
          before_eval => {order=>10},
  
          # reserved by wrapper for generating 'eval {'
          OPEN_EVAL => {order=>20},
  
          # used e.g. to load modules used by validation
          before_call_before_arg_validation => {order=>31},
  
          before_call_arg_validation => {order=>32},
  
          # used e.g. by dependency checking
          before_call_after_arg_validation => {order=>33},
  
          # feed arguments to sub
          before_call_feed_args => {order=>48},
  
          # for handlers that *must* do stuffs right before call
          before_call_right_before_call => {order=>49},
  
          # reserved by the wrapper for calling the sub
          CALL => {order=>50},
  
          # for handlers that *must* do stuffs right after call
          after_call_right_after_call => {order=>51},
  
          # reserved by the wrapper for adding/stripping result envelope, this
          # happens before result validation
          AFTER_CALL_ADD_OR_STRIP_RESULT_ENVELOPE => {order=>52},
  
          # used e.g. to load modules used by validation
          after_call_before_res_validation => {order=>61},
  
          after_call_res_validation => {order=>62},
  
          after_call_after_res_validation => {order=>63},
  
          # reserved by wrapper to put eval end '}' and capturing result in
          # $_w_res and $@ in $eval_err
          CLOSE_EVAL => {order=>70},
  
          # for handlers to put checks against $eval_err
          after_eval => {order=>80},
  
          # reserved for returning final result '$_w_res'
          BEFORE_CLOSE_SUB => {order=>99},
  
          # reserved for sub closing '}' line
          CLOSE_SUB => {order=>100},
      };
      $val;
  }
  
  sub section_empty {
      my ($self, $section) = @_;
      !$self->{_codes}{$section};
  }
  
  sub _needs_eval {
      my ($self) = @_;
      !($self->section_empty('before_eval') &&
            $self->section_empty('after_eval'));
  }
  
  # whether we need to store call result to a variable ($_w_res)
  sub _needs_store_res {
      my ($self) = @_;
      return 1 if $self->{_args}{validate_result};
      return 1 if $self->_needs_eval;
      my $ks = $self->_known_sections;
      for (grep {/^after_call/} keys %$ks) {
          return 1 unless $self->section_empty($_);
      }
      0;
  }
  
  sub _check_known_section {
      my ($self, $section) = @_;
      my $ks = $self->_known_sections;
      $ks->{$section} or die "BUG: Unknown code section '$section'";
  }
  
  sub _err {
      my ($self, $c_status, $c_msg) = @_;
      if ($self->{_meta}{result_naked}) {
          $self->push_lines(
              "warn 'ERROR ' . ($c_status) . ': '. ($c_msg);",
              'return undef;',
          );
      } else {
          $self->push_lines("return [$c_status, $c_msg];");
      }
  }
  
  sub _errif {
      my ($self, $c_status, $c_msg, $c_cond) = @_;
      $self->push_lines("if ($c_cond) {");
      $self->indent;
      $self->_err($c_status, $c_msg);
      $self->unindent;
      $self->push_lines('}');
  }
  
  sub select_section {
      my ($self, $section) = @_;
      $self->_check_known_section($section);
      $self->{_cur_section} = $section;
      $self;
  }
  
  sub indent {
      my ($self) = @_;
      my $section = $self->{_cur_section};
      $self->{_codes}{$section} //= undef;
      $self->{_levels}{$section}++;
      $self;
  }
  
  sub unindent {
      my ($self) = @_;
      my $section = $self->{_cur_section};
      $self->{_codes}{$section} //= undef;
      $self->{_levels}{$section}--;
      $self;
  }
  
  sub get_indent_level {
      my ($self) = @_;
      my $section = $self->{_cur_section};
      $self->{_levels}{$section} // 0;
  }
  
  # line can be code or comment. code should not contain string literals that
  # cross lines (i.e. contain literal newlines) because push_lines() might add
  # comment at the end of each line.
  
  sub push_lines {
      my ($self, @lines) = @_;
      my $section = $self->{_cur_section};
  
      unless (exists $self->{_codes}{$section}) {
          unshift @lines, "# * section: $section";
          # don't give blank line for the top-most section (order=>0)
          unshift @lines, "" if $self->_known_sections->{$section}{order};
          $self->{_codes}{$section} = [];
          $self->{_levels}{$section} = 0;
      }
  
      @lines = map {[$self->{_levels}{$section}, $_]} @lines;
      if ($self->{_args}{debug}) {
          for my $l (@lines) {
              $l->[2] =
                  $self->{_cur_handler} ?
                      "$self->{_cur_handler} prio=".$self->{_cur_handler_meta}{prio}
                          : "";
          }
      }
      push @{$self->{_codes}{$section}}, @lines;
      $self;
  }
  
  sub _join_codes {
      my ($self, $crit, $prev_section_level) = @_;
      my @lines;
      my $ks = $self->_known_sections;
      $prev_section_level //= 0;
      my $i = 0;
      for my $s (sort {$ks->{$a}{order} <=> $ks->{$b}{order}}
                     keys %$ks) {
          next if $self->section_empty($s);
          next unless $crit->(section => $s);
          $i++;
          for my $l (@{ $self->{_codes}{$s} }) {
              $l->[0] += $prev_section_level;
              die "BUG: Negative indent level in line $i (section $s): '$l->[1]'"
                  if $l->[0] < 0;
              my $s = ($self->{_args}{indent} x $l->[0]) . $l->[1];
              if (defined $l->[2]) {
                  my $num_ws = 80 - length($s);
                  $num_ws = 1 if $num_ws < 1;
                  $s .= (" " x $num_ws) . "## $l->[2]";
              }
              push @lines, $s;
          }
          $prev_section_level += $self->{_levels}{$s};
      }
      [join("\n", @lines), $prev_section_level];
  }
  
  sub _format_dyn_wrapper_code {
      my ($self) = @_;
      my $ks = $self->_known_sections;
      $self->_join_codes(
          sub {
              my %args = @_;
              my $section = $args{section};
              !$ks->{$section}{embed};
          })->[0];
  }
  
  # for embedded, we need to produce three sections which will be inserted in
  # different places, demonstrated below:
  #
  #   $SPEC{foo} = {
  #       ...
  #   };
  #   sub foo {
  #       my %args = @_;
  #       # do stuffs
  #   }
  #
  # becomes:
  #
  #   #PRESUB1: require modules (inserted before sub declaration)
  #   require Data::Dumper;
  #   require Scalar::Util;
  #
  #   $SPEC{foo} = {
  #       ...
  #   };
  #   #PRESUB2: modify metadata piece-by-piece (inserted before sub declaration &
  #   #after $SPEC{foo}). we're avoiding dumping the new modified metadata because
  #   #metadata might contain coderefs which is sometimes problematic when dumping
  #   {
  #       my $meta = $SPEC{foo};
  #       $meta->{v} = 1.1;
  #       $meta->{result_naked} = 0;
  #   }
  #
  #   sub foo {
  #       my %args = @_;
  #       #PREAMBLE: before call sections (inserted after accept args), e.g.
  #       #validate arguments, convert argument type, setup eval block
  #       #...
  #
  #       # do stuffs
  #
  #       #POSTAMBLE: after call sections (inserted before sub end), e.g.
  #       #validate result, close eval block and do retry/etc.
  #       #...
  #   }
  sub _format_embed_wrapper_code {
      my ($self) = @_;
  
      my $res = {};
      my $ks = $self->_known_sections;
      my $j;
  
      $j = $self->_join_codes(
          sub {
              my %args = @_;
              my $section = $args{section};
              $section =~ /\A(before_sub_require_modules)\z/;
          });
      $res->{presub1} = $j->[0];
  
      # no longer needed/produce, code to modify metadata
      $res->{presub2} = '';
  
      $j = $self->_join_codes(
          sub {
              my %args = @_;
              my $section = $args{section};
              my $order = $ks->{$section}{order};
              return 1 if $order > $ks->{ACCEPT_ARGS}{order} &&
                  $order < $ks->{CALL}{order};
              0;
          }, 1);
      $res->{preamble} = $j->[0];
  
      $j = $self->_join_codes(
          sub {
              my %args = @_;
              my $section = $args{section};
              my $order = $ks->{$section}{order};
              return 1 if $order > $ks->{CALL}{order} &&
                  $order < $ks->{CLOSE_SUB}{order};
              0;
          }, $j->[1]);
      $res->{postamble} = $j->[0];
  
      $res;
  }
  
  sub handlemeta_v { {} }
  sub handlemeta_name { {} }
  sub handlemeta_summary { {} }
  sub handlemeta_description { {} }
  sub handlemeta_tags { {} }
  sub handlemeta_default_lang { {} }
  sub handlemeta_links { {} }
  sub handlemeta_text_markup { {} }
  sub handlemeta_is_func { {} }
  sub handlemeta_is_meth { {} }
  sub handlemeta_is_class_meth { {} }
  sub handlemeta_examples { {} }
  
  # after args
  sub handlemeta_features { {v=>2, prio=>15} }
  sub handle_features {
      my ($self, %args) = @_;
  
      my $meta = $self->{_meta};
      my $v = $meta->{features} // {};
  
      $self->select_section('before_call_before_arg_validation');
  
      if ($v->{tx} && $v->{tx}{req}) {
          $self->push_lines('', '# check required transaction');
          $self->_errif(412, '"Must run with transaction (pass -tx_manager)"',
                        '!$args{-tx_manager}');
      }
  }
  
  # run before args
  sub handlemeta_args_as { {v=>2, prio=>1, convert=>1} }
  sub handle_args_as {
      my ($self, %args) = @_;
  
      my $value  = $args{value};
      my $new    = $args{new};
      my $meta   = $self->{_meta};
      my $args_p = $meta->{args} // {};
      my $opt_va = $self->{_args}{validate_args};
  
      # We support conversion of arguments between hash/hashref/array/arrayref. To
      # make it simple, currently the algorithm is as follow: we first form the
      # %args hash. If args_as is already 'hash', we just do 'my %args = @_'.
      # Otherwise, we convert from the other forms.
      #
      # We then validate each argument in %args (code generated in 'args'
      # handler).
      #
      # Finally, unless original args_as is 'hash' we convert to the final form
      # that the wrapped sub expects.
      #
      # This setup is optimal when both the sub and generated wrapper accept
      # 'hash', but suboptimal for other cases (especially positional ones, as
      # they have to undergo a round-trip to hash even when both accept 'array').
      # This will be rectified in the future.
  
      my $v = $new // $value;
  
      $self->select_section('ACCEPT_ARGS');
      if ($v eq 'hash') {
           $self->push_lines(q{die 'BUG: Odd number of hash elements supplied' if @_ % 2;})
               if $opt_va;
           $self->push_lines('my %args = @_;');
      } elsif ($v eq 'hashref') {
          $self->push_lines(q{die 'BUG: $_[0] needs to be hashref' if @_ && ref($_[0]) ne "HASH";})
              if $opt_va;
          $self->push_lines('my %args = %{$_[0] // {}};');
      } elsif ($v =~ /\Aarray(ref)?\z/) {
          my $ref = $1 ? 1:0;
          if ($ref) {
              $self->push_lines(q{die 'BUG: $_[0] needs to be arrayref' if @_ && ref($_[0]) ne "ARRAY";})
                  if $opt_va;
          }
          $self->push_lines('my %args;');
          $self->select_section('ACCEPT_ARGS2');
          for my $a (sort keys %$args_p) {
              my $as = $args_p->{$a};
              my $line = '$args{'.dmp($a).'} = ';
              defined($as->{pos}) or die "Error in args property for arg '$a': ".
                  "no pos defined";
              my $pos = int($as->{pos} + 0);
              $pos >= 0 or die "Error in args property for arg '$a': ".
                  "negative value in pos";
              if ($as->{greedy}) {
                  if ($ref) {
                      $line .= '[splice @{$_[0]}, '.$pos.'] if @{$_[0]} > '.$pos;
                  } else {
                      $line .= '[splice @_, '.$pos.'] if @_ > '.$pos;
                  }
              } else {
                  if ($ref) {
                      $line .= '$_[0]['.$pos.'] if @{$_[0]} > '.$pos;
                  } else {
                      $line .= '$_['.$pos.'] if @_ > '.$pos;
                  }
              }
              $self->push_lines("$line;");
          }
      } else {
          die "Unknown args_as value '$v'";
      }
  
      $self->select_section('ACCEPT_ARGS');
      if ($value eq 'hashref') {
          $self->push_lines('my $args;');
      } elsif ($value eq 'array') {
          $self->push_lines('my @args;');
      } elsif ($value eq 'arrayref') {
          $self->push_lines('my $args;');
      }
  
      my $tok;
      $self->select_section('before_call_feed_args');
      $v = $value;
      if ($v eq 'hash') {
          $tok = '%args';
      } elsif ($v eq 'hashref') {
          $tok = '$args';
          $self->push_lines($tok.' = \%args;'); # XXX should we set each arg instead?
      } elsif ($v =~ /\Aarray(ref)?\z/) {
          my $ref = $1 ? 1:0;
          $tok = ($ref ? '$':'@') . 'args';
          for my $a (sort {$args_p->{$a}{pos} <=> $args_p->{$b}{pos}}
                         keys %$args_p) {
              my $as = $args_p->{$a};
              my $t = '$args{'.dmp($a).'}';
              my $line;
              defined($as->{pos}) or die "Error in args property for arg '$a': ".
                  "no pos defined";
              my $pos = int($as->{pos} + 0);
              $pos >= 0 or die "Error in args property for arg '$a': ".
                  "negative value in pos";
              if ($as->{greedy}) {
                  $line = 'splice @args, '.$pos.', scalar(@args)-1, @{'.$t.'}';
              } else {
                  $line = '$args'.($ref ? '->':'').'['.$pos."] = $t if exists $t";
              }
              $self->push_lines("$line;");
          }
      } else {
          die "Unknown args_as value '$v'";
      }
      $self->{_args_token} = $tok;
  }
  
  sub _sah {
      require Data::Sah;
  
      my $self = shift;
      state $sah = Data::Sah->new;
      $sah;
  }
  
  sub _plc {
      my $self = shift;
      state $plc = do {
          my $plc = $self->_sah->get_compiler("perl");
          $plc->comment_style('shell2'); # to make all comment uses ## instead of #
          $plc;
      };
  }
  
  sub _handle_args {
      my ($self, %args) = @_;
  
      my $v = $args{v} // $self->{_meta}{args};
      return unless $v;
  
      my $opt_sin = $self->{_args}{_schema_is_normalized};
      my $opt_va  = $self->{_args}{validate_args};
  
      my $prefix = $args{prefix} // '';
      my $argsterm = $args{argsterm} // '%args';
  
      if ($opt_va) {
          $self->_add_module("use experimental 'smartmatch'");
          $self->select_section('before_call_arg_validation');
          $self->push_lines('', '# check args') if $prefix eq '';
          $self->push_lines("for (sort keys $argsterm) {");
          $self->indent;
          $self->_errif(400, q["Invalid argument name (please use letters/numbers/underscores only)'].$prefix.q[$_'"],
                        '!/\A(-?)\w+(\.\w+)*\z/o');
          $self->_errif(400, q["Unknown argument '].$prefix.q[$_'"],
                        '!($1 || $_ ~~ '.dmp([sort keys %$v]).')');
          $self->unindent;
          $self->push_lines('}');
      }
  
      for my $argname (sort keys %$v) {
          my $argspec = $v->{$argname};
  
          my $argterm = $argsterm;
          if ($argterm =~ /^%\{\s*(.+)\s*\}/) {
              $argterm = $1 . "->{'$argname'}";
          } elsif ($argterm =~ s/^%/\$/) {
              $argterm .= "{'$argname'}";
          } else {
              $argterm .= "->{'$argname'}";
          }
  
          my $has_default_prop = exists($argspec->{default});
          my $sch = $argspec->{schema};
  
          if ($sch) {
              my $has_sch_default  = ref($sch) eq 'ARRAY' &&
                  exists($sch->[1]{default}) ? 1:0;
              if ($opt_va) {
  
                  $self->push_lines("if (exists($argterm)) {");
                  $self->indent;
  
                  if ($argspec->{stream}) {
                      die "Error in schema for argument '$argname': must be str/buf/array if stream=1"
                          unless $sch->[0] =~ /\A(str|buf|array)\z/; # XXX allow 'any' if all of its 'of' values are str/buf/array
                      die "Error in schema for argument '$argname': must specify 'of' array clause if stream=1"
                          if $sch->[0] eq 'array' && !$sch->[1]{of};
  
                      $self->_errif(
                          400,
                          qq["Argument '$prefix$argname' (stream) fails validation: must be coderef"],
                          "!(ref($argterm) eq 'CODE')",
                      );
                      $self->push_lines('{ ## introduce scope because we want to declare a generic variable $i');
                      $self->indent;
                      $self->push_lines(
                          'my $i = -1;',
                          "my \$origsub = $argterm;",
                          '# arg coderef wrapper for validation',
                          "$argterm = sub {",
                      );
                      $self->indent;
                      $self->push_lines(
                          '$i++;',
                          "my \$rec = \$origsub->();",
                          'return undef unless defined $rec;',
                      );
                  }
  
                  my $dn = $argname; $dn =~ s/\W+/_/g;
                  my $cd = $self->_plc->compile(
                      data_name            => $dn,
                      data_term            => $argspec->{stream} ? '$rec' : $argterm,
                      schema               => $argspec->{stream} && $sch->[0] eq 'array' ? $sch->[1]{of} : $sch,
                      schema_is_normalized => $opt_sin,
                      return_type          => 'str',
                      indent_level         => $self->get_indent_level + 1,
                      core                 => $self->{_args}{core},
                      core_or_pp           => $self->{_args}{core_or_pp},
                      pp                   => $self->{_args}{pp},
                      %{ $self->{_args}{_extra_sah_compiler_args} // {}},
                  );
                  die "Incompatible Data::Sah version (cd v=$cd->{v}, expected 2)" unless $cd->{v} == 2;
                  for my $mod_rec (@{ $cd->{modules} }) {
                      next unless $mod_rec->{phase} eq 'runtime';
                      $self->_add_module($mod_rec->{use_statement} // $mod_rec->{name});
                  }
                  $self->_add_var($_, $cd->{vars}{$_})
                      for sort keys %{ $cd->{vars} };
                  $cd->{result} =~ s/\A\s+//;
                  $self->push_lines(
                      "my \$err_$dn;",
                      "$cd->{result};",
                  );
                  if ($argspec->{stream}) {
                      $self->push_lines(
                          'if ('."\$err_$dn".') { die "Record #$i of streaming argument '."'$prefix$argname'".' ($rec) fails validation: '."\$err_$dn".'" }',
                          '$rec;',
                      );
                  } else {
                      $self->_errif(
                          400, qq["Argument '$prefix$argname' fails validation: \$err_$dn"],
                          "\$err_$dn");
                  }
                  if ($argspec->{meta}) {
                      $self->push_lines("# check subargs of $prefix$argname");
                      $self->_handle_args(
                              %args,
                              v => $argspec->{meta}{args},
                              prefix => ($prefix ? "$prefix/" : "") . "$argname/",
                              argsterm => '%{'.$argterm.'}',
                          );
                  }
                  if ($argspec->{element_meta}) {
                      $self->push_lines("# check element subargs of $prefix$argname");
                      my $indexterm = "$prefix$argname";
                      $indexterm =~ s/\W+/_/g;
                      $indexterm = '$i_' . $indexterm;
                      $self->push_lines('for my '.$indexterm.' (0..$#{ '.$argterm.' }) {');
                      $self->indent;
                      $self->_errif(
                          400, qq("Argument '$prefix$argname\[).qq($indexterm]' fails validation: must be hash"),
                          "ref($argterm\->[$indexterm]) ne 'HASH'");
                      $self->_handle_args(
                          %args,
                          v => $argspec->{element_meta}{args},
                          prefix => ($prefix ? "$prefix/" : "") . "$argname\[$indexterm]/",
                          argsterm => '%{'.$argterm.'->['.$indexterm.']}',
                      );
                      $self->unindent;
                      $self->push_lines('}');
                  }
                  $self->unindent;
                  if ($argspec->{stream}) {
                      $self->push_lines('}; ## arg coderef wrapper');
                      $self->unindent;
                      $self->push_lines('} ## close scope');
                      $self->unindent;
                  }
                  if ($has_default_prop) {
                      $self->push_lines(
                          '} else {',
                          "    $argterm //= ".dmp($argspec->{default}).";");
                  } elsif ($has_sch_default) {
                      $self->push_lines(
                          '} else {',
                          "    $argterm //= ".dmp($sch->[1]{default}).";");
                  }
                  $self->push_lines("} ## if exists arg $prefix$argname");
              } # if opt_va
  
          } elsif ($has_default_prop) {
              # doesn't have schema but have 'default' property, we still need to
              # set default here
              $self->push_lines("$argterm = ".dmp($argspec->{default}).
                                    " if !exists($argterm);");
          }
          if ($argspec->{req} && $opt_va) {
              $self->_errif(
                  400, qq["Missing required argument: $argname"],
                  "!exists($argterm)");
          }
      } # for arg
  }
  
  sub handlemeta_args { {v=>2, prio=>10} }
  sub handle_args {
      my ($self, %args) = @_;
      $self->_handle_args(%args);
  }
  
  # after args
  sub handlemeta_args_rels { {v=>2, prio=>11} }
  sub handle_args_rels {
      my ($self, %args) = @_;
  
      my $v = $args{v} // $self->{_meta}{args_rels};
      return unless $v;
  
      my $argsterm = $args{argsterm} // '%args';
  
      $self->select_section('before_call_arg_validation');
      $self->push_lines('', '# check args_rels');
  
      my $dn = "args_rels";
      my $hc = $self->_sah->get_compiler("human");
      my $cd_h = $hc->init_cd;
      $cd_h->{args}{lang} //= $cd_h->{default_lang};
  
      my $cd = $self->_plc->compile(
          data_name            => $dn,
          data_term            => "\\$argsterm",
          schema               => ['hash', $v],
          return_type          => 'str',
          indent_level         => $self->get_indent_level + 1,
          human_hash_values    => {
              field  => $hc->_xlt($cd_h, "argument"),
              fields => $hc->_xlt($cd_h, "arguments"),
          },
          core                 => $self->{_args}{core},
          core_or_pp           => $self->{_args}{core_or_pp},
          pp                   => $self->{_args}{pp},
      );
      die "Incompatible Data::Sah version (cd v=$cd->{v}, expected 2)" unless $cd->{v} == 2;
      for my $mod_rec (@{ $cd->{modules} }) {
          next unless $mod_rec->{phase} eq 'runtime';
          $self->_add_module($mod_rec->{use_statement} // $mod_rec->{name});
      }
      $self->_add_var($_, $cd->{vars}{$_}) for sort keys %{ $cd->{vars} };
      $cd->{result} =~ s/\A\s+//;
      $self->push_lines(
          "my \$err_$dn;",
          "$cd->{result};",
      );
      $self->_errif(
          400, qq["\$err_$dn"],
          "\$err_$dn");
  }
  
  sub handlemeta_result { {v=>2, prio=>50} }
  sub handle_result {
      require Data::Sah;
  
      my ($self, %args) = @_;
  
      my $meta = $self->{_meta};
      my $v = $meta->{result};
      return unless $v;
  
      my $opt_sin = $self->{_args}{_schema_is_normalized};
      my $opt_vr  = $self->{_args}{validate_result};
  
      my %schemas_by_status; # key = status, value = schema
  
      # collect and check handlers
      my %handler_args;
      my %handler_metas;
      for my $k0 (keys %$v) {
          my $k = $k0;
          $k =~ s/\..+//;
          next if $k =~ /\A_/;
  
          # check builtin result spec key
          next if $k =~ /\A(
                             summary|description|tags|default_lang|
                             schema|statuses|stream|
                             x
                         )\z/x;
          # try a property module first
          require "Perinci/Sub/Property/result/$k.pm";
          my $meth = "handlemeta_result__$k";
          unless ($self->can($meth)) {
              die "No handler for property result/$k0 ($meth)";
          }
          my $hm = $self->$meth;
          $hm->{v} //= 1;
          next unless defined $hm->{prio};
          die "Please update property handler result/$k which is still at v=$hm->{v} ".
              "(needs v=$protocol_version)"
                  unless $hm->{v} == $protocol_version;
          my $ha = {
              prio=>$hm->{prio}, value=>$v->{$k0}, property=>$k0,
              meth=>"handle_result__$k",
          };
          $handler_args{$k} = $ha;
          $handler_metas{$k} = $hm;
      }
  
      # call all the handlers in order
      for my $k (sort {$handler_args{$a}{prio} <=> $handler_args{$b}{prio}}
                     keys %handler_args) {
          my $ha = $handler_args{$k};
          my $meth = $ha->{meth};
          local $self->{_cur_handler}      = $meth;
          local $self->{_cur_handler_meta} = $handler_metas{$k};
          local $self->{_cur_handler_args} = $ha;
          $self->$meth(args=>\%args, meta=>$meta, %$ha);
      }
  
      # validate result
      my @modules;
      if ($v->{schema} && $opt_vr) {
          $schemas_by_status{200} = $v->{schema};
      }
      if ($v->{statuses} && $opt_vr) {
          for my $s (keys %{$v->{statuses}}) {
              my $sv = $v->{statuses}{$s};
              if ($sv->{schema}) {
                  $schemas_by_status{$s} = $sv->{schema};
              }
          }
      }
  
      my $sub_name = $self->{_args}{sub_name};
  
      if ($opt_vr) {
          $self->select_section('after_call_res_validation');
          $self->push_lines(
              'my $_w_res2 = $_w_res->[2];',
              'my $_w_res_is_stream = $_w_res->[3]{stream} // ' . ($v->{stream} ? 1:0) . ';',
          );
          $self->_errif(
              500,
              q["Stream result must be coderef"],
              '$_w_res_is_stream && ref($_w_res2) ne "CODE"',
          );
          for my $s (sort keys %schemas_by_status) {
              my $sch = $schemas_by_status{$s};
              if ($v->{stream}) {
                  die "Error in result schema: must be str/buf/array if stream=1"
                      unless $sch->[0] =~ /\A(str|buf|array)\z/; # XXX allow 'any' if all of its 'of' values are str/buf/array
                  die "Error in result schema: must specify 'of' array clause if stream=1"
                      if $sch->[0] eq 'array' && !$sch->[1]{of};
              }
              $self->push_lines("if (\$_w_res->[0] == $s) {");
              $self->indent;
              $self->push_lines('if (!$_w_res_is_stream) {');
              $self->indent;
  
              # validation for when not a stream
              my $cd = $self->_plc->compile(
                  data_name            => '_w_res2',
                  # err_res can clash on arg named 'res'
                  err_term             => '$_w_err2_res',
                  schema               => $sch,
                  schema_is_normalized => $opt_sin,
                  return_type          => 'str',
                  indent_level         => $self->get_indent_level + 1,
                  core                 => $self->{_args}{core},
                  core_or_pp           => $self->{_args}{core_or_pp},
                  pp                   => $self->{_args}{pp},
                  %{ $self->{_args}{_extra_sah_compiler_args} // {}},
              );
              die "Incompatible Data::Sah version (cd v=$cd->{v}, expected 2)" unless $cd->{v} == 2;
              for my $mod_rec (@{ $cd->{modules} }) {
                  next unless $mod_rec->{phase} eq 'runtime';
                  $self->_add_module($mod_rec->{use_statement} // $mod_rec->{name});
              }
              $self->_add_var($_, $cd->{vars}{$_})
                  for sort keys %{ $cd->{vars} };
              $self->push_lines("my \$_w_err2_res;");
              $cd->{result} =~ s/\A\s+//;
              $self->push_lines("$cd->{result};");
              $self->_errif(
                  500,
                  qq["BUG: Result from sub $sub_name (\$_w_res2) fails validation: ].
                      qq[\$_w_err2_res"],
                  "\$_w_err2_res");
              $self->unindent;
              $self->push_lines("} else {"); # stream
              $self->indent;
              $self->push_lines(
                  'my $i = -1;',
                  '# wrap result coderef for validation',
                  '$_w_res->[2] = sub {',
              );
              $self->indent;
              $self->push_lines(
                  '$i++;',
                  'my $rec = $_w_res2->();',
                  'return undef unless defined $rec;',
              );
              # generate schema code once again, this time for when stream
              $cd = $self->_plc->compile(
                  data_name            => 'rec',
                  # err_res can clash on arg named 'res'
                  err_term             => '$rec_err',
                  schema               => $sch->[0] eq 'array' ? $sch->[1]{of} : $sch,
                  schema_is_normalized => $opt_sin,
                  return_type          => 'str',
                  indent_level         => $self->get_indent_level + 1,
                  core                 => $self->{_args}{core},
                  core_or_pp           => $self->{_args}{core_or_pp},
                  pp                   => $self->{_args}{pp},
                  %{ $self->{_args}{_extra_sah_compiler_args} // {}},
              );
              die "Incompatible Data::Sah version (cd v=$cd->{v}, expected 2)" unless $cd->{v} == 2;
              # XXX no need to require modules required by validator?
              $self->push_lines('my $rec_err;');
              $cd->{result} =~ s/\A\s+//;
              $self->push_lines("$cd->{result};");
              $self->push_lines('if ($rec_err) { die "BUG: Result stream record #$i ($rec) fails validation: $rec_err" }');
              $self->push_lines('$rec;');
              $self->unindent;
              $self->push_lines('}; ## result coderef wrapper');
              $self->unindent;
              $self->push_lines("} ## if stream");
              $self->unindent;
              $self->push_lines("} ## if status=$s");
          } # for schemas_by_status
      }
  }
  
  sub handlemeta_result_naked { {v=>2, prio=>99, convert=>1} }
  sub handle_result_naked {
      my ($self, %args) = @_;
  
      my $old = $args{value};
      my $v   = $args{new} // $old;
  
      return if !!$v == !!$old;
  
      $self->select_section('AFTER_CALL_ADD_OR_STRIP_RESULT_ENVELOPE');
      if ($v) {
          $self->push_lines(
              '', '# strip result envelope',
              '$_w_res = $_w_res->[2];',
          );
      } else {
          $self->push_lines(
              '', '# add result envelope',
              '$_w_res = [200, "OK", $_w_res];',
          );
      }
  }
  
  sub handlemeta_deps { {v=>2, prio=>0.5} }
  sub handle_deps {
      my ($self, %args) = @_;
      my $value = $args{value};
      my $meta  = $self->{_meta};
      my $v     = $self->{_args}{meta_name};
      $self->select_section('before_call_after_arg_validation');
      $self->push_lines('', '# check dependencies');
      $self->_add_module("Perinci::Sub::DepChecker");
      #$self->push_lines('use Data::Dump; dd '.$v.';');
      $self->push_lines('my $_w_deps_res = Perinci::Sub::DepChecker::check_deps('.
                            $v.'->{deps});');
      $self->_errif(412, '"Deps failed: $_w_deps_res"', '$_w_deps_res');
  
      # we handle some deps our own
      if ($value->{tmp_dir}) {
          $self->_errif(412, '"Dep failed: please specify -tmp_dir"',
                        '!$args{-tmp_dir}');
      }
      if ($value->{trash_dir}) {
          $self->_errif(412, '"Dep failed: please specify -trash_dir"',
                        '!$args{-trash_dir}');
      }
      if ($value->{undo_trash_dir}) {
          $self->_errif(412, '"Dep failed: please specify -undo_trash_dir"',
                        '!($args{-undo_trash_dir} || $args{-tx_manager} || '.
                            '$args{-undo_action} && $args{-undo_action}=~/\A(?:undo|redo)\z/)');
      }
  }
  
  sub handlemeta_x { {} }
  sub handlemeta_entity_v { {} }
  sub handlemeta_entity_date { {} }
  
  sub _reset_work_data {
      my ($self, %args) = @_;
  
      # to make it stand out more, all work/state data is prefixed with
      # underscore.
  
      $self->{_cur_section}      = undef;
      $self->{_cur_handler}      = undef;
      $self->{_cur_handler_args} = undef;
      $self->{_cur_handler_meta} = undef;
      $self->{_levels}           = {};
      $self->{_codes}            = {};
      $self->{_modules}          = []; # modules loaded by wrapper sub
      $self->{$_} = $args{$_} for keys %args;
  }
  
  sub wrap {
      require Scalar::Util;
  
      my ($self, %args) = @_;
  
      my $wrap_log_prop = "x.perinci.sub.wrapper.logs";
  
      # required arguments
      my $sub      = $args{sub};
      my $sub_name = $args{sub_name};
      $sub || $sub_name or return [400, "Please specify sub or sub_name"];
      $args{meta} or return [400, "Please specify meta"];
      my $meta_name = $args{meta_name};
      # we clone the meta because we'll replace stuffs
      my $meta     = clone($args{meta});
      my $wrap_logs = $meta->{$wrap_log_prop} // [];
  
      # currently internal args, not exposed/documented
      $args{_compiled_package}           //= 'Perinci::Sub::Wrapped';
      my $comppkg  = $args{_compiled_package};
      $args{_schema_is_normalized}       //=
          $wrap_logs->[-1] && $wrap_logs->[-1]{normalize_schema} ? 1 : 0;
      $args{_embed}                      //= 0;
      $args{_extra_sah_compiler_args}    //= undef;
  
      # defaults for arguments
      $args{indent}                      //= " " x 4;
      $args{convert}                     //= {};
      $args{compile}                     //= 1;
      $args{log}                         //= 1;
      $args{validate_args}               //= 0
          # function might want to disable validate_args by default, e.g. if
          # source code has been processed with
          # Dist::Zilla::Plugin::Rinci::Validate
          if $meta->{'x.perinci.sub.wrapper.disable_validate_args'};
      $args{validate_args}               //= 0
          # by default do not validate args again if previous wrapper(s) have
          # already done it
          if (grep {$_->{validate_args}} @$wrap_logs);
      $args{validate_args}               //= 1;
      $args{validate_result}             //= 0
          # function might want to disable validate_result by default, e.g. if
          # source code has been processed with
          # Dist::Zilla::Plugin::Rinci::Validate
          if $meta->{'x.perinci.sub.wrapper.disable_validate_result'};
      $args{validate_result}             //= 0
          # by default do not validate result again if previous wrapper(s) have
          # already done it
          if (grep {$_->{validate_result}} @$wrap_logs);
      $args{validate_result}             //= 1;
      $args{core}                        //= $ENV{PERINCI_WRAPPER_CORE};
      $args{core_or_pp}                  //= $ENV{PERINCI_WRAPPER_CORE_OR_PP};
      $args{pp}                          //= $ENV{PERINCI_WRAPPER_PP};
  
      my $sub_ref_name;
      # if sub_name is not provided, create a unique name for it. it is needed by
      # the wrapper-generated code (e.g. printing error messages)
      if (!$sub_name || $sub) {
          my $n = $comppkg . "::sub".Scalar::Util::refaddr($sub);
          no strict 'refs'; no warnings; ${$n} = $sub;
          use experimental 'smartmatch';
          if (!$sub_name) {
              $args{sub_name} = $sub_name = '$' . $n;
          }
          $sub_ref_name = '$' . $n;
      }
      # if meta name is not provided, we store the meta somewhere, it is needed by
      # the wrapper-generated code (e.g. deps clause).
      if (!$meta_name) {
          my $n = $comppkg . "::meta".Scalar::Util::refaddr($meta);
          no strict 'refs'; no warnings; ${$n} = $meta;
          use experimental 'smartmatch';
          $args{meta_name} = $meta_name = '$' . $n;
      }
  
      # shallow copy
      my $opt_cvt = { %{ $args{convert} } };
      my $opt_sin = $args{_schema_is_normalized};
  
      $meta = normalize_function_metadata($meta)
          unless $opt_sin;
  
      $self->_reset_work_data(_args=>\%args, _meta=>$meta);
  
      # add properties from convert, if not yet mentioned in meta
      for (keys %$opt_cvt) {
          $meta->{$_} = undef unless exists $meta->{$_};
      }
  
      # mark in the metadata that we have done the wrapping, so future wrapping
      # can avoid needless duplicated functionality (like validating args twice).
      # note that handler can log their mark too.
      {
          my @wrap_log = @{ $meta->{$wrap_log_prop} // [] };
          push @wrap_log, {
              validate_args     => $args{validate_args},
              validate_result   => $args{validate_result},
              normalize_schema  => !$opt_sin,
          };
          if ($args{log}) {
              $meta->{$wrap_log_prop} = \@wrap_log;
          }
      }
  
      # start iterating over properties
  
      $self->select_section('OPEN_SUB');
      $self->push_lines(
          "package $comppkg;", 'sub {');
      $self->indent;
  
      $meta->{args_as} //= "hash";
  
      if ($meta->{args_as} =~ /hash/) {
          $self->select_section('before_call_after_arg_validation');
          # tell function it's being wrapped, currently disabled
          #$self->push_lines('$args{-wrapped} = 1;');
      }
  
      my %props = map {$_=>1} keys %$meta;
      $props{$_} = 1 for keys %$opt_cvt;
  
      # collect and check handlers
      my %handler_args;
      my %handler_metas;
      for my $k0 (keys %props) {
          my $k = $k0;
          $k =~ s/\..+//;
          next if $k =~ /\A_/;
          next if $handler_args{$k};
          #if ($k ~~ $self->{_args}{skip}) {
          #    $log->tracef("Skipped property %s (mentioned in skip)", $k);
          #    next;
          #}
          return [500, "Invalid property name $k"] unless $k =~ /\A\w+\z/;
          my $meth = "handlemeta_$k";
          unless ($self->can($meth)) {
              # try a property module first
              require "Perinci/Sub/Property/$k.pm";
              unless ($self->can($meth)) {
                  return [500, "No handler for property $k0 ($meth)"];
              }
          }
          my $hm = $self->$meth;
          $hm->{v} //= 1;
          next unless defined $hm->{prio};
          die "Please update property handler $k which is still at v=$hm->{v} ".
              "(needs v=$protocol_version)"
                  unless $hm->{v} == $protocol_version;
          my $ha = {
              prio=>$hm->{prio}, value=>$meta->{$k0}, property=>$k0,
              meth=>"handle_$k",
          };
          if (exists $opt_cvt->{$k0}) {
              return [501, "Property '$k0' does not support conversion"]
                  unless $hm->{convert};
              $ha->{new}   = $opt_cvt->{$k0};
              $meta->{$k0} = $opt_cvt->{$k0};
          }
          $handler_args{$k}  = $ha;
          $handler_metas{$k} = $hm;
      }
  
      # call all the handlers in order
      for my $k (sort {$handler_args{$a}{prio} <=> $handler_args{$b}{prio}}
                     keys %handler_args) {
          my $ha = $handler_args{$k};
          my $meth = $ha->{meth};
          local $self->{_cur_handler}      = $meth;
          local $self->{_cur_handler_meta} = $handler_metas{$k};
          local $self->{_cur_handler_args} = $ha;
          $self->$meth(args=>\%args, meta=>$meta, %$ha);
      }
  
      my $needs_store_res = $self->_needs_store_res;
      if ($needs_store_res) {
          $self->_add_var('_w_res');
      }
  
      $self->select_section('CALL');
      my $sn = $sub_ref_name // $sub_name;
      $self->push_lines(
          ($needs_store_res ? '$_w_res = ' : "") .
          $sn. ($sn =~ /^\$/ ? "->" : "").
              "(".$self->{_args_token}.");");
      if ($args{validate_result}) {
          $self->select_section('after_call_before_res_validation');
          unless ($meta->{result_naked}) {
              $self->push_lines(
                  '',
                  '# check that sub produces enveloped result',
                  'unless (ref($_w_res) eq "ARRAY" && $_w_res->[0]) {',
              );
              $self->indent;
              if ($log->is_trace) {
                  $self->_add_module('Data::Dumper');
                  $self->push_lines(
                      'local $Data::Dumper::Purity   = 1;',
                      'local $Data::Dumper::Terse    = 1;',
                      'local $Data::Dumper::Indent   = 0;',
                  );
                  $self->_err(500,
                              qq['BUG: Sub $sub_name does not produce envelope: '.].
                                  qq[Data::Dumper::Dumper(\$_w_res)]);
              } else {
                  $self->_err(500,
                              qq['BUG: Sub $sub_name does not produce envelope']);
              }
              $self->unindent;
              $self->push_lines('}');
          }
      }
  
      my $use_eval = $self->_needs_eval;
      if ($use_eval) {
          $self->select_section('CLOSE_EVAL');
          $self->push_lines('return $_w_res;');
          $self->unindent;
          $self->_add_var('_w_eval_err');
          $self->push_lines(
              '};',
              '$_w_eval_err = $@;');
  
          # _needs_eval will automatically be enabled here, due after_eval being
          # filled
          $self->select_section('after_eval');
          $self->push_lines('warn $_w_eval_err if $_w_eval_err;');
          $self->_errif(500, '"Function died: $_w_eval_err"', '$_w_eval_err');
  
          $self->select_section('OPEN_EVAL');
          $self->push_lines('eval {');
          $self->indent;
      }
  
      # return sub result
      $self->select_section('BEFORE_CLOSE_SUB');
      $self->push_lines('return $_w_res;') if $needs_store_res;
      $self->select_section('CLOSE_SUB');
      $self->unindent;
      $self->push_lines('}'); # wrapper sub
  
      # return wrap result
      my $result = {
          sub_name     => $sub_name,
          sub_ref_name => $sub_ref_name,
          meta         => $meta,
          meta_name    => $meta_name,
          use_eval     => $use_eval,
      };
      if ($args{embed}) {
          $result->{source} = $self->_format_embed_wrapper_code;
      } else {
          my $source = $self->_format_dyn_wrapper_code;
          if ($Log_Wrapper_Code && $log->is_trace) {
              require String::LineNumber;
              $log->tracef("wrapper code:\n%s",
                           $ENV{LINENUM} // 1 ?
                               String::LineNumber::linenum($source) :
                                     $source);
          }
          $result->{source} = $source;
          if ($args{compile}) {
              my $wrapped = eval $source;
              die "BUG: Wrapper code can't be compiled: $@" if $@ || !$wrapped;
              $result->{sub}  = $wrapped;
          }
      }
  
      [200, "OK", $result];
  }
  
  $SPEC{wrap_sub} = {
      v => 1.1,
      summary => 'Wrap subroutine to do various things, '.
          'like enforcing Rinci properties',
      result => {
          summary => 'The wrapped subroutine along with its new metadata',
          description => <<'_',
  
  Aside from wrapping the subroutine, the wrapper will also create a new metadata
  for the subroutine. The new metadata is a clone of the original, with some
  properties changed, e.g. schema in `args` and `result` normalized, some values
  changed according to the `convert` argument, some defaults set, etc.
  
  The new metadata will also contain (or append) the wrapping log located in the
  `x.perinci.sub.wrapper.logs` attribute. The wrapping log marks that the wrapper
  has added some functionality (like validating arguments or result) so that
  future nested wrapper can choose to avoid duplicating the same functionality.
  
  _
          schema=>['hash*'=>{keys=>{
              sub=>'code*',
              source=>['any*' => of => ['str*', ['hash*' => each_value=>'str*']]],
              meta=>'hash*',
          }}],
      },
      args => {
          sub => {
              schema => 'str*',
              summary => 'The code to be wrapped',
              description => <<'_',
  
  At least one of `sub` or `sub_name` must be specified.
  
  _
          },
          sub_name => {
              schema => 'str*',
              summary => 'The name of the subroutine, '.
                  'e.g. func or Foo::func (qualified)',
              description => <<'_',
  
  At least one of `sub` or `sub_name` must be specified.
  
  _
          },
          meta => {
              schema => 'hash*',
              summary => 'The function metadata',
              req => 1,
          },
          meta_name => {
              schema => 'str*',
              summary => 'Where to find the metadata, e.g. "$SPEC{foo}"',
              description => <<'_',
  
  Some wrapper code (e.g. handler for `dep` property) needs to refer to the
  function metadata. If not provided, the wrapper will store the function metadata
  in a unique variable (e.g. `$Perinci::Sub::Wrapped::meta34127816`).
  
  _
          },
          convert => {
              schema => 'hash*',
              summary => 'Properties to convert to new value',
              description => <<'_',
  
  Not all properties can be converted, but these are a partial list of those that
  can: v (usually do not need to be specified when converting from 1.0 to 1.1,
  will be done automatically), args_as, result_naked, default_lang.
  
  _
          },
          compile => {
              schema => ['bool' => {default=>1}],
              summary => 'Whether to compile the generated wrapper',
              description => <<'_',
  
  Can be set to 0 to not actually wrap but just return the generated wrapper
  source code.
  
  _
          },
          compile => {
              schema => ['bool' => {default=>1}],
              summary => 'Whether to compile the generated wrapper',
              description => <<'_',
  
  Can be set to 0 to not actually wrap but just return the generated wrapper
  source code.
  
  _
          },
          debug => {
              schema => [bool => {default=>0}],
              summary => 'Generate code with debugging',
              description => <<'_',
  
  If turned on, will produce various debugging in the generated code. Currently
  what this does:
  
  * add more comments (e.g. for each property handler)
  
  _
          },
          validate_args => {
              schema => ['bool'],
              summary => 'Whether wrapper should validate arguments',
              description => <<'_',
  
  If set to true, will validate arguments. Validation error will cause status 400
  to be returned. The default is to enable this unless previous wrapper(s) have
  already done this.
  
  _
          },
          validate_result => {
              schema => ['bool'],
              summary => 'Whether wrapper should validate arguments',
              description => <<'_',
  
  If set to true, will validate sub's result. Validation error will cause wrapper
  to return status 500 instead of sub's result. The default is to enable this
  unless previous wrapper(s) have already done this.
  
  _
          },
          core => {
              summary => 'If set to true, will avoid the use of non-core modules',
              schema => 'bool',
          },
          core_or_pp => {
              summary => 'If set to true, will avoid the use of non-core XS modules',
              schema => 'bool',
              description => <<'_',
  
  In other words, will stick to core or pure-perl modules only.
  
  _
          },
          pp => {
              summary => 'If set to true, will avoid the use of XS modules',
              schema => 'bool',
          },
      },
  };
  sub wrap_sub {
      __PACKAGE__->new->wrap(@_);
  }
  
  1;
  # ABSTRACT: A multi-purpose subroutine wrapping framework
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Perinci::Sub::Wrapper - A multi-purpose subroutine wrapping framework
  
  =head1 VERSION
  
  This document describes version 0.83 of Perinci::Sub::Wrapper (from Perl distribution Perinci-Sub-Wrapper), released on 2016-06-02.
  
  =head1 SYNOPSIS
  
  For dynamic usage:
  
   use Perinci::Sub::Wrapper qw(wrap_sub);
   my $res = wrap_sub(sub_name => "mysub", meta=>{...});
   my ($wrapped_sub, $meta) = ($res->[2]{sub}, $res->[2]{meta});
   $wrapped_sub->(); # call the wrapped function
  
  =head1 DESCRIPTION
  
  Perinci::Sub::Wrapper (PSW for short) is an extensible subroutine wrapping
  framework. It generates code to do stuffs before calling your subroutine, like
  validate arguments, convert arguments from positional/array to named/hash or
  vice versa, etc; as well as generate code to do stuffs after calling your
  subroutine, like retry calling for a number of times if subroutine returns a
  non-success status, check subroutine result against a schema, etc). Some other
  things it can do: apply a timeout, currying, and so on.
  
  PSW differs from other function composition or decoration system like Python
  decorators (or its Perl equivalent L<Python::Decorator>) in a couple of ways:
  
  =over
  
  =item * Single wrapper
  
  Instead of multiple/nested wrapping for implementing different features, PSW
  is designed to generate a single large wrapper around your code, i.e.:
  
   sub _wrapper_for_your_sub {
       ...
       # do various stuffs before calling:
  
       # e.g. start timer
       # e.g. convert, prefill, validate arguments
       my @args = ...;
       ...
       your_sub(@args);
       ...
       # do various stuffs after calling
       ...
       # e.g. report times
       # e.g. perform retry
       # e.g. convert or envelope results
  
       # return result
   }
  
  Multiple functionalities will be added and combined in this single wrapper
  subroutine in the appropriate location. This is done to reduce function call
  overhead or depth of nested call levels. And also to make it easier to embed the
  wrapping code to your source code (see L<Dist::Zilla::Plugin::Rinci::Wrap>).
  
  Of course, you can still wrap multiple times if wanted.
  
  =item * Rinci
  
  The wrapper code is built according to the L<Rinci> metadata you provide. Rinci
  allows you to specify various things for your function, e.g. list of arguments
  including the expected data type of each argument and whether an argument is
  required or optional. PSW can then be used to generate the necessary code to
  enforce this specification, e.g. generate validator for the function arguments.
  
  Since Rinci specification is extensible, you can describe additional stuffs for
  your function and write a PSW plugin to generate the necessary code to implement
  your specification. An example is C<timeout> to specify execution time limit,
  implemented by L<Perinci::Sub::Property::timeout> which generates code to call
  function inside an C<eval()> block and use C<alarm()> to limit the execution.
  Another example is C<retry> property, implemented by
  L<Perinci::Sub::Property::retry> which generates code to call function inside a
  simple retry loop.
  
  =back
  
  Normally you do not use PSW directly in your applications. You might want to
  check out L<Perinci::Access::Perl> and L<Perinci::Exporter> on examples of
  wrapping function dynamically (during runtime), or
  L<Dist::Zilla::Plugin::Rinci::Wrap> on an example of embedding the generated
  wrapping code to source code during build.
  
  =head1 EXTENDING
  
  The framework is simple and extensible. Please delve directly into the source
  code for now. Some notes:
  
  The internal uses OO.
  
  The main wrapper building mechanism is in the C<wrap()> method.
  
  For each Rinci property, it will call C<handle_NAME()> wrapper handler method.
  The C<handlemeta_NAME()> methods are called first, to determine order of
  processing. You can supply these methods either by subclassing the class or,
  more simply, monkeypatching the method in the C<Perinci::Sub::Wrapper> package.
  
  The wrapper handler method will be called with a hash argument, containing these
  keys: B<value> (property value), B<new> (this key will exist if C<convert>
  argument of C<wrap()> exists, to convert a property to a new value).
  
  For properties that have name in the form of C<NAME1.NAME2.NAME3> (i.e., dotted)
  only the first part of the name will be used (i.e., C<handle_NAME1()>).
  
  =head1 VARIABLES
  
  =head2 $Log_Wrapper_Code (BOOL)
  
  Whether to log wrapper result. Default is from environment variable
  LOG_PERINCI_WRAPPER_CODE, or false. Logging is done with L<Log::Any> at trace
  level.
  
  =head1 RINCI FUNCTION METADATA
  
  =head2 x.perinci.sub.wrapper.disable_validate_args => bool
  
  Can be set to 1 to set C<validate_args> to 0 by default. This is used e.g. if
  you already embed/insert code to validate arguments by other means and do not
  want to repeat validating arguments. E.g. used if you use
  L<Dist::Zilla::Plugin::Rinci::Validate>.
  
  =head2 x.perinci.sub.wrapper.disable_validate_result => bool
  
  Can be set to 1 to set C<validate_result> to 0 by default. This is used e.g. if
  you already embed/insert code to validate result by other means and do not want
  to repeat validating result. E.g. used if you use
  L<Dist::Zilla::Plugin::Rinci::Validate>.
  
  =head2 x.perinci.sub.wrapper.logs => array
  
  Generated/added by this module to the function metadata for every wrapping done.
  Used to avoid adding repeated code, e.g. to validate result or arguments.
  
  =head1 PERFORMANCE NOTES
  
  The following numbers are produced on an Intel Core i5-2400 3.1GHz desktop using
  PSW v0.51 and Perl v5.18.2. Operating system is Debian sid (64bit).
  
  For perspective, empty subroutine (C<< sub {} >>) as well as C<< sub { [200,
  "OK"] } >> can be called around 5.3 mil/sec.
  
  Wrapping this subroutine C<< sub { [200, "OK"] } >> and this simple metadata C<<
  {v=>1.1} >> using default options yields call performance for C<< $sub->() >> of
  about 0.9 mil/sec. With C<< validate_args=>0 >> and C<< validate_result=>0 >>,
  it's 1.5 mil/sec.
  
  As more (and more complex) arguments are introduced and validated, overhead will
  increase. The significant portion of the overhead is in argument validation. For
  example, this metadata C<< {v=>1.1, args=>{a=>{schema=>"int"}}} >> yields 0.5
  mil/sec.
  
  =head1 FUNCTIONS
  
  
  =head2 wrap_sub(%args) -> [status, msg, result, meta]
  
  Wrap subroutine to do various things, like enforcing Rinci properties.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<compile> => I<bool> (default: 1)
  
  Whether to compile the generated wrapper.
  
  Can be set to 0 to not actually wrap but just return the generated wrapper
  source code.
  
  =item * B<convert> => I<hash>
  
  Properties to convert to new value.
  
  Not all properties can be converted, but these are a partial list of those that
  can: v (usually do not need to be specified when converting from 1.0 to 1.1,
  will be done automatically), args_as, result_naked, default_lang.
  
  =item * B<core> => I<bool>
  
  If set to true, will avoid the use of non-core modules.
  
  =item * B<core_or_pp> => I<bool>
  
  If set to true, will avoid the use of non-core XS modules.
  
  In other words, will stick to core or pure-perl modules only.
  
  =item * B<debug> => I<bool> (default: 0)
  
  Generate code with debugging.
  
  If turned on, will produce various debugging in the generated code. Currently
  what this does:
  
  =over
  
  =item * add more comments (e.g. for each property handler)
  
  =back
  
  =item * B<meta>* => I<hash>
  
  The function metadata.
  
  =item * B<meta_name> => I<str>
  
  Where to find the metadata, e.g. "$SPEC{foo}".
  
  Some wrapper code (e.g. handler for C<dep> property) needs to refer to the
  function metadata. If not provided, the wrapper will store the function metadata
  in a unique variable (e.g. C<$Perinci::Sub::Wrapped::meta34127816>).
  
  =item * B<pp> => I<bool>
  
  If set to true, will avoid the use of XS modules.
  
  =item * B<sub> => I<str>
  
  The code to be wrapped.
  
  At least one of C<sub> or C<sub_name> must be specified.
  
  =item * B<sub_name> => I<str>
  
  The name of the subroutine, e.g. func or Foo::func (qualified).
  
  At least one of C<sub> or C<sub_name> must be specified.
  
  =item * B<validate_args> => I<bool>
  
  Whether wrapper should validate arguments.
  
  If set to true, will validate arguments. Validation error will cause status 400
  to be returned. The default is to enable this unless previous wrapper(s) have
  already done this.
  
  =item * B<validate_result> => I<bool>
  
  Whether wrapper should validate arguments.
  
  If set to true, will validate sub's result. Validation error will cause wrapper
  to return status 500 instead of sub's result. The default is to enable this
  unless previous wrapper(s) have already done this.
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value: The wrapped subroutine along with its new metadata (hash)
  
  
  Aside from wrapping the subroutine, the wrapper will also create a new metadata
  for the subroutine. The new metadata is a clone of the original, with some
  properties changed, e.g. schema in C<args> and C<result> normalized, some values
  changed according to the C<convert> argument, some defaults set, etc.
  
  The new metadata will also contain (or append) the wrapping log located in the
  C<x.perinci.sub.wrapper.logs> attribute. The wrapping log marks that the wrapper
  has added some functionality (like validating arguments or result) so that
  future nested wrapper can choose to avoid duplicating the same functionality.
  
  =for Pod::Coverage ^(new|handle(meta)?_.+|wrap|add_.+|section_empty|indent|unindent|get_indent_level|select_section|push_lines)$
  
  =head1 METHODS
  
  The OO interface is only used internally or when you want to extend the wrapper.
  
  =head1 FAQ
  
  =head2 General
  
  =over
  
  =item * What is a function wrapper?
  
  A wrapper function calls the target function but with additional behaviors. The
  goal is similar to function composition or decorator system like in Python (or
  its Perl equivalent L<Python::Decorator>) where you use a higher-order function
  which accepts another function and modifies it.
  
  It is used to add various functionalities, e.g.: cache/memoization, singleton,
  adding benchmarking/timing around function call, logging, argument validation
  (parameter checking), checking pre/post-condition, authentication/authorization
  checking, etc. The Python folks use decorators quite a bit; see discussions on
  the Internet on those.
  
  =item * How is PSW different from Python::Decorator?
  
  PSW uses dynamic code generation (it generates Perl code on the fly). It also
  creates a single large wrapper instead of nested wrappers. It builds wrapper
  code according to L<Rinci> specification.
  
  =item * Why use code generation?
  
  Mainly because L<Data::Sah>, which is the module used to do argument validation,
  also uses code generation. Data::Sah allows us to do data validation at full
  Perl speed, which can be one or two orders of magnitude faster than
  "interpreter" modules like L<Data::FormValidator>.
  
  =item * Why use a single large wrapper?
  
  This is just a design approach. It can impose some restriction for wrapper code
  authors, since everything needs to be put in a single subroutine, but has nice
  properties like less stack trace depth and less function call overhead.
  
  =back
  
  =head2 Debugging
  
  =over
  
  =item * How to display the wrapper code being generated?
  
  If environment variable L<LOG_PERINCI_WRAPPER_CODE> or package variable
  $Log_Perinci_Wrapper_Code is set to true, generated wrapper source code is
  logged at trace level using L<Log::Any>. It can be displayed, for example, using
  L<Log::Any::App>:
  
   % LOG=1 LOG_PERINCI_WRAPPER_CODE=1 TRACE=1 \
     perl -MLog::Any::App -MPerinci::Sub::Wrapper=wrap_sub \
     -e 'wrap_sub(sub=>sub{}, meta=>{v=>1.1, args=>{a=>{schema=>"int"}}});'
  
  Note that L<Data::Sah> (the module used to generate validator code) observes
  C<LOG_SAH_VALIDATOR_CODE>, but during wrapping this environment flag is
  currently disabled by this module, so you need to set
  L<LOG_PERINCI_WRAPPER_CODE> instead.
  
  =back
  
  =head2 caller() doesn't work from inside my wrapped code!
  
  Wrapping adds at least one or two levels of calls: one for the wrapper
  subroutine itself, the other is for the eval trap when necessary.
  
  This poses a problem if you need to call caller() from within your wrapped code;
  it will also be off by at least one or two.
  
  The solution is for your function to use the caller() replacement, provided by
  L<Perinci::Sub::Util>. Or use embedded mode, where the wrapper code won't add
  extra subroutine calls.
  
  =head1 ENVIRONMENT
  
  =head2 LOG_PERINCI_WRAPPER_CODE (bool)
  
  If set to 1, will log the generated wrapper code. This value is used to set
  C<$Log_Wrapper_Code> if it is not already set.
  
  =head2 PERINCI_WRAPPER_CORE => bool
  
  Set default for wrap argument C<core>.
  
  =head2 PERINCI_WRAPPER_CORE_OR_PP => bool
  
  Set default for wrap argument C<core_or_pp>.
  
  =head2 PERINCI_WRAPPER_PP => bool
  
  Set default for wrap argument C<pp>.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Sub-Wrapper>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Perinci-Sub-Wrapper>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Sub-Wrapper>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Perinci>, L<Rinci>
  
  L<Python::Decorator>
  
  L<Dist::Zilla::Plugin::Rinci::Wrap>
  
  L<Dist::Zilla::Plugin::Rinci::Validate>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PERINCI_SUB_WRAPPER

    $main::fatpacked{"Proc/ChildError.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PROC_CHILDERROR';
  package Proc::ChildError;
  
  our $DATE = '2016-01-06'; # DATE
  our $VERSION = '0.04'; # VERSION
  
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(explain_child_error);
  
  sub explain_child_error {
      my $opts;
      if (ref($_[0]) eq 'HASH') {
          $opts = shift;
      } else {
          $opts = {};
      }
  
      my ($num, $str);
      if (defined $_[0]) {
          $num = $_[0];
          $str = $_[1];
      } else {
          $num = $?;
          $str = $!;
      }
  
      my $prefix = "";
      if (defined $opts->{prog}) {
          $prefix = "$opts->{prog} ";
      }
  
      if ($num == -1) {
          return "${prefix}failed to execute: ".($str ? "$str ":"")."($num)";
      } elsif ($num & 127) {
          return sprintf(
              "${prefix}died with signal %d, %s coredump",
              ($num & 127),
              (($num & 128) ? 'with' : 'without'));
      } else {
          return sprintf("${prefix}exited with code %d", $num >> 8);
      }
  }
  
  1;
  # ABSTRACT: Explain process child error
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Proc::ChildError - Explain process child error
  
  =head1 VERSION
  
  This document describes version 0.04 of Proc::ChildError (from Perl distribution Proc-ChildError), released on 2016-01-06.
  
  =head1 FUNCTIONS
  
  =head2 explain_child_error([\%opts, ]$child_error, $os_error) => STR
  
  Produce a string description of an error number. C<$child_error> defaults to
  C<$?> if not specified. C<$os_error> defaults to C<$!> if not specified.
  
  The algorithm is taken from perldoc -f system. Some sample output:
  
   failed to execute: No such file or directory (-1)
   died with signal 15, with coredump
   exited with value 3
  
  An options hashref can be specified as the first argument to add information.
  Currently known keys:
  
  =over
  
  =item * prog => str
  
  Program name/path, to include in error messages:
  
   /usr/bin/foo failed to execute: Permission denied (-1)
   foo died with signal 15, with coredump
   /usr/bin/foo exited with value 3
  
  =back
  
  =head1 SEE ALSO
  
  L<Process::Status> provides a lightweight OO interface for C<$?>. I recommend
  this module now over Proc::ChildError.
  
  L<IPC::System::Simple> provides a replacement for Perl's C<system()>, with the
  difference that it will print a diagnostic error message similar to what
  C<Proc::ChildError> provides. You only need to do C<use IPC::System::Simple
  qw(system)> and use C<system()> as usual. Recommended.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Proc-ChildError>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Proc-ChildError>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Proc-ChildError>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PROC_CHILDERROR

    $main::fatpacked{"Proc/PID/File.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PROC_PID_FILE';
  #
  #   Proc::PID::File - pidfile manager
  #   Copyright (C) 2001-2003 Erick Calder
  #
  #   This program is free software; you can redistribute it and/or modify
  #   it under the terms of the GNU General Public License as published by
  #   the Free Software Foundation; either version 2 of the License, or
  #   (at your option) any later version.
  #
  #   This program is distributed in the hope that it will be useful,
  #   but WITHOUT ANY WARRANTY; without even the implied warranty of
  #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  #   GNU General Public License for more details.
  #
  #   You should have received a copy of the GNU General Public License
  #   along with this program; if not, write to the Free Software
  #   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  #
  
  package Proc::PID::File;
  
  =head1 NAME
  
  Proc::PID::File - a module to manage process id files
  
  =head1 SYNOPSIS
  
    use Proc::PID::File;
    die "Already running!" if Proc::PID::File->running();
  
  Process that spawn child processes may want to protect
  each separately by using multiple I<pidfiles>.
  
    my $child1 = Proc::PID::File->new(name => "lock.1");
    my $child2 = Proc::PID::File->new(name => "lock.2");
  
  which may be checked like this:
  
    <do-something> if $child1->alive();
  
  and should be released manually:
  
    $child1->release();
  
  =head1 DESCRIPTION
  
  This Perl module is useful for writers of daemons and other processes that need to tell whether they are already running, in order to prevent multiple process instances.  The module accomplishes this via *nix-style I<pidfiles>, which are files that store a process identifier.
  
  The module provides two interfaces: 1) a simple call, and
  2) an object-oriented interface
  
  =cut
  
  require Exporter;
  @ISA = qw(Exporter);
  
  use strict;
  use vars qw($VERSION $RPM_Requires);
  use Fcntl qw(:DEFAULT :flock);
  
  $VERSION = "1.27";
  $RPM_Requires = "procps";
  
  my $RUNDIR = "/var/run";
  my ($ME) = $0 =~ m|([^/]+)$|;
  my $self;
  
  # -- Simple Interface --------------------------------------------------------
  
  =head1 Simple Interface
  
  The simple interface consists of a call as indicated in the first example
  of the B<Synopsis> section above.  This approach avoids causing race
  conditions whereby one instance of a daemon could read the I<pidfile>
  after a previous instance has read it but before it has had a chance
  to write to it.
  
  =head2 running [hash[-ref]]
  
  The parameter signature for this function is identical to that of the
  I<-E<gt>new()> method described below in the B<OO Interface> section of this document. The method's return value is the same as that of I<-E<gt>alive()>.
  
  =cut
  
  sub running {
      $self = shift->new(@_);
  
  	local *FH;
  	my $pid = $self->read(*FH);
  
  	if ($pid && $pid != $$ && kill(0, $pid)) {
          $self->debug("running: $pid");
  	    close FH;
          return $self->verify($pid) ? $pid : 0;
          }
  
  	$self->write(*FH);
  	return 0;
      }
  
  # -- Object oriented Interface -----------------------------------------------
  
  =head1 OO Interface
  
  The following methods are provided:
  
  =head2 new [hash[-ref]]
  
  This method is used to create an instance object.  It automatically calls the I<-E<gt>file()> method described below and receives the same paramters.  For a listing of valid keys in this hash please refer to the aforementioned method documentation below.
  
  In addition to the above, the following constitute valid keys:
  
  =over
  
  =item I<verify> = 1 | string
  
  This parameter implements the second solution outlined in the WARNING section
  of this document and is used to verify that an existing I<pidfile> correctly
  represents a live process other than the current.  If set to a string, it will
  be interpreted as a I<regular expression> and used to search within the name
  of the running process.  Alternatively, a 1 may be passed: For Linux/FreeBSD,
  this indicates that the value of I<$0> will be used (stripped of its full
  path); for Cygwin, I<$^X> (stripped of path and extension) will be used.
  
  If the parameter is not passed, no verification will take place.  Please
  note that verification will only work for the operating systems
  listed below and that the OS will be auto-sensed.  See also DEPENDENCIES
  section below.
  
  Supported platforms: Linux, FreeBSD, Cygwin
  
  =item I<debug>
  
  Any non-zero value turns debugging output on.  Additionally, if a string
  is passed containing the character B<M>, the module name will be prefixed
  to the debugging output.
  
  =back
  
  =cut
  
  sub new {
  	my $class = shift;
  	my $self = bless({}, $class);
  	%$self = &args;
  	$self->file();	# init file path
  	$self->{debug} ||= "";
  	return $self;
  	}
  
  =head2 file [hash[-ref]]
  
  Use this method to set the path of the I<pidfile>.  The method receives an optional hash (or hash reference) with the keys listed below, from which it makes a path of the format: F<$dir/$name.pid>.
  
  =over
  
  =item I<dir>
  
  Specifies the directory to place the pid file.  If left unspecified,
  defaults to F</var/run>.
  
  =item I<name>
  
  Indicates the name of the current process.  When not specified, defaults
  to I<basename($0)>.
  
  =back
  
  =cut
  
  sub file {
  	my $self = shift;
  	%$self = (%$self, &args);
  	$self->{dir} ||= $RUNDIR;
  	$self->{name} ||= $ME;
  	$self->{path} = sprintf("%s/%s.pid", $self->{dir}, $self->{name});
  	}
  
  =head2 alive
  
  Returns true when the process is already running.  Please note that this
  call must be made *after* daemonisation i.e. subsequent to the call to
  fork(). If the B<verify> flag was set during the instance creation, the
  process id is verified, alternatively the flag may be passed directly
  to this method.
  
  =cut
  
  sub alive {
  	my $self = shift;
  
  	my %args = &args;
  	$self->{verify} = $args{verify} if $args{verify};
  
  	my $pid = $self->read() || "";
  	$self->debug("alive(): $pid");
  
  	if ($pid && $pid != $$ && kill(0, $pid)) {
          return $self->verify($pid) ? $pid : 0;
          }
  
  	return 0;
  	}
  
  =head2 touch
  
  Causes for the current process id to be written to the I<pidfile>.
  
  =cut
  
  sub touch {
  	shift->write();
  	}
  
  =head2 release
  
  This method is used to delete the I<pidfile> and is automatically called by DESTROY method.  It should thus be unnecessary to call it directly.
  
  =cut
  
  sub release {
  	my $self = shift;
  	$self->debug("release()");
  	unlink($self->{path}) || warn $!;
  	}
  
  =head2 locktime [hash[-ref]]
  
  This method returns the I<mtime> of the I<pidfile>.
  
  =cut
  
  sub locktime {
      my $self = shift;
      return (stat($self->{path}))[10];
  	}
  
  # -- support functionality ---------------------------------------------------
  
  sub verify {
      my ($self, $pid) = @_;
      return 1 unless $self->{verify};
  
  	my $ret = 0;
      $self->debug("verify(): OS = $^O");
      if ($^O =~ /linux|freebsd|cygwin/i) {
          my $me = $self->{verify};
  		if (!$me || $me eq "1") {
  			$me = $ME;
  			if ($^O eq "cygwin") {
  				$^X =~ m|([^/]+)$|;
  				($me = $1) =~ s/\.exe$//;
  				}
  			}
  		my $cols = delete($ENV{'COLUMNS'}); # prevents `ps` from wrapping
          my @ps = split m|$/|, qx/ps -fp $pid/
              || die "ps utility not available: $!";
          s/^\s+// for @ps;   # leading spaces confuse us
  
  		$ENV{'COLUMNS'} = $cols if defined($cols);
          no warnings;    # hate that deprecated @_ thing
          my $n = split(/\s+/, $ps[0]);
          @ps = split /\s+/, $ps[1], $n;
          $ret = $ps[$n - 1] =~ /\Q$me\E/;;
          }
  
  	$self->debug(" - ret: [$ret]");
  	$ret;
      }
  
  # Returns the process id currently stored in the file set.  If the method
  # is passed a file handle, it will return the value, leaving the file handle
  # locked.  This is useful for atomic operations where the caller needs to
  # write to the file after the read without allowing other dirty writes.
  # 
  # Please note, when passing a file handle, caller is responsible for
  # closing it. Also, file handles must be passed by reference!
  
  sub read {
  	my ($self, $fh) = @_;
  
  	sysopen $fh, $self->{path}, O_RDWR|O_CREAT
  		|| die qq/Cannot open pid file "$self->{path}": $!\n/;
  	flock($fh, LOCK_EX | LOCK_NB)
          || die qq/pid "$self->{path}" already locked: $!\n/;
  	my ($pid) = <$fh> =~ /^(\d+)/;
  	close $fh if @_ == 1;
  
  	$self->debug("read(\"$self->{path}\") = " . ($pid || ""));
  	return $pid;
  	}
  
  # Causes for the current process id to be written to the selected
  # file.  If a file handle it passed, the method assumes it has already
  # been opened, otherwise it opens its own. Please note that file
  # handles must be passed by reference!
  
  sub write {
  	my ($self, $fh) = @_;
  
  	$self->debug("write($$)");
  	if (@_ == 1) {
  		sysopen $fh, $self->{path}, O_RDWR|O_CREAT
  			|| die qq/Cannot open pid file "$self->{path}": $!\n/;
  		flock($fh, LOCK_EX | LOCK_NB)
          	|| die qq/pid "$self->{path}" already locked: $!\n/;
  		}
  	sysseek  $fh, 0, 0;
  	truncate $fh, 0;
  	syswrite $fh, "$$\n", length("$$\n");
  	close $fh || die qq/Cannot write pid file "$self->{path}": $!\n/;
  	}
  
  sub args {
  	!defined($_[0]) ? () : ref($_[0]) ? %{$_[0]} : @_;
  	}
  
  sub debug {
  	my $self = shift;
  	my $msg = shift || $_;
  
  	$msg = "> Proc::PID::File - $msg"
  		if $self->{debug} =~ /M/;	# prefix with module name
  	print $msg
  		if $self->{debug};
  	}
  
  sub DESTROY {
  	my $self = shift;
  
      if (exists($INC{'threads.pm'})) {
          return if threads->tid() != 0;
      	}
      
  	my $pid = $self->read();
  	$self->release()
          if $self->{path} && $pid && $pid == $$;
  	}
  
  1;
  
  __END__
  
  # -- documentation -----------------------------------------------------------
  
  =head1 AUTHOR
  
  Erick Calder <ecalder@cpan.org>
  
  =head1 ACKNOWLEDGEMENTS
  
  1k thx to Steven Haryanto <steven@haryan.to> whose package (Proc::RID_File) inspired this implementation.
  
  Our gratitude also to Alan Ferrency <alan@pair.com> for fingering the boot-up problem and suggesting possible solutions.
  
  =head1 DEPENDENCIES
  
  For Linux, FreeBSD and Cygwin, support of the I<verify> option requires
  availability of the B<ps> utility.  For Linux/FreeBSD This is typically
  found in the B<procps> package. Cygwin users need to run version 1.5.20
  or later for this to work.
  
  =head1 WARNING
  
  This module may prevent daemons from starting at system boot time.  The problem occurs because the process id written to the I<pidfile> by an instance of the daemon may coincidentally be reused by another process after a system restart, thus making the daemon think it's already running.
  
  Some ideas on how to fix this problem are catalogued below, but unfortunately, no platform-independent solutions have yet been gleaned.
  
  =over
  
  =item - leaving the I<pidfile> open for the duration of the daemon's life
  
  =item - checking a C<ps> to make sure the pid is what one expects (current implementation)
  
  =item - looking at /proc/$PID/stat for a process name
  
  =item - check mtime of the pidfile versus uptime; don't trust old pidfiles
  
  =item - try to get the script to nuke its pidfile when it exits (this is vulnerable to hardware resets and hard reboots)
  
  =item - try to nuke the pidfile at boot time before the script runs; this solution suffers from a race condition wherein two instances read the I<pidfile> before one manages to lock it, thus allowing two instances to run simultaneously.
  
  =back
  
  =head1 SUPPORT
  
  For help and thank you notes, e-mail the author directly.  To report a bug, submit a patch or add to our wishlist please visit the CPAN bug manager at: F<http://rt.cpan.org>
  
  =head1 AVAILABILITY
  
  The latest version of the tarball, RPM and SRPM may always be found at: F<http://perl.arix.com/>  Additionally the module is available from CPAN.
  
  =head1 LICENCE
  
  This utility is free and distributed under GPL, the Gnu Public License.  A copy of this license was included in a file called LICENSE. If for some reason, this file was not included, please see F<http://www.gnu.org/licenses/> to obtain a copy of this license.
  
  $Id: File.pm,v 1.16 2004-04-08 02:27:25 ekkis Exp $
PROC_PID_FILE

    $main::fatpacked{"Progress/Any.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PROGRESS_ANY';
  package Progress::Any;
  
  our $DATE = '2015-01-27'; # DATE
  our $VERSION = '0.20'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Time::Duration qw();
  use Time::HiRes qw(time);
  
  sub import {
      my ($self, @args) = @_;
      my $caller = caller();
      for (@args) {
          if ($_ eq '$progress') {
              my $progress = $self->get_indicator(task => '');
              {
                  no strict 'refs';
                  my $v = "$caller\::progress";
                  *$v = \$progress;
              }
          } else {
              die "Unknown import argument: $_";
          }
      }
  }
  
  # store Progress::Any objects for each task
  our %indicators;  # key = task name
  
  # store output objects
  our %outputs;     # key = task name, value = [$outputobj, ...]
  
  # store settings/data for each object
  our %output_data; # key = "$output_object", value = {key=>val, ...}
  
  # internal attributes:
  # - _elapsed (float*) = accumulated elapsed time so far
  # - _start_time (float) = when is the last time the indicator state is changed
  #     from 'stopped' to 'started'. when indicator is changed from 'started' to
  #     'stopped', this will be set to undef.
  # - _remaining = used to store user's estimation of remaining time. will be
  #     unset after each update().
  
  # return 1 if created, 0 if already created/initialized
  sub _init_indicator {
      my ($class, $task) = @_;
  
      #say "D: _init_indicator($task)";
  
      # prevent double initialization
      return $indicators{$task} if $indicators{$task};
  
      my $progress = bless({
          task        => $task,
          title       => $task,
          target      => 0,
          pos         => 0,
          state       => 'stopped',
  
          _remaining          => undef,
          _set_remaining_time => undef,
          _elapsed            => 0,
          _start_time         => 0,
      }, $class);
      $indicators{$task} = $progress;
  
      # if we create an indicator named a.b.c, we must also create a.b, a, and ''.
      if ($task =~ s/\.?\w+\z//) {
          $class->_init_indicator($task);
      }
  
      $progress;
  }
  
  sub get_indicator {
      my ($class, %args) = @_;
  
      my %oargs = %args;
  
      my $task   = delete($args{task});
      if (!defined($task)) {
          my @caller = caller(0);
          #say "D:caller=".join(",",map{$_//""} @caller);
          $task = $caller[0] eq '(eval)' ? 'main' : $caller[0];
          $task =~ s/::/./g;
          $task =~ s/[^.\w]+/_/g;
      }
      die "Invalid task syntax '$task', please only use dotted words"
          unless $task =~ /\A(?:\w+(\.\w+)*)?\z/;
  
      my %uargs;
  
      my $p = $class->_init_indicator($task);
      for my $an (qw/title target pos remaining state/) {
          if (exists $args{$an}) {
              $uargs{$an} = delete($args{$an});
          }
      }
      die "Unknown argument(s) to get_indicator(): ".join(", ", keys(%args))
          if keys(%args);
      $p->_update(%uargs) if keys %uargs;
  
      $p;
  }
  
  my %attrs = (
      title     => {is => 'rw'},
      target    => {is => 'rw'},
      pos       => {is => 'rw'},
      state     => {is => 'rw'},
  );
  
  # create attribute methods
  for my $an (keys %attrs) {
      next if $attrs{$an}{manual};
      my $code;
      if ($attrs{$an}{is} eq 'rw') {
          $code = sub {
              my $self = shift;
              if (@_) {
                  $self->_update($an => shift);
              }
              $self->{$an};
          };
      } else {
          $code = sub {
              my $self = shift;
              die "Can't set value, $an is an ro attribute" if @_;
              $self->{$an};
          };
      }
      no strict 'refs';
      *{$an} = $code;
  }
  
  sub elapsed {
      my $self = shift;
  
      if ($self->{state} eq 'started') {
          return $self->{_elapsed} + (time()-$self->{_start_time});
      } else {
          return $self->{_elapsed};
      }
  }
  
  sub total_pos {
      my $self = shift;
  
      my $t = $self->{task};
  
      my $res = $self->{pos};
      for (keys %indicators) {
          if ($t eq '') {
              next if $_ eq '';
          } else {
              next unless index($_, "$t.") == 0;
          }
          $res += $indicators{$_}{pos};
      }
      $res;
  }
  
  sub total_target {
      my $self = shift;
  
      my $t = $self->{task};
  
      my $res = $self->{target};
      return undef unless defined($res);
  
      for (keys %indicators) {
          if ($t eq '') {
              next if $_ eq '';
          } else {
              next unless index($_, "$t.") == 0;
          }
          return undef unless defined $indicators{$_}{target};
          $res += $indicators{$_}{target};
      }
      $res;
  }
  
  sub percent_complete {
      my $self = shift;
  
      my $total_pos    = $self->total_pos;
      my $total_target = $self->total_target;
  
      return undef unless defined($total_target);
      if ($total_target == 0) {
          if ($self->{state} eq 'finished') {
              return 100;
          } else {
              return 0;
          }
      } else {
          return $total_pos / $total_target * 100;
      }
  }
  
  sub remaining {
      my $self = shift;
  
      if (defined $self->{_remaining}) {
          if ($self->{state} eq 'started') {
              my $r = $self->{_remaining}-(time()-$self->{_set_remaining_time});
              return $r > 0 ? $r : 0;
          } else {
              return $self->{_remaining};
          }
      } else {
          if (defined $self->{target}) {
              if ($self->{pos} == 0) {
                  return 0;
              } else {
                  return ($self->{target} - $self->{pos})/$self->{pos} *
                      $self->elapsed;
              }
          } else {
              return undef;
          }
      }
  }
  
  sub total_remaining {
      my $self = shift;
  
      my $t = $self->{task};
  
      my $res = $self->remaining;
      return undef unless defined $res;
  
      for (keys %indicators) {
          if ($t eq '') {
              next if $_ eq '';
          } else {
              next unless index($_, "$t.") == 0;
          }
          my $res2 = $indicators{$_}->remaining;
          return undef unless defined $res2;
          $res += $res2;
      }
      $res;
  }
  
  # the routine to use to update rw attributes, does validation and checks to make
  # sure things are consistent.
  sub _update {
      my ($self, %args) = @_;
  
      # no need to check for unknown arg in %args, it's an internal method anyway
  
      my $now = time();
  
      my $task = $self->{task};
      #use Data::Dump; print "D: _update($task) "; dd \%args;
  
    SET_TITLE:
      {
          last unless exists $args{title};
          my $val = $args{title};
          die "Invalid value for title, must be defined"
              unless defined($val);
          $self->{title} = $val;
      }
  
    SET_TARGET:
      {
          last unless exists $args{target};
          my $val = $args{target};
          die "Invalid value for target, must be a positive number or undef"
              unless !defined($val) || $val >= 0;
          # ensure that pos does not exceed target
          if (defined($val) && $self->{pos} > $val) {
              $self->{pos} = $val;
          }
          $self->{target} = $val;
          undef $self->{_remaining};
      }
  
    SET_POS:
      {
          last unless exists $args{pos};
          my $val = $args{pos};
          die "Invalid value for pos, must be a positive number"
              unless defined($val) && $val >= 0;
          # ensure that pos does not exceed target
          if (defined($self->{target}) && $val > $self->{target}) {
              $val = $self->{target};
          }
          $self->{pos} = $val;
          undef $self->{_remaining};
      }
  
    SET_REMAINING:
      {
          last unless exists $args{remaining};
          my $val = $args{remaining};
          die "Invalid value for remaining, must be a positive number"
              unless defined($val) && $val >= 0;
          $self->{_remaining} = $val;
          $self->{_set_remaining_time} = $now;
      }
  
    SET_STATE:
      {
          last unless exists $args{state};
          my $old = $self->{state};
          my $val = $args{state} // 'started';
          die "Invalid value for state, must be stopped/started/finished"
              unless $val =~ /\A(?:stopped|started|finished)\z/;
          last if $old eq $val;
          if ($val eq 'started') {
              $self->{_start_time} = $now;
  
              # automatically start parents
              my @parents;
              {
                  my $t = $task;
                  while (1) {
                      last unless $t =~ s/\.\w+\z//;
                      push @parents, $t;
                  }
                  push @parents, '';
              }
              for my $t (@parents) {
                  my $p = $indicators{$t};
                  if ($p->{state} ne 'started') {
                      $p->{state}       = 'started';
                      $p->{_start_time} = $now;
                  }
              }
          } else {
              $self->{_elapsed} += $now - $self->{_start_time};
              if ($val eq 'finished') {
                  die "BUG: Can't finish task '$task', pos is still < target"
                      if defined($self->{target}) &&
                          $self->{pos} < $self->{target};
                  $self->{_remaining} = 0;
                  $self->{_set_remaining_time} = $now;
              }
          }
          $self->{state} = $val;
      }
  
    DONE:
      #use Data::Dump; print "after update: "; dd $self;
      return;
  }
  
  sub _should_update_output {
      my ($self, $output, $now) = @_;
  
      my $key = "$output";
      $output_data{$key} //= {};
      my $odata = $output_data{$key};
      if (!defined($odata->{mtime})) {
          # output has never been updated, update
          return 1;
      } elsif ($self->{state} eq 'finished') {
          # finishing, update the output to show finished state
          return 1;
      } elsif ($odata->{force_update}) {
          # force update
          delete $odata->{force_update};
          return 1;
      # } elsif ($args->{prio} eq 'low') {
          # perhaps provide something like this? a low-priority or minor update so
          # we don't have to update the outputs?
      } else {
          # normal update, update if not too frequent
          if (!defined($odata->{freq})) {
              # negative number means seconds, positive means pos delta. only
              # update if that number of seconds, or that difference in pos has
              # been passed.
              $odata->{freq} = -0.5;
          }
          if ($odata->{freq} < 0) {
              return 1 if $now >= $odata->{mtime} - $odata->{freq};
          } else {
              return 1 if abs($self->{pos} - $odata->{pos}) >= $odata->{freq};
          }
          return 0;
      }
  }
  
  sub update {
      my ($self, %args) = @_;
  
      my $pos   = delete($args{pos}) // $self->{pos} + 1;
      my $state = delete($args{state}) // 'started';
      $self->_update(pos => $pos, state => $state);
  
      my $message  = delete($args{message});
      my $level    = delete($args{level});
      die "Unknown argument(s) to update(): ".join(", ", keys(%args))
          if keys(%args);
  
      my $now = time();
  
      # find output(s) and call it
      {
          my $task = $self->{task};
          while (1) {
              if ($outputs{$task}) {
                  for my $output (@{ $outputs{$task} }) {
                      next unless $self->_should_update_output($output, $now);
                      if (ref($message) eq 'CODE') {
                          $message = $message->();
                      }
                      $output->update(
                          indicator => $indicators{$task},
                          message   => $message,
                          level     => $level,
                          time      => $now,
                      );
                      my $key = "$output";
                      $output_data{$key}{mtime} = $now;
                      $output_data{$key}{pos}   = $pos;
                  }
              }
              last unless $task =~ s/\.?\w+\z//;
          }
      }
  }
  
  sub start {
      my $self = shift;
      $self->_update(state => 'started');
  }
  
  sub stop {
      my $self = shift;
      $self->_update(state => 'stopped');
  }
  
  sub finish {
      my ($self, %args) = @_;
      $self->update(pos=>$self->{target}, state=>'finished', %args);
  }
  
  # - currently used letters: emnPpRrTt%
  # - currently used by Output::TermProgressBarColor: bB
  # - letters that can be used later: s (state)
  sub fill_template {
      my ($self, $template, %args) = @_;
  
      # TODO: some caching so "%e%e" produces two identical numbers
  
      state $re = qr{( # all=1
                         %
                         ( #width=2
                             -?\d+ )?
                         ( #dot=3
                             \.?)
                         ( #prec=4
                             \d+)?
                         ( #conv=5
                             [emnPpRrTt%])
                     )}x;
  
      state $sub = sub {
          my %args = @_;
  
          my ($all, $width, $dot, $prec, $conv) = ($1, $2, $3, $4, $5);
  
          my $p = $args{indicator};
  
          my ($fmt, $sconv, $data);
          if ($conv eq 'n') {
              $data = $p->{task};
          } elsif ($conv eq 't') {
              $data = $p->{title};
          } elsif ($conv eq '%') {
              $data = '%';
          } elsif ($conv eq 'm') {
              $data = $args{message} // '';
          } elsif ($conv eq 'p') {
              my $val = $p->percent_complete;
              $width //= 3;
              if (defined $val) {
                  $data = $val;
                  $prec //= 0;
                  $sconv = "f";
              } else {
                  $data = '?';
              }
          } elsif ($conv eq 'P') {
              $data = $p->total_pos;
              $prec //= 0;
              $sconv = "f";
          } elsif ($conv eq 'T') {
              my $val = $p->total_target;
              if (defined $val) {
                  $data = $val;
                  $prec //= 0;
                  $sconv = "f";
              } else {
                  $data = '?';
              }
          } elsif ($conv eq 'e') {
              my $val = $p->elapsed;
              $val = 1 if $val < 1; # TMP, prevent duration() return "just now"
              $data = Time::Duration::concise(Time::Duration::duration($val));
              $width //= -8;
          } elsif ($conv eq 'r') {
              my $val = $p->total_remaining;
              if (defined $val) {
                  $val = 1 if $val < 1; # TMP, prevent duration() return "just now
                  $data = Time::Duration::concise(Time::Duration::duration($val));
              } else {
                  $data = '?';
              }
              $width //= -8;
          } elsif ($conv eq 'R') {
              my $val = $p->total_remaining;
              if (defined $val) {
                  $val = 1 if $val < 1; # TMP, prevent duration() return "just now
                  $data = Time::Duration::concise(Time::Duration::duration($val)).
                      " left"; # XXX i18n
              } else {
                  $val = $p->elapsed;
                  $val = 1 if $val < 1; # TMP, prevent duration() return "just now
                  $data = Time::Duration::concise(Time::Duration::duration($val)).
                      " elapsed"; # XXX i18n
              }
              $width //= -(8 + 1 + 7);
          } else {
              # return as-is
              $fmt = '%s';
              $data = $all;
          }
  
          # sprintf format
          $sconv //= 's';
          $dot = "." if $sconv eq 'f';
          $fmt //= join("", grep {defined} ("%", $width, $dot, $prec, $sconv));
  
          #say "D:fmt=$fmt";
          sprintf $fmt, $data;
  
      };
      $template =~ s{$re}{$sub->(%args, indicator=>$self)}egox;
  
      $template;
  }
  
  1;
  # ABSTRACT: Record progress to any output
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Progress::Any - Record progress to any output
  
  =head1 VERSION
  
  This document describes version 0.20 of Progress::Any (from Perl distribution Progress-Any), released on 2015-01-27.
  
  =head1 SYNOPSIS
  
  =head2 First example, simple usage in a script
  
   use Progress::Any '$progress';
   use Progress::Any::Output 'TermProgressBarColor';
  
   $progress->target(10);
   for (1..10) {
       $progress->update(message => "Doing item $_");
       sleep 1;
   }
  
  Sample output:
  
   % ./script.pl
    60% [Doing item 6====           ]3s left
  
  =head2 Second example, usage in module as well as script
  
  In your module:
  
   package MyApp;
   use Progress::Any;
  
   sub download {
       my @urls = @_;
       return unless @urls;
       my $progress = Progress::Any->get_indicator(
           task => "download", pos=>0, target=>~~@urls);
       for my $url (@urls) {
           # download the $url ...
           $progress->update(message => "Downloaded $url");
       }
       $progress->finish;
   }
  
  In your application:
  
   use MyApp;
   use Progress::Any::Output;
   Progress::Any::Output->set('TermProgressBarColor');
  
   MyApp::download("url1", "url2", "url3", "url4", "url5");
  
  sample output, in succession:
  
   % ./script.pl
    20% [====== Downloaded url1           ]0m00s Left
    40% [=======Downloaded url2           ]0m01s Left
    60% [=======Downloaded url3           ]0m01s Left
    80% [=======Downloaded url4==         ]0m00s Left
  
  (At 100%, the output automatically cleans up the progress bar).
  
  =head3 Another example, demonstrating multiple indicators and the LogAny output:
  
   use Progress::Any;
   use Progress::Any::Output;
   use Log::Any::App;
  
   Progress::Any::Output->set('LogAny', template => '[%-8t] [%P/%2T] %m');
   my $pdl = Progress::Any->get_indicator(task => 'download');
   my $pcp = Progress::Any->get_indicator(task => 'copy');
  
   $pdl->pos(10);
   $pdl->target(10);
   $pdl->update(message => "downloading A");
   $pcp->update(message => "copying A");
   $pdl->update(message => "downloading B");
   $pcp->update(message => "copying B");
  
  will show something like:
  
   [download] [1/10] downloading A
   [copy    ] [1/ ?] copying A
   [download] [2/10] downloading B
   [copy    ] [2/ ?] copying B
  
  =head2 Example of using with Perinci::CmdLine
  
  If you use L<Perinci::CmdLine>, you can mark your function as expecting a
  Progress::Any object and it will be supplied to you in a special argument
  C<-progress>:
  
   use File::chdir;
   use Perinci::CmdLine;
   $SPEC{check_dir} = {
       v => 1.1,
       args => {
           dir => {summary=>"Path to check", schema=>"str*", req=>1, pos=>0},
       },
       features => {progress=>1},
   };
   sub check_dir {
       my %args = @_;
       my $progress = $args{-progress};
       my $dir = $args{dir};
       (-d $dir) or return [412, "No such dir: $dir"];
       local $CWD = $dir;
       opendir my($dh), $dir;
       my @ent = readdir($dh);
       $progress->pos(0);
       $progress->target(~~@ent);
       for (@ent) {
           # do the check ...
           $progress->update(message => $_);
           sleep 1;
       }
       $progress->finish;
       [200];
   }
   Perinci::CmdLine->new(url => '/main/check_dir')->run;
  
  =head1 DESCRIPTION
  
  C<Progress::Any> is an interface for applications that want to display progress
  to users. It decouples progress updating and output, rather similar to how
  L<Log::Any> decouples log producers and consumers (output). The API is also
  rather similar to Log::Any, except I<Adapter> is called I<Output> and
  I<category> is called I<task>.
  
  Progress::Any records position/target and calculates elapsed time, estimated
  remaining time, and percentage of completion. One or more output modules
  (Progress::Any::Output::*) display this information.
  
  In your modules, you typically only need to use Progress::Any, get one or more
  indicators, set target and update it during work. In your application, you use
  Progress::Any::Output and set/add one or more outputs to display the progress.
  By setting output only in the application and not in modules, you separate the
  formatting/display concern from the logic.
  
  Screenshots:
  
  =head1 STATUS
  
  API might still change, will be stabilized in 1.0.
  
  =begin HTML
  
  <p><img src="http://blogs.perl.org/users/perlancar/progany-tpc-sample.jpg" /><br />Using TermProgressBarColor output
  
  <p><img src="http://blogs.perl.org/users/perlancar/progany-dn-sample.jpg" /><br />Using DesktopNotify output
  
  =end HTML
  
  The list of features:
  
  =over 4
  
  =item * multiple progress indicators
  
  You can use different indicator for each task/subtask.
  
  =item * customizable output
  
  Output is handled by one of C<Progress::Any::Output::*> modules. Currently
  available outputs: C<Null> (no output), C<TermMessage> (display as simple
  message on terminal), C<TermProgressBarColor> (display as color progress bar on
  terminal), C<LogAny> (log using L<Log::Any>), C<Callback> (call a subroutine).
  Other possible output ideas: IM/Twitter/SMS, GUI, web/AJAX, remote/RPC (over
  L<Riap> for example, so that L<Perinci::CmdLine>-based command-line clients can
  display progress update from remote functions).
  
  =item * multiple outputs
  
  One or more outputs can be used to display one or more indicators.
  
  =item * hierarchical progress
  
  A task can be divided into subtasks. If a subtask is updated, its parent task
  (and its parent, and so on) are also updated proportionally.
  
  =item * message
  
  Aside from setting a number/percentage, allow including a message when updating
  indicator.
  
  =item * undefined target
  
  Target can be undefined, so a bar output might not show any bar (or show them,
  but without percentage indicator), but can still show messages.
  
  =item * retargetting
  
  Target can be changed in the middle of things.
  
  =back
  
  =head1 EXPORTS
  
  =head2 $progress => OBJ
  
  The root indicator. Equivalent to:
  
   Progress::Any->get_indicator(task => '')
  
  =head1 ATTRIBUTES
  
  Below are the attributes of an indicator/task:
  
  =head2 task => STR* (default: from caller's package, or C<main>)
  
  Task name. If not specified will be set to caller's package (C<::> will be
  replaced with C<.>), e.g. if you are calling this method from
  C<Foo::Bar::baz()>, then task will be set to C<Foo.Bar>. If caller is code
  inside eval, C<main> will be used instead.
  
  =head2 title => STR* (default: task name)
  
  Specify task title. Task title is a longer description for a task and can
  contain spaces and other characters. It is displayed in some outputs, as well as
  using C<%t> in C<fill_template()>. For example, for a task called C<copy>, its
  title might be C<Copying files to remote server>.
  
  =head2 target => POSNUM (default: 0)
  
  The total number of items to finish. Can be set to undef to mean that we don't
  know (yet) how many items there are to finish (in which case, we cannot estimate
  percent of completion and remaining time).
  
  =head2 pos => POSNUM* (default: 0)
  
  The number of items that are already done. It cannot be larger than C<target>,
  if C<target> is defined. If C<target> is set to a value smaller than C<pos> or
  C<pos> is set to a value larger than C<target>, C<pos> will be changed to be
  C<target>.
  
  =head2 state => STR (default: C<stopped>)
  
  State of task/indicator. Either: C<stopped>, C<started>, or C<finished>.
  Initially it will be set to C<stopped>, which means elapsed time won't be
  running and will stay at 0. C<update()> will set the state to C<started> to get
  elapsed time to run. At the end of task, you can call C<finish()> (or
  alternatively set C<state> to C<finished>) to stop the elapsed time again.
  
  The difference between C<stopped> and C<finished> is: when C<target> and C<pos>
  are both at 0, percent completed is assumed to be 0% when state is C<stopped>,
  but 100% when state is C<finished>.
  
  =head1 METHODS
  
  =head2 Progress::Any->get_indicator(%args) => OBJ
  
  Get a progress indicator for a certain task. C<%args> contain attribute values,
  at least C<task> must be specified.
  
  Note that this module maintains a list of indicator singleton objects for each
  task (in C<%indicators> package variable), so subsequent C<get_indicator()> for
  the same task will return the same object.
  
  =head2 $progress->update(%args)
  
  Update indicator. Will also, usually, update associated output(s) if necessary.
  
  Arguments:
  
  =over 4
  
  =item * pos => NUM
  
  Set the new position. If unspecified, defaults to current position + 1. If pos
  is larger than target, outputs will generally still show 100%. Note that
  fractions are allowed.
  
  =item * message => str|code
  
  Set a message to be displayed when updating indicator.
  
  Aside from a string, you can also pass a coderef here. It can be used to delay
  costly calculation. The message will only be calculated when actually sent to
  output.
  
  =item * level => NUM
  
  EXPERIMENTAL, NOT YET IMPLEMENTED BY MOST OUTPUTS. Setting the importance level
  of this update. Default is C<normal> (or C<low> for fractional update), but can
  be set to C<high> or C<low>. Output can choose to ignore updates lower than a
  certain level.
  
  =item * state => STR
  
  Can be set to C<finished> to finish a task.
  
  =back
  
  =head2 $progress->finish(%args)
  
  Equivalent to:
  
   $progress->update(
       ( pos => $progress->target ) x !!defined($progress->target),
       state => 'finished',
       %args,
   );
  
  =head2 $progress->start()
  
  Set state to C<started>.
  
  =head2 $progress->stop()
  
  Set state to C<stopped>.
  
  =head2 $progress->elapsed() => FLOAT
  
  Get elapsed time. Just like a stop-watch, when state is C<started> elapsed time
  will run and when state is C<stopped>, it will freeze.
  
  =head2 $progress->remaining() => undef|FLOAT
  
  Give estimated remaining time until task is finished, which will depend on how
  fast the C<update()> is called, i.e. how fast C<pos> is approaching C<target>.
  Will be undef if C<target> is undef.
  
  =head2 $progress->total_remaining() => undef|FLOAT
  
  Give estimated remaining time added by all its subtasks' remaining. Return undef
  if any one of those time is undef.
  
  =head2 $progress->total_pos() => FLOAT
  
  Total of indicator's pos and all of its subtasks'.
  
  =head2 $progress->total_target() => undef|FLOAT
  
  Total of indicator's target and all of its subtasks'. Return undef if any one of
  those is undef.
  
  =head2 $progress->percent_complete() => undef|FLOAT
  
  Give percentage of completion, calculated using C<< total_pos / total_target *
  100 >>. Undef if total_target is undef.
  
  =head2 $progress->fill_template($template)
  
  Fill template with values, like in C<sprintf()>. Usually used by output modules.
  Available templates:
  
  =over
  
  =item * C<%(width)n>
  
  Task name (the value of the C<task> attribute). C<width> is optional, an
  integer, like in C<sprintf()>, can be negative to mean left-justify instead of
  right.
  
  =item * C<%(width)t>
  
  Task title (the value of the C<title> attribute).
  
  =item * C<%(width)e>
  
  Elapsed time (the result from the C<elapsed()> method). Currently using
  L<Time::Duration> concise format, e.g. 10s, 1m40s, 16m40s, 1d4h, and so on.
  Format might be configurable and localizable in the future. Default width is -8.
  Examples:
  
   2m30s
   10s
  
  =item * C<%(width)r>
  
  Estimated remaining time (the result of the C<total_remaining()> method).
  Currently using L<Time::Duration> concise format, e.g. 10s, 1m40s, 16m40s, 1d4h,
  and so on. Will show C<?> if unknown. Format might be configurable and
  localizable in the future. Default width is -8. Examples:
  
   1m40s
   5s
  
  =item * C<%(width)R>
  
  Estimated remaining time I<or> elapsed time, if estimated remaining time is not
  calculatable (e.g. when target is undefined). Format might be configurable and
  localizable in the future. Default width is -(8+1+7). Examples:
  
   30s left
   1m40s elapsed
  
  =item * C<%(width).(prec)p>
  
  Percentage of completion (the result of the C<percent_complete()> method).
  C<width> and C<precision> are optional, like C<%f> in Perl's C<sprintf()>,
  default is C<%3.0p>. If percentage is unknown (due to target being undef), will
  show C<?>.
  
  =item * C<%(width)P>
  
  Current position (the result of the C<total_pos()> method).
  
  =item * C<%(width)T>
  
  Target (the result of the C<total_target()> method). If undefined, will show
  C<?>.
  
  =item * C<%m>
  
  Message (the C<update()> parameter). If message is unspecified, will show empty
  string.
  
  =item * C<%%>
  
  A literal C<%> sign.
  
  =back
  
  =head1 FAQ
  
  =head1 SEE ALSO
  
  Other progress modules on CPAN: L<Term::ProgressBar>,
  L<Term::ProgressBar::Simple>, L<Time::Progress>, among others.
  
  Output modules: C<Progress::Any::Output::*>
  
  See examples on how Progress::Any is used by other modules: L<Perinci::CmdLine>
  (supplying progress object to functions), L<Git::Bunch> (using progress object).
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Progress-Any>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Progress-Any>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Progress-Any>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PROGRESS_ANY

    $main::fatpacked{"Progress/Any/Output.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PROGRESS_ANY_OUTPUT';
  package Progress::Any::Output;
  
  our $DATE = '2015-01-27'; # DATE
  our $VERSION = '0.20'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Progress::Any;
  
  sub import {
      my $self = shift;
      __PACKAGE__->set(@_) if @_;
  }
  
  sub _set_or_add {
      my $class = shift;
      my $which = shift;
  
      my $opts;
      if (@_ && ref($_[0]) eq 'HASH') {
          $opts = shift;
      } else {
          $opts = {};
      }
  
      my $output = shift or die "Please specify output name";
      $output =~ /\A(?:\w+(::\w+)*)?\z/ or die "Invalid output syntax '$output'";
  
      my $task = $opts->{task} // "";
  
      my $outputo;
      unless (ref $outputo) {
          my $outputpm = $output; $outputpm =~ s!::!/!g; $outputpm .= ".pm";
          require "Progress/Any/Output/$outputpm";
          no strict 'refs';
          $outputo = "Progress::Any::Output::$output"->new(@_);
      }
  
      if ($which eq 'set') {
          $Progress::Any::outputs{$task} = [$outputo];
      } else {
          $Progress::Any::outputs{$task} //= [];
          push @{ $Progress::Any::outputs{$task} }, $outputo;
      }
  
      $outputo;
  }
  
  sub set {
      my $class = shift;
      $class->_set_or_add('set', @_);
  }
  
  sub add {
      my $class = shift;
      $class->_set_or_add('add', @_);
  }
  
  1;
  # ABSTRACT: Assign output to progress indicators
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Progress::Any::Output - Assign output to progress indicators
  
  =head1 VERSION
  
  This document describes version 0.20 of Progress::Any::Output (from Perl distribution Progress-Any), released on 2015-01-27.
  
  =head1 SYNOPSIS
  
  In your application:
  
   use Progress::Any::Output;
   Progress::Any::Output->set('TermProgressBarColor');
  
  or:
  
   use Progress::Any::Output 'TermProgressBarColor';
  
  To give parameters to output:
  
   use Progress::Any::Output;
   Progress::Any::Output->set('TermProgressBarColor', width=>50, ...);
  
  or:
  
   use Progress::Any::Output 'TermProgressBarColor', width=>50, ...;
  
  To assign output to a certain (sub)task:
  
   use Progress::Any::Output;
   Progress::Any::Output->set({task=>'main.download'}, 'TermMessage');
  
  To add additional output, use C<add()> instead of C<set()>.
  
  =head1 DESCRIPTION
  
  See L<Progress::Any> for overview.
  
  =head1 METHODS
  
  =head2 Progress::Any::Output->set([ \%opts ], $output[, @args]) => obj
  
  Set (or replace) output. Will load and instantiate
  C<Progress::Any::Output::$output>. To only set output for a certain (sub)task,
  set C<%opts> to C<< { task => $task } >>. C<@args> will be passed to output
  module's constructor.
  
  Return the instantiated object.
  
  If C<$output> is an object (a reference, really), it will be used as-is.
  
  =head2 Progress::Any::Output->add([ \%opts ], $output[, @args])
  
  Like set(), but will add output instead of replace existing one(s).
  
  =head1 SEE ALSO
  
  L<Progress::Any>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Progress-Any>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Progress-Any>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Progress-Any>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PROGRESS_ANY_OUTPUT

    $main::fatpacked{"Progress/Any/Output/Null.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PROGRESS_ANY_OUTPUT_NULL';
  package Progress::Any::Output::Null;
  
  use 5.010;
  use strict;
  use warnings;
  
  our $VERSION = '0.20'; # VERSION
  
  sub new {
      my ($class, %args) = @_;
      bless \%args, $class;
  }
  
  sub update {
      1;
  }
  
  1;
  # ABSTRACT: Null output
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Progress::Any::Output::Null - Null output
  
  =head1 VERSION
  
  This document describes version 0.20 of Progress::Any::Output::Null (from Perl distribution Progress-Any), released on 2015-01-27.
  
  =for Pod::Coverage ^(new|update)$
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Progress-Any>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Progress-Any>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Progress-Any>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PROGRESS_ANY_OUTPUT_NULL

    $main::fatpacked{"Progress/Any/Output/TermProgressBarColor.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'PROGRESS_ANY_OUTPUT_TERMPROGRESSBARCOLOR';
  package Progress::Any::Output::TermProgressBarColor;
  
  our $DATE = '2016-03-11'; # DATE
  our $VERSION = '0.22'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Color::ANSI::Util qw(ansifg ansibg);
  require Win32::Console::ANSI if $^O =~ /Win/;
  
  $|++;
  
  # patch handle
  my ($ph1, $ph2);
  
  sub _patch {
      my $out = shift;
  
      return if $ph1;
      require Monkey::Patch::Action;
      $ph1 = Monkey::Patch::Action::patch_package(
          'Log::Any::Adapter::Screen', 'hook_before_log', 'replace',
          sub {
              $out->cleanup;
              $Progress::Any::output_data{"$out"}{force_update} = 1;
          }
      ) if defined &{"Log::Any::Adapter::Screen::hook_before_log"};
      $ph2 = Monkey::Patch::Action::patch_package(
          'Log::Any::Adapter::Screen', 'hook_after_log', 'replace',
          sub {
              my ($self, $msg) = @_;
              print { $self->{_fh} } "\n" unless $msg =~ /\R\z/;
              $out->keep_delay_showing if $out->{show_delay};
          }
      ) if defined &{"Log::Any::Adapter::Screen::hook_after_log"};
  }
  
  sub _unpatch {
      undef $ph1;
      undef $ph2;
  }
  
  sub new {
      my ($class, %args0) = @_;
  
      my %args;
  
      $args{width} = delete($args0{width});
      if (!defined($args{width})) {
          my ($cols, $rows);
          if ($ENV{COLUMNS}) {
              $cols = $ENV{COLUMNS};
          } elsif (eval { require Term::Size; 1 }) {
              ($cols, $rows) = Term::Size::chars();
          } else {
              $cols = 80;
          }
          # on windows if we print at rightmost column, cursor will move to the
          # next line, so we try to avoid that
          $args{width} = $^O =~ /Win/ ? $cols-1 : $cols;
      }
  
      $args{fh} = delete($args0{fh});
      $args{fh} //= \*STDOUT;
  
      $args{show_delay} = delete($args0{show_delay});
  
      $args{wide} = delete($args0{wide});
  
      keys(%args0) and die "Unknown output parameter(s): ".
          join(", ", keys(%args0));
  
      $args{_last_hide_time} = time();
  
      require Text::ANSI::Util;
      if ($args{wide}) {
          require Text::ANSI::WideUtil;
      }
  
      my $self = bless \%args, $class;
      $self->_patch;
      $self;
  }
  
  sub update {
      my ($self, %args) = @_;
  
      my $now = time();
  
      # if there is show_delay, don't display until we've surpassed it
      if (defined $self->{show_delay}) {
          return if $now - $self->{show_delay} < $self->{_last_hide_time};
      }
  
      # "erase" previous display
      my $ll = $self->{_lastlen};
      if (defined $self->{_lastlen}) {
          print { $self->{fh} } "\b" x $self->{_lastlen};
          undef $self->{_lastlen};
      }
  
      my $p = $args{indicator};
      my $tottgt = $p->total_target;
      my $totpos = $p->total_pos;
      my $is_complete = $p->{state} eq 'finished' ||
          defined($tottgt) && $tottgt > 0 && $totpos == $tottgt;
      if ($is_complete) {
          if ($ll) {
              my $fh = $self->{fh};
              print $fh " " x $ll, "\b" x $ll;
              $self->{_last_hide_time} = $now;
          }
          return;
      }
  
      # XXX follow 'template'
      my $bar;
      my $bar_pct = $p->fill_template("%p%% ", %args);
  
      my $bar_eta = $p->fill_template("%R", %args);
  
      my $bar_bar = "";
      my $bwidth = $self->{width} - length($bar_pct) - length($bar_eta) - 2;
      if ($bwidth > 0) {
          if ($tottgt) {
              my $bfilled = int($totpos / $tottgt * $bwidth);
              $bfilled = $bwidth if $bfilled > $bwidth;
              $bar_bar = ("=" x $bfilled) . (" " x ($bwidth-$bfilled));
  
              my $message = $args{message};
          } else {
              # display 15% width of bar just moving right
              my $bfilled = int(0.15 * $bwidth);
              $bfilled = 1 if $bfilled < 1;
              $self->{_x}++;
              if ($self->{_x} > $bwidth-$bfilled) {
                  $self->{_x} = 0;
              }
              $bar_bar = (" " x $self->{_x}) . ("=" x $bfilled) .
                  (" " x ($bwidth-$self->{_x}-$bfilled));
          }
  
          my $msg = $args{message};
          if (defined $msg) {
              if ($msg =~ m!</elspan!) {
                  require String::Elide::Parts;
                  $msg = String::Elide::Parts::elide($msg, $bwidth);
              }
              my $mwidth;
              if ($self->{wide}) {
                  $msg = Text::ANSI::WideUtil::ta_mbtrunc($msg, $bwidth);
                  $mwidth = Text::ANSI::WideUtil::ta_mbswidth($msg);
              } else {
                  $msg = Text::ANSI::Util::ta_trunc($msg, $bwidth);
                  $mwidth = Text::ANSI::Util::ta_length($msg);
              }
              $bar_bar = ansifg("808080") . $msg . ansifg("ff8000") .
                  substr($bar_bar, $mwidth);
          }
  
          $bar_bar = ansifg("ff8000") . $bar_bar;
      }
  
      $bar = join(
          "",
          ansifg("ffff00"), $bar_pct,
          "[$bar_bar]",
          ansifg("ffff00"), $bar_eta,
          "\e[0m",
      );
      print { $self->{fh} } $bar;
  
      $self->{_lastlen} = Text::ANSI::Util::ta_length($bar);
  }
  
  sub cleanup {
      my ($self) = @_;
  
      # sometimes (e.g. when a subtask's target is undefined) we don't get
      # state=finished at the end. but we need to cleanup anyway at the end of
      # app, so this method is provided and will be called by e.g.
      # Perinci::CmdLine
  
      my $ll = $self->{_lastlen};
      return unless $ll;
      print { $self->{fh} } "\b" x $ll, " " x $ll, "\b" x $ll;
  }
  
  sub keep_delay_showing {
      my $self = shift;
  
      $self->{_last_hide_time} = time();
  }
  
  sub DESTROY {
      my $self = shift;
      $self->_unpatch;
  }
  
  1;
  # ABSTRACT: Output progress to terminal as color bar
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Progress::Any::Output::TermProgressBarColor - Output progress to terminal as color bar
  
  =head1 VERSION
  
  This document describes version 0.22 of Progress::Any::Output::TermProgressBarColor (from Perl distribution Progress-Any-Output-TermProgressBarColor), released on 2016-03-11.
  
  =head1 SYNOPSIS
  
   use Progress::Any::Output;
  
   # use default options
   Progress::Any::Output->set('TermProgressBarColor');
  
   # set options
   Progress::Any::Output->set('TermProgressBarColor',
                              width=>50, fh=>\*STDERR, show_delay=>5);
  
  =head1 DESCRIPTION
  
  B<THIS IS AN EARLY RELEASE, SOME THINGS ARE NOT YET IMPLEMENTED E.G. TEMPLATE,
  STYLES, COLOR THEMES>.
  
  Sample screenshots:
  
  =for Pod::Coverage ^(update|cleanup)$
  
  =for HTML <img src="http://blogs.perl.org/users/perlancar/progany-tpc-sample.jpg" />
  
  This output displays progress indicators as colored progress bar on terminal. It
  produces output similar to that produced by L<Term::ProgressBar>, except that it
  uses the L<Progress::Any> framework and has additional features:
  
  =over
  
  =item * colors and color themes
  
  =item * template and styles
  
  =item * displaying message text in addition to bar/percentage number
  
  =item * wide character support
  
  =back
  
  XXX option to cleanup when complete or not (like in Term::ProgressBar) and
  should default to 1.
  
  =head1 METHODS
  
  =head2 new(%args) => OBJ
  
  Instantiate. Usually called through C<<
  Progress::Any::Output->set("TermProgressBarColor", %args) >>.
  
  Known arguments:
  
  =over
  
  =item * wide => bool
  
  If set to 1, enable wide character support (requires L<Text::ANSI::WideUtil>.
  
  =item * width => INT
  
  Width of progress bar. The default is to detect terminal width and use the whole
  width.
  
  =item * color_theme => STR
  
  Not yet implemented.
  
  Choose color theme. To see what color themes are available, use
  C<list_color_themes()>.
  
  =item * style => STR
  
  Not yet implemented.
  
  Choose style. To see what styles are available, use C<list_styles()>. Styles
  determine the characters used for drawing the bar, alignment, etc.
  
  =item * template => STR (default: '%p [%B]%e')
  
  Not yet implemented.
  
  See B<fill_template> in Progress::Any's documentation. Aside from template
  strings supported by Progress::Any, this output recognizes these additional
  strings: C<%b> to display the progress bar (using the rest of the available
  width), C<%B> to display the progress bar as well as the message inside it.
  
  =item * fh => handle (default: \*STDOUT)
  
  Instead of the default STDOUT, you can direct the output to another filehandle.
  
  =item * show_delay => int
  
  If set, will delay showing the progress bar until the specified number of
  seconds. This can be used to create, e.g. a CLI application that is relatively
  not chatty but will display progress after several seconds of seeming inactivity
  to indicate users that the process is still going on.
  
  =back
  
  =head2 keep_delay_showing()
  
  Can be called to reset the timer that counts down to show progress bar when
  C<show_delay> is defined. For example, if C<show_delay> is 5 seconds and two
  seconds have passed, it should've been 3 seconds before progress bar is shown in
  the next C<update()>. However, if you call this method, it will be 5 seconds
  again before showing.
  
  =head1 ENVIRONMENT
  
  =head2 COLOR => BOOL
  
  Can be used to force or disable color.
  
  =head2 COLOR_DEPTH => INT
  
  Can be used to override color depth detection. See L<Color::ANSI::Util>.
  
  =head2 COLUMNS => INT
  
  Can be used to override terminal width detection.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Progress-Any-Output-TermProgressBarColor>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Progress-Any-Output-TermProgressBarColor>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Progress-Any-Output-TermProgressBarColor>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Progress::Any>
  
  L<Term::ProgressBar>
  
  Ruby library: ruby-progressbar, L<https://github.com/jfelchner/ruby-progressbar>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
PROGRESS_ANY_OUTPUT_TERMPROGRESSBARCOLOR

    $main::fatpacked{"Regexp/Stringify.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'REGEXP_STRINGIFY';
  package Regexp::Stringify;
  
  our $DATE = '2016-10-29'; # DATE
  our $VERSION = '0.06'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use re qw(regexp_pattern);
  
  use Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(stringify_regexp);
  
  our %SPEC;
  
  $SPEC{stringify_regexp} = {
      v => 1.1,
      summary => 'Stringify a Regexp object',
      description => <<'_',
  
  This routine is an alternative to Perl's default stringification of Regexp
  object (i.e.:`"$re"`) and has some features/options, e.g.: producing regexp
  string that is compatible with certain perl versions.
  
  If given a string (or other non-Regexp object), will return it as-is.
  
  _
      args => {
          regexp => {
              schema => 're*',
              req => 1,
              pos => 0,
          },
          plver => {
              summary => 'Target perl version',
              schema => 'str*',
              description => <<'_',
  
  Try to produce a regexp object compatible with a certain perl version (should at
  least be >= 5.10).
  
  For example, in perl 5.14 regex stringification changes, e.g. `qr/hlagh/i` would
  previously be stringified as `(?i-xsm:hlagh)`, but now it's stringified as
  `(?^i:hlagh)`. If you set `plver` to 5.10 or 5.12, then this routine will
  still produce the former. It will also ignore regexp modifiers that are
  introduced in newer perls.
  
  Note that not all regexp objects are translatable to older perls, e.g. if they
  contain constructs not known to older perls like `(?^...)` before perl 5.14.
  
  _
          },
          with_qr => {
              schema  => 'bool',
              description => <<'_',
  
  If you set this to 1, then `qr/a/i` will be stringified as `'qr/a/i'` instead as
  `'(?^i:a)'`. The resulting string can then be eval-ed to recreate the Regexp
  object.
  
  _
          },
      },
      result_naked => 1,
      result => {
          schema => 'str*',
      },
  };
  sub stringify_regexp {
      my %args = @_;
  
      my $re = $args{regexp};
      return $re unless ref($re) eq 'Regexp';
      my $plver = $args{plver} // $^V;
  
      my ($pat, $mod) = regexp_pattern($re);
  
      my $ge_5140 = version->parse($plver) >= version->parse('5.14.0');
      unless ($ge_5140) {
          $mod =~ s/[adlu]//g;
      }
  
      if ($args{with_qr}) {
          return "qr($pat)$mod";
      } else {
          if ($ge_5140) {
              return "(^$mod:$pat)";
          } else {
              return "(?:(?$mod-)$pat)";
          }
      }
  }
  
  1;
  # ABSTRACT: Stringify a Regexp object
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Regexp::Stringify - Stringify a Regexp object
  
  =head1 VERSION
  
  This document describes version 0.06 of Regexp::Stringify (from Perl distribution Regexp-Stringify), released on 2016-10-29.
  
  =head1 SYNOPSIS
  
  Assuming this runs on Perl 5.14 or newer.
  
   use Regexp::Stringify qw(stringify_regexp);
   $str = stringify_regexp(regexp=>qr/a/i);                       # '(^i:a)'
   $str = stringify_regexp(regexp=>qr/a/i, with_qr=>1);           # 'qr(a)i'
   $str = stringify_regexp(regexp=>qr/a/i, plver=>5.010);         # '(?:(?i-)a)'
   $str = stringify_regexp(regexp=>qr/a/ui, plver=>5.010);        # '(?:(?i-)a)'
  
  =head1 FUNCTIONS
  
  
  =head2 stringify_regexp(%args) -> str
  
  Stringify a Regexp object.
  
  This routine is an alternative to Perl's default stringification of Regexp
  object (i.e.:C<"$re">) and has some features/options, e.g.: producing regexp
  string that is compatible with certain perl versions.
  
  If given a string (or other non-Regexp object), will return it as-is.
  
  This function is not exported by default, but exportable.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<plver> => I<str>
  
  Target perl version.
  
  Try to produce a regexp object compatible with a certain perl version (should at
  least be >= 5.10).
  
  For example, in perl 5.14 regex stringification changes, e.g. C<qr/hlagh/i> would
  previously be stringified as C<(?i-xsm:hlagh)>, but now it's stringified as
  C<(?^i:hlagh)>. If you set C<plver> to 5.10 or 5.12, then this routine will
  still produce the former. It will also ignore regexp modifiers that are
  introduced in newer perls.
  
  Note that not all regexp objects are translatable to older perls, e.g. if they
  contain constructs not known to older perls like C<(?^...)> before perl 5.14.
  
  =item * B<regexp>* => I<re>
  
  =item * B<with_qr> => I<bool>
  
  If you set this to 1, then C<qr/a/i> will be stringified as C<'qr/a/i'> instead as
  C<'(?^i:a)'>. The resulting string can then be eval-ed to recreate the Regexp
  object.
  
  =back
  
  Return value:  (str)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Regexp-Stringify>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Regexp-Stringify>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Regexp-Stringify>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
REGEXP_STRINGIFY

    $main::fatpacked{"Role/Tiny.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'ROLE_TINY';
  package Role::Tiny;
  
  sub _getglob { \*{$_[0]} }
  sub _getstash { \%{"$_[0]::"} }
  
  use strict;
  use warnings;
  
  our $VERSION = '2.000003';
  $VERSION = eval $VERSION;
  
  our %INFO;
  our %APPLIED_TO;
  our %COMPOSED;
  our %COMPOSITE_INFO;
  our @ON_ROLE_CREATE;
  
  # Module state workaround totally stolen from Zefram's Module::Runtime.
  
  BEGIN {
    *_WORK_AROUND_BROKEN_MODULE_STATE = "$]" < 5.009 ? sub(){1} : sub(){0};
    *_MRO_MODULE = "$]" < 5.010 ? sub(){"MRO/Compat.pm"} : sub(){"mro.pm"};
  }
  
  sub croak {
    require Carp;
    no warnings 'redefine';
    *croak = \&Carp::croak;
    goto &Carp::croak;
  }
  
  sub Role::Tiny::__GUARD__::DESTROY {
    delete $INC{$_[0]->[0]} if @{$_[0]};
  }
  
  sub _load_module {
    (my $proto = $_[0]) =~ s/::/\//g;
    $proto .= '.pm';
    return 1 if $INC{$proto};
    # can't just ->can('can') because a sub-package Foo::Bar::Baz
    # creates a 'Baz::' key in Foo::Bar's symbol table
    return 1 if grep !/::$/, keys %{_getstash($_[0])||{}};
    my $guard = _WORK_AROUND_BROKEN_MODULE_STATE
      && bless([ $proto ], 'Role::Tiny::__GUARD__');
    require $proto;
    pop @$guard if _WORK_AROUND_BROKEN_MODULE_STATE;
    return 1;
  }
  
  sub import {
    my $target = caller;
    my $me = shift;
    strict->import;
    warnings->import;
    $me->_install_subs($target);
    return if $me->is_role($target); # already exported into this package
    $INFO{$target}{is_role} = 1;
    # get symbol table reference
    my $stash = _getstash($target);
    # grab all *non-constant* (stash slot is not a scalarref) subs present
    # in the symbol table and store their refaddrs (no need to forcibly
    # inflate constant subs into real subs) with a map to the coderefs in
    # case of copying or re-use
    my @not_methods = (map { *$_{CODE}||() } grep !ref($_), values %$stash);
    @{$INFO{$target}{not_methods}={}}{@not_methods} = @not_methods;
    # a role does itself
    $APPLIED_TO{$target} = { $target => undef };
    foreach my $hook (@ON_ROLE_CREATE) {
      $hook->($target);
    }
  }
  
  sub _install_subs {
    my ($me, $target) = @_;
    return if $me->is_role($target);
    # install before/after/around subs
    foreach my $type (qw(before after around)) {
      *{_getglob "${target}::${type}"} = sub {
        push @{$INFO{$target}{modifiers}||=[]}, [ $type => @_ ];
        return;
      };
    }
    *{_getglob "${target}::requires"} = sub {
      push @{$INFO{$target}{requires}||=[]}, @_;
      return;
    };
    *{_getglob "${target}::with"} = sub {
      $me->apply_roles_to_package($target, @_);
      return;
    };
  }
  
  sub role_application_steps {
    qw(_install_methods _check_requires _install_modifiers _copy_applied_list);
  }
  
  sub apply_single_role_to_package {
    my ($me, $to, $role) = @_;
  
    _load_module($role);
  
    croak "This is apply_role_to_package" if ref($to);
    croak "${role} is not a Role::Tiny" unless $me->is_role($role);
  
    foreach my $step ($me->role_application_steps) {
      $me->$step($to, $role);
    }
  }
  
  sub _copy_applied_list {
    my ($me, $to, $role) = @_;
    # copy our role list into the target's
    @{$APPLIED_TO{$to}||={}}{keys %{$APPLIED_TO{$role}}} = ();
  }
  
  sub apply_roles_to_object {
    my ($me, $object, @roles) = @_;
    croak "No roles supplied!" unless @roles;
    my $class = ref($object);
    # on perl < 5.8.9, magic isn't copied to all ref copies. bless the parameter
    # directly, so at least the variable passed to us will get any magic applied
    bless($_[1], $me->create_class_with_roles($class, @roles));
  }
  
  my $role_suffix = 'A000';
  sub _composite_name {
    my ($me, $superclass, @roles) = @_;
  
    my $new_name = join(
      '__WITH__', $superclass, my $compose_name = join '__AND__', @roles
    );
  
    if (length($new_name) > 252) {
      $new_name = $COMPOSED{abbrev}{$new_name} ||= do {
        my $abbrev = substr $new_name, 0, 250 - length $role_suffix;
        $abbrev =~ s/(?<!:):$//;
        $abbrev.'__'.$role_suffix++;
      };
    }
    return wantarray ? ($new_name, $compose_name) : $new_name;
  }
  
  sub create_class_with_roles {
    my ($me, $superclass, @roles) = @_;
  
    croak "No roles supplied!" unless @roles;
  
    _load_module($superclass);
    {
      my %seen;
      if (my @dupes = grep 1 == $seen{$_}++, @roles) {
        croak "Duplicated roles: ".join(', ', @dupes);
      }
    }
  
    my ($new_name, $compose_name) = $me->_composite_name($superclass, @roles);
  
    return $new_name if $COMPOSED{class}{$new_name};
  
    foreach my $role (@roles) {
      _load_module($role);
      croak "${role} is not a Role::Tiny" unless $me->is_role($role);
    }
  
    require(_MRO_MODULE);
  
    my $composite_info = $me->_composite_info_for(@roles);
    my %conflicts = %{$composite_info->{conflicts}};
    if (keys %conflicts) {
      my $fail =
        join "\n",
          map {
            "Method name conflict for '$_' between roles "
            ."'".join(' and ', sort values %{$conflicts{$_}})."'"
            .", cannot apply these simultaneously to an object."
          } keys %conflicts;
      croak $fail;
    }
  
    my @composable = map $me->_composable_package_for($_), reverse @roles;
  
    # some methods may not exist in the role, but get generated by
    # _composable_package_for (Moose accessors via Moo).  filter out anything
    # provided by the composable packages, excluding the subs we generated to
    # make modifiers work.
    my @requires = grep {
      my $method = $_;
      !grep $_->can($method) && !$COMPOSED{role}{$_}{modifiers_only}{$method},
        @composable
    } @{$composite_info->{requires}};
  
    $me->_check_requires(
      $superclass, $compose_name, \@requires
    );
  
    *{_getglob("${new_name}::ISA")} = [ @composable, $superclass ];
  
    @{$APPLIED_TO{$new_name}||={}}{
      map keys %{$APPLIED_TO{$_}}, @roles
    } = ();
  
    $COMPOSED{class}{$new_name} = 1;
    return $new_name;
  }
  
  # preserved for compat, and apply_roles_to_package calls it to allow an
  # updated Role::Tiny to use a non-updated Moo::Role
  
  sub apply_role_to_package { shift->apply_single_role_to_package(@_) }
  
  sub apply_roles_to_package {
    my ($me, $to, @roles) = @_;
  
    return $me->apply_role_to_package($to, $roles[0]) if @roles == 1;
  
    my %conflicts = %{$me->_composite_info_for(@roles)->{conflicts}};
    my @have = grep $to->can($_), keys %conflicts;
    delete @conflicts{@have};
  
    if (keys %conflicts) {
      my $fail =
        join "\n",
          map {
            "Due to a method name conflict between roles "
            ."'".join(' and ', sort values %{$conflicts{$_}})."'"
            .", the method '$_' must be implemented by '${to}'"
          } keys %conflicts;
      croak $fail;
    }
  
    # conflicting methods are supposed to be treated as required by the
    # composed role. we don't have an actual composed role, but because
    # we know the target class already provides them, we can instead
    # pretend that the roles don't do for the duration of application.
    my @role_methods = map $me->_concrete_methods_of($_), @roles;
    # separate loops, since local ..., delete ... for ...; creates a scope
    local @{$_}{@have} for @role_methods;
    delete @{$_}{@have} for @role_methods;
  
    # the if guard here is essential since otherwise we accidentally create
    # a $INFO for something that isn't a Role::Tiny (or Moo::Role) because
    # autovivification hates us and wants us to die()
    if ($INFO{$to}) {
      delete $INFO{$to}{methods}; # reset since we're about to add methods
    }
  
    # backcompat: allow subclasses to use apply_single_role_to_package
    # to apply changes.  set a local var so ours does nothing.
    our %BACKCOMPAT_HACK;
    if($me ne __PACKAGE__
        and exists $BACKCOMPAT_HACK{$me} ? $BACKCOMPAT_HACK{$me} :
        $BACKCOMPAT_HACK{$me} =
          $me->can('role_application_steps')
            == \&role_application_steps
          && $me->can('apply_single_role_to_package')
            != \&apply_single_role_to_package
    ) {
      foreach my $role (@roles) {
        $me->apply_single_role_to_package($to, $role);
      }
    }
    else {
      foreach my $step ($me->role_application_steps) {
        foreach my $role (@roles) {
          $me->$step($to, $role);
        }
      }
    }
    $APPLIED_TO{$to}{join('|',@roles)} = 1;
  }
  
  sub _composite_info_for {
    my ($me, @roles) = @_;
    $COMPOSITE_INFO{join('|', sort @roles)} ||= do {
      foreach my $role (@roles) {
        _load_module($role);
      }
      my %methods;
      foreach my $role (@roles) {
        my $this_methods = $me->_concrete_methods_of($role);
        $methods{$_}{$this_methods->{$_}} = $role for keys %$this_methods;
      }
      my %requires;
      @requires{map @{$INFO{$_}{requires}||[]}, @roles} = ();
      delete $requires{$_} for keys %methods;
      delete $methods{$_} for grep keys(%{$methods{$_}}) == 1, keys %methods;
      +{ conflicts => \%methods, requires => [keys %requires] }
    };
  }
  
  sub _composable_package_for {
    my ($me, $role) = @_;
    my $composed_name = 'Role::Tiny::_COMPOSABLE::'.$role;
    return $composed_name if $COMPOSED{role}{$composed_name};
    $me->_install_methods($composed_name, $role);
    my $base_name = $composed_name.'::_BASE';
    # force stash to exist so ->can doesn't complain
    _getstash($base_name);
    # Not using _getglob, since setting @ISA via the typeglob breaks
    # inheritance on 5.10.0 if the stash has previously been accessed an
    # then a method called on the class (in that order!), which
    # ->_install_methods (with the help of ->_install_does) ends up doing.
    { no strict 'refs'; @{"${composed_name}::ISA"} = ( $base_name ); }
    my $modifiers = $INFO{$role}{modifiers}||[];
    my @mod_base;
    my @modifiers = grep !$composed_name->can($_),
      do { my %h; @h{map @{$_}[1..$#$_-1], @$modifiers} = (); keys %h };
    foreach my $modified (@modifiers) {
      push @mod_base, "sub ${modified} { shift->next::method(\@_) }";
    }
    my $e;
    {
      local $@;
      eval(my $code = join "\n", "package ${base_name};", @mod_base);
      $e = "Evaling failed: $@\nTrying to eval:\n${code}" if $@;
    }
    die $e if $e;
    $me->_install_modifiers($composed_name, $role);
    $COMPOSED{role}{$composed_name} = {
      modifiers_only => { map { $_ => 1 } @modifiers },
    };
    return $composed_name;
  }
  
  sub _check_requires {
    my ($me, $to, $name, $requires) = @_;
    return unless my @requires = @{$requires||$INFO{$name}{requires}||[]};
    if (my @requires_fail = grep !$to->can($_), @requires) {
      # role -> role, add to requires, role -> class, error out
      if (my $to_info = $INFO{$to}) {
        push @{$to_info->{requires}||=[]}, @requires_fail;
      } else {
        croak "Can't apply ${name} to ${to} - missing ".join(', ', @requires_fail);
      }
    }
  }
  
  sub _concrete_methods_of {
    my ($me, $role) = @_;
    my $info = $INFO{$role};
    # grab role symbol table
    my $stash = _getstash($role);
    # reverse so our keys become the values (captured coderefs) in case
    # they got copied or re-used since
    my $not_methods = { reverse %{$info->{not_methods}||{}} };
    $info->{methods} ||= +{
      # grab all code entries that aren't in the not_methods list
      map {
        my $code = *{$stash->{$_}}{CODE};
        ( ! $code or exists $not_methods->{$code} ) ? () : ($_ => $code)
      } grep !ref($stash->{$_}), keys %$stash
    };
  }
  
  sub methods_provided_by {
    my ($me, $role) = @_;
    croak "${role} is not a Role::Tiny" unless $me->is_role($role);
    (keys %{$me->_concrete_methods_of($role)}, @{$INFO{$role}->{requires}||[]});
  }
  
  sub _install_methods {
    my ($me, $to, $role) = @_;
  
    my $info = $INFO{$role};
  
    my $methods = $me->_concrete_methods_of($role);
  
    # grab target symbol table
    my $stash = _getstash($to);
  
    # determine already extant methods of target
    my %has_methods;
    @has_methods{grep
      +(ref($stash->{$_}) || *{$stash->{$_}}{CODE}),
      keys %$stash
    } = ();
  
    foreach my $i (grep !exists $has_methods{$_}, keys %$methods) {
      no warnings 'once';
      my $glob = _getglob "${to}::${i}";
      *$glob = $methods->{$i};
  
      # overloads using method names have the method stored in the scalar slot
      # and &overload::nil in the code slot.
      next
        unless $i =~ /^\(/
          && ((defined &overload::nil && $methods->{$i} == \&overload::nil)
              || (defined &overload::_nil && $methods->{$i} == \&overload::_nil));
  
      my $overload = ${ *{_getglob "${role}::${i}"}{SCALAR} };
      next
        unless defined $overload;
  
      *$glob = \$overload;
    }
  
    $me->_install_does($to);
  }
  
  sub _install_modifiers {
    my ($me, $to, $name) = @_;
    return unless my $modifiers = $INFO{$name}{modifiers};
    my $info = $INFO{$to};
    my $existing = ($info ? $info->{modifiers} : $COMPOSED{modifiers}{$to}) ||= [];
    my @modifiers = grep {
      my $modifier = $_;
      !grep $_ == $modifier, @$existing;
    } @{$modifiers||[]};
    push @$existing, @modifiers;
  
    if (!$info) {
      foreach my $modifier (@modifiers) {
        $me->_install_single_modifier($to, @$modifier);
      }
    }
  }
  
  my $vcheck_error;
  
  sub _install_single_modifier {
    my ($me, @args) = @_;
    defined($vcheck_error) or $vcheck_error = do {
      local $@;
      eval {
        require Class::Method::Modifiers;
        Class::Method::Modifiers->VERSION(1.05);
        1;
      } ? 0 : $@;
    };
    $vcheck_error and die $vcheck_error;
    Class::Method::Modifiers::install_modifier(@args);
  }
  
  my $FALLBACK = sub { 0 };
  sub _install_does {
    my ($me, $to) = @_;
  
    # only add does() method to classes
    return if $me->is_role($to);
  
    my $does = $me->can('does_role');
    # add does() only if they don't have one
    *{_getglob "${to}::does"} = $does unless $to->can('does');
  
    return
      if $to->can('DOES') and $to->can('DOES') != (UNIVERSAL->can('DOES') || 0);
  
    my $existing = $to->can('DOES') || $to->can('isa') || $FALLBACK;
    my $new_sub = sub {
      my ($proto, $role) = @_;
      $proto->$does($role) or $proto->$existing($role);
    };
    no warnings 'redefine';
    return *{_getglob "${to}::DOES"} = $new_sub;
  }
  
  sub does_role {
    my ($proto, $role) = @_;
    require(_MRO_MODULE);
    foreach my $class (@{mro::get_linear_isa(ref($proto)||$proto)}) {
      return 1 if exists $APPLIED_TO{$class}{$role};
    }
    return 0;
  }
  
  sub is_role {
    my ($me, $role) = @_;
    return !!($INFO{$role} && ($INFO{$role}{is_role} || $INFO{$role}{not_methods}));
  }
  
  1;
  __END__
  
  =encoding utf-8
  
  =head1 NAME
  
  Role::Tiny - Roles. Like a nouvelle cuisine portion size slice of Moose.
  
  =head1 SYNOPSIS
  
   package Some::Role;
  
   use Role::Tiny;
  
   sub foo { ... }
  
   sub bar { ... }
  
   around baz => sub { ... };
  
   1;
  
  elsewhere
  
   package Some::Class;
  
   use Role::Tiny::With;
  
   # bar gets imported, but not foo
   with 'Some::Role';
  
   sub foo { ... }
  
   # baz is wrapped in the around modifier by Class::Method::Modifiers
   sub baz { ... }
  
   1;
  
  If you wanted attributes as well, look at L<Moo::Role>.
  
  =head1 DESCRIPTION
  
  C<Role::Tiny> is a minimalist role composition tool.
  
  =head1 ROLE COMPOSITION
  
  Role composition can be thought of as much more clever and meaningful multiple
  inheritance.  The basics of this implementation of roles is:
  
  =over 2
  
  =item *
  
  If a method is already defined on a class, that method will not be composed in
  from the role. A method inherited by a class gets overridden by the role's
  method of the same name, though.
  
  =item *
  
  If a method that the role L</requires> to be implemented is not implemented,
  role application will fail loudly.
  
  =back
  
  Unlike L<Class::C3>, where the B<last> class inherited from "wins," role
  composition is the other way around, where the class wins. If multiple roles
  are applied in a single call (single with statement), then if any of their
  provided methods clash, an exception is raised unless the class provides
  a method since this conflict indicates a potential problem.
  
  =head1 IMPORTED SUBROUTINES
  
  =head2 requires
  
   requires qw(foo bar);
  
  Declares a list of methods that must be defined to compose role.
  
  =head2 with
  
   with 'Some::Role1';
  
   with 'Some::Role1', 'Some::Role2';
  
  Composes another role into the current role (or class via L<Role::Tiny::With>).
  
  If you have conflicts and want to resolve them in favour of Some::Role1 you
  can instead write:
  
   with 'Some::Role1';
   with 'Some::Role2';
  
  If you have conflicts and want to resolve different conflicts in favour of
  different roles, please refactor your codebase.
  
  =head2 before
  
   before foo => sub { ... };
  
  See L<< Class::Method::Modifiers/before method(s) => sub { ... } >> for full
  documentation.
  
  Note that since you are not required to use method modifiers,
  L<Class::Method::Modifiers> is lazily loaded and we do not declare it as
  a dependency. If your L<Role::Tiny> role uses modifiers you must depend on
  both L<Class::Method::Modifiers> and L<Role::Tiny>.
  
  =head2 around
  
   around foo => sub { ... };
  
  See L<< Class::Method::Modifiers/around method(s) => sub { ... } >> for full
  documentation.
  
  Note that since you are not required to use method modifiers,
  L<Class::Method::Modifiers> is lazily loaded and we do not declare it as
  a dependency. If your L<Role::Tiny> role uses modifiers you must depend on
  both L<Class::Method::Modifiers> and L<Role::Tiny>.
  
  =head2 after
  
   after foo => sub { ... };
  
  See L<< Class::Method::Modifiers/after method(s) => sub { ... } >> for full
  documentation.
  
  Note that since you are not required to use method modifiers,
  L<Class::Method::Modifiers> is lazily loaded and we do not declare it as
  a dependency. If your L<Role::Tiny> role uses modifiers you must depend on
  both L<Class::Method::Modifiers> and L<Role::Tiny>.
  
  =head2 Strict and Warnings
  
  In addition to importing subroutines, using C<Role::Tiny> applies L<strict> and
  L<warnings> to the caller.
  
  =head1 SUBROUTINES
  
  =head2 does_role
  
   if (Role::Tiny::does_role($foo, 'Some::Role')) {
     ...
   }
  
  Returns true if class has been composed with role.
  
  This subroutine is also installed as ->does on any class a Role::Tiny is
  composed into unless that class already has an ->does method, so
  
    if ($foo->does('Some::Role')) {
      ...
    }
  
  will work for classes but to test a role, one must use ::does_role directly.
  
  Additionally, Role::Tiny will override the standard Perl C<DOES> method
  for your class. However, if C<any> class in your class' inheritance
  hierarchy provides C<DOES>, then Role::Tiny will not override it.
  
  =head1 METHODS
  
  =head2 apply_roles_to_package
  
   Role::Tiny->apply_roles_to_package(
     'Some::Package', 'Some::Role', 'Some::Other::Role'
   );
  
  Composes role with package.  See also L<Role::Tiny::With>.
  
  =head2 apply_roles_to_object
  
   Role::Tiny->apply_roles_to_object($foo, qw(Some::Role1 Some::Role2));
  
  Composes roles in order into object directly. Object is reblessed into the
  resulting class. Note that the object's methods get overridden by the role's
  ones with the same names.
  
  =head2 create_class_with_roles
  
   Role::Tiny->create_class_with_roles('Some::Base', qw(Some::Role1 Some::Role2));
  
  Creates a new class based on base, with the roles composed into it in order.
  New class is returned.
  
  =head2 is_role
  
   Role::Tiny->is_role('Some::Role1')
  
  Returns true if the given package is a role.
  
  =head1 CAVEATS
  
  =over 4
  
  =item * On perl 5.8.8 and earlier, applying a role to an object won't apply any
  overloads from the role to other copies of the object.
  
  =item * On perl 5.16 and earlier, applying a role to a class won't apply any
  overloads from the role to any existing instances of the class.
  
  =back
  
  =head1 SEE ALSO
  
  L<Role::Tiny> is the attribute-less subset of L<Moo::Role>; L<Moo::Role> is
  a meta-protocol-less subset of the king of role systems, L<Moose::Role>.
  
  Ovid's L<Role::Basic> provides roles with a similar scope, but without method
  modifiers, and having some extra usage restrictions.
  
  =head1 AUTHOR
  
  mst - Matt S. Trout (cpan:MSTROUT) <mst@shadowcat.co.uk>
  
  =head1 CONTRIBUTORS
  
  dg - David Leadbeater (cpan:DGL) <dgl@dgl.cx>
  
  frew - Arthur Axel "fREW" Schmidt (cpan:FREW) <frioux@gmail.com>
  
  hobbs - Andrew Rodland (cpan:ARODLAND) <arodland@cpan.org>
  
  jnap - John Napiorkowski (cpan:JJNAPIORK) <jjn1056@yahoo.com>
  
  ribasushi - Peter Rabbitson (cpan:RIBASUSHI) <ribasushi@cpan.org>
  
  chip - Chip Salzenberg (cpan:CHIPS) <chip@pobox.com>
  
  ajgb - Alex J. G. Burzyński (cpan:AJGB) <ajgb@cpan.org>
  
  doy - Jesse Luehrs (cpan:DOY) <doy at tozt dot net>
  
  perigrin - Chris Prather (cpan:PERIGRIN) <chris@prather.org>
  
  Mithaldu - Christian Walde (cpan:MITHALDU) <walde.christian@googlemail.com>
  
  ilmari - Dagfinn Ilmari Mannsåker (cpan:ILMARI) <ilmari@ilmari.org>
  
  tobyink - Toby Inkster (cpan:TOBYINK) <tobyink@cpan.org>
  
  haarg - Graham Knop (cpan:HAARG) <haarg@haarg.org>
  
  =head1 COPYRIGHT
  
  Copyright (c) 2010-2012 the Role::Tiny L</AUTHOR> and L</CONTRIBUTORS>
  as listed above.
  
  =head1 LICENSE
  
  This library is free software and may be distributed under the same terms
  as perl itself.
  
  =cut
ROLE_TINY

    $main::fatpacked{"Role/Tiny/With.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'ROLE_TINY_WITH';
  package Role::Tiny::With;
  
  use strict;
  use warnings;
  
  our $VERSION = '2.000003';
  $VERSION = eval $VERSION;
  
  use Role::Tiny ();
  
  use Exporter 'import';
  our @EXPORT = qw( with );
  
  sub with {
      my $target = caller;
      Role::Tiny->apply_roles_to_package($target, @_)
  }
  
  1;
  
  =head1 NAME
  
  Role::Tiny::With - Neat interface for consumers of Role::Tiny roles
  
  =head1 SYNOPSIS
  
   package Some::Class;
  
   use Role::Tiny::With;
  
   with 'Some::Role';
  
   # The role is now mixed in
  
  =head1 DESCRIPTION
  
  C<Role::Tiny> is a minimalist role composition tool.  C<Role::Tiny::With>
  provides a C<with> function to compose such roles.
  
  =head1 AUTHORS
  
  See L<Role::Tiny> for authors.
  
  =head1 COPYRIGHT AND LICENSE
  
  See L<Role::Tiny> for the copyright and license.
  
  =cut
  
  
ROLE_TINY_WITH

    $main::fatpacked{"SHARYANTO/Array/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SHARYANTO_ARRAY_UTIL';
  package SHARYANTO::Array::Util;
  
  our $DATE = '2015-09-04'; # DATE
  our $VERSION = '0.77'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  use experimental 'smartmatch';
  
  use Perinci::Sub::Util qw(gen_modified_sub);
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         match_array_or_regex
                         match_regex_or_array
                         split_array
                         replace_array_content
                 );
  
  our %SPEC;
  
  $SPEC{':package'} = {
      v => 1.1,
      summary => 'Array-related utilities',
  };
  
  my $_str_or_re = ['any*'=>{of=>['re*','str*']}];
  
  $SPEC{match_array_or_regex} = {
      v => 1.1,
      summary => 'Check whether an item matches (list of) values/regexes',
      description => <<'_',
  
  This routine can be used to match an item against a regex or a list of
  strings/regexes, e.g. when matching against an ACL.
  
  Since the smartmatch (`~~`) operator can already match against a list of strings
  or regexes, this function is currently basically equivalent to:
  
      if (ref($haystack) eq 'ARRAY') {
          return $needle ~~ @$haystack;
      } else {
          return $needle =~ /$haystack/;
      }
  
  _
      examples => [
          {args=>{needle=>"abc", haystack=>["abc", "abd"]}, result=>1},
          {args=>{needle=>"abc", haystack=>qr/ab./}, result=>1},
          {args=>{needle=>"abc", haystack=>[qr/ab./, "abd"]}, result=>1},
      ],
      args_as => 'array',
      args => {
          needle => {
              schema => ["str*"],
              pos => 0,
              req => 1,
          },
          haystack => {
              # XXX checking this schema might actually take longer than matching
              # the needle! so when arg validation is implemented, provide a way
              # to skip validating this schema
  
              schema => ["any*" => {
                  of => [$_str_or_re, ["array*"=>{of=>$_str_or_re}]],
              }],
              pos => 1,
              req => 1,
          },
      },
      result_naked => 1,
  };
  sub match_array_or_regex {
      my ($needle, $haystack) = @_;
      my $ref = ref($haystack);
      if ($ref eq 'ARRAY') {
          return $needle ~~ @$haystack;
      } elsif (!$ref) {
          return $needle =~ /$haystack/;
      } elsif ($ref eq 'Regexp') {
          return $needle =~ $haystack;
      } else {
          die "Invalid haystack, must be regex or array of strings/regexes";
      }
  }
  
  gen_modified_sub(
      output_name => 'match_regex_or_array',
      base_name   => 'match_array_or_regex',
      summary     => 'Alias for match_array_or_regex',
  );
  
  sub split_array {
      no strict 'refs';
  
      my ($pat, $ary, $limit) = @_;
  
      die "BUG: Second argument must be an array" unless ref($ary) eq 'ARRAY';
      $pat = qr/\A\Q$pat\E\z/ unless ref($pat) eq 'Regexp';
  
      my @res;
      my $num_elems = 0;
      my $i = 0;
    ELEM:
      while ($i < @$ary) {
          push @res, [];
        COLLECT:
          while (1) {
              if ($ary->[$i] =~ $pat) {
                  push @res, [map { ${"$_"} } 1..@+-1] if @+ > 1;
                  last COLLECT;
              }
              push @{ $res[-1] }, $ary->[$i];
              last ELEM unless ++$i < @$ary;
          }
          $num_elems++;
        LIMIT:
          if (defined($limit) && $limit > 0 && $num_elems >= $limit) {
              push @{ $res[-1] }, $ary->[$_] for $i..(@$ary-1);
              last ELEM;
          }
          $i++;
      }
  
      return @res;
  }
  
  sub replace_array_content {
      my $aryref = shift;
      @$aryref = @_;
      $aryref;
  }
  
  1;
  # ABSTRACT: Array-related utilities
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  SHARYANTO::Array::Util - Array-related utilities
  
  =head1 VERSION
  
  This document describes version 0.77 of SHARYANTO::Array::Util (from Perl distribution SHARYANTO-Utils), released on 2015-09-04.
  
  =head1 SYNOPSIS
  
   use SHARYANTO::Array::Util qw(match_array_or_regex split_array);
  
   match_array_or_regex('bar',  ['foo', 'bar', qr/[xyz]/]); # true, matches string
   match_array_or_regex('baz',  ['foo', 'bar', qr/[xyz]/]); # true, matches regex
   match_array_or_regex('oops', ['foo', 'bar', qr/[xyz]/]); # false
  
   my @res = split_array('--', [qw/--opt1 --opt2 -- foo bar -- --val/]);
   # -> ([qw/--opt1 --opt2/],  [qw/foo bar/],  [qw/--val/])
  
   my @res = split_array(qr/--/, [qw/--opt1 --opt2 -- foo bar -- --val/], 2);
   # -> ([qw/--opt1 --opt2/],  [qw/foo bar -- --val/])
  
   my @res = split_array(qr/(--)/, [qw/--opt1 --opt2 -- foo bar -- --val/], 2);
   # -> ([qw/--opt1 --opt2/],  [qw/--/],  [qw/foo bar -- --val/])
  
   my @res = split_array(qr/(-)(-)/, [qw/--opt1 --opt2 -- foo bar -- --val/], 2);
   # -> ([qw/--opt1 --opt2/],  [qw/- -/],  [qw/foo bar -- --val/])
  
  =head1 DESCRIPTION
  
  =head1 FUNCTIONS
  
  
  =head2 match_array_or_regex($needle, $haystack) -> any
  
  Check whether an item matches (list of) values/regexes.
  
  Examples:
  
   match_array_or_regex("abc", ["abc", "abd"]); # -> 1
   match_array_or_regex("abc", qr/ab./); # -> 1
   match_array_or_regex("abc", [qr/ab./, "abd"]); # -> 1
  This routine can be used to match an item against a regex or a list of
  strings/regexes, e.g. when matching against an ACL.
  
  Since the smartmatch (C<~~>) operator can already match against a list of strings
  or regexes, this function is currently basically equivalent to:
  
   if (ref($haystack) eq 'ARRAY') {
       return $needle ~~ @$haystack;
   } else {
       return $needle =~ /$haystack/;
   }
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<haystack>* => I<re|str|array[re|str]>
  
  =item * B<needle>* => I<str>
  
  =back
  
  Return value:  (any)
  
  
  =head2 match_regex_or_array($needle, $haystack) -> any
  
  Alias for match_array_or_regex.
  
  Examples:
  
   match_regex_or_array("abc", ["abc", "abd"]); # -> 1
   match_regex_or_array("abc", qr/ab./); # -> 1
   match_regex_or_array("abc", [qr/ab./, "abd"]); # -> 1
  This routine can be used to match an item against a regex or a list of
  strings/regexes, e.g. when matching against an ACL.
  
  Since the smartmatch (C<~~>) operator can already match against a list of strings
  or regexes, this function is currently basically equivalent to:
  
   if (ref($haystack) eq 'ARRAY') {
       return $needle ~~ @$haystack;
   } else {
       return $needle =~ /$haystack/;
   }
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<haystack>* => I<re|str|array[re|str]>
  
  =item * B<needle>* => I<str>
  
  =back
  
  Return value:  (any)
  
  =head2 split_array($str_or_re, \@array[, $limit]) => LIST
  
  Like the C<split()> builtin Perl function, but applies on an array instead of a
  scalar. It loosely follows the C<split()> semantic, with some exceptions.
  
  =head2 replace_array_content($aryref, @elems) => $aryref
  
  Replace elements in <$aryref> with @elems. Return C<$aryref>. Do not create a
  new arrayref object (i.e. it is different from: C<< $aryref = ["new", "content"]
  >>).
  
  Do not use this function. In Perl you can just use: C<< splice(@$aryref, 0,
  length(@$aryref), @elems) >> or even easier: C<< @$aryref = @elems >>. I put the
  function here for reminder.
  
  =head1 SEE ALSO
  
  L<SHARYANTO>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/SHARYANTO-Utils>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-SHARYANTO-Utils>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=SHARYANTO-Utils>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
SHARYANTO_ARRAY_UTIL

    $main::fatpacked{"SHARYANTO/HTML/Extract/ImageLinks.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SHARYANTO_HTML_EXTRACT_IMAGELINKS';
  package SHARYANTO::HTML::Extract::ImageLinks;
  
  our $DATE = '2015-09-04'; # DATE
  our $VERSION = '0.77'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  use HTML::Parser;
  use URI::URL;
  
  use Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(extract_image_links);
  
  our %SPEC;
  
  $SPEC{extract_image_links} = {
      v => 1.1,
      summary => 'Extract image links from HTML document',
      description => <<'_',
  
  Either specify either url, html.
  
  _
      args => {
          html => {
              schema => 'str*',
              req => 1,
              summary => 'HTML document to extract from',
              cmdline_src => 'stdin_or_files',
          },
          base => {
              schema => 'str',
              summary => 'base URL for images',
          },
      },
  };
  sub extract_image_links {
      my %args = @_;
  
      my $html = $args{html};
      my $base = $args{base};
  
      # get base from <BASE HREF> if exists
      if (!$base) {
          if ($html =~ /<base\b[^>]*\bhref\s*=\s*(["']?)(\S+?)\1[^>]*>/is) {
              $base = $2;
          }
      }
  
      my %memory;
      my @res;
      my $p = HTML::Parser->new(
          api_version => 3,
          start_h => [
              sub {
                  my ($tagname, $attr) = @_;
                  return unless $tagname =~ /^img$/i;
                  for ($attr->{src}) {
                      s/#.*//;
                      if (++$memory{$_} == 1) {
                          push @res, URI::URL->new($_, $base)->abs()->as_string;
                      }
                  }
              }, "tagname, attr"],
      );
      $p->parse($html);
  
      [200, "OK", \@res];
  }
  
  1;
  # ABSTRACT: Extract image links from HTML document
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  SHARYANTO::HTML::Extract::ImageLinks - Extract image links from HTML document
  
  =head1 VERSION
  
  This document describes version 0.77 of SHARYANTO::HTML::Extract::ImageLinks (from Perl distribution SHARYANTO-Utils), released on 2015-09-04.
  
  =head1 SEE ALSO
  
  L<SHARYANTO>
  
  =head1 FUNCTIONS
  
  
  =head2 extract_image_links(%args) -> [status, msg, result, meta]
  
  Extract image links from HTML document.
  
  Either specify either url, html.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<base> => I<str>
  
  base URL for images.
  
  =item * B<html>* => I<str>
  
  HTML document to extract from.
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (any)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/SHARYANTO-Utils>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-SHARYANTO-Utils>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=SHARYANTO-Utils>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
SHARYANTO_HTML_EXTRACT_IMAGELINKS

    $main::fatpacked{"SHARYANTO/HTTP/DetectUA/Simple.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SHARYANTO_HTTP_DETECTUA_SIMPLE';
  package SHARYANTO::HTTP::DetectUA::Simple;
  
  use 5.010;
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(detect_http_ua_simple);
  
  our $VERSION = '0.77'; # VERSION
  
  our %SPEC;
  
  $SPEC{":package"} = {
      v => 1.1,
      summary => 'A very simple and generic browser detection library',
      description => <<'_',
  
  I needed a simple and fast routine which can detect whether HTTP client is a GUI
  browser (like Chrome or Firefox), a text browser (like Lynx or Links), or
  neither (like curl, or L<LWP>). Hence, this module.
  
  _
  };
  
  $SPEC{detect_http_ua_simple} = {
      v => 1.1,
      summary => 'Detect whether HTTP client is a GUI/TUI browser',
      description => <<'_',
  
  This function is a simple and fast routine to detect whether HTTP client is a
  GUI browser (like Chrome or Firefox), a text-based browser (like Lynx or Links),
  or neither (like curl or LWP). Extra information can be provided in the future.
  
  Currently these heuristic rules are used:
  
  * check popular browser markers in User-Agent header (e.g. 'Chrome', 'Opera');
  * check Accept header for 'image/';
  
  It is several times faster than the other equivalent Perl modules, this is
  because it does significantly less.
  
  _
      args => {
          env => {
              pos => 0,
              summary => 'CGI-compatible environment, e.g. \%ENV or PSGI\'s $env',
          },
      },
      result => {
          description => <<'_',
  
  * 'is_gui_browser' key will be set to true if HTTP client is a GUI browser.
  
  * 'is_text_browser' key will be set to true if HTTP client is a text/TUI
    browser.
  
  * 'is_browser' key will be set to true if either 'is_gui_browser' or
    'is_text_browser' is set to true.
  
  _
          schema => 'hash*',
      },
      links => [
          {url => "pm:HTML::ParseBrowser"},
          {url => "pm:HTTP::BrowserDetect"},
          {url => "pm:HTTP::DetectUserAgent"},
          {url => "pm:Parse::HTTP::UserAgent"},
          {url => "pm:HTTP::headers::UserAgent"},
      ],
      args_as => "array",
      result_naked => 0,
  };
  
  sub detect_http_ua_simple {
      my ($env) = @_;
      my $res = {};
      my $det;
  
      my $ua = $env->{HTTP_USER_AGENT};
      if ($ua) {
          # check for popular browser GUI UA
          if ($ua =~ m!\b(?:Mozilla/|MSIE |Chrome/|Opera/|
                           Profile/MIDP-
                       )!x) {
              $res->{is_gui_browser} = 1;
              $det++;
          }
          # check for popular webbot UA
          if ($ua =~ m!\b(?:Links |ELinks/|Lynx/|w3m/)!) {
              $res->{is_text_browser} = 1;
              $det++;
          }
      }
  
      if (!$det) {
          # check for accept mime type
          my $ac = $env->{HTTP_ACCEPT};
          if ($ac) {
              if ($ac =~ m!\b(?:image/)!) {
                  $res->{is_gui_browser} = 1;
                  $det++;
              }
          }
      }
  
      $res->{is_browser} = 1 if $res->{is_gui_browser} || $res->{is_text_browser};
      $res;
  }
  
  1;
  # ABSTRACT: A very simple and generic browser detection library
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  SHARYANTO::HTTP::DetectUA::Simple - A very simple and generic browser detection library
  
  =head1 VERSION
  
  This document describes version 0.77 of SHARYANTO::HTTP::DetectUA::Simple (from Perl distribution SHARYANTO-Utils), released on 2015-09-04.
  
  =head1 SEE ALSO
  
  L<SHARYANTO>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/SHARYANTO-Utils>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-SHARYANTO-Utils>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=SHARYANTO-Utils>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =head1 DESCRIPTION
  
  
  I needed a simple and fast routine which can detect whether HTTP client is a GUI
  browser (like Chrome or Firefox), a text browser (like Lynx or Links), or
  neither (like curl, or L<LWP>). Hence, this module.
  
  =head1 FUNCTIONS
  
  
  =head2 detect_http_ua_simple($env) -> [status, msg, result, meta]
  
  Detect whether HTTP client is a GUI/TUI browser.
  
  This function is a simple and fast routine to detect whether HTTP client is a
  GUI browser (like Chrome or Firefox), a text-based browser (like Lynx or Links),
  or neither (like curl or LWP). Extra information can be provided in the future.
  
  Currently these heuristic rules are used:
  
  =over
  
  =item * check popular browser markers in User-Agent header (e.g. 'Chrome', 'Opera');
  
  =item * check Accept header for 'image/';
  
  =back
  
  It is several times faster than the other equivalent Perl modules, this is
  because it does significantly less.
  
  Arguments ('*' denotes required arguments):
  
  =over 4
  
  =item * B<env> => I<any>
  
  CGI-compatible environment, e.g. \%ENV or PSGI's $env.
  
  =back
  
  Returns an enveloped result (an array).
  
  First element (status) is an integer containing HTTP status code
  (200 means OK, 4xx caller error, 5xx function error). Second element
  (msg) is a string containing error message, or 'OK' if status is
  200. Third element (result) is optional, the actual result. Fourth
  element (meta) is called result metadata and is optional, a hash
  that contains extra information.
  
  Return value:  (hash)
  
  
  =over
  
  =item * 'is_gui_browser' key will be set to true if HTTP client is a GUI browser.
  
  =item * 'is_text_browser' key will be set to true if HTTP client is a text/TUI
  browser.
  
  =item * 'is_browser' key will be set to true if either 'is_gui_browser' or
  'is_text_browser' is set to true.
  
  =back
  
  See also:
  
  =over
  
  * L<HTML::ParseBrowser>
  
  * L<HTTP::BrowserDetect>
  
  * L<HTTP::DetectUserAgent>
  
  * L<Parse::HTTP::UserAgent>
  
  * L<HTTP::headers::UserAgent>
  
  =back
  
  =cut
SHARYANTO_HTTP_DETECTUA_SIMPLE

    $main::fatpacked{"SHARYANTO/Hash/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SHARYANTO_HASH_UTIL';
  package SHARYANTO::Hash::Util;
  
  our $DATE = '2015-09-04'; # DATE
  our $VERSION = '0.77'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(rename_key replace_hash_content);
  
  sub rename_key {
      my ($h, $okey, $nkey) = @_;
      die unless    exists $h->{$okey};
      die if        exists $h->{$nkey};
      $h->{$nkey} = delete $h->{$okey};
  }
  
  sub replace_hash_content {
      my $hashref = shift;
      %$hashref = @_;
      $hashref;
  }
  
  1;
  # ABSTRACT: Hash utilities
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  SHARYANTO::Hash::Util - Hash utilities
  
  =head1 VERSION
  
  This document describes version 0.77 of SHARYANTO::Hash::Util (from Perl distribution SHARYANTO-Utils), released on 2015-09-04.
  
  =head1 SYNOPSIS
  
   use SHARYANTO::Hash::Util qw(rename_key);
   my %h = (a=>1, b=>2);
   rename_key(\%h, "a", "alpha"); # %h = (alpha=>1, b=>2)
  
  =head1 FUNCTIONS
  
  =head2 rename_key(\%hash, $old_key, $new_key)
  
  Rename key. This is basically C<< $hash{$new_key} = delete $hash{$old_key} >>
  with a couple of additional checks. It is a shortcut for:
  
   die unless exists $hash{$old_key};
   die if     exists $hash{$new_key};
   $hash{$new_key} = delete $hash{$old_key};
  
  =head2 replace_hash_content($hashref, @pairs) => $hashref
  
  Replace content in <$hashref> with @list. Return C<$hashref>. Do not create a
  new hashref object (i.e. it is different from: C<< $hashref = {new=>"content"}
  >>).
  
  Do not use this function. In Perl you can just use: C<< %$hashref = @pairs >>. I
  put the function here for reminder.
  
  =head1 SEE ALSO
  
  L<SHARYANTO>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/SHARYANTO-Utils>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-SHARYANTO-Utils>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=SHARYANTO-Utils>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
SHARYANTO_HASH_UTIL

    $main::fatpacked{"SHARYANTO/List/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SHARYANTO_LIST_UTIL';
  package SHARYANTO::List::Util;
  
  our $DATE = '2015-09-04'; # DATE
  our $VERSION = '0.77'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         uniq_adj uniq_adj_ci uniq_ci
                         find_missing_nums_in_seq
                         find_missing_strs_in_seq
                         max_in_range maxstr_in_range
                         min_in_range minstr_in_range
                         pick pick_n
                 );
  
  # TODO: minmaxstr (not included in List::MoreUtils)
  # TODO: minmax_in_range. minmaxstr_in_range
  # TODO: *_in_xrange
  # TODO? pick_n_distinct
  
  sub uniq_adj {
      my @res;
  
      return () unless @_;
      my $last = shift;
      push @res, $last;
      for (@_) {
          next if !defined($_) && !defined($last);
          # XXX $_ becomes stringified
          next if defined($_) && defined($last) && $_ eq $last;
          push @res, $_;
          $last = $_;
      }
      @res;
  }
  
  sub uniq_adj_ci {
      my @res;
  
      return () unless @_;
      my $last = shift;
      push @res, $last;
      for (@_) {
          next if !defined($_) && !defined($last);
          # XXX $_ becomes stringified
          next if defined($_) && defined($last) && lc($_) eq lc($last);
          push @res, $_;
          $last = $_;
      }
      @res;
  }
  
  sub uniq_ci {
      my @res;
  
      my %mem;
      for (@_) {
          push @res, $_ unless $mem{lc $_}++;
      }
      @res;
  }
  
  sub find_missing_nums_in_seq {
      require List::Util;
  
      my @res;
      my $min = List::Util::min(@_);
      my $max = List::Util::max(@_);
  
      my %h = map { $_=>1 } @_;
      for ($min..$max) {
          push @res, $_ unless $h{$_};
      }
      wantarray ? @res : \@res;
  }
  
  sub find_missing_strs_in_seq {
      require List::Util;
  
      my @res;
      my $min = List::Util::minstr(@_);
      my $max = List::Util::maxstr(@_);
  
      my %h = map { $_=>1 } @_;
      for ($min..$max) {
          push @res, $_ unless $h{$_};
      }
      wantarray ? @res : \@res;
  }
  
  sub max_in_range {
      my $lower = shift;
      my $upper = shift;
  
      my $ans;
      for (@_) {
          $ans = $_ if defined($_) &&
              (!defined($ans)   || $ans < $_) &&
              (!defined($lower) || $lower <= $_) &&
              (!defined($upper) || $upper >= $_);
      }
      $ans;
  }
  
  sub maxstr_in_range {
      my $lower = shift;
      my $upper = shift;
  
      my $ans;
      for (@_) {
          $ans = $_ if defined($_) &&
              (!defined($ans)   || $ans lt $_) &&
              (!defined($lower) || $lower le $_) &&
              (!defined($upper) || $upper ge $_);
      }
      $ans;
  }
  
  sub min_in_range {
      my $lower = shift;
      my $upper = shift;
  
      my $ans;
      for (@_) {
          $ans = $_ if defined($_) &&
              (!defined($ans)   || $ans > $_) &&
              (!defined($lower) || $lower <= $_) &&
              (!defined($upper) || $upper >= $_);
      }
      $ans;
  }
  
  sub minstr_in_range {
      my $lower = shift;
      my $upper = shift;
  
      my $ans;
      for (@_) {
          $ans = $_ if defined($_) &&
              (!defined($ans)   || $ans gt $_) &&
              (!defined($lower) || $lower le $_) &&
              (!defined($upper) || $upper ge $_);
      }
      $ans;
  }
  
  sub pick {
      $_[@_ * rand];
  }
  
  sub pick_n {
      my $n = shift;
      my @res;
      while (@_ && @res < $n) {
          push @res, splice(@_, @_*rand(), 1);
      }
      @res;
  }
  
  1;
  # ABSTRACT: List utilities
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  SHARYANTO::List::Util - List utilities
  
  =head1 VERSION
  
  This document describes version 0.77 of SHARYANTO::List::Util (from Perl distribution SHARYANTO-Utils), released on 2015-09-04.
  
  =head1 FUNCTIONS
  
  Not exported by default but exportable.
  
  =head2 uniq_adj(@list) => LIST
  
  Remove I<adjacent> duplicates from list, i.e. behave more like Unix utility's
  B<uniq> instead of L<List::MoreUtils>'s C<uniq> function, e.g.
  
   my @res = uniq(1, 4, 4, 3, 1, 1, 2); # 1, 4, 3, 1, 2
  
  =head2 uniq_adj_ci(@list) => LIST
  
  Like C<uniq_adj> except case-insensitive.
  
  =head2 uniq_ci(@list) => LIST
  
  Like C<List::MoreUtils>' C<uniq> except case-insensitive.
  
  =head2 find_missing_nums_in_seq(LIST) => LIST
  
  Given a list of integers, return number(s) missing in the sequence, e.g.:
  
   find_missing_nums_in_seq(1, 2, 3, 4, 7, 8); # (5, 6)
  
  =head2 find_missing_strs_in_seq(LIST) => LIST
  
  Like C<find_missing_nums_in_seq>, but for strings/letters "a".."z".
  
   find_missing_strs_in_seq("a", "e", "b"); # ("c", "d")
   find_missing_strs_in_seq("aa".."zu", "zz"); # ("zv", "zw", "zx", "zy")
  
  =head2 min_in_range($lower, $upper, @list) => $num
  
  Find lowest number C<$num> in C<@list> which still satisfies C<< $lower <= $num
  <= $upper >>. C<$lower> and/or C<$upper> can be undef to express no limit.
  
  =head2 minstr_in_range($lower, $upper, @list) => $str
  
  Find lowest string C<$str> in C<@list> which still satisfies C<< $lower le $x
  le $upper >>. C<$lower> and/or C<$upper> can be undef to express no limit.
  
  =head2 max_in_range($lower, $upper, @list) => $num
  
  Find highest number C<$num> in C<@list> which still satisfies C<< $lower <= $num
  <= $upper >>. C<$lower> and/or C<$upper> can be undef to express no limit.
  
  =head2 maxstr_in_range($lower, $upper, @list) => $str
  
  Find highest string C<$str> in C<@list> which still satisfies C<< $lower le $x
  le $upper >>. C<$lower> and/or C<$upper> can be undef to express no limit.
  
  =head2 pick(@list) => $item
  
  Randomly pick an item from list. It is actually simply done as:
  
   $_[@_ * rand]
  
  Example:
  
   pick(1, 2, 3); # => 2
   pick(1, 2, 3); # => 1
  
  =head2 pick_n($n, @list) => @picked
  
  Randomly pick C<n> different items from list. Note that there might still be
  duplicate values in the result if the original list contains duplicates.
  
   pick_n(3, 1,2,3,4,5); # => (3,2,5)
   pick_n(2, 1,2,3,4,5); # => (3,1)
   pick_n(2, 1,1,1,1);   # => (1,1)
   pick_n(4, 1,2,3);     # => (3,1,2)
  
  =head1 SEE ALSO
  
  L<SHARYANTO>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/SHARYANTO-Utils>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-SHARYANTO-Utils>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=SHARYANTO-Utils>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
SHARYANTO_LIST_UTIL

    $main::fatpacked{"SHARYANTO/Log/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SHARYANTO_LOG_UTIL';
  package SHARYANTO::Log::Util;
  
  use 5.010;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(@log_levels $log_levels_re);
  
  our $VERSION = '0.77'; # VERSION
  
  our @log_levels = (qw/trace debug info warn error fatal/);
  our $log_levels_re = join("|", @log_levels);
  $log_levels_re = qr/\A(?:$log_levels_re)\z/;
  
  1;
  # ABSTRACT: Log-related utilities
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  SHARYANTO::Log::Util - Log-related utilities
  
  =head1 VERSION
  
  This document describes version 0.77 of SHARYANTO::Log::Util (from Perl distribution SHARYANTO-Utils), released on 2015-09-04.
  
  =head1 SYNOPSIS
  
   use SHARYANTO::Log::Util qw(@log_levels $log_levels_re);
  
  =head1 DESCRIPTION
  
  =head1 VARIABLES
  
  None are exported by default, but they are exportable.
  
  =head2 @log_levels
  
  Contains log levels, from lowest to highest. Currently these are:
  
   (qw/trace debug info warn error fatal/)
  
  They can be used as method names to L<Log::Any> ($log->debug, $log->warn, etc).
  
  =head2 $log_levels_re
  
  Contains regular expression to check valid log levels.
  
  =head1 SEE ALSO
  
  L<SHARYANTO>
  
  L<Log::Any>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/SHARYANTO-Utils>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-SHARYANTO-Utils>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=SHARYANTO-Utils>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
SHARYANTO_LOG_UTIL

    $main::fatpacked{"SHARYANTO/Template/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SHARYANTO_TEMPLATE_UTIL';
  package SHARYANTO::Template::Util;
  
  use 5.010;
  require Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(process_tt_recursive);
  
  use File::Find;
  use File::Slurp::Tiny 'read_file', 'write_file';
  use Template::Tiny;
  
  our $VERSION = '0.77'; # VERSION
  
  # recursively find *.tt and process them. can optionally delete the *.tt files
  # after processing.
  sub process_tt_recursive {
      my ($dir, $vars, $opts) = @_;
      $opts //= {};
      my $tt = Template::Tiny->new;
      find sub {
          return unless -f;
          return unless /\.tt$/;
          my $newname = $_; $newname =~ s/\.tt$//;
          my $input = read_file($_);
          my $output;
          #$log->debug("Processing template $File::Find::dir/$_ -> $newname ...");
          $tt->process(\$input, $vars, \$output);
          write_file($newname, $output);
          #$log->debug("Removing $File::Find::dir/$_ ...");
          if ($opts->{delete}) { unlink($_) }
      }, $dir;
  }
  
  1;
  # ABSTRACT: Recursively process .tt files
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  SHARYANTO::Template::Util - Recursively process .tt files
  
  =head1 VERSION
  
  This document describes version 0.77 of SHARYANTO::Template::Util (from Perl distribution SHARYANTO-Utils), released on 2015-09-04.
  
  =head1 FUNCTIONS
  
  =head2 process_tt_recursive($dir, $vars, $opts)
  
  =head1 SEE ALSO
  
  L<SHARYANTO>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/SHARYANTO-Utils>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-SHARYANTO-Utils>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=SHARYANTO-Utils>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
SHARYANTO_TEMPLATE_UTIL

    $main::fatpacked{"SHARYANTO/Utils.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SHARYANTO_UTILS';
  package SHARYANTO::Utils;
  
  use 5.010001;
  
  our $VERSION = '0.77'; # VERSION
  
  1;
  # ABSTRACT: SHARYANTO's temporary namespace for various routines
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  SHARYANTO::Utils - SHARYANTO's temporary namespace for various routines
  
  =head1 VERSION
  
  This document describes version 0.77 of SHARYANTO::Utils (from Perl distribution SHARYANTO-Utils), released on 2015-09-04.
  
  =head1 FAQ
  
  =head2 What is this?
  
  This distribution is a heterogenous collection of modules that will eventually
  have their own proper distributions. See L<SHARYANTO> about this temporary
  namespace.
  
  =head1 SEE ALSO
  
  L<SHARYANTO>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/SHARYANTO-Utils>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-SHARYANTO-Utils>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=SHARYANTO-Utils>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
SHARYANTO_UTILS

    $main::fatpacked{"Sah/Schema/rinci/function_meta.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SAH_SCHEMA_RINCI_FUNCTION_META';
  package Sah::Schema::rinci::function_meta;
  
  our $DATE = '2016-12-26'; # DATE
  our $VERSION = '1.1.82.2'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Data::Sah::Normalize ();
  use Sah::Schema::rinci::meta ();
  
  our $schema = [hash => {
      summary => 'Rinci function metadata',
  
      # tmp
      _ver => 1.1,
      _prop => {
          %Sah::Schema::rinci::meta::_dh_props,
  
          # from common rinci metadata
          entity_v => {},
          entity_date => {},
          links => {},
  
          is_func => {},
          is_meth => {},
          is_class_meth => {},
          args => {
              _value_prop => {
                  %Sah::Schema::rinci::meta::_dh_props,
  
                  # common rinci metadata
                  links => {},
  
                  schema => {},
                  filters => {},
                  default => {},
                  req => {},
                  pos => {},
                  greedy => {},
                  partial => {},
                  stream => {},
                  is_password => {},
                  cmdline_aliases => {
                      _value_prop => {
                          summary => {},
                          description => {},
                          schema => {},
                          code => {},
                          is_flag => {},
                      },
                  },
                  cmdline_on_getopt => {},
                  cmdline_prompt => {},
                  completion => {},
                  index_completion => {},
                  element_completion => {},
                  cmdline_src => {},
                  meta => 'fix',
                  element_meta => 'fix',
                  deps => {
                      _keys => {
                          arg => {},
                          all => {},
                          any => {},
                          none => {},
                      },
                  },
              },
          },
          args_as => {},
          args_rels => {},
          result => {
              _prop => {
                  %Sah::Schema::rinci::meta::_dh_props,
  
                  schema => {},
                  statuses => {
                      _value_prop => {
                          # from defhash
                          summary => {},
                          description => {},
                          schema => {},
                      },
                  },
                  partial => {},
                  stream => {},
              },
          },
          result_naked => {},
          examples => {
              _elem_prop => {
                  %Sah::Schema::rinci::meta::_dh_props,
  
                  args => {},
                  argv => {},
                  src => {},
                  src_plang => {},
                  status => {},
                  result => {},
                  test => {},
              },
          },
          features => {
              _keys => {
                  reverse => {},
                  tx => {},
                  dry_run => {},
                  pure => {},
                  immutable => {},
                  idempotent => {},
                  check_arg => {},
              },
          },
          deps => {
              _keys => {
                  all => {},
                  any => {},
                  none => {},
                  env => {},
                  prog => {},
                  pkg => {},
                  func => {},
                  code => {},
                  tmp_dir => {},
                  trash_dir => {},
              },
          },
      },
  }, {}];
  
  $schema->[1]{_prop}{args}{_value_prop}{meta} = $schema->[1];
  $schema->[1]{_prop}{args}{_value_prop}{element_meta} = $schema->[1];
  
  # just so the dzil plugin won't complain about schema not being normalized.
  # because this is a circular structure and normalizing creates a shallow copy.
  
  $schema = Data::Sah::Normalize::normalize_schema($schema);
  
  1;
  # ABSTRACT: Rinci function metadata
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Sah::Schema::rinci::function_meta - Rinci function metadata
  
  =head1 VERSION
  
  This document describes version 1.1.82.2 of Sah::Schema::rinci::function_meta (from Perl distribution Sah-Schemas-Rinci), released on 2016-12-26.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Sah-Schemas-Rinci>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Sah-Schemas-Rinci>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Sah-Schemas-Rinci>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
SAH_SCHEMA_RINCI_FUNCTION_META

    $main::fatpacked{"Sah/Schema/rinci/meta.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SAH_SCHEMA_RINCI_META';
  package Sah::Schema::rinci::meta;
  
  our $DATE = '2016-12-26'; # DATE
  our $VERSION = '1.1.82.2'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  our %_dh_props = (
      v => {},
      defhash_v => {},
      name => {},
      caption => {},
      summary => {},
      description => {},
      tags => {},
      default_lang => {},
      x => {},
  );
  
  our $schema = [hash => {
      summary => 'Rinci metadata',
      # tmp
      _ver => 1.1, # this has the effect of version checking
      _prop => {
          %_dh_props,
  
          entity_v => {},
          entity_date => {},
          links => {
              _elem_prop => {
                  %_dh_props,
  
                  url => {},
              },
          },
      },
  }, {}];
  
  1;
  # ABSTRACT: Rinci metadata
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Sah::Schema::rinci::meta - Rinci metadata
  
  =head1 VERSION
  
  This document describes version 1.1.82.2 of Sah::Schema::rinci::meta (from Perl distribution Sah-Schemas-Rinci), released on 2016-12-26.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Sah-Schemas-Rinci>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Sah-Schemas-Rinci>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Sah-Schemas-Rinci>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
SAH_SCHEMA_RINCI_META

    $main::fatpacked{"Sah/Schema/rinci/result_meta.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SAH_SCHEMA_RINCI_RESULT_META';
  package Sah::Schema::rinci::result_meta;
  
  our $DATE = '2016-12-26'; # DATE
  our $VERSION = '1.1.82.2'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Sah::Schema::rinci::meta;
  
  our $schema = [hash => {
      summary => 'Rinci envelope result metadata',
  
      # tmp
      _ver => 1.1,
      _prop => {
          %Sah::Schema::rinci::meta::_dh_props,
  
          perm_err => {},
          func => {}, # XXX func.*
          cmdline => {}, # XXX cmdline.*
          logs => {},
          prev => {},
          results => {},
          part_start => {},
          part_len => {},
          len => {},
          stream => {},
      },
  }, {}];
  
  1;
  # ABSTRACT: Rinci envelope result metadata
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Sah::Schema::rinci::result_meta - Rinci envelope result metadata
  
  =head1 VERSION
  
  This document describes version 1.1.82.2 of Sah::Schema::rinci::result_meta (from Perl distribution Sah-Schemas-Rinci), released on 2016-12-26.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Sah-Schemas-Rinci>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Sah-Schemas-Rinci>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Sah-Schemas-Rinci>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
SAH_SCHEMA_RINCI_RESULT_META

    $main::fatpacked{"Sah/SchemaR/rinci/function_meta.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SAH_SCHEMAR_RINCI_FUNCTION_META';
  package Sah::SchemaR::rinci::function_meta;
  
  our $DATE = '2016-12-26'; # DATE
  our $VERSION = '1.1.82.2'; # VERSION
  
  our $rschema = do {
    my $a = [
      "hash",
      [
        {
          _prop   => {
                       args => {
                         _value_prop => {
                           caption => {},
                           cmdline_aliases => {
                             _value_prop => { code => {}, description => {}, is_flag => {}, schema => {}, summary => {} },
                           },
                           cmdline_on_getopt => {},
                           cmdline_prompt => {},
                           cmdline_src => {},
                           completion => {},
                           default => {},
                           default_lang => {},
                           defhash_v => {},
                           deps => { _keys => { all => {}, any => {}, arg => {}, none => {} } },
                           description => {},
                           element_completion => {},
                           element_meta => { _prop => 'fix', _ver => 1.1, summary => "Rinci function metadata" },
                           filters => {},
                           greedy => {},
                           index_completion => {},
                           is_password => {},
                           links => {},
                           meta => 'fix',
                           name => {},
                           partial => {},
                           pos => {},
                           req => {},
                           schema => {},
                           stream => {},
                           summary => {},
                           tags => {},
                           v => {},
                           x => {},
                         },
                       },
                       args_as => {},
                       args_rels => {},
                       caption => 'fix',
                       default_lang => 'fix',
                       defhash_v => 'fix',
                       deps => {
                         _keys => {
                           all       => {},
                           any       => {},
                           code      => {},
                           env       => {},
                           func      => {},
                           none      => {},
                           pkg       => {},
                           prog      => {},
                           tmp_dir   => {},
                           trash_dir => {},
                         },
                       },
                       description => 'fix',
                       entity_date => {},
                       entity_v => {},
                       examples => {
                         _elem_prop => {
                           args => {},
                           argv => {},
                           caption => 'fix',
                           default_lang => 'fix',
                           defhash_v => 'fix',
                           description => 'fix',
                           name => 'fix',
                           result => {},
                           src => {},
                           src_plang => {},
                           status => {},
                           summary => 'fix',
                           tags => 'fix',
                           test => {},
                           v => 'fix',
                           x => 'fix',
                         },
                       },
                       features => {
                         _keys => {
                           check_arg => {},
                           dry_run => {},
                           idempotent => {},
                           immutable => {},
                           pure => {},
                           reverse => {},
                           tx => {},
                         },
                       },
                       is_class_meth => {},
                       is_func => {},
                       is_meth => {},
                       links => {},
                       name => 'fix',
                       result => {
                         _prop => {
                           caption => 'fix',
                           default_lang => 'fix',
                           defhash_v => 'fix',
                           description => 'fix',
                           name => 'fix',
                           partial => {},
                           schema => {},
                           statuses => {
                             _value_prop => { description => {}, schema => {}, summary => {} },
                           },
                           stream => {},
                           summary => 'fix',
                           tags => 'fix',
                           v => 'fix',
                           x => 'fix',
                         },
                       },
                       result_naked => {},
                       summary => 'fix',
                       tags => 'fix',
                       v => 'fix',
                       x => 'fix',
                     },
          _ver    => 1.1,
          summary => "Rinci function metadata",
        },
      ],
      ["hash"],
    ];
    $a->[1][0]{_prop}{args}{_value_prop}{element_meta}{_prop} = $a->[1][0]{_prop};
    $a->[1][0]{_prop}{args}{_value_prop}{meta} = $a->[1][0]{_prop}{args}{_value_prop}{element_meta};
    $a->[1][0]{_prop}{caption} = $a->[1][0]{_prop}{args}{_value_prop}{caption};
    $a->[1][0]{_prop}{default_lang} = $a->[1][0]{_prop}{args}{_value_prop}{default_lang};
    $a->[1][0]{_prop}{defhash_v} = $a->[1][0]{_prop}{args}{_value_prop}{defhash_v};
    $a->[1][0]{_prop}{description} = $a->[1][0]{_prop}{args}{_value_prop}{description};
    $a->[1][0]{_prop}{examples}{_elem_prop}{caption} = $a->[1][0]{_prop}{args}{_value_prop}{caption};
    $a->[1][0]{_prop}{examples}{_elem_prop}{default_lang} = $a->[1][0]{_prop}{args}{_value_prop}{default_lang};
    $a->[1][0]{_prop}{examples}{_elem_prop}{defhash_v} = $a->[1][0]{_prop}{args}{_value_prop}{defhash_v};
    $a->[1][0]{_prop}{examples}{_elem_prop}{description} = $a->[1][0]{_prop}{args}{_value_prop}{description};
    $a->[1][0]{_prop}{examples}{_elem_prop}{name} = $a->[1][0]{_prop}{args}{_value_prop}{name};
    $a->[1][0]{_prop}{examples}{_elem_prop}{summary} = $a->[1][0]{_prop}{args}{_value_prop}{summary};
    $a->[1][0]{_prop}{examples}{_elem_prop}{tags} = $a->[1][0]{_prop}{args}{_value_prop}{tags};
    $a->[1][0]{_prop}{examples}{_elem_prop}{v} = $a->[1][0]{_prop}{args}{_value_prop}{v};
    $a->[1][0]{_prop}{examples}{_elem_prop}{x} = $a->[1][0]{_prop}{args}{_value_prop}{x};
    $a->[1][0]{_prop}{name} = $a->[1][0]{_prop}{args}{_value_prop}{name};
    $a->[1][0]{_prop}{result}{_prop}{caption} = $a->[1][0]{_prop}{args}{_value_prop}{caption};
    $a->[1][0]{_prop}{result}{_prop}{default_lang} = $a->[1][0]{_prop}{args}{_value_prop}{default_lang};
    $a->[1][0]{_prop}{result}{_prop}{defhash_v} = $a->[1][0]{_prop}{args}{_value_prop}{defhash_v};
    $a->[1][0]{_prop}{result}{_prop}{description} = $a->[1][0]{_prop}{args}{_value_prop}{description};
    $a->[1][0]{_prop}{result}{_prop}{name} = $a->[1][0]{_prop}{args}{_value_prop}{name};
    $a->[1][0]{_prop}{result}{_prop}{summary} = $a->[1][0]{_prop}{args}{_value_prop}{summary};
    $a->[1][0]{_prop}{result}{_prop}{tags} = $a->[1][0]{_prop}{args}{_value_prop}{tags};
    $a->[1][0]{_prop}{result}{_prop}{v} = $a->[1][0]{_prop}{args}{_value_prop}{v};
    $a->[1][0]{_prop}{result}{_prop}{x} = $a->[1][0]{_prop}{args}{_value_prop}{x};
    $a->[1][0]{_prop}{summary} = $a->[1][0]{_prop}{args}{_value_prop}{summary};
    $a->[1][0]{_prop}{tags} = $a->[1][0]{_prop}{args}{_value_prop}{tags};
    $a->[1][0]{_prop}{v} = $a->[1][0]{_prop}{args}{_value_prop}{v};
    $a->[1][0]{_prop}{x} = $a->[1][0]{_prop}{args}{_value_prop}{x};
    $a;
  };
  
  1;
  # ABSTRACT: Rinci function metadata
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Sah::SchemaR::rinci::function_meta - Rinci function metadata
  
  =head1 VERSION
  
  This document describes version 1.1.82.2 of Sah::SchemaR::rinci::function_meta (from Perl distribution Sah-Schemas-Rinci), released on 2016-12-26.
  
  =head1 DESCRIPTION
  
  This module is automatically generated by Dist::Zilla::Plugin::Sah::Schemas during distribution build.
  
  A Sah::SchemaR::* module is useful if a client wants to quickly lookup the base type of a schema without having to do any extra resolving. With Sah::Schema::*, one might need to do several lookups if a schema is based on another schema, and so on. Compare for example L<Sah::Schema::poseven> vs L<Sah::SchemaR::poseven>, where in Sah::SchemaR::poseven one can immediately get that the base type is C<int>. Currently L<Perinci::Sub::Complete> uses Sah::SchemaR::* instead of Sah::Schema::* for reduced startup overhead when doing tab completion.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Sah-Schemas-Rinci>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Sah-Schemas-Rinci>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Sah-Schemas-Rinci>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
SAH_SCHEMAR_RINCI_FUNCTION_META

    $main::fatpacked{"Sah/SchemaR/rinci/meta.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SAH_SCHEMAR_RINCI_META';
  package Sah::SchemaR::rinci::meta;
  
  our $DATE = '2016-12-26'; # DATE
  our $VERSION = '1.1.82.2'; # VERSION
  
  our $rschema = do {
    my $a = [
      "hash",
      [
        {
          _prop   => {
                       caption => {},
                       default_lang => {},
                       defhash_v => {},
                       description => {},
                       entity_date => {},
                       entity_v => {},
                       links => {
                         _elem_prop => {
                           caption => 'fix',
                           default_lang => 'fix',
                           defhash_v => 'fix',
                           description => 'fix',
                           name => {},
                           summary => {},
                           tags => {},
                           url => {},
                           v => {},
                           x => {},
                         },
                       },
                       name => 'fix',
                       summary => 'fix',
                       tags => 'fix',
                       v => 'fix',
                       x => 'fix',
                     },
          _ver    => 1.1,
          summary => "Rinci metadata",
        },
      ],
      ["hash"],
    ];
    $a->[1][0]{_prop}{links}{_elem_prop}{caption} = $a->[1][0]{_prop}{caption};
    $a->[1][0]{_prop}{links}{_elem_prop}{default_lang} = $a->[1][0]{_prop}{default_lang};
    $a->[1][0]{_prop}{links}{_elem_prop}{defhash_v} = $a->[1][0]{_prop}{defhash_v};
    $a->[1][0]{_prop}{links}{_elem_prop}{description} = $a->[1][0]{_prop}{description};
    $a->[1][0]{_prop}{name} = $a->[1][0]{_prop}{links}{_elem_prop}{name};
    $a->[1][0]{_prop}{summary} = $a->[1][0]{_prop}{links}{_elem_prop}{summary};
    $a->[1][0]{_prop}{tags} = $a->[1][0]{_prop}{links}{_elem_prop}{tags};
    $a->[1][0]{_prop}{v} = $a->[1][0]{_prop}{links}{_elem_prop}{v};
    $a->[1][0]{_prop}{x} = $a->[1][0]{_prop}{links}{_elem_prop}{x};
    $a;
  };
  
  1;
  # ABSTRACT: Rinci metadata
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Sah::SchemaR::rinci::meta - Rinci metadata
  
  =head1 VERSION
  
  This document describes version 1.1.82.2 of Sah::SchemaR::rinci::meta (from Perl distribution Sah-Schemas-Rinci), released on 2016-12-26.
  
  =head1 DESCRIPTION
  
  This module is automatically generated by Dist::Zilla::Plugin::Sah::Schemas during distribution build.
  
  A Sah::SchemaR::* module is useful if a client wants to quickly lookup the base type of a schema without having to do any extra resolving. With Sah::Schema::*, one might need to do several lookups if a schema is based on another schema, and so on. Compare for example L<Sah::Schema::poseven> vs L<Sah::SchemaR::poseven>, where in Sah::SchemaR::poseven one can immediately get that the base type is C<int>. Currently L<Perinci::Sub::Complete> uses Sah::SchemaR::* instead of Sah::Schema::* for reduced startup overhead when doing tab completion.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Sah-Schemas-Rinci>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Sah-Schemas-Rinci>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Sah-Schemas-Rinci>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
SAH_SCHEMAR_RINCI_META

    $main::fatpacked{"Sah/SchemaR/rinci/result_meta.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SAH_SCHEMAR_RINCI_RESULT_META';
  package Sah::SchemaR::rinci::result_meta;
  
  our $DATE = '2016-12-26'; # DATE
  our $VERSION = '1.1.82.2'; # VERSION
  
  our $rschema = [
    "hash",
    [
      {
        _prop   => {
                     caption => {},
                     cmdline => {},
                     default_lang => {},
                     defhash_v => {},
                     description => {},
                     func => {},
                     len => {},
                     logs => {},
                     name => {},
                     part_len => {},
                     part_start => {},
                     perm_err => {},
                     prev => {},
                     results => {},
                     stream => {},
                     summary => {},
                     tags => {},
                     v => {},
                     x => {},
                   },
        _ver    => 1.1,
        summary => "Rinci envelope result metadata",
      },
    ],
    ["hash"],
  ];
  
  1;
  # ABSTRACT: Rinci envelope result metadata
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Sah::SchemaR::rinci::result_meta - Rinci envelope result metadata
  
  =head1 VERSION
  
  This document describes version 1.1.82.2 of Sah::SchemaR::rinci::result_meta (from Perl distribution Sah-Schemas-Rinci), released on 2016-12-26.
  
  =head1 DESCRIPTION
  
  This module is automatically generated by Dist::Zilla::Plugin::Sah::Schemas during distribution build.
  
  A Sah::SchemaR::* module is useful if a client wants to quickly lookup the base type of a schema without having to do any extra resolving. With Sah::Schema::*, one might need to do several lookups if a schema is based on another schema, and so on. Compare for example L<Sah::Schema::poseven> vs L<Sah::SchemaR::poseven>, where in Sah::SchemaR::poseven one can immediately get that the base type is C<int>. Currently L<Perinci::Sub::Complete> uses Sah::SchemaR::* instead of Sah::Schema::* for reduced startup overhead when doing tab completion.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Sah-Schemas-Rinci>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Sah-Schemas-Rinci>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Sah-Schemas-Rinci>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
SAH_SCHEMAR_RINCI_RESULT_META

    $main::fatpacked{"Sah/Schemas/Rinci.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SAH_SCHEMAS_RINCI';
  package Sah::Schemas::Rinci;
  
  our $DATE = '2016-12-26'; # DATE
  our $VERSION = '1.1.82.2'; # VERSION
  
  1;
  # ABSTRACT: Sah schemas for Rinci
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Sah::Schemas::Rinci - Sah schemas for Rinci
  
  =head1 VERSION
  
  This document describes version 1.1.82.2 of Sah::Schemas::Rinci (from Perl distribution Sah-Schemas-Rinci), released on 2016-12-26.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Sah-Schemas-Rinci>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Sah-Schemas-Rinci>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Sah-Schemas-Rinci>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Sah> - specification
  
  L<Data::Sah>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
SAH_SCHEMAS_RINCI

    $main::fatpacked{"Scalar/Util/Numeric/PP.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SCALAR_UTIL_NUMERIC_PP';
  package Scalar::Util::Numeric::PP;
  
  our $DATE = '2016-01-22'; # DATE
  our $VERSION = '0.04'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(
                         isint
                         isnum
                         isnan
                         isinf
                         isneg
                         isfloat
                 );
  
  sub isint {
      local $_ = shift;
      return 0 unless defined;
      return 1 if /\A\s*[+-]?(?:0|[1-9][0-9]*)\s*\z/s;
      0;
  }
  
  sub isnan($) {
      local $_ = shift;
      return 0 unless defined;
      return 1 if /\A\s*[+-]?nan\s*\z/is;
      0;
  }
  
  sub isinf($) {
      local $_ = shift;
      return 0 unless defined;
      return 1 if /\A\s*[+-]?inf(?:inity)?\s*\z/is;
      0;
  }
  
  sub isneg($) {
      local $_ = shift;
      return 0 unless defined;
      return 1 if /\A\s*-/;
      0;
  }
  
  sub isnum($) {
      local $_ = shift;
      return 0 unless defined;
      return 1 if isint($_);
      return 1 if isfloat($_);
      0;
  }
  
  sub isfloat($) {
      local $_ = shift;
      return 0 unless defined;
      return 1 if /\A\s*[+-]?
                   (?: (?:0|[1-9][0-9]*)(\.[0-9]+)? | (\.[0-9]+) )
                   ([eE][+-]?[0-9]+)?\s*\z/sx && $1 || $2 || $3;
      return 1 if isnan($_) || isinf($_);
      0;
  }
  
  1;
  # ABSTRACT: Pure-perl drop-in replacement/approximation of Scalar::Util::Numeric
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Scalar::Util::Numeric::PP - Pure-perl drop-in replacement/approximation of Scalar::Util::Numeric
  
  =head1 VERSION
  
  This document describes version 0.04 of Scalar::Util::Numeric::PP (from Perl distribution Scalar-Util-Numeric-PP), released on 2016-01-22.
  
  =head1 SYNOPSIS
  
  =head1 DESCRIPTION
  
  This module is written mainly for the convenience of L<Data::Sah>, as a drop-in
  pure-perl replacement for the XS module L<Scalar::Util::Numeric>, in the case
  when Data::Sah needs to generate code that uses PP modules instead of XS ones.
  
  Not all functions from Scalar::Util::Numeric have been provided.
  
  =head1 FUNCTIONS
  
  =head2 isint
  
  =head2 isfloat
  
  =head2 isnum
  
  =head2 isneg
  
  =head2 isinf
  
  =head2 isnan
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Scalar-Util-Numeric-PP>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Scalar-Util-Numeric-PP>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Scalar-Util-Numeric-PP>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Data::Sah>
  
  L<Scalar::Util::Numeric>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
SCALAR_UTIL_NUMERIC_PP

    $main::fatpacked{"String/Elide/Parts.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'STRING_ELIDE_PARTS';
  package String::Elide::Parts;
  
  our $DATE = '2017-01-29'; # DATE
  our $VERSION = '0.07'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(elide);
  
  sub _elide_part {
      my ($str, $len, $marker, $truncate) = @_;
  
      my $len_marker = length($marker);
      if ($len <= $len_marker) {
          return substr($marker, 0, $len);
      }
  
      if ($truncate eq 'left') {
          return $marker . substr($str, length($str) - $len+$len_marker);
      } elsif ($truncate eq 'middle') {
          my $left  = substr($str, 0,
                             ($len-$len_marker)/2);
          my $right = substr($str,
                             length($str) - ($len-$len_marker-length($left)));
          return $left . $marker . $right;
      } elsif ($truncate eq 'ends') {
          if ($len <= 2*$len_marker) {
              return substr($marker . $marker, 0, $len);
          }
          return $marker . substr($str, (length($str)-$len)/2 + $len_marker,
                                  $len-2*$len_marker) . $marker;
      } else { # right
          return substr($str, 0, $len-$len_marker) . $marker;
      }
  }
  
  sub elide {
      my ($str, $len, $opts) = @_;
  
      $opts //= {};
      my $truncate  = $opts->{truncate} // 'right';
      my $marker = $opts->{marker} // '..';
      my $default_prio = $opts->{default_prio} // 1;
  
      # split into parts by priority
      my @parts;
      my @parts_attrs;
      while ($str =~ m#<elspan([^>]*)>(.*?)</elspan>|(.*?)(?=<elspan)|(.*)#gs) {
          if (defined $1) {
              next unless length $2;
              push @parts, $2;
              push @parts_attrs, $1;
          } elsif (defined $3) {
              next unless length $3;
              push @parts, $3;
              push @parts_attrs, undef;
          } elsif (defined $4) {
              next unless length $4;
              push @parts, $4;
              push @parts_attrs, undef;
          }
      }
      return "" unless @parts && $len > 0;
      for my $i (0..@parts-1) {
          if (defined $parts_attrs[$i]) {
              my $attrs = {};
              $attrs->{truncate} = $1 // $2
                  if $parts_attrs[$i] =~ /\btruncate=(?:"([^"]*)"|(\S+))/;
              $attrs->{marker} = $1 // $2
                  if $parts_attrs[$i] =~ /\bmarker=(?:"([^"]*)"|(\S+))/;
              $attrs->{prio} = $1 // $2
                  if $parts_attrs[$i] =~ /\bprio(?:rity)?=(?:"([^"]*)"|(\S+))/;
              $parts_attrs[$i] = $attrs;
          } else {
              $parts_attrs[$i] = {prio=>$default_prio};
          }
      }
  
      #use DD; dd \@parts; dd \@parts_attrs;
  
      # elide and truncate prio by prio until str is short enough
    PRIO:
      while (1) {
          # (re)calculate total len of all parts
          my $all_parts_len = 0;
          $all_parts_len += length($_) for @parts;
  
          # total len of all parts is short enough, we're done
          if ($all_parts_len <= $len) {
              return join("", @parts);
          }
  
          # we still need to elide some parts. first collect part indexes that
          # have the current largest priority.
          my $highest_prio;
          for (@parts_attrs) {
              $highest_prio = $_->{prio} if !defined($highest_prio) ||
                  $highest_prio < $_->{prio};
          }
          my @high_indexes;
          my $high_parts_len = 0;
          for my $i (0..$#parts_attrs) {
              if ($parts_attrs[$i]{prio} == $highest_prio) {
                  $high_parts_len += length $parts[$i];
                  push @high_indexes, $i;
              }
          }
  
          if ($all_parts_len - $high_parts_len >= $len) {
              # we need to fully eliminate all the highest parts part then search
              # for another set of parts
              for (reverse @high_indexes) {
                  splice @parts, $_, 1;
                  splice @parts_attrs, $_, 1;
                  next PRIO;
              }
          }
  
          # elide all to-be-elided parts equally
  
          # after this position, must elide a total of this number of characters
          # after this position
          my @must_elide_total_len_after_this;
          my $tot_to_elide = $all_parts_len - $len;
          for my $i (0..$#high_indexes) {
              $must_elide_total_len_after_this[$i] =
                  int( ($i+1)/@high_indexes * $tot_to_elide );
          }
          #use DD; dd \@must_elide_total_len_after_this;
  
          # calculate how many characters to truncate for each part
          my $tot_already_elided = 0;
          my $tot_still_to_elide = 0;
          for my $i (reverse 0..$#high_indexes) {
              my $idx = $high_indexes[$i];
              my $part_len = length $parts[$idx];
              my $to_elide = $must_elide_total_len_after_this[$#high_indexes - $i] -
                  $tot_already_elided;
              #say "D:[", ($i+1), "/", ~~@high_indexes, "] must_elide_total_len_after_this=", $must_elide_total_len_after_this[$#high_indexes-$i], " to_elide=$to_elide";
              if ($to_elide <= 0) {
                  # leave this part alone
                  #say "D:  leave alone <$parts[$idx]>";
              } elsif ($part_len <= $to_elide) {
                  # we need to eliminate this part
                  #say "D:  eliminate <$parts[$idx]>";
                  splice @parts, $idx, 1;
                  splice @parts_attrs, $idx, 1;
                  $tot_already_elided += $part_len;
                  $tot_still_to_elide += ($to_elide - $part_len);
                  #say "D:  tot_already_elided=$tot_already_elided, tot_still_to_elide=$tot_still_to_elide";
              } else {
                  #say "D:  elide <$parts[$idx]>";
                  $parts[$idx] = _elide_part(
                      $parts[$idx],
                      $part_len - $to_elide,
                      $parts_attrs[$idx]{marker} // $marker,
                      $parts_attrs[$idx]{truncate} // $truncate,
                  );
                  #say "D:  elide result <$parts[$idx]>";
                  $tot_already_elided += $to_elide;
                  $tot_still_to_elide = 0;
                  #say "D:  tot_already_elided=$tot_already_elided, tot_still_to_elide=$tot_still_to_elide";
              }
          }
  
      } # while 1
  }
  
  1;
  # ABSTRACT: Elide a string with multiple parts of different priorities
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  String::Elide::Parts - Elide a string with multiple parts of different priorities
  
  =head1 VERSION
  
  This document describes version 0.07 of String::Elide::Parts (from Perl distribution String-Elide-Parts), released on 2017-01-29.
  
  =head1 SYNOPSIS
  
   use String::Elide::Parts qw(elide);
  
  Eliding string with no parts:
  
   my $text = "this is your brain";
   #                                            0----5---10---15---20
   elide($text, 16);                       # -> "this is your ..."
   elide($text, 16, {truncate=>"left"});   # -> "...is your brain"
   elide($text, 16, {truncate=>"middle"}); # -> "this is... brain"
   elide($text, 16, {truncate=>"ends"});   # -> "... is your b..."
  
   elide($text, 16, {marker=>"--"});       # -> "this is your b--"
  
  Eliding string with multiple parts marked with markup. We want to elide URL
  first (prio=3), then the C<Downloading> text (prio=2), then the speed (prio=1,
  default):
  
   $text = "<elspan prio=2>Downloading</elspan> <elspan prio=3 truncate=middle>http://www.example.com/somefile</elspan> 320.0k/5.5M";
   #                      0----5---10---15---20---25---30---35---40---45---50---55---60
   elide($text, 56); # -> "Downloading http://www.example.com/somefile 320.0k/5.5M"
   elide($text, 55); # -> "Downloading http://www.example.com/somefile 320.0k/5.5M"
   elide($text, 50); # -> "Downloading http://www.e..com/somefile 320.0k/5.5M"
   elide($text, 45); # -> "Downloading http://ww..m/somefile 320.0k/5.5M"
   elide($text, 40); # -> "Downloading http://..omefile 320.0k/5.5M"
   elide($text, 35); # -> "Downloading http..efile 320.0k/5.5M"
   elide($text, 30); # -> "Downloading ht..le 320.0k/5.5M"
   elide($text, 25); # -> "Downloading . 320.0k/5.5M"
   elide($text, 24); # -> "Downloading  320.0k/5.5M"
   elide($text, 23); # -> "Download..  320.0k/5.5M"
   elide($text, 20); # -> "Downl..  320.0k/5.5M"
   elide($text, 15); # -> "..  320.0k/5.5M"
   elide($text, 13); # -> "  320.0k/5.5M"
   elide($text, 10); # -> " 320.0k/.."
   elide($text,  5); # -> " 32.."
   #                      0----5---10---15---20---25---30---35---40---45---50---55---60
  
  =head1 DESCRIPTION
  
  String::Elide::Parts is similar to other string eliding modules, with one main
  difference: it accepts string marked with parts of different priorities. The
  goal is to retain more important information as much as possible when length is
  reduced.
  
  =head1 FUNCTIONS
  
  =head2 elide($str, $len[, \%opts]) => str
  
  Elide a string if length exceeds C<$len>.
  
  String can be marked with C<< <elspan prio=N truncate=T marker=M>...</elspan> >>
  so there can be multiple parts with different priorities and truncate direction.
  The default priority is 1. You can mark less important strings with higher
  priority to let it be elided first. The markup will be removed from the string
  before eliding.
  
  Known options:
  
  =over
  
  =item * marker => str (default: '..')
  
  =item * truncate => 'left'|'middle'|'middle'|'ends' (default: 'right')
  
  =item * default_prio => int (default: 1)
  
  =back
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/String-Elide-Parts>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-String-Elide-Parts>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=String-Elide-Parts>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  =head2 Similar elide modules
  
  L<Text::Elide> is simple, does not have many options, and elides at word
  boundaries.
  
  L<String::Truncate> has similar interface like String::Elide::Parts and has some
  options.
  
  L<String::Elide::Lines> is based on this module but works on a line-basis.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
STRING_ELIDE_PARTS

    $main::fatpacked{"String/Indent.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'STRING_INDENT';
  package String::Indent;
  
  our $DATE = '2015-03-06'; # DATE
  our $VERSION = '0.03'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         indent
                 );
  
  sub indent {
      my ($indent, $str, $opts) = @_;
      $opts //= {};
  
      my $ibl = $opts->{indent_blank_lines} // 1;
      my $fli = $opts->{first_line_indent} // $indent;
      my $sli = $opts->{subsequent_lines_indent} // $indent;
      #say "D:ibl=<$ibl>, fli=<$fli>, sli=<$sli>";
  
      my $i = 0;
      $str =~ s/^([^\r\n]?)/$i++; !$ibl && !$1 ? "$1" : $i==1 ? "$fli$1" : "$sli$1"/egm;
      $str;
  }
  
  1;
  # ABSTRACT: String indenting routines
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  String::Indent - String indenting routines
  
  =head1 VERSION
  
  This document describes version 0.03 of String::Indent (from Perl distribution String-Indent), released on 2015-03-06.
  
  =head1 FUNCTIONS
  
  =head2 indent($indent, $str, \%opts) => STR
  
  Indent every line in $str with $indent. Example:
  
   indent('  ', "one\ntwo\nthree") # "  one\n  two\n  three"
  
  %opts is optional. Known options:
  
  =over 4
  
  =item * indent_blank_lines => bool (default: 1)
  
  If set to false, does not indent blank lines (i.e., lines containing only zero
  or more whitespaces).
  
  =item * first_line_indent => str
  
  If set, then the first line will be set to this instead of the normal indent.
  
  =item * subsequent_lines_indent => str
  
  If set, then all lines but the first line will be set to this instead of the
  normal indent.
  
  =back
  
  =head1 SEE ALSO
  
  L<Indent::String>, L<String::Nudge>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/String-Indent>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-String-Indent>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=String-Indent>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
STRING_INDENT

    $main::fatpacked{"String/LineNumber.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'STRING_LINENUMBER';
  package String::LineNumber;
  
  our $DATE = '2014-12-10'; # DATE
  our $VERSION = '0.01'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         linenum
                 );
  
  sub linenum {
      my ($str, $opts) = @_;
      $opts //= {};
      $opts->{width}      //= 4;
      $opts->{zeropad}    //= 0;
      $opts->{skip_empty} //= 1;
  
      my $i = 0;
      $str =~ s/^(([\t ]*\S)?.*)/
          sprintf(join("",
                       "%",
                       ($opts->{zeropad} && !($opts->{skip_empty}
                                                  && !defined($2)) ? "0" : ""),
                       $opts->{width}, "s",
                       "|%s"),
                  ++$i && $opts->{skip_empty} && !defined($2) ? "" : $i,
                  $1)/meg;
  
      $str;
  }
  
  1;
  # ABSTRACT: Give line number to each line of string
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  String::LineNumber - Give line number to each line of string
  
  =head1 VERSION
  
  This document describes version 0.01 of String::LineNumber (from Perl distribution String-LineNumber), released on 2014-12-10.
  
  =head1 FUNCTIONS
  
  =head2 linenum($str, \%opts) => STR
  
  Add line numbers. For example:
  
       1|line1
       2|line2
        |
       4|line4
  
  Known options:
  
  =over 4
  
  =item * width => INT (default: 4)
  
  =item * zeropad => BOOL (default: 0)
  
  If turned on, will output something like:
  
    0001|line1
    0002|line2
        |
    0004|line4
  
  =item * skip_empty => BOOL (default: 1)
  
  If set to false, keep printing line number even if line is empty:
  
       1|line1
       2|line2
       3|
       4|line4
  
  =back
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/String-LineNumber>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-String-LineNumber>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=String-LineNumber>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
STRING_LINENUMBER

    $main::fatpacked{"String/PerlQuote.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'STRING_PERLQUOTE';
  package String::PerlQuote;
  
  our $DATE = '2016-10-07'; # DATE
  our $VERSION = '0.02'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         single_quote
                         double_quote
                 );
  
  # BEGIN COPY PASTE FROM Data::Dump
  my %esc = (
      "\a" => "\\a",
      "\b" => "\\b",
      "\t" => "\\t",
      "\n" => "\\n",
      "\f" => "\\f",
      "\r" => "\\r",
      "\e" => "\\e",
  );
  
  # put a string value in double quotes
  sub double_quote {
    local($_) = $_[0];
    # If there are many '"' we might want to use qq() instead
    s/([\\\"\@\$])/\\$1/g;
    return qq("$_") unless /[^\040-\176]/;  # fast exit
  
    s/([\a\b\t\n\f\r\e])/$esc{$1}/g;
  
    # no need for 3 digits in escape for these
    s/([\0-\037])(?!\d)/sprintf('\\%o',ord($1))/eg;
  
    s/([\0-\037\177-\377])/sprintf('\\x%02X',ord($1))/eg;
    s/([^\040-\176])/sprintf('\\x{%X}',ord($1))/eg;
  
    return qq("$_");
  }
  # END COPY PASTE FROM Data::Dump
  
  sub single_quote {
    local($_) = $_[0];
    s/([\\'])/\\$1/g;
    return qq('$_');
  }
  1;
  # ABSTRACT: Quote a string as Perl does
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  String::PerlQuote - Quote a string as Perl does
  
  =head1 VERSION
  
  This document describes version 0.02 of String::PerlQuote (from Perl distribution String-PerlQuote), released on 2016-10-07.
  
  =head1 FUNCTIONS
  
  =head2 double_quote($str) => STR
  
  Quote or encode C<$str> to the Perl double quote (C<">) literal representation
  of the string. Example:
  
   say double_quote("a");        # => "a"     (with the quotes)
   say double_quote("a\n");      # => "a\n"
   say double_quote('"');        # => "\""
   say double_quote('$foo');     # => "\$foo"
  
  This code is taken from C<quote()> in L<Data::Dump>. Maybe I didn't look more
  closely, but I couldn't a module that provides a function to do something like
  this. L<String::Escape>, for example, provides C<qqbackslash> but it does not
  escape C<$>.
  
  =head2 single_quote($str) => STR
  
  Like C<double_quote> but will produce a Perl single quote literal representation
  instead of the double quote ones. In single quotes, only literal backslash C<\>
  and single quote character C<'> are escaped, the rest are displayed as-is, so
  the result might span multiple lines or contain other non-printable characters.
  
   say single_quote("Mom's");    # => 'Mom\'s' (with the quotes)
   say single_quote("a\\");      # => 'a\\"
   say single_quote('"');        # => '"'
   say single_quote("\$foo");    # => '$foo'
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/String-PerlQuote>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-String-PerlQuote>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=String-PerlQuote>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
STRING_PERLQUOTE

    $main::fatpacked{"String/ShellQuote.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'STRING_SHELLQUOTE';
  # $Id: ShellQuote.pm,v 1.11 2010-06-11 20:08:57 roderick Exp $
  #
  # Copyright (c) 1997 Roderick Schertler.  All rights reserved.  This
  # program is free software; you can redistribute it and/or modify it
  # under the same terms as Perl itself.
  
  =head1 NAME
  
  String::ShellQuote - quote strings for passing through the shell
  
  =head1 SYNOPSIS
  
      $string = shell_quote @list;
      $string = shell_quote_best_effort @list;
      $string = shell_comment_quote $string;
  
  =head1 DESCRIPTION
  
  This module contains some functions which are useful for quoting strings
  which are going to pass through the shell or a shell-like object.
  
  =over
  
  =cut
  
  package String::ShellQuote;
  
  use strict;
  use vars qw($VERSION @ISA @EXPORT);
  
  require Exporter;
  
  $VERSION	= '1.04';
  @ISA		= qw(Exporter);
  @EXPORT		= qw(shell_quote shell_quote_best_effort shell_comment_quote);
  
  sub croak {
      require Carp;
      goto &Carp::croak;
  }
  
  sub _shell_quote_backend {
      my @in = @_;
      my @err = ();
  
      if (0) {
  	require RS::Handy;
  	print RS::Handy::data_dump(\@in);
      }
  
      return \@err, '' unless @in;
  
      my $ret = '';
      my $saw_non_equal = 0;
      foreach (@in) {
  	if (!defined $_ or $_ eq '') {
  	    $_ = "''";
  	    next;
  	}
  
  	if (s/\x00//g) {
  	    push @err, "No way to quote string containing null (\\000) bytes";
  	}
  
      	my $escape = 0;
  
  	# = needs quoting when it's the first element (or part of a
  	# series of such elements), as in command position it's a
  	# program-local environment setting
  
  	if (/=/) {
  	    if (!$saw_non_equal) {
  	    	$escape = 1;
  	    }
  	}
  	else {
  	    $saw_non_equal = 1;
  	}
  
  	if (m|[^\w!%+,\-./:=@^]|) {
  	    $escape = 1;
  	}
  
  	if ($escape
  		|| (!$saw_non_equal && /=/)) {
  
  	    # ' -> '\''
      	    s/'/'\\''/g;
  
  	    # make multiple ' in a row look simpler
  	    # '\'''\'''\'' -> '"'''"'
      	    s|((?:'\\''){2,})|q{'"} . (q{'} x (length($1) / 4)) . q{"'}|ge;
  
  	    $_ = "'$_'";
  	    s/^''//;
  	    s/''$//;
  	}
      }
      continue {
  	$ret .= "$_ ";
      }
  
      chop $ret;
      return \@err, $ret;
  }
  
  =item B<shell_quote> [I<string>]...
  
  B<shell_quote> quotes strings so they can be passed through the shell.
  Each I<string> is quoted so that the shell will pass it along as a
  single argument and without further interpretation.  If no I<string>s
  are given an empty string is returned.
  
  If any I<string> can't be safely quoted B<shell_quote> will B<croak>.
  
  =cut
  
  sub shell_quote {
      my ($rerr, $s) = _shell_quote_backend @_;
  
      if (@$rerr) {
      	my %seen;
      	@$rerr = grep { !$seen{$_}++ } @$rerr;
  	my $s = join '', map { "shell_quote(): $_\n" } @$rerr;
  	chomp $s;
  	croak $s;
      }
      return $s;
  }
  
  =item B<shell_quote_best_effort> [I<string>]...
  
  This is like B<shell_quote>, excpet if the string can't be safely quoted
  it does the best it can and returns the result, instead of dying.
  
  =cut
  
  sub shell_quote_best_effort {
      my ($rerr, $s) = _shell_quote_backend @_;
  
      return $s;
  }
  
  =item B<shell_comment_quote> [I<string>]
  
  B<shell_comment_quote> quotes the I<string> so that it can safely be
  included in a shell-style comment (the current algorithm is that a sharp
  character is placed after any newlines in the string).
  
  This routine might be changed to accept multiple I<string> arguments
  in the future.  I haven't done this yet because I'm not sure if the
  I<string>s should be joined with blanks ($") or nothing ($,).  Cast
  your vote today!  Be sure to justify your answer.
  
  =cut
  
  sub shell_comment_quote {
      return '' unless @_;
      unless (@_ == 1) {
  	croak "Too many arguments to shell_comment_quote "
  	    	    . "(got " . @_ . " expected 1)";
      }
      local $_ = shift;
      s/\n/\n#/g;
      return $_;
  }
  
  1;
  
  __END__
  
  =back
  
  =head1 EXAMPLES
  
      $cmd = 'fuser 2>/dev/null ' . shell_quote @files;
      @pids = split ' ', `$cmd`;
  
      print CFG "# Configured by: ",
  		shell_comment_quote($ENV{LOGNAME}), "\n";
  
  =head1 BUGS
  
  Only Bourne shell quoting is supported.  I'd like to add other shells
  (particularly cmd.exe), but I'm not familiar with them.  It would be a
  big help if somebody supplied the details.
  
  =head1 AUTHOR
  
  Roderick Schertler <F<roderick@argon.org>>
  
  =head1 SEE ALSO
  
  perl(1).
  
  =cut
STRING_SHELLQUOTE

    $main::fatpacked{"String/Wildcard/Bash.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'STRING_WILDCARD_BASH';
  package String::Wildcard::Bash;
  
  use 5.010001;
  use strict;
  use warnings;
  
  our $VERSION = '0.03'; # VERSION
  
  use Exporter;
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(
                         $RE_WILDCARD_BASH
                         contains_wildcard
                         convert_wildcard_to_sql
                 );
  
  # note: order is important here, brace encloses the other
  our $RE_WILDCARD_BASH =
      qr(
            # non-escaped brace expression, with at least one comma
            (?P<brace>
                (?<!\\)(?:\\\\)*\{
                (?:           \\\\ | \\\{ | \\\} | [^\\\{\}] )*
                (?:, (?:  \\\\ | \\\{ | \\\} | [^\\\{\}] )* )+
                (?<!\\)(?:\\\\)*\}
            )
        |
            # non-escaped brace expression, to catch * or ? or [...] inside so
            # they don't go to below pattern, because bash doesn't consider them
            # wildcards, e.g. '/{et?,us*}' expands to '/etc /usr', but '/{et?}'
            # doesn't expand at all to /etc.
            (?P<braceno>
                (?<!\\)(?:\\\\)*\{
                (?:           \\\\ | \\\{ | \\\} | [^\\\{\}] )*
                (?<!\\)(?:\\\\)*\}
            )
        |
            (?P<class>
                # non-empty, non-escaped character class
                (?<!\\)(?:\\\\)*\[
                (?:  \\\\ | \\\[ | \\\] | [^\\\[\]] )+
                (?<!\\)(?:\\\\)*\]
            )
        |
            (?P<joker>
                # non-escaped * and ?
                (?<!\\)(?:\\\\)*[*?]
            )
        |
            (?P<sql_wc>
                # non-escaped % and ?
                (?<!\\)(?:\\\\)*[%_]
            )
        )ox;
  
  sub contains_wildcard {
      my $str = shift;
  
      while ($str =~ /$RE_WILDCARD_BASH/go) {
          my %m = %+;
          return 1 if $m{brace} || $m{class} || $m{joker};
      }
      0;
  }
  
  sub convert_wildcard_to_sql {
      my $str = shift;
  
      $str =~ s/$RE_WILDCARD_BASH/
          if ($+{joker}) {
              if ($+{joker} eq '*') {
                  "%";
              } else {
                  "_";
              }
          } elsif ($+{sql_wc}) {
              "\\$+{sql_wc}";
          } else {
              $&;
          }
      /eg;
  
      $str;
  }
  
  1;
  # ABSTRACT: Bash wildcard string routines
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  String::Wildcard::Bash - Bash wildcard string routines
  
  =head1 VERSION
  
  This document describes version 0.03 of String::Wildcard::Bash (from Perl distribution String-Wildcard-Bash), released on 2015-09-10.
  
  =head1 SYNOPSIS
  
      use String::Wildcard::Bash qw(
          $RE_WILDCARD_BASH
          contains_wildcard
          convert_wildcard_to_sql
      );
  
      say 1 if contains_wildcard(""));      # -> 0
      say 1 if contains_wildcard("ab*"));   # -> 1
      say 1 if contains_wildcard("ab\\*")); # -> 0
  
      say convert_wildcard_to_sql("foo*");  # -> "foo%"
  
  =head1 DESCRIPTION
  
  =for Pod::Coverage ^(qqquote)$
  
  =head1 FUNCTIONS
  
  =head2 contains_wildcard($str) => bool
  
  Return true if C<$str> contains wildcard pattern. Wildcard patterns include C<*>
  (meaning zero or more characters), C<?> (exactly one character), C<[...]>
  (character class), C<{...,}> (brace expansion). Can handle escaped/backslash
  (e.g. C<foo\*> does not contain wildcard, it's C<foo> followed by a literal
  asterisk C<*>).
  
  Aside from wildcard, bash does other types of expansions/substitutions too, but
  these are not considered wildcard. These include tilde expansion (e.g. C<~>
  becomes C</home/alice>), parameter and variable expansion (e.g. C<$0> and
  C<$HOME>), arithmetic expression (e.g. C<$[1+2]>), history (C<!>), and so on.
  
  Although this module has 'Bash' in its name, this set of wildcards should be
  applicable to other Unix shells. Haven't checked completely though.
  
  =head2 convert_wildcard_to_sql($str) => str
  
  Convert bash wildcard to SQL. This includes:
  
  =over
  
  =item * converting unescaped C<*> to C<%>
  
  =item * converting unescaped C<?> to C<_>
  
  =item * escaping unescaped <%>
  
  =item * escaping unescaped C<_>
  
  =back
  
  Unsupported constructs currently will be passed as-is.
  
  =head1 SEE ALSO
  
  L<Regexp::Wildcards> to convert a string with wildcard pattern to equivalent
  regexp pattern. Can handle Unix wildcards as well as SQL and DOS/Win32. As of
  this writing (v1.05), it does not handle character class (C<[...]>) and
  interprets brace expansion differently than bash.
  
  Other C<String::Wildcard::*> modules.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/String-Wildcard-Bash>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-String-Wildcard-Bash>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=String-Wildcard-Bash>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
STRING_WILDCARD_BASH

    $main::fatpacked{"Sub/Defer.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SUB_DEFER';
  package Sub::Defer;
  
  use Moo::_strictures;
  use Exporter qw(import);
  use Moo::_Utils qw(_getglob _install_coderef);
  use Scalar::Util qw(weaken);
  use Carp qw(croak);
  
  our $VERSION = '2.002004';
  $VERSION = eval $VERSION;
  
  our @EXPORT = qw(defer_sub undefer_sub undefer_all);
  our @EXPORT_OK = qw(undefer_package defer_info);
  
  our %DEFERRED;
  
  sub undefer_sub {
    my ($deferred) = @_;
    my ($target, $maker, $undeferred_ref) = @{
      $DEFERRED{$deferred}||return $deferred
    };
    return ${$undeferred_ref}
      if ${$undeferred_ref};
    ${$undeferred_ref} = my $made = $maker->();
  
    # make sure the method slot has not changed since deferral time
    if (defined($target) && $deferred eq *{_getglob($target)}{CODE}||'') {
      no warnings 'redefine';
  
      # I believe $maker already evals with the right package/name, so that
      # _install_coderef calls are not necessary --ribasushi
      *{_getglob($target)} = $made;
    }
    $DEFERRED{$made} = $DEFERRED{$deferred};
    weaken $DEFERRED{$made}
      unless $target;
  
    return $made;
  }
  
  sub undefer_all {
    undefer_sub($_) for keys %DEFERRED;
    return;
  }
  
  sub undefer_package {
    my $package = shift;
    undefer_sub($_)
      for grep {
        my $name = $DEFERRED{$_} && $DEFERRED{$_}[0];
        $name && $name =~ /^${package}::[^:]+$/
      } keys %DEFERRED;
    return;
  }
  
  sub defer_info {
    my ($deferred) = @_;
    my $info = $DEFERRED{$deferred||''} or return undef;
    [ @$info ];
  }
  
  sub defer_sub {
    my ($target, $maker, $options) = @_;
    my $package;
    my $subname;
    ($package, $subname) = $target =~ /^(.*)::([^:]+)$/
      or croak "$target is not a fully qualified sub name!"
      if $target;
    $package ||= $options && $options->{package} || caller;
    my @attributes = @{$options && $options->{attributes} || []};
    my $deferred;
    my $undeferred;
    my $deferred_info = [ $target, $maker, \$undeferred ];
    if (@attributes || $target && !Moo::_Utils::_CAN_SUBNAME) {
      my $code
        =  q[#line ].(__LINE__+2).q[ "].__FILE__.qq["\n]
        . qq[package $package;\n]
        . ($target ? "sub $subname" : '+sub') . join(' ', map ":$_", @attributes)
        . q[ {
          package Sub::Defer;
          # uncoverable subroutine
          # uncoverable statement
          $undeferred ||= undefer_sub($deferred_info->[3]);
          goto &$undeferred; # uncoverable statement
          $undeferred; # fake lvalue return
        }]."\n"
        . ($target ? "\\&$subname" : '');
      my $e;
      $deferred = do {
        no warnings qw(redefine closure);
        local $@;
        eval $code or $e = $@; # uncoverable branch true
      };
      die $e if defined $e; # uncoverable branch true
    }
    else {
      # duplicated from above
      $deferred = sub {
        $undeferred ||= undefer_sub($deferred_info->[3]);
        goto &$undeferred;
      };
      _install_coderef($target, $deferred)
        if $target;
    }
    weaken($deferred_info->[3] = $deferred);
    weaken($DEFERRED{$deferred} = $deferred_info);
    return $deferred;
  }
  
  sub CLONE {
    %DEFERRED = map { defined $_ && $_->[3] ? ($_->[3] => $_) : () } values %DEFERRED;
    foreach my $info (values %DEFERRED) {
      weaken($info)
        unless $info->[0] && ${$info->[2]};
    }
  }
  
  1;
  __END__
  
  =head1 NAME
  
  Sub::Defer - defer generation of subroutines until they are first called
  
  =head1 SYNOPSIS
  
   use Sub::Defer;
  
   my $deferred = defer_sub 'Logger::time_since_first_log' => sub {
      my $t = time;
      sub { time - $t };
   };
  
    Logger->time_since_first_log; # returns 0 and replaces itself
    Logger->time_since_first_log; # returns time - $t
  
  =head1 DESCRIPTION
  
  These subroutines provide the user with a convenient way to defer creation of
  subroutines and methods until they are first called.
  
  =head1 SUBROUTINES
  
  =head2 defer_sub
  
   my $coderef = defer_sub $name => sub { ... };
  
  This subroutine returns a coderef that encapsulates the provided sub - when
  it is first called, the provided sub is called and is -itself- expected to
  return a subroutine which will be goto'ed to on subsequent calls.
  
  If a name is provided, this also installs the sub as that name - and when
  the subroutine is undeferred will re-install the final version for speed.
  
  Exported by default.
  
  =head2 undefer_sub
  
   my $coderef = undefer_sub \&Foo::name;
  
  If the passed coderef has been L<deferred|/defer_sub> this will "undefer" it.
  If the passed coderef has not been deferred, this will just return it.
  
  If this is confusing, take a look at the example in the L</SYNOPSIS>.
  
  Exported by default.
  
  =head2 undefer_all
  
   undefer_all();
  
  This will undefer all deferred subs in one go.  This can be very useful in a
  forking environment where child processes would each have to undefer the same
  subs.  By calling this just before you start forking children you can undefer
  all currently deferred subs in the parent so that the children do not have to
  do it.  Note this may bake the behavior of some subs that were intended to
  calculate their behavior later, so it shouldn't be used midway through a
  module load or class definition.
  
  Exported by default.
  
  =head2 undefer_package
  
    undefer_package($package);
  
  This undefers all deferred subs in a package.
  
  Not exported by default.
  
  =head1 SUPPORT
  
  See L<Moo> for support and contact information.
  
  =head1 AUTHORS
  
  See L<Moo> for authors.
  
  =head1 COPYRIGHT AND LICENSE
  
  See L<Moo> for the copyright and license.
  
  =cut
SUB_DEFER

    $main::fatpacked{"Sub/Delete.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SUB_DELETE';
  use 5.008003;
  
  package Sub::Delete;
  
  $VERSION = '1.00002';
  @EXPORT = delete_sub;
  
use Exporter 5.57 'import';
  use constant point0 => 0+$] eq 5.01;
  
  # This sub must come before any lexical vars.
  sub strict_eval($) {
   local %^H if point0;
   local *@;
   use#
    strict 'vars';
   local $SIG{__WARN__} = sub {};
   eval shift
  }
  
  my %sigils = qw( SCALAR $  ARRAY @  HASH % );
  
  sub delete_sub {
  	my $sub = shift;
  	my($stashname, $key) = $sub =~ /(.*::)((?:(?!::).)*)\z/s
  		? ($1,$2) : (caller()."::", $sub);
  	exists +(my $stash = \%$stashname)->{$key} or return;
  	ref $stash->{$key} eq 'SCALAR' and  # perl5.10 constant
  		delete $stash->{$key}, return;
  	my $globname = "$stashname$key"; 
  	my $glob = *$globname; # autovivify the glob in case future perl
  	defined *$glob{CODE} or return;  # versions add new funny stuff
  	my $check_importedness
  	 = $stashname =~ /^(?:(?!\d)\w*(?:::\w*)*)\z/
  	   && $key    =~ /^(?!\d)\w+\z/;
  	my %imported_slots;
  	my $package;
  	if($check_importedness) {
  		$package = substr $stashname, 0, -2;
  		for (qw "SCALAR ARRAY HASH") {
  			defined *$glob{$_} or next;
  			$imported_slots{$_} = strict_eval
  			  "package $package; 0 && $sigils{$_}$key; 1"
  		}
  	}
          delete $stash->{$key};
  	keys %imported_slots == 1 and exists $imported_slots{SCALAR}
  	 and !$imported_slots{SCALAR} and Internals'SvREFCNT $$glob =>== 1
  	 and !defined *$glob{IO} and !defined *$glob{FORMAT}
  	 and return; # empty glob
  	my $newglob = \*$globname;
  	local *alias = *$newglob;
  	defined *$glob{$_} and (
  	 !$check_importedness || $imported_slots{$_}
  	  ? *$newglob
  	  : *alias
  	) = *$glob{$_}
  		for qw "SCALAR ARRAY HASH";
  	defined *$glob{$_} and *$newglob = *$glob{$_}
  		for qw "IO FORMAT";
  	return # nothing;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  Sub::Delete - Perl module enabling one to delete subroutines
  
  =head1 VERSION
  
  1.00002
  
  =head1 SYNOPSIS
  
      use Sub::Delete;
      sub foo {}
      delete_sub 'foo';
      eval 'foo();1' or die; # dies
  
  =head1 DESCRIPTION
  
  This module provides one function, C<delete_sub>, that deletes the
  subroutine whose name is passed to it. (To load the module without
  importing the function, write S<C<use Sub::Delete();>>.)
  
  This does more than simply undefine
  the subroutine in the manner of C<undef &foo>, which leaves a stub that
  can trigger AUTOLOAD (and, consequently, won't work for deleting methods).
  The subroutine is completely obliterated from the
  symbol table (though there may be
  references to it elsewhere, including in compiled code).
  
  =head1 PREREQUISITES
  
  This module requires L<perl> 5.8.3 or higher.
  
  =head1 LIMITATIONS
  
  If you take a reference to a glob containing a subroutine, and then delete
  the subroutine with C<delete_sub>, you will find that the glob you 
  referenced still has a subroutine in it. This is because C<delete_sub>
  removes a glob, replaces it with another, and then copies the contents of
  the old glob into the new one, except for the C<CODE> slot. (This is nearly
  impossible to fix without breaking constant::lexical.)
  
  =head1 BUGS
  
  If you find any bugs, please report them to the author via e-mail.
  
  =head1 AUTHOR & COPYRIGHT
  
  Copyright (C) 2008-10 Father Chrysostomos (sprout at, um, cpan dot org)
  
  This program is free software; you may redistribute or modify it (or both)
  under the same terms as perl.
  
  =head1 SEE ALSO
  
  L<perltodo>, which has C<delete &sub> listed as a possible future feature
  
  L<Symbol::Glob> and L<Symbol::Util>, both of which predate this module (but
  I only discovered them recently), and which allow one to delete any
  arbitrary slot from a glob. Neither of them takes perl 5.10 constants
  into account, however. They also both differ from this module, in that a
  subroutine referenced in compiled code can no longer be called if deleted
  from its glob. The entire glob must be replaced (which this module does).
  
  =cut
SUB_DELETE

    $main::fatpacked{"Sub/Exporter/Progressive.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SUB_EXPORTER_PROGRESSIVE';
  package Sub::Exporter::Progressive;
  
  use strict;
  use warnings;
  
  our $VERSION = '0.001011';
  
  use Carp ();
  use List::Util ();
  
  sub import {
     my ($self, @args) = @_;
  
     my $inner_target = caller;
     my $export_data = sub_export_options($inner_target, @args);
  
     my $full_exporter;
     no strict 'refs';
     @{"${inner_target}::EXPORT_OK"} = @{$export_data->{exports}};
     @{"${inner_target}::EXPORT"} = @{$export_data->{defaults}};
     %{"${inner_target}::EXPORT_TAGS"} = %{$export_data->{tags}};
     *{"${inner_target}::import"} = sub {
        use strict;
        my ($self, @args) = @_;
  
        if (List::Util::first { ref || !m/ \A [:-]? \w+ \z /xm } @args) {
           Carp::croak 'your usage of Sub::Exporter::Progressive requires Sub::Exporter to be installed'
              unless eval { require Sub::Exporter };
           $full_exporter ||= Sub::Exporter::build_exporter($export_data->{original});
  
           goto $full_exporter;
        } elsif (defined(my $num = List::Util::first { !ref and m/^\d/ } @args)) {
           die "cannot export symbols with a leading digit: '$num'";
        } else {
           require Exporter;
           s/ \A - /:/xm for @args;
           @_ = ($self, @args);
           goto \&Exporter::import;
        }
     };
     return;
  }
  
  my $too_complicated = <<'DEATH';
  You are using Sub::Exporter::Progressive, but the features your program uses from
  Sub::Exporter cannot be implemented without Sub::Exporter, so you might as well
  just use vanilla Sub::Exporter
  DEATH
  
  sub sub_export_options {
     my ($inner_target, $setup, $options) = @_;
  
     my @exports;
     my @defaults;
     my %tags;
  
     if ($setup eq '-setup') {
        my %options = %$options;
  
        OPTIONS:
        for my $opt (keys %options) {
           if ($opt eq 'exports') {
  
              Carp::croak $too_complicated if ref $options{exports} ne 'ARRAY';
              @exports = @{$options{exports}};
              Carp::croak $too_complicated if List::Util::first { ref } @exports;
  
           } elsif ($opt eq 'groups') {
              %tags = %{$options{groups}};
              for my $tagset (values %tags) {
                 Carp::croak $too_complicated if List::Util::first { / \A - (?! all \b ) /x || ref } @{$tagset};
              }
              @defaults = @{$tags{default} || [] };
           } else {
              Carp::croak $too_complicated;
           }
        }
        @{$_} = map { / \A  [:-] all \z /x ? @exports : $_ } @{$_} for \@defaults, values %tags;
        $tags{all} ||= [ @exports ];
        my %exports = map { $_ => 1 } @exports;
        my @errors = grep { not $exports{$_} } @defaults;
        Carp::croak join(', ', @errors) . " is not exported by the $inner_target module\n" if @errors;
     }
  
     return {
        exports => \@exports,
        defaults => \@defaults,
        original => $options,
        tags => \%tags,
     };
  }
  
  1;
  
  =encoding utf8
  
  =head1 NAME
  
  Sub::Exporter::Progressive - Only use Sub::Exporter if you need it
  
  =head1 SYNOPSIS
  
   package Syntax::Keyword::Gather;
  
   use Sub::Exporter::Progressive -setup => {
     exports => [qw( break gather gathered take )],
     groups => {
       default => [qw( break gather gathered take )],
     },
   };
  
   # elsewhere
  
   # uses Exporter for speed
   use Syntax::Keyword::Gather;
  
   # somewhere else
  
   # uses Sub::Exporter for features
   use Syntax::Keyword::Gather 'gather', take => { -as => 'grab' };
  
  =head1 DESCRIPTION
  
  L<Sub::Exporter> is an incredibly powerful module, but with that power comes
  great responsibility, er- as well as some runtime penalties.  This module
  is a C<Sub::Exporter> wrapper that will let your users just use L<Exporter>
  if all they are doing is picking exports, but use C<Sub::Exporter> if your
  users try to use C<Sub::Exporter>'s more advanced features, like
  renaming exports, if they try to use them.
  
  Note that this module will export C<@EXPORT>, C<@EXPORT_OK> and
  C<%EXPORT_TAGS> package variables for C<Exporter> to work.  Additionally, if
  your package uses advanced C<Sub::Exporter> features like currying, this module
  will only ever use C<Sub::Exporter>, so you might as well use it directly.
  
  =head1 AUTHOR
  
  frew - Arthur Axel Schmidt (cpan:FREW) <frioux+cpan@gmail.com>
  
  =head1 CONTRIBUTORS
  
  ilmari - Dagfinn Ilmari Mannsåker (cpan:ILMARI) <ilmari@ilmari.org>
  
  mst - Matt S. Trout (cpan:MSTROUT) <mst@shadowcat.co.uk>
  
  leont - Leon Timmermans (cpan:LEONT) <leont@cpan.org>
  
  =head1 COPYRIGHT
  
  Copyright (c) 2012 the Sub::Exporter::Progressive L</AUTHOR> and
  L</CONTRIBUTORS> as listed above.
  
  =head1 LICENSE
  
  This library is free software and may be distributed under the same terms
  as perl itself.
  
  =cut
SUB_EXPORTER_PROGRESSIVE

    $main::fatpacked{"Sub/Quote.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SUB_QUOTE';
  package Sub::Quote;
  
  sub _clean_eval { eval $_[0] }
  
  use Moo::_strictures;
  
  use Sub::Defer qw(defer_sub);
  use Moo::_Utils qw(_install_coderef);
  use Scalar::Util qw(weaken);
  use Exporter qw(import);
  use Carp qw(croak);
  BEGIN { our @CARP_NOT = qw(Sub::Defer) }
  use B ();
  BEGIN {
    *_HAVE_PERLSTRING = defined &B::perlstring ? sub(){1} : sub(){0};
  }
  
  our $VERSION = '2.002004';
  $VERSION = eval $VERSION;
  
  our @EXPORT = qw(quote_sub unquote_sub quoted_from_sub qsub);
  our @EXPORT_OK = qw(quotify capture_unroll inlinify sanitize_identifier);
  
  our %QUOTED;
  
  sub quotify {
    no warnings 'numeric';
    ! defined $_[0]     ? 'undef()'
    # numeric detection
    : (length( (my $dummy = '') & $_[0] )
      && 0 + $_[0] eq $_[0]
      && $_[0] * 0 == 0
    ) ? $_[0]
    : _HAVE_PERLSTRING  ? B::perlstring($_[0])
    : qq["\Q$_[0]\E"];
  }
  
  sub sanitize_identifier {
    my $name = shift;
    $name =~ s/([_\W])/sprintf('_%x', ord($1))/ge;
    $name;
  }
  
  sub capture_unroll {
    my ($from, $captures, $indent) = @_;
    join(
      '',
      map {
        /^([\@\%\$])/
          or croak "capture key should start with \@, \% or \$: $_";
        (' ' x $indent).qq{my ${_} = ${1}{${from}->{${\quotify $_}}};\n};
      } keys %$captures
    );
  }
  
  sub inlinify {
    my ($code, $args, $extra, $local) = @_;
    my $do = 'do { '.($extra||'');
    if ($code =~ s/^(\s*package\s+([a-zA-Z0-9:]+);)//) {
      $do .= $1;
    }
    if ($code =~ s{
      \A((?:\#\ BEGIN\ quote_sub\ PRELUDE\n.*?\#\ END\ quote_sub\ PRELUDE\n)?\s*)
      (^\s*) my \s* \(([^)]+)\) \s* = \s* \@_;
    }{}xms) {
      my ($pre, $indent, $code_args) = ($1, $2, $3);
      $do .= $pre;
      if ($code_args ne $args) {
        $do .= $indent . 'my ('.$code_args.') = ('.$args.'); ';
      }
    }
    elsif ($local || $args ne '@_') {
      $do .= ($local ? 'local ' : '').'@_ = ('.$args.'); ';
    }
    $do.$code.' }';
  }
  
  sub quote_sub {
    # HOLY DWIMMERY, BATMAN!
    # $name => $code => \%captures => \%options
    # $name => $code => \%captures
    # $name => $code
    # $code => \%captures => \%options
    # $code
    my $options =
      (ref($_[-1]) eq 'HASH' and ref($_[-2]) eq 'HASH')
        ? pop
        : {};
    my $captures = ref($_[-1]) eq 'HASH' ? pop : undef;
    undef($captures) if $captures && !keys %$captures;
    my $code = pop;
    my $name = $_[0];
    if ($name) {
      my $subname = $name;
      my $package = $subname =~ s/(.*)::// ? $1 : caller;
      $name = join '::', $package, $subname;
      croak "package name $package too long!"
        if length $package > 252;
      croak "sub name $subname too long!"
        if length $subname > 252;
    }
    my @caller = caller(0);
    my $attributes = $options->{attributes};
    my $quoted_info = {
      name     => $name,
      code     => $code,
      captures => $captures,
      package      => (exists $options->{package}      ? $options->{package}      : $caller[0]),
      hints        => (exists $options->{hints}        ? $options->{hints}        : $caller[8]),
      warning_bits => (exists $options->{warning_bits} ? $options->{warning_bits} : $caller[9]),
      hintshash    => (exists $options->{hintshash}    ? $options->{hintshash}    : $caller[10]),
      ($attributes ? (attributes => $attributes) : ()),
    };
    my $unquoted;
    weaken($quoted_info->{unquoted} = \$unquoted);
    if ($options->{no_defer}) {
      my $fake = \my $var;
      local $QUOTED{$fake} = $quoted_info;
      my $sub = unquote_sub($fake);
      _install_coderef($name, $sub) if $name && !$options->{no_install};
      return $sub;
    }
    else {
      my $deferred = defer_sub +($options->{no_install} ? undef : $name) => sub {
        $unquoted if 0;
        unquote_sub($quoted_info->{deferred});
      }, ($attributes ? { attributes => $attributes } : ());
      weaken($quoted_info->{deferred} = $deferred);
      weaken($QUOTED{$deferred} = $quoted_info);
      return $deferred;
    }
  }
  
  sub _context {
    my $info = shift;
    $info->{context} ||= do {
      my ($package, $hints, $warning_bits, $hintshash)
        = @{$info}{qw(package hints warning_bits hintshash)};
  
      $info->{context}
        ="# BEGIN quote_sub PRELUDE\n"
        ."package $package;\n"
        ."BEGIN {\n"
        ."  \$^H = ".quotify($hints).";\n"
        ."  \${^WARNING_BITS} = ".quotify($warning_bits).";\n"
        ."  \%^H = (\n"
        . join('', map
        "    ".quotify($_)." => ".quotify($hintshash->{$_}).",\n",
          keys %$hintshash)
        ."  );\n"
        ."}\n"
        ."# END quote_sub PRELUDE\n";
    };
  }
  
  sub quoted_from_sub {
    my ($sub) = @_;
    my $quoted_info = $QUOTED{$sub||''} or return undef;
    my ($name, $code, $captures, $unquoted, $deferred)
      = @{$quoted_info}{qw(name code captures unquoted deferred)};
    $code = _context($quoted_info) . $code;
    $unquoted &&= $$unquoted;
    if (($deferred && $deferred eq $sub)
        || ($unquoted && $unquoted eq $sub)) {
      return [ $name, $code, $captures, $unquoted, $deferred ];
    }
    return undef;
  }
  
  sub unquote_sub {
    my ($sub) = @_;
    my $quoted_info = $QUOTED{$sub} or return undef;
    my $unquoted = $quoted_info->{unquoted};
    unless ($unquoted && $$unquoted) {
      my ($name, $code, $captures, $package, $attributes)
        = @{$quoted_info}{qw(name code captures package attributes)};
  
      ($package, $name) = $name =~ /(.*)::(.*)/
        if $name;
  
      my %captures = $captures ? %$captures : ();
      $captures{'$_UNQUOTED'} = \$unquoted;
      $captures{'$_QUOTED'} = \$quoted_info;
  
      my $make_sub
        = "{\n"
        . capture_unroll("\$_[1]", \%captures, 2)
        . "  package ${package};\n"
        . (
          $name
            # disable the 'variable $x will not stay shared' warning since
            # we're not letting it escape from this scope anyway so there's
            # nothing trying to share it
            ? "  no warnings 'closure';\n  sub ${name} "
            : "  \$\$_UNQUOTED = sub "
        )
        . ($attributes ? join('', map ":$_ ", @$attributes) : '') . "{\n"
        . "  (\$_QUOTED,\$_UNQUOTED) if 0;\n"
        . _context($quoted_info)
        . $code
        . "  }".($name ? "\n  \$\$_UNQUOTED = \\&${name}" : '') . ";\n"
        . "}\n"
        . "1;\n";
      $ENV{SUB_QUOTE_DEBUG} && warn $make_sub;
      {
        no strict 'refs';
        local *{"${package}::${name}"} if $name;
        my ($success, $e);
        {
          local $@;
          $success = _clean_eval($make_sub, \%captures);
          $e = $@;
        }
        unless ($success) {
          croak "Eval went very, very wrong:\n\n${make_sub}\n\n$e";
        }
        weaken($QUOTED{$$unquoted} = $quoted_info);
      }
    }
    $$unquoted;
  }
  
  sub qsub ($) {
    goto &quote_sub;
  }
  
  sub CLONE {
    %QUOTED = map { defined $_ ? (
      $_->{unquoted} && ${$_->{unquoted}} ? (${ $_->{unquoted} } => $_) : (),
      $_->{deferred} ? ($_->{deferred} => $_) : (),
    ) : () } values %QUOTED;
    weaken($_) for values %QUOTED;
  }
  
  1;
  __END__
  
  =head1 NAME
  
  Sub::Quote - efficient generation of subroutines via string eval
  
  =head1 SYNOPSIS
  
   package Silly;
  
   use Sub::Quote qw(quote_sub unquote_sub quoted_from_sub);
  
   quote_sub 'Silly::kitty', q{ print "meow" };
  
   quote_sub 'Silly::doggy', q{ print "woof" };
  
   my $sound = 0;
  
   quote_sub 'Silly::dagron',
     q{ print ++$sound % 2 ? 'burninate' : 'roar' },
     { '$sound' => \$sound };
  
  And elsewhere:
  
   Silly->kitty;  # meow
   Silly->doggy;  # woof
   Silly->dagron; # burninate
   Silly->dagron; # roar
   Silly->dagron; # burninate
  
  =head1 DESCRIPTION
  
  This package provides performant ways to generate subroutines from strings.
  
  =head1 SUBROUTINES
  
  =head2 quote_sub
  
   my $coderef = quote_sub 'Foo::bar', q{ print $x++ . "\n" }, { '$x' => \0 };
  
  Arguments: ?$name, $code, ?\%captures, ?\%options
  
  C<$name> is the subroutine where the coderef will be installed.
  
  C<$code> is a string that will be turned into code.
  
  C<\%captures> is a hashref of variables that will be made available to the
  code.  The keys should be the full name of the variable to be made available,
  including the sigil.  The values should be references to the values.  The
  variables will contain copies of the values.  See the L</SYNOPSIS>'s
  C<Silly::dagron> for an example using captures.
  
  Exported by default.
  
  =head3 options
  
  =over 2
  
  =item C<no_install>
  
  B<Boolean>.  Set this option to not install the generated coderef into the
  passed subroutine name on undefer.
  
  =item C<no_defer>
  
  B<Boolean>.  Prevents a Sub::Defer wrapper from being generated for the quoted
  sub.  If the sub will most likely be called at some point, setting this is a
  good idea.  For a sub that will most likely be inlined, it is not recommended.
  
  =item C<package>
  
  The package that the quoted sub will be evaluated in.  If not specified, the
  sub calling C<quote_sub> will be used.
  
  =back
  
  =head2 unquote_sub
  
   my $coderef = unquote_sub $sub;
  
  Forcibly replace subroutine with actual code.
  
  If $sub is not a quoted sub, this is a no-op.
  
  Exported by default.
  
  =head2 quoted_from_sub
  
   my $data = quoted_from_sub $sub;
  
   my ($name, $code, $captures, $compiled_sub) = @$data;
  
  Returns original arguments to quote_sub, plus the compiled version if this
  sub has already been unquoted.
  
  Note that $sub can be either the original quoted version or the compiled
  version for convenience.
  
  Exported by default.
  
  =head2 inlinify
  
   my $prelude = capture_unroll '$captures', {
     '$x' => 1,
     '$y' => 2,
   }, 4;
  
   my $inlined_code = inlinify q{
     my ($x, $y) = @_;
  
     print $x + $y . "\n";
   }, '$x, $y', $prelude;
  
  Takes a string of code, a string of arguments, a string of code which acts as a
  "prelude", and a B<Boolean> representing whether or not to localize the
  arguments.
  
  =head2 quotify
  
   my $quoted_value = quotify $value;
  
  Quotes a single (non-reference) scalar value for use in a code string.  Numbers
  aren't treated specially and will be quoted as strings, but undef will quoted as
  C<undef()>.
  
  =head2 capture_unroll
  
   my $prelude = capture_unroll '$captures', {
     '$x' => 1,
     '$y' => 2,
   }, 4;
  
  Arguments: $from, \%captures, $indent
  
  Generates a snippet of code which is suitable to be used as a prelude for
  L</inlinify>.  C<$from> is a string will be used as a hashref in the resulting
  code.  The keys of C<%captures> are the names of the variables and the values
  are ignored.  C<$indent> is the number of spaces to indent the result by.
  
  =head2 qsub
  
   my $hash = {
    coderef => qsub q{ print "hello"; },
    other   => 5,
   };
  
  Arguments: $code
  
  Works exactly like L</quote_sub>, but includes a prototype to only accept a
  single parameter.  This makes it easier to include in hash structures or lists.
  
  Exported by default.
  
  =head2 sanitize_identifier
  
   my $var_name = '$variable_for_' . sanitize_identifier('@name');
   quote_sub qq{ print \$${var_name} }, { $var_name => \$value };
  
  Arguments: $identifier
  
  Sanitizes a value so that it can be used in an identifier.
  
  =head1 CAVEATS
  
  Much of this is just string-based code-generation, and as a result, a few
  caveats apply.
  
  =head2 return
  
  Calling C<return> from a quote_sub'ed sub will not likely do what you intend.
  Instead of returning from the code you defined in C<quote_sub>, it will return
  from the overall function it is composited into.
  
  So when you pass in:
  
     quote_sub q{  return 1 if $condition; $morecode }
  
  It might turn up in the intended context as follows:
  
    sub foo {
  
      <important code a>
      do {
        return 1 if $condition;
        $morecode
      };
      <important code b>
  
    }
  
  Which will obviously return from foo, when all you meant to do was return from
  the code context in quote_sub and proceed with running important code b.
  
  =head2 pragmas
  
  C<Sub::Quote> preserves the environment of the code creating the
  quoted subs.  This includes the package, strict, warnings, and any
  other lexical pragmas.  This is done by prefixing the code with a
  block that sets up a matching environment.  When inlining C<Sub::Quote>
  subs, care should be taken that user pragmas won't effect the rest
  of the code.
  
  =head1 SUPPORT
  
  See L<Moo> for support and contact information.
  
  =head1 AUTHORS
  
  See L<Moo> for authors.
  
  =head1 COPYRIGHT AND LICENSE
  
  See L<Moo> for the copyright and license.
  
  =cut
SUB_QUOTE

    $main::fatpacked{"Sub/Uplevel.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'SUB_UPLEVEL';
  package Sub::Uplevel;
  use 5.006;
  use strict;
  # ABSTRACT: apparently run a function in a higher stack frame
  
  our $VERSION = '0.25';
  
  # Frame check global constant
  our $CHECK_FRAMES;
  BEGIN {
    $CHECK_FRAMES = !! $CHECK_FRAMES;
  }
  use constant CHECK_FRAMES => $CHECK_FRAMES;
  
  # We must override *CORE::GLOBAL::caller if it hasn't already been 
  # overridden or else Perl won't see our local override later.
  
  if ( not defined *CORE::GLOBAL::caller{CODE} ) {
    *CORE::GLOBAL::caller = \&_normal_caller;
  }
  
  # modules to force reload if ":aggressive" is specified
  my @reload_list = qw/Exporter Exporter::Heavy/;
  
  sub import {
    no strict 'refs'; ## no critic
    my ($class, @args) = @_;
    for my $tag ( @args, 'uplevel' ) {
      if ( $tag eq 'uplevel' ) {
        my $caller = caller(0);
        *{"$caller\::uplevel"} = \&uplevel;
      }
      elsif( $tag eq ':aggressive' ) {
        _force_reload( @reload_list );
      }
      else {
        die qq{"$tag" is not exported by the $class module\n}
      }
    }
    return;
  }
  
  sub _force_reload {
    no warnings 'redefine';
    local $^W = 0;
    for my $m ( @_ ) {
      $m =~ s{::}{/}g;
      $m .= ".pm";
      require $m if delete $INC{$m};
    }
  }
  
  #pod =head1 SYNOPSIS
  #pod
  #pod   use Sub::Uplevel;
  #pod
  #pod   sub foo {
  #pod       print join " - ", caller;
  #pod   }
  #pod
  #pod   sub bar {
  #pod       uplevel 1, \&foo;
  #pod   }
  #pod
  #pod   #line 11
  #pod   bar();    # main - foo.plx - 11
  #pod
  #pod =head1 DESCRIPTION
  #pod
  #pod Like Tcl's uplevel() function, but not quite so dangerous.  The idea
  #pod is just to fool caller().  All the really naughty bits of Tcl's
  #pod uplevel() are avoided.
  #pod
  #pod B<THIS IS NOT THE SORT OF THING YOU WANT TO DO EVERYDAY>
  #pod
  #pod =over 4
  #pod
  #pod =item B<uplevel>
  #pod
  #pod   uplevel $num_frames, \&func, @args;
  #pod
  #pod Makes the given function think it's being executed $num_frames higher
  #pod than the current stack level.  So when they use caller($frames) it
  #pod will actually give caller($frames + $num_frames) for them.
  #pod
  #pod C<uplevel(1, \&some_func, @_)> is effectively C<goto &some_func> but
  #pod you don't immediately exit the current subroutine.  So while you can't
  #pod do this:
  #pod
  #pod     sub wrapper {
  #pod         print "Before\n";
  #pod         goto &some_func;
  #pod         print "After\n";
  #pod     }
  #pod
  #pod you can do this:
  #pod
  #pod     sub wrapper {
  #pod         print "Before\n";
  #pod         my @out = uplevel 1, &some_func;
  #pod         print "After\n";
  #pod         return @out;
  #pod     }
  #pod
  #pod C<uplevel> has the ability to issue a warning if C<$num_frames> is more than
  #pod the current call stack depth, although this warning is disabled and compiled
  #pod out by default as the check is relatively expensive.
  #pod
  #pod To enable the check for debugging or testing, you should set the global
  #pod C<$Sub::Uplevel::CHECK_FRAMES> to true before loading Sub::Uplevel for the
  #pod first time as follows:
  #pod
  #pod     #!/usr/bin/perl
  #pod     
  #pod     BEGIN {
  #pod         $Sub::Uplevel::CHECK_FRAMES = 1;
  #pod     }
  #pod     use Sub::Uplevel;
  #pod
  #pod Setting or changing the global after the module has been loaded will have
  #pod no effect.
  #pod
  #pod =cut
  
  # @Up_Frames -- uplevel stack
  # $Caller_Proxy -- whatever caller() override was in effect before uplevel
  our (@Up_Frames, $Caller_Proxy);
  
  sub _apparent_stack_height {
      my $height = 1; # start above this function 
      while ( 1 ) {
          last if ! defined scalar $Caller_Proxy->($height);
          $height++;
      }
      return $height - 1; # subtract 1 for this function
  }
  
  sub uplevel {
      # Backwards compatible version of "no warnings 'redefine'"
      my $old_W = $^W;
      $^W = 0;
  
      # Update the caller proxy if the uplevel override isn't in effect
      local $Caller_Proxy = *CORE::GLOBAL::caller{CODE}
          if *CORE::GLOBAL::caller{CODE} != \&_uplevel_caller;
      local *CORE::GLOBAL::caller = \&_uplevel_caller;
  
      # Restore old warnings state
      $^W = $old_W;
  
      if ( CHECK_FRAMES and $_[0] >= _apparent_stack_height() ) {
        require Carp;
        Carp::carp("uplevel $_[0] is more than the caller stack");
      }
  
      local @Up_Frames = (shift, @Up_Frames );
  
      my $function = shift;
      return $function->(@_);
  }
  
  sub _normal_caller (;$) { ## no critic Prototypes
      my ($height) = @_;
      $height++;
      my @caller = CORE::caller($height);
      if ( CORE::caller() eq 'DB' ) {
          # Oops, redo picking up @DB::args
          package DB;
          @caller = CORE::caller($height);
      }
  
      return if ! @caller;                  # empty
      return $caller[0] if ! wantarray;     # scalar context
      return @_ ? @caller : @caller[0..2];  # extra info or regular
  }
  
  sub _uplevel_caller (;$) { ## no critic Prototypes
      my $height = $_[0] || 0;
  
      # shortcut if no uplevels have been called
      # always add +1 to CORE::caller (proxy caller function)
      # to skip this function's caller
      return $Caller_Proxy->( $height + 1 ) if ! @Up_Frames;
  
  #pod =begin _private
  #pod
  #pod So it has to work like this:
  #pod
  #pod     Call stack               Actual     uplevel 1
  #pod CORE::GLOBAL::caller
  #pod Carp::short_error_loc           0
  #pod Carp::shortmess_heavy           1           0
  #pod Carp::croak                     2           1
  #pod try_croak                       3           2
  #pod uplevel                         4            
  #pod function_that_called_uplevel    5            
  #pod caller_we_want_to_see           6           3
  #pod its_caller                      7           4
  #pod
  #pod So when caller(X) winds up below uplevel(), it only has to use  
  #pod CORE::caller(X+1) (to skip CORE::GLOBAL::caller).  But when caller(X)
  #pod winds up no or above uplevel(), it's CORE::caller(X+1+uplevel+1).
  #pod
  #pod Which means I'm probably going to have to do something nasty like walk
  #pod up the call stack on each caller() to see if I'm going to wind up   
  #pod before or after Sub::Uplevel::uplevel().
  #pod
  #pod =end _private
  #pod
  #pod =begin _dagolden
  #pod
  #pod I found the description above a bit confusing.  Instead, this is the logic
  #pod that I found clearer when CORE::GLOBAL::caller is invoked and we have to
  #pod walk up the call stack:
  #pod
  #pod * if searching up to the requested height in the real call stack doesn't find
  #pod a call to uplevel, then we can return the result at that height in the
  #pod call stack
  #pod
  #pod * if we find a call to uplevel, we need to keep searching upwards beyond the
  #pod requested height at least by the amount of upleveling requested for that
  #pod call to uplevel (from the Up_Frames stack set during the uplevel call)
  #pod
  #pod * additionally, we need to hide the uplevel subroutine call, too, so we search
  #pod upwards one more level for each call to uplevel
  #pod
  #pod * when we've reached the top of the search, we want to return that frame
  #pod in the call stack, i.e. the requested height plus any uplevel adjustments
  #pod found during the search
  #pod
  #pod =end _dagolden
  #pod
  #pod =cut
  
      my $saw_uplevel = 0;
      my $adjust = 0;
  
      # walk up the call stack to fight the right package level to return;
      # look one higher than requested for each call to uplevel found
      # and adjust by the amount found in the Up_Frames stack for that call.
      # We *must* use CORE::caller here since we need the real stack not what 
      # some other override says the stack looks like, just in case that other
      # override breaks things in some horrible way
  
      for ( my $up = 0; $up <= $height + $adjust; $up++ ) {
          my @caller = CORE::caller($up + 1); 
          if( defined $caller[0] && $caller[0] eq __PACKAGE__ ) {
              # add one for each uplevel call seen
              # and look into the uplevel stack for the offset
              $adjust += 1 + $Up_Frames[$saw_uplevel];
              $saw_uplevel++;
          }
      }
  
      # For returning values, we pass through the call to the proxy caller
      # function, just at a higher stack level
      my @caller = $Caller_Proxy->($height + $adjust + 1);
      if ( CORE::caller() eq 'DB' ) {
          # Oops, redo picking up @DB::args
          package DB;
          @caller = $Sub::Uplevel::Caller_Proxy->($height + $adjust + 1);
      }
  
      return if ! @caller;                  # empty
      return $caller[0] if ! wantarray;     # scalar context
      return @_ ? @caller : @caller[0..2];  # extra info or regular
  }
  
  #pod =back
  #pod
  #pod =head1 EXAMPLE
  #pod
  #pod The main reason I wrote this module is so I could write wrappers
  #pod around functions and they wouldn't be aware they've been wrapped.
  #pod
  #pod     use Sub::Uplevel;
  #pod
  #pod     my $original_foo = \&foo;
  #pod
  #pod     *foo = sub {
  #pod         my @output = uplevel 1, $original_foo;
  #pod         print "foo() returned:  @output";
  #pod         return @output;
  #pod     };
  #pod
  #pod If this code frightens you B<you should not use this module.>
  #pod
  #pod
  #pod =head1 BUGS and CAVEATS
  #pod
  #pod Well, the bad news is uplevel() is about 5 times slower than a normal
  #pod function call.  XS implementation anyone?  It also slows down every invocation
  #pod of caller(), regardless of whether uplevel() is in effect.
  #pod
  #pod Sub::Uplevel overrides CORE::GLOBAL::caller temporarily for the scope of
  #pod each uplevel call.  It does its best to work with any previously existing
  #pod CORE::GLOBAL::caller (both when Sub::Uplevel is first loaded and within 
  #pod each uplevel call) such as from Contextual::Return or Hook::LexWrap.  
  #pod
  #pod However, if you are routinely using multiple modules that override 
  #pod CORE::GLOBAL::caller, you are probably asking for trouble.
  #pod
  #pod You B<should> load Sub::Uplevel as early as possible within your program.  As
  #pod with all CORE::GLOBAL overloading, the overload will not affect modules that
  #pod have already been compiled prior to the overload.  One module that often is
  #pod unavoidably loaded prior to Sub::Uplevel is Exporter.  To forcibly recompile
  #pod Exporter (and Exporter::Heavy) after loading Sub::Uplevel, use it with the
  #pod ":aggressive" tag:
  #pod
  #pod     use Sub::Uplevel qw/:aggressive/;
  #pod
  #pod The private function C<Sub::Uplevel::_force_reload()> may be passed a list of
  #pod additional modules to reload if ":aggressive" is not aggressive enough.  
  #pod Reloading modules may break things, so only use this as a last resort.
  #pod
  #pod As of version 0.20, Sub::Uplevel requires Perl 5.6 or greater.
  #pod
  #pod =head1 HISTORY
  #pod
  #pod Those who do not learn from HISTORY are doomed to repeat it.
  #pod
  #pod The lesson here is simple:  Don't sit next to a Tcl programmer at the
  #pod dinner table.
  #pod
  #pod =head1 THANKS
  #pod
  #pod Thanks to Brent Welch, Damian Conway and Robin Houston.
  #pod
  #pod See http://www.perl.com/perl/misc/Artistic.html
  #pod
  #pod =head1 SEE ALSO
  #pod
  #pod PadWalker (for the similar idea with lexicals), Hook::LexWrap, 
  #pod Tcl's uplevel() at http://www.scriptics.com/man/tcl8.4/TclCmd/uplevel.htm
  #pod
  #pod =cut
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Sub::Uplevel - apparently run a function in a higher stack frame
  
  =head1 VERSION
  
  version 0.25
  
  =head1 SYNOPSIS
  
    use Sub::Uplevel;
  
    sub foo {
        print join " - ", caller;
    }
  
    sub bar {
        uplevel 1, \&foo;
    }
  
    #line 11
    bar();    # main - foo.plx - 11
  
  =head1 DESCRIPTION
  
  Like Tcl's uplevel() function, but not quite so dangerous.  The idea
  is just to fool caller().  All the really naughty bits of Tcl's
  uplevel() are avoided.
  
  B<THIS IS NOT THE SORT OF THING YOU WANT TO DO EVERYDAY>
  
  =over 4
  
  =item B<uplevel>
  
    uplevel $num_frames, \&func, @args;
  
  Makes the given function think it's being executed $num_frames higher
  than the current stack level.  So when they use caller($frames) it
  will actually give caller($frames + $num_frames) for them.
  
  C<uplevel(1, \&some_func, @_)> is effectively C<goto &some_func> but
  you don't immediately exit the current subroutine.  So while you can't
  do this:
  
      sub wrapper {
          print "Before\n";
          goto &some_func;
          print "After\n";
      }
  
  you can do this:
  
      sub wrapper {
          print "Before\n";
          my @out = uplevel 1, &some_func;
          print "After\n";
          return @out;
      }
  
  C<uplevel> has the ability to issue a warning if C<$num_frames> is more than
  the current call stack depth, although this warning is disabled and compiled
  out by default as the check is relatively expensive.
  
  To enable the check for debugging or testing, you should set the global
  C<$Sub::Uplevel::CHECK_FRAMES> to true before loading Sub::Uplevel for the
  first time as follows:
  
      #!/usr/bin/perl
      
      BEGIN {
          $Sub::Uplevel::CHECK_FRAMES = 1;
      }
      use Sub::Uplevel;
  
  Setting or changing the global after the module has been loaded will have
  no effect.
  
  =begin _private
  
  So it has to work like this:
  
      Call stack               Actual     uplevel 1
  CORE::GLOBAL::caller
  Carp::short_error_loc           0
  Carp::shortmess_heavy           1           0
  Carp::croak                     2           1
  try_croak                       3           2
  uplevel                         4            
  function_that_called_uplevel    5            
  caller_we_want_to_see           6           3
  its_caller                      7           4
  
  So when caller(X) winds up below uplevel(), it only has to use  
  CORE::caller(X+1) (to skip CORE::GLOBAL::caller).  But when caller(X)
  winds up no or above uplevel(), it's CORE::caller(X+1+uplevel+1).
  
  Which means I'm probably going to have to do something nasty like walk
  up the call stack on each caller() to see if I'm going to wind up   
  before or after Sub::Uplevel::uplevel().
  
  =end _private
  
  =begin _dagolden
  
  I found the description above a bit confusing.  Instead, this is the logic
  that I found clearer when CORE::GLOBAL::caller is invoked and we have to
  walk up the call stack:
  
  * if searching up to the requested height in the real call stack doesn't find
  a call to uplevel, then we can return the result at that height in the
  call stack
  
  * if we find a call to uplevel, we need to keep searching upwards beyond the
  requested height at least by the amount of upleveling requested for that
  call to uplevel (from the Up_Frames stack set during the uplevel call)
  
  * additionally, we need to hide the uplevel subroutine call, too, so we search
  upwards one more level for each call to uplevel
  
  * when we've reached the top of the search, we want to return that frame
  in the call stack, i.e. the requested height plus any uplevel adjustments
  found during the search
  
  =end _dagolden
  
  =back
  
  =head1 EXAMPLE
  
  The main reason I wrote this module is so I could write wrappers
  around functions and they wouldn't be aware they've been wrapped.
  
      use Sub::Uplevel;
  
      my $original_foo = \&foo;
  
      *foo = sub {
          my @output = uplevel 1, $original_foo;
          print "foo() returned:  @output";
          return @output;
      };
  
  If this code frightens you B<you should not use this module.>
  
  =head1 BUGS and CAVEATS
  
  Well, the bad news is uplevel() is about 5 times slower than a normal
  function call.  XS implementation anyone?  It also slows down every invocation
  of caller(), regardless of whether uplevel() is in effect.
  
  Sub::Uplevel overrides CORE::GLOBAL::caller temporarily for the scope of
  each uplevel call.  It does its best to work with any previously existing
  CORE::GLOBAL::caller (both when Sub::Uplevel is first loaded and within 
  each uplevel call) such as from Contextual::Return or Hook::LexWrap.  
  
  However, if you are routinely using multiple modules that override 
  CORE::GLOBAL::caller, you are probably asking for trouble.
  
  You B<should> load Sub::Uplevel as early as possible within your program.  As
  with all CORE::GLOBAL overloading, the overload will not affect modules that
  have already been compiled prior to the overload.  One module that often is
  unavoidably loaded prior to Sub::Uplevel is Exporter.  To forcibly recompile
  Exporter (and Exporter::Heavy) after loading Sub::Uplevel, use it with the
  ":aggressive" tag:
  
      use Sub::Uplevel qw/:aggressive/;
  
  The private function C<Sub::Uplevel::_force_reload()> may be passed a list of
  additional modules to reload if ":aggressive" is not aggressive enough.  
  Reloading modules may break things, so only use this as a last resort.
  
  As of version 0.20, Sub::Uplevel requires Perl 5.6 or greater.
  
  =head1 HISTORY
  
  Those who do not learn from HISTORY are doomed to repeat it.
  
  The lesson here is simple:  Don't sit next to a Tcl programmer at the
  dinner table.
  
  =head1 THANKS
  
  Thanks to Brent Welch, Damian Conway and Robin Houston.
  
  See http://www.perl.com/perl/misc/Artistic.html
  
  =head1 SEE ALSO
  
  PadWalker (for the similar idea with lexicals), Hook::LexWrap, 
  Tcl's uplevel() at http://www.scriptics.com/man/tcl8.4/TclCmd/uplevel.htm
  
  =for :stopwords cpan testmatrix url annocpan anno bugtracker rt cpants kwalitee diff irc mailto metadata placeholders metacpan
  
  =head1 SUPPORT
  
  =head2 Bugs / Feature Requests
  
  Please report any bugs or feature requests through the issue tracker
  at L<https://github.com/dagolden/Sub-Uplevel/issues>.
  You will be notified automatically of any progress on your issue.
  
  =head2 Source Code
  
  This is open source software.  The code repository is available for
  public review and contribution under the terms of the license.
  
  L<https://github.com/dagolden/Sub-Uplevel>
  
    git clone https://github.com/dagolden/Sub-Uplevel.git
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  Michael Schwern <mschwern@cpan.org>
  
  =item *
  
  David Golden <dagolden@cpan.org>
  
  =back
  
  =head1 CONTRIBUTORS
  
  =for stopwords Adam Kennedy Alexandr Ciornii Michael Gray
  
  =over 4
  
  =item *
  
  Adam Kennedy <adamk@cpan.org>
  
  =item *
  
  Alexandr Ciornii <alexchorny@gmail.com>
  
  =item *
  
  Michael Gray <mg13@sanger.ac.uk>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by Michael Schwern and David Golden.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
SUB_UPLEVEL

    $main::fatpacked{"Template/Tiny.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEMPLATE_TINY';
  package Template::Tiny;
  
  # Load overhead: 40k
  
  use 5.00503;
  use strict;
  
  $Template::Tiny::VERSION = '1.12';
  
  # Evaluatable expression
  my $EXPR = qr/ [a-z_][\w.]* /xs;
  
  # Opening [% tag including whitespace chomping rules
  my $LEFT = qr/
  	(?:
  		(?: (?:^|\n) [ \t]* )? \[\%\-
  		|
  		\[\% \+?
  	) \s*
  /xs;
  
  # Closing %] tag including whitespace chomping rules
  my $RIGHT  = qr/
  	\s* (?:
  		\+? \%\]
  		|
  		\-\%\] (?: [ \t]* \n )?
  	)
  /xs;
  
  # Preparsing run for nesting tags
  my $PREPARSE = qr/
  	$LEFT ( IF | UNLESS | FOREACH ) \s+
  		(
  			(?: \S+ \s+ IN \s+ )?
  		\S+ )
  	$RIGHT
  	(?!
  		.*?
  		$LEFT (?: IF | UNLESS | FOREACH ) \b
  	)
  	( .*? )
  	(?:
  		$LEFT ELSE $RIGHT
  		(?!
  			.*?
  			$LEFT (?: IF | UNLESS | FOREACH ) \b
  		)
  		( .+? )
  	)?
  	$LEFT END $RIGHT
  /xs;
  
  # Condition set
  my $CONDITION = qr/
  	\[\%\s
  		( ([IUF])\d+ ) \s+
  		(?:
  			([a-z]\w*) \s+ IN \s+
  		)?
  		( $EXPR )
  	\s\%\]
  	( .*? )
  	(?:
  		\[\%\s \1 \s\%\]
  		( .+? )
  	)?
  	\[\%\s \1 \s\%\]
  /xs;
  
  sub new {
  	bless { @_[1..$#_] }, $_[0];
  }
  
  # Copy and modify
  sub preprocess {
  	my $self = shift;
  	my $text = shift;
  	$self->_preprocess(\$text);
  	return $text;
  }
  
  sub process {
  	my $self  = shift;
  	my $copy  = ${shift()};
  	my $stash = shift || {};
  
  	local $@  = '';
  	local $^W = 0;
  
  	# Preprocess to establish unique matching tag sets
  	$self->_preprocess( \$copy );
  
  	# Process down the nested tree of conditions
  	my $result = $self->_process( $stash, $copy );
  	if ( @_ ) {
  		${$_[0]} = $result;
  	} elsif ( defined wantarray ) {
  		require Carp;
  		Carp::carp('Returning of template results is deprecated in Template::Tiny 0.11');
  		return $result;
  	} else {
  		print $result;
  	}
  }
  
  
  
  
  
  ######################################################################
  # Support Methods
  
  # The only reason this is a standalone is so we can
  # do more in-depth testing.
  sub _preprocess {
  	my $self = shift;
  	my $copy = shift;
  
  	# Preprocess to establish unique matching tag sets
  	my $id = 0;
  	1 while $$copy =~ s/
  		$PREPARSE
  	/
  		my $tag = substr($1, 0, 1) . ++$id;
  		"\[\% $tag $2 \%\]$3\[\% $tag \%\]"
  		. (defined($4) ? "$4\[\% $tag \%\]" : '');
  	/sex;
  }
  
  sub _process {
  	my ($self, $stash, $text) = @_;
  
  	$text =~ s/
  		$CONDITION
  	/
  		($2 eq 'F')
  			? $self->_foreach($stash, $3, $4, $5)
  			: eval {
  				$2 eq 'U'
  				xor
  				!! # Force boolification
  				$self->_expression($stash, $4)
  			}
  				? $self->_process($stash, $5)
  				: $self->_process($stash, $6)
  	/gsex;
  
  	# Resolve expressions
  	$text =~ s/
  		$LEFT ( $EXPR ) $RIGHT
  	/
  		eval {
  			$self->_expression($stash, $1)
  			. '' # Force stringification
  		}
  	/gsex;
  
  	# Trim the document
  	$text =~ s/^\s*(.+?)\s*\z/$1/s if $self->{TRIM};
  
  	return $text;
  }
  
  # Special handling for foreach
  sub _foreach {
  	my ($self, $stash, $term, $expr, $text) = @_;
  
  	# Resolve the expression
  	my $list = $self->_expression($stash, $expr);
  	unless ( ref $list eq 'ARRAY' ) {
  		return '';
  	}
  
  	# Iterate
  	return join '', map {
  		$self->_process( { %$stash, $term => $_ }, $text )
  	} @$list;
  }
  
  # Evaluates a stash expression
  sub _expression {
  	my $cursor = $_[1];
  	my @path   = split /\./, $_[2];
  	foreach ( @path ) {
  		# Support for private keys
  		return undef if substr($_, 0, 1) eq '_';
  
  		# Split by data type
  		my $type = ref $cursor;
  		if ( $type eq 'ARRAY' ) {
  			return '' unless /^(?:0|[0-9]\d*)\z/;
  			$cursor = $cursor->[$_];
  		} elsif ( $type eq 'HASH' ) {
  			$cursor = $cursor->{$_};
  		} elsif ( $type ) {
  			$cursor = $cursor->$_();
  		} else {
  			return '';
  		}
  	}
  	return $cursor;
  }
  
  1;
  
  __END__
  
  =pod
  
  =head1 NAME
  
  Template::Tiny - Template Toolkit reimplemented in as little code as possible
  
  =head1 SYNOPSIS
  
    my $template = Template::Tiny->new(
        TRIM => 1,
    );
    
    # Print the template results to STDOUT
    $template->process( <<'END_TEMPLATE', { foo => 'World' } );
    Hello [% foo %]!
    END_TEMPLATE
  
  =head1 DESCRIPTION
  
  B<Template::Tiny> is a reimplementation of a subset of the functionality from
  L<Template> Toolkit in as few lines of code as possible.
  
  It is intended for use in light-usage, low-memory, or low-cpu templating
  situations, where you may need to upgrade to the full feature set in the
  future, or if you want the retain the familiarity of TT-style templates.
  
  For the subset of functionality it implements, it has fully-compatible template
  and stash API. All templates used with B<Template::Tiny> should be able to be
  transparently upgraded to full Template Toolkit.
  
  Unlike Template Toolkit, B<Template::Tiny> will process templates without a
  compile phase (but despite this is still quicker, owing to heavy use of
  the Perl regular expression engine.
  
  =head2 SUPPORTED USAGE
  
  Only the default C<[% %]> tag style is supported.
  
  Both the C<[%+ +%]> style explicit whitespace and the C<[%- -%]> style
  explicit chomp B<are> support, although the C<[%+ +%]> version is unneeded
  in practice as B<Template::Tiny> does not support default-enabled C<PRE_CHOMP>
  or C<POST_CHOMP>.
  
  Variable expressions in the form C<[% foo.bar.baz %]> B<are> supported.
  
  Appropriate simple behaviours for C<ARRAY> references, C<HASH> references and
  objects are supported. "VMethods" such as [% array.length %] are B<not>
  supported at this time.
  
  C<IF>, C<ELSE> and C<UNLESS> conditional blocks B<are> supported, but only with
  simple C<[% foo.bar.baz %]> conditions.
  
  Support for looping (or rather iteration) is available in simple
  C<[% FOREACH item IN list %]> form B<is> supported. Other loop structures are
  B<not> supported. Because support for arbitrary or infinite looping is not
  available, B<Template::Tiny> templates are not turing complete. This is
  intentional.
  
  All of the four supported control structures C<IF>/C<ELSE>/C<UNLESS>/C<FOREACH>
  can be nested to arbitrary depth.
  
  The treatment of C<_private> hash and method keys is compatible with
  L<Template> Toolkit, returning null or false rather than the actual content
  of the hash key or method.
  
  Anything beyond the above is currently out of scope.
  
  =head1 METHODS
  
  =head2 new
  
    my $template = Template::Tiny->new(
        TRIM => 1,
    );
  
  The C<new> constructor is provided for compatibility with Template Toolkit.
  
  The only parameter it currently supports is C<TRIM> (which removes leading
  and trailing whitespace from processed templates).
  
  Additional parameters can be provided without error, but will be ignored.
  
  =head2 process
  
    # DEPRECATED: Return template results (emits a warning)
    my $text = $template->process( \$input, $vars );
    
    # Print template results to STDOUT
    $template->process( \$input, $vars );
    
    # Generate template results into a variable
    my $output = '';
    $template->process( \$input, $vars, \$output );
  
  The C<process> method is called to process a template.
  
  The first parameter is a reference to a text string containing the template
  text. A reference to a hash may be passed as the second parameter containing
  definitions of template variables.
  
  If a third parameter is provided, it must be a scalar reference to be
  populated with the output of the template.
  
  For a limited amount of time, the old deprecated interface will continue to
  be supported. If C<process> is called without a third parameter, and in
  scalar or list contest, the template results will be returned to the caller.
  
  If C<process> is called without a third parameter, and in void context, the
  template results will be C<print()>ed to the currently selected file handle
  (probably C<STDOUT>) for compatibility with L<Template>.
  
  =head1 SUPPORT
  
  Bugs should be reported via the CPAN bug tracker at
  
  L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Template-Tiny>
  
  For other issues, or commercial enhancement or support, contact the author.
  
  =head1 AUTHOR
  
  Adam Kennedy E<lt>adamk@cpan.orgE<gt>
  
  =head1 SEE ALSO
  
  L<Config::Tiny>, L<CSS::Tiny>, L<YAML::Tiny>
  
  =head1 COPYRIGHT
  
  Copyright 2009 - 2011 Adam Kennedy.
  
  This program is free software; you can redistribute
  it and/or modify it under the same terms as Perl itself.
  
  The full text of the license can be found in the
  LICENSE file included with this module.
  
  =cut
TEMPLATE_TINY

    $main::fatpacked{"Term/App/Role/Attrs.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TERM_APP_ROLE_ATTRS';
  package Term::App::Role::Attrs;
  
  our $DATE = '2014-12-10'; # DATE
  our $VERSION = '0.01'; # VERSION
  
  use 5.010001;
  use Moo::Role;
  
  my $dt_cache;
  sub detect_terminal {
      my $self = shift;
  
      if (!$dt_cache) {
          require Term::Detect::Software;
          $dt_cache = Term::Detect::Software::detect_terminal_cached();
          #use Data::Dump; dd $dt_cache;
      }
      $dt_cache;
  }
  
  my $termw_cache;
  my $termh_cache;
  sub _term_size {
      my $self = shift;
  
      if (defined $termw_cache) {
          return ($termw_cache, $termh_cache);
      }
  
      ($termw_cache, $termh_cache) = (0, 0);
      if (eval { require Term::Size; 1 }) {
          ($termw_cache, $termh_cache) = Term::Size::chars();
      }
      ($termw_cache, $termh_cache);
  }
  
  # return undef if fail to parse
  sub __parse_color_depth {
      my $val = shift;
      if ($val =~ /\A\d+\z/) {
          return $val;
      } elsif ($val =~ /\A(\d+)[ _-]?(?:bit|b)\z/) {
          return 2**$val;
      } else {
          # IDEA: parse 'high color', 'true color'?
          return undef;
      }
  }
  
  has interactive => (
      is      => 'rw',
      lazy    => 1,
      default => sub {
          my $self = shift;
          if (defined $ENV{INTERACTIVE}) {
              $self->{_term_attrs_debug_info}{interactive_from} =
                  'INTERACTIVE env';
              return $ENV{INTERACTIVE};
          } else {
              $self->{_term_attrs_debug_info}{interactive_from} =
                  '-t STDOUT';
              return (-t STDOUT);
          }
      },
  );
  
  has use_color => (
      is      => 'rw',
      lazy    => 1,
      default => sub {
          my $self = shift;
          if (defined $ENV{COLOR}) {
              $self->{_term_attrs_debug_info}{use_color_from} =
                  'COLOR env';
              return $ENV{COLOR};
          } elsif (defined $ENV{COLOR_DEPTH}) {
              $self->{_term_attrs_debug_info}{use_color_from} =
                  'COLOR_DEPTH env';
              my $val = __parse_color_depth($ENV{COLOR_DEPTH}) //
                  $ENV{COLOR_DEPTH};
              return $val ? 1:0;
          } else {
              $self->{_term_attrs_debug_info}{use_color_from} =
                  'interactive + color_deth';
              return $self->interactive && $self->color_depth > 0;
          }
      },
      trigger => sub {
          my ($self, $val) = @_;
          return if !defined($val) || $val =~ /\A(|1|0)\z/;
          my $pval = __parse_color_depth($val);
          $self->{color_depth} = $pval if defined $pval;
      },
  );
  
  has color_depth => (
      is      => 'rw',
      lazy    => 1,
      default => sub {
          my $self = shift;
          my $pval;
          if (defined($ENV{COLOR_DEPTH}) &&
                  defined($pval = __parse_color_depth($ENV{COLOR_DEPTH}))) {
              $self->{_term_attrs_debug_info}{color_depth_from} =
                  'COLOR_DEPTH env';
              return $pval;
          } elsif (defined($ENV{COLOR}) && $ENV{COLOR} !~ /^(|0|1)$/ &&
                       defined($pval = __parse_color_depth($ENV{COLOR}))) {
                  $self->{_term_attrs_debug_info}{color_depth_from} =
                      'COLOR env';
              return $pval;
          } elsif (defined(my $cd = $self->detect_terminal->{color_depth})) {
              $self->{_term_attrs_debug_info}{color_depth_from} =
                  'detect_terminal';
              return $cd;
          } else {
              $self->{_term_attrs_debug_info}{color_depth_from} =
                  'hardcoded default';
              return 16;
          }
      },
      trigger => sub {
          my ($self, $val) = @_;
          if (defined(my $pval = __parse_color_depth($val))) {
              $self->{color_depth} = $val = $pval;
          }
          if ($val) {
              $self->{use_color} = 1;
          } else {
              $self->{use_color} = 0;
          }
      },
  );
  
  has use_box_chars => (
      is      => 'rw',
      lazy    => 1,
      default => sub {
          my $self = shift;
          if (defined $ENV{BOX_CHARS}) {
              $self->{_term_attrs_debug_info}{use_box_chars_from} =
                  'BOX_CHARS env';
              return $ENV{BOX_CHARS};
          } elsif (!$self->interactive) {
              # most pager including 'less -R' does not support interpreting
              # boxchar escape codes.
              $self->{_term_attrs_debug_info}{use_box_chars_from} =
                  '(not) interactive';
              return 0;
          } elsif (defined(my $bc = $self->detect_terminal->{box_chars})) {
              $self->{_term_attrs_debug_info}{use_box_chars_from} =
                  'detect_terminal';
              return $bc;
          } else {
              $self->{_term_attrs_debug_info}{use_box_chars_from} =
                  'hardcoded default';
              return 0;
          }
      },
  );
  
  has use_utf8 => (
      is      => 'rw',
      lazy    => 1,
      default => sub {
          my $self = shift;
          if (defined $ENV{UTF8}) {
              $self->{_term_attrs_debug_info}{use_utf8_from} =
                  'UTF8 env';
              return $ENV{UTF8};
          } elsif (defined(my $termuni = $self->detect_terminal->{unicode})) {
              $self->{_term_attrs_debug_info}{use_utf8_from} =
                  'detect_terminal + LANG/LANGUAGE env must include "utf8"';
              return $termuni &&
                  (($ENV{LANG} || $ENV{LANGUAGE} || "") =~ /utf-?8/i ? 1:0);
          } else {
              $self->{_term_attrs_debug_info}{use_utf8_from} =
                  'hardcoded default';
              return 0;
          }
      },
  );
  
  has _term_attrs_debug_info => (is => 'rw', default=>sub{ {} });
  
  has term_width => (
      is      => 'rw',
      lazy    => 1,
      default => sub {
          my $self = shift;
          if ($ENV{COLUMNS}) {
              $self->{_term_attrs_debug_info}{term_width_from} = 'COLUMNS env';
              return $ENV{COLUMNS};
          }
          my ($termw, undef) = $self->_term_size;
          if ($termw) {
              $self->{_term_attrs_debug_info}{term_width_from} = 'term_size';
          } else {
              # sane default, on windows printing to rightmost column causes
              # cursor to move to the next line.
              $self->{_term_attrs_debug_info}{term_width_from} =
                  'hardcoded default';
              $termw = $^O =~ /Win/ ? 79 : 80;
          }
          $termw;
      },
  );
  
  has term_height => (
      is      => 'rw',
      lazy    => 1,
      default => sub {
          my $self = shift;
          if ($ENV{LINES}) {
              $self->{_term_attrs_debug_info}{term_height_from} = 'LINES env';
              return $ENV{LINES};
          }
          my (undef, $termh) = $self->_term_size;
          if ($termh) {
              $self->{_term_attrs_debug_info}{term_height_from} = 'term_size';
          } else {
              $self->{_term_attrs_debug_info}{term_height_from} = 'default';
              # sane default
              $termh = 25;
          }
          $termh;
      },
  );
  
  1;
  #ABSTRACT: Role for terminal-related attributes
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Term::App::Role::Attrs - Role for terminal-related attributes
  
  =head1 VERSION
  
  This document describes version 0.01 of Term::App::Role::Attrs (from Perl distribution Term-App-Roles), released on 2014-12-10.
  
  =head1 DESCRIPTION
  
  This role gives several options to turn on/off terminal-oriented features like
  whether to use UTF8 characters, whether to use colors, and color depth. Defaults
  are set from environment variables or by detecting terminal
  software/capabilities.
  
  =head1 ATTRIBUTES
  
  =head2 use_utf8 => BOOL (default: from env, or detected from terminal)
  
  The default is retrieved from environment: if C<UTF8> is set, it is used.
  Otherwise, the default is on if terminal emulator software supports Unicode
  I<and> language (LANG/LANGUAGE) setting has /utf-?8/i in it.
  
  =head2 use_box_chars => BOOL (default: from env, or detected from OS)
  
  Default is 0 for Windows.
  
  =head2 interactive => BOOL (default: from env, or detected from terminal)
  
  =head2 use_color => BOOL (default: from env, or detected from terminal)
  
  For convenience, this attribute is "linked" with C<color_depth>. Setting
  C<use_color> will also set C<color_depth> when the value is not ''/1/0 and
  matches color depth pattern. For example, setting C<use_color> to 256 or '8bit'
  will also set C<color_depth> to 256.
  
  =head2 color_depth => INT (or STR, default: from env, or detected from terminal)
  
  Get/set color depth. When setting, you can use string like '8 bit' or '24b' and
  it will be converted to 256 (2**8) or 16777216 (2**24).
  
  For convenience, this attribute is "linked" with C<use_color>. Setting
  C<color_depth> to non-zero value will enable C<use_color>, while setting it to 0
  will disable C<use_color>.
  
  =head2 term_width => INT (default: from env, or detected from terminal)
  
  =head2 term_height => INT (default: from env, or detected from terminal)
  
  =head1 METHODS
  
  =head2 detect_terminal() => HASH
  
  Call L<Term::Detect::Software>'s C<detect_terminal_cached>.
  
  =head1 ENVIRONMENT
  
  =over
  
  =item * UTF8 => BOOL
  
  Can be used to set C<use_utf8>.
  
  =item * INTERACTIVE => BOOL
  
  Can be used to set C<interactive>.
  
  =item * COLOR => BOOL (or INT or STR)
  
  Can be used to set C<use_color>. Can also be used to set C<color_depth> (if
  C<COLOR_DEPTH> is not defined).
  
  =item * COLOR_DEPTH => INT (or STR)
  
  Can be used to set C<color_depth>. Can also be used to enable/disable
  C<use_color>.
  
  =item * BOX_CHARS => BOOL
  
  Can be used to set C<use_box_chars>.
  
  =item * COLUMNS => INT
  
  Can be used to set C<term_width>.
  
  =item * LINES => INT
  
  Can be used to set C<term_height>.
  
  =back
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Term-App-Roles>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Term-App-Roles>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Term-App-Roles>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TERM_APP_ROLE_ATTRS

    $main::fatpacked{"Term/App/Roles.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TERM_APP_ROLES';
  package Term::App::Roles;
  
  our $DATE = '2014-12-10'; # DATE
  our $VERSION = '0.01'; # VERSION
  
  1;
  #ABSTRACT: Collection of roles for terminal-based application
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Term::App::Roles - Collection of roles for terminal-based application
  
  =head1 VERSION
  
  This document describes version 0.01 of Term::App::Roles (from Perl distribution Term-App-Roles), released on 2014-12-10.
  
  =head1 DESCRIPTION
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Term-App-Roles>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Term-App-Roles>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Term-App-Roles>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2014 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TERM_APP_ROLES

    $main::fatpacked{"Term/Detect/Software.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TERM_DETECT_SOFTWARE';
  package Term::Detect::Software;
  
  our $DATE = '2015-01-03'; # DATE
  our $VERSION = '0.21'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  use experimental 'smartmatch';
  #use Log::Any '$log';
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(detect_terminal detect_terminal_cached);
  
  my $dt_cache;
  sub detect_terminal_cached {
      if (!$dt_cache) {
          $dt_cache = detect_terminal(@_);
      }
      $dt_cache;
  }
  
  sub detect_terminal {
      my @dbg;
      my $info = {_debug_info=>\@dbg};
  
    DETECT:
      {
          unless (defined $ENV{TERM}) {
              push @dbg, "skip: TERM env undefined";
              $info->{emulator_engine}   = '';
              $info->{emulator_software} = '';
              last DETECT;
          }
  
          if ($ENV{KONSOLE_DBUS_SERVICE} || $ENV{KONSOLE_DBUS_SESSION}) {
              push @dbg, "detect: konsole via KONSOLE_DBUS_{SERVICE,SESSION} env";
              $info->{emulator_engine} = 'konsole';
              $info->{color_depth}     = 2**24;
              $info->{default_bgcolor} = '000000';
              $info->{unicode}         = 1;
              $info->{box_chars}       = 1;
              last DETECT;
          }
  
          if ($ENV{XTERM_VERSION}) {
              push @dbg, "detect: xterm via XTERM_VERSION env";
              $info->{emulator_engine} = 'xterm';
              $info->{color_depth}     = 256;
              $info->{default_bgcolor} = 'ffffff';
              $info->{unicode}         = 0;
              $info->{box_chars}       = 1;
              last DETECT;
          }
  
          # cygwin terminal
          if ($ENV{TERM} eq 'xterm' && ($ENV{OSTYPE} // '') eq 'cygwin') {
              push @dbg, "detect: xterm via TERM env (cygwin)";
              $info->{emulator_engine} = 'cygwin';
              $info->{color_depth}     = 16;
              $info->{default_bgcolor} = '000000';
              $info->{unicode}         = 0; # CONFIRM?
              $info->{box_chars}       = 1;
              last DETECT;
          }
  
          if ($ENV{TERM} eq 'linux') {
              push @dbg, "detect: linux via TERM env";
              # Linux virtual console
              $info->{emulator_engine} = 'linux';
              $info->{color_depth}     = 16;
              $info->{default_bgcolor} = '000000';
              # actually it can show a few Unicode characters like single borders
              $info->{unicode}         = 0;
              $info->{box_chars}       = 0;
              last DETECT;
          }
  
          my $gnome_terminal_terms = [qw/gnome-terminal guake xfce4-terminal
                                         mlterm lxterminal/];
  
          my $set_gnome_terminal_term = sub {
              $info->{emulator_software} = $_[0];
              $info->{emulator_engine}   = 'gnome-terminal';
  
              # xfce4-terminal only shows 16 color, despite being
              # gnome-terminal-based?
              $info->{color_depth}       = $_[0] =~ /xfce4/ ? 16 : 256;
  
              $info->{unicode}           = 1;
              if ($_[0] ~~ [qw/mlterm/]) {
                  $info->{default_bgcolor} = 'ffffff';
              } else {
                  $info->{default_bgcolor} = '000000';
              }
              $info->{box_chars} = 1;
          };
  
          if (($ENV{COLORTERM} // '') ~~ $gnome_terminal_terms) {
              push @dbg, "detect: gnome-terminal via COLORTERM";
              $set_gnome_terminal_term->($ENV{COLORTERM});
              last DETECT;
          }
  
          # Windows command prompt
          if ($ENV{TERM} eq 'dumb' && $ENV{windir}) {
              push @dbg, "detect: windows via TERM & windir env";
              $info->{emulator_software} = 'windows';
              $info->{emulator_engine}   = 'windows';
              $info->{color_depth}       = 16;
              $info->{unicode}           = 0;
              $info->{default_bgcolor}   = '000000';
              $info->{box_chars}         = 0;
              last DETECT;
          }
  
          # run under CGI or something like that
          if ($ENV{TERM} eq 'dumb') {
              push @dbg, "detect: dumb via TERM env";
              $info->{emulator_software} = 'dumb';
              $info->{emulator_engine}   = 'dumb';
              $info->{color_depth}       = 0;
              # XXX how to determine unicode support?
              $info->{default_bgcolor}   = '000000';
              $info->{box_chars}         = 0;
              last DETECT;
          }
  
          {
              last if $^O =~ /Win/;
  
              require Proc::Find::Parents;
              my $ppids = Proc::Find::Parents::get_parent_processes();
              unless (defined $ppids) {
                  push @dbg, "skip: get_parent_processes returns undef";
                  last;
              }
  
              # [0] is shell
              my $proc = @$ppids >= 1 ? $ppids->[1]{name} : '';
              #say "D:proc=$proc";
              if ($proc ~~ $gnome_terminal_terms) {
                  push @dbg, "detect: gnome-terminal via procname ($proc)";
                  $set_gnome_terminal_term->($proc);
                  last DETECT;
              } elsif ($proc ~~ [qw/rxvt mrxvt/]) {
                  push @dbg, "detect: rxvt via procname ($proc)";
                  $info->{emulator_software} = $proc;
                  $info->{emulator_engine}   = 'rxvt';
                  $info->{color_depth}       = 16;
                  $info->{unicode}           = 0;
                  $info->{default_bgcolor}   = 'd6d2d0';
                  $info->{box_chars}         = 1;
                  last DETECT;
              } elsif ($proc ~~ [qw/pterm/]) {
                  push @dbg, "detect: pterm via procname ($proc)";
                  $info->{emulator_software} = $proc;
                  $info->{emulator_engine}   = 'putty';
                  $info->{color_depth}       = 256;
                  $info->{unicode}           = 0;
                  $info->{default_bgcolor}   = '000000';
                  last DETECT;
              } elsif ($proc ~~ [qw/xvt/]) {
                  push @dbg, "detect: xvt via procname ($proc)";
                  $info->{emulator_software} = $proc;
                  $info->{emulator_engine}   = 'xvt';
                  $info->{color_depth}       = 0; # only support bold
                  $info->{unicode}           = 0;
                  $info->{default_bgcolor}   = 'd6d2d0';
                  last DETECT;
              }
          }
  
          # generic
          {
              unless (exists $info->{color_depth}) {
                  if ($ENV{TERM} =~ /256color/) {
                      push @dbg, "detect color_depth: 256 via TERM env";
                      $info->{color_depth} = 256;
                  } else {
                      require File::Which;
                      if (File::Which::which("tput")) {
                          my $res = `tput colors` + 0;
                          push @dbg, "detect color_depth: $res via tput";
                          $info->{color_depth} = $res;
                      }
                  }
              }
  
              $info->{emulator_software} //= '(generic)';
              $info->{emulator_engine} //= '(generic)';
              $info->{unicode} //= 0;
              $info->{color_depth} //= 0;
              $info->{box_chars} //= 0;
              $info->{default_bgcolor} //= '000000';
          }
  
      } # DETECT
  
      # some additional detections
  
      # we're running under emacs, it doesn't support box chars
      if ($ENV{INSIDE_EMACS}) {
          $info->{inside_emacs} = 1;
          $info->{box_chars} = 0;
      }
  
      $info;
  }
  
  1;
  # ABSTRACT: Detect terminal (emulator) software and its capabilities
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Term::Detect::Software - Detect terminal (emulator) software and its capabilities
  
  =head1 VERSION
  
  This document describes version 0.21 of Term::Detect::Software (from Perl distribution Term-Detect-Software), released on 2015-01-03.
  
  =head1 SYNOPSIS
  
   use Term::Detect::Software qw(detect_terminal detect_terminal_cached);
   my $res = detect_terminal();
   die "Not running under terminal!" unless $res->{emulator_engine};
   say "Emulator engine: ", $res->{emulator_engine};
   say "Emulator software: ", $res->{emulator_software};
   say "Unicode support? ", $res->{unicode} ? "yes":"no";
   say "Boxchars support? ", $res->{box_chars} ? "yes":"no";
   say "Color depth: ", $res->{color_depth};
   say "Inside emacs? ", $res->{inside_emacs} ? "yes":"no";
  
  =head1 DESCRIPTION
  
  This module uses several heuristics to find out what terminal (emulator)
  software the current process is running in, and its capabilities/settings. This
  module complements other modules such as L<Term::Terminfo> and
  L<Term::Encoding>.
  
  =head1 FUNCTIONS
  
  =head2 detect_terminal() => HASHREF
  
  Return a hashref containing information about running terminal (emulator)
  software and its capabilities/settings.
  
  Detection method is tried from the easiest/cheapest (e.g. checking environment
  variables) or by looking at known process names in the process tree. Terminal
  capabilities is determined using heuristics.
  
  Currently Konsole and Konsole-based terminals (like Yakuake) can be detected
  through existence of environment variables C<KONSOLE_DBUS_SERVICE> or
  C<KONSOLE_DBUS_SESSION>. xterm is detected through C<XTERM_VERSION>. XFCE's
  Terminal is detected using C<COLORTERM>. The other software are detected via
  known process names.
  
  Terminal capabilities and settings are currently determined via heuristics.
  Probing terminal configuration files might be performed in the future.
  
  Result:
  
  =over
  
  =item * emulator_engine => STR
  
  Possible values: C<konsole>, C<xterm>, C<gnome-terminal>, C<rxvt>, C<pterm>
  (PuTTY), C<xvt>, C<windows> (CMD.EXE), C<cygwin>, or empty string (if not
  detected running under terminal).
  
  =item * emulator_software => STR
  
  Either: C<xfce4-terminal>, C<guake>, C<gnome-terminal>, C<mlterm>,
  C<lxterminal>, C<rxvt>, C<mrxvt>, C<putty>, C<xvt>, C<windows> (CMD.EXE), or
  empty string (if not detected running under terminal).
  
  w=item * color_depth => INT
  
  Either 0 (does not support ANSI color codes), 16, 256, or 16777216 (2**24).
  
  =item * default_bgcolor => STR (6-hexdigit RGB)
  
  For example, any xterm is assumed to have white background (ffffff) by default,
  while Konsole is assumed to have black (000000). Better heuristics will be done
  in the future.
  
  =item * unicode => BOOL
  
  Whether terminal software supports Unicode/wide characters. Note that you should
  also check encoding, e.g. using L<Term::Encoding>.
  
  =item * box_chars => BOOL
  
  Whether terminal supports box-drawing characters.
  
  =back
  
  =head2 detect_terminal_cached([$flag]) => ANY
  
  Just like C<detect_terminal()> but will cache the result. Can be used by
  applications or modules to avoid repeating detection process.
  
  =head1 FAQ
  
  =head2 What is this module for? Why not Term::Terminfo or Term::Encoding?
  
  This module is first written for L<Text::ANSITable> so that the module can
  provide good defaults when displaying formatted and colored tables, especially
  on popular terminal emulation software like Konsole (KDE's default terminal),
  gnome-terminal (GNOME's default), Terminal (XFCE's default), xterm, rxvt.
  
  The module works by trying to figure out the terminal emulation software because
  the information provided by L<Term::Terminfo> and L<Term::Encoding> are
  sometimes not specific enough. For example, Term::Encoding can return L<utf-8>
  when running under rxvt, but since the software currently lacks Unicode support
  we shouldn't display Unicode characters. Another example is color depth:
  Term::Terminfo currently doesn't recognize Konsole's 24bit color support and
  only gives C<max_colors> 256.
  
  =head1 SEE ALSO
  
  L<Term::Terminfo>
  
  L<Term::Encoding>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Term-Detect-Software>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Term-Detect-Software>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Term-Detect-Software>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TERM_DETECT_SOFTWARE

    $main::fatpacked{"Test/Config/IOD/Common.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEST_CONFIG_IOD_COMMON';
  package Test::Config::IOD::Common;
  
  our $DATE = '2017-01-16'; # DATE
  our $VERSION = '0.32'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  use Test::More 0.98;
  
  our $CLASS = "Config::IOD::Reader";
  
  sub test_common_iod {
  
      eval "require $CLASS"; die if $@;
  
      subtest "opt: default_section" => sub {
          test_read_iod(
              args  => {default_section=>'bawaan'},
              input => <<'_',
  a=1
  _
              result => {bawaan=>{a=>1}},
          );
      };
  
      subtest "opt: allow_directives" => sub {
          test_read_iod(
              args  => {allow_directives=>['merge']},
              input => <<'_',
  ;!noop
  _
              dies  => 1,
          );
          test_read_iod(
              args  => {allow_directives=>['noop']},
              input => <<'_',
  ;!noop
  _
              result => {},
          );
      };
  
      subtest "opt: disallow_directives" => sub {
          test_read_iod(
              args  => {disallow_directives=>['noop']},
              input => <<'_',
  ;!noop
  _
              dies  => 1,
          );
          test_read_iod(
              args  => {disallow_directives=>['merge']},
              input => <<'_',
  ;!noop
  _
              result => {},
          );
      };
  
      subtest "opt: allow_directives + disallow_directives" => sub {
          test_read_iod(
              args  => {
                  allow_directives    => ['noop'],
                  disallow_directives => ['noop'],
              },
              input => <<'_',
  ;!noop
  _
              dies  => 1,
          );
      };
  
      subtest "opt: enable_quoting=0" => sub {
          test_read_iod(
              args  => {enable_quoting=>0},
              input => <<'_',
  name="1\n2"
  _
              result => {GLOBAL=>{name=>'"1\\n2"'}},
          );
      };
  
      subtest "opt: enable_bracket=0" => sub {
          test_read_iod(
              args  => {enable_bracket=>0},
              input => <<'_',
  name=[1,2,3]
  _
              result => {GLOBAL=>{name=>'[1,2,3]'}},
          );
      };
  
      subtest "opt: enable_brace=0" => sub {
          test_read_iod(
              args  => {enable_brace=>0},
              input => <<'_',
  name={"a":1}
  _
              result => {GLOBAL=>{name=>'{"a":1}'}},
          );
      };
  
      subtest "opt: enable_encoding=0" => sub {
          test_read_iod(
              args  => {enable_encoding=>0},
              input => <<'_',
  name=!hex 5e5e
  _
              result => {GLOBAL=>{name=>'!hex 5e5e'}},
          );
      };
  
      subtest "opt: allow_encodings" => sub {
          test_read_iod(
              args  => {allow_encodings=>['hex']},
              input => <<'_',
  name=!json "1\n2"
  _
              dies => 1,
          );
          test_read_iod(
              args  => {allow_encodings=>['json']},
              input => <<'_',
  name=!json "1\n2"
  name2=!j "3\n4"
  _
              result => {GLOBAL=>{name=>"1\n2", name2=>"3\n4"}},
          );
      };
  
      subtest "opt: disallow_encodings" => sub {
          test_read_iod(
              args  => {disallow_encodings=>['json']},
              input => <<'_',
  name=!json "1\n2"
  _
              dies => 1,
          );
          test_read_iod(
              args  => {disallow_encodings=>['json']},
              input => <<'_',
  name=!j "1\n2"
  _
              dies => 1,
          );
          test_read_iod(
              args  => {disallow_encodings=>['hex']},
              input => <<'_',
  name=!json "1\n2"
  _
              result => {GLOBAL=>{name=>"1\n2"}},
          );
      };
  
      subtest "opt: allow_encodings + disallow_encodings" => sub {
          test_read_iod(
              args  => {
                  allow_encodings   =>['json'],
                  disallow_encodings=>['json'],
              },
              input => <<'_',
  name=!json "1\n2"
  _
              dies => 1,
          );
      };
  
      subtest "opt: allow_bang_only=0" => sub {
          test_read_iod(
              args  => {allow_bang_only=>0},
              input => <<'_',
  a=1
  !noop
  _
              dies => 1,
          );
      };
  
      subtest "opt: allow_duplicate_key=0" => sub {
          test_read_iod(
              args  => {allow_duplicate_key=>0},
              input => <<'_',
  a=1
  a=2
  _
              dies => 1,
          );
      };
  
      subtest "opt: ignore_unknown_directive=1" => sub {
          test_read_iod(
              args  => {ignore_unknown_directive=>1},
              input => <<'_',
  ;!foo bar
  _
              result => {},
          );
      };
  
      # temporarily placed here
      subtest "expr" => sub {
          test_read_iod(
              name  => "must be enabled first",
              args  => {},
              input => <<'_',
  a=!e 1+1
  _
              dies => 1,
          );
          test_read_iod(
              name  => "must be valid",
              args  => {enable_expr=>1},
              input => <<'_',
  a=!e 1+
  _
              dies => 1,
          );
          test_read_iod(
              args  => {enable_expr=>1},
              input => <<'_',
  a=!e 1+1
  [sect]
  b=!e val("GLOBAL.a")*3
  c=!e val("b") x 3
  _
              result => {GLOBAL=>{a=>2}, sect=>{b=>6, c=>666}},
          );
      };
  }
  
  sub test_read_iod {
      my %args = @_;
  
      my $parser_args = $args{args};
      my $test_name = $args{name} //
          "{". join(", ",
                    (map {"$_=$parser_args->{$_}"}
                         sort keys %$parser_args),
                ) . "}";
      subtest $test_name => sub {
  
          my $parser = $CLASS->new(%$parser_args);
  
          my $res;
          eval {
              if ($CLASS eq 'Config::IOD') {
                  $res = $parser->read_string($args{input})->dump;
              } else {
                  $res = $parser->read_string($args{input});
              }
          };
          my $err = $@;
          if ($args{dies}) {
              ok($err, "dies") or diag explain $res;
              return;
          } else {
              ok(!$err, "doesn't die")
                  or do { diag explain "err=$err"; return };
              is_deeply($res, $args{result}, 'result')
                  or diag explain $res;
          }
      };
  }
  
  1;
  # ABSTRACT: Common tests for Config::IOD and Config::IOD::Reader
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Test::Config::IOD::Common - Common tests for Config::IOD and Config::IOD::Reader
  
  =head1 VERSION
  
  This document describes version 0.32 of Test::Config::IOD::Common (from Perl distribution Config-IOD-Reader), released on 2017-01-16.
  
  =for Pod::Coverage .+
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Config-IOD-Reader>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Config-IOD-Reader>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Config-IOD-Reader>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TEST_CONFIG_IOD_COMMON

    $main::fatpacked{"Test/Data/Sah.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEST_DATA_SAH';
  package Test::Data::Sah;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  use Test::More 0.98;
  
  use Data::Dump qw(dump);
  use Data::Sah qw(gen_validator);
  use File::chdir;
  use File::Slurper qw(read_text);
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(
                         test_sah_cases
                         run_spectest
                         all_match
                         any_match
                         none_match
                 );
  
  # XXX support js & human testing too
  sub test_sah_cases {
      my $tests = shift;
      my $opts  = shift // {};
  
      my $sah = Data::Sah->new;
      my $plc = $sah->get_compiler('perl');
  
      my $gvopts = $opts->{gen_validator_opts} // {};
      my $rt = $gvopts->{return_type} // 'bool';
  
      for my $test (@$tests) {
          my $v = gen_validator($test->{schema}, $gvopts);
          my $res = $v->($test->{input});
          my $name = $test->{name} //
              "data " . dump($test->{input}) . " should".
                  ($test->{valid} ? " pass" : " not pass"). " schema " .
                      dump($test->{schema});
          my $testres;
          if ($test->{valid}) {
              if ($rt eq 'bool') {
                  $testres = ok($res, $name);
              } elsif ($rt eq 'str') {
                  $testres = is($res, "", $name) or diag explain $res;
              } elsif ($rt eq 'full') {
                  $testres = is(~~keys(%{$res->{errors}}), 0, $name) or diag explain $res;
              }
          } else {
              if ($rt eq 'bool') {
                  $testres = ok(!$res, $name);
              } elsif ($rt eq 'str') {
                  $testres = isnt($res, "", $name) or diag explain $res;
              } elsif ($rt eq 'full') {
                  $testres = isnt(~~keys(%{$res->{errors}}), 0, $name) or diag explain $res;
              }
          }
          next if $testres;
  
          # when test fails, show the validator generated code to help debugging
          my $cd = $plc->compile(schema => $test->{schema});
          diag "schema compilation result:\n----begin generated code----\n",
              explain($cd->{result}), "\n----end generated code----\n",
                  "that code should return ", ($test->{valid} ? "true":"false"),
                      " when fed \$data=", dump($test->{input}),
                          " but instead returns ", dump($res);
  
          # also show the result for return_type=full
          my $vfull = gen_validator($test->{schema}, {return_type=>"full"});
          diag "\nvalidator result (full):\n----begin result----\n",
              explain($vfull->($test->{input})), "----end result----";
      }
  }
  
  sub _decode_json {
      state $json = do {
          require JSON;
          JSON->new->allow_nonref;
      };
      $json->decode(@_);
  }
  
  sub run_spectest {
      require File::ShareDir;
      require File::ShareDir::Tarball;
      require Sah;
  
      my %args = @_;
  
      my $sah = Data::Sah->new;
  
      my $dir;
      if (version->parse($Sah::VERSION) == version->parse("0.9.27")) {
          # this version of Sah temporarily uses ShareDir instead of
          # ShareDir::Tarball due to garbled output problem of tarball.
          $dir = File::ShareDir::dist_dir("Sah");
      } else {
          $dir = File::ShareDir::Tarball::dist_dir("Sah");
      }
      $dir && (-d $dir) or die "Can't find spectest, have you installed Sah?";
      (-f "$dir/spectest/00-normalize_schema.json")
          or die "Something's wrong, spectest doesn't contain the correct files";
  
      my @specfiles;
      {
          local $CWD = "$dir/spectest";
          @specfiles = <*.json>;
      }
  
      # to test certain files only
      my @files;
      if ($ENV{TEST_SAH_SPECTEST_FILES}) {
          @files = split /\s*,\s*|\s+/, $ENV{TEST_SAH_SPECTEST_FILES};
      } else {
          @files = @ARGV;
      }
  
      # to test certain types only
      my @types;
      if ($ENV{TEST_SAH_SPECTEST_TYPES}) {
          @types = split /\s*,\s*|\s+/, $ENV{TEST_SAH_SPECTEST_TYPES};
      }
  
      # to test only tests that have all matching tags
      my @include_tags;
      if ($ENV{TEST_SAH_SPECTEST_INCLUDE_TAGS}) {
          @include_tags = split /\s*,\s*|\s+/,
              $ENV{TEST_SAH_SPECTEST_INCLUDE_TAGS};
      }
  
      # to skip tests that have all matching tags
      my @exclude_tags;
      if ($ENV{TEST_SAH_SPECTEST_EXCLUDE_TAGS}) {
          @exclude_tags = split /\s*,\s*|\s+/,
              $ENV{TEST_SAH_SPECTEST_EXCLUDE_TAGS};
      }
  
      my $code_test_excluded = sub {
          my $test = shift;
  
          if ($test->{tags} && @exclude_tags) {
              if (any_match(\@exclude_tags, $test->{tags})) {
                  return "contains excluded tag(s) (".
                      join(", ", @exclude_tags).")";
              }
          }
          if (@include_tags) {
              if (!all_match(\@include_tags, $test->{tags} // [])) {
                  return "does not contain all include tags (".
                      join(", ", @include_tags).")";
              }
          }
          "";
      };
  
      {
          use experimental 'smartmatch';
  
          last unless $args{test_normalize_schema};
  
          for my $file ("00-normalize_schema.json") {
              unless (!@files || $file ~~ @files) {
                  diag "Skipping file $file";
                  next;
              }
              subtest $file => sub {
                  my $tspec = _decode_json(~~read_text("$dir/spectest/$file"));
                  for my $test (@{ $tspec->{tests} }) {
                      subtest $test->{name} => sub {
                          if (my $reason = $code_test_excluded->($test)) {
                              plan skip_all => "Skipping test $test->{name}: $reason";
                              return;
                          }
                          eval {
                              is_deeply(normalize_schema($test->{input}),
                                        $test->{result}, "result");
                          };
                          my $eval_err = $@;
                          if ($test->{dies}) {
                              ok($eval_err, "dies");
                          } else {
                              ok(!$eval_err, "doesn't die")
                                  or diag $eval_err;
                          }
                      };
                  }
                  ok 1; # an extra dummy ok to pass even if all spectest is skipped
              };
          }
      }
  
      {
          use experimental 'smartmatch';
  
          last unless $args{test_merge_clause_sets};
  
          for my $file ("01-merge_clause_sets.json") {
              last; # we currently remove _merge_clause_sets() from Data::Sah
              unless (!@files || $file ~~ @files) {
                  diag "Skipping file $file";
                  next;
              }
              subtest $file => sub {
                  my $tspec = _decode_json(~~read_text("$dir/spectest/$file"));
                  for my $test (@{ $tspec->{tests} }) {
                      subtest $test->{name} => sub {
                          if (my $reason = $code_test_excluded->($test)) {
                              plan skip_all => "Skipping test $test->{name}: $reason";
                              return;
                          }
                          eval {
                              is_deeply($sah->_merge_clause_sets(@{ $test->{input} }),
                                        $test->{result}, "result");
                          };
                          my $eval_err = $@;
                          if ($test->{dies}) {
                              ok($eval_err, "dies");
                          } else {
                              ok(!$eval_err, "doesn't die")
                                  or diag $eval_err;
                          }
                      };
                  }
                  ok 1; # an extra dummy ok to pass even if all spectest is skipped
              };
          }
      }
  
      {
          use experimental 'smartmatch';
  
          for my $file (grep /^10-type-/, @specfiles) {
              unless (!@files || $file ~~ @files) {
                  diag "Skipping file $file";
                  next;
              }
              subtest $file => sub {
                  diag "Loading $file ...";
                  my $tspec = _decode_json(~~read_text("$dir/spectest/$file"));
                  note "Test version: ", $tspec->{version};
                  my $tests = $tspec->{tests};
                  if ($args{tests_func}) {
                      $args{tests_func}->($tests, {
                          parent_args => \%args,
                          code_test_excluded => $code_test_excluded,
                      });
                  } elsif ($args{test_func}) {
                      for my $test (@$tests) {
                          my $skip_reason;
                          {
                              if ($args{skip_if}) {
                                  $skip_reason = $args{skip_if}->($test);
                                  last if $skip_reason;
                              }
                              $skip_reason = $code_test_excluded->($test);
                              last if $skip_reason;
                          }
                          my $tname = "(tags=".join(", ", sort @{ $test->{tags} // [] }).
                              ") $test->{name}";
                          if ($skip_reason) {
                              diag "Skipping test $tname: $skip_reason";
                              next;
                          }
                          note explain $test;
                          subtest $tname => sub {
                              $args{test_func}->($test);
                          };
                      } # for $test
                      ok 1; # an extra dummy ok to pass even if all spectest is skipped
                  } else {
                      die "Please specify 'test_func' or 'tests_func'";
                  }
              }; # subtest $file
          } # for $file
      }
  
  }
  
  sub all_match {
      use experimental 'smartmatch';
  
      my ($list1, $list2) = @_;
  
      for (@$list1) {
          return 0 unless $_ ~~ @$list2;
      }
      1;
  }
  
  sub any_match {
      use experimental 'smartmatch';
  
      my ($list1, $list2) = @_;
  
      for (@$list1) {
          return 1 if $_ ~~ @$list2;
      }
      0;
  }
  
  sub none_match {
      use experimental 'smartmatch';
  
      my ($list1, $list2) = @_;
  
      for (@$list1) {
          return 0 if $_ ~~ @$list2;
      }
      1;
  }
  
  1;
  # ABSTRACT: Test routines for Data::Sah
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Test::Data::Sah - Test routines for Data::Sah
  
  =head1 VERSION
  
  This document describes version 0.87 of Test::Data::Sah (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 FUNCTIONS
  
  =head2 test_sah_cases(\@tests)
  
  =head2 run_spectest(\@tests, \%opts)
  
  =head2 all_match(\@array1, \@array2) => bool
  
  A utility routine. Probably will be moved to another module in the future.
  
  Return true if all of the elements in C<@array1> is in C<@array2>.
  
  =head2 any_match(\@array1, \@array2) => bool
  
  A utility routine. Probably will be moved to another module in the future.
  
  Return true if any element in C<@array1> is in C<@array2>.
  
  =head2 none_match(\@array1, \@array2) => bool
  
  A utility routine. Probably will be moved to another module in the future.
  
  Return true if none of the elements in C<@array1> is in C<@array2>.
  
  =head1 ENVIRONMENT
  
  =head2 TEST_SAH_SPECTEST_FILES => str
  
  Comma-separated list of files in spectest to test. Default is all files. If you
  only want to test certain spectest files, use this.
  
  =head2 TEST_SAH_SPECTEST_TYPES => str
  
  Comma-separated list of types to test. Default is all types. If you only want to
  test certain types, use this.
  
  =head2 TEST_SAH_SPECTEST_INCLUDE_TAGS => str
  
  Comma-separated list of tags to include. If you only want to include tests that
  have certain tags, use this.
  
  =head2 TEST_SAH_SPECTEST_EXCLUDE_TAGS => str
  
  Comma-separated list of tags to exclude. If you want to exclude tests that have
  certain tags, use this.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TEST_DATA_SAH

    $main::fatpacked{"Test/Data/Sah/Human.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEST_DATA_SAH_HUMAN';
  package Test::Data::Sah::Human;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  use Test::More 0.98;
  
  use Data::Sah;
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(test_human);
  
  sub test_human {
      my %args = @_;
      subtest $args{name} // $args{result}, sub {
          my $sah = Data::Sah->new;
          my $hc = $sah->get_compiler("human");
          my %hargs = (
              schema => $args{schema},
              lang => $args{lang},
              %{ $args{compile_opts} // {} },
          );
          $hargs{format} //= "inline_text";
          my $cd = $hc->compile(%hargs);
  
          if (defined $args{result}) {
              if (ref($args{result}) eq 'Regexp') {
                  like($cd->{result}, $args{result}, 'result');
              } else {
                  is($cd->{result}, $args{result}, 'result');
              }
          }
      };
  }
  
  1;
  # ABSTRACT: Routines to test Data::Sah (human compiler)
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Test::Data::Sah::Human - Routines to test Data::Sah (human compiler)
  
  =head1 VERSION
  
  This document describes version 0.87 of Test::Data::Sah::Human (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 FUNCTIONS
  
  =head2 test_human(%args)
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TEST_DATA_SAH_HUMAN

    $main::fatpacked{"Test/Data/Sah/Perl.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEST_DATA_SAH_PERL';
  package Test::Data::Sah::Perl;
  
  our $DATE = '2016-09-14'; # DATE
  our $VERSION = '0.87'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use Test::Data::Sah qw(run_spectest all_match);
  use Test::More 0.98;
  
  use Data::Sah qw(gen_validator);
  
  use Exporter qw(import);
  our @EXPORT_OK = qw(run_spectest_for_perl);
  
  sub run_spectest_for_perl {
      run_spectest(
          test_merge_clause_sets => 1,
          test_func => sub {
              my $test = shift;
  
              my $data = $test->{input};
              my $ho = exists($test->{output}); # has output
              my $vbool;
              eval { $vbool = gen_validator(
                  $test->{schema}, {accept_ref=>$ho}) };
              my $eval_err = $@;
              if ($test->{dies}) {
                  ok($eval_err, "compile error");
                  return;
              } else {
                  ok(!$eval_err, "compile success") or do {
                      diag $eval_err;
                      return;
                  };
              }
  
              if ($test->{valid_inputs}) {
                  # test multiple inputs, currently only done for rt=bool
                  for my $i (0..@{ $test->{valid_inputs} }-1) {
                      my $data = $test->{valid_inputs}[$i];
                      ok($vbool->($ho ? \$data : $data), "valid input [$i]");
                  }
                  for my $i (0..@{ $test->{invalid_inputs} }-1) {
                      my $data = $test->{invalid_inputs}[$i];
                      ok(!$vbool->($ho ? \$data : $data), "invalid input [$i]");
                  }
              } elsif (exists $test->{valid}) {
                  # test a single input
                  if ($test->{valid}) {
                      ok($vbool->($ho ? \$data : $data), "valid (rt=bool)");
                      if ($ho) {
                          is_deeply($data, $test->{output}, "output");
                      }
                  } else {
                      ok(!$vbool->($ho ? \$data : $data), "invalid (rt=bool)");
                  }
              }
  
              my $vstr = gen_validator($test->{schema},
                                       {return_type=>'str'});
              if (exists $test->{valid}) {
                  if ($test->{valid}) {
                      is($vstr->($test->{input}), "", "valid (rt=str)");
                  } else {
                      like($vstr->($test->{input}), qr/\S/, "invalid (rt=str)");
                  }
              }
  
              my $vfull = gen_validator($test->{schema},
                                        {return_type=>'full'});
              my $res = $vfull->($test->{input});
              is(ref($res), 'HASH', "validator (rt=full) returns hash");
              if (exists($test->{errors}) || exists($test->{warnings}) ||
                      exists($test->{valid})) {
                  my $errors = $test->{errors} // ($test->{valid} ? 0 : 1);
                  is(scalar(keys %{ $res->{errors} // {} }), $errors, "errors (rt=full)")
                      or diag explain $res;
                  my $warnings = $test->{warnings} // 0;
                  is(scalar(keys %{ $res->{warnings} // {} }), $warnings,
                     "warnings (rt=full)")
                      or diag explain $res;
              }
          }, # test_func
  
          skip_if => sub {
              my $t = shift;
              return 0 unless $t->{tags};
  
              # disabled temporarily because failing for bool, even though i've
              # adjust stuffs. but 'between' clause should be very seldomly used
              # on bool, moreover with op, so i haven't looked into it.
              return "currently failing"
                  if all_match([qw/type:bool clause:between op/], $t->{tags});
  
              for (qw/
  
                         check
                         check_each_elem
                         check_each_index
                         check_each_key
                         check_each_value
                         check_prop
                         exists
                         if
                         postfilters
                         prefilters
                         prop
                         uniq
  
                     /) {
                  return "clause $_ not yet implemented"
                      if all_match(["clause:$_"], $t->{tags});
              }
  
              return "properties are not yet implemented"
                  if grep {/^prop:/} @{ $t->{tags} };
  
              0;
          }, # skip_if
  
      );
  }
  
  1;
  # ABSTRACT: Routines for testing Data::Sah (perl compiler)
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Test::Data::Sah::Perl - Routines for testing Data::Sah (perl compiler)
  
  =head1 VERSION
  
  This document describes version 0.87 of Test::Data::Sah::Perl (from Perl distribution Data-Sah), released on 2016-09-14.
  
  =head1 FUNCTIONS
  
  =head2 run_spectest_for_perl()
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Data-Sah>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Data-Sah>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Sah>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TEST_DATA_SAH_PERL

    $main::fatpacked{"Test/Exception.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEST_EXCEPTION';
  use strict;
  use warnings;
  
  package Test::Exception;
  use Test::Builder;
  use Sub::Uplevel qw( uplevel );
  use base qw( Exporter );
  
  our $VERSION = '0.43';
  $VERSION = eval $VERSION;
  
  our @EXPORT = qw(dies_ok lives_ok throws_ok lives_and);
  
  my $Tester = Test::Builder->new;
  
  sub import {
      my $self = shift;
      if ( @_ ) {
          my $package = caller;
          $Tester->exported_to( $package );
          $Tester->plan( @_ );
      };
      $self->export_to_level( 1, $self, $_ ) foreach @EXPORT;
  }
  
  =head1 NAME
  
  Test::Exception - Test exception-based code
  
  =head1 SYNOPSIS
  
    use Test::More tests => 5;
    use Test::Exception;
  
    # or if you don't need Test::More
  
    use Test::Exception tests => 5;
  
    # then...
  
    # Check that the stringified exception matches given regex
    throws_ok { $foo->method } qr/division by zero/, 'zero caught okay';
  
    # Check an exception of the given class (or subclass) is thrown
    throws_ok { $foo->method } 'Error::Simple', 'simple error thrown';
    
    # all Test::Exceptions subroutines are guaranteed to preserve the state 
    # of $@ so you can do things like this after throws_ok and dies_ok
    like $@, 'what the stringified exception should look like';
  
    # Check that something died - we do not care why
    dies_ok { $foo->method } 'expecting to die';
  
    # Check that something did not die
    lives_ok { $foo->method } 'expecting to live';
  
    # Check that a test runs without an exception
    lives_and { is $foo->method, 42 } 'method is 42';
    
    # or if you don't like prototyped functions
    
    throws_ok( sub { $foo->method }, qr/division by zero/,
        'zero caught okay' );
    throws_ok( sub { $foo->method }, 'Error::Simple', 
        'simple error thrown' );
    dies_ok( sub { $foo->method }, 'expecting to die' );
    lives_ok( sub { $foo->method }, 'expecting to live' );
    lives_and( sub { is $foo->method, 42 }, 'method is 42' );
  
  
  =head1 DESCRIPTION
  
  This module provides a few convenience methods for testing exception based code. It is built with 
  L<Test::Builder> and plays happily with L<Test::More> and friends.
  
  If you are not already familiar with L<Test::More> now would be the time to go take a look.
  
  You can specify the test plan when you C<use Test::Exception> in the same way as C<use Test::More>.
  See L<Test::More> for details.
  
  NOTE: Test::Exception only checks for exceptions. It will ignore other methods of stopping 
  program execution - including exit(). If you have an exit() in evalled code Test::Exception
  will not catch this with any of its testing functions.
  
  NOTE: This module uses L<Sub::Uplevel> and relies on overriding
  C<CORE::GLOBAL::caller> to hide your test blocks from the call stack.  If this
  use of global overrides concerns you, the L<Test::Fatal> module offers a more
  minimalist alternative.
  
  =cut
  
  sub _quiet_caller (;$) { ## no critic Prototypes
      my $height = $_[0];
      $height++;
  
      if ( CORE::caller() eq 'DB' ) {
          # passthrough the @DB::args trick
          package DB;
          if( wantarray ) {
              if ( !@_ ) {
                  return (CORE::caller($height))[0..2];
              }
              else {
                  # If we got here, we are within a Test::Exception test, and
                  # something is producing a stacktrace. In case this is a full
                  # trace (i.e. confess() ), we have to make sure that the sub
                  # args are not visible. If we do not do this, and the test in
                  # question is throws_ok() with a regex, it will end up matching
                  # against itself in the args to throws_ok().
                  #
                  # While it is possible (and maybe wise), to test if we are
                  # indeed running under throws_ok (by crawling the stack right
                  # up from here), the old behavior of Test::Exception was to
                  # simply obliterate @DB::args altogether in _quiet_caller, so
                  # we are just preserving the behavior to avoid surprises
                  #
                  my @frame_info = CORE::caller($height);
                  @DB::args = ();
                  return @frame_info;
              }
          }
  
          # fallback if nothing above returns
          return CORE::caller($height);
      }
      else {
          if( wantarray and !@_ ) {
              return (CORE::caller($height))[0..2];
          }
          else {
              return CORE::caller($height);
          }
      }
  }
  
  sub _try_as_caller {
      my $coderef = shift;
  
      # local works here because Sub::Uplevel has already overridden caller
      local *CORE::GLOBAL::caller;
      { no warnings 'redefine'; *CORE::GLOBAL::caller = \&_quiet_caller; }
  
      eval { uplevel 3, $coderef };
      return $@;
  };
  
  
  sub _is_exception {
      my $exception = shift;
      return ref $exception || $exception ne '';
  };
  
  
  sub _exception_as_string {
      my ( $prefix, $exception ) = @_;
      return "$prefix normal exit" unless _is_exception( $exception );
      my $class = ref $exception;
      $exception = "$class ($exception)" 
              if $class && "$exception" !~ m/^\Q$class/;
      chomp $exception;
      return "$prefix $exception";
  };
  
  
  =over 4
  
  =item B<throws_ok>
  
  Tests to see that a specific exception is thrown. throws_ok() has two forms: 
  
    throws_ok BLOCK REGEX, TEST_DESCRIPTION
    throws_ok BLOCK CLASS, TEST_DESCRIPTION
  
  In the first form the test passes if the stringified exception matches the give regular expression. For example:
  
      throws_ok { read_file( 'unreadable' ) } qr/No file/, 'no file';
  
  If your perl does not support C<qr//> you can also pass a regex-like string, for example:
  
      throws_ok { read_file( 'unreadable' ) } '/No file/', 'no file';
  
  The second form of throws_ok() test passes if the exception is of the same class as the one supplied, or a subclass of that class. For example:
  
      throws_ok { $foo->bar } "Error::Simple", 'simple error';
  
  Will only pass if the C<bar> method throws an Error::Simple exception, or a subclass of an Error::Simple exception.
  
  You can get the same effect by passing an instance of the exception you want to look for. The following is equivalent to the previous example:
  
      my $SIMPLE = Error::Simple->new;
      throws_ok { $foo->bar } $SIMPLE, 'simple error';
  
  Should a throws_ok() test fail it produces appropriate diagnostic messages. For example:
  
      not ok 3 - simple error
      #     Failed test (test.t at line 48)
      # expecting: Error::Simple exception
      # found: normal exit
  
  Like all other Test::Exception functions you can avoid prototypes by passing a subroutine explicitly:
  
      throws_ok( sub {$foo->bar}, "Error::Simple", 'simple error' );
  
  A true value is returned if the test succeeds, false otherwise. On exit $@ is guaranteed to be the cause of death (if any).
  
  A description of the exception being checked is used if no optional test description is passed.
  
  NOTE: Remember when you C<die $string_without_a_trailing_newline> perl will 
  automatically add the current script line number, input line number and a newline. This will
  form part of the string that throws_ok regular expressions match against.
  
  
  =cut
  
  
  sub throws_ok (&$;$) {
      my ( $coderef, $expecting, $description ) = @_;
      unless (defined $expecting) {
          require Carp;
          Carp::croak( "throws_ok: must pass exception class/object or regex" ); 
      }
      $description = _exception_as_string( "threw", $expecting )
          unless defined $description;
      my $exception = _try_as_caller( $coderef );
      my $regex = $Tester->maybe_regex( $expecting );
      my $ok = $regex 
          ? ( $exception =~ m/$regex/ ) 
          : eval { 
              $exception->isa( ref $expecting ? ref $expecting : $expecting ) 
          };
      $Tester->ok( $ok, $description );
      unless ( $ok ) {
          $Tester->diag( _exception_as_string( "expecting:", $expecting ) );
          $Tester->diag( _exception_as_string( "found:", $exception ) );
      };
      $@ = $exception;
      return $ok;
  };
  
  
  =item B<dies_ok>
  
  Checks that a piece of code dies, rather than returning normally. For example:
  
      sub div {
          my ( $a, $b ) = @_;
          return $a / $b;
      };
  
      dies_ok { div( 1, 0 ) } 'divide by zero detected';
  
      # or if you don't like prototypes
      dies_ok( sub { div( 1, 0 ) }, 'divide by zero detected' );
  
  A true value is returned if the test succeeds, false otherwise. On exit $@ is guaranteed to be the cause of death (if any).
  
  Remember: This test will pass if the code dies for any reason. If you care about the reason it might be more sensible to write a more specific test using throws_ok().
  
  The test description is optional, but recommended. 
  
  =cut
  
  sub dies_ok (&;$) {
      my ( $coderef, $description ) = @_;
      my $exception = _try_as_caller( $coderef );
      my $ok = $Tester->ok( _is_exception($exception), $description );
      $@ = $exception;
      return $ok;
  }
  
  
  =item B<lives_ok>
  
  Checks that a piece of code doesn't die. This allows your test script to continue, rather than aborting if you get an unexpected exception. For example:
  
      sub read_file {
          my $file = shift;
          local $/;
          open my $fh, '<', $file or die "open failed ($!)\n";
          $file = <FILE>;
          return $file;
      };
  
      my $file;
      lives_ok { $file = read_file('test.txt') } 'file read';
  
      # or if you don't like prototypes
      lives_ok( sub { $file = read_file('test.txt') }, 'file read' );
  
  Should a lives_ok() test fail it produces appropriate diagnostic messages. For example:
  
      not ok 1 - file read
      #     Failed test (test.t at line 15)
      # died: open failed (No such file or directory)
  
  A true value is returned if the test succeeds, false otherwise. On exit $@ is guaranteed to be the cause of death (if any).
  
  The test description is optional, but recommended. 
  
  =cut
  
  sub lives_ok (&;$) {
      my ( $coderef, $description ) = @_;
      my $exception = _try_as_caller( $coderef );
      my $ok = $Tester->ok( ! _is_exception( $exception ), $description );
      $Tester->diag( _exception_as_string( "died:", $exception ) ) unless $ok;
      $@ = $exception;
      return $ok;
  }
  
  
  =item B<lives_and>
  
  Run a test that may throw an exception. For example, instead of doing:
  
    my $file;
    lives_ok { $file = read_file('answer.txt') } 'read_file worked';
    is $file, "42", 'answer was 42';
  
  You can use lives_and() like this:
  
    lives_and { is read_file('answer.txt'), "42" } 'answer is 42';
    # or if you don't like prototypes
    lives_and(sub {is read_file('answer.txt'), "42"}, 'answer is 42');
  
  Which is the same as doing
  
    is read_file('answer.txt'), "42\n", 'answer is 42';
  
  unless C<read_file('answer.txt')> dies, in which case you get the same kind of error as lives_ok()
  
    not ok 1 - answer is 42
    #     Failed test (test.t at line 15)
    # died: open failed (No such file or directory)
  
  A true value is returned if the test succeeds, false otherwise. On exit $@ is guaranteed to be the cause of death (if any).
  
  The test description is optional, but recommended.
  
  =cut
  
  sub lives_and (&;$) {
      my ( $test, $description ) = @_;
      {
          my $ok = \&Test::Builder::ok;
          no warnings;
          local *Test::Builder::ok = sub {
              local $Test::Builder::Level = $Test::Builder::Level + 1;
              $_[2] = $description unless defined $_[2];
              $ok->(@_);
          };
          use warnings;
          eval { $test->() } and return 1;
      };
      my $exception = $@;
      if ( _is_exception( $exception ) ) {
          $Tester->ok( 0, $description );
          $Tester->diag( _exception_as_string( "died:", $exception ) );
      };
      $@ = $exception;
      return;
  }
  
  =back
  
  
  =head1 SKIPPING TEST::EXCEPTION TESTS
  
  Sometimes we want to use Test::Exception tests in a test suite, but don't want to force the user to have Test::Exception installed. One way to do this is to skip the tests if Test::Exception is absent. You can do this with code something like this:
  
    use strict;
    use warnings;
    use Test::More;
    
    BEGIN {
        eval "use Test::Exception";
        plan skip_all => "Test::Exception needed" if $@;
    }
    
    plan tests => 2;
    # ... tests that need Test::Exception ...
  
  Note that we load Test::Exception in a C<BEGIN> block ensuring that the subroutine prototypes are in place before the rest of the test script is compiled.
  
  
  =head1 BUGS
  
  There are some edge cases in Perl's exception handling where Test::Exception will miss exceptions
  thrown in DESTROY blocks. See the RT bug L<http://rt.cpan.org/Ticket/Display.html?id=24678> for
  details, along with the t/edge-cases.t in the distribution test suite. These will be addressed in
  a future Test::Exception release.
  
  If you find any more bugs please let me know by e-mail, or report the problem with 
  L<http://rt.cpan.org/>.
  
  
  =head1 COMMUNITY
  
  =over 4
  
  =item perl-qa
  
  If you are interested in testing using Perl I recommend you visit L<http://qa.perl.org/> and join the excellent perl-qa mailing list. See L<http://lists.perl.org/showlist.cgi?name=perl-qa> for details on how to subscribe.
  
  =item perlmonks
  
  You can find users of Test::Exception, including the module author, on  L<http://www.perlmonks.org/>. Feel free to ask questions on Test::Exception there.
  
  =item CPAN::Forum
  
  The CPAN Forum is a web forum for discussing Perl's CPAN modules.   The Test::Exception forum can be found at L<http://www.cpanforum.com/dist/Test-Exception>.
  
  =item AnnoCPAN
  
  AnnoCPAN is a web site that allows community annotations of Perl module documentation. The Test::Exception annotations can be found at L<http://annocpan.org/~ADIE/Test-Exception/>.
  
  =back
  
  
  =head1 TO DO
  
  If you think this module should do something that it doesn't (or does something that it shouldn't) please let me know.
  
  You can see my current to do list at L<http://adrianh.tadalist.com/lists/public/15421>, with an RSS feed of changes at L<http://adrianh.tadalist.com/lists/feed_public/15421>.
  
  
  =head1 ACKNOWLEDGMENTS
  
  Thanks to chromatic and Michael G Schwern for the excellent Test::Builder, without which this module wouldn't be possible.
  
  Thanks to 
  Adam Kennedy,
  Andy Lester, 
  Aristotle Pagaltzis, 
  Ben Prew, 
  Cees Hek,
  Chris Dolan,
  chromatic, 
  Curt Sampson,
  David Cantrell,
  David Golden, 
  David Tulloh,
  David Wheeler, 
  J. K. O'Brien,
  Janek Schleicher,
  Jim Keenan, 
  Jos I. Boumans, 
  Joshua ben Jore,
  Jost Krieger,
  Mark Fowler, 
  Michael G Schwern, 
  Nadim Khemir,
  Paul McCann,
  Perrin Harkins, 
  Peter Rabbitson,
  Peter Scott, 
  Ricardo Signes,
  Rob Muhlestein,
  Scott R. Godin,
  Steve Purkis,
  Steve, 
  Tim Bunce,
  and various anonymous folk for comments, suggestions, bug reports and patches.
  
  =head1 AUTHOR
  
  Adrian Howard <adrianh@quietstars.com>
  
  If you can spare the time, please drop me a line if you find this module useful.
  
  
  =head1 SEE ALSO
  
  =over 4
  
  =item L<http://del.icio.us/tag/Test::Exception>
  
  Delicious links on Test::Exception.
  
  =item L<Test::Fatal>
  
  A slightly different interface to testing exceptions, without overriding C<CORE::caller>.
  
  =item L<Test::Warnings> & L<Test::Warn> & L<Test::NoWarnings>
  
  Modules to help test warnings.
  
  =item L<Test::Builder>
  
  Support module for building test libraries.
  
  =item L<Test::Simple> & L<Test::More>
  
  Basic utilities for writing tests.
  
  =item L<http://qa.perl.org/test-modules.html>
  
  Overview of some of the many testing modules available on CPAN.
  
  =item L<http://del.icio.us/tag/perl+testing>
  
  Delicious links on perl testing.
  
  =back
  
  
  =head1 LICENCE
  
  Copyright 2002-2007 Adrian Howard, All Rights Reserved.
  
  This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
  
  =cut
  
  1;
TEST_EXCEPTION

    $main::fatpacked{"Test/Fatal.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEST_FATAL';
  use strict;
  use warnings;
  package Test::Fatal;
  # ABSTRACT: incredibly simple helpers for testing code with exceptions
  $Test::Fatal::VERSION = '0.014';
  #pod =head1 SYNOPSIS
  #pod
  #pod   use Test::More;
  #pod   use Test::Fatal;
  #pod
  #pod   use System::Under::Test qw(might_die);
  #pod
  #pod   is(
  #pod     exception { might_die; },
  #pod     undef,
  #pod     "the code lived",
  #pod   );
  #pod
  #pod   like(
  #pod     exception { might_die; },
  #pod     qr/turns out it died/,
  #pod     "the code died as expected",
  #pod   );
  #pod
  #pod   isa_ok(
  #pod     exception { might_die; },
  #pod     'Exception::Whatever',
  #pod     'the thrown exception',
  #pod   );
  #pod
  #pod =head1 DESCRIPTION
  #pod
  #pod Test::Fatal is an alternative to the popular L<Test::Exception>.  It does much
  #pod less, but should allow greater flexibility in testing exception-throwing code
  #pod with about the same amount of typing.
  #pod
  #pod It exports one routine by default: C<exception>.
  #pod
  #pod =cut
  
  use Carp ();
  use Try::Tiny 0.07;
  
  use Exporter 5.57 'import';
  
  our @EXPORT    = qw(exception);
  our @EXPORT_OK = qw(exception success dies_ok lives_ok);
  
  #pod =func exception
  #pod
  #pod   my $exception = exception { ... };
  #pod
  #pod C<exception> takes a bare block of code and returns the exception thrown by
  #pod that block.  If no exception was thrown, it returns undef.
  #pod
  #pod B<Achtung!>  If the block results in a I<false> exception, such as 0 or the
  #pod empty string, Test::Fatal itself will die.  Since either of these cases
  #pod indicates a serious problem with the system under testing, this behavior is
  #pod considered a I<feature>.  If you must test for these conditions, you should use
  #pod L<Try::Tiny>'s try/catch mechanism.  (Try::Tiny is the underlying exception
  #pod handling system of Test::Fatal.)
  #pod
  #pod Note that there is no TAP assert being performed.  In other words, no "ok" or
  #pod "not ok" line is emitted.  It's up to you to use the rest of C<exception> in an
  #pod existing test like C<ok>, C<isa_ok>, C<is>, et cetera.  Or you may wish to use
  #pod the C<dies_ok> and C<lives_ok> wrappers, which do provide TAP output.
  #pod
  #pod C<exception> does I<not> alter the stack presented to the called block, meaning
  #pod that if the exception returned has a stack trace, it will include some frames
  #pod between the code calling C<exception> and the thing throwing the exception.
  #pod This is considered a I<feature> because it avoids the occasionally twitchy
  #pod C<Sub::Uplevel> mechanism.
  #pod
  #pod B<Achtung!>  This is not a great idea:
  #pod
  #pod   sub exception_like(&$;$) {
  #pod       my ($code, $pattern, $name) = @_;
  #pod       like( &exception($code), $pattern, $name );
  #pod   }
  #pod
  #pod   exception_like(sub { }, qr/foo/, 'foo appears in the exception');
  #pod
  #pod If the code in the C<...> is going to throw a stack trace with the arguments to
  #pod each subroutine in its call stack (for example via C<Carp::confess>,
  #pod the test name, "foo appears in the exception" will itself be matched by the
  #pod regex.  Instead, write this:
  #pod
  #pod   like( exception { ... }, qr/foo/, 'foo appears in the exception' );
  #pod
  #pod B<Achtung>: One final bad idea:
  #pod
  #pod   isnt( exception { ... }, undef, "my code died!");
  #pod
  #pod It's true that this tests that your code died, but you should really test that
  #pod it died I<for the right reason>.  For example, if you make an unrelated mistake
  #pod in the block, like using the wrong dereference, your test will pass even though
  #pod the code to be tested isn't really run at all.  If you're expecting an
  #pod inspectable exception with an identifier or class, test that.  If you're
  #pod expecting a string exception, consider using C<like>.
  #pod
  #pod =cut
  
  our ($REAL_TBL, $REAL_CALCULATED_TBL) = (1, 1);
  
  sub exception (&) {
    my $code = shift;
  
    return try {
      my $incremented = $Test::Builder::Level - $REAL_CALCULATED_TBL;
      local $Test::Builder::Level = $REAL_CALCULATED_TBL;
      if ($incremented) {
          # each call to exception adds 5 stack frames
          $Test::Builder::Level += 5;
          for my $i (1..$incremented) {
              # -2 because we want to see it from the perspective of the call to
              # is() within the call to $code->()
              my $caller = caller($Test::Builder::Level - 2);
              if ($caller eq __PACKAGE__) {
                  # each call to exception adds 5 stack frames
                  $Test::Builder::Level = $Test::Builder::Level + 5;
              }
              else {
                  $Test::Builder::Level = $Test::Builder::Level + 1;
              }
          }
      }
  
      local $REAL_CALCULATED_TBL = $Test::Builder::Level;
      $code->();
      return undef;
    } catch {
      return $_ if $_;
  
      my $problem = defined $_ ? 'false' : 'undef';
      Carp::confess("$problem exception caught by Test::Fatal::exception");
    };
  }
  
  #pod =func success
  #pod
  #pod   try {
  #pod     should_live;
  #pod   } catch {
  #pod     fail("boo, we died");
  #pod   } success {
  #pod     pass("hooray, we lived");
  #pod   };
  #pod
  #pod C<success>, exported only by request, is a L<Try::Tiny> helper with semantics
  #pod identical to L<C<finally>|Try::Tiny/finally>, but the body of the block will
  #pod only be run if the C<try> block ran without error.
  #pod
  #pod Although almost any needed exception tests can be performed with C<exception>,
  #pod success blocks may sometimes help organize complex testing.
  #pod
  #pod =cut
  
  sub success (&;@) {
    my $code = shift;
    return finally( sub {
      return if @_; # <-- only run on success
      $code->();
    }, @_ );
  }
  
  #pod =func dies_ok
  #pod
  #pod =func lives_ok
  #pod
  #pod Exported only by request, these two functions run a given block of code, and
  #pod provide TAP output indicating if it did, or did not throw an exception. 
  #pod These provide an easy upgrade path for replacing existing unit tests based on
  #pod C<Test::Exception>.
  #pod
  #pod RJBS does not suggest using this except as a convenience while porting tests to
  #pod use Test::Fatal's C<exception> routine.
  #pod
  #pod   use Test::More tests => 2;
  #pod   use Test::Fatal qw(dies_ok lives_ok);
  #pod
  #pod   dies_ok { die "I failed" } 'code that fails';
  #pod
  #pod   lives_ok { return "I'm still alive" } 'code that does not fail';
  #pod
  #pod =cut
  
  my $Tester;
  
  # Signature should match that of Test::Exception
  sub dies_ok (&;$) {
    my $code = shift;
    my $name = shift;
  
    require Test::Builder;
    $Tester ||= Test::Builder->new;
  
    my $ok = $Tester->ok( exception( \&$code ), $name );
    $ok or $Tester->diag( "expected an exception but none was raised" );
    return $ok;
  }
  
  sub lives_ok (&;$) {
    my $code = shift;
    my $name = shift;
  
    require Test::Builder;
    $Tester ||= Test::Builder->new;
  
    my $ok = $Tester->ok( !exception( \&$code ), $name );
    $ok or $Tester->diag( "expected return but an exception was raised" );
    return $ok;
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Test::Fatal - incredibly simple helpers for testing code with exceptions
  
  =head1 VERSION
  
  version 0.014
  
  =head1 SYNOPSIS
  
    use Test::More;
    use Test::Fatal;
  
    use System::Under::Test qw(might_die);
  
    is(
      exception { might_die; },
      undef,
      "the code lived",
    );
  
    like(
      exception { might_die; },
      qr/turns out it died/,
      "the code died as expected",
    );
  
    isa_ok(
      exception { might_die; },
      'Exception::Whatever',
      'the thrown exception',
    );
  
  =head1 DESCRIPTION
  
  Test::Fatal is an alternative to the popular L<Test::Exception>.  It does much
  less, but should allow greater flexibility in testing exception-throwing code
  with about the same amount of typing.
  
  It exports one routine by default: C<exception>.
  
  =head1 FUNCTIONS
  
  =head2 exception
  
    my $exception = exception { ... };
  
  C<exception> takes a bare block of code and returns the exception thrown by
  that block.  If no exception was thrown, it returns undef.
  
  B<Achtung!>  If the block results in a I<false> exception, such as 0 or the
  empty string, Test::Fatal itself will die.  Since either of these cases
  indicates a serious problem with the system under testing, this behavior is
  considered a I<feature>.  If you must test for these conditions, you should use
  L<Try::Tiny>'s try/catch mechanism.  (Try::Tiny is the underlying exception
  handling system of Test::Fatal.)
  
  Note that there is no TAP assert being performed.  In other words, no "ok" or
  "not ok" line is emitted.  It's up to you to use the rest of C<exception> in an
  existing test like C<ok>, C<isa_ok>, C<is>, et cetera.  Or you may wish to use
  the C<dies_ok> and C<lives_ok> wrappers, which do provide TAP output.
  
  C<exception> does I<not> alter the stack presented to the called block, meaning
  that if the exception returned has a stack trace, it will include some frames
  between the code calling C<exception> and the thing throwing the exception.
  This is considered a I<feature> because it avoids the occasionally twitchy
  C<Sub::Uplevel> mechanism.
  
  B<Achtung!>  This is not a great idea:
  
    sub exception_like(&$;$) {
        my ($code, $pattern, $name) = @_;
        like( &exception($code), $pattern, $name );
    }
  
    exception_like(sub { }, qr/foo/, 'foo appears in the exception');
  
  If the code in the C<...> is going to throw a stack trace with the arguments to
  each subroutine in its call stack (for example via C<Carp::confess>,
  the test name, "foo appears in the exception" will itself be matched by the
  regex.  Instead, write this:
  
    like( exception { ... }, qr/foo/, 'foo appears in the exception' );
  
  B<Achtung>: One final bad idea:
  
    isnt( exception { ... }, undef, "my code died!");
  
  It's true that this tests that your code died, but you should really test that
  it died I<for the right reason>.  For example, if you make an unrelated mistake
  in the block, like using the wrong dereference, your test will pass even though
  the code to be tested isn't really run at all.  If you're expecting an
  inspectable exception with an identifier or class, test that.  If you're
  expecting a string exception, consider using C<like>.
  
  =head2 success
  
    try {
      should_live;
    } catch {
      fail("boo, we died");
    } success {
      pass("hooray, we lived");
    };
  
  C<success>, exported only by request, is a L<Try::Tiny> helper with semantics
  identical to L<C<finally>|Try::Tiny/finally>, but the body of the block will
  only be run if the C<try> block ran without error.
  
  Although almost any needed exception tests can be performed with C<exception>,
  success blocks may sometimes help organize complex testing.
  
  =head2 dies_ok
  
  =head2 lives_ok
  
  Exported only by request, these two functions run a given block of code, and
  provide TAP output indicating if it did, or did not throw an exception. 
  These provide an easy upgrade path for replacing existing unit tests based on
  C<Test::Exception>.
  
  RJBS does not suggest using this except as a convenience while porting tests to
  use Test::Fatal's C<exception> routine.
  
    use Test::More tests => 2;
    use Test::Fatal qw(dies_ok lives_ok);
  
    dies_ok { die "I failed" } 'code that fails';
  
    lives_ok { return "I'm still alive" } 'code that does not fail';
  
  =head1 AUTHOR
  
  Ricardo Signes <rjbs@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2010 by Ricardo Signes.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TEST_FATAL

    $main::fatpacked{"Test/Perinci/Sub/Wrapper.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEST_PERINCI_SUB_WRAPPER';
  package Test::Perinci::Sub::Wrapper;
  
  our $DATE = '2016-06-02'; # DATE
  our $VERSION = '0.83'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  use Function::Fallback::CoreOrPP qw(clone);
  #use List::Util qw(shuffle);
  use Perinci::Sub::Wrapper qw(wrap_sub);
  use Test::More 0.96;
  
  our @ISA = qw(Exporter);
  our @EXPORT_OK = qw(test_wrap);
  
  sub test_wrap {
      my %test_args = @_;
      $test_args{wrap_args} or die "BUG: wrap_args not defined";
      my $test_name = $test_args{name} or die "BUG: test_name not defined";
  
      for my $wrapper_type (qw/dynamic embed/) {
          next if $wrapper_type eq 'dynamic' && $test_args{skip_dynamic};
          next if $wrapper_type eq 'embed'   && $test_args{skip_embed};
          subtest "$test_name ($wrapper_type)" => sub {
  
              if ($test_args{pretest}) {
                  $test_args{pretest}->();
              }
  
              my $wrap_args = clone($test_args{wrap_args});
              die "BUG: embed must not be specified in wrap_args, test_wrap() ".
                  "will always test dynamic (embed=0) *and* embed mode"
                      if exists $wrap_args->{embed};
              if ($wrapper_type eq 'embed') {
                  $wrap_args->{embed} = 1;
                  #diag explain $wrap_args->{meta};
              } else {
                  $wrap_args->{embed} = 0;
              }
  
              my $wrap_res;
              eval { $wrap_res = wrap_sub(%$wrap_args) };
              my $wrap_eval_err = $@;
              if ($test_args{wrap_dies}) {
                  ok($wrap_eval_err, "wrap dies");
                  return;
              } else {
                  ok(!$wrap_eval_err, "wrap doesn't die") or do {
                      diag $wrap_eval_err;
                      return;
                  };
              }
  
              if (defined $test_args{wrap_status}) {
                  is(ref($wrap_res), 'ARRAY', 'wrap res is array');
                  is($wrap_res->[0], $test_args{wrap_status},
                     "wrap status is $test_args{wrap_status}")
                      or diag "wrap res: ", explain($wrap_res);
              }
  
              return unless $wrap_res->[0] == 200;
  
              my $sub;
              if ($wrapper_type eq 'embed') {
                  my $src = $wrap_res->[2]{source};
                  my $meta = $wrap_res->[2]{meta};
                  my $args_as = $meta->{args_as};
                  my $orig_args_as = $wrap_args->{meta}{args_as} // 'hash';
                  my $sub_name = $wrap_res->[2]{sub_name};
                  my $eval_src = join(
                      "\n",
                      $src->{presub1},
                      $src->{presub2},
                      'sub {',
                      '    my %args;',
                      ('    my @args;') x !!($orig_args_as eq 'array' || $args_as eq 'array'),
                      ('    my $args;') x !!($orig_args_as =~ /ref/ || $args_as =~ /ref/),
                      '    '.
                          ($args_as eq 'hash' ? '%args = @_;' :
                               $args_as eq 'hashref' ? '$args = $_[0] // {}; %args = %$args;' :
                                   $args_as eq 'array' ? '@args = @_;' :
                                       '$args = $_[0] // [];'),
                      $src->{preamble},
                      ($src->{postamble} ? '    $_w_res = do {' : ''),
                      $sub_name. ($sub_name =~ /\A\$/ ? '->':'').'('.
                          ($orig_args_as eq 'hash' ? '%args' :
                               $orig_args_as eq 'hashref' ? '$args' :
                                   $orig_args_as eq 'array' ? '@args' :
                                       '$args').');',
                      ($src->{postamble} ? '}; # do' : ''),
                      $src->{postamble},
                      '}; # sub',
                  );
                  $sub = eval $eval_src;
                  my $eval_err = $@;
                  ok(!$eval_err, "embed code compiles ok") or do {
                      diag "eval err: ", $eval_err;
                      diag "eval source: ", $eval_src;
                      return;
                  };
                  diag "eval source: ", $eval_src
                      if $ENV{LOG_PERINCI_WRAPPER_CODE};
              } else {
  
                  # check that we don't generate comment after code (unless it
                  # uses '##' instead of '#'), because this makes cutting comments
                  # easier. XXX this is using a simple regex and misses some.
                  for my $line (split /^/, $wrap_res->[2]{source}) {
                      if ($line =~ /(.*?)\s+#\s+(.*)/) {
                          my ($before, $after) = ($1, $2);
                          next unless $before =~ /\S/;
                          ok 0; diag "Source code contains comment line after some code '$line' (if you do this, you must use ## instead of # to help ease removing comment lines (e.g. in Dist::Zilla::Plugin::Rinci::Wrap))";
                      }
                  }
  
                  $sub = $wrap_res->[2]{sub};
              }
  
              # testing a single sub call
              my $call_argsr = $test_args{call_argsr};
              my $call_res;
              if ($call_argsr) {
                  eval { $call_res = $sub->(@$call_argsr) };
                  my $call_eval_err = $@;
                  if ($test_args{call_dies}) {
                      ok($call_eval_err, "call dies");
                      if ($test_args{call_die_message}) {
                          like($call_eval_err, $test_args{call_die_message},
                               "call die message");
                      }
                      return;
                  } else {
                      ok(!$call_eval_err, "call doesn't die")
                          or diag $call_eval_err;
                  }
  
                  if (defined $test_args{call_status}) {
                      is(ref($call_res), 'ARRAY', 'call res is array')
                          or diag "call res = ", explain($call_res);
                      is($call_res->[0], $test_args{call_status},
                         "call status is $test_args{call_status}")
                          or diag "call res = ", explain($call_res);
                  }
  
                  if (exists $test_args{call_res}) {
                      is_deeply($call_res, $test_args{call_res},
                                "call res")
                          or diag explain $call_res;
                  }
  
                  if (exists $test_args{call_actual_res}) {
                      is_deeply($call_res->[2], $test_args{call_actual_res},
                                "call actual res")
                          or diag explain $call_res->[2];
                  }
  
                  if (exists $test_args{call_actual_res_re}) {
                      like($call_res->[2], $test_args{call_actual_res_re},
                           "call actual res");
                  }
              }
  
              # testing multiple sub calls
              if ($test_args{calls}) {
                  my $i = 0;
                  for my $call (@{$test_args{calls}}) {
                      $i++;
                      subtest "call #$i: ".($call->{name} // "") => sub {
                          my $res;
                          eval { $res = $sub->(@{$call->{argsr}}) };
                          my $eval_err = $@;
                          if ($call->{dies}) {
                              ok($eval_err, "dies");
                              if ($call->{die_message}) {
                                  like($eval_err, $call->{die_message},
                                       "die message");
                              }
                              return;
                          } else {
                              ok(!$eval_err, "doesn't die")
                                  or diag $eval_err;
                          }
  
                          if (defined $call->{status}) {
                              is(ref($res), 'ARRAY', 'res is array')
                                  or diag "res = ", explain($res);
                              is($res->[0], $call->{status},
                                 "status is $call->{status}")
                                  or diag "res = ", explain($res);
                          }
  
                          if (exists $call->{res}) {
                              is_deeply($res, $call->{res}, "res")
                                  or diag explain $res;
                          }
  
                          if (exists $call->{actual_res}) {
                              is_deeply($res->[2], $call->{actual_res}, "actual res")
                                  or diag explain $res->[2];
                          }
  
                          if (exists $call->{actual_res_re}) {
                              like($res->[2], $call->{actual_res_re},
                                   "actual res re");
                          }
                      }; # subtest call #$i
                  }
              } # if calls
  
              if ($test_args{posttest}) {
                  $test_args{posttest}->($wrap_res, $call_res, $sub);
              }
  
              done_testing();
  
          }; # subtest
      } # for $wrapper_type
  }
  
  1;
  # ABSTRACT: Provide test_wrap() to test wrapper
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Test::Perinci::Sub::Wrapper - Provide test_wrap() to test wrapper
  
  =head1 VERSION
  
  This document describes version 0.83 of Test::Perinci::Sub::Wrapper (from Perl distribution Perinci-Sub-Wrapper), released on 2016-06-02.
  
  =for Pod::Coverage test_wrap
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Perinci-Sub-Wrapper>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/sharyanto/perl-Perinci-Sub-Wrapper>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Perinci-Sub-Wrapper>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TEST_PERINCI_SUB_WRAPPER

    $main::fatpacked{"Text/ANSI/BaseUtil.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEXT_ANSI_BASEUTIL';
  package Text::ANSI::BaseUtil;
  
  our $DATE = '2016-03-11'; # DATE
  our $VERSION = '0.22'; # VERSION
  
  use 5.010001;
  use strict;
  use warnings;
  
  use List::Util qw(min max);
  
  our $re       = qr/\e\[[0-9;]+m/s;
  our $re_mult  = qr/(?:\e\[[0-9;]+m)+/s;
  
  sub ta_detect {
      my $text = shift;
      $text =~ $re ? 1:0;
  }
  
  sub ta_length {
      my $text = shift;
      length(ta_strip($text));
  }
  
  sub _ta_length_height {
      my ($is_mb, $text) = @_;
      my $num_lines = 0;
      my @lens;
      for my $e (split /(\r?\n)/, ta_strip($text)) {
          if ($e =~ /\n/) {
              $num_lines++;
              next;
          }
          $num_lines = 1 if $num_lines == 0;
          push @lens, $is_mb ? Text::WideChar::Util::mbswidth($e) : length($e);
      }
      [max(@lens) // 0, $num_lines];
  }
  
  sub ta_length_height {
      _ta_length_height(0, @_);
  }
  
  sub ta_mbswidth_height {
      _ta_length_height(1, @_);
  }
  
  sub ta_strip {
      my $text = shift;
      $text =~ s/$re//go;
      $text;
  }
  
  sub ta_extract_codes {
      my $text = shift;
      my $res = "";
      $res .= $1 while $text =~ /($re_mult)/go;
      $res;
  }
  
  sub ta_split_codes {
      my $text = shift;
      return split(/($re_mult)/o, $text);
  }
  
  sub ta_split_codes_single {
      my $text = shift;
      return split(/($re)/o, $text);
  }
  
  # same like _ta_mbswidth, but without handling multiline text
  sub _ta_mbswidth0 {
      my $text = shift;
      Text::WideChar::Util::mbswidth(ta_strip($text));
  }
  
  sub ta_mbswidth {
      my $text = shift;
      ta_mbswidth_height($text)->[0];
  }
  
  sub _ta_wrap {
      my ($is_mb, $text, $width, $opts) = @_;
      $width //= 80;
      $opts  //= {};
  
      # basically similar to Text::WideChar::Util's algorithm. we adjust for
      # dealing with ANSI codes by splitting codes first (to easily do color
      # resets/replays), then grouping into words and paras, then doing wrapping.
  
      my $_re1 = $is_mb ?
          qr/($Text::WideChar::Util::re_cjk+)|(\S+)|(\s+)/ :
          qr/()(\S+)|(\s+)/;
  
      my $_re2 = $is_mb ?
          qr/($Text::WideChar::Util::re_cjk_class+)|
             ($Text::WideChar::Util::re_cjk_negclass+)/x : undef;
  
      my @termst; # store term type, 's' (spaces), 'w' (word), 'c' (cjk word) or
                  # 'p' (parabreak)
      my @terms;  # store the text (w/ codes); for ws, only store the codes
      my @pterms; # store the plaintext ver, but only for ws to check parabreak
      my @termsw; # store width of each term, only for non-ws
      my @termsc; # store color replay code
      {
          my @ch = ta_split_codes_single($text);
          my $crcode = ""; # code for color replay to be put at the start of line
          my $term      = '';
          my $pterm     = '';
          my $prev_type = '';
          while (my ($pt, $c) = splice(@ch, 0, 2)) {
              #use Data::Dump; print "D:chunk: "; dd [$pt, $c];
  
              # split into (CJK and non-CJK) words and spaces.
  
              my @s; # (WORD1, TYPE, ...) where type is 's' for space, 'c' for
                     # CJK word, or 'w' for non-CJK word
              while ($pt =~ /$_re1/g) {
                  if ($is_mb && $1) {
                      push @s, $1, 'c';
                  } elsif ($3) {
                      push @s, $3, 's';
                  } else {
                      if ($is_mb) {
                          my $pt2 = $2;
                          while ($pt2 =~ /$_re2/g) {
                              if ($1) {
                                  push @s, $1, 'c';
                              } else {
                                  push @s, $2, 'w';
                              }
                          }
                      } else {
                          push @s, $2, 'w';
                      }
                  }
              }
  
              #use Data::Dump; say "D:s=",Data::Dump::dump(\@s);
  
              my $only_code = 1 if !@s;
              while (1) {
                  my ($s, $s_type) = splice @s, 0, 2;
                  $s_type //= '';
                  last unless $only_code || defined($s);
                  # empty text, only code
                  if ($only_code) {
                      $s = "";
                      $term .= $c if defined $c;
                  }
                  #say "D:s=[$s]  prev_type=$prev_type \@ch=",~~@ch,"  \@s=",~~@s;
  
                  if ($s_type && $s_type ne 's') {
                      if ($prev_type eq 's') {
                          #say "D:found word, completed previous ws [$term]";
                          push @termst, 's';
                          push @terms , $term;
                          push @pterms, $pterm;
                          push @termsw, undef;
                          push @termsc, $crcode;
                          # start new word
                          $pterm = ''; $term = '';
                      } elsif ($prev_type && $prev_type ne $s_type) {
                          #say "D:found a ".($s_type eq 'c' ? 'CJK':'non-CJK')." word, completed previous ".($prev_type eq 'c' ? 'CJK':'non-CJK')." word [$term]";
                          push @termst, $prev_type;
                          push @terms , $term;
                          push @pterms, $pterm;
                          push @termsw, $is_mb ? Text::WideChar::Util::mbswidth($pterm):length($pterm);
                          push @termsc, $crcode;
                          # start new word
                          $pterm = ''; $term = '';
                      }
                      $pterm .= $s;
                      $term  .= $s; $term .= $c if defined($c) && !@s;
                      if (!@s && !@ch) {
                          #say "D:complete word because this is the last token";
                          push @termst, $s_type;
                          push @terms , $term;
                          push @pterms, "";
                          push @termsw, $is_mb ? Text::WideChar::Util::mbswidth($pterm):length($pterm);
                          push @termsc, $crcode;
                      }
                  } elsif (length($s)) {
                      if ($prev_type ne 's') {
                          #say "D:found ws, completed previous word [$term]";
                          push @termst, $prev_type;
                          push @terms , $term;
                          push @pterms, "";
                          push @termsw, $is_mb ? Text::WideChar::Util::mbswidth($pterm):length($pterm);
                          push @termsc, $crcode;
                          # start new ws
                          $pterm = ''; $term = '';
                      }
                      $pterm .= $s;
                      $term  .= $c if defined($c) && !@s;
                      if (!@s && !@ch) {
                          #say "D:complete ws because this is the last token";
                          push @termst, 's';
                          push @terms , $term;
                          push @pterms, $pterm;
                          push @termsw, undef;
                          push @termsc, $crcode;
                      }
                  }
                  $prev_type = $s_type;
  
                  if (!@s) {
                      if (defined($c) && $c =~ /m\z/) {
                          if ($c eq "\e[0m") {
                              #say "D:found color reset, emptying crcode";
                              $crcode = "";
                          } elsif ($c =~ /m\z/) {
                              #say "D:adding to crcode";
                              $crcode .= $c;
                          }
                      }
                      last if $only_code;
                  }
  
              } # splice @s
          } # splice @ch
      }
  
      # mark parabreaks
      {
          my $i = 0;
          while ($i < @pterms) {
              if ($termst[$i] eq 's') {
                  if ($pterms[$i] =~ /[ \t]*(\n(?:[ \t]*\n)+)([ \t]*)/) {
                      #say "D:found parabreak";
                      $pterms[$i] = $1;
                      $termst[$i] = 'p';
                      if ($i < @pterms-1) {
                          # stick color code to the beginning of next para
                          $terms [$i+1] = $terms[$i] . $terms [$i+1];
                          $terms [$i] = "";
                      }
                      if (length $2) {
                          #say "D:found space after parabreak, splitting";
                          splice @termst, $i+1, 0, "s";
                          splice @terms , $i+1, 0, "";
                          splice @pterms, $i+1, 0, $2;
                          splice @termsw, $i+1, 0, undef;
                          splice @termsc, $i+1, 0, $termsc[$i];
                          $i += 2;
                          next;
                      }
                  }
              }
              $i++;
          }
      }
  
      #use Data::Dump::Color; my @d; for (0..$#terms) { push @d, {type=>$termst[$_], term=>$terms[$_], pterm=>$pterms[$_], termc=>$termsc[$_], termw=>$termsw[$_], } } dd \@d;
      #return;
  
      #use Data::Dump; say "D:termst=".Data::Dump::dump(\@termst);
      #use Data::Dump; say "D:terms =".Data::Dump::dump(\@terms);
      #use Data::Dump; say "D:pterms=".Data::Dump::dump(\@pterms);
      #use Data::Dump; say "D:termsw=".Data::Dump::dump(\@termsw);
      #use Data::Dump; say "D:termsc=".Data::Dump::dump(\@termsc);
  
      my ($maxww, $minww);
  
      # now we perform wrapping
  
      my @res;
      {
          my $tw = $opts->{tab_width} // 8;
          die "Please specify a positive tab width" unless $tw > 0;
          my $optfli  = $opts->{flindent};
          my $optfliw = Text::WideChar::Util::_get_indent_width($is_mb, $optfli, $tw) if defined $optfli;
          my $optsli  = $opts->{slindent};
          my $optsliw = Text::WideChar::Util::_get_indent_width($is_mb, $optsli, $tw) if defined $optsli;
          my $pad = $opts->{pad};
          my $x = 0;
          my $y = 0;
          my ($fli, $sli, $fliw, $sliw);
          my $is_parastart = 1;
          my $line_has_word = 0;
          my ($termt, $prev_t);
        TERM:
          for my $i (0..$#terms) {
              $prev_t = $termt if $i;
              $termt = $termst[$i];
              my $term  = $terms[$i];
              my $pterm = $pterms[$i];
              my $termw = $termsw[$i];
              my $crcode = $i > 0 ? $termsc[$i-1] : "";
              #say "D:term=[", ($termt eq 'w' ? $term : $pterm), "] ($termt)";
  
              # end of paragraph
              if ($termt eq 'p') {
                  my $numnl = 0;
                  $numnl++ while $pterm =~ /\n/g;
                  for (1..$numnl) {
                      push @res, "\e[0m" if $crcode && $_ == 1;
                      push @res, " " x ($width-$x) if $pad;
                      push @res, "\n";
                      $x = 0;
                      $y++;
                  }
                  $line_has_word = 0;
                  $x = 0;
                  $is_parastart = 1;
                  next TERM;
              }
  
              if ($is_parastart) {
                  # this is the start of paragraph, determine indents
                  if (defined $optfli) {
                      $fli  = $optfli;
                      $fliw = $optfliw;
                  } else {
                      if ($termt eq 's') {
                          $fli  = $pterm;
                          $fliw = Text::WideChar::Util::_get_indent_width($is_mb, $fli, $tw);
                      } else {
                          $fli  = "";
                          $fliw = 0;
                      }
                      #say "D:deduced fli from text [$fli] ($fliw)";
                      my $j = $i;
                      $sli = undef;
                      while ($j < @terms && $termst[$j] ne 'p') {
                          if ($termst[$j] eq 's') {
                              if ($pterms[$j] =~ /\n([ \t]+)/) {
                                  $sli  = $1;
                                  $sliw = Text::WideChar::Util::_get_indent_width($is_mb, $sli, $tw);
                                  last;
                              }
                          }
                          $j++;
                      }
                      if (!defined($sli)) {
                          $sli  = "";
                          $sliw = 0;
                      }
                      #say "D:deduced sli from text [$sli] ($sliw)";
                      die "Subsequent indent must be less than width" if $sliw >= $width;
                  }
  
                  #say "D:inserting the fli [$fli] ($fliw)";
                  push @res, $fli;
                  $x += $fliw;
              } # parastart
  
              $is_parastart = 0;
  
              if ($termt eq 's') {
                  # just print the codes
                  push @res, $term;
  
                  # maintain terminating newline
                  if ($pterm =~ /\n/ && $i == $#terms) {
                      push @res, "\e[0m" if $crcode;
                      push @res, " " x ($width-$x) if $pad;
                      push @res, "\n";
                      $line_has_word = 0;
                  }
              }
  
              if ($termt ne 's') {
                  # we need to chop long words
                  my @words;
                  my @wordsw;
                  my @wordst; # c if cjk, w if not
                  my @wordswsb; # whether there are ws before the word
                  my $j = 0;
                  my $c = ""; # see below for explanation
                  while (1) {
                      $j++;
                      # most words shouldn't be that long. and we don't need to
                      # truncate long CJK word first here because it will get
                      # truncated later.
                      if ($termw <= $width-$sliw || $termt eq 'c') {
                          push @words   , $c . $term;
                          push @wordsw  , $termw;
                          push @wordst  , $termt;
                          push @wordswsb, ($prev_t && $prev_t eq 's')?1:0;
                          last;
                      }
                      #use Data::Dump; print "D:truncating long word "; dd $term;
                      my $res = $is_mb ? ta_mbtrunc($term, $width-$sliw, 1) :
                          ta_trunc($term, $width-$sliw, 1);
  
                      my ($tword, $twordw);
                      if ($j == 1) {
                          $tword  = $res->[0];
                          $twordw = $res->[1];
                      } else {
                          # since ta_{,mb}trunc() adds the codes until the end of
                          # the word, to avoid messing colors, for the second word
                          # and so on we need to replay colors by prefixing with:
                          # \e[0m (reset) + $crcode + (all the codes from the
                          # start of the long word up until the truncated
                          # position, stored in $c).
                          #
                          # there might be faster way, but it is expected that
                          # long words are not that common.
                          $tword  = ($crcode ? "\e[0m" . $crcode : "") .
                              $c . $res->[0];
                          $twordw = $res->[1];
                      }
                      $c .= ta_extract_codes(substr($term, 0, $res->[2]));
                      #use Data::Dump; print "D:truncated word is "; dd $tword;
  
                      push @words   , $tword;
                      push @wordsw  , $twordw;
                      push @wordst  , $termt;
                      push @wordswsb, $j == 1 ? (($prev_t && $prev_t eq 's')?1:0) : 0;
                      $term  = substr($term, $res->[2]);
                      $termw = $is_mb ? _ta_mbswidth0($term) : ta_length($term);
                  }
  
                  #use Data::Dump; print "D:words="; dd \@words; print "D:wordsw="; dd \@wordsw; print "D:wordswsb="; dd \@wordswsb;
  
                  # the core of the wrapping algo
                  for my $word (@words) {
                      my $wordw = shift @wordsw;
                      my $wordt = shift @wordst;
                      my $ws_before = shift @wordswsb;
                      #say "D:x=$x word=$word wordw=$wordw wordt=$wordt ws_before=$ws_before line_has_word=$line_has_word width=$width";
  
                      $maxww = $wordw if !defined($maxww) || $maxww < $wordw;
                      $minww = $wordw if !defined($minww) || $minww > $wordw;
  
                      if ($x + ($line_has_word ? 1:0) + $wordw <= $width) {
                          if ($line_has_word && $ws_before) {
                              push @res, " ";
                              $x++;
                          }
                          push @res, $word;
                          $x += $wordw;
                      } else {
                          # line break
                          while (1) {
                              if ($wordt eq 'c') {
                                  # a CJK word can be line-broken
                                  my $res;
                                  if ($ws_before) {
                                      $res = ta_mbtrunc($word, $width-$x-1, 1);
                                      push @res, " ", $res->[0];
                                  } else {
                                      $res = ta_mbtrunc($word, $width-$x, 1);
                                      push @res, $res->[0];
                                  }
                                  #say "D:truncated CJK word: $word (".length($word)."), ".($width-$x)." -> $res->[0] (".length($res->[0]).") & $res->[1], remaining=$res->[3] (".length($res->[3]).")";
                                  $word = $res->[3];
                                  $wordw = _ta_mbswidth0($res->[3]);
                              } else {
                                  push @res, "\e[0m" if $crcode;
                              }
                              push @res, " " x ($width-$x) if $pad;
                              push @res, "\n";
                              $y++;
                              push @res, $crcode;
                              push @res, $sli;
  
                              if ($sliw + $wordw <= $width) {
                                  push @res, $word;
                                  $x = $sliw + $wordw;
                                  last;
                              } else {
                                  # word still too long, break again
                                  $x = $sliw;
                              }
                          }
                      }
                      $line_has_word++;
                  }
  
              }
          } # for term
          push @res, " " x ($width-$x) if $line_has_word && $pad;
      }
  
      if ($opts->{return_stats}) {
          return [join("", @res), {
              max_word_width => $maxww,
              min_word_width => $minww,
          }];
      } else {
          return join("", @res);
      }
  }
  
  sub ta_wrap {
      _ta_wrap(0, @_);
  }
  
  sub ta_mbwrap {
      _ta_wrap(1, @_);
  }
  
  sub _ta_pad {
      my ($is_mb, $text, $width, $which, $padchar, $is_trunc) = @_;
      if ($which) {
          $which = substr($which, 0, 1);
      } else {
          $which = "r";
      }
      $padchar //= " ";
  
      my $w = $is_mb ? _ta_mbswidth0($text) : ta_length($text);
      if ($is_trunc && $w > $width) {
          my $res = $is_mb ?
              ta_mbtrunc($text, $width, 1) : ta_trunc($text, $width, 1);
          $text = $res->[0] . ($padchar x ($width-$res->[1]));
      } else {
          if ($which eq 'l') {
              $text = ($padchar x ($width-$w)) . $text;
          } elsif ($which eq 'c') {
              my $n = int(($width-$w)/2);
              $text = ($padchar x $n) . $text . ($padchar x ($width-$w-$n));
          } else {
              $text .= ($padchar x ($width-$w)) if $width > $w;
          }
      }
      $text;
  }
  
  sub ta_pad {
      _ta_pad(0, @_);
  }
  
  sub ta_mbpad {
      _ta_pad(1, @_);
  }
  
  sub _ta_trunc {
      my ($is_mb, $text, $width, $return_extra) = @_;
  
      # return_extra (undocumented): if set to 1, will return [truncated_text,
      # visual width, length(chars) up to truncation point, rest of the text not
      # included]
  
      my $w = $is_mb ? _ta_mbswidth0($text) : ta_length($text);
      if ($w <= $width) {
          return $return_extra ? [$text, $w, length($text), ''] : $text;
      }
      my @p = ta_split_codes_single($text);
      my $res = '';
      my $append = 1; # whether we should add more text
      my $code4rest = '';
      my $rest = '';
      $w = 0;
      my $c = 0;
      #use Data::Dump; dd \@p;
      while (my ($t, $ansi) = splice @p, 0, 2) {
          #say "D: t=<$t>, \@p=", ~~@p, ", code4rest=<$code4rest>, rest=<$rest>";
          if ($append) {
              my $tw = $is_mb ? Text::WideChar::Util::mbswidth($t) : length($t);
              #say "D: tw=$tw";
              if ($w+$tw <= $width) {
                  $res .= $t;
                  $w += $tw;
                  $c += length($t);
                  $append = 0 if $w == $width;
                  #say "D:end1" unless $append;
              } else {
                  my $tres = $is_mb ?
                      Text::WideChar::Util::mbtrunc($t, $width-$w, 1) :
                        [substr($t, 0, $width-$w), $width-$w, $width-$w];
                  #use Data::Dump; dd $tres;
                  $res .= $tres->[0];
                  $w += $tres->[1];
                  $c += $tres->[2];
                  $rest = substr($t, $tres->[2]);
                  $append = 0;
                  #say "D:end2";
              }
          } else {
              $rest .= $t;
          }
          if (defined $ansi) {
              if ($append) {
                  if ($ansi eq "\e[0m") {
                      #say "D:found color reset, resetting code4rest";
                      $c = length($ansi);
                      $code4rest = $ansi;
                  } else {
                      $c += length($ansi);
                      $code4rest .= $ansi;
                  }
                  $res .= $ansi;
              } else {
                  $res .= $ansi;
                  $rest .= $ansi;
              }
          }
      }
  
      # ta_trunc/ta_mbtrunc currently adds unpruned color codes at the end of
      # truncated string. pruned meaning strings of color codes right before reset
      # code is removed, e.g. \e[1m\e[30m...\e[0m becomes \e[0m. you might want to
      # prune the result of trunc using _ta_prune_codes.
  
      if ($return_extra) {
          return [$res, $w, $c, $code4rest . $rest];
      } else {
          return $res;
      }
  }
  
  sub _ta_prune_codes {
      my $text = shift;
      $text =~ s/($re_mult)\e\[0m/\e\[0m/g;
      $text;
  }
  
  sub ta_trunc {
      _ta_trunc(0, @_);
  }
  
  sub ta_mbtrunc {
      _ta_trunc(1, @_);
  }
  
  sub _ta_highlight {
      my ($is_all, $text, $needle, $color) = @_;
  
      # break into chunks
      my (@chptext, @chcode, @chsavedc); # chunk plain texts, codes, saved codes
      my $sc = "";
      my $plaintext = "";
      my @ch = ta_split_codes_single($text);
      while (my ($pt, $c) = splice(@ch, 0, 2)) {
          push @chptext , $pt;
          push @chcode  , $c;
          push @chsavedc, $sc;
          $plaintext .= $pt;
          if (defined($c) && $c =~ /m\z/) {
              if ($c eq "\e[0m") {
                  $sc = "";
              } elsif ($c =~ /m\z/) {
                  $sc .= $c;
              }
          }
      }
      #use Data::Dump; print "\@chptext: "; dd \@chptext; print "\@chcode: "; dd \@chcode; print "\@chsavedc: "; dd \@chsavedc;
  
      # gather a list of needles to highlight, with their positions
      my (@needle, @npos);
      if (ref($needle) eq 'Regexp') {
          my @m = $plaintext =~ /$needle/g;
          return $text unless @m;
          my $pos = 0;
          while ($pos < length($plaintext)) {
              my @pt;
              for (@m) {
                  my $p = index($plaintext, $_, $pos);
                  push @pt, [$p, $_] if $p >= 0;
              }
              last unless @pt;
              my $pmin = $pt[0][0];
              my $t = $pt[0][1];
              for (@pt) {
                  if ($pmin > $_->[0] ||
                          $pmin==$_->[0] && length($t) < length($_->[1])) {
                      $pmin = $_->[0];
                      $t = $_->[1];
                  }
              }
              push @needle, $t;
              push @npos  , $pmin;
              last unless $is_all;
              $pos = $pmin + length($t);
          }
      } else {
          my $pos = 0;
          while (1) {
              #say "D:finding '$needle' in '$plaintext' from pos '$pos'";
              my $p = index($plaintext, $needle, $pos);
              last if $p < 0;
              push @needle, $needle;
              push @npos  , $p;
              last unless $is_all;
              $pos = $p + length($needle);
              last if $pos >= length($plaintext);
          }
          return $text unless @needle;
      }
      #use Data::Dump; print "\@needle: "; dd \@needle; print "\@npos: "; dd \@npos;
  
      my @res;
      my $found = 1;
      my $pos = 0;
      my $i = 0;
      my $curneed = shift @needle;
      my $npos    = shift @npos;
    CHUNK:
      while (1) {
          last if $i >= @chptext;
          my $pos2  = $pos+length($chptext[$i])-1;
          my $npos2 = $npos+length($curneed)-1;
          #say "D: chunk=[$chptext[$i]], npos=$npos, npos2=$npos2, pos=$pos, pos2=$pos2";
          if ($pos > $npos2 || $pos2 < $npos || !$found) {
              #say "D:inserting chunk: [$chptext[$i]]";
              # no need to highlight
              push @res, $chptext[$i];
              push @res, $chcode[$i] if defined $chcode[$i];
              goto L1;
          }
  
          # there is chunk text at the left of needle?
          if ($pos < $npos) {
              my $pre = substr($chptext[$i], 0, $npos-$pos);
              #say "D:inserting pre=[$pre]";
              push @res, $pre;
          }
  
          my $npart = substr($curneed,
                             max(0, $pos-$npos),
                             min($pos2, $npos2)-max($pos, $npos)+1);
          if (length($npart)) {
              #say "D:inserting npart=[$npart]";
              push @res, $color, $npart;
              push @res, "\e[0m";
              #use Data::Dump; dd [$chsaved[$i], $chcode[$i]];
              push @res, $chsavedc[$i];
          }
  
          # is there chunk text at the right of needle?
          if ($npos2 <= $pos2) {
              #say "D:We have run past current needle [$curneed]";
              my $post = substr($chptext[$i], $npos2-$pos+1);
  
              if (@needle) {
                  $curneed = shift @needle;
                  $npos    = shift @npos;
                  #say "D:Finding the next needle ($curneed) at pos $npos";
                  $pos     = $npos2+1;
                  $chptext[$i] = $post;
                  $found = 1;
                  redo CHUNK;
              } else {
                  # we're done finding needle
                  $found = 0;
              }
  
              if (!$found) {
                  #say "D:inserting post=[$post]";
                  push @res, $post;
                  push @res, $chcode[$i] if defined $chcode[$i];
              }
          }
  
        L1:
          $pos = $pos2+1;
          $i++;
      }
  
      join "", @res;
  }
  
  sub ta_highlight {
      _ta_highlight(0, @_);
  }
  
  sub ta_highlight_all {
      _ta_highlight(1, @_);
  }
  
  sub ta_add_color_resets {
      my (@text) = @_;
  
      my @res;
      my $i = 0;
      my $savedc = "";
      for my $text (@text) {
          $i++;
          my $newt = $i > 1 && !$savedc ? "\e[0m" : $savedc;
  
          # break into chunks
          my @ch = ta_split_codes_single($text);
          while (my ($t, $c) = splice(@ch, 0, 2)) {
              $newt .= $t;
              if (defined($c) && $c =~ /m\z/) {
                  $newt .= $c;
                  if ($c eq "\e[0m") {
                      $savedc = "";
                  } elsif ($c =~ /m\z/) {
                      $savedc .= $c;
                  }
              }
          }
  
          $newt .= "\e[0m" if $savedc && $i < @text;
          push @res, $newt;
      }
  
      @res;
  }
  
  sub _ta_substr {
      my $is_mb = shift;
      my $str   = shift;
      my $pos   = shift;
      my $len   = shift;
  
      my $res1 = _ta_trunc($is_mb, $str, $pos, 1);
      my $res2 = _ta_trunc($is_mb, $res1->[3], $len, 1);
  
      if (@_) {
          # left + replacement + right
          return _ta_prune_codes($res1->[0] . $_[0] . $res2->[3]);
      } else {
          return _ta_prune_codes($res2->[0]);
      }
  }
  
  sub ta_substr {
      _ta_substr(0, @_);
  }
  
  sub ta_mbsubstr {
      _ta_substr(1, @_);
  }
  
  
  1;
  # ABSTRACT: Base for Text::ANSI::{Util,WideUtil}
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Text::ANSI::BaseUtil - Base for Text::ANSI::{Util,WideUtil}
  
  =head1 VERSION
  
  This document describes version 0.22 of Text::ANSI::BaseUtil (from Perl distribution Text-ANSI-Util), released on 2016-03-11.
  
  =for Pod::Coverage .*
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Text-ANSI-Util>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Text-ANSI-Util>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Text-ANSI-Util>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TEXT_ANSI_BASEUTIL

    $main::fatpacked{"Text/ANSI/Util.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEXT_ANSI_UTIL';
  package Text::ANSI::Util;
  
  our $DATE = '2016-03-11'; # DATE
  our $VERSION = '0.22'; # VERSION
  
  use 5.010001;
  use strict 'subs', 'vars';
  use warnings;
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT_OK = qw(
                         ta_add_color_resets
                         ta_detect
                         ta_extract_codes
                         ta_highlight
                         ta_highlight_all
                         ta_length
                         ta_length_height
                         ta_pad
                         ta_split_codes
                         ta_split_codes_single
                         ta_strip
                         ta_substr
                         ta_trunc
                         ta_wrap
                 );
  
  use Text::ANSI::BaseUtil ();
  
  our $re = $Text::ANSI::BaseUtil::re;
  *{$_} = \&{"Text::ANSI::BaseUtil::$_"} for @EXPORT_OK;
  
  1;
  # ABSTRACT: Routines for text containing ANSI color codes
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Text::ANSI::Util - Routines for text containing ANSI color codes
  
  =head1 VERSION
  
  This document describes version 0.22 of Text::ANSI::Util (from Perl distribution Text-ANSI-Util), released on 2016-03-11.
  
  =head1 SYNOPSIS
  
   use Text::ANSI::Util qw(
                         ta_add_color_resets
                         ta_detect
                         ta_extract_codes
                         ta_highlight
                         ta_highlight_all
                         ta_length
                         ta_length_height
                         ta_pad
                         ta_split_codes
                         ta_split_codes_single
                         ta_strip
                         ta_substr
                         ta_trunc
                         ta_wrap
                        );
  
   # detect whether text has ANSI color codes?
   say ta_detect("red");       # => false
   say ta_detect("\e[31mred"); # => true
  
   # calculate length of text (excluding the ANSI color codes)
   say ta_length("red");       # => 3
   say ta_length("\e[31mred"); # => 3
  
   # strip ANSI color codes
   say ta_strip("\e[31mred"); # => "red"
  
   # split codes (ANSI color codes are always on the even positions)
   my @parts = ta_split_codes("\e[31mred"); # => ("", "\e[31m", "red")
  
   # wrap text to a certain column width, handle ANSI color codes
   say ta_wrap("....", 40);
  
   # pad (left, right, center) text to a certain width
   say ta_pad("foo", 10);                          # => "foo       "
   say ta_pad("foo", 10, "left");                  # => "       foo"
   say ta_pad("foo\nbarbaz\n", 10, "center", "."); # => "...foo....\n..barbaz..\n"
  
   # truncate text to a certain width while still passing ANSI color codes
   use Term::ANSIColor;
   my $text = color("red")."red text".color("reset"); # => "\e[31mred text\e[0m"
   say ta_trunc($text, 5);                            # => "\e[31mred t\e[0m"
  
   # highlight the first occurence of some string within text
   say ta_highlight("some text", "ome", "\e[7m\e[31m");
  
   # ditto, but highlight all occurrences
   say ta_highlight_all(...);
  
   # get substring
   my $substr = ta_substr("...", $pos, $len);
  
   # return text but with substring replaced with replacement
   say ta_substr("...", $pos, $len, $replacement);
  
  =head1 DESCRIPTION
  
  This module provides routines for dealing with text that contains ANSI color
  codes, e.g. for determining its length/width (excluding the color codes),
  stripping the color codes, extracting the color codes, and so on.
  
  For functions that support wide characters, see L<Text::ANSI::WideUtil>.
  
  Current caveats:
  
  =over
  
  =item * Other ANSI codes (non-color codes) are ignored
  
  These are codes like for altering cursor positions, etc.
  
  =item * Single-character CSI (control sequence introducer) currently ignored
  
  Only C<ESC+[> (two-character CSI) is currently parsed.
  
  BTW, in ASCII terminals, single-character CSI is C<0x9b>. In UTF-8 terminals, it
  is C<0xc2, 0x9b> (2 bytes).
  
  =item * Private-mode- and trailing-intermediate character currently not parsed
  
  =item * Only color reset code \e[0m is recognized
  
  For simplicity, currently multiple SGR parameters inside a single ANSI color
  code is not parsed. This means that color reset code like C<\e[1;0m> or
  C<\e[31;47;0m> is not recognized, only C<\e[0m> is. I believe this should not be
  a problem with most real-world text out there.
  
  =back
  
  =head1 FUNCTIONS
  
  =head2 ta_add_color_resets(@text) => LIST
  
  Make sure that a color reset command (add C<\e[0m>) to the end of each element
  and a replay of all the color codes from the previous element, from the last
  color reset) to the start of the next element, and so on. Return the new list.
  
  This makes each element safe to be combined with other array of text into a
  single line, e.g. in a multicolumn/tabular layout. An example:
  
  Without color resets:
  
   my @col1 = split /\n/, "\e[31mred\nmerah\e[0m";
   my @col2 = split /\n/, "\e[32mgreen\e[1m\nhijau tebal\e[0m";
  
   printf "%s | %s\n", $col1[0], $col2[0];
   printf "%s | %s\n", $col1[1], $col2[1];
  
  the printed output:
  
   \e[31mred | \e[32mgreen
   merah\e[0m | \e[1mhijau tebal\e[0m
  
  The C<merah> text on the second line will become green because of the effect of
  the last color command printed (C<\e[32m>). However, with ta_add_color_resets():
  
   my @col1 = ta_add_color_resets(split /\n/, "\e[31mred\nmerah\e[0m");
   my @col2 = ta_add_color_resets(split /\n/, "\e[32mgreen\e[1m\nhijau tebal\e[0m");
  
   printf "%s | %s\n", $col1[0], $col2[0];
   printf "%s | %s\n", $col1[1], $col2[1];
  
  the printed output (C<< <...> >>) marks the code added by ta_add_color_resets():
  
   \e[31mred<\e[0m> | \e[32mgreen\e[1m<\e[0m>
   <\e[31m>merah\e[0m | <\e[32m\e[1m>hijau tebal\e[0m
  
  All the cells are printed with the intended colors.
  
  =head2 ta_detect($text) => BOOL
  
  Return true if C<$text> contains ANSI color codes, false otherwise.
  
  =head2 ta_extract_codes($text) => STR
  
  This is the opposite of C<ta_strip()>, return only the ANSI codes in C<$text>.
  
  =head2 ta_highlight($text, $needle, $color) => STR
  
  Highlight the first occurence of C<$needle> in C<$text> with <$color>, taking
  care not to mess up existing colors.
  
  C<$needle> can be a string or a Regexp object.
  
  Implementation note: to not mess up colors, we save up all color codes from the
  last reset (C<\e[0m>) before inserting the highlight color + highlight text.
  Then we issue C<\e[0m> and the saved up color code to return back to the color
  state before the highlight is inserted. This is the same technique as described
  in C<ta_add_color_resets()>.
  
  =head2 ta_highlight_all($text, $needle, $color) => STR
  
  Like C<ta_highlight()>, but highlight all occurences instead of only the first.
  
  =head2 ta_length($text) => INT
  
  Count the number of characters in $text, while ignoring ANSI color codes.
  Equivalent to C<< length(ta_strip($text)) >>. See also: C<ta_mbswidth()> in
  L<Text::ANSI::WideUtil>.
  
  =head2 ta_length_height($text) => [INT, INT]
  
  Like C<ta_length()>, but also gives height (number of lines). For example, C<<
  ta_length_height("foobar\nb\n") >> gives C<[6, 3]>.
  
  See also: C<ta_mbswidth_height()> in L<Text::ANSI::WideUtil>.
  
  =head2 ta_pad($text, $width[, $which[, $padchar[, $truncate]]]) => STR
  
  Return C<$text> padded with C<$padchar> to C<$width> columns. C<$which> is
  either "r" or "right" for padding on the right (the default if not specified),
  "l" or "left" for padding on the right, or "c" or "center" or "centre" for
  left+right padding to center the text.
  
  C<$padchar> is whitespace if not specified. It should be string having the width
  of 1 column.
  
  Does *not* handle multiline text; you can split text by C</\r?\n/> yourself.
  
  See also: C<ta_mbpad()> in L<Text::ANSI::WideUtil>.
  
  =head2 ta_split_codes($text) => LIST
  
  Split C<$text> to a list containing alternating ANSI color codes and text. ANSI
  color codes are always on the second element, fourth, and so on. Example:
  
   ta_split_codes("");              # => ()
   ta_split_codes("a");             # => ("a")
   ta_split_codes("a\e[31m");       # => ("a", "\e[31m")
   ta_split_codes("\e[31ma");       # => ("", "\e[31m", "a")
   ta_split_codes("\e[31ma\e[0m");  # => ("", "\e[31m", "a", "\e[0m")
   ta_split_codes("\e[31ma\e[0mb"); # => ("", "\e[31m", "a", "\e[0m", "b")
   ta_split_codes("\e[31m\e[0mb");  # => ("", "\e[31m\e[0m", "b")
  
  so you can do something like:
  
   my @parts = ta_split_codes($text);
   while (my ($text, $ansicode) = splice(@parts, 0, 2)) {
       ...
   }
  
  =head2 ta_split_codes_single($text) => LIST
  
  Like C<ta_split_codes()> but each ANSI color code is split separately, instead
  of grouped together. This routine is currently used internally e.g. for
  C<ta_wrap()> and C<ta_highlight()> to trace color reset/replay codes.
  
  =head2 ta_strip($text) => STR
  
  Strip ANSI color codes from C<$text>, returning the stripped text.
  
  =head2 ta_substr($text, $pos, $len[ , $replacement ]) => STR
  
  A bit like Perl's C<substr()>. If C<$replacement> is not specified, will return
  the substring. If C<$replacement> is specified, will return $text with the
  substring replaced by C<$replacement>.
  
  See also: C<ta_mbsubstr()> in L<Text::ANSI::WideUtil>.
  
  =head2 ta_trunc($text, $width) => STR
  
  Truncate C<$text> to C<$width> columns while still including all the ANSI color
  codes. This ensures that truncated text still reset colors, etc.
  
  Does *not* handle multiline text; you can split text by C</\r?\n/> yourself.
  
  See also: C<ta_mbtrunc()> in L<Text::ANSI::WideUtil>.
  
  =head2 ta_wrap($text, $width, \%opts) => STR
  
  Like L<Text::WideChar::Util>'s C<wrap()> except handles ANSI color codes.
  Perform color reset at the end of each line and a color replay at the start of
  subsequent line so the text is safe for combining in a multicolumn/tabular
  layout.
  
  Options:
  
  =over
  
  =item * flindent => STR
  
  First line indent. See Text::WideChar::Util for more details.
  
  =item * slindent => STR
  
  First line indent. See Text::WideChar::Util for more details.
  
  =item * tab_width => INT (default: 8)
  
  First line indent. See Text::WideChar::Util for more details.
  
  =item * pad => BOOL (default: 0)
  
  If set to true, will pad each line to C<$width>. This is convenient if you need
  the lines padded, saves calls to ta_pad().
  
  =item * return_stats => BOOL (default: 0)
  
  If set to true, then instead of returning the wrapped string, function will
  return C<< [$wrapped, $stats] >> where C<$stats> is a hash containing some
  information like C<max_word_width>, C<min_word_width>.
  
  =back
  
  Performance: ~500/s on my Core i5 1.7GHz laptop for a ~1KB of text (with zero to
  moderate amount of color codes).
  
  See also: C<ta_mbwrap()> in L<Text::ANSI::WideUtil>.
  
  =head1 FAQ
  
  =head2 How do I highlight a string case-insensitively?
  
  You can currently use a regex for the C<$needle> and use the C<i> modifier.
  Example:
  
   use Term::ANSIColor;
   ta_highlight($text, qr/\b(foo)\b/i, color("bold red"));
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Text-ANSI-Util>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Text-ANSI-Util>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Text-ANSI-Util>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Text::ANSI::WideUtil>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TEXT_ANSI_UTIL

    $main::fatpacked{"Text/ANSITable.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEXT_ANSITABLE';
  package Text::ANSITable;
  
  our $DATE = '2016-03-11'; # DATE
  our $VERSION = '0.48'; # VERSION
  
  use 5.010001;
  use Carp;
  use Log::Any::IfLOG '$log';
  use Moo;
  use experimental 'smartmatch';
  
  #use List::Util qw(first);
  use Scalar::Util 'looks_like_number';
  
  my $ATTRS = [qw(
  
                    use_color color_depth use_box_chars use_utf8 columns rows
                    column_filter row_filter show_row_separator show_header
                    show_header cell_width cell_height cell_pad cell_lpad
                    cell_rpad cell_vpad cell_tpad cell_bpad cell_fgcolor
                    cell_bgcolor cell_align cell_valign header_align header_valign
                    header_vpad header_tpad header_bpad header_fgcolor
                    header_bgcolor color_theme_args border_style_args
  
            )];
  my $STYLES = $ATTRS;
  my $COLUMN_STYLES = [qw(
  
                            type width align valign pad lpad rpad formats fgcolor
                            bgcolor wrap
  
                    )];
  my $ROW_STYLES = [qw(
  
                         height align valign vpad tpad bpad fgcolor bgcolor
  
                 )];
  my $CELL_STYLES = [qw(
  
                          align valign formats fgcolor bgcolor
  
                  )];
  
  has columns => (
      is      => 'rw',
      default => sub { [] },
      trigger => sub {
          my $self = shift;
          $self->{_columns_set}++;
      },
  );
  has rows => (
      is      => 'rw',
      default => sub { [] },
      trigger => sub {
          my ($self, $rows) = @_;
          $self->_set_default_cols($rows->[0]);
      },
  );
  has column_filter => (
      is => 'rw',
  );
  has column_wrap => (
      is => 'rw',
  );
  has row_filter => (
      is => 'rw',
  );
  has _row_separators => ( # [index after which sep should be drawn, ...] sorted
      is      => 'rw',
      default => sub { [] },
  );
  has show_row_separator => (
      is      => 'rw',
      default => sub { 2 },
  );
  has show_header => (
      is      => 'rw',
      default => sub { 1 },
  );
  
  has _column_styles => ( # store per-column styles
      is      => 'rw',
      default => sub { [] },
  );
  has _row_styles => ( # store per-row styles
      is      => 'rw',
      default => sub { [] },
  );
  has _cell_styles => ( # store per-cell styles
      is      => 'rw',
      default => sub { [] },
  );
  
  # each element of _cond_*styles is a two-element [$cond, ], where $cond is code
  # (str|coderef) and the second element is a hashref containing styles.
  
  has _cond_column_styles => ( # store conditional column styles
      is      => 'rw',
      default => sub { [] },
  );
  has _cond_row_styles => ( # store conditional row styles
      is      => 'rw',
      default => sub { [] },
  );
  has _cond_cell_styles => ( # store conditional cell styles
      is      => 'rw',
      default => sub { [] },
  );
  
  has cell_width => (
      is      => 'rw',
  );
  has cell_height => (
      is      => 'rw',
  );
  has cell_pad => (
      is      => 'rw',
      default => sub { 1 },
  );
  has cell_lpad => (
      is      => 'rw',
  );
  has cell_rpad => (
      is      => 'rw',
  );
  has cell_vpad => (
      is      => 'rw',
      default => sub { 0 },
  );
  has cell_tpad => (
      is      => 'rw',
  );
  has cell_bpad => (
      is      => 'rw',
  );
  has cell_fgcolor => (
      is => 'rw',
  );
  has cell_bgcolor => (
      is => 'rw',
  );
  has cell_align => (
      is => 'rw',
  );
  has cell_valign => (
      is => 'rw',
  );
  
  has header_align => (
      is      => 'rw',
  );
  has header_valign => (
      is      => 'rw',
  );
  has header_vpad => (
      is      => 'rw',
  );
  has header_tpad => (
      is      => 'rw',
  );
  has header_bpad => (
      is      => 'rw',
  );
  has header_fgcolor => (
      is      => 'rw',
  );
  has header_bgcolor => (
      is      => 'rw',
  );
  
  with 'Border::Style::Role';
  with 'Color::Theme::Role::ANSI';
  with 'Term::App::Role::Attrs';
  
  sub BUILD {
      my ($self, $args) = @_;
  
      if ($ENV{ANSITABLE_STYLE_SETS}) {
          require JSON::MaybeXS;
          my $sets = JSON::MaybeXS::decode_json($ENV{ANSITABLE_STYLE_SETS});
          croak "ANSITABLE_STYLE_SETS must be an array"
              unless ref($sets) eq 'ARRAY';
          for my $set (@$sets) {
              if (ref($set) eq 'ARRAY') {
                  $self->apply_style_set($set->[0], $set->[1]);
              } else {
                  $self->apply_style_set($set);
              }
          }
      }
  
      if ($ENV{ANSITABLE_STYLE}) {
          require JSON::MaybeXS;
          my $s = JSON::MaybeXS::decode_json($ENV{ANSITABLE_STYLE});
          for my $k (keys %$s) {
              my $v = $s->{$k};
              croak "Unknown table style '$k' in ANSITABLE_STYLE environment, ".
                  "please use one of [".join(", ", @$STYLES)."]"
                      unless $k ~~ $STYLES;
              $self->{$k} = $v;
          }
      }
  
      # set "pseudo"-attributes, they are not declared using 'has' so Moo doesn't
      # set them and we need to set them manually
      if ($args->{border_style}) { $self->border_style($args->{border_style}) }
      if ($args->{color_theme}) { $self->color_theme($args->{color_theme}) }
  
      # pick a default border style
      unless ($self->{border_style}) {
          my $bs;
  
          my $use_utf8 = $self->use_utf8;
  
          # even though Term::Detect::Software decides that linux virtual console
          # does not support unicode, it actually can display some uni characters
          # like single borders, so we use it as the default here instead of
          # singleo_ascii (linux vc doesn't seem to support box_chars).
          my $emu_eng  = $self->detect_terminal->{emulator_engine} // '';
          my $linux_vc = $emu_eng eq 'linux' && !defined($ENV{UTF8});
          if ($linux_vc) {
              $use_utf8 = 1;
              $bs = 'Default::singleo_utf8';
          }
          # use statement modifier style to avoid block and make local work
          local $self->{use_utf8} = 1 if $linux_vc;
  
          # we only default to utf8 border if user has set something like
          # binmode(STDOUT, ":utf8") to avoid 'Wide character in print' warning.
          unless (defined $ENV{UTF8}) {
              require PerlIO;
              my @layers = PerlIO::get_layers(STDOUT);
              $use_utf8 = 0 unless 'utf8' ~~ @layers;
          }
  
          if (defined $ENV{ANSITABLE_BORDER_STYLE}) {
              $bs = $ENV{ANSITABLE_BORDER_STYLE};
          } elsif ($use_utf8) {
              $bs //= 'Default::bricko';
          } elsif ($self->use_box_chars) {
              $bs = 'Default::singleo_boxchar';
          } else {
              $bs = 'Default::singleo_ascii';
          }
  
          $self->border_style($bs);
      }
  
      # pick a default color theme
      unless ($self->{color_theme}) {
          my $ct;
          if (defined $ENV{ANSITABLE_COLOR_THEME}) {
              $ct = $ENV{ANSITABLE_COLOR_THEME};
          } elsif ($self->use_color) {
              my $bg = $self->detect_terminal->{default_bgcolor} // '';
              if ($self->color_depth >= 2**24) {
                  $ct = 'Default::default_gradation' .
                      ($bg eq 'ffffff' ? '_whitebg' : '');
              } else {
                  $ct = 'Default::default_nogradation' .
                      ($bg eq 'ffffff' ? '_whitebg' : '');;
              }
          } else {
              $ct = 'Default::no_color';
          }
          $self->color_theme($ct);
      }
  
      unless (defined $self->{wide}) {
          $self->{wide} = eval { require Text::ANSI::WideUtil; 1 } ? 1:0;
      }
      require Text::ANSI::Util;
      $self->{_func_add_color_resets} = \&Text::ANSI::Util::ta_add_color_resets;
      if ($self->{wide}) {
          require Text::ANSI::WideUtil;
          $self->{_func_length_height} = \&Text::ANSI::WideUtil::ta_mbswidth_height;
          $self->{_func_pad}           = \&Text::ANSI::WideUtil::ta_mbpad;
          $self->{_func_wrap}          = \&Text::ANSI::WideUtil::ta_mbwrap;
      } else {
          $self->{_func_length_height} = \&Text::ANSI::Util::ta_length_height;
          $self->{_func_pad}           = \&Text::ANSI::Util::ta_pad;
          $self->{_func_wrap}          = \&Text::ANSI::Util::ta_wrap;
      }
  }
  
  sub _set_default_cols {
      my ($self, $row) = @_;
      return if $self->{_columns_set}++;
      $self->columns([map {"col$_"} 0..@$row-1]) if $row;
  }
  
  sub add_row {
      my ($self, $row, $styles) = @_;
      croak "Row must be arrayref" unless ref($row) eq 'ARRAY';
      push @{ $self->{rows} }, $row;
      $self->_set_default_cols($row) unless $self->{_columns_set}++;
      if ($styles) {
          my $i = @{ $self->{rows} }-1;
          for my $s (keys %$styles) {
              $self->set_row_style($i, $s, $styles->{$s});
          }
      }
      $self;
  }
  
  sub add_row_separator {
      my ($self) = @_;
      my $idx = ~~@{$self->{rows}}-1;
      # ignore duplicate separators
      push @{ $self->{_row_separators} }, $idx
          unless @{ $self->{_row_separators} } &&
              $self->{_row_separators}[-1] == $idx;
      $self;
  }
  
  sub add_rows {
      my ($self, $rows, $styles) = @_;
      croak "Rows must be arrayref" unless ref($rows) eq 'ARRAY';
      $self->add_row($_, $styles) for @$rows;
      $self;
  }
  
  sub _colnum {
      my $self = shift;
      my $colname = shift;
  
      return $colname if looks_like_number($colname);
      my $cols = $self->{columns};
      for my $i (0..@$cols-1) {
          return $i if $cols->[$i] eq $colname;
      }
      croak "Unknown column name '$colname'";
  }
  
  sub get_cell {
      my ($self, $row_num, $col) = @_;
  
      $col = $self->_colnum($col);
  
      $self->{rows}[$row_num][$col];
  }
  
  sub set_cell {
      my ($self, $row_num, $col, $val) = @_;
  
      $col = $self->_colnum($col);
  
      my $oldval = $self->{rows}[$row_num][$col];
      $self->{rows}[$row_num][$col] = $val;
      $oldval;
  }
  
  sub get_column_style {
      my ($self, $col, $style) = @_;
  
      $col = $self->_colnum($col);
      $self->{_column_styles}[$col]{$style};
  }
  
  sub set_column_style {
      my $self = shift;
      my $col  = shift;
  
      $col = $self->_colnum($col);
  
      my %sets = ref($_[0]) eq 'HASH' ? %{$_[0]} : @_;
  
      for my $style (keys %sets) {
          my $val = $sets{$style};
          croak "Unknown per-column style '$style', please use one of [".
              join(", ", @$COLUMN_STYLES) . "]" unless $style ~~ $COLUMN_STYLES;
          $self->{_column_styles}[$col]{$style} = $val;
      }
  }
  
  sub get_cond_column_styles {
      my $self = shift;
      $self->{_cond_column_styles};
  }
  
  #sub set_cond_column_style {
  #    my ($self, $styles) = @_;
  #    $self->{_cond_column_styles} = $styles;
  #}
  
  sub add_cond_column_style {
      my $self = shift;
      my $cond = shift;
      if (ref($cond) ne 'CODE') {
          croak "cond must be a coderef";
      }
  
      my $styles;
      if (ref($_[0]) eq 'HASH') {
          $styles = shift;
      } else {
          $styles = { @_ };
      }
  
      for my $style (keys %$styles) {
          croak "Unknown per-column style '$style', please use one of [".
              join(", ", @$COLUMN_STYLES) . "]" unless $style ~~ $COLUMN_STYLES;
      }
  
      push @{ $self->{_cond_column_styles} }, [$cond, $styles];
  }
  
  #sub clear_cond_column_styles {
  #    my $self = shift;
  #    $self->{_cond_column_styles} = [];
  #}
  
  sub get_eff_column_style {
      my ($self, $col, $style) = @_;
  
      $col = $self->_colnum($col);
  
      # the result of calculation is cached here
      if (defined $self->{_draw}{eff_column_styles}[$col]) {
          return $self->{_draw}{eff_column_styles}[$col]{$style};
      }
  
      my $cols = $self->{columns};
      my %styles;
  
      # apply conditional styles
    COND:
      for my $ei (0..@{ $self->{_cond_column_styles} }-1) {
          my $e = $self->{_cond_column_styles}[$ei];
          local $_ = $col;
          my $res = $e->[0]->(
              $self,
              col     => $col,
              colname => $cols->[$col],
          );
          next COND unless $res;
          if (ref($res) eq 'HASH') {
              $styles{$_} = $res->{$_} for keys %$res;
          }
          $styles{$_} = $e->[1]{$_} for keys %{ $e->[1] };
      }
  
      # apply per-column styles
      my $rss = $self->{_column_styles}[$col];
      if ($rss) {
          $styles{$_} = $rss->{$_} for keys %$rss;
      }
  
      $self->{_draw}{eff_column_styles}[$col] = \%styles;
  
      $styles{$style};
  }
  
  sub get_row_style {
      my ($self, $row, $style) = @_;
  
      $self->{_row_styles}[$row]{$style};
  }
  
  sub set_row_style {
      my $self = shift;
      my $row  = shift;
  
      my %sets = ref($_[0]) eq 'HASH' ? %{$_[0]} : @_;
  
      for my $style (keys %sets) {
          my $val = $sets{$style};
          croak "Unknown per-row style '$style', please use one of [".
              join(", ", @$ROW_STYLES) . "]" unless $style ~~ $ROW_STYLES;
          $self->{_row_styles}[$row]{$style} = $val;
      }
  }
  
  sub get_cond_row_styles {
      my $self = shift;
      $self->{_cond_row_styles};
  }
  
  #sub set_cond_row_style {
  #    my ($self, $styles) = @_;
  #    $self->{_cond_row_styles} = $styles;
  #}
  
  sub add_cond_row_style {
      my $self = shift;
      my $cond = shift;
      if (ref($cond) ne 'CODE') {
          croak "cond must be a coderef";
      }
  
      my $styles;
      if (ref($_[0]) eq 'HASH') {
          $styles = shift;
      } else {
          $styles = { @_ };
      }
  
      for my $style (keys %$styles) {
          croak "Unknown per-row style '$style', please use one of [".
              join(", ", @$ROW_STYLES) . "]" unless $style ~~ $ROW_STYLES;
      }
  
      push @{ $self->{_cond_row_styles} }, [$cond, $styles];
  }
  
  #sub clear_cond_row_styles {
  #    my $self = shift;
  #    $self->{_cond_row_styles} = [];
  #}
  
  sub get_eff_row_style {
      my ($self, $row, $style) = @_;
  
      # the result of calculation is cached here
      if (defined $self->{_draw}{eff_row_styles}[$row]) {
          return $self->{_draw}{eff_row_styles}[$row]{$style};
      }
  
      my $rows = $self->{rows};
      my %styles;
  
      # apply conditional styles
    COND:
      for my $ei (0..@{ $self->{_cond_row_styles} }-1) {
          my $e = $self->{_cond_row_styles}[$ei];
          local $_ = $row;
          my $res = $e->[0]->(
              $self,
              row      => $row,
              row_data => $rows->[$row],
          );
          next COND unless $res;
          if (ref($res) eq 'HASH') {
              $styles{$_} = $res->{$_} for keys %$res;
          }
          $styles{$_} = $e->[1]{$_} for keys %{ $e->[1] };
      }
  
      # apply per-row styles
      my $rss = $self->{_row_styles}[$row];
      if ($rss) {
          $styles{$_} = $rss->{$_} for keys %$rss;
      }
  
      $self->{_draw}{eff_row_styles}[$row] = \%styles;
  
      $styles{$style};
  }
  
  sub get_cell_style {
      my ($self, $row, $col, $style) = @_;
  
      $col = $self->_colnum($col);
      $self->{_cell_styles}[$row][$col]{$style};
  }
  
  sub set_cell_style {
      my $self = shift;
      my $row  = shift;
      my $col  = shift;
  
      $col = $self->_colnum($col);
  
      my %sets = ref($_[0]) eq 'HASH' ? %{$_[0]} : @_;
  
      for my $style (keys %sets) {
          my $val = $sets{$style};
          croak "Unknown per-cell style '$style', please use one of [".
              join(", ", @$CELL_STYLES) . "]" unless $style ~~ $CELL_STYLES;
          $self->{_cell_styles}[$row][$col]{$style} = $val;
      }
  }
  
  sub get_cond_cell_styles {
      my $self = shift;
      $self->{_cond_cell_styles};
  }
  
  #sub set_cond_cell_style {
  #    my ($self, $styles) = @_;
  #    $self->{_cond_cell_styles} = $styles;
  #}
  
  sub add_cond_cell_style {
      my $self = shift;
      my $cond = shift;
      if (ref($cond) ne 'CODE') {
          croak "cond must be a coderef";
      }
  
      my $styles;
      if (ref($_[0]) eq 'HASH') {
          $styles = shift;
      } else {
          $styles = { @_ };
      }
  
      for my $style (keys %$styles) {
          croak "Unknown per-cell style '$style', please use one of [".
              join(", ", @$CELL_STYLES) . "]" unless $style ~~ $CELL_STYLES;
      }
  
      push @{ $self->{_cond_cell_styles} }, [$cond, $styles];
  }
  
  #sub clear_cond_cell_styles {
  #    my $self = shift;
  #    $self->{_cond_cell_styles} = [];
  #}
  
  sub get_eff_cell_style {
      my ($self, $row, $col, $style) = @_;
  
      # the result of calculation is cached here
      if (defined $self->{_draw}{eff_cell_styles}[$row][$col]) {
          return $self->{_draw}{eff_cell_styles}[$row][$col]{$style};
      }
  
      my $rows = $self->{rows};
      my %styles;
  
      # apply conditional styles
    COND:
      for my $ei (0..@{ $self->{_cond_cell_styles} }-1) {
          my $e = $self->{_cond_cell_styles}[$ei];
          local $_ = $rows->[$row][$col];
          my $res = $e->[0]->(
              $self,
              content  => $_,
              col      => $col,
              row      => $row,
              row_data => $rows->[$row],
          );
          next COND unless $res;
          if (ref($res) eq 'HASH') {
              $styles{$_} = $res->{$_} for keys %$res;
          }
          $styles{$_} = $e->[1]{$_} for keys %{ $e->[1] };
      }
  
      # apply per-cell styles
      my $css = $self->{_cell_styles}[$row][$col];
      if ($css) {
          $styles{$_} = $css->{$_} for keys %$css;
      }
  
      $self->{_draw}{eff_cell_styles}[$row][$col] = \%styles;
  
      $styles{$style};
  }
  
  sub apply_style_set {
      my $self = shift;
      my $name = shift;
      $name =~ /\A[A-Za-z0-9_]+(?:::[A-Za-z0-9_]+)*\z/
          or croak "Invalid style set name, please use alphanums only";
      {
          my $name = $name;
          $name =~ s!::!/!g;
          require "Text/ANSITable/StyleSet/$name.pm";
      }
      my %args = ref($_[0]) eq 'HASH' ? %{$_[0]} : @_;
      my $obj = "Text::ANSITable::StyleSet::$name"->new(%args);
      $obj->apply($self);
  }
  
  sub list_style_sets {
      require Module::List;
      require Module::Load;
      require Package::MoreUtil;
  
      my ($self, $detail) = @_;
  
      my $prefix = (ref($self) ? ref($self) : $self ) .
          '::StyleSet'; # XXX allow override
      my $all_sets = $self->{_all_style_sets};
  
      if (!$all_sets) {
          my $mods = Module::List::list_modules("$prefix\::",
                                                {list_modules=>1, recurse=>1});
          $all_sets = {};
          for my $mod (sort keys %$mods) {
              #$log->tracef("Loading style set module '%s' ...", $mod);
              Module::Load::load($mod);
              my $name = $mod; $name =~ s/\A\Q$prefix\:://;
              my $summary = $mod->summary;
              # we don't have meta, so dig it ourselves
              my %ct = Package::MoreUtil::list_package_contents($mod);
              my $args = [sort grep {!/\W/ && !/\A(new|summary|apply)\z/}
                              keys %ct];
              $all_sets->{$name} = {name=>$name, summary=>$summary, args=>$args};
          }
          $self->{_all_style_sets} = $all_sets;
      }
  
      if ($detail) {
          return $all_sets;
      } else {
          return sort keys %$all_sets;
      }
  }
  
  # read environment variables for style, this will only be done once per object
  sub _read_style_envs {
      my $self = shift;
  
      next if $self->{_read_style_envs}++;
  
      if ($ENV{ANSITABLE_COLUMN_STYLES}) {
          require JSON::MaybeXS;
          my $ss = JSON::MaybeXS::decode_json($ENV{ANSITABLE_COLUMN_STYLES});
          croak "ANSITABLE_COLUMN_STYLES must be a hash"
              unless ref($ss) eq 'HASH';
          for my $col (keys %$ss) {
              my $ci = $self->_colnum($col);
              my $s = $ss->{$col};
              for my $k (keys %$s) {
                  my $v = $s->{$k};
              croak "Unknown column style '$k' (for column $col) in ".
                  "ANSITABLE_COLUMN_STYLES environment, ".
                      "please use one of [".join(", ", @$COLUMN_STYLES)."]"
                          unless $k ~~ $COLUMN_STYLES;
                  $self->{_column_styles}[$ci]{$k} //= $v;
              }
          }
      }
  
      if ($ENV{ANSITABLE_ROW_STYLES}) {
          require JSON::MaybeXS;
          my $ss = JSON::MaybeXS::decode_json($ENV{ANSITABLE_ROW_STYLES});
          croak "ANSITABLE_ROW_STYLES must be a hash"
              unless ref($ss) eq 'HASH';
          for my $row (keys %$ss) {
              my $s = $ss->{$row};
              for my $k (keys %$s) {
                  my $v = $s->{$k};
              croak "Unknown row style '$k' (for row $row) in ".
                  "ANSITABLE_ROW_STYLES environment, ".
                      "please use one of [".join(", ", @$ROW_STYLES)."]"
                          unless $k ~~ $ROW_STYLES;
                  $self->{_row_styles}[$row]{$k} //= $v;
              }
          }
      }
  
      if ($ENV{ANSITABLE_CELL_STYLES}) {
          require JSON::MaybeXS;
          my $ss = JSON::MaybeXS::decode_json($ENV{ANSITABLE_CELL_STYLES});
          croak "ANSITABLE_CELL_STYLES must be a hash"
              unless ref($ss) eq 'HASH';
          for my $cell (keys %$ss) {
              croak "Invalid cell specification in ANSITABLE_CELL_STYLES: ".
                  "$cell, please use 'row,col'"
                      unless $cell =~ /^(.+),(.+)$/;
              my $row = $1;
              my $col = $2;
              my $ci = $self->_colnum($col);
              my $s = $ss->{$cell};
              for my $k (keys %$s) {
                  my $v = $s->{$k};
              croak "Unknown cell style '$k' (for cell $row,$col) in ".
                  "ANSITABLE_CELL_STYLES environment, ".
                      "please use one of [".join(", ", @$CELL_STYLES)."]"
                          unless $k ~~ $CELL_STYLES;
                  $self->{_cell_styles}[$row][$ci]{$k} //= $v;
              }
          }
      }
  }
  
  # determine which columns to show (due to column_filter)
  sub _calc_fcols {
      my $self = shift;
  
      my $cols = $self->{columns};
      my $cf   = $self->{column_filter};
  
      my $fcols;
      if (ref($cf) eq 'CODE') {
          $fcols = [grep {$cf->($_)} @$cols];
      } elsif (ref($cf) eq 'ARRAY') {
          $fcols = [grep {defined} map {looks_like_number($_) ?
                                            $cols->[$_] : $_} @$cf];
      } else {
          $fcols = $cols;
      }
      $self->{_draw}{fcols} = $fcols;
  }
  
  # calculate widths/heights of header, store width settings, column [lr]pads
  sub _calc_header_height {
      my $self = shift;
  
      my $cols  = $self->{columns};
      my $fcols = $self->{_draw}{fcols};
  
      my $fcol_widths = []; # index = [colnum]
      my $header_height = 1;
      my $fcol_lpads  = []; # index = [colnum]
      my $fcol_rpads  = []; # ditto
      my $fcol_setwidths  = []; # index = [colnum], from cell_width/col width
      my $frow_setheights = []; # index = [frownum], from cell_height/row height
  
      my %seen;
      my $lpad = $self->{cell_lpad} // $self->{cell_pad}; # tbl-lvl leftp
      my $rpad = $self->{cell_rpad} // $self->{cell_pad}; # tbl-lvl rightp
      for my $i (0..@$cols-1) {
          next unless $cols->[$i] ~~ $fcols;
          next if $seen{$cols->[$i]}++;
  
          $fcol_setwidths->[$i] = $self->get_eff_column_style($i, 'width') //
              $self->{cell_width};
          my $wh = $self->_opt_calc_cell_width_height(undef, $i, $cols->[$i]);
          $fcol_widths->[$i] = $wh->[0];
          $header_height = $wh->[1]
              if !defined($header_height) || $header_height < $wh->[1];
          $fcol_lpads->[$i] = $self->get_eff_column_style($i, 'lpad') //
              $self->get_eff_column_style($i, 'pad') // $lpad;
          $fcol_rpads->[$i] = $self->get_eff_column_style($i, 'rpad') //
              $self->get_eff_column_style($i, 'pad') // $rpad;
      }
  
      $self->{_draw}{header_height}   = $header_height;
      $self->{_draw}{fcol_lpads}      = $fcol_lpads;
      $self->{_draw}{fcol_rpads}      = $fcol_rpads;
      $self->{_draw}{fcol_setwidths}  = $fcol_setwidths;
      $self->{_draw}{frow_setheights} = $frow_setheights;
      $self->{_draw}{fcol_widths}     = $fcol_widths;
  }
  
  # determine which rows to show, calculate vertical paddings of data rows, store
  # height settings
  sub _calc_frows {
      my $self = shift;
  
      my $rows = $self->{rows};
      my $rf   = $self->{row_filter};
      my $frow_setheights = $self->{_draw}{frow_setheights};
  
      my $frow_tpads  = []; # index = [frownum]
      my $frow_bpads  = []; # ditto
      my $frows = [];
      my $frow_separators = [];
      my $frow_orig_indices = []; # needed when accessing original row data
  
      my $tpad = $self->{cell_tpad} // $self->{cell_vpad}; # tbl-lvl top pad
      my $bpad = $self->{cell_bpad} // $self->{cell_vpad}; # tbl-lvl botom pad
      my $i = -1;
      my $j = -1;
      for my $row (@$rows) {
          $i++;
          if (ref($rf) eq 'CODE') {
              next unless $rf->($row, $i);
          } elsif ($rf) {
              next unless $i ~~ $rf;
          }
          $j++;
          push @$frow_setheights, $self->get_eff_row_style($i, 'height') //
              $self->{cell_height};
          push @$frows, [@$row]; # 1-level clone, for storing formatted values
          push @$frow_separators, $j if $i ~~ $self->{_row_separators};
          push @$frow_tpads, $self->get_eff_row_style($i, 'tpad') //
              $self->get_eff_row_style($i, 'vpad') // $tpad;
          push @$frow_bpads, $self->get_eff_row_style($i, 'bpad') //
              $self->get_eff_row_style($i, 'vpad') // $bpad;
          push @$frow_orig_indices, $i;
      }
  
      $self->{_draw}{frows}             = $frows;
      $self->{_draw}{frow_separators}   = $frow_separators;
      $self->{_draw}{frow_tpads}        = $frow_tpads;
      $self->{_draw}{frow_bpads}        = $frow_bpads;
      $self->{_draw}{frow_orig_indices} = $frow_orig_indices;
  }
  
  # detect column type from data/header name. assign default column align, valign,
  # fgcolor, bgcolor, formats.
  sub _detect_column_types {
      my $self = shift;
  
      my $cols = $self->{columns};
      my $rows = $self->{rows};
      my $ct   = $self->{color_theme};
  
      my $fcol_detect = [];
      my %seen;
      for my $i (0..@$cols-1) {
          my $col = $cols->[$i];
          my $res = {};
          $fcol_detect->[$i] = $res;
  
          # optim: skip detecting columns we're not showing
          next unless $col ~~ $self->{_draw}{fcols};
  
          # but detect from all rows, not just ones we're showing
          my $type = $self->get_eff_column_style($col, 'type');
          my $subtype;
        DETECT:
          {
              last DETECT if $type;
              if ($col =~ /^(can|is|has|does)_|\?$/) {
                  $type = 'bool';
                  last DETECT;
              }
  
              require Parse::VarName;
              my @words = map {lc} @{ Parse::VarName::split_varname_words(
                  varname=>$col) };
              for (qw/date time ctime mtime utime atime stime/) {
                  if ($_ ~~ @words) {
                      $type = 'date';
                      last DETECT;
                  }
              }
  
              my $pass = 1;
              for my $j (0..@$rows) {
                  my $v = $rows->[$j][$i];
                  next unless defined($v);
                  do { $pass=0; last } unless looks_like_number($v);
              }
              if ($pass) {
                  $type = 'num';
                  if ($col =~ /(pct|percent(?:age))\b|\%/) {
                      $subtype = 'pct';
                  }
                  last DETECT;
              }
              $type = 'str';
          } # DETECT
  
          $res->{type} = $type;
          if ($type eq 'bool') {
              $res->{align}   = 'center';
              $res->{valign}  = 'center';
              $res->{fgcolor} = $ct->{colors}{bool_data};
              $res->{formats} = [[bool => {style => $self->{use_utf8} ?
                                               "check_cross" : "Y_N"}]];
          } elsif ($type eq 'date') {
              $res->{align}   = 'middle';
              $res->{fgcolor} = $ct->{colors}{date_data};
              $res->{formats} = [['date' => {}]];
          } elsif ($type =~ /\A(num|float|int)\z/) {
              $res->{align}   = 'right';
              $res->{fgcolor} = $ct->{colors}{num_data};
              if (($subtype//"") eq 'pct') {
                  $res->{formats} = [[num => {style=>'percent'}]];
              }
          } else {
              $res->{fgcolor} = $ct->{colors}{str_data};
              $res->{wrap}    = $ENV{WRAP} // 1;
          }
      }
  
      #use Data::Dump; print "D:fcol_detect: "; dd $fcol_detect;
      $self->{_draw}{fcol_detect} = $fcol_detect;
  }
  
  # calculate width and height of a cell, but skip calculating (to save some
  # cycles) if width is already set by frow_setheights / fcol_setwidths.
  sub _opt_calc_cell_width_height {
      my ($self, $frow_num, $col, $text) = @_;
  
      $col = $self->_colnum($col);
      my $setw  = $self->{_draw}{fcol_setwidths}[$col];
      my $calcw = !defined($setw) || $setw < 0;
      my $seth  = defined($frow_num) ?
          $self->{_draw}{frow_setheights}[$frow_num] : undef;
      my $calch = !defined($seth) || $seth < 0;
  
      my $wh;
      if ($calcw) {
          $wh = $self->{_func_length_height}->($text);
          $wh->[0] = -$setw if defined($setw) && $setw<0 && $wh->[0] < -$setw;
          $wh->[1] = $seth if !$calch;
          $wh->[1] = -$seth if defined($seth) && $seth<0 && $wh->[1] < -$seth;
      } elsif ($calch) {
          my $h = 1; $h++ while $text =~ /\n/go;
          $h = -$seth if defined($seth) && $seth<0 && $h < -$seth;
          $wh = [$setw, $h];
      } else {
          $wh = [$setw, $seth];
      }
      #say "D:_opt_calc_cell_width_height(", $frow_num//"undef", ", $col) = $wh->[0], $wh->[1]";
      $wh;
  }
  
  sub _apply_column_formats {
      my $self = shift;
  
      my $cols  = $self->{columns};
      my $frows = $self->{_draw}{frows};
      my $fcols = $self->{_draw}{fcols};
      my $fcol_detect = $self->{_draw}{fcol_detect};
  
      my %seen;
      for my $i (0..@$cols-1) {
          next unless $cols->[$i] ~~ $fcols;
          next if $seen{$cols->[$i]}++;
          my @fmts = @{ $self->get_eff_column_style($i, 'formats') //
                            $fcol_detect->[$i]{formats} // [] };
          if (@fmts) {
              require Data::Unixish::Apply;
              my $res = Data::Unixish::Apply::apply(
                  in => [map {$frows->[$_][$i]} 0..@$frows-1],
                  functions => \@fmts,
              );
              croak "Can't format column $cols->[$i]: $res->[0] - $res->[1]"
                  unless $res->[0] == 200;
              $res = $res->[2];
              for (0..@$frows-1) { $frows->[$_][$i] = $res->[$_] // "" }
          } else {
              # change null to ''
              for (0..@$frows-1) { $frows->[$_][$i] //= "" }
          }
      }
  }
  
  sub _apply_cell_formats {
      my $self = shift;
  
      my $cols  = $self->{columns};
      my $rows  = $self->{rows};
      my $fcols = $self->{_draw}{fcols};
      my $frows = $self->{_draw}{frows};
      my $frow_orig_indices = $self->{_draw}{frow_orig_indices};
  
      for my $i (0..@$frows-1) {
          my %seen;
          my $origi = $frow_orig_indices->[$i];
          for my $j (0..@$cols-1) {
              next unless $cols->[$j] ~~ $fcols;
              next if $seen{$cols->[$j]}++;
  
              my $fmts = $self->get_eff_cell_style($origi, $j, 'formats');
              if (defined $fmts) {
                  require Data::Unixish::Apply;
                  my $res = Data::Unixish::Apply::apply(
                      in => [ $frows->[$i][$j] ],
                      functions => $fmts,
                  );
                  croak "Can't format cell ($origi, $cols->[$j]): ".
                      "$res->[0] - $res->[1]" unless $res->[0] == 200;
                  $frows->[$i][$j] = $res->[2][0] // "";
              }
          } # col
      }
  }
  
  sub _calc_row_widths_heights {
      my $self = shift;
  
      my $cols  = $self->{columns};
      my $fcols = $self->{_draw}{fcols};
      my $frows = $self->{_draw}{frows};
  
      my $frow_heights = [];
      my $fcol_widths  = $self->{_draw}{fcol_widths};
      my $frow_orig_indices = $self->{_draw}{frow_orig_indices};
  
      my $height = $self->{cell_height};
      my $tpad = $self->{cell_tpad} // $self->{cell_vpad}; # tbl-lvl tpad
      my $bpad = $self->{cell_bpad} // $self->{cell_vpad}; # tbl-lvl bpad
      my $cswidths = [map {$self->get_eff_column_style($_, 'width')} 0..@$cols-1];
      for my $i (0..@$frows-1) {
          my %seen;
          my $origi = $frow_orig_indices->[$i];
          my $rsheight = $self->get_eff_row_style($origi, 'height');
          for my $j (0..@$cols-1) {
              next unless $cols->[$j] ~~ $fcols;
              next if $seen{$cols->[$j]}++;
  
              my $wh = $self->_opt_calc_cell_width_height($i,$j,$frows->[$i][$j]);
  
              $fcol_widths->[$j]  = $wh->[0] if $fcol_widths->[$j] < $wh->[0];
              $frow_heights->[$i] = $wh->[1] if !defined($frow_heights->[$i])
                  || $frow_heights->[$i] < $wh->[1];
          } # col
      }
      $self->{_draw}{frow_heights}  = $frow_heights;
  }
  
  sub _wrap_wrappable_columns {
      my $self = shift;
  
      my $cols  = $self->{columns};
      my $fcols = $self->{_draw}{fcols};
      my $frows = $self->{_draw}{frows};
      my $fcol_detect    = $self->{_draw}{fcol_detect};
      my $fcol_setwidths = $self->{_draw}{fcol_setwidths};
  
      my %seen;
      for my $i (0..@$cols-1) {
          next unless $cols->[$i] ~~ $fcols;
          next if $seen{$cols->[$i]}++;
  
          if (($self->get_eff_column_style($i, 'wrap') // $self->{column_wrap} //
                   $fcol_detect->[$i]{wrap}) &&
                       defined($fcol_setwidths->[$i]) &&
                           $fcol_setwidths->[$i]>0) {
              for (0..@$frows-1) {
                  $frows->[$_][$i] = $self->{_func_wrap}->(
                      $frows->[$_][$i], $fcol_setwidths->[$i]);
              }
          }
      }
  }
  
  sub _calc_table_width_height {
      my $self = shift;
  
      my $cols  = $self->{columns};
      my $fcols = $self->{_draw}{fcols};
      my $frows = $self->{_draw}{frows};
      my $fcol_widths  = $self->{_draw}{fcol_widths};
      my $fcol_lpads   = $self->{_draw}{fcol_lpads};
      my $fcol_rpads   = $self->{_draw}{fcol_rpads};
      my $frow_tpads   = $self->{_draw}{frow_tpads};
      my $frow_bpads   = $self->{_draw}{frow_bpads};
      my $frow_heights = $self->{_draw}{frow_heights};
  
      my $w = 0;
      $w += 1 if length($self->get_border_char(3, 0));
      my $has_vsep = length($self->get_border_char(3, 1));
      for my $i (0..@$cols-1) {
          next unless $cols->[$i] ~~ $fcols;
          $w += $fcol_lpads->[$i] + $fcol_widths->[$i] + $fcol_rpads->[$i];
          if ($i < @$cols-1) {
              $w += 1 if $has_vsep;
          }
      }
      $w += 1 if length($self->get_border_char(3, 2));
      $self->{_draw}{table_width}  = $w;
  
      my $h = 0;
      $h += 1 if length($self->get_border_char(0, 0)); # top border line
      $h += $self->{header_tpad} // $self->{header_vpad} //
          $self->{cell_tpad} // $self->{cell_vpad};
      $h += $self->{_draw}{header_height} // 0;
      $h += $self->{header_bpad} // $self->{header_vpad} //
          $self->{cell_bpad} // $self->{cell_vpad};
      $h += 1 if length($self->get_border_char(2, 0));
      for my $i (0..@$frows-1) {
          $h += ($frow_tpads->[$i] // 0) +
              ($frow_heights->[$i] // 0) +
                  ($frow_bpads->[$i] // 0);
          $h += 1 if $self->_should_draw_row_separator($i);
      }
      $h += 1 if length($self->get_border_char(5, 0));
      $self->{_draw}{table_height}  = $h;
  }
  
  # if there are text columns with no width set, and the column width is wider
  # than terminal, try to adjust widths so it fit into the terminal, if possible.
  # return 1 if widths (fcol_widths) adjusted.
  sub _adjust_column_widths {
      my $self = shift;
  
      # try to find wrappable columns that do not have their widths set. currently
      # the algorithm is not proper, it just targets columns which are wider than
      # a hard-coded value (30). it should take into account the longest word in
      # the content/header, but this will require another pass at the text to
      # analyze it.
  
      my $fcols = $self->{_draw}{fcols};
      my $frows = $self->{_draw}{frows};
      my $fcol_setwidths = $self->{_draw}{fcol_setwidths};
      my $fcol_detect    = $self->{_draw}{fcol_detect};
      my $fcol_widths    = $self->{_draw}{fcol_widths};
      my %acols;
      my %origw;
      for my $i (0..@$fcols-1) {
          my $ci = $self->_colnum($fcols->[$i]);
          next if defined($fcol_setwidths->[$ci]) && $fcol_setwidths->[$ci]>0;
          next if $fcol_widths->[$ci] < 30;
          next unless $self->get_eff_column_style($ci, 'wrap') //
              $self->{column_wrap} // $fcol_detect->[$ci]{wrap};
          $acols{$ci}++;
          $origw{$ci} = $fcol_widths->[$ci];
      }
      return 0 unless %acols;
  
      # only do this if table width exceeds terminal width
      my $termw = $self->term_width;
      return 0 unless $termw > 0;
      my $excess = $self->{_draw}{table_width} - $termw;
      return 0 unless $excess > 0;
  
      # reduce text columns proportionally
      my $w = 0; # total width of all to-be-adjusted columns
      $w += $fcol_widths->[$_] for keys %acols;
      return 0 unless $w > 0;
      my $reduced = 0;
    REDUCE:
      while (1) {
          my $has_reduced;
          for my $ci (keys %acols) {
              last REDUCE if $reduced >= $excess;
              if ($fcol_widths->[$ci] > 30) {
                  $fcol_widths->[$ci]--;
                  $reduced++;
                  $has_reduced++;
              }
          }
          last if !$has_reduced;
      }
  
      # reset widths
      for my $ci (keys %acols) {
          $fcol_setwidths->[$ci] = $fcol_widths->[$ci];
          $fcol_widths->[$ci] = 0; # reset
      }
  
      # wrap and set setwidths so it doesn't grow again during recalculate
      for my $ci (keys %acols) {
          next unless $origw{$ci} != $fcol_widths->[$ci];
          for (0..@$frows-1) {
              $frows->[$_][$ci] = $self->{_func_wrap}->(
                  $frows->[$_][$ci], $fcol_setwidths->[$ci]);
          }
      }
  
      # recalculate column widths
      $self->_calc_row_widths_heights;
      $self->_calc_table_width_height;
      1;
  }
  
  # filter columns & rows, calculate widths/paddings, format data, put the results
  # in _draw (draw data) attribute.
  sub _prepare_draw {
      my $self = shift;
  
      $self->{_draw} = {};
  
      $self->_read_style_envs;
      $self->_calc_fcols;
      $self->_calc_header_height;
      $self->_calc_frows;
      $self->_detect_column_types;
      $self->_apply_column_formats;
      $self->_apply_cell_formats;
      $self->_wrap_wrappable_columns;
      $self->_calc_row_widths_heights;
      $self->_calc_table_width_height;
      $self->_adjust_column_widths;
  }
  
  # push string into the drawing buffer. also updates "cursor" position.
  sub draw_str {
      my $self = shift;
      # currently x position is not recorded because this involves doing
      # ta_mbswidth() (or ta_mbswidth_height()) for every string, which is rather
      # expensive. so only the y position is recorded by counting newlines.
  
      for (@_) {
          my $num_nl = 0;
          $num_nl++ while /\r?\n/og;
          push @{$self->{_draw}{buf}}, $_;
          $self->{_draw}{y} += $num_nl;
      }
      $self;
  }
  
  sub draw_theme_color {
      my $self = shift;
      my $c = $self->get_theme_color_as_ansi(@_);
      $self->draw_str($c) if length($c);
  }
  
  sub get_color_reset {
      my $self = shift;
      return "" if $self->{color_theme}{no_color};
      "\e[0m";
  }
  
  sub draw_color_reset {
      my $self = shift;
      my $c = $self->get_color_reset;
      $self->draw_str($c) if length($c);
  }
  
  # draw border character(s). drawing border character involves setting border
  # color, setting drawing mode (for boxchar styles), aside from drawing the
  # actual characters themselves. arguments are list of (y, x, n) tuples where y
  # and x are the row and col number of border character, n is the number of
  # characters to print. n defaults to 1 if not specified.
  sub draw_border_char {
      my $self = shift;
      my $args = shift if ref($_[0]) eq 'HASH';
  
      $self->draw_str($self->{_draw}{set_line_draw_mode});
      while (my ($y, $x, $n) = splice @_, 0, 3) {
          $n //= 1;
          if (!$self->{use_color}) {
              # save some CPU cycles
          } elsif ($args) {
              $self->draw_theme_color('border',
                                      {border=>[$y, $x, $n], %$args});
          } else {
              $self->draw_theme_color('border',
                                      {border=>[$y, $x, $n]});
          }
          $self->draw_str($self->get_border_char($y, $x, $n));
          $self->draw_color_reset;
      }
      $self->draw_str($self->{_draw}{reset_line_draw_mode});
  }
  
  sub _should_draw_row_separator {
      my ($self, $i) = @_;
  
      return $i < @{$self->{_draw}{frows}}-1 &&
          (($self->{show_row_separator}==2 && $i~~$self->{_draw}{frow_separators})
               || $self->{show_row_separator}==1);
  }
  
  # apply align/valign, apply padding, apply default fgcolor/bgcolor to text,
  # truncate to specified cell's width & height
  sub _get_cell_lines {
      my $self = shift;
      #say "D: get_cell_lines ".join(", ", map{$_//""} @_);
      my ($text, $width, $height, $align, $valign,
          $lpad, $rpad, $tpad, $bpad, $color) = @_;
  
      my @lines;
      push @lines, "" for 1..$tpad;
      my @dlines = split(/\r?\n/, $text);
      @dlines = ("") unless @dlines;
      my ($la, $lb);
      $valign //= 'top';
      if ($valign =~ /^[Bb]/o) { # bottom
          $la = $height-@dlines;
          $lb = 0;
      } elsif ($valign =~ /^[MmCc]/o) { # middle/center
          $la = int(($height-@dlines)/2);
          $lb = $height-@dlines-$la;
      } else { # top
          $la = 0;
          $lb = $height-@dlines;
      }
      push @lines, "" for 1..$la;
      push @lines, @dlines;
      push @lines, "" for 1..$lb;
      push @lines, "" for 1..$bpad;
  
      $align //= 'left';
      my $pad = $align =~ /^[Ll]/o ? "right" :
          ($align =~ /^[Rr]/o ? "left" : "center");
  
      for (@lines) {
          $_ = (" "x$lpad) . $self->{_func_pad}->($_, $width, $pad, " ", 1) . (" "x$rpad);
          if ($self->{use_color}) {
              # add default color
              s/\e\[0m(?=.)/\e[0m$color/g if length($color);
              $_ = $color . $_;
          }
      }
  
      \@lines;
  }
  
  sub _get_header_cell_lines {
      my ($self, $i) = @_;
  
      my $ct = $self->{color_theme};
  
      my $fgcolor;
      if (defined $self->{header_fgcolor}) {
          $fgcolor = $self->theme_color_to_ansi($self->{header_fgcolor});
      } elsif (defined $self->{cell_fgcolor}) {
          $fgcolor = $self->theme_color_to_ansi($self->{cell_fgcolor});
      #} elsif (defined $self->{_draw}{fcol_detect}[$i]{fgcolor}) {
      #    $fgcolor = $self->themecol2ansi($self->{_draw}{fcol_detect}[$i]{fgcolor});
      } elsif (defined $ct->{colors}{header}) {
          $fgcolor = $self->get_theme_color_as_ansi('header');
      } elsif (defined $ct->{colors}{cell}) {
          $fgcolor = $self->get_theme_color_as_ansi('cell');
      } else {
          $fgcolor = "";
      }
  
      my $bgcolor;
      if (defined $self->{header_bgcolor}) {
          $bgcolor = $self->theme_color_to_ansi($self->{header_bgcolor},
                                                undef, 1);
      } elsif (defined $self->{cell_bgcolor}) {
          $bgcolor = $self->theme_color_to_ansi($self->{cell_bgcolor},
                                                undef, 1);
      } elsif (defined $self->{_draw}{fcol_detect}[$i]{bgcolor}) {
          $fgcolor = $self->theme_color_to_ansi($self->{_draw}{fcol_detect}[$i]{bgcolor},
                                                undef, 1);
      } elsif (defined $ct->{colors}{header_bg}) {
          $bgcolor = $self->get_theme_color_as_ansi('header_bg');
      } elsif (defined $ct->{colors}{cell_bg}) {
          $bgcolor = $self->get_theme_color_as_ansi('cell_bg');
      } else {
          $bgcolor = "";
      }
  
      my $align =
          $self->{header_align} //
              $self->{cell_align} //
                  $self->{_draw}{fcol_detect}[$i]{align} //
                      'left';
      my $valign =
          $self->{header_valign} //
              $self->{cell_valign} //
                  $self->{_draw}{fcol_detect}[$i]{valign} //
                      'top';
  
      my $lpad = $self->{_draw}{fcol_lpads}[$i];
      my $rpad = $self->{_draw}{fcol_rpads}[$i];
      my $tpad = $self->{header_tpad} // $self->{header_vpad} // 0;
      my $bpad = $self->{header_bpad} // $self->{header_vpad} // 0;
  
      #use Data::Dump; print "D:header cell: "; dd {i=>$i, col=>$self->{columns}[$i], fgcolor=>$fgcolor, bgcolor=>$bgcolor};
      my $res = $self->_get_cell_lines(
          $self->{columns}[$i],            # text
          $self->{_draw}{fcol_widths}[$i], # width
          $self->{_draw}{header_height},   # height
          $align, $valign,                 # aligns
          $lpad, $rpad, $tpad, $bpad,      # paddings
          $fgcolor . $bgcolor);
      #use Data::Dump; print "D:res: "; dd $res;
      $res;
  }
  
  sub _get_data_cell_lines {
      my ($self, $y, $x) = @_;
  
      my $ct   = $self->{color_theme};
      my $oy   = $self->{_draw}{frow_orig_indices}[$y];
      my $cell = $self->{_draw}{frows}[$y][$x];
      my $args = {row_num=>$y, col_num=>$x, data=>$cell,
                  orig_data=>$self->{rows}[$oy][$x]};
  
      my $tmp;
      my $fgcolor;
      if (defined ($tmp = $self->get_eff_cell_style($oy, $x, 'fgcolor'))) {
          $fgcolor = $self->theme_color_to_ansi($tmp, $args);
      } elsif (defined ($tmp = $self->get_eff_row_style($oy, 'fgcolor'))) {
          $fgcolor = $self->theme_color_to_ansi($tmp, $args);
      } elsif (defined ($tmp = $self->get_eff_column_style($x, 'fgcolor'))) {
          $fgcolor = $self->theme_color_to_ansi($tmp, $args);
      } elsif (defined ($tmp = $self->{cell_fgcolor})) {
          $fgcolor = $self->theme_color_to_ansi($tmp, $args);
      } elsif (defined ($tmp = $self->{_draw}{fcol_detect}[$x]{fgcolor})) {
          $fgcolor = $self->theme_color_to_ansi($tmp, $args);
      } elsif (defined $ct->{colors}{cell}) {
          $fgcolor = $self->get_theme_color_as_ansi('cell', $args);
      } else {
          $fgcolor = "";
      }
  
      my $bgcolor;
      if (defined ($tmp = $self->get_eff_cell_style($oy, $x, 'bgcolor'))) {
          $bgcolor = $self->theme_color_to_ansi($tmp, $args, 1);
      } elsif (defined ($tmp = $self->get_eff_row_style($oy, 'bgcolor'))) {
          $bgcolor = $self->theme_color_to_ansi($tmp, $args, 1);
      } elsif (defined ($tmp = $self->get_eff_column_style($x, 'bgcolor'))) {
          $bgcolor = $self->theme_color_to_ansi($tmp, $args, 1);
      } elsif (defined ($tmp = $self->{cell_bgcolor})) {
          $bgcolor = $self->theme_color_to_ansi($tmp, $args, 1);
      } elsif (defined ($tmp = $self->{_draw}{fcol_detect}[$x]{bgcolor})) {
          $bgcolor = $self->theme_color_to_ansi($tmp, $args, 1);
      } elsif (defined $ct->{colors}{cell_bg}) {
          $bgcolor = $self->get_theme_color_as_ansi('cell_bg', $args);
      } else {
          $bgcolor = "";
      }
  
      my $align =
          $self->get_eff_cell_style($oy, $x, 'align') //
              $self->get_eff_row_style($oy, 'align') //
                  $self->get_eff_column_style($x, 'align') //
                      $self->{cell_align} //
                          $self->{_draw}{fcol_detect}[$x]{align} //
                              'left';
      my $valign =
          $self->get_eff_cell_style($oy, $x, 'valign') //
              $self->get_eff_row_style($oy, 'valign') //
                  $self->get_eff_column_style($x, 'valign') //
                      $self->{cell_valign} //
                          $self->{_draw}{fcol_detect}[$x]{valign} //
                              'top';
      #say "D:y=$y, x=$x, align=$align, valign=$valign";
  
      my $lpad = $self->{_draw}{fcol_lpads}[$x];
      my $rpad = $self->{_draw}{fcol_rpads}[$x];
      my $tpad = $self->{_draw}{frow_tpads}[$y];
      my $bpad = $self->{_draw}{frow_bpads}[$y];
  
      my $res = $self->_get_cell_lines(
          $cell,                            # text
          $self->{_draw}{fcol_widths}[$x],  # width
          $self->{_draw}{frow_heights}[$y], # height
          $align, $valign,                  # aligns
          $lpad, $rpad, $tpad, $bpad,       # paddings
          $fgcolor . $bgcolor);
      $res;
  }
  
  sub draw {
      my ($self) = @_;
  
      $self->_prepare_draw;
  
      $self->{_draw}{buf} = []; # output buffer
      $self->{_draw}{y} = 0; # current line
  
      # ansi codes to set and reset line-drawing mode.
      {
          my $bs = $self->{border_style};
          $self->{_draw}{set_line_draw_mode}   = $bs->{box_chars} ? "\e(0" : "";
          $self->{_draw}{reset_line_draw_mode} = $bs->{box_chars} ? "\e(B" : "";
      }
  
      my $cols  = $self->{columns};
      my $fcols = $self->{_draw}{fcols};
      my $frows = $self->{_draw}{frows};
      my $frow_heights    = $self->{_draw}{frow_heights};
      my $frow_tpads      = $self->{_draw}{frow_tpads};
      my $frow_bpads      = $self->{_draw}{frow_bpads};
      my $fcol_lpads      = $self->{_draw}{fcol_lpads};
      my $fcol_rpads      = $self->{_draw}{fcol_rpads};
      my $fcol_widths     = $self->{_draw}{fcol_widths};
  
      # draw border top line
      {
          last unless length($self->get_border_char(0, 0));
          my @b;
          push @b, 0, 0, 1;
          for my $i (0..@$fcols-1) {
              my $ci = $self->_colnum($fcols->[$i]);
              push @b, 0, 1,
                  $fcol_lpads->[$ci] + $fcol_widths->[$ci] + $fcol_rpads->[$ci];
              push @b, 0, 2, 1 if $i < @$fcols-1;
          }
          push @b, 0, 3, 1;
          $self->draw_border_char(@b);
          $self->draw_str("\n");
      }
  
      # draw header
      if ($self->{show_header}) {
          my %seen;
          my $hcell_lines = []; # index = [fcolnum]
          if (@$fcols) {
              for my $i (0..@$fcols-1) {
                  my $ci = $self->_colnum($fcols->[$i]);
                  if (defined($seen{$i})) {
                      $hcell_lines->[$i] = $hcell_lines->[$seen{$i}];
                  }
                  $seen{$i} = $ci;
                  $hcell_lines->[$i] = $self->_get_header_cell_lines($ci);
              }
          } else {
              # so we can still draw header
              $hcell_lines->[0] = [""];
          }
          #use Data::Dump; print "D:hcell_lines: "; dd $hcell_lines;
          for my $l (0..@{ $hcell_lines->[0] }-1) {
              $self->draw_border_char(1, 0);
              for my $i (0..@$fcols-1) {
                  $self->draw_str($hcell_lines->[$i][$l]);
                  $self->draw_color_reset;
                  $self->draw_border_char(1, 1) unless $i == @$fcols-1;
              }
              $self->draw_border_char(1, 2);
              $self->draw_str("\n");
          }
      }
  
      # draw header-data row separator
      if ($self->{show_header} && length($self->get_border_char(2, 0))) {
          my @b;
          push @b, 2, 0, 1;
          for my $i (0..@$fcols-1) {
              my $ci = $self->_colnum($fcols->[$i]);
              push @b, 2, 1,
                  $fcol_lpads->[$ci] + $fcol_widths->[$ci] + $fcol_rpads->[$ci];
              push @b, 2, 2, 1 unless $i==@$fcols-1;
          }
          push @b, 2, 3, 1;
          $self->draw_border_char(@b);
          $self->draw_str("\n");
      }
  
      # draw data rows
      {
          for my $r (0..@$frows-1) {
              #$self->draw_str("r$r");
              my $dcell_lines = []; # index = [fcolnum]
              my %seen;
              if (@$fcols) {
                  for my $i (0..@$fcols-1) {
                      my $ci = $self->_colnum($fcols->[$i]);
                      if (defined($seen{$i})) {
                          $dcell_lines->[$i] = $dcell_lines->[$seen{$i}];
                      }
                      $seen{$i} = $ci;
                      $dcell_lines->[$i] = $self->_get_data_cell_lines($r, $ci);
                  }
              } else {
                  # so we can still print row
                  $dcell_lines->[0] = [" "];
              }
              #use Data::Dump; print "TMP: dcell_lines: "; dd $dcell_lines;
              for my $l (0..@{ $dcell_lines->[0] }-1) {
                  $self->draw_border_char({row_num=>$r}, 3, 0);
                  for my $i (0..@$fcols-1) {
                      $self->draw_str($dcell_lines->[$i][$l]);
                      $self->draw_color_reset;
                      $self->draw_border_char({row_num=>$r}, 3, 1)
                          unless $i == @$fcols-1;
                  }
                  $self->draw_border_char({row_num=>$r}, 3, 2);
                  $self->draw_str("\n");
              }
  
              # draw separators between row
              if ($self->_should_draw_row_separator($r)) {
                  my @b;
                  push @b, 4, 0, 1;
                  for my $i (0..@$fcols-1) {
                      my $ci = $self->_colnum($fcols->[$i]);
                      push @b, 4, 1,
                          $fcol_lpads->[$ci] + $fcol_widths->[$ci] +
                              $fcol_rpads->[$ci];
                      push @b, 4, $i==@$fcols-1 ? 3:2, 1;
                  }
                  $self->draw_border_char({row_num=>$r}, @b);
                  $self->draw_str("\n");
              }
          } # for frow
      }
  
      # draw border bottom line
      {
          last unless length($self->get_border_char(5, 0));
          my @b;
          push @b, 5, 0, 1;
          for my $i (0..@$fcols-1) {
              my $ci = $self->_colnum($fcols->[$i]);
              push @b, 5, 1,
                  $fcol_lpads->[$ci] + $fcol_widths->[$ci] + $fcol_rpads->[$ci];
              push @b, 5, 2, 1 unless $i == @$fcols-1;
          }
          push @b, 5, 3, 1;
          $self->draw_border_char(@b);
          $self->draw_str("\n");
      }
  
      join "", @{$self->{_draw}{buf}};
  }
  
  1;
  # ABSTRACT: Create nice formatted tables using extended ASCII and ANSI colors
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Text::ANSITable - Create nice formatted tables using extended ASCII and ANSI colors
  
  =head1 VERSION
  
  This document describes version 0.48 of Text::ANSITable (from Perl distribution Text-ANSITable), released on 2016-03-11.
  
  =head1 SYNOPSIS
  
   use 5.010;
   use Text::ANSITable;
  
   # don't forget this if you want to output utf8 characters
   binmode(STDOUT, ":utf8");
  
   my $t = Text::ANSITable->new;
  
   # set styles
   $t->border_style('Default::bold');  # if not, a nice default is picked
   $t->color_theme('Default::sepia');  # if not, a nice default is picked
  
   # fill data
   $t->columns(["name"       , "color" , "price"]);
   $t->add_row(["chiki"      , "yellow",    2000]);
   $t->add_row(["lays"       , "green" ,    7000]);
   $t->add_row(["tao kae noi", "blue"  ,   18500]);
  
   # draw it!
   print $t->draw;
  
  Samples of output:
  
  =head1 DESCRIPTION
  
  This module is yet another text table formatter module like L<Text::ASCIITable>
  or L<Text::SimpleTable>, with the following differences:
  
  =over
  
  =item * Colors and color themes
  
  ANSI color codes will be used by default (even 256 and 24bit colors), but will
  degrade to lower color depth and black/white according to terminal support.
  
  =item * Box-drawing characters
  
  Box-drawing characters will be used by default, but will degrade to using normal
  ASCII characters if terminal does not support them.
  
  =item * Unicode and wide character support
  
  Border styles using Unicode characters (double lines, bold/heavy lines, brick
  style, etc). Columns containing wide characters stay aligned. (Note: support for
  wide characters requires L<Text::ANSI::WideUtil> which is currently set as an
  optional prereq, so you'll need to install it explicitly or set your CPAN client
  to install 'recommends' prereq).
  
  =back
  
  Compared to Text::ASCIITable, it uses C<lower_case> method/attr names instead of
  C<CamelCase>, and it uses arrayref for C<columns> and C<add_row>. When
  specifying border styles, the order of characters are slightly different. More
  fine-grained options to customize appearance.
  
  =for Pod::Coverage ^(BUILD|draw_.+|get_color_reset|get_border_char)$
  
  =begin HTML
  
  <p><img src="http://blogs.perl.org/users/steven_haryanto/ansitable1.png" /></p>
  
  <p><img src="http://blogs.perl.org/users/steven_haryanto/ansitable2.png" /></p>
  
  <p><img src="http://blogs.perl.org/users/steven_haryanto/ansitable3.png" /></p>
  
  <p><img src="http://blogs.perl.org/users/steven_haryanto/ansitable4.png" /></p>
  
  <p><img src="http://blogs.perl.org/users/steven_haryanto/ansitable5.png" /></p>
  
  =end HTML
  
  =head1 BORDER STYLES
  
  To list available border styles:
  
   say $_ for $t->list_border_styles;
  
  Or you can also try out borders using the provided
  L<ansitable-list-border-styles> script. Or, you can also view the documentation
  for the C<Text::ANSITable::BorderStyle::*> modules, where border styles are
  searched.
  
  To choose border style, either set the C<border_style> attribute to an available
  border style or a border specification directly.
  
   $t->border_style("Default::singleh_boxchar");
   $t->border_style("Foo::bar");   # dies, no such border style
   $t->border_style({ ... }); # set specification directly
  
  If no border style is selected explicitly, a nice default will be chosen. You
  can also set the C<ANSITABLE_BORDER_STYLE> environment variable to set the
  default.
  
  To create a new border style, create a module under
  C<Text::ANSITable::BorderStyle::>. Please see one of the existing border style
  modules for example, like L<Text::ANSITable::BorderStyle::Default>. For more
  about border styles, refer to L<Border::Style::Role>.
  
  =head1 COLOR THEMES
  
  To list available color themes:
  
   say $_ for $t->list_color_themes;
  
  Or you can also run the provided L<ansitable-list-color-themes> script. Or you
  can view the documentation for the C<Text::ANSITable::ColorTheme::*> modules
  where color themes are searched.
  
  To choose a color theme, either set the C<color_theme> attribute to an available
  color theme or a color theme specification directly.
  
   $t->color_theme("Default::default_nogradation");
   $t->color_theme("Foo::bar");    # dies, no such color theme
   $t->color_theme({ ... });  # set specification directly
  
  If no color theme is selected explicitly, a nice default will be chosen. You can
  also set the C<ANSITABLE_COLOR_THEME> environment variable to set the default.
  
  To create a new color theme, create a module under
  C<Text::ANSITable::ColorTheme::>. Please see one of the existing color theme
  modules for example, like L<Text::ANSITable::ColorTheme::Default>. For more
  about color themes, refer to L<Color::Theme::Role>.
  
  =head1 COLUMN WIDTHS
  
  By default column width is set just so it is enough to show the widest data.
  This can be customized in the following ways (in order of precedence, from
  lowest):
  
  =over
  
  =item * table-level C<cell_width> attribute
  
  This sets width for all columns.
  
  =item * conditional column styles
  
  The example below sets column width to 10 for columns whose names matching
  C</[acm]time/>, else sets the column width to 20.
  
   $t->add_cond_column_style(sub {  /[acm]time/ }, width => 10);
   $t->add_cond_column_style(sub { !/[acm]time/ }, width => 20);
  
  =item * per-column C<width> style
  
   $t->set_column_style('colname', width => 20);
  
  =back
  
  You can use negative number to mean I<minimum> width.
  
  =head1 ROW HEIGHTS
  
  This can be customized in the following ways (in order of precedence, from
  lowest):
  
  =over
  
  =item * table-level C<cell_height> attribute
  
  This sets height for all rows.
  
  =item * conditional row styles
  
  The example below sets row height to 2 for every odd rows, and 1 for even rows.
  
   $t->add_cond_row_style(sub { $_ % 2 == 0 }, height => 2);
   $t->add_cond_row_style(sub { $_ % 2      }, height => 1);
  
  =item * per-row C<height> style
  
   $t->set_row_style(1, height => 2);
  
  =back
  
  You can use negative number to mean I<minimum> height.
  
  =head1 CELL (HORIZONTAL) PADDING
  
  By default cell (horizontal) padding is 1. This can be customized in the
  following ways (in order of precedence, from lowest):
  
  =over
  
  =item * table-level C<cell_pad> attribute
  
  This sets left and right padding for all columns.
  
  =item * table-level C<cell_lpad> and C<cell_rpad> attributes
  
  They set left and right padding for all columns, respectively.
  
  =item * conditional column C<pad> style
  
   $t->add_cond_column_style($cond, pad => 0);
  
  =item * conditional column C<lpad>/C<rpad> style
  
   $t->add_cond_column_style($cond, lpad => 1, rpad => 2);
  
  =item * per-column C<pad> style
  
   $t->set_column_style($colname, pad => 0);
  
  =item * per-column C<lpad>/C<rpad> style
  
   $t->set_column_style($colname, lpad => 1);
   $t->set_column_style($colname, rpad => 2);
  
  =back
  
  =head1 ROW VERTICAL PADDING
  
  Default vertical padding is 0. This can be changed in the following ways (in
  order of precedence, from lowest):
  
  =over
  
  =item * table-level C<cell_vpad> attribute
  
  This sets top and bottom padding for all rows.
  
  =item * table-level C<cell_tpad>/C<cell_bpad> attributes
  
  They set top/bottom padding separately for all rows.
  
  =item * conditional row C<vpad> style
  
  Example:
  
   $t->add_cond_row_style($cond, vpad => 1);
  
  =item * per-row C<vpad> style
  
  Example:
  
   $t->set_row_style($rownum, vpad => 1);
  
  When adding row:
  
   $t->add_row($rownum, {vpad=>1});
  
  =item * per-row C<tpad>/C<bpad> style
  
  Example:
  
   $t->set_row_style($row_num, tpad => 1);
   $t->set_row_style($row_num, bpad => 2);
  
  When adding row:
  
   $t->add_row($row, {tpad=>1, bpad=>2});
  
  =back
  
  =head1 CELL COLORS
  
  By default data format colors are used, e.g. cyan/green for text (using the
  default color scheme, items C<num_data>, C<bool_data>, etc). In absense of that,
  C<cell_fgcolor> and C<cell_bgcolor> from the color scheme are used. You can
  customize colors in the following ways (ordered by precedence, from lowest):
  
  =over
  
  =item * table-level C<cell_fgcolor> and C<cell_bgcolor> attributes
  
  Sets all cells' colors. Color should be specified using 6-hexdigit RGB which
  will be converted to the appropriate terminal color.
  
  Can also be set to a coderef which will receive ($rownum, $colname) and should
  return an RGB color.
  
  =item * conditional column C<fgcolor> and C<bgcolor> style
  
  Example:
  
   $t->add_cond_column_style($cond, fgcolor => 'fa8888', bgcolor => '202020');
  
  =item * per-column C<fgcolor> and C<bgcolor> styles
  
  Example:
  
   $t->set_column_style('colname', fgcolor => 'fa8888');
   $t->set_column_style('colname', bgcolor => '202020');
  
  =item * conditional row C<fgcolor> and C<bgcolor> style
  
  Example:
  
   $t->add_cond_row_style($cond, fgcolor => 'fa8888', bgcolor => '202020');
  
  =item * per-row C<fgcolor> and C<bgcolor> styles
  
  Example:
  
   $t->set_row_style($rownum, {fgcolor => 'fa8888', bgcolor => '202020'});
  
  When adding row/rows:
  
   $t->add_row($row, {fgcolor=>..., bgcolor=>...});
   $t->add_rows($rows, {bgcolor=>...});
  
  =item * conditional cell C<fgcolor> and C<bgcolor> style
  
   $t->add_cond_cell_style($cond, fgcolor=>..., bgcolor=>...);
  
  =item * per-cell C<fgcolor> and C<bgcolor> styles
  
  Example:
  
   $t->set_cell_style($rownum, $colname, fgcolor => 'fa8888');
   $t->set_cell_style($rownum, $colname, bgcolor => '202020');
  
  =back
  
  For flexibility, all colors can be specified as coderef. See L</"COLOR THEMES">
  for more details.
  
  =head1 CELL (HORIZONTAL AND VERTICAL) ALIGNMENT
  
  By default, numbers are right-aligned, dates and bools are centered, and the
  other data types (text including) are left-aligned. All data are top-valigned.
  This can be customized in the following ways (in order of precedence, from
  lowest):
  
  =over
  
  =item * table-level C<cell_align> and C<cell_valign> attribute
  
  =item * conditional column C<align> and <valign> styles
  
   $t->add_cond_column_style($cond, align=>..., valign=>...);
  
  =item * per-column C<align> and C<valign> styles
  
  Example:
  
   $t->set_column_style($colname, align  => 'middle'); # or left, or right
   $t->set_column_style($colname, valign => 'top');    # or bottom, or middle
  
  =item * conditional row C<align> and <valign> styles
  
   $t->add_cond_row_style($cond, align=>..., valign=>...);
  
  =item * per-row C<align> and C<valign> styles
  
  =item * conditional cell C<align> and <valign> styles
  
   $t->add_cond_cell_style($cond, align=>..., valign=>...);
  
  =item * per-cell C<align> and C<valign> styles
  
   $t->set_cell_style($rownum, $colname, align  => 'middle');
   $t->set_cell_style($rownum, $colname, valign => 'top');
  
  =back
  
  =head1 CELL FORMATS
  
  The per-column- and per-cell- C<formats> style regulates how to format data. The
  value for this style setting will be passed to L<Data::Unixish::Apply>'s
  C<apply()>, as the C<functions> argument. So it should be a single string (like
  C<date>) or an array (like C<< ['date', ['centerpad', {width=>20}]] >>).
  
  See L<Data::Unixish> or install L<App::dux> and then run C<dux -l> to see what
  functions are available. Functions of interest to formatting data include:
  C<bool>, C<num>, C<sprintf>, C<sprintfn>, C<wrap>, C<ANSI::*> (in
  L<Data::Unixish::ANSI>), (among others).
  
  =head1 CONDITIONAL STYLES
  
  As an alternative to setting styles for specific {column,row,cell}, you can also
  create conditional styles. You specify a Perl code for the condition, then if
  the condition evaluates to true, the corresponding styles are applied to the
  corresponding {column,row,cell}.
  
  To add a conditional style, use the C<add_cond_{column,row,cell}_style> methods.
  These methods accept condition code as its first argument and one or more styles
  in the subsequent argument(s). For example:
  
   $t->add_cond_row_style(sub { $_ % 2 }, bgcolor=>'202020');
  
  The above example will set row bgcolor for odd rows. You can add more
  conditional styles:
  
   $t->add_cond_row_style(sub { $_ % 2 == 0 }, bgcolor=>'404040');
  
  All the conditions will be evaluated and the applicable styles will be merged
  together. For example, if we add a third conditional row style:
  
   $t->add_cond_row_style(sub { $_ % 10 == 0 }, height=>2, fgcolor=>'ffff00');
  
  then every tenth row will have its height set to 2, fgcolor set to ffff00, and
  bgcolor set to 404040 (from the second conditional).
  
  Condition coderef will be called with these arguments:
  
   ($self, %args)
  
  Available keys in C<%args> for conditional column styles: C<col> (int, column
  index), C<colname> (str, column name). Additionally, C<$_> will be set locally
  to the column index.
  
  Available keys in C<%args> for conditional row styles: C<row> (int, row index),
  C<row_data> (array). Additionally, C<$_> will be set locally to the row index.
  
  Available keys in C<%args> for conditional cell styles: C<content> (str), C<col>
  (int, column index), C<row> (int, row index). Additionally, C<$_> will be set
  locally to the cell content.
  
  Coderef should return boolean indicating whether style should be applied to a
  particular column/row/cell. When returning a true value, coderef can also return
  a hashref to return additional styles that will be merged/applied too.
  
  =head1 STYLE SETS
  
  A style set is just a collection of style settings that can be applied.
  Organizing styles into style sets makes applying the styles simpler and more
  reusable.
  
  More than one style sets can be applied.
  
  Style set module accepts arguments.
  
  For example, the L<Text::ANSITable::StyleSet::AltRow> style set defines this:
  
   has odd_bgcolor  => (is => 'rw');
   has even_bgcolor => (is => 'rw');
   has odd_fgcolor  => (is => 'rw');
   has even_fgcolor => (is => 'rw');
  
   sub apply {
       my ($self, $table) = @_;
  
       $table->add_cond_row_style(sub {
           my ($t, %args) = @_;
           my %styles;
           if ($_ % 2) {
               $styles{bgcolor} = $self->odd_bgcolor
                   if defined $self->odd_bgcolor;
               $styles{fgcolor} = $self->odd_fgcolor
                   if defined $self->odd_bgcolor;
           } else {
               $styles{bgcolor} = $self->even_bgcolor
                   if defined $self->even_bgcolor;
               $styles{fgcolor} = $self->even_fgcolor
                   if defined $self->even_bgcolor;
           }
           \%styles;
       });
   }
  
  To apply this style set:
  
   $t->apply_style_set("AltRow", odd_bgcolor=>"003300", even_bgcolor=>"000000");
  
  To create a new style set, create a module under C<Text::ANSITable::StyleSet::>
  like the above example. Please see the other existing style set modules for more
  examples.
  
  =head1 ATTRIBUTES
  
  =head2 columns => ARRAY OF STR
  
  Store column names. Note that when drawing, you can omit some columns, reorder
  them, or display some more than once (see C<column_filter> attribute).
  
  Caveat: Since, for convenience, a column can be referred to using its name or
  position, weird/unecxpected thing can happen if you name a column with a number
  (e.g. 0, 1, 2, ...). So don't do that.
  
  =head2 rows => ARRAY OF ARRAY OF STR
  
  Store row data. You can set this attribute directly, or add rows incrementally
  using C<add_row()> and C<add_rows()> methods.
  
  =head2 row_filter => CODE|ARRAY OF INT
  
  When drawing, only show rows that match this. Can be an array containing indices
  of rows which should be shown, or a coderef which will be called for each row
  with arguments C<< ($row, $row_num) >> and should return a bool value indicating
  whether that row should be displayed.
  
  Internal note: During drawing, rows will be filtered and put into C<<
  $t->{_draw}{frows} >>.
  
  =head2 column_filter => CODE|ARRAY OF STR
  
  When drawing, only show columns that match this. Can be an array containing
  names of columns that should be displayed (column names can be in different
  order or duplicate, column can also be referred to with its numeric index). Can
  also be a coderef which will be called with C<< ($col_name, $col_num) >> for
  every column and should return a bool value indicating whether that column
  should be displayed. The coderef version is more limited in that it cannot
  reorder the columns or instruct for the same column to be displayed more than
  once.
  
  Internal note: During drawing, column names will be filtered and put into C<<
  $t->{_draw}{fcols} >>.
  
  =head2 column_wrap => BOOL
  
  Set column wrapping for all columns. Can be overriden by per-column C<wrap>
  style. By default column wrapping will only be done for text columns and when
  width is explicitly set to a positive value.
  
  =head2 use_color => BOOL
  
  Whether to output color. Default is taken from C<COLOR> environment variable, or
  detected via C<(-t STDOUT)>. If C<use_color> is set to 0, an attempt to use a
  colored color theme (i.e. anything that is not the C<no_color> theme) will
  result in an exception.
  
  (In the future, setting C<use_color> to 0 might opt the module to use
  normal/plain string routines instead of the slower ta_* functions from
  L<Text::ANSI::Util>; this also means that the module won't handle ANSI escape
  codes in the content text.)
  
  =head2 color_depth => INT
  
  Terminal's color depth. Either 16, 256, or 2**24 (16777216). Default will be
  retrieved from C<COLOR_DEPTH> environment or detected using L<Term::Detect>.
  
  =head2 use_box_chars => BOOL
  
  Whether to use box drawing characters. Drawing box drawing characters can be
  problematic in some places because it uses ANSI escape codes to switch to (and
  back from) line drawing mode (C<"\e(0"> and C<"\e(B">, respectively).
  
  Default is taken from C<BOX_CHARS> environment variable, or 1. If
  C<use_box_chars> is set to 0, an attempt to use a border style that uses box
  drawing chararacters will result in an exception.
  
  =head2 use_utf8 => BOOL
  
  Whether to use Unicode (UTF8) characters. Default is taken from C<UTF8>
  environment variable, or detected using L<Term::Detect>, or guessed via L<LANG>
  environment variable. If C<use_utf8> is set to 0, an attempt to select a border
  style that uses Unicode characters will result in an exception.
  
  (In the future, setting C<use_utf8> to 0 might opt the module to use the
  non-"mb_*" version of functions from L<Text::ANSI::Util>, e.g. C<ta_wrap()>
  instead of C<ta_mbwrap()>, and so on).
  
  =head2 wide => BOOL
  
  Whether to support wide characters. The default is to check for the existence of
  L<Text::ANSI::WideUtil> (an optional prereq). You can explicitly enable or
  disable wide-character support here.
  
  =head2 border_style => HASH
  
  Border style specification to use.
  
  You can set this attribute's value with a specification or border style name.
  See L<"/BORDER STYLES"> for more details.
  
  =head2 border_style_args => HASH
  
  Some border styles can accept arguments. You can set it here. See the
  corresponding border style's documentation for information on what arguments it
  accepts.
  
  =head2 color_theme => HASH
  
  Color theme specification to use.
  
  You can set this attribute's value with a specification or color theme name. See
  L<"/COLOR THEMES"> for more details.
  
  =head2 color_theme_args => HASH
  
  Some color themes can accept arguments. You can set it here. See the
  corresponding color theme's documentation for information on what arguments it
  accepts.
  
  =head2 show_header => BOOL (default: 1)
  
  When drawing, whether to show header.
  
  =head2 show_row_separator => INT (default: 2)
  
  When drawing, whether to show separator lines between rows. The default (2) is
  to only show separators drawn using C<add_row_separator()>. If you set this to
  1, lines will be drawn after every data row. If you set this attribute to 0, no
  lines will be drawn whatsoever.
  
  =head2 cell_width => INT
  
  Set width for all cells. Can be overriden by per-column C<width> style.
  
  =head2 cell_height => INT
  
  Set height for all cell. Can be overriden by per-row C<height> style.
  
  =head2 cell_align => STR
  
  Set (horizontal) alignment for all cells. Either C<left>, C<middle>, or
  C<right>. Can be overriden by per-column/per-row/per-cell C<align> style.
  
  =head2 cell_valign => STR
  
  Set (horizontal) alignment for all cells. Either C<top>, C<middle>, or
  C<bottom>. Can be overriden by per-column/per-row/per-cell C<align> style.
  
  =head2 cell_pad => INT
  
  Set (horizontal) padding for all cells. Can be overriden by per-column C<pad>
  style.
  
  =head2 cell_lpad => INT
  
  Set left padding for all cells. Overrides the C<cell_pad> attribute. Can be
  overriden by per-column C<lpad> style.
  
  =head2 cell_rpad => INT
  
  Set right padding for all cells. Overrides the C<cell_pad> attribute. Can be
  overriden by per-column C<rpad> style.
  
  =head2 cell_vpad => INT
  
  Set vertical padding for all cells. Can be overriden by per-row C<vpad> style.
  
  =head2 cell_tpad => INT
  
  Set top padding for all cells. Overrides the C<cell_vpad> attribute. Can be
  overriden by per-row C<tpad> style.
  
  =head2 cell_bpad => INT
  
  Set bottom padding for all cells. Overrides the C<cell_vpad> attribute. Can be
  overriden by per-row C<bpad> style.
  
  =head2 cell_fgcolor => RGB|CODE
  
  Set foreground color for all cells. Value should be 6-hexdigit RGB. Can also be
  a coderef that will receive %args (e.g. row_num, col_name, col_num) and should
  return an RGB color. Can be overriden by per-cell C<fgcolor> style.
  
  =head2 cell_bgcolor => RGB|CODE
  
  Like C<cell_fgcolor> but for background color.
  
  =head2 header_fgcolor => RGB|CODE
  
  Set foreground color for all headers. Overrides C<cell_fgcolor> for headers.
  Value should be a 6-hexdigit RGB. Can also be a coderef that will receive %args
  (e.g. col_name, col_num) and should return an RGB color.
  
  =head2 header_bgcolor => RGB|CODE
  
  Like C<header_fgcolor> but for background color.
  
  =head2 header_align => STR
  
  =head2 header_valign => STR
  
  =head2 header_vpad => INT
  
  =head2 header_tpad => INT
  
  =head2 header_bpad => INT
  
  =head1 METHODS
  
  =head2 $t = Text::ANSITable->new(%attrs) => OBJ
  
  Constructor.
  
  =head2 $t->list_border_styles => LIST
  
  Return the names of available border styles. Border styles will be searched in
  C<Text::ANSITable::BorderStyle::*> modules.
  
  =head2 $t->list_color_themes => LIST
  
  Return the names of available color themes. Color themes will be searched in
  C<Text::ANSITable::ColorTheme::*> modules.
  
  =head2 $t->list_style_sets => LIST
  
  Return the names of available style sets. Style set names are retrieved by
  listing modules under C<Text::ANSITable::StyleSet::*> namespace.
  
  =head2 $t->get_border_style($name) => HASH
  
  Can also be called as a static method: C<<
  Text::ANSITable->get_border_style($name) >>.
  
  =head2 $t->get_color_theme($name) => HASH
  
  Can also be called as a static method: C<<
  Text::ANSITable->get_color_theme($name) >>.
  
  =head2 $t->add_row(\@row[, \%styles]) => OBJ
  
  Add a row. Note that row data is not copied, only referenced.
  
  Can also add per-row styles (which can also be done using C<row_style()>).
  
  =head2 $t->add_rows(\@rows[, \%styles]) => OBJ
  
  Add multiple rows. Note that row data is not copied, only referenced.
  
  Can also add per-row styles (which can also be done using C<row_style()>).
  
  =head2 $t->add_row_separator() => OBJ
  
  Add a row separator line.
  
  =head2 $t->get_cell($row_num, $col) => VAL
  
  Get cell value at row #C<$row_num> (starts from zero) and column named/numbered
  C<$col>.
  
  =head2 $t->set_cell($row_num, $col, $newval) => VAL
  
  Set cell value at row #C<$row_num> (starts from zero) and column named/numbered
  C<$col>. Return old value.
  
  =head2 $t->get_column_style($col, $style) => VAL
  
  Get per-column style for column named/numbered C<$col>.
  
  =head2 $t->set_column_style($col, $style=>$val[, $style2=>$val2, ...])
  
  Set per-column style(s) for column named/numbered C<$col>. Available values for
  C<$style>: C<align>, C<valign>, C<pad>, C<lpad>, C<rpad>, C<width>, C<formats>,
  C<fgcolor>, C<bgcolor>, C<type>, C<wrap>.
  
  =head2 $t->get_cond_column_styles => ARRAY
  
  Get all the conditional column styles set so far.
  
  =head2 $t->add_cond_column_style($cond, $style=>$val[, $style2=>$val2 ...])
  
  Add a new conditional column style. See L</"CONDITIONAL STYLES"> for more
  details on conditional style.
  
  =for comment | =head2 $t->clear_cond_column_styles | Clear all the conditional column styles.
  
  =head2 $t->get_eff_column_style($col, $style) => VAL
  
  Get "effective" column style named C<$style> for a particular column. Effective
  column style is calculated from all the conditional column styles and the
  per-column styles then merged together. This is the per-column style actually
  applied.
  
  =head2 $t->get_row_style($row_num) => VAL
  
  Get per-row style for row numbered C<$row_num>.
  
  =head2 $t->set_row_style($row_num, $style=>$newval[, $style2=>$newval2, ...])
  
  Set per-row style(s) for row numbered C<$row_num>. Available values for
  C<$style>: C<align>, C<valign>, C<height>, C<vpad>, C<tpad>, C<bpad>,
  C<fgcolor>, C<bgcolor>.
  
  =head2 $t->get_cond_row_styles => ARRAY
  
  Get all the conditional row styles set so far.
  
  =head2 $t->add_cond_row_style($cond, $style=>$val[, $style2=>$val2 ...])
  
  Add a new conditional row style. See L</"CONDITIONAL STYLES"> for more details
  on conditional style.
  
  =for comment | =head2 $t->clear_cond_row_styles | Clear all the conditional row styles.
  
  =head2 $t->get_eff_row_style($row_num, $style) => VAL
  
  Get "effective" row style named C<$style> for a particular row. Effective row
  style is calculated from all the conditional row styles and the per-row styles
  then merged together. This is the per-row style actually applied.
  
  =head2 $t->get_cell_style($row_num, $col, $style) => VAL
  
  Get per-cell style named C<$style> for a particular cell. Return undef if there
  is no per-cell style with that name.
  
  =head2 $t->set_cell_style($row_num, $col, $style=>$newval[, $style2=>$newval2, ...])
  
  Set per-cell style(s). Available values for C<$style>: C<align>, C<valign>,
  C<formats>, C<fgcolor>, C<bgcolor>.
  
  =head2 $t->get_cond_cell_styles => ARRAY
  
  Get all the conditional cell styles set so far.
  
  =head2 $t->add_cond_cell_style($cond, $style=>$val[, $style2=>$val2 ...])
  
  Add a new conditional cell style. See L</"CONDITIONAL STYLES"> for more details
  on conditional style.
  
  =for comment | =head2 $t->clear_cond_cell_styles | Clear all the conditional cell styles.
  
  =head2 $t->get_eff_cell_style($row_num, $col, $style) => VAL
  
  Get "effective" cell style named C<$style> for a particular cell. Effective cell
  style is calculated from all the conditional cell styles and the per-cell styles
  then merged together. This is the per-cell style actually applied.
  
  =head2 $t->apply_style_set($name, %args)
  
  Apply a style set. See L</"STYLE SETS"> for more details.
  
  =head2 $t->draw => STR
  
  Render table.
  
  =head1 FAQ
  
  =head2 General
  
  =head3 Output is too fancy! I just want to generate some plain (Text::ASCIITable-like) output to be copy-pasted to my document.
  
   $t->use_utf8(0);
   $t->use_box_chars(0);
   $t->use_color(0);
   $t->border_style('Default::single_ascii');
  
  and you're good to go. Alternatively you can set environment UTF8=0,
  BOX_CHARS=0, COLOR=0, and ANSITABLE_BORDER_STYLE=Default::single_ascii.
  
  =head3 Why am I getting 'Wide character in print' warning?
  
  You are probably using a utf8 border style, and you haven't done something like
  this to your output:
  
   binmode(STDOUT, ":utf8");
  
  =head3 My table looks garbled when viewed through pager like B<less>!
  
  That's because B<less> by default escapes ANSI color and box_char codes. Try
  using C<-R> option of B<less> to display ANSI color codes raw.
  
  Or, try not using colors and box_char border styles:
  
   $t->use_color(0);
   $t->use_box_chars(0);
  
  Note that as of this writing, B<less -R> does not interpret box_char codes so
  you'll need to avoid using box_char border styles if you want your output to
  display properly under B<less>.
  
  =head3 How do I hide some columns/rows when drawing?
  
  Use the C<column_filter> and C<row_filter> attributes. For example, given this
  table:
  
   my $t = Text::ANSITable->new;
   $t->columns([qw/one two three/]);
   $t->add_row([$_, $_, $_]) for 1..10;
  
  Doing this:
  
   $t->row_filter([0, 1, 4]);
   print $t->draw;
  
  will show:
  
    one | two | three
   -----+-----+-------
      1 |   1 |     1
      2 |   2 |     2
      5 |   5 |     5
  
  Doing this:
  
   $t->row_filter(sub { my ($row, $idx) = @_; $row->[0] % 2 }
  
  will display:
  
    one | two | three
   -----+-----+-------
      1 |   1 |     1
      3 |   3 |     3
      5 |   5 |     5
      7 |   7 |     7
      9 |   9 |     9
  
  Doing this:
  
   $t->column_filter([qw/two one 0/]);
  
  will display:
  
    two | one | one
   -----+-----+-----
      1 |   1 |   1
      2 |   2 |   2
      3 |   3 |   3
      4 |   4 |   4
      5 |   5 |   5
      6 |   6 |   6
      7 |   7 |   7
      8 |   8 |   8
      9 |   9 |   9
     10 |  10 |  10
  
  Doing this:
  
   $t->column_filter(sub { my ($colname, $idx) = @_; $colname =~ /t/ });
  
  will display:
  
    two | three
   -----+-------
      1 |     1
      2 |     2
      3 |     3
      4 |     4
      5 |     5
      6 |     6
      7 |     7
      8 |     8
      9 |     9
     10 |    10
  
  =head2 Formatting data
  
  =head3 How do I format data?
  
  Use the C<formats> per-column style or per-cell style. For example:
  
   $t->set_column_style('available', formats => [[bool=>{style=>'check_cross'}],
                                                 [centerpad=>{width=>10}]]);
   $t->set_column_style('amount'   , formats => [[num=>{decimal_digits=>2}]]);
   $t->set_column_style('size'     , formats => [[num=>{style=>'kilo'}]]);
  
  See L<Data::Unixish::Apply> and L<Data::Unixish> for more details on the
  available formatting functions.
  
  =head3 How does the module determine column data type?
  
  Currently: if column name has the word C<date> or C<time> in it, the column is
  assumed to contain B<date> data. If column name has C<?> in it, the column is
  assumed to be B<bool>. If a column contains only numbers (or undefs), it is
  B<num>. Otherwise, it is B<str>.
  
  =head3 How does the module format data types?
  
  Currently: B<num> will be right aligned and applied C<num_data> color (cyan in
  the default theme). B<date> will be centered and applied C<date_data> color
  (gold in the default theme). B<bool> will be centered and formatted as
  check/cross symbol and applied C<bool_data> color (red/green depending on
  whether the data is false/true). B<str> will be applied C<str_data> color (no
  color in the default theme).
  
  Other color themes might use different colors.
  
  =head3 How do I force column to be of a certain data type?
  
  For example, you have a column named C<deleted> but want to display it as
  B<bool>. You can do:
  
   $t->set_column_style(deleted => type => 'bool');
  
  =head3 How do I wrap long text?
  
  The C<wrap> dux function can be used to wrap text (see: L<Data::Unixish::wrap>).
  You'll want to set C<ansi> and C<mb> both to 1 to handle ANSI escape codes and
  wide characters in your text (unless you are sure that your text does not
  contain those):
  
   $t->set_column_style('description', formats=>[[wrap => {width=>60, ansi=>1, mb=>1}]]);
  
  =head3 How do I highlight text with color?
  
  The C<ansi::highlight> dux function can be used to highlight text (see:
  L<Data::Unixish::ANSI::highlight>).
  
   $t->set_column_style(2, formats => [[highlight => {pattern=>$pat}]]);
  
  =head3 I want to change the default bool cross/check sign representation!
  
  By default, bool columns are shown as cross/check sign. This can be changed,
  e.g.:
  
   $t->set_column_style($colname, type    => 'bool',
                                  formats => [[bool => {style=>"Y_N"}]]);
  
  See L<Data::Unixish::bool> for more details.
  
  =head3 How do I do conditional cell formatting?
  
  There are several ways.
  
  First, you can use the C<cond> dux function through C<formats> style. For
  example, if the cell contains the string "Cuti", you want to color the cell
  yellow. Otherwise, you want to color the cell red:
  
   $t->set_column_style($colname, formats => [
       [cond => {
           if   => sub { $_ =~ /Cuti/ },
           then => ["ansi::color", {color=>"yellow"}],
           else => ["ansi::color", {color=>"red"}],
       }]
   ]);
  
  Another way is to use the C<add_cond_{cell,row,column}> methods. See
  L</"CONDITIONAL STYLES"> for more details. An example:
  
   $t->add_cond_row_style(sub {
       my %args = @_;
       $args{colname} =~ /Cuti/ ? {bgcolor=>"ffff00"} : {bgcolor=>"ff0000"};
   });
  
  And another way is to use (or create) style set, which is basically a packaging
  of the above ways. An advantage of using style set is, because you do not
  specify coderef directly, you can specify it from the environment variable. See
  L</"STYLE SETS"> for more details.
  
  =head2 Border
  
  =head3 How to hide borders?
  
  There is currently no C<show_border> attribute. Choose border styles like
  C<Default::space_ascii> or C<Default::none_utf8>:
  
   $t->border_style("Default::none");
  
  =head3 Why are there 'none_ascii' as well 'none_utf8' and 'none_boxchar' border styles?
  
  Because of the row separator, that can still be drawn if C<add_row_separator()>
  is used. See next question.
  
  =head3 I want to hide borders, and I do not want row separators to be shown!
  
  The default is for separator lines to be drawn if drawn using
  C<add_row_separator()>, e.g.:
  
   $t->add_row(['row1']);
   $t->add_row(['row2']);
   $t->add_row_separator;
   $t->add_row(['row3']);
  
  The result will be:
  
     row1
     row2
   --------
     row3
  
  However, if you set C<show_row_separator> to 0, no separator lines will be drawn
  whatsoever:
  
     row1
     row2
     row3
  
  =head3 I want to separate each row with a line!
  
  Set C<show_row_separator> to 1, or alternatively, set
  C<ANSITABLE_STYLE='{"show_row_separator":1}>.
  
  =head2 Color
  
  =head3 How to disable colors?
  
  Set C<use_color> attribute or C<COLOR> environment to 0.
  
  =head3 How to specify colors using names (e.g. red, 'navy blue') instead of RGB?
  
  Use modules like L<Graphics::ColorNames>.
  
  =head3 I'm not seeing colors when output is piped (e.g. to a pager)!
  
  The default is to disable colors when (-t STDOUT) is false. You can force-enable
  colors by setting C<use_color> attribute or C<COLOR> environment to 1.
  
  =head3 How to enable 256 colors? I'm seeing only 16 colors.
  
  Use terminal emulators that support 256 colors, e.g. Konsole, xterm,
  gnome-terminal, PuTTY/pterm (but the last one has minimal Unicode support).
  Better yet, use Konsole or Konsole-based emulators which supports 24bit colors.
  
  =head3 How to enable 24bit colors (true color)?
  
  Currently only B<Konsole> and the Konsole-based B<Yakuake> terminal emulator
  software support 24bit colors.
  
  =head3 How to force lower color depth? (e.g. I use Konsole but want 16 colors)
  
  Set C<COLOR_DEPTH> to 16.
  
  =head3 How to change border gradation color?
  
  The default color theme applies vertical color gradation to borders from white
  (ffffff) to gray (444444). To change this, set C<border1> and C<border2> theme
  arguments:
  
   $t->color_theme_args({border1=>'ff0000', border2=>'00ff00'}); # red to green
  
  =head3 I'm using terminal emulator with white background, the texts are not very visible!
  
  Try using the "*_whitebg" themes, as the other themes are geared towards
  terminal emulators with black background.
  
  =head3 How to set different background colors for odd/even rows?
  
  Aside from doing C<< $t->set_row_style($row_num, bgcolor=>...) >> for each row,
  you can also do this:
  
   $t->cell_bgcolor(sub { my ($self, %args) = @_; $args{row_num} % 2 ? '202020' : undef });
  
  Or, you can use conditional row styles:
  
   $t->add_cond_row_style(sub { $_ % 2 }, {bgcolor=>'202020'});
  
  Or, you can use the L<Text::ANSITable::StyleSet::AltRow> style set:
  
   $t->apply_style_set(AltRow => {even_bgcolor=>'202020'});
  
  =head1 ENVIRONMENT
  
  =head2 COLOR => BOOL
  
  Can be used to set default value for the C<color> attribute.
  
  =head2 COLOR_DEPTH => INT
  
  Can be used to set default value for the C<color_depth> attribute.
  
  =head2 BOX_CHARS => BOOL
  
  Can be used to set default value for the C<box_chars> attribute.
  
  =head2 UTF8 => BOOL
  
  Can be used to set default value for the C<utf8> attribute.
  
  =head2 COLUMNS => INT
  
  Can be used to override terminal width detection.
  
  =head2 ANSITABLE_BORDER_STYLE => STR
  
  Can be used to set default value for C<border_style> attribute.
  
  =head2 ANSITABLE_COLOR_THEME => STR
  
  Can be used to set default value for C<border_style> attribute.
  
  =head2 ANSITABLE_STYLE => str(json)
  
  Can be used to set table's most attributes. Value should be a JSON-encoded hash
  of C<< attr => val >> pairs. Example:
  
   % ANSITABLE_STYLE='{"show_row_separator":1}' ansitable-list-border-styles
  
  will display table with row separator lines after every row.
  
  =head2 WRAP => BOOL
  
  Can be used to set default value for the C<wrap> column style.
  
  =head2 ANSITABLE_COLUMN_STYLES => str(json)
  
  Can be used to set per-column styles. Interpreted right before draw(). Value
  should be a JSON-encoded hash of C<< col => {style => val, ...} >> pairs.
  Example:
  
   % ANSITABLE_COLUMN_STYLES='{"2":{"type":"num"},"3":{"type":"str"}}' ansitable-list-border-styles
  
  will display the bool columns as num and str instead.
  
  =head2 ANSITABLE_ROW_STYLES => str(json)
  
  Can be used to set per-row styles. Interpreted right before draw(). Value should
  be a JSON-encoded a hash of C<< row_num => {style => val, ...} >> pairs.
  Example:
  
   % ANSITABLE_ROW_STYLES='{"0":{"bgcolor":"000080","vpad":1}}' ansitable-list-border-styles
  
  will display the first row with blue background color and taller height.
  
  =head2 ANSITABLE_CELL_STYLES => str(json)
  
  Can be used to set per-cell styles. Interpreted right before draw(). Value
  should be a JSON-encoded a hash of C<< "row_num,col" => {style => val, ...} >>
  pairs. Example:
  
   % ANSITABLE_CELL_STYLES='{"1,1":{"bgcolor":"008000"}}' ansitable-list-border-styles
  
  will display the second-on-the-left, second-on-the-top cell with green
  background color.
  
  =head2 ANSITABLE_STYLE_SETS => str(json)
  
  Can be used to apply style sets. Value should be a JSON-encoded array. Each
  element must be a style set name or a 2-element array containing style set name
  and its arguments (C<< [$name, \%args] >>). Example:
  
   % ANSITABLE_STYLE_SETS='[["AltRow",{"odd_bgcolor":"003300"}]]'
  
  will display table with row separator lines after every row.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Text-ANSITable>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Text-ANSITable>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Text-ANSITable>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  =head2 Related to Text::ANSITable family
  
  For collections of border styles, search for C<Text::ANSITable::BorderStyle::*>
  modules.
  
  For collections of color themes, search for C<Text::ANSITable::ColorTheme::*>
  modules.
  
  =head2 Other table-formatting CPAN modules
  
  L<Text::ASCIITable> is one of the most popular table-formatting module. There
  are a couple of "extensions" for Text::ASCIITable: L<Text::ASCIITable::TW>,
  L<Text::ASCIITable::Wrap>; Text::ANSITable can be an alternative for all those
  modules since it can already handle wide-characters, multiline text in cells.
  
  L<Text::TabularDisplay>
  
  L<Text::Table>
  
  L<Text::SimpleTable>
  
  L<Text::UnicodeTable::Simple>
  
  L<Table::Simple>
  
  =head2 Other
  
  Unix command B<column> (e.g. C<column -t>).
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TEXT_ANSITABLE

    $main::fatpacked{"Text/ANSITable/BorderStyle/Default.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEXT_ANSITABLE_BORDERSTYLE_DEFAULT';
  package Text::ANSITable::BorderStyle::Default;
  
  our $DATE = '2016-03-11'; # DATE
  our $VERSION = '0.48'; # VERSION
  
  use 5.010;
  use strict;
  use utf8;
  use warnings;
  
  our %border_styles = (
  
      # none
  
      none_ascii => {
          summary => 'No border',
          chars => [
              ['','','',''],     # 0
              ['','',''],        # 1
              ['','','',''],     # 2
              ['','',''],        # 3
              [' ','-','-',' '], # 4
              ['','','',''],     # 5
          ],
      },
  
      none_boxchar => {
          summary => 'No border',
          chars => [
              ['','','',''],     # 0
              ['','',''],        # 1
              ['','','',''],     # 2
              ['','',''],        # 3
              ['','q','q',''],   # 4
              ['','','',''],     # 5
          ],
          box_chars => 1,
      },
  
      none_utf8 => {
          summary => 'No border',
          chars => [
              ['','','',''],     # 0
              ['','',''],        # 1
              ['','','',''],     # 2
              ['','',''],        # 3
              ['','─','─',''],   # 4
              ['','','',''],     # 5
          ],
          utf8 => 1,
      },
  
  
      # space
  
      space_ascii => {
          summary => 'Space as border',
          chars => [
              [' ',' ',' ',' '], # 0
              [' ',' ',' '],     # 1
              [' ',' ',' ',' '], # 2
              [' ',' ',' '],     # 3
              [' ','-','-',' '], # 4
              [' ',' ',' ',' '], # 5
          ],
      },
  
      space_boxchar => {
          summary => 'Space as border',
          chars => [
              [' ',' ',' ',' '], # 0
              [' ',' ',' '],     # 1
              [' ',' ',' ',' '], # 2
              [' ',' ',' '],     # 3
              [' ','q','q',' '], # 4
              [' ',' ',' ',' '], # 5
          ],
          box_chars => 1,
      },
  
      space_utf8 => {
          summary => 'Space as border',
          chars => [
              [' ',' ',' ',' '], # 0
              [' ',' ',' '],     # 1
              [' ',' ',' ',' '], # 2
              [' ',' ',' '],     # 3
              [' ','─','─',' '], # 4
              [' ',' ',' ',' '], # 5
          ],
          utf8 => 1,
      },
  
      spacei_ascii => {
          summary => 'Space, inner-only',
          chars => [
              ['','','',''],   # 0
              ['',' ',''],     # 1
              ['',' ',' ',''], # 2
              ['',' ',''],     # 3
              ['','-','-',''], # 4
              ['','','',''],   # 5
          ],
      },
  
      spacei_boxchar => {
          summary => 'Space, inner-only',
          chars => [
              ['','','',''],   # 0
              ['',' ',''],     # 1
              ['',' ',' ',''], # 2
              ['',' ',''],     # 3
              ['','q','q',''], # 4
              ['','','',''],   # 5
          ],
          box_chars => 1,
      },
  
      spacei_utf8 => {
          summary => 'Space, inner-only',
          chars => [
              ['','','',''],   # 0
              ['',' ',''],     # 1
              ['',' ',' ',''], # 2
              ['',' ',''],     # 3
              ['','─','─',''], # 4
              ['','','',''],   # 5
          ],
          utf8 => 1,
      },
  
      # single
  
      single_ascii => {
          summary => 'Single',
          chars => [
              ['.','-','+','.'], # 0
              ['|','|','|'],     # 1
              ['+','-','+','+'], # 2
              ['|','|','|'],     # 3
              ['+','-','+','+'], # 4
              ['`','-','+',"'"], # 5
          ],
      },
  
      single_boxchar => {
          summary => 'Single',
          chars => [
              ['l','q','w','k'], # 0
              ['x','x','x'],     # 1
              ['t','q','n','u'], # 2
              ['x','x','x'],     # 3
              ['t','q','n','u'], # 4
              ['m','q','v','j'], # 5
          ],
          box_chars => 1,
      },
  
      single_utf8 => {
          summary => 'Single',
          chars => [
              ['┌','─','┬','┐'], # 0
              ['│','│','│'],     # 1
              ['├','─','┼','┤'], # 2
              ['│','│','│'],     # 3
              ['├','─','┼','┤'], # 4
              ['└','─','┴','┘'], # 5
          ],
          utf8 => 1,
      },
  
  
      # single, horizontal only
  
      singleh_ascii => {
          summary => 'Single, horizontal only',
          chars => [
              ['-','-','-','-'], # 0
              [' ',' ',' '],     # 1
              ['-','-','-','-'], # 2
              [' ',' ',' '],     # 3
              ['-','-','-','-'], # 4
              ['-','-','-','-'], # 5
          ],
      },
  
      singleh_boxchar => {
          summary => 'Single, horizontal only',
          chars => [
              ['q','q','q','q'], # 0
              [' ',' ',' '],     # 1
              ['q','q','q','q'], # 2
              [' ',' ',' '],     # 3
              ['q','q','q','q'], # 4
              ['q','q','q','q'], # 5
          ],
          box_chars => 1,
      },
  
      singleh_utf8 => {
          summary => 'Single, horizontal only',
          chars => [
              ['─','─','─','─'], # 0
              [' ',' ',' '],     # 1
              ['─','─','─','─'], # 2
              [' ',' ',' '],     # 3
              ['─','─','─','─'], # 4
              ['─','─','─','─'], # 5
          ],
          utf8 => 1,
      },
  
  
      # single, vertical only
  
      singlev_ascii => {
          summary => 'Single border, only vertical',
          chars => [
              ['|',' ','|','|'], # 0
              ['|','|','|'],     # 1
              ['|',' ','|','|'], # 2
              ['|','|','|'],     # 3
              ['|','-','|','|'], # 4
              ['|',' ','|','|'], # 5
          ],
      },
  
      singlev_boxchar => {
          summary => 'Single, vertical only',
          chars => [
              ['x',' ','x','x'], # 0
              ['x','x','x'],     # 1
              ['x',' ','x','x'], # 2
              ['x','x','x'],     # 3
              ['x','q','x','x'], # 4
              ['x',' ','x','x'], # 5
          ],
          box_chars => 1,
      },
  
      singlev_utf8 => {
          summary => 'Single, vertical only',
          chars => [
              ['│',' ','│','│'], # 0
              ['│','│','│'],     # 1
              ['│',' ','│','│'], # 2
              ['│','│','│'],     # 3
              ['│','─','│','│'], # 4
              ['│',' ','│','│'], # 5
          ],
          utf8 => 1,
      },
  
  
      # single, inner only
  
      singlei_ascii => {
          summary => 'Single, inner only (like in psql command-line client)',
          chars => [
              ['','','',''],     # 0
              [' ','|',' '],     # 1
              [' ','-','+',' '], # 2
              [' ','|',' '],     # 3
              [' ','-','+',' '], # 4
              ['','','',''],     # 5
          ],
      },
  
      singlei_boxchar => {
          summary => 'Single, inner only (like in psql command-line client)',
          chars => [
              ['','','',''],     # 0
              [' ','x',' '],     # 1
              [' ','q','n',' '], # 2
              [' ','x',' '],     # 3
              [' ','q','n',' '], # 4
              ['','','',''],     # 5
          ],
          box_chars => 1,
      },
  
      singlei_utf8 => {
          summary => 'Single, inner only (like in psql command-line client)',
          chars => [
              ['','','',''],     # 0
              [' ','│',' '],     # 1
              [' ','─','┼',' '], # 2
              [' ','│',' '],     # 3
              [' ','─','┼',' '], # 4
              ['','','',''],     # 5
          ],
          utf8 => 1,
      },
  
  
      # single, outer only
  
      singleo_ascii => {
          summary => 'Single, outer only',
          chars => [
              ['.','-','-','.'], # 0
              ['|',' ','|'],     # 1
              ['|',' ',' ','|'], # 2
              ['|',' ','|'],     # 3
              ['+','-','-','+'], # 4
              ['`','-','-',"'"], # 5
          ],
      },
  
      singleo_boxchar => {
          summary => 'Single, outer only',
          chars => [
              ['l','q','q','k'], # 0
              ['x',' ','x'],     # 1
              ['x',' ',' ','x'], # 2
              ['x',' ','x'],     # 3
              ['t','q','q','u'], # 4
              ['m','q','q','j'], # 5
          ],
          box_chars => 1,
      },
  
      singleo_utf8 => {
          summary => 'Single, outer only',
          chars => [
              ['┌','─','─','┐'], # 0
              ['│',' ','│'],     # 1
              ['│',' ',' ','│'], # 2
              ['│',' ','│'],     # 3
              ['├','─','─','┤'], # 4
              ['└','─','─','┘'], # 5
          ],
          utf8 => 1,
      },
  
  
      # curved single
  
      csingle => {
          summary => 'Curved single',
          chars => [
              ['╭','─','┬','╮'], # 0
              ['│','│','│'],     # 1
              ['├','─','┼','┤'], # 2
              ['│','│','│'],     # 3
              ['├','─','┼','┤'], # 4
              ['╰','─','┴','╯'], # 5
          ],
          utf8 => 1,
      },
  
  
      # bold single
  
      bold => {
          summary => 'Bold',
          chars => [
              ['┏','━','┳','┓'], # 0
              ['┃','┃','┃'],     # 1
              ['┣','━','╋','┫'], # 2
              ['┃','┃','┃'],     # 3
              ['┣','━','╋','┫'], # 4
              ['┗','━','┻','┛'], # 5
          ],
          utf8 => 1,
      },
  
  
      #boldv => {
      #    summary => 'Vertically-bold',
      #},
  
  
      #boldh => {
      #    summary => 'Horizontally-bold',
      #},
  
  
      # double
  
      double => {
          summary => 'Double',
          chars => [
              ['╔','═','╦','╗'], # 0
              ['║','║','║'],     # 1
              ['╠','═','╬','╣'], # 2
              ['║','║','║'],     # 3
              ['╠','═','╬','╣'], # 4
              ['╚','═','╩','╝'], # 5
          ],
          utf8 => 1,
      },
  
  
      # brick
  
      brick => {
          summary => 'Single, bold on bottom right to give illusion of depth',
          chars => [
              ['┌','─','┬','┒'], # 0
              ['│','│','┃'],     # 1
              ['├','─','┼','┨'], # 2
              ['│','│','┃'],     # 3
              ['├','─','┼','┨'], # 4
              ['┕','━','┷','┛'], # 5
          ],
          utf8 => 1,
      },
  
      bricko => {
          summary => 'Single, outer only, '.
              'bold on bottom right to give illusion of depth',
          chars => [
              ['┌','─','─','┒'], # 0
              ['│',' ','┃'],     # 1
              ['│',' ',' ','┃'], # 2
              ['│',' ','┃'],     # 3
              ['├','─','─','┨'], # 4
              ['┕','━','━','┛'], # 5
          ],
          utf8 => 1,
      },
  
  );
  
  1;
  # ABSTRACT: Default border styles
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Text::ANSITable::BorderStyle::Default - Default border styles
  
  =head1 VERSION
  
  This document describes version 0.48 of Text::ANSITable::BorderStyle::Default (from Perl distribution Text-ANSITable), released on 2016-03-11.
  
  =head1 BORDER STYLES
  
  Below are the border styles included in this package:
  
  =head2 Default::bold
  
  Bold (utf8: yes, box_chars: no).
  
   ┏━━━━━━━━━┳━━━━━━━━━┓
   ┃ column1 ┃ column2 ┃
   ┣━━━━━━━━━╋━━━━━━━━━┫
   ┃ row1.1  ┃ row1.2  ┃
   ┃ row2.1  ┃ row3.2  ┃
   ┣━━━━━━━━━╋━━━━━━━━━┫
   ┃ row3.1  ┃ row3.2  ┃
   ┗━━━━━━━━━┻━━━━━━━━━┛
  
  
  =head2 Default::brick
  
  Single, bold on bottom right to give illusion of depth (utf8: yes, box_chars: no).
  
   ┌─────────┬─────────┒
   │ column1 │ column2 ┃
   ├─────────┼─────────┨
   │ row1.1  │ row1.2  ┃
   │ row2.1  │ row3.2  ┃
   ├─────────┼─────────┨
   │ row3.1  │ row3.2  ┃
   ┕━━━━━━━━━┷━━━━━━━━━┛
  
  
  =head2 Default::bricko
  
  Single, outer only, bold on bottom right to give illusion of depth (utf8: yes, box_chars: no).
  
   ┌───────────────────┒
   │ column1   column2 ┃
   │                   ┃
   │ row1.1    row1.2  ┃
   │ row2.1    row3.2  ┃
   ├───────────────────┨
   │ row3.1    row3.2  ┃
   ┕━━━━━━━━━━━━━━━━━━━┛
  
  
  =head2 Default::csingle
  
  Curved single (utf8: yes, box_chars: no).
  
   ╭─────────┬─────────╮
   │ column1 │ column2 │
   ├─────────┼─────────┤
   │ row1.1  │ row1.2  │
   │ row2.1  │ row3.2  │
   ├─────────┼─────────┤
   │ row3.1  │ row3.2  │
   ╰─────────┴─────────╯
  
  
  =head2 Default::double
  
  Double (utf8: yes, box_chars: no).
  
   ╔═════════╦═════════╗
   ║ column1 ║ column2 ║
   ╠═════════╬═════════╣
   ║ row1.1  ║ row1.2  ║
   ║ row2.1  ║ row3.2  ║
   ╠═════════╬═════════╣
   ║ row3.1  ║ row3.2  ║
   ╚═════════╩═════════╝
  
  
  =head2 Default::none_ascii
  
  No border (utf8: no, box_chars: no).
  
    column1  column2 
    row1.1   row1.2  
    row2.1   row3.2  
    ------------------- 
    row3.1   row3.2  
  
  
  =head2 Default::none_boxchar
  
  No border (utf8: no, box_chars: yes).
  
  =head2 Default::none_utf8
  
  No border (utf8: yes, box_chars: no).
  
    column1  column2 
    row1.1   row1.2  
    row2.1   row3.2  
   ───────────────────
    row3.1   row3.2  
  
  
  =head2 Default::single_ascii
  
  Single (utf8: no, box_chars: no).
  
   .---------+---------.
   | column1 | column2 |
   +---------+---------+
   | row1.1  | row1.2  |
   | row2.1  | row3.2  |
   +---------+---------+
   | row3.1  | row3.2  |
   `---------+---------'
  
  
  =head2 Default::single_boxchar
  
  Single (utf8: no, box_chars: yes).
  
  =head2 Default::single_utf8
  
  Single (utf8: yes, box_chars: no).
  
   ┌─────────┬─────────┐
   │ column1 │ column2 │
   ├─────────┼─────────┤
   │ row1.1  │ row1.2  │
   │ row2.1  │ row3.2  │
   ├─────────┼─────────┤
   │ row3.1  │ row3.2  │
   └─────────┴─────────┘
  
  
  =head2 Default::singleh_ascii
  
  Single, horizontal only (utf8: no, box_chars: no).
  
   ---------------------
     column1   column2  
   ---------------------
     row1.1    row1.2   
     row2.1    row3.2   
   ---------------------
     row3.1    row3.2   
   ---------------------
  
  
  =head2 Default::singleh_boxchar
  
  Single, horizontal only (utf8: no, box_chars: yes).
  
  =head2 Default::singleh_utf8
  
  Single, horizontal only (utf8: yes, box_chars: no).
  
   ─────────────────────
     column1   column2  
   ─────────────────────
     row1.1    row1.2   
     row2.1    row3.2   
   ─────────────────────
     row3.1    row3.2   
   ─────────────────────
  
  
  =head2 Default::singlei_ascii
  
  Single, inner only (like in psql command-line client) (utf8: no, box_chars: no).
  
     column1 | column2  
    ---------+--------- 
     row1.1  | row1.2   
     row2.1  | row3.2   
    ---------+--------- 
     row3.1  | row3.2   
  
  
  =head2 Default::singlei_boxchar
  
  Single, inner only (like in psql command-line client) (utf8: no, box_chars: yes).
  
  =head2 Default::singlei_utf8
  
  Single, inner only (like in psql command-line client) (utf8: yes, box_chars: no).
  
     column1 │ column2  
    ─────────┼───────── 
     row1.1  │ row1.2   
     row2.1  │ row3.2   
    ─────────┼───────── 
     row3.1  │ row3.2   
  
  
  =head2 Default::singleo_ascii
  
  Single, outer only (utf8: no, box_chars: no).
  
   .-------------------.
   | column1   column2 |
   |                   |
   | row1.1    row1.2  |
   | row2.1    row3.2  |
   +-------------------+
   | row3.1    row3.2  |
   `-------------------'
  
  
  =head2 Default::singleo_boxchar
  
  Single, outer only (utf8: no, box_chars: yes).
  
  =head2 Default::singleo_utf8
  
  Single, outer only (utf8: yes, box_chars: no).
  
   ┌───────────────────┐
   │ column1   column2 │
   │                   │
   │ row1.1    row1.2  │
   │ row2.1    row3.2  │
   ├───────────────────┤
   │ row3.1    row3.2  │
   └───────────────────┘
  
  
  =head2 Default::singlev_ascii
  
  Single border, only vertical (utf8: no, box_chars: no).
  
   |         |         |
   | column1 | column2 |
   |         |         |
   | row1.1  | row1.2  |
   | row2.1  | row3.2  |
   |---------|---------|
   | row3.1  | row3.2  |
   |         |         |
  
  
  =head2 Default::singlev_boxchar
  
  Single, vertical only (utf8: no, box_chars: yes).
  
  =head2 Default::singlev_utf8
  
  Single, vertical only (utf8: yes, box_chars: no).
  
   │         │         │
   │ column1 │ column2 │
   │         │         │
   │ row1.1  │ row1.2  │
   │ row2.1  │ row3.2  │
   │─────────│─────────│
   │ row3.1  │ row3.2  │
   │         │         │
  
  
  =head2 Default::space_ascii
  
  Space as border (utf8: no, box_chars: no).
  
                        
     column1   column2  
                        
     row1.1    row1.2   
     row2.1    row3.2   
    ------------------- 
     row3.1    row3.2   
                        
  
  
  =head2 Default::space_boxchar
  
  Space as border (utf8: no, box_chars: yes).
  
  =head2 Default::space_utf8
  
  Space as border (utf8: yes, box_chars: no).
  
                        
     column1   column2  
                        
     row1.1    row1.2   
     row2.1    row3.2   
    ─────────────────── 
     row3.1    row3.2   
                        
  
  
  =head2 Default::spacei_ascii
  
  Space, inner-only (utf8: no, box_chars: no).
  
    column1   column2 
    row1.1    row1.2  
    row2.1    row3.2  
   -------------------
    row3.1    row3.2  
  
  
  =head2 Default::spacei_boxchar
  
  Space, inner-only (utf8: no, box_chars: yes).
  
  =head2 Default::spacei_utf8
  
  Space, inner-only (utf8: yes, box_chars: no).
  
    column1   column2 
    row1.1    row1.2  
    row2.1    row3.2  
   ───────────────────
    row3.1    row3.2  
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Text-ANSITable>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Text-ANSITable>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Text-ANSITable>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TEXT_ANSITABLE_BORDERSTYLE_DEFAULT

    $main::fatpacked{"Text/ANSITable/ColorTheme/Default.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEXT_ANSITABLE_COLORTHEME_DEFAULT';
  package Text::ANSITable::ColorTheme::Default;
  
  our $DATE = '2016-03-11'; # DATE
  our $VERSION = '0.48'; # VERSION
  
  use 5.010;
  use strict;
  use warnings;
  
  use Color::RGB::Util qw(mix_2_rgb_colors);
  use Function::Fallback::CoreOrPP qw(clone);
  
  our %color_themes = (
  
      no_color => {
          v => 1.1,
          summary => 'Special theme that means no color',
          colors => {
          },
          no_color => 1,
      },
  
      #default_16 => {
      #    v => 1.1,
      #    summary => 'Default for 16-color terminal',
      #    colors => {
      #    },
      #},
  
      #default_256 => {
      default_gradation => {
          v => 1.1,
          summary => 'Default (for terminal with black background)',
          description => <<'_',
  
  Border color has gradation from top to bottom. Accept arguments C<border1> and
  C<border2> to set first (top) and second (bottom) foreground RGB colors. Colors
  will fade from the top color to bottom color. Also accept C<border1_bg> and
  C<border2_bg> to set background RGB colors.
  
  _
          colors => {
              border      => sub {
                  my ($self, %args) = @_;
  
                  my $pct = ($self->{_draw}{y}+1) / $self->{_draw}{table_height};
  
                  my $rgbf1 = $self->{color_theme_args}{border1} // $self->{color_theme}{data}{default_border1} // 'ffffff';
                  my $rgbf2 = $self->{color_theme_args}{border2} // $self->{color_theme}{data}{default_border2} // '444444';
                  my $rgbf  = mix_2_rgb_colors($rgbf1, $rgbf2, $pct);
  
                  my $rgbb1 = $self->{color_theme_args}{border1_bg};
                  my $rgbb2 = $self->{color_theme_args}{border2_bg};
                  my $rgbb;
                  if ($rgbb1 && $rgbb2) {
                      $rgbb = mix_2_rgb_colors($rgbb1, $rgbb2, $pct);
                  }
  
                  #say "D:$rgbf, $rgbb";
                  {fg=>$rgbf, bg=>$rgbb};
              },
  
              header      => '808080',
              header_bg   => undef,
              cell        => undef,
              cell_bg     => undef,
  
              num_data    => '66ffff',
              str_data    => undef,
              date_data   => 'aaaa00',
              bool_data   => sub {
                  my ($self, %args) = @_;
  
                  $args{orig_data} ? '00ff00' : 'ff0000';
              },
          },
      },
  
  );
  
  {
      my $ct = clone($color_themes{default_gradation});
      $ct->{summary} = 'Default (for terminal with white background)';
      $ct->{colors}{header_bg} = 'cccccc';
      $ct->{data}{default_border1} = '000000';
      $ct->{data}{default_border2} = 'cccccc';
      $ct->{colors}{num_data}  = '006666';
      $ct->{colors}{date_data} = '666600';
      $ct->{colors}{bool_data} = sub {
          my ($self, %args) = @_;
          $args{orig_data} ? '00cc00' : 'cc0000';
      };
      $color_themes{default_gradation_whitebg} = $ct;
  }
  
  
  {
      my $ct = clone($color_themes{default_gradation});
      $ct->{colors}{border} = '666666';
      delete $ct->{description};
      $color_themes{default_nogradation} = $ct;
  }
  
  {
      my $ct = clone($color_themes{default_gradation_whitebg});
      $ct->{colors}{border} = '666666';
      delete $ct->{description};
      $color_themes{default_nogradation_whitebg} = $ct;
  }
  
  1;
  # ABSTRACT: Default color themes
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Text::ANSITable::ColorTheme::Default - Default color themes
  
  =head1 VERSION
  
  This document describes version 0.48 of Text::ANSITable::ColorTheme::Default (from Perl distribution Text-ANSITable), released on 2016-03-11.
  
  =head1 COLOR THEMES
  
  Below are the color themes included in this package:
  
  =head2 Default::default_gradation
  
  Default (for terminal with black background).
  
  
  Border color has gradation from top to bottom. Accept arguments C<border1> and
  C<border2> to set first (top) and second (bottom) foreground RGB colors. Colors
  will fade from the top color to bottom color. Also accept C<border1_bg> and
  C<border2_bg> to set background RGB colors.
  
  
  
  =head2 Default::default_gradation_whitebg
  
  Default (for terminal with white background).
  
  
  Border color has gradation from top to bottom. Accept arguments C<border1> and
  C<border2> to set first (top) and second (bottom) foreground RGB colors. Colors
  will fade from the top color to bottom color. Also accept C<border1_bg> and
  C<border2_bg> to set background RGB colors.
  
  
  
  =head2 Default::default_nogradation
  
  Default (for terminal with black background).
  
  =head2 Default::default_nogradation_whitebg
  
  Default (for terminal with white background).
  
  =head2 Default::no_color
  
  Special theme that means no color.
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Text-ANSITable>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Text-ANSITable>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Text-ANSITable>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TEXT_ANSITABLE_COLORTHEME_DEFAULT

    $main::fatpacked{"Text/ANSITable/StyleSet/AltRow.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEXT_ANSITABLE_STYLESET_ALTROW';
  package Text::ANSITable::StyleSet::AltRow;
  
  our $DATE = '2016-03-11'; # DATE
  our $VERSION = '0.48'; # VERSION
  
  use 5.010;
  use Moo;
  use namespace::clean;
  
  has odd_bgcolor  => (is => 'rw');
  has even_bgcolor => (is => 'rw');
  has odd_fgcolor  => (is => 'rw');
  has even_fgcolor => (is => 'rw');
  
  sub summary {
      "Set different foreground and/or background color for odd/even rows";
  }
  
  sub apply {
      my ($self, $table) = @_;
  
      $table->add_cond_row_style(
          sub {
              my ($t, %args) = @_;
              my %styles;
              # because we count from 0
              if ($_ % 2 == 0) {
                  $styles{bgcolor} = $self->odd_bgcolor
                      if defined $self->odd_bgcolor;
                  $styles{fgcolor}=$self->odd_fgcolor
                      if defined $self->odd_fgcolor;
              } else {
                  $styles{bgcolor} = $self->even_bgcolor
                      if defined $self->even_bgcolor;
                  $styles{fgcolor} = $self->even_fgcolor
                      if defined $self->even_fgcolor;
              }
              \%styles;
          },
      );
  }
  
  1;
  
  # ABSTRACT: Set different foreground and/or background color for odd/even rows";
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Text::ANSITable::StyleSet::AltRow - Set different foreground and/or background color for odd/even rows";
  
  =head1 VERSION
  
  This document describes version 0.48 of Text::ANSITable::StyleSet::AltRow (from Perl distribution Text-ANSITable), released on 2016-03-11.
  
  =for Pod::Coverage ^(summary|apply)$
  
  =head1 ATTRIBUTES
  
  =head2 odd_bgcolor
  
  =head2 odd_fgcolor
  
  =head2 even_bgcolor
  
  =head2 even_fgcolor
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Text-ANSITable>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Text-ANSITable>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Text-ANSITable>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2016 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TEXT_ANSITABLE_STYLESET_ALTROW

    $main::fatpacked{"Text/Table/Any.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEXT_TABLE_ANY';
  package Text::Table::Any;
  
  our $DATE = '2017-01-01'; # DATE
  our $VERSION = '0.08'; # VERSION
  
  #IFUNBUILT
  # # use 5.010001;
  # # use strict;
  # # use warnings;
  #END IFUNBUILT
  
  sub _encode {
      my $val = shift;
      $val =~ s/([\\"])/\\$1/g;
      "\"$val\"";
  }
  
  sub table {
      my %params = @_;
  
      my $rows       = $params{rows} or die "Must provide rows!";
      my $backend    = $params{backend} || 'Text::Table::Tiny';
      my $header_row = $params{header_row} // 0;
  
      if ($backend eq 'Text::Table::Tiny') {
          require Text::Table::Tiny;
          return Text::Table::Tiny::table(
              rows => $rows, header_row => $header_row) . "\n";
      } elsif ($backend eq 'Text::Table::TinyColor') {
          require Text::Table::TinyColor;
          return Text::Table::TinyColor::table(
              rows => $rows, header_row => $header_row) . "\n";
      } elsif ($backend eq 'Text::Table::TinyColorWide') {
          require Text::Table::TinyColorWide;
          return Text::Table::TinyColorWide::table(
              rows => $rows, header_row => $header_row) . "\n";
      } elsif ($backend eq 'Text::Table::TinyWide') {
          require Text::Table::TinyWide;
          return Text::Table::TinyWide::table(
              rows => $rows, header_row => $header_row) . "\n";
      } elsif ($backend eq 'Text::Table::Org') {
          require Text::Table::Org;
          return Text::Table::Org::table(
              rows => $rows, header_row => $header_row);
      } elsif ($backend eq 'Text::Table::CSV') {
          require Text::Table::CSV;
          return Text::Table::CSV::table(
              rows => $rows);
      } elsif ($backend eq 'Text::Table::HTML') {
          require Text::Table::HTML;
          return Text::Table::HTML::table(
              rows => $rows, header_row => $header_row);
      } elsif ($backend eq 'Text::Table::HTML::DataTables') {
          require Text::Table::HTML::DataTables;
          return Text::Table::HTML::DataTables::table(
              rows => $rows, header_row => $header_row);
      } elsif ($backend eq 'Text::Table::Paragraph') {
          require Text::Table::Paragraph;
          return Text::Table::Paragraph::table(
              rows => $rows, header_row => $header_row);
      } elsif ($backend eq 'Text::ANSITable') {
          require Text::ANSITable;
          my $t = Text::ANSITable->new(
              use_utf8 => 0,
              use_box_chars => 0,
              use_color => 0,
              border_style => 'Default::single_ascii',
          );
          # XXX pick an appropriate border style when header_row=0
          if ($header_row) {
              $t->columns($rows->[0]);
              $t->add_row($rows->[$_]) for 1..@$rows-1;
          } else {
              $t->columns([ map {"col$_"} 0..$#{$rows->[0]} ]);
              $t->add_row($_) for @$rows;
          }
          return $t->draw;
      } elsif ($backend eq 'Text::ASCIITable') {
          require Text::ASCIITable;
          my $t = Text::ASCIITable->new();
          if ($header_row) {
              $t->setCols(@{ $rows->[0] });
              $t->addRow(@{ $rows->[$_] }) for 1..@$rows-1;
          } else {
              $t->setCols(map { "col$_" } 0..$#{ $rows->[0] });
              $t->addRow(@$_) for @$rows;
          }
          return "$t";
      } elsif ($backend eq 'Text::FormatTable') {
          require Text::FormatTable;
          my $t = Text::FormatTable->new(join('|', ('l') x @{ $rows->[0] }));
          $t->head(@{ $rows->[0] });
          $t->row(@{ $rows->[$_] }) for 1..@$rows-1;
          return $t->render;
      } elsif ($backend eq 'Text::MarkdownTable') {
          require Text::MarkdownTable;
          my $out = "";
          my $fields =  $header_row ?
              $rows->[0] : [map {"col$_"} 0..$#{ $rows->[0] }];
          my $t = Text::MarkdownTable->new(file => \$out, columns => $fields);
          foreach (($header_row ? 1:0) .. $#{$rows}) {
              my $row = $rows->[$_];
              $t->add( {
                  map { $fields->[$_] => $row->[$_] } 0..@$fields-1
              });
          }
          $t->done;
          return $out;
      } elsif ($backend eq 'Text::Table') {
          require Text::Table;
          my $t = Text::Table->new(@{ $rows->[0] });
          $t->load(@{ $rows }[1..@$rows-1]);
          return $t;
      } elsif ($backend eq 'Text::TabularDisplay') {
          require Text::TabularDisplay;
          my $t = Text::TabularDisplay->new(@{ $rows->[0] });
          $t->add(@{ $rows->[$_] }) for 1..@$rows-1;
          return $t->render . "\n";
      } else {
          die "Unknown backend '$backend'";
      }
  }
  
  1;
  # ABSTRACT: Generate text table using one of several backends
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Text::Table::Any - Generate text table using one of several backends
  
  =head1 VERSION
  
  This document describes version 0.08 of Text::Table::Any (from Perl distribution Text-Table-Any), released on 2016-01-01.
  
  =head1 SYNOPSIS
  
   use Text::Table::Any;
  
   my $rows = [
       # header row
       ['Name', 'Rank', 'Serial'],
       # rows
       ['alice', 'pvt', '123456'],
       ['bob',   'cpl', '98765321'],
       ['carol', 'brig gen', '8745'],
   ];
   print Text::Table::Any::table(rows => $rows, header_row => 1,
                                 backend => 'Text::Table::Tiny');
  
  =head1 DESCRIPTION
  
  This module provides a single function, C<table>, which formats a
  two-dimensional array of data as text table, using one of several available
  backends. The interface is modelled after L<Text::Table::Tiny> (0.3);
  Text::Table::Tiny also happens to be the default backend.
  
  The example shown in the SYNOPSIS generates the following table:
  
   +-------+----------+----------+
   | Name  | Rank     | Serial   |
   +-------+----------+----------+
   | alice | pvt      | 123456   |
   | bob   | cpl      | 98765321 |
   | carol | brig gen | 8745     |
   +-------+----------+----------+
  
  When using C<Text::Table::Org> backend, the result is something like:
  
   | Name  | Rank     | Serial   |
   |-------+----------+----------|
   | alice | pvt      | 123456   |
   | bob   | cpl      | 98765321 |
   | carol | brig gen | 8745     |
  
  When using C<Text::Table::CSV> backend:
  
   "Name","Rank","Serial"
   "alice","pvt","123456"
   "bob","cpl","98765321"
   "carol","brig gen","8745"
  
  When using C<Text::ANSITable> backend:
  
   .-------+----------+----------.
   | Name  | Rank     |   Serial |
   +-------+----------+----------+
   | alice | pvt      |   123456 |
   | bob   | cpl      | 98765321 |
   | carol | brig gen |     8745 |
   `-------+----------+----------'
  
  When using C<Text::ASCIITable> backend:
  
   .-----------------------------.
   | Name  | Rank     | Serial   |
   +-------+----------+----------+
   | alice | pvt      |   123456 |
   | bob   | cpl      | 98765321 |
   | carol | brig gen |     8745 |
   '-------+----------+----------'
  
  When using C<Text::FormatTable> backend:
  
   Name |Rank    |Serial
   alice|pvt     |123456
   bob  |cpl     |98765321
   carol|brig gen|8745
  
  When using C<Text::MarkdownTable> backend:
  
   | Name  | Rank     | Serial   |
   |-------|----------|----------|
   | alice | pvt      | 123456   |
   | bob   | cpl      | 98765321 |
   | carol | brig gen | 8745     |
  
  When using C<Text::Table> backend:
  
   Name  Rank     Serial
   alice pvt        123456
   bob   cpl      98765321
   carol brig gen     8745
  
  When using C<Text::TabularDisplay> backend:
  
   +-------+----------+----------+
   | Name  | Rank     | Serial   |
   +-------+----------+----------+
   | alice | pvt      | 123456   |
   | bob   | cpl      | 98765321 |
   | carol | brig gen | 8745     |
   +-------+----------+----------+
  
  =head1 FUNCTIONS
  
  =head2 table(%params) => str
  
  =head2 OPTIONS
  
  The C<table> function understands these arguments, which are passed as a hash.
  
  =over
  
  =item * rows (aoaos)
  
  Required. Takes an array reference which should contain one or more rows of
  data, where each row is an array reference.
  
  =item * backend (str, default C<Text::Table::Tiny>)
  
  Optional. Pick a backend module. Supported backends:
  
  =over
  
  =item * Text::ANSITable
  
  =item * Text::ASCIITable
  
  =item * Text::FormatTable
  
  =item * Text::MarkdownTable
  
  =item * Text::Table
  
  =item * Text::Table::CSV
  
  =item * Text::Table::HTML
  
  =item * Text::Table::HTML::DataTables
  
  =item * Text::Table::Org
  
  =item * Text::Table::Paragraph
  
  =item * Text::Table::Tiny
  
  =item * Text::Table::TinyColor
  
  =item * Text::Table::TinyColorWide
  
  =item * Text::Table::TinyWide
  
  =item * Text::TabularDisplay
  
  =back
  
  =item * header_row (bool, default 0)
  
  Optional. If given a true value, the first row in the data will be interpreted
  as a header row, and separated visually from the rest of the table (e.g. with a
  ruled line). But some backends won't display differently.
  
  =back
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Text-Table-Any>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Text-Table-Any>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Text-Table-Any>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 SEE ALSO
  
  L<Bencher::Scenario::TextTableModules>
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2017 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TEXT_TABLE_ANY

    $main::fatpacked{"Text/Table/Tiny.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEXT_TABLE_TINY';
  use 5.006;
  use strict;
  use warnings;
  package Text::Table::Tiny;
  $Text::Table::Tiny::VERSION = '0.04';
  use parent 'Exporter';
  use List::Util qw();
  
  our @EXPORT_OK = qw/ generate_table /;
  
  # ABSTRACT: makes simple tables from two-dimensional arrays, with limited templating options
  
  
  our $COLUMN_SEPARATOR = '|';
  our $ROW_SEPARATOR = '-';
  our $CORNER_MARKER = '+';
  our $HEADER_ROW_SEPARATOR = '=';
  our $HEADER_CORNER_MARKER = 'O';
  
  sub generate_table {
  
      my %params = @_;
      my $rows = $params{rows} or die "Must provide rows!";
  
      # foreach col, get the biggest width
      my $widths = _maxwidths($rows);
      my $max_index = _max_array_index($rows);
  
      # use that to get the field format and separators
      my $format = _get_format($widths);
      my $row_sep = _get_row_separator($widths);
      my $head_row_sep = _get_header_row_separator($widths);
  
      # here we go...
      my @table;
      push @table, $row_sep;
  
      # if the first row's a header:
      my $data_begins = 0;
      if ( $params{header_row} ) {
          my $header_row = $rows->[0];
          $data_begins++;
          push @table, sprintf(
                           $format, 
                           map { defined($header_row->[$_]) ? $header_row->[$_] : '' } (0..$max_index)
                       );
          push @table, $params{separate_rows} ? $head_row_sep : $row_sep;
      }
  
      # then the data
      foreach my $row ( @{ $rows }[$data_begins..$#$rows] ) {
          push @table, sprintf(
  	    $format, 
  	    map { defined($row->[$_]) ? $row->[$_] : '' } (0..$max_index)
  	);
          push @table, $row_sep if $params{separate_rows};
      }
  
      # this will have already done the bottom if called explicitly
      push @table, $row_sep unless $params{separate_rows};
      return join("\n",grep {$_} @table);
  }
  
  sub _get_cols_and_rows ($) {
      my $rows = shift;
      return ( List::Util::max( map { scalar @$_ } @$rows), scalar @$rows);
  }
  
  sub _maxwidths {
      my $rows = shift;
      # what's the longest array in this list of arrays?
      my $max_index = _max_array_index($rows);
      my $widths = [];
      for my $i (0..$max_index) {
          # go through the $i-th element of each array, find the longest
          my $max = List::Util::max(map {defined $$_[$i] ? length($$_[$i]) : 0} @$rows);
          push @$widths, $max;
      }
      return $widths;
  }
  
  # return highest top-index from all rows in case they're different lengths
  sub _max_array_index {
      my $rows = shift;
      return List::Util::max( map { $#$_ } @$rows );
  }
  
  sub _get_format {
      my $widths = shift;
      return "$COLUMN_SEPARATOR ".join(" $COLUMN_SEPARATOR ",map { "%-${_}s" } @$widths)." $COLUMN_SEPARATOR";
  }
  
  sub _get_row_separator {
      my $widths = shift;
      return "$CORNER_MARKER$ROW_SEPARATOR".join("$ROW_SEPARATOR$CORNER_MARKER$ROW_SEPARATOR",map { $ROW_SEPARATOR x $_ } @$widths)."$ROW_SEPARATOR$CORNER_MARKER";
  }
  
  sub _get_header_row_separator {
      my $widths = shift;
      return "$HEADER_CORNER_MARKER$HEADER_ROW_SEPARATOR".join("$HEADER_ROW_SEPARATOR$HEADER_CORNER_MARKER$HEADER_ROW_SEPARATOR",map { $HEADER_ROW_SEPARATOR x $_ } @$widths)."$HEADER_ROW_SEPARATOR$HEADER_CORNER_MARKER";
  }
  
  # Back-compat: 'table' is an alias for 'generate_table', but isn't exported
  *table = \&generate_table;
  
  1;
  
  __END__
  
  =pod
  
  =head1 NAME
  
  Text::Table::Tiny - simple text tables from 2D arrays, with limited templating options
  
  =head1 SYNOPSIS
  
      use Text::Table::Tiny 0.04 qw/ generate_table /;
  
      my $rows = [
          # header row
          ['Name', 'Rank', 'Serial'],
          # rows
          ['alice', 'pvt', '123456'],
          ['bob',   'cpl', '98765321'],
          ['carol', 'brig gen', '8745'],
      ];
      print generate_table(rows => $rows, header_row => 1);
  
  
  =head1 DESCRIPTION
  
  This module provides a single function, C<generate_table>, which formats
  a two-dimensional array of data as a text table.
  
  The example shown in the SYNOPSIS generates the following table:
  
      +-------+----------+----------+
      | Name  | Rank     | Serial   |
      +-------+----------+----------+
      | alice | pvt      | 123456   |
      | bob   | cpl      | 98765321 |
      | carol | brig gen | 8745     |
      +-------+----------+----------+
  
  B<NOTE>: the interface changed with version 0.04, so if you
  use the C<generate_table()> function illustrated above,
  then you need to require at least version 0.04 of this module,
  as shown in the SYNOPSIS.
  
  
  =head2 OPTIONS
  
  The C<generate_table> function understands three arguments,
  which are passed as a hash.
  
  =over 4
  
  
  =item *
  
  rows
  
  Takes an array reference which should contain one or more rows
  of data, where each row is an array reference.
  
  
  =item *
  
  header_row
  
  If given a true value, the first row in the data will be interpreted
  as a header row, and separated from the rest of the table with a ruled line.
  
  
  =item *
  
  separate_rows
  
  If given a true value, a separator line will be drawn between every row in
  the table,
  and a thicker line will be used for the header separator.
  
  
  =back
  
  
  =head2 EXAMPLES
  
  If you just pass the data and no other options:
  
   generate_table(rows => $rows);
  
  You get minimal ruling:
  
      +-------+----------+----------+
      | Name  | Rank     | Serial   |
      | alice | pvt      | 123456   |
      | bob   | cpl      | 98765321 |
      | carol | brig gen | 8745     |
      +-------+----------+----------+
  
  If you want lines between every row, and also want a separate header:
  
   generate_table(rows => $rows, header_row => 1, separate_rows => 1);
  
  You get the maximally ornate:
  
      +-------+----------+----------+
      | Name  | Rank     | Serial   |
      O=======O==========O==========O
      | alice | pvt      | 123456   |
      +-------+----------+----------+
      | bob   | cpl      | 98765321 |
      +-------+----------+----------+
      | carol | brig gen | 8745     |
      +-------+----------+----------+
  
  =head1 FORMAT VARIABLES
  
  You can set a number of package variables inside the C<Text::Table::Tiny> package
  to configure the appearance of the table.
  This interface is likely to be deprecated in the future,
  and some other mechanism provided.
  
  =over 4
  
  =item *
  
  $Text::Table::Tiny::COLUMN_SEPARATOR = '|';
  
  =item *
  
  $Text::Table::Tiny::ROW_SEPARATOR = '-';
  
  =item *
  
  $Text::Table::Tiny::CORNER_MARKER = '+';
  
  =item *
  
  $Text::Table::Tiny::HEADER_ROW_SEPARATOR = '=';
  
  =item *
  
  $Text::Table::Tiny::HEADER_CORNER_MARKER = 'O';
  
  =back
  
  
  =head1 PREVIOUS INTERFACE
  
  Prior to version 0.04 this module provided a function called C<table()>,
  which wasn't available for export. It took exactly the same arguments:
  
   use Text::Table::Tiny;
   my $rows = [ ... ];
   print Text::Table::Tiny::table(rows => $rows, separate_rows => 1, header_row => 1);
  
  For backwards compatibility this interface is still supported.
  The C<table()> function isn't available for export though.
  
  
  =head1 SEE ALSO
  
  There are many modules for formatting text tables on CPAN.
  A good number of them are listed in the
  L<See Also|https://metacpan.org/pod/Text::Table::Manifold#See-Also>
  section of the documentation for L<Text::Table::Manifold>.
  
  
  =head1 REPOSITORY
  
  L<https://github.com/neilb/Text-Table-Tiny>
  
  
  =head1 AUTHOR
  
  Creighton Higgins <chiggins@chiggins.com>
  
  Now maintained by Neil Bowers <neilb@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2012 by Creighton Higgins.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
  
TEXT_TABLE_TINY

    $main::fatpacked{"Text/sprintfn.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TEXT_SPRINTFN';
  package Text::sprintfn;
  
  use 5.010001;
  use strict;
  use warnings;
  
  require Exporter;
  our @ISA       = qw(Exporter);
  our @EXPORT    = qw(sprintfn printfn);
  
  our $VERSION = '0.08'; # VERSION
  
  our $distance  = 10;
  
  my  $re1   = qr/[^)]+/s;
  my  $re2   = qr{(?<fmt>
                      %
                         (?<pi> \d+\$ | \((?<npi>$re1)\)\$?)?
                         (?<flags> [ +0#-]+)?
                         (?<vflag> \*?[v])?
                         (?<width> -?\d+ |
                             \*\d+\$? |
                             \((?<nwidth>$re1)\))?
                         (?<dot>\.?)
                         (?<prec>
                             (?: \d+ | \* |
                             \((?<nprec>$re1)\) ) ) ?
                         (?<conv> [%csduoxefgXEGbBpniDUOF])
                     )}x;
  our $regex = qr{($re2|%|[^%]+)}s;
  
  # faster version, without using named capture
  if (1) {
      $regex = qr{( #all=1
                      ( #fmt=2
                          %
                          (#pi=3
                              \d+\$ | \(
                              (#npi=4
                                  [^)]+)\)\$?)?
                          (#flags=5
                              [ +0#-]+)?
                          (#vflag=6
                              \*?[v])?
                          (#width=7
                              -?\d+ |
                              \*\d+\$? |
                              \((#nwidth=8
                                  [^)]+)\))?
                          (#dot=9
                              \.?)
                          (#prec=10
                              (?: \d+ | \* |
                                  \((#nprec=11
                                      [^)]+)\) ) ) ?
                          (#conv=12
                              [%csduoxefgXEGbBpniDUOF])
                      ) | % | [^%]+
                  )}xs;
  }
  
  sub sprintfn {
      my ($format, @args) = @_;
  
      my $hash;
      if (ref($args[0]) eq 'HASH') {
          $hash = shift(@args);
      }
      return sprintf($format, @args) if !$hash;
  
      my %indexes; # key = $hash key, value = index for @args
      push @args, (undef) x $distance;
  
      $format =~ s{$regex}{
          my ($all, $fmt, $pi, $npi, $flags,
              $vflag, $width, $nwidth, $dot, $prec,
              $nprec, $conv) =
              ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12);
  
          my $res;
          if ($fmt) {
  
              if (defined $npi) {
                  my $i = $indexes{$npi};
                  if (!$i) {
                      $i = @args + 1;
                      push @args, $hash->{$npi};
                      $indexes{$npi} = $i;
                  }
                  $pi = "${i}\$";
              }
  
              if (defined $nwidth) {
                  $width = $hash->{$nwidth};
              }
  
              if (defined $nprec) {
                  $prec = $hash->{$nprec};
              }
  
              $res = join("",
                  grep {defined} (
                      "%",
                      $pi, $flags, $vflag,
                      $width, $dot, $prec, $conv)
                  );
          } else {
              my $i = @args + 1;
              push @args, $all;
              $res = "\%${i}\$s";
          }
          $res;
      }xego;
  
      # DEBUG
      #use Data::Dump; dd [$format, @args];
  
      sprintf $format, @args;
  }
  
  sub printfn {
      print sprintfn @_;
  }
  
  1;
  # ABSTRACT: Drop-in replacement for sprintf(), with named parameter support
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Text::sprintfn - Drop-in replacement for sprintf(), with named parameter support
  
  =head1 VERSION
  
  This document describes version 0.08 of Text::sprintfn (from Perl distribution Text-sprintfn), released on 2015-09-15.
  
  =head1 SYNOPSIS
  
   use Text::sprintfn; # by default exports sprintfn() and printfn()
  
   # with no hash, behaves just like printf
   printfn '<%04d>', 1, 2; # <0001>
  
   # named parameter
   printfn '<%(v1)-4d>', {v1=>-2}; # <-2  >
  
   # mixed named and positional
   printfn '<%d> <%(v1)d> <%d>', {v1=>1}, 2, 3; # <2> <1> <3>
  
   # named width
   printfn "<%(v1)(v2).1f>", {v1=>3, v2=>4}; # <   3>
  
   # named precision
   printfn "<%(v1)(v2).(v2)f>", {v1=>3, v2=>4}; # <3.0000>
  
  =head1 DESCRIPTION
  
  This module provides sprintfn() and printfn(), which are like sprintf() and
  printf(), with the exception that they support named parameters from a hash.
  
  =head1 FUNCTIONS
  
  =head2 sprintfn $fmt, \%hash, ...
  
  If first argument after format is not a hash, sprintfn() will behave exactly
  like sprintf().
  
  If hash is given, sprintfn() will look for named parameters in argument and
  supply the values from the hash. Named parameters are surrounded with
  parentheses, i.e. "(NAME)". They can occur in format parameter index:
  
   %2$d        # sprintf version, take argument at index 2
   %(two)d     # $ is optional
   %(two)$d    # same
  
  or in width:
  
   %-10d       # sprintf version, use (minimum) width of 10
   %-(width)d  # like sprintf, but use width from hash key 'width'
   %(var)-(width)d  # format hash key 'var' with width from hash key 'width'
  
  or in precision:
  
   %6.2f       # sprintf version, use precision of 2 decimals
   %6.(prec)f  # like sprintf, but use precision from hash key 'prec'
   %(width).(prec)f
   %(var)(width).(prec)f
  
  The existence of formats using hash keys will not affect indexes of the rest of
  the argument, example:
  
   sprintfn "<%(v1)s> <%2$d> <%d>", {v1=>10}, 0, 1, 2; # "<10> <2> <0>"
  
  Like sprintf(), if format is unknown/erroneous, it will be printed as-is.
  
  There is currently no way to escape ")" in named parameter, e.g.:
  
   %(var containing ))s
  
  =head2 printfn $fmt, ...
  
  Equivalent to: print sprintfn($fmt, ...).
  
  =head1 RATIONALE
  
  There exist other CPAN modules for string formatting with named parameter
  support. Two of such modules are L<String::Formatter> and
  L<Text::Sprintf::Named>. This module is far simpler to use and retains all of
  the features of Perl's sprintf() (which we like, or perhaps hate, but
  nevertheless are familiar with).
  
  String::Formatter requires you to create a new formatter function first.
  Text::Sprintf::Named also accordingly requires you to instantiate an object
  first. There is currently no way to mix named and positional parameters. And you
  don't get the full features of sprintf().
  
  =head1 HOW IT WORKS
  
  Text::sprintfn works by converting the format string into sprintf format, i.e.
  replacing the named parameters like C<%(foo)s> to something like C<%11$s>.
  
  =head1 DOWNSIDES
  
  Currently the main downside is speed. C<sprintfn()> is about 2-3 orders of
  magnitude slower than C<sprintf()>. A sample benchmark:
  
                                                  Rate sprintfn("%(a)s%(b)d%(c)f",{..}) 1k sprintfn("%(a)s",{a=>1}) 1k sprintfn("%s",1) 1k sprintf ("%s%d%f",1,2,3) 1k sprintf ("%s",1) 1k
   sprintfn("%(a)s%(b)d%(c)f",{..}) 1k 45.354+-0.084/s                                  --                      -58.7%              -97.3%                      -99.9%              -99.9%
   sprintfn("%(a)s",{a=>1}) 1k          109.82+-0.14/s                       142.13+-0.54%                          --              -93.4%                      -99.7%              -99.7%
   sprintfn("%s",1) 1k                  1672.62+-0.6/s                          3587.9+-7%                  1423.1+-2%                  --                      -96.1%              -96.2%
   sprintf ("%s%d%f",1,2,3) 1k             42658+-12/s                         93950+-180%                  38744+-50%             2450.4%                          --               -2.2%
   sprintf ("%s",1) 1k                     43596+-48/s                         96020+-210%                  39599+-66%          2506.5+-3%                  2.2+-0.12%                  --
  
  =head1 TIPS AND TRICKS
  
  =head2 Common mistake 1
  
  Writing
  
   %(var)
  
  instead of
  
   %(var)s
  
  =head2 Common mistake 2 (a bit more newbish)
  
  Writing
  
   sprintfn $format, %hash, ...;
  
  instead of
  
   sprintfn $format, \%hash, ...;
  
  =head2 Alternative hashes
  
  You have several hashes (%h1, %h2, %h3) which should be consulted for values.
  You can either merge the hash first:
  
   %h = (%h1, %h2, %h3); # or use some hash merging module
   printfn $format, \%h, ...;
  
  or create a tied hash which can consult hashes for you:
  
   tie %h, 'Your::Module', \%h1, \%h2, \%h3;
   printfn $format, \%h, ...;
  
  =head1 SEE ALSO
  
  sprintf() section on L<perlfunc>
  
  L<String::Formatter>
  
  L<Text::Sprintf::Named>
  
  =head1 HOMEPAGE
  
  Please visit the project's homepage at L<https://metacpan.org/release/Text-sprintfn>.
  
  =head1 SOURCE
  
  Source repository is at L<https://github.com/perlancar/perl-Text-sprintfn>.
  
  =head1 BUGS
  
  Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Text-sprintfn>
  
  When submitting a bug or request, please include a test-file or a
  patch to an existing test-file that illustrates the bug or desired
  feature.
  
  =head1 AUTHOR
  
  perlancar <perlancar@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2015 by perlancar@cpan.org.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
TEXT_SPRINTFN

    $main::fatpacked{"Tie/Cache.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TIE_CACHE';
  #!/usr/local/bin/perl -w
  
  package Tie::Cache;
  use strict;
  use vars qw(
   $VERSION $Debug $STRUCT_SIZE $REF_SIZE
   $BEFORE $AFTER $KEY $VALUE $BYTES $DIRTY
  );
  
  $VERSION = .21;
  $Debug = 0; # set to 1 for summary, 2 for debug output
  $STRUCT_SIZE = 240; # per cached elem bytes overhead, approximate
  $REF_SIZE    = 16;
  
  # NODE ARRAY STRUCT
  $KEY    = 0;
  $VALUE  = 1;
  $BYTES  = 2;
  $BEFORE = 3;
  $AFTER  = 4;
  $DIRTY  = 5;
  
  =pod
  
  =head1 NAME
  
  Tie::Cache - LRU Cache in Memory
  
  =head1 SYNOPSIS
  
   use Tie::Cache;
   tie %cache, 'Tie::Cache', 100, { Debug => 1 };   
   tie %cache2, 'Tie::Cache', { MaxCount => 100, MaxBytes => 50000 };
   tie %cache3, 'Tie::Cache', 100, { Debug => 1 , WriteSync => 0};   
  
   # Options ##################################################################
   #
   # Debug =>	 0 - DEFAULT, no debugging output
   #		 1 - prints cache statistics upon destroying
   #		 2 - prints detailed debugging info
   #
   # MaxCount =>	 Maximum entries in cache.
   #
   # MaxBytes =>   Maximum bytes taken in memory for cache based on approximate 
   #               size of total cache structure in memory
   #
   #               There is approximately 240 bytes used per key/value pair in the cache for 
   #               the cache data structures, so a cache of 5000 entries would take
   #               at approximately 1.2M plus the size of the data being cached.
   #
   # MaxSize  =>   Maximum size of each cache entry. Larger entries are not cached.
   #                   This helps prevent much of the cache being flushed when 
   #                   you set an exceptionally large entry.  Defaults to MaxBytes/10
   #
   # WriteSync =>  1 - DEFAULT, write() when data is dirtied for 
   #                   TRUE CACHE (see below)
   #               0 - write() dirty data as late as possible, when leaving 
   #                   cache, or when cache is being DESTROY'd
   #
   ############################################################################
  
   # cache supports normal tied hash functions
   $cache{1} = 2;       # STORE
   print "$cache{1}\n"; # FETCH
  
   # FIRSTKEY, NEXTKEY
   while(($k, $v) = each %cache) { print "$k: $v\n"; } 
   
   delete $cache{1};    # DELETE
   %cache = ();         # CLEAR
  
  =head1 DESCRIPTION
  
  This module implements a least recently used (LRU) cache in memory
  through a tie interface.  Any time data is stored in the tied hash,
  that key/value pair has an entry time associated with it, and 
  as the cache fills up, those members of the cache that are
  the oldest are removed to make room for new entries.
  
  So, the cache only "remembers" the last written entries, up to the 
  size of the cache.  This can be especially useful if you access 
  great amounts of data, but only access a minority of the data a 
  majority of the time. 
  
  The implementation is a hash, for quick lookups, 
  overlaying a doubly linked list for quick insertion and deletion.
  On a WinNT PII 300, writes to the hash were done at a rate 
  3100 per second, and reads from the hash at 6300 per second.   
  Work has been done to optimize refreshing cache entries that are 
  frequently read from, code like $cache{entry}, which moves the 
  entry to the end of the linked list internally.
  
  =cut
  
  # Documentation continues at the end of the module.
  
  sub TIEHASH {
      my($class, $max_count, $options) = @_;
  
      if(ref($max_count)) {
  	$options = $max_count;
  	$max_count = $options->{MaxCount};
      }
  	
      unless($max_count || $options->{MaxBytes}) {
  	die('you must specify cache size with either MaxBytes or MaxCount');
      }
  
      my $sync = exists($options->{WriteSync}) ? $options->{WriteSync} : 1;
  
      my $self = bless 
        { 
         # how many items to cache
         max_count=> $max_count, 
         
         # max bytes to cache
         max_bytes => $options->{MaxBytes},
         
         # max size (in bytes) of an individual cache entry
         max_size => $options->{MaxSize} || ($options->{MaxBytes} ? (int($options->{MaxBytes}/10) + 1) : 0),
         
         # class track, so know if overridden subs should be used
         'class'    => $class,
         'subclass' => $class ne 'Tie::Cache' ? 1 : 0,
         
         # current sizes
         count=>0,
         bytes=>0,
         
         # inner structures
         head=>0, 
         tail=>0, 
         nodes=>{},
         'keys'=>[],
         
         # statistics
         hit => 0,
         miss => 0,
         
         # config
         sync => $sync,
         dbg => $options->{Debug} || $Debug
         
         
        }, $class;
      
      if (($self->{max_bytes} && ! $self->{max_size})) {
  	die("MaxSize must be defined when MaxBytes is");
      }
  
      if($self->{max_bytes} and $self->{max_bytes} < 1000) {
  	die("cannot set MaxBytes to under 1000, each raw entry takes $STRUCT_SIZE bytes alone");
      }
  
      if($self->{max_size} && $self->{max_size} < 3) {
  	die("cannot set MaxSize to under 3 bytes, assuming error in config");
      }
  
      $self;
  }
  
  # override to write data leaving cache
  sub write { undef; }
  # commented this section out for speed
  #    my($self, $key, $value) = @_;
  #    1;
  #}
  
  # override to get data if not in cache, should return $value
  # associated with $key
  sub read { undef; }
  # commented this section out for speed
  #    my($self, $key) = @_;
  #    undef;
  #}
  
  sub FETCH {
      my($self, $key) = @_;
  
      my $node = $self->{nodes}{$key};
      if($node) {
  	# refresh node's entry
  	$self->{hit}++; # if $self->{dbg};
  
  	# we used to call delete then insert, but we streamlined code
  	if(my $after = $node->[$AFTER]) {
  	    $self->{dbg} > 1 and $self->print("update() node $node to tail of list");
  	    # reconnect the nodes
  	    my $before = $after->[$BEFORE] = $node->[$BEFORE];
  	    if($before) {
  		$before->[$AFTER] = $after;
  	    } else {
  		$self->{head} = $after;
  	    }
  
  	    # place at the end
  	    $self->{tail}[$AFTER] = $node;
  	    $node->[$BEFORE] = $self->{tail};
  	    $node->[$AFTER] = undef;
  	    $self->{tail} = $node; # always true after this
  	} else {
  	    # if there is nothing after node, then we are at the end already
  	    # so don't do anything to move the nodes around
  	    die("this node is the tail, so something's wrong") 
  		unless($self->{tail} eq $node);
  	}
  
  	$self->print("FETCH [$key, $node->[$VALUE]]") if ($self->{dbg} > 1);
  	$node->[$VALUE];
      } else {
  	# we have a cache miss here
  	$self->{miss}++; # if $self->{dbg};
  
  	# its fine to always insert a node, even when we have an undef,
  	# because even if we aren't a sub-class, we should assume use
  	# that would then set the entry.  This model works well with
  	# sub-classing and reads() that might want to return undef as
  	# a valid value.
  	my $value;
  	if ($self->{subclass}) {
  	    $self->print("read() for key $key") if $self->{dbg} > 1;
  	    $value = $self->read($key);
  	}
  
  	if(defined $value) {
  	    my $length;
  	    if($self->{max_size}) {
  		# check max size of entry, that it not exceed max size
  		$length = &_get_data_length(\$key, \$value);
  		if($length > $self->{max_size}) {
  		    $self->print("direct read() [$key, $value]") if ($self->{dbg} > 1);
  		    return $value;
  		}
  	    }
  	    # if we get here, we should insert the new node
  	    $node = &create_node($self, \$key, \$value, $length);
  	    &insert($self, $node);
  	    $value;
  	} else {
  	    undef;
  	}
      }
  }
  
  sub STORE {
      my($self, $key, $value) = @_;
      my $node;
  
      $self->print("STORE [$key,$value]") if ($self->{dbg} > 1);
  
      # do not cache undefined values
      defined($value) || return(undef);
  
      # check max size of entry, that it not exceed max size
      my $length;
      if($self->{max_size}) {
  	$length = &_get_data_length(\$key, \$value);
  	if($length > $self->{max_size}) {
  	    if ($self->{subclass}) {
  		$self->print("direct write() [$key, $value]") if ($self->{dbg} > 1);
  		$self->write($key, $value);
  	    }
  	    return $value;
  	}
      }
  
      # do we have node already ?
      if($self->{nodes}{$key}) {
  	$node = &delete($self, $key);
  #	$node = &delete($self, $key);
  #	$node->[$VALUE] = $value;
  #	$node->[$BYTES] = $length || &_get_data_length(\$key, \$value);
      }
  
      # insert new node  
      $node = &create_node($self, \$key, \$value, $length);
  #    $node ||= &create_node($self, \$key, \$value, $length);
      &insert($self, $node);
  
      # if the data is sync'd call write now, otherwise defer the data
      # writing, but mark it dirty so it can be cleanup up at the end
      if ($self->{subclass}) {
  	if($self->{sync}) {
  	    $self->print("sync write() [$key, $value]") if $self->{dbg} > 1;
  	    $self->write($key, $value);
  	} else {
  	    $node->[$DIRTY] = 1;
  	}
      }
  
      $value;
  }
  
  sub DELETE {
      my($self, $key) = @_;
  
      $self->print("DELETE $key") if ($self->{dbg} > 1);
      my $node = $self->delete($key);
      $node ? $node->[$VALUE] : undef;
  }
  
  sub CLEAR {
      my($self) = @_;
  
      $self->print("CLEAR CACHE") if ($self->{dbg} > 1);
  
      if($self->{subclass}) {
  	my $flushed = $self->flush();
  	$self->print("FLUSH COUNT $flushed") if ($self->{dbg} > 1);
      }
  
      my $node;
      while($node = $self->{head}) {
  	$self->delete($self->{head}[$KEY]);
      }
  
      1;
  }
  
  sub EXISTS {
      my($self, $key) = @_;
      exists $self->{nodes}{$key};
  }
      
  # firstkey / nextkey emulate keys() and each() behavior by
  # taking a snapshot of all the nodes at firstkey, and 
  # iterating through the keys with nextkey
  #
  # this method therefore will only supports one each() / keys()
  # happening during any given time.
  #
  sub FIRSTKEY {
      my($self) = @_;
  
      $self->{'keys'} = [];
      my $node = $self->{head};
      while($node) {
  	push(@{$self->{'keys'}}, $node->[$KEY]);
  	$node = $node->[$AFTER];
      }
  
      shift @{$self->{'keys'}};
  }
  
  sub NEXTKEY {
      my($self, $lastkey) = @_;
      shift @{$self->{'keys'}};
  }
  
  sub DESTROY {
      my($self) = @_;
  
      # if debugging, snapshot cache before clearing
      if($self->{dbg}) {
  	if($self->{hit} || $self->{miss}) {
  	    $self->{hit_ratio} = 
  		sprintf("%4.3f", $self->{hit} / ($self->{hit} + $self->{miss})); 
  	}
  	$self->print($self->pretty_self());
  	if($self->{dbg} > 1) {
  	    $self->print($self->pretty_chains());
  	}
      }
      
      $self->print("DESTROYING") if $self->{dbg} > 1;
      $self->CLEAR();
      
      1;
  }
  
  ####PERL##LRU##TIE##CACHE##PERL##LRU##TIE##CACHE##PERL##LRU##TIE##CACHE
  ## Helper Routines
  ####PERL##LRU##TIE##CACHE##PERL##LRU##TIE##CACHE##PERL##LRU##TIE##CACHE
  
  # we use scalar_refs for the data for speed
  sub create_node {
      my($self, $key, $value, $length) = @_;
      (defined($$key) && defined($$value)) 
        || die("need more localized data than $$key and $$value");
      
      # max_size always defined when max_bytes is
      if (($self->{max_size})) {
  	$length = defined $length ? $length : &_get_data_length($key, $value)
      } else {
  	$length = 0;
      }
      
      # ORDER SPECIFIC, see top for NODE ARRAY STRUCT
      my $node = [ $$key, $$value, $length ];
  }
  
  sub _get_data_length {
      my($key, $value) = @_;
      my $length = 0;
      my %refs;
  
      my @data = ($$key, $$value);
      while(my $elem = shift @data) {
  	next if $refs{$elem};
  	$refs{$elem} = 1;
  	if(ref $elem && ref($elem) =~ /^(SCALAR|HASH|ARRAY)$/) {
  	    my $type = $1;
  	    $length += $REF_SIZE; # guess, 16 bytes per ref, probably more
  	    if (($type eq 'SCALAR')) {
  		$length += length($$elem);
  	    } elsif (($type eq 'HASH')) {
  		while (my($k,$v) = each %$elem) {
  		    for my $kv($k,$v) {
  			if ((ref $kv)) {
  			    push(@data, $kv);
  			} else {
  			    $length += length($kv);
  			}
  		    }
  		}
  	    } elsif (($type eq 'ARRAY')) {
  		for my $val (@$elem){
  		    if ((ref $val)) {
  			push(@data, $val);
  		    } else {
  			$length += length($val);
  		    }
  		}
  	    }
  	} else {
  	    $length += length($elem);
  	}
      }
  
      $length;
  }
  
  sub insert {
      my($self, $new_node) = @_;
      
      $new_node->[$AFTER] = 0;
      $new_node->[$BEFORE] = $self->{tail};
      $self->print("insert() [$new_node->[$KEY], $new_node->[$VALUE]]") if ($self->{dbg} > 1);
      
      $self->{nodes}{$new_node->[$KEY]} = $new_node;
  
      # current sizes
      $self->{count}++;
      $self->{bytes} += $new_node->[$BYTES] + $STRUCT_SIZE;
  
      if($self->{tail}) {
  	$self->{tail}[$AFTER] = $new_node;
      } else {
  	$self->{head} = $new_node;
      }
      $self->{tail} = $new_node;
  
      ## if we are too big now, remove head
      while(($self->{max_count} && ($self->{count} > $self->{max_count})) ||
  	  ($self->{max_bytes} && ($self->{bytes} > $self->{max_bytes}))) 
      {
  	if($self->{dbg} > 1) {
  	    $self->print("current/max: ".
  			 "bytes ($self->{bytes}/$self->{max_bytes}) ".
  			 "count ($self->{count}/$self->{max_count}) "
  			 );
  	}
  	my $old_node = $self->delete($self->{head}[$KEY]);
  	if ($self->{subclass}) {
  	    if($old_node->[$DIRTY]) {
  		$self->print("dirty write() [$old_node->[$KEY], $old_node->[$VALUE]]") 
  		  if ($self->{dbg} > 1);
  		$self->write($old_node->[$KEY], $old_node->[$VALUE]);
  	    }
  	}
  #	if($self->{dbg} > 1) {
  #	    $self->print("after delete - bytes $self->{bytes}; count $self->{count}");
  #	}
      }
      
      1;
  }
  
  sub delete {
      my($self, $key) = @_;    
      my $node = $self->{nodes}{$key} || return;
  #    return unless $node;
  
      $self->print("delete() [$key, $node->[$VALUE]]") if ($self->{dbg} > 1);
  
      my $before = $node->[$BEFORE];
      my $after = $node->[$AFTER];
  
      #    my($before, $after) = $node->{before,after};
      if($before) {
  	($before->[$AFTER] = $after);
      } else {
  	$self->{head} = $after;
      }
  
      if($after) {
  	($after->[$BEFORE] = $before);
      } else {
  	$self->{tail} = $before;
      }
  
      delete $self->{nodes}{$key};
      $self->{bytes} -= ($node->[$BYTES] + $STRUCT_SIZE);
      $self->{count}--;
      
      $node;
  }
  
  sub flush {
      my $self = shift;
  
      $self->print("FLUSH CACHE") if ($self->{dbg} > 1);
  
      my $node = $self->{head};
      my $flush_count = 0;
      while($node) {
  	if($node->[$DIRTY]) {
  	    $self->print("flush dirty write() [$node->[$KEY], $node->[$VALUE]]") 
  	      if ($self->{dbg} > 1);
  	    $self->write($node->[$KEY], $node->[$VALUE]);
  	    $node->[$DIRTY] = 0;
  	    $flush_count++;
  	}
  	$node = $node->[$AFTER];
      }
  
      $flush_count;
  }
  
  sub print {
      my($self, $msg) = @_;
      print "$self: $msg\n";
  }
  
  sub pretty_self {
      my($self) = @_;
      
      my(@prints);
      for(sort keys %{$self}) { 
  	next unless defined $self->{$_};
  	push(@prints, "$_=>$self->{$_}"); 
      }
  
      "{ " . join(", ", @prints) . " }";
  }
  
  sub pretty_chains {
      my($self) = @_;
      my($str);
      my $k = $self->FIRSTKEY();
  
      $str .= "[head]->";
      my($curr_node) = $self->{head};
      while($curr_node) {
  	$str .= "[$curr_node->[$KEY],$curr_node->[$VALUE]]->";
  	$curr_node = $curr_node->[$AFTER];
      }
      $str .= "[tail]->";
  
      $curr_node = $self->{tail};
      while($curr_node) {
  	$str .= "[$curr_node->[$KEY],$curr_node->[$VALUE]]->";
  	$curr_node = $curr_node->[$BEFORE];
      }
      $str .= "[head]";
  
      $str;
  }
  
  1;
  
  __END__
  
  =head1 INSTALLATION
  
  Tie::Cache installs easily using the make or nmake commands as
  shown below.  Otherwise, just copy Cache.pm to $PERLLIB/site/Tie
  
  	> perl Makefile.PL
  	> make
          > make test 
  	> make install
  
          * use nmake for win32
          ** you can also just copy Cache.pm to $perllib/Tie
  
  =head1 BENCMARKS
  
  There is another simpler LRU cache implementation in CPAN,
  Tie::Cache::LRU, which has the same basic size limiting 
  functionality, and for this functionality, the exact same 
  interface.
  
  Through healthy competition, Michael G Schwern got 
  Tie::Cache::LRU mostly faster than Tie::Cache on reads & writes:
  
   Cache Size 5000       Tie::Cache 0.17  Tie::Cache::LRU 20110205.00
   10000 Writes             0.63 CPU sec          0.47 CPU sec
   40000 Reads              0.79 CPU sec          0.71 CPU sec
   10000 Deletes            0.23 CPU sec          0.26 CPU sec
  
  Unless you are using TRUE CACHE or MaxBytes functionality,
  using Tie::Cache::LRU could be an easy replacement for Tie::Cache.
  
  OTOH one nice thing about this module is its lack of external module dependencies!
  
  =head1 TRUE CACHE
  
  To use class as a true cache, which acts as the sole interface 
  for some data set, subclass the real cache off Tie::Cache, 
  with @ISA = qw( 'Tie::Cache' ) notation.  Then override
  the read() method for behavior when there is a cache miss,
  and the write() method for behavior when the cache's data 
  changes.
  
  When WriteSync is 1 or TRUE (DEFAULT), write() is called immediately
  when data in the cache is modified.  If set to 0, data that has 
  been modified in the cache gets written out when the entries are deleted or
  during the DESTROY phase of the cache object, usually at the end of
  a script.
  
  To have the dirty data write() periodically while WriteSync is set to 0,
  there is a flush() cache API call that will flush the dirty writes
  in this way.  Just call the flush() API like:
  
    my $write_flush_count = tied(%cache)->flush();
  
  The flush() API was added in the .17 release thanks to Rob Bloodgood.
  
  =head1 TRUE CACHE EXAMPLE
  
   use Tie::Cache;
  
   # personalize the Tie::Cache object, by inheriting from it
   package My::Cache;
   @ISA = qw(Tie::Cache);
  
   # override the read() and write() member functions
   # these tell the cache what to do with a cache miss or flush
   sub read { 
      my($self, $key) = @_; 
      print "cache miss for $key, read() data\n";
      rand() * $key; 
   }
   sub write { 
      my($self, $key, $value) = @_;
      print "flushing [$key, $value] from cache, write() data\n";
   }
  
   my $cache_size   = $ARGV[0] || 2;
   my $num_to_cache = $ARGV[1] || 4;   
   my $Debug = $ARGV[2] || 1;
  
   tie %cache, 'My::Cache', $cache_size, {Debug => $Debug};   
  
   # load the cache with new data, each through its contents,
   # and then reload in reverse order.
   for(1..$num_to_cache) { print "read data $_: $cache{$_}\n" }
   while(my($k, $v) = each %cache) { print "each data $k: $v\n"; }
   for(my $i=$num_to_cache; $i>0; $i--) { print "read data $i: $cache{$i}\n"; }
  
   # flush writes now, trivial use since will happen in DESTROY() anyway
   tied(%cache)->flush(); 
  
   # clear cache in 2 ways, write will flush out to disk
   %cache = ();
   undef %cache;
  
  =head1 NOTES
  
  Many thanks to all those who helped me make this module a reality, 
  including:
  
  	:) Tom Hukins who provided me insight and motivation for
  	   finishing this module.
  	:) Jamie McCarthy, for trying to make Tie::Cache be all
  	   that it can be.
  	:) Rob Fugina who knows how to "TRULY CACHE".
  	:) Rob Bloodgood, for the TRUE CACHE flush() API
  
  =head1 AUTHOR
  
  Please send any questions or comments to Joshua Chamas at chamas@alumni.stanford.org
  
  =head1 COPYRIGHT
  
  Copyright (c) 1999-2012 Joshua Chamas, Chamas Enterprises Inc.  
  Sponsored by development on NodeWorks http://nodeworks.com and Web Test.org http://web-test.org
  
  All rights reserved. This program is free software; you can redistribute it and/or modify it under the same 
  terms as Perl itself. 
  
  =cut
  
  
  
  
  
  
TIE_CACHE

    $main::fatpacked{"Tie/IxHash.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TIE_IXHASH';
  #
  # Tie/IxHash.pm
  #
  # Indexed hash implementation for Perl
  #
  # See below for documentation.
  #
  
  require 5.005;
  
  package Tie::IxHash;
  use strict;
  use integer;
  require Tie::Hash;
  use vars qw/@ISA $VERSION/;
  @ISA = qw(Tie::Hash);
  
  $VERSION = $VERSION = '1.23';
  
  #
  # standard tie functions
  #
  
  sub TIEHASH {
    my($c) = shift;
    my($s) = [];
    $s->[0] = {};   # hashkey index
    $s->[1] = [];   # array of keys
    $s->[2] = [];   # array of data
    $s->[3] = 0;    # iter count
  
    bless $s, $c;
  
    $s->Push(@_) if @_;
  
    return $s;
  }
  
  #sub DESTROY {}           # costly if there's nothing to do
  
  sub FETCH {
    my($s, $k) = (shift, shift);
    return exists( $s->[0]{$k} ) ? $s->[2][ $s->[0]{$k} ] : undef;
  }
  
  sub STORE {
    my($s, $k, $v) = (shift, shift, shift);
    
    if (exists $s->[0]{$k}) {
      my($i) = $s->[0]{$k};
      $s->[1][$i] = $k;
      $s->[2][$i] = $v;
      $s->[0]{$k} = $i;
    }
    else {
      push(@{$s->[1]}, $k);
      push(@{$s->[2]}, $v);
      $s->[0]{$k} = $#{$s->[1]};
    }
  }
  
  sub DELETE {
    my($s, $k) = (shift, shift);
  
    if (exists $s->[0]{$k}) {
      my($i) = $s->[0]{$k};
      for ($i+1..$#{$s->[1]}) {    # reset higher elt indexes
        $s->[0]{ $s->[1][$_] }--;    # timeconsuming, is there is better way?
      }
      if ( $i == $s->[3]-1 ) {
        $s->[3]--;
      }
      delete $s->[0]{$k};
      splice @{$s->[1]}, $i, 1;
      return (splice(@{$s->[2]}, $i, 1))[0];
    }
    return undef;
  }
  
  sub EXISTS {
    exists $_[0]->[0]{ $_[1] };
  }
  
  sub FIRSTKEY {
    $_[0][3] = 0;
    &NEXTKEY;
  }
  
  sub NEXTKEY {
    return $_[0][1][ $_[0][3]++ ] if ($_[0][3] <= $#{ $_[0][1] } );
    return undef;
  }
  
  
  
  #
  #
  # class functions that provide additional capabilities
  #
  #
  
  sub new { TIEHASH(@_) }
  
  sub Clear {
    my $s = shift;
    $s->[0] = {};   # hashkey index
    $s->[1] = [];   # array of keys
    $s->[2] = [];   # array of data
    $s->[3] = 0;    # iter count
    return;
  }
  
  #
  # add pairs to end of indexed hash
  # note that if a supplied key exists, it will not be reordered
  #
  sub Push {
    my($s) = shift;
    while (@_) {
      $s->STORE(shift, shift);
    }
    return scalar(@{$s->[1]});
  }
  
  sub Push2 {
    my($s) = shift;
    $s->Splice($#{$s->[1]}+1, 0, @_);
    return scalar(@{$s->[1]});
  }
  
  #
  # pop last k-v pair
  #
  sub Pop {
    my($s) = shift;
    my($k, $v, $i);
    $k = pop(@{$s->[1]});
    $v = pop(@{$s->[2]});
    if (defined $k) {
      delete $s->[0]{$k};
      return ($k, $v);
    }
    return undef;
  }
  
  sub Pop2 {
    return $_[0]->Splice(-1);
  }
  
  #
  # shift
  #
  sub Shift {
    my($s) = shift;
    my($k, $v, $i);
    $k = shift(@{$s->[1]});
    $v = shift(@{$s->[2]});
    if (defined $k) {
      delete $s->[0]{$k};
      for (keys %{$s->[0]}) {
        $s->[0]{$_}--;
      }
      return ($k, $v);
    }
    return undef;
  }
  
  sub Shift2 {
    return $_[0]->Splice(0, 1);
  }
  
  #
  # unshift
  # if a supplied key exists, it will not be reordered
  #
  sub Unshift {
    my($s) = shift;
    my($k, $v, @k, @v, $len, $i);
  
    while (@_) {
      ($k, $v) = (shift, shift);
      if (exists $s->[0]{$k}) {
        $i = $s->[0]{$k};
        $s->[1][$i] = $k;
        $s->[2][$i] = $v;
        $s->[0]{$k} = $i;
      }
      else {
        push(@k, $k);
        push(@v, $v);
        $len++;
      }
    }
    if (defined $len) {
      for (keys %{$s->[0]}) {
        $s->[0]{$_} += $len;
      }
      $i = 0;
      for (@k) {
        $s->[0]{$_} = $i++;
      }
      unshift(@{$s->[1]}, @k);
      return unshift(@{$s->[2]}, @v);
    }
    return scalar(@{$s->[1]});
  }
  
  sub Unshift2 {
    my($s) = shift;
    $s->Splice(0,0,@_);
    return scalar(@{$s->[1]});
  }
  
  #
  # splice 
  #
  # any existing hash key order is preserved. the value is replaced for
  # such keys, and the new keys are spliced in the regular fashion.
  #
  # supports -ve offsets but only +ve lengths
  #
  # always assumes a 0 start offset
  #
  sub Splice {
    my($s, $start, $len) = (shift, shift, shift);
    my($k, $v, @k, @v, @r, $i, $siz);
    my($end);                   # inclusive
  
    # XXX  inline this 
    ($start, $end, $len) = $s->_lrange($start, $len);
  
    if (defined $start) {
      if ($len > 0) {
        my(@k) = splice(@{$s->[1]}, $start, $len);
        my(@v) = splice(@{$s->[2]}, $start, $len);
        while (@k) {
          $k = shift(@k);
          delete $s->[0]{$k};
          push(@r, $k, shift(@v));
        }
        for ($start..$#{$s->[1]}) {
          $s->[0]{$s->[1][$_]} -= $len;
        }
      }
      while (@_) {
        ($k, $v) = (shift, shift);
        if (exists $s->[0]{$k}) {
          #      $s->STORE($k, $v);
          $i = $s->[0]{$k};
          $s->[1][$i] = $k;
          $s->[2][$i] = $v;
          $s->[0]{$k} = $i;
        }
        else {
          push(@k, $k);
          push(@v, $v);
          $siz++;
        }
      }
      if (defined $siz) {
        for ($start..$#{$s->[1]}) {
          $s->[0]{$s->[1][$_]} += $siz;
        }
        $i = $start;
        for (@k) {
          $s->[0]{$_} = $i++;
        }
        splice(@{$s->[1]}, $start, 0, @k);
        splice(@{$s->[2]}, $start, 0, @v);
      }
    }
    return @r;
  }
  
  #
  # delete elements specified by key
  # other elements higher than the one deleted "slide" down 
  #
  sub Delete {
    my($s) = shift;
  
    for (@_) {
      #
      # XXX potential optimization: could do $s->DELETE only if $#_ < 4.
      #     otherwise, should reset all the hash indices in one loop
      #
      $s->DELETE($_);
    }
  }
  
  #
  # replace hash element at specified index
  #
  # if the optional key is not supplied the value at index will simply be 
  # replaced without affecting the order.
  #
  # if an element with the supplied key already exists, it will be deleted first.
  #
  # returns the key of replaced value if it succeeds.
  #
  sub Replace {
    my($s) = shift;
    my($i, $v, $k) = (shift, shift, shift);
    if (defined $i and $i <= $#{$s->[1]} and $i >= 0) {
      if (defined $k) {
        delete $s->[0]{ $s->[1][$i] };
        $s->DELETE($k) ; #if exists $s->[0]{$k};
        $s->[1][$i] = $k;
        $s->[2][$i] = $v;
        $s->[0]{$k} = $i;
        return $k;
      }
      else {
        $s->[2][$i] = $v;
        return $s->[1][$i];
      }
    }
    return undef;
  }
  
  #
  # Given an $start and $len, returns a legal start and end (where start <= end)
  # for the current hash. 
  # Legal range is defined as 0 to $#s+1
  # $len defaults to number of elts upto end of list
  #
  #          0   1   2   ...
  #          | X | X | X ... X | X | X |
  #                           -2  -1       (no -0 alas)
  # X's above are the elements 
  #
  sub _lrange {
    my($s) = shift;
    my($offset, $len) = @_;
    my($start, $end);         # both inclusive
    my($size) = $#{$s->[1]}+1;
  
    return undef unless defined $offset;
    if($offset < 0) {
      $start = $offset + $size;
      $start = 0 if $start < 0;
    }
    else {
      ($offset > $size) ? ($start = $size) : ($start = $offset);
    }
  
    if (defined $len) {
      $len = -$len if $len < 0;
      $len = $size - $start if $len > $size - $start;
    }
    else {
      $len = $size - $start;
    }
    $end = $start + $len - 1;
  
    return ($start, $end, $len);
  }
  
  #
  # Return keys at supplied indices
  # Returns all keys if no args.
  #
  sub Keys   { 
    my($s) = shift;
    return ( @_ == 1
  	 ? $s->[1][$_[0]]
  	 : ( @_
  	   ? @{$s->[1]}[@_]
  	   : @{$s->[1]} ) );
  }
  
  #
  # Returns values at supplied indices
  # Returns all values if no args.
  #
  sub Values {
    my($s) = shift;
    return ( @_ == 1
  	 ? $s->[2][$_[0]]
  	 : ( @_
  	   ? @{$s->[2]}[@_]
  	   : @{$s->[2]} ) );
  }
  
  #
  # get indices of specified hash keys
  #
  sub Indices { 
    my($s) = shift;
    return ( @_ == 1 ? $s->[0]{$_[0]} : @{$s->[0]}{@_} );
  }
  
  #
  # number of k-v pairs in the ixhash
  # note that this does not equal the highest index
  # owing to preextended arrays
  #
  sub Length {
   return scalar @{$_[0]->[1]};
  }
  
  #
  # Reorder the hash in the supplied key order
  #
  # warning: any unsupplied keys will be lost from the hash
  # any supplied keys that dont exist in the hash will be ignored
  #
  sub Reorder {
    my($s) = shift;
    my(@k, @v, %x, $i);
    return unless @_;
  
    $i = 0;
    for (@_) {
      if (exists $s->[0]{$_}) {
        push(@k, $_);
        push(@v, $s->[2][ $s->[0]{$_} ] );
        $x{$_} = $i++;
      }
    }
    $s->[1] = \@k;
    $s->[2] = \@v;
    $s->[0] = \%x;
    return $s;
  }
  
  sub SortByKey {
    my($s) = shift;
    $s->Reorder(sort $s->Keys);
  }
  
  sub SortByValue {
    my($s) = shift;
    $s->Reorder(sort { $s->FETCH($a) cmp $s->FETCH($b) } $s->Keys)
  }
  
  1;
  __END__
  
  =head1 NAME
  
  Tie::IxHash - ordered associative arrays for Perl
  
  
  =head1 SYNOPSIS
  
      # simple usage
      use Tie::IxHash;
      tie HASHVARIABLE, 'Tie::IxHash' [, LIST];
  
      # OO interface with more powerful features
      use Tie::IxHash;
      TIEOBJECT = Tie::IxHash->new( [LIST] );
      TIEOBJECT->Splice( OFFSET [, LENGTH [, LIST]] );
      TIEOBJECT->Push( LIST );
      TIEOBJECT->Pop;
      TIEOBJECT->Shift;
      TIEOBJECT->Unshift( LIST );
      TIEOBJECT->Keys( [LIST] );
      TIEOBJECT->Values( [LIST] );
      TIEOBJECT->Indices( LIST );
      TIEOBJECT->Delete( [LIST] );
      TIEOBJECT->Replace( OFFSET, VALUE, [KEY] );
      TIEOBJECT->Reorder( LIST );
      TIEOBJECT->SortByKey;
      TIEOBJECT->SortByValue;
      TIEOBJECT->Length;
  
  
  =head1 DESCRIPTION
  
  This Perl module implements Perl hashes that preserve the order in which the
  hash elements were added.  The order is not affected when values
  corresponding to existing keys in the IxHash are changed.  The elements can
  also be set to any arbitrary supplied order.  The familiar perl array
  operations can also be performed on the IxHash.
  
  
  =head2 Standard C<TIEHASH> Interface
  
  The standard C<TIEHASH> mechanism is available. This interface is 
  recommended for simple uses, since the usage is exactly the same as
  regular Perl hashes after the C<tie> is declared.
  
  
  =head2 Object Interface
  
  This module also provides an extended object-oriented interface that can be
  used for more powerful operations with the IxHash.  The following methods
  are available:
  
  =over 8
  
  =item FETCH, STORE, DELETE, EXISTS
  
  These standard C<TIEHASH> methods mandated by Perl can be used directly.
  See the C<tie> entry in perlfunc(1) for details.
  
  =item Push, Pop, Shift, Unshift, Splice
  
  These additional methods resembling Perl functions are available for
  operating on key-value pairs in the IxHash. The behavior is the same as the
  corresponding perl functions, except when a supplied hash key already exists
  in the hash. In that case, the existing value is updated but its order is
  not affected.  To unconditionally alter the order of a supplied key-value
  pair, first C<DELETE> the IxHash element.
  
  =item Keys
  
  Returns an array of IxHash element keys corresponding to the list of supplied
  indices.  Returns an array of all the keys if called without arguments.
  Note the return value is mostly only useful when used in a list context
  (since perl will convert it to the number of elements in the array when
  used in a scalar context, and that may not be very useful).
  
  If a single argument is given, returns the single key corresponding to
  the index.  This is usable in either scalar or list context.
  
  =item Values
  
  Returns an array of IxHash element values corresponding to the list of supplied
  indices.  Returns an array of all the values if called without arguments.
  Note the return value is mostly only useful when used in a list context
  (since perl will convert it to the number of elements in the array when
  used in a scalar context, and that may not be very useful).
  
  If a single argument is given, returns the single value corresponding to
  the index.  This is usable in either scalar or list context.
  
  =item Indices
  
  Returns an array of indices corresponding to the supplied list of keys.
  Note the return value is mostly only useful when used in a list context
  (since perl will convert it to the number of elements in the array when
  used in a scalar context, and that may not be very useful).
  
  If a single argument is given, returns the single index corresponding to
  the key.  This is usable in either scalar or list context.
  
  =item Delete
  
  Removes elements with the supplied keys from the IxHash.
  
  =item Replace
  
  Substitutes the IxHash element at the specified index with the supplied
  value-key pair.  If a key is not supplied, simply substitutes the value at
  index with the supplied value. If an element with the supplied key already
  exists, it will be removed from the IxHash first.
  
  =item Reorder
  
  This method can be used to manipulate the internal order of the IxHash
  elements by supplying a list of keys in the desired order.  Note however,
  that any IxHash elements whose keys are not in the list will be removed from
  the IxHash.
  
  =item Length
  
  Returns the number of IxHash elements.
  
  =item SortByKey
  
  Reorders the IxHash elements by textual comparison of the keys.
  
  =item SortByValue
  
  Reorders the IxHash elements by textual comparison of the values.
  
  =item Clear
  
  Resets the IxHash to its pristine state: with no elements at all.
  
  =back
  
  
  =head1 EXAMPLE
  
      use Tie::IxHash;
  
      # simple interface
      $t = tie(%myhash, 'Tie::IxHash', 'a' => 1, 'b' => 2);
      %myhash = (first => 1, second => 2, third => 3);
      $myhash{fourth} = 4;
      @keys = keys %myhash;
      @values = values %myhash;
      print("y") if exists $myhash{third};
  
      # OO interface
      $t = Tie::IxHash->new(first => 1, second => 2, third => 3);
      $t->Push(fourth => 4); # same as $myhash{'fourth'} = 4;
      ($k, $v) = $t->Pop;    # $k is 'fourth', $v is 4
      $t->Unshift(neg => -1, zeroth => 0); 
      ($k, $v) = $t->Shift;  # $k is 'neg', $v is -1
      @oneandtwo = $t->Splice(1, 2, foo => 100, bar => 101);
  
      @keys = $t->Keys;
      @values = $t->Values;
      @indices = $t->Indices('foo', 'zeroth');
      @itemkeys = $t->Keys(@indices);
      @itemvals = $t->Values(@indices);
      $t->Replace(2, 0.3, 'other');
      $t->Delete('second', 'zeroth');
      $len = $t->Length;     # number of key-value pairs
  
      $t->Reorder(reverse @keys);
      $t->SortByKey;
      $t->SortByValue;
  
  
  =head1 BUGS
  
  You cannot specify a negative length to C<Splice>. Negative indexes are OK,
  though.
  
  
  =head1 NOTE
  
  Indexing always begins at 0 (despite the current C<$[> setting) for 
  all the functions.
  
  
  =head1 TODO
  
  Addition of elements with keys that already exist to the end of the IxHash
  must be controlled by a switch.
  
  Provide C<TIEARRAY> interface when it stabilizes in Perl.
  
  Rewrite using XSUBs for efficiency.
  
  
  =head1 AUTHOR
  
  Gurusamy Sarathy        gsar@umich.edu
  
  Copyright (c) 1995 Gurusamy Sarathy. All rights reserved.
  This program is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  
  =head1 VERSION
  
  Version 1.23
  
  
  =head1 SEE ALSO
  
  perl(1)
  
  =cut
TIE_IXHASH

    $main::fatpacked{"Time/Duration.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TIME_DURATION';
  package Time::Duration;
  $Time::Duration::VERSION = '1.20';
  use 5.006;
  use strict;
  use warnings;
  use constant DEBUG => 0;
  
  require Exporter;
  
  our @ISA         = ('Exporter');
  our @EXPORT      = qw( later later_exact earlier earlier_exact
                         ago ago_exact from_now from_now_exact
                         duration duration_exact
                         concise
                       );
  our @EXPORT_OK   = ('interval', @EXPORT);
  our $MILLISECOND = 0;
  
  # ALL SUBS ARE PURE FUNCTIONS
  
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
  sub concise ($) {
    my $string = $_[0];
    DEBUG and print "in : $string\n";
    $string =~ tr/,//d;
    $string =~ s/\band\b//;
    $string =~ s/\b(year|day|hour|minute|second)s?\b/substr($1,0,1)/eg;
    $string =~ s/\b(millisecond)s?\b/ms/g;
    $string =~ s/\s*(\d+)\s*/$1/g;
    return $string;
  }
  
  sub later {
    interval(      $_[0], $_[1], ' earlier', ' later', 'right then'); }
  sub later_exact {
    interval_exact($_[0], $_[1], ' earlier', ' later', 'right then'); }
  sub earlier {
    interval(      $_[0], $_[1], ' later', ' earlier', 'right then'); }
  sub earlier_exact {
    interval_exact($_[0], $_[1], ' later', ' earlier', 'right then'); }
  sub ago {
    interval(      $_[0], $_[1], ' from now', ' ago', 'right now'); }
  sub ago_exact {
    interval_exact($_[0], $_[1], ' from now', ' ago', 'right now'); }
  sub from_now {
    interval(      $_[0], $_[1], ' ago', ' from now', 'right now'); }
  sub from_now_exact {
    interval_exact($_[0], $_[1], ' ago', ' from now', 'right now'); }
  
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  sub duration_exact {
    my $span = $_[0];   # interval in seconds
    my $precision = int($_[1] || 0) || 2;  # precision (default: 2)
    return '0 seconds' unless $span;
    _render('',
            _separate(abs $span));
  }
  
  sub duration {
    my $span = $_[0];   # interval in seconds
    my $precision = int($_[1] || 0) || 2;  # precision (default: 2)
    return '0 seconds' unless $span;
    _render('',
            _approximate($precision,
                         _separate(abs $span)));
  }
  
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
  sub interval_exact {
    my $span = $_[0];                    # interval, in seconds
                                         # precision is ignored
    my $direction = ($span < 0) ? $_[2]  # what a neg number gets
                  : ($span > 0) ? $_[3]  # what a pos number gets
                  : return        $_[4]; # what zero gets
    _render($direction,
            _separate($span));
  }
  
  sub interval {
    my $span = $_[0];                     # interval, in seconds
    my $precision = int($_[1] || 0) || 2; # precision (default: 2)
    my $direction = ($span < 0) ? $_[2]   # what a neg number gets
                  : ($span > 0) ? $_[3]   # what a pos number gets
                  : return        $_[4];  # what zero gets
    _render($direction,
            _approximate($precision,
                         _separate($span)));
  }
  
  #~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#~#
  #
  # The actual figuring is below here
  
  use constant MINUTE => 60;
  use constant HOUR => 3600;
  use constant DAY  => 24 * HOUR;
  use constant YEAR => 365 * DAY;
  
  sub _separate {
    # Breakdown of seconds into units, starting with the most significant
    
    my $remainder = abs $_[0]; # remainder
    my $this; # scratch
    my @wheel; # retval
    
    # Years:
    $this = int($remainder / (365 * 24 * 60 * 60));
    push @wheel, ['year', $this, 1_000_000_000];
    $remainder -= $this * (365 * 24 * 60 * 60);
      
    # Days:
    $this = int($remainder / (24 * 60 * 60));
    push @wheel, ['day', $this, 365];
    $remainder -= $this * (24 * 60 * 60);
      
    # Hours:
    $this = int($remainder / (60 * 60));
    push @wheel, ['hour', $this, 24];
    $remainder -= $this * (60 * 60);
    
    # Minutes:
    $this = int($remainder / 60);
    push @wheel, ['minute', $this, 60];
    $remainder -= $this * 60;
    
    push @wheel, ['second', int($remainder), 60];
  
  	# Thanks to Steven Haryanto (http://search.cpan.org/~sharyanto/) for the basis of this change.
  	if ($MILLISECOND) {
  		$remainder -= int($remainder);
  		push @wheel, ['millisecond', sprintf("%0.f", $remainder * 1000), 1000];
  	}
  
    return @wheel;
  }
  
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  sub _approximate {
    # Now nudge the wheels into an acceptably (im)precise configuration
    my($precision, @wheel) = @_;
  
   Fix:
    {
      # Constraints for leaving this block:
      #  1) number of nonzero wheels must be <= $precision
      #  2) no wheels can be improperly expressed (like having "60" for mins)
    
      my $nonzero_count = 0;
      my $improperly_expressed;
  
      DEBUG and print join ' ', '#', (map "${$_}[1] ${$_}[0]",  @wheel), "\n";
      for(my $i = 0; $i < @wheel; $i++) {
        my $this = $wheel[$i];
        next if $this->[1] == 0; # Zeros require no attention.
        ++$nonzero_count;
        next if $i == 0; # the years wheel is never improper or over any limit; skip
        
        if($nonzero_count > $precision) {
          # This is one nonzero wheel too many!
          DEBUG and print '', $this->[0], " is one nonzero too many!\n";
  
          # Incr previous wheel if we're big enough:
          if($this->[1] >= ($this->[-1] / 2)) {
            DEBUG and printf "incrementing %s from %s to %s\n",
             $wheel[$i-1][0], $wheel[$i-1][1], 1 + $wheel[$i-1][1], ;
            ++$wheel[$i-1][1];
          }
  
          # Reset this and subsequent wheels to 0:
          for(my $j = $i; $j < @wheel; $j++) { $wheel[$j][1] = 0 }
          redo Fix; # Start over.
        } elsif($this->[1] >= $this->[-1]) {
          # It's an improperly expressed wheel.  (Like "60" on the mins wheel)
          $improperly_expressed = $i;
          DEBUG and print '', $this->[0], ' (', $this->[1], 
             ") is improper!\n";
        }
      }
      
      if(defined $improperly_expressed) {
        # Only fix the least-significant improperly expressed wheel (at a time).
        DEBUG and printf "incrementing %s from %s to %s\n",
         $wheel[$improperly_expressed-1][0], $wheel[$improperly_expressed-1][1], 
          1 + $wheel[$improperly_expressed-1][1], ;
        ++$wheel[ $improperly_expressed - 1][1];
        $wheel[ $improperly_expressed][1] = 0;
        # We never have a "150" in the minutes slot -- if it's improper,
        #  it's only by having been rounded up to the limit.
        redo Fix; # Start over.
      }
      
      # Otherwise there's not too many nonzero wheels, and there's no
      #  improperly expressed wheels, so fall thru...
    }
  
    return @wheel;
  }
  
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  sub _render {
    # Make it into English
  
    my $direction = shift @_;
    my @wheel = map
          {;
              (  $_->[1] == 0) ? ()  # zero wheels
              : ($_->[1] == 1) ? "${$_}[1] ${$_}[0]"  # singular
              :                  "${$_}[1] ${$_}[0]s" # plural
          }
          @_
    ;
    return "just now" unless @wheel; # sanity
    $wheel[-1] .= $direction;
    return $wheel[0] if @wheel == 1;
    return "$wheel[0] and $wheel[1]" if @wheel == 2;
    $wheel[-1] = "and $wheel[-1]";
    return join q{, }, @wheel;
  }
  
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1;
  
  __END__
  
  so "1y 0d 1h 50m 50s", N=3, so you round at minutes to "1y 0d 1h 51m 0s",
  #That's okay, so fall thru.
  
  so "1y 1d 0h 59m 50s", N=3, so you round at minutes to "1y 1d 0h 60m 0s",
  but that's not improperly expressed, so you loop around and get
  "1y 1d 1h 0m 0s", which is short enough, and is properly expressed.
  
  =head1 NAME
  
  Time::Duration - rounded or exact English expression of durations
  
  =head1 SYNOPSIS
  
  Example use in a program that ends by noting its runtime:
  
    my $start_time = time();
    use Time::Duration;
    
    # then things that take all that time, and then ends:
    print "Runtime ", duration(time() - $start_time), ".\n";
  
  Example use in a program that reports age of a file:
  
    use Time::Duration;
    my $file = 'that_file';
    my $age = $^T - (stat($file))[9];  # 9 = modtime
    print "$file was modified ", ago($age);
  
  =head1 DESCRIPTION
  
  This module provides functions for expressing durations in rounded or exact
  terms.
  
  
  In the first example in the Synopsis, using duration($interval_seconds):
  
  If the C<time() - $start_time> is 3 seconds, this prints
  "Runtime: B<3 seconds>.".  If it's 0 seconds, it's "Runtime: B<0 seconds>.".
  If it's 1 second, it's "Runtime: B<1 second>.".  If it's 125 seconds, you
  get "Runtime: B<2 minutes and 5 seconds>.".  If it's 3820 seconds (which
  is exactly 1h, 3m, 40s), you get it rounded to fit within two expressed
  units: "Runtime: B<1 hour and 4 minutes>.".  Using duration_exact instead
  would return "Runtime: B<1 hour, 3 minutes, and 40 seconds>".
  
  In the second example in the Synopsis, using ago($interval_seconds):
  
  If the $age is 3 seconds, this prints
  "I<file> was modified B<3 seconds ago>".  If it's 0 seconds, it's
  "I<file> was modified B<just now>", as a special case.  If it's 1 second,
  it's "from B<1 second ago>".  If it's 125 seconds, you get "I<file> was
  modified B<2 minutes and 5 seconds ago>".  If it's 3820 seconds (which
  is exactly 1h, 3m, 40s), you get it rounded to fit within two expressed
  units: "I<file> was modified B<1 hour and 4 minutes ago>".  
  Using ago_exact instead
  would return "I<file> was modified B<1 hour, 3 minutes, and 40 seconds
  ago>".  And if the file's
  modtime is, surprisingly, three seconds into the future, $age is -3,
  and you'll get the equally and appropriately surprising
  "I<file> was modified B<3 seconds from now>."
  
  =head1 MILLISECOND MODE
  
  By default, this module assumes input is an integer representing number
  of seconds and only emits results based on the integer part of any
  floating-point values passed to it.  However, if you set the variable
  C<$Time::Duration::MILLISECOND> to any true value, then the methods will
  interpret inputs as floating-point numbers and will emit results containing
  information about the number of milliseconds in the value.
  
  For example, C<duration(1.021)> will return B<1 second and 21 milliseconds>
  in this mode.
  
  Millisecond mode is not enabled by default because this module sees heavy use
  and existing users of it may be relying on its implicit truncation of non-integer
  arguments.
  
  
  =head1 FUNCTIONS
  
  This module provides all the following functions, which are all exported
  by default when you call C<use Time::Duration;>.
  
  
  =over
  
  =item duration($seconds)
  
  =item duration($seconds, $precision)
  
  Returns English text expressing the approximate time duration 
  of abs($seconds), with at most S<C<$precision || 2>> expressed units.
  (That is, duration($seconds) is the same as duration($seconds,2).)
  
  For example, duration(120) or duration(-120) is "2 minutes".  And
  duration(0) is "0 seconds".
  
  The precision figure means that no more than that many units will
  be used in expressing the time duration.  For example,
  31,629,659 seconds is a duration of I<exactly>
  1 year, 1 day, 2 hours, and 59 seconds (assuming 1 year = exactly
  365 days, as we do assume in this module).  However, if you wanted
  an approximation of this to at most two expressed (i.e., nonzero) units, it
  would round it and truncate it to "1 year and 1 day".  Max of 3 expressed
  units would get you "1 year, 1 day, and 2 hours".  Max of 4 expressed
  units would get you "1 year, 1 day, 2 hours, and 59 seconds",
  which happens to be exactly true.  Max of 5 (or more) expressed units
  would get you the same, since there are only four nonzero units possible
  in for that duration.
  
  =item duration_exact($seconds)
  
  Same as duration($seconds), except that the returned value is an exact
  (unrounded) expression of $seconds.  For example, duration_exact(31629659)
  returns "1 year, 1 day, 2 hours, and 59 seconds later",
  which is I<exactly> true.
  
  
  =item ago($seconds)
  
  =item ago($seconds, $precision)
  
  For a positive value of seconds, this prints the same as
  C<duration($seconds, [$precision]) . S<' ago'>>.  For example,
  ago(120) is "2 minutes ago".  For a negative value of seconds,
  this prints the same as
  C<duration($seconds, [$precision]) . S<' from now'>>.  For example,
  ago(-120) is "2 minutes from now".  As a special case, ago(0)
  returns "right now".
  
  =item ago_exact($seconds)
  
  Same as ago($seconds), except that the returned value is an exact
  (unrounded) expression of $seconds.
  
  
  =item from_now($seconds)
  
  =item from_now($seconds, $precision)
  
  =item from_now_exact($seconds)
  
  The same as ago(-$seconds), ago(-$seconds, $precision), 
  ago_exact(-$seconds).  For example, from_now(120) is "2 minutes from now".
  
  
  =item later($seconds)
  
  =item later($seconds, $precision)
  
  For a positive value of seconds, this prints the same as
  C<duration($seconds, [$precision]) . S<' later'>>.  For example,
  ago(120) is "2 minutes later".  For a negative value of seconds,
  this prints the same as
  C<duration($seconds, [$precision]) . S<' earlier'>>.  For example,
  later(-120) is "2 minutes earlier".  As a special case, later(0)
  returns "right then".
  
  =item later_exact($seconds)
  
  Same as later($seconds), except that the returned value is an exact
  (unrounded) expression of $seconds.
  
  =item earlier($seconds)
  
  =item earlier($seconds, $precision)
  
  =item earlier_exact($seconds)
  
  The same as later(-$seconds), later(-$seconds, $precision), 
  later_exact(-$seconds).  For example, earlier(120) is "2 minutes earlier".
  
  
  =item concise( I<function(> ... ) )
  
  Concise takes the string output of one of the above functions and makes
  it more concise.  For example, 
  C<< ago(4567) >> returns "1 hour and 16 minutes ago", but
  C<< concise(ago(4567)) >> returns "1h16m ago".
  
  =back
  
  
  
  =head1 I18N/L10N NOTES
  
  Little of the internals of this module are English-specific.  See source
  and/or contact me if you're interested in making a localized version
  for some other language than English.
  
  
  
  =head1 BACKSTORY
  
  I wrote the basic C<ago()> function for use in Infobot
  (C<http://www.infobot.org>), because I was tired of this sort of
  response from the Purl Infobot:
  
    me> Purl, seen Woozle?
    <Purl> Woozle was last seen on #perl 20 days, 7 hours, 32 minutes
    and 40 seconds ago, saying: Wuzzle!
  
  I figured if it was 20 days ago, I don't care about the seconds.  So
  once I had written C<ago()>, I abstracted the code a bit and got
  all the other functions.
  
  
  =head1 CAVEAT
  
  This module calls a durational "year" an interval of exactly 365
  days of exactly 24 hours each, with no provision for leap years or
  monkey business with 23/25 hour days (much less leap seconds!).  But
  since the main work of this module is approximation, that shouldn't
  be a great problem for most purposes.
  
  
  =head1 SEE ALSO
  
  L<Date::Interval|Date::Interval>, which is similarly named, but does
  something rather different.
  
  I<Star Trek: The Next Generation> (1987-1994), where the character
  Data would express time durations like
  "1 year, 20 days, 22 hours, 59 minutes, and 35 seconds"
  instead of rounding to "1 year and 21 days".  This is because no-one
  ever told him to use Time::Duration.
  
  
  
  =head1 COPYRIGHT AND DISCLAIMER
  
  Copyright 2013, Sean M. Burke C<sburke@cpan.org>; Avi Finkel,
  C<avi@finkel.org>, all rights reserved.  This program is free
  software; you can redistribute it and/or modify it under the
  same terms as Perl itself.
  
  This program is distributed in the hope that it will be useful,
  but without any warranty; without even the implied warranty of
  merchantability or fitness for a particular purpose.
  
  =head1 AUTHOR
  
  Current maintainer Avi Finkel, C<avi@finkel.org>; Original author
  Sean M. Burke, C<sburke@cpan.org>
  
  =cut
  
  
TIME_DURATION

    $main::fatpacked{"Try/Tiny.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'TRY_TINY';
  package Try::Tiny; # git description: v0.23-3-g5ee27f1
  use 5.006;
  # ABSTRACT: minimal try/catch with proper preservation of $@
  
  our $VERSION = '0.24';
  
  use strict;
  use warnings;
  
  use Exporter 5.57 'import';
  our @EXPORT = our @EXPORT_OK = qw(try catch finally);
  
  use Carp;
  $Carp::Internal{+__PACKAGE__}++;
  
  BEGIN {
    my $su = $INC{'Sub/Util.pm'} && defined &Sub::Util::set_subname;
    my $sn = $INC{'Sub/Name.pm'} && eval { Sub::Name->VERSION(0.08) };
    unless ($su || $sn) {
      $su = eval { require Sub::Util; } && defined &Sub::Util::set_subname;
      unless ($su) {
        $sn = eval { require Sub::Name; Sub::Name->VERSION(0.08) };
      }
    }
  
    *_subname = $su ? \&Sub::Util::set_subname
              : $sn ? \&Sub::Name::subname
              : sub { $_[1] };
    *_HAS_SUBNAME = ($su || $sn) ? sub(){1} : sub(){0};
  }
  
  # Need to prototype as @ not $$ because of the way Perl evaluates the prototype.
  # Keeping it at $$ means you only ever get 1 sub because we need to eval in a list
  # context & not a scalar one
  
  sub try (&;@) {
    my ( $try, @code_refs ) = @_;
  
    # we need to save this here, the eval block will be in scalar context due
    # to $failed
    my $wantarray = wantarray;
  
    # work around perl bug by explicitly initializing these, due to the likelyhood
    # this will be used in global destruction (perl rt#119311)
    my ( $catch, @finally ) = ();
  
    # find labeled blocks in the argument list.
    # catch and finally tag the blocks by blessing a scalar reference to them.
    foreach my $code_ref (@code_refs) {
  
      if ( ref($code_ref) eq 'Try::Tiny::Catch' ) {
        croak 'A try() may not be followed by multiple catch() blocks'
          if $catch;
        $catch = ${$code_ref};
      } elsif ( ref($code_ref) eq 'Try::Tiny::Finally' ) {
        push @finally, ${$code_ref};
      } else {
        croak(
          'try() encountered an unexpected argument ('
        . ( defined $code_ref ? $code_ref : 'undef' )
        . ') - perhaps a missing semi-colon before or'
        );
      }
    }
  
    # FIXME consider using local $SIG{__DIE__} to accumulate all errors. It's
    # not perfect, but we could provide a list of additional errors for
    # $catch->();
  
    # name the blocks if we have Sub::Name installed
    my $caller = caller;
    _subname("${caller}::try {...} " => $try)
      if _HAS_SUBNAME;
  
    # save the value of $@ so we can set $@ back to it in the beginning of the eval
    # and restore $@ after the eval finishes
    my $prev_error = $@;
  
    my ( @ret, $error );
  
    # failed will be true if the eval dies, because 1 will not be returned
    # from the eval body
    my $failed = not eval {
      $@ = $prev_error;
  
      # evaluate the try block in the correct context
      if ( $wantarray ) {
        @ret = $try->();
      } elsif ( defined $wantarray ) {
        $ret[0] = $try->();
      } else {
        $try->();
      };
  
      return 1; # properly set $failed to false
    };
  
    # preserve the current error and reset the original value of $@
    $error = $@;
    $@ = $prev_error;
  
    # set up a scope guard to invoke the finally block at the end
    my @guards =
      map { Try::Tiny::ScopeGuard->_new($_, $failed ? $error : ()) }
      @finally;
  
    # at this point $failed contains a true value if the eval died, even if some
    # destructor overwrote $@ as the eval was unwinding.
    if ( $failed ) {
      # if we got an error, invoke the catch block.
      if ( $catch ) {
        # This works like given($error), but is backwards compatible and
        # sets $_ in the dynamic scope for the body of C<$catch>
        for ($error) {
          return $catch->($error);
        }
  
        # in case when() was used without an explicit return, the C<for>
        # loop will be aborted and there's no useful return value
      }
  
      return;
    } else {
      # no failure, $@ is back to what it was, everything is fine
      return $wantarray ? @ret : $ret[0];
    }
  }
  
  sub catch (&;@) {
    my ( $block, @rest ) = @_;
  
    croak 'Useless bare catch()' unless wantarray;
  
    my $caller = caller;
    _subname("${caller}::catch {...} " => $block)
      if _HAS_SUBNAME;
    return (
      bless(\$block, 'Try::Tiny::Catch'),
      @rest,
    );
  }
  
  sub finally (&;@) {
    my ( $block, @rest ) = @_;
  
    croak 'Useless bare finally()' unless wantarray;
  
    my $caller = caller;
    _subname("${caller}::finally {...} " => $block)
      if _HAS_SUBNAME;
    return (
      bless(\$block, 'Try::Tiny::Finally'),
      @rest,
    );
  }
  
  {
    package # hide from PAUSE
      Try::Tiny::ScopeGuard;
  
    use constant UNSTABLE_DOLLARAT => ($] < '5.013002') ? 1 : 0;
  
    sub _new {
      shift;
      bless [ @_ ];
    }
  
    sub DESTROY {
      my ($code, @args) = @{ $_[0] };
  
      local $@ if UNSTABLE_DOLLARAT;
      eval {
        $code->(@args);
        1;
      } or do {
        warn
          "Execution of finally() block $code resulted in an exception, which "
        . '*CAN NOT BE PROPAGATED* due to fundamental limitations of Perl. '
        . 'Your program will continue as if this event never took place. '
        . "Original exception text follows:\n\n"
        . (defined $@ ? $@ : '$@ left undefined...')
        . "\n"
        ;
      }
    }
  }
  
  __PACKAGE__
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  Try::Tiny - minimal try/catch with proper preservation of $@
  
  =head1 VERSION
  
  version 0.24
  
  =head1 SYNOPSIS
  
  You can use Try::Tiny's C<try> and C<catch> to expect and handle exceptional
  conditions, avoiding quirks in Perl and common mistakes:
  
    # handle errors with a catch handler
    try {
      die "foo";
    } catch {
      warn "caught error: $_"; # not $@
    };
  
  You can also use it like a standalone C<eval> to catch and ignore any error
  conditions.  Obviously, this is an extreme measure not to be undertaken
  lightly:
  
    # just silence errors
    try {
      die "foo";
    };
  
  =head1 DESCRIPTION
  
  This module provides bare bones C<try>/C<catch>/C<finally> statements that are designed to
  minimize common mistakes with eval blocks, and NOTHING else.
  
  This is unlike L<TryCatch> which provides a nice syntax and avoids adding
  another call stack layer, and supports calling C<return> from the C<try> block to
  return from the parent subroutine. These extra features come at a cost of a few
  dependencies, namely L<Devel::Declare> and L<Scope::Upper> which are
  occasionally problematic, and the additional catch filtering uses L<Moose>
  type constraints which may not be desirable either.
  
  The main focus of this module is to provide simple and reliable error handling
  for those having a hard time installing L<TryCatch>, but who still want to
  write correct C<eval> blocks without 5 lines of boilerplate each time.
  
  It's designed to work as correctly as possible in light of the various
  pathological edge cases (see L</BACKGROUND>) and to be compatible with any style
  of error values (simple strings, references, objects, overloaded objects, etc).
  
  If the C<try> block dies, it returns the value of the last statement executed in
  the C<catch> block, if there is one. Otherwise, it returns C<undef> in scalar
  context or the empty list in list context. The following examples all
  assign C<"bar"> to C<$x>:
  
    my $x = try { die "foo" } catch { "bar" };
    my $x = try { die "foo" } || "bar";
    my $x = (try { die "foo" }) // "bar";
  
    my $x = eval { die "foo" } || "bar";
  
  You can add C<finally> blocks, yielding the following:
  
    my $x;
    try { die 'foo' } finally { $x = 'bar' };
    try { die 'foo' } catch { warn "Got a die: $_" } finally { $x = 'bar' };
  
  C<finally> blocks are always executed making them suitable for cleanup code
  which cannot be handled using local.  You can add as many C<finally> blocks to a
  given C<try> block as you like.
  
  Note that adding a C<finally> block without a preceding C<catch> block
  suppresses any errors. This behaviour is consistent with using a standalone
  C<eval>, but it is not consistent with C<try>/C<finally> patterns found in
  other programming languages, such as Java, Python, Javascript or C#. If you
  learnt the C<try>/C<finally> pattern from one of these languages, watch out for
  this.
  
  =head1 EXPORTS
  
  All functions are exported by default using L<Exporter>.
  
  If you need to rename the C<try>, C<catch> or C<finally> keyword consider using
  L<Sub::Import> to get L<Sub::Exporter>'s flexibility.
  
  =over 4
  
  =item try (&;@)
  
  Takes one mandatory C<try> subroutine, an optional C<catch> subroutine and C<finally>
  subroutine.
  
  The mandatory subroutine is evaluated in the context of an C<eval> block.
  
  If no error occurred the value from the first block is returned, preserving
  list/scalar context.
  
  If there was an error and the second subroutine was given it will be invoked
  with the error in C<$_> (localized) and as that block's first and only
  argument.
  
  C<$@> does B<not> contain the error. Inside the C<catch> block it has the same
  value it had before the C<try> block was executed.
  
  Note that the error may be false, but if that happens the C<catch> block will
  still be invoked.
  
  Once all execution is finished then the C<finally> block, if given, will execute.
  
  =item catch (&;@)
  
  Intended to be used in the second argument position of C<try>.
  
  Returns a reference to the subroutine it was given but blessed as
  C<Try::Tiny::Catch> which allows try to decode correctly what to do
  with this code reference.
  
    catch { ... }
  
  Inside the C<catch> block the caught error is stored in C<$_>, while previous
  value of C<$@> is still available for use.  This value may or may not be
  meaningful depending on what happened before the C<try>, but it might be a good
  idea to preserve it in an error stack.
  
  For code that captures C<$@> when throwing new errors (i.e.
  L<Class::Throwable>), you'll need to do:
  
    local $@ = $_;
  
  =item finally (&;@)
  
    try     { ... }
    catch   { ... }
    finally { ... };
  
  Or
  
    try     { ... }
    finally { ... };
  
  Or even
  
    try     { ... }
    finally { ... }
    catch   { ... };
  
  Intended to be the second or third element of C<try>. C<finally> blocks are always
  executed in the event of a successful C<try> or if C<catch> is run. This allows
  you to locate cleanup code which cannot be done via C<local()> e.g. closing a file
  handle.
  
  When invoked, the C<finally> block is passed the error that was caught.  If no
  error was caught, it is passed nothing.  (Note that the C<finally> block does not
  localize C<$_> with the error, since unlike in a C<catch> block, there is no way
  to know if C<$_ == undef> implies that there were no errors.) In other words,
  the following code does just what you would expect:
  
    try {
      die_sometimes();
    } catch {
      # ...code run in case of error
    } finally {
      if (@_) {
        print "The try block died with: @_\n";
      } else {
        print "The try block ran without error.\n";
      }
    };
  
  B<You must always do your own error handling in the C<finally> block>. C<Try::Tiny> will
  not do anything about handling possible errors coming from code located in these
  blocks.
  
  Furthermore B<exceptions in C<finally> blocks are not trappable and are unable
  to influence the execution of your program>. This is due to limitation of
  C<DESTROY>-based scope guards, which C<finally> is implemented on top of. This
  may change in a future version of Try::Tiny.
  
  In the same way C<catch()> blesses the code reference this subroutine does the same
  except it bless them as C<Try::Tiny::Finally>.
  
  =back
  
  =head1 BACKGROUND
  
  There are a number of issues with C<eval>.
  
  =head2 Clobbering $@
  
  When you run an C<eval> block and it succeeds, C<$@> will be cleared, potentially
  clobbering an error that is currently being caught.
  
  This causes action at a distance, clearing previous errors your caller may have
  not yet handled.
  
  C<$@> must be properly localized before invoking C<eval> in order to avoid this
  issue.
  
  More specifically, C<$@> is clobbered at the beginning of the C<eval>, which
  also makes it impossible to capture the previous error before you die (for
  instance when making exception objects with error stacks).
  
  For this reason C<try> will actually set C<$@> to its previous value (the one
  available before entering the C<try> block) in the beginning of the C<eval>
  block.
  
  =head2 Localizing $@ silently masks errors
  
  Inside an C<eval> block, C<die> behaves sort of like:
  
    sub die {
      $@ = $_[0];
      return_undef_from_eval();
    }
  
  This means that if you were polite and localized C<$@> you can't die in that
  scope, or your error will be discarded (printing "Something's wrong" instead).
  
  The workaround is very ugly:
  
    my $error = do {
      local $@;
      eval { ... };
      $@;
    };
  
    ...
    die $error;
  
  =head2 $@ might not be a true value
  
  This code is wrong:
  
    if ( $@ ) {
      ...
    }
  
  because due to the previous caveats it may have been unset.
  
  C<$@> could also be an overloaded error object that evaluates to false, but
  that's asking for trouble anyway.
  
  The classic failure mode is:
  
    sub Object::DESTROY {
      eval { ... }
    }
  
    eval {
      my $obj = Object->new;
  
      die "foo";
    };
  
    if ( $@ ) {
  
    }
  
  In this case since C<Object::DESTROY> is not localizing C<$@> but still uses
  C<eval>, it will set C<$@> to C<"">.
  
  The destructor is called when the stack is unwound, after C<die> sets C<$@> to
  C<"foo at Foo.pm line 42\n">, so by the time C<if ( $@ )> is evaluated it has
  been cleared by C<eval> in the destructor.
  
  The workaround for this is even uglier than the previous ones. Even though we
  can't save the value of C<$@> from code that doesn't localize, we can at least
  be sure the C<eval> was aborted due to an error:
  
    my $failed = not eval {
      ...
  
      return 1;
    };
  
  This is because an C<eval> that caught a C<die> will always return a false
  value.
  
  =head1 SHINY SYNTAX
  
  Using Perl 5.10 you can use L<perlsyn/"Switch statements">.
  
  =for stopwords topicalizer
  
  The C<catch> block is invoked in a topicalizer context (like a C<given> block),
  but note that you can't return a useful value from C<catch> using the C<when>
  blocks without an explicit C<return>.
  
  This is somewhat similar to Perl 6's C<CATCH> blocks. You can use it to
  concisely match errors:
  
    try {
      require Foo;
    } catch {
      when (/^Can't locate .*?\.pm in \@INC/) { } # ignore
      default { die $_ }
    };
  
  =head1 CAVEATS
  
  =over 4
  
  =item *
  
  C<@_> is not available within the C<try> block, so you need to copy your
  argument list. In case you want to work with argument values directly via C<@_>
  aliasing (i.e. allow C<$_[1] = "foo">), you need to pass C<@_> by reference:
  
    sub foo {
      my ( $self, @args ) = @_;
      try { $self->bar(@args) }
    }
  
  or
  
    sub bar_in_place {
      my $self = shift;
      my $args = \@_;
      try { $_ = $self->bar($_) for @$args }
    }
  
  =item *
  
  C<return> returns from the C<try> block, not from the parent sub (note that
  this is also how C<eval> works, but not how L<TryCatch> works):
  
    sub parent_sub {
      try {
        die;
      }
      catch {
        return;
      };
  
      say "this text WILL be displayed, even though an exception is thrown";
    }
  
  Instead, you should capture the return value:
  
    sub parent_sub {
      my $success = try {
        die;
        1;
      };
      return unless $success;
  
      say "This text WILL NEVER appear!";
    }
    # OR
    sub parent_sub_with_catch {
      my $success = try {
        die;
        1;
      }
      catch {
        # do something with $_
        return undef; #see note
      };
      return unless $success;
  
      say "This text WILL NEVER appear!";
    }
  
  Note that if you have a C<catch> block, it must return C<undef> for this to work,
  since if a C<catch> block exists, its return value is returned in place of C<undef>
  when an exception is thrown.
  
  =item *
  
  C<try> introduces another caller stack frame. L<Sub::Uplevel> is not used. L<Carp>
  will not report this when using full stack traces, though, because
  C<%Carp::Internal> is used. This lack of magic is considered a feature.
  
  =for stopwords unhygienically
  
  =item *
  
  The value of C<$_> in the C<catch> block is not guaranteed to be the value of
  the exception thrown (C<$@>) in the C<try> block.  There is no safe way to
  ensure this, since C<eval> may be used unhygienically in destructors.  The only
  guarantee is that the C<catch> will be called if an exception is thrown.
  
  =item *
  
  The return value of the C<catch> block is not ignored, so if testing the result
  of the expression for truth on success, be sure to return a false value from
  the C<catch> block:
  
    my $obj = try {
      MightFail->new;
    } catch {
      ...
  
      return; # avoid returning a true value;
    };
  
    return unless $obj;
  
  =item *
  
  C<$SIG{__DIE__}> is still in effect.
  
  Though it can be argued that C<$SIG{__DIE__}> should be disabled inside of
  C<eval> blocks, since it isn't people have grown to rely on it. Therefore in
  the interests of compatibility, C<try> does not disable C<$SIG{__DIE__}> for
  the scope of the error throwing code.
  
  =item *
  
  Lexical C<$_> may override the one set by C<catch>.
  
  For example Perl 5.10's C<given> form uses a lexical C<$_>, creating some
  confusing behavior:
  
    given ($foo) {
      when (...) {
        try {
          ...
        } catch {
          warn $_; # will print $foo, not the error
          warn $_[0]; # instead, get the error like this
        }
      }
    }
  
  Note that this behavior was changed once again in L<Perl5 version 18
  |https://metacpan.org/module/perldelta#given-now-aliases-the-global-_>.
  However, since the entirety of lexical C<$_> is now L<considered experimental
  |https://metacpan.org/module/perldelta#Lexical-_-is-now-experimental>, it
  is unclear whether the new version 18 behavior is final.
  
  =back
  
  =head1 SEE ALSO
  
  =over 4
  
  =item L<TryCatch>
  
  Much more feature complete, more convenient semantics, but at the cost of
  implementation complexity.
  
  =item L<autodie>
  
  Automatic error throwing for builtin functions and more. Also designed to
  work well with C<given>/C<when>.
  
  =item L<Throwable>
  
  A lightweight role for rolling your own exception classes.
  
  =item L<Error>
  
  Exception object implementation with a C<try> statement. Does not localize
  C<$@>.
  
  =item L<Exception::Class::TryCatch>
  
  Provides a C<catch> statement, but properly calling C<eval> is your
  responsibility.
  
  The C<try> keyword pushes C<$@> onto an error stack, avoiding some of the
  issues with C<$@>, but you still need to localize to prevent clobbering.
  
  =back
  
  =head1 LIGHTNING TALK
  
  I gave a lightning talk about this module, you can see the slides (Firefox
  only):
  
  L<http://web.archive.org/web/20100628040134/http://nothingmuch.woobling.org/talks/takahashi.xul>
  
  Or read the source:
  
  L<http://web.archive.org/web/20100305133605/http://nothingmuch.woobling.org/talks/yapc_asia_2009/try_tiny.yml>
  
  =head1 VERSION CONTROL
  
  L<http://github.com/doy/try-tiny/>
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|https://rt.cpan.org/Public/Dist/Display.html?Name=Try-Tiny>
  (or L<bug-Try-Tiny@rt.cpan.org|mailto:bug-Try-Tiny@rt.cpan.org>).
  
  =head1 AUTHORS
  
  =over 4
  
  =item *
  
  יובל קוג'מן (Yuval Kogman) <nothingmuch@woobling.org>
  
  =item *
  
  Jesse Luehrs <doy@tozt.net>
  
  =back
  
  =head1 CONTRIBUTORS
  
  =for stopwords Karen Etheridge Peter Rabbitson Ricardo Signes Mark Fowler Graham Knop Dagfinn Ilmari Mannsåker Paul Howarth Rudolf Leermakers anaxagoras awalker chromatic Alex cm-perl Andrew Yates David Lowe Glenn Hans Dieter Pearcey Jonathan Yu Marc Mims Stosberg
  
  =over 4
  
  =item *
  
  Karen Etheridge <ether@cpan.org>
  
  =item *
  
  Peter Rabbitson <ribasushi@cpan.org>
  
  =item *
  
  Ricardo Signes <rjbs@cpan.org>
  
  =item *
  
  Mark Fowler <mark@twoshortplanks.com>
  
  =item *
  
  Graham Knop <haarg@haarg.org>
  
  =item *
  
  Dagfinn Ilmari Mannsåker <ilmari@ilmari.org>
  
  =item *
  
  Paul Howarth <paul@city-fan.org>
  
  =item *
  
  Rudolf Leermakers <rudolf@hatsuseno.org>
  
  =item *
  
  anaxagoras <walkeraj@gmail.com>
  
  =item *
  
  awalker <awalker@sourcefire.com>
  
  =item *
  
  chromatic <chromatic@wgz.org>
  
  =item *
  
  Alex <alex@koban.(none)>
  
  =item *
  
  cm-perl <cm-perl@users.noreply.github.com>
  
  =item *
  
  Andrew Yates <ayates@haddock.local>
  
  =item *
  
  David Lowe <davidl@lokku.com>
  
  =item *
  
  Glenn Fowler <cebjyre@cpan.org>
  
  =item *
  
  Hans Dieter Pearcey <hdp@weftsoar.net>
  
  =item *
  
  Jonathan Yu <JAWNSY@cpan.org>
  
  =item *
  
  Marc Mims <marc@questright.com>
  
  =item *
  
  Mark Stosberg <mark@stosberg.com>
  
  =back
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is Copyright (c) 2009 by יובל קוג'מן (Yuval Kogman).
  
  This is free software, licensed under:
  
    The MIT (X11) License
  
  =cut
TRY_TINY

    $main::fatpacked{"URI.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI';
  package URI;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  our ($ABS_REMOTE_LEADING_DOTS, $ABS_ALLOW_RELATIVE_SCHEME, $DEFAULT_QUERY_FORM_DELIMITER);
  
  my %implements;  # mapping from scheme to implementor class
  
  # Some "official" character classes
  
  our $reserved   = q(;/?:@&=+$,[]);
  our $mark       = q(-_.!~*'());                                    #'; emacs
  our $unreserved = "A-Za-z0-9\Q$mark\E";
  our $uric       = quotemeta($reserved) . $unreserved . "%";
  
  our $scheme_re  = '[a-zA-Z][a-zA-Z0-9.+\-]*';
  
  use Carp ();
  use URI::Escape ();
  
  use overload ('""'     => sub { ${$_[0]} },
                '=='     => sub { _obj_eq(@_) },
                '!='     => sub { !_obj_eq(@_) },
                fallback => 1,
               );
  
  # Check if two objects are the same object
  sub _obj_eq {
      return overload::StrVal($_[0]) eq overload::StrVal($_[1]);
  }
  
  sub new
  {
      my($class, $uri, $scheme) = @_;
  
      $uri = defined ($uri) ? "$uri" : "";   # stringify
      # Get rid of potential wrapping
      $uri =~ s/^<(?:URL:)?(.*)>$/$1/;  # 
      $uri =~ s/^"(.*)"$/$1/;
      $uri =~ s/^\s+//;
      $uri =~ s/\s+$//;
  
      my $impclass;
      if ($uri =~ m/^($scheme_re):/so) {
  	$scheme = $1;
      }
      else {
  	if (($impclass = ref($scheme))) {
  	    $scheme = $scheme->scheme;
  	}
  	elsif ($scheme && $scheme =~ m/^($scheme_re)(?::|$)/o) {
  	    $scheme = $1;
          }
      }
      $impclass ||= implementor($scheme) ||
  	do {
  	    require URI::_foreign;
  	    $impclass = 'URI::_foreign';
  	};
  
      return $impclass->_init($uri, $scheme);
  }
  
  
  sub new_abs
  {
      my($class, $uri, $base) = @_;
      $uri = $class->new($uri, $base);
      $uri->abs($base);
  }
  
  
  sub _init
  {
      my $class = shift;
      my($str, $scheme) = @_;
      # find all funny characters and encode the bytes.
      $str = $class->_uric_escape($str);
      $str = "$scheme:$str" unless $str =~ /^$scheme_re:/o ||
                                   $class->_no_scheme_ok;
      my $self = bless \$str, $class;
      $self;
  }
  
  
  sub _uric_escape
  {
      my($class, $str) = @_;
      $str =~ s*([^$uric\#])* URI::Escape::escape_char($1) *ego;
      utf8::downgrade($str);
      return $str;
  }
  
  my %require_attempted;
  
  sub implementor
  {
      my($scheme, $impclass) = @_;
      if (!$scheme || $scheme !~ /\A$scheme_re\z/o) {
  	require URI::_generic;
  	return "URI::_generic";
      }
  
      $scheme = lc($scheme);
  
      if ($impclass) {
  	# Set the implementor class for a given scheme
          my $old = $implements{$scheme};
          $impclass->_init_implementor($scheme);
          $implements{$scheme} = $impclass;
          return $old;
      }
  
      my $ic = $implements{$scheme};
      return $ic if $ic;
  
      # scheme not yet known, look for internal or
      # preloaded (with 'use') implementation
      $ic = "URI::$scheme";  # default location
  
      # turn scheme into a valid perl identifier by a simple transformation...
      $ic =~ s/\+/_P/g;
      $ic =~ s/\./_O/g;
      $ic =~ s/\-/_/g;
  
      no strict 'refs';
      # check we actually have one for the scheme:
      unless (@{"${ic}::ISA"}) {
          if (not exists $require_attempted{$ic}) {
              # Try to load it
              my $_old_error = $@;
              eval "require $ic";
              die $@ if $@ && $@ !~ /Can\'t locate.*in \@INC/;
              $@ = $_old_error;
          }
          return undef unless @{"${ic}::ISA"};
      }
  
      $ic->_init_implementor($scheme);
      $implements{$scheme} = $ic;
      $ic;
  }
  
  
  sub _init_implementor
  {
      my($class, $scheme) = @_;
      # Remember that one implementor class may actually
      # serve to implement several URI schemes.
  }
  
  
  sub clone
  {
      my $self = shift;
      my $other = $$self;
      bless \$other, ref $self;
  }
  
  sub TO_JSON { ${$_[0]} }
  
  sub _no_scheme_ok { 0 }
  
  sub _scheme
  {
      my $self = shift;
  
      unless (@_) {
  	return undef unless $$self =~ /^($scheme_re):/o;
  	return $1;
      }
  
      my $old;
      my $new = shift;
      if (defined($new) && length($new)) {
  	Carp::croak("Bad scheme '$new'") unless $new =~ /^$scheme_re$/o;
  	$old = $1 if $$self =~ s/^($scheme_re)://o;
  	my $newself = URI->new("$new:$$self");
  	$$self = $$newself; 
  	bless $self, ref($newself);
      }
      else {
  	if ($self->_no_scheme_ok) {
  	    $old = $1 if $$self =~ s/^($scheme_re)://o;
  	    Carp::carp("Oops, opaque part now look like scheme")
  		if $^W && $$self =~ m/^$scheme_re:/o
  	}
  	else {
  	    $old = $1 if $$self =~ m/^($scheme_re):/o;
  	}
      }
  
      return $old;
  }
  
  sub scheme
  {
      my $scheme = shift->_scheme(@_);
      return undef unless defined $scheme;
      lc($scheme);
  }
  
  sub has_recognized_scheme {
      my $self = shift;
      return ref($self) !~ /^URI::_(?:foreign|generic)\z/;
  }
  
  sub opaque
  {
      my $self = shift;
  
      unless (@_) {
  	$$self =~ /^(?:$scheme_re:)?([^\#]*)/o or die;
  	return $1;
      }
  
      $$self =~ /^($scheme_re:)?    # optional scheme
  	        ([^\#]*)          # opaque
                  (\#.*)?           # optional fragment
                $/sx or die;
  
      my $old_scheme = $1;
      my $old_opaque = $2;
      my $old_frag   = $3;
  
      my $new_opaque = shift;
      $new_opaque = "" unless defined $new_opaque;
      $new_opaque =~ s/([^$uric])/ URI::Escape::escape_char($1)/ego;
      utf8::downgrade($new_opaque);
  
      $$self = defined($old_scheme) ? $old_scheme : "";
      $$self .= $new_opaque;
      $$self .= $old_frag if defined $old_frag;
  
      $old_opaque;
  }
  
  sub path { goto &opaque }  # alias
  
  
  sub fragment
  {
      my $self = shift;
      unless (@_) {
  	return undef unless $$self =~ /\#(.*)/s;
  	return $1;
      }
  
      my $old;
      $old = $1 if $$self =~ s/\#(.*)//s;
  
      my $new_frag = shift;
      if (defined $new_frag) {
  	$new_frag =~ s/([^$uric])/ URI::Escape::escape_char($1) /ego;
  	utf8::downgrade($new_frag);
  	$$self .= "#$new_frag";
      }
      $old;
  }
  
  
  sub as_string
  {
      my $self = shift;
      $$self;
  }
  
  
  sub as_iri
  {
      my $self = shift;
      my $str = $$self;
      if ($str =~ s/%([89a-fA-F][0-9a-fA-F])/chr(hex($1))/eg) {
  	# All this crap because the more obvious:
  	#
  	#   Encode::decode("UTF-8", $str, sub { sprintf "%%%02X", shift })
  	#
  	# doesn't work before Encode 2.39.  Wait for a standard release
  	# to bundle that version.
  
  	require Encode;
  	my $enc = Encode::find_encoding("UTF-8");
  	my $u = "";
  	while (length $str) {
  	    $u .= $enc->decode($str, Encode::FB_QUIET());
  	    if (length $str) {
  		# escape next char
  		$u .= URI::Escape::escape_char(substr($str, 0, 1, ""));
  	    }
  	}
  	$str = $u;
      }
      return $str;
  }
  
  
  sub canonical
  {
      # Make sure scheme is lowercased, that we don't escape unreserved chars,
      # and that we use upcase escape sequences.
  
      my $self = shift;
      my $scheme = $self->_scheme || "";
      my $uc_scheme = $scheme =~ /[A-Z]/;
      my $esc = $$self =~ /%[a-fA-F0-9]{2}/;
      return $self unless $uc_scheme || $esc;
  
      my $other = $self->clone;
      if ($uc_scheme) {
  	$other->_scheme(lc $scheme);
      }
      if ($esc) {
  	$$other =~ s{%([0-9a-fA-F]{2})}
  	            { my $a = chr(hex($1));
                        $a =~ /^[$unreserved]\z/o ? $a : "%\U$1"
                      }ge;
      }
      return $other;
  }
  
  # Compare two URIs, subclasses will provide a more correct implementation
  sub eq {
      my($self, $other) = @_;
      $self  = URI->new($self, $other) unless ref $self;
      $other = URI->new($other, $self) unless ref $other;
      ref($self) eq ref($other) &&                # same class
  	$self->canonical->as_string eq $other->canonical->as_string;
  }
  
  # generic-URI transformation methods
  sub abs { $_[0]; }
  sub rel { $_[0]; }
  
  sub secure { 0 }
  
  # help out Storable
  sub STORABLE_freeze {
         my($self, $cloning) = @_;
         return $$self;
  }
  
  sub STORABLE_thaw {
         my($self, $cloning, $str) = @_;
         $$self = $str;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  URI - Uniform Resource Identifiers (absolute and relative)
  
  =head1 SYNOPSIS
  
   $u1 = URI->new("http://www.perl.com");
   $u2 = URI->new("foo", "http");
   $u3 = $u2->abs($u1);
   $u4 = $u3->clone;
   $u5 = URI->new("HTTP://WWW.perl.com:80")->canonical;
  
   $str = $u->as_string;
   $str = "$u";
  
   $scheme = $u->scheme;
   $opaque = $u->opaque;
   $path   = $u->path;
   $frag   = $u->fragment;
  
   $u->scheme("ftp");
   $u->host("ftp.perl.com");
   $u->path("cpan/");
  
  =head1 DESCRIPTION
  
  This module implements the C<URI> class.  Objects of this class
  represent "Uniform Resource Identifier references" as specified in RFC
  2396 (and updated by RFC 2732).
  
  A Uniform Resource Identifier is a compact string of characters that
  identifies an abstract or physical resource.  A Uniform Resource
  Identifier can be further classified as either a Uniform Resource Locator
  (URL) or a Uniform Resource Name (URN).  The distinction between URL
  and URN does not matter to the C<URI> class interface. A
  "URI-reference" is a URI that may have additional information attached
  in the form of a fragment identifier.
  
  An absolute URI reference consists of three parts:  a I<scheme>, a
  I<scheme-specific part> and a I<fragment> identifier.  A subset of URI
  references share a common syntax for hierarchical namespaces.  For
  these, the scheme-specific part is further broken down into
  I<authority>, I<path> and I<query> components.  These URIs can also
  take the form of relative URI references, where the scheme (and
  usually also the authority) component is missing, but implied by the
  context of the URI reference.  The three forms of URI reference
  syntax are summarized as follows:
  
    <scheme>:<scheme-specific-part>#<fragment>
    <scheme>://<authority><path>?<query>#<fragment>
    <path>?<query>#<fragment>
  
  The components into which a URI reference can be divided depend on the
  I<scheme>.  The C<URI> class provides methods to get and set the
  individual components.  The methods available for a specific
  C<URI> object depend on the scheme.
  
  =head1 CONSTRUCTORS
  
  The following methods construct new C<URI> objects:
  
  =over 4
  
  =item $uri = URI->new( $str )
  
  =item $uri = URI->new( $str, $scheme )
  
  Constructs a new URI object.  The string
  representation of a URI is given as argument, together with an optional
  scheme specification.  Common URI wrappers like "" and <>, as well as
  leading and trailing white space, are automatically removed from
  the $str argument before it is processed further.
  
  The constructor determines the scheme, maps this to an appropriate
  URI subclass, constructs a new object of that class and returns it.
  
  If the scheme isn't one of those that URI recognizes, you still get
  an URI object back that you can access the generic methods on.  The
  C<< $uri->has_recognized_scheme >> method can be used to test for
  this.
  
  The $scheme argument is only used when $str is a
  relative URI.  It can be either a simple string that
  denotes the scheme, a string containing an absolute URI reference, or
  an absolute C<URI> object.  If no $scheme is specified for a relative
  URI $str, then $str is simply treated as a generic URI (no scheme-specific
  methods available).
  
  The set of characters available for building URI references is
  restricted (see L<URI::Escape>).  Characters outside this set are
  automatically escaped by the URI constructor.
  
  =item $uri = URI->new_abs( $str, $base_uri )
  
  Constructs a new absolute URI object.  The $str argument can
  denote a relative or absolute URI.  If relative, then it is
  absolutized using $base_uri as base. The $base_uri must be an absolute
  URI.
  
  =item $uri = URI::file->new( $filename )
  
  =item $uri = URI::file->new( $filename, $os )
  
  Constructs a new I<file> URI from a file name.  See L<URI::file>.
  
  =item $uri = URI::file->new_abs( $filename )
  
  =item $uri = URI::file->new_abs( $filename, $os )
  
  Constructs a new absolute I<file> URI from a file name.  See
  L<URI::file>.
  
  =item $uri = URI::file->cwd
  
  Returns the current working directory as a I<file> URI.  See
  L<URI::file>.
  
  =item $uri->clone
  
  Returns a copy of the $uri.
  
  =back
  
  =head1 COMMON METHODS
  
  The methods described in this section are available for all C<URI>
  objects.
  
  Methods that give access to components of a URI always return the
  old value of the component.  The value returned is C<undef> if the
  component was not present.  There is generally a difference between a
  component that is empty (represented as C<"">) and a component that is
  missing (represented as C<undef>).  If an accessor method is given an
  argument, it updates the corresponding component in addition to
  returning the old value of the component.  Passing an undefined
  argument removes the component (if possible).  The description of
  each accessor method indicates whether the component is passed as
  an escaped (percent-encoded) or an unescaped string.  A component that can be further
  divided into sub-parts are usually passed escaped, as unescaping might
  change its semantics.
  
  The common methods available for all URI are:
  
  =over 4
  
  =item $uri->scheme
  
  =item $uri->scheme( $new_scheme )
  
  Sets and returns the scheme part of the $uri.  If the $uri is
  relative, then $uri->scheme returns C<undef>.  If called with an
  argument, it updates the scheme of $uri, possibly changing the
  class of $uri, and returns the old scheme value.  The method croaks
  if the new scheme name is illegal; a scheme name must begin with a
  letter and must consist of only US-ASCII letters, numbers, and a few
  special marks: ".", "+", "-".  This restriction effectively means
  that the scheme must be passed unescaped.  Passing an undefined
  argument to the scheme method makes the URI relative (if possible).
  
  Letter case does not matter for scheme names.  The string
  returned by $uri->scheme is always lowercase.  If you want the scheme
  just as it was written in the URI in its original case,
  you can use the $uri->_scheme method instead.
  
  =item $uri->has_recognized_scheme
  
  Returns TRUE if the URI scheme is one that URI recognizes.
  
  It will also be TRUE for relative URLs where a recognized
  scheme was provided to the constructor, even if C<< $uri->scheme >>
  returns C<undef> for these.
  
  =item $uri->opaque
  
  =item $uri->opaque( $new_opaque )
  
  Sets and returns the scheme-specific part of the $uri
  (everything between the scheme and the fragment)
  as an escaped string.
  
  =item $uri->path
  
  =item $uri->path( $new_path )
  
  Sets and returns the same value as $uri->opaque unless the URI
  supports the generic syntax for hierarchical namespaces.
  In that case the generic method is overridden to set and return
  the part of the URI between the I<host name> and the I<fragment>.
  
  =item $uri->fragment
  
  =item $uri->fragment( $new_frag )
  
  Returns the fragment identifier of a URI reference
  as an escaped string.
  
  =item $uri->as_string
  
  Returns a URI object to a plain ASCII string.  URI objects are
  also converted to plain strings automatically by overloading.  This
  means that $uri objects can be used as plain strings in most Perl
  constructs.
  
  =item $uri->as_iri
  
  Returns a Unicode string representing the URI.  Escaped UTF-8 sequences
  representing non-ASCII characters are turned into their corresponding Unicode
  code point.
  
  =item $uri->canonical
  
  Returns a normalized version of the URI.  The rules
  for normalization are scheme-dependent.  They usually involve
  lowercasing the scheme and Internet host name components,
  removing the explicit port specification if it matches the default port,
  uppercasing all escape sequences, and unescaping octets that can be
  better represented as plain characters.
  
  For efficiency reasons, if the $uri is already in normalized form,
  then a reference to it is returned instead of a copy.
  
  =item $uri->eq( $other_uri )
  
  =item URI::eq( $first_uri, $other_uri )
  
  Tests whether two URI references are equal.  URI references
  that normalize to the same string are considered equal.  The method
  can also be used as a plain function which can also test two string
  arguments.
  
  If you need to test whether two C<URI> object references denote the
  same object, use the '==' operator.
  
  =item $uri->abs( $base_uri )
  
  Returns an absolute URI reference.  If $uri is already
  absolute, then a reference to it is simply returned.  If the $uri
  is relative, then a new absolute URI is constructed by combining the
  $uri and the $base_uri, and returned.
  
  =item $uri->rel( $base_uri )
  
  Returns a relative URI reference if it is possible to
  make one that denotes the same resource relative to $base_uri.
  If not, then $uri is simply returned.
  
  =item $uri->secure
  
  Returns a TRUE value if the URI is considered to point to a resource on
  a secure channel, such as an SSL or TLS encrypted one.
  
  =back
  
  =head1 GENERIC METHODS
  
  The following methods are available to schemes that use the
  common/generic syntax for hierarchical namespaces.  The descriptions of
  schemes below indicate which these are.  Unrecognized schemes are
  assumed to support the generic syntax, and therefore the following
  methods:
  
  =over 4
  
  =item $uri->authority
  
  =item $uri->authority( $new_authority )
  
  Sets and returns the escaped authority component
  of the $uri.
  
  =item $uri->path
  
  =item $uri->path( $new_path )
  
  Sets and returns the escaped path component of
  the $uri (the part between the host name and the query or fragment).
  The path can never be undefined, but it can be the empty string.
  
  =item $uri->path_query
  
  =item $uri->path_query( $new_path_query )
  
  Sets and returns the escaped path and query
  components as a single entity.  The path and the query are
  separated by a "?" character, but the query can itself contain "?".
  
  =item $uri->path_segments
  
  =item $uri->path_segments( $segment, ... )
  
  Sets and returns the path.  In a scalar context, it returns
  the same value as $uri->path.  In a list context, it returns the
  unescaped path segments that make up the path.  Path segments that
  have parameters are returned as an anonymous array.  The first element
  is the unescaped path segment proper;  subsequent elements are escaped
  parameter strings.  Such an anonymous array uses overloading so it can
  be treated as a string too, but this string does not include the
  parameters.
  
  Note that absolute paths have the empty string as their first
  I<path_segment>, i.e. the I<path> C</foo/bar> have 3
  I<path_segments>; "", "foo" and "bar".
  
  =item $uri->query
  
  =item $uri->query( $new_query )
  
  Sets and returns the escaped query component of
  the $uri.
  
  =item $uri->query_form
  
  =item $uri->query_form( $key1 => $val1, $key2 => $val2, ... )
  
  =item $uri->query_form( $key1 => $val1, $key2 => $val2, ..., $delim )
  
  =item $uri->query_form( \@key_value_pairs )
  
  =item $uri->query_form( \@key_value_pairs, $delim )
  
  =item $uri->query_form( \%hash )
  
  =item $uri->query_form( \%hash, $delim )
  
  Sets and returns query components that use the
  I<application/x-www-form-urlencoded> format.  Key/value pairs are
  separated by "&", and the key is separated from the value by a "="
  character.
  
  The form can be set either by passing separate key/value pairs, or via
  an array or hash reference.  Passing an empty array or an empty hash
  removes the query component, whereas passing no arguments at all leaves
  the component unchanged.  The order of keys is undefined if a hash
  reference is passed.  The old value is always returned as a list of
  separate key/value pairs.  Assigning this list to a hash is unwise as
  the keys returned might repeat.
  
  The values passed when setting the form can be plain strings or
  references to arrays of strings.  Passing an array of values has the
  same effect as passing the key repeatedly with one value at a time.
  All the following statements have the same effect:
  
      $uri->query_form(foo => 1, foo => 2);
      $uri->query_form(foo => [1, 2]);
      $uri->query_form([ foo => 1, foo => 2 ]);
      $uri->query_form([ foo => [1, 2] ]);
      $uri->query_form({ foo => [1, 2] });
  
  The $delim parameter can be passed as ";" to force the key/value pairs
  to be delimited by ";" instead of "&" in the query string.  This
  practice is often recommended for URLs embedded in HTML or XML
  documents as this avoids the trouble of escaping the "&" character.
  You might also set the $URI::DEFAULT_QUERY_FORM_DELIMITER variable to
  ";" for the same global effect.
  
  The C<URI::QueryParam> module can be loaded to add further methods to
  manipulate the form of a URI.  See L<URI::QueryParam> for details.
  
  =item $uri->query_keywords
  
  =item $uri->query_keywords( $keywords, ... )
  
  =item $uri->query_keywords( \@keywords )
  
  Sets and returns query components that use the
  keywords separated by "+" format.
  
  The keywords can be set either by passing separate keywords directly
  or by passing a reference to an array of keywords.  Passing an empty
  array removes the query component, whereas passing no arguments at
  all leaves the component unchanged.  The old value is always returned
  as a list of separate words.
  
  =back
  
  =head1 SERVER METHODS
  
  For schemes where the I<authority> component denotes an Internet host,
  the following methods are available in addition to the generic
  methods.
  
  =over 4
  
  =item $uri->userinfo
  
  =item $uri->userinfo( $new_userinfo )
  
  Sets and returns the escaped userinfo part of the
  authority component.
  
  For some schemes this is a user name and a password separated by
  a colon.  This practice is not recommended. Embedding passwords in
  clear text (such as URI) has proven to be a security risk in almost
  every case where it has been used.
  
  =item $uri->host
  
  =item $uri->host( $new_host )
  
  Sets and returns the unescaped hostname.
  
  If the $new_host string ends with a colon and a number, then this
  number also sets the port.
  
  For IPv6 addresses the brackets around the raw address is removed in the return
  value from $uri->host.  When setting the host attribute to an IPv6 address you
  can use a raw address or one enclosed in brackets.  The address needs to be
  enclosed in brackets if you want to pass in a new port value as well.
  
  =item $uri->ihost
  
  Returns the host in Unicode form.  Any IDNA A-labels are turned into U-labels.
  
  =item $uri->port
  
  =item $uri->port( $new_port )
  
  Sets and returns the port.  The port is a simple integer
  that should be greater than 0.
  
  If a port is not specified explicitly in the URI, then the URI scheme's default port
  is returned. If you don't want the default port
  substituted, then you can use the $uri->_port method instead.
  
  =item $uri->host_port
  
  =item $uri->host_port( $new_host_port )
  
  Sets and returns the host and port as a single
  unit.  The returned value includes a port, even if it matches the
  default port.  The host part and the port part are separated by a
  colon: ":".
  
  For IPv6 addresses the bracketing is preserved; thus
  URI->new("http://[::1]/")->host_port returns "[::1]:80".  Contrast this with
  $uri->host which will remove the brackets.
  
  =item $uri->default_port
  
  Returns the default port of the URI scheme to which $uri
  belongs.  For I<http> this is the number 80, for I<ftp> this
  is the number 21, etc.  The default port for a scheme can not be
  changed.
  
  =back
  
  =head1 SCHEME-SPECIFIC SUPPORT
  
  Scheme-specific support is provided for the following URI schemes.  For C<URI>
  objects that do not belong to one of these, you can only use the common and
  generic methods.
  
  =over 4
  
  =item B<data>:
  
  The I<data> URI scheme is specified in RFC 2397.  It allows inclusion
  of small data items as "immediate" data, as if it had been included
  externally.
  
  C<URI> objects belonging to the data scheme support the common methods
  and two new methods to access their scheme-specific components:
  $uri->media_type and $uri->data.  See L<URI::data> for details.
  
  =item B<file>:
  
  An old specification of the I<file> URI scheme is found in RFC 1738.
  A new RFC 2396 based specification in not available yet, but file URI
  references are in common use.
  
  C<URI> objects belonging to the file scheme support the common and
  generic methods.  In addition, they provide two methods for mapping file URIs
  back to local file names; $uri->file and $uri->dir.  See L<URI::file>
  for details.
  
  =item B<ftp>:
  
  An old specification of the I<ftp> URI scheme is found in RFC 1738.  A
  new RFC 2396 based specification in not available yet, but ftp URI
  references are in common use.
  
  C<URI> objects belonging to the ftp scheme support the common,
  generic and server methods.  In addition, they provide two methods for
  accessing the userinfo sub-components: $uri->user and $uri->password.
  
  =item B<gopher>:
  
  The I<gopher> URI scheme is specified in
  <draft-murali-url-gopher-1996-12-04> and will hopefully be available
  as a RFC 2396 based specification.
  
  C<URI> objects belonging to the gopher scheme support the common,
  generic and server methods. In addition, they support some methods for
  accessing gopher-specific path components: $uri->gopher_type,
  $uri->selector, $uri->search, $uri->string.
  
  =item B<http>:
  
  The I<http> URI scheme is specified in RFC 2616.
  The scheme is used to reference resources hosted by HTTP servers.
  
  C<URI> objects belonging to the http scheme support the common,
  generic and server methods.
  
  =item B<https>:
  
  The I<https> URI scheme is a Netscape invention which is commonly
  implemented.  The scheme is used to reference HTTP servers through SSL
  connections.  Its syntax is the same as http, but the default
  port is different.
  
  =item B<ldap>:
  
  The I<ldap> URI scheme is specified in RFC 2255.  LDAP is the
  Lightweight Directory Access Protocol.  An ldap URI describes an LDAP
  search operation to perform to retrieve information from an LDAP
  directory.
  
  C<URI> objects belonging to the ldap scheme support the common,
  generic and server methods as well as ldap-specific methods: $uri->dn,
  $uri->attributes, $uri->scope, $uri->filter, $uri->extensions.  See
  L<URI::ldap> for details.
  
  =item B<ldapi>:
  
  Like the I<ldap> URI scheme, but uses a UNIX domain socket.  The
  server methods are not supported, and the local socket path is
  available as $uri->un_path.  The I<ldapi> scheme is used by the
  OpenLDAP package.  There is no real specification for it, but it is
  mentioned in various OpenLDAP manual pages.
  
  =item B<ldaps>:
  
  Like the I<ldap> URI scheme, but uses an SSL connection.  This
  scheme is deprecated, as the preferred way is to use the I<start_tls>
  mechanism.
  
  =item B<mailto>:
  
  The I<mailto> URI scheme is specified in RFC 2368.  The scheme was
  originally used to designate the Internet mailing address of an
  individual or service.  It has (in RFC 2368) been extended to allow
  setting of other mail header fields and the message body.
  
  C<URI> objects belonging to the mailto scheme support the common
  methods and the generic query methods.  In addition, they support the
  following mailto-specific methods: $uri->to, $uri->headers.
  
  Note that the "foo@example.com" part of a mailto is I<not> the
  C<userinfo> and C<host> but instead the C<path>.  This allows a
  mailto URI to contain multiple comma separated email addresses.
  
  =item B<mms>:
  
  The I<mms> URL specification can be found at L<http://sdp.ppona.com/>.
  C<URI> objects belonging to the mms scheme support the common,
  generic, and server methods, with the exception of userinfo and
  query-related sub-components.
  
  =item B<news>:
  
  The I<news>, I<nntp> and I<snews> URI schemes are specified in
  <draft-gilman-news-url-01> and will hopefully be available as an RFC
  2396 based specification soon.
  
  C<URI> objects belonging to the news scheme support the common,
  generic and server methods.  In addition, they provide some methods to
  access the path: $uri->group and $uri->message.
  
  =item B<nntp>:
  
  See I<news> scheme.
  
  =item B<pop>:
  
  The I<pop> URI scheme is specified in RFC 2384. The scheme is used to
  reference a POP3 mailbox.
  
  C<URI> objects belonging to the pop scheme support the common, generic
  and server methods.  In addition, they provide two methods to access the
  userinfo components: $uri->user and $uri->auth
  
  =item B<rlogin>:
  
  An old specification of the I<rlogin> URI scheme is found in RFC
  1738. C<URI> objects belonging to the rlogin scheme support the
  common, generic and server methods.
  
  =item B<rtsp>:
  
  The I<rtsp> URL specification can be found in section 3.2 of RFC 2326.
  C<URI> objects belonging to the rtsp scheme support the common,
  generic, and server methods, with the exception of userinfo and
  query-related sub-components.
  
  =item B<rtspu>:
  
  The I<rtspu> URI scheme is used to talk to RTSP servers over UDP
  instead of TCP.  The syntax is the same as rtsp.
  
  =item B<rsync>:
  
  Information about rsync is available from L<http://rsync.samba.org/>.
  C<URI> objects belonging to the rsync scheme support the common,
  generic and server methods.  In addition, they provide methods to
  access the userinfo sub-components: $uri->user and $uri->password.
  
  =item B<sip>:
  
  The I<sip> URI specification is described in sections 19.1 and 25
  of RFC 3261.  C<URI> objects belonging to the sip scheme support the
  common, generic, and server methods with the exception of path related
  sub-components.  In addition, they provide two methods to get and set
  I<sip> parameters: $uri->params_form and $uri->params.
  
  =item B<sips>:
  
  See I<sip> scheme.  Its syntax is the same as sip, but the default
  port is different.
  
  =item B<snews>:
  
  See I<news> scheme.  Its syntax is the same as news, but the default
  port is different.
  
  =item B<telnet>:
  
  An old specification of the I<telnet> URI scheme is found in RFC
  1738. C<URI> objects belonging to the telnet scheme support the
  common, generic and server methods.
  
  =item B<tn3270>:
  
  These URIs are used like I<telnet> URIs but for connections to IBM
  mainframes.  C<URI> objects belonging to the tn3270 scheme support the
  common, generic and server methods.
  
  =item B<ssh>:
  
  Information about ssh is available at L<http://www.openssh.com/>.
  C<URI> objects belonging to the ssh scheme support the common,
  generic and server methods. In addition, they provide methods to
  access the userinfo sub-components: $uri->user and $uri->password.
  
  =item B<sftp>:
  
  C<URI> objects belonging to the sftp scheme support the common,
  generic and server methods. In addition, they provide methods to
  access the userinfo sub-components: $uri->user and $uri->password.
  
  =item B<urn>:
  
  The syntax of Uniform Resource Names is specified in RFC 2141.  C<URI>
  objects belonging to the urn scheme provide the common methods, and also the
  methods $uri->nid and $uri->nss, which return the Namespace Identifier
  and the Namespace-Specific String respectively.
  
  The Namespace Identifier basically works like the Scheme identifier of
  URIs, and further divides the URN namespace.  Namespace Identifier
  assignments are maintained at
  L<http://www.iana.org/assignments/urn-namespaces>.
  
  Letter case is not significant for the Namespace Identifier.  It is
  always returned in lower case by the $uri->nid method.  The $uri->_nid
  method can be used if you want it in its original case.
  
  =item B<urn>:B<isbn>:
  
  The C<urn:isbn:> namespace contains International Standard Book
  Numbers (ISBNs) and is described in RFC 3187.  A C<URI> object belonging
  to this namespace has the following extra methods (if the
  Business::ISBN module is available): $uri->isbn,
  $uri->isbn_publisher_code, $uri->isbn_group_code (formerly isbn_country_code,
  which is still supported by issues a deprecation warning), $uri->isbn_as_ean.
  
  =item B<urn>:B<oid>:
  
  The C<urn:oid:> namespace contains Object Identifiers (OIDs) and is
  described in RFC 3061.  An object identifier consists of sequences of digits
  separated by dots.  A C<URI> object belonging to this namespace has an
  additional method called $uri->oid that can be used to get/set the oid
  value.  In a list context, oid numbers are returned as separate elements.
  
  =back
  
  =head1 CONFIGURATION VARIABLES
  
  The following configuration variables influence how the class and its
  methods behave:
  
  =over 4
  
  =item $URI::ABS_ALLOW_RELATIVE_SCHEME
  
  Some older parsers used to allow the scheme name to be present in the
  relative URL if it was the same as the base URL scheme.  RFC 2396 says
  that this should be avoided, but you can enable this old behaviour by
  setting the $URI::ABS_ALLOW_RELATIVE_SCHEME variable to a TRUE value.
  The difference is demonstrated by the following examples:
  
    URI->new("http:foo")->abs("http://host/a/b")
        ==>  "http:foo"
  
    local $URI::ABS_ALLOW_RELATIVE_SCHEME = 1;
    URI->new("http:foo")->abs("http://host/a/b")
        ==>  "http:/host/a/foo"
  
  
  =item $URI::ABS_REMOTE_LEADING_DOTS
  
  You can also have the abs() method ignore excess ".."
  segments in the relative URI by setting $URI::ABS_REMOTE_LEADING_DOTS
  to a TRUE value.  The difference is demonstrated by the following
  examples:
  
    URI->new("../../../foo")->abs("http://host/a/b")
        ==> "http://host/../../foo"
  
    local $URI::ABS_REMOTE_LEADING_DOTS = 1;
    URI->new("../../../foo")->abs("http://host/a/b")
        ==> "http://host/foo"
  
  =item $URI::DEFAULT_QUERY_FORM_DELIMITER
  
  This value can be set to ";" to have the query form C<key=value> pairs
  delimited by ";" instead of "&" which is the default.
  
  =back
  
  =head1 BUGS
  
  There are some things that are not quite right:
  
  =over
  
  =item *
  
  Using regexp variables like $1 directly as arguments to the URI accessor methods
  does not work too well with current perl implementations.  I would argue
  that this is actually a bug in perl.  The workaround is to quote
  them. Example:
  
     /(...)/ || die;
     $u->query("$1");
  
  
  =item *
  
  The escaping (percent encoding) of chars in the 128 .. 255 range passed to the
  URI constructor or when setting URI parts using the accessor methods depend on
  the state of the internal UTF8 flag (see utf8::is_utf8) of the string passed.
  If the UTF8 flag is set the UTF-8 encoded version of the character is percent
  encoded.  If the UTF8 flag isn't set the Latin-1 version (byte) of the
  character is percent encoded.  This basically exposes the internal encoding of
  Perl strings.
  
  =back
  
  =head1 PARSING URIs WITH REGEXP
  
  As an alternative to this module, the following (official) regular
  expression can be used to decode a URI:
  
    my($scheme, $authority, $path, $query, $fragment) =
    $uri =~ m|(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?|;
  
  The C<URI::Split> module provides the function uri_split() as a
  readable alternative.
  
  =head1 SEE ALSO
  
  L<URI::file>, L<URI::WithBase>, L<URI::QueryParam>, L<URI::Escape>,
  L<URI::Split>, L<URI::Heuristic>
  
  RFC 2396: "Uniform Resource Identifiers (URI): Generic Syntax",
  Berners-Lee, Fielding, Masinter, August 1998.
  
  L<http://www.iana.org/assignments/uri-schemes>
  
  L<http://www.iana.org/assignments/urn-namespaces>
  
  L<http://www.w3.org/Addressing/>
  
  =head1 COPYRIGHT
  
  Copyright 1995-2009 Gisle Aas.
  
  Copyright 1995 Martijn Koster.
  
  This program is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself.
  
  =head1 AUTHORS / ACKNOWLEDGMENTS
  
  This module is based on the C<URI::URL> module, which in turn was
  (distantly) based on the C<wwwurl.pl> code in the libwww-perl for
  perl4 developed by Roy Fielding, as part of the Arcadia project at the
  University of California, Irvine, with contributions from Brooks
  Cutter.
  
  C<URI::URL> was developed by Gisle Aas, Tim Bunce, Roy Fielding and
  Martijn Koster with input from other people on the libwww-perl mailing
  list.
  
  C<URI> and related subclasses was developed by Gisle Aas.
  
  =cut
URI

    $main::fatpacked{"URI/Escape.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_ESCAPE';
  package URI::Escape;
  
  use strict;
  use warnings;
  
  =head1 NAME
  
  URI::Escape - Percent-encode and percent-decode unsafe characters
  
  =head1 SYNOPSIS
  
   use URI::Escape;
   $safe = uri_escape("10% is enough\n");
   $verysafe = uri_escape("foo", "\0-\377");
   $str  = uri_unescape($safe);
  
  =head1 DESCRIPTION
  
  This module provides functions to percent-encode and percent-decode URI strings as
  defined by RFC 3986. Percent-encoding URI's is informally called "URI escaping".
  This is the terminology used by this module, which predates the formalization of the
  terms by the RFC by several years.
  
  A URI consists of a restricted set of characters.  The restricted set
  of characters consists of digits, letters, and a few graphic symbols
  chosen from those common to most of the character encodings and input
  facilities available to Internet users.  They are made up of the
  "unreserved" and "reserved" character sets as defined in RFC 3986.
  
     unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
     reserved      = ":" / "/" / "?" / "#" / "[" / "]" / "@"
                     "!" / "$" / "&" / "'" / "(" / ")"
                   / "*" / "+" / "," / ";" / "="
  
  In addition, any byte (octet) can be represented in a URI by an escape
  sequence: a triplet consisting of the character "%" followed by two
  hexadecimal digits.  A byte can also be represented directly by a
  character, using the US-ASCII character for that octet.
  
  Some of the characters are I<reserved> for use as delimiters or as
  part of certain URI components.  These must be escaped if they are to
  be treated as ordinary data.  Read RFC 3986 for further details.
  
  The functions provided (and exported by default) from this module are:
  
  =over 4
  
  =item uri_escape( $string )
  
  =item uri_escape( $string, $unsafe )
  
  Replaces each unsafe character in the $string with the corresponding
  escape sequence and returns the result.  The $string argument should
  be a string of bytes.  The uri_escape() function will croak if given a
  characters with code above 255.  Use uri_escape_utf8() if you know you
  have such chars or/and want chars in the 128 .. 255 range treated as
  UTF-8.
  
  The uri_escape() function takes an optional second argument that
  overrides the set of characters that are to be escaped.  The set is
  specified as a string that can be used in a regular expression
  character class (between [ ]).  E.g.:
  
    "\x00-\x1f\x7f-\xff"          # all control and hi-bit characters
    "a-z"                         # all lower case characters
    "^A-Za-z"                     # everything not a letter
  
  The default set of characters to be escaped is all those which are
  I<not> part of the C<unreserved> character class shown above as well
  as the reserved characters.  I.e. the default is:
  
      "^A-Za-z0-9\-\._~"
  
  =item uri_escape_utf8( $string )
  
  =item uri_escape_utf8( $string, $unsafe )
  
  Works like uri_escape(), but will encode chars as UTF-8 before
  escaping them.  This makes this function able to deal with characters
  with code above 255 in $string.  Note that chars in the 128 .. 255
  range will be escaped differently by this function compared to what
  uri_escape() would.  For chars in the 0 .. 127 range there is no
  difference.
  
  Equivalent to:
  
      utf8::encode($string);
      my $uri = uri_escape($string);
  
  Note: JavaScript has a function called escape() that produces the
  sequence "%uXXXX" for chars in the 256 .. 65535 range.  This function
  has really nothing to do with URI escaping but some folks got confused
  since it "does the right thing" in the 0 .. 255 range.  Because of
  this you sometimes see "URIs" with these kind of escapes.  The
  JavaScript encodeURIComponent() function is similar to uri_escape_utf8().
  
  =item uri_unescape($string,...)
  
  Returns a string with each %XX sequence replaced with the actual byte
  (octet).
  
  This does the same as:
  
     $string =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
  
  but does not modify the string in-place as this RE would.  Using the
  uri_unescape() function instead of the RE might make the code look
  cleaner and is a few characters less to type.
  
  In a simple benchmark test I did,
  calling the function (instead of the inline RE above) if a few chars
  were unescaped was something like 40% slower, and something like 700% slower if none were.  If
  you are going to unescape a lot of times it might be a good idea to
  inline the RE.
  
  If the uri_unescape() function is passed multiple strings, then each
  one is returned unescaped.
  
  =back
  
  The module can also export the C<%escapes> hash, which contains the
  mapping from all 256 bytes to the corresponding escape codes.  Lookup
  in this hash is faster than evaluating C<sprintf("%%%02X", ord($byte))>
  each time.
  
  =head1 SEE ALSO
  
  L<URI>
  
  
  =head1 COPYRIGHT
  
  Copyright 1995-2004 Gisle Aas.
  
  This program is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself.
  
  =cut
  
  use Exporter 5.57 'import';
  our %escapes;
  our @EXPORT = qw(uri_escape uri_unescape uri_escape_utf8);
  our @EXPORT_OK = qw(%escapes);
  our $VERSION = "3.31";
  
  use Carp ();
  
  # Build a char->hex map
  for (0..255) {
      $escapes{chr($_)} = sprintf("%%%02X", $_);
  }
  
  my %subst;  # compiled patterns
  
  my %Unsafe = (
      RFC2732 => qr/[^A-Za-z0-9\-_.!~*'()]/,
      RFC3986 => qr/[^A-Za-z0-9\-\._~]/,
  );
  
  sub uri_escape {
      my($text, $patn) = @_;
      return undef unless defined $text;
      if (defined $patn){
          unless (exists  $subst{$patn}) {
              # Because we can't compile the regex we fake it with a cached sub
              (my $tmp = $patn) =~ s,/,\\/,g;
              eval "\$subst{\$patn} = sub {\$_[0] =~ s/([$tmp])/\$escapes{\$1} || _fail_hi(\$1)/ge; }";
              Carp::croak("uri_escape: $@") if $@;
          }
          &{$subst{$patn}}($text);
      } else {
          $text =~ s/($Unsafe{RFC3986})/$escapes{$1} || _fail_hi($1)/ge;
      }
      $text;
  }
  
  sub _fail_hi {
      my $chr = shift;
      Carp::croak(sprintf "Can't escape \\x{%04X}, try uri_escape_utf8() instead", ord($chr));
  }
  
  sub uri_escape_utf8 {
      my $text = shift;
      utf8::encode($text);
      return uri_escape($text, @_);
  }
  
  sub uri_unescape {
      # Note from RFC1630:  "Sequences which start with a percent sign
      # but are not followed by two hexadecimal characters are reserved
      # for future extension"
      my $str = shift;
      if (@_ && wantarray) {
          # not executed for the common case of a single argument
          my @str = ($str, @_);  # need to copy
          for (@str) {
              s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
          }
          return @str;
      }
      $str =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg if defined $str;
      $str;
  }
  
  # XXX FIXME escape_char is buggy as it assigns meaning to the string's storage format.
  sub escape_char {
      # Old versions of utf8::is_utf8() didn't properly handle magical vars (e.g. $1).
      # The following forces a fetch to occur beforehand.
      my $dummy = substr($_[0], 0, 0);
  
      if (utf8::is_utf8($_[0])) {
          my $s = shift;
          utf8::encode($s);
          unshift(@_, $s);
      }
  
      return join '', @URI::Escape::escapes{split //, $_[0]};
  }
  
  1;
URI_ESCAPE

    $main::fatpacked{"URI/Find.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_FIND';
  package URI::Find;
  
  require 5.006;
  
  use strict;
  use warnings;
  use base qw(Exporter);
  use vars qw($VERSION @EXPORT);
  
  $VERSION        = 20160806;
  @EXPORT         = qw(find_uris);
  
  use constant YES => (1==1);
  use constant NO  => !YES;
  
  use Carp        qw(croak);
  
  require URI;
  
  my $reserved   = q(;/?:@&=+$,[]);
  my $mark       = q(-_.!~*'());
  my $unreserved = "A-Za-z0-9\Q$mark\E";
  my $uric       = quotemeta($reserved) . '\p{isAlpha}' . $unreserved . "%";
  
  # URI scheme pattern without the non-alpha numerics.
  # Those are extremely uncommon and interfere with the match.
  my($schemeRe) = qr/[a-zA-Z][a-zA-Z0-9\+]*/;
  my($uricSet)  = $uric; # use new set
  
  # Some schemes which URI.pm does not explicitly support.
  my $extraSchemesRe = qr{^(?:git|svn|ssh|svn\+ssh)$};
  
  # We need to avoid picking up 'HTTP::Request::Common' so we have a
  # subset of uric without a colon ("I have no colon and yet I must poop")
  my($uricCheat) = __PACKAGE__->uric_set;
  $uricCheat =~ tr/://d;
  
  # Identifying characters accidentally picked up with a URI.
  my($cruftSet) = q{])\},.'";}; #'#
  
  
  =head1 NAME
  
  URI::Find - Find URIs in arbitrary text
  
  =head1 SYNOPSIS
  
    require URI::Find;
  
    my $finder = URI::Find->new(\&callback);
  
    $how_many_found = $finder->find(\$text);
  
  =head1 DESCRIPTION
  
  This module does one thing: Finds URIs and URLs in plain text.  It
  finds them quickly and it finds them B<all> (or what URI.pm considers
  a URI to be.)  It only finds URIs which include a scheme (http:// or
  the like), for something a bit less strict have a look at
  L<URI::Find::Schemeless|URI::Find::Schemeless>.
  
  For a command-line interface, L<urifind> is provided.
  
  =head2 Public Methods
  
  =over 4
  
  =item B<new>
  
    my $finder = URI::Find->new(\&callback);
  
  Creates a new URI::Find object.
  
  &callback is a function which is called on each URI found.  It is
  passed two arguments, the first is a URI object representing the URI
  found.  The second is the original text of the URI found.  The return
  value of the callback will replace the original URI in the text.
  
  =cut
  
  sub new {
      @_ == 2 || __PACKAGE__->badinvo;
      my($proto, $callback) = @_;
      my($class) = ref $proto || $proto;
      my $self = bless {}, $class;
  
      $self->{callback} = $callback;
  
      return $self;
  }
  
  =item B<find>
  
    my $how_many_found = $finder->find(\$text);
  
  $text is a string to search and possibly modify with your callback.
  
  Alternatively, C<find> can be called with a replacement function for
  the rest of the text:
  
    use CGI qw(escapeHTML);
    # ...
    my $how_many_found = $finder->find(\$text, \&escapeHTML);
  
  will not only call the callback function for every URL found (and
  perform the replacement instructions therein), but also run the rest
  of the text through C<escapeHTML()>. This makes it easier to turn
  plain text which contains URLs into HTML (see example below).
  
  =cut
  
  sub find {
      @_ == 2 || @_ == 3 || __PACKAGE__->badinvo;
      my($self, $r_text, $escape_func) = @_;
  
      # Might be slower, but it makes the code simpler
      $escape_func ||= sub { return $_[0] };
  
      # Store the escape func in the object temporarily for use
      # by other methods.
      local $self->{escape_func} = $escape_func;
  
      $self->{_uris_found} = 0;
  
      # Yes, evil.  Basically, look for something vaguely resembling a URL,
      # then hand it off to URI for examination.  If it passes, throw
      # it to a callback and put the result in its place.
      local $SIG{__DIE__} = 'DEFAULT';
      my $uri_cand;
      my $uri;
  
      my $uriRe = sprintf '(?:%s|%s)', $self->uri_re, $self->schemeless_uri_re;
  
      $$r_text =~ s{ (.*?) (?:(<(?:URL:)?)(.+?)(>)|($uriRe)) | (.+?)$ }{
          my $replace = '';
          if( defined $6 ) {
              $replace = $escape_func->($6);
          }
          else {
              my $maybe_uri = '';
  
              $replace = $escape_func->($1) if length $1;
  
              if( defined $2 ) {
                  $maybe_uri = $3;
                  my $is_uri = do {  # Don't alter $1...
                      $maybe_uri =~ s/\s+//g;
                      $maybe_uri =~ /^$uriRe/;
                  };
  
                  if( $is_uri ) {
                      $replace .= $escape_func->($2);
                      $replace .= $self->_uri_filter($maybe_uri);
                      $replace .= $escape_func->($4);
                  }
                  else {
                      # the whole text inside of the <...> was not a url, but
                      # maybe it has a url (like an HTML <a> link)
                      my $has_uri = do { # Don't alter $1...
                          $maybe_uri = $3;
                          $maybe_uri =~ /$uriRe/;
                      };
                      if( $has_uri ) {
                          my $pre = $2;
                          my $post = $4;
                          do { $self->find(\$maybe_uri, $escape_func) };
                          $replace .= $escape_func->($pre);
                          $replace .= $maybe_uri;  # already escaped by find()
                          $replace .= $escape_func->($post);
                      }
                      else {
                          $replace .= $escape_func->($2.$3.$4);
                      }
                  }
              }
              else {
                  $replace .= $self->_uri_filter($5);
              }
          }
  
          $replace;
      }gsex;
  
      return $self->{_uris_found};
  }
  
  
  sub _uri_filter {
      my($self, $orig_match) = @_;
  
      # A heuristic.  Often you'll see things like:
      # "I saw this site, http://www.foo.com, and its really neat!"
      # or "Foo Industries (at http://www.foo.com)"
      # We want to avoid picking up the trailing paren, period or comma.
      # Of course, this might wreck a perfectly valid URI, more often than
      # not it corrects a parse mistake.
      $orig_match = $self->decruft($orig_match);
  
      my $replacement = '';
      if( my $uri = $self->_is_uri(\$orig_match) ) {
          # It's a URI
          $self->{_uris_found}++;
          $replacement = $self->{callback}->($uri, $orig_match);
      }
      else {
          # False alarm
          $replacement = $self->{escape_func}->($orig_match);
      }
  
      # Return recrufted replacement
      return $self->recruft($replacement);
  }
  
  
  =back
  
  =head2 Protected Methods
  
  I got a bunch of mail from people asking if I'd add certain features
  to URI::Find.  Most wanted the search to be less restrictive, do more
  heuristics, etc...  Since many of the requests were contradictory, I'm
  letting people create their own custom subclasses to do what they
  want.
  
  The following are methods internal to URI::Find which a subclass can
  override to change the way URI::Find acts.  They are only to be called
  B<inside> a URI::Find subclass.  Users of this module are NOT to use
  these methods.
  
  =over
  
  =item B<uri_re>
  
    my $uri_re = $self->uri_re;
  
  Returns the regex for finding absolute, schemed URIs
  (http://www.foo.com and such).  This, combined with
  schemeless_uri_re() is what finds candidate URIs.
  
  Usually this method does not have to be overridden.
  
  =cut
  
  sub uri_re {
      @_ == 1 || __PACKAGE__->badinvo;
      my($self) = shift;
      return sprintf '%s:[%s][%s#]*', $schemeRe,
                                      $uricCheat,
                                      $self->uric_set;
  }
  
  =item B<schemeless_uri_re>
  
    my $schemeless_re = $self->schemeless_uri_re;
  
  Returns the regex for finding schemeless URIs (www.foo.com and such) and
  other things which might be URIs.  By default this will match nothing
  (though it used to try to find schemeless URIs which started with C<www>
  and C<ftp>).
  
  Many people will want to override this method.  See L<URI::Find::Schemeless>
  for a subclass does a reasonable job of finding URIs which might be missing
  the scheme.
  
  =cut
  
  sub schemeless_uri_re {
      @_ == 1 || __PACKAGE__->badinvo;
      my($self) = shift;
      return qr/\b\B/; # match nothing
  }
  
  =item B<uric_set>
  
    my $uric_set = $self->uric_set;
  
  Returns a set matching the 'uric' set defined in RFC 2396 suitable for
  putting into a character set ([]) in a regex.
  
  You almost never have to override this.
  
  =cut
  
  sub uric_set {
      @_ == 1 || __PACKAGE__->badinvo;
      return $uricSet;
  }
  
  =item B<cruft_set>
  
    my $cruft_set = $self->cruft_set;
  
  Returns a set of characters which are considered garbage.  Used by
  decruft().
  
  =cut
  
  sub cruft_set {
      @_ == 1 || __PACKAGE__->badinvo;
      return $cruftSet;
  }
  
  =item B<decruft>
  
    my $uri = $self->decruft($uri);
  
  Sometimes garbage characters like periods and parenthesis get
  accidentally matched along with the URI.  In order for the URI to be
  properly identified, it must sometimes be "decrufted", the garbage
  characters stripped.
  
  This method takes a candidate URI and strips off any cruft it finds.
  
  =cut
  
  my %balanced_cruft = (
      '('         => ')',
      '{'         => '}',
      '['         => ']',
      '"'         => '"',
      q[']        => q['],
  );
  
  sub decruft {
      @_ == 2 || __PACKAGE__->badinvo;
      my($self, $orig_match) = @_;
  
      $self->{start_cruft} = '';
      $self->{end_cruft} = '';
  
      if( $orig_match =~ s/([\Q$cruftSet\E]+)$// ) {
          # urls can end with HTML entities if found in HTML so let's put back semicolons
          # if this looks like the case
          my $cruft = $1;
          if( $cruft =~ /^;/ && $orig_match =~ /\&(\#[1-9]\d{1,3}|[a-zA-Z]{2,8})$/) {
              $orig_match .= ';';
              $cruft =~ s/^;//;
          }
  
          while( my($open, $close) = each %balanced_cruft ) {
              $self->recruft_balanced(\$orig_match, \$cruft, $open, $close);
          }
  
          $self->{end_cruft} = $cruft if $cruft;
      }
  
      return $orig_match;
  }
  
  
  sub recruft_balanced {
      my $self = shift;
      my($orig_match, $cruft, $open, $close) = @_;
  
      my $open_count  = () = $$orig_match =~ m{\Q$open}g;
      my $close_count = () = $$orig_match =~ m{\Q$close}g;
  
      if ( $$cruft =~ /\Q$close\E$/ && $open_count == ( $close_count + 1 ) ) {
          $$orig_match .= $close;
          $$cruft =~ s/\Q$close\E$//;
      }
  
      return;
  }
  
  
  =item B<recruft>
  
    my $uri = $self->recruft($uri);
  
  This method puts back the cruft taken off with decruft().  This is necessary
  because the cruft is destructively removed from the string before invoking
  the user's callback, so it has to be put back afterwards.
  
  =cut
  
  #'#
  
  sub recruft {
      @_ == 2 || __PACKAGE__->badinvo;
      my($self, $uri) = @_;
  
      return $self->{start_cruft} . $uri . $self->{end_cruft};
  }
  
  =item B<schemeless_to_schemed>
  
    my $schemed_uri = $self->schemeless_to_schemed($schemeless_uri);
  
  This takes a schemeless URI and returns an absolute, schemed URI.  The
  standard implementation supplies ftp:// for URIs which start with ftp.,
  and http:// otherwise.
  
  =cut
  
  sub schemeless_to_schemed {
      @_ == 2 || __PACKAGE__->badinvo;
      my($self, $uri_cand) = @_;
  
      $uri_cand =~ s|^(<?)ftp\.|$1ftp://ftp\.|
          or $uri_cand =~ s|^(<?)|${1}http://|;
  
      return $uri_cand;
  }
  
  =item B<is_schemed>
  
    $obj->is_schemed($uri);
  
  Returns whether or not the given URI is schemed or schemeless.  True for
  schemed, false for schemeless.
  
  =cut
  
  sub is_schemed {
      @_ == 2 || __PACKAGE__->badinvo;
      my($self, $uri) = @_;
      return scalar $uri =~ /^<?$schemeRe:/;
  }
  
  =item I<badinvo>
  
    __PACKAGE__->badinvo($extra_levels, $msg)
  
  This is used to complain about bogus subroutine/method invocations.
  The args are optional.
  
  =cut
  
  sub badinvo {
      my $package = shift;
      my $level   = @_ ? shift : 0;
      my $msg     = @_ ? " (" . shift() . ")" : '';
      my $subname = (caller $level + 1)[3];
      croak "Bogus invocation of $subname$msg";
  }
  
  =back
  
  =head2 Old Functions
  
  The old find_uri() function is still around and it works, but its
  deprecated.
  
  =cut
  
  # Old interface.
  sub find_uris (\$&) {
      @_ == 2 || __PACKAGE__->badinvo;
      my($r_text, $callback) = @_;
  
      my $self = __PACKAGE__->new($callback);
      return $self->find($r_text);
  }
  
  
  =head1 EXAMPLES
  
  Store a list of all URIs (normalized) in the document.
  
    my @uris;
    my $finder = URI::Find->new(sub {
        my($uri) = shift;
        push @uris, $uri;
    });
    $finder->find(\$text);
  
  Print the original URI text found and the normalized representation.
  
    my $finder = URI::Find->new(sub {
        my($uri, $orig_uri) = @_;
        print "The text '$orig_uri' represents '$uri'\n";
        return $orig_uri;
    });
    $finder->find(\$text);
  
  Check each URI in document to see if it exists.
  
    use LWP::Simple;
  
    my $finder = URI::Find->new(sub {
        my($uri, $orig_uri) = @_;
        if( head $uri ) {
            print "$orig_uri is okay\n";
        }
        else {
            print "$orig_uri cannot be found\n";
        }
        return $orig_uri;
    });
    $finder->find(\$text);
  
  
  Turn plain text into HTML, with each URI found wrapped in an HTML anchor.
  
    use CGI qw(escapeHTML);
    use URI::Find;
  
    my $finder = URI::Find->new(sub {
        my($uri, $orig_uri) = @_;
        return qq|<a href="$uri">$orig_uri</a>|;
    });
    $finder->find(\$text, \&escapeHTML);
    print "<pre>$text</pre>";
  
  =cut
  
  
  sub _is_uri {
      @_ == 2 || __PACKAGE__->badinvo;
      my($self, $r_uri_cand) = @_;
  
      my $uri = $$r_uri_cand;
  
      # Translate schemeless to schemed if necessary.
      $uri = $self->schemeless_to_schemed($uri) if
        $uri =~ $self->schemeless_uri_re   and
        $uri !~ /^<?$schemeRe:/;
  
      eval {
          $uri = URI->new($uri);
  
          # Throw out anything with an invalid scheme.
          my $has_invalid_scheme = $uri->isa("URI::_foreign") &&
                                   $uri->scheme !~ $extraSchemesRe;
  
          # Toss out things like http:// but keep file:///
          my $is_empty = $uri =~ m{^$schemeRe://$};
  
          undef $uri if $has_invalid_scheme || $is_empty;
      };
  
      if($@ || !defined $uri) {   # leave everything untouched, its not a URI.
          return NO;
      }
      else {                      # Its a URI.
          return $uri;
      }
  }
  
  
  =head1 NOTES
  
  Will not find URLs with Internationalized Domain Names or pretty much
  any non-ascii stuff in them.  See
  L<http://rt.cpan.org/Ticket/Display.html?id=44226>
  
  
  =head1 AUTHOR
  
  Michael G Schwern <schwern@pobox.com> with insight from Uri Gutman,
  Greg Bacon, Jeff Pinyan, Roderick Schertler and others.
  
  Roderick Schertler <roderick@argon.org> maintained versions 0.11 to 0.16.
  
  Darren Chamberlain wrote urifind.
  
  
  =head1 LICENSE
  
  Copyright 2000, 2009-2010, 2014, 2016 by Michael G Schwern E<lt>schwern@pobox.comE<gt>.
  
  This program is free software; you can redistribute it and/or 
  modify it under the same terms as Perl itself.
  
  See F<http://www.perlfoundation.org/artistic_license_1_0>
  
  =head1 SEE ALSO
  
  L<urifind>, L<URI::Find::Schemeless>, L<URI>, RFC 3986 Appendix C
  
  =cut
  
  1;
URI_FIND

    $main::fatpacked{"URI/Find/Schemeless.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_FIND_SCHEMELESS';
  # Copyright (c) 2000, 2009 Michael G. Schwern.  All rights reserved.
  # This program is free software; you can redistribute it and/or modify
  # it under the same terms as Perl itself.
  
  package URI::Find::Schemeless;
  
  use strict;
  use warnings;
  use base qw(URI::Find);
  
  # base.pm error in 5.005_03 prevents it from loading URI::Find if I'm
  # required first.
  use URI::Find ();
  
  use vars qw($VERSION);
  $VERSION = 20160806;
  
  my($dnsSet) = '\p{isAlpha}A-Za-z0-9-'; # extended for IDNA domains
  
  my($cruftSet) = __PACKAGE__->cruft_set . '<>?}';
  
  my($tldRe) = __PACKAGE__->top_level_domain_re;
  
  my($uricSet) = __PACKAGE__->uric_set;
  
  =head1 NAME
  
  URI::Find::Schemeless - Find schemeless URIs in arbitrary text.
  
  
  =head1 SYNOPSIS
  
    require URI::Find::Schemeless;
  
    my $finder = URI::Find::Schemeless->new(\&callback);
  
    The rest is the same as URI::Find.
  
  
  =head1 DESCRIPTION
  
  URI::Find finds absolute URIs in plain text with some weak heuristics
  for finding schemeless URIs.  This subclass is for finding things
  which might be URIs in free text.  Things like "www.foo.com" and
  "lifes.a.bitch.if.you.aint.got.net".
  
  The heuristics are such that it hopefully finds a minimum of false
  positives, but there's no easy way for it know if "COMMAND.COM" refers
  to a web site or a file.
  
  =cut
  
  sub schemeless_uri_re {
      @_ == 1 || __PACKAGE__->badinvo;
      return qr{
                # Originally I constrained what couldn't be before the match
                # like this:  don't match email addresses, and don't start
                # anywhere but at the beginning of a host name
                #    (?<![\@.$dnsSet])
                # but I switched to saying what can be there after seeing a
                # false match of "Lite.pm" via "MIME/Lite.pm".
                (?: ^ | (?<=[\s<>()\{\}\[\]]) )
                # hostname
                (?: [$dnsSet]+(?:\.[$dnsSet]+)*\.$tldRe
                    | (?:\d{1,3}\.){3}\d{1,3} ) # not inet_aton() complete
                (?:
                    (?=[\s\Q$cruftSet\E]) # followed by unrelated thing
                    (?!\.\w)              #   but don't stop mid foo.xx.bar
                        (?<!\.p[ml])      #   but exclude Foo.pm and Foo.pl
                    |$                    # or end of line
                        (?<!\.p[ml])      #   but exclude Foo.pm and Foo.pl
                    |/[$uricSet#]*        # or slash and URI chars
                )
             }x;
  }
  
  =head3 top_level_domain_re
  
    my $tld_re = $self->top_level_domain_re;
  
  Returns the regex for matching top level DNS domains.  The regex shouldn't
  be anchored, it shouldn't do any capturing matches, and it should make
  itself ignore case.
  
  =cut
  
  sub top_level_domain_re {
      @_ == 1 || __PACKAGE__->badinvo;
      my($self) = shift;
  
      use utf8;
      # Updated from http://www.iana.org/domains/root/db/ with new TLDs
      my $plain = join '|', qw(
          AERO
          ARPA
          ASIA
          BIZ
          CAT
          COM
          COOP
          EDU
          GOV
          INFO
          INT
          JOBS
          MIL
          MOBI
          MUSEUM
          NAME
          NET
          ORG
          PRO
          TEL
          TRAVEL
          ac
          academy
          accountants
          active
          actor
          ad
          ae
          aero
          af
          ag
          agency
          ai
          airforce
          al
          am
          an
          ao
          aq
          ar
          archi
          army
          arpa
          as
          asia
          associates
          at
          attorney
          au
          audio
          autos
          aw
          ax
          axa
          az
          ba
          bar
          bargains
          bayern
          bb
          bd
          be
          beer
          berlin
          best
          bf
          bg
          bh
          bi
          bid
          bike
          bio
          biz
          bj
          bl
          black
          blackfriday
          blue
          bm
          bmw
          bn
          bo
          boutique
          bq
          br
          brussels
          bs
          bt
          build
          builders
          buzz
          bv
          bw
          by
          bz
          bzh
          ca
          cab
          camera
          camp
          capetown
          capital
          cards
          care
          career
          careers
          cash
          cat
          catering
          cc
          cd
          center
          ceo
          cf
          cg
          ch
          cheap
          christmas
          church
          ci
          citic
          ck
          cl
          claims
          cleaning
          clinic
          clothing
          club
          cm
          cn
          co
          codes
          coffee
          college
          cologne
          com
          community
          company
          computer
          condos
          construction
          consulting
          contractors
          cooking
          cool
          coop
          country
          cr
          credit
          creditcard
          cruises
          cu
          cv
          cw
          cx
          cy
          cz
          dance
          dating
          de
          degree
          democrat
          dental
          dentist
          desi
          diamonds
          digital
          directory
          discount
          dj
          dk
          dm
          dnp
          do
          domains
          durban
          dz
          ec
          edu
          education
          ee
          eg
          eh
          email
          engineer
          engineering
          enterprises
          equipment
          er
          es
          estate
          et
          eu
          eus
          events
          exchange
          expert
          exposed
          fail
          farm
          feedback
          fi
          finance
          financial
          fish
          fishing
          fitness
          fj
          fk
          flights
          florist
          fm
          fo
          foo
          foundation
          fr
          frogans
          fund
          furniture
          futbol
          ga
          gal
          gallery
          gb
          gd
          ge
          gf
          gg
          gh
          gi
          gift
          gives
          gl
          glass
          global
          globo
          gm
          gmo
          gn
          gop
          gov
          gp
          gq
          gr
          graphics
          gratis
          green
          gripe
          gs
          gt
          gu
          guide
          guitars
          guru
          gw
          gy
          hamburg
          haus
          hiphop
          hiv
          hk
          hm
          hn
          holdings
          holiday
          homes
          horse
          host
          house
          hr
          ht
          hu
          id
          ie
          il
          im
          immobilien
          in
          industries
          info
          ink
          institute
          insure
          int
          international
          investments
          io
          iq
          ir
          is
          it
          je
          jetzt
          jm
          jo
          jobs
          joburg
          jp
          juegos
          kaufen
          ke
          kg
          kh
          ki
          kim
          kitchen
          kiwi
          km
          kn
          koeln
          kp
          kr
          kred
          kw
          ky
          kz
          la
          land
          lawyer
          lb
          lc
          lease
          li
          life
          lighting
          limited
          limo
          link
          lk
          loans
          london
          lotto
          lr
          ls
          lt
          lu
          luxe
          luxury
          lv
          ly
          ma
          maison
          management
          mango
          market
          marketing
          mc
          md
          me
          media
          meet
          menu
          mf
          mg
          mh
          miami
          mil
          mini
          mk
          ml
          mm
          mn
          mo
          mobi
          moda
          moe
          monash
          mortgage
          moscow
          motorcycles
          mp
          mq
          mr
          ms
          mt
          mu
          museum
          mv
          mw
          mx
          my
          mz
          na
          nagoya
          name
          navy
          nc
          ne
          net
          neustar
          nf
          ng
          nhk
          ni
          ninja
          nl
          no
          np
          nr
          nu
          nyc
          nz
          okinawa
          om
          onl
          org
          organic
          ovh
          pa
          paris
          partners
          parts
          pe
          pf
          pg
          ph
          photo
          photography
          photos
          physio
          pics
          pictures
          pink
          pk
          pl
          plumbing
          pm
          pn
          post
          pr
          press
          pro
          productions
          properties
          ps
          pt
          pub
          pw
          py
          qa
          qpon
          quebec
          re
          recipes
          red
          rehab
          reise
          reisen
          ren
          rentals
          repair
          report
          republican
          rest
          reviews
          rich
          rio
          ro
          rocks
          rodeo
          rs
          ru
          ruhr
          rw
          ryukyu
          sa
          saarland
          sb
          sc
          schule
          scot
          sd
          se
          services
          sexy
          sg
          sh
          shiksha
          shoes
          si
          singles
          sj
          sk
          sl
          sm
          sn
          so
          social
          software
          sohu
          solar
          solutions
          soy
          space
          sr
          ss
          st
          su
          supplies
          supply
          support
          surf
          surgery
          sv
          sx
          sy
          systems
          sz
          tattoo
          tax
          tc
          td
          technology
          tel
          tf
          tg
          th
          tienda
          tips
          tirol
          tj
          tk
          tl
          tm
          tn
          to
          today
          tokyo
          tools
          town
          toys
          tp
          tr
          trade
          training
          travel
          tt
          tv
          tw
          tz
          ua
          ug
          uk
          um
          university
          uno
          us
          uy
          uz
          va
          vacations
          vc
          ve
          vegas
          ventures
          versicherung
          vet
          vg
          vi
          viajes
          villas
          vision
          vlaanderen
          vn
          vodka
          vote
          voting
          voto
          voyage
          vu
          wang
          watch
          webcam
          website
          wed
          wf
          wien
          wiki
          works
          ws
          wtc
          wtf
          测试
             परीक्षा
          集团
          在线
          한국
           ভারত
          موقع
           বাংলা
          公益
          公司
          移动
          我爱你
          москва
          испытание
          қаз
          онлайн
          сайт
          срб
          테스트
          орг
          삼성
            சிங்கப்பூர்
          商标
          商城
          дети
          мкд
          טעסט
          中文网
          中信
          中国
          中國
                       భారత్
                 ලංකා
          測試
                  ભારત
             भारत
          آزمایشی
             பரிட்சை
             संगठन
          网络
          укр
          香港
          δοκιμή
          إختبار
          台湾
          台灣
          мон
          الجزائر
          عمان
          ایران
          امارات
          بازار
          پاکستان
          الاردن
          بھارت
          المغرب
          السعودية
          سودان
          مليسيا
          شبكة
          გე
          机构
          组织机构
                       ไทย
          سورية
          рф
          تونس
          みんな
          世界
                       ਭਾਰਤ
          网址
          游戏
          مصر
          قطر
            இலங்கை
            இந்தியா
          新加坡
          فلسطين
          テスト
          政务
          xxx
          xyz
          yachts
          ye
          yokohama
          yt
          za
          zm
          zone
          zw
      );
      
      return qr/(?:$plain)/i;
  }
  
  =head1 AUTHOR
  
  Original code by Roderick Schertler <roderick@argon.org>, adapted by
  Michael G Schwern <schwern@pobox.com>.
  
  Currently maintained by Roderick Schertler <roderick@argon.org>.
  
  =head1 SEE ALSO
  
    L<URI::Find>
  
  =cut
  
  1;
URI_FIND_SCHEMELESS

    $main::fatpacked{"URI/Heuristic.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_HEURISTIC';
  package URI::Heuristic;
  
  =head1 NAME
  
  URI::Heuristic - Expand URI using heuristics
  
  =head1 SYNOPSIS
  
   use URI::Heuristic qw(uf_uristr);
   $u = uf_uristr("perl");             # http://www.perl.com
   $u = uf_uristr("www.sol.no/sol");   # http://www.sol.no/sol
   $u = uf_uristr("aas");              # http://www.aas.no
   $u = uf_uristr("ftp.funet.fi");     # ftp://ftp.funet.fi
   $u = uf_uristr("/etc/passwd");      # file:/etc/passwd
  
  =head1 DESCRIPTION
  
  This module provides functions that expand strings into real absolute
  URIs using some built-in heuristics.  Strings that already represent
  absolute URIs (i.e. that start with a C<scheme:> part) are never modified
  and are returned unchanged.  The main use of these functions is to
  allow abbreviated URIs similar to what many web browsers allow for URIs
  typed in by the user.
  
  The following functions are provided:
  
  =over 4
  
  =item uf_uristr($str)
  
  Tries to make the argument string
  into a proper absolute URI string.  The "uf_" prefix stands for "User 
  Friendly".  Under MacOS, it assumes that any string with a common URL 
  scheme (http, ftp, etc.) is a URL rather than a local path.  So don't name 
  your volumes after common URL schemes and expect uf_uristr() to construct 
  valid file: URL's on those volumes for you, because it won't.
  
  =item uf_uri($str)
  
  Works the same way as uf_uristr() but
  returns a C<URI> object.
  
  =back
  
  =head1 ENVIRONMENT
  
  If the hostname portion of a URI does not contain any dots, then
  certain qualified guesses are made.  These guesses are governed by
  the following environment variables:
  
  =over 10
  
  =item COUNTRY
  
  The two-letter country code (ISO 3166) for your location.  If
  the domain name of your host ends with two letters, then it is taken
  to be the default country. See also L<Locale::Country>.
  
  =item HTTP_ACCEPT_LANGUAGE, LC_ALL, LANG
  
  If COUNTRY is not set, these standard environment variables are
  examined and country (not language) information possibly found in them
  is used as the default country.
  
  =item URL_GUESS_PATTERN
  
  Contains a space-separated list of URL patterns to try.  The string
  "ACME" is for some reason used as a placeholder for the host name in
  the URL provided.  Example:
  
   URL_GUESS_PATTERN="www.ACME.no www.ACME.se www.ACME.com"
   export URL_GUESS_PATTERN
  
  Specifying URL_GUESS_PATTERN disables any guessing rules based on
  country.  An empty URL_GUESS_PATTERN disables any guessing that
  involves host name lookups.
  
  =back
  
  =head1 COPYRIGHT
  
  Copyright 1997-1998, Gisle Aas
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =cut
  
  use strict;
  use warnings;
  
  use Exporter 5.57 'import';
  our @EXPORT_OK = qw(uf_uri uf_uristr uf_url uf_urlstr);
  our $VERSION = "4.20";
  
  our ($MY_COUNTRY, $DEBUG);
  
  sub MY_COUNTRY() {
      for ($MY_COUNTRY) {
  	return $_ if defined;
  
  	# First try the environment.
  	$_ = $ENV{COUNTRY};
  	return $_ if defined;
  
  	# Try the country part of LC_ALL and LANG from environment
  	my @srcs = ($ENV{LC_ALL}, $ENV{LANG});
  	# ...and HTTP_ACCEPT_LANGUAGE before those if present
  	if (my $httplang = $ENV{HTTP_ACCEPT_LANGUAGE}) {
  	    # TODO: q-value processing/ordering
  	    for $httplang (split(/\s*,\s*/, $httplang)) {
  		if ($httplang =~ /^\s*([a-zA-Z]+)[_-]([a-zA-Z]{2})\s*$/) {
  		    unshift(@srcs, "${1}_${2}");
  		    last;
  		}
  	    }
  	}
  	for (@srcs) {
  	    next unless defined;
  	    return lc($1) if /^[a-zA-Z]+_([a-zA-Z]{2})(?:[.@]|$)/;
  	}
  
  	# Last bit of domain name.  This may access the network.
  	require Net::Domain;
  	my $fqdn = Net::Domain::hostfqdn();
  	$_ = lc($1) if $fqdn =~ /\.([a-zA-Z]{2})$/;
  	return $_ if defined;
  
  	# Give up.  Defined but false.
  	return ($_ = 0);
      }
  }
  
  our %LOCAL_GUESSING =
  (
   'us' => [qw(www.ACME.gov www.ACME.mil)],
   'gb' => [qw(www.ACME.co.uk www.ACME.org.uk www.ACME.ac.uk)],
   'au' => [qw(www.ACME.com.au www.ACME.org.au www.ACME.edu.au)],
   'il' => [qw(www.ACME.co.il www.ACME.org.il www.ACME.net.il)],
   # send corrections and new entries to <gisle@aas.no>
  );
  # Backwards compatibility; uk != United Kingdom in ISO 3166
  $LOCAL_GUESSING{uk} = $LOCAL_GUESSING{gb};
  
  
  sub uf_uristr ($)
  {
      local($_) = @_;
      print STDERR "uf_uristr: resolving $_\n" if $DEBUG;
      return unless defined;
  
      s/^\s+//;
      s/\s+$//;
  
      if (/^(www|web|home)[a-z0-9-]*(?:\.|$)/i) {
  	$_ = "http://$_";
  
      } elsif (/^(ftp|gopher|news|wais|https|http)[a-z0-9-]*(?:\.|$)/i) {
  	$_ = lc($1) . "://$_";
  
      } elsif ($^O ne "MacOS" && 
  	    (m,^/,      ||          # absolute file name
  	     m,^\.\.?/, ||          # relative file name
  	     m,^[a-zA-Z]:[/\\],)    # dosish file name
  	    )
      {
  	$_ = "file:$_";
  
      } elsif ($^O eq "MacOS" && m/:/) {
          # potential MacOS file name
  	unless (m/^(ftp|gopher|news|wais|http|https|mailto):/) {
  	    require URI::file;
  	    my $a = URI::file->new($_)->as_string;
  	    $_ = ($a =~ m/^file:/) ? $a : "file:$a";
  	}
      } elsif (/^\w+([\.\-]\w+)*\@(\w+\.)+\w{2,3}$/) {
  	$_ = "mailto:$_";
  
      } elsif (!/^[a-zA-Z][a-zA-Z0-9.+\-]*:/) {      # no scheme specified
  	if (s/^([-\w]+(?:\.[-\w]+)*)([\/:\?\#]|$)/$2/) {
  	    my $host = $1;
  
  	    my $scheme = "http";
  	    if (/^:(\d+)\b/) {
  		# Some more or less well known ports
  		if ($1 =~ /^[56789]?443$/) {
  		    $scheme = "https";
  		} elsif ($1 eq "21") {
  		    $scheme = "ftp";
  		}
  	    }
  
  	    if ($host !~ /\./ && $host ne "localhost") {
  		my @guess;
  		if (exists $ENV{URL_GUESS_PATTERN}) {
  		    @guess = map { s/\bACME\b/$host/; $_ }
  		             split(' ', $ENV{URL_GUESS_PATTERN});
  		} else {
  		    if (MY_COUNTRY()) {
  			my $special = $LOCAL_GUESSING{MY_COUNTRY()};
  			if ($special) {
  			    my @special = @$special;
  			    push(@guess, map { s/\bACME\b/$host/; $_ }
                                                 @special);
  			} else {
  			    push(@guess, "www.$host." . MY_COUNTRY());
  			}
  		    }
  		    push(@guess, map "www.$host.$_",
  			             "com", "org", "net", "edu", "int");
  		}
  
  
  		my $guess;
  		for $guess (@guess) {
  		    print STDERR "uf_uristr: gethostbyname('$guess.')..."
  		      if $DEBUG;
  		    if (gethostbyname("$guess.")) {
  			print STDERR "yes\n" if $DEBUG;
  			$host = $guess;
  			last;
  		    }
  		    print STDERR "no\n" if $DEBUG;
  		}
  	    }
  	    $_ = "$scheme://$host$_";
  
  	} else {
  	    # pure junk, just return it unchanged...
  
  	}
      }
      print STDERR "uf_uristr: ==> $_\n" if $DEBUG;
  
      $_;
  }
  
  sub uf_uri ($)
  {
      require URI;
      URI->new(uf_uristr($_[0]));
  }
  
  # legacy
  *uf_urlstr = \*uf_uristr;
  
  sub uf_url ($)
  {
      require URI::URL;
      URI::URL->new(uf_uristr($_[0]));
  }
  
  1;
URI_HEURISTIC

    $main::fatpacked{"URI/IRI.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_IRI';
  package URI::IRI;
  
  # Experimental
  
  use strict;
  use warnings;
  use URI ();
  
  use overload '""' => sub { shift->as_string };
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  sub new {
      my($class, $uri, $scheme) = @_;
      utf8::upgrade($uri);
      return bless {
  	uri => URI->new($uri, $scheme),
      }, $class;
  }
  
  sub clone {
      my $self = shift;
      return bless {
  	uri => $self->{uri}->clone,
      }, ref($self);
  }
  
  sub as_string {
      my $self = shift;
      return $self->{uri}->as_iri;
  }
  
  our $AUTOLOAD;
  sub AUTOLOAD
  {
      my $method = substr($AUTOLOAD, rindex($AUTOLOAD, '::')+2);
  
      # We create the function here so that it will not need to be
      # autoloaded the next time.
      no strict 'refs';
      *$method = sub { shift->{uri}->$method(@_) };
      goto &$method;
  }
  
  sub DESTROY {}   # avoid AUTOLOADing it
  
  1;
URI_IRI

    $main::fatpacked{"URI/QueryParam.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_QUERYPARAM';
  package URI::QueryParam;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  sub URI::_query::query_param {
      my $self = shift;
      my @old = $self->query_form;
  
      if (@_ == 0) {
  	# get keys
  	my (%seen, $i);
  	return grep !($i++ % 2 || $seen{$_}++), @old;
      }
  
      my $key = shift;
      my @i = grep $_ % 2 == 0 && $old[$_] eq $key, 0 .. $#old;
  
      if (@_) {
  	my @new = @old;
  	my @new_i = @i;
  	my @vals = map { ref($_) eq 'ARRAY' ? @$_ : $_ } @_;
  
  	while (@new_i > @vals) {
  	    splice @new, pop @new_i, 2;
  	}
  	if (@vals > @new_i) {
  	    my $i = @new_i ? $new_i[-1] + 2 : @new;
  	    my @splice = splice @vals, @new_i, @vals - @new_i;
  
  	    splice @new, $i, 0, map { $key => $_ } @splice;
  	}
  	if (@vals) {
  	    #print "SET $new_i[0]\n";
  	    @new[ map $_ + 1, @new_i ] = @vals;
  	}
  
  	$self->query_form(\@new);
      }
  
      return wantarray ? @old[map $_+1, @i] : @i ? $old[$i[0]+1] : undef;
  }
  
  sub URI::_query::query_param_append {
      my $self = shift;
      my $key = shift;
      my @vals = map { ref $_ eq 'ARRAY' ? @$_ : $_ } @_;
      $self->query_form($self->query_form, $key => \@vals);  # XXX
      return;
  }
  
  sub URI::_query::query_param_delete {
      my $self = shift;
      my $key = shift;
      my @old = $self->query_form;
      my @vals;
  
      for (my $i = @old - 2; $i >= 0; $i -= 2) {
  	next if $old[$i] ne $key;
  	push(@vals, (splice(@old, $i, 2))[1]);
      }
      $self->query_form(\@old) if @vals;
      return wantarray ? reverse @vals : $vals[-1];
  }
  
  sub URI::_query::query_form_hash {
      my $self = shift;
      my @old = $self->query_form;
      if (@_) {
  	$self->query_form(@_ == 1 ? %{shift(@_)} : @_);
      }
      my %hash;
      while (my($k, $v) = splice(@old, 0, 2)) {
  	if (exists $hash{$k}) {
  	    for ($hash{$k}) {
  		$_ = [$_] unless ref($_) eq "ARRAY";
  		push(@$_, $v);
  	    }
  	}
  	else {
  	    $hash{$k} = $v;
  	}
      }
      return \%hash;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  URI::QueryParam - Additional query methods for URIs
  
  =head1 SYNOPSIS
  
    use URI;
    use URI::QueryParam;
  
    $u = URI->new("", "http");
    $u->query_param(foo => 1, 2, 3);
    print $u->query;    # prints foo=1&foo=2&foo=3
  
    for my $key ($u->query_param) {
        print "$key: ", join(", ", $u->query_param($key)), "\n";
    }
  
  =head1 DESCRIPTION
  
  Loading the C<URI::QueryParam> module adds some extra methods to
  URIs that support query methods.  These methods provide an alternative
  interface to the $u->query_form data.
  
  The query_param_* methods have deliberately been made identical to the
  interface of the corresponding C<CGI.pm> methods.
  
  The following additional methods are made available:
  
  =over
  
  =item @keys = $u->query_param
  
  =item @values = $u->query_param( $key )
  
  =item $first_value = $u->query_param( $key )
  
  =item $u->query_param( $key, $value,... )
  
  If $u->query_param is called with no arguments, it returns all the
  distinct parameter keys of the URI.  In a scalar context it returns the
  number of distinct keys.
  
  When a $key argument is given, the method returns the parameter values with the
  given key.  In a scalar context, only the first parameter value is
  returned.
  
  If additional arguments are given, they are used to update successive
  parameters with the given key.  If any of the values provided are
  array references, then the array is dereferenced to get the actual
  values.
  
  Please note that you can supply multiple values to this method, but you cannot
  supply multiple keys.
  
  Do this:
  
      $uri->query_param( widget_id => 1, 5, 9 );
  
  Do NOT do this:
  
      $uri->query_param( widget_id => 1, frobnicator_id => 99 );
  
  =item $u->query_param_append($key, $value,...)
  
  Adds new parameters with the given
  key without touching any old parameters with the same key.  It
  can be explained as a more efficient version of:
  
     $u->query_param($key,
                     $u->query_param($key),
                     $value,...);
  
  One difference is that this expression would return the old values
  of $key, whereas the query_param_append() method does not.
  
  =item @values = $u->query_param_delete($key)
  
  =item $first_value = $u->query_param_delete($key)
  
  Deletes all key/value pairs with the given key.
  The old values are returned.  In a scalar context, only the first value
  is returned.
  
  Using the query_param_delete() method is slightly more efficient than
  the equivalent:
  
     $u->query_param($key, []);
  
  =item $hashref = $u->query_form_hash
  
  =item $u->query_form_hash( \%new_form )
  
  Returns a reference to a hash that represents the
  query form's key/value pairs.  If a key occurs multiple times, then the hash
  value becomes an array reference.
  
  Note that sequence information is lost.  This means that:
  
     $u->query_form_hash($u->query_form_hash);
  
  is not necessarily a no-op, as it may reorder the key/value pairs.
  The values returned by the query_param() method should stay the same
  though.
  
  =back
  
  =head1 SEE ALSO
  
  L<URI>, L<CGI>
  
  =head1 COPYRIGHT
  
  Copyright 2002 Gisle Aas.
  
  =cut
URI_QUERYPARAM

    $main::fatpacked{"URI/Split.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_SPLIT';
  package URI::Split;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use Exporter 5.57 'import';
  our @EXPORT_OK = qw(uri_split uri_join);
  
  use URI::Escape ();
  
  sub uri_split {
       return $_[0] =~ m,(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?,;
  }
  
  sub uri_join {
      my($scheme, $auth, $path, $query, $frag) = @_;
      my $uri = defined($scheme) ? "$scheme:" : "";
      $path = "" unless defined $path;
      if (defined $auth) {
  	$auth =~ s,([/?\#]), URI::Escape::escape_char($1),eg;
  	$uri .= "//$auth";
  	$path = "/$path" if length($path) && $path !~ m,^/,;
      }
      elsif ($path =~ m,^//,) {
  	$uri .= "//";  # XXX force empty auth
      }
      unless (length $uri) {
  	$path =~ s,(:), URI::Escape::escape_char($1),e while $path =~ m,^[^:/?\#]+:,;
      }
      $path =~ s,([?\#]), URI::Escape::escape_char($1),eg;
      $uri .= $path;
      if (defined $query) {
  	$query =~ s,(\#), URI::Escape::escape_char($1),eg;
  	$uri .= "?$query";
      }
      $uri .= "#$frag" if defined $frag;
      $uri;
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  URI::Split - Parse and compose URI strings
  
  =head1 SYNOPSIS
  
   use URI::Split qw(uri_split uri_join);
   ($scheme, $auth, $path, $query, $frag) = uri_split($uri);
   $uri = uri_join($scheme, $auth, $path, $query, $frag);
  
  =head1 DESCRIPTION
  
  Provides functions to parse and compose URI
  strings.  The following functions are provided:
  
  =over
  
  =item ($scheme, $auth, $path, $query, $frag) = uri_split($uri)
  
  Breaks up a URI string into its component
  parts.  An C<undef> value is returned for those parts that are not
  present.  The $path part is always present (but can be the empty
  string) and is thus never returned as C<undef>.
  
  No sensible value is returned if this function is called in a scalar
  context.
  
  =item $uri = uri_join($scheme, $auth, $path, $query, $frag)
  
  Puts together a URI string from its parts.
  Missing parts are signaled by passing C<undef> for the corresponding
  argument.
  
  Minimal escaping is applied to parts that contain reserved chars
  that would confuse a parser.  For instance, any occurrence of '?' or '#'
  in $path is always escaped, as it would otherwise be parsed back
  as a query or fragment.
  
  =back
  
  =head1 SEE ALSO
  
  L<URI>, L<URI::Escape>
  
  =head1 COPYRIGHT
  
  Copyright 2003, Gisle Aas
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =cut
URI_SPLIT

    $main::fatpacked{"URI/URL.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_URL';
  package URI::URL;
  
  use strict;
  use warnings;
  
  use parent 'URI::WithBase';
  
  our $VERSION = "5.04";
  
  # Provide as much as possible of the old URI::URL interface for backwards
  # compatibility...
  
  use Exporter 5.57 'import';
  our @EXPORT = qw(url);
  
  # Easy to use constructor
  sub url ($;$) { URI::URL->new(@_); }
  
  use URI::Escape qw(uri_unescape);
  
  sub new
  {
      my $class = shift;
      my $self = $class->SUPER::new(@_);
      $self->[0] = $self->[0]->canonical;
      $self;
  }
  
  sub newlocal
  {
      my $class = shift;
      require URI::file;
      bless [URI::file->new_abs(shift)], $class;
  }
  
  {package URI::_foreign;
      sub _init  # hope it is not defined
      {
  	my $class = shift;
  	die "Unknown URI::URL scheme $_[1]:" if $URI::URL::STRICT;
  	$class->SUPER::_init(@_);
      }
  }
  
  sub strict
  {
      my $old = $URI::URL::STRICT;
      $URI::URL::STRICT = shift if @_;
      $old;
  }
  
  sub print_on
  {
      my $self = shift;
      require Data::Dumper;
      print STDERR Data::Dumper::Dumper($self);
  }
  
  sub _try
  {
      my $self = shift;
      my $method = shift;
      scalar(eval { $self->$method(@_) });
  }
  
  sub crack
  {
      # should be overridden by subclasses
      my $self = shift;
      (scalar($self->scheme),
       $self->_try("user"),
       $self->_try("password"),
       $self->_try("host"),
       $self->_try("port"),
       $self->_try("path"),
       $self->_try("params"),
       $self->_try("query"),
       scalar($self->fragment),
      )
  }
  
  sub full_path
  {
      my $self = shift;
      my $path = $self->path_query;
      $path = "/" unless length $path;
      $path;
  }
  
  sub netloc
  {
      shift->authority(@_);
  }
  
  sub epath
  {
      my $path = shift->SUPER::path(@_);
      $path =~ s/;.*//;
      $path;
  }
  
  sub eparams
  {
      my $self = shift;
      my @p = $self->path_segments;
      return undef unless ref($p[-1]);
      @p = @{$p[-1]};
      shift @p;
      join(";", @p);
  }
  
  sub params { shift->eparams(@_); }
  
  sub path {
      my $self = shift;
      my $old = $self->epath(@_);
      return unless defined wantarray;
      return '/' if !defined($old) || !length($old);
      Carp::croak("Path components contain '/' (you must call epath)")
  	if $old =~ /%2[fF]/ and !@_;
      $old = "/$old" if $old !~ m|^/| && defined $self->netloc;
      return uri_unescape($old);
  }
  
  sub path_components {
      shift->path_segments(@_);
  }
  
  sub query {
      my $self = shift;
      my $old = $self->equery(@_);
      if (defined(wantarray) && defined($old)) {
  	if ($old =~ /%(?:26|2[bB]|3[dD])/) {  # contains escaped '=' '&' or '+'
  	    my $mess;
  	    for ($old) {
  		$mess = "Query contains both '+' and '%2B'"
  		  if /\+/ && /%2[bB]/;
  		$mess = "Form query contains escaped '=' or '&'"
  		  if /=/  && /%(?:3[dD]|26)/;
  	    }
  	    if ($mess) {
  		Carp::croak("$mess (you must call equery)");
  	    }
  	}
  	# Now it should be safe to unescape the string without losing
  	# information
  	return uri_unescape($old);
      }
      undef;
  
  }
  
  sub abs
  {
      my $self = shift;
      my $base = shift;
      my $allow_scheme = shift;
      $allow_scheme = $URI::URL::ABS_ALLOW_RELATIVE_SCHEME
  	unless defined $allow_scheme;
      local $URI::ABS_ALLOW_RELATIVE_SCHEME = $allow_scheme;
      local $URI::ABS_REMOTE_LEADING_DOTS = $URI::URL::ABS_REMOTE_LEADING_DOTS;
      $self->SUPER::abs($base);
  }
  
  sub frag { shift->fragment(@_); }
  sub keywords { shift->query_keywords(@_); }
  
  # file:
  sub local_path { shift->file; }
  sub unix_path  { shift->file("unix"); }
  sub dos_path   { shift->file("dos");  }
  sub mac_path   { shift->file("mac");  }
  sub vms_path   { shift->file("vms");  }
  
  # mailto:
  sub address { shift->to(@_); }
  sub encoded822addr { shift->to(@_); }
  sub URI::mailto::authority { shift->to(@_); }  # make 'netloc' method work
  
  # news:
  sub groupart { shift->_group(@_); }
  sub article  { shift->message(@_); }
  
  1;
  
  __END__
  
  =head1 NAME
  
  URI::URL - Uniform Resource Locators
  
  =head1 SYNOPSIS
  
   $u1 = URI::URL->new($str, $base);
   $u2 = $u1->abs;
  
  =head1 DESCRIPTION
  
  This module is provided for backwards compatibility with modules that
  depend on the interface provided by the C<URI::URL> class that used to
  be distributed with the libwww-perl library.
  
  The following differences exist compared to the C<URI> class interface:
  
  =over 3
  
  =item *
  
  The URI::URL module exports the url() function as an alternate
  constructor interface.
  
  =item *
  
  The constructor takes an optional $base argument.  The C<URI::URL>
  class is a subclass of C<URI::WithBase>.
  
  =item *
  
  The URI::URL->newlocal class method is the same as URI::file->new_abs.
  
  =item *
  
  URI::URL::strict(1)
  
  =item *
  
  $url->print_on method
  
  =item *
  
  $url->crack method
  
  =item *
  
  $url->full_path: same as ($uri->abs_path || "/")
  
  =item *
  
  $url->netloc: same as $uri->authority
  
  =item *
  
  $url->epath, $url->equery: same as $uri->path, $uri->query
  
  =item *
  
  $url->path and $url->query pass unescaped strings.
  
  =item *
  
  $url->path_components: same as $uri->path_segments (if you don't
  consider path segment parameters)
  
  =item *
  
  $url->params and $url->eparams methods
  
  =item *
  
  $url->base method.  See L<URI::WithBase>.
  
  =item *
  
  $url->abs and $url->rel have an optional $base argument.  See
  L<URI::WithBase>.
  
  =item *
  
  $url->frag: same as $uri->fragment
  
  =item *
  
  $url->keywords: same as $uri->query_keywords
  
  =item *
  
  $url->localpath and friends map to $uri->file.
  
  =item *
  
  $url->address and $url->encoded822addr: same as $uri->to for mailto URI
  
  =item *
  
  $url->groupart method for news URI
  
  =item *
  
  $url->article: same as $uri->message
  
  =back
  
  
  
  =head1 SEE ALSO
  
  L<URI>, L<URI::WithBase>
  
  =head1 COPYRIGHT
  
  Copyright 1998-2000 Gisle Aas.
  
  =cut
URI_URL

    $main::fatpacked{"URI/WithBase.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_WITHBASE';
  package URI::WithBase;
  
  use strict;
  use warnings;
  
  use URI;
  use Scalar::Util 'blessed';
  
  our $VERSION = "2.20";
  
  use overload '""' => "as_string", fallback => 1;
  
  sub as_string;  # help overload find it
  
  sub new
  {
      my($class, $uri, $base) = @_;
      my $ibase = $base;
      if ($base && blessed($base) && $base->isa(__PACKAGE__)) {
  	$base = $base->abs;
  	$ibase = $base->[0];
      }
      bless [URI->new($uri, $ibase), $base], $class;
  }
  
  sub new_abs
  {
      my $class = shift;
      my $self = $class->new(@_);
      $self->abs;
  }
  
  sub _init
  {
      my $class = shift;
      my($str, $scheme) = @_;
      bless [URI->new($str, $scheme), undef], $class;
  }
  
  sub eq
  {
      my($self, $other) = @_;
      $other = $other->[0] if blessed($other) and $other->isa(__PACKAGE__);
      $self->[0]->eq($other);
  }
  
  our $AUTOLOAD;
  sub AUTOLOAD
  {
      my $self = shift;
      my $method = substr($AUTOLOAD, rindex($AUTOLOAD, '::')+2);
      return if $method eq "DESTROY";
      $self->[0]->$method(@_);
  }
  
  sub can {                                  # override UNIVERSAL::can
      my $self = shift;
      $self->SUPER::can(@_) || (
        ref($self)
        ? $self->[0]->can(@_)
        : undef
      )
  }
  
  sub base {
      my $self = shift;
      my $base  = $self->[1];
  
      if (@_) { # set
  	my $new_base = shift;
  	# ensure absoluteness
  	$new_base = $new_base->abs if ref($new_base) && $new_base->isa(__PACKAGE__);
  	$self->[1] = $new_base;
      }
      return unless defined wantarray;
  
      # The base attribute supports 'lazy' conversion from URL strings
      # to URL objects. Strings may be stored but when a string is
      # fetched it will automatically be converted to a URL object.
      # The main benefit is to make it much cheaper to say:
      #   URI::WithBase->new($random_url_string, 'http:')
      if (defined($base) && !ref($base)) {
  	$base = ref($self)->new($base);
  	$self->[1] = $base unless @_;
      }
      $base;
  }
  
  sub clone
  {
      my $self = shift;
      my $base = $self->[1];
      $base = $base->clone if ref($base);
      bless [$self->[0]->clone, $base], ref($self);
  }
  
  sub abs
  {
      my $self = shift;
      my $base = shift || $self->base || return $self->clone;
      $base = $base->as_string if ref($base);
      bless [$self->[0]->abs($base, @_), $base], ref($self);
  }
  
  sub rel
  {
      my $self = shift;
      my $base = shift || $self->base || return $self->clone;
      $base = $base->as_string if ref($base);
      bless [$self->[0]->rel($base, @_), $base], ref($self);
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  URI::WithBase - URIs which remember their base
  
  =head1 SYNOPSIS
  
   $u1 = URI::WithBase->new($str, $base);
   $u2 = $u1->abs;
  
   $base = $u1->base;
   $u1->base( $new_base )
  
  =head1 DESCRIPTION
  
  This module provides the C<URI::WithBase> class.  Objects of this class
  are like C<URI> objects, but can keep their base too.  The base
  represents the context where this URI was found and can be used to
  absolutize or relativize the URI.  All the methods described in L<URI>
  are supported for C<URI::WithBase> objects.
  
  The methods provided in addition to or modified from those of C<URI> are:
  
  =over 4
  
  =item $uri = URI::WithBase->new($str, [$base])
  
  The constructor takes an optional base URI as the second argument.
  If provided, this argument initializes the base attribute.
  
  =item $uri->base( [$new_base] )
  
  Can be used to get or set the value of the base attribute.
  The return value, which is the old value, is a URI object or C<undef>.
  
  =item $uri->abs( [$base_uri] )
  
  The $base_uri argument is now made optional as the object carries its
  base with it.  A new object is returned even if $uri is already
  absolute (while plain URI objects simply return themselves in
  that case).
  
  =item $uri->rel( [$base_uri] )
  
  The $base_uri argument is now made optional as the object carries its
  base with it.  A new object is always returned.
  
  =back
  
  
  =head1 SEE ALSO
  
  L<URI>
  
  =head1 COPYRIGHT
  
  Copyright 1998-2002 Gisle Aas.
  
  =cut
URI_WITHBASE

    $main::fatpacked{"URI/_foreign.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI__FOREIGN';
  package URI::_foreign;
  
  use strict;
  use warnings;
  
  use parent 'URI::_generic';
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  1;
URI__FOREIGN

    $main::fatpacked{"URI/_generic.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI__GENERIC';
  package URI::_generic;
  
  use strict;
  use warnings;
  
  use parent qw(URI URI::_query);
  
  use URI::Escape qw(uri_unescape);
  use Carp ();
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  my $ACHAR = $URI::uric;  $ACHAR =~ s,\\[/?],,g;
  my $PCHAR = $URI::uric;  $PCHAR =~ s,\\[?],,g;
  
  sub _no_scheme_ok { 1 }
  
  sub authority
  {
      my $self = shift;
      $$self =~ m,^((?:$URI::scheme_re:)?)(?://([^/?\#]*))?(.*)$,os or die;
  
      if (@_) {
  	my $auth = shift;
  	$$self = $1;
  	my $rest = $3;
  	if (defined $auth) {
  	    $auth =~ s/([^$ACHAR])/ URI::Escape::escape_char($1)/ego;
  	    utf8::downgrade($auth);
  	    $$self .= "//$auth";
  	}
  	_check_path($rest, $$self);
  	$$self .= $rest;
      }
      $2;
  }
  
  sub path
  {
      my $self = shift;
      $$self =~ m,^((?:[^:/?\#]+:)?(?://[^/?\#]*)?)([^?\#]*)(.*)$,s or die;
  
      if (@_) {
  	$$self = $1;
  	my $rest = $3;
  	my $new_path = shift;
  	$new_path = "" unless defined $new_path;
  	$new_path =~ s/([^$PCHAR])/ URI::Escape::escape_char($1)/ego;
  	utf8::downgrade($new_path);
  	_check_path($new_path, $$self);
  	$$self .= $new_path . $rest;
      }
      $2;
  }
  
  sub path_query
  {
      my $self = shift;
      $$self =~ m,^((?:[^:/?\#]+:)?(?://[^/?\#]*)?)([^\#]*)(.*)$,s or die;
  
      if (@_) {
  	$$self = $1;
  	my $rest = $3;
  	my $new_path = shift;
  	$new_path = "" unless defined $new_path;
  	$new_path =~ s/([^$URI::uric])/ URI::Escape::escape_char($1)/ego;
  	utf8::downgrade($new_path);
  	_check_path($new_path, $$self);
  	$$self .= $new_path . $rest;
      }
      $2;
  }
  
  sub _check_path
  {
      my($path, $pre) = @_;
      my $prefix;
      if ($pre =~ m,/,) {  # authority present
  	$prefix = "/" if length($path) && $path !~ m,^[/?\#],;
      }
      else {
  	if ($path =~ m,^//,) {
  	    Carp::carp("Path starting with double slash is confusing")
  		if $^W;
  	}
  	elsif (!length($pre) && $path =~ m,^[^:/?\#]+:,) {
  	    Carp::carp("Path might look like scheme, './' prepended")
  		if $^W;
  	    $prefix = "./";
  	}
      }
      substr($_[0], 0, 0) = $prefix if defined $prefix;
  }
  
  sub path_segments
  {
      my $self = shift;
      my $path = $self->path;
      if (@_) {
  	my @arg = @_;  # make a copy
  	for (@arg) {
  	    if (ref($_)) {
  		my @seg = @$_;
  		$seg[0] =~ s/%/%25/g;
  		for (@seg) { s/;/%3B/g; }
  		$_ = join(";", @seg);
  	    }
  	    else {
  		 s/%/%25/g; s/;/%3B/g;
  	    }
  	    s,/,%2F,g;
  	}
  	$self->path(join("/", @arg));
      }
      return $path unless wantarray;
      map {/;/ ? $self->_split_segment($_)
               : uri_unescape($_) }
          split('/', $path, -1);
  }
  
  
  sub _split_segment
  {
      my $self = shift;
      require URI::_segment;
      URI::_segment->new(@_);
  }
  
  
  sub abs
  {
      my $self = shift;
      my $base = shift || Carp::croak("Missing base argument");
  
      if (my $scheme = $self->scheme) {
  	return $self unless $URI::ABS_ALLOW_RELATIVE_SCHEME;
  	$base = URI->new($base) unless ref $base;
  	return $self unless $scheme eq $base->scheme;
      }
  
      $base = URI->new($base) unless ref $base;
      my $abs = $self->clone;
      $abs->scheme($base->scheme);
      return $abs if $$self =~ m,^(?:$URI::scheme_re:)?//,o;
      $abs->authority($base->authority);
  
      my $path = $self->path;
      return $abs if $path =~ m,^/,;
  
      if (!length($path)) {
  	my $abs = $base->clone;
  	my $query = $self->query;
  	$abs->query($query) if defined $query;
  	my $fragment = $self->fragment;
  	$abs->fragment($fragment) if defined $fragment;
  	return $abs;
      }
  
      my $p = $base->path;
      $p =~ s,[^/]+$,,;
      $p .= $path;
      my @p = split('/', $p, -1);
      shift(@p) if @p && !length($p[0]);
      my $i = 1;
      while ($i < @p) {
  	#print "$i ", join("/", @p), " ($p[$i])\n";
  	if ($p[$i-1] eq ".") {
  	    splice(@p, $i-1, 1);
  	    $i-- if $i > 1;
  	}
  	elsif ($p[$i] eq ".." && $p[$i-1] ne "..") {
  	    splice(@p, $i-1, 2);
  	    if ($i > 1) {
  		$i--;
  		push(@p, "") if $i == @p;
  	    }
  	}
  	else {
  	    $i++;
  	}
      }
      $p[-1] = "" if @p && $p[-1] eq ".";  # trailing "/."
      if ($URI::ABS_REMOTE_LEADING_DOTS) {
          shift @p while @p && $p[0] =~ /^\.\.?$/;
      }
      $abs->path("/" . join("/", @p));
      $abs;
  }
  
  # The opposite of $url->abs.  Return a URI which is as relative as possible
  sub rel {
      my $self = shift;
      my $base = shift || Carp::croak("Missing base argument");
      my $rel = $self->clone;
      $base = URI->new($base) unless ref $base;
  
      #my($scheme, $auth, $path) = @{$rel}{qw(scheme authority path)};
      my $scheme = $rel->scheme;
      my $auth   = $rel->canonical->authority;
      my $path   = $rel->path;
  
      if (!defined($scheme) && !defined($auth)) {
  	# it is already relative
  	return $rel;
      }
  
      #my($bscheme, $bauth, $bpath) = @{$base}{qw(scheme authority path)};
      my $bscheme = $base->scheme;
      my $bauth   = $base->canonical->authority;
      my $bpath   = $base->path;
  
      for ($bscheme, $bauth, $auth) {
  	$_ = '' unless defined
      }
  
      unless ($scheme eq $bscheme && $auth eq $bauth) {
  	# different location, can't make it relative
  	return $rel;
      }
  
      for ($path, $bpath) {  $_ = "/$_" unless m,^/,; }
  
      # Make it relative by eliminating scheme and authority
      $rel->scheme(undef);
      $rel->authority(undef);
  
      # This loop is based on code from Nicolai Langfeldt <janl@ifi.uio.no>.
      # First we calculate common initial path components length ($li).
      my $li = 1;
      while (1) {
  	my $i = index($path, '/', $li);
  	last if $i < 0 ||
                  $i != index($bpath, '/', $li) ||
  	        substr($path,$li,$i-$li) ne substr($bpath,$li,$i-$li);
  	$li=$i+1;
      }
      # then we nuke it from both paths
      substr($path, 0,$li) = '';
      substr($bpath,0,$li) = '';
  
      if ($path eq $bpath &&
          defined($rel->fragment) &&
          !defined($rel->query)) {
          $rel->path("");
      }
      else {
          # Add one "../" for each path component left in the base path
          $path = ('../' x $bpath =~ tr|/|/|) . $path;
  	$path = "./" if $path eq "";
          $rel->path($path);
      }
  
      $rel;
  }
  
  1;
URI__GENERIC

    $main::fatpacked{"URI/_idna.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI__IDNA';
  package URI::_idna;
  
  # This module implements the RFCs 3490 (IDNA) and 3491 (Nameprep)
  # based on Python-2.6.4/Lib/encodings/idna.py
  
  use strict;
  use warnings;
  
  use URI::_punycode qw(encode_punycode decode_punycode);
  use Carp qw(croak);
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  BEGIN {
    *URI::_idna::_ENV_::JOIN_LEAKS_UTF8_FLAGS = $] < 5.008_003
      ? sub () { 1 }
      : sub () { 0 }
    ;
  }
  
  my $ASCII = qr/^[\x00-\x7F]*\z/;
  
  sub encode {
      my $idomain = shift;
      my @labels = split(/\./, $idomain, -1);
      my @last_empty;
      push(@last_empty, pop @labels) if @labels > 1 && $labels[-1] eq "";
      for (@labels) {
  	$_ = ToASCII($_);
      }
  
      return eval 'join(".", @labels, @last_empty)' if URI::_idna::_ENV_::JOIN_LEAKS_UTF8_FLAGS;
      return join(".", @labels, @last_empty);
  }
  
  sub decode {
      my $domain = shift;
      return join(".", map ToUnicode($_), split(/\./, $domain, -1))
  }
  
  sub nameprep { # XXX real implementation missing
      my $label = shift;
      $label = lc($label);
      return $label;
  }
  
  sub check_size {
      my $label = shift;
      croak "Label empty" if $label eq "";
      croak "Label too long" if length($label) > 63;
      return $label;
  }
  
  sub ToASCII {
      my $label = shift;
      return check_size($label) if $label =~ $ASCII;
  
      # Step 2: nameprep
      $label = nameprep($label);
      # Step 3: UseSTD3ASCIIRules is false
      # Step 4: try ASCII again
      return check_size($label) if $label =~ $ASCII;
  
      # Step 5: Check ACE prefix
      if ($label =~ /^xn--/) {
          croak "Label starts with ACE prefix";
      }
  
      # Step 6: Encode with PUNYCODE
      $label = encode_punycode($label);
  
      # Step 7: Prepend ACE prefix
      $label = "xn--$label";
  
      # Step 8: Check size
      return check_size($label);
  }
  
  sub ToUnicode {
      my $label = shift;
      $label = nameprep($label) unless $label =~ $ASCII;
      return $label unless $label =~ /^xn--/;
      my $result = decode_punycode(substr($label, 4));
      my $label2 = ToASCII($result);
      if (lc($label) ne $label2) {
  	croak "IDNA does not round-trip: '\L$label\E' vs '$label2'";
      }
      return $result;
  }
  
  1;
URI__IDNA

    $main::fatpacked{"URI/_ldap.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI__LDAP';
  # Copyright (c) 1998 Graham Barr <gbarr@pobox.com>. All rights reserved.
  # This program is free software; you can redistribute it and/or
  # modify it under the same terms as Perl itself.
  
  package URI::_ldap;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use URI::Escape qw(uri_unescape);
  
  sub _ldap_elem {
    my $self  = shift;
    my $elem  = shift;
    my $query = $self->query;
    my @bits  = (split(/\?/,defined($query) ? $query : ""),("")x4);
    my $old   = $bits[$elem];
  
    if (@_) {
      my $new = shift;
      $new =~ s/\?/%3F/g;
      $bits[$elem] = $new;
      $query = join("?",@bits);
      $query =~ s/\?+$//;
      $query = undef unless length($query);
      $self->query($query);
    }
  
    $old;
  }
  
  sub dn {
    my $old = shift->path(@_);
    $old =~ s:^/::;
    uri_unescape($old);
  }
  
  sub attributes {
    my $self = shift;
    my $old = _ldap_elem($self,0, @_ ? join(",", map { my $tmp = $_; $tmp =~ s/,/%2C/g; $tmp } @_) : ());
    return $old unless wantarray;
    map { uri_unescape($_) } split(/,/,$old);
  }
  
  sub _scope {
    my $self = shift;
    my $old = _ldap_elem($self,1, @_);
    return undef unless defined wantarray && defined $old;
    uri_unescape($old);
  }
  
  sub scope {
    my $old = &_scope;
    $old = "base" unless length $old;
    $old;
  }
  
  sub _filter {
    my $self = shift;
    my $old = _ldap_elem($self,2, @_);
    return undef unless defined wantarray && defined $old;
    uri_unescape($old); # || "(objectClass=*)";
  }
  
  sub filter {
    my $old = &_filter;
    $old = "(objectClass=*)" unless length $old;
    $old;
  }
  
  sub extensions {
    my $self = shift;
    my @ext;
    while (@_) {
      my $key = shift;
      my $value = shift;
      push(@ext, join("=", map { $_="" unless defined; s/,/%2C/g; $_ } $key, $value));
    }
    @ext = join(",", @ext) if @ext;
    my $old = _ldap_elem($self,3, @ext);
    return $old unless wantarray;
    map { uri_unescape($_) } map { /^([^=]+)=(.*)$/ } split(/,/,$old);
  }
  
  sub canonical
  {
      my $self = shift;
      my $other = $self->_nonldap_canonical;
  
      # The stuff below is not as efficient as one might hope...
  
      $other = $other->clone if $other == $self;
  
      $other->dn(_normalize_dn($other->dn));
  
      # Should really know about mixed case "postalAddress", etc...
      $other->attributes(map lc, $other->attributes);
  
      # Lowercase scope, remove default
      my $old_scope = $other->scope;
      my $new_scope = lc($old_scope);
      $new_scope = "" if $new_scope eq "base";
      $other->scope($new_scope) if $new_scope ne $old_scope;
  
      # Remove filter if default
      my $old_filter = $other->filter;
      $other->filter("") if lc($old_filter) eq "(objectclass=*)" ||
  	                  lc($old_filter) eq "objectclass=*";
  
      # Lowercase extensions types and deal with known extension values
      my @ext = $other->extensions;
      for (my $i = 0; $i < @ext; $i += 2) {
  	my $etype = $ext[$i] = lc($ext[$i]);
  	if ($etype =~ /^!?bindname$/) {
  	    $ext[$i+1] = _normalize_dn($ext[$i+1]);
  	}
      }
      $other->extensions(@ext) if @ext;
      
      $other;
  }
  
  sub _normalize_dn  # RFC 2253
  {
      my $dn = shift;
  
      return $dn;
      # The code below will fail if the "+" or "," is embedding in a quoted
      # string or simply escaped...
  
      my @dn = split(/([+,])/, $dn);
      for (@dn) {
  	s/^([a-zA-Z]+=)/lc($1)/e;
      }
      join("", @dn);
  }
  
  1;
URI__LDAP

    $main::fatpacked{"URI/_login.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI__LOGIN';
  package URI::_login;
  
  use strict;
  use warnings;
  
  use parent qw(URI::_server URI::_userpass);
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  # Generic terminal logins.  This is used as a base class for 'telnet',
  # 'tn3270', and 'rlogin' URL schemes.
  
  1;
URI__LOGIN

    $main::fatpacked{"URI/_punycode.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI__PUNYCODE';
  package URI::_punycode;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use Exporter 'import';
  our @EXPORT = qw(encode_punycode decode_punycode);
  
  use integer;
  
  our $DEBUG = 0;
  
  use constant BASE => 36;
  use constant TMIN => 1;
  use constant TMAX => 26;
  use constant SKEW => 38;
  use constant DAMP => 700;
  use constant INITIAL_BIAS => 72;
  use constant INITIAL_N => 128;
  
  my $Delimiter = chr 0x2D;
  my $BasicRE   = qr/[\x00-\x7f]/;
  
  sub _croak { require Carp; Carp::croak(@_); }
  
  sub digit_value {
      my $code = shift;
      return ord($code) - ord("A") if $code =~ /[A-Z]/;
      return ord($code) - ord("a") if $code =~ /[a-z]/;
      return ord($code) - ord("0") + 26 if $code =~ /[0-9]/;
      return;
  }
  
  sub code_point {
      my $digit = shift;
      return $digit + ord('a') if 0 <= $digit && $digit <= 25;
      return $digit + ord('0') - 26 if 26 <= $digit && $digit <= 36;
      die 'NOT COME HERE';
  }
  
  sub adapt {
      my($delta, $numpoints, $firsttime) = @_;
      $delta = $firsttime ? $delta / DAMP : $delta / 2;
      $delta += $delta / $numpoints;
      my $k = 0;
      while ($delta > ((BASE - TMIN) * TMAX) / 2) {
  	$delta /= BASE - TMIN;
  	$k += BASE;
      }
      return $k + (((BASE - TMIN + 1) * $delta) / ($delta + SKEW));
  }
  
  sub decode_punycode {
      my $code = shift;
  
      my $n      = INITIAL_N;
      my $i      = 0;
      my $bias   = INITIAL_BIAS;
      my @output;
  
      if ($code =~ s/(.*)$Delimiter//o) {
  	push @output, map ord, split //, $1;
  	return _croak('non-basic code point') unless $1 =~ /^$BasicRE*$/o;
      }
  
      while ($code) {
  	my $oldi = $i;
  	my $w    = 1;
      LOOP:
  	for (my $k = BASE; 1; $k += BASE) {
  	    my $cp = substr($code, 0, 1, '');
  	    my $digit = digit_value($cp);
  	    defined $digit or return _croak("invalid punycode input");
  	    $i += $digit * $w;
  	    my $t = ($k <= $bias) ? TMIN
  		: ($k >= $bias + TMAX) ? TMAX : $k - $bias;
  	    last LOOP if $digit < $t;
  	    $w *= (BASE - $t);
  	}
  	$bias = adapt($i - $oldi, @output + 1, $oldi == 0);
  	warn "bias becomes $bias" if $DEBUG;
  	$n += $i / (@output + 1);
  	$i = $i % (@output + 1);
  	splice(@output, $i, 0, $n);
  	warn join " ", map sprintf('%04x', $_), @output if $DEBUG;
  	$i++;
      }
      return join '', map chr, @output;
  }
  
  sub encode_punycode {
      my $input = shift;
      my @input = split //, $input;
  
      my $n     = INITIAL_N;
      my $delta = 0;
      my $bias  = INITIAL_BIAS;
  
      my @output;
      my @basic = grep /$BasicRE/, @input;
      my $h = my $b = @basic;
      push @output, @basic;
      push @output, $Delimiter if $b && $h < @input;
      warn "basic codepoints: (@output)" if $DEBUG;
  
      while ($h < @input) {
  	my $m = min(grep { $_ >= $n } map ord, @input);
  	warn sprintf "next code point to insert is %04x", $m if $DEBUG;
  	$delta += ($m - $n) * ($h + 1);
  	$n = $m;
  	for my $i (@input) {
  	    my $c = ord($i);
  	    $delta++ if $c < $n;
  	    if ($c == $n) {
  		my $q = $delta;
  	    LOOP:
  		for (my $k = BASE; 1; $k += BASE) {
  		    my $t = ($k <= $bias) ? TMIN :
  			($k >= $bias + TMAX) ? TMAX : $k - $bias;
  		    last LOOP if $q < $t;
  		    my $cp = code_point($t + (($q - $t) % (BASE - $t)));
  		    push @output, chr($cp);
  		    $q = ($q - $t) / (BASE - $t);
  		}
  		push @output, chr(code_point($q));
  		$bias = adapt($delta, $h + 1, $h == $b);
  		warn "bias becomes $bias" if $DEBUG;
  		$delta = 0;
  		$h++;
  	    }
  	}
  	$delta++;
  	$n++;
      }
      return join '', @output;
  }
  
  sub min {
      my $min = shift;
      for (@_) { $min = $_ if $_ <= $min }
      return $min;
  }
  
  1;
  __END__
  
  =head1 NAME
  
  URI::_punycode - encodes Unicode string in Punycode
  
  =head1 SYNOPSIS
  
    use URI::_punycode;
    $punycode = encode_punycode($unicode);
    $unicode  = decode_punycode($punycode);
  
  =head1 DESCRIPTION
  
  URI::_punycode is a module to encode / decode Unicode strings into
  Punycode, an efficient encoding of Unicode for use with IDNA.
  
  This module requires Perl 5.6.0 or over to handle UTF8 flagged Unicode
  strings.
  
  =head1 FUNCTIONS
  
  This module exports following functions by default.
  
  =over 4
  
  =item encode_punycode
  
    $punycode = encode_punycode($unicode);
  
  takes Unicode string (UTF8-flagged variable) and returns Punycode
  encoding for it.
  
  =item decode_punycode
  
    $unicode = decode_punycode($punycode)
  
  takes Punycode encoding and returns original Unicode string.
  
  =back
  
  These functions throw exceptions on failure. You can catch 'em via
  C<eval>.
  
  =head1 AUTHOR
  
  Tatsuhiko Miyagawa E<lt>miyagawa@bulknews.netE<gt> is the author of
  IDNA::Punycode v0.02 which was the basis for this module.
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself.
  
  =head1 SEE ALSO
  
  L<IDNA::Punycode>, RFC 3492
  
  =cut
URI__PUNYCODE

    $main::fatpacked{"URI/_query.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI__QUERY';
  package URI::_query;
  
  use strict;
  use warnings;
  
  use URI ();
  use URI::Escape qw(uri_unescape);
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  sub query
  {
      my $self = shift;
      $$self =~ m,^([^?\#]*)(?:\?([^\#]*))?(.*)$,s or die;
  
      if (@_) {
  	my $q = shift;
  	$$self = $1;
  	if (defined $q) {
  	    $q =~ s/([^$URI::uric])/ URI::Escape::escape_char($1)/ego;
  	    utf8::downgrade($q);
  	    $$self .= "?$q";
  	}
  	$$self .= $3;
      }
      $2;
  }
  
  # Handle ...?foo=bar&bar=foo type of query
  sub query_form {
      my $self = shift;
      my $old = $self->query;
      if (@_) {
          # Try to set query string
          my $delim;
          my $r = $_[0];
          if (ref($r) eq "ARRAY") {
              $delim = $_[1];
              @_ = @$r;
          }
          elsif (ref($r) eq "HASH") {
              $delim = $_[1];
              @_ = map { $_ => $r->{$_} } sort keys %$r;
          }
          $delim = pop if @_ % 2;
  
          my @query;
          while (my($key,$vals) = splice(@_, 0, 2)) {
              $key = '' unless defined $key;
  	    $key =~ s/([;\/?:@&=+,\$\[\]%])/ URI::Escape::escape_char($1)/eg;
  	    $key =~ s/ /+/g;
  	    $vals = [ref($vals) eq "ARRAY" ? @$vals : $vals];
              for my $val (@$vals) {
                  $val = '' unless defined $val;
  		$val =~ s/([;\/?:@&=+,\$\[\]%])/ URI::Escape::escape_char($1)/eg;
                  $val =~ s/ /+/g;
                  push(@query, "$key=$val");
              }
          }
          if (@query) {
              unless ($delim) {
                  $delim = $1 if $old && $old =~ /([&;])/;
                  $delim ||= $URI::DEFAULT_QUERY_FORM_DELIMITER || "&";
              }
              $self->query(join($delim, @query));
          }
          else {
              $self->query(undef);
          }
      }
      return if !defined($old) || !length($old) || !defined(wantarray);
      return unless $old =~ /=/; # not a form
      map { s/\+/ /g; uri_unescape($_) }
           map { /=/ ? split(/=/, $_, 2) : ($_ => '')} split(/[&;]/, $old);
  }
  
  # Handle ...?dog+bones type of query
  sub query_keywords
  {
      my $self = shift;
      my $old = $self->query;
      if (@_) {
          # Try to set query string
  	my @copy = @_;
  	@copy = @{$copy[0]} if @copy == 1 && ref($copy[0]) eq "ARRAY";
  	for (@copy) { s/([;\/?:@&=+,\$\[\]%])/ URI::Escape::escape_char($1)/eg; }
  	$self->query(@copy ? join('+', @copy) : undef);
      }
      return if !defined($old) || !defined(wantarray);
      return if $old =~ /=/;  # not keywords, but a form
      map { uri_unescape($_) } split(/\+/, $old, -1);
  }
  
  # Some URI::URL compatibility stuff
  sub equery { goto &query }
  
  1;
URI__QUERY

    $main::fatpacked{"URI/_segment.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI__SEGMENT';
  package URI::_segment;
  
  # Represents a generic path_segment so that it can be treated as
  # a string too.
  
  use strict;
  use warnings;
  
  use URI::Escape qw(uri_unescape);
  
  use overload '""' => sub { $_[0]->[0] },
               fallback => 1;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  sub new
  {
      my $class = shift;
      my @segment = split(';', shift, -1);
      $segment[0] = uri_unescape($segment[0]);
      bless \@segment, $class;
  }
  
  1;
URI__SEGMENT

    $main::fatpacked{"URI/_server.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI__SERVER';
  package URI::_server;
  
  use strict;
  use warnings;
  
  use parent 'URI::_generic';
  
  use URI::Escape qw(uri_unescape);
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  sub _uric_escape {
      my($class, $str) = @_;
      if ($str =~ m,^((?:$URI::scheme_re:)?)//([^/?\#]*)(.*)$,os) {
  	my($scheme, $host, $rest) = ($1, $2, $3);
  	my $ui = $host =~ s/(.*@)// ? $1 : "";
  	my $port = $host =~ s/(:\d+)\z// ? $1 : "";
  	if (_host_escape($host)) {
  	    $str = "$scheme//$ui$host$port$rest";
  	}
      }
      return $class->SUPER::_uric_escape($str);
  }
  
  sub _host_escape {
      return unless $_[0] =~ /[^$URI::uric]/;
      eval {
  	require URI::_idna;
  	$_[0] = URI::_idna::encode($_[0]);
      };
      return 0 if $@;
      return 1;
  }
  
  sub as_iri {
      my $self = shift;
      my $str = $self->SUPER::as_iri;
      if ($str =~ /\bxn--/) {
  	if ($str =~ m,^((?:$URI::scheme_re:)?)//([^/?\#]*)(.*)$,os) {
  	    my($scheme, $host, $rest) = ($1, $2, $3);
  	    my $ui = $host =~ s/(.*@)// ? $1 : "";
  	    my $port = $host =~ s/(:\d+)\z// ? $1 : "";
  	    require URI::_idna;
  	    $host = URI::_idna::decode($host);
  	    $str = "$scheme//$ui$host$port$rest";
  	}
      }
      return $str;
  }
  
  sub userinfo
  {
      my $self = shift;
      my $old = $self->authority;
  
      if (@_) {
  	my $new = $old;
  	$new = "" unless defined $new;
  	$new =~ s/.*@//;  # remove old stuff
  	my $ui = shift;
  	if (defined $ui) {
  	    $ui =~ s/@/%40/g;   # protect @
  	    $new = "$ui\@$new";
  	}
  	$self->authority($new);
      }
      return undef if !defined($old) || $old !~ /(.*)@/;
      return $1;
  }
  
  sub host
  {
      my $self = shift;
      my $old = $self->authority;
      if (@_) {
  	my $tmp = $old;
  	$tmp = "" unless defined $tmp;
  	my $ui = ($tmp =~ /(.*@)/) ? $1 : "";
  	my $port = ($tmp =~ /(:\d+)$/) ? $1 : "";
  	my $new = shift;
  	$new = "" unless defined $new;
  	if (length $new) {
  	    $new =~ s/[@]/%40/g;   # protect @
  	    if ($new =~ /^[^:]*:\d*\z/ || $new =~ /]:\d*\z/) {
  		$new =~ s/(:\d*)\z// || die "Assert";
  		$port = $1;
  	    }
  	    $new = "[$new]" if $new =~ /:/ && $new !~ /^\[/; # IPv6 address
  	    _host_escape($new);
  	}
  	$self->authority("$ui$new$port");
      }
      return undef unless defined $old;
      $old =~ s/.*@//;
      $old =~ s/:\d+$//;          # remove the port
      $old =~ s{^\[(.*)\]$}{$1};  # remove brackets around IPv6 (RFC 3986 3.2.2)
      return uri_unescape($old);
  }
  
  sub ihost
  {
      my $self = shift;
      my $old = $self->host(@_);
      if ($old =~ /(^|\.)xn--/) {
  	require URI::_idna;
  	$old = URI::_idna::decode($old);
      }
      return $old;
  }
  
  sub _port
  {
      my $self = shift;
      my $old = $self->authority;
      if (@_) {
  	my $new = $old;
  	$new =~ s/:\d*$//;
  	my $port = shift;
  	$new .= ":$port" if defined $port;
  	$self->authority($new);
      }
      return $1 if defined($old) && $old =~ /:(\d*)$/;
      return;
  }
  
  sub port
  {
      my $self = shift;
      my $port = $self->_port(@_);
      $port = $self->default_port if !defined($port) || $port eq "";
      $port;
  }
  
  sub host_port
  {
      my $self = shift;
      my $old = $self->authority;
      $self->host(shift) if @_;
      return undef unless defined $old;
      $old =~ s/.*@//;        # zap userinfo
      $old =~ s/:$//;         # empty port should be treated the same a no port
      $old .= ":" . $self->port unless $old =~ /:\d+$/;
      $old;
  }
  
  
  sub default_port { undef }
  
  sub canonical
  {
      my $self = shift;
      my $other = $self->SUPER::canonical;
      my $host = $other->host || "";
      my $port = $other->_port;
      my $uc_host = $host =~ /[A-Z]/;
      my $def_port = defined($port) && ($port eq "" ||
                                        $port == $self->default_port);
      if ($uc_host || $def_port) {
  	$other = $other->clone if $other == $self;
  	$other->host(lc $host) if $uc_host;
  	$other->port(undef)    if $def_port;
      }
      $other;
  }
  
  1;
URI__SERVER

    $main::fatpacked{"URI/_userpass.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI__USERPASS';
  package URI::_userpass;
  
  use strict;
  use warnings;
  
  use URI::Escape qw(uri_unescape);
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  sub user
  {
      my $self = shift;
      my $info = $self->userinfo;
      if (@_) {
  	my $new = shift;
  	my $pass = defined($info) ? $info : "";
  	$pass =~ s/^[^:]*//;
  
  	if (!defined($new) && !length($pass)) {
  	    $self->userinfo(undef);
  	} else {
  	    $new = "" unless defined($new);
  	    $new =~ s/%/%25/g;
  	    $new =~ s/:/%3A/g;
  	    $self->userinfo("$new$pass");
  	}
      }
      return undef unless defined $info;
      $info =~ s/:.*//;
      uri_unescape($info);
  }
  
  sub password
  {
      my $self = shift;
      my $info = $self->userinfo;
      if (@_) {
  	my $new = shift;
  	my $user = defined($info) ? $info : "";
  	$user =~ s/:.*//;
  
  	if (!defined($new) && !length($user)) {
  	    $self->userinfo(undef);
  	} else {
  	    $new = "" unless defined($new);
  	    $new =~ s/%/%25/g;
  	    $self->userinfo("$user:$new");
  	}
      }
      return undef unless defined $info;
      return undef unless $info =~ s/^[^:]*://;
      uri_unescape($info);
  }
  
  1;
URI__USERPASS

    $main::fatpacked{"URI/data.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_DATA';
  package URI::data;  # RFC 2397
  
  use strict;
  use warnings;
  
  use parent 'URI';
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use MIME::Base64 qw(encode_base64 decode_base64);
  use URI::Escape  qw(uri_unescape);
  
  sub media_type
  {
      my $self = shift;
      my $opaque = $self->opaque;
      $opaque =~ /^([^,]*),?/ or die;
      my $old = $1;
      my $base64;
      $base64 = $1 if $old =~ s/(;base64)$//i;
      if (@_) {
  	my $new = shift;
  	$new = "" unless defined $new;
  	$new =~ s/%/%25/g;
  	$new =~ s/,/%2C/g;
  	$base64 = "" unless defined $base64;
  	$opaque =~ s/^[^,]*,?/$new$base64,/;
  	$self->opaque($opaque);
      }
      return uri_unescape($old) if $old;  # media_type can't really be "0"
      "text/plain;charset=US-ASCII";      # default type
  }
  
  sub data
  {
      my $self = shift;
      my($enc, $data) = split(",", $self->opaque, 2);
      unless (defined $data) {
  	$data = "";
  	$enc  = "" unless defined $enc;
      }
      my $base64 = ($enc =~ /;base64$/i);
      if (@_) {
  	$enc =~ s/;base64$//i if $base64;
  	my $new = shift;
  	$new = "" unless defined $new;
  	my $uric_count = _uric_count($new);
  	my $urienc_len = $uric_count + (length($new) - $uric_count) * 3;
  	my $base64_len = int((length($new)+2) / 3) * 4;
  	$base64_len += 7;  # because of ";base64" marker
  	if ($base64_len < $urienc_len || $_[0]) {
  	    $enc .= ";base64";
  	    $new = encode_base64($new, "");
  	} else {
  	    $new =~ s/%/%25/g;
  	}
  	$self->opaque("$enc,$new");
      }
      return unless defined wantarray;
      $data = uri_unescape($data);
      return $base64 ? decode_base64($data) : $data;
  }
  
  # I could not find a better way to interpolate the tr/// chars from
  # a variable.
  my $ENC = $URI::uric;
  $ENC =~ s/%//;
  
  eval <<EOT; die $@ if $@;
  sub _uric_count
  {
      \$_[0] =~ tr/$ENC//;
  }
  EOT
  
  1;
  
  __END__
  
  =head1 NAME
  
  URI::data - URI that contains immediate data
  
  =head1 SYNOPSIS
  
   use URI;
  
   $u = URI->new("data:");
   $u->media_type("image/gif");
   $u->data(scalar(`cat camel.gif`));
   print "$u\n";
   open(XV, "|xv -") and print XV $u->data;
  
  =head1 DESCRIPTION
  
  The C<URI::data> class supports C<URI> objects belonging to the I<data>
  URI scheme.  The I<data> URI scheme is specified in RFC 2397.  It
  allows inclusion of small data items as "immediate" data, as if it had
  been included externally.  Examples:
  
    data:,Perl%20is%20good
  
    data:image/gif;base64,R0lGODdhIAAgAIAAAAAAAPj8+CwAAAAAI
      AAgAAAClYyPqcu9AJyCjtIKc5w5xP14xgeO2tlY3nWcajmZZdeJcG
      Kxrmimms1KMTa1Wg8UROx4MNUq1HrycMjHT9b6xKxaFLM6VRKzI+p
      KS9XtXpcbdun6uWVxJXA8pNPkdkkxhxc21LZHFOgD2KMoQXa2KMWI
      JtnE2KizVUkYJVZZ1nczBxXlFopZBtoJ2diXGdNUymmJdFMAADs=
  
  
  
  C<URI> objects belonging to the data scheme support the common methods
  (described in L<URI>) and the following two scheme-specific methods:
  
  =over 4
  
  =item $uri->media_type( [$new_media_type] )
  
  Can be used to get or set the media type specified in the
  URI.  If no media type is specified, then the default
  C<"text/plain;charset=US-ASCII"> is returned.
  
  =item $uri->data( [$new_data] )
  
  Can be used to get or set the data contained in the URI.
  The data is passed unescaped (in binary form).  The decision about
  whether to base64 encode the data in the URI is taken automatically,
  based on the encoding that produces the shorter URI string.
  
  =back
  
  =head1 SEE ALSO
  
  L<URI>
  
  =head1 COPYRIGHT
  
  Copyright 1995-1998 Gisle Aas.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =cut
URI_DATA

    $main::fatpacked{"URI/file.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_FILE';
  package URI::file;
  
  use strict;
  use warnings;
  
  use parent 'URI::_generic';
  our $VERSION = "4.21";
  
  use URI::Escape qw(uri_unescape);
  
  our $DEFAULT_AUTHORITY = "";
  
  # Map from $^O values to implementation classes.  The Unix
  # class is the default.
  our %OS_CLASS = (
       os2     => "OS2",
       mac     => "Mac",
       MacOS   => "Mac",
       MSWin32 => "Win32",
       win32   => "Win32",
       msdos   => "FAT",
       dos     => "FAT",
       qnx     => "QNX",
  );
  
  sub os_class
  {
      my($OS) = shift || $^O;
  
      my $class = "URI::file::" . ($OS_CLASS{$OS} || "Unix");
      no strict 'refs';
      unless (%{"$class\::"}) {
  	eval "require $class";
  	die $@ if $@;
      }
      $class;
  }
  
  sub host { uri_unescape(shift->authority(@_)) }
  
  sub new
  {
      my($class, $path, $os) = @_;
      os_class($os)->new($path);
  }
  
  sub new_abs
  {
      my $class = shift;
      my $file = $class->new(@_);
      return $file->abs($class->cwd) unless $$file =~ /^file:/;
      $file;
  }
  
  sub cwd
  {
      my $class = shift;
      require Cwd;
      my $cwd = Cwd::cwd();
      $cwd = VMS::Filespec::unixpath($cwd) if $^O eq 'VMS';
      $cwd = $class->new($cwd);
      $cwd .= "/" unless substr($cwd, -1, 1) eq "/";
      $cwd;
  }
  
  sub canonical {
      my $self = shift;
      my $other = $self->SUPER::canonical;
  
      my $scheme = $other->scheme;
      my $auth = $other->authority;
      return $other if !defined($scheme) && !defined($auth);  # relative
  
      if (!defined($auth) ||
  	$auth eq "" ||
  	lc($auth) eq "localhost" ||
  	(defined($DEFAULT_AUTHORITY) && lc($auth) eq lc($DEFAULT_AUTHORITY))
         )
      {
  	# avoid cloning if $auth already match
  	if ((defined($auth) || defined($DEFAULT_AUTHORITY)) &&
  	    (!defined($auth) || !defined($DEFAULT_AUTHORITY) || $auth ne $DEFAULT_AUTHORITY)
  	   )
  	{
  	    $other = $other->clone if $self == $other;
  	    $other->authority($DEFAULT_AUTHORITY);
          }
      }
  
      $other;
  }
  
  sub file
  {
      my($self, $os) = @_;
      os_class($os)->file($self);
  }
  
  sub dir
  {
      my($self, $os) = @_;
      os_class($os)->dir($self);
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  URI::file - URI that maps to local file names
  
  =head1 SYNOPSIS
  
   use URI::file;
   
   $u1 = URI->new("file:/foo/bar");
   $u2 = URI->new("foo/bar", "file");
   
   $u3 = URI::file->new($path);
   $u4 = URI::file->new("c:\\windows\\", "win32");
   
   $u1->file;
   $u1->file("mac");
  
  =head1 DESCRIPTION
  
  The C<URI::file> class supports C<URI> objects belonging to the I<file>
  URI scheme.  This scheme allows us to map the conventional file names
  found on various computer systems to the URI name space.  An old
  specification of the I<file> URI scheme is found in RFC 1738.  Some
  older background information is also in RFC 1630. There are no newer
  specifications as far as I know.
  
  If you simply want to construct I<file> URI objects from URI strings,
  use the normal C<URI> constructor.  If you want to construct I<file>
  URI objects from the actual file names used by various systems, then
  use one of the following C<URI::file> constructors:
  
  =over 4
  
  =item $u = URI::file->new( $filename, [$os] )
  
  Maps a file name to the I<file:> URI name space, creates a URI object
  and returns it.  The $filename is interpreted as belonging to the
  indicated operating system ($os), which defaults to the value of the
  $^O variable.  The $filename can be either absolute or relative, and
  the corresponding type of URI object for $os is returned.
  
  =item $u = URI::file->new_abs( $filename, [$os] )
  
  Same as URI::file->new, but makes sure that the URI returned
  represents an absolute file name.  If the $filename argument is
  relative, then the name is resolved relative to the current directory,
  i.e. this constructor is really the same as:
  
    URI::file->new($filename)->abs(URI::file->cwd);
  
  =item $u = URI::file->cwd
  
  Returns a I<file> URI that represents the current working directory.
  See L<Cwd>.
  
  =back
  
  The following methods are supported for I<file> URI (in addition to
  the common and generic methods described in L<URI>):
  
  =over 4
  
  =item $u->file( [$os] )
  
  Returns a file name.  It maps from the URI name space
  to the file name space of the indicated operating system.
  
  It might return C<undef> if the name can not be represented in the
  indicated file system.
  
  =item $u->dir( [$os] )
  
  Some systems use a different form for names of directories than for plain
  files.  Use this method if you know you want to use the name for
  a directory.
  
  =back
  
  The C<URI::file> module can be used to map generic file names to names
  suitable for the current system.  As such, it can work as a nice
  replacement for the C<File::Spec> module.  For instance, the following
  code translates the UNIX-style file name F<Foo/Bar.pm> to a name
  suitable for the local system:
  
    $file = URI::file->new("Foo/Bar.pm", "unix")->file;
    die "Can't map filename Foo/Bar.pm for $^O" unless defined $file;
    open(FILE, $file) || die "Can't open '$file': $!";
    # do something with FILE
  
  =head1 MAPPING NOTES
  
  Most computer systems today have hierarchically organized file systems.
  Mapping the names used in these systems to the generic URI syntax
  allows us to work with relative file URIs that behave as they should
  when resolved using the generic algorithm for URIs (specified in RFC
  2396).  Mapping a file name to the generic URI syntax involves mapping
  the path separator character to "/" and encoding any reserved
  characters that appear in the path segments of the file name.  If
  path segments consisting of the strings "." or ".." have a
  different meaning than what is specified for generic URIs, then these
  must be encoded as well.
  
  If the file system has device, volume or drive specifications as
  the root of the name space, then it makes sense to map them to the
  authority field of the generic URI syntax.  This makes sure that
  relative URIs can not be resolved "above" them, i.e. generally how
  relative file names work in those systems.
  
  Another common use of the authority field is to encode the host on which
  this file name is valid.  The host name "localhost" is special and
  generally has the same meaning as a missing or empty authority
  field.  This use is in conflict with using it as a device
  specification, but can often be resolved for device specifications
  having characters not legal in plain host names.
  
  File name to URI mapping in normally not one-to-one.  There are
  usually many URIs that map to any given file name.  For instance, an
  authority of "localhost" maps the same as a URI with a missing or empty
  authority.
  
  Example 1: The Mac classic (Mac OS 9 and earlier) used ":" as path separator,
  but not in the same way as a generic URI. ":foo" was a relative name.  "foo:bar"
  was an absolute name.  Also, path segments could contain the "/" character as well
  as the literal "." or "..".  So the mapping looks like this:
  
    Mac classic           URI
    ----------            -------------------
    :foo:bar     <==>     foo/bar
    :            <==>     ./
    ::foo:bar    <==>     ../foo/bar
    :::          <==>     ../../
    foo:bar      <==>     file:/foo/bar
    foo:bar:     <==>     file:/foo/bar/
    ..           <==>     %2E%2E
    <undef>      <==      /
    foo/         <==      file:/foo%2F
    ./foo.txt    <==      file:/.%2Ffoo.txt
  
  Note that if you want a relative URL, you *must* begin the path with a :.  Any
  path that begins with [^:] is treated as absolute.
  
  Example 2: The UNIX file system is easy to map, as it uses the same path
  separator as URIs, has a single root, and segments of "." and ".."
  have the same meaning.  URIs that have the character "\0" or "/" as
  part of any path segment can not be turned into valid UNIX file names.
  
    UNIX                  URI
    ----------            ------------------
    foo/bar      <==>     foo/bar
    /foo/bar     <==>     file:/foo/bar
    /foo/bar     <==      file://localhost/foo/bar
    file:         ==>     ./file:
    <undef>      <==      file:/fo%00/bar
    /            <==>     file:/
  
  =cut
  
  
  RFC 1630
  
     [...]
  
     There is clearly a danger of confusion that a link made to a local
     file should be followed by someone on a different system, with
     unexpected and possibly harmful results.  Therefore, the convention
     is that even a "file" URL is provided with a host part.  This allows
     a client on another system to know that it cannot access the file
     system, or perhaps to use some other local mechanism to access the
     file.
  
     The special value "localhost" is used in the host field to indicate
     that the filename should really be used on whatever host one is.
     This for example allows links to be made to files which are
     distributed on many machines, or to "your unix local password file"
     subject of course to consistency across the users of the data.
  
     A void host field is equivalent to "localhost".
  
  =head1 CONFIGURATION VARIABLES
  
  The following configuration variables influence how the class and its
  methods behave:
  
  =over
  
  =item %URI::file::OS_CLASS
  
  This hash maps OS identifiers to implementation classes.  You might
  want to add or modify this if you want to plug in your own file
  handler class.  Normally the keys should match the $^O values in use.
  
  If there is no mapping then the "Unix" implementation is used.
  
  =item $URI::file::DEFAULT_AUTHORITY
  
  This determine what "authority" string to include in absolute file
  URIs.  It defaults to "".  If you prefer verbose URIs you might set it
  to be "localhost".
  
  Setting this value to C<undef> force behaviour compatible to URI v1.31
  and earlier.  In this mode host names in UNC paths and drive letters
  are mapped to the authority component on Windows, while we produce
  authority-less URIs on Unix.
  
  =back
  
  
  =head1 SEE ALSO
  
  L<URI>, L<File::Spec>, L<perlport>
  
  =head1 COPYRIGHT
  
  Copyright 1995-1998,2004 Gisle Aas.
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
  
  =cut
URI_FILE

    $main::fatpacked{"URI/file/Base.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_FILE_BASE';
  package URI::file::Base;
  
  use strict;
  use warnings;
  
  use URI::Escape qw();
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  sub new
  {
      my $class = shift;
      my $path  = shift;
      $path = "" unless defined $path;
  
      my($auth, $escaped_auth, $escaped_path);
  
      ($auth, $escaped_auth) = $class->_file_extract_authority($path);
      ($path, $escaped_path) = $class->_file_extract_path($path);
  
      if (defined $auth) {
  	$auth =~ s,%,%25,g unless $escaped_auth;
  	$auth =~ s,([/?\#]), URI::Escape::escape_char($1),eg;
  	$auth = "//$auth";
  	if (defined $path) {
  	    $path = "/$path" unless substr($path, 0, 1) eq "/";
  	} else {
  	    $path = "";
  	}
      } else {
  	return undef unless defined $path;
  	$auth = "";
      }
  
      $path =~ s,([%;?]), URI::Escape::escape_char($1),eg unless $escaped_path;
      $path =~ s/\#/%23/g;
  
      my $uri = $auth . $path;
      $uri = "file:$uri" if substr($uri, 0, 1) eq "/";
  
      URI->new($uri, "file");
  }
  
  sub _file_extract_authority
  {
      my($class, $path) = @_;
      return undef unless $class->_file_is_absolute($path);
      return $URI::file::DEFAULT_AUTHORITY;
  }
  
  sub _file_extract_path
  {
      return undef;
  }
  
  sub _file_is_absolute
  {
      return 0;
  }
  
  sub _file_is_localhost
  {
      shift; # class
      my $host = lc(shift);
      return 1 if $host eq "localhost";
      eval {
  	require Net::Domain;
  	lc(Net::Domain::hostfqdn()) eq $host ||
  	lc(Net::Domain::hostname()) eq $host;
      };
  }
  
  sub file
  {
      undef;
  }
  
  sub dir
  {
      my $self = shift;
      $self->file(@_);
  }
  
  1;
URI_FILE_BASE

    $main::fatpacked{"URI/file/FAT.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_FILE_FAT';
  package URI::file::FAT;
  
  use strict;
  use warnings;
  
  use parent 'URI::file::Win32';
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  sub fix_path
  {
      shift; # class
      for (@_) {
  	# turn it into 8.3 names
  	my @p = map uc, split(/\./, $_, -1);
  	return if @p > 2;     # more than 1 dot is not allowed
  	@p = ("") unless @p;  # split bug? (returns nothing when splitting "")
  	$_ = substr($p[0], 0, 8);
          if (@p > 1) {
  	    my $ext = substr($p[1], 0, 3);
  	    $_ .= ".$ext" if length $ext;
  	}
      }
      1;  # ok
  }
  
  1;
URI_FILE_FAT

    $main::fatpacked{"URI/file/Mac.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_FILE_MAC';
  package URI::file::Mac;
  
  use strict;
  use warnings;
  
  use parent 'URI::file::Base';
  
  use URI::Escape qw(uri_unescape);
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  sub _file_extract_path
  {
      my $class = shift;
      my $path = shift;
  
      my @pre;
      if ($path =~ s/^(:+)//) {
  	if (length($1) == 1) {
  	    @pre = (".") unless length($path);
  	} else {
  	    @pre = ("..") x (length($1) - 1);
  	}
      } else { #absolute
  	$pre[0] = "";
      }
  
      my $isdir = ($path =~ s/:$//);
      $path =~ s,([%/;]), URI::Escape::escape_char($1),eg;
  
      my @path = split(/:/, $path, -1);
      for (@path) {
  	if ($_ eq "." || $_ eq "..") {
  	    $_ = "%2E" x length($_);
  	}
  	$_ = ".." unless length($_);
      }
      push (@path,"") if $isdir;
      (join("/", @pre, @path), 1);
  }
  
  
  sub file
  {
      my $class = shift;
      my $uri = shift;
      my @path;
  
      my $auth = $uri->authority;
      if (defined $auth) {
  	if (lc($auth) ne "localhost" && $auth ne "") {
  	    my $u_auth = uri_unescape($auth);
  	    if (!$class->_file_is_localhost($u_auth)) {
  		# some other host (use it as volume name)
  		@path = ("", $auth);
  		# XXX or just return to make it illegal;
  	    }
  	}
      }
      my @ps = split("/", $uri->path, -1);
      shift @ps if @path;
      push(@path, @ps);
  
      my $pre = "";
      if (!@path) {
  	return;  # empty path; XXX return ":" instead?
      } elsif ($path[0] eq "") {
  	# absolute
  	shift(@path);
  	if (@path == 1) {
  	    return if $path[0] eq "";  # not root directory
  	    push(@path, "");           # volume only, effectively append ":"
  	}
  	@ps = @path;
  	@path = ();
          my $part;
  	for (@ps) {  #fix up "." and "..", including interior, in relatives
  	    next if $_ eq ".";
  	    $part = $_ eq ".." ? "" : $_;
  	    push(@path,$part);
  	}
  	if ($ps[-1] eq "..") {  #if this happens, we need another :
  	    push(@path,"");
  	}
  	
      } else {
  	$pre = ":";
  	@ps = @path;
  	@path = ();
          my $part;
  	for (@ps) {  #fix up "." and "..", including interior, in relatives
  	    next if $_ eq ".";
  	    $part = $_ eq ".." ? "" : $_;
  	    push(@path,$part);
  	}
  	if ($ps[-1] eq "..") {  #if this happens, we need another :
  	    push(@path,"");
  	}
  	
      }
      return unless $pre || @path;
      for (@path) {
  	s/;.*//;  # get rid of parameters
  	#return unless length; # XXX
  	$_ = uri_unescape($_);
  	return if /\0/;
  	return if /:/;  # Should we?
      }
      $pre . join(":", @path);
  }
  
  sub dir
  {
      my $class = shift;
      my $path = $class->file(@_);
      return unless defined $path;
      $path .= ":" unless $path =~ /:$/;
      $path;
  }
  
  1;
URI_FILE_MAC

    $main::fatpacked{"URI/file/OS2.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_FILE_OS2';
  package URI::file::OS2;
  
  use strict;
  use warnings;
  
  use parent 'URI::file::Win32';
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  # The Win32 version translates k:/foo to file://k:/foo  (?!)
  # We add an empty host
  
  sub _file_extract_authority
  {
      my $class = shift;
      return $1 if $_[0] =~ s,^\\\\([^\\]+),,;  # UNC
      return $1 if $_[0] =~ s,^//([^/]+),,;     # UNC too?
  
      if ($_[0] =~ m#^[a-zA-Z]{1,2}:#) {	      # allow for ab: drives
  	return "";
      }
      return;
  }
  
  sub file {
    my $p = &URI::file::Win32::file;
    return unless defined $p;
    $p =~ s,\\,/,g;
    $p;
  }
  
  1;
URI_FILE_OS2

    $main::fatpacked{"URI/file/QNX.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_FILE_QNX';
  package URI::file::QNX;
  
  use strict;
  use warnings;
  
  use parent 'URI::file::Unix';
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  sub _file_extract_path
  {
      my($class, $path) = @_;
      # tidy path
      $path =~ s,(.)//+,$1/,g; # ^// is correct
      $path =~ s,(/\.)+/,/,g;
      $path = "./$path" if $path =~ m,^[^:/]+:,,; # look like "scheme:"
      $path;
  }
  
  1;
URI_FILE_QNX

    $main::fatpacked{"URI/file/Unix.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_FILE_UNIX';
  package URI::file::Unix;
  
  use strict;
  use warnings;
  
  use parent 'URI::file::Base';
  
  use URI::Escape qw(uri_unescape);
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  sub _file_extract_path
  {
      my($class, $path) = @_;
  
      # tidy path
      $path =~ s,//+,/,g;
      $path =~ s,(/\.)+/,/,g;
      $path = "./$path" if $path =~ m,^[^:/]+:,,; # look like "scheme:"
  
      return $path;
  }
  
  sub _file_is_absolute {
      my($class, $path) = @_;
      return $path =~ m,^/,;
  }
  
  sub file
  {
      my $class = shift;
      my $uri = shift;
      my @path;
  
      my $auth = $uri->authority;
      if (defined($auth)) {
  	if (lc($auth) ne "localhost" && $auth ne "") {
  	    $auth = uri_unescape($auth);
  	    unless ($class->_file_is_localhost($auth)) {
  		push(@path, "", "", $auth);
  	    }
  	}
      }
  
      my @ps = $uri->path_segments;
      shift @ps if @path;
      push(@path, @ps);
  
      for (@path) {
  	# Unix file/directory names are not allowed to contain '\0' or '/'
  	return undef if /\0/;
  	return undef if /\//;  # should we really?
      }
  
      return join("/", @path);
  }
  
  1;
URI_FILE_UNIX

    $main::fatpacked{"URI/file/Win32.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_FILE_WIN32';
  package URI::file::Win32;
  
  use strict;
  use warnings;
  
  use parent 'URI::file::Base';
  
  use URI::Escape qw(uri_unescape);
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  sub _file_extract_authority
  {
      my $class = shift;
  
      return $class->SUPER::_file_extract_authority($_[0])
  	if defined $URI::file::DEFAULT_AUTHORITY;
  
      return $1 if $_[0] =~ s,^\\\\([^\\]+),,;  # UNC
      return $1 if $_[0] =~ s,^//([^/]+),,;     # UNC too?
  
      if ($_[0] =~ s,^([a-zA-Z]:),,) {
  	my $auth = $1;
  	$auth .= "relative" if $_[0] !~ m,^[\\/],;
  	return $auth;
      }
      return undef;
  }
  
  sub _file_extract_path
  {
      my($class, $path) = @_;
      $path =~ s,\\,/,g;
      #$path =~ s,//+,/,g;
      $path =~ s,(/\.)+/,/,g;
  
      if (defined $URI::file::DEFAULT_AUTHORITY) {
  	$path =~ s,^([a-zA-Z]:),/$1,;
      }
  
      return $path;
  }
  
  sub _file_is_absolute {
      my($class, $path) = @_;
      return $path =~ m,^[a-zA-Z]:, || $path =~ m,^[/\\],;
  }
  
  sub file
  {
      my $class = shift;
      my $uri = shift;
      my $auth = $uri->authority;
      my $rel; # is filename relative to drive specified in authority
      if (defined $auth) {
          $auth = uri_unescape($auth);
  	if ($auth =~ /^([a-zA-Z])[:|](relative)?/) {
  	    $auth = uc($1) . ":";
  	    $rel++ if $2;
  	} elsif (lc($auth) eq "localhost") {
  	    $auth = "";
  	} elsif (length $auth) {
  	    $auth = "\\\\" . $auth;  # UNC
  	}
      } else {
  	$auth = "";
      }
  
      my @path = $uri->path_segments;
      for (@path) {
  	return undef if /\0/;
  	return undef if /\//;
  	#return undef if /\\/;        # URLs with "\" is not uncommon
      }
      return undef unless $class->fix_path(@path);
  
      my $path = join("\\", @path);
      $path =~ s/^\\// if $rel;
      $path = $auth . $path;
      $path =~ s,^\\([a-zA-Z])[:|],\u$1:,;
  
      return $path;
  }
  
  sub fix_path { 1; }
  
  1;
URI_FILE_WIN32

    $main::fatpacked{"URI/ftp.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_FTP';
  package URI::ftp;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent qw(URI::_server URI::_userpass);
  
  sub default_port { 21 }
  
  sub path { shift->path_query(@_) }  # XXX
  
  sub _user     { shift->SUPER::user(@_);     }
  sub _password { shift->SUPER::password(@_); }
  
  sub user
  {
      my $self = shift;
      my $user = $self->_user(@_);
      $user = "anonymous" unless defined $user;
      $user;
  }
  
  sub password
  {
      my $self = shift;
      my $pass = $self->_password(@_);
      unless (defined $pass) {
  	my $user = $self->user;
  	if ($user eq 'anonymous' || $user eq 'ftp') {
  	    # anonymous ftp login password
              # If there is no ftp anonymous password specified
              # then we'll just use 'anonymous@'
              # We don't try to send the read e-mail address because:
              # - We want to remain anonymous
              # - We want to stop SPAM
              # - We don't want to let ftp sites to discriminate by the user,
              #   host, country or ftp client being used.
  	    $pass = 'anonymous@';
  	}
      }
      $pass;
  }
  
  1;
URI_FTP

    $main::fatpacked{"URI/gopher.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_GOPHER';
  package URI::gopher;  # <draft-murali-url-gopher>, Dec 4, 1996
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::_server';
  
  use URI::Escape qw(uri_unescape);
  
  #  A Gopher URL follows the common internet scheme syntax as defined in 
  #  section 4.3 of [RFC-URL-SYNTAX]:
  #
  #        gopher://<host>[:<port>]/<gopher-path>
  #
  #  where
  #
  #        <gopher-path> :=  <gopher-type><selector> | 
  #                          <gopher-type><selector>%09<search> |
  #                          <gopher-type><selector>%09<search>%09<gopher+_string>
  #
  #        <gopher-type> := '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7'
  #                         '8' | '9' | '+' | 'I' | 'g' | 'T'
  #
  #        <selector>    := *pchar     Refer to RFC 1808 [4]
  #        <search>      := *pchar
  #        <gopher+_string> := *uchar  Refer to RFC 1738 [3]
  #        
  #  If the optional port is omitted, the port defaults to 70. 
  
  sub default_port { 70 }
  
  sub _gopher_type
  {
      my $self = shift;
      my $path = $self->path_query;
      $path =~ s,^/,,;
      my $gtype = $1 if $path =~ s/^(.)//s;
      if (@_) {
  	my $new_type = shift;
  	if (defined($new_type)) {
  	    Carp::croak("Bad gopher type '$new_type'")
                 unless length($new_type) == 1;
  	    substr($path, 0, 0) = $new_type;
  	    $self->path_query($path);
  	} else {
  	    Carp::croak("Can't delete gopher type when selector is present")
  		if length($path);
  	    $self->path_query(undef);
  	}
      }
      return $gtype;
  }
  
  sub gopher_type
  {
      my $self = shift;
      my $gtype = $self->_gopher_type(@_);
      $gtype = "1" unless defined $gtype;
      $gtype;
  }
  
  sub gtype { goto &gopher_type }  # URI::URL compatibility
  
  sub selector { shift->_gfield(0, @_) }
  sub search   { shift->_gfield(1, @_) }
  sub string   { shift->_gfield(2, @_) }
  
  sub _gfield
  {
      my $self = shift;
      my $fno  = shift;
      my $path = $self->path_query;
  
      # not according to spec., but many popular browsers accept
      # gopher URLs with a '?' before the search string.
      $path =~ s/\?/\t/;
      $path = uri_unescape($path);
      $path =~ s,^/,,;
      my $gtype = $1 if $path =~ s,^(.),,s;
      my @path = split(/\t/, $path, 3);
      if (@_) {
  	# modify
  	my $new = shift;
  	$path[$fno] = $new;
  	pop(@path) while @path && !defined($path[-1]);
  	for (@path) { $_="" unless defined }
  	$path = $gtype;
  	$path = "1" unless defined $path;
  	$path .= join("\t", @path);
  	$self->path_query($path);
      }
      $path[$fno];
  }
  
  1;
URI_GOPHER

    $main::fatpacked{"URI/http.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_HTTP';
  package URI::http;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::_server';
  
  sub default_port { 80 }
  
  sub canonical
  {
      my $self = shift;
      my $other = $self->SUPER::canonical;
  
      my $slash_path = defined($other->authority) &&
          !length($other->path) && !defined($other->query);
  
      if ($slash_path) {
  	$other = $other->clone if $other == $self;
  	$other->path("/");
      }
      $other;
  }
  
  1;
URI_HTTP

    $main::fatpacked{"URI/https.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_HTTPS';
  package URI::https;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::http';
  
  sub default_port { 443 }
  
  sub secure { 1 }
  
  1;
URI_HTTPS

    $main::fatpacked{"URI/ldap.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_LDAP';
  # Copyright (c) 1998 Graham Barr <gbarr@pobox.com>. All rights reserved.
  # This program is free software; you can redistribute it and/or
  # modify it under the same terms as Perl itself.
  
  package URI::ldap;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent qw(URI::_ldap URI::_server);
  
  sub default_port { 389 }
  
  sub _nonldap_canonical {
      my $self = shift;
      $self->URI::_server::canonical(@_);
  }
  
  1;
  
  __END__
  
  =head1 NAME
  
  URI::ldap - LDAP Uniform Resource Locators
  
  =head1 SYNOPSIS
  
    use URI;
  
    $uri = URI->new("ldap:$uri_string");
    $dn     = $uri->dn;
    $filter = $uri->filter;
    @attr   = $uri->attributes;
    $scope  = $uri->scope;
    %extn   = $uri->extensions;
    
    $uri = URI->new("ldap:");  # start empty
    $uri->host("ldap.itd.umich.edu");
    $uri->dn("o=University of Michigan,c=US");
    $uri->attributes(qw(postalAddress));
    $uri->scope('sub');
    $uri->filter('(cn=Babs Jensen)');
    print $uri->as_string,"\n";
  
  =head1 DESCRIPTION
  
  C<URI::ldap> provides an interface to parse an LDAP URI into its
  constituent parts and also to build a URI as described in
  RFC 2255.
  
  =head1 METHODS
  
  C<URI::ldap> supports all the generic and server methods defined by
  L<URI>, plus the following.
  
  Each of the following methods can be used to set or get the value in
  the URI. The values are passed in unescaped form.  None of these
  return undefined values, but elements without a default can be empty.
  If arguments are given, then a new value is set for the given part
  of the URI.
  
  =over 4
  
  =item $uri->dn( [$new_dn] )
  
  Sets or gets the I<Distinguished Name> part of the URI.  The DN
  identifies the base object of the LDAP search.
  
  =item $uri->attributes( [@new_attrs] )
  
  Sets or gets the list of attribute names which are
  returned by the search.
  
  =item $uri->scope( [$new_scope] )
  
  Sets or gets the scope to be used by the search. The value can be one of
  C<"base">, C<"one"> or C<"sub">. If none is given in the URI then the
  return value defaults to C<"base">.
  
  =item $uri->_scope( [$new_scope] )
  
  Same as scope(), but does not default to anything.
  
  =item $uri->filter( [$new_filter] )
  
  Sets or gets the filter to be used by the search. If none is given in
  the URI then the return value defaults to C<"(objectClass=*)">.
  
  =item $uri->_filter( [$new_filter] )
  
  Same as filter(), but does not default to anything.
  
  =item $uri->extensions( [$etype => $evalue,...] )
  
  Sets or gets the extensions used for the search. The list passed should
  be in the form etype1 => evalue1, etype2 => evalue2,... This is also
  the form of list that is returned.
  
  =back
  
  =head1 SEE ALSO
  
  L<http://tools.ietf.org/html/rfc2255>
  
  =head1 AUTHOR
  
  Graham Barr E<lt>F<gbarr@pobox.com>E<gt>
  
  Slightly modified by Gisle Aas to fit into the URI distribution.
  
  =head1 COPYRIGHT
  
  Copyright (c) 1998 Graham Barr. All rights reserved. This program is
  free software; you can redistribute it and/or modify it under the same
  terms as Perl itself.
  
  =cut
URI_LDAP

    $main::fatpacked{"URI/ldapi.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_LDAPI';
  package URI::ldapi;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent qw(URI::_ldap URI::_generic);
  
  require URI::Escape;
  
  sub un_path {
      my $self = shift;
      my $old = URI::Escape::uri_unescape($self->authority);
      if (@_) {
  	my $p = shift;
  	$p =~ s/:/%3A/g;
  	$p =~ s/\@/%40/g;
  	$self->authority($p);
      }
      return $old;
  }
  
  sub _nonldap_canonical {
      my $self = shift;
      $self->URI::_generic::canonical(@_);
  }
  
  1;
URI_LDAPI

    $main::fatpacked{"URI/ldaps.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_LDAPS';
  package URI::ldaps;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::ldap';
  
  sub default_port { 636 }
  
  sub secure { 1 }
  
  1;
URI_LDAPS

    $main::fatpacked{"URI/mailto.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_MAILTO';
  package URI::mailto;  # RFC 2368
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent qw(URI URI::_query);
  
  sub to
  {
      my $self = shift;
      my @old = $self->headers;
      if (@_) {
  	my @new = @old;
  	# get rid of any other to: fields
  	for (my $i = 0; $i < @new; $i += 2) {
  	    if (lc($new[$i] || '') eq "to") {
  		splice(@new, $i, 2);
  		redo;
  	    }
  	}
  
  	my $to = shift;
  	$to = "" unless defined $to;
  	unshift(@new, "to" => $to);
  	$self->headers(@new);
      }
      return unless defined wantarray;
  
      my @to;
      while (@old) {
  	my $h = shift @old;
  	my $v = shift @old;
  	push(@to, $v) if lc($h) eq "to";
      }
      join(",", @to);
  }
  
  
  sub headers
  {
      my $self = shift;
  
      # The trick is to just treat everything as the query string...
      my $opaque = "to=" . $self->opaque;
      $opaque =~ s/\?/&/;
  
      if (@_) {
  	my @new = @_;
  
  	# strip out any "to" fields
  	my @to;
  	for (my $i=0; $i < @new; $i += 2) {
  	    if (lc($new[$i] || '') eq "to") {
  		push(@to, (splice(@new, $i, 2))[1]);  # remove header
  		redo;
  	    }
  	}
  
  	my $new = join(",",@to);
  	$new =~ s/%/%25/g;
  	$new =~ s/\?/%3F/g;
  	$self->opaque($new);
  	$self->query_form(@new) if @new;
      }
      return unless defined wantarray;
  
      # I am lazy today...
      URI->new("mailto:?$opaque")->query_form;
  }
  
  1;
URI_MAILTO

    $main::fatpacked{"URI/mms.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_MMS';
  package URI::mms;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::http';
  
  sub default_port { 1755 }
  
  1;
URI_MMS

    $main::fatpacked{"URI/news.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_NEWS';
  package URI::news;  # draft-gilman-news-url-01
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::_server';
  
  use URI::Escape qw(uri_unescape);
  use Carp ();
  
  sub default_port { 119 }
  
  #   newsURL      =  scheme ":" [ news-server ] [ refbygroup | message ]
  #   scheme       =  "news" | "snews" | "nntp"
  #   news-server  =  "//" server "/"
  #   refbygroup   = group [ "/" messageno [ "-" messageno ] ]
  #   message      = local-part "@" domain
  
  sub _group
  {
      my $self = shift;
      my $old = $self->path;
      if (@_) {
  	my($group,$from,$to) = @_;
  	if ($group =~ /\@/) {
              $group =~ s/^<(.*)>$/$1/;  # "<" and ">" should not be part of it
  	}
  	$group =~ s,%,%25,g;
  	$group =~ s,/,%2F,g;
  	my $path = $group;
  	if (defined $from) {
  	    $path .= "/$from";
  	    $path .= "-$to" if defined $to;
  	}
  	$self->path($path);
      }
  
      $old =~ s,^/,,;
      if ($old !~ /\@/ && $old =~ s,/(.*),, && wantarray) {
  	my $extra = $1;
  	return (uri_unescape($old), split(/-/, $extra));
      }
      uri_unescape($old);
  }
  
  
  sub group
  {
      my $self = shift;
      if (@_) {
  	Carp::croak("Group name can't contain '\@'") if $_[0] =~ /\@/;
      }
      my @old = $self->_group(@_);
      return if $old[0] =~ /\@/;
      wantarray ? @old : $old[0];
  }
  
  sub message
  {
      my $self = shift;
      if (@_) {
  	Carp::croak("Message must contain '\@'") unless $_[0] =~ /\@/;
      }
      my $old = $self->_group(@_);
      return undef unless $old =~ /\@/;
      return $old;
  }
  
  1;
URI_NEWS

    $main::fatpacked{"URI/nntp.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_NNTP';
  package URI::nntp;  # draft-gilman-news-url-01
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::news';
  
  1;
URI_NNTP

    $main::fatpacked{"URI/pop.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_POP';
  package URI::pop;   # RFC 2384
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::_server';
  
  use URI::Escape qw(uri_unescape);
  
  sub default_port { 110 }
  
  #pop://<user>;auth=<auth>@<host>:<port>
  
  sub user
  {
      my $self = shift;
      my $old = $self->userinfo;
  
      if (@_) {
  	my $new_info = $old;
  	$new_info = "" unless defined $new_info;
  	$new_info =~ s/^[^;]*//;
  
  	my $new = shift;
  	if (!defined($new) && !length($new_info)) {
  	    $self->userinfo(undef);
  	} else {
  	    $new = "" unless defined $new;
  	    $new =~ s/%/%25/g;
  	    $new =~ s/;/%3B/g;
  	    $self->userinfo("$new$new_info");
  	}
      }
  
      return undef unless defined $old;
      $old =~ s/;.*//;
      return uri_unescape($old);
  }
  
  sub auth
  {
      my $self = shift;
      my $old = $self->userinfo;
  
      if (@_) {
  	my $new = $old;
  	$new = "" unless defined $new;
  	$new =~ s/(^[^;]*)//;
  	my $user = $1;
  	$new =~ s/;auth=[^;]*//i;
  
  	
  	my $auth = shift;
  	if (defined $auth) {
  	    $auth =~ s/%/%25/g;
  	    $auth =~ s/;/%3B/g;
  	    $new = ";AUTH=$auth$new";
  	}
  	$self->userinfo("$user$new");
  	
      }
  
      return undef unless defined $old;
      $old =~ s/^[^;]*//;
      return uri_unescape($1) if $old =~ /;auth=(.*)/i;
      return;
  }
  
  1;
URI_POP

    $main::fatpacked{"URI/rlogin.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_RLOGIN';
  package URI::rlogin;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::_login';
  
  sub default_port { 513 }
  
  1;
URI_RLOGIN

    $main::fatpacked{"URI/rsync.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_RSYNC';
  package URI::rsync;  # http://rsync.samba.org/
  
  # rsync://[USER@]HOST[:PORT]/SRC
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent qw(URI::_server URI::_userpass);
  
  sub default_port { 873 }
  
  1;
URI_RSYNC

    $main::fatpacked{"URI/rtsp.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_RTSP';
  package URI::rtsp;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::http';
  
  sub default_port { 554 }
  
  1;
URI_RTSP

    $main::fatpacked{"URI/rtspu.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_RTSPU';
  package URI::rtspu;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::rtsp';
  
  sub default_port { 554 }
  
  1;
URI_RTSPU

    $main::fatpacked{"URI/sftp.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_SFTP';
  package URI::sftp;
  
  use strict;
  use warnings;
  
  use parent 'URI::ssh';
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  1;
URI_SFTP

    $main::fatpacked{"URI/sip.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_SIP';
  #
  # Written by Ryan Kereliuk <ryker@ryker.org>.  This file may be
  # distributed under the same terms as Perl itself.
  #
  # The RFC 3261 sip URI is <scheme>:<authority>;<params>?<query>.
  #
  
  package URI::sip;
  
  use strict;
  use warnings;
  
  use parent qw(URI::_server URI::_userpass);
  
  use URI::Escape qw(uri_unescape);
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  sub default_port { 5060 }
  
  sub authority
  {
      my $self = shift;
      $$self =~ m,^($URI::scheme_re:)?([^;?]*)(.*)$,os or die;
      my $old = $2;
  
      if (@_) {
          my $auth = shift;
          $$self = defined($1) ? $1 : "";
          my $rest = $3;
          if (defined $auth) {
              $auth =~ s/([^$URI::uric])/ URI::Escape::escape_char($1)/ego;
              $$self .= "$auth";
          }
          $$self .= $rest;
      }
      $old;
  }
  
  sub params_form
  {
      my $self = shift;
      $$self =~ m,^((?:$URI::scheme_re:)?)(?:([^;?]*))?(;[^?]*)?(.*)$,os or die;
      my $paramstr = $3;
  
      if (@_) {
      	my @args = @_; 
          $$self = $1 . $2;
          my $rest = $4;
  	my @new;
  	for (my $i=0; $i < @args; $i += 2) {
  	    push(@new, "$args[$i]=$args[$i+1]");
  	}
  	$paramstr = join(";", @new);
  	$$self .= ";" . $paramstr . $rest;
      }
      $paramstr =~ s/^;//o;
      return split(/[;=]/, $paramstr);
  }
  
  sub params
  {
      my $self = shift;
      $$self =~ m,^((?:$URI::scheme_re:)?)(?:([^;?]*))?(;[^?]*)?(.*)$,os or die;
      my $paramstr = $3;
  
      if (@_) {
      	my $new = shift; 
          $$self = $1 . $2;
          my $rest = $4;
  	$$self .= $paramstr . $rest;
      }
      $paramstr =~ s/^;//o;
      return $paramstr;
  }
  
  # Inherited methods that make no sense for a SIP URI.
  sub path {}
  sub path_query {}
  sub path_segments {}
  sub abs { shift }
  sub rel { shift }
  sub query_keywords {}
  
  1;
URI_SIP

    $main::fatpacked{"URI/sips.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_SIPS';
  package URI::sips;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::sip';
  
  sub default_port { 5061 }
  
  sub secure { 1 }
  
  1;
URI_SIPS

    $main::fatpacked{"URI/snews.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_SNEWS';
  package URI::snews;  # draft-gilman-news-url-01
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::news';
  
  sub default_port { 563 }
  
  sub secure { 1 }
  
  1;
URI_SNEWS

    $main::fatpacked{"URI/ssh.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_SSH';
  package URI::ssh;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::_login';
  
  # ssh://[USER@]HOST[:PORT]/SRC
  
  sub default_port { 22 }
  
  sub secure { 1 }
  
  1;
URI_SSH

    $main::fatpacked{"URI/telnet.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_TELNET';
  package URI::telnet;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::_login';
  
  sub default_port { 23 }
  
  1;
URI_TELNET

    $main::fatpacked{"URI/tn3270.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_TN3270';
  package URI::tn3270;
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::_login';
  
  sub default_port { 23 }
  
  1;
URI_TN3270

    $main::fatpacked{"URI/urn.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_URN';
  package URI::urn;  # RFC 2141
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI';
  
  use Carp qw(carp);
  
  my %implementor;
  my %require_attempted;
  
  sub _init {
      my $class = shift;
      my $self = $class->SUPER::_init(@_);
      my $nid = $self->nid;
  
      my $impclass = $implementor{$nid};
      return $impclass->_urn_init($self, $nid) if $impclass;
  
      $impclass = "URI::urn";
      if ($nid =~ /^[A-Za-z\d][A-Za-z\d\-]*\z/) {
  	my $id = $nid;
  	# make it a legal perl identifier
  	$id =~ s/-/_/g;
  	$id = "_$id" if $id =~ /^\d/;
  
  	$impclass = "URI::urn::$id";
  	no strict 'refs';
  	unless (@{"${impclass}::ISA"}) {
              if (not exists $require_attempted{$impclass}) {
                  # Try to load it
                  my $_old_error = $@;
                  eval "require $impclass";
                  die $@ if $@ && $@ !~ /Can\'t locate.*in \@INC/;
                  $@ = $_old_error;
              }
  	    $impclass = "URI::urn" unless @{"${impclass}::ISA"};
  	}
      }
      else {
  	carp("Illegal namespace identifier '$nid' for URN '$self'") if $^W;
      }
      $implementor{$nid} = $impclass;
  
      return $impclass->_urn_init($self, $nid);
  }
  
  sub _urn_init {
      my($class, $self, $nid) = @_;
      bless $self, $class;
  }
  
  sub _nid {
      my $self = shift;
      my $opaque = $self->opaque;
      if (@_) {
  	my $v = $opaque;
  	my $new = shift;
  	$v =~ s/[^:]*/$new/;
  	$self->opaque($v);
  	# XXX possible rebless
      }
      $opaque =~ s/:.*//s;
      return $opaque;
  }
  
  sub nid {  # namespace identifier
      my $self = shift;
      my $nid = $self->_nid(@_);
      $nid = lc($nid) if defined($nid);
      return $nid;
  }
  
  sub nss {  # namespace specific string
      my $self = shift;
      my $opaque = $self->opaque;
      if (@_) {
  	my $v = $opaque;
  	my $new = shift;
  	if (defined $new) {
  	    $v =~ s/(:|\z).*/:$new/;
  	}
  	else {
  	    $v =~ s/:.*//s;
  	}
  	$self->opaque($v);
      }
      return undef unless $opaque =~ s/^[^:]*://;
      return $opaque;
  }
  
  sub canonical {
      my $self = shift;
      my $nid = $self->_nid;
      my $new = $self->SUPER::canonical;
      return $new if $nid !~ /[A-Z]/ || $nid =~ /%/;
      $new = $new->clone if $new == $self;
      $new->nid(lc($nid));
      return $new;
  }
  
  1;
URI_URN

    $main::fatpacked{"URI/urn/isbn.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_URN_ISBN';
  package URI::urn::isbn;  # RFC 3187
  
  use strict;
  use warnings;
  
  use parent 'URI::urn';
  
  use Carp qw(carp);
  
  BEGIN {
      require Business::ISBN;
      
      local $^W = 0; # don't warn about dev versions, perl5.004 style
      warn "Using Business::ISBN version " . Business::ISBN->VERSION . 
          " which is deprecated.\nUpgrade to Business::ISBN version 2\n"
          if Business::ISBN->VERSION < 2;
      }
      
  sub _isbn {
      my $nss = shift;
      $nss = $nss->nss if ref($nss);
      my $isbn = Business::ISBN->new($nss);
      $isbn = undef if $isbn && !$isbn->is_valid;
      return $isbn;
  }
  
  sub _nss_isbn {
      my $self = shift;
      my $nss = $self->nss(@_);
      my $isbn = _isbn($nss);
      $isbn = $isbn->as_string if $isbn;
      return($nss, $isbn);
  }
  
  sub isbn {
      my $self = shift;
      my $isbn;
      (undef, $isbn) = $self->_nss_isbn(@_);
      return $isbn;
  }
  
  sub isbn_publisher_code {
      my $isbn = shift->_isbn || return undef;
      return $isbn->publisher_code;
  }
  
  BEGIN {
  my $group_method = do {
      local $^W = 0; # don't warn about dev versions, perl5.004 style
      Business::ISBN->VERSION >= 2 ? 'group_code' : 'country_code';
      };
  
  sub isbn_group_code {
      my $isbn = shift->_isbn || return undef;
      return $isbn->$group_method;
  }
  }
  
  sub isbn_country_code {
      my $name = (caller(0))[3]; $name =~ s/.*:://;
      carp "$name is DEPRECATED. Use isbn_group_code instead";
      
      no strict 'refs';
      &isbn_group_code;
  }
  
  BEGIN {
  my $isbn13_method = do {
      local $^W = 0; # don't warn about dev versions, perl5.004 style
      Business::ISBN->VERSION >= 2 ? 'as_isbn13' : 'as_ean';
      };
  
  sub isbn13 {
      my $isbn = shift->_isbn || return undef;
      
      # Business::ISBN 1.x didn't put hyphens in the EAN, and it was just a string
      # Business::ISBN 2.0 doesn't do EAN, but it does ISBN-13 objects
      #   and it uses the hyphens, so call as_string with an empty anon array
      # or, adjust the test and features to say that it comes out with hyphens.
      my $thingy = $isbn->$isbn13_method;
      return eval { $thingy->can( 'as_string' ) } ? $thingy->as_string([]) : $thingy;
  }
  }
  
  sub isbn_as_ean {
      my $name = (caller(0))[3]; $name =~ s/.*:://;
      carp "$name is DEPRECATED. Use isbn13 instead";
  
      no strict 'refs';
      &isbn13;
  }
  
  sub canonical {
      my $self = shift;
      my($nss, $isbn) = $self->_nss_isbn;
      my $new = $self->SUPER::canonical;
      return $new unless $nss && $isbn && $nss ne $isbn;
      $new = $new->clone if $new == $self;
      $new->nss($isbn);
      return $new;
  }
  
  1;
URI_URN_ISBN

    $main::fatpacked{"URI/urn/oid.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'URI_URN_OID';
  package URI::urn::oid;  # RFC 2061
  
  use strict;
  use warnings;
  
  our $VERSION = '1.71';
  $VERSION = eval $VERSION;
  
  use parent 'URI::urn';
  
  sub oid {
      my $self = shift;
      my $old = $self->nss;
      if (@_) {
  	$self->nss(join(".", @_));
      }
      return split(/\./, $old) if wantarray;
      return $old;
  }
  
  1;
URI_URN_OID

    $main::fatpacked{"UUID/Random.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'UUID_RANDOM';
  package UUID::Random;
  
  require 5.006_001;
  use strict;
  use warnings;
  
  
  our $VERSION = '0.04';
  
  sub generate {
    my @chars = ('a'..'f',0..9);
    my @string;
    push(@string, $chars[int(rand(16))]) for(1..32);
    splice(@string,8,0,'-');
    splice(@string,13,0,'-');
    splice(@string,18,0,'-');
    splice(@string,23,0,'-');
    return join('', @string);
  }
  
  1;
  __END__
  
  =head1 NAME
  
  UUID::Random - Generate random uuid strings
  
  =head1 SYNOPSIS
  
    use UUID::Random;
    my $uuid = UUID::Random::generate;
  
  =head1 DESCRIPTION
  
  This module generates random uuid strings. It does not satisfy any of the points listed in RFC 4122 (L<http://tools.ietf.org/html/rfc4122>) but the default format.
  
  
  
  =head1 SEE ALSO
  
  If you need RFC compliant UUID strings have a look at L<Data::UUID>
  
  =head1 AUTHOR
  
  Moritz Onken, E<lt>onken@houseofdesign.deE<gt>
  
  =head1 COPYRIGHT AND LICENSE
  
  Copyright (C) 2008 by Moritz Onken
  
  This library is free software; you can redistribute it and/or modify
  it under the same terms as Perl itself, either Perl version 5.8.8 or,
  at your option, any later version of Perl 5 you may have available.
  
  
  =cut
UUID_RANDOM

    $main::fatpacked{"WWW/Mechanize.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'WWW_MECHANIZE';
  package WWW::Mechanize;
  
  #ABSTRACT: Handy web browsing in a Perl object
  
  
  
  use strict;
  use warnings;
  
  our $VERSION = 1.78;
  
  use HTTP::Request 1.30;
  use LWP::UserAgent 5.827;
  use HTML::Form 1.00;
  use HTML::TokeParser;
  
  use base 'LWP::UserAgent';
  
  our $HAS_ZLIB;
  BEGIN {
      $HAS_ZLIB = eval 'use Compress::Zlib (); 1;';
  }
  
  
  sub new {
      my $class = shift;
  
      my %parent_parms = (
          agent       => "WWW-Mechanize/$VERSION",
          cookie_jar  => {},
      );
  
      my %mech_parms = (
          autocheck   => ($class eq 'WWW::Mechanize' ? 1 : 0),
          onwarn      => \&WWW::Mechanize::_warn,
          onerror     => \&WWW::Mechanize::_die,
          quiet       => 0,
          stack_depth => 8675309,     # Arbitrarily humongous stack
          headers     => {},
          noproxy     => 0,
      );
  
      my %passed_parms = @_;
  
      # Keep the mech-specific parms before creating the object.
      while ( my($key,$value) = each %passed_parms ) {
          if ( exists $mech_parms{$key} ) {
              $mech_parms{$key} = $value;
          }
          else {
              $parent_parms{$key} = $value;
          }
      }
  
      my $self = $class->SUPER::new( %parent_parms );
      bless $self, $class;
  
      # Use the mech parms now that we have a mech object.
      for my $parm ( keys %mech_parms ) {
          $self->{$parm} = $mech_parms{$parm};
      }
      $self->{page_stack} = [];
      $self->env_proxy() unless $mech_parms{noproxy};
  
      # libwww-perl 5.800 (and before, I assume) has a problem where
      # $ua->{proxy} can be undef and clone() doesn't handle it.
      $self->{proxy} = {} unless defined $self->{proxy};
      push( @{$self->requests_redirectable}, 'POST' );
  
      $self->_reset_page();
  
      return $self;
  }
  
  
  my %known_agents = (
      'Windows IE 6'      => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)',
      'Windows Mozilla'   => 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4b) Gecko/20030516 Mozilla Firebird/0.6',
      'Mac Safari'        => 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/85 (KHTML, like Gecko) Safari/85',
      'Mac Mozilla'       => 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.4a) Gecko/20030401',
      'Linux Mozilla'     => 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624',
      'Linux Konqueror'   => 'Mozilla/5.0 (compatible; Konqueror/3; Linux)',
  );
  
  sub agent_alias {
      my $self = shift;
      my $alias = shift;
  
      if ( defined $known_agents{$alias} ) {
          return $self->agent( $known_agents{$alias} );
      }
      else {
          $self->warn( qq{Unknown agent alias "$alias"} );
          return $self->agent();
      }
  }
  
  
  sub known_agent_aliases {
      return sort keys %known_agents;
  }
  
  
  sub get {
      my $self = shift;
      my $uri = shift;
  
      $uri = $uri->url if ref($uri) eq 'WWW::Mechanize::Link';
  
      $uri = $self->base
              ? URI->new_abs( $uri, $self->base )
              : URI->new( $uri );
  
      # It appears we are returning a super-class method,
      # but it in turn calls the request() method here in Mechanize
      return $self->SUPER::get( $uri->as_string, @_ );
  }
  
  
  sub put {
      my $self = shift;
      my $uri = shift;
  
      $uri = $uri->url if ref($uri) eq 'WWW::Mechanize::Link';
  
      $uri = $self->base
              ? URI->new_abs( $uri, $self->base )
              : URI->new( $uri );
  
      # It appears we are returning a super-class method,
      # but it in turn calls the request() method here in Mechanize
      return $self->_SUPER_put( $uri->as_string, @_ );
  }
  
  
  # Added until LWP::UserAgent has it.
  sub _SUPER_put {
      require HTTP::Request::Common;
      my($self, @parameters) = @_;
      my @suff = $self->_process_colonic_headers(\@parameters,1);
      return $self->request( HTTP::Request::Common::PUT( @parameters ), @suff );
  }
  
  
  sub reload {
      my $self = shift;
  
      return unless my $req = $self->{req};
  
      return $self->_update_page( $req, $self->_make_request( $req, @_ ) );
  }
  
  
  sub back {
      my $self = shift;
  
      my $stack = $self->{page_stack};
      return unless $stack && @{$stack};
  
      my $popped = pop @{$self->{page_stack}};
      my $req    = $popped->{req};
      my $res    = $popped->{res};
  
      $self->_update_page( $req, $res );
  
      return 1;
  }
  
  
  sub history_count {
      my $self = shift;
  
      # If we don't have a "current" page, we certainly don't have any previous
      # ones.
      return 0 unless $self->{req} && $self->{res};
  
      my $stack = $self->{page_stack};
  
      return 1 unless $stack;
  
      return 1 + @$stack;
  }
  
  
  sub history {
      my $self = shift;
      my $n    = shift;
  
      return undef unless $self->{req} && $self->{res};
  
      if ($n == 0) {
        return { req => $self->{req}, res => $self->{res} };
      }
  
      my $stack = $self->{page_stack};
      return undef unless $stack && @$stack >= $n;
  
      return { req => $stack->[-$n]{req}, res => $stack->[-$n]{res} };
  }
  
  
  sub success {
      my $self = shift;
  
      return $self->res && $self->res->is_success;
  }
  
  
  
  sub uri {
      my $self = shift;
      return $self->response->request->uri;
  }
  
  sub res {           my $self = shift; return $self->{res}; }
  sub response {      my $self = shift; return $self->{res}; }
  sub status {        my $self = shift; return $self->{status}; }
  sub ct {            my $self = shift; return $self->{ct}; }
  sub content_type {  my $self = shift; return $self->{ct}; }
  sub base {          my $self = shift; return $self->{base}; }
  sub is_html {
      my $self = shift;
      return defined $self->ct &&
          ($self->ct eq 'text/html' || $self->ct eq 'application/xhtml+xml');
  }
  
  
  sub title {
      my $self = shift;
  
      return unless $self->is_html;
  
      if ( not defined $self->{title} ) {
          require HTML::HeadParser;
          my $p = HTML::HeadParser->new;
          $p->parse($self->content);
          $self->{title} = $p->header('Title');
      }
      return $self->{title};
  }
  
  
  sub content {
      my $self = shift;
      my %parms = @_;
  
      my $content = $self->{content};
      if (delete $parms{raw}) {
          $content = $self->response()->content();
      }
      elsif (delete $parms{decoded_by_headers}) {
          $content = $self->response()->decoded_content(charset => 'none');
      }
      elsif (my $charset = delete $parms{charset}) {
          $content = $self->response()->decoded_content(charset => $charset);
      }
      elsif ( $self->is_html ) {
          if ( exists $parms{base_href} ) {
              my $base_href = (delete $parms{base_href}) || $self->base;
              $content=~s/<head>/<head>\n<base href="$base_href">/i;
          }
  
          if ( my $format = delete $parms{format} ) {
              if ( $format eq 'text' ) {
                  $content = $self->text;
              }
              else {
                  $self->die( qq{Unknown "format" parameter "$format"} );
              }
          }
  
          $self->_check_unhandled_parms( %parms );
      }
  
      return $content;
  }
  
  
  sub text {
      my $self = shift;
  
      if ( not defined $self->{text} ) {
          require HTML::TreeBuilder;
          my $tree = HTML::TreeBuilder->new();
          $tree->parse( $self->content );
          $tree->eof();
          $tree->elementify(); # just for safety
          $self->{text} = $tree->as_text();
          $tree->delete;
      }
  
      return $self->{text};
  }
  
  sub _check_unhandled_parms {
      my $self  = shift;
      my %parms = @_;
  
      for my $cmd ( sort keys %parms ) {
          $self->die( qq{Unknown named argument "$cmd"} );
      }
  }
  
  
  sub links {
      my $self = shift;
  
      $self->_extract_links() unless $self->{links};
  
      return @{$self->{links}} if wantarray;
      return $self->{links};
  }
  
  
  sub follow_link {
      my $self = shift;
      $self->die( qq{Needs to get key-value pairs of parameters.} ) if @_ % 2;
      my %parms = ( n=>1, @_ );
  
      if ( $parms{n} eq 'all' ) {
          delete $parms{n};
          $self->warn( q{follow_link(n=>"all") is not valid} );
      }
  
      my $link = $self->find_link(%parms);
      if ( $link ) {
          return $self->get( $link->url );
      }
  
      if ( $self->{autocheck} ) {
          $self->die( 'Link not found' );
      }
  
      return;
  }
  
  
  sub find_link {
      my $self = shift;
      my %parms = ( n=>1, @_ );
  
      my $wantall = ( $parms{n} eq 'all' );
  
      $self->_clean_keys( \%parms, qr/^(n|(text|url|url_abs|name|tag|id|class)(_regex)?)$/ );
  
      my @links = $self->links or return;
  
      my $nmatches = 0;
      my @matches;
      for my $link ( @links ) {
          if ( _match_any_link_parms($link,\%parms) ) {
              if ( $wantall ) {
                  push( @matches, $link );
              }
              else {
                  ++$nmatches;
                  return $link if $nmatches >= $parms{n};
              }
          }
      } # for @links
  
      if ( $wantall ) {
          return @matches if wantarray;
          return \@matches;
      }
  
      return;
  } # find_link
  
  # Used by find_links to check for matches
  # The logic is such that ALL parm criteria that are given must match
  sub _match_any_link_parms {
      my $link = shift;
      my $p = shift;
  
      # No conditions, anything matches
      return 1 unless keys %$p;
  
      return if defined $p->{url}           && !($link->url eq $p->{url} );
      return if defined $p->{url_regex}     && !($link->url =~ $p->{url_regex} );
      return if defined $p->{url_abs}       && !($link->url_abs eq $p->{url_abs} );
      return if defined $p->{url_abs_regex} && !($link->url_abs =~ $p->{url_abs_regex} );
      return if defined $p->{text}          && !(defined($link->text) && $link->text eq $p->{text} );
      return if defined $p->{text_regex}    && !(defined($link->text) && $link->text =~ $p->{text_regex} );
      return if defined $p->{name}          && !(defined($link->name) && $link->name eq $p->{name} );
      return if defined $p->{name_regex}    && !(defined($link->name) && $link->name =~ $p->{name_regex} );
      return if defined $p->{tag}           && !($link->tag && $link->tag eq $p->{tag} );
      return if defined $p->{tag_regex}     && !($link->tag && $link->tag =~ $p->{tag_regex} );
  
      return if defined $p->{id}            && !($link->attrs->{id} && $link->attrs->{id} eq $p->{id} );
      return if defined $p->{id_regex}      && !($link->attrs->{id} && $link->attrs->{id} =~ $p->{id_regex} );
      return if defined $p->{class}         && !($link->attrs->{class} && $link->attrs->{class} eq $p->{class} );
      return if defined $p->{class_regex}   && !($link->attrs->{class} && $link->attrs->{class} =~ $p->{class_regex} );
  
      # Success: everything that was defined passed.
      return 1;
  
  }
  
  # Cleans the %parms parameter for the find_link and find_image methods.
  sub _clean_keys {
      my $self = shift;
      my $parms = shift;
      my $rx_keyname = shift;
  
      for my $key ( keys %$parms ) {
          my $val = $parms->{$key};
          if ( $key !~ qr/$rx_keyname/ ) {
              $self->warn( qq{Unknown link-finding parameter "$key"} );
              delete $parms->{$key};
              next;
          }
  
          my $key_regex = ( $key =~ /_regex$/ );
          my $val_regex = ( ref($val) eq 'Regexp' );
  
          if ( $key_regex ) {
              if ( !$val_regex ) {
                  $self->warn( qq{$val passed as $key is not a regex} );
                  delete $parms->{$key};
                  next;
              }
          }
          else {
              if ( $val_regex ) {
                  $self->warn( qq{$val passed as '$key' is a regex} );
                  delete $parms->{$key};
                  next;
              }
              if ( $val =~ /^\s|\s$/ ) {
                  $self->warn( qq{'$val' is space-padded and cannot succeed} );
                  delete $parms->{$key};
                  next;
              }
          }
      } # for keys %parms
  
      return;
  } # _clean_keys()
  
  
  
  sub find_all_links {
      my $self = shift;
      return $self->find_link( @_, n=>'all' );
  }
  
  
  sub find_all_inputs {
      my $self = shift;
      my %criteria = @_;
  
      my $form = $self->current_form() or return;
  
      my @found;
      foreach my $input ( $form->inputs ) { # check every pattern for a match on the current hash
          my $matched = 1;
          foreach my $criterion ( sort keys %criteria ) { # Sort so we're deterministic
              my $field = $criterion;
              my $is_regex = ( $field =~ s/(?:_regex)$// );
              my $what = $input->{$field};
              $matched = defined($what) && (
                  $is_regex
                      ? ( $what =~ $criteria{$criterion} )
                      : ( $what eq $criteria{$criterion} )
                  );
              last if !$matched;
          }
          push @found, $input if $matched;
      }
      return @found;
  }
  
  
  sub find_all_submits {
      my $self = shift;
  
      return $self->find_all_inputs( @_, type_regex => qr/^(submit|image)$/ );
  }
  
  
  
  sub images {
      my $self = shift;
  
      $self->_extract_images() unless $self->{images};
  
      return @{$self->{images}} if wantarray;
      return $self->{images};
  }
  
  
  sub find_image {
      my $self = shift;
      my %parms = ( n=>1, @_ );
  
      my $wantall = ( $parms{n} eq 'all' );
  
      $self->_clean_keys( \%parms, qr/^(n|(alt|url|url_abs|tag)(_regex)?)$/ );
  
      my @images = $self->images or return;
  
      my $nmatches = 0;
      my @matches;
      for my $image ( @images ) {
          if ( _match_any_image_parms($image,\%parms) ) {
              if ( $wantall ) {
                  push( @matches, $image );
              }
              else {
                  ++$nmatches;
                  return $image if $nmatches >= $parms{n};
              }
          }
      } # for @images
  
      if ( $wantall ) {
          return @matches if wantarray;
          return \@matches;
      }
  
      return;
  }
  
  # Used by find_images to check for matches
  # The logic is such that ALL parm criteria that are given must match
  sub _match_any_image_parms {
      my $image = shift;
      my $p = shift;
  
      # No conditions, anything matches
      return 1 unless keys %$p;
  
      return if defined $p->{url}           && !($image->url eq $p->{url} );
      return if defined $p->{url_regex}     && !($image->url =~ $p->{url_regex} );
      return if defined $p->{url_abs}       && !($image->url_abs eq $p->{url_abs} );
      return if defined $p->{url_abs_regex} && !($image->url_abs =~ $p->{url_abs_regex} );
      return if defined $p->{alt}           && !(defined($image->alt) && $image->alt eq $p->{alt} );
      return if defined $p->{alt_regex}     && !(defined($image->alt) && $image->alt =~ $p->{alt_regex} );
      return if defined $p->{tag}           && !($image->tag && $image->tag eq $p->{tag} );
      return if defined $p->{tag_regex}     && !($image->tag && $image->tag =~ $p->{tag_regex} );
  
      # Success: everything that was defined passed.
      return 1;
  }
  
  
  
  sub find_all_images {
      my $self = shift;
      return $self->find_image( @_, n=>'all' );
  }
  
  
  sub forms {
      my $self = shift;
  
      $self->_extract_forms() unless $self->{forms};
  
      return @{$self->{forms}} if wantarray;
      return $self->{forms};
  }
  
  sub current_form {
      my $self = shift;
  
      if ( !$self->{current_form} ) {
          $self->form_number(1);
      }
  
      return $self->{current_form};
  }
  
  
  sub form_number {
      my ($self, $form) = @_;
      # XXX Should we die if no $form is defined? Same question for form_name()
  
      my $forms = $self->forms;
      if ( $forms->[$form-1] ) {
          $self->{current_form} = $forms->[$form-1];
          return $self->{current_form};
      }
  
      return;
  }
  
  
  sub form_name {
      my ($self, $form) = @_;
  
      my $temp;
      my @matches = grep {defined($temp = $_->attr('name')) and ($temp eq $form) } $self->forms;
  
      my $nmatches = @matches;
      if ( $nmatches > 0 ) {
          if ( $nmatches > 1 ) {
              $self->warn( "There are $nmatches forms named $form.  The first one was used." )
          }
          return $self->{current_form} = $matches[0];
      }
  
      return;
  }
  
  
  sub form_id {
      my ($self, $formid) = @_;
  
      my $temp;
      my @matches = grep { defined($temp = $_->attr('id')) and ($temp eq $formid) } $self->forms;
      if ( @matches ) {
          $self->warn( 'There are ', scalar @matches, " forms with ID $formid.  The first one was used." )
              if @matches > 1;
          return $self->{current_form} = $matches[0];
      }
      else {
          $self->warn( qq{ There is no form with ID "$formid"} );
          return undef;
      }
  }
  
  
  
  sub form_with_fields {
      my ($self, @fields) = @_;
      die 'no fields provided' unless scalar @fields;
  
      my @matches;
      FORMS: for my $form (@{ $self->forms }) {
          my @fields_in_form = $form->param();
          for my $field (@fields) {
              next FORMS unless grep { $_ eq $field } @fields_in_form;
          }
          push @matches, $form;
      }
  
      my $nmatches = @matches;
      if ( $nmatches > 0 ) {
          if ( $nmatches > 1 ) {
              $self->warn( "There are $nmatches forms with the named fields.  The first one was used." )
          }
          return $self->{current_form} = $matches[0];
      }
      else {
          $self->warn( qq{There is no form with the requested fields} );
          return undef;
      }
  }
  
  
  sub field {
      my ($self, $name, $value, $number) = @_;
      $number ||= 1;
  
      my $form = $self->current_form();
      if ($number > 1) {
          $form->find_input($name, undef, $number)->value($value);
      }
      else {
          if ( ref($value) eq 'ARRAY' ) {
              $form->param($name, $value);
          }
          else {
              $form->value($name => $value);
          }
      }
  }
  
  
  sub select {
      my ($self, $name, $value) = @_;
  
      my $form = $self->current_form();
  
      my $input = $form->find_input($name);
      if (!$input) {
          $self->warn( qq{Input "$name" not found} );
          return;
      }
  
      if ($input->type ne 'option') {
          $self->warn( qq{Input "$name" is not type "select"} );
          return;
      }
  
      # For $mech->select($name, {n => 3}) or $mech->select($name, {n => [2,4]}),
      # transform the 'n' number(s) into value(s) and put it in $value.
      if (ref($value) eq 'HASH') {
          for (keys %$value) {
              $self->warn(qq{Unknown select value parameter "$_"})
                unless $_ eq 'n';
          }
  
          if (defined($value->{n})) {
              my @inputs = $form->find_input($name, 'option');
              my @values = ();
              # distinguish between multiple and non-multiple selects
              # (see INPUTS section of `perldoc HTML::Form`)
              if (@inputs == 1) {
                  @values = $inputs[0]->possible_values();
              }
              else {
                  foreach my $input (@inputs) {
                      my @possible = $input->possible_values();
                      push @values, pop @possible;
                  }
              }
  
              my $n = $value->{n};
              if (ref($n) eq 'ARRAY') {
                  $value = [];
                  for (@$n) {
                      unless (/^\d+$/) {
                          $self->warn(qq{"n" value "$_" is not a positive integer});
                          return;
                      }
                      push @$value, $values[$_ - 1];  # might be undef
                  }
              }
              elsif (!ref($n) && $n =~ /^\d+$/) {
                  $value = $values[$n - 1];           # might be undef
              }
              else {
                  $self->warn('"n" value is not a positive integer or an array ref');
                  return;
              }
          }
          else {
              $self->warn('Hash value is invalid');
              return;
          }
      } # hashref
  
      if (ref($value) eq 'ARRAY') {
          $form->param($name, $value);
          return 1;
      }
  
      $form->value($name => $value);
      return 1;
  }
  
  
  sub set_fields {
      my $self = shift;
      my %fields = @_;
  
      my $form = $self->current_form or $self->die( 'No form defined' );
  
      while ( my ( $field, $value ) = each %fields ) {
          if ( ref $value eq 'ARRAY' ) {
              $form->find_input( $field, undef,
                           $value->[1])->value($value->[0] );
          }
          else {
              $form->value($field => $value);
          }
      } # while
  } # set_fields()
  
  
  sub set_visible {
      my $self = shift;
  
      my $form = $self->current_form;
      my @inputs = $form->inputs;
  
      my $num_set = 0;
      for my $value ( @_ ) {
          # Handle type/value pairs an arrayref
          if ( ref $value eq 'ARRAY' ) {
              my ( $type, $value ) = @$value;
              while ( my $input = shift @inputs ) {
                  next if $input->type eq 'hidden';
                  if ( $input->type eq $type ) {
                      $input->value( $value );
                      $num_set++;
                      last;
                  }
              } # while
          }
          # by default, it's a value
          else {
              while ( my $input = shift @inputs ) {
                  next if $input->type eq 'hidden';
                  $input->value( $value );
                  $num_set++;
                  last;
              } # while
          }
      } # for
  
      return $num_set;
  } # set_visible()
  
  
  sub tick {
      my $self = shift;
      my $name = shift;
      my $value = shift;
      my $set = @_ ? shift : 1;  # default to 1 if not passed
  
      # loop though all the inputs
      my $index = 0;
      while ( my $input = $self->current_form->find_input( $name, 'checkbox', $index ) ) {
          # Can't guarantee that the first element will be undef and the second
          # element will be the right name
          foreach my $val ($input->possible_values()) {
              next unless defined $val;
              if ($val eq $value) {
                  $input->value($set ? $value : undef);
                  return;
              }
          }
  
          # move onto the next input
          $index++;
      } # while
  
      # got self far?  Didn't find anything
      $self->warn( qq{No checkbox "$name" for value "$value" in form} );
  } # tick()
  
  
  sub untick {
      shift->tick(shift,shift,undef);
  }
  
  
  sub value {
      my $self = shift;
      my $name = shift;
      my $number = shift || 1;
  
      my $form = $self->current_form;
      if ( $number > 1 ) {
          return $form->find_input( $name, undef, $number )->value();
      }
      else {
          return $form->value( $name );
      }
  } # value
  
  
  sub click {
      my ($self, $button, $x, $y) = @_;
      for ($x, $y) { $_ = 1 unless defined; }
      my $request = $self->current_form->click($button, $x, $y);
      return $self->request( $request );
  }
  
  
  sub click_button {
      my $self = shift;
      my %args = @_;
  
      for ( keys %args ) {
          if ( !/^(number|name|value|id|input|x|y)$/ ) {
              $self->warn( qq{Unknown click_button parameter "$_"} );
          }
      }
  
      for ($args{x}, $args{y}) {
          $_ = 1 unless defined;
      }
  
      my $form = $self->current_form or $self->die( 'click_button: No form has been selected' );
  
      my $request;
      if ( $args{name} ) {
          $request = $form->click( $args{name}, $args{x}, $args{y} );
      }
      # 0 is a valid id in HTML5
      elsif ( defined $args{id} ) {
          # HTML::Form expects ids to be prefixed with '#'
          my $input = $form->find_input('#' . $args{id});
          $request = $input->click( $form, $args{x}, $args{y} );
      }
      elsif ( $args{number} ) {
          my $input = $form->find_input( undef, 'submit', $args{number} );
          $request = $input->click( $form, $args{x}, $args{y} );
      }
      elsif ( $args{input} ) {
          $request = $args{input}->click( $form, $args{x}, $args{y} );
      }
      elsif ( $args{value} ) {
          my $i = 1;
          while ( my $input = $form->find_input(undef, 'submit', $i) ) {
              if ( $args{value} && ($args{value} eq $input->value) ) {
                  $request = $input->click( $form, $args{x}, $args{y} );
                  last;
              }
              $i++;
          } # while
      } # $args{value}
  
      return $self->request( $request );
  }
  
  
  sub submit {
      my $self = shift;
  
      my $request = $self->current_form->make_request;
      return $self->request( $request );
  }
  
  
  sub submit_form {
      my( $self, %args ) = @_;
  
      for ( keys %args ) {
          if ( !/^(form_(number|name|fields|id)|(with_)?fields|button|x|y)$/ ) {
              # XXX Why not die here?
              $self->warn( qq{Unknown submit_form parameter "$_"} );
          }
      }
  
      my $fields;
      for (qw/with_fields fields/) {
          if ($args{$_}) {
              if ( ref $args{$_} eq 'HASH' ) {
                  $fields = $args{$_};
              }
              else {
                  die "$_ arg to submit_form must be a hashref";
              }
              last;
          }
      }
  
      if ( $args{with_fields} ) {
          $fields || die q{must submit some 'fields' with with_fields};
          $self->form_with_fields(keys %{$fields}) or die "There is no form with the requested fields";
      }
      elsif ( my $form_number = $args{form_number} ) {
          $self->form_number( $form_number ) or die "There is no form numbered $form_number";
      }
      elsif ( my $form_name = $args{form_name} ) {
          $self->form_name( $form_name ) or die qq{There is no form named "$form_name"};
      }
      elsif ( my $form_id = $args{form_id} ) {
          $self->form_id( $form_id ) or die qq{There is no form with ID "$form_id"};
      }
      else {
          # No form selector was used.
          # Maybe a form was set separately, or we'll default to the first form.
      }
  
      $self->set_fields( %{$fields} ) if $fields;
  
      my $response;
      if ( $args{button} ) {
          $response = $self->click( $args{button}, $args{x} || 0, $args{y} || 0 );
      }
      else {
          $response = $self->submit();
      }
  
      return $response;
  }
  
  
  sub add_header {
      my $self = shift;
      my $npairs = 0;
  
      while ( @_ ) {
          my $key = shift;
          my $value = shift;
          ++$npairs;
  
          $self->{headers}{$key} = $value;
      }
  
      return $npairs;
  }
  
  
  sub delete_header {
      my $self = shift;
  
      while ( @_ ) {
          my $key = shift;
  
          delete $self->{headers}{$key};
      }
  
      return;
  }
  
  
  
  sub quiet {
      my $self = shift;
  
      $self->{quiet} = $_[0] if @_;
  
      return $self->{quiet};
  }
  
  
  sub stack_depth {
      my $self = shift;
      $self->{stack_depth} = shift if @_;
      return $self->{stack_depth};
  }
  
  
  sub save_content {
      my $self = shift;
      my $filename = shift;
      my %opts = @_;
      if (delete $opts{binary}) {
          $opts{binmode} = ':raw';
          $opts{decoded_by_headers} = 1;
      }
  
      open( my $fh, '>', $filename ) or $self->die( "Unable to create $filename: $!" );
      if ((my $binmode = delete($opts{binmode}) || '') || ($self->content_type() !~ m{^text/})) {
          if (length($binmode) && (substr($binmode, 0, 1) eq ':')) {
              binmode $fh, $binmode;
          }
          else {
              binmode $fh;
          }
      }
      print {$fh} $self->content(%opts) or $self->die( "Unable to write to $filename: $!" );
      close $fh or $self->die( "Unable to close $filename: $!" );
  
      return;
  }
  
  
  
  sub _get_fh_default_stdout {
      my $self = shift;
      my $p = shift || '';
      if ( !$p ) {
          return \*STDOUT;
      } elsif ( !ref($p) ) {
          open my $fh, '>', $p or $self->die( "Unable to write to $p: $!" );;
          return $fh;
      } else {
          return $p;
      }
  }
  
  sub dump_headers {
      my $self = shift;
      my $fh   = $self->_get_fh_default_stdout(shift);
  
      print {$fh} $self->response->headers_as_string;
  
      return;
  }
  
  
  
  sub dump_links {
      my $self = shift;
      my $fh = shift || \*STDOUT;
      my $absolute = shift;
  
      for my $link ( $self->links ) {
          my $url = $absolute ? $link->url_abs : $link->url;
          $url = '' if not defined $url;
          print {$fh} $url, "\n";
      }
      return;
  }
  
  
  sub dump_images {
      my $self = shift;
      my $fh = shift || \*STDOUT;
      my $absolute = shift;
  
      for my $image ( $self->images ) {
          my $url = $absolute ? $image->url_abs : $image->url;
          $url = '' if not defined $url;
          print {$fh} $url, "\n";
      }
      return;
  }
  
  
  sub dump_forms {
      my $self = shift;
      my $fh = shift || \*STDOUT;
  
      for my $form ( $self->forms ) {
          print {$fh} $form->dump, "\n";
      }
      return;
  }
  
  
  sub dump_text {
      my $self = shift;
      my $fh = shift || \*STDOUT;
      my $absolute = shift;
  
      print {$fh} $self->text, "\n";
  
      return;
  }
  
  
  
  sub clone {
      my $self  = shift;
      my $clone = $self->SUPER::clone();
  
      $clone->cookie_jar( $self->cookie_jar );
      $clone->{headers} = { %{$self->{headers}} };
  
      return $clone;
  }
  
  
  
  sub redirect_ok {
      my $self = shift;
      my $prospective_request = shift;
      my $response = shift;
  
      my $ok = $self->SUPER::redirect_ok( $prospective_request, $response );
      if ( $ok ) {
          $self->{redirected_uri} = $prospective_request->uri;
      }
  
      return $ok;
  }
  
  
  
  sub request {
      my $self = shift;
      my $request = shift;
      
      _die( '->request was called without a request parameter' )
          unless $request;
  
      $request = $self->_modify_request( $request );
  
      if ( $request->method eq 'GET' || $request->method eq 'POST' ) {
          $self->_push_page_stack();
      }
  
      return $self->_update_page($request, $self->_make_request( $request, @_ ));
  }
  
  
  sub update_html {
      my $self = shift;
      my $html = shift;
  
      $self->_reset_page;
      $self->{ct} = 'text/html';
      $self->{content} = $html;
  
      return;
  }
  
  
  sub credentials {
      my $self = shift;
  
      # The latest LWP::UserAgent also supports 2 arguments,
      # in which case the first is host:port
      if (@_ == 4 || (@_ == 2 && $_[0] =~ /:\d+$/)) {
          return $self->SUPER::credentials(@_);
      }
  
      @_ == 2
          or $self->die( 'Invalid # of args for overridden credentials()' );
  
      return @$self{qw( __username __password )} = @_;
  }
  
  
  sub get_basic_credentials {
      my $self = shift;
      my @cred = grep { defined } @$self{qw( __username __password )};
      return @cred if @cred == 2;
      return $self->SUPER::get_basic_credentials(@_);
  }
  
  
  sub clear_credentials {
      my $self = shift;
      delete @$self{qw( __username __password )};
  }
  
  
  sub _update_page {
      my ($self, $request, $res) = @_;
  
      $self->{req} = $request;
      $self->{redirected_uri} = $request->uri->as_string;
  
      $self->{res} = $res;
  
      $self->{status}  = $res->code;
      $self->{base}    = $res->base;
      $self->{ct}      = $res->content_type || '';
  
      if ( $res->is_success ) {
          $self->{uri} = $self->{redirected_uri};
          $self->{last_uri} = $self->{uri};
      }
  
      if ( $res->is_error ) {
          if ( $self->{autocheck} ) {
              $self->die( 'Error ', $request->method, 'ing ', $request->uri, ': ', $res->message );
          }
      }
  
      $self->_reset_page;
  
      # Try to decode the content. Undef will be returned if there's nothing to decompress.
      # See docs in HTTP::Message for details. Do we need to expose the options there?
      my $content = $res->decoded_content();
      $content = $res->content if (not defined $content);
  
      $content .= _taintedness();
  
      if ($self->is_html) {
          $self->update_html($content);
      }
      else {
          $self->{content} = $content;
      }
  
      return $res;
  } # _update_page
  
  our $_taintbrush;
  
  # This is lifted wholesale from Test::Taint
  sub _taintedness {
      return $_taintbrush if defined $_taintbrush;
  
      # Somehow we need to get some taintedness into our $_taintbrush.
      # Let's try the easy way first. Either of these should be
      # tainted, unless somebody has untainted them, so this
      # will almost always work on the first try.
      # (Unless, of course, taint checking has been turned off!)
      $_taintbrush = substr("$0$^X", 0, 0);
      return $_taintbrush if _is_tainted( $_taintbrush );
  
      # Let's try again. Maybe somebody cleaned those.
      $_taintbrush = substr(join('', grep { defined } @ARGV, %ENV), 0, 0);
      return $_taintbrush if _is_tainted( $_taintbrush );
  
      # If those don't work, go try to open some file from some unsafe
      # source and get data from them.  That data is tainted.
      # (Yes, even reading from /dev/null works!)
      for my $filename ( qw(/dev/null / . ..), values %INC, $0, $^X ) {
          if ( open my $fh, '<', $filename ) {
              my $data;
              if ( defined sysread $fh, $data, 1 ) {
                  $_taintbrush = substr( $data, 0, 0 );
                  last if _is_tainted( $_taintbrush );
              }
          }
      }
  
      # Sanity check
      die "Our taintbrush should have zero length!" if length $_taintbrush;
  
      return $_taintbrush;
  }
  
  sub _is_tainted {
      no warnings qw(void uninitialized);
  
      return !eval { join('', shift), kill 0; 1 };
  } # _is_tainted
  
  
  
  sub _modify_request {
      my $self = shift;
      my $req = shift;
  
      # add correct Accept-Encoding header to restore compliance with
      # http://www.freesoft.org/CIE/RFC/2068/158.htm
      # http://use.perl.org/~rhesa/journal/25952
      if (not $req->header( 'Accept-Encoding' ) ) {
          # "identity" means "please! unencoded content only!"
          $req->header( 'Accept-Encoding', $HAS_ZLIB ? 'gzip' : 'identity' );
      }
  
      my $last = $self->{last_uri};
      if ( $last ) {
          $last = $last->as_string if ref($last);
          $req->header( Referer => $last );
      }
      while ( my($key,$value) = each %{$self->{headers}} ) {
          if ( defined $value ) {
              $req->header( $key => $value );
          }
          else {
              $req->remove_header( $key );
          }
      }
  
      return $req;
  }
  
  
  
  sub _make_request {
      my $self = shift;
      return $self->SUPER::request(@_);
  }
  
  
  sub _reset_page {
      my $self = shift;
  
      $self->{links}        = undef;
      $self->{images}       = undef;
      $self->{forms}        = undef;
      $self->{current_form} = undef;
      $self->{title}        = undef;
      $self->{text}         = undef;
  
      return;
  }
  
  
  my %link_tags = (
      a      => 'href',
      area   => 'href',
      frame  => 'src',
      iframe => 'src',
      link   => 'href',
      meta   => 'content',
  );
  
  sub _extract_links {
      my $self = shift;
  
  
      $self->{links} = [];
      if ( defined $self->{content} ) {
          my $parser = HTML::TokeParser->new(\$self->{content});
          while ( my $token = $parser->get_tag( keys %link_tags ) ) {
              my $link = $self->_link_from_token( $token, $parser );
              push( @{$self->{links}}, $link ) if $link;
          } # while
      }
  
      return;
  }
  
  
  my %image_tags = (
      img   => 'src',
      input => 'src',
  );
  
  sub _extract_images {
      my $self = shift;
  
      $self->{images} = [];
  
      if ( defined $self->{content} ) {
          my $parser = HTML::TokeParser->new(\$self->{content});
          while ( my $token = $parser->get_tag( keys %image_tags ) ) {
              my $image = $self->_image_from_token( $token, $parser );
              push( @{$self->{images}}, $image ) if $image;
          } # while
      }
  
      return;
  }
  
  sub _image_from_token {
      my $self = shift;
      my $token = shift;
      my $parser = shift;
  
      my $tag = $token->[0];
      my $attrs = $token->[1];
  
      if ( $tag eq 'input' ) {
          my $type = $attrs->{type} or return;
          return unless $type eq 'image';
      }
  
      require WWW::Mechanize::Image;
      return
          WWW::Mechanize::Image->new({
              tag     => $tag,
              base    => $self->base,
              url     => $attrs->{src},
              name    => $attrs->{name},
              height  => $attrs->{height},
              width   => $attrs->{width},
              alt     => $attrs->{alt},
          });
  }
  
  sub _link_from_token {
      my $self = shift;
      my $token = shift;
      my $parser = shift;
  
      my $tag = $token->[0];
      my $attrs = $token->[1];
      my $url = $attrs->{$link_tags{$tag}};
  
      my $text;
      my $name;
      if ( $tag eq 'a' ) {
          $text = $parser->get_trimmed_text("/$tag");
          $text = '' unless defined $text;
  
          my $onClick = $attrs->{onclick};
          if ( $onClick && ($onClick =~ /^window\.open\(\s*'([^']+)'/) ) {
              $url = $1;
          }
      } # a
  
      # Of the tags we extract from, only 'AREA' has an alt tag
      # The rest should have a 'name' attribute.
      # ... but we don't do anything with that bit of wisdom now.
  
      $name = $attrs->{name};
  
      if ( $tag eq 'meta' ) {
          my $equiv = $attrs->{'http-equiv'};
          my $content = $attrs->{'content'};
          return unless $equiv && (lc $equiv eq 'refresh') && defined $content;
  
          if ( $content =~ /^\d+\s*;\s*url\s*=\s*(\S+)/i ) {
              $url = $1;
              $url =~ s/^"(.+)"$/$1/ or $url =~ s/^'(.+)'$/$1/;
          }
          else {
              undef $url;
          }
      } # meta
  
      return unless defined $url;   # probably just a name link or <AREA NOHREF...>
  
      require WWW::Mechanize::Link;
      return
          WWW::Mechanize::Link->new({
              url  => $url,
              text => $text,
              name => $name,
              tag  => $tag,
              base => $self->base,
              attrs => $attrs,
          });
  } # _link_from_token
  
  
  sub _extract_forms {
      my $self = shift;
  
      my @forms = HTML::Form->parse( $self->content, $self->base );
      $self->{forms} = \@forms;
      for my $form ( @forms ) {
          for my $input ($form->inputs) {
               if ($input->type eq 'file') {
                   $input->value( undef );
               }
          }
      }
  
      return;
  }
  
  
  sub _push_page_stack {
      my $self = shift;
  
      my $req = $self->{req};
      my $res = $self->{res};
  
      return unless $req && $res && $self->stack_depth;
  
      # Don't push anything if it's a virgin object
      my $stack = $self->{page_stack} ||= [];
      if ( @{$stack} >= $self->stack_depth ) {
          shift @{$stack};
      }
      push( @{$stack}, { req => $req, res => $res } );
  
      return 1;
  }
  
  
  sub warn {
      my $self = shift;
  
      return unless my $handler = $self->{onwarn};
  
      return if $self->quiet;
  
      return $handler->(@_);
  }
  
  
  sub die {
      my $self = shift;
  
      return unless my $handler = $self->{onerror};
  
      return $handler->(@_);
  }
  
  
  # NOT an object method!
  sub _warn {
      require Carp;
      return &Carp::carp; ## no critic
  }
  
  # NOT an object method!
  sub _die {
      require Carp;
      return &Carp::croak; ## no critic
  }
  
  1; # End of module
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  WWW::Mechanize - Handy web browsing in a Perl object
  
  =head1 VERSION
  
  version 1.78
  
  =head1 SYNOPSIS
  
  C<WWW::Mechanize>, or Mech for short, is a Perl module for stateful
  programmatic web browsing, used for automating interaction with
  websites.
  
  Features include:
  
  =over 4
  
  =item * All HTTP methods
  
  =item * High-level hyperlink and HTML form support, without having to parse HTML yourself
  
  =item * SSL support
  
  =item * Automatic cookies
  
  =item * Custom HTTP headers
  
  =item * Automatic handling of redirections
  
  =item * Proxies
  
  =item * HTTP authentication
  
  =back
  
  Mech supports performing a sequence of page fetches including
  following links and submitting forms. Each fetched page is parsed
  and its links and forms are extracted. A link or a form can be
  selected, form fields can be filled and the next page can be fetched.
  Mech also stores a history of the URLs you've visited, which can
  be queried and revisited.
  
      use WWW::Mechanize;
      my $mech = WWW::Mechanize->new();
  
      $mech->get( $url );
  
      $mech->follow_link( n => 3 );
      $mech->follow_link( text_regex => qr/download this/i );
      $mech->follow_link( url => 'http://host.com/index.html' );
  
      $mech->submit_form(
          form_number => 3,
          fields      => {
              username    => 'mungo',
              password    => 'lost-and-alone',
          }
      );
  
      $mech->submit_form(
          form_name => 'search',
          fields    => { query  => 'pot of gold', },
          button    => 'Search Now'
      );
  
  Mech is well suited for use in testing web applications.  If you use
  one of the Test::*, like L<Test::HTML::Lint> modules, you can check the
  fetched content and use that as input to a test call.
  
      use Test::More;
      like( $mech->content(), qr/$expected/, "Got expected content" );
  
  Each page fetch stores its URL in a history stack which you can
  traverse.
  
      $mech->back();
  
  If you want finer control over your page fetching, you can use
  these methods. C<follow_link> and C<submit_form> are just high
  level wrappers around them.
  
      $mech->find_link( n => $number );
      $mech->form_number( $number );
      $mech->form_name( $name );
      $mech->field( $name, $value );
      $mech->set_fields( %field_values );
      $mech->set_visible( @criteria );
      $mech->click( $button );
  
  L<WWW::Mechanize> is a proper subclass of L<LWP::UserAgent> and
  you can also use any of L<LWP::UserAgent>'s methods.
  
      $mech->add_header($name => $value);
  
  Please note that Mech does NOT support JavaScript, you need additional software
  for that. Please check L<WWW::Mechanize::FAQ/"JavaScript"> for more.
  
  =head1 IMPORTANT LINKS
  
  =over 4
  
  =item * L<https://github.com/libwww-perl/WWW-Mechanize/issues>
  
  The queue for bugs & enhancements in WWW::Mechanize and
  Test::WWW::Mechanize.  Please note that the queue at L<http://rt.cpan.org>
  is no longer maintained.
  
  =item * L<http://search.cpan.org/dist/WWW-Mechanize/>
  
  The CPAN documentation page for Mechanize.
  
  =item * L<http://search.cpan.org/dist/WWW-Mechanize/lib/WWW/Mechanize/FAQ.pod>
  
  Frequently asked questions.  Make sure you read here FIRST.
  
  =back
  
  =head1 CONSTRUCTOR AND STARTUP
  
  =head2 new()
  
  Creates and returns a new WWW::Mechanize object, hereafter referred to as
  the "agent".
  
      my $mech = WWW::Mechanize->new()
  
  The constructor for WWW::Mechanize overrides two of the parms to the
  LWP::UserAgent constructor:
  
      agent => 'WWW-Mechanize/#.##'
      cookie_jar => {}    # an empty, memory-only HTTP::Cookies object
  
  You can override these overrides by passing parms to the constructor,
  as in:
  
      my $mech = WWW::Mechanize->new( agent => 'wonderbot 1.01' );
  
  If you want none of the overhead of a cookie jar, or don't want your
  bot accepting cookies, you have to explicitly disallow it, like so:
  
      my $mech = WWW::Mechanize->new( cookie_jar => undef );
  
  Here are the parms that WWW::Mechanize recognizes.  These do not include
  parms that L<LWP::UserAgent> recognizes.
  
  =over 4
  
  =item * C<< autocheck => [0|1] >>
  
  Checks each request made to see if it was successful.  This saves
  you the trouble of manually checking yourself.  Any errors found
  are errors, not warnings.
  
  The default value is ON, unless it's being subclassed, in which
  case it is OFF.  This means that standalone L<WWW::Mechanize>instances
  have autocheck turned on, which is protective for the vast majority
  of Mech users who don't bother checking the return value of get()
  and post() and can't figure why their code fails. However, if
  L<WWW::Mechanize> is subclassed, such as for L<Test::WWW::Mechanize>
  or L<Test::WWW::Mechanize::Catalyst>, this may not be an appropriate
  default, so it's off.
  
  =item * C<< noproxy => [0|1] >>
  
  Turn off the automatic call to the L<LWP::UserAgent> C<env_proxy> function.
  
  This needs to be explicitly turned off if you're using L<Crypt::SSLeay> to
  access a https site via a proxy server.  Note: you still need to set your
  HTTPS_PROXY environment variable as appropriate.
  
  =item * C<< onwarn => \&func >>
  
  Reference to a C<warn>-compatible function, such as C<< L<Carp>::carp >>,
  that is called when a warning needs to be shown.
  
  If this is set to C<undef>, no warnings will ever be shown.  However,
  it's probably better to use the C<quiet> method to control that behavior.
  
  If this value is not passed, Mech uses C<Carp::carp> if L<Carp> is
  installed, or C<CORE::warn> if not.
  
  =item * C<< onerror => \&func >>
  
  Reference to a C<die>-compatible function, such as C<< L<Carp>::croak >>,
  that is called when there's a fatal error.
  
  If this is set to C<undef>, no errors will ever be shown.
  
  If this value is not passed, Mech uses C<Carp::croak> if L<Carp> is
  installed, or C<CORE::die> if not.
  
  =item * C<< quiet => [0|1] >>
  
  Don't complain on warnings.  Setting C<< quiet => 1 >> is the same as
  calling C<< $mech->quiet(1) >>.  Default is off.
  
  =item * C<< stack_depth => $value >>
  
  Sets the depth of the page stack that keeps track of all the
  downloaded pages. Default is effectively infinite stack size.  If
  the stack is eating up your memory, then set this to a smaller
  number, say 5 or 10.  Setting this to zero means Mech will keep no
  history.
  
  =back
  
  To support forms, WWW::Mechanize's constructor pushes POST
  on to the agent's C<requests_redirectable> list (see also
  L<LWP::UserAgent>.)
  
  =head2 $mech->agent_alias( $alias )
  
  Sets the user agent string to the expanded version from a table of actual user strings.
  I<$alias> can be one of the following:
  
  =over 4
  
  =item * Windows IE 6
  
  =item * Windows Mozilla
  
  =item * Mac Safari
  
  =item * Mac Mozilla
  
  =item * Linux Mozilla
  
  =item * Linux Konqueror
  
  =back
  
  then it will be replaced with a more interesting one.  For instance,
  
      $mech->agent_alias( 'Windows IE 6' );
  
  sets your User-Agent to
  
      Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
  
  The list of valid aliases can be returned from C<known_agent_aliases()>.  The current list is:
  
  =over
  
  =item * Windows IE 6
  
  =item * Windows Mozilla
  
  =item * Mac Safari
  
  =item * Mac Mozilla
  
  =item * Linux Mozilla
  
  =item * Linux Konqueror
  
  =back
  
  =head2 known_agent_aliases()
  
  Returns a list of all the agent aliases that Mech knows about.
  
  =head1 PAGE-FETCHING METHODS
  
  =head2 $mech->get( $uri )
  
  Given a URL/URI, fetches it.  Returns an L<HTTP::Response> object.
  I<$uri> can be a well-formed URL string, a L<URI> object, or a
  L<WWW::Mechanize::Link> object.
  
  The results are stored internally in the agent object, but you don't
  know that.  Just use the accessors listed below.  Poking at the
  internals is deprecated and subject to change in the future.
  
  C<get()> is a well-behaved overloaded version of the method in
  L<LWP::UserAgent>.  This lets you do things like
  
      $mech->get( $uri, ':content_file' => $tempfile );
  
  and you can rest assured that the parms will get filtered down
  appropriately.
  
  B<NOTE:> Because C<:content_file> causes the page contents to be
  stored in a file instead of the response object, some Mech functions
  that expect it to be there won't work as expected. Use with caution.
  
  =head2 $mech->put( $uri, content => $content )
  
  PUTs I<$content> to $uri.  Returns an L<HTTP::Response> object.
  I<$uri> can be a well-formed URI string, a L<URI> object, or a
  L<WWW::Mechanize::Link> object.
  
  =head2 $mech->reload()
  
  Acts like the reload button in a browser: repeats the current
  request. The history (as per the L</back> method) is not altered.
  
  Returns the L<HTTP::Response> object from the reload, or C<undef>
  if there's no current request.
  
  =head2 $mech->back()
  
  The equivalent of hitting the "back" button in a browser.  Returns to
  the previous page.  Won't go back past the first page. (Really, what
  would it do if it could?)
  
  Returns true if it could go back, or false if not.
  
  =head2 $mech->history_count()
  
  This returns the number of items in the browser history.  This number I<does>
  include the most recently made request.
  
  =head2 $mech->history($n)
  
  This returns the I<n>th item in history.  The 0th item is the most recent
  request and response, which would be acted on by methods like C<find_link()>.
  The 1th item is the state you'd return to if you called C<back()>.
  
  The maximum useful value for C<$n> is C<< $mech->history_count - 1 >>.
  Requests beyond that bound will return C<undef>.
  
  History items are returned as hash references, in the form:
  
    { req => $http_request, res => $http_response }
  
  =head1 STATUS METHODS
  
  =head2 $mech->success()
  
  Returns a boolean telling whether the last request was successful.
  If there hasn't been an operation yet, returns false.
  
  This is a convenience function that wraps C<< $mech->res->is_success >>.
  
  =head2 $mech->uri()
  
  Returns the current URI as a L<URI> object. This object stringifies
  to the URI itself.
  
  =head2 $mech->response() / $mech->res()
  
  Return the current response as an L<HTTP::Response> object.
  
  Synonym for C<< $mech->response() >>
  
  =head2 $mech->status()
  
  Returns the HTTP status code of the response.  This is a 3-digit
  number like 200 for OK, 404 for not found, and so on.
  
  =head2 $mech->ct() / $mech->content_type()
  
  Returns the content type of the response.
  
  =head2 $mech->base()
  
  Returns the base URI for the current response
  
  =head2 $mech->forms()
  
  When called in a list context, returns a list of the forms found in
  the last fetched page. In a scalar context, returns a reference to
  an array with those forms. The forms returned are all L<HTML::Form>
  objects.
  
  =head2 $mech->current_form()
  
  Returns the current form as an L<HTML::Form> object.
  
  =head2 $mech->links()
  
  When called in a list context, returns a list of the links found in the
  last fetched page.  In a scalar context it returns a reference to an array
  with those links.  Each link is a L<WWW::Mechanize::Link> object.
  
  =head2 $mech->is_html()
  
  Returns true/false on whether our content is HTML, according to the
  HTTP headers.
  
  =head2 $mech->title()
  
  Returns the contents of the C<< <TITLE> >> tag, as parsed by
  L<HTML::HeadParser>.  Returns undef if the content is not HTML.
  
  =head1 CONTENT-HANDLING METHODS
  
  =head2 $mech->content(...)
  
  Returns the content that the mech uses internally for the last page
  fetched. Ordinarily this is the same as
  C<< $mech->response()->decoded_content() >>,
  but this may differ for HTML documents if L</update_html> is
  overloaded (in which case the value passed to the base-class
  implementation of same will be returned), and/or extra named arguments
  are passed to I<content()>:
  
  =over 2
  
  =item I<< $mech->content( format => 'text' ) >>
  
  Returns a text-only version of the page, with all HTML markup
  stripped. This feature requires I<HTML::TreeBuilder> to be installed,
  or a fatal error will be thrown. This works only if the contents are
  HTML.
  
  =item I<< $mech->content( base_href => [$base_href|undef] ) >>
  
  Returns the HTML document, modified to contain a
  C<< <base href="$base_href"> >> mark-up in the header.
  I<$base_href> is C<< $mech->base() >> if not specified. This is
  handy to pass the HTML to e.g. L<HTML::Display>. This works only if
  the contents are HTML.
  
  =item I<< $mech->content( raw => 1 ) >>
  
  Returns C<< $self->response()->content() >>, i.e. the raw contents from the
  response.
  
  =item I<< $mech->content( decoded_by_headers => 1 ) >>
  
  Returns the content after applying all C<Content-Encoding> headers but
  with not additional mangling.
  
  =item I<< $mech->content( charset => $charset ) >>
  
  Returns C<< $self->response()->decoded_content(charset => $charset) >>
  (see L<HTTP::Response> for details).
  
  =back
  
  To preserve backwards compatibility, additional parameters will be
  ignored unless none of C<< raw | decoded_by_headers | charset >> is
  specified and the text is HTML, in which case an error will be triggered.
  
  =head2 $mech->text()
  
  Returns the text of the current HTML content.  If the content isn't
  HTML, $mech will die.
  
  The text is extracted by parsing the content, and then the extracted
  text is cached, so don't worry about performance of calling this
  repeatedly.
  
  =head1 LINK METHODS
  
  =head2 $mech->links()
  
  Lists all the links on the current page.  Each link is a
  WWW::Mechanize::Link object. In list context, returns a list of all
  links.  In scalar context, returns an array reference of all links.
  
  =head2 $mech->follow_link(...)
  
  Follows a specified link on the page.  You specify the match to be
  found using the same parms that C<L<find_link()>> uses.
  
  Here some examples:
  
  =over 4
  
  =item * 3rd link called "download"
  
      $mech->follow_link( text => 'download', n => 3 );
  
  =item * first link where the URL has "download" in it, regardless of case:
  
      $mech->follow_link( url_regex => qr/download/i );
  
  or
  
      $mech->follow_link( url_regex => qr/(?i:download)/ );
  
  =item * 3rd link on the page
  
      $mech->follow_link( n => 3 );
  
  =item * the link with the url
  
      $mech->follow_link( url => '/other/page' );
  
  or
  
      $mech->follow_link( url => 'http://example.com/page' );
  
  =back
  
  Returns the result of the GET method (an HTTP::Response object) if
  a link was found. If the page has no links, or the specified link
  couldn't be found, returns undef.
  
  =head2 $mech->find_link( ... )
  
  Finds a link in the currently fetched page. It returns a
  L<WWW::Mechanize::Link> object which describes the link.  (You'll
  probably be most interested in the C<url()> property.)  If it fails
  to find a link it returns undef.
  
  You can take the URL part and pass it to the C<get()> method.  If
  that's your plan, you might as well use the C<follow_link()> method
  directly, since it does the C<get()> for you automatically.
  
  Note that C<< <FRAME SRC="..."> >> tags are parsed out of the the HTML
  and treated as links so this method works with them.
  
  You can select which link to find by passing in one or more of these
  key/value pairs:
  
  =over 4
  
  =item * C<< text => 'string', >> and C<< text_regex => qr/regex/, >>
  
  C<text> matches the text of the link against I<string>, which must be an
  exact match.  To select a link with text that is exactly "download", use
  
      $mech->find_link( text => 'download' );
  
  C<text_regex> matches the text of the link against I<regex>.  To select a
  link with text that has "download" anywhere in it, regardless of case, use
  
      $mech->find_link( text_regex => qr/download/i );
  
  Note that the text extracted from the page's links are trimmed.  For
  example, C<< <a> foo </a> >> is stored as 'foo', and searching for
  leading or trailing spaces will fail.
  
  =item * C<< url => 'string', >> and C<< url_regex => qr/regex/, >>
  
  Matches the URL of the link against I<string> or I<regex>, as appropriate.
  The URL may be a relative URL, like F<foo/bar.html>, depending on how
  it's coded on the page.
  
  =item * C<< url_abs => string >> and C<< url_abs_regex => regex >>
  
  Matches the absolute URL of the link against I<string> or I<regex>,
  as appropriate.  The URL will be an absolute URL, even if it's relative
  in the page.
  
  =item * C<< name => string >> and C<< name_regex => regex >>
  
  Matches the name of the link against I<string> or I<regex>, as appropriate.
  
  =item * C<< id => string >> and C<< id_regex => regex >>
  
  Matches the attribute 'id' of the link against I<string> or
  I<regex>, as appropriate.
  
  =item * C<< class => string >> and C<< class_regex => regex >>
  
  Matches the attribute 'class' of the link against I<string> or
  I<regex>, as appropriate.
  
  =item * C<< tag => string >> and C<< tag_regex => regex >>
  
  Matches the tag that the link came from against I<string> or I<regex>,
  as appropriate.  The C<tag_regex> is probably most useful to check for
  more than one tag, as in:
  
      $mech->find_link( tag_regex => qr/^(a|frame)$/ );
  
  The tags and attributes looked at are defined below, at
  L<< $mech->find_link() : link format >>.
  
  =back
  
  If C<n> is not specified, it defaults to 1.  Therefore, if you don't
  specify any parms, this method defaults to finding the first link on the
  page.
  
  Note that you can specify multiple text or URL parameters, which
  will be ANDed together.  For example, to find the first link with
  text of "News" and with "cnn.com" in the URL, use:
  
      $mech->find_link( text => 'News', url_regex => qr/cnn\.com/ );
  
  The return value is a reference to an array containing a
  L<WWW::Mechanize::Link> object for every link in C<< $self->content >>.
  
  The links come from the following:
  
  =over 4
  
  =item C<< <a href=...> >>
  
  =item C<< <area href=...> >>
  
  =item C<< <frame src=...> >>
  
  =item C<< <iframe src=...> >>
  
  =item C<< <link href=...> >>
  
  =item C<< <meta content=...> >>
  
  =back
  
  =head2 $mech->find_all_links( ... )
  
  Returns all the links on the current page that match the criteria.  The
  method for specifying link criteria is the same as in C<L</find_link()>>.
  Each of the links returned is a L<WWW::Mechanize::Link> object.
  
  In list context, C<find_all_links()> returns a list of the links.
  Otherwise, it returns a reference to the list of links.
  
  C<find_all_links()> with no parameters returns all links in the
  page.
  
  =head2 $mech->find_all_inputs( ... criteria ... )
  
  find_all_inputs() returns an array of all the input controls in the
  current form whose properties match all of the regexes passed in.
  The controls returned are all descended from HTML::Form::Input.
  
  If no criteria are passed, all inputs will be returned.
  
  If there is no current page, there is no form on the current
  page, or there are no submit controls in the current form
  then the return will be an empty array.
  
  You may use a regex or a literal string:
  
      # get all textarea controls whose names begin with "customer"
      my @customer_text_inputs = $mech->find_all_inputs(
          type       => 'textarea',
          name_regex => qr/^customer/,
      );
  
      # get all text or textarea controls called "customer"
      my @customer_text_inputs = $mech->find_all_inputs(
          type_regex => qr/^(text|textarea)$/,
          name       => 'customer',
      );
  
  =head2 $mech->find_all_submits( ... criteria ... )
  
  C<find_all_submits()> does the same thing as C<find_all_inputs()>
  except that it only returns controls that are submit controls,
  ignoring other types of input controls like text and checkboxes.
  
  =head1 IMAGE METHODS
  
  =head2 $mech->images
  
  Lists all the images on the current page.  Each image is a
  WWW::Mechanize::Image object. In list context, returns a list of all
  images.  In scalar context, returns an array reference of all images.
  
  =head2 $mech->find_image()
  
  Finds an image in the current page. It returns a
  L<WWW::Mechanize::Image> object which describes the image.  If it fails
  to find an image it returns undef.
  
  You can select which image to find by passing in one or more of these
  key/value pairs:
  
  =over 4
  
  =item * C<< alt => 'string' >> and C<< alt_regex => qr/regex/, >>
  
  C<alt> matches the ALT attribute of the image against I<string>, which must be an
  exact match. To select a image with an ALT tag that is exactly "download", use
  
      $mech->find_image( alt => 'download' );
  
  C<alt_regex> matches the ALT attribute of the image  against a regular
  expression.  To select an image with an ALT attribute that has "download"
  anywhere in it, regardless of case, use
  
      $mech->find_image( alt_regex => qr/download/i );
  
  =item * C<< url => 'string', >> and C<< url_regex => qr/regex/, >>
  
  Matches the URL of the image against I<string> or I<regex>, as appropriate.
  The URL may be a relative URL, like F<foo/bar.html>, depending on how
  it's coded on the page.
  
  =item * C<< url_abs => string >> and C<< url_abs_regex => regex >>
  
  Matches the absolute URL of the image against I<string> or I<regex>,
  as appropriate.  The URL will be an absolute URL, even if it's relative
  in the page.
  
  =item * C<< tag => string >> and C<< tag_regex => regex >>
  
  Matches the tag that the image came from against I<string> or I<regex>,
  as appropriate.  The C<tag_regex> is probably most useful to check for
  more than one tag, as in:
  
      $mech->find_image( tag_regex => qr/^(img|input)$/ );
  
  The tags supported are C<< <img> >> and C<< <input> >>.
  
  =back
  
  If C<n> is not specified, it defaults to 1.  Therefore, if you don't
  specify any parms, this method defaults to finding the first image on the
  page.
  
  Note that you can specify multiple ALT or URL parameters, which
  will be ANDed together.  For example, to find the first image with
  ALT text of "News" and with "cnn.com" in the URL, use:
  
      $mech->find_image( image => 'News', url_regex => qr/cnn\.com/ );
  
  The return value is a reference to an array containing a
  L<WWW::Mechanize::Image> object for every image in C<< $self->content >>.
  
  =head2 $mech->find_all_images( ... )
  
  Returns all the images on the current page that match the criteria.  The
  method for specifying image criteria is the same as in C<L</find_image()>>.
  Each of the images returned is a L<WWW::Mechanize::Image> object.
  
  In list context, C<find_all_images()> returns a list of the images.
  Otherwise, it returns a reference to the list of images.
  
  C<find_all_images()> with no parameters returns all images in the page.
  
  =head1 FORM METHODS
  
  These methods let you work with the forms on a page.  The idea is
  to choose a form that you'll later work with using the field methods
  below.
  
  =head2 $mech->forms
  
  Lists all the forms on the current page.  Each form is an L<HTML::Form>
  object.  In list context, returns a list of all forms.  In scalar
  context, returns an array reference of all forms.
  
  =head2 $mech->form_number($number)
  
  Selects the I<number>th form on the page as the target for subsequent
  calls to C<L</field()>> and C<L</click()>>.  Also returns the form that was
  selected.
  
  If it is found, the form is returned as an L<HTML::Form> object and set internally
  for later use with Mech's form methods such as C<L</field()>> and C<L</click()>>.
  
  Emits a warning and returns undef if no form is found.
  
  The first form is number 1, not zero.
  
  =head2 $mech->form_name( $name )
  
  Selects a form by name.  If there is more than one form on the page
  with that name, then the first one is used, and a warning is
  generated.
  
  If it is found, the form is returned as an L<HTML::Form> object and
  set internally for later use with Mech's form methods such as
  C<L</field()>> and C<L</click()>>.
  
  Returns undef if no form is found.
  
  =head2 $mech->form_id( $name )
  
  Selects a form by ID.  If there is more than one form on the page
  with that ID, then the first one is used, and a warning is generated.
  
  If it is found, the form is returned as an L<HTML::Form> object and
  set internally for later use with Mech's form methods such as
  C<L</field()>> and C<L</click()>>.
  
  If no form is found it returns C<undef>.  This will also trigger a warning,
  unless C<quiet> is enabled.
  
  =head2 $mech->form_with_fields( @fields )
  
  Selects a form by passing in a list of field names it must contain.  If there
  is more than one form on the page with that matches, then the first one is used,
  and a warning is generated.
  
  If it is found, the form is returned as an L<HTML::Form> object and set internally
  for later used with Mech's form methods such as C<L</field()>> and C<L</click()>>.
  
  Returns undef if no form is found.
  
  Note that this functionality requires libwww-perl 5.69 or higher.
  
  =head1 FIELD METHODS
  
  These methods allow you to set the values of fields in a given form.
  
  =head2 $mech->field( $name, $value, $number )
  
  =head2 $mech->field( $name, \@values, $number )
  
  Given the name of a field, set its value to the value specified.
  This applies to the current form (as set by the L</form_name()> or
  L</form_number()> method or defaulting to the first form on the
  page).
  
  The optional I<$number> parameter is used to distinguish between two fields
  with the same name.  The fields are numbered from 1.
  
  =head2 $mech->select($name, $value)
  
  =head2 $mech->select($name, \@values)
  
  Given the name of a C<select> field, set its value to the value
  specified.  If the field is not C<< <select multiple> >> and the
  C<$value> is an array, only the B<first> value will be set.  [Note:
  the documentation previously claimed that only the last value would
  be set, but this was incorrect.]  Passing C<$value> as a hash with
  an C<n> key selects an item by number (e.g.
  C<< {n => 3} >> or C<< {n => [2,4]} >>).
  The numbering starts at 1.  This applies to the current form.
  
  If you have a field with C<< <select multiple> >> and you pass a single
  C<$value>, then C<$value> will be added to the list of fields selected,
  without clearing the others.  However, if you pass an array reference,
  then all previously selected values will be cleared.
  
  Returns true on successfully setting the value. On failure, returns
  false and calls C<< $self>warn() >> with an error message.
  
  =head2 $mech->set_fields( $name => $value ... )
  
  This method sets multiple fields of the current form. It takes a list
  of field name and value pairs. If there is more than one field with
  the same name, the first one found is set. If you want to select which
  of the duplicate field to set, use a value which is an anonymous array
  which has the field value and its number as the 2 elements.
  
          # set the second foo field
          $mech->set_fields( $name => [ 'foo', 2 ] );
  
  The fields are numbered from 1.
  
  This applies to the current form.
  
  =head2 $mech->set_visible( @criteria )
  
  This method sets fields of the current form without having to know
  their names.  So if you have a login screen that wants a username and
  password, you do not have to fetch the form and inspect the source (or
  use the F<mech-dump> utility, installed with WWW::Mechanize) to see
  what the field names are; you can just say
  
      $mech->set_visible( $username, $password );
  
  and the first and second fields will be set accordingly.  The method
  is called set_I<visible> because it acts only on visible fields;
  hidden form inputs are not considered.  The order of the fields is
  the order in which they appear in the HTML source which is nearly
  always the order anyone viewing the page would think they are in,
  but some creative work with tables could change that; caveat user.
  
  Each element in C<@criteria> is either a field value or a field
  specifier.  A field value is a scalar.  A field specifier allows
  you to specify the I<type> of input field you want to set and is
  denoted with an arrayref containing two elements.  So you could
  specify the first radio button with
  
      $mech->set_visible( [ radio => 'KCRW' ] );
  
  Field values and specifiers can be intermixed, hence
  
      $mech->set_visible( 'fred', 'secret', [ option => 'Checking' ] );
  
  would set the first two fields to "fred" and "secret", and the I<next>
  C<OPTION> menu field to "Checking".
  
  The possible field specifier types are: "text", "password", "hidden",
  "textarea", "file", "image", "submit", "radio", "checkbox" and "option".
  
  C<set_visible> returns the number of values set.
  
  =head2 $mech->tick( $name, $value [, $set] )
  
  "Ticks" the first checkbox that has both the name and value associated
  with it on the current form.  Dies if there is no named check box for
  that value.  Passing in a false value as the third optional argument
  will cause the checkbox to be unticked.
  
  =head2 $mech->untick($name, $value)
  
  Causes the checkbox to be unticked.  Shorthand for
  C<tick($name,$value,undef)>
  
  =head2 $mech->value( $name [, $number] )
  
  Given the name of a field, return its value. This applies to the current
  form.
  
  The optional I<$number> parameter is used to distinguish between two fields
  with the same name.  The fields are numbered from 1.
  
  If the field is of type file (file upload field), the value is always
  cleared to prevent remote sites from downloading your local files.
  To upload a file, specify its file name explicitly.
  
  =head2 $mech->click( $button [, $x, $y] )
  
  Has the effect of clicking a button on the current form.  The first
  argument is the name of the button to be clicked.  The second and
  third arguments (optional) allow you to specify the (x,y) coordinates
  of the click.
  
  If there is only one button on the form, C<< $mech->click() >> with
  no arguments simply clicks that one button.
  
  Returns an L<HTTP::Response> object.
  
  =head2 $mech->click_button( ... )
  
  Has the effect of clicking a button on the current form by specifying
  its name, value, or index.  Its arguments are a list of key/value
  pairs.  Only one of name, number, input or value must be specified in
  the keys.
  
  =over 4
  
  =item * C<< name => name >>
  
  Clicks the button named I<name> in the current form.
  
  =item * C<< id => id >>
  
  Clicks the button with the id I<id> in the current form.
  
  =item * C<< number => n >>
  
  Clicks the I<n>th button in the current form. Numbering starts at 1.
  
  =item * C<< value => value >>
  
  Clicks the button with the value I<value> in the current form.
  
  =item * C<< input => $inputobject >>
  
  Clicks on the button referenced by $inputobject, an instance of
  L<HTML::Form::SubmitInput> obtained e.g. from
  
      $mech->current_form()->find_input( undef, 'submit' )
  
  $inputobject must belong to the current form.
  
  =item * C<< x => x >>
  
  =item * C<< y => y >>
  
  These arguments (optional) allow you to specify the (x,y) coordinates
  of the click.
  
  =back
  
  =head2 $mech->submit()
  
  Submits the page, without specifying a button to click.  Actually,
  no button is clicked at all.
  
  Returns an L<HTTP::Response> object.
  
  This used to be a synonym for C<< $mech->click( 'submit' ) >>, but is no
  longer so.
  
  =head2 $mech->submit_form( ... )
  
  This method lets you select a form from the previously fetched page,
  fill in its fields, and submit it. It combines the form_number/form_name,
  set_fields and click methods into one higher level call. Its arguments
  are a list of key/value pairs, all of which are optional.
  
  =over 4
  
  =item * C<< fields => \%fields >>
  
  Specifies the fields to be filled in the current form.
  
  =item * C<< with_fields => \%fields >>
  
  Probably all you need for the common case. It combines a smart form selector
  and data setting in one operation. It selects the first form that contains all
  fields mentioned in C<\%fields>.  This is nice because you don't need to know
  the name or number of the form to do this.
  
  (calls C<L</form_with_fields()>> and C<L</set_fields()>>).
  
  If you choose this, the form_number, form_name, form_id and fields options will be ignored.
  
  =item * C<< form_number => n >>
  
  Selects the I<n>th form (calls C<L</form_number()>>).  If this parm is not
  specified, the currently-selected form is used.
  
  =item * C<< form_name => name >>
  
  Selects the form named I<name> (calls C<L</form_name()>>)
  
  =item * C<< form_id => ID >>
  
  Selects the form with ID I<ID> (calls C<L</form_id()>>)
  
  =item * C<< button => button >>
  
  Clicks on button I<button> (calls C<L</click()>>)
  
  =item * C<< x => x, y => y >>
  
  Sets the x or y values for C<L</click()>>
  
  =back
  
  If no form is selected, the first form found is used.
  
  If I<button> is not passed, then the C<L</submit()>> method is used instead.
  
  If you want to submit a file and get its content from a scalar rather
  than a file in the filesystem, you can use:
  
      $mech->submit_form(with_fields => { logfile => [ [ undef, 'whatever', Content => $content ], 1 ] } );
  
  Returns an L<HTTP::Response> object.
  
  =head1 MISCELLANEOUS METHODS
  
  =head2 $mech->add_header( name => $value [, name => $value... ] )
  
  Sets HTTP headers for the agent to add or remove from the HTTP request.
  
      $mech->add_header( Encoding => 'text/klingon' );
  
  If a I<value> is C<undef>, then that header will be removed from any
  future requests.  For example, to never send a Referer header:
  
      $mech->add_header( Referer => undef );
  
  If you want to delete a header, use C<delete_header>.
  
  Returns the number of name/value pairs added.
  
  B<NOTE>: This method was very different in WWW::Mechanize before 1.00.
  Back then, the headers were stored in a package hash, not as a member of
  the object instance.  Calling C<add_header()> would modify the headers
  for every WWW::Mechanize object, even after your object no longer existed.
  
  =head2 $mech->delete_header( name [, name ... ] )
  
  Removes HTTP headers from the agent's list of special headers.  For
  instance, you might need to do something like:
  
      # Don't send a Referer for this URL
      $mech->add_header( Referer => undef );
  
      # Get the URL
      $mech->get( $url );
  
      # Back to the default behavior
      $mech->delete_header( 'Referer' );
  
  =head2 $mech->quiet(true/false)
  
  Allows you to suppress warnings to the screen.
  
      $mech->quiet(0); # turns on warnings (the default)
      $mech->quiet(1); # turns off warnings
      $mech->quiet();  # returns the current quietness status
  
  =head2 $mech->stack_depth( $max_depth )
  
  Get or set the page stack depth. Use this if you're doing a lot of page
  scraping and running out of memory.
  
  A value of 0 means "no history at all."  By default, the max stack depth
  is humongously large, effectively keeping all history.
  
  =head2 $mech->save_content( $filename, %opts )
  
  Dumps the contents of C<< $mech->content >> into I<$filename>.
  I<$filename> will be overwritten.  Dies if there are any errors.
  
  If the content type does not begin with "text/", then the content
  is saved in binary mode (i.e. C<binmode()> is set on the output
  filehandle).
  
  Additional arguments can be passed as I<key>/I<value> pairs:
  
  =over
  
  =item I<< $mech->save_content( $filename, binary => 1 ) >>
  
  Filehandle is set with C<binmode> to C<:raw> and contents are taken
  calling C<< $self->content(decoded_by_headers => 1) >>. Same as calling:
  
      $mech->save_content( $filename, binmode => ':raw',
                           decoded_by_headers => 1 );
  
  This I<should> be the safest way to save contents verbatim.
  
  =item I<< $mech->save_content( $filename, binmode => $binmode ) >>
  
  Filehandle is set to binary mode. If C<$binmode> begins with ':', it is
  passed as a parameter to C<binmode>:
  
      binmode $fh, $binmode;
  
  otherwise the filehandle is set to binary mode if C<$binmode> is true:
  
      binmode $fh;
  
  =item I<all other arguments>
  
  are passed as-is to C<< $mech->content(%opts) >>. In particular,
  C<decoded_by_headers> might come handy if you want to revert the effect
  of line compression performed by the web server but without further
  interpreting the contents (e.g. decoding it according to the charset).
  
  =back
  
  =head2 $mech->dump_headers( [$fh] )
  
  Prints a dump of the HTTP response headers for the most recent
  response.  If I<$fh> is not specified or is undef, it dumps to
  STDOUT.
  
  Unlike the rest of the dump_* methods, $fh can be a scalar. It
  will be used as a file name.
  
  =head2 $mech->dump_links( [[$fh], $absolute] )
  
  Prints a dump of the links on the current page to I<$fh>.  If I<$fh>
  is not specified or is undef, it dumps to STDOUT.
  
  If I<$absolute> is true, links displayed are absolute, not relative.
  
  =head2 $mech->dump_images( [[$fh], $absolute] )
  
  Prints a dump of the images on the current page to I<$fh>.  If I<$fh>
  is not specified or is undef, it dumps to STDOUT.
  
  If I<$absolute> is true, links displayed are absolute, not relative.
  
  =head2 $mech->dump_forms( [$fh] )
  
  Prints a dump of the forms on the current page to I<$fh>.  If I<$fh>
  is not specified or is undef, it dumps to STDOUT.
  
  =head2 $mech->dump_text( [$fh] )
  
  Prints a dump of the text on the current page to I<$fh>.  If I<$fh>
  is not specified or is undef, it dumps to STDOUT.
  
  =head1 OVERRIDDEN LWP::UserAgent METHODS
  
  =head2 $mech->clone()
  
  Clone the mech object.  The clone will be using the same cookie jar
  as the original mech.
  
  =head2 $mech->redirect_ok()
  
  An overloaded version of C<redirect_ok()> in L<LWP::UserAgent>.
  This method is used to determine whether a redirection in the request
  should be followed.
  
  Note that WWW::Mechanize's constructor pushes POST on to the agent's
  C<requests_redirectable> list.
  
  =head2 $mech->request( $request [, $arg [, $size]])
  
  Overloaded version of C<request()> in L<LWP::UserAgent>.  Performs
  the actual request.  Normally, if you're using WWW::Mechanize, it's
  because you don't want to deal with this level of stuff anyway.
  
  Note that C<$request> will be modified.
  
  Returns an L<HTTP::Response> object.
  
  =head2 $mech->update_html( $html )
  
  Allows you to replace the HTML that the mech has found.  Updates the
  forms and links parse-trees that the mech uses internally.
  
  Say you have a page that you know has malformed output, and you want to
  update it so the links come out correctly:
  
      my $html = $mech->content;
      $html =~ s[</option>.{0,3}</td>][</option></select></td>]isg;
      $mech->update_html( $html );
  
  This method is also used internally by the mech itself to update its
  own HTML content when loading a page. This means that if you would
  like to I<systematically> perform the above HTML substitution, you
  would overload I<update_html> in a subclass thusly:
  
     package MyMech;
     use base 'WWW::Mechanize';
  
     sub update_html {
         my ($self, $html) = @_;
         $html =~ s[</option>.{0,3}</td>][</option></select></td>]isg;
         $self->WWW::Mechanize::update_html( $html );
     }
  
  If you do this, then the mech will use the tidied-up HTML instead of
  the original both when parsing for its own needs, and for returning to
  you through L</content>.
  
  Overloading this method is also the recommended way of implementing
  extra validation steps (e.g. link checkers) for every HTML page
  received.  L</warn> and L</die> would then come in handy to signal
  validation errors.
  
  =head2 $mech->credentials( $username, $password )
  
  Provide credentials to be used for HTTP Basic authentication for
  all sites and realms until further notice.
  
  The four argument form described in L<LWP::UserAgent> is still
  supported.
  
  =head2 $mech->get_basic_credentials( $realm, $uri, $isproxy )
  
  Returns the credentials for the realm and URI.
  
  =head2 $mech->clear_credentials()
  
  Remove any credentials set up with C<credentials()>.
  
  =head1 INHERITED UNCHANGED LWP::UserAgent METHODS
  
  As a subclass of L<LWP::UserAgent>, WWW::Mechanize inherits all of
  L<LWP::UserAgent>'s methods.  Many of which are overridden or
  extended. The following methods are inherited unchanged. View the
  L<LWP::UserAgent> documentation for their implementation descriptions.
  
  This is not meant to be an inclusive list.  LWP::UA may have added
  others.
  
  =head2 $mech->head()
  
  Inherited from L<LWP::UserAgent>.
  
  =head2 $mech->post()
  
  Inherited from L<LWP::UserAgent>.
  
  =head2 $mech->mirror()
  
  Inherited from L<LWP::UserAgent>.
  
  =head2 $mech->simple_request()
  
  Inherited from L<LWP::UserAgent>.
  
  =head2 $mech->is_protocol_supported()
  
  Inherited from L<LWP::UserAgent>.
  
  =head2 $mech->prepare_request()
  
  Inherited from L<LWP::UserAgent>.
  
  =head2 $mech->progress()
  
  Inherited from L<LWP::UserAgent>.
  
  =head1 INTERNAL-ONLY METHODS
  
  These methods are only used internally.  You probably don't need to
  know about them.
  
  =head2 $mech->_update_page($request, $response)
  
  Updates all internal variables in $mech as if $request was just
  performed, and returns $response. The page stack is B<not> altered by
  this method, it is up to caller (e.g. L</request>) to do that.
  
  =head2 $mech->_modify_request( $req )
  
  Modifies a L<HTTP::Request> before the request is sent out,
  for both GET and POST requests.
  
  We add a C<Referer> header, as well as header to note that we can accept gzip
  encoded content, if L<Compress::Zlib> is installed.
  
  =head2 $mech->_make_request()
  
  Convenience method to make it easier for subclasses like
  L<WWW::Mechanize::Cached> to intercept the request.
  
  =head2 $mech->_reset_page()
  
  Resets the internal fields that track page parsed stuff.
  
  =head2 $mech->_extract_links()
  
  Extracts links from the content of a webpage, and populates the C<{links}>
  property with L<WWW::Mechanize::Link> objects.
  
  =head2 $mech->_push_page_stack()
  
  The agent keeps a stack of visited pages, which it can pop when it needs
  to go BACK and so on.
  
  The current page needs to be pushed onto the stack before we get a new
  page, and the stack needs to be popped when BACK occurs.
  
  Neither of these take any arguments, they just operate on the $mech
  object.
  
  =head2 warn( @messages )
  
  Centralized warning method, for diagnostics and non-fatal problems.
  Defaults to calling C<CORE::warn>, but may be overridden by setting
  C<onwarn> in the constructor.
  
  =head2 die( @messages )
  
  Centralized error method.  Defaults to calling C<CORE::die>, but
  may be overridden by setting C<onerror> in the constructor.
  
  =head1 WWW::MECHANIZE'S GIT REPOSITORY
  
  WWW::Mechanize is hosted at GitHub.
  
  Repository: L<https://github.com/libwww-perl/WWW-Mechanize>.
  Bugs: L<https://github.com/libwww-perl/WWW-Mechanize/issues>.
  
  =head1 OTHER DOCUMENTATION
  
  =head2 I<Spidering Hacks>, by Kevin Hemenway and Tara Calishain
  
  I<Spidering Hacks> from O'Reilly
  (L<http://www.oreilly.com/catalog/spiderhks/>) is a great book for anyone
  wanting to know more about screen-scraping and spidering.
  
  There are six hacks that use Mech or a Mech derivative:
  
  =over 4
  
  =item #21 WWW::Mechanize 101
  
  =item #22 Scraping with WWW::Mechanize
  
  =item #36 Downloading Images from Webshots
  
  =item #44 Archiving Yahoo! Groups Messages with WWW::Yahoo::Groups
  
  =item #64 Super Author Searching
  
  =item #73 Scraping TV Listings
  
  =back
  
  The book was also positively reviewed on Slashdot:
  L<http://books.slashdot.org/article.pl?sid=03/12/11/2126256>
  
  =head1 ONLINE RESOURCES AND SUPPORT
  
  =over 4
  
  =item * WWW::Mechanize mailing list
  
  The Mech mailing list is at
  L<http://groups.google.com/group/www-mechanize-users> and is specific
  to Mechanize, unlike the LWP mailing list below.  Although it is a
  users list, all development discussion takes place here, too.
  
  =item * LWP mailing list
  
  The LWP mailing list is at
  L<http://lists.perl.org/showlist.cgi?name=libwww>, and is more
  user-oriented and well-populated than the WWW::Mechanize list.
  
  =item * Perlmonks
  
  L<http://perlmonks.org> is an excellent community of support, and
  many questions about Mech have already been answered there.
  
  =item * L<WWW::Mechanize::Examples>
  
  A random array of examples submitted by users, included with the
  Mechanize distribution.
  
  =back
  
  =head1 ARTICLES ABOUT WWW::MECHANIZE
  
  =over 4
  
  =item * L<http://www.ibm.com/developerworks/linux/library/wa-perlsecure/>
  
  IBM article "Secure Web site access with Perl"
  
  =item * L<http://www.oreilly.com/catalog/googlehks2/chapter/hack84.pdf>
  
  Leland Johnson's hack #84 in I<Google Hacks, 2nd Edition> is
  an example of a production script that uses WWW::Mechanize and
  HTML::TableContentParser. It takes in keywords and returns the estimated
  price of these keywords on Google's AdWords program.
  
  =item * L<http://www.perl.com/pub/a/2004/06/04/recorder.html>
  
  Linda Julien writes about using HTTP::Recorder to create WWW::Mechanize
  scripts.
  
  =item * L<http://www.developer.com/lang/other/article.php/3454041>
  
  Jason Gilmore's article on using WWW::Mechanize for scraping sales
  information from Amazon and eBay.
  
  =item * L<http://www.perl.com/pub/a/2003/01/22/mechanize.html>
  
  Chris Ball's article about using WWW::Mechanize for scraping TV
  listings.
  
  =item * L<http://www.stonehenge.com/merlyn/LinuxMag/col47.html>
  
  Randal Schwartz's article on scraping Yahoo News for images.  It's
  already out of date: He manually walks the list of links hunting
  for matches, which wouldn't have been necessary if the C<find_link()>
  method existed at press time.
  
  =item * L<http://www.perladvent.org/2002/16th/>
  
  WWW::Mechanize on the Perl Advent Calendar, by Mark Fowler.
  
  =item * L<http://www.linux-magazin.de/Ausgaben/2004/03/Datenruessel/%28language%29/ger-DE>
  
  Michael Schilli's article on Mech and L<WWW::Mechanize::Shell> for the
  German magazine I<Linux Magazin>.
  
  =back
  
  =head2 Other modules that use Mechanize
  
  Here are modules that use or subclass Mechanize.  Let me know of any others:
  
  =over 4
  
  =item * L<Finance::Bank::LloydsTSB>
  
  =item * L<HTTP::Recorder>
  
  Acts as a proxy for web interaction, and then generates WWW::Mechanize scripts.
  
  =item * L<Win32::IE::Mechanize>
  
  Just like Mech, but using Microsoft Internet Explorer to do the work.
  
  =item * L<WWW::Bugzilla>
  
  =item * L<WWW::CheckSite>
  
  =item * L<WWW::Google::Groups>
  
  =item * L<WWW::Hotmail>
  
  =item * L<WWW::Mechanize::Cached>
  
  =item * L<WWW::Mechanize::Cached::GZip>
  
  =item * L<WWW::Mechanize::FormFiller>
  
  =item * L<WWW::Mechanize::Shell>
  
  =item * L<WWW::Mechanize::Sleepy>
  
  =item * L<WWW::Mechanize::SpamCop>
  
  =item * L<WWW::Mechanize::Timed>
  
  =item * L<WWW::SourceForge>
  
  =item * L<WWW::Yahoo::Groups>
  
  =item * L<WWW::Scripter>
  
  =back
  
  =head1 ACKNOWLEDGEMENTS
  
  Thanks to the numerous people who have helped out on WWW::Mechanize in
  one way or another, including
  Kirrily Robert for the original C<WWW::Automate>,
  Lyle Hopkins,
  Damien Clark,
  Ansgar Burchardt,
  Gisle Aas,
  Jeremy Ary,
  Hilary Holz,
  Rafael Kitover,
  Norbert Buchmuller,
  Dave Page,
  David Sainty,
  H.Merijn Brand,
  Matt Lawrence,
  Michael Schwern,
  Adriano Ferreira,
  Miyagawa,
  Peteris Krumins,
  Rafael Kitover,
  David Steinbrunner,
  Kevin Falcone,
  Mike O'Regan,
  Mark Stosberg,
  Uri Guttman,
  Peter Scott,
  Phillipe Bruhat,
  Ian Langworth,
  John Beppu,
  Gavin Estey,
  Jim Brandt,
  Ask Bjoern Hansen,
  Greg Davies,
  Ed Silva,
  Mark-Jason Dominus,
  Autrijus Tang,
  Mark Fowler,
  Stuart Children,
  Max Maischein,
  Meng Wong,
  Prakash Kailasa,
  Abigail,
  Jan Pazdziora,
  Dominique Quatravaux,
  Scott Lanning,
  Rob Casey,
  Leland Johnson,
  Joshua Gatcomb,
  Julien Beasley,
  Abe Timmerman,
  Peter Stevens,
  Pete Krawczyk,
  Tad McClellan,
  and the late great Iain Truskett.
  
  =head1 AUTHOR
  
  Andy Lester <andy at petdance.com>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2004-2016 by Andy Lester.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
WWW_MECHANIZE

    $main::fatpacked{"WWW/Mechanize/Image.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'WWW_MECHANIZE_IMAGE';
  package WWW::Mechanize::Image;
  # vi:et:sw=4 ts=4
  $WWW::Mechanize::Image::VERSION = '1.78';
  use strict;
  use warnings;
  
  #ABSTRACT: Image object for WWW::Mechanize
  
  
  sub new {
      my $class = shift;
      my $parms = shift || {};
  
      my $self = bless {}, $class;
  
      for my $parm ( qw( url base tag height width alt name ) ) {
          # Check for what we passed in, not whether it's defined
          $self->{$parm} = $parms->{$parm} if exists $parms->{$parm};
      }
  
      # url and tag are always required
      for ( qw( url tag ) ) {
          exists $self->{$_} or die "WWW::Mechanize::Image->new must have a $_ argument";
      }
  
      return $self;
  }
  
  
  sub url     { return ($_[0])->{url}; }
  sub base    { return ($_[0])->{base}; }
  sub name    { return ($_[0])->{name}; }
  sub tag     { return ($_[0])->{tag}; }
  sub height  { return ($_[0])->{height}; }
  sub width   { return ($_[0])->{width}; }
  sub alt     { return ($_[0])->{alt}; }
  
  
  sub URI {
      my $self = shift;
  
      require URI::URL;
      my $URI = URI::URL->new( $self->url, $self->base );
  
      return $URI;
  }
  
  
  sub url_abs {
      my $self = shift;
  
      return $self->URI->abs;
  }
  
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  WWW::Mechanize::Image - Image object for WWW::Mechanize
  
  =head1 VERSION
  
  version 1.78
  
  =head1 SYNOPSIS
  
  Image object to encapsulate all the stuff that Mech needs
  
  =head1 Constructor
  
  =head2 new()
  
  Creates and returns a new C<WWW::Mechanize::Image> object.
  
      my $image = WWW::Mechanize::Image->new( {
          url    => $url,
          base   => $base,
          tag    => $tag,
          name   => $name,    # From the INPUT tag
          height => $height,  # optional
          width  => $width,   # optional
          alt    => $alt,     # optional
      } );
  
  =head1 Accessors
  
  =head2 $link->url()
  
  URL from the link
  
  =head2 $link->base()
  
  Base URL to which the links are relative.
  
  =head2 $link->name()
  
  Name for the field from the NAME attribute, if any.
  
  =head2 $link->tag()
  
  Tag name (either "image" or "input")
  
  =head2 $link->height()
  
  Image height
  
  =head2 $link->width()
  
  Image width
  
  =head2 $link->alt()
  
  ALT attribute from the source tag, if any.
  
  =head2 $link->URI()
  
  Returns the URL as a L<URI::URL> object.
  
  =head2 $link->url_abs()
  
  Returns the URL as an absolute URL string.
  
  =head1 SEE ALSO
  
  L<WWW::Mechanize> and L<WWW::Mechanize::Link>
  
  =head1 AUTHOR
  
  Andy Lester <andy at petdance.com>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2004-2016 by Andy Lester.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
WWW_MECHANIZE_IMAGE

    $main::fatpacked{"WWW/Mechanize/Link.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'WWW_MECHANIZE_LINK';
  package WWW::Mechanize::Link;
  $WWW::Mechanize::Link::VERSION = '1.78';
  use strict;
  use warnings;
  
  #ABSTRACT: Link object for WWW::Mechanize
  
  
  sub new {
      my $class = shift;
  
      my $self;
  
      # The order of the first four must stay as they are for
      # compatibility with older code.
      if ( ref $_[0] eq 'HASH' ) {
          $self = [ @{$_[0]}{ qw( url text name tag base attrs ) } ];
      }
      else {
          $self = [ @_ ];
      }
  
      return bless $self, $class;
  }
  
  
  sub url   { return ($_[0])->[0]; }
  sub text  { return ($_[0])->[1]; }
  sub name  { return ($_[0])->[2]; }
  sub tag   { return ($_[0])->[3]; }
  sub base  { return ($_[0])->[4]; }
  sub attrs { return ($_[0])->[5]; }
  
  
  sub URI {
      my $self = shift;
  
      require URI::URL;
      my $URI = URI::URL->new( $self->url, $self->base );
  
      return $URI;
  }
  
  
  sub url_abs {
      my $self = shift;
  
      return $self->URI->abs;
  }
  
  
  # vi:et:sw=4 ts=4
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  WWW::Mechanize::Link - Link object for WWW::Mechanize
  
  =head1 VERSION
  
  version 1.78
  
  =head1 SYNOPSIS
  
  Link object to encapsulate all the stuff that Mech needs but nobody
  wants to deal with as an array.
  
  =head1 Constructor
  
  =head2 new()
  
      my $link = WWW::Mechanize::Link->new( {
          url  => $url,
          text => $text,
          name => $name,
          tag  => $tag,
          base => $base,
          attr => $attr_href,
      } );
  
  For compatibility, this older interface is also supported:
  
   new( $url, $text, $name, $tag, $base, $attr_href )
  
  Creates and returns a new C<WWW::Mechanize::Link> object.
  
  =head1 Accessors
  
  =head2 $link->url()
  
  URL from the link
  
  =head2 $link->text()
  
  Text of the link
  
  =head2 $link->name()
  
  NAME attribute from the source tag, if any.
  
  =head2 $link->tag()
  
  Tag name (one of: "a", "area", "frame", "iframe" or "meta").
  
  =head2 $link->base()
  
  Base URL to which the links are relative.
  
  =head2 $link->attrs()
  
  Returns hash ref of all the attributes and attribute values in the tag. 
  
  =head2 $link->URI()
  
  Returns the URL as a L<URI::URL> object.
  
  =head2 $link->url_abs()
  
  Returns a L<URI::URL> object for the absolute form of the string.
  
  =head1 SEE ALSO
  
  L<WWW::Mechanize> and L<WWW::Mechanize::Image>
  
  =head1 AUTHOR
  
  Andy Lester <andy at petdance.com>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2004-2016 by Andy Lester.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
WWW_MECHANIZE_LINK

    $main::fatpacked{"WWW/RobotRules.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'WWW_ROBOTRULES';
  package WWW::RobotRules;
  
  $VERSION = "6.02";
  sub Version { $VERSION; }
  
  use strict;
  use URI ();
  
  
  
  sub new {
      my($class, $ua) = @_;
  
      # This ugly hack is needed to ensure backwards compatibility.
      # The "WWW::RobotRules" class is now really abstract.
      $class = "WWW::RobotRules::InCore" if $class eq "WWW::RobotRules";
  
      my $self = bless { }, $class;
      $self->agent($ua);
      $self;
  }
  
  
  sub parse {
      my($self, $robot_txt_uri, $txt, $fresh_until) = @_;
      $robot_txt_uri = URI->new("$robot_txt_uri");
      my $netloc = $robot_txt_uri->host . ":" . $robot_txt_uri->port;
  
      $self->clear_rules($netloc);
      $self->fresh_until($netloc, $fresh_until || (time + 365*24*3600));
  
      my $ua;
      my $is_me = 0;		# 1 iff this record is for me
      my $is_anon = 0;		# 1 iff this record is for *
      my $seen_disallow = 0;      # watch for missing record separators
      my @me_disallowed = ();	# rules disallowed for me
      my @anon_disallowed = ();	# rules disallowed for *
  
      # blank lines are significant, so turn CRLF into LF to avoid generating
      # false ones
      $txt =~ s/\015\012/\012/g;
  
      # split at \012 (LF) or \015 (CR) (Mac text files have just CR for EOL)
      for(split(/[\012\015]/, $txt)) {
  
  	# Lines containing only a comment are discarded completely, and
          # therefore do not indicate a record boundary.
  	next if /^\s*\#/;
  
  	s/\s*\#.*//;        # remove comments at end-of-line
  
  	if (/^\s*$/) {	    # blank line
  	    last if $is_me; # That was our record. No need to read the rest.
  	    $is_anon = 0;
  	    $seen_disallow = 0;
  	}
          elsif (/^\s*User-Agent\s*:\s*(.*)/i) {
  	    $ua = $1;
  	    $ua =~ s/\s+$//;
  
  	    if ($seen_disallow) {
  		# treat as start of a new record
  		$seen_disallow = 0;
  		last if $is_me; # That was our record. No need to read the rest.
  		$is_anon = 0;
  	    }
  
  	    if ($is_me) {
  		# This record already had a User-agent that
  		# we matched, so just continue.
  	    }
  	    elsif ($ua eq '*') {
  		$is_anon = 1;
  	    }
  	    elsif($self->is_me($ua)) {
  		$is_me = 1;
  	    }
  	}
  	elsif (/^\s*Disallow\s*:\s*(.*)/i) {
  	    unless (defined $ua) {
  		warn "RobotRules <$robot_txt_uri>: Disallow without preceding User-agent\n" if $^W;
  		$is_anon = 1;  # assume that User-agent: * was intended
  	    }
  	    my $disallow = $1;
  	    $disallow =~ s/\s+$//;
  	    $seen_disallow = 1;
  	    if (length $disallow) {
  		my $ignore;
  		eval {
  		    my $u = URI->new_abs($disallow, $robot_txt_uri);
  		    $ignore++ if $u->scheme ne $robot_txt_uri->scheme;
  		    $ignore++ if lc($u->host) ne lc($robot_txt_uri->host);
  		    $ignore++ if $u->port ne $robot_txt_uri->port;
  		    $disallow = $u->path_query;
  		    $disallow = "/" unless length $disallow;
  		};
  		next if $@;
  		next if $ignore;
  	    }
  
  	    if ($is_me) {
  		push(@me_disallowed, $disallow);
  	    }
  	    elsif ($is_anon) {
  		push(@anon_disallowed, $disallow);
  	    }
  	}
          elsif (/\S\s*:/) {
               # ignore
          }
  	else {
  	    warn "RobotRules <$robot_txt_uri>: Malformed record: <$_>\n" if $^W;
  	}
      }
  
      if ($is_me) {
  	$self->push_rules($netloc, @me_disallowed);
      }
      else {
  	$self->push_rules($netloc, @anon_disallowed);
      }
  }
  
  
  #
  # Returns TRUE if the given name matches the
  # name of this robot
  #
  sub is_me {
      my($self, $ua_line) = @_;
      my $me = $self->agent;
  
      # See whether my short-name is a substring of the
      #  "User-Agent: ..." line that we were passed:
  
      if(index(lc($me), lc($ua_line)) >= 0) {
        return 1;
      }
      else {
        return '';
      }
  }
  
  
  sub allowed {
      my($self, $uri) = @_;
      $uri = URI->new("$uri");
  
      return 1 unless $uri->scheme eq 'http' or $uri->scheme eq 'https';
       # Robots.txt applies to only those schemes.
  
      my $netloc = $uri->host . ":" . $uri->port;
  
      my $fresh_until = $self->fresh_until($netloc);
      return -1 if !defined($fresh_until) || $fresh_until < time;
  
      my $str = $uri->path_query;
      my $rule;
      for $rule ($self->rules($netloc)) {
  	return 1 unless length $rule;
  	return 0 if index($str, $rule) == 0;
      }
      return 1;
  }
  
  
  # The following methods must be provided by the subclass.
  sub agent;
  sub visit;
  sub no_visits;
  sub last_visits;
  sub fresh_until;
  sub push_rules;
  sub clear_rules;
  sub rules;
  sub dump;
  
  
  
  package WWW::RobotRules::InCore;
  
  use vars qw(@ISA);
  @ISA = qw(WWW::RobotRules);
  
  
  
  sub agent {
      my ($self, $name) = @_;
      my $old = $self->{'ua'};
      if ($name) {
          # Strip it so that it's just the short name.
          # I.e., "FooBot"                                      => "FooBot"
          #       "FooBot/1.2"                                  => "FooBot"
          #       "FooBot/1.2 [http://foobot.int; foo@bot.int]" => "FooBot"
  
  	$name = $1 if $name =~ m/(\S+)/; # get first word
  	$name =~ s!/.*!!;  # get rid of version
  	unless ($old && $old eq $name) {
  	    delete $self->{'loc'}; # all old info is now stale
  	    $self->{'ua'} = $name;
  	}
      }
      $old;
  }
  
  
  sub visit {
      my($self, $netloc, $time) = @_;
      return unless $netloc;
      $time ||= time;
      $self->{'loc'}{$netloc}{'last'} = $time;
      my $count = \$self->{'loc'}{$netloc}{'count'};
      if (!defined $$count) {
  	$$count = 1;
      }
      else {
  	$$count++;
      }
  }
  
  
  sub no_visits {
      my ($self, $netloc) = @_;
      $self->{'loc'}{$netloc}{'count'};
  }
  
  
  sub last_visit {
      my ($self, $netloc) = @_;
      $self->{'loc'}{$netloc}{'last'};
  }
  
  
  sub fresh_until {
      my ($self, $netloc, $fresh_until) = @_;
      my $old = $self->{'loc'}{$netloc}{'fresh'};
      if (defined $fresh_until) {
  	$self->{'loc'}{$netloc}{'fresh'} = $fresh_until;
      }
      $old;
  }
  
  
  sub push_rules {
      my($self, $netloc, @rules) = @_;
      push (@{$self->{'loc'}{$netloc}{'rules'}}, @rules);
  }
  
  
  sub clear_rules {
      my($self, $netloc) = @_;
      delete $self->{'loc'}{$netloc}{'rules'};
  }
  
  
  sub rules {
      my($self, $netloc) = @_;
      if (defined $self->{'loc'}{$netloc}{'rules'}) {
  	return @{$self->{'loc'}{$netloc}{'rules'}};
      }
      else {
  	return ();
      }
  }
  
  
  sub dump
  {
      my $self = shift;
      for (keys %$self) {
  	next if $_ eq 'loc';
  	print "$_ = $self->{$_}\n";
      }
      for (keys %{$self->{'loc'}}) {
  	my @rules = $self->rules($_);
  	print "$_: ", join("; ", @rules), "\n";
      }
  }
  
  
  1;
  
  __END__
  
  
  # Bender: "Well, I don't have anything else
  #          planned for today.  Let's get drunk!"
  
  =head1 NAME
  
  WWW::RobotRules - database of robots.txt-derived permissions
  
  =head1 SYNOPSIS
  
   use WWW::RobotRules;
   my $rules = WWW::RobotRules->new('MOMspider/1.0');
  
   use LWP::Simple qw(get);
  
   {
     my $url = "http://some.place/robots.txt";
     my $robots_txt = get $url;
     $rules->parse($url, $robots_txt) if defined $robots_txt;
   }
  
   {
     my $url = "http://some.other.place/robots.txt";
     my $robots_txt = get $url;
     $rules->parse($url, $robots_txt) if defined $robots_txt;
   }
  
   # Now we can check if a URL is valid for those servers
   # whose "robots.txt" files we've gotten and parsed:
   if($rules->allowed($url)) {
       $c = get $url;
       ...
   }
  
  =head1 DESCRIPTION
  
  This module parses F</robots.txt> files as specified in
  "A Standard for Robot Exclusion", at
  <http://www.robotstxt.org/wc/norobots.html>
  Webmasters can use the F</robots.txt> file to forbid conforming
  robots from accessing parts of their web site.
  
  The parsed files are kept in a WWW::RobotRules object, and this object
  provides methods to check if access to a given URL is prohibited.  The
  same WWW::RobotRules object can be used for one or more parsed
  F</robots.txt> files on any number of hosts.
  
  The following methods are provided:
  
  =over 4
  
  =item $rules = WWW::RobotRules->new($robot_name)
  
  This is the constructor for WWW::RobotRules objects.  The first
  argument given to new() is the name of the robot.
  
  =item $rules->parse($robot_txt_url, $content, $fresh_until)
  
  The parse() method takes as arguments the URL that was used to
  retrieve the F</robots.txt> file, and the contents of the file.
  
  =item $rules->allowed($uri)
  
  Returns TRUE if this robot is allowed to retrieve this URL.
  
  =item $rules->agent([$name])
  
  Get/set the agent name. NOTE: Changing the agent name will clear the robots.txt
  rules and expire times out of the cache.
  
  =back
  
  =head1 ROBOTS.TXT
  
  The format and semantics of the "/robots.txt" file are as follows
  (this is an edited abstract of
  <http://www.robotstxt.org/wc/norobots.html>):
  
  The file consists of one or more records separated by one or more
  blank lines. Each record contains lines of the form
  
    <field-name>: <value>
  
  The field name is case insensitive.  Text after the '#' character on a
  line is ignored during parsing.  This is used for comments.  The
  following <field-names> can be used:
  
  =over 3
  
  =item User-Agent
  
  The value of this field is the name of the robot the record is
  describing access policy for.  If more than one I<User-Agent> field is
  present the record describes an identical access policy for more than
  one robot. At least one field needs to be present per record.  If the
  value is '*', the record describes the default access policy for any
  robot that has not not matched any of the other records.
  
  The I<User-Agent> fields must occur before the I<Disallow> fields.  If a
  record contains a I<User-Agent> field after a I<Disallow> field, that
  constitutes a malformed record.  This parser will assume that a blank
  line should have been placed before that I<User-Agent> field, and will
  break the record into two.  All the fields before the I<User-Agent> field
  will constitute a record, and the I<User-Agent> field will be the first
  field in a new record.
  
  =item Disallow
  
  The value of this field specifies a partial URL that is not to be
  visited. This can be a full path, or a partial path; any URL that
  starts with this value will not be retrieved
  
  =back
  
  Unrecognized records are ignored.
  
  =head1 ROBOTS.TXT EXAMPLES
  
  The following example "/robots.txt" file specifies that no robots
  should visit any URL starting with "/cyberworld/map/" or "/tmp/":
  
    User-agent: *
    Disallow: /cyberworld/map/ # This is an infinite virtual URL space
    Disallow: /tmp/ # these will soon disappear
  
  This example "/robots.txt" file specifies that no robots should visit
  any URL starting with "/cyberworld/map/", except the robot called
  "cybermapper":
  
    User-agent: *
    Disallow: /cyberworld/map/ # This is an infinite virtual URL space
  
    # Cybermapper knows where to go.
    User-agent: cybermapper
    Disallow:
  
  This example indicates that no robots should visit this site further:
  
    # go away
    User-agent: *
    Disallow: /
  
  This is an example of a malformed robots.txt file.
  
    # robots.txt for ancientcastle.example.com
    # I've locked myself away.
    User-agent: *
    Disallow: /
    # The castle is your home now, so you can go anywhere you like.
    User-agent: Belle
    Disallow: /west-wing/ # except the west wing!
    # It's good to be the Prince...
    User-agent: Beast
    Disallow:
  
  This file is missing the required blank lines between records.
  However, the intention is clear.
  
  =head1 SEE ALSO
  
  L<LWP::RobotUA>, L<WWW::RobotRules::AnyDBM_File>
  
  =head1 COPYRIGHT
  
    Copyright 1995-2009, Gisle Aas
    Copyright 1995, Martijn Koster
  
  This library is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.
WWW_ROBOTRULES

    $main::fatpacked{"WWW/RobotRules/AnyDBM_File.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'WWW_ROBOTRULES_ANYDBM_FILE';
  package WWW::RobotRules::AnyDBM_File;
  
  require  WWW::RobotRules;
  @ISA = qw(WWW::RobotRules);
  $VERSION = "6.00";
  
  use Carp ();
  use AnyDBM_File;
  use Fcntl;
  use strict;
  
  =head1 NAME
  
  WWW::RobotRules::AnyDBM_File - Persistent RobotRules
  
  =head1 SYNOPSIS
  
   require WWW::RobotRules::AnyDBM_File;
   require LWP::RobotUA;
  
   # Create a robot useragent that uses a diskcaching RobotRules
   my $rules = WWW::RobotRules::AnyDBM_File->new( 'my-robot/1.0', 'cachefile' );
   my $ua = WWW::RobotUA->new( 'my-robot/1.0', 'me@foo.com', $rules );
  
   # Then just use $ua as usual
   $res = $ua->request($req);
  
  =head1 DESCRIPTION
  
  This is a subclass of I<WWW::RobotRules> that uses the AnyDBM_File
  package to implement persistent diskcaching of F<robots.txt> and host
  visit information.
  
  The constructor (the new() method) takes an extra argument specifying
  the name of the DBM file to use.  If the DBM file already exists, then
  you can specify undef as agent name as the name can be obtained from
  the DBM database.
  
  =cut
  
  sub new 
  { 
    my ($class, $ua, $file) = @_;
    Carp::croak('WWW::RobotRules::AnyDBM_File filename required') unless $file;
  
    my $self = bless { }, $class;
    $self->{'filename'} = $file;
    tie %{$self->{'dbm'}}, 'AnyDBM_File', $file, O_CREAT|O_RDWR, 0640
      or Carp::croak("Can't open $file: $!");
    
    if ($ua) {
        $self->agent($ua);
    }
    else {
        # Try to obtain name from DBM file
        $ua = $self->{'dbm'}{"|ua-name|"};
        Carp::croak("No agent name specified") unless $ua;
    }
  
    $self;
  }
  
  sub agent {
      my($self, $newname) = @_;
      my $old = $self->{'dbm'}{"|ua-name|"};
      if (defined $newname) {
  	$newname =~ s!/?\s*\d+.\d+\s*$!!;  # loose version
  	unless ($old && $old eq $newname) {
  	# Old info is now stale.
  	    my $file = $self->{'filename'};
  	    untie %{$self->{'dbm'}};
  	    tie %{$self->{'dbm'}}, 'AnyDBM_File', $file, O_TRUNC|O_RDWR, 0640;
  	    %{$self->{'dbm'}} = ();
  	    $self->{'dbm'}{"|ua-name|"} = $newname;
  	}
      }
      $old;
  }
  
  sub no_visits {
      my ($self, $netloc) = @_;
      my $t = $self->{'dbm'}{"$netloc|vis"};
      return 0 unless $t;
      (split(/;\s*/, $t))[0];
  }
  
  sub last_visit {
      my ($self, $netloc) = @_;
      my $t = $self->{'dbm'}{"$netloc|vis"};
      return undef unless $t;
      (split(/;\s*/, $t))[1];
  }
  
  sub fresh_until {
      my ($self, $netloc, $fresh) = @_;
      my $old = $self->{'dbm'}{"$netloc|exp"};
      if ($old) {
  	$old =~ s/;.*//;  # remove cleartext
      }
      if (defined $fresh) {
  	$fresh .= "; " . localtime($fresh);
  	$self->{'dbm'}{"$netloc|exp"} = $fresh;
      }
      $old;
  }
  
  sub visit {
      my($self, $netloc, $time) = @_;
      $time ||= time;
  
      my $count = 0;
      my $old = $self->{'dbm'}{"$netloc|vis"};
      if ($old) {
  	my $last;
  	($count,$last) = split(/;\s*/, $old);
  	$time = $last if $last > $time;
      }
      $count++;
      $self->{'dbm'}{"$netloc|vis"} = "$count; $time; " . localtime($time);
  }
  
  sub push_rules {
      my($self, $netloc, @rules) = @_;
      my $cnt = 1;
      $cnt++ while $self->{'dbm'}{"$netloc|r$cnt"};
  
      foreach (@rules) {
  	$self->{'dbm'}{"$netloc|r$cnt"} = $_;
  	$cnt++;
      }
  }
  
  sub clear_rules {
      my($self, $netloc) = @_;
      my $cnt = 1;
      while ($self->{'dbm'}{"$netloc|r$cnt"}) {
  	delete $self->{'dbm'}{"$netloc|r$cnt"};
  	$cnt++;
      }
  }
  
  sub rules {
      my($self, $netloc) = @_;
      my @rules = ();
      my $cnt = 1;
      while (1) {
  	my $rule = $self->{'dbm'}{"$netloc|r$cnt"};
  	last unless $rule;
  	push(@rules, $rule);
  	$cnt++;
      }
      @rules;
  }
  
  sub dump
  {
  }
  
  1;
  
  =head1 SEE ALSO
  
  L<WWW::RobotRules>, L<LWP::RobotUA>
  
  =head1 AUTHORS
  
  Hakan Ardo E<lt>hakan@munin.ub2.lu.se>, Gisle Aas E<lt>aas@sn.no>
  
  =cut
  
WWW_ROBOTRULES_ANYDBM_FILE

    $main::fatpacked{"YAML.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML';
  package YAML;
  our $VERSION = '1.18';
  
  use YAML::Mo;
  
  use Exporter;
  push @YAML::ISA, 'Exporter';
  our @EXPORT = qw{ Dump Load };
  our @EXPORT_OK = qw{ freeze thaw DumpFile LoadFile Bless Blessed };
  
  use YAML::Node; # XXX This is a temp fix for Module::Build
  
  # XXX This VALUE nonsense needs to go.
  use constant VALUE => "\x07YAML\x07VALUE\x07";
  
  # YAML Object Properties
  has dumper_class => default => sub {'YAML::Dumper'};
  has loader_class => default => sub {'YAML::Loader'};
  has dumper_object => default => sub {$_[0]->init_action_object("dumper")};
  has loader_object => default => sub {$_[0]->init_action_object("loader")};
  
  sub Dump {
      my $yaml = YAML->new;
      $yaml->dumper_class($YAML::DumperClass)
          if $YAML::DumperClass;
      return $yaml->dumper_object->dump(@_);
  }
  
  sub Load {
      my $yaml = YAML->new;
      $yaml->loader_class($YAML::LoaderClass)
          if $YAML::LoaderClass;
      return $yaml->loader_object->load(@_);
  }
  
  {
      no warnings 'once';
      # freeze/thaw is the API for Storable string serialization. Some
      # modules make use of serializing packages on if they use freeze/thaw.
      *freeze = \ &Dump;
      *thaw   = \ &Load;
  }
  
  sub DumpFile {
      my $OUT;
      my $filename = shift;
      if (ref $filename eq 'GLOB') {
          $OUT = $filename;
      }
      else {
          my $mode = '>';
          if ($filename =~ /^\s*(>{1,2})\s*(.*)$/) {
              ($mode, $filename) = ($1, $2);
          }
          open $OUT, $mode, $filename
            or YAML::Mo::Object->die('YAML_DUMP_ERR_FILE_OUTPUT', $filename, $!);
      }
      binmode $OUT, ':utf8';  # if $Config{useperlio} eq 'define';
      local $/ = "\n"; # reset special to "sane"
      print $OUT Dump(@_);
  }
  
  sub LoadFile {
      my $IN;
      my $filename = shift;
      if (ref $filename eq 'GLOB') {
          $IN = $filename;
      }
      else {
          open $IN, '<', $filename
            or YAML::Mo::Object->die('YAML_LOAD_ERR_FILE_INPUT', $filename, $!);
      }
      binmode $IN, ':utf8';  # if $Config{useperlio} eq 'define';
      return Load(do { local $/; <$IN> });
  }
  
  sub init_action_object {
      my $self = shift;
      my $object_class = (shift) . '_class';
      my $module_name = $self->$object_class;
      eval "require $module_name";
      $self->die("Error in require $module_name - $@")
          if $@ and "$@" !~ /Can't locate/;
      my $object = $self->$object_class->new;
      $object->set_global_options;
      return $object;
  }
  
  my $global = {};
  sub Bless {
      require YAML::Dumper::Base;
      YAML::Dumper::Base::bless($global, @_)
  }
  sub Blessed {
      require YAML::Dumper::Base;
      YAML::Dumper::Base::blessed($global, @_)
  }
  sub global_object { $global }
  
  1;
YAML

    $main::fatpacked{"YAML/Any.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_ANY';
  use strict; use warnings;
  package YAML::Any;
  our $VERSION = '1.18';
  
  use Exporter ();
  
  @YAML::Any::ISA       = 'Exporter';
  @YAML::Any::EXPORT    = qw(Dump Load);
  @YAML::Any::EXPORT_OK = qw(DumpFile LoadFile);
  
  my @dump_options = qw(
      UseCode
      DumpCode
      SpecVersion
      Indent
      UseHeader
      UseVersion
      SortKeys
      AnchorPrefix
      UseBlock
      UseFold
      CompressSeries
      InlineSeries
      UseAliases
      Purity
      Stringify
  );
  
  my @load_options = qw(
      UseCode
      LoadCode
  );
  
  my @implementations = qw(
      YAML::XS
      YAML::Syck
      YAML::Old
      YAML
      YAML::Tiny
  );
  
  sub import {
      __PACKAGE__->implementation;
      goto &Exporter::import;
  }
  
  sub Dump {
      no strict 'refs';
      no warnings 'once';
      my $implementation = __PACKAGE__->implementation;
      for my $option (@dump_options) {
          my $var = "$implementation\::$option";
          my $value = $$var;
          local $$var;
          $$var = defined $value ? $value : ${"YAML::$option"};
      }
      return &{"$implementation\::Dump"}(@_);
  }
  
  sub DumpFile {
      no strict 'refs';
      no warnings 'once';
      my $implementation = __PACKAGE__->implementation;
      for my $option (@dump_options) {
          my $var = "$implementation\::$option";
          my $value = $$var;
          local $$var;
          $$var = defined $value ? $value : ${"YAML::$option"};
      }
      return &{"$implementation\::DumpFile"}(@_);
  }
  
  sub Load {
      no strict 'refs';
      no warnings 'once';
      my $implementation = __PACKAGE__->implementation;
      for my $option (@load_options) {
          my $var = "$implementation\::$option";
          my $value = $$var;
          local $$var;
          $$var = defined $value ? $value : ${"YAML::$option"};
      }
      return &{"$implementation\::Load"}(@_);
  }
  
  sub LoadFile {
      no strict 'refs';
      no warnings 'once';
      my $implementation = __PACKAGE__->implementation;
      for my $option (@load_options) {
          my $var = "$implementation\::$option";
          my $value = $$var;
          local $$var;
          $$var = defined $value ? $value : ${"YAML::$option"};
      }
      return &{"$implementation\::LoadFile"}(@_);
  }
  
  sub order {
      return @YAML::Any::_TEST_ORDER
          if @YAML::Any::_TEST_ORDER;
      return @implementations;
  }
  
  sub implementation {
      my @order = __PACKAGE__->order;
      for my $module (@order) {
          my $path = $module;
          $path =~ s/::/\//g;
          $path .= '.pm';
          return $module if exists $INC{$path};
          eval "require $module; 1" and return $module;
      }
      croak("YAML::Any couldn't find any of these YAML implementations: @order");
  }
  
  sub croak {
      require Carp;
      Carp::croak(@_);
  }
  
  1;
YAML_ANY

    $main::fatpacked{"YAML/Dumper.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_DUMPER';
  package YAML::Dumper;
  
  use YAML::Mo;
  extends 'YAML::Dumper::Base';
  
  use YAML::Dumper::Base;
  use YAML::Node;
  use YAML::Types;
  use Scalar::Util qw();
  
  # Context constants
  use constant KEY       => 3;
  use constant BLESSED   => 4;
  use constant FROMARRAY => 5;
  use constant VALUE     => "\x07YAML\x07VALUE\x07";
  
  # Common YAML character sets
  my $ESCAPE_CHAR = '[\\x00-\\x08\\x0b-\\x0d\\x0e-\\x1f]';
  my $LIT_CHAR    = '|';
  
  #==============================================================================
  # OO version of Dump. YAML->new->dump($foo);
  sub dump {
      my $self = shift;
      $self->stream('');
      $self->document(0);
      for my $document (@_) {
          $self->{document}++;
          $self->transferred({});
          $self->id_refcnt({});
          $self->id_anchor({});
          $self->anchor(1);
          $self->level(0);
          $self->offset->[0] = 0 - $self->indent_width;
          $self->_prewalk($document);
          $self->_emit_header($document);
          $self->_emit_node($document);
      }
      return $self->stream;
  }
  
  # Every YAML document in the stream must begin with a YAML header, unless
  # there is only a single document and the user requests "no header".
  sub _emit_header {
      my $self = shift;
      my ($node) = @_;
      if (not $self->use_header and
          $self->document == 1
         ) {
          $self->die('YAML_DUMP_ERR_NO_HEADER')
            unless ref($node) =~ /^(HASH|ARRAY)$/;
          $self->die('YAML_DUMP_ERR_NO_HEADER')
            if ref($node) eq 'HASH' and keys(%$node) == 0;
          $self->die('YAML_DUMP_ERR_NO_HEADER')
            if ref($node) eq 'ARRAY' and @$node == 0;
          # XXX Also croak if aliased, blessed, or ynode
          $self->headless(1);
          return;
      }
      $self->{stream} .= '---';
  # XXX Consider switching to 1.1 style
      if ($self->use_version) {
  #         $self->{stream} .= " #YAML:1.0";
      }
  }
  
  # Walk the tree to be dumped and keep track of its reference counts.
  # This function is where the Dumper does all its work. All type
  # transfers happen here.
  sub _prewalk {
      my $self = shift;
      my $stringify = $self->stringify;
      my ($class, $type, $node_id) = $self->node_info(\$_[0], $stringify);
  
      # Handle typeglobs
      if ($type eq 'GLOB') {
          $self->transferred->{$node_id} =
            YAML::Type::glob->yaml_dump($_[0]);
          $self->_prewalk($self->transferred->{$node_id});
          return;
      }
  
      # Handle regexps
      if (ref($_[0]) eq 'Regexp') {
          return;
      }
  
      # Handle Purity for scalars.
      # XXX can't find a use case yet. Might be YAGNI.
      if (not ref $_[0]) {
          $self->{id_refcnt}{$node_id}++ if $self->purity;
          return;
      }
  
      # Make a copy of original
      my $value = $_[0];
      ($class, $type, $node_id) = $self->node_info($value, $stringify);
  
      # Must be a stringified object.
      return if (ref($value) and not $type);
  
      # Look for things already transferred.
      if ($self->transferred->{$node_id}) {
          (undef, undef, $node_id) = (ref $self->transferred->{$node_id})
            ? $self->node_info($self->transferred->{$node_id}, $stringify)
            : $self->node_info(\ $self->transferred->{$node_id}, $stringify);
          $self->{id_refcnt}{$node_id}++;
          return;
      }
  
      # Handle code refs
      if ($type eq 'CODE') {
          $self->transferred->{$node_id} = 'placeholder';
          YAML::Type::code->yaml_dump(
              $self->dump_code,
              $_[0],
              $self->transferred->{$node_id}
          );
          ($class, $type, $node_id) =
            $self->node_info(\ $self->transferred->{$node_id}, $stringify);
          $self->{id_refcnt}{$node_id}++;
          return;
      }
  
      # Handle blessed things
      if (defined $class) {
          if ($value->can('yaml_dump')) {
              $value = $value->yaml_dump;
          }
          elsif ($type eq 'SCALAR') {
              $self->transferred->{$node_id} = 'placeholder';
              YAML::Type::blessed->yaml_dump
                ($_[0], $self->transferred->{$node_id});
              ($class, $type, $node_id) =
                $self->node_info(\ $self->transferred->{$node_id}, $stringify);
              $self->{id_refcnt}{$node_id}++;
              return;
          }
          else {
              $value = YAML::Type::blessed->yaml_dump($value);
          }
          $self->transferred->{$node_id} = $value;
          (undef, $type, $node_id) = $self->node_info($value, $stringify);
      }
  
      # Handle YAML Blessed things
      require YAML;
      if (defined YAML->global_object()->{blessed_map}{$node_id}) {
          $value = YAML->global_object()->{blessed_map}{$node_id};
          $self->transferred->{$node_id} = $value;
          ($class, $type, $node_id) = $self->node_info($value, $stringify);
          $self->_prewalk($value);
          return;
      }
  
      # Handle hard refs
      if ($type eq 'REF' or $type eq 'SCALAR') {
          $value = YAML::Type::ref->yaml_dump($value);
          $self->transferred->{$node_id} = $value;
          (undef, $type, $node_id) = $self->node_info($value, $stringify);
      }
  
      # Handle ref-to-glob's
      elsif ($type eq 'GLOB') {
          my $ref_ynode = $self->transferred->{$node_id} =
            YAML::Type::ref->yaml_dump($value);
  
          my $glob_ynode = $ref_ynode->{&VALUE} =
            YAML::Type::glob->yaml_dump($$value);
  
          (undef, undef, $node_id) = $self->node_info($glob_ynode, $stringify);
          $self->transferred->{$node_id} = $glob_ynode;
          $self->_prewalk($glob_ynode);
          return;
      }
  
      # Increment ref count for node
      return if ++($self->{id_refcnt}{$node_id}) > 1;
  
      # Keep on walking
      if ($type eq 'HASH') {
          $self->_prewalk($value->{$_})
              for keys %{$value};
          return;
      }
      elsif ($type eq 'ARRAY') {
          $self->_prewalk($_)
              for @{$value};
          return;
      }
  
      # Unknown type. Need to know about it.
      $self->warn(<<"...");
  YAML::Dumper can't handle dumping this type of data.
  Please report this to the author.
  
  id:    $node_id
  type:  $type
  class: $class
  value: $value
  
  ...
  
      return;
  }
  
  # Every data element and sub data element is a node.
  # Everything emitted goes through this function.
  sub _emit_node {
      my $self = shift;
      my ($type, $node_id);
      my $ref = ref($_[0]);
      if ($ref) {
          if ($ref eq 'Regexp') {
              $self->_emit(' !!perl/regexp');
              $self->_emit_str("$_[0]");
              return;
          }
          (undef, $type, $node_id) = $self->node_info($_[0], $self->stringify);
      }
      else {
          $type = $ref || 'SCALAR';
          (undef, undef, $node_id) = $self->node_info(\$_[0], $self->stringify);
      }
  
      my ($ynode, $tag) = ('') x 2;
      my ($value, $context) = (@_, 0);
  
      if (defined $self->transferred->{$node_id}) {
          $value = $self->transferred->{$node_id};
          $ynode = ynode($value);
          if (ref $value) {
              $tag = defined $ynode ? $ynode->tag->short : '';
              (undef, $type, $node_id) =
                $self->node_info($value, $self->stringify);
          }
          else {
              $ynode = ynode($self->transferred->{$node_id});
              $tag = defined $ynode ? $ynode->tag->short : '';
              $type = 'SCALAR';
              (undef, undef, $node_id) =
                $self->node_info(
                    \ $self->transferred->{$node_id},
                    $self->stringify
                );
          }
      }
      elsif ($ynode = ynode($value)) {
          $tag = $ynode->tag->short;
      }
  
      if ($self->use_aliases) {
          $self->{id_refcnt}{$node_id} ||= 0;
          if ($self->{id_refcnt}{$node_id} > 1) {
              if (defined $self->{id_anchor}{$node_id}) {
                  $self->{stream} .= ' *' . $self->{id_anchor}{$node_id} . "\n";
                  return;
              }
              my $anchor = $self->anchor_prefix . $self->{anchor}++;
              $self->{stream} .= ' &' . $anchor;
              $self->{id_anchor}{$node_id} = $anchor;
          }
      }
  
      return $self->_emit_str("$value")   # Stringified object
        if ref($value) and not $type;
      return $self->_emit_scalar($value, $tag)
        if $type eq 'SCALAR' and $tag;
      return $self->_emit_str($value)
        if $type eq 'SCALAR';
      return $self->_emit_mapping($value, $tag, $node_id, $context)
        if $type eq 'HASH';
      return $self->_emit_sequence($value, $tag)
        if $type eq 'ARRAY';
      $self->warn('YAML_DUMP_WARN_BAD_NODE_TYPE', $type);
      return $self->_emit_str("$value");
  }
  
  # A YAML mapping is akin to a Perl hash.
  sub _emit_mapping {
      my $self = shift;
      my ($value, $tag, $node_id, $context) = @_;
      $self->{stream} .= " !$tag" if $tag;
  
      # Sometimes 'keys' fails. Like on a bad tie implementation.
      my $empty_hash = not(eval {keys %$value});
      $self->warn('YAML_EMIT_WARN_KEYS', $@) if $@;
      return ($self->{stream} .= " {}\n") if $empty_hash;
  
      # If CompressSeries is on (default) and legal is this context, then
      # use it and make the indent level be 2 for this node.
      if ($context == FROMARRAY and
          $self->compress_series and
          not (defined $self->{id_anchor}{$node_id} or $tag or $empty_hash)
         ) {
          $self->{stream} .= ' ';
          $self->offset->[$self->level+1] = $self->offset->[$self->level] + 2;
      }
      else {
          $context = 0;
          $self->{stream} .= "\n"
            unless $self->headless && not($self->headless(0));
          $self->offset->[$self->level+1] =
            $self->offset->[$self->level] + $self->indent_width;
      }
  
      $self->{level}++;
      my @keys;
      if ($self->sort_keys == 1) {
          if (ynode($value)) {
              @keys = keys %$value;
          }
          else {
              @keys = sort keys %$value;
          }
      }
      elsif ($self->sort_keys == 2) {
          @keys = sort keys %$value;
      }
      # XXX This is hackish but sometimes handy. Not sure whether to leave it in.
      elsif (ref($self->sort_keys) eq 'ARRAY') {
          my $i = 1;
          my %order = map { ($_, $i++) } @{$self->sort_keys};
          @keys = sort {
              (defined $order{$a} and defined $order{$b})
                ? ($order{$a} <=> $order{$b})
                : ($a cmp $b);
          } keys %$value;
      }
      else {
          @keys = keys %$value;
      }
      # Force the YAML::VALUE ('=') key to sort last.
      if (exists $value->{&VALUE}) {
          for (my $i = 0; $i < @keys; $i++) {
              if ($keys[$i] eq &VALUE) {
                  splice(@keys, $i, 1);
                  push @keys, &VALUE;
                  last;
              }
          }
      }
  
      for my $key (@keys) {
          $self->_emit_key($key, $context);
          $context = 0;
          $self->{stream} .= ':';
          $self->_emit_node($value->{$key});
      }
      $self->{level}--;
  }
  
  # A YAML series is akin to a Perl array.
  sub _emit_sequence {
      my $self = shift;
      my ($value, $tag) = @_;
      $self->{stream} .= " !$tag" if $tag;
  
      return ($self->{stream} .= " []\n") if @$value == 0;
  
      $self->{stream} .= "\n"
        unless $self->headless && not($self->headless(0));
  
      # XXX Really crufty feature. Better implemented by ynodes.
      if ($self->inline_series and
          @$value <= $self->inline_series and
          not (scalar grep {ref or /\n/} @$value)
         ) {
          $self->{stream} =~ s/\n\Z/ /;
          $self->{stream} .= '[';
          for (my $i = 0; $i < @$value; $i++) {
              $self->_emit_str($value->[$i], KEY);
              last if $i == $#{$value};
              $self->{stream} .= ', ';
          }
          $self->{stream} .= "]\n";
          return;
      }
  
      $self->offset->[$self->level + 1] =
        $self->offset->[$self->level] + $self->indent_width;
      $self->{level}++;
      for my $val (@$value) {
          $self->{stream} .= ' ' x $self->offset->[$self->level];
          $self->{stream} .= '-';
          $self->_emit_node($val, FROMARRAY);
      }
      $self->{level}--;
  }
  
  # Emit a mapping key
  sub _emit_key {
      my $self = shift;
      my ($value, $context) = @_;
      $self->{stream} .= ' ' x $self->offset->[$self->level]
        unless $context == FROMARRAY;
      $self->_emit_str($value, KEY);
  }
  
  # Emit a blessed SCALAR
  sub _emit_scalar {
      my $self = shift;
      my ($value, $tag) = @_;
      $self->{stream} .= " !$tag";
      $self->_emit_str($value, BLESSED);
  }
  
  sub _emit {
      my $self = shift;
      $self->{stream} .= join '', @_;
  }
  
  # Emit a string value. YAML has many scalar styles. This routine attempts to
  # guess the best style for the text.
  sub _emit_str {
      my $self = shift;
      my $type = $_[1] || 0;
  
      # Use heuristics to find the best scalar emission style.
      $self->offset->[$self->level + 1] =
        $self->offset->[$self->level] + $self->indent_width;
      $self->{level}++;
  
      my $sf = $type == KEY ? '' : ' ';
      my $sb = $type == KEY ? '? ' : ' ';
      my $ef = $type == KEY ? '' : "\n";
      my $eb = "\n";
  
      while (1) {
          $self->_emit($sf),
          $self->_emit_plain($_[0]),
          $self->_emit($ef), last
            if not defined $_[0];
          $self->_emit($sf, '=', $ef), last
            if $_[0] eq VALUE;
          $self->_emit($sf),
          $self->_emit_double($_[0]),
          $self->_emit($ef), last
            if $_[0] =~ /$ESCAPE_CHAR/;
          if ($_[0] =~ /\n/) {
              $self->_emit($sb),
              $self->_emit_block($LIT_CHAR, $_[0]),
              $self->_emit($eb), last
                if $self->use_block;
                Carp::cluck "[YAML] \$UseFold is no longer supported"
                if $self->use_fold;
              $self->_emit($sf),
              $self->_emit_double($_[0]),
              $self->_emit($ef), last
                if length $_[0] <= 30;
              $self->_emit($sf),
              $self->_emit_double($_[0]),
              $self->_emit($ef), last
                if $_[0] !~ /\n\s*\S/;
              $self->_emit($sb),
              $self->_emit_block($LIT_CHAR, $_[0]),
              $self->_emit($eb), last;
          }
          $self->_emit($sf),
          $self->_emit_number($_[0]),
          $self->_emit($ef), last
            if $self->is_literal_number($_[0]);
          $self->_emit($sf),
          $self->_emit_plain($_[0]),
          $self->_emit($ef), last
            if $self->is_valid_plain($_[0]);
          $self->_emit($sf),
          $self->_emit_double($_[0]),
          $self->_emit($ef), last
            if $_[0] =~ /'/;
          $self->_emit($sf),
          $self->_emit_single($_[0]),
          $self->_emit($ef);
          last;
      }
  
      $self->{level}--;
  
      return;
  }
  
  sub is_literal_number {
      my $self = shift;
      # Stolen from JSON::Tiny
      return B::svref_2object(\$_[0])->FLAGS & (B::SVp_IOK | B::SVp_NOK)
              && 0 + $_[0] eq $_[0];
  }
  
  sub _emit_number {
      my $self = shift;
      return $self->_emit_plain($_[0]);
  }
  
  # Check whether or not a scalar should be emitted as an plain scalar.
  sub is_valid_plain {
      my $self = shift;
      return 0 unless length $_[0];
      return 0 if $self->quote_numeric_strings and Scalar::Util::looks_like_number($_[0]);
      # refer to YAML::Loader::parse_inline_simple()
      return 0 if $_[0] =~ /^[\s\{\[\~\`\'\"\!\@\#\>\|\%\&\?\*\^]/;
      return 0 if $_[0] =~ /[\{\[\]\},]/;
      return 0 if $_[0] =~ /[:\-\?]\s/;
      return 0 if $_[0] =~ /\s#/;
      return 0 if $_[0] =~ /\:(\s|$)/;
      return 0 if $_[0] =~ /[\s\|\>]$/;
      return 0 if $_[0] eq '-';
      return 1;
  }
  
  sub _emit_block {
      my $self = shift;
      my ($indicator, $value) = @_;
      $self->{stream} .= $indicator;
      $value =~ /(\n*)\Z/;
      my $chomp = length $1 ? (length $1 > 1) ? '+' : '' : '-';
      $value = '~' if not defined $value;
      $self->{stream} .= $chomp;
      $self->{stream} .= $self->indent_width if $value =~ /^\s/;
      $self->{stream} .= $self->indent($value);
  }
  
  # Plain means that the scalar is unquoted.
  sub _emit_plain {
      my $self = shift;
      $self->{stream} .= defined $_[0] ? $_[0] : '~';
  }
  
  # Double quoting is for single lined escaped strings.
  sub _emit_double {
      my $self = shift;
      (my $escaped = $self->escape($_[0])) =~ s/"/\\"/g;
      $self->{stream} .= qq{"$escaped"};
  }
  
  # Single quoting is for single lined unescaped strings.
  sub _emit_single {
      my $self = shift;
      my $item = shift;
      $item =~ s{'}{''}g;
      $self->{stream} .= "'$item'";
  }
  
  #==============================================================================
  # Utility subroutines.
  #==============================================================================
  
  # Indent a scalar to the current indentation level.
  sub indent {
      my $self = shift;
      my ($text) = @_;
      return $text unless length $text;
      $text =~ s/\n\Z//;
      my $indent = ' ' x $self->offset->[$self->level];
      $text =~ s/^/$indent/gm;
      $text = "\n$text";
      return $text;
  }
  
  # Escapes for unprintable characters
  my @escapes = qw(\0   \x01 \x02 \x03 \x04 \x05 \x06 \a
                   \x08 \t   \n   \v   \f   \r   \x0e \x0f
                   \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17
                   \x18 \x19 \x1a \e   \x1c \x1d \x1e \x1f
                  );
  
  # Escape the unprintable characters
  sub escape {
      my $self = shift;
      my ($text) = @_;
      $text =~ s/\\/\\\\/g;
      $text =~ s/([\x00-\x1f])/$escapes[ord($1)]/ge;
      return $text;
  }
  
  1;
YAML_DUMPER

    $main::fatpacked{"YAML/Dumper/Base.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_DUMPER_BASE';
  package YAML::Dumper::Base;
  
  use YAML::Mo;
  
  use YAML::Node;
  
  # YAML Dumping options
  has spec_version    => default => sub {'1.0'};
  has indent_width    => default => sub {2};
  has use_header      => default => sub {1};
  has use_version     => default => sub {0};
  has sort_keys       => default => sub {1};
  has anchor_prefix   => default => sub {''};
  has dump_code       => default => sub {0};
  has use_block       => default => sub {0};
  has use_fold        => default => sub {0};
  has compress_series => default => sub {1};
  has inline_series   => default => sub {0};
  has use_aliases     => default => sub {1};
  has purity          => default => sub {0};
  has stringify       => default => sub {0};
  has quote_numeric_strings => default => sub {0};
  
  # Properties
  has stream      => default => sub {''};
  has document    => default => sub {0};
  has transferred => default => sub {{}};
  has id_refcnt   => default => sub {{}};
  has id_anchor   => default => sub {{}};
  has anchor      => default => sub {1};
  has level       => default => sub {0};
  has offset      => default => sub {[]};
  has headless    => default => sub {0};
  has blessed_map => default => sub {{}};
  
  # Global Options are an idea taken from Data::Dumper. Really they are just
  # sugar on top of real OO properties. They make the simple Dump/Load API
  # easy to configure.
  sub set_global_options {
      my $self = shift;
      $self->spec_version($YAML::SpecVersion)
        if defined $YAML::SpecVersion;
      $self->indent_width($YAML::Indent)
        if defined $YAML::Indent;
      $self->use_header($YAML::UseHeader)
        if defined $YAML::UseHeader;
      $self->use_version($YAML::UseVersion)
        if defined $YAML::UseVersion;
      $self->sort_keys($YAML::SortKeys)
        if defined $YAML::SortKeys;
      $self->anchor_prefix($YAML::AnchorPrefix)
        if defined $YAML::AnchorPrefix;
      $self->dump_code($YAML::DumpCode || $YAML::UseCode)
        if defined $YAML::DumpCode or defined $YAML::UseCode;
      $self->use_block($YAML::UseBlock)
        if defined $YAML::UseBlock;
      $self->use_fold($YAML::UseFold)
        if defined $YAML::UseFold;
      $self->compress_series($YAML::CompressSeries)
        if defined $YAML::CompressSeries;
      $self->inline_series($YAML::InlineSeries)
        if defined $YAML::InlineSeries;
      $self->use_aliases($YAML::UseAliases)
        if defined $YAML::UseAliases;
      $self->purity($YAML::Purity)
        if defined $YAML::Purity;
      $self->stringify($YAML::Stringify)
        if defined $YAML::Stringify;
      $self->quote_numeric_strings($YAML::QuoteNumericStrings)
        if defined $YAML::QuoteNumericStrings;
  }
  
  sub dump {
      my $self = shift;
      $self->die('dump() not implemented in this class.');
  }
  
  sub blessed {
      my $self = shift;
      my ($ref) = @_;
      $ref = \$_[0] unless ref $ref;
      my (undef, undef, $node_id) = YAML::Mo::Object->node_info($ref);
      $self->{blessed_map}->{$node_id};
  }
  
  sub bless {
      my $self = shift;
      my ($ref, $blessing) = @_;
      my $ynode;
      $ref = \$_[0] unless ref $ref;
      my (undef, undef, $node_id) = YAML::Mo::Object->node_info($ref);
      if (not defined $blessing) {
          $ynode = YAML::Node->new($ref);
      }
      elsif (ref $blessing) {
          $self->die() unless ynode($blessing);
          $ynode = $blessing;
      }
      else {
          no strict 'refs';
          my $transfer = $blessing . "::yaml_dump";
          $self->die() unless defined &{$transfer};
          $ynode = &{$transfer}($ref);
          $self->die() unless ynode($ynode);
      }
      $self->{blessed_map}->{$node_id} = $ynode;
      my $object = ynode($ynode) or $self->die();
      return $object;
  }
  
  1;
YAML_DUMPER_BASE

    $main::fatpacked{"YAML/Error.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_ERROR';
  package YAML::Error;
  
  use YAML::Mo;
  
  has 'code';
  has 'type' => default => sub {'Error'};
  has 'line';
  has 'document';
  has 'arguments' => default => sub {[]};
  
  my ($error_messages, %line_adjust);
  
  sub format_message {
      my $self = shift;
      my $output = 'YAML ' . $self->type . ': ';
      my $code = $self->code;
      if ($error_messages->{$code}) {
          $code = sprintf($error_messages->{$code}, @{$self->arguments});
      }
      $output .= $code . "\n";
  
      $output .= '   Code: ' . $self->code . "\n"
          if defined $self->code;
      $output .= '   Line: ' . $self->line . "\n"
          if defined $self->line;
      $output .= '   Document: ' . $self->document . "\n"
          if defined $self->document;
      return $output;
  }
  
  sub error_messages {
      $error_messages;
  }
  
  %$error_messages = map {s/^\s+//;$_} split "\n", <<'...';
  YAML_PARSE_ERR_BAD_CHARS
    Invalid characters in stream. This parser only supports printable ASCII
  YAML_PARSE_ERR_BAD_MAJOR_VERSION
    Can't parse a %s document with a 1.0 parser
  YAML_PARSE_WARN_BAD_MINOR_VERSION
    Parsing a %s document with a 1.0 parser
  YAML_PARSE_WARN_MULTIPLE_DIRECTIVES
    '%s directive used more than once'
  YAML_PARSE_ERR_TEXT_AFTER_INDICATOR
    No text allowed after indicator
  YAML_PARSE_ERR_NO_ANCHOR
    No anchor for alias '*%s'
  YAML_PARSE_ERR_NO_SEPARATOR
    Expected separator '---'
  YAML_PARSE_ERR_SINGLE_LINE
    Couldn't parse single line value
  YAML_PARSE_ERR_BAD_ANCHOR
    Invalid anchor
  YAML_DUMP_ERR_INVALID_INDENT
    Invalid Indent width specified: '%s'
  YAML_LOAD_USAGE
    usage: YAML::Load($yaml_stream_scalar)
  YAML_PARSE_ERR_BAD_NODE
    Can't parse node
  YAML_PARSE_ERR_BAD_EXPLICIT
    Unsupported explicit transfer: '%s'
  YAML_DUMP_USAGE_DUMPCODE
    Invalid value for DumpCode: '%s'
  YAML_LOAD_ERR_FILE_INPUT
    Couldn't open %s for input:\n%s
  YAML_DUMP_ERR_FILE_CONCATENATE
    Can't concatenate to YAML file %s
  YAML_DUMP_ERR_FILE_OUTPUT
    Couldn't open %s for output:\n%s
  YAML_DUMP_ERR_NO_HEADER
    With UseHeader=0, the node must be a plain hash or array
  YAML_DUMP_WARN_BAD_NODE_TYPE
    Can't perform serialization for node type: '%s'
  YAML_EMIT_WARN_KEYS
    Encountered a problem with 'keys':\n%s
  YAML_DUMP_WARN_DEPARSE_FAILED
    Deparse failed for CODE reference
  YAML_DUMP_WARN_CODE_DUMMY
    Emitting dummy subroutine for CODE reference
  YAML_PARSE_ERR_MANY_EXPLICIT
    More than one explicit transfer
  YAML_PARSE_ERR_MANY_IMPLICIT
    More than one implicit request
  YAML_PARSE_ERR_MANY_ANCHOR
    More than one anchor
  YAML_PARSE_ERR_ANCHOR_ALIAS
    Can't define both an anchor and an alias
  YAML_PARSE_ERR_BAD_ALIAS
    Invalid alias
  YAML_PARSE_ERR_MANY_ALIAS
    More than one alias
  YAML_LOAD_ERR_NO_CONVERT
    Can't convert implicit '%s' node to explicit '%s' node
  YAML_LOAD_ERR_NO_DEFAULT_VALUE
    No default value for '%s' explicit transfer
  YAML_LOAD_ERR_NON_EMPTY_STRING
    Only the empty string can be converted to a '%s'
  YAML_LOAD_ERR_BAD_MAP_TO_SEQ
    Can't transfer map as sequence. Non numeric key '%s' encountered.
  YAML_DUMP_ERR_BAD_GLOB
    '%s' is an invalid value for Perl glob
  YAML_DUMP_ERR_BAD_REGEXP
    '%s' is an invalid value for Perl Regexp
  YAML_LOAD_ERR_BAD_MAP_ELEMENT
    Invalid element in map
  YAML_LOAD_WARN_DUPLICATE_KEY
    Duplicate map key found. Ignoring.
  YAML_LOAD_ERR_BAD_SEQ_ELEMENT
    Invalid element in sequence
  YAML_PARSE_ERR_INLINE_MAP
    Can't parse inline map
  YAML_PARSE_ERR_INLINE_SEQUENCE
    Can't parse inline sequence
  YAML_PARSE_ERR_BAD_DOUBLE
    Can't parse double quoted string
  YAML_PARSE_ERR_BAD_SINGLE
    Can't parse single quoted string
  YAML_PARSE_ERR_BAD_INLINE_IMPLICIT
    Can't parse inline implicit value '%s'
  YAML_PARSE_ERR_BAD_IMPLICIT
    Unrecognized implicit value '%s'
  YAML_PARSE_ERR_INDENTATION
    Error. Invalid indentation level
  YAML_PARSE_ERR_INCONSISTENT_INDENTATION
    Inconsistent indentation level
  YAML_LOAD_WARN_UNRESOLVED_ALIAS
    Can't resolve alias *%s
  YAML_LOAD_WARN_NO_REGEXP_IN_REGEXP
    No 'REGEXP' element for Perl regexp
  YAML_LOAD_WARN_BAD_REGEXP_ELEM
    Unknown element '%s' in Perl regexp
  YAML_LOAD_WARN_GLOB_NAME
    No 'NAME' element for Perl glob
  YAML_LOAD_WARN_PARSE_CODE
    Couldn't parse Perl code scalar: %s
  YAML_LOAD_WARN_CODE_DEPARSE
    Won't parse Perl code unless $YAML::LoadCode is set
  YAML_EMIT_ERR_BAD_LEVEL
    Internal Error: Bad level detected
  YAML_PARSE_WARN_AMBIGUOUS_TAB
    Amibiguous tab converted to spaces
  YAML_LOAD_WARN_BAD_GLOB_ELEM
    Unknown element '%s' in Perl glob
  YAML_PARSE_ERR_ZERO_INDENT
    Can't use zero as an indentation width
  YAML_LOAD_WARN_GLOB_IO
    Can't load an IO filehandle. Yet!!!
  ...
  
  %line_adjust = map {($_, 1)}
    qw(YAML_PARSE_ERR_BAD_MAJOR_VERSION
       YAML_PARSE_WARN_BAD_MINOR_VERSION
       YAML_PARSE_ERR_TEXT_AFTER_INDICATOR
       YAML_PARSE_ERR_NO_ANCHOR
       YAML_PARSE_ERR_MANY_EXPLICIT
       YAML_PARSE_ERR_MANY_IMPLICIT
       YAML_PARSE_ERR_MANY_ANCHOR
       YAML_PARSE_ERR_ANCHOR_ALIAS
       YAML_PARSE_ERR_BAD_ALIAS
       YAML_PARSE_ERR_MANY_ALIAS
       YAML_LOAD_ERR_NO_CONVERT
       YAML_LOAD_ERR_NO_DEFAULT_VALUE
       YAML_LOAD_ERR_NON_EMPTY_STRING
       YAML_LOAD_ERR_BAD_MAP_TO_SEQ
       YAML_LOAD_ERR_BAD_STR_TO_INT
       YAML_LOAD_ERR_BAD_STR_TO_DATE
       YAML_LOAD_ERR_BAD_STR_TO_TIME
       YAML_LOAD_WARN_DUPLICATE_KEY
       YAML_PARSE_ERR_INLINE_MAP
       YAML_PARSE_ERR_INLINE_SEQUENCE
       YAML_PARSE_ERR_BAD_DOUBLE
       YAML_PARSE_ERR_BAD_SINGLE
       YAML_PARSE_ERR_BAD_INLINE_IMPLICIT
       YAML_PARSE_ERR_BAD_IMPLICIT
       YAML_LOAD_WARN_NO_REGEXP_IN_REGEXP
       YAML_LOAD_WARN_BAD_REGEXP_ELEM
       YAML_LOAD_WARN_REGEXP_CREATE
       YAML_LOAD_WARN_GLOB_NAME
       YAML_LOAD_WARN_PARSE_CODE
       YAML_LOAD_WARN_CODE_DEPARSE
       YAML_LOAD_WARN_BAD_GLOB_ELEM
       YAML_PARSE_ERR_ZERO_INDENT
      );
  
  package YAML::Warning;
  
  our @ISA = 'YAML::Error';
  
  1;
YAML_ERROR

    $main::fatpacked{"YAML/Loader.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_LOADER';
  package YAML::Loader;
  
  use YAML::Mo;
  extends 'YAML::Loader::Base';
  
  use YAML::Loader::Base;
  use YAML::Types;
  
  # Context constants
  use constant LEAF       => 1;
  use constant COLLECTION => 2;
  use constant VALUE      => "\x07YAML\x07VALUE\x07";
  use constant COMMENT    => "\x07YAML\x07COMMENT\x07";
  
  # Common YAML character sets
  my $ESCAPE_CHAR = '[\\x00-\\x08\\x0b-\\x0d\\x0e-\\x1f]';
  my $FOLD_CHAR   = '>';
  my $LIT_CHAR    = '|';
  my $LIT_CHAR_RX = "\\$LIT_CHAR";
  
  sub load {
      my $self = shift;
      $self->stream($_[0] || '');
      return $self->_parse();
  }
  
  # Top level function for parsing. Parse each document in order and
  # handle processing for YAML headers.
  sub _parse {
      my $self = shift;
      my (%directives, $preface);
      $self->{stream} =~ s|\015\012|\012|g;
      $self->{stream} =~ s|\015|\012|g;
      $self->line(0);
      $self->die('YAML_PARSE_ERR_BAD_CHARS')
        if $self->stream =~ /$ESCAPE_CHAR/;
      $self->{stream} =~ s/(.)\n\Z/$1/s;
      $self->lines([split /\x0a/, $self->stream, -1]);
      $self->line(1);
      # Throw away any comments or blanks before the header (or start of
      # content for headerless streams)
      $self->_parse_throwaway_comments();
      $self->document(0);
      $self->documents([]);
      # Add an "assumed" header if there is no header and the stream is
      # not empty (after initial throwaways).
      if (not $self->eos) {
          if ($self->lines->[0] !~ /^---(\s|$)/) {
              unshift @{$self->lines}, '---';
              $self->{line}--;
          }
      }
  
      # Main Loop. Parse out all the top level nodes and return them.
      while (not $self->eos) {
          $self->anchor2node({});
          $self->{document}++;
          $self->done(0);
          $self->level(0);
          $self->offset->[0] = -1;
  
          if ($self->lines->[0] =~ /^---\s*(.*)$/) {
              my @words = split /\s+/, $1;
              %directives = ();
              while (@words && $words[0] =~ /^#(\w+):(\S.*)$/) {
                  my ($key, $value) = ($1, $2);
                  shift(@words);
                  if (defined $directives{$key}) {
                      $self->warn('YAML_PARSE_WARN_MULTIPLE_DIRECTIVES',
                        $key, $self->document);
                      next;
                  }
                  $directives{$key} = $value;
              }
              $self->preface(join ' ', @words);
          }
          else {
              $self->die('YAML_PARSE_ERR_NO_SEPARATOR');
          }
  
          if (not $self->done) {
              $self->_parse_next_line(COLLECTION);
          }
          if ($self->done) {
              $self->{indent} = -1;
              $self->content('');
          }
  
          $directives{YAML} ||= '1.0';
          $directives{TAB} ||= 'NONE';
          ($self->{major_version}, $self->{minor_version}) =
            split /\./, $directives{YAML}, 2;
          $self->die('YAML_PARSE_ERR_BAD_MAJOR_VERSION', $directives{YAML})
            if $self->major_version ne '1';
          $self->warn('YAML_PARSE_WARN_BAD_MINOR_VERSION', $directives{YAML})
            if $self->minor_version ne '0';
          $self->die('Unrecognized TAB policy')
            unless $directives{TAB} =~ /^(NONE|\d+)(:HARD)?$/;
  
          push @{$self->documents}, $self->_parse_node();
      }
      return wantarray ? @{$self->documents} : $self->documents->[-1];
  }
  
  # This function is the dispatcher for parsing each node. Every node
  # recurses back through here. (Inlines are an exception as they have
  # their own sub-parser.)
  sub _parse_node {
      my $self = shift;
      my $preface = $self->preface;
      $self->preface('');
      my ($node, $type, $indicator, $escape, $chomp) = ('') x 5;
      my ($anchor, $alias, $explicit, $implicit, $class) = ('') x 5;
      ($anchor, $alias, $explicit, $implicit, $preface) =
        $self->_parse_qualifiers($preface);
      if ($anchor) {
          $self->anchor2node->{$anchor} = CORE::bless [], 'YAML-anchor2node';
      }
      $self->inline('');
      while (length $preface) {
          my $line = $self->line - 1;
          if ($preface =~ s/^($FOLD_CHAR|$LIT_CHAR_RX)(-|\+)?\d*\s*//) {
              $indicator = $1;
              $chomp = $2 if defined($2);
          }
          else {
              $self->die('YAML_PARSE_ERR_TEXT_AFTER_INDICATOR') if $indicator;
              $self->inline($preface);
              $preface = '';
          }
      }
      if ($alias) {
          $self->die('YAML_PARSE_ERR_NO_ANCHOR', $alias)
            unless defined $self->anchor2node->{$alias};
          if (ref($self->anchor2node->{$alias}) ne 'YAML-anchor2node') {
              $node = $self->anchor2node->{$alias};
          }
          else {
              $node = do {my $sv = "*$alias"};
              push @{$self->anchor2node->{$alias}}, [\$node, $self->line];
          }
      }
      elsif (length $self->inline) {
          $node = $self->_parse_inline(1, $implicit, $explicit);
          if (length $self->inline) {
              $self->die('YAML_PARSE_ERR_SINGLE_LINE');
          }
      }
      elsif ($indicator eq $LIT_CHAR) {
          $self->{level}++;
          $node = $self->_parse_block($chomp);
          $node = $self->_parse_implicit($node) if $implicit;
          $self->{level}--;
      }
      elsif ($indicator eq $FOLD_CHAR) {
          $self->{level}++;
          $node = $self->_parse_unfold($chomp);
          $node = $self->_parse_implicit($node) if $implicit;
          $self->{level}--;
      }
      else {
          $self->{level}++;
          $self->offset->[$self->level] ||= 0;
          if ($self->indent == $self->offset->[$self->level]) {
              if ($self->content =~ /^-( |$)/) {
                  $node = $self->_parse_seq($anchor);
              }
              elsif ($self->content =~ /(^\?|\:( |$))/) {
                  $node = $self->_parse_mapping($anchor);
              }
              elsif ($preface =~ /^\s*$/) {
                  $node = $self->_parse_implicit('');
              }
              else {
                  $self->die('YAML_PARSE_ERR_BAD_NODE');
              }
          }
          else {
              $node = undef;
          }
          $self->{level}--;
      }
      $#{$self->offset} = $self->level;
  
      if ($explicit) {
          if ($class) {
              if (not ref $node) {
                  my $copy = $node;
                  undef $node;
                  $node = \$copy;
              }
              CORE::bless $node, $class;
          }
          else {
              $node = $self->_parse_explicit($node, $explicit);
          }
      }
      if ($anchor) {
          if (ref($self->anchor2node->{$anchor}) eq 'YAML-anchor2node') {
              # XXX Can't remember what this code actually does
              for my $ref (@{$self->anchor2node->{$anchor}}) {
                  ${$ref->[0]} = $node;
                  $self->warn('YAML_LOAD_WARN_UNRESOLVED_ALIAS',
                      $anchor, $ref->[1]);
              }
          }
          $self->anchor2node->{$anchor} = $node;
      }
      return $node;
  }
  
  # Preprocess the qualifiers that may be attached to any node.
  sub _parse_qualifiers {
      my $self = shift;
      my ($preface) = @_;
      my ($anchor, $alias, $explicit, $implicit, $token) = ('') x 5;
      $self->inline('');
      while ($preface =~ /^[&*!]/) {
          my $line = $self->line - 1;
          if ($preface =~ s/^\!(\S+)\s*//) {
              $self->die('YAML_PARSE_ERR_MANY_EXPLICIT') if $explicit;
              $explicit = $1;
          }
          elsif ($preface =~ s/^\!\s*//) {
              $self->die('YAML_PARSE_ERR_MANY_IMPLICIT') if $implicit;
              $implicit = 1;
          }
          elsif ($preface =~ s/^\&([^ ,:]+)\s*//) {
              $token = $1;
              $self->die('YAML_PARSE_ERR_BAD_ANCHOR')
                unless $token =~ /^[a-zA-Z0-9]+$/;
              $self->die('YAML_PARSE_ERR_MANY_ANCHOR') if $anchor;
              $self->die('YAML_PARSE_ERR_ANCHOR_ALIAS') if $alias;
              $anchor = $token;
          }
          elsif ($preface =~ s/^\*([^ ,:]+)\s*//) {
              $token = $1;
              $self->die('YAML_PARSE_ERR_BAD_ALIAS')
                unless $token =~ /^[a-zA-Z0-9]+$/;
              $self->die('YAML_PARSE_ERR_MANY_ALIAS') if $alias;
              $self->die('YAML_PARSE_ERR_ANCHOR_ALIAS') if $anchor;
              $alias = $token;
          }
      }
      return ($anchor, $alias, $explicit, $implicit, $preface);
  }
  
  # Morph a node to it's explicit type
  sub _parse_explicit {
      my $self = shift;
      my ($node, $explicit) = @_;
      my ($type, $class);
      if ($explicit =~ /^\!?perl\/(hash|array|ref|scalar)(?:\:(\w(\w|\:\:)*)?)?$/) {
          ($type, $class) = (($1 || ''), ($2 || ''));
  
          # FIXME # die unless uc($type) eq ref($node) ?
  
          if ( $type eq "ref" ) {
              $self->die('YAML_LOAD_ERR_NO_DEFAULT_VALUE', 'XXX', $explicit)
              unless exists $node->{VALUE()} and scalar(keys %$node) == 1;
  
              my $value = $node->{VALUE()};
              $node = \$value;
          }
  
          if ( $type eq "scalar" and length($class) and !ref($node) ) {
              my $value = $node;
              $node = \$value;
          }
  
          if ( length($class) ) {
              CORE::bless($node, $class);
          }
  
          return $node;
      }
      if ($explicit =~ m{^!?perl/(glob|regexp|code)(?:\:(\w(\w|\:\:)*)?)?$}) {
          ($type, $class) = (($1 || ''), ($2 || ''));
          my $type_class = "YAML::Type::$type";
          no strict 'refs';
          if ($type_class->can('yaml_load')) {
              return $type_class->yaml_load($node, $class, $self);
          }
          else {
              $self->die('YAML_LOAD_ERR_NO_CONVERT', 'XXX', $explicit);
          }
      }
      # This !perl/@Foo and !perl/$Foo are deprecated but still parsed
      elsif ($YAML::TagClass->{$explicit} ||
             $explicit =~ m{^perl/(\@|\$)?([a-zA-Z](\w|::)+)$}
            ) {
          $class = $YAML::TagClass->{$explicit} || $2;
          if ($class->can('yaml_load')) {
              require YAML::Node;
              return $class->yaml_load(YAML::Node->new($node, $explicit));
          }
          else {
              if (ref $node) {
                  return CORE::bless $node, $class;
              }
              else {
                  return CORE::bless \$node, $class;
              }
          }
      }
      elsif (ref $node) {
          require YAML::Node;
          return YAML::Node->new($node, $explicit);
      }
      else {
          # XXX This is likely wrong. Failing test:
          # --- !unknown 'scalar value'
          return $node;
      }
  }
  
  # Parse a YAML mapping into a Perl hash
  sub _parse_mapping {
      my $self = shift;
      my ($anchor) = @_;
      my $mapping = {};
      $self->anchor2node->{$anchor} = $mapping;
      my $key;
      while (not $self->done and $self->indent == $self->offset->[$self->level]) {
          # If structured key:
          if ($self->{content} =~ s/^\?\s*//) {
              $self->preface($self->content);
              $self->_parse_next_line(COLLECTION);
              $key = $self->_parse_node();
              $key = "$key";
          }
          # If "default" key (equals sign)
          elsif ($self->{content} =~ s/^\=\s*//) {
              $key = VALUE;
          }
          # If "comment" key (slash slash)
          elsif ($self->{content} =~ s/^\=\s*//) {
              $key = COMMENT;
          }
          # Regular scalar key:
          else {
              $self->inline($self->content);
              $key = $self->_parse_inline();
              $key = "$key";
              $self->content($self->inline);
              $self->inline('');
          }
  
          unless ($self->{content} =~ s/^:\s*//) {
              $self->die('YAML_LOAD_ERR_BAD_MAP_ELEMENT');
          }
          $self->preface($self->content);
          my $line = $self->line;
          $self->_parse_next_line(COLLECTION);
          my $value = $self->_parse_node();
          if (exists $mapping->{$key}) {
              $self->warn('YAML_LOAD_WARN_DUPLICATE_KEY');
          }
          else {
              $mapping->{$key} = $value;
          }
      }
      return $mapping;
  }
  
  # Parse a YAML sequence into a Perl array
  sub _parse_seq {
      my $self = shift;
      my ($anchor) = @_;
      my $seq = [];
      $self->anchor2node->{$anchor} = $seq;
      while (not $self->done and $self->indent == $self->offset->[$self->level]) {
          if ($self->content =~ /^-(?: (.*))?$/) {
              $self->preface(defined($1) ? $1 : '');
          }
          else {
              $self->die('YAML_LOAD_ERR_BAD_SEQ_ELEMENT');
          }
          if ($self->preface =~ /^(\s*)(\w.*\:(?: |$).*)$/) {
              $self->indent($self->offset->[$self->level] + 2 + length($1));
              $self->content($2);
              $self->level($self->level + 1);
              $self->offset->[$self->level] = $self->indent;
              $self->preface('');
              push @$seq, $self->_parse_mapping('');
              $self->{level}--;
              $#{$self->offset} = $self->level;
          }
          else {
              $self->_parse_next_line(COLLECTION);
              push @$seq, $self->_parse_node();
          }
      }
      return $seq;
  }
  
  # Parse an inline value. Since YAML supports inline collections, this is
  # the top level of a sub parsing.
  sub _parse_inline {
      my $self = shift;
      my ($top, $top_implicit, $top_explicit) = (@_, '', '', '');
      $self->{inline} =~ s/^\s*(.*)\s*$/$1/; # OUCH - mugwump
      my ($node, $anchor, $alias, $explicit, $implicit) = ('') x 5;
      ($anchor, $alias, $explicit, $implicit, $self->{inline}) =
        $self->_parse_qualifiers($self->inline);
      if ($anchor) {
          $self->anchor2node->{$anchor} = CORE::bless [], 'YAML-anchor2node';
      }
      $implicit ||= $top_implicit;
      $explicit ||= $top_explicit;
      ($top_implicit, $top_explicit) = ('', '');
      if ($alias) {
          $self->die('YAML_PARSE_ERR_NO_ANCHOR', $alias)
            unless defined $self->anchor2node->{$alias};
          if (ref($self->anchor2node->{$alias}) ne 'YAML-anchor2node') {
              $node = $self->anchor2node->{$alias};
          }
          else {
              $node = do {my $sv = "*$alias"};
              push @{$self->anchor2node->{$alias}}, [\$node, $self->line];
          }
      }
      elsif ($self->inline =~ /^\{/) {
          $node = $self->_parse_inline_mapping($anchor);
      }
      elsif ($self->inline =~ /^\[/) {
          $node = $self->_parse_inline_seq($anchor);
      }
      elsif ($self->inline =~ /^"/) {
          $node = $self->_parse_inline_double_quoted();
          $node = $self->_unescape($node);
          $node = $self->_parse_implicit($node) if $implicit;
      }
      elsif ($self->inline =~ /^'/) {
          $node = $self->_parse_inline_single_quoted();
          $node = $self->_parse_implicit($node) if $implicit;
      }
      else {
          if ($top) {
              $node = $self->inline;
              $self->inline('');
          }
          else {
              $node = $self->_parse_inline_simple();
          }
          $node = $self->_parse_implicit($node) unless $explicit;
      }
      if ($explicit) {
          $node = $self->_parse_explicit($node, $explicit);
      }
      if ($anchor) {
          if (ref($self->anchor2node->{$anchor}) eq 'YAML-anchor2node') {
              for my $ref (@{$self->anchor2node->{$anchor}}) {
                  ${$ref->[0]} = $node;
                  $self->warn('YAML_LOAD_WARN_UNRESOLVED_ALIAS',
                      $anchor, $ref->[1]);
              }
          }
          $self->anchor2node->{$anchor} = $node;
      }
      return $node;
  }
  
  # Parse the inline YAML mapping into a Perl hash
  sub _parse_inline_mapping {
      my $self = shift;
      my ($anchor) = @_;
      my $node = {};
      $self->anchor2node->{$anchor} = $node;
  
      $self->die('YAML_PARSE_ERR_INLINE_MAP')
        unless $self->{inline} =~ s/^\{\s*//;
      while (not $self->{inline} =~ s/^\s*\}//) {
          my $key = $self->_parse_inline();
          $self->die('YAML_PARSE_ERR_INLINE_MAP')
            unless $self->{inline} =~ s/^\: \s*//;
          my $value = $self->_parse_inline();
          if (exists $node->{$key}) {
              $self->warn('YAML_LOAD_WARN_DUPLICATE_KEY');
          }
          else {
              $node->{$key} = $value;
          }
          next if $self->inline =~ /^\s*\}/;
          $self->die('YAML_PARSE_ERR_INLINE_MAP')
            unless $self->{inline} =~ s/^\,\s*//;
      }
      return $node;
  }
  
  # Parse the inline YAML sequence into a Perl array
  sub _parse_inline_seq {
      my $self = shift;
      my ($anchor) = @_;
      my $node = [];
      $self->anchor2node->{$anchor} = $node;
  
      $self->die('YAML_PARSE_ERR_INLINE_SEQUENCE')
        unless $self->{inline} =~ s/^\[\s*//;
      while (not $self->{inline} =~ s/^\s*\]//) {
          my $value = $self->_parse_inline();
          push @$node, $value;
          next if $self->inline =~ /^\s*\]/;
          $self->die('YAML_PARSE_ERR_INLINE_SEQUENCE')
            unless $self->{inline} =~ s/^\,\s*//;
      }
      return $node;
  }
  
  # Parse the inline double quoted string.
  sub _parse_inline_double_quoted {
      my $self = shift;
      my $node;
      # https://rt.cpan.org/Public/Bug/Display.html?id=90593
      if ($self->inline =~ /^"((?:(?:\\"|[^"]){0,32766}){0,32766})"\s*(.*)$/) {
          $node = $1;
          $self->inline($2);
          $node =~ s/\\"/"/g;
      }
      else {
          $self->die('YAML_PARSE_ERR_BAD_DOUBLE');
      }
      return $node;
  }
  
  
  # Parse the inline single quoted string.
  sub _parse_inline_single_quoted {
      my $self = shift;
      my $node;
      if ($self->inline =~ /^'((?:(?:''|[^']){0,32766}){0,32766})'\s*(.*)$/) {
          $node = $1;
          $self->inline($2);
          $node =~ s/''/'/g;
      }
      else {
          $self->die('YAML_PARSE_ERR_BAD_SINGLE');
      }
      return $node;
  }
  
  # Parse the inline unquoted string and do implicit typing.
  sub _parse_inline_simple {
      my $self = shift;
      my $value;
      if ($self->inline =~ /^(|[^!@#%^&*].*?)(?=[\[\]\{\},]|, |: |- |:\s*$|$)/) {
          $value = $1;
          substr($self->{inline}, 0, length($1)) = '';
      }
      else {
          $self->die('YAML_PARSE_ERR_BAD_INLINE_IMPLICIT', $value);
      }
      return $value;
  }
  
  sub _parse_implicit {
      my $self = shift;
      my ($value) = @_;
      $value =~ s/\s*$//;
      return $value if $value eq '';
      return undef if $value =~ /^~$/;
      return $value
        unless $value =~ /^[\@\`]/ or
               $value =~ /^[\-\?]\s/;
      $self->die('YAML_PARSE_ERR_BAD_IMPLICIT', $value);
  }
  
  # Unfold a YAML multiline scalar into a single string.
  sub _parse_unfold {
      my $self = shift;
      my ($chomp) = @_;
      my $node = '';
      my $space = 0;
      while (not $self->done and $self->indent == $self->offset->[$self->level]) {
          $node .= $self->content. "\n";
          $self->_parse_next_line(LEAF);
      }
      $node =~ s/^(\S.*)\n(?=\S)/$1 /gm;
      $node =~ s/^(\S.*)\n(\n+\S)/$1$2/gm;
      $node =~ s/\n*\Z// unless $chomp eq '+';
      $node .= "\n" unless $chomp;
      return $node;
  }
  
  # Parse a YAML block style scalar. This is like a Perl here-document.
  sub _parse_block {
      my $self = shift;
      my ($chomp) = @_;
      my $node = '';
      while (not $self->done and $self->indent == $self->offset->[$self->level]) {
          $node .= $self->content . "\n";
          $self->_parse_next_line(LEAF);
      }
      return $node if '+' eq $chomp;
      $node =~ s/\n*\Z/\n/;
      $node =~ s/\n\Z// if $chomp eq '-';
      return $node;
  }
  
  # Handle Perl style '#' comments. Comments must be at the same indentation
  # level as the collection line following them.
  sub _parse_throwaway_comments {
      my $self = shift;
      while (@{$self->lines} and
             $self->lines->[0] =~ m{^\s*(\#|$)}
            ) {
          shift @{$self->lines};
          $self->{line}++;
      }
      $self->eos($self->{done} = not @{$self->lines});
  }
  
  # This is the routine that controls what line is being parsed. It gets called
  # once for each line in the YAML stream.
  #
  # This routine must:
  # 1) Skip past the current line
  # 2) Determine the indentation offset for a new level
  # 3) Find the next _content_ line
  #   A) Skip over any throwaways (Comments/blanks)
  #   B) Set $self->indent, $self->content, $self->line
  # 4) Expand tabs appropriately
  sub _parse_next_line {
      my $self = shift;
      my ($type) = @_;
      my $level = $self->level;
      my $offset = $self->offset->[$level];
      $self->die('YAML_EMIT_ERR_BAD_LEVEL') unless defined $offset;
      shift @{$self->lines};
      $self->eos($self->{done} = not @{$self->lines});
      return if $self->eos;
      $self->{line}++;
  
      # Determine the offset for a new leaf node
      if ($self->preface =~
          qr/(?:^|\s)(?:$FOLD_CHAR|$LIT_CHAR_RX)(?:-|\+)?(\d*)\s*$/
         ) {
          $self->die('YAML_PARSE_ERR_ZERO_INDENT')
            if length($1) and $1 == 0;
          $type = LEAF;
          if (length($1)) {
              $self->offset->[$level + 1] = $offset + $1;
          }
          else {
              # First get rid of any comments.
              while (@{$self->lines} && ($self->lines->[0] =~ /^\s*#/)) {
                  $self->lines->[0] =~ /^( *)/;
                  last unless length($1) <= $offset;
                  shift @{$self->lines};
                  $self->{line}++;
              }
              $self->eos($self->{done} = not @{$self->lines});
              return if $self->eos;
              if ($self->lines->[0] =~ /^( *)\S/ and length($1) > $offset) {
                  $self->offset->[$level+1] = length($1);
              }
              else {
                  $self->offset->[$level+1] = $offset + 1;
              }
          }
          $offset = $self->offset->[++$level];
      }
      # Determine the offset for a new collection level
      elsif ($type == COLLECTION and
             $self->preface =~ /^(\s*(\!\S*|\&\S+))*\s*$/) {
          $self->_parse_throwaway_comments();
          if ($self->eos) {
              $self->offset->[$level+1] = $offset + 1;
              return;
          }
          else {
              $self->lines->[0] =~ /^( *)\S/ or
                  $self->die('YAML_PARSE_ERR_NONSPACE_INDENTATION');
              if (length($1) > $offset) {
                  $self->offset->[$level+1] = length($1);
              }
              else {
                  $self->offset->[$level+1] = $offset + 1;
              }
          }
          $offset = $self->offset->[++$level];
      }
  
      if ($type == LEAF) {
          while (@{$self->lines} and
                 $self->lines->[0] =~ m{^( *)(\#)} and
                 length($1) < $offset
                ) {
              shift @{$self->lines};
              $self->{line}++;
          }
          $self->eos($self->{done} = not @{$self->lines});
      }
      else {
          $self->_parse_throwaway_comments();
      }
      return if $self->eos;
  
      if ($self->lines->[0] =~ /^---(\s|$)/) {
          $self->done(1);
          return;
      }
      if ($type == LEAF and
          $self->lines->[0] =~ /^ {$offset}(.*)$/
         ) {
          $self->indent($offset);
          $self->content($1);
      }
      elsif ($self->lines->[0] =~ /^\s*$/) {
          $self->indent($offset);
          $self->content('');
      }
      else {
          $self->lines->[0] =~ /^( *)(\S.*)$/;
          while ($self->offset->[$level] > length($1)) {
              $level--;
          }
          $self->die('YAML_PARSE_ERR_INCONSISTENT_INDENTATION')
            if $self->offset->[$level] != length($1);
          $self->indent(length($1));
          $self->content($2);
      }
      $self->die('YAML_PARSE_ERR_INDENTATION')
        if $self->indent - $offset > 1;
  }
  
  #==============================================================================
  # Utility subroutines.
  #==============================================================================
  
  # Printable characters for escapes
  my %unescapes = (
     0 => "\x00",
     a => "\x07",
     t => "\x09",
     n => "\x0a",
     'v' => "\x0b", # Potential v-string error on 5.6.2 if not quoted
     f => "\x0c",
     r => "\x0d",
     e => "\x1b",
     '\\' => '\\',
    );
  
  # Transform all the backslash style escape characters to their literal meaning
  sub _unescape {
      my $self = shift;
      my ($node) = @_;
      $node =~ s/\\([never\\fart0]|x([0-9a-fA-F]{2}))/
                (length($1)>1)?pack("H2",$2):$unescapes{$1}/gex;
      return $node;
  }
  
  1;
YAML_LOADER

    $main::fatpacked{"YAML/Loader/Base.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_LOADER_BASE';
  package YAML::Loader::Base;
  
  use YAML::Mo;
  
  has load_code     => default => sub {0};
  has stream        => default => sub {''};
  has document      => default => sub {0};
  has line          => default => sub {0};
  has documents     => default => sub {[]};
  has lines         => default => sub {[]};
  has eos           => default => sub {0};
  has done          => default => sub {0};
  has anchor2node   => default => sub {{}};
  has level         => default => sub {0};
  has offset        => default => sub {[]};
  has preface       => default => sub {''};
  has content       => default => sub {''};
  has indent        => default => sub {0};
  has major_version => default => sub {0};
  has minor_version => default => sub {0};
  has inline        => default => sub {''};
  
  sub set_global_options {
      my $self = shift;
      $self->load_code($YAML::LoadCode || $YAML::UseCode)
        if defined $YAML::LoadCode or defined $YAML::UseCode;
  }
  
  sub load {
      die 'load() not implemented in this class.';
  }
  
  1;
YAML_LOADER_BASE

    $main::fatpacked{"YAML/Marshall.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_MARSHALL';
  use strict; use warnings;
  package YAML::Marshall;
  
  use YAML::Node ();
  
  sub import {
      my $class = shift;
      no strict 'refs';
      my $package = caller;
      unless (grep { $_ eq $class} @{$package . '::ISA'}) {
          push @{$package . '::ISA'}, $class;
      }
  
      my $tag = shift;
      if ( $tag ) {
          no warnings 'once';
          $YAML::TagClass->{$tag} = $package;
          ${$package . "::YamlTag"} = $tag;
      }
  }
  
  sub yaml_dump {
      my $self = shift;
      no strict 'refs';
      my $tag = ${ref($self) . "::YamlTag"} || 'perl/' . ref($self);
      $self->yaml_node($self, $tag);
  }
  
  sub yaml_load {
      my ($class, $node) = @_;
      if (my $ynode = $class->yaml_ynode($node)) {
          $node = $ynode->{NODE};
      }
      bless $node, $class;
  }
  
  sub yaml_node {
      shift;
      YAML::Node->new(@_);
  }
  
  sub yaml_ynode {
      shift;
      YAML::Node::ynode(@_);
  }
  
  1;
YAML_MARSHALL

    $main::fatpacked{"YAML/Mo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_MO';
  package YAML::Mo;
  # use Mo qw[builder default import];
  #   The following line of code was produced from the previous line by
  #   Mo::Inline version 0.4
  no warnings;my$M=__PACKAGE__.'::';*{$M.Object::new}=sub{my$c=shift;my$s=bless{@_},$c;my%n=%{$c.'::'.':E'};map{$s->{$_}=$n{$_}->()if!exists$s->{$_}}keys%n;$s};*{$M.import}=sub{import warnings;$^H|=1538;my($P,%e,%o)=caller.'::';shift;eval"no Mo::$_",&{$M.$_.::e}($P,\%e,\%o,\@_)for@_;return if$e{M};%e=(extends,sub{eval"no $_[0]()";@{$P.ISA}=$_[0]},has,sub{my$n=shift;my$m=sub{$#_?$_[0]{$n}=$_[1]:$_[0]{$n}};@_=(default,@_)if!($#_%2);$m=$o{$_}->($m,$n,@_)for sort keys%o;*{$P.$n}=$m},%e,);*{$P.$_}=$e{$_}for keys%e;@{$P.ISA}=$M.Object};*{$M.'builder::e'}=sub{my($P,$e,$o)=@_;$o->{builder}=sub{my($m,$n,%a)=@_;my$b=$a{builder}or return$m;my$i=exists$a{lazy}?$a{lazy}:!${$P.':N'};$i or ${$P.':E'}{$n}=\&{$P.$b}and return$m;sub{$#_?$m->(@_):!exists$_[0]{$n}?$_[0]{$n}=$_[0]->$b:$m->(@_)}}};*{$M.'default::e'}=sub{my($P,$e,$o)=@_;$o->{default}=sub{my($m,$n,%a)=@_;exists$a{default}or return$m;my($d,$r)=$a{default};my$g='HASH'eq($r=ref$d)?sub{+{%$d}}:'ARRAY'eq$r?sub{[@$d]}:'CODE'eq$r?$d:sub{$d};my$i=exists$a{lazy}?$a{lazy}:!${$P.':N'};$i or ${$P.':E'}{$n}=$g and return$m;sub{$#_?$m->(@_):!exists$_[0]{$n}?$_[0]{$n}=$g->(@_):$m->(@_)}}};my$i=\&import;*{$M.import}=sub{(@_==2 and not$_[1])?pop@_:@_==1?push@_,grep!/import/,@f:();goto&$i};@f=qw[builder default import];use strict;use warnings;
  
  our $DumperModule = 'Data::Dumper';
  
  my ($_new_error, $_info, $_scalar_info);
  
  no strict 'refs';
  *{$M.'Object::die'} = sub {
      my $self = shift;
      my $error = $self->$_new_error(@_);
      $error->type('Error');
      Carp::croak($error->format_message);
  };
  
  *{$M.'Object::warn'} = sub {
      my $self = shift;
      return unless $^W;
      my $error = $self->$_new_error(@_);
      $error->type('Warning');
      Carp::cluck($error->format_message);
  };
  
  # This code needs to be refactored to be simpler and more precise, and no,
  # Scalar::Util doesn't DWIM.
  #
  # Can't handle:
  # * blessed regexp
  *{$M.'Object::node_info'} = sub {
      my $self = shift;
      my $stringify = $_[1] || 0;
      my ($class, $type, $id) =
          ref($_[0])
          ? $stringify
            ? &$_info("$_[0]")
            : do {
                require overload;
                my @info = &$_info(overload::StrVal($_[0]));
                if (ref($_[0]) eq 'Regexp') {
                    @info[0, 1] = (undef, 'REGEXP');
                }
                @info;
            }
          : &$_scalar_info($_[0]);
      ($class, $type, $id) = &$_scalar_info("$_[0]")
          unless $id;
      return wantarray ? ($class, $type, $id) : $id;
  };
  
  #-------------------------------------------------------------------------------
  $_info = sub {
      return (($_[0]) =~ qr{^(?:(.*)\=)?([^=]*)\(([^\(]*)\)$}o);
  };
  
  $_scalar_info = sub {
      my $id = 'undef';
      if (defined $_[0]) {
          \$_[0] =~ /\((\w+)\)$/o or CORE::die();
          $id = "$1-S";
      }
      return (undef, undef, $id);
  };
  
  $_new_error = sub {
      require Carp;
      my $self = shift;
      require YAML::Error;
  
      my $code = shift || 'unknown error';
      my $error = YAML::Error->new(code => $code);
      $error->line($self->line) if $self->can('line');
      $error->document($self->document) if $self->can('document');
      $error->arguments([@_]);
      return $error;
  };
  
  1;
YAML_MO

    $main::fatpacked{"YAML/Node.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_NODE';
  use strict; use warnings;
  package YAML::Node;
  
  use YAML::Tag;
  require YAML::Mo;
  
  use Exporter;
  our @ISA     = qw(Exporter YAML::Mo::Object);
  our @EXPORT  = qw(ynode);
  
  sub ynode {
      my $self;
      if (ref($_[0]) eq 'HASH') {
          $self = tied(%{$_[0]});
      }
      elsif (ref($_[0]) eq 'ARRAY') {
          $self = tied(@{$_[0]});
      }
      elsif (ref(\$_[0]) eq 'GLOB') {
          $self = tied(*{$_[0]});
      }
      else {
          $self = tied($_[0]);
      }
      return (ref($self) =~ /^yaml_/) ? $self : undef;
  }
  
  sub new {
      my ($class, $node, $tag) = @_;
      my $self;
      $self->{NODE} = $node;
      my (undef, $type) = YAML::Mo::Object->node_info($node);
      $self->{KIND} = (not defined $type) ? 'scalar' :
                      ($type eq 'ARRAY') ? 'sequence' :
                      ($type eq 'HASH') ? 'mapping' :
                      $class->die("Can't create YAML::Node from '$type'");
      tag($self, ($tag || ''));
      if ($self->{KIND} eq 'scalar') {
          yaml_scalar->new($self, $_[1]);
          return \ $_[1];
      }
      my $package = "yaml_" . $self->{KIND};
      $package->new($self)
  }
  
  sub node { $_->{NODE} }
  sub kind { $_->{KIND} }
  sub tag {
      my ($self, $value) = @_;
      if (defined $value) {
                 $self->{TAG} = YAML::Tag->new($value);
          return $self;
      }
      else {
         return $self->{TAG};
      }
  }
  sub keys {
      my ($self, $value) = @_;
      if (defined $value) {
                 $self->{KEYS} = $value;
          return $self;
      }
      else {
         return $self->{KEYS};
      }
  }
  
  #==============================================================================
  package yaml_scalar;
  
  @yaml_scalar::ISA = qw(YAML::Node);
  
  sub new {
      my ($class, $self) = @_;
      tie $_[2], $class, $self;
  }
  
  sub TIESCALAR {
      my ($class, $self) = @_;
      bless $self, $class;
      $self
  }
  
  sub FETCH {
      my ($self) = @_;
      $self->{NODE}
  }
  
  sub STORE {
      my ($self, $value) = @_;
      $self->{NODE} = $value
  }
  
  #==============================================================================
  package yaml_sequence;
  
  @yaml_sequence::ISA = qw(YAML::Node);
  
  sub new {
      my ($class, $self) = @_;
      my $new;
      tie @$new, $class, $self;
      $new
  }
  
  sub TIEARRAY {
      my ($class, $self) = @_;
      bless $self, $class
  }
  
  sub FETCHSIZE {
      my ($self) = @_;
      scalar @{$self->{NODE}};
  }
  
  sub FETCH {
      my ($self, $index) = @_;
      $self->{NODE}[$index]
  }
  
  sub STORE {
      my ($self, $index, $value) = @_;
      $self->{NODE}[$index] = $value
  }
  
  sub undone {
      die "Not implemented yet"; # XXX
  }
  
  *STORESIZE = *POP = *PUSH = *SHIFT = *UNSHIFT = *SPLICE = *DELETE = *EXISTS =
  *STORESIZE = *POP = *PUSH = *SHIFT = *UNSHIFT = *SPLICE = *DELETE = *EXISTS =
  *undone; # XXX Must implement before release
  
  #==============================================================================
  package yaml_mapping;
  
  @yaml_mapping::ISA = qw(YAML::Node);
  
  sub new {
      my ($class, $self) = @_;
      @{$self->{KEYS}} = sort keys %{$self->{NODE}};
      my $new;
      tie %$new, $class, $self;
      $new
  }
  
  sub TIEHASH {
      my ($class, $self) = @_;
      bless $self, $class
  }
  
  sub FETCH {
      my ($self, $key) = @_;
      if (exists $self->{NODE}{$key}) {
          return (grep {$_ eq $key} @{$self->{KEYS}})
                 ? $self->{NODE}{$key} : undef;
      }
      return $self->{HASH}{$key};
  }
  
  sub STORE {
      my ($self, $key, $value) = @_;
      if (exists $self->{NODE}{$key}) {
          $self->{NODE}{$key} = $value;
      }
      elsif (exists $self->{HASH}{$key}) {
          $self->{HASH}{$key} = $value;
      }
      else {
          if (not grep {$_ eq $key} @{$self->{KEYS}}) {
              push(@{$self->{KEYS}}, $key);
          }
          $self->{HASH}{$key} = $value;
      }
      $value
  }
  
  sub DELETE {
      my ($self, $key) = @_;
      my $return;
      if (exists $self->{NODE}{$key}) {
          $return = $self->{NODE}{$key};
      }
      elsif (exists $self->{HASH}{$key}) {
          $return = delete $self->{NODE}{$key};
      }
      for (my $i = 0; $i < @{$self->{KEYS}}; $i++) {
          if ($self->{KEYS}[$i] eq $key) {
              splice(@{$self->{KEYS}}, $i, 1);
          }
      }
      return $return;
  }
  
  sub CLEAR {
      my ($self) = @_;
      @{$self->{KEYS}} = ();
      %{$self->{HASH}} = ();
  }
  
  sub FIRSTKEY {
      my ($self) = @_;
      $self->{ITER} = 0;
      $self->{KEYS}[0]
  }
  
  sub NEXTKEY {
      my ($self) = @_;
      $self->{KEYS}[++$self->{ITER}]
  }
  
  sub EXISTS {
      my ($self, $key) = @_;
      exists $self->{NODE}{$key}
  }
  
  1;
YAML_NODE

    $main::fatpacked{"YAML/Old.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_OLD';
  use strict; use warnings;
  package YAML::Old;
  our $VERSION = '1.07';
  
  use YAML::Old::Mo;
  
  use Exporter;
  push @YAML::Old::ISA, 'Exporter';
  our @EXPORT = qw{ Dump Load };
  our @EXPORT_OK = qw{ freeze thaw DumpFile LoadFile Bless Blessed };
  
  use YAML::Old::Node; # XXX This is a temp fix for Module::Build
  
  # XXX This VALUE nonsense needs to go.
  {
      package
      YAML;
      use constant VALUE => "\x07YAML\x07VALUE\x07";
  }
  
  # YAML Object Properties
  has dumper_class => default => sub {'YAML::Old::Dumper'};
  has loader_class => default => sub {'YAML::Old::Loader'};
  has dumper_object => default => sub {$_[0]->init_action_object("dumper")};
  has loader_object => default => sub {$_[0]->init_action_object("loader")};
  
  sub Dump {
      my $yaml = YAML::Old->new;
      $yaml->dumper_class($YAML::Old::DumperClass)
          if $YAML::Old::DumperClass;
      return $yaml->dumper_object->dump(@_);
  }
  
  sub Load {
      my $yaml = YAML::Old->new;
      $yaml->loader_class($YAML::Old::LoaderClass)
          if $YAML::Old::LoaderClass;
      return $yaml->loader_object->load(@_);
  }
  
  {
      no warnings 'once';
      # freeze/thaw is the API for Storable string serialization. Some
      # modules make use of serializing packages on if they use freeze/thaw.
      *freeze = \ &Dump;
      *thaw   = \ &Load;
  }
  
  sub DumpFile {
      my $OUT;
      my $filename = shift;
      if (ref $filename eq 'GLOB') {
          $OUT = $filename;
      }
      else {
          my $mode = '>';
          if ($filename =~ /^\s*(>{1,2})\s*(.*)$/) {
              ($mode, $filename) = ($1, $2);
          }
          open $OUT, $mode, $filename
            or YAML::Old::Mo::Object->die('YAML_DUMP_ERR_FILE_OUTPUT', $filename, $!);
      }
      binmode $OUT, ':utf8';  # if $Config{useperlio} eq 'define';
      local $/ = "\n"; # reset special to "sane"
      print $OUT Dump(@_);
  }
  
  sub LoadFile {
      my $IN;
      my $filename = shift;
      if (ref $filename eq 'GLOB') {
          $IN = $filename;
      }
      else {
          open $IN, '<', $filename
            or YAML::Old::Mo::Object->die('YAML_LOAD_ERR_FILE_INPUT', $filename, $!);
      }
      binmode $IN, ':utf8';  # if $Config{useperlio} eq 'define';
      return Load(do { local $/; <$IN> });
  }
  
  sub init_action_object {
      my $self = shift;
      my $object_class = (shift) . '_class';
      my $module_name = $self->$object_class;
      eval "require $module_name";
      $self->die("Error in require $module_name - $@")
          if $@ and "$@" !~ /Can't locate/;
      my $object = $self->$object_class->new;
      $object->set_global_options;
      return $object;
  }
  
  my $global = {};
  sub Bless {
      require YAML::Old::Dumper::Base;
      YAML::Old::Dumper::Base::bless($global, @_)
  }
  sub Blessed {
      require YAML::Old::Dumper::Base;
      YAML::Old::Dumper::Base::blessed($global, @_)
  }
  sub global_object { $global }
  
  1;
YAML_OLD

    $main::fatpacked{"YAML/Old/Dumper.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_OLD_DUMPER';
  package YAML::Old::Dumper;
  
  use YAML::Old::Mo;
  extends 'YAML::Old::Dumper::Base';
  
  use YAML::Old::Dumper::Base;
  use YAML::Old::Node;
  use YAML::Old::Types;
  
  # Context constants
  use constant KEY       => 3;
  use constant BLESSED   => 4;
  use constant FROMARRAY => 5;
  use constant VALUE     => "\x07YAML\x07VALUE\x07";
  
  # Common YAML character sets
  my $ESCAPE_CHAR = '[\\x00-\\x08\\x0b-\\x0d\\x0e-\\x1f]';
  my $LIT_CHAR    = '|';
  
  #==============================================================================
  # OO version of Dump. YAML::Old->new->dump($foo);
  sub dump {
      my $self = shift;
      $self->stream('');
      $self->document(0);
      for my $document (@_) {
          $self->{document}++;
          $self->transferred({});
          $self->id_refcnt({});
          $self->id_anchor({});
          $self->anchor(1);
          $self->level(0);
          $self->offset->[0] = 0 - $self->indent_width;
          $self->_prewalk($document);
          $self->_emit_header($document);
          $self->_emit_node($document);
      }
      return $self->stream;
  }
  
  # Every YAML document in the stream must begin with a YAML header, unless
  # there is only a single document and the user requests "no header".
  sub _emit_header {
      my $self = shift;
      my ($node) = @_;
      if (not $self->use_header and
          $self->document == 1
         ) {
          $self->die('YAML_DUMP_ERR_NO_HEADER')
            unless ref($node) =~ /^(HASH|ARRAY)$/;
          $self->die('YAML_DUMP_ERR_NO_HEADER')
            if ref($node) eq 'HASH' and keys(%$node) == 0;
          $self->die('YAML_DUMP_ERR_NO_HEADER')
            if ref($node) eq 'ARRAY' and @$node == 0;
          # XXX Also croak if aliased, blessed, or ynode
          $self->headless(1);
          return;
      }
      $self->{stream} .= '---';
  # XXX Consider switching to 1.1 style
      if ($self->use_version) {
  #         $self->{stream} .= " #YAML:1.0";
      }
  }
  
  # Walk the tree to be dumped and keep track of its reference counts.
  # This function is where the Dumper does all its work. All type
  # transfers happen here.
  sub _prewalk {
      my $self = shift;
      my $stringify = $self->stringify;
      my ($class, $type, $node_id) = $self->node_info(\$_[0], $stringify);
  
      # Handle typeglobs
      if ($type eq 'GLOB') {
          $self->transferred->{$node_id} =
            YAML::Old::Type::glob->yaml_dump($_[0]);
          $self->_prewalk($self->transferred->{$node_id});
          return;
      }
  
      # Handle regexps
      if (ref($_[0]) eq 'Regexp') {
          return;
      }
  
      # Handle Purity for scalars.
      # XXX can't find a use case yet. Might be YAGNI.
      if (not ref $_[0]) {
          $self->{id_refcnt}{$node_id}++ if $self->purity;
          return;
      }
  
      # Make a copy of original
      my $value = $_[0];
      ($class, $type, $node_id) = $self->node_info($value, $stringify);
  
      # Must be a stringified object.
      return if (ref($value) and not $type);
  
      # Look for things already transferred.
      if ($self->transferred->{$node_id}) {
          (undef, undef, $node_id) = (ref $self->transferred->{$node_id})
            ? $self->node_info($self->transferred->{$node_id}, $stringify)
            : $self->node_info(\ $self->transferred->{$node_id}, $stringify);
          $self->{id_refcnt}{$node_id}++;
          return;
      }
  
      # Handle code refs
      if ($type eq 'CODE') {
          $self->transferred->{$node_id} = 'placeholder';
          YAML::Old::Type::code->yaml_dump(
              $self->dump_code,
              $_[0],
              $self->transferred->{$node_id}
          );
          ($class, $type, $node_id) =
            $self->node_info(\ $self->transferred->{$node_id}, $stringify);
          $self->{id_refcnt}{$node_id}++;
          return;
      }
  
      # Handle blessed things
      if (defined $class) {
          if ($value->can('yaml_dump')) {
              $value = $value->yaml_dump;
          }
          elsif ($type eq 'SCALAR') {
              $self->transferred->{$node_id} = 'placeholder';
              YAML::Old::Type::blessed->yaml_dump
                ($_[0], $self->transferred->{$node_id});
              ($class, $type, $node_id) =
                $self->node_info(\ $self->transferred->{$node_id}, $stringify);
              $self->{id_refcnt}{$node_id}++;
              return;
          }
          else {
              $value = YAML::Old::Type::blessed->yaml_dump($value);
          }
          $self->transferred->{$node_id} = $value;
          (undef, $type, $node_id) = $self->node_info($value, $stringify);
      }
  
      # Handle YAML Blessed things
      require YAML::Old;
      if (defined YAML::Old->global_object()->{blessed_map}{$node_id}) {
          $value = YAML::Old->global_object()->{blessed_map}{$node_id};
          $self->transferred->{$node_id} = $value;
          ($class, $type, $node_id) = $self->node_info($value, $stringify);
          $self->_prewalk($value);
          return;
      }
  
      # Handle hard refs
      if ($type eq 'REF' or $type eq 'SCALAR') {
          $value = YAML::Old::Type::ref->yaml_dump($value);
          $self->transferred->{$node_id} = $value;
          (undef, $type, $node_id) = $self->node_info($value, $stringify);
      }
  
      # Handle ref-to-glob's
      elsif ($type eq 'GLOB') {
          my $ref_ynode = $self->transferred->{$node_id} =
            YAML::Old::Type::ref->yaml_dump($value);
  
          my $glob_ynode = $ref_ynode->{&VALUE} =
            YAML::Old::Type::glob->yaml_dump($$value);
  
          (undef, undef, $node_id) = $self->node_info($glob_ynode, $stringify);
          $self->transferred->{$node_id} = $glob_ynode;
          $self->_prewalk($glob_ynode);
          return;
      }
  
      # Increment ref count for node
      return if ++($self->{id_refcnt}{$node_id}) > 1;
  
      # Keep on walking
      if ($type eq 'HASH') {
          $self->_prewalk($value->{$_})
              for keys %{$value};
          return;
      }
      elsif ($type eq 'ARRAY') {
          $self->_prewalk($_)
              for @{$value};
          return;
      }
  
      # Unknown type. Need to know about it.
      $self->warn(<<"...");
  YAML::Old::Dumper can't handle dumping this type of data.
  Please report this to the author.
  
  id:    $node_id
  type:  $type
  class: $class
  value: $value
  
  ...
  
      return;
  }
  
  # Every data element and sub data element is a node.
  # Everything emitted goes through this function.
  sub _emit_node {
      my $self = shift;
      my ($type, $node_id);
      my $ref = ref($_[0]);
      if ($ref) {
          if ($ref eq 'Regexp') {
              $self->_emit(' !!perl/regexp');
              $self->_emit_str("$_[0]");
              return;
          }
          (undef, $type, $node_id) = $self->node_info($_[0], $self->stringify);
      }
      else {
          $type = $ref || 'SCALAR';
          (undef, undef, $node_id) = $self->node_info(\$_[0], $self->stringify);
      }
  
      my ($ynode, $tag) = ('') x 2;
      my ($value, $context) = (@_, 0);
  
      if (defined $self->transferred->{$node_id}) {
          $value = $self->transferred->{$node_id};
          $ynode = ynode($value);
          if (ref $value) {
              $tag = defined $ynode ? $ynode->tag->short : '';
              (undef, $type, $node_id) =
                $self->node_info($value, $self->stringify);
          }
          else {
              $ynode = ynode($self->transferred->{$node_id});
              $tag = defined $ynode ? $ynode->tag->short : '';
              $type = 'SCALAR';
              (undef, undef, $node_id) =
                $self->node_info(
                    \ $self->transferred->{$node_id},
                    $self->stringify
                );
          }
      }
      elsif ($ynode = ynode($value)) {
          $tag = $ynode->tag->short;
      }
  
      if ($self->use_aliases) {
          $self->{id_refcnt}{$node_id} ||= 0;
          if ($self->{id_refcnt}{$node_id} > 1) {
              if (defined $self->{id_anchor}{$node_id}) {
                  $self->{stream} .= ' *' . $self->{id_anchor}{$node_id} . "\n";
                  return;
              }
              my $anchor = $self->anchor_prefix . $self->{anchor}++;
              $self->{stream} .= ' &' . $anchor;
              $self->{id_anchor}{$node_id} = $anchor;
          }
      }
  
      return $self->_emit_str("$value")   # Stringified object
        if ref($value) and not $type;
      return $self->_emit_scalar($value, $tag)
        if $type eq 'SCALAR' and $tag;
      return $self->_emit_str($value)
        if $type eq 'SCALAR';
      return $self->_emit_mapping($value, $tag, $node_id, $context)
        if $type eq 'HASH';
      return $self->_emit_sequence($value, $tag)
        if $type eq 'ARRAY';
      $self->warn('YAML_DUMP_WARN_BAD_NODE_TYPE', $type);
      return $self->_emit_str("$value");
  }
  
  # A YAML mapping is akin to a Perl hash.
  sub _emit_mapping {
      my $self = shift;
      my ($value, $tag, $node_id, $context) = @_;
      $self->{stream} .= " !$tag" if $tag;
  
      # Sometimes 'keys' fails. Like on a bad tie implementation.
      my $empty_hash = not(eval {keys %$value});
      $self->warn('YAML_EMIT_WARN_KEYS', $@) if $@;
      return ($self->{stream} .= " {}\n") if $empty_hash;
  
      # If CompressSeries is on (default) and legal is this context, then
      # use it and make the indent level be 2 for this node.
      if ($context == FROMARRAY and
          $self->compress_series and
          not (defined $self->{id_anchor}{$node_id} or $tag or $empty_hash)
         ) {
          $self->{stream} .= ' ';
          $self->offset->[$self->level+1] = $self->offset->[$self->level] + 2;
      }
      else {
          $context = 0;
          $self->{stream} .= "\n"
            unless $self->headless && not($self->headless(0));
          $self->offset->[$self->level+1] =
            $self->offset->[$self->level] + $self->indent_width;
      }
  
      $self->{level}++;
      my @keys;
      if ($self->sort_keys == 1) {
          if (ynode($value)) {
              @keys = keys %$value;
          }
          else {
              @keys = sort keys %$value;
          }
      }
      elsif ($self->sort_keys == 2) {
          @keys = sort keys %$value;
      }
      # XXX This is hackish but sometimes handy. Not sure whether to leave it in.
      elsif (ref($self->sort_keys) eq 'ARRAY') {
          my $i = 1;
          my %order = map { ($_, $i++) } @{$self->sort_keys};
          @keys = sort {
              (defined $order{$a} and defined $order{$b})
                ? ($order{$a} <=> $order{$b})
                : ($a cmp $b);
          } keys %$value;
      }
      else {
          @keys = keys %$value;
      }
      # Force the YAML::VALUE ('=') key to sort last.
      if (exists $value->{&VALUE}) {
          for (my $i = 0; $i < @keys; $i++) {
              if ($keys[$i] eq &VALUE) {
                  splice(@keys, $i, 1);
                  push @keys, &VALUE;
                  last;
              }
          }
      }
  
      for my $key (@keys) {
          $self->_emit_key($key, $context);
          $context = 0;
          $self->{stream} .= ':';
          $self->_emit_node($value->{$key});
      }
      $self->{level}--;
  }
  
  # A YAML series is akin to a Perl array.
  sub _emit_sequence {
      my $self = shift;
      my ($value, $tag) = @_;
      $self->{stream} .= " !$tag" if $tag;
  
      return ($self->{stream} .= " []\n") if @$value == 0;
  
      $self->{stream} .= "\n"
        unless $self->headless && not($self->headless(0));
  
      # XXX Really crufty feature. Better implemented by ynodes.
      if ($self->inline_series and
          @$value <= $self->inline_series and
          not (scalar grep {ref or /\n/} @$value)
         ) {
          $self->{stream} =~ s/\n\Z/ /;
          $self->{stream} .= '[';
          for (my $i = 0; $i < @$value; $i++) {
              $self->_emit_str($value->[$i], KEY);
              last if $i == $#{$value};
              $self->{stream} .= ', ';
          }
          $self->{stream} .= "]\n";
          return;
      }
  
      $self->offset->[$self->level + 1] =
        $self->offset->[$self->level] + $self->indent_width;
      $self->{level}++;
      for my $val (@$value) {
          $self->{stream} .= ' ' x $self->offset->[$self->level];
          $self->{stream} .= '-';
          $self->_emit_node($val, FROMARRAY);
      }
      $self->{level}--;
  }
  
  # Emit a mapping key
  sub _emit_key {
      my $self = shift;
      my ($value, $context) = @_;
      $self->{stream} .= ' ' x $self->offset->[$self->level]
        unless $context == FROMARRAY;
      $self->_emit_str($value, KEY);
  }
  
  # Emit a blessed SCALAR
  sub _emit_scalar {
      my $self = shift;
      my ($value, $tag) = @_;
      $self->{stream} .= " !$tag";
      $self->_emit_str($value, BLESSED);
  }
  
  sub _emit {
      my $self = shift;
      $self->{stream} .= join '', @_;
  }
  
  # Emit a string value. YAML has many scalar styles. This routine attempts to
  # guess the best style for the text.
  sub _emit_str {
      my $self = shift;
      my $type = $_[1] || 0;
  
      # Use heuristics to find the best scalar emission style.
      $self->offset->[$self->level + 1] =
        $self->offset->[$self->level] + $self->indent_width;
      $self->{level}++;
  
      my $sf = $type == KEY ? '' : ' ';
      my $sb = $type == KEY ? '? ' : ' ';
      my $ef = $type == KEY ? '' : "\n";
      my $eb = "\n";
  
      while (1) {
          $self->_emit($sf),
          $self->_emit_plain($_[0]),
          $self->_emit($ef), last
            if not defined $_[0];
          $self->_emit($sf, '=', $ef), last
            if $_[0] eq VALUE;
          $self->_emit($sf),
          $self->_emit_double($_[0]),
          $self->_emit($ef), last
            if $_[0] =~ /$ESCAPE_CHAR/;
          if ($_[0] =~ /\n/) {
              $self->_emit($sb),
              $self->_emit_block($LIT_CHAR, $_[0]),
              $self->_emit($eb), last
                if $self->use_block;
                Carp::cluck "[YAML] \$UseFold is no longer supported"
                if $self->use_fold;
              $self->_emit($sf),
              $self->_emit_double($_[0]),
              $self->_emit($ef), last
                if length $_[0] <= 30;
              $self->_emit($sf),
              $self->_emit_double($_[0]),
              $self->_emit($ef), last
                if $_[0] !~ /\n\s*\S/;
              $self->_emit($sb),
              $self->_emit_block($LIT_CHAR, $_[0]),
              $self->_emit($eb), last;
          }
          $self->_emit($sf),
          $self->_emit_plain($_[0]),
          $self->_emit($ef), last
            if $self->is_valid_plain($_[0]);
          $self->_emit($sf),
          $self->_emit_double($_[0]),
          $self->_emit($ef), last
            if $_[0] =~ /'/;
          $self->_emit($sf),
          $self->_emit_single($_[0]),
          $self->_emit($ef);
          last;
      }
  
      $self->{level}--;
  
      return;
  }
  
  # Check whether or not a scalar should be emitted as an plain scalar.
  sub is_valid_plain {
      my $self = shift;
      return 0 unless length $_[0];
      # refer to YAML::Old::Loader::parse_inline_simple()
      return 0 if $_[0] =~ /^[\s\{\[\~\`\'\"\!\@\#\>\|\%\&\?\*\^]/;
      return 0 if $_[0] =~ /[\{\[\]\},]/;
      return 0 if $_[0] =~ /[:\-\?]\s/;
      return 0 if $_[0] =~ /\s#/;
      return 0 if $_[0] =~ /\:(\s|$)/;
      return 0 if $_[0] =~ /[\s\|\>]$/;
      return 0 if $_[0] eq '-';
      return 1;
  }
  
  sub _emit_block {
      my $self = shift;
      my ($indicator, $value) = @_;
      $self->{stream} .= $indicator;
      $value =~ /(\n*)\Z/;
      my $chomp = length $1 ? (length $1 > 1) ? '+' : '' : '-';
      $value = '~' if not defined $value;
      $self->{stream} .= $chomp;
      $self->{stream} .= $self->indent_width if $value =~ /^\s/;
      $self->{stream} .= $self->indent($value);
  }
  
  # Plain means that the scalar is unquoted.
  sub _emit_plain {
      my $self = shift;
      $self->{stream} .= defined $_[0] ? $_[0] : '~';
  }
  
  # Double quoting is for single lined escaped strings.
  sub _emit_double {
      my $self = shift;
      (my $escaped = $self->escape($_[0])) =~ s/"/\\"/g;
      $self->{stream} .= qq{"$escaped"};
  }
  
  # Single quoting is for single lined unescaped strings.
  sub _emit_single {
      my $self = shift;
      my $item = shift;
      $item =~ s{'}{''}g;
      $self->{stream} .= "'$item'";
  }
  
  #==============================================================================
  # Utility subroutines.
  #==============================================================================
  
  # Indent a scalar to the current indentation level.
  sub indent {
      my $self = shift;
      my ($text) = @_;
      return $text unless length $text;
      $text =~ s/\n\Z//;
      my $indent = ' ' x $self->offset->[$self->level];
      $text =~ s/^/$indent/gm;
      $text = "\n$text";
      return $text;
  }
  
  # Escapes for unprintable characters
  my @escapes = qw(\0   \x01 \x02 \x03 \x04 \x05 \x06 \a
                   \x08 \t   \n   \v   \f   \r   \x0e \x0f
                   \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17
                   \x18 \x19 \x1a \e   \x1c \x1d \x1e \x1f
                  );
  
  # Escape the unprintable characters
  sub escape {
      my $self = shift;
      my ($text) = @_;
      $text =~ s/\\/\\\\/g;
      $text =~ s/([\x00-\x1f])/$escapes[ord($1)]/ge;
      return $text;
  }
  
  1;
YAML_OLD_DUMPER

    $main::fatpacked{"YAML/Old/Dumper/Base.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_OLD_DUMPER_BASE';
  package YAML::Old::Dumper::Base;
  
  use YAML::Old::Mo;
  
  use YAML::Old::Node;
  
  # YAML Dumping options
  has spec_version    => default => sub {'1.0'};
  has indent_width    => default => sub {2};
  has use_header      => default => sub {1};
  has use_version     => default => sub {0};
  has sort_keys       => default => sub {1};
  has anchor_prefix   => default => sub {''};
  has dump_code       => default => sub {0};
  has use_block       => default => sub {0};
  has use_fold        => default => sub {0};
  has compress_series => default => sub {1};
  has inline_series   => default => sub {0};
  has use_aliases     => default => sub {1};
  has purity          => default => sub {0};
  has stringify       => default => sub {0};
  
  # Properties
  has stream      => default => sub {''};
  has document    => default => sub {0};
  has transferred => default => sub {{}};
  has id_refcnt   => default => sub {{}};
  has id_anchor   => default => sub {{}};
  has anchor      => default => sub {1};
  has level       => default => sub {0};
  has offset      => default => sub {[]};
  has headless    => default => sub {0};
  has blessed_map => default => sub {{}};
  
  # Global Options are an idea taken from Data::Dumper. Really they are just
  # sugar on top of real OO properties. They make the simple Dump/Load API
  # easy to configure.
  sub set_global_options {
      my $self = shift;
      $self->spec_version($YAML::SpecVersion)
        if defined $YAML::SpecVersion;
      $self->indent_width($YAML::Indent)
        if defined $YAML::Indent;
      $self->use_header($YAML::UseHeader)
        if defined $YAML::UseHeader;
      $self->use_version($YAML::UseVersion)
        if defined $YAML::UseVersion;
      $self->sort_keys($YAML::SortKeys)
        if defined $YAML::SortKeys;
      $self->anchor_prefix($YAML::AnchorPrefix)
        if defined $YAML::AnchorPrefix;
      $self->dump_code($YAML::DumpCode || $YAML::UseCode)
        if defined $YAML::DumpCode or defined $YAML::UseCode;
      $self->use_block($YAML::UseBlock)
        if defined $YAML::UseBlock;
      $self->use_fold($YAML::UseFold)
        if defined $YAML::UseFold;
      $self->compress_series($YAML::CompressSeries)
        if defined $YAML::CompressSeries;
      $self->inline_series($YAML::InlineSeries)
        if defined $YAML::InlineSeries;
      $self->use_aliases($YAML::UseAliases)
        if defined $YAML::UseAliases;
      $self->purity($YAML::Purity)
        if defined $YAML::Purity;
      $self->stringify($YAML::Stringify)
        if defined $YAML::Stringify;
  }
  
  sub dump {
      my $self = shift;
      $self->die('dump() not implemented in this class.');
  }
  
  sub blessed {
      my $self = shift;
      my ($ref) = @_;
      $ref = \$_[0] unless ref $ref;
      my (undef, undef, $node_id) = YAML::Old::Mo::Object->node_info($ref);
      $self->{blessed_map}->{$node_id};
  }
  
  sub bless {
      my $self = shift;
      my ($ref, $blessing) = @_;
      my $ynode;
      $ref = \$_[0] unless ref $ref;
      my (undef, undef, $node_id) = YAML::Old::Mo::Object->node_info($ref);
      if (not defined $blessing) {
          $ynode = YAML::Old::Node->new($ref);
      }
      elsif (ref $blessing) {
          $self->die() unless ynode($blessing);
          $ynode = $blessing;
      }
      else {
          no strict 'refs';
          my $transfer = $blessing . "::yaml_dump";
          $self->die() unless defined &{$transfer};
          $ynode = &{$transfer}($ref);
          $self->die() unless ynode($ynode);
      }
      $self->{blessed_map}->{$node_id} = $ynode;
      my $object = ynode($ynode) or $self->die();
      return $object;
  }
  
  1;
YAML_OLD_DUMPER_BASE

    $main::fatpacked{"YAML/Old/Error.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_OLD_ERROR';
  package YAML::Old::Error;
  
  use YAML::Old::Mo;
  
  has 'code';
  has 'type' => default => sub {'Error'};
  has 'line';
  has 'document';
  has 'arguments' => default => sub {[]};
  
  my ($error_messages, %line_adjust);
  
  sub format_message {
      my $self = shift;
      my $output = 'YAML ' . $self->type . ': ';
      my $code = $self->code;
      if ($error_messages->{$code}) {
          $code = sprintf($error_messages->{$code}, @{$self->arguments});
      }
      $output .= $code . "\n";
  
      $output .= '   Code: ' . $self->code . "\n"
          if defined $self->code;
      $output .= '   Line: ' . $self->line . "\n"
          if defined $self->line;
      $output .= '   Document: ' . $self->document . "\n"
          if defined $self->document;
      return $output;
  }
  
  sub error_messages {
      $error_messages;
  }
  
  %$error_messages = map {s/^\s+//;$_} split "\n", <<'...';
  YAML_PARSE_ERR_BAD_CHARS
    Invalid characters in stream. This parser only supports printable ASCII
  YAML_PARSE_ERR_NO_FINAL_NEWLINE
    Stream does not end with newline character
  YAML_PARSE_ERR_BAD_MAJOR_VERSION
    Can't parse a %s document with a 1.0 parser
  YAML_PARSE_WARN_BAD_MINOR_VERSION
    Parsing a %s document with a 1.0 parser
  YAML_PARSE_WARN_MULTIPLE_DIRECTIVES
    '%s directive used more than once'
  YAML_PARSE_ERR_TEXT_AFTER_INDICATOR
    No text allowed after indicator
  YAML_PARSE_ERR_NO_ANCHOR
    No anchor for alias '*%s'
  YAML_PARSE_ERR_NO_SEPARATOR
    Expected separator '---'
  YAML_PARSE_ERR_SINGLE_LINE
    Couldn't parse single line value
  YAML_PARSE_ERR_BAD_ANCHOR
    Invalid anchor
  YAML_DUMP_ERR_INVALID_INDENT
    Invalid Indent width specified: '%s'
  YAML_LOAD_USAGE
    usage: YAML::Old::Load($yaml_stream_scalar)
  YAML_PARSE_ERR_BAD_NODE
    Can't parse node
  YAML_PARSE_ERR_BAD_EXPLICIT
    Unsupported explicit transfer: '%s'
  YAML_DUMP_USAGE_DUMPCODE
    Invalid value for DumpCode: '%s'
  YAML_LOAD_ERR_FILE_INPUT
    Couldn't open %s for input:\n%s
  YAML_DUMP_ERR_FILE_CONCATENATE
    Can't concatenate to YAML file %s
  YAML_DUMP_ERR_FILE_OUTPUT
    Couldn't open %s for output:\n%s
  YAML_DUMP_ERR_NO_HEADER
    With UseHeader=0, the node must be a plain hash or array
  YAML_DUMP_WARN_BAD_NODE_TYPE
    Can't perform serialization for node type: '%s'
  YAML_EMIT_WARN_KEYS
    Encountered a problem with 'keys':\n%s
  YAML_DUMP_WARN_DEPARSE_FAILED
    Deparse failed for CODE reference
  YAML_DUMP_WARN_CODE_DUMMY
    Emitting dummy subroutine for CODE reference
  YAML_PARSE_ERR_MANY_EXPLICIT
    More than one explicit transfer
  YAML_PARSE_ERR_MANY_IMPLICIT
    More than one implicit request
  YAML_PARSE_ERR_MANY_ANCHOR
    More than one anchor
  YAML_PARSE_ERR_ANCHOR_ALIAS
    Can't define both an anchor and an alias
  YAML_PARSE_ERR_BAD_ALIAS
    Invalid alias
  YAML_PARSE_ERR_MANY_ALIAS
    More than one alias
  YAML_LOAD_ERR_NO_CONVERT
    Can't convert implicit '%s' node to explicit '%s' node
  YAML_LOAD_ERR_NO_DEFAULT_VALUE
    No default value for '%s' explicit transfer
  YAML_LOAD_ERR_NON_EMPTY_STRING
    Only the empty string can be converted to a '%s'
  YAML_LOAD_ERR_BAD_MAP_TO_SEQ
    Can't transfer map as sequence. Non numeric key '%s' encountered.
  YAML_DUMP_ERR_BAD_GLOB
    '%s' is an invalid value for Perl glob
  YAML_DUMP_ERR_BAD_REGEXP
    '%s' is an invalid value for Perl Regexp
  YAML_LOAD_ERR_BAD_MAP_ELEMENT
    Invalid element in map
  YAML_LOAD_WARN_DUPLICATE_KEY
    Duplicate map key found. Ignoring.
  YAML_LOAD_ERR_BAD_SEQ_ELEMENT
    Invalid element in sequence
  YAML_PARSE_ERR_INLINE_MAP
    Can't parse inline map
  YAML_PARSE_ERR_INLINE_SEQUENCE
    Can't parse inline sequence
  YAML_PARSE_ERR_BAD_DOUBLE
    Can't parse double quoted string
  YAML_PARSE_ERR_BAD_SINGLE
    Can't parse single quoted string
  YAML_PARSE_ERR_BAD_INLINE_IMPLICIT
    Can't parse inline implicit value '%s'
  YAML_PARSE_ERR_BAD_IMPLICIT
    Unrecognized implicit value '%s'
  YAML_PARSE_ERR_INDENTATION
    Error. Invalid indentation level
  YAML_PARSE_ERR_INCONSISTENT_INDENTATION
    Inconsistent indentation level
  YAML_LOAD_WARN_UNRESOLVED_ALIAS
    Can't resolve alias *%s
  YAML_LOAD_WARN_NO_REGEXP_IN_REGEXP
    No 'REGEXP' element for Perl regexp
  YAML_LOAD_WARN_BAD_REGEXP_ELEM
    Unknown element '%s' in Perl regexp
  YAML_LOAD_WARN_GLOB_NAME
    No 'NAME' element for Perl glob
  YAML_LOAD_WARN_PARSE_CODE
    Couldn't parse Perl code scalar: %s
  YAML_LOAD_WARN_CODE_DEPARSE
    Won't parse Perl code unless $YAML::LoadCode is set
  YAML_EMIT_ERR_BAD_LEVEL
    Internal Error: Bad level detected
  YAML_PARSE_WARN_AMBIGUOUS_TAB
    Amibiguous tab converted to spaces
  YAML_LOAD_WARN_BAD_GLOB_ELEM
    Unknown element '%s' in Perl glob
  YAML_PARSE_ERR_ZERO_INDENT
    Can't use zero as an indentation width
  YAML_LOAD_WARN_GLOB_IO
    Can't load an IO filehandle. Yet!!!
  ...
  
  %line_adjust = map {($_, 1)}
    qw(YAML_PARSE_ERR_BAD_MAJOR_VERSION
       YAML_PARSE_WARN_BAD_MINOR_VERSION
       YAML_PARSE_ERR_TEXT_AFTER_INDICATOR
       YAML_PARSE_ERR_NO_ANCHOR
       YAML_PARSE_ERR_MANY_EXPLICIT
       YAML_PARSE_ERR_MANY_IMPLICIT
       YAML_PARSE_ERR_MANY_ANCHOR
       YAML_PARSE_ERR_ANCHOR_ALIAS
       YAML_PARSE_ERR_BAD_ALIAS
       YAML_PARSE_ERR_MANY_ALIAS
       YAML_LOAD_ERR_NO_CONVERT
       YAML_LOAD_ERR_NO_DEFAULT_VALUE
       YAML_LOAD_ERR_NON_EMPTY_STRING
       YAML_LOAD_ERR_BAD_MAP_TO_SEQ
       YAML_LOAD_ERR_BAD_STR_TO_INT
       YAML_LOAD_ERR_BAD_STR_TO_DATE
       YAML_LOAD_ERR_BAD_STR_TO_TIME
       YAML_LOAD_WARN_DUPLICATE_KEY
       YAML_PARSE_ERR_INLINE_MAP
       YAML_PARSE_ERR_INLINE_SEQUENCE
       YAML_PARSE_ERR_BAD_DOUBLE
       YAML_PARSE_ERR_BAD_SINGLE
       YAML_PARSE_ERR_BAD_INLINE_IMPLICIT
       YAML_PARSE_ERR_BAD_IMPLICIT
       YAML_LOAD_WARN_NO_REGEXP_IN_REGEXP
       YAML_LOAD_WARN_BAD_REGEXP_ELEM
       YAML_LOAD_WARN_REGEXP_CREATE
       YAML_LOAD_WARN_GLOB_NAME
       YAML_LOAD_WARN_PARSE_CODE
       YAML_LOAD_WARN_CODE_DEPARSE
       YAML_LOAD_WARN_BAD_GLOB_ELEM
       YAML_PARSE_ERR_ZERO_INDENT
      );
  
  package YAML::Old::Warning;
  
  our @ISA = 'YAML::Old::Error';
  
  1;
YAML_OLD_ERROR

    $main::fatpacked{"YAML/Old/Loader.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_OLD_LOADER';
  package YAML::Old::Loader;
  
  use YAML::Old::Mo;
  extends 'YAML::Old::Loader::Base';
  
  use YAML::Old::Loader::Base;
  use YAML::Old::Types;
  
  # Context constants
  use constant LEAF       => 1;
  use constant COLLECTION => 2;
  use constant VALUE      => "\x07YAML\x07VALUE\x07";
  use constant COMMENT    => "\x07YAML\x07COMMENT\x07";
  
  # Common YAML character sets
  my $ESCAPE_CHAR = '[\\x00-\\x08\\x0b-\\x0d\\x0e-\\x1f]';
  my $FOLD_CHAR   = '>';
  my $LIT_CHAR    = '|';
  my $LIT_CHAR_RX = "\\$LIT_CHAR";
  
  sub load {
      my $self = shift;
      $self->stream($_[0] || '');
      return $self->_parse();
  }
  
  # Top level function for parsing. Parse each document in order and
  # handle processing for YAML headers.
  sub _parse {
      my $self = shift;
      my (%directives, $preface);
      $self->{stream} =~ s|\015\012|\012|g;
      $self->{stream} =~ s|\015|\012|g;
      $self->line(0);
      $self->die('YAML_PARSE_ERR_BAD_CHARS')
        if $self->stream =~ /$ESCAPE_CHAR/;
      $self->die('YAML_PARSE_ERR_NO_FINAL_NEWLINE')
        if length($self->stream) and
           $self->{stream} !~ s/(.)\n\Z/$1/s;
      $self->lines([split /\x0a/, $self->stream, -1]);
      $self->line(1);
      # Throw away any comments or blanks before the header (or start of
      # content for headerless streams)
      $self->_parse_throwaway_comments();
      $self->document(0);
      $self->documents([]);
      # Add an "assumed" header if there is no header and the stream is
      # not empty (after initial throwaways).
      if (not $self->eos) {
          if ($self->lines->[0] !~ /^---(\s|$)/) {
              unshift @{$self->lines}, '---';
              $self->{line}--;
          }
      }
  
      # Main Loop. Parse out all the top level nodes and return them.
      while (not $self->eos) {
          $self->anchor2node({});
          $self->{document}++;
          $self->done(0);
          $self->level(0);
          $self->offset->[0] = -1;
  
          if ($self->lines->[0] =~ /^---\s*(.*)$/) {
              my @words = split /\s+/, $1;
              %directives = ();
              while (@words && $words[0] =~ /^#(\w+):(\S.*)$/) {
                  my ($key, $value) = ($1, $2);
                  shift(@words);
                  if (defined $directives{$key}) {
                      $self->warn('YAML_PARSE_WARN_MULTIPLE_DIRECTIVES',
                        $key, $self->document);
                      next;
                  }
                  $directives{$key} = $value;
              }
              $self->preface(join ' ', @words);
          }
          else {
              $self->die('YAML_PARSE_ERR_NO_SEPARATOR');
          }
  
          if (not $self->done) {
              $self->_parse_next_line(COLLECTION);
          }
          if ($self->done) {
              $self->{indent} = -1;
              $self->content('');
          }
  
          $directives{YAML} ||= '1.0';
          $directives{TAB} ||= 'NONE';
          ($self->{major_version}, $self->{minor_version}) =
            split /\./, $directives{YAML}, 2;
          $self->die('YAML_PARSE_ERR_BAD_MAJOR_VERSION', $directives{YAML})
            if $self->major_version ne '1';
          $self->warn('YAML_PARSE_WARN_BAD_MINOR_VERSION', $directives{YAML})
            if $self->minor_version ne '0';
          $self->die('Unrecognized TAB policy')
            unless $directives{TAB} =~ /^(NONE|\d+)(:HARD)?$/;
  
          push @{$self->documents}, $self->_parse_node();
      }
      return wantarray ? @{$self->documents} : $self->documents->[-1];
  }
  
  # This function is the dispatcher for parsing each node. Every node
  # recurses back through here. (Inlines are an exception as they have
  # their own sub-parser.)
  sub _parse_node {
      my $self = shift;
      my $preface = $self->preface;
      $self->preface('');
      my ($node, $type, $indicator, $escape, $chomp) = ('') x 5;
      my ($anchor, $alias, $explicit, $implicit, $class) = ('') x 5;
      ($anchor, $alias, $explicit, $implicit, $preface) =
        $self->_parse_qualifiers($preface);
      if ($anchor) {
          $self->anchor2node->{$anchor} = CORE::bless [], 'YAML-anchor2node';
      }
      $self->inline('');
      while (length $preface) {
          my $line = $self->line - 1;
          if ($preface =~ s/^($FOLD_CHAR|$LIT_CHAR_RX)(-|\+)?\d*\s*//) {
              $indicator = $1;
              $chomp = $2 if defined($2);
          }
          else {
              $self->die('YAML_PARSE_ERR_TEXT_AFTER_INDICATOR') if $indicator;
              $self->inline($preface);
              $preface = '';
          }
      }
      if ($alias) {
          $self->die('YAML_PARSE_ERR_NO_ANCHOR', $alias)
            unless defined $self->anchor2node->{$alias};
          if (ref($self->anchor2node->{$alias}) ne 'YAML-anchor2node') {
              $node = $self->anchor2node->{$alias};
          }
          else {
              $node = do {my $sv = "*$alias"};
              push @{$self->anchor2node->{$alias}}, [\$node, $self->line];
          }
      }
      elsif (length $self->inline) {
          $node = $self->_parse_inline(1, $implicit, $explicit);
          if (length $self->inline) {
              $self->die('YAML_PARSE_ERR_SINGLE_LINE');
          }
      }
      elsif ($indicator eq $LIT_CHAR) {
          $self->{level}++;
          $node = $self->_parse_block($chomp);
          $node = $self->_parse_implicit($node) if $implicit;
          $self->{level}--;
      }
      elsif ($indicator eq $FOLD_CHAR) {
          $self->{level}++;
          $node = $self->_parse_unfold($chomp);
          $node = $self->_parse_implicit($node) if $implicit;
          $self->{level}--;
      }
      else {
          $self->{level}++;
          $self->offset->[$self->level] ||= 0;
          if ($self->indent == $self->offset->[$self->level]) {
              if ($self->content =~ /^-( |$)/) {
                  $node = $self->_parse_seq($anchor);
              }
              elsif ($self->content =~ /(^\?|\:( |$))/) {
                  $node = $self->_parse_mapping($anchor);
              }
              elsif ($preface =~ /^\s*$/) {
                  $node = $self->_parse_implicit('');
              }
              else {
                  $self->die('YAML_PARSE_ERR_BAD_NODE');
              }
          }
          else {
              $node = undef;
          }
          $self->{level}--;
      }
      $#{$self->offset} = $self->level;
  
      if ($explicit) {
          if ($class) {
              if (not ref $node) {
                  my $copy = $node;
                  undef $node;
                  $node = \$copy;
              }
              CORE::bless $node, $class;
          }
          else {
              $node = $self->_parse_explicit($node, $explicit);
          }
      }
      if ($anchor) {
          if (ref($self->anchor2node->{$anchor}) eq 'YAML-anchor2node') {
              # XXX Can't remember what this code actually does
              for my $ref (@{$self->anchor2node->{$anchor}}) {
                  ${$ref->[0]} = $node;
                  $self->warn('YAML_LOAD_WARN_UNRESOLVED_ALIAS',
                      $anchor, $ref->[1]);
              }
          }
          $self->anchor2node->{$anchor} = $node;
      }
      return $node;
  }
  
  # Preprocess the qualifiers that may be attached to any node.
  sub _parse_qualifiers {
      my $self = shift;
      my ($preface) = @_;
      my ($anchor, $alias, $explicit, $implicit, $token) = ('') x 5;
      $self->inline('');
      while ($preface =~ /^[&*!]/) {
          my $line = $self->line - 1;
          if ($preface =~ s/^\!(\S+)\s*//) {
              $self->die('YAML_PARSE_ERR_MANY_EXPLICIT') if $explicit;
              $explicit = $1;
          }
          elsif ($preface =~ s/^\!\s*//) {
              $self->die('YAML_PARSE_ERR_MANY_IMPLICIT') if $implicit;
              $implicit = 1;
          }
          elsif ($preface =~ s/^\&([^ ,:]+)\s*//) {
              $token = $1;
              $self->die('YAML_PARSE_ERR_BAD_ANCHOR')
                unless $token =~ /^[a-zA-Z0-9]+$/;
              $self->die('YAML_PARSE_ERR_MANY_ANCHOR') if $anchor;
              $self->die('YAML_PARSE_ERR_ANCHOR_ALIAS') if $alias;
              $anchor = $token;
          }
          elsif ($preface =~ s/^\*([^ ,:]+)\s*//) {
              $token = $1;
              $self->die('YAML_PARSE_ERR_BAD_ALIAS')
                unless $token =~ /^[a-zA-Z0-9]+$/;
              $self->die('YAML_PARSE_ERR_MANY_ALIAS') if $alias;
              $self->die('YAML_PARSE_ERR_ANCHOR_ALIAS') if $anchor;
              $alias = $token;
          }
      }
      return ($anchor, $alias, $explicit, $implicit, $preface);
  }
  
  # Morph a node to it's explicit type
  sub _parse_explicit {
      my $self = shift;
      my ($node, $explicit) = @_;
      my ($type, $class);
      if ($explicit =~ /^\!?perl\/(hash|array|ref|scalar)(?:\:(\w(\w|\:\:)*)?)?$/) {
          ($type, $class) = (($1 || ''), ($2 || ''));
  
          # FIXME # die unless uc($type) eq ref($node) ?
  
          if ( $type eq "ref" ) {
              $self->die('YAML_LOAD_ERR_NO_DEFAULT_VALUE', 'XXX', $explicit)
              unless exists $node->{VALUE()} and scalar(keys %$node) == 1;
  
              my $value = $node->{VALUE()};
              $node = \$value;
          }
  
          if ( $type eq "scalar" and length($class) and !ref($node) ) {
              my $value = $node;
              $node = \$value;
          }
  
          if ( length($class) ) {
              CORE::bless($node, $class);
          }
  
          return $node;
      }
      if ($explicit =~ m{^!?perl/(glob|regexp|code)(?:\:(\w(\w|\:\:)*)?)?$}) {
          ($type, $class) = (($1 || ''), ($2 || ''));
          my $type_class = "YAML::Old::Type::$type";
          no strict 'refs';
          if ($type_class->can('yaml_load')) {
              return $type_class->yaml_load($node, $class, $self);
          }
          else {
              $self->die('YAML_LOAD_ERR_NO_CONVERT', 'XXX', $explicit);
          }
      }
      # This !perl/@Foo and !perl/$Foo are deprecated but still parsed
      elsif ($YAML::Old::TagClass->{$explicit} ||
             $explicit =~ m{^perl/(\@|\$)?([a-zA-Z](\w|::)+)$}
            ) {
          $class = $YAML::Old::TagClass->{$explicit} || $2;
          if ($class->can('yaml_load')) {
              require YAML::Old::Node;
              return $class->yaml_load(YAML::Old::Node->new($node, $explicit));
          }
          else {
              if (ref $node) {
                  return CORE::bless $node, $class;
              }
              else {
                  return CORE::bless \$node, $class;
              }
          }
      }
      elsif (ref $node) {
          require YAML::Old::Node;
          return YAML::Old::Node->new($node, $explicit);
      }
      else {
          # XXX This is likely wrong. Failing test:
          # --- !unknown 'scalar value'
          return $node;
      }
  }
  
  # Parse a YAML mapping into a Perl hash
  sub _parse_mapping {
      my $self = shift;
      my ($anchor) = @_;
      my $mapping = {};
      $self->anchor2node->{$anchor} = $mapping;
      my $key;
      while (not $self->done and $self->indent == $self->offset->[$self->level]) {
          # If structured key:
          if ($self->{content} =~ s/^\?\s*//) {
              $self->preface($self->content);
              $self->_parse_next_line(COLLECTION);
              $key = $self->_parse_node();
              $key = "$key";
          }
          # If "default" key (equals sign)
          elsif ($self->{content} =~ s/^\=\s*//) {
              $key = VALUE;
          }
          # If "comment" key (slash slash)
          elsif ($self->{content} =~ s/^\=\s*//) {
              $key = COMMENT;
          }
          # Regular scalar key:
          else {
              $self->inline($self->content);
              $key = $self->_parse_inline();
              $key = "$key";
              $self->content($self->inline);
              $self->inline('');
          }
  
          unless ($self->{content} =~ s/^:\s*//) {
              $self->die('YAML_LOAD_ERR_BAD_MAP_ELEMENT');
          }
          $self->preface($self->content);
          my $line = $self->line;
          $self->_parse_next_line(COLLECTION);
          my $value = $self->_parse_node();
          if (exists $mapping->{$key}) {
              $self->warn('YAML_LOAD_WARN_DUPLICATE_KEY');
          }
          else {
              $mapping->{$key} = $value;
          }
      }
      return $mapping;
  }
  
  # Parse a YAML sequence into a Perl array
  sub _parse_seq {
      my $self = shift;
      my ($anchor) = @_;
      my $seq = [];
      $self->anchor2node->{$anchor} = $seq;
      while (not $self->done and $self->indent == $self->offset->[$self->level]) {
          if ($self->content =~ /^-(?: (.*))?$/) {
              $self->preface(defined($1) ? $1 : '');
          }
          else {
              $self->die('YAML_LOAD_ERR_BAD_SEQ_ELEMENT');
          }
          if ($self->preface =~ /^(\s*)(\w.*\:(?: |$).*)$/) {
              $self->indent($self->offset->[$self->level] + 2 + length($1));
              $self->content($2);
              $self->level($self->level + 1);
              $self->offset->[$self->level] = $self->indent;
              $self->preface('');
              push @$seq, $self->_parse_mapping('');
              $self->{level}--;
              $#{$self->offset} = $self->level;
          }
          else {
              $self->_parse_next_line(COLLECTION);
              push @$seq, $self->_parse_node();
          }
      }
      return $seq;
  }
  
  # Parse an inline value. Since YAML supports inline collections, this is
  # the top level of a sub parsing.
  sub _parse_inline {
      my $self = shift;
      my ($top, $top_implicit, $top_explicit) = (@_, '', '', '');
      $self->{inline} =~ s/^\s*(.*)\s*$/$1/; # OUCH - mugwump
      my ($node, $anchor, $alias, $explicit, $implicit) = ('') x 5;
      ($anchor, $alias, $explicit, $implicit, $self->{inline}) =
        $self->_parse_qualifiers($self->inline);
      if ($anchor) {
          $self->anchor2node->{$anchor} = CORE::bless [], 'YAML-anchor2node';
      }
      $implicit ||= $top_implicit;
      $explicit ||= $top_explicit;
      ($top_implicit, $top_explicit) = ('', '');
      if ($alias) {
          $self->die('YAML_PARSE_ERR_NO_ANCHOR', $alias)
            unless defined $self->anchor2node->{$alias};
          if (ref($self->anchor2node->{$alias}) ne 'YAML-anchor2node') {
              $node = $self->anchor2node->{$alias};
          }
          else {
              $node = do {my $sv = "*$alias"};
              push @{$self->anchor2node->{$alias}}, [\$node, $self->line];
          }
      }
      elsif ($self->inline =~ /^\{/) {
          $node = $self->_parse_inline_mapping($anchor);
      }
      elsif ($self->inline =~ /^\[/) {
          $node = $self->_parse_inline_seq($anchor);
      }
      elsif ($self->inline =~ /^"/) {
          $node = $self->_parse_inline_double_quoted();
          $node = $self->_unescape($node);
          $node = $self->_parse_implicit($node) if $implicit;
      }
      elsif ($self->inline =~ /^'/) {
          $node = $self->_parse_inline_single_quoted();
          $node = $self->_parse_implicit($node) if $implicit;
      }
      else {
          if ($top) {
              $node = $self->inline;
              $self->inline('');
          }
          else {
              $node = $self->_parse_inline_simple();
          }
          $node = $self->_parse_implicit($node) unless $explicit;
      }
      if ($explicit) {
          $node = $self->_parse_explicit($node, $explicit);
      }
      if ($anchor) {
          if (ref($self->anchor2node->{$anchor}) eq 'YAML-anchor2node') {
              for my $ref (@{$self->anchor2node->{$anchor}}) {
                  ${$ref->[0]} = $node;
                  $self->warn('YAML_LOAD_WARN_UNRESOLVED_ALIAS',
                      $anchor, $ref->[1]);
              }
          }
          $self->anchor2node->{$anchor} = $node;
      }
      return $node;
  }
  
  # Parse the inline YAML mapping into a Perl hash
  sub _parse_inline_mapping {
      my $self = shift;
      my ($anchor) = @_;
      my $node = {};
      $self->anchor2node->{$anchor} = $node;
  
      $self->die('YAML_PARSE_ERR_INLINE_MAP')
        unless $self->{inline} =~ s/^\{\s*//;
      while (not $self->{inline} =~ s/^\s*\}//) {
          my $key = $self->_parse_inline();
          $self->die('YAML_PARSE_ERR_INLINE_MAP')
            unless $self->{inline} =~ s/^\: \s*//;
          my $value = $self->_parse_inline();
          if (exists $node->{$key}) {
              $self->warn('YAML_LOAD_WARN_DUPLICATE_KEY');
          }
          else {
              $node->{$key} = $value;
          }
          next if $self->inline =~ /^\s*\}/;
          $self->die('YAML_PARSE_ERR_INLINE_MAP')
            unless $self->{inline} =~ s/^\,\s*//;
      }
      return $node;
  }
  
  # Parse the inline YAML sequence into a Perl array
  sub _parse_inline_seq {
      my $self = shift;
      my ($anchor) = @_;
      my $node = [];
      $self->anchor2node->{$anchor} = $node;
  
      $self->die('YAML_PARSE_ERR_INLINE_SEQUENCE')
        unless $self->{inline} =~ s/^\[\s*//;
      while (not $self->{inline} =~ s/^\s*\]//) {
          my $value = $self->_parse_inline();
          push @$node, $value;
          next if $self->inline =~ /^\s*\]/;
          $self->die('YAML_PARSE_ERR_INLINE_SEQUENCE')
            unless $self->{inline} =~ s/^\,\s*//;
      }
      return $node;
  }
  
  # Parse the inline double quoted string.
  sub _parse_inline_double_quoted {
      my $self = shift;
      my $node;
      # https://rt.cpan.org/Public/Bug/Display.html?id=90593
      if ($self->inline =~ /^"((?:(?:\\"|[^"]){0,32766}){0,32766})"\s*(.*)$/) {
          $node = $1;
          $self->inline($2);
          $node =~ s/\\"/"/g;
      }
      else {
          $self->die('YAML_PARSE_ERR_BAD_DOUBLE');
      }
      return $node;
  }
  
  
  # Parse the inline single quoted string.
  sub _parse_inline_single_quoted {
      my $self = shift;
      my $node;
      if ($self->inline =~ /^'((?:(?:''|[^']){0,32766}){0,32766})'\s*(.*)$/) {
          $node = $1;
          $self->inline($2);
          $node =~ s/''/'/g;
      }
      else {
          $self->die('YAML_PARSE_ERR_BAD_SINGLE');
      }
      return $node;
  }
  
  # Parse the inline unquoted string and do implicit typing.
  sub _parse_inline_simple {
      my $self = shift;
      my $value;
      if ($self->inline =~ /^(|[^!@#%^&*].*?)(?=[\[\]\{\},]|, |: |- |:\s*$|$)/) {
          $value = $1;
          substr($self->{inline}, 0, length($1)) = '';
      }
      else {
          $self->die('YAML_PARSE_ERR_BAD_INLINE_IMPLICIT', $value);
      }
      return $value;
  }
  
  sub _parse_implicit {
      my $self = shift;
      my ($value) = @_;
      $value =~ s/\s*$//;
      return $value if $value eq '';
      return undef if $value =~ /^~$/;
      return $value
        unless $value =~ /^[\@\`\^]/ or
               $value =~ /^[\-\?]\s/;
      $self->die('YAML_PARSE_ERR_BAD_IMPLICIT', $value);
  }
  
  # Unfold a YAML multiline scalar into a single string.
  sub _parse_unfold {
      my $self = shift;
      my ($chomp) = @_;
      my $node = '';
      my $space = 0;
      while (not $self->done and $self->indent == $self->offset->[$self->level]) {
          $node .= $self->content. "\n";
          $self->_parse_next_line(LEAF);
      }
      $node =~ s/^(\S.*)\n(?=\S)/$1 /gm;
      $node =~ s/^(\S.*)\n(\n+\S)/$1$2/gm;
      $node =~ s/\n*\Z// unless $chomp eq '+';
      $node .= "\n" unless $chomp;
      return $node;
  }
  
  # Parse a YAML block style scalar. This is like a Perl here-document.
  sub _parse_block {
      my $self = shift;
      my ($chomp) = @_;
      my $node = '';
      while (not $self->done and $self->indent == $self->offset->[$self->level]) {
          $node .= $self->content . "\n";
          $self->_parse_next_line(LEAF);
      }
      return $node if '+' eq $chomp;
      $node =~ s/\n*\Z/\n/;
      $node =~ s/\n\Z// if $chomp eq '-';
      return $node;
  }
  
  # Handle Perl style '#' comments. Comments must be at the same indentation
  # level as the collection line following them.
  sub _parse_throwaway_comments {
      my $self = shift;
      while (@{$self->lines} and
             $self->lines->[0] =~ m{^\s*(\#|$)}
            ) {
          shift @{$self->lines};
          $self->{line}++;
      }
      $self->eos($self->{done} = not @{$self->lines});
  }
  
  # This is the routine that controls what line is being parsed. It gets called
  # once for each line in the YAML stream.
  #
  # This routine must:
  # 1) Skip past the current line
  # 2) Determine the indentation offset for a new level
  # 3) Find the next _content_ line
  #   A) Skip over any throwaways (Comments/blanks)
  #   B) Set $self->indent, $self->content, $self->line
  # 4) Expand tabs appropriately
  sub _parse_next_line {
      my $self = shift;
      my ($type) = @_;
      my $level = $self->level;
      my $offset = $self->offset->[$level];
      $self->die('YAML_EMIT_ERR_BAD_LEVEL') unless defined $offset;
      shift @{$self->lines};
      $self->eos($self->{done} = not @{$self->lines});
      return if $self->eos;
      $self->{line}++;
  
      # Determine the offset for a new leaf node
      if ($self->preface =~
          qr/(?:^|\s)(?:$FOLD_CHAR|$LIT_CHAR_RX)(?:-|\+)?(\d*)\s*$/
         ) {
          $self->die('YAML_PARSE_ERR_ZERO_INDENT')
            if length($1) and $1 == 0;
          $type = LEAF;
          if (length($1)) {
              $self->offset->[$level + 1] = $offset + $1;
          }
          else {
              # First get rid of any comments.
              while (@{$self->lines} && ($self->lines->[0] =~ /^\s*#/)) {
                  $self->lines->[0] =~ /^( *)/ or die;
                  last unless length($1) <= $offset;
                  shift @{$self->lines};
                  $self->{line}++;
              }
              $self->eos($self->{done} = not @{$self->lines});
              return if $self->eos;
              if ($self->lines->[0] =~ /^( *)\S/ and length($1) > $offset) {
                  $self->offset->[$level+1] = length($1);
              }
              else {
                  $self->offset->[$level+1] = $offset + 1;
              }
          }
          $offset = $self->offset->[++$level];
      }
      # Determine the offset for a new collection level
      elsif ($type == COLLECTION and
             $self->preface =~ /^(\s*(\!\S*|\&\S+))*\s*$/) {
          $self->_parse_throwaway_comments();
          if ($self->eos) {
              $self->offset->[$level+1] = $offset + 1;
              return;
          }
          else {
              $self->lines->[0] =~ /^( *)\S/ or die;
              if (length($1) > $offset) {
                  $self->offset->[$level+1] = length($1);
              }
              else {
                  $self->offset->[$level+1] = $offset + 1;
              }
          }
          $offset = $self->offset->[++$level];
      }
  
      if ($type == LEAF) {
          while (@{$self->lines} and
                 $self->lines->[0] =~ m{^( *)(\#)} and
                 length($1) < $offset
                ) {
              shift @{$self->lines};
              $self->{line}++;
          }
          $self->eos($self->{done} = not @{$self->lines});
      }
      else {
          $self->_parse_throwaway_comments();
      }
      return if $self->eos;
  
      if ($self->lines->[0] =~ /^---(\s|$)/) {
          $self->done(1);
          return;
      }
      if ($type == LEAF and
          $self->lines->[0] =~ /^ {$offset}(.*)$/
         ) {
          $self->indent($offset);
          $self->content($1);
      }
      elsif ($self->lines->[0] =~ /^\s*$/) {
          $self->indent($offset);
          $self->content('');
      }
      else {
          $self->lines->[0] =~ /^( *)(\S.*)$/;
          while ($self->offset->[$level] > length($1)) {
              $level--;
          }
          $self->die('YAML_PARSE_ERR_INCONSISTENT_INDENTATION')
            if $self->offset->[$level] != length($1);
          $self->indent(length($1));
          $self->content($2);
      }
      $self->die('YAML_PARSE_ERR_INDENTATION')
        if $self->indent - $offset > 1;
  }
  
  #==============================================================================
  # Utility subroutines.
  #==============================================================================
  
  # Printable characters for escapes
  my %unescapes = (
     0 => "\x00",
     a => "\x07",
     t => "\x09",
     n => "\x0a",
     'v' => "\x0b", # Potential v-string error on 5.6.2 if not quoted
     f => "\x0c",
     r => "\x0d",
     e => "\x1b",
     '\\' => '\\',
    );
  
  # Transform all the backslash style escape characters to their literal meaning
  sub _unescape {
      my $self = shift;
      my ($node) = @_;
      $node =~ s/\\([never\\fart0]|x([0-9a-fA-F]{2}))/
                (length($1)>1)?pack("H2",$2):$unescapes{$1}/gex;
      return $node;
  }
  
  1;
YAML_OLD_LOADER

    $main::fatpacked{"YAML/Old/Loader/Base.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_OLD_LOADER_BASE';
  package YAML::Old::Loader::Base;
  
  use YAML::Old::Mo;
  
  has load_code     => default => sub {0};
  has stream        => default => sub {''};
  has document      => default => sub {0};
  has line          => default => sub {0};
  has documents     => default => sub {[]};
  has lines         => default => sub {[]};
  has eos           => default => sub {0};
  has done          => default => sub {0};
  has anchor2node   => default => sub {{}};
  has level         => default => sub {0};
  has offset        => default => sub {[]};
  has preface       => default => sub {''};
  has content       => default => sub {''};
  has indent        => default => sub {0};
  has major_version => default => sub {0};
  has minor_version => default => sub {0};
  has inline        => default => sub {''};
  
  sub set_global_options {
      my $self = shift;
      $self->load_code($YAML::LoadCode || $YAML::UseCode)
        if defined $YAML::LoadCode or defined $YAML::UseCode;
  }
  
  sub load {
      die 'load() not implemented in this class.';
  }
  
  1;
YAML_OLD_LOADER_BASE

    $main::fatpacked{"YAML/Old/Marshall.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_OLD_MARSHALL';
  use strict; use warnings;
  package YAML::Old::Marshall;
  
  use YAML::Old::Node ();
  
  sub import {
      my $class = shift;
      no strict 'refs';
      my $package = caller;
      unless (grep { $_ eq $class} @{$package . '::ISA'}) {
          push @{$package . '::ISA'}, $class;
      }
  
      my $tag = shift;
      if ( $tag ) {
          no warnings 'once';
          $YAML::Old::TagClass->{$tag} = $package;
          ${$package . "::YamlTag"} = $tag;
      }
  }
  
  sub yaml_dump {
      my $self = shift;
      no strict 'refs';
      my $tag = ${ref($self) . "::YamlTag"} || 'perl/' . ref($self);
      $self->yaml_node($self, $tag);
  }
  
  sub yaml_load {
      my ($class, $node) = @_;
      if (my $ynode = $class->yaml_ynode($node)) {
          $node = $ynode->{NODE};
      }
      bless $node, $class;
  }
  
  sub yaml_node {
      shift;
      YAML::Old::Node->new(@_);
  }
  
  sub yaml_ynode {
      shift;
      YAML::Old::Node::ynode(@_);
  }
  
  1;
YAML_OLD_MARSHALL

    $main::fatpacked{"YAML/Old/Mo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_OLD_MO';
  package YAML::Old::Mo;
  
  # use Mo qw[builder default import];
  #   The following line of code was produced from the previous line by
  #   Mo::Inline version 0.31
  no warnings;my$M=__PACKAGE__.'::';*{$M.Object::new}=sub{bless{@_[1..$#_]},$_[0]};*{$M.import}=sub{import warnings;$^H|=1538;my($P,%e,%o)=caller.'::';shift;eval"no Mo::$_",&{$M.$_.::e}($P,\%e,\%o,\@_)for@_;return if$e{M};%e=(extends,sub{eval"no $_[0]()";@{$P.ISA}=$_[0]},has,sub{my$n=shift;my$m=sub{$#_?$_[0]{$n}=$_[1]:$_[0]{$n}};$m=$o{$_}->($m,$n,@_)for sort keys%o;*{$P.$n}=$m},%e,);*{$P.$_}=$e{$_}for keys%e;@{$P.ISA}=$M.Object};*{$M.'builder::e'}=sub{my($P,$e,$o)=@_;$o->{builder}=sub{my($m,$n,%a)=@_;my$b=$a{builder}or return$m;sub{$#_?$m->(@_):!exists$_[0]{$n}?$_[0]{$n}=$_[0]->$b:$m->(@_)}}};*{$M.'default::e'}=sub{my($P,$e,$o)=@_;$o->{default}=sub{my($m,$n,%a)=@_;$a{default}or return$m;sub{$#_?$m->(@_):!exists$_[0]{$n}?$_[0]{$n}=$a{default}->(@_):$m->(@_)}}};my$i=\&import;*{$M.import}=sub{(@_==2 and not $_[1])?pop@_:@_==1?push@_,grep!/import/,@f:();goto&$i};@f=qw[builder default import];use strict;use warnings;
  
  our $DumperModule = 'Data::Dumper';
  
  my ($_new_error, $_info, $_scalar_info);
  
  no strict 'refs';
  *{$M.'Object::die'} = sub {
      my $self = shift;
      my $error = $self->$_new_error(@_);
      $error->type('Error');
      Carp::croak($error->format_message);
  };
  
  *{$M.'Object::warn'} = sub {
      my $self = shift;
      return unless $^W;
      my $error = $self->$_new_error(@_);
      $error->type('Warning');
      Carp::cluck($error->format_message);
  };
  
  # This code needs to be refactored to be simpler and more precise, and no,
  # Scalar::Util doesn't DWIM.
  #
  # Can't handle:
  # * blessed regexp
  *{$M.'Object::node_info'} = sub {
      my $self = shift;
      my $stringify = $_[1] || 0;
      my ($class, $type, $id) =
          ref($_[0])
          ? $stringify
            ? &$_info("$_[0]")
            : do {
                require overload;
                my @info = &$_info(overload::StrVal($_[0]));
                if (ref($_[0]) eq 'Regexp') {
                    @info[0, 1] = (undef, 'REGEXP');
                }
                @info;
            }
          : &$_scalar_info($_[0]);
      ($class, $type, $id) = &$_scalar_info("$_[0]")
          unless $id;
      return wantarray ? ($class, $type, $id) : $id;
  };
  
  #-------------------------------------------------------------------------------
  $_info = sub {
      return (($_[0]) =~ qr{^(?:(.*)\=)?([^=]*)\(([^\(]*)\)$}o);
  };
  
  $_scalar_info = sub {
      my $id = 'undef';
      if (defined $_[0]) {
          \$_[0] =~ /\((\w+)\)$/o or CORE::die();
          $id = "$1-S";
      }
      return (undef, undef, $id);
  };
  
  $_new_error = sub {
      require Carp;
      my $self = shift;
      require YAML::Old::Error;
  
      my $code = shift || 'unknown error';
      my $error = YAML::Old::Error->new(code => $code);
      $error->line($self->line) if $self->can('line');
      $error->document($self->document) if $self->can('document');
      $error->arguments([@_]);
      return $error;
  };
  
  1;
YAML_OLD_MO

    $main::fatpacked{"YAML/Old/Node.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_OLD_NODE';
  use strict; use warnings;
  package YAML::Old::Node;
  
  use YAML::Old::Tag;
  require YAML::Old::Mo;
  
  use Exporter;
  our @ISA     = qw(Exporter YAML::Old::Mo::Object);
  our @EXPORT  = qw(ynode);
  
  sub ynode {
      my $self;
      if (ref($_[0]) eq 'HASH') {
          $self = tied(%{$_[0]});
      }
      elsif (ref($_[0]) eq 'ARRAY') {
          $self = tied(@{$_[0]});
      }
      elsif (ref(\$_[0]) eq 'GLOB') {
          $self = tied(*{$_[0]});
      }
      else {
          $self = tied($_[0]);
      }
      return (ref($self) =~ /^yaml_/) ? $self : undef;
  }
  
  sub new {
      my ($class, $node, $tag) = @_;
      my $self;
      $self->{NODE} = $node;
      my (undef, $type) = YAML::Old::Mo::Object->node_info($node);
      $self->{KIND} = (not defined $type) ? 'scalar' :
                      ($type eq 'ARRAY') ? 'sequence' :
                      ($type eq 'HASH') ? 'mapping' :
                      $class->die("Can't create YAML::Old::Node from '$type'");
      tag($self, ($tag || ''));
      if ($self->{KIND} eq 'scalar') {
          yaml_scalar->new($self, $_[1]);
          return \ $_[1];
      }
      my $package = "yaml_" . $self->{KIND};
      $package->new($self)
  }
  
  sub node { $_->{NODE} }
  sub kind { $_->{KIND} }
  sub tag {
      my ($self, $value) = @_;
      if (defined $value) {
                 $self->{TAG} = YAML::Old::Tag->new($value);
          return $self;
      }
      else {
         return $self->{TAG};
      }
  }
  sub keys {
      my ($self, $value) = @_;
      if (defined $value) {
                 $self->{KEYS} = $value;
          return $self;
      }
      else {
         return $self->{KEYS};
      }
  }
  
  #==============================================================================
  package
  yaml_scalar;
  
  @yaml_scalar::ISA = qw(YAML::Old::Node);
  
  sub new {
      my ($class, $self) = @_;
      tie $_[2], $class, $self;
  }
  
  sub TIESCALAR {
      my ($class, $self) = @_;
      bless $self, $class;
      $self
  }
  
  sub FETCH {
      my ($self) = @_;
      $self->{NODE}
  }
  
  sub STORE {
      my ($self, $value) = @_;
      $self->{NODE} = $value
  }
  
  #==============================================================================
  package
  yaml_sequence;
  
  @yaml_sequence::ISA = qw(YAML::Old::Node);
  
  sub new {
      my ($class, $self) = @_;
      my $new;
      tie @$new, $class, $self;
      $new
  }
  
  sub TIEARRAY {
      my ($class, $self) = @_;
      bless $self, $class
  }
  
  sub FETCHSIZE {
      my ($self) = @_;
      scalar @{$self->{NODE}};
  }
  
  sub FETCH {
      my ($self, $index) = @_;
      $self->{NODE}[$index]
  }
  
  sub STORE {
      my ($self, $index, $value) = @_;
      $self->{NODE}[$index] = $value
  }
  
  sub undone {
      die "Not implemented yet"; # XXX
  }
  
  *STORESIZE = *POP = *PUSH = *SHIFT = *UNSHIFT = *SPLICE = *DELETE = *EXISTS =
  *STORESIZE = *POP = *PUSH = *SHIFT = *UNSHIFT = *SPLICE = *DELETE = *EXISTS =
  *undone; # XXX Must implement before release
  
  #==============================================================================
  package
  yaml_mapping;
  
  @yaml_mapping::ISA = qw(YAML::Old::Node);
  
  sub new {
      my ($class, $self) = @_;
      @{$self->{KEYS}} = sort keys %{$self->{NODE}};
      my $new;
      tie %$new, $class, $self;
      $new
  }
  
  sub TIEHASH {
      my ($class, $self) = @_;
      bless $self, $class
  }
  
  sub FETCH {
      my ($self, $key) = @_;
      if (exists $self->{NODE}{$key}) {
          return (grep {$_ eq $key} @{$self->{KEYS}})
                 ? $self->{NODE}{$key} : undef;
      }
      return $self->{HASH}{$key};
  }
  
  sub STORE {
      my ($self, $key, $value) = @_;
      if (exists $self->{NODE}{$key}) {
          $self->{NODE}{$key} = $value;
      }
      elsif (exists $self->{HASH}{$key}) {
          $self->{HASH}{$key} = $value;
      }
      else {
          if (not grep {$_ eq $key} @{$self->{KEYS}}) {
              push(@{$self->{KEYS}}, $key);
          }
          $self->{HASH}{$key} = $value;
      }
      $value
  }
  
  sub DELETE {
      my ($self, $key) = @_;
      my $return;
      if (exists $self->{NODE}{$key}) {
          $return = $self->{NODE}{$key};
      }
      elsif (exists $self->{HASH}{$key}) {
          $return = delete $self->{NODE}{$key};
      }
      for (my $i = 0; $i < @{$self->{KEYS}}; $i++) {
          if ($self->{KEYS}[$i] eq $key) {
              splice(@{$self->{KEYS}}, $i, 1);
          }
      }
      return $return;
  }
  
  sub CLEAR {
      my ($self) = @_;
      @{$self->{KEYS}} = ();
      %{$self->{HASH}} = ();
  }
  
  sub FIRSTKEY {
      my ($self) = @_;
      $self->{ITER} = 0;
      $self->{KEYS}[0]
  }
  
  sub NEXTKEY {
      my ($self) = @_;
      $self->{KEYS}[++$self->{ITER}]
  }
  
  sub EXISTS {
      my ($self, $key) = @_;
      exists $self->{NODE}{$key}
  }
  
  1;
YAML_OLD_NODE

    $main::fatpacked{"YAML/Old/Tag.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_OLD_TAG';
  use strict; use warnings;
  package YAML::Old::Tag;
  
  use overload '""' => sub { ${$_[0]} };
  
  sub new {
      my ($class, $self) = @_;
      bless \$self, $class
  }
  
  sub short {
      ${$_[0]}
  }
  
  sub canonical {
      ${$_[0]}
  }
  
  1;
YAML_OLD_TAG

    $main::fatpacked{"YAML/Old/Types.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_OLD_TYPES';
  package YAML::Old::Types;
  
  use YAML::Old::Mo;
  use YAML::Old::Node;
  
  # XXX These classes and their APIs could still use some refactoring,
  # but at least they work for now.
  #-------------------------------------------------------------------------------
  package YAML::Old::Type::blessed;
  
  use YAML::Old::Mo; # XXX
  
  sub yaml_dump {
      my $self = shift;
      my ($value) = @_;
      my ($class, $type) = YAML::Old::Mo::Object->node_info($value);
      no strict 'refs';
      my $kind = lc($type) . ':';
      my $tag = ${$class . '::ClassTag'} ||
                "!perl/$kind$class";
      if ($type eq 'REF') {
          YAML::Old::Node->new(
              {(&YAML::VALUE, ${$_[0]})}, $tag
          );
      }
      elsif ($type eq 'SCALAR') {
          $_[1] = $$value;
          YAML::Old::Node->new($_[1], $tag);
      } else {
          YAML::Old::Node->new($value, $tag);
      }
  }
  
  #-------------------------------------------------------------------------------
  package YAML::Old::Type::undef;
  
  sub yaml_dump {
      my $self = shift;
  }
  
  sub yaml_load {
      my $self = shift;
  }
  
  #-------------------------------------------------------------------------------
  package YAML::Old::Type::glob;
  
  sub yaml_dump {
      my $self = shift;
      my $ynode = YAML::Old::Node->new({}, '!perl/glob:');
      for my $type (qw(PACKAGE NAME SCALAR ARRAY HASH CODE IO)) {
          my $value = *{$_[0]}{$type};
          $value = $$value if $type eq 'SCALAR';
          if (defined $value) {
              if ($type eq 'IO') {
                  my @stats = qw(device inode mode links uid gid rdev size
                                 atime mtime ctime blksize blocks);
                  undef $value;
                  $value->{stat} = YAML::Old::Node->new({});
                  if ($value->{fileno} = fileno(*{$_[0]})) {
                      local $^W;
                      map {$value->{stat}{shift @stats} = $_} stat(*{$_[0]});
                      $value->{tell} = tell(*{$_[0]});
                  }
              }
              $ynode->{$type} = $value;
          }
      }
      return $ynode;
  }
  
  sub yaml_load {
      my $self = shift;
      my ($node, $class, $loader) = @_;
      my ($name, $package);
      if (defined $node->{NAME}) {
          $name = $node->{NAME};
          delete $node->{NAME};
      }
      else {
          $loader->warn('YAML_LOAD_WARN_GLOB_NAME');
          return undef;
      }
      if (defined $node->{PACKAGE}) {
          $package = $node->{PACKAGE};
          delete $node->{PACKAGE};
      }
      else {
          $package = 'main';
      }
      no strict 'refs';
      if (exists $node->{SCALAR}) {
          *{"${package}::$name"} = \$node->{SCALAR};
          delete $node->{SCALAR};
      }
      for my $elem (qw(ARRAY HASH CODE IO)) {
          if (exists $node->{$elem}) {
              if ($elem eq 'IO') {
                  $loader->warn('YAML_LOAD_WARN_GLOB_IO');
                  delete $node->{IO};
                  next;
              }
              *{"${package}::$name"} = $node->{$elem};
              delete $node->{$elem};
          }
      }
      for my $elem (sort keys %$node) {
          $loader->warn('YAML_LOAD_WARN_BAD_GLOB_ELEM', $elem);
      }
      return *{"${package}::$name"};
  }
  
  #-------------------------------------------------------------------------------
  package YAML::Old::Type::code;
  
  my $dummy_warned = 0;
  my $default = '{ "DUMMY" }';
  
  sub yaml_dump {
      my $self = shift;
      my $code;
      my ($dumpflag, $value) = @_;
      my ($class, $type) = YAML::Old::Mo::Object->node_info($value);
      my $tag = "!perl/code";
      $tag .= ":$class" if defined $class;
      if (not $dumpflag) {
          $code = $default;
      }
      else {
          bless $value, "CODE" if $class;
          eval { use B::Deparse };
          return if $@;
          my $deparse = B::Deparse->new();
          eval {
              local $^W = 0;
              $code = $deparse->coderef2text($value);
          };
          if ($@) {
              warn YAML::YAML_DUMP_WARN_DEPARSE_FAILED() if $^W;
              $code = $default;
          }
          bless $value, $class if $class;
          chomp $code;
          $code .= "\n";
      }
      $_[2] = $code;
      YAML::Old::Node->new($_[2], $tag);
  }
  
  sub yaml_load {
      my $self = shift;
      my ($node, $class, $loader) = @_;
      if ($loader->load_code) {
          my $code = eval "package main; sub $node";
          if ($@) {
              $loader->warn('YAML_LOAD_WARN_PARSE_CODE', $@);
              return sub {};
          }
          else {
              CORE::bless $code, $class if $class;
              return $code;
          }
      }
      else {
          return CORE::bless sub {}, $class if $class;
          return sub {};
      }
  }
  
  #-------------------------------------------------------------------------------
  package YAML::Old::Type::ref;
  
  sub yaml_dump {
      my $self = shift;
      YAML::Old::Node->new({(&YAML::VALUE, ${$_[0]})}, '!perl/ref')
  }
  
  sub yaml_load {
      my $self = shift;
      my ($node, $class, $loader) = @_;
      $loader->die('YAML_LOAD_ERR_NO_DEFAULT_VALUE', 'ptr')
        unless exists $node->{&YAML::VALUE};
      return \$node->{&YAML::VALUE};
  }
  
  #-------------------------------------------------------------------------------
  package YAML::Old::Type::regexp;
  
  # XXX Be sure to handle blessed regexps (if possible)
  sub yaml_dump {
      die "YAML::Old::Type::regexp::yaml_dump not currently implemented";
  }
  
  use constant _QR_TYPES => {
      '' => sub { qr{$_[0]} },
      x => sub { qr{$_[0]}x },
      i => sub { qr{$_[0]}i },
      s => sub { qr{$_[0]}s },
      m => sub { qr{$_[0]}m },
      ix => sub { qr{$_[0]}ix },
      sx => sub { qr{$_[0]}sx },
      mx => sub { qr{$_[0]}mx },
      si => sub { qr{$_[0]}si },
      mi => sub { qr{$_[0]}mi },
      ms => sub { qr{$_[0]}sm },
      six => sub { qr{$_[0]}six },
      mix => sub { qr{$_[0]}mix },
      msx => sub { qr{$_[0]}msx },
      msi => sub { qr{$_[0]}msi },
      msix => sub { qr{$_[0]}msix },
  };
  
  sub yaml_load {
      my $self = shift;
      my ($node, $class) = @_;
      return qr{$node} unless $node =~ /^\(\?([\^\-xism]*):(.*)\)\z/s;
      my ($flags, $re) = ($1, $2);
      $flags =~ s/-.*//;
      $flags =~ s/^\^//;
      my $sub = _QR_TYPES->{$flags} || sub { qr{$_[0]} };
      my $qr = &$sub($re);
      bless $qr, $class if length $class;
      return $qr;
  }
  
  1;
YAML_OLD_TYPES

    $main::fatpacked{"YAML/Tag.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_TAG';
  use strict; use warnings;
  package YAML::Tag;
  
  use overload '""' => sub { ${$_[0]} };
  
  sub new {
      my ($class, $self) = @_;
      bless \$self, $class
  }
  
  sub short {
      ${$_[0]}
  }
  
  sub canonical {
      ${$_[0]}
  }
  
  1;
YAML_TAG

    $main::fatpacked{"YAML/Types.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'YAML_TYPES';
  package YAML::Types;
  
  use YAML::Mo;
  use YAML::Node;
  
  # XXX These classes and their APIs could still use some refactoring,
  # but at least they work for now.
  #-------------------------------------------------------------------------------
  package YAML::Type::blessed;
  
  use YAML::Mo; # XXX
  
  sub yaml_dump {
      my $self = shift;
      my ($value) = @_;
      my ($class, $type) = YAML::Mo::Object->node_info($value);
      no strict 'refs';
      my $kind = lc($type) . ':';
      my $tag = ${$class . '::ClassTag'} ||
                "!perl/$kind$class";
      if ($type eq 'REF') {
          YAML::Node->new(
              {(&YAML::VALUE, ${$_[0]})}, $tag
          );
      }
      elsif ($type eq 'SCALAR') {
          $_[1] = $$value;
          YAML::Node->new($_[1], $tag);
      }
      elsif ($type eq 'GLOB') {
          # blessed glob support is minimal, and will not round-trip
          # initial aim: to not cause an error
          return YAML::Type::glob->yaml_dump($value, $tag);
      } else {
          YAML::Node->new($value, $tag);
      }
  }
  
  #-------------------------------------------------------------------------------
  package YAML::Type::undef;
  
  sub yaml_dump {
      my $self = shift;
  }
  
  sub yaml_load {
      my $self = shift;
  }
  
  #-------------------------------------------------------------------------------
  package YAML::Type::glob;
  
  sub yaml_dump {
      my $self = shift;
      # $_[0] remains as the glob
      my $tag = pop @_ if 2==@_;
  
      $tag = '!perl/glob:' unless defined $tag;
      my $ynode = YAML::Node->new({}, $tag);
      for my $type (qw(PACKAGE NAME SCALAR ARRAY HASH CODE IO)) {
          my $value = *{$_[0]}{$type};
          $value = $$value if $type eq 'SCALAR';
          if (defined $value) {
              if ($type eq 'IO') {
                  my @stats = qw(device inode mode links uid gid rdev size
                                 atime mtime ctime blksize blocks);
                  undef $value;
                  $value->{stat} = YAML::Node->new({});
                  if ($value->{fileno} = fileno(*{$_[0]})) {
                      local $^W;
                      map {$value->{stat}{shift @stats} = $_} stat(*{$_[0]});
                      $value->{tell} = tell(*{$_[0]});
                  }
              }
              $ynode->{$type} = $value;
          }
      }
      return $ynode;
  }
  
  sub yaml_load {
      my $self = shift;
      my ($node, $class, $loader) = @_;
      my ($name, $package);
      if (defined $node->{NAME}) {
          $name = $node->{NAME};
          delete $node->{NAME};
      }
      else {
          $loader->warn('YAML_LOAD_WARN_GLOB_NAME');
          return undef;
      }
      if (defined $node->{PACKAGE}) {
          $package = $node->{PACKAGE};
          delete $node->{PACKAGE};
      }
      else {
          $package = 'main';
      }
      no strict 'refs';
      if (exists $node->{SCALAR}) {
          *{"${package}::$name"} = \$node->{SCALAR};
          delete $node->{SCALAR};
      }
      for my $elem (qw(ARRAY HASH CODE IO)) {
          if (exists $node->{$elem}) {
              if ($elem eq 'IO') {
                  $loader->warn('YAML_LOAD_WARN_GLOB_IO');
                  delete $node->{IO};
                  next;
              }
              *{"${package}::$name"} = $node->{$elem};
              delete $node->{$elem};
          }
      }
      for my $elem (sort keys %$node) {
          $loader->warn('YAML_LOAD_WARN_BAD_GLOB_ELEM', $elem);
      }
      return *{"${package}::$name"};
  }
  
  #-------------------------------------------------------------------------------
  package YAML::Type::code;
  
  my $dummy_warned = 0;
  my $default = '{ "DUMMY" }';
  
  sub yaml_dump {
      my $self = shift;
      my $code;
      my ($dumpflag, $value) = @_;
      my ($class, $type) = YAML::Mo::Object->node_info($value);
      my $tag = "!perl/code";
      $tag .= ":$class" if defined $class;
      if (not $dumpflag) {
          $code = $default;
      }
      else {
          bless $value, "CODE" if $class;
          eval { use B::Deparse };
          return if $@;
          my $deparse = B::Deparse->new();
          eval {
              local $^W = 0;
              $code = $deparse->coderef2text($value);
          };
          if ($@) {
              warn YAML::YAML_DUMP_WARN_DEPARSE_FAILED() if $^W;
              $code = $default;
          }
          bless $value, $class if $class;
          chomp $code;
          $code .= "\n";
      }
      $_[2] = $code;
      YAML::Node->new($_[2], $tag);
  }
  
  sub yaml_load {
      my $self = shift;
      my ($node, $class, $loader) = @_;
      if ($loader->load_code) {
          my $code = eval "package main; sub $node";
          if ($@) {
              $loader->warn('YAML_LOAD_WARN_PARSE_CODE', $@);
              return sub {};
          }
          else {
              CORE::bless $code, $class if $class;
              return $code;
          }
      }
      else {
          return CORE::bless sub {}, $class if $class;
          return sub {};
      }
  }
  
  #-------------------------------------------------------------------------------
  package YAML::Type::ref;
  
  sub yaml_dump {
      my $self = shift;
      YAML::Node->new({(&YAML::VALUE, ${$_[0]})}, '!perl/ref')
  }
  
  sub yaml_load {
      my $self = shift;
      my ($node, $class, $loader) = @_;
      $loader->die('YAML_LOAD_ERR_NO_DEFAULT_VALUE', 'ptr')
        unless exists $node->{&YAML::VALUE};
      return \$node->{&YAML::VALUE};
  }
  
  #-------------------------------------------------------------------------------
  package YAML::Type::regexp;
  
  # XXX Be sure to handle blessed regexps (if possible)
  sub yaml_dump {
      die "YAML::Type::regexp::yaml_dump not currently implemented";
  }
  
  use constant _QR_TYPES => {
      '' => sub { qr{$_[0]} },
      x => sub { qr{$_[0]}x },
      i => sub { qr{$_[0]}i },
      s => sub { qr{$_[0]}s },
      m => sub { qr{$_[0]}m },
      ix => sub { qr{$_[0]}ix },
      sx => sub { qr{$_[0]}sx },
      mx => sub { qr{$_[0]}mx },
      si => sub { qr{$_[0]}si },
      mi => sub { qr{$_[0]}mi },
      ms => sub { qr{$_[0]}sm },
      six => sub { qr{$_[0]}six },
      mix => sub { qr{$_[0]}mix },
      msx => sub { qr{$_[0]}msx },
      msi => sub { qr{$_[0]}msi },
      msix => sub { qr{$_[0]}msix },
  };
  
  sub yaml_load {
      my $self = shift;
      my ($node, $class) = @_;
      return qr{$node} unless $node =~ /^\(\?([\^\-xism]*):(.*)\)\z/s;
      my ($flags, $re) = ($1, $2);
      $flags =~ s/-.*//;
      $flags =~ s/^\^//;
      my $sub = _QR_TYPES->{$flags} || sub { qr{$_[0]} };
      my $qr = &$sub($re);
      bless $qr, $class if length $class;
      return $qr;
  }
  
  1;
YAML_TYPES

    $main::fatpacked{"experimental.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'EXPERIMENTAL';
  package experimental;
  $experimental::VERSION = '0.016';
  use strict;
  use warnings;
  use version ();
  
  use feature ();
  use Carp qw/croak carp/;
  
  my %warnings = map { $_ => 1 } grep { /^experimental::/ } keys %warnings::Offsets;
  my %features = map { $_ => 1 } $] > 5.015006 ? keys %feature::feature : do {
  	my @features;
  	if ($] >= 5.010) {
  		push @features, qw/switch say state/;
  		push @features, 'unicode_strings' if $] > 5.011002;
  	}
  	@features;
  };
  
  my %min_version = (
  	array_base      => '5',
  	autoderef       => '5.14.0',
  	bitwise         => '5.22.0',
  	current_sub     => '5.16.0',
  	evalbytes       => '5.16.0',
  	fc              => '5.16.0',
  	lexical_topic   => '5.10.0',
  	lexical_subs    => '5.18.0',
  	postderef       => '5.20.0',
  	postderef_qq    => '5.20.0',
  	refaliasing     => '5.22.0',
  	regex_sets      => '5.18.0',
  	say             => '5.10.0',
  	smartmatch      => '5.10.0',
  	signatures      => '5.20.0',
  	state           => '5.10.0',
  	switch          => '5.10.0',
  	unicode_eval    => '5.16.0',
  	unicode_strings => '5.12.0',
  );
  my %max_version = (
  	lexical_topic   => '5.23.4',
  );
  
  $_ = version->new($_) for values %min_version;
  $_ = version->new($_) for values %max_version;
  
  my %additional = (
  	postderef  => ['postderef_qq'],
  	switch     => ['smartmatch'],
  );
  
  sub _enable {
  	my $pragma = shift;
  	if ($warnings{"experimental::$pragma"}) {
  		warnings->unimport("experimental::$pragma");
  		feature->import($pragma) if exists $features{$pragma};
  		_enable(@{ $additional{$pragma} }) if $additional{$pragma};
  	}
  	elsif ($features{$pragma}) {
  		feature->import($pragma);
  		_enable(@{ $additional{$pragma} }) if $additional{$pragma};
  	}
  	elsif (not exists $min_version{$pragma}) {
  		croak "Can't enable unknown feature $pragma";
  	}
  	elsif ($] < $min_version{$pragma}) {
  		my $stable = $min_version{$pragma};
  		if ($stable->{version}[1] % 2) {
  			$stable = version->new(
  				"5.".($stable->{version}[1]+1).'.0'
  			);
  		}
  		croak "Need perl $stable or later for feature $pragma";
  	}
  	elsif ($] >= ($max_version{$pragma} || 7)) {
  		croak "Experimental feature $pragma has been removed from perl in version $max_version{$pragma}";
  	}
  }
  
  sub import {
  	my ($self, @pragmas) = @_;
  
  	for my $pragma (@pragmas) {
  		_enable($pragma);
  	}
  	return;
  }
  
  sub _disable {
  	my $pragma = shift;
  	if ($warnings{"experimental::$pragma"}) {
  		warnings->import("experimental::$pragma");
  		feature->unimport($pragma) if exists $features{$pragma};
  		_disable(@{ $additional{$pragma} }) if $additional{$pragma};
  	}
  	elsif ($features{$pragma}) {
  		feature->unimport($pragma);
  		_disable(@{ $additional{$pragma} }) if $additional{$pragma};
  	}
  	elsif (not exists $min_version{$pragma}) {
  		carp "Can't disable unknown feature $pragma, ignoring";
  	}
  }
  
  sub unimport {
  	my ($self, @pragmas) = @_;
  
  	for my $pragma (@pragmas) {
  		_disable($pragma);
  	}
  	return;
  }
  
  1;
  
  #ABSTRACT: Experimental features made easy
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  experimental - Experimental features made easy
  
  =head1 VERSION
  
  version 0.016
  
  =head1 SYNOPSIS
  
   use experimental 'lexical_subs', 'smartmatch';
   my sub foo { $_[0] ~~ 1 }
  
  =head1 DESCRIPTION
  
  This pragma provides an easy and convenient way to enable or disable
  experimental features.
  
  Every version of perl has some number of features present but considered
  "experimental."  For much of the life of Perl 5, this was only a designation
  found in the documentation.  Starting in Perl v5.10.0, and more aggressively in
  v5.18.0, experimental features were placed behind pragmata used to enable the
  feature and disable associated warnings.
  
  The C<experimental> pragma exists to combine the required incantations into a
  single interface stable across releases of perl.  For every experimental
  feature, this should enable the feature and silence warnings for the enclosing
  lexical scope:
  
    use experimental 'feature-name';
  
  To disable the feature and, if applicable, re-enable any warnings, use:
  
    no experimental 'feature-name';
  
  The supported features, documented further below, are:
  
  	array_base    - allow the use of $[ to change the starting index of @array
  	autoderef     - allow push, each, keys, and other built-ins on references
  	lexical_topic - allow the use of lexical $_ via "my $_"
  	postderef     - allow the use of postfix dereferencing expressions, including
  	                in interpolating strings
  	refaliasing   - allow aliasing via \$x = \$y
  	regex_sets    - allow extended bracketed character classes in regexps
  	signatures    - allow subroutine signatures (for named arguments)
  	smartmatch    - allow the use of ~~
  	switch        - allow the use of ~~, given, and when
  
  =head2 Ordering matters
  
  Using this pragma to 'enable an experimental feature' is another way of saying
  that this pragma will disable the warnings which would result from using that
  feature.  Therefore, the order in which pragmas are applied is important.  In
  particular, you probably want to enable experimental features I<after> you
  enable warnings:
  
    use warnings;
    use experimental 'smartmatch';
  
  You also need to take care with modules that enable warnings for you.  A common
  example being Moose.  In this example, warnings for the 'smartmatch' feature are
  first turned on by the warnings pragma, off by the experimental pragma and back
  on again by the Moose module (fix is to switch the last two lines):
  
    use warnings;
    use experimental 'smartmatch';
    use Moose;
  
  =head2 Disclaimer
  
  Because of the nature of the features it enables, forward compatibility can not
  be guaranteed in any way.
  
  =head1 AUTHOR
  
  Leon Timmermans <leont@cpan.org>
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2013 by Leon Timmermans.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
EXPERIMENTAL

    $main::fatpacked{"namespace/autoclean.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'NAMESPACE_AUTOCLEAN';
  use strict;
  use warnings;
  
  package namespace::autoclean; # git description: 0.27-4-g47c7088
  # ABSTRACT: Keep imports out of your namespace
  # KEYWORDS: namespaces clean dirty imports exports subroutines methods development
  
  our $VERSION = '0.28';
  
  use B::Hooks::EndOfScope 0.12;
  use List::Util qw( first );
  use namespace::clean 0.20;
  
  #pod =head1 SYNOPSIS
  #pod
  #pod     package Foo;
  #pod     use namespace::autoclean;
  #pod     use Some::Package qw/imported_function/;
  #pod
  #pod     sub bar { imported_function('stuff') }
  #pod
  #pod     # later on:
  #pod     Foo->bar;               # works
  #pod     Foo->imported_function; # will fail. imported_function got cleaned after compilation
  #pod
  #pod =head1 DESCRIPTION
  #pod
  #pod When you import a function into a Perl package, it will naturally also be
  #pod available as a method.
  #pod
  #pod The C<namespace::autoclean> pragma will remove all imported symbols at the end
  #pod of the current package's compile cycle. Functions called in the package itself
  #pod will still be bound by their name, but they won't show up as methods on your
  #pod class or instances.
  #pod
  #pod This module is very similar to L<namespace::clean|namespace::clean>, except it
  #pod will clean all imported functions, no matter if you imported them before or
  #pod after you C<use>d the pragma. It will also not touch anything that looks like a
  #pod method.
  #pod
  #pod If you're writing an exporter and you want to clean up after yourself (and your
  #pod peers), you can use the C<-cleanee> switch to specify what package to clean:
  #pod
  #pod   package My::MooseX::namespace::autoclean;
  #pod   use strict;
  #pod
  #pod   use namespace::autoclean (); # no cleanup, just load
  #pod
  #pod   sub import {
  #pod       namespace::autoclean->import(
  #pod         -cleanee => scalar(caller),
  #pod       );
  #pod   }
  #pod
  #pod =head1 WHAT IS AND ISN'T CLEANED
  #pod
  #pod C<namespace::autoclean> will leave behind anything that it deems a method.  For
  #pod L<Moose> classes, this the based on the C<get_method_list> method
  #pod on from the L<Class::MOP::Class|metaclass>.  For non-Moose classes, anything
  #pod defined within the package will be identified as a method.  This should match
  #pod Moose's definition of a method.  Additionally, the magic subs installed by
  #pod L<overload> will not be cleaned.
  #pod
  #pod =head1 PARAMETERS
  #pod
  #pod =head2 -also => [ ITEM | REGEX | SUB, .. ]
  #pod
  #pod =head2 -also => ITEM
  #pod
  #pod =head2 -also => REGEX
  #pod
  #pod =head2 -also => SUB
  #pod
  #pod Sometimes you don't want to clean imports only, but also helper functions
  #pod you're using in your methods. The C<-also> switch can be used to declare a list
  #pod of functions that should be removed additional to any imports:
  #pod
  #pod     use namespace::autoclean -also => ['some_function', 'another_function'];
  #pod
  #pod If only one function needs to be additionally cleaned the C<-also> switch also
  #pod accepts a plain string:
  #pod
  #pod     use namespace::autoclean -also => 'some_function';
  #pod
  #pod In some situations, you may wish for a more I<powerful> cleaning solution.
  #pod
  #pod The C<-also> switch can take a Regex or a CodeRef to match against local
  #pod function names to clean.
  #pod
  #pod     use namespace::autoclean -also => qr/^_/
  #pod
  #pod     use namespace::autoclean -also => sub { $_ =~ m{^_} };
  #pod
  #pod     use namespace::autoclean -also => [qr/^_/ , qr/^hidden_/ ];
  #pod
  #pod     use namespace::autoclean -also => [sub { $_ =~ m/^_/ or $_ =~ m/^hidden/ }, sub { uc($_) == $_ } ];
  #pod
  #pod =head2 -except => [ ITEM | REGEX | SUB, .. ]
  #pod
  #pod =head2 -except => ITEM
  #pod
  #pod =head2 -except => REGEX
  #pod
  #pod =head2 -except => SUB
  #pod
  #pod This takes exactly the same options as C<-also> except that anything this
  #pod matches will I<not> be cleaned.
  #pod
  #pod =head1 CAVEATS
  #pod
  #pod When used with L<Moo> classes, the heuristic used to check for methods won't
  #pod work correctly for methods from roles consumed at compile time.
  #pod
  #pod   package My::Class;
  #pod   use Moo;
  #pod   use namespace::autoclean;
  #pod
  #pod   # Bad, any consumed methods will be cleaned
  #pod   BEGIN { with 'Some::Role' }
  #pod
  #pod   # Good, methods from role will be maintained
  #pod   with 'Some::Role';
  #pod
  #pod Additionally, method detection may not work properly in L<Mouse> classes in
  #pod perls earlier than 5.10.
  #pod
  #pod =head1 SEE ALSO
  #pod
  #pod =for :list
  #pod * L<namespace::clean>
  #pod * L<B::Hooks::EndOfScope>
  #pod * L<namespace::sweep>
  #pod * L<Sub::Exporter::ForMethods>
  #pod * L<Sub::Name>
  #pod * L<Sub::Install>
  #pod * L<Test::CleanNamespaces>
  #pod * L<Dist::Zilla::Plugin::Test::CleanNamespaces>
  #pod
  #pod =cut
  
  sub import {
      my ($class, %args) = @_;
  
      my $subcast = sub {
          my $i = shift;
          return $i if ref $i eq 'CODE';
          return sub { $_ =~ $i } if ref $i eq 'Regexp';
          return sub { $_ eq $i };
      };
  
      my $runtest = sub {
          my ($code, $method_name) = @_;
          local $_ = $method_name;
          return $code->();
      };
  
      my $cleanee = exists $args{-cleanee} ? $args{-cleanee} : scalar caller;
  
      my @also = map { $subcast->($_) } (
          exists $args{-also}
          ? (ref $args{-also} eq 'ARRAY' ? @{ $args{-also} } : $args{-also})
          : ()
      );
  
      my @except = map { $subcast->($_) } (
          exists $args{-except}
          ? (ref $args{-except} eq 'ARRAY' ? @{ $args{-except} } : $args{-except})
          : ()
      );
  
      on_scope_end {
          my $subs = namespace::clean->get_functions($cleanee);
          my $method_check = _method_check($cleanee);
  
          my @clean = grep {
            my $method = $_;
            ! first { $runtest->($_, $method) } @except
              and ( !$method_check->($method)
                or first { $runtest->($_, $method) } @also)
          } keys %$subs;
  
          namespace::clean->clean_subroutines($cleanee, @clean);
      };
  }
  
  sub _method_check {
      my $package = shift;
      if (
        (defined &Class::MOP::class_of and my $meta = Class::MOP::class_of($package))
      ) {
          my %methods = map { $_ => 1 } $meta->get_method_list;
          $methods{meta} = 1
            if $meta->isa('Moose::Meta::Role') && Moose->VERSION < 0.90;
          return sub { $_[0] =~ /^\(/ || $methods{$_[0]} };
      }
      else {
          my $does = $package->can('does') ? 'does'
                   : $package->can('DOES') ? 'DOES'
                   : undef;
          require Sub::Identify;
          return sub {
              return 1 if $_[0] =~ /^\(/;
              my $coderef = do { no strict 'refs'; \&{ $package . '::' . $_[0] } };
              my $code_stash = Sub::Identify::stash_name($coderef);
              return 1 if $code_stash eq $package;
              return 1 if $code_stash eq 'constant';
              # TODO: consider if we really need this eval
              return 1 if $does && eval { $package->$does($code_stash) };
              return 0;
          };
      }
  }
  
  1;
  
  __END__
  
  =pod
  
  =encoding UTF-8
  
  =head1 NAME
  
  namespace::autoclean - Keep imports out of your namespace
  
  =head1 VERSION
  
  version 0.28
  
  =head1 SYNOPSIS
  
      package Foo;
      use namespace::autoclean;
      use Some::Package qw/imported_function/;
  
      sub bar { imported_function('stuff') }
  
      # later on:
      Foo->bar;               # works
      Foo->imported_function; # will fail. imported_function got cleaned after compilation
  
  =head1 DESCRIPTION
  
  When you import a function into a Perl package, it will naturally also be
  available as a method.
  
  The C<namespace::autoclean> pragma will remove all imported symbols at the end
  of the current package's compile cycle. Functions called in the package itself
  will still be bound by their name, but they won't show up as methods on your
  class or instances.
  
  This module is very similar to L<namespace::clean|namespace::clean>, except it
  will clean all imported functions, no matter if you imported them before or
  after you C<use>d the pragma. It will also not touch anything that looks like a
  method.
  
  If you're writing an exporter and you want to clean up after yourself (and your
  peers), you can use the C<-cleanee> switch to specify what package to clean:
  
    package My::MooseX::namespace::autoclean;
    use strict;
  
    use namespace::autoclean (); # no cleanup, just load
  
    sub import {
        namespace::autoclean->import(
          -cleanee => scalar(caller),
        );
    }
  
  =head1 WHAT IS AND ISN'T CLEANED
  
  C<namespace::autoclean> will leave behind anything that it deems a method.  For
  L<Moose> classes, this the based on the C<get_method_list> method
  on from the L<Class::MOP::Class|metaclass>.  For non-Moose classes, anything
  defined within the package will be identified as a method.  This should match
  Moose's definition of a method.  Additionally, the magic subs installed by
  L<overload> will not be cleaned.
  
  =head1 PARAMETERS
  
  =head2 -also => [ ITEM | REGEX | SUB, .. ]
  
  =head2 -also => ITEM
  
  =head2 -also => REGEX
  
  =head2 -also => SUB
  
  Sometimes you don't want to clean imports only, but also helper functions
  you're using in your methods. The C<-also> switch can be used to declare a list
  of functions that should be removed additional to any imports:
  
      use namespace::autoclean -also => ['some_function', 'another_function'];
  
  If only one function needs to be additionally cleaned the C<-also> switch also
  accepts a plain string:
  
      use namespace::autoclean -also => 'some_function';
  
  In some situations, you may wish for a more I<powerful> cleaning solution.
  
  The C<-also> switch can take a Regex or a CodeRef to match against local
  function names to clean.
  
      use namespace::autoclean -also => qr/^_/
  
      use namespace::autoclean -also => sub { $_ =~ m{^_} };
  
      use namespace::autoclean -also => [qr/^_/ , qr/^hidden_/ ];
  
      use namespace::autoclean -also => [sub { $_ =~ m/^_/ or $_ =~ m/^hidden/ }, sub { uc($_) == $_ } ];
  
  =head2 -except => [ ITEM | REGEX | SUB, .. ]
  
  =head2 -except => ITEM
  
  =head2 -except => REGEX
  
  =head2 -except => SUB
  
  This takes exactly the same options as C<-also> except that anything this
  matches will I<not> be cleaned.
  
  =head1 CAVEATS
  
  When used with L<Moo> classes, the heuristic used to check for methods won't
  work correctly for methods from roles consumed at compile time.
  
    package My::Class;
    use Moo;
    use namespace::autoclean;
  
    # Bad, any consumed methods will be cleaned
    BEGIN { with 'Some::Role' }
  
    # Good, methods from role will be maintained
    with 'Some::Role';
  
  Additionally, method detection may not work properly in L<Mouse> classes in
  perls earlier than 5.10.
  
  =head1 SEE ALSO
  
  =over 4
  
  =item *
  
  L<namespace::clean>
  
  =item *
  
  L<B::Hooks::EndOfScope>
  
  =item *
  
  L<namespace::sweep>
  
  =item *
  
  L<Sub::Exporter::ForMethods>
  
  =item *
  
  L<Sub::Name>
  
  =item *
  
  L<Sub::Install>
  
  =item *
  
  L<Test::CleanNamespaces>
  
  =item *
  
  L<Dist::Zilla::Plugin::Test::CleanNamespaces>
  
  =back
  
  =head1 SUPPORT
  
  Bugs may be submitted through L<the RT bug tracker|https://rt.cpan.org/Public/Dist/Display.html?Name=namespace-autoclean>
  (or L<bug-namespace-autoclean@rt.cpan.org|mailto:bug-namespace-autoclean@rt.cpan.org>).
  
  There is also a mailing list available for users of this distribution, at
  L<http://lists.perl.org/list/moose.html>.
  
  There is also an irc channel available for users of this distribution, at
  irc://irc.perl.org/#moose.
  
  =head1 AUTHOR
  
  Florian Ragwitz <rafl@debian.org>
  
  =head1 CONTRIBUTORS
  
  =for stopwords Karen Etheridge Graham Knop Dave Rolsky Kent Fredric Tomas Doran Shawn M Moore Felix Ostmann Chris Prather Andrew Rodland
  
  =over 4
  
  =item *
  
  Karen Etheridge <ether@cpan.org>
  
  =item *
  
  Graham Knop <haarg@haarg.org>
  
  =item *
  
  Dave Rolsky <autarch@urth.org>
  
  =item *
  
  Kent Fredric <kentfredric@gmail.com>
  
  =item *
  
  Tomas Doran <bobtfish@bobtfish.net>
  
  =item *
  
  Shawn M Moore <sartak@gmail.com>
  
  =item *
  
  Felix Ostmann <sadrak@sadrak-laptop.(none)>
  
  =item *
  
  Chris Prather <cprather@hdpublishing.com>
  
  =item *
  
  Andrew Rodland <andrew@hbslabs.com>
  
  =back
  
  =head1 COPYRIGHT AND LICENCE
  
  This software is copyright (c) 2009 by Florian Ragwitz.
  
  This is free software; you can redistribute it and/or modify it under
  the same terms as the Perl 5 programming language system itself.
  
  =cut
NAMESPACE_AUTOCLEAN

    $main::fatpacked{"namespace/clean.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'NAMESPACE_CLEAN';
  package namespace::clean;
  
  use warnings;
  use strict;
  
  our $VERSION = '0.27';
  $VERSION = eval $VERSION if $VERSION =~ /_/; # numify for warning-free dev releases
  
  our $STORAGE_VAR = '__NAMESPACE_CLEAN_STORAGE';
  
  use B::Hooks::EndOfScope 'on_scope_end';
  
  # FIXME This is a crock of shit, needs to go away
  # currently here to work around https://rt.cpan.org/Ticket/Display.html?id=74151
  # kill with fire when PS::XS is *finally* fixed
  BEGIN {
    my $provider;
  
    if ( "$]" < 5.008007 ) {
      require Package::Stash::PP;
      $provider = 'Package::Stash::PP';
    }
    else {
      require Package::Stash;
      $provider = 'Package::Stash';
    }
    eval <<"EOS" or die $@;
  
  sub stash_for (\$) {
    $provider->new(\$_[0]);
  }
  
  1;
  
  EOS
  }
  
  use namespace::clean::_Util qw( DEBUGGER_NEEDS_CV_RENAME DEBUGGER_NEEDS_CV_PIVOT );
  
  # Built-in debugger CV-retrieval fixups necessary before perl 5.15.5:
  # since we are deleting the glob where the subroutine was originally
  # defined, the assumptions below no longer hold.
  #
  # In 5.8.9 ~ 5.13.5 (inclusive) the debugger assumes that a CV can
  # always be found under sub_fullname($sub)
  # Workaround: use sub naming to properly name the sub hidden in the package's
  # deleted-stash
  #
  # In the rest of the range ( ... ~ 5.8.8 and 5.13.6 ~ 5.15.4 ) the debugger
  # assumes the name of the glob passed to entersub can be used to find the CV
  # Workaround: realias the original glob to the deleted-stash slot
  #
  # While the errors manifest themselves inside perl5db.pl, they are caused by
  # problems inside the interpreter.  If enabled ($^P & 0x01) and existent,
  # the DB::sub sub will be called by the interpreter for any sub call rather
  # that call the sub directly.  It is provided the real sub to call in $DB::sub,
  # but the value given has the issues described above.  We only have to enable
  # the workaround if DB::sub will be used.
  #
  # Can not tie constants to the current value of $^P directly,
  # as the debugger can be enabled during runtime (kinda dubious)
  #
  
  my $RemoveSubs = sub {
      my $cleanee = shift;
      my $store   = shift;
      my $cleanee_stash = stash_for($cleanee);
      my $deleted_stash;
  
    SYMBOL:
      for my $f (@_) {
  
          # ignore already removed symbols
          next SYMBOL if $store->{exclude}{ $f };
  
          my $sub = $cleanee_stash->get_symbol("&$f")
            or next SYMBOL;
  
          my $need_debugger_fixup =
            ( DEBUGGER_NEEDS_CV_RENAME or DEBUGGER_NEEDS_CV_PIVOT )
              &&
            $^P & 0x01
              &&
            defined &DB::sub
              &&
            ref(my $globref = \$cleanee_stash->namespace->{$f}) eq 'GLOB'
              &&
           ( $deleted_stash ||= stash_for("namespace::clean::deleted::$cleanee") )
          ;
  
          # convince the Perl debugger to work
          # see the comment on top
          if ( DEBUGGER_NEEDS_CV_RENAME and $need_debugger_fixup ) {
            #
            # Note - both get_subname and set_subname are only compiled when CV_RENAME
            # is true ( the 5.8.9 ~ 5.12 range ). On other perls this entire block is
            # constant folded away, and so are the definitions in ::_Util
            #
            # Do not be surprised that they are missing without DEBUGGER_NEEDS_CV_RENAME
            #
            namespace::clean::_Util::get_subname( $sub ) eq  ( $cleanee_stash->name . "::$f" )
              and
            $deleted_stash->add_symbol(
              "&$f",
              namespace::clean::_Util::set_subname( $deleted_stash->name . "::$f", $sub ),
            );
          }
          elsif ( DEBUGGER_NEEDS_CV_PIVOT and $need_debugger_fixup ) {
            $deleted_stash->add_symbol("&$f", $sub);
          }
  
          my @symbols = map {
              my $name = $_ . $f;
              my $def = $cleanee_stash->get_symbol($name);
              defined($def) ? [$name, $def] : ()
          } '$', '@', '%', '';
  
          $cleanee_stash->remove_glob($f);
  
          # if this perl needs no renaming trick we need to
          # rename the original glob after the fact
          DEBUGGER_NEEDS_CV_PIVOT
            and
          $need_debugger_fixup
            and
          *$globref = $deleted_stash->namespace->{$f};
  
          $cleanee_stash->add_symbol(@$_) for @symbols;
      }
  };
  
  sub clean_subroutines {
      my ($nc, $cleanee, @subs) = @_;
      $RemoveSubs->($cleanee, {}, @subs);
  }
  
  sub import {
      my ($pragma, @args) = @_;
  
      my (%args, $is_explicit);
  
    ARG:
      while (@args) {
  
          if ($args[0] =~ /^\-/) {
              my $key = shift @args;
              my $value = shift @args;
              $args{ $key } = $value;
          }
          else {
              $is_explicit++;
              last ARG;
          }
      }
  
      my $cleanee = exists $args{ -cleanee } ? $args{ -cleanee } : scalar caller;
      if ($is_explicit) {
          on_scope_end {
              $RemoveSubs->($cleanee, {}, @args);
          };
      }
      else {
  
          # calling class, all current functions and our storage
          my $functions = $pragma->get_functions($cleanee);
          my $store     = $pragma->get_class_store($cleanee);
          my $stash     = stash_for($cleanee);
  
          # except parameter can be array ref or single value
          my %except = map {( $_ => 1 )} (
              $args{ -except }
              ? ( ref $args{ -except } eq 'ARRAY' ? @{ $args{ -except } } : $args{ -except } )
              : ()
          );
  
          # register symbols for removal, if they have a CODE entry
          for my $f (keys %$functions) {
              next if     $except{ $f };
              next unless $stash->has_symbol("&$f");
              $store->{remove}{ $f } = 1;
          }
  
          on_scope_end {
              $RemoveSubs->($cleanee, $store, keys %{ $store->{remove} });
          };
  
          return 1;
      }
  }
  
  sub unimport {
      my ($pragma, %args) = @_;
  
      # the calling class, the current functions and our storage
      my $cleanee   = exists $args{ -cleanee } ? $args{ -cleanee } : scalar caller;
      my $functions = $pragma->get_functions($cleanee);
      my $store     = $pragma->get_class_store($cleanee);
  
      # register all unknown previous functions as excluded
      for my $f (keys %$functions) {
          next if $store->{remove}{ $f }
               or $store->{exclude}{ $f };
          $store->{exclude}{ $f } = 1;
      }
  
      return 1;
  }
  
  sub get_class_store {
      my ($pragma, $class) = @_;
      my $stash = stash_for($class);
      my $var = "%$STORAGE_VAR";
      $stash->add_symbol($var, {})
          unless $stash->has_symbol($var);
      return $stash->get_symbol($var);
  }
  
  sub get_functions {
      my ($pragma, $class) = @_;
  
      my $stash = stash_for($class);
      return {
          map { $_ => $stash->get_symbol("&$_") }
              $stash->list_all_symbols('CODE')
      };
  }
  
  'Danger! Laws of Thermodynamics may not apply.'
  
  __END__
  
  =head1 NAME
  
  namespace::clean - Keep imports and functions out of your namespace
  
  =head1 SYNOPSIS
  
    package Foo;
    use warnings;
    use strict;
  
    use Carp qw(croak);   # 'croak' will be removed
  
    sub bar { 23 }        # 'bar' will be removed
  
    # remove all previously defined functions
    use namespace::clean;
  
    sub baz { bar() }     # 'baz' still defined, 'bar' still bound
  
    # begin to collection function names from here again
    no namespace::clean;
  
    sub quux { baz() }    # 'quux' will be removed
  
    # remove all functions defined after the 'no' unimport
    use namespace::clean;
  
    # Will print: 'No', 'No', 'Yes' and 'No'
    print +(__PACKAGE__->can('croak') ? 'Yes' : 'No'), "\n";
    print +(__PACKAGE__->can('bar')   ? 'Yes' : 'No'), "\n";
    print +(__PACKAGE__->can('baz')   ? 'Yes' : 'No'), "\n";
    print +(__PACKAGE__->can('quux')  ? 'Yes' : 'No'), "\n";
  
    1;
  
  =head1 DESCRIPTION
  
  =head2 Keeping packages clean
  
  When you define a function, or import one, into a Perl package, it will
  naturally also be available as a method. This does not per se cause
  problems, but it can complicate subclassing and, for example, plugin
  classes that are included via multiple inheritance by loading them as
  base classes.
  
  The C<namespace::clean> pragma will remove all previously declared or
  imported symbols at the end of the current package's compile cycle.
  Functions called in the package itself will still be bound by their
  name, but they won't show up as methods on your class or instances.
  
  By unimporting via C<no> you can tell C<namespace::clean> to start
  collecting functions for the next C<use namespace::clean;> specification.
  
  You can use the C<-except> flag to tell C<namespace::clean> that you
  don't want it to remove a certain function or method. A common use would
  be a module exporting an C<import> method along with some functions:
  
    use ModuleExportingImport;
    use namespace::clean -except => [qw( import )];
  
  If you just want to C<-except> a single sub, you can pass it directly.
  For more than one value you have to use an array reference.
  
  =head3 Late binding caveat
  
  Note that the L<technique used by this module|/IMPLEMENTATION DETAILS> relies
  on perl having resolved all names to actual code references during the
  compilation of a scope. While this is almost always what the interpreter does,
  there are some exceptions, notably the L<sort SUBNAME|perlfunc/sort> style of
  the C<sort> built-in invocation. The following example will not work, because
  C<sort> does not try to resolve the function name to an actual code reference
  until B<runtime>.
  
   use MyApp::Utils 'my_sorter';
   use namespace::clean;
  
   my @sorted = sort my_sorter @list;
  
  You need to work around this by forcing a compile-time resolution like so:
  
   use MyApp::Utils 'my_sorter';
   use namespace::clean;
  
   my $my_sorter_cref = \&my_sorter;
  
   my @sorted = sort $my_sorter_cref @list;
  
  =head2 Explicitly removing functions when your scope is compiled
  
  It is also possible to explicitly tell C<namespace::clean> what packages
  to remove when the surrounding scope has finished compiling. Here is an
  example:
  
    package Foo;
    use strict;
  
    # blessed NOT available
  
    sub my_class {
        use Scalar::Util qw( blessed );
        use namespace::clean qw( blessed );
  
        # blessed available
        return blessed shift;
    }
  
    # blessed NOT available
  
  =head2 Moose
  
  When using C<namespace::clean> together with L<Moose> you want to keep
  the installed C<meta> method. So your classes should look like:
  
    package Foo;
    use Moose;
    use namespace::clean -except => 'meta';
    ...
  
  Same goes for L<Moose::Role>.
  
  =head2 Cleaning other packages
  
  You can tell C<namespace::clean> that you want to clean up another package
  instead of the one importing. To do this you have to pass in the C<-cleanee>
  option like this:
  
    package My::MooseX::namespace::clean;
    use strict;
  
    use namespace::clean (); # no cleanup, just load
  
    sub import {
        namespace::clean->import(
          -cleanee => scalar(caller),
          -except  => 'meta',
        );
    }
  
  If you don't care about C<namespace::clean>s discover-and-C<-except> logic, and
  just want to remove subroutines, try L</clean_subroutines>.
  
  =head1 METHODS
  
  =head2 clean_subroutines
  
  This exposes the actual subroutine-removal logic.
  
    namespace::clean->clean_subroutines($cleanee, qw( subA subB ));
  
  will remove C<subA> and C<subB> from C<$cleanee>. Note that this will remove the
  subroutines B<immediately> and not wait for scope end. If you want to have this
  effect at a specific time (e.g. C<namespace::clean> acts on scope compile end)
  it is your responsibility to make sure it runs at that time.
  
  =head2 import
  
  Makes a snapshot of the current defined functions and installs a
  L<B::Hooks::EndOfScope> hook in the current scope to invoke the cleanups.
  
  
  =head2 unimport
  
  This method will be called when you do a
  
    no namespace::clean;
  
  It will start a new section of code that defines functions to clean up.
  
  =head2 get_class_store
  
  This returns a reference to a hash in a passed package containing
  information about function names included and excluded from removal.
  
  =head2 get_functions
  
  Takes a class as argument and returns all currently defined functions
  in it as a hash reference with the function name as key and a typeglob
  reference to the symbol as value.
  
  =head1 IMPLEMENTATION DETAILS
  
  This module works through the effect that a
  
    delete $SomePackage::{foo};
  
  will remove the C<foo> symbol from C<$SomePackage> for run time lookups
  (e.g., method calls) but will leave the entry alive to be called by
  already resolved names in the package itself. C<namespace::clean> will
  restore and therefor in effect keep all glob slots that aren't C<CODE>.
  
  A test file has been added to the perl core to ensure that this behaviour
  will be stable in future releases.
  
  Just for completeness sake, if you want to remove the symbol completely,
  use C<undef> instead.
  
  =head1 SEE ALSO
  
  L<B::Hooks::EndOfScope>
  
  =head1 THANKS
  
  Many thanks to Matt S Trout for the inspiration on the whole idea.
  
  =head1 AUTHORS
  
  =over
  
  =item *
  
  Robert 'phaylon' Sedlacek <rs@474.at>
  
  =item *
  
  Florian Ragwitz <rafl@debian.org>
  
  =item *
  
  Jesse Luehrs <doy@tozt.net>
  
  =item *
  
  Peter Rabbitson <ribasushi@cpan.org>
  
  =item *
  
  Father Chrysostomos <sprout@cpan.org>
  
  =back
  
  =head1 COPYRIGHT AND LICENSE
  
  This software is copyright (c) 2011 by L</AUTHORS>
  
  This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
NAMESPACE_CLEAN

    $main::fatpacked{"oo.pm"} = '  #line '.(1+__LINE__).' "'.__FILE__."\"\n".<<'OO';
  package oo;
  
  use Moo::_strictures;
  use Moo::_Utils qw(_load_module);
  
  sub moo {
    print <<'EOMOO';
   ______
  < Moo! >
   ------
          \   ^__^
           \  (oo)\_______
              (__)\       )\/\
                  ||----w |
                  ||     ||
  EOMOO
    exit 0;
  }
  
  BEGIN {
      my $package;
      sub import {
          moo() if $0 eq '-';
          $package = $_[1] || 'Class';
          if ($package =~ /^\+/) {
              $package =~ s/^\+//;
              _load_module($package);
          }
      }
      use Filter::Simple sub { s/^/package $package;\nuse Moo;\n/; }
  }
  
  1;
  __END__
  
  =head1 NAME
  
  oo - syntactic sugar for Moo oneliners
  
  =head1 SYNOPSIS
  
    perl -Moo=Foo -e 'has bar => ( is => q[ro], default => q[baz] ); print Foo->new->bar'
  
    # loads an existing class and re-"opens" the package definition
    perl -Moo=+My::Class -e 'print __PACKAGE__->new->bar'
  
  =head1 DESCRIPTION
  
  oo.pm is a simple source filter that adds C<package $name; use Moo;> to the
  beginning of your script, intended for use on the command line via the -M
  option.
  
  =head1 SUPPORT
  
  See L<Moo> for support and contact information.
  
  =head1 AUTHORS
  
  See L<Moo> for authors.
  
  =head1 COPYRIGHT AND LICENSE
  
  See L<Moo> for the copyright and license.
  
  =cut
OO

    s/^\ \ //mg for values %main::fatpacked;
    my $class = 'FatPacked::'.(0+\%main::fatpacked);
    unless (defined &{"${class}::INC"}) {
        if ($] < 5.008) {
            *{"${class}::INC"} = sub {
                if (my $fat = $_[0]{$_[1]}) {
                    return sub {
                        return 0 unless length $fat;
                        $fat =~ s/^([^\n]*\n?)//;
                        $_ = $1;
                        return 1;
                    };
                }
                return;
            };
        } else {
            *{"${class}::INC"} = sub {
                if (my $fat = $_[0]{$_[1]}) {
                    open my $fh, '<', \$fat
                        or die "FatPacker error loading $_[1] (could be a perl installation issue?)";
                    return $fh;
                }
                return;
            };
        }
    }
    my $hook = bless(\%main::fatpacked, $class);
    unshift @INC, $hook unless grep {ref($_) && "$_" eq "$hook"} @INC;
}
# END OF FATPACK CODE


our $DATE = '2017-05-16'; # DATE
our $DIST = 'App-IndonesianBankingUtils'; # DIST
our $VERSION = '0.09'; # VERSION

use 5.010;
use strict;
use warnings;
use Log::Any::IfLOG '$log';

our %SPEC;

# we have to use this temporarily for now, this is not secure, but well ...
if (!defined($ENV{PERL_LWP_SSL_VERIFY_HOSTNAME})) {
    $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0;
}

$SPEC{download_mandiri} = {
    v => 1.1,
    summary => 'Download Mandiri statements',
    args => {
        username  => {schema=>'str*', req=>1},
        password  => {schema=>'str*', req=>1},
        account   => {schema=>'str*'},
        data_dir  => {schema=>'str*'},
        log_dir   => {schema=>'str*'},
        save_dir  => {schema=>'str*'},
        mode      => {
            summary=>'Passed to Finance::Bank::ID::Mandiri constructor',
            schema=>'str*',
            default=>'',
        },
        days      => {schema=>'int*', default=>31},
    },
};

sub download_mandiri {
    require File::HomeDir;

    my %args = @_;

    my $data_dir = $args{data_dir} // File::HomeDir->my_home . "/mandiri";
    my $log_dir  = $args{log_dir}  // File::HomeDir->my_home . "/mandiri/logs";
    my $save_dir = $args{save_dir} // File::HomeDir->my_home . "/mandiri/logs/save";

    local $ENV{SCREEN_LOG_LEVEL} = 'debug'
        if (-t STDOUT) && !$ENV{SCREEN_LOG_LEVEL};
    require Log::Any::App;
    Log::Any::App::init([
        -category_level => {Dumps=>'off'},
        -file           => {
            path           => "$log_dir/main.log",
        },
        -dir            => {
            path           => "$log_dir/dumps",
            level          => 'off',
            # currently we always dump, Log::Any::App > 0.23 will support
            # specifying sub { ... } to refer to general level
            category_level => {Dumps => 'trace'},
        },
    ]);

    require File::Path;
    File::Path::mkpath($data_dir) unless -d $data_dir;
    die "Can't create data_dir `$data_dir'" unless -d $data_dir;

    $log->info("Start session");

    require Finance::Bank::ID::Mandiri;
    my $ibank = Finance::Bank::ID::Mandiri->new(
        username     => $args{username},
        password     => $args{password},
        logger       => $log,
        logger_dump  => Log::Any->get_logger(category => "Dumps"),
        verify_https => 1,
        save_dir     => $save_dir,
        mode         => $args{mode},
    );

    eval {
        my $bal = $ibank->check_balance;
        $log->debug("Balance: $bal");

        my $stmt = $ibank->get_statement(
            account    => $args{account},
            days       => $args{days},
            parse_opts => {return_datetime_obj=>0},
        );
        my $filename = sprintf("%s/mandiri.statement.%s.%s.to.%s.yaml",
                               $data_dir,
                               $stmt->{account},
                               $stmt->{start_date},
                               $stmt->{end_date});

        # insert balance to statement (since mandiri statement doesn't contain
        # any balance information)
        $stmt->{_balance} = $bal;

        $filename =~ s/[: ]//g; # : is for windows
        $log->info("Writing statements to YAML file `$filename' ...");
        require File::Slurper;
        require YAML::Syck;
        File::Slurper::write_text($filename, YAML::Syck::Dump($stmt));
    };

    if ($@) {
        $log->error("die: $@");
    }

    # no matter what, try to logout so we're not locked out for 10 minutes,
    # annoying
    eval { $ibank->logout };

    $log->info("End session");
    [200];
}

require Perinci::CmdLine::Classic;
Perinci::CmdLine::Classic->new(
    url => '/main/download_mandiri',
    extra_urls_for_version => ['/Finance/Bank/ID/Mandiri/'],
    log_any_app => 0, # because we'll init ourselves inside download_mandiri()
)->run;

# ABSTRACT: Download Mandiri statements
# PODNAME: download-mandiri

__END__

=pod

=encoding UTF-8

=head1 NAME

download-mandiri - Download Mandiri statements

=head1 VERSION

This document describes version 0.09 of download-mandiri (from Perl distribution App-IndonesianBankingUtils), released on 2017-05-16.

=head1 SYNOPSIS

First, put your username and password in C<~/download-mandiri.conf>, e.g.:

 username = ABCDEF0123
 password = 123456

Then:

 % download-mandiri

Get your statements in data dir (defaults to C<~/mandiri/>). See logs in your
log dir (defaults to C<~/mandiri/logs>).

=head1 DESCRIPTION

This is a command-line script which you can run from cron or whatever to
conveniently download Bank Mandiri statements. By default, it downloads 1
month's worth of statements to C<~/mandiri/>. To change this, use C<--days> and
C<--data_dir>.

=head1 OPTIONS

C<*> marks required options.

=head2 Main options

=over

=item B<--account>=I<s>

=item B<--data-dir>=I<s>

=item B<--days>=I<i>

Default value:

 31

=item B<--log-dir>=I<s>

=item B<--mode>=I<s>

Passed to Finance::Bank::ID::Mandiri constructor.

Default value:

 ""

=item B<--password>=I<s>*

=item B<--save-dir>=I<s>

=item B<--username>=I<s>*

=back

=head2 Configuration options

=over

=item B<--config-path>=I<filename>

Set path to configuration file.

Can be specified multiple times.

=item B<--config-profile>=I<s>

Set configuration profile to use.

=item B<--no-config>

Do not use any configuration file.

=back

=head2 Environment options

=over

=item B<--no-env>

Do not read environment for default options.

=back

=head2 Output options

=over

=item B<--format-options>=I<s>

Pass options to formatter.

=item B<--format>=I<s>

Choose output format, e.g. json, text.

Default value:

 undef

=item B<--json>

Equivalent to --format=json-pretty.

=item B<--naked-res>

When outputing as JSON, strip result envelope.

Default value:

 0

By default, when outputing as JSON, the full enveloped result is returned, e.g.:

    [200,"OK",[1,2,3],{"func.extra"=>4}]

The reason is so you can get the status (1st element), status message (2nd
element) as well as result metadata/extra result (4th element) instead of just
the result (3rd element). However, sometimes you want just the result, e.g. when
you want to pipe the result for more post-processing. In this case you can use
`--naked-res` so you just get:

    [1,2,3]


=back

=head2 Other options

=over

=item B<--help>, B<-h>, B<-?>

Display help message and exit.

=item B<--version>, B<-v>

Display program's version and exit.

=back

=head1 COMPLETION

This script has shell tab completion capability with support for several
shells.

=head2 bash

To activate bash completion for this script, put:

 complete -C download-mandiri download-mandiri

in your bash startup (e.g. F<~/.bashrc>). Your next shell session will then
recognize tab completion for the command. Or, you can also directly execute the
line above in your shell to activate immediately.

It is recommended, however, that you install L<shcompgen> which allows you to
activate completion scripts for several kinds of scripts on multiple shells.
Some CPAN distributions (those that are built with
L<Dist::Zilla::Plugin::GenShellCompletion>) will even automatically enable shell
completion for their included scripts (using L<shcompgen>) at installation time,
so you can immediately have tab completion.

=head2 tcsh

To activate tcsh completion for this script, put:

 complete download-mandiri 'p/*/`download-mandiri`/'

in your tcsh startup (e.g. F<~/.tcshrc>). Your next shell session will then
recognize tab completion for the command. Or, you can also directly execute the
line above in your shell to activate immediately.

It is also recommended to install L<shcompgen> (see above).

=head2 other shells

For fish and zsh, install L<shcompgen> as described above.

=head1 CONFIGURATION FILE

This script can read configuration files. Configuration files are in the format of L<IOD>, which is basically INI with some extra features.

By default, these names are searched for configuration filenames (can be changed using C<--config-path>): F<~/.config/download-mandiri.conf>, F<~/download-mandiri.conf>, or F</etc/download-mandiri.conf>.

All found files will be read and merged.

To disable searching for configuration files, pass C<--no-config>.

You can put multiple profiles in a single file by using section names like C<[profile=SOMENAME]> or C<[SOMESECTION profile=SOMENAME]>. Those sections will only be read if you specify the matching C<--config-profile SOMENAME>.

You can also put configuration for multiple programs inside a single file, and use filter C<program=NAME> in section names, e.g. C<[program=NAME ...]> or C<[SOMESECTION program=NAME]>. The section will then only be used when the reading program matches.

Finally, you can filter a section by environment variable using the filter C<env=CONDITION> in section names. For example if you only want a section to be read if a certain environment variable is true: C<[env=SOMEVAR ...]> or C<[SOMESECTION env=SOMEVAR ...]>. If you only want a section to be read when the value of an environment variable has value equals something: C<[env=HOSTNAME=blink ...]> or C<[SOMESECTION env=HOSTNAME=blink ...]>. If you only want a section to be read when the value of an environment variable does not equal something: C<[env=HOSTNAME!=blink ...]> or C<[SOMESECTION env=HOSTNAME!=blink ...]>. If you only want a section to be read when an environment variable contains something: C<[env=HOSTNAME*=server ...]> or C<[SOMESECTION env=HOSTNAME*=server ...]>. Note that currently due to simplistic parsing, there must not be any whitespace in the value being compared because it marks the beginning of a new section filter or section name.

List of available configuration parameters:

 account (see --account)
 data_dir (see --data-dir)
 days (see --days)
 format (see --format)
 format_options (see --format-options)
 log_dir (see --log-dir)
 mode (see --mode)
 naked_res (see --naked-res)
 password (see --password)
 save_dir (see --save-dir)
 username (see --username)

=head1 ENVIRONMENT

=head2 DOWNLOAD_MANDIRI_OPT => str

Specify additional command-line options.

=head1 FILES

F<~/.config/download-mandiri.conf>

F<~/download-mandiri.conf>

F</etc/download-mandiri.conf>

=head1 HOMEPAGE

Please visit the project's homepage at L<https://metacpan.org/release/App-IndonesianBankingUtils>.

=head1 SOURCE

Source repository is at L<https://github.com/perlancar/perl-App-IndonesianBankingUtils>.

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=App-IndonesianBankingUtils>

When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.

=head1 SEE ALSO

L<Finance::Bank::ID::Mandiri>

=head1 AUTHOR

perlancar <perlancar@cpan.org>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2017, 2016, 2015 by perlancar@cpan.org.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut
